<?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>180243</bug_id>
          
          <creation_ts>2017-12-01 04:40:14 -0800</creation_ts>
          <short_desc>WebDriver: auto-install pytest instead of importing it from wpt tools directory</short_desc>
          <delta_ts>2017-12-02 06:57:37 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebDriver</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bburg</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1376788</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-12-01 04:40:14 -0800</bug_when>
    <thetext>We don&apos;t really need the (old) version included in wpt tools dir, so we can simply remove it and use autoinstall instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1376791</commentid>
    <comment_count>1</comment_count>
      <attachid>328088</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-12-01 04:54:40 -0800</bug_when>
    <thetext>Created attachment 328088
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1376792</commentid>
    <comment_count>2</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-12-01 05:26:13 -0800</bug_when>
    <thetext>I don&apos;t know why the patch doesn&apos;t apply, but I suspect it&apos;s again because the script we use the apply patches doesn&apos;t deal with line endings. Anyway, we don&apos;t need EWS for this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1376863</commentid>
    <comment_count>3</comment_count>
      <attachid>328088</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2017-12-01 10:01:55 -0800</bug_when>
    <thetext>Comment on attachment 328088
Patch

r=me, yay!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377282</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-12-02 06:56:41 -0800</bug_when>
    <thetext>Committed r225447: &lt;https://trac.webkit.org/changeset/225447&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377283</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-12-02 06:57:37 -0800</bug_when>
    <thetext>&lt;rdar://problem/35814520&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>328088</attachid>
            <date>2017-12-01 04:54:40 -0800</date>
            <delta_ts>2017-12-01 10:01:55 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>wd-pytest.diff</filename>
            <type>text/plain</type>
            <size>737858</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA3NjA0
NGVjZDAxYS4uY2NjMWUyMjhmNGIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9U
b29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAxNy0xMi0wMSAgQ2FybG9zIEdhcmNp
YSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgV2ViRHJpdmVyOiBhdXRv
LWluc3RhbGwgcHl0ZXN0IGluc3RlYWQgb2YgaW1wb3J0aW5nIGl0IGZyb20gd3B0IHRvb2xzIGRp
cmVjdG9yeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTgwMjQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
V2UgZG9uJ3QgcmVhbGx5IG5lZWQgdGhlIChvbGQpIHZlcnNpb24gaW5jbHVkZWQgaW4gd3B0IHRv
b2xzIGRpciwgc28gd2UgY2FuIHNpbXBseSByZW1vdmUgaXQgYW5kIHVzZSBhdXRvaW5zdGFsbAor
ICAgICAgICBpbnN0ZWFkLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90aGlyZHBhcnR5
L19faW5pdF9fLnB5OgorICAgICAgICAoQXV0b2luc3RhbGxJbXBvcnRIb29rLmZpbmRfbW9kdWxl
KTogQ2hlY2sgcHl0ZXN0LgorICAgICAgICAoQXV0b2luc3RhbGxJbXBvcnRIb29rLl9pbnN0YWxs
X3B5dGVzdCk6IEluc3RhbGwgcHl0ZXN0LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvd2Vi
ZHJpdmVyX3Rlc3RzL3dlYmRyaXZlcl9zZWxlbml1bV9leGVjdXRvci5weTogSW1wb3J0IGF1dG9p
bnN0YWxsZWQgcHl0ZXN0LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvd2ViZHJpdmVyX3Rl
c3RzL3dlYmRyaXZlcl90ZXN0X3J1bm5lcl93M2MucHk6CisgICAgICAgIChXZWJEcml2ZXJUZXN0
UnVubmVyVzNDLnJ1bik6IFVwZGF0ZSB0aGUgc3VidGVzdCBwYXRoIHNpbmNlIHRoZSBuZXcgcHl0
ZXN0IHVzZXMgYSBkaWZmZXJlbnQgc3RyYXRlZ3kgZm9yCisgICAgICAgIHJvb3RkaXIuCisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS93ZWJkcml2ZXJfdGVzdHMvd2ViZHJpdmVyX3czY19leGVj
dXRvci5weTogSW1wb3J0IGF1dG9pbnN0YWxsZWQgcHl0ZXN0LgorCiAyMDE3LTExLTMwICBDYXJs
b3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBXZWJEcml2
ZXI6IGFkZCBzdXBwb3J0IGZvciBpbXBvcnRpbmcgYW5kIHJ1bm5pbmcgc2VsZW5pdW0gdGVzdHMK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9fX2luaXRfXy5w
eSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0eS9fX2luaXRfXy5weQppbmRleCBk
NzBjMWJmYjliMS4uYjhjYTA4NjA5MTMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvdGhpcmRwYXJ0eS9fX2luaXRfXy5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Ro
aXJkcGFydHkvX19pbml0X18ucHkKQEAgLTExMiw2ICsxMTIsOCBAQCBjbGFzcyBBdXRvaW5zdGFs
bEltcG9ydEhvb2sob2JqZWN0KToKICAgICAgICAgICAgIHNlbGYuX2luc3RhbGxfbW96cHJvY2Vz
cygpCiAgICAgICAgIGVsaWYgJy5weXRlc3RfdGltZW91dCcgaW4gZnVsbG5hbWU6CiAgICAgICAg
ICAgICBzZWxmLl9pbnN0YWxsX3B5dGVzdF90aW1lb3V0KCkKKyAgICAgICAgZWxpZiAnLnB5dGVz
dCcgaW4gZnVsbG5hbWU6CisgICAgICAgICAgICBzZWxmLl9pbnN0YWxsX3B5dGVzdCgpCiAKICAg
ICBkZWYgX2luc3RhbGxfbWVjaGFuaXplKHNlbGYpOgogICAgICAgICBzZWxmLl9pbnN0YWxsKCJo
dHRwczovL3B5cGkucHl0aG9uLm9yZy9wYWNrYWdlcy9zb3VyY2UvbS9tZWNoYW5pemUvbWVjaGFu
aXplLTAuMi41LnRhci5neiIsCkBAIC0xMzksNiArMTQxLDEyIEBAIGNsYXNzIEF1dG9pbnN0YWxs
SW1wb3J0SG9vayhvYmplY3QpOgogICAgICAgICBzZWxmLl9pbnN0YWxsKCJodHRwczovL3B5cGku
cHl0aG9uLm9yZy9wYWNrYWdlcy9jYy9iNy9iMmE2MTM2NWVhNmI2ZDJlODg4MTM2MGFlN2VkOGRh
ZDAzMjdhZDJkZjg5ZjJmMGJlNGEwMjMwNGRlYjIvcHl0ZXN0LXRpbWVvdXQtMS4yLjAudGFyLmd6
I21kNT04MzYwN2Q5MWFhMTYzNTYyYzdlZTgzNWRhNTdkMDYxZCIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAicHl0ZXN0LXRpbWVvdXQtMS4yLjAvcHl0ZXN0X3RpbWVvdXQucHkiKQog
CisgICAgZGVmIF9pbnN0YWxsX3B5dGVzdChzZWxmKToKKyAgICAgICAgc2VsZi5faW5zdGFsbCgi
aHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcGFja2FnZXMvMWYvZjgvOGNkNzRjMTY5NTIxNjNjZTBk
YjBiZDk1ZmRkODgxMGNiZjA5M2MwOGJlMDBlNmU2NjVlYmYwZGMzMTM4L3B5dGVzdC0zLjIuNS50
YXIuZ3ojbWQ1PTZkYmU5YmIwOTM4ODNmNzUzOTRhNjg5YTE0MjZhYzZmIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJweXRlc3QtMy4yLjUvX3B5dGVzdCIpCisgICAgICAgIHNlbGYu
X2luc3RhbGwoImh0dHBzOi8vcHlwaS5weXRob24ub3JnL3BhY2thZ2VzLzFmL2Y4LzhjZDc0YzE2
OTUyMTYzY2UwZGIwYmQ5NWZkZDg4MTBjYmYwOTNjMDhiZTAwZTZlNjY1ZWJmMGRjMzEzOC9weXRl
c3QtMy4yLjUudGFyLmd6I21kNT02ZGJlOWJiMDkzODgzZjc1Mzk0YTY4OWExNDI2YWM2ZiIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHl0ZXN0LTMuMi41L3B5dGVzdC5weSIpCisK
ICAgICBkZWYgX2luc3RhbGxfcHlsaW50KHNlbGYpOgogICAgICAgICBzZWxmLl9lbnN1cmVfYXV0
b2luc3RhbGxlZF9kaXJfaXNfaW5fc3lzX3BhdGgoKQogICAgICAgICBpZiAobm90IHNlbGYuX2Zz
LmV4aXN0cyhzZWxmLl9mcy5qb2luKF9BVVRPSU5TVEFMTEVEX0RJUiwgInB5bGludCIpKSBvcgpk
aWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS93ZWJkcml2ZXJfdGVzdHMvd2ViZHJp
dmVyX3NlbGVuaXVtX2V4ZWN1dG9yLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS93ZWJkcml2
ZXJfdGVzdHMvd2ViZHJpdmVyX3NlbGVuaXVtX2V4ZWN1dG9yLnB5CmluZGV4IGU5ZTM3ZDM0NjE2
Li4xMmE0OTUzNDgxMiAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS93ZWJkcml2
ZXJfdGVzdHMvd2ViZHJpdmVyX3NlbGVuaXVtX2V4ZWN1dG9yLnB5CisrKyBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvd2ViZHJpdmVyX3Rlc3RzL3dlYmRyaXZlcl9zZWxlbml1bV9leGVjdXRvci5w
eQpAQCAtMjcsNiArMjcsOSBAQCBpbXBvcnQgc3lzCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0
ZW0uZmlsZXN5c3RlbSBpbXBvcnQgRmlsZVN5c3RlbQogZnJvbSB3ZWJraXRweS5jb21tb24ud2Vi
a2l0X2ZpbmRlciBpbXBvcnQgV2ViS2l0RmluZGVyCiBpbXBvcnQgd2Via2l0cHkudGhpcmRwYXJ0
eS5hdXRvaW5zdGFsbGVkLm1vemxvZworaW1wb3J0IHdlYmtpdHB5LnRoaXJkcGFydHkuYXV0b2lu
c3RhbGxlZC5weXRlc3QKK2ltcG9ydCB3ZWJraXRweS50aGlyZHBhcnR5LmF1dG9pbnN0YWxsZWQu
cHl0ZXN0X3RpbWVvdXQKK2ltcG9ydCBweXRlc3QKIAogIyBTaW5jZSBXM0MgdGVzdHMgYWxzbyB1
c2UgcHl0ZXN0LCB3ZSB1c2UgcHl0ZXN0IGFuZCBzb21lIG90aGVyIHRvb2xzIGZvciBzZWxlbml1
bSB0b28uCiB3M2NfdG9vbHNfZGlyID0gV2ViS2l0RmluZGVyKEZpbGVTeXN0ZW0oKSkucGF0aF9m
cm9tX3dlYmtpdF9iYXNlKCdXZWJEcml2ZXJUZXN0cycsICdpbXBvcnRlZCcsICd3M2MnLCAndG9v
bHMnKQpAQCAtMzUsMTEgKzM4LDggQEAgdzNjX3Rvb2xzX2RpciA9IFdlYktpdEZpbmRlcihGaWxl
U3lzdGVtKCkpLnBhdGhfZnJvbV93ZWJraXRfYmFzZSgnV2ViRHJpdmVyVGVzdHMKIGRlZiBfZW5z
dXJlX2RpcmVjdG9yeV9pbl9wYXRoKGRpcmVjdG9yeSk6CiAgICAgaWYgbm90IGRpcmVjdG9yeSBp
biBzeXMucGF0aDoKICAgICAgICAgc3lzLnBhdGguaW5zZXJ0KDAsIGRpcmVjdG9yeSkKLV9lbnN1
cmVfZGlyZWN0b3J5X2luX3BhdGgob3MucGF0aC5qb2luKHczY190b29sc19kaXIsICdweXRlc3Qn
KSkKIF9lbnN1cmVfZGlyZWN0b3J5X2luX3BhdGgob3MucGF0aC5qb2luKHczY190b29sc19kaXIs
ICd3cHRydW5uZXInKSkKIAotaW1wb3J0IHB5dGVzdAotaW1wb3J0IHdlYmtpdHB5LnRoaXJkcGFy
dHkuYXV0b2luc3RhbGxlZC5weXRlc3RfdGltZW91dAogZnJvbSB3cHRydW5uZXIuZXhlY3V0b3Jz
LnB5dGVzdHJ1bm5lci5ydW5uZXIgaW1wb3J0IEhhcm5lc3NSZXN1bHRSZWNvcmRlciwgU3VidGVz
dFJlc3VsdFJlY29yZGVyLCBUZW1wb3JhcnlEaXJlY3RvcnkKIAogX2xvZyA9IGxvZ2dpbmcuZ2V0
TG9nZ2VyKF9fbmFtZV9fKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS93ZWJk
cml2ZXJfdGVzdHMvd2ViZHJpdmVyX3Rlc3RfcnVubmVyX3czYy5weSBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvd2ViZHJpdmVyX3Rlc3RzL3dlYmRyaXZlcl90ZXN0X3J1bm5lcl93M2MucHkKaW5k
ZXggNzM0YTJkMDU0N2YuLmQyNDgyMTc1OWM4IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L3dlYmRyaXZlcl90ZXN0cy93ZWJkcml2ZXJfdGVzdF9ydW5uZXJfdzNjLnB5CisrKyBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvd2ViZHJpdmVyX3Rlc3RzL3dlYmRyaXZlcl90ZXN0X3J1
bm5lcl93M2MucHkKQEAgLTk0LDggKzk0LDggQEAgY2xhc3MgV2ViRHJpdmVyVGVzdFJ1bm5lclcz
QyhvYmplY3QpOgogICAgICAgICAgICAgICAgIGhhcm5lc3NfcmVzdWx0LCB0ZXN0X3Jlc3VsdHMg
PSBleGVjdXRvci5ydW4odGVzdCkKICAgICAgICAgICAgICAgICByZXN1bHQgPSBXZWJEcml2ZXJU
ZXN0UmVzdWx0KHRlc3RfbmFtZSwgKmhhcm5lc3NfcmVzdWx0KQogICAgICAgICAgICAgICAgIGlm
IGhhcm5lc3NfcmVzdWx0WzBdID09ICdPSyc6Ci0gICAgICAgICAgICAgICAgICAgIGZvciB0ZXN0
X3Jlc3VsdCBpbiB0ZXN0X3Jlc3VsdHM6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQu
YWRkX3N1YnRlc3RfcmVzdWx0cygqdGVzdF9yZXN1bHQpCisgICAgICAgICAgICAgICAgICAgIGZv
ciBzdWJ0ZXN0LCBzdGF0dXMsIG1lc3NhZ2UsIGJhY2t0cmFjZSBpbiB0ZXN0X3Jlc3VsdHM6Cisg
ICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuYWRkX3N1YnRlc3RfcmVzdWx0cyhvcy5wYXRo
LmJhc2VuYW1lKHN1YnRlc3QpLCBzdGF0dXMsIG1lc3NhZ2UsIGJhY2t0cmFjZSkKICAgICAgICAg
ICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAjIEZJWE1FOiBoYW5kbGUgb3RoZXIg
cmVzdWx0cy4KICAgICAgICAgICAgICAgICAgICAgcGFzcwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS93ZWJkcml2ZXJfdGVzdHMvd2ViZHJpdmVyX3czY19leGVjdXRvci5weSBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvd2ViZHJpdmVyX3Rlc3RzL3dlYmRyaXZlcl93M2NfZXhl
Y3V0b3IucHkKaW5kZXggNDgwNGIyZTY3NTcuLjY0NjM0YzQ4NzU1IDEwMDY0NAotLS0gYS9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L3dlYmRyaXZlcl90ZXN0cy93ZWJkcml2ZXJfdzNjX2V4ZWN1dG9y
LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvd2ViZHJpdmVyX3Rlc3RzL3dlYmRyaXZl
cl93M2NfZXhlY3V0b3IucHkKQEAgLTI4LDYgKzI4LDggQEAgZnJvbSB3ZWJraXRweS5jb21tb24u
c3lzdGVtLmZpbGVzeXN0ZW0gaW1wb3J0IEZpbGVTeXN0ZW0KIGZyb20gd2Via2l0cHkuY29tbW9u
LndlYmtpdF9maW5kZXIgaW1wb3J0IFdlYktpdEZpbmRlcgogaW1wb3J0IHdlYmtpdHB5LnRoaXJk
cGFydHkuYXV0b2luc3RhbGxlZC5tb3psb2cKIGltcG9ydCB3ZWJraXRweS50aGlyZHBhcnR5LmF1
dG9pbnN0YWxsZWQubW96cHJvY2VzcworaW1wb3J0IHdlYmtpdHB5LnRoaXJkcGFydHkuYXV0b2lu
c3RhbGxlZC5weXRlc3QKK2ltcG9ydCB3ZWJraXRweS50aGlyZHBhcnR5LmF1dG9pbnN0YWxsZWQu
cHl0ZXN0X3RpbWVvdXQKIGZyb20gbW96bG9nIGltcG9ydCBzdHJ1Y3R1cmVkbG9nCiAKIHczY190
b29sc19kaXIgPSBXZWJLaXRGaW5kZXIoRmlsZVN5c3RlbSgpKS5wYXRoX2Zyb21fd2Via2l0X2Jh
c2UoJ1dlYkRyaXZlclRlc3RzJywgJ2ltcG9ydGVkJywgJ3czYycsICd0b29scycpCkBAIC0zNiwx
MSArMzgsOSBAQCB3M2NfdG9vbHNfZGlyID0gV2ViS2l0RmluZGVyKEZpbGVTeXN0ZW0oKSkucGF0
aF9mcm9tX3dlYmtpdF9iYXNlKCdXZWJEcml2ZXJUZXN0cwogZGVmIF9lbnN1cmVfZGlyZWN0b3J5
X2luX3BhdGgoZGlyZWN0b3J5KToKICAgICBpZiBub3QgZGlyZWN0b3J5IGluIHN5cy5wYXRoOgog
ICAgICAgICBzeXMucGF0aC5pbnNlcnQoMCwgZGlyZWN0b3J5KQotX2Vuc3VyZV9kaXJlY3Rvcnlf
aW5fcGF0aChvcy5wYXRoLmpvaW4odzNjX3Rvb2xzX2RpciwgJ3B5dGVzdCcpKQogX2Vuc3VyZV9k
aXJlY3RvcnlfaW5fcGF0aChvcy5wYXRoLmpvaW4odzNjX3Rvb2xzX2RpciwgJ3dlYmRyaXZlcicp
KQogX2Vuc3VyZV9kaXJlY3RvcnlfaW5fcGF0aChvcy5wYXRoLmpvaW4odzNjX3Rvb2xzX2Rpciwg
J3dwdHJ1bm5lcicpKQogCi1pbXBvcnQgd2Via2l0cHkudGhpcmRwYXJ0eS5hdXRvaW5zdGFsbGVk
LnB5dGVzdF90aW1lb3V0CiBmcm9tIHdwdHJ1bm5lci5leGVjdXRvcnMuYmFzZSBpbXBvcnQgV2Rz
cGVjRXhlY3V0b3IsIFdlYkRyaXZlclByb3RvY29sCiBmcm9tIHdwdHJ1bm5lci53ZWJkcml2ZXJf
c2VydmVyIGltcG9ydCBXZWJEcml2ZXJTZXJ2ZXIKIApkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVz
dHMvQ2hhbmdlTG9nIGIvV2ViRHJpdmVyVGVzdHMvQ2hhbmdlTG9nCmluZGV4IGQwMzU0OWNmNzMy
Li5jZWM2Y2E1MGQ4YyAxMDA2NDQKLS0tIGEvV2ViRHJpdmVyVGVzdHMvQ2hhbmdlTG9nCisrKyBi
L1dlYkRyaXZlclRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDE3LTEyLTAxICBD
YXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBXZWJE
cml2ZXI6IGF1dG8taW5zdGFsbCBweXRlc3QgaW5zdGVhZCBvZiBpbXBvcnRpbmcgaXQgZnJvbSB3
cHQgdG9vbHMgZGlyZWN0b3J5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xODAyNDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIGltcG9ydGVkL3NlbGVuaXVtL3B5L2NvbmZ0ZXN0LnB5OiBTdG9wIHBhdGNo
aW5nIHRoaXMgdG8gdXNlIHlpZWxkX2ZpeHR1cmUsIG5ldyBweXRlc3Qgc3VwcG9ydHMgdGhpcy4K
KyAgICAgICAgKiBpbXBvcnRlZC9zZWxlbml1bS9weS9zZXR1cC5jZmc6IFN0b3AgcGF0Y2hpbmcg
dGhpcywgc2luY2UgcHl0ZXN0IHN1cHBvcnRzIHRvb2w6cHl0ZXN0IGFzIGdyb3VwIG5hbWUuCisg
ICAgICAgICogaW1wb3J0ZWQvc2VsZW5pdW0vcHkvdGVzdC9zZWxlbml1bS93ZWJkcml2ZXIvY29t
bW9uL2FsZXJ0c190ZXN0cy5weTogU3RvcCBwYXRjaGluZyB0aGlzIHRvIHVzZSB5aWVsZF9maXh0
dXJlLAorICAgICAgICBuZXcgcHl0ZXN0IHN1cHBvcnRzIHRoaXMuCisgICAgICAgICogaW1wb3J0
ZWQvc2VsZW5pdW0vcHkvdGVzdC9zZWxlbml1bS93ZWJkcml2ZXIvY29tbW9uL2Nvb2tpZV90ZXN0
cy5weTogRGl0dG8uCisgICAgICAgICogaW1wb3J0ZWQvc2VsZW5pdW0vcHkvdGVzdC9zZWxlbml1
bS93ZWJkcml2ZXIvY29tbW9uL2ZyYW1lX3N3aXRjaGluZ190ZXN0cy5weTogRGl0dG8uCisgICAg
ICAgICogaW1wb3J0ZWQvc2VsZW5pdW0vcHkvdGVzdC9zZWxlbml1bS93ZWJkcml2ZXIvY29tbW9u
L3BhZ2VfbG9hZF90aW1lb3V0X3Rlc3RzLnB5OiBEaXR0by4KKyAgICAgICAgKiBpbXBvcnRlZC9z
ZWxlbml1bS9weS90ZXN0L3NlbGVuaXVtL3dlYmRyaXZlci9jb21tb24vd2luZG93X3N3aXRjaGlu
Z190ZXN0cy5weTogRGl0dG8uCisgICAgICAgICogaW1wb3J0ZWQvc2VsZW5pdW0vcHkvdGVzdC9z
ZWxlbml1bS93ZWJkcml2ZXIvc2FmYXJpL2NvbmZ0ZXN0LnB5OiBEaXR0by4KKyAgICAgICAgKiBp
bXBvcnRlZC9zZWxlbml1bS9weS90ZXN0L3NlbGVuaXVtL3dlYmRyaXZlci9zdXBwb3J0L2V2ZW50
X2ZpcmluZ193ZWJkcml2ZXJfdGVzdHMucHk6IERpdHRvLgorICAgICAgICAqIGltcG9ydGVkL3cz
Yy9pbXBvcnRlci5qc29uOiBTdG9wIGltcG9ydGluZyBweXRlc3QuCisgICAgICAgICogaW1wb3J0
ZWQvdzNjL3B5dGVzdC5pbmk6IEFkZGVkLgorICAgICAgICAqIGltcG9ydGVkL3czYy90b29scy9w
eXRlc3QvOiBSZW1vdmVkLgorCiAyMDE3LTExLTMwICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNn
YXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBXZWJEcml2ZXI6IGFkZCBzdXBwb3J0IGZvciBp
bXBvcnRpbmcgYW5kIHJ1bm5pbmcgc2VsZW5pdW0gdGVzdHMKZGlmZiAtLWdpdCBhL1dlYkRyaXZl
clRlc3RzL2ltcG9ydGVkL3NlbGVuaXVtL3B5L2NvbmZ0ZXN0LnB5IGIvV2ViRHJpdmVyVGVzdHMv
aW1wb3J0ZWQvc2VsZW5pdW0vcHkvY29uZnRlc3QucHkKaW5kZXggMmViOTc3NWVhZDEuLmVmMTFl
MDE3YzczIDEwMDY0NAotLS0gYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC9zZWxlbml1bS9weS9j
b25mdGVzdC5weQorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC9zZWxlbml1bS9weS9jb25m
dGVzdC5weQpAQCAtNjcsNyArNjcsNyBAQCBkZWYgcHl0ZXN0X2lnbm9yZV9jb2xsZWN0KHBhdGgs
IGNvbmZpZyk6CiBkcml2ZXJfaW5zdGFuY2UgPSBOb25lCiAKIAotQHB5dGVzdC55aWVsZF9maXh0
dXJlKHNjb3BlPSdmdW5jdGlvbicpCitAcHl0ZXN0LmZpeHR1cmUoc2NvcGU9J2Z1bmN0aW9uJykK
IGRlZiBkcml2ZXIocmVxdWVzdCk6CiAgICAga3dhcmdzID0ge30KIApAQCAtMTU3LDcgKzE1Nyw3
IEBAIGRlZiBwYWdlcyhkcml2ZXIsIHdlYnNlcnZlcik6CiAgICAgcmV0dXJuIFBhZ2VzKCkKIAog
Ci1AcHl0ZXN0LnlpZWxkX2ZpeHR1cmUoYXV0b3VzZT1UcnVlLCBzY29wZT0nc2Vzc2lvbicpCitA
cHl0ZXN0LmZpeHR1cmUoYXV0b3VzZT1UcnVlLCBzY29wZT0nc2Vzc2lvbicpCiBkZWYgc2VydmVy
KHJlcXVlc3QpOgogICAgIGRyaXZlcnMgPSByZXF1ZXN0LmNvbmZpZy5nZXRvcHRpb24oJ2RyaXZl
cnMnKQogICAgIGlmIGRyaXZlcnMgaXMgTm9uZSBvciAnUmVtb3RlJyBub3QgaW4gZHJpdmVyczoK
QEAgLTE5Niw3ICsxOTYsNyBAQCBkZWYgc2VydmVyKHJlcXVlc3QpOgogICAgICAgICBwcmludCgn
U2VsZW5pdW0gc2VydmVyIGhhcyBiZWVuIHRlcm1pbmF0ZWQnKQogCiAKLUBweXRlc3QueWllbGRf
Zml4dHVyZShhdXRvdXNlPVRydWUsIHNjb3BlPSdzZXNzaW9uJykKK0BweXRlc3QuZml4dHVyZShh
dXRvdXNlPVRydWUsIHNjb3BlPSdzZXNzaW9uJykKIGRlZiB3ZWJzZXJ2ZXIoKToKICAgICB3ZWJz
ZXJ2ZXIgPSBTaW1wbGVXZWJTZXJ2ZXIoaG9zdD1nZXRfbGFuX2lwKCkpCiAgICAgd2Vic2VydmVy
LnN0YXJ0KCkKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3NlbGVuaXVtL3B5
L3NldHVwLmNmZyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3NlbGVuaXVtL3B5L3NldHVwLmNm
ZwppbmRleCA4Yzk4NmJiMDc4NC4uMTM4NTI1OGEwZTggMTAwNjQ0Ci0tLSBhL1dlYkRyaXZlclRl
c3RzL2ltcG9ydGVkL3NlbGVuaXVtL3B5L3NldHVwLmNmZworKysgYi9XZWJEcml2ZXJUZXN0cy9p
bXBvcnRlZC9zZWxlbml1bS9weS9zZXR1cC5jZmcKQEAgLTUsNyArNSw3IEBAIHVuaXZlcnNhbCA9
IDEKIGV4Y2x1ZGUgPSAudG94LGRvY3Mvc291cmNlL2NvbmYucHkKIGlnbm9yZSA9IEU1MDEKIAot
W3B5dGVzdF0KK1t0b29sOnB5dGVzdF0KIGFkZG9wdHMgPSAtcj1hCiBweXRob25fZmlsZXMgPSB0
ZXN0XyoucHkgKl90ZXN0cy5weQogdGVzdHBhdGhzID0gdGVzdApkaWZmIC0tZ2l0IGEvV2ViRHJp
dmVyVGVzdHMvaW1wb3J0ZWQvc2VsZW5pdW0vcHkvdGVzdC9zZWxlbml1bS93ZWJkcml2ZXIvY29t
bW9uL2FsZXJ0c190ZXN0cy5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3NlbGVuaXVtL3B5
L3Rlc3Qvc2VsZW5pdW0vd2ViZHJpdmVyL2NvbW1vbi9hbGVydHNfdGVzdHMucHkKaW5kZXggY2M0
OTZjMzYzZDQuLjE2YWIxMmNhMWU1IDEwMDY0NAotLS0gYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRl
ZC9zZWxlbml1bS9weS90ZXN0L3NlbGVuaXVtL3dlYmRyaXZlci9jb21tb24vYWxlcnRzX3Rlc3Rz
LnB5CisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3NlbGVuaXVtL3B5L3Rlc3Qvc2VsZW5p
dW0vd2ViZHJpdmVyL2NvbW1vbi9hbGVydHNfdGVzdHMucHkKQEAgLTI5LDcgKzI5LDcgQEAgZnJv
bSBzZWxlbml1bS5jb21tb24uZXhjZXB0aW9ucyBpbXBvcnQgKAogICAgIFdlYkRyaXZlckV4Y2Vw
dGlvbikKIAogCi1AcHl0ZXN0LnlpZWxkX2ZpeHR1cmUoYXV0b3VzZT1UcnVlKQorQHB5dGVzdC5m
aXh0dXJlKGF1dG91c2U9VHJ1ZSkKIGRlZiBjbG9zZV9hbGVydChkcml2ZXIpOgogICAgIHlpZWxk
CiAgICAgdHJ5OgpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvc2VsZW5pdW0v
cHkvdGVzdC9zZWxlbml1bS93ZWJkcml2ZXIvY29tbW9uL2Nvb2tpZV90ZXN0cy5weSBiL1dlYkRy
aXZlclRlc3RzL2ltcG9ydGVkL3NlbGVuaXVtL3B5L3Rlc3Qvc2VsZW5pdW0vd2ViZHJpdmVyL2Nv
bW1vbi9jb29raWVfdGVzdHMucHkKaW5kZXggOTA4ZGNiMzMwNzQuLmFlMDgwZjUxMDgwIDEwMDY0
NAotLS0gYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC9zZWxlbml1bS9weS90ZXN0L3NlbGVuaXVt
L3dlYmRyaXZlci9jb21tb24vY29va2llX3Rlc3RzLnB5CisrKyBiL1dlYkRyaXZlclRlc3RzL2lt
cG9ydGVkL3NlbGVuaXVtL3B5L3Rlc3Qvc2VsZW5pdW0vd2ViZHJpdmVyL2NvbW1vbi9jb29raWVf
dGVzdHMucHkKQEAgLTMzLDcgKzMzLDcgQEAgZGVmIGNvb2tpZSh3ZWJzZXJ2ZXIpOgogICAgIHJl
dHVybiBjb29raWUKIAogCi1AcHl0ZXN0LnlpZWxkX2ZpeHR1cmUoYXV0b3VzZT1UcnVlKQorQHB5
dGVzdC5maXh0dXJlKGF1dG91c2U9VHJ1ZSkKIGRlZiBwYWdlcyhyZXF1ZXN0LCBkcml2ZXIsIHBh
Z2VzKToKICAgICBwYWdlcy5sb2FkKCdzaW1wbGVUZXN0Lmh0bWwnKQogICAgIHlpZWxkIHBhZ2Vz
CmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC9zZWxlbml1bS9weS90ZXN0L3Nl
bGVuaXVtL3dlYmRyaXZlci9jb21tb24vZnJhbWVfc3dpdGNoaW5nX3Rlc3RzLnB5IGIvV2ViRHJp
dmVyVGVzdHMvaW1wb3J0ZWQvc2VsZW5pdW0vcHkvdGVzdC9zZWxlbml1bS93ZWJkcml2ZXIvY29t
bW9uL2ZyYW1lX3N3aXRjaGluZ190ZXN0cy5weQppbmRleCA3OGUyNGJkMWFkMy4uYmQ5Y2M1ZDll
ZWMgMTAwNjQ0Ci0tLSBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3NlbGVuaXVtL3B5L3Rlc3Qv
c2VsZW5pdW0vd2ViZHJpdmVyL2NvbW1vbi9mcmFtZV9zd2l0Y2hpbmdfdGVzdHMucHkKKysrIGIv
V2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvc2VsZW5pdW0vcHkvdGVzdC9zZWxlbml1bS93ZWJkcml2
ZXIvY29tbW9uL2ZyYW1lX3N3aXRjaGluZ190ZXN0cy5weQpAQCAtMzgsNyArMzgsNyBAQCBmcm9t
IHNlbGVuaXVtLndlYmRyaXZlci5zdXBwb3J0IGltcG9ydCBleHBlY3RlZF9jb25kaXRpb25zIGFz
IEVDCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogCi1AcHl0ZXN0
LnlpZWxkX2ZpeHR1cmUoYXV0b3VzZT1UcnVlKQorQHB5dGVzdC5maXh0dXJlKGF1dG91c2U9VHJ1
ZSkKIGRlZiByZXN0b3JlX2RlZmF1bHRfY29udGV4dChkcml2ZXIpOgogICAgIHlpZWxkCiAgICAg
ZHJpdmVyLnN3aXRjaF90by5kZWZhdWx0X2NvbnRlbnQoKQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVy
VGVzdHMvaW1wb3J0ZWQvc2VsZW5pdW0vcHkvdGVzdC9zZWxlbml1bS93ZWJkcml2ZXIvY29tbW9u
L3BhZ2VfbG9hZF90aW1lb3V0X3Rlc3RzLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvc2Vs
ZW5pdW0vcHkvdGVzdC9zZWxlbml1bS93ZWJkcml2ZXIvY29tbW9uL3BhZ2VfbG9hZF90aW1lb3V0
X3Rlc3RzLnB5CmluZGV4IGIxZTM3NTAyNjUyLi5jMzExOTExYzc4MyAxMDA2NDQKLS0tIGEvV2Vi
RHJpdmVyVGVzdHMvaW1wb3J0ZWQvc2VsZW5pdW0vcHkvdGVzdC9zZWxlbml1bS93ZWJkcml2ZXIv
Y29tbW9uL3BhZ2VfbG9hZF90aW1lb3V0X3Rlc3RzLnB5CisrKyBiL1dlYkRyaXZlclRlc3RzL2lt
cG9ydGVkL3NlbGVuaXVtL3B5L3Rlc3Qvc2VsZW5pdW0vd2ViZHJpdmVyL2NvbW1vbi9wYWdlX2xv
YWRfdGltZW91dF90ZXN0cy5weQpAQCAtMjAsNyArMjAsNyBAQCBpbXBvcnQgcHl0ZXN0CiBmcm9t
IHNlbGVuaXVtLmNvbW1vbi5leGNlcHRpb25zIGltcG9ydCBUaW1lb3V0RXhjZXB0aW9uCiAKIAot
QHB5dGVzdC55aWVsZF9maXh0dXJlKGF1dG91c2U9VHJ1ZSkKK0BweXRlc3QuZml4dHVyZShhdXRv
dXNlPVRydWUpCiBkZWYgcmVzZXRfdGltZW91dHMoZHJpdmVyKToKICAgICB5aWVsZAogICAgIGRy
aXZlci5zZXRfcGFnZV9sb2FkX3RpbWVvdXQoMzAwKQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVz
dHMvaW1wb3J0ZWQvc2VsZW5pdW0vcHkvdGVzdC9zZWxlbml1bS93ZWJkcml2ZXIvY29tbW9uL3dp
bmRvd19zd2l0Y2hpbmdfdGVzdHMucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC9zZWxlbml1
bS9weS90ZXN0L3NlbGVuaXVtL3dlYmRyaXZlci9jb21tb24vd2luZG93X3N3aXRjaGluZ190ZXN0
cy5weQppbmRleCAxY2JlMzg1NWRjYS4uNzdlOTFhMzhjYjcgMTAwNjQ0Ci0tLSBhL1dlYkRyaXZl
clRlc3RzL2ltcG9ydGVkL3NlbGVuaXVtL3B5L3Rlc3Qvc2VsZW5pdW0vd2ViZHJpdmVyL2NvbW1v
bi93aW5kb3dfc3dpdGNoaW5nX3Rlc3RzLnB5CisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVk
L3NlbGVuaXVtL3B5L3Rlc3Qvc2VsZW5pdW0vd2ViZHJpdmVyL2NvbW1vbi93aW5kb3dfc3dpdGNo
aW5nX3Rlc3RzLnB5CkBAIC0yNCw3ICsyNCw3IEBAIGZyb20gc2VsZW5pdW0ud2ViZHJpdmVyLnN1
cHBvcnQgaW1wb3J0IGV4cGVjdGVkX2NvbmRpdGlvbnMgYXMgRUMKIGZyb20gc2VsZW5pdW0ud2Vi
ZHJpdmVyLnN1cHBvcnQudWkgaW1wb3J0IFdlYkRyaXZlcldhaXQKIAogCi1AcHl0ZXN0LnlpZWxk
X2ZpeHR1cmUoYXV0b3VzZT1UcnVlKQorQHB5dGVzdC5maXh0dXJlKGF1dG91c2U9VHJ1ZSkKIGRl
ZiBjbG9zZV93aW5kb3dzKGRyaXZlcik6CiAgICAgbWFpbl93aW5kb3dzX2hhbmRsZSA9IGRyaXZl
ci5jdXJyZW50X3dpbmRvd19oYW5kbGUKICAgICB5aWVsZApkaWZmIC0tZ2l0IGEvV2ViRHJpdmVy
VGVzdHMvaW1wb3J0ZWQvc2VsZW5pdW0vcHkvdGVzdC9zZWxlbml1bS93ZWJkcml2ZXIvc2FmYXJp
L2NvbmZ0ZXN0LnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvc2VsZW5pdW0vcHkvdGVzdC9z
ZWxlbml1bS93ZWJkcml2ZXIvc2FmYXJpL2NvbmZ0ZXN0LnB5CmluZGV4IGFhZDRlNTAyYTc4Li42
YWE4OTY4YmI2NiAxMDA2NDQKLS0tIGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvc2VsZW5pdW0v
cHkvdGVzdC9zZWxlbml1bS93ZWJkcml2ZXIvc2FmYXJpL2NvbmZ0ZXN0LnB5CisrKyBiL1dlYkRy
aXZlclRlc3RzL2ltcG9ydGVkL3NlbGVuaXVtL3B5L3Rlc3Qvc2VsZW5pdW0vd2ViZHJpdmVyL3Nh
ZmFyaS9jb25mdGVzdC5weQpAQCAtMzAsNyArMzAsNyBAQCBkZWYgZHJpdmVyX2t3YXJncygpOgog
ICAgIHJldHVybiB7fQogCiAKLUBweXRlc3QueWllbGRfZml4dHVyZQorQHB5dGVzdC5maXh0dXJl
CiBkZWYgZHJpdmVyKGRyaXZlcl9jbGFzcywgZHJpdmVyX2t3YXJncyk6CiAgICAgZHJpdmVyID0g
ZHJpdmVyX2NsYXNzKCoqZHJpdmVyX2t3YXJncykKICAgICB5aWVsZCBkcml2ZXIKZGlmZiAtLWdp
dCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3NlbGVuaXVtL3B5L3Rlc3Qvc2VsZW5pdW0vd2Vi
ZHJpdmVyL3N1cHBvcnQvZXZlbnRfZmlyaW5nX3dlYmRyaXZlcl90ZXN0cy5weSBiL1dlYkRyaXZl
clRlc3RzL2ltcG9ydGVkL3NlbGVuaXVtL3B5L3Rlc3Qvc2VsZW5pdW0vd2ViZHJpdmVyL3N1cHBv
cnQvZXZlbnRfZmlyaW5nX3dlYmRyaXZlcl90ZXN0cy5weQppbmRleCBmNDM3YTQ0Njg2My4uMTI0
NmQ5NjRiMWIgMTAwNjQ0Ci0tLSBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3NlbGVuaXVtL3B5
L3Rlc3Qvc2VsZW5pdW0vd2ViZHJpdmVyL3N1cHBvcnQvZXZlbnRfZmlyaW5nX3dlYmRyaXZlcl90
ZXN0cy5weQorKysgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC9zZWxlbml1bS9weS90ZXN0L3Nl
bGVuaXVtL3dlYmRyaXZlci9zdXBwb3J0L2V2ZW50X2ZpcmluZ193ZWJkcml2ZXJfdGVzdHMucHkK
QEAgLTI4LDcgKzI4LDcgQEAgZnJvbSBzZWxlbml1bS53ZWJkcml2ZXIuc3VwcG9ydC5ldmVudHMg
aW1wb3J0IEV2ZW50RmlyaW5nV2ViRHJpdmVyLCBBYnN0cmFjdEV2ZW4KIGZyb20gc2VsZW5pdW0u
d2ViZHJpdmVyLnN1cHBvcnQudWkgaW1wb3J0IFdlYkRyaXZlcldhaXQKIAogCi1AcHl0ZXN0Lnlp
ZWxkX2ZpeHR1cmUKK0BweXRlc3QuZml4dHVyZQogZGVmIGxvZygpOgogICAgIGxvZyA9IEJ5dGVz
SU8oKQogICAgIHlpZWxkIGxvZwpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQv
dzNjL2ltcG9ydGVyLmpzb24gYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvaW1wb3J0ZXIu
anNvbgppbmRleCBkYmE2ZGMzMGY1Mi4uMjcxNTYwMjZjZWMgMTAwNjQ0Ci0tLSBhL1dlYkRyaXZl
clRlc3RzL2ltcG9ydGVkL3czYy9pbXBvcnRlci5qc29uCisrKyBiL1dlYkRyaXZlclRlc3RzL2lt
cG9ydGVkL3czYy9pbXBvcnRlci5qc29uCkBAIC0yLDcgKzIsNiBAQAogICAgICJyZXBvc2l0b3J5
IjogImh0dHBzOi8vZ2l0aHViLmNvbS93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzLmdpdCIsCiAgICAg
InJldmlzaW9uIjogIjJiNTAzODllZTcyZDg5ZGQwYmUxMmJjNmNhNTRhNmU5NWM5OGQxNjMiLAog
ICAgICJwYXRoc190b19pbXBvcnQiOiBbCi0gICAgICAgICJ0b29scy9weXRlc3QiLAogICAgICAg
ICAidG9vbHMvd2ViZHJpdmVyIiwKICAgICAgICAgInRvb2xzL3dwdHJ1bm5lciIsCiAgICAgICAg
ICJ3ZWJkcml2ZXIiCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvcHl0
ZXN0LmluaSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy9weXRlc3QuaW5pCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5mNGFhYmFlMmIxNwotLS0gL2Rldi9udWxs
CisrKyBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy9weXRlc3QuaW5pCkBAIC0wLDAgKzEs
MiBAQAorIyBQeXRlc3QgY29uZmlnIGZpbGUuIFdlIGRvbid0IGhhdmUgYW55IHNwZWNpYWwgY29u
ZmlndXJhdGlvbiBmb3IgcHl0ZXN0LAorIyBidXQgdGhlIGV4aXN0YW5jZSBvZiB0aGlzIGZpbGUg
aGVyZSBkZXRlcm1pbmVzIHRoZSByb290ZGlyIHVzZWQgYnkgcHl0ZXN0LgpkaWZmIC0tZ2l0IGEv
V2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC8uY292ZXJhZ2VyYyBiL1dl
YkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvLmNvdmVyYWdlcmMKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3ZGI2NGUwOWMxLi4wMDAwMDAwMDAwMAotLS0gYS9X
ZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0Ly5jb3ZlcmFnZXJjCisrKyAv
ZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi1bcnVuXQotb21pdCA9IAotICAgICMgc3RhbmRsb25l
dGVtcGxhdGUgaXMgcmVhZCBkeW5hbWljYWxseSBhbmQgdGVzdGVkIGJ5IHRlc3RfZ2Vuc2NyaXB0
Ci0gICAgKnN0YW5kYWxvbmV0ZW1wbGF0ZS5weQotICAgICMgb2xkaW50ZXJwcmV0IGNvdWxkIGJl
IHJlbW92ZWQsIGFzIGl0IGlzIG5vIGxvbmdlciB1c2VkIGluIHB5MjYrCi0gICAgKm9sZGludGVy
cHJldC5weQotICAgIHZlbmRvcmVkX3BhY2thZ2VzCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0
cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0Ly5naXRhdHRyaWJ1dGVzIGIvV2ViRHJpdmVyVGVz
dHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC8uZ2l0YXR0cmlidXRlcwpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMjQyZDNkYTBkNzQuLjAwMDAwMDAwMDAwCi0tLSBhL1dlYkRyaXZl
clRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvLmdpdGF0dHJpYnV0ZXMKKysrIC9kZXYv
bnVsbApAQCAtMSArMCwwIEBACi1DSEFOR0VMT0cgICAgbWVyZ2U9dW5pb24KZGlmZiAtLWdpdCBh
L1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvLmdpdGh1Yi9JU1NVRV9U
RU1QTEFURS5tZCBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvLmdp
dGh1Yi9JU1NVRV9URU1QTEFURS5tZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmM2
MmU4YTNmN2QuLjAwMDAwMDAwMDAwCi0tLSBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90
b29scy9weXRlc3QvLmdpdGh1Yi9JU1NVRV9URU1QTEFURS5tZAorKysgL2Rldi9udWxsCkBAIC0x
LDggKzAsMCBAQAotVGhhbmtzIGZvciBzdWJtaXR0aW5nIGFuIGlzc3VlIQotCi1IZXJlJ3MgYSBx
dWljayBjaGVja2xpc3QgaW4gd2hhdCB0byBpbmNsdWRlOgotCi0tIFsgXSBJbmNsdWRlIGEgZGV0
YWlsZWQgZGVzY3JpcHRpb24gb2YgdGhlIGJ1ZyBvciBzdWdnZXN0aW9uCi0tIFsgXSBgcGlwIGxp
c3RgIG9mIHRoZSB2aXJ0dWFsIGVudmlyb25tZW50IHlvdSBhcmUgdXNpbmcKLS0gWyBdIHB5LnRl
c3QgYW5kIG9wZXJhdGluZyBzeXN0ZW0gdmVyc2lvbnMKLS0gWyBdIE1pbmltYWwgZXhhbXBsZSBp
ZiBwb3NzaWJsZQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xz
L3B5dGVzdC8uZ2l0aHViL1BVTExfUkVRVUVTVF9URU1QTEFURS5tZCBiL1dlYkRyaXZlclRlc3Rz
L2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvLmdpdGh1Yi9QVUxMX1JFUVVFU1RfVEVNUExBVEUu
bWQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwOWVkY2U0M2QzLi4wMDAwMDAwMDAw
MAotLS0gYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0Ly5naXRodWIv
UFVMTF9SRVFVRVNUX1RFTVBMQVRFLm1kCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1U
aGFua3MgZm9yIHN1Ym1pdHRpbmcgYSBQUiwgeW91ciBjb250cmlidXRpb24gaXMgcmVhbGx5IGFw
cHJlY2lhdGVkIQotCi1IZXJlJ3MgYSBxdWljayBjaGVja2xpc3QgdGhhdCBzaG91bGQgYmUgcHJl
c2VudCBpbiBQUnM6Ci0KLS0gWyBdIFRhcmdldDogZm9yIGJ1ZyBvciBkb2MgZml4ZXMsIHRhcmdl
dCBgbWFzdGVyYDsgZm9yIG5ldyBmZWF0dXJlcywgdGFyZ2V0IGBmZWF0dXJlc2AKLS0gWyBdIE1h
a2Ugc3VyZSB0byBpbmNsdWRlIG9uZSBvciBtb3JlIHRlc3RzIGZvciB5b3VyIGNoYW5nZQotLSBb
IF0gQWRkIHlvdXJzZWxmIHRvIGBBVVRIT1JTYAotLSBbIF0gQWRkIGEgbmV3IGVudHJ5IHRvIHRo
ZSBgQ0hBTkdFTE9HYCAoY2hvb3NlIGFueSBvcGVuIHBvc2l0aW9uIHRvIGF2b2lkIG1lcmdlIGNv
bmZsaWN0cyB3aXRoIG90aGVyIFBScykgCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBv
cnRlZC93M2MvdG9vbHMvcHl0ZXN0Ly5naXRpZ25vcmUgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRl
ZC93M2MvdG9vbHMvcHl0ZXN0Ly5naXRpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGU0MzU1Yjg1OWNjLi4wMDAwMDAwMDAwMAotLS0gYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRl
ZC93M2MvdG9vbHMvcHl0ZXN0Ly5naXRpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCww
IEBACi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IGBoZ2ltcG9ydHN2bmAKLS5zdm4KLS5o
Z3N2bgotCi0jIElnbm9yZSBsb2NhbCB2aXJ0dWFsZW52cwotbGliLwotYmluLwotaW5jbHVkZS8K
LS5QeXRob24vCi0KLSMgVGhlc2UgbGluZXMgYXJlIHN1Z2dlc3RlZCBhY2NvcmRpbmcgdG8gdGhl
IHN2bjppZ25vcmUgcHJvcGVydHkKLSMgRmVlbCBmcmVlIHRvIGVuYWJsZSB0aGVtIGJ5IHVuY29t
bWVudGluZyB0aGVtCi0qLnB5YwotKi5weW8KLSouc3dwCi0qLmNsYXNzCi0qLm9yaWcKLSp+Ci0K
LS5lZ2dzLwotCi1kb2MvKi9fYnVpbGQKLWJ1aWxkLwotZGlzdC8KLSouZWdnLWluZm8KLWlzc3Vl
LwotZW52LwotLmVudi8KLTNyZHBhcnR5LwotLnRveAotLmNhY2hlCi0uY292ZXJhZ2UKLS5yb3Bl
cHJvamVjdAotLmlkZWEKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90
b29scy9weXRlc3QvLnRyYXZpcy55bWwgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9v
bHMvcHl0ZXN0Ly50cmF2aXMueW1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYThm
MzZlOTVmOC4uMDAwMDAwMDAwMDAKLS0tIGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rv
b2xzL3B5dGVzdC8udHJhdmlzLnltbAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLXN1
ZG86IGZhbHNlCi1sYW5ndWFnZTogcHl0aG9uCi1weXRob246Ci0gICAgLSAnMy41JwotIyBjb21t
YW5kIHRvIGluc3RhbGwgZGVwZW5kZW5jaWVzCi1pbnN0YWxsOiAicGlwIGluc3RhbGwgLVUgdG94
IgotIyAjIGNvbW1hbmQgdG8gcnVuIHRlc3RzCi1lbnY6Ci0gIG1hdHJpeDoKLSAgICAjIGNvdmVy
YWxscyBpcyBub3QgbGlzdGVkIGluIHRveCdzIGVudmxpc3QsIGJ1dCBzaG91bGQgcnVuIGluIHRy
YXZpcwotICAgIC0gVEVTVEVOVj1jb3ZlcmFsbHMKLSAgICAjIG5vdGU6IHBsZWFzZSB1c2UgInRv
eCAtLWxpc3RlbnZzIiB0byBwb3B1bGF0ZSB0aGUgYnVpbGQgbWF0cml4IGJlbG93Ci0gICAgLSBU
RVNURU5WPWxpbnRpbmcKLSAgICAtIFRFU1RFTlY9cHkyNgotICAgIC0gVEVTVEVOVj1weTI3Ci0g
ICAgLSBURVNURU5WPXB5MzMKLSAgICAtIFRFU1RFTlY9cHkzNAotICAgIC0gVEVTVEVOVj1weTM1
Ci0gICAgLSBURVNURU5WPXB5cHkKLSAgICAtIFRFU1RFTlY9cHkyNy1wZXhwZWN0Ci0gICAgLSBU
RVNURU5WPXB5MjcteGRpc3QKLSAgICAtIFRFU1RFTlY9cHkyNy10cmlhbAotICAgIC0gVEVTVEVO
Vj1weTM1LXBleHBlY3QKLSAgICAtIFRFU1RFTlY9cHkzNS14ZGlzdAotICAgIC0gVEVTVEVOVj1w
eTM1LXRyaWFsCi0gICAgLSBURVNURU5WPXB5Mjctbm9ieXRlCi0gICAgLSBURVNURU5WPWRvY3Rl
c3RpbmcKLSAgICAtIFRFU1RFTlY9cHkyNy1jeGZyZWV6ZQotCi1zY3JpcHQ6IHRveCAtLXJlY3Jl
YXRlIC1lICRURVNURU5WCi0KLW5vdGlmaWNhdGlvbnM6Ci0gIGlyYzoKLSAgICBjaGFubmVsczoK
LSAgICAgIC0gImNoYXQuZnJlZW5vZGUubmV0I3B5dGVzdCIKLSAgICBvbl9zdWNjZXNzOiBjaGFu
Z2UKLSAgICBvbl9mYWlsdXJlOiBjaGFuZ2UKLSAgICBza2lwX2pvaW46IHRydWUKLSAgZW1haWw6
Ci0gICAgLSBweXRlc3QtY29tbWl0QHB5dGhvbi5vcmcKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRl
c3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvQVVUSE9SUyBiL1dlYkRyaXZlclRlc3RzL2lt
cG9ydGVkL3czYy90b29scy9weXRlc3QvQVVUSE9SUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggZGZjMGE1NDJlYzUuLjAwMDAwMDAwMDAwCi0tLSBhL1dlYkRyaXZlclRlc3RzL2ltcG9y
dGVkL3czYy90b29scy9weXRlc3QvQVVUSE9SUworKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAg
QEAKLUhvbGdlciBLcmVrZWwsIGhvbGdlciBhdCBtZXJsaW51eCBldQotbWVybGludXggR21iSCwg
R2VybWFueSwgb2ZmaWNlIGF0IG1lcmxpbnV4IGV1Ci0KLUNvbnRyaWJ1dG9ycyBpbmNsdWRlOjoK
LQotQWJoaWplZXQgS2FzdXJkZQotQW5hdG9seSBCdWJlbmtvZmYKLUFuZHJlYXMgWmVpZGxlcgot
QW5keSBGcmVlbGFuZAotQW50aG9uIHZhbiBkZXIgTmV1dAotQXJtaW4gUmlnbwotQXJvbiBDdXJ6
b24KLUF2aXYgUGFsaXZvZGEKLUJlbmphbWluIFBldGVyc29uCi1Cb2IgSXBwb2xpdG8KLUJyaWFu
IERvcnNleQotQnJpYW4gT2trZW4KLUJyaWFubmEgTGF1Z2hlcgotQnJ1bm8gT2xpdmVpcmEKLUNh
cmwgRnJpZWRyaWNoIEJvbHoKLUNoYXJsZXMgQ2xvdWQKLUNocmlzIExhbWIKLUNocmlzdGlhbiBU
aGV1bmVydAotQ2hyaXN0aWFuIFRpc21lcgotQ2hyaXN0b3BoZXIgR2lsbGluZwotRGFuaWVsIEdy
YW5hCi1EYW5pZWwgSGFobGVyCi1EYW5pZWwgTnVyaQotRGF2ZSBIdW50Ci1EYXZpZCBNb2hyCi1E
YXZpZCBWaWVycmEKLUVkaXNvbiBHdXN0YXZvIE11ZW56Ci1FZHVhcmRvIFNjaGV0dGlubwotRW5k
cmUgR2FsYWN6aQotRWxpemF2ZXRhIFNoYXNoa292YQotRXJpYyBIdW5zYmVyZ2VyCi1FcmljIFNp
ZWdlcm1hbgotRXJpayBNLiBCcmF5Ci1GbG9yaWFuIEJydWhpbgotRmxvcmlzIEJydXlub29naGUK
LUdhYnJpZWwgUmVpcwotR2Vvcmd5IER5dWxkaW4KLUdyYWhhbSBIb3JsZXIKLUdyaWcgR2hlb3Jn
aGl1Ci1HdWlkbyBXZXNkb3JwCi1IYXJhbGQgQXJtaW4gTWFzc2EKLUlhbiBCaWNraW5nCi1KYWFw
IEJyb2VraHVpemVuCi1KYW4gQmFsc3RlcgotSmFubmUgVmFuaGFsYQotSmFzb24gUi4gQ29vbWJz
Ci1Kb3NodWEgQnJvbnNvbgotSnVya28gR29zcG9kbmV0acSHCi1LYXRhcnp5bmEgSmFjaGltCi1L
ZXZpbiBDb3gKLUxlZSBLYW1lbnRza3kKLUx1a2FzIEJlZG5hcgotTWFjaWVrIEZpamFsa293c2tp
Ci1NYWhvCi1NYXJjIFNjaGxhaWNoCi1NYXJrIEFicmFtb3dpdHoKLU1hcmt1cyBVbnRlcndhZGl0
emVyCi1NYXJ0aWpuIEZhYXNzZW4KLU1hdHQgQmFjaG1hbm4KLU1pY2hhZWwgQXF1aWxpbmEKLU1p
Y2hhZWwgQmlydHdlbGwKLU1pY2hhZWwgRHJvZXR0Ym9vbQotTmljb2xhcyBEZWxhYnkKLVBpZXRl
ciBNdWxkZXIKLVBpb3RyIEJhbmFzemtpZXdpY3oKLVB1bnlhc2hsb2thIEJpc3dhbAotUmFsZiBT
Y2htaXR0Ci1SYXBoYWVsIFBpZXJ6aW5hCi1Sb25ueSBQZmFubnNjaG1pZHQKLVJvc3MgTGF3bGV5
Ci1SeWFuIFdvb2RlbgotU2FtdWVsZSBQZWRyb25pCi1Ub20gVmluZXIKLVRyZXZvciBCZWtvbGF5
Ci1Xb3V0ZXIgdmFuIEFja29veQotRGF2aWQgRMOtYXotQmFycXVlcm8KLUVyaWMgSHVuc2Jlcmdl
cgotU2ltb24gR29taXplbGoKLVJ1c3NlbCBXaW5kZXIKLUJlbiBXZWJiCi1BbGV4ZWkgS296bGVu
b2sKLUNhbCBMZWVtaW5nCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mv
dG9vbHMvcHl0ZXN0L0NIQU5HRUxPRy5yc3QgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mv
dG9vbHMvcHl0ZXN0L0NIQU5HRUxPRy5yc3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGYxOGY2NDZmMDA4Li4wMDAwMDAwMDAwMAotLS0gYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93
M2MvdG9vbHMvcHl0ZXN0L0NIQU5HRUxPRy5yc3QKKysrIC9kZXYvbnVsbApAQCAtMSwyNTg2ICsw
LDAgQEAKLTIuOS4xCi09PT09PQotCi0qKkJ1ZyBGaXhlcyoqCi0KLSogSW1wcm92ZSBlcnJvciBt
ZXNzYWdlIHdoZW4gYSBwbHVnaW4gZmFpbHMgdG8gbG9hZC4KLSAgVGhhbmtzIGBAbmljb2RkZW11
c2BfIGZvciB0aGUgUFIuCi0KLSogRml4IChgIzExNzggPGh0dHBzOi8vZ2l0aHViLmNvbS9weXRl
c3QtZGV2L3B5dGVzdC9pc3N1ZXMvMTE3OD5gXyk6Ci0gIGBgcHl0ZXN0LmZhaWxgYCB3aXRoIG5v
bi1hc2NpaSBjaGFyYWN0ZXJzIHJhaXNlcyBhbiBpbnRlcm5hbCBweXRlc3QgZXJyb3IuCi0gIFRo
YW5rcyBgQG5pY29kZGVtdXNgXyBmb3IgdGhlIFBSLgotCi0qIEZpeCAoYCM0NjlgXyk6IGp1bml0
IHBhcnNlcyByZXBvcnQubm9kZWlkIGluY29ycmVjdGx5LCB3aGVuIHBhcmFtcyBJRHMKLSAgY29u
dGFpbiBgYDo6YGAuIFRoYW5rcyBgQHRvbXZpbmVyYF8gZm9yIHRoZSBQUiAoYCMxNDMxYF8pLgot
Ci0qIEZpeCAoYCM1NzggPGh0dHBzOi8vZ2l0aHViLmNvbS9weXRlc3QtZGV2L3B5dGVzdC9pc3N1
ZXMvNTc4PmBfKTogU3ludGF4RXJyb3JzCi0gIGNvbnRhaW5pbmcgbm9uLWFzY2lpIGxpbmVzIGF0
IHRoZSBwb2ludCBvZiBmYWlsdXJlIGdlbmVyYXRlZCBhbiBpbnRlcm5hbAotICBweS50ZXN0IGVy
cm9yLgotICBUaGFua3MgYEBhc290dGlsZWBfIGZvciB0aGUgcmVwb3J0IGFuZCBgQG5pY29kZGVt
dXNgXyBmb3IgdGhlIFBSLgotCi0qIEZpeCAoYCMxNDM3YF8pOiBXaGVuIHBhc3NpbmcgaW4gYSBi
eXRlc3RyaW5nIHJlZ2V4IHBhdHRlcm4gdG8gcGFyYW1ldGVyaXplCi0gIGF0dGVtcHQgdG8gZGVj
b2RlIGl0IGFzIHV0Zi04IGlnbm9yaW5nIGVycm9ycy4KLQotKiBGaXggKGAjNjQ5YF8pOiBwYXJh
bWV0cml6ZWQgdGVzdCBub2RlcyBjYW5ub3QgYmUgc3BlY2lmaWVkIHRvIHJ1biBvbiB0aGUgY29t
bWFuZCBsaW5lLgotCi0KLS4uIF8jMTQzNzogaHR0cHM6Ly9naXRodWIuY29tL3B5dGVzdC1kZXYv
cHl0ZXN0L2lzc3Vlcy8xNDM3Ci0uLiBfIzQ2OTogaHR0cHM6Ly9naXRodWIuY29tL3B5dGVzdC1k
ZXYvcHl0ZXN0L2lzc3Vlcy80NjkKLS4uIF8jMTQzMTogaHR0cHM6Ly9naXRodWIuY29tL3B5dGVz
dC1kZXYvcHl0ZXN0L3B1bGwvMTQzMQotLi4gXyM2NDk6IGh0dHBzOi8vZ2l0aHViLmNvbS9weXRl
c3QtZGV2L3B5dGVzdC9pc3N1ZXMvNjQ5Ci0KLS4uIF9AYXNvdHRpbGU6IGh0dHBzOi8vZ2l0aHVi
LmNvbS9hc290dGlsZQotCi0KLTIuOS4wCi09PT09PQotCi0qKk5ldyBGZWF0dXJlcyoqCi0KLSog
TmV3IGBgcHl0ZXN0Lm1hcmsuc2tpcGBgIG1hcmssIHdoaWNoIHVuY29uZGl0aW9uYWxseSBza2lw
cyBtYXJrZWQgdGVzdHMuCi0gIFRoYW5rcyBgQE1pY2hhZWxBcXVpbGluYWBfIGZvciB0aGUgY29t
cGxldGUgUFIgKGAjMTA0MGBfKS4KLQotKiBgYC0tZG9jdGVzdC1nbG9iYGAgbWF5IG5vdyBiZSBw
YXNzZWQgbXVsdGlwbGUgdGltZXMgaW4gdGhlIGNvbW1hbmQtbGluZS4KLSAgVGhhbmtzIGBAamFi
YF8gYW5kIGBAbmljb2RkZW11c2BfIGZvciB0aGUgUFIuCi0KLSogTmV3IGBgLXJwYGAgYW5kIGBg
LXJQYGAgcmVwb3J0aW5nIG9wdGlvbnMgZ2l2ZSB0aGUgc3VtbWFyeSBhbmQgZnVsbCBvdXRwdXQK
LSAgb2YgcGFzc2luZyB0ZXN0cywgcmVzcGVjdGl2ZWx5LiBUaGFua3MgdG8gYEBjb2Rld2Fycmlv
cjBgXyBmb3IgdGhlIFBSLgotCi0qIGBgcHl0ZXN0Lm1hcmsueGZhaWxgYCBub3cgaGFzIGEgYGBz
dHJpY3RgYCBvcHRpb24sIHdoaWNoIG1ha2VzIGBgWFBBU1NgYAotICB0ZXN0cyB0byBmYWlsIHRo
ZSB0ZXN0IHN1aXRlIChkZWZhdWx0aW5nIHRvIGBgRmFsc2VgYCkuIFRoZXJlJ3MgYWxzbyBhCi0g
IGBgeGZhaWxfc3RyaWN0YGAgaW5pIG9wdGlvbiB0aGF0IGNhbiBiZSB1c2VkIHRvIGNvbmZpZ3Vy
ZSBpdCBwcm9qZWN0LXdpc2UuCi0gIFRoYW5rcyBgQHJhYmJiaXRgXyBmb3IgdGhlIHJlcXVlc3Qg
YW5kIGBAbmljb2RkZW11c2BfIGZvciB0aGUgUFIgKGAjMTM1NWBfKS4KLQotKiBgYFBhcnNlci5h
ZGRpbmlgYCBub3cgc3VwcG9ydHMgb3B0aW9ucyBvZiB0eXBlIGBgYm9vbGBgLiAKLSAgVGhhbmtz
IGBAbmljb2RkZW11c2BfIGZvciB0aGUgUFIuCi0KLSogTmV3IGBgQUxMT1dfQllURVNgYCBkb2N0
ZXN0IG9wdGlvbi4gVGhpcyBzdHJpcHMgYGBiYGAgcHJlZml4ZXMgZnJvbSBieXRlIHN0cmluZ3MK
LSAgaW4gZG9jdGVzdCBvdXRwdXQgKHNpbWlsYXIgdG8gYGBBTExPV19VTklDT0RFYGApLgotICBU
aGFua3MgYEBqYXJhY29gXyBmb3IgdGhlIHJlcXVlc3QgYW5kIGBAbmljb2RkZW11c2BfIGZvciB0
aGUgUFIgKGAjMTI4N2BfKS4KLQotKiBHaXZlIGEgaGludCBvbiBgYEtleWJvYXJkSW50ZXJydXB0
YGAgdG8gdXNlIHRoZSBgYC0tZnVsbHRyYWNlYGAgb3B0aW9uIHRvIHNob3cgdGhlIGVycm9ycy4K
LSAgRml4ZXMgYCMxMzY2YF8uCi0gIFRoYW5rcyB0byBgQGhwazQyYF8gZm9yIHRoZSByZXBvcnQg
YW5kIGBAUm9ubnlQZmFubnNjaG1pZHRgXyBmb3IgdGhlIFBSLgotCi0qIENhdGNoIGBgSW5kZXhF
cnJvcmBgIGV4Y2VwdGlvbnMgd2hlbiBnZXR0aW5nIGV4Y2VwdGlvbiBzb3VyY2UgbG9jYXRpb24u
IAotICBGaXhlcyBhIHB5dGVzdCBpbnRlcm5hbCBlcnJvciBmb3IgZHluYW1pY2FsbHkgZ2VuZXJh
dGVkIGNvZGUgKGZpeHR1cmVzIGFuZCB0ZXN0cykKLSAgd2hlcmUgc291cmNlIGxpbmVzIGFyZSBm
YWtlIGJ5IGludGVudGlvbi4KLQotKipDaGFuZ2VzKioKLQotKiAqKkltcG9ydGFudCoqOiBgcHku
Y29kZSA8aHR0cDovL3B5bGliLnJlYWR0aGVkb2NzLm9yZy9lbi9sYXRlc3QvY29kZS5odG1sPmBf
IGhhcyBiZWVuCi0gIG1lcmdlZCBpbnRvIHRoZSBgYHB5dGVzdGBgIHJlcG9zaXRvcnkgYXMgYGBw
eXRlc3QuX2NvZGVgYC4gVGhpcyBkZWNpc2lvbiAKLSAgd2FzIG1hZGUgYmVjYXVzZSBgYHB5LmNv
ZGVgYCBoYWQgdmVyeSBmZXcgdXNlcyBvdXRzaWRlIGBgcHl0ZXN0YGAgYW5kIHRoZSAKLSAgZmFj
dCB0aGF0IGl0IHdhcyBpbiBhIGRpZmZlcmVudCByZXBvc2l0b3J5IG1hZGUgaXQgZGlmZmljdWx0
IHRvIGZpeCBidWdzIG9uIAotICBpdHMgY29kZSBpbiBhIHRpbWVseSBtYW5uZXIuIFRoZSB0ZWFt
IGhvcGVzIHdpdGggdGhpcyB0byBiZSBhYmxlIHRvIGJldHRlcgotICByZWZhY3RvciBvdXQgYW5k
IGltcHJvdmUgdGhhdCBjb2RlLgotICBUaGlzIGNoYW5nZSBzaG91bGRuJ3QgYWZmZWN0IHVzZXJz
LCBidXQgaXQgaXMgdXNlZnVsIHRvIGxldCB1c2VycyBhd2FyZQotICBpZiB0aGV5IGVuY291bnRl
ciBhbnkgc3RyYW5nZSBiZWhhdmlvci4KLSAgCi0gIEtlZXAgaW4gbWluZCB0aGF0IHRoZSBjb2Rl
IGZvciBgYHB5dGVzdC5fY29kZWBgIGlzICoqcHJpdmF0ZSoqIGFuZCAKLSAgKipleHBlcmltZW50
YWwqKiwgc28geW91IGRlZmluaXRlbHkgc2hvdWxkIG5vdCBpbXBvcnQgaXQgZXhwbGljaXRseSEK
LQotICBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBvcmlnaW5hbCBgYHB5LmNvZGVgYCBpcyBzdGlsbCBh
dmFpbGFibGUgaW4gCi0gIGBweWxpYiA8aHR0cDovL3B5bGliLnJlYWR0aGVkb2NzLm9yZz5gXy4K
LQotKiBgYHB5dGVzdF9lbnRlcl9wZGJgYCBub3cgb3B0aW9uYWxseSByZWNlaXZlcyB0aGUgcHl0
ZXN0IGNvbmZpZyBvYmplY3QuCi0gIFRoYW5rcyBgQG5pY29kZGVtdXNgXyBmb3IgdGhlIFBSLgot
Ci0qIFJlbW92ZWQgY29kZSBhbmQgZG9jdW1lbnRhdGlvbiBmb3IgUHl0aG9uIDIuNSBvciBsb3dl
ciB2ZXJzaW9ucywKLSAgaW5jbHVkaW5nIHJlbW92YWwgb2YgdGhlIG9ic29sZXRlIGBgX3B5dGVz
dC5hc3NlcnRpb24ub2xkaW50ZXJwcmV0YGAgbW9kdWxlLgotICBUaGFua3MgYEBuaWNvZGRlbXVz
YF8gZm9yIHRoZSBQUiAoYCMxMjI2YF8pLgotCi0qIENvbXBhcmlzb25zIG5vdyBhbHdheXMgc2hv
dyB1cCBpbiBmdWxsIHdoZW4gYGBDSWBgIG9yIGBgQlVJTERfTlVNQkVSYGAgaXMKLSAgZm91bmQg
aW4gdGhlIGVudmlyb25tZW50LCBldmVuIHdoZW4gYGAtdnZgYCBpc24ndCB1c2VkLgotICBUaGFu
a3MgYEBUaGUtQ29tcGlsZXJgXyBmb3IgdGhlIFBSLgotCi0qIGBgLS1sZmBgIGFuZCBgYC0tZmZg
YCBub3cgc3VwcG9ydCBsb25nIG5hbWVzOiBgYC0tbGFzdC1mYWlsZWRgYCBhbmQKLSAgYGAtLWZh
aWxlZC1maXJzdGBgIHJlc3BlY3RpdmVseS4KLSAgVGhhbmtzIGBATWljaGFlbEFxdWlsaW5hYF8g
Zm9yIHRoZSBQUi4KLQotKiBBZGRlZCBleHBlY3RlZCBleGNlcHRpb25zIHRvIGBgcHl0ZXN0LnJh
aXNlc2BgIGZhaWwgbWVzc2FnZS4KLQotKiBDb2xsZWN0aW9uIG9ubHkgZGlzcGxheXMgcHJvZ3Jl
c3MgKCJjb2xsZWN0aW5nIFggaXRlbXMiKSB3aGVuIGluIGEgdGVybWluYWwuCi0gIFRoaXMgYXZv
aWRzIGNsdXR0ZXJpbmcgdGhlIG91dHB1dCB3aGVuIHVzaW5nIGBgLS1jb2xvcj15ZXNgYCB0byBv
YnRhaW4KLSAgY29sb3JzIGluIENJIGludGVncmF0aW9ucyBzeXN0ZW1zIChgIzEzOTdgXykuCi0K
LSoqQnVnIEZpeGVzKioKLQotKiBUaGUgYGAtc2BgIGFuZCBgYC1jYGAgb3B0aW9ucyBzaG91bGQg
bm93IHdvcmsgdW5kZXIgYGB4ZGlzdGBgOwotICBgYENvbmZpZy5mcm9tZGljdGFyZ3NgYCBub3cg
cmVwcmVzZW50cyBpdHMgaW5wdXQgbXVjaCBtb3JlIGZhaXRoZnVsbHkuCi0gIFRoYW5rcyB0byBg
QGJ1a3pvcmBfIGZvciB0aGUgY29tcGxldGUgUFIgKGAjNjgwYF8pLgotCi0qIEZpeCAoYCMxMjkw
YF8pOiBzdXBwb3J0IFB5dGhvbiAzLjUncyBgYEBgYCBvcGVyYXRvciBpbiBhc3NlcnRpb24gcmV3
cml0aW5nLgotICBUaGFua3MgYEBTaGlua2Vuam9lYF8gZm9yIHJlcG9ydCB3aXRoIHRlc3QgY2Fz
ZSBhbmQgYEB0b212aW5lcmBfIGZvciB0aGUgUFIuCi0KLSogRml4IGZvcm1hdHRpbmcgdXRmLTgg
ZXhwbGFuYXRpb24gbWVzc2FnZXMgKGAjMTM3OWBfKS4KLSAgVGhhbmtzIGBAYmllcm5gXyBmb3Ig
dGhlIFBSLgotCi0qIEZpeCBgdHJhY2ViYWNrIHN0eWxlIGRvY3NgXyB0byBkZXNjcmliZSBhbGwg
b2YgdGhlIGF2YWlsYWJsZSBvcHRpb25zCi0gIChhdXRvL2xvbmcvc2hvcnQvbGluZS9uYXRpdmUv
bm8pLCB3aXRoIGBhdXRvYCBiZWluZyB0aGUgZGVmYXVsdCBzaW5jZSB2Mi42LgotICBUaGFua3Mg
YEBoYWNrZWJyb3RgXyBmb3IgdGhlIFBSLgotCi0qIEZpeCAoYCMxNDIyYF8pOiBqdW5pdCByZWNv
cmRfeG1sX3Byb3BlcnR5IGRvZXNuJ3QgYWxsb3cgbXVsdGlwbGUgcmVjb3JkcwotICB3aXRoIHNh
bWUgbmFtZS4KLQotLi4gX2B0cmFjZWJhY2sgc3R5bGUgZG9jc2A6IGh0dHBzOi8vcHl0ZXN0Lm9y
Zy9sYXRlc3QvdXNhZ2UuaHRtbCNtb2RpZnlpbmctcHl0aG9uLXRyYWNlYmFjay1wcmludGluZwot
Ci0uLiBfIzE0MjI6IGh0dHBzOi8vZ2l0aHViLmNvbS9weXRlc3QtZGV2L3B5dGVzdC9pc3N1ZXMv
MTQyMgotLi4gXyMxMzc5OiBodHRwczovL2dpdGh1Yi5jb20vcHl0ZXN0LWRldi9weXRlc3QvaXNz
dWVzLzEzNzkKLS4uIF8jMTM2NjogaHR0cHM6Ly9naXRodWIuY29tL3B5dGVzdC1kZXYvcHl0ZXN0
L2lzc3Vlcy8xMzY2Ci0uLiBfIzEwNDA6IGh0dHBzOi8vZ2l0aHViLmNvbS9weXRlc3QtZGV2L3B5
dGVzdC9wdWxsLzEwNDAKLS4uIF8jNjgwOiBodHRwczovL2dpdGh1Yi5jb20vcHl0ZXN0LWRldi9w
eXRlc3QvaXNzdWVzLzY4MAotLi4gXyMxMjg3OiBodHRwczovL2dpdGh1Yi5jb20vcHl0ZXN0LWRl
di9weXRlc3QvcHVsbC8xMjg3Ci0uLiBfIzEyMjY6IGh0dHBzOi8vZ2l0aHViLmNvbS9weXRlc3Qt
ZGV2L3B5dGVzdC9wdWxsLzEyMjYKLS4uIF8jMTI5MDogaHR0cHM6Ly9naXRodWIuY29tL3B5dGVz
dC1kZXYvcHl0ZXN0L3B1bGwvMTI5MAotLi4gXyMxMzU1OiBodHRwczovL2dpdGh1Yi5jb20vcHl0
ZXN0LWRldi9weXRlc3QvcHVsbC8xMzU1Ci0uLiBfIzEzOTc6IGh0dHBzOi8vZ2l0aHViLmNvbS9w
eXRlc3QtZGV2L3B5dGVzdC9pc3N1ZXMvMTM5NwotLi4gX0BiaWVybjogaHR0cHM6Ly9naXRodWIu
Y29tL2JpZXJuCi0uLiBfQE1pY2hhZWxBcXVpbGluYTogaHR0cHM6Ly9naXRodWIuY29tL01pY2hh
ZWxBcXVpbGluYQotLi4gX0BidWt6b3I6IGh0dHBzOi8vZ2l0aHViLmNvbS9idWt6b3IKLS4uIF9A
aHBrNDI6IGh0dHBzOi8vZ2l0aHViLmNvbS9ocGs0MgotLi4gX0BuaWNvZGRlbXVzOiBodHRwczov
L2dpdGh1Yi5jb20vbmljb2RkZW11cwotLi4gX0BqYWI6IGh0dHBzOi8vZ2l0aHViLmNvbS9qYWIK
LS4uIF9AY29kZXdhcnJpb3IwOiBodHRwczovL2dpdGh1Yi5jb20vY29kZXdhcnJpb3IwCi0uLiBf
QGphcmFjbzogaHR0cHM6Ly9naXRodWIuY29tL2phcmFjbwotLi4gX0BUaGUtQ29tcGlsZXI6IGh0
dHBzOi8vZ2l0aHViLmNvbS9UaGUtQ29tcGlsZXIKLS4uIF9AU2hpbmtlbmpvZTogaHR0cHM6Ly9n
aXRodWIuY29tL1NoaW5rZW5qb2UKLS4uIF9AdG9tdmluZXI6IGh0dHBzOi8vZ2l0aHViLmNvbS90
b212aW5lcgotLi4gX0BSb25ueVBmYW5uc2NobWlkdDogaHR0cHM6Ly9naXRodWIuY29tL1Jvbm55
UGZhbm5zY2htaWR0Ci0uLiBfQHJhYmJiaXQ6IGh0dHBzOi8vZ2l0aHViLmNvbS9yYWJiYml0Ci0u
LiBfQGhhY2tlYnJvdDogaHR0cHM6Ly9naXRodWIuY29tL2hhY2tlYnJvdAotCi0yLjguNwotPT09
PT0KLQotLSBmaXggIzEzMzg6IHVzZSBwcmVkaWN0YWJsZSBvYmplY3QgcmVzb2x1dGlvbiBmb3Ig
bW9ua2V5cGF0Y2gKLQotMi44LjYKLT09PT09Ci0KLS0gZml4ICMxMjU5OiBhbGxvdyBmb3IgZG91
YmxlIG5vZGVpZHMgaW4ganVuaXR4bWwsCi0gIHRoaXMgd2FzIGEgcmVncmVzc2lvbiBmYWlsaW5n
IHBsdWdpbnMgY29tYmluYXRpb25zCi0gIGxpa2UgcHl0ZXN0LXBlcDggKyBweXRlc3QtZmxha2Vz
Ci0KLS0gV29ya2Fyb3VuZCBmb3IgZXhjZXB0aW9uIHRoYXQgb2NjdXJzIGluIHB5cmVhZGxpbmUg
d2hlbiB1c2luZwotICBgYC0tcGRiYGAgd2l0aCBzdGFuZGFyZCBJL08gY2FwdHVyZSBlbmFibGVk
LgotICBUaGFua3MgRXJpayBNLiBCcmF5IGZvciB0aGUgUFIuCi0KLS0gZml4ICM5MDA6IEJldHRl
ciBlcnJvciBtZXNzYWdlIGluIGNhc2UgdGhlIHRhcmdldCBvZiBhIGBgbW9ua2V5cGF0Y2hgYCBj
YWxsCi0gIHJhaXNlcyBhbiBgYEltcG9ydEVycm9yYGAuCi0KLS0gZml4ICMxMjkyOiBtb25rZXlw
YXRjaCBjYWxscyAoc2V0YXR0ciwgc2V0ZW52LCBldGMuKSBhcmUgbm93IE8oMSkuCi0gIFRoYW5r
cyBEYXZpZCBSLiBNYWNJdmVyIGZvciB0aGUgcmVwb3J0IGFuZCBCcnVubyBPbGl2ZWlyYSBmb3Ig
dGhlIFBSLgotCi0tIGZpeCAjMTIyMzogY2FwdHVyZWQgc3Rkb3V0IGFuZCBzdGRlcnIgYXJlIG5v
dyBwcm9wZXJseSBkaXNwbGF5ZWQgYmVmb3JlIAotICBlbnRlcmluZyBwZGIgd2hlbiBgYC0tcGRi
YGAgaXMgdXNlZCBpbnN0ZWFkIG9mIGJlaW5nIHRocm93biBhd2F5LgotICBUaGFua3MgQ2FsIExl
ZW1pbmcgZm9yIHRoZSBQUi4KLQotLSBmaXggIzEzMDU6IHB5dGVzdCB3YXJuaW5ncyBlbWl0dGVk
IGR1cmluZyBgYHB5dGVzdF90ZXJtaW5hbF9zdW1tYXJ5YGAgYXJlIG5vdwotICBwcm9wZXJseSBk
aXNwbGF5ZWQuCi0gIFRoYW5rcyBJb25lbCBNYXJpZXMgQ3Jpc3RpYW4gZm9yIHRoZSByZXBvcnQg
YW5kIEJydW5vIE9saXZlaXJhIGZvciB0aGUgUFIuCi0KLS0gZml4ICM2Mjg6IGZpeGVkIGludGVy
bmFsIFVuaWNvZGVEZWNvZGVFcnJvciB3aGVuIGRvY3Rlc3RzIGNvbnRhaW4gdW5pY29kZS4KLSAg
VGhhbmtzIEphc29uIFIuIENvb21icyBmb3IgdGhlIHJlcG9ydCBhbmQgQnJ1bm8gT2xpdmVpcmEg
Zm9yIHRoZSBQUi4KLQotLSBmaXggIzEzMzQ6IEFkZCBjYXB0dXJlZCBzdGRvdXQgdG8galVuaXQg
WE1MIHJlcG9ydCBvbiBzZXR1cCBlcnJvci4KLSAgVGhhbmtzIEdlb3JneSBEeXVsZGluIGZvciB0
aGUgUFIuCi0KLQotMi44LjUKLT09PT09Ci0KLS0gZml4ICMxMjQzOiBmaXhlZCBpc3N1ZSB3aGVy
ZSBjbGFzcyBhdHRyaWJ1dGVzIGluamVjdGVkIGR1cmluZyBjb2xsZWN0aW9uIGNvdWxkIGJyZWFr
IHB5dGVzdC4KLSAgUFIgYnkgQWxleGVpIEtvemxlbm9rLCB0aGFua3MgUm9ubnkgUGZhbm5zY2ht
aWR0IGFuZCBCcnVubyBPbGl2ZWlyYSBmb3IgdGhlIHJldmlldyBhbmQgaGVscC4KLQotLSBmaXgg
IzEwNzQ6IHByZWNvbXB1dGUganVuaXR4bWwgY2h1bmtzIGluc3RlYWQgb2Ygc3RvcmluZyB0aGUg
d2hvbGUgdHJlZSBpbiBvYmplY3RzCi0gIFRoYW5rcyBCcnVubyBPbGl2ZWlyYSBmb3IgdGhlIHJl
cG9ydCBhbmQgUm9ubnkgUGZhbm5zY2htaWR0IGZvciB0aGUgUFIKLQotLSBmaXggIzEyMzg6IGZp
eCBgYHB5dGVzdC5kZXByZWNhdGVkX2NhbGwoKWBgIHJlY2VpdmluZyBtdWx0aXBsZSBhcmd1bWVu
dHMKLSAgKFJlZ3Jlc3Npb24gaW50cm9kdWNlZCBpbiAyLjguNCkuIFRoYW5rcyBBbGV4IEdheW5v
ciBmb3IgdGhlIHJlcG9ydCBhbmQKLSAgQnJ1bm8gT2xpdmVpcmEgZm9yIHRoZSBQUi4KLQotCi0y
LjguNAotPT09PT0KLQotLSBmaXggIzExOTA6IGBgZGVwcmVjYXRlZF9jYWxsKClgYCBub3cgd29y
a3Mgd2hlbiB0aGUgZGVwcmVjYXRlZAotICBmdW5jdGlvbiBoYXMgYmVlbiBhbHJlYWR5IGNhbGxl
ZCBieSBhbm90aGVyIHRlc3QgaW4gdGhlIHNhbWUKLSAgbW9kdWxlLiBUaGFua3MgTWlraGFpbCBD
aGVybnlraCBmb3IgdGhlIHJlcG9ydCBhbmQgQnJ1bm8gT2xpdmVpcmEgZm9yIHRoZQotICBQUi4K
LQotLSBmaXggIzExOTg6IGBgLS1wYXN0ZWJpbmBgIG9wdGlvbiBub3cgd29ya3Mgb24gUHl0aG9u
IDMuIFRoYW5rcwotICBNZWhkeSBLaG9zaG5vb2R5IGZvciB0aGUgUFIuCi0KLS0gZml4ICMxMjE5
OiBgYC0tcGFzdGViaW5gYCBub3cgd29ya3MgY29ycmVjdGx5IHdoZW4gY2FwdHVyZWQgb3V0cHV0
IGNvbnRhaW5zCi0gIG5vbi1hc2NpaSBjaGFyYWN0ZXJzLiBUaGFua3MgQnJ1bm8gT2xpdmVpcmEg
Zm9yIHRoZSBQUi4KLQotLSBmaXggIzEyMDQ6IGFub3RoZXIgZXJyb3Igd2hlbiBjb2xsZWN0aW5n
IHdpdGggYSBuYXN0eSBfX2dldGF0dHJfXygpLgotICBUaGFua3MgRmxvcmlhbiBCcnVoaW4gZm9y
IHRoZSBQUi4KLQotLSBmaXggdGhlIHN1bW1hcnkgcHJpbnRlZCB3aGVuIG5vIHRlc3RzIGRpZCBy
dW4uCi0gIFRoYW5rcyBGbG9yaWFuIEJydWhpbiBmb3IgdGhlIFBSLgotLSBmaXggIzExODUgLSBl
bnN1cmUgTUFOSUZFU1QuaW4gZXhhY3RseSBtYXRjaGVzIHdoYXQgc2hvdWxkIGdvIHRvIGEgc2Rp
c3QKLQotLSBhIG51bWJlciBvZiBkb2N1bWVudGF0aW9uIG1vZGVybml6YXRpb25zIHdydCBnb29k
IHByYWN0aWNlcy4KLSAgVGhhbmtzIEJydW5vIE9saXZlaXJhIGZvciB0aGUgUFIuCi0KLTIuOC4z
Ci09PT09PQotCi0tIGZpeCAjMTE2OTogYWRkIF9fbmFtZV9fIGF0dHJpYnV0ZSB0byB0ZXN0Y2Fz
ZXMgaW4gVGVzdENhc2VGdW5jdGlvbiB0bwotICBzdXBwb3J0IHRoZSBAdW5pdHRlc3Quc2tpcCBk
ZWNvcmF0b3Igb24gZnVuY3Rpb25zIGFuZCBtZXRob2RzLgotICBUaGFua3MgTGVlIEthbWVudHNr
eSBmb3IgdGhlIFBSLgotCi0tIGZpeCAjMTAzNTogY29sbGVjdGluZyB0ZXN0cyBpZiB0ZXN0IG1v
ZHVsZSBsZXZlbCBvYmogaGFzIF9fZ2V0YXR0cl9fKCkuCi0gIFRoYW5rcyBTdW9yIGZvciB0aGUg
cmVwb3J0IGFuZCBCcnVubyBPbGl2ZWlyYSAvIFRvbSBWaW5lciBmb3IgdGhlIFBSLgotCi0tIGZp
eCAjMzMxOiBkb24ndCBjb2xsZWN0IHRlc3RzIGlmIHRoZWlyIGZhaWx1cmUgY2Fubm90IGJlIHJl
cG9ydGVkIGNvcnJlY3RseQotICBlLmcuIHRoZXkgYXJlIGEgY2FsbGFibGUgaW5zdGFuY2Ugb2Yg
YSBjbGFzcy4KLQotLSBmaXggIzExMzM6IGZpeGVkIGludGVybmFsIGVycm9yIHdoZW4gZmlsdGVy
aW5nIHRyYWNlYmFja3Mgd2hlcmUgb25lIGVudHJ5Ci0gIGJlbG9uZ3MgdG8gYSBmaWxlIHdoaWNo
IGlzIG5vIGxvbmdlciBhdmFpbGFibGUuCi0gIFRoYW5rcyBCcnVubyBPbGl2ZWlyYSBmb3IgdGhl
IFBSLgotCi0tIGVuaGFuY2VtZW50IG1hZGUgdG8gaGlnaGxpZ2h0IGluIHJlZCB0aGUgbmFtZSBv
ZiB0aGUgZmFpbGluZyB0ZXN0cyBzbwotICB0aGV5IHN0YW5kIG91dCBpbiB0aGUgb3V0cHV0Lgot
ICBUaGFua3MgR2FicmllbCBSZWlzIGZvciB0aGUgUFIuCi0KLS0gYWRkIG1vcmUgdGFsa3MgdG8g
dGhlIGRvY3VtZW50YXRpb24KLS0gZXh0ZW5kIGRvY3VtZW50YXRpb24gb24gdGhlIC0taWdub3Jl
IGNsaSBvcHRpb24gCi0tIHVzZSBweXRlc3QtcnVubmVyIGZvciBzZXR1cHRvb2xzIGludGVncmF0
aW9uIAotLSBtaW5vciBmaXhlcyBmb3IgaW50ZXJhY3Rpb24gd2l0aCBPUyBYIEVsIENhcGl0YW4K
LSAgc3lzdGVtIGludGVncml0eSBwcm90ZWN0aW9uICh0aGFua3MgRmxvcmlhbikKLQotCi0yLjgu
MgotPT09PT0KLQotLSBmaXggIzEwODU6IHByb3BlciBoYW5kbGluZyBvZiBlbmNvZGluZyBlcnJv
cnMgd2hlbiBwYXNzaW5nIGVuY29kZWQgYnl0ZQotICBzdHJpbmdzIHRvIHB5dGVzdC5wYXJhbWV0
cml6ZSBpbiBQeXRob24gMi4KLSAgVGhhbmtzIFRoZW1hbndpdGhvdXRhcGxhbiBmb3IgdGhlIHJl
cG9ydCBhbmQgQnJ1bm8gT2xpdmVpcmEgZm9yIHRoZSBQUi4KLQotLSBmaXggIzEwODc6IGhhbmRs
aW5nIFN5c3RlbUVycm9yIHdoZW4gcGFzc2luZyBlbXB0eSBieXRlIHN0cmluZ3MgdG8KLSAgcHl0
ZXN0LnBhcmFtZXRyaXplIGluIFB5dGhvbiAzLgotICBUaGFua3MgUGF1bCBLZWhyZXIgZm9yIHRo
ZSByZXBvcnQgYW5kIEJydW5vIE9saXZlaXJhIGZvciB0aGUgUFIuCi0KLS0gZml4ICM5OTU6IGZp
eGVkIGludGVybmFsIGVycm9yIHdoZW4gZmlsdGVyaW5nIHRyYWNlYmFja3Mgd2hlcmUgb25lIGVu
dHJ5Ci0gIHdhcyBnZW5lcmF0ZWQgYnkgYW4gZXhlYygpIHN0YXRlbWVudC4KLSAgVGhhbmtzIERh
bmllbCBIYWhsZXIsIEFzaGxleSBDIFN0cmF3LCBQaGlsaXBwZSBHYXV0aGllciBhbmQgUGF2ZWwg
U2F2Y2hlbmtvCi0gIGZvciBjb250cmlidXRpbmcgYW5kIEJydW5vIE9saXZlaXJhIGZvciB0aGUg
UFIuCi0KLS0gZml4ICMxMTAwIGFuZCAjMTA1NzogZXJyb3JzIHdoZW4gdXNpbmcgYXV0b3VzZSBm
aXh0dXJlcyBhbmQgZG9jdGVzdCBtb2R1bGVzLgotICBUaGFua3MgU2VyZ2V5IEIgS2lycGljaGV2
IGFuZCBWaXRhbCBLdWR6ZWxrYSBmb3IgY29udHJpYnV0aW5nIGFuZCBCcnVubwotICBPbGl2ZWly
YSBmb3IgdGhlIFBSLgotCi0yLjguMQotPT09PT0KLQotLSBmaXggIzEwMzQ6IEFkZCBtaXNzaW5n
IG5vZGVpZCBvbiBweXRlc3RfbG9nd2FybmluZyBjYWxsIGluCi0gIGFkZGhvb2suICBUaGFua3Mg
U2ltb24gR29taXplbGogZm9yIHRoZSBQUi4KLQotLSAnZGVwcmVjYXRlZF9jYWxsJyBpcyBub3cg
b25seSBzYXRpc2ZpZWQgd2l0aCBhIERlcHJlY2F0aW9uV2FybmluZyBvcgotICBQZW5kaW5nRGVw
cmVjYXRpb25XYXJuaW5nLiBCZWZvcmUgMi44LjAsIGl0IGFjY2VwdGVkIGFueSB3YXJuaW5nLCBh
bmQgMi44LjAKLSAgbWFkZSBpdCBhY2NlcHQgb25seSBEZXByZWNhdGlvbldhcm5pbmcgKGJ1dCBu
b3QgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZykuCi0gIFRoYW5rcyBBbGV4IEdheW5vciBmb3Ig
dGhlIGlzc3VlIGFuZCBFcmljIEh1bnNiZXJnZXIgZm9yIHRoZSBQUi4KLQotLSBmaXggaXNzdWUg
IzEwNzM6IGF2b2lkIGNhbGxpbmcgX19nZXRhdHRyX18gb24gcG90ZW50aWFsIHBsdWdpbiBvYmpl
Y3RzLgotICBUaGlzIGZpeGVzIGFuIGluY29tcGF0aWJpbGl0eSB3aXRoIHB5dGVzdC1kamFuZ28u
ICBUaGFua3MgQW5kcmVhcyBQZWxtZSwKLSAgQnJ1bm8gT2xpdmVpcmEgYW5kIFJvbm55IFBmYW5u
c2NobWlkdCBmb3IgY29udHJpYnV0aW5nIGFuZCBIb2xnZXIgS3Jla2VsCi0gIGZvciB0aGUgZml4
LgotCi0tIEZpeCBpc3N1ZSAjNzA0OiBoYW5kbGUgdmVyc2lvbmNvbmZsaWN0IGR1cmluZyBwbHVn
aW4gbG9hZGluZyBtb3JlCi0gIGdyYWNlZnVsbHkuICBUaGFua3MgQnJ1bm8gT2xpdmVpcmEgZm9y
IHRoZSBQUi4KLQotLSBGaXggaXNzdWUgIzEwNjQ6ICIiLS1qdW5pdHhtbCIgcmVncmVzc2lvbiB3
aGVuIHVzZWQgd2l0aCB0aGUKLSAgInB5dGVzdC14ZGlzdCIgcGx1Z2luLCB3aXRoIHRlc3QgcmVw
b3J0cyBiZWluZyBhc3NpZ25lZCB0byB0aGUgd3JvbmcgdGVzdHMuCi0gIFRoYW5rcyBEYW5pZWwg
R3J1bndhbGQgZm9yIHRoZSByZXBvcnQgYW5kIEJydW5vIE9saXZlaXJhIGZvciB0aGUgUFIuCi0K
LS0gKGV4cGVyaW1lbnRhbCkgYWRhcHQgbW9yZSBTRU1WRVIgc3R5bGUgdmVyc2lvbmluZyBhbmQg
Y2hhbmdlIG1lYW5pbmcgb2YKLSAgbWFzdGVyIGJyYW5jaCBpbiBnaXQgcmVwbzogIm1hc3RlciIg
YnJhbmNoIG5vdyBrZWVwcyB0aGUgYnVnZml4ZXMsIGNoYW5nZXMKLSAgYWltZWQgZm9yIG1pY3Jv
IHJlbGVhc2VzLiAgImZlYXR1cmVzIiBicmFuY2ggd2lsbCBvbmx5IGJlIGJlIHJlbGVhc2VkCi0g
IHdpdGggbWlub3Igb3IgbWFqb3IgcHl0ZXN0IHJlbGVhc2VzLgotCi0tIEZpeCBpc3N1ZSAjNzY2
IGJ5IHJlbW92aW5nIGRvY3VtZW50YXRpb24gcmVmZXJlbmNlcyB0byBkaXN0dXRpbHMuCi0gIFRo
YW5rcyBSdXNzZWwgV2luZGVyLgotCi0tIEZpeCBpc3N1ZSAjMTAzMDogbm93IGJ5dGUtc3RyaW5n
cyBhcmUgZXNjYXBlZCB0byBwcm9kdWNlIGl0ZW0gbm9kZSBpZHMKLSAgdG8gbWFrZSB0aGVtIGFs
d2F5cyBzZXJpYWxpemFibGUuCi0gIFRoYW5rcyBBbmR5IEZyZWVsYW5kIGZvciB0aGUgcmVwb3J0
IGFuZCBCcnVubyBPbGl2ZWlyYSBmb3IgdGhlIFBSLgotCi0tIFB5dGhvbiAyOiBpZiB1bmljb2Rl
IHBhcmFtZXRyaXplZCB2YWx1ZXMgYXJlIGNvbnZlcnRpYmxlIHRvIGFzY2lpLCB0aGVpcgotICBh
c2NpaSByZXByZXNlbnRhdGlvbiBpcyB1c2VkIGZvciB0aGUgbm9kZSBpZC4KLQotLSBGaXggaXNz
dWUgIzQxMTogQWRkIF9fZXFfXyBtZXRob2QgdG8gYXNzZXJ0aW9uIGNvbXBhcmlzb24gZXhhbXBs
ZS4KLSAgVGhhbmtzIEJlbiBXZWJiLgotLSBGaXggaXNzdWUgIzY1MzogZGVwcmVjYXRlZF9jYWxs
IGNhbiBiZSB1c2VkIGFzIGNvbnRleHQgbWFuYWdlci4KLQotLSBmaXggaXNzdWUgODc3OiBwcm9w
ZXJseSBoYW5kbGUgYXNzZXJ0aW9uIGV4cGxhbmF0aW9ucyB3aXRoIG5vbi1hc2NpaSByZXByCi0g
IFRoYW5rcyBNYXRoaWV1IEFnb3BpYW4gZm9yIHRoZSByZXBvcnQgYW5kIFJvbm55IFBmYW5uc2No
bWlkdCBmb3IgdGhlIFBSLgotCi0tIGZpeCBpc3N1ZSAxMDI5OiB0cmFuc2Zvcm0gZXJyb3JzIHdo
ZW4gd3JpdGluZyBjYWNoZSB2YWx1ZXMgaW50byBweXRlc3Qtd2FybmluZ3MKLQotMi44LjAKLT09
PT09Ci0KLS0gbmV3IGBgLS1sZmBgIGFuZCBgYC1mZmBgIG9wdGlvbnMgdG8gcnVuIG9ubHkgdGhl
IGxhc3QgZmFpbGluZyB0ZXN0cyBvcgotICAiZmFpbGluZyB0ZXN0cyBmaXJzdCIgZnJvbSB0aGUg
bGFzdCBydW4uICBUaGlzIGZ1bmN0aW9uYWxpdHkgaXMgcHJvdmlkZWQKLSAgdGhyb3VnaCBwb3J0
aW5nIHRoZSBmb3JtZXJseSBleHRlcm5hbCBweXRlc3QtY2FjaGUgcGx1Z2luIGludG8gcHl0ZXN0
IGNvcmUuCi0gIEJBQ0tXQVJEIElOQ09NUEFUOiBpZiB5b3UgdXNlZCBweXRlc3QtY2FjaGUncyBm
dW5jdGlvbmFsaXR5IHRvIHBlcnNpc3QKLSAgZGF0YSBiZXR3ZWVuIHRlc3QgcnVucyBiZSBhd2Fy
ZSB0aGF0IHdlIGRvbid0IHNlcmlhbGl6ZSBzZXRzIGFueW1vcmUuCi0gIFRoYW5rcyBSb25ueSBQ
ZmFubnNjaG1pZHQgZm9yIG1vc3Qgb2YgdGhlIG1lcmdpbmcgd29yay4KLQotLSAiLXIiIG9wdGlv
biBub3cgYWNjZXB0cyAiYSIgdG8gaW5jbHVkZSBhbGwgcG9zc2libGUgcmVwb3J0cywgc2ltaWxh
cgotICB0byBwYXNzaW5nICJmRXN4WHciIGV4cGxpY2l0bHkgKGlzc2U5NjApLgotICBUaGFua3Mg
QWJoaWplZXQgS2FzdXJkZSBmb3IgdGhlIFBSLgotCi0tIGF2b2lkIHB5dGhvbjMuNSBkZXByZWNh
dGlvbiB3YXJuaW5ncyBieSBpbnRyb2R1Y2luZyB2ZXJzaW9uCi0gIHNwZWNpZmljIGluc3BlY3Rp
b24gaGVscGVycywgdGhhbmtzIE1pY2hhZWwgRHJvZXR0Ym9vbS4KLQotLSBmaXggaXNzdWU1NjI6
IEBub3NlLnRvb2xzLmlzdGVzdCBub3cgZnVsbHkgcmVzcGVjdGVkLgotCi0tIGZpeCBpc3N1ZTkz
NDogd2hlbiBzdHJpbmcgY29tcGFyaXNvbiBmYWlscyBhbmQgYSBkaWZmIGlzIHRvbyBsYXJnZSB0
byBkaXNwbGF5Ci0gIHdpdGhvdXQgcGFzc2luZyAtdnYsIHN0aWxsIHNob3cgYSBmZXcgbGluZXMg
b2YgdGhlIGRpZmYuCi0gIFRoYW5rcyBGbG9yaWFuIEJydWhpbiBmb3IgdGhlIHJlcG9ydCBhbmQg
QnJ1bm8gT2xpdmVpcmEgZm9yIHRoZSBQUi4KLQotLSBmaXggaXNzdWU3MzY6IEZpeCBhIGJ1ZyB3
aGVyZSBmaXh0dXJlIHBhcmFtcyB3b3VsZCBiZSBkaXNjYXJkZWQgd2hlbiBjb21iaW5lZAotICB3
aXRoIHBhcmFtZXRyaXphdGlvbiBtYXJrZXJzLgotICBUaGFua3MgdG8gTWFya3VzIFVudGVyd2Fk
aXR6ZXIgZm9yIHRoZSBQUi4KLQotLSBmaXggaXNzdWU3MTA6IGludHJvZHVjZSBBTExPV19VTklD
T0RFIGRvY3Rlc3Qgb3B0aW9uOiB3aGVuIGVuYWJsZWQsIHRoZQotICBgYHVgYCBwcmVmaXggaXMg
c3RyaXBwZWQgZnJvbSB1bmljb2RlIHN0cmluZ3MgaW4gZXhwZWN0ZWQgZG9jdGVzdCBvdXRwdXQu
IFRoaXMKLSAgYWxsb3dzIGRvY3Rlc3RzIHdoaWNoIHVzZSB1bmljb2RlIHRvIHJ1biBpbiBQeXRo
b24gMiBhbmQgMyB1bmNoYW5nZWQuCi0gIFRoYW5rcyBKYXNvbiBSLiBDb29tYnMgZm9yIHRoZSBy
ZXBvcnQgYW5kIEJydW5vIE9saXZlaXJhIGZvciB0aGUgUFIuCi0KLS0gcGFyYW1ldHJpemUgbm93
IGFsc28gZ2VuZXJhdGVzIG1lYW5pbmdmdWwgdGVzdCBJRHMgZm9yIGVudW0sIHJlZ2V4IGFuZCBj
bGFzcwotICBvYmplY3RzIChhcyBvcHBvc2VkIHRvIGNsYXNzIGluc3RhbmNlcykuCi0gIFRoYW5r
cyB0byBGbG9yaWFuIEJydWhpbiBmb3IgdGhlIFBSLgotCi0tIEFkZCAnd2FybnMnIHRvIGFzc2Vy
dCB0aGF0IHdhcm5pbmdzIGFyZSB0aHJvd24gKGxpa2UgJ3JhaXNlcycpLgotICBUaGFua3MgdG8g
RXJpYyBIdW5zYmVyZ2VyIGZvciB0aGUgUFIuCi0KLS0gRml4IGlzc3VlNjgzOiBEbyBub3QgYXBw
bHkgYW4gYWxyZWFkeSBhcHBsaWVkIG1hcmsuICBUaGFua3Mgb2pha2UgZm9yIHRoZSBQUi4KLQot
LSBEZWFsIHdpdGggY2FwdHVyaW5nIGZhaWx1cmVzIGJldHRlciBzbyBmZXdlciBleGNlcHRpb25z
IGdldCBsb3N0IHRvCi0gIC9kZXYvbnVsbC4gIFRoYW5rcyBEYXZpZCBTem90dGVuIGZvciB0aGUg
UFIuCi0KLS0gZml4IGlzc3VlNzMwOiBkZXByZWNhdGUgYW5kIHdhcm4gYWJvdXQgdGhlIC0tZ2Vu
c2NyaXB0IG9wdGlvbi4KLSAgVGhhbmtzIFJvbm55IFBmYW5uc2NobWlkdCBmb3IgdGhlIHJlcG9y
dCBhbmQgQ2hyaXN0aWFuIFBvbW1yYW56IGZvciB0aGUgUFIuCi0KLS0gZml4IGlzc3VlNzUxOiBt
dWx0aXBsZSBwYXJhbWV0cml6ZSB3aXRoIGlkcyBidWcgaWYgaXQgcGFyYW1ldHJpemVzIGNsYXNz
IHdpdGgKLSAgdHdvIG9yIG1vcmUgdGVzdCBtZXRob2RzLiBUaGFua3MgU2VyZ2V5IENoaXBpZ2Eg
Zm9yIHJlcG9ydGluZyBhbmQgSmFuCi0gIEJlZG5hcmlrIGZvciBQUi4KLQotLSBmaXggaXNzdWU4
MjogYXZvaWQgbG9hZGluZyBjb25mdGVzdCBmaWxlcyBmcm9tIHNldHVwLmNmZy9weXRlc3QuaW5p
L3RveC5pbmkKLSAgZmlsZXMgYW5kIHVwd2FyZHMgYnkgZGVmYXVsdCAoLS1jb25mY3V0ZGlyIGNh
biBzdGlsbCBiZSBzZXQgdG8gb3ZlcnJpZGUgdGhpcykuCi0gIFRoYW5rcyBCcnVubyBPbGl2ZWly
YSBmb3IgdGhlIFBSLgotCi0tIGZpeCBpc3N1ZTc2ODogZG9jc3RyaW5ncyBmb3VuZCBpbiBweXRo
b24gbW9kdWxlcyB3ZXJlIG5vdCBzZXR0aW5nIHVwIHNlc3Npb24KLSAgZml4dHVyZXMuIFRoYW5r
cyBKYXNvbiBSLiBDb29tYnMgZm9yIHJlcG9ydGluZyBhbmQgQnJ1bm8gT2xpdmVpcmEgZm9yIHRo
ZSBQUi4KLQotLSBhZGRlZCBgYHRtcGRpcl9mYWN0b3J5YGAsIGEgc2Vzc2lvbi1zY29wZWQgZml4
dHVyZSB0aGF0IGNhbiBiZSB1c2VkIHRvIGNyZWF0ZQotICBkaXJlY3RvcmllcyB1bmRlciB0aGUg
YmFzZSB0ZW1wb3JhcnkgZGlyZWN0b3J5LiBQcmV2aW91c2x5IHRoaXMgb2JqZWN0IHdhcwotICBp
bnN0YWxsZWQgYXMgYSBgYF90bXBkaXJoYW5kbGVyYGAgYXR0cmlidXRlIG9mIHRoZSBgYGNvbmZp
Z2BgIG9iamVjdCwgYnV0IG5vdyBpdAotICBpcyBwYXJ0IG9mIHRoZSBvZmZpY2lhbCBBUEkgYW5k
IHVzaW5nIGBgY29uZmlnLl90bXBkaXJoYW5kbGVyYGAgaXMKLSAgZGVwcmVjYXRlZC4KLSAgVGhh
bmtzIEJydW5vIE9saXZlaXJhIGZvciB0aGUgUFIuCi0KLS0gZml4IGlzc3VlODA4OiBweXRlc3Qn
cyBpbnRlcm5hbCBhc3NlcnRpb24gcmV3cml0ZSBob29rIG5vdyBpbXBsZW1lbnRzIHRoZQotICBv
cHRpb25hbCBQRVAzMDIgZ2V0X2RhdGEgQVBJIHNvIHRlc3RzIGNhbiBhY2Nlc3MgZGF0YSBmaWxl
cyBuZXh0IHRvIHRoZW0uCi0gIFRoYW5rcyB4bW8tb2RvbyBmb3IgcmVxdWVzdCBhbmQgZXhhbXBs
ZSBhbmQgQnJ1bm8gT2xpdmVpcmEgZm9yCi0gIHRoZSBQUi4KLQotLSByb290ZGlyIGFuZCBpbmlm
aWxlIGFyZSBub3cgZGlzcGxheWVkIGR1cmluZyB1c2FnZSBlcnJvcnMgdG8gaGVscAotICB1c2Vy
cyBkaWFnbm9zZSBwcm9ibGVtcyBzdWNoIGFzIHVuZXhwZWN0ZWQgaW5pIGZpbGVzIHdoaWNoIGFk
ZAotICB1bmtub3duIG9wdGlvbnMgYmVpbmcgcGlja2VkIHVwIGJ5IHB5dGVzdC4gVGhhbmtzIHRv
IFBhdmVsIFNhdmNoZW5rbyBmb3IKLSAgYnJpbmdpbmcgdGhlIHByb2JsZW0gdG8gYXR0ZW50aW9u
IGluICM4MjEgYW5kIEJydW5vIE9saXZlaXJhIGZvciB0aGUgUFIuCi0KLS0gU3VtbWFyeSBiYXIg
bm93IGlzIGNvbG9yZWQgeWVsbG93IGZvciB3YXJuaW5nCi0gIHNpdHVhdGlvbnMgc3VjaCBhczog
YWxsIHRlc3RzIGVpdGhlciB3ZXJlIHNraXBwZWQgb3IgeHBhc3MveGZhaWxlZCwKLSAgb3Igbm8g
dGVzdHMgd2VyZSBydW4gYXQgYWxsICh0aGlzIGlzIGEgcGFydGlhbCBmaXggZm9yIGlzc3VlNTAw
KS4KLQotLSBmaXggaXNzdWU4MTI6IHB5dGVzdCBub3cgZXhpdHMgd2l0aCBzdGF0dXMgY29kZSA1
IGluIHNpdHVhdGlvbnMgd2hlcmUgbm8KLSAgdGVzdHMgd2VyZSBydW4gYXQgYWxsLCBzdWNoIGFz
IHRoZSBkaXJlY3RvcnkgZ2l2ZW4gaW4gdGhlIGNvbW1hbmQgbGluZSBkb2VzCi0gIG5vdCBjb250
YWluIGFueSB0ZXN0cyBvciBhcyByZXN1bHQgb2YgYSBjb21tYW5kIGxpbmUgb3B0aW9uIGZpbHRl
cnMKLSAgYWxsIG91dCBhbGwgdGVzdHMgKC1rIGZvciBleGFtcGxlKS4KLSAgVGhhbmtzIEVyaWMg
U2llZ2VybWFuIChpc3N1ZTgxMikgYW5kIEJydW5vIE9saXZlaXJhIGZvciB0aGUgUFIuCi0KLS0g
U3VtbWFyeSBiYXIgbm93IGlzIGNvbG9yZWQgeWVsbG93IGZvciB3YXJuaW5nCi0gIHNpdHVhdGlv
bnMgc3VjaCBhczogYWxsIHRlc3RzIGVpdGhlciB3ZXJlIHNraXBwZWQgb3IgeHBhc3MveGZhaWxl
ZCwKLSAgb3Igbm8gdGVzdHMgd2VyZSBydW4gYXQgYWxsIChyZWxhdGVkIHRvIGlzc3VlNTAwKS4K
LSAgVGhhbmtzIEVyaWMgU2llZ2VybWFuLgotCi0tIE5ldyBgYHRlc3RwYXRoc2BgIGluaSBvcHRp
b246IGxpc3Qgb2YgZGlyZWN0b3JpZXMgdG8gc2VhcmNoIGZvciB0ZXN0cwotICB3aGVuIGV4ZWN1
dGluZyBweXRlc3QgZnJvbSB0aGUgcm9vdCBkaXJlY3RvcnkuIFRoaXMgY2FuIGJlIHVzZWQKLSAg
dG8gc3BlZWQgdXAgdGVzdCBjb2xsZWN0aW9uIHdoZW4gYSBwcm9qZWN0IGhhcyB3ZWxsIHNwZWNp
ZmllZCBkaXJlY3RvcmllcwotICBmb3IgdGVzdHMsIGJlaW5nIHVzdWFsbHkgbW9yZSBwcmFjdGlj
YWwgdGhhbiBjb25maWd1cmluZyBub3JlY3Vyc2VkaXJzIGZvcgotICBhbGwgZGlyZWN0b3JpZXMg
dGhhdCBkbyBub3QgY29udGFpbiB0ZXN0cy4KLSAgVGhhbmtzIHRvIEFkcmlhbiBmb3IgaWRlYSAo
IzY5NCkgYW5kIEJydW5vIE9saXZlaXJhIGZvciB0aGUgUFIuCi0KLS0gZml4IGlzc3VlNzEzOiBK
VW5pdCBYTUwgcmVwb3J0cyBmb3IgZG9jdGVzdCBmYWlsdXJlcy4KLSAgVGhhbmtzIFB1bnlhc2hs
b2thIEJpc3dhbC4KLQotLSBmaXggaXNzdWU5NzA6IGludGVybmFsIHB5dGVzdCB3YXJuaW5ncyBu
b3cgYXBwZWFyIGFzICJweXRlc3Qtd2FybmluZ3MiIGluCi0gIHRoZSB0ZXJtaW5hbCBpbnN0ZWFk
IG9mICJ3YXJuaW5ncyIsIHNvIGl0IGlzIGNsZWFyIGZvciB1c2VycyB0aGF0IHRob3NlCi0gIHdh
cm5pbmdzIGFyZSBmcm9tIHB5dGVzdCBhbmQgbm90IGZyb20gdGhlIGJ1aWx0aW4gIndhcm5pbmdz
IiBtb2R1bGUuCi0gIFRoYW5rcyBCcnVubyBPbGl2ZWlyYS4KLQotLSBJbmNsdWRlIHNldHVwIGFu
ZCB0ZWFyZG93biBpbiBqdW5pdHhtbCB0ZXN0IGR1cmF0aW9ucy4KLSAgVGhhbmtzIEphbm5lIFZh
bmhhbGEuCi0KLS0gZml4IGlzc3VlNzM1OiBhc3NlcnRpb24gZmFpbHVyZXMgb24gZGVidWcgdmVy
c2lvbnMgb2YgUHl0aG9uIDMuNCsKLQotLSBuZXcgb3B0aW9uIGBgLS1pbXBvcnQtbW9kZWBgIHRv
IGFsbG93IHRvIGNoYW5nZSB0ZXN0IG1vZHVsZSBpbXBvcnRpbmcKLSAgYmVoYXZpb3VyIHRvIGFw
cGVuZCB0byBzeXMucGF0aCBpbnN0ZWFkIG9mIHByZXBlbmRpbmcuICBUaGlzIGJldHRlciBhbGxv
d3MKLSAgdG8gcnVuIHRlc3QgbW9kdWxlcyBhZ2FpbnN0IGluc3RhbGxhdGVkIHZlcnNpb25zIG9m
IGEgcGFja2FnZSBldmVuIGlmIHRoZQotICBwYWNrYWdlIHVuZGVyIHRlc3QgaGFzIHRoZSBzYW1l
IGltcG9ydCByb290LiAgSW4gdGhpcyBleGFtcGxlOjoKLQotICAgICAgICB0ZXN0aW5nL19faW5p
dF9fLnB5Ci0gICAgICAgIHRlc3RpbmcvdGVzdF9wa2dfdW5kZXJfdGVzdC5weQotICAgICAgICBw
a2dfdW5kZXJfdGVzdC8KLQotICB0aGUgdGVzdHMgd2lsbCBydW4gYWdhaW5zdCB0aGUgaW5zdGFs
bGVkIHZlcnNpb24KLSAgb2YgcGtnX3VuZGVyX3Rlc3Qgd2hlbiBgYC0taW1wb3J0LW1vZGU9YXBw
ZW5kYGAgaXMgdXNlZCB3aGVyZWFzCi0gIGJ5IGRlZmF1bHQgdGhleSB3b3VsZCBhbHdheXMgcGlj
ayB1cCB0aGUgbG9jYWwgdmVyc2lvbi4gIFRoYW5rcyBIb2xnZXIgS3Jla2VsLgotCi0tIHB5dGVz
dGVyOiBhZGQgbWV0aG9kIGBgVG1wVGVzdGRpci5kZWxldGVfbG9hZGVkX21vZHVsZXMoKWBgLCBh
bmQgY2FsbCBpdAotICBmcm9tIGBgaW5saW5lX3J1bigpYGAgdG8gYWxsb3cgdGVtcG9yYXJ5IG1v
ZHVsZXMgdG8gYmUgcmVsb2FkZWQuCi0gIFRoYW5rcyBFZHVhcmRvIFNjaGV0dGluby4KLQotLSBp
bnRlcm5hbGx5IHJlZmFjdG9yIHBsdWdpbm1hbmFnZXIgQVBJIGFuZCBjb2RlIHNvIHRoYXQgdGhl
cmUKLSAgaXMgYSBjbGVhciBkaXN0aW5jdGlvbiBiZXR3ZWVuIGEgcHl0ZXN0LWFnbm9zdGljIHJh
dGhlciBzaW1wbGUKLSAgcGx1Z2lubWFuYWdlciBhbmQgdGhlIFB5dGVzdFBsdWdpbk1hbmFnZXIg
d2hpY2ggYWRkcyBhIGxvdCBvZgotICBiZWhhdmlvdXIsIGFtb25nIGl0IGhhbmRsaW5nIG9mIHRo
ZSBsb2NhbCBjb25mdGVzdCBmaWxlcy4KLSAgSW4gdGVybXMgb2YgZG9jdW1lbnRlZCBtZXRob2Rz
IHRoaXMgaXMgYSBiYWNrd2FyZCBjb21wYXRpYmxlCi0gIGNoYW5nZSBidXQgaXQgbWlnaHQgc3Rp
bGwgYnJlYWsgM3JkIHBhcnR5IHBsdWdpbnMgd2hpY2ggcmVsaWVkIG9uCi0gIGRldGFpbHMgbGlr
ZSBlc3BlY2lhbGx5IHRoZSBwbHVnaW5tYW5hZ2VyLmFkZF9zaHV0ZG93bigpIEFQSS4KLSAgVGhh
bmtzIEhvbGdlciBLcmVrZWwuCi0KLS0gcGx1Z2lubWFuYWdlbWVudDogaW50cm9kdWNlIGBgcHl0
ZXN0Lmhvb2tpbXBsYGAgYW5kCi0gIGBgcHl0ZXN0Lmhvb2tzcGVjYGAgZGVjb3JhdG9ycyBmb3Ig
c2V0dGluZyBpbXBsL3NwZWMKLSAgc3BlY2lmaWMgcGFyYW1ldGVycy4gIFRoaXMgc3Vic3RpdHV0
ZXMgdGhlIHByZXZpb3VzCi0gIG5vdyBkZXByZWNhdGVkIHVzZSBvZiBgYHB5dGVzdC5tYXJrYGAg
d2hpY2ggaXMgbWVhbnQgdG8KLSAgY29udGFpbiBtYXJrZXJzIGZvciB0ZXN0IGZ1bmN0aW9ucyBv
bmx5LgotCi0tIHdyaXRlL3JlZmluZSBkb2NzIGZvciAid3JpdGluZyBwbHVnaW5zIiB3aGljaCBu
b3cgaGF2ZSB0aGVpcgotICBvd24gcGFnZSBhbmQgYXJlIHNlcGFyYXRlIGZyb20gdGhlICJ1c2lu
Zy9pbnN0YWxsaW5nIHBsdWdpbnNgYCBwYWdlLgotCi0tIGZpeCBpc3N1ZTczMjogcHJvcGVybHkg
dW5yZWdpc3RlciBwbHVnaW5zIGZyb20gYW55IGhvb2sgY2FsbGluZwotICBzaXRlcyBhbGxvd2lu
ZyB0byBoYXZlIHRlbXBvcmFyeSBwbHVnaW5zIGR1cmluZyB0ZXN0IGV4ZWN1dGlvbi4KLQotLSBk
ZXByZWNhdGUgYW5kIHdhcm4gYWJvdXQgYGBfX211bHRpY2FsbF9fYGAgYXJndW1lbnQgaW4gaG9v
awotICBpbXBsZW1lbnRhdGlvbnMuICBVc2UgdGhlIGBgaG9va3dyYXBwZXJgYCBtZWNoYW5pc20g
aW5zdGVhZCBhbHJlYWR5Ci0gIGludHJvZHVjZWQgd2l0aCBweXRlc3QtMi43LgotCi0tIHNwZWVk
IHVwIHB5dGVzdCdzIG93biB0ZXN0IHN1aXRlIGNvbnNpZGVyYWJseSBieSB1c2luZyBpbnByb2Nl
c3MKLSAgdGVzdHMgYnkgZGVmYXVsdCAodGVzdHJ1biBjYW4gYmUgbW9kaWZpZWQgd2l0aCAtLXJ1
bnB5dGVzdD1zdWJwcm9jZXNzCi0gIHRvIGNyZWF0ZSBzdWJwcm9jZXNzZXMgaW4gbWFueSBwbGFj
ZXMgaW5zdGVhZCkuICBUaGUgbWFpbgotICBBUElzIHRvIHJ1biBweXRlc3QgaW4gYSB0ZXN0IGlz
ICJydW5weXRlc3QoKSIgb3IgInJ1bnB5dGVzdF9zdWJwcm9jZXNzIgotICBhbmQgInJ1bnB5dGVz
dF9pbnByb2Nlc3MiIGlmIHlvdSBuZWVkIGEgcGFydGljdWxhciB3YXkgb2YgcnVubmluZwotICB0
aGUgdGVzdC4gIEluIGFsbCBjYXNlcyB5b3UgZ2V0IGJhY2sgYSBSdW5SZXN1bHQgYnV0IHRoZSBp
bnByb2Nlc3MKLSAgb25lIHdpbGwgYWxzbyBoYXZlIGEgInJlcHJlYyIgYXR0cmlidXRlIHdpdGgg
dGhlIHJlY29yZGVkIGV2ZW50cy9yZXBvcnRzLgotCi0tIGZpeCBtb25rZXlwYXRjaC5zZXRhdHRy
KCJ4LnkiLCByYWlzaW5nPUZhbHNlKSB0byBhY3R1YWxseSBub3QgcmFpc2UKLSAgaWYgInkiIGlz
IG5vdCBhIHByZS1leGlzdGluZyBhdHRyaWJ1dGUuIFRoYW5rcyBGbG9yaWFuIEJydWhpbi4KLQot
LSBmaXggaXNzdWU3NDE6IG1ha2UgcnVubmluZyBvdXRwdXQgZnJvbSB0ZXN0ZGlyLnJ1biBjb3B5
L3Bhc3RlYWJsZQotICBUaGFua3MgQnJ1bm8gT2xpdmVpcmEuCi0KLS0gYWRkIGEgbmV3IGBgLS1u
b2NvbmZ0ZXN0YGAgYXJndW1lbnQgd2hpY2ggaWdub3JlcyBhbGwgYGBjb25mdGVzdC5weWBgIGZp
bGVzLgotCi0tIGFkZCBgYGZpbGVgYCBhbmQgYGBsaW5lYGAgYXR0cmlidXRlcyB0byBKVW5pdC1Y
TUwgb3V0cHV0LgotCi0tIGZpeCBpc3N1ZTg5MDogY2hhbmdlZCBleHRlbnNpb24gb2YgYWxsIGRv
Y3VtZW50YXRpb24gZmlsZXMgZnJvbSBgYHR4dGBgIHRvCi0gIGBgcnN0YGAuIFRoYW5rcyB0byBB
YmhpamVldCBmb3IgdGhlIFBSLgotCi0tIGZpeCBpc3N1ZTcxNDogYWRkIGFiaWxpdHkgdG8gYXBw
bHkgaW5kaXJlY3Q9VHJ1ZSBwYXJhbWV0ZXIgb24gcGFydGljdWxhciBhcmduYW1lcy4KLSAgVGhh
bmtzIEVsaXphdmV0YTIzOS4KLQotLSBmaXggaXNzdWU4OTA6IGNoYW5nZWQgZXh0ZW5zaW9uIG9m
IGFsbCBkb2N1bWVudGF0aW9uIGZpbGVzIGZyb20gYGB0eHRgYCB0bwotICBgYHJzdGBgLiBUaGFu
a3MgdG8gQWJoaWplZXQgZm9yIHRoZSBQUi4KLQotLSBmaXggaXNzdWU5NTc6ICIjIGRvY3Rlc3Q6
IFNLSVAiIG9wdGlvbiB3aWxsIG5vdyByZWdpc3RlciBkb2N0ZXN0cyBhcyBTS0lQUEVECi0gIHJh
dGhlciB0aGFuIFBBU1NFRC4KLSAgVGhhbmtzIFRob21hcyBHcmFpbmdlciBmb3IgdGhlIHJlcG9y
dCBhbmQgQnJ1bm8gT2xpdmVpcmEgZm9yIHRoZSBQUi4KLQotLSBpc3N1ZTk1MTogYWRkIG5ldyBy
ZWNvcmRfeG1sX3Byb3BlcnR5IGZpeHR1cmUsIHRoYXQgc3VwcG9ydHMgbG9nZ2luZwotICBhZGRp
dGlvbmFsIGluZm9ybWF0aW9uIG9uIHhtbCBvdXRwdXQuIFRoYW5rcyBEYXZpZCBEaWF6IGZvciB0
aGUgUFIuCi0KLS0gaXNzdWU5NDk6IHBhdGhzIGFmdGVyIG5vcm1hbCBvcHRpb25zIChmb3IgZXhh
bXBsZSBgYC1zYGAsIGBgLXZgYCwgZXRjKSBhcmUgbm93Ci0gIHByb3Blcmx5IHVzZWQgdG8gZGlz
Y292ZXIgYGByb290ZGlyYGAgYW5kIGBgaW5pYGAgZmlsZXMuCi0gIFRoYW5rcyBQZXRlciBMYXVy
aSBmb3IgdGhlIHJlcG9ydCBhbmQgQnJ1bm8gT2xpdmVpcmEgZm9yIHRoZSBQUi4KLQotMi43LjMg
KGNvbXBhcmVkIHRvIDIuNy4yKQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotLSBB
bGxvdyAnZGV2JywgJ3JjJywgb3Igb3RoZXIgbm9uLWludGVnZXIgdmVyc2lvbiBzdHJpbmdzIGlu
IGBgaW1wb3J0b3Jza2lwYGAuCi0gIFRoYW5rcyB0byBFcmljIEh1bnNiZXJnZXIgZm9yIHRoZSBQ
Ui4KLQotLSBmaXggaXNzdWU4NTY6IGNvbnNpZGVyIC0tY29sb3IgcGFyYW1ldGVyIGluIGFsbCBv
dXRwdXRzIChmb3IgZXhhbXBsZQotICAtLWZpeHR1cmVzKS4gVGhhbmtzIEJhcm5leSBHYWxlIGZv
ciB0aGUgcmVwb3J0IGFuZCBCcnVubyBPbGl2ZWlyYSBmb3IgdGhlIFBSLgotCi0tIGZpeCBpc3N1
ZTg1NTogcGFzc2luZyBzdHIgb2JqZWN0cyBhcyBgYHBsdWdpbnNgYCBhcmd1bWVudCB0byBweXRl
c3QubWFpbgotICBpcyBub3cgaW50ZXJwcmV0ZWQgYXMgYSBtb2R1bGUgbmFtZSB0byBiZSBpbXBv
cnRlZCBhbmQgcmVnaXN0ZXJlZCBhcyBhCi0gIHBsdWdpbiwgaW5zdGVhZCBvZiBzaWxlbnRseSBo
YXZpbmcgbm8gZWZmZWN0LgotICBUaGFua3MgeG1vLW9kb28gZm9yIHRoZSByZXBvcnQgYW5kIEJy
dW5vIE9saXZlaXJhIGZvciB0aGUgUFIuCi0KLS0gZml4IGlzc3VlNzQ0OiBmaXggZm9yIGFzdC5D
YWxsIGNoYW5nZXMgaW4gUHl0aG9uIDMuNSsuICBUaGFua3MKLSAgR3VpZG8gdmFuIFJvc3N1bSwg
TWF0dGhpYXMgQnVzc29ubmllciwgU3RlZmFuIFppbW1lcm1hbm4gYW5kCi0gIFRob21hcyBLbHV5
dmVyLgotCi0tIGZpeCBpc3N1ZTg0MjogYXBwbHlpbmcgbWFya2VycyBpbiBjbGFzc2VzIG5vIGxv
bmdlciBwcm9wYWdhdGUgdGhpcyBtYXJrZXJzCi0gIHRvIHN1cGVyY2xhc3NlcyB3aGljaCBhbHNv
IGhhdmUgbWFya2Vycy4KLSAgVGhhbmtzIHhtby1vZG9vIGZvciB0aGUgcmVwb3J0IGFuZCBCcnVu
byBPbGl2ZWlyYSBmb3IgdGhlIFBSLgotCi0tIHByZXNlcnZlIHdhcm5pbmcgZnVuY3Rpb25zIGFm
dGVyIGNhbGwgdG8gcHl0ZXN0LmRlcHJlY2F0ZWRfY2FsbC4gVGhhbmtzCi0gIFBpZXRlciBNdWxk
ZXIgZm9yIFBSLgotCi0tIGZpeCBpc3N1ZTg1NDogYXV0b3VzZSB5aWVsZF9maXh0dXJlcyBkZWZp
bmVkIGFzIGNsYXNzIG1lbWJlcnMgb2YKLSAgdW5pdHRlc3QuVGVzdENhc2Ugc3ViY2xhc3NlcyBu
b3cgd29yayBhcyBleHBlY3RlZC4KLSAgVGhhbm5rcyB4bW8tb2RvbyBmb3IgdGhlIHJlcG9ydCBh
bmQgQnJ1bm8gT2xpdmVpcmEgZm9yIHRoZSBQUi4KLQotLSBmaXggaXNzdWU4MzM6IC0tZml4dHVy
ZXMgbm93IHNob3dzIGFsbCBmaXh0dXJlcyBvZiBjb2xsZWN0ZWQgdGVzdCBmaWxlcywgaW5zdGVh
ZCBvZiBqdXN0IHRoZQotICBmaXh0dXJlcyBkZWNsYXJlZCBvbiB0aGUgZmlyc3Qgb25lLgotICBU
aGFua3MgRmxvcmlhbiBCcnVoaW4gZm9yIHJlcG9ydGluZyBhbmQgQnJ1bm8gT2xpdmVpcmEgZm9y
IHRoZSBQUi4KLQotLSBmaXggaXNzdWU4NjM6IHNraXBwZWQgdGVzdHMgbm93IHJlcG9ydCB0aGUg
Y29ycmVjdCByZWFzb24gd2hlbiBhIHNraXAveGZhaWwKLSAgY29uZGl0aW9uIGlzIG1ldCB3aGVu
IHVzaW5nIG11bHRpcGxlIG1hcmtlcnMuCi0gIFRoYW5rcyBSYXBoYWVsIFBpZXJ6aW5hIGZvciBy
ZXBvcnRpbmcgYW5kIEJydW5vIE9saXZlaXJhIGZvciB0aGUgUFIuCi0KLS0gb3B0aW1pemVkIHRt
cGRpciBmaXh0dXJlIGluaXRpYWxpemF0aW9uLCB3aGljaCBzaG91bGQgbWFrZSB0ZXN0IHNlc3Np
b25zCi0gIGZhc3RlciAoc3BlY2lhbGx5IHdoZW4gdXNpbmcgcHl0ZXN0LXhkaXN0KS4gVGhlIG9u
bHkgdmlzaWJsZSBlZmZlY3QKLSAgaXMgdGhhdCBub3cgcHl0ZXN0IHVzZXMgYSBzdWJkaXJlY3Rv
cnkgaW4gdGhlICRURU1QIGRpcmVjdG9yeSBmb3IgYWxsCi0gIGRpcmVjdG9yaWVzIGNyZWF0ZWQg
YnkgdGhpcyBmaXh0dXJlIChkZWZhdWx0cyB0byAkVEVNUC9weXRlc3QtJFVTRVIpLgotICBUaGFu
a3MgQnJ1bm8gT2xpdmVpcmEgZm9yIHRoZSBQUi4KLQotMi43LjIgKGNvbXBhcmVkIHRvIDIuNy4x
KQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotLSBmaXggaXNzdWU3Njc6IHB5dGVz
dC5yYWlzZXMgdmFsdWUgYXR0cmlidXRlIGRvZXMgbm90IGNvbnRhaW4gdGhlIGV4Y2VwdGlvbgot
ICBpbnN0YW5jZSBvbiBQeXRob24gMi42LiBUaGFua3MgRXJpYyBTaWVnZXJtYW4gZm9yIHByb3Zp
ZGluZyB0aGUgdGVzdAotICBjYXNlIGFuZCBCcnVubyBPbGl2ZWlyYSBmb3IgUFIuCi0KLS0gQXV0
b21hdGljYWxseSBjcmVhdGUgZGlyZWN0b3J5IGZvciBqdW5pdHhtbCBhbmQgcmVzdWx0cyBsb2cu
Ci0gIFRoYW5rcyBBcm9uIEN1cnpvbi4KLQotLSBmaXggaXNzdWU3MTM6IEpVbml0IFhNTCByZXBv
cnRzIGZvciBkb2N0ZXN0IGZhaWx1cmVzLgotICBUaGFua3MgUHVueWFzaGxva2EgQmlzd2FsLgot
Ci0tIGZpeCBpc3N1ZTczNTogYXNzZXJ0aW9uIGZhaWx1cmVzIG9uIGRlYnVnIHZlcnNpb25zIG9m
IFB5dGhvbiAzLjQrCi0gIFRoYW5rcyBCZW5qYW1pbiBQZXRlcnNvbi4KLQotLSBmaXggaXNzdWUx
MTQ6IHNraXBpZiBtYXJrZXIgcmVwb3J0cyB0byBpbnRlcm5hbCBza2lwcGluZyBwbHVnaW47Ci0g
IFRoYW5rcyBGbG9yaXMgQnJ1eW5vb2doZSBmb3IgcmVwb3J0aW5nIGFuZCBCcnVubyBPbGl2ZWly
YSBmb3IgdGhlIFBSLgotCi0tIGZpeCBpc3N1ZTc0ODogdW5pdHRlc3QuU2tpcFRlc3QgcmVwb3J0
cyB0byBpbnRlcm5hbCBweXRlc3QgdW5pdHRlc3QgcGx1Z2luLgotICBUaGFua3MgVGhvbWFzIERl
IFNjaGFtcGhlbGVpcmUgZm9yIHJlcG9ydGluZyBhbmQgQnJ1bm8gT2xpdmVpcmEgZm9yIHRoZSBQ
Ui4KLQotLSBmaXggaXNzdWU3MTg6IGZhaWxlZCB0byBjcmVhdGUgcmVwcmVzZW50YXRpb24gb2Yg
c2V0cyBjb250YWluaW5nIHVuc29ydGFibGUKLSAgZWxlbWVudHMgaW4gcHl0aG9uIDIuIFRoYW5r
cyBFZGlzb24gR3VzdGF2byBNdWVuei4KLQotLSBmaXggaXNzdWU3NTYsIGZpeCBpc3N1ZTc1MiAo
YW5kIHNpbWlsYXIgaXNzdWVzKTogZGVwZW5kIG9uIHB5LTEuNC4yOQotICB3aGljaCBoYXMgYSBy
ZWZpbmVkIGFsZ29yaXRobSBmb3IgdHJhY2ViYWNrIGdlbmVyYXRpb24uCi0KLQotMi43LjEgKGNv
bXBhcmVkIHRvIDIuNy4wKQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotLSBmaXgg
aXNzdWU3MzE6IGRvIG5vdCBnZXQgY29uZnVzZWQgYnkgdGhlIGJyYWNlcyB3aGljaCBtYXkgYmUg
cHJlc2VudAotICBhbmQgdW5iYWxhbmNlZCBpbiBhbiBvYmplY3QncyByZXByIHdoaWxlIGNvbGxh
cHNpbmcgRmFsc2UKLSAgZXhwbGFuYXRpb25zLiAgVGhhbmtzIENhcmwgTWV5ZXIgZm9yIHRoZSBy
ZXBvcnQgYW5kIHRlc3QgY2FzZS4KLQotLSBmaXggaXNzdWU1NTM6IHByb3Blcmx5IGhhbmRsaW5n
IGluc3BlY3QuZ2V0c291cmNlbGluZXMgZmFpbHVyZXMgaW4KLSAgRml4dHVyZUxvb2t1cEVycm9y
IHdoaWNoIHdvdWxkIGxlYWQgdG8gdG8gYW4gaW50ZXJuYWwgZXJyb3IsCi0gIG9iZnVzY2F0aW5n
IHRoZSBvcmlnaW5hbCBwcm9ibGVtLiBUaGFua3MgdGFsbGpvc2ggZm9yIGluaXRpYWwKLSAgZGlh
Z25vc2UvcGF0Y2ggYW5kIEJydW5vIE9saXZlaXJhIGZvciBmaW5hbCBwYXRjaC4KLQotLSBmaXgg
aXNzdWU2NjA6IHByb3Blcmx5IHJlcG9ydCBzY29wZS1taXNtYXRjaC1hY2Nlc3MgZXJyb3JzCi0g
IGluZGVwZW5kZW50bHkgZnJvbSBvcmRlcmluZyBvZiBmaXh0dXJlIGFyZ3VtZW50cy4gIEFsc28K
LSAgYXZvaWQgdGhlIHB5dGVzdCBpbnRlcm5hbCB0cmFjZWJhY2sgd2hpY2ggZG9lcyBub3QgcHJv
dmlkZQotICBpbmZvcm1hdGlvbiB0byB0aGUgdXNlci4gVGhhbmtzIEhvbGdlciBLcmVrZWwuCi0K
LS0gc3RyZWFtbGluZWQgYW5kIGRvY3VtZW50ZWQgcmVsZWFzZSBwcm9jZXNzLiAgQWxzbyBhbGwg
dmVyc2lvbnMKLSAgKGluIHNldHVwLnB5IGFuZCBkb2N1bWVudGF0aW9uIGdlbmVyYXRpb24pIGFy
ZSBub3cgcmVhZAotICBmcm9tIF9weXRlc3QvX19pbml0X18ucHkuIFRoYW5rcyBIb2xnZXIgS3Jl
a2VsLgotCi0tIGZpeGVkIGRvY3MgdG8gcmVtb3ZlIHRoZSBub3Rpb24gdGhhdCB5aWVsZC1maXh0
dXJlcyBhcmUgZXhwZXJpbWVudGFsLgotICBUaGV5IGFyZSBoZXJlIHRvIHN0YXkgOikgIFRoYW5r
cyBCcnVubyBPbGl2ZWlyYS4KLQotLSBTdXBwb3J0IGJ1aWxkaW5nIHdoZWVscyBieSB1c2luZyBl
bnZpcm9ubWVudCBtYXJrZXJzIGZvciB0aGUKLSAgcmVxdWlyZW1lbnRzLiAgVGhhbmtzIElvbmVs
IE1hcmllcyBDcmlzdGlhbi4KLQotLSBmaXhlZCByZWdyZXNzaW9uIHRvIDIuNi40IHdoaWNoIHN1
cmZhY2VkIGUuZy4gaW4gbG9zdCBzdGRvdXQgY2FwdHVyZSBwcmludGluZwotICB3aGVuIHRlc3Rz
IHJhaXNlZCBTeXN0ZW1FeGl0LiBUaGFua3MgSG9sZ2VyIEtyZWtlbC4KLQotLSByZWludHJvZHVj
ZWQgX3B5dGVzdCBmaXh0dXJlIG9mIHRoZSBweXRlc3RlciBwbHVnaW4gd2hpY2ggaXMgdXNlZAot
ICBhdCBsZWFzdCBieSBweXRlc3QteGRpc3QuCi0KLTIuNy4wIChjb21wYXJlZCB0byAyLjYuNCkK
LT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLS0gZml4IGlzc3VlNDM1OiBtYWtlIHJl
bG9hZCgpIHdvcmsgd2hlbiBhc3NlcnQgcmV3cml0aW5nIGlzIGFjdGl2ZS4KLSAgVGhhbmtzIERh
bmllbCBIYWhsZXIuCi0KLS0gZml4IGlzc3VlNjE2OiBjb25mdGVzdC5weSBmaWxlcyBhbmQgdGhl
aXIgY29udGFpbmVkIGZpeHV0cmVzIGFyZSBub3cKLSAgcHJvcGVybHkgY29uc2lkZXJlZCBmb3Ig
dmlzaWJpbGl0eSwgaW5kZXBlbmRlbnRseSBmcm9tIHRoZSBleGFjdAotICBjdXJyZW50IHdvcmtp
bmcgZGlyZWN0b3J5IGFuZCB0ZXN0IGFyZ3VtZW50cyB0aGF0IGFyZSB1c2VkLgotICBNYW55IHRo
YW5rcyB0byBFcmljIFNpZWdlcm1hbiBhbmQgaGlzIFBSMjM1IHdoaWNoIGNvbnRhaW5zCi0gIHN5
c3RlbWF0aWMgdGVzdHMgZm9yIGNvbmZ0ZXN0IHZpc2liaWxpdHkgYW5kIG5vdyBwYXNzZXMuCi0g
IFRoaXMgY2hhbmdlIGFsc28gaW50cm9kdWNlcyB0aGUgY29uY2VwdCBvZiBhIGBgcm9vdGRpcmBg
IHdoaWNoCi0gIGlzIHByaW50ZWQgYXMgYSBuZXcgcHl0ZXN0IGhlYWRlciBhbmQgZG9jdW1lbnRl
ZCBpbiB0aGUgcHl0ZXN0Ci0gIGN1c3RvbWl6ZSB3ZWIgcGFnZS4KLQotLSBjaGFuZ2UgcmVwb3J0
aW5nIG9mICJkaXZlcnRlZCIgdGVzdHMsIGkuZS4gdGVzdHMgdGhhdCBhcmUgY29sbGVjdGVkCi0g
IGluIG9uZSBmaWxlIGJ1dCBhY3R1YWxseSBjb21lIGZyb20gYW5vdGhlciAoZS5nLiB3aGVuIHRl
c3RzIGluIGEgdGVzdCBjbGFzcwotICBjb21lIGZyb20gYSBiYXNlIGNsYXNzIGluIGEgZGlmZmVy
ZW50IGZpbGUpLiAgV2Ugbm93IHNob3cgdGhlIG5vZGVpZAotICBhbmQgaW5kaWNhdGUgdmlhIGEg
cG9zdGZpeCB0aGUgb3RoZXIgZmlsZS4KLQotLSBhZGQgYWJpbGl0eSB0byBzZXQgY29tbWFuZCBs
aW5lIG9wdGlvbnMgYnkgZW52aXJvbm1lbnQgdmFyaWFibGUgUFlURVNUX0FERE9QVFMuCi0KLS0g
YWRkZWQgZG9jdW1lbnRhdGlvbiBvbiB0aGUgbmV3IHB5dGVzdC1kZXYgdGVhbXMgb24gYml0YnVj
a2V0IGFuZAotICBnaXRodWIuICBTZWUgaHR0cHM6Ly9weXRlc3Qub3JnL2xhdGVzdC9jb250cmli
dXRpbmcuaHRtbCAuCi0gIFRoYW5rcyB0byBBbmF0b2x5IGZvciBwdXNoaW5nIGFuZCBpbml0aWFs
IHdvcmsgb24gdGhpcy4KLQotLSBmaXggaXNzdWU2NTA6IG5ldyBvcHRpb24gYGAtLWRvY3R0ZXN0
LWlnbm9yZS1pbXBvcnQtZXJyb3JzYGAgd2hpY2gKLSAgd2lsbCB0dXJuIGltcG9ydCBlcnJvcnMg
aW4gZG9jdGVzdHMgaW50byBza2lwcy4gIFRoYW5rcyBDaGFybGVzIENsb3VkCi0gIGZvciB0aGUg
Y29tcGxldGUgUFIuCi0KLS0gZml4IGlzc3VlNjU1OiB3b3JrIGFyb3VuZCBkaWZmZXJlbnQgd2F5
cyB0aGF0IGNhdXNlIHB5dGhvbjIvMwotICB0byBsZWFrIHN5cy5leGNfaW5mbyBpbnRvIGZpeHR1
cmVzL3Rlc3RzIGNhdXNpbmcgZmFpbHVyZXMgaW4gM3JkIHBhcnR5IGNvZGUKLQotLSBmaXggaXNz
dWU2MTU6IGFzc2VydGlvbiByZS13cml0aW5nIGRpZCBub3QgY29ycmVjdGx5IGVzY2FwZSAlIHNp
Z25zCi0gIHdoZW4gZm9ybWF0dGluZyBib29sZWFuIG9wZXJhdGlvbnMsIHdoaWNoIHRyaXBwZWQg
b3ZlciBtaXhpbmcKLSAgYm9vbGVhbnMgd2l0aCBtb2R1bG8gb3BlcmF0b3JzLiAgVGhhbmtzIHRv
IFRvbSBWaW5lciBmb3IgdGhlIHJlcG9ydCwKLSAgdHJpYWdpbmcgYW5kIGZpeC4KLQotLSBpbXBs
ZW1lbnQgaXNzdWUzNTE6IGFkZCBhYmlsaXR5IHRvIHNwZWNpZnkgcGFyYW1ldHJpemUgaWRzIGFz
IGEgY2FsbGFibGUKLSAgdG8gZ2VuZXJhdGUgY3VzdG9tIHRlc3QgaWRzLiAgVGhhbmtzIEJyaWFu
bmEgTGF1Z2hlciBmb3IgdGhlIGlkZWEgYW5kCi0gIGltcGxlbWVudGF0aW9uLgotCi0tIGludHJv
ZHVjZSBhbmQgZG9jdW1lbnQgbmV3IGhvb2t3cmFwcGVyIG1lY2hhbmlzbSB1c2VmdWwgZm9yIHBs
dWdpbnMKLSAgd2hpY2ggd2FudCB0byB3cmFwIHRoZSBleGVjdXRpb24gb2YgY2VydGFpbiBob29r
cyBmb3IgdGhlaXIgcHVycG9zZXMuCi0gIFRoaXMgc3VwZXJzZWRlcyB0aGUgdW5kb2N1bWVudGVk
IGBgX19tdWx0aWNhbGxfX2BgIHByb3RvY29sIHdoaWNoCi0gIHB5dGVzdCBpdHNlbGYgYW5kIHNv
bWUgZXh0ZXJuYWwgcGx1Z2lucyB1c2UuICBOb3RlIHRoYXQgcHl0ZXN0LTIuOAotICBpcyBzY2hl
ZHVsZWQgdG8gZHJvcCBzdXBwb3J0aW5nIHRoZSBvbGQgYGBfX211bHRpY2FsbF9fYGAKLSAgYW5k
IG9ubHkgc3VwcG9ydCB0aGUgaG9va3dyYXBwZXIgcHJvdG9jb2wuCi0KLS0gbWFqb3JseSBzcGVl
ZCB1cCBpbnZvY2F0aW9uIG9mIHBsdWdpbiBob29rcwotCi0tIHVzZSBob29rd3JhcHBlciBtZWNo
YW5pc20gaW4gYnVpbHRpbiBweXRlc3QgcGx1Z2lucy4KLQotLSBhZGQgYSBkb2N0ZXN0IGluaSBv
cHRpb24gZm9yIGRvY3Rlc3QgZmxhZ3MsIHRoYW5rcyBIb2xnZXIgUGV0ZXJzLgotCi0tIGFkZCBu
b3RlIHRvIGRvY3MgdGhhdCBpZiB5b3Ugd2FudCB0byBtYXJrIGEgcGFyYW1ldGVyIGFuZCB0aGUK
LSAgcGFyYW1ldGVyIGlzIGEgY2FsbGFibGUsIHlvdSBhbHNvIG5lZWQgdG8gcGFzcyBpbiBhIHJl
YXNvbiB0byBkaXNhbWJpZ3VhdGUKLSAgaXQgZnJvbSB0aGUgImRlY29yYXRvciIgY2FzZS4gIFRo
YW5rcyBUb20gVmluZXIuCi0KLS0gInB5dGhvbl9jbGFzc2VzIiBhbmQgInB5dGhvbl9mdW5jdGlv
bnMiIG9wdGlvbnMgbm93IHN1cHBvcnQgZ2xvYi1wYXR0ZXJucwotICBmb3IgdGVzdCBkaXNjb3Zl
cnksIGFzIGRpc2N1c3NlZCBpbiBpc3N1ZTYwMC4gVGhhbmtzIExkaWFyeSBUcmFuc2xhdGlvbnMu
Ci0KLS0gYWxsb3cgdG8gb3ZlcnJpZGUgcGFyYW1ldHJpemVkIGZpeHR1cmVzIHdpdGggbm9uLXBh
cmFtZXRyaXplZCBvbmVzIGFuZCB2aWNlIHZlcnNhIChidWJlbmtvZmYpLgotCi0tIGZpeCBpc3N1
ZTQ2MzogcmFpc2Ugc3BlY2lmaWMgZXJyb3IgZm9yICdwYXJhbWV0ZXJpemUnIG1pc3NwZWxsaW5n
IChwZmN0ZGF5ZWxpc2UpLgotCi0tIE9uIGZhaWx1cmUsIHRoZSBgYHN5cy5sYXN0X3ZhbHVlYGAs
IGBgc3lzLmxhc3RfdHlwZWBgIGFuZAotICBgYHN5cy5sYXN0X3RyYWNlYmFja2BgIGFyZSBzZXQs
IHNvIHRoYXQgYSB1c2VyIGNhbiBpbnNwZWN0IHRoZSBlcnJvcgotICB2aWEgcG9zdG1vcnRlbSBk
ZWJ1Z2dpbmcgKGFsbWFya2xlaW4pLgotCi0yLjYuNAotPT09PT0KLQotLSBJbXByb3ZlIGFzc2Vy
dGlvbiBmYWlsdXJlIHJlcG9ydGluZyBvbiBpdGVyYWJsZXMsIGJ5IHVzaW5nIG5kaWZmIGFuZAot
ICBwcHJpbnQuCi0KLS0gcmVtb3ZlZCBvdXRkYXRlZCBqYXBhbmVzZSBkb2NzIGZyb20gc291cmNl
IHRyZWUuCi0KLS0gZG9jcyBmb3IgInB5dGVzdF9hZGRob29rcyIgaG9vay4gIFRoYW5rcyBCcnVu
byBPbGl2ZWlyYS4KLQotLSB1cGRhdGVkIHBsdWdpbiBpbmRleCBkb2NzLiAgVGhhbmtzIEJydW5v
IE9saXZlaXJhLgotCi0tIGZpeCBpc3N1ZTU1Nzogd2l0aCAiLWsiIHdlIG9ubHkgYWxsb3cgdGhl
IG9sZCBzdHlsZSAiLSIgZm9yIG5lZ2F0aW9uCi0gIGF0IHRoZSBiZWdpbm5pbmcgb2Ygc3RyaW5n
cyBhbmQgZXZlbiB0aGF0IGlzIGRlcHJlY2F0ZWQuICBVc2UgIm5vdCIgaW5zdGVhZC4KLSAgVGhp
cyBzaG91bGQgYWxsb3cgdG8gcGljayBwYXJhbWV0cml6ZWQgdGVzdHMgd2hlcmUgIi0iIGFwcGVh
cmVkIGluIHRoZSBwYXJhbWV0ZXIuCi0KLS0gZml4IGlzc3VlNjA0OiBFc2NhcGUgJSBjaGFyYWN0
ZXIgaW4gdGhlIGFzc2VydGlvbiBtZXNzYWdlLgotCi0tIGZpeCBpc3N1ZTYyMDogYWRkIGV4cGxh
bmF0aW9uIGluIHRoZSAtLWdlbnNjcmlwdCB0YXJnZXQgYWJvdXQgd2hhdAotICB0aGUgYmluYXJ5
IGJsb2IgbWVhbnMuIFRoYW5rcyBEaW51IEdoZXJtYW4uCi0KLS0gZml4IGlzc3VlNjE0OiBmaXhl
ZCBwYXN0ZWJpbiBzdXBwb3J0LgotCi0KLS0gZml4IGlzc3VlNjIwOiBhZGQgZXhwbGFuYXRpb24g
aW4gdGhlIC0tZ2Vuc2NyaXB0IHRhcmdldCBhYm91dCB3aGF0Ci0gIHRoZSBiaW5hcnkgYmxvYiBt
ZWFucy4gVGhhbmtzIERpbnUgR2hlcm1hbi4KLQotLSBmaXggaXNzdWU2MTQ6IGZpeGVkIHBhc3Rl
YmluIHN1cHBvcnQuCi0KLTIuNi4zCi09PT09PQotCi0tIGZpeCBpc3N1ZTU3NTogeHVuaXQteG1s
IHdhcyByZXBvcnRpbmcgY29sbGVjdGlvbiBlcnJvcnMgYXMgZmFpbHVyZXMKLSAgaW5zdGVhZCBv
ZiBlcnJvcnMsIHRoYW5rcyBPbGVnIFNpbnlhdnNraXkuCi0KLS0gZml4IGlzc3VlNTgyOiBmaXgg
c2V0dXB0b29scyBleGFtcGxlLCB0aGFua3MgTGFzemxvIFBhcHAgYW5kIFJvbm55Ci0gIFBmYW5u
c2NobWlkdC4KLQotLSBGaXggaW5maW5pdGUgcmVjdXJzaW9uIGJ1ZyB3aGVuIHBpY2tsaW5nIGNh
cHR1cmUuRW5jb2RlZEZpbGUsIHRoYW5rcwotICBVd2UgU2NobWl0dC4KLQotLSBmaXggaXNzdWU1
ODk6IGZpeCBiYWQgaW50ZXJhY3Rpb24gd2l0aCBudW1weSBhbmQgb3RoZXJzIHdoZW4gc2hvd2lu
ZwotICBleGNlcHRpb25zLiAgQ2hlY2sgZm9yIHByZWNpc2UgIm1heGltdW0gcmVjdXJzaW9uIGRl
cHRoIGV4Y2VlZCIgZXhjZXB0aW9uCi0gIGluc3RlYWQgb2YgcHJlc3VtaW5nIGFueSBSdW50aW1l
RXJyb3IgaXMgdGhhdCBvbmUgKGltcGxlbWVudGVkIGluIHB5Ci0gIGRlcCkuICBUaGFua3MgQ2hh
cmxlcyBDbG91ZCBmb3IgYW5hbHlzaW5nIHRoZSBpc3N1ZS4KLQotLSBmaXggY29uZnRlc3QgcmVs
YXRlZCBmaXh0dXJlIHZpc2liaWxpdHkgaXNzdWU6IHdoZW4gcnVubmluZyB3aXRoIGEKLSAgQ1dE
IG91dHNpZGUgYSB0ZXN0IHBhY2thZ2UgcHl0ZXN0IHdvdWxkIGdldCBmaXh0dXJlIGRpc2NvdmVy
eSB3cm9uZy4KLSAgVGhhbmtzIHRvIFdvbGZnYW5nIFNjaG5lcnJpbmcgZm9yIGZpZ3VyaW5nIG91
dCBhIHJlcHJvZHVjYWJsZSBleGFtcGxlLgotCi0tIEludHJvZHVjZSBweXRlc3RfZW50ZXJfcGRi
IGhvb2sgKG5lZWRlZCBlLmcuIGJ5IHB5dGVzdF90aW1lb3V0IHRvIGNhbmNlbCB0aGUKLSAgdGlt
ZW91dCB3aGVuIGludGVyYWN0aXZlbHkgZW50ZXJpbmcgcGRiKS4gIFRoYW5rcyBXb2xmZ2FuZyBT
Y2huZXJyaW5nLgotCi0tIGNoZWNrIHhmYWlsL3NraXAgYWxzbyB3aXRoIG5vbi1weXRob24gZnVu
Y3Rpb24gdGVzdCBpdGVtcy4gVGhhbmtzCi0gIEZsb3JpcyBCcnV5bm9vZ2hlLgotCi0yLjYuMgot
PT09PT0KLQotLSBBZGRlZCBmdW5jdGlvbiBweXRlc3QuZnJlZXplX2luY2x1ZGVzKCksIHdoaWNo
IG1ha2VzIGl0IGVhc3kgdG8gZW1iZWQKLSAgcHl0ZXN0IGludG8gZXhlY3V0YWJsZXMgdXNpbmcg
dG9vbHMgbGlrZSBjeF9mcmVlemUuCi0gIFNlZSBkb2NzIGZvciBleGFtcGxlcyBhbmQgcmF0aW9u
YWxlLiBUaGFua3MgQnJ1bm8gT2xpdmVpcmEuCi0KLS0gSW1wcm92ZSBhc3NlcnRpb24gcmV3cml0
aW5nIGNhY2hlIGludmFsaWRhdGlvbiBwcmVjaXNpb24uCi0KLS0gZml4ZWQgaXNzdWU1NjE6IGFk
YXB0IGF1dG91c2UgZml4dHVyZSBleGFtcGxlIGZvciBweXRob24zLgotCi0tIGZpeGVkIGlzc3Vl
NDUzOiBhc3NlcnRpb24gcmV3cml0aW5nIGlzc3VlIHdpdGggX19yZXByX18gY29udGFpbmluZwot
ICAiXG57IiwgIlxufSIgYW5kICJcbn4iLgotCi0tIGZpeCBpc3N1ZTU2MDogY29ycmVjdGx5IGRp
c3BsYXkgY29kZSBpZiBhbiAiZWxzZToiIG9yICJmaW5hbGx5OiIgaXMKLSAgZm9sbG93ZWQgYnkg
c3RhdGVtZW50cyBvbiB0aGUgc2FtZSBsaW5lLgotCi0tIEZpeCBleGFtcGxlIGluIG1vbmtleXBh
dGNoIGRvY3VtZW50YXRpb24sIHRoYW5rcyB0LThjaC4KLQotLSBmaXggaXNzdWU1NzI6IGNvcnJl
Y3QgdG1wZGlyIGRvYyBleGFtcGxlIGZvciBweXRob24zLgotCi0tIERvIG5vdCBtYXJrIGFzIHVu
aXZlcnNhbCB3aGVlbCBiZWNhdXNlIFB5dGhvbiAyLjYgaXMgZGlmZmVyZW50IGZyb20KLSAgb3Ro
ZXIgYnVpbGRzIGR1ZSB0byB0aGUgZXh0cmEgYXJncGFyc2UgZGVwZW5kZW5jeS4gIEZpeGVzIGlz
c3VlNTY2LgotICBUaGFua3Mgc29udGVrLgotCi0tIEltcGxlbWVudCBpc3N1ZTU0OTogdXNlci1w
cm92aWRlZCBhc3NlcnRpb24gbWVzc2FnZXMgbm93IG5vIGxvbmdlcgotICByZXBsYWNlIHRoZSBw
eS50ZXN0IGludHJvc3BlY3Rpb24gbWVzc2FnZSBidXQgYXJlIHNob3duIGluIGFkZGl0aW9uCi0g
IHRvIHRoZW0uCi0KLTIuNi4xCi09PT09PQotCi0tIE5vIGxvbmdlciBzaG93IGxpbmUgbnVtYmVy
cyBpbiB0aGUgLS12ZXJib3NlIG91dHB1dCwgdGhlIG91dHB1dCBpcyBub3cKLSAgcHVyZWx5IHRo
ZSBub2RlaWQuICBUaGUgbGluZSBudW1iZXIgaXMgc3RpbGwgc2hvd24gaW4gZmFpbHVyZSByZXBv
cnRzLgotICBUaGFua3MgRmxvcmlzIEJydXlub29naGUuCi0KLS0gZml4IGlzc3VlNDM3IHdoZXJl
IGFzc2VydGlvbiByZXdyaXRpbmcgY291bGQgY2F1c2UgcHl0ZXN0LXhkaXN0IHNsYXZlcwotICB0
byBjb2xsZWN0IGRpZmZlcmVudCB0ZXN0cy4gVGhhbmtzIEJydW5vIE9saXZlaXJhLgotCi0tIGZp
eCBpc3N1ZTU1NTogYWRkICJlcnJvcnMiIGF0dHJpYnV0ZSB0byBjYXB0dXJlLXN0cmVhbXMgdG8g
c2F0aXNmeQotICBzb21lIGRpc3R1dGlscyBhbmQgcG9zc2libHkgb3RoZXIgY29kZSBhY2Nlc3Np
bmcgc3lzLnN0ZG91dC5lcnJvcnMuCi0KLS0gZml4IGlzc3VlNTQ3IGNhcHN5cy9jYXBmZCBhbHNv
IHdvcmsgd2hlbiBvdXRwdXQgY2FwdHVyaW5nICgiLXMiKSBpcyBkaXNhYmxlZC4KLQotLSBhZGRy
ZXNzIGlzc3VlMTcwOiBhbGxvdyBweXRlc3QubWFyay54ZmFpbCguLi4pIHRvIHNwZWNpZnkgZXhw
ZWN0ZWQgZXhjZXB0aW9ucyB2aWEKLSAgYW4gb3B0aW9uYWwgInJhaXNlcz1FWEMiIGFyZ3VtZW50
IHdoZXJlIEVYQyBjYW4gYmUgYSBzaW5nbGUgZXhjZXB0aW9uCi0gIG9yIGEgdHVwbGUgb2YgZXhj
ZXB0aW9uIGNsYXNzZXMuICBUaGFua3MgRGF2aWQgTW9ociBmb3IgdGhlIGNvbXBsZXRlCi0gIFBS
LgotCi0tIGZpeCBpbnRlZ3JhdGlvbiBvZiBweXRlc3Qgd2l0aCB1bml0dGVzdC5tb2NrLnBhdGNo
IGRlY29yYXRvciB3aGVuCi0gIGl0IHVzZXMgdGhlICJuZXciIGFyZ3VtZW50LiAgVGhhbmtzIE5p
Y29sYXMgRGVsYWJ5IGZvciB0ZXN0IGFuZCBQUi4KLQotLSBmaXggaXNzdWUgd2l0aCBkZXRlY3Rp
bmcgY29uZnRlc3QgZmlsZXMgaWYgdGhlIGFyZ3VtZW50cyBjb250YWluCi0gICI6OiIgbm9kZSBp
ZCBzcGVjaWZpY2F0aW9ucyAoY29weSBwYXN0ZWQgZnJvbSAiLXYiIG91dHB1dCkKLQotLSBmaXgg
aXNzdWU1NDQgYnkgb25seSByZW1vdmluZyAiQE5VTSIgYXQgdGhlIGVuZCBvZiAiOjoiIHNlcGFy
YXRlZCBwYXJ0cwotICBhbmQgaWYgdGhlIHBhcnQgaGFzIGFuICIucHkiIGV4dGVuc2lvbgotCi0t
IGRvbid0IHVzZSBweS5zdGQgaW1wb3J0IGhlbHBlciwgcmF0aGVyIGltcG9ydCB0aGluZ3MgZGly
ZWN0bHkuCi0gIFRoYW5rcyBCcnVubyBPbGl2ZWlyYS4KLQotMi42Ci09PT0KLQotLSBDYWNoZSBl
eGNlcHRpb25zIGZyb20gZml4dHVyZXMgYWNjb3JkaW5nIHRvIHRoZWlyIHNjb3BlIChpc3N1ZSA0
NjcpLgotCi0tIGZpeCBpc3N1ZTUzNzogQXZvaWQgaW1wb3J0aW5nIG9sZCBhc3NlcnRpb24gcmVp
bnRlcnByZXRhdGlvbiBjb2RlIGJ5IGRlZmF1bHQuCi0KLS0gZml4IGlzc3VlMzY0OiBzaG9ydGVu
IGFuZCBlbmhhbmNlIHRyYWNlYmFja3MgcmVwcmVzZW50YXRpb24gYnkgZGVmYXVsdC4KLSAgVGhl
IG5ldyAiLS10Yj1hdXRvIiBvcHRpb24gKGRlZmF1bHQpIHdpbGwgb25seSBkaXNwbGF5IGxvbmcg
dHJhY2ViYWNrcwotICBmb3IgdGhlIGZpcnN0IGFuZCBsYXN0IGVudHJ5LiAgWW91IGNhbiBnZXQg
dGhlIG9sZCBiZWhhdmlvdXIgb2YgcHJpbnRpbmcKLSAgYWxsIGVudHJpZXMgYXMgbG9uZyBlbnRy
aWVzIHdpdGggIi0tdGI9bG9uZyIuICBBbHNvIHNob3J0IGVudHJpZXMgYnkKLSAgZGVmYXVsdCBh
cmUgbm93IHByaW50ZWQgdmVyeSBzaW1pbGFybHkgdG8gIi0tdGI9bmF0aXZlIiBvbmVzLgotCi0t
IGZpeCBpc3N1ZTUxNDogdGVhY2ggYXNzZXJ0aW9uIHJlaW50ZXJwcmV0YXRpb24gYWJvdXQgcHJp
dmF0ZSBjbGFzcyBhdHRyaWJ1dGVzCi0KLS0gY2hhbmdlIC12IG91dHB1dCB0byBpbmNsdWRlIGZ1
bGwgbm9kZSBJRHMgb2YgdGVzdHMuICBVc2VycyBjYW4gY29weQotICBhIG5vZGUgSUQgZnJvbSBh
IHRlc3QgcnVuLCBpbmNsdWRpbmcgbGluZSBudW1iZXIsIGFuZCB1c2UgaXQgYXMgYQotICBwb3Np
dGlvbmFsIGFyZ3VtZW50IGluIG9yZGVyIHRvIHJ1biBvbmx5IGEgc2luZ2xlIHRlc3QuCi0KLS0g
Zml4IGlzc3VlIDQ3NTogZmFpbCBlYXJseSBhbmQgY29tcHJlaGVuc2libGUgaWYgY2FsbGluZwot
ICBweXRlc3QucmFpc2VzIHdpdGggd3JvbmcgZXhjZXB0aW9uIHR5cGUuCi0KLS0gZml4IGlzc3Vl
NTE2OiB0ZWxsIGluIGdldHRpbmctc3RhcnRlZCBhYm91dCBjdXJyZW50IGRlcGVuZGVuY2llcy4K
LQotLSBjbGVhbnVwIHNldHVwLnB5IGEgYml0IGFuZCBzcGVjaWZ5IHN1cHBvcnRlZCB2ZXJzaW9u
cy4gVGhhbmtzIEp1cmtvCi0gIEdvc3BvZG5ldGljIGZvciB0aGUgUFIuCi0KLS0gY2hhbmdlIFhQ
QVNTIGNvbG91ciB0byB5ZWxsb3cgcmF0aGVyIHRoZW4gcmVkIHdoZW4gdGVzdHMgYXJlIHJ1bgot
ICB3aXRoIC12LgotCi0tIGZpeCBpc3N1ZTQ3Mzogd29yayBhcm91bmQgbW9jayBwdXR0aW5nIGFu
IHVuYm91bmQgbWV0aG9kIGludG8gYSBjbGFzcwotICBkaWN0IHdoZW4gZG91YmxlLXBhdGNoaW5n
LgotCi0tIGZpeCBpc3N1ZTQ5ODogaWYgYSBmaXh0dXJlIGZpbmFsaXplciBmYWlscywgbWFrZSBz
dXJlIHRoYXQKLSAgdGhlIGZpeHR1cmUgaXMgc3RpbGwgaW52YWxpZGF0ZWQuCi0KLS0gZml4IGlz
c3VlNDUzOiB0aGUgcmVzdWx0IG9mIHRoZSBweXRlc3RfYXNzZXJ0cmVwcl9jb21wYXJlIGhvb2sg
bm93IGdldHMKLSAgaXQncyBuZXdsaW5lcyBlc2NhcGVkIHNvIHRoYXQgZm9ybWF0X2V4Y2VwdGlv
biBkb2VzIG5vdCBibG93IHVwLgotCi0tIGludGVybmFsIG5ldyB3YXJuaW5nIHN5c3RlbTogcHl0
ZXN0IHdpbGwgbm93IHByb2R1Y2Ugd2FybmluZ3Mgd2hlbgotICBpdCBkZXRlY3RzIG9kZGl0aWVz
IGluIHlvdXIgdGVzdCBjb2xsZWN0aW9uIG9yIGV4ZWN1dGlvbi4KLSAgV2FybmluZ3MgYXJlIHVs
dGltYXRlbHkgc2VudCB0byBhIG5ldyBweXRlc3RfbG9nd2FybmluZyBob29rIHdoaWNoIGlzCi0g
IGN1cnJlbnRseSBvbmx5IGltcGxlbWVudGVkIGJ5IHRoZSB0ZXJtaW5hbCBwbHVnaW4gd2hpY2gg
ZGlzcGxheXMKLSAgd2FybmluZ3MgaW4gdGhlIHN1bW1hcnkgbGluZSBhbmQgc2hvd3MgbW9yZSBk
ZXRhaWxzIHdoZW4gLXJ3IChyZXBvcnQgb24KLSAgd2FybmluZ3MpIGlzIHNwZWNpZmllZC4KLQot
LSBjaGFuZ2Ugc2tpcHMgaW50byB3YXJuaW5ncyBmb3IgdGVzdCBjbGFzc2VzIHdpdGggYW4gX19p
bml0X18gYW5kCi0gIGNhbGxhYmxlcyBpbiB0ZXN0IG1vZHVsZXMgd2hpY2ggbG9vayBsaWtlIGEg
dGVzdCBidXQgYXJlIG5vdCBmdW5jdGlvbnMuCi0KLS0gZml4IGlzc3VlNDM2OiBpbXByb3ZlZCBm
aW5kaW5nIG9mIGluaXRpYWwgY29uZnRlc3QgZmlsZXMgZnJvbSBjb21tYW5kCi0gIGxpbmUgYXJn
dW1lbnRzIGJ5IHVzaW5nIHRoZSByZXN1bHQgb2YgcGFyc2Vfa25vd25fYXJncyByYXRoZXIgdGhh
bgotICB0aGUgcHJldmlvdXMgZmxha3kgaGV1cmlzdGljcy4gIFRoYW5rcyBNYXJjIEFicmFtb3dp
dHogZm9yIHRlc3RzCi0gIGFuZCBpbml0aWFsIGZpeGluZyBhcHByb2FjaGVzIGluIHRoaXMgYXJl
YS4KLQotLSBmaXggaXNzdWUgIzQ3OTogcHJvcGVybHkgaGFuZGxlIG5vc2UvdW5pdHRlc3QoMikg
U2tpcFRlc3QgZXhjZXB0aW9ucwotICBkdXJpbmcgY29sbGVjdGlvbi9sb2FkaW5nIG9mIHRlc3Qg
bW9kdWxlcy4gIFRoYW5rcyB0byBNYXJjIFNjaGxhaWNoCi0gIGZvciB0aGUgY29tcGxldGUgUFIu
Ci0KLS0gZml4IGlzc3VlNDkwOiBpbmNsdWRlIHB5dGVzdF9sb2FkX2luaXRpYWxfY29uZnRlc3Rz
IGluIGRvY3VtZW50YXRpb24KLSAgYW5kIGltcHJvdmUgZG9jc3RyaW5nLgotCi0tIGZpeCBpc3N1
ZTQ3MjogY2xhcmlmeSB0aGF0IGBgcHl0ZXN0LmNvbmZpZy5nZXR2YWx1ZSgpYGAgY2Fubm90IHdv
cmsKLSAgaWYgaXQncyB0cmlnZ2VyZWQgYWhlYWQgb2YgY29tbWFuZCBsaW5lIHBhcnNpbmcuCi0K
LS0gbWVyZ2UgUFIxMjM6IGltcHJvdmVkIGludGVncmF0aW9uIHdpdGggbW9jay5wYXRjaCBkZWNv
cmF0b3Igb24gdGVzdHMuCi0KLS0gZml4IGlzc3VlNDEyOiBtZXNzaW5nIHdpdGggc3Rkb3V0L3N0
ZGVyciBGRC1sZXZlbCBzdHJlYW1zIGlzIG5vdwotICBjYXB0dXJlZCB3aXRob3V0IGNyYXNoZXMu
Ci0KLS0gZml4IGlzc3VlNDgzOiB0cmlhbC9weTMzIHdvcmtzIG5vdyBwcm9wZXJseS4gIFRoYW5r
cyBEYW5pZWwgR3JhbmEgZm9yIFBSLgotCi0tIGltcHJvdmUgZXhhbXBsZSBmb3IgcHl0ZXN0IGlu
dGVncmF0aW9uIHdpdGggInB5dGhvbiBzZXR1cC5weSB0ZXN0IgotICB3aGljaCBub3cgaGFzIGEg
Z2VuZXJpYyAiLWEiIG9yICItLXB5dGVzdC1hcmdzIiBvcHRpb24gd2hlcmUgeW91Ci0gIGNhbiBw
YXNzIGFkZGl0aW9uYWwgb3B0aW9ucyBhcyBhIHF1b3RlZCBzdHJpbmcuICBUaGFua3MgVHJldm9y
IEJla29sYXkuCi0KLS0gc2ltcGxpZmllZCBpbnRlcm5hbCBjYXB0dXJpbmcgbWVjaGFuaXNtIGFu
ZCBtYWRlIGl0IG1vcmUgcm9idXN0Ci0gIGFnYWluc3QgdGVzdHMgb3Igc2V0dXBzIGNoYW5naW5n
IEZEMS9GRDIsIGFsc28gYmV0dGVyIGludGVncmF0ZWQKLSAgbm93IHdpdGggcHl0ZXN0LnBkYigp
IGluIHNpbmdsZSB0ZXN0cy4KLQotLSBpbXByb3ZlbWVudHMgdG8gcHl0ZXN0J3Mgb3duIHRlc3Qt
c3VpdGUgbGVha2FnZSBkZXRlY3Rpb24sIGNvdXJ0ZXN5IG9mIFBScwotICBmcm9tIE1hcmMgQWJy
YW1vd2l0egotCi0tIGZpeCBpc3N1ZTQ5MjogYXZvaWQgbGVhayBpbiB0ZXN0X3dyaXRlb3JnLiAg
VGhhbmtzIE1hcmMgQWJyYW1vd2l0ei4KLQotLSBmaXggaXNzdWU0OTM6IGRvbid0IHJ1biB0ZXN0
cyBpbiBkb2MgZGlyZWN0b3J5IHdpdGggYGBweXRob24gc2V0dXAucHkgdGVzdGBgCi0gICh1c2Ug
dG94IC1lIGRvY3Rlc3RpbmcgZm9yIHRoYXQpCi0KLS0gZml4IGlzc3VlNDg2OiBiZXR0ZXIgcmVw
b3J0aW5nIGFuZCBoYW5kbGluZyBvZiBlYXJseSBjb25mdGVzdCBsb2FkaW5nIGZhaWx1cmVzCi0K
LS0gc29tZSBjbGVhbnVwIGFuZCBzaW1wbGlmaWNhdGlvbiBvZiBpbnRlcm5hbCBjb25mdGVzdCBo
YW5kbGluZy4KLQotLSB3b3JrIGEgYml0IGhhcmRlciB0byBicmVhayByZWZlcmVuY2UgY3ljbGVz
IHdoZW4gY2F0Y2hpbmcgZXhjZXB0aW9ucy4KLSAgVGhhbmtzIEp1cmtvIEdvc3BvZG5ldGljLgot
Ci0tIGZpeCBpc3N1ZTQ0MzogZml4IHNraXAgZXhhbXBsZXMgdG8gdXNlIHByb3BlciBjb21wYXJp
c29uLiAgVGhhbmtzIEFsZXgKLSAgR3JvZW5ob2xtLgotCi0tIHN1cHBvcnQgbm9zZS1zdHlsZSBg
YF9fdGVzdF9fYGAgYXR0cmlidXRlIG9uIG1vZHVsZXMsIGNsYXNzZXMgYW5kCi0gIGZ1bmN0aW9u
cywgaW5jbHVkaW5nIHVuaXR0ZXN0LXN0eWxlIENsYXNzZXMuICBJZiBzZXQgdG8gRmFsc2UsIHRo
ZQotICB0ZXN0IHdpbGwgbm90IGJlIGNvbGxlY3RlZC4KLQotLSBmaXggaXNzdWU1MTI6IHNob3cg
Ijxub3RzZXQ+IiBmb3IgYXJndW1lbnRzIHdoaWNoIG1pZ2h0IG5vdCBiZSBzZXQKLSAgaW4gbW9u
a2V5cGF0Y2ggcGx1Z2luLiAgSW1wcm92ZXMgb3V0cHV0IGluIGRvY3VtZW50YXRpb24uCi0KLQot
Mi41LjIKLT09PT09Ci0KLS0gZml4IGlzc3VlNDA5IC0tIGJldHRlciBpbnRlcm9wZXJhdGUgd2l0
aCBjeF9mcmVlemUgYnkgbm90Ci0gIHRyeWluZyB0byBpbXBvcnQgZnJvbSBjb2xsZWN0aW9ucy5h
YmMgd2hpY2ggY2F1c2VzIHByb2JsZW1zCi0gIGZvciBweTI3L2N4X2ZyZWV6ZS4gIFRoYW5rcyBX
b2xmZ2FuZyBMLiBmb3IgcmVwb3J0aW5nIGFuZCB0cmFja2luZyBpdCBkb3duLgotCi0tIGZpeGVk
IGRvY3MgYW5kIGNvZGUgdG8gdXNlICJweXRlc3QiIGluc3RlYWQgb2YgInB5LnRlc3QiIGFsbW9z
dCBldmVyeXdoZXJlLgotICBUaGFua3MgSnVya28gR29zcG9kbmV0aWMgZm9yIHRoZSBjb21wbGV0
ZSBQUi4KLQotLSBmaXggaXNzdWU0MjU6IG1lbnRpb24gYXQgZW5kIG9mICJweS50ZXN0IC1oIiB0
aGF0IC0tbWFya2VycwotICBhbmQgLS1maXh0dXJlcyB3b3JrIGFjY29yZGluZyB0byBzcGVjaWZp
ZWQgdGVzdCBwYXRoIChvciBjdXJyZW50IGRpcikKLQotLSBmaXggaXNzdWU0MTM6IGV4Y2VwdGlv
bnMgd2l0aCB1bmljb2RlIGF0dHJpYnV0ZXMgYXJlIG5vdyBwcmludGVkCi0gIGNvcnJlY3RseSBh
bHNvIG9uIHB5dGhvbjIgYW5kIHdpdGggcHl0ZXN0LXhkaXN0IHJ1bnMuICh0aGUgZml4Ci0gIHJl
cXVpcmVzIHB5LTEuNC4yMCkKLQotLSBjb3B5LCBjbGVhbnVwIGFuZCBpbnRlZ3JhdGUgcHkuaW8g
Y2FwdHVyZQotICBmcm9tIHB5bGliIDEuNC4yMC5kZXYyIChyZXYgMTNkOWFmOTU1NDdlKQotCi0t
IGFkZHJlc3MgaXNzdWU0MTY6IGNsYXJpZnkgZG9jcyBhcyB0byBjb25mdGVzdC5weSBsb2FkaW5n
IHNlbWFudGljcwotCi0tIGZpeCBpc3N1ZTQyOTogY29tcGFyaW5nIGJ5dGUgc3RyaW5ncyB3aXRo
IG5vbi1hc2NpaSBjaGFycyBpbiBhc3NlcnQKLSAgZXhwcmVzc2lvbnMgbm93IHdvcmsgYmV0dGVy
LiAgVGhhbmtzIEZsb3JpcyBCcnV5bm9vZ2hlLgotCi0tIG1ha2UgY2FwZmQvY2Fwc3lzLmNhcHR1
cmUgcHJpdmF0ZSwgaXRzIHVudXNlZCBhbmQgc2hvdWxkbnQgYmUgZXhwb3NlZAotCi0KLTIuNS4x
Ci09PT09PQotCi0tIG1lcmdlIG5ldyBkb2N1bWVudGF0aW9uIHN0eWxpbmcgUFIgZnJvbSBUb2Jp
YXMgQmllbmllay4KLQotLSBmaXggaXNzdWU0MDM6IGFsbG93IHBhcmFtZXRyaXplIG9mIG11bHRp
cGxlIHNhbWUtbmFtZSBmdW5jdGlvbnMgd2l0aGluCi0gIGEgY29sbGVjdGlvbiBub2RlLiAgVGhh
bmtzIEFuZHJlYXMgS2xvZWNrbmVyIGFuZCBBbGV4IEdheW5vciBmb3IgcmVwb3J0aW5nCi0gIGFu
ZCBhbmFseXNpcy4KLQotLSBBbGxvdyBwYXJhbWV0ZXJpemVkIGZpeHR1cmVzIHRvIHNwZWNpZnkg
dGhlIElEIG9mIHRoZSBwYXJhbWV0ZXJzIGJ5Ci0gIGFkZGluZyBhbiBpZHMgYXJndW1lbnQgdG8g
cHl0ZXN0LmZpeHR1cmUoKSBhbmQgcHl0ZXN0LnlpZWxkX2ZpeHR1cmUoKS4KLSAgVGhhbmtzIEZs
b3JpcyBCcnV5bm9vZ2hlLgotCi0tIGZpeCBpc3N1ZTQwNCBieSBhbHdheXMgdXNpbmcgdGhlIGJp
bmFyeSB4bWwgZXNjYXBlIGluIHRoZSBqdW5pdHhtbAotICBwbHVnaW4uICBUaGFua3MgUm9ubnkg
UGZhbm5zY2htaWR0LgotCi0tIGZpeCBpc3N1ZTQwNzogZml4IGFkZG9wdGlvbiBkb2NzdHJpbmcg
dG8gcG9pbnQgdG8gYXJncGFyc2UgaW5zdGVhZCBvZgotICBvcHRwYXJzZS4gVGhhbmtzIERhbmll
bCBELiBXcmlnaHQuCi0KLQotCi0yLjUuMAotPT09PT0KLQotLSBkcm9wcGVkIHB5dGhvbjIuNSBm
cm9tIGF1dG9tYXRlZCByZWxlYXNlIHRlc3Rpbmcgb2YgcHl0ZXN0IGl0c2VsZgotICB3aGljaCBt
ZWFucyBpdCdzIHByb2JhYmx5IGdvaW5nIHRvIGJyZWFrIHNvb24gKGJ1dCBzdGlsbCB3b3Jrcwot
ICB3aXRoIHRoaXMgcmVsZWFzZSB3ZSBiZWxpZXZlKS4KLQotLSBzaW1wbGlmaWVkIGFuZCBmaXhl
ZCBpbXBsZW1lbnRhdGlvbiBmb3IgY2FsbGluZyBmaW5hbGl6ZXJzIHdoZW4KLSAgcGFyYW1ldHJp
emVkIGZpeHR1cmVzIG9yIGZ1bmN0aW9uIGFyZ3VtZW50cyBhcmUgaW52b2x2ZWQuICBmaW5hbGl6
YXRpb24KLSAgaXMgbm93IHBlcmZvcm1lZCBsYXppbHkgYXQgc2V0dXAgdGltZSBpbnN0ZWFkIG9m
IGluIHRoZSAidGVhcmRvd24gcGhhc2UiLgotICBXaGlsZSB0aGlzIG1pZ2h0IHNvdW5kIG9kZCBh
dCBmaXJzdCwgaXQgaGVscHMgdG8gZW5zdXJlIHRoYXQgd2UgYXJlCi0gIGNvcnJlY3RseSBoYW5k
bGluZyBzZXR1cC90ZWFyZG93biBldmVuIGluIGNvbXBsZXggY29kZS4gIFVzZXItbGV2ZWwgY29k
ZQotICBzaG91bGQgbm90IGJlIGFmZmVjdGVkIHVubGVzcyBpdCdzIGltcGxlbWVudGluZyB0aGUg
cHl0ZXN0X3J1bnRlc3RfdGVhcmRvd24KLSAgaG9vayBhbmQgZXhwZWN0aW5nIGNlcnRhaW4gZml4
dHVyZSBpbnN0YW5jZXMgYXJlIHRvcm4gZG93biB3aXRoaW4gKHZlcnkKLSAgdW5saWtlbHkgYW5k
IHdvdWxkIGhhdmUgYmVlbiB1bnJlbGlhYmxlIGFueXdheSkuCi0KLS0gUFI5MDogYWRkIC0tY29s
b3I9eWVzfG5vfGF1dG8gb3B0aW9uIHRvIGZvcmNlIHRlcm1pbmFsIGNvbG9yaW5nCi0gIG1vZGUg
KCJhdXRvIiBpcyBkZWZhdWx0KS4gIFRoYW5rcyBNYXJjIEFicmFtb3dpdHouCi0KLS0gZml4IGlz
c3VlMzE5IC0gY29ycmVjdGx5IHNob3cgdW5pY29kZSBpbiBhc3NlcnRpb24gZXJyb3JzLiAgTWFu
eQotICB0aGFua3MgdG8gRmxvcmlzIEJydXlub29naGUgZm9yIHRoZSBjb21wbGV0ZSBQUi4gIEFs
c28gbWVhbnMKLSAgd2UgZGVwZW5kIG9uIHB5Pj0xLjQuMTkgbm93LgotCi0tIGZpeCBpc3N1ZTM5
NiAtIGNvcnJlY3RseSBzb3J0IGFuZCBmaW5hbGl6ZSBjbGFzcy1zY29wZWQgcGFyYW1ldHJpemVk
Ci0gIHRlc3RzIGluZGVwZW5kZW50bHkgZnJvbSBudW1iZXIgb2YgbWV0aG9kcyBvbiB0aGUgY2xh
c3MuCi0KLS0gcmVmaXggaXNzdWUzMjMgaW4gYSBiZXR0ZXIgd2F5IC0tIHBhcmFtZXRyaXphdGlv
biBzaG91bGQgbm93IG5ldmVyCi0gIGNhdXNlIFJ1bnRpbWUgUmVjdXJzaW9uIGVycm9ycyBiZWNh
dXNlIHRoZSB1bmRlcmx5aW5nIGFsZ29yaXRobQotICBmb3IgcmUtb3JkZXJpbmcgdGVzdHMgcGVy
LXNjb3BlL3Blci1maXh0dXJlIGlzIG5vdCByZWN1cnNpdmUKLSAgYW55bW9yZSAoaXQgd2FzIHRh
aWwtY2FsbCByZWN1cnNpdmUgYmVmb3JlIHdoaWNoIGNvdWxkIGxlYWQKLSAgdG8gcHJvYmxlbXMg
Zm9yIG1vcmUgdGhhbiA+OTY2IG5vbi1mdW5jdGlvbiBzY29wZWQgcGFyYW1ldGVycykuCi0KLS0g
Zml4IGlzc3VlMjkwIC0gdGhlcmUgaXMgcHJlbGltaW5hcnkgc3VwcG9ydCBub3cgZm9yIHBhcmFt
ZXRyaXppbmcKLSAgd2l0aCByZXBlYXRlZCBzYW1lIHZhbHVlcyAoc29tZXRpbWVzIHVzZWZ1bCB0
byB0byB0ZXN0IGlmIGNhbGxpbmcKLSAgYSBzZWNvbmQgdGltZSB3b3JrcyBhcyB3aXRoIHRoZSBm
aXJzdCB0aW1lKS4KLQotLSBjbG9zZSBpc3N1ZTI0MCAtIGRvY3VtZW50IHByZWNpc2VseSBob3cg
cHl0ZXN0IG1vZHVsZSBpbXBvcnRpbmcKLSAgd29ya3MsIGRpc2N1c3MgdGhlIHR3byBjb21tb24g
dGVzdCBkaXJlY3RvcnkgbGF5b3V0cywgYW5kIGhvdyBpdAotICBpbnRlcmFjdHMgd2l0aCBQRVA0
MjAtbmFtZXNwYWNlIHBhY2thZ2VzLgotCi0tIGZpeCBpc3N1ZTI0NiBmaXggZmluYWxpemVyIG9y
ZGVyIHRvIGJlIExJRk8gb24gaW5kZXBlbmRlbnQgZml4dHVyZXMKLSAgZGVwZW5kaW5nIG9uIGEg
cGFyYW1ldHJpemVkIGhpZ2hlci10aGFuLWZ1bmN0aW9uIHNjb3BlZCBmaXh0dXJlLgotICAod2Fz
IHF1aXRlIHNvbWUgZWZmb3J0IHNvIHBsZWFzZSBiZWFyIHdpdGggdGhlIGNvbXBsZXhpdHkgb2Yg
dGhpcyBzZW50ZW5jZSA6KQotICBUaGFua3MgUmFscGggU2NobWl0dCBmb3IgdGhlIHByZWNpc2Ug
ZmFpbHVyZSBleGFtcGxlLgotCi0tIGZpeCBpc3N1ZTI0NCBieSBpbXBsZW1lbnRpbmcgc3BlY2lh
bCBpbmRleCBmb3IgcGFyYW1ldGVycyB0byBvbmx5IHVzZQotICBpbmRpY2VzIGZvciBwYXJhbWVu
dHJpemVkIHRlc3QgaWRzCi0KLS0gZml4IGlzc3VlMjg3IGJ5IHJ1bm5pbmcgYWxsIGZpbmFsaXpl
cnMgYnV0IHNhdmluZyB0aGUgZXhjZXB0aW9uCi0gIGZyb20gdGhlIGZpcnN0IGZhaWxpbmcgZmlu
YWxpemVyIGFuZCByZS1yYWlzaW5nIGl0IHNvIHRlYXJkb3duIHdpbGwKLSAgc3RpbGwgaGF2ZSBm
YWlsZWQuICBXZSByZXJhaXNlIHRoZSBmaXJzdCBmYWlsaW5nIGV4Y2VwdGlvbiBiZWNhdXNlCi0g
IGl0IG1pZ2h0IGJlIHRoZSBjYXVzZSBmb3Igb3RoZXIgZmluYWxpemVycyB0byBmYWlsLgotCi0t
IGZpeCBvcmRlcmluZyB3aGVuIG1vY2sucGF0Y2ggb3Igb3RoZXIgc3RhbmRhcmQgZGVjb3JhdG9y
LXdyYXBwaW5ncwotICBhcmUgdXNlZCB3aXRoIHRlc3QgbWV0aG9kcy4gIFRoaXMgZml4dWVzIGlz
c3VlMzQ2IGFuZCBzaG91bGQKLSAgaGVscCB3aXRoIHJhbmRvbSAieGRpc3QiIGNvbGxlY3Rpb24g
ZmFpbHVyZXMuICBUaGFua3MgdG8KLSAgUm9ubnkgUGZhbm5zY2htaWR0IGFuZCBEb25hbGQgU3R1
ZmZ0IGZvciBoZWxwaW5nIHRvIGlzb2xhdGUgaXQuCi0KLS0gZml4IGlzc3VlMzU3IC0gc3BlY2lh
bCBjYXNlICItayIgZXhwcmVzc2lvbnMgdG8gYWxsb3cgZm9yCi0gIGZpbHRlcmluZyB3aXRoIHNp
bXBsZSBzdHJpbmdzIHRoYXQgYXJlIG5vdCB2YWxpZCBweXRob24gZXhwcmVzc2lvbnMuCi0gIEV4
YW1wbGVzOiAiLWsgMS4zIiBtYXRjaGVzIGFsbCB0ZXN0cyBwYXJhbWV0cml6ZWQgd2l0aCAxLjMu
Ci0gICItayBOb25lIiBmaWx0ZXJzIGFsbCB0ZXN0cyB0aGF0IGhhdmUgIk5vbmUiIGluIHRoZWly
IG5hbWUKLSAgYW5kIGNvbnZlcnNlbHkgIi1rICdub3QgTm9uZSciLgotICBQcmV2aW91c2x5IHRo
ZXNlIGV4YW1wbGVzIHdvdWxkIHJhaXNlIHN5bnRheCBlcnJvcnMuCi0KLS0gZml4IGlzc3VlMzg0
IGJ5IHJlbW92aW5nIHRoZSB0cmlhbCBzdXBwb3J0IGNvZGUKLSAgc2luY2UgdGhlIHVuaXR0ZXN0
IGNvbXBhdCBlbmhhbmNlbWVudHMgYWxsb3cKLSAgdHJpYWwgdG8gaGFuZGxlIGl0IG9uIGl0cyBv
d24KLQotLSBkb24ndCBoaWRlIGFuIEltcG9ydEVycm9yIHdoZW4gaW1wb3J0aW5nIGEgcGx1Z2lu
IHByb2R1Y2VzIG9uZS4KLSAgZml4ZXMgaXNzdWUzNzUuCi0KLS0gZml4IGlzc3VlMjc1IC0gYWxs
b3cgdXNlZml4dHVyZXMgYW5kIGF1dG91c2UgZml4dHVyZXMKLSAgZm9yIHJ1bm5pbmcgZG9jdGVz
dCB0ZXh0IGZpbGVzLgotCi0tIGZpeCBpc3N1ZTM4MCBieSBtYWtpbmcgLS1yZXN1bHRsb2cgb25s
eSByZWx5IG9uIGxvbmdyZXByIGluc3RlYWQKLSAgb2YgdGhlICJyZXByY3Jhc2giIGF0dHJpYnV0
ZSB3aGljaCBvbmx5IGV4aXN0cyBzb21ldGltZXMuCi0KLS0gYWRkcmVzcyBpc3N1ZTEyMjogYWxs
b3cgQHB5dGVzdC5maXh0dXJlKHBhcmFtcz1pdGVyYXRvcikgYnkgZXhwbG9kaW5nCi0gIGludG8g
YSBsaXN0IGVhcmx5IG9uLgotCi0tIGZpeCBwZXhwZWN0LTMuMCBjb21wYXRpYmlsaXR5IGZvciBw
eXRlc3QncyBvd24gdGVzdHMuCi0gIChmaXhlcyBpc3N1ZTM4NikKLQotLSBhbGxvdyBuZXN0ZWQg
cGFyYW1ldHJpemUtdmFsdWUgbWFya2VycywgdGhhbmtzIEphbWVzIExhbiBmb3IgdGhlIFBSLgot
Ci0tIGZpeCB1bmljb2RlIGhhbmRsaW5nIHdpdGggbmV3IG1vbmtleXBhdGNoLnNldGF0dHIoaW1w
b3J0X3BhdGgsIHZhbHVlKQotICBBUEkuICBUaGFua3MgUm9iIERlbm5pcy4gIEZpeGVzIGlzc3Vl
MzcxLgotCi0tIGZpeCB1bmljb2RlIGhhbmRsaW5nIHdpdGgganVuaXR4bWwsIGZpeGVzIGlzc3Vl
MzY4LgotCi0tIEluIGFzc2VydGlvbiByZXdyaXRpbmcgbW9kZSBvbiBQeXRob24gMiwgZml4IHRo
ZSBkZXRlY3Rpb24gb2YgY29kaW5nCi0gIGNvb2tpZXMuIFNlZSBpc3N1ZSAjMzMwLgotCi0tIG1h
a2UgIi0tcnVueGZhaWwiIHR1cm4gaW1wZXJhdGl2ZSBweXRlc3QueGZhaWwgY2FsbHMgaW50byBu
byBvcHMKLSAgKGl0IGFscmVhZHkgZGlkIG5ldXRyYWxpemUgcHl0ZXN0Lm1hcmsueGZhaWwgbWFy
a2VycykKLQotLSByZWZpbmUgcHl0ZXN0IC8gcGtnX3Jlc291cmNlcyBpbnRlcmFjdGlvbnM6IFRo
ZSBBc3NlcnRpb25SZXdyaXRpbmdIb29rCi0gIFBFUDMwMiBjb21wbGlhbnQgbG9hZGVyIG5vdyBy
ZWdpc3RlcnMgaXRzZWxmIHdpdGggc2V0dXB0b29scy9wa2dfcmVzb3VyY2VzCi0gIHByb3Blcmx5
IHNvIHRoYXQgdGhlIHBrZ19yZXNvdXJjZXMucmVzb3VyY2Vfc3RyZWFtIG1ldGhvZCB3b3JrcyBw
cm9wZXJseS4KLSAgRml4ZXMgaXNzdWUzNjYuICBUaGFua3MgZm9yIHRoZSBpbnZlc3RpZ2F0aW9u
cyBhbmQgZnVsbCBQUiB0byBKYXNvbiBSLiBDb29tYnMuCi0KLS0gcHl0ZXN0Y29uZmlnIGZpeHR1
cmUgaXMgbm93IHNlc3Npb24tc2NvcGVkIGFzIGl0IGlzIHRoZSBzYW1lIG9iamVjdCBkdXJpbmcg
dGhlCi0gIHdob2xlIHRlc3QgcnVuLiAgRml4ZXMgaXNzdWUzNzAuCi0KLS0gYXZvaWQgb25lIHN1
cnByaXNpbmcgY2FzZSBvZiBtYXJrZXIgbWFsZnVuY3Rpb24vY29uZnVzaW9uOjoKLQotICAgICAg
QHB5dGVzdC5tYXJrLnNvbWUobGFtYmRhIGFyZzogLi4uKQotICAgICAgZGVmIHRlc3RfZnVuY3Rp
b24oKToKLQotICB3b3VsZCBub3Qgd29yayBjb3JyZWN0bHkgYmVjYXVzZSBweXRlc3QgYXNzdW1l
cyBAcHl0ZXN0Lm1hcmsuc29tZQotICBnZXRzIGEgZnVuY3Rpb24gdG8gYmUgZGVjb3JhdGVkIGFs
cmVhZHkuICBXZSBub3cgYXQgbGVhc3QgZGV0ZWN0IGlmIHRoaXMKLSAgYXJnIGlzIGFuIGxhbWJk
YSBhbmQgdGh1cyB0aGUgZXhhbXBsZSB3aWxsIHdvcmsuICBUaGFua3MgQWxleCBHYXlub3IKLSAg
Zm9yIGJyaW5naW5nIGl0IHVwLgotCi0tIHhmYWlsIGEgdGVzdCBvbiBweXB5IHRoYXQgY2hlY2tz
IHdyb25nIGVuY29kaW5nL2FzY2lpIChweXB5IGRvZXMKLSAgbm90IGVycm9yIG91dCkuIGZpeGVz
IGlzc3VlMzg1LgotCi0tIGludGVybmFsbHkgbWFrZSB2YXJuYW1lcygpIGRlYWwgd2l0aCBjbGFz
c2VzJ3MgX19pbml0X18sCi0gIGFsdGhvdWdoIGl0J3Mgbm90IG5lZWRlZCBieSBweXRlc3QgaXRz
ZWxmIGF0bS4gIEFsc28KLSAgZml4IGNhY2hpbmcuICBGaXhlcyBpc3N1ZTM3Ni4KLQotLSBmaXgg
aXNzdWUyMjEgLSBoYW5kbGUgaW1wb3J0aW5nIG9mIG5hbWVzcGFjZS1wYWNrYWdlIHdpdGggbm8K
LSAgX19pbml0X18ucHkgcHJvcGVybHkuCi0KLS0gcmVmYWN0b3IgaW50ZXJuYWwgRml4dHVyZVJl
cXVlc3QgaGFuZGxpbmcgdG8gYXZvaWQgbW9ua2V5cGF0Y2hpbmcuCi0gIE9uZSBvZiB0aGUgcG9z
aXRpdmUgdXNlci1mYWNpbmcgZWZmZWN0cyBpcyB0aGF0IHRoZSAicmVxdWVzdCIgb2JqZWN0Ci0g
IGNhbiBub3cgYmUgdXNlZCBpbiBjbG9zdXJlcy4KLQotLSBmaXhlZCB2ZXJzaW9uIGNvbXBhcmlz
b24gaW4gcHl0ZXN0LmltcG9ydHNraXAobW9kbmFtZSwgbWludmVyc3RyaW5nKQotCi0tIGZpeCBp
c3N1ZTM3NyBieSBjbGFyaWZ5aW5nIGluIHRoZSBub3NlLWNvbXBhdCBkb2NzIHRoYXQgcHl0ZXN0
Ci0gIGRvZXMgbm90IGR1cGxpY2F0ZSB0aGUgdW5pdHRlc3QtQVBJIGludG8gdGhlICJwbGFpbiIg
bmFtZXNwYWNlLgotCi0tIGZpeCB2ZXJib3NlIHJlcG9ydGluZyBmb3IgQG1vY2snZCB0ZXN0IGZ1
bmN0aW9ucwotCi0yLjQuMgotPT09PT0KLQotLSBvbiBXaW5kb3dzIHJlcXVpcmUgY29sb3JhbWEg
YW5kIGEgbmV3ZXIgcHkgbGliIHNvIHRoYXQgcHkuaW8uVGVybWluYWxXcml0ZXIoKQotICBub3cg
dXNlcyBjb2xvcmFtYSBpbnN0ZWFkIG9mIGl0cyBvd24gY3R5cGVzIGhhY2tzLiAoZml4ZXMgaXNz
dWUzNjUpCi0gIHRoYW5rcyBQYXVsIE1vb3JlIGZvciBicmluZ2luZyBpdCB1cC4KLQotLSBmaXgg
Ii1rIiBtYXRjaGluZyBvZiB0ZXN0cyB3aGVyZSAicmVwciIgYW5kICJhdHRyIiBhbmQgb3RoZXIg
bmFtZXMgd291bGQKLSAgY2F1c2Ugd3JvbmcgbWF0Y2hlcyBiZWNhdXNlIG9mIGFuIGludGVybmFs
IGltcGxlbWVudGF0aW9uIHF1aXJrCi0gIChkb24ndCBhc2spIHdoaWNoIGlzIG5vdyBwcm9wZXJs
eSBpbXBsZW1lbnRlZC4gZml4ZXMgaXNzdWUzNDUuCi0KLS0gYXZvaWQgdG1wZGlyIGZpeHR1cmUg
dG8gY3JlYXRlIHRvbyBsb25nIGZpbGVuYW1lcyBlc3BlY2lhbGx5Ci0gIHdoZW4gcGFyYW1ldHJp
emF0aW9uIGlzIHVzZWQgKGlzc3VlMzU0KQotCi0tIGZpeCBweXRlc3QtcGVwOCBhbmQgcHl0ZXN0
LWZsYWtlcyAvIHB5dGVzdCBpbnRlcmFjdGlvbnMKLSAgKGNvbGxlY3Rpb24gbmFtZXMgaW4gbWFy
ayBwbHVnaW4gd2FzIGFzc3VtaW5nIGFuIGl0ZW0gYWx3YXlzCi0gIGhhcyBhIGZ1bmN0aW9uIHdo
aWNoIGlzIG5vdCB0cnVlIGZvciB0aG9zZSBwbHVnaW5zIGV0Yy4pCi0gIFRoYW5rcyBBbmRpIFpl
aWRsZXIuCi0KLS0gaW50cm9kdWNlIG5vZGUuZ2V0X21hcmtlci9ub2RlLmFkZF9tYXJrZXIgQVBJ
IGZvciBwbHVnaW5zCi0gIGxpa2UgcHl0ZXN0LXBlcDggYW5kIHB5dGVzdC1mbGFrZXMgdG8gYXZv
aWQgdGhlIG1lc3N5Ci0gIGRldGFpbHMgb2YgdGhlIG5vZGUua2V5d29yZHMgIHBzZXVkby1kaWN0
cy4gIEFkYXB0ZWQKLSAgZG9jcy4KLQotLSByZW1vdmUgYXR0ZW1wdCB0byAiZHVwIiBzdGRvdXQg
YXQgc3RhcnR1cCBhcyBpdCdzIGlja3kuCi0gIHRoZSBub3JtYWwgY2FwdHVyaW5nIHNob3VsZCBj
YXRjaCBlbm91Z2ggcG9zc2liaWxpdGllcwotICBvZiB0ZXN0cyBtZXNzaW5nIHVwIHN0YW5kYXJk
IEZEcy4KLQotLSBhZGQgcGx1Z2lubWFuYWdlci5kb19jb25maWd1cmUoY29uZmlnKSBhcyBhIGxp
bmsgdG8KLSAgY29uZmlnLmRvX2NvbmZpZ3VyZSgpIGZvciBwbHVnaW4tY29tcGF0aWJpbGl0eQot
Ci0yLjQuMQotPT09PT0KLQotLSBXaGVuIHVzaW5nIHBhcnNlci5hZGRvcHRpb24oKSB1bmljb2Rl
IGFyZ3VtZW50cyB0byB0aGUKLSAgInR5cGUiIGtleXdvcmQgc2hvdWxkIGFsc28gYmUgY29udmVy
dGVkIHRvIHRoZSByZXNwZWN0aXZlIHR5cGVzLgotICB0aGFua3MgRmxvcmlzIEJydXlub29naGUs
IEBkbm96YXkuIChmaXhlcyBpc3N1ZTM2MCBhbmQgaXNzdWUzNjIpCi0KLS0gZml4IGRvdHRlZCBm
aWxlbmFtZSBjb21wbGV0aW9uIHdoZW4gdXNpbmcgYXJnY29tcGxldGUKLSAgdGhhbmtzIEFudGhv
biB2YW4gZGVyIE5ldXRoLiAoZml4ZXMgaXNzdWUzNjEpCi0KLS0gZml4IHJlZ3Jlc3Npb24gd2hl
biBhIDEtdHVwbGUgKCJhcmciLCkgaXMgdXNlZCBmb3Igc3BlY2lmeWluZwotICBwYXJhbWV0cml6
YXRpb24gKHRoZSB2YWx1ZXMgb2YgdGhlIHBhcmFtZXRyaXphdGlvbiB3ZXJlIHBhc3NlZAotICBu
ZXN0ZWQgaW4gYSB0dXBsZSkuICBUaGFua3MgRG9uYWxkIFN0dWZmdC4KLQotLSBtZXJnZSBkb2Mg
dHlwbyBmaXhlcywgdGhhbmtzIEFuZHkgRGlybmJlcmdlcgotCi0yLjQKLT09PQotCi1rbm93biBp
bmNvbXBhdGliaWxpdGllczoKLQotLSBpZiBjYWxsaW5nIC0tZ2Vuc2NyaXB0IGZyb20gcHl0aG9u
Mi43IG9yIGFib3ZlLCB5b3Ugb25seSBnZXQgYQotICBzdGFuZGFsb25lIHNjcmlwdCB3aGljaCB3
b3JrcyBvbiBweXRob24yLjcgb3IgYWJvdmUuICBVc2UgUHl0aG9uMi42Ci0gIHRvIGFsc28gZ2V0
IGEgcHl0aG9uMi41IGNvbXBhdGlibGUgdmVyc2lvbi4KLQotLSBhbGwgeHVuaXQtc3R5bGUgdGVh
cmRvd24gbWV0aG9kcyAobm9zZS1zdHlsZSwgcHl0ZXN0LXN0eWxlLAotICB1bml0dGVzdC1zdHls
ZSkgd2lsbCBub3QgYmUgY2FsbGVkIGlmIHRoZSBjb3JyZXNwb25kaW5nIHNldHVwIG1ldGhvZCBm
YWlsZWQsCi0gIHNlZSBpc3N1ZTMyMiBiZWxvdy4KLQotLSB0aGUgcHl0ZXN0X3BsdWdpbl91bnJl
Z2lzdGVyIGhvb2sgd2Fzbid0IGV2ZXIgcHJvcGVybHkgY2FsbGVkCi0gIGFuZCB0aGVyZSBpcyBu
byBrbm93biBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgaG9vayAtIHNvIGl0IGdvdCByZW1vdmVkLgot
Ci0tIHB5dGVzdC5maXh0dXJlLWRlY29yYXRlZCBmdW5jdGlvbnMgY2Fubm90IGJlIGdlbmVyYXRv
cnMgKGkuZS4gdXNlCi0gIHlpZWxkKSBhbnltb3JlLiAgVGhpcyBjaGFuZ2UgbWlnaHQgYmUgcmV2
ZXJzZWQgaW4gMi40LjEgaWYgaXQgY2F1c2VzCi0gIHVuZm9yZXNlZW4gcmVhbC1saWZlIGlzc3Vl
cy4gIEhvd2V2ZXIsIHlvdSBjYW4gYWx3YXlzIHdyaXRlIGFuZCByZXR1cm4KLSAgYW4gaW5uZXIg
ZnVuY3Rpb24vZ2VuZXJhdG9yIGFuZCBjaGFuZ2UgdGhlIGZpeHR1cmUgY29uc3VtZXIgdG8gaXRl
cmF0ZQotICBvdmVyIHRoZSByZXR1cm5lZCBnZW5lcmF0b3IuICBUaGlzIGNoYW5nZSB3YXMgZG9u
ZSBpbiBsaWV1IG9mIHRoZSBuZXcKLSAgYGBweXRlc3QueWllbGRfZml4dHVyZWBgIGRlY29yYXRv
ciwgc2VlIGJlbG93LgotCi1uZXcgZmVhdHVyZXM6Ci0KLS0gZXhwZXJpbWVudGFsbHkgaW50cm9k
dWNlIGEgbmV3IGBgcHl0ZXN0LnlpZWxkX2ZpeHR1cmVgYCBkZWNvcmF0b3IKLSAgd2hpY2ggYWNj
ZXB0cyBleGFjdGx5IHRoZSBzYW1lIHBhcmFtZXRlcnMgYXMgcHl0ZXN0LmZpeHR1cmUgYnV0Ci0g
IG1hbmRhdGVzIGEgYGB5aWVsZGBgIHN0YXRlbWVudCBpbnN0ZWFkIG9mIGEgYGByZXR1cm4gc3Rh
dGVtZW50YGAgZnJvbQotICBmaXh0dXJlIGZ1bmN0aW9ucy4gIFRoaXMgYWxsb3dzIGRpcmVjdCBp
bnRlZ3JhdGlvbiB3aXRoICJ3aXRoLXN0eWxlIgotICBjb250ZXh0IG1hbmFnZXJzIGluIGZpeHR1
cmUgZnVuY3Rpb25zIGFuZCBnZW5lcmFsbHkgYXZvaWRzIHJlZ2lzdGVyaW5nCi0gIG9mIGZpbmFs
aXphdGlvbiBjYWxsYmFja3MgaW4gZmF2b3VyIG9mIHRyZWF0aW5nIHRoZSAiYWZ0ZXIteWllbGQi
IGFzCi0gIHRlYXJkb3duIGNvZGUuICBUaGFua3MgQW5kcmVhcyBQZWxtZSwgVmxhZGltaXIgS2Vs
ZXNoZXYsIEZsb3JpcwotICBCcnV5bm9vZ2hlLCBSb25ueSBQZmFubnNjaG1pZHQgYW5kIG1hbnkg
b3RoZXJzIGZvciBkaXNjdXNzaW9ucy4KLQotLSBhbGxvdyBib29sZWFuIGV4cHJlc3Npb24gZGly
ZWN0bHkgd2l0aCBza2lwaWYveGZhaWwKLSAgaWYgYSAicmVhc29uIiBpcyBhbHNvIHNwZWNpZmll
ZC4gIFJld29yayBza2lwcGluZyBkb2N1bWVudGF0aW9uCi0gIHRvIHJlY29tbWVuZCAiY29uZGl0
aW9uIGFzIGJvb2xlYW5zIiBiZWNhdXNlIGl0IHByZXZlbnRzIHN1cnByaXNlcwotICB3aGVuIGlt
cG9ydGluZyBtYXJrZXJzIGJldHdlZW4gbW9kdWxlcy4gIFNwZWNpZnlpbmcgY29uZGl0aW9ucwot
ICBhcyBzdHJpbmdzIHdpbGwgcmVtYWluIGZ1bGx5IHN1cHBvcnRlZC4KLQotLSByZXBvcnRpbmc6
IGNvbG9yIHRoZSBsYXN0IGxpbmUgcmVkIG9yIGdyZWVuIGRlcGVuZGluZyBpZgotICBmYWlsdXJl
cy9lcnJvcnMgb2NjdXJyZWQgb3IgZXZlcnl0aGluZyBwYXNzZWQuICB0aGFua3MgQ2hyaXN0aWFu
Ci0gIFRoZXVuZXJ0LgotCi0tIG1ha2UgImltcG9ydCBwZGIgOyBwZGIuc2V0X3RyYWNlKCkiIHdv
cmsgbmF0aXZlbHkgd3J0IGNhcHR1cmluZyAobm8KLSAgIi1zIiBuZWVkZWQgYW55bW9yZSksIG1h
a2luZyBgYHB5dGVzdC5zZXRfdHJhY2UoKWBgIGEgbWVyZSBzaG9ydGN1dC4KLQotLSBmaXggaXNz
dWUxODE6IC0tcGRiIG5vdyBhbHNvIHdvcmtzIG9uIGNvbGxlY3QgZXJyb3JzIChhbmQKLSAgb24g
aW50ZXJuYWwgZXJyb3JzKSAuICBUaGlzIHdhcyBpbXBsZW1lbnRlZCBieSBhIHNsaWdodCBpbnRl
cm5hbAotICByZWZhY3RvcmluZyBhbmQgdGhlIGludHJvZHVjdGlvbiBvZiBhIG5ldyBob29rCi0g
IGBgcHl0ZXN0X2V4Y2VwdGlvbl9pbnRlcmFjdGBgIGhvb2sgKHNlZSBuZXh0IGl0ZW0pLgotCi0t
IGZpeCBpc3N1ZTM0MTogaW50cm9kdWNlIG5ldyBleHBlcmltZW50YWwgaG9vayBmb3IgSURFcy90
ZXJtaW5hbHMgdG8KLSAgaW50ZXJjZXB0IGRlYnVnZ2luZzogYGBweXRlc3RfZXhjZXB0aW9uX2lu
dGVyYWN0KG5vZGUsIGNhbGwsIHJlcG9ydClgYC4KLQotLSBuZXcgbW9ua2V5cGF0Y2guc2V0YXR0
cigpIHZhcmlhbnQgdG8gcHJvdmlkZSBhIHNob3J0ZXIKLSAgaW52b2NhdGlvbiBmb3IgcGF0Y2hp
bmcgb3V0IGNsYXNzZXMvZnVuY3Rpb25zIGZyb20gbW9kdWxlczoKLQotICAgICBtb25rZXlwYXRj
aC5zZXRhdHRyKCJyZXF1ZXN0cy5nZXQiLCBteWZ1bmMpCi0KLSAgd2lsbCByZXBsYWNlIHRoZSAi
Z2V0IiBmdW5jdGlvbiBvZiB0aGUgInJlcXVlc3RzIiBtb2R1bGUgd2l0aCBgYG15ZnVuY2BgLgot
Ci0tIGZpeCBpc3N1ZTMyMjogdGVhckRvd25DbGFzcyBpcyBub3QgcnVuIGlmIHNldFVwQ2xhc3Mg
ZmFpbGVkLiBUaGFua3MKLSAgTWF0aGlldSBBZ29waWFuIGZvciB0aGUgaW5pdGlhbCBmaXguICBB
bHNvIG1ha2UgYWxsIG9mIHB5dGVzdC9ub3NlCi0gIGZpbmFsaXplciBtaW1pY2sgdGhlIHNhbWUg
Z2VuZXJpYyBiZWhhdmlvdXI6IGlmIGEgc2V0dXBYIGV4aXN0cyBhbmQKLSAgZmFpbHMsIGRvbid0
IHJ1biB0ZWFyZG93blguICBUaGlzIGludGVybmFsbHkgaW50cm9kdWNlcyBhIG5ldyBtZXRob2QK
LSAgIm5vZGUuYWRkZmluYWxpemVyKCkiIGhlbHBlciB3aGljaCBjYW4gb25seSBiZSBjYWxsZWQg
ZHVyaW5nIHRoZSBzZXR1cAotICBwaGFzZSBvZiBhIG5vZGUuCi0KLS0gc2ltcGxpZnkgcHl0ZXN0
Lm1hcmsucGFyYW1ldHJpemUoKSBzaWduYXR1cmU6IGFsbG93IHRvIHBhc3MgYQotICBDU1Ytc2Vw
YXJhdGVkIHN0cmluZyB0byBzcGVjaWZ5IGFyZ25hbWVzLiAgRm9yIGV4YW1wbGU6Ci0gIGBgcHl0
ZXN0Lm1hcmsucGFyYW1ldHJpemUoImlucHV0LGV4cGVjdGVkIiwgIFsoMSwyKSwgKDIsMyldKWBg
Ci0gIHdvcmtzIGFzIHdlbGwgYXMgdGhlIHByZXZpb3VzOgotICBgYHB5dGVzdC5tYXJrLnBhcmFt
ZXRyaXplKCgiaW5wdXQiLCAiZXhwZWN0ZWQiKSwgLi4uKWBgLgotCi0tIGFkZCBzdXBwb3J0IGZv
ciBzZXRVcE1vZHVsZS90ZWFyRG93bk1vZHVsZSBkZXRlY3Rpb24sIHRoYW5rcyBCcmlhbiBPa2tl
bi4KLQotLSBpbnRlZ3JhdGUgdGFiLWNvbXBsZXRpb24gb24gb3B0aW9ucyB0aHJvdWdoIHVzZSBv
ZiAiYXJnY29tcGxldGUiLgotICBUaGFua3MgQW50aG9uIHZhbiBkZXIgTmV1dCBmb3IgdGhlIFBS
LgotCi0tIGNoYW5nZSBvcHRpb24gbmFtZXMgdG8gYmUgaHlwaGVuLXNlcGFyYXRlZCBsb25nIG9w
dGlvbnMgYnV0IGtlZXAgdGhlCi0gIG9sZCBzcGVsbGluZyBiYWNrd2FyZCBjb21wYXRpYmxlLiAg
cHkudGVzdCAtaCB3aWxsIG9ubHkgc2hvdyB0aGUKLSAgaHlwaGVuYXRlZCB2ZXJzaW9uLCBmb3Ig
ZXhhbXBsZSAiLS1jb2xsZWN0LW9ubHkiIGJ1dCAiLS1jb2xsZWN0b25seSIKLSAgd2lsbCByZW1h
aW4gdmFsaWQgYXMgd2VsbCAoZm9yIGJhY2t3YXJkLWNvbXBhdCByZWFzb25zKS4gIE1hbnkgdGhh
bmtzIHRvCi0gIEFudGhvbiB2YW4gZGVyIE5ldXQgZm9yIHRoZSBpbXBsZW1lbnRhdGlvbiBhbmQg
dG8gSHluZWsgU2NobGF3YWNrIGZvcgotICBwdXNoaW5nIHVzLgotCi0tIGZpeCBpc3N1ZSAzMDgg
LSBhbGxvdyB0byBtYXJrL3hmYWlsL3NraXAgaW5kaXZpZHVhbCBwYXJhbWV0ZXIgc2V0cwotICB3
aGVuIHBhcmFtZXRyaXppbmcuICBUaGFua3MgQnJpYW5uYSBMYXVnaGVyLgotCi0tIGNhbGwgbmV3
IGV4cGVyaW1lbnRhbCBweXRlc3RfbG9hZF9pbml0aWFsX2NvbmZ0ZXN0cyBob29rIHRvIGFsbG93
Ci0gIDNyZCBwYXJ0eSBwbHVnaW5zIHRvIGRvIHNvbWV0aGluZyBiZWZvcmUgYSBjb25mdGVzdCBp
cyBsb2FkZWQuCi0KLUJ1ZyBmaXhlczoKLQotLSBmaXggaXNzdWUzNTggLSBjYXB0dXJpbmcgb3B0
aW9ucyBhcmUgbm93IHBhcnNlZCBtb3JlIHByb3Blcmx5Ci0gIGJ5IHVzaW5nIGEgbmV3IHBhcnNl
ci5wYXJzZV9rbm93bl9hcmdzIG1ldGhvZC4KLQotLSBweXRlc3Qgbm93IHVzZXMgYXJncGFyc2Ug
aW5zdGVhZCBvZiBvcHRwYXJzZSAodGhhbmtzIEFudGhvbikgd2hpY2gKLSAgbWVhbnMgdGhhdCAi
YXJncGFyc2UiIGlzIGFkZGVkIGFzIGEgZGVwZW5kZW5jeSBpZiBpbnN0YWxsaW5nIGludG8gcHl0
aG9uMi42Ci0gIGVudmlyb25tZW50cyBvciBiZWxvdy4KLQotLSBmaXggaXNzdWUzMzM6IGZpeCBh
IGNhc2Ugb2YgYmFkIHVuaXR0ZXN0L3B5dGVzdCBob29rIGludGVyYWN0aW9uLgotCi0tIFBSMjc6
IGNvcnJlY3RseSBoYW5kbGUgbm9zZS5Ta2lwVGVzdCBkdXJpbmcgY29sbGVjdGlvbi4gIFRoYW5r
cwotICBBbnRvbmlvIEN1bmksIFJvbm55IFBmYW5uc2NobWlkdC4KLQotLSBmaXggaXNzdWUzNTU6
IGp1bml0eG1sIHB1dHMgbmFtZT0icHl0ZXN0IiBhdHRyaWJ1dGUgdG8gdGVzdHN1aXRlIHRhZy4K
LQotLSBmaXggaXNzdWUzMzY6IGF1dG91c2UgZml4dHVyZSBpbiBwbHVnaW5zIHNob3VsZCB3b3Jr
IGFnYWluLgotCi0tIGZpeCBpc3N1ZTI3OTogaW1wcm92ZSBvYmplY3QgY29tcGFyaXNvbnMgb24g
YXNzZXJ0aW9uIGZhaWx1cmUKLSAgZm9yIHN0YW5kYXJkIGRhdGF0eXBlcyBhbmQgcmVjb2duaXNl
IGNvbGxlY3Rpb25zLmFiYy4gIFRoYW5rcyB0bwotICBCcmlhbm5hIExhdWdoZXIgYW5kIE1hdGhp
ZXUgQWdvcGlhbi4KLQotLSBmaXggaXNzdWUzMTc6IGFzc2VydGlvbiByZXdyaXRlciBzdXBwb3J0
IGZvciB0aGUgaXNfcGFja2FnZSBtZXRob2QKLQotLSBmaXggaXNzdWUzMzU6IGRvY3VtZW50IHB5
LmNvZGUuRXhjZXB0aW9uSW5mbygpIG9iamVjdCByZXR1cm5lZAotICBmcm9tIHB5dGVzdC5yYWlz
ZXMoKSwgdGhhbmtzIE1hdGhpZXUgQWdvcGlhbi4KLQotLSByZW1vdmUgaW1wbGljaXQgZGlzdHJp
YnV0ZV9zZXR1cCBzdXBwb3J0IGZyb20gc2V0dXAucHkuCi0KLS0gZml4IGlzc3VlMzA1OiBpZ25v
cmUgYW55IHByb2JsZW1zIHdoZW4gd3JpdGluZyBweWMgZmlsZXMuCi0KLS0gU08tMTc2NjQ3MDI6
IGNhbGwgZml4dHVyZSBmaW5hbGl6ZXJzIGV2ZW4gaWYgdGhlIGZpeHR1cmUgZnVuY3Rpb24KLSAg
cGFydGlhbGx5IGZhaWxlZCAoZmluYWxpemVycyB3b3VsZCBub3QgYWx3YXlzIGJlIGNhbGxlZCBi
ZWZvcmUpCi0KLS0gZml4IGlzc3VlMzIwIC0gZml4IGNsYXNzIHNjb3BlIGZvciBmaXh0dXJlcyB3
aGVuIG1peGVkIHdpdGgKLSAgbW9kdWxlLWxldmVsIGZ1bmN0aW9ucy4gIFRoYW5rcyBBbmF0bG95
IEJ1YmVua29mZi4KLQotLSB5b3UgY2FuIHNwZWNpZnkgIi1xIiBvciAiLXFxIiB0byBnZXQgZGlm
ZmVyZW50IGxldmVscyBvZiAicXVpZXRlciIKLSAgcmVwb3J0aW5nICh0aGFua3MgS2F0YXJ6eW5h
IEphY2hpbSkKLQotLSBmaXggaXNzdWUzMDAgLSBGaXggb3JkZXIgb2YgY29uZnRlc3QgbG9hZGlu
ZyB3aGVuIHN0YXJ0aW5nIHB5LnRlc3QKLSAgaW4gYSBzdWJkaXJlY3RvcnkuCi0KLS0gZml4IGlz
c3VlMzIzIC0gc29ydGluZyBvZiBtYW55IG1vZHVsZS1zY29wZWQgYXJnIHBhcmFtZXRyaXphdGlv
bnMKLQotLSBtYWtlIHNlc3Npb25maW5pc2ggaG9va3MgZXhlY3V0ZSB3aXRoIHRoZSBzYW1lIGN3
ZC1jb250ZXh0IGFzIGF0Ci0gIHNlc3Npb24gc3RhcnQgKGhlbHBzIGZpeCBwbHVnaW4gYmVoYXZp
b3VyIHdoaWNoIHdyaXRlIG91dHB1dCBmaWxlcwotICB3aXRoIHJlbGF0aXZlIHBhdGggc3VjaCBh
cyBweXRlc3QtY292KQotCi0tIGZpeCBpc3N1ZTMxNiAtIHByb3Blcmx5IHJlZmVyZW5jZSBjb2xs
ZWN0aW9uIGhvb2tzIGluIGRvY3MKLQotLSBmaXggaXNzdWUgMzA2IC0gY2xlYW51cCBvZiAtay8t
bSBvcHRpb25zIHRvIG9ubHkgbWF0Y2ggbWFya2Vycy90ZXN0Ci0gIG5hbWVzL2tleXdvcmRzIHJl
c3BlY3RpdmVseS4gIFRoYW5rcyBXb3V0ZXIgdmFuIEFja29veS4KLQotLSBpbXByb3ZlZCBkb2N0
ZXN0IGNvdW50aW5nIGZvciBkb2N0ZXN0cyBpbiBweXRob24gbW9kdWxlcyAtLQotICBmaWxlcyB3
aXRob3V0IGFueSBkb2N0ZXN0IGl0ZW1zIHdpbGwgbm90IHNob3cgdXAgYW55bW9yZQotICBhbmQg
ZG9jdGVzdCBleGFtcGxlcyBhcmUgY291bnRlZCBhcyBzZXBhcmF0ZSB0ZXN0IGl0ZW1zLgotICB0
aGFua3MgRGFuaWxvIEJlbGxpbmkuCi0KLS0gZml4IGlzc3VlMjQ1IGJ5IGRlcGVuZGluZyBvbiB0
aGUgcmVsZWFzZWQgcHktMS40LjE0Ci0gIHdoaWNoIGZpeGVzIHB5LmlvLmR1cGZpbGUgdG8gd29y
ayB3aXRoIGZpbGVzIHdpdGggbm8KLSAgbW9kZS4gVGhhbmtzIEphc29uIFIuIENvb21icy4KLQot
LSBmaXgganVuaXR4bWwgZ2VuZXJhdGlvbiB3aGVuIHRlc3Qgb3V0cHV0IGNvbnRhaW5zIGNvbnRy
b2wgY2hhcmFjdGVycywKLSAgYWRkcmVzc2luZyBpc3N1ZTI2NywgdGhhbmtzIEphYXAgQnJvZWto
dWl6ZW4KLQotLSBmaXggaXNzdWUzMzg6IGhvbm9yIC0tdGIgc3R5bGUgZm9yIHNldHVwL3RlYXJk
b3duIGVycm9ycyBhcyB3ZWxsLiAgVGhhbmtzIE1haG8uCi0KLS0gZml4IGlzc3VlMzA3IC0gdXNl
IHlhbWwuc2FmZV9sb2FkIGluIGV4YW1wbGUsIHRoYW5rcyBNYXJrIEVpY2hpbi4KLQotLSBiZXR0
ZXIgcGFyYW1ldHJpemUgZXJyb3IgbWVzc2FnZXMsIHRoYW5rcyBCcmlhbm5hIExhdWdoZXIKLQot
LSBweXRlc3RfdGVybWluYWxfc3VtbWFyeSh0ZXJtaW5hbHJlcG9ydGVyKSBob29rcyBjYW4gbm93
IHVzZQotICAiLnNlY3Rpb24odGl0bGUpIiBhbmQgIi5saW5lKG1zZykiIG1ldGhvZHMgdG8gcHJp
bnQgZXh0cmEKLSAgaW5mb3JtYXRpb24gYXQgdGhlIGVuZCBvZiBhIHRlc3QgcnVuLgotCi0yLjMu
NQotPT09PT0KLQotLSBmaXggaXNzdWUxNjk6IHJlc3BlY3QgLS10Yj1zdHlsZSB3aXRoIHNldHVw
L3RlYXJkb3duIGVycm9ycyBhcyB3ZWxsLgotCi0tIG5ldmVyIGNvbnNpZGVyIGEgZml4dHVyZSBm
dW5jdGlvbiBmb3IgdGVzdCBmdW5jdGlvbiBjb2xsZWN0aW9uCi0KLS0gYWxsb3cgcmUtcnVubmlu
ZyBvZiB0ZXN0IGl0ZW1zIC8gaGVscHMgdG8gZml4IHB5dGVzdC1yZXJ1bnRlc3RzIHBsdWdpbgot
ICBhbmQgYWxzbyBoZWxwIHRvIGtlZXAgbGVzcyBmaXh0dXJlL3Jlc291cmNlIHJlZmVyZW5jZXMg
YWxpdmUKLQotLSBwdXQgY2FwdHVyZWQgc3Rkb3V0L3N0ZGVyciBpbnRvIGp1bml0eG1sIG91dHB1
dCBldmVuIGZvciBwYXNzaW5nIHRlc3RzCi0gICh0aGFua3MgQWRhbSBHb3VjaGVyKQotCi0tIElz
c3VlIDI2NSAtIGludGVncmF0ZSBub3NlIHNldHVwL3RlYXJkb3duIHdpdGggc2V0dXBzdGF0ZQot
ICBzbyBpdCBkb2VzbnQgdHJ5IHRvIHRlYXJkb3duIGlmIGl0IGRpZCBub3Qgc2V0dXAKLQotLSBp
c3N1ZSAyNzEgLSBkb250IHdyaXRlIGp1bml0eG1sIG9uIHNsYXZlIG5vZGVzCi0KLS0gSXNzdWUg
Mjc0IC0gZG9udCB0cnkgdG8gc2hvdyBmdWxsIGRvY3Rlc3QgZXhhbXBsZQotICB3aGVuIGRvY3Rl
c3QgZG9lcyBub3Qga25vdyB0aGUgZXhhbXBsZSBsb2NhdGlvbgotCi0tIGlzc3VlIDI4MCAtIGRp
c2FibGUgYXNzZXJ0aW9uIHJld3JpdGluZyBvbiBidWdneSBDUHl0aG9uIDIuNi4wCi0KLS0gaW5q
ZWN0ICJnZXRmaXh0dXJlKCkiIGhlbHBlciB0byByZXRyaWV2ZSBmaXh0dXJlcyBmcm9tIGRvY3Rl
c3RzLAotICB0aGFua3MgQW5kcmVhcyBaZWlkbGVyCi0KLS0gaXNzdWUgMjU5IC0gd2hlbiBhc3Nl
cnRpb24gcmV3cml0aW5nLCBiZSBjb25zaXN0ZW50IHdpdGggdGhlIGRlZmF1bHQKLSAgc291cmNl
IGVuY29kaW5nIG9mIEFTQ0lJIG9uIFB5dGhvbiAyCi0KLS0gaXNzdWUgMjUxIC0gcmVwb3J0IGEg
c2tpcCBpbnN0ZWFkIG9mIGlnbm9yaW5nIGNsYXNzZXMgd2l0aCBpbml0Ci0KLS0gaXNzdWUyNTAg
dW5pY29kZS9zdHIgbWl4ZXMgaW4gcGFyYW1ldHJpemF0aW9uIG5hbWVzIGFuZCB2YWx1ZXMgbm93
IHdvcmtzCi0KLS0gaXNzdWUyNTcsIGFzc2VydGlvbi10cmlnZ2VyZWQgY29tcGlsYXRpb24gb2Yg
c291cmNlIGVuZGluZyBpbiBhCi0gIGNvbW1lbnQgbGluZSBkb2Vzbid0IGJsb3cgdXAgaW4gcHl0
aG9uMi41IChmaXhlZCB0aHJvdWdoIHB5Pj0xLjQuMTMuZGV2NikKLQotLSBmaXggLS1nZW5zY3Jp
cHQgb3B0aW9uIHRvIGdlbmVyYXRlIHN0YW5kYWxvbmUgc2NyaXB0cyB0aGF0IGFsc28KLSAgd29y
ayB3aXRoIHB5dGhvbjMuMyAoaW1wb3J0ZXIgb3JkZXJpbmcpCi0KLS0gaXNzdWUxNzEgLSBpbiBh
c3NlcnRpb24gcmV3cml0aW5nLCBzaG93IHRoZSByZXByIG9mIHNvbWUKLSAgZ2xvYmFsIHZhcmlh
YmxlcwotCi0tIGZpeCBvcHRpb24gaGVscCBmb3IgIi1rIgotCi0tIG1vdmUgbG9uZyBkZXNjcmlw
dGlvbiBvZiBkaXN0cmlidXRpb24gaW50byBSRUFETUUucnN0Ci0KLS0gaW1wcm92ZSBkb2NzdHJp
bmcgZm9yIG1ldGFmdW5jLnBhcmFtZXRyaXplKCkKLQotLSBmaXggYnVnIHdoZXJlIHVzaW5nIGNh
cHN5cyB3aXRoIHB5dGVzdC5zZXRfdHJhY2UoKSBpbiBhIHRlc3QKLSAgZnVuY3Rpb24gd291bGQg
YnJlYWsgd2hlbiBsb29raW5nIGF0IGNhcHN5cy5yZWFkb3V0ZXJyKCkKLQotLSBhbGxvdyB0byBz
cGVjaWZ5IHByZWZpeGVzIHN0YXJ0aW5nIHdpdGggIl8iIHdoZW4KLSAgY3VzdG9taXppbmcgcHl0
aG9uX2Z1bmN0aW9ucyB0ZXN0IGRpc2NvdmVyeS4gKHRoYW5rcyBHcmFoYW0gSG9ybGVyKQotCi0t
IGltcHJvdmUgUFlURVNUX0RFQlVHIHRyYWNpbmcgb3V0cHV0IGJ5IHB1dGluZwotICBleHRyYSBk
YXRhIG9uIGEgbmV3IGxpbmVzIHdpdGggYWRkaXRpb25hbCBpbmRlbnQKLQotLSBlbnN1cmUgT3V0
Y29tZUV4Y2VwdGlvbnMgbGlrZSBza2lwL2ZhaWwgaGF2ZSBpbml0aWFsaXplZCBleGNlcHRpb24g
YXR0cmlidXRlcwotCi0tIGlzc3VlIDI2MCAtIGRvbid0IHVzZSBub3NlIHNwZWNpYWwgc2V0dXAg
b24gcGxhaW4gdW5pdHRlc3QgY2FzZXMKLQotLSBmaXggaXNzdWUxMzQgLSBwcmludCB0aGUgY29s
bGVjdCBlcnJvcnMgdGhhdCBwcmV2ZW50IHJ1bm5pbmcgc3BlY2lmaWVkIHRlc3QgaXRlbXMKLQot
LSBmaXggaXNzdWUyNjYgLSBhY2NlcHQgdW5pY29kZSBpbiBNYXJrRXZhbHVhdG9yIGV4cHJlc3Np
b25zCi0KLTIuMy40Ci09PT09PQotCi0tIHlpZWxkZWQgdGVzdCBmdW5jdGlvbnMgd2lsbCBub3cg
aGF2ZSBhdXRvdXNlLWZpeHR1cmVzIGFjdGl2ZSBidXQKLSAgY2Fubm90IGFjY2VwdCBmaXh0dXJl
cyBhcyBmdW5jYXJncyAtIGl0J3MgYW55d2F5IHJlY29tbWVuZGVkIHRvCi0gIHJhdGhlciB1c2Ug
dGhlIHBvc3QtMi4wIHBhcmFtZXRyaXplIGZlYXR1cmVzIGluc3RlYWQgb2YgeWllbGQsIHNlZToK
LSAgaHR0cDovL3B5dGVzdC5vcmcvbGF0ZXN0L2V4YW1wbGUvcGFyYW1ldHJpemUuaHRtbAotLSBm
aXggYXV0b3VzZS1pc3N1ZSB3aGVyZSBhdXRvdXNlLWZpeHR1cmVzIHdvdWxkIG5vdCBiZSBkaXNj
b3ZlcmVkCi0gIGlmIGRlZmluZWQgaW4gYSBhL2NvbmZ0ZXN0LnB5IGZpbGUgYW5kIHRlc3RzIGlu
IGEvdGVzdHMvdGVzdF9zb21lLnB5Ci0tIGZpeCBpc3N1ZTIyNiAtIExJRk8gb3JkZXJpbmcgZm9y
IGZpeHR1cmUgdGVhcmRvd25zCi0tIGZpeCBpc3N1ZTIyNCAtIGludm9jYXRpb25zIHdpdGggPjI1
NiBjaGFyIGFyZ3VtZW50cyBub3cgd29yawotLSBmaXggaXNzdWU5MSAtIGFkZC9kaXNjdXNzIHBh
Y2thZ2UvZGlyZWN0b3J5IGxldmVsIHNldHVwcyBpbiBleGFtcGxlCi0tIGFsbG93IHRvIGR5bmFt
aWNhbGx5IGRlZmluZSBtYXJrZXJzIHZpYQotICBpdGVtLmtleXdvcmRzWy4uLl09YXNzaWdubWVu
dCBpbnRlZ3JhdGluZyB3aXRoICItbSIgb3B0aW9uCi0tIG1ha2UgIi1rIiBhY2NlcHQgYW4gZXhw
cmVzc2lvbnMgdGhlIHNhbWUgYXMgd2l0aCAiLW0iIHNvIHRoYXQgb25lCi0gIGNhbiB3cml0ZTog
LWsgIm5hbWUxIG9yIG5hbWUyIiBldGMuICBUaGlzIGlzIGEgc2xpZ2h0IGluY29tcGF0aWJpbGl0
eQotICBpZiB5b3UgdXNlZCBzcGVjaWFsIHN5bnRheCBsaWtlICJUZXN0Q2xhc3MudGVzdF9tZXRo
b2QiIHdoaWNoIHlvdSBub3cKLSAgbmVlZCB0byB3cml0ZSBhcyAtayAiVGVzdENsYXNzIGFuZCB0
ZXN0X21ldGhvZCIgdG8gbWF0Y2ggYSBjZXJ0YWluCi0gIG1ldGhvZCBpbiBhIGNlcnRhaW4gdGVz
dCBjbGFzcy4KLQotMi4zLjMKLT09PT09Ci0KLS0gZml4IGlzc3VlMjE0IC0gcGFyc2UgbW9kdWxl
cyB0aGF0IGNvbnRhaW4gc3BlY2lhbCBvYmplY3RzIGxpa2UgZS4gZy4KLSAgZmxhc2sncyByZXF1
ZXN0IG9iamVjdCB3aGljaCBibG93cyB1cCBvbiBnZXRhdHRyIGFjY2VzcyBpZiBubyByZXF1ZXN0
Ci0gIGlzIGFjdGl2ZS4gdGhhbmtzIFRob21hcyBXYWxkbWFubi4KLQotLSBmaXggaXNzdWUyMTMg
LSBhbGxvdyB0byBwYXJhbWV0cml6ZSB3aXRoIHZhbHVlcyBsaWtlIG51bXB5IGFycmF5cyB0aGF0
Ci0gIGRvIG5vdCBzdXBwb3J0IGFuIF9fZXFfXyBvcGVyYXRvcgotCi0tIGZpeCBpc3N1ZTIxNSAt
IHNwbGl0IHRlc3RfcHl0aG9uLm9yZyBpbnRvIG11bHRpcGxlIGZpbGVzCi0KLS0gZml4IGlzc3Vl
MTQ4IC0gQHVuaXR0ZXN0LnNraXAgb24gY2xhc3NlcyBpcyBub3cgcmVjb2duaXplZCBhbmQgYXZv
aWRzCi0gIGNhbGxpbmcgc2V0VXBDbGFzcy90ZWFyRG93bkNsYXNzLCB0aGFua3MgUGF2ZWwgUmVw
aW4KLQotLSBmaXggaXNzdWUyMDkgLSByZWludHJvZHVjZSBweXRob24yLjQgc3VwcG9ydCBieSBk
ZXBlbmRpbmcgb24gbmV3ZXIKLSAgcHlsaWIgd2hpY2ggcmUtaW50cm9kdWNlZCBzdGF0ZW1lbnQt
ZmluZGluZyBmb3IgcHJlLUFTVCBpbnRlcnByZXRlcnMKLQotLSBub3NlIHN1cHBvcnQ6IG9ubHkg
Y2FsbCBzZXR1cCBpZiBpdHMgYSBjYWxsYWJsZSwgdGhhbmtzIEFuZHJldwotICBUYXVtb2Vmb2xh
dQotCi0tIGZpeCBpc3N1ZTIxOSAtIGFkZCBweTIuNC0zLjMgY2xhc3NpZmllcnMgdG8gVFJPVkUg
bGlzdAotCi0tIGluIHRyYWNlYmFja3MgKiwqKiBhcmcgdmFsdWVzIGFyZSBub3cgc2hvd24gbmV4
dCB0byBub3JtYWwgYXJndW1lbnRzCi0gICh0aGFua3MgTWFudWVsIEphY29iKQotCi0tIGZpeCBp
c3N1ZTIxNyAtIHN1cHBvcnQgbW9jay5wYXRjaCB3aXRoIHB5dGVzdCdzIGZpeHR1cmVzIC0gbm90
ZSB0aGF0Ci0gIHlvdSBuZWVkIGVpdGhlciBtb2NrLTEuMC4xIG9yIHRoZSBweXRob24zLjMgYnVp
bHRpbiB1bml0dGVzdC5tb2NrLgotCi0tIGZpeCBpc3N1ZTEyNyAtIGltcHJvdmUgZG9jdW1lbnRh
dGlvbiBmb3IgcHl0ZXN0X2FkZG9wdGlvbigpIGFuZAotICBhZGQgYSBgYGNvbmZpZy5nZXRvcHRp
b24obmFtZSlgYCBoZWxwZXIgZnVuY3Rpb24gZm9yIGNvbnNpc3RlbmN5LgotCi0yLjMuMgotPT09
PT0KLQotLSBmaXggaXNzdWUyMDggYW5kIGZpeCBpc3N1ZTI5IHVzZSBuZXcgcHkgdmVyc2lvbiB0
byBhdm9pZCBsb25nIHBhdXNlcwotICB3aGVuIHByaW50aW5nIHRyYWNlYmFja3MgaW4gbG9uZyBt
b2R1bGVzCi0KLS0gZml4IGlzc3VlMjA1IC0gY29uZnRlc3RzIGluIHN1YmRpcnMgY3VzdG9taXpp
bmcKLSAgcHl0ZXN0X3B5Y29sbGVjdF9tYWtlbW9kdWxlIGFuZCBweXRlc3RfcHljb2xsZWN0X21h
a2VpdGVtCi0gIG5vdyB3b3JrIHByb3Blcmx5Ci0KLS0gZml4IHRlYXJkb3duLW9yZGVyaW5nIGZv
ciBwYXJhbWV0cml6ZWQgc2V0dXBzCi0KLS0gZml4IGlzc3VlMTI3IC0gYmV0dGVyIGRvY3VtZW50
YXRpb24gZm9yIHB5dGVzdF9hZGRvcHRpb24KLSAgYW5kIHJlbGF0ZWQgb2JqZWN0cy4KLQotLSBm
aXggdW5pdHRlc3QgYmVoYXZpb3VyOiBUZXN0Q2FzZS5ydW50ZXN0IG9ubHkgY2FsbGVkIGlmIHRo
ZXJlIGFyZQotICB0ZXN0IG1ldGhvZHMgZGVmaW5lZAotCi0tIGltcHJvdmUgdHJpYWwgc3VwcG9y
dDogZG9uJ3QgY29sbGVjdCBpdHMgZW1wdHkKLSAgdW5pdHRlc3QuVGVzdENhc2UucnVuVGVzdCgp
IG1ldGhvZAotCi0tICJweXRob24gc2V0dXAucHkgdGVzdCIgbm93IHdvcmtzIHdpdGggcHl0ZXN0
IGl0c2VsZgotCi0tIGZpeC9pbXByb3ZlIGludGVybmFsL3BhY2thZ2luZyByZWxhdGVkIGJpdHM6
Ci0KLSAgLSBleGNlcHRpb24gbWVzc2FnZSBjaGVjayBvZiB0ZXN0X25vc2UucHkgbm93IHBhc3Nl
cyBvbiBweXRob24zMyBhcyB3ZWxsCi0KLSAgLSBpc3N1ZTIwNiAtIGZpeCB0ZXN0X2Fzc2VydHJl
d3JpdGUucHkgdG8gd29yayB3aGVuIGEgZ2xvYmFsCi0gICAgUFlUSE9ORE9OVFdSSVRFQllURUNP
REU9MSBpcyBwcmVzZW50Ci0KLSAgLSBhZGQgdG94LmluaSB0byBweXRlc3QgZGlzdHJpYnV0aW9u
IHNvIHRoYXQgaWdub3JlLWRpcnMgYW5kIG90aGVycyBjb25maWcKLSAgICBiaXRzIGFyZSBwcm9w
ZXJseSBkaXN0cmlidXRlZCBmb3IgbWFpbnRhaW5lcnMgd2hvIHJ1biBweXRlc3Qtb3duIHRlc3Rz
Ci0KLTIuMy4xCi09PT09PQotCi0tIGZpeCBpc3N1ZTIwMiAtIGZpeCByZWdyZXNzaW9uOiB1c2lu
ZyAic2VsZiIgZnJvbSBmaXh0dXJlIGZ1bmN0aW9ucyBub3cKLSAgd29ya3MgYXMgZXhwZWN0ZWQg
KGl0J3MgdGhlIHNhbWUgInNlbGYiIGluc3RhbmNlIHRoYXQgYSB0ZXN0IG1ldGhvZAotICB3aGlj
aCB1c2VzIHRoZSBmaXh0dXJlIHNlZXMpCi0KLS0gc2tpcCBwZXhwZWN0IHVzaW5nIHRlc3RzICh0
ZXN0X3BkYi5weSBtb3N0bHkpIG9uIGZyZWVic2QqIHN5c3RlbXMKLSAgZHVlIHRvIHBleHBlY3Qg
bm90IHN1cHBvcnRpbmcgaXQgcHJvcGVybHkgKGhhbmdpbmcpCi0KLS0gbGluayB0byB3ZWIgcGFn
ZXMgZnJvbSAtLW1hcmtlcnMgb3V0cHV0IHdoaWNoIHByb3ZpZGVzIGhlbHAgZm9yCi0gIHB5dGVz
dC5tYXJrLiogdXNhZ2UuCi0KLTIuMy4wCi09PT09PQotCi0tIGZpeCBpc3N1ZTIwMiAtIGJldHRl
ciBhdXRvbWF0aWMgbmFtZXMgZm9yIHBhcmFtZXRyaXplZCB0ZXN0IGZ1bmN0aW9ucwotLSBmaXgg
aXNzdWUxMzkgLSBpbnRyb2R1Y2UgQHB5dGVzdC5maXh0dXJlIHdoaWNoIGFsbG93cyBkaXJlY3Qg
c2NvcGluZwotICBhbmQgcGFyYW1ldHJpemF0aW9uIG9mIGZ1bmNhcmcgZmFjdG9yaWVzLgotLSBm
aXggaXNzdWUxOTggLSBjb25mdGVzdCBmaXh0dXJlcyB3ZXJlIG5vdCBmb3VuZCBvbiB3aW5kb3dz
MzIgaW4gc29tZQotICBjaXJjdW1zdGFuY2VzIHdpdGggbmVzdGVkIGRpcmVjdG9yeSBzdHJ1Y3R1
cmVzIGR1ZSB0byBwYXRoIG1hbmlwdWxhdGlvbiBpc3N1ZXMKLS0gZml4IGlzc3VlMTkzIHNraXAg
dGVzdCBmdW5jdGlvbnMgd2l0aCB3ZXJlIHBhcmFtZXRyaXplZCB3aXRoIGVtcHR5Ci0gIHBhcmFt
ZXRlciBzZXRzCi0tIGZpeCBweXRob24zLjMgY29tcGF0LCBtb3N0bHkgcmVwb3J0aW5nIGJpdHMg
dGhhdCBwcmV2aW91c2x5IGRlcGVuZGVkCi0gIG9uIGRpY3Qgb3JkZXJpbmcKLS0gaW50cm9kdWNl
IHJlLW9yZGVyaW5nIG9mIHRlc3RzIGJ5IHJlc291cmNlIGFuZCBwYXJhbWV0cml6YXRpb24gc2V0
dXAKLSAgd2hpY2ggdGFrZXMgcHJlY2VkZW5jZSB0byB0aGUgdXN1YWwgZmlsZS1vcmRlcmluZwot
LSBmaXggaXNzdWUxODUgbW9ua2V5cGF0Y2hpbmcgdGltZS50aW1lIGRvZXMgbm90IGNhdXNlIHB5
dGVzdCB0byBmYWlsCi0tIGZpeCBpc3N1ZTE3MiBkdXBsaWNhdGUgY2FsbCBvZiBweXRlc3QuZml4
dHVyZSBkZWNvcmF0b3JlZCBzZXR1cF9tb2R1bGUKLSAgZnVuY3Rpb25zCi0tIGZpeCBqdW5pdHht
bD1wYXRoIGNvbnN0cnVjdGlvbiBzbyB0aGF0IGlmIHRlc3RzIGNoYW5nZSB0aGUKLSAgY3VycmVu
dCB3b3JraW5nIGRpcmVjdG9yeSBhbmQgdGhlIHBhdGggaXMgYSByZWxhdGl2ZSBwYXRoCi0gIGl0
IGlzIGNvbnN0cnVjdGVkIGNvcnJlY3RseSBmcm9tIHRoZSBvcmlnaW5hbCBjdXJyZW50IHdvcmtp
bmcgZGlyLgotLSBmaXggInB5dGhvbiBzZXR1cC5weSB0ZXN0IiBleGFtcGxlIHRvIGNhdXNlIGEg
cHJvcGVyICJlcnJubyIgcmV0dXJuCi0tIGZpeCBpc3N1ZTE2NSAtIGZpeCBicm9rZW4gZG9jIGxp
bmtzIGFuZCBtZW50aW9uIHN0YWNrb3ZlcmZsb3cgZm9yIEZBUQotLSBjYXRjaCB1bmljb2RlLWlz
c3VlcyB3aGVuIHdyaXRpbmcgZmFpbHVyZSByZXByZXNlbnRhdGlvbnMKLSAgdG8gdGVybWluYWwg
dG8gcHJldmVudCB0aGUgd2hvbGUgc2Vzc2lvbiBmcm9tIGNyYXNoaW5nCi0tIGZpeCB4ZmFpbC9z
a2lwIGNvbmZ1c2lvbjogYSBza2lwLW1hcmsgb3IgYW4gaW1wZXJhdGl2ZSBweXRlc3Quc2tpcAot
ICB3aWxsIG5vdyB0YWtlIHByZWNlZGVuY2UgYmVmb3JlIHhmYWlsLW1hcmtlcnMgYmVjYXVzZSB3
ZQotICBjYW4ndCBkZXRlcm1pbmUgeGZhaWwveHBhc3Mgc3RhdHVzIGluIGNhc2Ugb2YgYSBza2lw
LiBzZWUgYWxzbzoKLSAgaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xMTEwNTgy
OC9pbi1weS10ZXN0LXdoZW4taS1leHBsaWNpdGx5LXNraXAtYS10ZXN0LXRoYXQtaXMtbWFya2Vk
LWFzLXhmYWlsLWhvdy1jYW4taS1nZXQKLQotLSBhbHdheXMgcmVwb3J0IGluc3RhbGxlZCAzcmQg
cGFydHkgcGx1Z2lucyBpbiB0aGUgaGVhZGVyIG9mIGEgdGVzdCBydW4KLQotLSBmaXggaXNzdWUx
NjA6IGEgZmFpbGluZyBzZXR1cCBvZiBhbiB4ZmFpbC1tYXJrZWQgdGVzdHMgc2hvdWxkCi0gIGJl
IHJlcG9ydGVkIGFzIHhmYWlsIChub3QgeHBhc3MpCi0KLS0gZml4IGlzc3VlMTI4OiBzaG93IGNh
cHR1cmVkIG91dHB1dCB3aGVuIGNhcHN5cy9jYXBmZCBhcmUgdXNlZAotCi0tIGZpeCBpc3N1ZTE3
OTogcHJvcHBlcmx5IHNob3cgdGhlIGRlcGVuZGVuY3kgY2hhaW4gb2YgZmFjdG9yaWVzCi0KLS0g
cGx1Z2lubWFuYWdlci5yZWdpc3RlciguLi4pIG5vdyByYWlzZXMgVmFsdWVFcnJvciBpZiB0aGUK
LSAgcGx1Z2luIGhhcyBiZWVuIGFscmVhZHkgcmVnaXN0ZXJlZCBvciB0aGUgbmFtZSBpcyB0YWtl
bgotCi0tIGZpeCBpc3N1ZTE1OTogaW1wcm92ZSBodHRwOi8vcHl0ZXN0Lm9yZy9sYXRlc3QvZmFx
Lmh0bWwKLSAgZXNwZWNpYWxseSB3aXRoIHJlc3BlY3QgdG8gdGhlICJtYWdpYyIgaGlzdG9yeSwg
YWxzbyBtZW50aW9uCi0gIHB5dGVzdC1kamFuZ28sIHRyaWFsIGFuZCB1bml0dGVzdCBpbnRlZ3Jh
dGlvbi4KLQotLSBtYWtlIHJlcXVlc3Qua2V5d29yZHMgYW5kIG5vZGUua2V5d29yZHMgd3JpdGFi
bGUuICBBbGwgZGVzY2VuZGFudAotICBjb2xsZWN0aW9uIG5vZGVzIHdpbGwgc2VlIGtleXdvcmQg
dmFsdWVzLiAgS2V5d29yZHMgYXJlIGRpY3Rpb25hcmllcwotICBjb250YWluaW5nIG1hcmtlcnMg
YW5kIG90aGVyIGluZm8uCi0KLS0gZml4IGlzc3VlIDE3ODogeG1sIGJpbmFyeSBlc2NhcGVzIGFy
ZSBub3cgd3JhcHBlZCBpbiBweS54bWwucmF3Ci0KLS0gZml4IGlzc3VlIDE3NjogY29ycmVjdGx5
IGNhdGNoIHRoZSBidWlsdGluIEFzc2VydGlvbkVycm9yCi0gIGV2ZW4gd2hlbiB3ZSByZXBsYWNl
ZCBBc3NlcnRpb25FcnJvciB3aXRoIGEgc3ViY2xhc3Mgb24gdGhlCi0gIHB5dGhvbiBsZXZlbAot
Ci0tIGZhY3RvcnkgZGlzY292ZXJ5IG5vIGxvbmdlciBmYWlscyB3aXRoIG1hZ2ljIGdsb2JhbCBj
YWxsYWJsZXMKLSAgdGhhdCBwcm92aWRlIG5vIHNhbmUgX19jb2RlX18gb2JqZWN0IChtb2NrLmNh
bGwgZm9yIGV4YW1wbGUpCi0KLS0gZml4IGlzc3VlIDE4MjogdGVzdGRpci5pbnByb2Nlc3NfcnVu
IG5vdyBjb25zaWRlcnMgcGFzc2VkIHBsdWdpbnMKLQotLSBmaXggaXNzdWUgMTg4OiBlbnN1cmUg
c3lzLmV4Y19pbmZvIGlzIGNsZWFyIG9uIHB5dGhvbjIKLSAgICAgICAgICAgICAgICAgYmVmb3Jl
IGNhbGxpbmcgaW50byBhIHRlc3QKLQotLSBmaXggaXNzdWUgMTkxOiBhZGQgdW5pdHRlc3QgVGVz
dENhc2UgcnVuVGVzdCBtZXRob2Qgc3VwcG9ydAotLSBmaXggaXNzdWUgMTU2OiBtb25rZXlwYXRj
aCBjb3JyZWN0bHkgaGFuZGxlcyBjbGFzcyBsZXZlbCBkZXNjcmlwdG9ycwotCi0tIHJlcG9ydGlu
ZyByZWZpbmVtZW50czoKLQotICAtIHB5dGVzdF9yZXBvcnRfaGVhZGVyIG5vdyByZWNlaXZlcyBh
ICJzdGFydGRpciIgc28gdGhhdAotICAgIHlvdSBjYW4gdXNlIHN0YXJ0ZGlyLmJlc3RyZWxwYXRo
KHlvdXJwYXRoKSB0byBzaG93Ci0gICAgbmljZSByZWxhdGl2ZSBwYXRoCi0KLSAgLSBhbGxvdyBw
bHVnaW5zIHRvIGltcGxlbWVudCBib3RoIHB5dGVzdF9yZXBvcnRfaGVhZGVyIGFuZAotICAgIHB5
dGVzdF9zZXNzaW9uc3RhcnQgKHNlc3Npb25zdGFydCBpcyBpbnZva2VkIGZpcnN0KS4KLQotICAt
IGRvbid0IHNob3cgZGVzZWxlY3RlZCByZWFzb24gbGluZSBpZiB0aGVyZSBpcyBub25lCi0KLSAg
LSBweS50ZXN0IC12diB3aWxsIHNob3cgYWxsIG9mIGFzc2VydCBjb21wYXJpc2F0aW9ucyBpbnN0
ZWFkIG9mIHRydW5jYXRpbmcKLQotMi4yLjQKLT09PT09Ci0KLS0gZml4IGVycm9yIG1lc3NhZ2Ug
Zm9yIHJld3JpdHRlbiBhc3NlcnRpb25zIGludm9sdmluZyB0aGUgJSBvcGVyYXRvcgotLSBmaXgg
aXNzdWUgMTI2OiBjb3JyZWN0bHkgbWF0Y2ggYWxsIGludmFsaWQgeG1sIGNoYXJhY3RlcnMgZm9y
IGp1bml0eG1sCi0gIGJpbmFyeSBlc2NhcGUKLS0gZml4IGlzc3VlIHdpdGggdW5pdHRlc3Q6IG5v
dyBAdW5pdHRlc3QuZXhwZWN0ZWRGYWlsdXJlIG1hcmtlcnMgc2hvdWxkCi0gIGJlIHByb2Nlc3Nl
ZCBjb3JyZWN0bHkgKHlvdSBjYW4gYWxzbyB1c2UgQHB5dGVzdC5tYXJrIG1hcmtlcnMpCi0tIGRv
Y3VtZW50IGludGVncmF0aW9uIHdpdGggdGhlIGV4dGVuZGVkIGRpc3RyaWJ1dGUvc2V0dXB0b29s
cyB0ZXN0IGNvbW1hbmRzCi0tIGZpeCBpc3N1ZSAxNDA6IHByb3BwZXJseSBnZXQgdGhlIHJlYWwg
ZnVuY3Rpb25zCi0gIG9mIGJvdW5kIGNsYXNzbWV0aG9kcyBmb3Igc2V0dXAvdGVhcmRvd25fY2xh
c3MKLS0gZml4IGlzc3VlICMxNDE6IHN3aXRjaCBmcm9tIHRoZSBkZWNlYXNlZCBwYXN0ZS5wb2Nv
by5vcmcgdG8gYnBhc3RlLm5ldAotLSBmaXggaXNzdWUgIzE0MzogY2FsbCB1bmNvbmZpZ3VyZS9z
ZXNzaW9uZmluaXNoIGFsd2F5cyB3aGVuCi0gIGNvbmZpZ3VyZS9zZXNzaW9uc3RhcnQgd2hlcmUg
Y2FsbGVkCi0tIGZpeCBpc3N1ZSAjMTQ0OiBiZXR0ZXIgbWFuZ2xlIHRlc3QgaWRzIHRvIGp1bml0
eG1sIGNsYXNzbmFtZXMKLS0gdXBncmFkZSBkaXN0cmlidXRlX3NldHVwLnB5IHRvIDAuNi4yNwot
Ci0yLjIuMwotPT09PT0KLQotLSBmaXggdXBsb2FkZWQgcGFja2FnZSB0byBvbmx5IGluY2x1ZGUg
bmVjY2VzYXJ5IGZpbGVzCi0KLTIuMi4yCi09PT09PQotCi0tIGZpeCBpc3N1ZTEwMTogd3Jvbmcg
YXJncyB0byB1bml0dGVzdC5UZXN0Q2FzZSB0ZXN0IGZ1bmN0aW9uIG5vdwotICBwcm9kdWNlIGJl
dHRlciBvdXRwdXQKLS0gZml4IGlzc3VlMTAyOiByZXBvcnQgbW9yZSB1c2VmdWwgZXJyb3JzIGFu
ZCBoaW50cyBmb3Igd2hlbiBhCi0gIHRlc3QgZGlyZWN0b3J5IHdhcyByZW5hbWVkIGFuZCBzb21l
IHB5Yy9fX3B5Y2FjaGVfXyByZW1haW4KLS0gZml4IGlzc3VlMTA2OiBhbGxvdyBwYXJhbWV0cml6
ZSB0byBiZSBhcHBsaWVkIG11bHRpcGxlIHRpbWVzCi0gIGUuZy4gZnJvbSBtb2R1bGUsIGNsYXNz
IGFuZCBhdCBmdW5jdGlvbiBsZXZlbC4KLS0gZml4IGlzc3VlMTA3OiBhY3R1YWxseSBwZXJmb3Jt
IHNlc3Npb24gc2NvcGUgZmluYWxpemF0aW9uCi0tIGRvbid0IGNoZWNrIGluIHBhcmFtZXRyaXpl
IGlmIGluZGlyZWN0IHBhcmFtZXRlcnMgYXJlIGZ1bmNhcmcgbmFtZXMKLS0gYWRkIGNoZGlyIG1l
dGhvZCB0byBtb25rZXlwYXRjaCBmdW5jYXJnCi0tIGZpeCBjcmFzaCByZXN1bHRpbmcgZnJvbSBj
YWxsaW5nIG1vbmtleXBhdGNoIHVuZG8gYSBzZWNvbmQgdGltZQotLSBmaXggaXNzdWUxMTU6IG1h
a2UgLS1jb2xsZWN0b25seSByb2J1c3QgYWdhaW5zdCBlYXJseSBmYWlsdXJlCi0gIChtaXNzaW5n
IGZpbGVzL2RpcmVjdG9yaWVzKQotLSAiLXFxIC0tY29sbGVjdG9ubHkiIG5vdyBzaG93cyBvbmx5
IGZpbGVzIGFuZCB0aGUgbnVtYmVyIG9mIHRlc3RzIGluIHRoZW0KLS0gIi1xIC0tY29sbGVjdG9u
bHkiIG5vdyBzaG93cyB0ZXN0IGlkcwotLSBhbGxvdyBhZGRpbmcgb2YgYXR0cmlidXRlcyB0byB0
ZXN0IHJlcG9ydHMgc3VjaCB0aGF0IGl0IGFsc28gd29ya3MKLSAgd2l0aCBkaXN0cmlidXRlZCB0
ZXN0aW5nIChubyB1cGdyYWRlIG9mIHB5dGVzdC14ZGlzdCBuZWVkZWQpCi0KLTIuMi4xCi09PT09
PQotCi0tIGZpeCBpc3N1ZTk5IChpbiBweXRlc3QgYW5kIHB5KSBpbnRlcm5hbGxlcnJvcnMgd2l0
aCByZXN1bHRsb2cgbm93Ci0gIHByb2R1Y2UgYmV0dGVyIG91dHB1dCAtIGZpeGVkIGJ5IG5vcm1h
bGl6aW5nIHB5dGVzdF9pbnRlcm5hbGVycm9yCi0gIGlucHV0IGFyZ3VtZW50cy4KLS0gZml4IGlz
c3VlOTcgLyB0cmFjZWJhY2sgaXNzdWVzIChpbiBweXRlc3QgYW5kIHB5KSBpbXByb3ZlIHRyYWNl
YmFjayBvdXRwdXQKLSAgaW4gY29uanVuY3Rpb24gd2l0aCBqaW5qYTIgYW5kIGN5dGhvbiB3aGlj
aCBoYWNrIHRyYWNlYmFja3MKLS0gZml4IGlzc3VlOTMgKGluIHB5dGVzdCBhbmQgcHl0ZXN0LXhk
aXN0KSBhdm9pZCAiZGVsYXllZCB0ZWFyZG93bnMiOgotICB0aGUgZmluYWwgdGVzdCBpbiBhIHRl
c3Qgbm9kZSB3aWxsIG5vdyBydW4gaXRzIHRlYXJkb3duIGRpcmVjdGx5Ci0gIGluc3RlYWQgb2Yg
d2FpdGluZyBmb3IgdGhlIGVuZCBvZiB0aGUgc2Vzc2lvbi4gVGhhbmtzIERhdmUgSHVudCBmb3IK
LSAgdGhlIGdvb2QgcmVwb3J0aW5nIGFuZCBmZWVkYmFjay4gIFRoZSBweXRlc3RfcnVudGVzdF9w
cm90b2NvbCBhcyB3ZWxsCi0gIGFzIHRoZSBweXRlc3RfcnVudGVzdF90ZWFyZG93biBob29rcyBu
b3cgaGF2ZSAibmV4dGl0ZW0iIGF2YWlsYWJsZQotICB3aGljaCB3aWxsIGJlIE5vbmUgaW5kaWNh
dGluZyB0aGUgZW5kIG9mIHRoZSB0ZXN0IHJ1bi4KLS0gZml4IGNvbGxlY3Rpb24gY3Jhc2ggZHVl
IHRvIHVua25vd24tc291cmNlIGNvbGxlY3RlZCBpdGVtcywgdGhhbmtzCi0gIHRvIFJhbGYgU2No
bWl0dCAoZml4ZWQgYnkgZGVwZW5kaW5nIG9uIGEgbW9yZSByZWNlbnQgcHlsaWIpCi0KLTIuMi4w
Ci09PT09PQotCi0tIGZpeCBpc3N1ZTkwOiBpbnRyb2R1Y2UgZWFnZXIgdGVhcmluZyBkb3duIG9m
IHRlc3QgaXRlbXMgc28gdGhhdAotICB0ZWFyZG93biBmdW5jdGlvbiBhcmUgY2FsbGVkIGVhcmxp
ZXIuCi0tIGFkZCBhbiBhbGwtcG93ZXJmdWwgbWV0YWZ1bmMucGFyYW1ldHJpemUgZnVuY3Rpb24g
d2hpY2ggYWxsb3dzIHRvCi0gIHBhcmFtZXRyaXplIHRlc3QgZnVuY3Rpb24gYXJndW1lbnRzIGlu
IG11bHRpcGxlIHN0ZXBzIGFuZCB0aGVyZWZvcmUKLSAgZnJvbSBpbmRlcGRlbmVudCBwbHVnaW5z
IGFuZCBwYWxjZXMuCi0tIGFkZCBhIEBweXRlc3QubWFyay5wYXJhbWV0cml6ZSBoZWxwZXIgd2hp
Y2ggYWxsb3dzIHRvIGVhc2lseQotICBjYWxsIGEgdGVzdCBmdW5jdGlvbiB3aXRoIGRpZmZlcmVu
dCBhcmd1bWVudCB2YWx1ZXMKLS0gQWRkIGV4YW1wbGVzIHRvIHRoZSAicGFyYW1ldHJpemUiIGV4
YW1wbGUgcGFnZSwgaW5jbHVkaW5nIGEgcXVpY2sgcG9ydAotICBvZiBUZXN0IHNjZW5hcmlvcyBh
bmQgdGhlIG5ldyBwYXJhbWV0cml6ZSBmdW5jdGlvbiBhbmQgZGVjb3JhdG9yLgotLSBpbnRyb2R1
Y2UgcmVnaXN0cmF0aW9uIGZvciAicHl0ZXN0Lm1hcmsuKiIgaGVscGVycyB2aWEgaW5pLWZpbGVz
Ci0gIG9yIHRocm91Z2ggcGx1Z2luIGhvb2tzLiAgQWxzbyBpbnRyb2R1Y2UgYSAiLS1zdHJpY3Qi
IG9wdGlvbiB3aGljaAotICB3aWxsIHRyZWF0IHVucmVnaXN0ZXJlZCBtYXJrZXJzIGFzIGVycm9y
cwotICBhbGxvd2luZyB0byBhdm9pZCB0eXBvcyBhbmQgbWFpbnRhaW4gYSB3ZWxsIGRlc2NyaWJl
ZCBzZXQgb2YgbWFya2VycwotICBmb3IgeW91ciB0ZXN0IHN1aXRlLiAgU2VlIGV4YXBsZXMgYXQg
aHR0cDovL3B5dGVzdC5vcmcvbGF0ZXN0L21hcmsuaHRtbAotICBhbmQgaXRzIGxpbmtzLgotLSBp
c3N1ZTUwOiBpbnRyb2R1Y2UgIi1tIG1hcmtlciIgb3B0aW9uIHRvIHNlbGVjdCB0ZXN0cyBiYXNl
ZCBvbiBtYXJrZXJzCi0gICh0aGlzIGlzIGEgc3RyaWN0ZXIgYW5kIG1vcmUgcHJlZGljdGFibGUg
dmVyc2lvbiBvZiAnLWsnIGluIHRoYXQgIi1tIgotICBvbmx5IG1hdGNoZXMgY29tcGxldGUgbWFy
a2VycyBhbmQgaGFzIG1vcmUgb2J2aW91cyBydWxlcyBmb3IgYW5kL29yCi0gIHNlbWFudGljcy4K
LS0gbmV3IGZlYXR1cmUgdG8gaGVscCBvcHRpbWl6aW5nIHRoZSBzcGVlZCBvZiB5b3VyIHRlc3Rz
OgotICAtLWR1cmF0aW9ucz1OIG9wdGlvbiBmb3IgZGlzcGxheWluZyBOIHNsb3dlc3QgdGVzdCBj
YWxscwotICBhbmQgc2V0dXAvdGVhcmRvd24gbWV0aG9kcy4KLS0gZml4IGlzc3VlODc6IC0tcGFz
dGViaW4gbm93IHdvcmtzIHdpdGggcHl0aG9uMwotLSBmaXggaXNzdWU4OTogLS1wZGIgd2l0aCB1
bmV4cGVjdGVkIGV4Y2VwdGlvbnMgaW4gZG9jdGVzdCB3b3JrIG1vcmUgc2Vuc2libHkKLS0gZml4
IGFuZCBjbGVhbnVwIHB5dGVzdCdzIG93biB0ZXN0IHN1aXRlIHRvIG5vdCBsZWFrIEZEcwotLSBm
aXggaXNzdWU4MzogbGluayB0byBnZW5lcmF0ZWQgZnVuY2FyZyBsaXN0Ci0tIGZpeCBpc3N1ZTc0
OiBweWFyZyBtb2R1bGUgbmFtZXMgYXJlIG5vdyBjaGVja2VkIGFnYWluc3QgaW1wLmZpbmRfbW9k
dWxlIGZhbHNlIHBvc2l0aXZlcwotLSBmaXggY29tcGF0aWJpbGl0eSB3aXRoIHR3aXN0ZWQvdHJp
YWwtMTEuMS4wIHVzZSBjYXNlcwotLSBzaW1wbGlmeSBOb2RlLmxpc3RjaGFpbgotLSBzaW1wbGlm
eSBqdW5pdHhtbCBvdXRwdXQgY29kZSBieSByZWx5aW5nIG9uIHB5LnhtbAotLSBhZGQgc3VwcG9y
dCBmb3Igc2tpcCBwcm9wZXJ0aWVzIG9uIHVuaXR0ZXN0IGNsYXNzZXMgYW5kIGZ1bmN0aW9ucwot
Ci0yLjEuMwotPT09PT0KLQotLSBmaXggaXNzdWU3OTogYXNzZXJ0aW9uIHJld3JpdGluZyBmYWls
ZWQgb24gc29tZSBjb21wYXJpc29ucyBpbiBib29sb3BzCi0tIGNvcnJlY3RseSBoYW5kbGUgemVy
byBsZW5ndGggYXJndW1lbnRzIChhIGxhIHB5dGVzdCAnJykKLS0gZml4IGlzc3VlNjcgLyBqdW5p
dHhtbCBub3cgY29udGFpbnMgY29ycmVjdCB0ZXN0IGR1cmF0aW9ucywgdGhhbmtzIHJvbm55Ci0t
IGZpeCBpc3N1ZTc1IC8gc2tpcHBpbmcgdGVzdCBmYWlsdXJlIG9uIGp5dGhvbgotLSBmaXggaXNz
dWU3NyAvIEFsbG93IGFzc2VydHJlcHJfY29tcGFyZSBob29rIHRvIGFwcGx5IHRvIGEgc3Vic2V0
IG9mIHRlc3RzCi0KLTIuMS4yCi09PT09PQotCi0tIGZpeCBhc3NlcnRpb24gcmV3cml0aW5nIG9u
IGZpbGVzIHdpdGggd2luZG93cyBuZXdsaW5lcyBvbiBzb21lIFB5dGhvbiB2ZXJzaW9ucwotLSBy
ZWZpbmUgdGVzdCBkaXNjb3ZlcnkgYnkgcGFja2FnZS9tb2R1bGUgbmFtZSAoLS1weWFyZ3MpLCB0
aGFua3MgRmxvcmlhbiBNYXllcgotLSBmaXggaXNzdWU2OSAvIGFzc2VydGlvbiByZXdyaXRpbmcg
Zml4ZWQgb24gc29tZSBib29sZWFuIG9wZXJhdGlvbnMKLS0gZml4IGlzc3VlNjggLyBwYWNrYWdl
cyBub3cgd29yayB3aXRoIGFzc2VydGlvbiByZXdyaXRpbmcKLS0gZml4IGlzc3VlNjY6IHVzZSBk
aWZmZXJlbnQgYXNzZXJ0aW9uIHJld3JpdGluZyBjYWNoZXMgd2hlbiB0aGUgLU8gb3B0aW9uIGlz
IHBhc3NlZAotLSBkb24ndCB0cnkgYXNzZXJ0aW9uIHJld3JpdGluZyBvbiBKeXRob24sIHVzZSBy
ZWludGVycAotCi0yLjEuMQotPT09PT0KLQotLSBmaXggaXNzdWU2NCAvIHB5dGVzdC5zZXRfdHJh
Y2Ugbm93IHdvcmtzIHdpdGhpbiBweXRlc3RfZ2VuZXJhdGVfdGVzdHMgaG9va3MKLS0gZml4IGlz
c3VlNjAgLyBmaXggZXJyb3IgY29uZGl0aW9ucyBpbnZvbHZpbmcgdGhlIGNyZWF0aW9uIG9mIF9f
cHljYWNoZV9fCi0tIGZpeCBpc3N1ZTYzIC8gYXNzZXJ0aW9uIHJld3JpdGluZyBvbiBpbnNlcnRz
IGludm9sdmluZyBzdHJpbmdzIGNvbnRhaW5pbmcgJyUnCi0tIGZpeCBhc3NlcnRpb24gcmV3cml0
aW5nIG9uIGNhbGxzIHdpdGggYSAqKiBhcmcKLS0gZG9uJ3QgY2FjaGUgcmV3cml0dGVuIG1vZHVs
ZXMgaWYgYnl0ZWNvZGUgZ2VuZXJhdGlvbiBpcyBkaXNhYmxlZAotLSBmaXggYXNzZXJ0aW9uIHJl
d3JpdGluZyBpbiByZWFkLW9ubHkgZGlyZWN0b3JpZXMKLS0gZml4IGlzc3VlNTk6IHByb3ZpZGUg
c3lzdGVtLW91dC9lcnIgdGFncyBmb3IganVuaXR4bWwgb3V0cHV0Ci0tIGZpeCBpc3N1ZTYxOiBh
c3NlcnRpb24gcmV3cml0aW5nIG9uIGJvb2xlYW4gb3BlcmF0aW9ucyB3aXRoIDMgb3IgbW9yZSBv
cGVyYW5kcwotLSB5b3UgY2FuIG5vdyBidWlsZCBhIG1hbiBwYWdlIHdpdGggImNkIGRvYyA7IG1h
a2UgbWFuIgotCi0yLjEuMAotPT09PT0KLQotLSBmaXggaXNzdWU1MyBjYWxsIG5vc2VzdHlsZSBz
ZXR1cCBmdW5jdGlvbnMgd2l0aCBjb3JyZWN0IG9yZGVyaW5nCi0tIGZpeCBpc3N1ZTU4IGFuZCBp
c3N1ZTU5OiBuZXcgYXNzZXJ0aW9uIGNvZGUgZml4ZXMKLS0gbWVyZ2UgQmVuamFtaW4ncyBhc3Nl
cnRpb25yZXdyaXRlIGJyYW5jaDogbm93IGFzc2VydGlvbnMKLSAgZm9yIHRlc3QgbW9kdWxlcyBv
biBweXRob24gMi42IGFuZCBhYm92ZSBhcmUgZG9uZSBieSByZXdyaXRpbmcKLSAgdGhlIEFTVCBh
bmQgc2F2aW5nIHRoZSBweWMgZmlsZSBiZWZvcmUgdGhlIHRlc3QgbW9kdWxlIGlzIGltcG9ydGVk
LgotICBzZWUgZG9jL2Fzc2VydC50eHQgZm9yIG1vcmUgaW5mby4KLS0gZml4IGlzc3VlNDM6IGlt
cHJvdmUgZG9jdGVzdHMgd2l0aCBiZXR0ZXIgdHJhY2ViYWNrIHJlcG9ydGluZyBvbgotICB1bmV4
cGVjdGVkIGV4Y2VwdGlvbnMKLS0gZml4IGlzc3VlNDc6IHRpbWluZyBvdXRwdXQgaW4ganVuaXR4
bWwgZm9yIHRlc3QgY2FzZXMgaXMgbm93IGNvcnJlY3QKLS0gZml4IGlzc3VlNDg6IHR5cG8gaW4g
TWFya0luZm8gcmVwciBsZWFkaW5nIHRvIGV4Y2VwdGlvbgotLSBmaXggaXNzdWU0OTogYXZvaWQg
Y29uZnVzaW5nIGVycm9yIHdoZW4gaW5pdGl6YWxpYXRpb24gcGFydGlhbGx5IGZhaWxzCi0tIGZp
eCBpc3N1ZTQ0OiBlbnYvdXNlcm5hbWUgZXhwYW5zaW9uIGZvciBqdW5pdHhtbCBmaWxlIHBhdGgK
LS0gc2hvdyByZWxlYXNlbGV2ZWwgaW5mb3JtYXRpb24gaW4gdGVzdCBydW5zIGZvciBweXB5Ci0t
IHJld29ya2VkIGRvYyBwYWdlcyBmb3IgYmV0dGVyIG5hdmlnYXRpb24gYW5kIFBERiBnZW5lcmF0
aW9uCi0tIHJlcG9ydCBLZXlib2FyZEludGVycnVwdCBldmVuIGlmIGludGVycnVwdGVkIGR1cmlu
ZyBzZXNzaW9uIHN0YXJ0dXAKLS0gZml4IGlzc3VlIDM1IC0gcHJvdmlkZSBQREYgZG9jIHZlcnNp
b24gYW5kIGRvd25sb2FkIGxpbmsgZnJvbSBpbmRleCBwYWdlCi0KLTIuMC4zCi09PT09PQotCi0t
IGZpeCBpc3N1ZTM4OiBuaWNlciB0cmFjZWJhY2tzIG9uIGNhbGxzIHRvIGhvb2tzLCBwYXJ0aWN1
bGFybHkgZWFybHkKLSAgY29uZmlndXJlL3Nlc3Npb25zdGFydCBvbmVzCi0KLS0gZml4IG1pc3Np
bmcgc2tpcCByZWFzb24vbWV0YSBpbmZvcm1hdGlvbiBpbiBqdW5pdHhtbCBmaWxlcywgcmVwb3J0
ZWQKLSAgdmlhIGh0dHA6Ly9saXN0cy5pZHlsbC5vcmcvcGlwZXJtYWlsL3Rlc3RpbmctaW4tcHl0
aG9uLzIwMTEtTWFyY2gvMDAzOTI4Lmh0bWwKLQotLSBmaXggaXNzdWUzNDogYXZvaWQgY29sbGVj
dGlvbiBmYWlsdXJlIHdpdGggInRlc3QiIHByZWZpeGVkIGNsYXNzZXMKLSAgZGVyaXZpbmcgZnJv
bSBvYmplY3QuCi0KLS0gZG9uJ3QgcmVxdWlyZSB6bGliIChhbmQgb3RoZXIgbGlicykgZm9yIGdl
bnNjcmlwdCBwbHVnaW4gd2l0aG91dAotICAtLWdlbnNjcmlwdCBhY3R1YWxseSBiZWluZyB1c2Vk
LgotCi0tIHNwZWVkIHVwIHNraXBzIChieSBub3QgZG9pbmcgYSBmdWxsIHRyYWNlYmFjayByZXBy
ZXNlbmF0aW9uCi0gIGludGVybmFsbHkpCi0KLS0gZml4IGlzc3VlMzc6IGF2b2lkIGludmFsaWQg
Y2hhcmFjdGVycyBpbiBqdW5pdHhtbCdzIG91dHB1dAotCi0yLjAuMgotPT09PT0KLQotLSB0YWNr
bGUgaXNzdWUzMiAtIHNwZWVkIHVwIHRlc3QgcnVucyBvZiB2ZXJ5IHF1aWNrIHRlc3QgZnVuY3Rp
b25zCi0gIGJ5IHJlZHVjaW5nIHRoZSByZWxhdGl2ZSBvdmVyaGVhZAotCi0tIGZpeCBpc3N1ZTMw
IC0gZXh0ZW5kZWQgeGZhaWwvc2tpcGlmIGhhbmRsaW5nIGFuZCBpbXByb3ZlZCByZXBvcnRpbmcu
Ci0gIElmIHlvdSBoYXZlIGEgc3ludGF4IGVycm9yIGluIHlvdXIgc2tpcC94ZmFpbAotICBleHBy
ZXNzaW9ucyB5b3Ugbm93IGdldCBuaWNlIGVycm9yIHJlcG9ydHMuCi0KLSAgQWxzbyB5b3UgY2Fu
IG5vdyBhY2Nlc3MgbW9kdWxlIGdsb2JhbHMgZnJvbSB4ZmFpbC9za2lwaWYKLSAgZXhwcmVzc2lv
bnMgc28gdGhhdCB0aGlzIGZvciBleGFtcGxlIHdvcmtzIG5vdzo6Ci0KLSAgICBpbXBvcnQgcHl0
ZXN0Ci0gICAgaW1wb3J0IG15bW9kdWxlCi0gICAgQHB5dGVzdC5tYXJrLnNraXBpZigibXltb2R1
bGUuX192ZXJzaW9uX19bMF0gPT0gIjEiKQotICAgIGRlZiB0ZXN0X2Z1bmN0aW9uKCk6Ci0gICAg
ICAgIHBhc3MKLQotICBUaGlzIHdpbGwgbm90IHJ1biB0aGUgdGVzdCBmdW5jdGlvbiBpZiB0aGUg
bW9kdWxlJ3MgdmVyc2lvbiBzdHJpbmcKLSAgZG9lcyBub3Qgc3RhcnQgd2l0aCBhICIxIi4gIE5v
dGUgdGhhdCBzcGVjaWZ5aW5nIGEgc3RyaW5nIGluc3RlYWQKLSAgb2YgYSBib29sZWFuIGV4cHJl
c3Npb25zIGFsbG93cyBweS50ZXN0IHRvIHJlcG9ydCBtZWFuaW5nZnVsIGluZm9ybWF0aW9uCi0g
IHdoZW4gc3VtbWFyaXppbmcgYSB0ZXN0IHJ1biBhcyB0byB3aGF0IGNvbmRpdGlvbnMgbGVhZCB0
byBza2lwcGluZwotICAob3IgeGZhaWwtaW5nKSB0ZXN0cy4KLQotLSBmaXggaXNzdWUyOCAtIHNl
dHVwX21ldGhvZCBhbmQgcHl0ZXN0X2dlbmVyYXRlX3Rlc3RzIHdvcmsgdG9nZXRoZXIKLSAgVGhl
IHNldHVwX21ldGhvZCBmaXh0dXJlIG1ldGhvZCBub3cgZ2V0cyBjYWxsZWQgYWxzbyBmb3IKLSAg
dGVzdCBmdW5jdGlvbiBpbnZvY2F0aW9ucyBnZW5lcmF0ZWQgZnJvbSB0aGUgcHl0ZXN0X2dlbmVy
YXRlX3Rlc3RzCi0gIGhvb2suCi0KLS0gZml4IGlzc3VlMjcgLSBjb2xsZWN0b25seSBhbmQga2V5
d29yZC1zZWxlY3Rpb24gKC1rKSBub3cgd29yayB0b2dldGhlcgotICBBbHNvLCBpZiB5b3UgZG8g
InB5LnRlc3QgLS1jb2xsZWN0b25seSAtcSIgeW91IG5vdyBnZXQgYSBmbGF0IGxpc3QKLSAgb2Yg
dGVzdCBpZHMgdGhhdCB5b3UgY2FuIHVzZSB0byBwYXN0ZSB0byB0aGUgcHkudGVzdCBjb21tYW5k
bGluZQotICBpbiBvcmRlciB0byBleGVjdXRlIGEgcGFydGljdWxhciB0ZXN0LgotCi0tIGZpeCBp
c3N1ZTI1IGF2b2lkIHJlcG9ydGVkIHByb2JsZW1zIHdpdGggLS1wZGIgYW5kIHB5dGhvbjMuMi9l
bmNvZGluZ3Mgb3V0cHV0Ci0KLS0gZml4IGlzc3VlMjMgLSB0bXBkaXIgYXJndW1lbnQgbm93IHdv
cmtzIG9uIFB5dGhvbjMuMiBhbmQgV2luZG93c1hQCi0gIFN0YXJ0aW5nIHdpdGggUHl0aG9uMy4y
IG9zLnN5bWxpbmsgbWF5IGJlIHN1cHBvcnRlZC4gQnkgcmVxdWlyaW5nCi0gIGEgbmV3ZXIgcHkg
bGliIHZlcnNpb24gdGhlIHB5LnBhdGgubG9jYWwoKSBpbXBsZW1lbnRhdGlvbiBhY2tub3dsZWRn
ZXMKLSAgdGhpcy4KLQotLSBmaXhlZCB0eXBvcyBpbiB0aGUgZG9jcyAodGhhbmtzIFZpY3RvciBH
YXJjaWEsIEJyaWFubmEgTGF1Z2hlcikgYW5kIHBhcnRpY3VsYXIKLSAgdGhhbmtzIHRvIExhdXJh
IENyZWlnaHRvbiB3aG8gYWxzbyByZXZpZXZlZCBwYXJ0cyBvZiB0aGUgZG9jdW1lbnRhdGlvbi4K
LQotLSBmaXggc2xpZ2hseSB3cm9uZyBvdXRwdXQgb2YgdmVyYm9zZSBwcm9ncmVzcyByZXBvcnRp
bmcgZm9yIGNsYXNzZXMKLSAgKHRoYW5rcyBBbWF1cnkpCi0KLS0gbW9yZSBwcmVjaXNlIChhdm9p
ZGluZyBvZikgZGVwcmVjYXRpb24gd2FybmluZ3MgZm9yIG5vZGUuQ2xhc3N8RnVuY3Rpb24gYWNj
ZXNzZXMKLQotLSBhdm9pZCBzdGQgdW5pdHRlc3QgYXNzZXJ0aW9uIGhlbHBlciBjb2RlIGluIHRy
YWNlYmFja3MgKHRoYW5rcyBSb25ueSkKLQotMi4wLjEKLT09PT09Ci0KLS0gcmVmaW5lIGFuZCB1
bmlmeSBpbml0aWFsIGNhcHR1cmluZyBzbyB0aGF0IGl0IHdvcmtzIG5pY2VseQotICBldmVuIGlm
IHRoZSBsb2dnaW5nIG1vZHVsZSBpcyB1c2VkIG9uIGFuIGVhcmx5LWxvYWRlZCBjb25mdGVzdC5w
eQotICBmaWxlIG9yIHBsdWdpbi4KLS0gYWxsb3cgdG8gb21pdCAiKCkiIGluIHRlc3QgaWRzIHRv
IGFsbG93IGZvciB1bmlmb3JtIHRlc3QgaWRzCi0gIGFzIHByb2R1Y2VkIGJ5IEFsZnJlZG8ncyBu
aWNlIHB5dGVzdC52aW0gcGx1Z2luLgotLSBmaXggaXNzdWUxMiAtIHNob3cgcGx1Z2luIHZlcnNp
b25zIHdpdGggIi0tdmVyc2lvbiIgYW5kCi0gICItLXRyYWNlY29uZmlnIiBhbmQgYWxzbyBkb2N1
bWVudCBob3cgdG8gYWRkIGV4dHJhIGluZm9ybWF0aW9uCi0gIHRvIHJlcG9ydGluZyB0ZXN0IGhl
YWRlcgotLSBmaXggaXNzdWUxNyAoaW1wb3J0LSogcmVwb3J0aW5nIGlzc3VlIG9uIHB5dGhvbjMp
IGJ5Ci0gIHJlcXVpcmluZyBweT4xLjQuMCAoMS40LjEgaXMgZ29pbmcgdG8gaW5jbHVkZSBpdCkK
LS0gZml4IGlzc3VlMTAgKG51bXB5IGFycmF5cyB0cnV0aCBjaGVja2luZykgYnkgcmVmaW5pbmcK
LSAgYXNzZXJ0aW9uIGludGVycHJldGF0aW9uIGluIHB5IGxpYgotLSBmaXggaXNzdWUxNTogbWFr
ZSBub3NlIGNvbXBhdGliaWxpdHkgdGVzdHMgY29tcGF0aWJsZQotICB3aXRoIHB5dGhvbjMgKG5v
dyB0aGF0IG5vc2UtMS4wIHN1cHBvcnRzIHB5dGhvbjMpCi0tIHJlbW92ZSBzb21ld2hhdCBzdXJw
cmlzaW5nICJzYW1lLWNvbmZ0ZXN0IiBkZXRlY3Rpb24gYmVjYXVzZQotICBpdCBpZ25vcmVzIGNv
bmZ0ZXN0LnB5IHdoZW4gdGhleSBhcHBlYXIgaW4gc2V2ZXJhbCBzdWJkaXJzLgotLSBpbXByb3Zl
IGFzc2VydGlvbnMgKCJub3QgaW4iKSwgdGhhbmtzIEZsb3JpcyBCcnV5bm9vZ2hlCi0tIGltcHJv
dmUgYmVoYXZpb3VyL3dhcm5pbmdzIHdoZW4gcnVubmluZyBvbiB0b3Agb2YgInB5dGhvbiAtT08i
Ci0gIChhc3NlcnRpb25zIGFuZCBkb2NzdHJpbmdzIGFyZSB0dXJuZWQgb2ZmLCBsZWFkaW5nIHRv
IHBvdGVudGlhbAotICBmYWxzZSBwb3NpdGl2ZXMpCi0tIGludHJvZHVjZSBhIHB5dGVzdF9jbWRs
aW5lX3Byb2Nlc3NhcmdzKGFyZ3MpIGhvb2sKLSAgdG8gYWxsb3cgZHluYW1pYyBjb21wdXRhdGlv
biBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzLgotICBUaGlzIGZpeGVzIGEgcmVncmVzc2lvbiBi
ZWNhdXNlIHB5LnRlc3QgcHJpb3IgdG8gMi4wCi0gIGFsbG93ZWQgdG8gc2V0IGNvbW1hbmQgbGlu
ZSBvcHRpb25zIGZyb20gY29uZnRlc3QucHkKLSAgZmlsZXMgd2hpY2ggc28gZmFyIHB5dGVzdC0y
LjAgb25seSBhbGxvd2VkIGZyb20gaW5pLWZpbGVzIG5vdy4KLS0gZml4IGlzc3VlNzogYXNzZXJ0
IGZhaWx1cmVzIGluIGRvY3Rlc3QgbW9kdWxlcy4KLSAgdW5leHBlY3RlZCBmYWlsdXJlcyBpbiBk
b2N0ZXN0cyB3aWxsIG5vdCBnZW5lcmFsbHkKLSAgc2hvdyBuaWNlciwgaS5lLiB3aXRoaW4gdGhl
IGRvY3Rlc3QgZmFpbGluZyBjb250ZXh0LgotLSBmaXggaXNzdWU5OiBzZXR1cC90ZWFyZG93biBm
dW5jdGlvbnMgZm9yIGFuIHhmYWlsLW1hcmtlZAotICB0ZXN0IHdpbGwgcmVwb3J0IGFzIHhmYWls
IGlmIHRoZXkgZmFpbCBidXQgcmVwb3J0IGFzIG5vcm1hbGx5Ci0gIHBhc3NpbmcgKG5vdCB4cGFz
c2luZykgaWYgdGhleSBzdWNjZWVkLiAgVGhpcyBvbmx5IGlzIHRydWUKLSAgZm9yICJkaXJlY3Qi
IHNldHVwL3RlYXJkb3duIGludm9jYXRpb25zIGJlY2F1c2UgdGVhcmRvd25fY2xhc3MvCi0gIHRl
YXJkb3duX21vZHVsZSBjYW5ub3QgY2xvc2VseSByZWxhdGUgdG8gYSBzaW5nbGUgdGVzdC4KLS0g
Zml4IGlzc3VlMTQ6IG5vIGxvZ2dpbmcgZXJyb3JzIGF0IHByb2Nlc3MgZXhpdAotLSByZWZpbmVt
ZW50cyB0byAiY29sbGVjdGluZyIgb3V0cHV0IG9uIG5vbi10dHlzCi0tIHJlZmluZSBpbnRlcm5h
bCBwbHVnaW4gcmVnaXN0cmF0aW9uIGFuZCAtLXRyYWNlY29uZmlnIG91dHB1dAotLSBpbnRyb2R1
Y2UgYSBtZWNoYW5pc20gdG8gcHJldmVudC91bnJlZ2lzdGVyIHBsdWdpbnMgZnJvbSB0aGUKLSAg
Y29tbWFuZCBsaW5lLCBzZWUgaHR0cDovL3B5dGVzdC5vcmcvcGx1Z2lucy5odG1sI2NtZHVucmVn
aXN0ZXIKLS0gYWN0aXZhdGUgcmVzdWx0bG9nIHBsdWdpbiBieSBkZWZhdWx0Ci0tIGZpeCByZWdy
ZXNzaW9uIHdydCB5aWVsZGVkIHRlc3RzIHdoaWNoIGR1ZSB0byB0aGUKLSAgY29sbGVjdGlvbi1i
ZWZvcmUtcnVubmluZyBzZW1hbnRpY3Mgd2VyZSBub3QKLSAgc2V0dXAgYXMgd2l0aCBweXRlc3Qg
MS4zLjQuICBOb3RlLCBob3dldmVyLCB0aGF0Ci0gIHRoZSByZWNvbW1lbmRlZCBhbmQgbXVjaCBj
bGVhbmVyIHdheSB0byBkbyB0ZXN0Ci0gIHBhcmFtZXRyYWl6YXRpb24gcmVtYWlucyB0aGUgInB5
dGVzdF9nZW5lcmF0ZV90ZXN0cyIKLSAgbWVjaGFuaXNtLCBzZWUgdGhlIGRvY3MuCi0KLTIuMC4w
Ci09PT09PQotCi0tIHB5dGVzdC0yLjAgaXMgbm93IGl0cyBvd24gcGFja2FnZSBhbmQgZGVwZW5k
cyBvbiBweWxpYi0yLjAKLS0gbmV3IGFiaWxpdHk6IHB5dGhvbiAtbSBweXRlc3QgLyBweXRob24g
LW0gcHl0ZXN0Lm1haW4gYWJpbGl0eQotLSBuZXcgcHl0aG9uIGludmNhdGlvbjogcHl0ZXN0Lm1h
aW4oYXJncywgcGx1Z2lucykgdG8gbG9hZAotICBzb21lIGN1c3RvbSBwbHVnaW5zIGVhcmx5Lgot
LSB0cnkgaGFyZGVyIHRvIHJ1biB1bml0dGVzdCB0ZXN0IHN1aXRlcyBpbiBhIG1vcmUgY29tcGF0
aWJsZSBtYW5uZXIKLSAgYnkgZGVmZXJyaW5nIHNldHVwL3RlYXJkb3duIHNlbWFudGljcyB0byB0
aGUgdW5pdHRlc3QgcGFja2FnZS4KLSAgYWxzbyB3b3JrIGhhcmRlciB0byBydW4gdHdpc3RlZC90
cmlhbCBhbmQgRGphbmdvIHRlc3RzIHdoaWNoCi0gIHNob3VsZCBub3cgYmFzaWNhbGx5IHdvcmsg
YnkgZGVmYXVsdC4KLS0gaW50cm9kdWNlIGEgbmV3IHdheSB0byBzZXQgY29uZmlnIG9wdGlvbnMg
dmlhIGluaS1zdHlsZSBmaWxlcywKLSAgYnkgZGVmYXVsdCBzZXR1cC5jZmcgYW5kIHRveC5pbmkg
ZmlsZXMgYXJlIHNlYXJjaGVkLiAgVGhlIG9sZAotICB3YXlzIChjZXJ0YWluIGVudmlyb25tZW50
IHZhcmlhYmxlcywgZHluYW1pYyBjb25mdGVzdC5weSByZWFkaW5nCi0gIGlzIHJlbW92ZWQpLgot
LSBhZGQgYSBuZXcgIi1xIiBvcHRpb24gd2hpY2ggZGVjcmVhc2VzIHZlcmJvc2l0eSBhbmQgcHJp
bnRzIGEgbW9yZQotICBub3NlL3VuaXR0ZXN0LXN0eWxlICJkb3QiIG91dHB1dC4KLS0gZml4IGlz
c3VlMTM1IC0gbWFya3Mgbm93IHdvcmsgd2l0aCB1bml0dGVzdCB0ZXN0IGNhc2VzIGFzIHdlbGwK
LS0gZml4IGlzc3VlMTI2IC0gaW50cm9kdWNlIHB5LnRlc3Quc2V0X3RyYWNlKCkgdG8gdHJhY2Ug
ZXhlY3V0aW9uIHZpYQotICBQREIgZHVyaW5nIHRoZSBydW5uaW5nIG9mIHRlc3RzIGV2ZW4gaWYg
Y2FwdHVyaW5nIGlzIG9uZ29pbmcuCi0tIGZpeCBpc3N1ZTEyMyAtIG5ldyAicHl0aG9uIC1tIHB5
LnRlc3QiIGludm9jYXRpb24gZm9yIHB5LnRlc3QKLSAgKHJlcXVpcmVzIFB5dGhvbiAyLjUgb3Ig
YWJvdmUpCi0tIGZpeCBpc3N1ZTEyNCAtIG1ha2UgcmVwb3J0aW5nIG1vcmUgcmVzaWxpZW50IGFn
YWluc3QgdGVzdHMgb3BlbmluZwotICBmaWxlcyBvbiBmaWxlZGVzY3JpcHRvciAxIChzdGRvdXQp
LgotLSBmaXggaXNzdWUxMDkgLSBzaWJsaW5nIGNvbmZ0ZXN0LnB5IGZpbGVzIHdpbGwgbm90IGJl
IGxvYWRlZC4KLSAgKGFuZCBEaXJlY3RvcnkgY29sbGVjdG9ycyBjYW5ub3QgYmUgY3VzdG9taXpl
ZCBhbnltb3JlIGZyb20gYSBEaXJlY3RvcnkncwotICBjb25mdGVzdC5weSAtIHRoaXMgbmVlZHMg
dG8gaGFwcGVuIGF0IGxlYXN0IG9uZSBsZXZlbCB1cCkuCi0tIGludHJvZHVjZSAoY3VzdG9taXph
YmxlKSBhc3NlcnRpb24gZmFpbHVyZSByZXByZXNlbnRhdGlvbnMgYW5kIGVuaGFuY2UKLSAgb3V0
cHV0IG9uIGFzc2VydGlvbiBmYWlsdXJlcyBmb3IgY29tcGFyaXNvbnMgYW5kIG90aGVyIGNhc2Vz
IChGbG9yaXMgQnJ1eW5vb2doZSkKLS0gbm9zZS1wbHVnaW46IHBhc3MgdGhyb3VnaCB0eXBlLXNp
Z25hdHVyZSBmYWlsdXJlcyBpbiBzZXR1cC90ZWFyZG93bgotICBmdW5jdGlvbnMgaW5zdGVhZCBv
ZiBub3QgY2FsbGluZyB0aGVtIChFZCBTaW5nbGV0b24pCi0tIHJlbW92ZSBweS50ZXN0LmNvbGxl
Y3QuRGlyZWN0b3J5IChmb2xsb3dzIGZyb20gYSBtYWpvciByZWZhY3RvcmluZwotICBhbmQgc2lt
cGxpZmljYXRpb24gb2YgdGhlIGNvbGxlY3Rpb24gcHJvY2VzcykKLS0gbWFqb3JseSByZWR1Y2Ug
cHkudGVzdCBjb3JlIGNvZGUsIHNoaWZ0IGZ1bmN0aW9uL3B5dGhvbiB0ZXN0aW5nIHRvIG93biBw
bHVnaW4KLS0gZml4IGlzc3VlODggKGZpbmRpbmcgY3VzdG9tIHRlc3Qgbm9kZXMgZnJvbSBjb21t
YW5kIGxpbmUgYXJnKQotLSByZWZpbmUgJ3RtcGRpcicgY3JlYXRpb24sIHdpbGwgbm93IGNyZWF0
ZSBiYXNlbmFtZXMgYmV0dGVyIGFzc29jaWF0ZWQKLSAgd2l0aCB0ZXN0IG5hbWVzICh0aGFua3Mg
Um9ubnkpCi0tICJ4cGFzcyIgKHVuZXhwZWN0ZWQgcGFzcykgdGVzdHMgZG9uJ3QgY2F1c2UgZXhp
dGNvZGUhPTAKLS0gZml4IGlzc3VlMTMxIC8gaXNzdWU2MCAtIGltcG9ydGluZyBkb2N0ZXN0cyBp
biBfX2luaXRfXyBmaWxlcyB1c2VkIGFzIG5hbWVzcGFjZSBwYWNrYWdlcwotLSBmaXggaXNzdWU5
MyBzdGRvdXQvc3RkZXJyIGlzIGNhcHR1cmVkIHdoaWxlIGltcG9ydGluZyBjb25mdGVzdC5weQot
LSBmaXggYnVnOiB1bml0dGVzdCBjb2xsZWN0ZWQgZnVuY3Rpb25zIG5vdyBhbHNvIGNhbiBoYXZl
ICJweXRlc3RtYXJrIgotICBhcHBsaWVkIGF0IGNsYXNzL21vZHVsZSBsZXZlbAotLSBhZGQgYWJp
bGl0eSB0byB1c2UgImNsYXNzIiBsZXZlbCBmb3IgY2FjaGVkX3NldHVwIGhlbHBlcgotLSBmaXgg
c3RyYW5nZW5lc3M6IG1hcmsuKiBvYmplY3RzIGFyZSBub3cgaW1tdXRhYmxlLCBjcmVhdGUgbmV3
IGluc3RhbmNlcwotCi0xLjMuNAotPT09PT0KLQotLSBmaXggaXNzdWUxMTE6IGltcHJvdmUgaW5z
dGFsbCBkb2N1bWVudGF0aW9uIGZvciB3aW5kb3dzCi0tIGZpeCBpc3N1ZTExOTogZml4IGN1c3Rv
bSBjb2xsZWN0YWJpbGl0eSBvZiBfX2luaXRfXy5weSBhcyBhIG1vZHVsZQotLSBmaXggaXNzdWUx
MTY6IC0tZG9jdGVzdG1vZHVsZXMgd29yayB3aXRoIF9faW5pdF9fLnB5IGZpbGVzIGFzIHdlbGwK
LS0gZml4IGlzc3VlMTE1OiB1bmlmeSBpbnRlcm5hbCBleGNlcHRpb24gcGFzc3Rocm91Z2gvY2F0
Y2hpbmcvR2VuZXJhdG9yRXhpdAotLSBmaXggaXNzdWUxMTg6IG5ldyAtLXRiPW5hdGl2ZSBmb3Ig
cHJlc2VudGluZyBjcHl0aG9uLXN0YW5kYXJkIGV4Y2VwdGlvbnMKLQotMS4zLjMKLT09PT09Ci0K
LS0gZml4IGlzc3VlMTEzOiBhc3NlcnRpb24gcmVwcmVzZW50YXRpb24gcHJvYmxlbSB3aXRoIHRy
aXBsZS1xdW90ZWQgc3RyaW5ncwotICAoYW5kIHBvc3NpYmx5IG90aGVyIGNhc2VzKQotLSBtYWtl
IGNvbmZ0ZXN0IGxvYWRpbmcgZGV0ZWN0IHRoYXQgYSBjb25mdGVzdCBmaWxlIHdpdGggdGhlIHNh
bWUKLSAgY29udGVudCB3YXMgYWxyZWFkeSBsb2FkZWQsIGF2b2lkcyBzdXJwcmlzZXMgaW4gbmVz
dGVkIGRpcmVjdG9yeSBzdHJ1Y3R1cmVzCi0gIHdoaWNoIGNhbiBiZSBwcm9kdWNlZCBlLmcuIGJ5
IEh1ZHNvbi4gSXQgcHJvYmFibHkgcmVtb3ZlcyB0aGUgbmVlZCB0byB1c2UKLSAgLS1jb25mY3V0
ZGlyIGluIG1vc3QgY2FzZXMuCi0tIGZpeCB0ZXJtaW5hbCBjb2xvcmluZyBmb3Igd2luMzIKLSAg
KHRoYW5rcyBNaWNoYWVsIEZvb3JkIGZvciByZXBvcnRpbmcpCi0tIGZpeCB3ZWlyZG5lc3M6IG1h
a2UgdGVybWluYWwgd2lkdGggZGV0ZWN0aW9uIHdvcmsgb24gc3Rkb3V0IGluc3RlYWQgb2Ygc3Rk
aW4KLSAgKHRoYW5rcyBBcm1pbiBSb25hY2hlciBmb3IgcmVwb3J0aW5nKQotLSByZW1vdmUgdHJh
aWxpbmcgd2hpdGVzcGFjZSBpbiBhbGwgcHkvdGV4dCBkaXN0cmlidXRpb24gZmlsZXMKLQotMS4z
LjIKLT09PT09Ci0KLSoqTmV3IGZlYXR1cmVzKioKLQotLSBmaXggaXNzdWUxMDM6ICBpbnRyb2R1
Y2UgcHkudGVzdC5yYWlzZXMgYXMgY29udGV4dCBtYW5hZ2VyLCBleGFtcGxlczo6Ci0KLSAgICB3
aXRoIHB5LnRlc3QucmFpc2VzKFplcm9EaXZpc2lvbkVycm9yKToKLSAgICAgICAgeCA9IDAKLSAg
ICAgICAgMSAvIHgKLQotICAgIHdpdGggcHkudGVzdC5yYWlzZXMoUnVudGltZUVycm9yKSBhcyBl
eGNpbmZvOgotICAgICAgICBjYWxsX3NvbWV0aGluZygpCi0KLSAgICAjIHlvdSBtYXkgZG8gZXh0
cmEgY2hlY2tzIG9uIGV4Y2luZm8udmFsdWV8dHlwZXx0cmFjZWJhY2sgaGVyZQotCi0gICh0aGFu
a3MgUm9ubnkgUGZhbm5zY2htaWR0KQotCi0tIEZ1bmNhcmcgZmFjdG9yaWVzIGNhbiBub3cgZHlu
YW1pY2FsbHkgYXBwbHkgYSBtYXJrZXIgdG8gYQotICB0ZXN0IGludm9jYXRpb24uICBUaGlzIGlz
IGZvciBleGFtcGxlIHVzZWZ1bCBpZiBhIGZhY3RvcnkKLSAgcHJvdmlkZXMgcGFyYW1ldGVycyB0
byBhIHRlc3Qgd2hpY2ggYXJlIGV4cGVjdGVkLXRvLWZhaWw6OgotCi0gICAgZGVmIHB5dGVzdF9m
dW5jYXJnX19hcmcocmVxdWVzdCk6Ci0gICAgICAgIHJlcXVlc3QuYXBwbHltYXJrZXIocHkudGVz
dC5tYXJrLnhmYWlsKHJlYXNvbj0iZmxha3kgY29uZmlnIikpCi0gICAgICAgIC4uLgotCi0gICAg
ZGVmIHRlc3RfZnVuY3Rpb24oYXJnKToKLSAgICAgICAgLi4uCi0KLS0gaW1wcm92ZWQgZXJyb3Ig
cmVwb3J0aW5nIG9uIGNvbGxlY3Rpb24gYW5kIGltcG9ydCBlcnJvcnMuIFRoaXMgbWFrZXMKLSAg
dXNlIG9mIGEgbW9yZSBnZW5lcmFsIG1lY2hhbmlzbSwgbmFtZWx5IHRoYXQgZm9yIGN1c3RvbSB0
ZXN0IGl0ZW0vY29sbGVjdAotICBub2RlcyBgYG5vZGUucmVwcl9mYWlsdXJlKGV4Y2luZm8pYGAg
aXMgbm93IHVuaWZvcm1seSBjYWxsZWQgc28gdGhhdCB5b3UgY2FuCi0gIG92ZXJyaWRlIGl0IHRv
IHJldHVybiBhIHN0cmluZyBlcnJvciByZXByZXNlbnRhdGlvbiBvZiB5b3VyIGNob2ljZQotICB3
aGljaCBpcyBnb2luZyB0byBiZSByZXBvcnRlZCBhcyBhIChyZWQpIHN0cmluZy4KLQotLSBpbnRy
b2R1Y2UgJy0tanVuaXRwcmVmaXg9U1RSJyBvcHRpb24gdG8gcHJlcGVuZCBhIHByZWZpeAotICB0
byBhbGwgcmVwb3J0cyBpbiB0aGUganVuaXR4bWwgZmlsZS4KLQotKipCdWcgZml4ZXMqKgotCi0t
IG1ha2UgdGVzdHMgYW5kIHRoZSBgYHB5dGVzdF9yZWN3YXJuYGAgcGx1Z2luIGluIHBhcnRpY3Vs
YXIgZnVsbHkgY29tcGF0aWJsZQotICB0byBQeXRob24yLjcgKGlmIHlvdSB1c2UgdGhlIGBgcmVj
d2FybmBgIGZ1bmNhcmcgd2FybmluZ3Mgd2lsbCBiZSBlbmFibGVkIHNvIHRoYXQKLSAgeW91IGNh
biBwcm9wZXJseSBjaGVjayBmb3IgdGhlaXIgZXhpc3RlbmNlIGluIGEgY3Jvc3MtcHl0aG9uIG1h
bm5lcikuCi0tIHJlZmluZSAtLXBkYjogaWdub3JlIHhmYWlsZWQgdGVzdHMsIHVuaWZ5IGl0cyBU
Qi1yZXBvcnRpbmcgYW5kCi0gIGRvbid0IGRpc3BsYXkgZmFpbHVyZXMgYWdhaW4gYXQgdGhlIGVu
ZC4KLS0gZml4IGFzc2VydGlvbiBpbnRlcnByZXRhdGlvbiB3aXRoIHRoZSAqKiBvcGVyYXRvciAo
dGhhbmtzIEJlbmphbWluIFBldGVyc29uKQotLSBmaXggaXNzdWUxMDUgYXNzaWdubWVudCBvbiB0
aGUgc2FtZSBsaW5lIGFzIGEgZmFpbGluZyBhc3NlcnRpb24gKHRoYW5rcyBCZW5qYW1pbiBQZXRl
cnNvbikKLS0gZml4IGlzc3VlMTA0IHByb3BlciBlc2NhcGluZyBmb3IgdGVzdCBuYW1lcyBpbiBq
dW5pdHhtbCBwbHVnaW4gKHRoYW5rcyBhbm9ueW1vdXMpCi0tIGZpeCBpc3N1ZTU3IC1mfC0tbG9v
cG9uZmFpbCB0byB3b3JrIHdpdGggeHBhc3NpbmcgdGVzdHMgKHRoYW5rcyBSb25ueSkKLS0gZml4
IGlzc3VlOTIgY29sbGVjdG9ubHkgcmVwb3J0ZXIgYW5kIC0tcGFzdGViaW4gKHRoYW5rcyBCZW5q
YW1pbiBQZXRlcnNvbikKLS0gZml4IHB5LmNvZGUuY29tcGlsZShzb3VyY2UpIHRvIGdlbmVyYXRl
IHVuaXF1ZSBmaWxlbmFtZXMKLS0gZml4IGFzc2VydGlvbiByZS1pbnRlcnAgcHJvYmxlbXMgb24g
UHlQeSwgYnkgZGVmZXJpbmcgY29kZQotICBjb21waWxhdGlvbiB0byB0aGUgKG92ZXJyaWRhYmxl
KSBGcmFtZS5ldmFsIGNsYXNzLiAodGhhbmtzIEFtYXVyeSBGb3JnZW90KQotLSBmaXggcHkucGF0
aC5sb2NhbC5weWltcG9ydCgpIHRvIHdvcmsgd2l0aCBkaXJlY3RvcmllcwotLSBzdHJlYW1saW5l
IHB5LnBhdGgubG9jYWwubWtkdGVtcCBpbXBsZW1lbnRhdGlvbiBhbmQgdXNhZ2UKLS0gZG9uJ3Qg
cHJpbnQgZW1wdHkgbGluZXMgd2hlbiBzaG93aW5nIGp1bml0eG1sLWZpbGVuYW1lCi0tIGFkZCBv
cHRpb25hbCBib29sZWFuIGlnbm9yZV9lcnJvcnMgcGFyYW1ldGVyIHRvIHB5LnBhdGgubG9jYWwu
cmVtb3ZlCi0tIGZpeCB0ZXJtaW5hbCB3cml0aW5nIG9uIHdpbjMyL3B5dGhvbjIuNAotLSBweS5w
cm9jZXNzLmNtZGV4ZWMoKSBub3cgdHJpZXMgaGFyZGVyIHRvIHJldHVybiBwcm9wZXJseSBlbmNv
ZGVkIHVuaWNvZGUgb2JqZWN0cwotICBvbiBhbGwgcHl0aG9uIHZlcnNpb25zCi0tIGluc3RhbGwg
cGxhaW4gcHkudGVzdC9weS53aGljaCBzY3JpcHRzIGFsc28gZm9yIEp5dGhvbiwgdGhpcyBoZWxw
cyB0bwotICBnZXQgY2Fub25pY2FsIHNjcmlwdCBwYXRocyBpbiB2aXJ0dWFsZW52IHNpdHVhdGlv
bnMKLS0gbWFrZSBwYXRoLmJlc3RyZWxwYXRoKHBhdGgpIHJldHVybiAiLiIsIG5vdGUgdGhhdCB3
aGVuIGNhbGxpbmcKLSAgWC5iZXN0cmVscGF0aCB0aGUgYXNzdW1wdGlvbiBpcyB0aGF0IFggaXMg
YSBkaXJlY3RvcnkuCi0tIG1ha2UgaW5pdGlhbCBjb25mdGVzdCBkaXNjb3ZlcnkgaWdub3JlICIt
LSIgcHJlZml4ZWQgYXJndW1lbnRzCi0tIGZpeCByZXN1bHRsb2cgcGx1Z2luIHdoZW4gdXNlZCBp
biBhbiBtdWx0aWNwdS9tdWx0aWhvc3QgeGRpc3Qgc2l0dWF0aW9uCi0gICh0aGFua3MgSmFrdWIg
R3VzdGFrKQotLSBwZXJmb3JtIGRpc3RyaWJ1dGVkIHRlc3RpbmcgcmVsYXRlZCByZXBvcnRpbmcg
aW4gdGhlIHhkaXN0LXBsdWdpbgotICByYXRoZXIgdGhhbiBoYXZpbmcgZGlzdC1yZWxhdGVkIGNv
ZGUgaW4gdGhlIGdlbmVyaWMgcHkudGVzdAotICBkaXN0cmlidXRpb24KLS0gZml4IGhvbWVkaXIg
ZGV0ZWN0aW9uIG9uIFdpbmRvd3MKLS0gc2hpcCBkaXN0cmlidXRlX3NldHVwLnB5IHZlcnNpb24g
MC42LjEzCi0KLTEuMy4xCi09PT09PQotCi0qKk5ldyBmZWF0dXJlcyoqCi0KLS0gaXNzdWU5MTog
aW50cm9kdWNlIG5ldyBweS50ZXN0LnhmYWlsKHJlYXNvbikgaGVscGVyCi0gIHRvIGltcGVyYXRp
dmVseSBtYXJrIGEgdGVzdCBhcyBleHBlY3RlZCB0byBmYWlsLiBDYW4KLSAgYmUgdXNlZCBmcm9t
IHdpdGhpbiBzZXR1cCBhbmQgdGVzdCBmdW5jdGlvbnMuIFRoaXMgaXMKLSAgdXNlZnVsIGVzcGVj
aWFsbHkgZm9yIHBhcmFtZXRyaXplZCB0ZXN0cyB3aGVuIGNlcnRhaW4KLSAgY29uZmlndXJhdGlv
bnMgYXJlIGV4cGVjdGVkLXRvLWZhaWwuICBJbiB0aGlzIGNhc2UgdGhlCi0gIGRlY2xhcmF0aXZl
IGFwcHJvYWNoIHdpdGggdGhlIEBweS50ZXN0Lm1hcmsueGZhaWwgY2Fubm90Ci0gIGJlIHVzZWQg
YXMgaXQgd291bGQgbWFyayBhbGwgY29uZmlndXJhdGlvbnMgYXMgeGZhaWwuCi0KLS0gaXNzdWUx
MDI6IGludHJvZHVjZSBuZXcgLS1tYXhmYWlsPU5VTSBvcHRpb24gdG8gc3RvcAotICB0ZXN0IHJ1
bnMgYWZ0ZXIgTlVNIGZhaWx1cmVzLiAgVGhpcyBpcyBhIGdlbmVyYWxpemF0aW9uCi0gIG9mIHRo
ZSAnLXgnIG9yICctLWV4aXRmaXJzdCcgb3B0aW9uIHdoaWNoIGlzIG5vdyBlcXVpdmFsZW50Ci0g
IHRvICctLW1heGZhaWw9MScuICBCb3RoICcteCcgYW5kICctLW1heGZhaWwnIHdpbGwKLSAgbm93
IGFsc28gcHJpbnQgYSBsaW5lIG5lYXIgdGhlIGVuZCBpbmRpY2F0aW5nIHRoZSBJbnRlcnJ1cHRp
b24uCi0KLS0gaXNzdWU4OTogYWxsb3cgcHkudGVzdC5tYXJrIGRlY29yYXRvcnMgdG8gYmUgdXNl
ZCBvbiBjbGFzc2VzCi0gIChjbGFzcyBkZWNvcmF0b3JzIHdlcmUgaW50cm9kdWNlZCB3aXRoIHB5
dGhvbjIuNikgYW5kCi0gIGFsc28gYWxsb3cgdG8gaGF2ZSBtdWx0aXBsZSBtYXJrZXJzIGFwcGxp
ZWQgYXQgY2xhc3MvbW9kdWxlIGxldmVsCi0gIGJ5IHNwZWNpZnlpbmcgYSBsaXN0LgotCi0tIGlt
cHJvdmUgYW5kIHJlZmluZSBsZXR0ZXIgcmVwb3J0aW5nIGluIHRoZSBwcm9ncmVzcyBiYXI6Ci0g
IC4gIHBhc3MKLSAgZiAgZmFpbGVkIHRlc3QKLSAgcyAgc2tpcHBlZCB0ZXN0cyAocmVtaW5kZXI6
IHVzZSBmb3IgZGVwZW5kZW5jeS9wbGF0Zm9ybSBtaXNtYXRjaCBvbmx5KQotICB4ICB4ZmFpbGVk
IHRlc3QgKHRlc3QgdGhhdCB3YXMgZXhwZWN0ZWQgdG8gZmFpbCkKLSAgWCAgeHBhc3NlZCB0ZXN0
ICh0ZXN0IHRoYXQgd2FzIGV4cGVjdGVkIHRvIGZhaWwgYnV0IHBhc3NlZCkKLQotICBZb3UgY2Fu
IHVzZSBhbnkgY29tYmluYXRpb24gb2YgJ2ZzeFgnIHdpdGggdGhlICctcicgZXh0ZW5kZWQKLSAg
cmVwb3J0aW5nIG9wdGlvbi4gVGhlIHhmYWlsL3hwYXNzIHJlc3VsdHMgd2lsbCBzaG93IHVwIGFz
Ci0gIHNraXBwZWQgdGVzdHMgaW4gdGhlIGp1bml0eG1sIG91dHB1dCAtIHdoaWNoIGFsc28gZml4
ZXMKLSAgaXNzdWU5OS4KLQotLSBtYWtlIHB5LnRlc3QuY21kbGluZS5tYWluKCkgcmV0dXJuIHRo
ZSBleGl0c3RhdHVzIGluc3RlYWQgb2YgcmFpc2luZwotICBTeXN0ZW1FeGl0IGFuZCBhbHNvIGFs
bG93IGl0IHRvIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcy4gIFRoaXMgb2YKLSAgY291cnNlIHJl
cXVpcmVzIHRoYXQgeW91ciBhcHBsaWNhdGlvbiBhbmQgdGVzdHMgYXJlIHByb3Blcmx5IHRlYXJl
ZAotICBkb3duIGFuZCBkb24ndCBoYXZlIGdsb2JhbCBzdGF0ZS4KLQotKipCdWcgRml4ZXMqKgot
Ci0tIGltcHJvdmVkIHRyYWNlYmFjayBwcmVzZW50YXRpb246Ci0gIC0gaW1wcm92ZWQgYW5kIHVu
aWZpZWQgcmVwb3J0aW5nIGZvciAiLS10Yj1zaG9ydCIgb3B0aW9uCi0gIC0gRXJyb3JzIGR1cmlu
ZyB0ZXN0IG1vZHVsZSBpbXBvcnRzIGFyZSBtdWNoIHNob3J0ZXIsICh1c2luZyAtLXRiPXNob3J0
IHN0eWxlKQotICAtIHJhaXNlcyBzaG93cyBzaG9ydGVyIG1vcmUgcmVsZXZhbnQgdHJhY2ViYWNr
cwotICAtIC0tZnVsbHRyYWNlIG5vdyBtb3JlIHN5c3RlbWF0aWNhbGx5IG1ha2VzIHRyYWNlcyBs
b25nZXIgLyBpbmhpYml0cyBjdXR0aW5nCi0KLS0gaW1wcm92ZSBzdXBwb3J0IGZvciByYWlzZXMg
YW5kIG90aGVyIGR5bmFtaWNhbGx5IGNvbXBpbGVkIGNvZGUgYnkKLSAgbWFuaXB1bGF0aW5nIHB5
dGhvbidzIGxpbmVjYWNoZS5jYWNoZSBpbnN0ZWFkIG9mIHRoZSBwcmV2aW91cwotICByYXRoZXIg
aGFja3kgd2F5IG9mIGNyZWF0aW5nIGN1c3RvbSBjb2RlIG9iamVjdHMuICBUaGlzIG1ha2VzCi0g
IGl0IHNlZW1sZXNzbHkgd29yayBvbiBKeXRob24gYW5kIFB5UHkgd2hlcmUgaXQgcHJldmlvdXNs
eSBkaWRuJ3QuCi0KLS0gZml4IGlzc3VlOTY6IG1ha2UgY2FwdHVyaW5nIG1vcmUgcmVzaWxpZW50
IGFnYWluc3QgQ29udHJvbC1DCi0gIGludGVycnVwdGlvbnMgKGludm9sdmVkIHNvbWV3aGF0IHN1
YnN0YW50aWFsIHJlZmFjdG9yaW5nCi0gIHRvIHRoZSB1bmRlcmx5aW5nIGNhcHR1cmluZyBmdW5j
dGlvbmFsaXR5IHRvIGF2b2lkIHJhY2UKLSAgY29uZGl0aW9ucykuCi0KLS0gZml4IGNoYWluaW5n
IG9mIGNvbmRpdGlvbmFsIHNraXBpZi94ZmFpbCBkZWNvcmF0b3JzIC0gc28gaXQgd29ya3Mgbm93
Ci0gIGFzIGV4cGVjdGVkIHRvIHVzZSBtdWx0aXBsZSBAcHkudGVzdC5tYXJrLnNraXBpZihjb25k
aXRpb24pIGRlY29yYXRvcnMsCi0gIGluY2x1ZGluZyBzcGVjaWZpYyByZXBvcnRpbmcgd2hpY2gg
b2YgdGhlIGNvbmRpdGlvbnMgbGVhZCB0byBza2lwcGluZy4KLQotLSBmaXggaXNzdWU5NTogbGF0
ZS1pbXBvcnQgemxpYiBzbyB0aGF0IGl0J3Mgbm90IHJlcXVpcmVkCi0gIGZvciBnZW5lcmFsIHB5
LnRlc3Qgc3RhcnR1cC4KLQotLSBmaXggaXNzdWU5NDogbWFrZSByZXBvcnRpbmcgbW9yZSByb2J1
c3QgYWdhaW5zdCBib2d1cyBzb3VyY2UgY29kZQotICAoYW5kIGludGVybmFsbHkgYmUgbW9yZSBj
YXJlZnVsIHdoZW4gcHJlc2VudGluZyB1bmV4cGVjdGVkIGJ5dGUgc2VxdWVuY2VzKQotCi0KLTEu
My4wCi09PT09PQotCi0tIGRlcHJlY2F0ZSAtLXJlcG9ydCBvcHRpb24gaW4gZmF2b3VyIG9mIGEg
bmV3IHNob3J0ZXIgYW5kIGVhc2llciB0bwotICByZW1lbWJlciAtciBvcHRpb246IGl0IHRha2Vz
IGEgc3RyaW5nIGFyZ3VtZW50IGNvbnNpc3Rpbmcgb2YgYW55Ci0gIGNvbWJpbmF0aW9uIG9mICd4
ZnNYJyBjaGFyYWN0ZXJzLiAgVGhleSByZWxhdGUgdG8gdGhlIHNpbmdsZSBjaGFycwotICB5b3Ug
c2VlIGR1cmluZyB0aGUgZG90dGVkIHByb2dyZXNzIHByaW50aW5nIGFuZCB3aWxsIHByaW50IGFu
IGV4dHJhIGxpbmUKLSAgcGVyIHRlc3QgYXQgdGhlIGVuZCBvZiB0aGUgdGVzdCBydW4uICBUaGlz
IGV4dHJhIGxpbmUgaW5kaWNhdGVzIHRoZSBleGFjdAotICBwb3NpdGlvbiBvciB0ZXN0IElEIHRo
YXQgeW91IGRpcmVjdGx5IHBhc3RlIHRvIHRoZSBweS50ZXN0IGNtZGxpbmUgaW4gb3JkZXIKLSAg
dG8gcmUtcnVuIGEgcGFydGljdWxhciB0ZXN0LgotCi0tIGFsbG93IGV4dGVybmFsIHBsdWdpbnMg
dG8gcmVnaXN0ZXIgbmV3IGhvb2tzIHZpYSB0aGUgbmV3Ci0gIHB5dGVzdF9hZGRob29rcyhwbHVn
aW5tYW5hZ2VyKSBob29rLiAgVGhlIG5ldyByZWxlYXNlIG9mCi0gIHRoZSBweXRlc3QteGRpc3Qg
cGx1Z2luIGZvciBkaXN0cmlidXRlZCBhbmQgbG9vcG9uZmFpbGluZwotICB0ZXN0aW5nIHJlcXVp
cmVzIHRoaXMgZmVhdHVyZS4KLQotLSBhZGQgYSBuZXcgcHl0ZXN0X2lnbm9yZV9jb2xsZWN0KHBh
dGgsIGNvbmZpZykgaG9vayB0byBhbGxvdyBwcm9qZWN0cyBhbmQKLSAgcGx1Z2lucyB0byBkZWZp
bmUgZXhjbHVzaW9uIGJlaGF2aW91ciBmb3IgdGhlaXIgZGlyZWN0b3J5IHN0cnVjdHVyZSAtCi0g
IGZvciBleGFtcGxlIHlvdSBtYXkgZGVmaW5lIGluIGEgY29uZnRlc3QucHkgdGhpcyBtZXRob2Q6
OgotCi0gICAgICAgIGRlZiBweXRlc3RfaWdub3JlX2NvbGxlY3QocGF0aCk6Ci0gICAgICAgICAg
ICByZXR1cm4gcGF0aC5jaGVjayhsaW5rPTEpCi0KLSAgdG8gcHJldmVudCBldmVuIGEgY29sbGVj
dGlvbiB0cnkgb2YgYW55IHRlc3RzIGluIHN5bWxpbmtlZCBkaXJzLgotCi0tIG5ldyBweXRlc3Rf
cHljb2xsZWN0X21ha2Vtb2R1bGUocGF0aCwgcGFyZW50KSBob29rIGZvcgotICBhbGxvd2luZyBj
dXN0b21pemF0aW9uIG9mIHRoZSBNb2R1bGUgY29sbGVjdGlvbiBvYmplY3QgZm9yIGEKLSAgbWF0
Y2hpbmcgdGVzdCBtb2R1bGUuCi0KLS0gZXh0ZW5kIGFuZCByZWZpbmUgeGZhaWwgbWVjaGFuaXNt
OgotICBgYEBweS50ZXN0Lm1hcmsueGZhaWwocnVuPUZhbHNlKWBgIGRvIG5vdCBydW4gdGhlIGRl
Y29yYXRlZCB0ZXN0Ci0gIGBgQHB5LnRlc3QubWFyay54ZmFpbChyZWFzb249Ii4uLiIpYGAgcHJp
bnRzIHRoZSByZWFzb24gc3RyaW5nIGluIHhmYWlsIHN1bW1hcmllcwotICBzcGVjaWZpeWluZyBg
YC0tcnVueGZhaWxgYCBvbiBjb21tYW5kIGxpbmUgdmlydHVhbGx5IGlnbm9yZXMgeGZhaWwgbWFy
a2VycwotCi0tIGV4cG9zZSAocHJldmlvdXNseSBpbnRlcm5hbCkgY29tbW9ubHkgdXNlZnVsIG1l
dGhvZHM6Ci0gIHB5LmlvLmdldF90ZXJtaW5hbF93aXRoKCkgLT4gcmV0dXJuIHRlcm1pbmFsIHdp
ZHRoCi0gIHB5LmlvLmFuc2lfcHJpbnQoLi4uKSAtPiBwcmludCBjb2xvcmVkL2JvbGQgdGV4dCBv
biBsaW51eC93aW4zMgotICBweS5pby5zYWZlcmVwcihvYmopIC0+IHJldHVybiBsaW1pdGVkIHJl
cHJlc2VudGF0aW9uIHN0cmluZwotCi0tIGV4cG9zZSB0ZXN0IG91dGNvbWUgcmVsYXRlZCBleGNl
cHRpb25zIGFzIHB5LnRlc3Quc2tpcC5FeGNlcHRpb24sCi0gIHB5LnRlc3QucmFpc2VzLkV4Y2Vw
dGlvbiBldGMuLCB1c2VmdWwgbW9zdGx5IGZvciBwbHVnaW5zCi0gIGRvaW5nIHNwZWNpYWwgb3V0
Y29tZSBpbnRlcnByZXRhdGlvbi90d2Vha2luZwotCi0tIChpc3N1ZTg1KSBmaXgganVuaXR4bWwg
cGx1Z2luIHRvIGhhbmRsZSB0ZXN0cyB3aXRoIG5vbi1hc2NpaSBvdXRwdXQKLQotLSBmaXgvcmVm
aW5lIHB5dGhvbjMgY29tcGF0aWJpbGl0eSAodGhhbmtzIEJlbmphbWluIFBldGVyc29uKQotCi0t
IGZpeGVzIGZvciBtYWtpbmcgdGhlIGp5dGhvbi93aW4zMiBjb21iaW5hdGlvbiB3b3JrLCBub3Rl
IGhvd2V2ZXI6Ci0gIGp5dGhvbjIuNS4xL3dpbjMyIGRvZXMgbm90IHByb3ZpZGUgYSBjb21tYW5k
IGxpbmUgbGF1bmNoZXIsIHNlZQotICBodHRwOi8vYnVncy5qeXRob24ub3JnL2lzc3VlMTQ5MSAu
IFNlZSBweWxpYiBpbnN0YWxsIGRvY3VtZW50YXRpb24KLSAgZm9yIGhvdyB0byB3b3JrIGFyb3Vu
ZC4KLQotLSBmaXhlcyBmb3IgaGFuZGxpbmcgb2YgdW5pY29kZSBleGNlcHRpb24gdmFsdWVzIGFu
ZCB1bnByaW50YWJsZSBvYmplY3RzCi0KLS0gKGlzc3VlODcpIGZpeCB1bmJvdW5kbG9jYWwgZXJy
b3IgaW4gYXNzZXJ0aW9ub2xkIGNvZGUKLQotLSAoaXNzdWU4NikgaW1wcm92ZSBkb2N1bWVudGF0
aW9uIGZvciBsb29wb25mYWlsaW5nCi0KLS0gcmVmaW5lIElPIGNhcHR1cmluZzogc3RkaW4tcmVk
aXJlY3QgcHNldWRvLWZpbGUgbm93IGhhcyBhIE5PUCBjbG9zZSgpIG1ldGhvZAotCi0tIHNoaXAg
ZGlzdHJpYnV0ZV9zZXR1cC5weSB2ZXJzaW9uIDAuNi4xMAotCi0tIGFkZGVkIGxpbmtzIHRvIHRo
ZSBuZXcgY2FwdHVyZWxvZyBhbmQgY292ZXJhZ2UgcGx1Z2lucwotCi0KLTEuMi4wCi09PT09PQot
Ci0tIHJlZmluZWQgdXNhZ2UgYW5kIG9wdGlvbnMgZm9yICJweS5jbGVhbnVwIjo6Ci0KLSAgICBw
eS5jbGVhbnVwICAgICAjIHJlbW92ZSAiKi5weWMiIGFuZCAiKiRweS5jbGFzcyIgKGp5dGhvbikg
ZmlsZXMKLSAgICBweS5jbGVhbnVwIC1lIC5zd3AgLWUgLmNhY2hlICMgYWxzbyByZW1vdmUgZmls
ZXMgd2l0aCB0aGVzZSBleHRlbnNpb25zCi0gICAgcHkuY2xlYW51cCAtcyAgIyByZW1vdmUgImJ1
aWxkIiBhbmQgImRpc3QiIGRpcmVjdG9yeSBuZXh0IHRvIHNldHVwLnB5IGZpbGVzCi0gICAgcHku
Y2xlYW51cCAtZCAgIyBhbHNvIHJlbW92ZSBlbXB0eSBkaXJlY3RvcmllcwotICAgIHB5LmNsZWFu
dXAgLWEgICMgc3lub255bSBmb3IgIi1zIC1kIC1lICdwaXAtbG9nLnR4dCciCi0gICAgcHkuY2xl
YW51cCAtbiAgIyBkcnkgcnVuLCBvbmx5IHNob3cgd2hhdCB3b3VsZCBiZSByZW1vdmVkCi0KLS0g
YWRkIGEgbmV3IG9wdGlvbiAicHkudGVzdCAtLWZ1bmNhcmdzIiB3aGljaCBzaG93cyBhdmFpbGFi
bGUgZnVuY2FyZ3MKLSAgYW5kIHRoZWlyIGhlbHAgc3RyaW5ncyAoZG9jc3RyaW5ncyBvbiB0aGVp
ciByZXNwZWN0aXZlIGZhY3RvcnkgZnVuY3Rpb24pCi0gIGZvciBhIGdpdmVuIHRlc3QgcGF0aAot
Ci0tIGRpc3BsYXkgYSBzaG9ydCBhbmQgY29uY2lzZSB0cmFjZWJhY2sgaWYgYSBmdW5jYXJnIGxv
b2t1cCBmYWlscwotCi0tIGVhcmx5LWxvYWQgImNvbmZ0ZXN0LnB5IiBmaWxlcyBpbiBub24tZG90
IGZpcnN0LWxldmVsIHN1YiBkaXJlY3Rvcmllcy4KLSAgYWxsb3dzIHRvIGNvbnZlbmllbnRseSBr
ZWVwIGFuZCBhY2Nlc3MgdGVzdC1yZWxhdGVkIG9wdGlvbnMgaW4gYSBgYHRlc3RgYAotICBzdWJk
aXIgYW5kIHN0aWxsIGFkZCBjb21tYW5kIGxpbmUgb3B0aW9ucy4KLQotLSBmaXggaXNzdWU2Nzog
bmV3IHN1cGVyLXNob3J0IHRyYWNlYmFjay1wcmludGluZyBvcHRpb246ICItLXRiPWxpbmUiIHdp
bGwgcHJpbnQgYSBzaW5nbGUgbGluZSBmb3IgZWFjaCBmYWlsaW5nIChweXRob24pIHRlc3QgaW5k
aWNhdGluZyBpdHMgZmlsZW5hbWUsIGxpbmVubyBhbmQgdGhlIGZhaWx1cmUgdmFsdWUKLQotLSBm
aXggaXNzdWU3ODogYWx3YXlzIGNhbGwgcHl0aG9uLWxldmVsIHRlYXJkb3duIGZ1bmN0aW9ucyBl
dmVuIGlmIHRoZQotICBhY2NvcmRpbmcgc2V0dXAgZmFpbGVkLiAgVGhpcyBpbmNsdWRlcyByZWZp
bmVtZW50cyBmb3IgY2FsbGluZyBzZXR1cF9tb2R1bGUvY2xhc3MgZnVuY3Rpb25zCi0gIHdoaWNo
IHdpbGwgbm93IG9ubHkgYmUgY2FsbGVkIG9uY2UgaW5zdGVhZCBvZiB0aGUgcHJldmlvdXMgYmVo
YXZpb3VyIHdoZXJlIHRoZXknZCBiZSBjYWxsZWQKLSAgbXVsdGlwbGUgdGltZXMgaWYgdGhleSBy
YWlzZSBhbiBleGNlcHRpb24gKGluY2x1ZGluZyBhIFNraXBwZWQgZXhjZXB0aW9uKS4gIEFueSBl
eGNlcHRpb24KLSAgd2lsbCBiZSByZS1jb3JkZWQgYW5kIGFzc29jaWF0ZWQgd2l0aCBhbGwgdGVz
dHMgaW4gdGhlIGFjY29yZGluZyBtb2R1bGUvY2xhc3Mgc2NvcGUuCi0KLS0gZml4IGlzc3VlNjM6
IGFzc3VtZSA8NDAgY29sdW1ucyB0byBiZSBhIGJvZ3VzIHRlcm1pbmFsIHdpZHRoLCBkZWZhdWx0
IHRvIDgwCi0KLS0gZml4IHBkYiBkZWJ1Z2dpbmcgdG8gYmUgaW4gdGhlIGNvcnJlY3QgZnJhbWUg
b24gcmFpc2VzLXJlbGF0ZWQgZXJyb3JzCi0KLS0gdXBkYXRlIGFwaXBrZy5weSB0byBmaXggYW4g
aXNzdWUgd2hlcmUgcmVjdXJzaXZlIGltcG9ydHMgbWlnaHQKLSAgdW5uZWNlc3NhcmlseSBicmVh
ayBpbXBvcnRpbmcKLQotLSBmaXggcGx1Z2luIGxpbmtzCi0KLTEuMS4xCi09PT09PQotCi0tIG1v
dmVkIGRpc3QvbG9vcG9uZmFpbGluZyBmcm9tIHB5LnRlc3QgY29yZSBpbnRvIGEgbmV3Ci0gIHNl
cGFyYXRlbHkgcmVsZWFzZWQgcHl0ZXN0LXhkaXN0IHBsdWdpbi4KLQotLSBuZXcganVuaXR4bWwg
cGx1Z2luOiAtLWp1bml0eG1sPXBhdGggd2lsbCBnZW5lcmF0ZSBhIGp1bml0IHN0eWxlIHhtbCBm
aWxlCi0gIHdoaWNoIGlzIHByb2Nlc3NhYmxlIGUuZy4gYnkgdGhlIEh1ZHNvbiBDSSBzeXN0ZW0u
Ci0KLS0gbmV3IG9wdGlvbjogLS1nZW5zY3JpcHQ9cGF0aCB3aWxsIGdlbmVyYXRlIGEgc3RhbmRh
bG9uZSBweS50ZXN0IHNjcmlwdAotICB3aGljaCB3aWxsIG5vdCBuZWVkIGFueSBsaWJyYXJpZXMg
aW5zdGFsbGVkLiAgdGhhbmtzIHRvIFJhbGYgU2NobWl0dC4KLQotLSBuZXcgb3B0aW9uOiAtLWln
bm9yZSB3aWxsIHByZXZlbnQgc3BlY2lmaWVkIHBhdGggZnJvbSBjb2xsZWN0aW9uLgotICBDYW4g
YmUgc3BlY2lmaWVkIG11bHRpcGxlIHRpbWVzLgotCi0tIG5ldyBvcHRpb246IC0tY29uZmN1dGRp
cj1kaXIgd2lsbCBtYWtlIHB5LnRlc3Qgb25seSBjb25zaWRlciBjb25mdGVzdAotICBmaWxlcyB0
aGF0IGFyZSByZWxhdGl2ZSB0byB0aGUgc3BlY2lmaWVkIGRpci4KLQotLSBuZXcgZnVuY2FyZzog
InB5dGVzdGNvbmZpZyIgaXMgdGhlIHB5dGVzdCBjb25maWcgb2JqZWN0IGZvciBhY2Nlc3MKLSAg
dG8gY29tbWFuZCBsaW5lIGFyZ3MgYW5kIGNhbiBub3cgYmUgZWFzaWx5IHVzZWQgaW4gYSB0ZXN0
LgotCi0tIGluc3RhbGwgYGBweS50ZXN0YGAgYW5kIGBgcHkud2hpY2hgYCB3aXRoIGEgYGAtJFZF
UlNJT05gYCBzdWZmaXggdG8KLSAgZGlzYW1iaWd1YXRlIGJldHdlZW4gUHl0aG9uMywgcHl0aG9u
Mi5YLCBKeXRob24gYW5kIFB5UHkgaW5zdGFsbGVkIHZlcnNpb25zLgotCi0tIG5ldyAicHl0ZXN0
Y29uZmlnIiBmdW5jYXJnIGFsbG93cyBhY2Nlc3MgdG8gdGVzdCBjb25maWcgb2JqZWN0Ci0KLS0g
bmV3ICJweXRlc3RfcmVwb3J0X2hlYWRlciIgaG9vayBjYW4gcmV0dXJuIGFkZGl0aW9uYWwgbGlu
ZXMKLSAgdG8gYmUgZGlzcGxheWVkIGF0IHRoZSBoZWFkZXIgb2YgYSB0ZXN0IHJ1bi4KLQotLSAo
ZXhwZXJpbWVudGFsKSBhbGxvdyAicHkudGVzdCBwYXRoOjpuYW1lMTo6bmFtZTI6Oi4uLiIgZm9y
IHBvaW50aW5nCi0gIHRvIGEgdGVzdCB3aXRoaW4gYSB0ZXN0IGNvbGxlY3Rpb24gZGlyZWN0bHku
ICBUaGlzIG1pZ2h0IGV2ZW50dWFsbHkKLSAgZXZvbHZlIGFzIGEgZnVsbCBzdWJzdGl0dXRlIHRv
ICItayIgc3BlY2lmaWNhdGlvbnMuCi0KLS0gc3RyZWFtbGluZWQgcGx1Z2luIGxvYWRpbmc6IG9y
ZGVyIGlzIG5vdyBhcyBkb2N1bWVudGVkIGluCi0gIGN1c3RvbWl6ZS5odG1sOiBzZXR1cHRvb2xz
LCBFTlYsIGNvbW1hbmRsaW5lLCBjb25mdGVzdC4KLSAgYWxzbyBzZXR1cHRvb2xzIGVudHJ5IHBv
aW50IG5hbWVzIGFyZSB0dXJuZWQgdG8gY2Fub25pY2FsIG5hbWVlcyAoInB5dGVzdF8qIikKLQot
LSBhdXRvbWF0aWNhbGx5IHNraXAgdGVzdHMgdGhhdCBuZWVkICdjYXBmZCcgYnV0IGhhdmUgbm8g
b3MuZHVwCi0KLS0gYWxsb3cgcHl0ZXN0X2dlbmVyYXRlX3Rlc3RzIHRvIGJlIGRlZmluZWQgaW4g
Y2xhc3NlcyBhcyB3ZWxsCi0KLS0gZGVwcmVjYXRlIHVzYWdlIG9mICdkaXNhYmxlZCcgYXR0cmli
dXRlIGluIGZhdm91ciBvZiBweXRlc3RtYXJrCi0tIGRlcHJlY2F0ZSBkZWZpbml0aW9uIG9mIERp
cmVjdG9yeSwgTW9kdWxlLCBDbGFzcyBhbmQgRnVuY3Rpb24gbm9kZXMKLSAgaW4gY29uZnRlc3Qu
cHkgZmlsZXMuICBVc2UgcHl0ZXN0IGNvbGxlY3QgaG9va3MgaW5zdGVhZC4KLQotLSBjb2xsZWN0
aW9uL2l0ZW0gbm9kZSBzcGVjaWZpYyBydW50ZXN0L2NvbGxlY3QgaG9va3MgYXJlIG9ubHkgY2Fs
bGVkIGV4YWN0bHkKLSAgb24gbWF0Y2hpbmcgY29uZnRlc3QucHkgZmlsZXMsIGkuZS4gb25lcyB3
aGljaCBhcmUgZXhhY3RseSBiZWxvdwotICB0aGUgZmlsZXN5c3RlbSBwYXRoIG9mIGFuIGl0ZW0K
LQotLSBjaGFuZ2U6IHRoZSBmaXJzdCBweXRlc3RfY29sbGVjdF9kaXJlY3RvcnkgaG9vayB0byBy
ZXR1cm4gc29tZXRoaW5nCi0gIHdpbGwgbm93IHByZXZlbnQgZnVydGhlciBob29rcyB0byBiZSBj
YWxsZWQuCi0KLS0gY2hhbmdlOiBmaWdsZWFmIHBsdWdpbiBub3cgcmVxdWlyZXMgLS1maWdsZWFm
IHRvIHJ1bi4gIEFsc28KLSAgY2hhbmdlIGl0cyBsb25nIGNvbW1hbmQgbGluZSBvcHRpb25zIHRv
IGJlIGEgYml0IHNob3J0ZXIgKHNlZSBweS50ZXN0IC1oKS4KLQotLSBjaGFuZ2U6IHB5dGVzdCBk
b2N0ZXN0IHBsdWdpbiBpcyBub3cgZW5hYmxlZCBieSBkZWZhdWx0IGFuZCBoYXMgYQotICBuZXcg
b3B0aW9uIC0tZG9jdGVzdC1nbG9iIHRvIHNldCBhIHBhdHRlcm4gZm9yIGZpbGUgbWF0Y2hlcy4K
LQotLSBjaGFuZ2U6IHJlbW92ZSBpbnRlcm5hbCBweS5fKiBoZWxwZXIgdmFycywgb25seSBrZWVw
IHB5Ll9weWRpcgotCi0tIHJvYnVzdGlmeSBjYXB0dXJpbmcgdG8gc3Vydml2ZSBpZiBjdXN0b20g
cHl0ZXN0X3J1bnRlc3Rfc2V0dXAKLSAgY29kZSBmYWlsZWQgYW5kIHByZXZlbnRlZCB0aGUgY2Fw
dHVyaW5nIHNldHVwIGNvZGUgZnJvbSBydW5uaW5nLgotCi0tIG1ha2UgcHkudGVzdC4qIGhlbHBl
cnMgcHJvdmlkZWQgYnkgZGVmYXVsdCBwbHVnaW5zIHZpc2libGUgZWFybHkgLQotICB3b3JrcyB0
cmFuc3BhcmVudGx5IGJvdGggZm9yIHB5ZG9jIGFuZCBmb3IgaW50ZXJhY3RpdmUgc2Vzc2lvbnMK
LSAgd2hpY2ggd2lsbCByZWd1bGFybHkgc2VlIGUuZy4gcHkudGVzdC5tYXJrIGFuZCBweS50ZXN0
LmltcG9ydG9yc2tpcC4KLQotLSBzaW1wbGlmeSBpbnRlcm5hbCBwbHVnaW4gbWFuYWdlciBtYWNo
aW5lcnkKLS0gc2ltcGxpZnkgaW50ZXJuYWwgY29sbGVjdGlvbiB0cmVlIGJ5IGludHJvZHVjaW5n
IGEgUm9vdENvbGxlY3RvciBub2RlCi0KLS0gZml4IGFzc2VydCByZWludGVycHJlYXRpb24gdGhh
dCBzZWVzIGEgY2FsbCBjb250YWluaW5nICJrZXl3b3JkPS4uLiIKLQotLSBmaXggaXNzdWU2Njog
aW52b2tlIHB5dGVzdF9zZXNzaW9uc3RhcnQgYW5kIHB5dGVzdF9zZXNzaW9uZmluaXNoCi0gIGhv
b2tzIG9uIHNsYXZlcyBkdXJpbmcgZGlzdC10ZXN0aW5nLCByZXBvcnQgbW9kdWxlL3Nlc3Npb24g
dGVhcmRvd24KLSAgaG9va3MgY29ycmVjdGx5LgotCi0tIGZpeCBpc3N1ZTY1OiBwcm9wZXJseSBo
YW5kbGUgZGlzdC10ZXN0aW5nIGlmIG5vCi0gIGV4ZWNuZXQvcHkgbGliIGluc3RhbGxlZCByZW1v
dGVseS4KLQotLSBza2lwIHNvbWUgaW5zdGFsbC10ZXN0cyBpZiBubyBleGVjbmV0IGlzIGF2YWls
YWJsZQotCi0tIGZpeCBkb2NzLCBmaXggaW50ZXJuYWwgYmluLyBzY3JpcHQgZ2VuZXJhdGlvbgot
Ci0KLTEuMS4wCi09PT09PQotCi0tIGludHJvZHVjZSBhdXRvbWF0aWMgcGx1Z2luIHJlZ2lzdHJh
dGlvbiB2aWEgJ3B5dGVzdDExJwotICBlbnRyeXBvaW50cyB2aWEgc2V0dXB0b29scycgcGtnX3Jl
c291cmNlcy5pdGVyX2VudHJ5X3BvaW50cwotCi0tIGZpeCBweS50ZXN0IGRpc3QtdGVzdGluZyB0
byB3b3JrIHdpdGggZXhlY25ldCA+PSAxLjAuMGI0Ci0KLS0gcmUtaW50cm9kdWNlIHB5LnRlc3Qu
Y21kbGluZS5tYWluKCkgZm9yIGJldHRlciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5Ci0KLS0gc3Zu
IHBhdGhzOiBmaXggYSBidWcgd2l0aCBwYXRoLmNoZWNrKHZlcnNpb25lZD1UcnVlKSBmb3Igc3Zu
IHBhdGhzLAotICBhbGxvdyAnJScgaW4gc3ZuIHBhdGhzLCBtYWtlIHN2bndjLnVwZGF0ZSgpIGRl
ZmF1bHQgdG8gaW50ZXJhY3RpdmUgbW9kZQotICBsaWtlIGluIDEuMC54IGFuZCBhZGQgc3Zud2Mu
dXBkYXRlKGludGVyYWN0aXZlPUZhbHNlKSB0byBpbmhpYml0IGludGVyYWN0aW9uLgotCi0tIHJl
ZmluZSBkaXN0cmlidXRlZCB0YXJiYWxsIHRvIGNvbnRhaW4gdGVzdCBhbmQgbm8gcHljIGZpbGVz
Ci0KLS0gdHJ5IGhhcmRlciB0byBoYXZlIGRlcHJlY2F0aW9uIHdhcm5pbmdzIGZvciBweS5jb21w
YXQuKiBhY2Nlc3NlcwotICByZXBvcnQgYSBjb3JyZWN0IGxvY2F0aW9uCi0KLTEuMC4zCi09PT09
PQotCi0qIGFkanVzdCBhbmQgaW1wcm92ZSBkb2NzCi0KLSogcmVtb3ZlIHB5LnJlc3QgdG9vbCBh
bmQgaW50ZXJuYWwgbmFtZXNwYWNlIC0gaXQgd2FzCi0gIG5ldmVyIHJlYWxseSBhZHZlcnRpc2Vk
IGFuZCBjYW4gc3RpbGwgYmUgdXNlZCB3aXRoCi0gIHRoZSBvbGQgcmVsZWFzZSBpZiBuZWVkZWQu
ICBJZiB0aGVyZSBpcyBpbnRlcmVzdAotICBpdCBjb3VsZCBiZSByZXZpdmVkIGludG8gaXRzIG93
biB0b29sIGkgZ3Vlc3MuCi0KLSogZml4IGlzc3VlNDggYW5kIGlzc3VlNTk6IHJhaXNlIGFuIEVy
cm9yIGlmIHRoZSBtb2R1bGUKLSAgZnJvbSBhbiBpbXBvcnRlZCB0ZXN0IGZpbGUgZG9lcyBub3Qg
c2VlbSB0byBjb21lIGZyb20KLSAgdGhlIGZpbGVwYXRoIC0gYXZvaWRzICJzYW1lLW5hbWUiIGNv
bmZ1c2lvbiB0aGF0IGhhcwotICBiZWVuIHJlcG9ydGVkIHJlcGVhdGVkbHkKLQotKiBtZXJnZWQg
Um9ubnkncyBub3NlLWNvbXBhdGliaWxpdHkgaGFja3M6IG5vdwotICBub3NlLXN0eWxlIHNldHVw
X21vZHVsZSgpIGFuZCBzZXR1cCgpIGZ1bmN0aW9ucyBhcmUKLSAgc3VwcG9ydGVkCi0KLSogaW50
cm9kdWNlIGdlbmVyYWxpemVkIHB5LnRlc3QubWFyayBmdW5jdGlvbiBtYXJraW5nCi0KLSogcmVz
aHVmZmxlIC8gcmVmaW5lIGNvbW1hbmQgbGluZSBncm91cGluZwotCi0qIGRlcHJlY2F0ZSBwYXJz
ZXIuYWRkZ3JvdXAgaW4gZmF2b3VyIG9mIGdldGdyb3VwIHdoaWNoIGNyZWF0ZXMgb3B0aW9uIGdy
b3VwCi0KLSogYWRkIC0tcmVwb3J0IGNvbW1hbmQgbGluZSBvcHRpb24gdGhhdCBhbGxvd3MgdG8g
Y29udHJvbCBzaG93aW5nIG9mIHNraXBwZWQveGZhaWxlZCBzZWN0aW9ucwotCi0qIGdlbmVyYWxp
emVkIHNraXBwaW5nOiBhIG5ldyB3YXkgdG8gbWFyayBweXRob24gZnVuY3Rpb25zIHdpdGggc2tp
cGlmIG9yIHhmYWlsCi0gIGF0IGZ1bmN0aW9uLCBjbGFzcyBhbmQgbW9kdWxlcyBsZXZlbCBiYXNl
ZCBvbiBwbGF0Zm9ybSBvciBzeXMtbW9kdWxlIGF0dHJpYnV0ZXMuCi0KLSogZXh0ZW5kIHB5LnRl
c3QubWFyayBkZWNvcmF0b3IgdG8gYWxsb3cgZm9yIHBvc2l0aW9uYWwgYXJncwotCi0qIGludHJv
ZHVjZSBhbmQgdGVzdCAicHkuY2xlYW51cCAtZCIgdG8gcmVtb3ZlIGVtcHR5IGRpcmVjdG9yaWVz
Ci0KLSogZml4IGlzc3VlICM1OSAtIHJvYnVzdGlmeSB1bml0dGVzdCB0ZXN0IGNvbGxlY3Rpb24K
LQotKiBtYWtlIGJweXRob24vaGVscCBpbnRlcmFjdGlvbiB3b3JrIGJ5IGFkZGluZyBhbiBfX2Fs
bF9fIGF0dHJpYnV0ZQotICB0byBBcGlNb2R1bGUsIGNsZWFudXAgaW5pdHBrZwotCi0qIHVzZSBN
SVQgbGljZW5zZSBmb3IgcHlsaWIsIGFkZCBzb21lIGNvbnRyaWJ1dG9ycwotCi0qIHJlbW92ZSBw
eS5leGVjbmV0IGNvZGUgYW5kIHN1YnN0aXR1dGUgYWxsIHVzYWdlcyB3aXRoICdleGVjbmV0JyBw
cm9wZXIKLQotKiBmaXggaXNzdWU1MCAtIGNhY2hlZF9zZXR1cCBub3cgY2FjaGVzIG1vcmUgdG8g
ZXhwZWN0YXRpb25zCi0gIGZvciB0ZXN0IGZ1bmN0aW9ucyB3aXRoIG11bHRpcGxlIGFyZ3VtZW50
cy4KLQotKiBtZXJnZSBKYXJrbydzIGZpeGVzLCBpc3N1ZSAjNDUgYW5kICM0NgotCi0qIGFkZCB0
aGUgYWJpbGl0eSB0byBzcGVjaWZ5IGEgcGF0aCBmb3IgcHkubG9va3VwIHRvIHNlYXJjaCBpbgot
Ci0qIGZpeCBhIGZ1bmNhcmcgY2FjaGVkX3NldHVwIGJ1ZyBwcm9iYWJseSBvbmx5IG9jY3VyaW5n
Ci0gIGluIGRpc3RyaWJ1dGVkIHRlc3RpbmcgYW5kICJtb2R1bGUiIHNjb3BlIHdpdGggdGVhcmRv
d24uCi0KLSogbWFueSBmaXhlcyBhbmQgY2hhbmdlcyBmb3IgbWFraW5nIHRoZSBjb2RlIGJhc2Ug
cHl0aG9uMyBjb21wYXRpYmxlLAotICBtYW55IHRoYW5rcyB0byBCZW5qYW1pbiBQZXRlcnNvbiBm
b3IgaGVscGluZyB3aXRoIHRoaXMuCi0KLSogY29uc29saWRhdGUgYnVpbHRpbnMgaW1wbGVtZW50
YXRpb24gdG8gYmUgY29tcGF0aWJsZSB3aXRoID49Mi4zLAotICBhZGQgaGVscGVycyB0byBlYXNl
IGtlZXBpbmcgMiBhbmQgM2sgY29tcGF0aWJsZSBjb2RlCi0KLSogZGVwcmVjYXRlIHB5LmNvbXBh
dC5kb2N0ZXN0fHN1YnByb2Nlc3N8dGV4dHdyYXB8b3B0cGFyc2UKLQotKiBkZXByZWNhdGUgcHku
bWFnaWMuYXV0b3BhdGgsIHJlbW92ZSBweS9tYWdpYyBkaXJlY3RvcnkKLQotKiBtb3ZlIHB5dGVz
dCBhc3NlcnRpb24gaGFuZGxpbmcgdG8gcHkvY29kZSBhbmQgYSBweXRlc3RfYXNzZXJ0aW9uCi0g
IHBsdWdpbiwgYWRkICItLW5vLWFzc2VydCIgb3B0aW9uLCBkZXByZWNhdGUgcHkubWFnaWMgbmFt
ZXNwYWNlcwotICBpbiBmYXZvdXIgb2YgKGxlc3MpIHB5LmNvZGUgb25lcy4KLQotKiBjb25zb2xp
ZGF0ZSBhbmQgY2xlYW51cCBweS9jb2RlIGNsYXNzZXMgYW5kIGZpbGVzCi0KLSogY2xlYW51cCBw
eS9taXNjLCBtb3ZlIHRlc3RzIHRvIGJpbi1mb3ItZGlzdAotCi0qIGludHJvZHVjZSBkZWxhdHRy
L2RlbGl0ZW0vZGVsZW52IG1ldGhvZHMgdG8gcHkudGVzdCdzIG1vbmtleXBhdGNoIGZ1bmNhcmcK
LQotKiBjb25zb2xpZGF0ZSBweS5sb2cgaW1wbGVtZW50YXRpb24sIHJlbW92ZSBvbGQgYXBwcm9h
Y2guCi0KLSogaW50cm9kdWNlIHB5LmlvLlRleHRJTyBhbmQgcHkuaW8uQnl0ZXNJTyBmb3IgZGlz
dGluZ3Vpc2hpbmcgYmV0d2VlbgotICB0ZXh0L3VuaWNvZGUgYW5kIGJ5dGUtc3RyZWFtcyAodXNl
cyB1bmRlcmx5aW5nIHN0YW5kYXJkIGxpYiBpby4qCi0gIGlmIGF2YWlsYWJsZSkKLQotKiBtYWtl
IHB5LnVuaXR0ZXN0X2NvbnZlcnQgaGVscGVyIHNjcmlwdCBhdmFpbGFibGUgd2hpY2ggY29udmVy
dHMgInVuaXR0ZXN0LnB5IgotICBzdHlsZSBmaWxlcyBpbnRvIHRoZSBzaW1wbGVyIGFzc2VydC9k
aXJlY3QtdGVzdC1jbGFzc2VzIHB5LnRlc3Qvbm9zZXRlc3RzCi0gIHN0eWxlLiAgVGhlIHNjcmlw
dCB3YXMgd3JpdHRlbiBieSBMYXVyYSBDcmVpZ2h0b24uCi0KLSogc2ltcGxpZmllZCBpbnRlcm5h
bCBsb2NhbHBhdGggaW1wbGVtZW50YXRpb24KLQotMS4wLjIKLT09PT09Ci0KLSogZml4aW5nIHBh
Y2thZ2luZyBpc3N1ZXMsIHRyaWdnZXJlZCBieSBmZWRvcmEgcmVkaGF0IHBhY2thZ2luZywKLSAg
YWxzbyBhZGRlZCBkb2MsIGV4YW1wbGVzIGFuZCBjb250cmliIGRpcnMgdG8gdGhlIHRhcmJhbGwu
Ci0KLSogYWRkZWQgYSBkb2N1bWVudGF0aW9uIGxpbmsgdG8gdGhlIG5ldyBkamFuZ28gcGx1Z2lu
LgotCi0xLjAuMQotPT09PT0KLQotKiBhZGRlZCBhICdweXRlc3Rfbm9zZScgcGx1Z2luIHdoaWNo
IGhhbmRsZXMgbm9zZS5Ta2lwVGVzdCwKLSAgbm9zZS1zdHlsZSBmdW5jdGlvbi9tZXRob2QvZ2Vu
ZXJhdG9yIHNldHVwL3RlYXJkb3duIGFuZAotICB0cmllcyB0byByZXBvcnQgZnVuY3Rpb25zIGNv
cnJlY3RseS4KLQotKiBjYXB0dXJpbmcgb2YgdW5pY29kZSB3cml0ZXMgb3IgZW5jb2RlZCBzdHJp
bmdzIHRvIHN5cy5zdGRvdXQvZXJyCi0gIHdvcmsgYmV0dGVyLCBhbHNvIHRlcm1pbmFsd3JpdGlu
ZyB3YXMgYWRhcHRlZCBhbmQgc29tZXdoYXQKLSAgdW5pZmllZCBiZXR3ZWVuIHdpbmRvd3MgYW5k
IGxpbnV4LgotCi0qIGltcHJvdmVkIGRvY3VtZW50YXRpb24gbGF5b3V0IGFuZCBjb250ZW50IGEg
bG90Ci0KLSogYWRkZWQgYSAiLS1oZWxwLWNvbmZpZyIgb3B0aW9uIHRvIHNob3cgY29uZnRlc3Qu
cHkgLyBFTlYtdmFyIG5hbWVzIGZvcgotICBhbGwgbG9uZ29wdCBjbWRsaW5lIG9wdGlvbnMsIGFu
ZCBzb21lIHNwZWNpYWwgY29uZnRlc3QucHkgdmFyaWFibGVzLgotICByZW5hbWVkICdjb25mX2Nh
cHR1cmUnIGNvbmZ0ZXN0IHNldHRpbmcgdG8gJ29wdGlvbl9jYXB0dXJlJyBhY2NvcmRpbmdseS4K
LQotKiBmaXggaXNzdWUgIzI3OiBiZXR0ZXIgcmVwb3J0aW5nIG9uIG5vbi1jb2xsZWN0YWJsZSBp
dGVtcyBnaXZlbiBvbiBjb21tYW5kbGluZQotICAoZS5nLiBweWMgZmlsZXMpCi0KLSogZml4IGlz
c3VlICMzMzogYWRkZWQgLS12ZXJzaW9uIGZsYWcgKHRoYW5rcyBCZW5qYW1pbiBQZXRlcnNvbikK
LQotKiBmaXggaXNzdWUgIzMyOiBhZGRpbmcgc3VwcG9ydCBmb3IgImluY29tcGxldGUiIHBhdGhz
IHRvIHdjcGF0aC5zdGF0dXMoKQotCi0qICJUZXN0IiBwcmVmaXhlZCBjbGFzc2VzIGFyZSAqbm90
KiBjb2xsZWN0ZWQgYnkgZGVmYXVsdCBhbnltb3JlIGlmIHRoZXkKLSAgaGF2ZSBhbiBfX2luaXRf
XyBtZXRob2QKLQotKiBtb25rZXlwYXRjaCBzZXRlbnYoKSBub3cgYWNjZXB0cyBhICJwcmVwZW5k
IiBwYXJhbWV0ZXIKLQotKiBpbXByb3ZlZCByZXBvcnRpbmcgb2YgY29sbGVjdGlvbiBlcnJvciB0
cmFjZWJhY2tzCi0KLSogc2ltcGxpZmllZCBtdWx0aWNhbGwgbWVjaGFuaXNtIGFuZCBwbHVnaW4g
YXJjaGl0ZWN0dXJlLAotICByZW5hbWVkIHNvbWUgaW50ZXJuYWwgbWV0aG9kcyBhbmQgYXJnbmFt
ZXMKLQotMS4wLjAKLT09PT09Ci0KLSogbW9yZSB0ZXJzZSByZXBvcnRpbmcgdHJ5IHRvIHNob3cg
ZmlsZXN5c3RlbSBwYXRoIHJlbGF0aXZlbHkgdG8gY3VycmVudCBkaXIKLSogaW1wcm92ZSB4ZmFp
bCBvdXRwdXQgYSBiaXQKLQotMS4wLjBiOQotPT09PT09PQotCi0qIGNsZWFubHkgaGFuZGxlIGFu
ZCByZXBvcnQgZmluYWwgdGVhcmRvd24gb2YgdGVzdCBzZXR1cAotCi0qIGZpeCBzdm4tMS42IGNv
bXBhdCBpc3N1ZSB3aXRoIHB5LnBhdGguc3Zud2MoKS52ZXJzaW9uZWQoKQotICAodGhhbmtzIFdv
dXRlciBWYW5kZW4gSG92ZSkKLQotKiBzZXR1cC90ZWFyZG93biBvciBjb2xsZWN0aW9uIHByb2Js
ZW1zIG5vdyBzaG93IGFzIEVSUk9ScwotICBvciB3aXRoIGJpZyAiRSIncyBpbiB0aGUgcHJvZ3Jl
c3MgbGluZXMuICB0aGV5IGFyZSByZXBvcnRlZAotICBhbmQgY291bnRlZCBzZXBhcmF0ZWx5Lgot
Ci0qIGRpc3QtdGVzdGluZzogcHJvcGVybHkgaGFuZGxlIHRlc3QgaXRlbXMgdGhhdCBnZXQgbG9j
YWxseQotICBjb2xsZWN0ZWQgYnV0IGNhbm5vdCBiZSBjb2xsZWN0ZWQgb24gdGhlIHJlbW90ZSBz
aWRlIC0gb2Z0ZW4KLSAgZHVlIHRvIHBsYXRmb3JtL2RlcGVuZGVuY3kgcmVhc29ucwotCi0qIHNp
bXBsaWZpZWQgcHkudGVzdC5tYXJrIEFQSSAtIHNlZSBrZXl3b3JkIHBsdWdpbiBkb2N1bWVudGF0
aW9uCi0KLSogaW50ZWdyYXRlIGJldHRlciB3aXRoIGxvZ2dpbmc6IGNhcHR1cmluZyBub3cgYnkg
ZGVmYXVsdCBjYXB0dXJlcwotICB0ZXN0IGZ1bmN0aW9ucyBhbmQgdGhlaXIgaW1tZWRpYXRlIHNl
dHVwL3RlYXJkb3duIGluIGEgc2luZ2xlIHN0cmVhbQotCi0qIGNhcHN5cyBhbmQgY2FwZmQgZnVu
Y2FyZ3Mgbm93IGhhdmUgYSByZWFkb3V0ZXJyKCkgYW5kIGEgY2xvc2UoKSBtZXRob2QKLSAgKHVu
ZGVybHlpbmdseSBweS5pby5TdGRDYXB0dXJlL0ZEIG9iamVjdHMgYXJlIHVzZWQgd2hpY2ggZ3Jl
dyBhCi0gIHJlYWRvdXRlcnIoKSBtZXRob2QgYXMgd2VsbCB0byByZXR1cm4gc25hcHNob3RzIG9m
IGNhcHR1cmVkIG91dC9lcnIpCi0KLSogbWFrZSBhc3NlcnQtcmVpbnRlcnByZXRhdGlvbiB3b3Jr
IGJldHRlciB3aXRoIGNvbXBhcmlzb25zIG5vdAotICByZXR1cm5pbmcgYm9vbHMgKHJlcG9ydGVk
IHdpdGggbnVtcHkgZnJvbSB0aGFua3MgbWFjaWVqIGZpamFsa293c2tpKQotCi0qIHJld29ya2Vk
IHBlci10ZXN0IG91dHB1dCBjYXB0dXJpbmcgaW50byB0aGUgcHl0ZXN0X2lvY2FwdHVyZS5weSBw
bHVnaW4KLSAgYW5kIHRodXMgcmVtb3ZlZCBjYXB0dXJpbmcgY29kZSBmcm9tIGNvbmZpZyBvYmpl
Y3QKLQotKiBpdGVtLnJlcHJfZmFpbHVyZShleGNpbmZvKSBpbnN0ZWFkIG9mIGl0ZW0ucmVwcl9m
YWlsdXJlKGV4Y2luZm8sIG91dGVycikKLQotCi0xLjAuMGI4Ci09PT09PT09Ci0KLSogcHl0ZXN0
X3VuaXR0ZXN0LXBsdWdpbiBpcyBub3cgZW5hYmxlZCBieSBkZWZhdWx0Ci0KLSogaW50cm9kdWNl
ZCBweXRlc3Rfa2V5Ym9hcmRpbnRlcnJ1cHQgaG9vayBhbmQKLSAgcmVmaW5lZCBweXRlc3Rfc2Vz
c2lvbmZpbmlzaCBob29rZWQsIGFkZGVkIHRlc3RzLgotCi0qIHdvcmthcm91bmQgYSBidWdneSBs
b2dnaW5nIG1vZHVsZSBpbnRlcmFjdGlvbiAoImNsb3NpbmcgYWxyZWFkeSBjbG9zZWQKLSAgZmls
ZXMiKS4gIFRoYW5rcyB0byBTcmlkaGFyIFJhdG5ha3VtYXIgZm9yIHRyaWdnZXJpbmcuCi0KLSog
aWYgcGx1Z2lucyB1c2UgInB5LnRlc3QuaW1wb3J0b3Jza2lwIiBmb3IgaW1wb3J0aW5nCi0gIGEg
ZGVwZW5kZW5jeSBvbmx5IGEgd2FybmluZyB3aWxsIGJlIGlzc3VlZCBpbnN0ZWFkCi0gIG9mIGV4
aXRpbmcgdGhlIHRlc3RpbmcgcHJvY2Vzcy4KLQotKiBtYW55IGltcHJvdmVtZW50cyB0byBkb2Nz
OgotICAtIHJlZmluZWQgZnVuY2FyZ3MgZG9jICwgdXNlIHRoZSB0ZXJtICJmYWN0b3J5IiBpbnN0
ZWFkIG9mICJwcm92aWRlciIKLSAgLSBhZGRlZCBhIG5ldyB0YWxrL3R1dG9yaWFsIGRvYyBwYWdl
Ci0gIC0gYmV0dGVyIGRvd25sb2FkIHBhZ2UKLSAgLSBiZXR0ZXIgcGx1Z2luIGRvY3N0cmluZ3MK
LSAgLSBhZGRlZCBuZXcgcGx1Z2lucyBwYWdlIGFuZCBhdXRvbWF0aWMgZG9jIGdlbmVyYXRpb24g
c2NyaXB0Ci0KLSogZml4ZWQgdGVhcmRvd24gcHJvYmxlbSByZWxhdGVkIHRvIHBhcnRpYWxseSBm
YWlsaW5nIGZ1bmNhcmcgc2V0dXBzCi0gICh0aGFua3MgTXJUb3BmIGZvciByZXBvcnRpbmcpLCAi
cHl0ZXN0X3J1bnRlc3RfdGVhcmRvd24iIGlzIG5vdwotICBhbHdheXMgaW52b2tlZCBldmVuIGlm
IHRoZSAicHl0ZXN0X3J1bnRlc3Rfc2V0dXAiIGZhaWxlZC4KLQotKiB0d2Vha2VkIGRvY3Rlc3Qg
b3V0cHV0IGZvciBkb2NzdHJpbmdzIGluIHB5IG1vZHVsZXMsCi0gIHRoYW5rcyBSYWRvbWlyLgot
Ci0xLjAuMGI3Ci09PT09PT09Ci0KLSogcmVuYW1lZCBweS50ZXN0LnhmYWlsIGJhY2sgdG8gcHku
dGVzdC5tYXJrLnhmYWlsIHRvIGF2b2lkCi0gIHR3byB3YXlzIHRvIGRlY29yYXRlIGZvciB4ZmFp
bAotCi0qIHJlLWFkZGVkIHB5LnRlc3QubWFyayBkZWNvcmF0b3IgZm9yIHNldHRpbmcga2V5d29y
ZHMgb24gZnVuY3Rpb25zCi0gIChpdCB3YXMgYWN0dWFsbHkgZG9jdW1lbnRlZCBzbyByZW1vdmlu
ZyBpdCB3YXMgbm90IG5pY2UpCi0KLSogcmVtb3ZlIHNjb3BlLWFyZ3VtZW50IGZyb20gcmVxdWVz
dC5hZGRmaW5hbGl6ZXIoKSBiZWNhdXNlCi0gIHJlcXVlc3QuY2FjaGVkX3NldHVwIGhhcyB0aGUg
c2NvcGUgYXJnLiBUT09XVERJLgotCi0qIHBlcmZvcm0gc2V0dXAgZmluYWxpemF0aW9uIGJlZm9y
ZSByZXBvcnRpbmcgZmFpbHVyZXMKLQotKiBhcHBseSBtb2RpZmllZCBwYXRjaGVzIGZyb20gQW5k
cmVhcyBLbG9lY2tuZXIgdG8gYWxsb3cKLSAgdGVzdCBmdW5jdGlvbnMgdG8gaGF2ZSBubyBmdW5j
X2NvZGUgKCMyMikgYW5kIHRvIG1ha2UKLSAgIi1rIiBhbmQgZnVuY3Rpb24ga2V5d29yZHMgd29y
ayAgKCMyMCkKLQotKiBhcHBseSBwYXRjaCBmcm9tIERhbmllbCBQZW9semxlaXRobmVyIChpc3N1
ZSAjMjMpCi0KLSogcmVzb2x2ZSBpc3N1ZSAjMTgsIG11bHRpcHJvY2Vzc2luZy5NYW5hZ2VyKCkg
YW5kCi0gIHJlZGlyZWN0aW9uIGNsYXNoCi0KLSogbWFrZSBfX25hbWVfXyA9PSAiX19jaGFubmVs
ZXhlY19fIiBmb3IgcmVtb3RlX2V4ZWMgY29kZQotCi0xLjAuMGIzCi09PT09PT09Ci0KLSogcGx1
Z2luIGNsYXNzZXMgYXJlIHJlbW92ZWQ6IG9uZSBub3cgZGVmaW5lcwotICBob29rcyBkaXJlY3Rs
eSBpbiBjb25mdGVzdC5weSBvciBnbG9iYWwgcHl0ZXN0XyoucHkKLSAgZmlsZXMuCi0KLSogYWRk
ZWQgbmV3IHB5dGVzdF9uYW1lc3BhY2UoY29uZmlnKSBob29rIHRoYXQgYWxsb3dzCi0gIHRvIGlu
amVjdCBoZWxwZXJzIGRpcmVjdGx5IHRvIHRoZSBweS50ZXN0LiogbmFtZXNwYWNlLgotCi0qIGRv
Y3VtZW50ZWQgYW5kIHJlZmluZWQgbWFueSBob29rcwotCi0qIGFkZGVkIG5ldyBzdHlsZSBvZiBn
ZW5lcmF0aXZlIHRlc3RzIHZpYQotICBweXRlc3RfZ2VuZXJhdGVfdGVzdHMgaG9vayB0aGF0IGlu
dGVncmF0ZXMKLSAgd2VsbCB3aXRoIGZ1bmN0aW9uIGFyZ3VtZW50cy4KLQotCi0xLjAuMGIxCi09
PT09PT09Ci0KLSogaW50cm9kdWNlZCBuZXcgImZ1bmNhcmciIHNldHVwIG1ldGhvZCwKLSAgc2Vl
IGRvYy90ZXN0L2Z1bmNhcmcudHh0Ci0KLSogaW50cm9kdWNlZCBwbHVnaW4gYXJjaGl0ZWN0dXJl
IGFuZCBtYW55Ci0gIG5ldyBweS50ZXN0IHBsdWdpbnMsIHNlZQotICBkb2MvdGVzdC9wbHVnaW5z
LnR4dAotCi0qIHRlYXJkb3duX21ldGhvZCBpcyBub3cgZ3VhcmFudGVlZCB0byBnZXQKLSAgY2Fs
bGVkIGFmdGVyIGEgdGVzdCBtZXRob2QgaGFzIHJ1bi4KLQotKiBuZXcgbWV0aG9kOiBweS50ZXN0
LmltcG9ydG9yc2tpcChtb2QsbWludmVyc2lvbikKLSAgd2lsbCBlaXRoZXIgaW1wb3J0IG9yIGNh
bGwgcHkudGVzdC5za2lwKCkKLQotKiBjb21wbGV0ZWx5IHJldmlzZWQgaW50ZXJuYWwgcHkudGVz
dCBhcmNoaXRlY3R1cmUKLQotKiBuZXcgcHkucHJvY2Vzcy5Gb3JrZWRGdW5jIG9iamVjdCBhbGxv
d2luZyB0bwotICBmb3JrIGV4ZWN1dGlvbiBvZiBhIGZ1bmN0aW9uIHRvIGEgc3ViIHByb2Nlc3MK
LSAgYW5kIGdldHRpbmcgYSByZXN1bHQgYmFjay4KLQotWFhYIGxvdHMgb2YgdGhpbmdzIG1pc3Np
bmcgaGVyZSBYWFgKLQotMC45LjIKLT09PT09Ci0KLSogcmVmaW5lZCBpbnN0YWxsYXRpb24gYW5k
IG1ldGFkYXRhLCBjcmVhdGVkIG5ldyBzZXR1cC5weSwKLSAgbm93IGJhc2VkIG9uIHNldHVwdG9v
bHMvZXpfc2V0dXAgKHRoYW5rcyB0byBSYWxmIFNjaG1pdHQKLSAgZm9yIGhpcyBzdXBwb3J0KS4K
LQotKiBpbXByb3ZlZCB0aGUgd2F5IG9mIG1ha2luZyBweS4qIHNjcmlwdHMgYXZhaWxhYmxlIGlu
Ci0gIHdpbmRvd3MgZW52aXJvbm1lbnRzLCB0aGV5IGFyZSBub3cgYWRkZWQgdG8gdGhlCi0gIFNj
cmlwdHMgZGlyZWN0b3J5IGFzICIuY21kIiBmaWxlcy4KLQotKiBweS5wYXRoLnN2bndjLnN0YXR1
cygpIG5vdyBpcyBtb3JlIGNvbXBsZXRlIGFuZAotICB1c2VzIHhtbCBvdXRwdXQgZnJvbSB0aGUg
J3N2bicgY29tbWFuZCBpZiBhdmFpbGFibGUKLSAgKEd1aWRvIFdlc2RvcnApCi0KLSogZml4IGZv
ciBweS5wYXRoLnN2biogdG8gd29yayB3aXRoIHN2biAxLjUKLSAgKENocmlzIExhbWIpCi0KLSog
Zml4IHBhdGgucmVsdG8ob3RoZXJwYXRoKSBtZXRob2Qgb24gd2luZG93cyB0bwotICB1c2Ugbm9y
bWNhc2UgZm9yIGNoZWNraW5nIGlmIGEgcGF0aCBpcyByZWxhdGl2ZS4KLQotKiBweS50ZXN0J3Mg
dHJhY2ViYWNrIGlzIGJldHRlciBwYXJzZWFibGUgZnJvbSBlZGl0b3JzCi0gIChmb2xsb3dzIHRo
ZSBmaWxlbmFtZXM6TElORU5POiBNU0cgY29udmVudGlvbikKLSAgKHRoYW5rcyB0byBPc21vIFNh
bG9tYWEpCi0KLSogZml4IHRvIGphdmFzY3JpcHQtZ2VuZXJhdGlvbiwgInB5LnRlc3QgLS1ydW5i
cm93c2VyIgotICBzaG91bGQgd29yayBtb3JlIHJlbGlhYmx5IG5vdwotCi0qIHJlbW92ZWQgcHJl
dmlvdXNseSBhY2NpZGVudGFsbHkgYWRkZWQKLSAgcHkudGVzdC5icm9rZW4gYW5kIHB5LnRlc3Qu
bm90aW1wbGVtZW50ZWQgaGVscGVycy4KLQotKiB0aGVyZSBub3cgaXMgYSBweS5fX3ZlcnNpb25f
XyBhdHRyaWJ1dGUKLQotMC45LjEKLT09PT09Ci0KLVRoaXMgaXMgYSBmYWlybHkgY29tcGxldGUg
bGlzdCBvZiB2MC45LjEsIHdoaWNoIGNhbgotc2VydmUgYXMgYSByZWZlcmVuY2UgZm9yIGRldmVs
b3BlcnMuCi0KLSogYWxsb3dpbmcgKyBzaWducyBpbiBweS5wYXRoLnN2biB1cmxzIFszOTEwNl0K
LSogZml4ZWQgc3VwcG9ydCBmb3IgRmFpbGVkIGV4Y2VwdGlvbnMgd2l0aG91dCBleGNpbmZvIGlu
IHB5LnRlc3QgWzM5MzQwXQotKiBhZGRlZCBzdXBwb3J0IGZvciBraWxsaW5nIHByb2Nlc3NlcyBm
b3IgV2luZG93cyAoYXMgd2VsbCBhcyBwbGF0Zm9ybXMgdGhhdAotICBzdXBwb3J0IG9zLmtpbGwp
IGluIHB5Lm1pc2Mua2lsbHByb2MgWzM5NjU1XQotKiBhZGRlZCBzZXR1cC90ZWFyZG93biBmb3Ig
Z2VuZXJhdGl2ZSB0ZXN0cyB0byBweS50ZXN0IFs0MDcwMl0KLSogYWRkZWQgZGV0ZWN0aW9uIG9m
IEZBSUxFRCBUTyBMT0FEIE1PRFVMRSB0byBweS50ZXN0IFs0MDcwMywgNDA3MzgsIDQwNzM5XQot
KiBmaXhlZCBwcm9ibGVtIHdpdGggY2FsbGluZyAucmVtb3ZlKCkgb24gd2NwYXRocyBvZiBub24t
dmVyc2lvbmVkIGZpbGVzIGluCi0gIHB5LnBhdGggWzQ0MjQ4XQotKiBmaXhlZCBzb21lIGltcG9y
dCBhbmQgaW5oZXJpdGFuY2UgaXNzdWVzIGluIHB5LnRlc3QgWzQxNDgwLCA0NDY0OCwgNDQ2NTVd
Ci0qIGZhaWwgdG8gcnVuIGdyZWVubGV0IHRlc3RzIHdoZW4gcHlweSBpcyBhdmFpbGFibGUsIGJ1
dCB3aXRob3V0IHN0YWNrbGVzcwotICBbNDUyOTRdCi0qIHNtYWxsIGZpeGVzIGluIHJzZXNzaW9u
IHRlc3RzIFs0NTI5NV0KLSogZml4ZWQgaXNzdWUgd2l0aCAyLjUgdHlwZSByZXByZXNlbnRhdGlv
bnMgaW4gcHkudGVzdCBbNDU0ODMsIDQ1NDg0XQotKiBtYWRlIHRoYXQgaW50ZXJuYWwgcmVwb3J0
aW5nIGlzc3VlcyBkaXNwbGF5aW5nIGlzIGRvbmUgYXRvbWljYWxseSBpbiBweS50ZXN0Ci0gIFs0
NTUxOF0KLSogbWFkZSB0aGF0IG5vbi1leGlzdGluZyBmaWxlcyBhcmUgaWdvcmVkIGJ5IHRoZSBw
eS5sb29rdXAgc2NyaXB0IFs0NTUxOV0KLSogaW1wcm92ZWQgZXhjZXB0aW9uIG5hbWUgY3JlYXRp
b24gaW4gcHkudGVzdCBbNDU1MzVdCi0qIG1hZGUgdGhhdCBsZXNzIHRocmVhZHMgYXJlIHVzZWQg
aW4gZXhlY25ldCBbbWVyZ2UgaW4gNDU1MzldCi0qIHJlbW92ZWQgbG9jayByZXF1aXJlZCBmb3Ig
YXRvbWljYWwgcmVwb3J0aW5nIGlzc3VlIGRpc3BsYXlpbmcgaW4gcHkudGVzdAotICBbNDU1NDVd
Ci0qIHJlbW92ZWQgZ2xvYmFscyBmcm9tIGV4ZWNuZXQgWzQ1NTQxLCA0NTU0N10KLSogcmVmYWN0
b3JlZCBjbGVhbnVwIG1lY2hhbmljcywgbWFkZSB0aGF0IHNldERhZW1vbiBpcyBzZXQgdG8gMSB0
byBtYWtlIGF0ZXhpdAotICBnZXQgY2FsbGVkIGluIDIuNSAocHkuZXhlY25ldCkgWzQ1NTQ4XQot
KiBmaXhlZCBidWcgaW4gam9pbmluZyB0aHJlYWRzIGluIHB5LmV4ZWNuZXQncyBzZXJ2ZW1haW4g
WzQ1NTQ5XQotKiByZWZhY3RvcmVkIHB5LnRlc3QucnNlc3Npb24gdGVzdHMgdG8gbm90IHJlbHkg
b24gZXhhY3Qgb3V0cHV0IGZvcm1hdCBhbnltb3JlCi0gIFs0NTY0Nl0KLSogdXNpbmcgcmVwcigp
IG9uIHRlc3Qgb3V0Y29tZSBbNDU2NDddCi0qIGFkZGVkICdSZWFzb24nIGNsYXNzZXMgZm9yIHB5
LnRlc3Quc2tpcCgpIFs0NTY0OCwgNDU2NDldCi0qIGtpbGxlZCBzb21lIHVubmVjZXNzYXJ5IHNh
bml0eSBjaGVjayBpbiBweS50ZXN0LmNvbGxlY3QgWzQ1NjU1XQotKiBhdm9pZCB1c2luZyBvcy50
bXBmaWxlKCkgaW4gcHkuaW8uZmRjYXB0dXJlIGJlY2F1c2Ugb24gV2luZG93cyBpdCdzIG9ubHkK
LSAgdXNhYmxlIGJ5IEFkbWluaXN0cmF0b3JzIFs0NTkwMV0KLSogYWRkZWQgc3VwcG9ydCBmb3Ig
bG9ja2luZyBhbmQgbm9uLXJlY3Vyc2l2ZSBjb21taXRzIHRvIHB5LnBhdGguc3Zud2MgWzQ1OTk0
XQotKiBsb2NraW5nIGZpbGVzIGluIHB5LmV4ZWNuZXQgdG8gcHJldmVudCBDUHl0aG9uIGZyb20g
c2VnZmF1bHRpbmcgWzQ2MDEwXQotKiBhZGRlZCBleHBvcnQoKSBtZXRob2QgdG8gcHkucGF0aC5z
dm51cmwKLSogZml4ZWQgLWQgLXggaW4gcHkudGVzdCBbNDcyNzddCi0qIGZpeGVkIGFyZ3VtZW50
IGNvbmNhdGVuYXRpb24gcHJvYmxlbSBpbiBweS5wYXRoLnN2bndjIFs0OTQyM10KLSogcmVzdG9y
ZSBweS50ZXN0IGJlaGF2aW91ciB0aGF0IGl0IGV4aXRzIHdpdGggY29kZSAxIHdoZW4gdGhlcmUg
YXJlIGZhaWx1cmVzCi0gIFs0OTk3NF0KLSogZG9uJ3QgZmFpbCBvbiBodG1sIGZpbGVzIHRoYXQg
ZG9uJ3QgaGF2ZSBhbiBhY2NvbXBhbnlpbmcgLnR4dCBmaWxlIFs1MDYwNl0KLSogZml4ZWQgJ3V0
ZXN0Y29udmVydC5weSA8IGlucHV0JyBbNTA2NDVdCi0qIHNtYWxsIGZpeCBmb3IgY29kZSBpbmRl
bnRhdGlvbiBpbiBweS5jb2RlLnNvdXJjZSBbNTA3NTVdCi0qIGZpeCBfZG9jZ2VuLnB5IGRvY3Vt
ZW50YXRpb24gYnVpbGRpbmcgWzUxMjg1XQotKiBpbXByb3ZlZCBjaGVja3MgZm9yIHNvdXJjZSBy
ZXByZXNlbnRhdGlvbiBvZiBjb2RlIGJsb2NrcyBpbiBweS50ZXN0IFs1MTI5Ml0KLSogYWRkZWQg
c3VwcG9ydCBmb3IgcGFzc2luZyBhdXRoZW50aWNhdGlvbiB0byBweS5wYXRoLnN2biogb2JqZWN0
cyBbNTIwMDAsCi0gIDUyMDAxXQotKiByZW1vdmVkIHNvcnRlZCgpIGNhbGwgZm9yIHB5LmFwaWdl
biB0ZXN0cyBpbiBmYXZvdXIgb2YgW10uc29ydCgpIHRvIHN1cHBvcnQKLSAgUHl0aG9uIDIuMyBb
NTI0ODFdCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0
ZXN0L0NPTlRSSUJVVElORy5yc3QgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMv
cHl0ZXN0L0NPTlRSSUJVVElORy5yc3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1
ZWUzZWMzMmQzLi4wMDAwMDAwMDAwMAotLS0gYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mv
dG9vbHMvcHl0ZXN0L0NPTlRSSUJVVElORy5yc3QKKysrIC9kZXYvbnVsbApAQCAtMSwyNTMgKzAs
MCBAQAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PQotQ29udHJpYnV0aW9uIGdldHRpbmcg
c3RhcnRlZAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1Db250cmlidXRpb25zIGFy
ZSBoaWdobHkgd2VsY29tZWQgYW5kIGFwcHJlY2lhdGVkLiAgRXZlcnkgbGl0dGxlIGhlbHAgY291
bnRzLAotc28gZG8gbm90IGhlc2l0YXRlIQotCi0uLiBjb250ZW50czo6IENvbnRyaWJ1dGlvbiBs
aW5rcwotICAgOmRlcHRoOiAyCi0KLQotLi4gX3N1Ym1pdGZlZWRiYWNrOgotCi1GZWF0dXJlIHJl
cXVlc3RzIGFuZCBmZWVkYmFjawotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotRG8g
eW91IGxpa2UgcHl0ZXN0PyAgU2hhcmUgc29tZSBsb3ZlIG9uIFR3aXR0ZXIgb3IgaW4geW91ciBi
bG9nIHBvc3RzIQotCi1XZSdkIGFsc28gbGlrZSB0byBoZWFyIGFib3V0IHlvdXIgcHJvcG9zaXRp
b25zIGFuZCBzdWdnZXN0aW9ucy4gIEZlZWwgZnJlZSB0bwotYHN1Ym1pdCB0aGVtIGFzIGlzc3Vl
cyA8aHR0cHM6Ly9naXRodWIuY29tL3B5dGVzdC1kZXYvcHl0ZXN0L2lzc3Vlcz5gXyBhbmQ6Ci0K
LSogRXhwbGFpbiBpbiBkZXRhaWwgaG93IHRoZXkgc2hvdWxkIHdvcmsuCi0qIEtlZXAgdGhlIHNj
b3BlIGFzIG5hcnJvdyBhcyBwb3NzaWJsZS4gIFRoaXMgd2lsbCBtYWtlIGl0IGVhc2llciB0byBp
bXBsZW1lbnQuCi0KLQotLi4gX3JlcG9ydGJ1Z3M6Ci0KLVJlcG9ydCBidWdzCi0tLS0tLS0tLS0t
LQotCi1SZXBvcnQgYnVncyBmb3IgcHl0ZXN0IGluIHRoZSBgaXNzdWUgdHJhY2tlciA8aHR0cHM6
Ly9naXRodWIuY29tL3B5dGVzdC1kZXYvcHl0ZXN0L2lzc3Vlcz5gXy4KLQotSWYgeW91IGFyZSBy
ZXBvcnRpbmcgYSBidWcsIHBsZWFzZSBpbmNsdWRlOgotCi0qIFlvdXIgb3BlcmF0aW5nIHN5c3Rl
bSBuYW1lIGFuZCB2ZXJzaW9uLgotKiBBbnkgZGV0YWlscyBhYm91dCB5b3VyIGxvY2FsIHNldHVw
IHRoYXQgbWlnaHQgYmUgaGVscGZ1bCBpbiB0cm91Ymxlc2hvb3RpbmcsCi0gIHNwZWNpZmljYWxs
eSBQeXRob24gaW50ZXJwcmV0ZXIgdmVyc2lvbiwKLSAgaW5zdGFsbGVkIGxpYnJhcmllcyBhbmQg
cHl0ZXN0IHZlcnNpb24uCi0qIERldGFpbGVkIHN0ZXBzIHRvIHJlcHJvZHVjZSB0aGUgYnVnLgot
Ci1JZiB5b3UgY2FuIHdyaXRlIGEgZGVtb25zdHJhdGlvbiB0ZXN0IHRoYXQgY3VycmVudGx5IGZh
aWxzIGJ1dCBzaG91bGQgcGFzcyAoeGZhaWwpLAotdGhhdCBpcyBhIHZlcnkgdXNlZnVsIGNvbW1p
dCB0byBtYWtlIGFzIHdlbGwsIGV2ZW4gaWYgeW91IGNhbid0IGZpbmQgaG93Ci10byBmaXggdGhl
IGJ1ZyB5ZXQuCi0KLQotLi4gX2ZpeGJ1Z3M6Ci0KLUZpeCBidWdzCi0tLS0tLS0tLQotCi1Mb29r
IHRocm91Z2ggdGhlIEdpdEh1YiBpc3N1ZXMgZm9yIGJ1Z3MuICBIZXJlIGlzIHNhbXBsZSBmaWx0
ZXIgeW91IGNhbiB1c2U6Ci1odHRwczovL2dpdGh1Yi5jb20vcHl0ZXN0LWRldi9weXRlc3QvbGFi
ZWxzL2J1ZwotCi06cmVmOmBUYWxrIDxjb250YWN0PmAgdG8gZGV2ZWxvcGVycyB0byBmaW5kIG91
dCBob3cgeW91IGNhbiBmaXggc3BlY2lmaWMgYnVncy4KLQotRG9uJ3QgZm9yZ2V0IHRvIGNoZWNr
IHRoZSBpc3N1ZSB0cmFja2VycyBvZiB5b3VyIGZhdm91cml0ZSBwbHVnaW5zLCB0b28hCi0KLS4u
IF93cml0ZXBsdWdpbnM6Ci0KLUltcGxlbWVudCBmZWF0dXJlcwotLS0tLS0tLS0tLS0tLS0tLS0t
Ci0KLUxvb2sgdGhyb3VnaCB0aGUgR2l0SHViIGlzc3VlcyBmb3IgZW5oYW5jZW1lbnRzLiAgSGVy
ZSBpcyBzYW1wbGUgZmlsdGVyIHlvdQotY2FuIHVzZToKLWh0dHBzOi8vZ2l0aHViLmNvbS9weXRl
c3QtZGV2L3B5dGVzdC9sYWJlbHMvZW5oYW5jZW1lbnQKLQotOnJlZjpgVGFsayA8Y29udGFjdD5g
IHRvIGRldmVsb3BlcnMgdG8gZmluZCBvdXQgaG93IHlvdSBjYW4gaW1wbGVtZW50IHNwZWNpZmlj
Ci1mZWF0dXJlcy4KLQotV3JpdGUgZG9jdW1lbnRhdGlvbgotLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ci1weXRlc3QgY291bGQgYWx3YXlzIHVzZSBtb3JlIGRvY3VtZW50YXRpb24uICBXaGF0IGV4YWN0
bHkgaXMgbmVlZGVkPwotCi0qIE1vcmUgY29tcGxlbWVudGFyeSBkb2N1bWVudGF0aW9uLiAgSGF2
ZSB5b3UgcGVyaGFwcyBmb3VuZCBzb21ldGhpbmcgdW5jbGVhcj8KLSogRG9jdW1lbnRhdGlvbiB0
cmFuc2xhdGlvbnMuICBXZSBjdXJyZW50bHkgaGF2ZSBvbmx5IEVuZ2xpc2guCi0qIERvY3N0cmlu
Z3MuICBUaGVyZSBjYW4gbmV2ZXIgYmUgdG9vIG1hbnkgb2YgdGhlbS4KLSogQmxvZyBwb3N0cywg
YXJ0aWNsZXMgYW5kIHN1Y2ggLS0gdGhleSdyZSBhbGwgdmVyeSBhcHByZWNpYXRlZC4KLQotWW91
IGNhbiBhbHNvIGVkaXQgZG9jdW1lbnRhdGlvbiBmaWxlcyBkaXJlY3RseSBpbiB0aGUgR2l0aHVi
IHdlYiBpbnRlcmZhY2UKLXdpdGhvdXQgbmVlZGluZyB0byBtYWtlIGEgZm9yayBhbmQgbG9jYWwg
Y29weS4gVGhpcyBjYW4gYmUgY29udmVuaWVudCBmb3IKLXNtYWxsIGZpeGVzLgotCi0KLS4uIF9z
dWJtaXRwbHVnaW46Ci0KLVN1Ym1pdHRpbmcgUGx1Z2lucyB0byBweXRlc3QtZGV2Ci0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1QeXRlc3QgZGV2ZWxvcG1lbnQgb2YgdGhlIGNv
cmUsIHNvbWUgcGx1Z2lucyBhbmQgc3VwcG9ydCBjb2RlIGhhcHBlbnMKLWluIHJlcG9zaXRvcmll
cyBsaXZpbmcgdW5kZXIgdGhlIGBgcHl0ZXN0LWRldmBgIG9yZ2FuaXNhdGlvbnM6Ci0KLS0gYHB5
dGVzdC1kZXYgb24gR2l0SHViIDxodHRwczovL2dpdGh1Yi5jb20vcHl0ZXN0LWRldj5gXwotCi0t
IGBweXRlc3QtZGV2IG9uIEJpdGJ1Y2tldCA8aHR0cHM6Ly9iaXRidWNrZXQub3JnL3B5dGVzdC1k
ZXY+YF8KLQotQWxsIHB5dGVzdC1kZXYgQ29udHJpYnV0b3JzIHRlYW0gbWVtYmVycyBoYXZlIHdy
aXRlIGFjY2VzcyB0byBhbGwgY29udGFpbmVkCi1yZXBvc2l0b3JpZXMuICBweXRlc3QgY29yZSBh
bmQgcGx1Z2lucyBhcmUgZ2VuZXJhbGx5IGRldmVsb3BlZAotdXNpbmcgYHB1bGwgcmVxdWVzdHNg
XyB0byByZXNwZWN0aXZlIHJlcG9zaXRvcmllcy4KLQotVGhlIG9iamVjdGl2ZXMgb2YgdGhlIGBg
cHl0ZXN0LWRldmBgIG9yZ2FuaXNhdGlvbiBhcmU6Ci0KLSogSGF2aW5nIGEgY2VudHJhbCBsb2Nh
dGlvbiBmb3IgcG9wdWxhciBweXRlc3QgcGx1Z2lucwotKiBTaGFyaW5nIHNvbWUgb2YgdGhlIG1h
aW50ZW5hbmNlIHJlc3BvbnNpYmlsaXR5IChpbiBjYXNlIGEgbWFpbnRhaW5lciBubyBsb25nZXIg
d2hpc2hlcyB0byBtYWludGFpbiBhIHBsdWdpbikKLQotWW91IGNhbiBzdWJtaXQgeW91ciBwbHVn
aW4gYnkgc3Vic2NyaWJpbmcgdG8gdGhlIGBweXRlc3QtZGV2IG1haWwgbGlzdAotPGh0dHBzOi8v
bWFpbC5weXRob24ub3JnL21haWxtYW4vbGlzdGluZm8vcHl0ZXN0LWRldj5gXyBhbmQgd3JpdGlu
ZyBhCi1tYWlsIHBvaW50aW5nIHRvIHlvdXIgZXhpc3RpbmcgcHl0ZXN0IHBsdWdpbiByZXBvc2l0
b3J5IHdoaWNoIG11c3QgaGF2ZQotdGhlIGZvbGxvd2luZzoKLQotLSBQeVBJIHByZXNlbmNlIHdp
dGggYSBgYHNldHVwLnB5YGAgdGhhdCBjb250YWlucyBhIGxpY2Vuc2UsIGBgcHl0ZXN0LWBgCi0g
IHByZWZpeGVkIG5hbWUsIHZlcnNpb24gbnVtYmVyLCBhdXRob3JzLCBzaG9ydCBhbmQgbG9uZyBk
ZXNjcmlwdGlvbi4KLQotLSBhIGBgdG94LmluaWBgIGZvciBydW5uaW5nIHRlc3RzIHVzaW5nIGB0
b3ggPGh0dHA6Ly90b3gudGVzdHJ1bi5vcmc+YF8uCi0KLS0gYSBgYFJFQURNRS50eHRgYCBkZXNj
cmliaW5nIGhvdyB0byB1c2UgdGhlIHBsdWdpbiBhbmQgb24gd2hpY2gKLSAgcGxhdGZvcm1zIGl0
IHJ1bnMuCi0KLS0gYSBgYExJQ0VOU0UudHh0YGAgZmlsZSBvciBlcXVpdmFsZW50IGNvbnRhaW5p
bmcgdGhlIGxpY2Vuc2luZwotICBpbmZvcm1hdGlvbiwgd2l0aCBtYXRjaGluZyBpbmZvIGluIGBg
c2V0dXAucHlgYC4KLQotLSBhbiBpc3N1ZSB0cmFja2VyIGZvciBidWcgcmVwb3J0cyBhbmQgZW5o
YW5jZW1lbnQgcmVxdWVzdHMuCi0KLUlmIG5vIGNvbnRyaWJ1dG9yIHN0cm9uZ2x5IG9iamVjdHMg
YW5kIHR3byBhZ3JlZSwgdGhlIHJlcG9zaXRvcnkgY2FuIHRoZW4gYmUKLXRyYW5zZmVycmVkIHRv
IHRoZSBgYHB5dGVzdC1kZXZgYCBvcmdhbmlzYXRpb24uCi0KLUhlcmUncyBhIHJ1bmRvd24gb2Yg
aG93IGEgcmVwb3NpdG9yeSB0cmFuc2ZlciB1c3VhbGx5IHByb2NlZWRzCi0odXNpbmcgYSByZXBv
c2l0b3J5IG5hbWVkIGBgam9lZG9lL3B5dGVzdC14eXpgYCBhcyBleGFtcGxlKToKLQotKiBPbmUg
b2YgdGhlIGBgcHl0ZXN0LWRldmBgIGFkbWluaXN0cmF0b3JzIGNyZWF0ZXM6Ci0KLSAgLSBgYHB5
dGVzdC14eXotYWRtaW5gYCB0ZWFtLCB3aXRoIGZ1bGwgYWRtaW5pc3RyYXRpb24gcmlnaHRzIHRv
Ci0gICAgYGBweXRlc3QtZGV2L3B5dGVzdC14eXpgYC4KLSAgLSBgYHB5dGVzdC14eXotZGV2ZWxv
cGVyc2BgIHRlYW0sIHdpdGggd3JpdGUgYWNjZXNzIHRvCi0gICAgYGBweXRlc3QtZGV2L3B5dGVz
dC14eXpgYC4KLQotKiBgYGpvZWRvZWBgIGlzIGludml0ZWQgdG8gdGhlIGBgcHl0ZXN0LXh5ei1h
ZG1pbmBgIHRlYW07Ci0KLSogQWZ0ZXIgYWNjZXB0aW5nIHRoZSBpbnZpdGF0aW9uLCBgYGpvZWRv
ZWBgIHRyYW5zZmVycyB0aGUgcmVwb3NpdG9yeSBmcm9tIGl0cwotICBvcmlnaW5hbCBsb2NhdGlv
biB0byBgYHB5dGVzdC1kZXYvcHl0ZXN0LXh5emBgIChBIG5pY2UgZmVhdHVyZSBpcyB0aGF0IEdp
dEh1YiBoYW5kbGVzIFVSTCByZWRpcmVjdGlvbiBmcm9tCi0gIHRoZSBvbGQgdG8gdGhlIG5ldyBs
b2NhdGlvbiBhdXRvbWF0aWNhbGx5KS4KLQotKiBgYGpvZWRvZWBgIGlzIGZyZWUgdG8gYWRkIGFu
eSBvdGhlciBjb2xsYWJvcmF0b3JzIHRvIHRoZQotICBgYHB5dGVzdC14eXotYWRtaW5gYCBvciBg
YHB5dGVzdC14eXotZGV2ZWxvcGVyc2BgIHRlYW0gYXMgZGVzaXJlZC4KLQotVGhlIGBgcHl0ZXN0
LWRldi9Db250cmlidXRvcnNgYCB0ZWFtIGhhcyB3cml0ZSBhY2Nlc3MgdG8gYWxsIHByb2plY3Rz
LCBhbmQKLWV2ZXJ5IHByb2plY3QgYWRtaW5pc3RyYXRvciBpcyBpbiBpdC4gV2UgcmVjb21tZW5k
IHRoYXQgZWFjaCBwbHVnaW4gaGFzIGF0IGxlYXN0IHRocmVlCi1wZW9wbGUgd2hvIGhhdmUgdGhl
IHJpZ2h0IHRvIHJlbGVhc2UgdG8gUHlQSS4KLQotUmVwb3NpdG9yeSBvd25lcnMgY2FuIGJlIGFz
c3VyZWQgdGhhdCBubyBgYHB5dGVzdC1kZXZgYCBhZG1pbmlzdHJhdG9yIHdpbGwgZXZlciBtYWtl
Ci1yZWxlYXNlcyBvZiB5b3VyIHJlcG9zaXRvcnkgb3IgdGFrZSBvd25lcnNoaXAgaW4gYW55IHdh
eSwgZXhjZXB0IGluIHJhcmUgY2FzZXMKLXdoZXJlIHNvbWVvbmUgYmVjb21lcyB1bnJlc3BvbnNp
dmUgYWZ0ZXIgbW9udGhzIG9mIGNvbnRhY3QgYXR0ZW1wdHMuCi1BcyBzdGF0ZWQsIHRoZSBvYmpl
Y3RpdmUgaXMgdG8gc2hhcmUgbWFpbnRlbmFuY2UgYW5kIGF2b2lkICJwbHVnaW4tYWJhbmRvbiIu
Ci0KLQotLi4gX2BwdWxsIHJlcXVlc3RzYDoKLS4uIF9wdWxsLXJlcXVlc3RzOgotCi1QcmVwYXJp
bmcgUHVsbCBSZXF1ZXN0cyBvbiBHaXRIdWIKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotCi1UaGVyZSdzIGFuIGV4Y2VsbGVudCB0dXRvcmlhbCBvbiBob3cgUHVsbCBSZXF1ZXN0
cyB3b3JrIGluIHRoZQotYEdpdEh1YiBIZWxwIENlbnRlciA8aHR0cHM6Ly9oZWxwLmdpdGh1Yi5j
b20vYXJ0aWNsZXMvdXNpbmctcHVsbC1yZXF1ZXN0cy8+YF8KLQotCi0uLiBub3RlOjoKLSAgV2hh
dCBpcyBhICJwdWxsIHJlcXVlc3QiPyAgSXQgaW5mb3JtcyBwcm9qZWN0J3MgY29yZSBkZXZlbG9w
ZXJzIGFib3V0IHRoZQotICBjaGFuZ2VzIHlvdSB3YW50IHRvIHJldmlldyBhbmQgbWVyZ2UuICBQ
dWxsIHJlcXVlc3RzIGFyZSBzdG9yZWQgb24KLSAgYEdpdEh1YiBzZXJ2ZXJzIDxodHRwczovL2dp
dGh1Yi5jb20vcHl0ZXN0LWRldi9weXRlc3QvcHVsbHM+YF8uCi0gIE9uY2UgeW91IHNlbmQgcHVs
bCByZXF1ZXN0LCB3ZSBjYW4gZGlzY3VzcyBpdCdzIHBvdGVudGlhbCBtb2RpZmljYXRpb25zIGFu
ZAotICBldmVuIGFkZCBtb3JlIGNvbW1pdHMgdG8gaXQgbGF0ZXIgb24uCi0KLVRoZXJlJ3MgYW4g
ZXhjZWxsZW50IHR1dG9yaWFsIG9uIGhvdyBQdWxsIFJlcXVlc3RzIHdvcmsgaW4gdGhlCi1gR2l0
SHViIEhlbHAgQ2VudGVyIDxodHRwczovL2hlbHAuZ2l0aHViLmNvbS9hcnRpY2xlcy91c2luZy1w
dWxsLXJlcXVlc3RzLz5gXywKLWJ1dCBoZXJlIGlzIGEgc2ltcGxlIG92ZXJ2aWV3OgotCi0jLiBG
b3JrIHRoZQotICAgYHB5dGVzdCBHaXRIdWIgcmVwb3NpdG9yeSA8aHR0cHM6Ly9naXRodWIuY29t
L3B5dGVzdC1kZXYvcHl0ZXN0PmBfXy4gIEl0J3MKLSAgIGZpbmUgdG8gdXNlIGBgcHl0ZXN0YGAg
YXMgeW91ciBmb3JrIHJlcG9zaXRvcnkgbmFtZSBiZWNhdXNlIGl0IHdpbGwgbGl2ZQotICAgdW5k
ZXIgeW91ciB1c2VyLgotCi0jLiBDbG9uZSB5b3VyIGZvcmsgbG9jYWxseSB1c2luZyBgZ2l0IDxo
dHRwczovL2dpdC1zY20uY29tLz5gXyBhbmQgY3JlYXRlIGEgYnJhbmNoOjoKLQotICAgICQgZ2l0
IGNsb25lIGdpdEBnaXRodWIuY29tOllPVVJfR0lUSFVCX1VTRVJOQU1FL3B5dGVzdC5naXQKLSAg
ICAkIGNkIHB5dGVzdAotICAgICMgbm93LCB0byBmaXggYSBidWcgY3JlYXRlIHlvdXIgb3duIGJy
YW5jaCBvZmYgIm1hc3RlciI6Ci0gICAgCi0gICAgICAgICQgZ2l0IGNoZWNrb3V0IC1iIHlvdXIt
YnVnZml4LWJyYW5jaC1uYW1lIG1hc3RlcgotCi0gICAgIyBvciB0byBpbnN0ZWFkIGFkZCBhIGZl
YXR1cmUgY3JlYXRlIHlvdXIgb3duIGJyYW5jaCBvZmYgImZlYXR1cmVzIjoKLSAgICAKLSAgICAg
ICAgJCBnaXQgY2hlY2tvdXQgLWIgeW91ci1mZWF0dXJlLWJyYW5jaC1uYW1lIGZlYXR1cmVzCi0K
LSAgIEdpdmVuIHdlIGhhdmUgIm1ham9yLm1pbm9yLm1pY3JvIiB2ZXJzaW9uIG51bWJlcnMsIGJ1
Z2ZpeGVzIHdpbGwgdXN1YWxseSAKLSAgIGJlIHJlbGVhc2VkIGluIG1pY3JvIHJlbGVhc2VzIHdo
ZXJlYXMgZmVhdHVyZXMgd2lsbCBiZSByZWxlYXNlZCBpbiAKLSAgIG1pbm9yIHJlbGVhc2VzIGFu
ZCBpbmNvbXBhdGlibGUgY2hhbmdlcyBpbiBtYWpvciByZWxlYXNlcy4KLQotICAgSWYgeW91IG5l
ZWQgc29tZSBoZWxwIHdpdGggR2l0LCBmb2xsb3cgdGhpcyBxdWljayBzdGFydAotICAgZ3VpZGU6
IGh0dHBzOi8vZ2l0Lndpa2kua2VybmVsLm9yZy9pbmRleC5waHAvUXVpY2tTdGFydAotCi0jLiBJ
bnN0YWxsIHRveAotCi0gICBUb3ggaXMgdXNlZCB0byBydW4gYWxsIHRoZSB0ZXN0cyBhbmQgd2ls
bCBhdXRvbWF0aWNhbGx5IHNldHVwIHZpcnR1YWxlbnZzCi0gICB0byBydW4gdGhlIHRlc3RzIGlu
LgotICAgKHdpbGwgaW1wbGljaXRseSB1c2UgaHR0cDovL3d3dy52aXJ0dWFsZW52Lm9yZy9lbi9s
YXRlc3QvKTo6Ci0KLSAgICAkIHBpcCBpbnN0YWxsIHRveAotCi0jLiBSdW4gYWxsIHRoZSB0ZXN0
cwotCi0gICBZb3UgbmVlZCB0byBoYXZlIFB5dGhvbiAyLjcgYW5kIDMuNSBhdmFpbGFibGUgaW4g
eW91ciBzeXN0ZW0uICBOb3cKLSAgIHJ1bm5pbmcgdGVzdHMgaXMgYXMgc2ltcGxlIGFzIGlzc3Vp
bmcgdGhpcyBjb21tYW5kOjoKLQotICAgICQgcHl0aG9uIHJ1bnRveC5weSAtZSBsaW50aW5nLHB5
MjcscHkzNQotCi0gICBUaGlzIGNvbW1hbmQgd2lsbCBydW4gdGVzdHMgdmlhIHRoZSAidG94IiB0
b29sIGFnYWluc3QgUHl0aG9uIDIuNyBhbmQgMy41Ci0gICBhbmQgYWxzbyBwZXJmb3JtICJsaW50
IiBjb2Rpbmctc3R5bGUgY2hlY2tzLiAgYGBydW50b3gucHlgYCBpcwotICAgYSB0aGluIHdyYXBw
ZXIgYXJvdW5kIGBgdG94YGAgd2hpY2ggaW5zdGFsbHMgZnJvbSBhIGRldmVsb3BtZW50IHBhY2th
Z2UKLSAgIGluZGV4IHdoZXJlIG5ld2VyIChub3QgeWV0IHJlbGVhc2VkIHRvIHB5cGkpIHZlcnNp
b25zIG9mIGRlcGVuZGVuY2llcwotICAgKGVzcGVjaWFsbHkgYGBweWBgKSBtaWdodCBiZSBwcmVz
ZW50LgotCi0jLiBZb3UgY2FuIG5vdyBlZGl0IHlvdXIgbG9jYWwgd29ya2luZyBjb3B5LgotCi0g
ICBZb3UgY2FuIG5vdyBtYWtlIHRoZSBjaGFuZ2VzIHlvdSB3YW50IGFuZCBydW4gdGhlIHRlc3Rz
IGFnYWluIGFzIG5lY2Vzc2FyeS4KLQotICAgVG8gcnVuIHRlc3RzIG9uIHB5MjcgYW5kIHBhc3Mg
b3B0aW9ucyB0byBweXRlc3QgKGUuZy4gZW50ZXIgcGRiIG9uIGZhaWx1cmUpCi0gICB0byBweXRl
c3QgeW91IGNhbiBkbzo6Ci0KLSAgICAkIHB5dGhvbiBydW50b3gucHkgLWUgcHkyNyAtLSAtLXBk
YgotCi0gICBvciB0byBvbmx5IHJ1biB0ZXN0cyBpbiBhIHBhcnRpY3VsYXIgdGVzdCBtb2R1bGUg
b24gcHkzNTo6Ci0KLSAgICAkIHB5dGhvbiBydW50b3gucHkgLWUgcHkzNSAtLSB0ZXN0aW5nL3Rl
c3RfY29uZmlnLnB5Ci0KLSMuIENvbW1pdCBhbmQgcHVzaCBvbmNlIHlvdXIgdGVzdHMgcGFzcyBh
bmQgeW91IGFyZSBoYXBweSB3aXRoIHlvdXIgY2hhbmdlKHMpOjoKLQotICAgICQgZ2l0IGNvbW1p
dCAtYSAtbSAiPGNvbW1pdCBtZXNzYWdlPiIKLSAgICAkIGdpdCBwdXNoIC11Ci0KLSAgIE1ha2Ug
c3VyZSB5b3UgYWRkIGEgQ0hBTkdFTE9HIG1lc3NhZ2UsIGFuZCBhZGQgeW91cnNlbGYgdG8gQVVU
SE9SUy4gSWYgeW91Ci0gICBhcmUgdW5zdXJlIGFib3V0IGVpdGhlciBvZiB0aGVzZSBzdGVwcywg
c3VibWl0IHlvdXIgcHVsbCByZXF1ZXN0IGFuZCB3ZSdsbAotICAgaGVscCB5b3UgZml4IGl0IHVw
LgotCi0jLiBGaW5hbGx5LCBzdWJtaXQgYSBwdWxsIHJlcXVlc3QgdGhyb3VnaCB0aGUgR2l0SHVi
IHdlYnNpdGUgdXNpbmcgdGhpcyBkYXRhOjoKLQotICAgIGhlYWQtZm9yazogWU9VUl9HSVRIVUJf
VVNFUk5BTUUvcHl0ZXN0Ci0gICAgY29tcGFyZTogeW91ci1icmFuY2gtbmFtZQotCi0gICAgYmFz
ZS1mb3JrOiBweXRlc3QtZGV2L3B5dGVzdAotICAgIGJhc2U6IG1hc3RlciAgICAgICAgICAjIGlm
IGl0J3MgYSBidWdmaXgKLSAgICBiYXNlOiBmZWF0dXJlICAgICAgICAgIyBpZiBpdCdzIGEgZmVh
dHVyZQotCi0KZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9w
eXRlc3QvSE9XVE9SRUxFQVNFLnJzdCBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29s
cy9weXRlc3QvSE9XVE9SRUxFQVNFLnJzdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
M2ViZmEyOGIxZWQuLjAwMDAwMDAwMDAwCi0tLSBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3cz
Yy90b29scy9weXRlc3QvSE9XVE9SRUxFQVNFLnJzdAorKysgL2Rldi9udWxsCkBAIC0xLDkyICsw
LDAgQEAKLUhvdyB0byByZWxlYXNlIHB5dGVzdAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLQotTm90ZTogdGhpcyBhc3N1bWVzIHlvdSBoYXZlIGFscmVhZHkg
cmVnaXN0ZXJlZCBvbiBweXBpLgotCi0wLiBjcmVhdGUgdGhlIGJyYW5jaCByZWxlYXNlLVZFUlNJ
T04KLSAgIHVzZSBmZWF0dXJlcyBhcyBiYXNlIGZvciBtaW5vci9tYWpvciByZWxlYXNlcwotICAg
YW5kIG1hc3RlciBhcyBiYXNlIGZvciBidWdmaXggcmVsZWFzZXMKLQotMS4gQnVtcCB2ZXJzaW9u
IG51bWJlcnMgaW4gX3B5dGVzdC9fX2luaXRfXy5weSAoc2V0dXAucHkgcmVhZHMgaXQpCi0KLTIu
IENoZWNrIGFuZCBmaW5hbGl6ZSBDSEFOR0VMT0cKLQotMy4gV3JpdGUgZG9jL2VuL2Fubm91bmNl
L3JlbGVhc2UtVkVSU0lPTi50eHQgYW5kIGluY2x1ZGUKLSAgIGl0IGluIGRvYy9lbi9hbm5vdW5j
ZS9pbmRleC50eHQ6OgotCi0gICAgICAgIGdpdCBsb2cgMi44LjIuLkhFQUQgLS1mb3JtYXQ9JyVh
TicgfCBzb3J0IC11ICMgbGlzdHMgdGhlIG5hbWVzIG9mIGF1dGhvcnMgaW52b2x2ZWQKLQotNC4g
VXNlIGRldnBpIGZvciB1cGxvYWRpbmcgYSByZWxlYXNlIHRhcmJhbGwgdG8gYSBzdGFnaW5nIGFy
ZWE6OgotCi0gICAgIGRldnBpIHVzZSBodHRwczovL2RldnBpLm5ldC9VU0VSL2RldgotICAgICBk
ZXZwaSB1cGxvYWQgLS1mb3JtYXRzIHNkaXN0LGJkaXN0X3doZWVsCi0KLTUuIFJ1biBmcm9tIG11
bHRpcGxlIG1hY2hpbmVzOjoKLQotICAgICBkZXZwaSB1c2UgaHR0cHM6Ly9kZXZwaS5uZXQvVVNF
Ui9kZXYKLSAgICAgZGV2cGkgdGVzdCBweXRlc3Q9PVZFUlNJT04KLQotNi4gQ2hlY2sgdGhhdCB0
ZXN0cyBwYXNzIGZvciByZWxldmFudCBjb21iaW5hdGlvbnMgd2l0aDo6Ci0KLSAgICAgICBkZXZw
aSBsaXN0IHB5dGVzdAotCi0gICBvciBsb29rIGF0IGZhaWx1cmVzIHdpdGggImRldnBpIGxpc3Qg
LWYgcHl0ZXN0Ii4KLQotNy4gUmVnZW5lcmF0ZSB0aGUgZG9jcyBleGFtcGxlcyB1c2luZyB0b3gs
IGFuZCBjaGVjayBmb3IgcmVncmVzc2lvbnM6OgotCi0gICAgICB0b3ggLWUgcmVnZW4KLSAgICAg
IGdpdCBkaWZmCi0KLQotOC4gQnVpbGQgdGhlIGRvY3MsIHlvdSBuZWVkIGEgdmlydHVhbGVudiB3
aXRoIHB5IGFuZCBzcGhpbngKLSAgIGluc3RhbGxlZDo6Ci0KLSAgICAgIGNkIGRvYy9lbiAgICAg
IAotICAgICAgbWFrZSBodG1sCi0KLSAgIENvbW1pdCBhbnkgY2hhbmdlcyBiZWZvcmUgdGFnZ2lu
ZyB0aGUgcmVsZWFzZS4KLQotOS4gVGFnIHRoZSByZWxlYXNlOjoKLQotICAgICAgZ2l0IHRhZyBW
RVJTSU9OCi0gICAgICBnaXQgcHVzaAotCi0xMC4gVXBsb2FkIHRoZSBkb2NzIHVzaW5nIGRvYy9l
bi9NYWtlZmlsZTo6Ci0KLSAgICAgIGNkIGRvYy9lbgotICAgICAgbWFrZSBpbnN0YWxsICAjIG9y
ICJpbnN0YWxsYWxsIiBpZiB5b3UgaGF2ZSBMYVRlWCBpbnN0YWxsZWQgZm9yIFBERgotCi0gICAg
VGhpcyByZXF1aXJlcyBzc2gtbG9naW4gcGVybWlzc2lvbiBvbiBweXRlc3Qub3JnIGJlY2F1c2Ug
aXQgdXNlcwotICAgIHJzeW5jLgotICAgIE5vdGUgdGhhdCB0aGUgYGBpbnN0YWxsYGAgdGFyZ2V0
IG9mIGBgZG9jL2VuL01ha2VmaWxlYGAgZGVmaW5lcyB3aGVyZSB0aGUKLSAgICByc3luYyBnb2Vz
IHRvLCB0eXBpY2FsbHkgdG8gdGhlICJsYXRlc3QiIHNlY3Rpb24gb2YgcHl0ZXN0Lm9yZy4KLQot
ICAgIElmIHlvdSBhcmUgbWFraW5nIGEgbWlub3IgcmVsZWFzZSAoZS5nLiA1LjQpLCB5b3UgYWxz
byBuZWVkIHRvIG1hbnVhbGx5Ci0gICAgY3JlYXRlIGEgc3ltbGluayBmb3IgImxhdGVzdCI6Ogot
Ci0gICAgICAgc3NoIHB5dGVzdC1kZXZAcHl0ZXN0Lm9yZwotICAgICAgIGxuIC1zIDUuNCBsYXRl
c3QKLQotICAgIEJyb3dzZSB0byBweXRlc3Qub3JnIHRvIHZlcmlmeS4KLQotMTEuIFB1Ymxpc2gg
dG8gcHlwaTo6Ci0KLSAgICAgIGRldnBpIHB1c2ggcHl0ZXN0LVZFUlNJT04gcHlwaTpOQU1FCi0K
LSAgICB3aGVyZSBOQU1FIGlzIHRoZSBuYW1lIG9mIHB5cGkucHl0aG9uLm9yZyBhcyBjb25maWd1
cmVkIGluIHlvdXIgYGB+Ly5weXBpcmNgYAotICAgIGZpbGUgYGZvciBkZXZwaSA8aHR0cDovL2Rv
Yy5kZXZwaS5uZXQvbGF0ZXN0L3F1aWNrc3RhcnQtcmVsZWFzZXByb2Nlc3MuaHRtbD9oaWdobGln
aHQ9cHlwaXJjI2RldnBpLXB1c2gtcmVsZWFzaW5nLXRvLWFuLWV4dGVybmFsLWluZGV4PmBfLgot
Ci0KLTEyLiBTZW5kIHJlbGVhc2UgYW5ub3VuY2VtZW50IHRvIG1haWxpbmcgbGlzdHM6Ci0KLSAg
ICAtIHB5dGVzdC1kZXYKLSAgICAtIHRlc3RpbmctaW4tcHl0aG9uCi0gICAgLSBweXRob24tYW5u
b3VuY2UtbGlzdEBweXRob24ub3JnCi0KLQotMTMuICoqYWZ0ZXIgdGhlIHJlbGVhc2UqKiBCdW1w
IHRoZSB2ZXJzaW9uIG51bWJlciBpbiBgYF9weXRlc3QvX19pbml0X18ucHlgYCwKLSAgICB0byB0
aGUgbmV4dCBNaW5vciByZWxlYXNlIHZlcnNpb24gKGkuZS4gaWYgeW91IHJlbGVhc2VkIGBgcHl0
ZXN0LTIuOC4wYGAsCi0gICAgc2V0IGl0IHRvIGBgcHl0ZXN0LTIuOS4wLmRldjFgYCkuCi0KLTE0
LiBtZXJnZSB0aGUgYWN0dWFsIHJlbGVhc2UgaW50byB0aGUgbWFzdGVyIGJyYW5jaCBhbmQgZG8g
YSBwdWxsIHJlcXVlc3QgYWdhaW5zdCBpdAotMTUuIG1lcmdlIGZyb20gbWFzdGVyIHRvIGZlYXR1
cmVzCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0
L0lTU1VFUy50eHQgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L0lT
U1VFUy50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4MWQ3MjdlODZhLi4wMDAw
MDAwMDAwMAotLS0gYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L0lT
U1VFUy50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwzNjUgKzAsMCBAQAotCi0KLXJlY29yZGVyID0g
bW9ua2V5cGF0Y2guZnVuY3Rpb24oIi4uLi4uLi4iKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdGFnczogbmljZSBmZWF0dXJl
IAotCi1MaWtlIG1vbmtleXBhdGNoLnJlcGxhY2UgYnV0IHNldHMgYSBtb2NrLWxpa2UgY2FsbCBy
ZWNvcmRlcjoKLQotICAgIHJlY29yZGVyID0gbW9ua2V5cGF0Y2guZnVuY3Rpb24oIm9zLnBhdGgu
YWJzcGF0aCIpCi0gICAgcmVjb3JkZXIuc2V0X3JldHVybigiL2hlbGxvIikKLSAgICBvcy5wYXRo
LmFic3BhdGgoImhlbGxvIikKLSAgICBjYWxsLCA9IHJlY29yZGVyLmNhbGxzCi0gICAgYXNzZXJ0
IGNhbGwuYXJncy5wYXRoID09ICJoZWxsbyIKLSAgICBhc3NlcnQgY2FsbC5yZXR1cm5lZCA9PSAi
L2hlbGxvIgotICAgIC4uLgotCi1Vbmxpa2UgbW9jaywgImFyZ3MucGF0aCIgYWN0cyBvbiB0aGUg
cGFyc2VkIGF1dG8tc3BlYydlZCBgYG9zLnBhdGguYWJzcGF0aGBgCi1zbyBpdCdzIGluZGVwZW5k
ZW50IGZyb20gaWYgdGhlIGNsaWVudCBzaWRlIGNhbGxlZCAib3MucGF0aC5hYnNwYXRoKHBhdGg9
Li4uKSIKLW9yICJvcy5wYXRoLmFic3BhdGgoJ3Bvc2l0aW9uYWwnKSIuCi0KLQotcmVmaW5lIHBh
cmFtZXRyaXplIEFQSQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotdGFnczogY3JpdGljYWwgZmVhdHVyZSAKLQotZXh0ZW5kIG1l
dGFmdW5jLnBhcmFtZXRyaXplIHRvIGRpcmVjdGx5IHN1cHBvcnQgaW5kaXJlY3Rpb24sIGV4YW1w
bGU6Ci0KLSAgICBkZWYgc2V0dXBkYihyZXF1ZXN0LCBjb25maWcpOgotICAgICAgICAjIHNldHVw
ICJyZXNvdXJjZSIgYmFzZWQgb24gdGVzdCByZXF1ZXN0IGFuZCB0aGUgdmFsdWVzIHBhc3NlZCAK
LSAgICAgICAgIyBpbiB0byBwYXJhbWV0cml6ZS4gIHNldHVwZnVuYyBpcyBjYWxsZWQgZm9yIGVh
Y2ggc3VjaCB2YWx1ZS4KLSAgICAgICAgIyB5b3UgbWF5IHVzZSByZXF1ZXN0LmFkZGZpbmFsaXpl
cigpIG9yIHJlcXVlc3QuY2FjaGVkX3NldHVwIC4uLgotICAgICAgICByZXR1cm4gZHluYW1pY19z
ZXR1cF9kYXRhYmFzZSh2YWwpCi0KLSAgICBAcHl0ZXN0Lm1hcmsucGFyYW1ldHJpemUoImRiIiwg
WyJwZyIsICJteXNxbCJdLCBzZXR1cGZ1bmM9c2V0dXBkYikKLSAgICBkZWYgdGVzdF9oZWF2eV9m
dW5jdGlvbmFsX3Rlc3QoZGIpOgotICAgICAgICAuLi4KLQotVGhlcmUgd291bGQgYmUgbm8gbmVl
ZCB0byB3cml0ZSBvciBleHBsYWluIGZ1bmNhcmcgZmFjdG9yaWVzIGFuZAotdGhlaXIgc3BlY2lh
bCBfXyBzeW50YXguCi0KLVRoZSBleGFtcGxlcyBhbmQgaW1wcm92ZW1lbnRzIHNob3VsZCBhbHNv
IHNob3cgaG93IHRvIHB1dCB0aGUgcGFyYW1ldHJpemUKLWRlY29yYXRvciB0byBhIGNsYXNzLCB0
byBhIG1vZHVsZSBvciBldmVuIHRvIGEgZGlyZWN0b3J5LiAgRm9yIHRoZSBkaXJlY3RvcnkKLXBh
cnQgYSBjb25mdGVzdC5weSBjb250ZW50IGxpa2UgdGhpczo6Ci0KLSAgICBweXRlc3RtYXJrID0g
WwotICAgICAgICBAcHl0ZXN0Lm1hcmsucGFyYW1ldHJpemVfc2V0dXAoImRiIiwgLi4uKSwKLSAg
ICBdCi0KLXByb2JhYmx5IG1ha2VzIHNlbnNlIGluIG9yZGVyIHRvIGtlZXAgdGhlIGRlY2xhcmF0
aXZlIG5hdHVyZS4gICBUaGlzIG1pcnJvcnMKLXRoZSBtYXJrZXItbWVjaGFuaXNtIHdpdGggcmVz
cGVjdCB0byBhIHRlc3QgbW9kdWxlIGJ1dCBwdXRzIGl0IHRvIGEgZGlyZWN0b3J5Ci1zY2FsZS4K
LQotV2hlbiBkb2luZyBsYXJnZXIgc2NvcGVkIHBhcmFtZXRyaXphdGlvbiBpdCBwcm9iYWJseSBi
ZWNvbWVzIG5lY2Vzc2FyeQotdG8gYWxsb3cgcGFyYW1ldHJpemF0aW9uIHRvIGJlIGlnbm9yZWQg
aWYgdGhlIGFjY29yZGluZyBwYXJhbWV0ZXIgaXMgbm90Ci11c2VkIChjdXJyZW50bHkgYW55IHBh
cmFtZXRyaXplZCBhcmd1bWVudCB0aGF0IGlzIG5vdCBwcmVzZW50IGluIGEgZnVuY3Rpb24gd2ls
bCBjYXVzZSBhIFZhbHVlRXJyb3IpLiBFeGFtcGxlOgotCi0gICAgICAgIEBweXRlc3QubWFyay5w
YXJhbWV0cml6ZSgiZGIiLCAuLi4sIG11c3RtYXRjaD1GYWxzZSkKLQotbWVhbnMgdG8gbm90IHJh
aXNlIGFuIGVycm9yIGJ1dCBzaW1wbHkgaWdub3JlIHRoZSBwYXJhbWV0cml6YXRpb24KLWlmIHRo
ZSBzaWduYXR1cmUgb2YgYSBkZWNvcmF0ZWQgZnVuY3Rpb24gZG9lcyBub3QgbWF0Y2guIFhYWCBp
cyBpdAotbm90IHN1ZmZpY2llbnQgdG8gYWx3YXlzIGFsbG93IG5vbi1tYXRjaGVzPwotCi0KLWFs
bG93IHBhcmFtZXRyaXplZCBhdHRyaWJ1dGVzIG9uIGNsYXNzZXMKLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAotCi10YWdzOiB3aXNoIDIuNAotCi1l
eGFtcGxlOgotCi0gICAgQHB5dGVzdC5tYXJrLnBhcmFtZXRyaXplX2F0dHIoImRiIiwgc2V0dXBm
dW5jLCBbMSwyLDNdLCBzY29wZT0iY2xhc3MiKQotICAgIEBweXRlc3QubWFyay5wYXJhbWV0cml6
ZV9hdHRyKCJ0bXAiLCBzZXR1cGZ1bmMsIHNjb3BlPSIuLi4iKQotICAgIGNsYXNzIFRlc3RNZToK
LSAgICAgICAgZGVmIHRlc3RfaGVsbG8oc2VsZik6Ci0gICAgICAgICAgICBhY2Nlc3Mgc2VsZi5k
YiAuLi4KLQotdGhpcyB3b3VsZCBydW4gdGhlIHRlc3RfaGVsbG8oKSBmdW5jdGlvbiB0aHJlZSB0
aW1lcyB3aXRoIHRocmVlCi1kaWZmZXJlbnQgdmFsdWVzIGZvciBzZWxmLmRiLiBUaGlzIGNvdWxk
IGFsc28gd29yayB3aXRoIHVuaXR0ZXN0L25vc2UKLXN0eWxlIHRlc3RzLCBpLmUuIGl0IGxldmVy
YWdlcyBleGlzdGluZyB0ZXN0IHN1aXRlcyB3aXRob3V0IG5lZWRpbmcKLXRvIHJld3JpdGUgdGhl
bS4gVG9nZXRoZXIgd2l0aCB0aGUgcHJldmlvdXNseSBtZW50aW9uZWQgc2V0dXBfdGVzdCgpCi1t
YXliZSB0aGUgc2V0dXBmdW5jIGNvdWxkIGJlIG9taXR0ZWQ/Ci0KLW9wdGltaXphdGlvbnMgCi0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLXRhZ3M6IDIuNCBjb3JlCi0KLS0gbG9vayBhdCBpaG9vayBvcHRpbWl6YXRpb24gc3Vj
aCB0aGF0IGFsbCBsb29rdXBzIGZvcgotICBob29rcyByZWxhdGluZyB0byB0aGUgc2FtZSBmc3Bh
dGggYXJlIGNhY2hlZC4KLQotZml4IHN0YXJ0L2ZpbmlzaCBwYXJ0aWFsIGZpbmFpbGl6YXRpb24g
cHJvYmxlbQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi10YWdzOiBidWcgY29yZQotCi1pZiBhIGNvbmZpZ3VyZS9ydW50ZXN0
X3NldHVwL3Nlc3Npb25zdGFydC8uLi4gaG9vayBpbnZvY2F0aW9uIHBhcnRpYWxseQotZmFpbHMg
dGhlIHNlc3Npb25maW5pc2hlcyBpcyBub3QgY2FsbGVkLiAgRWFjaCBob29rIGltcGxlbWVudGF0
aW9uCi1zaG91bGQgYmV0dGVyIGJlIHJlcHNvbnNpYmxlIGZvciByZWdpc3RlcmluZyBhIGNsZWFu
dXAvZmluYWxpemVyCi1hcHByb3ByaWF0ZWx5IHRvIGF2b2lkIHRoaXMgaXNzdWUuICBNb3Jlb3Zl
ci9BbHRlcm5hdGl2ZWx5LCB3ZSBjb3VsZCAKLXJlY29yZCB3aGljaCBpbXBsZW1lbnRhdGlvbnMg
b2YgYSBob29rIHN1Y2NlZWRlZCBhbmQgb25seSBjYWxsIHRoZWlyCi10ZWFyZG93bi4KLQotCi1y
ZWxheCByZXF1aXJlbWVudCB0byBoYXZlIHRlc3RzL3Rlc3RpbmcgY29udGFpbiBhbiBfX2luaXRf
XwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotdGFnczogZmVhdHVyZSAKLWJiOiBodHRwOi8vYml0YnVja2V0Lm9yZy9ocGs0
Mi9weS10cnVuay9pc3N1ZS82NAotCi1BIGxvY2FsIHRlc3QgcnVuIG9mIGEgInRlc3RzIiBkaXJl
Y3RvcnkgbWF5IHdvcmsKLWJ1dCBhIHJlbW90ZSBvbmUgZmFpbCBiZWNhdXNlIHRoZSB0ZXN0cyBk
aXJlY3RvcnkKLWRvZXMgbm90IGNvbnRhaW4gYW4gIl9faW5pdF9fLnB5Ii4gRWl0aGVyIGdpdmUK
LWFuIGVycm9yIG9yIG1ha2UgaXQgd29yayB3aXRob3V0IHRoZSBfX2luaXRfXy5weQotaS5lLiBw
b3J0IHRoZSBub3NlLWxvZ2ljIG9mIHVubG9hZGluZyBhIHRlc3QgbW9kdWxlLgotCi1jdXN0b21p
emUgdGVzdCBmdW5jdGlvbiBjb2xsZWN0aW9uCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10YWdzOiBmZWF0dXJlIAotCi0tIGludHJvZHVj
ZSBweXRlc3QubWFyay5ub2NvbGxlY3QgZm9yIG5vdCBjb25zaWRlcmluZyBhIGZ1bmN0aW9uIGZv
cgotICB0ZXN0IGNvbGxlY3Rpb24gYXQgYWxsLiAgbWF5YmUgYWxzbyBpbnRyb2R1Y2UgYSBweXRl
c3QubWFyay50ZXN0IHRvCi0gIGV4cGxpY2l0bHkgbWFyayBhIGZ1bmN0aW9uIHRvIGJlY29tZSBh
IHRlc3RlZCBvbmUuICBMb29rdXAgSlVuaXQgd2F5cwotICBvZiB0YWdnaW5nIHRlc3RzLgotCi1p
bnRyb2R1Y2UgcHl0ZXN0Lm1hcmsuaW1wb3J0b3Jza2lwCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10YWdzOiBmZWF0dXJlIAotCi1pbiBh
ZGRpdGlvbiB0byB0aGUgaW1wZXJhdGl2ZSBweXRlc3QuaW1wb3J0b3Jza2lwIGFsc28gaW50cm9k
dWNlCi1hIHB5dGVzdC5tYXJrLmltcG9ydG9yc2tpcCBzbyB0aGF0IHRoZSB0ZXN0IGNvdW50IGlz
IG1vcmUgY29ycmVjdC4KLQotCi1pbnRyb2R1Y2UgcHl0ZXN0Lm1hcmsucGxhdGZvcm0KLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRhZ3M6
IGZlYXR1cmUgCi0KLUludHJvZHVjZSBuaWNlLXRvLXNwZWxsIHBsYXRmb3JtLXNraXBwaW5nLCBl
eGFtcGxlczoKLQotICAgIEBweXRlc3QubWFyay5wbGF0Zm9ybSgicHl0aG9uMyIpCi0gICAgQHB5
dGVzdC5tYXJrLnBsYXRmb3JtKCJub3QgcHl0aG9uMyIpCi0gICAgQHB5dGVzdC5tYXJrLnBsYXRm
b3JtKCJ3aW4zMiBhbmQgbm90IHB5dGhvbjMiKQotICAgIEBweXRlc3QubWFyay5wbGF0Zm9ybSgi
ZGFyd2luIikKLSAgICBAcHl0ZXN0Lm1hcmsucGxhdGZvcm0oIm5vdCAoanl0aG9uIGFuZCB3aW4z
MikiKQotICAgIEBweXRlc3QubWFyay5wbGF0Zm9ybSgibm90IChqeXRob24gYW5kIHdpbjMyKSIs
IHhmYWlsPVRydWUpCi0KLWV0Yy4gSWRlYSBpcyB0byBhbGxvdyBQeXRob24gZXhwcmVzc2lvbnMg
d2hpY2ggY2FuIG9wZXJhdGUKLW9uIGNvbW1vbiBzcGVsbGluZ3MgZm9yIG9wZXJhdGluZyBzeXN0
ZW1zIGFuZCBweXRob24KLWludGVycHJldGVyIHZlcnNpb25zLgotCi1weXRlc3QubWFyay54ZmFp
bCBzaWduYXR1cmUgY2hhbmdlCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi10YWdzOiBmZWF0dXJlIAotCi1jaGFuZ2UgdG8gcHl0ZXN0Lm1h
cmsueGZhaWwocmVhc29uLCAob3B0aW9uYWwpY29uZGl0aW9uKQotdG8gYmV0dGVyIGltcGxlbWVu
dCB0aGUgd29yZCBtZWFuaW5nLiAgSXQgYWxzbyBzaWduYWxzCi1iZXR0ZXIgdGhhdCB3ZSBhbHdh
eXMgaGF2ZSBzb21lIGtpbmQgb2YgYW4gaW1wbGVtZW50YXRpb24KLXJlYXNvbiB0aGF0IGNhbiBi
ZSBmb3JtdWFsYXRlZC4KLUNvbXBhdGliaWxpdHk/IGhvdyB0byBpbnRyb2R1Y2UgYSBuZXcgbmFt
ZS9rZWVwIGNvbXBhdD8KLQotYWxsb3cgdG8gbm9uLWludHJ1c2l2ZWx5IGFwcGx5IHNraXBmcy94
ZmFpbC9tYXJrcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi10YWdzOiBmZWF0dXJlIAotCi11c2UgY2FzZTogbWFyayBhIG1vZHVsZSBvciBkaXJl
Y3Rvcnkgc3RydWN0dXJlcwotdG8gYmUgc2tpcHBlZCBvbiBjZXJ0YWluIHBsYXRmb3JtcyAoaS5l
LiBubyBpbXBvcnQKLWF0dGVtcHQgd2lsbCBiZSBtYWRlKS4KLQotY29uc2lkZXIgaW50cm9kdWNp
bmcgYSBob29rL21lY2hhbmlzbSB0aGF0IGFsbG93cyB0byBhcHBseSBtYXJrcwotZnJvbSBjb25m
dGVzdHMgb3IgcGx1Z2lucy4gKFNlZSBleHRlbmRlZCBwYXJhbWV0cml6YXRpb24pCi0KLQotZXhw
bGljaXQgcmVmZXJlbmNpbmcgb2YgY29uZnRlc3QucHkgZmlsZXMKLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10YWdzOiBmZWF0dXJlIAotCi1hbGxvdyB0byBuYW1l
IGNvbmZ0ZXN0LnB5IGZpbGVzIChpbiBzdWIgZGlyZWN0b3JpZXMpIHRoYXQgc2hvdWxkCi1iZSBp
bXBvcnRlZCBlYXJseSwgYXMgdG8gaW5jbHVkZSBjb21tYW5kIGxpbmUgb3B0aW9ucy4KLQotaW1w
cm92ZSBjZW50cmFsIHB5dGVzdCBpbmkgZmlsZQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotdGFnczogZmVhdHVyZSAKLQotaW50cm9kdWNlIG1vcmUgZGVjbGFyYXRpdmUgY29uZmln
dXJhdGlvbiBvcHRpb25zOgotLSAodG8tYmUtY29sbGVjdGVkIHRlc3QgZGlyZWN0b3JpZXMpCi0t
IHJlcXVpcmVkIHBsdWdpbnMKLS0gdGVzdCBmdW5jL2NsYXNzL2ZpbGUgbWF0Y2hpbmcgcGF0dGVy
bnMKLS0gc2tpcC94ZmFpbCAobm9uLWludHJ1c2l2ZSkKLS0gcHl0ZXN0LmluaSBhbmQgdG94Lmlu
aSBhbmQgc2V0dXAuY2ZnIGNvbmZpZ3VyYXRpb24gaW4gdGhlIHNhbWUgZmlsZQotCi1uZXcgZG9j
dW1lbnRhdGlvbgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdGFnczogZmVh
dHVyZSAKLQotLSBsb2dvIHB5dGVzdAotLSBleGFtcGxlcyBmb3IgdW5pdHRlc3Qgb3IgZnVuY3Rp
b25hbCB0ZXN0aW5nCi0tIHJlc291cmNlIG1hbmFnZW1lbnQgZm9yIGZ1bmN0aW9uYWwgdGVzdGlu
ZwotLSBwYXR0ZXJuczogcGFnZSBvYmplY3QKLQotaGF2ZSBpbXBvcnRlZCBtb2R1bGUgbWlzbWF0
Y2ggaG9ub3VyIHJlbGF0aXZlIHBhdGhzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdGFnczogYnVnIAotCi1XaXRoIDEuMS4xIHB5dGVz
dCBmYWlscyBhdCBsZWFzdCBvbiB3aW5kb3dzIGlmIGFuIGltcG9ydAotaXMgcmVsYXRpdmUgYW5k
IGNvbXBhcmVkIGFnYWluc3QgYW4gYWJzb2x1dGUgY29uZnRlc3QucHkKLXBhdGguIE5vcm1hbGl6
ZS4KLQotY29uc2lkZXIgZ2xvYmFsczogcHl0ZXN0LmVuc3VyZXRlbXAgYW5kIGNvbmZpZwotLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLXRhZ3M6IGV4cGVyaW1lbnRhbC13aXNoIAotCi1jb25zaWRlciBkZXByZWNhdGluZyBweXRl
c3QuZW5zdXJldGVtcCBhbmQgcHl0ZXN0LmNvbmZpZwotdG8gZnVydGhlciByZWR1Y2UgcHl0ZXN0
IGdsb2JhbGl0eS4gIEFsc28gY29uc2lkZXIKLWhhdmluZyBweXRlc3QuY29uZmlnIGFuZCBlbnN1
cmV0ZW1wIGNvbWluZyBmcm9tCi1hIHBsdWdpbiByYXRoZXIgdGhhbiBiZWluZyB0aGVyZSBmcm9t
IHRoZSBzdGFydC4KLQotCi1jb25zaWRlciBweXRlc3RfYWRkc3lzcGF0aCBob29rCi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdGFnczogd2lzaAotCi1weXRlc3Qg
Y291bGQgY2FsbCBhIG5ldyBweXRlc3RfYWRkc3lzcGF0aCgpIGluIG9yZGVyIHRvIHN5c3RlbWF0
aWNhbGx5Ci1hbGxvdyBtYW5pcHVsYXRpb24gb2Ygc3lzLnBhdGggYW5kIHRvIGluaGliaXQgaXQg
dmlhIC0tbm8tYWRkc3lzcGF0aAotaW4gb3JkZXIgdG8gbW9yZSBlYXNpbHkgcnVuIGFnYWluc3Qg
aW5zdGFsbGVkIHBhY2thZ2VzLgotCi1BbHRlcm5hdGl2ZWx5IGl0IGNvdWxkIGFsc28gYmUgZG9u
ZSB2aWEgdGhlIGNvbmZpZyBvYmplY3QKLWFuZCBweXRlc3RfY29uZmlndXJlLgotCi0KLQotZGVw
cmVjYXRlIGdsb2JhbCBweXRlc3QuY29uZmlnIHVzYWdlCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10YWdzOiBmZWF0dXJl
IAotCi1weXRlc3QuZW5zdXJldGVtcCBhbmQgcHl0ZXN0LmNvbmZpZyBhcmUgcHJvYmFibHkgdGhl
IGxhc3QKLW9iamVjdHMgY29udGFpbmluZyBnbG9iYWwgc3RhdGUuICBPZnRlbiB1c2luZyB0aGVt
IGlzIG5vdAotbmVjZXNzYXJ5LiAgVGhpcyBpcyBhYm91dCB0cnlpbmcgdG8gZ2V0IHJpZCBvZiB0
aGVtLCBpLmUuCi1kZXByZWNhdGluZyB0aGVtIGFuZCBjaGVja2luZyB3aXRoIFB5UHkncyB1c2Fn
ZXMgYXMgd2VsbAotYXMgb3RoZXJzLgotCi1yZW1vdmUgZGVwcmVjYXRlZCBiaXRzIGluIGNvbGxl
Y3QucHkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLXRhZ3M6IGZlYXR1cmUgCi0KLUluIGFuIGVmZm9ydCB0byBmdXJ0
aGVyIHNpbXBsaWZ5IGNvZGUsIHJldmlldyBhbmQgcmVtb3ZlIGRlcHJlY2F0ZWQgYml0cwotaW4g
Y29sbGVjdC5weS4gIFByb2JhYmx5IGdvb2Q6Ci0tIGlubGluZSBjb25zaWRlcl9maWxlL2RpciBt
ZXRob2RzLCBubyBuZWVkIHRvIGhhdmUgdGhlbQotICBzdWJjbGFzcy1vdmVycmlkYWJsZSBiZWNh
dXNlIG9mIGhvb2tzCi0KLWltcGxlbWVudCBmc2xheW91dCBkZWNvcmF0b3IKLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdGFnczogZmVhdHVyZSAKLQotSW1wcm92ZSB0aGUgd2F5
IGhvdyB0ZXN0cyBjYW4gd29yayB3aXRoIHByZS1tYWRlIGV4YW1wbGVzLAota2VlcGluZyB0aGUg
bGF5b3V0IGNsb3NlIHRvIHRoZSB0ZXN0IGZ1bmN0aW9uOgotCi1AcHl0ZXN0Lm1hcmsuZnNsYXlv
dXQoIiIiCi0gICAgY29uZnRlc3QucHk6Ci0gICAgICAgICMgIGVtcHR5Ci0gICAgdGVzdHMvCi0g
ICAgICAgIHRlc3RfJShOQU1FKXM6ICAjIGJlY29tZXMgdGVzdF9ydW4xLnB5Ci0gICAgICAgICAg
ICBkZWYgdGVzdF9mdW5jdGlvbihzZWxmKToKLSAgICAgICAgICAgICAgICBwYXNzCi0iIiIpCi1k
ZWYgdGVzdF9ydW4ocHl0ZXN0ZXIsIGZzbGF5b3V0KToKLSAgICBwID0gZnNsYXlvdXQuZmluZG9u
ZSgidGVzdF8qLnB5IikKLSAgICByZXN1bHQgPSBweXRlc3Rlci5ydW5weXRlc3QocCkKLSAgICBh
c3NlcnQgcmVzdWx0LnJldCA9PSAwCi0gICAgYXNzZXJ0IHJlc3VsdC5wYXNzZWQgPT0gMQotCi1B
bm90aGVyIGlkZWEgaXMgdG8gYWxsb3cgdG8gZGVmaW5lIGEgZnVsbCBzY2VuYXJpbyBpbmNsdWRp
bmcgdGhlIHJ1bgotaW4gb25lIGNvbnRlbnQgc3RyaW5nOjoKLQotICAgIHJ1bnNjZW5hcmlvKCIi
IgotICAgICAgICB0ZXN0X3tURVNUTkFNRX0ucHk6Ci0gICAgICAgICAgICBpbXBvcnQgcHl0ZXN0
Ci0gICAgICAgICAgICBAcHl0ZXN0Lm1hcmsueGZhaWwKLSAgICAgICAgICAgIGRlZiB0ZXN0X3Ro
YXRfZmFpbHMoKToKLSAgICAgICAgICAgICAgICBhc3NlcnQgMAotCi0gICAgICAgICAgICBAcHl0
ZXN0Lm1hcmsuc2tpcGlmKCJUcnVlIikKLSAgICAgICAgICAgIGRlZiB0ZXN0X2hlbGxvKCk6Ci0g
ICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgIGNvbmZ0ZXN0LnB5OgotICAgICAgICAgICAg
aW1wb3J0IHB5dGVzdAotICAgICAgICAgICAgZGVmIHB5dGVzdF9ydW5zZXR1cF9zZXR1cChpdGVt
KToKLSAgICAgICAgICAgICAgICBweXRlc3Quc2tpcCgiYWJjIikKLQotICAgICAgICBydW5weXRl
c3QgLXJzeFgKLSAgICAgICAgKlNLSVAqe1RFU1ROQU1FfSoKLSAgICAgICAgKjEgc2tpcHBlZCog
Ci0gICAgIiIiKQotCi1UaGlzIGNvdWxkIGJlIHJ1biB3aXRoIGF0IGxlYXN0IHRocmVlIGRpZmZl
cmVudCB3YXlzIHRvIGludm9rZSBweXRlc3Q6Ci10aHJvdWdoIHRoZSBzaGVsbCwgdGhyb3VnaCAi
cHl0aG9uIC1tIHB5dGVzdCIgYW5kIGlubGluZWQuIEFzIGlubGluZWQKLXdvdWxkIGJlIHRoZSBm
YXN0ZXN0IGl0IGNvdWxkIGJlIHJ1biBmaXJzdCAob3IgIi0tZmFzdCIgbW9kZSkuCi0KLQotQ3Jl
YXRlIGlzb2xhdGUgcGx1Z2luCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRhZ3M6IGZlYXR1cmUK
LQotVGhlIGlkZWEgaXMgdGhhdCB5b3UgY2FuIGUuZy4gaW1wb3J0IG1vZHVsZXMgaW4gYSB0ZXN0
IGFuZCBhZnRlcndhcmRzCi1zeXMubW9kdWxlcywgc3lzLm1ldGFfcGF0aCBldGMgd291bGQgYmUg
cmV2ZXJ0ZWQuICBJdCBjYW4gZ28gZnVydGhlcgotdGhlbiBqdXN0IGltcG9ydGluZyBob3dldmVy
LCBlLmcuIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnksIGZpbGUKLWRlc2NyaXB0b3JzLCAuLi4K
LQotVGhpcyB3b3VsZCBwcm9iYWJseSBiZSBkb25lIGJ5IG1hcmtpbmc6OgotCi0gICAgQHB5dGVz
dC5tYXJrLmlzb2xhdGUoaW1wb3J0aW5nPVRydWUsIGN3ZD1UcnVlLCBmZHM9RmFsc2UpCi0gICAg
ZGVmIHRlc3RfZm9vKCk6Ci0gICAgICAgIC4uLgotCi1XaXRoIHRoZSBwb3NzaWJpbGl0eSBvZiBk
b2luZyB0aGlzIGdsb2JhbGx5IGluIGFuIGluaS1maWxlLgotCi0KLWZubWF0Y2ggZm9yIHRlc3Qg
bmFtZXMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRhZ3M6IGZlYXR1cmUtd2lzaAotCi12YXJp
b3VzIHRlc3RzdWl0ZXMgdXNlIHN1ZmZpeGVzIGluc3RlYWQgb2YgcHJlZml4ZXMgZm9yIHRlc3Qg
Y2xhc3NlcwotYWxzbyBpdCBsZW5kcyBpdHNlbGYgdG8gYmRkIHN0eWxlIHRlc3QgbmFtZXM6Ogot
Ci0gICAgY2xhc3MgVXNlckJlaGF2aW91cjoKLSAgICAgICAgZGVmIGFub255bW91c19zaG91bGRf
bm90X2hhdmVfaW5ib3godXNlcik6Ci0gICAgICAgICAgICAuLi4KLSAgICAgICAgZGVmIHJlZ2lz
dHJlZF9zaG91bGRfaGF2ZV9pbmJveCh1c2VyKToKLSAgICAgICAgICAgIC4uCi0KLXVzaW5nIHRo
ZSBmb2xsb3dpbmcgaW4gcHl0ZXN0LmluaTo6Ci0KLSAgICBbcHl0ZXN0XQotICAgIHB5dGhvbl9j
bGFzc2VzID0gVGVzdCAqQmVoYXZpb3VyICpUZXN0Ci0gICAgcHl0aG9uX2Z1bmN0aW9ucyA9IHRl
c3QgKl9zaG91bGRfKgotCi0KLW1lY2hhbmlzbSBmb3IgcnVubmluZyBuYW1lZCBwYXJ0cyBvZiB0
ZXN0cyB3aXRoIGRpZmZlcmVudCByZXBvcnRpbmcgYmVoYXZpb3VyCi0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLXRhZ3M6IGZlYXR1cmUtd2lzaC1pbmNvbXBsZXRlCi0KLWEgZmV3IHVzZS1jYXNlcyBj
b21lIHRvIG1pbmQ6Ci0KLSogZmFpbCBhc3NlcnRpb25zIGFuZCByZWNvcmQgdGhhdCB3aXRob3V0
IHN0b3BwaW5nIGEgY29tcGxldGUgdGVzdAotCi0gICogdGhpcyBpcyBpbiBwYXJ0aWN1bGFyIGhl
cGZ1bGwgaWYgYSBzbWFsbCBiaXQgb2YgYSB0ZXN0IGlzIGtub3duIHRvIGZhaWwveGZhaWw6Ogot
Ci0gICAgZGVmIHRlc3RfZnVuKCk6Ci0gICAgICAgIHdpdGggcHl0ZXN0LnNlY3Rpb24oJ2ZkY2hl
Y2ssIG1hcmtzPXB5dGVzdC5tYXJrLnhmYWlsX2lmKC4uLikpOgotICAgICAgICAgICAgYnJlYWtz
X29uX3dpbmRvd3MoKQotCi0qIGRpdmlkZSBmdW5jdGlvbmFsL2FjY2VwdGFuY2UgdGVzdHMgaW50
byBzZWN0aW9ucwotKiBwcm92aWRlIGEgZGlmZmVyZW50IG1lY2hhbmlzbSBmb3IgZ2VuZXJhdG9y
cywgbWF5YmUgc29tZXRoaW5nIGxpa2U6OgotCi0gICAgZGVmIHB5dGVzdF9ydW50ZXN0X2NhbGwo
aXRlbSkKLSAgICAgICAgaWYgbm90IGdlbmVyYXRvcjoKLSAgICAgICAgICAgIC4uLgotICAgICAg
ICBwcmVwYXJlX2NoZWNrID0gR2VuZXJhdG9yQ2hlY2twcmVwYXJlKCkKLQotICAgICAgICBnZW4g
PSBpdGVtLm9iaigqKmZpeHR1cmVzKQotICAgICAgICBmb3IgY2hlY2sgaW4gZ2VuCi0gICAgICAg
ICAgICBpZCwgY2FsbCA9IHByZXBhcmVfY2hlY2soY2hlY2spCi0gICAgICAgICAgICAjIGJ1YmJs
ZSBzaG91bGQgb25seSBwcmV2ZW50IGV4Y2VwdGlvbiBwcm9wYWdhdGlvbiBhZnRlciBhIGZhaWx1
cmUKLSAgICAgICAgICAgICMgdGhlIHdob2xlIHRlc3Qgc2hvdWxkIHN0aWxsIGZhaWwKLSAgICAg
ICAgICAgICMgdGhlcmUgbWlnaHQgYmUgbmVlZCBmb3IgYSBsb3dlciBsZXZlbCBhcGkgYW5kIHRh
a2luZyBjdXN0b20gbWFya2VycyBpbnRvIGFjY291bnQKLSAgICAgICAgICAgIHdpdGggcHl0ZXN0
LnNlY3Rpb24oaWQsIGJ1YmJsZT1GYWxzZSk6Ci0gICAgICAgICAgICAgICAgY2FsbCgpCi0KLQpk
aWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9MSUNF
TlNFIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9MSUNFTlNFCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZTI3YmQ3ODQxOS4uMDAwMDAwMDAwMDAKLS0t
IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9MSUNFTlNFCisrKyAv
ZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotVGhlIE1JVCBMaWNlbnNlIChNSVQpCi0KLUNvcHly
aWdodCAoYykgMjAwNC0yMDE2IEhvbGdlciBLcmVrZWwgYW5kIG90aGVycwotCi1QZXJtaXNzaW9u
IGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5p
bmcgYSBjb3B5IG9mCi10aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24g
ZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbgotdGhlIFNvZnR3YXJlIHdpdGhvdXQg
cmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0bwot
dXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNl
LCBhbmQvb3Igc2VsbCBjb3BpZXMKLW9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJz
b25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbwotc28sIHN1YmplY3Qg
dG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotCi1UaGUgYWJvdmUgY29weXJpZ2h0IG5vdGlj
ZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKLWNv
cGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0KLVRIRSBTT0ZU
V0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBF
WFBSRVNTIE9SCi1JTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLUZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotQVVUSE9SUyBP
UiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBP
VEhFUgotTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBP
UiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKLU9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEgg
VEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCi1TT0ZUV0FS
RS4KZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3Qv
TUFOSUZFU1QuaW4gYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L01B
TklGRVNULmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjZhOTE4NGRjMy4uMDAw
MDAwMDAwMDAKLS0tIGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9N
QU5JRkVTVC5pbgorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLWluY2x1ZGUgQ0hBTkdF
TE9HLnJzdAotaW5jbHVkZSBMSUNFTlNFCi1pbmNsdWRlIEFVVEhPUlMKLQotaW5jbHVkZSBSRUFE
TUUucnN0Ci1pbmNsdWRlIENPTlRSSUJVVElORy5yc3QKLQotaW5jbHVkZSB0b3guaW5pCi1pbmNs
dWRlIHNldHVwLnB5Ci0KLWluY2x1ZGUgLmNvdmVyYWdlcmMKLQotaW5jbHVkZSBwbHVnaW4tdGVz
dC5zaAotaW5jbHVkZSByZXF1aXJlbWVudHMtZG9jcy50eHQKLWluY2x1ZGUgcnVudG94LnB5Ci0K
LXJlY3Vyc2l2ZS1pbmNsdWRlIGJlbmNoICoucHkKLXJlY3Vyc2l2ZS1pbmNsdWRlIGV4dHJhICou
cHkKLQotZ3JhZnQgdGVzdGluZwotZ3JhZnQgZG9jCi0KLWV4Y2x1ZGUgX3B5dGVzdC9pbXBsCi0K
LWdyYWZ0IF9weXRlc3QvdmVuZG9yZWRfcGFja2FnZXMKLQotcmVjdXJzaXZlLWV4Y2x1ZGUgKiAq
LnB5YyAqLnB5bwotCi1leGNsdWRlIGFwcHZleW9yL2luc3RhbGwucHMxCi1leGNsdWRlIGFwcHZl
eW9yLnltbAotZXhjbHVkZSBhcHB2ZXlvcgotCi1leGNsdWRlIElTU1VFUy50eHQKLWV4Y2x1ZGUg
SE9XVE9SRUxFQVNFLnJzdApkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNj
L3Rvb2xzL3B5dGVzdC9SRUFETUUucnN0IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rv
b2xzL3B5dGVzdC9SRUFETUUucnN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OGZj
OTIyMTFkOC4uMDAwMDAwMDAwMDAKLS0tIGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rv
b2xzL3B5dGVzdC9SRUFETUUucnN0CisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLS4u
IGltYWdlOjogaHR0cDovL3B5dGVzdC5vcmcvbGF0ZXN0L19zdGF0aWMvcHl0ZXN0MS5wbmcKLSAg
IDp0YXJnZXQ6IGh0dHA6Ly9weXRlc3Qub3JnCi0gICA6YWxpZ246IGNlbnRlcgotICAgOmFsdDog
cHl0ZXN0Ci0KLS0tLS0tLQotCi0uLiBpbWFnZTo6IGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vcHlw
aS92L3B5dGVzdC5zdmcKLSAgIDp0YXJnZXQ6IGh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGkv
cHl0ZXN0Ci0uLiBpbWFnZTo6IGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vcHlwaS9weXZlcnNpb25z
L3B5dGVzdC5zdmcKLSAgOnRhcmdldDogaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9weXRl
c3QKLS4uIGltYWdlOjogaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9jb3ZlcmFsbHMvcHl0ZXN0LWRl
di9weXRlc3QvbWFzdGVyLnN2ZwotICAgOnRhcmdldDogaHR0cHM6Ly9jb3ZlcmFsbHMuaW8vci9w
eXRlc3QtZGV2L3B5dGVzdAotLi4gaW1hZ2U6OiBodHRwczovL3RyYXZpcy1jaS5vcmcvcHl0ZXN0
LWRldi9weXRlc3Quc3ZnP2JyYW5jaD1tYXN0ZXIKLSAgICA6dGFyZ2V0OiBodHRwczovL3RyYXZp
cy1jaS5vcmcvcHl0ZXN0LWRldi9weXRlc3QKLS4uIGltYWdlOjogaHR0cHM6Ly9jaS5hcHB2ZXlv
ci5jb20vYXBpL3Byb2plY3RzL3N0YXR1cy9tcmdiamF1YTd0MzNwZzZiP3N2Zz10cnVlCi0gICAg
OnRhcmdldDogaHR0cHM6Ly9jaS5hcHB2ZXlvci5jb20vcHJvamVjdC9weXRlc3Rib3QvcHl0ZXN0
Ci0KLVRoZSBgYHB5dGVzdGBgIGZyYW1ld29yayBtYWtlcyBpdCBlYXN5IHRvIHdyaXRlIHNtYWxs
IHRlc3RzLCB5ZXQKLXNjYWxlcyB0byBzdXBwb3J0IGNvbXBsZXggZnVuY3Rpb25hbCB0ZXN0aW5n
IGZvciBhcHBsaWNhdGlvbnMgYW5kIGxpYnJhcmllcy4gICAgCi0KLUFuIGV4YW1wbGUgb2YgYSBz
aW1wbGUgdGVzdDoKLQotLi4gY29kZS1ibG9jazo6IHB5dGhvbgotCi0gICAgIyBjb250ZW50IG9m
IHRlc3Rfc2FtcGxlLnB5Ci0gICAgZGVmIGZ1bmMoeCk6Ci0gICAgICAgIHJldHVybiB4ICsgMQot
Ci0gICAgZGVmIHRlc3RfYW5zd2VyKCk6Ci0gICAgICAgIGFzc2VydCBmdW5jKDMpID09IDUKLQot
Ci1UbyBleGVjdXRlIGl0OjoKLQotICAgICQgcHkudGVzdAotICAgID09PT09PT0gdGVzdCBzZXNz
aW9uIHN0YXJ0cyA9PT09PT09PQotICAgIHBsYXRmb3JtIGxpbnV4IC0tIFB5dGhvbiAzLjQuMywg
cHl0ZXN0LTIuOC41LCBweS0xLjQuMzEsIHBsdWdneS0wLjMuMSAgICAKLSAgICBjb2xsZWN0ZWQg
MSBpdGVtcwotCi0gICAgdGVzdF9zYW1wbGUucHkgRgotCi0gICAgPT09PT09PSBGQUlMVVJFUyA9
PT09PT09PQotICAgIF9fX19fX18gdGVzdF9hbnN3ZXIgX19fX19fX18KLQotICAgICAgICBkZWYg
dGVzdF9hbnN3ZXIoKToKLSAgICA+ICAgICAgIGFzc2VydCBmdW5jKDMpID09IDUKLSAgICBFICAg
ICAgIGFzc2VydCA0ID09IDUKLSAgICBFICAgICAgICArICB3aGVyZSA0ID0gZnVuYygzKQotCi0g
ICAgdGVzdF9zYW1wbGUucHk6NTogQXNzZXJ0aW9uRXJyb3IKLSAgICA9PT09PT09IDEgZmFpbGVk
IGluIDAuMTIgc2Vjb25kcyA9PT09PT09PQotCi1EdWUgdG8gYGBweS50ZXN0YGAncyBkZXRhaWxl
ZCBhc3NlcnRpb24gaW50cm9zcGVjdGlvbiwgb25seSBwbGFpbiBgYGFzc2VydGBgIHN0YXRlbWVu
dHMgYXJlIHVzZWQuIFNlZSBgZ2V0dGluZy1zdGFydGVkIDxodHRwOi8vcHl0ZXN0Lm9yZy9sYXRl
c3QvZ2V0dGluZy1zdGFydGVkLmh0bWwjb3VyLWZpcnN0LXRlc3QtcnVuPmBfIGZvciBtb3JlIGV4
YW1wbGVzLgotICAgICAgICAKLQotRmVhdHVyZXMKLS0tLS0tLS0tCi0KLS0gRGV0YWlsZWQgaW5m
byBvbiBmYWlsaW5nIGBhc3NlcnQgc3RhdGVtZW50cyA8aHR0cDovL3B5dGVzdC5vcmcvbGF0ZXN0
L2Fzc2VydC5odG1sPmBfIChubyBuZWVkIHRvIHJlbWVtYmVyIGBgc2VsZi5hc3NlcnQqYGAgbmFt
ZXMpOwotCi0tIGBBdXRvLWRpc2NvdmVyeQotICA8aHR0cDovL3B5dGVzdC5vcmcvbGF0ZXN0L2dv
b2RwcmFjdGljZXMuaHRtbCNweXRob24tdGVzdC1kaXNjb3Zlcnk+YF8KLSAgb2YgdGVzdCBtb2R1
bGVzIGFuZCBmdW5jdGlvbnM7Ci0KLS0gYE1vZHVsYXIgZml4dHVyZXMgPGh0dHA6Ly9weXRlc3Qu
b3JnL2xhdGVzdC9maXh0dXJlLmh0bWw+YF8gIGZvcgotICBtYW5hZ2luZyBzbWFsbCBvciBwYXJh
bWV0cml6ZWQgbG9uZy1saXZlZCB0ZXN0IHJlc291cmNlczsKLQotLSBDYW4gcnVuIGB1bml0dGVz
dCA8aHR0cDovL3B5dGVzdC5vcmcvbGF0ZXN0L3VuaXR0ZXN0Lmh0bWw+YF8gKG9yIHRyaWFsKSwK
LSAgYG5vc2UgPGh0dHA6Ly9weXRlc3Qub3JnL2xhdGVzdC9ub3NlLmh0bWw+YF8gdGVzdCBzdWl0
ZXMgb3V0IG9mIHRoZSBib3g7Ci0KLS0gUHl0aG9uMi42KywgUHl0aG9uMy4yKywgUHlQeS0yLjMs
IEp5dGhvbi0yLjUgKHVudGVzdGVkKTsKLQotLSBSaWNoIHBsdWdpbiBhcmNoaXRlY3R1cmUsIHdp
dGggb3ZlciAxNTArIGBleHRlcm5hbCBwbHVnaW5zIDxodHRwOi8vcHl0ZXN0Lm9yZy9sYXRlc3Qv
cGx1Z2lucy5odG1sI2luc3RhbGxpbmctZXh0ZXJuYWwtcGx1Z2lucy1zZWFyY2hpbmc+YF8gYW5k
IHRocml2aW5nIGNvbW11bml0eTsKLQotCi1Eb2N1bWVudGF0aW9uCi0tLS0tLS0tLS0tLS0tCi0K
LUZvciBmdWxsIGRvY3VtZW50YXRpb24sIGluY2x1ZGluZyBpbnN0YWxsYXRpb24sIHR1dG9yaWFs
cyBhbmQgUERGIGRvY3VtZW50cywgcGxlYXNlIHNlZSBodHRwOi8vcHl0ZXN0Lm9yZy4KLQotCi1C
dWdzL1JlcXVlc3RzCi0tLS0tLS0tLS0tLS0tCi0KLVBsZWFzZSB1c2UgdGhlIGBHaXRIdWIgaXNz
dWUgdHJhY2tlciA8aHR0cHM6Ly9naXRodWIuY29tL3B5dGVzdC1kZXYvcHl0ZXN0L2lzc3Vlcz5g
XyB0byBzdWJtaXQgYnVncyBvciByZXF1ZXN0IGZlYXR1cmVzLgotCi0KLUNoYW5nZWxvZwotLS0t
LS0tLS0tCi0KLUNvbnN1bHQgdGhlIGBDaGFuZ2Vsb2cgPGh0dHA6Ly9weXRlc3Qub3JnL2xhdGVz
dC9jaGFuZ2Vsb2cuaHRtbD5gXyBwYWdlIGZvciBmaXhlcyBhbmQgZW5oYW5jZW1lbnRzIG9mIGVh
Y2ggdmVyc2lvbi4KLQotCi1MaWNlbnNlCi0tLS0tLS0tCi0KLUNvcHlyaWdodCBIb2xnZXIgS3Jl
a2VsIGFuZCBvdGhlcnMsIDIwMDQtMjAxNi4KLQotRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBgTUlUYF8gbGljZW5zZSwgcHl0ZXN0IGlzIGZyZWUgYW5kIG9wZW4gc291cmNlIHNv
ZnR3YXJlLgotCi0uLiBfYE1JVGA6IGh0dHBzOi8vZ2l0aHViLmNvbS9weXRlc3QtZGV2L3B5dGVz
dC9ibG9iL21hc3Rlci9MSUNFTlNFCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRl
ZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvX19pbml0X18ucHkgYi9XZWJEcml2ZXJUZXN0cy9p
bXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvX19pbml0X18ucHkKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDcyM2ZiOWU4NTVhLi4wMDAwMDAwMDAwMAotLS0gYS9XZWJEcml2
ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvX19pbml0X18ucHkKKysr
IC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSMKLV9fdmVyc2lvbl9fID0gJzIuOS4xJwpkaWZm
IC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0
L19hcmdjb21wbGV0ZS5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRl
c3QvX3B5dGVzdC9fYXJnY29tcGxldGUucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDk1NTg1NWE5NjQ4Li4wMDAwMDAwMDAwMAotLS0gYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93
M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvX2FyZ2NvbXBsZXRlLnB5CisrKyAvZGV2L251bGwKQEAg
LTEsMTAxICswLDAgQEAKLQotIiIiYWxsb3cgYmFzaC1jb21wbGV0aW9uIGZvciBhcmdwYXJzZSB3
aXRoIGFyZ2NvbXBsZXRlIGlmIGluc3RhbGxlZAotbmVlZHMgYXJnY29tcGxldGU+PTAuNS42IGZv
ciBweXRob24gMy4yLzMuMyAob2xkZXIgdmVyc2lvbnMgZmFpbAotdG8gZmluZCB0aGUgbWFnaWMg
c3RyaW5nLCBzbyBfQVJHQ09NUExFVEUgZW52LiB2YXIgaXMgbmV2ZXIgc2V0LCBhbmQKLXRoaXMg
ZG9lcyBub3QgbmVlZCBzcGVjaWFsIGNvZGUuCi0KLWFyZ2NvbXBsZXRlIGRvZXMgbm90IHN1cHBv
cnQgcHl0aG9uIDIuNSAoYWx0aG91Z2ggdGhlIGNoYW5nZXMgZm9yIHRoYXQKLWFyZSBtaW5vciku
Ci0KLUZ1bmN0aW9uIHRyeV9hcmdjb21wbGV0ZShwYXJzZXIpIHNob3VsZCBiZSBjYWxsZWQgZGly
ZWN0bHkgYmVmb3JlCi10aGUgY2FsbCB0byBBcmd1bWVudFBhcnNlci5wYXJzZV9hcmdzKCkuCi0K
LVRoZSBmaWxlc2NvbXBsZXRlciBpcyB3aGF0IHlvdSBub3JtYWxseSB3b3VsZCB1c2Ugb24gdGhl
IHBvc2l0aW9uYWwKLWFyZ3VtZW50cyBzcGVjaWZpY2F0aW9uLCBpbiBvcmRlciB0byBnZXQgImRp
cm5hbWUvIiBhZnRlciAiZGlybjxUQUI+IgotaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCAiZGlybmFt
ZSAiOgotCi0gICBvcHRwYXJzZXIuYWRkX2FyZ3VtZW50KENvbmZpZy5fZmlsZV9vcl9kaXIsIG5h
cmdzPScqJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkuY29tcGxldGVyPWZpbGVz
Y29tcGxldGVyCi0KLU90aGVyLCBhcHBsaWNhdGlvbiBzcGVjaWZpYywgY29tcGxldGVycyBzaG91
bGQgZ28gaW4gdGhlIGZpbGUKLWRvaW5nIHRoZSBhZGRfYXJndW1lbnQgY2FsbHMgYXMgdGhleSBu
ZWVkIHRvIGJlIHNwZWNpZmllZCBhcyAuY29tcGxldGVyCi1hdHRyaWJ1dGVzIGFzIHdlbGwuIChJ
ZiBhcmdjb21wbGV0ZSBpcyBub3QgaW5zdGFsbGVkLCB0aGUgZnVuY3Rpb24gdGhlCi1hdHRyaWJ1
dGUgcG9pbnRzIHRvIHdpbGwgbm90IGJlIHVzZWQpLgotCi1TUEVFRFVQCi09PT09PT09Ci1UaGUg
Z2VuZXJpYyBhcmdjb21wbGV0ZSBzY3JpcHQgZm9yIGJhc2gtY29tcGxldGlvbgotKC9ldGMvYmFz
aF9jb21wbGV0aW9uLmQvcHl0aG9uLWFyZ2NvbXBsZXRlLnNoICkKLXVzZXMgYSBweXRob24gcHJv
Z3JhbSB0byBkZXRlcm1pbmUgc3RhcnR1cCBzY3JpcHQgZ2VuZXJhdGVkIGJ5IHBpcC4KLVlvdSBj
YW4gc3BlZWQgdXAgY29tcGxldGlvbiBzb21ld2hhdCBieSBjaGFuZ2luZyB0aGlzIHNjcmlwdCB0
byBpbmNsdWRlCi0gICMgUFlUSE9OX0FSR0NPTVBMRVRFX09LCi1zbyB0aGUgdGhlIHB5dGhvbi1h
cmdjb21wbGV0ZS1jaGVjay1lYXN5LWluc3RhbGwtc2NyaXB0IGRvZXMgbm90Ci1uZWVkIHRvIGJl
IGNhbGxlZCB0byBmaW5kIHRoZSBlbnRyeSBwb2ludCBvZiB0aGUgY29kZSBhbmQgc2VlIGlmIHRo
YXQgaXMKLW1hcmtlZCAgd2l0aCBQWVRIT05fQVJHQ09NUExFVEVfT0sKLQotSU5TVEFMTC9ERUJV
R0dJTkcKLT09PT09PT09PT09PT09PT09Ci1UbyBpbmNsdWRlIHRoaXMgc3VwcG9ydCBpbiBhbm90
aGVyIGFwcGxpY2F0aW9uIHRoYXQgaGFzIHNldHVwLnB5IGdlbmVyYXRlZAotc2NyaXB0czoKLS0g
YWRkIHRoZSBsaW5lOgotICAgICMgUFlUSE9OX0FSR0NPTVBMRVRFX09LCi0gIG5lYXIgdGhlIHRv
cCBvZiB0aGUgbWFpbiBweXRob24gZW50cnkgcG9pbnQKLS0gaW5jbHVkZSBpbiB0aGUgZmlsZSBj
YWxsaW5nIHBhcnNlX2FyZ3MoKToKLSAgICBmcm9tIF9hcmdjb21wbGV0ZSBpbXBvcnQgdHJ5X2Fy
Z2NvbXBsZXRlLCBmaWxlc2NvbXBsZXRlcgotICAgLCBjYWxsIHRyeV9hcmdjb21wbGV0ZSBqdXN0
IGJlZm9yZSBwYXJzZV9hcmdzKCksIGFuZCBvcHRpb25hbGx5IGFkZAotICAgZmlsZXNjb21wbGV0
ZXIgdG8gdGhlIHBvc2l0aW9uYWwgYXJndW1lbnRzJyBhZGRfYXJndW1lbnQoKQotSWYgdGhpbmdz
IGRvIG5vdCB3b3JrIHJpZ2h0IGF3YXk6Ci0tIHN3aXRjaCBvbiBhcmdjb21wbGV0ZSBkZWJ1Z2dp
bmcgd2l0aCAoYWxzbyBoZWxwZnVsIHdoZW4gZG9pbmcgY3VzdG9tCi0gIGNvbXBsZXRlcnMpOgot
ICAgIGV4cG9ydCBfQVJDX0RFQlVHPTEKLS0gcnVuOgotICAgIHB5dGhvbi1hcmdjb21wbGV0ZS1j
aGVjay1lYXN5LWluc3RhbGwtc2NyaXB0ICQod2hpY2ggYXBwbmFtZSkKLSAgICBlY2hvICQ/Ci0g
IHdpbGwgZWNobyAwIGlmIHRoZSBtYWdpYyBsaW5lIGhhcyBiZWVuIGZvdW5kLCAxIGlmIG5vdAot
LSBzb21ldGltZXMgaXQgaGVscHMgdG8gZmluZCBlYXJseSBvbiBlcnJvcnMgdXNpbmc6Ci0gICAg
X0FSR0NPTVBMRVRFPTEgX0FSQ19ERUJVRz0xIGFwcG5hbWUKLSAgd2hpY2ggc2hvdWxkIHRocm93
IGEgS2V5RXJyb3I6ICdDT01QTElORScgKHdoaWNoIGlzIHByb3Blcmx5IHNldCBieSB0aGUKLSAg
Z2xvYmFsIGFyZ2NvbXBsZXRlIHNjcmlwdCkuCi0iIiIKLQotaW1wb3J0IHN5cwotaW1wb3J0IG9z
Ci1mcm9tIGdsb2IgaW1wb3J0IGdsb2IKLQotY2xhc3MgRmFzdEZpbGVzQ29tcGxldGVyOgotICAg
ICdGYXN0IGZpbGUgY29tcGxldGVyIGNsYXNzJwotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkaXJl
Y3Rvcmllcz1UcnVlKToKLSAgICAgICAgc2VsZi5kaXJlY3RvcmllcyA9IGRpcmVjdG9yaWVzCi0K
LSAgICBkZWYgX19jYWxsX18oc2VsZiwgcHJlZml4LCAqKmt3YXJncyk6Ci0gICAgICAgICIiIm9u
bHkgY2FsbGVkIG9uIG5vbiBvcHRpb24gY29tcGxldGlvbnMiIiIKLSAgICAgICAgaWYgb3MucGF0
aC5zZXAgaW4gcHJlZml4WzE6XTogIwotICAgICAgICAgICAgcHJlZml4X2RpciA9IGxlbihvcy5w
YXRoLmRpcm5hbWUocHJlZml4KSArIG9zLnBhdGguc2VwKQotICAgICAgICBlbHNlOgotICAgICAg
ICAgICAgcHJlZml4X2RpciA9IDAKLSAgICAgICAgY29tcGxldGlvbiA9IFtdCi0gICAgICAgIGds
b2JiZWQgPSBbXQotICAgICAgICBpZiAnKicgbm90IGluIHByZWZpeCBhbmQgJz8nIG5vdCBpbiBw
cmVmaXg6Ci0gICAgICAgICAgICBpZiBwcmVmaXhbLTFdID09IG9zLnBhdGguc2VwOiAgIyB3ZSBh
cmUgb24gdW5peCwgb3RoZXJ3aXNlIG5vIGJhc2gKLSAgICAgICAgICAgICAgICBnbG9iYmVkLmV4
dGVuZChnbG9iKHByZWZpeCArICcuKicpKQotICAgICAgICAgICAgcHJlZml4ICs9ICcqJwotICAg
ICAgICBnbG9iYmVkLmV4dGVuZChnbG9iKHByZWZpeCkpCi0gICAgICAgIGZvciB4IGluIHNvcnRl
ZChnbG9iYmVkKToKLSAgICAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoeCk6Ci0gICAgICAgICAg
ICAgICAgeCArPSAnLycKLSAgICAgICAgICAgICMgYXBwZW5kIHN0cmlwcGluZyB0aGUgcHJlZml4
IChsaWtlIGJhc2gsIG5vdCBsaWtlIGNvbXBnZW4pCi0gICAgICAgICAgICBjb21wbGV0aW9uLmFw
cGVuZCh4W3ByZWZpeF9kaXI6XSkKLSAgICAgICAgcmV0dXJuIGNvbXBsZXRpb24KLQotaWYgb3Mu
ZW52aXJvbi5nZXQoJ19BUkdDT01QTEVURScpOgotICAgIHRyeToKLSAgICAgICAgaW1wb3J0IGFy
Z2NvbXBsZXRlLmNvbXBsZXRlcnMKLSAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgIHN5
cy5leGl0KC0xKQotICAgIGZpbGVzY29tcGxldGVyID0gRmFzdEZpbGVzQ29tcGxldGVyKCkKLQot
ICAgIGRlZiB0cnlfYXJnY29tcGxldGUocGFyc2VyKToKLSAgICAgICAgYXJnY29tcGxldGUuYXV0
b2NvbXBsZXRlKHBhcnNlcikKLWVsc2U6Ci0gICAgZGVmIHRyeV9hcmdjb21wbGV0ZShwYXJzZXIp
OiBwYXNzCi0gICAgZmlsZXNjb21wbGV0ZXIgPSBOb25lCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJU
ZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvX2NvZGUvX19pbml0X18ucHkg
Yi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvX2NvZGUv
X19pbml0X18ucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwNDZiOTcxNmNhLi4w
MDAwMDAwMDAwMAotLS0gYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0
L19weXRlc3QvX2NvZGUvX19pbml0X18ucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBA
Ci0iIiIgcHl0aG9uIGluc3BlY3Rpb24vY29kZSBnZW5lcmF0aW9uIEFQSSAiIiIKLWZyb20gLmNv
ZGUgaW1wb3J0IENvZGUgICMgbm9xYQotZnJvbSAuY29kZSBpbXBvcnQgRXhjZXB0aW9uSW5mbyAg
IyBub3FhCi1mcm9tIC5jb2RlIGltcG9ydCBGcmFtZSAgIyBub3FhCi1mcm9tIC5jb2RlIGltcG9y
dCBUcmFjZWJhY2sgICMgbm9xYQotZnJvbSAuY29kZSBpbXBvcnQgZ2V0cmF3Y29kZSAgIyBub3Fh
Ci1mcm9tIC5jb2RlIGltcG9ydCBwYXRjaF9idWlsdGlucyAgIyBub3FhCi1mcm9tIC5jb2RlIGlt
cG9ydCB1bnBhdGNoX2J1aWx0aW5zICAjIG5vcWEKLWZyb20gLnNvdXJjZSBpbXBvcnQgU291cmNl
ICAjIG5vcWEKLWZyb20gLnNvdXJjZSBpbXBvcnQgY29tcGlsZV8gYXMgY29tcGlsZSAgIyBub3Fh
Ci1mcm9tIC5zb3VyY2UgaW1wb3J0IGdldGZzbGluZW5vICAjIG5vcWEKLQpkaWZmIC0tZ2l0IGEv
V2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L19jb2RlL19w
eTJ0cmFjZWJhY2sucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0
L19weXRlc3QvX2NvZGUvX3B5MnRyYWNlYmFjay5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggYTgzMGQ5ODk5YWUuLjAwMDAwMDAwMDAwCi0tLSBhL1dlYkRyaXZlclRlc3RzL2ltcG9y
dGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9fY29kZS9fcHkydHJhY2ViYWNrLnB5CisrKyAv
ZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotIyBjb3BpZWQgZnJvbSBweXRob24tMi43LjMncyB0
cmFjZWJhY2sucHkKLSMgQ0hBTkdFUzoKLSMgLSBzb21lX3N0ciBpcyByZXBsYWNlZCwgdHJ5aW5n
IHRvIGNyZWF0ZSB1bmljb2RlIHN0cmluZ3MKLSMKLWltcG9ydCB0eXBlcwotCi1kZWYgZm9ybWF0
X2V4Y2VwdGlvbl9vbmx5KGV0eXBlLCB2YWx1ZSk6Ci0gICAgIiIiRm9ybWF0IHRoZSBleGNlcHRp
b24gcGFydCBvZiBhIHRyYWNlYmFjay4KLQotICAgIFRoZSBhcmd1bWVudHMgYXJlIHRoZSBleGNl
cHRpb24gdHlwZSBhbmQgdmFsdWUgc3VjaCBhcyBnaXZlbiBieQotICAgIHN5cy5sYXN0X3R5cGUg
YW5kIHN5cy5sYXN0X3ZhbHVlLiBUaGUgcmV0dXJuIHZhbHVlIGlzIGEgbGlzdCBvZgotICAgIHN0
cmluZ3MsIGVhY2ggZW5kaW5nIGluIGEgbmV3bGluZS4KLQotICAgIE5vcm1hbGx5LCB0aGUgbGlz
dCBjb250YWlucyBhIHNpbmdsZSBzdHJpbmc7IGhvd2V2ZXIsIGZvcgotICAgIFN5bnRheEVycm9y
IGV4Y2VwdGlvbnMsIGl0IGNvbnRhaW5zIHNldmVyYWwgbGluZXMgdGhhdCAod2hlbgotICAgIHBy
aW50ZWQpIGRpc3BsYXkgZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgd2hlcmUgdGhlIHN5bnRh
eAotICAgIGVycm9yIG9jY3VycmVkLgotCi0gICAgVGhlIG1lc3NhZ2UgaW5kaWNhdGluZyB3aGlj
aCBleGNlcHRpb24gb2NjdXJyZWQgaXMgYWx3YXlzIHRoZSBsYXN0Ci0gICAgc3RyaW5nIGluIHRo
ZSBsaXN0LgotCi0gICAgIiIiCi0KLSAgICAjIEFuIGluc3RhbmNlIHNob3VsZCBub3QgaGF2ZSBh
IG1lYW5pbmdmdWwgdmFsdWUgcGFyYW1ldGVyLCBidXQKLSAgICAjIHNvbWV0aW1lcyBkb2VzLCBw
YXJ0aWN1bGFybHkgZm9yIHN0cmluZyBleGNlcHRpb25zLCBzdWNoIGFzCi0gICAgIyA+Pj4gcmFp
c2Ugc3RyaW5nMSwgc3RyaW5nMiAgIyBkZXByZWNhdGVkCi0gICAgIwotICAgICMgQ2xlYXIgdGhl
c2Ugb3V0IGZpcnN0IGJlY2F1c2UgaXNzdWJ0eXBlKHN0cmluZzEsIFN5bnRheEVycm9yKQotICAg
ICMgd291bGQgdGhyb3cgYW5vdGhlciBleGNlcHRpb24gYW5kIG1hc2sgdGhlIG9yaWdpbmFsIHBy
b2JsZW0uCi0gICAgaWYgKGlzaW5zdGFuY2UoZXR5cGUsIEJhc2VFeGNlcHRpb24pIG9yCi0gICAg
ICAgIGlzaW5zdGFuY2UoZXR5cGUsIHR5cGVzLkluc3RhbmNlVHlwZSkgb3IKLSAgICAgICAgZXR5
cGUgaXMgTm9uZSBvciB0eXBlKGV0eXBlKSBpcyBzdHIpOgotICAgICAgICByZXR1cm4gW19mb3Jt
YXRfZmluYWxfZXhjX2xpbmUoZXR5cGUsIHZhbHVlKV0KLQotICAgIHN0eXBlID0gZXR5cGUuX19u
YW1lX18KLQotICAgIGlmIG5vdCBpc3N1YmNsYXNzKGV0eXBlLCBTeW50YXhFcnJvcik6Ci0gICAg
ICAgIHJldHVybiBbX2Zvcm1hdF9maW5hbF9leGNfbGluZShzdHlwZSwgdmFsdWUpXQotCi0gICAg
IyBJdCB3YXMgYSBzeW50YXggZXJyb3I7IHNob3cgZXhhY3RseSB3aGVyZSB0aGUgcHJvYmxlbSB3
YXMgZm91bmQuCi0gICAgbGluZXMgPSBbXQotICAgIHRyeToKLSAgICAgICAgbXNnLCAoZmlsZW5h
bWUsIGxpbmVubywgb2Zmc2V0LCBiYWRsaW5lKSA9IHZhbHVlLmFyZ3MKLSAgICBleGNlcHQgRXhj
ZXB0aW9uOgotICAgICAgICBwYXNzCi0gICAgZWxzZToKLSAgICAgICAgZmlsZW5hbWUgPSBmaWxl
bmFtZSBvciAiPHN0cmluZz4iCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICBGaWxlICIlcyIsIGxp
bmUgJWRcbicgJSAoZmlsZW5hbWUsIGxpbmVubykpCi0gICAgICAgIGlmIGJhZGxpbmUgaXMgbm90
IE5vbmU6Ci0gICAgICAgICAgICBpZiBpc2luc3RhbmNlKGJhZGxpbmUsIGJ5dGVzKTogICMgcHl0
aG9uIDIgb25seQotICAgICAgICAgICAgICAgIGJhZGxpbmUgPSBiYWRsaW5lLmRlY29kZSgndXRm
LTgnLCAncmVwbGFjZScpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQodScgICAgJXNcbicgJSBi
YWRsaW5lLnN0cmlwKCkpCi0gICAgICAgICAgICBpZiBvZmZzZXQgaXMgbm90IE5vbmU6Ci0gICAg
ICAgICAgICAgICAgY2FyZXRzcGFjZSA9IGJhZGxpbmUucnN0cmlwKCdcbicpWzpvZmZzZXRdLmxz
dHJpcCgpCi0gICAgICAgICAgICAgICAgIyBub24tc3BhY2Ugd2hpdGVzcGFjZSAobGlrZXMgdGFi
cykgbXVzdCBiZSBrZXB0IGZvciBhbGlnbm1lbnQKLSAgICAgICAgICAgICAgICBjYXJldHNwYWNl
ID0gKChjLmlzc3BhY2UoKSBhbmQgYyBvciAnICcpIGZvciBjIGluIGNhcmV0c3BhY2UpCi0gICAg
ICAgICAgICAgICAgIyBvbmx5IHRocmVlIHNwYWNlcyB0byBhY2NvdW50IGZvciBvZmZzZXQxID09
IHBvcyAwCi0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAlc15cbicgJSAnJy5qb2lu
KGNhcmV0c3BhY2UpKQotICAgICAgICB2YWx1ZSA9IG1zZwotCi0gICAgbGluZXMuYXBwZW5kKF9m
b3JtYXRfZmluYWxfZXhjX2xpbmUoc3R5cGUsIHZhbHVlKSkKLSAgICByZXR1cm4gbGluZXMKLQot
ZGVmIF9mb3JtYXRfZmluYWxfZXhjX2xpbmUoZXR5cGUsIHZhbHVlKToKLSAgICAiIiJSZXR1cm4g
YSBsaXN0IG9mIGEgc2luZ2xlIGxpbmUgLS0gbm9ybWFsIGNhc2UgZm9yIGZvcm1hdF9leGNlcHRp
b25fb25seSIiIgotICAgIHZhbHVlc3RyID0gX3NvbWVfc3RyKHZhbHVlKQotICAgIGlmIHZhbHVl
IGlzIE5vbmUgb3Igbm90IHZhbHVlc3RyOgotICAgICAgICBsaW5lID0gIiVzXG4iICUgZXR5cGUK
LSAgICBlbHNlOgotICAgICAgICBsaW5lID0gIiVzOiAlc1xuIiAlIChldHlwZSwgdmFsdWVzdHIp
Ci0gICAgcmV0dXJuIGxpbmUKLQotZGVmIF9zb21lX3N0cih2YWx1ZSk6Ci0gICAgdHJ5OgotICAg
ICAgICByZXR1cm4gdW5pY29kZSh2YWx1ZSkKLSAgICBleGNlcHQgRXhjZXB0aW9uOgotICAgICAg
ICB0cnk6Ci0gICAgICAgICAgICByZXR1cm4gc3RyKHZhbHVlKQotICAgICAgICBleGNlcHQgRXhj
ZXB0aW9uOgotICAgICAgICAgICAgcGFzcwotICAgIHJldHVybiAnPHVucHJpbnRhYmxlICVzIG9i
amVjdD4nICUgdHlwZSh2YWx1ZSkuX19uYW1lX18KZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3Rz
L2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9fY29kZS9jb2RlLnB5IGIvV2ViRHJp
dmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L19jb2RlL2NvZGUucHkK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjNjhhYWM1NTQ4Li4wMDAwMDAwMDAwMAot
LS0gYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvX2Nv
ZGUvY29kZS5weQorKysgL2Rldi9udWxsCkBAIC0xLDc5NSArMCwwIEBACi1pbXBvcnQgc3lzCi1m
cm9tIGluc3BlY3QgaW1wb3J0IENPX1ZBUkFSR1MsIENPX1ZBUktFWVdPUkRTCi0KLWltcG9ydCBw
eQotCi1idWlsdGluX3JlcHIgPSByZXByCi0KLXJlcHJsaWIgPSBweS5idWlsdGluLl90cnlpbXBv
cnQoJ3JlcHInLCAncmVwcmxpYicpCi0KLWlmIHN5cy52ZXJzaW9uX2luZm9bMF0gPj0gMzoKLSAg
ICBmcm9tIHRyYWNlYmFjayBpbXBvcnQgZm9ybWF0X2V4Y2VwdGlvbl9vbmx5Ci1lbHNlOgotICAg
IGZyb20gLl9weTJ0cmFjZWJhY2sgaW1wb3J0IGZvcm1hdF9leGNlcHRpb25fb25seQotCi1jbGFz
cyBDb2RlKG9iamVjdCk6Ci0gICAgIiIiIHdyYXBwZXIgYXJvdW5kIFB5dGhvbiBjb2RlIG9iamVj
dHMgIiIiCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHJhd2NvZGUpOgotICAgICAgICBpZiBub3Qg
aGFzYXR0cihyYXdjb2RlLCAiY29fZmlsZW5hbWUiKToKLSAgICAgICAgICAgIHJhd2NvZGUgPSBn
ZXRyYXdjb2RlKHJhd2NvZGUpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuZmlsZW5h
bWUgPSByYXdjb2RlLmNvX2ZpbGVuYW1lCi0gICAgICAgICAgICBzZWxmLmZpcnN0bGluZW5vID0g
cmF3Y29kZS5jb19maXJzdGxpbmVubyAtIDEKLSAgICAgICAgICAgIHNlbGYubmFtZSA9IHJhd2Nv
ZGUuY29fbmFtZQotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICBy
YWlzZSBUeXBlRXJyb3IoIm5vdCBhIGNvZGUgb2JqZWN0OiAlciIgJShyYXdjb2RlLCkpCi0gICAg
ICAgIHNlbGYucmF3ID0gcmF3Y29kZQotCi0gICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6Ci0g
ICAgICAgIHJldHVybiBzZWxmLnJhdyA9PSBvdGhlci5yYXcKLQotICAgIGRlZiBfX25lX18oc2Vs
Ziwgb3RoZXIpOgotICAgICAgICByZXR1cm4gbm90IHNlbGYgPT0gb3RoZXIKLQotICAgIEBwcm9w
ZXJ0eQotICAgIGRlZiBwYXRoKHNlbGYpOgotICAgICAgICAiIiIgcmV0dXJuIGEgcGF0aCBvYmpl
Y3QgcG9pbnRpbmcgdG8gc291cmNlIGNvZGUgKG5vdGUgdGhhdCBpdAotICAgICAgICBtaWdodCBu
b3QgcG9pbnQgdG8gYW4gYWN0dWFsbHkgZXhpc3RpbmcgZmlsZSkuICIiIgotICAgICAgICBwID0g
cHkucGF0aC5sb2NhbChzZWxmLnJhdy5jb19maWxlbmFtZSkKLSAgICAgICAgIyBtYXliZSBkb24n
dCB0cnkgdGhpcyBjaGVja2luZwotICAgICAgICBpZiBub3QgcC5jaGVjaygpOgotICAgICAgICAg
ICAgIyBYWFggbWF5YmUgdHJ5IGhhcmRlciBsaWtlIHRoZSB3ZWlyZCBsb2dpYwotICAgICAgICAg
ICAgIyBpbiB0aGUgc3RhbmRhcmQgbGliIFtsaW5lY2FjaGUudXBkYXRlY2FjaGVdIGRvZXM/Ci0g
ICAgICAgICAgICBwID0gc2VsZi5yYXcuY29fZmlsZW5hbWUKLSAgICAgICAgcmV0dXJuIHAKLQot
ICAgIEBwcm9wZXJ0eQotICAgIGRlZiBmdWxsc291cmNlKHNlbGYpOgotICAgICAgICAiIiIgcmV0
dXJuIGEgX3B5dGVzdC5fY29kZS5Tb3VyY2Ugb2JqZWN0IGZvciB0aGUgZnVsbCBzb3VyY2UgZmls
ZSBvZiB0aGUgY29kZQotICAgICAgICAiIiIKLSAgICAgICAgZnJvbSBfcHl0ZXN0Ll9jb2RlIGlt
cG9ydCBzb3VyY2UKLSAgICAgICAgZnVsbCwgXyA9IHNvdXJjZS5maW5kc291cmNlKHNlbGYucmF3
KQotICAgICAgICByZXR1cm4gZnVsbAotCi0gICAgZGVmIHNvdXJjZShzZWxmKToKLSAgICAgICAg
IiIiIHJldHVybiBhIF9weXRlc3QuX2NvZGUuU291cmNlIG9iamVjdCBmb3IgdGhlIGNvZGUgb2Jq
ZWN0J3Mgc291cmNlIG9ubHkKLSAgICAgICAgIiIiCi0gICAgICAgICMgcmV0dXJuIHNvdXJjZSBv
bmx5IGZvciB0aGF0IHBhcnQgb2YgY29kZQotICAgICAgICBpbXBvcnQgX3B5dGVzdC5fY29kZQot
ICAgICAgICByZXR1cm4gX3B5dGVzdC5fY29kZS5Tb3VyY2Uoc2VsZi5yYXcpCi0KLSAgICBkZWYg
Z2V0YXJncyhzZWxmLCB2YXI9RmFsc2UpOgotICAgICAgICAiIiIgcmV0dXJuIGEgdHVwbGUgd2l0
aCB0aGUgYXJndW1lbnQgbmFtZXMgZm9yIHRoZSBjb2RlIG9iamVjdAotCi0gICAgICAgICAgICBp
ZiAndmFyJyBpcyBzZXQgVHJ1ZSBhbHNvIHJldHVybiB0aGUgbmFtZXMgb2YgdGhlIHZhcmlhYmxl
IGFuZAotICAgICAgICAgICAga2V5d29yZCBhcmd1bWVudHMgd2hlbiBwcmVzZW50Ci0gICAgICAg
ICIiIgotICAgICAgICAjIGhhbmRmdWxsIHNob3J0Y3V0IGZvciBnZXR0aW5nIGFyZ3MKLSAgICAg
ICAgcmF3ID0gc2VsZi5yYXcKLSAgICAgICAgYXJnY291bnQgPSByYXcuY29fYXJnY291bnQKLSAg
ICAgICAgaWYgdmFyOgotICAgICAgICAgICAgYXJnY291bnQgKz0gcmF3LmNvX2ZsYWdzICYgQ09f
VkFSQVJHUwotICAgICAgICAgICAgYXJnY291bnQgKz0gcmF3LmNvX2ZsYWdzICYgQ09fVkFSS0VZ
V09SRFMKLSAgICAgICAgcmV0dXJuIHJhdy5jb192YXJuYW1lc1s6YXJnY291bnRdCi0KLWNsYXNz
IEZyYW1lKG9iamVjdCk6Ci0gICAgIiIiV3JhcHBlciBhcm91bmQgYSBQeXRob24gZnJhbWUgaG9s
ZGluZyBmX2xvY2FscyBhbmQgZl9nbG9iYWxzCi0gICAgaW4gd2hpY2ggZXhwcmVzc2lvbnMgY2Fu
IGJlIGV2YWx1YXRlZC4iIiIKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmcmFtZSk6Ci0gICAg
ICAgIHNlbGYubGluZW5vID0gZnJhbWUuZl9saW5lbm8gLSAxCi0gICAgICAgIHNlbGYuZl9nbG9i
YWxzID0gZnJhbWUuZl9nbG9iYWxzCi0gICAgICAgIHNlbGYuZl9sb2NhbHMgPSBmcmFtZS5mX2xv
Y2FscwotICAgICAgICBzZWxmLnJhdyA9IGZyYW1lCi0gICAgICAgIHNlbGYuY29kZSA9IENvZGUo
ZnJhbWUuZl9jb2RlKQotCi0gICAgQHByb3BlcnR5Ci0gICAgZGVmIHN0YXRlbWVudChzZWxmKToK
LSAgICAgICAgIiIiIHN0YXRlbWVudCB0aGlzIGZyYW1lIGlzIGF0ICIiIgotICAgICAgICBpbXBv
cnQgX3B5dGVzdC5fY29kZQotICAgICAgICBpZiBzZWxmLmNvZGUuZnVsbHNvdXJjZSBpcyBOb25l
OgotICAgICAgICAgICAgcmV0dXJuIF9weXRlc3QuX2NvZGUuU291cmNlKCIiKQotICAgICAgICBy
ZXR1cm4gc2VsZi5jb2RlLmZ1bGxzb3VyY2UuZ2V0c3RhdGVtZW50KHNlbGYubGluZW5vKQotCi0g
ICAgZGVmIGV2YWwoc2VsZiwgY29kZSwgKip2YXJzKToKLSAgICAgICAgIiIiIGV2YWx1YXRlICdj
b2RlJyBpbiB0aGUgZnJhbWUKLQotICAgICAgICAgICAgJ3ZhcnMnIGFyZSBvcHRpb25hbCBhZGRp
dGlvbmFsIGxvY2FsIHZhcmlhYmxlcwotCi0gICAgICAgICAgICByZXR1cm5zIHRoZSByZXN1bHQg
b2YgdGhlIGV2YWx1YXRpb24KLSAgICAgICAgIiIiCi0gICAgICAgIGZfbG9jYWxzID0gc2VsZi5m
X2xvY2Fscy5jb3B5KCkKLSAgICAgICAgZl9sb2NhbHMudXBkYXRlKHZhcnMpCi0gICAgICAgIHJl
dHVybiBldmFsKGNvZGUsIHNlbGYuZl9nbG9iYWxzLCBmX2xvY2FscykKLQotICAgIGRlZiBleGVj
XyhzZWxmLCBjb2RlLCAqKnZhcnMpOgotICAgICAgICAiIiIgZXhlYyAnY29kZScgaW4gdGhlIGZy
YW1lCi0KLSAgICAgICAgICAgICd2YXJzJyBhcmUgb3B0aW9uYTsgYWRkaXRpb25hbCBsb2NhbCB2
YXJpYWJsZXMKLSAgICAgICAgIiIiCi0gICAgICAgIGZfbG9jYWxzID0gc2VsZi5mX2xvY2Fscy5j
b3B5KCkKLSAgICAgICAgZl9sb2NhbHMudXBkYXRlKHZhcnMpCi0gICAgICAgIHB5LmJ1aWx0aW4u
ZXhlY18oY29kZSwgc2VsZi5mX2dsb2JhbHMsIGZfbG9jYWxzICkKLQotICAgIGRlZiByZXByKHNl
bGYsIG9iamVjdCk6Ci0gICAgICAgICIiIiByZXR1cm4gYSAnc2FmZScgKG5vbi1yZWN1cnNpdmUs
IG9uZS1saW5lKSBzdHJpbmcgcmVwciBmb3IgJ29iamVjdCcKLSAgICAgICAgIiIiCi0gICAgICAg
IHJldHVybiBweS5pby5zYWZlcmVwcihvYmplY3QpCi0KLSAgICBkZWYgaXNfdHJ1ZShzZWxmLCBv
YmplY3QpOgotICAgICAgICByZXR1cm4gb2JqZWN0Ci0KLSAgICBkZWYgZ2V0YXJncyhzZWxmLCB2
YXI9RmFsc2UpOgotICAgICAgICAiIiIgcmV0dXJuIGEgbGlzdCBvZiB0dXBsZXMgKG5hbWUsIHZh
bHVlKSBmb3IgYWxsIGFyZ3VtZW50cwotCi0gICAgICAgICAgICBpZiAndmFyJyBpcyBzZXQgVHJ1
ZSBhbHNvIGluY2x1ZGUgdGhlIHZhcmlhYmxlIGFuZCBrZXl3b3JkCi0gICAgICAgICAgICBhcmd1
bWVudHMgd2hlbiBwcmVzZW50Ci0gICAgICAgICIiIgotICAgICAgICByZXR2YWwgPSBbXQotICAg
ICAgICBmb3IgYXJnIGluIHNlbGYuY29kZS5nZXRhcmdzKHZhcik6Ci0gICAgICAgICAgICB0cnk6
Ci0gICAgICAgICAgICAgICAgcmV0dmFsLmFwcGVuZCgoYXJnLCBzZWxmLmZfbG9jYWxzW2FyZ10p
KQotICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAgICAgICAgIHBhc3MgICAg
ICMgdGhpcyBjYW4gb2NjdXIgd2hlbiB1c2luZyBQc3ljbwotICAgICAgICByZXR1cm4gcmV0dmFs
Ci0KLWNsYXNzIFRyYWNlYmFja0VudHJ5KG9iamVjdCk6Ci0gICAgIiIiIGEgc2luZ2xlIGVudHJ5
IGluIGEgdHJhY2ViYWNrICIiIgotCi0gICAgX3JlcHJfc3R5bGUgPSBOb25lCi0gICAgZXhwcmlu
Zm8gPSBOb25lCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgcmF3ZW50cnkpOgotICAgICAgICBz
ZWxmLl9yYXdlbnRyeSA9IHJhd2VudHJ5Ci0gICAgICAgIHNlbGYubGluZW5vID0gcmF3ZW50cnku
dGJfbGluZW5vIC0gMQotCi0gICAgZGVmIHNldF9yZXByX3N0eWxlKHNlbGYsIG1vZGUpOgotICAg
ICAgICBhc3NlcnQgbW9kZSBpbiAoInNob3J0IiwgImxvbmciKQotICAgICAgICBzZWxmLl9yZXBy
X3N0eWxlID0gbW9kZQotCi0gICAgQHByb3BlcnR5Ci0gICAgZGVmIGZyYW1lKHNlbGYpOgotICAg
ICAgICBpbXBvcnQgX3B5dGVzdC5fY29kZQotICAgICAgICByZXR1cm4gX3B5dGVzdC5fY29kZS5G
cmFtZShzZWxmLl9yYXdlbnRyeS50Yl9mcmFtZSkKLQotICAgIEBwcm9wZXJ0eQotICAgIGRlZiBy
ZWxsaW5lKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5saW5lbm8gLSBzZWxmLmZyYW1lLmNv
ZGUuZmlyc3RsaW5lbm8KLQotICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJu
ICI8VHJhY2ViYWNrRW50cnkgJXM6JWQ+IiAlKHNlbGYuZnJhbWUuY29kZS5wYXRoLCBzZWxmLmxp
bmVubysxKQotCi0gICAgQHByb3BlcnR5Ci0gICAgZGVmIHN0YXRlbWVudChzZWxmKToKLSAgICAg
ICAgIiIiIF9weXRlc3QuX2NvZGUuU291cmNlIG9iamVjdCBmb3IgdGhlIGN1cnJlbnQgc3RhdGVt
ZW50ICIiIgotICAgICAgICBzb3VyY2UgPSBzZWxmLmZyYW1lLmNvZGUuZnVsbHNvdXJjZQotICAg
ICAgICByZXR1cm4gc291cmNlLmdldHN0YXRlbWVudChzZWxmLmxpbmVubykKLQotICAgIEBwcm9w
ZXJ0eQotICAgIGRlZiBwYXRoKHNlbGYpOgotICAgICAgICAiIiIgcGF0aCB0byB0aGUgc291cmNl
IGNvZGUgIiIiCi0gICAgICAgIHJldHVybiBzZWxmLmZyYW1lLmNvZGUucGF0aAotCi0gICAgZGVm
IGdldGxvY2FscyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuZnJhbWUuZl9sb2NhbHMKLSAg
ICBsb2NhbHMgPSBwcm9wZXJ0eShnZXRsb2NhbHMsIE5vbmUsIE5vbmUsICJsb2NhbHMgb2YgdW5k
ZXJsYXlpbmcgZnJhbWUiKQotCi0gICAgZGVmIHJlaW50ZXJwcmV0KHNlbGYpOgotICAgICAgICAi
IiJSZWludGVycHJldCB0aGUgZmFpbGluZyBzdGF0ZW1lbnQgYW5kIHJldHVybnMgYSBkZXRhaWxl
ZCBpbmZvcm1hdGlvbgotICAgICAgICAgICBhYm91dCB3aGF0IG9wZXJhdGlvbnMgYXJlIHBlcmZv
cm1lZC4iIiIKLSAgICAgICAgZnJvbSBfcHl0ZXN0LmFzc2VydGlvbi5yZWludGVycHJldCBpbXBv
cnQgcmVpbnRlcnByZXQKLSAgICAgICAgaWYgc2VsZi5leHByaW5mbyBpcyBOb25lOgotICAgICAg
ICAgICAgc291cmNlID0gcHkuYnVpbHRpbi5fdG90ZXh0KHNlbGYuc3RhdGVtZW50KS5zdHJpcCgp
Ci0gICAgICAgICAgICB4ID0gcmVpbnRlcnByZXQoc291cmNlLCBzZWxmLmZyYW1lLCBzaG91bGRf
ZmFpbD1UcnVlKQotICAgICAgICAgICAgaWYgbm90IHB5LmJ1aWx0aW4uX2lzdGV4dCh4KToKLSAg
ICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImludGVycHJldCByZXR1cm5lZCBub24tc3Ry
aW5nICVyIiAlICh4LCkpCi0gICAgICAgICAgICBzZWxmLmV4cHJpbmZvID0geAotICAgICAgICBy
ZXR1cm4gc2VsZi5leHByaW5mbwotCi0gICAgZGVmIGdldGZpcnN0bGluZXNvdXJjZShzZWxmKToK
LSAgICAgICAgIyBvbiBKeXRob24gdGhpcyBmaXJzdGxpbmVubyBjYW4gYmUgLTEgYXBwYXJlbnRs
eQotICAgICAgICByZXR1cm4gbWF4KHNlbGYuZnJhbWUuY29kZS5maXJzdGxpbmVubywgMCkKLQot
ICAgIGRlZiBnZXRzb3VyY2Uoc2VsZiwgYXN0Y2FjaGU9Tm9uZSk6Ci0gICAgICAgICIiIiByZXR1
cm4gZmFpbGluZyBzb3VyY2UgY29kZS4gIiIiCi0gICAgICAgICMgd2UgdXNlIHRoZSBwYXNzZWQg
aW4gYXN0Y2FjaGUgdG8gbm90IHJlcGFyc2UgYXN0dHJlZXMKLSAgICAgICAgIyB3aXRoaW4gZXhj
ZXB0aW9uIGluZm8gcHJpbnRpbmcKLSAgICAgICAgZnJvbSBfcHl0ZXN0Ll9jb2RlLnNvdXJjZSBp
bXBvcnQgZ2V0c3RhdGVtZW50cmFuZ2VfYXN0Ci0gICAgICAgIHNvdXJjZSA9IHNlbGYuZnJhbWUu
Y29kZS5mdWxsc291cmNlCi0gICAgICAgIGlmIHNvdXJjZSBpcyBOb25lOgotICAgICAgICAgICAg
cmV0dXJuIE5vbmUKLSAgICAgICAga2V5ID0gYXN0bm9kZSA9IE5vbmUKLSAgICAgICAgaWYgYXN0
Y2FjaGUgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBrZXkgPSBzZWxmLmZyYW1lLmNvZGUucGF0
aAotICAgICAgICAgICAgaWYga2V5IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIGFzdG5v
ZGUgPSBhc3RjYWNoZS5nZXQoa2V5LCBOb25lKQotICAgICAgICBzdGFydCA9IHNlbGYuZ2V0Zmly
c3RsaW5lc291cmNlKCkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgYXN0bm9kZSwgXywgZW5k
ID0gZ2V0c3RhdGVtZW50cmFuZ2VfYXN0KHNlbGYubGluZW5vLCBzb3VyY2UsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXN0bm9kZT1hc3Rub2Rl
KQotICAgICAgICBleGNlcHQgU3ludGF4RXJyb3I6Ci0gICAgICAgICAgICBlbmQgPSBzZWxmLmxp
bmVubyArIDEKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGlmIGtleSBpcyBub3QgTm9uZToK
LSAgICAgICAgICAgICAgICBhc3RjYWNoZVtrZXldID0gYXN0bm9kZQotICAgICAgICByZXR1cm4g
c291cmNlW3N0YXJ0OmVuZF0KLQotICAgIHNvdXJjZSA9IHByb3BlcnR5KGdldHNvdXJjZSkKLQot
ICAgIGRlZiBpc2hpZGRlbihzZWxmKToKLSAgICAgICAgIiIiIHJldHVybiBUcnVlIGlmIHRoZSBj
dXJyZW50IGZyYW1lIGhhcyBhIHZhciBfX3RyYWNlYmFja2hpZGVfXwotICAgICAgICAgICAgcmVz
b2x2aW5nIHRvIFRydWUKLQotICAgICAgICAgICAgbW9zdGx5IGZvciBpbnRlcm5hbCB1c2UKLSAg
ICAgICAgIiIiCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLmZyYW1lLmZf
bG9jYWxzWydfX3RyYWNlYmFja2hpZGVfXyddCi0gICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAg
ICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5mcmFtZS5mX2dsb2Jh
bHNbJ19fdHJhY2ViYWNraGlkZV9fJ10KLSAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAg
ICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgIGRlZiBfX3N0cl9fKHNlbGYpOgotICAg
ICAgICB0cnk6Ci0gICAgICAgICAgICBmbiA9IHN0cihzZWxmLnBhdGgpCi0gICAgICAgIGV4Y2Vw
dCBweS5lcnJvci5FcnJvcjoKLSAgICAgICAgICAgIGZuID0gJz8/PycKLSAgICAgICAgbmFtZSA9
IHNlbGYuZnJhbWUuY29kZS5uYW1lCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGxpbmUgPSBz
dHIoc2VsZi5zdGF0ZW1lbnQpLmxzdHJpcCgpCi0gICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVy
cnVwdDoKLSAgICAgICAgICAgIHJhaXNlCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIGxp
bmUgPSAiPz8/IgotICAgICAgICByZXR1cm4gIiAgRmlsZSAlcjolZCBpbiAlc1xuICAlc1xuIiAl
KGZuLCBzZWxmLmxpbmVubysxLCBuYW1lLCBsaW5lKQotCi0gICAgZGVmIG5hbWUoc2VsZik6Ci0g
ICAgICAgIHJldHVybiBzZWxmLmZyYW1lLmNvZGUucmF3LmNvX25hbWUKLSAgICBuYW1lID0gcHJv
cGVydHkobmFtZSwgTm9uZSwgTm9uZSwgImNvX25hbWUgb2YgdW5kZXJsYXlpbmcgY29kZSIpCi0K
LWNsYXNzIFRyYWNlYmFjayhsaXN0KToKLSAgICAiIiIgVHJhY2ViYWNrIG9iamVjdHMgZW5jYXBz
dWxhdGUgYW5kIG9mZmVyIGhpZ2hlciBsZXZlbAotICAgICAgICBhY2Nlc3MgdG8gVHJhY2ViYWNr
IGVudHJpZXMuCi0gICAgIiIiCi0gICAgRW50cnkgPSBUcmFjZWJhY2tFbnRyeQotICAgIGRlZiBf
X2luaXRfXyhzZWxmLCB0Yik6Ci0gICAgICAgICIiIiBpbml0aWFsaXplIGZyb20gZ2l2ZW4gcHl0
aG9uIHRyYWNlYmFjayBvYmplY3QuICIiIgotICAgICAgICBpZiBoYXNhdHRyKHRiLCAndGJfbmV4
dCcpOgotICAgICAgICAgICAgZGVmIGYoY3VyKToKLSAgICAgICAgICAgICAgICB3aGlsZSBjdXIg
aXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIHlpZWxkIHNlbGYuRW50cnkoY3VyKQot
ICAgICAgICAgICAgICAgICAgICBjdXIgPSBjdXIudGJfbmV4dAotICAgICAgICAgICAgbGlzdC5f
X2luaXRfXyhzZWxmLCBmKHRiKSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGxpc3QuX19p
bml0X18oc2VsZiwgdGIpCi0KLSAgICBkZWYgY3V0KHNlbGYsIHBhdGg9Tm9uZSwgbGluZW5vPU5v
bmUsIGZpcnN0bGluZW5vPU5vbmUsIGV4Y2x1ZGVwYXRoPU5vbmUpOgotICAgICAgICAiIiIgcmV0
dXJuIGEgVHJhY2ViYWNrIGluc3RhbmNlIHdyYXBwaW5nIHBhcnQgb2YgdGhpcyBUcmFjZWJhY2sK
LQotICAgICAgICAgICAgYnkgcHJvdmRpbmcgYW55IGNvbWJpbmF0aW9uIG9mIHBhdGgsIGxpbmVu
byBhbmQgZmlyc3RsaW5lbm8sIHRoZQotICAgICAgICAgICAgZmlyc3QgZnJhbWUgdG8gc3RhcnQg
dGhlIHRvLWJlLXJldHVybmVkIHRyYWNlYmFjayBpcyBkZXRlcm1pbmVkCi0KLSAgICAgICAgICAg
IHRoaXMgYWxsb3dzIGN1dHRpbmcgdGhlIGZpcnN0IHBhcnQgb2YgYSBUcmFjZWJhY2sgaW5zdGFu
Y2UgZS5nLgotICAgICAgICAgICAgZm9yIGZvcm1hdHRpbmcgcmVhc29ucyAocmVtb3Zpbmcgc29t
ZSB1bmludGVyZXN0aW5nIGJpdHMgdGhhdCBkZWFsCi0gICAgICAgICAgICB3aXRoIGhhbmRsaW5n
IG9mIHRoZSBleGNlcHRpb24vdHJhY2ViYWNrKQotICAgICAgICAiIiIKLSAgICAgICAgZm9yIHgg
aW4gc2VsZjoKLSAgICAgICAgICAgIGNvZGUgPSB4LmZyYW1lLmNvZGUKLSAgICAgICAgICAgIGNv
ZGVwYXRoID0gY29kZS5wYXRoCi0gICAgICAgICAgICBpZiAoKHBhdGggaXMgTm9uZSBvciBjb2Rl
cGF0aCA9PSBwYXRoKSBhbmQKLSAgICAgICAgICAgICAgICAoZXhjbHVkZXBhdGggaXMgTm9uZSBv
ciBub3QgaGFzYXR0cihjb2RlcGF0aCwgJ3JlbHRvJykgb3IKLSAgICAgICAgICAgICAgICAgbm90
IGNvZGVwYXRoLnJlbHRvKGV4Y2x1ZGVwYXRoKSkgYW5kCi0gICAgICAgICAgICAgICAgKGxpbmVu
byBpcyBOb25lIG9yIHgubGluZW5vID09IGxpbmVubykgYW5kCi0gICAgICAgICAgICAgICAgKGZp
cnN0bGluZW5vIGlzIE5vbmUgb3IgeC5mcmFtZS5jb2RlLmZpcnN0bGluZW5vID09IGZpcnN0bGlu
ZW5vKSk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFRyYWNlYmFjayh4Ll9yYXdlbnRyeSkKLSAg
ICAgICAgcmV0dXJuIHNlbGYKLQotICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgotICAg
ICAgICB2YWwgPSBzdXBlcihUcmFjZWJhY2ssIHNlbGYpLl9fZ2V0aXRlbV9fKGtleSkKLSAgICAg
ICAgaWYgaXNpbnN0YW5jZShrZXksIHR5cGUoc2xpY2UoMCkpKToKLSAgICAgICAgICAgIHZhbCA9
IHNlbGYuX19jbGFzc19fKHZhbCkKLSAgICAgICAgcmV0dXJuIHZhbAotCi0gICAgZGVmIGZpbHRl
cihzZWxmLCBmbj1sYW1iZGEgeDogbm90IHguaXNoaWRkZW4oKSk6Ci0gICAgICAgICIiIiByZXR1
cm4gYSBUcmFjZWJhY2sgaW5zdGFuY2Ugd2l0aCBjZXJ0YWluIGl0ZW1zIHJlbW92ZWQKLQotICAg
ICAgICAgICAgZm4gaXMgYSBmdW5jdGlvbiB0aGF0IGdldHMgYSBzaW5nbGUgYXJndW1lbnQsIGEg
VHJhY2ViYWNrSXRlbQotICAgICAgICAgICAgaW5zdGFuY2UsIGFuZCBzaG91bGQgcmV0dXJuIFRy
dWUgd2hlbiB0aGUgaXRlbSBzaG91bGQgYmUgYWRkZWQKLSAgICAgICAgICAgIHRvIHRoZSBUcmFj
ZWJhY2ssIEZhbHNlIHdoZW4gbm90Ci0KLSAgICAgICAgICAgIGJ5IGRlZmF1bHQgdGhpcyByZW1v
dmVzIGFsbCB0aGUgVHJhY2ViYWNrSXRlbXMgd2hpY2ggYXJlIGhpZGRlbgotICAgICAgICAgICAg
KHNlZSBpc2hpZGRlbigpIGFib3ZlKQotICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJuIFRyYWNl
YmFjayhmaWx0ZXIoZm4sIHNlbGYpKQotCi0gICAgZGVmIGdldGNyYXNoZW50cnkoc2VsZik6Ci0g
ICAgICAgICIiIiByZXR1cm4gbGFzdCBub24taGlkZGVuIHRyYWNlYmFjayBlbnRyeSB0aGF0IGxl
YWQKLSAgICAgICAgdG8gdGhlIGV4Y2VwdGlvbiBvZiBhIHRyYWNlYmFjay4KLSAgICAgICAgIiIi
Ci0gICAgICAgIGZvciBpIGluIHJhbmdlKC0xLCAtbGVuKHNlbGYpLTEsIC0xKToKLSAgICAgICAg
ICAgIGVudHJ5ID0gc2VsZltpXQotICAgICAgICAgICAgaWYgbm90IGVudHJ5LmlzaGlkZGVuKCk6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5Ci0gICAgICAgIHJldHVybiBzZWxmWy0xXQot
Ci0gICAgZGVmIHJlY3Vyc2lvbmluZGV4KHNlbGYpOgotICAgICAgICAiIiIgcmV0dXJuIHRoZSBp
bmRleCBvZiB0aGUgZnJhbWUvVHJhY2ViYWNrSXRlbSB3aGVyZSByZWN1cnNpb24KLSAgICAgICAg
ICAgIG9yaWdpbmF0ZXMgaWYgYXBwcm9wcmlhdGUsIE5vbmUgaWYgbm8gcmVjdXJzaW9uIG9jY3Vy
cmVkCi0gICAgICAgICIiIgotICAgICAgICBjYWNoZSA9IHt9Ci0gICAgICAgIGZvciBpLCBlbnRy
eSBpbiBlbnVtZXJhdGUoc2VsZik6Ci0gICAgICAgICAgICAjIGlkIGZvciB0aGUgY29kZS5yYXcg
aXMgbmVlZGVkIHRvIHdvcmsgYXJvdW5kCi0gICAgICAgICAgICAjIHRoZSBzdHJhbmdlIG1ldGFw
cm9ncmFtbWluZyBpbiB0aGUgZGVjb3JhdG9yIGxpYiBmcm9tIHB5cGkKLSAgICAgICAgICAgICMg
d2hpY2ggZ2VuZXJhdGVzIGNvZGUgb2JqZWN0cyB0aGF0IGhhdmUgaGFzaC92YWx1ZSBlcXVhbGl0
eQotICAgICAgICAgICAgI1hYWCBuZWVkcyBhIHRlc3QKLSAgICAgICAgICAgIGtleSA9IGVudHJ5
LmZyYW1lLmNvZGUucGF0aCwgaWQoZW50cnkuZnJhbWUuY29kZS5yYXcpLCBlbnRyeS5saW5lbm8K
LSAgICAgICAgICAgICNwcmludCAiY2hlY2tpbmcgZm9yIHJlY3Vyc2lvbiBhdCIsIGtleQotICAg
ICAgICAgICAgbCA9IGNhY2hlLnNldGRlZmF1bHQoa2V5LCBbXSkKLSAgICAgICAgICAgIGlmIGw6
Ci0gICAgICAgICAgICAgICAgZiA9IGVudHJ5LmZyYW1lCi0gICAgICAgICAgICAgICAgbG9jID0g
Zi5mX2xvY2FscwotICAgICAgICAgICAgICAgIGZvciBvdGhlcmxvYyBpbiBsOgotICAgICAgICAg
ICAgICAgICAgICBpZiBmLmlzX3RydWUoZi5ldmFsKGNvX2VxdWFsLAotICAgICAgICAgICAgICAg
ICAgICAgICAgX19yZWN1cnNpb25jYWNoZV9sb2NhbHNfMT1sb2MsCi0gICAgICAgICAgICAgICAg
ICAgICAgICBfX3JlY3Vyc2lvbmNhY2hlX2xvY2Fsc18yPW90aGVybG9jKSk6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gaQotICAgICAgICAgICAgbC5hcHBlbmQoZW50cnkuZnJhbWUu
Zl9sb2NhbHMpCi0gICAgICAgIHJldHVybiBOb25lCi0KLWNvX2VxdWFsID0gY29tcGlsZSgnX19y
ZWN1cnNpb25jYWNoZV9sb2NhbHNfMSA9PSBfX3JlY3Vyc2lvbmNhY2hlX2xvY2Fsc18yJywKLSAg
ICAgICAgICAgICAgICAgICAnPycsICdldmFsJykKLQotY2xhc3MgRXhjZXB0aW9uSW5mbyhvYmpl
Y3QpOgotICAgICIiIiB3cmFwcyBzeXMuZXhjX2luZm8oKSBvYmplY3RzIGFuZCBvZmZlcnMKLSAg
ICAgICAgaGVscCBmb3IgbmF2aWdhdGluZyB0aGUgdHJhY2ViYWNrLgotICAgICIiIgotICAgIF9z
dHJpcHRleHQgPSAnJwotICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0dXA9Tm9uZSwgZXhwcmluZm89
Tm9uZSk6Ci0gICAgICAgIGltcG9ydCBfcHl0ZXN0Ll9jb2RlCi0gICAgICAgIGlmIHR1cCBpcyBO
b25lOgotICAgICAgICAgICAgdHVwID0gc3lzLmV4Y19pbmZvKCkKLSAgICAgICAgICAgIGlmIGV4
cHJpbmZvIGlzIE5vbmUgYW5kIGlzaW5zdGFuY2UodHVwWzFdLCBBc3NlcnRpb25FcnJvcik6Ci0g
ICAgICAgICAgICAgICAgZXhwcmluZm8gPSBnZXRhdHRyKHR1cFsxXSwgJ21zZycsIE5vbmUpCi0g
ICAgICAgICAgICAgICAgaWYgZXhwcmluZm8gaXMgTm9uZToKLSAgICAgICAgICAgICAgICAgICAg
ZXhwcmluZm8gPSBzdHIodHVwWzFdKQotICAgICAgICAgICAgICAgIGlmIGV4cHJpbmZvIGFuZCBl
eHByaW5mby5zdGFydHN3aXRoKCdhc3NlcnQgJyk6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYu
X3N0cmlwdGV4dCA9ICdBc3NlcnRpb25FcnJvcjogJwotICAgICAgICBzZWxmLl9leGNpbmZvID0g
dHVwCi0gICAgICAgICM6IHRoZSBleGNlcHRpb24gY2xhc3MKLSAgICAgICAgc2VsZi50eXBlID0g
dHVwWzBdCi0gICAgICAgICM6IHRoZSBleGNlcHRpb24gaW5zdGFuY2UKLSAgICAgICAgc2VsZi52
YWx1ZSA9IHR1cFsxXQotICAgICAgICAjOiB0aGUgZXhjZXB0aW9uIHJhdyB0cmFjZWJhY2sKLSAg
ICAgICAgc2VsZi50YiA9IHR1cFsyXQotICAgICAgICAjOiB0aGUgZXhjZXB0aW9uIHR5cGUgbmFt
ZQotICAgICAgICBzZWxmLnR5cGVuYW1lID0gc2VsZi50eXBlLl9fbmFtZV9fCi0gICAgICAgICM6
IHRoZSBleGNlcHRpb24gdHJhY2ViYWNrIChfcHl0ZXN0Ll9jb2RlLlRyYWNlYmFjayBpbnN0YW5j
ZSkKLSAgICAgICAgc2VsZi50cmFjZWJhY2sgPSBfcHl0ZXN0Ll9jb2RlLlRyYWNlYmFjayhzZWxm
LnRiKQotCi0gICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gIjxFeGNlcHRp
b25JbmZvICVzIHRibGVuPSVkPiIgJSAoc2VsZi50eXBlbmFtZSwgbGVuKHNlbGYudHJhY2ViYWNr
KSkKLQotICAgIGRlZiBleGNvbmx5KHNlbGYsIHRyeXNob3J0PUZhbHNlKToKLSAgICAgICAgIiIi
IHJldHVybiB0aGUgZXhjZXB0aW9uIGFzIGEgc3RyaW5nCi0KLSAgICAgICAgICAgIHdoZW4gJ3Ry
eXNob3J0JyByZXNvbHZlcyB0byBUcnVlLCBhbmQgdGhlIGV4Y2VwdGlvbiBpcyBhCi0gICAgICAg
ICAgICBfcHl0ZXN0Ll9jb2RlLl9Bc3NlcnRpb25FcnJvciwgb25seSB0aGUgYWN0dWFsIGV4Y2Vw
dGlvbiBwYXJ0IG9mCi0gICAgICAgICAgICB0aGUgZXhjZXB0aW9uIHJlcHJlc2VudGF0aW9uIGlz
IHJldHVybmVkIChzbyAnQXNzZXJ0aW9uRXJyb3I6ICcgaXMKLSAgICAgICAgICAgIHJlbW92ZWQg
ZnJvbSB0aGUgYmVnaW5uaW5nKQotICAgICAgICAiIiIKLSAgICAgICAgbGluZXMgPSBmb3JtYXRf
ZXhjZXB0aW9uX29ubHkoc2VsZi50eXBlLCBzZWxmLnZhbHVlKQotICAgICAgICB0ZXh0ID0gJycu
am9pbihsaW5lcykKLSAgICAgICAgdGV4dCA9IHRleHQucnN0cmlwKCkKLSAgICAgICAgaWYgdHJ5
c2hvcnQ6Ci0gICAgICAgICAgICBpZiB0ZXh0LnN0YXJ0c3dpdGgoc2VsZi5fc3RyaXB0ZXh0KToK
LSAgICAgICAgICAgICAgICB0ZXh0ID0gdGV4dFtsZW4oc2VsZi5fc3RyaXB0ZXh0KTpdCi0gICAg
ICAgIHJldHVybiB0ZXh0Ci0KLSAgICBkZWYgZXJyaXNpbnN0YW5jZShzZWxmLCBleGMpOgotICAg
ICAgICAiIiIgcmV0dXJuIFRydWUgaWYgdGhlIGV4Y2VwdGlvbiBpcyBhbiBpbnN0YW5jZSBvZiBl
eGMgIiIiCi0gICAgICAgIHJldHVybiBpc2luc3RhbmNlKHNlbGYudmFsdWUsIGV4YykKLQotICAg
IGRlZiBfZ2V0cmVwcmNyYXNoKHNlbGYpOgotICAgICAgICBleGNvbmx5ID0gc2VsZi5leGNvbmx5
KHRyeXNob3J0PVRydWUpCi0gICAgICAgIGVudHJ5ID0gc2VsZi50cmFjZWJhY2suZ2V0Y3Jhc2hl
bnRyeSgpCi0gICAgICAgIHBhdGgsIGxpbmVubyA9IGVudHJ5LmZyYW1lLmNvZGUucmF3LmNvX2Zp
bGVuYW1lLCBlbnRyeS5saW5lbm8KLSAgICAgICAgcmV0dXJuIFJlcHJGaWxlTG9jYXRpb24ocGF0
aCwgbGluZW5vKzEsIGV4Y29ubHkpCi0KLSAgICBkZWYgZ2V0cmVwcihzZWxmLCBzaG93bG9jYWxz
PUZhbHNlLCBzdHlsZT0ibG9uZyIsCi0gICAgICAgICAgICBhYnNwYXRoPUZhbHNlLCB0YmZpbHRl
cj1UcnVlLCBmdW5jYXJncz1GYWxzZSk6Ci0gICAgICAgICIiIiByZXR1cm4gc3RyKClhYmxlIHJl
cHJlc2VudGF0aW9uIG9mIHRoaXMgZXhjZXB0aW9uIGluZm8uCi0gICAgICAgICAgICBzaG93bG9j
YWxzOiBzaG93IGxvY2FscyBwZXIgdHJhY2ViYWNrIGVudHJ5Ci0gICAgICAgICAgICBzdHlsZTog
bG9uZ3xzaG9ydHxub3xuYXRpdmUgdHJhY2ViYWNrIHN0eWxlCi0gICAgICAgICAgICB0YmZpbHRl
cjogaGlkZSBlbnRyaWVzICh3aGVyZSBfX3RyYWNlYmFja2hpZGVfXyBpcyB0cnVlKQotCi0gICAg
ICAgICAgICBpbiBjYXNlIG9mIHN0eWxlPT1uYXRpdmUsIHRiZmlsdGVyIGFuZCBzaG93bG9jYWxz
IGlzIGlnbm9yZWQuCi0gICAgICAgICIiIgotICAgICAgICBpZiBzdHlsZSA9PSAnbmF0aXZlJzoK
LSAgICAgICAgICAgIHJldHVybiBSZXByRXhjZXB0aW9uSW5mbyhSZXByVHJhY2ViYWNrTmF0aXZl
KAotICAgICAgICAgICAgICAgIHB5LnN0ZC50cmFjZWJhY2suZm9ybWF0X2V4Y2VwdGlvbigKLSAg
ICAgICAgICAgICAgICAgICAgc2VsZi50eXBlLAotICAgICAgICAgICAgICAgICAgICBzZWxmLnZh
bHVlLAotICAgICAgICAgICAgICAgICAgICBzZWxmLnRyYWNlYmFja1swXS5fcmF3ZW50cnksCi0g
ICAgICAgICAgICAgICAgKSksIHNlbGYuX2dldHJlcHJjcmFzaCgpKQotCi0gICAgICAgIGZtdCA9
IEZvcm1hdHRlZEV4Y2luZm8oc2hvd2xvY2Fscz1zaG93bG9jYWxzLCBzdHlsZT1zdHlsZSwKLSAg
ICAgICAgICAgIGFic3BhdGg9YWJzcGF0aCwgdGJmaWx0ZXI9dGJmaWx0ZXIsIGZ1bmNhcmdzPWZ1
bmNhcmdzKQotICAgICAgICByZXR1cm4gZm10LnJlcHJfZXhjaW5mbyhzZWxmKQotCi0gICAgZGVm
IF9fc3RyX18oc2VsZik6Ci0gICAgICAgIGVudHJ5ID0gc2VsZi50cmFjZWJhY2tbLTFdCi0gICAg
ICAgIGxvYyA9IFJlcHJGaWxlTG9jYXRpb24oZW50cnkucGF0aCwgZW50cnkubGluZW5vICsgMSwg
c2VsZi5leGNvbmx5KCkpCi0gICAgICAgIHJldHVybiBzdHIobG9jKQotCi0gICAgZGVmIF9fdW5p
Y29kZV9fKHNlbGYpOgotICAgICAgICBlbnRyeSA9IHNlbGYudHJhY2ViYWNrWy0xXQotICAgICAg
ICBsb2MgPSBSZXByRmlsZUxvY2F0aW9uKGVudHJ5LnBhdGgsIGVudHJ5LmxpbmVubyArIDEsIHNl
bGYuZXhjb25seSgpKQotICAgICAgICByZXR1cm4gdW5pY29kZShsb2MpCi0KLQotY2xhc3MgRm9y
bWF0dGVkRXhjaW5mbyhvYmplY3QpOgotICAgICIiIiBwcmVzZW50aW5nIGluZm9ybWF0aW9uIGFi
b3V0IGZhaWxpbmcgRnVuY3Rpb25zIGFuZCBHZW5lcmF0b3JzLiAiIiIKLSAgICAjIGZvciB0cmFj
ZWJhY2sgZW50cmllcwotICAgIGZsb3dfbWFya2VyID0gIj4iCi0gICAgZmFpbF9tYXJrZXIgPSAi
RSIKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzaG93bG9jYWxzPUZhbHNlLCBzdHlsZT0ibG9u
ZyIsIGFic3BhdGg9VHJ1ZSwgdGJmaWx0ZXI9VHJ1ZSwgZnVuY2FyZ3M9RmFsc2UpOgotICAgICAg
ICBzZWxmLnNob3dsb2NhbHMgPSBzaG93bG9jYWxzCi0gICAgICAgIHNlbGYuc3R5bGUgPSBzdHls
ZQotICAgICAgICBzZWxmLnRiZmlsdGVyID0gdGJmaWx0ZXIKLSAgICAgICAgc2VsZi5mdW5jYXJn
cyA9IGZ1bmNhcmdzCi0gICAgICAgIHNlbGYuYWJzcGF0aCA9IGFic3BhdGgKLSAgICAgICAgc2Vs
Zi5hc3RjYWNoZSA9IHt9Ci0KLSAgICBkZWYgX2dldGluZGVudChzZWxmLCBzb3VyY2UpOgotICAg
ICAgICAjIGZpZ3VyZSBvdXQgaW5kZW50IGZvciBnaXZlbiBzb3VyY2UKLSAgICAgICAgdHJ5Ogot
ICAgICAgICAgICAgcyA9IHN0cihzb3VyY2UuZ2V0c3RhdGVtZW50KGxlbihzb3VyY2UpLTEpKQot
ICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6Ci0gICAgICAgICAgICByYWlzZQotICAg
ICAgICBleGNlcHQ6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgcyA9IHN0cihz
b3VyY2VbLTFdKQotICAgICAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgotICAgICAg
ICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIDAKLSAgICAgICAgcmV0dXJuIDQgKyAobGVuKHMpIC0gbGVuKHMubHN0cmlwKCkpKQotCi0g
ICAgZGVmIF9nZXRlbnRyeXNvdXJjZShzZWxmLCBlbnRyeSk6Ci0gICAgICAgIHNvdXJjZSA9IGVu
dHJ5LmdldHNvdXJjZShzZWxmLmFzdGNhY2hlKQotICAgICAgICBpZiBzb3VyY2UgaXMgbm90IE5v
bmU6Ci0gICAgICAgICAgICBzb3VyY2UgPSBzb3VyY2UuZGVpbmRlbnQoKQotICAgICAgICByZXR1
cm4gc291cmNlCi0KLSAgICBkZWYgX3NhZmVyZXByKHNlbGYsIG9iaik6Ci0gICAgICAgIHJldHVy
biBweS5pby5zYWZlcmVwcihvYmopCi0KLSAgICBkZWYgcmVwcl9hcmdzKHNlbGYsIGVudHJ5KToK
LSAgICAgICAgaWYgc2VsZi5mdW5jYXJnczoKLSAgICAgICAgICAgIGFyZ3MgPSBbXQotICAgICAg
ICAgICAgZm9yIGFyZ25hbWUsIGFyZ3ZhbHVlIGluIGVudHJ5LmZyYW1lLmdldGFyZ3ModmFyPVRy
dWUpOgotICAgICAgICAgICAgICAgIGFyZ3MuYXBwZW5kKChhcmduYW1lLCBzZWxmLl9zYWZlcmVw
cihhcmd2YWx1ZSkpKQotICAgICAgICAgICAgcmV0dXJuIFJlcHJGdW5jQXJncyhhcmdzKQotCi0g
ICAgZGVmIGdldF9zb3VyY2Uoc2VsZiwgc291cmNlLCBsaW5lX2luZGV4PS0xLCBleGNpbmZvPU5v
bmUsIHNob3J0PUZhbHNlKToKLSAgICAgICAgIiIiIHJldHVybiBmb3JtYXR0ZWQgYW5kIG1hcmtl
ZCB1cCBzb3VyY2UgbGluZXMuICIiIgotICAgICAgICBpbXBvcnQgX3B5dGVzdC5fY29kZQotICAg
ICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGlmIHNvdXJjZSBpcyBOb25lIG9yIGxpbmVfaW5kZXgg
Pj0gbGVuKHNvdXJjZS5saW5lcyk6Ci0gICAgICAgICAgICBzb3VyY2UgPSBfcHl0ZXN0Ll9jb2Rl
LlNvdXJjZSgiPz8/IikKLSAgICAgICAgICAgIGxpbmVfaW5kZXggPSAwCi0gICAgICAgIGlmIGxp
bmVfaW5kZXggPCAwOgotICAgICAgICAgICAgbGluZV9pbmRleCArPSBsZW4oc291cmNlKQotICAg
ICAgICBzcGFjZV9wcmVmaXggPSAiICAgICIKLSAgICAgICAgaWYgc2hvcnQ6Ci0gICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoc3BhY2VfcHJlZml4ICsgc291cmNlLmxpbmVzW2xpbmVfaW5kZXhdLnN0
cmlwKCkpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBmb3IgbGluZSBpbiBzb3VyY2UubGlu
ZXNbOmxpbmVfaW5kZXhdOgotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzcGFjZV9wcmVm
aXggKyBsaW5lKQotICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuZmxvd19tYXJrZXIgKyAi
ICAgIiArIHNvdXJjZS5saW5lc1tsaW5lX2luZGV4XSkKLSAgICAgICAgICAgIGZvciBsaW5lIGlu
IHNvdXJjZS5saW5lc1tsaW5lX2luZGV4KzE6XToKLSAgICAgICAgICAgICAgICBsaW5lcy5hcHBl
bmQoc3BhY2VfcHJlZml4ICsgbGluZSkKLSAgICAgICAgaWYgZXhjaW5mbyBpcyBub3QgTm9uZToK
LSAgICAgICAgICAgIGluZGVudCA9IDQgaWYgc2hvcnQgZWxzZSBzZWxmLl9nZXRpbmRlbnQoc291
cmNlKQotICAgICAgICAgICAgbGluZXMuZXh0ZW5kKHNlbGYuZ2V0X2V4Y29ubHkoZXhjaW5mbywg
aW5kZW50PWluZGVudCwgbWFya2FsbD1UcnVlKSkKLSAgICAgICAgcmV0dXJuIGxpbmVzCi0KLSAg
ICBkZWYgZ2V0X2V4Y29ubHkoc2VsZiwgZXhjaW5mbywgaW5kZW50PTQsIG1hcmthbGw9RmFsc2Up
OgotICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGluZGVudCA9ICIgIiAqIGluZGVudAotICAg
ICAgICAjIGdldCB0aGUgcmVhbCBleGNlcHRpb24gaW5mb3JtYXRpb24gb3V0Ci0gICAgICAgIGV4
bGluZXMgPSBleGNpbmZvLmV4Y29ubHkodHJ5c2hvcnQ9VHJ1ZSkuc3BsaXQoJ1xuJykKLSAgICAg
ICAgZmFpbGluZGVudCA9IHNlbGYuZmFpbF9tYXJrZXIgKyBpbmRlbnRbMTpdCi0gICAgICAgIGZv
ciBsaW5lIGluIGV4bGluZXM6Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoZmFpbGluZGVudCAr
IGxpbmUpCi0gICAgICAgICAgICBpZiBub3QgbWFya2FsbDoKLSAgICAgICAgICAgICAgICBmYWls
aW5kZW50ID0gaW5kZW50Ci0gICAgICAgIHJldHVybiBsaW5lcwotCi0gICAgZGVmIHJlcHJfbG9j
YWxzKHNlbGYsIGxvY2Fscyk6Ci0gICAgICAgIGlmIHNlbGYuc2hvd2xvY2FsczoKLSAgICAgICAg
ICAgIGxpbmVzID0gW10KLSAgICAgICAgICAgIGtleXMgPSBbbG9jIGZvciBsb2MgaW4gbG9jYWxz
IGlmIGxvY1swXSAhPSAiQCJdCi0gICAgICAgICAgICBrZXlzLnNvcnQoKQotICAgICAgICAgICAg
Zm9yIG5hbWUgaW4ga2V5czoKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IGxvY2Fsc1tuYW1lXQot
ICAgICAgICAgICAgICAgIGlmIG5hbWUgPT0gJ19fYnVpbHRpbnNfXyc6Ci0gICAgICAgICAgICAg
ICAgICAgIGxpbmVzLmFwcGVuZCgiX19idWlsdGluc19fID0gPGJ1aWx0aW5zPiIpCi0gICAgICAg
ICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgIyBUaGlzIGZvcm1hdHRpbmcgY291
bGQgYWxsIGJlIGhhbmRsZWQgYnkgdGhlCi0gICAgICAgICAgICAgICAgICAgICMgX3JlcHIoKSBm
dW5jdGlvbiwgd2hpY2ggaXMgb25seSByZXBybGliLlJlcHIgaW4KLSAgICAgICAgICAgICAgICAg
ICAgIyBkaXNndWlzZSwgc28gaXMgdmVyeSBjb25maWd1cmFibGUuCi0gICAgICAgICAgICAgICAg
ICAgIHN0cl9yZXByID0gc2VsZi5fc2FmZXJlcHIodmFsdWUpCi0gICAgICAgICAgICAgICAgICAg
ICNpZiBsZW4oc3RyX3JlcHIpIDwgNzAgb3Igbm90IGlzaW5zdGFuY2UodmFsdWUsCi0gICAgICAg
ICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpc3QsIHR1cGxlLCBk
aWN0KSk6Ci0gICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgiJS0xMHMgPSAlcyIgJShu
YW1lLCBzdHJfcmVwcikpCi0gICAgICAgICAgICAgICAgICAgICNlbHNlOgotICAgICAgICAgICAg
ICAgICAgICAjICAgIHNlbGYuX2xpbmUoIiUtMTBzID1cXCIgJSAobmFtZSwpKQotICAgICAgICAg
ICAgICAgICAgICAjICAgICMgWFhYCi0gICAgICAgICAgICAgICAgICAgICMgICAgcHkuc3RkLnBw
cmludC5wcHJpbnQodmFsdWUsIHN0cmVhbT1zZWxmLmV4Y2luZm93cml0ZXIpCi0gICAgICAgICAg
ICByZXR1cm4gUmVwckxvY2FscyhsaW5lcykKLQotICAgIGRlZiByZXByX3RyYWNlYmFja19lbnRy
eShzZWxmLCBlbnRyeSwgZXhjaW5mbz1Ob25lKToKLSAgICAgICAgaW1wb3J0IF9weXRlc3QuX2Nv
ZGUKLSAgICAgICAgc291cmNlID0gc2VsZi5fZ2V0ZW50cnlzb3VyY2UoZW50cnkpCi0gICAgICAg
IGlmIHNvdXJjZSBpcyBOb25lOgotICAgICAgICAgICAgc291cmNlID0gX3B5dGVzdC5fY29kZS5T
b3VyY2UoIj8/PyIpCi0gICAgICAgICAgICBsaW5lX2luZGV4ID0gMAotICAgICAgICBlbHNlOgot
ICAgICAgICAgICAgIyBlbnRyeS5nZXRmaXJzdGxpbmVzb3VyY2UoKSBjYW4gYmUgLTEsIHNob3Vs
ZCBiZSAwIG9uIGp5dGhvbgotICAgICAgICAgICAgbGluZV9pbmRleCA9IGVudHJ5LmxpbmVubyAt
IG1heChlbnRyeS5nZXRmaXJzdGxpbmVzb3VyY2UoKSwgMCkKLQotICAgICAgICBsaW5lcyA9IFtd
Ci0gICAgICAgIHN0eWxlID0gZW50cnkuX3JlcHJfc3R5bGUKLSAgICAgICAgaWYgc3R5bGUgaXMg
Tm9uZToKLSAgICAgICAgICAgIHN0eWxlID0gc2VsZi5zdHlsZQotICAgICAgICBpZiBzdHlsZSBp
biAoInNob3J0IiwgImxvbmciKToKLSAgICAgICAgICAgIHNob3J0ID0gc3R5bGUgPT0gInNob3J0
IgotICAgICAgICAgICAgcmVwcmFyZ3MgPSBzZWxmLnJlcHJfYXJncyhlbnRyeSkgaWYgbm90IHNo
b3J0IGVsc2UgTm9uZQotICAgICAgICAgICAgcyA9IHNlbGYuZ2V0X3NvdXJjZShzb3VyY2UsIGxp
bmVfaW5kZXgsIGV4Y2luZm8sIHNob3J0PXNob3J0KQotICAgICAgICAgICAgbGluZXMuZXh0ZW5k
KHMpCi0gICAgICAgICAgICBpZiBzaG9ydDoKLSAgICAgICAgICAgICAgICBtZXNzYWdlID0gImlu
ICVzIiAlKGVudHJ5Lm5hbWUpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIG1l
c3NhZ2UgPSBleGNpbmZvIGFuZCBleGNpbmZvLnR5cGVuYW1lIG9yICIiCi0gICAgICAgICAgICBw
YXRoID0gc2VsZi5fbWFrZXBhdGgoZW50cnkucGF0aCkKLSAgICAgICAgICAgIGZpbGVsb2NyZXBy
ID0gUmVwckZpbGVMb2NhdGlvbihwYXRoLCBlbnRyeS5saW5lbm8rMSwgbWVzc2FnZSkKLSAgICAg
ICAgICAgIGxvY2Fsc3JlcHIgPSBOb25lCi0gICAgICAgICAgICBpZiBub3Qgc2hvcnQ6Ci0gICAg
ICAgICAgICAgICAgbG9jYWxzcmVwciA9ICBzZWxmLnJlcHJfbG9jYWxzKGVudHJ5LmxvY2FscykK
LSAgICAgICAgICAgIHJldHVybiBSZXByRW50cnkobGluZXMsIHJlcHJhcmdzLCBsb2NhbHNyZXBy
LCBmaWxlbG9jcmVwciwgc3R5bGUpCi0gICAgICAgIGlmIGV4Y2luZm86Ci0gICAgICAgICAgICBs
aW5lcy5leHRlbmQoc2VsZi5nZXRfZXhjb25seShleGNpbmZvLCBpbmRlbnQ9NCkpCi0gICAgICAg
IHJldHVybiBSZXByRW50cnkobGluZXMsIE5vbmUsIE5vbmUsIE5vbmUsIHN0eWxlKQotCi0gICAg
ZGVmIF9tYWtlcGF0aChzZWxmLCBwYXRoKToKLSAgICAgICAgaWYgbm90IHNlbGYuYWJzcGF0aDoK
LSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBucCA9IHB5LnBhdGgubG9jYWwoKS5i
ZXN0cmVscGF0aChwYXRoKQotICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIHBhdGgKLSAgICAgICAgICAgIGlmIGxlbihucCkgPCBsZW4oc3RyKHBhdGgp
KToKLSAgICAgICAgICAgICAgICBwYXRoID0gbnAKLSAgICAgICAgcmV0dXJuIHBhdGgKLQotICAg
IGRlZiByZXByX3RyYWNlYmFjayhzZWxmLCBleGNpbmZvKToKLSAgICAgICAgdHJhY2ViYWNrID0g
ZXhjaW5mby50cmFjZWJhY2sKLSAgICAgICAgaWYgc2VsZi50YmZpbHRlcjoKLSAgICAgICAgICAg
IHRyYWNlYmFjayA9IHRyYWNlYmFjay5maWx0ZXIoKQotICAgICAgICByZWN1cnNpb25pbmRleCA9
IE5vbmUKLSAgICAgICAgaWYgZXhjaW5mby5lcnJpc2luc3RhbmNlKFJ1bnRpbWVFcnJvcik6Ci0g
ICAgICAgICAgICBpZiAibWF4aW11bSByZWN1cnNpb24gZGVwdGggZXhjZWVkZWQiIGluIHN0cihl
eGNpbmZvLnZhbHVlKToKLSAgICAgICAgICAgICAgICByZWN1cnNpb25pbmRleCA9IHRyYWNlYmFj
ay5yZWN1cnNpb25pbmRleCgpCi0gICAgICAgIGxhc3QgPSB0cmFjZWJhY2tbLTFdCi0gICAgICAg
IGVudHJpZXMgPSBbXQotICAgICAgICBleHRyYWxpbmUgPSBOb25lCi0gICAgICAgIGZvciBpbmRl
eCwgZW50cnkgaW4gZW51bWVyYXRlKHRyYWNlYmFjayk6Ci0gICAgICAgICAgICBlaW5mbyA9IChs
YXN0ID09IGVudHJ5KSBhbmQgZXhjaW5mbyBvciBOb25lCi0gICAgICAgICAgICByZXByZW50cnkg
PSBzZWxmLnJlcHJfdHJhY2ViYWNrX2VudHJ5KGVudHJ5LCBlaW5mbykKLSAgICAgICAgICAgIGVu
dHJpZXMuYXBwZW5kKHJlcHJlbnRyeSkKLSAgICAgICAgICAgIGlmIGluZGV4ID09IHJlY3Vyc2lv
bmluZGV4OgotICAgICAgICAgICAgICAgIGV4dHJhbGluZSA9ICIhISEgUmVjdXJzaW9uIGRldGVj
dGVkIChzYW1lIGxvY2FscyAmIHBvc2l0aW9uKSIKLSAgICAgICAgICAgICAgICBicmVhawotICAg
ICAgICByZXR1cm4gUmVwclRyYWNlYmFjayhlbnRyaWVzLCBleHRyYWxpbmUsIHN0eWxlPXNlbGYu
c3R5bGUpCi0KLSAgICBkZWYgcmVwcl9leGNpbmZvKHNlbGYsIGV4Y2luZm8pOgotICAgICAgICBy
ZXBydHJhY2ViYWNrID0gc2VsZi5yZXByX3RyYWNlYmFjayhleGNpbmZvKQotICAgICAgICByZXBy
Y3Jhc2ggPSBleGNpbmZvLl9nZXRyZXByY3Jhc2goKQotICAgICAgICByZXR1cm4gUmVwckV4Y2Vw
dGlvbkluZm8ocmVwcnRyYWNlYmFjaywgcmVwcmNyYXNoKQotCi1jbGFzcyBUZXJtaW5hbFJlcHI6
Ci0gICAgZGVmIF9fc3RyX18oc2VsZik6Ci0gICAgICAgIHMgPSBzZWxmLl9fdW5pY29kZV9fKCkK
LSAgICAgICAgaWYgc3lzLnZlcnNpb25faW5mb1swXSA8IDM6Ci0gICAgICAgICAgICBzID0gcy5l
bmNvZGUoJ3V0Zi04JykKLSAgICAgICAgcmV0dXJuIHMKLQotICAgIGRlZiBfX3VuaWNvZGVfXyhz
ZWxmKToKLSAgICAgICAgIyBGWUkgdGhpcyBpcyBjYWxsZWQgZnJvbSBweXRlc3QteGRpc3QncyBz
ZXJpYWxpemF0aW9uIG9mIGV4Y2VwdGlvbgotICAgICAgICAjIGluZm9ybWF0aW9uLgotICAgICAg
ICBpbyA9IHB5LmlvLlRleHRJTygpCi0gICAgICAgIHR3ID0gcHkuaW8uVGVybWluYWxXcml0ZXIo
ZmlsZT1pbykKLSAgICAgICAgc2VsZi50b3Rlcm1pbmFsKHR3KQotICAgICAgICByZXR1cm4gaW8u
Z2V0dmFsdWUoKS5zdHJpcCgpCi0KLSAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIHJl
dHVybiAiPCVzIGluc3RhbmNlIGF0ICUweD4iICUoc2VsZi5fX2NsYXNzX18sIGlkKHNlbGYpKQot
Ci0KLWNsYXNzIFJlcHJFeGNlcHRpb25JbmZvKFRlcm1pbmFsUmVwcik6Ci0gICAgZGVmIF9faW5p
dF9fKHNlbGYsIHJlcHJ0cmFjZWJhY2ssIHJlcHJjcmFzaCk6Ci0gICAgICAgIHNlbGYucmVwcnRy
YWNlYmFjayA9IHJlcHJ0cmFjZWJhY2sKLSAgICAgICAgc2VsZi5yZXByY3Jhc2ggPSByZXByY3Jh
c2gKLSAgICAgICAgc2VsZi5zZWN0aW9ucyA9IFtdCi0KLSAgICBkZWYgYWRkc2VjdGlvbihzZWxm
LCBuYW1lLCBjb250ZW50LCBzZXA9Ii0iKToKLSAgICAgICAgc2VsZi5zZWN0aW9ucy5hcHBlbmQo
KG5hbWUsIGNvbnRlbnQsIHNlcCkpCi0KLSAgICBkZWYgdG90ZXJtaW5hbChzZWxmLCB0dyk6Ci0g
ICAgICAgIHNlbGYucmVwcnRyYWNlYmFjay50b3Rlcm1pbmFsKHR3KQotICAgICAgICBmb3IgbmFt
ZSwgY29udGVudCwgc2VwIGluIHNlbGYuc2VjdGlvbnM6Ci0gICAgICAgICAgICB0dy5zZXAoc2Vw
LCBuYW1lKQotICAgICAgICAgICAgdHcubGluZShjb250ZW50KQotCi1jbGFzcyBSZXByVHJhY2Vi
YWNrKFRlcm1pbmFsUmVwcik6Ci0gICAgZW50cnlzZXAgPSAiXyAiCi0KLSAgICBkZWYgX19pbml0
X18oc2VsZiwgcmVwcmVudHJpZXMsIGV4dHJhbGluZSwgc3R5bGUpOgotICAgICAgICBzZWxmLnJl
cHJlbnRyaWVzID0gcmVwcmVudHJpZXMKLSAgICAgICAgc2VsZi5leHRyYWxpbmUgPSBleHRyYWxp
bmUKLSAgICAgICAgc2VsZi5zdHlsZSA9IHN0eWxlCi0KLSAgICBkZWYgdG90ZXJtaW5hbChzZWxm
LCB0dyk6Ci0gICAgICAgICMgdGhlIGVudHJpZXMgbWlnaHQgaGF2ZSBkaWZmZXJlbnQgc3R5bGVz
Ci0gICAgICAgIGZvciBpLCBlbnRyeSBpbiBlbnVtZXJhdGUoc2VsZi5yZXByZW50cmllcyk6Ci0g
ICAgICAgICAgICBpZiBlbnRyeS5zdHlsZSA9PSAibG9uZyI6Ci0gICAgICAgICAgICAgICAgdHcu
bGluZSgiIikKLSAgICAgICAgICAgIGVudHJ5LnRvdGVybWluYWwodHcpCi0gICAgICAgICAgICBp
ZiBpIDwgbGVuKHNlbGYucmVwcmVudHJpZXMpIC0gMToKLSAgICAgICAgICAgICAgICBuZXh0X2Vu
dHJ5ID0gc2VsZi5yZXByZW50cmllc1tpKzFdCi0gICAgICAgICAgICAgICAgaWYgZW50cnkuc3R5
bGUgPT0gImxvbmciIG9yIFwKLSAgICAgICAgICAgICAgICAgICBlbnRyeS5zdHlsZSA9PSAic2hv
cnQiIGFuZCBuZXh0X2VudHJ5LnN0eWxlID09ICJsb25nIjoKLSAgICAgICAgICAgICAgICAgICAg
dHcuc2VwKHNlbGYuZW50cnlzZXApCi0KLSAgICAgICAgaWYgc2VsZi5leHRyYWxpbmU6Ci0gICAg
ICAgICAgICB0dy5saW5lKHNlbGYuZXh0cmFsaW5lKQotCi1jbGFzcyBSZXByVHJhY2ViYWNrTmF0
aXZlKFJlcHJUcmFjZWJhY2spOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0YmxpbmVzKToKLSAg
ICAgICAgc2VsZi5zdHlsZSA9ICJuYXRpdmUiCi0gICAgICAgIHNlbGYucmVwcmVudHJpZXMgPSBb
UmVwckVudHJ5TmF0aXZlKHRibGluZXMpXQotICAgICAgICBzZWxmLmV4dHJhbGluZSA9IE5vbmUK
LQotY2xhc3MgUmVwckVudHJ5TmF0aXZlKFRlcm1pbmFsUmVwcik6Ci0gICAgc3R5bGUgPSAibmF0
aXZlIgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHRibGluZXMpOgotICAgICAgICBzZWxmLmxp
bmVzID0gdGJsaW5lcwotCi0gICAgZGVmIHRvdGVybWluYWwoc2VsZiwgdHcpOgotICAgICAgICB0
dy53cml0ZSgiIi5qb2luKHNlbGYubGluZXMpKQotCi1jbGFzcyBSZXByRW50cnkoVGVybWluYWxS
ZXByKToKLSAgICBsb2NhbHNzZXAgPSAiXyAiCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgbGlu
ZXMsIHJlcHJmdW5jYXJncywgcmVwcmxvY2FscywgZmlsZWxvY3JlcHIsIHN0eWxlKToKLSAgICAg
ICAgc2VsZi5saW5lcyA9IGxpbmVzCi0gICAgICAgIHNlbGYucmVwcmZ1bmNhcmdzID0gcmVwcmZ1
bmNhcmdzCi0gICAgICAgIHNlbGYucmVwcmxvY2FscyA9IHJlcHJsb2NhbHMKLSAgICAgICAgc2Vs
Zi5yZXByZmlsZWxvYyA9IGZpbGVsb2NyZXByCi0gICAgICAgIHNlbGYuc3R5bGUgPSBzdHlsZQot
Ci0gICAgZGVmIHRvdGVybWluYWwoc2VsZiwgdHcpOgotICAgICAgICBpZiBzZWxmLnN0eWxlID09
ICJzaG9ydCI6Ci0gICAgICAgICAgICBzZWxmLnJlcHJmaWxlbG9jLnRvdGVybWluYWwodHcpCi0g
ICAgICAgICAgICBmb3IgbGluZSBpbiBzZWxmLmxpbmVzOgotICAgICAgICAgICAgICAgIHJlZCA9
IGxpbmUuc3RhcnRzd2l0aCgiRSAgICIpCi0gICAgICAgICAgICAgICAgdHcubGluZShsaW5lLCBi
b2xkPVRydWUsIHJlZD1yZWQpCi0gICAgICAgICAgICAjdHcubGluZSgiIikKLSAgICAgICAgICAg
IHJldHVybgotICAgICAgICBpZiBzZWxmLnJlcHJmdW5jYXJnczoKLSAgICAgICAgICAgIHNlbGYu
cmVwcmZ1bmNhcmdzLnRvdGVybWluYWwodHcpCi0gICAgICAgIGZvciBsaW5lIGluIHNlbGYubGlu
ZXM6Ci0gICAgICAgICAgICByZWQgPSBsaW5lLnN0YXJ0c3dpdGgoIkUgICAiKQotICAgICAgICAg
ICAgdHcubGluZShsaW5lLCBib2xkPVRydWUsIHJlZD1yZWQpCi0gICAgICAgIGlmIHNlbGYucmVw
cmxvY2FsczoKLSAgICAgICAgICAgICN0dy5zZXAoc2VsZi5sb2NhbHNzZXAsICJMb2NhbHMiKQot
ICAgICAgICAgICAgdHcubGluZSgiIikKLSAgICAgICAgICAgIHNlbGYucmVwcmxvY2Fscy50b3Rl
cm1pbmFsKHR3KQotICAgICAgICBpZiBzZWxmLnJlcHJmaWxlbG9jOgotICAgICAgICAgICAgaWYg
c2VsZi5saW5lczoKLSAgICAgICAgICAgICAgICB0dy5saW5lKCIiKQotICAgICAgICAgICAgc2Vs
Zi5yZXByZmlsZWxvYy50b3Rlcm1pbmFsKHR3KQotCi0gICAgZGVmIF9fc3RyX18oc2VsZik6Ci0g
ICAgICAgIHJldHVybiAiJXNcbiVzXG4lcyIgJSAoIlxuIi5qb2luKHNlbGYubGluZXMpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmVwcmxvY2FscywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzZWxmLnJlcHJmaWxlbG9jKQotCi1jbGFzcyBSZXByRmlsZUxv
Y2F0aW9uKFRlcm1pbmFsUmVwcik6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGgsIGxpbmVu
bywgbWVzc2FnZSk6Ci0gICAgICAgIHNlbGYucGF0aCA9IHN0cihwYXRoKQotICAgICAgICBzZWxm
LmxpbmVubyA9IGxpbmVubwotICAgICAgICBzZWxmLm1lc3NhZ2UgPSBtZXNzYWdlCi0KLSAgICBk
ZWYgdG90ZXJtaW5hbChzZWxmLCB0dyk6Ci0gICAgICAgICMgZmlsZW5hbWUgYW5kIGxpbmVubyBv
dXRwdXQgZm9yIGVhY2ggZW50cnksCi0gICAgICAgICMgdXNpbmcgYW4gb3V0cHV0IGZvcm1hdCB0
aGF0IG1vc3QgZWRpdG9ycyB1bnRlcnN0YW5kCi0gICAgICAgIG1zZyA9IHNlbGYubWVzc2FnZQot
ICAgICAgICBpID0gbXNnLmZpbmQoIlxuIikKLSAgICAgICAgaWYgaSAhPSAtMToKLSAgICAgICAg
ICAgIG1zZyA9IG1zZ1s6aV0KLSAgICAgICAgdHcubGluZSgiJXM6JXM6ICVzIiAlKHNlbGYucGF0
aCwgc2VsZi5saW5lbm8sIG1zZykpCi0KLWNsYXNzIFJlcHJMb2NhbHMoVGVybWluYWxSZXByKToK
LSAgICBkZWYgX19pbml0X18oc2VsZiwgbGluZXMpOgotICAgICAgICBzZWxmLmxpbmVzID0gbGlu
ZXMKLQotICAgIGRlZiB0b3Rlcm1pbmFsKHNlbGYsIHR3KToKLSAgICAgICAgZm9yIGxpbmUgaW4g
c2VsZi5saW5lczoKLSAgICAgICAgICAgIHR3LmxpbmUobGluZSkKLQotY2xhc3MgUmVwckZ1bmNB
cmdzKFRlcm1pbmFsUmVwcik6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGFyZ3MpOgotICAgICAg
ICBzZWxmLmFyZ3MgPSBhcmdzCi0KLSAgICBkZWYgdG90ZXJtaW5hbChzZWxmLCB0dyk6Ci0gICAg
ICAgIGlmIHNlbGYuYXJnczoKLSAgICAgICAgICAgIGxpbmVzb2ZhciA9ICIiCi0gICAgICAgICAg
ICBmb3IgbmFtZSwgdmFsdWUgaW4gc2VsZi5hcmdzOgotICAgICAgICAgICAgICAgIG5zID0gIiVz
ID0gJXMiICUobmFtZSwgdmFsdWUpCi0gICAgICAgICAgICAgICAgaWYgbGVuKG5zKSArIGxlbihs
aW5lc29mYXIpICsgMiA+IHR3LmZ1bGx3aWR0aDoKLSAgICAgICAgICAgICAgICAgICAgaWYgbGlu
ZXNvZmFyOgotICAgICAgICAgICAgICAgICAgICAgICAgdHcubGluZShsaW5lc29mYXIpCi0gICAg
ICAgICAgICAgICAgICAgIGxpbmVzb2ZhciA9ICBucwotICAgICAgICAgICAgICAgIGVsc2U6Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIGxpbmVzb2ZhcjoKLSAgICAgICAgICAgICAgICAgICAgICAg
IGxpbmVzb2ZhciArPSAiLCAiICsgbnMKLSAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGxpbmVzb2ZhciA9IG5zCi0gICAgICAgICAgICBpZiBsaW5lc29m
YXI6Ci0gICAgICAgICAgICAgICAgdHcubGluZShsaW5lc29mYXIpCi0gICAgICAgICAgICB0dy5s
aW5lKCIiKQotCi0KLQotb2xkYnVpbHRpbnMgPSB7fQotCi1kZWYgcGF0Y2hfYnVpbHRpbnMoYXNz
ZXJ0aW9uPVRydWUsIGNvbXBpbGU9VHJ1ZSk6Ci0gICAgIiIiIHB1dCBjb21waWxlIGFuZCBBc3Nl
cnRpb25FcnJvciBidWlsdGlucyB0byBQeXRob24ncyBidWlsdGlucy4gIiIiCi0gICAgaWYgYXNz
ZXJ0aW9uOgotICAgICAgICBmcm9tIF9weXRlc3QuYXNzZXJ0aW9uIGltcG9ydCByZWludGVycHJl
dAotICAgICAgICBsID0gb2xkYnVpbHRpbnMuc2V0ZGVmYXVsdCgnQXNzZXJ0aW9uRXJyb3InLCBb
XSkKLSAgICAgICAgbC5hcHBlbmQocHkuYnVpbHRpbi5idWlsdGlucy5Bc3NlcnRpb25FcnJvcikK
LSAgICAgICAgcHkuYnVpbHRpbi5idWlsdGlucy5Bc3NlcnRpb25FcnJvciA9IHJlaW50ZXJwcmV0
LkFzc2VydGlvbkVycm9yCi0gICAgaWYgY29tcGlsZToKLSAgICAgICAgaW1wb3J0IF9weXRlc3Qu
X2NvZGUKLSAgICAgICAgbCA9IG9sZGJ1aWx0aW5zLnNldGRlZmF1bHQoJ2NvbXBpbGUnLCBbXSkK
LSAgICAgICAgbC5hcHBlbmQocHkuYnVpbHRpbi5idWlsdGlucy5jb21waWxlKQotICAgICAgICBw
eS5idWlsdGluLmJ1aWx0aW5zLmNvbXBpbGUgPSBfcHl0ZXN0Ll9jb2RlLmNvbXBpbGUKLQotZGVm
IHVucGF0Y2hfYnVpbHRpbnMoYXNzZXJ0aW9uPVRydWUsIGNvbXBpbGU9VHJ1ZSk6Ci0gICAgIiIi
IHJlbW92ZSBjb21waWxlIGFuZCBBc3NlcnRpb25FcnJvciBidWlsdGlucyBmcm9tIFB5dGhvbiBi
dWlsdGlucy4gIiIiCi0gICAgaWYgYXNzZXJ0aW9uOgotICAgICAgICBweS5idWlsdGluLmJ1aWx0
aW5zLkFzc2VydGlvbkVycm9yID0gb2xkYnVpbHRpbnNbJ0Fzc2VydGlvbkVycm9yJ10ucG9wKCkK
LSAgICBpZiBjb21waWxlOgotICAgICAgICBweS5idWlsdGluLmJ1aWx0aW5zLmNvbXBpbGUgPSBv
bGRidWlsdGluc1snY29tcGlsZSddLnBvcCgpCi0KLWRlZiBnZXRyYXdjb2RlKG9iaiwgdHJ5Y2Fs
bD1UcnVlKToKLSAgICAiIiIgcmV0dXJuIGNvZGUgb2JqZWN0IGZvciBnaXZlbiBmdW5jdGlvbi4g
IiIiCi0gICAgdHJ5OgotICAgICAgICByZXR1cm4gb2JqLl9fY29kZV9fCi0gICAgZXhjZXB0IEF0
dHJpYnV0ZUVycm9yOgotICAgICAgICBvYmogPSBnZXRhdHRyKG9iaiwgJ2ltX2Z1bmMnLCBvYmop
Ci0gICAgICAgIG9iaiA9IGdldGF0dHIob2JqLCAnZnVuY19jb2RlJywgb2JqKQotICAgICAgICBv
YmogPSBnZXRhdHRyKG9iaiwgJ2ZfY29kZScsIG9iaikKLSAgICAgICAgb2JqID0gZ2V0YXR0cihv
YmosICdfX2NvZGVfXycsIG9iaikKLSAgICAgICAgaWYgdHJ5Y2FsbCBhbmQgbm90IGhhc2F0dHIo
b2JqLCAnY29fZmlyc3RsaW5lbm8nKToKLSAgICAgICAgICAgIGlmIGhhc2F0dHIob2JqLCAnX19j
YWxsX18nKSBhbmQgbm90IHB5LnN0ZC5pbnNwZWN0LmlzY2xhc3Mob2JqKToKLSAgICAgICAgICAg
ICAgICB4ID0gZ2V0cmF3Y29kZShvYmouX19jYWxsX18sIHRyeWNhbGw9RmFsc2UpCi0gICAgICAg
ICAgICAgICAgaWYgaGFzYXR0cih4LCAnY29fZmlyc3RsaW5lbm8nKToKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHgKLSAgICAgICAgcmV0dXJuIG9iagotCmRpZmYgLS1naXQgYS9XZWJEcml2
ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvX2NvZGUvc291cmNlLnB5
IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L19jb2Rl
L3NvdXJjZS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTE1MjFmOGEyMTIuLjAw
MDAwMDAwMDAwCi0tLSBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3Qv
X3B5dGVzdC9fY29kZS9zb3VyY2UucHkKKysrIC9kZXYvbnVsbApAQCAtMSw0MjEgKzAsMCBAQAot
ZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBnZW5lcmF0b3JzCi0KLWZyb20gYmlzZWN0IGltcG9ydCBi
aXNlY3RfcmlnaHQKLWltcG9ydCBzeXMKLWltcG9ydCBpbnNwZWN0LCB0b2tlbml6ZQotaW1wb3J0
IHB5Ci1mcm9tIHR5cGVzIGltcG9ydCBNb2R1bGVUeXBlCi1jcHlfY29tcGlsZSA9IGNvbXBpbGUK
LQotdHJ5OgotICAgIGltcG9ydCBfYXN0Ci0gICAgZnJvbSBfYXN0IGltcG9ydCBQeUNGX09OTFlf
QVNUIGFzIF9BU1RfRkxBRwotZXhjZXB0IEltcG9ydEVycm9yOgotICAgIF9BU1RfRkxBRyA9IDAK
LSAgICBfYXN0ID0gTm9uZQotCi0KLWNsYXNzIFNvdXJjZShvYmplY3QpOgotICAgICIiIiBhIGlt
bXV0YWJsZSBvYmplY3QgaG9sZGluZyBhIHNvdXJjZSBjb2RlIGZyYWdtZW50LAotICAgICAgICBw
b3NzaWJseSBkZWluZGVudGluZyBpdC4KLSAgICAiIiIKLSAgICBfY29tcGlsZWNvdW50ZXIgPSAw
Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsICpwYXJ0cywgKiprd2FyZ3MpOgotICAgICAgICBzZWxm
LmxpbmVzID0gbGluZXMgPSBbXQotICAgICAgICBkZSA9IGt3YXJncy5nZXQoJ2RlaW5kZW50Jywg
VHJ1ZSkKLSAgICAgICAgcnN0cmlwID0ga3dhcmdzLmdldCgncnN0cmlwJywgVHJ1ZSkKLSAgICAg
ICAgZm9yIHBhcnQgaW4gcGFydHM6Ci0gICAgICAgICAgICBpZiBub3QgcGFydDoKLSAgICAgICAg
ICAgICAgICBwYXJ0bGluZXMgPSBbXQotICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShwYXJ0LCBT
b3VyY2UpOgotICAgICAgICAgICAgICAgIHBhcnRsaW5lcyA9IHBhcnQubGluZXMKLSAgICAgICAg
ICAgIGVsaWYgaXNpbnN0YW5jZShwYXJ0LCAodHVwbGUsIGxpc3QpKToKLSAgICAgICAgICAgICAg
ICBwYXJ0bGluZXMgPSBbeC5yc3RyaXAoIlxuIikgZm9yIHggaW4gcGFydF0KLSAgICAgICAgICAg
IGVsaWYgaXNpbnN0YW5jZShwYXJ0LCBweS5idWlsdGluLl9iYXNlc3RyaW5nKToKLSAgICAgICAg
ICAgICAgICBwYXJ0bGluZXMgPSBwYXJ0LnNwbGl0KCdcbicpCi0gICAgICAgICAgICAgICAgaWYg
cnN0cmlwOgotICAgICAgICAgICAgICAgICAgICB3aGlsZSBwYXJ0bGluZXM6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiBwYXJ0bGluZXNbLTFdLnN0cmlwKCk6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRsaW5lcy5wb3Ao
KQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBwYXJ0bGluZXMgPSBnZXRzb3Vy
Y2UocGFydCwgZGVpbmRlbnQ9ZGUpLmxpbmVzCi0gICAgICAgICAgICBpZiBkZToKLSAgICAgICAg
ICAgICAgICBwYXJ0bGluZXMgPSBkZWluZGVudChwYXJ0bGluZXMpCi0gICAgICAgICAgICBsaW5l
cy5leHRlbmQocGFydGxpbmVzKQotCi0gICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6Ci0gICAg
ICAgIHRyeToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLmxpbmVzID09IG90aGVyLmxpbmVzCi0g
ICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uo
b3RoZXIsIHN0cik6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHN0cihzZWxmKSA9PSBvdGhlcgot
ICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5
KToKLSAgICAgICAgaWYgaXNpbnN0YW5jZShrZXksIGludCk6Ci0gICAgICAgICAgICByZXR1cm4g
c2VsZi5saW5lc1trZXldCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBpZiBrZXkuc3RlcCBu
b3QgaW4gKE5vbmUsIDEpOgotICAgICAgICAgICAgICAgIHJhaXNlIEluZGV4RXJyb3IoImNhbm5v
dCBzbGljZSBhIFNvdXJjZSB3aXRoIGEgc3RlcCIpCi0gICAgICAgICAgICByZXR1cm4gc2VsZi5f
X2dldHNsaWNlX18oa2V5LnN0YXJ0LCBrZXkuc3RvcCkKLQotICAgIGRlZiBfX2xlbl9fKHNlbGYp
OgotICAgICAgICByZXR1cm4gbGVuKHNlbGYubGluZXMpCi0KLSAgICBkZWYgX19nZXRzbGljZV9f
KHNlbGYsIHN0YXJ0LCBlbmQpOgotICAgICAgICBuZXdzb3VyY2UgPSBTb3VyY2UoKQotICAgICAg
ICBuZXdzb3VyY2UubGluZXMgPSBzZWxmLmxpbmVzW3N0YXJ0OmVuZF0KLSAgICAgICAgcmV0dXJu
IG5ld3NvdXJjZQotCi0gICAgZGVmIHN0cmlwKHNlbGYpOgotICAgICAgICAiIiIgcmV0dXJuIG5l
dyBzb3VyY2Ugb2JqZWN0IHdpdGggdHJhaWxpbmcKLSAgICAgICAgICAgIGFuZCBsZWFkaW5nIGJs
YW5rIGxpbmVzIHJlbW92ZWQuCi0gICAgICAgICIiIgotICAgICAgICBzdGFydCwgZW5kID0gMCwg
bGVuKHNlbGYpCi0gICAgICAgIHdoaWxlIHN0YXJ0IDwgZW5kIGFuZCBub3Qgc2VsZi5saW5lc1tz
dGFydF0uc3RyaXAoKToKLSAgICAgICAgICAgIHN0YXJ0ICs9IDEKLSAgICAgICAgd2hpbGUgZW5k
ID4gc3RhcnQgYW5kIG5vdCBzZWxmLmxpbmVzW2VuZC0xXS5zdHJpcCgpOgotICAgICAgICAgICAg
ZW5kIC09IDEKLSAgICAgICAgc291cmNlID0gU291cmNlKCkKLSAgICAgICAgc291cmNlLmxpbmVz
WzpdID0gc2VsZi5saW5lc1tzdGFydDplbmRdCi0gICAgICAgIHJldHVybiBzb3VyY2UKLQotICAg
IGRlZiBwdXRhcm91bmQoc2VsZiwgYmVmb3JlPScnLCBhZnRlcj0nJywgaW5kZW50PScgJyAqIDQp
OgotICAgICAgICAiIiIgcmV0dXJuIGEgY29weSBvZiB0aGUgc291cmNlIG9iamVjdCB3aXRoCi0g
ICAgICAgICAgICAnYmVmb3JlJyBhbmQgJ2FmdGVyJyB3cmFwcGVkIGFyb3VuZCBpdC4KLSAgICAg
ICAgIiIiCi0gICAgICAgIGJlZm9yZSA9IFNvdXJjZShiZWZvcmUpCi0gICAgICAgIGFmdGVyID0g
U291cmNlKGFmdGVyKQotICAgICAgICBuZXdzb3VyY2UgPSBTb3VyY2UoKQotICAgICAgICBsaW5l
cyA9IFsgKGluZGVudCArIGxpbmUpIGZvciBsaW5lIGluIHNlbGYubGluZXNdCi0gICAgICAgIG5l
d3NvdXJjZS5saW5lcyA9IGJlZm9yZS5saW5lcyArIGxpbmVzICsgIGFmdGVyLmxpbmVzCi0gICAg
ICAgIHJldHVybiBuZXdzb3VyY2UKLQotICAgIGRlZiBpbmRlbnQoc2VsZiwgaW5kZW50PScgJyAq
IDQpOgotICAgICAgICAiIiIgcmV0dXJuIGEgY29weSBvZiB0aGUgc291cmNlIG9iamVjdCB3aXRo
Ci0gICAgICAgICAgICBhbGwgbGluZXMgaW5kZW50ZWQgYnkgdGhlIGdpdmVuIGluZGVudC1zdHJp
bmcuCi0gICAgICAgICIiIgotICAgICAgICBuZXdzb3VyY2UgPSBTb3VyY2UoKQotICAgICAgICBu
ZXdzb3VyY2UubGluZXMgPSBbKGluZGVudCtsaW5lKSBmb3IgbGluZSBpbiBzZWxmLmxpbmVzXQot
ICAgICAgICByZXR1cm4gbmV3c291cmNlCi0KLSAgICBkZWYgZ2V0c3RhdGVtZW50KHNlbGYsIGxp
bmVubywgYXNzZXJ0aW9uPUZhbHNlKToKLSAgICAgICAgIiIiIHJldHVybiBTb3VyY2Ugc3RhdGVt
ZW50IHdoaWNoIGNvbnRhaW5zIHRoZQotICAgICAgICAgICAgZ2l2ZW4gbGluZW51bWJlciAoY291
bnRlZCBmcm9tIDApLgotICAgICAgICAiIiIKLSAgICAgICAgc3RhcnQsIGVuZCA9IHNlbGYuZ2V0
c3RhdGVtZW50cmFuZ2UobGluZW5vLCBhc3NlcnRpb24pCi0gICAgICAgIHJldHVybiBzZWxmW3N0
YXJ0OmVuZF0KLQotICAgIGRlZiBnZXRzdGF0ZW1lbnRyYW5nZShzZWxmLCBsaW5lbm8sIGFzc2Vy
dGlvbj1GYWxzZSk6Ci0gICAgICAgICIiIiByZXR1cm4gKHN0YXJ0LCBlbmQpIHR1cGxlIHdoaWNo
IHNwYW5zIHRoZSBtaW5pbWFsCi0gICAgICAgICAgICBzdGF0ZW1lbnQgcmVnaW9uIHdoaWNoIGNv
bnRhaW5pbmcgdGhlIGdpdmVuIGxpbmVuby4KLSAgICAgICAgIiIiCi0gICAgICAgIGlmIG5vdCAo
MCA8PSBsaW5lbm8gPCBsZW4oc2VsZikpOgotICAgICAgICAgICAgcmFpc2UgSW5kZXhFcnJvcigi
bGluZW5vIG91dCBvZiByYW5nZSIpCi0gICAgICAgIGFzdCwgc3RhcnQsIGVuZCA9IGdldHN0YXRl
bWVudHJhbmdlX2FzdChsaW5lbm8sIHNlbGYpCi0gICAgICAgIHJldHVybiBzdGFydCwgZW5kCi0K
LSAgICBkZWYgZGVpbmRlbnQoc2VsZiwgb2Zmc2V0PU5vbmUpOgotICAgICAgICAiIiIgcmV0dXJu
IGEgbmV3IHNvdXJjZSBvYmplY3QgZGVpbmRlbnRlZCBieSBvZmZzZXQuCi0gICAgICAgICAgICBJ
ZiBvZmZzZXQgaXMgTm9uZSB0aGVuIGd1ZXNzIGFuIGluZGVudGF0aW9uIG9mZnNldCBmcm9tCi0g
ICAgICAgICAgICB0aGUgZmlyc3Qgbm9uLWJsYW5rIGxpbmUuICBTdWJzZXF1ZW50IGxpbmVzIHdo
aWNoIGhhdmUgYQotICAgICAgICAgICAgbG93ZXIgaW5kZW50YXRpb24gb2Zmc2V0IHdpbGwgYmUg
Y29waWVkIHZlcmJhdGltIGFzCi0gICAgICAgICAgICB0aGV5IGFyZSBhc3N1bWVkIHRvIGJlIHBh
cnQgb2YgbXVsdGlsaW5lcy4KLSAgICAgICAgIiIiCi0gICAgICAgICMgWFhYIG1heWJlIHVzZSB0
aGUgdG9rZW5pemVyIHRvIHByb3Blcmx5IGhhbmRsZSBtdWx0aWxpbmUKLSAgICAgICAgIyAgICAg
c3RyaW5ncyBldGMucHA/Ci0gICAgICAgIG5ld3NvdXJjZSA9IFNvdXJjZSgpCi0gICAgICAgIG5l
d3NvdXJjZS5saW5lc1s6XSA9IGRlaW5kZW50KHNlbGYubGluZXMsIG9mZnNldCkKLSAgICAgICAg
cmV0dXJuIG5ld3NvdXJjZQotCi0gICAgZGVmIGlzcGFyc2VhYmxlKHNlbGYsIGRlaW5kZW50PVRy
dWUpOgotICAgICAgICAiIiIgcmV0dXJuIFRydWUgaWYgc291cmNlIGlzIHBhcnNlYWJsZSwgaGV1
cmlzdGljYWxseQotICAgICAgICAgICAgZGVpbmRlbnRpbmcgaXQgYnkgZGVmYXVsdC4KLSAgICAg
ICAgIiIiCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGltcG9ydCBwYXJzZXIKLSAgICAgICAg
ZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICAgICAgc3ludGF4X2NoZWNrZXIgPSBsYW1iZGEg
eDogY29tcGlsZSh4LCAnYXNkJywgJ2V4ZWMnKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAg
c3ludGF4X2NoZWNrZXIgPSBwYXJzZXIuc3VpdGUKLQotICAgICAgICBpZiBkZWluZGVudDoKLSAg
ICAgICAgICAgIHNvdXJjZSA9IHN0cihzZWxmLmRlaW5kZW50KCkpCi0gICAgICAgIGVsc2U6Ci0g
ICAgICAgICAgICBzb3VyY2UgPSBzdHIoc2VsZikKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAg
I2NvbXBpbGUoc291cmNlKydcbicsICJ4IiwgImV4ZWMiKQotICAgICAgICAgICAgc3ludGF4X2No
ZWNrZXIoc291cmNlKydcbicpCi0gICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKLSAg
ICAgICAgICAgIHJhaXNlCi0gICAgICAgIGV4Y2VwdCBFeGNlcHRpb246Ci0gICAgICAgICAgICBy
ZXR1cm4gRmFsc2UKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiBUcnVlCi0KLSAg
ICBkZWYgX19zdHJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuICJcbiIuam9pbihzZWxmLmxpbmVz
KQotCi0gICAgZGVmIGNvbXBpbGUoc2VsZiwgZmlsZW5hbWU9Tm9uZSwgbW9kZT0nZXhlYycsCi0g
ICAgICAgICAgICAgICAgZmxhZz1nZW5lcmF0b3JzLmNvbXBpbGVyX2ZsYWcsCi0gICAgICAgICAg
ICAgICAgZG9udF9pbmhlcml0PTAsIF9nZW5mcmFtZT1Ob25lKToKLSAgICAgICAgIiIiIHJldHVy
biBjb21waWxlZCBjb2RlIG9iamVjdC4gaWYgZmlsZW5hbWUgaXMgTm9uZQotICAgICAgICAgICAg
aW52ZW50IGFuIGFydGlmaWNpYWwgZmlsZW5hbWUgd2hpY2ggZGlzcGxheXMKLSAgICAgICAgICAg
IHRoZSBzb3VyY2UvbGluZSBwb3NpdGlvbiBvZiB0aGUgY2FsbGVyIGZyYW1lLgotICAgICAgICAi
IiIKLSAgICAgICAgaWYgbm90IGZpbGVuYW1lIG9yIHB5LnBhdGgubG9jYWwoZmlsZW5hbWUpLmNo
ZWNrKGZpbGU9MCk6Ci0gICAgICAgICAgICBpZiBfZ2VuZnJhbWUgaXMgTm9uZToKLSAgICAgICAg
ICAgICAgICBfZ2VuZnJhbWUgPSBzeXMuX2dldGZyYW1lKDEpICMgdGhlIGNhbGxlcgotICAgICAg
ICAgICAgZm4sbGluZW5vID0gX2dlbmZyYW1lLmZfY29kZS5jb19maWxlbmFtZSwgX2dlbmZyYW1l
LmZfbGluZW5vCi0gICAgICAgICAgICBiYXNlID0gIjwlZC1jb2RlZ2VuICIgJSBzZWxmLl9jb21w
aWxlY291bnRlcgotICAgICAgICAgICAgc2VsZi5fX2NsYXNzX18uX2NvbXBpbGVjb3VudGVyICs9
IDEKLSAgICAgICAgICAgIGlmIG5vdCBmaWxlbmFtZToKLSAgICAgICAgICAgICAgICBmaWxlbmFt
ZSA9IGJhc2UgKyAnJXM6JWQ+JyAlIChmbiwgbGluZW5vKQotICAgICAgICAgICAgZWxzZToKLSAg
ICAgICAgICAgICAgICBmaWxlbmFtZSA9IGJhc2UgKyAnJXIgJXM6JWQ+JyAlIChmaWxlbmFtZSwg
Zm4sIGxpbmVubykKLSAgICAgICAgc291cmNlID0gIlxuIi5qb2luKHNlbGYubGluZXMpICsgJ1xu
JwotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBjbyA9IGNweV9jb21waWxlKHNvdXJjZSwgZmls
ZW5hbWUsIG1vZGUsIGZsYWcpCi0gICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvcjoKLSAgICAgICAg
ICAgIGV4ID0gc3lzLmV4Y19pbmZvKClbMV0KLSAgICAgICAgICAgICMgcmUtcmVwcmVzZW50IHN5
bnRheCBlcnJvcnMgZnJvbSBwYXJzaW5nIHB5dGhvbiBzdHJpbmdzCi0gICAgICAgICAgICBtc2ds
aW5lcyA9IHNlbGYubGluZXNbOmV4LmxpbmVub10KLSAgICAgICAgICAgIGlmIGV4Lm9mZnNldDoK
LSAgICAgICAgICAgICAgICBtc2dsaW5lcy5hcHBlbmQoIiAiKmV4Lm9mZnNldCArICdeJykKLSAg
ICAgICAgICAgIG1zZ2xpbmVzLmFwcGVuZCgiKGNvZGUgd2FzIGNvbXBpbGVkIHByb2JhYmx5IGZy
b20gaGVyZTogJXMpIiAlIGZpbGVuYW1lKQotICAgICAgICAgICAgbmV3ZXggPSBTeW50YXhFcnJv
cignXG4nLmpvaW4obXNnbGluZXMpKQotICAgICAgICAgICAgbmV3ZXgub2Zmc2V0ID0gZXgub2Zm
c2V0Ci0gICAgICAgICAgICBuZXdleC5saW5lbm8gPSBleC5saW5lbm8KLSAgICAgICAgICAgIG5l
d2V4LnRleHQgPSBleC50ZXh0Ci0gICAgICAgICAgICByYWlzZSBuZXdleAotICAgICAgICBlbHNl
OgotICAgICAgICAgICAgaWYgZmxhZyAmIF9BU1RfRkxBRzoKLSAgICAgICAgICAgICAgICByZXR1
cm4gY28KLSAgICAgICAgICAgIGxpbmVzID0gWyh4ICsgIlxuIikgZm9yIHggaW4gc2VsZi5saW5l
c10KLSAgICAgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm9bMF0gPj0gMzoKLSAgICAgICAgICAg
ICAgICAjIFhYWCBweTMncyBpbnNwZWN0LmdldHNvdXJjZWZpbGUoKSBjaGVja3MgZm9yIGEgbW9k
dWxlCi0gICAgICAgICAgICAgICAgIyBhbmQgYSBwZXAzMDIgX19sb2FkZXJfXyAuLi4gd2UgZG9u
J3QgaGF2ZSBhIG1vZHVsZQotICAgICAgICAgICAgICAgICMgYXQgY29kZSBjb21waWxlLXRpbWUg
c28gd2UgbmVlZCB0byBmYWtlIGl0IGhlcmUKLSAgICAgICAgICAgICAgICBtID0gTW9kdWxlVHlw
ZSgiX3B5Y29kZWNvbXBpbGVfcHNldWRvX21vZHVsZSIpCi0gICAgICAgICAgICAgICAgcHkuc3Rk
Lmluc3BlY3QubW9kdWxlc2J5ZmlsZVtmaWxlbmFtZV0gPSBOb25lCi0gICAgICAgICAgICAgICAg
cHkuc3RkLnN5cy5tb2R1bGVzW05vbmVdID0gbQotICAgICAgICAgICAgICAgIG0uX19sb2FkZXJf
XyA9IDEKLSAgICAgICAgICAgIHB5LnN0ZC5saW5lY2FjaGUuY2FjaGVbZmlsZW5hbWVdID0gKDEs
IE5vbmUsIGxpbmVzLCBmaWxlbmFtZSkKLSAgICAgICAgICAgIHJldHVybiBjbwotCi0jCi0jIHB1
YmxpYyBBUEkgc2hvcnRjdXQgZnVuY3Rpb25zCi0jCi0KLWRlZiBjb21waWxlXyhzb3VyY2UsIGZp
bGVuYW1lPU5vbmUsIG1vZGU9J2V4ZWMnLCBmbGFncz0KLSAgICAgICAgICAgIGdlbmVyYXRvcnMu
Y29tcGlsZXJfZmxhZywgZG9udF9pbmhlcml0PTApOgotICAgICIiIiBjb21waWxlIHRoZSBnaXZl
biBzb3VyY2UgdG8gYSByYXcgY29kZSBvYmplY3QsCi0gICAgICAgIGFuZCBtYWludGFpbiBhbiBp
bnRlcm5hbCBjYWNoZSB3aGljaCBhbGxvd3MgbGF0ZXIKLSAgICAgICAgcmV0cmlldmFsIG9mIHRo
ZSBzb3VyY2UgY29kZSBmb3IgdGhlIGNvZGUgb2JqZWN0Ci0gICAgICAgIGFuZCBhbnkgcmVjdXJz
aXZlbHkgY3JlYXRlZCBjb2RlIG9iamVjdHMuCi0gICAgIiIiCi0gICAgaWYgX2FzdCBpcyBub3Qg
Tm9uZSBhbmQgaXNpbnN0YW5jZShzb3VyY2UsIF9hc3QuQVNUKToKLSAgICAgICAgIyBYWFggc2hv
dWxkIFNvdXJjZSBzdXBwb3J0IGhhdmluZyBBU1Q/Ci0gICAgICAgIHJldHVybiBjcHlfY29tcGls
ZShzb3VyY2UsIGZpbGVuYW1lLCBtb2RlLCBmbGFncywgZG9udF9pbmhlcml0KQotICAgIF9nZW5m
cmFtZSA9IHN5cy5fZ2V0ZnJhbWUoMSkgIyB0aGUgY2FsbGVyCi0gICAgcyA9IFNvdXJjZShzb3Vy
Y2UpCi0gICAgY28gPSBzLmNvbXBpbGUoZmlsZW5hbWUsIG1vZGUsIGZsYWdzLCBfZ2VuZnJhbWU9
X2dlbmZyYW1lKQotICAgIHJldHVybiBjbwotCi0KLWRlZiBnZXRmc2xpbmVubyhvYmopOgotICAg
ICIiIiBSZXR1cm4gc291cmNlIGxvY2F0aW9uIChwYXRoLCBsaW5lbm8pIGZvciB0aGUgZ2l2ZW4g
b2JqZWN0LgotICAgIElmIHRoZSBzb3VyY2UgY2Fubm90IGJlIGRldGVybWluZWQgcmV0dXJuICgi
IiwgLTEpCi0gICAgIiIiCi0gICAgaW1wb3J0IF9weXRlc3QuX2NvZGUKLSAgICB0cnk6Ci0gICAg
ICAgIGNvZGUgPSBfcHl0ZXN0Ll9jb2RlLkNvZGUob2JqKQotICAgIGV4Y2VwdCBUeXBlRXJyb3I6
Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGZuID0gKHB5LnN0ZC5pbnNwZWN0LmdldHNvdXJj
ZWZpbGUob2JqKSBvcgotICAgICAgICAgICAgICAgICAgcHkuc3RkLmluc3BlY3QuZ2V0ZmlsZShv
YmopKQotICAgICAgICBleGNlcHQgVHlwZUVycm9yOgotICAgICAgICAgICAgcmV0dXJuICIiLCAt
MQotCi0gICAgICAgIGZzcGF0aCA9IGZuIGFuZCBweS5wYXRoLmxvY2FsKGZuKSBvciBOb25lCi0g
ICAgICAgIGxpbmVubyA9IC0xCi0gICAgICAgIGlmIGZzcGF0aDoKLSAgICAgICAgICAgIHRyeToK
LSAgICAgICAgICAgICAgICBfLCBsaW5lbm8gPSBmaW5kc291cmNlKG9iaikKLSAgICAgICAgICAg
IGV4Y2VwdCBJT0Vycm9yOgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICBlbHNlOgotICAgICAg
ICBmc3BhdGggPSBjb2RlLnBhdGgKLSAgICAgICAgbGluZW5vID0gY29kZS5maXJzdGxpbmVubwot
ICAgIGFzc2VydCBpc2luc3RhbmNlKGxpbmVubywgaW50KQotICAgIHJldHVybiBmc3BhdGgsIGxp
bmVubwotCi0jCi0jIGhlbHBlciBmdW5jdGlvbnMKLSMKLQotZGVmIGZpbmRzb3VyY2Uob2JqKToK
LSAgICB0cnk6Ci0gICAgICAgIHNvdXJjZWxpbmVzLCBsaW5lbm8gPSBweS5zdGQuaW5zcGVjdC5m
aW5kc291cmNlKG9iaikKLSAgICBleGNlcHQgcHkuYnVpbHRpbi5fc3lzZXg6Ci0gICAgICAgIHJh
aXNlCi0gICAgZXhjZXB0OgotICAgICAgICByZXR1cm4gTm9uZSwgLTEKLSAgICBzb3VyY2UgPSBT
b3VyY2UoKQotICAgIHNvdXJjZS5saW5lcyA9IFtsaW5lLnJzdHJpcCgpIGZvciBsaW5lIGluIHNv
dXJjZWxpbmVzXQotICAgIHJldHVybiBzb3VyY2UsIGxpbmVubwotCi1kZWYgZ2V0c291cmNlKG9i
aiwgKiprd2FyZ3MpOgotICAgIGltcG9ydCBfcHl0ZXN0Ll9jb2RlCi0gICAgb2JqID0gX3B5dGVz
dC5fY29kZS5nZXRyYXdjb2RlKG9iaikKLSAgICB0cnk6Ci0gICAgICAgIHN0cnNyYyA9IGluc3Bl
Y3QuZ2V0c291cmNlKG9iaikKLSAgICBleGNlcHQgSW5kZW50YXRpb25FcnJvcjoKLSAgICAgICAg
c3Ryc3JjID0gIlwiQnVnZ3kgcHl0aG9uIHZlcnNpb24gY29uc2lkZXIgdXBncmFkaW5nLCBjYW5u
b3QgZ2V0IHNvdXJjZVwiIgotICAgIGFzc2VydCBpc2luc3RhbmNlKHN0cnNyYywgc3RyKQotICAg
IHJldHVybiBTb3VyY2Uoc3Ryc3JjLCAqKmt3YXJncykKLQotZGVmIGRlaW5kZW50KGxpbmVzLCBv
ZmZzZXQ9Tm9uZSk6Ci0gICAgaWYgb2Zmc2V0IGlzIE5vbmU6Ci0gICAgICAgIGZvciBsaW5lIGlu
IGxpbmVzOgotICAgICAgICAgICAgbGluZSA9IGxpbmUuZXhwYW5kdGFicygpCi0gICAgICAgICAg
ICBzID0gbGluZS5sc3RyaXAoKQotICAgICAgICAgICAgaWYgczoKLSAgICAgICAgICAgICAgICBv
ZmZzZXQgPSBsZW4obGluZSktbGVuKHMpCi0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAg
ZWxzZToKLSAgICAgICAgICAgIG9mZnNldCA9IDAKLSAgICBpZiBvZmZzZXQgPT0gMDoKLSAgICAg
ICAgcmV0dXJuIGxpc3QobGluZXMpCi0gICAgbmV3bGluZXMgPSBbXQotICAgIGRlZiByZWFkbGlu
ZV9nZW5lcmF0b3IobGluZXMpOgotICAgICAgICBmb3IgbGluZSBpbiBsaW5lczoKLSAgICAgICAg
ICAgIHlpZWxkIGxpbmUgKyAnXG4nCi0gICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICAgICB5
aWVsZCAnJwotCi0gICAgaXQgPSByZWFkbGluZV9nZW5lcmF0b3IobGluZXMpCi0KLSAgICB0cnk6
Ci0gICAgICAgIGZvciBfLCBfLCAoc2xpbmUsIF8pLCAoZWxpbmUsIF8pLCBfIGluIHRva2VuaXpl
LmdlbmVyYXRlX3Rva2VucyhsYW1iZGE6IG5leHQoaXQpKToKLSAgICAgICAgICAgIGlmIHNsaW5l
ID4gbGVuKGxpbmVzKToKLSAgICAgICAgICAgICAgICBicmVhayAjIEVuZCBvZiBpbnB1dCByZWFj
aGVkCi0gICAgICAgICAgICBpZiBzbGluZSA+IGxlbihuZXdsaW5lcyk6Ci0gICAgICAgICAgICAg
ICAgbGluZSA9IGxpbmVzW3NsaW5lIC0gMV0uZXhwYW5kdGFicygpCi0gICAgICAgICAgICAgICAg
aWYgbGluZS5sc3RyaXAoKSBhbmQgbGluZVs6b2Zmc2V0XS5pc3NwYWNlKCk6Ci0gICAgICAgICAg
ICAgICAgICAgIGxpbmUgPSBsaW5lW29mZnNldDpdICMgRGVpbmRlbnQKLSAgICAgICAgICAgICAg
ICBuZXdsaW5lcy5hcHBlbmQobGluZSkKLQotICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2Uoc2xp
bmUsIGVsaW5lKToKLSAgICAgICAgICAgICAgICAjIERvbid0IGRlaW5kZW50IGNvbnRpbnVpbmcg
bGluZXMgb2YKLSAgICAgICAgICAgICAgICAjIG11bHRpbGluZSB0b2tlbnMgKGkuZS4gbXVsdGls
aW5lIHN0cmluZ3MpCi0gICAgICAgICAgICAgICAgbmV3bGluZXMuYXBwZW5kKGxpbmVzW2ldKQot
ICAgIGV4Y2VwdCAoSW5kZW50YXRpb25FcnJvciwgdG9rZW5pemUuVG9rZW5FcnJvcik6Ci0gICAg
ICAgIHBhc3MKLSAgICAjIEFkZCBhbnkgbGluZXMgd2UgZGlkbid0IHNlZS4gRS5nLiBpZiBhbiBl
eGNlcHRpb24gd2FzIHJhaXNlZC4KLSAgICBuZXdsaW5lcy5leHRlbmQobGluZXNbbGVuKG5ld2xp
bmVzKTpdKQotICAgIHJldHVybiBuZXdsaW5lcwotCi0KLWRlZiBnZXRfc3RhdGVtZW50X3N0YXJ0
ZW5kMihsaW5lbm8sIG5vZGUpOgotICAgIGltcG9ydCBhc3QKLSAgICAjIGZsYXR0ZW4gYWxsIHN0
YXRlbWVudHMgYW5kIGV4Y2VwdCBoYW5kbGVycyBpbnRvIG9uZSBsaW5lbm8tbGlzdAotICAgICMg
QVNUJ3MgbGluZSBudW1iZXJzIHN0YXJ0IGluZGV4aW5nIGF0IDEKLSAgICBsID0gW10KLSAgICBm
b3IgeCBpbiBhc3Qud2Fsayhub2RlKToKLSAgICAgICAgaWYgaXNpbnN0YW5jZSh4LCBfYXN0LnN0
bXQpIG9yIGlzaW5zdGFuY2UoeCwgX2FzdC5FeGNlcHRIYW5kbGVyKToKLSAgICAgICAgICAgIGwu
YXBwZW5kKHgubGluZW5vIC0gMSkKLSAgICAgICAgICAgIGZvciBuYW1lIGluICJmaW5hbGJvZHki
LCAib3JlbHNlIjoKLSAgICAgICAgICAgICAgICB2YWwgPSBnZXRhdHRyKHgsIG5hbWUsIE5vbmUp
Ci0gICAgICAgICAgICAgICAgaWYgdmFsOgotICAgICAgICAgICAgICAgICAgICAjIHRyZWF0IHRo
ZSBmaW5hbGx5L29yZWxzZSBwYXJ0IGFzIGl0cyBvd24gc3RhdGVtZW50Ci0gICAgICAgICAgICAg
ICAgICAgIGwuYXBwZW5kKHZhbFswXS5saW5lbm8gLSAxIC0gMSkKLSAgICBsLnNvcnQoKQotICAg
IGluc2VydF9pbmRleCA9IGJpc2VjdF9yaWdodChsLCBsaW5lbm8pCi0gICAgc3RhcnQgPSBsW2lu
c2VydF9pbmRleCAtIDFdCi0gICAgaWYgaW5zZXJ0X2luZGV4ID49IGxlbihsKToKLSAgICAgICAg
ZW5kID0gTm9uZQotICAgIGVsc2U6Ci0gICAgICAgIGVuZCA9IGxbaW5zZXJ0X2luZGV4XQotICAg
IHJldHVybiBzdGFydCwgZW5kCi0KLQotZGVmIGdldHN0YXRlbWVudHJhbmdlX2FzdChsaW5lbm8s
IHNvdXJjZSwgYXNzZXJ0aW9uPUZhbHNlLCBhc3Rub2RlPU5vbmUpOgotICAgIGlmIGFzdG5vZGUg
aXMgTm9uZToKLSAgICAgICAgY29udGVudCA9IHN0cihzb3VyY2UpCi0gICAgICAgIGlmIHN5cy52
ZXJzaW9uX2luZm8gPCAoMiw3KToKLSAgICAgICAgICAgIGNvbnRlbnQgKz0gIlxuIgotICAgICAg
ICB0cnk6Ci0gICAgICAgICAgICBhc3Rub2RlID0gY29tcGlsZShjb250ZW50LCAic291cmNlIiwg
ImV4ZWMiLCAxMDI0KSAgIyAxMDI0IGZvciBBU1QKLSAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6
Ci0gICAgICAgICAgICBzdGFydCwgZW5kID0gZ2V0c3RhdGVtZW50cmFuZ2Vfb2xkKGxpbmVubywg
c291cmNlLCBhc3NlcnRpb24pCi0gICAgICAgICAgICByZXR1cm4gTm9uZSwgc3RhcnQsIGVuZAot
ICAgIHN0YXJ0LCBlbmQgPSBnZXRfc3RhdGVtZW50X3N0YXJ0ZW5kMihsaW5lbm8sIGFzdG5vZGUp
Ci0gICAgIyB3ZSBuZWVkIHRvIGNvcnJlY3QgdGhlIGVuZDoKLSAgICAjIC0gYXN0LXBhcnNpbmcg
c3RyaXBzIGNvbW1lbnRzCi0gICAgIyAtIHRoZXJlIG1pZ2h0IGJlIGVtcHR5IGxpbmVzCi0gICAg
IyAtIHdlIG1pZ2h0IGhhdmUgbGVzc2VyIGluZGVudGVkIGNvZGUgYmxvY2tzIGF0IHRoZSBlbmQK
LSAgICBpZiBlbmQgaXMgTm9uZToKLSAgICAgICAgZW5kID0gbGVuKHNvdXJjZS5saW5lcykKLQot
ICAgIGlmIGVuZCA+IHN0YXJ0ICsgMToKLSAgICAgICAgIyBtYWtlIHN1cmUgd2UgZG9uJ3Qgc3Bh
biBkaWZmZXJlbnRseSBpbmRlbnRlZCBjb2RlIGJsb2NrcwotICAgICAgICAjIGJ5IHVzaW5nIHRo
ZSBCbG9ja0ZpbmRlciBoZWxwZXIgdXNlZCB3aGljaCBpbnNwZWN0LmdldHNvdXJjZSgpIHVzZXMg
aXRzZWxmCi0gICAgICAgIGJsb2NrX2ZpbmRlciA9IGluc3BlY3QuQmxvY2tGaW5kZXIoKQotICAg
ICAgICAjIGlmIHdlIHN0YXJ0IHdpdGggYW4gaW5kZW50ZWQgbGluZSwgcHV0IGJsb2NrZmluZGVy
IHRvICJzdGFydGVkIiBtb2RlCi0gICAgICAgIGJsb2NrX2ZpbmRlci5zdGFydGVkID0gc291cmNl
LmxpbmVzW3N0YXJ0XVswXS5pc3NwYWNlKCkKLSAgICAgICAgaXQgPSAoKHggKyAiXG4iKSBmb3Ig
eCBpbiBzb3VyY2UubGluZXNbc3RhcnQ6ZW5kXSkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAg
Zm9yIHRvayBpbiB0b2tlbml6ZS5nZW5lcmF0ZV90b2tlbnMobGFtYmRhOiBuZXh0KGl0KSk6Ci0g
ICAgICAgICAgICAgICAgYmxvY2tfZmluZGVyLnRva2VuZWF0ZXIoKnRvaykKLSAgICAgICAgZXhj
ZXB0IChpbnNwZWN0LkVuZE9mQmxvY2ssIEluZGVudGF0aW9uRXJyb3IpOgotICAgICAgICAgICAg
ZW5kID0gYmxvY2tfZmluZGVyLmxhc3QgKyBzdGFydAotICAgICAgICBleGNlcHQgRXhjZXB0aW9u
OgotICAgICAgICAgICAgcGFzcwotCi0gICAgIyB0aGUgZW5kIG1pZ2h0IHN0aWxsIHBvaW50IHRv
IGEgY29tbWVudCBvciBlbXB0eSBsaW5lLCBjb3JyZWN0IGl0Ci0gICAgd2hpbGUgZW5kOgotICAg
ICAgICBsaW5lID0gc291cmNlLmxpbmVzW2VuZCAtIDFdLmxzdHJpcCgpCi0gICAgICAgIGlmIGxp
bmUuc3RhcnRzd2l0aCgiIyIpIG9yIG5vdCBsaW5lOgotICAgICAgICAgICAgZW5kIC09IDEKLSAg
ICAgICAgZWxzZToKLSAgICAgICAgICAgIGJyZWFrCi0gICAgcmV0dXJuIGFzdG5vZGUsIHN0YXJ0
LCBlbmQKLQotCi1kZWYgZ2V0c3RhdGVtZW50cmFuZ2Vfb2xkKGxpbmVubywgc291cmNlLCBhc3Nl
cnRpb249RmFsc2UpOgotICAgICIiIiByZXR1cm4gKHN0YXJ0LCBlbmQpIHR1cGxlIHdoaWNoIHNw
YW5zIHRoZSBtaW5pbWFsCi0gICAgICAgIHN0YXRlbWVudCByZWdpb24gd2hpY2ggY29udGFpbmlu
ZyB0aGUgZ2l2ZW4gbGluZW5vLgotICAgICAgICByYWlzZSBhbiBJbmRleEVycm9yIGlmIG5vIHN1
Y2ggc3RhdGVtZW50cmFuZ2UgY2FuIGJlIGZvdW5kLgotICAgICIiIgotICAgICMgWFhYIHRoaXMg
bG9naWMgaXMgb25seSB1c2VkIG9uIHB5dGhvbjIuNCBhbmQgYmVsb3cKLSAgICAjIDEuIGZpbmQg
dGhlIHN0YXJ0IG9mIHRoZSBzdGF0ZW1lbnQKLSAgICBmcm9tIGNvZGVvcCBpbXBvcnQgY29tcGls
ZV9jb21tYW5kCi0gICAgZm9yIHN0YXJ0IGluIHJhbmdlKGxpbmVubywgLTEsIC0xKToKLSAgICAg
ICAgaWYgYXNzZXJ0aW9uOgotICAgICAgICAgICAgbGluZSA9IHNvdXJjZS5saW5lc1tzdGFydF0K
LSAgICAgICAgICAgICMgdGhlIGZvbGxvd2luZyBsaW5lcyBhcmUgbm90IGZ1bGx5IHRlc3RlZCwg
Y2hhbmdlIHdpdGggY2FyZQotICAgICAgICAgICAgaWYgJ3N1cGVyJyBpbiBsaW5lIGFuZCAnc2Vs
ZicgaW4gbGluZSBhbmQgJ19faW5pdF9fJyBpbiBsaW5lOgotICAgICAgICAgICAgICAgIHJhaXNl
IEluZGV4RXJyb3IoImxpa2VseSBhIHN1YmNsYXNzIikKLSAgICAgICAgICAgIGlmICJhc3NlcnQi
IG5vdCBpbiBsaW5lIGFuZCAicmFpc2UiIG5vdCBpbiBsaW5lOgotICAgICAgICAgICAgICAgIGNv
bnRpbnVlCi0gICAgICAgIHRyeWxpbmVzID0gc291cmNlLmxpbmVzW3N0YXJ0OmxpbmVubysxXQot
ICAgICAgICAjIHF1aWNrIGhhY2sgdG8gcHJlcGFyZSBwYXJzaW5nIGFuIGluZGVudGVkIGxpbmUg
d2l0aAotICAgICAgICAjIGNvbXBpbGVfY29tbWFuZCgpICh3aGljaCBlcnJvcnMgb24gInJldHVy
biIgb3V0c2lkZSBkZWZzKQotICAgICAgICB0cnlsaW5lcy5pbnNlcnQoMCwgJ2RlZiB4eHgoKTon
KQotICAgICAgICB0cnlzb3VyY2UgPSAnXG4gJy5qb2luKHRyeWxpbmVzKQotICAgICAgICAjICAg
ICAgICAgICAgICBeIHNwYWNlIGhlcmUKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgY29tcGls
ZV9jb21tYW5kKHRyeXNvdXJjZSkKLSAgICAgICAgZXhjZXB0IChTeW50YXhFcnJvciwgT3ZlcmZs
b3dFcnJvciwgVmFsdWVFcnJvcik6Ci0gICAgICAgICAgICBjb250aW51ZQotCi0gICAgICAgICMg
Mi4gZmluZCB0aGUgZW5kIG9mIHRoZSBzdGF0ZW1lbnQKLSAgICAgICAgZm9yIGVuZCBpbiByYW5n
ZShsaW5lbm8rMSwgbGVuKHNvdXJjZSkrMSk6Ci0gICAgICAgICAgICB0cnlzb3VyY2UgPSBzb3Vy
Y2Vbc3RhcnQ6ZW5kXQotICAgICAgICAgICAgaWYgdHJ5c291cmNlLmlzcGFyc2VhYmxlKCk6Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIHN0YXJ0LCBlbmQKLSAgICByYWlzZSBTeW50YXhFcnJvcigi
bm8gdmFsaWQgc291cmNlIHJhbmdlIGFyb3VuZCBsaW5lICVkICIgJSAobGluZW5vLCkpCi0KLQpk
aWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0
ZXN0L19wbHVnZ3kucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0
L19weXRlc3QvX3BsdWdneS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODdkMzJj
ZjhkZDEuLjAwMDAwMDAwMDAwCi0tLSBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29s
cy9weXRlc3QvX3B5dGVzdC9fcGx1Z2d5LnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBA
QAotIiIiCi1pbXBvcnRzIHN5bWJvbHMgZnJvbSB2ZW5kb3JlZCAicGx1Z2d5IiBpZiBhdmFpbGFi
bGUsIG90aGVyd2lzZQotZmFsbHMgYmFjayB0byBpbXBvcnRpbmcgInBsdWdneSIgZnJvbSB0aGUg
ZGVmYXVsdCBuYW1lc3BhY2UuCi0iIiIKLQotdHJ5OgotICAgIGZyb20gX3B5dGVzdC52ZW5kb3Jl
ZF9wYWNrYWdlcy5wbHVnZ3kgaW1wb3J0ICogICMgbm9xYQotICAgIGZyb20gX3B5dGVzdC52ZW5k
b3JlZF9wYWNrYWdlcy5wbHVnZ3kgaW1wb3J0IF9fdmVyc2lvbl9fICAjIG5vcWEKLWV4Y2VwdCBJ
bXBvcnRFcnJvcjoKLSAgICBmcm9tIHBsdWdneSBpbXBvcnQgKiAgIyBub3FhCi0gICAgZnJvbSBw
bHVnZ3kgaW1wb3J0IF9fdmVyc2lvbl9fICAjIG5vcWEKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRl
c3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9hc3NlcnRpb24vX19pbml0X18u
cHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvYXNz
ZXJ0aW9uL19faW5pdF9fLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTIxZGVi
MmE2MC4uMDAwMDAwMDAwMDAKLS0tIGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xz
L3B5dGVzdC9fcHl0ZXN0L2Fzc2VydGlvbi9fX2luaXRfXy5weQorKysgL2Rldi9udWxsCkBAIC0x
LDE3NiArMCwwIEBACi0iIiIKLXN1cHBvcnQgZm9yIHByZXNlbnRpbmcgZGV0YWlsZWQgaW5mb3Jt
YXRpb24gaW4gZmFpbGluZyBhc3NlcnRpb25zLgotIiIiCi1pbXBvcnQgcHkKLWltcG9ydCBvcwot
aW1wb3J0IHN5cwotZnJvbSBfcHl0ZXN0Lm1vbmtleXBhdGNoIGltcG9ydCBtb25rZXlwYXRjaAot
ZnJvbSBfcHl0ZXN0LmFzc2VydGlvbiBpbXBvcnQgdXRpbAotCi0KLWRlZiBweXRlc3RfYWRkb3B0
aW9uKHBhcnNlcik6Ci0gICAgZ3JvdXAgPSBwYXJzZXIuZ2V0Z3JvdXAoImRlYnVnY29uZmlnIikK
LSAgICBncm91cC5hZGRvcHRpb24oJy0tYXNzZXJ0JywKLSAgICAgICAgICAgICAgICAgICAgYWN0
aW9uPSJzdG9yZSIsCi0gICAgICAgICAgICAgICAgICAgIGRlc3Q9ImFzc2VydG1vZGUiLAotICAg
ICAgICAgICAgICAgICAgICBjaG9pY2VzPSgicmV3cml0ZSIsICJyZWludGVycCIsICJwbGFpbiIs
KSwKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0icmV3cml0ZSIsCi0gICAgICAgICAgICAg
ICAgICAgIG1ldGF2YXI9Ik1PREUiLAotICAgICAgICAgICAgICAgICAgICBoZWxwPSIiImNvbnRy
b2wgYXNzZXJ0aW9uIGRlYnVnZ2luZyB0b29scy4gICdwbGFpbicKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwZXJmb3JtcyBubyBhc3NlcnRpb24gZGVidWdnaW5nLiAgJ3JlaW50ZXJwJwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0cyBhc3NlcnQgc3RhdGVtZW50
cyBhZnRlciB0aGV5IGZhaWxlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHByb3Zp
ZGUgYXNzZXJ0aW9uIGV4cHJlc3Npb24gaW5mb3JtYXRpb24uCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJ3Jld3JpdGUnICh0aGUgZGVmYXVsdCkgcmV3cml0ZXMgYXNzZXJ0Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50cyBpbiB0ZXN0IG1vZHVsZXMgb24gaW1wb3J0
IHRvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZSBhc3NlcnQgZXhwcmVzc2lv
biBpbmZvcm1hdGlvbi4gIiIiKQotICAgIGdyb3VwLmFkZG9wdGlvbignLS1uby1hc3NlcnQnLAot
ICAgICAgICAgICAgICAgICAgICBhY3Rpb249InN0b3JlX3RydWUiLAotICAgICAgICAgICAgICAg
ICAgICBkZWZhdWx0PUZhbHNlLAotICAgICAgICAgICAgICAgICAgICBkZXN0PSJub2Fzc2VydCIs
Ci0gICAgICAgICAgICAgICAgICAgIGhlbHA9IkRFUFJFQ0FURUQgZXF1aXZhbGVudCB0byAtLWFz
c2VydD1wbGFpbiIpCi0gICAgZ3JvdXAuYWRkb3B0aW9uKCctLW5vbWFnaWMnLCAnLS1uby1tYWdp
YycsCi0gICAgICAgICAgICAgICAgICAgIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCi0gICAgICAgICAg
ICAgICAgICAgIGRlZmF1bHQ9RmFsc2UsCi0gICAgICAgICAgICAgICAgICAgIGhlbHA9IkRFUFJF
Q0FURUQgZXF1aXZhbGVudCB0byAtLWFzc2VydD1wbGFpbiIpCi0KLQotY2xhc3MgQXNzZXJ0aW9u
U3RhdGU6Ci0gICAgIiIiU3RhdGUgZm9yIHRoZSBhc3NlcnRpb24gcGx1Z2luLiIiIgotCi0gICAg
ZGVmIF9faW5pdF9fKHNlbGYsIGNvbmZpZywgbW9kZSk6Ci0gICAgICAgIHNlbGYubW9kZSA9IG1v
ZGUKLSAgICAgICAgc2VsZi50cmFjZSA9IGNvbmZpZy50cmFjZS5yb290LmdldCgiYXNzZXJ0aW9u
IikKLQotCi1kZWYgcHl0ZXN0X2NvbmZpZ3VyZShjb25maWcpOgotICAgIG1vZGUgPSBjb25maWcu
Z2V0dmFsdWUoImFzc2VydG1vZGUiKQotICAgIGlmIGNvbmZpZy5nZXR2YWx1ZSgibm9hc3NlcnQi
KSBvciBjb25maWcuZ2V0dmFsdWUoIm5vbWFnaWMiKToKLSAgICAgICAgbW9kZSA9ICJwbGFpbiIK
LSAgICBpZiBtb2RlID09ICJyZXdyaXRlIjoKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgaW1w
b3J0IGFzdCAgIyBub3FhCi0gICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgICAg
IG1vZGUgPSAicmVpbnRlcnAiCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAjIEJvdGggSnl0
aG9uIGFuZCBDUHl0aG9uIDIuNi4wIGhhdmUgQVNUIGJ1Z3MgdGhhdCBtYWtlIHRoZQotICAgICAg
ICAgICAgIyBhc3NlcnRpb24gcmV3cml0aW5nIGhvb2sgbWFsZnVuY3Rpb24uCi0gICAgICAgICAg
ICBpZiAoc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ2phdmEnKSBvcgotICAgICAgICAgICAgICAg
ICAgICBzeXMudmVyc2lvbl9pbmZvWzozXSA9PSAoMiwgNiwgMCkpOgotICAgICAgICAgICAgICAg
IG1vZGUgPSAicmVpbnRlcnAiCi0gICAgaWYgbW9kZSAhPSAicGxhaW4iOgotICAgICAgICBfbG9h
ZF9tb2R1bGVzKG1vZGUpCi0gICAgICAgIG0gPSBtb25rZXlwYXRjaCgpCi0gICAgICAgIGNvbmZp
Zy5fY2xlYW51cC5hcHBlbmQobS51bmRvKQotICAgICAgICBtLnNldGF0dHIocHkuYnVpbHRpbi5i
dWlsdGlucywgJ0Fzc2VydGlvbkVycm9yJywKLSAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0
LkFzc2VydGlvbkVycm9yKSAgIyBub3FhCi0gICAgaG9vayA9IE5vbmUKLSAgICBpZiBtb2RlID09
ICJyZXdyaXRlIjoKLSAgICAgICAgaG9vayA9IHJld3JpdGUuQXNzZXJ0aW9uUmV3cml0aW5nSG9v
aygpICAjIG5vcWEKLSAgICAgICAgc3lzLm1ldGFfcGF0aC5pbnNlcnQoMCwgaG9vaykKLSAgICB3
YXJuX2Fib3V0X21pc3NpbmdfYXNzZXJ0aW9uKG1vZGUpCi0gICAgY29uZmlnLl9hc3NlcnRzdGF0
ZSA9IEFzc2VydGlvblN0YXRlKGNvbmZpZywgbW9kZSkKLSAgICBjb25maWcuX2Fzc2VydHN0YXRl
Lmhvb2sgPSBob29rCi0gICAgY29uZmlnLl9hc3NlcnRzdGF0ZS50cmFjZSgiY29uZmlndXJlZCB3
aXRoIG1vZGUgc2V0IHRvICVyIiAlIChtb2RlLCkpCi0gICAgZGVmIHVuZG8oKToKLSAgICAgICAg
aG9vayA9IGNvbmZpZy5fYXNzZXJ0c3RhdGUuaG9vawotICAgICAgICBpZiBob29rIGlzIG5vdCBO
b25lIGFuZCBob29rIGluIHN5cy5tZXRhX3BhdGg6Ci0gICAgICAgICAgICBzeXMubWV0YV9wYXRo
LnJlbW92ZShob29rKQotICAgIGNvbmZpZy5hZGRfY2xlYW51cCh1bmRvKQotCi0KLWRlZiBweXRl
c3RfY29sbGVjdGlvbihzZXNzaW9uKToKLSAgICAjIHRoaXMgaG9vayBpcyBvbmx5IGNhbGxlZCB3
aGVuIHRlc3QgbW9kdWxlcyBhcmUgY29sbGVjdGVkCi0gICAgIyBzbyBmb3IgZXhhbXBsZSBub3Qg
aW4gdGhlIG1hc3RlciBwcm9jZXNzIG9mIHB5dGVzdC14ZGlzdAotICAgICMgKHdoaWNoIGRvZXMg
bm90IGNvbGxlY3QgdGVzdCBtb2R1bGVzKQotICAgIGhvb2sgPSBzZXNzaW9uLmNvbmZpZy5fYXNz
ZXJ0c3RhdGUuaG9vawotICAgIGlmIGhvb2sgaXMgbm90IE5vbmU6Ci0gICAgICAgIGhvb2suc2V0
X3Nlc3Npb24oc2Vzc2lvbikKLQotCi1kZWYgX3J1bm5pbmdfb25fY2koKToKLSAgICAiIiJDaGVj
ayBpZiB3ZSdyZSBjdXJyZW50bHkgcnVubmluZyBvbiBhIENJIHN5c3RlbS4iIiIKLSAgICBlbnZf
dmFycyA9IFsnQ0knLCAnQlVJTERfTlVNQkVSJ10KLSAgICByZXR1cm4gYW55KHZhciBpbiBvcy5l
bnZpcm9uIGZvciB2YXIgaW4gZW52X3ZhcnMpCi0KLQotZGVmIHB5dGVzdF9ydW50ZXN0X3NldHVw
KGl0ZW0pOgotICAgICIiIlNldHVwIHRoZSBweXRlc3RfYXNzZXJ0cmVwcl9jb21wYXJlIGhvb2sK
LQotICAgIFRoZSBuZXdpbnRlcnByZXQgYW5kIHJld3JpdGUgbW9kdWxlcyB3aWxsIHVzZSB1dGls
Ll9yZXByY29tcGFyZSBpZgotICAgIGl0IGV4aXN0cyB0byB1c2UgY3VzdG9tIHJlcG9ydGluZyB2
aWEgdGhlCi0gICAgcHl0ZXN0X2Fzc2VydHJlcHJfY29tcGFyZSBob29rLiAgVGhpcyBzZXRzIHVw
IHRoaXMgY3VzdG9tCi0gICAgY29tcGFyaXNvbiBmb3IgdGhlIHRlc3QuCi0gICAgIiIiCi0gICAg
ZGVmIGNhbGxiaW5yZXByKG9wLCBsZWZ0LCByaWdodCk6Ci0gICAgICAgICIiIkNhbGwgdGhlIHB5
dGVzdF9hc3NlcnRyZXByX2NvbXBhcmUgaG9vayBhbmQgcHJlcGFyZSB0aGUgcmVzdWx0Ci0KLSAg
ICAgICAgVGhpcyB1c2VzIHRoZSBmaXJzdCByZXN1bHQgZnJvbSB0aGUgaG9vayBhbmQgdGhlbiBl
bnN1cmVzIHRoZQotICAgICAgICBmb2xsb3dpbmc6Ci0gICAgICAgICogT3Zlcmx5IHZlcmJvc2Ug
ZXhwbGFuYXRpb25zIGFyZSBkcm9wcGVkIHVubGVzcyAtdnYgd2FzIHVzZWQgb3IKLSAgICAgICAg
ICBydW5uaW5nIG9uIGEgQ0kuCi0gICAgICAgICogRW1iZWRkZWQgbmV3bGluZXMgYXJlIGVzY2Fw
ZWQgdG8gaGVscCB1dGlsLmZvcm1hdF9leHBsYW5hdGlvbigpCi0gICAgICAgICAgbGF0ZXIuCi0g
ICAgICAgICogSWYgdGhlIHJld3JpdGUgbW9kZSBpcyB1c2VkIGVtYmVkZGVkICUtY2hhcmFjdGVy
cyBhcmUgcmVwbGFjZWQKLSAgICAgICAgICB0byBwcm90ZWN0IGxhdGVyICUgZm9ybWF0dGluZy4K
LQotICAgICAgICBUaGUgcmVzdWx0IGNhbiBiZSBmb3JtYXR0ZWQgYnkgdXRpbC5mb3JtYXRfZXhw
bGFuYXRpb24oKSBmb3IKLSAgICAgICAgcHJldHR5IHByaW50aW5nLgotICAgICAgICAiIiIKLSAg
ICAgICAgaG9va19yZXN1bHQgPSBpdGVtLmlob29rLnB5dGVzdF9hc3NlcnRyZXByX2NvbXBhcmUo
Ci0gICAgICAgICAgICBjb25maWc9aXRlbS5jb25maWcsIG9wPW9wLCBsZWZ0PWxlZnQsIHJpZ2h0
PXJpZ2h0KQotICAgICAgICBmb3IgbmV3X2V4cGwgaW4gaG9va19yZXN1bHQ6Ci0gICAgICAgICAg
ICBpZiBuZXdfZXhwbDoKLSAgICAgICAgICAgICAgICBpZiAoc3VtKGxlbihwKSBmb3IgcCBpbiBu
ZXdfZXhwbFsxOl0pID4gODAqOCBhbmQKLSAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uY29u
ZmlnLm9wdGlvbi52ZXJib3NlIDwgMiBhbmQKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBf
cnVubmluZ19vbl9jaSgpKToKLSAgICAgICAgICAgICAgICAgICAgc2hvd19tYXggPSAxMAotICAg
ICAgICAgICAgICAgICAgICB0cnVuY2F0ZWRfbGluZXMgPSBsZW4obmV3X2V4cGwpIC0gc2hvd19t
YXgKLSAgICAgICAgICAgICAgICAgICAgbmV3X2V4cGxbc2hvd19tYXg6XSA9IFtweS5idWlsdGlu
Ll90b3RleHQoCi0gICAgICAgICAgICAgICAgICAgICAgICAnRGV0YWlsZWQgaW5mb3JtYXRpb24g
dHJ1bmNhdGVkICglZCBtb3JlIGxpbmVzKScKLSAgICAgICAgICAgICAgICAgICAgICAgICcsIHVz
ZSAiLXZ2IiB0byBzaG93JyAlIHRydW5jYXRlZF9saW5lcyldCi0gICAgICAgICAgICAgICAgbmV3
X2V4cGwgPSBbbGluZS5yZXBsYWNlKCJcbiIsICJcXG4iKSBmb3IgbGluZSBpbiBuZXdfZXhwbF0K
LSAgICAgICAgICAgICAgICByZXMgPSBweS5idWlsdGluLl90b3RleHQoIlxufiIpLmpvaW4obmV3
X2V4cGwpCi0gICAgICAgICAgICAgICAgaWYgaXRlbS5jb25maWcuZ2V0dmFsdWUoImFzc2VydG1v
ZGUiKSA9PSAicmV3cml0ZSI6Ci0gICAgICAgICAgICAgICAgICAgIHJlcyA9IHJlcy5yZXBsYWNl
KCIlIiwgIiUlIikKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzCi0gICAgdXRpbC5fcmVwcmNv
bXBhcmUgPSBjYWxsYmlucmVwcgotCi0KLWRlZiBweXRlc3RfcnVudGVzdF90ZWFyZG93bihpdGVt
KToKLSAgICB1dGlsLl9yZXByY29tcGFyZSA9IE5vbmUKLQotCi1kZWYgcHl0ZXN0X3Nlc3Npb25m
aW5pc2goc2Vzc2lvbik6Ci0gICAgaG9vayA9IHNlc3Npb24uY29uZmlnLl9hc3NlcnRzdGF0ZS5o
b29rCi0gICAgaWYgaG9vayBpcyBub3QgTm9uZToKLSAgICAgICAgaG9vay5zZXNzaW9uID0gTm9u
ZQotCi0KLWRlZiBfbG9hZF9tb2R1bGVzKG1vZGUpOgotICAgICIiIkxhemlseSBpbXBvcnQgYXNz
ZXJ0aW9uIHJlbGF0ZWQgY29kZS4iIiIKLSAgICBnbG9iYWwgcmV3cml0ZSwgcmVpbnRlcnByZXQK
LSAgICBmcm9tIF9weXRlc3QuYXNzZXJ0aW9uIGltcG9ydCByZWludGVycHJldCAgIyBub3FhCi0g
ICAgaWYgbW9kZSA9PSAicmV3cml0ZSI6Ci0gICAgICAgIGZyb20gX3B5dGVzdC5hc3NlcnRpb24g
aW1wb3J0IHJld3JpdGUgICMgbm9xYQotCi0KLWRlZiB3YXJuX2Fib3V0X21pc3NpbmdfYXNzZXJ0
aW9uKG1vZGUpOgotICAgIHRyeToKLSAgICAgICAgYXNzZXJ0IEZhbHNlCi0gICAgZXhjZXB0IEFz
c2VydGlvbkVycm9yOgotICAgICAgICBwYXNzCi0gICAgZWxzZToKLSAgICAgICAgaWYgbW9kZSA9
PSAicmV3cml0ZSI6Ci0gICAgICAgICAgICBzcGVjaWZpY2FsbHkgPSAoImFzc2VydGlvbnMgd2hp
Y2ggYXJlIG5vdCBpbiB0ZXN0IG1vZHVsZXMgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJ3aWxsIGJlIGlnbm9yZWQiKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc3BlY2lmaWNh
bGx5ID0gImZhaWxpbmcgdGVzdHMgbWF5IHJlcG9ydCBhcyBwYXNzaW5nIgotCi0gICAgICAgIHN5
cy5zdGRlcnIud3JpdGUoIldBUk5JTkc6ICIgKyBzcGVjaWZpY2FsbHkgKwotICAgICAgICAgICAg
ICAgICAgICAgICAgICIgYmVjYXVzZSBhc3NlcnQgc3RhdGVtZW50cyBhcmUgbm90IGV4ZWN1dGVk
ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAiYnkgdGhlIHVuZGVybHlpbmcgUHl0aG9uIGlu
dGVycHJldGVyICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAiKGFyZSB5b3UgdXNpbmcgcHl0
aG9uIC1PPylcbiIpCi0KLQotIyBFeHBvc2UgdGhpcyBwbHVnaW4ncyBpbXBsZW1lbnRhdGlvbiBm
b3IgdGhlIHB5dGVzdF9hc3NlcnRyZXByX2NvbXBhcmUgaG9vawotcHl0ZXN0X2Fzc2VydHJlcHJf
Y29tcGFyZSA9IHV0aWwuYXNzZXJ0cmVwcl9jb21wYXJlCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJU
ZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvYXNzZXJ0aW9uL3JlaW50ZXJw
cmV0LnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0
L2Fzc2VydGlvbi9yZWludGVycHJldC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ZjQyNjJjM2FjZWQuLjAwMDAwMDAwMDAwCi0tLSBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3cz
Yy90b29scy9weXRlc3QvX3B5dGVzdC9hc3NlcnRpb24vcmVpbnRlcnByZXQucHkKKysrIC9kZXYv
bnVsbApAQCAtMSw0MDcgKzAsMCBAQAotIiIiCi1GaW5kIGludGVybWVkaWF0ZSBldmFsdXRhdGlv
biByZXN1bHRzIGluIGFzc2VydCBzdGF0ZW1lbnRzIHRocm91Z2ggYnVpbHRpbiBBU1QuCi0iIiIK
LWltcG9ydCBhc3QKLWltcG9ydCBzeXMKLQotaW1wb3J0IF9weXRlc3QuX2NvZGUKLWltcG9ydCBw
eQotZnJvbSBfcHl0ZXN0LmFzc2VydGlvbiBpbXBvcnQgdXRpbAotdSA9IHB5LmJ1aWx0aW4uX3Rv
dGV4dAotCi0KLWNsYXNzIEFzc2VydGlvbkVycm9yKHV0aWwuQnVpbHRpbkFzc2VydGlvbkVycm9y
KToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MpOgotICAgICAgICB1dGlsLkJ1aWx0aW5B
c3NlcnRpb25FcnJvci5fX2luaXRfXyhzZWxmLCAqYXJncykKLSAgICAgICAgaWYgYXJnczoKLSAg
ICAgICAgICAgICMgb24gUHl0aG9uMi42IHdlIGdldCBsZW4oYXJncyk9PTIgZm9yOiBhc3NlcnQg
MCwgKHgseSkKLSAgICAgICAgICAgICMgb24gUHl0aG9uMi43IGFuZCBhYm92ZSB3ZSBhbHdheXMg
Z2V0IGxlbihhcmdzKSA9PSAxCi0gICAgICAgICAgICAjIHdpdGggYXJnc1swXSBiZWluZyB0aGUg
KHgseSkgdHVwbGUuCi0gICAgICAgICAgICBpZiBsZW4oYXJncykgPiAxOgotICAgICAgICAgICAg
ICAgIHRvcHJpbnQgPSBhcmdzCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHRv
cHJpbnQgPSBhcmdzWzBdCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc2VsZi5t
c2cgPSB1KHRvcHJpbnQpCi0gICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgotICAgICAgICAg
ICAgICAgIHNlbGYubXNnID0gdSgKLSAgICAgICAgICAgICAgICAgICAgIjxbYnJva2VuIF9fcmVw
cl9fXSAlcyBhdCAlMHhkPiIKLSAgICAgICAgICAgICAgICAgICAgJSAodG9wcmludC5fX2NsYXNz
X18sIGlkKHRvcHJpbnQpKSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGYgPSBfcHl0ZXN0
Ll9jb2RlLkZyYW1lKHN5cy5fZ2V0ZnJhbWUoMSkpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAg
ICAgICAgICAgc291cmNlID0gZi5jb2RlLmZ1bGxzb3VyY2UKLSAgICAgICAgICAgICAgICBpZiBz
b3VyY2UgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHNvdXJjZSA9IHNvdXJjZS5nZXRzdGF0ZW1lbnQoZi5saW5lbm8sIGFzc2Vy
dGlvbj1UcnVlKQotICAgICAgICAgICAgICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHNvdXJjZSA9IE5vbmUKLSAgICAgICAgICAgICAgICAgICAgZWxz
ZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSA9IHN0cihzb3VyY2UuZGVpbmRlbnQo
KSkuc3RyaXAoKQotICAgICAgICAgICAgZXhjZXB0IHB5LmVycm9yLkVOT0VOVDoKLSAgICAgICAg
ICAgICAgICBzb3VyY2UgPSBOb25lCi0gICAgICAgICAgICAgICAgIyB0aGlzIGNhbiBhbHNvIG9j
Y3VyIGR1cmluZyByZWludGVycHJldGF0aW9uLCB3aGVuIHRoZQotICAgICAgICAgICAgICAgICMg
Y29fZmlsZW5hbWUgaXMgc2V0IHRvICI8cnVuPiIuCi0gICAgICAgICAgICBpZiBzb3VyY2U6Ci0g
ICAgICAgICAgICAgICAgc2VsZi5tc2cgPSByZWludGVycHJldChzb3VyY2UsIGYsIHNob3VsZF9m
YWlsPVRydWUpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYubXNnID0g
Ijxjb3VsZCBub3QgZGV0ZXJtaW5lIGluZm9ybWF0aW9uPiIKLSAgICAgICAgICAgIGlmIG5vdCBz
ZWxmLmFyZ3M6Ci0gICAgICAgICAgICAgICAgc2VsZi5hcmdzID0gKHNlbGYubXNnLCkKLQotaWYg
c3lzLnZlcnNpb25faW5mbyA+ICgzLCAwKToKLSAgICBBc3NlcnRpb25FcnJvci5fX21vZHVsZV9f
ID0gImJ1aWx0aW5zIgotCi1pZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgiamF2YSIpOgotICAg
ICMgU2VlIGh0dHA6Ly9idWdzLmp5dGhvbi5vcmcvaXNzdWUxNDk3Ci0gICAgX2V4cHJzID0gKCJC
b29sT3AiLCAiQmluT3AiLCAiVW5hcnlPcCIsICJMYW1iZGEiLCAiSWZFeHAiLCAiRGljdCIsCi0g
ICAgICAgICAgICAgICJMaXN0Q29tcCIsICJHZW5lcmF0b3JFeHAiLCAiWWllbGQiLCAiQ29tcGFy
ZSIsICJDYWxsIiwKLSAgICAgICAgICAgICAgIlJlcHIiLCAiTnVtIiwgIlN0ciIsICJBdHRyaWJ1
dGUiLCAiU3Vic2NyaXB0IiwgIk5hbWUiLAotICAgICAgICAgICAgICAiTGlzdCIsICJUdXBsZSIp
Ci0gICAgX3N0bXRzID0gKCJGdW5jdGlvbkRlZiIsICJDbGFzc0RlZiIsICJSZXR1cm4iLCAiRGVs
ZXRlIiwgIkFzc2lnbiIsCi0gICAgICAgICAgICAgICJBdWdBc3NpZ24iLCAiUHJpbnQiLCAiRm9y
IiwgIldoaWxlIiwgIklmIiwgIldpdGgiLCAiUmFpc2UiLAotICAgICAgICAgICAgICAiVHJ5RXhj
ZXB0IiwgIlRyeUZpbmFsbHkiLCAiQXNzZXJ0IiwgIkltcG9ydCIsICJJbXBvcnRGcm9tIiwKLSAg
ICAgICAgICAgICAgIkV4ZWMiLCAiR2xvYmFsIiwgIkV4cHIiLCAiUGFzcyIsICJCcmVhayIsICJD
b250aW51ZSIpCi0gICAgX2V4cHJfbm9kZXMgPSBzZXQoZ2V0YXR0cihhc3QsIG5hbWUpIGZvciBu
YW1lIGluIF9leHBycykKLSAgICBfc3RtdF9ub2RlcyA9IHNldChnZXRhdHRyKGFzdCwgbmFtZSkg
Zm9yIG5hbWUgaW4gX3N0bXRzKQotICAgIGRlZiBfaXNfYXN0X2V4cHIobm9kZSk6Ci0gICAgICAg
IHJldHVybiBub2RlLl9fY2xhc3NfXyBpbiBfZXhwcl9ub2RlcwotICAgIGRlZiBfaXNfYXN0X3N0
bXQobm9kZSk6Ci0gICAgICAgIHJldHVybiBub2RlLl9fY2xhc3NfXyBpbiBfc3RtdF9ub2Rlcwot
ZWxzZToKLSAgICBkZWYgX2lzX2FzdF9leHByKG5vZGUpOgotICAgICAgICByZXR1cm4gaXNpbnN0
YW5jZShub2RlLCBhc3QuZXhwcikKLSAgICBkZWYgX2lzX2FzdF9zdG10KG5vZGUpOgotICAgICAg
ICByZXR1cm4gaXNpbnN0YW5jZShub2RlLCBhc3Quc3RtdCkKLQotdHJ5OgotICAgIF9TdGFycmVk
ID0gYXN0LlN0YXJyZWQKLWV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAjIFB5dGhvbiAyLiBE
ZWZpbmUgYSBkdW1teSBjbGFzcyBzbyBpc2luc3RhbmNlKCkgd2lsbCBhbHdheXMgYmUgRmFsc2Uu
Ci0gICAgY2xhc3MgX1N0YXJyZWQob2JqZWN0KTogcGFzcwotCi0KLWNsYXNzIEZhaWx1cmUoRXhj
ZXB0aW9uKToKLSAgICAiIiJFcnJvciBmb3VuZCB3aGlsZSBpbnRlcnByZXRpbmcgQVNULiIiIgot
Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGV4cGxhbmF0aW9uPSIiKToKLSAgICAgICAgc2VsZi5j
YXVzZSA9IHN5cy5leGNfaW5mbygpCi0gICAgICAgIHNlbGYuZXhwbGFuYXRpb24gPSBleHBsYW5h
dGlvbgotCi0KLWRlZiByZWludGVycHJldChzb3VyY2UsIGZyYW1lLCBzaG91bGRfZmFpbD1GYWxz
ZSk6Ci0gICAgbW9kID0gYXN0LnBhcnNlKHNvdXJjZSkKLSAgICB2aXNpdG9yID0gRGVidWdJbnRl
cnByZXRlcihmcmFtZSkKLSAgICB0cnk6Ci0gICAgICAgIHZpc2l0b3IudmlzaXQobW9kKQotICAg
IGV4Y2VwdCBGYWlsdXJlOgotICAgICAgICBmYWlsdXJlID0gc3lzLmV4Y19pbmZvKClbMV0KLSAg
ICAgICAgcmV0dXJuIGdldGZhaWx1cmUoZmFpbHVyZSkKLSAgICBpZiBzaG91bGRfZmFpbDoKLSAg
ICAgICAgcmV0dXJuICgiKGFzc2VydGlvbiBmYWlsZWQsIGJ1dCB3aGVuIGl0IHdhcyByZS1ydW4g
Zm9yICIKLSAgICAgICAgICAgICAgICAicHJpbnRpbmcgaW50ZXJtZWRpYXRlIHZhbHVlcywgaXQg
ZGlkIG5vdCBmYWlsLiAgU3VnZ2VzdGlvbnM6ICIKLSAgICAgICAgICAgICAgICAiY29tcHV0ZSBh
c3NlcnQgZXhwcmVzc2lvbiBiZWZvcmUgdGhlIGFzc2VydCBvciB1c2UgLS1hc3NlcnQ9cGxhaW4p
IikKLQotZGVmIHJ1bihvZmZlbmRpbmdfbGluZSwgZnJhbWU9Tm9uZSk6Ci0gICAgaWYgZnJhbWUg
aXMgTm9uZToKLSAgICAgICAgZnJhbWUgPSBfcHl0ZXN0Ll9jb2RlLkZyYW1lKHN5cy5fZ2V0ZnJh
bWUoMSkpCi0gICAgcmV0dXJuIHJlaW50ZXJwcmV0KG9mZmVuZGluZ19saW5lLCBmcmFtZSkKLQot
ZGVmIGdldGZhaWx1cmUoZSk6Ci0gICAgZXhwbGFuYXRpb24gPSB1dGlsLmZvcm1hdF9leHBsYW5h
dGlvbihlLmV4cGxhbmF0aW9uKQotICAgIHZhbHVlID0gZS5jYXVzZVsxXQotICAgIGlmIHN0cih2
YWx1ZSk6Ci0gICAgICAgIGxpbmVzID0gZXhwbGFuYXRpb24uc3BsaXQoJ1xuJykKLSAgICAgICAg
bGluZXNbMF0gKz0gIiAgPDwgJXMiICUgKHZhbHVlLCkKLSAgICAgICAgZXhwbGFuYXRpb24gPSAn
XG4nLmpvaW4obGluZXMpCi0gICAgdGV4dCA9ICIlczogJXMiICUgKGUuY2F1c2VbMF0uX19uYW1l
X18sIGV4cGxhbmF0aW9uKQotICAgIGlmIHRleHQuc3RhcnRzd2l0aCgnQXNzZXJ0aW9uRXJyb3I6
IGFzc2VydCAnKToKLSAgICAgICAgdGV4dCA9IHRleHRbMTY6XQotICAgIHJldHVybiB0ZXh0Ci0K
LW9wZXJhdG9yX21hcCA9IHsKLSAgICBhc3QuQml0T3IgOiAifCIsCi0gICAgYXN0LkJpdFhvciA6
ICJeIiwKLSAgICBhc3QuQml0QW5kIDogIiYiLAotICAgIGFzdC5MU2hpZnQgOiAiPDwiLAotICAg
IGFzdC5SU2hpZnQgOiAiPj4iLAotICAgIGFzdC5BZGQgOiAiKyIsCi0gICAgYXN0LlN1YiA6ICIt
IiwKLSAgICBhc3QuTXVsdCA6ICIqIiwKLSAgICBhc3QuRGl2IDogIi8iLAotICAgIGFzdC5GbG9v
ckRpdiA6ICIvLyIsCi0gICAgYXN0Lk1vZCA6ICIlIiwKLSAgICBhc3QuRXEgOiAiPT0iLAotICAg
IGFzdC5Ob3RFcSA6ICIhPSIsCi0gICAgYXN0Lkx0IDogIjwiLAotICAgIGFzdC5MdEUgOiAiPD0i
LAotICAgIGFzdC5HdCA6ICI+IiwKLSAgICBhc3QuR3RFIDogIj49IiwKLSAgICBhc3QuUG93IDog
IioqIiwKLSAgICBhc3QuSXMgOiAiaXMiLAotICAgIGFzdC5Jc05vdCA6ICJpcyBub3QiLAotICAg
IGFzdC5JbiA6ICJpbiIsCi0gICAgYXN0Lk5vdEluIDogIm5vdCBpbiIKLX0KLQotdW5hcnlfbWFw
ID0gewotICAgIGFzdC5Ob3QgOiAibm90ICVzIiwKLSAgICBhc3QuSW52ZXJ0IDogIn4lcyIsCi0g
ICAgYXN0LlVTdWIgOiAiLSVzIiwKLSAgICBhc3QuVUFkZCA6ICIrJXMiCi19Ci0KLQotY2xhc3Mg
RGVidWdJbnRlcnByZXRlcihhc3QuTm9kZVZpc2l0b3IpOgotICAgICIiIkludGVycHJldCBBU1Qg
bm9kZXMgdG8gZ2xlYW0gdXNlZnVsIGRlYnVnZ2luZyBpbmZvcm1hdGlvbi4gIiIiCi0KLSAgICBk
ZWYgX19pbml0X18oc2VsZiwgZnJhbWUpOgotICAgICAgICBzZWxmLmZyYW1lID0gZnJhbWUKLQot
ICAgIGRlZiBnZW5lcmljX3Zpc2l0KHNlbGYsIG5vZGUpOgotICAgICAgICAjIEZhbGxiYWNrIHdo
ZW4gd2UgZG9uJ3QgaGF2ZSBhIHNwZWNpYWwgaW1wbGVtZW50YXRpb24uCi0gICAgICAgIGlmIF9p
c19hc3RfZXhwcihub2RlKToKLSAgICAgICAgICAgIG1vZCA9IGFzdC5FeHByZXNzaW9uKG5vZGUp
Ci0gICAgICAgICAgICBjbyA9IHNlbGYuX2NvbXBpbGUobW9kKQotICAgICAgICAgICAgdHJ5Ogot
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuZnJhbWUuZXZhbChjbykKLSAgICAgICAgICAg
IGV4Y2VwdCBFeGNlcHRpb246Ci0gICAgICAgICAgICAgICAgcmFpc2UgRmFpbHVyZSgpCi0gICAg
ICAgICAgICBleHBsYW5hdGlvbiA9IHNlbGYuZnJhbWUucmVwcihyZXN1bHQpCi0gICAgICAgICAg
ICByZXR1cm4gZXhwbGFuYXRpb24sIHJlc3VsdAotICAgICAgICBlbGlmIF9pc19hc3Rfc3RtdChu
b2RlKToKLSAgICAgICAgICAgIG1vZCA9IGFzdC5Nb2R1bGUoW25vZGVdKQotICAgICAgICAgICAg
Y28gPSBzZWxmLl9jb21waWxlKG1vZCwgImV4ZWMiKQotICAgICAgICAgICAgdHJ5OgotICAgICAg
ICAgICAgICAgIHNlbGYuZnJhbWUuZXhlY18oY28pCi0gICAgICAgICAgICBleGNlcHQgRXhjZXB0
aW9uOgotICAgICAgICAgICAgICAgIHJhaXNlIEZhaWx1cmUoKQotICAgICAgICAgICAgcmV0dXJu
IE5vbmUsIE5vbmUKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVy
cm9yKCJjYW4ndCBoYW5kbGUgJXMiICUobm9kZSwpKQotCi0gICAgZGVmIF9jb21waWxlKHNlbGYs
IHNvdXJjZSwgbW9kZT0iZXZhbCIpOgotICAgICAgICByZXR1cm4gY29tcGlsZShzb3VyY2UsICI8
YXNzZXJ0aW9uIGludGVycHJldGF0aW9uPiIsIG1vZGUpCi0KLSAgICBkZWYgdmlzaXRfRXhwcihz
ZWxmLCBleHByKToKLSAgICAgICAgcmV0dXJuIHNlbGYudmlzaXQoZXhwci52YWx1ZSkKLQotICAg
IGRlZiB2aXNpdF9Nb2R1bGUoc2VsZiwgbW9kKToKLSAgICAgICAgZm9yIHN0bXQgaW4gbW9kLmJv
ZHk6Ci0gICAgICAgICAgICBzZWxmLnZpc2l0KHN0bXQpCi0KLSAgICBkZWYgdmlzaXRfTmFtZShz
ZWxmLCBuYW1lKToKLSAgICAgICAgZXhwbGFuYXRpb24sIHJlc3VsdCA9IHNlbGYuZ2VuZXJpY192
aXNpdChuYW1lKQotICAgICAgICAjIFNlZSBpZiB0aGUgbmFtZSBpcyBsb2NhbC4KLSAgICAgICAg
c291cmNlID0gIiVyIGluIGxvY2FscygpIGlzIG5vdCBnbG9iYWxzKCkiICUgKG5hbWUuaWQsKQot
ICAgICAgICBjbyA9IHNlbGYuX2NvbXBpbGUoc291cmNlKQotICAgICAgICB0cnk6Ci0gICAgICAg
ICAgICBsb2NhbCA9IHNlbGYuZnJhbWUuZXZhbChjbykKLSAgICAgICAgZXhjZXB0IEV4Y2VwdGlv
bjoKLSAgICAgICAgICAgICMgaGF2ZSB0byBhc3N1bWUgaXQgaXNuJ3QKLSAgICAgICAgICAgIGxv
Y2FsID0gTm9uZQotICAgICAgICBpZiBsb2NhbCBpcyBOb25lIG9yIG5vdCBzZWxmLmZyYW1lLmlz
X3RydWUobG9jYWwpOgotICAgICAgICAgICAgcmV0dXJuIG5hbWUuaWQsIHJlc3VsdAotICAgICAg
ICByZXR1cm4gZXhwbGFuYXRpb24sIHJlc3VsdAotCi0gICAgZGVmIHZpc2l0X0NvbXBhcmUoc2Vs
ZiwgY29tcCk6Ci0gICAgICAgIGxlZnQgPSBjb21wLmxlZnQKLSAgICAgICAgbGVmdF9leHBsYW5h
dGlvbiwgbGVmdF9yZXN1bHQgPSBzZWxmLnZpc2l0KGxlZnQpCi0gICAgICAgIGZvciBvcCwgbmV4
dF9vcCBpbiB6aXAoY29tcC5vcHMsIGNvbXAuY29tcGFyYXRvcnMpOgotICAgICAgICAgICAgbmV4
dF9leHBsYW5hdGlvbiwgbmV4dF9yZXN1bHQgPSBzZWxmLnZpc2l0KG5leHRfb3ApCi0gICAgICAg
ICAgICBvcF9zeW1ib2wgPSBvcGVyYXRvcl9tYXBbb3AuX19jbGFzc19fXQotICAgICAgICAgICAg
ZXhwbGFuYXRpb24gPSAiJXMgJXMgJXMiICUgKGxlZnRfZXhwbGFuYXRpb24sIG9wX3N5bWJvbCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0X2V4cGxhbmF0aW9u
KQotICAgICAgICAgICAgc291cmNlID0gIl9fZXhwcmluZm9fbGVmdCAlcyBfX2V4cHJpbmZvX3Jp
Z2h0IiAlIChvcF9zeW1ib2wsKQotICAgICAgICAgICAgY28gPSBzZWxmLl9jb21waWxlKHNvdXJj
ZSkKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBzZWxmLmZyYW1l
LmV2YWwoY28sIF9fZXhwcmluZm9fbGVmdD1sZWZ0X3Jlc3VsdCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19leHByaW5mb19yaWdodD1uZXh0X3Jlc3VsdCkKLSAg
ICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246Ci0gICAgICAgICAgICAgICAgcmFpc2UgRmFpbHVy
ZShleHBsYW5hdGlvbikKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBpZiBub3Qg
c2VsZi5mcmFtZS5pc190cnVlKHJlc3VsdCk6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0g
ICAgICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6Ci0gICAgICAgICAgICAgICAgcmFp
c2UKLSAgICAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAg
ICAgbGVmdF9leHBsYW5hdGlvbiwgbGVmdF9yZXN1bHQgPSBuZXh0X2V4cGxhbmF0aW9uLCBuZXh0
X3Jlc3VsdAotCi0gICAgICAgIGlmIHV0aWwuX3JlcHJjb21wYXJlIGlzIG5vdCBOb25lOgotICAg
ICAgICAgICAgcmVzID0gdXRpbC5fcmVwcmNvbXBhcmUob3Bfc3ltYm9sLCBsZWZ0X3Jlc3VsdCwg
bmV4dF9yZXN1bHQpCi0gICAgICAgICAgICBpZiByZXM6Ci0gICAgICAgICAgICAgICAgZXhwbGFu
YXRpb24gPSByZXMKLSAgICAgICAgcmV0dXJuIGV4cGxhbmF0aW9uLCByZXN1bHQKLQotICAgIGRl
ZiB2aXNpdF9Cb29sT3Aoc2VsZiwgYm9vbG9wKToKLSAgICAgICAgaXNfb3IgPSBpc2luc3RhbmNl
KGJvb2xvcC5vcCwgYXN0Lk9yKQotICAgICAgICBleHBsYW5hdGlvbnMgPSBbXQotICAgICAgICBm
b3Igb3BlcmFuZCBpbiBib29sb3AudmFsdWVzOgotICAgICAgICAgICAgZXhwbGFuYXRpb24sIHJl
c3VsdCA9IHNlbGYudmlzaXQob3BlcmFuZCkKLSAgICAgICAgICAgIGV4cGxhbmF0aW9ucy5hcHBl
bmQoZXhwbGFuYXRpb24pCi0gICAgICAgICAgICBpZiByZXN1bHQgPT0gaXNfb3I6Ci0gICAgICAg
ICAgICAgICAgYnJlYWsKLSAgICAgICAgbmFtZSA9IGlzX29yIGFuZCAiIG9yICIgb3IgIiBhbmQg
IgotICAgICAgICBleHBsYW5hdGlvbiA9ICIoIiArIG5hbWUuam9pbihleHBsYW5hdGlvbnMpICsg
IikiCi0gICAgICAgIHJldHVybiBleHBsYW5hdGlvbiwgcmVzdWx0Ci0KLSAgICBkZWYgdmlzaXRf
VW5hcnlPcChzZWxmLCB1bmFyeSk6Ci0gICAgICAgIHBhdHRlcm4gPSB1bmFyeV9tYXBbdW5hcnku
b3AuX19jbGFzc19fXQotICAgICAgICBvcGVyYW5kX2V4cGxhbmF0aW9uLCBvcGVyYW5kX3Jlc3Vs
dCA9IHNlbGYudmlzaXQodW5hcnkub3BlcmFuZCkKLSAgICAgICAgZXhwbGFuYXRpb24gPSBwYXR0
ZXJuICUgKG9wZXJhbmRfZXhwbGFuYXRpb24sKQotICAgICAgICBjbyA9IHNlbGYuX2NvbXBpbGUo
cGF0dGVybiAlICgiX19leHByaW5mb19leHByIiwpKQotICAgICAgICB0cnk6Ci0gICAgICAgICAg
ICByZXN1bHQgPSBzZWxmLmZyYW1lLmV2YWwoY28sIF9fZXhwcmluZm9fZXhwcj1vcGVyYW5kX3Jl
c3VsdCkKLSAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKLSAgICAgICAgICAgIHJhaXNlIEZhaWx1
cmUoZXhwbGFuYXRpb24pCi0gICAgICAgIHJldHVybiBleHBsYW5hdGlvbiwgcmVzdWx0Ci0KLSAg
ICBkZWYgdmlzaXRfQmluT3Aoc2VsZiwgYmlub3ApOgotICAgICAgICBsZWZ0X2V4cGxhbmF0aW9u
LCBsZWZ0X3Jlc3VsdCA9IHNlbGYudmlzaXQoYmlub3AubGVmdCkKLSAgICAgICAgcmlnaHRfZXhw
bGFuYXRpb24sIHJpZ2h0X3Jlc3VsdCA9IHNlbGYudmlzaXQoYmlub3AucmlnaHQpCi0gICAgICAg
IHN5bWJvbCA9IG9wZXJhdG9yX21hcFtiaW5vcC5vcC5fX2NsYXNzX19dCi0gICAgICAgIGV4cGxh
bmF0aW9uID0gIiglcyAlcyAlcykiICUgKGxlZnRfZXhwbGFuYXRpb24sIHN5bWJvbCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHRfZXhwbGFuYXRpb24pCi0gICAg
ICAgIHNvdXJjZSA9ICJfX2V4cHJpbmZvX2xlZnQgJXMgX19leHByaW5mb19yaWdodCIgJSAoc3lt
Ym9sLCkKLSAgICAgICAgY28gPSBzZWxmLl9jb21waWxlKHNvdXJjZSkKLSAgICAgICAgdHJ5Ogot
ICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5mcmFtZS5ldmFsKGNvLCBfX2V4cHJpbmZvX2xlZnQ9
bGVmdF9yZXN1bHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19leHBy
aW5mb19yaWdodD1yaWdodF9yZXN1bHQpCi0gICAgICAgIGV4Y2VwdCBFeGNlcHRpb246Ci0gICAg
ICAgICAgICByYWlzZSBGYWlsdXJlKGV4cGxhbmF0aW9uKQotICAgICAgICByZXR1cm4gZXhwbGFu
YXRpb24sIHJlc3VsdAotCi0gICAgZGVmIHZpc2l0X0NhbGwoc2VsZiwgY2FsbCk6Ci0gICAgICAg
IGZ1bmNfZXhwbGFuYXRpb24sIGZ1bmMgPSBzZWxmLnZpc2l0KGNhbGwuZnVuYykKLSAgICAgICAg
YXJnX2V4cGxhbmF0aW9ucyA9IFtdCi0gICAgICAgIG5zID0geyJfX2V4cHJpbmZvX2Z1bmMiIDog
ZnVuY30KLSAgICAgICAgYXJndW1lbnRzID0gW10KLSAgICAgICAgZm9yIGFyZyBpbiBjYWxsLmFy
Z3M6Ci0gICAgICAgICAgICBhcmdfZXhwbGFuYXRpb24sIGFyZ19yZXN1bHQgPSBzZWxmLnZpc2l0
KGFyZykKLSAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoYXJnLCBfU3RhcnJlZCk6Ci0gICAgICAg
ICAgICAgICAgYXJnX25hbWUgPSAiX19leHByaW5mb19zdGFyIgotICAgICAgICAgICAgICAgIG5z
W2FyZ19uYW1lXSA9IGFyZ19yZXN1bHQKLSAgICAgICAgICAgICAgICBhcmd1bWVudHMuYXBwZW5k
KCIqJXMiICUgKGFyZ19uYW1lLCkpCi0gICAgICAgICAgICAgICAgYXJnX2V4cGxhbmF0aW9ucy5h
cHBlbmQoIiolcyIgJSAoYXJnX2V4cGxhbmF0aW9uLCkpCi0gICAgICAgICAgICBlbHNlOgotICAg
ICAgICAgICAgICAgIGFyZ19uYW1lID0gIl9fZXhwcmluZm9fJXMiICUgKGxlbihucyksKQotICAg
ICAgICAgICAgICAgIG5zW2FyZ19uYW1lXSA9IGFyZ19yZXN1bHQKLSAgICAgICAgICAgICAgICBh
cmd1bWVudHMuYXBwZW5kKGFyZ19uYW1lKQotICAgICAgICAgICAgICAgIGFyZ19leHBsYW5hdGlv
bnMuYXBwZW5kKGFyZ19leHBsYW5hdGlvbikKLSAgICAgICAgZm9yIGtleXdvcmQgaW4gY2FsbC5r
ZXl3b3JkczoKLSAgICAgICAgICAgIGFyZ19leHBsYW5hdGlvbiwgYXJnX3Jlc3VsdCA9IHNlbGYu
dmlzaXQoa2V5d29yZC52YWx1ZSkKLSAgICAgICAgICAgIGlmIGtleXdvcmQuYXJnOgotICAgICAg
ICAgICAgICAgIGFyZ19uYW1lID0gIl9fZXhwcmluZm9fJXMiICUgKGxlbihucyksKQotICAgICAg
ICAgICAgICAgIGtleXdvcmRfc291cmNlID0gIiVzPSUlcyIgJSAoa2V5d29yZC5hcmcpCi0gICAg
ICAgICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChrZXl3b3JkX3NvdXJjZSAlIChhcmdfbmFtZSwp
KQotICAgICAgICAgICAgICAgIGFyZ19leHBsYW5hdGlvbnMuYXBwZW5kKGtleXdvcmRfc291cmNl
ICUgKGFyZ19leHBsYW5hdGlvbiwpKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAg
ICBhcmdfbmFtZSA9ICJfX2V4cHJpbmZvX2t3ZHMiCi0gICAgICAgICAgICAgICAgYXJndW1lbnRz
LmFwcGVuZCgiKiolcyIgJSAoYXJnX25hbWUsKSkKLSAgICAgICAgICAgICAgICBhcmdfZXhwbGFu
YXRpb25zLmFwcGVuZCgiKiolcyIgJSAoYXJnX2V4cGxhbmF0aW9uLCkpCi0KLSAgICAgICAgICAg
IG5zW2FyZ19uYW1lXSA9IGFyZ19yZXN1bHQKLQotICAgICAgICBpZiBnZXRhdHRyKGNhbGwsICdz
dGFyYXJncycsIE5vbmUpOgotICAgICAgICAgICAgYXJnX2V4cGxhbmF0aW9uLCBhcmdfcmVzdWx0
ID0gc2VsZi52aXNpdChjYWxsLnN0YXJhcmdzKQotICAgICAgICAgICAgYXJnX25hbWUgPSAiX19l
eHByaW5mb19zdGFyIgotICAgICAgICAgICAgbnNbYXJnX25hbWVdID0gYXJnX3Jlc3VsdAotICAg
ICAgICAgICAgYXJndW1lbnRzLmFwcGVuZCgiKiVzIiAlIChhcmdfbmFtZSwpKQotICAgICAgICAg
ICAgYXJnX2V4cGxhbmF0aW9ucy5hcHBlbmQoIiolcyIgJSAoYXJnX2V4cGxhbmF0aW9uLCkpCi0K
LSAgICAgICAgaWYgZ2V0YXR0cihjYWxsLCAna3dhcmdzJywgTm9uZSk6Ci0gICAgICAgICAgICBh
cmdfZXhwbGFuYXRpb24sIGFyZ19yZXN1bHQgPSBzZWxmLnZpc2l0KGNhbGwua3dhcmdzKQotICAg
ICAgICAgICAgYXJnX25hbWUgPSAiX19leHByaW5mb19rd2RzIgotICAgICAgICAgICAgbnNbYXJn
X25hbWVdID0gYXJnX3Jlc3VsdAotICAgICAgICAgICAgYXJndW1lbnRzLmFwcGVuZCgiKiolcyIg
JSAoYXJnX25hbWUsKSkKLSAgICAgICAgICAgIGFyZ19leHBsYW5hdGlvbnMuYXBwZW5kKCIqKiVz
IiAlIChhcmdfZXhwbGFuYXRpb24sKSkKLSAgICAgICAgYXJnc19leHBsYWluZWQgPSAiLCAiLmpv
aW4oYXJnX2V4cGxhbmF0aW9ucykKLSAgICAgICAgZXhwbGFuYXRpb24gPSAiJXMoJXMpIiAlIChm
dW5jX2V4cGxhbmF0aW9uLCBhcmdzX2V4cGxhaW5lZCkKLSAgICAgICAgYXJncyA9ICIsICIuam9p
bihhcmd1bWVudHMpCi0gICAgICAgIHNvdXJjZSA9ICJfX2V4cHJpbmZvX2Z1bmMoJXMpIiAlIChh
cmdzLCkKLSAgICAgICAgY28gPSBzZWxmLl9jb21waWxlKHNvdXJjZSkKLSAgICAgICAgdHJ5Ogot
ICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5mcmFtZS5ldmFsKGNvLCAqKm5zKQotICAgICAgICBl
eGNlcHQgRXhjZXB0aW9uOgotICAgICAgICAgICAgcmFpc2UgRmFpbHVyZShleHBsYW5hdGlvbikK
LSAgICAgICAgcGF0dGVybiA9ICIlc1xueyVzID0gJXNcbn0iCi0gICAgICAgIHJlcCA9IHNlbGYu
ZnJhbWUucmVwcihyZXN1bHQpCi0gICAgICAgIGV4cGxhbmF0aW9uID0gcGF0dGVybiAlIChyZXAs
IHJlcCwgZXhwbGFuYXRpb24pCi0gICAgICAgIHJldHVybiBleHBsYW5hdGlvbiwgcmVzdWx0Ci0K
LSAgICBkZWYgX2lzX2J1aWx0aW5fbmFtZShzZWxmLCBuYW1lKToKLSAgICAgICAgcGF0dGVybiA9
ICIlciBub3QgaW4gZ2xvYmFscygpIGFuZCAlciBub3QgaW4gbG9jYWxzKCkiCi0gICAgICAgIHNv
dXJjZSA9IHBhdHRlcm4gJSAobmFtZS5pZCwgbmFtZS5pZCkKLSAgICAgICAgY28gPSBzZWxmLl9j
b21waWxlKHNvdXJjZSkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuZnJh
bWUuZXZhbChjbykKLSAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKLSAgICAgICAgICAgIHJldHVy
biBGYWxzZQotCi0gICAgZGVmIHZpc2l0X0F0dHJpYnV0ZShzZWxmLCBhdHRyKToKLSAgICAgICAg
aWYgbm90IGlzaW5zdGFuY2UoYXR0ci5jdHgsIGFzdC5Mb2FkKToKLSAgICAgICAgICAgIHJldHVy
biBzZWxmLmdlbmVyaWNfdmlzaXQoYXR0cikKLSAgICAgICAgc291cmNlX2V4cGxhbmF0aW9uLCBz
b3VyY2VfcmVzdWx0ID0gc2VsZi52aXNpdChhdHRyLnZhbHVlKQotICAgICAgICBleHBsYW5hdGlv
biA9ICIlcy4lcyIgJSAoc291cmNlX2V4cGxhbmF0aW9uLCBhdHRyLmF0dHIpCi0gICAgICAgIHNv
dXJjZSA9ICJfX2V4cHJpbmZvX2V4cHIuJXMiICUgKGF0dHIuYXR0ciwpCi0gICAgICAgIGNvID0g
c2VsZi5fY29tcGlsZShzb3VyY2UpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHRyeToKLSAg
ICAgICAgICAgICAgICByZXN1bHQgPSBzZWxmLmZyYW1lLmV2YWwoY28sIF9fZXhwcmluZm9fZXhw
cj1zb3VyY2VfcmVzdWx0KQotICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAg
ICAgICAgICAgICAgICMgTWF5YmUgdGhlIGF0dHJpYnV0ZSBuYW1lIG5lZWRzIHRvIGJlIG1hbmds
ZWQ/Ci0gICAgICAgICAgICAgICAgaWYgbm90IGF0dHIuYXR0ci5zdGFydHN3aXRoKCJfXyIpIG9y
IGF0dHIuYXR0ci5lbmRzd2l0aCgiX18iKToKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UKLSAg
ICAgICAgICAgICAgICBzb3VyY2UgPSAiZ2V0YXR0cihfX2V4cHJpbmZvX2V4cHIuX19jbGFzc19f
LCAnX19uYW1lX18nLCAnJykiCi0gICAgICAgICAgICAgICAgY28gPSBzZWxmLl9jb21waWxlKHNv
dXJjZSkKLSAgICAgICAgICAgICAgICBjbGFzc19uYW1lID0gc2VsZi5mcmFtZS5ldmFsKGNvLCBf
X2V4cHJpbmZvX2V4cHI9c291cmNlX3Jlc3VsdCkKLSAgICAgICAgICAgICAgICBtYW5nbGVkX2F0
dHIgPSAiXyIgKyBjbGFzc19uYW1lICsgIGF0dHIuYXR0cgotICAgICAgICAgICAgICAgIHNvdXJj
ZSA9ICJfX2V4cHJpbmZvX2V4cHIuJXMiICUgKG1hbmdsZWRfYXR0ciwpCi0gICAgICAgICAgICAg
ICAgY28gPSBzZWxmLl9jb21waWxlKHNvdXJjZSkKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBz
ZWxmLmZyYW1lLmV2YWwoY28sIF9fZXhwcmluZm9fZXhwcj1zb3VyY2VfcmVzdWx0KQotICAgICAg
ICBleGNlcHQgRXhjZXB0aW9uOgotICAgICAgICAgICAgcmFpc2UgRmFpbHVyZShleHBsYW5hdGlv
bikKLSAgICAgICAgZXhwbGFuYXRpb24gPSAiJXNcbnslcyA9ICVzLiVzXG59IiAlIChzZWxmLmZy
YW1lLnJlcHIocmVzdWx0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzZWxmLmZyYW1lLnJlcHIocmVzdWx0KSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VfZXhwbGFuYXRpb24sIGF0dHIuYXR0cikKLSAg
ICAgICAgIyBDaGVjayBpZiB0aGUgYXR0ciBpcyBmcm9tIGFuIGluc3RhbmNlLgotICAgICAgICBz
b3VyY2UgPSAiJXIgaW4gZ2V0YXR0cihfX2V4cHJpbmZvX2V4cHIsICdfX2RpY3RfXycsIHt9KSIK
LSAgICAgICAgc291cmNlID0gc291cmNlICUgKGF0dHIuYXR0ciwpCi0gICAgICAgIGNvID0gc2Vs
Zi5fY29tcGlsZShzb3VyY2UpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGZyb21faW5zdGFu
Y2UgPSBzZWxmLmZyYW1lLmV2YWwoY28sIF9fZXhwcmluZm9fZXhwcj1zb3VyY2VfcmVzdWx0KQot
ICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgotICAgICAgICAgICAgZnJvbV9pbnN0YW5jZSA9IE5v
bmUKLSAgICAgICAgaWYgZnJvbV9pbnN0YW5jZSBpcyBOb25lIG9yIHNlbGYuZnJhbWUuaXNfdHJ1
ZShmcm9tX2luc3RhbmNlKToKLSAgICAgICAgICAgIHJlcCA9IHNlbGYuZnJhbWUucmVwcihyZXN1
bHQpCi0gICAgICAgICAgICBwYXR0ZXJuID0gIiVzXG57JXMgPSAlc1xufSIKLSAgICAgICAgICAg
IGV4cGxhbmF0aW9uID0gcGF0dGVybiAlIChyZXAsIHJlcCwgZXhwbGFuYXRpb24pCi0gICAgICAg
IHJldHVybiBleHBsYW5hdGlvbiwgcmVzdWx0Ci0KLSAgICBkZWYgdmlzaXRfQXNzZXJ0KHNlbGYs
IGFzc3J0KToKLSAgICAgICAgdGVzdF9leHBsYW5hdGlvbiwgdGVzdF9yZXN1bHQgPSBzZWxmLnZp
c2l0KGFzc3J0LnRlc3QpCi0gICAgICAgIGV4cGxhbmF0aW9uID0gImFzc2VydCAlcyIgJSAodGVz
dF9leHBsYW5hdGlvbiwpCi0gICAgICAgIGlmIG5vdCBzZWxmLmZyYW1lLmlzX3RydWUodGVzdF9y
ZXN1bHQpOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHJhaXNlIHV0aWwuQnVp
bHRpbkFzc2VydGlvbkVycm9yCi0gICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgotICAgICAg
ICAgICAgICAgIHJhaXNlIEZhaWx1cmUoZXhwbGFuYXRpb24pCi0gICAgICAgIHJldHVybiBleHBs
YW5hdGlvbiwgdGVzdF9yZXN1bHQKLQotICAgIGRlZiB2aXNpdF9Bc3NpZ24oc2VsZiwgYXNzaWdu
KToKLSAgICAgICAgdmFsdWVfZXhwbGFuYXRpb24sIHZhbHVlX3Jlc3VsdCA9IHNlbGYudmlzaXQo
YXNzaWduLnZhbHVlKQotICAgICAgICBleHBsYW5hdGlvbiA9ICIuLi4gPSAlcyIgJSAodmFsdWVf
ZXhwbGFuYXRpb24sKQotICAgICAgICBuYW1lID0gYXN0Lk5hbWUoIl9fZXhwcmluZm9fZXhwciIs
IGFzdC5Mb2FkKCksCi0gICAgICAgICAgICAgICAgICAgICAgICBsaW5lbm89YXNzaWduLnZhbHVl
LmxpbmVubywKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbF9vZmZzZXQ9YXNzaWduLnZhbHVl
LmNvbF9vZmZzZXQpCi0gICAgICAgIG5ld19hc3NpZ24gPSBhc3QuQXNzaWduKGFzc2lnbi50YXJn
ZXRzLCBuYW1lLCBsaW5lbm89YXNzaWduLmxpbmVubywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29sX29mZnNldD1hc3NpZ24uY29sX29mZnNldCkKLSAgICAgICAgbW9kID0gYXN0
Lk1vZHVsZShbbmV3X2Fzc2lnbl0pCi0gICAgICAgIGNvID0gc2VsZi5fY29tcGlsZShtb2QsICJl
eGVjIikKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi5mcmFtZS5leGVjXyhjbywgX19l
eHByaW5mb19leHByPXZhbHVlX3Jlc3VsdCkKLSAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKLSAg
ICAgICAgICAgIHJhaXNlIEZhaWx1cmUoZXhwbGFuYXRpb24pCi0gICAgICAgIHJldHVybiBleHBs
YW5hdGlvbiwgdmFsdWVfcmVzdWx0Ci0KZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9y
dGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9hc3NlcnRpb24vcmV3cml0ZS5weSBiL1dlYkRy
aXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9hc3NlcnRpb24vcmV3
cml0ZS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTRiOGU0OWRiMmIuLjAwMDAw
MDAwMDAwCi0tLSBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5
dGVzdC9hc3NlcnRpb24vcmV3cml0ZS5weQorKysgL2Rldi9udWxsCkBAIC0xLDg4NSArMCwwIEBA
Ci0iIiJSZXdyaXRlIGFzc2VydGlvbiBBU1QgdG8gcHJvZHVjZSBuaWNlIGVycm9yIG1lc3NhZ2Vz
IiIiCi0KLWltcG9ydCBhc3QKLWltcG9ydCBlcnJubwotaW1wb3J0IGl0ZXJ0b29scwotaW1wb3J0
IGltcAotaW1wb3J0IG1hcnNoYWwKLWltcG9ydCBvcwotaW1wb3J0IHJlCi1pbXBvcnQgc3RydWN0
Ci1pbXBvcnQgc3lzCi1pbXBvcnQgdHlwZXMKLQotaW1wb3J0IHB5Ci1mcm9tIF9weXRlc3QuYXNz
ZXJ0aW9uIGltcG9ydCB1dGlsCi0KLQotIyBweXRlc3QgY2FjaGVzIHJld3JpdHRlbiBweWNzIGlu
IF9fcHljYWNoZV9fLgotaWYgaGFzYXR0cihpbXAsICJnZXRfdGFnIik6Ci0gICAgUFlURVNUX1RB
RyA9IGltcC5nZXRfdGFnKCkgKyAiLVBZVEVTVCIKLWVsc2U6Ci0gICAgaWYgaGFzYXR0cihzeXMs
ICJweXB5X3ZlcnNpb25faW5mbyIpOgotICAgICAgICBpbXBsID0gInB5cHkiCi0gICAgZWxpZiBz
eXMucGxhdGZvcm0gPT0gImphdmEiOgotICAgICAgICBpbXBsID0gImp5dGhvbiIKLSAgICBlbHNl
OgotICAgICAgICBpbXBsID0gImNweXRob24iCi0gICAgdmVyID0gc3lzLnZlcnNpb25faW5mbwot
ICAgIFBZVEVTVF9UQUcgPSAiJXMtJXMlcy1QWVRFU1QiICUgKGltcGwsIHZlclswXSwgdmVyWzFd
KQotICAgIGRlbCB2ZXIsIGltcGwKLQotUFlDX0VYVCA9ICIucHkiICsgKF9fZGVidWdfXyBhbmQg
ImMiIG9yICJvIikKLVBZQ19UQUlMID0gIi4iICsgUFlURVNUX1RBRyArIFBZQ19FWFQKLQotUkVX
UklURV9ORVdMSU5FUyA9IHN5cy52ZXJzaW9uX2luZm9bOjJdICE9ICgyLCA3KSBhbmQgc3lzLnZl
cnNpb25faW5mbyA8ICgzLCAyKQotQVNDSUlfSVNfREVGQVVMVF9FTkNPRElORyA9IHN5cy52ZXJz
aW9uX2luZm9bMF0gPCAzCi0KLWlmIHN5cy52ZXJzaW9uX2luZm8gPj0gKDMsNSk6Ci0gICAgYXN0
X0NhbGwgPSBhc3QuQ2FsbAotZWxzZToKLSAgICBhc3RfQ2FsbCA9IGxhbWJkYSBhLGIsYzogYXN0
LkNhbGwoYSwgYiwgYywgTm9uZSwgTm9uZSkKLQotCi1jbGFzcyBBc3NlcnRpb25SZXdyaXRpbmdI
b29rKG9iamVjdCk6Ci0gICAgIiIiUEVQMzAyIEltcG9ydCBob29rIHdoaWNoIHJld3JpdGVzIGFz
c2VydHMuIiIiCi0KLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgIHNlbGYuc2Vzc2lv
biA9IE5vbmUKLSAgICAgICAgc2VsZi5tb2R1bGVzID0ge30KLSAgICAgICAgc2VsZi5fcmVnaXN0
ZXJfd2l0aF9wa2dfcmVzb3VyY2VzKCkKLQotICAgIGRlZiBzZXRfc2Vzc2lvbihzZWxmLCBzZXNz
aW9uKToKLSAgICAgICAgc2VsZi5mbnBhdHMgPSBzZXNzaW9uLmNvbmZpZy5nZXRpbmkoInB5dGhv
bl9maWxlcyIpCi0gICAgICAgIHNlbGYuc2Vzc2lvbiA9IHNlc3Npb24KLQotICAgIGRlZiBmaW5k
X21vZHVsZShzZWxmLCBuYW1lLCBwYXRoPU5vbmUpOgotICAgICAgICBpZiBzZWxmLnNlc3Npb24g
aXMgTm9uZToKLSAgICAgICAgICAgIHJldHVybiBOb25lCi0gICAgICAgIHNlc3MgPSBzZWxmLnNl
c3Npb24KLSAgICAgICAgc3RhdGUgPSBzZXNzLmNvbmZpZy5fYXNzZXJ0c3RhdGUKLSAgICAgICAg
c3RhdGUudHJhY2UoImZpbmRfbW9kdWxlIGNhbGxlZCBmb3I6ICVzIiAlIG5hbWUpCi0gICAgICAg
IG5hbWVzID0gbmFtZS5yc3BsaXQoIi4iLCAxKQotICAgICAgICBsYXN0bmFtZSA9IG5hbWVzWy0x
XQotICAgICAgICBwdGggPSBOb25lCi0gICAgICAgIGlmIHBhdGggaXMgbm90IE5vbmU6Ci0gICAg
ICAgICAgICAjIFN0YXJ0aW5nIHdpdGggUHl0aG9uIDMuMywgcGF0aCBpcyBhIF9OYW1lc3BhY2VQ
YXRoKCksIHdoaWNoCi0gICAgICAgICAgICAjIGNhdXNlcyBwcm9ibGVtcyBpZiBub3QgY29udmVy
dGVkIHRvIGxpc3QuCi0gICAgICAgICAgICBwYXRoID0gbGlzdChwYXRoKQotICAgICAgICAgICAg
aWYgbGVuKHBhdGgpID09IDE6Ci0gICAgICAgICAgICAgICAgcHRoID0gcGF0aFswXQotICAgICAg
ICBpZiBwdGggaXMgTm9uZToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBmZCwg
Zm4sIGRlc2MgPSBpbXAuZmluZF9tb2R1bGUobGFzdG5hbWUsIHBhdGgpCi0gICAgICAgICAgICBl
eGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAg
ICAgIGlmIGZkIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIGZkLmNsb3NlKCkKLSAgICAg
ICAgICAgIHRwID0gZGVzY1syXQotICAgICAgICAgICAgaWYgdHAgPT0gaW1wLlBZX0NPTVBJTEVE
OgotICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIoaW1wLCAic291cmNlX2Zyb21fY2FjaGUiKToK
LSAgICAgICAgICAgICAgICAgICAgZm4gPSBpbXAuc291cmNlX2Zyb21fY2FjaGUoZm4pCi0gICAg
ICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgZm4gPSBmbls6LTFdCi0gICAg
ICAgICAgICBlbGlmIHRwICE9IGltcC5QWV9TT1VSQ0U6Ci0gICAgICAgICAgICAgICAgIyBEb24n
dCBrbm93IHdoYXQgdGhpcyBpcy4KLSAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAg
ICBlbHNlOgotICAgICAgICAgICAgZm4gPSBvcy5wYXRoLmpvaW4ocHRoLCBuYW1lLnJwYXJ0aXRp
b24oIi4iKVsyXSArICIucHkiKQotICAgICAgICBmbl9weXBhdGggPSBweS5wYXRoLmxvY2FsKGZu
KQotICAgICAgICAjIElzIHRoaXMgYSB0ZXN0IGZpbGU/Ci0gICAgICAgIGlmIG5vdCBzZXNzLmlz
aW5pdHBhdGgoZm4pOgotICAgICAgICAgICAgIyBXZSBoYXZlIHRvIGJlIHZlcnkgY2FyZWZ1bCBo
ZXJlIGJlY2F1c2UgaW1wb3J0cyBpbiB0aGlzIGNvZGUgY2FuCi0gICAgICAgICAgICAjIHRyaWdn
ZXIgYSBjeWNsZS4KLSAgICAgICAgICAgIHNlbGYuc2Vzc2lvbiA9IE5vbmUKLSAgICAgICAgICAg
IHRyeToKLSAgICAgICAgICAgICAgICBmb3IgcGF0IGluIHNlbGYuZm5wYXRzOgotICAgICAgICAg
ICAgICAgICAgICBpZiBmbl9weXBhdGguZm5tYXRjaChwYXQpOgotICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhdGUudHJhY2UoIm1hdGNoZWQgdGVzdCBmaWxlICVyIiAlIChmbiwpKQotICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAg
ICAgICBzZWxmLnNlc3Npb24gPSBzZXNzCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzdGF0
ZS50cmFjZSgibWF0Y2hlZCB0ZXN0IGZpbGUgKHdhcyBzcGVjaWZpZWQgb24gY21kbGluZSk6ICVy
IiAlCi0gICAgICAgICAgICAgICAgICAgICAgICAoZm4sKSkKLSAgICAgICAgIyBUaGUgcmVxdWVz
dGVkIG1vZHVsZSBsb29rcyBsaWtlIGEgdGVzdCBmaWxlLCBzbyByZXdyaXRlIGl0LiBUaGlzIGlz
Ci0gICAgICAgICMgdGhlIG1vc3QgbWFnaWNhbCBwYXJ0IG9mIHRoZSBwcm9jZXNzOiBsb2FkIHRo
ZSBzb3VyY2UsIHJld3JpdGUgdGhlCi0gICAgICAgICMgYXNzZXJ0cywgYW5kIGxvYWQgdGhlIHJl
d3JpdHRlbiBzb3VyY2UuIFdlIGFsc28gY2FjaGUgdGhlIHJld3JpdHRlbgotICAgICAgICAjIG1v
ZHVsZSBjb2RlIGluIGEgc3BlY2lhbCBweWMuIFdlIG11c3QgYmUgYXdhcmUgb2YgdGhlIHBvc3Np
YmlsaXR5IG9mCi0gICAgICAgICMgY29uY3VycmVudCBweXRlc3QgcHJvY2Vzc2VzIHJld3JpdGlu
ZyBhbmQgbG9hZGluZyBweWNzLiBUbyBhdm9pZAotICAgICAgICAjIHRyaWNreSByYWNlIGNvbmRp
dGlvbnMsIHdlIG1haW50YWluIHRoZSBmb2xsb3dpbmcgaW52YXJpYW50OiBUaGUKLSAgICAgICAg
IyBjYWNoZWQgcHljIGlzIGFsd2F5cyBhIGNvbXBsZXRlLCB2YWxpZCBweWMuIE9wZXJhdGlvbnMg
b24gaXQgbXVzdCBiZQotICAgICAgICAjIGF0b21pYy4gUE9TSVgncyBhdG9taWMgcmVuYW1lIGNv
bWVzIGluIGhhbmR5LgotICAgICAgICB3cml0ZSA9IG5vdCBzeXMuZG9udF93cml0ZV9ieXRlY29k
ZQotICAgICAgICBjYWNoZV9kaXIgPSBvcy5wYXRoLmpvaW4oZm5fcHlwYXRoLmRpcm5hbWUsICJf
X3B5Y2FjaGVfXyIpCi0gICAgICAgIGlmIHdyaXRlOgotICAgICAgICAgICAgdHJ5OgotICAgICAg
ICAgICAgICAgIG9zLm1rZGlyKGNhY2hlX2RpcikKLSAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9y
OgotICAgICAgICAgICAgICAgIGUgPSBzeXMuZXhjX2luZm8oKVsxXS5lcnJubwotICAgICAgICAg
ICAgICAgIGlmIGUgPT0gZXJybm8uRUVYSVNUOgotICAgICAgICAgICAgICAgICAgICAjIEVpdGhl
ciB0aGUgX19weWNhY2hlX18gZGlyZWN0b3J5IGFscmVhZHkgZXhpc3RzICh0aGUKLSAgICAgICAg
ICAgICAgICAgICAgIyBjb21tb24gY2FzZSkgb3IgaXQncyBibG9ja2VkIGJ5IGEgbm9uLWRpciBu
b2RlLiBJbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgIyBsYXR0ZXIgY2FzZSwgd2UnbGwgaWdu
b3JlIGl0IGluIF93cml0ZV9weWMuCi0gICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAg
ICAgICAgICBlbGlmIGUgaW4gW2Vycm5vLkVOT0VOVCwgZXJybm8uRU5PVERJUl06Ci0gICAgICAg
ICAgICAgICAgICAgICMgT25lIG9mIHRoZSBwYXRoIGNvbXBvbmVudHMgd2FzIG5vdCBhIGRpcmVj
dG9yeSwgbGlrZWx5Ci0gICAgICAgICAgICAgICAgICAgICMgYmVjYXVzZSB3ZSdyZSBpbiBhIHpp
cCBmaWxlLgotICAgICAgICAgICAgICAgICAgICB3cml0ZSA9IEZhbHNlCi0gICAgICAgICAgICAg
ICAgZWxpZiBlIGluIFtlcnJuby5FQUNDRVMsIGVycm5vLkVST0ZTLCBlcnJuby5FUEVSTV06Ci0g
ICAgICAgICAgICAgICAgICAgIHN0YXRlLnRyYWNlKCJyZWFkIG9ubHkgZGlyZWN0b3J5OiAlciIg
JSBmbl9weXBhdGguZGlybmFtZSkKLSAgICAgICAgICAgICAgICAgICAgd3JpdGUgPSBGYWxzZQot
ICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAg
IGNhY2hlX25hbWUgPSBmbl9weXBhdGguYmFzZW5hbWVbOi0zXSArIFBZQ19UQUlMCi0gICAgICAg
IHB5YyA9IG9zLnBhdGguam9pbihjYWNoZV9kaXIsIGNhY2hlX25hbWUpCi0gICAgICAgICMgTm90
aWNlIHRoYXQgZXZlbiBpZiB3ZSdyZSBpbiBhIHJlYWQtb25seSBkaXJlY3RvcnksIEknbSBnb2lu
ZwotICAgICAgICAjIHRvIGNoZWNrIGZvciBhIGNhY2hlZCBweWMuIFRoaXMgbWF5IG5vdCBiZSBv
cHRpbWFsLi4uCi0gICAgICAgIGNvID0gX3JlYWRfcHljKGZuX3B5cGF0aCwgcHljLCBzdGF0ZS50
cmFjZSkKLSAgICAgICAgaWYgY28gaXMgTm9uZToKLSAgICAgICAgICAgIHN0YXRlLnRyYWNlKCJy
ZXdyaXRpbmcgJXIiICUgKGZuLCkpCi0gICAgICAgICAgICBzb3VyY2Vfc3RhdCwgY28gPSBfcmV3
cml0ZV90ZXN0KHN0YXRlLCBmbl9weXBhdGgpCi0gICAgICAgICAgICBpZiBjbyBpcyBOb25lOgot
ICAgICAgICAgICAgICAgICMgUHJvYmFibHkgYSBTeW50YXhFcnJvciBpbiB0aGUgdGVzdC4KLSAg
ICAgICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICAgICAgaWYgd3JpdGU6Ci0gICAgICAg
ICAgICAgICAgX21ha2VfcmV3cml0dGVuX3B5YyhzdGF0ZSwgc291cmNlX3N0YXQsIHB5YywgY28p
Ci0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzdGF0ZS50cmFjZSgiZm91bmQgY2FjaGVkIHJl
d3JpdHRlbiBweWMgZm9yICVyIiAlIChmbiwpKQotICAgICAgICBzZWxmLm1vZHVsZXNbbmFtZV0g
PSBjbywgcHljCi0gICAgICAgIHJldHVybiBzZWxmCi0KLSAgICBkZWYgbG9hZF9tb2R1bGUoc2Vs
ZiwgbmFtZSk6Ci0gICAgICAgICMgSWYgdGhlcmUgaXMgYW4gZXhpc3RpbmcgbW9kdWxlIG9iamVj
dCBuYW1lZCAnZnVsbG5hbWUnIGluCi0gICAgICAgICMgc3lzLm1vZHVsZXMsIHRoZSBsb2FkZXIg
bXVzdCB1c2UgdGhhdCBleGlzdGluZyBtb2R1bGUuIChPdGhlcndpc2UsCi0gICAgICAgICMgdGhl
IHJlbG9hZCgpIGJ1aWx0aW4gd2lsbCBub3Qgd29yayBjb3JyZWN0bHkuKQotICAgICAgICBpZiBu
YW1lIGluIHN5cy5tb2R1bGVzOgotICAgICAgICAgICAgcmV0dXJuIHN5cy5tb2R1bGVzW25hbWVd
Ci0KLSAgICAgICAgY28sIHB5YyA9IHNlbGYubW9kdWxlcy5wb3AobmFtZSkKLSAgICAgICAgIyBJ
IHdpc2ggSSBjb3VsZCBqdXN0IGNhbGwgaW1wLmxvYWRfY29tcGlsZWQgaGVyZSwgYnV0IF9fZmls
ZV9fIGhhcyB0bwotICAgICAgICAjIGJlIHNldCBwcm9wZXJseS4gSW4gUHl0aG9uIDMuMissIHRo
aXMgYWxsIHdvdWxkIGJlIGhhbmRsZWQgY29ycmVjdGx5Ci0gICAgICAgICMgYnkgbG9hZF9jb21w
aWxlZC4KLSAgICAgICAgbW9kID0gc3lzLm1vZHVsZXNbbmFtZV0gPSBpbXAubmV3X21vZHVsZShu
YW1lKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBtb2QuX19maWxlX18gPSBjby5jb19maWxl
bmFtZQotICAgICAgICAgICAgIyBOb3JtYWxseSwgdGhpcyBhdHRyaWJ1dGUgaXMgMy4yKy4KLSAg
ICAgICAgICAgIG1vZC5fX2NhY2hlZF9fID0gcHljCi0gICAgICAgICAgICBtb2QuX19sb2FkZXJf
XyA9IHNlbGYKLSAgICAgICAgICAgIHB5LmJ1aWx0aW4uZXhlY18oY28sIG1vZC5fX2RpY3RfXykK
LSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzW25hbWVdCi0gICAg
ICAgICAgICByYWlzZQotICAgICAgICByZXR1cm4gc3lzLm1vZHVsZXNbbmFtZV0KLQotCi0KLSAg
ICBkZWYgaXNfcGFja2FnZShzZWxmLCBuYW1lKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAg
ZmQsIGZuLCBkZXNjID0gaW1wLmZpbmRfbW9kdWxlKG5hbWUpCi0gICAgICAgIGV4Y2VwdCBJbXBv
cnRFcnJvcjoKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICBpZiBmZCBpcyBub3Qg
Tm9uZToKLSAgICAgICAgICAgIGZkLmNsb3NlKCkKLSAgICAgICAgdHAgPSBkZXNjWzJdCi0gICAg
ICAgIHJldHVybiB0cCA9PSBpbXAuUEtHX0RJUkVDVE9SWQotCi0gICAgQGNsYXNzbWV0aG9kCi0g
ICAgZGVmIF9yZWdpc3Rlcl93aXRoX3BrZ19yZXNvdXJjZXMoY2xzKToKLSAgICAgICAgIiIiCi0g
ICAgICAgIEVuc3VyZSBwYWNrYWdlIHJlc291cmNlcyBjYW4gYmUgbG9hZGVkIGZyb20gdGhpcyBs
b2FkZXIuIE1heSBiZSBjYWxsZWQKLSAgICAgICAgbXVsdGlwbGUgdGltZXMsIGFzIHRoZSBvcGVy
YXRpb24gaXMgaWRlbXBvdGVudC4KLSAgICAgICAgIiIiCi0gICAgICAgIHRyeToKLSAgICAgICAg
ICAgIGltcG9ydCBwa2dfcmVzb3VyY2VzCi0gICAgICAgICAgICAjIGFjY2VzcyBhbiBhdHRyaWJ1
dGUgaW4gY2FzZSBhIGRlZmVycmVkIGltcG9ydGVyIGlzIHByZXNlbnQKLSAgICAgICAgICAgIHBr
Z19yZXNvdXJjZXMuX19uYW1lX18KLSAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAg
ICAgICAgcmV0dXJuCi0KLSAgICAgICAgIyBTaW5jZSBweXRlc3QgdGVzdHMgYXJlIGFsd2F5cyBs
b2NhdGVkIGluIHRoZSBmaWxlIHN5c3RlbSwgdGhlCi0gICAgICAgICMgIERlZmF1bHRQcm92aWRl
ciBpcyBhcHByb3ByaWF0ZS4KLSAgICAgICAgcGtnX3Jlc291cmNlcy5yZWdpc3Rlcl9sb2FkZXJf
dHlwZShjbHMsIHBrZ19yZXNvdXJjZXMuRGVmYXVsdFByb3ZpZGVyKQotCi0gICAgZGVmIGdldF9k
YXRhKHNlbGYsIHBhdGhuYW1lKToKLSAgICAgICAgIiIiT3B0aW9uYWwgUEVQMzAyIGdldF9kYXRh
IEFQSS4KLSAgICAgICAgIiIiCi0gICAgICAgIHdpdGggb3BlbihwYXRobmFtZSwgJ3JiJykgYXMg
ZjoKLSAgICAgICAgICAgIHJldHVybiBmLnJlYWQoKQotCi0KLWRlZiBfd3JpdGVfcHljKHN0YXRl
LCBjbywgc291cmNlX3N0YXQsIHB5Yyk6Ci0gICAgIyBUZWNobmljYWxseSwgd2UgZG9uJ3QgaGF2
ZSB0byBoYXZlIHRoZSBzYW1lIHB5YyBmb3JtYXQgYXMKLSAgICAjIChDKVB5dGhvbiwgc2luY2Ug
dGhlc2UgInB5Y3MiIHNob3VsZCBuZXZlciBiZSBzZWVuIGJ5IGJ1aWx0aW4KLSAgICAjIGltcG9y
dC4gSG93ZXZlciwgdGhlcmUncyBsaXR0bGUgcmVhc29uIGRldmlhdGUsIGFuZCBJIGhvcGUKLSAg
ICAjIHNvbWV0aW1lIHRvIGJlIGFibGUgdG8gdXNlIGltcC5sb2FkX2NvbXBpbGVkIHRvIGxvYWQg
dGhlbS4gKFNlZQotICAgICMgdGhlIGNvbW1lbnQgaW4gbG9hZF9tb2R1bGUgYWJvdmUuKQotICAg
IHRyeToKLSAgICAgICAgZnAgPSBvcGVuKHB5YywgIndiIikKLSAgICBleGNlcHQgSU9FcnJvcjoK
LSAgICAgICAgZXJyID0gc3lzLmV4Y19pbmZvKClbMV0uZXJybm8KLSAgICAgICAgc3RhdGUudHJh
Y2UoImVycm9yIHdyaXRpbmcgcHljIGZpbGUgYXQgJXM6IGVycm5vPSVzIiAlKHB5YywgZXJyKSkK
LSAgICAgICAgIyB3ZSBpZ25vcmUgYW55IGZhaWx1cmUgdG8gd3JpdGUgdGhlIGNhY2hlIGZpbGUK
LSAgICAgICAgIyB0aGVyZSBhcmUgbWFueSByZWFzb25zLCBwZXJtaXNzaW9uLWRlbmllZCwgX19w
eWNhY2hlX18gYmVpbmcgYQotICAgICAgICAjIGZpbGUgZXRjLgotICAgICAgICByZXR1cm4gRmFs
c2UKLSAgICB0cnk6Ci0gICAgICAgIGZwLndyaXRlKGltcC5nZXRfbWFnaWMoKSkKLSAgICAgICAg
bXRpbWUgPSBpbnQoc291cmNlX3N0YXQubXRpbWUpCi0gICAgICAgIHNpemUgPSBzb3VyY2Vfc3Rh
dC5zaXplICYgMHhGRkZGRkZGRgotICAgICAgICBmcC53cml0ZShzdHJ1Y3QucGFjaygiPGxsIiwg
bXRpbWUsIHNpemUpKQotICAgICAgICBtYXJzaGFsLmR1bXAoY28sIGZwKQotICAgIGZpbmFsbHk6
Ci0gICAgICAgIGZwLmNsb3NlKCkKLSAgICByZXR1cm4gVHJ1ZQotCi1STiA9ICJcclxuIi5lbmNv
ZGUoInV0Zi04IikKLU4gPSAiXG4iLmVuY29kZSgidXRmLTgiKQotCi1jb29raWVfcmUgPSByZS5j
b21waWxlKHIiXlsgXHRcZl0qIy4qY29kaW5nWzo9XVsgXHRdKlstXHcuXSsiKQotQk9NX1VURjgg
PSAnXHhlZlx4YmJceGJmJwotCi1kZWYgX3Jld3JpdGVfdGVzdChzdGF0ZSwgZm4pOgotICAgICIi
IlRyeSB0byByZWFkIGFuZCByZXdyaXRlICpmbiogYW5kIHJldHVybiB0aGUgY29kZSBvYmplY3Qu
IiIiCi0gICAgdHJ5OgotICAgICAgICBzdGF0ID0gZm4uc3RhdCgpCi0gICAgICAgIHNvdXJjZSA9
IGZuLnJlYWQoInJiIikKLSAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvcjoKLSAgICAgICAgcmV0
dXJuIE5vbmUsIE5vbmUKLSAgICBpZiBBU0NJSV9JU19ERUZBVUxUX0VOQ09ESU5HOgotICAgICAg
ICAjIEFTQ0lJIGlzIHRoZSBkZWZhdWx0IGVuY29kaW5nIGluIFB5dGhvbiAyLiBXaXRob3V0IGEg
Y29kaW5nCi0gICAgICAgICMgZGVjbGFyYXRpb24sIFB5dGhvbiAyIHdpbGwgY29tcGxhaW4gYWJv
dXQgYW55IGJ5dGVzIGluIHRoZSBmaWxlCi0gICAgICAgICMgb3V0c2lkZSB0aGUgQVNDSUkgcmFu
Z2UuIFNhZGx5LCB0aGlzIGJlaGF2aW9yIGRvZXMgbm90IGV4dGVuZCB0bwotICAgICAgICAjIGNv
bXBpbGUoKSBvciBhc3QucGFyc2UoKSwgd2hpY2ggcHJlZmVyIHRvIGludGVycHJldCB0aGUgYnl0
ZXMgYXMKLSAgICAgICAgIyBsYXRpbi0xLiAoQXQgbGVhc3QgdGhleSBwcm9wZXJseSBoYW5kbGUg
ZXhwbGljaXQgY29kaW5nIGNvb2tpZXMuKSBUbwotICAgICAgICAjIHByZXNlcnZlIHRoaXMgZXJy
b3IgYmVoYXZpb3IsIHdlIGNvdWxkIGZvcmNlIGFzdC5wYXJzZSgpIHRvIHVzZSBBU0NJSQotICAg
ICAgICAjIGFzIHRoZSBlbmNvZGluZyBieSBpbnNlcnRpbmcgYSBjb2RpbmcgY29va2llLiBVbmZv
cnR1bmF0ZWx5LCB0aGF0Ci0gICAgICAgICMgbWVzc2VzIHVwIGxpbmUgbnVtYmVycy4gVGh1cywg
d2UgaGF2ZSB0byBjaGVjayBvdXJzZWx2ZXMgaWYgYW55dGhpbmcKLSAgICAgICAgIyBpcyBvdXRz
aWRlIHRoZSBBU0NJSSByYW5nZSBpbiB0aGUgY2FzZSBubyBlbmNvZGluZyBpcyBleHBsaWNpdGx5
Ci0gICAgICAgICMgZGVjbGFyZWQuIEZvciBtb3JlIGNvbnRleHQsIHNlZSBpc3N1ZSAjMjY5LiBZ
YXkgZm9yIFB5dGhvbiAzIHdoaWNoCi0gICAgICAgICMgZ2V0cyB0aGlzIHJpZ2h0LgotICAgICAg
ICBlbmQxID0gc291cmNlLmZpbmQoIlxuIikKLSAgICAgICAgZW5kMiA9IHNvdXJjZS5maW5kKCJc
biIsIGVuZDEgKyAxKQotICAgICAgICBpZiAobm90IHNvdXJjZS5zdGFydHN3aXRoKEJPTV9VVEY4
KSBhbmQKLSAgICAgICAgICAgIGNvb2tpZV9yZS5tYXRjaChzb3VyY2VbMDplbmQxXSkgaXMgTm9u
ZSBhbmQKLSAgICAgICAgICAgIGNvb2tpZV9yZS5tYXRjaChzb3VyY2VbZW5kMSArIDE6ZW5kMl0p
IGlzIE5vbmUpOgotICAgICAgICAgICAgaWYgaGFzYXR0cihzdGF0ZSwgIl9pbmRlY29kZSIpOgot
ICAgICAgICAgICAgICAgICMgZW5jb2RpbmdzIGltcG9ydGVkIHVzIGFnYWluLCBzbyBkb24ndCBy
ZXdyaXRlLgotICAgICAgICAgICAgICAgIHJldHVybiBOb25lLCBOb25lCi0gICAgICAgICAgICBz
dGF0ZS5faW5kZWNvZGUgPSBUcnVlCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAg
dHJ5OgotICAgICAgICAgICAgICAgICAgICBzb3VyY2UuZGVjb2RlKCJhc2NpaSIpCi0gICAgICAg
ICAgICAgICAgZXhjZXB0IFVuaWNvZGVEZWNvZGVFcnJvcjoKLSAgICAgICAgICAgICAgICAgICAg
IyBMZXQgaXQgZmFpbCBpbiByZWFsIGltcG9ydC4KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IE5vbmUsIE5vbmUKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgZGVsIHN0
YXRlLl9pbmRlY29kZQotICAgICMgT24gUHl0aG9uIHZlcnNpb25zIHdoaWNoIGFyZSBub3QgMi43
IGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMy4xLCB0aGUKLSAgICAjIHBhcnNlciBleHBlY3Rz
ICpuaXggbmV3bGluZXMuCi0gICAgaWYgUkVXUklURV9ORVdMSU5FUzoKLSAgICAgICAgc291cmNl
ID0gc291cmNlLnJlcGxhY2UoUk4sIE4pICsgTgotICAgIHRyeToKLSAgICAgICAgdHJlZSA9IGFz
dC5wYXJzZShzb3VyY2UpCi0gICAgZXhjZXB0IFN5bnRheEVycm9yOgotICAgICAgICAjIExldCB0
aGlzIHBvcCB1cCBhZ2FpbiBpbiB0aGUgcmVhbCBpbXBvcnQuCi0gICAgICAgIHN0YXRlLnRyYWNl
KCJmYWlsZWQgdG8gcGFyc2U6ICVyIiAlIChmbiwpKQotICAgICAgICByZXR1cm4gTm9uZSwgTm9u
ZQotICAgIHJld3JpdGVfYXNzZXJ0cyh0cmVlKQotICAgIHRyeToKLSAgICAgICAgY28gPSBjb21w
aWxlKHRyZWUsIGZuLnN0cnBhdGgsICJleGVjIikKLSAgICBleGNlcHQgU3ludGF4RXJyb3I6Ci0g
ICAgICAgICMgSXQncyBwb3NzaWJsZSB0aGF0IHRoaXMgZXJyb3IgaXMgZnJvbSBzb21lIGJ1ZyBp
biB0aGUKLSAgICAgICAgIyBhc3NlcnRpb24gcmV3cml0aW5nLCBidXQgSSBkb24ndCBrbm93IG9m
IGEgZmFzdCB3YXkgdG8gdGVsbC4KLSAgICAgICAgc3RhdGUudHJhY2UoImZhaWxlZCB0byBjb21w
aWxlOiAlciIgJSAoZm4sKSkKLSAgICAgICAgcmV0dXJuIE5vbmUsIE5vbmUKLSAgICByZXR1cm4g
c3RhdCwgY28KLQotZGVmIF9tYWtlX3Jld3JpdHRlbl9weWMoc3RhdGUsIHNvdXJjZV9zdGF0LCBw
eWMsIGNvKToKLSAgICAiIiJUcnkgdG8gZHVtcCByZXdyaXR0ZW4gY29kZSB0byAqcHljKi4iIiIK
LSAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgid2luIik6Ci0gICAgICAgICMgV2luZG93
cyBncmFudHMgZXhjbHVzaXZlIGFjY2VzcyB0byBvcGVuIGZpbGVzIGFuZCBkb2Vzbid0IGhhdmUg
YXRvbWljCi0gICAgICAgICMgcmVuYW1lLCBzbyBqdXN0IHdyaXRlIGludG8gdGhlIGZpbmFsIGZp
bGUuCi0gICAgICAgIF93cml0ZV9weWMoc3RhdGUsIGNvLCBzb3VyY2Vfc3RhdCwgcHljKQotICAg
IGVsc2U6Ci0gICAgICAgICMgV2hlbiBub3Qgb24gd2luZG93cywgYXNzdW1lIHJlbmFtZSBpcyBh
dG9taWMuIER1bXAgdGhlIGNvZGUgb2JqZWN0Ci0gICAgICAgICMgaW50byBhIGZpbGUgc3BlY2lm
aWMgdG8gdGhpcyBwcm9jZXNzIGFuZCBhdG9taWNhbGx5IHJlcGxhY2UgaXQuCi0gICAgICAgIHBy
b2NfcHljID0gcHljICsgIi4iICsgc3RyKG9zLmdldHBpZCgpKQotICAgICAgICBpZiBfd3JpdGVf
cHljKHN0YXRlLCBjbywgc291cmNlX3N0YXQsIHByb2NfcHljKToKLSAgICAgICAgICAgIG9zLnJl
bmFtZShwcm9jX3B5YywgcHljKQotCi1kZWYgX3JlYWRfcHljKHNvdXJjZSwgcHljLCB0cmFjZT1s
YW1iZGEgeDogTm9uZSk6Ci0gICAgIiIiUG9zc2libHkgcmVhZCBhIHB5dGVzdCBweWMgY29udGFp
bmluZyByZXdyaXR0ZW4gY29kZS4KLQotICAgIFJldHVybiByZXdyaXR0ZW4gY29kZSBpZiBzdWNj
ZXNzZnVsIG9yIE5vbmUgaWYgbm90LgotICAgICIiIgotICAgIHRyeToKLSAgICAgICAgZnAgPSBv
cGVuKHB5YywgInJiIikKLSAgICBleGNlcHQgSU9FcnJvcjoKLSAgICAgICAgcmV0dXJuIE5vbmUK
LSAgICB3aXRoIGZwOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBtdGltZSA9IGludChzb3Vy
Y2UubXRpbWUoKSkKLSAgICAgICAgICAgIHNpemUgPSBzb3VyY2Uuc2l6ZSgpCi0gICAgICAgICAg
ICBkYXRhID0gZnAucmVhZCgxMikKLSAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3IgYXMg
ZToKLSAgICAgICAgICAgIHRyYWNlKCdfcmVhZF9weWMoJXMpOiBFbnZpcm9ubWVudEVycm9yICVz
JyAlIChzb3VyY2UsIGUpKQotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgIyBDaGVj
ayBmb3IgaW52YWxpZCBvciBvdXQgb2YgZGF0ZSBweWMgZmlsZS4KLSAgICAgICAgaWYgKGxlbihk
YXRhKSAhPSAxMiBvciBkYXRhWzo0XSAhPSBpbXAuZ2V0X21hZ2ljKCkgb3IKLSAgICAgICAgICAg
ICAgICBzdHJ1Y3QudW5wYWNrKCI8bGwiLCBkYXRhWzQ6XSkgIT0gKG10aW1lLCBzaXplKSk6Ci0g
ICAgICAgICAgICB0cmFjZSgnX3JlYWRfcHljKCVzKTogaW52YWxpZCBvciBvdXQgb2YgZGF0ZSBw
eWMnICUgc291cmNlKQotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgdHJ5OgotICAg
ICAgICAgICAgY28gPSBtYXJzaGFsLmxvYWQoZnApCi0gICAgICAgIGV4Y2VwdCBFeGNlcHRpb24g
YXMgZToKLSAgICAgICAgICAgIHRyYWNlKCdfcmVhZF9weWMoJXMpOiBtYXJzaGFsLmxvYWQgZXJy
b3IgJXMnICUgKHNvdXJjZSwgZSkpCi0gICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICBp
ZiBub3QgaXNpbnN0YW5jZShjbywgdHlwZXMuQ29kZVR5cGUpOgotICAgICAgICAgICAgdHJhY2Uo
J19yZWFkX3B5Yyglcyk6IG5vdCBhIGNvZGUgb2JqZWN0JyAlIHNvdXJjZSkKLSAgICAgICAgICAg
IHJldHVybiBOb25lCi0gICAgICAgIHJldHVybiBjbwotCi0KLWRlZiByZXdyaXRlX2Fzc2VydHMo
bW9kKToKLSAgICAiIiJSZXdyaXRlIHRoZSBhc3NlcnQgc3RhdGVtZW50cyBpbiBtb2QuIiIiCi0g
ICAgQXNzZXJ0aW9uUmV3cml0ZXIoKS5ydW4obW9kKQotCi0KLWRlZiBfc2FmZXJlcHIob2JqKToK
LSAgICAiIiJHZXQgYSBzYWZlIHJlcHIgb2YgYW4gb2JqZWN0IGZvciBhc3NlcnRpb24gZXJyb3Ig
bWVzc2FnZXMuCi0KLSAgICBUaGUgYXNzZXJ0aW9uIGZvcm1hdHRpbmcgKHV0aWwuZm9ybWF0X2V4
cGxhbmF0aW9uKCkpIHJlcXVpcmVzCi0gICAgbmV3bGluZXMgdG8gYmUgZXNjYXBlZCBzaW5jZSB0
aGV5IGFyZSBhIHNwZWNpYWwgY2hhcmFjdGVyIGZvciBpdC4KLSAgICBOb3JtYWxseSBhc3NlcnRp
b24udXRpbC5mb3JtYXRfZXhwbGFuYXRpb24oKSBkb2VzIHRoaXMgYnV0IGZvciBhCi0gICAgY3Vz
dG9tIHJlcHIgaXQgaXMgcG9zc2libGUgdG8gY29udGFpbiBvbmUgb2YgdGhlIHNwZWNpYWwgZXNj
YXBlCi0gICAgc2VxdWVuY2VzLCBlc3BlY2lhbGx5ICdcbnsnIGFuZCAnXG59JyBhcmUgbGlrZWx5
IHRvIGJlIHByZXNlbnQgaW4KLSAgICBKU09OIHJlcHJzLgotCi0gICAgIiIiCi0gICAgcmVwciA9
IHB5LmlvLnNhZmVyZXByKG9iaikKLSAgICBpZiBweS5idWlsdGluLl9pc3RleHQocmVwcik6Ci0g
ICAgICAgIHQgPSBweS5idWlsdGluLnRleHQKLSAgICBlbHNlOgotICAgICAgICB0ID0gcHkuYnVp
bHRpbi5ieXRlcwotICAgIHJldHVybiByZXByLnJlcGxhY2UodCgiXG4iKSwgdCgiXFxuIikpCi0K
LQotZnJvbSBfcHl0ZXN0LmFzc2VydGlvbi51dGlsIGltcG9ydCBmb3JtYXRfZXhwbGFuYXRpb24g
YXMgX2Zvcm1hdF9leHBsYW5hdGlvbiAjIG5vcWEKLQotZGVmIF9mb3JtYXRfYXNzZXJ0bXNnKG9i
aik6Ci0gICAgIiIiRm9ybWF0IHRoZSBjdXN0b20gYXNzZXJ0aW9uIG1lc3NhZ2UgZ2l2ZW4uCi0K
LSAgICBGb3Igc3RyaW5ncyB0aGlzIHNpbXBseSByZXBsYWNlcyBuZXdsaW5lcyB3aXRoICdcbn4n
IHNvIHRoYXQKLSAgICB1dGlsLmZvcm1hdF9leHBsYW5hdGlvbigpIHdpbGwgcHJlc2VydmUgdGhl
bSBpbnN0ZWFkIG9mIGVzY2FwaW5nCi0gICAgbmV3bGluZXMuICBGb3Igb3RoZXIgb2JqZWN0cyBw
eS5pby5zYWZlcmVwcigpIGlzIHVzZWQgZmlyc3QuCi0KLSAgICAiIiIKLSAgICAjIHJlcHJsaWIg
YXBwZWFycyB0byBoYXZlIGEgYnVnIHdoaWNoIG1lYW5zIHRoYXQgaWYgYSBzdHJpbmcKLSAgICAj
IGNvbnRhaW5zIGEgbmV3bGluZSBpdCBnZXRzIGVzY2FwZWQsIGhvd2V2ZXIgaWYgYW4gb2JqZWN0
IGhhcyBhCi0gICAgIyAuX19yZXByX18oKSB3aGljaCBjb250YWlucyBuZXdsaW5lcyBpdCBkb2Vz
IG5vdCBnZXQgZXNjYXBlZC4KLSAgICAjIEhvd2V2ZXIgaW4gZWl0aGVyIGNhc2Ugd2Ugd2FudCB0
byBwcmVzZXJ2ZSB0aGUgbmV3bGluZS4KLSAgICBpZiBweS5idWlsdGluLl9pc3RleHQob2JqKSBv
ciBweS5idWlsdGluLl9pc2J5dGVzKG9iaik6Ci0gICAgICAgIHMgPSBvYmoKLSAgICAgICAgaXNf
cmVwciA9IEZhbHNlCi0gICAgZWxzZToKLSAgICAgICAgcyA9IHB5LmlvLnNhZmVyZXByKG9iaikK
LSAgICAgICAgaXNfcmVwciA9IFRydWUKLSAgICBpZiBweS5idWlsdGluLl9pc3RleHQocyk6Ci0g
ICAgICAgIHQgPSBweS5idWlsdGluLnRleHQKLSAgICBlbHNlOgotICAgICAgICB0ID0gcHkuYnVp
bHRpbi5ieXRlcwotICAgIHMgPSBzLnJlcGxhY2UodCgiXG4iKSwgdCgiXG5+IikpLnJlcGxhY2Uo
dCgiJSIpLCB0KCIlJSIpKQotICAgIGlmIGlzX3JlcHI6Ci0gICAgICAgIHMgPSBzLnJlcGxhY2Uo
dCgiXFxuIiksIHQoIlxufiIpKQotICAgIHJldHVybiBzCi0KLWRlZiBfc2hvdWxkX3JlcHJfZ2xv
YmFsX25hbWUob2JqKToKLSAgICByZXR1cm4gbm90IGhhc2F0dHIob2JqLCAiX19uYW1lX18iKSBh
bmQgbm90IHB5LmJ1aWx0aW4uY2FsbGFibGUob2JqKQotCi1kZWYgX2Zvcm1hdF9ib29sb3AoZXhw
bGFuYXRpb25zLCBpc19vcik6Ci0gICAgZXhwbGFuYXRpb24gPSAiKCIgKyAoaXNfb3IgYW5kICIg
b3IgIiBvciAiIGFuZCAiKS5qb2luKGV4cGxhbmF0aW9ucykgKyAiKSIKLSAgICBpZiBweS5idWls
dGluLl9pc3RleHQoZXhwbGFuYXRpb24pOgotICAgICAgICB0ID0gcHkuYnVpbHRpbi50ZXh0Ci0g
ICAgZWxzZToKLSAgICAgICAgdCA9IHB5LmJ1aWx0aW4uYnl0ZXMKLSAgICByZXR1cm4gZXhwbGFu
YXRpb24ucmVwbGFjZSh0KCclJyksIHQoJyUlJykpCi0KLWRlZiBfY2FsbF9yZXByY29tcGFyZShv
cHMsIHJlc3VsdHMsIGV4cGxzLCBlYWNoX29iaik6Ci0gICAgZm9yIGksIHJlcywgZXhwbCBpbiB6
aXAocmFuZ2UobGVuKG9wcykpLCByZXN1bHRzLCBleHBscyk6Ci0gICAgICAgIHRyeToKLSAgICAg
ICAgICAgIGRvbmUgPSBub3QgcmVzCi0gICAgICAgIGV4Y2VwdCBFeGNlcHRpb246Ci0gICAgICAg
ICAgICBkb25lID0gVHJ1ZQotICAgICAgICBpZiBkb25lOgotICAgICAgICAgICAgYnJlYWsKLSAg
ICBpZiB1dGlsLl9yZXByY29tcGFyZSBpcyBub3QgTm9uZToKLSAgICAgICAgY3VzdG9tID0gdXRp
bC5fcmVwcmNvbXBhcmUob3BzW2ldLCBlYWNoX29ialtpXSwgZWFjaF9vYmpbaSArIDFdKQotICAg
ICAgICBpZiBjdXN0b20gaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICByZXR1cm4gY3VzdG9tCi0g
ICAgcmV0dXJuIGV4cGwKLQotCi11bmFyeV9tYXAgPSB7Ci0gICAgYXN0Lk5vdDogIm5vdCAlcyIs
Ci0gICAgYXN0LkludmVydDogIn4lcyIsCi0gICAgYXN0LlVTdWI6ICItJXMiLAotICAgIGFzdC5V
QWRkOiAiKyVzIgotfQotCi1iaW5vcF9tYXAgPSB7Ci0gICAgYXN0LkJpdE9yOiAifCIsCi0gICAg
YXN0LkJpdFhvcjogIl4iLAotICAgIGFzdC5CaXRBbmQ6ICImIiwKLSAgICBhc3QuTFNoaWZ0OiAi
PDwiLAotICAgIGFzdC5SU2hpZnQ6ICI+PiIsCi0gICAgYXN0LkFkZDogIisiLAotICAgIGFzdC5T
dWI6ICItIiwKLSAgICBhc3QuTXVsdDogIioiLAotICAgIGFzdC5EaXY6ICIvIiwKLSAgICBhc3Qu
Rmxvb3JEaXY6ICIvLyIsCi0gICAgYXN0Lk1vZDogIiUlIiwgIyBlc2NhcGVkIGZvciBzdHJpbmcg
Zm9ybWF0dGluZwotICAgIGFzdC5FcTogIj09IiwKLSAgICBhc3QuTm90RXE6ICIhPSIsCi0gICAg
YXN0Lkx0OiAiPCIsCi0gICAgYXN0Lkx0RTogIjw9IiwKLSAgICBhc3QuR3Q6ICI+IiwKLSAgICBh
c3QuR3RFOiAiPj0iLAotICAgIGFzdC5Qb3c6ICIqKiIsCi0gICAgYXN0LklzOiAiaXMiLAotICAg
IGFzdC5Jc05vdDogImlzIG5vdCIsCi0gICAgYXN0LkluOiAiaW4iLAotICAgIGFzdC5Ob3RJbjog
Im5vdCBpbiIKLX0KLSMgUHl0aG9uIDMuNSsgY29tcGF0aWJpbGl0eQotdHJ5OgotICAgIGJpbm9w
X21hcFthc3QuTWF0TXVsdF0gPSAiQCIKLWV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICBwYXNz
Ci0KLSMgUHl0aG9uIDMuNCsgY29tcGF0aWJpbGl0eQotaWYgaGFzYXR0cihhc3QsICJOYW1lQ29u
c3RhbnQiKToKLSAgICBfTmFtZUNvbnN0YW50ID0gYXN0Lk5hbWVDb25zdGFudAotZWxzZToKLSAg
ICBkZWYgX05hbWVDb25zdGFudChjKToKLSAgICAgICAgcmV0dXJuIGFzdC5OYW1lKHN0cihjKSwg
YXN0LkxvYWQoKSkKLQotCi1kZWYgc2V0X2xvY2F0aW9uKG5vZGUsIGxpbmVubywgY29sX29mZnNl
dCk6Ci0gICAgIiIiU2V0IG5vZGUgbG9jYXRpb24gaW5mb3JtYXRpb24gcmVjdXJzaXZlbHkuIiIi
Ci0gICAgZGVmIF9maXgobm9kZSwgbGluZW5vLCBjb2xfb2Zmc2V0KToKLSAgICAgICAgaWYgImxp
bmVubyIgaW4gbm9kZS5fYXR0cmlidXRlczoKLSAgICAgICAgICAgIG5vZGUubGluZW5vID0gbGlu
ZW5vCi0gICAgICAgIGlmICJjb2xfb2Zmc2V0IiBpbiBub2RlLl9hdHRyaWJ1dGVzOgotICAgICAg
ICAgICAgbm9kZS5jb2xfb2Zmc2V0ID0gY29sX29mZnNldAotICAgICAgICBmb3IgY2hpbGQgaW4g
YXN0Lml0ZXJfY2hpbGRfbm9kZXMobm9kZSk6Ci0gICAgICAgICAgICBfZml4KGNoaWxkLCBsaW5l
bm8sIGNvbF9vZmZzZXQpCi0gICAgX2ZpeChub2RlLCBsaW5lbm8sIGNvbF9vZmZzZXQpCi0gICAg
cmV0dXJuIG5vZGUKLQotCi1jbGFzcyBBc3NlcnRpb25SZXdyaXRlcihhc3QuTm9kZVZpc2l0b3Ip
OgotICAgICIiIkFzc2VydGlvbiByZXdyaXRpbmcgaW1wbGVtZW50YXRpb24uCi0KLSAgICBUaGUg
bWFpbiBlbnRyeXBvaW50IGlzIHRvIGNhbGwgLnJ1bigpIHdpdGggYW4gYXN0Lk1vZHVsZSBpbnN0
YW5jZSwKLSAgICB0aGlzIHdpbGwgdGhlbiBmaW5kIGFsbCB0aGUgYXNzZXJ0IHN0YXRlbWVudHMg
YW5kIHJlLXdyaXRlIHRoZW0gdG8KLSAgICBwcm92aWRlIGludGVybWVkaWF0ZSB2YWx1ZXMgYW5k
IGEgZGV0YWlsZWQgYXNzZXJ0aW9uIGVycm9yLiAgU2VlCi0gICAgaHR0cDovL3B5Yml0ZXMuYmxv
Z3Nwb3QuYmUvMjAxMS8wNy9iZWhpbmQtc2NlbmVzLW9mLXB5dGVzdHMtbmV3LWFzc2VydGlvbi5o
dG1sCi0gICAgZm9yIGFuIG92ZXJ2aWV3IG9mIGhvdyB0aGlzIHdvcmtzLgotCi0gICAgVGhlIGVu
dHJ5IHBvaW50IGhlcmUgaXMgLnJ1bigpIHdoaWNoIHdpbGwgaXRlcmF0ZSBvdmVyIGFsbCB0aGUK
LSAgICBzdGF0ZW1lbnRzIGluIGFuIGFzdC5Nb2R1bGUgYW5kIGZvciBlYWNoIGFzdC5Bc3NlcnQg
c3RhdGVtZW50IGl0Ci0gICAgZmluZHMgY2FsbCAudmlzaXQoKSB3aXRoIGl0LiAgVGhlbiAudmlz
aXRfQXNzZXJ0KCkgdGFrZXMgb3ZlciBhbmQKLSAgICBpcyByZXNwb25zaWJsZSBmb3IgY3JlYXRp
bmcgbmV3IGFzdCBzdGF0ZW1lbnRzIHRvIHJlcGxhY2UgdGhlCi0gICAgb3JpZ2luYWwgYXNzZXJ0
IHN0YXRlbWVudDogaXQgcmUtd3JpdGVzIHRoZSB0ZXN0IG9mIGFuIGFzc2VydGlvbgotICAgIHRv
IHByb3ZpZGUgaW50ZXJtZWRpYXRlIHZhbHVlcyBhbmQgcmVwbGFjZSBpdCB3aXRoIGFuIGlmIHN0
YXRlbWVudAotICAgIHdoaWNoIHJhaXNlcyBhbiBhc3NlcnRpb24gZXJyb3Igd2l0aCBhIGRldGFp
bGVkIGV4cGxhbmF0aW9uIGluCi0gICAgY2FzZSB0aGUgZXhwcmVzc2lvbiBpcyBmYWxzZS4KLQot
ICAgIEZvciB0aGlzIC52aXNpdF9Bc3NlcnQoKSB1c2VzIHRoZSB2aXNpdG9yIHBhdHRlcm4gdG8g
dmlzaXQgYWxsIHRoZQotICAgIEFTVCBub2RlcyBvZiB0aGUgYXN0LkFzc2VydC50ZXN0IGZpZWxk
LCBlYWNoIHZpc2l0IGNhbGwgcmV0dXJuaW5nCi0gICAgYW4gQVNUIG5vZGUgYW5kIHRoZSBjb3Jy
ZXNwb25kaW5nIGV4cGxhbmF0aW9uIHN0cmluZy4gIER1cmluZyB0aGlzCi0gICAgc3RhdGUgaXMg
a2VwdCBpbiBzZXZlcmFsIGluc3RhbmNlIGF0dHJpYnV0ZXM6Ci0KLSAgICA6c3RhdGVtZW50czog
QWxsIHRoZSBBU1Qgc3RhdGVtZW50cyB3aGljaCB3aWxsIHJlcGxhY2UgdGhlIGFzc2VydAotICAg
ICAgIHN0YXRlbWVudC4KLQotICAgIDp2YXJpYWJsZXM6IFRoaXMgaXMgcG9wdWxhdGVkIGJ5IC52
YXJpYWJsZSgpIHdpdGggZWFjaCB2YXJpYWJsZQotICAgICAgIHVzZWQgYnkgdGhlIHN0YXRlbWVu
dHMgc28gdGhhdCB0aGV5IGNhbiBhbGwgYmUgc2V0IHRvIE5vbmUgYXQKLSAgICAgICB0aGUgZW5k
IG9mIHRoZSBzdGF0ZW1lbnRzLgotCi0gICAgOnZhcmlhYmxlX2NvdW50ZXI6IENvdW50ZXIgdG8g
Y3JlYXRlIG5ldyB1bmlxdWUgdmFyaWFibGVzIG5lZWRlZAotICAgICAgIGJ5IHN0YXRlbWVudHMu
ICBWYXJpYWJsZXMgYXJlIGNyZWF0ZWQgdXNpbmcgLnZhcmlhYmxlKCkgYW5kCi0gICAgICAgaGF2
ZSB0aGUgZm9ybSBvZiAiQHB5X2Fzc2VydDAiLgotCi0gICAgOm9uX2ZhaWx1cmU6IFRoZSBBU1Qg
c3RhdGVtZW50cyB3aGljaCB3aWxsIGJlIGV4ZWN1dGVkIGlmIHRoZQotICAgICAgIGFzc2VydGlv
biB0ZXN0IGZhaWxzLiAgVGhpcyBpcyB0aGUgY29kZSB3aGljaCB3aWxsIGNvbnN0cnVjdAotICAg
ICAgIHRoZSBmYWlsdXJlIG1lc3NhZ2UgYW5kIHJhaXNlcyB0aGUgQXNzZXJ0aW9uRXJyb3IuCi0K
LSAgICA6ZXhwbGFuYXRpb25fc3BlY2lmaWVyczogQSBkaWN0IGZpbGxlZCBieSAuZXhwbGFuYXRp
b25fcGFyYW0oKQotICAgICAgIHdpdGggJS1mb3JtYXR0aW5nIHBsYWNlaG9sZGVycyBhbmQgdGhl
aXIgY29ycmVzcG9uZGluZwotICAgICAgIGV4cHJlc3Npb25zIHRvIHVzZSBpbiB0aGUgYnVpbGRp
bmcgb2YgYW4gYXNzZXJ0aW9uIG1lc3NhZ2UuCi0gICAgICAgVGhpcyBpcyB1c2VkIGJ5IC5wb3Bf
Zm9ybWF0X2NvbnRleHQoKSB0byBidWlsZCBhIG1lc3NhZ2UuCi0KLSAgICA6c3RhY2s6IEEgc3Rh
Y2sgb2YgdGhlIGV4cGxhbmF0aW9uX3NwZWNpZmllcnMgZGljdHMgbWFpbnRhaW5lZCBieQotICAg
ICAgIC5wdXNoX2Zvcm1hdF9jb250ZXh0KCkgYW5kIC5wb3BfZm9ybWF0X2NvbnRleHQoKSB3aGlj
aCBhbGxvd3MKLSAgICAgICB0byBidWlsZCBhbm90aGVyICUtZm9ybWF0dGVkIHN0cmluZyB3aGls
ZSBhbHJlYWR5IGJ1aWxkaW5nIG9uZS4KLQotICAgIFRoaXMgc3RhdGUgaXMgcmVzZXQgb24gZXZl
cnkgbmV3IGFzc2VydCBzdGF0ZW1lbnQgdmlzaXRlZCBhbmQgdXNlZAotICAgIGJ5IHRoZSBvdGhl
ciB2aXNpdG9ycy4KLQotICAgICIiIgotCi0gICAgZGVmIHJ1bihzZWxmLCBtb2QpOgotICAgICAg
ICAiIiJGaW5kIGFsbCBhc3NlcnQgc3RhdGVtZW50cyBpbiAqbW9kKiBhbmQgcmV3cml0ZSB0aGVt
LiIiIgotICAgICAgICBpZiBub3QgbW9kLmJvZHk6Ci0gICAgICAgICAgICAjIE5vdGhpbmcgdG8g
ZG8uCi0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgIyBJbnNlcnQgc29tZSBzcGVjaWFsIGlt
cG9ydHMgYXQgdGhlIHRvcCBvZiB0aGUgbW9kdWxlIGJ1dCBhZnRlciBhbnkKLSAgICAgICAgIyBk
b2NzdHJpbmdzIGFuZCBfX2Z1dHVyZV9fIGltcG9ydHMuCi0gICAgICAgIGFsaWFzZXMgPSBbYXN0
LmFsaWFzKHB5LmJ1aWx0aW4uYnVpbHRpbnMuX19uYW1lX18sICJAcHlfYnVpbHRpbnMiKSwKLSAg
ICAgICAgICAgICAgICAgICBhc3QuYWxpYXMoIl9weXRlc3QuYXNzZXJ0aW9uLnJld3JpdGUiLCAi
QHB5dGVzdF9hciIpXQotICAgICAgICBleHBlY3RfZG9jc3RyaW5nID0gVHJ1ZQotICAgICAgICBw
b3MgPSAwCi0gICAgICAgIGxpbmVubyA9IDAKLSAgICAgICAgZm9yIGl0ZW0gaW4gbW9kLmJvZHk6
Ci0gICAgICAgICAgICBpZiAoZXhwZWN0X2RvY3N0cmluZyBhbmQgaXNpbnN0YW5jZShpdGVtLCBh
c3QuRXhwcikgYW5kCi0gICAgICAgICAgICAgICAgICAgIGlzaW5zdGFuY2UoaXRlbS52YWx1ZSwg
YXN0LlN0cikpOgotICAgICAgICAgICAgICAgIGRvYyA9IGl0ZW0udmFsdWUucwotICAgICAgICAg
ICAgICAgIGlmICJQWVRFU1RfRE9OVF9SRVdSSVRFIiBpbiBkb2M6Ci0gICAgICAgICAgICAgICAg
ICAgICMgVGhlIG1vZHVsZSBoYXMgZGlzYWJsZWQgYXNzZXJ0aW9uIHJld3JpdGluZy4KLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICAgICAgbGluZW5vICs9IGxlbihkb2Mp
IC0gMQotICAgICAgICAgICAgICAgIGV4cGVjdF9kb2NzdHJpbmcgPSBGYWxzZQotICAgICAgICAg
ICAgZWxpZiAobm90IGlzaW5zdGFuY2UoaXRlbSwgYXN0LkltcG9ydEZyb20pIG9yIGl0ZW0ubGV2
ZWwgPiAwIG9yCi0gICAgICAgICAgICAgICAgICBpdGVtLm1vZHVsZSAhPSAiX19mdXR1cmVfXyIp
OgotICAgICAgICAgICAgICAgIGxpbmVubyA9IGl0ZW0ubGluZW5vCi0gICAgICAgICAgICAgICAg
YnJlYWsKLSAgICAgICAgICAgIHBvcyArPSAxCi0gICAgICAgIGltcG9ydHMgPSBbYXN0LkltcG9y
dChbYWxpYXNdLCBsaW5lbm89bGluZW5vLCBjb2xfb2Zmc2V0PTApCi0gICAgICAgICAgICAgICAg
ICAgZm9yIGFsaWFzIGluIGFsaWFzZXNdCi0gICAgICAgIG1vZC5ib2R5W3Bvczpwb3NdID0gaW1w
b3J0cwotICAgICAgICAjIENvbGxlY3QgYXNzZXJ0cy4KLSAgICAgICAgbm9kZXMgPSBbbW9kXQot
ICAgICAgICB3aGlsZSBub2RlczoKLSAgICAgICAgICAgIG5vZGUgPSBub2Rlcy5wb3AoKQotICAg
ICAgICAgICAgZm9yIG5hbWUsIGZpZWxkIGluIGFzdC5pdGVyX2ZpZWxkcyhub2RlKToKLSAgICAg
ICAgICAgICAgICBpZiBpc2luc3RhbmNlKGZpZWxkLCBsaXN0KToKLSAgICAgICAgICAgICAgICAg
ICAgbmV3ID0gW10KLSAgICAgICAgICAgICAgICAgICAgZm9yIGksIGNoaWxkIGluIGVudW1lcmF0
ZShmaWVsZCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGNoaWxkLCBh
c3QuQXNzZXJ0KToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFRyYW5zZm9ybSBhc3Nl
cnQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3LmV4dGVuZChzZWxmLnZpc2l0KGNo
aWxkKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbmV3LmFwcGVuZChjaGlsZCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiBpc2luc3RhbmNlKGNoaWxkLCBhc3QuQVNUKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbm9kZXMuYXBwZW5kKGNoaWxkKQotICAgICAgICAgICAgICAgICAgICBzZXRhdHRyKG5v
ZGUsIG5hbWUsIG5ldykKLSAgICAgICAgICAgICAgICBlbGlmIChpc2luc3RhbmNlKGZpZWxkLCBh
c3QuQVNUKSBhbmQKLSAgICAgICAgICAgICAgICAgICAgICAjIERvbid0IHJlY3Vyc2UgaW50byBl
eHByZXNzaW9ucyBhcyB0aGV5IGNhbid0IGNvbnRhaW4KLSAgICAgICAgICAgICAgICAgICAgICAj
IGFzc2VydHMuCi0gICAgICAgICAgICAgICAgICAgICAgbm90IGlzaW5zdGFuY2UoZmllbGQsIGFz
dC5leHByKSk6Ci0gICAgICAgICAgICAgICAgICAgIG5vZGVzLmFwcGVuZChmaWVsZCkKLQotICAg
IGRlZiB2YXJpYWJsZShzZWxmKToKLSAgICAgICAgIiIiR2V0IGEgbmV3IHZhcmlhYmxlLiIiIgot
ICAgICAgICAjIFVzZSBhIGNoYXJhY3RlciBpbnZhbGlkIGluIHB5dGhvbiBpZGVudGlmaWVycyB0
byBhdm9pZCBjbGFzaGluZy4KLSAgICAgICAgbmFtZSA9ICJAcHlfYXNzZXJ0IiArIHN0cihuZXh0
KHNlbGYudmFyaWFibGVfY291bnRlcikpCi0gICAgICAgIHNlbGYudmFyaWFibGVzLmFwcGVuZChu
YW1lKQotICAgICAgICByZXR1cm4gbmFtZQotCi0gICAgZGVmIGFzc2lnbihzZWxmLCBleHByKToK
LSAgICAgICAgIiIiR2l2ZSAqZXhwciogYSBuYW1lLiIiIgotICAgICAgICBuYW1lID0gc2VsZi52
YXJpYWJsZSgpCi0gICAgICAgIHNlbGYuc3RhdGVtZW50cy5hcHBlbmQoYXN0LkFzc2lnbihbYXN0
Lk5hbWUobmFtZSwgYXN0LlN0b3JlKCkpXSwgZXhwcikpCi0gICAgICAgIHJldHVybiBhc3QuTmFt
ZShuYW1lLCBhc3QuTG9hZCgpKQotCi0gICAgZGVmIGRpc3BsYXkoc2VsZiwgZXhwcik6Ci0gICAg
ICAgICIiIkNhbGwgcHkuaW8uc2FmZXJlcHIgb24gdGhlIGV4cHJlc3Npb24uIiIiCi0gICAgICAg
IHJldHVybiBzZWxmLmhlbHBlcigic2FmZXJlcHIiLCBleHByKQotCi0gICAgZGVmIGhlbHBlcihz
ZWxmLCBuYW1lLCAqYXJncyk6Ci0gICAgICAgICIiIkNhbGwgYSBoZWxwZXIgaW4gdGhpcyBtb2R1
bGUuIiIiCi0gICAgICAgIHB5X25hbWUgPSBhc3QuTmFtZSgiQHB5dGVzdF9hciIsIGFzdC5Mb2Fk
KCkpCi0gICAgICAgIGF0dHIgPSBhc3QuQXR0cmlidXRlKHB5X25hbWUsICJfIiArIG5hbWUsIGFz
dC5Mb2FkKCkpCi0gICAgICAgIHJldHVybiBhc3RfQ2FsbChhdHRyLCBsaXN0KGFyZ3MpLCBbXSkK
LQotICAgIGRlZiBidWlsdGluKHNlbGYsIG5hbWUpOgotICAgICAgICAiIiJSZXR1cm4gdGhlIGJ1
aWx0aW4gY2FsbGVkICpuYW1lKi4iIiIKLSAgICAgICAgYnVpbHRpbl9uYW1lID0gYXN0Lk5hbWUo
IkBweV9idWlsdGlucyIsIGFzdC5Mb2FkKCkpCi0gICAgICAgIHJldHVybiBhc3QuQXR0cmlidXRl
KGJ1aWx0aW5fbmFtZSwgbmFtZSwgYXN0LkxvYWQoKSkKLQotICAgIGRlZiBleHBsYW5hdGlvbl9w
YXJhbShzZWxmLCBleHByKToKLSAgICAgICAgIiIiUmV0dXJuIGEgbmV3IG5hbWVkICUtZm9ybWF0
dGluZyBwbGFjZWhvbGRlciBmb3IgZXhwci4KLQotICAgICAgICBUaGlzIGNyZWF0ZXMgYSAlLWZv
cm1hdHRpbmcgcGxhY2Vob2xkZXIgZm9yIGV4cHIgaW4gdGhlCi0gICAgICAgIGN1cnJlbnQgZm9y
bWF0dGluZyBjb250ZXh0LCBlLmcuIGBgJShweTApc2BgLiAgVGhlIHBsYWNlaG9sZGVyCi0gICAg
ICAgIGFuZCBleHByIGFyZSBwbGFjZWQgaW4gdGhlIGN1cnJlbnQgZm9ybWF0IGNvbnRleHQgc28g
dGhhdCBpdAotICAgICAgICBjYW4gYmUgdXNlZCBvbiB0aGUgbmV4dCBjYWxsIHRvIC5wb3BfZm9y
bWF0X2NvbnRleHQoKS4KLQotICAgICAgICAiIiIKLSAgICAgICAgc3BlY2lmaWVyID0gInB5IiAr
IHN0cihuZXh0KHNlbGYudmFyaWFibGVfY291bnRlcikpCi0gICAgICAgIHNlbGYuZXhwbGFuYXRp
b25fc3BlY2lmaWVyc1tzcGVjaWZpZXJdID0gZXhwcgotICAgICAgICByZXR1cm4gIiUoIiArIHNw
ZWNpZmllciArICIpcyIKLQotICAgIGRlZiBwdXNoX2Zvcm1hdF9jb250ZXh0KHNlbGYpOgotICAg
ICAgICAiIiJDcmVhdGUgYSBuZXcgZm9ybWF0dGluZyBjb250ZXh0LgotCi0gICAgICAgIFRoZSBm
b3JtYXQgY29udGV4dCBpcyB1c2VkIGZvciB3aGVuIGFuIGV4cGxhbmF0aW9uIHdhbnRzIHRvCi0g
ICAgICAgIGhhdmUgYSB2YXJpYWJsZSB2YWx1ZSBmb3JtYXR0ZWQgaW4gdGhlIGFzc2VydGlvbiBt
ZXNzYWdlLiAgSW4KLSAgICAgICAgdGhpcyBjYXNlIHRoZSB2YWx1ZSByZXF1aXJlZCBjYW4gYmUg
YWRkZWQgdXNpbmcKLSAgICAgICAgLmV4cGxhbmF0aW9uX3BhcmFtKCkuICBGaW5hbGx5IC5wb3Bf
Zm9ybWF0X2NvbnRleHQoKSBpcyB1c2VkCi0gICAgICAgIHRvIGZvcm1hdCBhIHN0cmluZyBvZiAl
LWZvcm1hdHRlZCB2YWx1ZXMgYXMgYWRkZWQgYnkKLSAgICAgICAgLmV4cGxhbmF0aW9uX3BhcmFt
KCkuCi0KLSAgICAgICAgIiIiCi0gICAgICAgIHNlbGYuZXhwbGFuYXRpb25fc3BlY2lmaWVycyA9
IHt9Ci0gICAgICAgIHNlbGYuc3RhY2suYXBwZW5kKHNlbGYuZXhwbGFuYXRpb25fc3BlY2lmaWVy
cykKLQotICAgIGRlZiBwb3BfZm9ybWF0X2NvbnRleHQoc2VsZiwgZXhwbF9leHByKToKLSAgICAg
ICAgIiIiRm9ybWF0IHRoZSAlLWZvcm1hdHRlZCBzdHJpbmcgd2l0aCBjdXJyZW50IGZvcm1hdCBj
b250ZXh0LgotCi0gICAgICAgIFRoZSBleHBsX2V4cHIgc2hvdWxkIGJlIGFuIGFzdC5TdHIgaW5z
dGFuY2UgY29uc3RydWN0ZWQgZnJvbQotICAgICAgICB0aGUgJS1wbGFjZWhvbGRlcnMgY3JlYXRl
ZCBieSAuZXhwbGFuYXRpb25fcGFyYW0oKS4gIFRoaXMgd2lsbAotICAgICAgICBhZGQgdGhlIHJl
cXVpcmVkIGNvZGUgdG8gZm9ybWF0IHNhaWQgc3RyaW5nIHRvIC5vbl9mYWlsdXJlIGFuZAotICAg
ICAgICByZXR1cm4gdGhlIGFzdC5OYW1lIGluc3RhbmNlIG9mIHRoZSBmb3JtYXR0ZWQgc3RyaW5n
LgotCi0gICAgICAgICIiIgotICAgICAgICBjdXJyZW50ID0gc2VsZi5zdGFjay5wb3AoKQotICAg
ICAgICBpZiBzZWxmLnN0YWNrOgotICAgICAgICAgICAgc2VsZi5leHBsYW5hdGlvbl9zcGVjaWZp
ZXJzID0gc2VsZi5zdGFja1stMV0KLSAgICAgICAga2V5cyA9IFthc3QuU3RyKGtleSkgZm9yIGtl
eSBpbiBjdXJyZW50LmtleXMoKV0KLSAgICAgICAgZm9ybWF0X2RpY3QgPSBhc3QuRGljdChrZXlz
LCBsaXN0KGN1cnJlbnQudmFsdWVzKCkpKQotICAgICAgICBmb3JtID0gYXN0LkJpbk9wKGV4cGxf
ZXhwciwgYXN0Lk1vZCgpLCBmb3JtYXRfZGljdCkKLSAgICAgICAgbmFtZSA9ICJAcHlfZm9ybWF0
IiArIHN0cihuZXh0KHNlbGYudmFyaWFibGVfY291bnRlcikpCi0gICAgICAgIHNlbGYub25fZmFp
bHVyZS5hcHBlbmQoYXN0LkFzc2lnbihbYXN0Lk5hbWUobmFtZSwgYXN0LlN0b3JlKCkpXSwgZm9y
bSkpCi0gICAgICAgIHJldHVybiBhc3QuTmFtZShuYW1lLCBhc3QuTG9hZCgpKQotCi0gICAgZGVm
IGdlbmVyaWNfdmlzaXQoc2VsZiwgbm9kZSk6Ci0gICAgICAgICIiIkhhbmRsZSBleHByZXNzaW9u
cyB3ZSBkb24ndCBoYXZlIGN1c3RvbSBjb2RlIGZvci4iIiIKLSAgICAgICAgYXNzZXJ0IGlzaW5z
dGFuY2Uobm9kZSwgYXN0LmV4cHIpCi0gICAgICAgIHJlcyA9IHNlbGYuYXNzaWduKG5vZGUpCi0g
ICAgICAgIHJldHVybiByZXMsIHNlbGYuZXhwbGFuYXRpb25fcGFyYW0oc2VsZi5kaXNwbGF5KHJl
cykpCi0KLSAgICBkZWYgdmlzaXRfQXNzZXJ0KHNlbGYsIGFzc2VydF8pOgotICAgICAgICAiIiJS
ZXR1cm4gdGhlIEFTVCBzdGF0ZW1lbnRzIHRvIHJlcGxhY2UgdGhlIGFzdC5Bc3NlcnQgaW5zdGFu
Y2UuCi0KLSAgICAgICAgVGhpcyByZS13cml0ZXMgdGhlIHRlc3Qgb2YgYW4gYXNzZXJ0aW9uIHRv
IHByb3ZpZGUKLSAgICAgICAgaW50ZXJtZWRpYXRlIHZhbHVlcyBhbmQgcmVwbGFjZSBpdCB3aXRo
IGFuIGlmIHN0YXRlbWVudCB3aGljaAotICAgICAgICByYWlzZXMgYW4gYXNzZXJ0aW9uIGVycm9y
IHdpdGggYSBkZXRhaWxlZCBleHBsYW5hdGlvbiBpbiBjYXNlCi0gICAgICAgIHRoZSBleHByZXNz
aW9uIGlzIGZhbHNlLgotCi0gICAgICAgICIiIgotICAgICAgICBzZWxmLnN0YXRlbWVudHMgPSBb
XQotICAgICAgICBzZWxmLnZhcmlhYmxlcyA9IFtdCi0gICAgICAgIHNlbGYudmFyaWFibGVfY291
bnRlciA9IGl0ZXJ0b29scy5jb3VudCgpCi0gICAgICAgIHNlbGYuc3RhY2sgPSBbXQotICAgICAg
ICBzZWxmLm9uX2ZhaWx1cmUgPSBbXQotICAgICAgICBzZWxmLnB1c2hfZm9ybWF0X2NvbnRleHQo
KQotICAgICAgICAjIFJld3JpdGUgYXNzZXJ0IGludG8gYSBidW5jaCBvZiBzdGF0ZW1lbnRzLgot
ICAgICAgICB0b3BfY29uZGl0aW9uLCBleHBsYW5hdGlvbiA9IHNlbGYudmlzaXQoYXNzZXJ0Xy50
ZXN0KQotICAgICAgICAjIENyZWF0ZSBmYWlsdXJlIG1lc3NhZ2UuCi0gICAgICAgIGJvZHkgPSBz
ZWxmLm9uX2ZhaWx1cmUKLSAgICAgICAgbmVnYXRpb24gPSBhc3QuVW5hcnlPcChhc3QuTm90KCks
IHRvcF9jb25kaXRpb24pCi0gICAgICAgIHNlbGYuc3RhdGVtZW50cy5hcHBlbmQoYXN0LklmKG5l
Z2F0aW9uLCBib2R5LCBbXSkpCi0gICAgICAgIGlmIGFzc2VydF8ubXNnOgotICAgICAgICAgICAg
YXNzZXJ0bXNnID0gc2VsZi5oZWxwZXIoJ2Zvcm1hdF9hc3NlcnRtc2cnLCBhc3NlcnRfLm1zZykK
LSAgICAgICAgICAgIGV4cGxhbmF0aW9uID0gIlxuPmFzc2VydCAiICsgZXhwbGFuYXRpb24KLSAg
ICAgICAgZWxzZToKLSAgICAgICAgICAgIGFzc2VydG1zZyA9IGFzdC5TdHIoIiIpCi0gICAgICAg
ICAgICBleHBsYW5hdGlvbiA9ICJhc3NlcnQgIiArIGV4cGxhbmF0aW9uCi0gICAgICAgIHRlbXBs
YXRlID0gYXN0LkJpbk9wKGFzc2VydG1zZywgYXN0LkFkZCgpLCBhc3QuU3RyKGV4cGxhbmF0aW9u
KSkKLSAgICAgICAgbXNnID0gc2VsZi5wb3BfZm9ybWF0X2NvbnRleHQodGVtcGxhdGUpCi0gICAg
ICAgIGZtdCA9IHNlbGYuaGVscGVyKCJmb3JtYXRfZXhwbGFuYXRpb24iLCBtc2cpCi0gICAgICAg
IGVycl9uYW1lID0gYXN0Lk5hbWUoIkFzc2VydGlvbkVycm9yIiwgYXN0LkxvYWQoKSkKLSAgICAg
ICAgZXhjID0gYXN0X0NhbGwoZXJyX25hbWUsIFtmbXRdLCBbXSkKLSAgICAgICAgaWYgc3lzLnZl
cnNpb25faW5mb1swXSA+PSAzOgotICAgICAgICAgICAgcmFpc2VfID0gYXN0LlJhaXNlKGV4Yywg
Tm9uZSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJhaXNlXyA9IGFzdC5SYWlzZShleGMs
IE5vbmUsIE5vbmUpCi0gICAgICAgIGJvZHkuYXBwZW5kKHJhaXNlXykKLSAgICAgICAgIyBDbGVh
ciB0ZW1wb3JhcnkgdmFyaWFibGVzIGJ5IHNldHRpbmcgdGhlbSB0byBOb25lLgotICAgICAgICBp
ZiBzZWxmLnZhcmlhYmxlczoKLSAgICAgICAgICAgIHZhcmlhYmxlcyA9IFthc3QuTmFtZShuYW1l
LCBhc3QuU3RvcmUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgbmFtZSBpbiBzZWxm
LnZhcmlhYmxlc10KLSAgICAgICAgICAgIGNsZWFyID0gYXN0LkFzc2lnbih2YXJpYWJsZXMsIF9O
YW1lQ29uc3RhbnQoTm9uZSkpCi0gICAgICAgICAgICBzZWxmLnN0YXRlbWVudHMuYXBwZW5kKGNs
ZWFyKQotICAgICAgICAjIEZpeCBsaW5lIG51bWJlcnMuCi0gICAgICAgIGZvciBzdG10IGluIHNl
bGYuc3RhdGVtZW50czoKLSAgICAgICAgICAgIHNldF9sb2NhdGlvbihzdG10LCBhc3NlcnRfLmxp
bmVubywgYXNzZXJ0Xy5jb2xfb2Zmc2V0KQotICAgICAgICByZXR1cm4gc2VsZi5zdGF0ZW1lbnRz
Ci0KLSAgICBkZWYgdmlzaXRfTmFtZShzZWxmLCBuYW1lKToKLSAgICAgICAgIyBEaXNwbGF5IHRo
ZSByZXByIG9mIHRoZSBuYW1lIGlmIGl0J3MgYSBsb2NhbCB2YXJpYWJsZSBvcgotICAgICAgICAj
IF9zaG91bGRfcmVwcl9nbG9iYWxfbmFtZSgpIHRoaW5rcyBpdCdzIGFjY2VwdGFibGUuCi0gICAg
ICAgIGxvY3MgPSBhc3RfQ2FsbChzZWxmLmJ1aWx0aW4oImxvY2FscyIpLCBbXSwgW10pCi0gICAg
ICAgIGlubG9jcyA9IGFzdC5Db21wYXJlKGFzdC5TdHIobmFtZS5pZCksIFthc3QuSW4oKV0sIFts
b2NzXSkKLSAgICAgICAgZG9yZXByID0gc2VsZi5oZWxwZXIoInNob3VsZF9yZXByX2dsb2JhbF9u
YW1lIiwgbmFtZSkKLSAgICAgICAgdGVzdCA9IGFzdC5Cb29sT3AoYXN0Lk9yKCksIFtpbmxvY3Ms
IGRvcmVwcl0pCi0gICAgICAgIGV4cHIgPSBhc3QuSWZFeHAodGVzdCwgc2VsZi5kaXNwbGF5KG5h
bWUpLCBhc3QuU3RyKG5hbWUuaWQpKQotICAgICAgICByZXR1cm4gbmFtZSwgc2VsZi5leHBsYW5h
dGlvbl9wYXJhbShleHByKQotCi0gICAgZGVmIHZpc2l0X0Jvb2xPcChzZWxmLCBib29sb3ApOgot
ICAgICAgICByZXNfdmFyID0gc2VsZi52YXJpYWJsZSgpCi0gICAgICAgIGV4cGxfbGlzdCA9IHNl
bGYuYXNzaWduKGFzdC5MaXN0KFtdLCBhc3QuTG9hZCgpKSkKLSAgICAgICAgYXBwID0gYXN0LkF0
dHJpYnV0ZShleHBsX2xpc3QsICJhcHBlbmQiLCBhc3QuTG9hZCgpKQotICAgICAgICBpc19vciA9
IGludChpc2luc3RhbmNlKGJvb2xvcC5vcCwgYXN0Lk9yKSkKLSAgICAgICAgYm9keSA9IHNhdmUg
PSBzZWxmLnN0YXRlbWVudHMKLSAgICAgICAgZmFpbF9zYXZlID0gc2VsZi5vbl9mYWlsdXJlCi0g
ICAgICAgIGxldmVscyA9IGxlbihib29sb3AudmFsdWVzKSAtIDEKLSAgICAgICAgc2VsZi5wdXNo
X2Zvcm1hdF9jb250ZXh0KCkKLSAgICAgICAgIyBQcm9jZXNzIGVhY2ggb3BlcmFuZCwgc2hvcnQt
Y2lyY3V0aW5nIGlmIG5lZWRlZC4KLSAgICAgICAgZm9yIGksIHYgaW4gZW51bWVyYXRlKGJvb2xv
cC52YWx1ZXMpOgotICAgICAgICAgICAgaWYgaToKLSAgICAgICAgICAgICAgICBmYWlsX2lubmVy
ID0gW10KLSAgICAgICAgICAgICAgICAjIGNvbmQgaXMgc2V0IGluIGEgcHJpb3IgbG9vcCBpdGVy
YXRpb24gYmVsb3cKLSAgICAgICAgICAgICAgICBzZWxmLm9uX2ZhaWx1cmUuYXBwZW5kKGFzdC5J
Zihjb25kLCBmYWlsX2lubmVyLCBbXSkpICMgbm9xYQotICAgICAgICAgICAgICAgIHNlbGYub25f
ZmFpbHVyZSA9IGZhaWxfaW5uZXIKLSAgICAgICAgICAgIHNlbGYucHVzaF9mb3JtYXRfY29udGV4
dCgpCi0gICAgICAgICAgICByZXMsIGV4cGwgPSBzZWxmLnZpc2l0KHYpCi0gICAgICAgICAgICBi
b2R5LmFwcGVuZChhc3QuQXNzaWduKFthc3QuTmFtZShyZXNfdmFyLCBhc3QuU3RvcmUoKSldLCBy
ZXMpKQotICAgICAgICAgICAgZXhwbF9mb3JtYXQgPSBzZWxmLnBvcF9mb3JtYXRfY29udGV4dChh
c3QuU3RyKGV4cGwpKQotICAgICAgICAgICAgY2FsbCA9IGFzdF9DYWxsKGFwcCwgW2V4cGxfZm9y
bWF0XSwgW10pCi0gICAgICAgICAgICBzZWxmLm9uX2ZhaWx1cmUuYXBwZW5kKGFzdC5FeHByKGNh
bGwpKQotICAgICAgICAgICAgaWYgaSA8IGxldmVsczoKLSAgICAgICAgICAgICAgICBjb25kID0g
cmVzCi0gICAgICAgICAgICAgICAgaWYgaXNfb3I6Ci0gICAgICAgICAgICAgICAgICAgIGNvbmQg
PSBhc3QuVW5hcnlPcChhc3QuTm90KCksIGNvbmQpCi0gICAgICAgICAgICAgICAgaW5uZXIgPSBb
XQotICAgICAgICAgICAgICAgIHNlbGYuc3RhdGVtZW50cy5hcHBlbmQoYXN0LklmKGNvbmQsIGlu
bmVyLCBbXSkpCi0gICAgICAgICAgICAgICAgc2VsZi5zdGF0ZW1lbnRzID0gYm9keSA9IGlubmVy
Ci0gICAgICAgIHNlbGYuc3RhdGVtZW50cyA9IHNhdmUKLSAgICAgICAgc2VsZi5vbl9mYWlsdXJl
ID0gZmFpbF9zYXZlCi0gICAgICAgIGV4cGxfdGVtcGxhdGUgPSBzZWxmLmhlbHBlcigiZm9ybWF0
X2Jvb2xvcCIsIGV4cGxfbGlzdCwgYXN0Lk51bShpc19vcikpCi0gICAgICAgIGV4cGwgPSBzZWxm
LnBvcF9mb3JtYXRfY29udGV4dChleHBsX3RlbXBsYXRlKQotICAgICAgICByZXR1cm4gYXN0Lk5h
bWUocmVzX3ZhciwgYXN0LkxvYWQoKSksIHNlbGYuZXhwbGFuYXRpb25fcGFyYW0oZXhwbCkKLQot
ICAgIGRlZiB2aXNpdF9VbmFyeU9wKHNlbGYsIHVuYXJ5KToKLSAgICAgICAgcGF0dGVybiA9IHVu
YXJ5X21hcFt1bmFyeS5vcC5fX2NsYXNzX19dCi0gICAgICAgIG9wZXJhbmRfcmVzLCBvcGVyYW5k
X2V4cGwgPSBzZWxmLnZpc2l0KHVuYXJ5Lm9wZXJhbmQpCi0gICAgICAgIHJlcyA9IHNlbGYuYXNz
aWduKGFzdC5VbmFyeU9wKHVuYXJ5Lm9wLCBvcGVyYW5kX3JlcykpCi0gICAgICAgIHJldHVybiBy
ZXMsIHBhdHRlcm4gJSAob3BlcmFuZF9leHBsLCkKLQotICAgIGRlZiB2aXNpdF9CaW5PcChzZWxm
LCBiaW5vcCk6Ci0gICAgICAgIHN5bWJvbCA9IGJpbm9wX21hcFtiaW5vcC5vcC5fX2NsYXNzX19d
Ci0gICAgICAgIGxlZnRfZXhwciwgbGVmdF9leHBsID0gc2VsZi52aXNpdChiaW5vcC5sZWZ0KQot
ICAgICAgICByaWdodF9leHByLCByaWdodF9leHBsID0gc2VsZi52aXNpdChiaW5vcC5yaWdodCkK
LSAgICAgICAgZXhwbGFuYXRpb24gPSAiKCVzICVzICVzKSIgJSAobGVmdF9leHBsLCBzeW1ib2ws
IHJpZ2h0X2V4cGwpCi0gICAgICAgIHJlcyA9IHNlbGYuYXNzaWduKGFzdC5CaW5PcChsZWZ0X2V4
cHIsIGJpbm9wLm9wLCByaWdodF9leHByKSkKLSAgICAgICAgcmV0dXJuIHJlcywgZXhwbGFuYXRp
b24KLQotICAgIGRlZiB2aXNpdF9DYWxsXzM1KHNlbGYsIGNhbGwpOgotICAgICAgICAiIiIKLSAg
ICAgICAgdmlzaXQgYGFzdC5DYWxsYCBub2RlcyBvbiBQeXRob24zLjUgYW5kIGFmdGVyCi0gICAg
ICAgICIiIgotICAgICAgICBuZXdfZnVuYywgZnVuY19leHBsID0gc2VsZi52aXNpdChjYWxsLmZ1
bmMpCi0gICAgICAgIGFyZ19leHBscyA9IFtdCi0gICAgICAgIG5ld19hcmdzID0gW10KLSAgICAg
ICAgbmV3X2t3YXJncyA9IFtdCi0gICAgICAgIGZvciBhcmcgaW4gY2FsbC5hcmdzOgotICAgICAg
ICAgICAgcmVzLCBleHBsID0gc2VsZi52aXNpdChhcmcpCi0gICAgICAgICAgICBhcmdfZXhwbHMu
YXBwZW5kKGV4cGwpCi0gICAgICAgICAgICBuZXdfYXJncy5hcHBlbmQocmVzKQotICAgICAgICBm
b3Iga2V5d29yZCBpbiBjYWxsLmtleXdvcmRzOgotICAgICAgICAgICAgcmVzLCBleHBsID0gc2Vs
Zi52aXNpdChrZXl3b3JkLnZhbHVlKQotICAgICAgICAgICAgbmV3X2t3YXJncy5hcHBlbmQoYXN0
LmtleXdvcmQoa2V5d29yZC5hcmcsIHJlcykpCi0gICAgICAgICAgICBpZiBrZXl3b3JkLmFyZzoK
LSAgICAgICAgICAgICAgICBhcmdfZXhwbHMuYXBwZW5kKGtleXdvcmQuYXJnICsgIj0iICsgZXhw
bCkKLSAgICAgICAgICAgIGVsc2U6ICMjICoqYXJncyBoYXZlIGBhcmdgIGtleXdvcmRzIHdpdGgg
YW4gLmFyZyBvZiBOb25lCi0gICAgICAgICAgICAgICAgYXJnX2V4cGxzLmFwcGVuZCgiKioiICsg
ZXhwbCkKLQotICAgICAgICBleHBsID0gIiVzKCVzKSIgJSAoZnVuY19leHBsLCAnLCAnLmpvaW4o
YXJnX2V4cGxzKSkKLSAgICAgICAgbmV3X2NhbGwgPSBhc3QuQ2FsbChuZXdfZnVuYywgbmV3X2Fy
Z3MsIG5ld19rd2FyZ3MpCi0gICAgICAgIHJlcyA9IHNlbGYuYXNzaWduKG5ld19jYWxsKQotICAg
ICAgICByZXNfZXhwbCA9IHNlbGYuZXhwbGFuYXRpb25fcGFyYW0oc2VsZi5kaXNwbGF5KHJlcykp
Ci0gICAgICAgIG91dGVyX2V4cGwgPSAiJXNcbnslcyA9ICVzXG59IiAlIChyZXNfZXhwbCwgcmVz
X2V4cGwsIGV4cGwpCi0gICAgICAgIHJldHVybiByZXMsIG91dGVyX2V4cGwKLQotICAgIGRlZiB2
aXNpdF9TdGFycmVkKHNlbGYsIHN0YXJyZWQpOgotICAgICAgICAjIEZyb20gUHl0aG9uIDMuNSwg
YSBTdGFycmVkIG5vZGUgY2FuIGFwcGVhciBpbiBhIGZ1bmN0aW9uIGNhbGwKLSAgICAgICAgcmVz
LCBleHBsID0gc2VsZi52aXNpdChzdGFycmVkLnZhbHVlKQotICAgICAgICByZXR1cm4gc3RhcnJl
ZCwgJyonICsgZXhwbAotCi0gICAgZGVmIHZpc2l0X0NhbGxfbGVnYWN5KHNlbGYsIGNhbGwpOgot
ICAgICAgICAiIiIKLSAgICAgICAgdmlzaXQgYGFzdC5DYWxsIG5vZGVzIG9uIDMuNCBhbmQgYmVs
b3dgCi0gICAgICAgICIiIgotICAgICAgICBuZXdfZnVuYywgZnVuY19leHBsID0gc2VsZi52aXNp
dChjYWxsLmZ1bmMpCi0gICAgICAgIGFyZ19leHBscyA9IFtdCi0gICAgICAgIG5ld19hcmdzID0g
W10KLSAgICAgICAgbmV3X2t3YXJncyA9IFtdCi0gICAgICAgIG5ld19zdGFyID0gbmV3X2t3YXJn
ID0gTm9uZQotICAgICAgICBmb3IgYXJnIGluIGNhbGwuYXJnczoKLSAgICAgICAgICAgIHJlcywg
ZXhwbCA9IHNlbGYudmlzaXQoYXJnKQotICAgICAgICAgICAgbmV3X2FyZ3MuYXBwZW5kKHJlcykK
LSAgICAgICAgICAgIGFyZ19leHBscy5hcHBlbmQoZXhwbCkKLSAgICAgICAgZm9yIGtleXdvcmQg
aW4gY2FsbC5rZXl3b3JkczoKLSAgICAgICAgICAgIHJlcywgZXhwbCA9IHNlbGYudmlzaXQoa2V5
d29yZC52YWx1ZSkKLSAgICAgICAgICAgIG5ld19rd2FyZ3MuYXBwZW5kKGFzdC5rZXl3b3JkKGtl
eXdvcmQuYXJnLCByZXMpKQotICAgICAgICAgICAgYXJnX2V4cGxzLmFwcGVuZChrZXl3b3JkLmFy
ZyArICI9IiArIGV4cGwpCi0gICAgICAgIGlmIGNhbGwuc3RhcmFyZ3M6Ci0gICAgICAgICAgICBu
ZXdfc3RhciwgZXhwbCA9IHNlbGYudmlzaXQoY2FsbC5zdGFyYXJncykKLSAgICAgICAgICAgIGFy
Z19leHBscy5hcHBlbmQoIioiICsgZXhwbCkKLSAgICAgICAgaWYgY2FsbC5rd2FyZ3M6Ci0gICAg
ICAgICAgICBuZXdfa3dhcmcsIGV4cGwgPSBzZWxmLnZpc2l0KGNhbGwua3dhcmdzKQotICAgICAg
ICAgICAgYXJnX2V4cGxzLmFwcGVuZCgiKioiICsgZXhwbCkKLSAgICAgICAgZXhwbCA9ICIlcygl
cykiICUgKGZ1bmNfZXhwbCwgJywgJy5qb2luKGFyZ19leHBscykpCi0gICAgICAgIG5ld19jYWxs
ID0gYXN0LkNhbGwobmV3X2Z1bmMsIG5ld19hcmdzLCBuZXdfa3dhcmdzLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5ld19zdGFyLCBuZXdfa3dhcmcpCi0gICAgICAgIHJlcyA9IHNlbGYu
YXNzaWduKG5ld19jYWxsKQotICAgICAgICByZXNfZXhwbCA9IHNlbGYuZXhwbGFuYXRpb25fcGFy
YW0oc2VsZi5kaXNwbGF5KHJlcykpCi0gICAgICAgIG91dGVyX2V4cGwgPSAiJXNcbnslcyA9ICVz
XG59IiAlIChyZXNfZXhwbCwgcmVzX2V4cGwsIGV4cGwpCi0gICAgICAgIHJldHVybiByZXMsIG91
dGVyX2V4cGwKLQotICAgICMgYXN0LkNhbGwgc2lnbmF0dXJlIGNoYW5nZWQgb24gMy41LAotICAg
ICMgY29uZGl0aW9uYWxseSBjaGFuZ2UgIHdoaWNoIG1ldGhvZHMgaXMgbmFtZWQKLSAgICAjIHZp
c2l0X0NhbGwgZGVwZW5kaW5nIG9uIFB5dGhvbiB2ZXJzaW9uCi0gICAgaWYgc3lzLnZlcnNpb25f
aW5mbyA+PSAoMywgNSk6Ci0gICAgICAgIHZpc2l0X0NhbGwgPSB2aXNpdF9DYWxsXzM1Ci0gICAg
ZWxzZToKLSAgICAgICAgdmlzaXRfQ2FsbCA9IHZpc2l0X0NhbGxfbGVnYWN5Ci0KLQotICAgIGRl
ZiB2aXNpdF9BdHRyaWJ1dGUoc2VsZiwgYXR0cik6Ci0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNl
KGF0dHIuY3R4LCBhc3QuTG9hZCk6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5nZW5lcmljX3Zp
c2l0KGF0dHIpCi0gICAgICAgIHZhbHVlLCB2YWx1ZV9leHBsID0gc2VsZi52aXNpdChhdHRyLnZh
bHVlKQotICAgICAgICByZXMgPSBzZWxmLmFzc2lnbihhc3QuQXR0cmlidXRlKHZhbHVlLCBhdHRy
LmF0dHIsIGFzdC5Mb2FkKCkpKQotICAgICAgICByZXNfZXhwbCA9IHNlbGYuZXhwbGFuYXRpb25f
cGFyYW0oc2VsZi5kaXNwbGF5KHJlcykpCi0gICAgICAgIHBhdCA9ICIlc1xueyVzID0gJXMuJXNc
bn0iCi0gICAgICAgIGV4cGwgPSBwYXQgJSAocmVzX2V4cGwsIHJlc19leHBsLCB2YWx1ZV9leHBs
LCBhdHRyLmF0dHIpCi0gICAgICAgIHJldHVybiByZXMsIGV4cGwKLQotICAgIGRlZiB2aXNpdF9D
b21wYXJlKHNlbGYsIGNvbXApOgotICAgICAgICBzZWxmLnB1c2hfZm9ybWF0X2NvbnRleHQoKQot
ICAgICAgICBsZWZ0X3JlcywgbGVmdF9leHBsID0gc2VsZi52aXNpdChjb21wLmxlZnQpCi0gICAg
ICAgIHJlc192YXJpYWJsZXMgPSBbc2VsZi52YXJpYWJsZSgpIGZvciBpIGluIHJhbmdlKGxlbihj
b21wLm9wcykpXQotICAgICAgICBsb2FkX25hbWVzID0gW2FzdC5OYW1lKHYsIGFzdC5Mb2FkKCkp
IGZvciB2IGluIHJlc192YXJpYWJsZXNdCi0gICAgICAgIHN0b3JlX25hbWVzID0gW2FzdC5OYW1l
KHYsIGFzdC5TdG9yZSgpKSBmb3IgdiBpbiByZXNfdmFyaWFibGVzXQotICAgICAgICBpdCA9IHpp
cChyYW5nZShsZW4oY29tcC5vcHMpKSwgY29tcC5vcHMsIGNvbXAuY29tcGFyYXRvcnMpCi0gICAg
ICAgIGV4cGxzID0gW10KLSAgICAgICAgc3ltcyA9IFtdCi0gICAgICAgIHJlc3VsdHMgPSBbbGVm
dF9yZXNdCi0gICAgICAgIGZvciBpLCBvcCwgbmV4dF9vcGVyYW5kIGluIGl0OgotICAgICAgICAg
ICAgbmV4dF9yZXMsIG5leHRfZXhwbCA9IHNlbGYudmlzaXQobmV4dF9vcGVyYW5kKQotICAgICAg
ICAgICAgcmVzdWx0cy5hcHBlbmQobmV4dF9yZXMpCi0gICAgICAgICAgICBzeW0gPSBiaW5vcF9t
YXBbb3AuX19jbGFzc19fXQotICAgICAgICAgICAgc3ltcy5hcHBlbmQoYXN0LlN0cihzeW0pKQot
ICAgICAgICAgICAgZXhwbCA9ICIlcyAlcyAlcyIgJSAobGVmdF9leHBsLCBzeW0sIG5leHRfZXhw
bCkKLSAgICAgICAgICAgIGV4cGxzLmFwcGVuZChhc3QuU3RyKGV4cGwpKQotICAgICAgICAgICAg
cmVzX2V4cHIgPSBhc3QuQ29tcGFyZShsZWZ0X3JlcywgW29wXSwgW25leHRfcmVzXSkKLSAgICAg
ICAgICAgIHNlbGYuc3RhdGVtZW50cy5hcHBlbmQoYXN0LkFzc2lnbihbc3RvcmVfbmFtZXNbaV1d
LCByZXNfZXhwcikpCi0gICAgICAgICAgICBsZWZ0X3JlcywgbGVmdF9leHBsID0gbmV4dF9yZXMs
IG5leHRfZXhwbAotICAgICAgICAjIFVzZSBweXRlc3QuYXNzZXJ0aW9uLnV0aWwuX3JlcHJjb21w
YXJlIGlmIHRoYXQncyBhdmFpbGFibGUuCi0gICAgICAgIGV4cGxfY2FsbCA9IHNlbGYuaGVscGVy
KCJjYWxsX3JlcHJjb21wYXJlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXN0
LlR1cGxlKHN5bXMsIGFzdC5Mb2FkKCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhc3QuVHVwbGUobG9hZF9uYW1lcywgYXN0LkxvYWQoKSksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGFzdC5UdXBsZShleHBscywgYXN0LkxvYWQoKSksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFzdC5UdXBsZShyZXN1bHRzLCBhc3QuTG9hZCgpKSkKLSAgICAg
ICAgaWYgbGVuKGNvbXAub3BzKSA+IDE6Ci0gICAgICAgICAgICByZXMgPSBhc3QuQm9vbE9wKGFz
dC5BbmQoKSwgbG9hZF9uYW1lcykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJlcyA9IGxv
YWRfbmFtZXNbMF0KLSAgICAgICAgcmV0dXJuIHJlcywgc2VsZi5leHBsYW5hdGlvbl9wYXJhbShz
ZWxmLnBvcF9mb3JtYXRfY29udGV4dChleHBsX2NhbGwpKQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVy
VGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L2Fzc2VydGlvbi91dGlsLnB5
IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L2Fzc2Vy
dGlvbi91dGlsLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMmYyM2VmZWEyNy4u
MDAwMDAwMDAwMDAKLS0tIGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVz
dC9fcHl0ZXN0L2Fzc2VydGlvbi91dGlsLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMzMyICswLDAg
QEAKLSIiIlV0aWxpdGllcyBmb3IgYXNzZXJ0aW9uIGRlYnVnZ2luZyIiIgotaW1wb3J0IHBwcmlu
dAotCi1pbXBvcnQgX3B5dGVzdC5fY29kZQotaW1wb3J0IHB5Ci10cnk6Ci0gICAgZnJvbSBjb2xs
ZWN0aW9ucyBpbXBvcnQgU2VxdWVuY2UKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBTZXF1ZW5j
ZSA9IGxpc3QKLQotQnVpbHRpbkFzc2VydGlvbkVycm9yID0gcHkuYnVpbHRpbi5idWlsdGlucy5B
c3NlcnRpb25FcnJvcgotdSA9IHB5LmJ1aWx0aW4uX3RvdGV4dAotCi0jIFRoZSBfcmVwcmNvbXBh
cmUgYXR0cmlidXRlIG9uIHRoZSB1dGlsIG1vZHVsZSBpcyB1c2VkIGJ5IHRoZSBuZXcgYXNzZXJ0
aW9uCi0jIGludGVycHJldGF0aW9uIGNvZGUgYW5kIGFzc2VydGlvbiByZXdyaXRlciB0byBkZXRl
Y3QgdGhpcyBwbHVnaW4gd2FzCi0jIGxvYWRlZCBhbmQgaW4gdHVybiBjYWxsIHRoZSBob29rcyBk
ZWZpbmVkIGhlcmUgYXMgcGFydCBvZiB0aGUKLSMgRGVidWdJbnRlcnByZXRlci4KLV9yZXByY29t
cGFyZSA9IE5vbmUKLQotCi0jIHRoZSByZS1lbmNvZGluZyBpcyBuZWVkZWQgZm9yIHB5dGhvbjIg
cmVwcgotIyB3aXRoIG5vbi1hc2NpaSBjaGFyYWN0ZXJzIChzZWUgaXNzdWUgODc3IGFuZCAxMzc5
KQotZGVmIGVjdShzKToKLSAgICB0cnk6Ci0gICAgICAgIHJldHVybiB1KHMsICd1dGYtOCcsICdy
ZXBsYWNlJykKLSAgICBleGNlcHQgVHlwZUVycm9yOgotICAgICAgICByZXR1cm4gcwotCi0KLWRl
ZiBmb3JtYXRfZXhwbGFuYXRpb24oZXhwbGFuYXRpb24pOgotICAgICIiIlRoaXMgZm9ybWF0cyBh
biBleHBsYW5hdGlvbgotCi0gICAgTm9ybWFsbHkgYWxsIGVtYmVkZGVkIG5ld2xpbmVzIGFyZSBl
c2NhcGVkLCBob3dldmVyIHRoZXJlIGFyZQotICAgIHRocmVlIGV4Y2VwdGlvbnM6IFxueywgXG59
IGFuZCBcbn4uICBUaGUgZmlyc3QgdHdvIGFyZSBpbnRlbmRlZAotICAgIGNvdmVyIG5lc3RlZCBl
eHBsYW5hdGlvbnMsIHNlZSBmdW5jdGlvbiBhbmQgYXR0cmlidXRlIGV4cGxhbmF0aW9ucwotICAg
IGZvciBleGFtcGxlcyAoLnZpc2l0X0NhbGwoKSwgdmlzaXRfQXR0cmlidXRlKCkpLiAgVGhlIGxh
c3Qgb25lIGlzCi0gICAgZm9yIHdoZW4gb25lIGV4cGxhbmF0aW9uIG5lZWRzIHRvIHNwYW4gbXVs
dGlwbGUgbGluZXMsIGUuZy4gd2hlbgotICAgIGRpc3BsYXlpbmcgZGlmZnMuCi0gICAgIiIiCi0g
ICAgZXhwbGFuYXRpb24gPSBlY3UoZXhwbGFuYXRpb24pCi0gICAgZXhwbGFuYXRpb24gPSBfY29s
bGFwc2VfZmFsc2UoZXhwbGFuYXRpb24pCi0gICAgbGluZXMgPSBfc3BsaXRfZXhwbGFuYXRpb24o
ZXhwbGFuYXRpb24pCi0gICAgcmVzdWx0ID0gX2Zvcm1hdF9saW5lcyhsaW5lcykKLSAgICByZXR1
cm4gdSgnXG4nKS5qb2luKHJlc3VsdCkKLQotCi1kZWYgX2NvbGxhcHNlX2ZhbHNlKGV4cGxhbmF0
aW9uKToKLSAgICAiIiJDb2xsYXBzZSBleHBhbnNpb25zIG9mIEZhbHNlCi0KLSAgICBTbyB0aGlz
IHN0cmlwcyBvdXQgYW55ICJhc3NlcnQgRmFsc2Vcbnt3aGVyZSBGYWxzZSA9IC4uLlxufSIKLSAg
ICBibG9ja3MuCi0gICAgIiIiCi0gICAgd2hlcmUgPSAwCi0gICAgd2hpbGUgVHJ1ZToKLSAgICAg
ICAgc3RhcnQgPSB3aGVyZSA9IGV4cGxhbmF0aW9uLmZpbmQoIkZhbHNlXG57RmFsc2UgPSAiLCB3
aGVyZSkKLSAgICAgICAgaWYgd2hlcmUgPT0gLTE6Ci0gICAgICAgICAgICBicmVhawotICAgICAg
ICBsZXZlbCA9IDAKLSAgICAgICAgcHJldl9jID0gZXhwbGFuYXRpb25bc3RhcnRdCi0gICAgICAg
IGZvciBpLCBjIGluIGVudW1lcmF0ZShleHBsYW5hdGlvbltzdGFydDpdKToKLSAgICAgICAgICAg
IGlmIHByZXZfYyArIGMgPT0gIlxueyI6Ci0gICAgICAgICAgICAgICAgbGV2ZWwgKz0gMQotICAg
ICAgICAgICAgZWxpZiBwcmV2X2MgKyBjID09ICJcbn0iOgotICAgICAgICAgICAgICAgIGxldmVs
IC09IDEKLSAgICAgICAgICAgICAgICBpZiBub3QgbGV2ZWw6Ci0gICAgICAgICAgICAgICAgICAg
IGJyZWFrCi0gICAgICAgICAgICBwcmV2X2MgPSBjCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAg
ICByYWlzZSBBc3NlcnRpb25FcnJvcigidW5iYWxhbmNlZCBicmFjZXM6ICVyIiAlIChleHBsYW5h
dGlvbiwpKQotICAgICAgICBlbmQgPSBzdGFydCArIGkKLSAgICAgICAgd2hlcmUgPSBlbmQKLSAg
ICAgICAgaWYgZXhwbGFuYXRpb25bZW5kIC0gMV0gPT0gJ1xuJzoKLSAgICAgICAgICAgIGV4cGxh
bmF0aW9uID0gKGV4cGxhbmF0aW9uWzpzdGFydF0gKyBleHBsYW5hdGlvbltzdGFydCsxNTplbmQt
MV0gKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwbGFuYXRpb25bZW5kKzE6XSkKLSAg
ICAgICAgICAgIHdoZXJlIC09IDE3Ci0gICAgcmV0dXJuIGV4cGxhbmF0aW9uCi0KLQotZGVmIF9z
cGxpdF9leHBsYW5hdGlvbihleHBsYW5hdGlvbik6Ci0gICAgIiIiUmV0dXJuIGEgbGlzdCBvZiBp
bmRpdmlkdWFsIGxpbmVzIGluIHRoZSBleHBsYW5hdGlvbgotCi0gICAgVGhpcyB3aWxsIHJldHVy
biBhIGxpc3Qgb2YgbGluZXMgc3BsaXQgb24gJ1xueycsICdcbn0nIGFuZCAnXG5+Jy4KLSAgICBB
bnkgb3RoZXIgbmV3bGluZXMgd2lsbCBiZSBlc2NhcGVkIGFuZCBhcHBlYXIgaW4gdGhlIGxpbmUg
YXMgdGhlCi0gICAgbGl0ZXJhbCAnXG4nIGNoYXJhY3RlcnMuCi0gICAgIiIiCi0gICAgcmF3X2xp
bmVzID0gKGV4cGxhbmF0aW9uIG9yIHUoJycpKS5zcGxpdCgnXG4nKQotICAgIGxpbmVzID0gW3Jh
d19saW5lc1swXV0KLSAgICBmb3IgbCBpbiByYXdfbGluZXNbMTpdOgotICAgICAgICBpZiBsIGFu
ZCBsWzBdIGluIFsneycsICd9JywgJ34nLCAnPiddOgotICAgICAgICAgICAgbGluZXMuYXBwZW5k
KGwpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBsaW5lc1stMV0gKz0gJ1xcbicgKyBsCi0g
ICAgcmV0dXJuIGxpbmVzCi0KLQotZGVmIF9mb3JtYXRfbGluZXMobGluZXMpOgotICAgICIiIkZv
cm1hdCB0aGUgaW5kaXZpZHVhbCBsaW5lcwotCi0gICAgVGhpcyB3aWxsIHJlcGxhY2UgdGhlICd7
JywgJ30nIGFuZCAnficgY2hhcmFjdGVycyBvZiBvdXIgbWluaQotICAgIGZvcm1hdHRpbmcgbGFu
Z3VhZ2Ugd2l0aCB0aGUgcHJvcGVyICd3aGVyZSAuLi4nLCAnYW5kIC4uLicgYW5kICcgKwotICAg
IC4uLicgdGV4dCwgdGFraW5nIGNhcmUgb2YgaW5kZW50YXRpb24gYWxvbmcgdGhlIHdheS4KLQot
ICAgIFJldHVybiBhIGxpc3Qgb2YgZm9ybWF0dGVkIGxpbmVzLgotICAgICIiIgotICAgIHJlc3Vs
dCA9IGxpbmVzWzoxXQotICAgIHN0YWNrID0gWzBdCi0gICAgc3RhY2tjbnQgPSBbMF0KLSAgICBm
b3IgbGluZSBpbiBsaW5lc1sxOl06Ci0gICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgneycpOgot
ICAgICAgICAgICAgaWYgc3RhY2tjbnRbLTFdOgotICAgICAgICAgICAgICAgIHMgPSB1KCdhbmQg
ICAnKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzID0gdSgnd2hlcmUgJykK
LSAgICAgICAgICAgIHN0YWNrLmFwcGVuZChsZW4ocmVzdWx0KSkKLSAgICAgICAgICAgIHN0YWNr
Y250Wy0xXSArPSAxCi0gICAgICAgICAgICBzdGFja2NudC5hcHBlbmQoMCkKLSAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQodSgnICsnKSArIHUoJyAgJykqKGxlbihzdGFjayktMSkgKyBzICsgbGlu
ZVsxOl0pCi0gICAgICAgIGVsaWYgbGluZS5zdGFydHN3aXRoKCd9Jyk6Ci0gICAgICAgICAgICBz
dGFjay5wb3AoKQotICAgICAgICAgICAgc3RhY2tjbnQucG9wKCkKLSAgICAgICAgICAgIHJlc3Vs
dFtzdGFja1stMV1dICs9IGxpbmVbMTpdCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBhc3Nl
cnQgbGluZVswXSBpbiBbJ34nLCAnPiddCi0gICAgICAgICAgICBzdGFja1stMV0gKz0gMQotICAg
ICAgICAgICAgaW5kZW50ID0gbGVuKHN0YWNrKSBpZiBsaW5lLnN0YXJ0c3dpdGgoJ34nKSBlbHNl
IGxlbihzdGFjaykgLSAxCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKHUoJyAgJykqaW5kZW50
ICsgbGluZVsxOl0pCi0gICAgYXNzZXJ0IGxlbihzdGFjaykgPT0gMQotICAgIHJldHVybiByZXN1
bHQKLQotCi0jIFByb3ZpZGUgYmFzZXN0cmluZyBpbiBweXRob24zCi10cnk6Ci0gICAgYmFzZXN0
cmluZyA9IGJhc2VzdHJpbmcKLWV4Y2VwdCBOYW1lRXJyb3I6Ci0gICAgYmFzZXN0cmluZyA9IHN0
cgotCi0KLWRlZiBhc3NlcnRyZXByX2NvbXBhcmUoY29uZmlnLCBvcCwgbGVmdCwgcmlnaHQpOgot
ICAgICIiIlJldHVybiBzcGVjaWFsaXNlZCBleHBsYW5hdGlvbnMgZm9yIHNvbWUgb3BlcmF0b3Jz
L29wZXJhbmRzIiIiCi0gICAgd2lkdGggPSA4MCAtIDE1IC0gbGVuKG9wKSAtIDIgICMgMTUgY2hh
cnMgaW5kZW50YXRpb24sIDEgc3BhY2UgYXJvdW5kIG9wCi0gICAgbGVmdF9yZXByID0gcHkuaW8u
c2FmZXJlcHIobGVmdCwgbWF4c2l6ZT1pbnQod2lkdGgvMikpCi0gICAgcmlnaHRfcmVwciA9IHB5
LmlvLnNhZmVyZXByKHJpZ2h0LCBtYXhzaXplPXdpZHRoLWxlbihsZWZ0X3JlcHIpKQotCi0gICAg
c3VtbWFyeSA9IHUoJyVzICVzICVzJykgJSAoZWN1KGxlZnRfcmVwciksIG9wLCBlY3UocmlnaHRf
cmVwcikpCi0KLSAgICBpc3NlcXVlbmNlID0gbGFtYmRhIHg6IChpc2luc3RhbmNlKHgsIChsaXN0
LCB0dXBsZSwgU2VxdWVuY2UpKSBhbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3Qg
aXNpbnN0YW5jZSh4LCBiYXNlc3RyaW5nKSkKLSAgICBpc3RleHQgPSBsYW1iZGEgeDogaXNpbnN0
YW5jZSh4LCBiYXNlc3RyaW5nKQotICAgIGlzZGljdCA9IGxhbWJkYSB4OiBpc2luc3RhbmNlKHgs
IGRpY3QpCi0gICAgaXNzZXQgPSBsYW1iZGEgeDogaXNpbnN0YW5jZSh4LCAoc2V0LCBmcm96ZW5z
ZXQpKQotCi0gICAgZGVmIGlzaXRlcmFibGUob2JqKToKLSAgICAgICAgdHJ5OgotICAgICAgICAg
ICAgaXRlcihvYmopCi0gICAgICAgICAgICByZXR1cm4gbm90IGlzdGV4dChvYmopCi0gICAgICAg
IGV4Y2VwdCBUeXBlRXJyb3I6Ci0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgIHZlcmJv
c2UgPSBjb25maWcuZ2V0b3B0aW9uKCd2ZXJib3NlJykKLSAgICBleHBsYW5hdGlvbiA9IE5vbmUK
LSAgICB0cnk6Ci0gICAgICAgIGlmIG9wID09ICc9PSc6Ci0gICAgICAgICAgICBpZiBpc3RleHQo
bGVmdCkgYW5kIGlzdGV4dChyaWdodCk6Ci0gICAgICAgICAgICAgICAgZXhwbGFuYXRpb24gPSBf
ZGlmZl90ZXh0KGxlZnQsIHJpZ2h0LCB2ZXJib3NlKQotICAgICAgICAgICAgZWxzZToKLSAgICAg
ICAgICAgICAgICBpZiBpc3NlcXVlbmNlKGxlZnQpIGFuZCBpc3NlcXVlbmNlKHJpZ2h0KToKLSAg
ICAgICAgICAgICAgICAgICAgZXhwbGFuYXRpb24gPSBfY29tcGFyZV9lcV9zZXF1ZW5jZShsZWZ0
LCByaWdodCwgdmVyYm9zZSkKLSAgICAgICAgICAgICAgICBlbGlmIGlzc2V0KGxlZnQpIGFuZCBp
c3NldChyaWdodCk6Ci0gICAgICAgICAgICAgICAgICAgIGV4cGxhbmF0aW9uID0gX2NvbXBhcmVf
ZXFfc2V0KGxlZnQsIHJpZ2h0LCB2ZXJib3NlKQotICAgICAgICAgICAgICAgIGVsaWYgaXNkaWN0
KGxlZnQpIGFuZCBpc2RpY3QocmlnaHQpOgotICAgICAgICAgICAgICAgICAgICBleHBsYW5hdGlv
biA9IF9jb21wYXJlX2VxX2RpY3QobGVmdCwgcmlnaHQsIHZlcmJvc2UpCi0gICAgICAgICAgICAg
ICAgaWYgaXNpdGVyYWJsZShsZWZ0KSBhbmQgaXNpdGVyYWJsZShyaWdodCk6Ci0gICAgICAgICAg
ICAgICAgICAgIGV4cGwgPSBfY29tcGFyZV9lcV9pdGVyYWJsZShsZWZ0LCByaWdodCwgdmVyYm9z
ZSkKLSAgICAgICAgICAgICAgICAgICAgaWYgZXhwbGFuYXRpb24gaXMgbm90IE5vbmU6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBleHBsYW5hdGlvbi5leHRlbmQoZXhwbCkKLSAgICAgICAgICAg
ICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4cGxhbmF0aW9uID0gZXhw
bAotICAgICAgICBlbGlmIG9wID09ICdub3QgaW4nOgotICAgICAgICAgICAgaWYgaXN0ZXh0KGxl
ZnQpIGFuZCBpc3RleHQocmlnaHQpOgotICAgICAgICAgICAgICAgIGV4cGxhbmF0aW9uID0gX25v
dGluX3RleHQobGVmdCwgcmlnaHQsIHZlcmJvc2UpCi0gICAgZXhjZXB0IEV4Y2VwdGlvbjoKLSAg
ICAgICAgZXhwbGFuYXRpb24gPSBbCi0gICAgICAgICAgICB1KCcocHl0ZXN0X2Fzc2VydGlvbiBw
bHVnaW46IHJlcHJlc2VudGF0aW9uIG9mIGRldGFpbHMgZmFpbGVkLiAgJwotICAgICAgICAgICAg
ICAnUHJvYmFibHkgYW4gb2JqZWN0IGhhcyBhIGZhdWx0eSBfX3JlcHJfXy4pJyksCi0gICAgICAg
ICAgICB1KF9weXRlc3QuX2NvZGUuRXhjZXB0aW9uSW5mbygpKV0KLQotICAgIGlmIG5vdCBleHBs
YW5hdGlvbjoKLSAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgIHJldHVybiBbc3VtbWFyeV0gKyBl
eHBsYW5hdGlvbgotCi0KLWRlZiBfZGlmZl90ZXh0KGxlZnQsIHJpZ2h0LCB2ZXJib3NlPUZhbHNl
KToKLSAgICAiIiJSZXR1cm4gdGhlIGV4cGxhbmF0aW9uIGZvciB0aGUgZGlmZiBiZXR3ZWVuIHRl
eHQgb3IgYnl0ZXMKLQotICAgIFVubGVzcyAtLXZlcmJvc2UgaXMgdXNlZCB0aGlzIHdpbGwgc2tp
cCBsZWFkaW5nIGFuZCB0cmFpbGluZwotICAgIGNoYXJhY3RlcnMgd2hpY2ggYXJlIGlkZW50aWNh
bCB0byBrZWVwIHRoZSBkaWZmIG1pbmltYWwuCi0KLSAgICBJZiB0aGUgaW5wdXQgYXJlIGJ5dGVz
IHRoZXkgd2lsbCBiZSBzYWZlbHkgY29udmVydGVkIHRvIHRleHQuCi0gICAgIiIiCi0gICAgZnJv
bSBkaWZmbGliIGltcG9ydCBuZGlmZgotICAgIGV4cGxhbmF0aW9uID0gW10KLSAgICBpZiBpc2lu
c3RhbmNlKGxlZnQsIHB5LmJ1aWx0aW4uYnl0ZXMpOgotICAgICAgICBsZWZ0ID0gdShyZXByKGxl
ZnQpWzE6LTFdKS5yZXBsYWNlKHInXG4nLCAnXG4nKQotICAgIGlmIGlzaW5zdGFuY2UocmlnaHQs
IHB5LmJ1aWx0aW4uYnl0ZXMpOgotICAgICAgICByaWdodCA9IHUocmVwcihyaWdodClbMTotMV0p
LnJlcGxhY2UocidcbicsICdcbicpCi0gICAgaWYgbm90IHZlcmJvc2U6Ci0gICAgICAgIGkgPSAw
ICAjIGp1c3QgaW4gY2FzZSBsZWZ0IG9yIHJpZ2h0IGhhcyB6ZXJvIGxlbmd0aAotICAgICAgICBm
b3IgaSBpbiByYW5nZShtaW4obGVuKGxlZnQpLCBsZW4ocmlnaHQpKSk6Ci0gICAgICAgICAgICBp
ZiBsZWZ0W2ldICE9IHJpZ2h0W2ldOgotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIGlm
IGkgPiA0MjoKLSAgICAgICAgICAgIGkgLT0gMTAgICAgICAgICAgICAgICAgICMgUHJvdmlkZSBz
b21lIGNvbnRleHQKLSAgICAgICAgICAgIGV4cGxhbmF0aW9uID0gW3UoJ1NraXBwaW5nICVzIGlk
ZW50aWNhbCBsZWFkaW5nICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NoYXJhY3Rl
cnMgaW4gZGlmZiwgdXNlIC12IHRvIHNob3cnKSAlIGldCi0gICAgICAgICAgICBsZWZ0ID0gbGVm
dFtpOl0KLSAgICAgICAgICAgIHJpZ2h0ID0gcmlnaHRbaTpdCi0gICAgICAgIGlmIGxlbihsZWZ0
KSA9PSBsZW4ocmlnaHQpOgotICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKGxlZnQpKToK
LSAgICAgICAgICAgICAgICBpZiBsZWZ0Wy1pXSAhPSByaWdodFstaV06Ci0gICAgICAgICAgICAg
ICAgICAgIGJyZWFrCi0gICAgICAgICAgICBpZiBpID4gNDI6Ci0gICAgICAgICAgICAgICAgaSAt
PSAxMCAgICAgIyBQcm92aWRlIHNvbWUgY29udGV4dAotICAgICAgICAgICAgICAgIGV4cGxhbmF0
aW9uICs9IFt1KCdTa2lwcGluZyAlcyBpZGVudGljYWwgdHJhaWxpbmcgJwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICdjaGFyYWN0ZXJzIGluIGRpZmYsIHVzZSAtdiB0byBzaG93
JykgJSBpXQotICAgICAgICAgICAgICAgIGxlZnQgPSBsZWZ0WzotaV0KLSAgICAgICAgICAgICAg
ICByaWdodCA9IHJpZ2h0WzotaV0KLSAgICBleHBsYW5hdGlvbiArPSBbbGluZS5zdHJpcCgnXG4n
KQotICAgICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBuZGlmZihsZWZ0LnNwbGl0bGluZXMo
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHQuc3BsaXRsaW5l
cygpKV0KLSAgICByZXR1cm4gZXhwbGFuYXRpb24KLQotCi1kZWYgX2NvbXBhcmVfZXFfaXRlcmFi
bGUobGVmdCwgcmlnaHQsIHZlcmJvc2U9RmFsc2UpOgotICAgIGlmIG5vdCB2ZXJib3NlOgotICAg
ICAgICByZXR1cm4gW3UoJ1VzZSAtdiB0byBnZXQgdGhlIGZ1bGwgZGlmZicpXQotICAgICMgZHlu
YW1pYyBpbXBvcnQgdG8gc3BlZWR1cCBweXRlc3QKLSAgICBpbXBvcnQgZGlmZmxpYgotCi0gICAg
dHJ5OgotICAgICAgICBsZWZ0X2Zvcm1hdHRpbmcgPSBwcHJpbnQucGZvcm1hdChsZWZ0KS5zcGxp
dGxpbmVzKCkKLSAgICAgICAgcmlnaHRfZm9ybWF0dGluZyA9IHBwcmludC5wZm9ybWF0KHJpZ2h0
KS5zcGxpdGxpbmVzKCkKLSAgICAgICAgZXhwbGFuYXRpb24gPSBbdSgnRnVsbCBkaWZmOicpXQot
ICAgIGV4Y2VwdCBFeGNlcHRpb246Ci0gICAgICAgICMgaGFjazogUHJldHR5UHJpbnRlci5wZm9y
bWF0KCkgaW4gcHl0aG9uIDIgZmFpbHMgd2hlbiBmb3JtYXR0aW5nIGl0ZW1zIHRoYXQgY2FuJ3Qg
YmUgc29ydGVkKCksIGllLCBjYWxsaW5nCi0gICAgICAgICMgc29ydGVkKCkgb24gYSBsaXN0IHdv
dWxkIHJhaXNlLiBTZWUgaXNzdWUgIzcxOC4KLSAgICAgICAgIyBBcyBhIHdvcmthcm91bmQsIHRo
ZSBmdWxsIGRpZmYgaXMgZ2VuZXJhdGVkIGJ5IHVzaW5nIHRoZSByZXByKCkgc3RyaW5nIG9mIGVh
Y2ggaXRlbSBvZiBlYWNoIGNvbnRhaW5lci4KLSAgICAgICAgbGVmdF9mb3JtYXR0aW5nID0gc29y
dGVkKHJlcHIoeCkgZm9yIHggaW4gbGVmdCkKLSAgICAgICAgcmlnaHRfZm9ybWF0dGluZyA9IHNv
cnRlZChyZXByKHgpIGZvciB4IGluIHJpZ2h0KQotICAgICAgICBleHBsYW5hdGlvbiA9IFt1KCdG
dWxsIGRpZmYgKGZhbGxiYWNrIHRvIGNhbGxpbmcgcmVwciBvbiBlYWNoIGl0ZW0pOicpXQotICAg
IGV4cGxhbmF0aW9uLmV4dGVuZChsaW5lLnN0cmlwKCkgZm9yIGxpbmUgaW4gZGlmZmxpYi5uZGlm
ZihsZWZ0X2Zvcm1hdHRpbmcsIHJpZ2h0X2Zvcm1hdHRpbmcpKQotICAgIHJldHVybiBleHBsYW5h
dGlvbgotCi0KLWRlZiBfY29tcGFyZV9lcV9zZXF1ZW5jZShsZWZ0LCByaWdodCwgdmVyYm9zZT1G
YWxzZSk6Ci0gICAgZXhwbGFuYXRpb24gPSBbXQotICAgIGZvciBpIGluIHJhbmdlKG1pbihsZW4o
bGVmdCksIGxlbihyaWdodCkpKToKLSAgICAgICAgaWYgbGVmdFtpXSAhPSByaWdodFtpXToKLSAg
ICAgICAgICAgIGV4cGxhbmF0aW9uICs9IFt1KCdBdCBpbmRleCAlcyBkaWZmOiAlciAhPSAlcicp
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoaSwgbGVmdFtpXSwgcmlnaHRbaV0pXQot
ICAgICAgICAgICAgYnJlYWsKLSAgICBpZiBsZW4obGVmdCkgPiBsZW4ocmlnaHQpOgotICAgICAg
ICBleHBsYW5hdGlvbiArPSBbdSgnTGVmdCBjb250YWlucyBtb3JlIGl0ZW1zLCBmaXJzdCBleHRy
YSBpdGVtOiAlcycpCi0gICAgICAgICAgICAgICAgICAgICAgICAlIHB5LmlvLnNhZmVyZXByKGxl
ZnRbbGVuKHJpZ2h0KV0sKV0KLSAgICBlbGlmIGxlbihsZWZ0KSA8IGxlbihyaWdodCk6Ci0gICAg
ICAgIGV4cGxhbmF0aW9uICs9IFsKLSAgICAgICAgICAgIHUoJ1JpZ2h0IGNvbnRhaW5zIG1vcmUg
aXRlbXMsIGZpcnN0IGV4dHJhIGl0ZW06ICVzJykgJQotICAgICAgICAgICAgcHkuaW8uc2FmZXJl
cHIocmlnaHRbbGVuKGxlZnQpXSwpXQotICAgIHJldHVybiBleHBsYW5hdGlvbgotCi0KLWRlZiBf
Y29tcGFyZV9lcV9zZXQobGVmdCwgcmlnaHQsIHZlcmJvc2U9RmFsc2UpOgotICAgIGV4cGxhbmF0
aW9uID0gW10KLSAgICBkaWZmX2xlZnQgPSBsZWZ0IC0gcmlnaHQKLSAgICBkaWZmX3JpZ2h0ID0g
cmlnaHQgLSBsZWZ0Ci0gICAgaWYgZGlmZl9sZWZ0OgotICAgICAgICBleHBsYW5hdGlvbi5hcHBl
bmQodSgnRXh0cmEgaXRlbXMgaW4gdGhlIGxlZnQgc2V0OicpKQotICAgICAgICBmb3IgaXRlbSBp
biBkaWZmX2xlZnQ6Ci0gICAgICAgICAgICBleHBsYW5hdGlvbi5hcHBlbmQocHkuaW8uc2FmZXJl
cHIoaXRlbSkpCi0gICAgaWYgZGlmZl9yaWdodDoKLSAgICAgICAgZXhwbGFuYXRpb24uYXBwZW5k
KHUoJ0V4dHJhIGl0ZW1zIGluIHRoZSByaWdodCBzZXQ6JykpCi0gICAgICAgIGZvciBpdGVtIGlu
IGRpZmZfcmlnaHQ6Ci0gICAgICAgICAgICBleHBsYW5hdGlvbi5hcHBlbmQocHkuaW8uc2FmZXJl
cHIoaXRlbSkpCi0gICAgcmV0dXJuIGV4cGxhbmF0aW9uCi0KLQotZGVmIF9jb21wYXJlX2VxX2Rp
Y3QobGVmdCwgcmlnaHQsIHZlcmJvc2U9RmFsc2UpOgotICAgIGV4cGxhbmF0aW9uID0gW10KLSAg
ICBjb21tb24gPSBzZXQobGVmdCkuaW50ZXJzZWN0aW9uKHNldChyaWdodCkpCi0gICAgc2FtZSA9
IGRpY3QoKGssIGxlZnRba10pIGZvciBrIGluIGNvbW1vbiBpZiBsZWZ0W2tdID09IHJpZ2h0W2td
KQotICAgIGlmIHNhbWUgYW5kIG5vdCB2ZXJib3NlOgotICAgICAgICBleHBsYW5hdGlvbiArPSBb
dSgnT21pdHRpbmcgJXMgaWRlbnRpY2FsIGl0ZW1zLCB1c2UgLXYgdG8gc2hvdycpICUKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGxlbihzYW1lKV0KLSAgICBlbGlmIHNhbWU6Ci0gICAgICAgIGV4
cGxhbmF0aW9uICs9IFt1KCdDb21tb24gaXRlbXM6JyldCi0gICAgICAgIGV4cGxhbmF0aW9uICs9
IHBwcmludC5wZm9ybWF0KHNhbWUpLnNwbGl0bGluZXMoKQotICAgIGRpZmYgPSBzZXQoayBmb3Ig
ayBpbiBjb21tb24gaWYgbGVmdFtrXSAhPSByaWdodFtrXSkKLSAgICBpZiBkaWZmOgotICAgICAg
ICBleHBsYW5hdGlvbiArPSBbdSgnRGlmZmVyaW5nIGl0ZW1zOicpXQotICAgICAgICBmb3IgayBp
biBkaWZmOgotICAgICAgICAgICAgZXhwbGFuYXRpb24gKz0gW3B5LmlvLnNhZmVyZXByKHtrOiBs
ZWZ0W2tdfSkgKyAnICE9ICcgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB5LmlvLnNh
ZmVyZXByKHtrOiByaWdodFtrXX0pXQotICAgIGV4dHJhX2xlZnQgPSBzZXQobGVmdCkgLSBzZXQo
cmlnaHQpCi0gICAgaWYgZXh0cmFfbGVmdDoKLSAgICAgICAgZXhwbGFuYXRpb24uYXBwZW5kKHUo
J0xlZnQgY29udGFpbnMgbW9yZSBpdGVtczonKSkKLSAgICAgICAgZXhwbGFuYXRpb24uZXh0ZW5k
KHBwcmludC5wZm9ybWF0KAotICAgICAgICAgICAgZGljdCgoaywgbGVmdFtrXSkgZm9yIGsgaW4g
ZXh0cmFfbGVmdCkpLnNwbGl0bGluZXMoKSkKLSAgICBleHRyYV9yaWdodCA9IHNldChyaWdodCkg
LSBzZXQobGVmdCkKLSAgICBpZiBleHRyYV9yaWdodDoKLSAgICAgICAgZXhwbGFuYXRpb24uYXBw
ZW5kKHUoJ1JpZ2h0IGNvbnRhaW5zIG1vcmUgaXRlbXM6JykpCi0gICAgICAgIGV4cGxhbmF0aW9u
LmV4dGVuZChwcHJpbnQucGZvcm1hdCgKLSAgICAgICAgICAgIGRpY3QoKGssIHJpZ2h0W2tdKSBm
b3IgayBpbiBleHRyYV9yaWdodCkpLnNwbGl0bGluZXMoKSkKLSAgICByZXR1cm4gZXhwbGFuYXRp
b24KLQotCi1kZWYgX25vdGluX3RleHQodGVybSwgdGV4dCwgdmVyYm9zZT1GYWxzZSk6Ci0gICAg
aW5kZXggPSB0ZXh0LmZpbmQodGVybSkKLSAgICBoZWFkID0gdGV4dFs6aW5kZXhdCi0gICAgdGFp
bCA9IHRleHRbaW5kZXgrbGVuKHRlcm0pOl0KLSAgICBjb3JyZWN0X3RleHQgPSBoZWFkICsgdGFp
bAotICAgIGRpZmYgPSBfZGlmZl90ZXh0KGNvcnJlY3RfdGV4dCwgdGV4dCwgdmVyYm9zZSkKLSAg
ICBuZXdkaWZmID0gW3UoJyVzIGlzIGNvbnRhaW5lZCBoZXJlOicpICUgcHkuaW8uc2FmZXJlcHIo
dGVybSwgbWF4c2l6ZT00MildCi0gICAgZm9yIGxpbmUgaW4gZGlmZjoKLSAgICAgICAgaWYgbGlu
ZS5zdGFydHN3aXRoKHUoJ1NraXBwaW5nJykpOgotICAgICAgICAgICAgY29udGludWUKLSAgICAg
ICAgaWYgbGluZS5zdGFydHN3aXRoKHUoJy0gJykpOgotICAgICAgICAgICAgY29udGludWUKLSAg
ICAgICAgaWYgbGluZS5zdGFydHN3aXRoKHUoJysgJykpOgotICAgICAgICAgICAgbmV3ZGlmZi5h
cHBlbmQodSgnICAnKSArIGxpbmVbMjpdKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbmV3
ZGlmZi5hcHBlbmQobGluZSkKLSAgICByZXR1cm4gbmV3ZGlmZgpkaWZmIC0tZ2l0IGEvV2ViRHJp
dmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L2NhY2hlcHJvdmlkZXIu
cHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvY2Fj
aGVwcm92aWRlci5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDY1NzAwMWYyZDQu
LjAwMDAwMDAwMDAwCi0tLSBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRl
c3QvX3B5dGVzdC9jYWNoZXByb3ZpZGVyLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjQ1ICswLDAg
QEAKLSIiIgotbWVyZ2VkIGltcGxlbWVudGF0aW9uIG9mIHRoZSBjYWNoZSBwcm92aWRlcgotCi10
aGUgbmFtZSBjYWNoZSB3YXMgbm90IGNob29zZW4gdG8gZW5zdXJlIHBsdWdneSBhdXRvbWF0aWNh
bGx5Ci1pZ25vcmVzIHRoZSBleHRlcm5hbCBweXRlc3QtY2FjaGUKLSIiIgotCi1pbXBvcnQgcHkK
LWltcG9ydCBweXRlc3QKLWltcG9ydCBqc29uCi1mcm9tIG9zLnBhdGggaW1wb3J0IHNlcCBhcyBf
c2VwLCBhbHRzZXAgYXMgX2FsdHNlcAotCi0KLWNsYXNzIENhY2hlKG9iamVjdCk6Ci0gICAgZGVm
IF9faW5pdF9fKHNlbGYsIGNvbmZpZyk6Ci0gICAgICAgIHNlbGYuY29uZmlnID0gY29uZmlnCi0g
ICAgICAgIHNlbGYuX2NhY2hlZGlyID0gY29uZmlnLnJvb3RkaXIuam9pbigiLmNhY2hlIikKLSAg
ICAgICAgc2VsZi50cmFjZSA9IGNvbmZpZy50cmFjZS5yb290LmdldCgiY2FjaGUiKQotICAgICAg
ICBpZiBjb25maWcuZ2V0dmFsdWUoImNhY2hlY2xlYXIiKToKLSAgICAgICAgICAgIHNlbGYudHJh
Y2UoImNsZWFyaW5nIGNhY2hlZGlyIikKLSAgICAgICAgICAgIGlmIHNlbGYuX2NhY2hlZGlyLmNo
ZWNrKCk6Ci0gICAgICAgICAgICAgICAgc2VsZi5fY2FjaGVkaXIucmVtb3ZlKCkKLSAgICAgICAg
ICAgIHNlbGYuX2NhY2hlZGlyLm1rZGlyKCkKLQotICAgIGRlZiBtYWtlZGlyKHNlbGYsIG5hbWUp
OgotICAgICAgICAiIiIgcmV0dXJuIGEgZGlyZWN0b3J5IHBhdGggb2JqZWN0IHdpdGggdGhlIGdp
dmVuIG5hbWUuICBJZiB0aGUKLSAgICAgICAgZGlyZWN0b3J5IGRvZXMgbm90IHlldCBleGlzdCwg
aXQgd2lsbCBiZSBjcmVhdGVkLiAgWW91IGNhbiB1c2UgaXQKLSAgICAgICAgdG8gbWFuYWdlIGZp
bGVzIGxpa2VzIGUuIGcuIHN0b3JlL3JldHJpZXZlIGRhdGFiYXNlCi0gICAgICAgIGR1bXBzIGFj
cm9zcyB0ZXN0IHNlc3Npb25zLgotCi0gICAgICAgIDpwYXJhbSBuYW1lOiBtdXN0IGJlIGEgc3Ry
aW5nIG5vdCBjb250YWluaW5nIGEgYGAvYGAgc2VwYXJhdG9yLgotICAgICAgICAgICAgIE1ha2Ug
c3VyZSB0aGUgbmFtZSBjb250YWlucyB5b3VyIHBsdWdpbiBvciBhcHBsaWNhdGlvbgotICAgICAg
ICAgICAgIGlkZW50aWZpZXJzIHRvIHByZXZlbnQgY2xhc2hlcyB3aXRoIG90aGVyIGNhY2hlIHVz
ZXJzLgotICAgICAgICAiIiIKLSAgICAgICAgaWYgX3NlcCBpbiBuYW1lIG9yIF9hbHRzZXAgaXMg
bm90IE5vbmUgYW5kIF9hbHRzZXAgaW4gbmFtZToKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJy
b3IoIm5hbWUgaXMgbm90IGFsbG93ZWQgdG8gY29udGFpbiBwYXRoIHNlcGFyYXRvcnMiKQotICAg
ICAgICByZXR1cm4gc2VsZi5fY2FjaGVkaXIuZW5zdXJlX2RpcigiZCIsIG5hbWUpCi0KLSAgICBk
ZWYgX2dldHZhbHVlcGF0aChzZWxmLCBrZXkpOgotICAgICAgICByZXR1cm4gc2VsZi5fY2FjaGVk
aXIuam9pbigndicsICprZXkuc3BsaXQoJy8nKSkKLQotICAgIGRlZiBnZXQoc2VsZiwga2V5LCBk
ZWZhdWx0KToKLSAgICAgICAgIiIiIHJldHVybiBjYWNoZWQgdmFsdWUgZm9yIHRoZSBnaXZlbiBr
ZXkuICBJZiBubyB2YWx1ZQotICAgICAgICB3YXMgeWV0IGNhY2hlZCBvciB0aGUgdmFsdWUgY2Fu
bm90IGJlIHJlYWQsIHRoZSBzcGVjaWZpZWQKLSAgICAgICAgZGVmYXVsdCBpcyByZXR1cm5lZC4K
LQotICAgICAgICA6cGFyYW0ga2V5OiBtdXN0IGJlIGEgYGAvYGAgc2VwYXJhdGVkIHZhbHVlLiBV
c3VhbGx5IHRoZSBmaXJzdAotICAgICAgICAgICAgIG5hbWUgaXMgdGhlIG5hbWUgb2YgeW91ciBw
bHVnaW4gb3IgeW91ciBhcHBsaWNhdGlvbi4KLSAgICAgICAgOnBhcmFtIGRlZmF1bHQ6IG11c3Qg
YmUgcHJvdmlkZWQgaW4gY2FzZSBvZiBhIGNhY2hlLW1pc3Mgb3IKLSAgICAgICAgICAgICBpbnZh
bGlkIGNhY2hlIHZhbHVlcy4KLQotICAgICAgICAiIiIKLSAgICAgICAgcGF0aCA9IHNlbGYuX2dl
dHZhbHVlcGF0aChrZXkpCi0gICAgICAgIGlmIHBhdGguY2hlY2soKToKLSAgICAgICAgICAgIHRy
eToKLSAgICAgICAgICAgICAgICB3aXRoIHBhdGgub3BlbigiciIpIGFzIGY6Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBqc29uLmxvYWQoZikKLSAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVy
cm9yOgotICAgICAgICAgICAgICAgIHNlbGYudHJhY2UoImNhY2hlLWludmFsaWQgYXQgJXMiICUg
KHBhdGgsKSkKLSAgICAgICAgcmV0dXJuIGRlZmF1bHQKLQotICAgIGRlZiBzZXQoc2VsZiwga2V5
LCB2YWx1ZSk6Ci0gICAgICAgICIiIiBzYXZlIHZhbHVlIGZvciB0aGUgZ2l2ZW4ga2V5LgotCi0g
ICAgICAgIDpwYXJhbSBrZXk6IG11c3QgYmUgYSBgYC9gYCBzZXBhcmF0ZWQgdmFsdWUuIFVzdWFs
bHkgdGhlIGZpcnN0Ci0gICAgICAgICAgICAgbmFtZSBpcyB0aGUgbmFtZSBvZiB5b3VyIHBsdWdp
biBvciB5b3VyIGFwcGxpY2F0aW9uLgotICAgICAgICA6cGFyYW0gdmFsdWU6IG11c3QgYmUgb2Yg
YW55IGNvbWJpbmF0aW9uIG9mIGJhc2ljCi0gICAgICAgICAgICAgICBweXRob24gdHlwZXMsIGlu
Y2x1ZGluZyBuZXN0ZWQgdHlwZXMKLSAgICAgICAgICAgICAgIGxpa2UgZS4gZy4gbGlzdHMgb2Yg
ZGljdGlvbmFyaWVzLgotICAgICAgICAiIiIKLSAgICAgICAgcGF0aCA9IHNlbGYuX2dldHZhbHVl
cGF0aChrZXkpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHBhdGguZGlycGF0aCgpLmVuc3Vy
ZV9kaXIoKQotICAgICAgICBleGNlcHQgKHB5LmVycm9yLkVFWElTVCwgcHkuZXJyb3IuRUFDQ0VT
KToKLSAgICAgICAgICAgIHNlbGYuY29uZmlnLndhcm4oCi0gICAgICAgICAgICAgICAgY29kZT0n
STknLCBtZXNzYWdlPSdjb3VsZCBub3QgY3JlYXRlIGNhY2hlIHBhdGggJXMnICUgKHBhdGgsKQot
ICAgICAgICAgICAgKQotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIHRyeToKLSAgICAgICAg
ICAgIGYgPSBwYXRoLm9wZW4oJ3cnKQotICAgICAgICBleGNlcHQgcHkuZXJyb3IuRU5PVERJUjoK
LSAgICAgICAgICAgIHNlbGYuY29uZmlnLndhcm4oCi0gICAgICAgICAgICAgICAgY29kZT0nSTkn
LCBtZXNzYWdlPSdjYWNoZSBjb3VsZCBub3Qgd3JpdGUgcGF0aCAlcycgJSAocGF0aCwpKQotICAg
ICAgICBlbHNlOgotICAgICAgICAgICAgd2l0aCBmOgotICAgICAgICAgICAgICAgIHNlbGYudHJh
Y2UoImNhY2hlLXdyaXRlICVzOiAlciIgJSAoa2V5LCB2YWx1ZSwpKQotICAgICAgICAgICAgICAg
IGpzb24uZHVtcCh2YWx1ZSwgZiwgaW5kZW50PTIsIHNvcnRfa2V5cz1UcnVlKQotCi0KLWNsYXNz
IExGUGx1Z2luOgotICAgICIiIiBQbHVnaW4gd2hpY2ggaW1wbGVtZW50cyB0aGUgLS1sZiAocnVu
IGxhc3QtZmFpbGluZykgb3B0aW9uICIiIgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25maWcp
OgotICAgICAgICBzZWxmLmNvbmZpZyA9IGNvbmZpZwotICAgICAgICBhY3RpdmVfa2V5cyA9ICds
ZicsICdmYWlsZWRmaXJzdCcKLSAgICAgICAgc2VsZi5hY3RpdmUgPSBhbnkoY29uZmlnLmdldHZh
bHVlKGtleSkgZm9yIGtleSBpbiBhY3RpdmVfa2V5cykKLSAgICAgICAgaWYgc2VsZi5hY3RpdmU6
Ci0gICAgICAgICAgICBzZWxmLmxhc3RmYWlsZWQgPSBjb25maWcuY2FjaGUuZ2V0KCJjYWNoZS9s
YXN0ZmFpbGVkIiwge30pCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmxhc3RmYWls
ZWQgPSB7fQotCi0gICAgZGVmIHB5dGVzdF9yZXBvcnRfaGVhZGVyKHNlbGYpOgotICAgICAgICBp
ZiBzZWxmLmFjdGl2ZToKLSAgICAgICAgICAgIGlmIG5vdCBzZWxmLmxhc3RmYWlsZWQ6Ci0gICAg
ICAgICAgICAgICAgbW9kZSA9ICJydW4gYWxsIChubyByZWNvcmRlZCBmYWlsdXJlcykiCi0gICAg
ICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIG1vZGUgPSAicmVydW4gbGFzdCAlZCBmYWls
dXJlcyVzIiAlICgKLSAgICAgICAgICAgICAgICAgICAgbGVuKHNlbGYubGFzdGZhaWxlZCksCi0g
ICAgICAgICAgICAgICAgICAgICIgZmlyc3QiIGlmIHNlbGYuY29uZmlnLmdldHZhbHVlKCJmYWls
ZWRmaXJzdCIpIGVsc2UgIiIpCi0gICAgICAgICAgICByZXR1cm4gInJ1bi1sYXN0LWZhaWx1cmU6
ICVzIiAlIG1vZGUKLQotICAgIGRlZiBweXRlc3RfcnVudGVzdF9sb2dyZXBvcnQoc2VsZiwgcmVw
b3J0KToKLSAgICAgICAgaWYgcmVwb3J0LmZhaWxlZCBhbmQgInhmYWlsIiBub3QgaW4gcmVwb3J0
LmtleXdvcmRzOgotICAgICAgICAgICAgc2VsZi5sYXN0ZmFpbGVkW3JlcG9ydC5ub2RlaWRdID0g
VHJ1ZQotICAgICAgICBlbGlmIG5vdCByZXBvcnQuZmFpbGVkOgotICAgICAgICAgICAgaWYgcmVw
b3J0LndoZW4gPT0gImNhbGwiOgotICAgICAgICAgICAgICAgIHNlbGYubGFzdGZhaWxlZC5wb3Ao
cmVwb3J0Lm5vZGVpZCwgTm9uZSkKLQotICAgIGRlZiBweXRlc3RfY29sbGVjdHJlcG9ydChzZWxm
LCByZXBvcnQpOgotICAgICAgICBwYXNzZWQgPSByZXBvcnQub3V0Y29tZSBpbiAoJ3Bhc3NlZCcs
ICdza2lwcGVkJykKLSAgICAgICAgaWYgcGFzc2VkOgotICAgICAgICAgICAgaWYgcmVwb3J0Lm5v
ZGVpZCBpbiBzZWxmLmxhc3RmYWlsZWQ6Ci0gICAgICAgICAgICAgICAgc2VsZi5sYXN0ZmFpbGVk
LnBvcChyZXBvcnQubm9kZWlkKQotICAgICAgICAgICAgICAgIHNlbGYubGFzdGZhaWxlZC51cGRh
dGUoCi0gICAgICAgICAgICAgICAgICAgIChpdGVtLm5vZGVpZCwgVHJ1ZSkKLSAgICAgICAgICAg
ICAgICAgICAgZm9yIGl0ZW0gaW4gcmVwb3J0LnJlc3VsdCkKLSAgICAgICAgZWxzZToKLSAgICAg
ICAgICAgIHNlbGYubGFzdGZhaWxlZFtyZXBvcnQubm9kZWlkXSA9IFRydWUKLQotICAgIGRlZiBw
eXRlc3RfY29sbGVjdGlvbl9tb2RpZnlpdGVtcyhzZWxmLCBzZXNzaW9uLCBjb25maWcsIGl0ZW1z
KToKLSAgICAgICAgaWYgc2VsZi5hY3RpdmUgYW5kIHNlbGYubGFzdGZhaWxlZDoKLSAgICAgICAg
ICAgIHByZXZpb3VzbHlfZmFpbGVkID0gW10KLSAgICAgICAgICAgIHByZXZpb3VzbHlfcGFzc2Vk
ID0gW10KLSAgICAgICAgICAgIGZvciBpdGVtIGluIGl0ZW1zOgotICAgICAgICAgICAgICAgIGlm
IGl0ZW0ubm9kZWlkIGluIHNlbGYubGFzdGZhaWxlZDoKLSAgICAgICAgICAgICAgICAgICAgcHJl
dmlvdXNseV9mYWlsZWQuYXBwZW5kKGl0ZW0pCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAg
ICAgICAgICAgICAgICAgcHJldmlvdXNseV9wYXNzZWQuYXBwZW5kKGl0ZW0pCi0gICAgICAgICAg
ICBpZiBub3QgcHJldmlvdXNseV9mYWlsZWQgYW5kIHByZXZpb3VzbHlfcGFzc2VkOgotICAgICAg
ICAgICAgICAgICMgcnVubmluZyBhIHN1YnNldCBvZiBhbGwgdGVzdHMgd2l0aCByZWNvcmRlZCBm
YWlsdXJlcyBvdXRzaWRlCi0gICAgICAgICAgICAgICAgIyBvZiB0aGUgc2V0IG9mIHRlc3RzIGN1
cnJlbnRseSBleGVjdXRpbmcKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBlbGlm
IHNlbGYuY29uZmlnLmdldHZhbHVlKCJmYWlsZWRmaXJzdCIpOgotICAgICAgICAgICAgICAgIGl0
ZW1zWzpdID0gcHJldmlvdXNseV9mYWlsZWQgKyBwcmV2aW91c2x5X3Bhc3NlZAotICAgICAgICAg
ICAgZWxzZToKLSAgICAgICAgICAgICAgICBpdGVtc1s6XSA9IHByZXZpb3VzbHlfZmFpbGVkCi0g
ICAgICAgICAgICAgICAgY29uZmlnLmhvb2sucHl0ZXN0X2Rlc2VsZWN0ZWQoaXRlbXM9cHJldmlv
dXNseV9wYXNzZWQpCi0KLSAgICBkZWYgcHl0ZXN0X3Nlc3Npb25maW5pc2goc2VsZiwgc2Vzc2lv
bik6Ci0gICAgICAgIGNvbmZpZyA9IHNlbGYuY29uZmlnCi0gICAgICAgIGlmIGNvbmZpZy5nZXR2
YWx1ZSgiY2FjaGVzaG93Iikgb3IgaGFzYXR0cihjb25maWcsICJzbGF2ZWlucHV0Iik6Ci0gICAg
ICAgICAgICByZXR1cm4KLSAgICAgICAgcHJldl9mYWlsZWQgPSBjb25maWcuY2FjaGUuZ2V0KCJj
YWNoZS9sYXN0ZmFpbGVkIiwgTm9uZSkgaXMgbm90IE5vbmUKLSAgICAgICAgaWYgKHNlc3Npb24u
dGVzdHNjb2xsZWN0ZWQgYW5kIHByZXZfZmFpbGVkKSBvciBzZWxmLmxhc3RmYWlsZWQ6Ci0gICAg
ICAgICAgICBjb25maWcuY2FjaGUuc2V0KCJjYWNoZS9sYXN0ZmFpbGVkIiwgc2VsZi5sYXN0ZmFp
bGVkKQotCi0KLWRlZiBweXRlc3RfYWRkb3B0aW9uKHBhcnNlcik6Ci0gICAgZ3JvdXAgPSBwYXJz
ZXIuZ2V0Z3JvdXAoImdlbmVyYWwiKQotICAgIGdyb3VwLmFkZG9wdGlvbigKLSAgICAgICAgJy0t
bGYnLCAnLS1sYXN0LWZhaWxlZCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlc3Q9ImxmIiwKLSAg
ICAgICAgaGVscD0icmVydW4gb25seSB0aGUgdGVzdHMgdGhhdCBmYWlsZWQgIgotICAgICAgICAg
ICAgICJhdCB0aGUgbGFzdCBydW4gKG9yIGFsbCBpZiBub25lIGZhaWxlZCkiKQotICAgIGdyb3Vw
LmFkZG9wdGlvbigKLSAgICAgICAgJy0tZmYnLCAnLS1mYWlsZWQtZmlyc3QnLCBhY3Rpb249J3N0
b3JlX3RydWUnLCBkZXN0PSJmYWlsZWRmaXJzdCIsCi0gICAgICAgIGhlbHA9InJ1biBhbGwgdGVz
dHMgYnV0IHJ1biB0aGUgbGFzdCBmYWlsdXJlcyBmaXJzdC4gICIKLSAgICAgICAgICAgICAiVGhp
cyBtYXkgcmUtb3JkZXIgdGVzdHMgYW5kIHRodXMgbGVhZCB0byAiCi0gICAgICAgICAgICAgInJl
cGVhdGVkIGZpeHR1cmUgc2V0dXAvdGVhcmRvd24iKQotICAgIGdyb3VwLmFkZG9wdGlvbigKLSAg
ICAgICAgJy0tY2FjaGUtc2hvdycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlc3Q9ImNhY2hlc2hv
dyIsCi0gICAgICAgIGhlbHA9InNob3cgY2FjaGUgY29udGVudHMsIGRvbid0IHBlcmZvcm0gY29s
bGVjdGlvbiBvciB0ZXN0cyIpCi0gICAgZ3JvdXAuYWRkb3B0aW9uKAotICAgICAgICAnLS1jYWNo
ZS1jbGVhcicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlc3Q9ImNhY2hlY2xlYXIiLAotICAgICAg
ICBoZWxwPSJyZW1vdmUgYWxsIGNhY2hlIGNvbnRlbnRzIGF0IHN0YXJ0IG9mIHRlc3QgcnVuLiIp
Ci0KLQotZGVmIHB5dGVzdF9jbWRsaW5lX21haW4oY29uZmlnKToKLSAgICBpZiBjb25maWcub3B0
aW9uLmNhY2hlc2hvdzoKLSAgICAgICAgZnJvbSBfcHl0ZXN0Lm1haW4gaW1wb3J0IHdyYXBfc2Vz
c2lvbgotICAgICAgICByZXR1cm4gd3JhcF9zZXNzaW9uKGNvbmZpZywgY2FjaGVzaG93KQotCi0K
LQotQHB5dGVzdC5ob29raW1wbCh0cnlmaXJzdD1UcnVlKQotZGVmIHB5dGVzdF9jb25maWd1cmUo
Y29uZmlnKToKLSAgICBjb25maWcuY2FjaGUgPSBDYWNoZShjb25maWcpCi0gICAgY29uZmlnLnBs
dWdpbm1hbmFnZXIucmVnaXN0ZXIoTEZQbHVnaW4oY29uZmlnKSwgImxmcGx1Z2luIikKLQotCi1A
cHl0ZXN0LmZpeHR1cmUKLWRlZiBjYWNoZShyZXF1ZXN0KToKLSAgICAiIiIKLSAgICBSZXR1cm4g
YSBjYWNoZSBvYmplY3QgdGhhdCBjYW4gcGVyc2lzdCBzdGF0ZSBiZXR3ZWVuIHRlc3Rpbmcgc2Vz
c2lvbnMuCi0KLSAgICBjYWNoZS5nZXQoa2V5LCBkZWZhdWx0KQotICAgIGNhY2hlLnNldChrZXks
IHZhbHVlKQotCi0gICAgS2V5cyBtdXN0IGJlIGEgYGAvYGAgc2VwYXJhdGVkIHZhbHVlLCB3aGVy
ZSB0aGUgZmlyc3QgcGFydCBpcyB1c3VhbGx5IHRoZQotICAgIG5hbWUgb2YgeW91ciBwbHVnaW4g
b3IgYXBwbGljYXRpb24gdG8gYXZvaWQgY2xhc2hlcyB3aXRoIG90aGVyIGNhY2hlIHVzZXJzLgot
Ci0gICAgVmFsdWVzIGNhbiBiZSBhbnkgb2JqZWN0IGhhbmRsZWQgYnkgdGhlIGpzb24gc3RkbGli
IG1vZHVsZS4KLSAgICAiIiIKLSAgICByZXR1cm4gcmVxdWVzdC5jb25maWcuY2FjaGUKLQotCi1k
ZWYgcHl0ZXN0X3JlcG9ydF9oZWFkZXIoY29uZmlnKToKLSAgICBpZiBjb25maWcub3B0aW9uLnZl
cmJvc2U6Ci0gICAgICAgIHJlbHBhdGggPSBweS5wYXRoLmxvY2FsKCkuYmVzdHJlbHBhdGgoY29u
ZmlnLmNhY2hlLl9jYWNoZWRpcikKLSAgICAgICAgcmV0dXJuICJjYWNoZWRpcjogJXMiICUgcmVs
cGF0aAotCi0KLWRlZiBjYWNoZXNob3coY29uZmlnLCBzZXNzaW9uKToKLSAgICBmcm9tIHBwcmlu
dCBpbXBvcnQgcHByaW50Ci0gICAgdHcgPSBweS5pby5UZXJtaW5hbFdyaXRlcigpCi0gICAgdHcu
bGluZSgiY2FjaGVkaXI6ICIgKyBzdHIoY29uZmlnLmNhY2hlLl9jYWNoZWRpcikpCi0gICAgaWYg
bm90IGNvbmZpZy5jYWNoZS5fY2FjaGVkaXIuY2hlY2soKToKLSAgICAgICAgdHcubGluZSgiY2Fj
aGUgaXMgZW1wdHkiKQotICAgICAgICByZXR1cm4gMAotICAgIGR1bW15ID0gb2JqZWN0KCkKLSAg
ICBiYXNlZGlyID0gY29uZmlnLmNhY2hlLl9jYWNoZWRpcgotICAgIHZkaXIgPSBiYXNlZGlyLmpv
aW4oInYiKQotICAgIHR3LnNlcCgiLSIsICJjYWNoZSB2YWx1ZXMiKQotICAgIGZvciB2YWxwYXRo
IGluIHZkaXIudmlzaXQobGFtYmRhIHg6IHguaXNmaWxlKCkpOgotICAgICAgICBrZXkgPSB2YWxw
YXRoLnJlbHRvKHZkaXIpLnJlcGxhY2UodmFscGF0aC5zZXAsICIvIikKLSAgICAgICAgdmFsID0g
Y29uZmlnLmNhY2hlLmdldChrZXksIGR1bW15KQotICAgICAgICBpZiB2YWwgaXMgZHVtbXk6Ci0g
ICAgICAgICAgICB0dy5saW5lKCIlcyBjb250YWlucyB1bnJlYWRhYmxlIGNvbnRlbnQsICIKLSAg
ICAgICAgICAgICAgICAgICJ3aWxsIGJlIGlnbm9yZWQiICUga2V5KQotICAgICAgICBlbHNlOgot
ICAgICAgICAgICAgdHcubGluZSgiJXMgY29udGFpbnM6IiAlIGtleSkKLSAgICAgICAgICAgIHN0
cmVhbSA9IHB5LmlvLlRleHRJTygpCi0gICAgICAgICAgICBwcHJpbnQodmFsLCBzdHJlYW09c3Ry
ZWFtKQotICAgICAgICAgICAgZm9yIGxpbmUgaW4gc3RyZWFtLmdldHZhbHVlKCkuc3BsaXRsaW5l
cygpOgotICAgICAgICAgICAgICAgIHR3LmxpbmUoIiAgIiArIGxpbmUpCi0KLSAgICBkZGlyID0g
YmFzZWRpci5qb2luKCJkIikKLSAgICBpZiBkZGlyLmlzZGlyKCkgYW5kIGRkaXIubGlzdGRpcigp
OgotICAgICAgICB0dy5zZXAoIi0iLCAiY2FjaGUgZGlyZWN0b3JpZXMiKQotICAgICAgICBmb3Ig
cCBpbiBiYXNlZGlyLmpvaW4oImQiKS52aXNpdCgpOgotICAgICAgICAgICAgI2lmIHAuY2hlY2so
ZGlyPTEpOgotICAgICAgICAgICAgIyAgICBwcmludCgiJXMvIiAlIHAucmVsdG8oYmFzZWRpcikp
Ci0gICAgICAgICAgICBpZiBwLmlzZmlsZSgpOgotICAgICAgICAgICAgICAgIGtleSA9IHAucmVs
dG8oYmFzZWRpcikKLSAgICAgICAgICAgICAgICB0dy5saW5lKCIlcyBpcyBhIGZpbGUgb2YgbGVu
Z3RoICVkIiAlICgKLSAgICAgICAgICAgICAgICAgICAgICAgIGtleSwgcC5zaXplKCkpKQotICAg
IHJldHVybiAwCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMv
cHl0ZXN0L19weXRlc3QvY2FwdHVyZS5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90
b29scy9weXRlc3QvX3B5dGVzdC9jYXB0dXJlLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAzODk1YTcxNGFhMC4uMDAwMDAwMDAwMDAKLS0tIGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0
ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L2NhcHR1cmUucHkKKysrIC9kZXYvbnVsbApAQCAt
MSw0NzIgKzAsMCBAQAotIiIiCi1wZXItdGVzdCBzdGRvdXQvc3RkZXJyIGNhcHR1cmluZyBtZWNo
YW5pc20uCi0KLSIiIgotZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB3aXRoX3N0YXRlbWVudAotCi1p
bXBvcnQgc3lzCi1pbXBvcnQgb3MKLWZyb20gdGVtcGZpbGUgaW1wb3J0IFRlbXBvcmFyeUZpbGUK
LQotaW1wb3J0IHB5Ci1pbXBvcnQgcHl0ZXN0Ci0KLWZyb20gcHkuaW8gaW1wb3J0IFRleHRJTwot
dW5pY29kZSA9IHB5LmJ1aWx0aW4udGV4dAotCi1wYXRjaHN5c2RpY3QgPSB7MDogJ3N0ZGluJywg
MTogJ3N0ZG91dCcsIDI6ICdzdGRlcnInfQotCi0KLWRlZiBweXRlc3RfYWRkb3B0aW9uKHBhcnNl
cik6Ci0gICAgZ3JvdXAgPSBwYXJzZXIuZ2V0Z3JvdXAoImdlbmVyYWwiKQotICAgIGdyb3VwLl9h
ZGRvcHRpb24oCi0gICAgICAgICctLWNhcHR1cmUnLCBhY3Rpb249InN0b3JlIiwKLSAgICAgICAg
ZGVmYXVsdD0iZmQiIGlmIGhhc2F0dHIob3MsICJkdXAiKSBlbHNlICJzeXMiLAotICAgICAgICBt
ZXRhdmFyPSJtZXRob2QiLCBjaG9pY2VzPVsnZmQnLCAnc3lzJywgJ25vJ10sCi0gICAgICAgIGhl
bHA9InBlci10ZXN0IGNhcHR1cmluZyBtZXRob2Q6IG9uZSBvZiBmZHxzeXN8bm8uIikKLSAgICBn
cm91cC5fYWRkb3B0aW9uKAotICAgICAgICAnLXMnLCBhY3Rpb249InN0b3JlX2NvbnN0IiwgY29u
c3Q9Im5vIiwgZGVzdD0iY2FwdHVyZSIsCi0gICAgICAgIGhlbHA9InNob3J0Y3V0IGZvciAtLWNh
cHR1cmU9bm8uIikKLQotCi1AcHl0ZXN0Lmhvb2tpbXBsKGhvb2t3cmFwcGVyPVRydWUpCi1kZWYg
cHl0ZXN0X2xvYWRfaW5pdGlhbF9jb25mdGVzdHMoZWFybHlfY29uZmlnLCBwYXJzZXIsIGFyZ3Mp
OgotICAgIF9yZWFkbGluZV93b3JrYXJvdW5kKCkKLSAgICBucyA9IGVhcmx5X2NvbmZpZy5rbm93
bl9hcmdzX25hbWVzcGFjZQotICAgIHBsdWdpbm1hbmFnZXIgPSBlYXJseV9jb25maWcucGx1Z2lu
bWFuYWdlcgotICAgIGNhcG1hbiA9IENhcHR1cmVNYW5hZ2VyKG5zLmNhcHR1cmUpCi0gICAgcGx1
Z2lubWFuYWdlci5yZWdpc3RlcihjYXBtYW4sICJjYXB0dXJlbWFuYWdlciIpCi0KLSAgICAjIG1h
a2Ugc3VyZSB0aGF0IGNhcHR1cmVtYW5hZ2VyIGlzIHByb3Blcmx5IHJlc2V0IGF0IGZpbmFsIHNo
dXRkb3duCi0gICAgZWFybHlfY29uZmlnLmFkZF9jbGVhbnVwKGNhcG1hbi5yZXNldF9jYXB0dXJp
bmdzKQotCi0gICAgIyBtYWtlIHN1cmUgbG9nZ2luZyBkb2VzIG5vdCByYWlzZSBleGNlcHRpb25z
IGF0IHRoZSBlbmQKLSAgICBkZWYgc2lsZW5jZV9sb2dnaW5nX2F0X3NodXRkb3duKCk6Ci0gICAg
ICAgIGlmICJsb2dnaW5nIiBpbiBzeXMubW9kdWxlczoKLSAgICAgICAgICAgIHN5cy5tb2R1bGVz
WyJsb2dnaW5nIl0ucmFpc2VFeGNlcHRpb25zID0gRmFsc2UKLSAgICBlYXJseV9jb25maWcuYWRk
X2NsZWFudXAoc2lsZW5jZV9sb2dnaW5nX2F0X3NodXRkb3duKQotCi0gICAgIyBmaW5hbGx5IHRy
aWdnZXIgY29uZnRlc3QgbG9hZGluZyBidXQgd2hpbGUgY2FwdHVyaW5nIChpc3N1ZTkzKQotICAg
IGNhcG1hbi5pbml0X2NhcHR1cmluZ3MoKQotICAgIG91dGNvbWUgPSB5aWVsZAotICAgIG91dCwg
ZXJyID0gY2FwbWFuLnN1c3BlbmRjYXB0dXJlKCkKLSAgICBpZiBvdXRjb21lLmV4Y2luZm8gaXMg
bm90IE5vbmU6Ci0gICAgICAgIHN5cy5zdGRvdXQud3JpdGUob3V0KQotICAgICAgICBzeXMuc3Rk
ZXJyLndyaXRlKGVycikKLQotCi1jbGFzcyBDYXB0dXJlTWFuYWdlcjoKLSAgICBkZWYgX19pbml0
X18oc2VsZiwgbWV0aG9kKToKLSAgICAgICAgc2VsZi5fbWV0aG9kID0gbWV0aG9kCi0KLSAgICBk
ZWYgX2dldGNhcHR1cmUoc2VsZiwgbWV0aG9kKToKLSAgICAgICAgaWYgbWV0aG9kID09ICJmZCI6
Ci0gICAgICAgICAgICByZXR1cm4gTXVsdGlDYXB0dXJlKG91dD1UcnVlLCBlcnI9VHJ1ZSwgQ2Fw
dHVyZT1GRENhcHR1cmUpCi0gICAgICAgIGVsaWYgbWV0aG9kID09ICJzeXMiOgotICAgICAgICAg
ICAgcmV0dXJuIE11bHRpQ2FwdHVyZShvdXQ9VHJ1ZSwgZXJyPVRydWUsIENhcHR1cmU9U3lzQ2Fw
dHVyZSkKLSAgICAgICAgZWxpZiBtZXRob2QgPT0gIm5vIjoKLSAgICAgICAgICAgIHJldHVybiBN
dWx0aUNhcHR1cmUob3V0PUZhbHNlLCBlcnI9RmFsc2UsIGluXz1GYWxzZSkKLSAgICAgICAgZWxz
ZToKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVua25vd24gY2FwdHVyaW5nIG1ldGhv
ZDogJXIiICUgbWV0aG9kKQotCi0gICAgZGVmIGluaXRfY2FwdHVyaW5ncyhzZWxmKToKLSAgICAg
ICAgYXNzZXJ0IG5vdCBoYXNhdHRyKHNlbGYsICJfY2FwdHVyaW5nIikKLSAgICAgICAgc2VsZi5f
Y2FwdHVyaW5nID0gc2VsZi5fZ2V0Y2FwdHVyZShzZWxmLl9tZXRob2QpCi0gICAgICAgIHNlbGYu
X2NhcHR1cmluZy5zdGFydF9jYXB0dXJpbmcoKQotCi0gICAgZGVmIHJlc2V0X2NhcHR1cmluZ3Mo
c2VsZik6Ci0gICAgICAgIGNhcCA9IHNlbGYuX19kaWN0X18ucG9wKCJfY2FwdHVyaW5nIiwgTm9u
ZSkKLSAgICAgICAgaWYgY2FwIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgY2FwLnBvcF9vdXRl
cnJfdG9fb3JpZygpCi0gICAgICAgICAgICBjYXAuc3RvcF9jYXB0dXJpbmcoKQotCi0gICAgZGVm
IHJlc3VtZWNhcHR1cmUoc2VsZik6Ci0gICAgICAgIHNlbGYuX2NhcHR1cmluZy5yZXN1bWVfY2Fw
dHVyaW5nKCkKLQotICAgIGRlZiBzdXNwZW5kY2FwdHVyZShzZWxmLCBpbl89RmFsc2UpOgotICAg
ICAgICBzZWxmLmRlYWN0aXZhdGVfZnVuY2FyZ3MoKQotICAgICAgICBjYXAgPSBnZXRhdHRyKHNl
bGYsICJfY2FwdHVyaW5nIiwgTm9uZSkKLSAgICAgICAgaWYgY2FwIGlzIG5vdCBOb25lOgotICAg
ICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIG91dGVyciA9IGNhcC5yZWFkb3V0ZXJyKCkK
LSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgY2FwLnN1c3BlbmRfY2FwdHVy
aW5nKGluXz1pbl8pCi0gICAgICAgICAgICByZXR1cm4gb3V0ZXJyCi0KLSAgICBkZWYgYWN0aXZh
dGVfZnVuY2FyZ3Moc2VsZiwgcHlmdW5jaXRlbSk6Ci0gICAgICAgIGNhcGZ1bmNhcmcgPSBweWZ1
bmNpdGVtLl9fZGljdF9fLnBvcCgiX2NhcGZ1bmNhcmciLCBOb25lKQotICAgICAgICBpZiBjYXBm
dW5jYXJnIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgY2FwZnVuY2FyZy5fc3RhcnQoKQotICAg
ICAgICAgICAgc2VsZi5fY2FwZnVuY2FyZyA9IGNhcGZ1bmNhcmcKLQotICAgIGRlZiBkZWFjdGl2
YXRlX2Z1bmNhcmdzKHNlbGYpOgotICAgICAgICBjYXBmdW5jYXJnID0gc2VsZi5fX2RpY3RfXy5w
b3AoIl9jYXBmdW5jYXJnIiwgTm9uZSkKLSAgICAgICAgaWYgY2FwZnVuY2FyZyBpcyBub3QgTm9u
ZToKLSAgICAgICAgICAgIGNhcGZ1bmNhcmcuY2xvc2UoKQotCi0gICAgQHB5dGVzdC5ob29raW1w
bChob29rd3JhcHBlcj1UcnVlKQotICAgIGRlZiBweXRlc3RfbWFrZV9jb2xsZWN0X3JlcG9ydChz
ZWxmLCBjb2xsZWN0b3IpOgotICAgICAgICBpZiBpc2luc3RhbmNlKGNvbGxlY3RvciwgcHl0ZXN0
LkZpbGUpOgotICAgICAgICAgICAgc2VsZi5yZXN1bWVjYXB0dXJlKCkKLSAgICAgICAgICAgIG91
dGNvbWUgPSB5aWVsZAotICAgICAgICAgICAgb3V0LCBlcnIgPSBzZWxmLnN1c3BlbmRjYXB0dXJl
KCkKLSAgICAgICAgICAgIHJlcCA9IG91dGNvbWUuZ2V0X3Jlc3VsdCgpCi0gICAgICAgICAgICBp
ZiBvdXQ6Ci0gICAgICAgICAgICAgICAgcmVwLnNlY3Rpb25zLmFwcGVuZCgoIkNhcHR1cmVkIHN0
ZG91dCIsIG91dCkpCi0gICAgICAgICAgICBpZiBlcnI6Ci0gICAgICAgICAgICAgICAgcmVwLnNl
Y3Rpb25zLmFwcGVuZCgoIkNhcHR1cmVkIHN0ZGVyciIsIGVycikpCi0gICAgICAgIGVsc2U6Ci0g
ICAgICAgICAgICB5aWVsZAotCi0gICAgQHB5dGVzdC5ob29raW1wbChob29rd3JhcHBlcj1UcnVl
KQotICAgIGRlZiBweXRlc3RfcnVudGVzdF9zZXR1cChzZWxmLCBpdGVtKToKLSAgICAgICAgc2Vs
Zi5yZXN1bWVjYXB0dXJlKCkKLSAgICAgICAgeWllbGQKLSAgICAgICAgc2VsZi5zdXNwZW5kY2Fw
dHVyZV9pdGVtKGl0ZW0sICJzZXR1cCIpCi0KLSAgICBAcHl0ZXN0Lmhvb2tpbXBsKGhvb2t3cmFw
cGVyPVRydWUpCi0gICAgZGVmIHB5dGVzdF9ydW50ZXN0X2NhbGwoc2VsZiwgaXRlbSk6Ci0gICAg
ICAgIHNlbGYucmVzdW1lY2FwdHVyZSgpCi0gICAgICAgIHNlbGYuYWN0aXZhdGVfZnVuY2FyZ3Mo
aXRlbSkKLSAgICAgICAgeWllbGQKLSAgICAgICAgI3NlbGYuZGVhY3RpdmF0ZV9mdW5jYXJncygp
IGNhbGxlZCBmcm9tIHN1c3BlbmRjYXB0dXJlKCkKLSAgICAgICAgc2VsZi5zdXNwZW5kY2FwdHVy
ZV9pdGVtKGl0ZW0sICJjYWxsIikKLQotICAgIEBweXRlc3QuaG9va2ltcGwoaG9va3dyYXBwZXI9
VHJ1ZSkKLSAgICBkZWYgcHl0ZXN0X3J1bnRlc3RfdGVhcmRvd24oc2VsZiwgaXRlbSk6Ci0gICAg
ICAgIHNlbGYucmVzdW1lY2FwdHVyZSgpCi0gICAgICAgIHlpZWxkCi0gICAgICAgIHNlbGYuc3Vz
cGVuZGNhcHR1cmVfaXRlbShpdGVtLCAidGVhcmRvd24iKQotCi0gICAgQHB5dGVzdC5ob29raW1w
bCh0cnlmaXJzdD1UcnVlKQotICAgIGRlZiBweXRlc3Rfa2V5Ym9hcmRfaW50ZXJydXB0KHNlbGYs
IGV4Y2luZm8pOgotICAgICAgICBzZWxmLnJlc2V0X2NhcHR1cmluZ3MoKQotCi0gICAgQHB5dGVz
dC5ob29raW1wbCh0cnlmaXJzdD1UcnVlKQotICAgIGRlZiBweXRlc3RfaW50ZXJuYWxlcnJvcihz
ZWxmLCBleGNpbmZvKToKLSAgICAgICAgc2VsZi5yZXNldF9jYXB0dXJpbmdzKCkKLQotICAgIGRl
ZiBzdXNwZW5kY2FwdHVyZV9pdGVtKHNlbGYsIGl0ZW0sIHdoZW4pOgotICAgICAgICBvdXQsIGVy
ciA9IHNlbGYuc3VzcGVuZGNhcHR1cmUoKQotICAgICAgICBpdGVtLmFkZF9yZXBvcnRfc2VjdGlv
bih3aGVuLCAic3Rkb3V0Iiwgb3V0KQotICAgICAgICBpdGVtLmFkZF9yZXBvcnRfc2VjdGlvbih3
aGVuLCAic3RkZXJyIiwgZXJyKQotCi1lcnJvcl9jYXBzeXNmZGVycm9yID0gImNhbm5vdCB1c2Ug
Y2Fwc3lzIGFuZCBjYXBmZCBhdCB0aGUgc2FtZSB0aW1lIgotCi0KLUBweXRlc3QuZml4dHVyZQot
ZGVmIGNhcHN5cyhyZXF1ZXN0KToKLSAgICAiIiJlbmFibGVzIGNhcHR1cmluZyBvZiB3cml0ZXMg
dG8gc3lzLnN0ZG91dC9zeXMuc3RkZXJyIGFuZCBtYWtlcwotICAgIGNhcHR1cmVkIG91dHB1dCBh
dmFpbGFibGUgdmlhIGBgY2Fwc3lzLnJlYWRvdXRlcnIoKWBgIG1ldGhvZCBjYWxscwotICAgIHdo
aWNoIHJldHVybiBhIGBgKG91dCwgZXJyKWBgIHR1cGxlLgotICAgICIiIgotICAgIGlmICJjYXBm
ZCIgaW4gcmVxdWVzdC5fZnVuY2FyZ3M6Ci0gICAgICAgIHJhaXNlIHJlcXVlc3QucmFpc2VlcnJv
cihlcnJvcl9jYXBzeXNmZGVycm9yKQotICAgIHJlcXVlc3Qubm9kZS5fY2FwZnVuY2FyZyA9IGMg
PSBDYXB0dXJlRml4dHVyZShTeXNDYXB0dXJlKQotICAgIHJldHVybiBjCi0KLUBweXRlc3QuZml4
dHVyZQotZGVmIGNhcGZkKHJlcXVlc3QpOgotICAgICIiImVuYWJsZXMgY2FwdHVyaW5nIG9mIHdy
aXRlcyB0byBmaWxlIGRlc2NyaXB0b3JzIDEgYW5kIDIgYW5kIG1ha2VzCi0gICAgY2FwdHVyZWQg
b3V0cHV0IGF2YWlsYWJsZSB2aWEgYGBjYXBmZC5yZWFkb3V0ZXJyKClgYCBtZXRob2QgY2FsbHMK
LSAgICB3aGljaCByZXR1cm4gYSBgYChvdXQsIGVycilgYCB0dXBsZS4KLSAgICAiIiIKLSAgICBp
ZiAiY2Fwc3lzIiBpbiByZXF1ZXN0Ll9mdW5jYXJnczoKLSAgICAgICAgcmVxdWVzdC5yYWlzZWVy
cm9yKGVycm9yX2NhcHN5c2ZkZXJyb3IpCi0gICAgaWYgbm90IGhhc2F0dHIob3MsICdkdXAnKToK
LSAgICAgICAgcHl0ZXN0LnNraXAoImNhcGZkIGZ1bmNhcmcgbmVlZHMgb3MuZHVwIikKLSAgICBy
ZXF1ZXN0Lm5vZGUuX2NhcGZ1bmNhcmcgPSBjID0gQ2FwdHVyZUZpeHR1cmUoRkRDYXB0dXJlKQot
ICAgIHJldHVybiBjCi0KLQotY2xhc3MgQ2FwdHVyZUZpeHR1cmU6Ci0gICAgZGVmIF9faW5pdF9f
KHNlbGYsIGNhcHR1cmVjbGFzcyk6Ci0gICAgICAgIHNlbGYuY2FwdHVyZWNsYXNzID0gY2FwdHVy
ZWNsYXNzCi0KLSAgICBkZWYgX3N0YXJ0KHNlbGYpOgotICAgICAgICBzZWxmLl9jYXB0dXJlID0g
TXVsdGlDYXB0dXJlKG91dD1UcnVlLCBlcnI9VHJ1ZSwgaW5fPUZhbHNlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FwdHVyZT1zZWxmLmNhcHR1cmVjbGFzcykKLSAg
ICAgICAgc2VsZi5fY2FwdHVyZS5zdGFydF9jYXB0dXJpbmcoKQotCi0gICAgZGVmIGNsb3NlKHNl
bGYpOgotICAgICAgICBjYXAgPSBzZWxmLl9fZGljdF9fLnBvcCgiX2NhcHR1cmUiLCBOb25lKQot
ICAgICAgICBpZiBjYXAgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBzZWxmLl9vdXRlcnIgPSBj
YXAucG9wX291dGVycl90b19vcmlnKCkKLSAgICAgICAgICAgIGNhcC5zdG9wX2NhcHR1cmluZygp
Ci0KLSAgICBkZWYgcmVhZG91dGVycihzZWxmKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAg
cmV0dXJuIHNlbGYuX2NhcHR1cmUucmVhZG91dGVycigpCi0gICAgICAgIGV4Y2VwdCBBdHRyaWJ1
dGVFcnJvcjoKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9vdXRlcnIKLQotCi1kZWYgc2FmZV90
ZXh0X2R1cGZpbGUoZiwgbW9kZSwgZGVmYXVsdF9lbmNvZGluZz0iVVRGOCIpOgotICAgICIiIiBy
ZXR1cm4gYSBvcGVuIHRleHQgZmlsZSBvYmplY3QgdGhhdCdzIGEgZHVwbGljYXRlIG9mIGYgb24g
dGhlCi0gICAgICAgIEZELWxldmVsIGlmIHBvc3NpYmxlLgotICAgICIiIgotICAgIGVuY29kaW5n
ID0gZ2V0YXR0cihmLCAiZW5jb2RpbmciLCBOb25lKQotICAgIHRyeToKLSAgICAgICAgZmQgPSBm
LmZpbGVubygpCi0gICAgZXhjZXB0IEV4Y2VwdGlvbjoKLSAgICAgICAgaWYgImIiIG5vdCBpbiBn
ZXRhdHRyKGYsICJtb2RlIiwgIiIpIGFuZCBoYXNhdHRyKGYsICJlbmNvZGluZyIpOgotICAgICAg
ICAgICAgIyB3ZSBzZWVtIHRvIGhhdmUgYSB0ZXh0IHN0cmVhbSwgbGV0J3MganVzdCB1c2UgaXQK
LSAgICAgICAgICAgIHJldHVybiBmCi0gICAgZWxzZToKLSAgICAgICAgbmV3ZmQgPSBvcy5kdXAo
ZmQpCi0gICAgICAgIGlmICJiIiBub3QgaW4gbW9kZToKLSAgICAgICAgICAgIG1vZGUgKz0gImIi
Ci0gICAgICAgIGYgPSBvcy5mZG9wZW4obmV3ZmQsIG1vZGUsIDApICAjIG5vIGJ1ZmZlcmluZwot
ICAgIHJldHVybiBFbmNvZGVkRmlsZShmLCBlbmNvZGluZyBvciBkZWZhdWx0X2VuY29kaW5nKQot
Ci0KLWNsYXNzIEVuY29kZWRGaWxlKG9iamVjdCk6Ci0gICAgZXJyb3JzID0gInN0cmljdCIgICMg
cG9zc2libHkgbmVlZGVkIGJ5IHB5MyBjb2RlIChpc3N1ZTU1NSkKLSAgICBkZWYgX19pbml0X18o
c2VsZiwgYnVmZmVyLCBlbmNvZGluZyk6Ci0gICAgICAgIHNlbGYuYnVmZmVyID0gYnVmZmVyCi0g
ICAgICAgIHNlbGYuZW5jb2RpbmcgPSBlbmNvZGluZwotCi0gICAgZGVmIHdyaXRlKHNlbGYsIG9i
aik6Ci0gICAgICAgIGlmIGlzaW5zdGFuY2Uob2JqLCB1bmljb2RlKToKLSAgICAgICAgICAgIG9i
aiA9IG9iai5lbmNvZGUoc2VsZi5lbmNvZGluZywgInJlcGxhY2UiKQotICAgICAgICBzZWxmLmJ1
ZmZlci53cml0ZShvYmopCi0KLSAgICBkZWYgd3JpdGVsaW5lcyhzZWxmLCBsaW5lbGlzdCk6Ci0g
ICAgICAgIGRhdGEgPSAnJy5qb2luKGxpbmVsaXN0KQotICAgICAgICBzZWxmLndyaXRlKGRhdGEp
Ci0KLSAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgbmFtZSk6Ci0gICAgICAgIHJldHVybiBnZXRh
dHRyKG9iamVjdC5fX2dldGF0dHJpYnV0ZV9fKHNlbGYsICJidWZmZXIiKSwgbmFtZSkKLQotCi1j
bGFzcyBNdWx0aUNhcHR1cmUob2JqZWN0KToKLSAgICBvdXQgPSBlcnIgPSBpbl8gPSBOb25lCi0K
LSAgICBkZWYgX19pbml0X18oc2VsZiwgb3V0PVRydWUsIGVycj1UcnVlLCBpbl89VHJ1ZSwgQ2Fw
dHVyZT1Ob25lKToKLSAgICAgICAgaWYgaW5fOgotICAgICAgICAgICAgc2VsZi5pbl8gPSBDYXB0
dXJlKDApCi0gICAgICAgIGlmIG91dDoKLSAgICAgICAgICAgIHNlbGYub3V0ID0gQ2FwdHVyZSgx
KQotICAgICAgICBpZiBlcnI6Ci0gICAgICAgICAgICBzZWxmLmVyciA9IENhcHR1cmUoMikKLQot
ICAgIGRlZiBzdGFydF9jYXB0dXJpbmcoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuaW5fOgotICAg
ICAgICAgICAgc2VsZi5pbl8uc3RhcnQoKQotICAgICAgICBpZiBzZWxmLm91dDoKLSAgICAgICAg
ICAgIHNlbGYub3V0LnN0YXJ0KCkKLSAgICAgICAgaWYgc2VsZi5lcnI6Ci0gICAgICAgICAgICBz
ZWxmLmVyci5zdGFydCgpCi0KLSAgICBkZWYgcG9wX291dGVycl90b19vcmlnKHNlbGYpOgotICAg
ICAgICAiIiIgcG9wIGN1cnJlbnQgc25hcHNob3Qgb3V0L2VyciBjYXB0dXJlIGFuZCBmbHVzaCB0
byBvcmlnIHN0cmVhbXMuICIiIgotICAgICAgICBvdXQsIGVyciA9IHNlbGYucmVhZG91dGVycigp
Ci0gICAgICAgIGlmIG91dDoKLSAgICAgICAgICAgIHNlbGYub3V0LndyaXRlb3JnKG91dCkKLSAg
ICAgICAgaWYgZXJyOgotICAgICAgICAgICAgc2VsZi5lcnIud3JpdGVvcmcoZXJyKQotICAgICAg
ICByZXR1cm4gb3V0LCBlcnIKLQotICAgIGRlZiBzdXNwZW5kX2NhcHR1cmluZyhzZWxmLCBpbl89
RmFsc2UpOgotICAgICAgICBpZiBzZWxmLm91dDoKLSAgICAgICAgICAgIHNlbGYub3V0LnN1c3Bl
bmQoKQotICAgICAgICBpZiBzZWxmLmVycjoKLSAgICAgICAgICAgIHNlbGYuZXJyLnN1c3BlbmQo
KQotICAgICAgICBpZiBpbl8gYW5kIHNlbGYuaW5fOgotICAgICAgICAgICAgc2VsZi5pbl8uc3Vz
cGVuZCgpCi0gICAgICAgICAgICBzZWxmLl9pbl9zdXNwZW5kZWQgPSBUcnVlCi0KLSAgICBkZWYg
cmVzdW1lX2NhcHR1cmluZyhzZWxmKToKLSAgICAgICAgaWYgc2VsZi5vdXQ6Ci0gICAgICAgICAg
ICBzZWxmLm91dC5yZXN1bWUoKQotICAgICAgICBpZiBzZWxmLmVycjoKLSAgICAgICAgICAgIHNl
bGYuZXJyLnJlc3VtZSgpCi0gICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgIl9pbl9zdXNwZW5kZWQi
KToKLSAgICAgICAgICAgIHNlbGYuaW5fLnJlc3VtZSgpCi0gICAgICAgICAgICBkZWwgc2VsZi5f
aW5fc3VzcGVuZGVkCi0KLSAgICBkZWYgc3RvcF9jYXB0dXJpbmcoc2VsZik6Ci0gICAgICAgICIi
IiBzdG9wIGNhcHR1cmluZyBhbmQgcmVzZXQgY2FwdHVyaW5nIHN0cmVhbXMgIiIiCi0gICAgICAg
IGlmIGhhc2F0dHIoc2VsZiwgJ19yZXNldCcpOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJv
cigid2FzIGFscmVhZHkgc3RvcHBlZCIpCi0gICAgICAgIHNlbGYuX3Jlc2V0ID0gVHJ1ZQotICAg
ICAgICBpZiBzZWxmLm91dDoKLSAgICAgICAgICAgIHNlbGYub3V0LmRvbmUoKQotICAgICAgICBp
ZiBzZWxmLmVycjoKLSAgICAgICAgICAgIHNlbGYuZXJyLmRvbmUoKQotICAgICAgICBpZiBzZWxm
LmluXzoKLSAgICAgICAgICAgIHNlbGYuaW5fLmRvbmUoKQotCi0gICAgZGVmIHJlYWRvdXRlcnIo
c2VsZik6Ci0gICAgICAgICIiIiByZXR1cm4gc25hcHNob3QgdW5pY29kZSB2YWx1ZSBvZiBzdGRv
dXQvc3RkZXJyIGNhcHR1cmluZ3MuICIiIgotICAgICAgICByZXR1cm4gKHNlbGYub3V0LnNuYXAo
KSBpZiBzZWxmLm91dCBpcyBub3QgTm9uZSBlbHNlICIiLAotICAgICAgICAgICAgICAgIHNlbGYu
ZXJyLnNuYXAoKSBpZiBzZWxmLmVyciBpcyBub3QgTm9uZSBlbHNlICIiKQotCi1jbGFzcyBOb0Nh
cHR1cmU6Ci0gICAgX19pbml0X18gPSBzdGFydCA9IGRvbmUgPSBzdXNwZW5kID0gcmVzdW1lID0g
bGFtYmRhICphcmdzOiBOb25lCi0KLWNsYXNzIEZEQ2FwdHVyZToKLSAgICAiIiIgQ2FwdHVyZSBJ
TyB0by9mcm9tIGEgZ2l2ZW4gb3MtbGV2ZWwgZmlsZWRlc2NyaXB0b3IuICIiIgotCi0gICAgZGVm
IF9faW5pdF9fKHNlbGYsIHRhcmdldGZkLCB0bXBmaWxlPU5vbmUpOgotICAgICAgICBzZWxmLnRh
cmdldGZkID0gdGFyZ2V0ZmQKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi50YXJnZXRm
ZF9zYXZlID0gb3MuZHVwKHNlbGYudGFyZ2V0ZmQpCi0gICAgICAgIGV4Y2VwdCBPU0Vycm9yOgot
ICAgICAgICAgICAgc2VsZi5zdGFydCA9IGxhbWJkYTogTm9uZQotICAgICAgICAgICAgc2VsZi5k
b25lID0gbGFtYmRhOiBOb25lCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBpZiB0YXJnZXRm
ZCA9PSAwOgotICAgICAgICAgICAgICAgIGFzc2VydCBub3QgdG1wZmlsZSwgImNhbm5vdCBzZXQg
dG1wZmlsZSB3aXRoIHN0ZGluIgotICAgICAgICAgICAgICAgIHRtcGZpbGUgPSBvcGVuKG9zLmRl
dm51bGwsICJyIikKLSAgICAgICAgICAgICAgICBzZWxmLnN5c2NhcHR1cmUgPSBTeXNDYXB0dXJl
KHRhcmdldGZkKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBpZiB0bXBmaWxl
IGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIGYgPSBUZW1wb3JhcnlGaWxlKCkKLSAgICAg
ICAgICAgICAgICAgICAgd2l0aCBmOgotICAgICAgICAgICAgICAgICAgICAgICAgdG1wZmlsZSA9
IHNhZmVfdGV4dF9kdXBmaWxlKGYsIG1vZGU9IndiKyIpCi0gICAgICAgICAgICAgICAgaWYgdGFy
Z2V0ZmQgaW4gcGF0Y2hzeXNkaWN0OgotICAgICAgICAgICAgICAgICAgICBzZWxmLnN5c2NhcHR1
cmUgPSBTeXNDYXB0dXJlKHRhcmdldGZkLCB0bXBmaWxlKQotICAgICAgICAgICAgICAgIGVsc2U6
Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuc3lzY2FwdHVyZSA9IE5vQ2FwdHVyZSgpCi0gICAg
ICAgICAgICBzZWxmLnRtcGZpbGUgPSB0bXBmaWxlCi0gICAgICAgICAgICBzZWxmLnRtcGZpbGVf
ZmQgPSB0bXBmaWxlLmZpbGVubygpCi0KLSAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAg
IHJldHVybiAiPEZEQ2FwdHVyZSAlcyBvbGRmZD0lcz4iICUgKHNlbGYudGFyZ2V0ZmQsIHNlbGYu
dGFyZ2V0ZmRfc2F2ZSkKLQotICAgIGRlZiBzdGFydChzZWxmKToKLSAgICAgICAgIiIiIFN0YXJ0
IGNhcHR1cmluZyBvbiB0YXJnZXRmZCB1c2luZyBtZW1vcml6ZWQgdG1wZmlsZS4gIiIiCi0gICAg
ICAgIHRyeToKLSAgICAgICAgICAgIG9zLmZzdGF0KHNlbGYudGFyZ2V0ZmRfc2F2ZSkKLSAgICAg
ICAgZXhjZXB0IChBdHRyaWJ1dGVFcnJvciwgT1NFcnJvcik6Ci0gICAgICAgICAgICByYWlzZSBW
YWx1ZUVycm9yKCJzYXZlZCBmaWxlZGVzY3JpcHRvciBub3QgdmFsaWQgYW55bW9yZSIpCi0gICAg
ICAgIG9zLmR1cDIoc2VsZi50bXBmaWxlX2ZkLCBzZWxmLnRhcmdldGZkKQotICAgICAgICBzZWxm
LnN5c2NhcHR1cmUuc3RhcnQoKQotCi0gICAgZGVmIHNuYXAoc2VsZik6Ci0gICAgICAgIGYgPSBz
ZWxmLnRtcGZpbGUKLSAgICAgICAgZi5zZWVrKDApCi0gICAgICAgIHJlcyA9IGYucmVhZCgpCi0g
ICAgICAgIGlmIHJlczoKLSAgICAgICAgICAgIGVuYyA9IGdldGF0dHIoZiwgImVuY29kaW5nIiwg
Tm9uZSkKLSAgICAgICAgICAgIGlmIGVuYyBhbmQgaXNpbnN0YW5jZShyZXMsIGJ5dGVzKToKLSAg
ICAgICAgICAgICAgICByZXMgPSBweS5idWlsdGluLl90b3RleHQocmVzLCBlbmMsICJyZXBsYWNl
IikKLSAgICAgICAgICAgIGYudHJ1bmNhdGUoMCkKLSAgICAgICAgICAgIGYuc2VlaygwKQotICAg
ICAgICAgICAgcmV0dXJuIHJlcwotICAgICAgICByZXR1cm4gJycKLQotICAgIGRlZiBkb25lKHNl
bGYpOgotICAgICAgICAiIiIgc3RvcCBjYXB0dXJpbmcsIHJlc3RvcmUgc3RyZWFtcywgcmV0dXJu
IG9yaWdpbmFsIGNhcHR1cmUgZmlsZSwKLSAgICAgICAgc2Vla2VkIHRvIHBvc2l0aW9uIHplcm8u
ICIiIgotICAgICAgICB0YXJnZXRmZF9zYXZlID0gc2VsZi5fX2RpY3RfXy5wb3AoInRhcmdldGZk
X3NhdmUiKQotICAgICAgICBvcy5kdXAyKHRhcmdldGZkX3NhdmUsIHNlbGYudGFyZ2V0ZmQpCi0g
ICAgICAgIG9zLmNsb3NlKHRhcmdldGZkX3NhdmUpCi0gICAgICAgIHNlbGYuc3lzY2FwdHVyZS5k
b25lKCkKLSAgICAgICAgc2VsZi50bXBmaWxlLmNsb3NlKCkKLQotICAgIGRlZiBzdXNwZW5kKHNl
bGYpOgotICAgICAgICBzZWxmLnN5c2NhcHR1cmUuc3VzcGVuZCgpCi0gICAgICAgIG9zLmR1cDIo
c2VsZi50YXJnZXRmZF9zYXZlLCBzZWxmLnRhcmdldGZkKQotCi0gICAgZGVmIHJlc3VtZShzZWxm
KToKLSAgICAgICAgc2VsZi5zeXNjYXB0dXJlLnJlc3VtZSgpCi0gICAgICAgIG9zLmR1cDIoc2Vs
Zi50bXBmaWxlX2ZkLCBzZWxmLnRhcmdldGZkKQotCi0gICAgZGVmIHdyaXRlb3JnKHNlbGYsIGRh
dGEpOgotICAgICAgICAiIiIgd3JpdGUgdG8gb3JpZ2luYWwgZmlsZSBkZXNjcmlwdG9yLiAiIiIK
LSAgICAgICAgaWYgcHkuYnVpbHRpbi5faXN0ZXh0KGRhdGEpOgotICAgICAgICAgICAgZGF0YSA9
IGRhdGEuZW5jb2RlKCJ1dGY4IikgIyBYWFggdXNlIGVuY29kaW5nIG9mIG9yaWdpbmFsIHN0cmVh
bQotICAgICAgICBvcy53cml0ZShzZWxmLnRhcmdldGZkX3NhdmUsIGRhdGEpCi0KLQotY2xhc3Mg
U3lzQ2FwdHVyZToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgZmQsIHRtcGZpbGU9Tm9uZSk6Ci0g
ICAgICAgIG5hbWUgPSBwYXRjaHN5c2RpY3RbZmRdCi0gICAgICAgIHNlbGYuX29sZCA9IGdldGF0
dHIoc3lzLCBuYW1lKQotICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCi0gICAgICAgIGlmIHRtcGZp
bGUgaXMgTm9uZToKLSAgICAgICAgICAgIGlmIG5hbWUgPT0gInN0ZGluIjoKLSAgICAgICAgICAg
ICAgICB0bXBmaWxlID0gRG9udFJlYWRGcm9tSW5wdXQoKQotICAgICAgICAgICAgZWxzZToKLSAg
ICAgICAgICAgICAgICB0bXBmaWxlID0gVGV4dElPKCkKLSAgICAgICAgc2VsZi50bXBmaWxlID0g
dG1wZmlsZQotCi0gICAgZGVmIHN0YXJ0KHNlbGYpOgotICAgICAgICBzZXRhdHRyKHN5cywgc2Vs
Zi5uYW1lLCBzZWxmLnRtcGZpbGUpCi0KLSAgICBkZWYgc25hcChzZWxmKToKLSAgICAgICAgZiA9
IHNlbGYudG1wZmlsZQotICAgICAgICByZXMgPSBmLmdldHZhbHVlKCkKLSAgICAgICAgZi50cnVu
Y2F0ZSgwKQotICAgICAgICBmLnNlZWsoMCkKLSAgICAgICAgcmV0dXJuIHJlcwotCi0gICAgZGVm
IGRvbmUoc2VsZik6Ci0gICAgICAgIHNldGF0dHIoc3lzLCBzZWxmLm5hbWUsIHNlbGYuX29sZCkK
LSAgICAgICAgZGVsIHNlbGYuX29sZAotICAgICAgICBzZWxmLnRtcGZpbGUuY2xvc2UoKQotCi0g
ICAgZGVmIHN1c3BlbmQoc2VsZik6Ci0gICAgICAgIHNldGF0dHIoc3lzLCBzZWxmLm5hbWUsIHNl
bGYuX29sZCkKLQotICAgIGRlZiByZXN1bWUoc2VsZik6Ci0gICAgICAgIHNldGF0dHIoc3lzLCBz
ZWxmLm5hbWUsIHNlbGYudG1wZmlsZSkKLQotICAgIGRlZiB3cml0ZW9yZyhzZWxmLCBkYXRhKToK
LSAgICAgICAgc2VsZi5fb2xkLndyaXRlKGRhdGEpCi0gICAgICAgIHNlbGYuX29sZC5mbHVzaCgp
Ci0KLQotY2xhc3MgRG9udFJlYWRGcm9tSW5wdXQ6Ci0gICAgIiIiVGVtcG9yYXJ5IHN0dWIgY2xh
c3MuICBJZGVhbGx5IHdoZW4gc3RkaW4gaXMgYWNjZXNzZWQsIHRoZQotICAgIGNhcHR1cmluZyBz
aG91bGQgYmUgdHVybmVkIG9mZiwgd2l0aCBwb3NzaWJseSBhbGwgZGF0YSBjYXB0dXJlZAotICAg
IHNvIGZhciBzZW50IHRvIHRoZSBzY3JlZW4uICBUaGlzIHNob3VsZCBiZSBjb25maWd1cmFibGUs
IHRob3VnaCwKLSAgICBiZWNhdXNlIGluIGF1dG9tYXRlZCB0ZXN0IHJ1bnMgaXQgaXMgYmV0dGVy
IHRvIGNyYXNoIHRoYW4KLSAgICBoYW5nIGluZGVmaW5pdGVseS4KLSAgICAiIiIKLQotICAgIGVu
Y29kaW5nID0gTm9uZQotCi0gICAgZGVmIHJlYWQoc2VsZiwgKmFyZ3MpOgotICAgICAgICByYWlz
ZSBJT0Vycm9yKCJyZWFkaW5nIGZyb20gc3RkaW4gd2hpbGUgb3V0cHV0IGlzIGNhcHR1cmVkIikK
LSAgICByZWFkbGluZSA9IHJlYWQKLSAgICByZWFkbGluZXMgPSByZWFkCi0gICAgX19pdGVyX18g
PSByZWFkCi0KLSAgICBkZWYgZmlsZW5vKHNlbGYpOgotICAgICAgICByYWlzZSBWYWx1ZUVycm9y
KCJyZWRpcmVjdGVkIFN0ZGluIGlzIHBzZXVkb2ZpbGUsIGhhcyBubyBmaWxlbm8oKSIpCi0KLSAg
ICBkZWYgaXNhdHR5KHNlbGYpOgotICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgIGRlZiBjbG9z
ZShzZWxmKToKLSAgICAgICAgcGFzcwotCi0KLWRlZiBfcmVhZGxpbmVfd29ya2Fyb3VuZCgpOgot
ICAgICIiIgotICAgIEVuc3VyZSByZWFkbGluZSBpcyBpbXBvcnRlZCBzbyB0aGF0IGl0IGF0dGFj
aGVzIHRvIHRoZSBjb3JyZWN0IHN0ZGlvCi0gICAgaGFuZGxlcyBvbiBXaW5kb3dzLgotCi0gICAg
UGRiIHVzZXMgcmVhZGxpbmUgc3VwcG9ydCB3aGVyZSBhdmFpbGFibGUtLXdoZW4gbm90IHJ1bm5p
bmcgZnJvbSB0aGUgUHl0aG9uCi0gICAgcHJvbXB0LCB0aGUgcmVhZGxpbmUgbW9kdWxlIGlzIG5v
dCBpbXBvcnRlZCB1bnRpbCBydW5uaW5nIHRoZSBwZGIgUkVQTC4gIElmCi0gICAgcnVubmluZyBw
eS50ZXN0IHdpdGggdGhlIC0tcGRiIG9wdGlvbiB0aGlzIG1lYW5zIHRoZSByZWFkbGluZSBtb2R1
bGUgaXMgbm90Ci0gICAgaW1wb3J0ZWQgdW50aWwgYWZ0ZXIgSS9PIGNhcHR1cmUgaGFzIGJlZW4g
c3RhcnRlZC4KLQotICAgIFRoaXMgaXMgYSBwcm9ibGVtIGZvciBweXJlYWRsaW5lLCB3aGljaCBp
cyBvZnRlbiB1c2VkIHRvIGltcGxlbWVudCByZWFkbGluZQotICAgIHN1cHBvcnQgb24gV2luZG93
cywgYXMgaXQgZG9lcyBub3QgYXR0YWNoIHRvIHRoZSBjb3JyZWN0IGhhbmRsZXMgZm9yIHN0ZG91
dAotICAgIGFuZC9vciBzdGRpbiBpZiB0aGV5IGhhdmUgYmVlbiByZWRpcmVjdGVkIGJ5IHRoZSBG
RENhcHR1cmUgbWVjaGFuaXNtLiAgVGhpcwotICAgIHdvcmthcm91bmQgZW5zdXJlcyB0aGF0IHJl
YWRsaW5lIGlzIGltcG9ydGVkIGJlZm9yZSBJL08gY2FwdHVyZSBpcyBzZXR1cCBzbwotICAgIHRo
YXQgaXQgY2FuIGF0dGFjaCB0byB0aGUgYWN0dWFsIHN0ZGluL291dCBmb3IgdGhlIGNvbnNvbGUu
Ci0KLSAgICBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3B5dGVzdC1kZXYvcHl0ZXN0L3B1bGwvMTI4
MQotICAgICIiIgotCi0gICAgaWYgbm90IHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCd3aW4zMicp
OgotICAgICAgICByZXR1cm4KLSAgICB0cnk6Ci0gICAgICAgIGltcG9ydCByZWFkbGluZSAgIyBu
b3FhCi0gICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICBwYXNzCmRpZmYgLS1naXQgYS9X
ZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvY29uZmlnLnB5
IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L2NvbmZp
Zy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmI3YjE3NzRmNjguLjAwMDAwMDAw
MDAwCi0tLSBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVz
dC9jb25maWcucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxMTkyICswLDAgQEAKLSIiIiBjb21tYW5k
IGxpbmUgb3B0aW9ucywgaW5pLWZpbGUgYW5kIGNvbmZ0ZXN0LnB5IHByb2Nlc3NpbmcuICIiIgot
aW1wb3J0IGFyZ3BhcnNlCi1pbXBvcnQgc2hsZXgKLWltcG9ydCB0cmFjZWJhY2sKLWltcG9ydCB0
eXBlcwotaW1wb3J0IHdhcm5pbmdzCi0KLWltcG9ydCBweQotIyBET04ndCBpbXBvcnQgcHl0ZXN0
IGhlcmUgYmVjYXVzZSBpdCBjYXVzZXMgaW1wb3J0IGN5Y2xlIHRyb3VibGVzCi1pbXBvcnQgc3lz
LCBvcwotaW1wb3J0IF9weXRlc3QuX2NvZGUKLWltcG9ydCBfcHl0ZXN0Lmhvb2tzcGVjICAjIHRo
ZSBleHRlbnNpb24gcG9pbnQgZGVmaW5pdGlvbnMKLWZyb20gX3B5dGVzdC5fcGx1Z2d5IGltcG9y
dCBQbHVnaW5NYW5hZ2VyLCBIb29raW1wbE1hcmtlciwgSG9va3NwZWNNYXJrZXIKLQotaG9va2lt
cGwgPSBIb29raW1wbE1hcmtlcigicHl0ZXN0IikKLWhvb2tzcGVjID0gSG9va3NwZWNNYXJrZXIo
InB5dGVzdCIpCi0KLSMgcHl0ZXN0IHN0YXJ0dXAKLSMKLQotCi1jbGFzcyBDb25mdGVzdEltcG9y
dEZhaWx1cmUoRXhjZXB0aW9uKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aCwgZXhjaW5m
byk6Ci0gICAgICAgIEV4Y2VwdGlvbi5fX2luaXRfXyhzZWxmLCBwYXRoLCBleGNpbmZvKQotICAg
ICAgICBzZWxmLnBhdGggPSBwYXRoCi0gICAgICAgIHNlbGYuZXhjaW5mbyA9IGV4Y2luZm8KLQot
Ci1kZWYgbWFpbihhcmdzPU5vbmUsIHBsdWdpbnM9Tm9uZSk6Ci0gICAgIiIiIHJldHVybiBleGl0
IGNvZGUsIGFmdGVyIHBlcmZvcm1pbmcgYW4gaW4tcHJvY2VzcyB0ZXN0IHJ1bi4KLQotICAgIDph
cmcgYXJnczogbGlzdCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzLgotCi0gICAgOmFyZyBwbHVn
aW5zOiBsaXN0IG9mIHBsdWdpbiBvYmplY3RzIHRvIGJlIGF1dG8tcmVnaXN0ZXJlZCBkdXJpbmcK
LSAgICAgICAgICAgICAgICAgIGluaXRpYWxpemF0aW9uLgotICAgICIiIgotICAgIHRyeToKLSAg
ICAgICAgdHJ5OgotICAgICAgICAgICAgY29uZmlnID0gX3ByZXBhcmVjb25maWcoYXJncywgcGx1
Z2lucykKLSAgICAgICAgZXhjZXB0IENvbmZ0ZXN0SW1wb3J0RmFpbHVyZSBhcyBlOgotICAgICAg
ICAgICAgdHcgPSBweS5pby5UZXJtaW5hbFdyaXRlcihzeXMuc3RkZXJyKQotICAgICAgICAgICAg
Zm9yIGxpbmUgaW4gdHJhY2ViYWNrLmZvcm1hdF9leGNlcHRpb24oKmUuZXhjaW5mbyk6Ci0gICAg
ICAgICAgICAgICAgdHcubGluZShsaW5lLnJzdHJpcCgpLCByZWQ9VHJ1ZSkKLSAgICAgICAgICAg
IHR3LmxpbmUoIkVSUk9SOiBjb3VsZCBub3QgbG9hZCAlc1xuIiAlIChlLnBhdGgpLCByZWQ9VHJ1
ZSkKLSAgICAgICAgICAgIHJldHVybiA0Ci0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICB0cnk6
Ci0gICAgICAgICAgICAgICAgY29uZmlnLnBsdWdpbm1hbmFnZXIuY2hlY2tfcGVuZGluZygpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGNvbmZpZy5ob29rLnB5dGVzdF9jbWRsaW5lX21haW4oY29u
ZmlnPWNvbmZpZykKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgY29uZmln
Ll9lbnN1cmVfdW5jb25maWd1cmUoKQotICAgIGV4Y2VwdCBVc2FnZUVycm9yIGFzIGU6Ci0gICAg
ICAgIGZvciBtc2cgaW4gZS5hcmdzOgotICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiRVJS
T1I6ICVzXG4iICUobXNnLCkpCi0gICAgICAgIHJldHVybiA0Ci0KLWNsYXNzIGNtZGxpbmU6ICAj
IGNvbXBhdGliaWxpdHkgbmFtZXNwYWNlCi0gICAgbWFpbiA9IHN0YXRpY21ldGhvZChtYWluKQot
Ci1jbGFzcyBVc2FnZUVycm9yKEV4Y2VwdGlvbik6Ci0gICAgIiIiIGVycm9yIGluIHB5dGVzdCB1
c2FnZSBvciBpbnZvY2F0aW9uIiIiCi0KLV9wcmVpbml0ID0gW10KLQotZGVmYXVsdF9wbHVnaW5z
ID0gKAotICAgICAibWFyayBtYWluIHRlcm1pbmFsIHJ1bm5lciBweXRob24gcGRiIHVuaXR0ZXN0
IGNhcHR1cmUgc2tpcHBpbmcgIgotICAgICAidG1wZGlyIG1vbmtleXBhdGNoIHJlY3dhcm4gcGFz
dGViaW4gaGVscGNvbmZpZyBub3NlIGFzc2VydGlvbiBnZW5zY3JpcHQgIgotICAgICAianVuaXR4
bWwgcmVzdWx0bG9nIGRvY3Rlc3QgY2FjaGVwcm92aWRlciIpLnNwbGl0KCkKLQotYnVpbHRpbl9w
bHVnaW5zID0gc2V0KGRlZmF1bHRfcGx1Z2lucykKLWJ1aWx0aW5fcGx1Z2lucy5hZGQoInB5dGVz
dGVyIikKLQotCi1kZWYgX3ByZWxvYWRwbHVnaW5zKCk6Ci0gICAgYXNzZXJ0IG5vdCBfcHJlaW5p
dAotICAgIF9wcmVpbml0LmFwcGVuZChnZXRfY29uZmlnKCkpCi0KLWRlZiBnZXRfY29uZmlnKCk6
Ci0gICAgaWYgX3ByZWluaXQ6Ci0gICAgICAgIHJldHVybiBfcHJlaW5pdC5wb3AoMCkKLSAgICAj
IHN1YnNlcXVlbnQgY2FsbHMgdG8gbWFpbiB3aWxsIGNyZWF0ZSBhIGZyZXNoIGluc3RhbmNlCi0g
ICAgcGx1Z2lubWFuYWdlciA9IFB5dGVzdFBsdWdpbk1hbmFnZXIoKQotICAgIGNvbmZpZyA9IENv
bmZpZyhwbHVnaW5tYW5hZ2VyKQotICAgIGZvciBzcGVjIGluIGRlZmF1bHRfcGx1Z2luczoKLSAg
ICAgICAgcGx1Z2lubWFuYWdlci5pbXBvcnRfcGx1Z2luKHNwZWMpCi0gICAgcmV0dXJuIGNvbmZp
ZwotCi1kZWYgZ2V0X3BsdWdpbl9tYW5hZ2VyKCk6Ci0gICAgIiIiCi0gICAgT2J0YWluIGEgbmV3
IGluc3RhbmNlIG9mIHRoZQotICAgIDpweTpjbGFzczpgX3B5dGVzdC5jb25maWcuUHl0ZXN0UGx1
Z2luTWFuYWdlcmAsIHdpdGggZGVmYXVsdCBwbHVnaW5zCi0gICAgYWxyZWFkeSBsb2FkZWQuCi0K
LSAgICBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGJ5IGludGVncmF0aW9uIHdpdGggb3RoZXIg
dG9vbHMsIGxpa2UgaG9va2luZwotICAgIGludG8gcHl0ZXN0IHRvIHJ1biB0ZXN0cyBpbnRvIGFu
IElERS4KLSAgICAiIiIKLSAgICByZXR1cm4gZ2V0X2NvbmZpZygpLnBsdWdpbm1hbmFnZXIKLQot
ZGVmIF9wcmVwYXJlY29uZmlnKGFyZ3M9Tm9uZSwgcGx1Z2lucz1Ob25lKToKLSAgICBpZiBhcmdz
IGlzIE5vbmU6Ci0gICAgICAgIGFyZ3MgPSBzeXMuYXJndlsxOl0KLSAgICBlbGlmIGlzaW5zdGFu
Y2UoYXJncywgcHkucGF0aC5sb2NhbCk6Ci0gICAgICAgIGFyZ3MgPSBbc3RyKGFyZ3MpXQotICAg
IGVsaWYgbm90IGlzaW5zdGFuY2UoYXJncywgKHR1cGxlLCBsaXN0KSk6Ci0gICAgICAgIGlmIG5v
dCBpc2luc3RhbmNlKGFyZ3MsIHN0cik6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJu
b3QgYSBzdHJpbmcgb3IgYXJndW1lbnQgbGlzdDogJXIiICUgKGFyZ3MsKSkKLSAgICAgICAgYXJn
cyA9IHNobGV4LnNwbGl0KGFyZ3MpCi0gICAgY29uZmlnID0gZ2V0X2NvbmZpZygpCi0gICAgcGx1
Z2lubWFuYWdlciA9IGNvbmZpZy5wbHVnaW5tYW5hZ2VyCi0gICAgdHJ5OgotICAgICAgICBpZiBw
bHVnaW5zOgotICAgICAgICAgICAgZm9yIHBsdWdpbiBpbiBwbHVnaW5zOgotICAgICAgICAgICAg
ICAgIGlmIGlzaW5zdGFuY2UocGx1Z2luLCBweS5idWlsdGluLl9iYXNlc3RyaW5nKToKLSAgICAg
ICAgICAgICAgICAgICAgcGx1Z2lubWFuYWdlci5jb25zaWRlcl9wbHVnaW5hcmcocGx1Z2luKQot
ICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHBsdWdpbm1hbmFnZXIu
cmVnaXN0ZXIocGx1Z2luKQotICAgICAgICByZXR1cm4gcGx1Z2lubWFuYWdlci5ob29rLnB5dGVz
dF9jbWRsaW5lX3BhcnNlKAotICAgICAgICAgICAgICAgIHBsdWdpbm1hbmFnZXI9cGx1Z2lubWFu
YWdlciwgYXJncz1hcmdzKQotICAgIGV4Y2VwdCBCYXNlRXhjZXB0aW9uOgotICAgICAgICBjb25m
aWcuX2Vuc3VyZV91bmNvbmZpZ3VyZSgpCi0gICAgICAgIHJhaXNlCi0KLQotY2xhc3MgUHl0ZXN0
UGx1Z2luTWFuYWdlcihQbHVnaW5NYW5hZ2VyKToKLSAgICAiIiIKLSAgICBPdmVyd3JpdGVzIDpw
eTpjbGFzczpgcGx1Z2d5LlBsdWdpbk1hbmFnZXJgIHRvIGFkZCBweXRlc3Qtc3BlY2lmaWMKLSAg
ICBmdW5jdGlvbmFsaXR5OgotCi0gICAgKiBsb2FkaW5nIHBsdWdpbnMgZnJvbSB0aGUgY29tbWFu
ZCBsaW5lLCBgYFBZVEVTVF9QTFVHSU5gYCBlbnYgdmFyaWFibGUgYW5kCi0gICAgICBgYHB5dGVz
dF9wbHVnaW5zYGAgZ2xvYmFsIHZhcmlhYmxlcyBmb3VuZCBpbiBwbHVnaW5zIGJlaW5nIGxvYWRl
ZDsKLSAgICAqIGBgY29uZnRlc3QucHlgYCBsb2FkaW5nIGR1cmluZyBzdGFydC11cDsKLSAgICAi
IiIKLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgIHN1cGVyKFB5dGVzdFBsdWdpbk1h
bmFnZXIsIHNlbGYpLl9faW5pdF9fKCJweXRlc3QiLCBpbXBscHJlZml4PSJweXRlc3RfIikKLSAg
ICAgICAgc2VsZi5fY29uZnRlc3RfcGx1Z2lucyA9IHNldCgpCi0KLSAgICAgICAgIyBzdGF0ZSBy
ZWxhdGVkIHRvIGxvY2FsIGNvbmZ0ZXN0IHBsdWdpbnMKLSAgICAgICAgc2VsZi5fcGF0aDJjb25m
bW9kcyA9IHt9Ci0gICAgICAgIHNlbGYuX2NvbmZ0ZXN0cGF0aDJtb2QgPSB7fQotICAgICAgICBz
ZWxmLl9jb25mY3V0ZGlyID0gTm9uZQotICAgICAgICBzZWxmLl9ub2NvbmZ0ZXN0ID0gRmFsc2UK
LQotICAgICAgICBzZWxmLmFkZF9ob29rc3BlY3MoX3B5dGVzdC5ob29rc3BlYykKLSAgICAgICAg
c2VsZi5yZWdpc3RlcihzZWxmKQotICAgICAgICBpZiBvcy5lbnZpcm9uLmdldCgnUFlURVNUX0RF
QlVHJyk6Ci0gICAgICAgICAgICBlcnIgPSBzeXMuc3RkZXJyCi0gICAgICAgICAgICBlbmNvZGlu
ZyA9IGdldGF0dHIoZXJyLCAnZW5jb2RpbmcnLCAndXRmOCcpCi0gICAgICAgICAgICB0cnk6Ci0g
ICAgICAgICAgICAgICAgZXJyID0gcHkuaW8uZHVwZmlsZShlcnIsIGVuY29kaW5nPWVuY29kaW5n
KQotICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKLSAgICAgICAgICAgICAgICBwYXNzCi0g
ICAgICAgICAgICBzZWxmLnRyYWNlLnJvb3Quc2V0d3JpdGVyKGVyci53cml0ZSkKLSAgICAgICAg
ICAgIHNlbGYuZW5hYmxlX3RyYWNpbmcoKQotCi0gICAgZGVmIGFkZGhvb2tzKHNlbGYsIG1vZHVs
ZV9vcl9jbGFzcyk6Ci0gICAgICAgICIiIgotICAgICAgICAuLiBkZXByZWNhdGVkOjogMi44Ci0K
LSAgICAgICAgVXNlIDpweTptZXRoOmBwbHVnZ3kuUGx1Z2luTWFuYWdlci5hZGRfaG9va3NwZWNz
YCBpbnN0ZWFkLgotICAgICAgICAiIiIKLSAgICAgICAgd2FybmluZyA9IGRpY3QoY29kZT0iSTIi
LAotICAgICAgICAgICAgICAgICAgICAgICBmc2xvY2F0aW9uPV9weXRlc3QuX2NvZGUuZ2V0ZnNs
aW5lbm8oc3lzLl9nZXRmcmFtZSgxKSksCi0gICAgICAgICAgICAgICAgICAgICAgIG5vZGVpZD1O
b25lLAotICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlPSJ1c2UgcGx1Z2lubWFuYWdlci5h
ZGRfaG9va3NwZWNzIGluc3RlYWQgb2YgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJkZXByZWNhdGVkIGFkZGhvb2tzKCkgbWV0aG9kLiIpCi0gICAgICAgIHNlbGYuX3dhcm4od2Fy
bmluZykKLSAgICAgICAgcmV0dXJuIHNlbGYuYWRkX2hvb2tzcGVjcyhtb2R1bGVfb3JfY2xhc3Mp
Ci0KLSAgICBkZWYgcGFyc2VfaG9va2ltcGxfb3B0cyhzZWxmLCBwbHVnaW4sIG5hbWUpOgotICAg
ICAgICAjIHB5dGVzdCBob29rcyBhcmUgYWx3YXlzIHByZWZpeGVkIHdpdGggcHl0ZXN0XwotICAg
ICAgICAjIHNvIHdlIGF2b2lkIGFjY2Vzc2luZyBwb3NzaWJseSBub24tcmVhZGFibGUgYXR0cmli
dXRlcwotICAgICAgICAjIChzZWUgaXNzdWUgIzEwNzMpCi0gICAgICAgIGlmIG5vdCBuYW1lLnN0
YXJ0c3dpdGgoInB5dGVzdF8iKToKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICAjIGlnbm9y
ZSBzb21lIGhpc3RvcmljIHNwZWNpYWwgbmFtZXMgd2hpY2ggY2FuIG5vdCBiZSBob29rcyBhbnl3
YXkKLSAgICAgICAgaWYgbmFtZSA9PSAicHl0ZXN0X3BsdWdpbnMiIG9yIG5hbWUuc3RhcnRzd2l0
aCgicHl0ZXN0X2Z1bmNhcmdfXyIpOgotICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgbWV0
aG9kID0gZ2V0YXR0cihwbHVnaW4sIG5hbWUpCi0gICAgICAgIG9wdHMgPSBzdXBlcihQeXRlc3RQ
bHVnaW5NYW5hZ2VyLCBzZWxmKS5wYXJzZV9ob29raW1wbF9vcHRzKHBsdWdpbiwgbmFtZSkKLSAg
ICAgICAgaWYgb3B0cyBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIGZvciBuYW1lIGluICgidHJ5
Zmlyc3QiLCAidHJ5bGFzdCIsICJvcHRpb25hbGhvb2siLCAiaG9va3dyYXBwZXIiKToKLSAgICAg
ICAgICAgICAgICBvcHRzLnNldGRlZmF1bHQobmFtZSwgaGFzYXR0cihtZXRob2QsIG5hbWUpKQot
ICAgICAgICByZXR1cm4gb3B0cwotCi0gICAgZGVmIHBhcnNlX2hvb2tzcGVjX29wdHMoc2VsZiwg
bW9kdWxlX29yX2NsYXNzLCBuYW1lKToKLSAgICAgICAgb3B0cyA9IHN1cGVyKFB5dGVzdFBsdWdp
bk1hbmFnZXIsIHNlbGYpLnBhcnNlX2hvb2tzcGVjX29wdHMoCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVfb3JfY2xhc3MsIG5hbWUpCi0gICAg
ICAgIGlmIG9wdHMgaXMgTm9uZToKLSAgICAgICAgICAgIG1ldGhvZCA9IGdldGF0dHIobW9kdWxl
X29yX2NsYXNzLCBuYW1lKQotICAgICAgICAgICAgaWYgbmFtZS5zdGFydHN3aXRoKCJweXRlc3Rf
Iik6Ci0gICAgICAgICAgICAgICAgb3B0cyA9IHsiZmlyc3RyZXN1bHQiOiBoYXNhdHRyKG1ldGhv
ZCwgImZpcnN0cmVzdWx0IiksCi0gICAgICAgICAgICAgICAgICAgICAgICAiaGlzdG9yaWMiOiBo
YXNhdHRyKG1ldGhvZCwgImhpc3RvcmljIil9Ci0gICAgICAgIHJldHVybiBvcHRzCi0KLSAgICBk
ZWYgX3ZlcmlmeV9ob29rKHNlbGYsIGhvb2ssIGhvb2ttZXRob2QpOgotICAgICAgICBzdXBlcihQ
eXRlc3RQbHVnaW5NYW5hZ2VyLCBzZWxmKS5fdmVyaWZ5X2hvb2soaG9vaywgaG9va21ldGhvZCkK
LSAgICAgICAgaWYgIl9fbXVsdGljYWxsX18iIGluIGhvb2ttZXRob2QuYXJnbmFtZXM6Ci0gICAg
ICAgICAgICBmc2xpbmVubyA9IF9weXRlc3QuX2NvZGUuZ2V0ZnNsaW5lbm8oaG9va21ldGhvZC5m
dW5jdGlvbikKLSAgICAgICAgICAgIHdhcm5pbmcgPSBkaWN0KGNvZGU9IkkxIiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZzbG9jYXRpb249ZnNsaW5lbm8sCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICBub2RlaWQ9Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3Nh
Z2U9IiVyIGhvb2sgdXNlcyBkZXByZWNhdGVkIF9fbXVsdGljYWxsX18gIgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiYXJndW1lbnQiICUgKGhvb2submFtZSkpCi0gICAgICAg
ICAgICBzZWxmLl93YXJuKHdhcm5pbmcpCi0KLSAgICBkZWYgcmVnaXN0ZXIoc2VsZiwgcGx1Z2lu
LCBuYW1lPU5vbmUpOgotICAgICAgICByZXQgPSBzdXBlcihQeXRlc3RQbHVnaW5NYW5hZ2VyLCBz
ZWxmKS5yZWdpc3RlcihwbHVnaW4sIG5hbWUpCi0gICAgICAgIGlmIHJldDoKLSAgICAgICAgICAg
IHNlbGYuaG9vay5weXRlc3RfcGx1Z2luX3JlZ2lzdGVyZWQuY2FsbF9oaXN0b3JpYygKLSAgICAg
ICAgICAgICAgICAgICAgICBrd2FyZ3M9ZGljdChwbHVnaW49cGx1Z2luLCBtYW5hZ2VyPXNlbGYp
KQotICAgICAgICByZXR1cm4gcmV0Ci0KLSAgICBkZWYgZ2V0cGx1Z2luKHNlbGYsIG5hbWUpOgot
ICAgICAgICAjIHN1cHBvcnQgZGVwcmVjYXRlZCBuYW1pbmcgYmVjYXVzZSBwbHVnaW5zICh4ZGlz
dCBlLmcuKSB1c2UgaXQKLSAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X3BsdWdpbihuYW1lKQotCi0g
ICAgZGVmIGhhc3BsdWdpbihzZWxmLCBuYW1lKToKLSAgICAgICAgIiIiUmV0dXJuIFRydWUgaWYg
dGhlIHBsdWdpbiB3aXRoIHRoZSBnaXZlbiBuYW1lIGlzIHJlZ2lzdGVyZWQuIiIiCi0gICAgICAg
IHJldHVybiBib29sKHNlbGYuZ2V0X3BsdWdpbihuYW1lKSkKLQotICAgIGRlZiBweXRlc3RfY29u
ZmlndXJlKHNlbGYsIGNvbmZpZyk6Ci0gICAgICAgICMgWFhYIG5vdyB0aGF0IHRoZSBwbHVnaW5t
YW5hZ2VyIGV4cG9zZXMgaG9va2ltcGwodHJ5Zmlyc3QuLi4pCi0gICAgICAgICMgd2Ugc2hvdWxk
IHJlbW92ZSB0cnlmaXJzdC90cnlsYXN0IGFzIG1hcmtlcnMKLSAgICAgICAgY29uZmlnLmFkZGlu
aXZhbHVlX2xpbmUoIm1hcmtlcnMiLAotICAgICAgICAgICAgInRyeWZpcnN0OiBtYXJrIGEgaG9v
ayBpbXBsZW1lbnRhdGlvbiBmdW5jdGlvbiBzdWNoIHRoYXQgdGhlICIKLSAgICAgICAgICAgICJw
bHVnaW4gbWFjaGluZXJ5IHdpbGwgdHJ5IHRvIGNhbGwgaXQgZmlyc3QvYXMgZWFybHkgYXMgcG9z
c2libGUuIikKLSAgICAgICAgY29uZmlnLmFkZGluaXZhbHVlX2xpbmUoIm1hcmtlcnMiLAotICAg
ICAgICAgICAgInRyeWxhc3Q6IG1hcmsgYSBob29rIGltcGxlbWVudGF0aW9uIGZ1bmN0aW9uIHN1
Y2ggdGhhdCB0aGUgIgotICAgICAgICAgICAgInBsdWdpbiBtYWNoaW5lcnkgd2lsbCB0cnkgdG8g
Y2FsbCBpdCBsYXN0L2FzIGxhdGUgYXMgcG9zc2libGUuIikKLQotICAgIGRlZiBfd2FybihzZWxm
LCBtZXNzYWdlKToKLSAgICAgICAga3dhcmdzID0gbWVzc2FnZSBpZiBpc2luc3RhbmNlKG1lc3Nh
Z2UsIGRpY3QpIGVsc2UgewotICAgICAgICAgICAgJ2NvZGUnOiAnSTEnLAotICAgICAgICAgICAg
J21lc3NhZ2UnOiBtZXNzYWdlLAotICAgICAgICAgICAgJ2ZzbG9jYXRpb24nOiBOb25lLAotICAg
ICAgICAgICAgJ25vZGVpZCc6IE5vbmUsCi0gICAgICAgIH0KLSAgICAgICAgc2VsZi5ob29rLnB5
dGVzdF9sb2d3YXJuaW5nLmNhbGxfaGlzdG9yaWMoa3dhcmdzPWt3YXJncykKLQotICAgICMKLSAg
ICAjIGludGVybmFsIEFQSSBmb3IgbG9jYWwgY29uZnRlc3QgcGx1Z2luIGhhbmRsaW5nCi0gICAg
IwotICAgIGRlZiBfc2V0X2luaXRpYWxfY29uZnRlc3RzKHNlbGYsIG5hbWVzcGFjZSk6Ci0gICAg
ICAgICIiIiBsb2FkIGluaXRpYWwgY29uZnRlc3QgZmlsZXMgZ2l2ZW4gYSBwcmVwYXJzZWQgIm5h
bWVzcGFjZSIuCi0gICAgICAgICAgICBBcyBjb25mdGVzdCBmaWxlcyBtYXkgYWRkIHRoZWlyIG93
biBjb21tYW5kIGxpbmUgb3B0aW9ucwotICAgICAgICAgICAgd2hpY2ggaGF2ZSBhcmd1bWVudHMg
KCctLW15LW9wdCBzb21lcGF0aCcpIHdlIG1pZ2h0IGdldCBzb21lCi0gICAgICAgICAgICBmYWxz
ZSBwb3NpdGl2ZXMuICBBbGwgYnVpbHRpbiBhbmQgM3JkIHBhcnR5IHBsdWdpbnMgd2lsbCBoYXZl
Ci0gICAgICAgICAgICBiZWVuIGxvYWRlZCwgaG93ZXZlciwgc28gY29tbW9uIG9wdGlvbnMgd2ls
bCBub3QgY29uZnVzZSBvdXIgbG9naWMKLSAgICAgICAgICAgIGhlcmUuCi0gICAgICAgICIiIgot
ICAgICAgICBjdXJyZW50ID0gcHkucGF0aC5sb2NhbCgpCi0gICAgICAgIHNlbGYuX2NvbmZjdXRk
aXIgPSBjdXJyZW50LmpvaW4obmFtZXNwYWNlLmNvbmZjdXRkaXIsIGFicz1UcnVlKSBcCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5hbWVzcGFjZS5jb25mY3V0ZGlyIGVsc2Ug
Tm9uZQotICAgICAgICBzZWxmLl9ub2NvbmZ0ZXN0ID0gbmFtZXNwYWNlLm5vY29uZnRlc3QKLSAg
ICAgICAgdGVzdHBhdGhzID0gbmFtZXNwYWNlLmZpbGVfb3JfZGlyCi0gICAgICAgIGZvdW5kYW5j
aG9yID0gRmFsc2UKLSAgICAgICAgZm9yIHBhdGggaW4gdGVzdHBhdGhzOgotICAgICAgICAgICAg
cGF0aCA9IHN0cihwYXRoKQotICAgICAgICAgICAgIyByZW1vdmUgbm9kZS1pZCBzeW50YXgKLSAg
ICAgICAgICAgIGkgPSBwYXRoLmZpbmQoIjo6IikKLSAgICAgICAgICAgIGlmIGkgIT0gLTE6Ci0g
ICAgICAgICAgICAgICAgcGF0aCA9IHBhdGhbOmldCi0gICAgICAgICAgICBhbmNob3IgPSBjdXJy
ZW50LmpvaW4ocGF0aCwgYWJzPTEpCi0gICAgICAgICAgICBpZiBleGlzdHMoYW5jaG9yKTogIyB3
ZSBmb3VuZCBzb21lIGZpbGUgb2JqZWN0Ci0gICAgICAgICAgICAgICAgc2VsZi5fdHJ5X2xvYWRf
Y29uZnRlc3QoYW5jaG9yKQotICAgICAgICAgICAgICAgIGZvdW5kYW5jaG9yID0gVHJ1ZQotICAg
ICAgICBpZiBub3QgZm91bmRhbmNob3I6Ci0gICAgICAgICAgICBzZWxmLl90cnlfbG9hZF9jb25m
dGVzdChjdXJyZW50KQotCi0gICAgZGVmIF90cnlfbG9hZF9jb25mdGVzdChzZWxmLCBhbmNob3Ip
OgotICAgICAgICBzZWxmLl9nZXRjb25mdGVzdG1vZHVsZXMoYW5jaG9yKQotICAgICAgICAjIGxl
dCdzIGFsc28gY29uc2lkZXIgdGVzdCogc3ViZGlycwotICAgICAgICBpZiBhbmNob3IuY2hlY2so
ZGlyPTEpOgotICAgICAgICAgICAgZm9yIHggaW4gYW5jaG9yLmxpc3RkaXIoInRlc3QqIik6Ci0g
ICAgICAgICAgICAgICAgaWYgeC5jaGVjayhkaXI9MSk6Ci0gICAgICAgICAgICAgICAgICAgIHNl
bGYuX2dldGNvbmZ0ZXN0bW9kdWxlcyh4KQotCi0gICAgZGVmIF9nZXRjb25mdGVzdG1vZHVsZXMo
c2VsZiwgcGF0aCk6Ci0gICAgICAgIGlmIHNlbGYuX25vY29uZnRlc3Q6Ci0gICAgICAgICAgICBy
ZXR1cm4gW10KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3BhdGgyY29u
Zm1vZHNbcGF0aF0KLSAgICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAgICAgaWYgcGF0
aC5pc2ZpbGUoKToKLSAgICAgICAgICAgICAgICBjbGlzdCA9IHNlbGYuX2dldGNvbmZ0ZXN0bW9k
dWxlcyhwYXRoLmRpcnBhdGgoKSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAg
IyBYWFggdGhlc2UgZGF5cyB3ZSBtYXkgcmF0aGVyIHdhbnQgdG8gdXNlIGNvbmZpZy5yb290ZGly
Ci0gICAgICAgICAgICAgICAgIyBhbmQgYWxsb3cgdXNlcnMgdG8gb3B0IGludG8gbG9va2luZyBp
bnRvIHRoZSByb290ZGlyIHBhcmVudAotICAgICAgICAgICAgICAgICMgZGlyZWN0b3JpZXMgaW5z
dGVhZCBvZiByZXF1aXJpbmcgdG8gc3BlY2lmeSBjb25mY3V0ZGlyCi0gICAgICAgICAgICAgICAg
Y2xpc3QgPSBbXQotICAgICAgICAgICAgICAgIGZvciBwYXJlbnQgaW4gcGF0aC5wYXJ0cygpOgot
ICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLl9jb25mY3V0ZGlyIGFuZCBzZWxmLl9jb25mY3V0
ZGlyLnJlbHRvKHBhcmVudCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAg
ICAgICAgICAgICAgICAgICBjb25mdGVzdHBhdGggPSBwYXJlbnQuam9pbigiY29uZnRlc3QucHki
KQotICAgICAgICAgICAgICAgICAgICBpZiBjb25mdGVzdHBhdGguaXNmaWxlKCk6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBtb2QgPSBzZWxmLl9pbXBvcnRjb25mdGVzdChjb25mdGVzdHBhdGgp
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjbGlzdC5hcHBlbmQobW9kKQotCi0gICAgICAgICAg
ICBzZWxmLl9wYXRoMmNvbmZtb2RzW3BhdGhdID0gY2xpc3QKLSAgICAgICAgICAgIHJldHVybiBj
bGlzdAotCi0gICAgZGVmIF9yZ2V0X3dpdGhfY29uZm1vZChzZWxmLCBuYW1lLCBwYXRoKToKLSAg
ICAgICAgbW9kdWxlcyA9IHNlbGYuX2dldGNvbmZ0ZXN0bW9kdWxlcyhwYXRoKQotICAgICAgICBm
b3IgbW9kIGluIHJldmVyc2VkKG1vZHVsZXMpOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAg
ICAgICAgIHJldHVybiBtb2QsIGdldGF0dHIobW9kLCBuYW1lKQotICAgICAgICAgICAgZXhjZXB0
IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgIHJhaXNl
IEtleUVycm9yKG5hbWUpCi0KLSAgICBkZWYgX2ltcG9ydGNvbmZ0ZXN0KHNlbGYsIGNvbmZ0ZXN0
cGF0aCk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9jb25mdGVzdHBh
dGgybW9kW2NvbmZ0ZXN0cGF0aF0KLSAgICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAg
ICAgcGtncGF0aCA9IGNvbmZ0ZXN0cGF0aC5weXBrZ3BhdGgoKQotICAgICAgICAgICAgaWYgcGtn
cGF0aCBpcyBOb25lOgotICAgICAgICAgICAgICAgIF9lbnN1cmVfcmVtb3ZlZF9zeXNtb2R1bGUo
Y29uZnRlc3RwYXRoLnB1cmViYXNlbmFtZSkKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAg
ICAgICBtb2QgPSBjb25mdGVzdHBhdGgucHlpbXBvcnQoKQotICAgICAgICAgICAgZXhjZXB0IEV4
Y2VwdGlvbjoKLSAgICAgICAgICAgICAgICByYWlzZSBDb25mdGVzdEltcG9ydEZhaWx1cmUoY29u
ZnRlc3RwYXRoLCBzeXMuZXhjX2luZm8oKSkKLQotICAgICAgICAgICAgc2VsZi5fY29uZnRlc3Rf
cGx1Z2lucy5hZGQobW9kKQotICAgICAgICAgICAgc2VsZi5fY29uZnRlc3RwYXRoMm1vZFtjb25m
dGVzdHBhdGhdID0gbW9kCi0gICAgICAgICAgICBkaXJwYXRoID0gY29uZnRlc3RwYXRoLmRpcnBh
dGgoKQotICAgICAgICAgICAgaWYgZGlycGF0aCBpbiBzZWxmLl9wYXRoMmNvbmZtb2RzOgotICAg
ICAgICAgICAgICAgIGZvciBwYXRoLCBtb2RzIGluIHNlbGYuX3BhdGgyY29uZm1vZHMuaXRlbXMo
KToKLSAgICAgICAgICAgICAgICAgICAgaWYgcGF0aCBhbmQgcGF0aC5yZWx0byhkaXJwYXRoKSBv
ciBwYXRoID09IGRpcnBhdGg6Ci0gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQgbW9kIG5v
dCBpbiBtb2RzCi0gICAgICAgICAgICAgICAgICAgICAgICBtb2RzLmFwcGVuZChtb2QpCi0gICAg
ICAgICAgICBzZWxmLnRyYWNlKCJsb2FkZWQgY29uZnRlc3Rtb2R1bGUgJXIiICUobW9kKSkKLSAg
ICAgICAgICAgIHNlbGYuY29uc2lkZXJfY29uZnRlc3QobW9kKQotICAgICAgICAgICAgcmV0dXJu
IG1vZAotCi0gICAgIwotICAgICMgQVBJIGZvciBib290c3RyYXBwaW5nIHBsdWdpbiBsb2FkaW5n
Ci0gICAgIwotICAgICMKLQotICAgIGRlZiBjb25zaWRlcl9wcmVwYXJzZShzZWxmLCBhcmdzKToK
LSAgICAgICAgZm9yIG9wdDEsb3B0MiBpbiB6aXAoYXJncywgYXJnc1sxOl0pOgotICAgICAgICAg
ICAgaWYgb3B0MSA9PSAiLXAiOgotICAgICAgICAgICAgICAgIHNlbGYuY29uc2lkZXJfcGx1Z2lu
YXJnKG9wdDIpCi0KLSAgICBkZWYgY29uc2lkZXJfcGx1Z2luYXJnKHNlbGYsIGFyZyk6Ci0gICAg
ICAgIGlmIGFyZy5zdGFydHN3aXRoKCJubzoiKToKLSAgICAgICAgICAgIG5hbWUgPSBhcmdbMzpd
Ci0gICAgICAgICAgICBzZWxmLnNldF9ibG9ja2VkKG5hbWUpCi0gICAgICAgICAgICBpZiBub3Qg
bmFtZS5zdGFydHN3aXRoKCJweXRlc3RfIik6Ci0gICAgICAgICAgICAgICAgc2VsZi5zZXRfYmxv
Y2tlZCgicHl0ZXN0XyIgKyBuYW1lKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5p
bXBvcnRfcGx1Z2luKGFyZykKLQotICAgIGRlZiBjb25zaWRlcl9jb25mdGVzdChzZWxmLCBjb25m
dGVzdG1vZHVsZSk6Ci0gICAgICAgIGlmIHNlbGYucmVnaXN0ZXIoY29uZnRlc3Rtb2R1bGUsIG5h
bWU9Y29uZnRlc3Rtb2R1bGUuX19maWxlX18pOgotICAgICAgICAgICAgc2VsZi5jb25zaWRlcl9t
b2R1bGUoY29uZnRlc3Rtb2R1bGUpCi0KLSAgICBkZWYgY29uc2lkZXJfZW52KHNlbGYpOgotICAg
ICAgICBzZWxmLl9pbXBvcnRfcGx1Z2luX3NwZWNzKG9zLmVudmlyb24uZ2V0KCJQWVRFU1RfUExV
R0lOUyIpKQotCi0gICAgZGVmIGNvbnNpZGVyX21vZHVsZShzZWxmLCBtb2QpOgotICAgICAgICBz
ZWxmLl9pbXBvcnRfcGx1Z2luX3NwZWNzKGdldGF0dHIobW9kLCAicHl0ZXN0X3BsdWdpbnMiLCBO
b25lKSkKLQotICAgIGRlZiBfaW1wb3J0X3BsdWdpbl9zcGVjcyhzZWxmLCBzcGVjKToKLSAgICAg
ICAgaWYgc3BlYzoKLSAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uoc3BlYywgc3RyKToKLSAgICAg
ICAgICAgICAgICBzcGVjID0gc3BlYy5zcGxpdCgiLCIpCi0gICAgICAgICAgICBmb3IgaW1wb3J0
X3NwZWMgaW4gc3BlYzoKLSAgICAgICAgICAgICAgICBzZWxmLmltcG9ydF9wbHVnaW4oaW1wb3J0
X3NwZWMpCi0KLSAgICBkZWYgaW1wb3J0X3BsdWdpbihzZWxmLCBtb2RuYW1lKToKLSAgICAgICAg
IyBtb3N0IG9mdGVuIG1vZG5hbWUgcmVmZXJzIHRvIGJ1aWx0aW4gbW9kdWxlcywgZS5nLiAicHl0
ZXN0ZXIiLAotICAgICAgICAjICJ0ZXJtaW5hbCIgb3IgImNhcHR1cmUiLiAgVGhvc2UgcGx1Z2lu
cyBhcmUgcmVnaXN0ZXJlZCB1bmRlciB0aGVpcgotICAgICAgICAjIGJhc2VuYW1lIGZvciBoaXN0
b3JpYyBwdXJwb3NlcyBidXQgbXVzdCBiZSBpbXBvcnRlZCB3aXRoIHRoZQotICAgICAgICAjIF9w
eXRlc3QgcHJlZml4LgotICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShtb2RuYW1lLCBzdHIpCi0g
ICAgICAgIGlmIHNlbGYuZ2V0X3BsdWdpbihtb2RuYW1lKSBpcyBub3QgTm9uZToKLSAgICAgICAg
ICAgIHJldHVybgotICAgICAgICBpZiBtb2RuYW1lIGluIGJ1aWx0aW5fcGx1Z2luczoKLSAgICAg
ICAgICAgIGltcG9ydHNwZWMgPSAiX3B5dGVzdC4iICsgbW9kbmFtZQotICAgICAgICBlbHNlOgot
ICAgICAgICAgICAgaW1wb3J0c3BlYyA9IG1vZG5hbWUKLSAgICAgICAgdHJ5OgotICAgICAgICAg
ICAgX19pbXBvcnRfXyhpbXBvcnRzcGVjKQotICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IgYXMg
ZToKLSAgICAgICAgICAgIG5ld19leGMgPSBJbXBvcnRFcnJvcignRXJyb3IgaW1wb3J0aW5nIHBs
dWdpbiAiJXMiOiAlcycgJSAobW9kbmFtZSwgZSkpCi0gICAgICAgICAgICAjIGNvcHkgb3ZlciBu
YW1lIGFuZCBwYXRoIGF0dHJpYnV0ZXMKLSAgICAgICAgICAgIGZvciBhdHRyIGluICgnbmFtZScs
ICdwYXRoJyk6Ci0gICAgICAgICAgICAgICAgaWYgaGFzYXR0cihlLCBhdHRyKToKLSAgICAgICAg
ICAgICAgICAgICAgc2V0YXR0cihuZXdfZXhjLCBhdHRyLCBnZXRhdHRyKGUsIGF0dHIpKQotICAg
ICAgICAgICAgcmFpc2UgbmV3X2V4YwotICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6Ci0g
ICAgICAgICAgICBpbXBvcnQgcHl0ZXN0Ci0gICAgICAgICAgICBpZiBub3QgaGFzYXR0cihweXRl
c3QsICdza2lwJykgb3Igbm90IGlzaW5zdGFuY2UoZSwgcHl0ZXN0LnNraXAuRXhjZXB0aW9uKToK
LSAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICAgICAgc2VsZi5fd2Fybigic2tpcHBlZCBw
bHVnaW4gJXI6ICVzIiAlKChtb2RuYW1lLCBlLm1zZykpKQotICAgICAgICBlbHNlOgotICAgICAg
ICAgICAgbW9kID0gc3lzLm1vZHVsZXNbaW1wb3J0c3BlY10KLSAgICAgICAgICAgIHNlbGYucmVn
aXN0ZXIobW9kLCBtb2RuYW1lKQotICAgICAgICAgICAgc2VsZi5jb25zaWRlcl9tb2R1bGUobW9k
KQotCi0KLWNsYXNzIFBhcnNlcjoKLSAgICAiIiIgUGFyc2VyIGZvciBjb21tYW5kIGxpbmUgYXJn
dW1lbnRzIGFuZCBpbmktZmlsZSB2YWx1ZXMuCi0KLSAgICA6aXZhciBleHRyYV9pbmZvOiBkaWN0
IG9mIGdlbmVyaWMgcGFyYW0gLT4gdmFsdWUgdG8gZGlzcGxheSBpbiBjYXNlCi0gICAgICAgIHRo
ZXJlJ3MgYW4gZXJyb3IgcHJvY2Vzc2luZyB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4KLSAg
ICAiIiIKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCB1c2FnZT1Ob25lLCBwcm9jZXNzb3B0PU5v
bmUpOgotICAgICAgICBzZWxmLl9hbm9ueW1vdXMgPSBPcHRpb25Hcm91cCgiY3VzdG9tIG9wdGlv
bnMiLCBwYXJzZXI9c2VsZikKLSAgICAgICAgc2VsZi5fZ3JvdXBzID0gW10KLSAgICAgICAgc2Vs
Zi5fcHJvY2Vzc29wdCA9IHByb2Nlc3NvcHQKLSAgICAgICAgc2VsZi5fdXNhZ2UgPSB1c2FnZQot
ICAgICAgICBzZWxmLl9pbmlkaWN0ID0ge30KLSAgICAgICAgc2VsZi5faW5pbmFtZXMgPSBbXQot
ICAgICAgICBzZWxmLmV4dHJhX2luZm8gPSB7fQotCi0gICAgZGVmIHByb2Nlc3NvcHRpb24oc2Vs
Ziwgb3B0aW9uKToKLSAgICAgICAgaWYgc2VsZi5fcHJvY2Vzc29wdDoKLSAgICAgICAgICAgIGlm
IG9wdGlvbi5kZXN0OgotICAgICAgICAgICAgICAgIHNlbGYuX3Byb2Nlc3NvcHQob3B0aW9uKQot
Ci0gICAgZGVmIGdldGdyb3VwKHNlbGYsIG5hbWUsIGRlc2NyaXB0aW9uPSIiLCBhZnRlcj1Ob25l
KToKLSAgICAgICAgIiIiIGdldCAob3IgY3JlYXRlKSBhIG5hbWVkIG9wdGlvbiBHcm91cC4KLQot
ICAgICAgICA6bmFtZTogbmFtZSBvZiB0aGUgb3B0aW9uIGdyb3VwLgotICAgICAgICA6ZGVzY3Jp
cHRpb246IGxvbmcgZGVzY3JpcHRpb24gZm9yIC0taGVscCBvdXRwdXQuCi0gICAgICAgIDphZnRl
cjogbmFtZSBvZiBvdGhlciBncm91cCwgdXNlZCBmb3Igb3JkZXJpbmcgLS1oZWxwIG91dHB1dC4K
LQotICAgICAgICBUaGUgcmV0dXJuZWQgZ3JvdXAgb2JqZWN0IGhhcyBhbiBgYGFkZG9wdGlvbmBg
IG1ldGhvZCB3aXRoIHRoZSBzYW1lCi0gICAgICAgIHNpZ25hdHVyZSBhcyA6cHk6ZnVuYzpgcGFy
c2VyLmFkZG9wdGlvbgotICAgICAgICA8X3B5dGVzdC5jb25maWcuUGFyc2VyLmFkZG9wdGlvbj5g
IGJ1dCB3aWxsIGJlIHNob3duIGluIHRoZQotICAgICAgICByZXNwZWN0aXZlIGdyb3VwIGluIHRo
ZSBvdXRwdXQgb2YgYGBweXRlc3QuIC0taGVscGBgLgotICAgICAgICAiIiIKLSAgICAgICAgZm9y
IGdyb3VwIGluIHNlbGYuX2dyb3VwczoKLSAgICAgICAgICAgIGlmIGdyb3VwLm5hbWUgPT0gbmFt
ZToKLSAgICAgICAgICAgICAgICByZXR1cm4gZ3JvdXAKLSAgICAgICAgZ3JvdXAgPSBPcHRpb25H
cm91cChuYW1lLCBkZXNjcmlwdGlvbiwgcGFyc2VyPXNlbGYpCi0gICAgICAgIGkgPSAwCi0gICAg
ICAgIGZvciBpLCBncnAgaW4gZW51bWVyYXRlKHNlbGYuX2dyb3Vwcyk6Ci0gICAgICAgICAgICBp
ZiBncnAubmFtZSA9PSBhZnRlcjoKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICBzZWxm
Ll9ncm91cHMuaW5zZXJ0KGkrMSwgZ3JvdXApCi0gICAgICAgIHJldHVybiBncm91cAotCi0gICAg
ZGVmIGFkZG9wdGlvbihzZWxmLCAqb3B0cywgKiphdHRycyk6Ci0gICAgICAgICIiIiByZWdpc3Rl
ciBhIGNvbW1hbmQgbGluZSBvcHRpb24uCi0KLSAgICAgICAgOm9wdHM6IG9wdGlvbiBuYW1lcywg
Y2FuIGJlIHNob3J0IG9yIGxvbmcgb3B0aW9ucy4KLSAgICAgICAgOmF0dHJzOiBzYW1lIGF0dHJp
YnV0ZXMgd2hpY2ggdGhlIGBgYWRkX29wdGlvbigpYGAgZnVuY3Rpb24gb2YgdGhlCi0gICAgICAg
ICAgIGBhcmdwYXJzZSBsaWJyYXJ5Ci0gICAgICAgICAgIDxodHRwOi8vZG9jcy5weXRob24ub3Jn
LzIvbGlicmFyeS9hcmdwYXJzZS5odG1sPmBfCi0gICAgICAgICAgIGFjY2VwdHMuCi0KLSAgICAg
ICAgQWZ0ZXIgY29tbWFuZCBsaW5lIHBhcnNpbmcgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIG9uIHRo
ZSBweXRlc3QgY29uZmlnCi0gICAgICAgIG9iamVjdCB2aWEgYGBjb25maWcub3B0aW9uLk5BTUVg
YCB3aGVyZSBgYE5BTUVgYCBpcyB1c3VhbGx5IHNldAotICAgICAgICBieSBwYXNzaW5nIGEgYGBk
ZXN0YGAgYXR0cmlidXRlLCBmb3IgZXhhbXBsZQotICAgICAgICBgYGFkZG9wdGlvbigiLS1sb25n
IiwgZGVzdD0iTkFNRSIsIC4uLilgYC4KLSAgICAgICAgIiIiCi0gICAgICAgIHNlbGYuX2Fub255
bW91cy5hZGRvcHRpb24oKm9wdHMsICoqYXR0cnMpCi0KLSAgICBkZWYgcGFyc2Uoc2VsZiwgYXJn
cywgbmFtZXNwYWNlPU5vbmUpOgotICAgICAgICBmcm9tIF9weXRlc3QuX2FyZ2NvbXBsZXRlIGlt
cG9ydCB0cnlfYXJnY29tcGxldGUKLSAgICAgICAgc2VsZi5vcHRwYXJzZXIgPSBzZWxmLl9nZXRw
YXJzZXIoKQotICAgICAgICB0cnlfYXJnY29tcGxldGUoc2VsZi5vcHRwYXJzZXIpCi0gICAgICAg
IHJldHVybiBzZWxmLm9wdHBhcnNlci5wYXJzZV9hcmdzKFtzdHIoeCkgZm9yIHggaW4gYXJnc10s
IG5hbWVzcGFjZT1uYW1lc3BhY2UpCi0KLSAgICBkZWYgX2dldHBhcnNlcihzZWxmKToKLSAgICAg
ICAgZnJvbSBfcHl0ZXN0Ll9hcmdjb21wbGV0ZSBpbXBvcnQgZmlsZXNjb21wbGV0ZXIKLSAgICAg
ICAgb3B0cGFyc2VyID0gTXlPcHRpb25QYXJzZXIoc2VsZiwgc2VsZi5leHRyYV9pbmZvKQotICAg
ICAgICBncm91cHMgPSBzZWxmLl9ncm91cHMgKyBbc2VsZi5fYW5vbnltb3VzXQotICAgICAgICBm
b3IgZ3JvdXAgaW4gZ3JvdXBzOgotICAgICAgICAgICAgaWYgZ3JvdXAub3B0aW9uczoKLSAgICAg
ICAgICAgICAgICBkZXNjID0gZ3JvdXAuZGVzY3JpcHRpb24gb3IgZ3JvdXAubmFtZQotICAgICAg
ICAgICAgICAgIGFyZ2dyb3VwID0gb3B0cGFyc2VyLmFkZF9hcmd1bWVudF9ncm91cChkZXNjKQot
ICAgICAgICAgICAgICAgIGZvciBvcHRpb24gaW4gZ3JvdXAub3B0aW9uczoKLSAgICAgICAgICAg
ICAgICAgICAgbiA9IG9wdGlvbi5uYW1lcygpCi0gICAgICAgICAgICAgICAgICAgIGEgPSBvcHRp
b24uYXR0cnMoKQotICAgICAgICAgICAgICAgICAgICBhcmdncm91cC5hZGRfYXJndW1lbnQoKm4s
ICoqYSkKLSAgICAgICAgIyBiYXNoIGxpa2UgYXV0b2NvbXBsZXRpb24gZm9yIGRpcnMgKGFwcGVu
ZGluZyAnLycpCi0gICAgICAgIG9wdHBhcnNlci5hZGRfYXJndW1lbnQoRklMRV9PUl9ESVIsIG5h
cmdzPScqJykuY29tcGxldGVyPWZpbGVzY29tcGxldGVyCi0gICAgICAgIHJldHVybiBvcHRwYXJz
ZXIKLQotICAgIGRlZiBwYXJzZV9zZXRvcHRpb24oc2VsZiwgYXJncywgb3B0aW9uLCBuYW1lc3Bh
Y2U9Tm9uZSk6Ci0gICAgICAgIHBhcnNlZG9wdGlvbiA9IHNlbGYucGFyc2UoYXJncywgbmFtZXNw
YWNlPW5hbWVzcGFjZSkKLSAgICAgICAgZm9yIG5hbWUsIHZhbHVlIGluIHBhcnNlZG9wdGlvbi5f
X2RpY3RfXy5pdGVtcygpOgotICAgICAgICAgICAgc2V0YXR0cihvcHRpb24sIG5hbWUsIHZhbHVl
KQotICAgICAgICByZXR1cm4gZ2V0YXR0cihwYXJzZWRvcHRpb24sIEZJTEVfT1JfRElSKQotCi0g
ICAgZGVmIHBhcnNlX2tub3duX2FyZ3Moc2VsZiwgYXJncywgbmFtZXNwYWNlPU5vbmUpOgotICAg
ICAgICAiIiJwYXJzZXMgYW5kIHJldHVybnMgYSBuYW1lc3BhY2Ugb2JqZWN0IHdpdGgga25vd24g
YXJndW1lbnRzIGF0IHRoaXMKLSAgICAgICAgcG9pbnQuCi0gICAgICAgICIiIgotICAgICAgICBy
ZXR1cm4gc2VsZi5wYXJzZV9rbm93bl9hbmRfdW5rbm93bl9hcmdzKGFyZ3MsIG5hbWVzcGFjZT1u
YW1lc3BhY2UpWzBdCi0KLSAgICBkZWYgcGFyc2Vfa25vd25fYW5kX3Vua25vd25fYXJncyhzZWxm
LCBhcmdzLCBuYW1lc3BhY2U9Tm9uZSk6Ci0gICAgICAgICIiInBhcnNlcyBhbmQgcmV0dXJucyBh
IG5hbWVzcGFjZSBvYmplY3Qgd2l0aCBrbm93biBhcmd1bWVudHMsIGFuZAotICAgICAgICB0aGUg
cmVtYWluaW5nIGFyZ3VtZW50cyB1bmtub3duIGF0IHRoaXMgcG9pbnQuCi0gICAgICAgICIiIgot
ICAgICAgICBvcHRwYXJzZXIgPSBzZWxmLl9nZXRwYXJzZXIoKQotICAgICAgICBhcmdzID0gW3N0
cih4KSBmb3IgeCBpbiBhcmdzXQotICAgICAgICByZXR1cm4gb3B0cGFyc2VyLnBhcnNlX2tub3du
X2FyZ3MoYXJncywgbmFtZXNwYWNlPW5hbWVzcGFjZSkKLQotICAgIGRlZiBhZGRpbmkoc2VsZiwg
bmFtZSwgaGVscCwgdHlwZT1Ob25lLCBkZWZhdWx0PU5vbmUpOgotICAgICAgICAiIiIgcmVnaXN0
ZXIgYW4gaW5pLWZpbGUgb3B0aW9uLgotCi0gICAgICAgIDpuYW1lOiBuYW1lIG9mIHRoZSBpbmkt
dmFyaWFibGUKLSAgICAgICAgOnR5cGU6IHR5cGUgb2YgdGhlIHZhcmlhYmxlLCBjYW4gYmUgYGBw
YXRobGlzdGBgLCBgYGFyZ3NgYCwgYGBsaW5lbGlzdGBgCi0gICAgICAgICAgICAgICBvciBgYGJv
b2xgYC4KLSAgICAgICAgOmRlZmF1bHQ6IGRlZmF1bHQgdmFsdWUgaWYgbm8gaW5pLWZpbGUgb3B0
aW9uIGV4aXN0cyBidXQgaXMgcXVlcmllZC4KLQotICAgICAgICBUaGUgdmFsdWUgb2YgaW5pLXZh
cmlhYmxlcyBjYW4gYmUgcmV0cmlldmVkIHZpYSBhIGNhbGwgdG8KLSAgICAgICAgOnB5OmZ1bmM6
YGNvbmZpZy5nZXRpbmkobmFtZSkgPF9weXRlc3QuY29uZmlnLkNvbmZpZy5nZXRpbmk+YC4KLSAg
ICAgICAgIiIiCi0gICAgICAgIGFzc2VydCB0eXBlIGluIChOb25lLCAicGF0aGxpc3QiLCAiYXJn
cyIsICJsaW5lbGlzdCIsICJib29sIikKLSAgICAgICAgc2VsZi5faW5pZGljdFtuYW1lXSA9ICho
ZWxwLCB0eXBlLCBkZWZhdWx0KQotICAgICAgICBzZWxmLl9pbmluYW1lcy5hcHBlbmQobmFtZSkK
LQotCi1jbGFzcyBBcmd1bWVudEVycm9yKEV4Y2VwdGlvbik6Ci0gICAgIiIiCi0gICAgUmFpc2Vk
IGlmIGFuIEFyZ3VtZW50IGluc3RhbmNlIGlzIGNyZWF0ZWQgd2l0aCBpbnZhbGlkIG9yCi0gICAg
aW5jb25zaXN0ZW50IGFyZ3VtZW50cy4KLSAgICAiIiIKLQotICAgIGRlZiBfX2luaXRfXyhzZWxm
LCBtc2csIG9wdGlvbik6Ci0gICAgICAgIHNlbGYubXNnID0gbXNnCi0gICAgICAgIHNlbGYub3B0
aW9uX2lkID0gc3RyKG9wdGlvbikKLQotICAgIGRlZiBfX3N0cl9fKHNlbGYpOgotICAgICAgICBp
ZiBzZWxmLm9wdGlvbl9pZDoKLSAgICAgICAgICAgIHJldHVybiAib3B0aW9uICVzOiAlcyIgJSAo
c2VsZi5vcHRpb25faWQsIHNlbGYubXNnKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0
dXJuIHNlbGYubXNnCi0KLQotY2xhc3MgQXJndW1lbnQ6Ci0gICAgIiIiY2xhc3MgdGhhdCBtaW1p
Y3MgdGhlIG5lY2Vzc2FyeSBiZWhhdmlvdXIgb2Ygb3B0cGFyc2UuT3B0aW9uICIiIgotICAgIF90
eXBfbWFwID0gewotICAgICAgICAnaW50JzogaW50LAotICAgICAgICAnc3RyaW5nJzogc3RyLAot
ICAgICAgICB9Ci0gICAgIyBlbmFibGUgYWZ0ZXIgc29tZSBncmFjZSBwZXJpb2QgZm9yIHBsdWdp
biB3cml0ZXJzCi0gICAgVFlQRV9XQVJOID0gRmFsc2UKLQotICAgIGRlZiBfX2luaXRfXyhzZWxm
LCAqbmFtZXMsICoqYXR0cnMpOgotICAgICAgICAiIiJzdG9yZSBwYXJtcyBpbiBwcml2YXRlIHZh
cnMgZm9yIHVzZSBpbiBhZGRfYXJndW1lbnQiIiIKLSAgICAgICAgc2VsZi5fYXR0cnMgPSBhdHRy
cwotICAgICAgICBzZWxmLl9zaG9ydF9vcHRzID0gW10KLSAgICAgICAgc2VsZi5fbG9uZ19vcHRz
ID0gW10KLSAgICAgICAgc2VsZi5kZXN0ID0gYXR0cnMuZ2V0KCdkZXN0JykKLSAgICAgICAgaWYg
c2VsZi5UWVBFX1dBUk46Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgaGVscCA9
IGF0dHJzWydoZWxwJ10KLSAgICAgICAgICAgICAgICBpZiAnJWRlZmF1bHQnIGluIGhlbHA6Ci0g
ICAgICAgICAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oCi0gICAgICAgICAgICAgICAgICAgICAg
ICAncHl0ZXN0IG5vdyB1c2VzIGFyZ3BhcnNlLiAiJWRlZmF1bHQiIHNob3VsZCBiZScKLSAgICAg
ICAgICAgICAgICAgICAgICAgICcgY2hhbmdlZCB0byAiJShkZWZhdWx0KXMiICcsCi0gICAgICAg
ICAgICAgICAgICAgICAgICBGdXR1cmVXYXJuaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAg
c3RhY2tsZXZlbD0zKQotICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAgICAg
ICAgIHBhc3MKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgdHlwID0gYXR0cnNbJ3R5cGUnXQot
ICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGVsc2U6
Ci0gICAgICAgICAgICAjIHRoaXMgbWlnaHQgcmFpc2UgYSBrZXllcnJvciBhcyB3ZWxsLCBkb24n
dCB3YW50IHRvIGNhdGNoIHRoYXQKLSAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodHlwLCBweS5i
dWlsdGluLl9iYXNlc3RyaW5nKToKLSAgICAgICAgICAgICAgICBpZiB0eXAgPT0gJ2Nob2ljZSc6
Ci0gICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuVFlQRV9XQVJOOgotICAgICAgICAgICAgICAg
ICAgICAgICAgd2FybmluZ3Mud2FybigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAndHlw
ZSBhcmd1bWVudCB0byBhZGRvcHRpb24oKSBpcyBhIHN0cmluZyAlci4nCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJyBGb3IgcGFyc2VhcmcgdGhpcyBpcyBvcHRpb25hbCBhbmQgd2hlbiBz
dXBwbGllZCAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJyBzaG91bGQgYmUgYSB0eXBl
LicKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIChvcHRpb25zOiAlcyknICUgKHR5cCwg
bmFtZXMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1dHVyZVdhcm5pbmcsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tsZXZlbD0zKQotICAgICAgICAgICAgICAgICAg
ICAjIGFyZ3BhcnNlIGV4cGVjdHMgYSB0eXBlIGhlcmUgdGFrZSBpdCBmcm9tCi0gICAgICAgICAg
ICAgICAgICAgICMgdGhlIHR5cGUgb2YgdGhlIGZpcnN0IGVsZW1lbnQKLSAgICAgICAgICAgICAg
ICAgICAgYXR0cnNbJ3R5cGUnXSA9IHR5cGUoYXR0cnNbJ2Nob2ljZXMnXVswXSkKLSAgICAgICAg
ICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLlRZUEVfV0FSTjoKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJ3R5cGUgYXJndW1lbnQgdG8gYWRkb3B0aW9uKCkgaXMgYSBzdHJpbmcgJXIuJwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgRm9yIHBhcnNlYXJnIHRoaXMgc2hvdWxkIGJl
IGEgdHlwZS4nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAob3B0aW9uczogJXMpJyAl
ICh0eXAsIG5hbWVzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBGdXR1cmVXYXJuaW5n
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrbGV2ZWw9MykKLSAgICAgICAgICAg
ICAgICAgICAgYXR0cnNbJ3R5cGUnXSA9IEFyZ3VtZW50Ll90eXBfbWFwW3R5cF0KLSAgICAgICAg
ICAgICAgICAjIHVzZWQgaW4gdGVzdF9wYXJzZW9wdCAtPiB0ZXN0X3BhcnNlX2RlZmF1bHRnZXR0
ZXIKLSAgICAgICAgICAgICAgICBzZWxmLnR5cGUgPSBhdHRyc1sndHlwZSddCi0gICAgICAgICAg
ICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYudHlwZSA9IHR5cAotICAgICAgICB0cnk6Ci0g
ICAgICAgICAgICAjIGF0dHJpYnV0ZSBleGlzdGVuY2UgaXMgdGVzdGVkIGluIENvbmZpZy5fcHJv
Y2Vzc29wdAotICAgICAgICAgICAgc2VsZi5kZWZhdWx0ID0gYXR0cnNbJ2RlZmF1bHQnXQotICAg
ICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIHNlbGYuX3Nl
dF9vcHRfc3RyaW5ncyhuYW1lcykKLSAgICAgICAgaWYgbm90IHNlbGYuZGVzdDoKLSAgICAgICAg
ICAgIGlmIHNlbGYuX2xvbmdfb3B0czoKLSAgICAgICAgICAgICAgICBzZWxmLmRlc3QgPSBzZWxm
Ll9sb25nX29wdHNbMF1bMjpdLnJlcGxhY2UoJy0nLCAnXycpCi0gICAgICAgICAgICBlbHNlOgot
ICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5kZXN0ID0gc2Vs
Zi5fc2hvcnRfb3B0c1swXVsxOl0KLSAgICAgICAgICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoK
LSAgICAgICAgICAgICAgICAgICAgcmFpc2UgQXJndW1lbnRFcnJvcigKLSAgICAgICAgICAgICAg
ICAgICAgICAgICduZWVkIGEgbG9uZyBvciBzaG9ydCBvcHRpb24nLCBzZWxmKQotCi0gICAgZGVm
IG5hbWVzKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5fc2hvcnRfb3B0cyArIHNlbGYuX2xv
bmdfb3B0cwotCi0gICAgZGVmIGF0dHJzKHNlbGYpOgotICAgICAgICAjIHVwZGF0ZSBhbnkgYXR0
cmlidXRlcyBzZXQgYnkgcHJvY2Vzc29wdAotICAgICAgICBhdHRycyA9ICdkZWZhdWx0IGRlc3Qg
aGVscCcuc3BsaXQoKQotICAgICAgICBpZiBzZWxmLmRlc3Q6Ci0gICAgICAgICAgICBhdHRycy5h
cHBlbmQoc2VsZi5kZXN0KQotICAgICAgICBmb3IgYXR0ciBpbiBhdHRyczoKLSAgICAgICAgICAg
IHRyeToKLSAgICAgICAgICAgICAgICBzZWxmLl9hdHRyc1thdHRyXSA9IGdldGF0dHIoc2VsZiwg
YXR0cikKLSAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgICAgICAg
ICBwYXNzCi0gICAgICAgIGlmIHNlbGYuX2F0dHJzLmdldCgnaGVscCcpOgotICAgICAgICAgICAg
YSA9IHNlbGYuX2F0dHJzWydoZWxwJ10KLSAgICAgICAgICAgIGEgPSBhLnJlcGxhY2UoJyVkZWZh
dWx0JywgJyUoZGVmYXVsdClzJykKLSAgICAgICAgICAgICNhID0gYS5yZXBsYWNlKCclcHJvZycs
ICclKHByb2cpcycpCi0gICAgICAgICAgICBzZWxmLl9hdHRyc1snaGVscCddID0gYQotICAgICAg
ICByZXR1cm4gc2VsZi5fYXR0cnMKLQotICAgIGRlZiBfc2V0X29wdF9zdHJpbmdzKHNlbGYsIG9w
dHMpOgotICAgICAgICAiIiJkaXJlY3RseSBmcm9tIG9wdHBhcnNlCi0KLSAgICAgICAgbWlnaHQg
bm90IGJlIG5lY2Vzc2FyeSBhcyB0aGlzIGlzIHBhc3NlZCB0byBhcmdwYXJzZSBsYXRlciBvbiIi
IgotICAgICAgICBmb3Igb3B0IGluIG9wdHM6Ci0gICAgICAgICAgICBpZiBsZW4ob3B0KSA8IDI6
Ci0gICAgICAgICAgICAgICAgcmFpc2UgQXJndW1lbnRFcnJvcigKLSAgICAgICAgICAgICAgICAg
ICAgImludmFsaWQgb3B0aW9uIHN0cmluZyAlcjogIgotICAgICAgICAgICAgICAgICAgICAibXVz
dCBiZSBhdCBsZWFzdCB0d28gY2hhcmFjdGVycyBsb25nIiAlIG9wdCwgc2VsZikKLSAgICAgICAg
ICAgIGVsaWYgbGVuKG9wdCkgPT0gMjoKLSAgICAgICAgICAgICAgICBpZiBub3QgKG9wdFswXSA9
PSAiLSIgYW5kIG9wdFsxXSAhPSAiLSIpOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBBcmd1
bWVudEVycm9yKAotICAgICAgICAgICAgICAgICAgICAgICAgImludmFsaWQgc2hvcnQgb3B0aW9u
IHN0cmluZyAlcjogIgotICAgICAgICAgICAgICAgICAgICAgICAgIm11c3QgYmUgb2YgdGhlIGZv
cm0gLXgsICh4IGFueSBub24tZGFzaCBjaGFyKSIgJSBvcHQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICBzZWxmKQotICAgICAgICAgICAgICAgIHNlbGYuX3Nob3J0X29wdHMuYXBwZW5kKG9wdCkK
LSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgaWYgbm90IChvcHRbMDoyXSA9PSAi
LS0iIGFuZCBvcHRbMl0gIT0gIi0iKToKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgQXJndW1l
bnRFcnJvcigKLSAgICAgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIGxvbmcgb3B0aW9uIHN0
cmluZyAlcjogIgotICAgICAgICAgICAgICAgICAgICAgICAgIm11c3Qgc3RhcnQgd2l0aCAtLSwg
Zm9sbG93ZWQgYnkgbm9uLWRhc2giICUgb3B0LAotICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
ZikKLSAgICAgICAgICAgICAgICBzZWxmLl9sb25nX29wdHMuYXBwZW5kKG9wdCkKLQotICAgIGRl
ZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgcmV0dmFsID0gJ0FyZ3VtZW50KCcKLSAgICAgICAg
aWYgc2VsZi5fc2hvcnRfb3B0czoKLSAgICAgICAgICAgIHJldHZhbCArPSAnX3Nob3J0X29wdHM6
ICcgKyByZXByKHNlbGYuX3Nob3J0X29wdHMpICsgJywgJwotICAgICAgICBpZiBzZWxmLl9sb25n
X29wdHM6Ci0gICAgICAgICAgICByZXR2YWwgKz0gJ19sb25nX29wdHM6ICcgKyByZXByKHNlbGYu
X2xvbmdfb3B0cykgKyAnLCAnCi0gICAgICAgIHJldHZhbCArPSAnZGVzdDogJyArIHJlcHIoc2Vs
Zi5kZXN0KSArICcsICcKLSAgICAgICAgaWYgaGFzYXR0cihzZWxmLCAndHlwZScpOgotICAgICAg
ICAgICAgcmV0dmFsICs9ICd0eXBlOiAnICsgcmVwcihzZWxmLnR5cGUpICsgJywgJwotICAgICAg
ICBpZiBoYXNhdHRyKHNlbGYsICdkZWZhdWx0Jyk6Ci0gICAgICAgICAgICByZXR2YWwgKz0gJ2Rl
ZmF1bHQ6ICcgKyByZXByKHNlbGYuZGVmYXVsdCkgKyAnLCAnCi0gICAgICAgIGlmIHJldHZhbFst
MjpdID09ICcsICc6ICAjIGFsd2F5cyBsb25nIGVub3VnaCB0byB0ZXN0ICgiQXJndW1lbnQoIiAp
Ci0gICAgICAgICAgICByZXR2YWwgPSByZXR2YWxbOi0yXQotICAgICAgICByZXR2YWwgKz0gJykn
Ci0gICAgICAgIHJldHVybiByZXR2YWwKLQotCi1jbGFzcyBPcHRpb25Hcm91cDoKLSAgICBkZWYg
X19pbml0X18oc2VsZiwgbmFtZSwgZGVzY3JpcHRpb249IiIsIHBhcnNlcj1Ob25lKToKLSAgICAg
ICAgc2VsZi5uYW1lID0gbmFtZQotICAgICAgICBzZWxmLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRp
b24KLSAgICAgICAgc2VsZi5vcHRpb25zID0gW10KLSAgICAgICAgc2VsZi5wYXJzZXIgPSBwYXJz
ZXIKLQotICAgIGRlZiBhZGRvcHRpb24oc2VsZiwgKm9wdG5hbWVzLCAqKmF0dHJzKToKLSAgICAg
ICAgIiIiIGFkZCBhbiBvcHRpb24gdG8gdGhpcyBncm91cC4KLQotICAgICAgICBpZiBhIHNob3J0
ZW5lZCB2ZXJzaW9uIG9mIGEgbG9uZyBvcHRpb24gaXMgc3BlY2lmaWVkIGl0IHdpbGwKLSAgICAg
ICAgYmUgc3VwcHJlc3NlZCBpbiB0aGUgaGVscC4gYWRkb3B0aW9uKCctLXR3b3dvcmRzJywgJy0t
dHdvLXdvcmRzJykKLSAgICAgICAgcmVzdWx0cyBpbiBoZWxwIHNob3dpbmcgJy0tdHdvLXdvcmRz
JyBvbmx5LCBidXQgLS10d293b3JkcyBnZXRzCi0gICAgICAgIGFjY2VwdGVkICoqYW5kKiogdGhl
IGF1dG9tYXRpYyBkZXN0aW5hdGlvbiBpcyBpbiBhcmdzLnR3b3dvcmRzCi0gICAgICAgICIiIgot
ICAgICAgICBvcHRpb24gPSBBcmd1bWVudCgqb3B0bmFtZXMsICoqYXR0cnMpCi0gICAgICAgIHNl
bGYuX2FkZG9wdGlvbl9pbnN0YW5jZShvcHRpb24sIHNob3J0dXBwZXI9RmFsc2UpCi0KLSAgICBk
ZWYgX2FkZG9wdGlvbihzZWxmLCAqb3B0bmFtZXMsICoqYXR0cnMpOgotICAgICAgICBvcHRpb24g
PSBBcmd1bWVudCgqb3B0bmFtZXMsICoqYXR0cnMpCi0gICAgICAgIHNlbGYuX2FkZG9wdGlvbl9p
bnN0YW5jZShvcHRpb24sIHNob3J0dXBwZXI9VHJ1ZSkKLQotICAgIGRlZiBfYWRkb3B0aW9uX2lu
c3RhbmNlKHNlbGYsIG9wdGlvbiwgc2hvcnR1cHBlcj1GYWxzZSk6Ci0gICAgICAgIGlmIG5vdCBz
aG9ydHVwcGVyOgotICAgICAgICAgICAgZm9yIG9wdCBpbiBvcHRpb24uX3Nob3J0X29wdHM6Ci0g
ICAgICAgICAgICAgICAgaWYgb3B0WzBdID09ICctJyBhbmQgb3B0WzFdLmlzbG93ZXIoKToKLSAg
ICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigibG93ZXJjYXNlIHNob3J0b3B0aW9u
cyByZXNlcnZlZCIpCi0gICAgICAgIGlmIHNlbGYucGFyc2VyOgotICAgICAgICAgICAgc2VsZi5w
YXJzZXIucHJvY2Vzc29wdGlvbihvcHRpb24pCi0gICAgICAgIHNlbGYub3B0aW9ucy5hcHBlbmQo
b3B0aW9uKQotCi0KLWNsYXNzIE15T3B0aW9uUGFyc2VyKGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2Vy
KToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgcGFyc2VyLCBleHRyYV9pbmZvPU5vbmUpOgotICAg
ICAgICBpZiBub3QgZXh0cmFfaW5mbzoKLSAgICAgICAgICAgIGV4dHJhX2luZm8gPSB7fQotICAg
ICAgICBzZWxmLl9wYXJzZXIgPSBwYXJzZXIKLSAgICAgICAgYXJncGFyc2UuQXJndW1lbnRQYXJz
ZXIuX19pbml0X18oc2VsZiwgdXNhZ2U9cGFyc2VyLl91c2FnZSwKLSAgICAgICAgICAgIGFkZF9o
ZWxwPUZhbHNlLCBmb3JtYXR0ZXJfY2xhc3M9RHJvcFNob3J0ZXJMb25nSGVscEZvcm1hdHRlcikK
LSAgICAgICAgIyBleHRyYV9pbmZvIGlzIGEgZGljdCBvZiAocGFyYW0gLT4gdmFsdWUpIHRvIGRp
c3BsYXkgaWYgdGhlcmUncwotICAgICAgICAjIGFuIHVzYWdlIGVycm9yIHRvIHByb3ZpZGUgbW9y
ZSBjb250ZXh0dWFsIGluZm9ybWF0aW9uIHRvIHRoZSB1c2VyCi0gICAgICAgIHNlbGYuZXh0cmFf
aW5mbyA9IGV4dHJhX2luZm8KLQotICAgIGRlZiBwYXJzZV9hcmdzKHNlbGYsIGFyZ3M9Tm9uZSwg
bmFtZXNwYWNlPU5vbmUpOgotICAgICAgICAiIiJhbGxvdyBzcGxpdHRpbmcgb2YgcG9zaXRpb25h
bCBhcmd1bWVudHMiIiIKLSAgICAgICAgYXJncywgYXJndiA9IHNlbGYucGFyc2Vfa25vd25fYXJn
cyhhcmdzLCBuYW1lc3BhY2UpCi0gICAgICAgIGlmIGFyZ3Y6Ci0gICAgICAgICAgICBmb3IgYXJn
IGluIGFyZ3Y6Ci0gICAgICAgICAgICAgICAgaWYgYXJnIGFuZCBhcmdbMF0gPT0gJy0nOgotICAg
ICAgICAgICAgICAgICAgICBsaW5lcyA9IFsndW5yZWNvZ25pemVkIGFyZ3VtZW50czogJXMnICUg
KCcgJy5qb2luKGFyZ3YpKV0KLSAgICAgICAgICAgICAgICAgICAgZm9yIGssIHYgaW4gc29ydGVk
KHNlbGYuZXh0cmFfaW5mby5pdGVtcygpKToKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVz
LmFwcGVuZCgnICAlczogJXMnICUgKGssIHYpKQotICAgICAgICAgICAgICAgICAgICBzZWxmLmVy
cm9yKCdcbicuam9pbihsaW5lcykpCi0gICAgICAgICAgICBnZXRhdHRyKGFyZ3MsIEZJTEVfT1Jf
RElSKS5leHRlbmQoYXJndikKLSAgICAgICAgcmV0dXJuIGFyZ3MKLQotCi1jbGFzcyBEcm9wU2hv
cnRlckxvbmdIZWxwRm9ybWF0dGVyKGFyZ3BhcnNlLkhlbHBGb3JtYXR0ZXIpOgotICAgICIiInNo
b3J0ZW4gaGVscCBmb3IgbG9uZyBvcHRpb25zIHRoYXQgZGlmZmVyIG9ubHkgaW4gZXh0cmEgaHlw
aGVucwotCi0gICAgLSBjb2xsYXBzZSAqKmxvbmcqKiBvcHRpb25zIHRoYXQgYXJlIHRoZSBzYW1l
IGV4Y2VwdCBmb3IgZXh0cmEgaHlwaGVucwotICAgIC0gc3BlY2lhbCBhY3Rpb24gYXR0cmlidXRl
IG1hcF9sb25nX29wdGlvbiBhbGxvd3Mgc3VycHJlc3NpbmcgYWRkaXRpb25hbAotICAgICAgbG9u
ZyBvcHRpb25zCi0gICAgLSBzaG9ydGN1dCBpZiB0aGVyZSBhcmUgb25seSB0d28gb3B0aW9ucyBh
bmQgb25lIG9mIHRoZW0gaXMgYSBzaG9ydCBvbmUKLSAgICAtIGNhY2hlIHJlc3VsdCBvbiBhY3Rp
b24gb2JqZWN0IGFzIHRoaXMgaXMgY2FsbGVkIGF0IGxlYXN0IDIgdGltZXMKLSAgICAiIiIKLSAg
ICBkZWYgX2Zvcm1hdF9hY3Rpb25faW52b2NhdGlvbihzZWxmLCBhY3Rpb24pOgotICAgICAgICBv
cmdzdHIgPSBhcmdwYXJzZS5IZWxwRm9ybWF0dGVyLl9mb3JtYXRfYWN0aW9uX2ludm9jYXRpb24o
c2VsZiwgYWN0aW9uKQotICAgICAgICBpZiBvcmdzdHIgYW5kIG9yZ3N0clswXSAhPSAnLSc6ICMg
b25seSBvcHRpb25hbCBhcmd1bWVudHMKLSAgICAgICAgICAgIHJldHVybiBvcmdzdHIKLSAgICAg
ICAgcmVzID0gZ2V0YXR0cihhY3Rpb24sICdfZm9ybWF0dGVkX2FjdGlvbl9pbnZvY2F0aW9uJywg
Tm9uZSkKLSAgICAgICAgaWYgcmVzOgotICAgICAgICAgICAgcmV0dXJuIHJlcwotICAgICAgICBv
cHRpb25zID0gb3Jnc3RyLnNwbGl0KCcsICcpCi0gICAgICAgIGlmIGxlbihvcHRpb25zKSA9PSAy
IGFuZCAobGVuKG9wdGlvbnNbMF0pID09IDIgb3IgbGVuKG9wdGlvbnNbMV0pID09IDIpOgotICAg
ICAgICAgICAgIyBhIHNob3J0Y3V0IGZvciAnLWgsIC0taGVscCcgb3IgJy0tYWJjJywgJy1hJwot
ICAgICAgICAgICAgYWN0aW9uLl9mb3JtYXR0ZWRfYWN0aW9uX2ludm9jYXRpb24gPSBvcmdzdHIK
LSAgICAgICAgICAgIHJldHVybiBvcmdzdHIKLSAgICAgICAgcmV0dXJuX2xpc3QgPSBbXQotICAg
ICAgICBvcHRpb25fbWFwID0gIGdldGF0dHIoYWN0aW9uLCAnbWFwX2xvbmdfb3B0aW9uJywge30p
Ci0gICAgICAgIGlmIG9wdGlvbl9tYXAgaXMgTm9uZToKLSAgICAgICAgICAgIG9wdGlvbl9tYXAg
PSB7fQotICAgICAgICBzaG9ydF9sb25nID0ge30KLSAgICAgICAgZm9yIG9wdGlvbiBpbiBvcHRp
b25zOgotICAgICAgICAgICAgaWYgbGVuKG9wdGlvbikgPT0gMiBvciBvcHRpb25bMl0gPT0gJyAn
OgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBpZiBub3Qgb3B0aW9uLnN0
YXJ0c3dpdGgoJy0tJyk6Ci0gICAgICAgICAgICAgICAgcmFpc2UgQXJndW1lbnRFcnJvcignbG9u
ZyBvcHRpb25hbCBhcmd1bWVudCB3aXRob3V0ICItLSI6IFslc10nCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAlIChvcHRpb24pLCBzZWxmKQotICAgICAgICAgICAgeHhvcHRp
b24gPSBvcHRpb25bMjpdCi0gICAgICAgICAgICBpZiB4eG9wdGlvbi5zcGxpdCgpWzBdIG5vdCBp
biBvcHRpb25fbWFwOgotICAgICAgICAgICAgICAgIHNob3J0ZW5lZCA9IHh4b3B0aW9uLnJlcGxh
Y2UoJy0nLCAnJykKLSAgICAgICAgICAgICAgICBpZiBzaG9ydGVuZWQgbm90IGluIHNob3J0X2xv
bmcgb3IgXAotICAgICAgICAgICAgICAgICAgIGxlbihzaG9ydF9sb25nW3Nob3J0ZW5lZF0pIDwg
bGVuKHh4b3B0aW9uKToKLSAgICAgICAgICAgICAgICAgICAgc2hvcnRfbG9uZ1tzaG9ydGVuZWRd
ID0geHhvcHRpb24KLSAgICAgICAgIyBub3cgc2hvcnRfbG9uZyBoYXMgYmVlbiBmaWxsZWQgb3V0
IHRvIHRoZSBsb25nZXN0IHdpdGggZGFzaGVzCi0gICAgICAgICMgKiphbmQqKiB3ZSBrZWVwIHRo
ZSByaWdodCBvcHRpb24gb3JkZXJpbmcgZnJvbSBhZGRfYXJndW1lbnQKLSAgICAgICAgZm9yIG9w
dGlvbiBpbiBvcHRpb25zOiAjCi0gICAgICAgICAgICBpZiBsZW4ob3B0aW9uKSA9PSAyIG9yIG9w
dGlvblsyXSA9PSAnICc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuX2xpc3QuYXBwZW5kKG9wdGlv
bikKLSAgICAgICAgICAgIGlmIG9wdGlvblsyOl0gPT0gc2hvcnRfbG9uZy5nZXQob3B0aW9uLnJl
cGxhY2UoJy0nLCAnJykpOgotICAgICAgICAgICAgICAgIHJldHVybl9saXN0LmFwcGVuZChvcHRp
b24ucmVwbGFjZSgnICcsICc9JykpCi0gICAgICAgIGFjdGlvbi5fZm9ybWF0dGVkX2FjdGlvbl9p
bnZvY2F0aW9uID0gJywgJy5qb2luKHJldHVybl9saXN0KQotICAgICAgICByZXR1cm4gYWN0aW9u
Ll9mb3JtYXR0ZWRfYWN0aW9uX2ludm9jYXRpb24KLQotCi0KLWRlZiBfZW5zdXJlX3JlbW92ZWRf
c3lzbW9kdWxlKG1vZG5hbWUpOgotICAgIHRyeToKLSAgICAgICAgZGVsIHN5cy5tb2R1bGVzW21v
ZG5hbWVdCi0gICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICBwYXNzCi0KLWNsYXNzIENtZE9w
dGlvbnMob2JqZWN0KToKLSAgICAiIiIgaG9sZHMgY21kbGluZSBvcHRpb25zIGFzIGF0dHJpYnV0
ZXMuIiIiCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlcz0oKSk6Ci0gICAgICAgIHNlbGYu
X19kaWN0X18udXBkYXRlKHZhbHVlcykKLSAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAg
IHJldHVybiAiPENtZE9wdGlvbnMgJXI+IiAlKHNlbGYuX19kaWN0X18sKQotICAgIGRlZiBjb3B5
KHNlbGYpOgotICAgICAgICByZXR1cm4gQ21kT3B0aW9ucyhzZWxmLl9fZGljdF9fKQotCi1jbGFz
cyBOb3RzZXQ6Ci0gICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gIjxOT1RT
RVQ+IgotCi1ub3RzZXQgPSBOb3RzZXQoKQotRklMRV9PUl9ESVIgPSAnZmlsZV9vcl9kaXInCi0K
LWNsYXNzIENvbmZpZyhvYmplY3QpOgotICAgICIiIiBhY2Nlc3MgdG8gY29uZmlndXJhdGlvbiB2
YWx1ZXMsIHBsdWdpbm1hbmFnZXIgYW5kIHBsdWdpbiBob29rcy4gICIiIgotCi0gICAgZGVmIF9f
aW5pdF9fKHNlbGYsIHBsdWdpbm1hbmFnZXIpOgotICAgICAgICAjOiBhY2Nlc3MgdG8gY29tbWFu
ZCBsaW5lIG9wdGlvbiBhcyBhdHRyaWJ1dGVzLgotICAgICAgICAjOiAoZGVwcmVjYXRlZCksIHVz
ZSA6cHk6ZnVuYzpgZ2V0b3B0aW9uKCkgPF9weXRlc3QuY29uZmlnLkNvbmZpZy5nZXRvcHRpb24+
YCBpbnN0ZWFkCi0gICAgICAgIHNlbGYub3B0aW9uID0gQ21kT3B0aW9ucygpCi0gICAgICAgIF9h
ID0gRklMRV9PUl9ESVIKLSAgICAgICAgc2VsZi5fcGFyc2VyID0gUGFyc2VyKAotICAgICAgICAg
ICAgdXNhZ2U9IiUlKHByb2cpcyBbb3B0aW9uc10gWyVzXSBbJXNdIFsuLi5dIiAlIChfYSwgX2Ep
LAotICAgICAgICAgICAgcHJvY2Vzc29wdD1zZWxmLl9wcm9jZXNzb3B0LAotICAgICAgICApCi0g
ICAgICAgICM6IGEgcGx1Z2lubWFuYWdlciBpbnN0YW5jZQotICAgICAgICBzZWxmLnBsdWdpbm1h
bmFnZXIgPSBwbHVnaW5tYW5hZ2VyCi0gICAgICAgIHNlbGYudHJhY2UgPSBzZWxmLnBsdWdpbm1h
bmFnZXIudHJhY2Uucm9vdC5nZXQoImNvbmZpZyIpCi0gICAgICAgIHNlbGYuaG9vayA9IHNlbGYu
cGx1Z2lubWFuYWdlci5ob29rCi0gICAgICAgIHNlbGYuX2luaWNhY2hlID0ge30KLSAgICAgICAg
c2VsZi5fb3B0MmRlc3QgPSB7fQotICAgICAgICBzZWxmLl9jbGVhbnVwID0gW10KLSAgICAgICAg
c2VsZi5fd2FybiA9IHNlbGYucGx1Z2lubWFuYWdlci5fd2FybgotICAgICAgICBzZWxmLnBsdWdp
bm1hbmFnZXIucmVnaXN0ZXIoc2VsZiwgInB5dGVzdGNvbmZpZyIpCi0gICAgICAgIHNlbGYuX2Nv
bmZpZ3VyZWQgPSBGYWxzZQotICAgICAgICBkZWYgZG9fc2V0bnMoZGljKToKLSAgICAgICAgICAg
IGltcG9ydCBweXRlc3QKLSAgICAgICAgICAgIHNldG5zKHB5dGVzdCwgZGljKQotICAgICAgICBz
ZWxmLmhvb2sucHl0ZXN0X25hbWVzcGFjZS5jYWxsX2hpc3RvcmljKGRvX3NldG5zLCB7fSkKLSAg
ICAgICAgc2VsZi5ob29rLnB5dGVzdF9hZGRvcHRpb24uY2FsbF9oaXN0b3JpYyhrd2FyZ3M9ZGlj
dChwYXJzZXI9c2VsZi5fcGFyc2VyKSkKLQotICAgIGRlZiBhZGRfY2xlYW51cChzZWxmLCBmdW5j
KToKLSAgICAgICAgIiIiIEFkZCBhIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBjb25m
aWcgb2JqZWN0IGdldHMgb3V0IG9mCi0gICAgICAgIHVzZSAodXN1YWxseSBjb25pbmNpZGluZyB3
aXRoIHB5dGVzdF91bmNvbmZpZ3VyZSkuIiIiCi0gICAgICAgIHNlbGYuX2NsZWFudXAuYXBwZW5k
KGZ1bmMpCi0KLSAgICBkZWYgX2RvX2NvbmZpZ3VyZShzZWxmKToKLSAgICAgICAgYXNzZXJ0IG5v
dCBzZWxmLl9jb25maWd1cmVkCi0gICAgICAgIHNlbGYuX2NvbmZpZ3VyZWQgPSBUcnVlCi0gICAg
ICAgIHNlbGYuaG9vay5weXRlc3RfY29uZmlndXJlLmNhbGxfaGlzdG9yaWMoa3dhcmdzPWRpY3Qo
Y29uZmlnPXNlbGYpKQotCi0gICAgZGVmIF9lbnN1cmVfdW5jb25maWd1cmUoc2VsZik6Ci0gICAg
ICAgIGlmIHNlbGYuX2NvbmZpZ3VyZWQ6Ci0gICAgICAgICAgICBzZWxmLl9jb25maWd1cmVkID0g
RmFsc2UKLSAgICAgICAgICAgIHNlbGYuaG9vay5weXRlc3RfdW5jb25maWd1cmUoY29uZmlnPXNl
bGYpCi0gICAgICAgICAgICBzZWxmLmhvb2sucHl0ZXN0X2NvbmZpZ3VyZS5fY2FsbF9oaXN0b3J5
ID0gW10KLSAgICAgICAgd2hpbGUgc2VsZi5fY2xlYW51cDoKLSAgICAgICAgICAgIGZpbiA9IHNl
bGYuX2NsZWFudXAucG9wKCkKLSAgICAgICAgICAgIGZpbigpCi0KLSAgICBkZWYgd2FybihzZWxm
LCBjb2RlLCBtZXNzYWdlLCBmc2xvY2F0aW9uPU5vbmUpOgotICAgICAgICAiIiIgZ2VuZXJhdGUg
YSB3YXJuaW5nIGZvciB0aGlzIHRlc3Qgc2Vzc2lvbi4gIiIiCi0gICAgICAgIHNlbGYuaG9vay5w
eXRlc3RfbG9nd2FybmluZy5jYWxsX2hpc3RvcmljKGt3YXJncz1kaWN0KAotICAgICAgICAgICAg
Y29kZT1jb2RlLCBtZXNzYWdlPW1lc3NhZ2UsCi0gICAgICAgICAgICBmc2xvY2F0aW9uPWZzbG9j
YXRpb24sIG5vZGVpZD1Ob25lKSkKLQotICAgIGRlZiBnZXRfdGVybWluYWxfd3JpdGVyKHNlbGYp
OgotICAgICAgICByZXR1cm4gc2VsZi5wbHVnaW5tYW5hZ2VyLmdldF9wbHVnaW4oInRlcm1pbmFs
cmVwb3J0ZXIiKS5fdHcKLQotICAgIGRlZiBweXRlc3RfY21kbGluZV9wYXJzZShzZWxmLCBwbHVn
aW5tYW5hZ2VyLCBhcmdzKToKLSAgICAgICAgIyBSRUYxIGFzc2VydCBzZWxmID09IHBsdWdpbm1h
bmFnZXIuY29uZmlnLCAoc2VsZiwgcGx1Z2lubWFuYWdlci5jb25maWcpCi0gICAgICAgIHNlbGYu
cGFyc2UoYXJncykKLSAgICAgICAgcmV0dXJuIHNlbGYKLQotICAgIGRlZiBub3RpZnlfZXhjZXB0
aW9uKHNlbGYsIGV4Y2luZm8sIG9wdGlvbj1Ob25lKToKLSAgICAgICAgaWYgb3B0aW9uIGFuZCBv
cHRpb24uZnVsbHRyYWNlOgotICAgICAgICAgICAgc3R5bGUgPSAibG9uZyIKLSAgICAgICAgZWxz
ZToKLSAgICAgICAgICAgIHN0eWxlID0gIm5hdGl2ZSIKLSAgICAgICAgZXhjcmVwciA9IGV4Y2lu
Zm8uZ2V0cmVwcihmdW5jYXJncz1UcnVlLAotICAgICAgICAgICAgc2hvd2xvY2Fscz1nZXRhdHRy
KG9wdGlvbiwgJ3Nob3dsb2NhbHMnLCBGYWxzZSksCi0gICAgICAgICAgICBzdHlsZT1zdHlsZSwK
LSAgICAgICAgKQotICAgICAgICByZXMgPSBzZWxmLmhvb2sucHl0ZXN0X2ludGVybmFsZXJyb3Io
ZXhjcmVwcj1leGNyZXByLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZXhjaW5mbz1leGNpbmZvKQotICAgICAgICBpZiBub3QgcHkuYnVpbHRpbi5hbnkocmVz
KToKLSAgICAgICAgICAgIGZvciBsaW5lIGluIHN0cihleGNyZXByKS5zcGxpdCgiXG4iKToKLSAg
ICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJJTlRFUk5BTEVSUk9SPiAlc1xuIiAlbGlu
ZSkKLSAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLmZsdXNoKCkKLQotICAgIGRlZiBjd2RfcmVs
YXRpdmVfbm9kZWlkKHNlbGYsIG5vZGVpZCk6Ci0gICAgICAgICMgbm9kZWlkJ3MgYXJlIHJlbGF0
aXZlIHRvIHRoZSByb290cGF0aCwgY29tcHV0ZSByZWxhdGl2ZSB0byBjd2QKLSAgICAgICAgaWYg
c2VsZi5pbnZvY2F0aW9uX2RpciAhPSBzZWxmLnJvb3RkaXI6Ci0gICAgICAgICAgICBmdWxscGF0
aCA9IHNlbGYucm9vdGRpci5qb2luKG5vZGVpZCkKLSAgICAgICAgICAgIG5vZGVpZCA9IHNlbGYu
aW52b2NhdGlvbl9kaXIuYmVzdHJlbHBhdGgoZnVsbHBhdGgpCi0gICAgICAgIHJldHVybiBub2Rl
aWQKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBmcm9tZGljdGFyZ3MoY2xzLCBvcHRpb25f
ZGljdCwgYXJncyk6Ci0gICAgICAgICIiIiBjb25zdHJ1Y3RvciB1c2VhYmxlIGZvciBzdWJwcm9j
ZXNzZXMuICIiIgotICAgICAgICBjb25maWcgPSBnZXRfY29uZmlnKCkKLSAgICAgICAgY29uZmln
Lm9wdGlvbi5fX2RpY3RfXy51cGRhdGUob3B0aW9uX2RpY3QpCi0gICAgICAgIGNvbmZpZy5wYXJz
ZShhcmdzLCBhZGRvcHRzPUZhbHNlKQotICAgICAgICBmb3IgeCBpbiBjb25maWcub3B0aW9uLnBs
dWdpbnM6Ci0gICAgICAgICAgICBjb25maWcucGx1Z2lubWFuYWdlci5jb25zaWRlcl9wbHVnaW5h
cmcoeCkKLSAgICAgICAgcmV0dXJuIGNvbmZpZwotCi0gICAgZGVmIF9wcm9jZXNzb3B0KHNlbGYs
IG9wdCk6Ci0gICAgICAgIGZvciBuYW1lIGluIG9wdC5fc2hvcnRfb3B0cyArIG9wdC5fbG9uZ19v
cHRzOgotICAgICAgICAgICAgc2VsZi5fb3B0MmRlc3RbbmFtZV0gPSBvcHQuZGVzdAotCi0gICAg
ICAgIGlmIGhhc2F0dHIob3B0LCAnZGVmYXVsdCcpIGFuZCBvcHQuZGVzdDoKLSAgICAgICAgICAg
IGlmIG5vdCBoYXNhdHRyKHNlbGYub3B0aW9uLCBvcHQuZGVzdCk6Ci0gICAgICAgICAgICAgICAg
c2V0YXR0cihzZWxmLm9wdGlvbiwgb3B0LmRlc3QsIG9wdC5kZWZhdWx0KQotCi0gICAgQGhvb2tp
bXBsKHRyeWxhc3Q9VHJ1ZSkKLSAgICBkZWYgcHl0ZXN0X2xvYWRfaW5pdGlhbF9jb25mdGVzdHMo
c2VsZiwgZWFybHlfY29uZmlnKToKLSAgICAgICAgc2VsZi5wbHVnaW5tYW5hZ2VyLl9zZXRfaW5p
dGlhbF9jb25mdGVzdHMoZWFybHlfY29uZmlnLmtub3duX2FyZ3NfbmFtZXNwYWNlKQotCi0gICAg
ZGVmIF9pbml0aW5pKHNlbGYsIGFyZ3MpOgotICAgICAgICBucywgdW5rbm93bl9hcmdzID0gc2Vs
Zi5fcGFyc2VyLnBhcnNlX2tub3duX2FuZF91bmtub3duX2FyZ3MoYXJncywgbmFtZXNwYWNlPXNl
bGYub3B0aW9uLmNvcHkoKSkKLSAgICAgICAgciA9IGRldGVybWluZV9zZXR1cChucy5pbmlmaWxl
bmFtZSwgbnMuZmlsZV9vcl9kaXIgKyB1bmtub3duX2FyZ3MpCi0gICAgICAgIHNlbGYucm9vdGRp
ciwgc2VsZi5pbmlmaWxlLCBzZWxmLmluaWNmZyA9IHIKLSAgICAgICAgc2VsZi5fcGFyc2VyLmV4
dHJhX2luZm9bJ3Jvb3RkaXInXSA9IHNlbGYucm9vdGRpcgotICAgICAgICBzZWxmLl9wYXJzZXIu
ZXh0cmFfaW5mb1snaW5pZmlsZSddID0gc2VsZi5pbmlmaWxlCi0gICAgICAgIHNlbGYuaW52b2Nh
dGlvbl9kaXIgPSBweS5wYXRoLmxvY2FsKCkKLSAgICAgICAgc2VsZi5fcGFyc2VyLmFkZGluaSgn
YWRkb3B0cycsICdleHRyYSBjb21tYW5kIGxpbmUgb3B0aW9ucycsICdhcmdzJykKLSAgICAgICAg
c2VsZi5fcGFyc2VyLmFkZGluaSgnbWludmVyc2lvbicsICdtaW5pbWFsbHkgcmVxdWlyZWQgcHl0
ZXN0IHZlcnNpb24nKQotCi0gICAgZGVmIF9wcmVwYXJzZShzZWxmLCBhcmdzLCBhZGRvcHRzPVRy
dWUpOgotICAgICAgICBzZWxmLl9pbml0aW5pKGFyZ3MpCi0gICAgICAgIGlmIGFkZG9wdHM6Ci0g
ICAgICAgICAgICBhcmdzWzpdID0gc2hsZXguc3BsaXQob3MuZW52aXJvbi5nZXQoJ1BZVEVTVF9B
RERPUFRTJywgJycpKSArIGFyZ3MKLSAgICAgICAgICAgIGFyZ3NbOl0gPSBzZWxmLmdldGluaSgi
YWRkb3B0cyIpICsgYXJncwotICAgICAgICBzZWxmLl9jaGVja3ZlcnNpb24oKQotICAgICAgICBz
ZWxmLnBsdWdpbm1hbmFnZXIuY29uc2lkZXJfcHJlcGFyc2UoYXJncykKLSAgICAgICAgdHJ5Ogot
ICAgICAgICAgICAgc2VsZi5wbHVnaW5tYW5hZ2VyLmxvYWRfc2V0dXB0b29sc19lbnRyeXBvaW50
cygicHl0ZXN0MTEiKQotICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IgYXMgZToKLSAgICAgICAg
ICAgIHNlbGYud2FybigiSTIiLCAiY291bGQgbm90IGxvYWQgc2V0dXB0b29scyBlbnRyeSBpbXBv
cnQ6ICVzIiAlIChlLCkpCi0gICAgICAgIHNlbGYucGx1Z2lubWFuYWdlci5jb25zaWRlcl9lbnYo
KQotICAgICAgICBzZWxmLmtub3duX2FyZ3NfbmFtZXNwYWNlID0gbnMgPSBzZWxmLl9wYXJzZXIu
cGFyc2Vfa25vd25fYXJncyhhcmdzLCBuYW1lc3BhY2U9c2VsZi5vcHRpb24uY29weSgpKQotICAg
ICAgICBpZiBzZWxmLmtub3duX2FyZ3NfbmFtZXNwYWNlLmNvbmZjdXRkaXIgaXMgTm9uZSBhbmQg
c2VsZi5pbmlmaWxlOgotICAgICAgICAgICAgY29uZmN1dGRpciA9IHB5LnBhdGgubG9jYWwoc2Vs
Zi5pbmlmaWxlKS5kaXJuYW1lCi0gICAgICAgICAgICBzZWxmLmtub3duX2FyZ3NfbmFtZXNwYWNl
LmNvbmZjdXRkaXIgPSBjb25mY3V0ZGlyCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYu
aG9vay5weXRlc3RfbG9hZF9pbml0aWFsX2NvbmZ0ZXN0cyhlYXJseV9jb25maWc9c2VsZiwKLSAg
ICAgICAgICAgICAgICAgICAgYXJncz1hcmdzLCBwYXJzZXI9c2VsZi5fcGFyc2VyKQotICAgICAg
ICBleGNlcHQgQ29uZnRlc3RJbXBvcnRGYWlsdXJlOgotICAgICAgICAgICAgZSA9IHN5cy5leGNf
aW5mbygpWzFdCi0gICAgICAgICAgICBpZiBucy5oZWxwIG9yIG5zLnZlcnNpb246Ci0gICAgICAg
ICAgICAgICAgIyB3ZSBkb24ndCB3YW50IHRvIHByZXZlbnQgLS1oZWxwLy0tdmVyc2lvbiB0byB3
b3JrCi0gICAgICAgICAgICAgICAgIyBzbyBqdXN0IGxldCBpcyBwYXNzIGFuZCBwcmludCBhIHdh
cm5pbmcgYXQgdGhlIGVuZAotICAgICAgICAgICAgICAgIHNlbGYuX3dhcm4oImNvdWxkIG5vdCBs
b2FkIGluaXRpYWwgY29uZnRlc3RzICglcylcbiIgJSBlLnBhdGgpCi0gICAgICAgICAgICBlbHNl
OgotICAgICAgICAgICAgICAgIHJhaXNlCi0KLSAgICBkZWYgX2NoZWNrdmVyc2lvbihzZWxmKToK
LSAgICAgICAgaW1wb3J0IHB5dGVzdAotICAgICAgICBtaW52ZXIgPSBzZWxmLmluaWNmZy5nZXQo
J21pbnZlcnNpb24nLCBOb25lKQotICAgICAgICBpZiBtaW52ZXI6Ci0gICAgICAgICAgICB2ZXIg
PSBtaW52ZXIuc3BsaXQoIi4iKQotICAgICAgICAgICAgbXl2ZXIgPSBweXRlc3QuX192ZXJzaW9u
X18uc3BsaXQoIi4iKQotICAgICAgICAgICAgaWYgbXl2ZXIgPCB2ZXI6Ci0gICAgICAgICAgICAg
ICAgcmFpc2UgcHl0ZXN0LlVzYWdlRXJyb3IoCi0gICAgICAgICAgICAgICAgICAgICIlczolZDog
cmVxdWlyZXMgcHl0ZXN0LSVzLCBhY3R1YWwgcHl0ZXN0LSVzJyIgJSgKLSAgICAgICAgICAgICAg
ICAgICAgc2VsZi5pbmljZmcuY29uZmlnLnBhdGgsIHNlbGYuaW5pY2ZnLmxpbmVvZignbWludmVy
c2lvbicpLAotICAgICAgICAgICAgICAgICAgICBtaW52ZXIsIHB5dGVzdC5fX3ZlcnNpb25fXykp
Ci0KLSAgICBkZWYgcGFyc2Uoc2VsZiwgYXJncywgYWRkb3B0cz1UcnVlKToKLSAgICAgICAgIyBw
YXJzZSBnaXZlbiBjbWRsaW5lIGFyZ3VtZW50cyBpbnRvIHRoaXMgY29uZmlnIG9iamVjdC4KLSAg
ICAgICAgYXNzZXJ0IG5vdCBoYXNhdHRyKHNlbGYsICdhcmdzJyksICgKLSAgICAgICAgICAgICAg
ICAiY2FuIG9ubHkgcGFyc2UgY21kbGluZSBhcmdzIGF0IG1vc3Qgb25jZSBwZXIgQ29uZmlnIG9i
amVjdCIpCi0gICAgICAgIHNlbGYuX29yaWdhcmdzID0gYXJncwotICAgICAgICBzZWxmLmhvb2su
cHl0ZXN0X2FkZGhvb2tzLmNhbGxfaGlzdG9yaWMoCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAga3dhcmdzPWRpY3QocGx1Z2lubWFuYWdlcj1zZWxmLnBsdWdpbm1hbmFnZXIpKQot
ICAgICAgICBzZWxmLl9wcmVwYXJzZShhcmdzLCBhZGRvcHRzPWFkZG9wdHMpCi0gICAgICAgICMg
WFhYIGRlcHJlY2F0ZWQgaG9vazoKLSAgICAgICAgc2VsZi5ob29rLnB5dGVzdF9jbWRsaW5lX3By
ZXBhcnNlKGNvbmZpZz1zZWxmLCBhcmdzPWFyZ3MpCi0gICAgICAgIGFyZ3MgPSBzZWxmLl9wYXJz
ZXIucGFyc2Vfc2V0b3B0aW9uKGFyZ3MsIHNlbGYub3B0aW9uLCBuYW1lc3BhY2U9c2VsZi5vcHRp
b24pCi0gICAgICAgIGlmIG5vdCBhcmdzOgotICAgICAgICAgICAgY3dkID0gb3MuZ2V0Y3dkKCkK
LSAgICAgICAgICAgIGlmIGN3ZCA9PSBzZWxmLnJvb3RkaXI6Ci0gICAgICAgICAgICAgICAgYXJn
cyA9IHNlbGYuZ2V0aW5pKCd0ZXN0cGF0aHMnKQotICAgICAgICAgICAgaWYgbm90IGFyZ3M6Ci0g
ICAgICAgICAgICAgICAgYXJncyA9IFtjd2RdCi0gICAgICAgIHNlbGYuYXJncyA9IGFyZ3MKLQot
ICAgIGRlZiBhZGRpbml2YWx1ZV9saW5lKHNlbGYsIG5hbWUsIGxpbmUpOgotICAgICAgICAiIiIg
YWRkIGEgbGluZSB0byBhbiBpbmktZmlsZSBvcHRpb24uIFRoZSBvcHRpb24gbXVzdCBoYXZlIGJl
ZW4KLSAgICAgICAgZGVjbGFyZWQgYnV0IG1pZ2h0IG5vdCB5ZXQgYmUgc2V0IGluIHdoaWNoIGNh
c2UgdGhlIGxpbmUgYmVjb21lcyB0aGUKLSAgICAgICAgdGhlIGZpcnN0IGxpbmUgaW4gaXRzIHZh
bHVlLiAiIiIKLSAgICAgICAgeCA9IHNlbGYuZ2V0aW5pKG5hbWUpCi0gICAgICAgIGFzc2VydCBp
c2luc3RhbmNlKHgsIGxpc3QpCi0gICAgICAgIHguYXBwZW5kKGxpbmUpICMgbW9kaWZpZXMgdGhl
IGNhY2hlZCBsaXN0IGlubGluZQotCi0gICAgZGVmIGdldGluaShzZWxmLCBuYW1lKToKLSAgICAg
ICAgIiIiIHJldHVybiBjb25maWd1cmF0aW9uIHZhbHVlIGZyb20gYW4gOnJlZjpgaW5pIGZpbGUg
PGluaWZpbGVzPmAuIElmIHRoZQotICAgICAgICBzcGVjaWZpZWQgbmFtZSBoYXNuJ3QgYmVlbiBy
ZWdpc3RlcmVkIHRocm91Z2ggYSBwcmlvcgotICAgICAgICA6cHk6ZnVuYzpgcGFyc2VyLmFkZGlu
aSA8cHl0ZXN0LmNvbmZpZy5QYXJzZXIuYWRkaW5pPmAKLSAgICAgICAgY2FsbCAodXN1YWxseSBm
cm9tIGEgcGx1Z2luKSwgYSBWYWx1ZUVycm9yIGlzIHJhaXNlZC4gIiIiCi0gICAgICAgIHRyeToK
LSAgICAgICAgICAgIHJldHVybiBzZWxmLl9pbmljYWNoZVtuYW1lXQotICAgICAgICBleGNlcHQg
S2V5RXJyb3I6Ci0gICAgICAgICAgICBzZWxmLl9pbmljYWNoZVtuYW1lXSA9IHZhbCA9IHNlbGYu
X2dldGluaShuYW1lKQotICAgICAgICAgICAgcmV0dXJuIHZhbAotCi0gICAgZGVmIF9nZXRpbmko
c2VsZiwgbmFtZSk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGRlc2NyaXB0aW9uLCB0eXBl
LCBkZWZhdWx0ID0gc2VsZi5fcGFyc2VyLl9pbmlkaWN0W25hbWVdCi0gICAgICAgIGV4Y2VwdCBL
ZXlFcnJvcjoKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVua25vd24gY29uZmlndXJh
dGlvbiB2YWx1ZTogJXIiICUobmFtZSwpKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICB2YWx1
ZSA9IHNlbGYuaW5pY2ZnW25hbWVdCi0gICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAg
ICAgIGlmIGRlZmF1bHQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGRlZmF1
bHQKLSAgICAgICAgICAgIGlmIHR5cGUgaXMgTm9uZToKLSAgICAgICAgICAgICAgICByZXR1cm4g
JycKLSAgICAgICAgICAgIHJldHVybiBbXQotICAgICAgICBpZiB0eXBlID09ICJwYXRobGlzdCI6
Ci0gICAgICAgICAgICBkcCA9IHB5LnBhdGgubG9jYWwoc2VsZi5pbmljZmcuY29uZmlnLnBhdGgp
LmRpcnBhdGgoKQotICAgICAgICAgICAgbCA9IFtdCi0gICAgICAgICAgICBmb3IgcmVscGF0aCBp
biBzaGxleC5zcGxpdCh2YWx1ZSk6Ci0gICAgICAgICAgICAgICAgbC5hcHBlbmQoZHAuam9pbihy
ZWxwYXRoLCBhYnM9VHJ1ZSkpCi0gICAgICAgICAgICByZXR1cm4gbAotICAgICAgICBlbGlmIHR5
cGUgPT0gImFyZ3MiOgotICAgICAgICAgICAgcmV0dXJuIHNobGV4LnNwbGl0KHZhbHVlKQotICAg
ICAgICBlbGlmIHR5cGUgPT0gImxpbmVsaXN0IjoKLSAgICAgICAgICAgIHJldHVybiBbdCBmb3Ig
dCBpbiBtYXAobGFtYmRhIHg6IHguc3RyaXAoKSwgdmFsdWUuc3BsaXQoIlxuIikpIGlmIHRdCi0g
ICAgICAgIGVsaWYgdHlwZSA9PSAiYm9vbCI6Ci0gICAgICAgICAgICByZXR1cm4gYm9vbChfc3Ry
dG9ib29sKHZhbHVlLnN0cmlwKCkpKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgYXNzZXJ0
IHR5cGUgaXMgTm9uZQotICAgICAgICAgICAgcmV0dXJuIHZhbHVlCi0KLSAgICBkZWYgX2dldGNv
bmZ0ZXN0X3BhdGhsaXN0KHNlbGYsIG5hbWUsIHBhdGgpOgotICAgICAgICB0cnk6Ci0gICAgICAg
ICAgICBtb2QsIHJlbHJvb3RzID0gc2VsZi5wbHVnaW5tYW5hZ2VyLl9yZ2V0X3dpdGhfY29uZm1v
ZChuYW1lLCBwYXRoKQotICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICByZXR1
cm4gTm9uZQotICAgICAgICBtb2RwYXRoID0gcHkucGF0aC5sb2NhbChtb2QuX19maWxlX18pLmRp
cnBhdGgoKQotICAgICAgICBsID0gW10KLSAgICAgICAgZm9yIHJlbHJvb3QgaW4gcmVscm9vdHM6
Ci0gICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShyZWxyb290LCBweS5wYXRoLmxvY2FsKToK
LSAgICAgICAgICAgICAgICByZWxyb290ID0gcmVscm9vdC5yZXBsYWNlKCIvIiwgcHkucGF0aC5s
b2NhbC5zZXApCi0gICAgICAgICAgICAgICAgcmVscm9vdCA9IG1vZHBhdGguam9pbihyZWxyb290
LCBhYnM9VHJ1ZSkKLSAgICAgICAgICAgIGwuYXBwZW5kKHJlbHJvb3QpCi0gICAgICAgIHJldHVy
biBsCi0KLSAgICBkZWYgZ2V0b3B0aW9uKHNlbGYsIG5hbWUsIGRlZmF1bHQ9bm90c2V0LCBza2lw
PUZhbHNlKToKLSAgICAgICAgIiIiIHJldHVybiBjb21tYW5kIGxpbmUgb3B0aW9uIHZhbHVlLgot
Ci0gICAgICAgIDphcmcgbmFtZTogbmFtZSBvZiB0aGUgb3B0aW9uLiAgWW91IG1heSBhbHNvIHNw
ZWNpZnkKLSAgICAgICAgICAgIHRoZSBsaXRlcmFsIGBgLS1PUFRgYCBvcHRpb24gaW5zdGVhZCBv
ZiB0aGUgImRlc3QiIG9wdGlvbiBuYW1lLgotICAgICAgICA6YXJnIGRlZmF1bHQ6IGRlZmF1bHQg
dmFsdWUgaWYgbm8gb3B0aW9uIG9mIHRoYXQgbmFtZSBleGlzdHMuCi0gICAgICAgIDphcmcgc2tp
cDogaWYgVHJ1ZSByYWlzZSBweXRlc3Quc2tpcCBpZiBvcHRpb24gZG9lcyBub3QgZXhpc3RzCi0g
ICAgICAgICAgICBvciBoYXMgYSBOb25lIHZhbHVlLgotICAgICAgICAiIiIKLSAgICAgICAgbmFt
ZSA9IHNlbGYuX29wdDJkZXN0LmdldChuYW1lLCBuYW1lKQotICAgICAgICB0cnk6Ci0gICAgICAg
ICAgICB2YWwgPSBnZXRhdHRyKHNlbGYub3B0aW9uLCBuYW1lKQotICAgICAgICAgICAgaWYgdmFs
IGlzIE5vbmUgYW5kIHNraXA6Ci0gICAgICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3Io
bmFtZSkKLSAgICAgICAgICAgIHJldHVybiB2YWwKLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVy
cm9yOgotICAgICAgICAgICAgaWYgZGVmYXVsdCBpcyBub3Qgbm90c2V0OgotICAgICAgICAgICAg
ICAgIHJldHVybiBkZWZhdWx0Ci0gICAgICAgICAgICBpZiBza2lwOgotICAgICAgICAgICAgICAg
IGltcG9ydCBweXRlc3QKLSAgICAgICAgICAgICAgICBweXRlc3Quc2tpcCgibm8gJXIgb3B0aW9u
IGZvdW5kIiAlKG5hbWUsKSkKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIm5vIG9wdGlv
biBuYW1lZCAlciIgJSAobmFtZSwpKQotCi0gICAgZGVmIGdldHZhbHVlKHNlbGYsIG5hbWUsIHBh
dGg9Tm9uZSk6Ci0gICAgICAgICIiIiAoZGVwcmVjYXRlZCwgdXNlIGdldG9wdGlvbigpKSAiIiIK
LSAgICAgICAgcmV0dXJuIHNlbGYuZ2V0b3B0aW9uKG5hbWUpCi0KLSAgICBkZWYgZ2V0dmFsdWVv
cnNraXAoc2VsZiwgbmFtZSwgcGF0aD1Ob25lKToKLSAgICAgICAgIiIiIChkZXByZWNhdGVkLCB1
c2UgZ2V0b3B0aW9uKHNraXA9VHJ1ZSkpICIiIgotICAgICAgICByZXR1cm4gc2VsZi5nZXRvcHRp
b24obmFtZSwgc2tpcD1UcnVlKQotCi1kZWYgZXhpc3RzKHBhdGgsIGlnbm9yZT1FbnZpcm9ubWVu
dEVycm9yKToKLSAgICB0cnk6Ci0gICAgICAgIHJldHVybiBwYXRoLmNoZWNrKCkKLSAgICBleGNl
cHQgaWdub3JlOgotICAgICAgICByZXR1cm4gRmFsc2UKLQotZGVmIGdldGNmZyhhcmdzLCBpbmli
YXNlbmFtZXMpOgotICAgIGFyZ3MgPSBbeCBmb3IgeCBpbiBhcmdzIGlmIG5vdCBzdHIoeCkuc3Rh
cnRzd2l0aCgiLSIpXQotICAgIGlmIG5vdCBhcmdzOgotICAgICAgICBhcmdzID0gW3B5LnBhdGgu
bG9jYWwoKV0KLSAgICBmb3IgYXJnIGluIGFyZ3M6Ci0gICAgICAgIGFyZyA9IHB5LnBhdGgubG9j
YWwoYXJnKQotICAgICAgICBmb3IgYmFzZSBpbiBhcmcucGFydHMocmV2ZXJzZT1UcnVlKToKLSAg
ICAgICAgICAgIGZvciBpbmliYXNlbmFtZSBpbiBpbmliYXNlbmFtZXM6Ci0gICAgICAgICAgICAg
ICAgcCA9IGJhc2Uuam9pbihpbmliYXNlbmFtZSkKLSAgICAgICAgICAgICAgICBpZiBleGlzdHMo
cCk6Ci0gICAgICAgICAgICAgICAgICAgIGluaWNvbmZpZyA9IHB5LmluaWNvbmZpZy5JbmlDb25m
aWcocCkKLSAgICAgICAgICAgICAgICAgICAgaWYgJ3B5dGVzdCcgaW4gaW5pY29uZmlnLnNlY3Rp
b25zOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJhc2UsIHAsIGluaWNvbmZpZ1sn
cHl0ZXN0J10KLSAgICAgICAgICAgICAgICAgICAgZWxpZiBpbmliYXNlbmFtZSA9PSAicHl0ZXN0
LmluaSI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAjIGFsbG93ZWQgdG8gYmUgZW1wdHkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBiYXNlLCBwLCB7fQotICAgIHJldHVybiBOb25l
LCBOb25lLCBOb25lCi0KLQotZGVmIGdldF9jb21tb25fYW5jZXN0b3IoYXJncyk6Ci0gICAgIyBh
cmdzIGFyZSB3aGF0IHdlIGdldCBhZnRlciBlYXJseSBjb21tYW5kIGxpbmUgcGFyc2luZyAodXN1
YWxseQotICAgICMgc3RyaW5ncywgYnV0IGNhbiBiZSBweS5wYXRoLmxvY2FsIG9iamVjdHMgYXMg
d2VsbCkKLSAgICBjb21tb25fYW5jZXN0b3IgPSBOb25lCi0gICAgZm9yIGFyZyBpbiBhcmdzOgot
ICAgICAgICBpZiBzdHIoYXJnKVswXSA9PSAiLSI6Ci0gICAgICAgICAgICBjb250aW51ZQotICAg
ICAgICBwID0gcHkucGF0aC5sb2NhbChhcmcpCi0gICAgICAgIGlmIGNvbW1vbl9hbmNlc3RvciBp
cyBOb25lOgotICAgICAgICAgICAgY29tbW9uX2FuY2VzdG9yID0gcAotICAgICAgICBlbHNlOgot
ICAgICAgICAgICAgaWYgcC5yZWx0byhjb21tb25fYW5jZXN0b3IpIG9yIHAgPT0gY29tbW9uX2Fu
Y2VzdG9yOgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBlbGlmIGNvbW1v
bl9hbmNlc3Rvci5yZWx0byhwKToKLSAgICAgICAgICAgICAgICBjb21tb25fYW5jZXN0b3IgPSBw
Ci0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNoYXJlZCA9IHAuY29tbW9uKGNv
bW1vbl9hbmNlc3RvcikKLSAgICAgICAgICAgICAgICBpZiBzaGFyZWQgaXMgbm90IE5vbmU6Ci0g
ICAgICAgICAgICAgICAgICAgIGNvbW1vbl9hbmNlc3RvciA9IHNoYXJlZAotICAgIGlmIGNvbW1v
bl9hbmNlc3RvciBpcyBOb25lOgotICAgICAgICBjb21tb25fYW5jZXN0b3IgPSBweS5wYXRoLmxv
Y2FsKCkKLSAgICBlbGlmIG5vdCBjb21tb25fYW5jZXN0b3IuaXNkaXIoKToKLSAgICAgICAgY29t
bW9uX2FuY2VzdG9yID0gY29tbW9uX2FuY2VzdG9yLmRpcnBhdGgoKQotICAgIHJldHVybiBjb21t
b25fYW5jZXN0b3IKLQotCi1kZWYgZGV0ZXJtaW5lX3NldHVwKGluaWZpbGUsIGFyZ3MpOgotICAg
IGlmIGluaWZpbGU6Ci0gICAgICAgIGluaWNvbmZpZyA9IHB5LmluaWNvbmZpZy5JbmlDb25maWco
aW5pZmlsZSkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgaW5pY2ZnID0gaW5pY29uZmlnWyJw
eXRlc3QiXQotICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICBpbmljZmcgPSBO
b25lCi0gICAgICAgIHJvb3RkaXIgPSBnZXRfY29tbW9uX2FuY2VzdG9yKGFyZ3MpCi0gICAgZWxz
ZToKLSAgICAgICAgYW5jZXN0b3IgPSBnZXRfY29tbW9uX2FuY2VzdG9yKGFyZ3MpCi0gICAgICAg
IHJvb3RkaXIsIGluaWZpbGUsIGluaWNmZyA9IGdldGNmZygKLSAgICAgICAgICAgIFthbmNlc3Rv
cl0sIFsicHl0ZXN0LmluaSIsICJ0b3guaW5pIiwgInNldHVwLmNmZyJdKQotICAgICAgICBpZiBy
b290ZGlyIGlzIE5vbmU6Ci0gICAgICAgICAgICBmb3Igcm9vdGRpciBpbiBhbmNlc3Rvci5wYXJ0
cyhyZXZlcnNlPVRydWUpOgotICAgICAgICAgICAgICAgIGlmIHJvb3RkaXIuam9pbigic2V0dXAu
cHkiKS5leGlzdHMoKToKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIGVs
c2U6Ci0gICAgICAgICAgICAgICAgcm9vdGRpciA9IGFuY2VzdG9yCi0gICAgcmV0dXJuIHJvb3Rk
aXIsIGluaWZpbGUsIGluaWNmZyBvciB7fQotCi0KLWRlZiBzZXRucyhvYmosIGRpYyk6Ci0gICAg
aW1wb3J0IHB5dGVzdAotICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBkaWMuaXRlbXMoKToKLSAgICAg
ICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgZGljdCk6Ci0gICAgICAgICAgICBtb2QgPSBnZXRhdHRy
KG9iaiwgbmFtZSwgTm9uZSkKLSAgICAgICAgICAgIGlmIG1vZCBpcyBOb25lOgotICAgICAgICAg
ICAgICAgIG1vZG5hbWUgPSAicHl0ZXN0LiVzIiAlIG5hbWUKLSAgICAgICAgICAgICAgICBtb2Qg
PSB0eXBlcy5Nb2R1bGVUeXBlKG1vZG5hbWUpCi0gICAgICAgICAgICAgICAgc3lzLm1vZHVsZXNb
bW9kbmFtZV0gPSBtb2QKLSAgICAgICAgICAgICAgICBtb2QuX19hbGxfXyA9IFtdCi0gICAgICAg
ICAgICAgICAgc2V0YXR0cihvYmosIG5hbWUsIG1vZCkKLSAgICAgICAgICAgIG9iai5fX2FsbF9f
LmFwcGVuZChuYW1lKQotICAgICAgICAgICAgc2V0bnMobW9kLCB2YWx1ZSkKLSAgICAgICAgZWxz
ZToKLSAgICAgICAgICAgIHNldGF0dHIob2JqLCBuYW1lLCB2YWx1ZSkKLSAgICAgICAgICAgIG9i
ai5fX2FsbF9fLmFwcGVuZChuYW1lKQotICAgICAgICAgICAgI2lmIG9iaiAhPSBweXRlc3Q6Ci0g
ICAgICAgICAgICAjICAgIHB5dGVzdC5fX2FsbF9fLmFwcGVuZChuYW1lKQotICAgICAgICAgICAg
c2V0YXR0cihweXRlc3QsIG5hbWUsIHZhbHVlKQotCi0KLWRlZiBjcmVhdGVfdGVybWluYWxfd3Jp
dGVyKGNvbmZpZywgKmFyZ3MsICoqa3dhcmdzKToKLSAgICAiIiJDcmVhdGUgYSBUZXJtaW5hbFdy
aXRlciBpbnN0YW5jZSBjb25maWd1cmVkIGFjY29yZGluZyB0byB0aGUgb3B0aW9ucwotICAgIGlu
IHRoZSBjb25maWcgb2JqZWN0LiBFdmVyeSBjb2RlIHdoaWNoIHJlcXVpcmVzIGEgVGVybWluYWxX
cml0ZXIgb2JqZWN0Ci0gICAgYW5kIGhhcyBhY2Nlc3MgdG8gYSBjb25maWcgb2JqZWN0IHNob3Vs
ZCB1c2UgdGhpcyBmdW5jdGlvbi4KLSAgICAiIiIKLSAgICB0dyA9IHB5LmlvLlRlcm1pbmFsV3Jp
dGVyKCphcmdzLCAqKmt3YXJncykKLSAgICBpZiBjb25maWcub3B0aW9uLmNvbG9yID09ICd5ZXMn
OgotICAgICAgICB0dy5oYXNtYXJrdXAgPSBUcnVlCi0gICAgaWYgY29uZmlnLm9wdGlvbi5jb2xv
ciA9PSAnbm8nOgotICAgICAgICB0dy5oYXNtYXJrdXAgPSBGYWxzZQotICAgIHJldHVybiB0dwot
Ci0KLWRlZiBfc3RydG9ib29sKHZhbCk6Ci0gICAgIiIiQ29udmVydCBhIHN0cmluZyByZXByZXNl
bnRhdGlvbiBvZiB0cnV0aCB0byB0cnVlICgxKSBvciBmYWxzZSAoMCkuCi0KLSAgICBUcnVlIHZh
bHVlcyBhcmUgJ3knLCAneWVzJywgJ3QnLCAndHJ1ZScsICdvbicsIGFuZCAnMSc7IGZhbHNlIHZh
bHVlcwotICAgIGFyZSAnbicsICdubycsICdmJywgJ2ZhbHNlJywgJ29mZicsIGFuZCAnMCcuICBS
YWlzZXMgVmFsdWVFcnJvciBpZgotICAgICd2YWwnIGlzIGFueXRoaW5nIGVsc2UuCi0KLSAgICAu
LiBub3RlOjogY29waWVkIGZyb20gZGlzdHV0aWxzLnV0aWwKLSAgICAiIiIKLSAgICB2YWwgPSB2
YWwubG93ZXIoKQotICAgIGlmIHZhbCBpbiAoJ3knLCAneWVzJywgJ3QnLCAndHJ1ZScsICdvbics
ICcxJyk6Ci0gICAgICAgIHJldHVybiAxCi0gICAgZWxpZiB2YWwgaW4gKCduJywgJ25vJywgJ2Yn
LCAnZmFsc2UnLCAnb2ZmJywgJzAnKToKLSAgICAgICAgcmV0dXJuIDAKLSAgICBlbHNlOgotICAg
ICAgICByYWlzZSBWYWx1ZUVycm9yKCJpbnZhbGlkIHRydXRoIHZhbHVlICVyIiAlICh2YWwsKSkK
ZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5
dGVzdC9kb2N0ZXN0LnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVz
dC9fcHl0ZXN0L2RvY3Rlc3QucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1N2Y3
YTQ5NDllLi4wMDAwMDAwMDAwMAotLS0gYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9v
bHMvcHl0ZXN0L19weXRlc3QvZG9jdGVzdC5weQorKysgL2Rldi9udWxsCkBAIC0xLDI5MCArMCww
IEBACi0iIiIgZGlzY292ZXIgYW5kIHJ1biBkb2N0ZXN0cyBpbiBtb2R1bGVzIGFuZCB0ZXN0IGZp
bGVzLiIiIgotZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKLQotaW1wb3J0
IHRyYWNlYmFjawotCi1pbXBvcnQgcHl0ZXN0Ci1mcm9tIF9weXRlc3QuX2NvZGUuY29kZSBpbXBv
cnQgVGVybWluYWxSZXByLCBSZXByRmlsZUxvY2F0aW9uLCBFeGNlcHRpb25JbmZvCi1mcm9tIF9w
eXRlc3QucHl0aG9uIGltcG9ydCBGaXh0dXJlUmVxdWVzdAotCi0KLQotZGVmIHB5dGVzdF9hZGRv
cHRpb24ocGFyc2VyKToKLSAgICBwYXJzZXIuYWRkaW5pKCdkb2N0ZXN0X29wdGlvbmZsYWdzJywg
J29wdGlvbiBmbGFncyBmb3IgZG9jdGVzdHMnLAotICAgICAgICB0eXBlPSJhcmdzIiwgZGVmYXVs
dD1bIkVMTElQU0lTIl0pCi0gICAgZ3JvdXAgPSBwYXJzZXIuZ2V0Z3JvdXAoImNvbGxlY3QiKQot
ICAgIGdyb3VwLmFkZG9wdGlvbigiLS1kb2N0ZXN0LW1vZHVsZXMiLAotICAgICAgICBhY3Rpb249
InN0b3JlX3RydWUiLCBkZWZhdWx0PUZhbHNlLAotICAgICAgICBoZWxwPSJydW4gZG9jdGVzdHMg
aW4gYWxsIC5weSBtb2R1bGVzIiwKLSAgICAgICAgZGVzdD0iZG9jdGVzdG1vZHVsZXMiKQotICAg
IGdyb3VwLmFkZG9wdGlvbigiLS1kb2N0ZXN0LWdsb2IiLAotICAgICAgICBhY3Rpb249ImFwcGVu
ZCIsIGRlZmF1bHQ9W10sIG1ldGF2YXI9InBhdCIsCi0gICAgICAgIGhlbHA9ImRvY3Rlc3RzIGZp
bGUgbWF0Y2hpbmcgcGF0dGVybiwgZGVmYXVsdDogdGVzdCoudHh0IiwKLSAgICAgICAgZGVzdD0i
ZG9jdGVzdGdsb2IiKQotICAgIGdyb3VwLmFkZG9wdGlvbigiLS1kb2N0ZXN0LWlnbm9yZS1pbXBv
cnQtZXJyb3JzIiwKLSAgICAgICAgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVmYXVsdD1GYWxzZSwK
LSAgICAgICAgaGVscD0iaWdub3JlIGRvY3Rlc3QgSW1wb3J0RXJyb3JzIiwKLSAgICAgICAgZGVz
dD0iZG9jdGVzdF9pZ25vcmVfaW1wb3J0X2Vycm9ycyIpCi0KLQotZGVmIHB5dGVzdF9jb2xsZWN0
X2ZpbGUocGF0aCwgcGFyZW50KToKLSAgICBjb25maWcgPSBwYXJlbnQuY29uZmlnCi0gICAgaWYg
cGF0aC5leHQgPT0gIi5weSI6Ci0gICAgICAgIGlmIGNvbmZpZy5vcHRpb24uZG9jdGVzdG1vZHVs
ZXM6Ci0gICAgICAgICAgICByZXR1cm4gRG9jdGVzdE1vZHVsZShwYXRoLCBwYXJlbnQpCi0gICAg
ZWxpZiBfaXNfZG9jdGVzdChjb25maWcsIHBhdGgsIHBhcmVudCk6Ci0gICAgICAgIHJldHVybiBE
b2N0ZXN0VGV4dGZpbGUocGF0aCwgcGFyZW50KQotCi0KLWRlZiBfaXNfZG9jdGVzdChjb25maWcs
IHBhdGgsIHBhcmVudCk6Ci0gICAgaWYgcGF0aC5leHQgaW4gKCcudHh0JywgJy5yc3QnKSBhbmQg
cGFyZW50LnNlc3Npb24uaXNpbml0cGF0aChwYXRoKToKLSAgICAgICAgcmV0dXJuIFRydWUKLSAg
ICBnbG9icyA9IGNvbmZpZy5nZXRvcHRpb24oImRvY3Rlc3RnbG9iIikgb3IgWyd0ZXN0Ki50eHQn
XQotICAgIGZvciBnbG9iIGluIGdsb2JzOgotICAgICAgICBpZiBwYXRoLmNoZWNrKGZubWF0Y2g9
Z2xvYik6Ci0gICAgICAgICAgICByZXR1cm4gVHJ1ZQotICAgIHJldHVybiBGYWxzZQotCi0KLWNs
YXNzIFJlcHJGYWlsRG9jdGVzdChUZXJtaW5hbFJlcHIpOgotCi0gICAgZGVmIF9faW5pdF9fKHNl
bGYsIHJlcHJsb2NhdGlvbiwgbGluZXMpOgotICAgICAgICBzZWxmLnJlcHJsb2NhdGlvbiA9IHJl
cHJsb2NhdGlvbgotICAgICAgICBzZWxmLmxpbmVzID0gbGluZXMKLQotICAgIGRlZiB0b3Rlcm1p
bmFsKHNlbGYsIHR3KToKLSAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5saW5lczoKLSAgICAgICAg
ICAgIHR3LmxpbmUobGluZSkKLSAgICAgICAgc2VsZi5yZXBybG9jYXRpb24udG90ZXJtaW5hbCh0
dykKLQotCi1jbGFzcyBEb2N0ZXN0SXRlbShweXRlc3QuSXRlbSk6Ci0KLSAgICBkZWYgX19pbml0
X18oc2VsZiwgbmFtZSwgcGFyZW50LCBydW5uZXI9Tm9uZSwgZHRlc3Q9Tm9uZSk6Ci0gICAgICAg
IHN1cGVyKERvY3Rlc3RJdGVtLCBzZWxmKS5fX2luaXRfXyhuYW1lLCBwYXJlbnQpCi0gICAgICAg
IHNlbGYucnVubmVyID0gcnVubmVyCi0gICAgICAgIHNlbGYuZHRlc3QgPSBkdGVzdAotICAgICAg
ICBzZWxmLm9iaiA9IE5vbmUKLSAgICAgICAgc2VsZi5maXh0dXJlX3JlcXVlc3QgPSBOb25lCi0K
LSAgICBkZWYgc2V0dXAoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuZHRlc3QgaXMgbm90IE5vbmU6
Ci0gICAgICAgICAgICBzZWxmLmZpeHR1cmVfcmVxdWVzdCA9IF9zZXR1cF9maXh0dXJlcyhzZWxm
KQotICAgICAgICAgICAgZ2xvYnMgPSBkaWN0KGdldGZpeHR1cmU9c2VsZi5maXh0dXJlX3JlcXVl
c3QuZ2V0ZnVuY2FyZ3ZhbHVlKQotICAgICAgICAgICAgc2VsZi5kdGVzdC5nbG9icy51cGRhdGUo
Z2xvYnMpCi0KLSAgICBkZWYgcnVudGVzdChzZWxmKToKLSAgICAgICAgX2NoZWNrX2FsbF9za2lw
cGVkKHNlbGYuZHRlc3QpCi0gICAgICAgIHNlbGYucnVubmVyLnJ1bihzZWxmLmR0ZXN0KQotCi0g
ICAgZGVmIHJlcHJfZmFpbHVyZShzZWxmLCBleGNpbmZvKToKLSAgICAgICAgaW1wb3J0IGRvY3Rl
c3QKLSAgICAgICAgaWYgZXhjaW5mby5lcnJpc2luc3RhbmNlKChkb2N0ZXN0LkRvY1Rlc3RGYWls
dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3Rlc3QuVW5leHBlY3Rl
ZEV4Y2VwdGlvbikpOgotICAgICAgICAgICAgZG9jdGVzdGZhaWx1cmUgPSBleGNpbmZvLnZhbHVl
Ci0gICAgICAgICAgICBleGFtcGxlID0gZG9jdGVzdGZhaWx1cmUuZXhhbXBsZQotICAgICAgICAg
ICAgdGVzdCA9IGRvY3Rlc3RmYWlsdXJlLnRlc3QKLSAgICAgICAgICAgIGZpbGVuYW1lID0gdGVz
dC5maWxlbmFtZQotICAgICAgICAgICAgaWYgdGVzdC5saW5lbm8gaXMgTm9uZToKLSAgICAgICAg
ICAgICAgICBsaW5lbm8gPSBOb25lCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAg
IGxpbmVubyA9IHRlc3QubGluZW5vICsgZXhhbXBsZS5saW5lbm8gKyAxCi0gICAgICAgICAgICBt
ZXNzYWdlID0gZXhjaW5mby50eXBlLl9fbmFtZV9fCi0gICAgICAgICAgICByZXBybG9jYXRpb24g
PSBSZXByRmlsZUxvY2F0aW9uKGZpbGVuYW1lLCBsaW5lbm8sIG1lc3NhZ2UpCi0gICAgICAgICAg
ICBjaGVja2VyID0gX2dldF9jaGVja2VyKCkKLSAgICAgICAgICAgIFJFUE9SVF9VRElGRiA9IGRv
Y3Rlc3QuUkVQT1JUX1VESUZGCi0gICAgICAgICAgICBpZiBsaW5lbm8gaXMgbm90IE5vbmU6Ci0g
ICAgICAgICAgICAgICAgbGluZXMgPSBkb2N0ZXN0ZmFpbHVyZS50ZXN0LmRvY3N0cmluZy5zcGxp
dGxpbmVzKEZhbHNlKQotICAgICAgICAgICAgICAgICMgYWRkIGxpbmUgbnVtYmVycyB0byB0aGUg
bGVmdCBvZiB0aGUgZXJyb3IgbWVzc2FnZQotICAgICAgICAgICAgICAgIGxpbmVzID0gWyIlMDNk
ICVzIiAlIChpICsgdGVzdC5saW5lbm8gKyAxLCB4KQotICAgICAgICAgICAgICAgICAgICAgICAg
IGZvciAoaSwgeCkgaW4gZW51bWVyYXRlKGxpbmVzKV0KLSAgICAgICAgICAgICAgICAjIHRyaW0g
ZG9jc3RyaW5nIGVycm9yIGxpbmVzIHRvIDEwCi0gICAgICAgICAgICAgICAgbGluZXMgPSBsaW5l
c1tleGFtcGxlLmxpbmVubyAtIDk6ZXhhbXBsZS5saW5lbm8gKyAxXQotICAgICAgICAgICAgZWxz
ZToKLSAgICAgICAgICAgICAgICBsaW5lcyA9IFsnRVhBTVBMRSBMT0NBVElPTiBVTktOT1dOLCBu
b3Qgc2hvd2luZyBhbGwgdGVzdHMgb2YgdGhhdCBleGFtcGxlJ10KLSAgICAgICAgICAgICAgICBp
bmRlbnQgPSAnPj4+JwotICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGV4YW1wbGUuc291cmNl
LnNwbGl0bGluZXMoKToKLSAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCc/Pz8gJXMg
JXMnICUgKGluZGVudCwgbGluZSkpCi0gICAgICAgICAgICAgICAgICAgIGluZGVudCA9ICcuLi4n
Ci0gICAgICAgICAgICBpZiBleGNpbmZvLmVycmlzaW5zdGFuY2UoZG9jdGVzdC5Eb2NUZXN0RmFp
bHVyZSk6Ci0gICAgICAgICAgICAgICAgbGluZXMgKz0gY2hlY2tlci5vdXRwdXRfZGlmZmVyZW5j
ZShleGFtcGxlLAotICAgICAgICAgICAgICAgICAgICAgICAgZG9jdGVzdGZhaWx1cmUuZ290LCBS
RVBPUlRfVURJRkYpLnNwbGl0KCJcbiIpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAg
ICAgIGlubmVyX2V4Y2luZm8gPSBFeGNlcHRpb25JbmZvKGV4Y2luZm8udmFsdWUuZXhjX2luZm8p
Ci0gICAgICAgICAgICAgICAgbGluZXMgKz0gWyJVTkVYUEVDVEVEIEVYQ0VQVElPTjogJXMiICUK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXByKGlubmVyX2V4Y2luZm8udmFsdWUpXQot
ICAgICAgICAgICAgICAgIGxpbmVzICs9IHRyYWNlYmFjay5mb3JtYXRfZXhjZXB0aW9uKCpleGNp
bmZvLnZhbHVlLmV4Y19pbmZvKQotICAgICAgICAgICAgcmV0dXJuIFJlcHJGYWlsRG9jdGVzdChy
ZXBybG9jYXRpb24sIGxpbmVzKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIHN1
cGVyKERvY3Rlc3RJdGVtLCBzZWxmKS5yZXByX2ZhaWx1cmUoZXhjaW5mbykKLQotICAgIGRlZiBy
ZXBvcnRpbmZvKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5mc3BhdGgsIE5vbmUsICJbZG9j
dGVzdF0gJXMiICUgc2VsZi5uYW1lCi0KLQotZGVmIF9nZXRfZmxhZ19sb29rdXAoKToKLSAgICBp
bXBvcnQgZG9jdGVzdAotICAgIHJldHVybiBkaWN0KERPTlRfQUNDRVBUX1RSVUVfRk9SXzE9ZG9j
dGVzdC5ET05UX0FDQ0VQVF9UUlVFX0ZPUl8xLAotICAgICAgICAgICAgICAgIERPTlRfQUNDRVBU
X0JMQU5LTElORT1kb2N0ZXN0LkRPTlRfQUNDRVBUX0JMQU5LTElORSwKLSAgICAgICAgICAgICAg
ICBOT1JNQUxJWkVfV0hJVEVTUEFDRT1kb2N0ZXN0Lk5PUk1BTElaRV9XSElURVNQQUNFLAotICAg
ICAgICAgICAgICAgIEVMTElQU0lTPWRvY3Rlc3QuRUxMSVBTSVMsCi0gICAgICAgICAgICAgICAg
SUdOT1JFX0VYQ0VQVElPTl9ERVRBSUw9ZG9jdGVzdC5JR05PUkVfRVhDRVBUSU9OX0RFVEFJTCwK
LSAgICAgICAgICAgICAgICBDT01QQVJJU09OX0ZMQUdTPWRvY3Rlc3QuQ09NUEFSSVNPTl9GTEFH
UywKLSAgICAgICAgICAgICAgICBBTExPV19VTklDT0RFPV9nZXRfYWxsb3dfdW5pY29kZV9mbGFn
KCksCi0gICAgICAgICAgICAgICAgQUxMT1dfQllURVM9X2dldF9hbGxvd19ieXRlc19mbGFnKCks
Ci0gICAgICAgICAgICAgICAgKQotCi0KLWRlZiBnZXRfb3B0aW9uZmxhZ3MocGFyZW50KToKLSAg
ICBvcHRpb25mbGFnc19zdHIgPSBwYXJlbnQuY29uZmlnLmdldGluaSgiZG9jdGVzdF9vcHRpb25m
bGFncyIpCi0gICAgZmxhZ19sb29rdXBfdGFibGUgPSBfZ2V0X2ZsYWdfbG9va3VwKCkKLSAgICBm
bGFnX2FjYyA9IDAKLSAgICBmb3IgZmxhZyBpbiBvcHRpb25mbGFnc19zdHI6Ci0gICAgICAgIGZs
YWdfYWNjIHw9IGZsYWdfbG9va3VwX3RhYmxlW2ZsYWddCi0gICAgcmV0dXJuIGZsYWdfYWNjCi0K
LQotY2xhc3MgRG9jdGVzdFRleHRmaWxlKERvY3Rlc3RJdGVtLCBweXRlc3QuTW9kdWxlKToKLQot
ICAgIGRlZiBydW50ZXN0KHNlbGYpOgotICAgICAgICBpbXBvcnQgZG9jdGVzdAotICAgICAgICBm
aXh0dXJlX3JlcXVlc3QgPSBfc2V0dXBfZml4dHVyZXMoc2VsZikKLQotICAgICAgICAjIGluc3Bp
cmVkIGJ5IGRvY3Rlc3QudGVzdGZpbGU7IGlkZWFsbHkgd2Ugd291bGQgdXNlIGl0IGRpcmVjdGx5
LAotICAgICAgICAjIGJ1dCBpdCBkb2Vzbid0IHN1cHBvcnQgcGFzc2luZyBhIGN1c3RvbSBjaGVj
a2VyCi0gICAgICAgIHRleHQgPSBzZWxmLmZzcGF0aC5yZWFkKCkKLSAgICAgICAgZmlsZW5hbWUg
PSBzdHIoc2VsZi5mc3BhdGgpCi0gICAgICAgIG5hbWUgPSBzZWxmLmZzcGF0aC5iYXNlbmFtZQot
ICAgICAgICBnbG9icyA9IGRpY3QoZ2V0Zml4dHVyZT1maXh0dXJlX3JlcXVlc3QuZ2V0ZnVuY2Fy
Z3ZhbHVlKQotICAgICAgICBpZiAnX19uYW1lX18nIG5vdCBpbiBnbG9iczoKLSAgICAgICAgICAg
IGdsb2JzWydfX25hbWVfXyddID0gJ19fbWFpbl9fJwotCi0gICAgICAgIG9wdGlvbmZsYWdzID0g
Z2V0X29wdGlvbmZsYWdzKHNlbGYpCi0gICAgICAgIHJ1bm5lciA9IGRvY3Rlc3QuRGVidWdSdW5u
ZXIodmVyYm9zZT0wLCBvcHRpb25mbGFncz1vcHRpb25mbGFncywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjaGVja2VyPV9nZXRfY2hlY2tlcigpKQotCi0gICAgICAgIHBh
cnNlciA9IGRvY3Rlc3QuRG9jVGVzdFBhcnNlcigpCi0gICAgICAgIHRlc3QgPSBwYXJzZXIuZ2V0
X2RvY3Rlc3QodGV4dCwgZ2xvYnMsIG5hbWUsIGZpbGVuYW1lLCAwKQotICAgICAgICBfY2hlY2tf
YWxsX3NraXBwZWQodGVzdCkKLSAgICAgICAgcnVubmVyLnJ1bih0ZXN0KQotCi0KLWRlZiBfY2hl
Y2tfYWxsX3NraXBwZWQodGVzdCk6Ci0gICAgIiIicmFpc2VzIHB5dGVzdC5za2lwKCkgaWYgYWxs
IGV4YW1wbGVzIGluIHRoZSBnaXZlbiBEb2NUZXN0IGhhdmUgdGhlIFNLSVAKLSAgICBvcHRpb24g
c2V0LgotICAgICIiIgotICAgIGltcG9ydCBkb2N0ZXN0Ci0gICAgYWxsX3NraXBwZWQgPSBhbGwo
eC5vcHRpb25zLmdldChkb2N0ZXN0LlNLSVAsIEZhbHNlKSBmb3IgeCBpbiB0ZXN0LmV4YW1wbGVz
KQotICAgIGlmIGFsbF9za2lwcGVkOgotICAgICAgICBweXRlc3Quc2tpcCgnYWxsIHRlc3RzIHNr
aXBwZWQgYnkgK1NLSVAgb3B0aW9uJykKLQotCi1jbGFzcyBEb2N0ZXN0TW9kdWxlKHB5dGVzdC5N
b2R1bGUpOgotICAgIGRlZiBjb2xsZWN0KHNlbGYpOgotICAgICAgICBpbXBvcnQgZG9jdGVzdAot
ICAgICAgICBpZiBzZWxmLmZzcGF0aC5iYXNlbmFtZSA9PSAiY29uZnRlc3QucHkiOgotICAgICAg
ICAgICAgbW9kdWxlID0gc2VsZi5jb25maWcucGx1Z2lubWFuYWdlci5faW1wb3J0Y29uZnRlc3Qo
c2VsZi5mc3BhdGgpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAg
ICAgICAgbW9kdWxlID0gc2VsZi5mc3BhdGgucHlpbXBvcnQoKQotICAgICAgICAgICAgZXhjZXB0
IEltcG9ydEVycm9yOgotICAgICAgICAgICAgICAgIGlmIHNlbGYuY29uZmlnLmdldHZhbHVlKCdk
b2N0ZXN0X2lnbm9yZV9pbXBvcnRfZXJyb3JzJyk6Ci0gICAgICAgICAgICAgICAgICAgIHB5dGVz
dC5za2lwKCd1bmFibGUgdG8gaW1wb3J0IG1vZHVsZSAlcicgJSBzZWxmLmZzcGF0aCkKLSAgICAg
ICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICAjIHVz
ZXMgaW50ZXJuYWwgZG9jdGVzdCBtb2R1bGUgcGFyc2luZyBtZWNoYW5pc20KLSAgICAgICAgZmlu
ZGVyID0gZG9jdGVzdC5Eb2NUZXN0RmluZGVyKCkKLSAgICAgICAgb3B0aW9uZmxhZ3MgPSBnZXRf
b3B0aW9uZmxhZ3Moc2VsZikKLSAgICAgICAgcnVubmVyID0gZG9jdGVzdC5EZWJ1Z1J1bm5lcih2
ZXJib3NlPTAsIG9wdGlvbmZsYWdzPW9wdGlvbmZsYWdzLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNoZWNrZXI9X2dldF9jaGVja2VyKCkpCi0gICAgICAgIGZvciB0ZXN0
IGluIGZpbmRlci5maW5kKG1vZHVsZSwgbW9kdWxlLl9fbmFtZV9fKToKLSAgICAgICAgICAgIGlm
IHRlc3QuZXhhbXBsZXM6ICAjIHNraXAgZW1wdHkgZG9jdGVzdHMKLSAgICAgICAgICAgICAgICB5
aWVsZCBEb2N0ZXN0SXRlbSh0ZXN0Lm5hbWUsIHNlbGYsIHJ1bm5lciwgdGVzdCkKLQotCi1kZWYg
X3NldHVwX2ZpeHR1cmVzKGRvY3Rlc3RfaXRlbSk6Ci0gICAgIiIiCi0gICAgVXNlZCBieSBEb2N0
ZXN0VGV4dGZpbGUgYW5kIERvY3Rlc3RJdGVtIHRvIHNldHVwIGZpeHR1cmUgaW5mb3JtYXRpb24u
Ci0gICAgIiIiCi0gICAgZGVmIGZ1bmMoKToKLSAgICAgICAgcGFzcwotCi0gICAgZG9jdGVzdF9p
dGVtLmZ1bmNhcmdzID0ge30KLSAgICBmbSA9IGRvY3Rlc3RfaXRlbS5zZXNzaW9uLl9maXh0dXJl
bWFuYWdlcgotICAgIGRvY3Rlc3RfaXRlbS5fZml4dHVyZWluZm8gPSBmbS5nZXRmaXh0dXJlaW5m
byhub2RlPWRvY3Rlc3RfaXRlbSwgZnVuYz1mdW5jLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjbHM9Tm9uZSwgZnVuY2FyZ3M9RmFsc2UpCi0gICAg
Zml4dHVyZV9yZXF1ZXN0ID0gRml4dHVyZVJlcXVlc3QoZG9jdGVzdF9pdGVtKQotICAgIGZpeHR1
cmVfcmVxdWVzdC5fZmlsbGZpeHR1cmVzKCkKLSAgICByZXR1cm4gZml4dHVyZV9yZXF1ZXN0Ci0K
LQotZGVmIF9nZXRfY2hlY2tlcigpOgotICAgICIiIgotICAgIFJldHVybnMgYSBkb2N0ZXN0Lk91
dHB1dENoZWNrZXIgc3ViY2xhc3MgdGhhdCB0YWtlcyBpbiBhY2NvdW50IHRoZQotICAgIEFMTE9X
X1VOSUNPREUgb3B0aW9uIHRvIGlnbm9yZSB1JycgcHJlZml4ZXMgaW4gc3RyaW5ncyBhbmQgQUxM
T1dfQllURVMKLSAgICB0byBzdHJpcCBiJycgcHJlZml4ZXMuCi0gICAgVXNlZnVsIHdoZW4gdGhl
IHNhbWUgZG9jdGVzdCBzaG91bGQgcnVuIGluIFB5dGhvbiAyIGFuZCBQeXRob24gMy4KLQotICAg
IEFuIGlubmVyIGNsYXNzIGlzIHVzZWQgdG8gYXZvaWQgaW1wb3J0aW5nICJkb2N0ZXN0IiBhdCB0
aGUgbW9kdWxlCi0gICAgbGV2ZWwuCi0gICAgIiIiCi0gICAgaWYgaGFzYXR0cihfZ2V0X2NoZWNr
ZXIsICdMaXRlcmFsc091dHB1dENoZWNrZXInKToKLSAgICAgICAgcmV0dXJuIF9nZXRfY2hlY2tl
ci5MaXRlcmFsc091dHB1dENoZWNrZXIoKQotCi0gICAgaW1wb3J0IGRvY3Rlc3QKLSAgICBpbXBv
cnQgcmUKLQotICAgIGNsYXNzIExpdGVyYWxzT3V0cHV0Q2hlY2tlcihkb2N0ZXN0Lk91dHB1dENo
ZWNrZXIpOgotICAgICAgICAiIiIKLSAgICAgICAgQ29waWVkIGZyb20gZG9jdGVzdF9ub3NlX3Bs
dWdpbi5weSBmcm9tIHRoZSBubHRrIHByb2plY3Q6Ci0gICAgICAgICAgICBodHRwczovL2dpdGh1
Yi5jb20vbmx0ay9ubHRrCi0KLSAgICAgICAgRnVydGhlciBleHRlbmRlZCB0byBhbHNvIHN1cHBv
cnQgYnl0ZSBsaXRlcmFscy4KLSAgICAgICAgIiIiCi0KLSAgICAgICAgX3VuaWNvZGVfbGl0ZXJh
bF9yZSA9IHJlLmNvbXBpbGUociIoXFd8XilbdVVdKFtyUl0/W1wnXCJdKSIsIHJlLlVOSUNPREUp
Ci0gICAgICAgIF9ieXRlc19saXRlcmFsX3JlID0gcmUuY29tcGlsZShyIihcV3xeKVtiQl0oW3JS
XT9bXCdcIl0pIiwgcmUuVU5JQ09ERSkKLQotICAgICAgICBkZWYgY2hlY2tfb3V0cHV0KHNlbGYs
IHdhbnQsIGdvdCwgb3B0aW9uZmxhZ3MpOgotICAgICAgICAgICAgcmVzID0gZG9jdGVzdC5PdXRw
dXRDaGVja2VyLmNoZWNrX291dHB1dChzZWxmLCB3YW50LCBnb3QsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmZsYWdzKQotICAgICAg
ICAgICAgaWYgcmVzOgotICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCi0KLSAgICAgICAgICAg
IGFsbG93X3VuaWNvZGUgPSBvcHRpb25mbGFncyAmIF9nZXRfYWxsb3dfdW5pY29kZV9mbGFnKCkK
LSAgICAgICAgICAgIGFsbG93X2J5dGVzID0gb3B0aW9uZmxhZ3MgJiBfZ2V0X2FsbG93X2J5dGVz
X2ZsYWcoKQotICAgICAgICAgICAgaWYgbm90IGFsbG93X3VuaWNvZGUgYW5kIG5vdCBhbGxvd19i
eXRlczoKLSAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgICAgICAgICAgZWxzZTog
ICMgcHJhZ21hOiBubyBjb3ZlcgotICAgICAgICAgICAgICAgIGRlZiByZW1vdmVfcHJlZml4ZXMo
cmVnZXgsIHR4dCk6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiByZS5zdWIocmVnZXgsIHIn
XDFcMicsIHR4dCkKLQotICAgICAgICAgICAgICAgIGlmIGFsbG93X3VuaWNvZGU6Ci0gICAgICAg
ICAgICAgICAgICAgIHdhbnQgPSByZW1vdmVfcHJlZml4ZXMoc2VsZi5fdW5pY29kZV9saXRlcmFs
X3JlLCB3YW50KQotICAgICAgICAgICAgICAgICAgICBnb3QgPSByZW1vdmVfcHJlZml4ZXMoc2Vs
Zi5fdW5pY29kZV9saXRlcmFsX3JlLCBnb3QpCi0gICAgICAgICAgICAgICAgaWYgYWxsb3dfYnl0
ZXM6Ci0gICAgICAgICAgICAgICAgICAgIHdhbnQgPSByZW1vdmVfcHJlZml4ZXMoc2VsZi5fYnl0
ZXNfbGl0ZXJhbF9yZSwgd2FudCkKLSAgICAgICAgICAgICAgICAgICAgZ290ID0gcmVtb3ZlX3By
ZWZpeGVzKHNlbGYuX2J5dGVzX2xpdGVyYWxfcmUsIGdvdCkKLSAgICAgICAgICAgICAgICByZXMg
PSBkb2N0ZXN0Lk91dHB1dENoZWNrZXIuY2hlY2tfb3V0cHV0KHNlbGYsIHdhbnQsIGdvdCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9w
dGlvbmZsYWdzKQotICAgICAgICAgICAgICAgIHJldHVybiByZXMKLQotICAgIF9nZXRfY2hlY2tl
ci5MaXRlcmFsc091dHB1dENoZWNrZXIgPSBMaXRlcmFsc091dHB1dENoZWNrZXIKLSAgICByZXR1
cm4gX2dldF9jaGVja2VyLkxpdGVyYWxzT3V0cHV0Q2hlY2tlcigpCi0KLQotZGVmIF9nZXRfYWxs
b3dfdW5pY29kZV9mbGFnKCk6Ci0gICAgIiIiCi0gICAgUmVnaXN0ZXJzIGFuZCByZXR1cm5zIHRo
ZSBBTExPV19VTklDT0RFIGZsYWcuCi0gICAgIiIiCi0gICAgaW1wb3J0IGRvY3Rlc3QKLSAgICBy
ZXR1cm4gZG9jdGVzdC5yZWdpc3Rlcl9vcHRpb25mbGFnKCdBTExPV19VTklDT0RFJykKLQotCi1k
ZWYgX2dldF9hbGxvd19ieXRlc19mbGFnKCk6Ci0gICAgIiIiCi0gICAgUmVnaXN0ZXJzIGFuZCBy
ZXR1cm5zIHRoZSBBTExPV19CWVRFUyBmbGFnLgotICAgICIiIgotICAgIGltcG9ydCBkb2N0ZXN0
Ci0gICAgcmV0dXJuIGRvY3Rlc3QucmVnaXN0ZXJfb3B0aW9uZmxhZygnQUxMT1dfQllURVMnKQpk
aWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0
ZXN0L2dlbnNjcmlwdC5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRl
c3QvX3B5dGVzdC9nZW5zY3JpcHQucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQy
OTYyZDhmYzgyLi4wMDAwMDAwMDAwMAotLS0gYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mv
dG9vbHMvcHl0ZXN0L19weXRlc3QvZ2Vuc2NyaXB0LnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTMy
ICswLDAgQEAKLSIiIiAoZGVwcmVjYXRlZCkgZ2VuZXJhdGUgYSBzaW5nbGUtZmlsZSBzZWxmLWNv
bnRhaW5lZCB2ZXJzaW9uIG9mIHB5dGVzdCAiIiIKLWltcG9ydCBvcwotaW1wb3J0IHN5cwotaW1w
b3J0IHBrZ3V0aWwKLQotaW1wb3J0IHB5Ci1pbXBvcnQgX3B5dGVzdAotCi0KLQotZGVmIGZpbmRf
dG9wbGV2ZWwobmFtZSk6Ci0gICAgZm9yIHN5c3BhdGggaW4gc3lzLnBhdGg6Ci0gICAgICAgIGJh
c2UgPSBweS5wYXRoLmxvY2FsKHN5c3BhdGgpCi0gICAgICAgIGxpYiA9IGJhc2UvbmFtZQotICAg
ICAgICBpZiBsaWIuY2hlY2soZGlyPTEpOgotICAgICAgICAgICAgcmV0dXJuIGxpYgotICAgICAg
ICBtb2QgPSBiYXNlLmpvaW4oIiVzLnB5IiAlIG5hbWUpCi0gICAgICAgIGlmIG1vZC5jaGVjayhm
aWxlPTEpOgotICAgICAgICAgICAgcmV0dXJuIG1vZAotICAgIHJhaXNlIExvb2t1cEVycm9yKG5h
bWUpCi0KLWRlZiBwa2duYW1lKHRvcGxldmVsLCByb290cGF0aCwgcGF0aCk6Ci0gICAgcGFydHMg
PSBwYXRoLnBhcnRzKClbbGVuKHJvb3RwYXRoLnBhcnRzKCkpOl0KLSAgICByZXR1cm4gJy4nLmpv
aW4oW3RvcGxldmVsXSArIFt4LnB1cmViYXNlbmFtZSBmb3IgeCBpbiBwYXJ0c10pCi0KLWRlZiBw
a2dfdG9fbWFwcGluZyhuYW1lKToKLSAgICB0b3BsZXZlbCA9IGZpbmRfdG9wbGV2ZWwobmFtZSkK
LSAgICBuYW1lMnNyYyA9IHt9Ci0gICAgaWYgdG9wbGV2ZWwuY2hlY2soZmlsZT0xKTogIyBtb2R1
bGUKLSAgICAgICAgbmFtZTJzcmNbdG9wbGV2ZWwucHVyZWJhc2VuYW1lXSA9IHRvcGxldmVsLnJl
YWQoKQotICAgIGVsc2U6ICMgcGFja2FnZQotICAgICAgICBmb3IgcHlmaWxlIGluIHRvcGxldmVs
LnZpc2l0KCcqLnB5Jyk6Ci0gICAgICAgICAgICBwa2cgPSBwa2duYW1lKG5hbWUsIHRvcGxldmVs
LCBweWZpbGUpCi0gICAgICAgICAgICBuYW1lMnNyY1twa2ddID0gcHlmaWxlLnJlYWQoKQotICAg
ICAgICAjIHdpdGggd2hlZWxzIHB5IHNvdXJjZSBjb2RlIG1pZ2h0IGJlIG5vdCBiZSBpbnN0YWxs
ZWQKLSAgICAgICAgIyBhbmQgdGhlIHJlc3VsdGluZyBnZW5zY3JpcHQgaXMgdXNlbGVzcywganVz
dCBiYWlsIG91dC4KLSAgICAgICAgYXNzZXJ0IG5hbWUyc3JjLCAibm8gc291cmNlIGNvZGUgZm91
bmQgZm9yICVyIGF0ICVyIiAlKG5hbWUsIHRvcGxldmVsKQotICAgIHJldHVybiBuYW1lMnNyYwot
Ci1kZWYgY29tcHJlc3NfbWFwcGluZyhtYXBwaW5nKToKLSAgICBpbXBvcnQgYmFzZTY0LCBwaWNr
bGUsIHpsaWIKLSAgICBkYXRhID0gcGlja2xlLmR1bXBzKG1hcHBpbmcsIDIpCi0gICAgZGF0YSA9
IHpsaWIuY29tcHJlc3MoZGF0YSwgOSkKLSAgICBkYXRhID0gYmFzZTY0LmVuY29kZXN0cmluZyhk
YXRhKQotICAgIGRhdGEgPSBkYXRhLmRlY29kZSgnYXNjaWknKQotICAgIHJldHVybiBkYXRhCi0K
LQotZGVmIGNvbXByZXNzX3BhY2thZ2VzKG5hbWVzKToKLSAgICBtYXBwaW5nID0ge30KLSAgICBm
b3IgbmFtZSBpbiBuYW1lczoKLSAgICAgICAgbWFwcGluZy51cGRhdGUocGtnX3RvX21hcHBpbmco
bmFtZSkpCi0gICAgcmV0dXJuIGNvbXByZXNzX21hcHBpbmcobWFwcGluZykKLQotZGVmIGdlbmVy
YXRlX3NjcmlwdChlbnRyeSwgcGFja2FnZXMpOgotICAgIGRhdGEgPSBjb21wcmVzc19wYWNrYWdl
cyhwYWNrYWdlcykKLSAgICB0bXBsID0gcHkucGF0aC5sb2NhbChfX2ZpbGVfXykuZGlycGF0aCgp
LmpvaW4oJ3N0YW5kYWxvbmV0ZW1wbGF0ZS5weScpCi0gICAgZXhlID0gdG1wbC5yZWFkKCkKLSAg
ICBleGUgPSBleGUucmVwbGFjZSgnQFNPVVJDRVNAJywgZGF0YSkKLSAgICBleGUgPSBleGUucmVw
bGFjZSgnQEVOVFJZQCcsIGVudHJ5KQotICAgIHJldHVybiBleGUKLQotCi1kZWYgcHl0ZXN0X2Fk
ZG9wdGlvbihwYXJzZXIpOgotICAgIGdyb3VwID0gcGFyc2VyLmdldGdyb3VwKCJkZWJ1Z2NvbmZp
ZyIpCi0gICAgZ3JvdXAuYWRkb3B0aW9uKCItLWdlbnNjcmlwdCIsIGFjdGlvbj0ic3RvcmUiLCBk
ZWZhdWx0PU5vbmUsCi0gICAgICAgIGRlc3Q9ImdlbnNjcmlwdCIsIG1ldGF2YXI9InBhdGgiLAot
ICAgICAgICBoZWxwPSJjcmVhdGUgc3RhbmRhbG9uZSBweXRlc3Qgc2NyaXB0IGF0IGdpdmVuIHRh
cmdldCBwYXRoLiIpCi0KLWRlZiBweXRlc3RfY21kbGluZV9tYWluKGNvbmZpZyk6Ci0gICAgaW1w
b3J0IF9weXRlc3QuY29uZmlnCi0gICAgZ2Vuc2NyaXB0ID0gY29uZmlnLmdldHZhbHVlKCJnZW5z
Y3JpcHQiKQotICAgIGlmIGdlbnNjcmlwdDoKLSAgICAgICAgdHcgPSBfcHl0ZXN0LmNvbmZpZy5j
cmVhdGVfdGVybWluYWxfd3JpdGVyKGNvbmZpZykKLSAgICAgICAgdHcubGluZSgiV0FSTklORzog
dXNhZ2Ugb2YgZ2Vuc2NyaXB0IGlzIGRlcHJlY2F0ZWQuIiwKLSAgICAgICAgICAgICAgICByZWQ9
VHJ1ZSkKLSAgICAgICAgZGVwcyA9ICBbJ3B5JywgJ19weXRlc3QnLCAncHl0ZXN0J10gICMgcGx1
Z2d5IGlzIHZlbmRvcmVkCi0gICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPCAoMiw3KToKLSAg
ICAgICAgICAgIGRlcHMuYXBwZW5kKCJhcmdwYXJzZSIpCi0gICAgICAgICAgICB0dy5saW5lKCJn
ZW5lcmF0ZWQgc2NyaXB0IHdpbGwgcnVuIG9uIHB5dGhvbjIuNi1weXRob24zLjMrKyIpCi0gICAg
ICAgIGVsc2U6Ci0gICAgICAgICAgICB0dy5saW5lKCJXQVJOSU5HOiBnZW5lcmF0ZWQgc2NyaXB0
IHdpbGwgbm90IHJ1biBvbiBweXRob24yLjYgIgotICAgICAgICAgICAgICAgICAgICAiZHVlIHRv
ICdhcmdwYXJzZScgZGVwZW5kZW5jeS4gVXNlIHB5dGhvbjIuNiAiCi0gICAgICAgICAgICAgICAg
ICAgICJ0byBnZW5lcmF0ZSBhIHB5dGhvbjIuNiBjb21wYXRpYmxlIHNjcmlwdCIsIHJlZD1UcnVl
KQotICAgICAgICBzY3JpcHQgPSBnZW5lcmF0ZV9zY3JpcHQoCi0gICAgICAgICAgICAnaW1wb3J0
IHB5dGVzdDsgcmFpc2UgU3lzdGVtRXhpdChweXRlc3QuY21kbGluZS5tYWluKCkpJywKLSAgICAg
ICAgICAgIGRlcHMsCi0gICAgICAgICkKLSAgICAgICAgZ2Vuc2NyaXB0ID0gcHkucGF0aC5sb2Nh
bChnZW5zY3JpcHQpCi0gICAgICAgIGdlbnNjcmlwdC53cml0ZShzY3JpcHQpCi0gICAgICAgIHR3
LmxpbmUoImdlbmVyYXRlZCBweXRlc3Qgc3RhbmRhbG9uZSBzY3JpcHQ6ICVzIiAlIGdlbnNjcmlw
dCwKLSAgICAgICAgICAgICAgICBib2xkPVRydWUpCi0gICAgICAgIHJldHVybiAwCi0KLQotZGVm
IHB5dGVzdF9uYW1lc3BhY2UoKToKLSAgICByZXR1cm4geydmcmVlemVfaW5jbHVkZXMnOiBmcmVl
emVfaW5jbHVkZXN9Ci0KLQotZGVmIGZyZWV6ZV9pbmNsdWRlcygpOgotICAgICIiIgotICAgIFJl
dHVybnMgYSBsaXN0IG9mIG1vZHVsZSBuYW1lcyB1c2VkIGJ5IHB5LnRlc3QgdGhhdCBzaG91bGQg
YmUKLSAgICBpbmNsdWRlZCBieSBjeF9mcmVlemUuCi0gICAgIiIiCi0gICAgcmVzdWx0ID0gbGlz
dChfaXRlcl9hbGxfbW9kdWxlcyhweSkpCi0gICAgcmVzdWx0ICs9IGxpc3QoX2l0ZXJfYWxsX21v
ZHVsZXMoX3B5dGVzdCkpCi0gICAgcmV0dXJuIHJlc3VsdAotCi0KLWRlZiBfaXRlcl9hbGxfbW9k
dWxlcyhwYWNrYWdlLCBwcmVmaXg9JycpOgotICAgICIiIgotICAgIEl0ZXJhdGVzIG92ZXIgdGhl
IG5hbWVzIG9mIGFsbCBtb2R1bGVzIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBnaXZlbgotICAg
IHBhY2thZ2UsIHJlY3Vyc2l2ZWx5LgotCi0gICAgRXhhbXBsZToKLSAgICAgICAgX2l0ZXJfYWxs
X21vZHVsZXMoX3B5dGVzdCkgLT4KLSAgICAgICAgICAgIFsnX3B5dGVzdC5hc3NlcnRpb24ubmV3
aW50ZXJwcmV0JywKLSAgICAgICAgICAgICAnX3B5dGVzdC5jYXB0dXJlJywKLSAgICAgICAgICAg
ICAnX3B5dGVzdC5jb3JlJywKLSAgICAgICAgICAgICAuLi4KLSAgICAgICAgICAgIF0KLSAgICAi
IiIKLSAgICBpZiB0eXBlKHBhY2thZ2UpIGlzIG5vdCBzdHI6Ci0gICAgICAgIHBhdGgsIHByZWZp
eCA9IHBhY2thZ2UuX19wYXRoX19bMF0sIHBhY2thZ2UuX19uYW1lX18gKyAnLicKLSAgICBlbHNl
OgotICAgICAgICBwYXRoID0gcGFja2FnZQotICAgIGZvciBfLCBuYW1lLCBpc19wYWNrYWdlIGlu
IHBrZ3V0aWwuaXRlcl9tb2R1bGVzKFtwYXRoXSk6Ci0gICAgICAgIGlmIGlzX3BhY2thZ2U6Ci0g
ICAgICAgICAgICBmb3IgbSBpbiBfaXRlcl9hbGxfbW9kdWxlcyhvcy5wYXRoLmpvaW4ocGF0aCwg
bmFtZSksIHByZWZpeD1uYW1lICsgJy4nKToKLSAgICAgICAgICAgICAgICB5aWVsZCBwcmVmaXgg
KyBtCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICB5aWVsZCBwcmVmaXggKyBuYW1lCmRpZmYg
LS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3Qv
aGVscGNvbmZpZy5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3Qv
X3B5dGVzdC9oZWxwY29uZmlnLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZGYw
YzU2YWM3Yi4uMDAwMDAwMDAwMDAKLS0tIGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rv
b2xzL3B5dGVzdC9fcHl0ZXN0L2hlbHBjb25maWcucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxMzkg
KzAsMCBAQAotIiIiIHZlcnNpb24gaW5mbywgaGVscCBtZXNzYWdlcywgdHJhY2luZyBjb25maWd1
cmF0aW9uLiAgIiIiCi1pbXBvcnQgcHkKLWltcG9ydCBweXRlc3QKLWltcG9ydCBvcywgc3lzCi0K
LWRlZiBweXRlc3RfYWRkb3B0aW9uKHBhcnNlcik6Ci0gICAgZ3JvdXAgPSBwYXJzZXIuZ2V0Z3Jv
dXAoJ2RlYnVnY29uZmlnJykKLSAgICBncm91cC5hZGRvcHRpb24oJy0tdmVyc2lvbicsIGFjdGlv
bj0ic3RvcmVfdHJ1ZSIsCi0gICAgICAgICAgICBoZWxwPSJkaXNwbGF5IHB5dGVzdCBsaWIgdmVy
c2lvbiBhbmQgaW1wb3J0IGluZm9ybWF0aW9uLiIpCi0gICAgZ3JvdXAuX2FkZG9wdGlvbigiLWgi
LCAiLS1oZWxwIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0iaGVscCIsCi0gICAgICAgICAg
ICBoZWxwPSJzaG93IGhlbHAgbWVzc2FnZSBhbmQgY29uZmlndXJhdGlvbiBpbmZvIikKLSAgICBn
cm91cC5fYWRkb3B0aW9uKCctcCcsIGFjdGlvbj0iYXBwZW5kIiwgZGVzdD0icGx1Z2lucyIsIGRl
ZmF1bHQgPSBbXSwKLSAgICAgICAgICAgICAgIG1ldGF2YXI9Im5hbWUiLAotICAgICAgICAgICAg
ICAgaGVscD0iZWFybHktbG9hZCBnaXZlbiBwbHVnaW4gKG11bHRpLWFsbG93ZWQpLiAiCi0gICAg
ICAgICAgICAgICAgICAgICJUbyBhdm9pZCBsb2FkaW5nIG9mIHBsdWdpbnMsIHVzZSB0aGUgYG5v
OmAgcHJlZml4LCBlLmcuICIKLSAgICAgICAgICAgICAgICAgICAgImBubzpkb2N0ZXN0YC4iKQot
ICAgIGdyb3VwLmFkZG9wdGlvbignLS10cmFjZWNvbmZpZycsICctLXRyYWNlLWNvbmZpZycsCi0g
ICAgICAgICAgICAgICBhY3Rpb249InN0b3JlX3RydWUiLCBkZWZhdWx0PUZhbHNlLAotICAgICAg
ICAgICAgICAgaGVscD0idHJhY2UgY29uc2lkZXJhdGlvbnMgb2YgY29uZnRlc3QucHkgZmlsZXMu
IiksCi0gICAgZ3JvdXAuYWRkb3B0aW9uKCctLWRlYnVnJywKLSAgICAgICAgICAgICAgIGFjdGlv
bj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9ImRlYnVnIiwgZGVmYXVsdD1GYWxzZSwKLSAgICAgICAgICAg
ICAgIGhlbHA9InN0b3JlIGludGVybmFsIHRyYWNpbmcgZGVidWcgaW5mb3JtYXRpb24gaW4gJ3B5
dGVzdGRlYnVnLmxvZycuIikKLQotCi1AcHl0ZXN0Lmhvb2tpbXBsKGhvb2t3cmFwcGVyPVRydWUp
Ci1kZWYgcHl0ZXN0X2NtZGxpbmVfcGFyc2UoKToKLSAgICBvdXRjb21lID0geWllbGQKLSAgICBj
b25maWcgPSBvdXRjb21lLmdldF9yZXN1bHQoKQotICAgIGlmIGNvbmZpZy5vcHRpb24uZGVidWc6
Ci0gICAgICAgIHBhdGggPSBvcy5wYXRoLmFic3BhdGgoInB5dGVzdGRlYnVnLmxvZyIpCi0gICAg
ICAgIGRlYnVnZmlsZSA9IG9wZW4ocGF0aCwgJ3cnKQotICAgICAgICBkZWJ1Z2ZpbGUud3JpdGUo
InZlcnNpb25zIHB5dGVzdC0lcywgcHktJXMsICIKLSAgICAgICAgICAgICAgICAicHl0aG9uLSVz
XG5jd2Q9JXNcbmFyZ3M9JXNcblxuIiAlKAotICAgICAgICAgICAgcHl0ZXN0Ll9fdmVyc2lvbl9f
LCBweS5fX3ZlcnNpb25fXywKLSAgICAgICAgICAgICIuIi5qb2luKG1hcChzdHIsIHN5cy52ZXJz
aW9uX2luZm8pKSwKLSAgICAgICAgICAgIG9zLmdldGN3ZCgpLCBjb25maWcuX29yaWdhcmdzKSkK
LSAgICAgICAgY29uZmlnLnRyYWNlLnJvb3Quc2V0d3JpdGVyKGRlYnVnZmlsZS53cml0ZSkKLSAg
ICAgICAgdW5kb190cmFjaW5nID0gY29uZmlnLnBsdWdpbm1hbmFnZXIuZW5hYmxlX3RyYWNpbmco
KQotICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJ3cml0aW5nIHB5dGVzdGRlYnVnIGluZm9ybWF0
aW9uIHRvICVzXG4iICUgcGF0aCkKLSAgICAgICAgZGVmIHVuc2V0X3RyYWNpbmcoKToKLSAgICAg
ICAgICAgIGRlYnVnZmlsZS5jbG9zZSgpCi0gICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJ3
cm90ZSBweXRlc3RkZWJ1ZyBpbmZvcm1hdGlvbiB0byAlc1xuIiAlCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRlYnVnZmlsZS5uYW1lKQotICAgICAgICAgICAgY29uZmlnLnRyYWNlLnJv
b3Quc2V0d3JpdGVyKE5vbmUpCi0gICAgICAgICAgICB1bmRvX3RyYWNpbmcoKQotICAgICAgICBj
b25maWcuYWRkX2NsZWFudXAodW5zZXRfdHJhY2luZykKLQotZGVmIHB5dGVzdF9jbWRsaW5lX21h
aW4oY29uZmlnKToKLSAgICBpZiBjb25maWcub3B0aW9uLnZlcnNpb246Ci0gICAgICAgIHAgPSBw
eS5wYXRoLmxvY2FsKHB5dGVzdC5fX2ZpbGVfXykKLSAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgi
VGhpcyBpcyBweXRlc3QgdmVyc2lvbiAlcywgaW1wb3J0ZWQgZnJvbSAlc1xuIiAlCi0gICAgICAg
ICAgICAocHl0ZXN0Ll9fdmVyc2lvbl9fLCBwKSkKLSAgICAgICAgcGx1Z2luaW5mbyA9IGdldHBs
dWdpbnZlcnNpb25pbmZvKGNvbmZpZykKLSAgICAgICAgaWYgcGx1Z2luaW5mbzoKLSAgICAgICAg
ICAgIGZvciBsaW5lIGluIHBsdWdpbmluZm86Ci0gICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53
cml0ZShsaW5lICsgIlxuIikKLSAgICAgICAgcmV0dXJuIDAKLSAgICBlbGlmIGNvbmZpZy5vcHRp
b24uaGVscDoKLSAgICAgICAgY29uZmlnLl9kb19jb25maWd1cmUoKQotICAgICAgICBzaG93aGVs
cChjb25maWcpCi0gICAgICAgIGNvbmZpZy5fZW5zdXJlX3VuY29uZmlndXJlKCkKLSAgICAgICAg
cmV0dXJuIDAKLQotZGVmIHNob3doZWxwKGNvbmZpZyk6Ci0gICAgcmVwb3J0ZXIgPSBjb25maWcu
cGx1Z2lubWFuYWdlci5nZXRfcGx1Z2luKCd0ZXJtaW5hbHJlcG9ydGVyJykKLSAgICB0dyA9IHJl
cG9ydGVyLl90dwotICAgIHR3LndyaXRlKGNvbmZpZy5fcGFyc2VyLm9wdHBhcnNlci5mb3JtYXRf
aGVscCgpKQotICAgIHR3LmxpbmUoKQotICAgIHR3LmxpbmUoKQotICAgICN0dy5zZXAoICI9Iiwg
ImNvbmZpZyBmaWxlIHNldHRpbmdzIikKLSAgICB0dy5saW5lKCJbcHl0ZXN0XSBpbmktb3B0aW9u
cyBpbiB0aGUgbmV4dCAiCi0gICAgICAgICAgICAicHl0ZXN0LmluaXx0b3guaW5pfHNldHVwLmNm
ZyBmaWxlOiIpCi0gICAgdHcubGluZSgpCi0KLSAgICBmb3IgbmFtZSBpbiBjb25maWcuX3BhcnNl
ci5faW5pbmFtZXM6Ci0gICAgICAgIGhlbHAsIHR5cGUsIGRlZmF1bHQgPSBjb25maWcuX3BhcnNl
ci5faW5pZGljdFtuYW1lXQotICAgICAgICBpZiB0eXBlIGlzIE5vbmU6Ci0gICAgICAgICAgICB0
eXBlID0gInN0cmluZyIKLSAgICAgICAgc3BlYyA9ICIlcyAoJXMpIiAlIChuYW1lLCB0eXBlKQot
ICAgICAgICBsaW5lID0gIiAgJS0yNHMgJXMiICUoc3BlYywgaGVscCkKLSAgICAgICAgdHcubGlu
ZShsaW5lWzp0dy5mdWxsd2lkdGhdKQotCi0gICAgdHcubGluZSgpCi0gICAgdHcubGluZSgiZW52
aXJvbm1lbnQgdmFyaWFibGVzOiIpCi0gICAgdmFycyA9IFsKLSAgICAgICAgKCJQWVRFU1RfQURE
T1BUUyIsICJleHRyYSBjb21tYW5kIGxpbmUgb3B0aW9ucyIpLAotICAgICAgICAoIlBZVEVTVF9Q
TFVHSU5TIiwgImNvbW1hLXNlcGFyYXRlZCBwbHVnaW5zIHRvIGxvYWQgZHVyaW5nIHN0YXJ0dXAi
KSwKLSAgICAgICAgKCJQWVRFU1RfREVCVUciLCAic2V0IHRvIGVuYWJsZSBkZWJ1ZyB0cmFjaW5n
IG9mIHB5dGVzdCdzIGludGVybmFscyIpCi0gICAgXQotICAgIGZvciBuYW1lLCBoZWxwIGluIHZh
cnM6Ci0gICAgICAgIHR3LmxpbmUoIiAgJS0yNHMgJXMiICUgKG5hbWUsIGhlbHApKQotICAgIHR3
LmxpbmUoKQotICAgIHR3LmxpbmUoKQotCi0gICAgdHcubGluZSgidG8gc2VlIGF2YWlsYWJsZSBt
YXJrZXJzIHR5cGU6IHB5LnRlc3QgLS1tYXJrZXJzIikKLSAgICB0dy5saW5lKCJ0byBzZWUgYXZh
aWxhYmxlIGZpeHR1cmVzIHR5cGU6IHB5LnRlc3QgLS1maXh0dXJlcyIpCi0gICAgdHcubGluZSgi
KHNob3duIGFjY29yZGluZyB0byBzcGVjaWZpZWQgZmlsZV9vcl9kaXIgb3IgY3VycmVudCBkaXIg
IgotICAgICAgICAgICAgImlmIG5vdCBzcGVjaWZpZWQpIikKLQotICAgIGZvciB3YXJuaW5ncmVw
b3J0IGluIHJlcG9ydGVyLnN0YXRzLmdldCgnd2FybmluZ3MnLCBbXSk6Ci0gICAgICAgIHR3Lmxp
bmUoIndhcm5pbmcgOiAiICsgd2FybmluZ3JlcG9ydC5tZXNzYWdlLCByZWQ9VHJ1ZSkKLSAgICBy
ZXR1cm4KLQotCi1jb25mdGVzdF9vcHRpb25zID0gWwotICAgICgncHl0ZXN0X3BsdWdpbnMnLCAn
bGlzdCBvZiBwbHVnaW4gbmFtZXMgdG8gbG9hZCcpLAotXQotCi1kZWYgZ2V0cGx1Z2ludmVyc2lv
bmluZm8oY29uZmlnKToKLSAgICBsaW5lcyA9IFtdCi0gICAgcGx1Z2luaW5mbyA9IGNvbmZpZy5w
bHVnaW5tYW5hZ2VyLmxpc3RfcGx1Z2luX2Rpc3RpbmZvKCkKLSAgICBpZiBwbHVnaW5pbmZvOgot
ICAgICAgICBsaW5lcy5hcHBlbmQoInNldHVwdG9vbHMgcmVnaXN0ZXJlZCBwbHVnaW5zOiIpCi0g
ICAgICAgIGZvciBwbHVnaW4sIGRpc3QgaW4gcGx1Z2luaW5mbzoKLSAgICAgICAgICAgIGxvYyA9
IGdldGF0dHIocGx1Z2luLCAnX19maWxlX18nLCByZXByKHBsdWdpbikpCi0gICAgICAgICAgICBj
b250ZW50ID0gIiVzLSVzIGF0ICVzIiAlIChkaXN0LnByb2plY3RfbmFtZSwgZGlzdC52ZXJzaW9u
LCBsb2MpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoIiAgIiArIGNvbnRlbnQpCi0gICAgcmV0
dXJuIGxpbmVzCi0KLWRlZiBweXRlc3RfcmVwb3J0X2hlYWRlcihjb25maWcpOgotICAgIGxpbmVz
ID0gW10KLSAgICBpZiBjb25maWcub3B0aW9uLmRlYnVnIG9yIGNvbmZpZy5vcHRpb24udHJhY2Vj
b25maWc6Ci0gICAgICAgIGxpbmVzLmFwcGVuZCgidXNpbmc6IHB5dGVzdC0lcyBweWxpYi0lcyIg
JQotICAgICAgICAgICAgKHB5dGVzdC5fX3ZlcnNpb25fXyxweS5fX3ZlcnNpb25fXykpCi0KLSAg
ICAgICAgdmVyaW5mbyA9IGdldHBsdWdpbnZlcnNpb25pbmZvKGNvbmZpZykKLSAgICAgICAgaWYg
dmVyaW5mbzoKLSAgICAgICAgICAgIGxpbmVzLmV4dGVuZCh2ZXJpbmZvKQotCi0gICAgaWYgY29u
ZmlnLm9wdGlvbi50cmFjZWNvbmZpZzoKLSAgICAgICAgbGluZXMuYXBwZW5kKCJhY3RpdmUgcGx1
Z2luczoiKQotICAgICAgICBpdGVtcyA9IGNvbmZpZy5wbHVnaW5tYW5hZ2VyLmxpc3RfbmFtZV9w
bHVnaW4oKQotICAgICAgICBmb3IgbmFtZSwgcGx1Z2luIGluIGl0ZW1zOgotICAgICAgICAgICAg
aWYgaGFzYXR0cihwbHVnaW4sICdfX2ZpbGVfXycpOgotICAgICAgICAgICAgICAgIHIgPSBwbHVn
aW4uX19maWxlX18KLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgciA9IHJlcHIo
cGx1Z2luKQotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCIgICAgJS0yMHM6ICVzIiAlKG5hbWUs
IHIpKQotICAgIHJldHVybiBsaW5lcwpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0
ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L2hvb2tzcGVjLnB5IGIvV2ViRHJpdmVyVGVzdHMv
aW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L2hvb2tzcGVjLnB5CmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA2MGU5YjQ3ZDI2Mi4uMDAwMDAwMDAwMDAKLS0tIGEvV2ViRHJp
dmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L2hvb2tzcGVjLnB5Cisr
KyAvZGV2L251bGwKQEAgLTEsMjk1ICswLDAgQEAKLSIiIiBob29rIHNwZWNpZmljYXRpb25zIGZv
ciBweXRlc3QgcGx1Z2lucywgaW52b2tlZCBmcm9tIG1haW4ucHkgYW5kIGJ1aWx0aW4gcGx1Z2lu
cy4gICIiIgotCi1mcm9tIF9weXRlc3QuX3BsdWdneSBpbXBvcnQgSG9va3NwZWNNYXJrZXIKLQot
aG9va3NwZWMgPSBIb29rc3BlY01hcmtlcigicHl0ZXN0IikKLQotIyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0jIEluaXRpYWxpemF0aW9uIGhvb2tzIGNhbGxlZCBmb3IgZXZlcnkgcGx1Z2luCi0jIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLQotQGhvb2tzcGVjKGhpc3RvcmljPVRydWUpCi1kZWYgcHl0ZXN0X2FkZGhv
b2tzKHBsdWdpbm1hbmFnZXIpOgotICAgICIiImNhbGxlZCBhdCBwbHVnaW4gcmVnaXN0cmF0aW9u
IHRpbWUgdG8gYWxsb3cgYWRkaW5nIG5ldyBob29rcyB2aWEgYSBjYWxsIHRvCi0gICAgcGx1Z2lu
bWFuYWdlci5hZGRfaG9va3NwZWNzKG1vZHVsZV9vcl9jbGFzcywgcHJlZml4KS4iIiIKLQotCi1A
aG9va3NwZWMoaGlzdG9yaWM9VHJ1ZSkKLWRlZiBweXRlc3RfbmFtZXNwYWNlKCk6Ci0gICAgIiIi
cmV0dXJuIGRpY3Qgb2YgbmFtZS0+b2JqZWN0IHRvIGJlIG1hZGUgZ2xvYmFsbHkgYXZhaWxhYmxl
IGluCi0gICAgdGhlIHB5dGVzdCBuYW1lc3BhY2UuICBUaGlzIGhvb2sgaXMgY2FsbGVkIGF0IHBs
dWdpbiByZWdpc3RyYXRpb24KLSAgICB0aW1lLgotICAgICIiIgotCi1AaG9va3NwZWMoaGlzdG9y
aWM9VHJ1ZSkKLWRlZiBweXRlc3RfcGx1Z2luX3JlZ2lzdGVyZWQocGx1Z2luLCBtYW5hZ2VyKToK
LSAgICAiIiIgYSBuZXcgcHl0ZXN0IHBsdWdpbiBnb3QgcmVnaXN0ZXJlZC4gIiIiCi0KLQotQGhv
b2tzcGVjKGhpc3RvcmljPVRydWUpCi1kZWYgcHl0ZXN0X2FkZG9wdGlvbihwYXJzZXIpOgotICAg
ICIiInJlZ2lzdGVyIGFyZ3BhcnNlLXN0eWxlIG9wdGlvbnMgYW5kIGluaS1zdHlsZSBjb25maWcg
dmFsdWVzLAotICAgIGNhbGxlZCBvbmNlIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSB0ZXN0IHJ1bi4K
LQotICAgIC4uIG5vdGU6OgotCi0gICAgICAgIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGltcGxl
bWVudGVkIG9ubHkgaW4gcGx1Z2lucyBvciBgYGNvbmZ0ZXN0LnB5YGAKLSAgICAgICAgZmlsZXMg
c2l0dWF0ZWQgYXQgdGhlIHRlc3RzIHJvb3QgZGlyZWN0b3J5IGR1ZSB0byBob3cgcHkudGVzdAot
ICAgICAgICA6cmVmOmBkaXNjb3ZlcnMgcGx1Z2lucyBkdXJpbmcgc3RhcnR1cCA8cGx1Z2lub3Jk
ZXI+YC4KLQotICAgIDphcmcgcGFyc2VyOiBUbyBhZGQgY29tbWFuZCBsaW5lIG9wdGlvbnMsIGNh
bGwKLSAgICAgICAgOnB5OmZ1bmM6YHBhcnNlci5hZGRvcHRpb24oLi4uKSA8X3B5dGVzdC5jb25m
aWcuUGFyc2VyLmFkZG9wdGlvbj5gLgotICAgICAgICBUbyBhZGQgaW5pLWZpbGUgdmFsdWVzIGNh
bGwgOnB5OmZ1bmM6YHBhcnNlci5hZGRpbmkoLi4uKQotICAgICAgICA8X3B5dGVzdC5jb25maWcu
UGFyc2VyLmFkZGluaT5gLgotCi0gICAgT3B0aW9ucyBjYW4gbGF0ZXIgYmUgYWNjZXNzZWQgdGhy
b3VnaCB0aGUKLSAgICA6cHk6Y2xhc3M6YGNvbmZpZyA8X3B5dGVzdC5jb25maWcuQ29uZmlnPmAg
b2JqZWN0LCByZXNwZWN0aXZlbHk6Ci0KLSAgICAtIDpweTpmdW5jOmBjb25maWcuZ2V0b3B0aW9u
KG5hbWUpIDxfcHl0ZXN0LmNvbmZpZy5Db25maWcuZ2V0b3B0aW9uPmAgdG8KLSAgICAgIHJldHJp
ZXZlIHRoZSB2YWx1ZSBvZiBhIGNvbW1hbmQgbGluZSBvcHRpb24uCi0KLSAgICAtIDpweTpmdW5j
OmBjb25maWcuZ2V0aW5pKG5hbWUpIDxfcHl0ZXN0LmNvbmZpZy5Db25maWcuZ2V0aW5pPmAgdG8g
cmV0cmlldmUKLSAgICAgIGEgdmFsdWUgcmVhZCBmcm9tIGFuIGluaS1zdHlsZSBmaWxlLgotCi0g
ICAgVGhlIGNvbmZpZyBvYmplY3QgaXMgcGFzc2VkIGFyb3VuZCBvbiBtYW55IGludGVybmFsIG9i
amVjdHMgdmlhIHRoZSBgYC5jb25maWdgYAotICAgIGF0dHJpYnV0ZSBvciBjYW4gYmUgcmV0cmll
dmVkIGFzIHRoZSBgYHB5dGVzdGNvbmZpZ2BgIGZpeHR1cmUgb3IgYWNjZXNzZWQKLSAgICB2aWEg
KGRlcHJlY2F0ZWQpIGBgcHl0ZXN0LmNvbmZpZ2BgLgotICAgICIiIgotCi1AaG9va3NwZWMoaGlz
dG9yaWM9VHJ1ZSkKLWRlZiBweXRlc3RfY29uZmlndXJlKGNvbmZpZyk6Ci0gICAgIiIiIGNhbGxl
ZCBhZnRlciBjb21tYW5kIGxpbmUgb3B0aW9ucyBoYXZlIGJlZW4gcGFyc2VkCi0gICAgYW5kIGFs
bCBwbHVnaW5zIGFuZCBpbml0aWFsIGNvbmZ0ZXN0IGZpbGVzIGJlZW4gbG9hZGVkLgotICAgIFRo
aXMgaG9vayBpcyBjYWxsZWQgZm9yIGV2ZXJ5IHBsdWdpbi4KLSAgICAiIiIKLQotIyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0jIEJvb3RzdHJhcHBpbmcgaG9va3MgY2FsbGVkIGZvciBwbHVnaW5zIHJlZ2lz
dGVyZWQgZWFybHkgZW5vdWdoOgotIyBpbnRlcm5hbCBhbmQgM3JkIHBhcnR5IHBsdWdpbnMgYXMg
d2VsbCBhcyBkaXJlY3RseQotIyBkaXNjb3ZlcmFibGUgY29uZnRlc3QucHkgbG9jYWwgcGx1Z2lu
cy4KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1AaG9va3NwZWMoZmlyc3RyZXN1bHQ9VHJ1ZSkKLWRl
ZiBweXRlc3RfY21kbGluZV9wYXJzZShwbHVnaW5tYW5hZ2VyLCBhcmdzKToKLSAgICAiIiJyZXR1
cm4gaW5pdGlhbGl6ZWQgY29uZmlnIG9iamVjdCwgcGFyc2luZyB0aGUgc3BlY2lmaWVkIGFyZ3Mu
ICIiIgotCi1kZWYgcHl0ZXN0X2NtZGxpbmVfcHJlcGFyc2UoY29uZmlnLCBhcmdzKToKLSAgICAi
IiIoZGVwcmVjYXRlZCkgbW9kaWZ5IGNvbW1hbmQgbGluZSBhcmd1bWVudHMgYmVmb3JlIG9wdGlv
biBwYXJzaW5nLiAiIiIKLQotQGhvb2tzcGVjKGZpcnN0cmVzdWx0PVRydWUpCi1kZWYgcHl0ZXN0
X2NtZGxpbmVfbWFpbihjb25maWcpOgotICAgICIiIiBjYWxsZWQgZm9yIHBlcmZvcm1pbmcgdGhl
IG1haW4gY29tbWFuZCBsaW5lIGFjdGlvbi4gVGhlIGRlZmF1bHQKLSAgICBpbXBsZW1lbnRhdGlv
biB3aWxsIGludm9rZSB0aGUgY29uZmlndXJlIGhvb2tzIGFuZCBydW50ZXN0X21haW5sb29wLiAi
IiIKLQotZGVmIHB5dGVzdF9sb2FkX2luaXRpYWxfY29uZnRlc3RzKGVhcmx5X2NvbmZpZywgcGFy
c2VyLCBhcmdzKToKLSAgICAiIiIgaW1wbGVtZW50cyB0aGUgbG9hZGluZyBvZiBpbml0aWFsIGNv
bmZ0ZXN0IGZpbGVzIGFoZWFkCi0gICAgb2YgY29tbWFuZCBsaW5lIG9wdGlvbiBwYXJzaW5nLiAi
IiIKLQotCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgY29sbGVjdGlvbiBob29rcwotIyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KLUBob29rc3BlYyhmaXJzdHJlc3VsdD1UcnVlKQotZGVmIHB5dGVzdF9jb2xs
ZWN0aW9uKHNlc3Npb24pOgotICAgICIiIiBwZXJmb3JtIHRoZSBjb2xsZWN0aW9uIHByb3RvY29s
IGZvciB0aGUgZ2l2ZW4gc2Vzc2lvbi4gIiIiCi0KLWRlZiBweXRlc3RfY29sbGVjdGlvbl9tb2Rp
ZnlpdGVtcyhzZXNzaW9uLCBjb25maWcsIGl0ZW1zKToKLSAgICAiIiIgY2FsbGVkIGFmdGVyIGNv
bGxlY3Rpb24gaGFzIGJlZW4gcGVyZm9ybWVkLCBtYXkgZmlsdGVyIG9yIHJlLW9yZGVyCi0gICAg
dGhlIGl0ZW1zIGluLXBsYWNlLiIiIgotCi1kZWYgcHl0ZXN0X2NvbGxlY3Rpb25fZmluaXNoKHNl
c3Npb24pOgotICAgICIiIiBjYWxsZWQgYWZ0ZXIgY29sbGVjdGlvbiBoYXMgYmVlbiBwZXJmb3Jt
ZWQgYW5kIG1vZGlmaWVkLiAiIiIKLQotQGhvb2tzcGVjKGZpcnN0cmVzdWx0PVRydWUpCi1kZWYg
cHl0ZXN0X2lnbm9yZV9jb2xsZWN0KHBhdGgsIGNvbmZpZyk6Ci0gICAgIiIiIHJldHVybiBUcnVl
IHRvIHByZXZlbnQgY29uc2lkZXJpbmcgdGhpcyBwYXRoIGZvciBjb2xsZWN0aW9uLgotICAgIFRo
aXMgaG9vayBpcyBjb25zdWx0ZWQgZm9yIGFsbCBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgcHJpb3Ig
dG8gY2FsbGluZwotICAgIG1vcmUgc3BlY2lmaWMgaG9va3MuCi0gICAgIiIiCi0KLUBob29rc3Bl
YyhmaXJzdHJlc3VsdD1UcnVlKQotZGVmIHB5dGVzdF9jb2xsZWN0X2RpcmVjdG9yeShwYXRoLCBw
YXJlbnQpOgotICAgICIiIiBjYWxsZWQgYmVmb3JlIHRyYXZlcnNpbmcgYSBkaXJlY3RvcnkgZm9y
IGNvbGxlY3Rpb24gZmlsZXMuICIiIgotCi1kZWYgcHl0ZXN0X2NvbGxlY3RfZmlsZShwYXRoLCBw
YXJlbnQpOgotICAgICIiIiByZXR1cm4gY29sbGVjdGlvbiBOb2RlIG9yIE5vbmUgZm9yIHRoZSBn
aXZlbiBwYXRoLiBBbnkgbmV3IG5vZGUKLSAgICBuZWVkcyB0byBoYXZlIHRoZSBzcGVjaWZpZWQg
YGBwYXJlbnRgYCBhcyBhIHBhcmVudC4iIiIKLQotIyBsb2dnaW5nIGhvb2tzIGZvciBjb2xsZWN0
aW9uCi1kZWYgcHl0ZXN0X2NvbGxlY3RzdGFydChjb2xsZWN0b3IpOgotICAgICIiIiBjb2xsZWN0
b3Igc3RhcnRzIGNvbGxlY3RpbmcuICIiIgotCi1kZWYgcHl0ZXN0X2l0ZW1jb2xsZWN0ZWQoaXRl
bSk6Ci0gICAgIiIiIHdlIGp1c3QgY29sbGVjdGVkIGEgdGVzdCBpdGVtLiAiIiIKLQotZGVmIHB5
dGVzdF9jb2xsZWN0cmVwb3J0KHJlcG9ydCk6Ci0gICAgIiIiIGNvbGxlY3RvciBmaW5pc2hlZCBj
b2xsZWN0aW5nLiAiIiIKLQotZGVmIHB5dGVzdF9kZXNlbGVjdGVkKGl0ZW1zKToKLSAgICAiIiIg
Y2FsbGVkIGZvciB0ZXN0IGl0ZW1zIGRlc2VsZWN0ZWQgYnkga2V5d29yZC4gIiIiCi0KLUBob29r
c3BlYyhmaXJzdHJlc3VsdD1UcnVlKQotZGVmIHB5dGVzdF9tYWtlX2NvbGxlY3RfcmVwb3J0KGNv
bGxlY3Rvcik6Ci0gICAgIiIiIHBlcmZvcm0gYGBjb2xsZWN0b3IuY29sbGVjdCgpYGAgYW5kIHJl
dHVybiBhIENvbGxlY3RSZXBvcnQuICIiIgotCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgUHl0aG9u
IHRlc3QgZnVuY3Rpb24gcmVsYXRlZCBob29rcwotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUBob29r
c3BlYyhmaXJzdHJlc3VsdD1UcnVlKQotZGVmIHB5dGVzdF9weWNvbGxlY3RfbWFrZW1vZHVsZShw
YXRoLCBwYXJlbnQpOgotICAgICIiIiByZXR1cm4gYSBNb2R1bGUgY29sbGVjdG9yIG9yIE5vbmUg
Zm9yIHRoZSBnaXZlbiBwYXRoLgotICAgIFRoaXMgaG9vayB3aWxsIGJlIGNhbGxlZCBmb3IgZWFj
aCBtYXRjaGluZyB0ZXN0IG1vZHVsZSBwYXRoLgotICAgIFRoZSBweXRlc3RfY29sbGVjdF9maWxl
IGhvb2sgbmVlZHMgdG8gYmUgdXNlZCBpZiB5b3Ugd2FudCB0bwotICAgIGNyZWF0ZSB0ZXN0IG1v
ZHVsZXMgZm9yIGZpbGVzIHRoYXQgZG8gbm90IG1hdGNoIGFzIGEgdGVzdCBtb2R1bGUuCi0gICAg
IiIiCi0KLUBob29rc3BlYyhmaXJzdHJlc3VsdD1UcnVlKQotZGVmIHB5dGVzdF9weWNvbGxlY3Rf
bWFrZWl0ZW0oY29sbGVjdG9yLCBuYW1lLCBvYmopOgotICAgICIiIiByZXR1cm4gY3VzdG9tIGl0
ZW0vY29sbGVjdG9yIGZvciBhIHB5dGhvbiBvYmplY3QgaW4gYSBtb2R1bGUsIG9yIE5vbmUuICAi
IiIKLQotQGhvb2tzcGVjKGZpcnN0cmVzdWx0PVRydWUpCi1kZWYgcHl0ZXN0X3B5ZnVuY19jYWxs
KHB5ZnVuY2l0ZW0pOgotICAgICIiIiBjYWxsIHVuZGVybHlpbmcgdGVzdCBmdW5jdGlvbi4gIiIi
Ci0KLWRlZiBweXRlc3RfZ2VuZXJhdGVfdGVzdHMobWV0YWZ1bmMpOgotICAgICIiIiBnZW5lcmF0
ZSAobXVsdGlwbGUpIHBhcmFtZXRyaXplZCBjYWxscyB0byBhIHRlc3QgZnVuY3Rpb24uIiIiCi0K
LSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotIyBnZW5lcmljIHJ1bnRlc3QgcmVsYXRlZCBob29rcwotIyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0KLUBob29rc3BlYyhmaXJzdHJlc3VsdD1UcnVlKQotZGVmIHB5dGVz
dF9ydW50ZXN0bG9vcChzZXNzaW9uKToKLSAgICAiIiIgY2FsbGVkIGZvciBwZXJmb3JtaW5nIHRo
ZSBtYWluIHJ1bnRlc3QgbG9vcAotICAgIChhZnRlciBjb2xsZWN0aW9uIGZpbmlzaGVkKS4gIiIi
Ci0KLWRlZiBweXRlc3RfaXRlbXN0YXJ0KGl0ZW0sIG5vZGUpOgotICAgICIiIiAoZGVwcmVjYXRl
ZCwgdXNlIHB5dGVzdF9ydW50ZXN0X2xvZ3N0YXJ0KS4gIiIiCi0KLUBob29rc3BlYyhmaXJzdHJl
c3VsdD1UcnVlKQotZGVmIHB5dGVzdF9ydW50ZXN0X3Byb3RvY29sKGl0ZW0sIG5leHRpdGVtKToK
LSAgICAiIiIgaW1wbGVtZW50cyB0aGUgcnVudGVzdF9zZXR1cC9jYWxsL3RlYXJkb3duIHByb3Rv
Y29sIGZvcgotICAgIHRoZSBnaXZlbiB0ZXN0IGl0ZW0sIGluY2x1ZGluZyBjYXB0dXJpbmcgZXhj
ZXB0aW9ucyBhbmQgY2FsbGluZwotICAgIHJlcG9ydGluZyBob29rcy4KLQotICAgIDphcmcgaXRl
bTogdGVzdCBpdGVtIGZvciB3aGljaCB0aGUgcnVudGVzdCBwcm90b2NvbCBpcyBwZXJmb3JtZWQu
Ci0KLSAgICA6YXJnIG5leHRpdGVtOiB0aGUgc2NoZWR1bGVkLXRvLWJlLW5leHQgdGVzdCBpdGVt
IChvciBOb25lIGlmIHRoaXMKLSAgICAgICAgICAgICAgICAgICBpcyB0aGUgZW5kIG15IGZyaWVu
ZCkuICBUaGlzIGFyZ3VtZW50IGlzIHBhc3NlZCBvbiB0bwotICAgICAgICAgICAgICAgICAgIDpw
eTpmdW5jOmBweXRlc3RfcnVudGVzdF90ZWFyZG93bmAuCi0KLSAgICA6cmV0dXJuIGJvb2xlYW46
IFRydWUgaWYgbm8gZnVydGhlciBob29rIGltcGxlbWVudGF0aW9ucyBzaG91bGQgYmUgaW52b2tl
ZC4KLSAgICAiIiIKLQotZGVmIHB5dGVzdF9ydW50ZXN0X2xvZ3N0YXJ0KG5vZGVpZCwgbG9jYXRp
b24pOgotICAgICIiIiBzaWduYWwgdGhlIHN0YXJ0IG9mIHJ1bm5pbmcgYSBzaW5nbGUgdGVzdCBp
dGVtLiAiIiIKLQotZGVmIHB5dGVzdF9ydW50ZXN0X3NldHVwKGl0ZW0pOgotICAgICIiIiBjYWxs
ZWQgYmVmb3JlIGBgcHl0ZXN0X3J1bnRlc3RfY2FsbChpdGVtKWBgLiAiIiIKLQotZGVmIHB5dGVz
dF9ydW50ZXN0X2NhbGwoaXRlbSk6Ci0gICAgIiIiIGNhbGxlZCB0byBleGVjdXRlIHRoZSB0ZXN0
IGBgaXRlbWBgLiAiIiIKLQotZGVmIHB5dGVzdF9ydW50ZXN0X3RlYXJkb3duKGl0ZW0sIG5leHRp
dGVtKToKLSAgICAiIiIgY2FsbGVkIGFmdGVyIGBgcHl0ZXN0X3J1bnRlc3RfY2FsbGBgLgotCi0g
ICAgOmFyZyBuZXh0aXRlbTogdGhlIHNjaGVkdWxlZC10by1iZS1uZXh0IHRlc3QgaXRlbSAoTm9u
ZSBpZiBubyBmdXJ0aGVyCi0gICAgICAgICAgICAgICAgICAgdGVzdCBpdGVtIGlzIHNjaGVkdWxl
ZCkuICBUaGlzIGFyZ3VtZW50IGNhbiBiZSB1c2VkIHRvCi0gICAgICAgICAgICAgICAgICAgcGVy
Zm9ybSBleGFjdCB0ZWFyZG93bnMsIGkuZS4gY2FsbGluZyBqdXN0IGVub3VnaCBmaW5hbGl6ZXJz
Ci0gICAgICAgICAgICAgICAgICAgc28gdGhhdCBuZXh0aXRlbSBvbmx5IG5lZWRzIHRvIGNhbGwg
c2V0dXAtZnVuY3Rpb25zLgotICAgICIiIgotCi1AaG9va3NwZWMoZmlyc3RyZXN1bHQ9VHJ1ZSkK
LWRlZiBweXRlc3RfcnVudGVzdF9tYWtlcmVwb3J0KGl0ZW0sIGNhbGwpOgotICAgICIiIiByZXR1
cm4gYSA6cHk6Y2xhc3M6YF9weXRlc3QucnVubmVyLlRlc3RSZXBvcnRgIG9iamVjdAotICAgIGZv
ciB0aGUgZ2l2ZW4gOnB5OmNsYXNzOmBweXRlc3QuSXRlbWAgYW5kCi0gICAgOnB5OmNsYXNzOmBf
cHl0ZXN0LnJ1bm5lci5DYWxsSW5mb2AuCi0gICAgIiIiCi0KLWRlZiBweXRlc3RfcnVudGVzdF9s
b2dyZXBvcnQocmVwb3J0KToKLSAgICAiIiIgcHJvY2VzcyBhIHRlc3Qgc2V0dXAvY2FsbC90ZWFy
ZG93biByZXBvcnQgcmVsYXRpbmcgdG8KLSAgICB0aGUgcmVzcGVjdGl2ZSBwaGFzZSBvZiBleGVj
dXRpbmcgYSB0ZXN0LiAiIiIKLQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIHRlc3Qgc2Vzc2lvbiBy
ZWxhdGVkIGhvb2tzCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotZGVmIHB5dGVzdF9zZXNzaW9uc3Rh
cnQoc2Vzc2lvbik6Ci0gICAgIiIiIGJlZm9yZSBzZXNzaW9uLm1haW4oKSBpcyBjYWxsZWQuICIi
IgotCi1kZWYgcHl0ZXN0X3Nlc3Npb25maW5pc2goc2Vzc2lvbiwgZXhpdHN0YXR1cyk6Ci0gICAg
IiIiIHdob2xlIHRlc3QgcnVuIGZpbmlzaGVzLiAiIiIKLQotZGVmIHB5dGVzdF91bmNvbmZpZ3Vy
ZShjb25maWcpOgotICAgICIiIiBjYWxsZWQgYmVmb3JlIHRlc3QgcHJvY2VzcyBpcyBleGl0ZWQu
ICAiIiIKLQotCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgaG9va3MgZm9yIGN1c3RvbWlzaW5nIHRo
ZSBhc3NlcnQgbWV0aG9kcwotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWRlZiBweXRlc3RfYXNzZXJ0
cmVwcl9jb21wYXJlKGNvbmZpZywgb3AsIGxlZnQsIHJpZ2h0KToKLSAgICAiIiJyZXR1cm4gZXhw
bGFuYXRpb24gZm9yIGNvbXBhcmlzb25zIGluIGZhaWxpbmcgYXNzZXJ0IGV4cHJlc3Npb25zLgot
Ci0gICAgUmV0dXJuIE5vbmUgZm9yIG5vIGN1c3RvbSBleHBsYW5hdGlvbiwgb3RoZXJ3aXNlIHJl
dHVybiBhIGxpc3QKLSAgICBvZiBzdHJpbmdzLiAgVGhlIHN0cmluZ3Mgd2lsbCBiZSBqb2luZWQg
YnkgbmV3bGluZXMgYnV0IGFueSBuZXdsaW5lcwotICAgICppbiogYSBzdHJpbmcgd2lsbCBiZSBl
c2NhcGVkLiAgTm90ZSB0aGF0IGFsbCBidXQgdGhlIGZpcnN0IGxpbmUgd2lsbAotICAgIGJlIGlu
ZGVudGVkIHNsaWd0aGx5LCB0aGUgaW50ZW50aW9uIGlzIGZvciB0aGUgZmlyc3QgbGluZSB0byBi
ZSBhIHN1bW1hcnkuCi0gICAgIiIiCi0KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBob29rcyBmb3Ig
aW5mbHVlbmNpbmcgcmVwb3J0aW5nIChpbnZva2VkIGZyb20gX3B5dGVzdF90ZXJtaW5hbCkKLSMg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotCi1kZWYgcHl0ZXN0X3JlcG9ydF9oZWFkZXIoY29uZmlnLCBzdGFy
dGRpcik6Ci0gICAgIiIiIHJldHVybiBhIHN0cmluZyB0byBiZSBkaXNwbGF5ZWQgYXMgaGVhZGVy
IGluZm8gZm9yIHRlcm1pbmFsIHJlcG9ydGluZy4iIiIKLQotQGhvb2tzcGVjKGZpcnN0cmVzdWx0
PVRydWUpCi1kZWYgcHl0ZXN0X3JlcG9ydF90ZXN0c3RhdHVzKHJlcG9ydCk6Ci0gICAgIiIiIHJl
dHVybiByZXN1bHQtY2F0ZWdvcnksIHNob3J0bGV0dGVyIGFuZCB2ZXJib3NlIHdvcmQgZm9yIHJl
cG9ydGluZy4iIiIKLQotZGVmIHB5dGVzdF90ZXJtaW5hbF9zdW1tYXJ5KHRlcm1pbmFscmVwb3J0
ZXIpOgotICAgICIiIiBhZGQgYWRkaXRpb25hbCBzZWN0aW9uIGluIHRlcm1pbmFsIHN1bW1hcnkg
cmVwb3J0aW5nLiAgIiIiCi0KLQotQGhvb2tzcGVjKGhpc3RvcmljPVRydWUpCi1kZWYgcHl0ZXN0
X2xvZ3dhcm5pbmcobWVzc2FnZSwgY29kZSwgbm9kZWlkLCBmc2xvY2F0aW9uKToKLSAgICAiIiIg
cHJvY2VzcyBhIHdhcm5pbmcgc3BlY2lmaWVkIGJ5IGEgbWVzc2FnZSwgYSBjb2RlIHN0cmluZywK
LSAgICBhIG5vZGVpZCBhbmQgZnNsb2NhdGlvbiAoYm90aCBvZiB3aGljaCBtYXkgYmUgTm9uZQot
ICAgIGlmIHRoZSB3YXJuaW5nIGlzIG5vdCB0aWVkIHRvIGEgcGFydGlsYXIgbm9kZS9sb2NhdGlv
bikuIiIiCi0KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBkb2N0ZXN0IGhvb2tzCi0jIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotQGhvb2tzcGVjKGZpcnN0cmVzdWx0PVRydWUpCi1kZWYgcHl0ZXN0X2RvY3Rl
c3RfcHJlcGFyZV9jb250ZW50KGNvbnRlbnQpOgotICAgICIiIiByZXR1cm4gcHJvY2Vzc2VkIGNv
bnRlbnQgZm9yIGEgZ2l2ZW4gZG9jdGVzdCIiIgotCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgZXJy
b3IgaGFuZGxpbmcgYW5kIGludGVybmFsIGRlYnVnZ2luZyBob29rcwotIyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0KLWRlZiBweXRlc3RfaW50ZXJuYWxlcnJvcihleGNyZXByLCBleGNpbmZvKToKLSAgICAi
IiIgY2FsbGVkIGZvciBpbnRlcm5hbCBlcnJvcnMuICIiIgotCi1kZWYgcHl0ZXN0X2tleWJvYXJk
X2ludGVycnVwdChleGNpbmZvKToKLSAgICAiIiIgY2FsbGVkIGZvciBrZXlib2FyZCBpbnRlcnJ1
cHQuICIiIgotCi1kZWYgcHl0ZXN0X2V4Y2VwdGlvbl9pbnRlcmFjdChub2RlLCBjYWxsLCByZXBv
cnQpOgotICAgICIiImNhbGxlZCB3aGVuIGFuIGV4Y2VwdGlvbiB3YXMgcmFpc2VkIHdoaWNoIGNh
biBwb3RlbnRpYWxseSBiZQotICAgIGludGVyYWN0aXZlbHkgaGFuZGxlZC4KLQotICAgIFRoaXMg
aG9vayBpcyBvbmx5IGNhbGxlZCBpZiBhbiBleGNlcHRpb24gd2FzIHJhaXNlZAotICAgIHRoYXQg
aXMgbm90IGFuIGludGVybmFsIGV4Y2VwdGlvbiBsaWtlIGBgc2tpcC5FeGNlcHRpb25gYC4KLSAg
ICAiIiIKLQotZGVmIHB5dGVzdF9lbnRlcl9wZGIoY29uZmlnKToKLSAgICAiIiIgY2FsbGVkIHVw
b24gcGRiLnNldF90cmFjZSgpLCBjYW4gYmUgdXNlZCBieSBwbHVnaW5zIHRvIHRha2Ugc3BlY2lh
bAotICAgIGFjdGlvbiBqdXN0IGJlZm9yZSB0aGUgcHl0aG9uIGRlYnVnZ2VyIGVudGVycyBpbiBp
bnRlcmFjdGl2ZSBtb2RlLgotCi0gICAgOmFyZyBjb25maWc6IHB5dGVzdCBjb25maWcgb2JqZWN0
Ci0gICAgOnR5cGUgY29uZmlnOiBfcHl0ZXN0LmNvbmZpZy5Db25maWcKLSAgICAiIiIKZGlmZiAt
LWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9p
bXBsIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L2lt
cGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4OWUzN2U1YWJjLi4wMDAwMDAwMDAw
MAotLS0gYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3Qv
aW1wbAorKysgL2Rldi9udWxsCkBAIC0xLDI1NCArMCwwIEBACi1Tb3J0aW5nIHBlci1yZXNvdXJj
ZQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotZm9yIGFueSBnaXZlbiBzZXQgb2Yg
aXRlbXM6Ci0KLS0gY29sbGVjdCBpdGVtcyBwZXIgc2Vzc2lvbi1zY29wZWQgcGFyYW1ldHJpemVk
IGZ1bmNhcmcKLS0gcmUtb3JkZXIgdW50aWwgaXRlbXMgbm8gcGFyYW1ldHJpemF0aW9ucyBhcmUg
bWl4ZWQKLQotICBleGFtcGxlczoKLQotICAgICAgICB0ZXN0KCkKLSAgICAgICAgdGVzdDEoczEp
Ci0gICAgICAgIHRlc3QxKHMyKSAgICAgCi0gICAgICAgIHRlc3QyKCkKLSAgICAgICAgdGVzdDMo
czEpCi0gICAgICAgIHRlc3QzKHMyKQotCi0gIGdldHMgc29ydGVkIHRvOgotCi0gICAgICAgIHRl
c3QoKQotICAgICAgICB0ZXN0MigpCi0gICAgICAgIHRlc3QxKHMxKQotICAgICAgICB0ZXN0Myhz
MSkKLSAgICAgICAgdGVzdDEoczIpCi0gICAgICAgIHRlc3QzKHMyKQotIAotCi10aGUgbmV3IEBz
ZXR1cCBmdW5jdGlvbnMgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ci1Db25zaWRlciBhIGdpdmVuIEBzZXR1cC1tYXJrZWQgZnVuY3Rpb246OgotCi0gICAgQHB5dGVz
dC5tYXJrLnNldHVwKG1heHNjb3BlPVNDT1BFKQotICAgIGRlZiBteXNldHVwKHJlcXVlc3QsIGFy
ZzEsIGFyZzIsIC4uLikKLSAgICAgICAgLi4uCi0gICAgICAgIHJlcXVlc3QuYWRkZmluYWxpemVy
KGZpbikKLSAgICAgICAgLi4uCi0KLXRoZW4gRlVOQ0FSR1NFVCBkZW5vdGVzIHRoZSBzZXQgb2Yg
KGFyZzEsIGFyZzIsIC4uLikgZnVuY2FyZ3MgYW5kCi1hbGwgb2YgaXRzIGRlcGVuZGVudCBmdW5j
YXJncy4gIFRoZSBteXNldHVwIGZ1bmN0aW9uIHdpbGwgZXhlY3V0ZQotZm9yIGFueSBtYXRjaGlu
ZyB0ZXN0IGl0ZW0gb25jZSBwZXIgc2NvcGUuICAKLQotVGhlIHNjb3BlIGlzIGRldGVybWluZWQg
YXMgdGhlIG1pbmltdW0gc2NvcGUgb2YgYWxsIHNjb3BlcyBvZiB0aGUgYXJncwotaW4gRlVOQ0FS
R1NFVCBhbmQgdGhlIGdpdmVuICJtYXhzY29wZSIuIAotCi1JZiBteXNldHVwIGhhcyBiZWVuIGNh
bGxlZCBhbmQgbm8gZmluYWxpemVycyBoYXZlIGJlZW4gY2FsbGVkIGl0IGlzCi1jYWxsZWQgImFj
dGl2ZSIuCi0KLUZ1cnRoZXJtb3JlIHRoZSBmb2xsb3dpbmcgcnVsZXMgYXBwbHk6Ci0KLS0gaWYg
YW4gYXJnIHZhbHVlIGluIEZVTkNBUkdTRVQgaXMgYWJvdXQgdG8gYmUgdG9ybiBkb3duLCB0aGUg
Ci0gIG15c2V0dXAtcmVnaXN0ZXJlZCBmaW5hbGl6ZXJzIHdpbGwgZXhlY3V0ZSBhcyB3ZWxsLgot
Ci0tIFRoZXJlIHdpbGwgbmV2ZXIgYmUgdHdvIGFjdGl2ZSBteXNldHVwIGludm9jYXRpb25zLgot
Ci1FeGFtcGxlIDEsIHNlc3Npb24gc2NvcGU6OgotCi0gICAgQHB5dGVzdC5tYXJrLmZ1bmNhcmco
c2NvcGU9InNlc3Npb24iLCBwYXJhbXM9WzEsMl0pCi0gICAgZGVmIGRiKHJlcXVlc3QpOgotICAg
ICAgICByZXF1ZXN0LmFkZGZpbmFsaXplcihkYl9maW5hbGl6ZSkKLQotICAgIEBweXRlc3QubWFy
ay5zZXR1cAotICAgIGRlZiBteXNldHVwKHJlcXVlc3QsIGRiKToKLSAgICAgICAgcmVxdWVzdC5h
ZGRmaW5hbGl6ZXIobXlzZXR1cF9maW5hbGl6ZSkKLSAgICAgICAgLi4uCi0KLUFuZCBhIGdpdmVu
IHRlc3QgbW9kdWxlOgotCi0gICAgZGVmIHRlc3Rfc29tZXRoaW5nKCk6Ci0gICAgICAgIC4uLgot
ICAgIGRlZiB0ZXN0X290aGVydGhpbmcoKToKLSAgICAgICAgcGFzcwotCi1IZXJlIGlzIHdoYXQg
aGFwcGVuczo6Ci0KLSAgICBkYihyZXF1ZXN0KSBleGVjdXRlcyB3aXRoIHJlcXVlc3QucGFyYW0g
PT0gMQotICAgICAgICBteXNldHVwKHJlcXVlc3QsIGRiKSBleGVjdXRlcwotICAgICAgICAgICAg
dGVzdF9zb21ldGhpbmcoKSBleGVjdXRlcwotICAgICAgICAgICAgdGVzdF9vdGhlcnRoaW5nKCkg
ZXhlY3V0ZXMKLSAgICAgICAgICAgIG15c2V0dXBfZmluYWxpemUoKSBleGVjdXRlcwotICAgIGRi
X2ZpbmFsaXplKCkgZXhlY3V0ZXMKLSAgICBkYihyZXF1ZXN0KSBleGVjdXRlcyB3aXRoIHJlcXVl
c3QucGFyYW0gPT0gMgotICAgICAgICBteXNldHVwKHJlcXVlc3QsIGRiKSBleGVjdXRlcwotICAg
ICAgICAgICAgdGVzdF9zb21ldGhpbmcoKSBleGVjdXRlcwotICAgICAgICAgICAgdGVzdF9vdGhl
cnRoaW5nKCkgZXhlY3V0ZXMKLSAgICAgICAgbXlzZXR1cF9maW5hbGl6ZSgpIGV4ZWN1dGVzCi0g
ICAgZGJfZmluYWxpemUoKSBleGVjdXRlcwotCi1FeGFtcGxlIDIsIHNlc3Npb24vZnVuY3Rpb24g
c2NvcGU6OgotCi0gICAgQHB5dGVzdC5tYXJrLmZ1bmNhcmcoc2NvcGU9InNlc3Npb24iLCBwYXJh
bXM9WzEsMl0pCi0gICAgZGVmIGRiKHJlcXVlc3QpOgotICAgICAgICByZXF1ZXN0LmFkZGZpbmFs
aXplcihkYl9maW5hbGl6ZSkKLQotICAgIEBweXRlc3QubWFyay5zZXR1cChzY29wZT0iZnVuY3Rp
b24iKQotICAgIGRlZiBteXNldHVwKHJlcXVlc3QsIGRiKToKLSAgICAgICAgLi4uCi0gICAgICAg
IHJlcXVlc3QuYWRkZmluYWxpemVyKG15c2V0dXBfZmluYWxpemUpCi0gICAgICAgIC4uLgotCi1B
bmQgYSBnaXZlbiB0ZXN0IG1vZHVsZToKLQotICAgIGRlZiB0ZXN0X3NvbWV0aGluZygpOgotICAg
ICAgICAuLi4KLSAgICBkZWYgdGVzdF9vdGhlcnRoaW5nKCk6Ci0gICAgICAgIHBhc3MKLQotSGVy
ZSBpcyB3aGF0IGhhcHBlbnM6OgotCi0gICAgZGIocmVxdWVzdCkgZXhlY3V0ZXMgd2l0aCByZXF1
ZXN0LnBhcmFtID09IDEKLSAgICAgICAgbXlzZXR1cChyZXF1ZXN0LCBkYikgZXhlY3V0ZXMKLSAg
ICAgICAgICAgIHRlc3Rfc29tZXRoaW5nKCkgZXhlY3V0ZXMKLSAgICAgICAgbXlzZXR1cF9maW5h
bGl6ZSgpIGV4ZWN1dGVzCi0gICAgICAgIG15c2V0dXAocmVxdWVzdCwgZGIpIGV4ZWN1dGVzCi0g
ICAgICAgICAgICB0ZXN0X290aGVydGhpbmcoKSBleGVjdXRlcwotICAgICAgICBteXNldHVwX2Zp
bmFsaXplKCkgZXhlY3V0ZXMKLSAgICBkYl9maW5hbGl6ZSgpIGV4ZWN1dGVzCi0gICAgZGIocmVx
dWVzdCkgZXhlY3V0ZXMgd2l0aCByZXF1ZXN0LnBhcmFtID09IDIKLSAgICAgICAgbXlzZXR1cChy
ZXF1ZXN0LCBkYikgZXhlY3V0ZXMKLSAgICAgICAgICAgIHRlc3Rfc29tZXRoaW5nKCkgZXhlY3V0
ZXMKLSAgICAgICAgbXlzZXR1cF9maW5hbGl6ZSgpIGV4ZWN1dGVzCi0gICAgICAgIG15c2V0dXAo
cmVxdWVzdCwgZGIpIGV4ZWN1dGVzCi0gICAgICAgICAgICB0ZXN0X290aGVydGhpbmcoKSBleGVj
dXRlcwotICAgICAgICBteXNldHVwX2ZpbmFsaXplKCkgZXhlY3V0ZXMKLSAgICBkYl9maW5hbGl6
ZSgpIGV4ZWN1dGVzCi0KLQotRXhhbXBsZSAzIC0gZnVuY2FyZ3Mgc2Vzc2lvbi1taXgKLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotU2ltaWxhciB3aXRoIGZ1bmNh
cmdzLCBhbiBleGFtcGxlOjoKLQotICAgIEBweXRlc3QubWFyay5mdW5jYXJnKHNjb3BlPSJzZXNz
aW9uIiwgcGFyYW1zPVsxLDJdKQotICAgIGRlZiBkYihyZXF1ZXN0KToKLSAgICAgICAgcmVxdWVz
dC5hZGRmaW5hbGl6ZXIoZGJfZmluYWxpemUpCi0KLSAgICBAcHl0ZXN0Lm1hcmsuZnVuY2FyZyhz
Y29wZT0iZnVuY3Rpb24iKQotICAgIGRlZiB0YWJsZShyZXF1ZXN0LCBkYik6Ci0gICAgICAgIC4u
LgotICAgICAgICByZXF1ZXN0LmFkZGZpbmFsaXplcih0YWJsZV9maW5hbGl6ZSkKLSAgICAgICAg
Li4uCi0KLUFuZCBhIGdpdmVuIHRlc3QgbW9kdWxlOgotCi0gICAgZGVmIHRlc3Rfc29tZXRoaW5n
KHRhYmxlKToKLSAgICAgICAgLi4uCi0gICAgZGVmIHRlc3Rfb3RoZXJ0aGluZyh0YWJsZSk6Ci0g
ICAgICAgIHBhc3MKLSAgICBkZWYgdGVzdF90aGlyZHRoaW5nKCk6Ci0gICAgICAgIHBhc3MKLQot
SGVyZSBpcyB3aGF0IGhhcHBlbnM6OgotCi0gICAgZGIocmVxdWVzdCkgZXhlY3V0ZXMgd2l0aCBw
YXJhbSA9PSAxCi0gICAgICAgIHRhYmxlKHJlcXVlc3QsIGRiKQotICAgICAgICAgICAgdGVzdF9z
b21ldGhpbmcodGFibGUpCi0gICAgICAgIHRhYmxlX2ZpbmFsaXplKCkKLSAgICAgICAgdGFibGUo
cmVxdWVzdCwgZGIpCi0gICAgICAgICAgICB0ZXN0X290aGVydGhpbmcodGFibGUpCi0gICAgICAg
IHRhYmxlX2ZpbmFsaXplKCkKLSAgICBkYl9maW5hbGl6ZQotICAgIGRiKHJlcXVlc3QpIGV4ZWN1
dGVzIHdpdGggcGFyYW0gPT0gMgotICAgICAgICB0YWJsZShyZXF1ZXN0LCBkYikKLSAgICAgICAg
ICAgIHRlc3Rfc29tZXRoaW5nKHRhYmxlKQotICAgICAgICB0YWJsZV9maW5hbGl6ZSgpCi0gICAg
ICAgIHRhYmxlKHJlcXVlc3QsIGRiKQotICAgICAgICAgICAgdGVzdF9vdGhlcnRoaW5nKHRhYmxl
KQotICAgICAgICB0YWJsZV9maW5hbGl6ZSgpCi0gICAgZGJfZmluYWxpemUKLSAgICB0ZXN0X3Ro
aXJkdGhpbmcoKQotICAgIAotRGF0YSBzdHJ1Y3R1cmVzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ci1weXRlc3QgaW50ZXJuYWxseSBtYWludGFpbnMgYSBkaWN0IG9mIGFjdGl2ZSBmdW5jYXJncyB3
aXRoIGNhY2hlLCBwYXJhbSwKLWZpbmFsaXplciwgKHNjb3BlaXRlbT8pIGluZm9ybWF0aW9uOgot
Ci0gICAgYWN0aXZlX2Z1bmNhcmdzID0gZGljdCgpCi0KLWlmIGEgcGFyYW1ldHJpemVkICJkYiIg
aXMgYWN0aXZhdGVkOgotICAgIAotICAgIGFjdGl2ZV9mdW5jYXJnc1siZGIiXSA9IEZ1bmNhcmdJ
bmZvKGRidmFsdWUsIHBhcmFtaW5kZXgsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEZ1bmNhcmdGaW5hbGl6ZSguLi4pLCBzY29wZWl0ZW0pCi0KLWlmIGEgdGVzdCBp
cyB0b3JuIGRvd24gYW5kIHRoZSBuZXh0IHRlc3QgcmVxdWlyZXMgYSBkaWZmZXJlbnRseSAKLXBh
cmFtZXRyaXplZCAiZGIiOgotCi0gICAgZm9yIGFyZ25hbWUgaW4gaXRlbS5jYWxsc3BlYy5wYXJh
bXM6Ci0gICAgICAgIGlmIGFyZ25hbWUgaW4gYWN0aXZlX2Z1bmNhcmdzOgotICAgICAgICAgICAg
ZnVuY2FyZ2luZm8gPSBhY3RpdmVfZnVuY2FyZ3NbYXJnbmFtZV0KLSAgICAgICAgICAgIGlmIGZ1
bmNhcmdpbmZvLnBhcmFtICE9IGl0ZW0uY2FsbHNwZWMucGFyYW1zW2FyZ25hbWVdOgotICAgICAg
ICAgICAgICAgIGZ1bmNhcmdpbmZvLmNhbGxmaW5hbGl6ZXIoKQotICAgICAgICAgICAgICAgIGRl
bCBub2RlMmZ1bmNhcmdbZnVuY2FyZ2luZm8uc2NvcGVpdGVtXQotICAgICAgICAgICAgICAgIGRl
bCBhY3RpdmVfZnVuY2FyZ3NbYXJnbmFtZV0KLSAgICBub2Rlc190b19iZV90b3JuX2Rvd24gPSAu
Li4KLSAgICBmb3Igbm9kZSBpbiBub2Rlc190b19iZV90b3JuX2Rvd246Ci0gICAgICAgIGlmIG5v
ZGUgaW4gbm9kZTJmdW5jYXJnOgotICAgICAgICAgICAgYXJnbmFtZSA9IG5vZGUyZnVuY2FyZ1tu
b2RlXQotICAgICAgICAgICAgYWN0aXZlX2Z1bmNhcmdzW2FyZ25hbWVdLmNhbGxmaW5hbGl6ZXIo
KQotICAgICAgICAgICAgZGVsIG5vZGUyZnVuY2FyZ1tub2RlXQotICAgICAgICAgICAgZGVsIGFj
dGl2ZV9mdW5jYXJnc1thcmduYW1lXQotCi1pZiBhIHRlc3QgaXMgc2V0dXAgcmVxdWlyaW5nIGEg
ImRiIiBmdW5jYXJnOgotCi0gICAgaWYgImRiIiBpbiBhY3RpdmVfZnVuY2FyZ3M6Ci0gICAgICAg
IHJldHVybiBhY3RpdmVfZnVuY2FyZ3NbImRiIl1bMF0KLSAgICBmdW5jYXJnaW5mbyA9IHNldHVw
X2Z1bmNhcmcoKQotICAgIGFjdGl2ZV9mdW5jYXJnc1siZGIiXSA9IGZ1bmNhcmdpbmZvCi0gICAg
bm9kZTJmdW5jYXJnW2Z1bmNhcmdpbmZvLnNjb3BlaXRlbV0gPSAiZGIiCi0KLUltcGxlbWVudGF0
aW9uIHBsYW4gZm9yIHJlc291cmNlcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KLTEuIFJldmVydCBGdW5jYXJnUmVxdWVzdCB0byB0aGUgb2xkIGZvcm0sIHVu
bWVyZ2UgaXRlbS9yZXF1ZXN0Ci0gICAoZG9uZSkKLTIuIG1ha2UgZnVuY2FyZyBmYWN0b3JpZXMg
YmUgZGlzY292ZXJlZCBhdCBjb2xsZWN0aW9uIHRpbWUKLTMuIEludHJvZHVjZSBmdW5jYXJnIG1h
cmtlcgotNC4gSW50cm9kdWNlIGZ1bmNhcmcgc2NvcGUgcGFyYW1ldGVyCi01LiBJbnRyb2R1Y2Ug
ZnVuY2FyZyBwYXJhbWV0cml6ZSBwYXJhbWV0ZXIKLTYuIG1ha2Ugc2V0dXAgZnVuY3Rpb25zIGJl
IGRpc2NvdmVyZWQgYXQgY29sbGVjdGlvbiB0aW1lCi03LiAoSW50cm9kdWNlIGEgcHl0ZXN0X2Zp
eHR1cmVfcHJvdG9jb2wvc2V0dXBfZnVuY2FyZ3MgaG9vaykKLQotbWV0aG9kcyBhbmQgZGF0YSBz
dHJ1Y3R1cmVzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1BIEZ1bmNhcmNN
YW5hZ2VyIGhvbGRzIGFsbCBpbmZvcm1hdGlvbiBhYm91dCBmdW5jYXJnIGRlZmluaXRpb25zCi1p
bmNsdWRpbmcgcGFyYW1ldHJpemF0aW9uIGFuZCBzY29wZSBkZWZpbml0aW9ucy4gIEl0IGltcGxl
bWVudHMKLWEgcHl0ZXN0X2dlbmVyYXRlX3Rlc3RzIGhvb2sgd2hpY2ggcGVyZm9ybXMgcGFyYW1l
dHJpemF0aW9uIGFzIGFwcHJvcHJpYXRlLgotCi1hcyBhIHNpbXBsZSBleGFtcGxlLCBsZXQncyBj
b25zaWRlciBhIHRyZWUgd2hlcmUgYSB0ZXN0IGZ1bmN0aW9uIHJlcXVpcmVzCi1hICJhYmMiIGZ1
bmNhcmcgYW5kIGl0cyBmYWN0b3J5IGRlZmluZXMgaXQgYXMgcGFyYW1ldHJpemVkIGFuZCBzY29w
ZWQKLWZvciBNb2R1bGVzLiAgV2hlbiBjb2xsZWN0aW9ucyBoaXRzIHRoZSBmdW5jdGlvbiBpdGVt
LCBpdCBjcmVhdGVzCi10aGUgbWV0YWZ1bmMgb2JqZWN0LCBhbmQgY2FsbHMgZnVuY2FyZ2RiLnB5
dGVzdF9nZW5lcmF0ZV90ZXN0cyhtZXRhZnVuYykKLXdoaWNoIGxvb2tzIHVwIGF2YWlsYWJsZSBm
dW5jYXJnIGZhY3RvcmllcyBhbmQgdGhlaXIgc2NvcGUgYW5kIHBhcmFtZXRyaXphdGlvbi4KLVRo
aXMgaW5mb3JtYXRpb24gaXMgZXF1aXZhbGVudCB0byB3aGF0IGNhbiBiZSBwcm92aWRlZCB0b2Rh
eSBkaXJlY3RseQotYXQgdGhlIGZ1bmN0aW9uIHNpdGUgYW5kIGl0IHNob3VsZCB0aHVzIGJlIHJl
bGF0aXZlbHkgc3RyYWlnaHQgZm9yd2FyZAotdG8gaW1wbGVtZW50IHRoZSBhZGRpdGlvbmFsIHdh
eSBvZiBkZWZpbmluZyBwYXJhbWV0cml6YXRpb24vc2NvcGluZy4KLQotY29uZnRlc3QgbG9hZGlu
ZzoKLSAgICBlYWNoIGZ1bmNhcmctZmFjdG9yeSB3aWxsIHBvcHVsYXRlIHRoZSBzZXNzaW9uLmZ1
bmNhcmdtYW5hZ2VyCi0KLVdoZW4gYSB0ZXN0IGl0ZW0gaXMgY29sbGVjdGVkLCBpdCBncm93cyBh
IGRpY3Rpb25hcnkgCi0oZnVuY2FyZ25hbWUyZmFjdG9yeWNhbGxsaXN0KS4gIEEgZmFjdG9yeSBs
b29rdXAgaXMgcGVyZm9ybWVkIAotZm9yIGVhY2ggcmVxdWlyZWQgZnVuY2FyZy4gIFRoZSByZXN1
bHRpbmcgZmFjdG9yeSBjYWxsIGlzIHN0b3JlZCAKLXdpdGggdGhlIGl0ZW0uICBJZiBhIGZ1bmN0
aW9uIGlzIHBhcmFtZXRyaXplZCBtdWx0aXBsZSBpdGVtcyBhcmUgCi1jcmVhdGVkIHdpdGggcmVz
cGVjdGl2ZSBmYWN0b3J5IGNhbGxzLiBFbHNlIGlmIGEgZmFjdG9yeSBpcyBwYXJhbWV0cml6ZWQK
LW11bHRpcGxlIGl0ZW1zIGFuZCBjYWxscyB0byB0aGUgZmFjdG9yeSBmdW5jdGlvbiBhcmUgY3Jl
YXRlZCBhcyB3ZWxsLgotCi1BdCBzZXR1cCB0aW1lLCBhbiBpdGVtIHBvcHVsYXRlcyBhIGZ1bmNh
cmdzIG1hcHBpbmcsIG1hcHBpbmcgbmFtZXMKLXRvIHZhbHVlcy4gIElmIGEgdmFsdWUgaXMgZnVu
Y2FyZyBmYWN0b3JpZXMgYXJlIHF1ZXJpZWQgZm9yIGEgZ2l2ZW4gaXRlbQotdGVzdCBmdW5jdGlv
bnMgYW5kIHNldHVwIGZ1bmN0aW9ucyBhcmUgcHV0IGluIGEgY2xhc3MKLXdoaWNoIGxvb2tzIHVw
IHJlcXVpcmVkIGZ1bmNhcmcgZmFjdG9yaWVzLgotCi0KZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRl
c3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9qdW5pdHhtbC5weSBiL1dlYkRy
aXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9qdW5pdHhtbC5weQpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjYwZDcxOGE2YTguLjAwMDAwMDAwMDAwCi0t
LSBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9qdW5p
dHhtbC5weQorKysgL2Rldi9udWxsCkBAIC0xLDM4NyArMCwwIEBACi0iIiIKLSAgICByZXBvcnQg
dGVzdCByZXN1bHRzIGluIEpVbml0LVhNTCBmb3JtYXQsCi0gICAgZm9yIHVzZSB3aXRoIEplbmtp
bnMgYW5kIGJ1aWxkIGludGVncmF0aW9uIHNlcnZlcnMuCi0KLQotQmFzZWQgb24gaW5pdGlhbCBj
b2RlIGZyb20gUm9zcyBMYXdsZXkuCi0iIiIKLSMgT3V0cHV0IGNvbmZvcm1zIHRvIGh0dHBzOi8v
Z2l0aHViLmNvbS9qZW5raW5zY2kveHVuaXQtcGx1Z2luL2Jsb2IvbWFzdGVyLwotIyBzcmMvbWFp
bi9yZXNvdXJjZXMvb3JnL2plbmtpbnNjaS9wbHVnaW5zL3h1bml0L3R5cGVzL21vZGVsL3hzZC9q
dW5pdC0xMC54c2QKLQotaW1wb3J0IHB5Ci1pbXBvcnQgb3MKLWltcG9ydCByZQotaW1wb3J0IHN5
cwotaW1wb3J0IHRpbWUKLWltcG9ydCBweXRlc3QKLQotIyBQeXRob24gMi5YIGFuZCAzLlggY29t
cGF0aWJpbGl0eQotaWYgc3lzLnZlcnNpb25faW5mb1swXSA8IDM6Ci0gICAgZnJvbSBjb2RlY3Mg
aW1wb3J0IG9wZW4KLWVsc2U6Ci0gICAgdW5pY2hyID0gY2hyCi0gICAgdW5pY29kZSA9IHN0cgot
ICAgIGxvbmcgPSBpbnQKLQotCi1jbGFzcyBKdW5pdChweS54bWwuTmFtZXNwYWNlKToKLSAgICBw
YXNzCi0KLSMgV2UgbmVlZCB0byBnZXQgdGhlIHN1YnNldCBvZiB0aGUgaW52YWxpZCB1bmljb2Rl
IHJhbmdlcyBhY2NvcmRpbmcgdG8KLSMgWE1MIDEuMCB3aGljaCBhcmUgdmFsaWQgaW4gdGhpcyBw
eXRob24gYnVpbGQuICBIZW5jZSB3ZSBjYWxjdWxhdGUKLSMgdGhpcyBkeW5hbWljYWxseSBpbnN0
ZWFkIG9mIGhhcmRjb2RpbmcgaXQuICBUaGUgc3BlYyByYW5nZSBvZiB2YWxpZAotIyBjaGFycyBp
czogQ2hhciA6Oj0gI3g5IHwgI3hBIHwgI3hEIHwgWyN4MjAtI3hEN0ZGXSB8IFsjeEUwMDAtI3hG
RkZEXQotIyAgICAgICAgICAgICAgICAgICAgfCBbI3gxMDAwMC0jeDEwRkZGRl0KLV9sZWdhbF9j
aGFycyA9ICgweDA5LCAweDBBLCAweDBkKQotX2xlZ2FsX3JhbmdlcyA9ICgKLSAgICAoMHgyMCwg
MHg3RSksICgweDgwLCAweEQ3RkYpLCAoMHhFMDAwLCAweEZGRkQpLCAoMHgxMDAwMCwgMHgxMEZG
RkYpLAotKQotX2xlZ2FsX3htbF9yZSA9IFsKLSAgICB1bmljb2RlKCIlcy0lcyIpICUgKHVuaWNo
cihsb3cpLCB1bmljaHIoaGlnaCkpCi0gICAgZm9yIChsb3csIGhpZ2gpIGluIF9sZWdhbF9yYW5n
ZXMgaWYgbG93IDwgc3lzLm1heHVuaWNvZGUKLV0KLV9sZWdhbF94bWxfcmUgPSBbdW5pY2hyKHgp
IGZvciB4IGluIF9sZWdhbF9jaGFyc10gKyBfbGVnYWxfeG1sX3JlCi1pbGxlZ2FsX3htbF9yZSA9
IHJlLmNvbXBpbGUodW5pY29kZSgnW14lc10nKSAlIHVuaWNvZGUoJycpLmpvaW4oX2xlZ2FsX3ht
bF9yZSkpCi1kZWwgX2xlZ2FsX2NoYXJzCi1kZWwgX2xlZ2FsX3JhbmdlcwotZGVsIF9sZWdhbF94
bWxfcmUKLQotX3B5X2V4dF9yZSA9IHJlLmNvbXBpbGUociJcLnB5JCIpCi0KLQotZGVmIGJpbl94
bWxfZXNjYXBlKGFyZyk6Ci0gICAgZGVmIHJlcGwobWF0Y2hvYmopOgotICAgICAgICBpID0gb3Jk
KG1hdGNob2JqLmdyb3VwKCkpCi0gICAgICAgIGlmIGkgPD0gMHhGRjoKLSAgICAgICAgICAgIHJl
dHVybiB1bmljb2RlKCcjeCUwMlgnKSAlIGkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJl
dHVybiB1bmljb2RlKCcjeCUwNFgnKSAlIGkKLQotICAgIHJldHVybiBweS54bWwucmF3KGlsbGVn
YWxfeG1sX3JlLnN1YihyZXBsLCBweS54bWwuZXNjYXBlKGFyZykpKQotCi0KLWNsYXNzIF9Ob2Rl
UmVwb3J0ZXIob2JqZWN0KToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbm9kZWlkLCB4bWwpOgot
Ci0gICAgICAgIHNlbGYuaWQgPSBub2RlaWQKLSAgICAgICAgc2VsZi54bWwgPSB4bWwKLSAgICAg
ICAgc2VsZi5hZGRfc3RhdHMgPSBzZWxmLnhtbC5hZGRfc3RhdHMKLSAgICAgICAgc2VsZi5kdXJh
dGlvbiA9IDAKLSAgICAgICAgc2VsZi5wcm9wZXJ0aWVzID0gW10KLSAgICAgICAgc2VsZi5ub2Rl
cyA9IFtdCi0gICAgICAgIHNlbGYudGVzdGNhc2UgPSBOb25lCi0gICAgICAgIHNlbGYuYXR0cnMg
PSB7fQotCi0gICAgZGVmIGFwcGVuZChzZWxmLCBub2RlKToKLSAgICAgICAgc2VsZi54bWwuYWRk
X3N0YXRzKHR5cGUobm9kZSkuX19uYW1lX18pCi0gICAgICAgIHNlbGYubm9kZXMuYXBwZW5kKG5v
ZGUpCi0KLSAgICBkZWYgYWRkX3Byb3BlcnR5KHNlbGYsIG5hbWUsIHZhbHVlKToKLSAgICAgICAg
c2VsZi5wcm9wZXJ0aWVzLmFwcGVuZCgoc3RyKG5hbWUpLCBiaW5feG1sX2VzY2FwZSh2YWx1ZSkp
KQotCi0gICAgZGVmIG1ha2VfcHJvcGVydGllc19ub2RlKHNlbGYpOgotICAgICAgICAiIiJSZXR1
cm4gYSBKdW5pdCBub2RlIGNvbnRhaW5pbmcgY3VzdG9tIHByb3BlcnRpZXMsIGlmIGFueS4KLSAg
ICAgICAgIiIiCi0gICAgICAgIGlmIHNlbGYucHJvcGVydGllczoKLSAgICAgICAgICAgIHJldHVy
biBKdW5pdC5wcm9wZXJ0aWVzKFsKLSAgICAgICAgICAgICAgICBKdW5pdC5wcm9wZXJ0eShuYW1l
PW5hbWUsIHZhbHVlPXZhbHVlKQotICAgICAgICAgICAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBz
ZWxmLnByb3BlcnRpZXMKLSAgICAgICAgICAgIF0pCi0gICAgICAgIHJldHVybiAnJwotCi0gICAg
ZGVmIHJlY29yZF90ZXN0cmVwb3J0KHNlbGYsIHRlc3RyZXBvcnQpOgotICAgICAgICBhc3NlcnQg
bm90IHNlbGYudGVzdGNhc2UKLSAgICAgICAgbmFtZXMgPSBtYW5nbGVfdGVzdF9hZGRyZXNzKHRl
c3RyZXBvcnQubm9kZWlkKQotICAgICAgICBjbGFzc25hbWVzID0gbmFtZXNbOi0xXQotICAgICAg
ICBpZiBzZWxmLnhtbC5wcmVmaXg6Ci0gICAgICAgICAgICBjbGFzc25hbWVzLmluc2VydCgwLCBz
ZWxmLnhtbC5wcmVmaXgpCi0gICAgICAgIGF0dHJzID0gewotICAgICAgICAgICAgImNsYXNzbmFt
ZSI6ICIuIi5qb2luKGNsYXNzbmFtZXMpLAotICAgICAgICAgICAgIm5hbWUiOiBiaW5feG1sX2Vz
Y2FwZShuYW1lc1stMV0pLAotICAgICAgICAgICAgImZpbGUiOiB0ZXN0cmVwb3J0LmxvY2F0aW9u
WzBdLAotICAgICAgICB9Ci0gICAgICAgIGlmIHRlc3RyZXBvcnQubG9jYXRpb25bMV0gaXMgbm90
IE5vbmU6Ci0gICAgICAgICAgICBhdHRyc1sibGluZSJdID0gdGVzdHJlcG9ydC5sb2NhdGlvblsx
XQotICAgICAgICBzZWxmLmF0dHJzID0gYXR0cnMKLQotICAgIGRlZiB0b194bWwoc2VsZik6Ci0g
ICAgICAgIHRlc3RjYXNlID0gSnVuaXQudGVzdGNhc2UodGltZT1zZWxmLmR1cmF0aW9uLCAqKnNl
bGYuYXR0cnMpCi0gICAgICAgIHRlc3RjYXNlLmFwcGVuZChzZWxmLm1ha2VfcHJvcGVydGllc19u
b2RlKCkpCi0gICAgICAgIGZvciBub2RlIGluIHNlbGYubm9kZXM6Ci0gICAgICAgICAgICB0ZXN0
Y2FzZS5hcHBlbmQobm9kZSkKLSAgICAgICAgcmV0dXJuIHRlc3RjYXNlCi0KLSAgICBkZWYgX2Fk
ZF9zaW1wbGUoc2VsZiwga2luZCwgbWVzc2FnZSwgZGF0YT1Ob25lKToKLSAgICAgICAgZGF0YSA9
IGJpbl94bWxfZXNjYXBlKGRhdGEpCi0gICAgICAgIG5vZGUgPSBraW5kKGRhdGEsIG1lc3NhZ2U9
bWVzc2FnZSkKLSAgICAgICAgc2VsZi5hcHBlbmQobm9kZSkKLQotICAgIGRlZiBfd3JpdGVfY2Fw
dHVyZWRfb3V0cHV0KHNlbGYsIHJlcG9ydCk6Ci0gICAgICAgIGZvciBjYXBuYW1lIGluICgnb3V0
JywgJ2VycicpOgotICAgICAgICAgICAgYWxsY29udGVudCA9ICIiCi0gICAgICAgICAgICBmb3Ig
bmFtZSwgY29udGVudCBpbiByZXBvcnQuZ2V0X3NlY3Rpb25zKCJDYXB0dXJlZCBzdGQlcyIgJQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXBu
YW1lKToKLSAgICAgICAgICAgICAgICBhbGxjb250ZW50ICs9IGNvbnRlbnQKLSAgICAgICAgICAg
IGlmIGFsbGNvbnRlbnQ6Ci0gICAgICAgICAgICAgICAgdGFnID0gZ2V0YXR0cihKdW5pdCwgJ3N5
c3RlbS0nICsgY2FwbmFtZSkKLSAgICAgICAgICAgICAgICBzZWxmLmFwcGVuZCh0YWcoYmluX3ht
bF9lc2NhcGUoYWxsY29udGVudCkpKQotCi0gICAgZGVmIGFwcGVuZF9wYXNzKHNlbGYsIHJlcG9y
dCk6Ci0gICAgICAgIHNlbGYuYWRkX3N0YXRzKCdwYXNzZWQnKQotICAgICAgICBzZWxmLl93cml0
ZV9jYXB0dXJlZF9vdXRwdXQocmVwb3J0KQotCi0gICAgZGVmIGFwcGVuZF9mYWlsdXJlKHNlbGYs
IHJlcG9ydCk6Ci0gICAgICAgICMgbXNnID0gc3RyKHJlcG9ydC5sb25ncmVwci5yZXBydHJhY2Vi
YWNrLmV4dHJhbGluZSkKLSAgICAgICAgaWYgaGFzYXR0cihyZXBvcnQsICJ3YXN4ZmFpbCIpOgot
ICAgICAgICAgICAgc2VsZi5fYWRkX3NpbXBsZSgKLSAgICAgICAgICAgICAgICBKdW5pdC5za2lw
cGVkLAotICAgICAgICAgICAgICAgICJ4ZmFpbC1tYXJrZWQgdGVzdCBwYXNzZXMgdW5leHBlY3Rl
ZGx5IikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGlmIGhhc2F0dHIocmVwb3J0Lmxvbmdy
ZXByLCAicmVwcmNyYXNoIik6Ci0gICAgICAgICAgICAgICAgbWVzc2FnZSA9IHJlcG9ydC5sb25n
cmVwci5yZXByY3Jhc2gubWVzc2FnZQotICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHJlcG9y
dC5sb25ncmVwciwgKHVuaWNvZGUsIHN0cikpOgotICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBy
ZXBvcnQubG9uZ3JlcHIKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgbWVzc2Fn
ZSA9IHN0cihyZXBvcnQubG9uZ3JlcHIpCi0gICAgICAgICAgICBtZXNzYWdlID0gYmluX3htbF9l
c2NhcGUobWVzc2FnZSkKLSAgICAgICAgICAgIGZhaWwgPSBKdW5pdC5mYWlsdXJlKG1lc3NhZ2U9
bWVzc2FnZSkKLSAgICAgICAgICAgIGZhaWwuYXBwZW5kKGJpbl94bWxfZXNjYXBlKHJlcG9ydC5s
b25ncmVwcikpCi0gICAgICAgICAgICBzZWxmLmFwcGVuZChmYWlsKQotICAgICAgICBzZWxmLl93
cml0ZV9jYXB0dXJlZF9vdXRwdXQocmVwb3J0KQotCi0gICAgZGVmIGFwcGVuZF9jb2xsZWN0X2Vy
cm9yKHNlbGYsIHJlcG9ydCk6Ci0gICAgICAgICMgbXNnID0gc3RyKHJlcG9ydC5sb25ncmVwci5y
ZXBydHJhY2ViYWNrLmV4dHJhbGluZSkKLSAgICAgICAgc2VsZi5hcHBlbmQoSnVuaXQuZXJyb3Io
YmluX3htbF9lc2NhcGUocmVwb3J0LmxvbmdyZXByKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbWVzc2FnZT0iY29sbGVjdGlvbiBmYWlsdXJlIikpCi0KLSAgICBkZWYgYXBwZW5k
X2NvbGxlY3Rfc2tpcHBlZChzZWxmLCByZXBvcnQpOgotICAgICAgICBzZWxmLl9hZGRfc2ltcGxl
KAotICAgICAgICAgICAgSnVuaXQuc2tpcHBlZCwgImNvbGxlY3Rpb24gc2tpcHBlZCIsIHJlcG9y
dC5sb25ncmVwcikKLQotICAgIGRlZiBhcHBlbmRfZXJyb3Ioc2VsZiwgcmVwb3J0KToKLSAgICAg
ICAgc2VsZi5fYWRkX3NpbXBsZSgKLSAgICAgICAgICAgIEp1bml0LmVycm9yLCAidGVzdCBzZXR1
cCBmYWlsdXJlIiwgcmVwb3J0LmxvbmdyZXByKQotICAgICAgICBzZWxmLl93cml0ZV9jYXB0dXJl
ZF9vdXRwdXQocmVwb3J0KQotCi0gICAgZGVmIGFwcGVuZF9za2lwcGVkKHNlbGYsIHJlcG9ydCk6
Ci0gICAgICAgIGlmIGhhc2F0dHIocmVwb3J0LCAid2FzeGZhaWwiKToKLSAgICAgICAgICAgIHNl
bGYuX2FkZF9zaW1wbGUoCi0gICAgICAgICAgICAgICAgSnVuaXQuc2tpcHBlZCwgImV4cGVjdGVk
IHRlc3QgZmFpbHVyZSIsIHJlcG9ydC53YXN4ZmFpbAotICAgICAgICAgICAgKQotICAgICAgICBl
bHNlOgotICAgICAgICAgICAgZmlsZW5hbWUsIGxpbmVubywgc2tpcHJlYXNvbiA9IHJlcG9ydC5s
b25ncmVwcgotICAgICAgICAgICAgaWYgc2tpcHJlYXNvbi5zdGFydHN3aXRoKCJTa2lwcGVkOiAi
KToKLSAgICAgICAgICAgICAgICBza2lwcmVhc29uID0gYmluX3htbF9lc2NhcGUoc2tpcHJlYXNv
bls5Ol0pCi0gICAgICAgICAgICBzZWxmLmFwcGVuZCgKLSAgICAgICAgICAgICAgICBKdW5pdC5z
a2lwcGVkKCIlczolczogJXMiICUgKGZpbGVuYW1lLCBsaW5lbm8sIHNraXByZWFzb24pLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0icHl0ZXN0LnNraXAiLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZT1za2lwcmVhc29uKSkKLSAgICAgICAgc2VsZi5f
d3JpdGVfY2FwdHVyZWRfb3V0cHV0KHJlcG9ydCkKLQotICAgIGRlZiBmaW5hbGl6ZShzZWxmKToK
LSAgICAgICAgZGF0YSA9IHNlbGYudG9feG1sKCkudW5pY29kZShpbmRlbnQ9MCkKLSAgICAgICAg
c2VsZi5fX2RpY3RfXy5jbGVhcigpCi0gICAgICAgIHNlbGYudG9feG1sID0gbGFtYmRhOiBweS54
bWwucmF3KGRhdGEpCi0KLQotQHB5dGVzdC5maXh0dXJlCi1kZWYgcmVjb3JkX3htbF9wcm9wZXJ0
eShyZXF1ZXN0KToKLSAgICAiIiJGaXh0dXJlIHRoYXQgYWRkcyBleHRyYSB4bWwgcHJvcGVydGll
cyB0byB0aGUgdGFnIGZvciB0aGUgY2FsbGluZyB0ZXN0LgotICAgIFRoZSBmaXh0dXJlIGlzIGNh
bGxhYmxlIHdpdGggKG5hbWUsIHZhbHVlKSwgd2l0aCB2YWx1ZSBiZWluZyBhdXRvbWF0aWNhbGx5
Ci0gICAgeG1sLWVuY29kZWQuCi0gICAgIiIiCi0gICAgcmVxdWVzdC5ub2RlLndhcm4oCi0gICAg
ICAgIGNvZGU9J0MzJywKLSAgICAgICAgbWVzc2FnZT0ncmVjb3JkX3htbF9wcm9wZXJ0eSBpcyBh
biBleHBlcmltZW50YWwgZmVhdHVyZScsCi0gICAgKQotICAgIHhtbCA9IGdldGF0dHIocmVxdWVz
dC5jb25maWcsICJfeG1sIiwgTm9uZSkKLSAgICBpZiB4bWwgaXMgbm90IE5vbmU6Ci0gICAgICAg
IG5vZGVfcmVwb3J0ZXIgPSB4bWwubm9kZV9yZXBvcnRlcihyZXF1ZXN0Lm5vZGUubm9kZWlkKQot
ICAgICAgICByZXR1cm4gbm9kZV9yZXBvcnRlci5hZGRfcHJvcGVydHkKLSAgICBlbHNlOgotICAg
ICAgICBkZWYgYWRkX3Byb3BlcnR5X25vb3AobmFtZSwgdmFsdWUpOgotICAgICAgICAgICAgcGFz
cwotCi0gICAgICAgIHJldHVybiBhZGRfcHJvcGVydHlfbm9vcAotCi0KLWRlZiBweXRlc3RfYWRk
b3B0aW9uKHBhcnNlcik6Ci0gICAgZ3JvdXAgPSBwYXJzZXIuZ2V0Z3JvdXAoInRlcm1pbmFsIHJl
cG9ydGluZyIpCi0gICAgZ3JvdXAuYWRkb3B0aW9uKAotICAgICAgICAnLS1qdW5pdHhtbCcsICct
LWp1bml0LXhtbCcsCi0gICAgICAgIGFjdGlvbj0ic3RvcmUiLAotICAgICAgICBkZXN0PSJ4bWxw
YXRoIiwKLSAgICAgICAgbWV0YXZhcj0icGF0aCIsCi0gICAgICAgIGRlZmF1bHQ9Tm9uZSwKLSAg
ICAgICAgaGVscD0iY3JlYXRlIGp1bml0LXhtbCBzdHlsZSByZXBvcnQgZmlsZSBhdCBnaXZlbiBw
YXRoLiIpCi0gICAgZ3JvdXAuYWRkb3B0aW9uKAotICAgICAgICAnLS1qdW5pdHByZWZpeCcsICct
LWp1bml0LXByZWZpeCcsCi0gICAgICAgIGFjdGlvbj0ic3RvcmUiLAotICAgICAgICBtZXRhdmFy
PSJzdHIiLAotICAgICAgICBkZWZhdWx0PU5vbmUsCi0gICAgICAgIGhlbHA9InByZXBlbmQgcHJl
Zml4IHRvIGNsYXNzbmFtZXMgaW4ganVuaXQteG1sIG91dHB1dCIpCi0KLQotZGVmIHB5dGVzdF9j
b25maWd1cmUoY29uZmlnKToKLSAgICB4bWxwYXRoID0gY29uZmlnLm9wdGlvbi54bWxwYXRoCi0g
ICAgIyBwcmV2ZW50IG9wZW5pbmcgeG1sbG9nIG9uIHNsYXZlIG5vZGVzICh4ZGlzdCkKLSAgICBp
ZiB4bWxwYXRoIGFuZCBub3QgaGFzYXR0cihjb25maWcsICdzbGF2ZWlucHV0Jyk6Ci0gICAgICAg
IGNvbmZpZy5feG1sID0gTG9nWE1MKHhtbHBhdGgsIGNvbmZpZy5vcHRpb24uanVuaXRwcmVmaXgp
Ci0gICAgICAgIGNvbmZpZy5wbHVnaW5tYW5hZ2VyLnJlZ2lzdGVyKGNvbmZpZy5feG1sKQotCi0K
LWRlZiBweXRlc3RfdW5jb25maWd1cmUoY29uZmlnKToKLSAgICB4bWwgPSBnZXRhdHRyKGNvbmZp
ZywgJ194bWwnLCBOb25lKQotICAgIGlmIHhtbDoKLSAgICAgICAgZGVsIGNvbmZpZy5feG1sCi0g
ICAgICAgIGNvbmZpZy5wbHVnaW5tYW5hZ2VyLnVucmVnaXN0ZXIoeG1sKQotCi0KLWRlZiBtYW5n
bGVfdGVzdF9hZGRyZXNzKGFkZHJlc3MpOgotICAgIHBhdGgsIHBvc3NpYmxlX29wZW5fYnJhY2tl
dCwgcGFyYW1zID0gYWRkcmVzcy5wYXJ0aXRpb24oJ1snKQotICAgIG5hbWVzID0gcGF0aC5zcGxp
dCgiOjoiKQotICAgIHRyeToKLSAgICAgICAgbmFtZXMucmVtb3ZlKCcoKScpCi0gICAgZXhjZXB0
IFZhbHVlRXJyb3I6Ci0gICAgICAgIHBhc3MKLSAgICAjIGNvbnZlcnQgZmlsZSBwYXRoIHRvIGRv
dHRlZCBwYXRoCi0gICAgbmFtZXNbMF0gPSBuYW1lc1swXS5yZXBsYWNlKCIvIiwgJy4nKQotICAg
IG5hbWVzWzBdID0gX3B5X2V4dF9yZS5zdWIoIiIsIG5hbWVzWzBdKQotICAgICMgcHV0IGFueSBw
YXJhbXMgYmFjawotICAgIG5hbWVzWy0xXSArPSBwb3NzaWJsZV9vcGVuX2JyYWNrZXQgKyBwYXJh
bXMKLSAgICByZXR1cm4gbmFtZXMKLQotCi1jbGFzcyBMb2dYTUwob2JqZWN0KToKLSAgICBkZWYg
X19pbml0X18oc2VsZiwgbG9nZmlsZSwgcHJlZml4KToKLSAgICAgICAgbG9nZmlsZSA9IG9zLnBh
dGguZXhwYW5kdXNlcihvcy5wYXRoLmV4cGFuZHZhcnMobG9nZmlsZSkpCi0gICAgICAgIHNlbGYu
bG9nZmlsZSA9IG9zLnBhdGgubm9ybXBhdGgob3MucGF0aC5hYnNwYXRoKGxvZ2ZpbGUpKQotICAg
ICAgICBzZWxmLnByZWZpeCA9IHByZWZpeAotICAgICAgICBzZWxmLnN0YXRzID0gZGljdC5mcm9t
a2V5cyhbCi0gICAgICAgICAgICAnZXJyb3InLAotICAgICAgICAgICAgJ3Bhc3NlZCcsCi0gICAg
ICAgICAgICAnZmFpbHVyZScsCi0gICAgICAgICAgICAnc2tpcHBlZCcsCi0gICAgICAgIF0sIDAp
Ci0gICAgICAgIHNlbGYubm9kZV9yZXBvcnRlcnMgPSB7fSAgIyBub2RlaWQgLT4gX05vZGVSZXBv
cnRlcgotICAgICAgICBzZWxmLm5vZGVfcmVwb3J0ZXJzX29yZGVyZWQgPSBbXQotCi0gICAgZGVm
IGZpbmFsaXplKHNlbGYsIHJlcG9ydCk6Ci0gICAgICAgIG5vZGVpZCA9IGdldGF0dHIocmVwb3J0
LCAnbm9kZWlkJywgcmVwb3J0KQotICAgICAgICAjIGxvY2FsIGhhY2sgdG8gaGFuZGxlIHhkaXN0
IHJlcG9ydCBvcmRlcgotICAgICAgICBzbGF2ZW5vZGUgPSBnZXRhdHRyKHJlcG9ydCwgJ25vZGUn
LCBOb25lKQotICAgICAgICByZXBvcnRlciA9IHNlbGYubm9kZV9yZXBvcnRlcnMucG9wKChub2Rl
aWQsIHNsYXZlbm9kZSkpCi0gICAgICAgIGlmIHJlcG9ydGVyIGlzIG5vdCBOb25lOgotICAgICAg
ICAgICAgcmVwb3J0ZXIuZmluYWxpemUoKQotCi0gICAgZGVmIG5vZGVfcmVwb3J0ZXIoc2VsZiwg
cmVwb3J0KToKLSAgICAgICAgbm9kZWlkID0gZ2V0YXR0cihyZXBvcnQsICdub2RlaWQnLCByZXBv
cnQpCi0gICAgICAgICMgbG9jYWwgaGFjayB0byBoYW5kbGUgeGRpc3QgcmVwb3J0IG9yZGVyCi0g
ICAgICAgIHNsYXZlbm9kZSA9IGdldGF0dHIocmVwb3J0LCAnbm9kZScsIE5vbmUpCi0KLSAgICAg
ICAga2V5ID0gbm9kZWlkLCBzbGF2ZW5vZGUKLQotICAgICAgICBpZiBrZXkgaW4gc2VsZi5ub2Rl
X3JlcG9ydGVyczoKLSAgICAgICAgICAgICMgVE9ETzogYnJlYXNrcyBmb3IgLS1kaXN0PWVhY2gK
LSAgICAgICAgICAgIHJldHVybiBzZWxmLm5vZGVfcmVwb3J0ZXJzW2tleV0KLSAgICAgICAgcmVw
b3J0ZXIgPSBfTm9kZVJlcG9ydGVyKG5vZGVpZCwgc2VsZikKLSAgICAgICAgc2VsZi5ub2RlX3Jl
cG9ydGVyc1trZXldID0gcmVwb3J0ZXIKLSAgICAgICAgc2VsZi5ub2RlX3JlcG9ydGVyc19vcmRl
cmVkLmFwcGVuZChyZXBvcnRlcikKLSAgICAgICAgcmV0dXJuIHJlcG9ydGVyCi0KLSAgICBkZWYg
YWRkX3N0YXRzKHNlbGYsIGtleSk6Ci0gICAgICAgIGlmIGtleSBpbiBzZWxmLnN0YXRzOgotICAg
ICAgICAgICAgc2VsZi5zdGF0c1trZXldICs9IDEKLQotICAgIGRlZiBfb3BlbnRlc3RjYXNlKHNl
bGYsIHJlcG9ydCk6Ci0gICAgICAgIHJlcG9ydGVyID0gc2VsZi5ub2RlX3JlcG9ydGVyKHJlcG9y
dCkKLSAgICAgICAgcmVwb3J0ZXIucmVjb3JkX3Rlc3RyZXBvcnQocmVwb3J0KQotICAgICAgICBy
ZXR1cm4gcmVwb3J0ZXIKLQotICAgIGRlZiBweXRlc3RfcnVudGVzdF9sb2dyZXBvcnQoc2VsZiwg
cmVwb3J0KToKLSAgICAgICAgIiIiaGFuZGxlIGEgc2V0dXAvY2FsbC90ZWFyZG93biByZXBvcnQs
IGdlbmVyYXRpbmcgdGhlIGFwcHJvcHJpYXRlCi0gICAgICAgIHhtbCB0YWdzIGFzIG5lY2Vzc2Fy
eS4KLQotICAgICAgICBub3RlOiBkdWUgdG8gcGx1Z2lucyBsaWtlIHhkaXN0LCB0aGlzIGhvb2sg
bWF5IGJlIGNhbGxlZCBpbiBpbnRlcmxhY2VkCi0gICAgICAgIG9yZGVyIHdpdGggcmVwb3J0cyBm
cm9tIG90aGVyIG5vZGVzLiBmb3IgZXhhbXBsZToKLQotICAgICAgICB1c3VhbCBjYWxsIG9yZGVy
OgotICAgICAgICAgICAgLT4gc2V0dXAgbm9kZTEKLSAgICAgICAgICAgIC0+IGNhbGwgbm9kZTEK
LSAgICAgICAgICAgIC0+IHRlYXJkb3duIG5vZGUxCi0gICAgICAgICAgICAtPiBzZXR1cCBub2Rl
MgotICAgICAgICAgICAgLT4gY2FsbCBub2RlMgotICAgICAgICAgICAgLT4gdGVhcmRvd24gbm9k
ZTIKLQotICAgICAgICBwb3NzaWJsZSBjYWxsIG9yZGVyIGluIHhkaXN0OgotICAgICAgICAgICAg
LT4gc2V0dXAgbm9kZTEKLSAgICAgICAgICAgIC0+IGNhbGwgbm9kZTEKLSAgICAgICAgICAgIC0+
IHNldHVwIG5vZGUyCi0gICAgICAgICAgICAtPiBjYWxsIG5vZGUyCi0gICAgICAgICAgICAtPiB0
ZWFyZG93biBub2RlMgotICAgICAgICAgICAgLT4gdGVhcmRvd24gbm9kZTEKLSAgICAgICAgIiIi
Ci0gICAgICAgIGlmIHJlcG9ydC5wYXNzZWQ6Ci0gICAgICAgICAgICBpZiByZXBvcnQud2hlbiA9
PSAiY2FsbCI6ICAjIGlnbm9yZSBzZXR1cC90ZWFyZG93bgotICAgICAgICAgICAgICAgIHJlcG9y
dGVyID0gc2VsZi5fb3BlbnRlc3RjYXNlKHJlcG9ydCkKLSAgICAgICAgICAgICAgICByZXBvcnRl
ci5hcHBlbmRfcGFzcyhyZXBvcnQpCi0gICAgICAgIGVsaWYgcmVwb3J0LmZhaWxlZDoKLSAgICAg
ICAgICAgIHJlcG9ydGVyID0gc2VsZi5fb3BlbnRlc3RjYXNlKHJlcG9ydCkKLSAgICAgICAgICAg
IGlmIHJlcG9ydC53aGVuID09ICJjYWxsIjoKLSAgICAgICAgICAgICAgICByZXBvcnRlci5hcHBl
bmRfZmFpbHVyZShyZXBvcnQpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJl
cG9ydGVyLmFwcGVuZF9lcnJvcihyZXBvcnQpCi0gICAgICAgIGVsaWYgcmVwb3J0LnNraXBwZWQ6
Ci0gICAgICAgICAgICByZXBvcnRlciA9IHNlbGYuX29wZW50ZXN0Y2FzZShyZXBvcnQpCi0gICAg
ICAgICAgICByZXBvcnRlci5hcHBlbmRfc2tpcHBlZChyZXBvcnQpCi0gICAgICAgIHNlbGYudXBk
YXRlX3Rlc3RjYXNlX2R1cmF0aW9uKHJlcG9ydCkKLSAgICAgICAgaWYgcmVwb3J0LndoZW4gPT0g
InRlYXJkb3duIjoKLSAgICAgICAgICAgIHNlbGYuZmluYWxpemUocmVwb3J0KQotCi0gICAgZGVm
IHVwZGF0ZV90ZXN0Y2FzZV9kdXJhdGlvbihzZWxmLCByZXBvcnQpOgotICAgICAgICAiIiJhY2N1
bXVsYXRlcyB0b3RhbCBkdXJhdGlvbiBmb3Igbm9kZWlkIGZyb20gZ2l2ZW4gcmVwb3J0IGFuZCB1
cGRhdGVzCi0gICAgICAgIHRoZSBKdW5pdC50ZXN0Y2FzZSB3aXRoIHRoZSBuZXcgdG90YWwgaWYg
YWxyZWFkeSBjcmVhdGVkLgotICAgICAgICAiIiIKLSAgICAgICAgcmVwb3J0ZXIgPSBzZWxmLm5v
ZGVfcmVwb3J0ZXIocmVwb3J0KQotICAgICAgICByZXBvcnRlci5kdXJhdGlvbiArPSBnZXRhdHRy
KHJlcG9ydCwgJ2R1cmF0aW9uJywgMC4wKQotCi0gICAgZGVmIHB5dGVzdF9jb2xsZWN0cmVwb3J0
KHNlbGYsIHJlcG9ydCk6Ci0gICAgICAgIGlmIG5vdCByZXBvcnQucGFzc2VkOgotICAgICAgICAg
ICAgcmVwb3J0ZXIgPSBzZWxmLl9vcGVudGVzdGNhc2UocmVwb3J0KQotICAgICAgICAgICAgaWYg
cmVwb3J0LmZhaWxlZDoKLSAgICAgICAgICAgICAgICByZXBvcnRlci5hcHBlbmRfY29sbGVjdF9l
cnJvcihyZXBvcnQpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJlcG9ydGVy
LmFwcGVuZF9jb2xsZWN0X3NraXBwZWQocmVwb3J0KQotCi0gICAgZGVmIHB5dGVzdF9pbnRlcm5h
bGVycm9yKHNlbGYsIGV4Y3JlcHIpOgotICAgICAgICByZXBvcnRlciA9IHNlbGYubm9kZV9yZXBv
cnRlcignaW50ZXJuYWwnKQotICAgICAgICByZXBvcnRlci5hdHRycy51cGRhdGUoY2xhc3NuYW1l
PSJweXRlc3QiLCBuYW1lPSdpbnRlcm5hbCcpCi0gICAgICAgIHJlcG9ydGVyLl9hZGRfc2ltcGxl
KEp1bml0LmVycm9yLCAnaW50ZXJuYWwgZXJyb3InLCBleGNyZXByKQotCi0gICAgZGVmIHB5dGVz
dF9zZXNzaW9uc3RhcnQoc2VsZik6Ci0gICAgICAgIHNlbGYuc3VpdGVfc3RhcnRfdGltZSA9IHRp
bWUudGltZSgpCi0KLSAgICBkZWYgcHl0ZXN0X3Nlc3Npb25maW5pc2goc2VsZik6Ci0gICAgICAg
IGRpcm5hbWUgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKHNlbGYubG9nZmlsZSkp
Ci0gICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKGRpcm5hbWUpOgotICAgICAgICAgICAgb3Mu
bWFrZWRpcnMoZGlybmFtZSkKLSAgICAgICAgbG9nZmlsZSA9IG9wZW4oc2VsZi5sb2dmaWxlLCAn
dycsIGVuY29kaW5nPSd1dGYtOCcpCi0gICAgICAgIHN1aXRlX3N0b3BfdGltZSA9IHRpbWUudGlt
ZSgpCi0gICAgICAgIHN1aXRlX3RpbWVfZGVsdGEgPSBzdWl0ZV9zdG9wX3RpbWUgLSBzZWxmLnN1
aXRlX3N0YXJ0X3RpbWUKLQotICAgICAgICBudW10ZXN0cyA9IHNlbGYuc3RhdHNbJ3Bhc3NlZCdd
ICsgc2VsZi5zdGF0c1snZmFpbHVyZSddCi0KLSAgICAgICAgbG9nZmlsZS53cml0ZSgnPD94bWwg
dmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4nKQotICAgICAgICBsb2dmaWxlLndyaXRl
KEp1bml0LnRlc3RzdWl0ZSgKLSAgICAgICAgICAgIFt4LnRvX3htbCgpIGZvciB4IGluIHNlbGYu
bm9kZV9yZXBvcnRlcnNfb3JkZXJlZF0sCi0gICAgICAgICAgICBuYW1lPSJweXRlc3QiLAotICAg
ICAgICAgICAgZXJyb3JzPXNlbGYuc3RhdHNbJ2Vycm9yJ10sCi0gICAgICAgICAgICBmYWlsdXJl
cz1zZWxmLnN0YXRzWydmYWlsdXJlJ10sCi0gICAgICAgICAgICBza2lwcz1zZWxmLnN0YXRzWydz
a2lwcGVkJ10sCi0gICAgICAgICAgICB0ZXN0cz1udW10ZXN0cywKLSAgICAgICAgICAgIHRpbWU9
IiUuM2YiICUgc3VpdGVfdGltZV9kZWx0YSwgKS51bmljb2RlKGluZGVudD0wKSkKLSAgICAgICAg
bG9nZmlsZS5jbG9zZSgpCi0KLSAgICBkZWYgcHl0ZXN0X3Rlcm1pbmFsX3N1bW1hcnkoc2VsZiwg
dGVybWluYWxyZXBvcnRlcik6Ci0gICAgICAgIHRlcm1pbmFscmVwb3J0ZXIud3JpdGVfc2VwKCIt
IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImdlbmVyYXRlZCB4bWwgZmls
ZTogJXMiICUgKHNlbGYubG9nZmlsZSkpCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBv
cnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvbWFpbi5weSBiL1dlYkRyaXZlclRlc3RzL2lt
cG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9tYWluLnB5CmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA4NjU0ZDdhZjYyNy4uMDAwMDAwMDAwMDAKLS0tIGEvV2ViRHJpdmVyVGVz
dHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L21haW4ucHkKKysrIC9kZXYvbnVs
bApAQCAtMSw3NDQgKzAsMCBAQAotIiIiIGNvcmUgaW1wbGVtZW50YXRpb24gb2YgdGVzdGluZyBw
cm9jZXNzOiBpbml0LCBzZXNzaW9uLCBydW50ZXN0IGxvb3AuICIiIgotaW1wb3J0IGltcAotaW1w
b3J0IG9zCi1pbXBvcnQgcmUKLWltcG9ydCBzeXMKLQotaW1wb3J0IF9weXRlc3QKLWltcG9ydCBf
cHl0ZXN0Ll9jb2RlCi1pbXBvcnQgcHkKLWltcG9ydCBweXRlc3QKLXRyeToKLSAgICBmcm9tIGNv
bGxlY3Rpb25zIGltcG9ydCBNdXRhYmxlTWFwcGluZyBhcyBNYXBwaW5nTWl4aW4KLWV4Y2VwdCBJ
bXBvcnRFcnJvcjoKLSAgICBmcm9tIFVzZXJEaWN0IGltcG9ydCBEaWN0TWl4aW4gYXMgTWFwcGlu
Z01peGluCi0KLWZyb20gX3B5dGVzdC5ydW5uZXIgaW1wb3J0IGNvbGxlY3Rfb25lX25vZGUKLQot
dHJhY2ViYWNrY3V0ZGlyID0gcHkucGF0aC5sb2NhbChfcHl0ZXN0Ll9fZmlsZV9fKS5kaXJwYXRo
KCkKLQotIyBleGl0Y29kZXMgZm9yIHRoZSBjb21tYW5kIGxpbmUKLUVYSVRfT0sgPSAwCi1FWElU
X1RFU1RTRkFJTEVEID0gMQotRVhJVF9JTlRFUlJVUFRFRCA9IDIKLUVYSVRfSU5URVJOQUxFUlJP
UiA9IDMKLUVYSVRfVVNBR0VFUlJPUiA9IDQKLUVYSVRfTk9URVNUU0NPTExFQ1RFRCA9IDUKLQot
bmFtZV9yZSA9IHJlLmNvbXBpbGUoIl5bYS16QS1aX11cdyokIikKLQotZGVmIHB5dGVzdF9hZGRv
cHRpb24ocGFyc2VyKToKLSAgICBwYXJzZXIuYWRkaW5pKCJub3JlY3Vyc2VkaXJzIiwgImRpcmVj
dG9yeSBwYXR0ZXJucyB0byBhdm9pZCBmb3IgcmVjdXJzaW9uIiwKLSAgICAgICAgdHlwZT0iYXJn
cyIsIGRlZmF1bHQ9WycuKicsICdDVlMnLCAnX2RhcmNzJywgJ3thcmNofScsICcqLmVnZyddKQot
ICAgIHBhcnNlci5hZGRpbmkoInRlc3RwYXRocyIsICJkaXJlY3RvcmllcyB0byBzZWFyY2ggZm9y
IHRlc3RzIHdoZW4gbm8gZmlsZXMgb3IgZGlyZWN0b3JpZXMgYXJlIGdpdmVuIGluIHRoZSBjb21t
YW5kIGxpbmUuIiwKLSAgICAgICAgdHlwZT0iYXJncyIsIGRlZmF1bHQ9W10pCi0gICAgI3BhcnNl
ci5hZGRpbmkoImRpcnBhdHRlcm5zIiwKLSAgICAjICAgICJwYXR0ZXJucyBzcGVjaWZ5aW5nIHBv
c3NpYmxlIGxvY2F0aW9ucyBvZiB0ZXN0IGZpbGVzIiwKLSAgICAjICAgIHR5cGU9ImxpbmVsaXN0
IiwgZGVmYXVsdD1bIioqL3Rlc3RfKi50eHQiLAotICAgICMgICAgICAgICAgICAiKiovdGVzdF8q
LnB5IiwgIioqLypfdGVzdC5weSJdCi0gICAgIykKLSAgICBncm91cCA9IHBhcnNlci5nZXRncm91
cCgiZ2VuZXJhbCIsICJydW5uaW5nIGFuZCBzZWxlY3Rpb24gb3B0aW9ucyIpCi0gICAgZ3JvdXAu
X2FkZG9wdGlvbignLXgnLCAnLS1leGl0Zmlyc3QnLCBhY3Rpb249InN0b3JlX3RydWUiLCBkZWZh
dWx0PUZhbHNlLAotICAgICAgICAgICAgICAgZGVzdD0iZXhpdGZpcnN0IiwKLSAgICAgICAgICAg
ICAgIGhlbHA9ImV4aXQgaW5zdGFudGx5IG9uIGZpcnN0IGVycm9yIG9yIGZhaWxlZCB0ZXN0LiIp
LAotICAgIGdyb3VwLl9hZGRvcHRpb24oJy0tbWF4ZmFpbCcsIG1ldGF2YXI9Im51bSIsCi0gICAg
ICAgICAgICAgICBhY3Rpb249InN0b3JlIiwgdHlwZT1pbnQsIGRlc3Q9Im1heGZhaWwiLCBkZWZh
dWx0PTAsCi0gICAgICAgICAgICAgICBoZWxwPSJleGl0IGFmdGVyIGZpcnN0IG51bSBmYWlsdXJl
cyBvciBlcnJvcnMuIikKLSAgICBncm91cC5fYWRkb3B0aW9uKCctLXN0cmljdCcsIGFjdGlvbj0i
c3RvcmVfdHJ1ZSIsCi0gICAgICAgICAgICAgICBoZWxwPSJydW4gcHl0ZXN0IGluIHN0cmljdCBt
b2RlLCB3YXJuaW5ncyBiZWNvbWUgZXJyb3JzLiIpCi0gICAgZ3JvdXAuX2FkZG9wdGlvbigiLWMi
LCBtZXRhdmFyPSJmaWxlIiwgdHlwZT1zdHIsIGRlc3Q9ImluaWZpbGVuYW1lIiwKLSAgICAgICAg
ICAgICAgIGhlbHA9ImxvYWQgY29uZmlndXJhdGlvbiBmcm9tIGBmaWxlYCBpbnN0ZWFkIG9mIHRy
eWluZyB0byBsb2NhdGUgb25lIG9mIHRoZSBpbXBsaWNpdCBjb25maWd1cmF0aW9uIGZpbGVzLiIp
Ci0KLSAgICBncm91cCA9IHBhcnNlci5nZXRncm91cCgiY29sbGVjdCIsICJjb2xsZWN0aW9uIikK
LSAgICBncm91cC5hZGRvcHRpb24oJy0tY29sbGVjdG9ubHknLCAnLS1jb2xsZWN0LW9ubHknLCBh
Y3Rpb249InN0b3JlX3RydWUiLAotICAgICAgICBoZWxwPSJvbmx5IGNvbGxlY3QgdGVzdHMsIGRv
bid0IGV4ZWN1dGUgdGhlbS4iKSwKLSAgICBncm91cC5hZGRvcHRpb24oJy0tcHlhcmdzJywgYWN0
aW9uPSJzdG9yZV90cnVlIiwKLSAgICAgICAgaGVscD0idHJ5IHRvIGludGVycHJldCBhbGwgYXJn
dW1lbnRzIGFzIHB5dGhvbiBwYWNrYWdlcy4iKQotICAgIGdyb3VwLmFkZG9wdGlvbigiLS1pZ25v
cmUiLCBhY3Rpb249ImFwcGVuZCIsIG1ldGF2YXI9InBhdGgiLAotICAgICAgICBoZWxwPSJpZ25v
cmUgcGF0aCBkdXJpbmcgY29sbGVjdGlvbiAobXVsdGktYWxsb3dlZCkuIikKLSAgICAjIHdoZW4g
Y2hhbmdpbmcgdGhpcyB0byAtLWNvbmYtY3V0LWRpciwgY29uZmlnLnB5IENvbmZ0ZXN0LnNldGlu
aXRpYWwKLSAgICAjIG5lZWRzIHVwZ3JhZGluZyBhcyB3ZWxsCi0gICAgZ3JvdXAuYWRkb3B0aW9u
KCctLWNvbmZjdXRkaXInLCBkZXN0PSJjb25mY3V0ZGlyIiwgZGVmYXVsdD1Ob25lLAotICAgICAg
ICBtZXRhdmFyPSJkaXIiLAotICAgICAgICBoZWxwPSJvbmx5IGxvYWQgY29uZnRlc3QucHkncyBy
ZWxhdGl2ZSB0byBzcGVjaWZpZWQgZGlyLiIpCi0gICAgZ3JvdXAuYWRkb3B0aW9uKCctLW5vY29u
ZnRlc3QnLCBhY3Rpb249InN0b3JlX3RydWUiLAotICAgICAgICBkZXN0PSJub2NvbmZ0ZXN0Iiwg
ZGVmYXVsdD1GYWxzZSwKLSAgICAgICAgaGVscD0iRG9uJ3QgbG9hZCBhbnkgY29uZnRlc3QucHkg
ZmlsZXMuIikKLQotICAgIGdyb3VwID0gcGFyc2VyLmdldGdyb3VwKCJkZWJ1Z2NvbmZpZyIsCi0g
ICAgICAgICJ0ZXN0IHNlc3Npb24gZGVidWdnaW5nIGFuZCBjb25maWd1cmF0aW9uIikKLSAgICBn
cm91cC5hZGRvcHRpb24oJy0tYmFzZXRlbXAnLCBkZXN0PSJiYXNldGVtcCIsIGRlZmF1bHQ9Tm9u
ZSwgbWV0YXZhcj0iZGlyIiwKLSAgICAgICAgICAgICAgIGhlbHA9ImJhc2UgdGVtcG9yYXJ5IGRp
cmVjdG9yeSBmb3IgdGhpcyB0ZXN0IHJ1bi4iKQotCi0KLWRlZiBweXRlc3RfbmFtZXNwYWNlKCk6
Ci0gICAgY29sbGVjdCA9IGRpY3QoSXRlbT1JdGVtLCBDb2xsZWN0b3I9Q29sbGVjdG9yLCBGaWxl
PUZpbGUsIFNlc3Npb249U2Vzc2lvbikKLSAgICByZXR1cm4gZGljdChjb2xsZWN0PWNvbGxlY3Qp
Ci0KLWRlZiBweXRlc3RfY29uZmlndXJlKGNvbmZpZyk6Ci0gICAgcHl0ZXN0LmNvbmZpZyA9IGNv
bmZpZyAjIGNvbXBhdGliaWx0aXkKLSAgICBpZiBjb25maWcub3B0aW9uLmV4aXRmaXJzdDoKLSAg
ICAgICAgY29uZmlnLm9wdGlvbi5tYXhmYWlsID0gMQotCi1kZWYgd3JhcF9zZXNzaW9uKGNvbmZp
ZywgZG9pdCk6Ci0gICAgIiIiU2tlbGV0b24gY29tbWFuZCBsaW5lIHByb2dyYW0iIiIKLSAgICBz
ZXNzaW9uID0gU2Vzc2lvbihjb25maWcpCi0gICAgc2Vzc2lvbi5leGl0c3RhdHVzID0gRVhJVF9P
SwotICAgIGluaXRzdGF0ZSA9IDAKLSAgICB0cnk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAg
IGNvbmZpZy5fZG9fY29uZmlndXJlKCkKLSAgICAgICAgICAgIGluaXRzdGF0ZSA9IDEKLSAgICAg
ICAgICAgIGNvbmZpZy5ob29rLnB5dGVzdF9zZXNzaW9uc3RhcnQoc2Vzc2lvbj1zZXNzaW9uKQot
ICAgICAgICAgICAgaW5pdHN0YXRlID0gMgotICAgICAgICAgICAgc2Vzc2lvbi5leGl0c3RhdHVz
ID0gZG9pdChjb25maWcsIHNlc3Npb24pIG9yIDAKLSAgICAgICAgZXhjZXB0IHB5dGVzdC5Vc2Fn
ZUVycm9yOgotICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJy
dXB0OgotICAgICAgICAgICAgZXhjaW5mbyA9IF9weXRlc3QuX2NvZGUuRXhjZXB0aW9uSW5mbygp
Ci0gICAgICAgICAgICBjb25maWcuaG9vay5weXRlc3Rfa2V5Ym9hcmRfaW50ZXJydXB0KGV4Y2lu
Zm89ZXhjaW5mbykKLSAgICAgICAgICAgIHNlc3Npb24uZXhpdHN0YXR1cyA9IEVYSVRfSU5URVJS
VVBURUQKLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgZXhjaW5mbyA9IF9weXRlc3QuX2Nv
ZGUuRXhjZXB0aW9uSW5mbygpCi0gICAgICAgICAgICBjb25maWcubm90aWZ5X2V4Y2VwdGlvbihl
eGNpbmZvLCBjb25maWcub3B0aW9uKQotICAgICAgICAgICAgc2Vzc2lvbi5leGl0c3RhdHVzID0g
RVhJVF9JTlRFUk5BTEVSUk9SCi0gICAgICAgICAgICBpZiBleGNpbmZvLmVycmlzaW5zdGFuY2Uo
U3lzdGVtRXhpdCk6Ci0gICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgibWFpbmxvb3A6
IGNhdWdodCBTcHVyaW91cyBTeXN0ZW1FeGl0IVxuIikKLQotICAgIGZpbmFsbHk6Ci0gICAgICAg
IGV4Y2luZm8gPSBOb25lICAjIEV4cGxpY2l0bHkgYnJlYWsgcmVmZXJlbmNlIGN5Y2xlLgotICAg
ICAgICBzZXNzaW9uLnN0YXJ0ZGlyLmNoZGlyKCkKLSAgICAgICAgaWYgaW5pdHN0YXRlID49IDI6
Ci0gICAgICAgICAgICBjb25maWcuaG9vay5weXRlc3Rfc2Vzc2lvbmZpbmlzaCgKLSAgICAgICAg
ICAgICAgICBzZXNzaW9uPXNlc3Npb24sCi0gICAgICAgICAgICAgICAgZXhpdHN0YXR1cz1zZXNz
aW9uLmV4aXRzdGF0dXMpCi0gICAgICAgIGNvbmZpZy5fZW5zdXJlX3VuY29uZmlndXJlKCkKLSAg
ICByZXR1cm4gc2Vzc2lvbi5leGl0c3RhdHVzCi0KLWRlZiBweXRlc3RfY21kbGluZV9tYWluKGNv
bmZpZyk6Ci0gICAgcmV0dXJuIHdyYXBfc2Vzc2lvbihjb25maWcsIF9tYWluKQotCi1kZWYgX21h
aW4oY29uZmlnLCBzZXNzaW9uKToKLSAgICAiIiIgZGVmYXVsdCBjb21tYW5kIGxpbmUgcHJvdG9j
b2wgZm9yIGluaXRpYWxpemF0aW9uLCBzZXNzaW9uLAotICAgIHJ1bm5pbmcgdGVzdHMgYW5kIHJl
cG9ydGluZy4gIiIiCi0gICAgY29uZmlnLmhvb2sucHl0ZXN0X2NvbGxlY3Rpb24oc2Vzc2lvbj1z
ZXNzaW9uKQotICAgIGNvbmZpZy5ob29rLnB5dGVzdF9ydW50ZXN0bG9vcChzZXNzaW9uPXNlc3Np
b24pCi0KLSAgICBpZiBzZXNzaW9uLnRlc3RzZmFpbGVkOgotICAgICAgICByZXR1cm4gRVhJVF9U
RVNUU0ZBSUxFRAotICAgIGVsaWYgc2Vzc2lvbi50ZXN0c2NvbGxlY3RlZCA9PSAwOgotICAgICAg
ICByZXR1cm4gRVhJVF9OT1RFU1RTQ09MTEVDVEVECi0KLWRlZiBweXRlc3RfY29sbGVjdGlvbihz
ZXNzaW9uKToKLSAgICByZXR1cm4gc2Vzc2lvbi5wZXJmb3JtX2NvbGxlY3QoKQotCi1kZWYgcHl0
ZXN0X3J1bnRlc3Rsb29wKHNlc3Npb24pOgotICAgIGlmIHNlc3Npb24uY29uZmlnLm9wdGlvbi5j
b2xsZWN0b25seToKLSAgICAgICAgcmV0dXJuIFRydWUKLQotICAgIGRlZiBnZXRuZXh0aXRlbShp
KToKLSAgICAgICAgIyB0aGlzIGlzIGEgZnVuY3Rpb24gdG8gYXZvaWQgcHl0aG9uMgotICAgICAg
ICAjIGtlZXBpbmcgc3lzLmV4Y19pbmZvIHNldCB3aGVuIGNhbGxpbmcgaW50byBhIHRlc3QKLSAg
ICAgICAgIyBweXRob24yIGtlZXBzIHN5cy5leGNfaW5mbyB0aWxsIHRoZSBmcmFtZSBpcyBsZWZ0
Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHJldHVybiBzZXNzaW9uLml0ZW1zW2krMV0KLSAg
ICAgICAgZXhjZXB0IEluZGV4RXJyb3I6Ci0gICAgICAgICAgICByZXR1cm4gTm9uZQotCi0gICAg
Zm9yIGksIGl0ZW0gaW4gZW51bWVyYXRlKHNlc3Npb24uaXRlbXMpOgotICAgICAgICBuZXh0aXRl
bSA9IGdldG5leHRpdGVtKGkpCi0gICAgICAgIGl0ZW0uY29uZmlnLmhvb2sucHl0ZXN0X3J1bnRl
c3RfcHJvdG9jb2woaXRlbT1pdGVtLCBuZXh0aXRlbT1uZXh0aXRlbSkKLSAgICAgICAgaWYgc2Vz
c2lvbi5zaG91bGRzdG9wOgotICAgICAgICAgICAgcmFpc2Ugc2Vzc2lvbi5JbnRlcnJ1cHRlZChz
ZXNzaW9uLnNob3VsZHN0b3ApCi0gICAgcmV0dXJuIFRydWUKLQotZGVmIHB5dGVzdF9pZ25vcmVf
Y29sbGVjdChwYXRoLCBjb25maWcpOgotICAgIHAgPSBwYXRoLmRpcnBhdGgoKQotICAgIGlnbm9y
ZV9wYXRocyA9IGNvbmZpZy5fZ2V0Y29uZnRlc3RfcGF0aGxpc3QoImNvbGxlY3RfaWdub3JlIiwg
cGF0aD1wKQotICAgIGlnbm9yZV9wYXRocyA9IGlnbm9yZV9wYXRocyBvciBbXQotICAgIGV4Y2x1
ZGVvcHQgPSBjb25maWcuZ2V0b3B0aW9uKCJpZ25vcmUiKQotICAgIGlmIGV4Y2x1ZGVvcHQ6Ci0g
ICAgICAgIGlnbm9yZV9wYXRocy5leHRlbmQoW3B5LnBhdGgubG9jYWwoeCkgZm9yIHggaW4gZXhj
bHVkZW9wdF0pCi0gICAgcmV0dXJuIHBhdGggaW4gaWdub3JlX3BhdGhzCi0KLWNsYXNzIEZTSG9v
a1Byb3h5OgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmc3BhdGgsIHBtLCByZW1vdmVfbW9kcyk6
Ci0gICAgICAgIHNlbGYuZnNwYXRoID0gZnNwYXRoCi0gICAgICAgIHNlbGYucG0gPSBwbQotICAg
ICAgICBzZWxmLnJlbW92ZV9tb2RzID0gcmVtb3ZlX21vZHMKLQotICAgIGRlZiBfX2dldGF0dHJf
XyhzZWxmLCBuYW1lKToKLSAgICAgICAgeCA9IHNlbGYucG0uc3Vic2V0X2hvb2tfY2FsbGVyKG5h
bWUsIHJlbW92ZV9wbHVnaW5zPXNlbGYucmVtb3ZlX21vZHMpCi0gICAgICAgIHNlbGYuX19kaWN0
X19bbmFtZV0gPSB4Ci0gICAgICAgIHJldHVybiB4Ci0KLWRlZiBjb21wYXRwcm9wZXJ0eShuYW1l
KToKLSAgICBkZWYgZmdldChzZWxmKToKLSAgICAgICAgIyBkZXByZWNhdGVkIC0gdXNlIHB5dGVz
dC5uYW1lCi0gICAgICAgIHJldHVybiBnZXRhdHRyKHB5dGVzdCwgbmFtZSkKLQotICAgIHJldHVy
biBwcm9wZXJ0eShmZ2V0KQotCi1jbGFzcyBOb2RlS2V5d29yZHMoTWFwcGluZ01peGluKToKLSAg
ICBkZWYgX19pbml0X18oc2VsZiwgbm9kZSk6Ci0gICAgICAgIHNlbGYubm9kZSA9IG5vZGUKLSAg
ICAgICAgc2VsZi5wYXJlbnQgPSBub2RlLnBhcmVudAotICAgICAgICBzZWxmLl9tYXJrZXJzID0g
e25vZGUubmFtZTogVHJ1ZX0KLQotICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgotICAg
ICAgICB0cnk6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fbWFya2Vyc1trZXldCi0gICAgICAg
IGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgICAgIGlmIHNlbGYucGFyZW50IGlzIE5vbmU6Ci0g
ICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgIHJldHVybiBzZWxmLnBhcmVudC5rZXl3
b3Jkc1trZXldCi0KLSAgICBkZWYgX19zZXRpdGVtX18oc2VsZiwga2V5LCB2YWx1ZSk6Ci0gICAg
ICAgIHNlbGYuX21hcmtlcnNba2V5XSA9IHZhbHVlCi0KLSAgICBkZWYgX19kZWxpdGVtX18oc2Vs
Ziwga2V5KToKLSAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiY2Fubm90IGRlbGV0ZSBrZXkgaW4g
a2V5d29yZHMgZGljdCIpCi0KLSAgICBkZWYgX19pdGVyX18oc2VsZik6Ci0gICAgICAgIHNlZW4g
PSBzZXQoc2VsZi5fbWFya2VycykKLSAgICAgICAgaWYgc2VsZi5wYXJlbnQgaXMgbm90IE5vbmU6
Ci0gICAgICAgICAgICBzZWVuLnVwZGF0ZShzZWxmLnBhcmVudC5rZXl3b3JkcykKLSAgICAgICAg
cmV0dXJuIGl0ZXIoc2VlbikKLQotICAgIGRlZiBfX2xlbl9fKHNlbGYpOgotICAgICAgICByZXR1
cm4gbGVuKHNlbGYuX19pdGVyX18oKSkKLQotICAgIGRlZiBrZXlzKHNlbGYpOgotICAgICAgICBy
ZXR1cm4gbGlzdChzZWxmKQotCi0gICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICByZXR1
cm4gIjxOb2RlS2V5d29yZHMgZm9yIG5vZGUgJXM+IiAlIChzZWxmLm5vZGUsICkKLQotCi1jbGFz
cyBOb2RlKG9iamVjdCk6Ci0gICAgIiIiIGJhc2UgY2xhc3MgZm9yIENvbGxlY3RvciBhbmQgSXRl
bSB0aGUgdGVzdCBjb2xsZWN0aW9uIHRyZWUuCi0gICAgQ29sbGVjdG9yIHN1YmNsYXNzZXMgaGF2
ZSBjaGlsZHJlbiwgSXRlbXMgYXJlIHRlcm1pbmFsIG5vZGVzLiIiIgotCi0gICAgZGVmIF9faW5p
dF9fKHNlbGYsIG5hbWUsIHBhcmVudD1Ob25lLCBjb25maWc9Tm9uZSwgc2Vzc2lvbj1Ob25lKToK
LSAgICAgICAgIzogYSB1bmlxdWUgbmFtZSB3aXRoaW4gdGhlIHNjb3BlIG9mIHRoZSBwYXJlbnQg
bm9kZQotICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCi0KLSAgICAgICAgIzogdGhlIHBhcmVudCBj
b2xsZWN0b3Igbm9kZS4KLSAgICAgICAgc2VsZi5wYXJlbnQgPSBwYXJlbnQKLQotICAgICAgICAj
OiB0aGUgcHl0ZXN0IGNvbmZpZyBvYmplY3QKLSAgICAgICAgc2VsZi5jb25maWcgPSBjb25maWcg
b3IgcGFyZW50LmNvbmZpZwotCi0gICAgICAgICM6IHRoZSBzZXNzaW9uIHRoaXMgbm9kZSBpcyBw
YXJ0IG9mCi0gICAgICAgIHNlbGYuc2Vzc2lvbiA9IHNlc3Npb24gb3IgcGFyZW50LnNlc3Npb24K
LQotICAgICAgICAjOiBmaWxlc3lzdGVtIHBhdGggd2hlcmUgdGhpcyBub2RlIHdhcyBjb2xsZWN0
ZWQgZnJvbSAoY2FuIGJlIE5vbmUpCi0gICAgICAgIHNlbGYuZnNwYXRoID0gZ2V0YXR0cihwYXJl
bnQsICdmc3BhdGgnLCBOb25lKQotCi0gICAgICAgICM6IGtleXdvcmRzL21hcmtlcnMgY29sbGVj
dGVkIGZyb20gYWxsIHNjb3BlcwotICAgICAgICBzZWxmLmtleXdvcmRzID0gTm9kZUtleXdvcmRz
KHNlbGYpCi0KLSAgICAgICAgIzogYWxsb3cgYWRkaW5nIG9mIGV4dHJhIGtleXdvcmRzIHRvIHVz
ZSBmb3IgbWF0Y2hpbmcKLSAgICAgICAgc2VsZi5leHRyYV9rZXl3b3JkX21hdGNoZXMgPSBzZXQo
KQotCi0gICAgICAgICMgdXNlZCBmb3Igc3RvcmluZyBhcnRpZmljaWFsIGZpeHR1cmVkZWZzIGZv
ciBkaXJlY3QgcGFyYW1ldHJpemF0aW9uCi0gICAgICAgIHNlbGYuX25hbWUycHNldWRvZml4dHVy
ZWRlZiA9IHt9Ci0KLSAgICBAcHJvcGVydHkKLSAgICBkZWYgaWhvb2soc2VsZik6Ci0gICAgICAg
ICIiIiBmc3BhdGggc2Vuc2l0aXZlIGhvb2sgcHJveHkgdXNlZCB0byBjYWxsIHB5dGVzdCBob29r
cyIiIgotICAgICAgICByZXR1cm4gc2VsZi5zZXNzaW9uLmdldGhvb2twcm94eShzZWxmLmZzcGF0
aCkKLQotICAgIE1vZHVsZSA9IGNvbXBhdHByb3BlcnR5KCJNb2R1bGUiKQotICAgIENsYXNzID0g
Y29tcGF0cHJvcGVydHkoIkNsYXNzIikKLSAgICBJbnN0YW5jZSA9IGNvbXBhdHByb3BlcnR5KCJJ
bnN0YW5jZSIpCi0gICAgRnVuY3Rpb24gPSBjb21wYXRwcm9wZXJ0eSgiRnVuY3Rpb24iKQotICAg
IEZpbGUgPSBjb21wYXRwcm9wZXJ0eSgiRmlsZSIpCi0gICAgSXRlbSA9IGNvbXBhdHByb3BlcnR5
KCJJdGVtIikKLQotICAgIGRlZiBfZ2V0Y3VzdG9tY2xhc3Moc2VsZiwgbmFtZSk6Ci0gICAgICAg
IGNscyA9IGdldGF0dHIoc2VsZiwgbmFtZSkKLSAgICAgICAgaWYgY2xzICE9IGdldGF0dHIocHl0
ZXN0LCBuYW1lKToKLSAgICAgICAgICAgIHB5LmxvZy5fYXBpd2FybigiMi4wIiwgInVzZSBvZiBu
b2RlLiVzIGlzIGRlcHJlY2F0ZWQsICIKLSAgICAgICAgICAgICAgICAidXNlIHB5dGVzdF9weWNv
bGxlY3RfbWFrZWl0ZW0oLi4uKSB0byBjcmVhdGUgY3VzdG9tICIKLSAgICAgICAgICAgICAgICAi
Y29sbGVjdGlvbiBub2RlcyIgJSBuYW1lKQotICAgICAgICByZXR1cm4gY2xzCi0KLSAgICBkZWYg
X19yZXByX18oc2VsZik6Ci0gICAgICAgIHJldHVybiAiPCVzICVyPiIgJShzZWxmLl9fY2xhc3Nf
Xy5fX25hbWVfXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldGF0dHIoc2VsZiwgJ25h
bWUnLCBOb25lKSkKLQotICAgIGRlZiB3YXJuKHNlbGYsIGNvZGUsIG1lc3NhZ2UpOgotICAgICAg
ICAiIiIgZ2VuZXJhdGUgYSB3YXJuaW5nIHdpdGggdGhlIGdpdmVuIGNvZGUgYW5kIG1lc3NhZ2Ug
Zm9yIHRoaXMKLSAgICAgICAgaXRlbS4gIiIiCi0gICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGNv
ZGUsIHN0cikKLSAgICAgICAgZnNsb2NhdGlvbiA9IGdldGF0dHIoc2VsZiwgImxvY2F0aW9uIiwg
Tm9uZSkKLSAgICAgICAgaWYgZnNsb2NhdGlvbiBpcyBOb25lOgotICAgICAgICAgICAgZnNsb2Nh
dGlvbiA9IGdldGF0dHIoc2VsZiwgImZzcGF0aCIsIE5vbmUpCi0gICAgICAgIGVsc2U6Ci0gICAg
ICAgICAgICBmc2xvY2F0aW9uID0gIiVzOiVzIiAlIGZzbG9jYXRpb25bOjJdCi0KLSAgICAgICAg
c2VsZi5paG9vay5weXRlc3RfbG9nd2FybmluZy5jYWxsX2hpc3RvcmljKGt3YXJncz1kaWN0KAot
ICAgICAgICAgICAgY29kZT1jb2RlLCBtZXNzYWdlPW1lc3NhZ2UsCi0gICAgICAgICAgICBub2Rl
aWQ9c2VsZi5ub2RlaWQsIGZzbG9jYXRpb249ZnNsb2NhdGlvbikpCi0KLSAgICAjIG1ldGhvZHMg
Zm9yIG9yZGVyaW5nIG5vZGVzCi0gICAgQHByb3BlcnR5Ci0gICAgZGVmIG5vZGVpZChzZWxmKToK
LSAgICAgICAgIiIiIGEgOjotc2VwYXJhdGVkIHN0cmluZyBkZW5vdGluZyBpdHMgY29sbGVjdGlv
biB0cmVlIGFkZHJlc3MuICIiIgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXR1cm4gc2Vs
Zi5fbm9kZWlkCi0gICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgICAgIHNl
bGYuX25vZGVpZCA9IHggPSBzZWxmLl9tYWtlaWQoKQotICAgICAgICAgICAgcmV0dXJuIHgKLQot
ICAgIGRlZiBfbWFrZWlkKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5wYXJlbnQubm9kZWlk
ICsgIjo6IiArIHNlbGYubmFtZQotCi0gICAgZGVmIF9faGFzaF9fKHNlbGYpOgotICAgICAgICBy
ZXR1cm4gaGFzaChzZWxmLm5vZGVpZCkKLQotICAgIGRlZiBzZXR1cChzZWxmKToKLSAgICAgICAg
cGFzcwotCi0gICAgZGVmIHRlYXJkb3duKHNlbGYpOgotICAgICAgICBwYXNzCi0KLSAgICBkZWYg
X21lbW9pemVkY2FsbChzZWxmLCBhdHRybmFtZSwgZnVuY3Rpb24pOgotICAgICAgICBleGF0dHJu
YW1lID0gIl9leF8iICsgYXR0cm5hbWUKLSAgICAgICAgZmFpbHVyZSA9IGdldGF0dHIoc2VsZiwg
ZXhhdHRybmFtZSwgTm9uZSkKLSAgICAgICAgaWYgZmFpbHVyZSBpcyBub3QgTm9uZToKLSAgICAg
ICAgICAgIHB5LmJ1aWx0aW4uX3JlcmFpc2UoZmFpbHVyZVswXSwgZmFpbHVyZVsxXSwgZmFpbHVy
ZVsyXSkKLSAgICAgICAgaWYgaGFzYXR0cihzZWxmLCBhdHRybmFtZSk6Ci0gICAgICAgICAgICBy
ZXR1cm4gZ2V0YXR0cihzZWxmLCBhdHRybmFtZSkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAg
cmVzID0gZnVuY3Rpb24oKQotICAgICAgICBleGNlcHQgcHkuYnVpbHRpbi5fc3lzZXg6Ci0gICAg
ICAgICAgICByYWlzZQotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICBmYWlsdXJlID0gc3lz
LmV4Y19pbmZvKCkKLSAgICAgICAgICAgIHNldGF0dHIoc2VsZiwgZXhhdHRybmFtZSwgZmFpbHVy
ZSkKLSAgICAgICAgICAgIHJhaXNlCi0gICAgICAgIHNldGF0dHIoc2VsZiwgYXR0cm5hbWUsIHJl
cykKLSAgICAgICAgcmV0dXJuIHJlcwotCi0gICAgZGVmIGxpc3RjaGFpbihzZWxmKToKLSAgICAg
ICAgIiIiIHJldHVybiBsaXN0IG9mIGFsbCBwYXJlbnQgY29sbGVjdG9ycyB1cCB0byBzZWxmLAot
ICAgICAgICAgICAgc3RhcnRpbmcgZnJvbSByb290IG9mIGNvbGxlY3Rpb24gdHJlZS4gIiIiCi0g
ICAgICAgIGNoYWluID0gW10KLSAgICAgICAgaXRlbSA9IHNlbGYKLSAgICAgICAgd2hpbGUgaXRl
bSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIGNoYWluLmFwcGVuZChpdGVtKQotICAgICAgICAg
ICAgaXRlbSA9IGl0ZW0ucGFyZW50Ci0gICAgICAgIGNoYWluLnJldmVyc2UoKQotICAgICAgICBy
ZXR1cm4gY2hhaW4KLQotICAgIGRlZiBhZGRfbWFya2VyKHNlbGYsIG1hcmtlcik6Ci0gICAgICAg
ICIiIiBkeW5hbWljYWxseSBhZGQgYSBtYXJrZXIgb2JqZWN0IHRvIHRoZSBub2RlLgotCi0gICAg
ICAgIGBgbWFya2VyYGAgY2FuIGJlIGEgc3RyaW5nIG9yIHB5dGVzdC5tYXJrLiogaW5zdGFuY2Uu
Ci0gICAgICAgICIiIgotICAgICAgICBmcm9tIF9weXRlc3QubWFyayBpbXBvcnQgTWFya0RlY29y
YXRvcgotICAgICAgICBpZiBpc2luc3RhbmNlKG1hcmtlciwgcHkuYnVpbHRpbi5fYmFzZXN0cmlu
Zyk6Ci0gICAgICAgICAgICBtYXJrZXIgPSBNYXJrRGVjb3JhdG9yKG1hcmtlcikKLSAgICAgICAg
ZWxpZiBub3QgaXNpbnN0YW5jZShtYXJrZXIsIE1hcmtEZWNvcmF0b3IpOgotICAgICAgICAgICAg
cmFpc2UgVmFsdWVFcnJvcigiaXMgbm90IGEgc3RyaW5nIG9yIHB5dGVzdC5tYXJrLiogTWFya2Vy
IikKLSAgICAgICAgc2VsZi5rZXl3b3Jkc1ttYXJrZXIubmFtZV0gPSBtYXJrZXIKLQotICAgIGRl
ZiBnZXRfbWFya2VyKHNlbGYsIG5hbWUpOgotICAgICAgICAiIiIgZ2V0IGEgbWFya2VyIG9iamVj
dCBmcm9tIHRoaXMgbm9kZSBvciBOb25lIGlmCi0gICAgICAgIHRoZSBub2RlIGRvZXNuJ3QgaGF2
ZSBhIG1hcmtlciB3aXRoIHRoYXQgbmFtZS4gIiIiCi0gICAgICAgIHZhbCA9IHNlbGYua2V5d29y
ZHMuZ2V0KG5hbWUsIE5vbmUpCi0gICAgICAgIGlmIHZhbCBpcyBub3QgTm9uZToKLSAgICAgICAg
ICAgIGZyb20gX3B5dGVzdC5tYXJrIGltcG9ydCBNYXJrSW5mbywgTWFya0RlY29yYXRvcgotICAg
ICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWwsIChNYXJrRGVjb3JhdG9yLCBNYXJrSW5mbykpOgot
ICAgICAgICAgICAgICAgIHJldHVybiB2YWwKLQotICAgIGRlZiBsaXN0ZXh0cmFrZXl3b3Jkcyhz
ZWxmKToKLSAgICAgICAgIiIiIFJldHVybiBhIHNldCBvZiBhbGwgZXh0cmEga2V5d29yZHMgaW4g
c2VsZiBhbmQgYW55IHBhcmVudHMuIiIiCi0gICAgICAgIGV4dHJhX2tleXdvcmRzID0gc2V0KCkK
LSAgICAgICAgaXRlbSA9IHNlbGYKLSAgICAgICAgZm9yIGl0ZW0gaW4gc2VsZi5saXN0Y2hhaW4o
KToKLSAgICAgICAgICAgIGV4dHJhX2tleXdvcmRzLnVwZGF0ZShpdGVtLmV4dHJhX2tleXdvcmRf
bWF0Y2hlcykKLSAgICAgICAgcmV0dXJuIGV4dHJhX2tleXdvcmRzCi0KLSAgICBkZWYgbGlzdG5h
bWVzKHNlbGYpOgotICAgICAgICByZXR1cm4gW3gubmFtZSBmb3IgeCBpbiBzZWxmLmxpc3RjaGFp
bigpXQotCi0gICAgZGVmIGFkZGZpbmFsaXplcihzZWxmLCBmaW4pOgotICAgICAgICAiIiIgcmVn
aXN0ZXIgYSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGlzIG5vZGUgaXMgZmluYWxpemVk
LgotCi0gICAgICAgIFRoaXMgbWV0aG9kIGNhbiBvbmx5IGJlIGNhbGxlZCB3aGVuIHRoaXMgbm9k
ZSBpcyBhY3RpdmUKLSAgICAgICAgaW4gYSBzZXR1cCBjaGFpbiwgZm9yIGV4YW1wbGUgZHVyaW5n
IHNlbGYuc2V0dXAoKS4KLSAgICAgICAgIiIiCi0gICAgICAgIHNlbGYuc2Vzc2lvbi5fc2V0dXBz
dGF0ZS5hZGRmaW5hbGl6ZXIoZmluLCBzZWxmKQotCi0gICAgZGVmIGdldHBhcmVudChzZWxmLCBj
bHMpOgotICAgICAgICAiIiIgZ2V0IHRoZSBuZXh0IHBhcmVudCBub2RlIChpbmNsdWRpbmcgb3Vy
c2VsZikKLSAgICAgICAgd2hpY2ggaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGdpdmVuIGNsYXNzIiIi
Ci0gICAgICAgIGN1cnJlbnQgPSBzZWxmCi0gICAgICAgIHdoaWxlIGN1cnJlbnQgYW5kIG5vdCBp
c2luc3RhbmNlKGN1cnJlbnQsIGNscyk6Ci0gICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC5w
YXJlbnQKLSAgICAgICAgcmV0dXJuIGN1cnJlbnQKLQotICAgIGRlZiBfcHJ1bmV0cmFjZWJhY2so
c2VsZiwgZXhjaW5mbyk6Ci0gICAgICAgIHBhc3MKLQotICAgIGRlZiBfcmVwcl9mYWlsdXJlX3B5
KHNlbGYsIGV4Y2luZm8sIHN0eWxlPU5vbmUpOgotICAgICAgICBmbSA9IHNlbGYuc2Vzc2lvbi5f
Zml4dHVyZW1hbmFnZXIKLSAgICAgICAgaWYgZXhjaW5mby5lcnJpc2luc3RhbmNlKGZtLkZpeHR1
cmVMb29rdXBFcnJvcik6Ci0gICAgICAgICAgICByZXR1cm4gZXhjaW5mby52YWx1ZS5mb3JtYXRy
ZXByKCkKLSAgICAgICAgdGJmaWx0ZXIgPSBUcnVlCi0gICAgICAgIGlmIHNlbGYuY29uZmlnLm9w
dGlvbi5mdWxsdHJhY2U6Ci0gICAgICAgICAgICBzdHlsZT0ibG9uZyIKLSAgICAgICAgZWxzZToK
LSAgICAgICAgICAgIHNlbGYuX3BydW5ldHJhY2ViYWNrKGV4Y2luZm8pCi0gICAgICAgICAgICB0
YmZpbHRlciA9IEZhbHNlICAjIHBydW5ldHJhY2ViYWNrIGFscmVhZHkgZG9lcyBpdAotICAgICAg
ICAgICAgaWYgc3R5bGUgPT0gImF1dG8iOgotICAgICAgICAgICAgICAgIHN0eWxlID0gImxvbmci
Ci0gICAgICAgICMgWFhYIHNob3VsZCBleGNpbmZvLmdldHJlcHIgcmVjb3JkIGFsbCBkYXRhIGFu
ZCB0b3Rlcm1pbmFsKCkgcHJvY2VzcyBpdD8KLSAgICAgICAgaWYgc3R5bGUgaXMgTm9uZToKLSAg
ICAgICAgICAgIGlmIHNlbGYuY29uZmlnLm9wdGlvbi50YnN0eWxlID09ICJzaG9ydCI6Ci0gICAg
ICAgICAgICAgICAgc3R5bGUgPSAic2hvcnQiCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAg
ICAgICAgIHN0eWxlID0gImxvbmciCi0KLSAgICAgICAgcmV0dXJuIGV4Y2luZm8uZ2V0cmVwcihm
dW5jYXJncz1UcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dsb2NhbHM9
c2VsZi5jb25maWcub3B0aW9uLnNob3dsb2NhbHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3R5bGU9c3R5bGUsIHRiZmlsdGVyPXRiZmlsdGVyKQotCi0gICAgcmVwcl9mYWlsdXJl
ID0gX3JlcHJfZmFpbHVyZV9weQotCi1jbGFzcyBDb2xsZWN0b3IoTm9kZSk6Ci0gICAgIiIiIENv
bGxlY3RvciBpbnN0YW5jZXMgY3JlYXRlIGNoaWxkcmVuIHRocm91Z2ggY29sbGVjdCgpCi0gICAg
ICAgIGFuZCB0aHVzIGl0ZXJhdGl2ZWx5IGJ1aWxkIGEgdHJlZS4KLSAgICAiIiIKLQotICAgIGNs
YXNzIENvbGxlY3RFcnJvcihFeGNlcHRpb24pOgotICAgICAgICAiIiIgYW4gZXJyb3IgZHVyaW5n
IGNvbGxlY3Rpb24sIGNvbnRhaW5zIGEgY3VzdG9tIG1lc3NhZ2UuICIiIgotCi0gICAgZGVmIGNv
bGxlY3Qoc2VsZik6Ci0gICAgICAgICIiIiByZXR1cm5zIGEgbGlzdCBvZiBjaGlsZHJlbiAoaXRl
bXMgYW5kIGNvbGxlY3RvcnMpCi0gICAgICAgICAgICBmb3IgdGhpcyBjb2xsZWN0aW9uIG5vZGUu
Ci0gICAgICAgICIiIgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCJhYnN0cmFj
dCIpCi0KLSAgICBkZWYgcmVwcl9mYWlsdXJlKHNlbGYsIGV4Y2luZm8pOgotICAgICAgICAiIiIg
cmVwcmVzZW50IGEgY29sbGVjdGlvbiBmYWlsdXJlLiAiIiIKLSAgICAgICAgaWYgZXhjaW5mby5l
cnJpc2luc3RhbmNlKHNlbGYuQ29sbGVjdEVycm9yKToKLSAgICAgICAgICAgIGV4YyA9IGV4Y2lu
Zm8udmFsdWUKLSAgICAgICAgICAgIHJldHVybiBzdHIoZXhjLmFyZ3NbMF0pCi0gICAgICAgIHJl
dHVybiBzZWxmLl9yZXByX2ZhaWx1cmVfcHkoZXhjaW5mbywgc3R5bGU9InNob3J0IikKLQotICAg
IGRlZiBfbWVtb2NvbGxlY3Qoc2VsZik6Ci0gICAgICAgICIiIiBpbnRlcm5hbCBoZWxwZXIgbWV0
aG9kIHRvIGNhY2hlIHJlc3VsdHMgb2YgY2FsbGluZyBjb2xsZWN0KCkuICIiIgotICAgICAgICBy
ZXR1cm4gc2VsZi5fbWVtb2l6ZWRjYWxsKCdfY29sbGVjdGVkJywgbGFtYmRhOiBsaXN0KHNlbGYu
Y29sbGVjdCgpKSkKLQotICAgIGRlZiBfcHJ1bmV0cmFjZWJhY2soc2VsZiwgZXhjaW5mbyk6Ci0g
ICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgJ2ZzcGF0aCcpOgotICAgICAgICAgICAgdHJhY2ViYWNr
ID0gZXhjaW5mby50cmFjZWJhY2sKLSAgICAgICAgICAgIG50cmFjZWJhY2sgPSB0cmFjZWJhY2su
Y3V0KHBhdGg9c2VsZi5mc3BhdGgpCi0gICAgICAgICAgICBpZiBudHJhY2ViYWNrID09IHRyYWNl
YmFjazoKLSAgICAgICAgICAgICAgICBudHJhY2ViYWNrID0gbnRyYWNlYmFjay5jdXQoZXhjbHVk
ZXBhdGg9dHJhY2ViYWNrY3V0ZGlyKQotICAgICAgICAgICAgZXhjaW5mby50cmFjZWJhY2sgPSBu
dHJhY2ViYWNrLmZpbHRlcigpCi0KLWNsYXNzIEZTQ29sbGVjdG9yKENvbGxlY3Rvcik6Ci0gICAg
ZGVmIF9faW5pdF9fKHNlbGYsIGZzcGF0aCwgcGFyZW50PU5vbmUsIGNvbmZpZz1Ob25lLCBzZXNz
aW9uPU5vbmUpOgotICAgICAgICBmc3BhdGggPSBweS5wYXRoLmxvY2FsKGZzcGF0aCkgIyB4eHgg
b25seSBmb3IgdGVzdF9yZXN1bHRsb2cucHk/Ci0gICAgICAgIG5hbWUgPSBmc3BhdGguYmFzZW5h
bWUKLSAgICAgICAgaWYgcGFyZW50IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgcmVsID0gZnNw
YXRoLnJlbHRvKHBhcmVudC5mc3BhdGgpCi0gICAgICAgICAgICBpZiByZWw6Ci0gICAgICAgICAg
ICAgICAgbmFtZSA9IHJlbAotICAgICAgICAgICAgbmFtZSA9IG5hbWUucmVwbGFjZShvcy5zZXAs
ICIvIikKLSAgICAgICAgc3VwZXIoRlNDb2xsZWN0b3IsIHNlbGYpLl9faW5pdF9fKG5hbWUsIHBh
cmVudCwgY29uZmlnLCBzZXNzaW9uKQotICAgICAgICBzZWxmLmZzcGF0aCA9IGZzcGF0aAotCi0g
ICAgZGVmIF9tYWtlaWQoc2VsZik6Ci0gICAgICAgIHJlbHBhdGggPSBzZWxmLmZzcGF0aC5yZWx0
byhzZWxmLmNvbmZpZy5yb290ZGlyKQotICAgICAgICBpZiBvcy5zZXAgIT0gIi8iOgotICAgICAg
ICAgICAgcmVscGF0aCA9IHJlbHBhdGgucmVwbGFjZShvcy5zZXAsICIvIikKLSAgICAgICAgcmV0
dXJuIHJlbHBhdGgKLQotY2xhc3MgRmlsZShGU0NvbGxlY3Rvcik6Ci0gICAgIiIiIGJhc2UgY2xh
c3MgZm9yIGNvbGxlY3RpbmcgdGVzdHMgZnJvbSBhIGZpbGUuICIiIgotCi1jbGFzcyBJdGVtKE5v
ZGUpOgotICAgICIiIiBhIGJhc2ljIHRlc3QgaW52b2NhdGlvbiBpdGVtLiBOb3RlIHRoYXQgZm9y
IGEgc2luZ2xlIGZ1bmN0aW9uCi0gICAgdGhlcmUgbWlnaHQgYmUgbXVsdGlwbGUgdGVzdCBpbnZv
Y2F0aW9uIGl0ZW1zLgotICAgICIiIgotICAgIG5leHRpdGVtID0gTm9uZQotCi0gICAgZGVmIF9f
aW5pdF9fKHNlbGYsIG5hbWUsIHBhcmVudD1Ob25lLCBjb25maWc9Tm9uZSwgc2Vzc2lvbj1Ob25l
KToKLSAgICAgICAgc3VwZXIoSXRlbSwgc2VsZikuX19pbml0X18obmFtZSwgcGFyZW50LCBjb25m
aWcsIHNlc3Npb24pCi0gICAgICAgIHNlbGYuX3JlcG9ydF9zZWN0aW9ucyA9IFtdCi0KLSAgICBk
ZWYgYWRkX3JlcG9ydF9zZWN0aW9uKHNlbGYsIHdoZW4sIGtleSwgY29udGVudCk6Ci0gICAgICAg
IGlmIGNvbnRlbnQ6Ci0gICAgICAgICAgICBzZWxmLl9yZXBvcnRfc2VjdGlvbnMuYXBwZW5kKCh3
aGVuLCBrZXksIGNvbnRlbnQpKQotCi0gICAgZGVmIHJlcG9ydGluZm8oc2VsZik6Ci0gICAgICAg
IHJldHVybiBzZWxmLmZzcGF0aCwgTm9uZSwgIiIKLQotICAgIEBwcm9wZXJ0eQotICAgIGRlZiBs
b2NhdGlvbihzZWxmKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2xv
Y2F0aW9uCi0gICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgICAgIGxvY2F0
aW9uID0gc2VsZi5yZXBvcnRpbmZvKCkKLSAgICAgICAgICAgICMgYmVzdHJlbHBhdGggaXMgYSBx
dWl0ZSBzbG93IGZ1bmN0aW9uCi0gICAgICAgICAgICBjYWNoZSA9IHNlbGYuY29uZmlnLl9fZGlj
dF9fLnNldGRlZmF1bHQoIl9iZXN0cmVscGF0aGNhY2hlIiwge30pCi0gICAgICAgICAgICB0cnk6
Ci0gICAgICAgICAgICAgICAgZnNwYXRoID0gY2FjaGVbbG9jYXRpb25bMF1dCi0gICAgICAgICAg
ICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICAgICAgZnNwYXRoID0gc2VsZi5zZXNzaW9u
LmZzcGF0aC5iZXN0cmVscGF0aChsb2NhdGlvblswXSkKLSAgICAgICAgICAgICAgICBjYWNoZVts
b2NhdGlvblswXV0gPSBmc3BhdGgKLSAgICAgICAgICAgIGxvY2F0aW9uID0gKGZzcGF0aCwgbG9j
YXRpb25bMV0sIHN0cihsb2NhdGlvblsyXSkpCi0gICAgICAgICAgICBzZWxmLl9sb2NhdGlvbiA9
IGxvY2F0aW9uCi0gICAgICAgICAgICByZXR1cm4gbG9jYXRpb24KLQotY2xhc3MgTm9NYXRjaChF
eGNlcHRpb24pOgotICAgICIiIiByYWlzZWQgaWYgbWF0Y2hpbmcgY2Fubm90IGxvY2F0ZSBhIG1h
dGNoaW5nIG5hbWVzLiAiIiIKLQotY2xhc3MgSW50ZXJydXB0ZWQoS2V5Ym9hcmRJbnRlcnJ1cHQp
OgotICAgICIiIiBzaWduYWxzIGFuIGludGVycnVwdGVkIHRlc3QgcnVuLiAiIiIKLSAgICBfX21v
ZHVsZV9fID0gJ2J1aWx0aW5zJyAjIGZvciBweTMKLQotY2xhc3MgU2Vzc2lvbihGU0NvbGxlY3Rv
cik6Ci0gICAgSW50ZXJydXB0ZWQgPSBJbnRlcnJ1cHRlZAotCi0gICAgZGVmIF9faW5pdF9fKHNl
bGYsIGNvbmZpZyk6Ci0gICAgICAgIEZTQ29sbGVjdG9yLl9faW5pdF9fKHNlbGYsIGNvbmZpZy5y
b290ZGlyLCBwYXJlbnQ9Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmln
PWNvbmZpZywgc2Vzc2lvbj1zZWxmKQotICAgICAgICBzZWxmLl9mczJob29rcHJveHkgPSB7fQot
ICAgICAgICBzZWxmLnRlc3RzZmFpbGVkID0gMAotICAgICAgICBzZWxmLnRlc3RzY29sbGVjdGVk
ID0gMAotICAgICAgICBzZWxmLnNob3VsZHN0b3AgPSBGYWxzZQotICAgICAgICBzZWxmLnRyYWNl
ID0gY29uZmlnLnRyYWNlLnJvb3QuZ2V0KCJjb2xsZWN0aW9uIikKLSAgICAgICAgc2VsZi5fbm9y
ZWN1cnNlcGF0dGVybnMgPSBjb25maWcuZ2V0aW5pKCJub3JlY3Vyc2VkaXJzIikKLSAgICAgICAg
c2VsZi5zdGFydGRpciA9IHB5LnBhdGgubG9jYWwoKQotICAgICAgICBzZWxmLmNvbmZpZy5wbHVn
aW5tYW5hZ2VyLnJlZ2lzdGVyKHNlbGYsIG5hbWU9InNlc3Npb24iKQotCi0gICAgZGVmIF9tYWtl
aWQoc2VsZik6Ci0gICAgICAgIHJldHVybiAiIgotCi0gICAgQHB5dGVzdC5ob29raW1wbCh0cnlm
aXJzdD1UcnVlKQotICAgIGRlZiBweXRlc3RfY29sbGVjdHN0YXJ0KHNlbGYpOgotICAgICAgICBp
ZiBzZWxmLnNob3VsZHN0b3A6Ci0gICAgICAgICAgICByYWlzZSBzZWxmLkludGVycnVwdGVkKHNl
bGYuc2hvdWxkc3RvcCkKLQotICAgIEBweXRlc3QuaG9va2ltcGwodHJ5Zmlyc3Q9VHJ1ZSkKLSAg
ICBkZWYgcHl0ZXN0X3J1bnRlc3RfbG9ncmVwb3J0KHNlbGYsIHJlcG9ydCk6Ci0gICAgICAgIGlm
IHJlcG9ydC5mYWlsZWQgYW5kIG5vdCBoYXNhdHRyKHJlcG9ydCwgJ3dhc3hmYWlsJyk6Ci0gICAg
ICAgICAgICBzZWxmLnRlc3RzZmFpbGVkICs9IDEKLSAgICAgICAgICAgIG1heGZhaWwgPSBzZWxm
LmNvbmZpZy5nZXR2YWx1ZSgibWF4ZmFpbCIpCi0gICAgICAgICAgICBpZiBtYXhmYWlsIGFuZCBz
ZWxmLnRlc3RzZmFpbGVkID49IG1heGZhaWw6Ci0gICAgICAgICAgICAgICAgc2VsZi5zaG91bGRz
dG9wID0gInN0b3BwaW5nIGFmdGVyICVkIGZhaWx1cmVzIiAlICgKLSAgICAgICAgICAgICAgICAg
ICAgc2VsZi50ZXN0c2ZhaWxlZCkKLSAgICBweXRlc3RfY29sbGVjdHJlcG9ydCA9IHB5dGVzdF9y
dW50ZXN0X2xvZ3JlcG9ydAotCi0gICAgZGVmIGlzaW5pdHBhdGgoc2VsZiwgcGF0aCk6Ci0gICAg
ICAgIHJldHVybiBwYXRoIGluIHNlbGYuX2luaXRpYWxwYXRocwotCi0gICAgZGVmIGdldGhvb2tw
cm94eShzZWxmLCBmc3BhdGgpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXR1cm4gc2Vs
Zi5fZnMyaG9va3Byb3h5W2ZzcGF0aF0KLSAgICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAg
ICAgICAgIyBjaGVjayBpZiB3ZSBoYXZlIHRoZSBjb21tb24gY2FzZSBvZiBydW5uaW5nCi0gICAg
ICAgICAgICAjIGhvb2tzIHdpdGggYWxsIGNvbmZ0ZXN0LnB5IGZpbGVzYWxsIGNvbmZ0ZXN0LnB5
Ci0gICAgICAgICAgICBwbSA9IHNlbGYuY29uZmlnLnBsdWdpbm1hbmFnZXIKLSAgICAgICAgICAg
IG15X2NvbmZ0ZXN0bW9kdWxlcyA9IHBtLl9nZXRjb25mdGVzdG1vZHVsZXMoZnNwYXRoKQotICAg
ICAgICAgICAgcmVtb3ZlX21vZHMgPSBwbS5fY29uZnRlc3RfcGx1Z2lucy5kaWZmZXJlbmNlKG15
X2NvbmZ0ZXN0bW9kdWxlcykKLSAgICAgICAgICAgIGlmIHJlbW92ZV9tb2RzOgotICAgICAgICAg
ICAgICAgICMgb25lIG9yIG1vcmUgY29uZnRlc3RzIGFyZSBub3QgaW4gdXNlIGF0IHRoaXMgZnNw
YXRoCi0gICAgICAgICAgICAgICAgcHJveHkgPSBGU0hvb2tQcm94eShmc3BhdGgsIHBtLCByZW1v
dmVfbW9kcykKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgIyBhbGwgcGx1Z2lz
IGFyZSBhY3RpdmUgZm9yIHRoaXMgZnNwYXRoCi0gICAgICAgICAgICAgICAgcHJveHkgPSBzZWxm
LmNvbmZpZy5ob29rCi0KLSAgICAgICAgICAgIHNlbGYuX2ZzMmhvb2twcm94eVtmc3BhdGhdID0g
cHJveHkKLSAgICAgICAgICAgIHJldHVybiBwcm94eQotCi0gICAgZGVmIHBlcmZvcm1fY29sbGVj
dChzZWxmLCBhcmdzPU5vbmUsIGdlbml0ZW1zPVRydWUpOgotICAgICAgICBob29rID0gc2VsZi5j
b25maWcuaG9vawotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBpdGVtcyA9IHNlbGYuX3BlcmZv
cm1fY29sbGVjdChhcmdzLCBnZW5pdGVtcykKLSAgICAgICAgICAgIGhvb2sucHl0ZXN0X2NvbGxl
Y3Rpb25fbW9kaWZ5aXRlbXMoc2Vzc2lvbj1zZWxmLAotICAgICAgICAgICAgICAgIGNvbmZpZz1z
ZWxmLmNvbmZpZywgaXRlbXM9aXRlbXMpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBo
b29rLnB5dGVzdF9jb2xsZWN0aW9uX2ZpbmlzaChzZXNzaW9uPXNlbGYpCi0gICAgICAgIHNlbGYu
dGVzdHNjb2xsZWN0ZWQgPSBsZW4oaXRlbXMpCi0gICAgICAgIHJldHVybiBpdGVtcwotCi0gICAg
ZGVmIF9wZXJmb3JtX2NvbGxlY3Qoc2VsZiwgYXJncywgZ2VuaXRlbXMpOgotICAgICAgICBpZiBh
cmdzIGlzIE5vbmU6Ci0gICAgICAgICAgICBhcmdzID0gc2VsZi5jb25maWcuYXJncwotICAgICAg
ICBzZWxmLnRyYWNlKCJwZXJmb3JtX2NvbGxlY3QiLCBzZWxmLCBhcmdzKQotICAgICAgICBzZWxm
LnRyYWNlLnJvb3QuaW5kZW50ICs9IDEKLSAgICAgICAgc2VsZi5fbm90Zm91bmQgPSBbXQotICAg
ICAgICBzZWxmLl9pbml0aWFscGF0aHMgPSBzZXQoKQotICAgICAgICBzZWxmLl9pbml0aWFscGFy
dHMgPSBbXQotICAgICAgICBzZWxmLml0ZW1zID0gaXRlbXMgPSBbXQotICAgICAgICBmb3IgYXJn
IGluIGFyZ3M6Ci0gICAgICAgICAgICBwYXJ0cyA9IHNlbGYuX3BhcnNlYXJnKGFyZykKLSAgICAg
ICAgICAgIHNlbGYuX2luaXRpYWxwYXJ0cy5hcHBlbmQocGFydHMpCi0gICAgICAgICAgICBzZWxm
Ll9pbml0aWFscGF0aHMuYWRkKHBhcnRzWzBdKQotICAgICAgICByZXAgPSBjb2xsZWN0X29uZV9u
b2RlKHNlbGYpCi0gICAgICAgIHNlbGYuaWhvb2sucHl0ZXN0X2NvbGxlY3RyZXBvcnQocmVwb3J0
PXJlcCkKLSAgICAgICAgc2VsZi50cmFjZS5yb290LmluZGVudCAtPSAxCi0gICAgICAgIGlmIHNl
bGYuX25vdGZvdW5kOgotICAgICAgICAgICAgZXJyb3JzID0gW10KLSAgICAgICAgICAgIGZvciBh
cmcsIGV4YyBpbiBzZWxmLl9ub3Rmb3VuZDoKLSAgICAgICAgICAgICAgICBsaW5lID0gIihubyBu
YW1lICVyIGluIGFueSBvZiAlcikiICUgKGFyZywgZXhjLmFyZ3NbMF0pCi0gICAgICAgICAgICAg
ICAgZXJyb3JzLmFwcGVuZCgibm90IGZvdW5kOiAlc1xuJXMiICUgKGFyZywgbGluZSkpCi0gICAg
ICAgICAgICAgICAgI1hYWDogdGVzdCB0aGlzCi0gICAgICAgICAgICByYWlzZSBweXRlc3QuVXNh
Z2VFcnJvcigqZXJyb3JzKQotICAgICAgICBpZiBub3QgZ2VuaXRlbXM6Ci0gICAgICAgICAgICBy
ZXR1cm4gcmVwLnJlc3VsdAotICAgICAgICBlbHNlOgotICAgICAgICAgICAgaWYgcmVwLnBhc3Nl
ZDoKLSAgICAgICAgICAgICAgICBmb3Igbm9kZSBpbiByZXAucmVzdWx0OgotICAgICAgICAgICAg
ICAgICAgICBzZWxmLml0ZW1zLmV4dGVuZChzZWxmLmdlbml0ZW1zKG5vZGUpKQotICAgICAgICAg
ICAgcmV0dXJuIGl0ZW1zCi0KLSAgICBkZWYgY29sbGVjdChzZWxmKToKLSAgICAgICAgZm9yIHBh
cnRzIGluIHNlbGYuX2luaXRpYWxwYXJ0czoKLSAgICAgICAgICAgIGFyZyA9ICI6OiIuam9pbiht
YXAoc3RyLCBwYXJ0cykpCi0gICAgICAgICAgICBzZWxmLnRyYWNlKCJwcm9jZXNzaW5nIGFyZ3Vt
ZW50IiwgYXJnKQotICAgICAgICAgICAgc2VsZi50cmFjZS5yb290LmluZGVudCArPSAxCi0gICAg
ICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgZm9yIHggaW4gc2VsZi5fY29sbGVjdChhcmcp
OgotICAgICAgICAgICAgICAgICAgICB5aWVsZCB4Ci0gICAgICAgICAgICBleGNlcHQgTm9NYXRj
aDoKLSAgICAgICAgICAgICAgICAjIHdlIGFyZSBpbnNpZGUgYSBtYWtlX3JlcG9ydCBob29rIHNv
Ci0gICAgICAgICAgICAgICAgIyB3ZSBjYW5ub3QgZGlyZWN0bHkgcGFzcyB0aHJvdWdoIHRoZSBl
eGNlcHRpb24KLSAgICAgICAgICAgICAgICBzZWxmLl9ub3Rmb3VuZC5hcHBlbmQoKGFyZywgc3lz
LmV4Y19pbmZvKClbMV0pKQotCi0gICAgICAgICAgICBzZWxmLnRyYWNlLnJvb3QuaW5kZW50IC09
IDEKLQotICAgIGRlZiBfY29sbGVjdChzZWxmLCBhcmcpOgotICAgICAgICBuYW1lcyA9IHNlbGYu
X3BhcnNlYXJnKGFyZykKLSAgICAgICAgcGF0aCA9IG5hbWVzLnBvcCgwKQotICAgICAgICBpZiBw
YXRoLmNoZWNrKGRpcj0xKToKLSAgICAgICAgICAgIGFzc2VydCBub3QgbmFtZXMsICJpbnZhbGlk
IGFyZyAlciIgJShhcmcsKQotICAgICAgICAgICAgZm9yIHBhdGggaW4gcGF0aC52aXNpdChmaWw9
bGFtYmRhIHg6IHguY2hlY2soZmlsZT0xKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmVjPXNlbGYuX3JlY3Vyc2UsIGJmPVRydWUsIHNvcnQ9VHJ1ZSk6Ci0gICAgICAgICAg
ICAgICAgZm9yIHggaW4gc2VsZi5fY29sbGVjdGZpbGUocGF0aCk6Ci0gICAgICAgICAgICAgICAg
ICAgIHlpZWxkIHgKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGFzc2VydCBwYXRoLmNoZWNr
KGZpbGU9MSkKLSAgICAgICAgICAgIGZvciB4IGluIHNlbGYubWF0Y2hub2RlcyhzZWxmLl9jb2xs
ZWN0ZmlsZShwYXRoKSwgbmFtZXMpOgotICAgICAgICAgICAgICAgIHlpZWxkIHgKLQotICAgIGRl
ZiBfY29sbGVjdGZpbGUoc2VsZiwgcGF0aCk6Ci0gICAgICAgIGlob29rID0gc2VsZi5nZXRob29r
cHJveHkocGF0aCkKLSAgICAgICAgaWYgbm90IHNlbGYuaXNpbml0cGF0aChwYXRoKToKLSAgICAg
ICAgICAgIGlmIGlob29rLnB5dGVzdF9pZ25vcmVfY29sbGVjdChwYXRoPXBhdGgsIGNvbmZpZz1z
ZWxmLmNvbmZpZyk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICgpCi0gICAgICAgIHJldHVybiBp
aG9vay5weXRlc3RfY29sbGVjdF9maWxlKHBhdGg9cGF0aCwgcGFyZW50PXNlbGYpCi0KLSAgICBk
ZWYgX3JlY3Vyc2Uoc2VsZiwgcGF0aCk6Ci0gICAgICAgIGlob29rID0gc2VsZi5nZXRob29rcHJv
eHkocGF0aC5kaXJwYXRoKCkpCi0gICAgICAgIGlmIGlob29rLnB5dGVzdF9pZ25vcmVfY29sbGVj
dChwYXRoPXBhdGgsIGNvbmZpZz1zZWxmLmNvbmZpZyk6Ci0gICAgICAgICAgICByZXR1cm4KLSAg
ICAgICAgZm9yIHBhdCBpbiBzZWxmLl9ub3JlY3Vyc2VwYXR0ZXJuczoKLSAgICAgICAgICAgIGlm
IHBhdGguY2hlY2soZm5tYXRjaD1wYXQpOgotICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQot
ICAgICAgICBpaG9vayA9IHNlbGYuZ2V0aG9va3Byb3h5KHBhdGgpCi0gICAgICAgIGlob29rLnB5
dGVzdF9jb2xsZWN0X2RpcmVjdG9yeShwYXRoPXBhdGgsIHBhcmVudD1zZWxmKQotICAgICAgICBy
ZXR1cm4gVHJ1ZQotCi0gICAgZGVmIF90cnljb252ZXJ0cHlhcmcoc2VsZiwgeCk6Ci0gICAgICAg
IG1vZCA9IE5vbmUKLSAgICAgICAgcGF0aCA9IFtvcy5wYXRoLmFic3BhdGgoJy4nKV0gKyBzeXMu
cGF0aAotICAgICAgICBmb3IgbmFtZSBpbiB4LnNwbGl0KCcuJyk6Ci0gICAgICAgICAgICAjIGln
bm9yZSBhbnl0aGluZyB0aGF0J3Mgbm90IGEgcHJvcGVyIG5hbWUgaGVyZQotICAgICAgICAgICAg
IyBlbHNlIHNvbWV0aGluZyBsaWtlIC0tcHlhcmdzIHdpbGwgbWVzcyB1cCAnLicKLSAgICAgICAg
ICAgICMgc2luY2UgaW1wLmZpbmRfbW9kdWxlIHdpbGwgYWN0dWFsbHkgc29tZXRpbWVzIHdvcmsg
Zm9yIGl0Ci0gICAgICAgICAgICAjIGJ1dCBpdCdzIHN1cHBvc2VkIHRvIGJlIGNvbnNpZGVyZWQg
YSBmaWxlc3lzdGVtIHBhdGgKLSAgICAgICAgICAgICMgbm90IGEgcGFja2FnZQotICAgICAgICAg
ICAgaWYgbmFtZV9yZS5tYXRjaChuYW1lKSBpcyBOb25lOgotICAgICAgICAgICAgICAgIHJldHVy
biB4Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgZmQsIG1vZCwgdHlwZV8gPSBp
bXAuZmluZF9tb2R1bGUobmFtZSwgcGF0aCkKLSAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJv
cjoKLSAgICAgICAgICAgICAgICByZXR1cm4geAotICAgICAgICAgICAgZWxzZToKLSAgICAgICAg
ICAgICAgICBpZiBmZCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgZmQuY2xvc2Uo
KQotCi0gICAgICAgICAgICBpZiB0eXBlX1syXSAhPSBpbXAuUEtHX0RJUkVDVE9SWToKLSAgICAg
ICAgICAgICAgICBwYXRoID0gW29zLnBhdGguZGlybmFtZShtb2QpXQotICAgICAgICAgICAgZWxz
ZToKLSAgICAgICAgICAgICAgICBwYXRoID0gW21vZF0KLSAgICAgICAgcmV0dXJuIG1vZAotCi0g
ICAgZGVmIF9wYXJzZWFyZyhzZWxmLCBhcmcpOgotICAgICAgICAiIiIgcmV0dXJuIChmc3BhdGgs
IG5hbWVzKSB0dXBsZSBhZnRlciBjaGVja2luZyB0aGUgZmlsZSBleGlzdHMuICIiIgotICAgICAg
ICBhcmcgPSBzdHIoYXJnKQotICAgICAgICBpZiBzZWxmLmNvbmZpZy5vcHRpb24ucHlhcmdzOgot
ICAgICAgICAgICAgYXJnID0gc2VsZi5fdHJ5Y29udmVydHB5YXJnKGFyZykKLSAgICAgICAgcGFy
dHMgPSBzdHIoYXJnKS5zcGxpdCgiOjoiKQotICAgICAgICByZWxwYXRoID0gcGFydHNbMF0ucmVw
bGFjZSgiLyIsIG9zLnNlcCkKLSAgICAgICAgcGF0aCA9IHNlbGYuY29uZmlnLmludm9jYXRpb25f
ZGlyLmpvaW4ocmVscGF0aCwgYWJzPVRydWUpCi0gICAgICAgIGlmIG5vdCBwYXRoLmNoZWNrKCk6
Ci0gICAgICAgICAgICBpZiBzZWxmLmNvbmZpZy5vcHRpb24ucHlhcmdzOgotICAgICAgICAgICAg
ICAgIG1zZyA9ICJmaWxlIG9yIHBhY2thZ2Ugbm90IGZvdW5kOiAiCi0gICAgICAgICAgICBlbHNl
OgotICAgICAgICAgICAgICAgIG1zZyA9ICJmaWxlIG5vdCBmb3VuZDogIgotICAgICAgICAgICAg
cmFpc2UgcHl0ZXN0LlVzYWdlRXJyb3IobXNnICsgYXJnKQotICAgICAgICBwYXJ0c1swXSA9IHBh
dGgKLSAgICAgICAgcmV0dXJuIHBhcnRzCi0KLSAgICBkZWYgbWF0Y2hub2RlcyhzZWxmLCBtYXRj
aGluZywgbmFtZXMpOgotICAgICAgICBzZWxmLnRyYWNlKCJtYXRjaG5vZGVzIiwgbWF0Y2hpbmcs
IG5hbWVzKQotICAgICAgICBzZWxmLnRyYWNlLnJvb3QuaW5kZW50ICs9IDEKLSAgICAgICAgbm9k
ZXMgPSBzZWxmLl9tYXRjaG5vZGVzKG1hdGNoaW5nLCBuYW1lcykKLSAgICAgICAgbnVtID0gbGVu
KG5vZGVzKQotICAgICAgICBzZWxmLnRyYWNlKCJtYXRjaG5vZGVzIGZpbmlzaGVkIC0+ICIsIG51
bSwgIm5vZGVzIikKLSAgICAgICAgc2VsZi50cmFjZS5yb290LmluZGVudCAtPSAxCi0gICAgICAg
IGlmIG51bSA9PSAwOgotICAgICAgICAgICAgcmFpc2UgTm9NYXRjaChtYXRjaGluZywgbmFtZXNb
OjFdKQotICAgICAgICByZXR1cm4gbm9kZXMKLQotICAgIGRlZiBfbWF0Y2hub2RlcyhzZWxmLCBt
YXRjaGluZywgbmFtZXMpOgotICAgICAgICBpZiBub3QgbWF0Y2hpbmcgb3Igbm90IG5hbWVzOgot
ICAgICAgICAgICAgcmV0dXJuIG1hdGNoaW5nCi0gICAgICAgIG5hbWUgPSBuYW1lc1swXQotICAg
ICAgICBhc3NlcnQgbmFtZQotICAgICAgICBuZXh0bmFtZXMgPSBuYW1lc1sxOl0KLSAgICAgICAg
cmVzdWx0bm9kZXMgPSBbXQotICAgICAgICBmb3Igbm9kZSBpbiBtYXRjaGluZzoKLSAgICAgICAg
ICAgIGlmIGlzaW5zdGFuY2Uobm9kZSwgcHl0ZXN0Lkl0ZW0pOgotICAgICAgICAgICAgICAgIGlm
IG5vdCBuYW1lczoKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0bm9kZXMuYXBwZW5kKG5vZGUp
Ci0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIGFzc2VydCBpc2luc3RhbmNl
KG5vZGUsIHB5dGVzdC5Db2xsZWN0b3IpCi0gICAgICAgICAgICByZXAgPSBjb2xsZWN0X29uZV9u
b2RlKG5vZGUpCi0gICAgICAgICAgICBpZiByZXAucGFzc2VkOgotICAgICAgICAgICAgICAgIGhh
c19tYXRjaGVkID0gRmFsc2UKLSAgICAgICAgICAgICAgICBmb3IgeCBpbiByZXAucmVzdWx0Ogot
ICAgICAgICAgICAgICAgICAgICAjIFRPRE86IHJlbW92ZSBwYXJhbWV0cml6ZWQgd29ya2Fyb3Vu
ZCBvbmNlIGNvbGxlY3Rpb24gc3RydWN0dXJlIGNvbnRhaW5zIHBhcmFtZXRyaXphdGlvbgotICAg
ICAgICAgICAgICAgICAgICBpZiB4Lm5hbWUgPT0gbmFtZSBvciB4Lm5hbWUuc3BsaXQoIlsiKVsw
XSA9PSBuYW1lOgotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0bm9kZXMuZXh0ZW5kKHNl
bGYubWF0Y2hub2RlcyhbeF0sIG5leHRuYW1lcykpCi0gICAgICAgICAgICAgICAgICAgICAgICBo
YXNfbWF0Y2hlZCA9IFRydWUKLSAgICAgICAgICAgICAgICAjIFhYWCBhY2NlcHQgSURzIHRoYXQg
ZG9uJ3QgaGF2ZSAiKCkiIGZvciBjbGFzcyBpbnN0YW5jZXMKLSAgICAgICAgICAgICAgICBpZiBu
b3QgaGFzX21hdGNoZWQgYW5kIGxlbihyZXAucmVzdWx0KSA9PSAxIGFuZCB4Lm5hbWUgPT0gIigp
IjoKLSAgICAgICAgICAgICAgICAgICAgbmV4dG5hbWVzLmluc2VydCgwLCBuYW1lKQotICAgICAg
ICAgICAgICAgICAgICByZXN1bHRub2Rlcy5leHRlbmQoc2VsZi5tYXRjaG5vZGVzKFt4XSwgbmV4
dG5hbWVzKSkKLSAgICAgICAgICAgIG5vZGUuaWhvb2sucHl0ZXN0X2NvbGxlY3RyZXBvcnQocmVw
b3J0PXJlcCkKLSAgICAgICAgcmV0dXJuIHJlc3VsdG5vZGVzCi0KLSAgICBkZWYgZ2VuaXRlbXMo
c2VsZiwgbm9kZSk6Ci0gICAgICAgIHNlbGYudHJhY2UoImdlbml0ZW1zIiwgbm9kZSkKLSAgICAg
ICAgaWYgaXNpbnN0YW5jZShub2RlLCBweXRlc3QuSXRlbSk6Ci0gICAgICAgICAgICBub2RlLmlo
b29rLnB5dGVzdF9pdGVtY29sbGVjdGVkKGl0ZW09bm9kZSkKLSAgICAgICAgICAgIHlpZWxkIG5v
ZGUKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKG5vZGUsIHB5
dGVzdC5Db2xsZWN0b3IpCi0gICAgICAgICAgICByZXAgPSBjb2xsZWN0X29uZV9ub2RlKG5vZGUp
Ci0gICAgICAgICAgICBpZiByZXAucGFzc2VkOgotICAgICAgICAgICAgICAgIGZvciBzdWJub2Rl
IGluIHJlcC5yZXN1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIGZvciB4IGluIHNlbGYuZ2VuaXRl
bXMoc3Vibm9kZSk6Ci0gICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCB4Ci0gICAgICAgICAg
ICBub2RlLmlob29rLnB5dGVzdF9jb2xsZWN0cmVwb3J0KHJlcG9ydD1yZXApCmRpZmYgLS1naXQg
YS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvbWFyay5w
eSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9tYXJr
LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTc2MzU0MDI0MC4uMDAwMDAwMDAw
MDAKLS0tIGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0
L21hcmsucHkKKysrIC9kZXYvbnVsbApAQCAtMSwzMTEgKzAsMCBAQAotIiIiIGdlbmVyaWMgbWVj
aGFuaXNtIGZvciBtYXJraW5nIGFuZCBzZWxlY3RpbmcgcHl0aG9uIGZ1bmN0aW9ucy4gIiIiCi1p
bXBvcnQgaW5zcGVjdAotCi0KLWNsYXNzIE1hcmtlckVycm9yKEV4Y2VwdGlvbik6Ci0KLSAgICAi
IiJFcnJvciBpbiB1c2Ugb2YgYSBweXRlc3QgbWFya2VyL2F0dHJpYnV0ZS4iIiIKLQotCi1kZWYg
cHl0ZXN0X25hbWVzcGFjZSgpOgotICAgIHJldHVybiB7J21hcmsnOiBNYXJrR2VuZXJhdG9yKCl9
Ci0KLQotZGVmIHB5dGVzdF9hZGRvcHRpb24ocGFyc2VyKToKLSAgICBncm91cCA9IHBhcnNlci5n
ZXRncm91cCgiZ2VuZXJhbCIpCi0gICAgZ3JvdXAuX2FkZG9wdGlvbigKLSAgICAgICAgJy1rJywK
LSAgICAgICAgYWN0aW9uPSJzdG9yZSIsIGRlc3Q9ImtleXdvcmQiLCBkZWZhdWx0PScnLCBtZXRh
dmFyPSJFWFBSRVNTSU9OIiwKLSAgICAgICAgaGVscD0ib25seSBydW4gdGVzdHMgd2hpY2ggbWF0
Y2ggdGhlIGdpdmVuIHN1YnN0cmluZyBleHByZXNzaW9uLiAiCi0gICAgICAgICAgICAgIkFuIGV4
cHJlc3Npb24gaXMgYSBweXRob24gZXZhbHVhdGFibGUgZXhwcmVzc2lvbiAiCi0gICAgICAgICAg
ICAgIndoZXJlIGFsbCBuYW1lcyBhcmUgc3Vic3RyaW5nLW1hdGNoZWQgYWdhaW5zdCB0ZXN0IG5h
bWVzICIKLSAgICAgICAgICAgICAiYW5kIHRoZWlyIHBhcmVudCBjbGFzc2VzLiBFeGFtcGxlOiAt
ayAndGVzdF9tZXRob2Qgb3IgdGVzdCAiCi0gICAgICAgICAgICAgIm90aGVyJyBtYXRjaGVzIGFs
bCB0ZXN0IGZ1bmN0aW9ucyBhbmQgY2xhc3NlcyB3aG9zZSBuYW1lICIKLSAgICAgICAgICAgICAi
Y29udGFpbnMgJ3Rlc3RfbWV0aG9kJyBvciAndGVzdF9vdGhlcicuICIKLSAgICAgICAgICAgICAi
QWRkaXRpb25hbGx5IGtleXdvcmRzIGFyZSBtYXRjaGVkIHRvIGNsYXNzZXMgYW5kIGZ1bmN0aW9u
cyAiCi0gICAgICAgICAgICAgImNvbnRhaW5pbmcgZXh0cmEgbmFtZXMgaW4gdGhlaXIgJ2V4dHJh
X2tleXdvcmRfbWF0Y2hlcycgc2V0LCAiCi0gICAgICAgICAgICAgImFzIHdlbGwgYXMgZnVuY3Rp
b25zIHdoaWNoIGhhdmUgbmFtZXMgYXNzaWduZWQgZGlyZWN0bHkgdG8gdGhlbS4iCi0gICAgKQot
Ci0gICAgZ3JvdXAuX2FkZG9wdGlvbigKLSAgICAgICAgIi1tIiwKLSAgICAgICAgYWN0aW9uPSJz
dG9yZSIsIGRlc3Q9Im1hcmtleHByIiwgZGVmYXVsdD0iIiwgbWV0YXZhcj0iTUFSS0VYUFIiLAot
ICAgICAgICBoZWxwPSJvbmx5IHJ1biB0ZXN0cyBtYXRjaGluZyBnaXZlbiBtYXJrIGV4cHJlc3Np
b24uICAiCi0gICAgICAgICAgICAgImV4YW1wbGU6IC1tICdtYXJrMSBhbmQgbm90IG1hcmsyJy4i
Ci0gICAgKQotCi0gICAgZ3JvdXAuYWRkb3B0aW9uKAotICAgICAgICAiLS1tYXJrZXJzIiwgYWN0
aW9uPSJzdG9yZV90cnVlIiwKLSAgICAgICAgaGVscD0ic2hvdyBtYXJrZXJzIChidWlsdGluLCBw
bHVnaW4gYW5kIHBlci1wcm9qZWN0IG9uZXMpLiIKLSAgICApCi0KLSAgICBwYXJzZXIuYWRkaW5p
KCJtYXJrZXJzIiwgIm1hcmtlcnMgZm9yIHRlc3QgZnVuY3Rpb25zIiwgJ2xpbmVsaXN0JykKLQot
Ci1kZWYgcHl0ZXN0X2NtZGxpbmVfbWFpbihjb25maWcpOgotICAgIGltcG9ydCBfcHl0ZXN0LmNv
bmZpZwotICAgIGlmIGNvbmZpZy5vcHRpb24ubWFya2VyczoKLSAgICAgICAgY29uZmlnLl9kb19j
b25maWd1cmUoKQotICAgICAgICB0dyA9IF9weXRlc3QuY29uZmlnLmNyZWF0ZV90ZXJtaW5hbF93
cml0ZXIoY29uZmlnKQotICAgICAgICBmb3IgbGluZSBpbiBjb25maWcuZ2V0aW5pKCJtYXJrZXJz
Iik6Ci0gICAgICAgICAgICBuYW1lLCByZXN0ID0gbGluZS5zcGxpdCgiOiIsIDEpCi0gICAgICAg
ICAgICB0dy53cml0ZSgiQHB5dGVzdC5tYXJrLiVzOiIgJSBuYW1lLCBib2xkPVRydWUpCi0gICAg
ICAgICAgICB0dy5saW5lKHJlc3QpCi0gICAgICAgICAgICB0dy5saW5lKCkKLSAgICAgICAgY29u
ZmlnLl9lbnN1cmVfdW5jb25maWd1cmUoKQotICAgICAgICByZXR1cm4gMAotcHl0ZXN0X2NtZGxp
bmVfbWFpbi50cnlmaXJzdCA9IFRydWUKLQotCi1kZWYgcHl0ZXN0X2NvbGxlY3Rpb25fbW9kaWZ5
aXRlbXMoaXRlbXMsIGNvbmZpZyk6Ci0gICAga2V5d29yZGV4cHIgPSBjb25maWcub3B0aW9uLmtl
eXdvcmQKLSAgICBtYXRjaGV4cHIgPSBjb25maWcub3B0aW9uLm1hcmtleHByCi0gICAgaWYgbm90
IGtleXdvcmRleHByIGFuZCBub3QgbWF0Y2hleHByOgotICAgICAgICByZXR1cm4KLSAgICAjIHB5
dGVzdCB1c2VkIHRvIGFsbG93ICItIiBmb3IgbmVnYXRpbmcKLSAgICAjIGJ1dCB0b2RheSB3ZSBq
dXN0IGFsbG93ICItIiBhdCB0aGUgYmVnaW5uaW5nLCB1c2UgIm5vdCIgaW5zdGVhZAotICAgICMg
d2UgcHJvYmFibHkgcmVtb3ZlICItIiBhbGx0b2dldGhlciBzb29uCi0gICAgaWYga2V5d29yZGV4
cHIuc3RhcnRzd2l0aCgiLSIpOgotICAgICAgICBrZXl3b3JkZXhwciA9ICJub3QgIiArIGtleXdv
cmRleHByWzE6XQotICAgIHNlbGVjdHVudGlsID0gRmFsc2UKLSAgICBpZiBrZXl3b3JkZXhwclst
MTpdID09ICI6IjoKLSAgICAgICAgc2VsZWN0dW50aWwgPSBUcnVlCi0gICAgICAgIGtleXdvcmRl
eHByID0ga2V5d29yZGV4cHJbOi0xXQotCi0gICAgcmVtYWluaW5nID0gW10KLSAgICBkZXNlbGVj
dGVkID0gW10KLSAgICBmb3IgY29saXRlbSBpbiBpdGVtczoKLSAgICAgICAgaWYga2V5d29yZGV4
cHIgYW5kIG5vdCBtYXRjaGtleXdvcmQoY29saXRlbSwga2V5d29yZGV4cHIpOgotICAgICAgICAg
ICAgZGVzZWxlY3RlZC5hcHBlbmQoY29saXRlbSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAg
IGlmIHNlbGVjdHVudGlsOgotICAgICAgICAgICAgICAgIGtleXdvcmRleHByID0gTm9uZQotICAg
ICAgICAgICAgaWYgbWF0Y2hleHByOgotICAgICAgICAgICAgICAgIGlmIG5vdCBtYXRjaG1hcmso
Y29saXRlbSwgbWF0Y2hleHByKToKLSAgICAgICAgICAgICAgICAgICAgZGVzZWxlY3RlZC5hcHBl
bmQoY29saXRlbSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIHJl
bWFpbmluZy5hcHBlbmQoY29saXRlbSkKLQotICAgIGlmIGRlc2VsZWN0ZWQ6Ci0gICAgICAgIGNv
bmZpZy5ob29rLnB5dGVzdF9kZXNlbGVjdGVkKGl0ZW1zPWRlc2VsZWN0ZWQpCi0gICAgICAgIGl0
ZW1zWzpdID0gcmVtYWluaW5nCi0KLQotY2xhc3MgTWFya01hcHBpbmc6Ci0gICAgIiIiUHJvdmlk
ZXMgYSBsb2NhbCBtYXBwaW5nIGZvciBtYXJrZXJzIHdoZXJlIGl0ZW0gYWNjZXNzCi0gICAgcmVz
b2x2ZXMgdG8gVHJ1ZSBpZiB0aGUgbWFya2VyIGlzIHByZXNlbnQuICIiIgotICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBrZXl3b3Jkcyk6Ci0gICAgICAgIG15bWFya3MgPSBzZXQoKQotICAgICAgICBm
b3Iga2V5LCB2YWx1ZSBpbiBrZXl3b3Jkcy5pdGVtcygpOgotICAgICAgICAgICAgaWYgaXNpbnN0
YW5jZSh2YWx1ZSwgTWFya0luZm8pIG9yIGlzaW5zdGFuY2UodmFsdWUsIE1hcmtEZWNvcmF0b3Ip
OgotICAgICAgICAgICAgICAgIG15bWFya3MuYWRkKGtleSkKLSAgICAgICAgc2VsZi5fbXltYXJr
cyA9IG15bWFya3MKLQotICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBuYW1lKToKLSAgICAgICAg
cmV0dXJuIG5hbWUgaW4gc2VsZi5fbXltYXJrcwotCi0KLWNsYXNzIEtleXdvcmRNYXBwaW5nOgot
ICAgICIiIlByb3ZpZGVzIGEgbG9jYWwgbWFwcGluZyBmb3Iga2V5d29yZHMuCi0gICAgR2l2ZW4g
YSBsaXN0IG9mIG5hbWVzLCBtYXAgYW55IHN1YnN0cmluZyBvZiBvbmUgb2YgdGhlc2UgbmFtZXMg
dG8gVHJ1ZS4KLSAgICAiIiIKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZXMpOgotICAgICAg
ICBzZWxmLl9uYW1lcyA9IG5hbWVzCi0KLSAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgc3VibmFt
ZSk6Ci0gICAgICAgIGZvciBuYW1lIGluIHNlbGYuX25hbWVzOgotICAgICAgICAgICAgaWYgc3Vi
bmFtZSBpbiBuYW1lOgotICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgICAgIHJldHVy
biBGYWxzZQotCi0KLWRlZiBtYXRjaG1hcmsoY29saXRlbSwgbWFya2V4cHIpOgotICAgICIiIlRy
aWVzIHRvIG1hdGNoIG9uIGFueSBtYXJrZXIgbmFtZXMsIGF0dGFjaGVkIHRvIHRoZSBnaXZlbiBj
b2xpdGVtLiIiIgotICAgIHJldHVybiBldmFsKG1hcmtleHByLCB7fSwgTWFya01hcHBpbmcoY29s
aXRlbS5rZXl3b3JkcykpCi0KLQotZGVmIG1hdGNoa2V5d29yZChjb2xpdGVtLCBrZXl3b3JkZXhw
cik6Ci0gICAgIiIiVHJpZXMgdG8gbWF0Y2ggZ2l2ZW4ga2V5d29yZCBleHByZXNzaW9uIHRvIGdp
dmVuIGNvbGxlY3RvciBpdGVtLgotCi0gICAgV2lsbCBtYXRjaCBvbiB0aGUgbmFtZSBvZiBjb2xp
dGVtLCBpbmNsdWRpbmcgdGhlIG5hbWVzIG9mIGl0cyBwYXJlbnRzLgotICAgIE9ubHkgbWF0Y2hl
cyBuYW1lcyBvZiBpdGVtcyB3aGljaCBhcmUgZWl0aGVyIGEgOmNsYXNzOmBDbGFzc2Agb3IgYQot
ICAgIDpjbGFzczpgRnVuY3Rpb25gLgotICAgIEFkZGl0aW9uYWxseSwgbWF0Y2hlcyBvbiBuYW1l
cyBpbiB0aGUgJ2V4dHJhX2tleXdvcmRfbWF0Y2hlcycgc2V0IG9mCi0gICAgYW55IGl0ZW0sIGFz
IHdlbGwgYXMgbmFtZXMgZGlyZWN0bHkgYXNzaWduZWQgdG8gdGVzdCBmdW5jdGlvbnMuCi0gICAg
IiIiCi0gICAgbWFwcGVkX25hbWVzID0gc2V0KCkKLQotICAgICMgQWRkIHRoZSBuYW1lcyBvZiB0
aGUgY3VycmVudCBpdGVtIGFuZCBhbnkgcGFyZW50IGl0ZW1zCi0gICAgaW1wb3J0IHB5dGVzdAot
ICAgIGZvciBpdGVtIGluIGNvbGl0ZW0ubGlzdGNoYWluKCk6Ci0gICAgICAgIGlmIG5vdCBpc2lu
c3RhbmNlKGl0ZW0sIHB5dGVzdC5JbnN0YW5jZSk6Ci0gICAgICAgICAgICBtYXBwZWRfbmFtZXMu
YWRkKGl0ZW0ubmFtZSkKLQotICAgICMgQWRkIHRoZSBuYW1lcyBhZGRlZCBhcyBleHRyYSBrZXl3
b3JkcyB0byBjdXJyZW50IG9yIHBhcmVudCBpdGVtcwotICAgIGZvciBuYW1lIGluIGNvbGl0ZW0u
bGlzdGV4dHJha2V5d29yZHMoKToKLSAgICAgICAgbWFwcGVkX25hbWVzLmFkZChuYW1lKQotCi0g
ICAgIyBBZGQgdGhlIG5hbWVzIGF0dGFjaGVkIHRvIHRoZSBjdXJyZW50IGZ1bmN0aW9uIHRocm91
Z2ggZGlyZWN0IGFzc2lnbm1lbnQKLSAgICBpZiBoYXNhdHRyKGNvbGl0ZW0sICdmdW5jdGlvbicp
OgotICAgICAgICBmb3IgbmFtZSBpbiBjb2xpdGVtLmZ1bmN0aW9uLl9fZGljdF9fOgotICAgICAg
ICAgICAgbWFwcGVkX25hbWVzLmFkZChuYW1lKQotCi0gICAgbWFwcGluZyA9IEtleXdvcmRNYXBw
aW5nKG1hcHBlZF9uYW1lcykKLSAgICBpZiAiICIgbm90IGluIGtleXdvcmRleHByOgotICAgICAg
ICAjIHNwZWNpYWwgY2FzZSB0byBhbGxvdyBmb3Igc2ltcGxlICItayBwYXNzIiBhbmQgIi1rIDEu
MyIKLSAgICAgICAgcmV0dXJuIG1hcHBpbmdba2V5d29yZGV4cHJdCi0gICAgZWxpZiBrZXl3b3Jk
ZXhwci5zdGFydHN3aXRoKCJub3QgIikgYW5kICIgIiBub3QgaW4ga2V5d29yZGV4cHJbNDpdOgot
ICAgICAgICByZXR1cm4gbm90IG1hcHBpbmdba2V5d29yZGV4cHJbNDpdXQotICAgIHJldHVybiBl
dmFsKGtleXdvcmRleHByLCB7fSwgbWFwcGluZykKLQotCi1kZWYgcHl0ZXN0X2NvbmZpZ3VyZShj
b25maWcpOgotICAgIGltcG9ydCBweXRlc3QKLSAgICBpZiBjb25maWcub3B0aW9uLnN0cmljdDoK
LSAgICAgICAgcHl0ZXN0Lm1hcmsuX2NvbmZpZyA9IGNvbmZpZwotCi0KLWNsYXNzIE1hcmtHZW5l
cmF0b3I6Ci0gICAgIiIiIEZhY3RvcnkgZm9yIDpjbGFzczpgTWFya0RlY29yYXRvcmAgb2JqZWN0
cyAtIGV4cG9zZWQgYXMKLSAgICBhIGBgcHl0ZXN0Lm1hcmtgYCBzaW5nbGV0b24gaW5zdGFuY2Uu
ICBFeGFtcGxlOjoKLQotICAgICAgICAgaW1wb3J0IHB5dGVzdAotICAgICAgICAgQHB5dGVzdC5t
YXJrLnNsb3d0ZXN0Ci0gICAgICAgICBkZWYgdGVzdF9mdW5jdGlvbigpOgotICAgICAgICAgICAg
cGFzcwotCi0gICAgd2lsbCBzZXQgYSAnc2xvd3Rlc3QnIDpjbGFzczpgTWFya0luZm9gIG9iamVj
dAotICAgIG9uIHRoZSBgYHRlc3RfZnVuY3Rpb25gYCBvYmplY3QuICIiIgotCi0gICAgZGVmIF9f
Z2V0YXR0cl9fKHNlbGYsIG5hbWUpOgotICAgICAgICBpZiBuYW1lWzBdID09ICJfIjoKLSAgICAg
ICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCJNYXJrZXIgbmFtZSBtdXN0IE5PVCBzdGFydCB3
aXRoIHVuZGVyc2NvcmUiKQotICAgICAgICBpZiBoYXNhdHRyKHNlbGYsICdfY29uZmlnJyk6Ci0g
ICAgICAgICAgICBzZWxmLl9jaGVjayhuYW1lKQotICAgICAgICByZXR1cm4gTWFya0RlY29yYXRv
cihuYW1lKQotCi0gICAgZGVmIF9jaGVjayhzZWxmLCBuYW1lKToKLSAgICAgICAgdHJ5OgotICAg
ICAgICAgICAgaWYgbmFtZSBpbiBzZWxmLl9tYXJrZXJzOgotICAgICAgICAgICAgICAgIHJldHVy
bgotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAg
ICAgIHNlbGYuX21hcmtlcnMgPSBsID0gc2V0KCkKLSAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5f
Y29uZmlnLmdldGluaSgibWFya2VycyIpOgotICAgICAgICAgICAgYmVnaW5uaW5nID0gbGluZS5z
cGxpdCgiOiIsIDEpCi0gICAgICAgICAgICB4ID0gYmVnaW5uaW5nWzBdLnNwbGl0KCIoIiwgMSlb
MF0KLSAgICAgICAgICAgIGwuYWRkKHgpCi0gICAgICAgIGlmIG5hbWUgbm90IGluIHNlbGYuX21h
cmtlcnM6Ci0gICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigiJXIgbm90IGEgcmVnaXN0
ZXJlZCBtYXJrZXIiICUgKG5hbWUsKSkKLQotZGVmIGlzdGVzdGZ1bmMoZnVuYyk6Ci0gICAgcmV0
dXJuIGhhc2F0dHIoZnVuYywgIl9fY2FsbF9fIikgYW5kIFwKLSAgICAgICAgZ2V0YXR0cihmdW5j
LCAiX19uYW1lX18iLCAiPGxhbWJkYT4iKSAhPSAiPGxhbWJkYT4iCi0KLWNsYXNzIE1hcmtEZWNv
cmF0b3I6Ci0gICAgIiIiIEEgZGVjb3JhdG9yIGZvciB0ZXN0IGZ1bmN0aW9ucyBhbmQgdGVzdCBj
bGFzc2VzLiAgV2hlbiBhcHBsaWVkCi0gICAgaXQgd2lsbCBjcmVhdGUgOmNsYXNzOmBNYXJrSW5m
b2Agb2JqZWN0cyB3aGljaCBtYXkgYmUKLSAgICA6cmVmOmByZXRyaWV2ZWQgYnkgaG9va3MgYXMg
aXRlbSBrZXl3b3JkcyA8ZXhjb250cm9sc2tpcD5gLgotICAgIE1hcmtEZWNvcmF0b3IgaW5zdGFu
Y2VzIGFyZSBvZnRlbiBjcmVhdGVkIGxpa2UgdGhpczo6Ci0KLSAgICAgICAgbWFyazEgPSBweXRl
c3QubWFyay5OQU1FICAgICAgICAgICAgICAjIHNpbXBsZSBNYXJrRGVjb3JhdG9yCi0gICAgICAg
IG1hcmsyID0gcHl0ZXN0Lm1hcmsuTkFNRShuYW1lMT12YWx1ZSkgIyBwYXJhbWV0cml6ZWQgTWFy
a0RlY29yYXRvcgotCi0gICAgYW5kIGNhbiB0aGVuIGJlIGFwcGxpZWQgYXMgZGVjb3JhdG9ycyB0
byB0ZXN0IGZ1bmN0aW9uczo6Ci0KLSAgICAgICAgQG1hcmsyCi0gICAgICAgIGRlZiB0ZXN0X2Z1
bmN0aW9uKCk6Ci0gICAgICAgICAgICBwYXNzCi0KLSAgICBXaGVuIGEgTWFya0RlY29yYXRvciBp
bnN0YW5jZSBpcyBjYWxsZWQgaXQgZG9lcyB0aGUgZm9sbG93aW5nOgotICAgICAgMS4gSWYgY2Fs
bGVkIHdpdGggYSBzaW5nbGUgY2xhc3MgYXMgaXRzIG9ubHkgcG9zaXRpb25hbCBhcmd1bWVudCBh
bmQgbm8KLSAgICAgICAgIGFkZGl0aW9uYWwga2V5d29yZCBhcmd1bWVudHMsIGl0IGF0dGFjaGVz
IGl0c2VsZiB0byB0aGUgY2xhc3Mgc28gaXQKLSAgICAgICAgIGdldHMgYXBwbGllZCBhdXRvbWF0
aWNhbGx5IHRvIGFsbCB0ZXN0IGNhc2VzIGZvdW5kIGluIHRoYXQgY2xhc3MuCi0gICAgICAyLiBJ
ZiBjYWxsZWQgd2l0aCBhIHNpbmdsZSBmdW5jdGlvbiBhcyBpdHMgb25seSBwb3NpdGlvbmFsIGFy
Z3VtZW50IGFuZAotICAgICAgICAgbm8gYWRkaXRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cywgaXQg
YXR0YWNoZXMgYSBNYXJrSW5mbyBvYmplY3QgdG8gdGhlCi0gICAgICAgICBmdW5jdGlvbiwgY29u
dGFpbmluZyBhbGwgdGhlIGFyZ3VtZW50cyBhbHJlYWR5IHN0b3JlZCBpbnRlcm5hbGx5IGluCi0g
ICAgICAgICB0aGUgTWFya0RlY29yYXRvci4KLSAgICAgIDMuIFdoZW4gY2FsbGVkIGluIGFueSBv
dGhlciBjYXNlLCBpdCBwZXJmb3JtcyBhICdmYWtlIGNvbnN0cnVjdGlvbicgY2FsbCwKLSAgICAg
ICAgIGkuZS4gaXQgcmV0dXJucyBhIG5ldyBNYXJrRGVjb3JhdG9yIGluc3RhbmNlIHdpdGggdGhl
IG9yaWdpbmFsCi0gICAgICAgICBNYXJrRGVjb3JhdG9yJ3MgY29udGVudCB1cGRhdGVkIHdpdGgg
dGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhpcwotICAgICAgICAgY2FsbC4KLQotICAgIE5vdGU6
IFRoZSBydWxlcyBhYm92ZSBwcmV2ZW50IE1hcmtEZWNvcmF0b3Igb2JqZWN0cyBmcm9tIHN0b3Jp
bmcgb25seSBhCi0gICAgc2luZ2xlIGZ1bmN0aW9uIG9yIGNsYXNzIHJlZmVyZW5jZSBhcyB0aGVp
ciBwb3NpdGlvbmFsIGFyZ3VtZW50IHdpdGggbm8KLSAgICBhZGRpdGlvbmFsIGtleXdvcmQgb3Ig
cG9zaXRpb25hbCBhcmd1bWVudHMuCi0KLSAgICAiIiIKLSAgICBkZWYgX19pbml0X18oc2VsZiwg
bmFtZSwgYXJncz1Ob25lLCBrd2FyZ3M9Tm9uZSk6Ci0gICAgICAgIHNlbGYubmFtZSA9IG5hbWUK
LSAgICAgICAgc2VsZi5hcmdzID0gYXJncyBvciAoKQotICAgICAgICBzZWxmLmt3YXJncyA9IGt3
YXJncyBvciB7fQotCi0gICAgQHByb3BlcnR5Ci0gICAgZGVmIG1hcmtuYW1lKHNlbGYpOgotICAg
ICAgICByZXR1cm4gc2VsZi5uYW1lICMgZm9yIGJhY2t3YXJkLWNvbXBhdCAoMi40LjEgaGFkIHRo
aXMgYXR0cikKLQotICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgZCA9IHNlbGYuX19k
aWN0X18uY29weSgpCi0gICAgICAgIG5hbWUgPSBkLnBvcCgnbmFtZScpCi0gICAgICAgIHJldHVy
biAiPE1hcmtEZWNvcmF0b3IgJXIgJXI+IiAlIChuYW1lLCBkKQotCi0gICAgZGVmIF9fY2FsbF9f
KHNlbGYsICphcmdzLCAqKmt3YXJncyk6Ci0gICAgICAgICIiIiBpZiBwYXNzZWQgYSBzaW5nbGUg
Y2FsbGFibGUgYXJndW1lbnQ6IGRlY29yYXRlIGl0IHdpdGggbWFyayBpbmZvLgotICAgICAgICAg
ICAgb3RoZXJ3aXNlIGFkZCAqYXJncy8qKmt3YXJncyBpbi1wbGFjZSB0byBtYXJrIGluZm9ybWF0
aW9uLiAiIiIKLSAgICAgICAgaWYgYXJncyBhbmQgbm90IGt3YXJnczoKLSAgICAgICAgICAgIGZ1
bmMgPSBhcmdzWzBdCi0gICAgICAgICAgICBpc19jbGFzcyA9IGluc3BlY3QuaXNjbGFzcyhmdW5j
KQotICAgICAgICAgICAgaWYgbGVuKGFyZ3MpID09IDEgYW5kIChpc3Rlc3RmdW5jKGZ1bmMpIG9y
IGlzX2NsYXNzKToKLSAgICAgICAgICAgICAgICBpZiBpc19jbGFzczoKLSAgICAgICAgICAgICAg
ICAgICAgaWYgaGFzYXR0cihmdW5jLCAncHl0ZXN0bWFyaycpOgotICAgICAgICAgICAgICAgICAg
ICAgICAgbWFya19saXN0ID0gZnVuYy5weXRlc3RtYXJrCi0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiBub3QgaXNpbnN0YW5jZShtYXJrX2xpc3QsIGxpc3QpOgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1hcmtfbGlzdCA9IFttYXJrX2xpc3RdCi0gICAgICAgICAgICAgICAgICAgICAg
ICAjIGFsd2F5cyB3b3JrIG9uIGEgY29weSB0byBhdm9pZCB1cGRhdGluZyBweXRlc3RtYXJrCi0g
ICAgICAgICAgICAgICAgICAgICAgICAjIGZyb20gYSBzdXBlcmNsYXNzIGJ5IGFjY2lkZW50Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBtYXJrX2xpc3QgPSBtYXJrX2xpc3QgKyBbc2VsZl0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIGZ1bmMucHl0ZXN0bWFyayA9IG1hcmtfbGlzdAotICAgICAg
ICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgZnVuYy5weXRlc3Rt
YXJrID0gW3NlbGZdCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAg
aG9sZGVyID0gZ2V0YXR0cihmdW5jLCBzZWxmLm5hbWUsIE5vbmUpCi0gICAgICAgICAgICAgICAg
ICAgIGlmIGhvbGRlciBpcyBOb25lOgotICAgICAgICAgICAgICAgICAgICAgICAgaG9sZGVyID0g
TWFya0luZm8oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5uYW1lLCBzZWxmLmFy
Z3MsIHNlbGYua3dhcmdzCi0gICAgICAgICAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICAg
ICAgICAgICAgICBzZXRhdHRyKGZ1bmMsIHNlbGYubmFtZSwgaG9sZGVyKQotICAgICAgICAgICAg
ICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgaG9sZGVyLmFkZChzZWxmLmFy
Z3MsIHNlbGYua3dhcmdzKQotICAgICAgICAgICAgICAgIHJldHVybiBmdW5jCi0gICAgICAgIGt3
ID0gc2VsZi5rd2FyZ3MuY29weSgpCi0gICAgICAgIGt3LnVwZGF0ZShrd2FyZ3MpCi0gICAgICAg
IGFyZ3MgPSBzZWxmLmFyZ3MgKyBhcmdzCi0gICAgICAgIHJldHVybiBzZWxmLl9fY2xhc3NfXyhz
ZWxmLm5hbWUsIGFyZ3M9YXJncywga3dhcmdzPWt3KQotCi0KLWNsYXNzIE1hcmtJbmZvOgotICAg
ICIiIiBNYXJraW5nIG9iamVjdCBjcmVhdGVkIGJ5IDpjbGFzczpgTWFya0RlY29yYXRvcmAgaW5z
dGFuY2VzLiAiIiIKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgYXJncywga3dhcmdzKToK
LSAgICAgICAgIzogbmFtZSBvZiBhdHRyaWJ1dGUKLSAgICAgICAgc2VsZi5uYW1lID0gbmFtZQot
ICAgICAgICAjOiBwb3NpdGlvbmFsIGFyZ3VtZW50IGxpc3QsIGVtcHR5IGlmIG5vbmUgc3BlY2lm
aWVkCi0gICAgICAgIHNlbGYuYXJncyA9IGFyZ3MKLSAgICAgICAgIzoga2V5d29yZCBhcmd1bWVu
dCBkaWN0aW9uYXJ5LCBlbXB0eSBpZiBub3RoaW5nIHNwZWNpZmllZAotICAgICAgICBzZWxmLmt3
YXJncyA9IGt3YXJncy5jb3B5KCkKLSAgICAgICAgc2VsZi5fYXJnbGlzdCA9IFsoYXJncywga3dh
cmdzLmNvcHkoKSldCi0KLSAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIHJldHVybiAi
PE1hcmtJbmZvICVyIGFyZ3M9JXIga3dhcmdzPSVyPiIgJSAoCi0gICAgICAgICAgICBzZWxmLm5h
bWUsIHNlbGYuYXJncywgc2VsZi5rd2FyZ3MKLSAgICAgICAgKQotCi0gICAgZGVmIGFkZChzZWxm
LCBhcmdzLCBrd2FyZ3MpOgotICAgICAgICAiIiIgYWRkIGEgTWFya0luZm8gd2l0aCB0aGUgZ2l2
ZW4gYXJncyBhbmQga3dhcmdzLiAiIiIKLSAgICAgICAgc2VsZi5fYXJnbGlzdC5hcHBlbmQoKGFy
Z3MsIGt3YXJncykpCi0gICAgICAgIHNlbGYuYXJncyArPSBhcmdzCi0gICAgICAgIHNlbGYua3dh
cmdzLnVwZGF0ZShrd2FyZ3MpCi0KLSAgICBkZWYgX19pdGVyX18oc2VsZik6Ci0gICAgICAgICIi
IiB5aWVsZCBNYXJrSW5mbyBvYmplY3RzIGVhY2ggcmVsYXRpbmcgdG8gYSBtYXJraW5nLWNhbGwu
ICIiIgotICAgICAgICBmb3IgYXJncywga3dhcmdzIGluIHNlbGYuX2FyZ2xpc3Q6Ci0gICAgICAg
ICAgICB5aWVsZCBNYXJrSW5mbyhzZWxmLm5hbWUsIGFyZ3MsIGt3YXJncykKZGlmZiAtLWdpdCBh
L1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9tb25rZXlw
YXRjaC5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVz
dC9tb25rZXlwYXRjaC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDRjMTY5ZDM3
YTkuLjAwMDAwMDAwMDAwCi0tLSBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9w
eXRlc3QvX3B5dGVzdC9tb25rZXlwYXRjaC5weQorKysgL2Rldi9udWxsCkBAIC0xLDI1NCArMCww
IEBACi0iIiIgbW9ua2V5cGF0Y2hpbmcgYW5kIG1vY2tpbmcgZnVuY3Rpb25hbGl0eS4gICIiIgot
Ci1pbXBvcnQgb3MsIHN5cwotaW1wb3J0IHJlCi0KLWZyb20gcHkuYnVpbHRpbiBpbXBvcnQgX2Jh
c2VzdHJpbmcKLQotUkVfSU1QT1JUX0VSUk9SX05BTUUgPSByZS5jb21waWxlKCJeTm8gbW9kdWxl
IG5hbWVkICguKikkIikKLQotCi1kZWYgcHl0ZXN0X2Z1bmNhcmdfX21vbmtleXBhdGNoKHJlcXVl
c3QpOgotICAgICIiIlRoZSByZXR1cm5lZCBgYG1vbmtleXBhdGNoYGAgZnVuY2FyZyBwcm92aWRl
cyB0aGVzZQotICAgIGhlbHBlciBtZXRob2RzIHRvIG1vZGlmeSBvYmplY3RzLCBkaWN0aW9uYXJp
ZXMgb3Igb3MuZW52aXJvbjo6Ci0KLSAgICAgICAgbW9ua2V5cGF0Y2guc2V0YXR0cihvYmosIG5h
bWUsIHZhbHVlLCByYWlzaW5nPVRydWUpCi0gICAgICAgIG1vbmtleXBhdGNoLmRlbGF0dHIob2Jq
LCBuYW1lLCByYWlzaW5nPVRydWUpCi0gICAgICAgIG1vbmtleXBhdGNoLnNldGl0ZW0obWFwcGlu
ZywgbmFtZSwgdmFsdWUpCi0gICAgICAgIG1vbmtleXBhdGNoLmRlbGl0ZW0ob2JqLCBuYW1lLCBy
YWlzaW5nPVRydWUpCi0gICAgICAgIG1vbmtleXBhdGNoLnNldGVudihuYW1lLCB2YWx1ZSwgcHJl
cGVuZD1GYWxzZSkKLSAgICAgICAgbW9ua2V5cGF0Y2guZGVsZW52KG5hbWUsIHZhbHVlLCByYWlz
aW5nPVRydWUpCi0gICAgICAgIG1vbmtleXBhdGNoLnN5c3BhdGhfcHJlcGVuZChwYXRoKQotICAg
ICAgICBtb25rZXlwYXRjaC5jaGRpcihwYXRoKQotCi0gICAgQWxsIG1vZGlmaWNhdGlvbnMgd2ls
bCBiZSB1bmRvbmUgYWZ0ZXIgdGhlIHJlcXVlc3RpbmcKLSAgICB0ZXN0IGZ1bmN0aW9uIGhhcyBm
aW5pc2hlZC4gVGhlIGBgcmFpc2luZ2BgCi0gICAgcGFyYW1ldGVyIGRldGVybWluZXMgaWYgYSBL
ZXlFcnJvciBvciBBdHRyaWJ1dGVFcnJvcgotICAgIHdpbGwgYmUgcmFpc2VkIGlmIHRoZSBzZXQv
ZGVsZXRpb24gb3BlcmF0aW9uIGhhcyBubyB0YXJnZXQuCi0gICAgIiIiCi0gICAgbXBhdGNoID0g
bW9ua2V5cGF0Y2goKQotICAgIHJlcXVlc3QuYWRkZmluYWxpemVyKG1wYXRjaC51bmRvKQotICAg
IHJldHVybiBtcGF0Y2gKLQotCi1kZWYgcmVzb2x2ZShuYW1lKToKLSAgICAjIHNpbXBsaWZpZWQg
ZnJvbSB6b3BlLmRvdHRlZG5hbWUKLSAgICBwYXJ0cyA9IG5hbWUuc3BsaXQoJy4nKQotCi0gICAg
dXNlZCA9IHBhcnRzLnBvcCgwKQotICAgIGZvdW5kID0gX19pbXBvcnRfXyh1c2VkKQotICAgIGZv
ciBwYXJ0IGluIHBhcnRzOgotICAgICAgICB1c2VkICs9ICcuJyArIHBhcnQKLSAgICAgICAgdHJ5
OgotICAgICAgICAgICAgZm91bmQgPSBnZXRhdHRyKGZvdW5kLCBwYXJ0KQotICAgICAgICBleGNl
cHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGVsc2U6Ci0gICAg
ICAgICAgICBjb250aW51ZQotICAgICAgICAjIHdlIHVzZSBleHBsaWNpdCB1bi1uZXN0aW5nIG9m
IHRoZSBoYW5kbGluZyBibG9jayBpbiBvcmRlcgotICAgICAgICAjIHRvIGF2b2lkIG5lc3RlZCBl
eGNlcHRpb25zIG9uIHB5dGhvbiAzCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIF9faW1wb3J0
X18odXNlZCkKLSAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yIGFzIGV4OgotICAgICAgICAgICAg
IyBzdHIgaXMgdXNlZCBmb3IgcHkyIHZzIHB5MwotICAgICAgICAgICAgZXhwZWN0ZWQgPSBzdHIo
ZXgpLnNwbGl0KClbLTFdCi0gICAgICAgICAgICBpZiBleHBlY3RlZCA9PSB1c2VkOgotICAgICAg
ICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJhaXNl
IEltcG9ydEVycm9yKAotICAgICAgICAgICAgICAgICAgICAnaW1wb3J0IGVycm9yIGluICVzOiAl
cycgJSAodXNlZCwgZXgpCi0gICAgICAgICAgICAgICAgKQotICAgICAgICBmb3VuZCA9IGFubm90
YXRlZF9nZXRhdHRyKGZvdW5kLCBwYXJ0LCB1c2VkKQotICAgIHJldHVybiBmb3VuZAotCi0KLWRl
ZiBhbm5vdGF0ZWRfZ2V0YXR0cihvYmosIG5hbWUsIGFubik6Ci0gICAgdHJ5OgotICAgICAgICBv
YmogPSBnZXRhdHRyKG9iaiwgbmFtZSkKLSAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAg
ICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKAotICAgICAgICAgICAgICAgICclciBvYmplY3QgYXQg
JXMgaGFzIG5vIGF0dHJpYnV0ZSAlcicgJSAoCi0gICAgICAgICAgICAgICAgICAgIHR5cGUob2Jq
KS5fX25hbWVfXywgYW5uLCBuYW1lCi0gICAgICAgICAgICAgICAgKQotICAgICAgICApCi0gICAg
cmV0dXJuIG9iagotCi0KLWRlZiBkZXJpdmVfaW1wb3J0cGF0aChpbXBvcnRfcGF0aCwgcmFpc2lu
Zyk6Ci0gICAgaWYgbm90IGlzaW5zdGFuY2UoaW1wb3J0X3BhdGgsIF9iYXNlc3RyaW5nKSBvciAi
LiIgbm90IGluIGltcG9ydF9wYXRoOgotICAgICAgICByYWlzZSBUeXBlRXJyb3IoIm11c3QgYmUg
YWJzb2x1dGUgaW1wb3J0IHBhdGggc3RyaW5nLCBub3QgJXIiICUKLSAgICAgICAgICAgICAgICAg
ICAgICAgIChpbXBvcnRfcGF0aCwpKQotICAgIG1vZHVsZSwgYXR0ciA9IGltcG9ydF9wYXRoLnJz
cGxpdCgnLicsIDEpCi0gICAgdGFyZ2V0ID0gcmVzb2x2ZShtb2R1bGUpCi0gICAgaWYgcmFpc2lu
ZzoKLSAgICAgICAgYW5ub3RhdGVkX2dldGF0dHIodGFyZ2V0LCBhdHRyLCBhbm49bW9kdWxlKQot
ICAgIHJldHVybiBhdHRyLCB0YXJnZXQKLQotCi1jbGFzcyBOb3RzZXQ6Ci0gICAgZGVmIF9fcmVw
cl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gIjxub3RzZXQ+IgotCi0KLW5vdHNldCA9IE5vdHNl
dCgpCi0KLQotY2xhc3MgbW9ua2V5cGF0Y2g6Ci0gICAgIiIiIE9iamVjdCBrZWVwaW5nIGEgcmVj
b3JkIG9mIHNldGF0dHIvaXRlbS9lbnYvc3lzcGF0aCBjaGFuZ2VzLiAiIiIKLQotICAgIGRlZiBf
X2luaXRfXyhzZWxmKToKLSAgICAgICAgc2VsZi5fc2V0YXR0ciA9IFtdCi0gICAgICAgIHNlbGYu
X3NldGl0ZW0gPSBbXQotICAgICAgICBzZWxmLl9jd2QgPSBOb25lCi0gICAgICAgIHNlbGYuX3Nh
dmVzeXNwYXRoID0gTm9uZQotCi0gICAgZGVmIHNldGF0dHIoc2VsZiwgdGFyZ2V0LCBuYW1lLCB2
YWx1ZT1ub3RzZXQsIHJhaXNpbmc9VHJ1ZSk6Ci0gICAgICAgICIiIiBTZXQgYXR0cmlidXRlIHZh
bHVlIG9uIHRhcmdldCwgbWVtb3JpemluZyB0aGUgb2xkIHZhbHVlLgotICAgICAgICBCeSBkZWZh
dWx0IHJhaXNlIEF0dHJpYnV0ZUVycm9yIGlmIHRoZSBhdHRyaWJ1dGUgZGlkIG5vdCBleGlzdC4K
LQotICAgICAgICBGb3IgY29udmVuaWVuY2UgeW91IGNhbiBzcGVjaWZ5IGEgc3RyaW5nIGFzIGBg
dGFyZ2V0YGAgd2hpY2gKLSAgICAgICAgd2lsbCBiZSBpbnRlcnByZXRlZCBhcyBhIGRvdHRlZCBp
bXBvcnQgcGF0aCwgd2l0aCB0aGUgbGFzdCBwYXJ0Ci0gICAgICAgIGJlaW5nIHRoZSBhdHRyaWJ1
dGUgbmFtZS4gIEV4YW1wbGU6Ci0gICAgICAgIGBgbW9ua2V5cGF0Y2guc2V0YXR0cigib3MuZ2V0
Y3dkIiwgbGFtYmRhIHg6ICIvIilgYAotICAgICAgICB3b3VsZCBzZXQgdGhlIGBgZ2V0Y3dkYGAg
ZnVuY3Rpb24gb2YgdGhlIGBgb3NgYCBtb2R1bGUuCi0KLSAgICAgICAgVGhlIGBgcmFpc2luZ2Bg
IHZhbHVlIGRldGVybWluZXMgaWYgdGhlIHNldGF0dHIgc2hvdWxkIGZhaWwKLSAgICAgICAgaWYg
dGhlIGF0dHJpYnV0ZSBpcyBub3QgYWxyZWFkeSBwcmVzZW50IChkZWZhdWx0cyB0byBUcnVlCi0g
ICAgICAgIHdoaWNoIG1lYW5zIGl0IHdpbGwgcmFpc2UpLgotICAgICAgICAiIiIKLSAgICAgICAg
X190cmFjZWJhY2toaWRlX18gPSBUcnVlCi0gICAgICAgIGltcG9ydCBpbnNwZWN0Ci0KLSAgICAg
ICAgaWYgdmFsdWUgaXMgbm90c2V0OgotICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UodGFy
Z2V0LCBfYmFzZXN0cmluZyk6Ci0gICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJ1c2Ug
c2V0YXR0cih0YXJnZXQsIG5hbWUsIHZhbHVlKSBvciAiCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJzZXRhdHRyKHRhcmdldCwgdmFsdWUpIHdpdGggdGFyZ2V0IGJlaW5nIGEgZG90
dGVkICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltcG9ydCBzdHJpbmciKQot
ICAgICAgICAgICAgdmFsdWUgPSBuYW1lCi0gICAgICAgICAgICBuYW1lLCB0YXJnZXQgPSBkZXJp
dmVfaW1wb3J0cGF0aCh0YXJnZXQsIHJhaXNpbmcpCi0KLSAgICAgICAgb2xkdmFsID0gZ2V0YXR0
cih0YXJnZXQsIG5hbWUsIG5vdHNldCkKLSAgICAgICAgaWYgcmFpc2luZyBhbmQgb2xkdmFsIGlz
IG5vdHNldDoKLSAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCIlciBoYXMgbm8gYXR0
cmlidXRlICVyIiAlICh0YXJnZXQsIG5hbWUpKQotCi0gICAgICAgICMgYXZvaWQgY2xhc3MgZGVz
Y3JpcHRvcnMgbGlrZSBzdGF0aWNtZXRob2QvY2xhc3NtZXRob2QKLSAgICAgICAgaWYgaW5zcGVj
dC5pc2NsYXNzKHRhcmdldCk6Ci0gICAgICAgICAgICBvbGR2YWwgPSB0YXJnZXQuX19kaWN0X18u
Z2V0KG5hbWUsIG5vdHNldCkKLSAgICAgICAgc2VsZi5fc2V0YXR0ci5hcHBlbmQoKHRhcmdldCwg
bmFtZSwgb2xkdmFsKSkKLSAgICAgICAgc2V0YXR0cih0YXJnZXQsIG5hbWUsIHZhbHVlKQotCi0g
ICAgZGVmIGRlbGF0dHIoc2VsZiwgdGFyZ2V0LCBuYW1lPW5vdHNldCwgcmFpc2luZz1UcnVlKToK
LSAgICAgICAgIiIiIERlbGV0ZSBhdHRyaWJ1dGUgYGBuYW1lYGAgZnJvbSBgYHRhcmdldGBgLCBi
eSBkZWZhdWx0IHJhaXNlCi0gICAgICAgIEF0dHJpYnV0ZUVycm9yIGl0IHRoZSBhdHRyaWJ1dGUg
ZGlkIG5vdCBwcmV2aW91c2x5IGV4aXN0LgotCi0gICAgICAgIElmIG5vIGBgbmFtZWBgIGlzIHNw
ZWNpZmllZCBhbmQgYGB0YXJnZXRgYCBpcyBhIHN0cmluZwotICAgICAgICBpdCB3aWxsIGJlIGlu
dGVycHJldGVkIGFzIGEgZG90dGVkIGltcG9ydCBwYXRoIHdpdGggdGhlCi0gICAgICAgIGxhc3Qg
cGFydCBiZWluZyB0aGUgYXR0cmlidXRlIG5hbWUuCi0KLSAgICAgICAgSWYgYGByYWlzaW5nYGAg
aXMgc2V0IHRvIEZhbHNlLCBubyBleGNlcHRpb24gd2lsbCBiZSByYWlzZWQgaWYgdGhlCi0gICAg
ICAgIGF0dHJpYnV0ZSBpcyBtaXNzaW5nLgotICAgICAgICAiIiIKLSAgICAgICAgX190cmFjZWJh
Y2toaWRlX18gPSBUcnVlCi0gICAgICAgIGlmIG5hbWUgaXMgbm90c2V0OgotICAgICAgICAgICAg
aWYgbm90IGlzaW5zdGFuY2UodGFyZ2V0LCBfYmFzZXN0cmluZyk6Ci0gICAgICAgICAgICAgICAg
cmFpc2UgVHlwZUVycm9yKCJ1c2UgZGVsYXR0cih0YXJnZXQsIG5hbWUpIG9yICIKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgImRlbGF0dHIodGFyZ2V0KSB3aXRoIHRhcmdldCBiZWlu
ZyBhIGRvdHRlZCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbXBvcnQgc3Ry
aW5nIikKLSAgICAgICAgICAgIG5hbWUsIHRhcmdldCA9IGRlcml2ZV9pbXBvcnRwYXRoKHRhcmdl
dCwgcmFpc2luZykKLQotICAgICAgICBpZiBub3QgaGFzYXR0cih0YXJnZXQsIG5hbWUpOgotICAg
ICAgICAgICAgaWYgcmFpc2luZzoKLSAgICAgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJv
cihuYW1lKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5fc2V0YXR0ci5hcHBlbmQo
KHRhcmdldCwgbmFtZSwgZ2V0YXR0cih0YXJnZXQsIG5hbWUsIG5vdHNldCkpKQotICAgICAgICAg
ICAgZGVsYXR0cih0YXJnZXQsIG5hbWUpCi0KLSAgICBkZWYgc2V0aXRlbShzZWxmLCBkaWMsIG5h
bWUsIHZhbHVlKToKLSAgICAgICAgIiIiIFNldCBkaWN0aW9uYXJ5IGVudHJ5IGBgbmFtZWBgIHRv
IHZhbHVlLiAiIiIKLSAgICAgICAgc2VsZi5fc2V0aXRlbS5hcHBlbmQoKGRpYywgbmFtZSwgZGlj
LmdldChuYW1lLCBub3RzZXQpKSkKLSAgICAgICAgZGljW25hbWVdID0gdmFsdWUKLQotICAgIGRl
ZiBkZWxpdGVtKHNlbGYsIGRpYywgbmFtZSwgcmFpc2luZz1UcnVlKToKLSAgICAgICAgIiIiIERl
bGV0ZSBgYG5hbWVgYCBmcm9tIGRpY3QuIFJhaXNlIEtleUVycm9yIGlmIGl0IGRvZXNuJ3QgZXhp
c3QuCi0KLSAgICAgICAgSWYgYGByYWlzaW5nYGAgaXMgc2V0IHRvIEZhbHNlLCBubyBleGNlcHRp
b24gd2lsbCBiZSByYWlzZWQgaWYgdGhlCi0gICAgICAgIGtleSBpcyBtaXNzaW5nLgotICAgICAg
ICAiIiIKLSAgICAgICAgaWYgbmFtZSBub3QgaW4gZGljOgotICAgICAgICAgICAgaWYgcmFpc2lu
ZzoKLSAgICAgICAgICAgICAgICByYWlzZSBLZXlFcnJvcihuYW1lKQotICAgICAgICBlbHNlOgot
ICAgICAgICAgICAgc2VsZi5fc2V0aXRlbS5hcHBlbmQoKGRpYywgbmFtZSwgZGljLmdldChuYW1l
LCBub3RzZXQpKSkKLSAgICAgICAgICAgIGRlbCBkaWNbbmFtZV0KLQotICAgIGRlZiBzZXRlbnYo
c2VsZiwgbmFtZSwgdmFsdWUsIHByZXBlbmQ9Tm9uZSk6Ci0gICAgICAgICIiIiBTZXQgZW52aXJv
bm1lbnQgdmFyaWFibGUgYGBuYW1lYGAgdG8gYGB2YWx1ZWBgLiAgSWYgYGBwcmVwZW5kYGAKLSAg
ICAgICAgaXMgYSBjaGFyYWN0ZXIsIHJlYWQgdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQgdmFyaWFi
bGUgdmFsdWUKLSAgICAgICAgYW5kIHByZXBlbmQgdGhlIGBgdmFsdWVgYCBhZGpvaW5lZCB3aXRo
IHRoZSBgYHByZXBlbmRgYCBjaGFyYWN0ZXIuIiIiCi0gICAgICAgIHZhbHVlID0gc3RyKHZhbHVl
KQotICAgICAgICBpZiBwcmVwZW5kIGFuZCBuYW1lIGluIG9zLmVudmlyb246Ci0gICAgICAgICAg
ICB2YWx1ZSA9IHZhbHVlICsgcHJlcGVuZCArIG9zLmVudmlyb25bbmFtZV0KLSAgICAgICAgc2Vs
Zi5zZXRpdGVtKG9zLmVudmlyb24sIG5hbWUsIHZhbHVlKQotCi0gICAgZGVmIGRlbGVudihzZWxm
LCBuYW1lLCByYWlzaW5nPVRydWUpOgotICAgICAgICAiIiIgRGVsZXRlIGBgbmFtZWBgIGZyb20g
dGhlIGVudmlyb25tZW50LiBSYWlzZSBLZXlFcnJvciBpdCBkb2VzIG5vdAotICAgICAgICBleGlz
dC4KLQotICAgICAgICBJZiBgYHJhaXNpbmdgYCBpcyBzZXQgdG8gRmFsc2UsIG5vIGV4Y2VwdGlv
biB3aWxsIGJlIHJhaXNlZCBpZiB0aGUKLSAgICAgICAgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMg
bWlzc2luZy4KLSAgICAgICAgIiIiCi0gICAgICAgIHNlbGYuZGVsaXRlbShvcy5lbnZpcm9uLCBu
YW1lLCByYWlzaW5nPXJhaXNpbmcpCi0KLSAgICBkZWYgc3lzcGF0aF9wcmVwZW5kKHNlbGYsIHBh
dGgpOgotICAgICAgICAiIiIgUHJlcGVuZCBgYHBhdGhgYCB0byBgYHN5cy5wYXRoYGAgbGlzdCBv
ZiBpbXBvcnQgbG9jYXRpb25zLiAiIiIKLSAgICAgICAgaWYgc2VsZi5fc2F2ZXN5c3BhdGggaXMg
Tm9uZToKLSAgICAgICAgICAgIHNlbGYuX3NhdmVzeXNwYXRoID0gc3lzLnBhdGhbOl0KLSAgICAg
ICAgc3lzLnBhdGguaW5zZXJ0KDAsIHN0cihwYXRoKSkKLQotICAgIGRlZiBjaGRpcihzZWxmLCBw
YXRoKToKLSAgICAgICAgIiIiIENoYW5nZSB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSB0
byB0aGUgc3BlY2lmaWVkIHBhdGguCi0gICAgICAgIFBhdGggY2FuIGJlIGEgc3RyaW5nIG9yIGEg
cHkucGF0aC5sb2NhbCBvYmplY3QuCi0gICAgICAgICIiIgotICAgICAgICBpZiBzZWxmLl9jd2Qg
aXMgTm9uZToKLSAgICAgICAgICAgIHNlbGYuX2N3ZCA9IG9zLmdldGN3ZCgpCi0gICAgICAgIGlm
IGhhc2F0dHIocGF0aCwgImNoZGlyIik6Ci0gICAgICAgICAgICBwYXRoLmNoZGlyKCkKLSAgICAg
ICAgZWxzZToKLSAgICAgICAgICAgIG9zLmNoZGlyKHBhdGgpCi0KLSAgICBkZWYgdW5kbyhzZWxm
KToKLSAgICAgICAgIiIiIFVuZG8gcHJldmlvdXMgY2hhbmdlcy4gIFRoaXMgY2FsbCBjb25zdW1l
cyB0aGUKLSAgICAgICAgdW5kbyBzdGFjay4gQ2FsbGluZyBpdCBhIHNlY29uZCB0aW1lIGhhcyBu
byBlZmZlY3QgdW5sZXNzCi0gICAgICAgIHlvdSBkbyBtb3JlIG1vbmtleXBhdGNoaW5nIGFmdGVy
IHRoZSB1bmRvIGNhbGwuCi0gICAgICAgIAotICAgICAgICBUaGVyZSBpcyBnZW5lcmFsbHkgbm8g
bmVlZCB0byBjYWxsIGB1bmRvKClgLCBzaW5jZSBpdCBpcwotICAgICAgICBjYWxsZWQgYXV0b21h
dGljYWxseSBkdXJpbmcgdGVhci1kb3duLgotICAgICAgICAKLSAgICAgICAgTm90ZSB0aGF0IHRo
ZSBzYW1lIGBtb25rZXlwYXRjaGAgZml4dHVyZSBpcyB1c2VkIGFjcm9zcyBhCi0gICAgICAgIHNp
bmdsZSB0ZXN0IGZ1bmN0aW9uIGludm9jYXRpb24uIElmIGBtb25rZXlwYXRjaGAgaXMgdXNlZCBi
b3RoIGJ5Ci0gICAgICAgIHRoZSB0ZXN0IGZ1bmN0aW9uIGl0c2VsZiBhbmQgb25lIG9mIHRoZSB0
ZXN0IGZpeHR1cmVzLAotICAgICAgICBjYWxsaW5nIGB1bmRvKClgIHdpbGwgdW5kbyBhbGwgb2Yg
dGhlIGNoYW5nZXMgbWFkZSBpbgotICAgICAgICBib3RoIGZ1bmN0aW9ucy4KLSAgICAgICAgIiIi
Ci0gICAgICAgIGZvciBvYmosIG5hbWUsIHZhbHVlIGluIHJldmVyc2VkKHNlbGYuX3NldGF0dHIp
OgotICAgICAgICAgICAgaWYgdmFsdWUgaXMgbm90IG5vdHNldDoKLSAgICAgICAgICAgICAgICBz
ZXRhdHRyKG9iaiwgbmFtZSwgdmFsdWUpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAg
ICAgIGRlbGF0dHIob2JqLCBuYW1lKQotICAgICAgICBzZWxmLl9zZXRhdHRyWzpdID0gW10KLSAg
ICAgICAgZm9yIGRpY3Rpb25hcnksIG5hbWUsIHZhbHVlIGluIHJldmVyc2VkKHNlbGYuX3NldGl0
ZW0pOgotICAgICAgICAgICAgaWYgdmFsdWUgaXMgbm90c2V0OgotICAgICAgICAgICAgICAgIHRy
eToKLSAgICAgICAgICAgICAgICAgICAgZGVsIGRpY3Rpb25hcnlbbmFtZV0KLSAgICAgICAgICAg
ICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIHBhc3MgICMgd2FzIGFs
cmVhZHkgZGVsZXRlZCwgc28gd2UgaGF2ZSB0aGUgZGVzaXJlZCBzdGF0ZQotICAgICAgICAgICAg
ZWxzZToKLSAgICAgICAgICAgICAgICBkaWN0aW9uYXJ5W25hbWVdID0gdmFsdWUKLSAgICAgICAg
c2VsZi5fc2V0aXRlbVs6XSA9IFtdCi0gICAgICAgIGlmIHNlbGYuX3NhdmVzeXNwYXRoIGlzIG5v
dCBOb25lOgotICAgICAgICAgICAgc3lzLnBhdGhbOl0gPSBzZWxmLl9zYXZlc3lzcGF0aAotICAg
ICAgICAgICAgc2VsZi5fc2F2ZXN5c3BhdGggPSBOb25lCi0KLSAgICAgICAgaWYgc2VsZi5fY3dk
IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgb3MuY2hkaXIoc2VsZi5fY3dkKQotICAgICAgICAg
ICAgc2VsZi5fY3dkID0gTm9uZQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQv
dzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L25vc2UucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRl
ZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3Qvbm9zZS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDM4NzQ2ODY4NjAuLjAwMDAwMDAwMDAwCi0tLSBhL1dlYkRyaXZlclRlc3RzL2lt
cG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9ub3NlLnB5CisrKyAvZGV2L251bGwKQEAg
LTEsNzEgKzAsMCBAQAotIiIiIHJ1biB0ZXN0IHN1aXRlcyB3cml0dGVuIGZvciBub3NlLiAiIiIK
LQotaW1wb3J0IHN5cwotCi1pbXBvcnQgcHkKLWltcG9ydCBweXRlc3QKLWZyb20gX3B5dGVzdCBp
bXBvcnQgdW5pdHRlc3QKLQotCi1kZWYgZ2V0X3NraXBfZXhjZXB0aW9ucygpOgotICAgIHNraXBf
Y2xhc3NlcyA9IHNldCgpCi0gICAgZm9yIG1vZHVsZV9uYW1lIGluICgndW5pdHRlc3QnLCAndW5p
dHRlc3QyJywgJ25vc2UnKToKLSAgICAgICAgbW9kID0gc3lzLm1vZHVsZXMuZ2V0KG1vZHVsZV9u
YW1lKQotICAgICAgICBpZiBoYXNhdHRyKG1vZCwgJ1NraXBUZXN0Jyk6Ci0gICAgICAgICAgICBz
a2lwX2NsYXNzZXMuYWRkKG1vZC5Ta2lwVGVzdCkKLSAgICByZXR1cm4gdHVwbGUoc2tpcF9jbGFz
c2VzKQotCi0KLWRlZiBweXRlc3RfcnVudGVzdF9tYWtlcmVwb3J0KGl0ZW0sIGNhbGwpOgotICAg
IGlmIGNhbGwuZXhjaW5mbyBhbmQgY2FsbC5leGNpbmZvLmVycmlzaW5zdGFuY2UoZ2V0X3NraXBf
ZXhjZXB0aW9ucygpKToKLSAgICAgICAgIyBsZXQncyBzdWJzdGl0dXRlIHRoZSBleGNpbmZvIHdp
dGggYSBweXRlc3Quc2tpcCBvbmUKLSAgICAgICAgY2FsbDIgPSBjYWxsLl9fY2xhc3NfXyhsYW1i
ZGE6Ci0gICAgICAgICAgICAgICAgICAgIHB5dGVzdC5za2lwKHN0cihjYWxsLmV4Y2luZm8udmFs
dWUpKSwgY2FsbC53aGVuKQotICAgICAgICBjYWxsLmV4Y2luZm8gPSBjYWxsMi5leGNpbmZvCi0K
LQotQHB5dGVzdC5ob29raW1wbCh0cnlsYXN0PVRydWUpCi1kZWYgcHl0ZXN0X3J1bnRlc3Rfc2V0
dXAoaXRlbSk6Ci0gICAgaWYgaXNfcG90ZW50aWFsX25vc2V0ZXN0KGl0ZW0pOgotICAgICAgICBp
ZiBpc2luc3RhbmNlKGl0ZW0ucGFyZW50LCBweXRlc3QuR2VuZXJhdG9yKToKLSAgICAgICAgICAg
IGdlbiA9IGl0ZW0ucGFyZW50Ci0gICAgICAgICAgICBpZiBub3QgaGFzYXR0cihnZW4sICdfbm9z
ZWdlbnNldHVwJyk6Ci0gICAgICAgICAgICAgICAgY2FsbF9vcHRpb25hbChnZW4ub2JqLCAnc2V0
dXAnKQotICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZ2VuLnBhcmVudCwgcHl0ZXN0Lklu
c3RhbmNlKToKLSAgICAgICAgICAgICAgICAgICAgY2FsbF9vcHRpb25hbChnZW4ucGFyZW50Lm9i
aiwgJ3NldHVwJykKLSAgICAgICAgICAgICAgICBnZW4uX25vc2VnZW5zZXR1cCA9IFRydWUKLSAg
ICAgICAgaWYgbm90IGNhbGxfb3B0aW9uYWwoaXRlbS5vYmosICdzZXR1cCcpOgotICAgICAgICAg
ICAgIyBjYWxsIG1vZHVsZSBsZXZlbCBzZXR1cCBpZiB0aGVyZSBpcyBubyBvYmplY3QgbGV2ZWwg
b25lCi0gICAgICAgICAgICBjYWxsX29wdGlvbmFsKGl0ZW0ucGFyZW50Lm9iaiwgJ3NldHVwJykK
LSAgICAgICAgI1hYWCB0aGlzIGltcGxpZXMgd2Ugb25seSBjYWxsIHRlYXJkb3duIHdoZW4gc2V0
dXAgd29ya2VkCi0gICAgICAgIGl0ZW0uc2Vzc2lvbi5fc2V0dXBzdGF0ZS5hZGRmaW5hbGl6ZXIo
KGxhbWJkYTogdGVhcmRvd25fbm9zZShpdGVtKSksIGl0ZW0pCi0KLWRlZiB0ZWFyZG93bl9ub3Nl
KGl0ZW0pOgotICAgIGlmIGlzX3BvdGVudGlhbF9ub3NldGVzdChpdGVtKToKLSAgICAgICAgaWYg
bm90IGNhbGxfb3B0aW9uYWwoaXRlbS5vYmosICd0ZWFyZG93bicpOgotICAgICAgICAgICAgY2Fs
bF9vcHRpb25hbChpdGVtLnBhcmVudC5vYmosICd0ZWFyZG93bicpCi0gICAgICAgICNpZiBoYXNh
dHRyKGl0ZW0ucGFyZW50LCAnX25vc2VnZW5zZXR1cCcpOgotICAgICAgICAjICAgICNjYWxsX29w
dGlvbmFsKGl0ZW0uX25vc2VnZW5zZXR1cCwgJ3RlYXJkb3duJykKLSAgICAgICAgIyAgICBkZWwg
aXRlbS5wYXJlbnQuX25vc2VnZW5zZXR1cAotCi0KLWRlZiBweXRlc3RfbWFrZV9jb2xsZWN0X3Jl
cG9ydChjb2xsZWN0b3IpOgotICAgIGlmIGlzaW5zdGFuY2UoY29sbGVjdG9yLCBweXRlc3QuR2Vu
ZXJhdG9yKToKLSAgICAgICAgY2FsbF9vcHRpb25hbChjb2xsZWN0b3Iub2JqLCAnc2V0dXAnKQot
Ci0KLWRlZiBpc19wb3RlbnRpYWxfbm9zZXRlc3QoaXRlbSk6Ci0gICAgIyBleHRyYSBjaGVjayBu
ZWVkZWQgc2luY2Ugd2UgZG8gbm90IGRvIG5vc2Ugc3R5bGUgc2V0dXAvdGVhcmRvd24KLSAgICAj
IG9uIGRpcmVjdCB1bml0dGVzdCBzdHlsZSBjbGFzc2VzCi0gICAgcmV0dXJuIGlzaW5zdGFuY2Uo
aXRlbSwgcHl0ZXN0LkZ1bmN0aW9uKSBhbmQgXAotICAgICAgICBub3QgaXNpbnN0YW5jZShpdGVt
LCB1bml0dGVzdC5UZXN0Q2FzZUZ1bmN0aW9uKQotCi0KLWRlZiBjYWxsX29wdGlvbmFsKG9iaiwg
bmFtZSk6Ci0gICAgbWV0aG9kID0gZ2V0YXR0cihvYmosIG5hbWUsIE5vbmUpCi0gICAgaXNmaXh0
dXJlID0gaGFzYXR0cihtZXRob2QsICJfcHl0ZXN0Zml4dHVyZWZ1bmN0aW9uIikKLSAgICBpZiBt
ZXRob2QgaXMgbm90IE5vbmUgYW5kIG5vdCBpc2ZpeHR1cmUgYW5kIHB5LmJ1aWx0aW4uY2FsbGFi
bGUobWV0aG9kKToKLSAgICAgICAgIyBJZiB0aGVyZSdzIGFueSBwcm9ibGVtcyBhbGxvdyB0aGUg
ZXhjZXB0aW9uIHRvIHJhaXNlIHJhdGhlciB0aGFuCi0gICAgICAgICMgc2lsZW50bHkgaWdub3Jp
bmcgdGhlbQotICAgICAgICBtZXRob2QoKQotICAgICAgICByZXR1cm4gVHJ1ZQpkaWZmIC0tZ2l0
IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L3Bhc3Rl
YmluLnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0
L3Bhc3RlYmluLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZWM2MmQwMjI4MC4u
MDAwMDAwMDAwMDAKLS0tIGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVz
dC9fcHl0ZXN0L3Bhc3RlYmluLnB5CisrKyAvZGV2L251bGwKQEAgLTEsOTIgKzAsMCBAQAotIiIi
IHN1Ym1pdCBmYWlsdXJlIG9yIHRlc3Qgc2Vzc2lvbiBpbmZvcm1hdGlvbiB0byBhIHBhc3RlYmlu
IHNlcnZpY2UuICIiIgotaW1wb3J0IHB5dGVzdAotaW1wb3J0IHN5cwotaW1wb3J0IHRlbXBmaWxl
Ci0KLQotZGVmIHB5dGVzdF9hZGRvcHRpb24ocGFyc2VyKToKLSAgICBncm91cCA9IHBhcnNlci5n
ZXRncm91cCgidGVybWluYWwgcmVwb3J0aW5nIikKLSAgICBncm91cC5fYWRkb3B0aW9uKCctLXBh
c3RlYmluJywgbWV0YXZhcj0ibW9kZSIsCi0gICAgICAgIGFjdGlvbj0nc3RvcmUnLCBkZXN0PSJw
YXN0ZWJpbiIsIGRlZmF1bHQ9Tm9uZSwKLSAgICAgICAgY2hvaWNlcz1bJ2ZhaWxlZCcsICdhbGwn
XSwKLSAgICAgICAgaGVscD0ic2VuZCBmYWlsZWR8YWxsIGluZm8gdG8gYnBhc3RlLm5ldCBwYXN0
ZWJpbiBzZXJ2aWNlLiIpCi0KLUBweXRlc3QuaG9va2ltcGwodHJ5bGFzdD1UcnVlKQotZGVmIHB5
dGVzdF9jb25maWd1cmUoY29uZmlnKToKLSAgICBpbXBvcnQgcHkKLSAgICBpZiBjb25maWcub3B0
aW9uLnBhc3RlYmluID09ICJhbGwiOgotICAgICAgICB0ciA9IGNvbmZpZy5wbHVnaW5tYW5hZ2Vy
LmdldHBsdWdpbigndGVybWluYWxyZXBvcnRlcicpCi0gICAgICAgICMgaWYgbm8gdGVybWluYWwg
cmVwb3J0ZXIgcGx1Z2luIGlzIHByZXNlbnQsIG5vdGhpbmcgd2UgY2FuIGRvIGhlcmU7Ci0gICAg
ICAgICMgdGhpcyBjYW4gaGFwcGVuIHdoZW4gdGhpcyBmdW5jdGlvbiBleGVjdXRlcyBpbiBhIHNs
YXZlIG5vZGUKLSAgICAgICAgIyB3aGVuIHVzaW5nIHB5dGVzdC14ZGlzdCwgZm9yIGV4YW1wbGUK
LSAgICAgICAgaWYgdHIgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAjIHBhc3RlYmluIGZpbGUg
d2lsbCBiZSB1dGYtOCBlbmNvZGVkIGJpbmFyeSBmaWxlCi0gICAgICAgICAgICBjb25maWcuX3Bh
c3RlYmluZmlsZSA9IHRlbXBmaWxlLlRlbXBvcmFyeUZpbGUoJ3crYicpCi0gICAgICAgICAgICBv
bGR3cml0ZSA9IHRyLl90dy53cml0ZQotICAgICAgICAgICAgZGVmIHRlZV93cml0ZShzLCAqKmt3
YXJncyk6Ci0gICAgICAgICAgICAgICAgb2xkd3JpdGUocywgKiprd2FyZ3MpCi0gICAgICAgICAg
ICAgICAgaWYgcHkuYnVpbHRpbi5faXN0ZXh0KHMpOgotICAgICAgICAgICAgICAgICAgICBzID0g
cy5lbmNvZGUoJ3V0Zi04JykKLSAgICAgICAgICAgICAgICBjb25maWcuX3Bhc3RlYmluZmlsZS53
cml0ZShzKQotICAgICAgICAgICAgdHIuX3R3LndyaXRlID0gdGVlX3dyaXRlCi0KLWRlZiBweXRl
c3RfdW5jb25maWd1cmUoY29uZmlnKToKLSAgICBpZiBoYXNhdHRyKGNvbmZpZywgJ19wYXN0ZWJp
bmZpbGUnKToKLSAgICAgICAgIyBnZXQgdGVybWluYWwgY29udGVudHMgYW5kIGRlbGV0ZSBmaWxl
Ci0gICAgICAgIGNvbmZpZy5fcGFzdGViaW5maWxlLnNlZWsoMCkKLSAgICAgICAgc2Vzc2lvbmxv
ZyA9IGNvbmZpZy5fcGFzdGViaW5maWxlLnJlYWQoKQotICAgICAgICBjb25maWcuX3Bhc3RlYmlu
ZmlsZS5jbG9zZSgpCi0gICAgICAgIGRlbCBjb25maWcuX3Bhc3RlYmluZmlsZQotICAgICAgICAj
IHVuZG8gb3VyIHBhdGNoaW5nIGluIHRoZSB0ZXJtaW5hbCByZXBvcnRlcgotICAgICAgICB0ciA9
IGNvbmZpZy5wbHVnaW5tYW5hZ2VyLmdldHBsdWdpbigndGVybWluYWxyZXBvcnRlcicpCi0gICAg
ICAgIGRlbCB0ci5fdHcuX19kaWN0X19bJ3dyaXRlJ10KLSAgICAgICAgIyB3cml0ZSBzdW1tYXJ5
Ci0gICAgICAgIHRyLndyaXRlX3NlcCgiPSIsICJTZW5kaW5nIGluZm9ybWF0aW9uIHRvIFBhc3Rl
IFNlcnZpY2UiKQotICAgICAgICBwYXN0ZWJpbnVybCA9IGNyZWF0ZV9uZXdfcGFzdGUoc2Vzc2lv
bmxvZykKLSAgICAgICAgdHIud3JpdGVfbGluZSgicGFzdGViaW4gc2Vzc2lvbi1sb2c6ICVzXG4i
ICUgcGFzdGViaW51cmwpCi0KLWRlZiBjcmVhdGVfbmV3X3Bhc3RlKGNvbnRlbnRzKToKLSAgICAi
IiIKLSAgICBDcmVhdGVzIGEgbmV3IHBhc3RlIHVzaW5nIGJwYXN0ZS5uZXQgc2VydmljZS4KLQot
ICAgIDpjb250ZW50czogcGFzdGUgY29udGVudHMgYXMgdXRmLTggZW5jb2RlZCBieXRlcwotICAg
IDpyZXR1cm5zOiB1cmwgdG8gdGhlIHBhc3RlZCBjb250ZW50cwotICAgICIiIgotICAgIGltcG9y
dCByZQotICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPCAoMywgMCk6Ci0gICAgICAgIGZyb20gdXJs
bGliIGltcG9ydCB1cmxvcGVuLCB1cmxlbmNvZGUKLSAgICBlbHNlOgotICAgICAgICBmcm9tIHVy
bGxpYi5yZXF1ZXN0IGltcG9ydCB1cmxvcGVuCi0gICAgICAgIGZyb20gdXJsbGliLnBhcnNlIGlt
cG9ydCB1cmxlbmNvZGUKLQotICAgIHBhcmFtcyA9IHsKLSAgICAgICAgJ2NvZGUnOiBjb250ZW50
cywKLSAgICAgICAgJ2xleGVyJzogJ3B5dGhvbjMnIGlmIHN5cy52ZXJzaW9uX2luZm9bMF0gPT0g
MyBlbHNlICdweXRob24nLAotICAgICAgICAnZXhwaXJ5JzogJzF3ZWVrJywKLSAgICB9Ci0gICAg
dXJsID0gJ2h0dHBzOi8vYnBhc3RlLm5ldCcKLSAgICByZXNwb25zZSA9IHVybG9wZW4odXJsLCBk
YXRhPXVybGVuY29kZShwYXJhbXMpLmVuY29kZSgnYXNjaWknKSkucmVhZCgpCi0gICAgbSA9IHJl
LnNlYXJjaChyJ2hyZWY9Ii9yYXcvKFx3KykiJywgcmVzcG9uc2UuZGVjb2RlKCd1dGYtOCcpKQot
ICAgIGlmIG06Ci0gICAgICAgIHJldHVybiAnJXMvc2hvdy8lcycgJSAodXJsLCBtLmdyb3VwKDEp
KQotICAgIGVsc2U6Ci0gICAgICAgIHJldHVybiAnYmFkIHJlc3BvbnNlOiAnICsgcmVzcG9uc2UK
LQotZGVmIHB5dGVzdF90ZXJtaW5hbF9zdW1tYXJ5KHRlcm1pbmFscmVwb3J0ZXIpOgotICAgIGlt
cG9ydCBfcHl0ZXN0LmNvbmZpZwotICAgIGlmIHRlcm1pbmFscmVwb3J0ZXIuY29uZmlnLm9wdGlv
bi5wYXN0ZWJpbiAhPSAiZmFpbGVkIjoKLSAgICAgICAgcmV0dXJuCi0gICAgdHIgPSB0ZXJtaW5h
bHJlcG9ydGVyCi0gICAgaWYgJ2ZhaWxlZCcgaW4gdHIuc3RhdHM6Ci0gICAgICAgIHRlcm1pbmFs
cmVwb3J0ZXIud3JpdGVfc2VwKCI9IiwgIlNlbmRpbmcgaW5mb3JtYXRpb24gdG8gUGFzdGUgU2Vy
dmljZSIpCi0gICAgICAgIGZvciByZXAgaW4gdGVybWluYWxyZXBvcnRlci5zdGF0cy5nZXQoJ2Zh
aWxlZCcpOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIG1zZyA9IHJlcC5sb25n
cmVwci5yZXBydHJhY2ViYWNrLnJlcHJlbnRyaWVzWy0xXS5yZXByZmlsZWxvYwotICAgICAgICAg
ICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgICAgIG1zZyA9IHRyLl9nZXRm
YWlsdXJlaGVhZGxpbmUocmVwKQotICAgICAgICAgICAgdHcgPSBfcHl0ZXN0LmNvbmZpZy5jcmVh
dGVfdGVybWluYWxfd3JpdGVyKHRlcm1pbmFscmVwb3J0ZXIuY29uZmlnLCBzdHJpbmdpbz1UcnVl
KQotICAgICAgICAgICAgcmVwLnRvdGVybWluYWwodHcpCi0gICAgICAgICAgICBzID0gdHcuc3Ry
aW5naW8uZ2V0dmFsdWUoKQotICAgICAgICAgICAgYXNzZXJ0IGxlbihzKQotICAgICAgICAgICAg
cGFzdGViaW51cmwgPSBjcmVhdGVfbmV3X3Bhc3RlKHMpCi0gICAgICAgICAgICB0ci53cml0ZV9s
aW5lKCIlcyAtLT4gJXMiICUobXNnLCBwYXN0ZWJpbnVybCkpCmRpZmYgLS1naXQgYS9XZWJEcml2
ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvcGRiLnB5IGIvV2ViRHJp
dmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L3BkYi5weQpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODRjOTIwZDE3MmMuLjAwMDAwMDAwMDAwCi0tLSBhL1dl
YkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9wZGIucHkKKysr
IC9kZXYvbnVsbApAQCAtMSwxMDkgKzAsMCBAQAotIiIiIGludGVyYWN0aXZlIGRlYnVnZ2luZyB3
aXRoIFBEQiwgdGhlIFB5dGhvbiBEZWJ1Z2dlci4gIiIiCi1mcm9tIF9fZnV0dXJlX18gaW1wb3J0
IGFic29sdXRlX2ltcG9ydAotaW1wb3J0IHBkYgotaW1wb3J0IHN5cwotCi1pbXBvcnQgcHl0ZXN0
Ci0KLQotZGVmIHB5dGVzdF9hZGRvcHRpb24ocGFyc2VyKToKLSAgICBncm91cCA9IHBhcnNlci5n
ZXRncm91cCgiZ2VuZXJhbCIpCi0gICAgZ3JvdXAuX2FkZG9wdGlvbignLS1wZGInLAotICAgICAg
ICAgICAgICAgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0idXNlcGRiIiwgZGVmYXVsdD1GYWxz
ZSwKLSAgICAgICAgICAgICAgIGhlbHA9InN0YXJ0IHRoZSBpbnRlcmFjdGl2ZSBQeXRob24gZGVi
dWdnZXIgb24gZXJyb3JzLiIpCi0KLWRlZiBweXRlc3RfbmFtZXNwYWNlKCk6Ci0gICAgcmV0dXJu
IHsnc2V0X3RyYWNlJzogcHl0ZXN0UERCKCkuc2V0X3RyYWNlfQotCi1kZWYgcHl0ZXN0X2NvbmZp
Z3VyZShjb25maWcpOgotICAgIGlmIGNvbmZpZy5nZXR2YWx1ZSgidXNlcGRiIik6Ci0gICAgICAg
IGNvbmZpZy5wbHVnaW5tYW5hZ2VyLnJlZ2lzdGVyKFBkYkludm9rZSgpLCAncGRiaW52b2tlJykK
LQotICAgIG9sZCA9IChwZGIuc2V0X3RyYWNlLCBweXRlc3RQREIuX3BsdWdpbm1hbmFnZXIpCi0g
ICAgZGVmIGZpbigpOgotICAgICAgICBwZGIuc2V0X3RyYWNlLCBweXRlc3RQREIuX3BsdWdpbm1h
bmFnZXIgPSBvbGQKLSAgICAgICAgcHl0ZXN0UERCLl9jb25maWcgPSBOb25lCi0gICAgcGRiLnNl
dF90cmFjZSA9IHB5dGVzdC5zZXRfdHJhY2UKLSAgICBweXRlc3RQREIuX3BsdWdpbm1hbmFnZXIg
PSBjb25maWcucGx1Z2lubWFuYWdlcgotICAgIHB5dGVzdFBEQi5fY29uZmlnID0gY29uZmlnCi0g
ICAgY29uZmlnLl9jbGVhbnVwLmFwcGVuZChmaW4pCi0KLWNsYXNzIHB5dGVzdFBEQjoKLSAgICAi
IiIgUHNldWRvIFBEQiB0aGF0IGRlZmVycyB0byB0aGUgcmVhbCBwZGIuICIiIgotICAgIF9wbHVn
aW5tYW5hZ2VyID0gTm9uZQotICAgIF9jb25maWcgPSBOb25lCi0KLSAgICBkZWYgc2V0X3RyYWNl
KHNlbGYpOgotICAgICAgICAiIiIgaW52b2tlIFBEQiBzZXRfdHJhY2UgZGVidWdnaW5nLCBkcm9w
cGluZyBhbnkgSU8gY2FwdHVyaW5nLiAiIiIKLSAgICAgICAgaW1wb3J0IF9weXRlc3QuY29uZmln
Ci0gICAgICAgIGZyYW1lID0gc3lzLl9nZXRmcmFtZSgpLmZfYmFjawotICAgICAgICBpZiBzZWxm
Ll9wbHVnaW5tYW5hZ2VyIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgY2FwbWFuID0gc2VsZi5f
cGx1Z2lubWFuYWdlci5nZXRwbHVnaW4oImNhcHR1cmVtYW5hZ2VyIikKLSAgICAgICAgICAgIGlm
IGNhcG1hbjoKLSAgICAgICAgICAgICAgICBjYXBtYW4uc3VzcGVuZGNhcHR1cmUoaW5fPVRydWUp
Ci0gICAgICAgICAgICB0dyA9IF9weXRlc3QuY29uZmlnLmNyZWF0ZV90ZXJtaW5hbF93cml0ZXIo
c2VsZi5fY29uZmlnKQotICAgICAgICAgICAgdHcubGluZSgpCi0gICAgICAgICAgICB0dy5zZXAo
Ij4iLCAiUERCIHNldF90cmFjZSAoSU8tY2FwdHVyaW5nIHR1cm5lZCBvZmYpIikKLSAgICAgICAg
ICAgIHNlbGYuX3BsdWdpbm1hbmFnZXIuaG9vay5weXRlc3RfZW50ZXJfcGRiKGNvbmZpZz1zZWxm
Ll9jb25maWcpCi0gICAgICAgIHBkYi5QZGIoKS5zZXRfdHJhY2UoZnJhbWUpCi0KLQotY2xhc3Mg
UGRiSW52b2tlOgotICAgIGRlZiBweXRlc3RfZXhjZXB0aW9uX2ludGVyYWN0KHNlbGYsIG5vZGUs
IGNhbGwsIHJlcG9ydCk6Ci0gICAgICAgIGNhcG1hbiA9IG5vZGUuY29uZmlnLnBsdWdpbm1hbmFn
ZXIuZ2V0cGx1Z2luKCJjYXB0dXJlbWFuYWdlciIpCi0gICAgICAgIGlmIGNhcG1hbjoKLSAgICAg
ICAgICAgIG91dCwgZXJyID0gY2FwbWFuLnN1c3BlbmRjYXB0dXJlKGluXz1UcnVlKQotICAgICAg
ICAgICAgc3lzLnN0ZG91dC53cml0ZShvdXQpCi0gICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRl
KGVycikKLSAgICAgICAgX2VudGVyX3BkYihub2RlLCBjYWxsLmV4Y2luZm8sIHJlcG9ydCkKLQot
ICAgIGRlZiBweXRlc3RfaW50ZXJuYWxlcnJvcihzZWxmLCBleGNyZXByLCBleGNpbmZvKToKLSAg
ICAgICAgZm9yIGxpbmUgaW4gc3RyKGV4Y3JlcHIpLnNwbGl0KCJcbiIpOgotICAgICAgICAgICAg
c3lzLnN0ZGVyci53cml0ZSgiSU5URVJOQUxFUlJPUj4gJXNcbiIgJWxpbmUpCi0gICAgICAgICAg
ICBzeXMuc3RkZXJyLmZsdXNoKCkKLSAgICAgICAgdGIgPSBfcG9zdG1vcnRlbV90cmFjZWJhY2so
ZXhjaW5mbykKLSAgICAgICAgcG9zdF9tb3J0ZW0odGIpCi0KLQotZGVmIF9lbnRlcl9wZGIobm9k
ZSwgZXhjaW5mbywgcmVwKToKLSAgICAjIFhYWCB3ZSByZS11c2UgdGhlIFRlcm1pbmFsUmVwb3J0
ZXIncyB0ZXJtaW5hbHdyaXRlcgotICAgICMgYmVjYXVzZSB0aGlzIHNlZW1zIHRvIGF2b2lkIHNv
bWUgZW5jb2RpbmcgcmVsYXRlZCB0cm91YmxlcwotICAgICMgZm9yIG5vdCBjb21wbGV0ZWx5IGNs
ZWFyIHJlYXNvbnMuCi0gICAgdHcgPSBub2RlLmNvbmZpZy5wbHVnaW5tYW5hZ2VyLmdldHBsdWdp
bigidGVybWluYWxyZXBvcnRlciIpLl90dwotICAgIHR3LmxpbmUoKQotICAgIHR3LnNlcCgiPiIs
ICJ0cmFjZWJhY2siKQotICAgIHJlcC50b3Rlcm1pbmFsKHR3KQotICAgIHR3LnNlcCgiPiIsICJl
bnRlcmluZyBQREIiKQotICAgIHRiID0gX3Bvc3Rtb3J0ZW1fdHJhY2ViYWNrKGV4Y2luZm8pCi0g
ICAgcG9zdF9tb3J0ZW0odGIpCi0gICAgcmVwLl9wZGJzaG93biA9IFRydWUKLSAgICByZXR1cm4g
cmVwCi0KLQotZGVmIF9wb3N0bW9ydGVtX3RyYWNlYmFjayhleGNpbmZvKToKLSAgICAjIEEgZG9j
dGVzdC5VbmV4cGVjdGVkRXhjZXB0aW9uIGlzIG5vdCB1c2VmdWwgZm9yIHBvc3RfbW9ydGVtLgot
ICAgICMgVXNlIHRoZSB1bmRlcmx5aW5nIGV4Y2VwdGlvbiBpbnN0ZWFkOgotICAgIGZyb20gZG9j
dGVzdCBpbXBvcnQgVW5leHBlY3RlZEV4Y2VwdGlvbgotICAgIGlmIGlzaW5zdGFuY2UoZXhjaW5m
by52YWx1ZSwgVW5leHBlY3RlZEV4Y2VwdGlvbik6Ci0gICAgICAgIHJldHVybiBleGNpbmZvLnZh
bHVlLmV4Y19pbmZvWzJdCi0gICAgZWxzZToKLSAgICAgICAgcmV0dXJuIGV4Y2luZm8uX2V4Y2lu
Zm9bMl0KLQotCi1kZWYgX2ZpbmRfbGFzdF9ub25faGlkZGVuX2ZyYW1lKHN0YWNrKToKLSAgICBp
ID0gbWF4KDAsIGxlbihzdGFjaykgLSAxKQotICAgIHdoaWxlIGkgYW5kIHN0YWNrW2ldWzBdLmZf
bG9jYWxzLmdldCgiX190cmFjZWJhY2toaWRlX18iLCBGYWxzZSk6Ci0gICAgICAgIGkgLT0gMQot
ICAgIHJldHVybiBpCi0KLQotZGVmIHBvc3RfbW9ydGVtKHQpOgotICAgIGNsYXNzIFBkYihwZGIu
UGRiKToKLSAgICAgICAgZGVmIGdldF9zdGFjayhzZWxmLCBmLCB0KToKLSAgICAgICAgICAgIHN0
YWNrLCBpID0gcGRiLlBkYi5nZXRfc3RhY2soc2VsZiwgZiwgdCkKLSAgICAgICAgICAgIGlmIGYg
aXMgTm9uZToKLSAgICAgICAgICAgICAgICBpID0gX2ZpbmRfbGFzdF9ub25faGlkZGVuX2ZyYW1l
KHN0YWNrKQotICAgICAgICAgICAgcmV0dXJuIHN0YWNrLCBpCi0gICAgcCA9IFBkYigpCi0gICAg
cC5yZXNldCgpCi0gICAgcC5pbnRlcmFjdGlvbihOb25lLCB0KQpkaWZmIC0tZ2l0IGEvV2ViRHJp
dmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L3B5dGVzdGVyLnB5IGIv
V2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L3B5dGVzdGVy
LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYWVkN2Y1ODFjOS4uMDAwMDAwMDAw
MDAKLS0tIGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0
L3B5dGVzdGVyLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTExMCArMCwwIEBACi0iIiIgKGRpc2Fi
bGVkIGJ5IGRlZmF1bHQpIHN1cHBvcnQgZm9yIHRlc3RpbmcgcHl0ZXN0IGFuZCBweXRlc3QgcGx1
Z2lucy4gIiIiCi1pbXBvcnQgY29kZWNzCi1pbXBvcnQgZ2MKLWltcG9ydCBvcwotaW1wb3J0IHBs
YXRmb3JtCi1pbXBvcnQgcmUKLWltcG9ydCBzdWJwcm9jZXNzCi1pbXBvcnQgc3lzCi1pbXBvcnQg
dGltZQotaW1wb3J0IHRyYWNlYmFjawotZnJvbSBmbm1hdGNoIGltcG9ydCBmbm1hdGNoCi0KLWZy
b20gcHkuYnVpbHRpbiBpbXBvcnQgcHJpbnRfCi0KLWZyb20gX3B5dGVzdC5fY29kZSBpbXBvcnQg
U291cmNlCi1pbXBvcnQgcHkKLWltcG9ydCBweXRlc3QKLWZyb20gX3B5dGVzdC5tYWluIGltcG9y
dCBTZXNzaW9uLCBFWElUX09LCi0KLQotZGVmIHB5dGVzdF9hZGRvcHRpb24ocGFyc2VyKToKLSAg
ICAjIGdyb3VwID0gcGFyc2VyLmdldGdyb3VwKCJweXRlc3RlciIsICJweXRlc3RlciAoc2VsZi10
ZXN0cykgb3B0aW9ucyIpCi0gICAgcGFyc2VyLmFkZG9wdGlvbignLS1sc29mJywKLSAgICAgICAg
ICAgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0ibHNvZiIsIGRlZmF1bHQ9RmFsc2UsCi0gICAg
ICAgICAgIGhlbHA9KCJydW4gRkQgY2hlY2tzIGlmIGxzb2YgaXMgYXZhaWxhYmxlIikpCi0KLSAg
ICBwYXJzZXIuYWRkb3B0aW9uKCctLXJ1bnB5dGVzdCcsIGRlZmF1bHQ9ImlucHJvY2VzcyIsIGRl
c3Q9InJ1bnB5dGVzdCIsCi0gICAgICAgICAgIGNob2ljZXM9KCJpbnByb2Nlc3MiLCAic3VicHJv
Y2VzcyIsICksCi0gICAgICAgICAgIGhlbHA9KCJydW4gcHl0ZXN0IHN1YiBydW5zIGluIHRlc3Rz
IHVzaW5nIGFuICdpbnByb2Nlc3MnICIKLSAgICAgICAgICAgICAgICAgIm9yICdzdWJwcm9jZXNz
JyAocHl0aG9uIC1tIG1haW4pIG1ldGhvZCIpKQotCi0KLWRlZiBweXRlc3RfY29uZmlndXJlKGNv
bmZpZyk6Ci0gICAgIyBUaGlzIG1pZ2h0IGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcy4gT25seSB0
YWtlIHRoZSBmaXJzdC4KLSAgICBnbG9iYWwgX3B5dGVzdF9mdWxscGF0aAotICAgIHRyeToKLSAg
ICAgICAgX3B5dGVzdF9mdWxscGF0aAotICAgIGV4Y2VwdCBOYW1lRXJyb3I6Ci0gICAgICAgIF9w
eXRlc3RfZnVsbHBhdGggPSBvcy5wYXRoLmFic3BhdGgocHl0ZXN0Ll9fZmlsZV9fLnJzdHJpcCgi
b2MiKSkKLSAgICAgICAgX3B5dGVzdF9mdWxscGF0aCA9IF9weXRlc3RfZnVsbHBhdGgucmVwbGFj
ZSgiJHB5LmNsYXNzIiwgIi5weSIpCi0KLSAgICBpZiBjb25maWcuZ2V0dmFsdWUoImxzb2YiKToK
LSAgICAgICAgY2hlY2tlciA9IExzb2ZGZExlYWtDaGVja2VyKCkKLSAgICAgICAgaWYgY2hlY2tl
ci5tYXRjaGluZ19wbGF0Zm9ybSgpOgotICAgICAgICAgICAgY29uZmlnLnBsdWdpbm1hbmFnZXIu
cmVnaXN0ZXIoY2hlY2tlcikKLQotCi1jbGFzcyBMc29mRmRMZWFrQ2hlY2tlcihvYmplY3QpOgot
ICAgIGRlZiBnZXRfb3Blbl9maWxlcyhzZWxmKToKLSAgICAgICAgb3V0ID0gc2VsZi5fZXhlY19s
c29mKCkKLSAgICAgICAgb3Blbl9maWxlcyA9IHNlbGYuX3BhcnNlX2xzb2Zfb3V0cHV0KG91dCkK
LSAgICAgICAgcmV0dXJuIG9wZW5fZmlsZXMKLQotICAgIGRlZiBfZXhlY19sc29mKHNlbGYpOgot
ICAgICAgICBwaWQgPSBvcy5nZXRwaWQoKQotICAgICAgICByZXR1cm4gcHkucHJvY2Vzcy5jbWRl
eGVjKCJsc29mIC1GZm4wIC1wICVkIiAlIHBpZCkKLQotICAgIGRlZiBfcGFyc2VfbHNvZl9vdXRw
dXQoc2VsZiwgb3V0KToKLSAgICAgICAgZGVmIGlzb3BlbihsaW5lKToKLSAgICAgICAgICAgIHJl
dHVybiBsaW5lLnN0YXJ0c3dpdGgoJ2YnKSBhbmQgKCJkZWxldGVkIiBub3QgaW4gbGluZSBhbmQK
LSAgICAgICAgICAgICAgICAnbWVtJyBub3QgaW4gbGluZSBhbmQgInR4dCIgbm90IGluIGxpbmUg
YW5kICdjd2QnIG5vdCBpbiBsaW5lKQotCi0gICAgICAgIG9wZW5fZmlsZXMgPSBbXQotCi0gICAg
ICAgIGZvciBsaW5lIGluIG91dC5zcGxpdCgiXG4iKToKLSAgICAgICAgICAgIGlmIGlzb3Blbihs
aW5lKToKLSAgICAgICAgICAgICAgICBmaWVsZHMgPSBsaW5lLnNwbGl0KCdcMCcpCi0gICAgICAg
ICAgICAgICAgZmQgPSBmaWVsZHNbMF1bMTpdCi0gICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBm
aWVsZHNbMV1bMTpdCi0gICAgICAgICAgICAgICAgaWYgZmlsZW5hbWUuc3RhcnRzd2l0aCgnLycp
OgotICAgICAgICAgICAgICAgICAgICBvcGVuX2ZpbGVzLmFwcGVuZCgoZmQsIGZpbGVuYW1lKSkK
LQotICAgICAgICByZXR1cm4gb3Blbl9maWxlcwotCi0gICAgZGVmIG1hdGNoaW5nX3BsYXRmb3Jt
KHNlbGYpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBweS5wcm9jZXNzLmNtZGV4ZWMoImxz
b2YgLXYiKQotICAgICAgICBleGNlcHQgKHB5LnByb2Nlc3MuY21kZXhlYy5FcnJvciwgVW5pY29k
ZURlY29kZUVycm9yKToKLSAgICAgICAgICAgICMgY21kZXhlYyBtYXkgcmFpc2UgVW5pY29kZURl
Y29kZUVycm9yIG9uIFdpbmRvd3Mgc3lzdGVtcwotICAgICAgICAgICAgIyB3aXRoIGxvY2FsZSBv
dGhlciB0aGFuIGVuZ2xpc2g6Ci0gICAgICAgICAgICAjIGh0dHBzOi8vYml0YnVja2V0Lm9yZy9w
eXRlc3QtZGV2L3B5L2lzc3Vlcy82NgotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAg
IGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAgQHB5dGVzdC5ob29raW1wbCho
b29rd3JhcHBlcj1UcnVlLCB0cnlmaXJzdD1UcnVlKQotICAgIGRlZiBweXRlc3RfcnVudGVzdF9p
dGVtKHNlbGYsIGl0ZW0pOgotICAgICAgICBsaW5lczEgPSBzZWxmLmdldF9vcGVuX2ZpbGVzKCkK
LSAgICAgICAgeWllbGQKLSAgICAgICAgaWYgaGFzYXR0cihzeXMsICJweXB5X3ZlcnNpb25faW5m
byIpOgotICAgICAgICAgICAgZ2MuY29sbGVjdCgpCi0gICAgICAgIGxpbmVzMiA9IHNlbGYuZ2V0
X29wZW5fZmlsZXMoKQotCi0gICAgICAgIG5ld19mZHMgPSBzZXQoW3RbMF0gZm9yIHQgaW4gbGlu
ZXMyXSkgLSBzZXQoW3RbMF0gZm9yIHQgaW4gbGluZXMxXSkKLSAgICAgICAgbGVha2VkX2ZpbGVz
ID0gW3QgZm9yIHQgaW4gbGluZXMyIGlmIHRbMF0gaW4gbmV3X2Zkc10KLSAgICAgICAgaWYgbGVh
a2VkX2ZpbGVzOgotICAgICAgICAgICAgZXJyb3IgPSBbXQotICAgICAgICAgICAgZXJyb3IuYXBw
ZW5kKCIqKioqKiAlcyBGRCBsZWFrYWdlIGRldGVjdGVkIiAlIGxlbihsZWFrZWRfZmlsZXMpKQot
ICAgICAgICAgICAgZXJyb3IuZXh0ZW5kKFtzdHIoZikgZm9yIGYgaW4gbGVha2VkX2ZpbGVzXSkK
LSAgICAgICAgICAgIGVycm9yLmFwcGVuZCgiKioqIEJlZm9yZToiKQotICAgICAgICAgICAgZXJy
b3IuZXh0ZW5kKFtzdHIoZikgZm9yIGYgaW4gbGluZXMxXSkKLSAgICAgICAgICAgIGVycm9yLmFw
cGVuZCgiKioqIEFmdGVyOiIpCi0gICAgICAgICAgICBlcnJvci5leHRlbmQoW3N0cihmKSBmb3Ig
ZiBpbiBsaW5lczJdKQotICAgICAgICAgICAgZXJyb3IuYXBwZW5kKGVycm9yWzBdKQotICAgICAg
ICAgICAgZXJyb3IuYXBwZW5kKCIqKiogZnVuY3Rpb24gJXM6JXM6ICVzICIgJSBpdGVtLmxvY2F0
aW9uKQotICAgICAgICAgICAgcHl0ZXN0LmZhaWwoIlxuIi5qb2luKGVycm9yKSwgcHl0cmFjZT1G
YWxzZSkKLQotCi0jIFhYWCBjb3BpZWQgZnJvbSBleGVjbmV0J3MgY29uZnRlc3QucHkgLSBuZWVk
cyB0byBiZSBtZXJnZWQKLXdpbnB5bWFwID0gewotICAgICdweXRob24yLjcnOiByJ0M6XFB5dGhv
bjI3XHB5dGhvbi5leGUnLAotICAgICdweXRob24yLjYnOiByJ0M6XFB5dGhvbjI2XHB5dGhvbi5l
eGUnLAotICAgICdweXRob24zLjEnOiByJ0M6XFB5dGhvbjMxXHB5dGhvbi5leGUnLAotICAgICdw
eXRob24zLjInOiByJ0M6XFB5dGhvbjMyXHB5dGhvbi5leGUnLAotICAgICdweXRob24zLjMnOiBy
J0M6XFB5dGhvbjMzXHB5dGhvbi5leGUnLAotICAgICdweXRob24zLjQnOiByJ0M6XFB5dGhvbjM0
XHB5dGhvbi5leGUnLAotICAgICdweXRob24zLjUnOiByJ0M6XFB5dGhvbjM1XHB5dGhvbi5leGUn
LAotfQotCi1kZWYgZ2V0ZXhlY3V0YWJsZShuYW1lLCBjYWNoZT17fSk6Ci0gICAgdHJ5OgotICAg
ICAgICByZXR1cm4gY2FjaGVbbmFtZV0KLSAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgIGV4
ZWN1dGFibGUgPSBweS5wYXRoLmxvY2FsLnN5c2ZpbmQobmFtZSkKLSAgICAgICAgaWYgZXhlY3V0
YWJsZToKLSAgICAgICAgICAgIGlmIG5hbWUgPT0gImp5dGhvbiI6Ci0gICAgICAgICAgICAgICAg
aW1wb3J0IHN1YnByb2Nlc3MKLSAgICAgICAgICAgICAgICBwb3BlbiA9IHN1YnByb2Nlc3MuUG9w
ZW4oW3N0cihleGVjdXRhYmxlKSwgIi0tdmVyc2lvbiJdLAotICAgICAgICAgICAgICAgICAgICB1
bml2ZXJzYWxfbmV3bGluZXM9VHJ1ZSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKLSAgICAgICAg
ICAgICAgICBvdXQsIGVyciA9IHBvcGVuLmNvbW11bmljYXRlKCkKLSAgICAgICAgICAgICAgICBp
ZiBub3QgZXJyIG9yICIyLjUiIG5vdCBpbiBlcnI6Ci0gICAgICAgICAgICAgICAgICAgIGV4ZWN1
dGFibGUgPSBOb25lCi0gICAgICAgICAgICAgICAgaWYgIjIuNS4yIiBpbiBlcnI6Ci0gICAgICAg
ICAgICAgICAgICAgIGV4ZWN1dGFibGUgPSBOb25lICMgaHR0cDovL2J1Z3Muanl0aG9uLm9yZy9p
c3N1ZTE3OTAKLSAgICAgICAgY2FjaGVbbmFtZV0gPSBleGVjdXRhYmxlCi0gICAgICAgIHJldHVy
biBleGVjdXRhYmxlCi0KLUBweXRlc3QuZml4dHVyZShwYXJhbXM9WydweXRob24yLjYnLCAncHl0
aG9uMi43JywgJ3B5dGhvbjMuMycsICJweXRob24zLjQiLAotICAgICAgICAgICAgICAgICAgICAg
ICAgJ3B5cHknLCAncHlweTMnXSkKLWRlZiBhbnlweXRob24ocmVxdWVzdCk6Ci0gICAgbmFtZSA9
IHJlcXVlc3QucGFyYW0KLSAgICBleGVjdXRhYmxlID0gZ2V0ZXhlY3V0YWJsZShuYW1lKQotICAg
IGlmIGV4ZWN1dGFibGUgaXMgTm9uZToKLSAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4z
MiI6Ci0gICAgICAgICAgICBleGVjdXRhYmxlID0gd2lucHltYXAuZ2V0KG5hbWUsIE5vbmUpCi0g
ICAgICAgICAgICBpZiBleGVjdXRhYmxlOgotICAgICAgICAgICAgICAgIGV4ZWN1dGFibGUgPSBw
eS5wYXRoLmxvY2FsKGV4ZWN1dGFibGUpCi0gICAgICAgICAgICAgICAgaWYgZXhlY3V0YWJsZS5j
aGVjaygpOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXhlY3V0YWJsZQotICAgICAgICBw
eXRlc3Quc2tpcCgibm8gc3VpdGFibGUgJXMgZm91bmQiICUgKG5hbWUsKSkKLSAgICByZXR1cm4g
ZXhlY3V0YWJsZQotCi0jIHVzZWQgYXQgbGVhc3QgYnkgcHl0ZXN0LXhkaXN0IHBsdWdpbgotQHB5
dGVzdC5maXh0dXJlCi1kZWYgX3B5dGVzdChyZXF1ZXN0KToKLSAgICAiIiIgUmV0dXJuIGEgaGVs
cGVyIHdoaWNoIG9mZmVycyBhIGdldGhvb2tyZWNvcmRlcihob29rKQotICAgIG1ldGhvZCB3aGlj
aCByZXR1cm5zIGEgSG9va1JlY29yZGVyIGluc3RhbmNlIHdoaWNoIGhlbHBzCi0gICAgdG8gbWFr
ZSBhc3NlcnRpb25zIGFib3V0IGNhbGxlZCBob29rcy4KLSAgICAiIiIKLSAgICByZXR1cm4gUHl0
ZXN0QXJnKHJlcXVlc3QpCi0KLWNsYXNzIFB5dGVzdEFyZzoKLSAgICBkZWYgX19pbml0X18oc2Vs
ZiwgcmVxdWVzdCk6Ci0gICAgICAgIHNlbGYucmVxdWVzdCA9IHJlcXVlc3QKLQotICAgIGRlZiBn
ZXRob29rcmVjb3JkZXIoc2VsZiwgaG9vayk6Ci0gICAgICAgIGhvb2tyZWNvcmRlciA9IEhvb2tS
ZWNvcmRlcihob29rLl9wbSkKLSAgICAgICAgc2VsZi5yZXF1ZXN0LmFkZGZpbmFsaXplcihob29r
cmVjb3JkZXIuZmluaXNoX3JlY29yZGluZykKLSAgICAgICAgcmV0dXJuIGhvb2tyZWNvcmRlcgot
Ci0KLWRlZiBnZXRfcHVibGljX25hbWVzKGwpOgotICAgICIiIk9ubHkgcmV0dXJuIG5hbWVzIGZy
b20gaXRlcmF0b3IgbCB3aXRob3V0IGEgbGVhZGluZyB1bmRlcnNjb3JlLiIiIgotICAgIHJldHVy
biBbeCBmb3IgeCBpbiBsIGlmIHhbMF0gIT0gIl8iXQotCi0KLWNsYXNzIFBhcnNlZENhbGw6Ci0g
ICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIGt3YXJncyk6Ci0gICAgICAgIHNlbGYuX19kaWN0
X18udXBkYXRlKGt3YXJncykKLSAgICAgICAgc2VsZi5fbmFtZSA9IG5hbWUKLQotICAgIGRlZiBf
X3JlcHJfXyhzZWxmKToKLSAgICAgICAgZCA9IHNlbGYuX19kaWN0X18uY29weSgpCi0gICAgICAg
IGRlbCBkWydfbmFtZSddCi0gICAgICAgIHJldHVybiAiPFBhcnNlZENhbGwgJXIoKiolcik+IiAl
KHNlbGYuX25hbWUsIGQpCi0KLQotY2xhc3MgSG9va1JlY29yZGVyOgotICAgICIiIlJlY29yZCBh
bGwgaG9va3MgY2FsbGVkIGluIGEgcGx1Z2luIG1hbmFnZXIuCi0KLSAgICBUaGlzIHdyYXBzIGFs
bCB0aGUgaG9vayBjYWxscyBpbiB0aGUgcGx1Z2luIG1hbmFnZXIsIHJlY29yZGluZwotICAgIGVh
Y2ggY2FsbCBiZWZvcmUgcHJvcGFnYXRpbmcgdGhlIG5vcm1hbCBjYWxscy4KLQotICAgICIiIgot
Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHBsdWdpbm1hbmFnZXIpOgotICAgICAgICBzZWxmLl9w
bHVnaW5tYW5hZ2VyID0gcGx1Z2lubWFuYWdlcgotICAgICAgICBzZWxmLmNhbGxzID0gW10KLQot
ICAgICAgICBkZWYgYmVmb3JlKGhvb2tfbmFtZSwgaG9va19pbXBscywga3dhcmdzKToKLSAgICAg
ICAgICAgIHNlbGYuY2FsbHMuYXBwZW5kKFBhcnNlZENhbGwoaG9va19uYW1lLCBrd2FyZ3MpKQot
Ci0gICAgICAgIGRlZiBhZnRlcihvdXRjb21lLCBob29rX25hbWUsIGhvb2tfaW1wbHMsIGt3YXJn
cyk6Ci0gICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgc2VsZi5fdW5kb193cmFwcGluZyA9IHBs
dWdpbm1hbmFnZXIuYWRkX2hvb2tjYWxsX21vbml0b3JpbmcoYmVmb3JlLCBhZnRlcikKLQotICAg
IGRlZiBmaW5pc2hfcmVjb3JkaW5nKHNlbGYpOgotICAgICAgICBzZWxmLl91bmRvX3dyYXBwaW5n
KCkKLQotICAgIGRlZiBnZXRjYWxscyhzZWxmLCBuYW1lcyk6Ci0gICAgICAgIGlmIGlzaW5zdGFu
Y2UobmFtZXMsIHN0cik6Ci0gICAgICAgICAgICBuYW1lcyA9IG5hbWVzLnNwbGl0KCkKLSAgICAg
ICAgcmV0dXJuIFtjYWxsIGZvciBjYWxsIGluIHNlbGYuY2FsbHMgaWYgY2FsbC5fbmFtZSBpbiBu
YW1lc10KLQotICAgIGRlZiBhc3NlcnRfY29udGFpbnMoc2VsZiwgZW50cmllcyk6Ci0gICAgICAg
IF9fdHJhY2ViYWNraGlkZV9fID0gVHJ1ZQotICAgICAgICBpID0gMAotICAgICAgICBlbnRyaWVz
ID0gbGlzdChlbnRyaWVzKQotICAgICAgICBiYWNrbG9jYWxzID0gc3lzLl9nZXRmcmFtZSgxKS5m
X2xvY2FscwotICAgICAgICB3aGlsZSBlbnRyaWVzOgotICAgICAgICAgICAgbmFtZSwgY2hlY2sg
PSBlbnRyaWVzLnBvcCgwKQotICAgICAgICAgICAgZm9yIGluZCwgY2FsbCBpbiBlbnVtZXJhdGUo
c2VsZi5jYWxsc1tpOl0pOgotICAgICAgICAgICAgICAgIGlmIGNhbGwuX25hbWUgPT0gbmFtZToK
LSAgICAgICAgICAgICAgICAgICAgcHJpbnRfKCJOQU1FTUFUQ0giLCBuYW1lLCBjYWxsKQotICAg
ICAgICAgICAgICAgICAgICBpZiBldmFsKGNoZWNrLCBiYWNrbG9jYWxzLCBjYWxsLl9fZGljdF9f
KToKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50XygiQ0hFQ0tFUk1BVENIIiwgcmVwcihj
aGVjayksICItPiIsIGNhbGwpCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBwcmludF8oIk5PQ0hFQ0tFUk1BVENIIiwgcmVwcihjaGVjayksICItIiwg
Y2FsbCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAg
ICAgIGkgKz0gaW5kICsgMQotICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAg
ICAgIHByaW50XygiTk9OQU1FTUFUQ0giLCBuYW1lLCAid2l0aCIsIGNhbGwpCi0gICAgICAgICAg
ICBlbHNlOgotICAgICAgICAgICAgICAgIHB5dGVzdC5mYWlsKCJjb3VsZCBub3QgZmluZCAlciBj
aGVjayAlciIgJSAobmFtZSwgY2hlY2spKQotCi0gICAgZGVmIHBvcGNhbGwoc2VsZiwgbmFtZSk6
Ci0gICAgICAgIF9fdHJhY2ViYWNraGlkZV9fID0gVHJ1ZQotICAgICAgICBmb3IgaSwgY2FsbCBp
biBlbnVtZXJhdGUoc2VsZi5jYWxscyk6Ci0gICAgICAgICAgICBpZiBjYWxsLl9uYW1lID09IG5h
bWU6Ci0gICAgICAgICAgICAgICAgZGVsIHNlbGYuY2FsbHNbaV0KLSAgICAgICAgICAgICAgICBy
ZXR1cm4gY2FsbAotICAgICAgICBsaW5lcyA9IFsiY291bGQgbm90IGZpbmQgY2FsbCAlciwgaW46
IiAlIChuYW1lLCldCi0gICAgICAgIGxpbmVzLmV4dGVuZChbIiAgJXMiICUgc3RyKHgpIGZvciB4
IGluIHNlbGYuY2FsbHNdKQotICAgICAgICBweXRlc3QuZmFpbCgiXG4iLmpvaW4obGluZXMpKQot
Ci0gICAgZGVmIGdldGNhbGwoc2VsZiwgbmFtZSk6Ci0gICAgICAgIGwgPSBzZWxmLmdldGNhbGxz
KG5hbWUpCi0gICAgICAgIGFzc2VydCBsZW4obCkgPT0gMSwgKG5hbWUsIGwpCi0gICAgICAgIHJl
dHVybiBsWzBdCi0KLSAgICAjIGZ1bmN0aW9uYWxpdHkgZm9yIHRlc3QgcmVwb3J0cwotCi0gICAg
ZGVmIGdldHJlcG9ydHMoc2VsZiwKLSAgICAgICAgICAgICAgICAgICBuYW1lcz0icHl0ZXN0X3J1
bnRlc3RfbG9ncmVwb3J0IHB5dGVzdF9jb2xsZWN0cmVwb3J0Iik6Ci0gICAgICAgIHJldHVybiBb
eC5yZXBvcnQgZm9yIHggaW4gc2VsZi5nZXRjYWxscyhuYW1lcyldCi0KLSAgICBkZWYgbWF0Y2hy
ZXBvcnQoc2VsZiwgaW5hbWVwYXJ0PSIiLAotICAgICAgICBuYW1lcz0icHl0ZXN0X3J1bnRlc3Rf
bG9ncmVwb3J0IHB5dGVzdF9jb2xsZWN0cmVwb3J0Iiwgd2hlbj1Ob25lKToKLSAgICAgICAgIiIi
IHJldHVybiBhIHRlc3RyZXBvcnQgd2hvc2UgZG90dGVkIGltcG9ydCBwYXRoIG1hdGNoZXMgIiIi
Ci0gICAgICAgIGwgPSBbXQotICAgICAgICBmb3IgcmVwIGluIHNlbGYuZ2V0cmVwb3J0cyhuYW1l
cz1uYW1lcyk6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgaWYgbm90IHdoZW4g
YW5kIHJlcC53aGVuICE9ICJjYWxsIiBhbmQgcmVwLnBhc3NlZDoKLSAgICAgICAgICAgICAgICAg
ICAgIyBzZXR1cC90ZWFyZG93biBwYXNzaW5nIHJlcG9ydHMgLSBsZXQncyBpZ25vcmUgdGhvc2UK
LSAgICAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1
dGVFcnJvcjoKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBpZiB3aGVuIGFuZCBn
ZXRhdHRyKHJlcCwgJ3doZW4nLCBOb25lKSAhPSB3aGVuOgotICAgICAgICAgICAgICAgIGNvbnRp
bnVlCi0gICAgICAgICAgICBpZiBub3QgaW5hbWVwYXJ0IG9yIGluYW1lcGFydCBpbiByZXAubm9k
ZWlkLnNwbGl0KCI6OiIpOgotICAgICAgICAgICAgICAgIGwuYXBwZW5kKHJlcCkKLSAgICAgICAg
aWYgbm90IGw6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJjb3VsZCBub3QgZmluZCB0
ZXN0IHJlcG9ydCBtYXRjaGluZyAlcjogIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
bm8gdGVzdCByZXBvcnRzIGF0IGFsbCEiICUgKGluYW1lcGFydCwpKQotICAgICAgICBpZiBsZW4o
bCkgPiAxOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKLSAgICAgICAgICAgICAgICAi
Zm91bmQgMiBvciBtb3JlIHRlc3RyZXBvcnRzIG1hdGNoaW5nICVyOiAlcyIgJShpbmFtZXBhcnQs
IGwpKQotICAgICAgICByZXR1cm4gbFswXQotCi0gICAgZGVmIGdldGZhaWx1cmVzKHNlbGYsCi0g
ICAgICAgICAgICAgICAgICAgIG5hbWVzPSdweXRlc3RfcnVudGVzdF9sb2dyZXBvcnQgcHl0ZXN0
X2NvbGxlY3RyZXBvcnQnKToKLSAgICAgICAgcmV0dXJuIFtyZXAgZm9yIHJlcCBpbiBzZWxmLmdl
dHJlcG9ydHMobmFtZXMpIGlmIHJlcC5mYWlsZWRdCi0KLSAgICBkZWYgZ2V0ZmFpbGVkY29sbGVj
dGlvbnMoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLmdldGZhaWx1cmVzKCdweXRlc3RfY29s
bGVjdHJlcG9ydCcpCi0KLSAgICBkZWYgbGlzdG91dGNvbWVzKHNlbGYpOgotICAgICAgICBwYXNz
ZWQgPSBbXQotICAgICAgICBza2lwcGVkID0gW10KLSAgICAgICAgZmFpbGVkID0gW10KLSAgICAg
ICAgZm9yIHJlcCBpbiBzZWxmLmdldHJlcG9ydHMoCi0gICAgICAgICAgICAicHl0ZXN0X2NvbGxl
Y3RyZXBvcnQgcHl0ZXN0X3J1bnRlc3RfbG9ncmVwb3J0Iik6Ci0gICAgICAgICAgICBpZiByZXAu
cGFzc2VkOgotICAgICAgICAgICAgICAgIGlmIGdldGF0dHIocmVwLCAid2hlbiIsIE5vbmUpID09
ICJjYWxsIjoKLSAgICAgICAgICAgICAgICAgICAgcGFzc2VkLmFwcGVuZChyZXApCi0gICAgICAg
ICAgICBlbGlmIHJlcC5za2lwcGVkOgotICAgICAgICAgICAgICAgIHNraXBwZWQuYXBwZW5kKHJl
cCkKLSAgICAgICAgICAgIGVsaWYgcmVwLmZhaWxlZDoKLSAgICAgICAgICAgICAgICBmYWlsZWQu
YXBwZW5kKHJlcCkKLSAgICAgICAgcmV0dXJuIHBhc3NlZCwgc2tpcHBlZCwgZmFpbGVkCi0KLSAg
ICBkZWYgY291bnRvdXRjb21lcyhzZWxmKToKLSAgICAgICAgcmV0dXJuIFtsZW4oeCkgZm9yIHgg
aW4gc2VsZi5saXN0b3V0Y29tZXMoKV0KLQotICAgIGRlZiBhc3NlcnRvdXRjb21lKHNlbGYsIHBh
c3NlZD0wLCBza2lwcGVkPTAsIGZhaWxlZD0wKToKLSAgICAgICAgcmVhbHBhc3NlZCwgcmVhbHNr
aXBwZWQsIHJlYWxmYWlsZWQgPSBzZWxmLmxpc3RvdXRjb21lcygpCi0gICAgICAgIGFzc2VydCBw
YXNzZWQgPT0gbGVuKHJlYWxwYXNzZWQpCi0gICAgICAgIGFzc2VydCBza2lwcGVkID09IGxlbihy
ZWFsc2tpcHBlZCkKLSAgICAgICAgYXNzZXJ0IGZhaWxlZCA9PSBsZW4ocmVhbGZhaWxlZCkKLQot
ICAgIGRlZiBjbGVhcihzZWxmKToKLSAgICAgICAgc2VsZi5jYWxsc1s6XSA9IFtdCi0KLQotQHB5
dGVzdC5maXh0dXJlCi1kZWYgbGluZWNvbXAocmVxdWVzdCk6Ci0gICAgcmV0dXJuIExpbmVDb21w
KCkKLQotCi1kZWYgcHl0ZXN0X2Z1bmNhcmdfX0xpbmVNYXRjaGVyKHJlcXVlc3QpOgotICAgIHJl
dHVybiBMaW5lTWF0Y2hlcgotCi0KLUBweXRlc3QuZml4dHVyZQotZGVmIHRlc3RkaXIocmVxdWVz
dCwgdG1wZGlyX2ZhY3RvcnkpOgotICAgIHJldHVybiBUZXN0ZGlyKHJlcXVlc3QsIHRtcGRpcl9m
YWN0b3J5KQotCi0KLXJleF9vdXRjb21lID0gcmUuY29tcGlsZSgiKFxkKykgKFtcdy1dKykiKQot
Y2xhc3MgUnVuUmVzdWx0OgotICAgICIiIlRoZSByZXN1bHQgb2YgcnVubmluZyBhIGNvbW1hbmQu
Ci0KLSAgICBBdHRyaWJ1dGVzOgotCi0gICAgOnJldDogVGhlIHJldHVybiB2YWx1ZS4KLSAgICA6
b3V0bGluZXM6IExpc3Qgb2YgbGluZXMgY2FwdHVyZWQgZnJvbSBzdGRvdXQuCi0gICAgOmVycmxp
bmVzOiBMaXN0IG9mIGxpbmVzIGNhcHR1cmVzIGZyb20gc3RkZXJyLgotICAgIDpzdGRvdXQ6IDpw
eTpjbGFzczpgTGluZU1hdGNoZXJgIG9mIHN0ZG91dCwgdXNlIGBgc3Rkb3V0LnN0cigpYGAgdG8K
LSAgICAgICByZWNvbnN0cnVjdCBzdGRvdXQgb3IgdGhlIGNvbW1vbmx5IHVzZWQKLSAgICAgICBg
YHN0ZG91dC5mbm1hdGNoX2xpbmVzKClgYCBtZXRob2QuCi0gICAgOnN0ZGVycnI6IDpweTpjbGFz
czpgTGluZU1hdGNoZXJgIG9mIHN0ZGVyci4KLSAgICA6ZHVyYXRpb246IER1cmF0aW9uIGluIHNl
Y29uZHMuCi0KLSAgICAiIiIKLSAgICBkZWYgX19pbml0X18oc2VsZiwgcmV0LCBvdXRsaW5lcywg
ZXJybGluZXMsIGR1cmF0aW9uKToKLSAgICAgICAgc2VsZi5yZXQgPSByZXQKLSAgICAgICAgc2Vs
Zi5vdXRsaW5lcyA9IG91dGxpbmVzCi0gICAgICAgIHNlbGYuZXJybGluZXMgPSBlcnJsaW5lcwot
ICAgICAgICBzZWxmLnN0ZG91dCA9IExpbmVNYXRjaGVyKG91dGxpbmVzKQotICAgICAgICBzZWxm
LnN0ZGVyciA9IExpbmVNYXRjaGVyKGVycmxpbmVzKQotICAgICAgICBzZWxmLmR1cmF0aW9uID0g
ZHVyYXRpb24KLQotICAgIGRlZiBwYXJzZW91dGNvbWVzKHNlbGYpOgotICAgICAgICAiIiIgUmV0
dXJuIGEgZGljdGlvbmFyeSBvZiBvdXRjb21lc3RyaW5nLT5udW0gZnJvbSBwYXJzaW5nCi0gICAg
ICAgIHRoZSB0ZXJtaW5hbCBvdXRwdXQgdGhhdCB0aGUgdGVzdCBwcm9jZXNzIHByb2R1Y2VkLiIi
IgotICAgICAgICBmb3IgbGluZSBpbiByZXZlcnNlZChzZWxmLm91dGxpbmVzKToKLSAgICAgICAg
ICAgIGlmICdzZWNvbmRzJyBpbiBsaW5lOgotICAgICAgICAgICAgICAgIG91dGNvbWVzID0gcmV4
X291dGNvbWUuZmluZGFsbChsaW5lKQotICAgICAgICAgICAgICAgIGlmIG91dGNvbWVzOgotICAg
ICAgICAgICAgICAgICAgICBkID0ge30KLSAgICAgICAgICAgICAgICAgICAgZm9yIG51bSwgY2F0
IGluIG91dGNvbWVzOgotICAgICAgICAgICAgICAgICAgICAgICAgZFtjYXRdID0gaW50KG51bSkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGQKLQotICAgIGRlZiBhc3NlcnRfb3V0Y29tZXMo
c2VsZiwgcGFzc2VkPTAsIHNraXBwZWQ9MCwgZmFpbGVkPTApOgotICAgICAgICAiIiIgYXNzZXJ0
IHRoYXQgdGhlIHNwZWNpZmllZCBvdXRjb21lcyBhcHBlYXIgd2l0aCB0aGUgcmVzcGVjdGl2ZQot
ICAgICAgICBudW1iZXJzICgwIG1lYW5zIGl0IGRpZG4ndCBvY2N1cikgaW4gdGhlIHRleHQgb3V0
cHV0IGZyb20gYSB0ZXN0IHJ1bi4iIiIKLSAgICAgICAgZCA9IHNlbGYucGFyc2VvdXRjb21lcygp
Ci0gICAgICAgIGFzc2VydCBwYXNzZWQgPT0gZC5nZXQoInBhc3NlZCIsIDApCi0gICAgICAgIGFz
c2VydCBza2lwcGVkID09IGQuZ2V0KCJza2lwcGVkIiwgMCkKLSAgICAgICAgYXNzZXJ0IGZhaWxl
ZCA9PSBkLmdldCgiZmFpbGVkIiwgMCkKLQotCi0KLWNsYXNzIFRlc3RkaXI6Ci0gICAgIiIiVGVt
cG9yYXJ5IHRlc3QgZGlyZWN0b3J5IHdpdGggdG9vbHMgdG8gdGVzdC9ydW4gcHkudGVzdCBpdHNl
bGYuCi0KLSAgICBUaGlzIGlzIGJhc2VkIG9uIHRoZSBgYHRtcGRpcmBgIGZpeHR1cmUgYnV0IHBy
b3ZpZGVzIGEgbnVtYmVyIG9mCi0gICAgbWV0aG9kcyB3aGljaCBhaWQgd2l0aCB0ZXN0aW5nIHB5
LnRlc3QgaXRzZWxmLiAgVW5sZXNzCi0gICAgOnB5Om1ldGg6YGNoZGlyYCBpcyB1c2VkIGFsbCBt
ZXRob2RzIHdpbGwgdXNlIDpweTphdHRyOmB0bXBkaXJgIGFzCi0gICAgY3VycmVudCB3b3JraW5n
IGRpcmVjdG9yeS4KLQotICAgIEF0dHJpYnV0ZXM6Ci0KLSAgICA6dG1wZGlyOiBUaGUgOnB5OmNs
YXNzOmBweS5wYXRoLmxvY2FsYCBpbnN0YW5jZSBvZiB0aGUgdGVtcG9yYXJ5Ci0gICAgICAgZGly
ZWN0b3J5LgotCi0gICAgOnBsdWdpbnM6IEEgbGlzdCBvZiBwbHVnaW5zIHRvIHVzZSB3aXRoIDpw
eTptZXRoOmBwYXJzZWNvbmZpZ2AgYW5kCi0gICAgICAgOnB5Om1ldGg6YHJ1bnB5dGVzdGAuICBJ
bml0aWFsbHkgdGhpcyBpcyBhbiBlbXB0eSBsaXN0IGJ1dAotICAgICAgIHBsdWdpbnMgY2FuIGJl
IGFkZGVkIHRvIHRoZSBsaXN0LiAgVGhlIHR5cGUgb2YgaXRlbXMgdG8gYWRkIHRvCi0gICAgICAg
dGhlIGxpc3QgZGVwZW5kIG9uIHRoZSBtZXRob2Qgd2hpY2ggdXNlcyB0aGVtIHNvIHJlZmVyIHRv
IHRoZW0KLSAgICAgICBmb3IgZGV0YWlscy4KLQotICAgICIiIgotCi0gICAgZGVmIF9faW5pdF9f
KHNlbGYsIHJlcXVlc3QsIHRtcGRpcl9mYWN0b3J5KToKLSAgICAgICAgc2VsZi5yZXF1ZXN0ID0g
cmVxdWVzdAotICAgICAgICAjIFhYWCByZW1vdmUgZHVwbGljYXRpb24gd2l0aCB0bXBkaXIgcGx1
Z2luCi0gICAgICAgIGJhc2V0bXAgPSB0bXBkaXJfZmFjdG9yeS5lbnN1cmV0ZW1wKCJ0ZXN0ZGly
IikKLSAgICAgICAgbmFtZSA9IHJlcXVlc3QuZnVuY3Rpb24uX19uYW1lX18KLSAgICAgICAgZm9y
IGkgaW4gcmFuZ2UoMTAwKToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICB0bXBk
aXIgPSBiYXNldG1wLm1rZGlyKG5hbWUgKyBzdHIoaSkpCi0gICAgICAgICAgICBleGNlcHQgcHku
ZXJyb3IuRUVYSVNUOgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBicmVh
awotICAgICAgICBzZWxmLnRtcGRpciA9IHRtcGRpcgotICAgICAgICBzZWxmLnBsdWdpbnMgPSBb
XQotICAgICAgICBzZWxmLl9zYXZlc3lzcGF0aCA9IChsaXN0KHN5cy5wYXRoKSwgbGlzdChzeXMu
bWV0YV9wYXRoKSkKLSAgICAgICAgc2VsZi5fc2F2ZW1vZHVsZWtleXMgPSBzZXQoc3lzLm1vZHVs
ZXMpCi0gICAgICAgIHNlbGYuY2hkaXIoKSAjIGFsd2F5cyBjaGRpcgotICAgICAgICBzZWxmLnJl
cXVlc3QuYWRkZmluYWxpemVyKHNlbGYuZmluYWxpemUpCi0gICAgICAgIG1ldGhvZCA9IHNlbGYu
cmVxdWVzdC5jb25maWcuZ2V0b3B0aW9uKCItLXJ1bnB5dGVzdCIpCi0gICAgICAgIGlmIG1ldGhv
ZCA9PSAiaW5wcm9jZXNzIjoKLSAgICAgICAgICAgIHNlbGYuX3J1bnB5dGVzdF9tZXRob2QgPSBz
ZWxmLnJ1bnB5dGVzdF9pbnByb2Nlc3MKLSAgICAgICAgZWxpZiBtZXRob2QgPT0gInN1YnByb2Nl
c3MiOgotICAgICAgICAgICAgc2VsZi5fcnVucHl0ZXN0X21ldGhvZCA9IHNlbGYucnVucHl0ZXN0
X3N1YnByb2Nlc3MKLQotICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuICI8
VGVzdGRpciAlcj4iICUgKHNlbGYudG1wZGlyLCkKLQotICAgIGRlZiBmaW5hbGl6ZShzZWxmKToK
LSAgICAgICAgIiIiQ2xlYW4gdXAgZ2xvYmFsIHN0YXRlIGFydGlmYWN0cy4KLQotICAgICAgICBT
b21lIG1ldGhvZHMgbW9kaWZ5IHRoZSBnbG9iYWwgaW50ZXJwcmV0ZXIgc3RhdGUgYW5kIHRoaXMK
LSAgICAgICAgdHJpZXMgdG8gY2xlYW4gdGhpcyB1cC4gIEl0IGRvZXMgbm90IHJlbW92ZSB0aGUg
dGVtcG9yYXJ5Ci0gICAgICAgIGRpcmVjdG9yeSBob3dldmVyIHNvIGl0IGNhbiBiZSBsb29rZWQg
YXQgYWZ0ZXIgdGhlIHRlc3QgcnVuCi0gICAgICAgIGhhcyBmaW5pc2hlZC4KLQotICAgICAgICAi
IiIKLSAgICAgICAgc3lzLnBhdGhbOl0sIHN5cy5tZXRhX3BhdGhbOl0gPSBzZWxmLl9zYXZlc3lz
cGF0aAotICAgICAgICBpZiBoYXNhdHRyKHNlbGYsICdfb2xkZGlyJyk6Ci0gICAgICAgICAgICBz
ZWxmLl9vbGRkaXIuY2hkaXIoKQotICAgICAgICBzZWxmLmRlbGV0ZV9sb2FkZWRfbW9kdWxlcygp
Ci0KLSAgICBkZWYgZGVsZXRlX2xvYWRlZF9tb2R1bGVzKHNlbGYpOgotICAgICAgICAiIiJEZWxl
dGUgbW9kdWxlcyB0aGF0IGhhdmUgYmVlbiBsb2FkZWQgZHVyaW5nIGEgdGVzdC4KLQotICAgICAg
ICBUaGlzIGFsbG93cyB0aGUgaW50ZXJwcmV0ZXIgdG8gY2F0Y2ggbW9kdWxlIGNoYW5nZXMgaW4g
Y2FzZQotICAgICAgICB0aGUgbW9kdWxlIGlzIHJlLWltcG9ydGVkLgotICAgICAgICAiIiIKLSAg
ICAgICAgZm9yIG5hbWUgaW4gc2V0KHN5cy5tb2R1bGVzKS5kaWZmZXJlbmNlKHNlbGYuX3NhdmVt
b2R1bGVrZXlzKToKLSAgICAgICAgICAgICMgaXQgc2VlbXMgem9wZS5pbnRlcmZhY2VzIGlzIGtl
ZXBpbmcgc29tZSBzdGF0ZQotICAgICAgICAgICAgIyAodXNlZCBieSB0d2lzdGVkIHJlbGF0ZWQg
dGVzdHMpCi0gICAgICAgICAgICBpZiBuYW1lICE9ICJ6b3BlLmludGVyZmFjZSI6Ci0gICAgICAg
ICAgICAgICAgZGVsIHN5cy5tb2R1bGVzW25hbWVdCi0KLSAgICBkZWYgbWFrZV9ob29rX3JlY29y
ZGVyKHNlbGYsIHBsdWdpbm1hbmFnZXIpOgotICAgICAgICAiIiJDcmVhdGUgYSBuZXcgOnB5OmNs
YXNzOmBIb29rUmVjb3JkZXJgIGZvciBhIFBsdWdpbk1hbmFnZXIuIiIiCi0gICAgICAgIGFzc2Vy
dCBub3QgaGFzYXR0cihwbHVnaW5tYW5hZ2VyLCAicmVwcmVjIikKLSAgICAgICAgcGx1Z2lubWFu
YWdlci5yZXByZWMgPSByZXByZWMgPSBIb29rUmVjb3JkZXIocGx1Z2lubWFuYWdlcikKLSAgICAg
ICAgc2VsZi5yZXF1ZXN0LmFkZGZpbmFsaXplcihyZXByZWMuZmluaXNoX3JlY29yZGluZykKLSAg
ICAgICAgcmV0dXJuIHJlcHJlYwotCi0gICAgZGVmIGNoZGlyKHNlbGYpOgotICAgICAgICAiIiJD
ZCBpbnRvIHRoZSB0ZW1wb3JhcnkgZGlyZWN0b3J5LgotCi0gICAgICAgIFRoaXMgaXMgZG9uZSBh
dXRvbWF0aWNhbGx5IHVwb24gaW5zdGFudGlhdGlvbi4KLQotICAgICAgICAiIiIKLSAgICAgICAg
b2xkID0gc2VsZi50bXBkaXIuY2hkaXIoKQotICAgICAgICBpZiBub3QgaGFzYXR0cihzZWxmLCAn
X29sZGRpcicpOgotICAgICAgICAgICAgc2VsZi5fb2xkZGlyID0gb2xkCi0KLSAgICBkZWYgX21h
a2VmaWxlKHNlbGYsIGV4dCwgYXJncywga3dhcmdzKToKLSAgICAgICAgaXRlbXMgPSBsaXN0KGt3
YXJncy5pdGVtcygpKQotICAgICAgICBpZiBhcmdzOgotICAgICAgICAgICAgc291cmNlID0gcHku
YnVpbHRpbi5fdG90ZXh0KCJcbiIpLmpvaW4oCi0gICAgICAgICAgICAgICAgbWFwKHB5LmJ1aWx0
aW4uX3RvdGV4dCwgYXJncykpICsgcHkuYnVpbHRpbi5fdG90ZXh0KCJcbiIpCi0gICAgICAgICAg
ICBiYXNlbmFtZSA9IHNlbGYucmVxdWVzdC5mdW5jdGlvbi5fX25hbWVfXwotICAgICAgICAgICAg
aXRlbXMuaW5zZXJ0KDAsIChiYXNlbmFtZSwgc291cmNlKSkKLSAgICAgICAgcmV0ID0gTm9uZQot
ICAgICAgICBmb3IgbmFtZSwgdmFsdWUgaW4gaXRlbXM6Ci0gICAgICAgICAgICBwID0gc2VsZi50
bXBkaXIuam9pbihuYW1lKS5uZXcoZXh0PWV4dCkKLSAgICAgICAgICAgIHNvdXJjZSA9IFNvdXJj
ZSh2YWx1ZSkKLSAgICAgICAgICAgIGRlZiBteV90b3RleHQocywgZW5jb2Rpbmc9InV0Zi04Iik6
Ci0gICAgICAgICAgICAgICAgaWYgcHkuYnVpbHRpbi5faXNieXRlcyhzKToKLSAgICAgICAgICAg
ICAgICAgICAgcyA9IHB5LmJ1aWx0aW4uX3RvdGV4dChzLCBlbmNvZGluZz1lbmNvZGluZykKLSAg
ICAgICAgICAgICAgICByZXR1cm4gcwotICAgICAgICAgICAgc291cmNlX3VuaWNvZGUgPSAiXG4i
LmpvaW4oW215X3RvdGV4dChsaW5lKSBmb3IgbGluZSBpbiBzb3VyY2UubGluZXNdKQotICAgICAg
ICAgICAgc291cmNlID0gcHkuYnVpbHRpbi5fdG90ZXh0KHNvdXJjZV91bmljb2RlKQotICAgICAg
ICAgICAgY29udGVudCA9IHNvdXJjZS5zdHJpcCgpLmVuY29kZSgidXRmLTgiKSAjICsgIlxuIgot
ICAgICAgICAgICAgI2NvbnRlbnQgPSBjb250ZW50LnJzdHJpcCgpICsgIlxuIgotICAgICAgICAg
ICAgcC53cml0ZShjb250ZW50LCAid2IiKQotICAgICAgICAgICAgaWYgcmV0IGlzIE5vbmU6Ci0g
ICAgICAgICAgICAgICAgcmV0ID0gcAotICAgICAgICByZXR1cm4gcmV0Ci0KLSAgICBkZWYgbWFr
ZWZpbGUoc2VsZiwgZXh0LCAqYXJncywgKiprd2FyZ3MpOgotICAgICAgICAiIiJDcmVhdGUgYSBu
ZXcgZmlsZSBpbiB0aGUgdGVzdGRpci4KLQotICAgICAgICBleHQ6IFRoZSBleHRlbnNpb24gdGhl
IGZpbGUgc2hvdWxkIHVzZSwgaW5jbHVkaW5nIHRoZSBkb3QuCi0gICAgICAgICAgIEUuZy4gIi5w
eSIuCi0KLSAgICAgICAgYXJnczogQWxsIGFyZ3Mgd2lsbCBiZSB0cmVhdGVkIGFzIHN0cmluZ3Mg
YW5kIGpvaW5lZCB1c2luZwotICAgICAgICAgICBuZXdsaW5lcy4gIFRoZSByZXN1bHQgd2lsbCBi
ZSB3cml0dGVuIGFzIGNvbnRlbnRzIHRvIHRoZQotICAgICAgICAgICBmaWxlLiAgVGhlIG5hbWUg
b2YgdGhlIGZpbGUgd2lsbCBiZSBiYXNlZCBvbiB0aGUgdGVzdAotICAgICAgICAgICBmdW5jdGlv
biByZXF1ZXN0aW5nIHRoaXMgZml4dHVyZS4KLSAgICAgICAgICAgRS5nLiAidGVzdGRpci5tYWtl
ZmlsZSgnLnR4dCcsICdsaW5lMScsICdsaW5lMicpIgotCi0gICAgICAgIGt3YXJnczogRWFjaCBr
ZXl3b3JkIGlzIHRoZSBuYW1lIG9mIGEgZmlsZSwgd2hpbGUgdGhlIHZhbHVlIG9mCi0gICAgICAg
ICAgIGl0IHdpbGwgYmUgd3JpdHRlbiBhcyBjb250ZW50cyBvZiB0aGUgZmlsZS4KLSAgICAgICAg
ICAgRS5nLiAidGVzdGRpci5tYWtlZmlsZSgnLmluaScsIHB5dGVzdD0nW3B5dGVzdF1cbmFkZG9w
dHM9LXJzXG4nKSIKLQotICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJuIHNlbGYuX21ha2VmaWxl
KGV4dCwgYXJncywga3dhcmdzKQotCi0gICAgZGVmIG1ha2Vjb25mdGVzdChzZWxmLCBzb3VyY2Up
OgotICAgICAgICAiIiJXcml0ZSBhIGNvbnRlc3QucHkgZmlsZSB3aXRoICdzb3VyY2UnIGFzIGNv
bnRlbnRzLiIiIgotICAgICAgICByZXR1cm4gc2VsZi5tYWtlcHlmaWxlKGNvbmZ0ZXN0PXNvdXJj
ZSkKLQotICAgIGRlZiBtYWtlaW5pKHNlbGYsIHNvdXJjZSk6Ci0gICAgICAgICIiIldyaXRlIGEg
dG94LmluaSBmaWxlIHdpdGggJ3NvdXJjZScgYXMgY29udGVudHMuIiIiCi0gICAgICAgIHJldHVy
biBzZWxmLm1ha2VmaWxlKCcuaW5pJywgdG94PXNvdXJjZSkKLQotICAgIGRlZiBnZXRpbmljZmco
c2VsZiwgc291cmNlKToKLSAgICAgICAgIiIiUmV0dXJuIHRoZSBweXRlc3Qgc2VjdGlvbiBmcm9t
IHRoZSB0b3guaW5pIGNvbmZpZyBmaWxlLiIiIgotICAgICAgICBwID0gc2VsZi5tYWtlaW5pKHNv
dXJjZSkKLSAgICAgICAgcmV0dXJuIHB5LmluaWNvbmZpZy5JbmlDb25maWcocClbJ3B5dGVzdCdd
Ci0KLSAgICBkZWYgbWFrZXB5ZmlsZShzZWxmLCAqYXJncywgKiprd2FyZ3MpOgotICAgICAgICAi
IiJTaG9ydGN1dCBmb3IgLm1ha2VmaWxlKCkgd2l0aCBhIC5weSBleHRlbnNpb24uIiIiCi0gICAg
ICAgIHJldHVybiBzZWxmLl9tYWtlZmlsZSgnLnB5JywgYXJncywga3dhcmdzKQotCi0gICAgZGVm
IG1ha2V0eHRmaWxlKHNlbGYsICphcmdzLCAqKmt3YXJncyk6Ci0gICAgICAgICIiIlNob3J0Y3V0
IGZvciAubWFrZWZpbGUoKSB3aXRoIGEgLnR4dCBleHRlbnNpb24uIiIiCi0gICAgICAgIHJldHVy
biBzZWxmLl9tYWtlZmlsZSgnLnR4dCcsIGFyZ3MsIGt3YXJncykKLQotICAgIGRlZiBzeXNwYXRo
aW5zZXJ0KHNlbGYsIHBhdGg9Tm9uZSk6Ci0gICAgICAgICIiIlByZXBlbmQgYSBkaXJlY3Rvcnkg
dG8gc3lzLnBhdGgsIGRlZmF1bHRzIHRvIDpweTphdHRyOmB0bXBkaXJgLgotCi0gICAgICAgIFRo
aXMgaXMgdW5kb25lIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgdGhlIHRlc3QuCi0gICAgICAgICIiIgot
ICAgICAgICBpZiBwYXRoIGlzIE5vbmU6Ci0gICAgICAgICAgICBwYXRoID0gc2VsZi50bXBkaXIK
LSAgICAgICAgc3lzLnBhdGguaW5zZXJ0KDAsIHN0cihwYXRoKSkKLSAgICAgICAgIyBhIGNhbGwg
dG8gc3lzcGF0aGluc2VydCgpIHVzdWFsbHkgbWVhbnMgdGhhdCB0aGUgY2FsbGVyCi0gICAgICAg
ICMgd2FudHMgdG8gaW1wb3J0IHNvbWUgZHluYW1pY2FsbHkgY3JlYXRlZCBmaWxlcy4KLSAgICAg
ICAgIyB3aXRoIHB5dGhvbjMgd2UgdGh1cyBpbnZhbGlkYXRlIGltcG9ydCBjYWNoZXMuCi0gICAg
ICAgIHNlbGYuX3Bvc3NpYmx5X2ludmFsaWRhdGVfaW1wb3J0X2NhY2hlcygpCi0KLSAgICBkZWYg
X3Bvc3NpYmx5X2ludmFsaWRhdGVfaW1wb3J0X2NhY2hlcyhzZWxmKToKLSAgICAgICAgIyBpbnZh
bGlkYXRlIGNhY2hlcyBpZiB3ZSBjYW4gKHB5MzMgYW5kIGFib3ZlKQotICAgICAgICB0cnk6Ci0g
ICAgICAgICAgICBpbXBvcnQgaW1wb3J0bGliCi0gICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoK
LSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGlmIGhhc2F0dHIo
aW1wb3J0bGliLCAiaW52YWxpZGF0ZV9jYWNoZXMiKToKLSAgICAgICAgICAgICAgICBpbXBvcnRs
aWIuaW52YWxpZGF0ZV9jYWNoZXMoKQotCi0gICAgZGVmIG1rZGlyKHNlbGYsIG5hbWUpOgotICAg
ICAgICAiIiJDcmVhdGUgYSBuZXcgKHN1YilkaXJlY3RvcnkuIiIiCi0gICAgICAgIHJldHVybiBz
ZWxmLnRtcGRpci5ta2RpcihuYW1lKQotCi0gICAgZGVmIG1rcHlkaXIoc2VsZiwgbmFtZSk6Ci0g
ICAgICAgICIiIkNyZWF0ZSBhIG5ldyBweXRob24gcGFja2FnZS4KLQotICAgICAgICBUaGlzIGNy
ZWF0ZXMgYSAoc3ViKWRpcmVjb3RyeSB3aXRoIGFuIGVtcHR5IGBgX19pbml0X18ucHlgYAotICAg
ICAgICBmaWxlIHNvIHRoYXQgaXMgcmVjb2duaXNlZCBhcyBhIHB5dGhvbiBwYWNrYWdlLgotCi0g
ICAgICAgICIiIgotICAgICAgICBwID0gc2VsZi5ta2RpcihuYW1lKQotICAgICAgICBwLmVuc3Vy
ZSgiX19pbml0X18ucHkiKQotICAgICAgICByZXR1cm4gcAotCi0gICAgU2Vzc2lvbiA9IFNlc3Np
b24KLSAgICBkZWYgZ2V0bm9kZShzZWxmLCBjb25maWcsIGFyZyk6Ci0gICAgICAgICIiIlJldHVy
biB0aGUgY29sbGVjdGlvbiBub2RlIG9mIGEgZmlsZS4KLQotICAgICAgICA6cGFyYW0gY29uZmln
OiA6cHk6Y2xhc3M6YF9weXRlc3QuY29uZmlnLkNvbmZpZ2AgaW5zdGFuY2UsIHNlZQotICAgICAg
ICAgICA6cHk6bWV0aDpgcGFyc2Vjb25maWdgIGFuZCA6cHk6bWV0aDpgcGFyc2Vjb25maWd1cmVg
IHRvCi0gICAgICAgICAgIGNyZWF0ZSB0aGUgY29uZmlndXJhdGlvbi4KLQotICAgICAgICA6cGFy
YW0gYXJnOiBBIDpweTpjbGFzczpgcHkucGF0aC5sb2NhbGAgaW5zdGFuY2Ugb2YgdGhlIGZpbGUu
Ci0KLSAgICAgICAgIiIiCi0gICAgICAgIHNlc3Npb24gPSBTZXNzaW9uKGNvbmZpZykKLSAgICAg
ICAgYXNzZXJ0ICc6Oicgbm90IGluIHN0cihhcmcpCi0gICAgICAgIHAgPSBweS5wYXRoLmxvY2Fs
KGFyZykKLSAgICAgICAgY29uZmlnLmhvb2sucHl0ZXN0X3Nlc3Npb25zdGFydChzZXNzaW9uPXNl
c3Npb24pCi0gICAgICAgIHJlcyA9IHNlc3Npb24ucGVyZm9ybV9jb2xsZWN0KFtzdHIocCldLCBn
ZW5pdGVtcz1GYWxzZSlbMF0KLSAgICAgICAgY29uZmlnLmhvb2sucHl0ZXN0X3Nlc3Npb25maW5p
c2goc2Vzc2lvbj1zZXNzaW9uLCBleGl0c3RhdHVzPUVYSVRfT0spCi0gICAgICAgIHJldHVybiBy
ZXMKLQotICAgIGRlZiBnZXRwYXRobm9kZShzZWxmLCBwYXRoKToKLSAgICAgICAgIiIiUmV0dXJu
IHRoZSBjb2xsZWN0aW9uIG5vZGUgb2YgYSBmaWxlLgotCi0gICAgICAgIFRoaXMgaXMgbGlrZSA6
cHk6bWV0aDpgZ2V0bm9kZWAgYnV0IHVzZXMKLSAgICAgICAgOnB5Om1ldGg6YHBhcnNlY29uZmln
dXJlYCB0byBjcmVhdGUgdGhlIChjb25maWd1cmVkKSBweS50ZXN0Ci0gICAgICAgIENvbmZpZyBp
bnN0YW5jZS4KLQotICAgICAgICA6cGFyYW0gcGF0aDogQSA6cHk6Y2xhc3M6YHB5LnBhdGgubG9j
YWxgIGluc3RhbmNlIG9mIHRoZSBmaWxlLgotCi0gICAgICAgICIiIgotICAgICAgICBjb25maWcg
PSBzZWxmLnBhcnNlY29uZmlndXJlKHBhdGgpCi0gICAgICAgIHNlc3Npb24gPSBTZXNzaW9uKGNv
bmZpZykKLSAgICAgICAgeCA9IHNlc3Npb24uZnNwYXRoLmJlc3RyZWxwYXRoKHBhdGgpCi0gICAg
ICAgIGNvbmZpZy5ob29rLnB5dGVzdF9zZXNzaW9uc3RhcnQoc2Vzc2lvbj1zZXNzaW9uKQotICAg
ICAgICByZXMgPSBzZXNzaW9uLnBlcmZvcm1fY29sbGVjdChbeF0sIGdlbml0ZW1zPUZhbHNlKVsw
XQotICAgICAgICBjb25maWcuaG9vay5weXRlc3Rfc2Vzc2lvbmZpbmlzaChzZXNzaW9uPXNlc3Np
b24sIGV4aXRzdGF0dXM9RVhJVF9PSykKLSAgICAgICAgcmV0dXJuIHJlcwotCi0gICAgZGVmIGdl
bml0ZW1zKHNlbGYsIGNvbGl0ZW1zKToKLSAgICAgICAgIiIiR2VuZXJhdGUgYWxsIHRlc3QgaXRl
bXMgZnJvbSBhIGNvbGxlY3Rpb24gbm9kZS4KLQotICAgICAgICBUaGlzIHJlY3Vyc2VzIGludG8g
dGhlIGNvbGxlY3Rpb24gbm9kZSBhbmQgcmV0dXJucyBhIGxpc3Qgb2YKLSAgICAgICAgYWxsIHRo
ZSB0ZXN0IGl0ZW1zIGNvbnRhaW5lZCB3aXRoaW4uCi0KLSAgICAgICAgIiIiCi0gICAgICAgIHNl
c3Npb24gPSBjb2xpdGVtc1swXS5zZXNzaW9uCi0gICAgICAgIHJlc3VsdCA9IFtdCi0gICAgICAg
IGZvciBjb2xpdGVtIGluIGNvbGl0ZW1zOgotICAgICAgICAgICAgcmVzdWx0LmV4dGVuZChzZXNz
aW9uLmdlbml0ZW1zKGNvbGl0ZW0pKQotICAgICAgICByZXR1cm4gcmVzdWx0Ci0KLSAgICBkZWYg
cnVuaXRlbShzZWxmLCBzb3VyY2UpOgotICAgICAgICAiIiJSdW4gdGhlICJ0ZXN0X2Z1bmMiIEl0
ZW0uCi0KLSAgICAgICAgVGhlIGNhbGxpbmcgdGVzdCBpbnN0YW5jZSAodGhlIGNsYXNzIHdoaWNo
IGNvbnRhaW5zIHRoZSB0ZXN0Ci0gICAgICAgIG1ldGhvZCkgbXVzdCBwcm92aWRlIGEgYGAuZ2V0
cnVubmVyKClgYCBtZXRob2Qgd2hpY2ggc2hvdWxkCi0gICAgICAgIHJldHVybiBhIHJ1bm5lciB3
aGljaCBjYW4gcnVuIHRoZSB0ZXN0IHByb3RvY29sIGZvciBhIHNpbmdsZQotICAgICAgICBpdGVt
LCBsaWtlIGUuZy4gOnB5OmZ1bmM6YF9weXRlc3QucnVubmVyLnJ1bnRlc3Rwcm90b2NvbGAuCi0K
LSAgICAgICAgIiIiCi0gICAgICAgICMgdXNlZCBmcm9tIHJ1bm5lciBmdW5jdGlvbmFsIHRlc3Rz
Ci0gICAgICAgIGl0ZW0gPSBzZWxmLmdldGl0ZW0oc291cmNlKQotICAgICAgICAjIHRoZSB0ZXN0
IGNsYXNzIHdoZXJlIHdlIGFyZSBjYWxsZWQgZnJvbSB3YW50cyB0byBwcm92aWRlIHRoZSBydW5u
ZXIKLSAgICAgICAgdGVzdGNsYXNzaW5zdGFuY2UgPSBzZWxmLnJlcXVlc3QuaW5zdGFuY2UKLSAg
ICAgICAgcnVubmVyID0gdGVzdGNsYXNzaW5zdGFuY2UuZ2V0cnVubmVyKCkKLSAgICAgICAgcmV0
dXJuIHJ1bm5lcihpdGVtKQotCi0gICAgZGVmIGlubGluZV9ydW5zb3VyY2Uoc2VsZiwgc291cmNl
LCAqY21kbGluZWFyZ3MpOgotICAgICAgICAiIiJSdW4gYSB0ZXN0IG1vZHVsZSBpbiBwcm9jZXNz
IHVzaW5nIGBgcHl0ZXN0Lm1haW4oKWBgLgotCi0gICAgICAgIFRoaXMgcnVuIHdyaXRlcyAic291
cmNlIiBpbnRvIGEgdGVtcG9yYXJ5IGZpbGUgYW5kIHJ1bnMKLSAgICAgICAgYGBweXRlc3QubWFp
bigpYGAgb24gaXQsIHJldHVybmluZyBhIDpweTpjbGFzczpgSG9va1JlY29yZGVyYAotICAgICAg
ICBpbnN0YW5jZSBmb3IgdGhlIHJlc3VsdC4KLQotICAgICAgICA6cGFyYW0gc291cmNlOiBUaGUg
c291cmNlIGNvZGUgb2YgdGhlIHRlc3QgbW9kdWxlLgotCi0gICAgICAgIDpwYXJhbSBjbWRsaW5l
YXJnczogQW55IGV4dHJhIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgdG8gdXNlLgotCi0gICAgICAg
IDpyZXR1cm46IDpweTpjbGFzczpgSG9va1JlY29yZGVyYCBpbnN0YW5jZSBvZiB0aGUgcmVzdWx0
LgotCi0gICAgICAgICIiIgotICAgICAgICBwID0gc2VsZi5tYWtlcHlmaWxlKHNvdXJjZSkKLSAg
ICAgICAgbCA9IGxpc3QoY21kbGluZWFyZ3MpICsgW3BdCi0gICAgICAgIHJldHVybiBzZWxmLmlu
bGluZV9ydW4oKmwpCi0KLSAgICBkZWYgaW5saW5lX2dlbml0ZW1zKHNlbGYsICphcmdzKToKLSAg
ICAgICAgIiIiUnVuIGBgcHl0ZXN0Lm1haW4oWyctLWNvbGxlY3Rvbmx5J10pYGAgaW4tcHJvY2Vz
cy4KLQotICAgICAgICBSZXR1bnMgYSB0dXBsZSBvZiB0aGUgY29sbGVjdGVkIGl0ZW1zIGFuZCBh
Ci0gICAgICAgIDpweTpjbGFzczpgSG9va1JlY29yZGVyYCBpbnN0YW5jZS4KLQotICAgICAgICBU
aGlzIHJ1bnMgdGhlIDpweTpmdW5jOmBweXRlc3QubWFpbmAgZnVuY3Rpb24gdG8gcnVuIGFsbCBv
ZgotICAgICAgICBweS50ZXN0IGluc2lkZSB0aGUgdGVzdCBwcm9jZXNzIGl0c2VsZiBsaWtlCi0g
ICAgICAgIDpweTptZXRoOmBpbmxpbmVfcnVuYC4gIEhvd2V2ZXIgdGhlIHJldHVybiB2YWx1ZSBp
cyBhIHR1cGxlIG9mCi0gICAgICAgIHRoZSBjb2xsZWN0aW9uIGl0ZW1zIGFuZCBhIDpweTpjbGFz
czpgSG9va1JlY29yZGVyYCBpbnN0YW5jZS4KLQotICAgICAgICAiIiIKLSAgICAgICAgcmVjID0g
c2VsZi5pbmxpbmVfcnVuKCItLWNvbGxlY3Qtb25seSIsICphcmdzKQotICAgICAgICBpdGVtcyA9
IFt4Lml0ZW0gZm9yIHggaW4gcmVjLmdldGNhbGxzKCJweXRlc3RfaXRlbWNvbGxlY3RlZCIpXQot
ICAgICAgICByZXR1cm4gaXRlbXMsIHJlYwotCi0gICAgZGVmIGlubGluZV9ydW4oc2VsZiwgKmFy
Z3MsICoqa3dhcmdzKToKLSAgICAgICAgIiIiUnVuIGBgcHl0ZXN0Lm1haW4oKWBgIGluLXByb2Nl
c3MsIHJldHVybmluZyBhIEhvb2tSZWNvcmRlci4KLQotICAgICAgICBUaGlzIHJ1bnMgdGhlIDpw
eTpmdW5jOmBweXRlc3QubWFpbmAgZnVuY3Rpb24gdG8gcnVuIGFsbCBvZgotICAgICAgICBweS50
ZXN0IGluc2lkZSB0aGUgdGVzdCBwcm9jZXNzIGl0c2VsZi4gIFRoaXMgbWVhbnMgaXQgY2FuCi0g
ICAgICAgIHJldHVybiBhIDpweTpjbGFzczpgSG9va1JlY29yZGVyYCBpbnN0YW5jZSB3aGljaCBn
aXZlcyBtb3JlCi0gICAgICAgIGRldGFpbGVkIHJlc3VsdHMgZnJvbSB0aGVuIHJ1biB0aGVuIGNh
biBiZSBkb25lIGJ5IG1hdGNoaW5nCi0gICAgICAgIHN0ZG91dC9zdGRlcnIgZnJvbSA6cHk6bWV0
aDpgcnVucHl0ZXN0YC4KLQotICAgICAgICA6cGFyYW0gYXJnczogQW55IGNvbW1hbmQgbGluZSBh
cmd1bWVudHMgdG8gcGFzcyB0bwotICAgICAgICAgICA6cHk6ZnVuYzpgcHl0ZXN0Lm1haW5gLgot
Ci0gICAgICAgIDpwYXJhbSBwbHVnaW46IChrZXl3b3JkLW9ubHkpIEV4dHJhIHBsdWdpbiBpbnN0
YW5jZXMgdGhlCi0gICAgICAgICAgIGBgcHl0ZXN0Lm1haW4oKWBgIGluc3RhbmNlIHNob3VsZCB1
c2UuCi0KLSAgICAgICAgOnJldHVybjogQSA6cHk6Y2xhc3M6YEhvb2tSZWNvcmRlcmAgaW5zdGFu
Y2UuCi0KLSAgICAgICAgIiIiCi0gICAgICAgIHJlYyA9IFtdCi0gICAgICAgIGNsYXNzIENvbGxl
Y3Q6Ci0gICAgICAgICAgICBkZWYgcHl0ZXN0X2NvbmZpZ3VyZSh4LCBjb25maWcpOgotICAgICAg
ICAgICAgICAgIHJlYy5hcHBlbmQoc2VsZi5tYWtlX2hvb2tfcmVjb3JkZXIoY29uZmlnLnBsdWdp
bm1hbmFnZXIpKQotCi0gICAgICAgIHBsdWdpbnMgPSBrd2FyZ3MuZ2V0KCJwbHVnaW5zIikgb3Ig
W10KLSAgICAgICAgcGx1Z2lucy5hcHBlbmQoQ29sbGVjdCgpKQotICAgICAgICByZXQgPSBweXRl
c3QubWFpbihsaXN0KGFyZ3MpLCBwbHVnaW5zPXBsdWdpbnMpCi0gICAgICAgIHNlbGYuZGVsZXRl
X2xvYWRlZF9tb2R1bGVzKCkKLSAgICAgICAgaWYgbGVuKHJlYykgPT0gMToKLSAgICAgICAgICAg
IHJlcHJlYyA9IHJlYy5wb3AoKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgY2xhc3MgcmVw
cmVjOgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgcmVwcmVjLnJldCA9IHJldAotCi0g
ICAgICAgICMgdHlwaWNhbGx5IHdlIHJlcmFpc2Uga2V5Ym9hcmQgaW50ZXJydXB0cyBmcm9tIHRo
ZSBjaGlsZCBydW4KLSAgICAgICAgIyBiZWNhdXNlIGl0J3Mgb3VyIHVzZXIgcmVxdWVzdGluZyBp
bnRlcnJ1cHRpb24gb2YgdGhlIHRlc3RpbmcKLSAgICAgICAgaWYgcmV0ID09IDIgYW5kIG5vdCBr
d2FyZ3MuZ2V0KCJub19yZXJhaXNlX2N0cmxjIik6Ci0gICAgICAgICAgICBjYWxscyA9IHJlcHJl
Yy5nZXRjYWxscygicHl0ZXN0X2tleWJvYXJkX2ludGVycnVwdCIpCi0gICAgICAgICAgICBpZiBj
YWxscyBhbmQgY2FsbHNbLTFdLmV4Y2luZm8udHlwZSA9PSBLZXlib2FyZEludGVycnVwdDoKLSAg
ICAgICAgICAgICAgICByYWlzZSBLZXlib2FyZEludGVycnVwdCgpCi0gICAgICAgIHJldHVybiBy
ZXByZWMKLQotICAgIGRlZiBydW5weXRlc3RfaW5wcm9jZXNzKHNlbGYsICphcmdzLCAqKmt3YXJn
cyk6Ci0gICAgICAgICIiIiBSZXR1cm4gcmVzdWx0IG9mIHJ1bm5pbmcgcHl0ZXN0IGluLXByb2Nl
c3MsIHByb3ZpZGluZyBhIHNpbWlsYXIKLSAgICAgICAgaW50ZXJmYWNlIHRvIHdoYXQgc2VsZi5y
dW5weXRlc3QoKSBwcm92aWRlcy4gIiIiCi0gICAgICAgIGlmIGt3YXJncy5nZXQoInN5c3BhdGhp
bnNlcnQiKToKLSAgICAgICAgICAgIHNlbGYuc3lzcGF0aGluc2VydCgpCi0gICAgICAgIG5vdyA9
IHRpbWUudGltZSgpCi0gICAgICAgIGNhcHR1cmUgPSBweS5pby5TdGRDYXB0dXJlKCkKLSAgICAg
ICAgdHJ5OgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHJlcHJlYyA9IHNlbGYu
aW5saW5lX3J1bigqYXJncywgKiprd2FyZ3MpCi0gICAgICAgICAgICBleGNlcHQgU3lzdGVtRXhp
dCBhcyBlOgotICAgICAgICAgICAgICAgIGNsYXNzIHJlcHJlYzoKLSAgICAgICAgICAgICAgICAg
ICAgcmV0ID0gZS5hcmdzWzBdCi0gICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgotICAgICAg
ICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoKQotICAgICAgICAgICAgICAgIGNsYXNzIHJl
cHJlYzoKLSAgICAgICAgICAgICAgICAgICAgcmV0ID0gMwotICAgICAgICBmaW5hbGx5OgotICAg
ICAgICAgICAgb3V0LCBlcnIgPSBjYXB0dXJlLnJlc2V0KCkKLSAgICAgICAgICAgIHN5cy5zdGRv
dXQud3JpdGUob3V0KQotICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZShlcnIpCi0KLSAgICAg
ICAgcmVzID0gUnVuUmVzdWx0KHJlcHJlYy5yZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICBv
dXQuc3BsaXQoIlxuIiksIGVyci5zcGxpdCgiXG4iKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
IHRpbWUudGltZSgpLW5vdykKLSAgICAgICAgcmVzLnJlcHJlYyA9IHJlcHJlYwotICAgICAgICBy
ZXR1cm4gcmVzCi0KLSAgICBkZWYgcnVucHl0ZXN0KHNlbGYsICphcmdzLCAqKmt3YXJncyk6Ci0g
ICAgICAgICIiIiBSdW4gcHl0ZXN0IGlubGluZSBvciBpbiBhIHN1YnByb2Nlc3MsIGRlcGVuZGlu
ZyBvbiB0aGUgY29tbWFuZCBsaW5lCi0gICAgICAgIG9wdGlvbiAiLS1ydW5weXRlc3QiIGFuZCBy
ZXR1cm4gYSA6cHk6Y2xhc3M6YFJ1blJlc3VsdGAuCi0KLSAgICAgICAgIiIiCi0gICAgICAgIGFy
Z3MgPSBzZWxmLl9lbnN1cmVfYmFzZXRlbXAoYXJncykKLSAgICAgICAgcmV0dXJuIHNlbGYuX3J1
bnB5dGVzdF9tZXRob2QoKmFyZ3MsICoqa3dhcmdzKQotCi0gICAgZGVmIF9lbnN1cmVfYmFzZXRl
bXAoc2VsZiwgYXJncyk6Ci0gICAgICAgIGFyZ3MgPSBbc3RyKHgpIGZvciB4IGluIGFyZ3NdCi0g
ICAgICAgIGZvciB4IGluIGFyZ3M6Ci0gICAgICAgICAgICBpZiBzdHIoeCkuc3RhcnRzd2l0aCgn
LS1iYXNldGVtcCcpOgotICAgICAgICAgICAgICAgICNwcmludCAoImJhc2VkdGVtcCBleGlzdHM6
ICVzIiAlKGFyZ3MsKSkKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICBlbHNlOgotICAg
ICAgICAgICAgYXJncy5hcHBlbmQoIi0tYmFzZXRlbXA9JXMiICUgc2VsZi50bXBkaXIuZGlycGF0
aCgnYmFzZXRlbXAnKSkKLSAgICAgICAgICAgICNwcmludCAoImFkZGVkIGJhc2V0ZW1wOiAlcyIg
JShhcmdzLCkpCi0gICAgICAgIHJldHVybiBhcmdzCi0KLSAgICBkZWYgcGFyc2Vjb25maWcoc2Vs
ZiwgKmFyZ3MpOgotICAgICAgICAiIiJSZXR1cm4gYSBuZXcgcHkudGVzdCBDb25maWcgaW5zdGFu
Y2UgZnJvbSBnaXZlbiBjb21tYW5kbGluZSBhcmdzLgotCi0gICAgICAgIFRoaXMgaW52b2tlcyB0
aGUgcHkudGVzdCBib290c3RyYXBwaW5nIGNvZGUgaW4gX3B5dGVzdC5jb25maWcKLSAgICAgICAg
dG8gY3JlYXRlIGEgbmV3IDpweTpjbGFzczpgX3B5dGVzdC5jb3JlLlBsdWdpbk1hbmFnZXJgIGFu
ZAotICAgICAgICBjYWxsIHRoZSBweXRlc3RfY21kbGluZV9wYXJzZSBob29rIHRvIGNyZWF0ZSBu
ZXcKLSAgICAgICAgOnB5OmNsYXNzOmBfcHl0ZXN0LmNvbmZpZy5Db25maWdgIGluc3RhbmNlLgot
Ci0gICAgICAgIElmIDpweTphdHRyOmBwbHVnaW5zYCBoYXMgYmVlbiBwb3B1bGF0ZWQgdGhleSBz
aG91bGQgYmUgcGx1Z2luCi0gICAgICAgIG1vZHVsZXMgd2hpY2ggd2lsbCBiZSByZWdpc3RlcmVk
IHdpdGggdGhlIFBsdWdpbk1hbmFnZXIuCi0KLSAgICAgICAgIiIiCi0gICAgICAgIGFyZ3MgPSBz
ZWxmLl9lbnN1cmVfYmFzZXRlbXAoYXJncykKLQotICAgICAgICBpbXBvcnQgX3B5dGVzdC5jb25m
aWcKLSAgICAgICAgY29uZmlnID0gX3B5dGVzdC5jb25maWcuX3ByZXBhcmVjb25maWcoYXJncywg
c2VsZi5wbHVnaW5zKQotICAgICAgICAjIHdlIGRvbid0IGtub3cgd2hhdCB0aGUgdGVzdCB3aWxs
IGRvIHdpdGggdGhpcyBoYWxmLXNldHVwIGNvbmZpZwotICAgICAgICAjIG9iamVjdCBhbmQgdGh1
cyB3ZSBtYWtlIHN1cmUgaXQgZ2V0cyB1bmNvbmZpZ3VyZWQgcHJvcGVybHkgaW4gYW55Ci0gICAg
ICAgICMgY2FzZSAob3RoZXJ3aXNlIGNhcHR1cmluZyBjb3VsZCBzdGlsbCBiZSBhY3RpdmUsIGZv
ciBleGFtcGxlKQotICAgICAgICBzZWxmLnJlcXVlc3QuYWRkZmluYWxpemVyKGNvbmZpZy5fZW5z
dXJlX3VuY29uZmlndXJlKQotICAgICAgICByZXR1cm4gY29uZmlnCi0KLSAgICBkZWYgcGFyc2Vj
b25maWd1cmUoc2VsZiwgKmFyZ3MpOgotICAgICAgICAiIiJSZXR1cm4gYSBuZXcgcHkudGVzdCBj
b25maWd1cmVkIENvbmZpZyBpbnN0YW5jZS4KLQotICAgICAgICBUaGlzIHJldHVybnMgYSBuZXcg
OnB5OmNsYXNzOmBfcHl0ZXN0LmNvbmZpZy5Db25maWdgIGluc3RhbmNlCi0gICAgICAgIGxpa2Ug
OnB5Om1ldGg6YHBhcnNlY29uZmlnYCwgYnV0IGFsc28gY2FsbHMgdGhlCi0gICAgICAgIHB5dGVz
dF9jb25maWd1cmUgaG9vay4KLQotICAgICAgICAiIiIKLSAgICAgICAgY29uZmlnID0gc2VsZi5w
YXJzZWNvbmZpZygqYXJncykKLSAgICAgICAgY29uZmlnLl9kb19jb25maWd1cmUoKQotICAgICAg
ICBzZWxmLnJlcXVlc3QuYWRkZmluYWxpemVyKGNvbmZpZy5fZW5zdXJlX3VuY29uZmlndXJlKQot
ICAgICAgICByZXR1cm4gY29uZmlnCi0KLSAgICBkZWYgZ2V0aXRlbShzZWxmLCAgc291cmNlLCBm
dW5jbmFtZT0idGVzdF9mdW5jIik6Ci0gICAgICAgICIiIlJldHVybiB0aGUgdGVzdCBpdGVtIGZv
ciBhIHRlc3QgZnVuY3Rpb24uCi0KLSAgICAgICAgVGhpcyB3cml0ZXMgdGhlIHNvdXJjZSB0byBh
IHB5dGhvbiBmaWxlIGFuZCBydW5zIHB5LnRlc3QncwotICAgICAgICBjb2xsZWN0aW9uIG9uIHRo
ZSByZXN1bHRpbmcgbW9kdWxlLCByZXR1cm5pbmcgdGhlIHRlc3QgaXRlbQotICAgICAgICBmb3Ig
dGhlIHJlcXVlc3RlZCBmdW5jdGlvbiBuYW1lLgotCi0gICAgICAgIDpwYXJhbSBzb3VyY2U6IFRo
ZSBtb2R1bGUgc291cmNlLgotCi0gICAgICAgIDpwYXJhbSBmdW5jbmFtZTogVGhlIG5hbWUgb2Yg
dGhlIHRlc3QgZnVuY3Rpb24gZm9yIHdoaWNoIHRoZQotICAgICAgICAgICBJdGVtIG11c3QgYmUg
cmV0dXJuZWQuCi0KLSAgICAgICAgIiIiCi0gICAgICAgIGl0ZW1zID0gc2VsZi5nZXRpdGVtcyhz
b3VyY2UpCi0gICAgICAgIGZvciBpdGVtIGluIGl0ZW1zOgotICAgICAgICAgICAgaWYgaXRlbS5u
YW1lID09IGZ1bmNuYW1lOgotICAgICAgICAgICAgICAgIHJldHVybiBpdGVtCi0gICAgICAgIGFz
c2VydCAwLCAiJXIgaXRlbSBub3QgZm91bmQgaW4gbW9kdWxlOlxuJXNcbml0ZW1zOiAlcyIgJSgK
LSAgICAgICAgICAgICAgICAgIGZ1bmNuYW1lLCBzb3VyY2UsIGl0ZW1zKQotCi0gICAgZGVmIGdl
dGl0ZW1zKHNlbGYsICBzb3VyY2UpOgotICAgICAgICAiIiJSZXR1cm4gYWxsIHRlc3QgaXRlbXMg
Y29sbGVjdGVkIGZyb20gdGhlIG1vZHVsZS4KLQotICAgICAgICBUaGlzIHdyaXRlcyB0aGUgc291
cmNlIHRvIGEgcHl0aG9uIGZpbGUgYW5kIHJ1bnMgcHkudGVzdCdzCi0gICAgICAgIGNvbGxlY3Rp
b24gb24gdGhlIHJlc3VsdGluZyBtb2R1bGUsIHJldHVybmluZyBhbGwgdGVzdCBpdGVtcwotICAg
ICAgICBjb250YWluZWQgd2l0aGluLgotCi0gICAgICAgICIiIgotICAgICAgICBtb2Rjb2wgPSBz
ZWxmLmdldG1vZHVsZWNvbChzb3VyY2UpCi0gICAgICAgIHJldHVybiBzZWxmLmdlbml0ZW1zKFtt
b2Rjb2xdKQotCi0gICAgZGVmIGdldG1vZHVsZWNvbChzZWxmLCAgc291cmNlLCBjb25maWdhcmdz
PSgpLCB3aXRoaW5pdD1GYWxzZSk6Ci0gICAgICAgICIiIlJldHVybiB0aGUgbW9kdWxlIGNvbGxl
Y3Rpb24gbm9kZSBmb3IgYGBzb3VyY2VgYC4KLQotICAgICAgICBUaGlzIHdyaXRlcyBgYHNvdXJj
ZWBgIHRvIGEgZmlsZSB1c2luZyA6cHk6bWV0aDpgbWFrZXB5ZmlsZWAKLSAgICAgICAgYW5kIHRo
ZW4gcnVucyB0aGUgcHkudGVzdCBjb2xsZWN0aW9uIG9uIGl0LCByZXR1cm5pbmcgdGhlCi0gICAg
ICAgIGNvbGxlY3Rpb24gbm9kZSBmb3IgdGhlIHRlc3QgbW9kdWxlLgotCi0gICAgICAgIDpwYXJh
bSBzb3VyY2U6IFRoZSBzb3VyY2UgY29kZSBvZiB0aGUgbW9kdWxlIHRvIGNvbGxlY3QuCi0KLSAg
ICAgICAgOnBhcmFtIGNvbmZpZ2FyZ3M6IEFueSBleHRyYSBhcmd1bWVudHMgdG8gcGFzcyB0bwot
ICAgICAgICAgICA6cHk6bWV0aDpgcGFyc2Vjb25maWd1cmVgLgotCi0gICAgICAgIDpwYXJhbSB3
aXRoaW5pdDogV2hldGhlciB0byBhbHNvIHdyaXRlIGEgYGBfX2luaXRfXy5weWBgIGZpbGUKLSAg
ICAgICAgICAgdG8gdGhlIHRlbXBvcmFybHkgZGlyZWN0b3J5IHRvIGVuc3VyZSBpdCBpcyBhIHBh
Y2thZ2UuCi0KLSAgICAgICAgIiIiCi0gICAgICAgIGt3ID0ge3NlbGYucmVxdWVzdC5mdW5jdGlv
bi5fX25hbWVfXzogU291cmNlKHNvdXJjZSkuc3RyaXAoKX0KLSAgICAgICAgcGF0aCA9IHNlbGYu
bWFrZXB5ZmlsZSgqKmt3KQotICAgICAgICBpZiB3aXRoaW5pdDoKLSAgICAgICAgICAgIHNlbGYu
bWFrZXB5ZmlsZShfX2luaXRfXyA9ICIjIikKLSAgICAgICAgc2VsZi5jb25maWcgPSBjb25maWcg
PSBzZWxmLnBhcnNlY29uZmlndXJlKHBhdGgsICpjb25maWdhcmdzKQotICAgICAgICBub2RlID0g
c2VsZi5nZXRub2RlKGNvbmZpZywgcGF0aCkKLSAgICAgICAgcmV0dXJuIG5vZGUKLQotICAgIGRl
ZiBjb2xsZWN0X2J5X25hbWUoc2VsZiwgbW9kY29sLCBuYW1lKToKLSAgICAgICAgIiIiUmV0dXJu
IHRoZSBjb2xsZWN0aW9uIG5vZGUgZm9yIG5hbWUgZnJvbSB0aGUgbW9kdWxlIGNvbGxlY3Rpb24u
Ci0KLSAgICAgICAgVGhpcyB3aWxsIHNlYXJjaCBhIG1vZHVsZSBjb2xsZWN0aW9uIG5vZGUgZm9y
IGEgY29sbGVjdGlvbgotICAgICAgICBub2RlIG1hdGNoaW5nIHRoZSBnaXZlbiBuYW1lLgotCi0g
ICAgICAgIDpwYXJhbSBtb2Rjb2w6IEEgbW9kdWxlIGNvbGxlY3Rpb24gbm9kZSwgc2VlCi0gICAg
ICAgICAgIDpweTptZXRoOmBnZXRtb2R1bGVjb2xgLgotCi0gICAgICAgIDpwYXJhbSBuYW1lOiBU
aGUgbmFtZSBvZiB0aGUgbm9kZSB0byByZXR1cm4uCi0KLSAgICAgICAgIiIiCi0gICAgICAgIGZv
ciBjb2xpdGVtIGluIG1vZGNvbC5fbWVtb2NvbGxlY3QoKToKLSAgICAgICAgICAgIGlmIGNvbGl0
ZW0ubmFtZSA9PSBuYW1lOgotICAgICAgICAgICAgICAgIHJldHVybiBjb2xpdGVtCi0KLSAgICBk
ZWYgcG9wZW4oc2VsZiwgY21kYXJncywgc3Rkb3V0LCBzdGRlcnIsICoqa3cpOgotICAgICAgICAi
IiJJbnZva2Ugc3VicHJvY2Vzcy5Qb3Blbi4KLQotICAgICAgICBUaGlzIGNhbGxzIHN1YnByb2Nl
c3MuUG9wZW4gbWFraW5nIHN1cmUgdGhlIGN1cnJlbnQgd29ya2luZwotICAgICAgICBkaXJlY3Rv
cnkgaXMgdGhlIFBZVEhPTlBBVEguCi0KLSAgICAgICAgWW91IHByb2JhYmx5IHdhbnQgdG8gdXNl
IDpweTptZXRoOmBydW5gIGluc3RlYWQuCi0KLSAgICAgICAgIiIiCi0gICAgICAgIGVudiA9IG9z
LmVudmlyb24uY29weSgpCi0gICAgICAgIGVudlsnUFlUSE9OUEFUSCddID0gb3MucGF0aHNlcC5q
b2luKGZpbHRlcihOb25lLCBbCi0gICAgICAgICAgICBzdHIob3MuZ2V0Y3dkKCkpLCBlbnYuZ2V0
KCdQWVRIT05QQVRIJywgJycpXSkpCi0gICAgICAgIGt3WydlbnYnXSA9IGVudgotICAgICAgICBy
ZXR1cm4gc3VicHJvY2Vzcy5Qb3BlbihjbWRhcmdzLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGRvdXQ9c3Rkb3V0LCBzdGRlcnI9c3RkZXJyLCAqKmt3KQotCi0gICAgZGVmIHJ1
bihzZWxmLCAqY21kYXJncyk6Ci0gICAgICAgICIiIlJ1biBhIGNvbW1hbmQgd2l0aCBhcmd1bWVu
dHMuCi0KLSAgICAgICAgUnVuIGEgcHJvY2VzcyB1c2luZyBzdWJwcm9jZXNzLlBvcGVuIHNhdmlu
ZyB0aGUgc3Rkb3V0IGFuZAotICAgICAgICBzdGRlcnIuCi0KLSAgICAgICAgUmV0dXJucyBhIDpw
eTpjbGFzczpgUnVuUmVzdWx0YC4KLQotICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJuIHNlbGYu
X3J1bigqY21kYXJncykKLQotICAgIGRlZiBfcnVuKHNlbGYsICpjbWRhcmdzKToKLSAgICAgICAg
Y21kYXJncyA9IFtzdHIoeCkgZm9yIHggaW4gY21kYXJnc10KLSAgICAgICAgcDEgPSBzZWxmLnRt
cGRpci5qb2luKCJzdGRvdXQiKQotICAgICAgICBwMiA9IHNlbGYudG1wZGlyLmpvaW4oInN0ZGVy
ciIpCi0gICAgICAgIHByaW50XygicnVubmluZzoiLCAnICcuam9pbihjbWRhcmdzKSkKLSAgICAg
ICAgcHJpbnRfKCIgICAgIGluOiIsIHN0cihweS5wYXRoLmxvY2FsKCkpKQotICAgICAgICBmMSA9
IGNvZGVjcy5vcGVuKHN0cihwMSksICJ3IiwgZW5jb2Rpbmc9InV0ZjgiKQotICAgICAgICBmMiA9
IGNvZGVjcy5vcGVuKHN0cihwMiksICJ3IiwgZW5jb2Rpbmc9InV0ZjgiKQotICAgICAgICB0cnk6
Ci0gICAgICAgICAgICBub3cgPSB0aW1lLnRpbWUoKQotICAgICAgICAgICAgcG9wZW4gPSBzZWxm
LnBvcGVuKGNtZGFyZ3MsIHN0ZG91dD1mMSwgc3RkZXJyPWYyLAotICAgICAgICAgICAgICAgIGNs
b3NlX2Zkcz0oc3lzLnBsYXRmb3JtICE9ICJ3aW4zMiIpKQotICAgICAgICAgICAgcmV0ID0gcG9w
ZW4ud2FpdCgpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBmMS5jbG9zZSgpCi0gICAg
ICAgICAgICBmMi5jbG9zZSgpCi0gICAgICAgIGYxID0gY29kZWNzLm9wZW4oc3RyKHAxKSwgInIi
LCBlbmNvZGluZz0idXRmOCIpCi0gICAgICAgIGYyID0gY29kZWNzLm9wZW4oc3RyKHAyKSwgInIi
LCBlbmNvZGluZz0idXRmOCIpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG91dCA9IGYxLnJl
YWQoKS5zcGxpdGxpbmVzKCkKLSAgICAgICAgICAgIGVyciA9IGYyLnJlYWQoKS5zcGxpdGxpbmVz
KCkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGYxLmNsb3NlKCkKLSAgICAgICAgICAg
IGYyLmNsb3NlKCkKLSAgICAgICAgc2VsZi5fZHVtcF9saW5lcyhvdXQsIHN5cy5zdGRvdXQpCi0g
ICAgICAgIHNlbGYuX2R1bXBfbGluZXMoZXJyLCBzeXMuc3RkZXJyKQotICAgICAgICByZXR1cm4g
UnVuUmVzdWx0KHJldCwgb3V0LCBlcnIsIHRpbWUudGltZSgpLW5vdykKLQotICAgIGRlZiBfZHVt
cF9saW5lcyhzZWxmLCBsaW5lcywgZnApOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBmb3Ig
bGluZSBpbiBsaW5lczoKLSAgICAgICAgICAgICAgICBweS5idWlsdGluLnByaW50XyhsaW5lLCBm
aWxlPWZwKQotICAgICAgICBleGNlcHQgVW5pY29kZUVuY29kZUVycm9yOgotICAgICAgICAgICAg
cHJpbnQoImNvdWxkbid0IHByaW50IHRvICVzIGJlY2F1c2Ugb2YgZW5jb2RpbmciICUgKGZwLCkp
Ci0KLSAgICBkZWYgX2dldHB5dGVzdGFyZ3Moc2VsZik6Ci0gICAgICAgICMgd2UgY2Fubm90IHVz
ZSAiKHN5cy5leGVjdXRhYmxlLHNjcmlwdCkiCi0gICAgICAgICMgYmVjYXVzZSBvbiB3aW5kb3dz
IHRoZSBzY3JpcHQgaXMgZS5nLiBhIHB5LnRlc3QuZXhlCi0gICAgICAgIHJldHVybiAoc3lzLmV4
ZWN1dGFibGUsIF9weXRlc3RfZnVsbHBhdGgsKSAjIG5vcWEKLQotICAgIGRlZiBydW5weXRob24o
c2VsZiwgc2NyaXB0KToKLSAgICAgICAgIiIiUnVuIGEgcHl0aG9uIHNjcmlwdCB1c2luZyBzeXMu
ZXhlY3V0YWJsZSBhcyBpbnRlcnByZXRlci4KLQotICAgICAgICBSZXR1cm5zIGEgOnB5OmNsYXNz
OmBSdW5SZXN1bHRgLgotICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJuIHNlbGYucnVuKHN5cy5l
eGVjdXRhYmxlLCBzY3JpcHQpCi0KLSAgICBkZWYgcnVucHl0aG9uX2Moc2VsZiwgY29tbWFuZCk6
Ci0gICAgICAgICIiIlJ1biBweXRob24gLWMgImNvbW1hbmQiLCByZXR1cm4gYSA6cHk6Y2xhc3M6
YFJ1blJlc3VsdGAuIiIiCi0gICAgICAgIHJldHVybiBzZWxmLnJ1bihzeXMuZXhlY3V0YWJsZSwg
Ii1jIiwgY29tbWFuZCkKLQotICAgIGRlZiBydW5weXRlc3Rfc3VicHJvY2VzcyhzZWxmLCAqYXJn
cywgKiprd2FyZ3MpOgotICAgICAgICAiIiJSdW4gcHkudGVzdCBhcyBhIHN1YnByb2Nlc3Mgd2l0
aCBnaXZlbiBhcmd1bWVudHMuCi0KLSAgICAgICAgQW55IHBsdWdpbnMgYWRkZWQgdG8gdGhlIDpw
eTphdHRyOmBwbHVnaW5zYCBsaXN0IHdpbGwgYWRkZWQKLSAgICAgICAgdXNpbmcgdGhlIGBgLXBg
YCBjb21tYW5kIGxpbmUgb3B0aW9uLiAgQWRkdGlvbmFsbHkKLSAgICAgICAgYGAtLWJhc2V0ZW1w
YGAgaXMgdXNlZCBwdXQgYW55IHRlbXBvcmFyeSBmaWxlcyBhbmQgZGlyZWN0b3JpZXMKLSAgICAg
ICAgaW4gYSBudW1iZXJlZCBkaXJlY3RvcnkgcHJlZml4ZWQgd2l0aCAicnVucHl0ZXN0LSIgc28g
dGhleSBkbwotICAgICAgICBub3QgY29uZmxpY3Qgd2l0aCB0aGUgbm9ybWFsIG51bWJlcmQgcHl0
ZXN0IGxvY2F0aW9uIGZvcgotICAgICAgICB0ZW1wb3JhcnkgZmlsZXMgYW5kIGRpcmVjdG9yaWVz
LgotCi0gICAgICAgIFJldHVybnMgYSA6cHk6Y2xhc3M6YFJ1blJlc3VsdGAuCi0KLSAgICAgICAg
IiIiCi0gICAgICAgIHAgPSBweS5wYXRoLmxvY2FsLm1ha2VfbnVtYmVyZWRfZGlyKHByZWZpeD0i
cnVucHl0ZXN0LSIsCi0gICAgICAgICAgICBrZWVwPU5vbmUsIHJvb3RkaXI9c2VsZi50bXBkaXIp
Ci0gICAgICAgIGFyZ3MgPSAoJy0tYmFzZXRlbXA9JXMnICUgcCwgKSArIGFyZ3MKLSAgICAgICAg
I2ZvciB4IGluIGFyZ3M6Ci0gICAgICAgICMgICAgaWYgJy0tY29uZmN1dGRpcicgaW4gc3RyKHgp
OgotICAgICAgICAjICAgICAgICBicmVhawotICAgICAgICAjZWxzZToKLSAgICAgICAgIyAgICBw
YXNzCi0gICAgICAgICMgICAgYXJncyA9ICgnLS1jb25mY3V0ZGlyPS4nLCkgKyBhcmdzCi0gICAg
ICAgIHBsdWdpbnMgPSBbeCBmb3IgeCBpbiBzZWxmLnBsdWdpbnMgaWYgaXNpbnN0YW5jZSh4LCBz
dHIpXQotICAgICAgICBpZiBwbHVnaW5zOgotICAgICAgICAgICAgYXJncyA9ICgnLXAnLCBwbHVn
aW5zWzBdKSArIGFyZ3MKLSAgICAgICAgYXJncyA9IHNlbGYuX2dldHB5dGVzdGFyZ3MoKSArIGFy
Z3MKLSAgICAgICAgcmV0dXJuIHNlbGYucnVuKCphcmdzKQotCi0gICAgZGVmIHNwYXduX3B5dGVz
dChzZWxmLCBzdHJpbmcsIGV4cGVjdF90aW1lb3V0PTEwLjApOgotICAgICAgICAiIiJSdW4gcHku
dGVzdCB1c2luZyBwZXhwZWN0LgotCi0gICAgICAgIFRoaXMgbWFrZXMgc3VyZSB0byB1c2UgdGhl
IHJpZ2h0IHB5LnRlc3QgYW5kIHNldHMgdXAgdGhlCi0gICAgICAgIHRlbXBvcmFyeSBkaXJlY3Rv
cnkgbG9jYXRpb25zLgotCi0gICAgICAgIFRoZSBwZXhwZWN0IGNoaWxkIGlzIHJldHVybmVkLgot
Ci0gICAgICAgICIiIgotICAgICAgICBiYXNldGVtcCA9IHNlbGYudG1wZGlyLm1rZGlyKCJwZXhw
ZWN0IikKLSAgICAgICAgaW52b2tlID0gIiAiLmpvaW4obWFwKHN0ciwgc2VsZi5fZ2V0cHl0ZXN0
YXJncygpKSkKLSAgICAgICAgY21kID0gIiVzIC0tYmFzZXRlbXA9JXMgJXMiICUgKGludm9rZSwg
YmFzZXRlbXAsIHN0cmluZykKLSAgICAgICAgcmV0dXJuIHNlbGYuc3Bhd24oY21kLCBleHBlY3Rf
dGltZW91dD1leHBlY3RfdGltZW91dCkKLQotICAgIGRlZiBzcGF3bihzZWxmLCBjbWQsIGV4cGVj
dF90aW1lb3V0PTEwLjApOgotICAgICAgICAiIiJSdW4gYSBjb21tYW5kIHVzaW5nIHBleHBlY3Qu
Ci0KLSAgICAgICAgVGhlIHBleHBlY3QgY2hpbGQgaXMgcmV0dXJuZWQuCi0gICAgICAgICIiIgot
ICAgICAgICBwZXhwZWN0ID0gcHl0ZXN0LmltcG9ydG9yc2tpcCgicGV4cGVjdCIsICIzLjAiKQot
ICAgICAgICBpZiBoYXNhdHRyKHN5cywgJ3B5cHlfdmVyc2lvbl9pbmZvJykgYW5kICc2NCcgaW4g
cGxhdGZvcm0ubWFjaGluZSgpOgotICAgICAgICAgICAgcHl0ZXN0LnNraXAoInB5cHktNjQgYml0
IG5vdCBzdXBwb3J0ZWQiKQotICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gImRhcndpbiI6Ci0g
ICAgICAgICAgICBweXRlc3QueGZhaWwoInBleHBlY3QgZG9lcyBub3Qgd29yayByZWxpYWJseSBv
biBkYXJ3aW4/ISIpCi0gICAgICAgIGlmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCJmcmVlYnNk
Iik6Ci0gICAgICAgICAgICBweXRlc3QueGZhaWwoInBleHBlY3QgZG9lcyBub3Qgd29yayByZWxp
YWJseSBvbiBmcmVlYnNkIikKLSAgICAgICAgbG9nZmlsZSA9IHNlbGYudG1wZGlyLmpvaW4oInNw
YXduLm91dCIpLm9wZW4oIndiIikKLSAgICAgICAgY2hpbGQgPSBwZXhwZWN0LnNwYXduKGNtZCwg
bG9nZmlsZT1sb2dmaWxlKQotICAgICAgICBzZWxmLnJlcXVlc3QuYWRkZmluYWxpemVyKGxvZ2Zp
bGUuY2xvc2UpCi0gICAgICAgIGNoaWxkLnRpbWVvdXQgPSBleHBlY3RfdGltZW91dAotICAgICAg
ICByZXR1cm4gY2hpbGQKLQotZGVmIGdldGRlY29kZWQob3V0KToKLSAgICAgICAgdHJ5OgotICAg
ICAgICAgICAgcmV0dXJuIG91dC5kZWNvZGUoInV0Zi04IikKLSAgICAgICAgZXhjZXB0IFVuaWNv
ZGVEZWNvZGVFcnJvcjoKLSAgICAgICAgICAgIHJldHVybiAiSU5URVJOQUwgbm90LXV0ZjgtZGVj
b2RlYWJsZSwgdHJ1bmNhdGVkIHN0cmluZzpcbiVzIiAlICgKLSAgICAgICAgICAgICAgICAgICAg
cHkuaW8uc2FmZXJlcHIob3V0KSwpCi0KLQotY2xhc3MgTGluZUNvbXA6Ci0gICAgZGVmIF9faW5p
dF9fKHNlbGYpOgotICAgICAgICBzZWxmLnN0cmluZ2lvID0gcHkuaW8uVGV4dElPKCkKLQotICAg
IGRlZiBhc3NlcnRfY29udGFpbnNfbGluZXMoc2VsZiwgbGluZXMyKToKLSAgICAgICAgIiIiIGFz
c2VydCB0aGF0IGxpbmVzMiBhcmUgY29udGFpbmVkIChsaW5lYXJseSkgaW4gbGluZXMxLgotICAg
ICAgICAgICAgcmV0dXJuIGEgbGlzdCBvZiBleHRyYWxpbmVzIGZvdW5kLgotICAgICAgICAiIiIK
LSAgICAgICAgX190cmFjZWJhY2toaWRlX18gPSBUcnVlCi0gICAgICAgIHZhbCA9IHNlbGYuc3Ry
aW5naW8uZ2V0dmFsdWUoKQotICAgICAgICBzZWxmLnN0cmluZ2lvLnRydW5jYXRlKDApCi0gICAg
ICAgIHNlbGYuc3RyaW5naW8uc2VlaygwKQotICAgICAgICBsaW5lczEgPSB2YWwuc3BsaXQoIlxu
IikKLSAgICAgICAgcmV0dXJuIExpbmVNYXRjaGVyKGxpbmVzMSkuZm5tYXRjaF9saW5lcyhsaW5l
czIpCi0KLQotY2xhc3MgTGluZU1hdGNoZXI6Ci0gICAgIiIiRmxleGlibGUgbWF0Y2hpbmcgb2Yg
dGV4dC4KLQotICAgIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBjbGFzcyB0byB0ZXN0IGxhcmdlIHRl
eHRzIGxpa2UgdGhlIG91dHB1dCBvZgotICAgIGNvbW1hbmRzLgotCi0gICAgVGhlIGNvbnN0cnVj
dG9yIHRha2VzIGEgbGlzdCBvZiBsaW5lcyB3aXRob3V0IHRoZWlyIHRyYWlsaW5nCi0gICAgbmV3
bGluZXMsIGkuZS4gYGB0ZXh0LnNwbGl0bGluZXMoKWBgLgotCi0gICAgIiIiCi0KLSAgICBkZWYg
X19pbml0X18oc2VsZiwgIGxpbmVzKToKLSAgICAgICAgc2VsZi5saW5lcyA9IGxpbmVzCi0KLSAg
ICBkZWYgc3RyKHNlbGYpOgotICAgICAgICAiIiJSZXR1cm4gdGhlIGVudGlyZSBvcmlnaW5hbCB0
ZXh0LiIiIgotICAgICAgICByZXR1cm4gIlxuIi5qb2luKHNlbGYubGluZXMpCi0KLSAgICBkZWYg
X2dldGxpbmVzKHNlbGYsIGxpbmVzMik6Ci0gICAgICAgIGlmIGlzaW5zdGFuY2UobGluZXMyLCBz
dHIpOgotICAgICAgICAgICAgbGluZXMyID0gU291cmNlKGxpbmVzMikKLSAgICAgICAgaWYgaXNp
bnN0YW5jZShsaW5lczIsIFNvdXJjZSk6Ci0gICAgICAgICAgICBsaW5lczIgPSBsaW5lczIuc3Ry
aXAoKS5saW5lcwotICAgICAgICByZXR1cm4gbGluZXMyCi0KLSAgICBkZWYgZm5tYXRjaF9saW5l
c19yYW5kb20oc2VsZiwgbGluZXMyKToKLSAgICAgICAgIiIiQ2hlY2sgbGluZXMgZXhpc3QgaW4g
dGhlIG91dHB1dC4KLQotICAgICAgICBUaGUgYXJndW1lbnQgaXMgYSBsaXN0IG9mIGxpbmVzIHdo
aWNoIGhhdmUgdG8gb2NjdXIgaW4gdGhlCi0gICAgICAgIG91dHB1dCwgaW4gYW55IG9yZGVyLiAg
RWFjaCBsaW5lIGNhbiBjb250YWluIGdsb2Igd2hpbGRjYXJkcy4KLQotICAgICAgICAiIiIKLSAg
ICAgICAgbGluZXMyID0gc2VsZi5fZ2V0bGluZXMobGluZXMyKQotICAgICAgICBmb3IgbGluZSBp
biBsaW5lczI6Ci0gICAgICAgICAgICBmb3IgeCBpbiBzZWxmLmxpbmVzOgotICAgICAgICAgICAg
ICAgIGlmIGxpbmUgPT0geCBvciBmbm1hdGNoKHgsIGxpbmUpOgotICAgICAgICAgICAgICAgICAg
ICBwcmludF8oIm1hdGNoZWQ6ICIsIHJlcHIobGluZSkpCi0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3Io
ImxpbmUgJXIgbm90IGZvdW5kIGluIG91dHB1dCIgJSBsaW5lKQotCi0gICAgZGVmIGdldF9saW5l
c19hZnRlcihzZWxmLCBmbmxpbmUpOgotICAgICAgICAiIiJSZXR1cm4gYWxsIGxpbmVzIGZvbGxv
d2luZyB0aGUgZ2l2ZW4gbGluZSBpbiB0aGUgdGV4dC4KLQotICAgICAgICBUaGUgZ2l2ZW4gbGlu
ZSBjYW4gY29udGFpbiBnbG9iIHdpbGRjYXJkcy4KLSAgICAgICAgIiIiCi0gICAgICAgIGZvciBp
LCBsaW5lIGluIGVudW1lcmF0ZShzZWxmLmxpbmVzKToKLSAgICAgICAgICAgIGlmIGZubGluZSA9
PSBsaW5lIG9yIGZubWF0Y2gobGluZSwgZm5saW5lKToKLSAgICAgICAgICAgICAgICByZXR1cm4g
c2VsZi5saW5lc1tpKzE6XQotICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJsaW5lICVyIG5vdCBm
b3VuZCBpbiBvdXRwdXQiICUgZm5saW5lKQotCi0gICAgZGVmIGZubWF0Y2hfbGluZXMoc2VsZiwg
bGluZXMyKToKLSAgICAgICAgIiIiU2VhcmNoIHRoZSB0ZXh0IGZvciBtYXRjaGluZyBsaW5lcy4K
LQotICAgICAgICBUaGUgYXJndW1lbnQgaXMgYSBsaXN0IG9mIGxpbmVzIHdoaWNoIGhhdmUgdG8g
bWF0Y2ggYW5kIGNhbgotICAgICAgICB1c2UgZ2xvYiB3aWxkY2FyZHMuICBJZiB0aGV5IGRvIG5v
dCBtYXRjaCBhbiBweXRlc3QuZmFpbCgpIGlzCi0gICAgICAgIGNhbGxlZC4gIFRoZSBtYXRjaGVz
IGFuZCBub24tbWF0Y2hlcyBhcmUgYWxzbyBwcmludGVkIG9uCi0gICAgICAgIHN0ZG91dC4KLQot
ICAgICAgICAiIiIKLSAgICAgICAgZGVmIHNob3coYXJnMSwgYXJnMik6Ci0gICAgICAgICAgICBw
eS5idWlsdGluLnByaW50XyhhcmcxLCBhcmcyLCBmaWxlPXN5cy5zdGRlcnIpCi0gICAgICAgIGxp
bmVzMiA9IHNlbGYuX2dldGxpbmVzKGxpbmVzMikKLSAgICAgICAgbGluZXMxID0gc2VsZi5saW5l
c1s6XQotICAgICAgICBuZXh0bGluZSA9IE5vbmUKLSAgICAgICAgZXh0cmFsaW5lcyA9IFtdCi0g
ICAgICAgIF9fdHJhY2ViYWNraGlkZV9fID0gVHJ1ZQotICAgICAgICBmb3IgbGluZSBpbiBsaW5l
czI6Ci0gICAgICAgICAgICBub21hdGNocHJpbnRlZCA9IEZhbHNlCi0gICAgICAgICAgICB3aGls
ZSBsaW5lczE6Ci0gICAgICAgICAgICAgICAgbmV4dGxpbmUgPSBsaW5lczEucG9wKDApCi0gICAg
ICAgICAgICAgICAgaWYgbGluZSA9PSBuZXh0bGluZToKLSAgICAgICAgICAgICAgICAgICAgc2hv
dygiZXhhY3QgbWF0Y2g6IiwgcmVwcihsaW5lKSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsK
LSAgICAgICAgICAgICAgICBlbGlmIGZubWF0Y2gobmV4dGxpbmUsIGxpbmUpOgotICAgICAgICAg
ICAgICAgICAgICBzaG93KCJmbm1hdGNoOiIsIHJlcHIobGluZSkpCi0gICAgICAgICAgICAgICAg
ICAgIHNob3coIiAgIHdpdGg6IiwgcmVwcihuZXh0bGluZSkpCi0gICAgICAgICAgICAgICAgICAg
IGJyZWFrCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgaWYgbm90
IG5vbWF0Y2hwcmludGVkOgotICAgICAgICAgICAgICAgICAgICAgICAgc2hvdygibm9tYXRjaDoi
LCByZXByKGxpbmUpKQotICAgICAgICAgICAgICAgICAgICAgICAgbm9tYXRjaHByaW50ZWQgPSBU
cnVlCi0gICAgICAgICAgICAgICAgICAgIHNob3coIiAgICBhbmQ6IiwgcmVwcihuZXh0bGluZSkp
Ci0gICAgICAgICAgICAgICAgZXh0cmFsaW5lcy5hcHBlbmQobmV4dGxpbmUpCi0gICAgICAgICAg
ICBlbHNlOgotICAgICAgICAgICAgICAgIHB5dGVzdC5mYWlsKCJyZW1haW5zIHVubWF0Y2hlZDog
JXIsIHNlZSBzdGRlcnIiICUgKGxpbmUsKSkKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2lt
cG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9weXRob24ucHkgYi9XZWJEcml2ZXJUZXN0
cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvcHl0aG9uLnB5CmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAzNTgwZWFlMDc0Zi4uMDAwMDAwMDAwMDAKLS0tIGEvV2ViRHJp
dmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L3B5dGhvbi5weQorKysg
L2Rldi9udWxsCkBAIC0xLDIzMDIgKzAsMCBAQAotIiIiIFB5dGhvbiB0ZXN0IGRpc2NvdmVyeSwg
c2V0dXAgYW5kIHJ1biBvZiB0ZXN0IGZ1bmN0aW9ucy4gIiIiCi1pbXBvcnQgZm5tYXRjaAotaW1w
b3J0IGZ1bmN0b29scwotaW1wb3J0IGluc3BlY3QKLWltcG9ydCByZQotaW1wb3J0IHR5cGVzCi1p
bXBvcnQgc3lzCi0KLWltcG9ydCBweQotaW1wb3J0IHB5dGVzdAotZnJvbSBfcHl0ZXN0Ll9jb2Rl
LmNvZGUgaW1wb3J0IFRlcm1pbmFsUmVwcgotZnJvbSBfcHl0ZXN0Lm1hcmsgaW1wb3J0IE1hcmtE
ZWNvcmF0b3IsIE1hcmtlckVycm9yCi0KLXRyeToKLSAgICBpbXBvcnQgZW51bQotZXhjZXB0IElt
cG9ydEVycm9yOiAgIyBwcmFnbWE6IG5vIGNvdmVyCi0gICAgIyBPbmx5IGF2YWlsYWJsZSBpbiBQ
eXRob24gMy40KyBvciBhcyBhIGJhY2twb3J0Ci0gICAgZW51bSA9IE5vbmUKLQotaW1wb3J0IF9w
eXRlc3QKLWltcG9ydCBfcHl0ZXN0Ll9wbHVnZ3kgYXMgcGx1Z2d5Ci0KLWN1dGRpcjIgPSBweS5w
YXRoLmxvY2FsKF9weXRlc3QuX19maWxlX18pLmRpcnBhdGgoKQotY3V0ZGlyMSA9IHB5LnBhdGgu
bG9jYWwocGx1Z2d5Ll9fZmlsZV9fLnJzdHJpcCgib2MiKSkKLQotCi1Ob25lVHlwZSA9IHR5cGUo
Tm9uZSkKLU5PVFNFVCA9IG9iamVjdCgpCi1pc2Z1bmN0aW9uID0gaW5zcGVjdC5pc2Z1bmN0aW9u
Ci1pc2NsYXNzID0gaW5zcGVjdC5pc2NsYXNzCi1jYWxsYWJsZSA9IHB5LmJ1aWx0aW4uY2FsbGFi
bGUKLSMgdXNlZCB0byB3b3JrIGFyb3VuZCBhIHB5dGhvbjIgZXhjZXB0aW9uIGluZm8gbGVhawot
ZXhjX2NsZWFyID0gZ2V0YXR0cihzeXMsICdleGNfY2xlYXInLCBsYW1iZGE6IE5vbmUpCi0jIFRo
ZSB0eXBlIG9mIHJlLmNvbXBpbGUgb2JqZWN0cyBpcyBub3QgZXhwb3NlZCBpbiBQeXRob24uCi1S
RUdFWF9UWVBFID0gdHlwZShyZS5jb21waWxlKCcnKSkKLQotX1BZMyA9IHN5cy52ZXJzaW9uX2lu
Zm8gPiAoMywgMCkKLV9QWTIgPSBub3QgX1BZMwotCi0KLWlmIGhhc2F0dHIoaW5zcGVjdCwgJ3Np
Z25hdHVyZScpOgotICAgIGRlZiBfZm9ybWF0X2FyZ3MoZnVuYyk6Ci0gICAgICAgIHJldHVybiBz
dHIoaW5zcGVjdC5zaWduYXR1cmUoZnVuYykpCi1lbHNlOgotICAgIGRlZiBfZm9ybWF0X2FyZ3Mo
ZnVuYyk6Ci0gICAgICAgIHJldHVybiBpbnNwZWN0LmZvcm1hdGFyZ3NwZWMoKmluc3BlY3QuZ2V0
YXJnc3BlYyhmdW5jKSkKLQotaWYgIHN5cy52ZXJzaW9uX2luZm9bOjJdID09ICgyLCA2KToKLSAg
ICBkZWYgaXNjbGFzcyhvYmplY3QpOgotICAgICAgICAiIiIgUmV0dXJuIHRydWUgaWYgdGhlIG9i
amVjdCBpcyBhIGNsYXNzLiBPdmVycmlkZXMgaW5zcGVjdC5pc2NsYXNzIGZvcgotICAgICAgICBw
eXRob24gMi42IGJlY2F1c2UgaXQgd2lsbCByZXR1cm4gVHJ1ZSBmb3Igb2JqZWN0cyB3aGljaCBh
bHdheXMgcmV0dXJuCi0gICAgICAgIHNvbWV0aGluZyBvbiBfX2dldGF0dHJfXyBjYWxscyAoc2Vl
ICMxMDM1KS4KLSAgICAgICAgQmFja3BvcnQgb2YgaHR0cHM6Ly9oZy5weXRob24ub3JnL2NweXRo
b24vcmV2LzM1YmY4ZjdhOGVkYwotICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJuIGlzaW5zdGFu
Y2Uob2JqZWN0LCAodHlwZSwgdHlwZXMuQ2xhc3NUeXBlKSkKLQotZGVmIF9oYXNfcG9zaXRpb25h
bF9hcmcoZnVuYyk6Ci0gICAgcmV0dXJuIGZ1bmMuX19jb2RlX18uY29fYXJnY291bnQKLQotCi1k
ZWYgZmlsdGVyX3RyYWNlYmFjayhlbnRyeSk6Ci0gICAgIyBlbnRyeS5wYXRoIG1pZ2h0IHNvbWV0
aW1lcyByZXR1cm4gYSBzdHIgb2JqZWN0IHdoZW4gdGhlIGVudHJ5Ci0gICAgIyBwb2ludHMgdG8g
ZHluYW1pY2FsbHkgZ2VuZXJhdGVkIGNvZGUKLSAgICAjIHNlZSBodHRwczovL2JpdGJ1Y2tldC5v
cmcvcHl0ZXN0LWRldi9weS9pc3N1ZXMvNzEKLSAgICByYXdfZmlsZW5hbWUgPSBlbnRyeS5mcmFt
ZS5jb2RlLnJhdy5jb19maWxlbmFtZQotICAgIGlzX2dlbmVyYXRlZCA9ICc8JyBpbiByYXdfZmls
ZW5hbWUgYW5kICc+JyBpbiByYXdfZmlsZW5hbWUKLSAgICBpZiBpc19nZW5lcmF0ZWQ6Ci0gICAg
ICAgIHJldHVybiBGYWxzZQotICAgICMgZW50cnkucGF0aCBtaWdodCBwb2ludCB0byBhbiBpbmV4
aXN0aW5nIGZpbGUsIGluIHdoaWNoIGNhc2UgaXQgd2lsbAotICAgICMgYWxzc28gcmV0dXJuIGEg
c3RyIG9iamVjdC4gc2VlICMxMTMzCi0gICAgcCA9IHB5LnBhdGgubG9jYWwoZW50cnkucGF0aCkK
LSAgICByZXR1cm4gcCAhPSBjdXRkaXIxIGFuZCBub3QgcC5yZWx0byhjdXRkaXIyKQotCi0KLWRl
ZiBnZXRfcmVhbF9mdW5jKG9iaik6Ci0gICAgIiIiIGdldHMgdGhlIHJlYWwgZnVuY3Rpb24gb2Jq
ZWN0IG9mIHRoZSAocG9zc2libHkpIHdyYXBwZWQgb2JqZWN0IGJ5Ci0gICAgZnVuY3Rvb2xzLndy
YXBzIG9yIGZ1bmN0b29scy5wYXJ0aWFsLgotICAgICIiIgotICAgIHdoaWxlIGhhc2F0dHIob2Jq
LCAiX193cmFwcGVkX18iKToKLSAgICAgICAgb2JqID0gb2JqLl9fd3JhcHBlZF9fCi0gICAgaWYg
aXNpbnN0YW5jZShvYmosIGZ1bmN0b29scy5wYXJ0aWFsKToKLSAgICAgICAgb2JqID0gb2JqLmZ1
bmMKLSAgICByZXR1cm4gb2JqCi0KLWRlZiBnZXRmc2xpbmVubyhvYmopOgotICAgICMgeHh4IGxl
dCBkZWNvcmF0b3JzIGV0YyBzcGVjaWZ5IGEgc2FuZSBvcmRlcmluZwotICAgIG9iaiA9IGdldF9y
ZWFsX2Z1bmMob2JqKQotICAgIGlmIGhhc2F0dHIob2JqLCAncGxhY2VfYXMnKToKLSAgICAgICAg
b2JqID0gb2JqLnBsYWNlX2FzCi0gICAgZnNsaW5lbm8gPSBfcHl0ZXN0Ll9jb2RlLmdldGZzbGlu
ZW5vKG9iaikKLSAgICBhc3NlcnQgaXNpbnN0YW5jZShmc2xpbmVub1sxXSwgaW50KSwgb2JqCi0g
ICAgcmV0dXJuIGZzbGluZW5vCi0KLWRlZiBnZXRpbWZ1bmMoZnVuYyk6Ci0gICAgdHJ5OgotICAg
ICAgICByZXR1cm4gZnVuYy5fX2Z1bmNfXwotICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAg
ICAgICAgdHJ5OgotICAgICAgICAgICAgcmV0dXJuIGZ1bmMuaW1fZnVuYwotICAgICAgICBleGNl
cHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICByZXR1cm4gZnVuYwotCi1kZWYgc2FmZV9n
ZXRhdHRyKG9iamVjdCwgbmFtZSwgZGVmYXVsdCk6Ci0gICAgIiIiIExpa2UgZ2V0YXR0ciBidXQg
cmV0dXJuIGRlZmF1bHQgdXBvbiBhbnkgRXhjZXB0aW9uLgotCi0gICAgQXR0cmlidXRlIGFjY2Vz
cyBjYW4gcG90ZW50aWFsbHkgZmFpbCBmb3IgJ2V2aWwnIFB5dGhvbiBvYmplY3RzLgotICAgIFNl
ZSBpc3N1ZTIxNAotICAgICIiIgotICAgIHRyeToKLSAgICAgICAgcmV0dXJuIGdldGF0dHIob2Jq
ZWN0LCBuYW1lLCBkZWZhdWx0KQotICAgIGV4Y2VwdCBFeGNlcHRpb246Ci0gICAgICAgIHJldHVy
biBkZWZhdWx0Ci0KLQotY2xhc3MgRml4dHVyZUZ1bmN0aW9uTWFya2VyOgotICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBzY29wZSwgcGFyYW1zLAotICAgICAgICAgICAgICAgICBhdXRvdXNlPUZhbHNl
LCB5aWVsZGN0eD1GYWxzZSwgaWRzPU5vbmUpOgotICAgICAgICBzZWxmLnNjb3BlID0gc2NvcGUK
LSAgICAgICAgc2VsZi5wYXJhbXMgPSBwYXJhbXMKLSAgICAgICAgc2VsZi5hdXRvdXNlID0gYXV0
b3VzZQotICAgICAgICBzZWxmLnlpZWxkY3R4ID0geWllbGRjdHgKLSAgICAgICAgc2VsZi5pZHMg
PSBpZHMKLQotICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBmdW5jdGlvbik6Ci0gICAgICAgIGlmIGlz
Y2xhc3MoZnVuY3Rpb24pOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKLSAgICAgICAg
ICAgICAgICAgICAgImNsYXNzIGZpeHR1cmVzIG5vdCBzdXBwb3J0ZWQgKG1heSBiZSBpbiB0aGUg
ZnV0dXJlKSIpCi0gICAgICAgIGZ1bmN0aW9uLl9weXRlc3RmaXh0dXJlZnVuY3Rpb24gPSBzZWxm
Ci0gICAgICAgIHJldHVybiBmdW5jdGlvbgotCi0KLWRlZiBmaXh0dXJlKHNjb3BlPSJmdW5jdGlv
biIsIHBhcmFtcz1Ob25lLCBhdXRvdXNlPUZhbHNlLCBpZHM9Tm9uZSk6Ci0gICAgIiIiIChyZXR1
cm4gYSkgZGVjb3JhdG9yIHRvIG1hcmsgYSBmaXh0dXJlIGZhY3RvcnkgZnVuY3Rpb24uCi0KLSAg
ICBUaGlzIGRlY29yYXRvciBjYW4gYmUgdXNlZCAod2l0aCBvciBvciB3aXRob3V0IHBhcmFtZXRl
cnMpIHRvIGRlZmluZQotICAgIGEgZml4dHVyZSBmdW5jdGlvbi4gIFRoZSBuYW1lIG9mIHRoZSBm
aXh0dXJlIGZ1bmN0aW9uIGNhbiBsYXRlciBiZQotICAgIHJlZmVyZW5jZWQgdG8gY2F1c2UgaXRz
IGludm9jYXRpb24gYWhlYWQgb2YgcnVubmluZyB0ZXN0czogdGVzdAotICAgIG1vZHVsZXMgb3Ig
Y2xhc3NlcyBjYW4gdXNlIHRoZSBweXRlc3QubWFyay51c2VmaXh0dXJlcyhmaXh0dXJlbmFtZSkK
LSAgICBtYXJrZXIuICBUZXN0IGZ1bmN0aW9ucyBjYW4gZGlyZWN0bHkgdXNlIGZpeHR1cmUgbmFt
ZXMgYXMgaW5wdXQKLSAgICBhcmd1bWVudHMgaW4gd2hpY2ggY2FzZSB0aGUgZml4dHVyZSBpbnN0
YW5jZSByZXR1cm5lZCBmcm9tIHRoZSBmaXh0dXJlCi0gICAgZnVuY3Rpb24gd2lsbCBiZSBpbmpl
Y3RlZC4KLQotICAgIDphcmcgc2NvcGU6IHRoZSBzY29wZSBmb3Igd2hpY2ggdGhpcyBmaXh0dXJl
IGlzIHNoYXJlZCwgb25lIG9mCi0gICAgICAgICAgICAgICAgImZ1bmN0aW9uIiAoZGVmYXVsdCks
ICJjbGFzcyIsICJtb2R1bGUiLCAic2Vzc2lvbiIuCi0KLSAgICA6YXJnIHBhcmFtczogYW4gb3B0
aW9uYWwgbGlzdCBvZiBwYXJhbWV0ZXJzIHdoaWNoIHdpbGwgY2F1c2UgbXVsdGlwbGUKLSAgICAg
ICAgICAgICAgICBpbnZvY2F0aW9ucyBvZiB0aGUgZml4dHVyZSBmdW5jdGlvbiBhbmQgYWxsIG9m
IHRoZSB0ZXN0cwotICAgICAgICAgICAgICAgIHVzaW5nIGl0LgotCi0gICAgOmFyZyBhdXRvdXNl
OiBpZiBUcnVlLCB0aGUgZml4dHVyZSBmdW5jIGlzIGFjdGl2YXRlZCBmb3IgYWxsIHRlc3RzIHRo
YXQKLSAgICAgICAgICAgICAgICBjYW4gc2VlIGl0LiAgSWYgRmFsc2UgKHRoZSBkZWZhdWx0KSB0
aGVuIGFuIGV4cGxpY2l0Ci0gICAgICAgICAgICAgICAgcmVmZXJlbmNlIGlzIG5lZWRlZCB0byBh
Y3RpdmF0ZSB0aGUgZml4dHVyZS4KLQotICAgIDphcmcgaWRzOiBsaXN0IG9mIHN0cmluZyBpZHMg
ZWFjaCBjb3JyZXNwb25kaW5nIHRvIHRoZSBwYXJhbXMKLSAgICAgICBzbyB0aGF0IHRoZXkgYXJl
IHBhcnQgb2YgdGhlIHRlc3QgaWQuIElmIG5vIGlkcyBhcmUgcHJvdmlkZWQKLSAgICAgICB0aGV5
IHdpbGwgYmUgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgZnJvbSB0aGUgcGFyYW1zLgotCi0gICAg
IiIiCi0gICAgaWYgY2FsbGFibGUoc2NvcGUpIGFuZCBwYXJhbXMgaXMgTm9uZSBhbmQgYXV0b3Vz
ZSA9PSBGYWxzZToKLSAgICAgICAgIyBkaXJlY3QgZGVjb3JhdGlvbgotICAgICAgICByZXR1cm4g
Rml4dHVyZUZ1bmN0aW9uTWFya2VyKAotICAgICAgICAgICAgICAgICJmdW5jdGlvbiIsIHBhcmFt
cywgYXV0b3VzZSkoc2NvcGUpCi0gICAgaWYgcGFyYW1zIGlzIG5vdCBOb25lIGFuZCBub3QgaXNp
bnN0YW5jZShwYXJhbXMsIChsaXN0LCB0dXBsZSkpOgotICAgICAgICBwYXJhbXMgPSBsaXN0KHBh
cmFtcykKLSAgICByZXR1cm4gRml4dHVyZUZ1bmN0aW9uTWFya2VyKHNjb3BlLCBwYXJhbXMsIGF1
dG91c2UsIGlkcz1pZHMpCi0KLWRlZiB5aWVsZF9maXh0dXJlKHNjb3BlPSJmdW5jdGlvbiIsIHBh
cmFtcz1Ob25lLCBhdXRvdXNlPUZhbHNlLCBpZHM9Tm9uZSk6Ci0gICAgIiIiIChyZXR1cm4gYSkg
ZGVjb3JhdG9yIHRvIG1hcmsgYSB5aWVsZC1maXh0dXJlIGZhY3RvcnkgZnVuY3Rpb24KLSAgICAo
RVhQRVJJTUVOVEFMKS4KLQotICAgIFRoaXMgdGFrZXMgdGhlIHNhbWUgYXJndW1lbnRzIGFzIDpw
eTpmdW5jOmBweXRlc3QuZml4dHVyZWAgYnV0Ci0gICAgZXhwZWN0cyBhIGZpeHR1cmUgZnVuY3Rp
b24gdG8gdXNlIGEgYGB5aWVsZGBgIGluc3RlYWQgb2YgYSBgYHJldHVybmBgCi0gICAgc3RhdGVt
ZW50IHRvIHByb3ZpZGUgYSBmaXh0dXJlLiAgU2VlCi0gICAgaHR0cDovL3B5dGVzdC5vcmcvZW4v
bGF0ZXN0L3lpZWxkZml4dHVyZS5odG1sIGZvciBtb3JlIGluZm8uCi0gICAgIiIiCi0gICAgaWYg
Y2FsbGFibGUoc2NvcGUpIGFuZCBwYXJhbXMgaXMgTm9uZSBhbmQgYXV0b3VzZSA9PSBGYWxzZToK
LSAgICAgICAgIyBkaXJlY3QgZGVjb3JhdGlvbgotICAgICAgICByZXR1cm4gRml4dHVyZUZ1bmN0
aW9uTWFya2VyKAotICAgICAgICAgICAgICAgICJmdW5jdGlvbiIsIHBhcmFtcywgYXV0b3VzZSwg
eWllbGRjdHg9VHJ1ZSkoc2NvcGUpCi0gICAgZWxzZToKLSAgICAgICAgcmV0dXJuIEZpeHR1cmVG
dW5jdGlvbk1hcmtlcihzY29wZSwgcGFyYW1zLCBhdXRvdXNlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHlpZWxkY3R4PVRydWUsIGlkcz1pZHMpCi0KLWRlZmF1bHRmdW5j
YXJncHJlZml4bWFya2VyID0gZml4dHVyZSgpCi0KLWRlZiBweW9ial9wcm9wZXJ0eShuYW1lKToK
LSAgICBkZWYgZ2V0KHNlbGYpOgotICAgICAgICBub2RlID0gc2VsZi5nZXRwYXJlbnQoZ2V0YXR0
cihweXRlc3QsIG5hbWUpKQotICAgICAgICBpZiBub2RlIGlzIG5vdCBOb25lOgotICAgICAgICAg
ICAgcmV0dXJuIG5vZGUub2JqCi0gICAgZG9jID0gInB5dGhvbiAlcyBvYmplY3QgdGhpcyBub2Rl
IHdhcyBjb2xsZWN0ZWQgZnJvbSAoY2FuIGJlIE5vbmUpLiIgJSAoCi0gICAgICAgICAgbmFtZS5s
b3dlcigpLCkKLSAgICByZXR1cm4gcHJvcGVydHkoZ2V0LCBOb25lLCBOb25lLCBkb2MpCi0KLQot
ZGVmIHB5dGVzdF9hZGRvcHRpb24ocGFyc2VyKToKLSAgICBncm91cCA9IHBhcnNlci5nZXRncm91
cCgiZ2VuZXJhbCIpCi0gICAgZ3JvdXAuYWRkb3B0aW9uKCctLWZpeHR1cmVzJywgJy0tZnVuY2Fy
Z3MnLAotICAgICAgICAgICAgICAgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0ic2hvd2ZpeHR1
cmVzIiwgZGVmYXVsdD1GYWxzZSwKLSAgICAgICAgICAgICAgIGhlbHA9InNob3cgYXZhaWxhYmxl
IGZpeHR1cmVzLCBzb3J0ZWQgYnkgcGx1Z2luIGFwcGVhcmFuY2UiKQotICAgIHBhcnNlci5hZGRp
bmkoInVzZWZpeHR1cmVzIiwgdHlwZT0iYXJncyIsIGRlZmF1bHQ9W10sCi0gICAgICAgIGhlbHA9
Imxpc3Qgb2YgZGVmYXVsdCBmaXh0dXJlcyB0byBiZSB1c2VkIHdpdGggdGhpcyBwcm9qZWN0IikK
LSAgICBwYXJzZXIuYWRkaW5pKCJweXRob25fZmlsZXMiLCB0eXBlPSJhcmdzIiwKLSAgICAgICAg
ZGVmYXVsdD1bJ3Rlc3RfKi5weScsICcqX3Rlc3QucHknXSwKLSAgICAgICAgaGVscD0iZ2xvYi1z
dHlsZSBmaWxlIHBhdHRlcm5zIGZvciBQeXRob24gdGVzdCBtb2R1bGUgZGlzY292ZXJ5IikKLSAg
ICBwYXJzZXIuYWRkaW5pKCJweXRob25fY2xhc3NlcyIsIHR5cGU9ImFyZ3MiLCBkZWZhdWx0PVsi
VGVzdCIsXSwKLSAgICAgICAgaGVscD0icHJlZml4ZXMgb3IgZ2xvYiBuYW1lcyBmb3IgUHl0aG9u
IHRlc3QgY2xhc3MgZGlzY292ZXJ5IikKLSAgICBwYXJzZXIuYWRkaW5pKCJweXRob25fZnVuY3Rp
b25zIiwgdHlwZT0iYXJncyIsIGRlZmF1bHQ9WyJ0ZXN0IixdLAotICAgICAgICBoZWxwPSJwcmVm
aXhlcyBvciBnbG9iIG5hbWVzIGZvciBQeXRob24gdGVzdCBmdW5jdGlvbiBhbmQgIgotICAgICAg
ICAgICAgICJtZXRob2QgZGlzY292ZXJ5IikKLQotICAgIGdyb3VwLmFkZG9wdGlvbigiLS1pbXBv
cnQtbW9kZSIsIGRlZmF1bHQ9InByZXBlbmQiLAotICAgICAgICBjaG9pY2VzPVsicHJlcGVuZCIs
ICJhcHBlbmQiXSwgZGVzdD0iaW1wb3J0bW9kZSIsCi0gICAgICAgIGhlbHA9InByZXBlbmQvYXBw
ZW5kIHRvIHN5cy5wYXRoIHdoZW4gaW1wb3J0aW5nIHRlc3QgbW9kdWxlcywgIgotICAgICAgICAg
ICAgICJkZWZhdWx0IGlzIHRvIHByZXBlbmQuIikKLQotCi1kZWYgcHl0ZXN0X2NtZGxpbmVfbWFp
bihjb25maWcpOgotICAgIGlmIGNvbmZpZy5vcHRpb24uc2hvd2ZpeHR1cmVzOgotICAgICAgICBz
aG93Zml4dHVyZXMoY29uZmlnKQotICAgICAgICByZXR1cm4gMAotCi0KLWRlZiBweXRlc3RfZ2Vu
ZXJhdGVfdGVzdHMobWV0YWZ1bmMpOgotICAgICMgdGhvc2UgYWx0ZXJuYXRpdmUgc3BlbGxpbmdz
IGFyZSBjb21tb24gLSByYWlzZSBhIHNwZWNpZmljIGVycm9yIHRvIGFsZXJ0Ci0gICAgIyB0aGUg
dXNlcgotICAgIGFsdF9zcGVsbGluZ3MgPSBbJ3BhcmFtZXRlcml6ZScsICdwYXJhbWV0cmlzZScs
ICdwYXJhbWV0ZXJpc2UnXQotICAgIGZvciBhdHRyIGluIGFsdF9zcGVsbGluZ3M6Ci0gICAgICAg
IGlmIGhhc2F0dHIobWV0YWZ1bmMuZnVuY3Rpb24sIGF0dHIpOgotICAgICAgICAgICAgbXNnID0g
InswfSBoYXMgJ3sxfScsIHNwZWxsaW5nIHNob3VsZCBiZSAncGFyYW1ldHJpemUnIgotICAgICAg
ICAgICAgcmFpc2UgTWFya2VyRXJyb3IobXNnLmZvcm1hdChtZXRhZnVuYy5mdW5jdGlvbi5fX25h
bWVfXywgYXR0cikpCi0gICAgdHJ5OgotICAgICAgICBtYXJrZXJzID0gbWV0YWZ1bmMuZnVuY3Rp
b24ucGFyYW1ldHJpemUKLSAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgIHJldHVy
bgotICAgIGZvciBtYXJrZXIgaW4gbWFya2VyczoKLSAgICAgICAgbWV0YWZ1bmMucGFyYW1ldHJp
emUoKm1hcmtlci5hcmdzLCAqKm1hcmtlci5rd2FyZ3MpCi0KLWRlZiBweXRlc3RfY29uZmlndXJl
KGNvbmZpZyk6Ci0gICAgY29uZmlnLmFkZGluaXZhbHVlX2xpbmUoIm1hcmtlcnMiLAotICAgICAg
ICAicGFyYW1ldHJpemUoYXJnbmFtZXMsIGFyZ3ZhbHVlcyk6IGNhbGwgYSB0ZXN0IGZ1bmN0aW9u
IG11bHRpcGxlICIKLSAgICAgICAgInRpbWVzIHBhc3NpbmcgaW4gZGlmZmVyZW50IGFyZ3VtZW50
cyBpbiB0dXJuLiBhcmd2YWx1ZXMgZ2VuZXJhbGx5ICIKLSAgICAgICAgIm5lZWRzIHRvIGJlIGEg
bGlzdCBvZiB2YWx1ZXMgaWYgYXJnbmFtZXMgc3BlY2lmaWVzIG9ubHkgb25lIG5hbWUgIgotICAg
ICAgICAib3IgYSBsaXN0IG9mIHR1cGxlcyBvZiB2YWx1ZXMgaWYgYXJnbmFtZXMgc3BlY2lmaWVz
IG11bHRpcGxlIG5hbWVzLiAiCi0gICAgICAgICJFeGFtcGxlOiBAcGFyYW1ldHJpemUoJ2FyZzEn
LCBbMSwyXSkgd291bGQgbGVhZCB0byB0d28gY2FsbHMgb2YgdGhlICIKLSAgICAgICAgImRlY29y
YXRlZCB0ZXN0IGZ1bmN0aW9uLCBvbmUgd2l0aCBhcmcxPTEgYW5kIGFub3RoZXIgd2l0aCBhcmcx
PTIuIgotICAgICAgICAic2VlIGh0dHA6Ly9weXRlc3Qub3JnL2xhdGVzdC9wYXJhbWV0cml6ZS5o
dG1sIGZvciBtb3JlIGluZm8gYW5kICIKLSAgICAgICAgImV4YW1wbGVzLiIKLSAgICApCi0gICAg
Y29uZmlnLmFkZGluaXZhbHVlX2xpbmUoIm1hcmtlcnMiLAotICAgICAgICAidXNlZml4dHVyZXMo
Zml4dHVyZW5hbWUxLCBmaXh0dXJlbmFtZTIsIC4uLik6IG1hcmsgdGVzdHMgYXMgbmVlZGluZyAi
Ci0gICAgICAgICJhbGwgb2YgdGhlIHNwZWNpZmllZCBmaXh0dXJlcy4gc2VlIGh0dHA6Ly9weXRl
c3Qub3JnL2xhdGVzdC9maXh0dXJlLmh0bWwjdXNlZml4dHVyZXMgIgotICAgICkKLQotZGVmIHB5
dGVzdF9zZXNzaW9uc3RhcnQoc2Vzc2lvbik6Ci0gICAgc2Vzc2lvbi5fZml4dHVyZW1hbmFnZXIg
PSBGaXh0dXJlTWFuYWdlcihzZXNzaW9uKQotCi1AcHl0ZXN0Lmhvb2tpbXBsKHRyeWxhc3Q9VHJ1
ZSkKLWRlZiBweXRlc3RfbmFtZXNwYWNlKCk6Ci0gICAgcmFpc2VzLkV4Y2VwdGlvbiA9IHB5dGVz
dC5mYWlsLkV4Y2VwdGlvbgotICAgIHJldHVybiB7Ci0gICAgICAgICdmaXh0dXJlJzogZml4dHVy
ZSwKLSAgICAgICAgJ3lpZWxkX2ZpeHR1cmUnOiB5aWVsZF9maXh0dXJlLAotICAgICAgICAncmFp
c2VzJyA6IHJhaXNlcywKLSAgICAgICAgJ2NvbGxlY3QnOiB7Ci0gICAgICAgICdNb2R1bGUnOiBN
b2R1bGUsICdDbGFzcyc6IENsYXNzLCAnSW5zdGFuY2UnOiBJbnN0YW5jZSwKLSAgICAgICAgJ0Z1
bmN0aW9uJzogRnVuY3Rpb24sICdHZW5lcmF0b3InOiBHZW5lcmF0b3IsCi0gICAgICAgICdfZmls
bGZ1bmNhcmdzJzogZmlsbGZpeHR1cmVzfQotICAgIH0KLQotQGZpeHR1cmUoc2NvcGU9InNlc3Np
b24iKQotZGVmIHB5dGVzdGNvbmZpZyhyZXF1ZXN0KToKLSAgICAiIiIgdGhlIHB5dGVzdCBjb25m
aWcgb2JqZWN0IHdpdGggYWNjZXNzIHRvIGNvbW1hbmQgbGluZSBvcHRzLiIiIgotICAgIHJldHVy
biByZXF1ZXN0LmNvbmZpZwotCi0KLUBweXRlc3QuaG9va2ltcGwodHJ5bGFzdD1UcnVlKQotZGVm
IHB5dGVzdF9weWZ1bmNfY2FsbChweWZ1bmNpdGVtKToKLSAgICB0ZXN0ZnVuY3Rpb24gPSBweWZ1
bmNpdGVtLm9iagotICAgIGlmIHB5ZnVuY2l0ZW0uX2lzeWllbGRlZGZ1bmN0aW9uKCk6Ci0gICAg
ICAgIHRlc3RmdW5jdGlvbigqcHlmdW5jaXRlbS5fYXJncykKLSAgICBlbHNlOgotICAgICAgICBm
dW5jYXJncyA9IHB5ZnVuY2l0ZW0uZnVuY2FyZ3MKLSAgICAgICAgdGVzdGFyZ3MgPSB7fQotICAg
ICAgICBmb3IgYXJnIGluIHB5ZnVuY2l0ZW0uX2ZpeHR1cmVpbmZvLmFyZ25hbWVzOgotICAgICAg
ICAgICAgdGVzdGFyZ3NbYXJnXSA9IGZ1bmNhcmdzW2FyZ10KLSAgICAgICAgdGVzdGZ1bmN0aW9u
KCoqdGVzdGFyZ3MpCi0gICAgcmV0dXJuIFRydWUKLQotZGVmIHB5dGVzdF9jb2xsZWN0X2ZpbGUo
cGF0aCwgcGFyZW50KToKLSAgICBleHQgPSBwYXRoLmV4dAotICAgIGlmIGV4dCA9PSAiLnB5IjoK
LSAgICAgICAgaWYgbm90IHBhcmVudC5zZXNzaW9uLmlzaW5pdHBhdGgocGF0aCk6Ci0gICAgICAg
ICAgICBmb3IgcGF0IGluIHBhcmVudC5jb25maWcuZ2V0aW5pKCdweXRob25fZmlsZXMnKToKLSAg
ICAgICAgICAgICAgICBpZiBwYXRoLmZubWF0Y2gocGF0KToKLSAgICAgICAgICAgICAgICAgICAg
YnJlYWsKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAg
aWhvb2sgPSBwYXJlbnQuc2Vzc2lvbi5nZXRob29rcHJveHkocGF0aCkKLSAgICAgICAgcmV0dXJu
IGlob29rLnB5dGVzdF9weWNvbGxlY3RfbWFrZW1vZHVsZShwYXRoPXBhdGgsIHBhcmVudD1wYXJl
bnQpCi0KLWRlZiBweXRlc3RfcHljb2xsZWN0X21ha2Vtb2R1bGUocGF0aCwgcGFyZW50KToKLSAg
ICByZXR1cm4gTW9kdWxlKHBhdGgsIHBhcmVudCkKLQotQHB5dGVzdC5ob29raW1wbChob29rd3Jh
cHBlcj1UcnVlKQotZGVmIHB5dGVzdF9weWNvbGxlY3RfbWFrZWl0ZW0oY29sbGVjdG9yLCBuYW1l
LCBvYmopOgotICAgIG91dGNvbWUgPSB5aWVsZAotICAgIHJlcyA9IG91dGNvbWUuZ2V0X3Jlc3Vs
dCgpCi0gICAgaWYgcmVzIGlzIG5vdCBOb25lOgotICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9u
Ci0gICAgIyBub3RoaW5nIHdhcyBjb2xsZWN0ZWQgZWxzZXdoZXJlLCBsZXQncyBkbyBpdCBoZXJl
Ci0gICAgaWYgaXNjbGFzcyhvYmopOgotICAgICAgICBpZiBjb2xsZWN0b3IuaXN0ZXN0Y2xhc3Mo
b2JqLCBuYW1lKToKLSAgICAgICAgICAgIENsYXNzID0gY29sbGVjdG9yLl9nZXRjdXN0b21jbGFz
cygiQ2xhc3MiKQotICAgICAgICAgICAgb3V0Y29tZS5mb3JjZV9yZXN1bHQoQ2xhc3MobmFtZSwg
cGFyZW50PWNvbGxlY3RvcikpCi0gICAgZWxpZiBjb2xsZWN0b3IuaXN0ZXN0ZnVuY3Rpb24ob2Jq
LCBuYW1lKToKLSAgICAgICAgIyBtb2NrIHNlZW1zIHRvIHN0b3JlIHVuYm91bmQgbWV0aG9kcyAo
aXNzdWU0NzMpLCBub3JtYWxpemUgaXQKLSAgICAgICAgb2JqID0gZ2V0YXR0cihvYmosICJfX2Z1
bmNfXyIsIG9iaikKLSAgICAgICAgIyBXZSBuZWVkIHRvIHRyeSBhbmQgdW53cmFwIHRoZSBmdW5j
dGlvbiBpZiBpdCdzIGEgZnVuY3Rvb2xzLnBhcnRpYWwKLSAgICAgICAgIyBvciBhIGZ1bnRvb2xz
LndyYXBwZWQuCi0gICAgICAgICMgV2UgbXVzbid0IGlmIGl0J3MgYmVlbiB3cmFwcGVkIHdpdGgg
bW9jay5wYXRjaCAocHl0aG9uIDIgb25seSkKLSAgICAgICAgaWYgbm90IChpc2Z1bmN0aW9uKG9i
aikgb3IgaXNmdW5jdGlvbihnZXRfcmVhbF9mdW5jKG9iaikpKToKLSAgICAgICAgICAgIGNvbGxl
Y3Rvci53YXJuKGNvZGU9IkMyIiwgbWVzc2FnZT0KLSAgICAgICAgICAgICAgICAiY2Fubm90IGNv
bGxlY3QgJXIgYmVjYXVzZSBpdCBpcyBub3QgYSBmdW5jdGlvbi4iCi0gICAgICAgICAgICAgICAg
JSBuYW1lLCApCi0gICAgICAgIGVsaWYgZ2V0YXR0cihvYmosICJfX3Rlc3RfXyIsIFRydWUpOgot
ICAgICAgICAgICAgaWYgaXNfZ2VuZXJhdG9yKG9iaik6Ci0gICAgICAgICAgICAgICAgcmVzID0g
R2VuZXJhdG9yKG5hbWUsIHBhcmVudD1jb2xsZWN0b3IpCi0gICAgICAgICAgICBlbHNlOgotICAg
ICAgICAgICAgICAgIHJlcyA9IGxpc3QoY29sbGVjdG9yLl9nZW5mdW5jdGlvbnMobmFtZSwgb2Jq
KSkKLSAgICAgICAgICAgIG91dGNvbWUuZm9yY2VfcmVzdWx0KHJlcykKLQotZGVmIGlzX2dlbmVy
YXRvcihmdW5jKToKLSAgICB0cnk6Ci0gICAgICAgIHJldHVybiBfcHl0ZXN0Ll9jb2RlLmdldHJh
d2NvZGUoZnVuYykuY29fZmxhZ3MgJiAzMiAjIGdlbmVyYXRvciBmdW5jdGlvbgotICAgIGV4Y2Vw
dCBBdHRyaWJ1dGVFcnJvcjogIyBidWlsdGluIGZ1bmN0aW9ucyBoYXZlIG5vIGJ5dGVjb2RlCi0g
ICAgICAgICMgYXNzdW1lIHRoZW0gdG8gbm90IGJlIGdlbmVyYXRvcnMKLSAgICAgICAgcmV0dXJu
IEZhbHNlCi0KLWNsYXNzIFB5b2JqQ29udGV4dChvYmplY3QpOgotICAgIG1vZHVsZSA9IHB5b2Jq
X3Byb3BlcnR5KCJNb2R1bGUiKQotICAgIGNscyA9IHB5b2JqX3Byb3BlcnR5KCJDbGFzcyIpCi0g
ICAgaW5zdGFuY2UgPSBweW9ial9wcm9wZXJ0eSgiSW5zdGFuY2UiKQotCi1jbGFzcyBQeW9iak1p
eGluKFB5b2JqQ29udGV4dCk6Ci0gICAgZGVmIG9iaigpOgotICAgICAgICBkZWYgZmdldChzZWxm
KToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fb2JqCi0g
ICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICAgICAgc2VsZi5f
b2JqID0gb2JqID0gc2VsZi5fZ2V0b2JqKCkKLSAgICAgICAgICAgICAgICByZXR1cm4gb2JqCi0g
ICAgICAgIGRlZiBmc2V0KHNlbGYsIHZhbHVlKToKLSAgICAgICAgICAgIHNlbGYuX29iaiA9IHZh
bHVlCi0gICAgICAgIHJldHVybiBwcm9wZXJ0eShmZ2V0LCBmc2V0LCBOb25lLCAidW5kZXJseWlu
ZyBweXRob24gb2JqZWN0IikKLSAgICBvYmogPSBvYmooKQotCi0gICAgZGVmIF9nZXRvYmooc2Vs
Zik6Ci0gICAgICAgIHJldHVybiBnZXRhdHRyKHNlbGYucGFyZW50Lm9iaiwgc2VsZi5uYW1lKQot
Ci0gICAgZGVmIGdldG1vZHBhdGgoc2VsZiwgc3RvcGF0bW9kdWxlPVRydWUsIGluY2x1ZGVtb2R1
bGU9RmFsc2UpOgotICAgICAgICAiIiIgcmV0dXJuIHB5dGhvbiBwYXRoIHJlbGF0aXZlIHRvIHRo
ZSBjb250YWluaW5nIG1vZHVsZS4gIiIiCi0gICAgICAgIGNoYWluID0gc2VsZi5saXN0Y2hhaW4o
KQotICAgICAgICBjaGFpbi5yZXZlcnNlKCkKLSAgICAgICAgcGFydHMgPSBbXQotICAgICAgICBm
b3Igbm9kZSBpbiBjaGFpbjoKLSAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uobm9kZSwgSW5zdGFu
Y2UpOgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBuYW1lID0gbm9kZS5u
YW1lCi0gICAgICAgICAgICBpZiBpc2luc3RhbmNlKG5vZGUsIE1vZHVsZSk6Ci0gICAgICAgICAg
ICAgICAgYXNzZXJ0IG5hbWUuZW5kc3dpdGgoIi5weSIpCi0gICAgICAgICAgICAgICAgbmFtZSA9
IG5hbWVbOi0zXQotICAgICAgICAgICAgICAgIGlmIHN0b3BhdG1vZHVsZToKLSAgICAgICAgICAg
ICAgICAgICAgaWYgaW5jbHVkZW1vZHVsZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRz
LmFwcGVuZChuYW1lKQotICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgcGFy
dHMuYXBwZW5kKG5hbWUpCi0gICAgICAgIHBhcnRzLnJldmVyc2UoKQotICAgICAgICBzID0gIi4i
LmpvaW4ocGFydHMpCi0gICAgICAgIHJldHVybiBzLnJlcGxhY2UoIi5bIiwgIlsiKQotCi0gICAg
ZGVmIF9nZXRmc2xpbmVubyhzZWxmKToKLSAgICAgICAgcmV0dXJuIGdldGZzbGluZW5vKHNlbGYu
b2JqKQotCi0gICAgZGVmIHJlcG9ydGluZm8oc2VsZik6Ci0gICAgICAgICMgWFhYIGNhY2hpbmc/
Ci0gICAgICAgIG9iaiA9IHNlbGYub2JqCi0gICAgICAgIGNvbXBhdF9jb19maXJzdGxpbmVubyA9
IGdldGF0dHIob2JqLCAnY29tcGF0X2NvX2ZpcnN0bGluZW5vJywgTm9uZSkKLSAgICAgICAgaWYg
aXNpbnN0YW5jZShjb21wYXRfY29fZmlyc3RsaW5lbm8sIGludCk6Ci0gICAgICAgICAgICAjIG5v
c2UgY29tcGF0aWJpbGl0eQotICAgICAgICAgICAgZnNwYXRoID0gc3lzLm1vZHVsZXNbb2JqLl9f
bW9kdWxlX19dLl9fZmlsZV9fCi0gICAgICAgICAgICBpZiBmc3BhdGguZW5kc3dpdGgoIi5weWMi
KToKLSAgICAgICAgICAgICAgICBmc3BhdGggPSBmc3BhdGhbOi0xXQotICAgICAgICAgICAgbGlu
ZW5vID0gY29tcGF0X2NvX2ZpcnN0bGluZW5vCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBm
c3BhdGgsIGxpbmVubyA9IGdldGZzbGluZW5vKG9iaikKLSAgICAgICAgbW9kcGF0aCA9IHNlbGYu
Z2V0bW9kcGF0aCgpCi0gICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGxpbmVubywgaW50KQotICAg
ICAgICByZXR1cm4gZnNwYXRoLCBsaW5lbm8sIG1vZHBhdGgKLQotY2xhc3MgUHlDb2xsZWN0b3Io
UHlvYmpNaXhpbiwgcHl0ZXN0LkNvbGxlY3Rvcik6Ci0KLSAgICBkZWYgZnVuY25hbWVmaWx0ZXIo
c2VsZiwgbmFtZSk6Ci0gICAgICAgIHJldHVybiBzZWxmLl9tYXRjaGVzX3ByZWZpeF9vcl9nbG9i
X29wdGlvbigncHl0aG9uX2Z1bmN0aW9ucycsIG5hbWUpCi0KLSAgICBkZWYgaXNub3NldGVzdChz
ZWxmLCBvYmopOgotICAgICAgICAiIiIgTG9vayBmb3IgdGhlIF9fdGVzdF9fIGF0dHJpYnV0ZSwg
d2hpY2ggaXMgYXBwbGllZCBieSB0aGUKLSAgICAgICAgQG5vc2UudG9vbHMuaXN0ZXN0IGRlY29y
YXRvcgotICAgICAgICAiIiIKLSAgICAgICAgIyBXZSBleHBsaWNpdGx5IGNoZWNrIGZvciAiaXMg
VHJ1ZSIgaGVyZSB0byBub3QgbWlzdGFrZW5seSB0cmVhdAotICAgICAgICAjIGNsYXNzZXMgd2l0
aCBhIGN1c3RvbSBfX2dldGF0dHJfXyByZXR1cm5pbmcgc29tZXRoaW5nIHRydXRoeSAobGlrZSBh
Ci0gICAgICAgICMgZnVuY3Rpb24pIGFzIHRlc3QgY2xhc3Nlcy4KLSAgICAgICAgcmV0dXJuIHNh
ZmVfZ2V0YXR0cihvYmosICdfX3Rlc3RfXycsIEZhbHNlKSBpcyBUcnVlCi0KLSAgICBkZWYgY2xh
c3NuYW1lZmlsdGVyKHNlbGYsIG5hbWUpOgotICAgICAgICByZXR1cm4gc2VsZi5fbWF0Y2hlc19w
cmVmaXhfb3JfZ2xvYl9vcHRpb24oJ3B5dGhvbl9jbGFzc2VzJywgbmFtZSkKLQotICAgIGRlZiBp
c3Rlc3RmdW5jdGlvbihzZWxmLCBvYmosIG5hbWUpOgotICAgICAgICByZXR1cm4gKAotICAgICAg
ICAgICAgKHNlbGYuZnVuY25hbWVmaWx0ZXIobmFtZSkgb3Igc2VsZi5pc25vc2V0ZXN0KG9iaikp
IGFuZAotICAgICAgICAgICAgc2FmZV9nZXRhdHRyKG9iaiwgIl9fY2FsbF9fIiwgRmFsc2UpIGFu
ZCBnZXRmaXh0dXJlbWFya2VyKG9iaikgaXMgTm9uZQotICAgICAgICApCi0KLSAgICBkZWYgaXN0
ZXN0Y2xhc3Moc2VsZiwgb2JqLCBuYW1lKToKLSAgICAgICAgcmV0dXJuIHNlbGYuY2xhc3NuYW1l
ZmlsdGVyKG5hbWUpIG9yIHNlbGYuaXNub3NldGVzdChvYmopCi0KLSAgICBkZWYgX21hdGNoZXNf
cHJlZml4X29yX2dsb2Jfb3B0aW9uKHNlbGYsIG9wdGlvbl9uYW1lLCBuYW1lKToKLSAgICAgICAg
IiIiCi0gICAgICAgIGNoZWNrcyBpZiB0aGUgZ2l2ZW4gbmFtZSBtYXRjaGVzIHRoZSBwcmVmaXgg
b3IgZ2xvYi1wYXR0ZXJuIGRlZmluZWQKLSAgICAgICAgaW4gaW5pIGNvbmZpZ3VyYXRpb24uCi0g
ICAgICAgICIiIgotICAgICAgICBmb3Igb3B0aW9uIGluIHNlbGYuY29uZmlnLmdldGluaShvcHRp
b25fbmFtZSk6Ci0gICAgICAgICAgICBpZiBuYW1lLnN0YXJ0c3dpdGgob3B0aW9uKToKLSAgICAg
ICAgICAgICAgICByZXR1cm4gVHJ1ZQotICAgICAgICAgICAgIyBjaGVjayB0aGF0IG5hbWUgbG9v
a3MgbGlrZSBhIGdsb2Itc3RyaW5nIGJlZm9yZSBjYWxsaW5nIGZubWF0Y2gKLSAgICAgICAgICAg
ICMgYmVjYXVzZSB0aGlzIGlzIGNhbGxlZCBmb3IgZXZlcnkgbmFtZSBpbiBlYWNoIGNvbGxlY3Rl
ZCBtb2R1bGUsCi0gICAgICAgICAgICAjIGFuZCBmbm1hdGNoIGlzIHNvbWV3aGF0IGV4cGVuc2l2
ZSB0byBjYWxsCi0gICAgICAgICAgICBlbGlmICgnKicgaW4gb3B0aW9uIG9yICc/JyBpbiBvcHRp
b24gb3IgJ1snIGluIG9wdGlvbikgYW5kIFwKLSAgICAgICAgICAgICAgICAgICAgZm5tYXRjaC5m
bm1hdGNoKG5hbWUsIG9wdGlvbik6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICAg
ICAgcmV0dXJuIEZhbHNlCi0KLSAgICBkZWYgY29sbGVjdChzZWxmKToKLSAgICAgICAgaWYgbm90
IGdldGF0dHIoc2VsZi5vYmosICJfX3Rlc3RfXyIsIFRydWUpOgotICAgICAgICAgICAgcmV0dXJu
IFtdCi0KLSAgICAgICAgIyBOQi4gd2UgYXZvaWQgcmFuZG9tIGdldGF0dHJzIGFuZCBwZWVrIGlu
IHRoZSBfX2RpY3RfXyBpbnN0ZWFkCi0gICAgICAgICMgKFhYWCBvcmlnaW5hbGx5IGludHJvZHVj
ZWQgZnJvbSBhIFB5UHkgbmVlZCwgc3RpbGwgdHJ1ZT8pCi0gICAgICAgIGRpY3RzID0gW2dldGF0
dHIoc2VsZi5vYmosICdfX2RpY3RfXycsIHt9KV0KLSAgICAgICAgZm9yIGJhc2VjbHMgaW4gaW5z
cGVjdC5nZXRtcm8oc2VsZi5vYmouX19jbGFzc19fKToKLSAgICAgICAgICAgIGRpY3RzLmFwcGVu
ZChiYXNlY2xzLl9fZGljdF9fKQotICAgICAgICBzZWVuID0ge30KLSAgICAgICAgbCA9IFtdCi0g
ICAgICAgIGZvciBkaWMgaW4gZGljdHM6Ci0gICAgICAgICAgICBmb3IgbmFtZSwgb2JqIGluIGxp
c3QoZGljLml0ZW1zKCkpOgotICAgICAgICAgICAgICAgIGlmIG5hbWUgaW4gc2VlbjoKLSAgICAg
ICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgICAgICBzZWVuW25hbWVdID0gVHJ1
ZQotICAgICAgICAgICAgICAgIHJlcyA9IHNlbGYubWFrZWl0ZW0obmFtZSwgb2JqKQotICAgICAg
ICAgICAgICAgIGlmIHJlcyBpcyBOb25lOgotICAgICAgICAgICAgICAgICAgICBjb250aW51ZQot
ICAgICAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHJlcywgbGlzdCk6Ci0gICAgICAgICAg
ICAgICAgICAgIHJlcyA9IFtyZXNdCi0gICAgICAgICAgICAgICAgbC5leHRlbmQocmVzKQotICAg
ICAgICBsLnNvcnQoa2V5PWxhbWJkYSBpdGVtOiBpdGVtLnJlcG9ydGluZm8oKVs6Ml0pCi0gICAg
ICAgIHJldHVybiBsCi0KLSAgICBkZWYgbWFrZWl0ZW0oc2VsZiwgbmFtZSwgb2JqKToKLSAgICAg
ICAgI2Fzc2VydCBzZWxmLmlob29rLmZzcGF0aCA9PSBzZWxmLmZzcGF0aCwgc2VsZgotICAgICAg
ICByZXR1cm4gc2VsZi5paG9vay5weXRlc3RfcHljb2xsZWN0X21ha2VpdGVtKAotICAgICAgICAg
ICAgY29sbGVjdG9yPXNlbGYsIG5hbWU9bmFtZSwgb2JqPW9iaikKLQotICAgIGRlZiBfZ2VuZnVu
Y3Rpb25zKHNlbGYsIG5hbWUsIGZ1bmNvYmopOgotICAgICAgICBtb2R1bGUgPSBzZWxmLmdldHBh
cmVudChNb2R1bGUpLm9iagotICAgICAgICBjbHNjb2wgPSBzZWxmLmdldHBhcmVudChDbGFzcykK
LSAgICAgICAgY2xzID0gY2xzY29sIGFuZCBjbHNjb2wub2JqIG9yIE5vbmUKLSAgICAgICAgdHJh
bnNmZXJfbWFya2VycyhmdW5jb2JqLCBjbHMsIG1vZHVsZSkKLSAgICAgICAgZm0gPSBzZWxmLnNl
c3Npb24uX2ZpeHR1cmVtYW5hZ2VyCi0gICAgICAgIGZpeHR1cmVpbmZvID0gZm0uZ2V0Zml4dHVy
ZWluZm8oc2VsZiwgZnVuY29iaiwgY2xzKQotICAgICAgICBtZXRhZnVuYyA9IE1ldGFmdW5jKGZ1
bmNvYmosIGZpeHR1cmVpbmZvLCBzZWxmLmNvbmZpZywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjbHM9Y2xzLCBtb2R1bGU9bW9kdWxlKQotICAgICAgICBtZXRob2RzID0gW10KLSAgICAg
ICAgaWYgaGFzYXR0cihtb2R1bGUsICJweXRlc3RfZ2VuZXJhdGVfdGVzdHMiKToKLSAgICAgICAg
ICAgIG1ldGhvZHMuYXBwZW5kKG1vZHVsZS5weXRlc3RfZ2VuZXJhdGVfdGVzdHMpCi0gICAgICAg
IGlmIGhhc2F0dHIoY2xzLCAicHl0ZXN0X2dlbmVyYXRlX3Rlc3RzIik6Ci0gICAgICAgICAgICBt
ZXRob2RzLmFwcGVuZChjbHMoKS5weXRlc3RfZ2VuZXJhdGVfdGVzdHMpCi0gICAgICAgIGlmIG1l
dGhvZHM6Ci0gICAgICAgICAgICBzZWxmLmlob29rLnB5dGVzdF9nZW5lcmF0ZV90ZXN0cy5jYWxs
X2V4dHJhKG1ldGhvZHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRpY3QobWV0YWZ1bmM9bWV0YWZ1bmMpKQotICAgICAgICBlbHNlOgot
ICAgICAgICAgICAgc2VsZi5paG9vay5weXRlc3RfZ2VuZXJhdGVfdGVzdHMobWV0YWZ1bmM9bWV0
YWZ1bmMpCi0KLSAgICAgICAgRnVuY3Rpb24gPSBzZWxmLl9nZXRjdXN0b21jbGFzcygiRnVuY3Rp
b24iKQotICAgICAgICBpZiBub3QgbWV0YWZ1bmMuX2NhbGxzOgotICAgICAgICAgICAgeWllbGQg
RnVuY3Rpb24obmFtZSwgcGFyZW50PXNlbGYsIGZpeHR1cmVpbmZvPWZpeHR1cmVpbmZvKQotICAg
ICAgICBlbHNlOgotICAgICAgICAgICAgIyBhZGQgZnVuY2FyZ3MoKSBhcyBmaXh0dXJlZGVmcyB0
byBmaXh0dXJlaW5mby5hcmcyZml4dHVyZWRlZnMKLSAgICAgICAgICAgIGFkZF9mdW5jYXJnX3Bz
ZXVkb19maXh0dXJlX2RlZihzZWxmLCBtZXRhZnVuYywgZm0pCi0KLSAgICAgICAgICAgIGZvciBj
YWxsc3BlYyBpbiBtZXRhZnVuYy5fY2FsbHM6Ci0gICAgICAgICAgICAgICAgc3VibmFtZSA9ICIl
c1slc10iICUobmFtZSwgY2FsbHNwZWMuaWQpCi0gICAgICAgICAgICAgICAgeWllbGQgRnVuY3Rp
b24obmFtZT1zdWJuYW1lLCBwYXJlbnQ9c2VsZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjYWxsc3BlYz1jYWxsc3BlYywgY2FsbG9iaj1mdW5jb2JqLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZpeHR1cmVpbmZvPWZpeHR1cmVpbmZvLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGtleXdvcmRzPXtjYWxsc3BlYy5pZDpUcnVlfSkKLQotZGVmIGFkZF9m
dW5jYXJnX3BzZXVkb19maXh0dXJlX2RlZihjb2xsZWN0b3IsIG1ldGFmdW5jLCBmaXh0dXJlbWFu
YWdlcik6Ci0gICAgIyB0aGlzIGZ1bmN0aW9uIHdpbGwgdHJhbnNmb3JtIGFsbCBjb2xsZWN0ZWQg
Y2FsbHMgdG8gYSBmdW5jdGlvbnMKLSAgICAjIGlmIHRoZXkgdXNlIGRpcmVjdCBmdW5jYXJncyAo
aS5lLiBkaXJlY3QgcGFyYW1ldHJpemF0aW9uKQotICAgICMgYmVjYXVzZSB3ZSB3YW50IGxhdGVy
IHRlc3QgZXhlY3V0aW9uIHRvIGJlIGFibGUgdG8gcmVseSBvbgotICAgICMgYW4gZXhpc3Rpbmcg
Rml4dHVyZURlZiBzdHJ1Y3R1cmUgZm9yIGFsbCBhcmd1bWVudHMuCi0gICAgIyBYWFggd2UgY2Fu
IHByb2JhYmx5IGF2b2lkIHRoaXMgYWxnb3JpdGhtICBpZiB3ZSBtb2RpZnkgQ2FsbFNwZWMyCi0g
ICAgIyB0byBkaXJlY3RseSBjYXJlIGZvciBjcmVhdGluZyB0aGUgZml4dHVyZWRlZnMgd2l0aGlu
IGl0cyBtZXRob2RzLgotICAgIGlmIG5vdCBtZXRhZnVuYy5fY2FsbHNbMF0uZnVuY2FyZ3M6Ci0g
ICAgICAgIHJldHVybiAjIHRoaXMgZnVuY3Rpb24gY2FsbCBkb2VzIG5vdCBoYXZlIGRpcmVjdCBw
YXJhbWV0cml6YXRpb24KLSAgICAjIGNvbGxlY3QgZnVuY2FyZ3Mgb2YgYWxsIGNhbGxzcGVjcyBp
bnRvIGEgbGlzdCBvZiB2YWx1ZXMKLSAgICBhcmcycGFyYW1zID0ge30KLSAgICBhcmcyc2NvcGUg
PSB7fQotICAgIGZvciBjYWxsc3BlYyBpbiBtZXRhZnVuYy5fY2FsbHM6Ci0gICAgICAgIGZvciBh
cmduYW1lLCBhcmd2YWx1ZSBpbiBjYWxsc3BlYy5mdW5jYXJncy5pdGVtcygpOgotICAgICAgICAg
ICAgYXNzZXJ0IGFyZ25hbWUgbm90IGluIGNhbGxzcGVjLnBhcmFtcwotICAgICAgICAgICAgY2Fs
bHNwZWMucGFyYW1zW2FyZ25hbWVdID0gYXJndmFsdWUKLSAgICAgICAgICAgIGFyZzJwYXJhbXNf
bGlzdCA9IGFyZzJwYXJhbXMuc2V0ZGVmYXVsdChhcmduYW1lLCBbXSkKLSAgICAgICAgICAgIGNh
bGxzcGVjLmluZGljZXNbYXJnbmFtZV0gPSBsZW4oYXJnMnBhcmFtc19saXN0KQotICAgICAgICAg
ICAgYXJnMnBhcmFtc19saXN0LmFwcGVuZChhcmd2YWx1ZSkKLSAgICAgICAgICAgIGlmIGFyZ25h
bWUgbm90IGluIGFyZzJzY29wZToKLSAgICAgICAgICAgICAgICBzY29wZW51bSA9IGNhbGxzcGVj
Ll9hcmcyc2NvcGVudW0uZ2V0KGFyZ25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZW51bV9mdW5jdGlvbikKLSAgICAgICAgICAg
ICAgICBhcmcyc2NvcGVbYXJnbmFtZV0gPSBzY29wZXNbc2NvcGVudW1dCi0gICAgICAgIGNhbGxz
cGVjLmZ1bmNhcmdzLmNsZWFyKCkKLQotICAgICMgcmVnaXN0ZXIgYXJ0aWZpY2lhbCBGaXh0dXJl
RGVmJ3Mgc28gdGhhdCBsYXRlciBhdCB0ZXN0IGV4ZWN1dGlvbgotICAgICMgdGltZSB3ZSBjYW4g
cmVseSBvbiBhIHByb3BlciBGaXh0dXJlRGVmIHRvIGV4aXN0IGZvciBmaXh0dXJlIHNldHVwLgot
ICAgIGFyZzJmaXh0dXJlZGVmcyA9IG1ldGFmdW5jLl9hcmcyZml4dHVyZWRlZnMKLSAgICBmb3Ig
YXJnbmFtZSwgdmFsdWVsaXN0IGluIGFyZzJwYXJhbXMuaXRlbXMoKToKLSAgICAgICAgIyBpZiB3
ZSBoYXZlIGEgc2NvcGUgdGhhdCBpcyBoaWdoZXIgdGhhbiBmdW5jdGlvbiB3ZSBuZWVkCi0gICAg
ICAgICMgdG8gbWFrZSBzdXJlIHdlIG9ubHkgZXZlciBjcmVhdGUgYW4gYWNjb3JkaW5nIGZpeHR1
cmVkZWYgb24KLSAgICAgICAgIyBhIHBlci1zY29wZSBiYXNpcy4gV2UgdGh1cyBzdG9yZSBhbmQg
Y2FjaGUgdGhlIGZpeHR1cmVkZWYgb24gdGhlCi0gICAgICAgICMgbm9kZSByZWxhdGVkIHRvIHRo
ZSBzY29wZS4KLSAgICAgICAgc2NvcGUgPSBhcmcyc2NvcGVbYXJnbmFtZV0KLSAgICAgICAgbm9k
ZSA9IE5vbmUKLSAgICAgICAgaWYgc2NvcGUgIT0gImZ1bmN0aW9uIjoKLSAgICAgICAgICAgIG5v
ZGUgPSBnZXRfc2NvcGVfbm9kZShjb2xsZWN0b3IsIHNjb3BlKQotICAgICAgICAgICAgaWYgbm9k
ZSBpcyBOb25lOgotICAgICAgICAgICAgICAgIGFzc2VydCBzY29wZSA9PSAiY2xhc3MiIGFuZCBp
c2luc3RhbmNlKGNvbGxlY3RvciwgTW9kdWxlKQotICAgICAgICAgICAgICAgICMgdXNlIG1vZHVs
ZS1sZXZlbCBjb2xsZWN0b3IgZm9yIGNsYXNzLXNjb3BlIChmb3Igbm93KQotICAgICAgICAgICAg
ICAgIG5vZGUgPSBjb2xsZWN0b3IKLSAgICAgICAgaWYgbm9kZSBhbmQgYXJnbmFtZSBpbiBub2Rl
Ll9uYW1lMnBzZXVkb2ZpeHR1cmVkZWY6Ci0gICAgICAgICAgICBhcmcyZml4dHVyZWRlZnNbYXJn
bmFtZV0gPSBbbm9kZS5fbmFtZTJwc2V1ZG9maXh0dXJlZGVmW2FyZ25hbWVdXQotICAgICAgICBl
bHNlOgotICAgICAgICAgICAgZml4dHVyZWRlZiA9ICBGaXh0dXJlRGVmKGZpeHR1cmVtYW5hZ2Vy
LCAnJywgYXJnbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldF9kaXJlY3RfcGFy
YW1fZml4dHVyZV9mdW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnMnNjb3BlW2Fy
Z25hbWVdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVsaXN0LCBGYWxzZSwgRmFs
c2UpCi0gICAgICAgICAgICBhcmcyZml4dHVyZWRlZnNbYXJnbmFtZV0gPSBbZml4dHVyZWRlZl0K
LSAgICAgICAgICAgIGlmIG5vZGUgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgbm9kZS5f
bmFtZTJwc2V1ZG9maXh0dXJlZGVmW2FyZ25hbWVdID0gZml4dHVyZWRlZgotCi0KLWRlZiBnZXRf
ZGlyZWN0X3BhcmFtX2ZpeHR1cmVfZnVuYyhyZXF1ZXN0KToKLSAgICByZXR1cm4gcmVxdWVzdC5w
YXJhbQotCi1jbGFzcyBGdW5jRml4dHVyZUluZm86Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGFy
Z25hbWVzLCBuYW1lc19jbG9zdXJlLCBuYW1lMmZpeHR1cmVkZWZzKToKLSAgICAgICAgc2VsZi5h
cmduYW1lcyA9IGFyZ25hbWVzCi0gICAgICAgIHNlbGYubmFtZXNfY2xvc3VyZSA9IG5hbWVzX2Ns
b3N1cmUKLSAgICAgICAgc2VsZi5uYW1lMmZpeHR1cmVkZWZzID0gbmFtZTJmaXh0dXJlZGVmcwot
Ci0KLWRlZiBfbWFya2VkKGZ1bmMsIG1hcmspOgotICAgICIiIiBSZXR1cm5zIFRydWUgaWYgOmZ1
bmM6IGlzIGFscmVhZHkgbWFya2VkIHdpdGggOm1hcms6LCBGYWxzZSBvdGhlcndpc2UuCi0gICAg
VGhpcyBjYW4gaGFwcGVuIGlmIG1hcmtlciBpcyBhcHBsaWVkIHRvIGNsYXNzIGFuZCB0aGUgdGVz
dCBmaWxlIGlzCi0gICAgaW52b2tlZCBtb3JlIHRoYW4gb25jZS4KLSAgICAiIiIKLSAgICB0cnk6
Ci0gICAgICAgIGZ1bmNfbWFyayA9IGdldGF0dHIoZnVuYywgbWFyay5uYW1lKQotICAgIGV4Y2Vw
dCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgcmV0dXJuIG1hcmsu
YXJncyA9PSBmdW5jX21hcmsuYXJncyBhbmQgbWFyay5rd2FyZ3MgPT0gZnVuY19tYXJrLmt3YXJn
cwotCi0KLWRlZiB0cmFuc2Zlcl9tYXJrZXJzKGZ1bmNvYmosIGNscywgbW9kKToKLSAgICAjIFhY
WCB0aGlzIHNob3VsZCByYXRoZXIgYmUgY29kZSBpbiB0aGUgbWFyayBwbHVnaW4gb3IgdGhlIG1h
cmsKLSAgICAjIHBsdWdpbiBzaG91bGQgbWVyZ2Ugd2l0aCB0aGUgcHl0aG9uIHBsdWdpbi4KLSAg
ICBmb3IgaG9sZGVyIGluIChjbHMsIG1vZCk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHB5
dGVzdG1hcmsgPSBob2xkZXIucHl0ZXN0bWFyawotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJy
b3I6Ci0gICAgICAgICAgICBjb250aW51ZQotICAgICAgICBpZiBpc2luc3RhbmNlKHB5dGVzdG1h
cmssIGxpc3QpOgotICAgICAgICAgICAgZm9yIG1hcmsgaW4gcHl0ZXN0bWFyazoKLSAgICAgICAg
ICAgICAgICBpZiBub3QgX21hcmtlZChmdW5jb2JqLCBtYXJrKToKLSAgICAgICAgICAgICAgICAg
ICAgbWFyayhmdW5jb2JqKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgaWYgbm90IF9tYXJr
ZWQoZnVuY29iaiwgcHl0ZXN0bWFyayk6Ci0gICAgICAgICAgICAgICAgcHl0ZXN0bWFyayhmdW5j
b2JqKQotCi1jbGFzcyBNb2R1bGUocHl0ZXN0LkZpbGUsIFB5Q29sbGVjdG9yKToKLSAgICAiIiIg
Q29sbGVjdG9yIGZvciB0ZXN0IGNsYXNzZXMgYW5kIGZ1bmN0aW9ucy4gIiIiCi0gICAgZGVmIF9n
ZXRvYmooc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9tZW1vaXplZGNhbGwoJ19vYmonLCBz
ZWxmLl9pbXBvcnR0ZXN0bW9kdWxlKQotCi0gICAgZGVmIGNvbGxlY3Qoc2VsZik6Ci0gICAgICAg
IHNlbGYuc2Vzc2lvbi5fZml4dHVyZW1hbmFnZXIucGFyc2VmYWN0b3JpZXMoc2VsZikKLSAgICAg
ICAgcmV0dXJuIHN1cGVyKE1vZHVsZSwgc2VsZikuY29sbGVjdCgpCi0KLSAgICBkZWYgX2ltcG9y
dHRlc3Rtb2R1bGUoc2VsZik6Ci0gICAgICAgICMgd2UgYXNzdW1lIHdlIGFyZSBvbmx5IGNhbGxl
ZCBvbmNlIHBlciBtb2R1bGUKLSAgICAgICAgaW1wb3J0bW9kZSA9IHNlbGYuY29uZmlnLmdldG9w
dGlvbigiLS1pbXBvcnQtbW9kZSIpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG1vZCA9IHNl
bGYuZnNwYXRoLnB5aW1wb3J0KGVuc3VyZXN5c3BhdGg9aW1wb3J0bW9kZSkKLSAgICAgICAgZXhj
ZXB0IFN5bnRheEVycm9yOgotICAgICAgICAgICAgcmFpc2Ugc2VsZi5Db2xsZWN0RXJyb3IoCi0g
ICAgICAgICAgICAgICAgX3B5dGVzdC5fY29kZS5FeGNlcHRpb25JbmZvKCkuZ2V0cmVwcihzdHls
ZT0ic2hvcnQiKSkKLSAgICAgICAgZXhjZXB0IHNlbGYuZnNwYXRoLkltcG9ydE1pc21hdGNoRXJy
b3I6Ci0gICAgICAgICAgICBlID0gc3lzLmV4Y19pbmZvKClbMV0KLSAgICAgICAgICAgIHJhaXNl
IHNlbGYuQ29sbGVjdEVycm9yKAotICAgICAgICAgICAgICAgICJpbXBvcnQgZmlsZSBtaXNtYXRj
aDpcbiIKLSAgICAgICAgICAgICAgICAiaW1wb3J0ZWQgbW9kdWxlICVyIGhhcyB0aGlzIF9fZmls
ZV9fIGF0dHJpYnV0ZTpcbiIKLSAgICAgICAgICAgICAgICAiICAlc1xuIgotICAgICAgICAgICAg
ICAgICJ3aGljaCBpcyBub3QgdGhlIHNhbWUgYXMgdGhlIHRlc3QgZmlsZSB3ZSB3YW50IHRvIGNv
bGxlY3Q6XG4iCi0gICAgICAgICAgICAgICAgIiAgJXNcbiIKLSAgICAgICAgICAgICAgICAiSElO
VDogcmVtb3ZlIF9fcHljYWNoZV9fIC8gLnB5YyBmaWxlcyBhbmQvb3IgdXNlIGEgIgotICAgICAg
ICAgICAgICAgICJ1bmlxdWUgYmFzZW5hbWUgZm9yIHlvdXIgdGVzdCBmaWxlIG1vZHVsZXMiCi0g
ICAgICAgICAgICAgICAgICUgZS5hcmdzCi0gICAgICAgICAgICApCi0gICAgICAgICNwcmludCAi
aW1wb3J0ZWQgdGVzdCBtb2R1bGUiLCBtb2QKLSAgICAgICAgc2VsZi5jb25maWcucGx1Z2lubWFu
YWdlci5jb25zaWRlcl9tb2R1bGUobW9kKQotICAgICAgICByZXR1cm4gbW9kCi0KLSAgICBkZWYg
c2V0dXAoc2VsZik6Ci0gICAgICAgIHNldHVwX21vZHVsZSA9IHh1bml0c2V0dXAoc2VsZi5vYmos
ICJzZXRVcE1vZHVsZSIpCi0gICAgICAgIGlmIHNldHVwX21vZHVsZSBpcyBOb25lOgotICAgICAg
ICAgICAgc2V0dXBfbW9kdWxlID0geHVuaXRzZXR1cChzZWxmLm9iaiwgInNldHVwX21vZHVsZSIp
Ci0gICAgICAgIGlmIHNldHVwX21vZHVsZSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICNYWFg6
IG5vc2UgY29tcGF0IGhhY2ssIG1vdmUgdG8gbm9zZSBwbHVnaW4KLSAgICAgICAgICAgICMgaWYg
aXQgdGFrZXMgYSBwb3NpdGlvbmFsIGFyZywgaXRzIHByb2JhYmx5IGEgcHl0ZXN0IHN0eWxlIG9u
ZQotICAgICAgICAgICAgIyBzbyB3ZSBwYXNzIHRoZSBjdXJyZW50IG1vZHVsZSBvYmplY3QKLSAg
ICAgICAgICAgIGlmIF9oYXNfcG9zaXRpb25hbF9hcmcoc2V0dXBfbW9kdWxlKToKLSAgICAgICAg
ICAgICAgICBzZXR1cF9tb2R1bGUoc2VsZi5vYmopCi0gICAgICAgICAgICBlbHNlOgotICAgICAg
ICAgICAgICAgIHNldHVwX21vZHVsZSgpCi0gICAgICAgIGZpbiA9IGdldGF0dHIoc2VsZi5vYmos
ICd0ZWFyRG93bk1vZHVsZScsIE5vbmUpCi0gICAgICAgIGlmIGZpbiBpcyBOb25lOgotICAgICAg
ICAgICAgZmluID0gZ2V0YXR0cihzZWxmLm9iaiwgJ3RlYXJkb3duX21vZHVsZScsIE5vbmUpCi0g
ICAgICAgIGlmIGZpbiBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICNYWFg6IG5vc2UgY29tcGF0
IGhhY2ssIG1vdmUgdG8gbm9zZSBwbHVnaW4KLSAgICAgICAgICAgICMgaWYgaXQgdGFrZXMgYSBw
b3NpdGlvbmFsIGFyZywgaXQncyBwcm9iYWJseSBhIHB5dGVzdCBzdHlsZSBvbmUKLSAgICAgICAg
ICAgICMgc28gd2UgcGFzcyB0aGUgY3VycmVudCBtb2R1bGUgb2JqZWN0Ci0gICAgICAgICAgICBp
ZiBfaGFzX3Bvc2l0aW9uYWxfYXJnKGZpbik6Ci0gICAgICAgICAgICAgICAgZmluYWxpemVyID0g
bGFtYmRhOiBmaW4oc2VsZi5vYmopCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAg
IGZpbmFsaXplciA9IGZpbgotICAgICAgICAgICAgc2VsZi5hZGRmaW5hbGl6ZXIoZmluYWxpemVy
KQotCi0KLWNsYXNzIENsYXNzKFB5Q29sbGVjdG9yKToKLSAgICAiIiIgQ29sbGVjdG9yIGZvciB0
ZXN0IG1ldGhvZHMuICIiIgotICAgIGRlZiBjb2xsZWN0KHNlbGYpOgotICAgICAgICBpZiBoYXNp
bml0KHNlbGYub2JqKToKLSAgICAgICAgICAgIHNlbGYud2FybigiQzEiLCAiY2Fubm90IGNvbGxl
Y3QgdGVzdCBjbGFzcyAlciBiZWNhdXNlIGl0IGhhcyBhICIKLSAgICAgICAgICAgICAgICAiX19p
bml0X18gY29uc3RydWN0b3IiICUgc2VsZi5vYmouX19uYW1lX18pCi0gICAgICAgICAgICByZXR1
cm4gW10KLSAgICAgICAgcmV0dXJuIFtzZWxmLl9nZXRjdXN0b21jbGFzcygiSW5zdGFuY2UiKShu
YW1lPSIoKSIsIHBhcmVudD1zZWxmKV0KLQotICAgIGRlZiBzZXR1cChzZWxmKToKLSAgICAgICAg
c2V0dXBfY2xhc3MgPSB4dW5pdHNldHVwKHNlbGYub2JqLCAnc2V0dXBfY2xhc3MnKQotICAgICAg
ICBpZiBzZXR1cF9jbGFzcyBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHNldHVwX2NsYXNzID0g
Z2V0YXR0cihzZXR1cF9jbGFzcywgJ2ltX2Z1bmMnLCBzZXR1cF9jbGFzcykKLSAgICAgICAgICAg
IHNldHVwX2NsYXNzID0gZ2V0YXR0cihzZXR1cF9jbGFzcywgJ19fZnVuY19fJywgc2V0dXBfY2xh
c3MpCi0gICAgICAgICAgICBzZXR1cF9jbGFzcyhzZWxmLm9iaikKLQotICAgICAgICBmaW5fY2xh
c3MgPSBnZXRhdHRyKHNlbGYub2JqLCAndGVhcmRvd25fY2xhc3MnLCBOb25lKQotICAgICAgICBp
ZiBmaW5fY2xhc3MgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBmaW5fY2xhc3MgPSBnZXRhdHRy
KGZpbl9jbGFzcywgJ2ltX2Z1bmMnLCBmaW5fY2xhc3MpCi0gICAgICAgICAgICBmaW5fY2xhc3Mg
PSBnZXRhdHRyKGZpbl9jbGFzcywgJ19fZnVuY19fJywgZmluX2NsYXNzKQotICAgICAgICAgICAg
c2VsZi5hZGRmaW5hbGl6ZXIobGFtYmRhOiBmaW5fY2xhc3Moc2VsZi5vYmopKQotCi1jbGFzcyBJ
bnN0YW5jZShQeUNvbGxlY3Rvcik6Ci0gICAgZGVmIF9nZXRvYmooc2VsZik6Ci0gICAgICAgIG9i
aiA9IHNlbGYucGFyZW50Lm9iaigpCi0gICAgICAgIHJldHVybiBvYmoKLQotICAgIGRlZiBjb2xs
ZWN0KHNlbGYpOgotICAgICAgICBzZWxmLnNlc3Npb24uX2ZpeHR1cmVtYW5hZ2VyLnBhcnNlZmFj
dG9yaWVzKHNlbGYpCi0gICAgICAgIHJldHVybiBzdXBlcihJbnN0YW5jZSwgc2VsZikuY29sbGVj
dCgpCi0KLSAgICBkZWYgbmV3aW5zdGFuY2Uoc2VsZik6Ci0gICAgICAgIHNlbGYub2JqID0gc2Vs
Zi5fZ2V0b2JqKCkKLSAgICAgICAgcmV0dXJuIHNlbGYub2JqCi0KLWNsYXNzIEZ1bmN0aW9uTWl4
aW4oUHlvYmpNaXhpbik6Ci0gICAgIiIiIG1peGluIGZvciB0aGUgY29kZSBjb21tb24gdG8gRnVu
Y3Rpb24gYW5kIEdlbmVyYXRvci4KLSAgICAiIiIKLQotICAgIGRlZiBzZXR1cChzZWxmKToKLSAg
ICAgICAgIiIiIHBlcmZvcm0gc2V0dXAgZm9yIHRoaXMgdGVzdCBmdW5jdGlvbi4gIiIiCi0gICAg
ICAgIGlmIGhhc2F0dHIoc2VsZiwgJ19wcmVzZXJ2ZWRwYXJlbnQnKToKLSAgICAgICAgICAgIG9i
aiA9IHNlbGYuX3ByZXNlcnZlZHBhcmVudAotICAgICAgICBlbGlmIGlzaW5zdGFuY2Uoc2VsZi5w
YXJlbnQsIEluc3RhbmNlKToKLSAgICAgICAgICAgIG9iaiA9IHNlbGYucGFyZW50Lm5ld2luc3Rh
bmNlKCkKLSAgICAgICAgICAgIHNlbGYub2JqID0gc2VsZi5fZ2V0b2JqKCkKLSAgICAgICAgZWxz
ZToKLSAgICAgICAgICAgIG9iaiA9IHNlbGYucGFyZW50Lm9iagotICAgICAgICBpZiBpbnNwZWN0
LmlzbWV0aG9kKHNlbGYub2JqKToKLSAgICAgICAgICAgIHNldHVwX25hbWUgPSAnc2V0dXBfbWV0
aG9kJwotICAgICAgICAgICAgdGVhcmRvd25fbmFtZSA9ICd0ZWFyZG93bl9tZXRob2QnCi0gICAg
ICAgIGVsc2U6Ci0gICAgICAgICAgICBzZXR1cF9uYW1lID0gJ3NldHVwX2Z1bmN0aW9uJwotICAg
ICAgICAgICAgdGVhcmRvd25fbmFtZSA9ICd0ZWFyZG93bl9mdW5jdGlvbicKLSAgICAgICAgc2V0
dXBfZnVuY19vcl9tZXRob2QgPSB4dW5pdHNldHVwKG9iaiwgc2V0dXBfbmFtZSkKLSAgICAgICAg
aWYgc2V0dXBfZnVuY19vcl9tZXRob2QgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBzZXR1cF9m
dW5jX29yX21ldGhvZChzZWxmLm9iaikKLSAgICAgICAgZmluID0gZ2V0YXR0cihvYmosIHRlYXJk
b3duX25hbWUsIE5vbmUpCi0gICAgICAgIGlmIGZpbiBpcyBub3QgTm9uZToKLSAgICAgICAgICAg
IHNlbGYuYWRkZmluYWxpemVyKGxhbWJkYTogZmluKHNlbGYub2JqKSkKLQotICAgIGRlZiBfcHJ1
bmV0cmFjZWJhY2soc2VsZiwgZXhjaW5mbyk6Ci0gICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgJ19v
YmonKSBhbmQgbm90IHNlbGYuY29uZmlnLm9wdGlvbi5mdWxsdHJhY2U6Ci0gICAgICAgICAgICBj
b2RlID0gX3B5dGVzdC5fY29kZS5Db2RlKGdldF9yZWFsX2Z1bmMoc2VsZi5vYmopKQotICAgICAg
ICAgICAgcGF0aCwgZmlyc3RsaW5lbm8gPSBjb2RlLnBhdGgsIGNvZGUuZmlyc3RsaW5lbm8KLSAg
ICAgICAgICAgIHRyYWNlYmFjayA9IGV4Y2luZm8udHJhY2ViYWNrCi0gICAgICAgICAgICBudHJh
Y2ViYWNrID0gdHJhY2ViYWNrLmN1dChwYXRoPXBhdGgsIGZpcnN0bGluZW5vPWZpcnN0bGluZW5v
KQotICAgICAgICAgICAgaWYgbnRyYWNlYmFjayA9PSB0cmFjZWJhY2s6Ci0gICAgICAgICAgICAg
ICAgbnRyYWNlYmFjayA9IG50cmFjZWJhY2suY3V0KHBhdGg9cGF0aCkKLSAgICAgICAgICAgICAg
ICBpZiBudHJhY2ViYWNrID09IHRyYWNlYmFjazoKLSAgICAgICAgICAgICAgICAgICAgI250cmFj
ZWJhY2sgPSBudHJhY2ViYWNrLmN1dChleGNsdWRlcGF0aD1jdXRkaXIyKQotICAgICAgICAgICAg
ICAgICAgICBudHJhY2ViYWNrID0gbnRyYWNlYmFjay5maWx0ZXIoZmlsdGVyX3RyYWNlYmFjaykK
LSAgICAgICAgICAgICAgICAgICAgaWYgbm90IG50cmFjZWJhY2s6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBudHJhY2ViYWNrID0gdHJhY2ViYWNrCi0KLSAgICAgICAgICAgIGV4Y2luZm8udHJh
Y2ViYWNrID0gbnRyYWNlYmFjay5maWx0ZXIoKQotICAgICAgICAgICAgIyBpc3N1ZTM2NDogbWFy
ayBhbGwgYnV0IGZpcnN0IGFuZCBsYXN0IGZyYW1lcyB0bwotICAgICAgICAgICAgIyBvbmx5IHNo
b3cgYSBzaW5nbGUtbGluZSBtZXNzYWdlIGZvciBlYWNoIGZyYW1lCi0gICAgICAgICAgICBpZiBz
ZWxmLmNvbmZpZy5vcHRpb24udGJzdHlsZSA9PSAiYXV0byI6Ci0gICAgICAgICAgICAgICAgaWYg
bGVuKGV4Y2luZm8udHJhY2ViYWNrKSA+IDI6Ci0gICAgICAgICAgICAgICAgICAgIGZvciBlbnRy
eSBpbiBleGNpbmZvLnRyYWNlYmFja1sxOi0xXToKLSAgICAgICAgICAgICAgICAgICAgICAgIGVu
dHJ5LnNldF9yZXByX3N0eWxlKCdzaG9ydCcpCi0KLSAgICBkZWYgX3JlcHJfZmFpbHVyZV9weShz
ZWxmLCBleGNpbmZvLCBzdHlsZT0ibG9uZyIpOgotICAgICAgICBpZiBleGNpbmZvLmVycmlzaW5z
dGFuY2UocHl0ZXN0LmZhaWwuRXhjZXB0aW9uKToKLSAgICAgICAgICAgIGlmIG5vdCBleGNpbmZv
LnZhbHVlLnB5dHJhY2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHB5Ll9idWlsdGluLl90b3Rl
eHQoZXhjaW5mby52YWx1ZSkKLSAgICAgICAgcmV0dXJuIHN1cGVyKEZ1bmN0aW9uTWl4aW4sIHNl
bGYpLl9yZXByX2ZhaWx1cmVfcHkoZXhjaW5mbywKLSAgICAgICAgICAgIHN0eWxlPXN0eWxlKQot
Ci0gICAgZGVmIHJlcHJfZmFpbHVyZShzZWxmLCBleGNpbmZvLCBvdXRlcnI9Tm9uZSk6Ci0gICAg
ICAgIGFzc2VydCBvdXRlcnIgaXMgTm9uZSwgIlhYWCBvdXRlcnIgdXNhZ2UgaXMgZGVwcmVjYXRl
ZCIKLSAgICAgICAgc3R5bGUgPSBzZWxmLmNvbmZpZy5vcHRpb24udGJzdHlsZQotICAgICAgICBp
ZiBzdHlsZSA9PSAiYXV0byI6Ci0gICAgICAgICAgICBzdHlsZSA9ICJsb25nIgotICAgICAgICBy
ZXR1cm4gc2VsZi5fcmVwcl9mYWlsdXJlX3B5KGV4Y2luZm8sIHN0eWxlPXN0eWxlKQotCi0KLWNs
YXNzIEdlbmVyYXRvcihGdW5jdGlvbk1peGluLCBQeUNvbGxlY3Rvcik6Ci0gICAgZGVmIGNvbGxl
Y3Qoc2VsZik6Ci0gICAgICAgICMgdGVzdCBnZW5lcmF0b3JzIGFyZSBzZWVuIGFzIGNvbGxlY3Rv
cnMgYnV0IHRoZXkgYWxzbwotICAgICAgICAjIGludm9rZSBzZXR1cC90ZWFyZG93biBvbiBwb3B1
bGFyIHJlcXVlc3QKLSAgICAgICAgIyAoaW5kdWNlZCBieSB0aGUgY29tbW9uICJ0ZXN0XyoiIG5h
bWluZyBzaGFyZWQgd2l0aCBub3JtYWwgdGVzdHMpCi0gICAgICAgIHNlbGYuc2Vzc2lvbi5fc2V0
dXBzdGF0ZS5wcmVwYXJlKHNlbGYpCi0gICAgICAgICMgc2VlIEZ1bmN0aW9uTWl4aW4uc2V0dXAg
YW5kIHRlc3Rfc2V0dXBzdGF0ZV9pc19wcmVzZXJ2ZWRfMTM0Ci0gICAgICAgIHNlbGYuX3ByZXNl
cnZlZHBhcmVudCA9IHNlbGYucGFyZW50Lm9iagotICAgICAgICBsID0gW10KLSAgICAgICAgc2Vl
biA9IHt9Ci0gICAgICAgIGZvciBpLCB4IGluIGVudW1lcmF0ZShzZWxmLm9iaigpKToKLSAgICAg
ICAgICAgIG5hbWUsIGNhbGwsIGFyZ3MgPSBzZWxmLmdldGNhbGxhcmdzKHgpCi0gICAgICAgICAg
ICBpZiBub3QgY2FsbGFibGUoY2FsbCk6Ci0gICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9y
KCIlciB5aWVsZGVkIG5vbiBjYWxsYWJsZSB0ZXN0ICVyIiAlKHNlbGYub2JqLCBjYWxsLCkpCi0g
ICAgICAgICAgICBpZiBuYW1lIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgbmFtZSA9ICJbJWRd
IiAlIGkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgbmFtZSA9ICJbJyVzJ10i
ICUgbmFtZQotICAgICAgICAgICAgaWYgbmFtZSBpbiBzZWVuOgotICAgICAgICAgICAgICAgIHJh
aXNlIFZhbHVlRXJyb3IoIiVyIGdlbmVyYXRlZCB0ZXN0cyB3aXRoIG5vbi11bmlxdWUgbmFtZSAl
ciIgJShzZWxmLCBuYW1lKSkKLSAgICAgICAgICAgIHNlZW5bbmFtZV0gPSBUcnVlCi0gICAgICAg
ICAgICBsLmFwcGVuZChzZWxmLkZ1bmN0aW9uKG5hbWUsIHNlbGYsIGFyZ3M9YXJncywgY2FsbG9i
aj1jYWxsKSkKLSAgICAgICAgcmV0dXJuIGwKLQotICAgIGRlZiBnZXRjYWxsYXJncyhzZWxmLCBv
YmopOgotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvYmosICh0dXBsZSwgbGlzdCkpOgotICAg
ICAgICAgICAgb2JqID0gKG9iaiwpCi0gICAgICAgICMgZXhwbGljdCBuYW1pbmcKLSAgICAgICAg
aWYgaXNpbnN0YW5jZShvYmpbMF0sIHB5LmJ1aWx0aW4uX2Jhc2VzdHJpbmcpOgotICAgICAgICAg
ICAgbmFtZSA9IG9ialswXQotICAgICAgICAgICAgb2JqID0gb2JqWzE6XQotICAgICAgICBlbHNl
OgotICAgICAgICAgICAgbmFtZSA9IE5vbmUKLSAgICAgICAgY2FsbCwgYXJncyA9IG9ialswXSwg
b2JqWzE6XQotICAgICAgICByZXR1cm4gbmFtZSwgY2FsbCwgYXJncwotCi0KLWRlZiBoYXNpbml0
KG9iaik6Ci0gICAgaW5pdCA9IGdldGF0dHIob2JqLCAnX19pbml0X18nLCBOb25lKQotICAgIGlm
IGluaXQ6Ci0gICAgICAgIGlmIGluaXQgIT0gb2JqZWN0Ll9faW5pdF9fOgotICAgICAgICAgICAg
cmV0dXJuIFRydWUKLQotCi0KLWRlZiBmaWxsZml4dHVyZXMoZnVuY3Rpb24pOgotICAgICIiIiBm
aWxsIG1pc3NpbmcgZnVuY2FyZ3MgZm9yIGEgdGVzdCBmdW5jdGlvbi4gIiIiCi0gICAgdHJ5Ogot
ICAgICAgICByZXF1ZXN0ID0gZnVuY3Rpb24uX3JlcXVlc3QKLSAgICBleGNlcHQgQXR0cmlidXRl
RXJyb3I6Ci0gICAgICAgICMgWFhYIHRoaXMgc3BlY2lhbCBjb2RlIHBhdGggaXMgb25seSBleHBl
Y3RlZCB0byBleGVjdXRlCi0gICAgICAgICMgd2l0aCB0aGUgb2Vqc2tpdCBwbHVnaW4uICBJdCB1
c2VzIGNsYXNzZXMgd2l0aCBmdW5jYXJncwotICAgICAgICAjIGFuZCB3ZSB0aHVzIGhhdmUgdG8g
d29yayBhIGJpdCB0byBhbGxvdyB0aGlzLgotICAgICAgICBmbSA9IGZ1bmN0aW9uLnNlc3Npb24u
X2ZpeHR1cmVtYW5hZ2VyCi0gICAgICAgIGZpID0gZm0uZ2V0Zml4dHVyZWluZm8oZnVuY3Rpb24u
cGFyZW50LCBmdW5jdGlvbi5vYmosIE5vbmUpCi0gICAgICAgIGZ1bmN0aW9uLl9maXh0dXJlaW5m
byA9IGZpCi0gICAgICAgIHJlcXVlc3QgPSBmdW5jdGlvbi5fcmVxdWVzdCA9IEZpeHR1cmVSZXF1
ZXN0KGZ1bmN0aW9uKQotICAgICAgICByZXF1ZXN0Ll9maWxsZml4dHVyZXMoKQotICAgICAgICAj
IHBydW5lIG91dCBmdW5jYXJncyBmb3IganN0ZXN0cwotICAgICAgICBuZXdmdW5jYXJncyA9IHt9
Ci0gICAgICAgIGZvciBuYW1lIGluIGZpLmFyZ25hbWVzOgotICAgICAgICAgICAgbmV3ZnVuY2Fy
Z3NbbmFtZV0gPSBmdW5jdGlvbi5mdW5jYXJnc1tuYW1lXQotICAgICAgICBmdW5jdGlvbi5mdW5j
YXJncyA9IG5ld2Z1bmNhcmdzCi0gICAgZWxzZToKLSAgICAgICAgcmVxdWVzdC5fZmlsbGZpeHR1
cmVzKCkKLQotCi1fbm90ZXhpc3RzID0gb2JqZWN0KCkKLQotY2xhc3MgQ2FsbFNwZWMyKG9iamVj
dCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1ldGFmdW5jKToKLSAgICAgICAgc2VsZi5tZXRh
ZnVuYyA9IG1ldGFmdW5jCi0gICAgICAgIHNlbGYuZnVuY2FyZ3MgPSB7fQotICAgICAgICBzZWxm
Ll9pZGxpc3QgPSBbXQotICAgICAgICBzZWxmLnBhcmFtcyA9IHt9Ci0gICAgICAgIHNlbGYuX2ds
b2JhbGlkID0gX25vdGV4aXN0cwotICAgICAgICBzZWxmLl9nbG9iYWxpZF9hcmdzID0gc2V0KCkK
LSAgICAgICAgc2VsZi5fZ2xvYmFscGFyYW0gPSBfbm90ZXhpc3RzCi0gICAgICAgIHNlbGYuX2Fy
ZzJzY29wZW51bSA9IHt9ICAjIHVzZWQgZm9yIHNvcnRpbmcgcGFyYW1ldHJpemVkIHJlc291cmNl
cwotICAgICAgICBzZWxmLmtleXdvcmRzID0ge30KLSAgICAgICAgc2VsZi5pbmRpY2VzID0ge30K
LQotICAgIGRlZiBjb3B5KHNlbGYsIG1ldGFmdW5jKToKLSAgICAgICAgY3MgPSBDYWxsU3BlYzIo
c2VsZi5tZXRhZnVuYykKLSAgICAgICAgY3MuZnVuY2FyZ3MudXBkYXRlKHNlbGYuZnVuY2FyZ3Mp
Ci0gICAgICAgIGNzLnBhcmFtcy51cGRhdGUoc2VsZi5wYXJhbXMpCi0gICAgICAgIGNzLmtleXdv
cmRzLnVwZGF0ZShzZWxmLmtleXdvcmRzKQotICAgICAgICBjcy5pbmRpY2VzLnVwZGF0ZShzZWxm
LmluZGljZXMpCi0gICAgICAgIGNzLl9hcmcyc2NvcGVudW0udXBkYXRlKHNlbGYuX2FyZzJzY29w
ZW51bSkKLSAgICAgICAgY3MuX2lkbGlzdCA9IGxpc3Qoc2VsZi5faWRsaXN0KQotICAgICAgICBj
cy5fZ2xvYmFsaWQgPSBzZWxmLl9nbG9iYWxpZAotICAgICAgICBjcy5fZ2xvYmFsaWRfYXJncyA9
IHNlbGYuX2dsb2JhbGlkX2FyZ3MKLSAgICAgICAgY3MuX2dsb2JhbHBhcmFtID0gc2VsZi5fZ2xv
YmFscGFyYW0KLSAgICAgICAgcmV0dXJuIGNzCi0KLSAgICBkZWYgX2NoZWNrYXJnbm90Y29udGFp
bmVkKHNlbGYsIGFyZyk6Ci0gICAgICAgIGlmIGFyZyBpbiBzZWxmLnBhcmFtcyBvciBhcmcgaW4g
c2VsZi5mdW5jYXJnczoKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImR1cGxpY2F0ZSAl
ciIgJShhcmcsKSkKLQotICAgIGRlZiBnZXRwYXJhbShzZWxmLCBuYW1lKToKLSAgICAgICAgdHJ5
OgotICAgICAgICAgICAgcmV0dXJuIHNlbGYucGFyYW1zW25hbWVdCi0gICAgICAgIGV4Y2VwdCBL
ZXlFcnJvcjoKLSAgICAgICAgICAgIGlmIHNlbGYuX2dsb2JhbHBhcmFtIGlzIF9ub3RleGlzdHM6
Ci0gICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihuYW1lKQotICAgICAgICAgICAgcmV0
dXJuIHNlbGYuX2dsb2JhbHBhcmFtCi0KLSAgICBAcHJvcGVydHkKLSAgICBkZWYgaWQoc2VsZik6
Ci0gICAgICAgIHJldHVybiAiLSIuam9pbihtYXAoc3RyLCBmaWx0ZXIoTm9uZSwgc2VsZi5faWRs
aXN0KSkpCi0KLSAgICBkZWYgc2V0bXVsdGkoc2VsZiwgdmFsdHlwZXMsIGFyZ25hbWVzLCB2YWxz
ZXQsIGlkLCBrZXl3b3Jkcywgc2NvcGVudW0sCi0gICAgICAgICAgICAgICAgIHBhcmFtX2luZGV4
KToKLSAgICAgICAgZm9yIGFyZyx2YWwgaW4gemlwKGFyZ25hbWVzLCB2YWxzZXQpOgotICAgICAg
ICAgICAgc2VsZi5fY2hlY2thcmdub3Rjb250YWluZWQoYXJnKQotICAgICAgICAgICAgdmFsdHlw
ZV9mb3JfYXJnID0gdmFsdHlwZXNbYXJnXQotICAgICAgICAgICAgZ2V0YXR0cihzZWxmLCB2YWx0
eXBlX2Zvcl9hcmcpW2FyZ10gPSB2YWwKLSAgICAgICAgICAgIHNlbGYuaW5kaWNlc1thcmddID0g
cGFyYW1faW5kZXgKLSAgICAgICAgICAgIHNlbGYuX2FyZzJzY29wZW51bVthcmddID0gc2NvcGVu
dW0KLSAgICAgICAgICAgIGlmIHZhbCBpcyBfbm90ZXhpc3RzOgotICAgICAgICAgICAgICAgIHNl
bGYuX2VtcHR5cGFyYW1zcGVjaWZpZWQgPSBUcnVlCi0gICAgICAgIHNlbGYuX2lkbGlzdC5hcHBl
bmQoaWQpCi0gICAgICAgIHNlbGYua2V5d29yZHMudXBkYXRlKGtleXdvcmRzKQotCi0gICAgZGVm
IHNldGFsbChzZWxmLCBmdW5jYXJncywgaWQsIHBhcmFtKToKLSAgICAgICAgZm9yIHggaW4gZnVu
Y2FyZ3M6Ci0gICAgICAgICAgICBzZWxmLl9jaGVja2FyZ25vdGNvbnRhaW5lZCh4KQotICAgICAg
ICBzZWxmLmZ1bmNhcmdzLnVwZGF0ZShmdW5jYXJncykKLSAgICAgICAgaWYgaWQgaXMgbm90IF9u
b3RleGlzdHM6Ci0gICAgICAgICAgICBzZWxmLl9pZGxpc3QuYXBwZW5kKGlkKQotICAgICAgICBp
ZiBwYXJhbSBpcyBub3QgX25vdGV4aXN0czoKLSAgICAgICAgICAgIGFzc2VydCBzZWxmLl9nbG9i
YWxwYXJhbSBpcyBfbm90ZXhpc3RzCi0gICAgICAgICAgICBzZWxmLl9nbG9iYWxwYXJhbSA9IHBh
cmFtCi0gICAgICAgIGZvciBhcmcgaW4gZnVuY2FyZ3M6Ci0gICAgICAgICAgICBzZWxmLl9hcmcy
c2NvcGVudW1bYXJnXSA9IHNjb3BlbnVtX2Z1bmN0aW9uCi0KLQotY2xhc3MgRnVuY2FyZ25hbWVz
Q29tcGF0QXR0cjoKLSAgICAiIiIgaGVscGVyIGNsYXNzIHNvIHRoYXQgTWV0YWZ1bmMsIEZ1bmN0
aW9uIGFuZCBGaXh0dXJlUmVxdWVzdAotICAgIGRvbid0IG5lZWQgdG8gZWFjaCBkZWZpbmUgdGhl
ICJmdW5jYXJnbmFtZXMiIGNvbXBhdGliaWxpdHkgYXR0cmlidXRlLgotICAgICIiIgotICAgIEBw
cm9wZXJ0eQotICAgIGRlZiBmdW5jYXJnbmFtZXMoc2VsZik6Ci0gICAgICAgICIiIiBhbGlhcyBh
dHRyaWJ1dGUgZm9yIGBgZml4dHVyZW5hbWVzYGAgZm9yIHByZS0yLjMgY29tcGF0aWJpbGl0eSIi
IgotICAgICAgICByZXR1cm4gc2VsZi5maXh0dXJlbmFtZXMKLQotY2xhc3MgTWV0YWZ1bmMoRnVu
Y2FyZ25hbWVzQ29tcGF0QXR0cik6Ci0gICAgIiIiCi0gICAgTWV0YWZ1bmMgb2JqZWN0cyBhcmUg
cGFzc2VkIHRvIHRoZSBgYHB5dGVzdF9nZW5lcmF0ZV90ZXN0c2BgIGhvb2suCi0gICAgVGhleSBo
ZWxwIHRvIGluc3BlY3QgYSB0ZXN0IGZ1bmN0aW9uIGFuZCB0byBnZW5lcmF0ZSB0ZXN0cyBhY2Nv
cmRpbmcgdG8KLSAgICB0ZXN0IGNvbmZpZ3VyYXRpb24gb3IgdmFsdWVzIHNwZWNpZmllZCBpbiB0
aGUgY2xhc3Mgb3IgbW9kdWxlIHdoZXJlIGEKLSAgICB0ZXN0IGZ1bmN0aW9uIGlzIGRlZmluZWQu
Ci0KLSAgICA6aXZhciBmaXh0dXJlbmFtZXM6IHNldCBvZiBmaXh0dXJlIG5hbWVzIHJlcXVpcmVk
IGJ5IHRoZSB0ZXN0IGZ1bmN0aW9uCi0KLSAgICA6aXZhciBmdW5jdGlvbjogdW5kZXJseWluZyBw
eXRob24gdGVzdCBmdW5jdGlvbgotCi0gICAgOml2YXIgY2xzOiBjbGFzcyBvYmplY3Qgd2hlcmUg
dGhlIHRlc3QgZnVuY3Rpb24gaXMgZGVmaW5lZCBpbiBvciBgYE5vbmVgYC4KLQotICAgIDppdmFy
IG1vZHVsZTogdGhlIG1vZHVsZSBvYmplY3Qgd2hlcmUgdGhlIHRlc3QgZnVuY3Rpb24gaXMgZGVm
aW5lZCBpbi4KLQotICAgIDppdmFyIGNvbmZpZzogYWNjZXNzIHRvIHRoZSA6Y2xhc3M6YF9weXRl
c3QuY29uZmlnLkNvbmZpZ2Agb2JqZWN0IGZvciB0aGUKLSAgICAgICAgdGVzdCBzZXNzaW9uLgot
Ci0gICAgOml2YXIgZnVuY2FyZ25hbWVzOgotICAgICAgICAuLiBkZXByZWNhdGVkOjogMi4zCi0g
ICAgICAgICAgICBVc2UgYGBmaXh0dXJlbmFtZXNgYCBpbnN0ZWFkLgotICAgICIiIgotICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBmdW5jdGlvbiwgZml4dHVyZWluZm8sIGNvbmZpZywgY2xzPU5vbmUs
IG1vZHVsZT1Ob25lKToKLSAgICAgICAgc2VsZi5jb25maWcgPSBjb25maWcKLSAgICAgICAgc2Vs
Zi5tb2R1bGUgPSBtb2R1bGUKLSAgICAgICAgc2VsZi5mdW5jdGlvbiA9IGZ1bmN0aW9uCi0gICAg
ICAgIHNlbGYuZml4dHVyZW5hbWVzID0gZml4dHVyZWluZm8ubmFtZXNfY2xvc3VyZQotICAgICAg
ICBzZWxmLl9hcmcyZml4dHVyZWRlZnMgPSBmaXh0dXJlaW5mby5uYW1lMmZpeHR1cmVkZWZzCi0g
ICAgICAgIHNlbGYuY2xzID0gY2xzCi0gICAgICAgIHNlbGYuX2NhbGxzID0gW10KLSAgICAgICAg
c2VsZi5faWRzID0gcHkuYnVpbHRpbi5zZXQoKQotCi0gICAgZGVmIHBhcmFtZXRyaXplKHNlbGYs
IGFyZ25hbWVzLCBhcmd2YWx1ZXMsIGluZGlyZWN0PUZhbHNlLCBpZHM9Tm9uZSwKLSAgICAgICAg
c2NvcGU9Tm9uZSk6Ci0gICAgICAgICIiIiBBZGQgbmV3IGludm9jYXRpb25zIHRvIHRoZSB1bmRl
cmx5aW5nIHRlc3QgZnVuY3Rpb24gdXNpbmcgdGhlIGxpc3QKLSAgICAgICAgb2YgYXJndmFsdWVz
IGZvciB0aGUgZ2l2ZW4gYXJnbmFtZXMuICBQYXJhbWV0cml6YXRpb24gaXMgcGVyZm9ybWVkCi0g
ICAgICAgIGR1cmluZyB0aGUgY29sbGVjdGlvbiBwaGFzZS4gIElmIHlvdSBuZWVkIHRvIHNldHVw
IGV4cGVuc2l2ZSByZXNvdXJjZXMKLSAgICAgICAgc2VlIGFib3V0IHNldHRpbmcgaW5kaXJlY3Qg
dG8gZG8gaXQgcmF0aGVyIGF0IHRlc3Qgc2V0dXAgdGltZS4KLQotICAgICAgICA6YXJnIGFyZ25h
bWVzOiBhIGNvbW1hLXNlcGFyYXRlZCBzdHJpbmcgZGVub3Rpbmcgb25lIG9yIG1vcmUgYXJndW1l
bnQKLSAgICAgICAgICAgICAgICAgICAgICAgbmFtZXMsIG9yIGEgbGlzdC90dXBsZSBvZiBhcmd1
bWVudCBzdHJpbmdzLgotCi0gICAgICAgIDphcmcgYXJndmFsdWVzOiBUaGUgbGlzdCBvZiBhcmd2
YWx1ZXMgZGV0ZXJtaW5lcyBob3cgb2Z0ZW4gYQotICAgICAgICAgICAgdGVzdCBpcyBpbnZva2Vk
IHdpdGggZGlmZmVyZW50IGFyZ3VtZW50IHZhbHVlcy4gIElmIG9ubHkgb25lCi0gICAgICAgICAg
ICBhcmduYW1lIHdhcyBzcGVjaWZpZWQgYXJndmFsdWVzIGlzIGEgbGlzdCBvZiB2YWx1ZXMuICBJ
ZiBOCi0gICAgICAgICAgICBhcmduYW1lcyB3ZXJlIHNwZWNpZmllZCwgYXJndmFsdWVzIG11c3Qg
YmUgYSBsaXN0IG9mIE4tdHVwbGVzLAotICAgICAgICAgICAgd2hlcmUgZWFjaCB0dXBsZS1lbGVt
ZW50IHNwZWNpZmllcyBhIHZhbHVlIGZvciBpdHMgcmVzcGVjdGl2ZQotICAgICAgICAgICAgYXJn
bmFtZS4KLQotICAgICAgICA6YXJnIGluZGlyZWN0OiBUaGUgbGlzdCBvZiBhcmduYW1lcyBvciBi
b29sZWFuLiBBIGxpc3Qgb2YgYXJndW1lbnRzJwotICAgICAgICAgICAgbmFtZXMgKHN1YnNldCBv
ZiBhcmduYW1lcykuIElmIFRydWUgdGhlIGxpc3QgY29udGFpbnMgYWxsIG5hbWVzIGZyb20KLSAg
ICAgICAgICAgIHRoZSBhcmduYW1lcy4gRWFjaCBhcmd2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIGFu
IGFyZ25hbWUgaW4gdGhpcyBsaXN0IHdpbGwKLSAgICAgICAgICAgIGJlIHBhc3NlZCBhcyByZXF1
ZXN0LnBhcmFtIHRvIGl0cyByZXNwZWN0aXZlIGFyZ25hbWUgZml4dHVyZQotICAgICAgICAgICAg
ZnVuY3Rpb24gc28gdGhhdCBpdCBjYW4gcGVyZm9ybSBtb3JlIGV4cGVuc2l2ZSBzZXR1cHMgZHVy
aW5nIHRoZQotICAgICAgICAgICAgc2V0dXAgcGhhc2Ugb2YgYSB0ZXN0IHJhdGhlciB0aGFuIGF0
IGNvbGxlY3Rpb24gdGltZS4KLQotICAgICAgICA6YXJnIGlkczogbGlzdCBvZiBzdHJpbmcgaWRz
LCBvciBhIGNhbGxhYmxlLgotICAgICAgICAgICAgSWYgc3RyaW5ncywgZWFjaCBpcyBjb3JyZXNw
b25kaW5nIHRvIHRoZSBhcmd2YWx1ZXMgc28gdGhhdCB0aGV5IGFyZQotICAgICAgICAgICAgcGFy
dCBvZiB0aGUgdGVzdCBpZC4KLSAgICAgICAgICAgIElmIGNhbGxhYmxlLCBpdCBzaG91bGQgdGFr
ZSBvbmUgYXJndW1lbnQgKGEgc2luZ2xlIGFyZ3ZhbHVlKSBhbmQgcmV0dXJuCi0gICAgICAgICAg
ICBhIHN0cmluZyBvciByZXR1cm4gTm9uZS4gSWYgTm9uZSwgdGhlIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGlkIGZvciB0aGF0Ci0gICAgICAgICAgICBhcmd1bWVudCB3aWxsIGJlIHVzZWQuCi0g
ICAgICAgICAgICBJZiBubyBpZHMgYXJlIHByb3ZpZGVkIHRoZXkgd2lsbCBiZSBnZW5lcmF0ZWQg
YXV0b21hdGljYWxseSBmcm9tCi0gICAgICAgICAgICB0aGUgYXJndmFsdWVzLgotCi0gICAgICAg
IDphcmcgc2NvcGU6IGlmIHNwZWNpZmllZCBpdCBkZW5vdGVzIHRoZSBzY29wZSBvZiB0aGUgcGFy
YW1ldGVycy4KLSAgICAgICAgICAgIFRoZSBzY29wZSBpcyB1c2VkIGZvciBncm91cGluZyB0ZXN0
cyBieSBwYXJhbWV0ZXIgaW5zdGFuY2VzLgotICAgICAgICAgICAgSXQgd2lsbCBhbHNvIG92ZXJy
aWRlIGFueSBmaXh0dXJlLWZ1bmN0aW9uIGRlZmluZWQgc2NvcGUsIGFsbG93aW5nCi0gICAgICAg
ICAgICB0byBzZXQgYSBkeW5hbWljIHNjb3BlIHVzaW5nIHRlc3QgY29udGV4dCBvciBjb25maWd1
cmF0aW9uLgotICAgICAgICAiIiIKLQotICAgICAgICAjIGluZGl2aWR1YWwgcGFyYW1ldHJpemVk
IGFyZ3VtZW50IHNldHMgY2FuIGJlIHdyYXBwZWQgaW4gYSBzZXJpZXMKLSAgICAgICAgIyBvZiBt
YXJrZXJzIGluIHdoaWNoIGNhc2Ugd2UgdW53cmFwIHRoZSB2YWx1ZXMgYW5kIGFwcGx5IHRoZSBt
YXJrCi0gICAgICAgICMgYXQgRnVuY3Rpb24gaW5pdAotICAgICAgICBuZXdrZXl3b3JkcyA9IHt9
Ci0gICAgICAgIHVud3JhcHBlZF9hcmd2YWx1ZXMgPSBbXQotICAgICAgICBmb3IgaSwgYXJndmFs
IGluIGVudW1lcmF0ZShhcmd2YWx1ZXMpOgotICAgICAgICAgICAgd2hpbGUgaXNpbnN0YW5jZShh
cmd2YWwsIE1hcmtEZWNvcmF0b3IpOgotICAgICAgICAgICAgICAgIG5ld21hcmsgPSBNYXJrRGVj
b3JhdG9yKGFyZ3ZhbC5tYXJrbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhcmd2YWwuYXJnc1s6LTFdLCBhcmd2YWwua3dhcmdzKQotICAgICAgICAgICAgICAg
IG5ld21hcmtzID0gbmV3a2V5d29yZHMuc2V0ZGVmYXVsdChpLCB7fSkKLSAgICAgICAgICAgICAg
ICBuZXdtYXJrc1tuZXdtYXJrLm1hcmtuYW1lXSA9IG5ld21hcmsKLSAgICAgICAgICAgICAgICBh
cmd2YWwgPSBhcmd2YWwuYXJnc1stMV0KLSAgICAgICAgICAgIHVud3JhcHBlZF9hcmd2YWx1ZXMu
YXBwZW5kKGFyZ3ZhbCkKLSAgICAgICAgYXJndmFsdWVzID0gdW53cmFwcGVkX2FyZ3ZhbHVlcwot
Ci0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGFyZ25hbWVzLCAodHVwbGUsIGxpc3QpKToKLSAg
ICAgICAgICAgIGFyZ25hbWVzID0gW3guc3RyaXAoKSBmb3IgeCBpbiBhcmduYW1lcy5zcGxpdCgi
LCIpIGlmIHguc3RyaXAoKV0KLSAgICAgICAgICAgIGlmIGxlbihhcmduYW1lcykgPT0gMToKLSAg
ICAgICAgICAgICAgICBhcmd2YWx1ZXMgPSBbKHZhbCwpIGZvciB2YWwgaW4gYXJndmFsdWVzXQot
ICAgICAgICBpZiBub3QgYXJndmFsdWVzOgotICAgICAgICAgICAgYXJndmFsdWVzID0gWyhfbm90
ZXhpc3RzLCkgKiBsZW4oYXJnbmFtZXMpXQotCi0gICAgICAgIGlmIHNjb3BlIGlzIE5vbmU6Ci0g
ICAgICAgICAgICBzY29wZSA9ICJmdW5jdGlvbiIKLSAgICAgICAgc2NvcGVudW0gPSBzY29wZXMu
aW5kZXgoc2NvcGUpCi0gICAgICAgIHZhbHR5cGVzID0ge30KLSAgICAgICAgZm9yIGFyZyBpbiBh
cmduYW1lczoKLSAgICAgICAgICAgIGlmIGFyZyBub3QgaW4gc2VsZi5maXh0dXJlbmFtZXM6Ci0g
ICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiJXIgdXNlcyBubyBmaXh0dXJlICVyIiAl
KHNlbGYuZnVuY3Rpb24sIGFyZykpCi0KLSAgICAgICAgaWYgaW5kaXJlY3QgaXMgVHJ1ZToKLSAg
ICAgICAgICAgIHZhbHR5cGVzID0gZGljdC5mcm9ta2V5cyhhcmduYW1lcywgInBhcmFtcyIpCi0g
ICAgICAgIGVsaWYgaW5kaXJlY3QgaXMgRmFsc2U6Ci0gICAgICAgICAgICB2YWx0eXBlcyA9IGRp
Y3QuZnJvbWtleXMoYXJnbmFtZXMsICJmdW5jYXJncyIpCi0gICAgICAgIGVsaWYgaXNpbnN0YW5j
ZShpbmRpcmVjdCwgKHR1cGxlLCBsaXN0KSk6Ci0gICAgICAgICAgICB2YWx0eXBlcyA9IGRpY3Qu
ZnJvbWtleXMoYXJnbmFtZXMsICJmdW5jYXJncyIpCi0gICAgICAgICAgICBmb3IgYXJnIGluIGlu
ZGlyZWN0OgotICAgICAgICAgICAgICAgIGlmIGFyZyBub3QgaW4gYXJnbmFtZXM6Ci0gICAgICAg
ICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImluZGlyZWN0IGdpdmVuIHRvICVyOiBmaXh0
dXJlICVyIGRvZXNuJ3QgZXhpc3QiICUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2VsZi5mdW5jdGlvbiwgYXJnKSkKLSAgICAgICAgICAgICAgICB2YWx0eXBlc1thcmdd
ID0gInBhcmFtcyIKLSAgICAgICAgaWRmbiA9IE5vbmUKLSAgICAgICAgaWYgY2FsbGFibGUoaWRz
KToKLSAgICAgICAgICAgIGlkZm4gPSBpZHMKLSAgICAgICAgICAgIGlkcyA9IE5vbmUKLSAgICAg
ICAgaWYgaWRzIGFuZCBsZW4oaWRzKSAhPSBsZW4oYXJndmFsdWVzKToKLSAgICAgICAgICAgIHJh
aXNlIFZhbHVlRXJyb3IoJyVkIHRlc3RzIHNwZWNpZmllZCB3aXRoICVkIGlkcycgJSgKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbGVuKGFyZ3ZhbHVlcyksIGxlbihpZHMpKSkKLSAgICAg
ICAgaWYgbm90IGlkczoKLSAgICAgICAgICAgIGlkcyA9IGlkbWFrZXIoYXJnbmFtZXMsIGFyZ3Zh
bHVlcywgaWRmbikKLSAgICAgICAgbmV3Y2FsbHMgPSBbXQotICAgICAgICBmb3IgY2FsbHNwZWMg
aW4gc2VsZi5fY2FsbHMgb3IgW0NhbGxTcGVjMihzZWxmKV06Ci0gICAgICAgICAgICBmb3IgcGFy
YW1faW5kZXgsIHZhbHNldCBpbiBlbnVtZXJhdGUoYXJndmFsdWVzKToKLSAgICAgICAgICAgICAg
ICBhc3NlcnQgbGVuKHZhbHNldCkgPT0gbGVuKGFyZ25hbWVzKQotICAgICAgICAgICAgICAgIG5l
d2NhbGxzcGVjID0gY2FsbHNwZWMuY29weShzZWxmKQotICAgICAgICAgICAgICAgIG5ld2NhbGxz
cGVjLnNldG11bHRpKHZhbHR5cGVzLCBhcmduYW1lcywgdmFsc2V0LCBpZHNbcGFyYW1faW5kZXhd
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld2tleXdvcmRzLmdldChw
YXJhbV9pbmRleCwge30pLCBzY29wZW51bSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwYXJhbV9pbmRleCkKLSAgICAgICAgICAgICAgICBuZXdjYWxscy5hcHBlbmQobmV3
Y2FsbHNwZWMpCi0gICAgICAgIHNlbGYuX2NhbGxzID0gbmV3Y2FsbHMKLQotICAgIGRlZiBhZGRj
YWxsKHNlbGYsIGZ1bmNhcmdzPU5vbmUsIGlkPV9ub3RleGlzdHMsIHBhcmFtPV9ub3RleGlzdHMp
OgotICAgICAgICAiIiIgKGRlcHJlY2F0ZWQsIHVzZSBwYXJhbWV0cml6ZSkgQWRkIGEgbmV3IGNh
bGwgdG8gdGhlIHVuZGVybHlpbmcKLSAgICAgICAgdGVzdCBmdW5jdGlvbiBkdXJpbmcgdGhlIGNv
bGxlY3Rpb24gcGhhc2Ugb2YgYSB0ZXN0IHJ1bi4gIE5vdGUgdGhhdAotICAgICAgICByZXF1ZXN0
LmFkZGNhbGwoKSBpcyBjYWxsZWQgZHVyaW5nIHRoZSB0ZXN0IGNvbGxlY3Rpb24gcGhhc2UgcHJp
b3IgYW5kCi0gICAgICAgIGluZGVwZW5kZW50bHkgdG8gYWN0dWFsIHRlc3QgZXhlY3V0aW9uLiAg
WW91IHNob3VsZCBvbmx5IHVzZSBhZGRjYWxsKCkKLSAgICAgICAgaWYgeW91IG5lZWQgdG8gc3Bl
Y2lmeSBtdWx0aXBsZSBhcmd1bWVudHMgb2YgYSB0ZXN0IGZ1bmN0aW9uLgotCi0gICAgICAgIDph
cmcgZnVuY2FyZ3M6IGFyZ3VtZW50IGtleXdvcmQgZGljdGlvbmFyeSB1c2VkIHdoZW4gaW52b2tp
bmcKLSAgICAgICAgICAgIHRoZSB0ZXN0IGZ1bmN0aW9uLgotCi0gICAgICAgIDphcmcgaWQ6IHVz
ZWQgZm9yIHJlcG9ydGluZyBhbmQgaWRlbnRpZmljYXRpb24gcHVycG9zZXMuICBJZiB5b3UKLSAg
ICAgICAgICAgIGRvbid0IHN1cHBseSBhbiBgaWRgIGFuIGF1dG9tYXRpYyB1bmlxdWUgaWQgd2ls
bCBiZSBnZW5lcmF0ZWQuCi0KLSAgICAgICAgOmFyZyBwYXJhbTogYSBwYXJhbWV0ZXIgd2hpY2gg
d2lsbCBiZSBleHBvc2VkIHRvIGEgbGF0ZXIgZml4dHVyZSBmdW5jdGlvbgotICAgICAgICAgICAg
aW52b2NhdGlvbiB0aHJvdWdoIHRoZSBgYHJlcXVlc3QucGFyYW1gYCBhdHRyaWJ1dGUuCi0gICAg
ICAgICIiIgotICAgICAgICBhc3NlcnQgZnVuY2FyZ3MgaXMgTm9uZSBvciBpc2luc3RhbmNlKGZ1
bmNhcmdzLCBkaWN0KQotICAgICAgICBpZiBmdW5jYXJncyBpcyBub3QgTm9uZToKLSAgICAgICAg
ICAgIGZvciBuYW1lIGluIGZ1bmNhcmdzOgotICAgICAgICAgICAgICAgIGlmIG5hbWUgbm90IGlu
IHNlbGYuZml4dHVyZW5hbWVzOgotICAgICAgICAgICAgICAgICAgICBweXRlc3QuZmFpbCgiZnVu
Y2FyZyAlciBub3QgdXNlZCBpbiB0aGlzIGZ1bmN0aW9uLiIgJSBuYW1lKQotICAgICAgICBlbHNl
OgotICAgICAgICAgICAgZnVuY2FyZ3MgPSB7fQotICAgICAgICBpZiBpZCBpcyBOb25lOgotICAg
ICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiaWQ9Tm9uZSBub3QgYWxsb3dlZCIpCi0gICAgICAg
IGlmIGlkIGlzIF9ub3RleGlzdHM6Ci0gICAgICAgICAgICBpZCA9IGxlbihzZWxmLl9jYWxscykK
LSAgICAgICAgaWQgPSBzdHIoaWQpCi0gICAgICAgIGlmIGlkIGluIHNlbGYuX2lkczoKLSAgICAg
ICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImR1cGxpY2F0ZSBpZCAlciIgJSBpZCkKLSAgICAgICAg
c2VsZi5faWRzLmFkZChpZCkKLQotICAgICAgICBjcyA9IENhbGxTcGVjMihzZWxmKQotICAgICAg
ICBjcy5zZXRhbGwoZnVuY2FyZ3MsIGlkLCBwYXJhbSkKLSAgICAgICAgc2VsZi5fY2FsbHMuYXBw
ZW5kKGNzKQotCi0KLWlmIF9QWTM6Ci0gICAgaW1wb3J0IGNvZGVjcwotCi0gICAgZGVmIF9lc2Nh
cGVfYnl0ZXModmFsKToKLSAgICAgICAgIiIiCi0gICAgICAgIElmIHZhbCBpcyBwdXJlIGFzY2lp
LCByZXR1cm5zIGl0IGFzIGEgc3RyKCksIG90aGVyd2lzZSBlc2NhcGVzCi0gICAgICAgIGludG8g
YSBzZXF1ZW5jZSBvZiBlc2NhcGVkIGJ5dGVzOgotICAgICAgICBiJ1x4YzNceGI0XHhjNVx4ZDYn
IC0+IHUnXFx4YzNcXHhiNFxceGM1XFx4ZDYnCi0KLSAgICAgICAgbm90ZToKLSAgICAgICAgICAg
dGhlIG9idmlvdXMgInYuZGVjb2RlKCd1bmljb2RlLWVzY2FwZScpIiB3aWxsIHJldHVybgotICAg
ICAgICAgICB2YWxpZCB1dGYtOCB1bmljb2RlIGlmIGl0IGZpbmRzIHRoZW0gaW4gdGhlIHN0cmlu
ZywgYnV0IHdlCi0gICAgICAgICAgIHdhbnQgdG8gcmV0dXJuIGVzY2FwZWQgYnl0ZXMgZm9yIGFu
eSBieXRlLCBldmVuIGlmIHRoZXkgbWF0Y2gKLSAgICAgICAgICAgYSB1dGYtOCBzdHJpbmcuCi0g
ICAgICAgICIiIgotICAgICAgICBpZiB2YWw6Ci0gICAgICAgICAgICAjIHNvdXJjZTogaHR0cDov
L2dvby5nbC9iR3Nud0MKLSAgICAgICAgICAgIGVuY29kZWRfYnl0ZXMsIF8gPSBjb2RlY3MuZXNj
YXBlX2VuY29kZSh2YWwpCi0gICAgICAgICAgICByZXR1cm4gZW5jb2RlZF9ieXRlcy5kZWNvZGUo
J2FzY2lpJykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgICMgZW1wdHkgYnl0ZXMgY3Jhc2hl
cyBjb2RlY3MuZXNjYXBlX2VuY29kZSAoIzEwODcpCi0gICAgICAgICAgICByZXR1cm4gJycKLWVs
c2U6Ci0gICAgZGVmIF9lc2NhcGVfYnl0ZXModmFsKToKLSAgICAgICAgIiIiCi0gICAgICAgIElu
IHB5MiBieXRlcyBhbmQgc3RyIGFyZSB0aGUgc2FtZSB0eXBlLCBzbyByZXR1cm4gaXQgdW5jaGFu
Z2VkIGlmIGl0Ci0gICAgICAgIGlzIGEgZnVsbCBhc2NpaSBzdHJpbmcsIG90aGVyd2lzZSBlc2Nh
cGUgaXQgaW50byBpdHMgYmluYXJ5IGZvcm0uCi0gICAgICAgICIiIgotICAgICAgICB0cnk6Ci0g
ICAgICAgICAgICByZXR1cm4gdmFsLmRlY29kZSgnYXNjaWknKQotICAgICAgICBleGNlcHQgVW5p
Y29kZURlY29kZUVycm9yOgotICAgICAgICAgICAgcmV0dXJuIHZhbC5lbmNvZGUoJ3N0cmluZy1l
c2NhcGUnKQotCi0KLWRlZiBfaWR2YWwodmFsLCBhcmduYW1lLCBpZHgsIGlkZm4pOgotICAgIGlm
IGlkZm46Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHMgPSBpZGZuKHZhbCkKLSAgICAgICAg
ICAgIGlmIHM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHMKLSAgICAgICAgZXhjZXB0IEV4Y2Vw
dGlvbjoKLSAgICAgICAgICAgIHBhc3MKLQotICAgIGlmIGlzaW5zdGFuY2UodmFsLCBieXRlcyk6
Ci0gICAgICAgIHJldHVybiBfZXNjYXBlX2J5dGVzKHZhbCkKLSAgICBlbGlmIGlzaW5zdGFuY2Uo
dmFsLCAoZmxvYXQsIGludCwgc3RyLCBib29sLCBOb25lVHlwZSkpOgotICAgICAgICByZXR1cm4g
c3RyKHZhbCkKLSAgICBlbGlmIGlzaW5zdGFuY2UodmFsLCBSRUdFWF9UWVBFKToKLSAgICAgICAg
cmV0dXJuIF9lc2NhcGVfYnl0ZXModmFsLnBhdHRlcm4pIGlmIGlzaW5zdGFuY2UodmFsLnBhdHRl
cm4sIGJ5dGVzKSBlbHNlIHZhbC5wYXR0ZXJuCi0gICAgZWxpZiBlbnVtIGlzIG5vdCBOb25lIGFu
ZCBpc2luc3RhbmNlKHZhbCwgZW51bS5FbnVtKToKLSAgICAgICAgcmV0dXJuIHN0cih2YWwpCi0g
ICAgZWxpZiBpc2NsYXNzKHZhbCkgYW5kIGhhc2F0dHIodmFsLCAnX19uYW1lX18nKToKLSAgICAg
ICAgcmV0dXJuIHZhbC5fX25hbWVfXwotICAgIGVsaWYgX1BZMiBhbmQgaXNpbnN0YW5jZSh2YWws
IHVuaWNvZGUpOgotICAgICAgICAjIHNwZWNpYWwgY2FzZSBmb3IgcHl0aG9uIDI6IGlmIGEgdW5p
Y29kZSBzdHJpbmcgaXMKLSAgICAgICAgIyBjb252ZXJ0aWJsZSB0byBhc2NpaSwgcmV0dXJuIGl0
IGFzIGFuIHN0cigpIG9iamVjdCBpbnN0ZWFkCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHJl
dHVybiBzdHIodmFsKQotICAgICAgICBleGNlcHQgVW5pY29kZUVycm9yOgotICAgICAgICAgICAg
IyBmYWxsdGhyb3VnaAotICAgICAgICAgICAgcGFzcwotICAgIHJldHVybiBzdHIoYXJnbmFtZSkr
c3RyKGlkeCkKLQotZGVmIF9pZHZhbHNldChpZHgsIHZhbHNldCwgYXJnbmFtZXMsIGlkZm4pOgot
ICAgIHRoaXNfaWQgPSBbX2lkdmFsKHZhbCwgYXJnbmFtZSwgaWR4LCBpZGZuKQotICAgICAgICAg
ICAgICAgZm9yIHZhbCwgYXJnbmFtZSBpbiB6aXAodmFsc2V0LCBhcmduYW1lcyldCi0gICAgcmV0
dXJuICItIi5qb2luKHRoaXNfaWQpCi0KLWRlZiBpZG1ha2VyKGFyZ25hbWVzLCBhcmd2YWx1ZXMs
IGlkZm49Tm9uZSk6Ci0gICAgaWRzID0gW19pZHZhbHNldCh2YWxpbmRleCwgdmFsc2V0LCBhcmdu
YW1lcywgaWRmbikKLSAgICAgICAgICAgZm9yIHZhbGluZGV4LCB2YWxzZXQgaW4gZW51bWVyYXRl
KGFyZ3ZhbHVlcyldCi0gICAgaWYgbGVuKHNldChpZHMpKSA8IGxlbihpZHMpOgotICAgICAgICAj
IHVzZXIgbWF5IGhhdmUgcHJvdmlkZWQgYSBiYWQgaWRmbiB3aGljaCBtZWFucyB0aGUgaWRzIGFy
ZSBub3QgdW5pcXVlCi0gICAgICAgIGlkcyA9IFtzdHIoaSkgKyB0ZXN0aWQgZm9yIGksIHRlc3Rp
ZCBpbiBlbnVtZXJhdGUoaWRzKV0KLSAgICByZXR1cm4gaWRzCi0KLWRlZiBzaG93Zml4dHVyZXMo
Y29uZmlnKToKLSAgICBmcm9tIF9weXRlc3QubWFpbiBpbXBvcnQgd3JhcF9zZXNzaW9uCi0gICAg
cmV0dXJuIHdyYXBfc2Vzc2lvbihjb25maWcsIF9zaG93Zml4dHVyZXNfbWFpbikKLQotZGVmIF9z
aG93Zml4dHVyZXNfbWFpbihjb25maWcsIHNlc3Npb24pOgotICAgIGltcG9ydCBfcHl0ZXN0LmNv
bmZpZwotICAgIHNlc3Npb24ucGVyZm9ybV9jb2xsZWN0KCkKLSAgICBjdXJkaXIgPSBweS5wYXRo
LmxvY2FsKCkKLSAgICB0dyA9IF9weXRlc3QuY29uZmlnLmNyZWF0ZV90ZXJtaW5hbF93cml0ZXIo
Y29uZmlnKQotICAgIHZlcmJvc2UgPSBjb25maWcuZ2V0dmFsdWUoInZlcmJvc2UiKQotCi0gICAg
Zm0gPSBzZXNzaW9uLl9maXh0dXJlbWFuYWdlcgotCi0gICAgYXZhaWxhYmxlID0gW10KLSAgICBm
b3IgYXJnbmFtZSwgZml4dHVyZWRlZnMgaW4gZm0uX2FyZzJmaXh0dXJlZGVmcy5pdGVtcygpOgot
ICAgICAgICBhc3NlcnQgZml4dHVyZWRlZnMgaXMgbm90IE5vbmUKLSAgICAgICAgaWYgbm90IGZp
eHR1cmVkZWZzOgotICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgZml4dHVyZWRlZiA9IGZp
eHR1cmVkZWZzWy0xXQotICAgICAgICBsb2MgPSBnZXRsb2NhdGlvbihmaXh0dXJlZGVmLmZ1bmMs
IGN1cmRpcikKLSAgICAgICAgYXZhaWxhYmxlLmFwcGVuZCgobGVuKGZpeHR1cmVkZWYuYmFzZWlk
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZml4dHVyZWRlZi5mdW5jLl9fbW9kdWxlX18s
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmRpci5iZXN0cmVscGF0aChsb2MpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICBmaXh0dXJlZGVmLmFyZ25hbWUsIGZpeHR1cmVkZWYpKQot
Ci0gICAgYXZhaWxhYmxlLnNvcnQoKQotICAgIGN1cnJlbnRtb2R1bGUgPSBOb25lCi0gICAgZm9y
IGJhc2VpZCwgbW9kdWxlLCBiZXN0cmVsLCBhcmduYW1lLCBmaXh0dXJlZGVmIGluIGF2YWlsYWJs
ZToKLSAgICAgICAgaWYgY3VycmVudG1vZHVsZSAhPSBtb2R1bGU6Ci0gICAgICAgICAgICBpZiBu
b3QgbW9kdWxlLnN0YXJ0c3dpdGgoIl9weXRlc3QuIik6Ci0gICAgICAgICAgICAgICAgdHcubGlu
ZSgpCi0gICAgICAgICAgICAgICAgdHcuc2VwKCItIiwgImZpeHR1cmVzIGRlZmluZWQgZnJvbSAl
cyIgJShtb2R1bGUsKSkKLSAgICAgICAgICAgICAgICBjdXJyZW50bW9kdWxlID0gbW9kdWxlCi0g
ICAgICAgIGlmIHZlcmJvc2UgPD0gMCBhbmQgYXJnbmFtZVswXSA9PSAiXyI6Ci0gICAgICAgICAg
ICBjb250aW51ZQotICAgICAgICBpZiB2ZXJib3NlID4gMDoKLSAgICAgICAgICAgIGZ1bmNhcmdz
cGVjID0gIiVzIC0tICVzIiAlKGFyZ25hbWUsIGJlc3RyZWwsKQotICAgICAgICBlbHNlOgotICAg
ICAgICAgICAgZnVuY2FyZ3NwZWMgPSBhcmduYW1lCi0gICAgICAgIHR3LmxpbmUoZnVuY2FyZ3Nw
ZWMsIGdyZWVuPVRydWUpCi0gICAgICAgIGxvYyA9IGdldGxvY2F0aW9uKGZpeHR1cmVkZWYuZnVu
YywgY3VyZGlyKQotICAgICAgICBkb2MgPSBmaXh0dXJlZGVmLmZ1bmMuX19kb2NfXyBvciAiIgot
ICAgICAgICBpZiBkb2M6Ci0gICAgICAgICAgICBmb3IgbGluZSBpbiBkb2Muc3RyaXAoKS5zcGxp
dCgiXG4iKToKLSAgICAgICAgICAgICAgICB0dy5saW5lKCIgICAgIiArIGxpbmUuc3RyaXAoKSkK
LSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHR3LmxpbmUoIiAgICAlczogbm8gZG9jc3RyaW5n
IGF2YWlsYWJsZSIgJShsb2MsKSwKLSAgICAgICAgICAgICAgICByZWQ9VHJ1ZSkKLQotZGVmIGdl
dGxvY2F0aW9uKGZ1bmN0aW9uLCBjdXJkaXIpOgotICAgIGltcG9ydCBpbnNwZWN0Ci0gICAgZm4g
PSBweS5wYXRoLmxvY2FsKGluc3BlY3QuZ2V0ZmlsZShmdW5jdGlvbikpCi0gICAgbGluZW5vID0g
cHkuYnVpbHRpbi5fZ2V0Y29kZShmdW5jdGlvbikuY29fZmlyc3RsaW5lbm8KLSAgICBpZiBmbi5y
ZWx0byhjdXJkaXIpOgotICAgICAgICBmbiA9IGZuLnJlbHRvKGN1cmRpcikKLSAgICByZXR1cm4g
IiVzOiVkIiAlKGZuLCBsaW5lbm8rMSkKLQotIyBidWlsdGluIHB5dGVzdC5yYWlzZXMgaGVscGVy
Ci0KLWRlZiByYWlzZXMoZXhwZWN0ZWRfZXhjZXB0aW9uLCAqYXJncywgKiprd2FyZ3MpOgotICAg
ICIiIiBhc3NlcnQgdGhhdCBhIGNvZGUgYmxvY2svZnVuY3Rpb24gY2FsbCByYWlzZXMgYGBleHBl
Y3RlZF9leGNlcHRpb25gYAotICAgIGFuZCByYWlzZSBhIGZhaWx1cmUgZXhjZXB0aW9uIG90aGVy
d2lzZS4KLQotICAgIFRoaXMgaGVscGVyIHByb2R1Y2VzIGEgYGBFeGNlcHRpb25JbmZvKClgYCBv
YmplY3QgKHNlZSBiZWxvdykuCi0KLSAgICBJZiB1c2luZyBQeXRob24gMi41IG9yIGFib3ZlLCB5
b3UgbWF5IHVzZSB0aGlzIGZ1bmN0aW9uIGFzIGEKLSAgICBjb250ZXh0IG1hbmFnZXI6OgotCi0g
ICAgICAgID4+PiB3aXRoIHJhaXNlcyhaZXJvRGl2aXNpb25FcnJvcik6Ci0gICAgICAgIC4uLiAg
ICAxLzAKLQotICAgIC4uIG5vdGU6OgotCi0gICAgICAgV2hlbiB1c2luZyBgYHB5dGVzdC5yYWlz
ZXNgYCBhcyBhIGNvbnRleHQgbWFuYWdlciwgaXQncyB3b3J0aHdoaWxlIHRvCi0gICAgICAgbm90
ZSB0aGF0IG5vcm1hbCBjb250ZXh0IG1hbmFnZXIgcnVsZXMgYXBwbHkgYW5kIHRoYXQgdGhlIGV4
Y2VwdGlvbgotICAgICAgIHJhaXNlZCAqbXVzdCogYmUgdGhlIGZpbmFsIGxpbmUgaW4gdGhlIHNj
b3BlIG9mIHRoZSBjb250ZXh0IG1hbmFnZXIuCi0gICAgICAgTGluZXMgb2YgY29kZSBhZnRlciB0
aGF0LCB3aXRoaW4gdGhlIHNjb3BlIG9mIHRoZSBjb250ZXh0IG1hbmFnZXIgd2lsbAotICAgICAg
IG5vdCBiZSBleGVjdXRlZC4gRm9yIGV4YW1wbGU6OgotCi0gICAgICAgICAgID4+PiB3aXRoIHJh
aXNlcyhPU0Vycm9yKSBhcyBleGNfaW5mbzoKLSAgICAgICAgICAgICAgICAgICBhc3NlcnQgMSA9
PSAxICAjIHRoaXMgd2lsbCBleGVjdXRlIGFzIGV4cGVjdGVkCi0gICAgICAgICAgICAgICAgICAg
cmFpc2UgT1NFcnJvcihlcnJuby5FRVhJU1RTLCAnZGlyZWN0b3J5IGV4aXN0cycpCi0gICAgICAg
ICAgICAgICAgICAgYXNzZXJ0IGV4Y19pbmZvLnZhbHVlLmVycm5vID09IGVycm5vLkVFWElTVFMg
ICMgdGhpcyB3aWxsIG5vdCBleGVjdXRlCi0KLSAgICAgICBJbnN0ZWFkLCB0aGUgZm9sbG93aW5n
IGFwcHJvYWNoIG11c3QgYmUgdGFrZW4gKG5vdGUgdGhlIGRpZmZlcmVuY2UgaW4KLSAgICAgICBz
Y29wZSk6OgotCi0gICAgICAgICAgID4+PiB3aXRoIHJhaXNlcyhPU0Vycm9yKSBhcyBleGNfaW5m
bzoKLSAgICAgICAgICAgICAgICAgICBhc3NlcnQgMSA9PSAxICAjIHRoaXMgd2lsbCBleGVjdXRl
IGFzIGV4cGVjdGVkCi0gICAgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcihlcnJuby5FRVhJ
U1RTLCAnZGlyZWN0b3J5IGV4aXN0cycpCi0KLSAgICAgICAgICAgICAgIGFzc2VydCBleGNfaW5m
by52YWx1ZS5lcnJubyA9PSBlcnJuby5FRVhJU1RTICAjIHRoaXMgd2lsbCBub3cgZXhlY3V0ZQot
Ci0gICAgT3IgeW91IGNhbiBzcGVjaWZ5IGEgY2FsbGFibGUgYnkgcGFzc2luZyBhIHRvLWJlLWNh
bGxlZCBsYW1iZGE6OgotCi0gICAgICAgID4+PiByYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIGxh
bWJkYTogMS8wKQotICAgICAgICA8RXhjZXB0aW9uSW5mbyAuLi4+Ci0KLSAgICBvciB5b3UgY2Fu
IHNwZWNpZnkgYW4gYXJiaXRyYXJ5IGNhbGxhYmxlIHdpdGggYXJndW1lbnRzOjoKLQotICAgICAg
ICA+Pj4gZGVmIGYoeCk6IHJldHVybiAxL3gKLSAgICAgICAgLi4uCi0gICAgICAgID4+PiByYWlz
ZXMoWmVyb0RpdmlzaW9uRXJyb3IsIGYsIDApCi0gICAgICAgIDxFeGNlcHRpb25JbmZvIC4uLj4K
LSAgICAgICAgPj4+IHJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgZiwgeD0wKQotICAgICAgICA8
RXhjZXB0aW9uSW5mbyAuLi4+Ci0KLSAgICBBIHRoaXJkIHBvc3NpYmlsaXR5IGlzIHRvIHVzZSBh
IHN0cmluZyB0byBiZSBleGVjdXRlZDo6Ci0KLSAgICAgICAgPj4+IHJhaXNlcyhaZXJvRGl2aXNp
b25FcnJvciwgImYoMCkiKQotICAgICAgICA8RXhjZXB0aW9uSW5mbyAuLi4+Ci0KLSAgICAuLiBh
dXRvY2xhc3M6OiBfcHl0ZXN0Ll9jb2RlLkV4Y2VwdGlvbkluZm8KLSAgICAgICAgOm1lbWJlcnM6
Ci0KLSAgICAuLiBub3RlOjoKLSAgICAgICAgU2ltaWxhciB0byBjYXVnaHQgZXhjZXB0aW9uIG9i
amVjdHMgaW4gUHl0aG9uLCBleHBsaWNpdGx5IGNsZWFyaW5nCi0gICAgICAgIGxvY2FsIHJlZmVy
ZW5jZXMgdG8gcmV0dXJuZWQgYGBFeGNlcHRpb25JbmZvYGAgb2JqZWN0cyBjYW4KLSAgICAgICAg
aGVscCB0aGUgUHl0aG9uIGludGVycHJldGVyIHNwZWVkIHVwIGl0cyBnYXJiYWdlIGNvbGxlY3Rp
b24uCi0KLSAgICAgICAgQ2xlYXJpbmcgdGhvc2UgcmVmZXJlbmNlcyBicmVha3MgYSByZWZlcmVu
Y2UgY3ljbGUKLSAgICAgICAgKGBgRXhjZXB0aW9uSW5mb2BgIC0tPiBjYXVnaHQgZXhjZXB0aW9u
IC0tPiBmcmFtZSBzdGFjayByYWlzaW5nCi0gICAgICAgIHRoZSBleGNlcHRpb24gLS0+IGN1cnJl
bnQgZnJhbWUgc3RhY2sgLS0+IGxvY2FsIHZhcmlhYmxlcyAtLT4KLSAgICAgICAgYGBFeGNlcHRp
b25JbmZvYGApIHdoaWNoIG1ha2VzIFB5dGhvbiBrZWVwIGFsbCBvYmplY3RzIHJlZmVyZW5jZWQK
LSAgICAgICAgZnJvbSB0aGF0IGN5Y2xlIChpbmNsdWRpbmcgYWxsIGxvY2FsIHZhcmlhYmxlcyBp
biB0aGUgY3VycmVudAotICAgICAgICBmcmFtZSkgYWxpdmUgdW50aWwgdGhlIG5leHQgY3ljbGlj
IGdhcmJhZ2UgY29sbGVjdGlvbiBydW4uIFNlZSB0aGUKLSAgICAgICAgb2ZmaWNpYWwgUHl0aG9u
IGBgdHJ5YGAgc3RhdGVtZW50IGRvY3VtZW50YXRpb24gZm9yIG1vcmUgZGV0YWlsZWQKLSAgICAg
ICAgaW5mb3JtYXRpb24uCi0KLSAgICAiIiIKLSAgICBfX3RyYWNlYmFja2hpZGVfXyA9IFRydWUK
LSAgICBpZiBleHBlY3RlZF9leGNlcHRpb24gaXMgQXNzZXJ0aW9uRXJyb3I6Ci0gICAgICAgICMg
d2Ugd2FudCB0byBjYXRjaCBhIEFzc2VydGlvbkVycm9yCi0gICAgICAgICMgcmVwbGFjZSBvdXIg
c3ViY2xhc3Mgd2l0aCB0aGUgYnVpbHRpbiBvbmUKLSAgICAgICAgIyBzZWUgaHR0cHM6Ly9naXRo
dWIuY29tL3B5dGVzdC1kZXYvcHl0ZXN0L2lzc3Vlcy8xNzYKLSAgICAgICAgZnJvbSBfcHl0ZXN0
LmFzc2VydGlvbi51dGlsIGltcG9ydCBCdWlsdGluQXNzZXJ0aW9uRXJyb3IgXAotICAgICAgICAg
ICAgYXMgZXhwZWN0ZWRfZXhjZXB0aW9uCi0gICAgbXNnID0gKCJleGNlcHRpb25zIG11c3QgYmUg
b2xkLXN0eWxlIGNsYXNzZXMgb3IiCi0gICAgICAgICAgICIgZGVyaXZlZCBmcm9tIEJhc2VFeGNl
cHRpb24sIG5vdCAlcyIpCi0gICAgaWYgaXNpbnN0YW5jZShleHBlY3RlZF9leGNlcHRpb24sIHR1
cGxlKToKLSAgICAgICAgZm9yIGV4YyBpbiBleHBlY3RlZF9leGNlcHRpb246Ci0gICAgICAgICAg
ICBpZiBub3QgaXNjbGFzcyhleGMpOgotICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvciht
c2cgJSB0eXBlKGV4YykpCi0gICAgZWxpZiBub3QgaXNjbGFzcyhleHBlY3RlZF9leGNlcHRpb24p
OgotICAgICAgICByYWlzZSBUeXBlRXJyb3IobXNnICUgdHlwZShleHBlY3RlZF9leGNlcHRpb24p
KQotCi0gICAgaWYgbm90IGFyZ3M6Ci0gICAgICAgIHJldHVybiBSYWlzZXNDb250ZXh0KGV4cGVj
dGVkX2V4Y2VwdGlvbikKLSAgICBlbGlmIGlzaW5zdGFuY2UoYXJnc1swXSwgc3RyKToKLSAgICAg
ICAgY29kZSwgPSBhcmdzCi0gICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGNvZGUsIHN0cikKLSAg
ICAgICAgZnJhbWUgPSBzeXMuX2dldGZyYW1lKDEpCi0gICAgICAgIGxvYyA9IGZyYW1lLmZfbG9j
YWxzLmNvcHkoKQotICAgICAgICBsb2MudXBkYXRlKGt3YXJncykKLSAgICAgICAgI3ByaW50ICJy
YWlzZXMgZnJhbWUgc2NvcGU6ICVyIiAlIGZyYW1lLmZfbG9jYWxzCi0gICAgICAgIHRyeToKLSAg
ICAgICAgICAgIGNvZGUgPSBfcHl0ZXN0Ll9jb2RlLlNvdXJjZShjb2RlKS5jb21waWxlKCkKLSAg
ICAgICAgICAgIHB5LmJ1aWx0aW4uZXhlY18oY29kZSwgZnJhbWUuZl9nbG9iYWxzLCBsb2MpCi0g
ICAgICAgICAgICAjIFhYWCBkaWRuJ1QgbWVhbiBmX2dsb2JhbHMgPT0gZl9sb2NhbHMgc29tZXRo
aW5nIHNwZWNpYWw/Ci0gICAgICAgICAgICAjICAgICB0aGlzIGlzIGRlc3Ryb3llZCBoZXJlIC4u
LgotICAgICAgICBleGNlcHQgZXhwZWN0ZWRfZXhjZXB0aW9uOgotICAgICAgICAgICAgcmV0dXJu
IF9weXRlc3QuX2NvZGUuRXhjZXB0aW9uSW5mbygpCi0gICAgZWxzZToKLSAgICAgICAgZnVuYyA9
IGFyZ3NbMF0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZnVuYygqYXJnc1sxOl0sICoqa3dh
cmdzKQotICAgICAgICBleGNlcHQgZXhwZWN0ZWRfZXhjZXB0aW9uOgotICAgICAgICAgICAgcmV0
dXJuIF9weXRlc3QuX2NvZGUuRXhjZXB0aW9uSW5mbygpCi0gICAgcHl0ZXN0LmZhaWwoIkRJRCBO
T1QgUkFJU0UgezB9Ii5mb3JtYXQoZXhwZWN0ZWRfZXhjZXB0aW9uKSkKLQotY2xhc3MgUmFpc2Vz
Q29udGV4dChvYmplY3QpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBleHBlY3RlZF9leGNlcHRp
b24pOgotICAgICAgICBzZWxmLmV4cGVjdGVkX2V4Y2VwdGlvbiA9IGV4cGVjdGVkX2V4Y2VwdGlv
bgotICAgICAgICBzZWxmLmV4Y2luZm8gPSBOb25lCi0KLSAgICBkZWYgX19lbnRlcl9fKHNlbGYp
OgotICAgICAgICBzZWxmLmV4Y2luZm8gPSBvYmplY3QuX19uZXdfXyhfcHl0ZXN0Ll9jb2RlLkV4
Y2VwdGlvbkluZm8pCi0gICAgICAgIHJldHVybiBzZWxmLmV4Y2luZm8KLQotICAgIGRlZiBfX2V4
aXRfXyhzZWxmLCAqdHApOgotICAgICAgICBfX3RyYWNlYmFja2hpZGVfXyA9IFRydWUKLSAgICAg
ICAgaWYgdHBbMF0gaXMgTm9uZToKLSAgICAgICAgICAgIHB5dGVzdC5mYWlsKCJESUQgTk9UIFJB
SVNFIikKLSAgICAgICAgaWYgc3lzLnZlcnNpb25faW5mbyA8ICgyLCA3KToKLSAgICAgICAgICAg
ICMgcHkyNjogb24gX19leGl0X18oKSBleGNfdmFsdWUgb2Z0ZW4gZG9lcyBub3QgY29udGFpbiB0
aGUKLSAgICAgICAgICAgICMgZXhjZXB0aW9uIHZhbHVlLgotICAgICAgICAgICAgIyBodHRwOi8v
YnVncy5weXRob24ub3JnL2lzc3VlNzg1MwotICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uo
dHBbMV0sIEJhc2VFeGNlcHRpb24pOgotICAgICAgICAgICAgICAgIGV4Y190eXBlLCB2YWx1ZSwg
dHJhY2ViYWNrID0gdHAKLSAgICAgICAgICAgICAgICB0cCA9IGV4Y190eXBlLCBleGNfdHlwZSh2
YWx1ZSksIHRyYWNlYmFjawotICAgICAgICBzZWxmLmV4Y2luZm8uX19pbml0X18odHApCi0gICAg
ICAgIHJldHVybiBpc3N1YmNsYXNzKHNlbGYuZXhjaW5mby50eXBlLCBzZWxmLmV4cGVjdGVkX2V4
Y2VwdGlvbikKLQotIwotIyAgdGhlIGJhc2ljIHB5dGVzdCBGdW5jdGlvbiBpdGVtCi0jCi0KLWNs
YXNzIEZ1bmN0aW9uKEZ1bmN0aW9uTWl4aW4sIHB5dGVzdC5JdGVtLCBGdW5jYXJnbmFtZXNDb21w
YXRBdHRyKToKLSAgICAiIiIgYSBGdW5jdGlvbiBJdGVtIGlzIHJlc3BvbnNpYmxlIGZvciBzZXR0
aW5nIHVwIGFuZCBleGVjdXRpbmcgYQotICAgIFB5dGhvbiB0ZXN0IGZ1bmN0aW9uLgotICAgICIi
IgotICAgIF9nZW5pZCA9IE5vbmUKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgcGFyZW50
LCBhcmdzPU5vbmUsIGNvbmZpZz1Ob25lLAotICAgICAgICAgICAgICAgICBjYWxsc3BlYz1Ob25l
LCBjYWxsb2JqPU5PVFNFVCwga2V5d29yZHM9Tm9uZSwgc2Vzc2lvbj1Ob25lLAotICAgICAgICAg
ICAgICAgICBmaXh0dXJlaW5mbz1Ob25lKToKLSAgICAgICAgc3VwZXIoRnVuY3Rpb24sIHNlbGYp
Ll9faW5pdF9fKG5hbWUsIHBhcmVudCwgY29uZmlnPWNvbmZpZywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb249c2Vzc2lvbikKLSAgICAgICAgc2VsZi5fYXJn
cyA9IGFyZ3MKLSAgICAgICAgaWYgY2FsbG9iaiBpcyBub3QgTk9UU0VUOgotICAgICAgICAgICAg
c2VsZi5vYmogPSBjYWxsb2JqCi0KLSAgICAgICAgc2VsZi5rZXl3b3Jkcy51cGRhdGUoc2VsZi5v
YmouX19kaWN0X18pCi0gICAgICAgIGlmIGNhbGxzcGVjOgotICAgICAgICAgICAgc2VsZi5jYWxs
c3BlYyA9IGNhbGxzcGVjCi0gICAgICAgICAgICBzZWxmLmtleXdvcmRzLnVwZGF0ZShjYWxsc3Bl
Yy5rZXl3b3JkcykKLSAgICAgICAgaWYga2V5d29yZHM6Ci0gICAgICAgICAgICBzZWxmLmtleXdv
cmRzLnVwZGF0ZShrZXl3b3JkcykKLQotICAgICAgICBpZiBmaXh0dXJlaW5mbyBpcyBOb25lOgot
ICAgICAgICAgICAgZml4dHVyZWluZm8gPSBzZWxmLnNlc3Npb24uX2ZpeHR1cmVtYW5hZ2VyLmdl
dGZpeHR1cmVpbmZvKAotICAgICAgICAgICAgICAgIHNlbGYucGFyZW50LCBzZWxmLm9iaiwgc2Vs
Zi5jbHMsCi0gICAgICAgICAgICAgICAgZnVuY2FyZ3M9bm90IHNlbGYuX2lzeWllbGRlZGZ1bmN0
aW9uKCkpCi0gICAgICAgIHNlbGYuX2ZpeHR1cmVpbmZvID0gZml4dHVyZWluZm8KLSAgICAgICAg
c2VsZi5maXh0dXJlbmFtZXMgPSBmaXh0dXJlaW5mby5uYW1lc19jbG9zdXJlCi0gICAgICAgIHNl
bGYuX2luaXRyZXF1ZXN0KCkKLQotICAgIGRlZiBfaW5pdHJlcXVlc3Qoc2VsZik6Ci0gICAgICAg
IHNlbGYuZnVuY2FyZ3MgPSB7fQotICAgICAgICBpZiBzZWxmLl9pc3lpZWxkZWRmdW5jdGlvbigp
OgotICAgICAgICAgICAgYXNzZXJ0IG5vdCBoYXNhdHRyKHNlbGYsICJjYWxsc3BlYyIpLCAoCi0g
ICAgICAgICAgICAgICAgInlpZWxkZWQgZnVuY3Rpb25zIChkZXByZWNhdGVkKSBjYW5ub3QgaGF2
ZSBmdW5jYXJncyIpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBpZiBoYXNhdHRyKHNlbGYs
ICJjYWxsc3BlYyIpOgotICAgICAgICAgICAgICAgIGNhbGxzcGVjID0gc2VsZi5jYWxsc3BlYwot
ICAgICAgICAgICAgICAgIGFzc2VydCBub3QgY2FsbHNwZWMuZnVuY2FyZ3MKLSAgICAgICAgICAg
ICAgICBzZWxmLl9nZW5pZCA9IGNhbGxzcGVjLmlkCi0gICAgICAgICAgICAgICAgaWYgaGFzYXR0
cihjYWxsc3BlYywgInBhcmFtIik6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYucGFyYW0gPSBj
YWxsc3BlYy5wYXJhbQotICAgICAgICBzZWxmLl9yZXF1ZXN0ID0gRml4dHVyZVJlcXVlc3Qoc2Vs
ZikKLQotICAgIEBwcm9wZXJ0eQotICAgIGRlZiBmdW5jdGlvbihzZWxmKToKLSAgICAgICAgInVu
ZGVybHlpbmcgcHl0aG9uICdmdW5jdGlvbicgb2JqZWN0IgotICAgICAgICByZXR1cm4gZ2V0YXR0
cihzZWxmLm9iaiwgJ2ltX2Z1bmMnLCBzZWxmLm9iaikKLQotICAgIGRlZiBfZ2V0b2JqKHNlbGYp
OgotICAgICAgICBuYW1lID0gc2VsZi5uYW1lCi0gICAgICAgIGkgPSBuYW1lLmZpbmQoIlsiKSAj
IHBhcmFtZXRyaXphdGlvbgotICAgICAgICBpZiBpICE9IC0xOgotICAgICAgICAgICAgbmFtZSA9
IG5hbWVbOmldCi0gICAgICAgIHJldHVybiBnZXRhdHRyKHNlbGYucGFyZW50Lm9iaiwgbmFtZSkK
LQotICAgIEBwcm9wZXJ0eQotICAgIGRlZiBfcHlmdW5jaXRlbShzZWxmKToKLSAgICAgICAgIihj
b21wYXRvbmx5KSBmb3IgY29kZSBleHBlY3RpbmcgcHl0ZXN0LTIuMiBzdHlsZSByZXF1ZXN0IG9i
amVjdHMiCi0gICAgICAgIHJldHVybiBzZWxmCi0KLSAgICBkZWYgX2lzeWllbGRlZGZ1bmN0aW9u
KHNlbGYpOgotICAgICAgICByZXR1cm4gZ2V0YXR0cihzZWxmLCAiX2FyZ3MiLCBOb25lKSBpcyBu
b3QgTm9uZQotCi0gICAgZGVmIHJ1bnRlc3Qoc2VsZik6Ci0gICAgICAgICIiIiBleGVjdXRlIHRo
ZSB1bmRlcmx5aW5nIHRlc3QgZnVuY3Rpb24uICIiIgotICAgICAgICBzZWxmLmlob29rLnB5dGVz
dF9weWZ1bmNfY2FsbChweWZ1bmNpdGVtPXNlbGYpCi0KLSAgICBkZWYgc2V0dXAoc2VsZik6Ci0g
ICAgICAgICMgY2hlY2sgaWYgcGFyYW1ldHJpemF0aW9uIGhhcHBlbmQgd2l0aCBhbiBlbXB0eSBs
aXN0Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuY2FsbHNwZWMuX2VtcHR5cGFyYW1z
cGVjaWZpZWQKLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgcGFz
cwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgZnMsIGxpbmVubyA9IHNlbGYuX2dldGZzbGlu
ZW5vKCkKLSAgICAgICAgICAgIHB5dGVzdC5za2lwKCJnb3QgZW1wdHkgcGFyYW1ldGVyIHNldCwg
ZnVuY3Rpb24gJXMgYXQgJXM6JWQiICUoCi0gICAgICAgICAgICAgICAgc2VsZi5mdW5jdGlvbi5f
X25hbWVfXywgZnMsIGxpbmVubykpCi0gICAgICAgIHN1cGVyKEZ1bmN0aW9uLCBzZWxmKS5zZXR1
cCgpCi0gICAgICAgIGZpbGxmaXh0dXJlcyhzZWxmKQotCi0KLXNjb3BlMnByb3BzID0gZGljdChz
ZXNzaW9uPSgpKQotc2NvcGUycHJvcHNbIm1vZHVsZSJdID0gKCJmc3BhdGgiLCAibW9kdWxlIikK
LXNjb3BlMnByb3BzWyJjbGFzcyJdID0gc2NvcGUycHJvcHNbIm1vZHVsZSJdICsgKCJjbHMiLCkK
LXNjb3BlMnByb3BzWyJpbnN0YW5jZSJdID0gc2NvcGUycHJvcHNbImNsYXNzIl0gKyAoImluc3Rh
bmNlIiwgKQotc2NvcGUycHJvcHNbImZ1bmN0aW9uIl0gPSBzY29wZTJwcm9wc1siaW5zdGFuY2Ui
XSArICgiZnVuY3Rpb24iLCAia2V5d29yZHMiKQotCi1kZWYgc2NvcGVwcm9wZXJ0eShuYW1lPU5v
bmUsIGRvYz1Ob25lKToKLSAgICBkZWYgZGVjb3JhdGVzY29wZShmdW5jKToKLSAgICAgICAgc2Nv
cGVuYW1lID0gbmFtZSBvciBmdW5jLl9fbmFtZV9fCi0gICAgICAgIGRlZiBwcm92aWRlKHNlbGYp
OgotICAgICAgICAgICAgaWYgZnVuYy5fX25hbWVfXyBpbiBzY29wZTJwcm9wc1tzZWxmLnNjb3Bl
XToKLSAgICAgICAgICAgICAgICByZXR1cm4gZnVuYyhzZWxmKQotICAgICAgICAgICAgcmFpc2Ug
QXR0cmlidXRlRXJyb3IoIiVzIG5vdCBhdmFpbGFibGUgaW4gJXMtc2NvcGVkIGNvbnRleHQiICUg
KAotICAgICAgICAgICAgICAgIHNjb3BlbmFtZSwgc2VsZi5zY29wZSkpCi0gICAgICAgIHJldHVy
biBwcm9wZXJ0eShwcm92aWRlLCBOb25lLCBOb25lLCBmdW5jLl9fZG9jX18pCi0gICAgcmV0dXJu
IGRlY29yYXRlc2NvcGUKLQotCi1jbGFzcyBGaXh0dXJlUmVxdWVzdChGdW5jYXJnbmFtZXNDb21w
YXRBdHRyKToKLSAgICAiIiIgQSByZXF1ZXN0IGZvciBhIGZpeHR1cmUgZnJvbSBhIHRlc3Qgb3Ig
Zml4dHVyZSBmdW5jdGlvbi4KLQotICAgIEEgcmVxdWVzdCBvYmplY3QgZ2l2ZXMgYWNjZXNzIHRv
IHRoZSByZXF1ZXN0aW5nIHRlc3QgY29udGV4dAotICAgIGFuZCBoYXMgYW4gb3B0aW9uYWwgYGBw
YXJhbWBgIGF0dHJpYnV0ZSBpbiBjYXNlCi0gICAgdGhlIGZpeHR1cmUgaXMgcGFyYW1ldHJpemVk
IGluZGlyZWN0bHkuCi0gICAgIiIiCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgcHlmdW5jaXRl
bSk6Ci0gICAgICAgIHNlbGYuX3B5ZnVuY2l0ZW0gPSBweWZ1bmNpdGVtCi0gICAgICAgICM6IGZp
eHR1cmUgZm9yIHdoaWNoIHRoaXMgcmVxdWVzdCBpcyBiZWluZyBwZXJmb3JtZWQKLSAgICAgICAg
c2VsZi5maXh0dXJlbmFtZSA9IE5vbmUKLSAgICAgICAgIzogU2NvcGUgc3RyaW5nLCBvbmUgb2Yg
ImZ1bmN0aW9uIiwgImNscyIsICJtb2R1bGUiLCAic2Vzc2lvbiIKLSAgICAgICAgc2VsZi5zY29w
ZSA9ICJmdW5jdGlvbiIKLSAgICAgICAgc2VsZi5fZnVuY2FyZ3MgID0ge30KLSAgICAgICAgc2Vs
Zi5fZml4dHVyZWRlZnMgPSB7fQotICAgICAgICBmaXh0dXJlaW5mbyA9IHB5ZnVuY2l0ZW0uX2Zp
eHR1cmVpbmZvCi0gICAgICAgIHNlbGYuX2FyZzJmaXh0dXJlZGVmcyA9IGZpeHR1cmVpbmZvLm5h
bWUyZml4dHVyZWRlZnMuY29weSgpCi0gICAgICAgIHNlbGYuX2FyZzJpbmRleCA9IHt9Ci0gICAg
ICAgIHNlbGYuZml4dHVyZW5hbWVzID0gZml4dHVyZWluZm8ubmFtZXNfY2xvc3VyZQotICAgICAg
ICBzZWxmLl9maXh0dXJlbWFuYWdlciA9IHB5ZnVuY2l0ZW0uc2Vzc2lvbi5fZml4dHVyZW1hbmFn
ZXIKLQotICAgIEBwcm9wZXJ0eQotICAgIGRlZiBub2RlKHNlbGYpOgotICAgICAgICAiIiIgdW5k
ZXJseWluZyBjb2xsZWN0aW9uIG5vZGUgKGRlcGVuZHMgb24gY3VycmVudCByZXF1ZXN0IHNjb3Bl
KSIiIgotICAgICAgICByZXR1cm4gc2VsZi5fZ2V0c2NvcGVpdGVtKHNlbGYuc2NvcGUpCi0KLQot
ICAgIGRlZiBfZ2V0bmV4dGZpeHR1cmVkZWYoc2VsZiwgYXJnbmFtZSk6Ci0gICAgICAgIGZpeHR1
cmVkZWZzID0gc2VsZi5fYXJnMmZpeHR1cmVkZWZzLmdldChhcmduYW1lLCBOb25lKQotICAgICAg
ICBpZiBmaXh0dXJlZGVmcyBpcyBOb25lOgotICAgICAgICAgICAgIyB3ZSBhcnJpdmUgaGVyZSBi
ZWNhdXNlIG9mIGEgIGEgZHluYW1pYyBjYWxsIHRvCi0gICAgICAgICAgICAjIGdldGZ1bmNhcmd2
YWx1ZShhcmduYW1lKSB1c2FnZSB3aGljaCB3YXMgbmF0dXJhbGx5Ci0gICAgICAgICAgICAjIG5v
dCBrbm93biBhdCBwYXJzaW5nL2NvbGxlY3Rpb24gdGltZQotICAgICAgICAgICAgZml4dHVyZWRl
ZnMgPSBzZWxmLl9maXh0dXJlbWFuYWdlci5nZXRmaXh0dXJlZGVmcygKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhcmduYW1lLCBzZWxmLl9weWZ1bmNpdGVtLnBhcmVudC5ub2RlaWQpCi0g
ICAgICAgICAgICBzZWxmLl9hcmcyZml4dHVyZWRlZnNbYXJnbmFtZV0gPSBmaXh0dXJlZGVmcwot
ICAgICAgICAjIGZpeHR1cmVkZWZzIGxpc3QgaXMgaW1tdXRhYmxlIHNvIHdlIG1haW50YWluIGEg
ZGVjcmVhc2luZyBpbmRleAotICAgICAgICBpbmRleCA9IHNlbGYuX2FyZzJpbmRleC5nZXQoYXJn
bmFtZSwgMCkgLSAxCi0gICAgICAgIGlmIGZpeHR1cmVkZWZzIGlzIE5vbmUgb3IgKC1pbmRleCA+
IGxlbihmaXh0dXJlZGVmcykpOgotICAgICAgICAgICAgcmFpc2UgRml4dHVyZUxvb2t1cEVycm9y
KGFyZ25hbWUsIHNlbGYpCi0gICAgICAgIHNlbGYuX2FyZzJpbmRleFthcmduYW1lXSA9IGluZGV4
Ci0gICAgICAgIHJldHVybiBmaXh0dXJlZGVmc1tpbmRleF0KLQotICAgIEBwcm9wZXJ0eQotICAg
IGRlZiBjb25maWcoc2VsZik6Ci0gICAgICAgICIiIiB0aGUgcHl0ZXN0IGNvbmZpZyBvYmplY3Qg
YXNzb2NpYXRlZCB3aXRoIHRoaXMgcmVxdWVzdC4gIiIiCi0gICAgICAgIHJldHVybiBzZWxmLl9w
eWZ1bmNpdGVtLmNvbmZpZwotCi0KLSAgICBAc2NvcGVwcm9wZXJ0eSgpCi0gICAgZGVmIGZ1bmN0
aW9uKHNlbGYpOgotICAgICAgICAiIiIgdGVzdCBmdW5jdGlvbiBvYmplY3QgaWYgdGhlIHJlcXVl
c3QgaGFzIGEgcGVyLWZ1bmN0aW9uIHNjb3BlLiAiIiIKLSAgICAgICAgcmV0dXJuIHNlbGYuX3B5
ZnVuY2l0ZW0ub2JqCi0KLSAgICBAc2NvcGVwcm9wZXJ0eSgiY2xhc3MiKQotICAgIGRlZiBjbHMo
c2VsZik6Ci0gICAgICAgICIiIiBjbGFzcyAoY2FuIGJlIE5vbmUpIHdoZXJlIHRoZSB0ZXN0IGZ1
bmN0aW9uIHdhcyBjb2xsZWN0ZWQuICIiIgotICAgICAgICBjbHNjb2wgPSBzZWxmLl9weWZ1bmNp
dGVtLmdldHBhcmVudChweXRlc3QuQ2xhc3MpCi0gICAgICAgIGlmIGNsc2NvbDoKLSAgICAgICAg
ICAgIHJldHVybiBjbHNjb2wub2JqCi0KLSAgICBAcHJvcGVydHkKLSAgICBkZWYgaW5zdGFuY2Uo
c2VsZik6Ci0gICAgICAgICIiIiBpbnN0YW5jZSAoY2FuIGJlIE5vbmUpIG9uIHdoaWNoIHRlc3Qg
ZnVuY3Rpb24gd2FzIGNvbGxlY3RlZC4gIiIiCi0gICAgICAgICMgdW5pdHRlc3Qgc3VwcG9ydCBo
YWNrLCBzZWUgX3B5dGVzdC51bml0dGVzdC5UZXN0Q2FzZUZ1bmN0aW9uCi0gICAgICAgIHRyeToK
LSAgICAgICAgICAgIHJldHVybiBzZWxmLl9weWZ1bmNpdGVtLl90ZXN0Y2FzZQotICAgICAgICBl
eGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICBmdW5jdGlvbiA9IGdldGF0dHIoc2Vs
ZiwgImZ1bmN0aW9uIiwgTm9uZSkKLSAgICAgICAgICAgIGlmIGZ1bmN0aW9uIGlzIG5vdCBOb25l
OgotICAgICAgICAgICAgICAgIHJldHVybiBweS5idWlsdGluLl9nZXRpbXNlbGYoZnVuY3Rpb24p
Ci0KLSAgICBAc2NvcGVwcm9wZXJ0eSgpCi0gICAgZGVmIG1vZHVsZShzZWxmKToKLSAgICAgICAg
IiIiIHB5dGhvbiBtb2R1bGUgb2JqZWN0IHdoZXJlIHRoZSB0ZXN0IGZ1bmN0aW9uIHdhcyBjb2xs
ZWN0ZWQuICIiIgotICAgICAgICByZXR1cm4gc2VsZi5fcHlmdW5jaXRlbS5nZXRwYXJlbnQocHl0
ZXN0Lk1vZHVsZSkub2JqCi0KLSAgICBAc2NvcGVwcm9wZXJ0eSgpCi0gICAgZGVmIGZzcGF0aChz
ZWxmKToKLSAgICAgICAgIiIiIHRoZSBmaWxlIHN5c3RlbSBwYXRoIG9mIHRoZSB0ZXN0IG1vZHVs
ZSB3aGljaCBjb2xsZWN0ZWQgdGhpcyB0ZXN0LiAiIiIKLSAgICAgICAgcmV0dXJuIHNlbGYuX3B5
ZnVuY2l0ZW0uZnNwYXRoCi0KLSAgICBAcHJvcGVydHkKLSAgICBkZWYga2V5d29yZHMoc2VsZik6
Ci0gICAgICAgICIiIiBrZXl3b3Jkcy9tYXJrZXJzIGRpY3Rpb25hcnkgZm9yIHRoZSB1bmRlcmx5
aW5nIG5vZGUuICIiIgotICAgICAgICByZXR1cm4gc2VsZi5ub2RlLmtleXdvcmRzCi0KLSAgICBA
cHJvcGVydHkKLSAgICBkZWYgc2Vzc2lvbihzZWxmKToKLSAgICAgICAgIiIiIHB5dGVzdCBzZXNz
aW9uIG9iamVjdC4gIiIiCi0gICAgICAgIHJldHVybiBzZWxmLl9weWZ1bmNpdGVtLnNlc3Npb24K
LQotICAgIGRlZiBhZGRmaW5hbGl6ZXIoc2VsZiwgZmluYWxpemVyKToKLSAgICAgICAgIiIiIGFk
ZCBmaW5hbGl6ZXIvdGVhcmRvd24gZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGFmdGVyIHRoZQotICAg
ICAgICBsYXN0IHRlc3Qgd2l0aGluIHRoZSByZXF1ZXN0aW5nIHRlc3QgY29udGV4dCBmaW5pc2hl
ZAotICAgICAgICBleGVjdXRpb24uICIiIgotICAgICAgICAjIFhYWCB1c3VhbGx5IHRoaXMgbWV0
aG9kIGlzIHNoYWRvd2VkIGJ5IGZpeHR1cmVkZWYgc3BlY2lmaWMgb25lcwotICAgICAgICBzZWxm
Ll9hZGRmaW5hbGl6ZXIoZmluYWxpemVyLCBzY29wZT1zZWxmLnNjb3BlKQotCi0gICAgZGVmIF9h
ZGRmaW5hbGl6ZXIoc2VsZiwgZmluYWxpemVyLCBzY29wZSk6Ci0gICAgICAgIGNvbGl0ZW0gPSBz
ZWxmLl9nZXRzY29wZWl0ZW0oc2NvcGUpCi0gICAgICAgIHNlbGYuX3B5ZnVuY2l0ZW0uc2Vzc2lv
bi5fc2V0dXBzdGF0ZS5hZGRmaW5hbGl6ZXIoCi0gICAgICAgICAgICBmaW5hbGl6ZXI9ZmluYWxp
emVyLCBjb2xpdGVtPWNvbGl0ZW0pCi0KLSAgICBkZWYgYXBwbHltYXJrZXIoc2VsZiwgbWFya2Vy
KToKLSAgICAgICAgIiIiIEFwcGx5IGEgbWFya2VyIHRvIGEgc2luZ2xlIHRlc3QgZnVuY3Rpb24g
aW52b2NhdGlvbi4KLSAgICAgICAgVGhpcyBtZXRob2QgaXMgdXNlZnVsIGlmIHlvdSBkb24ndCB3
YW50IHRvIGhhdmUgYSBrZXl3b3JkL21hcmtlcgotICAgICAgICBvbiBhbGwgZnVuY3Rpb24gaW52
b2NhdGlvbnMuCi0KLSAgICAgICAgOmFyZyBtYXJrZXI6IGEgOnB5OmNsYXNzOmBfcHl0ZXN0Lm1h
cmsuTWFya0RlY29yYXRvcmAgb2JqZWN0Ci0gICAgICAgICAgICBjcmVhdGVkIGJ5IGEgY2FsbCB0
byBgYHB5dGVzdC5tYXJrLk5BTUUoLi4uKWBgLgotICAgICAgICAiIiIKLSAgICAgICAgdHJ5Ogot
ICAgICAgICAgICAgc2VsZi5ub2RlLmtleXdvcmRzW21hcmtlci5tYXJrbmFtZV0gPSBtYXJrZXIK
LSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVF
cnJvcihtYXJrZXIpCi0KLSAgICBkZWYgcmFpc2VlcnJvcihzZWxmLCBtc2cpOgotICAgICAgICAi
IiIgcmFpc2UgYSBGaXh0dXJlTG9va3VwRXJyb3Igd2l0aCB0aGUgZ2l2ZW4gbWVzc2FnZS4gIiIi
Ci0gICAgICAgIHJhaXNlIHNlbGYuX2ZpeHR1cmVtYW5hZ2VyLkZpeHR1cmVMb29rdXBFcnJvcihO
b25lLCBzZWxmLCBtc2cpCi0KLSAgICBkZWYgX2ZpbGxmaXh0dXJlcyhzZWxmKToKLSAgICAgICAg
aXRlbSA9IHNlbGYuX3B5ZnVuY2l0ZW0KLSAgICAgICAgZml4dHVyZW5hbWVzID0gZ2V0YXR0cihp
dGVtLCAiZml4dHVyZW5hbWVzIiwgc2VsZi5maXh0dXJlbmFtZXMpCi0gICAgICAgIGZvciBhcmdu
YW1lIGluIGZpeHR1cmVuYW1lczoKLSAgICAgICAgICAgIGlmIGFyZ25hbWUgbm90IGluIGl0ZW0u
ZnVuY2FyZ3M6Ci0gICAgICAgICAgICAgICAgaXRlbS5mdW5jYXJnc1thcmduYW1lXSA9IHNlbGYu
Z2V0ZnVuY2FyZ3ZhbHVlKGFyZ25hbWUpCi0KLSAgICBkZWYgY2FjaGVkX3NldHVwKHNlbGYsIHNl
dHVwLCB0ZWFyZG93bj1Ob25lLCBzY29wZT0ibW9kdWxlIiwgZXh0cmFrZXk9Tm9uZSk6Ci0gICAg
ICAgICIiIiAoZGVwcmVjYXRlZCkgUmV0dXJuIGEgdGVzdGluZyByZXNvdXJjZSBtYW5hZ2VkIGJ5
IGBgc2V0dXBgYCAmCi0gICAgICAgIGBgdGVhcmRvd25gYCBjYWxscy4gIGBgc2NvcGVgYCBhbmQg
YGBleHRyYWtleWBgIGRldGVybWluZSB3aGVuIHRoZQotICAgICAgICBgYHRlYXJkb3duYGAgZnVu
Y3Rpb24gd2lsbCBiZSBjYWxsZWQgc28gdGhhdCBzdWJzZXF1ZW50IGNhbGxzIHRvCi0gICAgICAg
IGBgc2V0dXBgYCB3b3VsZCByZWNyZWF0ZSB0aGUgcmVzb3VyY2UuICBXaXRoIHB5dGVzdC0yLjMg
eW91IG9mdGVuCi0gICAgICAgIGRvIG5vdCBuZWVkIGBgY2FjaGVkX3NldHVwKClgYCBhcyB5b3Ug
Y2FuIGRpcmVjdGx5IGRlY2xhcmUgYSBzY29wZQotICAgICAgICBvbiBhIGZpeHR1cmUgZnVuY3Rp
b24gYW5kIHJlZ2lzdGVyIGEgZmluYWxpemVyIHRocm91Z2gKLSAgICAgICAgYGByZXF1ZXN0LmFk
ZGZpbmFsaXplcigpYGAuCi0KLSAgICAgICAgOmFyZyB0ZWFyZG93bjogZnVuY3Rpb24gcmVjZWl2
aW5nIGEgcHJldmlvdXNseSBzZXR1cCByZXNvdXJjZS4KLSAgICAgICAgOmFyZyBzZXR1cDogYSBu
by1hcmd1bWVudCBmdW5jdGlvbiBjcmVhdGluZyBhIHJlc291cmNlLgotICAgICAgICA6YXJnIHNj
b3BlOiBhIHN0cmluZyB2YWx1ZSBvdXQgb2YgYGBmdW5jdGlvbmBgLCBgYGNsYXNzYGAsIGBgbW9k
dWxlYGAKLSAgICAgICAgICAgIG9yIGBgc2Vzc2lvbmBgIGluZGljYXRpbmcgdGhlIGNhY2hpbmcg
bGlmZWN5Y2xlIG9mIHRoZSByZXNvdXJjZS4KLSAgICAgICAgOmFyZyBleHRyYWtleTogYWRkZWQg
dG8gaW50ZXJuYWwgY2FjaGluZyBrZXkgb2YgKGZ1bmNhcmduYW1lLCBzY29wZSkuCi0gICAgICAg
ICIiIgotICAgICAgICBpZiBub3QgaGFzYXR0cihzZWxmLmNvbmZpZywgJ19zZXR1cGNhY2hlJyk6
Ci0gICAgICAgICAgICBzZWxmLmNvbmZpZy5fc2V0dXBjYWNoZSA9IHt9ICMgWFhYIHdlYWtyZWY/
Ci0gICAgICAgIGNhY2hla2V5ID0gKHNlbGYuZml4dHVyZW5hbWUsIHNlbGYuX2dldHNjb3BlaXRl
bShzY29wZSksIGV4dHJha2V5KQotICAgICAgICBjYWNoZSA9IHNlbGYuY29uZmlnLl9zZXR1cGNh
Y2hlCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHZhbCA9IGNhY2hlW2NhY2hla2V5XQotICAg
ICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICBzZWxmLl9jaGVja19zY29wZShzZWxm
LmZpeHR1cmVuYW1lLCBzZWxmLnNjb3BlLCBzY29wZSkKLSAgICAgICAgICAgIHZhbCA9IHNldHVw
KCkKLSAgICAgICAgICAgIGNhY2hlW2NhY2hla2V5XSA9IHZhbAotICAgICAgICAgICAgaWYgdGVh
cmRvd24gaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgZGVmIGZpbmFsaXplcigpOgotICAg
ICAgICAgICAgICAgICAgICBkZWwgY2FjaGVbY2FjaGVrZXldCi0gICAgICAgICAgICAgICAgICAg
IHRlYXJkb3duKHZhbCkKLSAgICAgICAgICAgICAgICBzZWxmLl9hZGRmaW5hbGl6ZXIoZmluYWxp
emVyLCBzY29wZT1zY29wZSkKLSAgICAgICAgcmV0dXJuIHZhbAotCi0gICAgZGVmIGdldGZ1bmNh
cmd2YWx1ZShzZWxmLCBhcmduYW1lKToKLSAgICAgICAgIiIiIER5bmFtaWNhbGx5IHJldHJpZXZl
IGEgbmFtZWQgZml4dHVyZSBmdW5jdGlvbiBhcmd1bWVudC4KLQotICAgICAgICBBcyBvZiBweXRl
c3QtMi4zLCBpdCBpcyBlYXNpZXIgYW5kIHVzdWFsbHkgYmV0dGVyIHRvIGFjY2VzcyBvdGhlcgot
ICAgICAgICBmaXh0dXJlIHZhbHVlcyBieSBzdGF0aW5nIGl0IGFzIGFuIGlucHV0IGFyZ3VtZW50
IGluIHRoZSBmaXh0dXJlCi0gICAgICAgIGZ1bmN0aW9uLiAgSWYgeW91IG9ubHkgY2FuIGRlY2lk
ZSBhYm91dCB1c2luZyBhbm90aGVyIGZpeHR1cmUgYXQgdGVzdAotICAgICAgICBzZXR1cCB0aW1l
LCB5b3UgbWF5IHVzZSB0aGlzIGZ1bmN0aW9uIHRvIHJldHJpZXZlIGl0IGluc2lkZSBhIGZpeHR1
cmUKLSAgICAgICAgZnVuY3Rpb24gYm9keS4KLSAgICAgICAgIiIiCi0gICAgICAgIHJldHVybiBz
ZWxmLl9nZXRfYWN0aXZlX2ZpeHR1cmVkZWYoYXJnbmFtZSkuY2FjaGVkX3Jlc3VsdFswXQotCi0g
ICAgZGVmIF9nZXRfYWN0aXZlX2ZpeHR1cmVkZWYoc2VsZiwgYXJnbmFtZSk6Ci0gICAgICAgIHRy
eToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9maXh0dXJlZGVmc1thcmduYW1lXQotICAgICAg
ICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgZml4
dHVyZWRlZiA9IHNlbGYuX2dldG5leHRmaXh0dXJlZGVmKGFyZ25hbWUpCi0gICAgICAgICAgICBl
eGNlcHQgRml4dHVyZUxvb2t1cEVycm9yOgotICAgICAgICAgICAgICAgIGlmIGFyZ25hbWUgPT0g
InJlcXVlc3QiOgotICAgICAgICAgICAgICAgICAgICBjbGFzcyBQc2V1ZG9GaXh0dXJlRGVmOgot
ICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVkX3Jlc3VsdCA9IChzZWxmLCBbMF0sIE5vbmUp
Ci0gICAgICAgICAgICAgICAgICAgICAgICBzY29wZSA9ICJmdW5jdGlvbiIKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIFBzZXVkb0ZpeHR1cmVEZWYKLSAgICAgICAgICAgICAgICByYWlzZQot
ICAgICAgICAjIHJlbW92ZSBpbmRlbnQgdG8gcHJldmVudCB0aGUgcHl0aG9uMyBleGNlcHRpb24K
LSAgICAgICAgIyBmcm9tIGxlYWtpbmcgaW50byB0aGUgY2FsbAotICAgICAgICByZXN1bHQgPSBz
ZWxmLl9nZXRmdW5jYXJndmFsdWUoZml4dHVyZWRlZikKLSAgICAgICAgc2VsZi5fZnVuY2FyZ3Nb
YXJnbmFtZV0gPSByZXN1bHQKLSAgICAgICAgc2VsZi5fZml4dHVyZWRlZnNbYXJnbmFtZV0gPSBm
aXh0dXJlZGVmCi0gICAgICAgIHJldHVybiBmaXh0dXJlZGVmCi0KLSAgICBkZWYgX2dldF9maXh0
dXJlc3RhY2soc2VsZik6Ci0gICAgICAgIGN1cnJlbnQgPSBzZWxmCi0gICAgICAgIGwgPSBbXQot
ICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgZml4dHVyZWRlZiA9IGdldGF0dHIoY3VycmVu
dCwgIl9maXh0dXJlZGVmIiwgTm9uZSkKLSAgICAgICAgICAgIGlmIGZpeHR1cmVkZWYgaXMgTm9u
ZToKLSAgICAgICAgICAgICAgICBsLnJldmVyc2UoKQotICAgICAgICAgICAgICAgIHJldHVybiBs
Ci0gICAgICAgICAgICBsLmFwcGVuZChmaXh0dXJlZGVmKQotICAgICAgICAgICAgY3VycmVudCA9
IGN1cnJlbnQuX3BhcmVudF9yZXF1ZXN0Ci0KLSAgICBkZWYgX2dldGZ1bmNhcmd2YWx1ZShzZWxm
LCBmaXh0dXJlZGVmKToKLSAgICAgICAgIyBwcmVwYXJlIGEgc3VicmVxdWVzdCBvYmplY3QgYmVm
b3JlIGNhbGxpbmcgZml4dHVyZSBmdW5jdGlvbgotICAgICAgICAjIChsYXR0ZXIgbWFuYWdlZCBi
eSBmaXh0dXJlZGVmKQotICAgICAgICBhcmduYW1lID0gZml4dHVyZWRlZi5hcmduYW1lCi0gICAg
ICAgIGZ1bmNpdGVtID0gc2VsZi5fcHlmdW5jaXRlbQotICAgICAgICBzY29wZSA9IGZpeHR1cmVk
ZWYuc2NvcGUKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcGFyYW0gPSBmdW5jaXRlbS5jYWxs
c3BlYy5nZXRwYXJhbShhcmduYW1lKQotICAgICAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBW
YWx1ZUVycm9yKToKLSAgICAgICAgICAgIHBhcmFtID0gTk9UU0VUCi0gICAgICAgICAgICBwYXJh
bV9pbmRleCA9IDAKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgICMgaW5kaWNlcyBtaWdodCBu
b3QgYmUgc2V0IGlmIG9sZC1zdHlsZSBtZXRhZnVuYy5hZGRjYWxsKCkgd2FzIHVzZWQKLSAgICAg
ICAgICAgIHBhcmFtX2luZGV4ID0gZnVuY2l0ZW0uY2FsbHNwZWMuaW5kaWNlcy5nZXQoYXJnbmFt
ZSwgMCkKLSAgICAgICAgICAgICMgaWYgYSBwYXJhbWV0cml6ZSBpbnZvY2F0aW9uIHNldCBhIHNj
b3BlIGl0IHdpbGwgb3ZlcnJpZGUKLSAgICAgICAgICAgICMgdGhlIHN0YXRpYyBzY29wZSBkZWZp
bmVkIHdpdGggdGhlIGZpeHR1cmUgZnVuY3Rpb24KLSAgICAgICAgICAgIHBhcmFtc2NvcGVudW0g
PSBmdW5jaXRlbS5jYWxsc3BlYy5fYXJnMnNjb3BlbnVtLmdldChhcmduYW1lKQotICAgICAgICAg
ICAgaWYgcGFyYW1zY29wZW51bSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICBzY29wZSA9
IHNjb3Blc1twYXJhbXNjb3BlbnVtXQotCi0gICAgICAgIHN1YnJlcXVlc3QgPSBTdWJSZXF1ZXN0
KHNlbGYsIHNjb3BlLCBwYXJhbSwgcGFyYW1faW5kZXgsIGZpeHR1cmVkZWYpCi0KLSAgICAgICAg
IyBjaGVjayBpZiBhIGhpZ2hlci1sZXZlbCBzY29wZWQgZml4dHVyZSBhY2Nlc3NlcyBhIGxvd2Vy
IGxldmVsIG9uZQotICAgICAgICBzdWJyZXF1ZXN0Ll9jaGVja19zY29wZShhcmduYW1lLCBzZWxm
LnNjb3BlLCBzY29wZSkKLQotICAgICAgICAjIGNsZWFyIHN5cy5leGNfaW5mbyBiZWZvcmUgaW52
b2tpbmcgdGhlIGZpeHR1cmUgKHB5dGhvbiBidWc/KQotICAgICAgICAjIGlmIGl0cyBub3QgZXhw
bGljaXRseSBjbGVhcmVkIGl0IHdpbGwgbGVhayBpbnRvIHRoZSBjYWxsCi0gICAgICAgIGV4Y19j
bGVhcigpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgICMgY2FsbCB0aGUgZml4dHVyZSBmdW5j
dGlvbgotICAgICAgICAgICAgdmFsID0gZml4dHVyZWRlZi5leGVjdXRlKHJlcXVlc3Q9c3VicmVx
dWVzdCkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICMgaWYgZml4dHVyZSBmdW5jdGlv
biBmYWlsZWQgaXQgbWlnaHQgaGF2ZSByZWdpc3RlcmVkIGZpbmFsaXplcnMKLSAgICAgICAgICAg
IHNlbGYuc2Vzc2lvbi5fc2V0dXBzdGF0ZS5hZGRmaW5hbGl6ZXIoZml4dHVyZWRlZi5maW5pc2gs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnJl
cXVlc3Qubm9kZSkKLSAgICAgICAgcmV0dXJuIHZhbAotCi0gICAgZGVmIF9jaGVja19zY29wZShz
ZWxmLCBhcmduYW1lLCBpbnZva2luZ19zY29wZSwgcmVxdWVzdGVkX3Njb3BlKToKLSAgICAgICAg
aWYgYXJnbmFtZSA9PSAicmVxdWVzdCI6Ci0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgaWYg
c2NvcGVtaXNtYXRjaChpbnZva2luZ19zY29wZSwgcmVxdWVzdGVkX3Njb3BlKToKLSAgICAgICAg
ICAgICMgdHJ5IHRvIHJlcG9ydCBzb21ldGhpbmcgaGVscGZ1bAotICAgICAgICAgICAgbGluZXMg
PSBzZWxmLl9mYWN0b3J5dHJhY2ViYWNrKCkKLSAgICAgICAgICAgIHB5dGVzdC5mYWlsKCJTY29w
ZU1pc21hdGNoOiBZb3UgdHJpZWQgdG8gYWNjZXNzIHRoZSAlciBzY29wZWQgIgotICAgICAgICAg
ICAgICAgICJmaXh0dXJlICVyIHdpdGggYSAlciBzY29wZWQgcmVxdWVzdCBvYmplY3QsICIKLSAg
ICAgICAgICAgICAgICAiaW52b2x2ZWQgZmFjdG9yaWVzXG4lcyIgJSgKLSAgICAgICAgICAgICAg
ICAocmVxdWVzdGVkX3Njb3BlLCBhcmduYW1lLCBpbnZva2luZ19zY29wZSwgIlxuIi5qb2luKGxp
bmVzKSkpLAotICAgICAgICAgICAgICAgIHB5dHJhY2U9RmFsc2UpCi0KLSAgICBkZWYgX2ZhY3Rv
cnl0cmFjZWJhY2soc2VsZik6Ci0gICAgICAgIGxpbmVzID0gW10KLSAgICAgICAgZm9yIGZpeHR1
cmVkZWYgaW4gc2VsZi5fZ2V0X2ZpeHR1cmVzdGFjaygpOgotICAgICAgICAgICAgZmFjdG9yeSA9
IGZpeHR1cmVkZWYuZnVuYwotICAgICAgICAgICAgZnMsIGxpbmVubyA9IGdldGZzbGluZW5vKGZh
Y3RvcnkpCi0gICAgICAgICAgICBwID0gc2VsZi5fcHlmdW5jaXRlbS5zZXNzaW9uLmZzcGF0aC5i
ZXN0cmVscGF0aChmcykKLSAgICAgICAgICAgIGFyZ3MgPSBfZm9ybWF0X2FyZ3MoZmFjdG9yeSkK
LSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgiJXM6JWQ6ICBkZWYgJXMlcyIgJSgKLSAgICAgICAg
ICAgICAgICBwLCBsaW5lbm8sIGZhY3RvcnkuX19uYW1lX18sIGFyZ3MpKQotICAgICAgICByZXR1
cm4gbGluZXMKLQotICAgIGRlZiBfZ2V0c2NvcGVpdGVtKHNlbGYsIHNjb3BlKToKLSAgICAgICAg
aWYgc2NvcGUgPT0gImZ1bmN0aW9uIjoKLSAgICAgICAgICAgICMgdGhpcyBtaWdodCBhbHNvIGJl
IGEgbm9uLWZ1bmN0aW9uIEl0ZW0gZGVzcGl0ZSBpdHMgYXR0cmlidXRlIG5hbWUKLSAgICAgICAg
ICAgIHJldHVybiBzZWxmLl9weWZ1bmNpdGVtCi0gICAgICAgIG5vZGUgPSBnZXRfc2NvcGVfbm9k
ZShzZWxmLl9weWZ1bmNpdGVtLCBzY29wZSkKLSAgICAgICAgaWYgbm9kZSBpcyBOb25lIGFuZCBz
Y29wZSA9PSAiY2xhc3MiOgotICAgICAgICAgICAgIyBmYWxsYmFjayB0byBmdW5jdGlvbiBpdGVt
IGl0c2VsZgotICAgICAgICAgICAgbm9kZSA9IHNlbGYuX3B5ZnVuY2l0ZW0KLSAgICAgICAgYXNz
ZXJ0IG5vZGUKLSAgICAgICAgcmV0dXJuIG5vZGUKLQotICAgIGRlZiBfX3JlcHJfXyhzZWxmKToK
LSAgICAgICAgcmV0dXJuICI8Rml4dHVyZVJlcXVlc3QgZm9yICVyPiIgJShzZWxmLm5vZGUpCi0K
LQotY2xhc3MgU3ViUmVxdWVzdChGaXh0dXJlUmVxdWVzdCk6Ci0gICAgIiIiIGEgc3ViIHJlcXVl
c3QgZm9yIGhhbmRsaW5nIGdldHRpbmcgYSBmaXh0dXJlIGZyb20gYQotICAgIHRlc3QgZnVuY3Rp
b24vZml4dHVyZS4gIiIiCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlcXVlc3QsIHNjb3BlLCBw
YXJhbSwgcGFyYW1faW5kZXgsIGZpeHR1cmVkZWYpOgotICAgICAgICBzZWxmLl9wYXJlbnRfcmVx
dWVzdCA9IHJlcXVlc3QKLSAgICAgICAgc2VsZi5maXh0dXJlbmFtZSA9IGZpeHR1cmVkZWYuYXJn
bmFtZQotICAgICAgICBpZiBwYXJhbSBpcyBub3QgTk9UU0VUOgotICAgICAgICAgICAgc2VsZi5w
YXJhbSA9IHBhcmFtCi0gICAgICAgIHNlbGYucGFyYW1faW5kZXggPSBwYXJhbV9pbmRleAotICAg
ICAgICBzZWxmLnNjb3BlID0gc2NvcGUKLSAgICAgICAgc2VsZi5fZml4dHVyZWRlZiA9IGZpeHR1
cmVkZWYKLSAgICAgICAgc2VsZi5hZGRmaW5hbGl6ZXIgPSBmaXh0dXJlZGVmLmFkZGZpbmFsaXpl
cgotICAgICAgICBzZWxmLl9weWZ1bmNpdGVtID0gcmVxdWVzdC5fcHlmdW5jaXRlbQotICAgICAg
ICBzZWxmLl9mdW5jYXJncyAgPSByZXF1ZXN0Ll9mdW5jYXJncwotICAgICAgICBzZWxmLl9maXh0
dXJlZGVmcyA9IHJlcXVlc3QuX2ZpeHR1cmVkZWZzCi0gICAgICAgIHNlbGYuX2FyZzJmaXh0dXJl
ZGVmcyA9IHJlcXVlc3QuX2FyZzJmaXh0dXJlZGVmcwotICAgICAgICBzZWxmLl9hcmcyaW5kZXgg
PSByZXF1ZXN0Ll9hcmcyaW5kZXgKLSAgICAgICAgc2VsZi5maXh0dXJlbmFtZXMgPSByZXF1ZXN0
LmZpeHR1cmVuYW1lcwotICAgICAgICBzZWxmLl9maXh0dXJlbWFuYWdlciA9IHJlcXVlc3QuX2Zp
eHR1cmVtYW5hZ2VyCi0KLSAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIHJldHVybiAi
PFN1YlJlcXVlc3QgJXIgZm9yICVyPiIgJSAoc2VsZi5maXh0dXJlbmFtZSwgc2VsZi5fcHlmdW5j
aXRlbSkKLQotCi1jbGFzcyBTY29wZU1pc21hdGNoRXJyb3IoRXhjZXB0aW9uKToKLSAgICAiIiIg
QSBmaXh0dXJlIGZ1bmN0aW9uIHRyaWVzIHRvIHVzZSBhIGRpZmZlcmVudCBmaXh0dXJlIGZ1bmN0
aW9uIHdoaWNoCi0gICAgd2hpY2ggaGFzIGEgbG93ZXIgc2NvcGUgKGUuZy4gYSBTZXNzaW9uIG9u
ZSBjYWxscyBhIGZ1bmN0aW9uIG9uZSkKLSAgICAiIiIKLQotc2NvcGVzID0gInNlc3Npb24gbW9k
dWxlIGNsYXNzIGZ1bmN0aW9uIi5zcGxpdCgpCi1zY29wZW51bV9mdW5jdGlvbiA9IHNjb3Blcy5p
bmRleCgiZnVuY3Rpb24iKQotZGVmIHNjb3BlbWlzbWF0Y2goY3VycmVudHNjb3BlLCBuZXdzY29w
ZSk6Ci0gICAgcmV0dXJuIHNjb3Blcy5pbmRleChuZXdzY29wZSkgPiBzY29wZXMuaW5kZXgoY3Vy
cmVudHNjb3BlKQotCi0KLWNsYXNzIEZpeHR1cmVMb29rdXBFcnJvcihMb29rdXBFcnJvcik6Ci0g
ICAgIiIiIGNvdWxkIG5vdCByZXR1cm4gYSByZXF1ZXN0ZWQgRml4dHVyZSAobWlzc2luZyBvciBp
bnZhbGlkKS4gIiIiCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGFyZ25hbWUsIHJlcXVlc3QsIG1z
Zz1Ob25lKToKLSAgICAgICAgc2VsZi5hcmduYW1lID0gYXJnbmFtZQotICAgICAgICBzZWxmLnJl
cXVlc3QgPSByZXF1ZXN0Ci0gICAgICAgIHNlbGYuZml4dHVyZXN0YWNrID0gcmVxdWVzdC5fZ2V0
X2ZpeHR1cmVzdGFjaygpCi0gICAgICAgIHNlbGYubXNnID0gbXNnCi0KLSAgICBkZWYgZm9ybWF0
cmVwcihzZWxmKToKLSAgICAgICAgdGJsaW5lcyA9IFtdCi0gICAgICAgIGFkZGxpbmUgPSB0Ymxp
bmVzLmFwcGVuZAotICAgICAgICBzdGFjayA9IFtzZWxmLnJlcXVlc3QuX3B5ZnVuY2l0ZW0ub2Jq
XQotICAgICAgICBzdGFjay5leHRlbmQobWFwKGxhbWJkYSB4OiB4LmZ1bmMsIHNlbGYuZml4dHVy
ZXN0YWNrKSkKLSAgICAgICAgbXNnID0gc2VsZi5tc2cKLSAgICAgICAgaWYgbXNnIGlzIG5vdCBO
b25lOgotICAgICAgICAgICAgIyB0aGUgbGFzdCBmaXh0dXJlIHJhaXNlIGFuIGVycm9yLCBsZXQn
cyBwcmVzZW50Ci0gICAgICAgICAgICAjIGl0IGF0IHRoZSByZXF1ZXN0aW5nIHNpZGUKLSAgICAg
ICAgICAgIHN0YWNrID0gc3RhY2tbOi0xXQotICAgICAgICBmb3IgZnVuY3Rpb24gaW4gc3RhY2s6
Ci0gICAgICAgICAgICBmc3BhdGgsIGxpbmVubyA9IGdldGZzbGluZW5vKGZ1bmN0aW9uKQotICAg
ICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGxpbmVzLCBfID0gaW5zcGVjdC5nZXRzb3Vy
Y2VsaW5lcyhnZXRfcmVhbF9mdW5jKGZ1bmN0aW9uKSkKLSAgICAgICAgICAgIGV4Y2VwdCAoSU9F
cnJvciwgSW5kZXhFcnJvcik6Ci0gICAgICAgICAgICAgICAgZXJyb3JfbXNnID0gImZpbGUgJXMs
IGxpbmUgJXM6IHNvdXJjZSBjb2RlIG5vdCBhdmFpbGFibGUiCi0gICAgICAgICAgICAgICAgYWRk
bGluZShlcnJvcl9tc2cgJSAoZnNwYXRoLCBsaW5lbm8rMSkpCi0gICAgICAgICAgICBlbHNlOgot
ICAgICAgICAgICAgICAgIGFkZGxpbmUoImZpbGUgJXMsIGxpbmUgJXMiICUgKGZzcGF0aCwgbGlu
ZW5vKzEpKQotICAgICAgICAgICAgICAgIGZvciBpLCBsaW5lIGluIGVudW1lcmF0ZShsaW5lcyk6
Ci0gICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJzdHJpcCgpCi0gICAgICAgICAgICAg
ICAgICAgIGFkZGxpbmUoIiAgIiArIGxpbmUpCi0gICAgICAgICAgICAgICAgICAgIGlmIGxpbmUu
bHN0cmlwKCkuc3RhcnRzd2l0aCgnZGVmJyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVh
awotCi0gICAgICAgIGlmIG1zZyBpcyBOb25lOgotICAgICAgICAgICAgZm0gPSBzZWxmLnJlcXVl
c3QuX2ZpeHR1cmVtYW5hZ2VyCi0gICAgICAgICAgICBhdmFpbGFibGUgPSBbXQotICAgICAgICAg
ICAgZm9yIG5hbWUsIGZpeHR1cmVkZWYgaW4gZm0uX2FyZzJmaXh0dXJlZGVmcy5pdGVtcygpOgot
ICAgICAgICAgICAgICAgIHBhcmVudGlkID0gc2VsZi5yZXF1ZXN0Ll9weWZ1bmNpdGVtLnBhcmVu
dC5ub2RlaWQKLSAgICAgICAgICAgICAgICBmYWNsaXN0ID0gbGlzdChmbS5fbWF0Y2hmYWN0b3Jp
ZXMoZml4dHVyZWRlZiwgcGFyZW50aWQpKQotICAgICAgICAgICAgICAgIGlmIGZhY2xpc3Q6Ci0g
ICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZS5hcHBlbmQobmFtZSkKLSAgICAgICAgICAgIG1z
ZyA9ICJmaXh0dXJlICVyIG5vdCBmb3VuZCIgJSAoc2VsZi5hcmduYW1lLCkKLSAgICAgICAgICAg
IG1zZyArPSAiXG4gYXZhaWxhYmxlIGZpeHR1cmVzOiAlcyIgJSgiLCAiLmpvaW4oYXZhaWxhYmxl
KSwpCi0gICAgICAgICAgICBtc2cgKz0gIlxuIHVzZSAncHkudGVzdCAtLWZpeHR1cmVzIFt0ZXN0
cGF0aF0nIGZvciBoZWxwIG9uIHRoZW0uIgotCi0gICAgICAgIHJldHVybiBGaXh0dXJlTG9va3Vw
RXJyb3JSZXByKGZzcGF0aCwgbGluZW5vLCB0YmxpbmVzLCBtc2csIHNlbGYuYXJnbmFtZSkKLQot
Y2xhc3MgRml4dHVyZUxvb2t1cEVycm9yUmVwcihUZXJtaW5hbFJlcHIpOgotICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBmaWxlbmFtZSwgZmlyc3RsaW5lbm8sIHRibGluZXMsIGVycm9yc3RyaW5nLCBh
cmduYW1lKToKLSAgICAgICAgc2VsZi50YmxpbmVzID0gdGJsaW5lcwotICAgICAgICBzZWxmLmVy
cm9yc3RyaW5nID0gZXJyb3JzdHJpbmcKLSAgICAgICAgc2VsZi5maWxlbmFtZSA9IGZpbGVuYW1l
Ci0gICAgICAgIHNlbGYuZmlyc3RsaW5lbm8gPSBmaXJzdGxpbmVubwotICAgICAgICBzZWxmLmFy
Z25hbWUgPSBhcmduYW1lCi0KLSAgICBkZWYgdG90ZXJtaW5hbChzZWxmLCB0dyk6Ci0gICAgICAg
ICN0dy5saW5lKCJGaXh0dXJlTG9va3VwRXJyb3I6ICVzIiAlKHNlbGYuYXJnbmFtZSksIHJlZD1U
cnVlKQotICAgICAgICBmb3IgdGJsaW5lIGluIHNlbGYudGJsaW5lczoKLSAgICAgICAgICAgIHR3
LmxpbmUodGJsaW5lLnJzdHJpcCgpKQotICAgICAgICBmb3IgbGluZSBpbiBzZWxmLmVycm9yc3Ry
aW5nLnNwbGl0KCJcbiIpOgotICAgICAgICAgICAgdHcubGluZSgiICAgICAgICAiICsgbGluZS5z
dHJpcCgpLCByZWQ9VHJ1ZSkKLSAgICAgICAgdHcubGluZSgpCi0gICAgICAgIHR3LmxpbmUoIiVz
OiVkIiAlIChzZWxmLmZpbGVuYW1lLCBzZWxmLmZpcnN0bGluZW5vKzEpKQotCi1jbGFzcyBGaXh0
dXJlTWFuYWdlcjoKLSAgICAiIiIKLSAgICBweXRlc3QgZml4dHVyZXMgZGVmaW5pdGlvbnMgYW5k
IGluZm9ybWF0aW9uIGlzIHN0b3JlZCBhbmQgbWFuYWdlZAotICAgIGZyb20gdGhpcyBjbGFzcy4K
LQotICAgIER1cmluZyBjb2xsZWN0aW9uIGZtLnBhcnNlZmFjdG9yaWVzKCkgaXMgY2FsbGVkIG11
bHRpcGxlIHRpbWVzIHRvIHBhcnNlCi0gICAgZml4dHVyZSBmdW5jdGlvbiBkZWZpbml0aW9ucyBp
bnRvIEZpeHR1cmVEZWYgb2JqZWN0cyBhbmQgaW50ZXJuYWwKLSAgICBkYXRhIHN0cnVjdHVyZXMu
Ci0KLSAgICBEdXJpbmcgY29sbGVjdGlvbiBvZiB0ZXN0IGZ1bmN0aW9ucywgbWV0YWZ1bmMtbWVj
aGFuaWNzIGluc3RhbnRpYXRlCi0gICAgYSBGdW5jRml4dHVyZUluZm8gb2JqZWN0IHdoaWNoIGlz
IGNhY2hlZCBwZXIgbm9kZS9mdW5jLW5hbWUuCi0gICAgVGhpcyBGdW5jRml4dHVyZUluZm8gb2Jq
ZWN0IGlzIGxhdGVyIHJldHJpZXZlZCBieSBGdW5jdGlvbiBub2RlcwotICAgIHdoaWNoIHRoZW1z
ZWx2ZXMgb2ZmZXIgYSBmaXh0dXJlbmFtZXMgYXR0cmlidXRlLgotCi0gICAgVGhlIEZ1bmNGaXh0
dXJlSW5mbyBvYmplY3QgaG9sZHMgaW5mb3JtYXRpb24gYWJvdXQgZml4dHVyZXMgYW5kIEZpeHR1
cmVEZWZzCi0gICAgcmVsZXZhbnQgZm9yIGEgcGFydGljdWxhciBmdW5jdGlvbi4gIEFuIGluaXRp
YWwgbGlzdCBvZiBmaXh0dXJlcyBpcwotICAgIGFzc2VtYmxlZCBsaWtlIHRoaXM6Ci0KLSAgICAt
IGluaS1kZWZpbmVkIHVzZWZpeHR1cmVzCi0gICAgLSBhdXRvdXNlLW1hcmtlZCBmaXh0dXJlcyBh
bG9uZyB0aGUgY29sbGVjdGlvbiBjaGFpbiB1cCBmcm9tIHRoZSBmdW5jdGlvbgotICAgIC0gdXNl
Zml4dHVyZXMgbWFya2VycyBhdCBtb2R1bGUvY2xhc3MvZnVuY3Rpb24gbGV2ZWwKLSAgICAtIHRl
c3QgZnVuY3Rpb24gZnVuY2FyZ3MKLQotICAgIFN1YnNlcXVlbnRseSB0aGUgZnVuY2ZpeHR1cmVp
bmZvLmZpeHR1cmVuYW1lcyBhdHRyaWJ1dGUgaXMgY29tcHV0ZWQKLSAgICBhcyB0aGUgY2xvc3Vy
ZSBvZiB0aGUgZml4dHVyZXMgbmVlZGVkIHRvIHNldHVwIHRoZSBpbml0aWFsIGZpeHR1cmVzLAot
ICAgIGkuIGUuIGZpeHR1cmVzIG5lZWRlZCBieSBmaXh0dXJlIGZ1bmN0aW9ucyB0aGVtc2VsdmVz
IGFyZSBhcHBlbmRlZAotICAgIHRvIHRoZSBmaXh0dXJlbmFtZXMgbGlzdC4KLQotICAgIFVwb24g
dGhlIHRlc3Qtc2V0dXAgcGhhc2VzIGFsbCBmaXh0dXJlbmFtZXMgYXJlIGluc3RhbnRpYXRlZCwg
cmV0cmlldmVkCi0gICAgYnkgYSBsb29rdXAgb2YgdGhlaXIgRnVuY0ZpeHR1cmVJbmZvLgotICAg
ICIiIgotCi0gICAgX2FyZ3ByZWZpeCA9ICJweXRlc3RfZnVuY2FyZ19fIgotICAgIEZpeHR1cmVM
b29rdXBFcnJvciA9IEZpeHR1cmVMb29rdXBFcnJvcgotICAgIEZpeHR1cmVMb29rdXBFcnJvclJl
cHIgPSBGaXh0dXJlTG9va3VwRXJyb3JSZXByCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgc2Vz
c2lvbik6Ci0gICAgICAgIHNlbGYuc2Vzc2lvbiA9IHNlc3Npb24KLSAgICAgICAgc2VsZi5jb25m
aWcgPSBzZXNzaW9uLmNvbmZpZwotICAgICAgICBzZWxmLl9hcmcyZml4dHVyZWRlZnMgPSB7fQot
ICAgICAgICBzZWxmLl9ob2xkZXJvYmpzZWVuID0gc2V0KCkKLSAgICAgICAgc2VsZi5fYXJnMmZp
bmlzaCA9IHt9Ci0gICAgICAgIHNlbGYuX25vZGVpZF9hbmRfYXV0b3VzZW5hbWVzID0gWygiIiwg
c2VsZi5jb25maWcuZ2V0aW5pKCJ1c2VmaXh0dXJlcyIpKV0KLSAgICAgICAgc2Vzc2lvbi5jb25m
aWcucGx1Z2lubWFuYWdlci5yZWdpc3RlcihzZWxmLCAiZnVuY21hbmFnZSIpCi0KLQotICAgIGRl
ZiBnZXRmaXh0dXJlaW5mbyhzZWxmLCBub2RlLCBmdW5jLCBjbHMsIGZ1bmNhcmdzPVRydWUpOgot
ICAgICAgICBpZiBmdW5jYXJncyBhbmQgbm90IGhhc2F0dHIobm9kZSwgIm5vZnVuY2FyZ3MiKToK
LSAgICAgICAgICAgIGlmIGNscyBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICBzdGFydGlu
ZGV4ID0gMQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzdGFydGluZGV4ID0g
Tm9uZQotICAgICAgICAgICAgYXJnbmFtZXMgPSBnZXRmdW5jYXJnbmFtZXMoZnVuYywgc3RhcnRp
bmRleCkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGFyZ25hbWVzID0gKCkKLSAgICAgICAg
dXNlZml4dHVyZXMgPSBnZXRhdHRyKGZ1bmMsICJ1c2VmaXh0dXJlcyIsIE5vbmUpCi0gICAgICAg
IGluaXRpYWxuYW1lcyA9IGFyZ25hbWVzCi0gICAgICAgIGlmIHVzZWZpeHR1cmVzIGlzIG5vdCBO
b25lOgotICAgICAgICAgICAgaW5pdGlhbG5hbWVzID0gdXNlZml4dHVyZXMuYXJncyArIGluaXRp
YWxuYW1lcwotICAgICAgICBmbSA9IG5vZGUuc2Vzc2lvbi5fZml4dHVyZW1hbmFnZXIKLSAgICAg
ICAgbmFtZXNfY2xvc3VyZSwgYXJnMmZpeHR1cmVkZWZzID0gZm0uZ2V0Zml4dHVyZWNsb3N1cmUo
aW5pdGlhbG5hbWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBub2RlKQotICAgICAgICByZXR1cm4gRnVuY0ZpeHR1cmVJbmZv
KGFyZ25hbWVzLCBuYW1lc19jbG9zdXJlLCBhcmcyZml4dHVyZWRlZnMpCi0KLSAgICBkZWYgcHl0
ZXN0X3BsdWdpbl9yZWdpc3RlcmVkKHNlbGYsIHBsdWdpbik6Ci0gICAgICAgIG5vZGVpZCA9IE5v
bmUKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcCA9IHB5LnBhdGgubG9jYWwocGx1Z2luLl9f
ZmlsZV9fKQotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICBwYXNz
Ci0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAjIGNvbnN0cnVjdCB0aGUgYmFzZSBub2RlaWQg
d2hpY2ggaXMgbGF0ZXIgdXNlZCB0byBjaGVjawotICAgICAgICAgICAgIyB3aGF0IGZpeHR1cmVz
IGFyZSB2aXNpYmxlIGZvciBwYXJ0aWN1bGFyIHRlc3RzIChhcyBkZW5vdGVkCi0gICAgICAgICAg
ICAjIGJ5IHRoZWlyIHRlc3QgaWQpCi0gICAgICAgICAgICBpZiBwLmJhc2VuYW1lLnN0YXJ0c3dp
dGgoImNvbmZ0ZXN0LnB5Iik6Ci0gICAgICAgICAgICAgICAgbm9kZWlkID0gcC5kaXJwYXRoKCku
cmVsdG8oc2VsZi5jb25maWcucm9vdGRpcikKLSAgICAgICAgICAgICAgICBpZiBwLnNlcCAhPSAi
LyI6Ci0gICAgICAgICAgICAgICAgICAgIG5vZGVpZCA9IG5vZGVpZC5yZXBsYWNlKHAuc2VwLCAi
LyIpCi0gICAgICAgIHNlbGYucGFyc2VmYWN0b3JpZXMocGx1Z2luLCBub2RlaWQpCi0KLSAgICBk
ZWYgX2dldGF1dG91c2VuYW1lcyhzZWxmLCBub2RlaWQpOgotICAgICAgICAiIiIgcmV0dXJuIGEg
dHVwbGUgb2YgZml4dHVyZSBuYW1lcyB0byBiZSB1c2VkLiAiIiIKLSAgICAgICAgYXV0b3VzZW5h
bWVzID0gW10KLSAgICAgICAgZm9yIGJhc2VpZCwgYmFzZW5hbWVzIGluIHNlbGYuX25vZGVpZF9h
bmRfYXV0b3VzZW5hbWVzOgotICAgICAgICAgICAgaWYgbm9kZWlkLnN0YXJ0c3dpdGgoYmFzZWlk
KToKLSAgICAgICAgICAgICAgICBpZiBiYXNlaWQ6Ci0gICAgICAgICAgICAgICAgICAgIGkgPSBs
ZW4oYmFzZWlkKQotICAgICAgICAgICAgICAgICAgICBuZXh0Y2hhciA9IG5vZGVpZFtpOmkrMV0K
LSAgICAgICAgICAgICAgICAgICAgaWYgbmV4dGNoYXIgYW5kIG5leHRjaGFyIG5vdCBpbiAiOi8i
OgotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgICAgICBhdXRv
dXNlbmFtZXMuZXh0ZW5kKGJhc2VuYW1lcykKLSAgICAgICAgIyBtYWtlIHN1cmUgYXV0b3VzZW5h
bWVzIGFyZSBzb3J0ZWQgYnkgc2NvcGUsIHNjb3BlbnVtIDAgaXMgc2Vzc2lvbgotICAgICAgICBh
dXRvdXNlbmFtZXMuc29ydCgKLSAgICAgICAgICAgIGtleT1sYW1iZGEgeDogc2VsZi5fYXJnMmZp
eHR1cmVkZWZzW3hdWy0xXS5zY29wZW51bSkKLSAgICAgICAgcmV0dXJuIGF1dG91c2VuYW1lcwot
Ci0gICAgZGVmIGdldGZpeHR1cmVjbG9zdXJlKHNlbGYsIGZpeHR1cmVuYW1lcywgcGFyZW50bm9k
ZSk6Ci0gICAgICAgICMgY29sbGVjdCB0aGUgY2xvc3VyZSBvZiBhbGwgZml4dHVyZXMgLCBzdGFy
dGluZyB3aXRoIHRoZSBnaXZlbgotICAgICAgICAjIGZpeHR1cmVuYW1lcyBhcyB0aGUgaW5pdGlh
bCBzZXQuICBBcyB3ZSBoYXZlIHRvIHZpc2l0IGFsbAotICAgICAgICAjIGZhY3RvcnkgZGVmaW5p
dGlvbnMgYW55d2F5LCB3ZSBhbHNvIHJldHVybiBhIGFyZzJmaXh0dXJlZGVmcwotICAgICAgICAj
IG1hcHBpbmcgc28gdGhhdCB0aGUgY2FsbGVyIGNhbiByZXVzZSBpdCBhbmQgZG9lcyBub3QgaGF2
ZQotICAgICAgICAjIHRvIHJlLWRpc2NvdmVyIGZpeHR1cmVkZWZzIGFnYWluIGZvciBlYWNoIGZp
eHR1cmVuYW1lCi0gICAgICAgICMgKGRpc2NvdmVyaW5nIG1hdGNoaW5nIGZpeHR1cmVzIGZvciBh
IGdpdmVuIG5hbWUvbm9kZSBpcyBleHBlbnNpdmUpCi0KLSAgICAgICAgcGFyZW50aWQgPSBwYXJl
bnRub2RlLm5vZGVpZAotICAgICAgICBmaXh0dXJlbmFtZXNfY2xvc3VyZSA9IHNlbGYuX2dldGF1
dG91c2VuYW1lcyhwYXJlbnRpZCkKLSAgICAgICAgZGVmIG1lcmdlKG90aGVybGlzdCk6Ci0gICAg
ICAgICAgICBmb3IgYXJnIGluIG90aGVybGlzdDoKLSAgICAgICAgICAgICAgICBpZiBhcmcgbm90
IGluIGZpeHR1cmVuYW1lc19jbG9zdXJlOgotICAgICAgICAgICAgICAgICAgICBmaXh0dXJlbmFt
ZXNfY2xvc3VyZS5hcHBlbmQoYXJnKQotICAgICAgICBtZXJnZShmaXh0dXJlbmFtZXMpCi0gICAg
ICAgIGFyZzJmaXh0dXJlZGVmcyA9IHt9Ci0gICAgICAgIGxhc3RsZW4gPSAtMQotICAgICAgICB3
aGlsZSBsYXN0bGVuICE9IGxlbihmaXh0dXJlbmFtZXNfY2xvc3VyZSk6Ci0gICAgICAgICAgICBs
YXN0bGVuID0gbGVuKGZpeHR1cmVuYW1lc19jbG9zdXJlKQotICAgICAgICAgICAgZm9yIGFyZ25h
bWUgaW4gZml4dHVyZW5hbWVzX2Nsb3N1cmU6Ci0gICAgICAgICAgICAgICAgaWYgYXJnbmFtZSBp
biBhcmcyZml4dHVyZWRlZnM6Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAg
ICAgICAgICAgZml4dHVyZWRlZnMgPSBzZWxmLmdldGZpeHR1cmVkZWZzKGFyZ25hbWUsIHBhcmVu
dGlkKQotICAgICAgICAgICAgICAgIGlmIGZpeHR1cmVkZWZzOgotICAgICAgICAgICAgICAgICAg
ICBhcmcyZml4dHVyZWRlZnNbYXJnbmFtZV0gPSBmaXh0dXJlZGVmcwotICAgICAgICAgICAgICAg
ICAgICBtZXJnZShmaXh0dXJlZGVmc1stMV0uYXJnbmFtZXMpCi0gICAgICAgIHJldHVybiBmaXh0
dXJlbmFtZXNfY2xvc3VyZSwgYXJnMmZpeHR1cmVkZWZzCi0KLSAgICBkZWYgcHl0ZXN0X2dlbmVy
YXRlX3Rlc3RzKHNlbGYsIG1ldGFmdW5jKToKLSAgICAgICAgZm9yIGFyZ25hbWUgaW4gbWV0YWZ1
bmMuZml4dHVyZW5hbWVzOgotICAgICAgICAgICAgZmFjbGlzdCA9IG1ldGFmdW5jLl9hcmcyZml4
dHVyZWRlZnMuZ2V0KGFyZ25hbWUpCi0gICAgICAgICAgICBpZiBmYWNsaXN0OgotICAgICAgICAg
ICAgICAgIGZpeHR1cmVkZWYgPSBmYWNsaXN0Wy0xXQotICAgICAgICAgICAgICAgIGlmIGZpeHR1
cmVkZWYucGFyYW1zIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICBmdW5jX3BhcmFt
cyA9IGdldGF0dHIoZ2V0YXR0cihtZXRhZnVuYy5mdW5jdGlvbiwgJ3BhcmFtZXRyaXplJywgTm9u
ZSksICdhcmdzJywgW1tOb25lXV0pCi0gICAgICAgICAgICAgICAgICAgICMgc2tpcCBkaXJlY3Rs
eSBwYXJhbWV0cml6ZWQgYXJndW1lbnRzCi0gICAgICAgICAgICAgICAgICAgIGFyZ25hbWVzID0g
ZnVuY19wYXJhbXNbMF0KLSAgICAgICAgICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoYXJn
bmFtZXMsICh0dXBsZSwgbGlzdCkpOgotICAgICAgICAgICAgICAgICAgICAgICAgYXJnbmFtZXMg
PSBbeC5zdHJpcCgpIGZvciB4IGluIGFyZ25hbWVzLnNwbGl0KCIsIikgaWYgeC5zdHJpcCgpXQot
ICAgICAgICAgICAgICAgICAgICBpZiBhcmduYW1lIG5vdCBpbiBmdW5jX3BhcmFtcyBhbmQgYXJn
bmFtZSBub3QgaW4gYXJnbmFtZXM6Ci0gICAgICAgICAgICAgICAgICAgICAgICBtZXRhZnVuYy5w
YXJhbWV0cml6ZShhcmduYW1lLCBmaXh0dXJlZGVmLnBhcmFtcywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGlyZWN0PVRydWUsIHNjb3BlPWZpeHR1cmVk
ZWYuc2NvcGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZHM9Zml4dHVyZWRlZi5pZHMpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGNv
bnRpbnVlICMgd2lsbCByYWlzZSBGaXh0dXJlTG9va3VwRXJyb3IgYXQgc2V0dXAgdGltZQotCi0g
ICAgZGVmIHB5dGVzdF9jb2xsZWN0aW9uX21vZGlmeWl0ZW1zKHNlbGYsIGl0ZW1zKToKLSAgICAg
ICAgIyBzZXBhcmF0ZSBwYXJhbWV0cml6ZWQgc2V0dXBzCi0gICAgICAgIGl0ZW1zWzpdID0gcmVv
cmRlcl9pdGVtcyhpdGVtcykKLQotICAgIGRlZiBwYXJzZWZhY3RvcmllcyhzZWxmLCBub2RlX29y
X29iaiwgbm9kZWlkPU5PVFNFVCwgdW5pdHRlc3Q9RmFsc2UpOgotICAgICAgICBpZiBub2RlaWQg
aXMgbm90IE5PVFNFVDoKLSAgICAgICAgICAgIGhvbGRlcm9iaiA9IG5vZGVfb3Jfb2JqCi0gICAg
ICAgIGVsc2U6Ci0gICAgICAgICAgICBob2xkZXJvYmogPSBub2RlX29yX29iai5vYmoKLSAgICAg
ICAgICAgIG5vZGVpZCA9IG5vZGVfb3Jfb2JqLm5vZGVpZAotICAgICAgICBpZiBob2xkZXJvYmog
aW4gc2VsZi5faG9sZGVyb2Jqc2VlbjoKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBzZWxm
Ll9ob2xkZXJvYmpzZWVuLmFkZChob2xkZXJvYmopCi0gICAgICAgIGF1dG91c2VuYW1lcyA9IFtd
Ci0gICAgICAgIGZvciBuYW1lIGluIGRpcihob2xkZXJvYmopOgotICAgICAgICAgICAgb2JqID0g
Z2V0YXR0cihob2xkZXJvYmosIG5hbWUsIE5vbmUpCi0gICAgICAgICAgICAjIGZpeHR1cmUgZnVu
Y3Rpb25zIGhhdmUgYSBweXRlc3RfZnVuY2FyZ19fIHByZWZpeCAocHJlLTIuMyBzdHlsZSkKLSAg
ICAgICAgICAgICMgb3IgYXJlICJAcHl0ZXN0LmZpeHR1cmUiIG1hcmtlZAotICAgICAgICAgICAg
bWFya2VyID0gZ2V0Zml4dHVyZW1hcmtlcihvYmopCi0gICAgICAgICAgICBpZiBtYXJrZXIgaXMg
Tm9uZToKLSAgICAgICAgICAgICAgICBpZiBub3QgbmFtZS5zdGFydHN3aXRoKHNlbGYuX2FyZ3By
ZWZpeCk6Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgaWYg
bm90IGNhbGxhYmxlKG9iaik6Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAg
ICAgICAgICAgbWFya2VyID0gZGVmYXVsdGZ1bmNhcmdwcmVmaXhtYXJrZXIKLSAgICAgICAgICAg
ICAgICBuYW1lID0gbmFtZVtsZW4oc2VsZi5fYXJncHJlZml4KTpdCi0gICAgICAgICAgICBlbGlm
IG5vdCBpc2luc3RhbmNlKG1hcmtlciwgRml4dHVyZUZ1bmN0aW9uTWFya2VyKToKLSAgICAgICAg
ICAgICAgICAjIG1hZ2ljIGdsb2JhbHMgIHdpdGggX19nZXRhdHRyX18gbWlnaHQgaGF2ZSBnb3Qg
dXMgYSB3cm9uZwotICAgICAgICAgICAgICAgICMgZml4dHVyZSBhdHRyaWJ1dGUKLSAgICAgICAg
ICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBhc3Nl
cnQgbm90IG5hbWUuc3RhcnRzd2l0aChzZWxmLl9hcmdwcmVmaXgpCi0gICAgICAgICAgICBmaXh0
dXJlZGVmID0gRml4dHVyZURlZihzZWxmLCBub2RlaWQsIG5hbWUsIG9iaiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtlci5zY29wZSwgbWFya2VyLnBhcmFtcywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkY3R4PW1hcmtlci55aWVsZGN0
eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0PXVuaXR0ZXN0
LCBpZHM9bWFya2VyLmlkcykKLSAgICAgICAgICAgIGZhY2xpc3QgPSBzZWxmLl9hcmcyZml4dHVy
ZWRlZnMuc2V0ZGVmYXVsdChuYW1lLCBbXSkKLSAgICAgICAgICAgIGlmIGZpeHR1cmVkZWYuaGFz
X2xvY2F0aW9uOgotICAgICAgICAgICAgICAgIGZhY2xpc3QuYXBwZW5kKGZpeHR1cmVkZWYpCi0g
ICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICMgZml4dHVyZWRlZnMgd2l0aCBubyBs
b2NhdGlvbiBhcmUgYXQgdGhlIGZyb250Ci0gICAgICAgICAgICAgICAgIyBzbyB0aGlzIGluc2Vy
dHMgdGhlIGN1cnJlbnQgZml4dHVyZWRlZiBhZnRlciB0aGUKLSAgICAgICAgICAgICAgICAjIGV4
aXN0aW5nIGZpeHR1cmVkZWZzIGZyb20gZXh0ZXJuYWwgcGx1Z2lucyBidXQKLSAgICAgICAgICAg
ICAgICAjIGJlZm9yZSB0aGUgZml4dHVyZWRlZnMgcHJvdmlkZWQgaW4gY29uZnRlc3RzLgotICAg
ICAgICAgICAgICAgIGkgPSBsZW4oW2YgZm9yIGYgaW4gZmFjbGlzdCBpZiBub3QgZi5oYXNfbG9j
YXRpb25dKQotICAgICAgICAgICAgICAgIGZhY2xpc3QuaW5zZXJ0KGksIGZpeHR1cmVkZWYpCi0g
ICAgICAgICAgICBpZiBtYXJrZXIuYXV0b3VzZToKLSAgICAgICAgICAgICAgICBhdXRvdXNlbmFt
ZXMuYXBwZW5kKG5hbWUpCi0gICAgICAgIGlmIGF1dG91c2VuYW1lczoKLSAgICAgICAgICAgIHNl
bGYuX25vZGVpZF9hbmRfYXV0b3VzZW5hbWVzLmFwcGVuZCgobm9kZWlkIG9yICcnLCBhdXRvdXNl
bmFtZXMpKQotCi0gICAgZGVmIGdldGZpeHR1cmVkZWZzKHNlbGYsIGFyZ25hbWUsIG5vZGVpZCk6
Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGZpeHR1cmVkZWZzID0gc2VsZi5fYXJnMmZpeHR1
cmVkZWZzW2FyZ25hbWVdCi0gICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgICAgIHJl
dHVybiBOb25lCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gdHVwbGUoc2VsZi5f
bWF0Y2hmYWN0b3JpZXMoZml4dHVyZWRlZnMsIG5vZGVpZCkpCi0KLSAgICBkZWYgX21hdGNoZmFj
dG9yaWVzKHNlbGYsIGZpeHR1cmVkZWZzLCBub2RlaWQpOgotICAgICAgICBmb3IgZml4dHVyZWRl
ZiBpbiBmaXh0dXJlZGVmczoKLSAgICAgICAgICAgIGlmIG5vZGVpZC5zdGFydHN3aXRoKGZpeHR1
cmVkZWYuYmFzZWlkKToKLSAgICAgICAgICAgICAgICB5aWVsZCBmaXh0dXJlZGVmCi0KLQotZGVm
IGZhaWxfZml4dHVyZWZ1bmMoZml4dHVyZWZ1bmMsIG1zZyk6Ci0gICAgZnMsIGxpbmVubyA9IGdl
dGZzbGluZW5vKGZpeHR1cmVmdW5jKQotICAgIGxvY2F0aW9uID0gIiVzOiVzIiAlIChmcywgbGlu
ZW5vKzEpCi0gICAgc291cmNlID0gX3B5dGVzdC5fY29kZS5Tb3VyY2UoZml4dHVyZWZ1bmMpCi0g
ICAgcHl0ZXN0LmZhaWwobXNnICsgIjpcblxuIiArIHN0cihzb3VyY2UuaW5kZW50KCkpICsgIlxu
IiArIGxvY2F0aW9uLAotICAgICAgICAgICAgICAgIHB5dHJhY2U9RmFsc2UpCi0KLWRlZiBjYWxs
X2ZpeHR1cmVfZnVuYyhmaXh0dXJlZnVuYywgcmVxdWVzdCwga3dhcmdzLCB5aWVsZGN0eCk6Ci0g
ICAgaWYgeWllbGRjdHg6Ci0gICAgICAgIGlmIG5vdCBpc19nZW5lcmF0b3IoZml4dHVyZWZ1bmMp
OgotICAgICAgICAgICAgZmFpbF9maXh0dXJlZnVuYyhmaXh0dXJlZnVuYywKLSAgICAgICAgICAg
ICAgICBtc2c9InlpZWxkX2ZpeHR1cmUgcmVxdWlyZXMgeWllbGQgc3RhdGVtZW50IGluIGZ1bmN0
aW9uIikKLSAgICAgICAgaXRlciA9IGZpeHR1cmVmdW5jKCoqa3dhcmdzKQotICAgICAgICBuZXh0
ID0gZ2V0YXR0cihpdGVyLCAiX19uZXh0X18iLCBOb25lKQotICAgICAgICBpZiBuZXh0IGlzIE5v
bmU6Ci0gICAgICAgICAgICBuZXh0ID0gZ2V0YXR0cihpdGVyLCAibmV4dCIpCi0gICAgICAgIHJl
cyA9IG5leHQoKQotICAgICAgICBkZWYgdGVhcmRvd24oKToKLSAgICAgICAgICAgIHRyeToKLSAg
ICAgICAgICAgICAgICBuZXh0KCkKLSAgICAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgot
ICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAg
ZmFpbF9maXh0dXJlZnVuYyhmaXh0dXJlZnVuYywKLSAgICAgICAgICAgICAgICAgICAgInlpZWxk
X2ZpeHR1cmUgZnVuY3Rpb24gaGFzIG1vcmUgdGhhbiBvbmUgJ3lpZWxkJyIpCi0gICAgICAgIHJl
cXVlc3QuYWRkZmluYWxpemVyKHRlYXJkb3duKQotICAgIGVsc2U6Ci0gICAgICAgIGlmIGlzX2dl
bmVyYXRvcihmaXh0dXJlZnVuYyk6Ci0gICAgICAgICAgICBmYWlsX2ZpeHR1cmVmdW5jKGZpeHR1
cmVmdW5jLAotICAgICAgICAgICAgICAgIG1zZz0icHl0ZXN0LmZpeHR1cmUgZnVuY3Rpb25zIGNh
bm5vdCB1c2UgYGB5aWVsZGBgLiAiCi0gICAgICAgICAgICAgICAgICAgICJJbnN0ZWFkIHdyaXRl
IGFuZCByZXR1cm4gYW4gaW5uZXIgZnVuY3Rpb24vZ2VuZXJhdG9yICIKLSAgICAgICAgICAgICAg
ICAgICAgImFuZCBsZXQgdGhlIGNvbnN1bWVyIGNhbGwgYW5kIGl0ZXJhdGUgb3ZlciBpdC4iKQot
ICAgICAgICByZXMgPSBmaXh0dXJlZnVuYygqKmt3YXJncykKLSAgICByZXR1cm4gcmVzCi0KLWNs
YXNzIEZpeHR1cmVEZWY6Ci0gICAgIiIiIEEgY29udGFpbmVyIGZvciBhIGZhY3RvcnkgZGVmaW5p
dGlvbi4gIiIiCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpeHR1cmVtYW5hZ2VyLCBiYXNlaWQs
IGFyZ25hbWUsIGZ1bmMsIHNjb3BlLCBwYXJhbXMsCi0gICAgICAgICAgICAgICAgIHlpZWxkY3R4
LCB1bml0dGVzdD1GYWxzZSwgaWRzPU5vbmUpOgotICAgICAgICBzZWxmLl9maXh0dXJlbWFuYWdl
ciA9IGZpeHR1cmVtYW5hZ2VyCi0gICAgICAgIHNlbGYuYmFzZWlkID0gYmFzZWlkIG9yICcnCi0g
ICAgICAgIHNlbGYuaGFzX2xvY2F0aW9uID0gYmFzZWlkIGlzIG5vdCBOb25lCi0gICAgICAgIHNl
bGYuZnVuYyA9IGZ1bmMKLSAgICAgICAgc2VsZi5hcmduYW1lID0gYXJnbmFtZQotICAgICAgICBz
ZWxmLnNjb3BlID0gc2NvcGUKLSAgICAgICAgc2VsZi5zY29wZW51bSA9IHNjb3Blcy5pbmRleChz
Y29wZSBvciAiZnVuY3Rpb24iKQotICAgICAgICBzZWxmLnBhcmFtcyA9IHBhcmFtcwotICAgICAg
ICBzdGFydGluZGV4ID0gdW5pdHRlc3QgYW5kIDEgb3IgTm9uZQotICAgICAgICBzZWxmLmFyZ25h
bWVzID0gZ2V0ZnVuY2FyZ25hbWVzKGZ1bmMsIHN0YXJ0aW5kZXg9c3RhcnRpbmRleCkKLSAgICAg
ICAgc2VsZi55aWVsZGN0eCA9IHlpZWxkY3R4Ci0gICAgICAgIHNlbGYudW5pdHRlc3QgPSB1bml0
dGVzdAotICAgICAgICBzZWxmLmlkcyA9IGlkcwotICAgICAgICBzZWxmLl9maW5hbGl6ZXIgPSBb
XQotCi0gICAgZGVmIGFkZGZpbmFsaXplcihzZWxmLCBmaW5hbGl6ZXIpOgotICAgICAgICBzZWxm
Ll9maW5hbGl6ZXIuYXBwZW5kKGZpbmFsaXplcikKLQotICAgIGRlZiBmaW5pc2goc2VsZik6Ci0g
ICAgICAgIHRyeToKLSAgICAgICAgICAgIHdoaWxlIHNlbGYuX2ZpbmFsaXplcjoKLSAgICAgICAg
ICAgICAgICBmdW5jID0gc2VsZi5fZmluYWxpemVyLnBvcCgpCi0gICAgICAgICAgICAgICAgZnVu
YygpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAjIGV2ZW4gaWYgZmluYWxpemF0aW9u
IGZhaWxzLCB3ZSBpbnZhbGlkYXRlCi0gICAgICAgICAgICAjIHRoZSBjYWNoZWQgZml4dHVyZSB2
YWx1ZQotICAgICAgICAgICAgaWYgaGFzYXR0cihzZWxmLCAiY2FjaGVkX3Jlc3VsdCIpOgotICAg
ICAgICAgICAgICAgIGRlbCBzZWxmLmNhY2hlZF9yZXN1bHQKLQotICAgIGRlZiBleGVjdXRlKHNl
bGYsIHJlcXVlc3QpOgotICAgICAgICAjIGdldCByZXF1aXJlZCBhcmd1bWVudHMgYW5kIHJlZ2lz
dGVyIG91ciBvd24gZmluaXNoKCkKLSAgICAgICAgIyB3aXRoIHRoZWlyIGZpbmFsaXphdGlvbgot
ICAgICAgICBrd2FyZ3MgPSB7fQotICAgICAgICBmb3IgYXJnbmFtZSBpbiBzZWxmLmFyZ25hbWVz
OgotICAgICAgICAgICAgZml4dHVyZWRlZiA9IHJlcXVlc3QuX2dldF9hY3RpdmVfZml4dHVyZWRl
ZihhcmduYW1lKQotICAgICAgICAgICAgcmVzdWx0LCBhcmdfY2FjaGVfa2V5LCBleGMgPSBmaXh0
dXJlZGVmLmNhY2hlZF9yZXN1bHQKLSAgICAgICAgICAgIHJlcXVlc3QuX2NoZWNrX3Njb3BlKGFy
Z25hbWUsIHJlcXVlc3Quc2NvcGUsIGZpeHR1cmVkZWYuc2NvcGUpCi0gICAgICAgICAgICBrd2Fy
Z3NbYXJnbmFtZV0gPSByZXN1bHQKLSAgICAgICAgICAgIGlmIGFyZ25hbWUgIT0gInJlcXVlc3Qi
OgotICAgICAgICAgICAgICAgIGZpeHR1cmVkZWYuYWRkZmluYWxpemVyKHNlbGYuZmluaXNoKQot
Ci0gICAgICAgIG15X2NhY2hlX2tleSA9IHJlcXVlc3QucGFyYW1faW5kZXgKLSAgICAgICAgY2Fj
aGVkX3Jlc3VsdCA9IGdldGF0dHIoc2VsZiwgImNhY2hlZF9yZXN1bHQiLCBOb25lKQotICAgICAg
ICBpZiBjYWNoZWRfcmVzdWx0IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgcmVzdWx0LCBjYWNo
ZV9rZXksIGVyciA9IGNhY2hlZF9yZXN1bHQKLSAgICAgICAgICAgIGlmIG15X2NhY2hlX2tleSA9
PSBjYWNoZV9rZXk6Ci0gICAgICAgICAgICAgICAgaWYgZXJyIGlzIG5vdCBOb25lOgotICAgICAg
ICAgICAgICAgICAgICBweS5idWlsdGluLl9yZXJhaXNlKCplcnIpCi0gICAgICAgICAgICAgICAg
ZWxzZToKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAotICAgICAgICAgICAgIyB3
ZSBoYXZlIGEgcHJldmlvdXMgYnV0IGRpZmZlcmVudGx5IHBhcmFtZXRyaXplZCBmaXh0dXJlIGlu
c3RhbmNlCi0gICAgICAgICAgICAjIHNvIHdlIG5lZWQgdG8gdGVhciBpdCBkb3duIGJlZm9yZSBj
cmVhdGluZyBhIG5ldyBvbmUKLSAgICAgICAgICAgIHNlbGYuZmluaXNoKCkKLSAgICAgICAgICAg
IGFzc2VydCBub3QgaGFzYXR0cihzZWxmLCAiY2FjaGVkX3Jlc3VsdCIpCi0KLSAgICAgICAgZml4
dHVyZWZ1bmMgPSBzZWxmLmZ1bmMKLQotICAgICAgICBpZiBzZWxmLnVuaXR0ZXN0OgotICAgICAg
ICAgICAgaWYgcmVxdWVzdC5pbnN0YW5jZSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAj
IGJpbmQgdGhlIHVuYm91bmQgbWV0aG9kIHRvIHRoZSBUZXN0Q2FzZSBpbnN0YW5jZQotICAgICAg
ICAgICAgICAgIGZpeHR1cmVmdW5jID0gc2VsZi5mdW5jLl9fZ2V0X18ocmVxdWVzdC5pbnN0YW5j
ZSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgICMgdGhlIGZpeHR1cmUgZnVuY3Rpb24gbmVl
ZHMgdG8gYmUgYm91bmQgdG8gdGhlIGFjdHVhbAotICAgICAgICAgICAgIyByZXF1ZXN0Lmluc3Rh
bmNlIHNvIHRoYXQgY29kZSB3b3JraW5nIHdpdGggInNlbGYiIGJlaGF2ZXMKLSAgICAgICAgICAg
ICMgYXMgZXhwZWN0ZWQuCi0gICAgICAgICAgICBpZiByZXF1ZXN0Lmluc3RhbmNlIGlzIG5vdCBO
b25lOgotICAgICAgICAgICAgICAgIGZpeHR1cmVmdW5jID0gZ2V0aW1mdW5jKHNlbGYuZnVuYykK
LSAgICAgICAgICAgICAgICBpZiBmaXh0dXJlZnVuYyAhPSBzZWxmLmZ1bmM6Ci0gICAgICAgICAg
ICAgICAgICAgIGZpeHR1cmVmdW5jID0gZml4dHVyZWZ1bmMuX19nZXRfXyhyZXF1ZXN0Lmluc3Rh
bmNlKQotCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHJlc3VsdCA9IGNhbGxfZml4dHVyZV9m
dW5jKGZpeHR1cmVmdW5jLCByZXF1ZXN0LCBrd2FyZ3MsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzZWxmLnlpZWxkY3R4KQotICAgICAgICBleGNlcHQgRXhjZXB0aW9u
OgotICAgICAgICAgICAgc2VsZi5jYWNoZWRfcmVzdWx0ID0gKE5vbmUsIG15X2NhY2hlX2tleSwg
c3lzLmV4Y19pbmZvKCkpCi0gICAgICAgICAgICByYWlzZQotICAgICAgICBzZWxmLmNhY2hlZF9y
ZXN1bHQgPSAocmVzdWx0LCBteV9jYWNoZV9rZXksIE5vbmUpCi0gICAgICAgIHJldHVybiByZXN1
bHQKLQotICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuICgiPEZpeHR1cmVE
ZWYgbmFtZT0lciBzY29wZT0lciBiYXNlaWQ9JXIgPiIgJQotICAgICAgICAgICAgICAgIChzZWxm
LmFyZ25hbWUsIHNlbGYuc2NvcGUsIHNlbGYuYmFzZWlkKSkKLQotZGVmIG51bV9tb2NrX3BhdGNo
X2FyZ3MoZnVuY3Rpb24pOgotICAgICIiIiByZXR1cm4gbnVtYmVyIG9mIGFyZ3VtZW50cyB1c2Vk
IHVwIGJ5IG1vY2sgYXJndW1lbnRzIChpZiBhbnkpICIiIgotICAgIHBhdGNoaW5ncyA9IGdldGF0
dHIoZnVuY3Rpb24sICJwYXRjaGluZ3MiLCBOb25lKQotICAgIGlmIG5vdCBwYXRjaGluZ3M6Ci0g
ICAgICAgIHJldHVybiAwCi0gICAgbW9jayA9IHN5cy5tb2R1bGVzLmdldCgibW9jayIsIHN5cy5t
b2R1bGVzLmdldCgidW5pdHRlc3QubW9jayIsIE5vbmUpKQotICAgIGlmIG1vY2sgaXMgbm90IE5v
bmU6Ci0gICAgICAgIHJldHVybiBsZW4oW3AgZm9yIHAgaW4gcGF0Y2hpbmdzCi0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiBub3QgcC5hdHRyaWJ1dGVfbmFtZSBhbmQgcC5uZXcgaXMgbW9jay5E
RUZBVUxUXSkKLSAgICByZXR1cm4gbGVuKHBhdGNoaW5ncykKLQotCi1kZWYgZ2V0ZnVuY2FyZ25h
bWVzKGZ1bmN0aW9uLCBzdGFydGluZGV4PU5vbmUpOgotICAgICMgWFhYIG1lcmdlIHdpdGggbWFp
bi5weSdzIHZhcm5hbWVzCi0gICAgI2Fzc2VydCBub3QgaXNjbGFzcyhmdW5jdGlvbikKLSAgICBy
ZWFsZnVuY3Rpb24gPSBmdW5jdGlvbgotICAgIHdoaWxlIGhhc2F0dHIocmVhbGZ1bmN0aW9uLCAi
X193cmFwcGVkX18iKToKLSAgICAgICAgcmVhbGZ1bmN0aW9uID0gcmVhbGZ1bmN0aW9uLl9fd3Jh
cHBlZF9fCi0gICAgaWYgc3RhcnRpbmRleCBpcyBOb25lOgotICAgICAgICBzdGFydGluZGV4ID0g
aW5zcGVjdC5pc21ldGhvZChmdW5jdGlvbikgYW5kIDEgb3IgMAotICAgIGlmIHJlYWxmdW5jdGlv
biAhPSBmdW5jdGlvbjoKLSAgICAgICAgc3RhcnRpbmRleCArPSBudW1fbW9ja19wYXRjaF9hcmdz
KGZ1bmN0aW9uKQotICAgICAgICBmdW5jdGlvbiA9IHJlYWxmdW5jdGlvbgotICAgIGlmIGlzaW5z
dGFuY2UoZnVuY3Rpb24sIGZ1bmN0b29scy5wYXJ0aWFsKToKLSAgICAgICAgYXJnbmFtZXMgPSBp
bnNwZWN0LmdldGFyZ3MoX3B5dGVzdC5fY29kZS5nZXRyYXdjb2RlKGZ1bmN0aW9uLmZ1bmMpKVsw
XQotICAgICAgICBwYXJ0aWFsID0gZnVuY3Rpb24KLSAgICAgICAgYXJnbmFtZXMgPSBhcmduYW1l
c1tsZW4ocGFydGlhbC5hcmdzKTpdCi0gICAgICAgIGlmIHBhcnRpYWwua2V5d29yZHM6Ci0gICAg
ICAgICAgICBmb3Iga3cgaW4gcGFydGlhbC5rZXl3b3JkczoKLSAgICAgICAgICAgICAgICBhcmdu
YW1lcy5yZW1vdmUoa3cpCi0gICAgZWxzZToKLSAgICAgICAgYXJnbmFtZXMgPSBpbnNwZWN0Lmdl
dGFyZ3MoX3B5dGVzdC5fY29kZS5nZXRyYXdjb2RlKGZ1bmN0aW9uKSlbMF0KLSAgICBkZWZhdWx0
cyA9IGdldGF0dHIoZnVuY3Rpb24sICdmdW5jX2RlZmF1bHRzJywKLSAgICAgICAgICAgICAgICAg
ICAgICAgZ2V0YXR0cihmdW5jdGlvbiwgJ19fZGVmYXVsdHNfXycsIE5vbmUpKSBvciAoKQotICAg
IG51bWRlZmF1bHRzID0gbGVuKGRlZmF1bHRzKQotICAgIGlmIG51bWRlZmF1bHRzOgotICAgICAg
ICByZXR1cm4gdHVwbGUoYXJnbmFtZXNbc3RhcnRpbmRleDotbnVtZGVmYXVsdHNdKQotICAgIHJl
dHVybiB0dXBsZShhcmduYW1lc1tzdGFydGluZGV4Ol0pCi0KLSMgYWxnb3JpdGhtIGZvciBzb3J0
aW5nIG9uIGEgcGVyLXBhcmFtZXRyaXplZCByZXNvdXJjZSBzZXR1cCBiYXNpcwotIyBpdCBpcyBj
YWxsZWQgZm9yIHNjb3BlbnVtPT0wIChzZXNzaW9uKSBmaXJzdCBhbmQgcGVyZm9ybXMgc29ydGlu
ZwotIyBkb3duIHRvIHRoZSBsb3dlciBzY29wZXMgc3VjaCBhcyB0byBtaW5pbWl6ZSBudW1iZXIg
b2YgImhpZ2ggc2NvcGUiCi0jIHNldHVwcyBhbmQgdGVhcmRvd25zCi0KLWRlZiByZW9yZGVyX2l0
ZW1zKGl0ZW1zKToKLSAgICBhcmdrZXlzX2NhY2hlID0ge30KLSAgICBmb3Igc2NvcGVudW0gaW4g
cmFuZ2UoMCwgc2NvcGVudW1fZnVuY3Rpb24pOgotICAgICAgICBhcmdrZXlzX2NhY2hlW3Njb3Bl
bnVtXSA9IGQgPSB7fQotICAgICAgICBmb3IgaXRlbSBpbiBpdGVtczoKLSAgICAgICAgICAgIGtl
eXMgPSBzZXQoZ2V0X3BhcmFtZXRyaXplZF9maXh0dXJlX2tleXMoaXRlbSwgc2NvcGVudW0pKQot
ICAgICAgICAgICAgaWYga2V5czoKLSAgICAgICAgICAgICAgICBkW2l0ZW1dID0ga2V5cwotICAg
IHJldHVybiByZW9yZGVyX2l0ZW1zX2F0c2NvcGUoaXRlbXMsIHNldCgpLCBhcmdrZXlzX2NhY2hl
LCAwKQotCi1kZWYgcmVvcmRlcl9pdGVtc19hdHNjb3BlKGl0ZW1zLCBpZ25vcmUsIGFyZ2tleXNf
Y2FjaGUsIHNjb3BlbnVtKToKLSAgICBpZiBzY29wZW51bSA+PSBzY29wZW51bV9mdW5jdGlvbiBv
ciBsZW4oaXRlbXMpIDwgMzoKLSAgICAgICAgcmV0dXJuIGl0ZW1zCi0gICAgaXRlbXNfZG9uZSA9
IFtdCi0gICAgd2hpbGUgMToKLSAgICAgICAgaXRlbXNfYmVmb3JlLCBpdGVtc19zYW1lLCBpdGVt
c19vdGhlciwgbmV3aWdub3JlID0gXAotICAgICAgICAgICAgICAgIHNsaWNlX2l0ZW1zKGl0ZW1z
LCBpZ25vcmUsIGFyZ2tleXNfY2FjaGVbc2NvcGVudW1dKQotICAgICAgICBpdGVtc19iZWZvcmUg
PSByZW9yZGVyX2l0ZW1zX2F0c2NvcGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRl
bXNfYmVmb3JlLCBpZ25vcmUsIGFyZ2tleXNfY2FjaGUsc2NvcGVudW0rMSkKLSAgICAgICAgaWYg
aXRlbXNfc2FtZSBpcyBOb25lOgotICAgICAgICAgICAgIyBub3RoaW5nIHRvIHJlb3JkZXIgaW4g
dGhpcyBzY29wZQotICAgICAgICAgICAgYXNzZXJ0IGl0ZW1zX290aGVyIGlzIE5vbmUKLSAgICAg
ICAgICAgIHJldHVybiBpdGVtc19kb25lICsgaXRlbXNfYmVmb3JlCi0gICAgICAgIGl0ZW1zX2Rv
bmUuZXh0ZW5kKGl0ZW1zX2JlZm9yZSkKLSAgICAgICAgaXRlbXMgPSBpdGVtc19zYW1lICsgaXRl
bXNfb3RoZXIKLSAgICAgICAgaWdub3JlID0gbmV3aWdub3JlCi0KLQotZGVmIHNsaWNlX2l0ZW1z
KGl0ZW1zLCBpZ25vcmUsIHNjb3BlZF9hcmdrZXlzX2NhY2hlKToKLSAgICAjIHdlIHBpY2sgdGhl
IGZpcnN0IGl0ZW0gd2hpY2ggdXNlcyBhIGZpeHR1cmUgaW5zdGFuY2UgaW4gdGhlCi0gICAgIyBy
ZXF1ZXN0ZWQgc2NvcGUgYW5kIHdoaWNoIHdlIGhhdmVuJ3Qgc2VlbiB5ZXQuICBXZSBzbGljZSB0
aGUgaW5wdXQKLSAgICAjIGl0ZW1zIGxpc3QgaW50byBhIGxpc3Qgb2YgaXRlbXNfbm9tYXRjaCwg
aXRlbXNfc2FtZSBhbmQKLSAgICAjIGl0ZW1zX290aGVyCi0gICAgaWYgc2NvcGVkX2FyZ2tleXNf
Y2FjaGU6ICAjIGRvIHdlIG5lZWQgdG8gZG8gd29yayBhdCBhbGw/Ci0gICAgICAgIGl0ID0gaXRl
cihpdGVtcykKLSAgICAgICAgIyBmaXJzdCBmaW5kIGEgc2xpY2luZyBrZXkKLSAgICAgICAgZm9y
IGksIGl0ZW0gaW4gZW51bWVyYXRlKGl0KToKLSAgICAgICAgICAgIGFyZ2tleXMgPSBzY29wZWRf
YXJna2V5c19jYWNoZS5nZXQoaXRlbSkKLSAgICAgICAgICAgIGlmIGFyZ2tleXMgaXMgbm90IE5v
bmU6Ci0gICAgICAgICAgICAgICAgYXJna2V5cyA9IGFyZ2tleXMuZGlmZmVyZW5jZShpZ25vcmUp
Ci0gICAgICAgICAgICAgICAgaWYgYXJna2V5czogICMgZm91bmQgYSBzbGljaW5nIGtleQotICAg
ICAgICAgICAgICAgICAgICBzbGljaW5nX2FyZ2tleSA9IGFyZ2tleXMucG9wKCkKLSAgICAgICAg
ICAgICAgICAgICAgaXRlbXNfYmVmb3JlID0gaXRlbXNbOmldCi0gICAgICAgICAgICAgICAgICAg
IGl0ZW1zX3NhbWUgPSBbaXRlbV0KLSAgICAgICAgICAgICAgICAgICAgaXRlbXNfb3RoZXIgPSBb
XQotICAgICAgICAgICAgICAgICAgICAjIG5vdyBzbGljZSB0aGUgcmVtYWluZGVyIG9mIHRoZSBs
aXN0Ci0gICAgICAgICAgICAgICAgICAgIGZvciBpdGVtIGluIGl0OgotICAgICAgICAgICAgICAg
ICAgICAgICAgYXJna2V5cyA9IHNjb3BlZF9hcmdrZXlzX2NhY2hlLmdldChpdGVtKQotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgYXJna2V5cyBhbmQgc2xpY2luZ19hcmdrZXkgaW4gYXJna2V5
cyBhbmQgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsaWNpbmdfYXJna2V5IG5vdCBp
biBpZ25vcmU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXNfc2FtZS5hcHBlbmQo
aXRlbSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaXRlbXNfb3RoZXIuYXBwZW5kKGl0ZW0pCi0gICAgICAgICAgICAgICAgICAgIG5l
d2lnbm9yZSA9IGlnbm9yZS5jb3B5KCkKLSAgICAgICAgICAgICAgICAgICAgbmV3aWdub3JlLmFk
ZChzbGljaW5nX2FyZ2tleSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChpdGVtc19iZWZv
cmUsIGl0ZW1zX3NhbWUsIGl0ZW1zX290aGVyLCBuZXdpZ25vcmUpCi0gICAgcmV0dXJuIGl0ZW1z
LCBOb25lLCBOb25lLCBOb25lCi0KLWRlZiBnZXRfcGFyYW1ldHJpemVkX2ZpeHR1cmVfa2V5cyhp
dGVtLCBzY29wZW51bSk6Ci0gICAgIiIiIHJldHVybiBsaXN0IG9mIGtleXMgZm9yIGFsbCBwYXJh
bWV0cml6ZWQgYXJndW1lbnRzIHdoaWNoIG1hdGNoCi0gICAgdGhlIHNwZWNpZmllZCBzY29wZS4g
IiIiCi0gICAgYXNzZXJ0IHNjb3BlbnVtIDwgc2NvcGVudW1fZnVuY3Rpb24gICMgZnVuY3Rpb24K
LSAgICB0cnk6Ci0gICAgICAgIGNzID0gaXRlbS5jYWxsc3BlYwotICAgIGV4Y2VwdCBBdHRyaWJ1
dGVFcnJvcjoKLSAgICAgICAgcGFzcwotICAgIGVsc2U6Ci0gICAgICAgICMgY3MuaW5kaWN0ZXMu
aXRlbXMoKSBpcyByYW5kb20gb3JkZXIgb2YgYXJnbmFtZXMgYnV0Ci0gICAgICAgICMgdGhlbiBh
Z2FpbiBkaWZmZXJlbnQgZnVuY3Rpb25zIChpdGVtcykgY2FuIGNoYW5nZSBvcmRlciBvZgotICAg
ICAgICAjIGFyZ3VtZW50cyBzbyBpdCBkb2Vzbid0IG1hdHRlciBtdWNoIHByb2JhYmx5Ci0gICAg
ICAgIGZvciBhcmduYW1lLCBwYXJhbV9pbmRleCBpbiBjcy5pbmRpY2VzLml0ZW1zKCk6Ci0gICAg
ICAgICAgICBpZiBjcy5fYXJnMnNjb3BlbnVtW2FyZ25hbWVdICE9IHNjb3BlbnVtOgotICAgICAg
ICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBpZiBzY29wZW51bSA9PSAwOiAgICAjIHNl
c3Npb24KLSAgICAgICAgICAgICAgICBrZXkgPSAoYXJnbmFtZSwgcGFyYW1faW5kZXgpCi0gICAg
ICAgICAgICBlbGlmIHNjb3BlbnVtID09IDE6ICAjIG1vZHVsZQotICAgICAgICAgICAgICAgIGtl
eSA9IChhcmduYW1lLCBwYXJhbV9pbmRleCwgaXRlbS5mc3BhdGgpCi0gICAgICAgICAgICBlbGlm
IHNjb3BlbnVtID09IDI6ICAjIGNsYXNzCi0gICAgICAgICAgICAgICAga2V5ID0gKGFyZ25hbWUs
IHBhcmFtX2luZGV4LCBpdGVtLmZzcGF0aCwgaXRlbS5jbHMpCi0gICAgICAgICAgICB5aWVsZCBr
ZXkKLQotCi1kZWYgeHVuaXRzZXR1cChvYmosIG5hbWUpOgotICAgIG1ldGggPSBnZXRhdHRyKG9i
aiwgbmFtZSwgTm9uZSkKLSAgICBpZiBnZXRmaXh0dXJlbWFya2VyKG1ldGgpIGlzIE5vbmU6Ci0g
ICAgICAgIHJldHVybiBtZXRoCi0KLWRlZiBnZXRmaXh0dXJlbWFya2VyKG9iaik6Ci0gICAgIiIi
IHJldHVybiBmaXh0dXJlbWFya2VyIG9yIE5vbmUgaWYgaXQgZG9lc24ndCBleGlzdCBvciByYWlz
ZWQKLSAgICBleGNlcHRpb25zLiIiIgotICAgIHRyeToKLSAgICAgICAgcmV0dXJuIGdldGF0dHIo
b2JqLCAiX3B5dGVzdGZpeHR1cmVmdW5jdGlvbiIsIE5vbmUpCi0gICAgZXhjZXB0IEtleWJvYXJk
SW50ZXJydXB0OgotICAgICAgICByYWlzZQotICAgIGV4Y2VwdCBFeGNlcHRpb246Ci0gICAgICAg
ICMgc29tZSBvYmplY3RzIHJhaXNlIGVycm9ycyBsaWtlIHJlcXVlc3QgKGZyb20gZmxhc2sgaW1w
b3J0IHJlcXVlc3QpCi0gICAgICAgICMgd2UgZG9uJ3QgZXhwZWN0IHRoZW0gdG8gYmUgZml4dHVy
ZSBmdW5jdGlvbnMKLSAgICAgICAgcmV0dXJuIE5vbmUKLQotc2NvcGVuYW1lMmNsYXNzID0gewot
ICAgICdjbGFzcyc6IENsYXNzLAotICAgICdtb2R1bGUnOiBNb2R1bGUsCi0gICAgJ2Z1bmN0aW9u
JzogcHl0ZXN0Lkl0ZW0sCi19Ci1kZWYgZ2V0X3Njb3BlX25vZGUobm9kZSwgc2NvcGUpOgotICAg
IGNscyA9IHNjb3BlbmFtZTJjbGFzcy5nZXQoc2NvcGUpCi0gICAgaWYgY2xzIGlzIE5vbmU6Ci0g
ICAgICAgIGlmIHNjb3BlID09ICJzZXNzaW9uIjoKLSAgICAgICAgICAgIHJldHVybiBub2RlLnNl
c3Npb24KLSAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidW5rbm93biBzY29wZSIpCi0gICAgcmV0
dXJuIG5vZGUuZ2V0cGFyZW50KGNscykKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9y
dGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9yZWN3YXJuLnB5IGIvV2ViRHJpdmVyVGVzdHMv
aW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L3JlY3dhcm4ucHkKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGE4OTQ3NGMwMzZhLi4wMDAwMDAwMDAwMAotLS0gYS9XZWJEcml2
ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvcmVjd2Fybi5weQorKysg
L2Rldi9udWxsCkBAIC0xLDIyMSArMCwwIEBACi0iIiIgcmVjb3JkaW5nIHdhcm5pbmdzIGR1cmlu
ZyB0ZXN0IGZ1bmN0aW9uIGV4ZWN1dGlvbi4gIiIiCi0KLWltcG9ydCBpbnNwZWN0Ci0KLWltcG9y
dCBfcHl0ZXN0Ll9jb2RlCi1pbXBvcnQgcHkKLWltcG9ydCBzeXMKLWltcG9ydCB3YXJuaW5ncwot
aW1wb3J0IHB5dGVzdAotCi0KLUBweXRlc3QueWllbGRfZml4dHVyZQotZGVmIHJlY3dhcm4ocmVx
dWVzdCk6Ci0gICAgIiIiUmV0dXJuIGEgV2FybmluZ3NSZWNvcmRlciBpbnN0YW5jZSB0aGF0IHBy
b3ZpZGVzIHRoZXNlIG1ldGhvZHM6Ci0KLSAgICAqIGBgcG9wKGNhdGVnb3J5PU5vbmUpYGA6IHJl
dHVybiBsYXN0IHdhcm5pbmcgbWF0Y2hpbmcgdGhlIGNhdGVnb3J5LgotICAgICogYGBjbGVhcigp
YGA6IGNsZWFyIGxpc3Qgb2Ygd2FybmluZ3MKLQotICAgIFNlZSBodHRwOi8vZG9jcy5weXRob24u
b3JnL2xpYnJhcnkvd2FybmluZ3MuaHRtbCBmb3IgaW5mb3JtYXRpb24KLSAgICBvbiB3YXJuaW5n
IGNhdGVnb3JpZXMuCi0gICAgIiIiCi0gICAgd3JlYyA9IFdhcm5pbmdzUmVjb3JkZXIoKQotICAg
IHdpdGggd3JlYzoKLSAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdkZWZhdWx0JykKLSAg
ICAgICAgeWllbGQgd3JlYwotCi0KLWRlZiBweXRlc3RfbmFtZXNwYWNlKCk6Ci0gICAgcmV0dXJu
IHsnZGVwcmVjYXRlZF9jYWxsJzogZGVwcmVjYXRlZF9jYWxsLAotICAgICAgICAgICAgJ3dhcm5z
Jzogd2FybnN9Ci0KLQotZGVmIGRlcHJlY2F0ZWRfY2FsbChmdW5jPU5vbmUsICphcmdzLCAqKmt3
YXJncyk6Ci0gICAgIiIiIGFzc2VydCB0aGF0IGNhbGxpbmcgYGBmdW5jKCphcmdzLCAqKmt3YXJn
cylgYCB0cmlnZ2VycyBhCi0gICAgYGBEZXByZWNhdGlvbldhcm5pbmdgYCBvciBgYFBlbmRpbmdE
ZXByZWNhdGlvbldhcm5pbmdgYC4KLQotICAgIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgYXMg
YSBjb250ZXh0IG1hbmFnZXI6OgotCi0gICAgICAgID4+PiB3aXRoIGRlcHJlY2F0ZWRfY2FsbCgp
OgotICAgICAgICAuLi4gICAgbXlvYmplY3QuZGVwcmVjYXRlZF9tZXRob2QoKQotCi0gICAgTm90
ZTogd2UgY2Fubm90IHVzZSBXYXJuaW5nc1JlY29yZGVyIGhlcmUgYmVjYXVzZSBpdCBpcyBzdGls
bCBzdWJqZWN0Ci0gICAgdG8gdGhlIG1lY2hhbmlzbSB0aGF0IHByZXZlbnRzIHdhcm5pbmdzIG9m
IHRoZSBzYW1lIHR5cGUgZnJvbSBiZWluZwotICAgIHRyaWdnZXJlZCB0d2ljZSBmb3IgdGhlIHNh
bWUgbW9kdWxlLiBTZWUgIzExOTAuCi0gICAgIiIiCi0gICAgaWYgbm90IGZ1bmM6Ci0gICAgICAg
IHJldHVybiBXYXJuaW5nc0NoZWNrZXIoZXhwZWN0ZWRfd2FybmluZz1EZXByZWNhdGlvbldhcm5p
bmcpCi0KLSAgICBjYXRlZ29yaWVzID0gW10KLQotICAgIGRlZiB3YXJuX2V4cGxpY2l0KG1lc3Nh
Z2UsIGNhdGVnb3J5LCAqYXJncywgKiprd2FyZ3MpOgotICAgICAgICBjYXRlZ29yaWVzLmFwcGVu
ZChjYXRlZ29yeSkKLSAgICAgICAgb2xkX3dhcm5fZXhwbGljaXQobWVzc2FnZSwgY2F0ZWdvcnks
ICphcmdzLCAqKmt3YXJncykKLQotICAgIGRlZiB3YXJuKG1lc3NhZ2UsIGNhdGVnb3J5PU5vbmUs
ICphcmdzLCAqKmt3YXJncyk6Ci0gICAgICAgIGlmIGlzaW5zdGFuY2UobWVzc2FnZSwgV2Fybmlu
Zyk6Ci0gICAgICAgICAgICBjYXRlZ29yaWVzLmFwcGVuZChtZXNzYWdlLl9fY2xhc3NfXykKLSAg
ICAgICAgZWxzZToKLSAgICAgICAgICAgIGNhdGVnb3JpZXMuYXBwZW5kKGNhdGVnb3J5KQotICAg
ICAgICBvbGRfd2FybihtZXNzYWdlLCBjYXRlZ29yeSwgKmFyZ3MsICoqa3dhcmdzKQotCi0gICAg
b2xkX3dhcm4gPSB3YXJuaW5ncy53YXJuCi0gICAgb2xkX3dhcm5fZXhwbGljaXQgPSB3YXJuaW5n
cy53YXJuX2V4cGxpY2l0Ci0gICAgd2FybmluZ3Mud2Fybl9leHBsaWNpdCA9IHdhcm5fZXhwbGlj
aXQKLSAgICB3YXJuaW5ncy53YXJuID0gd2FybgotICAgIHRyeToKLSAgICAgICAgcmV0ID0gZnVu
YygqYXJncywgKiprd2FyZ3MpCi0gICAgZmluYWxseToKLSAgICAgICAgd2FybmluZ3Mud2Fybl9l
eHBsaWNpdCA9IG9sZF93YXJuX2V4cGxpY2l0Ci0gICAgICAgIHdhcm5pbmdzLndhcm4gPSBvbGRf
d2FybgotICAgIGRlcHJlY2F0aW9uX2NhdGVnb3JpZXMgPSAoRGVwcmVjYXRpb25XYXJuaW5nLCBQ
ZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nKQotICAgIGlmIG5vdCBhbnkoaXNzdWJjbGFzcyhjLCBk
ZXByZWNhdGlvbl9jYXRlZ29yaWVzKSBmb3IgYyBpbiBjYXRlZ29yaWVzKToKLSAgICAgICAgX190
cmFjZWJhY2toaWRlX18gPSBUcnVlCi0gICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCIlciBk
aWQgbm90IHByb2R1Y2UgRGVwcmVjYXRpb25XYXJuaW5nIiAlIChmdW5jLCkpCi0gICAgcmV0dXJu
IHJldAotCi0KLWRlZiB3YXJucyhleHBlY3RlZF93YXJuaW5nLCAqYXJncywgKiprd2FyZ3MpOgot
ICAgICIiIkFzc2VydCB0aGF0IGNvZGUgcmFpc2VzIGEgcGFydGljdWxhciBjbGFzcyBvZiB3YXJu
aW5nLgotCi0gICAgU3BlY2lmaWNhbGx5LCB0aGUgaW5wdXQgQGV4cGVjdGVkX3dhcm5pbmcgY2Fu
IGJlIGEgd2FybmluZyBjbGFzcyBvcgotICAgIHR1cGxlIG9mIHdhcm5pbmcgY2xhc3NlcywgYW5k
IHRoZSBjb2RlIG11c3QgcmV0dXJuIHRoYXQgd2FybmluZwotICAgIChpZiBhIHNpbmdsZSBjbGFz
cykgb3Igb25lIG9mIHRob3NlIHdhcm5pbmdzIChpZiBhIHR1cGxlKS4KLQotICAgIFRoaXMgaGVs
cGVyIHByb2R1Y2VzIGEgbGlzdCBvZiBgYHdhcm5pbmdzLldhcm5pbmdNZXNzYWdlYGAgb2JqZWN0
cywKLSAgICBvbmUgZm9yIGVhY2ggd2FybmluZyByYWlzZWQuCi0KLSAgICBUaGlzIGZ1bmN0aW9u
IGNhbiBiZSB1c2VkIGFzIGEgY29udGV4dCBtYW5hZ2VyLCBvciBhbnkgb2YgdGhlIG90aGVyIHdh
eXMKLSAgICBgYHB5dGVzdC5yYWlzZXNgYCBjYW4gYmUgdXNlZDo6Ci0KLSAgICAgICAgPj4+IHdp
dGggd2FybnMoUnVudGltZVdhcm5pbmcpOgotICAgICAgICAuLi4gICAgd2FybmluZ3Mud2Fybigi
bXkgd2FybmluZyIsIFJ1bnRpbWVXYXJuaW5nKQotICAgICIiIgotICAgIHdjaGVjayA9IFdhcm5p
bmdzQ2hlY2tlcihleHBlY3RlZF93YXJuaW5nKQotICAgIGlmIG5vdCBhcmdzOgotICAgICAgICBy
ZXR1cm4gd2NoZWNrCi0gICAgZWxpZiBpc2luc3RhbmNlKGFyZ3NbMF0sIHN0cik6Ci0gICAgICAg
IGNvZGUsID0gYXJncwotICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShjb2RlLCBzdHIpCi0gICAg
ICAgIGZyYW1lID0gc3lzLl9nZXRmcmFtZSgxKQotICAgICAgICBsb2MgPSBmcmFtZS5mX2xvY2Fs
cy5jb3B5KCkKLSAgICAgICAgbG9jLnVwZGF0ZShrd2FyZ3MpCi0KLSAgICAgICAgd2l0aCB3Y2hl
Y2s6Ci0gICAgICAgICAgICBjb2RlID0gX3B5dGVzdC5fY29kZS5Tb3VyY2UoY29kZSkuY29tcGls
ZSgpCi0gICAgICAgICAgICBweS5idWlsdGluLmV4ZWNfKGNvZGUsIGZyYW1lLmZfZ2xvYmFscywg
bG9jKQotICAgIGVsc2U6Ci0gICAgICAgIGZ1bmMgPSBhcmdzWzBdCi0gICAgICAgIHdpdGggd2No
ZWNrOgotICAgICAgICAgICAgcmV0dXJuIGZ1bmMoKmFyZ3NbMTpdLCAqKmt3YXJncykKLQotCi1j
bGFzcyBSZWNvcmRlZFdhcm5pbmcob2JqZWN0KToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbWVz
c2FnZSwgY2F0ZWdvcnksIGZpbGVuYW1lLCBsaW5lbm8sIGZpbGUsIGxpbmUpOgotICAgICAgICBz
ZWxmLm1lc3NhZ2UgPSBtZXNzYWdlCi0gICAgICAgIHNlbGYuY2F0ZWdvcnkgPSBjYXRlZ29yeQot
ICAgICAgICBzZWxmLmZpbGVuYW1lID0gZmlsZW5hbWUKLSAgICAgICAgc2VsZi5saW5lbm8gPSBs
aW5lbm8KLSAgICAgICAgc2VsZi5maWxlID0gZmlsZQotICAgICAgICBzZWxmLmxpbmUgPSBsaW5l
Ci0KLQotY2xhc3MgV2FybmluZ3NSZWNvcmRlcihvYmplY3QpOgotICAgICIiIkEgY29udGV4dCBt
YW5hZ2VyIHRvIHJlY29yZCByYWlzZWQgd2FybmluZ3MuCi0KLSAgICBBZGFwdGVkIGZyb20gYHdh
cm5pbmdzLmNhdGNoX3dhcm5pbmdzYC4KLSAgICAiIiIKLQotICAgIGRlZiBfX2luaXRfXyhzZWxm
LCBtb2R1bGU9Tm9uZSk6Ci0gICAgICAgIHNlbGYuX21vZHVsZSA9IHN5cy5tb2R1bGVzWyd3YXJu
aW5ncyddIGlmIG1vZHVsZSBpcyBOb25lIGVsc2UgbW9kdWxlCi0gICAgICAgIHNlbGYuX2VudGVy
ZWQgPSBGYWxzZQotICAgICAgICBzZWxmLl9saXN0ID0gW10KLQotICAgIEBwcm9wZXJ0eQotICAg
IGRlZiBsaXN0KHNlbGYpOgotICAgICAgICAiIiJUaGUgbGlzdCBvZiByZWNvcmRlZCB3YXJuaW5n
cy4iIiIKLSAgICAgICAgcmV0dXJuIHNlbGYuX2xpc3QKLQotICAgIGRlZiBfX2dldGl0ZW1fXyhz
ZWxmLCBpKToKLSAgICAgICAgIiIiR2V0IGEgcmVjb3JkZWQgd2FybmluZyBieSBpbmRleC4iIiIK
LSAgICAgICAgcmV0dXJuIHNlbGYuX2xpc3RbaV0KLQotICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToK
LSAgICAgICAgIiIiSXRlcmF0ZSB0aHJvdWdoIHRoZSByZWNvcmRlZCB3YXJuaW5ncy4iIiIKLSAg
ICAgICAgcmV0dXJuIGl0ZXIoc2VsZi5fbGlzdCkKLQotICAgIGRlZiBfX2xlbl9fKHNlbGYpOgot
ICAgICAgICAiIiJUaGUgbnVtYmVyIG9mIHJlY29yZGVkIHdhcm5pbmdzLiIiIgotICAgICAgICBy
ZXR1cm4gbGVuKHNlbGYuX2xpc3QpCi0KLSAgICBkZWYgcG9wKHNlbGYsIGNscz1XYXJuaW5nKToK
LSAgICAgICAgIiIiUG9wIHRoZSBmaXJzdCByZWNvcmRlZCB3YXJuaW5nLCByYWlzZSBleGNlcHRp
b24gaWYgbm90IGV4aXN0cy4iIiIKLSAgICAgICAgZm9yIGksIHcgaW4gZW51bWVyYXRlKHNlbGYu
X2xpc3QpOgotICAgICAgICAgICAgaWYgaXNzdWJjbGFzcyh3LmNhdGVnb3J5LCBjbHMpOgotICAg
ICAgICAgICAgICAgIHJldHVybiBzZWxmLl9saXN0LnBvcChpKQotICAgICAgICBfX3RyYWNlYmFj
a2hpZGVfXyA9IFRydWUKLSAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoIiVyIG5vdCBmb3Vu
ZCBpbiB3YXJuaW5nIGxpc3QiICUgY2xzKQotCi0gICAgZGVmIGNsZWFyKHNlbGYpOgotICAgICAg
ICAiIiJDbGVhciB0aGUgbGlzdCBvZiByZWNvcmRlZCB3YXJuaW5ncy4iIiIKLSAgICAgICAgc2Vs
Zi5fbGlzdFs6XSA9IFtdCi0KLSAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgotICAgICAgICBpZiBz
ZWxmLl9lbnRlcmVkOgotICAgICAgICAgICAgX190cmFjZWJhY2toaWRlX18gPSBUcnVlCi0gICAg
ICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIkNhbm5vdCBlbnRlciAlciB0d2ljZSIgJSBzZWxm
KQotICAgICAgICBzZWxmLl9lbnRlcmVkID0gVHJ1ZQotICAgICAgICBzZWxmLl9maWx0ZXJzID0g
c2VsZi5fbW9kdWxlLmZpbHRlcnMKLSAgICAgICAgc2VsZi5fbW9kdWxlLmZpbHRlcnMgPSBzZWxm
Ll9maWx0ZXJzWzpdCi0gICAgICAgIHNlbGYuX3Nob3d3YXJuaW5nID0gc2VsZi5fbW9kdWxlLnNo
b3d3YXJuaW5nCi0KLSAgICAgICAgZGVmIHNob3d3YXJuaW5nKG1lc3NhZ2UsIGNhdGVnb3J5LCBm
aWxlbmFtZSwgbGluZW5vLAotICAgICAgICAgICAgICAgICAgICAgICAgZmlsZT1Ob25lLCBsaW5l
PU5vbmUpOgotICAgICAgICAgICAgc2VsZi5fbGlzdC5hcHBlbmQoUmVjb3JkZWRXYXJuaW5nKAot
ICAgICAgICAgICAgICAgIG1lc3NhZ2UsIGNhdGVnb3J5LCBmaWxlbmFtZSwgbGluZW5vLCBmaWxl
LCBsaW5lKSkKLQotICAgICAgICAgICAgIyBzdGlsbCBwZXJmb3JtIG9sZCBzaG93d2FybmluZyBm
dW5jdGlvbmFsaXR5Ci0gICAgICAgICAgICBzZWxmLl9zaG93d2FybmluZygKLSAgICAgICAgICAg
ICAgICBtZXNzYWdlLCBjYXRlZ29yeSwgZmlsZW5hbWUsIGxpbmVubywgZmlsZT1maWxlLCBsaW5l
PWxpbmUpCi0KLSAgICAgICAgc2VsZi5fbW9kdWxlLnNob3d3YXJuaW5nID0gc2hvd3dhcm5pbmcK
LQotICAgICAgICAjIGFsbG93IHRoZSBzYW1lIHdhcm5pbmcgdG8gYmUgcmFpc2VkIG1vcmUgdGhh
biBvbmNlCi0KLSAgICAgICAgc2VsZi5fbW9kdWxlLnNpbXBsZWZpbHRlcignYWx3YXlzJykKLSAg
ICAgICAgcmV0dXJuIHNlbGYKLQotICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqZXhjX2luZm8pOgot
ICAgICAgICBpZiBub3Qgc2VsZi5fZW50ZXJlZDoKLSAgICAgICAgICAgIF9fdHJhY2ViYWNraGlk
ZV9fID0gVHJ1ZQotICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJDYW5ub3QgZXhpdCAl
ciB3aXRob3V0IGVudGVyaW5nIGZpcnN0IiAlIHNlbGYpCi0gICAgICAgIHNlbGYuX21vZHVsZS5m
aWx0ZXJzID0gc2VsZi5fZmlsdGVycwotICAgICAgICBzZWxmLl9tb2R1bGUuc2hvd3dhcm5pbmcg
PSBzZWxmLl9zaG93d2FybmluZwotCi0KLWNsYXNzIFdhcm5pbmdzQ2hlY2tlcihXYXJuaW5nc1Jl
Y29yZGVyKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgZXhwZWN0ZWRfd2FybmluZz1Ob25lLCBt
b2R1bGU9Tm9uZSk6Ci0gICAgICAgIHN1cGVyKFdhcm5pbmdzQ2hlY2tlciwgc2VsZikuX19pbml0
X18obW9kdWxlPW1vZHVsZSkKLQotICAgICAgICBtc2cgPSAoImV4Y2VwdGlvbnMgbXVzdCBiZSBv
bGQtc3R5bGUgY2xhc3NlcyBvciAiCi0gICAgICAgICAgICAgICAiZGVyaXZlZCBmcm9tIFdhcm5p
bmcsIG5vdCAlcyIpCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoZXhwZWN0ZWRfd2FybmluZywgdHVw
bGUpOgotICAgICAgICAgICAgZm9yIGV4YyBpbiBleHBlY3RlZF93YXJuaW5nOgotICAgICAgICAg
ICAgICAgIGlmIG5vdCBpbnNwZWN0LmlzY2xhc3MoZXhjKToKLSAgICAgICAgICAgICAgICAgICAg
cmFpc2UgVHlwZUVycm9yKG1zZyAlIHR5cGUoZXhjKSkKLSAgICAgICAgZWxpZiBpbnNwZWN0Lmlz
Y2xhc3MoZXhwZWN0ZWRfd2FybmluZyk6Ci0gICAgICAgICAgICBleHBlY3RlZF93YXJuaW5nID0g
KGV4cGVjdGVkX3dhcm5pbmcsKQotICAgICAgICBlbGlmIGV4cGVjdGVkX3dhcm5pbmcgaXMgbm90
IE5vbmU6Ci0gICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IobXNnICUgdHlwZShleHBlY3RlZF93
YXJuaW5nKSkKLQotICAgICAgICBzZWxmLmV4cGVjdGVkX3dhcm5pbmcgPSBleHBlY3RlZF93YXJu
aW5nCi0KLSAgICBkZWYgX19leGl0X18oc2VsZiwgKmV4Y19pbmZvKToKLSAgICAgICAgc3VwZXIo
V2FybmluZ3NDaGVja2VyLCBzZWxmKS5fX2V4aXRfXygqZXhjX2luZm8pCi0KLSAgICAgICAgIyBv
bmx5IGNoZWNrIGlmIHdlJ3JlIG5vdCBjdXJyZW50bHkgaGFuZGxpbmcgYW4gZXhjZXB0aW9uCi0g
ICAgICAgIGlmIGFsbChhIGlzIE5vbmUgZm9yIGEgaW4gZXhjX2luZm8pOgotICAgICAgICAgICAg
aWYgc2VsZi5leHBlY3RlZF93YXJuaW5nIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIGlm
IG5vdCBhbnkoci5jYXRlZ29yeSBpbiBzZWxmLmV4cGVjdGVkX3dhcm5pbmcgZm9yIHIgaW4gc2Vs
Zik6Ci0gICAgICAgICAgICAgICAgICAgIF9fdHJhY2ViYWNraGlkZV9fID0gVHJ1ZQotICAgICAg
ICAgICAgICAgICAgICBweXRlc3QuZmFpbCgiRElEIE5PVCBXQVJOIikKZGlmZiAtLWdpdCBhL1dl
YkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9yZXN1bHRsb2cu
cHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvcmVz
dWx0bG9nLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjcwZjAyMTRjOS4uMDAw
MDAwMDAwMDAKLS0tIGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9f
cHl0ZXN0L3Jlc3VsdGxvZy5weQorKysgL2Rldi9udWxsCkBAIC0xLDEwNCArMCwwIEBACi0iIiIg
bG9nIG1hY2hpbmUtcGFyc2VhYmxlIHRlc3Qgc2Vzc2lvbiByZXN1bHQgaW5mb3JtYXRpb24gaW4g
YSBwbGFpbgotdGV4dCBmaWxlLgotIiIiCi0KLWltcG9ydCBweQotaW1wb3J0IG9zCi0KLWRlZiBw
eXRlc3RfYWRkb3B0aW9uKHBhcnNlcik6Ci0gICAgZ3JvdXAgPSBwYXJzZXIuZ2V0Z3JvdXAoInRl
cm1pbmFsIHJlcG9ydGluZyIsICJyZXN1bHRsb2cgcGx1Z2luIG9wdGlvbnMiKQotICAgIGdyb3Vw
LmFkZG9wdGlvbignLS1yZXN1bHRsb2cnLCAnLS1yZXN1bHQtbG9nJywgYWN0aW9uPSJzdG9yZSIs
Ci0gICAgICAgIG1ldGF2YXI9InBhdGgiLCBkZWZhdWx0PU5vbmUsCi0gICAgICAgIGhlbHA9InBh
dGggZm9yIG1hY2hpbmUtcmVhZGFibGUgcmVzdWx0IGxvZy4iKQotCi1kZWYgcHl0ZXN0X2NvbmZp
Z3VyZShjb25maWcpOgotICAgIHJlc3VsdGxvZyA9IGNvbmZpZy5vcHRpb24ucmVzdWx0bG9nCi0g
ICAgIyBwcmV2ZW50IG9wZW5pbmcgcmVzdWx0bG9nIG9uIHNsYXZlIG5vZGVzICh4ZGlzdCkKLSAg
ICBpZiByZXN1bHRsb2cgYW5kIG5vdCBoYXNhdHRyKGNvbmZpZywgJ3NsYXZlaW5wdXQnKToKLSAg
ICAgICAgZGlybmFtZSA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgocmVzdWx0bG9n
KSkKLSAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIoZGlybmFtZSk6Ci0gICAgICAgICAgICBv
cy5tYWtlZGlycyhkaXJuYW1lKQotICAgICAgICBsb2dmaWxlID0gb3BlbihyZXN1bHRsb2csICd3
JywgMSkgIyBsaW5lIGJ1ZmZlcmVkCi0gICAgICAgIGNvbmZpZy5fcmVzdWx0bG9nID0gUmVzdWx0
TG9nKGNvbmZpZywgbG9nZmlsZSkKLSAgICAgICAgY29uZmlnLnBsdWdpbm1hbmFnZXIucmVnaXN0
ZXIoY29uZmlnLl9yZXN1bHRsb2cpCi0KLWRlZiBweXRlc3RfdW5jb25maWd1cmUoY29uZmlnKToK
LSAgICByZXN1bHRsb2cgPSBnZXRhdHRyKGNvbmZpZywgJ19yZXN1bHRsb2cnLCBOb25lKQotICAg
IGlmIHJlc3VsdGxvZzoKLSAgICAgICAgcmVzdWx0bG9nLmxvZ2ZpbGUuY2xvc2UoKQotICAgICAg
ICBkZWwgY29uZmlnLl9yZXN1bHRsb2cKLSAgICAgICAgY29uZmlnLnBsdWdpbm1hbmFnZXIudW5y
ZWdpc3RlcihyZXN1bHRsb2cpCi0KLWRlZiBnZW5lcmljX3BhdGgoaXRlbSk6Ci0gICAgY2hhaW4g
PSBpdGVtLmxpc3RjaGFpbigpCi0gICAgZ3BhdGggPSBbY2hhaW5bMF0ubmFtZV0KLSAgICBmc3Bh
dGggPSBjaGFpblswXS5mc3BhdGgKLSAgICBmc3BhcnQgPSBGYWxzZQotICAgIGZvciBub2RlIGlu
IGNoYWluWzE6XToKLSAgICAgICAgbmV3ZnNwYXRoID0gbm9kZS5mc3BhdGgKLSAgICAgICAgaWYg
bmV3ZnNwYXRoID09IGZzcGF0aDoKLSAgICAgICAgICAgIGlmIGZzcGFydDoKLSAgICAgICAgICAg
ICAgICBncGF0aC5hcHBlbmQoJzonKQotICAgICAgICAgICAgICAgIGZzcGFydCA9IEZhbHNlCi0g
ICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGdwYXRoLmFwcGVuZCgnLicpCi0gICAg
ICAgIGVsc2U6Ci0gICAgICAgICAgICBncGF0aC5hcHBlbmQoJy8nKQotICAgICAgICAgICAgZnNw
YXJ0ID0gVHJ1ZQotICAgICAgICBuYW1lID0gbm9kZS5uYW1lCi0gICAgICAgIGlmIG5hbWVbMF0g
aW4gJyhbJzoKLSAgICAgICAgICAgIGdwYXRoLnBvcCgpCi0gICAgICAgIGdwYXRoLmFwcGVuZChu
YW1lKQotICAgICAgICBmc3BhdGggPSBuZXdmc3BhdGgKLSAgICByZXR1cm4gJycuam9pbihncGF0
aCkKLQotY2xhc3MgUmVzdWx0TG9nKG9iamVjdCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGNv
bmZpZywgbG9nZmlsZSk6Ci0gICAgICAgIHNlbGYuY29uZmlnID0gY29uZmlnCi0gICAgICAgIHNl
bGYubG9nZmlsZSA9IGxvZ2ZpbGUgIyBwcmVmZXJhYmx5IGxpbmUgYnVmZmVyZWQKLQotICAgIGRl
ZiB3cml0ZV9sb2dfZW50cnkoc2VsZiwgdGVzdHBhdGgsIGxldHRlcmNvZGUsIGxvbmdyZXByKToK
LSAgICAgICAgcHkuYnVpbHRpbi5wcmludF8oIiVzICVzIiAlIChsZXR0ZXJjb2RlLCB0ZXN0cGF0
aCksIGZpbGU9c2VsZi5sb2dmaWxlKQotICAgICAgICBmb3IgbGluZSBpbiBsb25ncmVwci5zcGxp
dGxpbmVzKCk6Ci0gICAgICAgICAgICBweS5idWlsdGluLnByaW50XygiICVzIiAlIGxpbmUsIGZp
bGU9c2VsZi5sb2dmaWxlKQotCi0gICAgZGVmIGxvZ19vdXRjb21lKHNlbGYsIHJlcG9ydCwgbGV0
dGVyY29kZSwgbG9uZ3JlcHIpOgotICAgICAgICB0ZXN0cGF0aCA9IGdldGF0dHIocmVwb3J0LCAn
bm9kZWlkJywgTm9uZSkKLSAgICAgICAgaWYgdGVzdHBhdGggaXMgTm9uZToKLSAgICAgICAgICAg
IHRlc3RwYXRoID0gcmVwb3J0LmZzcGF0aAotICAgICAgICBzZWxmLndyaXRlX2xvZ19lbnRyeSh0
ZXN0cGF0aCwgbGV0dGVyY29kZSwgbG9uZ3JlcHIpCi0KLSAgICBkZWYgcHl0ZXN0X3J1bnRlc3Rf
bG9ncmVwb3J0KHNlbGYsIHJlcG9ydCk6Ci0gICAgICAgIGlmIHJlcG9ydC53aGVuICE9ICJjYWxs
IiBhbmQgcmVwb3J0LnBhc3NlZDoKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICByZXMgPSBz
ZWxmLmNvbmZpZy5ob29rLnB5dGVzdF9yZXBvcnRfdGVzdHN0YXR1cyhyZXBvcnQ9cmVwb3J0KQot
ICAgICAgICBjb2RlID0gcmVzWzFdCi0gICAgICAgIGlmIGNvZGUgPT0gJ3gnOgotICAgICAgICAg
ICAgbG9uZ3JlcHIgPSBzdHIocmVwb3J0LmxvbmdyZXByKQotICAgICAgICBlbGlmIGNvZGUgPT0g
J1gnOgotICAgICAgICAgICAgbG9uZ3JlcHIgPSAnJwotICAgICAgICBlbGlmIHJlcG9ydC5wYXNz
ZWQ6Ci0gICAgICAgICAgICBsb25ncmVwciA9ICIiCi0gICAgICAgIGVsaWYgcmVwb3J0LmZhaWxl
ZDoKLSAgICAgICAgICAgIGxvbmdyZXByID0gc3RyKHJlcG9ydC5sb25ncmVwcikKLSAgICAgICAg
ZWxpZiByZXBvcnQuc2tpcHBlZDoKLSAgICAgICAgICAgIGxvbmdyZXByID0gc3RyKHJlcG9ydC5s
b25ncmVwclsyXSkKLSAgICAgICAgc2VsZi5sb2dfb3V0Y29tZShyZXBvcnQsIGNvZGUsIGxvbmdy
ZXByKQotCi0gICAgZGVmIHB5dGVzdF9jb2xsZWN0cmVwb3J0KHNlbGYsIHJlcG9ydCk6Ci0gICAg
ICAgIGlmIG5vdCByZXBvcnQucGFzc2VkOgotICAgICAgICAgICAgaWYgcmVwb3J0LmZhaWxlZDoK
LSAgICAgICAgICAgICAgICBjb2RlID0gIkYiCi0gICAgICAgICAgICAgICAgbG9uZ3JlcHIgPSBz
dHIocmVwb3J0LmxvbmdyZXByKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBh
c3NlcnQgcmVwb3J0LnNraXBwZWQKLSAgICAgICAgICAgICAgICBjb2RlID0gIlMiCi0gICAgICAg
ICAgICAgICAgbG9uZ3JlcHIgPSAiJXM6JWQ6ICVzIiAlIHJlcG9ydC5sb25ncmVwcgotICAgICAg
ICAgICAgc2VsZi5sb2dfb3V0Y29tZShyZXBvcnQsIGNvZGUsIGxvbmdyZXByKQotCi0gICAgZGVm
IHB5dGVzdF9pbnRlcm5hbGVycm9yKHNlbGYsIGV4Y3JlcHIpOgotICAgICAgICByZXByY3Jhc2gg
PSBnZXRhdHRyKGV4Y3JlcHIsICdyZXByY3Jhc2gnLCBOb25lKQotICAgICAgICBwYXRoID0gZ2V0
YXR0cihyZXByY3Jhc2gsICJwYXRoIiwgTm9uZSkKLSAgICAgICAgaWYgcGF0aCBpcyBOb25lOgot
ICAgICAgICAgICAgcGF0aCA9ICJjd2Q6JXMiICUgcHkucGF0aC5sb2NhbCgpCi0gICAgICAgIHNl
bGYud3JpdGVfbG9nX2VudHJ5KHBhdGgsICchJywgc3RyKGV4Y3JlcHIpKQpkaWZmIC0tZ2l0IGEv
V2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L3J1bm5lci5w
eSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9ydW5u
ZXIucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkZTk0YzhjODllLi4wMDAwMDAw
MDAwMAotLS0gYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRl
c3QvcnVubmVyLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNTE1ICswLDAgQEAKLSIiIiBiYXNpYyBj
b2xsZWN0IGFuZCBydW50ZXN0IHByb3RvY29sIGltcGxlbWVudGF0aW9ucyAiIiIKLWltcG9ydCBi
ZGIKLWltcG9ydCBzeXMKLWZyb20gdGltZSBpbXBvcnQgdGltZQotCi1pbXBvcnQgcHkKLWltcG9y
dCBweXRlc3QKLWZyb20gX3B5dGVzdC5fY29kZS5jb2RlIGltcG9ydCBUZXJtaW5hbFJlcHIsIEV4
Y2VwdGlvbkluZm8KLQotCi1kZWYgcHl0ZXN0X25hbWVzcGFjZSgpOgotICAgIHJldHVybiB7Ci0g
ICAgICAgICdmYWlsJyAgICAgICAgIDogZmFpbCwKLSAgICAgICAgJ3NraXAnICAgICAgICAgOiBz
a2lwLAotICAgICAgICAnaW1wb3J0b3Jza2lwJyA6IGltcG9ydG9yc2tpcCwKLSAgICAgICAgJ2V4
aXQnICAgICAgICAgOiBleGl0LAotICAgIH0KLQotIwotIyBweXRlc3QgcGx1Z2luIGhvb2tzCi0K
LWRlZiBweXRlc3RfYWRkb3B0aW9uKHBhcnNlcik6Ci0gICAgZ3JvdXAgPSBwYXJzZXIuZ2V0Z3Jv
dXAoInRlcm1pbmFsIHJlcG9ydGluZyIsICJyZXBvcnRpbmciLCBhZnRlcj0iZ2VuZXJhbCIpCi0g
ICAgZ3JvdXAuYWRkb3B0aW9uKCctLWR1cmF0aW9ucycsCi0gICAgICAgICBhY3Rpb249InN0b3Jl
IiwgdHlwZT1pbnQsIGRlZmF1bHQ9Tm9uZSwgbWV0YXZhcj0iTiIsCi0gICAgICAgICBoZWxwPSJz
aG93IE4gc2xvd2VzdCBzZXR1cC90ZXN0IGR1cmF0aW9ucyAoTj0wIGZvciBhbGwpLiIpLAotCi1k
ZWYgcHl0ZXN0X3Rlcm1pbmFsX3N1bW1hcnkodGVybWluYWxyZXBvcnRlcik6Ci0gICAgZHVyYXRp
b25zID0gdGVybWluYWxyZXBvcnRlci5jb25maWcub3B0aW9uLmR1cmF0aW9ucwotICAgIGlmIGR1
cmF0aW9ucyBpcyBOb25lOgotICAgICAgICByZXR1cm4KLSAgICB0ciA9IHRlcm1pbmFscmVwb3J0
ZXIKLSAgICBkbGlzdCA9IFtdCi0gICAgZm9yIHJlcGxpc3QgaW4gdHIuc3RhdHMudmFsdWVzKCk6
Ci0gICAgICAgIGZvciByZXAgaW4gcmVwbGlzdDoKLSAgICAgICAgICAgIGlmIGhhc2F0dHIocmVw
LCAnZHVyYXRpb24nKToKLSAgICAgICAgICAgICAgICBkbGlzdC5hcHBlbmQocmVwKQotICAgIGlm
IG5vdCBkbGlzdDoKLSAgICAgICAgcmV0dXJuCi0gICAgZGxpc3Quc29ydChrZXk9bGFtYmRhIHg6
IHguZHVyYXRpb24pCi0gICAgZGxpc3QucmV2ZXJzZSgpCi0gICAgaWYgbm90IGR1cmF0aW9uczoK
LSAgICAgICAgdHIud3JpdGVfc2VwKCI9IiwgInNsb3dlc3QgdGVzdCBkdXJhdGlvbnMiKQotICAg
IGVsc2U6Ci0gICAgICAgIHRyLndyaXRlX3NlcCgiPSIsICJzbG93ZXN0ICVzIHRlc3QgZHVyYXRp
b25zIiAlIGR1cmF0aW9ucykKLSAgICAgICAgZGxpc3QgPSBkbGlzdFs6ZHVyYXRpb25zXQotCi0g
ICAgZm9yIHJlcCBpbiBkbGlzdDoKLSAgICAgICAgbm9kZWlkID0gcmVwLm5vZGVpZC5yZXBsYWNl
KCI6OigpOjoiLCAiOjoiKQotICAgICAgICB0ci53cml0ZV9saW5lKCIlMDIuMmZzICUtOHMgJXMi
ICUKLSAgICAgICAgICAgIChyZXAuZHVyYXRpb24sIHJlcC53aGVuLCBub2RlaWQpKQotCi1kZWYg
cHl0ZXN0X3Nlc3Npb25zdGFydChzZXNzaW9uKToKLSAgICBzZXNzaW9uLl9zZXR1cHN0YXRlID0g
U2V0dXBTdGF0ZSgpCi1kZWYgcHl0ZXN0X3Nlc3Npb25maW5pc2goc2Vzc2lvbik6Ci0gICAgc2Vz
c2lvbi5fc2V0dXBzdGF0ZS50ZWFyZG93bl9hbGwoKQotCi1jbGFzcyBOb2RlSW5mbzoKLSAgICBk
ZWYgX19pbml0X18oc2VsZiwgbG9jYXRpb24pOgotICAgICAgICBzZWxmLmxvY2F0aW9uID0gbG9j
YXRpb24KLQotZGVmIHB5dGVzdF9ydW50ZXN0X3Byb3RvY29sKGl0ZW0sIG5leHRpdGVtKToKLSAg
ICBpdGVtLmlob29rLnB5dGVzdF9ydW50ZXN0X2xvZ3N0YXJ0KAotICAgICAgICBub2RlaWQ9aXRl
bS5ub2RlaWQsIGxvY2F0aW9uPWl0ZW0ubG9jYXRpb24sCi0gICAgKQotICAgIHJ1bnRlc3Rwcm90
b2NvbChpdGVtLCBuZXh0aXRlbT1uZXh0aXRlbSkKLSAgICByZXR1cm4gVHJ1ZQotCi1kZWYgcnVu
dGVzdHByb3RvY29sKGl0ZW0sIGxvZz1UcnVlLCBuZXh0aXRlbT1Ob25lKToKLSAgICBoYXNyZXF1
ZXN0ID0gaGFzYXR0cihpdGVtLCAiX3JlcXVlc3QiKQotICAgIGlmIGhhc3JlcXVlc3QgYW5kIG5v
dCBpdGVtLl9yZXF1ZXN0OgotICAgICAgICBpdGVtLl9pbml0cmVxdWVzdCgpCi0gICAgcmVwID0g
Y2FsbF9hbmRfcmVwb3J0KGl0ZW0sICJzZXR1cCIsIGxvZykKLSAgICByZXBvcnRzID0gW3JlcF0K
LSAgICBpZiByZXAucGFzc2VkOgotICAgICAgICByZXBvcnRzLmFwcGVuZChjYWxsX2FuZF9yZXBv
cnQoaXRlbSwgImNhbGwiLCBsb2cpKQotICAgIHJlcG9ydHMuYXBwZW5kKGNhbGxfYW5kX3JlcG9y
dChpdGVtLCAidGVhcmRvd24iLCBsb2csCi0gICAgICAgIG5leHRpdGVtPW5leHRpdGVtKSkKLSAg
ICAjIGFmdGVyIGFsbCB0ZWFyZG93biBob29rcyBoYXZlIGJlZW4gY2FsbGVkCi0gICAgIyB3YW50
IGZ1bmNhcmdzIGFuZCByZXF1ZXN0IGluZm8gdG8gZ28gYXdheQotICAgIGlmIGhhc3JlcXVlc3Q6
Ci0gICAgICAgIGl0ZW0uX3JlcXVlc3QgPSBGYWxzZQotICAgICAgICBpdGVtLmZ1bmNhcmdzID0g
Tm9uZQotICAgIHJldHVybiByZXBvcnRzCi0KLWRlZiBweXRlc3RfcnVudGVzdF9zZXR1cChpdGVt
KToKLSAgICBpdGVtLnNlc3Npb24uX3NldHVwc3RhdGUucHJlcGFyZShpdGVtKQotCi1kZWYgcHl0
ZXN0X3J1bnRlc3RfY2FsbChpdGVtKToKLSAgICB0cnk6Ci0gICAgICAgIGl0ZW0ucnVudGVzdCgp
Ci0gICAgZXhjZXB0IEV4Y2VwdGlvbjoKLSAgICAgICAgIyBTdG9yZSB0cmFjZSBpbmZvIHRvIGFs
bG93IHBvc3Rtb3J0ZW0gZGVidWdnaW5nCi0gICAgICAgIHR5cGUsIHZhbHVlLCB0YiA9IHN5cy5l
eGNfaW5mbygpCi0gICAgICAgIHRiID0gdGIudGJfbmV4dCAgIyBTa2lwICp0aGlzKiBmcmFtZQot
ICAgICAgICBzeXMubGFzdF90eXBlID0gdHlwZQotICAgICAgICBzeXMubGFzdF92YWx1ZSA9IHZh
bHVlCi0gICAgICAgIHN5cy5sYXN0X3RyYWNlYmFjayA9IHRiCi0gICAgICAgIGRlbCB0YiAgIyBH
ZXQgcmlkIG9mIGl0IGluIHRoaXMgbmFtZXNwYWNlCi0gICAgICAgIHJhaXNlCi0KLWRlZiBweXRl
c3RfcnVudGVzdF90ZWFyZG93bihpdGVtLCBuZXh0aXRlbSk6Ci0gICAgaXRlbS5zZXNzaW9uLl9z
ZXR1cHN0YXRlLnRlYXJkb3duX2V4YWN0KGl0ZW0sIG5leHRpdGVtKQotCi1kZWYgcHl0ZXN0X3Jl
cG9ydF90ZXN0c3RhdHVzKHJlcG9ydCk6Ci0gICAgaWYgcmVwb3J0LndoZW4gaW4gKCJzZXR1cCIs
ICJ0ZWFyZG93biIpOgotICAgICAgICBpZiByZXBvcnQuZmFpbGVkOgotICAgICAgICAgICAgIyAg
ICAgIGNhdGVnb3J5LCBzaG9ydGxldHRlciwgdmVyYm9zZS13b3JkCi0gICAgICAgICAgICByZXR1
cm4gImVycm9yIiwgIkUiLCAiRVJST1IiCi0gICAgICAgIGVsaWYgcmVwb3J0LnNraXBwZWQ6Ci0g
ICAgICAgICAgICByZXR1cm4gInNraXBwZWQiLCAicyIsICJTS0lQUEVEIgotICAgICAgICBlbHNl
OgotICAgICAgICAgICAgcmV0dXJuICIiLCAiIiwgIiIKLQotCi0jCi0jIEltcGxlbWVudGF0aW9u
Ci0KLWRlZiBjYWxsX2FuZF9yZXBvcnQoaXRlbSwgd2hlbiwgbG9nPVRydWUsICoqa3dkcyk6Ci0g
ICAgY2FsbCA9IGNhbGxfcnVudGVzdF9ob29rKGl0ZW0sIHdoZW4sICoqa3dkcykKLSAgICBob29r
ID0gaXRlbS5paG9vawotICAgIHJlcG9ydCA9IGhvb2sucHl0ZXN0X3J1bnRlc3RfbWFrZXJlcG9y
dChpdGVtPWl0ZW0sIGNhbGw9Y2FsbCkKLSAgICBpZiBsb2c6Ci0gICAgICAgIGhvb2sucHl0ZXN0
X3J1bnRlc3RfbG9ncmVwb3J0KHJlcG9ydD1yZXBvcnQpCi0gICAgaWYgY2hlY2tfaW50ZXJhY3Rp
dmVfZXhjZXB0aW9uKGNhbGwsIHJlcG9ydCk6Ci0gICAgICAgIGhvb2sucHl0ZXN0X2V4Y2VwdGlv
bl9pbnRlcmFjdChub2RlPWl0ZW0sIGNhbGw9Y2FsbCwgcmVwb3J0PXJlcG9ydCkKLSAgICByZXR1
cm4gcmVwb3J0Ci0KLWRlZiBjaGVja19pbnRlcmFjdGl2ZV9leGNlcHRpb24oY2FsbCwgcmVwb3J0
KToKLSAgICByZXR1cm4gY2FsbC5leGNpbmZvIGFuZCBub3QgKAotICAgICAgICAgICAgICAgIGhh
c2F0dHIocmVwb3J0LCAid2FzeGZhaWwiKSBvcgotICAgICAgICAgICAgICAgIGNhbGwuZXhjaW5m
by5lcnJpc2luc3RhbmNlKHNraXAuRXhjZXB0aW9uKSBvcgotICAgICAgICAgICAgICAgIGNhbGwu
ZXhjaW5mby5lcnJpc2luc3RhbmNlKGJkYi5CZGJRdWl0KSkKLQotZGVmIGNhbGxfcnVudGVzdF9o
b29rKGl0ZW0sIHdoZW4sICoqa3dkcyk6Ci0gICAgaG9va25hbWUgPSAicHl0ZXN0X3J1bnRlc3Rf
IiArIHdoZW4KLSAgICBpaG9vayA9IGdldGF0dHIoaXRlbS5paG9vaywgaG9va25hbWUpCi0gICAg
cmV0dXJuIENhbGxJbmZvKGxhbWJkYTogaWhvb2soaXRlbT1pdGVtLCAqKmt3ZHMpLCB3aGVuPXdo
ZW4pCi0KLWNsYXNzIENhbGxJbmZvOgotICAgICIiIiBSZXN1bHQvRXhjZXB0aW9uIGluZm8gYSBm
dW5jdGlvbiBpbnZvY2F0aW9uLiAiIiIKLSAgICAjOiBOb25lIG9yIEV4Y2VwdGlvbkluZm8gb2Jq
ZWN0LgotICAgIGV4Y2luZm8gPSBOb25lCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGZ1bmMsIHdo
ZW4pOgotICAgICAgICAjOiBjb250ZXh0IG9mIGludm9jYXRpb246IG9uZSBvZiAic2V0dXAiLCAi
Y2FsbCIsCi0gICAgICAgICM6ICJ0ZWFyZG93biIsICJtZW1vY29sbGVjdCIKLSAgICAgICAgc2Vs
Zi53aGVuID0gd2hlbgotICAgICAgICBzZWxmLnN0YXJ0ID0gdGltZSgpCi0gICAgICAgIHRyeToK
LSAgICAgICAgICAgIHNlbGYucmVzdWx0ID0gZnVuYygpCi0gICAgICAgIGV4Y2VwdCBLZXlib2Fy
ZEludGVycnVwdDoKLSAgICAgICAgICAgIHNlbGYuc3RvcCA9IHRpbWUoKQotICAgICAgICAgICAg
cmFpc2UKLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgc2VsZi5leGNpbmZvID0gRXhjZXB0
aW9uSW5mbygpCi0gICAgICAgIHNlbGYuc3RvcCA9IHRpbWUoKQotCi0gICAgZGVmIF9fcmVwcl9f
KHNlbGYpOgotICAgICAgICBpZiBzZWxmLmV4Y2luZm86Ci0gICAgICAgICAgICBzdGF0dXMgPSAi
ZXhjZXB0aW9uOiAlcyIgJSBzdHIoc2VsZi5leGNpbmZvLnZhbHVlKQotICAgICAgICBlbHNlOgot
ICAgICAgICAgICAgc3RhdHVzID0gInJlc3VsdDogJXIiICUgKHNlbGYucmVzdWx0LCkKLSAgICAg
ICAgcmV0dXJuICI8Q2FsbEluZm8gd2hlbj0lciAlcz4iICUgKHNlbGYud2hlbiwgc3RhdHVzKQot
Ci1kZWYgZ2V0c2xhdmVpbmZvbGluZShub2RlKToKLSAgICB0cnk6Ci0gICAgICAgIHJldHVybiBu
b2RlLl9zbGF2ZWluZm9jYWNoZQotICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAg
ZCA9IG5vZGUuc2xhdmVpbmZvCi0gICAgICAgIHZlciA9ICIlcy4lcy4lcyIgJSBkWyd2ZXJzaW9u
X2luZm8nXVs6M10KLSAgICAgICAgbm9kZS5fc2xhdmVpbmZvY2FjaGUgPSBzID0gIlslc10gJXMg
LS0gUHl0aG9uICVzICVzIiAlICgKLSAgICAgICAgICAgIGRbJ2lkJ10sIGRbJ3N5c3BsYXRmb3Jt
J10sIHZlciwgZFsnZXhlY3V0YWJsZSddKQotICAgICAgICByZXR1cm4gcwotCi1jbGFzcyBCYXNl
UmVwb3J0KG9iamVjdCk6Ci0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgKiprdyk6Ci0gICAgICAg
IHNlbGYuX19kaWN0X18udXBkYXRlKGt3KQotCi0gICAgZGVmIHRvdGVybWluYWwoc2VsZiwgb3V0
KToKLSAgICAgICAgaWYgaGFzYXR0cihzZWxmLCAnbm9kZScpOgotICAgICAgICAgICAgb3V0Lmxp
bmUoZ2V0c2xhdmVpbmZvbGluZShzZWxmLm5vZGUpKQotCi0gICAgICAgIGxvbmdyZXByID0gc2Vs
Zi5sb25ncmVwcgotICAgICAgICBpZiBsb25ncmVwciBpcyBOb25lOgotICAgICAgICAgICAgcmV0
dXJuCi0KLSAgICAgICAgaWYgaGFzYXR0cihsb25ncmVwciwgJ3RvdGVybWluYWwnKToKLSAgICAg
ICAgICAgIGxvbmdyZXByLnRvdGVybWluYWwob3V0KQotICAgICAgICBlbHNlOgotICAgICAgICAg
ICAgdHJ5OgotICAgICAgICAgICAgICAgIG91dC5saW5lKGxvbmdyZXByKQotICAgICAgICAgICAg
ZXhjZXB0IFVuaWNvZGVFbmNvZGVFcnJvcjoKLSAgICAgICAgICAgICAgICBvdXQubGluZSgiPHVu
cHJpbnRhYmxlIGxvbmdyZXByPiIpCi0KLSAgICBkZWYgZ2V0X3NlY3Rpb25zKHNlbGYsIHByZWZp
eCk6Ci0gICAgICAgIGZvciBuYW1lLCBjb250ZW50IGluIHNlbGYuc2VjdGlvbnM6Ci0gICAgICAg
ICAgICBpZiBuYW1lLnN0YXJ0c3dpdGgocHJlZml4KToKLSAgICAgICAgICAgICAgICB5aWVsZCBw
cmVmaXgsIGNvbnRlbnQKLQotICAgIHBhc3NlZCA9IHByb3BlcnR5KGxhbWJkYSB4OiB4Lm91dGNv
bWUgPT0gInBhc3NlZCIpCi0gICAgZmFpbGVkID0gcHJvcGVydHkobGFtYmRhIHg6IHgub3V0Y29t
ZSA9PSAiZmFpbGVkIikKLSAgICBza2lwcGVkID0gcHJvcGVydHkobGFtYmRhIHg6IHgub3V0Y29t
ZSA9PSAic2tpcHBlZCIpCi0KLSAgICBAcHJvcGVydHkKLSAgICBkZWYgZnNwYXRoKHNlbGYpOgot
ICAgICAgICByZXR1cm4gc2VsZi5ub2RlaWQuc3BsaXQoIjo6IilbMF0KLQotZGVmIHB5dGVzdF9y
dW50ZXN0X21ha2VyZXBvcnQoaXRlbSwgY2FsbCk6Ci0gICAgd2hlbiA9IGNhbGwud2hlbgotICAg
IGR1cmF0aW9uID0gY2FsbC5zdG9wLWNhbGwuc3RhcnQKLSAgICBrZXl3b3JkcyA9IGRpY3QoWyh4
LDEpIGZvciB4IGluIGl0ZW0ua2V5d29yZHNdKQotICAgIGV4Y2luZm8gPSBjYWxsLmV4Y2luZm8K
LSAgICBzZWN0aW9ucyA9IFtdCi0gICAgaWYgbm90IGNhbGwuZXhjaW5mbzoKLSAgICAgICAgb3V0
Y29tZSA9ICJwYXNzZWQiCi0gICAgICAgIGxvbmdyZXByID0gTm9uZQotICAgIGVsc2U6Ci0gICAg
ICAgIGlmIG5vdCBpc2luc3RhbmNlKGV4Y2luZm8sIEV4Y2VwdGlvbkluZm8pOgotICAgICAgICAg
ICAgb3V0Y29tZSA9ICJmYWlsZWQiCi0gICAgICAgICAgICBsb25ncmVwciA9IGV4Y2luZm8KLSAg
ICAgICAgZWxpZiBleGNpbmZvLmVycmlzaW5zdGFuY2UocHl0ZXN0LnNraXAuRXhjZXB0aW9uKToK
LSAgICAgICAgICAgIG91dGNvbWUgPSAic2tpcHBlZCIKLSAgICAgICAgICAgIHIgPSBleGNpbmZv
Ll9nZXRyZXByY3Jhc2goKQotICAgICAgICAgICAgbG9uZ3JlcHIgPSAoc3RyKHIucGF0aCksIHIu
bGluZW5vLCByLm1lc3NhZ2UpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBvdXRjb21lID0g
ImZhaWxlZCIKLSAgICAgICAgICAgIGlmIGNhbGwud2hlbiA9PSAiY2FsbCI6Ci0gICAgICAgICAg
ICAgICAgbG9uZ3JlcHIgPSBpdGVtLnJlcHJfZmFpbHVyZShleGNpbmZvKQotICAgICAgICAgICAg
ZWxzZTogIyBleGNlcHRpb24gaW4gc2V0dXAgb3IgdGVhcmRvd24KLSAgICAgICAgICAgICAgICBs
b25ncmVwciA9IGl0ZW0uX3JlcHJfZmFpbHVyZV9weShleGNpbmZvLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1pdGVtLmNvbmZpZy5vcHRpb24udGJz
dHlsZSkKLSAgICBmb3IgcndoZW4sIGtleSwgY29udGVudCBpbiBpdGVtLl9yZXBvcnRfc2VjdGlv
bnM6Ci0gICAgICAgIHNlY3Rpb25zLmFwcGVuZCgoIkNhcHR1cmVkICVzICVzIiAlKGtleSwgcndo
ZW4pLCBjb250ZW50KSkKLSAgICByZXR1cm4gVGVzdFJlcG9ydChpdGVtLm5vZGVpZCwgaXRlbS5s
b2NhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICBrZXl3b3Jkcywgb3V0Y29tZSwgbG9uZ3Jl
cHIsIHdoZW4sCi0gICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbnMsIGR1cmF0aW9uKQotCi1j
bGFzcyBUZXN0UmVwb3J0KEJhc2VSZXBvcnQpOgotICAgICIiIiBCYXNpYyB0ZXN0IHJlcG9ydCBv
YmplY3QgKGFsc28gdXNlZCBmb3Igc2V0dXAgYW5kIHRlYXJkb3duIGNhbGxzIGlmCi0gICAgdGhl
eSBmYWlsKS4KLSAgICAiIiIKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbm9kZWlkLCBsb2NhdGlv
biwga2V5d29yZHMsIG91dGNvbWUsCi0gICAgICAgICAgICAgICAgIGxvbmdyZXByLCB3aGVuLCBz
ZWN0aW9ucz0oKSwgZHVyYXRpb249MCwgKipleHRyYSk6Ci0gICAgICAgICM6IG5vcm1hbGl6ZWQg
Y29sbGVjdGlvbiBub2RlIGlkCi0gICAgICAgIHNlbGYubm9kZWlkID0gbm9kZWlkCi0KLSAgICAg
ICAgIzogYSAoZmlsZXN5c3RlbXBhdGgsIGxpbmVubywgZG9tYWluaW5mbykgdHVwbGUgaW5kaWNh
dGluZyB0aGUKLSAgICAgICAgIzogYWN0dWFsIGxvY2F0aW9uIG9mIGEgdGVzdCBpdGVtIC0gaXQg
bWlnaHQgYmUgZGlmZmVyZW50IGZyb20gdGhlCi0gICAgICAgICM6IGNvbGxlY3RlZCBvbmUgZS5n
LiBpZiBhIG1ldGhvZCBpcyBpbmhlcml0ZWQgZnJvbSBhIGRpZmZlcmVudCBtb2R1bGUuCi0gICAg
ICAgIHNlbGYubG9jYXRpb24gPSBsb2NhdGlvbgotCi0gICAgICAgICM6IGEgbmFtZSAtPiB2YWx1
ZSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgYWxsIGtleXdvcmRzIGFuZAotICAgICAgICAjOiBtYXJr
ZXJzIGFzc29jaWF0ZWQgd2l0aCBhIHRlc3QgaW52b2NhdGlvbi4KLSAgICAgICAgc2VsZi5rZXl3
b3JkcyA9IGtleXdvcmRzCi0KLSAgICAgICAgIzogdGVzdCBvdXRjb21lLCBhbHdheXMgb25lIG9m
ICJwYXNzZWQiLCAiZmFpbGVkIiwgInNraXBwZWQiLgotICAgICAgICBzZWxmLm91dGNvbWUgPSBv
dXRjb21lCi0KLSAgICAgICAgIzogTm9uZSBvciBhIGZhaWx1cmUgcmVwcmVzZW50YXRpb24uCi0g
ICAgICAgIHNlbGYubG9uZ3JlcHIgPSBsb25ncmVwcgotCi0gICAgICAgICM6IG9uZSBvZiAnc2V0
dXAnLCAnY2FsbCcsICd0ZWFyZG93bicgdG8gaW5kaWNhdGUgcnVudGVzdCBwaGFzZS4KLSAgICAg
ICAgc2VsZi53aGVuID0gd2hlbgotCi0gICAgICAgICM6IGxpc3Qgb2YgKHNlY25hbWUsIGRhdGEp
IGV4dHJhIGluZm9ybWF0aW9uIHdoaWNoIG5lZWRzIHRvCi0gICAgICAgICM6IG1hcnNoYWxsYWJs
ZQotICAgICAgICBzZWxmLnNlY3Rpb25zID0gbGlzdChzZWN0aW9ucykKLQotICAgICAgICAjOiB0
aW1lIGl0IHRvb2sgdG8gcnVuIGp1c3QgdGhlIHRlc3QKLSAgICAgICAgc2VsZi5kdXJhdGlvbiA9
IGR1cmF0aW9uCi0KLSAgICAgICAgc2VsZi5fX2RpY3RfXy51cGRhdGUoZXh0cmEpCi0KLSAgICBk
ZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIHJldHVybiAiPFRlc3RSZXBvcnQgJXIgd2hlbj0l
ciBvdXRjb21lPSVyPiIgJSAoCi0gICAgICAgICAgICBzZWxmLm5vZGVpZCwgc2VsZi53aGVuLCBz
ZWxmLm91dGNvbWUpCi0KLWNsYXNzIFRlYXJkb3duRXJyb3JSZXBvcnQoQmFzZVJlcG9ydCk6Ci0g
ICAgb3V0Y29tZSA9ICJmYWlsZWQiCi0gICAgd2hlbiA9ICJ0ZWFyZG93biIKLSAgICBkZWYgX19p
bml0X18oc2VsZiwgbG9uZ3JlcHIsICoqZXh0cmEpOgotICAgICAgICBzZWxmLmxvbmdyZXByID0g
bG9uZ3JlcHIKLSAgICAgICAgc2VsZi5zZWN0aW9ucyA9IFtdCi0gICAgICAgIHNlbGYuX19kaWN0
X18udXBkYXRlKGV4dHJhKQotCi1kZWYgcHl0ZXN0X21ha2VfY29sbGVjdF9yZXBvcnQoY29sbGVj
dG9yKToKLSAgICBjYWxsID0gQ2FsbEluZm8oY29sbGVjdG9yLl9tZW1vY29sbGVjdCwgIm1lbW9j
b2xsZWN0IikKLSAgICBsb25ncmVwciA9IE5vbmUKLSAgICBpZiBub3QgY2FsbC5leGNpbmZvOgot
ICAgICAgICBvdXRjb21lID0gInBhc3NlZCIKLSAgICBlbHNlOgotICAgICAgICBmcm9tIF9weXRl
c3QgaW1wb3J0IG5vc2UKLSAgICAgICAgc2tpcF9leGNlcHRpb25zID0gKFNraXBwZWQsKSArIG5v
c2UuZ2V0X3NraXBfZXhjZXB0aW9ucygpCi0gICAgICAgIGlmIGNhbGwuZXhjaW5mby5lcnJpc2lu
c3RhbmNlKHNraXBfZXhjZXB0aW9ucyk6Ci0gICAgICAgICAgICBvdXRjb21lID0gInNraXBwZWQi
Ci0gICAgICAgICAgICByID0gY29sbGVjdG9yLl9yZXByX2ZhaWx1cmVfcHkoY2FsbC5leGNpbmZv
LCAibGluZSIpLnJlcHJjcmFzaAotICAgICAgICAgICAgbG9uZ3JlcHIgPSAoc3RyKHIucGF0aCks
IHIubGluZW5vLCByLm1lc3NhZ2UpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBvdXRjb21l
ID0gImZhaWxlZCIKLSAgICAgICAgICAgIGVycm9yaW5mbyA9IGNvbGxlY3Rvci5yZXByX2ZhaWx1
cmUoY2FsbC5leGNpbmZvKQotICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIoZXJyb3JpbmZvLCAi
dG90ZXJtaW5hbCIpOgotICAgICAgICAgICAgICAgIGVycm9yaW5mbyA9IENvbGxlY3RFcnJvclJl
cHIoZXJyb3JpbmZvKQotICAgICAgICAgICAgbG9uZ3JlcHIgPSBlcnJvcmluZm8KLSAgICByZXAg
PSBDb2xsZWN0UmVwb3J0KGNvbGxlY3Rvci5ub2RlaWQsIG91dGNvbWUsIGxvbmdyZXByLAotICAg
ICAgICBnZXRhdHRyKGNhbGwsICdyZXN1bHQnLCBOb25lKSkKLSAgICByZXAuY2FsbCA9IGNhbGwg
ICMgc2VlIGNvbGxlY3Rfb25lX25vZGUKLSAgICByZXR1cm4gcmVwCi0KLQotY2xhc3MgQ29sbGVj
dFJlcG9ydChCYXNlUmVwb3J0KToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbm9kZWlkLCBvdXRj
b21lLCBsb25ncmVwciwgcmVzdWx0LAotICAgICAgICAgICAgICAgICBzZWN0aW9ucz0oKSwgKipl
eHRyYSk6Ci0gICAgICAgIHNlbGYubm9kZWlkID0gbm9kZWlkCi0gICAgICAgIHNlbGYub3V0Y29t
ZSA9IG91dGNvbWUKLSAgICAgICAgc2VsZi5sb25ncmVwciA9IGxvbmdyZXByCi0gICAgICAgIHNl
bGYucmVzdWx0ID0gcmVzdWx0IG9yIFtdCi0gICAgICAgIHNlbGYuc2VjdGlvbnMgPSBsaXN0KHNl
Y3Rpb25zKQotICAgICAgICBzZWxmLl9fZGljdF9fLnVwZGF0ZShleHRyYSkKLQotICAgIEBwcm9w
ZXJ0eQotICAgIGRlZiBsb2NhdGlvbihzZWxmKToKLSAgICAgICAgcmV0dXJuIChzZWxmLmZzcGF0
aCwgTm9uZSwgc2VsZi5mc3BhdGgpCi0KLSAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAg
IHJldHVybiAiPENvbGxlY3RSZXBvcnQgJXIgbGVucmVzdWx0PSVzIG91dGNvbWU9JXI+IiAlICgK
LSAgICAgICAgICAgICAgICBzZWxmLm5vZGVpZCwgbGVuKHNlbGYucmVzdWx0KSwgc2VsZi5vdXRj
b21lKQotCi1jbGFzcyBDb2xsZWN0RXJyb3JSZXByKFRlcm1pbmFsUmVwcik6Ci0gICAgZGVmIF9f
aW5pdF9fKHNlbGYsIG1zZyk6Ci0gICAgICAgIHNlbGYubG9uZ3JlcHIgPSBtc2cKLSAgICBkZWYg
dG90ZXJtaW5hbChzZWxmLCBvdXQpOgotICAgICAgICBvdXQubGluZShzZWxmLmxvbmdyZXByLCBy
ZWQ9VHJ1ZSkKLQotY2xhc3MgU2V0dXBTdGF0ZShvYmplY3QpOgotICAgICIiIiBzaGFyZWQgc3Rh
dGUgZm9yIHNldHRpbmcgdXAvdGVhcmluZyBkb3duIHRlc3QgaXRlbXMgb3IgY29sbGVjdG9ycy4g
IiIiCi0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBzZWxmLnN0YWNrID0gW10KLSAg
ICAgICAgc2VsZi5fZmluYWxpemVycyA9IHt9Ci0KLSAgICBkZWYgYWRkZmluYWxpemVyKHNlbGYs
IGZpbmFsaXplciwgY29saXRlbSk6Ci0gICAgICAgICIiIiBhdHRhY2ggYSBmaW5hbGl6ZXIgdG8g
dGhlIGdpdmVuIGNvbGl0ZW0uCi0gICAgICAgIGlmIGNvbGl0ZW0gaXMgTm9uZSwgdGhpcyB3aWxs
IGFkZCBhIGZpbmFsaXplciB0aGF0Ci0gICAgICAgIGlzIGNhbGxlZCBhdCB0aGUgZW5kIG9mIHRl
YXJkb3duX2FsbCgpLgotICAgICAgICAiIiIKLSAgICAgICAgYXNzZXJ0IGNvbGl0ZW0gYW5kIG5v
dCBpc2luc3RhbmNlKGNvbGl0ZW0sIHR1cGxlKQotICAgICAgICBhc3NlcnQgcHkuYnVpbHRpbi5j
YWxsYWJsZShmaW5hbGl6ZXIpCi0gICAgICAgICNhc3NlcnQgY29saXRlbSBpbiBzZWxmLnN0YWNr
ICAjIHNvbWUgdW5pdCB0ZXN0cyBkb24ndCBzZXR1cCBzdGFjayA6LwotICAgICAgICBzZWxmLl9m
aW5hbGl6ZXJzLnNldGRlZmF1bHQoY29saXRlbSwgW10pLmFwcGVuZChmaW5hbGl6ZXIpCi0KLSAg
ICBkZWYgX3BvcF9hbmRfdGVhcmRvd24oc2VsZik6Ci0gICAgICAgIGNvbGl0ZW0gPSBzZWxmLnN0
YWNrLnBvcCgpCi0gICAgICAgIHNlbGYuX3RlYXJkb3duX3dpdGhfZmluYWxpemF0aW9uKGNvbGl0
ZW0pCi0KLSAgICBkZWYgX2NhbGxmaW5hbGl6ZXJzKHNlbGYsIGNvbGl0ZW0pOgotICAgICAgICBm
aW5hbGl6ZXJzID0gc2VsZi5fZmluYWxpemVycy5wb3AoY29saXRlbSwgTm9uZSkKLSAgICAgICAg
ZXhjID0gTm9uZQotICAgICAgICB3aGlsZSBmaW5hbGl6ZXJzOgotICAgICAgICAgICAgZmluID0g
ZmluYWxpemVycy5wb3AoKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGZpbigp
Ci0gICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgotICAgICAgICAgICAgICAgICMgWFhYIE9u
bHkgZmlyc3QgZXhjZXB0aW9uIHdpbGwgYmUgc2VlbiBieSB1c2VyLAotICAgICAgICAgICAgICAg
ICMgICAgIGlkZWFsbHkgYWxsIHNob3VsZCBiZSByZXBvcnRlZC4KLSAgICAgICAgICAgICAgICBp
ZiBleGMgaXMgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgZXhjID0gc3lzLmV4Y19pbmZvKCkK
LSAgICAgICAgaWYgZXhjOgotICAgICAgICAgICAgcHkuYnVpbHRpbi5fcmVyYWlzZSgqZXhjKQot
Ci0gICAgZGVmIF90ZWFyZG93bl93aXRoX2ZpbmFsaXphdGlvbihzZWxmLCBjb2xpdGVtKToKLSAg
ICAgICAgc2VsZi5fY2FsbGZpbmFsaXplcnMoY29saXRlbSkKLSAgICAgICAgaWYgaGFzYXR0cihj
b2xpdGVtLCAidGVhcmRvd24iKToKLSAgICAgICAgICAgIGNvbGl0ZW0udGVhcmRvd24oKQotICAg
ICAgICBmb3IgY29saXRlbSBpbiBzZWxmLl9maW5hbGl6ZXJzOgotICAgICAgICAgICAgYXNzZXJ0
IGNvbGl0ZW0gaXMgTm9uZSBvciBjb2xpdGVtIGluIHNlbGYuc3RhY2sgXAotICAgICAgICAgICAg
IG9yIGlzaW5zdGFuY2UoY29saXRlbSwgdHVwbGUpCi0KLSAgICBkZWYgdGVhcmRvd25fYWxsKHNl
bGYpOgotICAgICAgICB3aGlsZSBzZWxmLnN0YWNrOgotICAgICAgICAgICAgc2VsZi5fcG9wX2Fu
ZF90ZWFyZG93bigpCi0gICAgICAgIGZvciBrZXkgaW4gbGlzdChzZWxmLl9maW5hbGl6ZXJzKToK
LSAgICAgICAgICAgIHNlbGYuX3RlYXJkb3duX3dpdGhfZmluYWxpemF0aW9uKGtleSkKLSAgICAg
ICAgYXNzZXJ0IG5vdCBzZWxmLl9maW5hbGl6ZXJzCi0KLSAgICBkZWYgdGVhcmRvd25fZXhhY3Qo
c2VsZiwgaXRlbSwgbmV4dGl0ZW0pOgotICAgICAgICBuZWVkZWRfY29sbGVjdG9ycyA9IG5leHRp
dGVtIGFuZCBuZXh0aXRlbS5saXN0Y2hhaW4oKSBvciBbXQotICAgICAgICBzZWxmLl90ZWFyZG93
bl90b3dhcmRzKG5lZWRlZF9jb2xsZWN0b3JzKQotCi0gICAgZGVmIF90ZWFyZG93bl90b3dhcmRz
KHNlbGYsIG5lZWRlZF9jb2xsZWN0b3JzKToKLSAgICAgICAgd2hpbGUgc2VsZi5zdGFjazoKLSAg
ICAgICAgICAgIGlmIHNlbGYuc3RhY2sgPT0gbmVlZGVkX2NvbGxlY3RvcnNbOmxlbihzZWxmLnN0
YWNrKV06Ci0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIHNlbGYuX3BvcF9hbmRf
dGVhcmRvd24oKQotCi0gICAgZGVmIHByZXBhcmUoc2VsZiwgY29saXRlbSk6Ci0gICAgICAgICIi
IiBzZXR1cCBvYmplY3RzIGFsb25nIHRoZSBjb2xsZWN0b3IgY2hhaW4gdG8gdGhlIHRlc3QtbWV0
aG9kCi0gICAgICAgICAgICBhbmQgdGVhcmRvd24gcHJldmlvdXNseSBzZXR1cCBvYmplY3RzLiIi
IgotICAgICAgICBuZWVkZWRfY29sbGVjdG9ycyA9IGNvbGl0ZW0ubGlzdGNoYWluKCkKLSAgICAg
ICAgc2VsZi5fdGVhcmRvd25fdG93YXJkcyhuZWVkZWRfY29sbGVjdG9ycykKLQotICAgICAgICAj
IGNoZWNrIGlmIHRoZSBsYXN0IGNvbGxlY3Rpb24gbm9kZSBoYXMgcmFpc2VkIGFuIGVycm9yCi0g
ICAgICAgIGZvciBjb2wgaW4gc2VsZi5zdGFjazoKLSAgICAgICAgICAgIGlmIGhhc2F0dHIoY29s
LCAnX3ByZXBhcmVfZXhjJyk6Ci0gICAgICAgICAgICAgICAgcHkuYnVpbHRpbi5fcmVyYWlzZSgq
Y29sLl9wcmVwYXJlX2V4YykKLSAgICAgICAgZm9yIGNvbCBpbiBuZWVkZWRfY29sbGVjdG9yc1ts
ZW4oc2VsZi5zdGFjayk6XToKLSAgICAgICAgICAgIHNlbGYuc3RhY2suYXBwZW5kKGNvbCkKLSAg
ICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBjb2wuc2V0dXAoKQotICAgICAgICAgICAg
ZXhjZXB0IEV4Y2VwdGlvbjoKLSAgICAgICAgICAgICAgICBjb2wuX3ByZXBhcmVfZXhjID0gc3lz
LmV4Y19pbmZvKCkKLSAgICAgICAgICAgICAgICByYWlzZQotCi1kZWYgY29sbGVjdF9vbmVfbm9k
ZShjb2xsZWN0b3IpOgotICAgIGlob29rID0gY29sbGVjdG9yLmlob29rCi0gICAgaWhvb2sucHl0
ZXN0X2NvbGxlY3RzdGFydChjb2xsZWN0b3I9Y29sbGVjdG9yKQotICAgIHJlcCA9IGlob29rLnB5
dGVzdF9tYWtlX2NvbGxlY3RfcmVwb3J0KGNvbGxlY3Rvcj1jb2xsZWN0b3IpCi0gICAgY2FsbCA9
IHJlcC5fX2RpY3RfXy5wb3AoImNhbGwiLCBOb25lKQotICAgIGlmIGNhbGwgYW5kIGNoZWNrX2lu
dGVyYWN0aXZlX2V4Y2VwdGlvbihjYWxsLCByZXApOgotICAgICAgICBpaG9vay5weXRlc3RfZXhj
ZXB0aW9uX2ludGVyYWN0KG5vZGU9Y29sbGVjdG9yLCBjYWxsPWNhbGwsIHJlcG9ydD1yZXApCi0g
ICAgcmV0dXJuIHJlcAotCi0KLSMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotIyBUZXN0IE91dGNvbWVFeGNlcHRpb25zIGFuZCBo
ZWxwZXJzIGZvciBjcmVhdGluZyB0aGVtLgotCi0KLWNsYXNzIE91dGNvbWVFeGNlcHRpb24oRXhj
ZXB0aW9uKToKLSAgICAiIiIgT3V0Y29tZUV4Y2VwdGlvbiBhbmQgaXRzIHN1YmNsYXNzIGluc3Rh
bmNlcyBpbmRpY2F0ZSBhbmQKLSAgICAgICAgY29udGFpbiBpbmZvIGFib3V0IHRlc3QgYW5kIGNv
bGxlY3Rpb24gb3V0Y29tZXMuCi0gICAgIiIiCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1zZz1O
b25lLCBweXRyYWNlPVRydWUpOgotICAgICAgICBFeGNlcHRpb24uX19pbml0X18oc2VsZiwgbXNn
KQotICAgICAgICBzZWxmLm1zZyA9IG1zZwotICAgICAgICBzZWxmLnB5dHJhY2UgPSBweXRyYWNl
Ci0KLSAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIGlmIHNlbGYubXNnOgotICAgICAg
ICAgICAgdmFsID0gc2VsZi5tc2cKLSAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsLCBieXRl
cyk6Ci0gICAgICAgICAgICAgICAgdmFsID0gcHkuX2J1aWx0aW4uX3RvdGV4dCh2YWwsIGVycm9y
cz0ncmVwbGFjZScpCi0gICAgICAgICAgICByZXR1cm4gdmFsCi0gICAgICAgIHJldHVybiAiPCVz
IGluc3RhbmNlPiIgJShzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywpCi0gICAgX19zdHJfXyA9IF9f
cmVwcl9fCi0KLWNsYXNzIFNraXBwZWQoT3V0Y29tZUV4Y2VwdGlvbik6Ci0gICAgIyBYWFggaGFj
a2lzaDogb24gM2sgd2UgZmFrZSB0byBsaXZlIGluIHRoZSBidWlsdGlucwotICAgICMgaW4gb3Jk
ZXIgdG8gaGF2ZSBTa2lwcGVkIGV4Y2VwdGlvbiBwcmludGluZyBzaG9ydGVyL25pY2VyCi0gICAg
X19tb2R1bGVfXyA9ICdidWlsdGlucycKLQotY2xhc3MgRmFpbGVkKE91dGNvbWVFeGNlcHRpb24p
OgotICAgICIiIiByYWlzZWQgZnJvbSBhbiBleHBsaWNpdCBjYWxsIHRvIHB5dGVzdC5mYWlsKCkg
IiIiCi0gICAgX19tb2R1bGVfXyA9ICdidWlsdGlucycKLQotY2xhc3MgRXhpdChLZXlib2FyZElu
dGVycnVwdCk6Ci0gICAgIiIiIHJhaXNlZCBmb3IgaW1tZWRpYXRlIHByb2dyYW0gZXhpdHMgKG5v
IHRyYWNlYmFja3Mvc3VtbWFyaWVzKSIiIgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtc2c9InVu
a25vd24gcmVhc29uIik6Ci0gICAgICAgIHNlbGYubXNnID0gbXNnCi0gICAgICAgIEtleWJvYXJk
SW50ZXJydXB0Ll9faW5pdF9fKHNlbGYsIG1zZykKLQotIyBleHBvc2VkIGhlbHBlciBtZXRob2Rz
Ci0KLWRlZiBleGl0KG1zZyk6Ci0gICAgIiIiIGV4aXQgdGVzdGluZyBwcm9jZXNzIGFzIGlmIEtl
eWJvYXJkSW50ZXJydXB0IHdhcyB0cmlnZ2VyZWQuICIiIgotICAgIF9fdHJhY2ViYWNraGlkZV9f
ID0gVHJ1ZQotICAgIHJhaXNlIEV4aXQobXNnKQotCi1leGl0LkV4Y2VwdGlvbiA9IEV4aXQKLQot
ZGVmIHNraXAobXNnPSIiKToKLSAgICAiIiIgc2tpcCBhbiBleGVjdXRpbmcgdGVzdCB3aXRoIHRo
ZSBnaXZlbiBtZXNzYWdlLiAgTm90ZTogaXQncyB1c3VhbGx5Ci0gICAgYmV0dGVyIHRvIHVzZSB0
aGUgcHl0ZXN0Lm1hcmsuc2tpcGlmIG1hcmtlciB0byBkZWNsYXJlIGEgdGVzdCB0byBiZQotICAg
IHNraXBwZWQgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zIGxpa2UgbWlzbWF0Y2hpbmcgcGxhdGZv
cm1zIG9yCi0gICAgZGVwZW5kZW5jaWVzLiAgU2VlIHRoZSBweXRlc3Rfc2tpcHBpbmcgcGx1Z2lu
IGZvciBkZXRhaWxzLgotICAgICIiIgotICAgIF9fdHJhY2ViYWNraGlkZV9fID0gVHJ1ZQotICAg
IHJhaXNlIFNraXBwZWQobXNnPW1zZykKLXNraXAuRXhjZXB0aW9uID0gU2tpcHBlZAotCi1kZWYg
ZmFpbChtc2c9IiIsIHB5dHJhY2U9VHJ1ZSk6Ci0gICAgIiIiIGV4cGxpY2l0bHkgZmFpbCBhbiBj
dXJyZW50bHktZXhlY3V0aW5nIHRlc3Qgd2l0aCB0aGUgZ2l2ZW4gTWVzc2FnZS4KLQotICAgIDph
cmcgcHl0cmFjZTogaWYgZmFsc2UgdGhlIG1zZyByZXByZXNlbnRzIHRoZSBmdWxsIGZhaWx1cmUg
aW5mb3JtYXRpb24KLSAgICAgICAgICAgICAgICAgIGFuZCBubyBweXRob24gdHJhY2ViYWNrIHdp
bGwgYmUgcmVwb3J0ZWQuCi0gICAgIiIiCi0gICAgX190cmFjZWJhY2toaWRlX18gPSBUcnVlCi0g
ICAgcmFpc2UgRmFpbGVkKG1zZz1tc2csIHB5dHJhY2U9cHl0cmFjZSkKLWZhaWwuRXhjZXB0aW9u
ID0gRmFpbGVkCi0KLQotZGVmIGltcG9ydG9yc2tpcChtb2RuYW1lLCBtaW52ZXJzaW9uPU5vbmUp
OgotICAgICIiIiByZXR1cm4gaW1wb3J0ZWQgbW9kdWxlIGlmIGl0IGhhcyBhdCBsZWFzdCAibWlu
dmVyc2lvbiIgYXMgaXRzCi0gICAgX192ZXJzaW9uX18gYXR0cmlidXRlLiAgSWYgbm8gbWludmVy
c2lvbiBpcyBzcGVjaWZpZWQgdGhlIGEgc2tpcAotICAgIGlzIG9ubHkgdHJpZ2dlcmVkIGlmIHRo
ZSBtb2R1bGUgY2FuIG5vdCBiZSBpbXBvcnRlZC4KLSAgICAiIiIKLSAgICBfX3RyYWNlYmFja2hp
ZGVfXyA9IFRydWUKLSAgICBjb21waWxlKG1vZG5hbWUsICcnLCAnZXZhbCcpICMgdG8gY2F0Y2gg
c3ludGF4ZXJyb3JzCi0gICAgdHJ5OgotICAgICAgICBfX2ltcG9ydF9fKG1vZG5hbWUpCi0gICAg
ZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICBza2lwKCJjb3VsZCBub3QgaW1wb3J0ICVyIiAl
KG1vZG5hbWUsKSkKLSAgICBtb2QgPSBzeXMubW9kdWxlc1ttb2RuYW1lXQotICAgIGlmIG1pbnZl
cnNpb24gaXMgTm9uZToKLSAgICAgICAgcmV0dXJuIG1vZAotICAgIHZlcmF0dHIgPSBnZXRhdHRy
KG1vZCwgJ19fdmVyc2lvbl9fJywgTm9uZSkKLSAgICBpZiBtaW52ZXJzaW9uIGlzIG5vdCBOb25l
OgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBmcm9tIHBrZ19yZXNvdXJjZXMgaW1wb3J0IHBh
cnNlX3ZlcnNpb24gYXMgcHYKLSAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICAg
ICAgc2tpcCgid2UgaGF2ZSBhIHJlcXVpcmVkIHZlcnNpb24gZm9yICVyIGJ1dCBjYW4gbm90IGlt
cG9ydCAiCi0gICAgICAgICAgICAgICAgICJubyBwa2dfcmVzb3VyY2VzIHRvIHBhcnNlIHZlcnNp
b24gc3RyaW5ncy4iICUobW9kbmFtZSwpKQotICAgICAgICBpZiB2ZXJhdHRyIGlzIE5vbmUgb3Ig
cHYodmVyYXR0cikgPCBwdihtaW52ZXJzaW9uKToKLSAgICAgICAgICAgIHNraXAoIm1vZHVsZSAl
ciBoYXMgX192ZXJzaW9uX18gJXIsIHJlcXVpcmVkIGlzOiAlciIgJSgKLSAgICAgICAgICAgICAg
ICAgbW9kbmFtZSwgdmVyYXR0ciwgbWludmVyc2lvbikpCi0gICAgcmV0dXJuIG1vZAotCmRpZmYg
LS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3Qv
c2tpcHBpbmcucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19w
eXRlc3Qvc2tpcHBpbmcucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5MTU3ZjQ4
NWEwLi4wMDAwMDAwMDAwMAotLS0gYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMv
cHl0ZXN0L19weXRlc3Qvc2tpcHBpbmcucHkKKysrIC9kZXYvbnVsbApAQCAtMSwzNTQgKzAsMCBA
QAotIiIiIHN1cHBvcnQgZm9yIHNraXAveGZhaWwgZnVuY3Rpb25zIGFuZCBtYXJrZXJzLiAiIiIK
LWltcG9ydCBvcwotaW1wb3J0IHN5cwotaW1wb3J0IHRyYWNlYmFjawotCi1pbXBvcnQgcHkKLWlt
cG9ydCBweXRlc3QKLWZyb20gX3B5dGVzdC5tYXJrIGltcG9ydCBNYXJrSW5mbywgTWFya0RlY29y
YXRvcgotCi0KLWRlZiBweXRlc3RfYWRkb3B0aW9uKHBhcnNlcik6Ci0gICAgZ3JvdXAgPSBwYXJz
ZXIuZ2V0Z3JvdXAoImdlbmVyYWwiKQotICAgIGdyb3VwLmFkZG9wdGlvbignLS1ydW54ZmFpbCcs
Ci0gICAgICAgICAgIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9InJ1bnhmYWlsIiwgZGVmYXVs
dD1GYWxzZSwKLSAgICAgICAgICAgaGVscD0icnVuIHRlc3RzIGV2ZW4gaWYgdGhleSBhcmUgbWFy
a2VkIHhmYWlsIikKLQotICAgIHBhcnNlci5hZGRpbmkoInhmYWlsX3N0cmljdCIsICJkZWZhdWx0
IGZvciB0aGUgc3RyaWN0IHBhcmFtZXRlciBvZiB4ZmFpbCAiCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIm1hcmtlcnMgd2hlbiBub3QgZ2l2ZW4gZXhwbGljaXRseSAoZGVmYXVs
dDogIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGYWxzZSkiLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2UsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdHlwZT0iYm9vbCIpCi0KLQotZGVmIHB5dGVzdF9jb25maWd1
cmUoY29uZmlnKToKLSAgICBpZiBjb25maWcub3B0aW9uLnJ1bnhmYWlsOgotICAgICAgICBvbGQg
PSBweXRlc3QueGZhaWwKLSAgICAgICAgY29uZmlnLl9jbGVhbnVwLmFwcGVuZChsYW1iZGE6IHNl
dGF0dHIocHl0ZXN0LCAieGZhaWwiLCBvbGQpKQotICAgICAgICBkZWYgbm9wKCphcmdzLCAqKmt3
YXJncyk6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIG5vcC5FeGNlcHRpb24gPSBYRmFpbGVk
Ci0gICAgICAgIHNldGF0dHIocHl0ZXN0LCAieGZhaWwiLCBub3ApCi0KLSAgICBjb25maWcuYWRk
aW5pdmFsdWVfbGluZSgibWFya2VycyIsCi0gICAgICAgICJza2lwaWYoY29uZGl0aW9uKTogc2tp
cCB0aGUgZ2l2ZW4gdGVzdCBmdW5jdGlvbiBpZiBldmFsKGNvbmRpdGlvbikgIgotICAgICAgICAi
cmVzdWx0cyBpbiBhIFRydWUgdmFsdWUuICBFdmFsdWF0aW9uIGhhcHBlbnMgd2l0aGluIHRoZSAi
Ci0gICAgICAgICJtb2R1bGUgZ2xvYmFsIGNvbnRleHQuIEV4YW1wbGU6IHNraXBpZignc3lzLnBs
YXRmb3JtID09IFwid2luMzJcIicpICIKLSAgICAgICAgInNraXBzIHRoZSB0ZXN0IGlmIHdlIGFy
ZSBvbiB0aGUgd2luMzIgcGxhdGZvcm0uIHNlZSAiCi0gICAgICAgICJodHRwOi8vcHl0ZXN0Lm9y
Zy9sYXRlc3Qvc2tpcHBpbmcuaHRtbCIKLSAgICApCi0gICAgY29uZmlnLmFkZGluaXZhbHVlX2xp
bmUoIm1hcmtlcnMiLAotICAgICAgICAieGZhaWwoY29uZGl0aW9uLCByZWFzb249Tm9uZSwgcnVu
PVRydWUsIHJhaXNlcz1Ob25lKTogbWFyayB0aGUgdGhlIHRlc3QgZnVuY3Rpb24gIgotICAgICAg
ICAiYXMgYW4gZXhwZWN0ZWQgZmFpbHVyZSBpZiBldmFsKGNvbmRpdGlvbikgaGFzIGEgVHJ1ZSB2
YWx1ZS4gIgotICAgICAgICAiT3B0aW9uYWxseSBzcGVjaWZ5IGEgcmVhc29uIGZvciBiZXR0ZXIg
cmVwb3J0aW5nIGFuZCBydW49RmFsc2UgaWYgIgotICAgICAgICAieW91IGRvbid0IGV2ZW4gd2Fu
dCB0byBleGVjdXRlIHRoZSB0ZXN0IGZ1bmN0aW9uLiBJZiBvbmx5IHNwZWNpZmljICIKLSAgICAg
ICAgImV4Y2VwdGlvbihzKSBhcmUgZXhwZWN0ZWQsIHlvdSBjYW4gbGlzdCB0aGVtIGluIHJhaXNl
cywgYW5kIGlmIHRoZSB0ZXN0IGZhaWxzICIKLSAgICAgICAgImluIG90aGVyIHdheXMsIGl0IHdp
bGwgYmUgcmVwb3J0ZWQgYXMgYSB0cnVlIGZhaWx1cmUuICIKLSAgICAgICAgIlNlZSBodHRwOi8v
cHl0ZXN0Lm9yZy9sYXRlc3Qvc2tpcHBpbmcuaHRtbCIKLSAgICApCi0KLQotZGVmIHB5dGVzdF9u
YW1lc3BhY2UoKToKLSAgICByZXR1cm4gZGljdCh4ZmFpbD14ZmFpbCkKLQotCi1jbGFzcyBYRmFp
bGVkKHB5dGVzdC5mYWlsLkV4Y2VwdGlvbik6Ci0gICAgIiIiIHJhaXNlZCBmcm9tIGFuIGV4cGxp
Y2l0IGNhbGwgdG8gcHl0ZXN0LnhmYWlsKCkgIiIiCi0KLQotZGVmIHhmYWlsKHJlYXNvbj0iIik6
Ci0gICAgIiIiIHhmYWlsIGFuIGV4ZWN1dGluZyB0ZXN0IG9yIHNldHVwIGZ1bmN0aW9ucyB3aXRo
IHRoZSBnaXZlbiByZWFzb24uIiIiCi0gICAgX190cmFjZWJhY2toaWRlX18gPSBUcnVlCi0gICAg
cmFpc2UgWEZhaWxlZChyZWFzb24pCi14ZmFpbC5FeGNlcHRpb24gPSBYRmFpbGVkCi0KLQotY2xh
c3MgTWFya0V2YWx1YXRvcjoKLSAgICBkZWYgX19pbml0X18oc2VsZiwgaXRlbSwgbmFtZSk6Ci0g
ICAgICAgIHNlbGYuaXRlbSA9IGl0ZW0KLSAgICAgICAgc2VsZi5uYW1lID0gbmFtZQotCi0gICAg
QHByb3BlcnR5Ci0gICAgZGVmIGhvbGRlcihzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuaXRl
bS5rZXl3b3Jkcy5nZXQoc2VsZi5uYW1lKQotCi0gICAgZGVmIF9fYm9vbF9fKHNlbGYpOgotICAg
ICAgICByZXR1cm4gYm9vbChzZWxmLmhvbGRlcikKLSAgICBfX25vbnplcm9fXyA9IF9fYm9vbF9f
Ci0KLSAgICBkZWYgd2FzdmFsaWQoc2VsZik6Ci0gICAgICAgIHJldHVybiBub3QgaGFzYXR0cihz
ZWxmLCAnZXhjJykKLQotICAgIGRlZiBpbnZhbGlkcmFpc2Uoc2VsZiwgZXhjKToKLSAgICAgICAg
cmFpc2VzID0gc2VsZi5nZXQoJ3JhaXNlcycpCi0gICAgICAgIGlmIG5vdCByYWlzZXM6Ci0gICAg
ICAgICAgICByZXR1cm4KLSAgICAgICAgcmV0dXJuIG5vdCBpc2luc3RhbmNlKGV4YywgcmFpc2Vz
KQotCi0gICAgZGVmIGlzdHJ1ZShzZWxmKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmV0
dXJuIHNlbGYuX2lzdHJ1ZSgpCi0gICAgICAgIGV4Y2VwdCBFeGNlcHRpb246Ci0gICAgICAgICAg
ICBzZWxmLmV4YyA9IHN5cy5leGNfaW5mbygpCi0gICAgICAgICAgICBpZiBpc2luc3RhbmNlKHNl
bGYuZXhjWzFdLCBTeW50YXhFcnJvcik6Ci0gICAgICAgICAgICAgICAgbXNnID0gWyIgIiAqIChz
ZWxmLmV4Y1sxXS5vZmZzZXQgKyA0KSArICJeIixdCi0gICAgICAgICAgICAgICAgbXNnLmFwcGVu
ZCgiU3ludGF4RXJyb3I6IGludmFsaWQgc3ludGF4IikKLSAgICAgICAgICAgIGVsc2U6Ci0gICAg
ICAgICAgICAgICAgbXNnID0gdHJhY2ViYWNrLmZvcm1hdF9leGNlcHRpb25fb25seSgqc2VsZi5l
eGNbOjJdKQotICAgICAgICAgICAgcHl0ZXN0LmZhaWwoIkVycm9yIGV2YWx1YXRpbmcgJXIgZXhw
cmVzc2lvblxuIgotICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAlc1xuIgotICAgICAgICAg
ICAgICAgICAgICAgICAgIiVzIgotICAgICAgICAgICAgICAgICAgICAgICAgJShzZWxmLm5hbWUs
IHNlbGYuZXhwciwgIlxuIi5qb2luKG1zZykpLAotICAgICAgICAgICAgICAgICAgICAgICAgcHl0
cmFjZT1GYWxzZSkKLQotICAgIGRlZiBfZ2V0Z2xvYmFscyhzZWxmKToKLSAgICAgICAgZCA9IHsn
b3MnOiBvcywgJ3N5cyc6IHN5cywgJ2NvbmZpZyc6IHNlbGYuaXRlbS5jb25maWd9Ci0gICAgICAg
IGZ1bmMgPSBzZWxmLml0ZW0ub2JqCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGQudXBkYXRl
KGZ1bmMuX19nbG9iYWxzX18pCi0gICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAg
ICAgICAgIGQudXBkYXRlKGZ1bmMuZnVuY19nbG9iYWxzKQotICAgICAgICByZXR1cm4gZAotCi0g
ICAgZGVmIF9pc3RydWUoc2VsZik6Ci0gICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgJ3Jlc3VsdCcp
OgotICAgICAgICAgICAgcmV0dXJuIHNlbGYucmVzdWx0Ci0gICAgICAgIGlmIHNlbGYuaG9sZGVy
OgotICAgICAgICAgICAgZCA9IHNlbGYuX2dldGdsb2JhbHMoKQotICAgICAgICAgICAgaWYgc2Vs
Zi5ob2xkZXIuYXJnczoKLSAgICAgICAgICAgICAgICBzZWxmLnJlc3VsdCA9IEZhbHNlCi0gICAg
ICAgICAgICAgICAgIyAiaG9sZGVyIiBtaWdodCBiZSBhIE1hcmtJbmZvIG9yIGEgTWFya0RlY29y
YXRvcjsgb25seQotICAgICAgICAgICAgICAgICMgTWFya0luZm8ga2VlcHMgdHJhY2sgb2YgYWxs
IHBhcmFtZXRlcnMgaXQgcmVjZWl2ZWQgaW4gYW4KLSAgICAgICAgICAgICAgICAjIF9hcmdsaXN0
IGF0dHJpYnV0ZQotICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIoc2VsZi5ob2xkZXIsICdfYXJn
bGlzdCcpOgotICAgICAgICAgICAgICAgICAgICBhcmdsaXN0ID0gc2VsZi5ob2xkZXIuX2FyZ2xp
c3QKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBhcmdsaXN0ID0g
WyhzZWxmLmhvbGRlci5hcmdzLCBzZWxmLmhvbGRlci5rd2FyZ3MpXQotICAgICAgICAgICAgICAg
IGZvciBhcmdzLCBrd2FyZ3MgaW4gYXJnbGlzdDoKLSAgICAgICAgICAgICAgICAgICAgZm9yIGV4
cHIgaW4gYXJnczoKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZXhwciA9IGV4cHIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXhwciwgcHkuYnVpbHRpbi5fYmFz
ZXN0cmluZyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gY2FjaGVkX2V2
YWwoc2VsZi5pdGVtLmNvbmZpZywgZXhwciwgZCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGVs
c2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgInJlYXNvbiIgbm90IGluIGt3YXJn
czoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBYWFggYmV0dGVyIGJlIGNoZWNr
ZWQgYXQgY29sbGVjdGlvbiB0aW1lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1z
ZyA9ICJ5b3UgbmVlZCB0byBzcGVjaWZ5IHJlYXNvbj1TVFJJTkcgIiBcCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJ3aGVuIHVzaW5nIGJvb2xlYW5zIGFzIGNvbmRpdGlv
bnMuIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBweXRlc3QuZmFpbChtc2cpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gYm9vbChleHByKQotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgcmVzdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNl
bGYucmVzdWx0ID0gVHJ1ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmVhc29u
ID0ga3dhcmdzLmdldCgncmVhc29uJywgTm9uZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzZWxmLmV4cHIgPSBleHByCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNl
bGYucmVzdWx0Ci0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYucmVzdWx0
ID0gVHJ1ZQotICAgICAgICByZXR1cm4gZ2V0YXR0cihzZWxmLCAncmVzdWx0JywgRmFsc2UpCi0K
LSAgICBkZWYgZ2V0KHNlbGYsIGF0dHIsIGRlZmF1bHQ9Tm9uZSk6Ci0gICAgICAgIHJldHVybiBz
ZWxmLmhvbGRlci5rd2FyZ3MuZ2V0KGF0dHIsIGRlZmF1bHQpCi0KLSAgICBkZWYgZ2V0ZXhwbGFu
YXRpb24oc2VsZik6Ci0gICAgICAgIGV4cGwgPSBnZXRhdHRyKHNlbGYsICdyZWFzb24nLCBOb25l
KSBvciBzZWxmLmdldCgncmVhc29uJywgTm9uZSkKLSAgICAgICAgaWYgbm90IGV4cGw6Ci0gICAg
ICAgICAgICBpZiBub3QgaGFzYXR0cihzZWxmLCAnZXhwcicpOgotICAgICAgICAgICAgICAgIHJl
dHVybiAiIgotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXR1cm4gImNvbmRp
dGlvbjogIiArIHN0cihzZWxmLmV4cHIpCi0gICAgICAgIHJldHVybiBleHBsCi0KLQotQHB5dGVz
dC5ob29raW1wbCh0cnlmaXJzdD1UcnVlKQotZGVmIHB5dGVzdF9ydW50ZXN0X3NldHVwKGl0ZW0p
OgotICAgICMgQ2hlY2sgaWYgc2tpcCBvciBza2lwaWYgYXJlIHNwZWNpZmllZCBhcyBweXRlc3Qg
bWFya3MKLQotICAgIHNraXBpZl9pbmZvID0gaXRlbS5rZXl3b3Jkcy5nZXQoJ3NraXBpZicpCi0g
ICAgaWYgaXNpbnN0YW5jZShza2lwaWZfaW5mbywgKE1hcmtJbmZvLCBNYXJrRGVjb3JhdG9yKSk6
Ci0gICAgICAgIGV2YWxfc2tpcGlmID0gTWFya0V2YWx1YXRvcihpdGVtLCAnc2tpcGlmJykKLSAg
ICAgICAgaWYgZXZhbF9za2lwaWYuaXN0cnVlKCk6Ci0gICAgICAgICAgICBpdGVtLl9ldmFsc2tp
cCA9IGV2YWxfc2tpcGlmCi0gICAgICAgICAgICBweXRlc3Quc2tpcChldmFsX3NraXBpZi5nZXRl
eHBsYW5hdGlvbigpKQotCi0gICAgc2tpcF9pbmZvID0gaXRlbS5rZXl3b3Jkcy5nZXQoJ3NraXAn
KQotICAgIGlmIGlzaW5zdGFuY2Uoc2tpcF9pbmZvLCAoTWFya0luZm8sIE1hcmtEZWNvcmF0b3Ip
KToKLSAgICAgICAgaXRlbS5fZXZhbHNraXAgPSBUcnVlCi0gICAgICAgIGlmICdyZWFzb24nIGlu
IHNraXBfaW5mby5rd2FyZ3M6Ci0gICAgICAgICAgICBweXRlc3Quc2tpcChza2lwX2luZm8ua3dh
cmdzWydyZWFzb24nXSkKLSAgICAgICAgZWxpZiBza2lwX2luZm8uYXJnczoKLSAgICAgICAgICAg
IHB5dGVzdC5za2lwKHNraXBfaW5mby5hcmdzWzBdKQotICAgICAgICBlbHNlOgotICAgICAgICAg
ICAgcHl0ZXN0LnNraXAoInVuY29uZGl0aW9uYWwgc2tpcCIpCi0KLSAgICBpdGVtLl9ldmFseGZh
aWwgPSBNYXJrRXZhbHVhdG9yKGl0ZW0sICd4ZmFpbCcpCi0gICAgY2hlY2tfeGZhaWxfbm9fcnVu
KGl0ZW0pCi0KLQotQHB5dGVzdC5tYXJrLmhvb2t3cmFwcGVyCi1kZWYgcHl0ZXN0X3B5ZnVuY19j
YWxsKHB5ZnVuY2l0ZW0pOgotICAgIGNoZWNrX3hmYWlsX25vX3J1bihweWZ1bmNpdGVtKQotICAg
IG91dGNvbWUgPSB5aWVsZAotICAgIHBhc3NlZCA9IG91dGNvbWUuZXhjaW5mbyBpcyBOb25lCi0g
ICAgaWYgcGFzc2VkOgotICAgICAgICBjaGVja19zdHJpY3RfeGZhaWwocHlmdW5jaXRlbSkKLQot
Ci1kZWYgY2hlY2tfeGZhaWxfbm9fcnVuKGl0ZW0pOgotICAgICIiImNoZWNrIHhmYWlsKHJ1bj1G
YWxzZSkiIiIKLSAgICBpZiBub3QgaXRlbS5jb25maWcub3B0aW9uLnJ1bnhmYWlsOgotICAgICAg
ICBldmFseGZhaWwgPSBpdGVtLl9ldmFseGZhaWwKLSAgICAgICAgaWYgZXZhbHhmYWlsLmlzdHJ1
ZSgpOgotICAgICAgICAgICAgaWYgbm90IGV2YWx4ZmFpbC5nZXQoJ3J1bicsIFRydWUpOgotICAg
ICAgICAgICAgICAgIHB5dGVzdC54ZmFpbCgiW05PVFJVTl0gIiArIGV2YWx4ZmFpbC5nZXRleHBs
YW5hdGlvbigpKQotCi0KLWRlZiBjaGVja19zdHJpY3RfeGZhaWwocHlmdW5jaXRlbSk6Ci0gICAg
IiIiY2hlY2sgeGZhaWwoc3RyaWN0PVRydWUpIGZvciB0aGUgZ2l2ZW4gUEFTU0lORyB0ZXN0IiIi
Ci0gICAgZXZhbHhmYWlsID0gcHlmdW5jaXRlbS5fZXZhbHhmYWlsCi0gICAgaWYgZXZhbHhmYWls
LmlzdHJ1ZSgpOgotICAgICAgICBzdHJpY3RfZGVmYXVsdCA9IHB5ZnVuY2l0ZW0uY29uZmlnLmdl
dGluaSgneGZhaWxfc3RyaWN0JykKLSAgICAgICAgaXNfc3RyaWN0X3hmYWlsID0gZXZhbHhmYWls
LmdldCgnc3RyaWN0Jywgc3RyaWN0X2RlZmF1bHQpCi0gICAgICAgIGlmIGlzX3N0cmljdF94ZmFp
bDoKLSAgICAgICAgICAgIGRlbCBweWZ1bmNpdGVtLl9ldmFseGZhaWwKLSAgICAgICAgICAgIGV4
cGxhbmF0aW9uID0gZXZhbHhmYWlsLmdldGV4cGxhbmF0aW9uKCkKLSAgICAgICAgICAgIHB5dGVz
dC5mYWlsKCdbWFBBU1Moc3RyaWN0KV0gJyArIGV4cGxhbmF0aW9uLCBweXRyYWNlPUZhbHNlKQot
Ci0KLUBweXRlc3QuaG9va2ltcGwoaG9va3dyYXBwZXI9VHJ1ZSkKLWRlZiBweXRlc3RfcnVudGVz
dF9tYWtlcmVwb3J0KGl0ZW0sIGNhbGwpOgotICAgIG91dGNvbWUgPSB5aWVsZAotICAgIHJlcCA9
IG91dGNvbWUuZ2V0X3Jlc3VsdCgpCi0gICAgZXZhbHhmYWlsID0gZ2V0YXR0cihpdGVtLCAnX2V2
YWx4ZmFpbCcsIE5vbmUpCi0gICAgZXZhbHNraXAgPSBnZXRhdHRyKGl0ZW0sICdfZXZhbHNraXAn
LCBOb25lKQotICAgICMgdW5pdHR0ZXN0IHNwZWNpYWwgY2FzZSwgc2VlIHNldHRpbmcgb2YgX3Vu
ZXhwZWN0ZWRzdWNjZXNzCi0gICAgaWYgaGFzYXR0cihpdGVtLCAnX3VuZXhwZWN0ZWRzdWNjZXNz
JykgYW5kIHJlcC53aGVuID09ICJjYWxsIjoKLSAgICAgICAgIyB3ZSBuZWVkIHRvIHRyYW5zbGF0
ZSBpbnRvIGhvdyBweXRlc3QgZW5jb2RlcyB4cGFzcwotICAgICAgICByZXAud2FzeGZhaWwgPSAi
cmVhc29uOiAiICsgcmVwcihpdGVtLl91bmV4cGVjdGVkc3VjY2VzcykKLSAgICAgICAgcmVwLm91
dGNvbWUgPSAiZmFpbGVkIgotICAgIGVsaWYgaXRlbS5jb25maWcub3B0aW9uLnJ1bnhmYWlsOgot
ICAgICAgICBwYXNzICAgIyBkb24ndCBpbnRlcmVmZXJlCi0gICAgZWxpZiBjYWxsLmV4Y2luZm8g
YW5kIGNhbGwuZXhjaW5mby5lcnJpc2luc3RhbmNlKHB5dGVzdC54ZmFpbC5FeGNlcHRpb24pOgot
ICAgICAgICByZXAud2FzeGZhaWwgPSAicmVhc29uOiAiICsgY2FsbC5leGNpbmZvLnZhbHVlLm1z
ZwotICAgICAgICByZXAub3V0Y29tZSA9ICJza2lwcGVkIgotICAgIGVsaWYgZXZhbHhmYWlsIGFu
ZCBub3QgcmVwLnNraXBwZWQgYW5kIGV2YWx4ZmFpbC53YXN2YWxpZCgpIGFuZCBcCi0gICAgICAg
IGV2YWx4ZmFpbC5pc3RydWUoKToKLSAgICAgICAgaWYgY2FsbC5leGNpbmZvOgotICAgICAgICAg
ICAgaWYgZXZhbHhmYWlsLmludmFsaWRyYWlzZShjYWxsLmV4Y2luZm8udmFsdWUpOgotICAgICAg
ICAgICAgICAgIHJlcC5vdXRjb21lID0gImZhaWxlZCIKLSAgICAgICAgICAgIGVsc2U6Ci0gICAg
ICAgICAgICAgICAgcmVwLm91dGNvbWUgPSAic2tpcHBlZCIKLSAgICAgICAgICAgICAgICByZXAu
d2FzeGZhaWwgPSBldmFseGZhaWwuZ2V0ZXhwbGFuYXRpb24oKQotICAgICAgICBlbGlmIGNhbGwu
d2hlbiA9PSAiY2FsbCI6Ci0gICAgICAgICAgICByZXAub3V0Y29tZSA9ICJmYWlsZWQiICAjIHhw
YXNzIG91dGNvbWUKLSAgICAgICAgICAgIHJlcC53YXN4ZmFpbCA9IGV2YWx4ZmFpbC5nZXRleHBs
YW5hdGlvbigpCi0gICAgZWxpZiBldmFsc2tpcCBpcyBub3QgTm9uZSBhbmQgcmVwLnNraXBwZWQg
YW5kIHR5cGUocmVwLmxvbmdyZXByKSBpcyB0dXBsZToKLSAgICAgICAgIyBza2lwcGVkIGJ5IG1h
cmsuc2tpcGlmOyBjaGFuZ2UgdGhlIGxvY2F0aW9uIG9mIHRoZSBmYWlsdXJlCi0gICAgICAgICMg
dG8gcG9pbnQgdG8gdGhlIGl0ZW0gZGVmaW5pdGlvbiwgb3RoZXJ3aXNlIGl0IHdpbGwgZGlzcGxh
eQotICAgICAgICAjIHRoZSBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgc2tpcCBleGNlcHRpb24gd2Fz
IHJhaXNlZCB3aXRoaW4gcHl0ZXN0Ci0gICAgICAgIGZpbGVuYW1lLCBsaW5lLCByZWFzb24gPSBy
ZXAubG9uZ3JlcHIKLSAgICAgICAgZmlsZW5hbWUsIGxpbmUgPSBpdGVtLmxvY2F0aW9uWzoyXQot
ICAgICAgICByZXAubG9uZ3JlcHIgPSBmaWxlbmFtZSwgbGluZSwgcmVhc29uCi0KLSMgY2FsbGVk
IGJ5IHRlcm1pbmFscmVwb3J0ZXIgcHJvZ3Jlc3MgcmVwb3J0aW5nCi1kZWYgcHl0ZXN0X3JlcG9y
dF90ZXN0c3RhdHVzKHJlcG9ydCk6Ci0gICAgaWYgaGFzYXR0cihyZXBvcnQsICJ3YXN4ZmFpbCIp
OgotICAgICAgICBpZiByZXBvcnQuc2tpcHBlZDoKLSAgICAgICAgICAgIHJldHVybiAieGZhaWxl
ZCIsICJ4IiwgInhmYWlsIgotICAgICAgICBlbGlmIHJlcG9ydC5mYWlsZWQ6Ci0gICAgICAgICAg
ICByZXR1cm4gInhwYXNzZWQiLCAiWCIsICgiWFBBU1MiLCB7J3llbGxvdyc6IFRydWV9KQotCi0j
IGNhbGxlZCBieSB0aGUgdGVybWluYWxyZXBvcnRlciBpbnN0YW5jZS9wbHVnaW4KLWRlZiBweXRl
c3RfdGVybWluYWxfc3VtbWFyeSh0ZXJtaW5hbHJlcG9ydGVyKToKLSAgICB0ciA9IHRlcm1pbmFs
cmVwb3J0ZXIKLSAgICBpZiBub3QgdHIucmVwb3J0Y2hhcnM6Ci0gICAgICAgICNmb3IgbmFtZSBp
biAieGZhaWxlZCBza2lwcGVkIGZhaWxlZCB4cGFzc2VkIjoKLSAgICAgICAgIyAgICBpZiBub3Qg
dHIuc3RhdHMuZ2V0KG5hbWUsIDApOgotICAgICAgICAjICAgICAgICB0ci53cml0ZV9saW5lKCJI
SU5UOiB1c2UgJy1yJyBvcHRpb24gdG8gc2VlIGV4dHJhICIKLSAgICAgICAgIyAgICAgICAgICAg
ICAgInN1bW1hcnkgaW5mbyBhYm91dCB0ZXN0cyIpCi0gICAgICAgICMgICAgICAgIGJyZWFrCi0g
ICAgICAgIHJldHVybgotCi0gICAgbGluZXMgPSBbXQotICAgIGZvciBjaGFyIGluIHRyLnJlcG9y
dGNoYXJzOgotICAgICAgICBpZiBjaGFyID09ICJ4IjoKLSAgICAgICAgICAgIHNob3dfeGZhaWxl
ZCh0ZXJtaW5hbHJlcG9ydGVyLCBsaW5lcykKLSAgICAgICAgZWxpZiBjaGFyID09ICJYIjoKLSAg
ICAgICAgICAgIHNob3dfeHBhc3NlZCh0ZXJtaW5hbHJlcG9ydGVyLCBsaW5lcykKLSAgICAgICAg
ZWxpZiBjaGFyIGluICJmRiI6Ci0gICAgICAgICAgICBzaG93X3NpbXBsZSh0ZXJtaW5hbHJlcG9y
dGVyLCBsaW5lcywgJ2ZhaWxlZCcsICJGQUlMICVzIikKLSAgICAgICAgZWxpZiBjaGFyIGluICJz
UyI6Ci0gICAgICAgICAgICBzaG93X3NraXBwZWQodGVybWluYWxyZXBvcnRlciwgbGluZXMpCi0g
ICAgICAgIGVsaWYgY2hhciA9PSAiRSI6Ci0gICAgICAgICAgICBzaG93X3NpbXBsZSh0ZXJtaW5h
bHJlcG9ydGVyLCBsaW5lcywgJ2Vycm9yJywgIkVSUk9SICVzIikKLSAgICAgICAgZWxpZiBjaGFy
ID09ICdwJzoKLSAgICAgICAgICAgIHNob3dfc2ltcGxlKHRlcm1pbmFscmVwb3J0ZXIsIGxpbmVz
LCAncGFzc2VkJywgIlBBU1NFRCAlcyIpCi0KLSAgICBpZiBsaW5lczoKLSAgICAgICAgdHIuX3R3
LnNlcCgiPSIsICJzaG9ydCB0ZXN0IHN1bW1hcnkgaW5mbyIpCi0gICAgICAgIGZvciBsaW5lIGlu
IGxpbmVzOgotICAgICAgICAgICAgdHIuX3R3LmxpbmUobGluZSkKLQotZGVmIHNob3dfc2ltcGxl
KHRlcm1pbmFscmVwb3J0ZXIsIGxpbmVzLCBzdGF0LCBmb3JtYXQpOgotICAgIGZhaWxlZCA9IHRl
cm1pbmFscmVwb3J0ZXIuc3RhdHMuZ2V0KHN0YXQpCi0gICAgaWYgZmFpbGVkOgotICAgICAgICBm
b3IgcmVwIGluIGZhaWxlZDoKLSAgICAgICAgICAgIHBvcyA9IHRlcm1pbmFscmVwb3J0ZXIuY29u
ZmlnLmN3ZF9yZWxhdGl2ZV9ub2RlaWQocmVwLm5vZGVpZCkKLSAgICAgICAgICAgIGxpbmVzLmFw
cGVuZChmb3JtYXQgJShwb3MsKSkKLQotZGVmIHNob3dfeGZhaWxlZCh0ZXJtaW5hbHJlcG9ydGVy
LCBsaW5lcyk6Ci0gICAgeGZhaWxlZCA9IHRlcm1pbmFscmVwb3J0ZXIuc3RhdHMuZ2V0KCJ4ZmFp
bGVkIikKLSAgICBpZiB4ZmFpbGVkOgotICAgICAgICBmb3IgcmVwIGluIHhmYWlsZWQ6Ci0gICAg
ICAgICAgICBwb3MgPSB0ZXJtaW5hbHJlcG9ydGVyLmNvbmZpZy5jd2RfcmVsYXRpdmVfbm9kZWlk
KHJlcC5ub2RlaWQpCi0gICAgICAgICAgICByZWFzb24gPSByZXAud2FzeGZhaWwKLSAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZCgiWEZBSUwgJXMiICUgKHBvcywpKQotICAgICAgICAgICAgaWYgcmVh
c29uOgotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgiICAiICsgc3RyKHJlYXNvbikpCi0K
LWRlZiBzaG93X3hwYXNzZWQodGVybWluYWxyZXBvcnRlciwgbGluZXMpOgotICAgIHhwYXNzZWQg
PSB0ZXJtaW5hbHJlcG9ydGVyLnN0YXRzLmdldCgieHBhc3NlZCIpCi0gICAgaWYgeHBhc3NlZDoK
LSAgICAgICAgZm9yIHJlcCBpbiB4cGFzc2VkOgotICAgICAgICAgICAgcG9zID0gdGVybWluYWxy
ZXBvcnRlci5jb25maWcuY3dkX3JlbGF0aXZlX25vZGVpZChyZXAubm9kZWlkKQotICAgICAgICAg
ICAgcmVhc29uID0gcmVwLndhc3hmYWlsCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoIlhQQVNT
ICVzICVzIiAlKHBvcywgcmVhc29uKSkKLQotZGVmIGNhY2hlZF9ldmFsKGNvbmZpZywgZXhwciwg
ZCk6Ci0gICAgaWYgbm90IGhhc2F0dHIoY29uZmlnLCAnX2V2YWxjYWNoZScpOgotICAgICAgICBj
b25maWcuX2V2YWxjYWNoZSA9IHt9Ci0gICAgdHJ5OgotICAgICAgICByZXR1cm4gY29uZmlnLl9l
dmFsY2FjaGVbZXhwcl0KLSAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgIGltcG9ydCBfcHl0
ZXN0Ll9jb2RlCi0gICAgICAgIGV4cHJjb2RlID0gX3B5dGVzdC5fY29kZS5jb21waWxlKGV4cHIs
IG1vZGU9ImV2YWwiKQotICAgICAgICBjb25maWcuX2V2YWxjYWNoZVtleHByXSA9IHggPSBldmFs
KGV4cHJjb2RlLCBkKQotICAgICAgICByZXR1cm4geAotCi0KLWRlZiBmb2xkZWRfc2tpcHMoc2tp
cHBlZCk6Ci0gICAgZCA9IHt9Ci0gICAgZm9yIGV2ZW50IGluIHNraXBwZWQ6Ci0gICAgICAgIGtl
eSA9IGV2ZW50LmxvbmdyZXByCi0gICAgICAgIGFzc2VydCBsZW4oa2V5KSA9PSAzLCAoZXZlbnQs
IGtleSkKLSAgICAgICAgZC5zZXRkZWZhdWx0KGtleSwgW10pLmFwcGVuZChldmVudCkKLSAgICBs
ID0gW10KLSAgICBmb3Iga2V5LCBldmVudHMgaW4gZC5pdGVtcygpOgotICAgICAgICBsLmFwcGVu
ZCgobGVuKGV2ZW50cyksKSArIGtleSkKLSAgICByZXR1cm4gbAotCi1kZWYgc2hvd19za2lwcGVk
KHRlcm1pbmFscmVwb3J0ZXIsIGxpbmVzKToKLSAgICB0ciA9IHRlcm1pbmFscmVwb3J0ZXIKLSAg
ICBza2lwcGVkID0gdHIuc3RhdHMuZ2V0KCdza2lwcGVkJywgW10pCi0gICAgaWYgc2tpcHBlZDoK
LSAgICAgICAgI2lmIG5vdCB0ci5oYXNvcHQoJ3NraXBwZWQnKToKLSAgICAgICAgIyAgICB0ci53
cml0ZV9saW5lKAotICAgICAgICAjICAgICAgICAiJWQgc2tpcHBlZCB0ZXN0cywgc3BlY2lmeSAt
cnMgZm9yIG1vcmUgaW5mbyIgJQotICAgICAgICAjICAgICAgICBsZW4oc2tpcHBlZCkpCi0gICAg
ICAgICMgICAgcmV0dXJuCi0gICAgICAgIGZza2lwcyA9IGZvbGRlZF9za2lwcyhza2lwcGVkKQot
ICAgICAgICBpZiBmc2tpcHM6Ci0gICAgICAgICAgICAjdHIud3JpdGVfc2VwKCJfIiwgInNraXBw
ZWQgdGVzdCBzdW1tYXJ5IikKLSAgICAgICAgICAgIGZvciBudW0sIGZzcGF0aCwgbGluZW5vLCBy
ZWFzb24gaW4gZnNraXBzOgotICAgICAgICAgICAgICAgIGlmIHJlYXNvbi5zdGFydHN3aXRoKCJT
a2lwcGVkOiAiKToKLSAgICAgICAgICAgICAgICAgICAgcmVhc29uID0gcmVhc29uWzk6XQotICAg
ICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgiU0tJUCBbJWRdICVzOiVkOiAlcyIgJQotICAgICAg
ICAgICAgICAgICAgICAobnVtLCBmc3BhdGgsIGxpbmVubywgcmVhc29uKSkKZGlmZiAtLWdpdCBh
L1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC9zdGFuZGFs
b25ldGVtcGxhdGUucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0
L19weXRlc3Qvc3RhbmRhbG9uZXRlbXBsYXRlLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA0ODRkNWQxYjI1Zi4uMDAwMDAwMDAwMDAKLS0tIGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0
ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L3N0YW5kYWxvbmV0ZW1wbGF0ZS5weQorKysgL2Rl
di9udWxsCkBAIC0xLDg5ICswLDAgQEAKLSMhIC91c3IvYmluL2VudiBweXRob24KLQotIyBIaSBU
aGVyZSEKLSMgWW91IG1heSBiZSB3b25kZXJpbmcgd2hhdCB0aGlzIGdpYW50IGJsb2Igb2YgYmlu
YXJ5IGRhdGEgaGVyZSBpcywgeW91IG1pZ2h0Ci0jIGV2ZW4gYmUgd29ycmllZCB0aGF0IHdlJ3Jl
IHVwIHRvIHNvbWV0aGluZyBuZWZhcmlvdXMgKGdvb2QgZm9yIHlvdSBmb3IgYmVpbmcKLSMgcGFy
YW5vaWQhKS4gVGhpcyBpcyBhIGJhc2U2NCBlbmNvZGluZyBvZiBhIHppcCBmaWxlLCB0aGlzIHpp
cCBmaWxlIGNvbnRhaW5zCi0jIGEgZnVsbHkgZnVuY3Rpb25hbCBiYXNpYyBweXRlc3Qgc2NyaXB0
LgotIwotIyBQeXRlc3QgaXMgYSB0aGluZyB0aGF0IHRlc3RzIHBhY2thZ2VzLCBweXRlc3QgaXRz
ZWxmIGlzIGEgcGFja2FnZSB0aGF0IHNvbWUtCi0jIG9uZSBtaWdodCB3YW50IHRvIGluc3RhbGws
IGVzcGVjaWFsbHkgaWYgdGhleSdyZSBsb29raW5nIHRvIHJ1biB0ZXN0cyBpbnNpZGUKLSMgc29t
ZSBwYWNrYWdlIHRoZXkgd2FudCB0byBpbnN0YWxsLiBQeXRlc3QgaGFzIGEgbG90IG9mIGNvZGUg
dG8gY29sbGVjdCBhbmQKLSMgZXhlY3V0ZSB0ZXN0cywgYW5kIG90aGVyIHN1Y2ggc29ydCBvZiAi
dHJpYmFsIGtub3dsZWRnZSIgdGhhdCBoYXMgYmVlbiBlbi0KLSMgY29kZWQgaW4gaXRzIGNvZGUg
YmFzZS4gQmVjYXVzZSBvZiB0aGlzIHdlIGJhc2ljYWxseSBpbmNsdWRlIGEgYmFzaWMgY29weQot
IyBvZiBweXRlc3QgaW5zaWRlIHRoaXMgYmxvYi4gV2UgZG8gdGhpcyAgYmVjYXVzZSBpdCBsZXQn
cyB5b3UgYXMgYSBtYWludGFpbmVyCi0jIG9yIGFwcGxpY2F0aW9uIGRldmVsb3BlciB3aG8gd2Fu
dHMgcGVvcGxlIHdobyBkb24ndCBkZWFsIHdpdGggcHl0aG9uIG11Y2ggdG8KLSMgZWFzaWx5IHJ1
biB0ZXN0cyB3aXRob3V0IGluc3RhbGxpbmcgdGhlIGNvbXBsZXRlIHB5dGVzdCBwYWNrYWdlLgot
IwotIyBJZiB5b3UncmUgd29uZGVyaW5nIGhvdyB0aGlzIGlzIGNyZWF0ZWQ6IHlvdSBjYW4gY3Jl
YXRlIGl0IHlvdXJzZWxmIGlmIHlvdQotIyBoYXZlIGEgY29tcGxldGUgcHl0ZXN0IGluc3RhbGxh
dGlvbiBieSB1c2luZyB0aGlzIGNvbW1hbmQgb24gdGhlIGNvbW1hbmQtCi0jIGxpbmU6IGBgcHku
dGVzdCAtLWdlbnNjcmlwdD1ydW50ZXN0cy5weWBgLgotCi1zb3VyY2VzID0gIiIiCi1AU09VUkNF
U0AiIiIKLQotaW1wb3J0IHN5cwotaW1wb3J0IGJhc2U2NAotaW1wb3J0IHpsaWIKLQotY2xhc3Mg
RGljdEltcG9ydGVyKG9iamVjdCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHNvdXJjZXMpOgot
ICAgICAgICBzZWxmLnNvdXJjZXMgPSBzb3VyY2VzCi0KLSAgICBkZWYgZmluZF9tb2R1bGUoc2Vs
ZiwgZnVsbG5hbWUsIHBhdGg9Tm9uZSk6Ci0gICAgICAgIGlmIGZ1bGxuYW1lID09ICJhcmdwYXJz
ZSIgYW5kIHN5cy52ZXJzaW9uX2luZm8gPj0gKDIsNyk6Ci0gICAgICAgICAgICAjIHdlIHdlcmUg
Z2VuZXJhdGVkIHdpdGggPHB5dGhvbjIuNyAod2hpY2ggcHVsbHMgaW4gYXJncGFyc2UpCi0gICAg
ICAgICAgICAjIGJ1dCB3ZSBhcmUgcnVubmluZyBub3cgb24gYSBzdGRsaWIgd2hpY2ggaGFzIGl0
LCBzbyB1c2UgdGhhdC4KLSAgICAgICAgICAgIHJldHVybiBOb25lCi0gICAgICAgIGlmIGZ1bGxu
YW1lIGluIHNlbGYuc291cmNlczoKLSAgICAgICAgICAgIHJldHVybiBzZWxmCi0gICAgICAgIGlm
IGZ1bGxuYW1lICsgJy5fX2luaXRfXycgaW4gc2VsZi5zb3VyY2VzOgotICAgICAgICAgICAgcmV0
dXJuIHNlbGYKLSAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgIGRlZiBsb2FkX21vZHVsZShzZWxm
LCBmdWxsbmFtZSk6Ci0gICAgICAgICMgcHJpbnQgImxvYWRfbW9kdWxlOiIsICBmdWxsbmFtZQot
ICAgICAgICBmcm9tIHR5cGVzIGltcG9ydCBNb2R1bGVUeXBlCi0gICAgICAgIHRyeToKLSAgICAg
ICAgICAgIHMgPSBzZWxmLnNvdXJjZXNbZnVsbG5hbWVdCi0gICAgICAgICAgICBpc19wa2cgPSBG
YWxzZQotICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICBzID0gc2VsZi5zb3Vy
Y2VzW2Z1bGxuYW1lICsgJy5fX2luaXRfXyddCi0gICAgICAgICAgICBpc19wa2cgPSBUcnVlCi0K
LSAgICAgICAgY28gPSBjb21waWxlKHMsIGZ1bGxuYW1lLCAnZXhlYycpCi0gICAgICAgIG1vZHVs
ZSA9IHN5cy5tb2R1bGVzLnNldGRlZmF1bHQoZnVsbG5hbWUsIE1vZHVsZVR5cGUoZnVsbG5hbWUp
KQotICAgICAgICBtb2R1bGUuX19maWxlX18gPSAiJXMvJXMiICUgKF9fZmlsZV9fLCBmdWxsbmFt
ZSkKLSAgICAgICAgbW9kdWxlLl9fbG9hZGVyX18gPSBzZWxmCi0gICAgICAgIGlmIGlzX3BrZzoK
LSAgICAgICAgICAgIG1vZHVsZS5fX3BhdGhfXyA9IFtmdWxsbmFtZV0KLQotICAgICAgICBkb19l
eGVjKGNvLCBtb2R1bGUuX19kaWN0X18pICMgbm9xYQotICAgICAgICByZXR1cm4gc3lzLm1vZHVs
ZXNbZnVsbG5hbWVdCi0KLSAgICBkZWYgZ2V0X3NvdXJjZShzZWxmLCBuYW1lKToKLSAgICAgICAg
cmVzID0gc2VsZi5zb3VyY2VzLmdldChuYW1lKQotICAgICAgICBpZiByZXMgaXMgTm9uZToKLSAg
ICAgICAgICAgIHJlcyA9IHNlbGYuc291cmNlcy5nZXQobmFtZSArICcuX19pbml0X18nKQotICAg
ICAgICByZXR1cm4gcmVzCi0KLWlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdHJ5Ogot
ICAgICAgICBpbXBvcnQgcGtnX3Jlc291cmNlcyAgIyBub3FhCi0gICAgZXhjZXB0IEltcG9ydEVy
cm9yOgotICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJFUlJPUjogc2V0dXB0b29scyBub3QgaW5z
dGFsbGVkXG4iKQotICAgICAgICBzeXMuZXhpdCgyKQotICAgIGlmIHN5cy52ZXJzaW9uX2luZm8g
Pj0gKDMsIDApOgotICAgICAgICBleGVjKCJkZWYgZG9fZXhlYyhjbywgbG9jKTogZXhlYyhjbywg
bG9jKVxuIikKLSAgICAgICAgaW1wb3J0IHBpY2tsZQotICAgICAgICBzb3VyY2VzID0gc291cmNl
cy5lbmNvZGUoImFzY2lpIikgIyBlbnN1cmUgYnl0ZXMKLSAgICAgICAgc291cmNlcyA9IHBpY2ts
ZS5sb2Fkcyh6bGliLmRlY29tcHJlc3MoYmFzZTY0LmRlY29kZWJ5dGVzKHNvdXJjZXMpKSkKLSAg
ICBlbHNlOgotICAgICAgICBpbXBvcnQgY1BpY2tsZSBhcyBwaWNrbGUKLSAgICAgICAgZXhlYygi
ZGVmIGRvX2V4ZWMoY28sIGxvYyk6IGV4ZWMgY28gaW4gbG9jXG4iKQotICAgICAgICBzb3VyY2Vz
ID0gcGlja2xlLmxvYWRzKHpsaWIuZGVjb21wcmVzcyhiYXNlNjQuZGVjb2Rlc3RyaW5nKHNvdXJj
ZXMpKSkKLQotICAgIGltcG9ydGVyID0gRGljdEltcG9ydGVyKHNvdXJjZXMpCi0gICAgc3lzLm1l
dGFfcGF0aC5pbnNlcnQoMCwgaW1wb3J0ZXIpCi0gICAgZW50cnkgPSAiQEVOVFJZQCIKLSAgICBk
b19leGVjKGVudHJ5LCBsb2NhbHMoKSkgIyBub3FhCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0
cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvdGVybWluYWwucHkgYi9XZWJEcml2
ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvdGVybWluYWwucHkKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyNWY1NTNlZjJjLi4wMDAwMDAwMDAwMAotLS0g
YS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvdGVybWlu
YWwucHkKKysrIC9kZXYvbnVsbApAQCAtMSw1OTMgKzAsMCBAQAotIiIiIHRlcm1pbmFsIHJlcG9y
dGluZyBvZiB0aGUgZnVsbCB0ZXN0aW5nIHByb2Nlc3MuCi0KLVRoaXMgaXMgYSBnb29kIHNvdXJj
ZSBmb3IgbG9va2luZyBhdCB0aGUgdmFyaW91cyByZXBvcnRpbmcgaG9va3MuCi0iIiIKLWZyb20g
X3B5dGVzdC5tYWluIGltcG9ydCBFWElUX09LLCBFWElUX1RFU1RTRkFJTEVELCBFWElUX0lOVEVS
UlVQVEVELCBcCi0gICAgRVhJVF9VU0FHRUVSUk9SLCBFWElUX05PVEVTVFNDT0xMRUNURUQKLWlt
cG9ydCBweXRlc3QKLWltcG9ydCBweQotaW1wb3J0IHN5cwotaW1wb3J0IHRpbWUKLWltcG9ydCBw
bGF0Zm9ybQotCi1pbXBvcnQgX3B5dGVzdC5fcGx1Z2d5IGFzIHBsdWdneQotCi0KLWRlZiBweXRl
c3RfYWRkb3B0aW9uKHBhcnNlcik6Ci0gICAgZ3JvdXAgPSBwYXJzZXIuZ2V0Z3JvdXAoInRlcm1p
bmFsIHJlcG9ydGluZyIsICJyZXBvcnRpbmciLCBhZnRlcj0iZ2VuZXJhbCIpCi0gICAgZ3JvdXAu
X2FkZG9wdGlvbignLXYnLCAnLS12ZXJib3NlJywgYWN0aW9uPSJjb3VudCIsCi0gICAgICAgICAg
ICAgICBkZXN0PSJ2ZXJib3NlIiwgZGVmYXVsdD0wLCBoZWxwPSJpbmNyZWFzZSB2ZXJib3NpdHku
IiksCi0gICAgZ3JvdXAuX2FkZG9wdGlvbignLXEnLCAnLS1xdWlldCcsIGFjdGlvbj0iY291bnQi
LAotICAgICAgICAgICAgICAgZGVzdD0icXVpZXQiLCBkZWZhdWx0PTAsIGhlbHA9ImRlY3JlYXNl
IHZlcmJvc2l0eS4iKSwKLSAgICBncm91cC5fYWRkb3B0aW9uKCctcicsCi0gICAgICAgICBhY3Rp
b249InN0b3JlIiwgZGVzdD0icmVwb3J0Y2hhcnMiLCBkZWZhdWx0PU5vbmUsIG1ldGF2YXI9ImNo
YXJzIiwKLSAgICAgICAgIGhlbHA9InNob3cgZXh0cmEgdGVzdCBzdW1tYXJ5IGluZm8gYXMgc3Bl
Y2lmaWVkIGJ5IGNoYXJzIChmKWFpbGVkLCAiCi0gICAgICAgICAgICAgICIoRSllcnJvciwgKHMp
c2tpcHBlZCwgKHgpZmFpbGVkLCAoWClwYXNzZWQgKHcpcHl0ZXN0LXdhcm5pbmdzICIKLSAgICAg
ICAgICAgICAgIihwKXBhc3NlZCwgKFApcGFzc2VkIHdpdGggb3V0cHV0LCAoYSlhbGwgZXhjZXB0
IHBQLiIpCi0gICAgZ3JvdXAuX2FkZG9wdGlvbignLWwnLCAnLS1zaG93bG9jYWxzJywKLSAgICAg
ICAgIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9InNob3dsb2NhbHMiLCBkZWZhdWx0PUZhbHNl
LAotICAgICAgICAgaGVscD0ic2hvdyBsb2NhbHMgaW4gdHJhY2ViYWNrcyAoZGlzYWJsZWQgYnkg
ZGVmYXVsdCkuIikKLSAgICBncm91cC5fYWRkb3B0aW9uKCctLXJlcG9ydCcsCi0gICAgICAgICBh
Y3Rpb249InN0b3JlIiwgZGVzdD0icmVwb3J0IiwgZGVmYXVsdD1Ob25lLCBtZXRhdmFyPSJvcHRz
IiwKLSAgICAgICAgIGhlbHA9IihkZXByZWNhdGVkLCB1c2UgLXIpIikKLSAgICBncm91cC5fYWRk
b3B0aW9uKCctLXRiJywgbWV0YXZhcj0ic3R5bGUiLAotICAgICAgICAgICAgICAgYWN0aW9uPSJz
dG9yZSIsIGRlc3Q9InRic3R5bGUiLCBkZWZhdWx0PSdhdXRvJywKLSAgICAgICAgICAgICAgIGNo
b2ljZXM9WydhdXRvJywgJ2xvbmcnLCAnc2hvcnQnLCAnbm8nLCAnbGluZScsICduYXRpdmUnXSwK
LSAgICAgICAgICAgICAgIGhlbHA9InRyYWNlYmFjayBwcmludCBtb2RlIChhdXRvL2xvbmcvc2hv
cnQvbGluZS9uYXRpdmUvbm8pLiIpCi0gICAgZ3JvdXAuX2FkZG9wdGlvbignLS1mdWxsdHJhY2Un
LCAnLS1mdWxsLXRyYWNlJywKLSAgICAgICAgICAgICAgIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRl
ZmF1bHQ9RmFsc2UsCi0gICAgICAgICAgICAgICBoZWxwPSJkb24ndCBjdXQgYW55IHRyYWNlYmFj
a3MgKGRlZmF1bHQgaXMgdG8gY3V0KS4iKQotICAgIGdyb3VwLl9hZGRvcHRpb24oJy0tY29sb3In
LCBtZXRhdmFyPSJjb2xvciIsCi0gICAgICAgICAgICAgICBhY3Rpb249InN0b3JlIiwgZGVzdD0i
Y29sb3IiLCBkZWZhdWx0PSdhdXRvJywKLSAgICAgICAgICAgICAgIGNob2ljZXM9Wyd5ZXMnLCAn
bm8nLCAnYXV0byddLAotICAgICAgICAgICAgICAgaGVscD0iY29sb3IgdGVybWluYWwgb3V0cHV0
ICh5ZXMvbm8vYXV0bykuIikKLQotZGVmIHB5dGVzdF9jb25maWd1cmUoY29uZmlnKToKLSAgICBj
b25maWcub3B0aW9uLnZlcmJvc2UgLT0gY29uZmlnLm9wdGlvbi5xdWlldAotICAgIHJlcG9ydGVy
ID0gVGVybWluYWxSZXBvcnRlcihjb25maWcsIHN5cy5zdGRvdXQpCi0gICAgY29uZmlnLnBsdWdp
bm1hbmFnZXIucmVnaXN0ZXIocmVwb3J0ZXIsICd0ZXJtaW5hbHJlcG9ydGVyJykKLSAgICBpZiBj
b25maWcub3B0aW9uLmRlYnVnIG9yIGNvbmZpZy5vcHRpb24udHJhY2Vjb25maWc6Ci0gICAgICAg
IGRlZiBteXdyaXRlcih0YWdzLCBhcmdzKToKLSAgICAgICAgICAgIG1zZyA9ICIgIi5qb2luKG1h
cChzdHIsIGFyZ3MpKQotICAgICAgICAgICAgcmVwb3J0ZXIud3JpdGVfbGluZSgiW3RyYWNlY29u
ZmlnXSAiICsgbXNnKQotICAgICAgICBjb25maWcudHJhY2Uucm9vdC5zZXRwcm9jZXNzb3IoInB5
dGVzdDpjb25maWciLCBteXdyaXRlcikKLQotZGVmIGdldHJlcG9ydG9wdChjb25maWcpOgotICAg
IHJlcG9ydG9wdHMgPSAiIgotICAgIG9wdHZhbHVlID0gY29uZmlnLm9wdGlvbi5yZXBvcnQKLSAg
ICBpZiBvcHR2YWx1ZToKLSAgICAgICAgcHkuYnVpbHRpbi5wcmludF8oIkRFUFJFQ0FURUQ6IHVz
ZSAtciBpbnN0ZWFkIG9mIC0tcmVwb3J0IG9wdGlvbi4iLAotICAgICAgICAgICAgZmlsZT1zeXMu
c3RkZXJyKQotICAgICAgICBpZiBvcHR2YWx1ZToKLSAgICAgICAgICAgIGZvciBzZXR0aW5nIGlu
IG9wdHZhbHVlLnNwbGl0KCIsIik6Ci0gICAgICAgICAgICAgICAgc2V0dGluZyA9IHNldHRpbmcu
c3RyaXAoKQotICAgICAgICAgICAgICAgIGlmIHNldHRpbmcgPT0gInNraXBwZWQiOgotICAgICAg
ICAgICAgICAgICAgICByZXBvcnRvcHRzICs9ICJzIgotICAgICAgICAgICAgICAgIGVsaWYgc2V0
dGluZyA9PSAieGZhaWxlZCI6Ci0gICAgICAgICAgICAgICAgICAgIHJlcG9ydG9wdHMgKz0gIngi
Ci0gICAgcmVwb3J0Y2hhcnMgPSBjb25maWcub3B0aW9uLnJlcG9ydGNoYXJzCi0gICAgaWYgcmVw
b3J0Y2hhcnM6Ci0gICAgICAgIGZvciBjaGFyIGluIHJlcG9ydGNoYXJzOgotICAgICAgICAgICAg
aWYgY2hhciBub3QgaW4gcmVwb3J0b3B0cyBhbmQgY2hhciAhPSAnYSc6Ci0gICAgICAgICAgICAg
ICAgcmVwb3J0b3B0cyArPSBjaGFyCi0gICAgICAgICAgICBlbGlmIGNoYXIgPT0gJ2EnOgotICAg
ICAgICAgICAgICAgIHJlcG9ydG9wdHMgPSAnZkVzeFh3JwotICAgIHJldHVybiByZXBvcnRvcHRz
Ci0KLWRlZiBweXRlc3RfcmVwb3J0X3Rlc3RzdGF0dXMocmVwb3J0KToKLSAgICBpZiByZXBvcnQu
cGFzc2VkOgotICAgICAgICBsZXR0ZXIgPSAiLiIKLSAgICBlbGlmIHJlcG9ydC5za2lwcGVkOgot
ICAgICAgICBsZXR0ZXIgPSAicyIKLSAgICBlbGlmIHJlcG9ydC5mYWlsZWQ6Ci0gICAgICAgIGxl
dHRlciA9ICJGIgotICAgICAgICBpZiByZXBvcnQud2hlbiAhPSAiY2FsbCI6Ci0gICAgICAgICAg
ICBsZXR0ZXIgPSAiZiIKLSAgICByZXR1cm4gcmVwb3J0Lm91dGNvbWUsIGxldHRlciwgcmVwb3J0
Lm91dGNvbWUudXBwZXIoKQotCi1jbGFzcyBXYXJuaW5nUmVwb3J0OgotICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBjb2RlLCBtZXNzYWdlLCBub2RlaWQ9Tm9uZSwgZnNsb2NhdGlvbj1Ob25lKToKLSAg
ICAgICAgc2VsZi5jb2RlID0gY29kZQotICAgICAgICBzZWxmLm1lc3NhZ2UgPSBtZXNzYWdlCi0g
ICAgICAgIHNlbGYubm9kZWlkID0gbm9kZWlkCi0gICAgICAgIHNlbGYuZnNsb2NhdGlvbiA9IGZz
bG9jYXRpb24KLQotCi1jbGFzcyBUZXJtaW5hbFJlcG9ydGVyOgotICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBjb25maWcsIGZpbGU9Tm9uZSk6Ci0gICAgICAgIGltcG9ydCBfcHl0ZXN0LmNvbmZpZwot
ICAgICAgICBzZWxmLmNvbmZpZyA9IGNvbmZpZwotICAgICAgICBzZWxmLnZlcmJvc2l0eSA9IHNl
bGYuY29uZmlnLm9wdGlvbi52ZXJib3NlCi0gICAgICAgIHNlbGYuc2hvd2hlYWRlciA9IHNlbGYu
dmVyYm9zaXR5ID49IDAKLSAgICAgICAgc2VsZi5zaG93ZnNwYXRoID0gc2VsZi52ZXJib3NpdHkg
Pj0gMAotICAgICAgICBzZWxmLnNob3dsb25ndGVzdGluZm8gPSBzZWxmLnZlcmJvc2l0eSA+IDAK
LSAgICAgICAgc2VsZi5fbnVtY29sbGVjdGVkID0gMAotCi0gICAgICAgIHNlbGYuc3RhdHMgPSB7
fQotICAgICAgICBzZWxmLnN0YXJ0ZGlyID0gcHkucGF0aC5sb2NhbCgpCi0gICAgICAgIGlmIGZp
bGUgaXMgTm9uZToKLSAgICAgICAgICAgIGZpbGUgPSBzeXMuc3Rkb3V0Ci0gICAgICAgIHNlbGYu
X3R3ID0gc2VsZi53cml0ZXIgPSBfcHl0ZXN0LmNvbmZpZy5jcmVhdGVfdGVybWluYWxfd3JpdGVy
KGNvbmZpZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSkKLSAgICAgICAgc2VsZi5jdXJyZW50ZnNwYXRo
ID0gTm9uZQotICAgICAgICBzZWxmLnJlcG9ydGNoYXJzID0gZ2V0cmVwb3J0b3B0KGNvbmZpZykK
LSAgICAgICAgc2VsZi5oYXNtYXJrdXAgPSBzZWxmLl90dy5oYXNtYXJrdXAKLSAgICAgICAgc2Vs
Zi5pc2F0dHkgPSBmaWxlLmlzYXR0eSgpCi0KLSAgICBkZWYgaGFzb3B0KHNlbGYsIGNoYXIpOgot
ICAgICAgICBjaGFyID0geyd4ZmFpbGVkJzogJ3gnLCAnc2tpcHBlZCc6ICdzJ30uZ2V0KGNoYXIs
IGNoYXIpCi0gICAgICAgIHJldHVybiBjaGFyIGluIHNlbGYucmVwb3J0Y2hhcnMKLQotICAgIGRl
ZiB3cml0ZV9mc3BhdGhfcmVzdWx0KHNlbGYsIG5vZGVpZCwgcmVzKToKLSAgICAgICAgZnNwYXRo
ID0gc2VsZi5jb25maWcucm9vdGRpci5qb2luKG5vZGVpZC5zcGxpdCgiOjoiKVswXSkKLSAgICAg
ICAgaWYgZnNwYXRoICE9IHNlbGYuY3VycmVudGZzcGF0aDoKLSAgICAgICAgICAgIHNlbGYuY3Vy
cmVudGZzcGF0aCA9IGZzcGF0aAotICAgICAgICAgICAgZnNwYXRoID0gc2VsZi5zdGFydGRpci5i
ZXN0cmVscGF0aChmc3BhdGgpCi0gICAgICAgICAgICBzZWxmLl90dy5saW5lKCkKLSAgICAgICAg
ICAgIHNlbGYuX3R3LndyaXRlKGZzcGF0aCArICIgIikKLSAgICAgICAgc2VsZi5fdHcud3JpdGUo
cmVzKQotCi0gICAgZGVmIHdyaXRlX2Vuc3VyZV9wcmVmaXgoc2VsZiwgcHJlZml4LCBleHRyYT0i
IiwgKiprd2FyZ3MpOgotICAgICAgICBpZiBzZWxmLmN1cnJlbnRmc3BhdGggIT0gcHJlZml4Ogot
ICAgICAgICAgICAgc2VsZi5fdHcubGluZSgpCi0gICAgICAgICAgICBzZWxmLmN1cnJlbnRmc3Bh
dGggPSBwcmVmaXgKLSAgICAgICAgICAgIHNlbGYuX3R3LndyaXRlKHByZWZpeCkKLSAgICAgICAg
aWYgZXh0cmE6Ci0gICAgICAgICAgICBzZWxmLl90dy53cml0ZShleHRyYSwgKiprd2FyZ3MpCi0g
ICAgICAgICAgICBzZWxmLmN1cnJlbnRmc3BhdGggPSAtMgotCi0gICAgZGVmIGVuc3VyZV9uZXds
aW5lKHNlbGYpOgotICAgICAgICBpZiBzZWxmLmN1cnJlbnRmc3BhdGg6Ci0gICAgICAgICAgICBz
ZWxmLl90dy5saW5lKCkKLSAgICAgICAgICAgIHNlbGYuY3VycmVudGZzcGF0aCA9IE5vbmUKLQot
ICAgIGRlZiB3cml0ZShzZWxmLCBjb250ZW50LCAqKm1hcmt1cCk6Ci0gICAgICAgIHNlbGYuX3R3
LndyaXRlKGNvbnRlbnQsICoqbWFya3VwKQotCi0gICAgZGVmIHdyaXRlX2xpbmUoc2VsZiwgbGlu
ZSwgKiptYXJrdXApOgotICAgICAgICBpZiBub3QgcHkuYnVpbHRpbi5faXN0ZXh0KGxpbmUpOgot
ICAgICAgICAgICAgbGluZSA9IHB5LmJ1aWx0aW4udGV4dChsaW5lLCBlcnJvcnM9InJlcGxhY2Ui
KQotICAgICAgICBzZWxmLmVuc3VyZV9uZXdsaW5lKCkKLSAgICAgICAgc2VsZi5fdHcubGluZShs
aW5lLCAqKm1hcmt1cCkKLQotICAgIGRlZiByZXdyaXRlKHNlbGYsIGxpbmUsICoqbWFya3VwKToK
LSAgICAgICAgbGluZSA9IHN0cihsaW5lKQotICAgICAgICBzZWxmLl90dy53cml0ZSgiXHIiICsg
bGluZSwgKiptYXJrdXApCi0KLSAgICBkZWYgd3JpdGVfc2VwKHNlbGYsIHNlcCwgdGl0bGU9Tm9u
ZSwgKiptYXJrdXApOgotICAgICAgICBzZWxmLmVuc3VyZV9uZXdsaW5lKCkKLSAgICAgICAgc2Vs
Zi5fdHcuc2VwKHNlcCwgdGl0bGUsICoqbWFya3VwKQotCi0gICAgZGVmIHNlY3Rpb24oc2VsZiwg
dGl0bGUsIHNlcD0iPSIsICoqa3cpOgotICAgICAgICBzZWxmLl90dy5zZXAoc2VwLCB0aXRsZSwg
KiprdykKLQotICAgIGRlZiBsaW5lKHNlbGYsIG1zZywgKiprdyk6Ci0gICAgICAgIHNlbGYuX3R3
LmxpbmUobXNnLCAqKmt3KQotCi0gICAgZGVmIHB5dGVzdF9pbnRlcm5hbGVycm9yKHNlbGYsIGV4
Y3JlcHIpOgotICAgICAgICBmb3IgbGluZSBpbiBweS5idWlsdGluLnRleHQoZXhjcmVwcikuc3Bs
aXQoIlxuIik6Ci0gICAgICAgICAgICBzZWxmLndyaXRlX2xpbmUoIklOVEVSTkFMRVJST1I+ICIg
KyBsaW5lKQotICAgICAgICByZXR1cm4gMQotCi0gICAgZGVmIHB5dGVzdF9sb2d3YXJuaW5nKHNl
bGYsIGNvZGUsIGZzbG9jYXRpb24sIG1lc3NhZ2UsIG5vZGVpZCk6Ci0gICAgICAgIHdhcm5pbmdz
ID0gc2VsZi5zdGF0cy5zZXRkZWZhdWx0KCJ3YXJuaW5ncyIsIFtdKQotICAgICAgICBpZiBpc2lu
c3RhbmNlKGZzbG9jYXRpb24sIHR1cGxlKToKLSAgICAgICAgICAgIGZzbG9jYXRpb24gPSAiJXM6
JWQiICUgZnNsb2NhdGlvbgotICAgICAgICB3YXJuaW5nID0gV2FybmluZ1JlcG9ydChjb2RlPWNv
ZGUsIGZzbG9jYXRpb249ZnNsb2NhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbWVzc2FnZT1tZXNzYWdlLCBub2RlaWQ9bm9kZWlkKQotICAgICAgICB3YXJuaW5ncy5hcHBl
bmQod2FybmluZykKLQotICAgIGRlZiBweXRlc3RfcGx1Z2luX3JlZ2lzdGVyZWQoc2VsZiwgcGx1
Z2luKToKLSAgICAgICAgaWYgc2VsZi5jb25maWcub3B0aW9uLnRyYWNlY29uZmlnOgotICAgICAg
ICAgICAgbXNnID0gIlBMVUdJTiByZWdpc3RlcmVkOiAlcyIgJSAocGx1Z2luLCkKLSAgICAgICAg
ICAgICMgWFhYIHRoaXMgZXZlbnQgbWF5IGhhcHBlbiBkdXJpbmcgc2V0dXAvdGVhcmRvd24gdGlt
ZQotICAgICAgICAgICAgIyAgICAgd2hpY2ggdW5mb3J0dW5hdGVseSBjYXB0dXJlcyBvdXIgb3V0
cHV0IGhlcmUKLSAgICAgICAgICAgICMgICAgIHdoaWNoIGdhcmJsZXMgb3VyIG91dHB1dCBpZiB3
ZSB1c2Ugc2VsZi53cml0ZV9saW5lCi0gICAgICAgICAgICBzZWxmLndyaXRlX2xpbmUobXNnKQot
Ci0gICAgZGVmIHB5dGVzdF9kZXNlbGVjdGVkKHNlbGYsIGl0ZW1zKToKLSAgICAgICAgc2VsZi5z
dGF0cy5zZXRkZWZhdWx0KCdkZXNlbGVjdGVkJywgW10pLmV4dGVuZChpdGVtcykKLQotICAgIGRl
ZiBweXRlc3RfcnVudGVzdF9sb2dzdGFydChzZWxmLCBub2RlaWQsIGxvY2F0aW9uKToKLSAgICAg
ICAgIyBlbnN1cmUgdGhhdCB0aGUgcGF0aCBpcyBwcmludGVkIGJlZm9yZSB0aGUKLSAgICAgICAg
IyAxc3QgdGVzdCBvZiBhIG1vZHVsZSBzdGFydHMgcnVubmluZwotICAgICAgICBpZiBzZWxmLnNo
b3dsb25ndGVzdGluZm86Ci0gICAgICAgICAgICBsaW5lID0gc2VsZi5fbG9jYXRpb25saW5lKG5v
ZGVpZCwgKmxvY2F0aW9uKQotICAgICAgICAgICAgc2VsZi53cml0ZV9lbnN1cmVfcHJlZml4KGxp
bmUsICIiKQotICAgICAgICBlbGlmIHNlbGYuc2hvd2ZzcGF0aDoKLSAgICAgICAgICAgIGZzaWQg
PSBub2RlaWQuc3BsaXQoIjo6IilbMF0KLSAgICAgICAgICAgIHNlbGYud3JpdGVfZnNwYXRoX3Jl
c3VsdChmc2lkLCAiIikKLQotICAgIGRlZiBweXRlc3RfcnVudGVzdF9sb2dyZXBvcnQoc2VsZiwg
cmVwb3J0KToKLSAgICAgICAgcmVwID0gcmVwb3J0Ci0gICAgICAgIHJlcyA9IHNlbGYuY29uZmln
Lmhvb2sucHl0ZXN0X3JlcG9ydF90ZXN0c3RhdHVzKHJlcG9ydD1yZXApCi0gICAgICAgIGNhdCwg
bGV0dGVyLCB3b3JkID0gcmVzCi0gICAgICAgIHNlbGYuc3RhdHMuc2V0ZGVmYXVsdChjYXQsIFtd
KS5hcHBlbmQocmVwKQotICAgICAgICBzZWxmLl90ZXN0c19yYW4gPSBUcnVlCi0gICAgICAgIGlm
IG5vdCBsZXR0ZXIgYW5kIG5vdCB3b3JkOgotICAgICAgICAgICAgIyBwcm9iYWJseSBwYXNzZWQg
c2V0dXAvdGVhcmRvd24KLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBpZiBzZWxmLnZlcmJv
c2l0eSA8PSAwOgotICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIocmVwLCAnbm9kZScpIGFuZCBz
ZWxmLnNob3dmc3BhdGg6Ci0gICAgICAgICAgICAgICAgc2VsZi53cml0ZV9mc3BhdGhfcmVzdWx0
KHJlcC5ub2RlaWQsIGxldHRlcikKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAg
c2VsZi5fdHcud3JpdGUobGV0dGVyKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgaWYgaXNp
bnN0YW5jZSh3b3JkLCB0dXBsZSk6Ci0gICAgICAgICAgICAgICAgd29yZCwgbWFya3VwID0gd29y
ZAotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBpZiByZXAucGFzc2VkOgotICAg
ICAgICAgICAgICAgICAgICBtYXJrdXAgPSB7J2dyZWVuJzpUcnVlfQotICAgICAgICAgICAgICAg
IGVsaWYgcmVwLmZhaWxlZDoKLSAgICAgICAgICAgICAgICAgICAgbWFya3VwID0geydyZWQnOlRy
dWV9Ci0gICAgICAgICAgICAgICAgZWxpZiByZXAuc2tpcHBlZDoKLSAgICAgICAgICAgICAgICAg
ICAgbWFya3VwID0geyd5ZWxsb3cnOlRydWV9Ci0gICAgICAgICAgICBsaW5lID0gc2VsZi5fbG9j
YXRpb25saW5lKHJlcC5ub2RlaWQsICpyZXAubG9jYXRpb24pCi0gICAgICAgICAgICBpZiBub3Qg
aGFzYXR0cihyZXAsICdub2RlJyk6Ci0gICAgICAgICAgICAgICAgc2VsZi53cml0ZV9lbnN1cmVf
cHJlZml4KGxpbmUsIHdvcmQsICoqbWFya3VwKQotICAgICAgICAgICAgICAgICNzZWxmLl90dy53
cml0ZSh3b3JkLCAqKm1hcmt1cCkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAg
c2VsZi5lbnN1cmVfbmV3bGluZSgpCi0gICAgICAgICAgICAgICAgaWYgaGFzYXR0cihyZXAsICdu
b2RlJyk6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3R3LndyaXRlKCJbJXNdICIgJSByZXAu
bm9kZS5nYXRld2F5LmlkKQotICAgICAgICAgICAgICAgIHNlbGYuX3R3LndyaXRlKHdvcmQsICoq
bWFya3VwKQotICAgICAgICAgICAgICAgIHNlbGYuX3R3LndyaXRlKCIgIiArIGxpbmUpCi0gICAg
ICAgICAgICAgICAgc2VsZi5jdXJyZW50ZnNwYXRoID0gLTIKLQotICAgIGRlZiBweXRlc3RfY29s
bGVjdGlvbihzZWxmKToKLSAgICAgICAgaWYgbm90IHNlbGYuaXNhdHR5IGFuZCBzZWxmLmNvbmZp
Zy5vcHRpb24udmVyYm9zZSA+PSAxOgotICAgICAgICAgICAgc2VsZi53cml0ZSgiY29sbGVjdGlu
ZyAuLi4gIiwgYm9sZD1UcnVlKQotCi0gICAgZGVmIHB5dGVzdF9jb2xsZWN0cmVwb3J0KHNlbGYs
IHJlcG9ydCk6Ci0gICAgICAgIGlmIHJlcG9ydC5mYWlsZWQ6Ci0gICAgICAgICAgICBzZWxmLnN0
YXRzLnNldGRlZmF1bHQoImVycm9yIiwgW10pLmFwcGVuZChyZXBvcnQpCi0gICAgICAgIGVsaWYg
cmVwb3J0LnNraXBwZWQ6Ci0gICAgICAgICAgICBzZWxmLnN0YXRzLnNldGRlZmF1bHQoInNraXBw
ZWQiLCBbXSkuYXBwZW5kKHJlcG9ydCkKLSAgICAgICAgaXRlbXMgPSBbeCBmb3IgeCBpbiByZXBv
cnQucmVzdWx0IGlmIGlzaW5zdGFuY2UoeCwgcHl0ZXN0Lkl0ZW0pXQotICAgICAgICBzZWxmLl9u
dW1jb2xsZWN0ZWQgKz0gbGVuKGl0ZW1zKQotICAgICAgICBpZiBzZWxmLmlzYXR0eToKLSAgICAg
ICAgICAgICNzZWxmLndyaXRlX2ZzcGF0aF9yZXN1bHQocmVwb3J0Lm5vZGVpZCwgJ0UnKQotICAg
ICAgICAgICAgc2VsZi5yZXBvcnRfY29sbGVjdCgpCi0KLSAgICBkZWYgcmVwb3J0X2NvbGxlY3Qo
c2VsZiwgZmluYWw9RmFsc2UpOgotICAgICAgICBpZiBzZWxmLmNvbmZpZy5vcHRpb24udmVyYm9z
ZSA8IDA6Ci0gICAgICAgICAgICByZXR1cm4KLQotICAgICAgICBlcnJvcnMgPSBsZW4oc2VsZi5z
dGF0cy5nZXQoJ2Vycm9yJywgW10pKQotICAgICAgICBza2lwcGVkID0gbGVuKHNlbGYuc3RhdHMu
Z2V0KCdza2lwcGVkJywgW10pKQotICAgICAgICBpZiBmaW5hbDoKLSAgICAgICAgICAgIGxpbmUg
PSAiY29sbGVjdGVkICIKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGxpbmUgPSAiY29sbGVj
dGluZyAiCi0gICAgICAgIGxpbmUgKz0gc3RyKHNlbGYuX251bWNvbGxlY3RlZCkgKyAiIGl0ZW1z
IgotICAgICAgICBpZiBlcnJvcnM6Ci0gICAgICAgICAgICBsaW5lICs9ICIgLyAlZCBlcnJvcnMi
ICUgZXJyb3JzCi0gICAgICAgIGlmIHNraXBwZWQ6Ci0gICAgICAgICAgICBsaW5lICs9ICIgLyAl
ZCBza2lwcGVkIiAlIHNraXBwZWQKLSAgICAgICAgaWYgc2VsZi5pc2F0dHk6Ci0gICAgICAgICAg
ICBpZiBmaW5hbDoKLSAgICAgICAgICAgICAgICBsaW5lICs9ICIgXG4iCi0gICAgICAgICAgICBz
ZWxmLnJld3JpdGUobGluZSwgYm9sZD1UcnVlKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAg
c2VsZi53cml0ZV9saW5lKGxpbmUpCi0KLSAgICBkZWYgcHl0ZXN0X2NvbGxlY3Rpb25fbW9kaWZ5
aXRlbXMoc2VsZik6Ci0gICAgICAgIHNlbGYucmVwb3J0X2NvbGxlY3QoVHJ1ZSkKLQotICAgIEBw
eXRlc3QuaG9va2ltcGwodHJ5bGFzdD1UcnVlKQotICAgIGRlZiBweXRlc3Rfc2Vzc2lvbnN0YXJ0
KHNlbGYsIHNlc3Npb24pOgotICAgICAgICBzZWxmLl9zZXNzaW9uc3RhcnR0aW1lID0gdGltZS50
aW1lKCkKLSAgICAgICAgaWYgbm90IHNlbGYuc2hvd2hlYWRlcjoKLSAgICAgICAgICAgIHJldHVy
bgotICAgICAgICBzZWxmLndyaXRlX3NlcCgiPSIsICJ0ZXN0IHNlc3Npb24gc3RhcnRzIiwgYm9s
ZD1UcnVlKQotICAgICAgICB2ZXJpbmZvID0gcGxhdGZvcm0ucHl0aG9uX3ZlcnNpb24oKQotICAg
ICAgICBtc2cgPSAicGxhdGZvcm0gJXMgLS0gUHl0aG9uICVzIiAlIChzeXMucGxhdGZvcm0sIHZl
cmluZm8pCi0gICAgICAgIGlmIGhhc2F0dHIoc3lzLCAncHlweV92ZXJzaW9uX2luZm8nKToKLSAg
ICAgICAgICAgIHZlcmluZm8gPSAiLiIuam9pbihtYXAoc3RyLCBzeXMucHlweV92ZXJzaW9uX2lu
Zm9bOjNdKSkKLSAgICAgICAgICAgIG1zZyArPSAiW3B5cHktJXMtJXNdIiAlICh2ZXJpbmZvLCBz
eXMucHlweV92ZXJzaW9uX2luZm9bM10pCi0gICAgICAgIG1zZyArPSAiLCBweXRlc3QtJXMsIHB5
LSVzLCBwbHVnZ3ktJXMiICUgKAotICAgICAgICAgICAgICAgcHl0ZXN0Ll9fdmVyc2lvbl9fLCBw
eS5fX3ZlcnNpb25fXywgcGx1Z2d5Ll9fdmVyc2lvbl9fKQotICAgICAgICBpZiBzZWxmLnZlcmJv
c2l0eSA+IDAgb3Igc2VsZi5jb25maWcub3B0aW9uLmRlYnVnIG9yIFwKLSAgICAgICAgICAgZ2V0
YXR0cihzZWxmLmNvbmZpZy5vcHRpb24sICdwYXN0ZWJpbicsIE5vbmUpOgotICAgICAgICAgICAg
bXNnICs9ICIgLS0gIiArIHN0cihzeXMuZXhlY3V0YWJsZSkKLSAgICAgICAgc2VsZi53cml0ZV9s
aW5lKG1zZykKLSAgICAgICAgbGluZXMgPSBzZWxmLmNvbmZpZy5ob29rLnB5dGVzdF9yZXBvcnRf
aGVhZGVyKAotICAgICAgICAgICAgY29uZmlnPXNlbGYuY29uZmlnLCBzdGFydGRpcj1zZWxmLnN0
YXJ0ZGlyKQotICAgICAgICBsaW5lcy5yZXZlcnNlKCkKLSAgICAgICAgZm9yIGxpbmUgaW4gZmxh
dHRlbihsaW5lcyk6Ci0gICAgICAgICAgICBzZWxmLndyaXRlX2xpbmUobGluZSkKLQotICAgIGRl
ZiBweXRlc3RfcmVwb3J0X2hlYWRlcihzZWxmLCBjb25maWcpOgotICAgICAgICBpbmlmaWxlID0g
IiIKLSAgICAgICAgaWYgY29uZmlnLmluaWZpbGU6Ci0gICAgICAgICAgICBpbmlmaWxlID0gY29u
ZmlnLnJvb3RkaXIuYmVzdHJlbHBhdGgoY29uZmlnLmluaWZpbGUpCi0gICAgICAgIGxpbmVzID0g
WyJyb290ZGlyOiAlcywgaW5pZmlsZTogJXMiICUoY29uZmlnLnJvb3RkaXIsIGluaWZpbGUpXQot
Ci0gICAgICAgIHBsdWdpbmluZm8gPSBjb25maWcucGx1Z2lubWFuYWdlci5saXN0X3BsdWdpbl9k
aXN0aW5mbygpCi0gICAgICAgIGlmIHBsdWdpbmluZm86Ci0KLSAgICAgICAgICAgIGxpbmVzLmFw
cGVuZCgKLSAgICAgICAgICAgICAgICAicGx1Z2luczogJXMiICUgIiwgIi5qb2luKF9wbHVnaW5f
bmFtZXZlcnNpb25zKHBsdWdpbmluZm8pKSkKLSAgICAgICAgcmV0dXJuIGxpbmVzCi0KLSAgICBk
ZWYgcHl0ZXN0X2NvbGxlY3Rpb25fZmluaXNoKHNlbGYsIHNlc3Npb24pOgotICAgICAgICBpZiBz
ZWxmLmNvbmZpZy5vcHRpb24uY29sbGVjdG9ubHk6Ci0gICAgICAgICAgICBzZWxmLl9wcmludGNv
bGxlY3RlZGl0ZW1zKHNlc3Npb24uaXRlbXMpCi0gICAgICAgICAgICBpZiBzZWxmLnN0YXRzLmdl
dCgnZmFpbGVkJyk6Ci0gICAgICAgICAgICAgICAgc2VsZi5fdHcuc2VwKCIhIiwgImNvbGxlY3Rp
b24gZmFpbHVyZXMiKQotICAgICAgICAgICAgICAgIGZvciByZXAgaW4gc2VsZi5zdGF0cy5nZXQo
J2ZhaWxlZCcpOgotICAgICAgICAgICAgICAgICAgICByZXAudG90ZXJtaW5hbChzZWxmLl90dykK
LSAgICAgICAgICAgICAgICByZXR1cm4gMQotICAgICAgICAgICAgcmV0dXJuIDAKLSAgICAgICAg
aWYgbm90IHNlbGYuc2hvd2hlYWRlcjoKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICAjZm9y
IGksIHRlc3RhcmcgaW4gZW51bWVyYXRlKHNlbGYuY29uZmlnLmFyZ3MpOgotICAgICAgICAjICAg
IHNlbGYud3JpdGVfbGluZSgidGVzdCBwYXRoICVkOiAlcyIgJShpKzEsIHRlc3RhcmcpKQotCi0g
ICAgZGVmIF9wcmludGNvbGxlY3RlZGl0ZW1zKHNlbGYsIGl0ZW1zKToKLSAgICAgICAgIyB0byBw
cmludCBvdXQgaXRlbXMgYW5kIHRoZWlyIHBhcmVudCBjb2xsZWN0b3JzCi0gICAgICAgICMgd2Ug
dGFrZSBjYXJlIHRvIGxlYXZlIG91dCBJbnN0YW5jZXMgYWthICgpCi0gICAgICAgICMgYmVjYXVz
ZSBsYXRlciB2ZXJzaW9ucyBhcmUgZ29pbmcgdG8gZ2V0IHJpZCBvZiB0aGVtIGFueXdheQotICAg
ICAgICBpZiBzZWxmLmNvbmZpZy5vcHRpb24udmVyYm9zZSA8IDA6Ci0gICAgICAgICAgICBpZiBz
ZWxmLmNvbmZpZy5vcHRpb24udmVyYm9zZSA8IC0xOgotICAgICAgICAgICAgICAgIGNvdW50cyA9
IHt9Ci0gICAgICAgICAgICAgICAgZm9yIGl0ZW0gaW4gaXRlbXM6Ci0gICAgICAgICAgICAgICAg
ICAgIG5hbWUgPSBpdGVtLm5vZGVpZC5zcGxpdCgnOjonLCAxKVswXQotICAgICAgICAgICAgICAg
ICAgICBjb3VudHNbbmFtZV0gPSBjb3VudHMuZ2V0KG5hbWUsIDApICsgMQotICAgICAgICAgICAg
ICAgIGZvciBuYW1lLCBjb3VudCBpbiBzb3J0ZWQoY291bnRzLml0ZW1zKCkpOgotICAgICAgICAg
ICAgICAgICAgICBzZWxmLl90dy5saW5lKCIlczogJWQiICUgKG5hbWUsIGNvdW50KSkKLSAgICAg
ICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgZm9yIGl0ZW0gaW4gaXRlbXM6Ci0gICAgICAg
ICAgICAgICAgICAgIG5vZGVpZCA9IGl0ZW0ubm9kZWlkCi0gICAgICAgICAgICAgICAgICAgIG5v
ZGVpZCA9IG5vZGVpZC5yZXBsYWNlKCI6OigpOjoiLCAiOjoiKQotICAgICAgICAgICAgICAgICAg
ICBzZWxmLl90dy5saW5lKG5vZGVpZCkKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBzdGFj
ayA9IFtdCi0gICAgICAgIGluZGVudCA9ICIiCi0gICAgICAgIGZvciBpdGVtIGluIGl0ZW1zOgot
ICAgICAgICAgICAgbmVlZGVkX2NvbGxlY3RvcnMgPSBpdGVtLmxpc3RjaGFpbigpWzE6XSAjIHN0
cmlwIHJvb3Qgbm9kZQotICAgICAgICAgICAgd2hpbGUgc3RhY2s6Ci0gICAgICAgICAgICAgICAg
aWYgc3RhY2sgPT0gbmVlZGVkX2NvbGxlY3RvcnNbOmxlbihzdGFjayldOgotICAgICAgICAgICAg
ICAgICAgICBicmVhawotICAgICAgICAgICAgICAgIHN0YWNrLnBvcCgpCi0gICAgICAgICAgICBm
b3IgY29sIGluIG5lZWRlZF9jb2xsZWN0b3JzW2xlbihzdGFjayk6XToKLSAgICAgICAgICAgICAg
ICBzdGFjay5hcHBlbmQoY29sKQotICAgICAgICAgICAgICAgICNpZiBjb2wubmFtZSA9PSAiKCki
OgotICAgICAgICAgICAgICAgICMgICAgY29udGludWUKLSAgICAgICAgICAgICAgICBpbmRlbnQg
PSAobGVuKHN0YWNrKSAtIDEpICogIiAgIgotICAgICAgICAgICAgICAgIHNlbGYuX3R3LmxpbmUo
IiVzJXMiICUgKGluZGVudCwgY29sKSkKLQotICAgIEBweXRlc3QuaG9va2ltcGwoaG9va3dyYXBw
ZXI9VHJ1ZSkKLSAgICBkZWYgcHl0ZXN0X3Nlc3Npb25maW5pc2goc2VsZiwgZXhpdHN0YXR1cyk6
Ci0gICAgICAgIG91dGNvbWUgPSB5aWVsZAotICAgICAgICBvdXRjb21lLmdldF9yZXN1bHQoKQot
ICAgICAgICBzZWxmLl90dy5saW5lKCIiKQotICAgICAgICBzdW1tYXJ5X2V4aXRfY29kZXMgPSAo
Ci0gICAgICAgICAgICBFWElUX09LLCBFWElUX1RFU1RTRkFJTEVELCBFWElUX0lOVEVSUlVQVEVE
LCBFWElUX1VTQUdFRVJST1IsCi0gICAgICAgICAgICBFWElUX05PVEVTVFNDT0xMRUNURUQpCi0g
ICAgICAgIGlmIGV4aXRzdGF0dXMgaW4gc3VtbWFyeV9leGl0X2NvZGVzOgotICAgICAgICAgICAg
c2VsZi5jb25maWcuaG9vay5weXRlc3RfdGVybWluYWxfc3VtbWFyeSh0ZXJtaW5hbHJlcG9ydGVy
PXNlbGYpCi0gICAgICAgICAgICBzZWxmLnN1bW1hcnlfZXJyb3JzKCkKLSAgICAgICAgICAgIHNl
bGYuc3VtbWFyeV9mYWlsdXJlcygpCi0gICAgICAgICAgICBzZWxmLnN1bW1hcnlfd2FybmluZ3Mo
KQotICAgICAgICAgICAgc2VsZi5zdW1tYXJ5X3Bhc3NlcygpCi0gICAgICAgIGlmIGV4aXRzdGF0
dXMgPT0gRVhJVF9JTlRFUlJVUFRFRDoKLSAgICAgICAgICAgIHNlbGYuX3JlcG9ydF9rZXlib2Fy
ZGludGVycnVwdCgpCi0gICAgICAgICAgICBkZWwgc2VsZi5fa2V5Ym9hcmRpbnRlcnJ1cHRfbWVt
bwotICAgICAgICBzZWxmLnN1bW1hcnlfZGVzZWxlY3RlZCgpCi0gICAgICAgIHNlbGYuc3VtbWFy
eV9zdGF0cygpCi0KLSAgICBkZWYgcHl0ZXN0X2tleWJvYXJkX2ludGVycnVwdChzZWxmLCBleGNp
bmZvKToKLSAgICAgICAgc2VsZi5fa2V5Ym9hcmRpbnRlcnJ1cHRfbWVtbyA9IGV4Y2luZm8uZ2V0
cmVwcihmdW5jYXJncz1UcnVlKQotCi0gICAgZGVmIHB5dGVzdF91bmNvbmZpZ3VyZShzZWxmKToK
LSAgICAgICAgaWYgaGFzYXR0cihzZWxmLCAnX2tleWJvYXJkaW50ZXJydXB0X21lbW8nKToKLSAg
ICAgICAgICAgIHNlbGYuX3JlcG9ydF9rZXlib2FyZGludGVycnVwdCgpCi0KLSAgICBkZWYgX3Jl
cG9ydF9rZXlib2FyZGludGVycnVwdChzZWxmKToKLSAgICAgICAgZXhjcmVwciA9IHNlbGYuX2tl
eWJvYXJkaW50ZXJydXB0X21lbW8KLSAgICAgICAgbXNnID0gZXhjcmVwci5yZXByY3Jhc2gubWVz
c2FnZQotICAgICAgICBzZWxmLndyaXRlX3NlcCgiISIsIG1zZykKLSAgICAgICAgaWYgIktleWJv
YXJkSW50ZXJydXB0IiBpbiBtc2c6Ci0gICAgICAgICAgICBpZiBzZWxmLmNvbmZpZy5vcHRpb24u
ZnVsbHRyYWNlOgotICAgICAgICAgICAgICAgIGV4Y3JlcHIudG90ZXJtaW5hbChzZWxmLl90dykK
LSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5fdHcubGluZSgidG8gc2hv
dyBhIGZ1bGwgdHJhY2ViYWNrIG9uIEtleWJvYXJkSW50ZXJydXB0IHVzZSAtLWZ1bGx0cmFjZSIs
IHllbGxvdz1UcnVlKQotICAgICAgICAgICAgICAgIGV4Y3JlcHIucmVwcmNyYXNoLnRvdGVybWlu
YWwoc2VsZi5fdHcpCi0KLSAgICBkZWYgX2xvY2F0aW9ubGluZShzZWxmLCBub2RlaWQsIGZzcGF0
aCwgbGluZW5vLCBkb21haW4pOgotICAgICAgICBkZWYgbWtyZWwobm9kZWlkKToKLSAgICAgICAg
ICAgIGxpbmUgPSBzZWxmLmNvbmZpZy5jd2RfcmVsYXRpdmVfbm9kZWlkKG5vZGVpZCkKLSAgICAg
ICAgICAgIGlmIGRvbWFpbiBhbmQgbGluZS5lbmRzd2l0aChkb21haW4pOgotICAgICAgICAgICAg
ICAgIGxpbmUgPSBsaW5lWzotbGVuKGRvbWFpbildCi0gICAgICAgICAgICAgICAgbCA9IGRvbWFp
bi5zcGxpdCgiWyIpCi0gICAgICAgICAgICAgICAgbFswXSA9IGxbMF0ucmVwbGFjZSgnLicsICc6
OicpICAjIGRvbid0IHJlcGxhY2UgJy4nIGluIHBhcmFtcwotICAgICAgICAgICAgICAgIGxpbmUg
Kz0gIlsiLmpvaW4obCkKLSAgICAgICAgICAgIHJldHVybiBsaW5lCi0gICAgICAgICMgY29sbGVj
dF9mc3BhdGggY29tZXMgZnJvbSB0ZXN0aWQgd2hpY2ggaGFzIGEgIi8iLW5vcm1hbGl6ZWQgcGF0
aAotCi0gICAgICAgIGlmIGZzcGF0aDoKLSAgICAgICAgICAgIHJlcyA9IG1rcmVsKG5vZGVpZCku
cmVwbGFjZSgiOjooKSIsICIiKSAgIyBwYXJlbnMtbm9ybWFsaXphdGlvbgotICAgICAgICAgICAg
aWYgbm9kZWlkLnNwbGl0KCI6OiIpWzBdICE9IGZzcGF0aC5yZXBsYWNlKCJcXCIsICIvIik6Ci0g
ICAgICAgICAgICAgICAgcmVzICs9ICIgPC0gIiArIHNlbGYuc3RhcnRkaXIuYmVzdHJlbHBhdGgo
ZnNwYXRoKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmVzID0gIltsb2NhdGlvbl0iCi0g
ICAgICAgIHJldHVybiByZXMgKyAiICIKLQotICAgIGRlZiBfZ2V0ZmFpbHVyZWhlYWRsaW5lKHNl
bGYsIHJlcCk6Ci0gICAgICAgIGlmIGhhc2F0dHIocmVwLCAnbG9jYXRpb24nKToKLSAgICAgICAg
ICAgIGZzcGF0aCwgbGluZW5vLCBkb21haW4gPSByZXAubG9jYXRpb24KLSAgICAgICAgICAgIHJl
dHVybiBkb21haW4KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiAidGVzdCBzZXNz
aW9uIiAjIFhYWD8KLQotICAgIGRlZiBfZ2V0Y3Jhc2hsaW5lKHNlbGYsIHJlcCk6Ci0gICAgICAg
IHRyeToKLSAgICAgICAgICAgIHJldHVybiBzdHIocmVwLmxvbmdyZXByLnJlcHJjcmFzaCkKLSAg
ICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAg
ICAgICAgIHJldHVybiBzdHIocmVwLmxvbmdyZXByKVs6NTBdCi0gICAgICAgICAgICBleGNlcHQg
QXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICIiCi0KLSAgICAjCi0gICAg
IyBzdW1tYXJpZXMgZm9yIHNlc3Npb25maW5pc2gKLSAgICAjCi0gICAgZGVmIGdldHJlcG9ydHMo
c2VsZiwgbmFtZSk6Ci0gICAgICAgIGwgPSBbXQotICAgICAgICBmb3IgeCBpbiBzZWxmLnN0YXRz
LmdldChuYW1lLCBbXSk6Ci0gICAgICAgICAgICBpZiBub3QgaGFzYXR0cih4LCAnX3BkYnNob3du
Jyk6Ci0gICAgICAgICAgICAgICAgbC5hcHBlbmQoeCkKLSAgICAgICAgcmV0dXJuIGwKLQotICAg
IGRlZiBzdW1tYXJ5X3dhcm5pbmdzKHNlbGYpOgotICAgICAgICBpZiBzZWxmLmhhc29wdCgidyIp
OgotICAgICAgICAgICAgd2FybmluZ3MgPSBzZWxmLnN0YXRzLmdldCgid2FybmluZ3MiKQotICAg
ICAgICAgICAgaWYgbm90IHdhcm5pbmdzOgotICAgICAgICAgICAgICAgIHJldHVybgotICAgICAg
ICAgICAgc2VsZi53cml0ZV9zZXAoIj0iLCAicHl0ZXN0LXdhcm5pbmcgc3VtbWFyeSIpCi0gICAg
ICAgICAgICBmb3IgdyBpbiB3YXJuaW5nczoKLSAgICAgICAgICAgICAgICBzZWxmLl90dy5saW5l
KCJXJXMgJXMgJXMiICUgKHcuY29kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHcu
ZnNsb2NhdGlvbiwgdy5tZXNzYWdlKSkKLQotICAgIGRlZiBzdW1tYXJ5X3Bhc3NlcyhzZWxmKToK
LSAgICAgICAgaWYgc2VsZi5jb25maWcub3B0aW9uLnRic3R5bGUgIT0gIm5vIjoKLSAgICAgICAg
ICAgIGlmIHNlbGYuaGFzb3B0KCJQIik6Ci0gICAgICAgICAgICAgICAgcmVwb3J0cyA9IHNlbGYu
Z2V0cmVwb3J0cygncGFzc2VkJykKLSAgICAgICAgICAgICAgICBpZiBub3QgcmVwb3J0czoKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICAgICAgc2VsZi53cml0ZV9zZXAo
Ij0iLCAiUEFTU0VTIikKLSAgICAgICAgICAgICAgICBmb3IgcmVwIGluIHJlcG9ydHM6Ci0gICAg
ICAgICAgICAgICAgICAgIG1zZyA9IHNlbGYuX2dldGZhaWx1cmVoZWFkbGluZShyZXApCi0gICAg
ICAgICAgICAgICAgICAgIHNlbGYud3JpdGVfc2VwKCJfIiwgbXNnKQotICAgICAgICAgICAgICAg
ICAgICBzZWxmLl9vdXRyZXBfc3VtbWFyeShyZXApCi0KLSAgICBkZWYgc3VtbWFyeV9mYWlsdXJl
cyhzZWxmKToKLSAgICAgICAgaWYgc2VsZi5jb25maWcub3B0aW9uLnRic3R5bGUgIT0gIm5vIjoK
LSAgICAgICAgICAgIHJlcG9ydHMgPSBzZWxmLmdldHJlcG9ydHMoJ2ZhaWxlZCcpCi0gICAgICAg
ICAgICBpZiBub3QgcmVwb3J0czoKLSAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgICAg
IHNlbGYud3JpdGVfc2VwKCI9IiwgIkZBSUxVUkVTIikKLSAgICAgICAgICAgIGZvciByZXAgaW4g
cmVwb3J0czoKLSAgICAgICAgICAgICAgICBpZiBzZWxmLmNvbmZpZy5vcHRpb24udGJzdHlsZSA9
PSAibGluZSI6Ci0gICAgICAgICAgICAgICAgICAgIGxpbmUgPSBzZWxmLl9nZXRjcmFzaGxpbmUo
cmVwKQotICAgICAgICAgICAgICAgICAgICBzZWxmLndyaXRlX2xpbmUobGluZSkKLSAgICAgICAg
ICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBtc2cgPSBzZWxmLl9nZXRmYWlsdXJl
aGVhZGxpbmUocmVwKQotICAgICAgICAgICAgICAgICAgICBtYXJrdXAgPSB7J3JlZCc6IFRydWUs
ICdib2xkJzogVHJ1ZX0KLSAgICAgICAgICAgICAgICAgICAgc2VsZi53cml0ZV9zZXAoIl8iLCBt
c2csICoqbWFya3VwKQotICAgICAgICAgICAgICAgICAgICBzZWxmLl9vdXRyZXBfc3VtbWFyeShy
ZXApCi0KLSAgICBkZWYgc3VtbWFyeV9lcnJvcnMoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuY29u
ZmlnLm9wdGlvbi50YnN0eWxlICE9ICJubyI6Ci0gICAgICAgICAgICByZXBvcnRzID0gc2VsZi5n
ZXRyZXBvcnRzKCdlcnJvcicpCi0gICAgICAgICAgICBpZiBub3QgcmVwb3J0czoKLSAgICAgICAg
ICAgICAgICByZXR1cm4KLSAgICAgICAgICAgIHNlbGYud3JpdGVfc2VwKCI9IiwgIkVSUk9SUyIp
Ci0gICAgICAgICAgICBmb3IgcmVwIGluIHNlbGYuc3RhdHNbJ2Vycm9yJ106Ci0gICAgICAgICAg
ICAgICAgbXNnID0gc2VsZi5fZ2V0ZmFpbHVyZWhlYWRsaW5lKHJlcCkKLSAgICAgICAgICAgICAg
ICBpZiBub3QgaGFzYXR0cihyZXAsICd3aGVuJyk6Ci0gICAgICAgICAgICAgICAgICAgICMgY29s
bGVjdAotICAgICAgICAgICAgICAgICAgICBtc2cgPSAiRVJST1IgY29sbGVjdGluZyAiICsgbXNn
Ci0gICAgICAgICAgICAgICAgZWxpZiByZXAud2hlbiA9PSAic2V0dXAiOgotICAgICAgICAgICAg
ICAgICAgICBtc2cgPSAiRVJST1IgYXQgc2V0dXAgb2YgIiArIG1zZwotICAgICAgICAgICAgICAg
IGVsaWYgcmVwLndoZW4gPT0gInRlYXJkb3duIjoKLSAgICAgICAgICAgICAgICAgICAgbXNnID0g
IkVSUk9SIGF0IHRlYXJkb3duIG9mICIgKyBtc2cKLSAgICAgICAgICAgICAgICBzZWxmLndyaXRl
X3NlcCgiXyIsIG1zZykKLSAgICAgICAgICAgICAgICBzZWxmLl9vdXRyZXBfc3VtbWFyeShyZXAp
Ci0KLSAgICBkZWYgX291dHJlcF9zdW1tYXJ5KHNlbGYsIHJlcCk6Ci0gICAgICAgIHJlcC50b3Rl
cm1pbmFsKHNlbGYuX3R3KQotICAgICAgICBmb3Igc2VjbmFtZSwgY29udGVudCBpbiByZXAuc2Vj
dGlvbnM6Ci0gICAgICAgICAgICBzZWxmLl90dy5zZXAoIi0iLCBzZWNuYW1lKQotICAgICAgICAg
ICAgaWYgY29udGVudFstMTpdID09ICJcbiI6Ci0gICAgICAgICAgICAgICAgY29udGVudCA9IGNv
bnRlbnRbOi0xXQotICAgICAgICAgICAgc2VsZi5fdHcubGluZShjb250ZW50KQotCi0gICAgZGVm
IHN1bW1hcnlfc3RhdHMoc2VsZik6Ci0gICAgICAgIHNlc3Npb25fZHVyYXRpb24gPSB0aW1lLnRp
bWUoKSAtIHNlbGYuX3Nlc3Npb25zdGFydHRpbWUKLSAgICAgICAgKGxpbmUsIGNvbG9yKSA9IGJ1
aWxkX3N1bW1hcnlfc3RhdHNfbGluZShzZWxmLnN0YXRzKQotICAgICAgICBtc2cgPSAiJXMgaW4g
JS4yZiBzZWNvbmRzIiAlIChsaW5lLCBzZXNzaW9uX2R1cmF0aW9uKQotICAgICAgICBtYXJrdXAg
PSB7Y29sb3I6IFRydWUsICdib2xkJzogVHJ1ZX0KLQotICAgICAgICBpZiBzZWxmLnZlcmJvc2l0
eSA+PSAwOgotICAgICAgICAgICAgc2VsZi53cml0ZV9zZXAoIj0iLCBtc2csICoqbWFya3VwKQot
ICAgICAgICBpZiBzZWxmLnZlcmJvc2l0eSA9PSAtMToKLSAgICAgICAgICAgIHNlbGYud3JpdGVf
bGluZShtc2csICoqbWFya3VwKQotCi0gICAgZGVmIHN1bW1hcnlfZGVzZWxlY3RlZChzZWxmKToK
LSAgICAgICAgaWYgJ2Rlc2VsZWN0ZWQnIGluIHNlbGYuc3RhdHM6Ci0gICAgICAgICAgICBsID0g
W10KLSAgICAgICAgICAgIGsgPSBzZWxmLmNvbmZpZy5vcHRpb24ua2V5d29yZAotICAgICAgICAg
ICAgaWYgazoKLSAgICAgICAgICAgICAgICBsLmFwcGVuZCgiLWslcyIgJSBrKQotICAgICAgICAg
ICAgbSA9IHNlbGYuY29uZmlnLm9wdGlvbi5tYXJrZXhwcgotICAgICAgICAgICAgaWYgbToKLSAg
ICAgICAgICAgICAgICBsLmFwcGVuZCgiLW0gJXIiICUgbSkKLSAgICAgICAgICAgIGlmIGw6Ci0g
ICAgICAgICAgICAgICAgc2VsZi53cml0ZV9zZXAoIj0iLCAiJWQgdGVzdHMgZGVzZWxlY3RlZCBi
eSAlciIgJSAoCi0gICAgICAgICAgICAgICAgICAgIGxlbihzZWxmLnN0YXRzWydkZXNlbGVjdGVk
J10pLCAiICIuam9pbihsKSksIGJvbGQ9VHJ1ZSkKLQotZGVmIHJlcHJfcHl0aG9udmVyc2lvbih2
PU5vbmUpOgotICAgIGlmIHYgaXMgTm9uZToKLSAgICAgICAgdiA9IHN5cy52ZXJzaW9uX2luZm8K
LSAgICB0cnk6Ci0gICAgICAgIHJldHVybiAiJXMuJXMuJXMtJXMtJXMiICUgdgotICAgIGV4Y2Vw
dCAoVHlwZUVycm9yLCBWYWx1ZUVycm9yKToKLSAgICAgICAgcmV0dXJuIHN0cih2KQotCi1kZWYg
ZmxhdHRlbihsKToKLSAgICBmb3IgeCBpbiBsOgotICAgICAgICBpZiBpc2luc3RhbmNlKHgsIChs
aXN0LCB0dXBsZSkpOgotICAgICAgICAgICAgZm9yIHkgaW4gZmxhdHRlbih4KToKLSAgICAgICAg
ICAgICAgICB5aWVsZCB5Ci0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICB5aWVsZCB4Ci0KLWRl
ZiBidWlsZF9zdW1tYXJ5X3N0YXRzX2xpbmUoc3RhdHMpOgotICAgIGtleXMgPSAoImZhaWxlZCBw
YXNzZWQgc2tpcHBlZCBkZXNlbGVjdGVkICIKLSAgICAgICAgICAgInhmYWlsZWQgeHBhc3NlZCB3
YXJuaW5ncyBlcnJvciIpLnNwbGl0KCkKLSAgICBrZXlfdHJhbnNsYXRpb24gPSB7J3dhcm5pbmdz
JzogJ3B5dGVzdC13YXJuaW5ncyd9Ci0gICAgdW5rbm93bl9rZXlfc2VlbiA9IEZhbHNlCi0gICAg
Zm9yIGtleSBpbiBzdGF0cy5rZXlzKCk6Ci0gICAgICAgIGlmIGtleSBub3QgaW4ga2V5czoKLSAg
ICAgICAgICAgIGlmIGtleTogIyBzZXR1cC90ZWFyZG93biByZXBvcnRzIGhhdmUgYW4gZW1wdHkg
a2V5LCBpZ25vcmUgdGhlbQotICAgICAgICAgICAgICAgIGtleXMuYXBwZW5kKGtleSkKLSAgICAg
ICAgICAgICAgICB1bmtub3duX2tleV9zZWVuID0gVHJ1ZQotICAgIHBhcnRzID0gW10KLSAgICBm
b3Iga2V5IGluIGtleXM6Ci0gICAgICAgIHZhbCA9IHN0YXRzLmdldChrZXksIE5vbmUpCi0gICAg
ICAgIGlmIHZhbDoKLSAgICAgICAgICAgIGtleV9uYW1lID0ga2V5X3RyYW5zbGF0aW9uLmdldChr
ZXksIGtleSkKLSAgICAgICAgICAgIHBhcnRzLmFwcGVuZCgiJWQgJXMiICUgKGxlbih2YWwpLCBr
ZXlfbmFtZSkpCi0KLSAgICBpZiBwYXJ0czoKLSAgICAgICAgbGluZSA9ICIsICIuam9pbihwYXJ0
cykKLSAgICBlbHNlOgotICAgICAgICBsaW5lID0gIm5vIHRlc3RzIHJhbiIKLQotICAgIGlmICdm
YWlsZWQnIGluIHN0YXRzIG9yICdlcnJvcicgaW4gc3RhdHM6Ci0gICAgICAgIGNvbG9yID0gJ3Jl
ZCcKLSAgICBlbGlmICd3YXJuaW5ncycgaW4gc3RhdHMgb3IgdW5rbm93bl9rZXlfc2VlbjoKLSAg
ICAgICAgY29sb3IgPSAneWVsbG93JwotICAgIGVsaWYgJ3Bhc3NlZCcgaW4gc3RhdHM6Ci0gICAg
ICAgIGNvbG9yID0gJ2dyZWVuJwotICAgIGVsc2U6Ci0gICAgICAgIGNvbG9yID0gJ3llbGxvdycK
LQotICAgIHJldHVybiAobGluZSwgY29sb3IpCi0KLQotZGVmIF9wbHVnaW5fbmFtZXZlcnNpb25z
KHBsdWdpbmluZm8pOgotICAgIGwgPSBbXQotICAgIGZvciBwbHVnaW4sIGRpc3QgaW4gcGx1Z2lu
aW5mbzoKLSAgICAgICAgIyBnZXRzIHVzIG5hbWUgYW5kIHZlcnNpb24hCi0gICAgICAgIG5hbWUg
PSAne2Rpc3QucHJvamVjdF9uYW1lfS17ZGlzdC52ZXJzaW9ufScuZm9ybWF0KGRpc3Q9ZGlzdCkK
LSAgICAgICAgIyBxdWVzdGlvbmFibGUgY29udmVuaWVuY2UsIGJ1dCBpdCBrZWVwcyB0aGluZ3Mg
c2hvcnQKLSAgICAgICAgaWYgbmFtZS5zdGFydHN3aXRoKCJweXRlc3QtIik6Ci0gICAgICAgICAg
ICBuYW1lID0gbmFtZVs3Ol0KLSAgICAgICAgIyB3ZSBkZWNpZGVkIHRvIHByaW50IHB5dGhvbiBw
YWNrYWdlIG5hbWVzCi0gICAgICAgICMgdGhleSBjYW4gaGF2ZSBtb3JlIHRoYW4gb25lIHBsdWdp
bgotICAgICAgICBpZiBuYW1lIG5vdCBpbiBsOgotICAgICAgICAgICAgbC5hcHBlbmQobmFtZSkK
LSAgICByZXR1cm4gbApkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rv
b2xzL3B5dGVzdC9fcHl0ZXN0L3RtcGRpci5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3cz
Yy90b29scy9weXRlc3QvX3B5dGVzdC90bXBkaXIucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGViYzQ4ZGJlNWIyLi4wMDAwMDAwMDAwMAotLS0gYS9XZWJEcml2ZXJUZXN0cy9pbXBv
cnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvdG1wZGlyLnB5CisrKyAvZGV2L251bGwKQEAg
LTEsMTIzICswLDAgQEAKLSIiIiBzdXBwb3J0IGZvciBwcm92aWRpbmcgdGVtcG9yYXJ5IGRpcmVj
dG9yaWVzIHRvIHRlc3QgZnVuY3Rpb25zLiAgIiIiCi1pbXBvcnQgcmUKLQotaW1wb3J0IHB5dGVz
dAotaW1wb3J0IHB5Ci1mcm9tIF9weXRlc3QubW9ua2V5cGF0Y2ggaW1wb3J0IG1vbmtleXBhdGNo
Ci0KLQotY2xhc3MgVGVtcGRpckZhY3Rvcnk6Ci0gICAgIiIiRmFjdG9yeSBmb3IgdGVtcG9yYXJ5
IGRpcmVjdG9yaWVzIHVuZGVyIHRoZSBjb21tb24gYmFzZSB0ZW1wIGRpcmVjdG9yeS4KLQotICAg
IFRoZSBiYXNlIGRpcmVjdG9yeSBjYW4gYmUgY29uZmlndXJlZCB1c2luZyB0aGUgYGAtLWJhc2V0
ZW1wYGAgb3B0aW9uLgotICAgICIiIgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbmZpZyk6
Ci0gICAgICAgIHNlbGYuY29uZmlnID0gY29uZmlnCi0gICAgICAgIHNlbGYudHJhY2UgPSBjb25m
aWcudHJhY2UuZ2V0KCJ0bXBkaXIiKQotCi0gICAgZGVmIGVuc3VyZXRlbXAoc2VsZiwgc3RyaW5n
LCBkaXI9MSk6Ci0gICAgICAgICIiIiAoZGVwcmVjYXRlZCkgcmV0dXJuIHRlbXBvcmFyeSBkaXJl
Y3RvcnkgcGF0aCB3aXRoCi0gICAgICAgICAgICB0aGUgZ2l2ZW4gc3RyaW5nIGFzIHRoZSB0cmFp
bGluZyBwYXJ0LiAgSXQgaXMgdXN1YWxseQotICAgICAgICAgICAgYmV0dGVyIHRvIHVzZSB0aGUg
J3RtcGRpcicgZnVuY3Rpb24gYXJndW1lbnQgd2hpY2gKLSAgICAgICAgICAgIHByb3ZpZGVzIGFu
IGVtcHR5IHVuaXF1ZS1wZXItdGVzdC1pbnZvY2F0aW9uIGRpcmVjdG9yeQotICAgICAgICAgICAg
YW5kIGlzIGd1YXJhbnRlZWQgdG8gYmUgZW1wdHkuCi0gICAgICAgICIiIgotICAgICAgICAjcHku
bG9nLl9hcGl3YXJuKCI+MS4xIiwgInVzZSB0bXBkaXIgZnVuY3Rpb24gYXJndW1lbnQiKQotICAg
ICAgICByZXR1cm4gc2VsZi5nZXRiYXNldGVtcCgpLmVuc3VyZShzdHJpbmcsIGRpcj1kaXIpCi0K
LSAgICBkZWYgbWt0ZW1wKHNlbGYsIGJhc2VuYW1lLCBudW1iZXJlZD1UcnVlKToKLSAgICAgICAg
IiIiQ3JlYXRlIGEgc3ViZGlyZWN0b3J5IG9mIHRoZSBiYXNlIHRlbXBvcmFyeSBkaXJlY3Rvcnkg
YW5kIHJldHVybiBpdC4KLSAgICAgICAgSWYgYGBudW1iZXJlZGBgLCBlbnN1cmUgdGhlIGRpcmVj
dG9yeSBpcyB1bmlxdWUgYnkgYWRkaW5nIGEgbnVtYmVyCi0gICAgICAgIHByZWZpeCBncmVhdGVy
IHRoYW4gYW55IGV4aXN0aW5nIG9uZS4KLSAgICAgICAgIiIiCi0gICAgICAgIGJhc2V0ZW1wID0g
c2VsZi5nZXRiYXNldGVtcCgpCi0gICAgICAgIGlmIG5vdCBudW1iZXJlZDoKLSAgICAgICAgICAg
IHAgPSBiYXNldGVtcC5ta2RpcihiYXNlbmFtZSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAg
IHAgPSBweS5wYXRoLmxvY2FsLm1ha2VfbnVtYmVyZWRfZGlyKHByZWZpeD1iYXNlbmFtZSwKLSAg
ICAgICAgICAgICAgICBrZWVwPTAsIHJvb3RkaXI9YmFzZXRlbXAsIGxvY2tfdGltZW91dD1Ob25l
KQotICAgICAgICBzZWxmLnRyYWNlKCJta3RlbXAiLCBwKQotICAgICAgICByZXR1cm4gcAotCi0g
ICAgZGVmIGdldGJhc2V0ZW1wKHNlbGYpOgotICAgICAgICAiIiIgcmV0dXJuIGJhc2UgdGVtcG9y
YXJ5IGRpcmVjdG9yeS4gIiIiCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHJldHVybiBzZWxm
Ll9iYXNldGVtcAotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICBi
YXNldGVtcCA9IHNlbGYuY29uZmlnLm9wdGlvbi5iYXNldGVtcAotICAgICAgICAgICAgaWYgYmFz
ZXRlbXA6Ci0gICAgICAgICAgICAgICAgYmFzZXRlbXAgPSBweS5wYXRoLmxvY2FsKGJhc2V0ZW1w
KQotICAgICAgICAgICAgICAgIGlmIGJhc2V0ZW1wLmNoZWNrKCk6Ci0gICAgICAgICAgICAgICAg
ICAgIGJhc2V0ZW1wLnJlbW92ZSgpCi0gICAgICAgICAgICAgICAgYmFzZXRlbXAubWtkaXIoKQot
ICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICB0ZW1wcm9vdCA9IHB5LnBhdGgubG9j
YWwuZ2V0X3RlbXByb290KCkKLSAgICAgICAgICAgICAgICB1c2VyID0gZ2V0X3VzZXIoKQotICAg
ICAgICAgICAgICAgIGlmIHVzZXI6Ci0gICAgICAgICAgICAgICAgICAgICMgdXNlIGEgc3ViLWRp
cmVjdG9yeSBpbiB0aGUgdGVtcHJvb3QgdG8gc3BlZWQtdXAKLSAgICAgICAgICAgICAgICAgICAg
IyBtYWtlX251bWJlcmVkX2RpcigpIGNhbGwKLSAgICAgICAgICAgICAgICAgICAgcm9vdGRpciA9
IHRlbXByb290LmpvaW4oJ3B5dGVzdC1vZi0lcycgJSB1c2VyKQotICAgICAgICAgICAgICAgIGVs
c2U6Ci0gICAgICAgICAgICAgICAgICAgIHJvb3RkaXIgPSB0ZW1wcm9vdAotICAgICAgICAgICAg
ICAgIHJvb3RkaXIuZW5zdXJlKGRpcj0xKQotICAgICAgICAgICAgICAgIGJhc2V0ZW1wID0gcHku
cGF0aC5sb2NhbC5tYWtlX251bWJlcmVkX2RpcihwcmVmaXg9J3B5dGVzdC0nLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb290ZGly
PXJvb3RkaXIpCi0gICAgICAgICAgICBzZWxmLl9iYXNldGVtcCA9IHQgPSBiYXNldGVtcC5yZWFs
cGF0aCgpCi0gICAgICAgICAgICBzZWxmLnRyYWNlKCJuZXcgYmFzZXRlbXAiLCB0KQotICAgICAg
ICAgICAgcmV0dXJuIHQKLQotICAgIGRlZiBmaW5pc2goc2VsZik6Ci0gICAgICAgIHNlbGYudHJh
Y2UoImZpbmlzaCIpCi0KLQotZGVmIGdldF91c2VyKCk6Ci0gICAgIiIiUmV0dXJuIHRoZSBjdXJy
ZW50IHVzZXIgbmFtZSwgb3IgTm9uZSBpZiBnZXR1c2VyKCkgZG9lcyBub3Qgd29yawotICAgIGlu
IHRoZSBjdXJyZW50IGVudmlyb25tZW50IChzZWUgIzEwMTApLgotICAgICIiIgotICAgIGltcG9y
dCBnZXRwYXNzCi0gICAgdHJ5OgotICAgICAgICByZXR1cm4gZ2V0cGFzcy5nZXR1c2VyKCkKLSAg
ICBleGNlcHQgKEltcG9ydEVycm9yLCBLZXlFcnJvcik6Ci0gICAgICAgIHJldHVybiBOb25lCi0K
LSMgYmFja3dhcmQgY29tcGF0aWJpbGl0eQotVGVtcGRpckhhbmRsZXIgPSBUZW1wZGlyRmFjdG9y
eQotCi0KLWRlZiBweXRlc3RfY29uZmlndXJlKGNvbmZpZyk6Ci0gICAgIiIiQ3JlYXRlIGEgVGVt
cGRpckZhY3RvcnkgYW5kIGF0dGFjaCBpdCB0byB0aGUgY29uZmlnIG9iamVjdC4KLQotICAgIFRo
aXMgaXMgdG8gY29tcGx5IHdpdGggZXhpc3RpbmcgcGx1Z2lucyB3aGljaCBleHBlY3QgdGhlIGhh
bmRsZXIgdG8gYmUKLSAgICBhdmFpbGFibGUgYXQgcHl0ZXN0X2NvbmZpZ3VyZSB0aW1lLCBidXQg
aWRlYWxseSBzaG91bGQgYmUgbW92ZWQgZW50aXJlbHkKLSAgICB0byB0aGUgdG1wZGlyX2ZhY3Rv
cnkgc2Vzc2lvbiBmaXh0dXJlLgotICAgICIiIgotICAgIG1wID0gbW9ua2V5cGF0Y2goKQotICAg
IHQgPSBUZW1wZGlyRmFjdG9yeShjb25maWcpCi0gICAgY29uZmlnLl9jbGVhbnVwLmV4dGVuZChb
bXAudW5kbywgdC5maW5pc2hdKQotICAgIG1wLnNldGF0dHIoY29uZmlnLCAnX3RtcGRpcmhhbmRs
ZXInLCB0LCByYWlzaW5nPUZhbHNlKQotICAgIG1wLnNldGF0dHIocHl0ZXN0LCAnZW5zdXJldGVt
cCcsIHQuZW5zdXJldGVtcCwgcmFpc2luZz1GYWxzZSkKLQotCi1AcHl0ZXN0LmZpeHR1cmUoc2Nv
cGU9J3Nlc3Npb24nKQotZGVmIHRtcGRpcl9mYWN0b3J5KHJlcXVlc3QpOgotICAgICIiIlJldHVy
biBhIFRlbXBkaXJGYWN0b3J5IGluc3RhbmNlIGZvciB0aGUgdGVzdCBzZXNzaW9uLgotICAgICIi
IgotICAgIHJldHVybiByZXF1ZXN0LmNvbmZpZy5fdG1wZGlyaGFuZGxlcgotCi0KLUBweXRlc3Qu
Zml4dHVyZQotZGVmIHRtcGRpcihyZXF1ZXN0LCB0bXBkaXJfZmFjdG9yeSk6Ci0gICAgIiIicmV0
dXJuIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBwYXRoIG9iamVjdAotICAgIHdoaWNoIGlzIHVuaXF1
ZSB0byBlYWNoIHRlc3QgZnVuY3Rpb24gaW52b2NhdGlvbiwKLSAgICBjcmVhdGVkIGFzIGEgc3Vi
IGRpcmVjdG9yeSBvZiB0aGUgYmFzZSB0ZW1wb3JhcnkKLSAgICBkaXJlY3RvcnkuICBUaGUgcmV0
dXJuZWQgb2JqZWN0IGlzIGEgYHB5LnBhdGgubG9jYWxgXwotICAgIHBhdGggb2JqZWN0LgotICAg
ICIiIgotICAgIG5hbWUgPSByZXF1ZXN0Lm5vZGUubmFtZQotICAgIG5hbWUgPSByZS5zdWIoIltc
V10iLCAiXyIsIG5hbWUpCi0gICAgTUFYVkFMID0gMzAKLSAgICBpZiBsZW4obmFtZSkgPiBNQVhW
QUw6Ci0gICAgICAgIG5hbWUgPSBuYW1lWzpNQVhWQUxdCi0gICAgeCA9IHRtcGRpcl9mYWN0b3J5
Lm1rdGVtcChuYW1lLCBudW1iZXJlZD1UcnVlKQotICAgIHJldHVybiB4CmRpZmYgLS1naXQgYS9X
ZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvdW5pdHRlc3Qu
cHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvdW5p
dHRlc3QucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxMjBlOTRmYmY0Li4wMDAw
MDAwMDAwMAotLS0gYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19w
eXRlc3QvdW5pdHRlc3QucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyMDUgKzAsMCBAQAotIiIiIGRp
c2NvdmVyeSBhbmQgcnVubmluZyBvZiBzdGQtbGlicmFyeSAidW5pdHRlc3QiIHN0eWxlIHRlc3Rz
LiAiIiIKLWZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0Ci0KLWltcG9ydCBz
eXMKLWltcG9ydCB0cmFjZWJhY2sKLQotaW1wb3J0IHB5dGVzdAotIyBmb3IgdHJhbnNmZXJpbmcg
bWFya2VycwotaW1wb3J0IF9weXRlc3QuX2NvZGUKLWZyb20gX3B5dGVzdC5weXRob24gaW1wb3J0
IHRyYW5zZmVyX21hcmtlcnMKLWZyb20gX3B5dGVzdC5za2lwcGluZyBpbXBvcnQgTWFya0V2YWx1
YXRvcgotCi0KLWRlZiBweXRlc3RfcHljb2xsZWN0X21ha2VpdGVtKGNvbGxlY3RvciwgbmFtZSwg
b2JqKToKLSAgICAjIGhhcyB1bml0dGVzdCBiZWVuIGltcG9ydGVkIGFuZCBpcyBvYmogYSBzdWJj
bGFzcyBvZiBpdHMgVGVzdENhc2U/Ci0gICAgdHJ5OgotICAgICAgICBpZiBub3QgaXNzdWJjbGFz
cyhvYmosIHN5cy5tb2R1bGVzWyJ1bml0dGVzdCJdLlRlc3RDYXNlKToKLSAgICAgICAgICAgIHJl
dHVybgotICAgIGV4Y2VwdCBFeGNlcHRpb246Ci0gICAgICAgIHJldHVybgotICAgICMgeWVzLCBz
byBsZXQncyBjb2xsZWN0IGl0Ci0gICAgcmV0dXJuIFVuaXRUZXN0Q2FzZShuYW1lLCBwYXJlbnQ9
Y29sbGVjdG9yKQotCi0KLWNsYXNzIFVuaXRUZXN0Q2FzZShweXRlc3QuQ2xhc3MpOgotICAgICMg
bWFya2VyIGZvciBmaXh0dXJlbWFuZ2VyLmdldGZpeHR1cmVpbmZvKCkKLSAgICAjIHRvIGRlY2xh
cmUgdGhhdCBvdXIgY2hpbGRyZW4gZG8gbm90IHN1cHBvcnQgZnVuY2FyZ3MKLSAgICBub2Z1bmNh
cmdzID0gVHJ1ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IAotICAgIGRlZiBzZXR1cChzZWxmKToKLSAgICAgICAgY2xzID0gc2VsZi5vYmoKLSAgICAgICAg
aWYgZ2V0YXR0cihjbHMsICdfX3VuaXR0ZXN0X3NraXBfXycsIEZhbHNlKToKLSAgICAgICAgICAg
IHJldHVybiAgIyBza2lwcGVkCi0gICAgICAgIHNldHVwID0gZ2V0YXR0cihjbHMsICdzZXRVcENs
YXNzJywgTm9uZSkKLSAgICAgICAgaWYgc2V0dXAgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBz
ZXR1cCgpCi0gICAgICAgIHRlYXJkb3duID0gZ2V0YXR0cihjbHMsICd0ZWFyRG93bkNsYXNzJywg
Tm9uZSkKLSAgICAgICAgaWYgdGVhcmRvd24gaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBzZWxm
LmFkZGZpbmFsaXplcih0ZWFyZG93bikKLSAgICAgICAgc3VwZXIoVW5pdFRlc3RDYXNlLCBzZWxm
KS5zZXR1cCgpCi0KLSAgICBkZWYgY29sbGVjdChzZWxmKToKLSAgICAgICAgZnJvbSB1bml0dGVz
dCBpbXBvcnQgVGVzdExvYWRlcgotICAgICAgICBjbHMgPSBzZWxmLm9iagotICAgICAgICBpZiBu
b3QgZ2V0YXR0cihjbHMsICJfX3Rlc3RfXyIsIFRydWUpOgotICAgICAgICAgICAgcmV0dXJuCi0g
ICAgICAgIHNlbGYuc2Vzc2lvbi5fZml4dHVyZW1hbmFnZXIucGFyc2VmYWN0b3JpZXMoc2VsZiwg
dW5pdHRlc3Q9VHJ1ZSkKLSAgICAgICAgbG9hZGVyID0gVGVzdExvYWRlcigpCi0gICAgICAgIG1v
ZHVsZSA9IHNlbGYuZ2V0cGFyZW50KHB5dGVzdC5Nb2R1bGUpLm9iagotICAgICAgICBmb3VuZHNv
bWV0aGluZyA9IEZhbHNlCi0gICAgICAgIGZvciBuYW1lIGluIGxvYWRlci5nZXRUZXN0Q2FzZU5h
bWVzKHNlbGYub2JqKToKLSAgICAgICAgICAgIHggPSBnZXRhdHRyKHNlbGYub2JqLCBuYW1lKQot
ICAgICAgICAgICAgZnVuY29iaiA9IGdldGF0dHIoeCwgJ2ltX2Z1bmMnLCB4KQotICAgICAgICAg
ICAgdHJhbnNmZXJfbWFya2VycyhmdW5jb2JqLCBjbHMsIG1vZHVsZSkKLSAgICAgICAgICAgIHlp
ZWxkIFRlc3RDYXNlRnVuY3Rpb24obmFtZSwgcGFyZW50PXNlbGYpCi0gICAgICAgICAgICBmb3Vu
ZHNvbWV0aGluZyA9IFRydWUKLQotICAgICAgICBpZiBub3QgZm91bmRzb21ldGhpbmc6Ci0gICAg
ICAgICAgICBydW50ZXN0ID0gZ2V0YXR0cihzZWxmLm9iaiwgJ3J1blRlc3QnLCBOb25lKQotICAg
ICAgICAgICAgaWYgcnVudGVzdCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICB1dCA9IHN5
cy5tb2R1bGVzLmdldCgidHdpc3RlZC50cmlhbC51bml0dGVzdCIsIE5vbmUpCi0gICAgICAgICAg
ICAgICAgaWYgdXQgaXMgTm9uZSBvciBydW50ZXN0ICE9IHV0LlRlc3RDYXNlLnJ1blRlc3Q6Ci0g
ICAgICAgICAgICAgICAgICAgIHlpZWxkIFRlc3RDYXNlRnVuY3Rpb24oJ3J1blRlc3QnLCBwYXJl
bnQ9c2VsZikKLQotCi0KLWNsYXNzIFRlc3RDYXNlRnVuY3Rpb24ocHl0ZXN0LkZ1bmN0aW9uKToK
LSAgICBfZXhjaW5mbyA9IE5vbmUKLQotICAgIGRlZiBzZXR1cChzZWxmKToKLSAgICAgICAgc2Vs
Zi5fdGVzdGNhc2UgPSBzZWxmLnBhcmVudC5vYmooc2VsZi5uYW1lKQotICAgICAgICBzZWxmLl9m
aXhfdW5pdHRlc3Rfc2tpcF9kZWNvcmF0b3IoKQotICAgICAgICBzZWxmLl9vYmogPSBnZXRhdHRy
KHNlbGYuX3Rlc3RjYXNlLCBzZWxmLm5hbWUpCi0gICAgICAgIGlmIGhhc2F0dHIoc2VsZi5fdGVz
dGNhc2UsICdzZXR1cF9tZXRob2QnKToKLSAgICAgICAgICAgIHNlbGYuX3Rlc3RjYXNlLnNldHVw
X21ldGhvZChzZWxmLl9vYmopCi0gICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgIl9yZXF1ZXN0Iik6
Ci0gICAgICAgICAgICBzZWxmLl9yZXF1ZXN0Ll9maWxsZml4dHVyZXMoKQotCi0gICAgZGVmIF9m
aXhfdW5pdHRlc3Rfc2tpcF9kZWNvcmF0b3Ioc2VsZik6Ci0gICAgICAgICIiIgotICAgICAgICBU
aGUgQHVuaXR0ZXN0LnNraXAgZGVjb3JhdG9yIGNhbGxzIGZ1bmN0b29scy53cmFwcyhzZWxmLl90
ZXN0Y2FzZSkKLSAgICAgICAgVGhlIGNhbGwgdG8gZnVuY3Rvb2xzLndyYXBzKCkgZmFpbHMgdW5s
ZXNzIHNlbGYuX3Rlc3RjYXNlCi0gICAgICAgIGhhcyBhIF9fbmFtZV9fIGF0dHJpYnV0ZS4gVGhp
cyBpcyB1c3VhbGx5IGF1dG9tYXRpY2FsbHkgc3VwcGxpZWQKLSAgICAgICAgaWYgdGhlIHRlc3Qg
aXMgYSBmdW5jdGlvbiBvciBtZXRob2QsIGJ1dCB3ZSBuZWVkIHRvIGFkZCBtYW51YWxseQotICAg
ICAgICBoZXJlLgotCi0gICAgICAgIFNlZSBpc3N1ZSAjMTE2OQotICAgICAgICAiIiIKLSAgICAg
ICAgaWYgc3lzLnZlcnNpb25faW5mb1swXSA9PSAyOgotICAgICAgICAgICAgc2V0YXR0cihzZWxm
Ll90ZXN0Y2FzZSwgIl9fbmFtZV9fIiwgc2VsZi5uYW1lKQotCi0gICAgZGVmIHRlYXJkb3duKHNl
bGYpOgotICAgICAgICBpZiBoYXNhdHRyKHNlbGYuX3Rlc3RjYXNlLCAndGVhcmRvd25fbWV0aG9k
Jyk6Ci0gICAgICAgICAgICBzZWxmLl90ZXN0Y2FzZS50ZWFyZG93bl9tZXRob2Qoc2VsZi5fb2Jq
KQotCi0gICAgZGVmIHN0YXJ0VGVzdChzZWxmLCB0ZXN0Y2FzZSk6Ci0gICAgICAgIHBhc3MKLQot
ICAgIGRlZiBfYWRkZXhjaW5mbyhzZWxmLCByYXdleGNpbmZvKToKLSAgICAgICAgIyB1bndyYXAg
cG90ZW50aWFsIGV4Y2VwdGlvbiBpbmZvIChzZWUgdHdpc3RlZCB0cmlhbCBzdXBwb3J0IGJlbG93
KQotICAgICAgICByYXdleGNpbmZvID0gZ2V0YXR0cihyYXdleGNpbmZvLCAnX3Jhd2V4Y2luZm8n
LCByYXdleGNpbmZvKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBleGNpbmZvID0gX3B5dGVz
dC5fY29kZS5FeGNlcHRpb25JbmZvKHJhd2V4Y2luZm8pCi0gICAgICAgIGV4Y2VwdCBUeXBlRXJy
b3I6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAg
ICAgICAgICBsID0gdHJhY2ViYWNrLmZvcm1hdF9leGNlcHRpb24oKnJhd2V4Y2luZm8pCi0gICAg
ICAgICAgICAgICAgICAgIGwuaW5zZXJ0KDAsICJOT1RFOiBJbmNvbXBhdGlibGUgRXhjZXB0aW9u
IFJlcHJlc2VudGF0aW9uLCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAiZGlzcGxheWluZyBu
YXRpdmVseTpcblxuIikKLSAgICAgICAgICAgICAgICAgICAgcHl0ZXN0LmZhaWwoIiIuam9pbihs
KSwgcHl0cmFjZT1GYWxzZSkKLSAgICAgICAgICAgICAgICBleGNlcHQgKHB5dGVzdC5mYWlsLkV4
Y2VwdGlvbiwgS2V5Ym9hcmRJbnRlcnJ1cHQpOgotICAgICAgICAgICAgICAgICAgICByYWlzZQot
ICAgICAgICAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICAgICAgICAgcHl0ZXN0LmZhaWwo
IkVSUk9SOiBVbmtub3duIEluY29tcGF0aWJsZSBFeGNlcHRpb24gIgotICAgICAgICAgICAgICAg
ICAgICAgICAgInJlcHJlc2VudGF0aW9uOlxuJXIiICUocmF3ZXhjaW5mbywpLCBweXRyYWNlPUZh
bHNlKQotICAgICAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgotICAgICAgICAgICAg
ICAgIHJhaXNlCi0gICAgICAgICAgICBleGNlcHQgcHl0ZXN0LmZhaWwuRXhjZXB0aW9uOgotICAg
ICAgICAgICAgICAgIGV4Y2luZm8gPSBfcHl0ZXN0Ll9jb2RlLkV4Y2VwdGlvbkluZm8oKQotICAg
ICAgICBzZWxmLl9fZGljdF9fLnNldGRlZmF1bHQoJ19leGNpbmZvJywgW10pLmFwcGVuZChleGNp
bmZvKQotCi0gICAgZGVmIGFkZEVycm9yKHNlbGYsIHRlc3RjYXNlLCByYXdleGNpbmZvKToKLSAg
ICAgICAgc2VsZi5fYWRkZXhjaW5mbyhyYXdleGNpbmZvKQotICAgIGRlZiBhZGRGYWlsdXJlKHNl
bGYsIHRlc3RjYXNlLCByYXdleGNpbmZvKToKLSAgICAgICAgc2VsZi5fYWRkZXhjaW5mbyhyYXdl
eGNpbmZvKQotCi0gICAgZGVmIGFkZFNraXAoc2VsZiwgdGVzdGNhc2UsIHJlYXNvbik6Ci0gICAg
ICAgIHRyeToKLSAgICAgICAgICAgIHB5dGVzdC5za2lwKHJlYXNvbikKLSAgICAgICAgZXhjZXB0
IHB5dGVzdC5za2lwLkV4Y2VwdGlvbjoKLSAgICAgICAgICAgIHNlbGYuX2V2YWxza2lwID0gTWFy
a0V2YWx1YXRvcihzZWxmLCAnU2tpcFRlc3QnKQotICAgICAgICAgICAgc2VsZi5fZXZhbHNraXAu
cmVzdWx0ID0gVHJ1ZQotICAgICAgICAgICAgc2VsZi5fYWRkZXhjaW5mbyhzeXMuZXhjX2luZm8o
KSkKLQotICAgIGRlZiBhZGRFeHBlY3RlZEZhaWx1cmUoc2VsZiwgdGVzdGNhc2UsIHJhd2V4Y2lu
Zm8sIHJlYXNvbj0iIik6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHB5dGVzdC54ZmFpbChz
dHIocmVhc29uKSkKLSAgICAgICAgZXhjZXB0IHB5dGVzdC54ZmFpbC5FeGNlcHRpb246Ci0gICAg
ICAgICAgICBzZWxmLl9hZGRleGNpbmZvKHN5cy5leGNfaW5mbygpKQotCi0gICAgZGVmIGFkZFVu
ZXhwZWN0ZWRTdWNjZXNzKHNlbGYsIHRlc3RjYXNlLCByZWFzb249IiIpOgotICAgICAgICBzZWxm
Ll91bmV4cGVjdGVkc3VjY2VzcyA9IHJlYXNvbgotCi0gICAgZGVmIGFkZFN1Y2Nlc3Moc2VsZiwg
dGVzdGNhc2UpOgotICAgICAgICBwYXNzCi0KLSAgICBkZWYgc3RvcFRlc3Qoc2VsZiwgdGVzdGNh
c2UpOgotICAgICAgICBwYXNzCi0KLSAgICBkZWYgcnVudGVzdChzZWxmKToKLSAgICAgICAgc2Vs
Zi5fdGVzdGNhc2UocmVzdWx0PXNlbGYpCi0KLSAgICBkZWYgX3BydW5ldHJhY2ViYWNrKHNlbGYs
IGV4Y2luZm8pOgotICAgICAgICBweXRlc3QuRnVuY3Rpb24uX3BydW5ldHJhY2ViYWNrKHNlbGYs
IGV4Y2luZm8pCi0gICAgICAgIHRyYWNlYmFjayA9IGV4Y2luZm8udHJhY2ViYWNrLmZpbHRlcigK
LSAgICAgICAgICAgIGxhbWJkYSB4Om5vdCB4LmZyYW1lLmZfZ2xvYmFscy5nZXQoJ19fdW5pdHRl
c3QnKSkKLSAgICAgICAgaWYgdHJhY2ViYWNrOgotICAgICAgICAgICAgZXhjaW5mby50cmFjZWJh
Y2sgPSB0cmFjZWJhY2sKLQotQHB5dGVzdC5ob29raW1wbCh0cnlmaXJzdD1UcnVlKQotZGVmIHB5
dGVzdF9ydW50ZXN0X21ha2VyZXBvcnQoaXRlbSwgY2FsbCk6Ci0gICAgaWYgaXNpbnN0YW5jZShp
dGVtLCBUZXN0Q2FzZUZ1bmN0aW9uKToKLSAgICAgICAgaWYgaXRlbS5fZXhjaW5mbzoKLSAgICAg
ICAgICAgIGNhbGwuZXhjaW5mbyA9IGl0ZW0uX2V4Y2luZm8ucG9wKDApCi0gICAgICAgICAgICB0
cnk6Ci0gICAgICAgICAgICAgICAgZGVsIGNhbGwucmVzdWx0Ci0gICAgICAgICAgICBleGNlcHQg
QXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICAgICAgcGFzcwotCi0jIHR3aXN0ZWQgdHJpYWwg
c3VwcG9ydAotCi1AcHl0ZXN0Lmhvb2tpbXBsKGhvb2t3cmFwcGVyPVRydWUpCi1kZWYgcHl0ZXN0
X3J1bnRlc3RfcHJvdG9jb2woaXRlbSk6Ci0gICAgaWYgaXNpbnN0YW5jZShpdGVtLCBUZXN0Q2Fz
ZUZ1bmN0aW9uKSBhbmQgXAotICAgICAgICd0d2lzdGVkLnRyaWFsLnVuaXR0ZXN0JyBpbiBzeXMu
bW9kdWxlczoKLSAgICAgICAgdXQgPSBzeXMubW9kdWxlc1sndHdpc3RlZC5weXRob24uZmFpbHVy
ZSddCi0gICAgICAgIEZhaWx1cmVfX2luaXRfXyA9IHV0LkZhaWx1cmUuX19pbml0X18KLSAgICAg
ICAgY2hlY2tfdGVzdGNhc2VfaW1wbGVtZW50c190cmlhbF9yZXBvcnRlcigpCi0gICAgICAgIGRl
ZiBleGNzdG9yZShzZWxmLCBleGNfdmFsdWU9Tm9uZSwgZXhjX3R5cGU9Tm9uZSwgZXhjX3RiPU5v
bmUsCi0gICAgICAgICAgICBjYXB0dXJlVmFycz1Ob25lKToKLSAgICAgICAgICAgIGlmIGV4Y192
YWx1ZSBpcyBOb25lOgotICAgICAgICAgICAgICAgIHNlbGYuX3Jhd2V4Y2luZm8gPSBzeXMuZXhj
X2luZm8oKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBpZiBleGNfdHlwZSBp
cyBOb25lOgotICAgICAgICAgICAgICAgICAgICBleGNfdHlwZSA9IHR5cGUoZXhjX3ZhbHVlKQot
ICAgICAgICAgICAgICAgIHNlbGYuX3Jhd2V4Y2luZm8gPSAoZXhjX3R5cGUsIGV4Y192YWx1ZSwg
ZXhjX3RiKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIEZhaWx1cmVfX2luaXRf
XyhzZWxmLCBleGNfdmFsdWUsIGV4Y190eXBlLCBleGNfdGIsCi0gICAgICAgICAgICAgICAgICAg
IGNhcHR1cmVWYXJzPWNhcHR1cmVWYXJzKQotICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoK
LSAgICAgICAgICAgICAgICBGYWlsdXJlX19pbml0X18oc2VsZiwgZXhjX3ZhbHVlLCBleGNfdHlw
ZSwgZXhjX3RiKQotICAgICAgICB1dC5GYWlsdXJlLl9faW5pdF9fID0gZXhjc3RvcmUKLSAgICAg
ICAgeWllbGQKLSAgICAgICAgdXQuRmFpbHVyZS5fX2luaXRfXyA9IEZhaWx1cmVfX2luaXRfXwot
ICAgIGVsc2U6Ci0gICAgICAgIHlpZWxkCi0KLQotZGVmIGNoZWNrX3Rlc3RjYXNlX2ltcGxlbWVu
dHNfdHJpYWxfcmVwb3J0ZXIoZG9uZT1bXSk6Ci0gICAgaWYgZG9uZToKLSAgICAgICAgcmV0dXJu
Ci0gICAgZnJvbSB6b3BlLmludGVyZmFjZSBpbXBvcnQgY2xhc3NJbXBsZW1lbnRzCi0gICAgZnJv
bSB0d2lzdGVkLnRyaWFsLml0cmlhbCBpbXBvcnQgSVJlcG9ydGVyCi0gICAgY2xhc3NJbXBsZW1l
bnRzKFRlc3RDYXNlRnVuY3Rpb24sIElSZXBvcnRlcikKLSAgICBkb25lLmFwcGVuZCgxKQpkaWZm
IC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0
L3ZlbmRvcmVkX3BhY2thZ2VzL1JFQURNRS5tZCBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3cz
Yy90b29scy9weXRlc3QvX3B5dGVzdC92ZW5kb3JlZF9wYWNrYWdlcy9SRUFETUUubWQKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhYjdjNzE0ZmIwLi4wMDAwMDAwMDAwMAotLS0gYS9X
ZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvdmVuZG9yZWRf
cGFja2FnZXMvUkVBRE1FLm1kCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotVGhpcyBk
aXJlY3RvcnkgdmVuZG9ycyB0aGUgYHBsdWdneWAgbW9kdWxlLgotCi1Gb3IgYSBtb3JlIGRldGFp
bGVkIGRpc2N1c3Npb24gZm9yIHRoZSByZWFzb25zIHRvIHZlbmRvcmluZyB0aGlzIAotcGFja2Fn
ZSwgcGxlYXNlIHNlZSBbdGhpcyBpc3N1ZV0oaHR0cHM6Ly9naXRodWIuY29tL3B5dGVzdC1kZXYv
cHl0ZXN0L2lzc3Vlcy85NDQpLgotCi1UbyB1cGRhdGUgdGhlIGN1cnJlbnQgdmVyc2lvbiwgZXhl
Y3V0ZToKLQotYGBgCi0kIHBpcCBpbnN0YWxsIC1VIHBsdWdneT09PHZlcnNpb24+IC0tbm8tY29t
cGlsZSAtLXRhcmdldD1fcHl0ZXN0L3ZlbmRvcmVkX3BhY2thZ2VzCi1gYGAKLQotQW5kIGNvbW1p
dCB0aGUgbW9kaWZpZWQgZmlsZXMuIFRoZSBgcGx1Z2d5LTx2ZXJzaW9uPi5kaXN0LWluZm9gIGRp
cmVjdG9yeSAKLWNyZWF0ZWQgYnkgYHBpcGAgc2hvdWxkIGJlIGlnbm9yZWQuCmRpZmYgLS1naXQg
YS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvdmVuZG9y
ZWRfcGFja2FnZXMvX19pbml0X18ucHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9v
bHMvcHl0ZXN0L19weXRlc3QvdmVuZG9yZWRfcGFja2FnZXMvX19pbml0X18ucHkKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjliYjJkLi4wMDAwMDAwMDAwMApkaWZmIC0tZ2l0
IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L3ZlbmRv
cmVkX3BhY2thZ2VzL3BsdWdneS0wLjMuMS5kaXN0LWluZm8vREVTQ1JJUFRJT04ucnN0IGIvV2Vi
RHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L3ZlbmRvcmVkX3Bh
Y2thZ2VzL3BsdWdneS0wLjMuMS5kaXN0LWluZm8vREVTQ1JJUFRJT04ucnN0CmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBhYTNiYmY4MTI5Ny4uMDAwMDAwMDAwMDAKLS0tIGEvV2ViRHJp
dmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L3ZlbmRvcmVkX3BhY2th
Z2VzL3BsdWdneS0wLjMuMS5kaXN0LWluZm8vREVTQ1JJUFRJT04ucnN0CisrKyAvZGV2L251bGwK
QEAgLTEsMTAgKzAsMCBAQAotUGx1Z2luIHJlZ2lzdHJhdGlvbiBhbmQgaG9vayBjYWxsaW5nIGZv
ciBQeXRob24KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0KLVRoaXMgaXMgdGhlIHBsdWdpbiBtYW5hZ2VyIGFzIHVzZWQgYnkgcHl0ZXN0IGJ1dCBzdHJp
cHBlZAotb2YgcHl0ZXN0IHNwZWNpZmljIGRldGFpbHMuCi0KLUR1cmluZyB0aGUgMC54IHNlcmll
cyB0aGlzIHBsdWdpbiBkb2VzIG5vdCBoYXZlIG11Y2ggZG9jdW1lbnRhdGlvbgotZXhjZXB0IGV4
dGVuc2l2ZSBkb2NzdHJpbmdzIGluIHRoZSBwbHVnZ3kucHkgbW9kdWxlLgotCi0KZGlmZiAtLWdp
dCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC92ZW5k
b3JlZF9wYWNrYWdlcy9wbHVnZ3ktMC4zLjEuZGlzdC1pbmZvL01FVEFEQVRBIGIvV2ViRHJpdmVy
VGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L3ZlbmRvcmVkX3BhY2thZ2Vz
L3BsdWdneS0wLjMuMS5kaXN0LWluZm8vTUVUQURBVEEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGVjODFmMGE2YmUwLi4wMDAwMDAwMDAwMAotLS0gYS9XZWJEcml2ZXJUZXN0cy9pbXBv
cnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvdmVuZG9yZWRfcGFja2FnZXMvcGx1Z2d5LTAu
My4xLmRpc3QtaW5mby9NRVRBREFUQQorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLU1l
dGFkYXRhLVZlcnNpb246IDIuMAotTmFtZTogcGx1Z2d5Ci1WZXJzaW9uOiAwLjMuMQotU3VtbWFy
eTogcGx1Z2luIGFuZCBob29rIGNhbGxpbmcgbWVjaGFuaXNtcyBmb3IgcHl0aG9uCi1Ib21lLXBh
Z2U6IFVOS05PV04KLUF1dGhvcjogSG9sZ2VyIEtyZWtlbAotQXV0aG9yLWVtYWlsOiBob2xnZXIg
YXQgbWVybGludXguZXUKLUxpY2Vuc2U6IE1JVCBsaWNlbnNlCi1QbGF0Zm9ybTogdW5peAotUGxh
dGZvcm06IGxpbnV4Ci1QbGF0Zm9ybTogb3N4Ci1QbGF0Zm9ybTogd2luMzIKLUNsYXNzaWZpZXI6
IERldmVsb3BtZW50IFN0YXR1cyA6OiA0IC0gQmV0YQotQ2xhc3NpZmllcjogSW50ZW5kZWQgQXVk
aWVuY2UgOjogRGV2ZWxvcGVycwotQ2xhc3NpZmllcjogTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQg
OjogTUlUIExpY2Vuc2UKLUNsYXNzaWZpZXI6IE9wZXJhdGluZyBTeXN0ZW0gOjogUE9TSVgKLUNs
YXNzaWZpZXI6IE9wZXJhdGluZyBTeXN0ZW0gOjogTWljcm9zb2Z0IDo6IFdpbmRvd3MKLUNsYXNz
aWZpZXI6IE9wZXJhdGluZyBTeXN0ZW0gOjogTWFjT1MgOjogTWFjT1MgWAotQ2xhc3NpZmllcjog
VG9waWMgOjogU29mdHdhcmUgRGV2ZWxvcG1lbnQgOjogVGVzdGluZwotQ2xhc3NpZmllcjogVG9w
aWMgOjogU29mdHdhcmUgRGV2ZWxvcG1lbnQgOjogTGlicmFyaWVzCi1DbGFzc2lmaWVyOiBUb3Bp
YyA6OiBVdGlsaXRpZXMKLUNsYXNzaWZpZXI6IFByb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhv
biA6OiAyCi1DbGFzc2lmaWVyOiBQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMi42
Ci1DbGFzc2lmaWVyOiBQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMi43Ci1DbGFz
c2lmaWVyOiBQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMwotQ2xhc3NpZmllcjog
UHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDMuMwotQ2xhc3NpZmllcjogUHJvZ3Jh
bW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDMuNAotQ2xhc3NpZmllcjogUHJvZ3JhbW1pbmcg
TGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDMuNQotCi1QbHVnaW4gcmVnaXN0cmF0aW9uIGFuZCBob29r
IGNhbGxpbmcgZm9yIFB5dGhvbgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLQotVGhpcyBpcyB0aGUgcGx1Z2luIG1hbmFnZXIgYXMgdXNlZCBieSBweXRl
c3QgYnV0IHN0cmlwcGVkCi1vZiBweXRlc3Qgc3BlY2lmaWMgZGV0YWlscy4KLQotRHVyaW5nIHRo
ZSAwLnggc2VyaWVzIHRoaXMgcGx1Z2luIGRvZXMgbm90IGhhdmUgbXVjaCBkb2N1bWVudGF0aW9u
Ci1leGNlcHQgZXh0ZW5zaXZlIGRvY3N0cmluZ3MgaW4gdGhlIHBsdWdneS5weSBtb2R1bGUuCi0K
LQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9f
cHl0ZXN0L3ZlbmRvcmVkX3BhY2thZ2VzL3BsdWdneS0wLjMuMS5kaXN0LWluZm8vUkVDT1JEIGIv
V2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L3ZlbmRvcmVk
X3BhY2thZ2VzL3BsdWdneS0wLjMuMS5kaXN0LWluZm8vUkVDT1JECmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA5NjI2NjczYzQzYy4uMDAwMDAwMDAwMDAKLS0tIGEvV2ViRHJpdmVyVGVz
dHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L3ZlbmRvcmVkX3BhY2thZ2VzL3Bs
dWdneS0wLjMuMS5kaXN0LWluZm8vUkVDT1JECisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBA
Ci1wbHVnZ3kucHksc2hhMjU2PXZfUmZXenlXNkRQVTFjSnVfRUZvTF9PSHEzdDEzcWxvVmRSNlVh
TUNYUUEsMjk4NjIKLXBsdWdneS0wLjMuMS5kaXN0LWluZm8vdG9wX2xldmVsLnR4dCxzaGEyNTY9
eEtTQ1JoYWktdjlNY2t2TXVXcU56MTZjMXRic21PZ2dvTVN3VGdjcFlIRSw3Ci1wbHVnZ3ktMC4z
LjEuZGlzdC1pbmZvL3Bici5qc29uLHNoYTI1Nj14WDNzNl9fd09jQXlGLUFaSlgxc2RaeVc2UFVY
VC1Ga2ZCbE02OUVFVUNnLDQ3Ci1wbHVnZ3ktMC4zLjEuZGlzdC1pbmZvL1JFQ09SRCwsCi1wbHVn
Z3ktMC4zLjEuZGlzdC1pbmZvL21ldGFkYXRhLmpzb24sc2hhMjU2PW5MS2x0T1Q3OGRNVi0wMHVY
RDZBZWVtcDR4TnN6MnE1OWo2T1JTRGVMancsMTAyNwotcGx1Z2d5LTAuMy4xLmRpc3QtaW5mby9N
RVRBREFUQSxzaGEyNTY9MWI4NUhvMnU0aUszME0wOTlrN2F4TXpjRERoTGNJTWItQTgySlVKWm5T
bywxMzM0Ci1wbHVnZ3ktMC4zLjEuZGlzdC1pbmZvL1dIRUVMLHNoYTI1Nj1BdlIwV2VUcERheFQ2
NDVibDVGUXhVSzZOUHNUbHMydHRwY0dKZzNqMVhnLDExMAotcGx1Z2d5LTAuMy4xLmRpc3QtaW5m
by9ERVNDUklQVElPTi5yc3Qsc2hhMjU2PVA1QWtoMUVkSUJSNkNlcXRWMlA4WndwR1NwWmlUS1B3
ME55UzdqRWlELWcsMzA2CmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mv
dG9vbHMvcHl0ZXN0L19weXRlc3QvdmVuZG9yZWRfcGFja2FnZXMvcGx1Z2d5LTAuMy4xLmRpc3Qt
aW5mby9XSEVFTCBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5
dGVzdC92ZW5kb3JlZF9wYWNrYWdlcy9wbHVnZ3ktMC4zLjEuZGlzdC1pbmZvL1dIRUVMCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZGZmNjlkODYxMC4uMDAwMDAwMDAwMDAKLS0tIGEv
V2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L3ZlbmRvcmVk
X3BhY2thZ2VzL3BsdWdneS0wLjMuMS5kaXN0LWluZm8vV0hFRUwKKysrIC9kZXYvbnVsbApAQCAt
MSw2ICswLDAgQEAKLVdoZWVsLVZlcnNpb246IDEuMAotR2VuZXJhdG9yOiBiZGlzdF93aGVlbCAo
MC4yNC4wKQotUm9vdC1Jcy1QdXJlbGliOiB0cnVlCi1UYWc6IHB5Mi1ub25lLWFueQotVGFnOiBw
eTMtbm9uZS1hbnkKLQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rv
b2xzL3B5dGVzdC9fcHl0ZXN0L3ZlbmRvcmVkX3BhY2thZ2VzL3BsdWdneS0wLjMuMS5kaXN0LWlu
Zm8vbWV0YWRhdGEuanNvbiBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRl
c3QvX3B5dGVzdC92ZW5kb3JlZF9wYWNrYWdlcy9wbHVnZ3ktMC4zLjEuZGlzdC1pbmZvL21ldGFk
YXRhLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyNmEzYTdhZGUxLi4wMDAw
MDAwMDAwMAotLS0gYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19w
eXRlc3QvdmVuZG9yZWRfcGFja2FnZXMvcGx1Z2d5LTAuMy4xLmRpc3QtaW5mby9tZXRhZGF0YS5q
c29uCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAoteyJsaWNlbnNlIjogIk1JVCBsaWNlbnNl
IiwgIm5hbWUiOiAicGx1Z2d5IiwgIm1ldGFkYXRhX3ZlcnNpb24iOiAiMi4wIiwgImdlbmVyYXRv
ciI6ICJiZGlzdF93aGVlbCAoMC4yNC4wKSIsICJzdW1tYXJ5IjogInBsdWdpbiBhbmQgaG9vayBj
YWxsaW5nIG1lY2hhbmlzbXMgZm9yIHB5dGhvbiIsICJwbGF0Zm9ybSI6ICJ1bml4IiwgInZlcnNp
b24iOiAiMC4zLjEiLCAiZXh0ZW5zaW9ucyI6IHsicHl0aG9uLmRldGFpbHMiOiB7ImRvY3VtZW50
X25hbWVzIjogeyJkZXNjcmlwdGlvbiI6ICJERVNDUklQVElPTi5yc3QifSwgImNvbnRhY3RzIjog
W3sicm9sZSI6ICJhdXRob3IiLCAiZW1haWwiOiAiaG9sZ2VyIGF0IG1lcmxpbnV4LmV1IiwgIm5h
bWUiOiAiSG9sZ2VyIEtyZWtlbCJ9XX19LCAiY2xhc3NpZmllcnMiOiBbIkRldmVsb3BtZW50IFN0
YXR1cyA6OiA0IC0gQmV0YSIsICJJbnRlbmRlZCBBdWRpZW5jZSA6OiBEZXZlbG9wZXJzIiwgIkxp
Y2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IE1JVCBMaWNlbnNlIiwgIk9wZXJhdGluZyBTeXN0ZW0g
OjogUE9TSVgiLCAiT3BlcmF0aW5nIFN5c3RlbSA6OiBNaWNyb3NvZnQgOjogV2luZG93cyIsICJP
cGVyYXRpbmcgU3lzdGVtIDo6IE1hY09TIDo6IE1hY09TIFgiLCAiVG9waWMgOjogU29mdHdhcmUg
RGV2ZWxvcG1lbnQgOjogVGVzdGluZyIsICJUb3BpYyA6OiBTb2Z0d2FyZSBEZXZlbG9wbWVudCA6
OiBMaWJyYXJpZXMiLCAiVG9waWMgOjogVXRpbGl0aWVzIiwgIlByb2dyYW1taW5nIExhbmd1YWdl
IDo6IFB5dGhvbiA6OiAyIiwgIlByb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAyLjYi
LCAiUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDIuNyIsICJQcm9ncmFtbWluZyBM
YW5ndWFnZSA6OiBQeXRob24gOjogMyIsICJQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24g
OjogMy4zIiwgIlByb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAzLjQiLCAiUHJvZ3Jh
bW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDMuNSJdfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9m
IGZpbGUKZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRl
c3QvX3B5dGVzdC92ZW5kb3JlZF9wYWNrYWdlcy9wbHVnZ3ktMC4zLjEuZGlzdC1pbmZvL3Bici5q
c29uIGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L3Zl
bmRvcmVkX3BhY2thZ2VzL3BsdWdneS0wLjMuMS5kaXN0LWluZm8vcGJyLmpzb24KZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2Yjc5ODY0MDE5Li4wMDAwMDAwMDAwMAotLS0gYS9XZWJE
cml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRlc3QvdmVuZG9yZWRfcGFj
a2FnZXMvcGx1Z2d5LTAuMy4xLmRpc3QtaW5mby9wYnIuanNvbgorKysgL2Rldi9udWxsCkBAIC0x
ICswLDAgQEAKLXsiaXNfcmVsZWFzZSI6IGZhbHNlLCAiZ2l0X3ZlcnNpb24iOiAiN2Q0YzljZCJ9
ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMv
aW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L3ZlbmRvcmVkX3BhY2thZ2VzL3BsdWdn
eS0wLjMuMS5kaXN0LWluZm8vdG9wX2xldmVsLnR4dCBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVk
L3czYy90b29scy9weXRlc3QvX3B5dGVzdC92ZW5kb3JlZF9wYWNrYWdlcy9wbHVnZ3ktMC4zLjEu
ZGlzdC1pbmZvL3RvcF9sZXZlbC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEx
YmRiNWMxZjVmLi4wMDAwMDAwMDAwMAotLS0gYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2Mv
dG9vbHMvcHl0ZXN0L19weXRlc3QvdmVuZG9yZWRfcGFja2FnZXMvcGx1Z2d5LTAuMy4xLmRpc3Qt
aW5mby90b3BfbGV2ZWwudHh0CisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotcGx1Z2d5CmRp
ZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L19weXRl
c3QvdmVuZG9yZWRfcGFja2FnZXMvcGx1Z2d5LnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQv
dzNjL3Rvb2xzL3B5dGVzdC9fcHl0ZXN0L3ZlbmRvcmVkX3BhY2thZ2VzL3BsdWdneS5weQpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmY4NDhiMjNkMzUuLjAwMDAwMDAwMDAwCi0tLSBh
L1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvX3B5dGVzdC92ZW5kb3Jl
ZF9wYWNrYWdlcy9wbHVnZ3kucHkKKysrIC9kZXYvbnVsbApAQCAtMSw3NzcgKzAsMCBAQAotIiIi
Ci1QbHVnaW5NYW5hZ2VyLCBiYXNpYyBpbml0aWFsaXphdGlvbiBhbmQgdHJhY2luZy4KLQotcGx1
Z2d5IGlzIHRoZSBjcmlzdGFsbGl6ZWQgY29yZSBvZiBwbHVnaW4gbWFuYWdlbWVudCBhcyB1c2Vk
Ci1ieSBzb21lIDE1MCBwbHVnaW5zIGZvciBweXRlc3QuCi0KLVBsdWdneSB1c2VzIHNlbWFudGlj
IHZlcnNpb25pbmcuIEJyZWFraW5nIGNoYW5nZXMgYXJlIG9ubHkgZm9yZXNlZW4gZm9yCi1NYWpv
ciByZWxlYXNlcyAoaW5jcmVtZW50ZWQgWCBpbiAiWC5ZLloiKS4gIElmIHlvdSB3YW50IHRvIHVz
ZSBwbHVnZ3kgaW4KLXlvdXIgcHJvamVjdCB5b3Ugc2hvdWxkIHRodXMgdXNlIGEgZGVwZW5kZW5j
eSByZXN0cmljdGlvbiBsaWtlCi0icGx1Z2d5Pj0wLjEuMCw8MS4wIiB0byBhdm9pZCBzdXJwcmlz
ZXMuCi0KLXBsdWdneSBpcyBjb25jZXJuZWQgd2l0aCBob29rIHNwZWNpZmljYXRpb24sIGhvb2sg
aW1wbGVtZW50YXRpb25zIGFuZCBob29rCi1jYWxsaW5nLiAgRm9yIGFueSBnaXZlbiBob29rIHNw
ZWNpZmljYXRpb24gYSBob29rIGNhbGwgaW52b2tlcyB1cCB0byBOIGltcGxlbWVudGF0aW9ucy4K
LUEgaG9vayBpbXBsZW1lbnRhdGlvbiBjYW4gaW5mbHVlbmNlIGl0cyBwb3NpdGlvbiBhbmQgdHlw
ZSBvZiBleGVjdXRpb246Ci1pZiBhdHRyaWJ1dGVkICJ0cnlmaXJzdCIgb3IgInRyeWxhc3QiIGl0
IHdpbGwgYmUgdHJpZWQgdG8gZXhlY3V0ZQotZmlyc3Qgb3IgbGFzdC4gIEhvd2V2ZXIsIGlmIGF0
dHJpYnV0ZWQgImhvb2t3cmFwcGVyIiBhbiBpbXBsZW1lbnRhdGlvbgotY2FuIHdyYXAgYWxsIGNh
bGxzIHRvIG5vbi1ob29rd3JhcHBlciBpbXBsZW1lbnRhdGlvbnMuICBBIGhvb2t3cmFwcGVyCi1j
YW4gdGh1cyBleGVjdXRlIHNvbWUgY29kZSBhaGVhZCBhbmQgYWZ0ZXIgdGhlIGV4ZWN1dGlvbiBv
ZiBvdGhlciBob29rcy4KLQotSG9vayBzcGVjaWZpY2F0aW9uIGlzIGRvbmUgYnkgd2F5IG9mIGEg
cmVndWxhciBweXRob24gZnVuY3Rpb24gd2hlcmUKLWJvdGggdGhlIGZ1bmN0aW9uIG5hbWUgYW5k
IHRoZSBuYW1lcyBvZiBhbGwgaXRzIGFyZ3VtZW50cyBhcmUgc2lnbmlmaWNhbnQuCi1FYWNoIGhv
b2sgaW1wbGVtZW50YXRpb24gZnVuY3Rpb24gaXMgdmVyaWZpZWQgYWdhaW5zdCB0aGUgb3JpZ2lu
YWwgc3BlY2lmaWNhdGlvbgotZnVuY3Rpb24sIGluY2x1ZGluZyB0aGUgbmFtZXMgb2YgYWxsIGl0
cyBhcmd1bWVudHMuICBUbyBhbGxvdyBmb3IgaG9vayBzcGVjaWZpY2F0aW9ucwotdG8gZXZvbHZl
IG92ZXIgdGhlIGxpdmV0aW1lIG9mIGEgcHJvamVjdCwgaG9vayBpbXBsZW1lbnRhdGlvbnMgY2Fu
Ci1hY2NlcHQgbGVzcyBhcmd1bWVudHMuICBPbmUgY2FuIHRodXMgYWRkIG5ldyBhcmd1bWVudHMg
YW5kIHNlbWFudGljcyB0bwotYSBob29rIHNwZWNpZmljYXRpb24gYnkgYWRkaW5nIGFub3RoZXIg
YXJndW1lbnQgdHlwaWNhbGx5IHdpdGhvdXQgYnJlYWtpbmcKLWV4aXN0aW5nIGhvb2sgaW1wbGVt
ZW50YXRpb25zLgotCi1UaGUgY2hvc2VuIGFwcHJvYWNoIGlzIG1lYW50IHRvIGxldCBhIGhvb2sg
ZGVzaWduZXIgdGhpbmsgY2FyZWZ1bHkgYWJvdXQKLXdoaWNoIG9iamVjdHMgYXJlIG5lZWRlZCBi
eSBhbiBleHRlbnNpb24gd3JpdGVyLiAgQnkgY29udHJhc3QsIHN1YmNsYXNzLWJhc2VkCi1leHRl
bnNpb24gbWVjaGFuaXNtcyBvZnRlbiBleHBvc2UgYSBsb3QgbW9yZSBzdGF0ZSBhbmQgYmVoYXZp
b3VyIHRoYW4gbmVlZGVkLAotdGh1cyByZXN0cmljdGluZyBmdXR1cmUgZGV2ZWxvcG1lbnRzLgot
Ci1QbHVnZ3kgY3VycmVudGx5IGNvbnNpc3RzIG9mIGZ1bmN0aW9uYWxpdHkgZm9yOgotCi0tIGEg
d2F5IHRvIHJlZ2lzdGVyIG5ldyBob29rIHNwZWNpZmljYXRpb25zLiAgV2l0aG91dCBhIGhvb2sK
LSAgc3BlY2lmaWNhdGlvbiBubyBob29rIGNhbGxpbmcgY2FuIGJlIHBlcmZvcm1lZC4KLQotLSBh
IHJlZ2lzdHJ5IG9mIHBsdWdpbnMgd2hpY2ggY29udGFpbiBob29rIGltcGxlbWVudGF0aW9uIGZ1
bmN0aW9ucy4gIEl0Ci0gIGlzIHBvc3NpYmxlIHRvIHJlZ2lzdGVyIHBsdWdpbnMgZm9yIHdoaWNo
IGEgaG9vayBzcGVjaWZpY2F0aW9uIGlzIG5vdCB5ZXQKLSAga25vd24gYW5kIHZhbGlkYXRlIGFs
bCBob29rcyB3aGVuIHRoZSBzeXN0ZW0gaXMgaW4gYSBtb3JlIHJlZmVyZW50aWFsbHkKLSAgY29u
c2lzdGVudCBzdGF0ZS4gIFNldHRpbmcgYW4gIm9wdGlvbmFsaG9vayIgYXR0cmlidXRpb24gdG8g
YSBob29rCi0gIGltcGxlbWVudGF0aW9uIHdpbGwgYXZvaWQgUGx1Z2luVmFsaWRhdGlvbkVycm9y
J3MgaWYgYSBzcGVjaWZpY2F0aW9uCi0gIGlzIG1pc3NpbmcuICBUaGlzIGFsbG93cyB0byBoYXZl
IG9wdGlvbmFsIGludGVncmF0aW9uIGJldHdlZW4gcGx1Z2lucy4KLQotLSBhICJob29rIiByZWxh
eSBvYmplY3QgZnJvbSB3aGljaCB5b3UgY2FuIGxhdW5jaCAxOk4gY2FsbHMgdG8KLSAgcmVnaXN0
ZXJlZCBob29rIGltcGxlbWVudGF0aW9uIGZ1bmN0aW9ucwotCi0tIGEgbWVjaGFuaXNtIGZvciBv
cmRlcmluZyBob29rIGltcGxlbWVudGF0aW9uIGZ1bmN0aW9ucwotCi0tIG1lY2hhbmlzbXMgZm9y
IHR3byBkaWZmZXJlbnQgdHlwZSBvZiAxOk4gY2FsbHM6ICJmaXJzdHJlc3VsdCIgZm9yIHdoZW4K
LSAgdGhlIGNhbGwgc2hvdWxkIHN0b3Agd2hlbiB0aGUgZmlyc3QgaW1wbGVtZW50YXRpb24gcmV0
dXJucyBhIG5vbi1Ob25lIHJlc3VsdC4KLSAgQW5kIHRoZSBvdGhlciAoZGVmYXVsdCkgd2F5IG9m
IGd1YXJhbnRlZWluZyB0aGF0IGFsbCBob29rIGltcGxlbWVudGF0aW9ucwotICB3aWxsIGJlIGNh
bGxlZCBhbmQgdGhlaXIgbm9uLU5vbmUgcmVzdWx0IGNvbGxlY3RlZC4KLQotLSBtZWNoYW5pc21z
IGZvciAiaGlzdG9yaWMiIGV4dGVuc2lvbiBwb2ludHMgc3VjaCB0aGF0IGFsbCBuZXdseQotICBy
ZWdpc3RlcmVkIGZ1bmN0aW9ucyB3aWxsIHJlY2VpdmUgYWxsIGhvb2sgY2FsbHMgdGhhdCBoYXBw
ZW5lZAotICBiZWZvcmUgdGhlaXIgcmVnaXN0cmF0aW9uLgotCi0tIGEgbWVjaGFuaXNtIGZvciBk
aXNjb3ZlcmluZyBwbHVnaW4gb2JqZWN0cyB3aGljaCBhcmUgYmFzZWQgb24KLSAgc2V0dXB0b29s
cyBiYXNlZCBlbnRyeSBwb2ludHMuCi0KLS0gYSBzaW1wbGUgdHJhY2luZyBtZWNoYW5pc20sIGlu
Y2x1ZGluZyB0cmFjaW5nIG9mIHBsdWdpbiBjYWxscyBhbmQKLSAgdGhlaXIgYXJndW1lbnRzLgot
Ci0iIiIKLWltcG9ydCBzeXMKLWltcG9ydCBpbnNwZWN0Ci0KLV9fdmVyc2lvbl9fID0gJzAuMy4x
JwotX19hbGxfXyA9IFsiUGx1Z2luTWFuYWdlciIsICJQbHVnaW5WYWxpZGF0aW9uRXJyb3IiLAot
ICAgICAgICAgICAiSG9va3NwZWNNYXJrZXIiLCAiSG9va2ltcGxNYXJrZXIiXQotCi1fcHkzID0g
c3lzLnZlcnNpb25faW5mbyA+ICgzLCAwKQotCi0KLWNsYXNzIEhvb2tzcGVjTWFya2VyOgotICAg
ICIiIiBEZWNvcmF0b3IgaGVscGVyIGNsYXNzIGZvciBtYXJraW5nIGZ1bmN0aW9ucyBhcyBob29r
IHNwZWNpZmljYXRpb25zLgotCi0gICAgWW91IGNhbiBpbnN0YW50aWF0ZSBpdCB3aXRoIGEgcHJv
amVjdF9uYW1lIHRvIGdldCBhIGRlY29yYXRvci4KLSAgICBDYWxsaW5nIFBsdWdpbk1hbmFnZXIu
YWRkX2hvb2tzcGVjcyBsYXRlciB3aWxsIGRpc2NvdmVyIGFsbCBtYXJrZWQgZnVuY3Rpb25zCi0g
ICAgaWYgdGhlIFBsdWdpbk1hbmFnZXIgdXNlcyB0aGUgc2FtZSBwcm9qZWN0X25hbWUuCi0gICAg
IiIiCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvamVjdF9uYW1lKToKLSAgICAgICAgc2Vs
Zi5wcm9qZWN0X25hbWUgPSBwcm9qZWN0X25hbWUKLQotICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBm
dW5jdGlvbj1Ob25lLCBmaXJzdHJlc3VsdD1GYWxzZSwgaGlzdG9yaWM9RmFsc2UpOgotICAgICAg
ICAiIiIgaWYgcGFzc2VkIGEgZnVuY3Rpb24sIGRpcmVjdGx5IHNldHMgYXR0cmlidXRlcyBvbiB0
aGUgZnVuY3Rpb24KLSAgICAgICAgd2hpY2ggd2lsbCBtYWtlIGl0IGRpc2NvdmVyYWJsZSB0byBh
ZGRfaG9va3NwZWNzKCkuICBJZiBwYXNzZWQgbm8KLSAgICAgICAgZnVuY3Rpb24sIHJldHVybnMg
YSBkZWNvcmF0b3Igd2hpY2ggY2FuIGJlIGFwcGxpZWQgdG8gYSBmdW5jdGlvbgotICAgICAgICBs
YXRlciB1c2luZyB0aGUgYXR0cmlidXRlcyBzdXBwbGllZC4KLQotICAgICAgICBJZiBmaXJzdHJl
c3VsdCBpcyBUcnVlIHRoZSAxOk4gaG9vayBjYWxsIChOIGJlaW5nIHRoZSBudW1iZXIgb2YgcmVn
aXN0ZXJlZAotICAgICAgICBob29rIGltcGxlbWVudGF0aW9uIGZ1bmN0aW9ucykgd2lsbCBzdG9w
IGF0IEk8PU4gd2hlbiB0aGUgSSd0aCBmdW5jdGlvbgotICAgICAgICByZXR1cm5zIGEgbm9uLU5v
bmUgcmVzdWx0LgotCi0gICAgICAgIElmIGhpc3RvcmljIGlzIFRydWUgY2FsbHMgdG8gYSBob29r
IHdpbGwgYmUgbWVtb3JpemVkIGFuZCByZXBsYXllZAotICAgICAgICBvbiBsYXRlciByZWdpc3Rl
cmVkIHBsdWdpbnMuCi0KLSAgICAgICAgIiIiCi0gICAgICAgIGRlZiBzZXRhdHRyX2hvb2tzcGVj
X29wdHMoZnVuYyk6Ci0gICAgICAgICAgICBpZiBoaXN0b3JpYyBhbmQgZmlyc3RyZXN1bHQ6Ci0g
ICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiY2Fubm90IGhhdmUgYSBoaXN0b3JpYyBm
aXJzdHJlc3VsdCBob29rIikKLSAgICAgICAgICAgIHNldGF0dHIoZnVuYywgc2VsZi5wcm9qZWN0
X25hbWUgKyAiX3NwZWMiLAotICAgICAgICAgICAgICAgICAgIGRpY3QoZmlyc3RyZXN1bHQ9Zmly
c3RyZXN1bHQsIGhpc3RvcmljPWhpc3RvcmljKSkKLSAgICAgICAgICAgIHJldHVybiBmdW5jCi0K
LSAgICAgICAgaWYgZnVuY3Rpb24gaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICByZXR1cm4gc2V0
YXR0cl9ob29rc3BlY19vcHRzKGZ1bmN0aW9uKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAg
cmV0dXJuIHNldGF0dHJfaG9va3NwZWNfb3B0cwotCi0KLWNsYXNzIEhvb2tpbXBsTWFya2VyOgot
ICAgICIiIiBEZWNvcmF0b3IgaGVscGVyIGNsYXNzIGZvciBtYXJraW5nIGZ1bmN0aW9ucyBhcyBo
b29rIGltcGxlbWVudGF0aW9ucy4KLQotICAgIFlvdSBjYW4gaW5zdGFudGlhdGUgd2l0aCBhIHBy
b2plY3RfbmFtZSB0byBnZXQgYSBkZWNvcmF0b3IuCi0gICAgQ2FsbGluZyBQbHVnaW5NYW5hZ2Vy
LnJlZ2lzdGVyIGxhdGVyIHdpbGwgZGlzY292ZXIgYWxsIG1hcmtlZCBmdW5jdGlvbnMKLSAgICBp
ZiB0aGUgUGx1Z2luTWFuYWdlciB1c2VzIHRoZSBzYW1lIHByb2plY3RfbmFtZS4KLSAgICAiIiIK
LSAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvamVjdF9uYW1lKToKLSAgICAgICAgc2VsZi5wcm9q
ZWN0X25hbWUgPSBwcm9qZWN0X25hbWUKLQotICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBmdW5jdGlv
bj1Ob25lLCBob29rd3JhcHBlcj1GYWxzZSwgb3B0aW9uYWxob29rPUZhbHNlLAotICAgICAgICAg
ICAgICAgICB0cnlmaXJzdD1GYWxzZSwgdHJ5bGFzdD1GYWxzZSk6Ci0KLSAgICAgICAgIiIiIGlm
IHBhc3NlZCBhIGZ1bmN0aW9uLCBkaXJlY3RseSBzZXRzIGF0dHJpYnV0ZXMgb24gdGhlIGZ1bmN0
aW9uCi0gICAgICAgIHdoaWNoIHdpbGwgbWFrZSBpdCBkaXNjb3ZlcmFibGUgdG8gcmVnaXN0ZXIo
KS4gIElmIHBhc3NlZCBubyBmdW5jdGlvbiwKLSAgICAgICAgcmV0dXJucyBhIGRlY29yYXRvciB3
aGljaCBjYW4gYmUgYXBwbGllZCB0byBhIGZ1bmN0aW9uIGxhdGVyIHVzaW5nCi0gICAgICAgIHRo
ZSBhdHRyaWJ1dGVzIHN1cHBsaWVkLgotCi0gICAgICAgIElmIG9wdGlvbmFsaG9vayBpcyBUcnVl
IGEgbWlzc2luZyBtYXRjaGluZyBob29rIHNwZWNpZmljYXRpb24gd2lsbCBub3QgcmVzdWx0Ci0g
ICAgICAgIGluIGFuIGVycm9yIChieSBkZWZhdWx0IGl0IGlzIGFuIGVycm9yIGlmIG5vIG1hdGNo
aW5nIHNwZWMgaXMgZm91bmQpLgotCi0gICAgICAgIElmIHRyeWZpcnN0IGlzIFRydWUgdGhpcyBo
b29rIGltcGxlbWVudGF0aW9uIHdpbGwgcnVuIGFzIGVhcmx5IGFzIHBvc3NpYmxlCi0gICAgICAg
IGluIHRoZSBjaGFpbiBvZiBOIGhvb2sgaW1wbGVtZW50YXRpb25zIGZvciBhIHNwZWNmaWNhdGlv
bi4KLQotICAgICAgICBJZiB0cnlsYXN0IGlzIFRydWUgdGhpcyBob29rIGltcGxlbWVudGF0aW9u
IHdpbGwgcnVuIGFzIGxhdGUgYXMgcG9zc2libGUKLSAgICAgICAgaW4gdGhlIGNoYWluIG9mIE4g
aG9vayBpbXBsZW1lbnRhdGlvbnMuCi0KLSAgICAgICAgSWYgaG9va3dyYXBwZXIgaXMgVHJ1ZSB0
aGUgaG9vayBpbXBsZW1lbnRhdGlvbnMgbmVlZHMgdG8gZXhlY3V0ZSBleGFjdGx5Ci0gICAgICAg
IG9uZSAieWllbGQiLiAgVGhlIGNvZGUgYmVmb3JlIHRoZSB5aWVsZCBpcyBydW4gZWFybHkgYmVm
b3JlIGFueSBub24taG9va3dyYXBwZXIKLSAgICAgICAgZnVuY3Rpb24gaXMgcnVuLiAgVGhlIGNv
ZGUgYWZ0ZXIgdGhlIHlpZWxkIGlzIHJ1biBhZnRlciBhbGwgbm9uLWhvb2t3cmFwcGVyCi0gICAg
ICAgIGZ1bmN0aW9uIGhhdmUgcnVuLiAgVGhlIHlpZWxkIHJlY2VpdmVzIGFuIGBgX0NhbGxPdXRj
b21lYGAgb2JqZWN0IHJlcHJlc2VudGluZwotICAgICAgICB0aGUgZXhjZXB0aW9uIG9yIHJlc3Vs
dCBvdXRjb21lIG9mIHRoZSBpbm5lciBjYWxscyAoaW5jbHVkaW5nIG90aGVyIGhvb2t3cmFwcGVy
Ci0gICAgICAgIGNhbGxzKS4KLQotICAgICAgICAiIiIKLSAgICAgICAgZGVmIHNldGF0dHJfaG9v
a2ltcGxfb3B0cyhmdW5jKToKLSAgICAgICAgICAgIHNldGF0dHIoZnVuYywgc2VsZi5wcm9qZWN0
X25hbWUgKyAiX2ltcGwiLAotICAgICAgICAgICAgICAgICAgIGRpY3QoaG9va3dyYXBwZXI9aG9v
a3dyYXBwZXIsIG9wdGlvbmFsaG9vaz1vcHRpb25hbGhvb2ssCi0gICAgICAgICAgICAgICAgICAg
ICAgICB0cnlmaXJzdD10cnlmaXJzdCwgdHJ5bGFzdD10cnlsYXN0KSkKLSAgICAgICAgICAgIHJl
dHVybiBmdW5jCi0KLSAgICAgICAgaWYgZnVuY3Rpb24gaXMgTm9uZToKLSAgICAgICAgICAgIHJl
dHVybiBzZXRhdHRyX2hvb2tpbXBsX29wdHMKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJl
dHVybiBzZXRhdHRyX2hvb2tpbXBsX29wdHMoZnVuY3Rpb24pCi0KLQotZGVmIG5vcm1hbGl6ZV9o
b29raW1wbF9vcHRzKG9wdHMpOgotICAgIG9wdHMuc2V0ZGVmYXVsdCgidHJ5Zmlyc3QiLCBGYWxz
ZSkKLSAgICBvcHRzLnNldGRlZmF1bHQoInRyeWxhc3QiLCBGYWxzZSkKLSAgICBvcHRzLnNldGRl
ZmF1bHQoImhvb2t3cmFwcGVyIiwgRmFsc2UpCi0gICAgb3B0cy5zZXRkZWZhdWx0KCJvcHRpb25h
bGhvb2siLCBGYWxzZSkKLQotCi1jbGFzcyBfVGFnVHJhY2VyOgotICAgIGRlZiBfX2luaXRfXyhz
ZWxmKToKLSAgICAgICAgc2VsZi5fdGFnMnByb2MgPSB7fQotICAgICAgICBzZWxmLndyaXRlciA9
IE5vbmUKLSAgICAgICAgc2VsZi5pbmRlbnQgPSAwCi0KLSAgICBkZWYgZ2V0KHNlbGYsIG5hbWUp
OgotICAgICAgICByZXR1cm4gX1RhZ1RyYWNlclN1YihzZWxmLCAobmFtZSwpKQotCi0gICAgZGVm
IGZvcm1hdF9tZXNzYWdlKHNlbGYsIHRhZ3MsIGFyZ3MpOgotICAgICAgICBpZiBpc2luc3RhbmNl
KGFyZ3NbLTFdLCBkaWN0KToKLSAgICAgICAgICAgIGV4dHJhID0gYXJnc1stMV0KLSAgICAgICAg
ICAgIGFyZ3MgPSBhcmdzWzotMV0KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGV4dHJhID0g
e30KLQotICAgICAgICBjb250ZW50ID0gIiAiLmpvaW4obWFwKHN0ciwgYXJncykpCi0gICAgICAg
IGluZGVudCA9ICIgICIgKiBzZWxmLmluZGVudAotCi0gICAgICAgIGxpbmVzID0gWwotICAgICAg
ICAgICAgIiVzJXMgWyVzXVxuIiAlIChpbmRlbnQsIGNvbnRlbnQsICI6Ii5qb2luKHRhZ3MpKQot
ICAgICAgICBdCi0KLSAgICAgICAgZm9yIG5hbWUsIHZhbHVlIGluIGV4dHJhLml0ZW1zKCk6Ci0g
ICAgICAgICAgICBsaW5lcy5hcHBlbmQoIiVzICAgICVzOiAlc1xuIiAlIChpbmRlbnQsIG5hbWUs
IHZhbHVlKSkKLSAgICAgICAgcmV0dXJuIGxpbmVzCi0KLSAgICBkZWYgcHJvY2Vzc21lc3NhZ2Uo
c2VsZiwgdGFncywgYXJncyk6Ci0gICAgICAgIGlmIHNlbGYud3JpdGVyIGlzIG5vdCBOb25lIGFu
ZCBhcmdzOgotICAgICAgICAgICAgbGluZXMgPSBzZWxmLmZvcm1hdF9tZXNzYWdlKHRhZ3MsIGFy
Z3MpCi0gICAgICAgICAgICBzZWxmLndyaXRlcignJy5qb2luKGxpbmVzKSkKLSAgICAgICAgdHJ5
OgotICAgICAgICAgICAgc2VsZi5fdGFnMnByb2NbdGFnc10odGFncywgYXJncykKLSAgICAgICAg
ZXhjZXB0IEtleUVycm9yOgotICAgICAgICAgICAgcGFzcwotCi0gICAgZGVmIHNldHdyaXRlcihz
ZWxmLCB3cml0ZXIpOgotICAgICAgICBzZWxmLndyaXRlciA9IHdyaXRlcgotCi0gICAgZGVmIHNl
dHByb2Nlc3NvcihzZWxmLCB0YWdzLCBwcm9jZXNzb3IpOgotICAgICAgICBpZiBpc2luc3RhbmNl
KHRhZ3MsIHN0cik6Ci0gICAgICAgICAgICB0YWdzID0gdHVwbGUodGFncy5zcGxpdCgiOiIpKQot
ICAgICAgICBlbHNlOgotICAgICAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UodGFncywgdHVwbGUp
Ci0gICAgICAgIHNlbGYuX3RhZzJwcm9jW3RhZ3NdID0gcHJvY2Vzc29yCi0KLQotY2xhc3MgX1Rh
Z1RyYWNlclN1YjoKLSAgICBkZWYgX19pbml0X18oc2VsZiwgcm9vdCwgdGFncyk6Ci0gICAgICAg
IHNlbGYucm9vdCA9IHJvb3QKLSAgICAgICAgc2VsZi50YWdzID0gdGFncwotCi0gICAgZGVmIF9f
Y2FsbF9fKHNlbGYsICphcmdzKToKLSAgICAgICAgc2VsZi5yb290LnByb2Nlc3NtZXNzYWdlKHNl
bGYudGFncywgYXJncykKLQotICAgIGRlZiBzZXRteXByb2Nlc3NvcihzZWxmLCBwcm9jZXNzb3Ip
OgotICAgICAgICBzZWxmLnJvb3Quc2V0cHJvY2Vzc29yKHNlbGYudGFncywgcHJvY2Vzc29yKQot
Ci0gICAgZGVmIGdldChzZWxmLCBuYW1lKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX19jbGFzc19f
KHNlbGYucm9vdCwgc2VsZi50YWdzICsgKG5hbWUsKSkKLQotCi1kZWYgX3JhaXNlX3dyYXBmYWls
KHdyYXBfY29udHJvbGxlciwgbXNnKToKLSAgICBjbyA9IHdyYXBfY29udHJvbGxlci5naV9jb2Rl
Ci0gICAgcmFpc2UgUnVudGltZUVycm9yKCJ3cmFwX2NvbnRyb2xsZXIgYXQgJXIgJXM6JWQgJXMi
ICUKLSAgICAgICAgICAgICAgICAgICAoY28uY29fbmFtZSwgY28uY29fZmlsZW5hbWUsIGNvLmNv
X2ZpcnN0bGluZW5vLCBtc2cpKQotCi0KLWRlZiBfd3JhcHBlZF9jYWxsKHdyYXBfY29udHJvbGxl
ciwgZnVuYyk6Ci0gICAgIiIiIFdyYXAgY2FsbGluZyB0byBhIGZ1bmN0aW9uIHdpdGggYSBnZW5l
cmF0b3Igd2hpY2ggbmVlZHMgdG8geWllbGQKLSAgICBleGFjdGx5IG9uY2UuICBUaGUgeWllbGQg
cG9pbnQgd2lsbCB0cmlnZ2VyIGNhbGxpbmcgdGhlIHdyYXBwZWQgZnVuY3Rpb24KLSAgICBhbmQg
cmV0dXJuIGl0cyBfQ2FsbE91dGNvbWUgdG8gdGhlIHlpZWxkIHBvaW50LiAgVGhlIGdlbmVyYXRv
ciB0aGVuIG5lZWRzCi0gICAgdG8gZmluaXNoIChyYWlzZSBTdG9wSXRlcmF0aW9uKSBpbiBvcmRl
ciBmb3IgdGhlIHdyYXBwZWQgY2FsbCB0byBjb21wbGV0ZS4KLSAgICAiIiIKLSAgICB0cnk6Ci0g
ICAgICAgIG5leHQod3JhcF9jb250cm9sbGVyKSAgICMgZmlyc3QgeWllbGQKLSAgICBleGNlcHQg
U3RvcEl0ZXJhdGlvbjoKLSAgICAgICAgX3JhaXNlX3dyYXBmYWlsKHdyYXBfY29udHJvbGxlciwg
ImRpZCBub3QgeWllbGQiKQotICAgIGNhbGxfb3V0Y29tZSA9IF9DYWxsT3V0Y29tZShmdW5jKQot
ICAgIHRyeToKLSAgICAgICAgd3JhcF9jb250cm9sbGVyLnNlbmQoY2FsbF9vdXRjb21lKQotICAg
ICAgICBfcmFpc2Vfd3JhcGZhaWwod3JhcF9jb250cm9sbGVyLCAiaGFzIHNlY29uZCB5aWVsZCIp
Ci0gICAgZXhjZXB0IFN0b3BJdGVyYXRpb246Ci0gICAgICAgIHBhc3MKLSAgICByZXR1cm4gY2Fs
bF9vdXRjb21lLmdldF9yZXN1bHQoKQotCi0KLWNsYXNzIF9DYWxsT3V0Y29tZToKLSAgICAiIiIg
T3V0Y29tZSBvZiBhIGZ1bmN0aW9uIGNhbGwsIGVpdGhlciBhbiBleGNlcHRpb24gb3IgYSBwcm9w
ZXIgcmVzdWx0LgotICAgIENhbGxpbmcgdGhlIGBgZ2V0X3Jlc3VsdGBgIG1ldGhvZCB3aWxsIHJl
dHVybiB0aGUgcmVzdWx0IG9yIHJlcmFpc2UKLSAgICB0aGUgZXhjZXB0aW9uIHJhaXNlZCB3aGVu
IHRoZSBmdW5jdGlvbiB3YXMgY2FsbGVkLiAiIiIKLSAgICBleGNpbmZvID0gTm9uZQotCi0gICAg
ZGVmIF9faW5pdF9fKHNlbGYsIGZ1bmMpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxm
LnJlc3VsdCA9IGZ1bmMoKQotICAgICAgICBleGNlcHQgQmFzZUV4Y2VwdGlvbjoKLSAgICAgICAg
ICAgIHNlbGYuZXhjaW5mbyA9IHN5cy5leGNfaW5mbygpCi0KLSAgICBkZWYgZm9yY2VfcmVzdWx0
KHNlbGYsIHJlc3VsdCk6Ci0gICAgICAgIHNlbGYucmVzdWx0ID0gcmVzdWx0Ci0gICAgICAgIHNl
bGYuZXhjaW5mbyA9IE5vbmUKLQotICAgIGRlZiBnZXRfcmVzdWx0KHNlbGYpOgotICAgICAgICBp
ZiBzZWxmLmV4Y2luZm8gaXMgTm9uZToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLnJlc3VsdAot
ICAgICAgICBlbHNlOgotICAgICAgICAgICAgZXggPSBzZWxmLmV4Y2luZm8KLSAgICAgICAgICAg
IGlmIF9weTM6Ci0gICAgICAgICAgICAgICAgcmFpc2UgZXhbMV0ud2l0aF90cmFjZWJhY2soZXhb
Ml0pCi0gICAgICAgICAgICBfcmVyYWlzZSgqZXgpICAjIG5vcWEKLQotaWYgbm90IF9weTM6Ci0g
ICAgZXhlYygiIiIKLWRlZiBfcmVyYWlzZShjbHMsIHZhbCwgdGIpOgotICAgIHJhaXNlIGNscywg
dmFsLCB0YgotIiIiKQotCi0KLWNsYXNzIF9UcmFjZWRIb29rRXhlY3V0aW9uOgotICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBwbHVnaW5tYW5hZ2VyLCBiZWZvcmUsIGFmdGVyKToKLSAgICAgICAgc2Vs
Zi5wbHVnaW5tYW5hZ2VyID0gcGx1Z2lubWFuYWdlcgotICAgICAgICBzZWxmLmJlZm9yZSA9IGJl
Zm9yZQotICAgICAgICBzZWxmLmFmdGVyID0gYWZ0ZXIKLSAgICAgICAgc2VsZi5vbGRjYWxsID0g
cGx1Z2lubWFuYWdlci5faW5uZXJfaG9va2V4ZWMKLSAgICAgICAgYXNzZXJ0IG5vdCBpc2luc3Rh
bmNlKHNlbGYub2xkY2FsbCwgX1RyYWNlZEhvb2tFeGVjdXRpb24pCi0gICAgICAgIHNlbGYucGx1
Z2lubWFuYWdlci5faW5uZXJfaG9va2V4ZWMgPSBzZWxmCi0KLSAgICBkZWYgX19jYWxsX18oc2Vs
ZiwgaG9vaywgaG9va19pbXBscywga3dhcmdzKToKLSAgICAgICAgc2VsZi5iZWZvcmUoaG9vay5u
YW1lLCBob29rX2ltcGxzLCBrd2FyZ3MpCi0gICAgICAgIG91dGNvbWUgPSBfQ2FsbE91dGNvbWUo
bGFtYmRhOiBzZWxmLm9sZGNhbGwoaG9vaywgaG9va19pbXBscywga3dhcmdzKSkKLSAgICAgICAg
c2VsZi5hZnRlcihvdXRjb21lLCBob29rLm5hbWUsIGhvb2tfaW1wbHMsIGt3YXJncykKLSAgICAg
ICAgcmV0dXJuIG91dGNvbWUuZ2V0X3Jlc3VsdCgpCi0KLSAgICBkZWYgdW5kbyhzZWxmKToKLSAg
ICAgICAgc2VsZi5wbHVnaW5tYW5hZ2VyLl9pbm5lcl9ob29rZXhlYyA9IHNlbGYub2xkY2FsbAot
Ci0KLWNsYXNzIFBsdWdpbk1hbmFnZXIob2JqZWN0KToKLSAgICAiIiIgQ29yZSBQbHVnaW5tYW5h
Z2VyIGNsYXNzIHdoaWNoIG1hbmFnZXMgcmVnaXN0cmF0aW9uCi0gICAgb2YgcGx1Z2luIG9iamVj
dHMgYW5kIDE6TiBob29rIGNhbGxpbmcuCi0KLSAgICBZb3UgY2FuIHJlZ2lzdGVyIG5ldyBob29r
cyBieSBjYWxsaW5nIGBgYWRkaG9va3MobW9kdWxlX29yX2NsYXNzKWBgLgotICAgIFlvdSBjYW4g
cmVnaXN0ZXIgcGx1Z2luIG9iamVjdHMgKHdoaWNoIGNvbnRhaW4gaG9va3MpIGJ5IGNhbGxpbmcK
LSAgICBgYHJlZ2lzdGVyKHBsdWdpbilgYC4gIFRoZSBQbHVnaW5tYW5hZ2VyIGlzIGluaXRpYWxp
emVkIHdpdGggYQotICAgIHByZWZpeCB0aGF0IGlzIHNlYXJjaGVkIGZvciBpbiB0aGUgbmFtZXMg
b2YgdGhlIGRpY3Qgb2YgcmVnaXN0ZXJlZAotICAgIHBsdWdpbiBvYmplY3RzLiAgQW4gb3B0aW9u
YWwgZXhjbHVkZWZ1bmMgYWxsb3dzIHRvIGJsYWNrbGlzdCBuYW1lcyB3aGljaAotICAgIGFyZSBu
b3QgY29uc2lkZXJlZCBhcyBob29rcyBkZXNwaXRlIGEgbWF0Y2hpbmcgcHJlZml4LgotCi0gICAg
Rm9yIGRlYnVnZ2luZyBwdXJwb3NlcyB5b3UgY2FuIGNhbGwgYGBlbmFibGVfdHJhY2luZygpYGAK
LSAgICB3aGljaCB3aWxsIHN1YnNlcXVlbnRseSBzZW5kIGRlYnVnIGluZm9ybWF0aW9uIHRvIHRo
ZSB0cmFjZSBoZWxwZXIuCi0gICAgIiIiCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvamVj
dF9uYW1lLCBpbXBscHJlZml4PU5vbmUpOgotICAgICAgICAiIiIgaWYgaW1wbHByZWZpeCBpcyBn
aXZlbiBpbXBsZW1lbnRhdGlvbiBmdW5jdGlvbnMKLSAgICAgICAgd2lsbCBiZSByZWNvZ25pemVk
IGlmIHRoZWlyIG5hbWUgbWF0Y2hlcyB0aGUgaW1wbHByZWZpeC4gIiIiCi0gICAgICAgIHNlbGYu
cHJvamVjdF9uYW1lID0gcHJvamVjdF9uYW1lCi0gICAgICAgIHNlbGYuX25hbWUycGx1Z2luID0g
e30KLSAgICAgICAgc2VsZi5fcGx1Z2luMmhvb2tjYWxsZXJzID0ge30KLSAgICAgICAgc2VsZi5f
cGx1Z2luX2Rpc3RpbmZvID0gW10KLSAgICAgICAgc2VsZi50cmFjZSA9IF9UYWdUcmFjZXIoKS5n
ZXQoInBsdWdpbm1hbmFnZSIpCi0gICAgICAgIHNlbGYuaG9vayA9IF9Ib29rUmVsYXkoc2VsZi50
cmFjZS5yb290LmdldCgiaG9vayIpKQotICAgICAgICBzZWxmLl9pbXBscHJlZml4ID0gaW1wbHBy
ZWZpeAotICAgICAgICBzZWxmLl9pbm5lcl9ob29rZXhlYyA9IGxhbWJkYSBob29rLCBtZXRob2Rz
LCBrd2FyZ3M6IFwKLSAgICAgICAgICAgIF9NdWx0aUNhbGwobWV0aG9kcywga3dhcmdzLCBob29r
LnNwZWNfb3B0cykuZXhlY3V0ZSgpCi0KLSAgICBkZWYgX2hvb2tleGVjKHNlbGYsIGhvb2ssIG1l
dGhvZHMsIGt3YXJncyk6Ci0gICAgICAgICMgY2FsbGVkIGZyb20gYWxsIGhvb2tjYWxsZXIgaW5z
dGFuY2VzLgotICAgICAgICAjIGVuYWJsZV90cmFjaW5nIHdpbGwgc2V0IGl0cyBvd24gd3JhcHBp
bmcgZnVuY3Rpb24gYXQgc2VsZi5faW5uZXJfaG9va2V4ZWMKLSAgICAgICAgcmV0dXJuIHNlbGYu
X2lubmVyX2hvb2tleGVjKGhvb2ssIG1ldGhvZHMsIGt3YXJncykKLQotICAgIGRlZiByZWdpc3Rl
cihzZWxmLCBwbHVnaW4sIG5hbWU9Tm9uZSk6Ci0gICAgICAgICIiIiBSZWdpc3RlciBhIHBsdWdp
biBhbmQgcmV0dXJuIGl0cyBjYW5vbmljYWwgbmFtZSBvciBOb25lIGlmIHRoZSBuYW1lCi0gICAg
ICAgIGlzIGJsb2NrZWQgZnJvbSByZWdpc3RlcmluZy4gIFJhaXNlIGEgVmFsdWVFcnJvciBpZiB0
aGUgcGx1Z2luIGlzIGFscmVhZHkKLSAgICAgICAgcmVnaXN0ZXJlZC4gIiIiCi0gICAgICAgIHBs
dWdpbl9uYW1lID0gbmFtZSBvciBzZWxmLmdldF9jYW5vbmljYWxfbmFtZShwbHVnaW4pCi0KLSAg
ICAgICAgaWYgcGx1Z2luX25hbWUgaW4gc2VsZi5fbmFtZTJwbHVnaW4gb3IgcGx1Z2luIGluIHNl
bGYuX3BsdWdpbjJob29rY2FsbGVyczoKLSAgICAgICAgICAgIGlmIHNlbGYuX25hbWUycGx1Z2lu
LmdldChwbHVnaW5fbmFtZSwgLTEpIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICAj
IGJsb2NrZWQgcGx1Z2luLCByZXR1cm4gTm9uZSB0byBpbmRpY2F0ZSBubyByZWdpc3RyYXRpb24K
LSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlBsdWdpbiBhbHJlYWR5IHJlZ2lzdGVyZWQ6
ICVzPSVzXG4lcyIgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwbHVnaW5fbmFtZSwg
cGx1Z2luLCBzZWxmLl9uYW1lMnBsdWdpbikpCi0KLSAgICAgICAgIyBYWFggaWYgYW4gZXJyb3Ig
aGFwcGVucyB3ZSBzaG91bGQgbWFrZSBzdXJlIG5vIHN0YXRlIGhhcyBiZWVuCi0gICAgICAgICMg
Y2hhbmdlZCBhdCBwb2ludCBvZiByZXR1cm4KLSAgICAgICAgc2VsZi5fbmFtZTJwbHVnaW5bcGx1
Z2luX25hbWVdID0gcGx1Z2luCi0KLSAgICAgICAgIyByZWdpc3RlciBtYXRjaGluZyBob29rIGlt
cGxlbWVudGF0aW9ucyBvZiB0aGUgcGx1Z2luCi0gICAgICAgIHNlbGYuX3BsdWdpbjJob29rY2Fs
bGVyc1twbHVnaW5dID0gaG9va2NhbGxlcnMgPSBbXQotICAgICAgICBmb3IgbmFtZSBpbiBkaXIo
cGx1Z2luKToKLSAgICAgICAgICAgIGhvb2tpbXBsX29wdHMgPSBzZWxmLnBhcnNlX2hvb2tpbXBs
X29wdHMocGx1Z2luLCBuYW1lKQotICAgICAgICAgICAgaWYgaG9va2ltcGxfb3B0cyBpcyBub3Qg
Tm9uZToKLSAgICAgICAgICAgICAgICBub3JtYWxpemVfaG9va2ltcGxfb3B0cyhob29raW1wbF9v
cHRzKQotICAgICAgICAgICAgICAgIG1ldGhvZCA9IGdldGF0dHIocGx1Z2luLCBuYW1lKQotICAg
ICAgICAgICAgICAgIGhvb2tpbXBsID0gSG9va0ltcGwocGx1Z2luLCBwbHVnaW5fbmFtZSwgbWV0
aG9kLCBob29raW1wbF9vcHRzKQotICAgICAgICAgICAgICAgIGhvb2sgPSBnZXRhdHRyKHNlbGYu
aG9vaywgbmFtZSwgTm9uZSkKLSAgICAgICAgICAgICAgICBpZiBob29rIGlzIE5vbmU6Ci0gICAg
ICAgICAgICAgICAgICAgIGhvb2sgPSBfSG9va0NhbGxlcihuYW1lLCBzZWxmLl9ob29rZXhlYykK
LSAgICAgICAgICAgICAgICAgICAgc2V0YXR0cihzZWxmLmhvb2ssIG5hbWUsIGhvb2spCi0gICAg
ICAgICAgICAgICAgZWxpZiBob29rLmhhc19zcGVjKCk6Ci0gICAgICAgICAgICAgICAgICAgIHNl
bGYuX3ZlcmlmeV9ob29rKGhvb2ssIGhvb2tpbXBsKQotICAgICAgICAgICAgICAgICAgICBob29r
Ll9tYXliZV9hcHBseV9oaXN0b3J5KGhvb2tpbXBsKQotICAgICAgICAgICAgICAgIGhvb2suX2Fk
ZF9ob29raW1wbChob29raW1wbCkKLSAgICAgICAgICAgICAgICBob29rY2FsbGVycy5hcHBlbmQo
aG9vaykKLSAgICAgICAgcmV0dXJuIHBsdWdpbl9uYW1lCi0KLSAgICBkZWYgcGFyc2VfaG9va2lt
cGxfb3B0cyhzZWxmLCBwbHVnaW4sIG5hbWUpOgotICAgICAgICBtZXRob2QgPSBnZXRhdHRyKHBs
dWdpbiwgbmFtZSkKLSAgICAgICAgcmVzID0gZ2V0YXR0cihtZXRob2QsIHNlbGYucHJvamVjdF9u
YW1lICsgIl9pbXBsIiwgTm9uZSkKLSAgICAgICAgaWYgcmVzIGlzIG5vdCBOb25lIGFuZCBub3Qg
aXNpbnN0YW5jZShyZXMsIGRpY3QpOgotICAgICAgICAgICAgIyBmYWxzZSBwb3NpdGl2ZQotICAg
ICAgICAgICAgcmVzID0gTm9uZQotICAgICAgICBlbGlmIHJlcyBpcyBOb25lIGFuZCBzZWxmLl9p
bXBscHJlZml4IGFuZCBuYW1lLnN0YXJ0c3dpdGgoc2VsZi5faW1wbHByZWZpeCk6Ci0gICAgICAg
ICAgICByZXMgPSB7fQotICAgICAgICByZXR1cm4gcmVzCi0KLSAgICBkZWYgdW5yZWdpc3Rlcihz
ZWxmLCBwbHVnaW49Tm9uZSwgbmFtZT1Ob25lKToKLSAgICAgICAgIiIiIHVucmVnaXN0ZXIgYSBw
bHVnaW4gb2JqZWN0IGFuZCBhbGwgaXRzIGNvbnRhaW5lZCBob29rIGltcGxlbWVudGF0aW9ucwot
ICAgICAgICBmcm9tIGludGVybmFsIGRhdGEgc3RydWN0dXJlcy4gIiIiCi0gICAgICAgIGlmIG5h
bWUgaXMgTm9uZToKLSAgICAgICAgICAgIGFzc2VydCBwbHVnaW4gaXMgbm90IE5vbmUsICJvbmUg
b2YgbmFtZSBvciBwbHVnaW4gbmVlZHMgdG8gYmUgc3BlY2lmaWVkIgotICAgICAgICAgICAgbmFt
ZSA9IHNlbGYuZ2V0X25hbWUocGx1Z2luKQotCi0gICAgICAgIGlmIHBsdWdpbiBpcyBOb25lOgot
ICAgICAgICAgICAgcGx1Z2luID0gc2VsZi5nZXRfcGx1Z2luKG5hbWUpCi0KLSAgICAgICAgIyBp
ZiBzZWxmLl9uYW1lMnBsdWdpbltuYW1lXSA9PSBOb25lIHJlZ2lzdHJhdGlvbiB3YXMgYmxvY2tl
ZDogaWdub3JlCi0gICAgICAgIGlmIHNlbGYuX25hbWUycGx1Z2luLmdldChuYW1lKToKLSAgICAg
ICAgICAgIGRlbCBzZWxmLl9uYW1lMnBsdWdpbltuYW1lXQotCi0gICAgICAgIGZvciBob29rY2Fs
bGVyIGluIHNlbGYuX3BsdWdpbjJob29rY2FsbGVycy5wb3AocGx1Z2luLCBbXSk6Ci0gICAgICAg
ICAgICBob29rY2FsbGVyLl9yZW1vdmVfcGx1Z2luKHBsdWdpbikKLQotICAgICAgICByZXR1cm4g
cGx1Z2luCi0KLSAgICBkZWYgc2V0X2Jsb2NrZWQoc2VsZiwgbmFtZSk6Ci0gICAgICAgICIiIiBi
bG9jayByZWdpc3RyYXRpb25zIG9mIHRoZSBnaXZlbiBuYW1lLCB1bnJlZ2lzdGVyIGlmIGFscmVh
ZHkgcmVnaXN0ZXJlZC4gIiIiCi0gICAgICAgIHNlbGYudW5yZWdpc3RlcihuYW1lPW5hbWUpCi0g
ICAgICAgIHNlbGYuX25hbWUycGx1Z2luW25hbWVdID0gTm9uZQotCi0gICAgZGVmIGlzX2Jsb2Nr
ZWQoc2VsZiwgbmFtZSk6Ci0gICAgICAgICIiIiByZXR1cm4gVHJ1ZSBpZiB0aGUgbmFtZSBibG9n
cyByZWdpc3RlcmluZyBwbHVnaW5zIG9mIHRoYXQgbmFtZS4gIiIiCi0gICAgICAgIHJldHVybiBu
YW1lIGluIHNlbGYuX25hbWUycGx1Z2luIGFuZCBzZWxmLl9uYW1lMnBsdWdpbltuYW1lXSBpcyBO
b25lCi0KLSAgICBkZWYgYWRkX2hvb2tzcGVjcyhzZWxmLCBtb2R1bGVfb3JfY2xhc3MpOgotICAg
ICAgICAiIiIgYWRkIG5ldyBob29rIHNwZWNpZmljYXRpb25zIGRlZmluZWQgaW4gdGhlIGdpdmVu
IG1vZHVsZV9vcl9jbGFzcy4KLSAgICAgICAgRnVuY3Rpb25zIGFyZSByZWNvZ25pemVkIGlmIHRo
ZXkgaGF2ZSBiZWVuIGRlY29yYXRlZCBhY2NvcmRpbmdseS4gIiIiCi0gICAgICAgIG5hbWVzID0g
W10KLSAgICAgICAgZm9yIG5hbWUgaW4gZGlyKG1vZHVsZV9vcl9jbGFzcyk6Ci0gICAgICAgICAg
ICBzcGVjX29wdHMgPSBzZWxmLnBhcnNlX2hvb2tzcGVjX29wdHMobW9kdWxlX29yX2NsYXNzLCBu
YW1lKQotICAgICAgICAgICAgaWYgc3BlY19vcHRzIGlzIG5vdCBOb25lOgotICAgICAgICAgICAg
ICAgIGhjID0gZ2V0YXR0cihzZWxmLmhvb2ssIG5hbWUsIE5vbmUpCi0gICAgICAgICAgICAgICAg
aWYgaGMgaXMgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgaGMgPSBfSG9va0NhbGxlcihuYW1l
LCBzZWxmLl9ob29rZXhlYywgbW9kdWxlX29yX2NsYXNzLCBzcGVjX29wdHMpCi0gICAgICAgICAg
ICAgICAgICAgIHNldGF0dHIoc2VsZi5ob29rLCBuYW1lLCBoYykKLSAgICAgICAgICAgICAgICBl
bHNlOgotICAgICAgICAgICAgICAgICAgICAjIHBsdWdpbnMgcmVnaXN0ZXJlZCB0aGlzIGhvb2sg
d2l0aG91dCBrbm93aW5nIHRoZSBzcGVjCi0gICAgICAgICAgICAgICAgICAgIGhjLnNldF9zcGVj
aWZpY2F0aW9uKG1vZHVsZV9vcl9jbGFzcywgc3BlY19vcHRzKQotICAgICAgICAgICAgICAgICAg
ICBmb3IgaG9va2Z1bmN0aW9uIGluIChoYy5fd3JhcHBlcnMgKyBoYy5fbm9ud3JhcHBlcnMpOgot
ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdmVyaWZ5X2hvb2soaGMsIGhvb2tmdW5jdGlv
bikKLSAgICAgICAgICAgICAgICBuYW1lcy5hcHBlbmQobmFtZSkKLQotICAgICAgICBpZiBub3Qg
bmFtZXM6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJkaWQgbm90IGZpbmQgYW55ICVy
IGhvb2tzIGluICVyIiAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLnByb2pl
Y3RfbmFtZSwgbW9kdWxlX29yX2NsYXNzKSkKLQotICAgIGRlZiBwYXJzZV9ob29rc3BlY19vcHRz
KHNlbGYsIG1vZHVsZV9vcl9jbGFzcywgbmFtZSk6Ci0gICAgICAgIG1ldGhvZCA9IGdldGF0dHIo
bW9kdWxlX29yX2NsYXNzLCBuYW1lKQotICAgICAgICByZXR1cm4gZ2V0YXR0cihtZXRob2QsIHNl
bGYucHJvamVjdF9uYW1lICsgIl9zcGVjIiwgTm9uZSkKLQotICAgIGRlZiBnZXRfcGx1Z2lucyhz
ZWxmKToKLSAgICAgICAgIiIiIHJldHVybiB0aGUgc2V0IG9mIHJlZ2lzdGVyZWQgcGx1Z2lucy4g
IiIiCi0gICAgICAgIHJldHVybiBzZXQoc2VsZi5fcGx1Z2luMmhvb2tjYWxsZXJzKQotCi0gICAg
ZGVmIGlzX3JlZ2lzdGVyZWQoc2VsZiwgcGx1Z2luKToKLSAgICAgICAgIiIiIFJldHVybiBUcnVl
IGlmIHRoZSBwbHVnaW4gaXMgYWxyZWFkeSByZWdpc3RlcmVkLiAiIiIKLSAgICAgICAgcmV0dXJu
IHBsdWdpbiBpbiBzZWxmLl9wbHVnaW4yaG9va2NhbGxlcnMKLQotICAgIGRlZiBnZXRfY2Fub25p
Y2FsX25hbWUoc2VsZiwgcGx1Z2luKToKLSAgICAgICAgIiIiIFJldHVybiBjYW5vbmljYWwgbmFt
ZSBmb3IgYSBwbHVnaW4gb2JqZWN0LiBOb3RlIHRoYXQgYSBwbHVnaW4KLSAgICAgICAgbWF5IGJl
IHJlZ2lzdGVyZWQgdW5kZXIgYSBkaWZmZXJlbnQgbmFtZSB3aGljaCB3YXMgc3BlY2lmaWVkCi0g
ICAgICAgIGJ5IHRoZSBjYWxsZXIgb2YgcmVnaXN0ZXIocGx1Z2luLCBuYW1lKS4gVG8gb2J0YWlu
IHRoZSBuYW1lCi0gICAgICAgIG9mIGFuIHJlZ2lzdGVyZWQgcGx1Z2luIHVzZSBgYGdldF9uYW1l
KHBsdWdpbilgYCBpbnN0ZWFkLiIiIgotICAgICAgICByZXR1cm4gZ2V0YXR0cihwbHVnaW4sICJf
X25hbWVfXyIsIE5vbmUpIG9yIHN0cihpZChwbHVnaW4pKQotCi0gICAgZGVmIGdldF9wbHVnaW4o
c2VsZiwgbmFtZSk6Ci0gICAgICAgICIiIiBSZXR1cm4gYSBwbHVnaW4gb3IgTm9uZSBmb3IgdGhl
IGdpdmVuIG5hbWUuICIiIgotICAgICAgICByZXR1cm4gc2VsZi5fbmFtZTJwbHVnaW4uZ2V0KG5h
bWUpCi0KLSAgICBkZWYgZ2V0X25hbWUoc2VsZiwgcGx1Z2luKToKLSAgICAgICAgIiIiIFJldHVy
biBuYW1lIGZvciByZWdpc3RlcmVkIHBsdWdpbiBvciBOb25lIGlmIG5vdCByZWdpc3RlcmVkLiAi
IiIKLSAgICAgICAgZm9yIG5hbWUsIHZhbCBpbiBzZWxmLl9uYW1lMnBsdWdpbi5pdGVtcygpOgot
ICAgICAgICAgICAgaWYgcGx1Z2luID09IHZhbDoKLSAgICAgICAgICAgICAgICByZXR1cm4gbmFt
ZQotCi0gICAgZGVmIF92ZXJpZnlfaG9vayhzZWxmLCBob29rLCBob29raW1wbCk6Ci0gICAgICAg
IGlmIGhvb2suaXNfaGlzdG9yaWMoKSBhbmQgaG9va2ltcGwuaG9va3dyYXBwZXI6Ci0gICAgICAg
ICAgICByYWlzZSBQbHVnaW5WYWxpZGF0aW9uRXJyb3IoCi0gICAgICAgICAgICAgICAgIlBsdWdp
biAlclxuaG9vayAlclxuaGlzdG9yaWMgaW5jb21wYXRpYmxlIHRvIGhvb2t3cmFwcGVyIiAlCi0g
ICAgICAgICAgICAgICAgKGhvb2tpbXBsLnBsdWdpbl9uYW1lLCBob29rLm5hbWUpKQotCi0gICAg
ICAgIGZvciBhcmcgaW4gaG9va2ltcGwuYXJnbmFtZXM6Ci0gICAgICAgICAgICBpZiBhcmcgbm90
IGluIGhvb2suYXJnbmFtZXM6Ci0gICAgICAgICAgICAgICAgcmFpc2UgUGx1Z2luVmFsaWRhdGlv
bkVycm9yKAotICAgICAgICAgICAgICAgICAgICAiUGx1Z2luICVyXG5ob29rICVyXG5hcmd1bWVu
dCAlciBub3QgYXZhaWxhYmxlXG4iCi0gICAgICAgICAgICAgICAgICAgICJwbHVnaW4gZGVmaW5p
dGlvbjogJXNcbiIKLSAgICAgICAgICAgICAgICAgICAgImF2YWlsYWJsZSBob29rYXJnczogJXMi
ICUKLSAgICAgICAgICAgICAgICAgICAgKGhvb2tpbXBsLnBsdWdpbl9uYW1lLCBob29rLm5hbWUs
IGFyZywKLSAgICAgICAgICAgICAgICAgICAgX2Zvcm1hdGRlZihob29raW1wbC5mdW5jdGlvbiks
ICIsICIuam9pbihob29rLmFyZ25hbWVzKSkpCi0KLSAgICBkZWYgY2hlY2tfcGVuZGluZyhzZWxm
KToKLSAgICAgICAgIiIiIFZlcmlmeSB0aGF0IGFsbCBob29rcyB3aGljaCBoYXZlIG5vdCBiZWVu
IHZlcmlmaWVkIGFnYWluc3QKLSAgICAgICAgYSBob29rIHNwZWNpZmljYXRpb24gYXJlIG9wdGlv
bmFsLCBvdGhlcndpc2UgcmFpc2UgUGx1Z2luVmFsaWRhdGlvbkVycm9yIiIiCi0gICAgICAgIGZv
ciBuYW1lIGluIHNlbGYuaG9vay5fX2RpY3RfXzoKLSAgICAgICAgICAgIGlmIG5hbWVbMF0gIT0g
Il8iOgotICAgICAgICAgICAgICAgIGhvb2sgPSBnZXRhdHRyKHNlbGYuaG9vaywgbmFtZSkKLSAg
ICAgICAgICAgICAgICBpZiBub3QgaG9vay5oYXNfc3BlYygpOgotICAgICAgICAgICAgICAgICAg
ICBmb3IgaG9va2ltcGwgaW4gKGhvb2suX3dyYXBwZXJzICsgaG9vay5fbm9ud3JhcHBlcnMpOgot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGhvb2tpbXBsLm9wdGlvbmFsaG9vazoKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBQbHVnaW5WYWxpZGF0aW9uRXJyb3IoCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmtub3duIGhvb2sgJXIgaW4gcGx1Z2lu
ICVyIiAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuYW1lLCBob29raW1wbC5w
bHVnaW4pKQotCi0gICAgZGVmIGxvYWRfc2V0dXB0b29sc19lbnRyeXBvaW50cyhzZWxmLCBlbnRy
eXBvaW50X25hbWUpOgotICAgICAgICAiIiIgTG9hZCBtb2R1bGVzIGZyb20gcXVlcnlpbmcgdGhl
IHNwZWNpZmllZCBzZXR1cHRvb2xzIGVudHJ5cG9pbnQgbmFtZS4KLSAgICAgICAgUmV0dXJuIHRo
ZSBudW1iZXIgb2YgbG9hZGVkIHBsdWdpbnMuICIiIgotICAgICAgICBmcm9tIHBrZ19yZXNvdXJj
ZXMgaW1wb3J0IGl0ZXJfZW50cnlfcG9pbnRzLCBEaXN0cmlidXRpb25Ob3RGb3VuZAotICAgICAg
ICBmb3IgZXAgaW4gaXRlcl9lbnRyeV9wb2ludHMoZW50cnlwb2ludF9uYW1lKToKLSAgICAgICAg
ICAgICMgaXMgdGhlIHBsdWdpbiByZWdpc3RlcmVkIG9yIGJsb2NrZWQ/Ci0gICAgICAgICAgICBp
ZiBzZWxmLmdldF9wbHVnaW4oZXAubmFtZSkgb3Igc2VsZi5pc19ibG9ja2VkKGVwLm5hbWUpOgot
ICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAg
ICAgcGx1Z2luID0gZXAubG9hZCgpCi0gICAgICAgICAgICBleGNlcHQgRGlzdHJpYnV0aW9uTm90
Rm91bmQ6Ci0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIHNlbGYucmVnaXN0
ZXIocGx1Z2luLCBuYW1lPWVwLm5hbWUpCi0gICAgICAgICAgICBzZWxmLl9wbHVnaW5fZGlzdGlu
Zm8uYXBwZW5kKChwbHVnaW4sIGVwLmRpc3QpKQotICAgICAgICByZXR1cm4gbGVuKHNlbGYuX3Bs
dWdpbl9kaXN0aW5mbykKLQotICAgIGRlZiBsaXN0X3BsdWdpbl9kaXN0aW5mbyhzZWxmKToKLSAg
ICAgICAgIiIiIHJldHVybiBsaXN0IG9mIGRpc3RpbmZvL3BsdWdpbiB0dXBsZXMgZm9yIGFsbCBz
ZXR1cHRvb2xzIHJlZ2lzdGVyZWQKLSAgICAgICAgcGx1Z2lucy4gIiIiCi0gICAgICAgIHJldHVy
biBsaXN0KHNlbGYuX3BsdWdpbl9kaXN0aW5mbykKLQotICAgIGRlZiBsaXN0X25hbWVfcGx1Z2lu
KHNlbGYpOgotICAgICAgICAiIiIgcmV0dXJuIGxpc3Qgb2YgbmFtZS9wbHVnaW4gcGFpcnMuICIi
IgotICAgICAgICByZXR1cm4gbGlzdChzZWxmLl9uYW1lMnBsdWdpbi5pdGVtcygpKQotCi0gICAg
ZGVmIGdldF9ob29rY2FsbGVycyhzZWxmLCBwbHVnaW4pOgotICAgICAgICAiIiIgZ2V0IGFsbCBo
b29rIGNhbGxlcnMgZm9yIHRoZSBzcGVjaWZpZWQgcGx1Z2luLiAiIiIKLSAgICAgICAgcmV0dXJu
IHNlbGYuX3BsdWdpbjJob29rY2FsbGVycy5nZXQocGx1Z2luKQotCi0gICAgZGVmIGFkZF9ob29r
Y2FsbF9tb25pdG9yaW5nKHNlbGYsIGJlZm9yZSwgYWZ0ZXIpOgotICAgICAgICAiIiIgYWRkIGJl
Zm9yZS9hZnRlciB0cmFjaW5nIGZ1bmN0aW9ucyBmb3IgYWxsIGhvb2tzCi0gICAgICAgIGFuZCBy
ZXR1cm4gYW4gdW5kbyBmdW5jdGlvbiB3aGljaCwgd2hlbiBjYWxsZWQsCi0gICAgICAgIHdpbGwg
cmVtb3ZlIHRoZSBhZGRlZCB0cmFjZXJzLgotCi0gICAgICAgIGBgYmVmb3JlKGhvb2tfbmFtZSwg
aG9va19pbXBscywga3dhcmdzKWBgIHdpbGwgYmUgY2FsbGVkIGFoZWFkCi0gICAgICAgIG9mIGFs
bCBob29rIGNhbGxzIGFuZCByZWNlaXZlIGEgaG9va2NhbGxlciBpbnN0YW5jZSwgYSBsaXN0Ci0g
ICAgICAgIG9mIEhvb2tJbXBsIGluc3RhbmNlcyBhbmQgdGhlIGtleXdvcmQgYXJndW1lbnRzIGZv
ciB0aGUgaG9vayBjYWxsLgotCi0gICAgICAgIGBgYWZ0ZXIob3V0Y29tZSwgaG9va19uYW1lLCBo
b29rX2ltcGxzLCBrd2FyZ3MpYGAgcmVjZWl2ZXMgdGhlCi0gICAgICAgIHNhbWUgYXJndW1lbnRz
IGFzIGBgYmVmb3JlYGAgYnV0IGFsc28gYSA6cHk6Y2xhc3M6YF9DYWxsT3V0Y29tZWBgIG9iamVj
dAotICAgICAgICB3aGljaCByZXByZXNlbnRzIHRoZSByZXN1bHQgb2YgdGhlIG92ZXJhbGwgaG9v
ayBjYWxsLgotICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJuIF9UcmFjZWRIb29rRXhlY3V0aW9u
KHNlbGYsIGJlZm9yZSwgYWZ0ZXIpLnVuZG8KLQotICAgIGRlZiBlbmFibGVfdHJhY2luZyhzZWxm
KToKLSAgICAgICAgIiIiIGVuYWJsZSB0cmFjaW5nIG9mIGhvb2sgY2FsbHMgYW5kIHJldHVybiBh
biB1bmRvIGZ1bmN0aW9uLiAiIiIKLSAgICAgICAgaG9va3RyYWNlID0gc2VsZi5ob29rLl90cmFj
ZQotCi0gICAgICAgIGRlZiBiZWZvcmUoaG9va19uYW1lLCBtZXRob2RzLCBrd2FyZ3MpOgotICAg
ICAgICAgICAgaG9va3RyYWNlLnJvb3QuaW5kZW50ICs9IDEKLSAgICAgICAgICAgIGhvb2t0cmFj
ZShob29rX25hbWUsIGt3YXJncykKLQotICAgICAgICBkZWYgYWZ0ZXIob3V0Y29tZSwgaG9va19u
YW1lLCBtZXRob2RzLCBrd2FyZ3MpOgotICAgICAgICAgICAgaWYgb3V0Y29tZS5leGNpbmZvIGlz
IE5vbmU6Ci0gICAgICAgICAgICAgICAgaG9va3RyYWNlKCJmaW5pc2giLCBob29rX25hbWUsICIt
LT4iLCBvdXRjb21lLnJlc3VsdCkKLSAgICAgICAgICAgIGhvb2t0cmFjZS5yb290LmluZGVudCAt
PSAxCi0KLSAgICAgICAgcmV0dXJuIHNlbGYuYWRkX2hvb2tjYWxsX21vbml0b3JpbmcoYmVmb3Jl
LCBhZnRlcikKLQotICAgIGRlZiBzdWJzZXRfaG9va19jYWxsZXIoc2VsZiwgbmFtZSwgcmVtb3Zl
X3BsdWdpbnMpOgotICAgICAgICAiIiIgUmV0dXJuIGEgbmV3IF9Ib29rQ2FsbGVyIGluc3RhbmNl
IGZvciB0aGUgbmFtZWQgbWV0aG9kCi0gICAgICAgIHdoaWNoIG1hbmFnZXMgY2FsbHMgdG8gYWxs
IHJlZ2lzdGVyZWQgcGx1Z2lucyBleGNlcHQgdGhlCi0gICAgICAgIG9uZXMgZnJvbSByZW1vdmVf
cGx1Z2lucy4gIiIiCi0gICAgICAgIG9yaWcgPSBnZXRhdHRyKHNlbGYuaG9vaywgbmFtZSkKLSAg
ICAgICAgcGx1Z2luc190b19yZW1vdmUgPSBbcGx1ZyBmb3IgcGx1ZyBpbiByZW1vdmVfcGx1Z2lu
cyBpZiBoYXNhdHRyKHBsdWcsIG5hbWUpXQotICAgICAgICBpZiBwbHVnaW5zX3RvX3JlbW92ZToK
LSAgICAgICAgICAgIGhjID0gX0hvb2tDYWxsZXIob3JpZy5uYW1lLCBvcmlnLl9ob29rZXhlYywg
b3JpZy5fc3BlY21vZHVsZV9vcl9jbGFzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b3JpZy5zcGVjX29wdHMpCi0gICAgICAgICAgICBmb3IgaG9va2ltcGwgaW4gKG9yaWcuX3dyYXBw
ZXJzICsgb3JpZy5fbm9ud3JhcHBlcnMpOgotICAgICAgICAgICAgICAgIHBsdWdpbiA9IGhvb2tp
bXBsLnBsdWdpbgotICAgICAgICAgICAgICAgIGlmIHBsdWdpbiBub3QgaW4gcGx1Z2luc190b19y
ZW1vdmU6Ci0gICAgICAgICAgICAgICAgICAgIGhjLl9hZGRfaG9va2ltcGwoaG9va2ltcGwpCi0g
ICAgICAgICAgICAgICAgICAgICMgd2UgYWxzbyBrZWVwIHRyYWNrIG9mIHRoaXMgaG9vayBjYWxs
ZXIgc28gaXQKLSAgICAgICAgICAgICAgICAgICAgIyBnZXRzIHByb3Blcmx5IHJlbW92ZWQgb24g
cGx1Z2luIHVucmVnaXN0cmF0aW9uCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3BsdWdpbjJo
b29rY2FsbGVycy5zZXRkZWZhdWx0KHBsdWdpbiwgW10pLmFwcGVuZChoYykKLSAgICAgICAgICAg
IHJldHVybiBoYwotICAgICAgICByZXR1cm4gb3JpZwotCi0KLWNsYXNzIF9NdWx0aUNhbGw6Ci0g
ICAgIiIiIGV4ZWN1dGUgYSBjYWxsIGludG8gbXVsdGlwbGUgcHl0aG9uIGZ1bmN0aW9ucy9tZXRo
b2RzLiAiIiIKLQotICAgICMgWFhYIG5vdGUgdGhhdCB0aGUgX19tdWx0aWNhbGxfXyBhcmd1bWVu
dCBpcyBzdXBwb3J0ZWQgb25seQotICAgICMgZm9yIHB5dGVzdCBjb21wYXRpYmlsaXR5IHJlYXNv
bnMuICBJdCB3YXMgbmV2ZXIgb2ZmaWNpYWxseQotICAgICMgc3VwcG9ydGVkIHRoZXJlIGFuZCBp
cyBleHBsaWNpdGx5IGRlcHJlY2F0ZWQgc2luY2UgMi44Ci0gICAgIyBzbyB3ZSBjYW4gcmVtb3Zl
IGl0IHNvb24sIGFsbG93aW5nIHRvIGF2b2lkIHRoZSBiZWxvdyByZWN1cnNpb24KLSAgICAjIGlu
IGV4ZWN1dGUoKSBhbmQgc2ltcGxpZnkvc3BlZWQgdXAgdGhlIGV4ZWN1dGUgbG9vcC4KLQotICAg
IGRlZiBfX2luaXRfXyhzZWxmLCBob29rX2ltcGxzLCBrd2FyZ3MsIHNwZWNvcHRzPXt9KToKLSAg
ICAgICAgc2VsZi5ob29rX2ltcGxzID0gaG9va19pbXBscwotICAgICAgICBzZWxmLmt3YXJncyA9
IGt3YXJncwotICAgICAgICBzZWxmLmt3YXJnc1siX19tdWx0aWNhbGxfXyJdID0gc2VsZgotICAg
ICAgICBzZWxmLnNwZWNvcHRzID0gc3BlY29wdHMKLQotICAgIGRlZiBleGVjdXRlKHNlbGYpOgot
ICAgICAgICBhbGxfa3dhcmdzID0gc2VsZi5rd2FyZ3MKLSAgICAgICAgc2VsZi5yZXN1bHRzID0g
cmVzdWx0cyA9IFtdCi0gICAgICAgIGZpcnN0cmVzdWx0ID0gc2VsZi5zcGVjb3B0cy5nZXQoImZp
cnN0cmVzdWx0IikKLQotICAgICAgICB3aGlsZSBzZWxmLmhvb2tfaW1wbHM6Ci0gICAgICAgICAg
ICBob29rX2ltcGwgPSBzZWxmLmhvb2tfaW1wbHMucG9wKCkKLSAgICAgICAgICAgIGFyZ3MgPSBb
YWxsX2t3YXJnc1thcmduYW1lXSBmb3IgYXJnbmFtZSBpbiBob29rX2ltcGwuYXJnbmFtZXNdCi0g
ICAgICAgICAgICBpZiBob29rX2ltcGwuaG9va3dyYXBwZXI6Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIF93cmFwcGVkX2NhbGwoaG9va19pbXBsLmZ1bmN0aW9uKCphcmdzKSwgc2VsZi5leGVjdXRl
KQotICAgICAgICAgICAgcmVzID0gaG9va19pbXBsLmZ1bmN0aW9uKCphcmdzKQotICAgICAgICAg
ICAgaWYgcmVzIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIGlmIGZpcnN0cmVzdWx0Ogot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzCi0gICAgICAgICAgICAgICAgcmVzdWx0cy5h
cHBlbmQocmVzKQotCi0gICAgICAgIGlmIG5vdCBmaXJzdHJlc3VsdDoKLSAgICAgICAgICAgIHJl
dHVybiByZXN1bHRzCi0KLSAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIHN0YXR1cyA9
ICIlZCBtZXRocyIgJSAobGVuKHNlbGYuaG9va19pbXBscyksKQotICAgICAgICBpZiBoYXNhdHRy
KHNlbGYsICJyZXN1bHRzIik6Ci0gICAgICAgICAgICBzdGF0dXMgPSAoIiVkIHJlc3VsdHMsICIg
JSBsZW4oc2VsZi5yZXN1bHRzKSkgKyBzdGF0dXMKLSAgICAgICAgcmV0dXJuICI8X011bHRpQ2Fs
bCAlcywga3dhcmdzPSVyPiIgJSAoc3RhdHVzLCBzZWxmLmt3YXJncykKLQotCi1kZWYgdmFybmFt
ZXMoZnVuYywgc3RhcnRpbmRleD1Ob25lKToKLSAgICAiIiIgcmV0dXJuIGFyZ3VtZW50IG5hbWUg
dHVwbGUgZm9yIGEgZnVuY3Rpb24sIG1ldGhvZCwgY2xhc3Mgb3IgY2FsbGFibGUuCi0KLSAgICBJ
biBjYXNlIG9mIGEgY2xhc3MsIGl0cyAiX19pbml0X18iIG1ldGhvZCBpcyBjb25zaWRlcmVkLgot
ICAgIEZvciBtZXRob2RzIHRoZSAic2VsZiIgcGFyYW1ldGVyIGlzIG5vdCBpbmNsdWRlZCB1bmxl
c3MgeW91IGFyZSBwYXNzaW5nCi0gICAgYW4gdW5ib3VuZCBtZXRob2Qgd2l0aCBQeXRob24zICh3
aGljaCBoYXMgbm8gc3VwcG9ydHMgZm9yIHVuYm91bmQgbWV0aG9kcykKLSAgICAiIiIKLSAgICBj
YWNoZSA9IGdldGF0dHIoZnVuYywgIl9fZGljdF9fIiwge30pCi0gICAgdHJ5OgotICAgICAgICBy
ZXR1cm4gY2FjaGVbIl92YXJuYW1lcyJdCi0gICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICBw
YXNzCi0gICAgaWYgaW5zcGVjdC5pc2NsYXNzKGZ1bmMpOgotICAgICAgICB0cnk6Ci0gICAgICAg
ICAgICBmdW5jID0gZnVuYy5fX2luaXRfXwotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6
Ci0gICAgICAgICAgICByZXR1cm4gKCkKLSAgICAgICAgc3RhcnRpbmRleCA9IDEKLSAgICBlbHNl
OgotICAgICAgICBpZiBub3QgaW5zcGVjdC5pc2Z1bmN0aW9uKGZ1bmMpIGFuZCBub3QgaW5zcGVj
dC5pc21ldGhvZChmdW5jKToKLSAgICAgICAgICAgIGZ1bmMgPSBnZXRhdHRyKGZ1bmMsICdfX2Nh
bGxfXycsIGZ1bmMpCi0gICAgICAgIGlmIHN0YXJ0aW5kZXggaXMgTm9uZToKLSAgICAgICAgICAg
IHN0YXJ0aW5kZXggPSBpbnQoaW5zcGVjdC5pc21ldGhvZChmdW5jKSkKLQotICAgIHRyeToKLSAg
ICAgICAgcmF3Y29kZSA9IGZ1bmMuX19jb2RlX18KLSAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6
Ci0gICAgICAgIHJldHVybiAoKQotICAgIHRyeToKLSAgICAgICAgeCA9IHJhd2NvZGUuY29fdmFy
bmFtZXNbc3RhcnRpbmRleDpyYXdjb2RlLmNvX2FyZ2NvdW50XQotICAgIGV4Y2VwdCBBdHRyaWJ1
dGVFcnJvcjoKLSAgICAgICAgeCA9ICgpCi0gICAgZWxzZToKLSAgICAgICAgZGVmYXVsdHMgPSBm
dW5jLl9fZGVmYXVsdHNfXwotICAgICAgICBpZiBkZWZhdWx0czoKLSAgICAgICAgICAgIHggPSB4
WzotbGVuKGRlZmF1bHRzKV0KLSAgICB0cnk6Ci0gICAgICAgIGNhY2hlWyJfdmFybmFtZXMiXSA9
IHgKLSAgICBleGNlcHQgVHlwZUVycm9yOgotICAgICAgICBwYXNzCi0gICAgcmV0dXJuIHgKLQot
Ci1jbGFzcyBfSG9va1JlbGF5OgotICAgICIiIiBob29rIGhvbGRlciBvYmplY3QgZm9yIHBlcmZv
cm1pbmcgMTpOIGhvb2sgY2FsbHMgd2hlcmUgTiBpcyB0aGUgbnVtYmVyCi0gICAgb2YgcmVnaXN0
ZXJlZCBwbHVnaW5zLgotCi0gICAgIiIiCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgdHJhY2Up
OgotICAgICAgICBzZWxmLl90cmFjZSA9IHRyYWNlCi0KLQotY2xhc3MgX0hvb2tDYWxsZXIob2Jq
ZWN0KToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgaG9va19leGVjdXRlLCBzcGVjbW9k
dWxlX29yX2NsYXNzPU5vbmUsIHNwZWNfb3B0cz1Ob25lKToKLSAgICAgICAgc2VsZi5uYW1lID0g
bmFtZQotICAgICAgICBzZWxmLl93cmFwcGVycyA9IFtdCi0gICAgICAgIHNlbGYuX25vbndyYXBw
ZXJzID0gW10KLSAgICAgICAgc2VsZi5faG9va2V4ZWMgPSBob29rX2V4ZWN1dGUKLSAgICAgICAg
aWYgc3BlY21vZHVsZV9vcl9jbGFzcyBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIGFzc2VydCBz
cGVjX29wdHMgaXMgbm90IE5vbmUKLSAgICAgICAgICAgIHNlbGYuc2V0X3NwZWNpZmljYXRpb24o
c3BlY21vZHVsZV9vcl9jbGFzcywgc3BlY19vcHRzKQotCi0gICAgZGVmIGhhc19zcGVjKHNlbGYp
OgotICAgICAgICByZXR1cm4gaGFzYXR0cihzZWxmLCAiX3NwZWNtb2R1bGVfb3JfY2xhc3MiKQot
Ci0gICAgZGVmIHNldF9zcGVjaWZpY2F0aW9uKHNlbGYsIHNwZWNtb2R1bGVfb3JfY2xhc3MsIHNw
ZWNfb3B0cyk6Ci0gICAgICAgIGFzc2VydCBub3Qgc2VsZi5oYXNfc3BlYygpCi0gICAgICAgIHNl
bGYuX3NwZWNtb2R1bGVfb3JfY2xhc3MgPSBzcGVjbW9kdWxlX29yX2NsYXNzCi0gICAgICAgIHNw
ZWNmdW5jID0gZ2V0YXR0cihzcGVjbW9kdWxlX29yX2NsYXNzLCBzZWxmLm5hbWUpCi0gICAgICAg
IGFyZ25hbWVzID0gdmFybmFtZXMoc3BlY2Z1bmMsIHN0YXJ0aW5kZXg9aW5zcGVjdC5pc2NsYXNz
KHNwZWNtb2R1bGVfb3JfY2xhc3MpKQotICAgICAgICBhc3NlcnQgInNlbGYiIG5vdCBpbiBhcmdu
YW1lcyAgIyBzYW5pdHkgY2hlY2sKLSAgICAgICAgc2VsZi5hcmduYW1lcyA9IFsiX19tdWx0aWNh
bGxfXyJdICsgbGlzdChhcmduYW1lcykKLSAgICAgICAgc2VsZi5zcGVjX29wdHMgPSBzcGVjX29w
dHMKLSAgICAgICAgaWYgc3BlY19vcHRzLmdldCgiaGlzdG9yaWMiKToKLSAgICAgICAgICAgIHNl
bGYuX2NhbGxfaGlzdG9yeSA9IFtdCi0KLSAgICBkZWYgaXNfaGlzdG9yaWMoc2VsZik6Ci0gICAg
ICAgIHJldHVybiBoYXNhdHRyKHNlbGYsICJfY2FsbF9oaXN0b3J5IikKLQotICAgIGRlZiBfcmVt
b3ZlX3BsdWdpbihzZWxmLCBwbHVnaW4pOgotICAgICAgICBkZWYgcmVtb3ZlKHdyYXBwZXJzKToK
LSAgICAgICAgICAgIGZvciBpLCBtZXRob2QgaW4gZW51bWVyYXRlKHdyYXBwZXJzKToKLSAgICAg
ICAgICAgICAgICBpZiBtZXRob2QucGx1Z2luID09IHBsdWdpbjoKLSAgICAgICAgICAgICAgICAg
ICAgZGVsIHdyYXBwZXJzW2ldCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAg
ICAgIGlmIHJlbW92ZShzZWxmLl93cmFwcGVycykgaXMgTm9uZToKLSAgICAgICAgICAgIGlmIHJl
bW92ZShzZWxmLl9ub253cmFwcGVycykgaXMgTm9uZToKLSAgICAgICAgICAgICAgICByYWlzZSBW
YWx1ZUVycm9yKCJwbHVnaW4gJXIgbm90IGZvdW5kIiAlIChwbHVnaW4sKSkKLQotICAgIGRlZiBf
YWRkX2hvb2tpbXBsKHNlbGYsIGhvb2tpbXBsKToKLSAgICAgICAgaWYgaG9va2ltcGwuaG9va3dy
YXBwZXI6Ci0gICAgICAgICAgICBtZXRob2RzID0gc2VsZi5fd3JhcHBlcnMKLSAgICAgICAgZWxz
ZToKLSAgICAgICAgICAgIG1ldGhvZHMgPSBzZWxmLl9ub253cmFwcGVycwotCi0gICAgICAgIGlm
IGhvb2tpbXBsLnRyeWxhc3Q6Ci0gICAgICAgICAgICBtZXRob2RzLmluc2VydCgwLCBob29raW1w
bCkKLSAgICAgICAgZWxpZiBob29raW1wbC50cnlmaXJzdDoKLSAgICAgICAgICAgIG1ldGhvZHMu
YXBwZW5kKGhvb2tpbXBsKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgIyBmaW5kIGxhc3Qg
bm9uLXRyeWZpcnN0IG1ldGhvZAotICAgICAgICAgICAgaSA9IGxlbihtZXRob2RzKSAtIDEKLSAg
ICAgICAgICAgIHdoaWxlIGkgPj0gMCBhbmQgbWV0aG9kc1tpXS50cnlmaXJzdDoKLSAgICAgICAg
ICAgICAgICBpIC09IDEKLSAgICAgICAgICAgIG1ldGhvZHMuaW5zZXJ0KGkgKyAxLCBob29raW1w
bCkKLQotICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuICI8X0hvb2tDYWxs
ZXIgJXI+IiAlIChzZWxmLm5hbWUsKQotCi0gICAgZGVmIF9fY2FsbF9fKHNlbGYsICoqa3dhcmdz
KToKLSAgICAgICAgYXNzZXJ0IG5vdCBzZWxmLmlzX2hpc3RvcmljKCkKLSAgICAgICAgcmV0dXJu
IHNlbGYuX2hvb2tleGVjKHNlbGYsIHNlbGYuX25vbndyYXBwZXJzICsgc2VsZi5fd3JhcHBlcnMs
IGt3YXJncykKLQotICAgIGRlZiBjYWxsX2hpc3RvcmljKHNlbGYsIHByb2M9Tm9uZSwga3dhcmdz
PU5vbmUpOgotICAgICAgICBzZWxmLl9jYWxsX2hpc3RvcnkuYXBwZW5kKChrd2FyZ3Mgb3Ige30s
IHByb2MpKQotICAgICAgICAjIGhpc3Rvcml6aW5nIGhvb2tzIGRvbid0IHJldHVybiByZXN1bHRz
Ci0gICAgICAgIHNlbGYuX2hvb2tleGVjKHNlbGYsIHNlbGYuX25vbndyYXBwZXJzICsgc2VsZi5f
d3JhcHBlcnMsIGt3YXJncykKLQotICAgIGRlZiBjYWxsX2V4dHJhKHNlbGYsIG1ldGhvZHMsIGt3
YXJncyk6Ci0gICAgICAgICIiIiBDYWxsIHRoZSBob29rIHdpdGggc29tZSBhZGRpdGlvbmFsIHRl
bXBvcmFyaWx5IHBhcnRpY2lwYXRpbmcKLSAgICAgICAgbWV0aG9kcyB1c2luZyB0aGUgc3BlY2lm
aWVkIGt3YXJncyBhcyBjYWxsIHBhcmFtZXRlcnMuICIiIgotICAgICAgICBvbGQgPSBsaXN0KHNl
bGYuX25vbndyYXBwZXJzKSwgbGlzdChzZWxmLl93cmFwcGVycykKLSAgICAgICAgZm9yIG1ldGhv
ZCBpbiBtZXRob2RzOgotICAgICAgICAgICAgb3B0cyA9IGRpY3QoaG9va3dyYXBwZXI9RmFsc2Us
IHRyeWxhc3Q9RmFsc2UsIHRyeWZpcnN0PUZhbHNlKQotICAgICAgICAgICAgaG9va2ltcGwgPSBI
b29rSW1wbChOb25lLCAiPHRlbXA+IiwgbWV0aG9kLCBvcHRzKQotICAgICAgICAgICAgc2VsZi5f
YWRkX2hvb2tpbXBsKGhvb2tpbXBsKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXR1cm4g
c2VsZigqKmt3YXJncykKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHNlbGYuX25vbndy
YXBwZXJzLCBzZWxmLl93cmFwcGVycyA9IG9sZAotCi0gICAgZGVmIF9tYXliZV9hcHBseV9oaXN0
b3J5KHNlbGYsIG1ldGhvZCk6Ci0gICAgICAgIGlmIHNlbGYuaXNfaGlzdG9yaWMoKToKLSAgICAg
ICAgICAgIGZvciBrd2FyZ3MsIHByb2MgaW4gc2VsZi5fY2FsbF9oaXN0b3J5OgotICAgICAgICAg
ICAgICAgIHJlcyA9IHNlbGYuX2hvb2tleGVjKHNlbGYsIFttZXRob2RdLCBrd2FyZ3MpCi0gICAg
ICAgICAgICAgICAgaWYgcmVzIGFuZCBwcm9jIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAg
ICAgICBwcm9jKHJlc1swXSkKLQotCi1jbGFzcyBIb29rSW1wbDoKLSAgICBkZWYgX19pbml0X18o
c2VsZiwgcGx1Z2luLCBwbHVnaW5fbmFtZSwgZnVuY3Rpb24sIGhvb2tfaW1wbF9vcHRzKToKLSAg
ICAgICAgc2VsZi5mdW5jdGlvbiA9IGZ1bmN0aW9uCi0gICAgICAgIHNlbGYuYXJnbmFtZXMgPSB2
YXJuYW1lcyhzZWxmLmZ1bmN0aW9uKQotICAgICAgICBzZWxmLnBsdWdpbiA9IHBsdWdpbgotICAg
ICAgICBzZWxmLm9wdHMgPSBob29rX2ltcGxfb3B0cwotICAgICAgICBzZWxmLnBsdWdpbl9uYW1l
ID0gcGx1Z2luX25hbWUKLSAgICAgICAgc2VsZi5fX2RpY3RfXy51cGRhdGUoaG9va19pbXBsX29w
dHMpCi0KLQotY2xhc3MgUGx1Z2luVmFsaWRhdGlvbkVycm9yKEV4Y2VwdGlvbik6Ci0gICAgIiIi
IHBsdWdpbiBmYWlsZWQgdmFsaWRhdGlvbi4gIiIiCi0KLQotaWYgaGFzYXR0cihpbnNwZWN0LCAn
c2lnbmF0dXJlJyk6Ci0gICAgZGVmIF9mb3JtYXRkZWYoZnVuYyk6Ci0gICAgICAgIHJldHVybiAi
JXMlcyIgJSAoCi0gICAgICAgICAgICBmdW5jLl9fbmFtZV9fLAotICAgICAgICAgICAgc3RyKGlu
c3BlY3Quc2lnbmF0dXJlKGZ1bmMpKQotICAgICAgICApCi1lbHNlOgotICAgIGRlZiBfZm9ybWF0
ZGVmKGZ1bmMpOgotICAgICAgICByZXR1cm4gIiVzJXMiICUgKAotICAgICAgICAgICAgZnVuYy5f
X25hbWVfXywKLSAgICAgICAgICAgIGluc3BlY3QuZm9ybWF0YXJnc3BlYygqaW5zcGVjdC5nZXRh
cmdzcGVjKGZ1bmMpKQotICAgICAgICApCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBv
cnRlZC93M2MvdG9vbHMvcHl0ZXN0L2FwcHZleW9yLnltbCBiL1dlYkRyaXZlclRlc3RzL2ltcG9y
dGVkL3czYy90b29scy9weXRlc3QvYXBwdmV5b3IueW1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA0YjczNjQ1ZjczNS4uMDAwMDAwMDAwMDAKLS0tIGEvV2ViRHJpdmVyVGVzdHMvaW1w
b3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9hcHB2ZXlvci55bWwKKysrIC9kZXYvbnVsbApAQCAtMSwy
OCArMCwwIEBACi1lbnZpcm9ubWVudDoKLSAgQ09WRVJBTExTX1JFUE9fVE9LRU46Ci0gICAgc2Vj
dXJlOiAyTko1Q3Q1NWNISjlXRWczeGJTcUN1djByZGd6emI2cG56T0lHNU9rTWJUbmR3M3dPQnJY
bnRXRm9RclhpTUZpCi0gICAgIyB0aGlzIGlzIHB5dGVzdCdzIHRva2VuIGluIGNvdmVyYWxscy5p
bywgZW5jcnlwdGVkCi0gICAgIyB1c2luZyBweXRlc3Rib3QgYWNjb3VudCBhcyBkZXRhaWxlZCBo
ZXJlOgotICAgICMgaHR0cHM6Ly93d3cuYXBwdmV5b3IuY29tL2RvY3MvYnVpbGQtY29uZmlndXJh
dGlvbiNzZWN1cmUtdmFyaWFibGVzCi0KLWluc3RhbGw6Ci0gIC0gZWNobyBJbnN0YWxsZWQgUHl0
aG9ucwotICAtIGRpciBjOlxQeXRob24qCi0KLSAgIyBpbnN0YWxsIHB5cHkgdXNpbmcgY2hvY28g
KHJlZGlyZWN0IHRvIGEgZmlsZSBhbmQgd3JpdGUgdG8gY29uc29sZSBpbiBjYXNlCi0gICMgY2hv
Y28gaW5zdGFsbCByZXR1cm5zIG5vbi16ZXJvLCBiZWNhdXNlIGNob2NvIGluc3RhbGwgcHl0aG9u
LnB5cHkgaXMgdG9vCi0gICMgbm9pc3kpCi0gIC0gY2hvY28gaW5zdGFsbCBweXRob24ucHlweSA+
IHB5cHktaW5zdC5sb2cgMj4mMSB8fCAodHlwZSBweXB5LWluc3QubG9nICYgZXhpdCAvYiAxKQot
ICAtIHNldCBQQVRIPUM6XHRvb2xzXHB5cHlccHlweTslUEFUSCUgIyBzbyB0b3ggY2FuIGZpbmQg
cHlweQotICAtIGVjaG8gUHlQeSBpbnN0YWxsZWQKLSAgLSBweXB5IC0tdmVyc2lvbgotCi0gIC0g
QzpcUHl0aG9uMzVccHl0aG9uIC1tIHBpcCBpbnN0YWxsIHRveAotCi1idWlsZDogZmFsc2UgICMg
Tm90IGEgQyMgcHJvamVjdCwgYnVpbGQgc3R1ZmYgYXQgdGhlIHRlc3Qgc3RlcCBpbnN0ZWFkLgot
Ci10ZXN0X3NjcmlwdDoKLSAgLSBDOlxQeXRob24zNVxweXRob24gLW0gdG94Ci0gICMgY292ZXJh
bGxzIGlzIG5vdCBpbiB0b3gncyBlbnZsaXN0LCBwbHVzIGZvciBQUnMgdGhlIHNlY3VyZSB2YXJp
YWJsZQotICAjIGlzIG5vdCBkZWZpbmVkIHNvIHdlIGhhdmUgdG8gY2hlY2sgZm9yIGl0Ci0gIC0g
aWYgZGVmaW5lZCBDT1ZFUkFMTFNfUkVQT19UT0tFTiBDOlxQeXRob24zNVxweXRob24gLW0gdG94
IC1lIGNvdmVyYWxscwpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rv
b2xzL3B5dGVzdC9iZW5jaC9iZW5jaC5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90
b29scy9weXRlc3QvYmVuY2gvYmVuY2gucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGNlOTQ5NjQxNzJmLi4wMDAwMDAwMDAwMAotLS0gYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93
M2MvdG9vbHMvcHl0ZXN0L2JlbmNoL2JlbmNoLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAs
MCBAQAotaW1wb3J0IHN5cwotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIGltcG9y
dCBjUHJvZmlsZQotICAgIGltcG9ydCBweXRlc3QKLSAgICBpbXBvcnQgcHN0YXRzCi0gICAgc2Ny
aXB0ID0gc3lzLmFyZ3ZbMTpdIGlmIGxlbihzeXMuYXJndikgPiAxIGVsc2UgImVtcHR5LnB5Igot
ICAgIHN0YXRzID0gY1Byb2ZpbGUucnVuKCdweXRlc3QuY21kbGluZS5tYWluKCVyKScgJSBzY3Jp
cHQsICdwcm9mJykKLSAgICBwID0gcHN0YXRzLlN0YXRzKCJwcm9mIikKLSAgICBwLnN0cmlwX2Rp
cnMoKQotICAgIHAuc29ydF9zdGF0cygnY3VtdWxhdGl2ZScpCi0gICAgcHJpbnQocC5wcmludF9z
dGF0cyg1MDApKQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xz
L3B5dGVzdC9iZW5jaC9iZW5jaF9hcmdjb21wbGV0ZS5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9y
dGVkL3czYy90b29scy9weXRlc3QvYmVuY2gvYmVuY2hfYXJnY29tcGxldGUucHkKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2NmM2NjRmMzQ2Li4wMDAwMDAwMDAwMAotLS0gYS9XZWJE
cml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L2JlbmNoL2JlbmNoX2FyZ2NvbXBs
ZXRlLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotCi0KLSMgMTAwMDAgaXRlcmF0
aW9ucywganVzdCBmb3IgcmVsYXRpdmUgY29tcGFyaXNvbgotIyAgICAgICAgICAgICAgICAgICAg
ICAyLjcuNSAgICAgMy4zLjIKLSMgRmlsZXNDb21wbGV0ZXIgICAgICAgNzUuMTEwOSAgIDY5LjIx
MTYKLSMgRmFzdEZpbGVzQ29tcGxldGVyICAgIDAuNzM4MyAgICAxLjA3NjAKLQotCi1pZiBfX25h
bWVfXyA9PSAnX19tYWluX18nOgotICAgIGltcG9ydCBzeXMKLSAgICBpbXBvcnQgdGltZWl0Ci0g
ICAgZnJvbSBhcmdjb21wbGV0ZS5jb21wbGV0ZXJzIGltcG9ydCBGaWxlc0NvbXBsZXRlcgotICAg
IGZyb20gX3B5dGVzdC5fYXJnY29tcGxldGUgaW1wb3J0IEZhc3RGaWxlc0NvbXBsZXRlcgotICAg
IGNvdW50ID0gMTAwMCAjIG9ubHkgYSBmZXcgc2Vjb25kcwotICAgIHNldHVwID0gJ2Zyb20gX19t
YWluX18gaW1wb3J0IEZhc3RGaWxlc0NvbXBsZXRlclxuZmMgPSBGYXN0RmlsZXNDb21wbGV0ZXIo
KScKLSAgICBydW4gPSAnZmMoIi9kIiknCi0gICAgc3lzLnN0ZG91dC53cml0ZSgnJXNcbicgJSAo
dGltZWl0LnRpbWVpdChydW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldHVw
PXNldHVwLnJlcGxhY2UoJ0Zhc3QnLCAnJyksIG51bWJlcj1jb3VudCkpKQotICAgIHN5cy5zdGRv
dXQud3JpdGUoJyVzXG4nICUgKHRpbWVpdC50aW1laXQocnVuLCBzZXR1cD1zZXR1cCwgbnVtYmVy
PWNvdW50KSkpCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMv
cHl0ZXN0L2JlbmNoL2VtcHR5LnB5IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xz
L3B5dGVzdC9iZW5jaC9lbXB0eS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWM1
ZTI1NzAxZGEuLjAwMDAwMDAwMDAwCi0tLSBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90
b29scy9weXRlc3QvYmVuY2gvZW1wdHkucHkKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAK
LWltcG9ydCBweQotZm9yIGkgaW4gcmFuZ2UoMTAwMCk6Ci0gICAgcHkuYnVpbHRpbi5leGVjXygi
ZGVmIHRlc3RfZnVuY18lZCgpOiBwYXNzIiAlIGkpCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0
cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L2JlbmNoL21hbnlwYXJhbS5weSBiL1dlYkRyaXZl
clRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvYmVuY2gvbWFueXBhcmFtLnB5CmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMmJjYTBlOGFjZC4uMDAwMDAwMDAwMDAKLS0tIGEv
V2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9iZW5jaC9tYW55cGFyYW0u
cHkKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0KLWltcG9ydCBweXRlc3QKLQotQHB5
dGVzdC5maXh0dXJlKHNjb3BlPSdtb2R1bGUnLCBwYXJhbXM9cmFuZ2UoOTY2KSkKLWRlZiBmb28o
cmVxdWVzdCk6Ci0gICAgcmV0dXJuIHJlcXVlc3QucGFyYW0KLQotZGVmIHRlc3RfaXQoZm9vKToK
LSAgICBwYXNzCi1kZWYgdGVzdF9pdDIoZm9vKToKLSAgICBwYXNzCi0KZGlmZiAtLWdpdCBhL1dl
YkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvYmVuY2gvc2tpcC5weSBiL1dl
YkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvYmVuY2gvc2tpcC5weQpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTYwYjMwODY0NWEuLjAwMDAwMDAwMDAwCi0tLSBh
L1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvYmVuY2gvc2tpcC5weQor
KysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLQotaW1wb3J0IHB5dGVzdAotCi0KLVNLSVAg
PSBUcnVlCi0KLUBweXRlc3QubWFyay5wYXJhbWV0cml6ZSgieCIsIHhyYW5nZSg1MDAwKSkKLWRl
ZiB0ZXN0X2Zvbyh4KToKLSAgICBpZiBTS0lQOgotICAgICAgICBweXRlc3Quc2tpcCgiaGVoIikK
ZGlmZiAtLWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvZXh0
cmEvZ2V0X2lzc3Vlcy5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRl
c3QvZXh0cmEvZ2V0X2lzc3Vlcy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjQz
N2JhNGMzNGUuLjAwMDAwMDAwMDAwCi0tLSBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90
b29scy9weXRlc3QvZXh0cmEvZ2V0X2lzc3Vlcy5weQorKysgL2Rldi9udWxsCkBAIC0xLDc0ICsw
LDAgQEAKLWltcG9ydCBqc29uCi1pbXBvcnQgcHkKLWltcG9ydCB0ZXh0d3JhcAotCi1pc3N1ZXNf
dXJsID0gImh0dHA6Ly9iaXRidWNrZXQub3JnL2FwaS8xLjAvcmVwb3NpdG9yaWVzL3B5dGVzdC1k
ZXYvcHl0ZXN0L2lzc3VlcyIKLQotaW1wb3J0IHJlcXVlc3RzCi0KLWRlZiBnZXRfaXNzdWVzKCk6
Ci0gICAgY2h1bmtzaXplID0gNTAKLSAgICBzdGFydCA9IDAKLSAgICBpc3N1ZXMgPSBbXQotICAg
IHdoaWxlIDE6Ci0gICAgICAgIHBvc3RfZGF0YSA9IHsiYWNjb3VudG5hbWUiOiAicHl0ZXN0LWRl
diIsCi0gICAgICAgICAgICAgICAgICAgICAicmVwb19zbHVnIjogInB5dGVzdCIsCi0gICAgICAg
ICAgICAgICAgICAgICAic3RhcnQiOiBzdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICJsaW1p
dCI6IGNodW5rc2l6ZX0KLSAgICAgICAgcHJpbnQgKCJnZXR0aW5nIGZyb20iLCBzdGFydCkKLSAg
ICAgICAgciA9IHJlcXVlc3RzLmdldChpc3N1ZXNfdXJsLCBwYXJhbXM9cG9zdF9kYXRhKQotICAg
ICAgICBkYXRhID0gci5qc29uKCkKLSAgICAgICAgaXNzdWVzLmV4dGVuZChkYXRhWyJpc3N1ZXMi
XSkKLSAgICAgICAgaWYgc3RhcnQgKyBjaHVua3NpemUgPj0gZGF0YVsiY291bnQiXToKLSAgICAg
ICAgICAgIHJldHVybiBpc3N1ZXMKLSAgICAgICAgc3RhcnQgKz0gY2h1bmtzaXplCi0KLWtpbmQy
bnVtID0gImJ1ZyBlbmhhbmNlbWVudCB0YXNrIHByb3Bvc2FsIi5zcGxpdCgpCi0KLXN0YXR1czJu
dW0gPSAibmV3IG9wZW4gcmVzb2x2ZWQgZHVwbGljYXRlIGludmFsaWQgd29udGZpeCIuc3BsaXQo
KQotCi1kZWYgbWFpbihhcmdzKToKLSAgICBjYWNoZWZpbGUgPSBweS5wYXRoLmxvY2FsKGFyZ3Mu
Y2FjaGUpCi0gICAgaWYgbm90IGNhY2hlZmlsZS5leGlzdHMoKSBvciBhcmdzLnJlZnJlc2g6Ci0g
ICAgICAgIGlzc3VlcyA9IGdldF9pc3N1ZXMoKQotICAgICAgICBjYWNoZWZpbGUud3JpdGUoanNv
bi5kdW1wcyhpc3N1ZXMpKQotICAgIGVsc2U6Ci0gICAgICAgIGlzc3VlcyA9IGpzb24ubG9hZHMo
Y2FjaGVmaWxlLnJlYWQoKSkKLQotICAgIG9wZW5faXNzdWVzID0gW3ggZm9yIHggaW4gaXNzdWVz
Ci0gICAgICAgICAgICAgICAgICAgIGlmIHhbInN0YXR1cyJdIGluICgibmV3IiwgIm9wZW4iKV0K
LQotICAgIGRlZiBraW5kX2FuZF9pZCh4KToKLSAgICAgICAga2luZCA9IHhbIm1ldGFkYXRhIl1b
ImtpbmQiXQotICAgICAgICByZXR1cm4ga2luZDJudW0uaW5kZXgoa2luZCksIGxlbihpc3N1ZXMp
LWludCh4WyJsb2NhbF9pZCJdKQotICAgIG9wZW5faXNzdWVzLnNvcnQoa2V5PWtpbmRfYW5kX2lk
KQotICAgIHJlcG9ydChvcGVuX2lzc3VlcykKLQotZGVmIHJlcG9ydChpc3N1ZXMpOgotICAgIGZv
ciBpc3N1ZSBpbiBpc3N1ZXM6Ci0gICAgICAgIG1ldGFkYXRhID0gaXNzdWVbIm1ldGFkYXRhIl0K
LSAgICAgICAgcHJpb3JpdHkgPSBpc3N1ZVsicHJpb3JpdHkiXQotICAgICAgICB0aXRsZSA9IGlz
c3VlWyJ0aXRsZSJdCi0gICAgICAgIGNvbnRlbnQgPSBpc3N1ZVsiY29udGVudCJdCi0gICAgICAg
IGtpbmQgPSBtZXRhZGF0YVsia2luZCJdCi0gICAgICAgIHN0YXR1cyA9IGlzc3VlWyJzdGF0dXMi
XQotICAgICAgICBpZCA9IGlzc3VlWyJsb2NhbF9pZCJdCi0gICAgICAgIGxpbmsgPSAiaHR0cHM6
Ly9iaXRidWNrZXQub3JnL3B5dGVzdC1kZXYvcHl0ZXN0L2lzc3VlLyVzLyIgJSBpZAotICAgICAg
ICBwcmludCgiLS0tLSIpCi0gICAgICAgIHByaW50KHN0YXR1cywga2luZCwgbGluaykKLSAgICAg
ICAgcHJpbnQodGl0bGUpCi0gICAgICAgICNwcmludCgpCi0gICAgICAgICNsaW5lcyA9IGNvbnRl
bnQuc3BsaXQoIlxuIikKLSAgICAgICAgI3ByaW50ICgiXG4iLmpvaW4obGluZXNbOjNdKSkKLSAg
ICAgICAgI2lmIGxlbihsaW5lcykgPiAzIG9yIGxlbihjb250ZW50KSA+IDI0MDoKLSAgICAgICAg
IyAgICBwcmludCAoIi4uLiIpCi0KLWlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgaW1w
b3J0IGFyZ3BhcnNlCi0gICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoInByb2Nl
c3MgYml0YnVja2V0IGlzc3VlcyIpCi0gICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLS1yZWZyZXNo
IiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9Imlu
dmFsaWRhdGUgY2FjaGUsIHJlZnJlc2ggaXNzdWVzIikKLSAgICBwYXJzZXIuYWRkX2FyZ3VtZW50
KCItLWNhY2hlIiwgYWN0aW9uPSJzdG9yZSIsIGRlZmF1bHQ9Imlzc3Vlcy5qc29uIiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGhlbHA9ImNhY2hlIGZpbGUiKQotICAgIGFyZ3MgPSBwYXJzZXIu
cGFyc2VfYXJncygpCi0gICAgbWFpbihhcmdzKQpkaWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMv
aW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9leHRyYS9zZXR1cC1weS50ZXN0L3NldHVwLnB5IGIv
V2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9leHRyYS9zZXR1cC1weS50
ZXN0L3NldHVwLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDU2MGNlMWY1Zi4u
MDAwMDAwMDAwMDAKLS0tIGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVz
dC9leHRyYS9zZXR1cC1weS50ZXN0L3NldHVwLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAs
MCBAQAotaW1wb3J0IHN5cwotZnJvbSBkaXN0dXRpbHMuY29yZSBpbXBvcnQgc2V0dXAKLQotaWYg
X19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICBpZiAic2Rpc3QiIG5vdCBpbiBzeXMuYXJndlsx
Ol06Ci0gICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInBsZWFzZSB1c2UgJ3B5dGVzdCcgcHlwaSBw
YWNrYWdlIGluc3RlYWQgb2YgJ3B5LnRlc3QnIikKLSAgICBzZXR1cCgKLSAgICAgICAgbmFtZT0i
cHkudGVzdCIsCi0gICAgICAgIHZlcnNpb249IjAuMCIsCi0gICAgICAgIGRlc2NyaXB0aW9uPSJw
bGVhc2UgdXNlICdweXRlc3QnIGZvciBpbnN0YWxsYXRpb24iLAotICAgICkKZGlmZiAtLWdpdCBh
L1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvcGx1Z2luLXRlc3Quc2gg
Yi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L3BsdWdpbi10ZXN0LnNo
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YzYxYjUwNTM2ZS4uMDAwMDAwMDAwMDAK
LS0tIGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9wbHVnaW4tdGVz
dC5zaAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLSMhL2Jpbi9iYXNoCi0KLSMgdGhp
cyBhc3N1bWVzIHBsdWdpbnMgYXJlIGluc3RhbGxlZCBhcyBzaXN0ZXIgZGlyZWN0b3JpZXMKLQot
c2V0IC1lCi1jZCAuLi9weXRlc3QtcGVwOAotcHkudGVzdAotY2QgLi4vcHl0ZXN0LWluc3RhZmFp
bAotcHkudGVzdCAKLWNkIC4uL3B5dGVzdC1jYWNoZQotcHkudGVzdAotY2QgLi4vcHl0ZXN0LXhw
cm9jZXNzCi1weS50ZXN0Ci0jY2QgLi4vcHl0ZXN0LWNvdgotI3B5LnRlc3QKLWNkIC4uL3B5dGVz
dC1jYXB0dXJlbG9nCi1weS50ZXN0Ci1jZCAuLi9weXRlc3QteGRpc3QKLXB5LnRlc3QKLQpkaWZm
IC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9weXRlc3Qu
cHkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L3B5dGVzdC5weQpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTM3NmU0MTdlOGEuLjAwMDAwMDAwMDAwCi0t
LSBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvcHl0ZXN0LnB5Cisr
KyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotIyBQWVRIT05fQVJHQ09NUExFVEVfT0sKLSIi
IgotcHl0ZXN0OiB1bml0IGFuZCBmdW5jdGlvbmFsIHRlc3Rpbmcgd2l0aCBQeXRob24uCi0iIiIK
LV9fYWxsX18gPSBbCi0gICAgJ21haW4nLAotICAgICdVc2FnZUVycm9yJywKLSAgICAnY21kbGlu
ZScsCi0gICAgJ2hvb2tzcGVjJywKLSAgICAnaG9va2ltcGwnLAotICAgICdfX3ZlcnNpb25fXycs
Ci1dCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6ICMgaWYgcnVuIGFzIGEgc2NyaXB0IG9y
IGJ5ICdweXRob24gLW0gcHl0ZXN0JwotICAgICMgd2UgdHJpZ2dlciB0aGUgYmVsb3cgImVsc2Ui
IGNvbmRpdGlvbiBieSB0aGUgZm9sbG93aW5nIGltcG9ydAotICAgIGltcG9ydCBweXRlc3QKLSAg
ICByYWlzZSBTeXN0ZW1FeGl0KHB5dGVzdC5tYWluKCkpCi0KLSMgZWxzZSB3ZSBhcmUgaW1wb3J0
ZWQKLQotZnJvbSBfcHl0ZXN0LmNvbmZpZyBpbXBvcnQgKAotICAgIG1haW4sIFVzYWdlRXJyb3Is
IF9wcmVsb2FkcGx1Z2lucywgY21kbGluZSwKLSAgICBob29rc3BlYywgaG9va2ltcGwKLSkKLWZy
b20gX3B5dGVzdCBpbXBvcnQgX192ZXJzaW9uX18KLQotX3ByZWxvYWRwbHVnaW5zKCkgIyB0byBw
b3B1bGF0ZSBweXRlc3QuKiBuYW1lc3BhY2Ugc28gaGVscChweXRlc3QpIHdvcmtzCi0KZGlmZiAt
LWdpdCBhL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvcmVxdWlyZW1l
bnRzLWRvY3MudHh0IGIvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9y
ZXF1aXJlbWVudHMtZG9jcy50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlM2Ey
MzJlNTdiLi4wMDAwMDAwMDAwMAotLS0gYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9v
bHMvcHl0ZXN0L3JlcXVpcmVtZW50cy1kb2NzLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAs
MCBAQAotc3BoaW54PT0xLjIuMwotcmVnZW5kb2MKLXB5eWFtbApkaWZmIC0tZ2l0IGEvV2ViRHJp
dmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9ydW50b3gucHkgYi9XZWJEcml2ZXJU
ZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L3J1bnRveC5weQpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggOGMxM2M1M2UxYzQuLjAwMDAwMDAwMDAwCi0tLSBhL1dlYkRyaXZlclRl
c3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3QvcnVudG94LnB5CisrKyAvZGV2L251bGwKQEAg
LTEsOCArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLQotaWYgX19uYW1lX18gPT0gIl9f
bWFpbl9fIjoKLSAgICBpbXBvcnQgc3VicHJvY2VzcwotICAgIGltcG9ydCBzeXMKLSAgICBzdWJw
cm9jZXNzLmNhbGwoW3N5cy5leGVjdXRhYmxlLCAiLW0iLCAidG94IiwKLSAgICAgICAgICAgICAg
ICAgICAgICItaSIsICJBTEw9aHR0cHM6Ly9kZXZwaS5uZXQvaHBrL2Rldi8iLAotICAgICAgICAg
ICAgICAgICAgICAgIi0tZGV2ZWxvcCJdICsgc3lzLmFyZ3ZbMTpdKQpkaWZmIC0tZ2l0IGEvV2Vi
RHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9zZXR1cC5jZmcgYi9XZWJEcml2
ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L3NldHVwLmNmZwpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMWFiNGZkMDU5YjIuLjAwMDAwMDAwMDAwCi0tLSBhL1dlYkRyaXZl
clRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3Qvc2V0dXAuY2ZnCisrKyAvZGV2L251bGwK
QEAgLTEsMTMgKzAsMCBAQAotW2J1aWxkX3NwaGlueF0KLXNvdXJjZS1kaXIgPSBkb2MvZW4vCi1i
dWlsZC1kaXIgPSBkb2MvYnVpbGQKLWFsbF9maWxlcyA9IDEKLQotW3VwbG9hZF9zcGhpbnhdCi11
cGxvYWQtZGlyID0gZG9jL2VuL2J1aWxkL2h0bWwKLQotW2JkaXN0X3doZWVsXQotdW5pdmVyc2Fs
ID0gMQotCi1bZGV2cGk6dXBsb2FkXQotZm9ybWF0cyA9IHNkaXN0LnRneixiZGlzdF93aGVlbApk
aWZmIC0tZ2l0IGEvV2ViRHJpdmVyVGVzdHMvaW1wb3J0ZWQvdzNjL3Rvb2xzL3B5dGVzdC9zZXR1
cC5weSBiL1dlYkRyaXZlclRlc3RzL2ltcG9ydGVkL3czYy90b29scy9weXRlc3Qvc2V0dXAucHkK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2NjBmMjE2MDRkLi4wMDAwMDAwMDAwMAot
LS0gYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L3NldHVwLnB5Cisr
KyAvZGV2L251bGwKQEAgLTEsMTIyICswLDAgQEAKLWltcG9ydCBvcywgc3lzCi1pbXBvcnQgc2V0
dXB0b29scwotaW1wb3J0IHBrZ19yZXNvdXJjZXMKLWZyb20gc2V0dXB0b29scyBpbXBvcnQgc2V0
dXAsIENvbW1hbmQKLQotY2xhc3NpZmllcnMgPSBbJ0RldmVsb3BtZW50IFN0YXR1cyA6OiA2IC0g
TWF0dXJlJywKLSAgICAgICAgICAgICAgICdJbnRlbmRlZCBBdWRpZW5jZSA6OiBEZXZlbG9wZXJz
JywKLSAgICAgICAgICAgICAgICdMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBNSVQgTGljZW5z
ZScsCi0gICAgICAgICAgICAgICAnT3BlcmF0aW5nIFN5c3RlbSA6OiBQT1NJWCcsCi0gICAgICAg
ICAgICAgICAnT3BlcmF0aW5nIFN5c3RlbSA6OiBNaWNyb3NvZnQgOjogV2luZG93cycsCi0gICAg
ICAgICAgICAgICAnT3BlcmF0aW5nIFN5c3RlbSA6OiBNYWNPUyA6OiBNYWNPUyBYJywKLSAgICAg
ICAgICAgICAgICdUb3BpYyA6OiBTb2Z0d2FyZSBEZXZlbG9wbWVudCA6OiBUZXN0aW5nJywKLSAg
ICAgICAgICAgICAgICdUb3BpYyA6OiBTb2Z0d2FyZSBEZXZlbG9wbWVudCA6OiBMaWJyYXJpZXMn
LAotICAgICAgICAgICAgICAgJ1RvcGljIDo6IFV0aWxpdGllcyddICsgWwotICAgICAgICAgICAg
ICAoJ1Byb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAlcycgJSB4KSBmb3IgeCBpbgot
ICAgICAgICAgICAgICAgICAgJzIgMi42IDIuNyAzIDMuMiAzLjMgMy40IDMuNScuc3BsaXQoKV0K
LQotd2l0aCBvcGVuKCdSRUFETUUucnN0JykgYXMgZmQ6Ci0gICAgbG9uZ19kZXNjcmlwdGlvbiA9
IGZkLnJlYWQoKQotCi1kZWYgZ2V0X3ZlcnNpb24oKToKLSAgICBwID0gb3MucGF0aC5qb2luKG9z
LnBhdGguZGlybmFtZSgKLSAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguYWJzcGF0aChfX2Zp
bGVfXykpLCAiX3B5dGVzdCIsICJfX2luaXRfXy5weSIpCi0gICAgd2l0aCBvcGVuKHApIGFzIGY6
Ci0gICAgICAgIGZvciBsaW5lIGluIGYucmVhZGxpbmVzKCk6Ci0gICAgICAgICAgICBpZiAiX192
ZXJzaW9uX18iIGluIGxpbmU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGxpbmUuc3RyaXAoKS5z
cGxpdCgiPSIpWy0xXS5zdHJpcCgiICciKQotICAgIHJhaXNlIFZhbHVlRXJyb3IoImNvdWxkIG5v
dCByZWFkIHZlcnNpb24iKQotCi0KLWRlZiBoYXNfZW52aXJvbm1lbnRfbWFya2VyX3N1cHBvcnQo
KToKLSAgICAiIiIKLSAgICBUZXN0cyB0aGF0IHNldHVwdG9vbHMgaGFzIHN1cHBvcnQgZm9yIFBF
UC00MjYgZW52aXJvbm1lbnQgbWFya2VyIHN1cHBvcnQuCi0KLSAgICBUaGUgZmlyc3Qga25vd24g
cmVsZWFzZSB0byBzdXBwb3J0IGl0IGlzIDAuNyAoYW5kIHRoZSBlYXJsaWVzdCBvbiBQeVBJIHNl
ZW1zIHRvIGJlIDAuNy4yCi0gICAgc28gd2UncmUgdXNpbmcgdGhhdCksIHNlZTogaHR0cDovL3B5
dGhvbmhvc3RlZC5vcmcvc2V0dXB0b29scy9oaXN0b3J5Lmh0bWwjaWQxNDIKLQotICAgIFJlZmVy
ZW5jZXM6Ci0KLSAgICAqIGh0dHBzOi8vd2hlZWwucmVhZHRoZWRvY3Mub3JnL2VuL2xhdGVzdC9p
bmRleC5odG1sI2RlZmluaW5nLWNvbmRpdGlvbmFsLWRlcGVuZGVuY2llcwotICAgICogaHR0cHM6
Ly93d3cucHl0aG9uLm9yZy9kZXYvcGVwcy9wZXAtMDQyNi8jZW52aXJvbm1lbnQtbWFya2Vycwot
ICAgICIiIgotICAgIHRyeToKLSAgICAgICAgcmV0dXJuIHBrZ19yZXNvdXJjZXMucGFyc2VfdmVy
c2lvbihzZXR1cHRvb2xzLl9fdmVyc2lvbl9fKSA+PSBwa2dfcmVzb3VyY2VzLnBhcnNlX3ZlcnNp
b24oJzAuNy4yJykKLSAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKLSAgICAgICAgc3lzLnN0
ZGVyci53cml0ZSgiQ291bGQgbm90IHRlc3Qgc2V0dXB0b29sJ3MgdmVyc2lvbjogJXNcbiIgJSBl
eGMpCi0gICAgICAgIHJldHVybiBGYWxzZQotCi0KLWRlZiBtYWluKCk6Ci0gICAgaW5zdGFsbF9y
ZXF1aXJlcyA9IFsncHk+PTEuNC4yOSddICAjIHBsdWdneSBpcyB2ZW5kb3JlZCBpbiBfcHl0ZXN0
LnZlbmRvcmVkX3BhY2thZ2VzCi0gICAgZXh0cmFzX3JlcXVpcmUgPSB7fQotICAgIGlmIGhhc19l
bnZpcm9ubWVudF9tYXJrZXJfc3VwcG9ydCgpOgotICAgICAgICBleHRyYXNfcmVxdWlyZVsnOnB5
dGhvbl92ZXJzaW9uPT0iMi42IiBvciBweXRob25fdmVyc2lvbj09IjMuMCIgb3IgcHl0aG9uX3Zl
cnNpb249PSIzLjEiJ10gPSBbJ2FyZ3BhcnNlJ10KLSAgICAgICAgZXh0cmFzX3JlcXVpcmVbJzpz
eXNfcGxhdGZvcm09PSJ3aW4zMiInXSA9IFsnY29sb3JhbWEnXQotICAgIGVsc2U6Ci0gICAgICAg
IGlmIHN5cy52ZXJzaW9uX2luZm8gPCAoMiwgNykgb3IgKDMsKSA8PSBzeXMudmVyc2lvbl9pbmZv
IDwgKDMsIDIpOgotICAgICAgICAgICAgaW5zdGFsbF9yZXF1aXJlcy5hcHBlbmQoJ2FyZ3BhcnNl
JykKLSAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6Ci0gICAgICAgICAgICBpbnN0
YWxsX3JlcXVpcmVzLmFwcGVuZCgnY29sb3JhbWEnKQotCi0gICAgc2V0dXAoCi0gICAgICAgIG5h
bWU9J3B5dGVzdCcsCi0gICAgICAgIGRlc2NyaXB0aW9uPSdweXRlc3Q6IHNpbXBsZSBwb3dlcmZ1
bCB0ZXN0aW5nIHdpdGggUHl0aG9uJywKLSAgICAgICAgbG9uZ19kZXNjcmlwdGlvbj1sb25nX2Rl
c2NyaXB0aW9uLAotICAgICAgICB2ZXJzaW9uPWdldF92ZXJzaW9uKCksCi0gICAgICAgIHVybD0n
aHR0cDovL3B5dGVzdC5vcmcnLAotICAgICAgICBsaWNlbnNlPSdNSVQgbGljZW5zZScsCi0gICAg
ICAgIHBsYXRmb3Jtcz1bJ3VuaXgnLCAnbGludXgnLCAnb3N4JywgJ2N5Z3dpbicsICd3aW4zMidd
LAotICAgICAgICBhdXRob3I9J0hvbGdlciBLcmVrZWwsIEJydW5vIE9saXZlaXJhLCBSb25ueSBQ
ZmFubnNjaG1pZHQsIEZsb3JpcyBCcnV5bm9vZ2hlLCBCcmlhbm5hIExhdWdoZXIsIEZsb3JpYW4g
QnJ1aGluIGFuZCBvdGhlcnMnLAotICAgICAgICBhdXRob3JfZW1haWw9J2hvbGdlciBhdCBtZXJs
aW51eC5ldScsCi0gICAgICAgIGVudHJ5X3BvaW50cz1tYWtlX2VudHJ5X3BvaW50cygpLAotICAg
ICAgICBjbGFzc2lmaWVycz1jbGFzc2lmaWVycywKLSAgICAgICAgY21kY2xhc3M9eyd0ZXN0Jzog
UHlUZXN0fSwKLSAgICAgICAgIyB0aGUgZm9sbG93aW5nIHNob3VsZCBiZSBlbmFibGVkIGZvciBy
ZWxlYXNlCi0gICAgICAgIGluc3RhbGxfcmVxdWlyZXM9aW5zdGFsbF9yZXF1aXJlcywKLSAgICAg
ICAgZXh0cmFzX3JlcXVpcmU9ZXh0cmFzX3JlcXVpcmUsCi0gICAgICAgIHBhY2thZ2VzPVsnX3B5
dGVzdCcsICdfcHl0ZXN0LmFzc2VydGlvbicsICdfcHl0ZXN0Ll9jb2RlJywgJ19weXRlc3QudmVu
ZG9yZWRfcGFja2FnZXMnXSwKLSAgICAgICAgcHlfbW9kdWxlcz1bJ3B5dGVzdCddLAotICAgICAg
ICB6aXBfc2FmZT1GYWxzZSwKLSAgICApCi0KLQotZGVmIGNtZGxpbmVfZW50cnlwb2ludHModmVy
c2lvbmluZm8sIHBsYXRmb3JtLCBiYXNlbmFtZSk6Ci0gICAgdGFyZ2V0ID0gJ3B5dGVzdDptYWlu
JwotICAgIGlmIHBsYXRmb3JtLnN0YXJ0c3dpdGgoJ2phdmEnKToKLSAgICAgICAgcG9pbnRzID0g
eydweS50ZXN0LWp5dGhvbic6IHRhcmdldH0KLSAgICBlbHNlOgotICAgICAgICBpZiBiYXNlbmFt
ZS5zdGFydHN3aXRoKCdweXB5Jyk6Ci0gICAgICAgICAgICBwb2ludHMgPSB7J3B5LnRlc3QtJXMn
ICUgYmFzZW5hbWU6IHRhcmdldH0KLSAgICAgICAgZWxzZTogIyBjcHl0aG9uCi0gICAgICAgICAg
ICBwb2ludHMgPSB7J3B5LnRlc3QtJXMuJXMnICUgdmVyc2lvbmluZm9bOjJdIDogdGFyZ2V0fQot
ICAgICAgICBwb2ludHNbJ3B5LnRlc3QnXSA9IHRhcmdldAotICAgIHJldHVybiBwb2ludHMKLQot
Ci1kZWYgbWFrZV9lbnRyeV9wb2ludHMoKToKLSAgICBiYXNlbmFtZSA9IG9zLnBhdGguYmFzZW5h
bWUoc3lzLmV4ZWN1dGFibGUpCi0gICAgcG9pbnRzID0gY21kbGluZV9lbnRyeXBvaW50cyhzeXMu
dmVyc2lvbl9pbmZvLCBzeXMucGxhdGZvcm0sIGJhc2VuYW1lKQotICAgIGtleXMgPSBsaXN0KHBv
aW50cy5rZXlzKCkpCi0gICAga2V5cy5zb3J0KCkKLSAgICBsID0gWyclcyA9ICVzJyAlICh4LCBw
b2ludHNbeF0pIGZvciB4IGluIGtleXNdCi0gICAgcmV0dXJuIHsnY29uc29sZV9zY3JpcHRzJzog
bH0KLQotCi1jbGFzcyBQeVRlc3QoQ29tbWFuZCk6Ci0gICAgdXNlcl9vcHRpb25zID0gW10KLSAg
ICBkZWYgaW5pdGlhbGl6ZV9vcHRpb25zKHNlbGYpOgotICAgICAgICBwYXNzCi0gICAgZGVmIGZp
bmFsaXplX29wdGlvbnMoc2VsZik6Ci0gICAgICAgIHBhc3MKLSAgICBkZWYgcnVuKHNlbGYpOgot
ICAgICAgICBpbXBvcnQgc3VicHJvY2VzcwotICAgICAgICBQUEFUSCA9IFt4IGZvciB4IGluIG9z
LmVudmlyb24uZ2V0KCdQWVRIT05QQVRIJywgJycpLnNwbGl0KCc6JykgaWYgeF0KLSAgICAgICAg
UFBBVEguaW5zZXJ0KDAsIG9zLmdldGN3ZCgpKQotICAgICAgICBvcy5lbnZpcm9uWydQWVRIT05Q
QVRIJ10gPSAnOicuam9pbihQUEFUSCkKLSAgICAgICAgZXJybm8gPSBzdWJwcm9jZXNzLmNhbGwo
W3N5cy5leGVjdXRhYmxlLCAncHl0ZXN0LnB5JywgJy0taWdub3JlPWRvYyddKQotICAgICAgICBy
YWlzZSBTeXN0ZW1FeGl0KGVycm5vKQotCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0g
ICAgbWFpbigpCmRpZmYgLS1naXQgYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMv
cHl0ZXN0L3RveC5pbmkgYi9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0
L3RveC5pbmkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmNjU0NDZlNDJiLi4wMDAw
MDAwMDAwMAotLS0gYS9XZWJEcml2ZXJUZXN0cy9pbXBvcnRlZC93M2MvdG9vbHMvcHl0ZXN0L3Rv
eC5pbmkKKysrIC9kZXYvbnVsbApAQCAtMSwxNjAgKzAsMCBAQAotW3RveF0KLW1pbnZlcnNpb249
Mi4wCi1kaXN0c2hhcmU9e2hvbWVkaXJ9Ly50b3gvZGlzdHNoYXJlCi1lbnZsaXN0PQotICAgICBs
aW50aW5nLHB5MjYscHkyNyxweTMzLHB5MzQscHkzNSxweXB5LAotICAgICB7cHkyNyxweTM1fS17
cGV4cGVjdCx4ZGlzdCx0cmlhbH0sCi0gICAgIHB5Mjctbm9ieXRlLGRvY3Rlc3RpbmcscHkyNy1j
eGZyZWV6ZQotCi1bdGVzdGVudl0KLWNvbW1hbmRzPSBweS50ZXN0IC0tbHNvZiAtcmZzeFgge3Bv
c2FyZ3M6dGVzdGluZ30KLXBhc3NlbnYgPSBVU0VSIFVTRVJOQU1FCi1kZXBzPQotICAgIG5vc2UK
LSAgICBtb2NrCi0gICAgcmVxdWVzdHMKLQotW3Rlc3RlbnY6cHkyNl0KLWNvbW1hbmRzPSBweS50
ZXN0IC0tbHNvZiAtcmZzeFgge3Bvc2FyZ3M6dGVzdGluZ30KLWRlcHM9Ci0gICAgbm9zZQotICAg
IG1vY2s8MS4xICAjIGxhc3Qgc3VwcG9ydGVkIHZlcnNpb24gZm9yIHB5MjYKLQotW3Rlc3RlbnY6
cHkyNy1zdWJwcm9jZXNzXQotY2hhbmdlZGlyPS4KLWJhc2VweXRob249cHl0aG9uMi43Ci1kZXBz
PXB5dGVzdC14ZGlzdD49MS4xMwotICAgIG1vY2sKLSAgICBub3NlCi1jb21tYW5kcz0KLSAgcHku
dGVzdCAtbjMgLXJmc3hYIC0tcnVucHl0ZXN0PXN1YnByb2Nlc3Mge3Bvc2FyZ3M6dGVzdGluZ30K
LQotW3Rlc3RlbnY6Z2Vuc2NyaXB0XQotY29tbWFuZHM9IHB5LnRlc3QgLS1nZW5zY3JpcHQ9cHl0
ZXN0MQotCi1bdGVzdGVudjpsaW50aW5nXQotYmFzZXB5dGhvbiA9IHB5dGhvbjIuNwotZGVwcyA9
IGZsYWtlOAotICAgIHJlc3RydWN0dXJlZHRleHRfbGludAotY29tbWFuZHMgPSBmbGFrZTggcHl0
ZXN0LnB5IF9weXRlc3QgdGVzdGluZwotICAgIHJzdC1saW50IENIQU5HRUxPRy5yc3QKLQotW3Rl
c3RlbnY6cHkyNy14ZGlzdF0KLWRlcHM9cHl0ZXN0LXhkaXN0Pj0xLjEzCi0gICAgbW9jawotICAg
IG5vc2UKLWNvbW1hbmRzPQotICBweS50ZXN0IC1uMSAtcmZzeFgge3Bvc2FyZ3M6dGVzdGluZ30K
LQotW3Rlc3RlbnY6cHkzNS14ZGlzdF0KLWRlcHM9e1t0ZXN0ZW52OnB5MjcteGRpc3RdZGVwc30K
LWNvbW1hbmRzPQotICBweS50ZXN0IC1uMyAtcmZzeFgge3Bvc2FyZ3M6dGVzdGluZ30KLQotW3Rl
c3RlbnY6cHkyNy1wZXhwZWN0XQotY2hhbmdlZGlyPXRlc3RpbmcKLXBsYXRmb3JtPWxpbnV4fGRh
cndpbgotZGVwcz1wZXhwZWN0Ci1jb21tYW5kcz0KLSAgcHkudGVzdCAtcmZzeFggdGVzdF9wZGIu
cHkgdGVzdF90ZXJtaW5hbC5weSB0ZXN0X3VuaXR0ZXN0LnB5Ci0KLVt0ZXN0ZW52OnB5MzUtcGV4
cGVjdF0KLWNoYW5nZWRpcj10ZXN0aW5nCi1wbGF0Zm9ybT1saW51eHxkYXJ3aW4KLWRlcHM9e1t0
ZXN0ZW52OnB5MjctcGV4cGVjdF1kZXBzfQotY29tbWFuZHM9Ci0gIHB5LnRlc3QgLXJmc3hYIHRl
c3RfcGRiLnB5IHRlc3RfdGVybWluYWwucHkgdGVzdF91bml0dGVzdC5weQotCi1bdGVzdGVudjpw
eTI3LW5vYnl0ZV0KLWRlcHM9cHl0ZXN0LXhkaXN0Pj0xLjEzCi1kaXN0cmlidXRlPXRydWUKLXNl
dGVudj0KLSAgICBQWVRIT05ET05UV1JJVEVCWVRFQ09ERT0xCi1jb21tYW5kcz0KLSAgcHkudGVz
dCAtbjMgLXJmc3hYIHtwb3NhcmdzOnRlc3Rpbmd9Ci0KLVt0ZXN0ZW52OnB5MjctdHJpYWxdCi1k
ZXBzPXR3aXN0ZWQKLWNvbW1hbmRzPQotICBweS50ZXN0IC1yc3hmIHtwb3NhcmdzOnRlc3Rpbmcv
dGVzdF91bml0dGVzdC5weX0KLQotW3Rlc3RlbnY6cHkzNS10cmlhbF0KLXBsYXRmb3JtPWxpbnV4
fGRhcndpbgotZGVwcz17W3Rlc3RlbnY6cHkyNy10cmlhbF1kZXBzfQotY29tbWFuZHM9Ci0gIHB5
LnRlc3QgLXJzeGYge3Bvc2FyZ3M6dGVzdGluZy90ZXN0X3VuaXR0ZXN0LnB5fQotCi1bdGVzdGVu
djpkb2N0ZXN0XQotY29tbWFuZHM9cHkudGVzdCAtLWRvY3Rlc3QtbW9kdWxlcyBfcHl0ZXN0Ci1k
ZXBzPQotCi1bdGVzdGVudjpkb2NdCi1iYXNlcHl0aG9uPXB5dGhvbgotY2hhbmdlZGlyPWRvYy9l
bgotZGVwcz1zcGhpbngKLSAgICAgUHlZQU1MCi0KLWNvbW1hbmRzPQotICAgIG1ha2UgY2xlYW4K
LSAgICBtYWtlIGh0bWwKLQotW3Rlc3RlbnY6ZG9jdGVzdGluZ10KLWJhc2VweXRob24gPSBweXRo
b24zLjQKLWNoYW5nZWRpcj1kb2MvZW4KLWRlcHM9UHlZQU1MCi1jb21tYW5kcz0gcHkudGVzdCAt
cmZzeFgge3Bvc2FyZ3N9Ci0KLVt0ZXN0ZW52OnJlZ2VuXQotY2hhbmdlZGlyPWRvYy9lbgotYmFz
ZXB5dGhvbiA9IHB5dGhvbjMuNAotZGVwcz1zcGhpbngKLSAgICAgUHlZQU1MCi0gICAgIHJlZ2Vu
ZG9jPj0wLjYuMQotd2hpdGVsaXN0X2V4dGVybmFscz0KLSAgICBybQotICAgIG1ha2UKLWNvbW1h
bmRzPQotICAgIHJtIC1yZiAvdG1wL2RvYy1leGVjKgotICAgIG1ha2UgcmVnZW4KLQotW3Rlc3Rl
bnY6anl0aG9uXQotY2hhbmdlZGlyPXRlc3RpbmcKLWNvbW1hbmRzPQotICAgIHtlbnZweXRob259
IHtlbnZiaW5kaXJ9L3B5LnRlc3Qtanl0aG9uIC1yZnN4WCB7cG9zYXJnc30KLQotW3Rlc3RlbnY6
cHkyNy1jeGZyZWV6ZV0KLWNoYW5nZWRpcj10ZXN0aW5nL2N4X2ZyZWV6ZQotcGxhdGZvcm09bGlu
dXh8ZGFyd2luCi1jb21tYW5kcz0KLSAgICB7ZW52cHl0aG9ufSBpbnN0YWxsX2N4X2ZyZWV6ZS5w
eQotICAgIHtlbnZweXRob259IHJ1bnRlc3RzX3NldHVwLnB5IGJ1aWxkIC0tYnVpbGQtZXhlIGJ1
aWxkCi0gICAge2VudnB5dGhvbn0gdG94X3J1bi5weQotCi0KLVt0ZXN0ZW52OmNvdmVyYWxsc10K
LXBhc3NlbnYgPSBUUkFWSVMgVFJBVklTX0pPQl9JRCBUUkFWSVNfQlJBTkNIIENPVkVSQUxMU19S
RVBPX1RPS0VOCi11c2VkZXZlbG9wPVRydWUKLWJhc2VweXRob249cHl0aG9uMy40Ci1jaGFuZ2Vk
aXI9LgotZGVwcyA9Ci0gICAge1t0ZXN0ZW52XWRlcHN9Ci0gICAgY292ZXJhbGxzCi1jb21tYW5k
cz0KLSAgICBjb3ZlcmFnZSBydW4gLS1zb3VyY2U9X3B5dGVzdCAtbSBweXRlc3QgdGVzdGluZwot
ICAgIGNvdmVyYWdlIHJlcG9ydCAtbQotICAgIGNvdmVyYWxscwotCi1bcHl0ZXN0XQotbWludmVy
c2lvbj0yLjAKLXBsdWdpbnM9cHl0ZXN0ZXIKLSMtLXB5YXJncyAtLWRvY3Rlc3QtbW9kdWxlcyAt
LWlnbm9yZT0udG94Ci1hZGRvcHRzPSAtcnhzWCAtcCBweXRlc3RlciAtLWlnbm9yZT10ZXN0aW5n
L2N4X2ZyZWV6ZQotcnN5bmNkaXJzPXRveC5pbmkgcHl0ZXN0LnB5IF9weXRlc3QgdGVzdGluZwot
cHl0aG9uX2ZpbGVzPXRlc3RfKi5weSAqX3Rlc3QucHkgdGVzdGluZy8qLyoucHkKLXB5dGhvbl9j
bGFzc2VzPVRlc3QgQWNjZXB0YW5jZQotcHl0aG9uX2Z1bmN0aW9ucz10ZXN0Ci1ub3JlY3Vyc2Vk
aXJzID0gLnRveCBqYSAuaGcgY3hfZnJlZXplX3NvdXJjZQotCi0KLVtmbGFrZThdCi1pZ25vcmUg
PUU0MDEsRTIyNSxFMjYxLEUxMjgsRTEyNCxFMzAxLEUzMDIsRTEyMSxFMzAzLFczOTEsRTUwMSxF
MjMxLEUxMjYsRTcwMSxFMjY1LEUyNDEsRTI1MSxFMjI2LEUxMDEsVzE5MSxFMTMxLEUyMDMsRTEy
MixFMTIzLEUyNzEsRTcxMixFMjIyLEUxMjcsRTEyNSxFMjIxLFcyOTIsRTExMSxFMTEzLEUyOTMs
RTI2MixXMjkzLEUxMjksRTcwMixFMjAxLEUyNzIsRTIwMixFNzA0LEU3MzEsRTQwMgo=
</data>
<flag name="review"
          id="347285"
          type_id="1"
          status="+"
          setter="bburg"
    />
          </attachment>
      

    </bug>

</bugzilla>