<?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>191994</bug_id>
          
          <creation_ts>2018-11-26 19:41:28 -0800</creation_ts>
          <short_desc>[ews-app] Add BeautifulSoup</short_desc>
          <delta_ts>2018-11-28 13:52:23 -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>Tools / Tests</component>
          <version>Other</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="Aakash Jain">aakash_jain</reporter>
          <assigned_to name="Aakash Jain">aakash_jain</assigned_to>
          <cc>aakash_jain</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>lforschler</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1481814</commentid>
    <comment_count>0</comment_count>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2018-11-26 19:41:28 -0800</bug_when>
    <thetext>We need BeautifulSoup to parse the review page http://bugs.webkit.org/request.cgi?action=queue&amp;type=review&amp;group=type  (in https://bugs.webkit.org/show_bug.cgi?id=191942).

We should add BeautifulSoup. It can be copied from Tools/Scripts/webkitpy/thirdparty/BeautifulSoup.py</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1481815</commentid>
    <comment_count>1</comment_count>
      <attachid>355705</attachid>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2018-11-26 19:52:14 -0800</bug_when>
    <thetext>Created attachment 355705
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1481817</commentid>
    <comment_count>2</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-11-26 19:54:31 -0800</bug_when>
    <thetext>Attachment 355705 did not pass style-queue:


ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:93:  indentation is not a multiple of four  [pep8/E111] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:95:  indentation is not a multiple of four  [pep8/E111] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:107:  expected 2 blank lines, found 1  [pep8/E302] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:113:  expected 2 blank lines, found 1  [pep8/E302] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:194:  multiple spaces after operator  [pep8/E222] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:214:  missing whitespace around operator  [pep8/E225] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:231:  at least two spaces before inline comment  [pep8/E261] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:276:  at least two spaces before inline comment  [pep8/E261] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:289:  at least two spaces before inline comment  [pep8/E261] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:303:  at least two spaces before inline comment  [pep8/E261] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:322:  at least two spaces before inline comment  [pep8/E261] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:419:  multiple spaces before operator  [pep8/E221] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:424:  expected 2 blank lines, found 1  [pep8/E302] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:448:  deprecated form of raising exception  [pep8/W602] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:459:  expected 2 blank lines, found 1  [pep8/E302] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:464:  expected 2 blank lines, found 1  [pep8/E302] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:471:  expected 2 blank lines, found 1  [pep8/E302] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:475:  expected 2 blank lines, found 1  [pep8/E302] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:479:  expected 2 blank lines, found 1  [pep8/E302] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:486:  missing whitespace after &apos;,&apos;  [pep8/E231] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:490:  whitespace after &apos;{&apos;  [pep8/E201] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:596:  .has_key() is deprecated, use &apos;in&apos;  [pep8/W601] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:640:  .has_key() is deprecated, use &apos;in&apos;  [pep8/W601] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:651:  missing whitespace around operator  [pep8/E225] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:655:  deprecated form of raising exception  [pep8/W602] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:752:  missing whitespace around operator  [pep8/E225] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:802:  missing whitespace around operator  [pep8/E225] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:813:  missing whitespace around operator  [pep8/E225] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:930:  indentation is not a multiple of four  [pep8/E111] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:932:  indentation is not a multiple of four  [pep8/E111] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:934:  missing whitespace after &apos;,&apos;  [pep8/E231] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:970:  deprecated form of raising exception  [pep8/W602] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:992:  at least two spaces before inline comment  [pep8/E261] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:995:  .has_key() is deprecated, use &apos;in&apos;  [pep8/W601] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:1006:  expected 2 blank lines, found 1  [pep8/E302] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:1015:  expected 2 blank lines, found 1  [pep8/E302] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:1023:  missing whitespace after &apos;,&apos;  [pep8/E231] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:1025:  at least two spaces before inline comment  [pep8/E261] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:1036:  expected 2 blank lines, found 1  [pep8/E302] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:1063:  whitespace before &apos;]&apos;  [pep8/E202] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:1078:  whitespace after &apos;{&apos;  [pep8/E201] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:1155:  whitespace before &apos;:&apos;  [pep8/E203] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:1155:  at least two spaces before inline comment  [pep8/E261] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:1166:  whitespace before &apos;(&apos;  [pep8/E211] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:1208:  .has_key() is deprecated, use &apos;in&apos;  [pep8/W601] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:1259:  too many blank lines (2)  [pep8/E303] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:1270:  missing whitespace around operator  [pep8/E225] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:1272:  missing whitespace around operator  [pep8/E225] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:1301:  .has_key() is deprecated, use &apos;in&apos;  [pep8/W601] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:1304:  missing whitespace around operator  [pep8/E225] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:1314:  .has_key() is deprecated, use &apos;in&apos;  [pep8/W601] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:1451:  missing whitespace around operator  [pep8/E225] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:1452:  indentation is not a multiple of four  [pep8/E111] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:1453:  indentation is not a multiple of four  [pep8/E111] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:1454:  indentation is not a multiple of four  [pep8/E111] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:1455:  indentation is not a multiple of four  [pep8/E111] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:1455:  missing whitespace around operator  [pep8/E225] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:1456:  indentation is not a multiple of four  [pep8/E111] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:1456:  missing whitespace around operator  [pep8/E225] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:1457:  indentation is not a multiple of four  [pep8/E111] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:1467:  expected 2 blank lines, found 1  [pep8/E302] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:1516:  .has_key() is deprecated, use &apos;in&apos;  [pep8/W601] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:1522:  whitespace before &apos;,&apos;  [pep8/E203] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:1527:  whitespace before &apos;:&apos;  [pep8/E203] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:1541:  whitespace after &apos;{&apos;  [pep8/E201] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:1549:  whitespace before &apos;:&apos;  [pep8/E203] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:1591:  at least two spaces before inline comment  [pep8/E261] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:1601:  expected 1 blank line, found 0  [pep8/E301] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:1620:  expected 2 blank lines, found 1  [pep8/E302] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:1623:  expected 2 blank lines, found 1  [pep8/E302] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:1659:  expected 2 blank lines, found 1  [pep8/E302] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:1672:  expected 2 blank lines, found 1  [pep8/E302] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:1699:  .has_key() is deprecated, use &apos;in&apos;  [pep8/W601] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:1711:  expected 2 blank lines, found 1  [pep8/E302] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:1713:  expected 2 blank lines, found 0  [pep8/E302] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:1715:  expected 2 blank lines, found 0  [pep8/E302] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:1717:  expected 2 blank lines, found 0  [pep8/E302] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:1719:  expected 2 blank lines, found 0  [pep8/E302] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:1753:  expected 2 blank lines, found 1  [pep8/E302] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:1763:  whitespace after &apos;{&apos;  [pep8/E201] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:1781:  multiple statements on one line (colon)  [pep8/E701] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:1785:  multiple statements on one line (colon)  [pep8/E701] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:1795:  multiple statements on one line (colon)  [pep8/E701] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:1798:  multiple statements on one line (colon)  [pep8/E701] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:1823:  whitespace before &apos;(&apos;  [pep8/E211] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:1932:  too many blank lines (2)  [pep8/E303] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:1939:  multiple statements on one line (colon)  [pep8/E701] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:1949:  expected 1 blank line, found 0  [pep8/E301] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:1952:  missing whitespace after &apos;,&apos;  [pep8/E231] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:1974:  whitespace after &apos;{&apos;  [pep8/E201] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:2005:  missing whitespace after &apos;,&apos;  [pep8/E231] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:148:  [PageElement.replaceWithChildren] Instance of &apos;PageElement&apos; has no &apos;contents&apos; member  [pylint/E1101] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:185:  [PageElement._lastRecursiveChild] Instance of &apos;PageElement&apos; has no &apos;contents&apos; member  [pylint/E1101] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:186:  [PageElement._lastRecursiveChild] Instance of &apos;PageElement&apos; has no &apos;contents&apos; member  [pylint/E1101] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:194:  [PageElement.insert] Instance of &apos;PageElement&apos; has no &apos;contents&apos; member  [pylint/E1101] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:199:  [PageElement.insert] Instance of &apos;PageElement&apos; has no &apos;index&apos; member  [pylint/E1101] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:214:  [PageElement.insert] Instance of &apos;PageElement&apos; has no &apos;contents&apos; member  [pylint/E1101] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:223:  [PageElement.insert] Instance of &apos;PageElement&apos; has no &apos;contents&apos; member  [pylint/E1101] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:238:  [PageElement.insert] Instance of &apos;PageElement&apos; has no &apos;contents&apos; member  [pylint/E1101] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:246:  [PageElement.insert] Instance of &apos;PageElement&apos; has no &apos;contents&apos; member  [pylint/E1101] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:250:  [PageElement.append] Instance of &apos;PageElement&apos; has no &apos;contents&apos; member  [pylint/E1101] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:483:  [Tag._invert] Method should have &quot;self&quot; as first argument  [pylint/E0213] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:995:  [SoupStrainer._matches] Instance of &apos;unicode&apos; has no &apos;has_key&apos; member (but some types could not be inferred)  [pylint/E1103] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:1140:  [BeautifulStoneSoup.__init__] Instance of &apos;str&apos; has no &apos;read&apos; member (but some types could not be inferred)  [pylint/E1103] [5]
ERROR: Tools/BuildSlaveSupport/ews-app/ews/thirdparty/BeautifulSoup.py:1199:  [BeautifulStoneSoup.__getattr__] Class &apos;SGMLParser&apos; has no &apos;__getattr__&apos; member  [pylint/E1101] [5]
Total errors found: 105 in 2 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1482633</commentid>
    <comment_count>3</comment_count>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2018-11-28 13:51:06 -0800</bug_when>
    <thetext>Committed r238634: &lt;http://trac.webkit.org/changeset/238634&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1482634</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-11-28 13:52:23 -0800</bug_when>
    <thetext>&lt;rdar://problem/46320561&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>355705</attachid>
            <date>2018-11-26 19:52:14 -0800</date>
            <delta_ts>2018-11-28 11:43:37 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>0001-ews-app-Add-BeautifulSoup.patch</filename>
            <type>text/plain</type>
            <size>83475</size>
            <attacher name="Aakash Jain">aakash_jain</attacher>
            
              <data encoding="base64">RnJvbSBhMDc0YWVhNzQ5YTM4NTc2Njk4ODI3ZTllZjI1NGRmYmJiYzQ2NDYzIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBYWthc2ggSmFpbiA8YWFrYXNoX2phaW5AYXBwbGUuY29tPgpE
YXRlOiBNb24sIDI2IE5vdiAyMDE4IDE5OjQ5OjMwIC0wODAwClN1YmplY3Q6IFtQQVRDSF0gW2V3
cy1hcHBdIEFkZCBCZWF1dGlmdWxTb3VwCiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTkxOTk0CgpSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCiogQnVpbGRTbGF2
ZVN1cHBvcnQvZXdzLWFwcC9ld3MvdGhpcmRwYXJ0eS9CZWF1dGlmdWxTb3VwLnB5OiBDb3BpZWQg
ZnJvbSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvQmVhdXRpZnVsU291cC5weQoq
IEJ1aWxkU2xhdmVTdXBwb3J0L2V3cy1hcHAvZXdzL3RoaXJkcGFydHkvX19pbml0X18ucHk6IEFk
ZGVkLgotLS0KIC4uLi9ld3MtYXBwL2V3cy90aGlyZHBhcnR5L0JlYXV0aWZ1bFNvdXAucHkgICB8
IDIwMTQgKysrKysrKysrKysrKysrKysKIC4uLi9ld3MtYXBwL2V3cy90aGlyZHBhcnR5L19faW5p
dF9fLnB5ICAgICAgICB8ICAgIDAKIFRvb2xzL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8ICAgMTAgKwogMyBmaWxlcyBjaGFuZ2VkLCAyMDI0IGluc2VydGlvbnMoKykK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBUb29scy9CdWlsZFNsYXZlU3VwcG9ydC9ld3MtYXBwL2V3cy90
aGlyZHBhcnR5L0JlYXV0aWZ1bFNvdXAucHkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBUb29scy9CdWls
ZFNsYXZlU3VwcG9ydC9ld3MtYXBwL2V3cy90aGlyZHBhcnR5L19faW5pdF9fLnB5CgpkaWZmIC0t
Z2l0IGEvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvZXdzLWFwcC9ld3MvdGhpcmRwYXJ0eS9CZWF1
dGlmdWxTb3VwLnB5IGIvVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvZXdzLWFwcC9ld3MvdGhpcmRw
YXJ0eS9CZWF1dGlmdWxTb3VwLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwLi40YjE3Yjg1M2QwYwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL0J1aWxkU2xhdmVTdXBw
b3J0L2V3cy1hcHAvZXdzL3RoaXJkcGFydHkvQmVhdXRpZnVsU291cC5weQpAQCAtMCwwICsxLDIw
MTQgQEAKKyIiIkJlYXV0aWZ1bCBTb3VwCitFbGl4aXIgYW5kIFRvbmljCisiVGhlIFNjcmVlbi1T
Y3JhcGVyJ3MgRnJpZW5kIgoraHR0cDovL3d3dy5jcnVtbXkuY29tL3NvZnR3YXJlL0JlYXV0aWZ1
bFNvdXAvCisKK0JlYXV0aWZ1bCBTb3VwIHBhcnNlcyBhIChwb3NzaWJseSBpbnZhbGlkKSBYTUwg
b3IgSFRNTCBkb2N1bWVudCBpbnRvIGEKK3RyZWUgcmVwcmVzZW50YXRpb24uIEl0IHByb3ZpZGVz
IG1ldGhvZHMgYW5kIFB5dGhvbmljIGlkaW9tcyB0aGF0IG1ha2UKK2l0IGVhc3kgdG8gbmF2aWdh
dGUsIHNlYXJjaCwgYW5kIG1vZGlmeSB0aGUgdHJlZS4KKworQSB3ZWxsLWZvcm1lZCBYTUwvSFRN
TCBkb2N1bWVudCB5aWVsZHMgYSB3ZWxsLWZvcm1lZCBkYXRhCitzdHJ1Y3R1cmUuIEFuIGlsbC1m
b3JtZWQgWE1ML0hUTUwgZG9jdW1lbnQgeWllbGRzIGEgY29ycmVzcG9uZGluZ2x5CitpbGwtZm9y
bWVkIGRhdGEgc3RydWN0dXJlLiBJZiB5b3VyIGRvY3VtZW50IGlzIG9ubHkgbG9jYWxseQord2Vs
bC1mb3JtZWQsIHlvdSBjYW4gdXNlIHRoaXMgbGlicmFyeSB0byBmaW5kIGFuZCBwcm9jZXNzIHRo
ZQord2VsbC1mb3JtZWQgcGFydCBvZiBpdC4KKworQmVhdXRpZnVsIFNvdXAgd29ya3Mgd2l0aCBQ
eXRob24gMi4yIGFuZCB1cC4gSXQgaGFzIG5vIGV4dGVybmFsCitkZXBlbmRlbmNpZXMsIGJ1dCB5
b3UnbGwgaGF2ZSBtb3JlIHN1Y2Nlc3MgYXQgY29udmVydGluZyBkYXRhIHRvIFVURi04CitpZiB5
b3UgYWxzbyBpbnN0YWxsIHRoZXNlIHRocmVlIHBhY2thZ2VzOgorCisqIGNoYXJkZXQsIGZvciBh
dXRvLWRldGVjdGluZyBjaGFyYWN0ZXIgZW5jb2RpbmdzCisgIGh0dHA6Ly9jaGFyZGV0LmZlZWRw
YXJzZXIub3JnLworKiBjamtjb2RlY3MgYW5kIGljb252X2NvZGVjLCB3aGljaCBhZGQgbW9yZSBl
bmNvZGluZ3MgdG8gdGhlIG9uZXMgc3VwcG9ydGVkCisgIGJ5IHN0b2NrIFB5dGhvbi4KKyAgaHR0
cDovL2Nqa3B5dGhvbi5pMThuLm9yZy8KKworQmVhdXRpZnVsIFNvdXAgZGVmaW5lcyBjbGFzc2Vz
IGZvciB0d28gbWFpbiBwYXJzaW5nIHN0cmF0ZWdpZXM6CisKKyAqIEJlYXV0aWZ1bFN0b25lU291
cCwgZm9yIHBhcnNpbmcgWE1MLCBTR01MLCBvciB5b3VyIGRvbWFpbi1zcGVjaWZpYworICAgbGFu
Z3VhZ2UgdGhhdCBraW5kIG9mIGxvb2tzIGxpa2UgWE1MLgorCisgKiBCZWF1dGlmdWxTb3VwLCBm
b3IgcGFyc2luZyBydW4tb2YtdGhlLW1pbGwgSFRNTCBjb2RlLCBiZSBpdCB2YWxpZAorICAgb3Ig
aW52YWxpZC4gVGhpcyBjbGFzcyBoYXMgd2ViIGJyb3dzZXItbGlrZSBoZXVyaXN0aWNzIGZvcgor
ICAgb2J0YWluaW5nIGEgc2Vuc2libGUgcGFyc2UgdHJlZSBpbiB0aGUgZmFjZSBvZiBjb21tb24g
SFRNTCBlcnJvcnMuCisKK0JlYXV0aWZ1bCBTb3VwIGFsc28gZGVmaW5lcyBhIGNsYXNzIChVbmlj
b2RlRGFtbWl0KSBmb3IgYXV0b2RldGVjdGluZwordGhlIGVuY29kaW5nIG9mIGFuIEhUTUwgb3Ig
WE1MIGRvY3VtZW50LCBhbmQgY29udmVydGluZyBpdCB0bworVW5pY29kZS4gTXVjaCBvZiB0aGlz
IGNvZGUgaXMgdGFrZW4gZnJvbSBNYXJrIFBpbGdyaW0ncyBVbml2ZXJzYWwgRmVlZCBQYXJzZXIu
CisKK0ZvciBtb3JlIHRoYW4geW91IGV2ZXIgd2FudGVkIHRvIGtub3cgYWJvdXQgQmVhdXRpZnVs
IFNvdXAsIHNlZSB0aGUKK2RvY3VtZW50YXRpb246CitodHRwOi8vd3d3LmNydW1teS5jb20vc29m
dHdhcmUvQmVhdXRpZnVsU291cC9kb2N1bWVudGF0aW9uLmh0bWwKKworSGVyZSwgaGF2ZSBzb21l
IGxlZ2FsZXNlOgorCitDb3B5cmlnaHQgKGMpIDIwMDQtMjAxMCwgTGVvbmFyZCBSaWNoYXJkc29u
CisKK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorbWV0
OgorCisgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKyAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgICAgY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAgICBkaXNjbGFpbWVyIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAgICB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSB0aGUg
QmVhdXRpZnVsIFNvdXAgQ29uc29ydGl1bSBhbmQgQWxsCisgICAgTmlnaHQgS29zaGVyIEJha2Vy
eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlCisgICAgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAg
ICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKK0xJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IKK0NPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCitQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCitMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORwor
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTCitTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRSwgREFNTUlULgorCisiIiIKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgZ2Vu
ZXJhdG9ycworCitfX2F1dGhvcl9fID0gIkxlb25hcmQgUmljaGFyZHNvbiAobGVvbmFyZHJAc2Vn
ZmF1bHQub3JnKSIKK19fdmVyc2lvbl9fID0gIjMuMi4wIgorX19jb3B5cmlnaHRfXyA9ICJDb3B5
cmlnaHQgKGMpIDIwMDQtMjAxMCBMZW9uYXJkIFJpY2hhcmRzb24iCitfX2xpY2Vuc2VfXyA9ICJO
ZXctc3R5bGUgQlNEIgorCitmcm9tIHNnbWxsaWIgaW1wb3J0IFNHTUxQYXJzZXIsIFNHTUxQYXJz
ZUVycm9yCitpbXBvcnQgY29kZWNzCitpbXBvcnQgbWFya3VwYmFzZQoraW1wb3J0IHR5cGVzCitp
bXBvcnQgcmUKK2ltcG9ydCBzZ21sbGliCit0cnk6CisgIGZyb20gaHRtbGVudGl0eWRlZnMgaW1w
b3J0IG5hbWUyY29kZXBvaW50CitleGNlcHQgSW1wb3J0RXJyb3I6CisgIG5hbWUyY29kZXBvaW50
ID0ge30KK3RyeToKKyAgICBzZXQKK2V4Y2VwdCBOYW1lRXJyb3I6CisgICAgZnJvbSBzZXRzIGlt
cG9ydCBTZXQgYXMgc2V0CisKKyNUaGVzZSBoYWNrcyBtYWtlIEJlYXV0aWZ1bCBTb3VwIGFibGUg
dG8gcGFyc2UgWE1MIHdpdGggbmFtZXNwYWNlcworc2dtbGxpYi50YWdmaW5kID0gcmUuY29tcGls
ZSgnW2EtekEtWl1bLV8uOmEtekEtWjAtOV0qJykKK21hcmt1cGJhc2UuX2RlY2xuYW1lX21hdGNo
ID0gcmUuY29tcGlsZShyJ1thLXpBLVpdWy1fLjphLXpBLVowLTldKlxzKicpLm1hdGNoCisKK0RF
RkFVTFRfT1VUUFVUX0VOQ09ESU5HID0gInV0Zi04IgorCitkZWYgX21hdGNoX2Nzc19jbGFzcyhz
dHIpOgorICAgICIiIkJ1aWxkIGEgUkUgdG8gbWF0Y2ggdGhlIGdpdmVuIENTUyBjbGFzcy4iIiIK
KyAgICByZXR1cm4gcmUuY29tcGlsZShyIihefC4qXHMpJXMoJHxccykiICUgc3RyKQorCisjIEZp
cnN0LCB0aGUgY2xhc3NlcyB0aGF0IHJlcHJlc2VudCBtYXJrdXAgZWxlbWVudHMuCisKK2NsYXNz
IFBhZ2VFbGVtZW50KG9iamVjdCk6CisgICAgIiIiQ29udGFpbnMgdGhlIG5hdmlnYXRpb25hbCBp
bmZvcm1hdGlvbiBmb3Igc29tZSBwYXJ0IG9mIHRoZSBwYWdlCisgICAgKGVpdGhlciBhIHRhZyBv
ciBhIHBpZWNlIG9mIHRleHQpIiIiCisKKyAgICBkZWYgc2V0dXAoc2VsZiwgcGFyZW50PU5vbmUs
IHByZXZpb3VzPU5vbmUpOgorICAgICAgICAiIiJTZXRzIHVwIHRoZSBpbml0aWFsIHJlbGF0aW9u
cyBiZXR3ZWVuIHRoaXMgZWxlbWVudCBhbmQKKyAgICAgICAgb3RoZXIgZWxlbWVudHMuIiIiCisg
ICAgICAgIHNlbGYucGFyZW50ID0gcGFyZW50CisgICAgICAgIHNlbGYucHJldmlvdXMgPSBwcmV2
aW91cworICAgICAgICBzZWxmLm5leHQgPSBOb25lCisgICAgICAgIHNlbGYucHJldmlvdXNTaWJs
aW5nID0gTm9uZQorICAgICAgICBzZWxmLm5leHRTaWJsaW5nID0gTm9uZQorICAgICAgICBpZiBz
ZWxmLnBhcmVudCBhbmQgc2VsZi5wYXJlbnQuY29udGVudHM6CisgICAgICAgICAgICBzZWxmLnBy
ZXZpb3VzU2libGluZyA9IHNlbGYucGFyZW50LmNvbnRlbnRzWy0xXQorICAgICAgICAgICAgc2Vs
Zi5wcmV2aW91c1NpYmxpbmcubmV4dFNpYmxpbmcgPSBzZWxmCisKKyAgICBkZWYgcmVwbGFjZVdp
dGgoc2VsZiwgcmVwbGFjZVdpdGgpOgorICAgICAgICBvbGRQYXJlbnQgPSBzZWxmLnBhcmVudAor
ICAgICAgICBteUluZGV4ID0gc2VsZi5wYXJlbnQuaW5kZXgoc2VsZikKKyAgICAgICAgaWYgaGFz
YXR0cihyZXBsYWNlV2l0aCwgInBhcmVudCIpXAorICAgICAgICAgICAgICAgICAgYW5kIHJlcGxh
Y2VXaXRoLnBhcmVudCBpcyBzZWxmLnBhcmVudDoKKyAgICAgICAgICAgICMgV2UncmUgcmVwbGFj
aW5nIHRoaXMgZWxlbWVudCB3aXRoIG9uZSBvZiBpdHMgc2libGluZ3MuCisgICAgICAgICAgICBp
bmRleCA9IHJlcGxhY2VXaXRoLnBhcmVudC5pbmRleChyZXBsYWNlV2l0aCkKKyAgICAgICAgICAg
IGlmIGluZGV4IGFuZCBpbmRleCA8IG15SW5kZXg6CisgICAgICAgICAgICAgICAgIyBGdXJ0aGVy
bW9yZSwgaXQgY29tZXMgYmVmb3JlIHRoaXMgZWxlbWVudC4gVGhhdAorICAgICAgICAgICAgICAg
ICMgbWVhbnMgdGhhdCB3aGVuIHdlIGV4dHJhY3QgaXQsIHRoZSBpbmRleCBvZiB0aGlzCisgICAg
ICAgICAgICAgICAgIyBlbGVtZW50IHdpbGwgY2hhbmdlLgorICAgICAgICAgICAgICAgIG15SW5k
ZXggPSBteUluZGV4IC0gMQorICAgICAgICBzZWxmLmV4dHJhY3QoKQorICAgICAgICBvbGRQYXJl
bnQuaW5zZXJ0KG15SW5kZXgsIHJlcGxhY2VXaXRoKQorCisgICAgZGVmIHJlcGxhY2VXaXRoQ2hp
bGRyZW4oc2VsZik6CisgICAgICAgIG15UGFyZW50ID0gc2VsZi5wYXJlbnQKKyAgICAgICAgbXlJ
bmRleCA9IHNlbGYucGFyZW50LmluZGV4KHNlbGYpCisgICAgICAgIHNlbGYuZXh0cmFjdCgpCisg
ICAgICAgIHJldmVyc2VkQ2hpbGRyZW4gPSBsaXN0KHNlbGYuY29udGVudHMpCisgICAgICAgIHJl
dmVyc2VkQ2hpbGRyZW4ucmV2ZXJzZSgpCisgICAgICAgIGZvciBjaGlsZCBpbiByZXZlcnNlZENo
aWxkcmVuOgorICAgICAgICAgICAgbXlQYXJlbnQuaW5zZXJ0KG15SW5kZXgsIGNoaWxkKQorCisg
ICAgZGVmIGV4dHJhY3Qoc2VsZik6CisgICAgICAgICIiIkRlc3RydWN0aXZlbHkgcmlwcyB0aGlz
IGVsZW1lbnQgb3V0IG9mIHRoZSB0cmVlLiIiIgorICAgICAgICBpZiBzZWxmLnBhcmVudDoKKyAg
ICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBkZWwgc2VsZi5wYXJlbnQuY29udGVudHNb
c2VsZi5wYXJlbnQuaW5kZXgoc2VsZildCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoK
KyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgI0ZpbmQgdGhlIHR3byBlbGVtZW50cyB0
aGF0IHdvdWxkIGJlIG5leHQgdG8gZWFjaCBvdGhlciBpZgorICAgICAgICAjdGhpcyBlbGVtZW50
IChhbmQgYW55IGNoaWxkcmVuKSBoYWRuJ3QgYmVlbiBwYXJzZWQuIENvbm5lY3QKKyAgICAgICAg
I3RoZSB0d28uCisgICAgICAgIGxhc3RDaGlsZCA9IHNlbGYuX2xhc3RSZWN1cnNpdmVDaGlsZCgp
CisgICAgICAgIG5leHRFbGVtZW50ID0gbGFzdENoaWxkLm5leHQKKworICAgICAgICBpZiBzZWxm
LnByZXZpb3VzOgorICAgICAgICAgICAgc2VsZi5wcmV2aW91cy5uZXh0ID0gbmV4dEVsZW1lbnQK
KyAgICAgICAgaWYgbmV4dEVsZW1lbnQ6CisgICAgICAgICAgICBuZXh0RWxlbWVudC5wcmV2aW91
cyA9IHNlbGYucHJldmlvdXMKKyAgICAgICAgc2VsZi5wcmV2aW91cyA9IE5vbmUKKyAgICAgICAg
bGFzdENoaWxkLm5leHQgPSBOb25lCisKKyAgICAgICAgc2VsZi5wYXJlbnQgPSBOb25lCisgICAg
ICAgIGlmIHNlbGYucHJldmlvdXNTaWJsaW5nOgorICAgICAgICAgICAgc2VsZi5wcmV2aW91c1Np
YmxpbmcubmV4dFNpYmxpbmcgPSBzZWxmLm5leHRTaWJsaW5nCisgICAgICAgIGlmIHNlbGYubmV4
dFNpYmxpbmc6CisgICAgICAgICAgICBzZWxmLm5leHRTaWJsaW5nLnByZXZpb3VzU2libGluZyA9
IHNlbGYucHJldmlvdXNTaWJsaW5nCisgICAgICAgIHNlbGYucHJldmlvdXNTaWJsaW5nID0gc2Vs
Zi5uZXh0U2libGluZyA9IE5vbmUKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfbGFz
dFJlY3Vyc2l2ZUNoaWxkKHNlbGYpOgorICAgICAgICAiRmluZHMgdGhlIGxhc3QgZWxlbWVudCBi
ZW5lYXRoIHRoaXMgb2JqZWN0IHRvIGJlIHBhcnNlZC4iCisgICAgICAgIGxhc3RDaGlsZCA9IHNl
bGYKKyAgICAgICAgd2hpbGUgaGFzYXR0cihsYXN0Q2hpbGQsICdjb250ZW50cycpIGFuZCBsYXN0
Q2hpbGQuY29udGVudHM6CisgICAgICAgICAgICBsYXN0Q2hpbGQgPSBsYXN0Q2hpbGQuY29udGVu
dHNbLTFdCisgICAgICAgIHJldHVybiBsYXN0Q2hpbGQKKworICAgIGRlZiBpbnNlcnQoc2VsZiwg
cG9zaXRpb24sIG5ld0NoaWxkKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShuZXdDaGlsZCwgYmFz
ZXN0cmluZykgXAorICAgICAgICAgICAgYW5kIG5vdCBpc2luc3RhbmNlKG5ld0NoaWxkLCBOYXZp
Z2FibGVTdHJpbmcpOgorICAgICAgICAgICAgbmV3Q2hpbGQgPSBOYXZpZ2FibGVTdHJpbmcobmV3
Q2hpbGQpCisKKyAgICAgICAgcG9zaXRpb24gPSAgbWluKHBvc2l0aW9uLCBsZW4oc2VsZi5jb250
ZW50cykpCisgICAgICAgIGlmIGhhc2F0dHIobmV3Q2hpbGQsICdwYXJlbnQnKSBhbmQgbmV3Q2hp
bGQucGFyZW50IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgIyBXZSdyZSAnaW5zZXJ0aW5nJyBh
biBlbGVtZW50IHRoYXQncyBhbHJlYWR5IG9uZQorICAgICAgICAgICAgIyBvZiB0aGlzIG9iamVj
dCdzIGNoaWxkcmVuLgorICAgICAgICAgICAgaWYgbmV3Q2hpbGQucGFyZW50IGlzIHNlbGY6Cisg
ICAgICAgICAgICAgICAgaW5kZXggPSBzZWxmLmluZGV4KG5ld0NoaWxkKQorICAgICAgICAgICAg
ICAgIGlmIGluZGV4ID4gcG9zaXRpb246CisgICAgICAgICAgICAgICAgICAgICMgRnVydGhlcm1v
cmUgd2UncmUgbW92aW5nIGl0IGZ1cnRoZXIgZG93biB0aGUKKyAgICAgICAgICAgICAgICAgICAg
IyBsaXN0IG9mIHRoaXMgb2JqZWN0J3MgY2hpbGRyZW4uIFRoYXQgbWVhbnMgdGhhdAorICAgICAg
ICAgICAgICAgICAgICAjIHdoZW4gd2UgZXh0cmFjdCB0aGlzIGVsZW1lbnQsIG91ciB0YXJnZXQg
aW5kZXgKKyAgICAgICAgICAgICAgICAgICAgIyB3aWxsIGp1bXAgZG93biBvbmUuCisgICAgICAg
ICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb24gLSAxCisgICAgICAgICAgICBuZXdDaGls
ZC5leHRyYWN0KCkKKworICAgICAgICBuZXdDaGlsZC5wYXJlbnQgPSBzZWxmCisgICAgICAgIHBy
ZXZpb3VzQ2hpbGQgPSBOb25lCisgICAgICAgIGlmIHBvc2l0aW9uID09IDA6CisgICAgICAgICAg
ICBuZXdDaGlsZC5wcmV2aW91c1NpYmxpbmcgPSBOb25lCisgICAgICAgICAgICBuZXdDaGlsZC5w
cmV2aW91cyA9IHNlbGYKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByZXZpb3VzQ2hpbGQg
PSBzZWxmLmNvbnRlbnRzW3Bvc2l0aW9uLTFdCisgICAgICAgICAgICBuZXdDaGlsZC5wcmV2aW91
c1NpYmxpbmcgPSBwcmV2aW91c0NoaWxkCisgICAgICAgICAgICBuZXdDaGlsZC5wcmV2aW91c1Np
YmxpbmcubmV4dFNpYmxpbmcgPSBuZXdDaGlsZAorICAgICAgICAgICAgbmV3Q2hpbGQucHJldmlv
dXMgPSBwcmV2aW91c0NoaWxkLl9sYXN0UmVjdXJzaXZlQ2hpbGQoKQorICAgICAgICBpZiBuZXdD
aGlsZC5wcmV2aW91czoKKyAgICAgICAgICAgIG5ld0NoaWxkLnByZXZpb3VzLm5leHQgPSBuZXdD
aGlsZAorCisgICAgICAgIG5ld0NoaWxkc0xhc3RFbGVtZW50ID0gbmV3Q2hpbGQuX2xhc3RSZWN1
cnNpdmVDaGlsZCgpCisKKyAgICAgICAgaWYgcG9zaXRpb24gPj0gbGVuKHNlbGYuY29udGVudHMp
OgorICAgICAgICAgICAgbmV3Q2hpbGQubmV4dFNpYmxpbmcgPSBOb25lCisKKyAgICAgICAgICAg
IHBhcmVudCA9IHNlbGYKKyAgICAgICAgICAgIHBhcmVudHNOZXh0U2libGluZyA9IE5vbmUKKyAg
ICAgICAgICAgIHdoaWxlIG5vdCBwYXJlbnRzTmV4dFNpYmxpbmc6CisgICAgICAgICAgICAgICAg
cGFyZW50c05leHRTaWJsaW5nID0gcGFyZW50Lm5leHRTaWJsaW5nCisgICAgICAgICAgICAgICAg
cGFyZW50ID0gcGFyZW50LnBhcmVudAorICAgICAgICAgICAgICAgIGlmIG5vdCBwYXJlbnQ6ICMg
VGhpcyBpcyB0aGUgbGFzdCBlbGVtZW50IGluIHRoZSBkb2N1bWVudC4KKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWsKKyAgICAgICAgICAgIGlmIHBhcmVudHNOZXh0U2libGluZzoKKyAgICAgICAg
ICAgICAgICBuZXdDaGlsZHNMYXN0RWxlbWVudC5uZXh0ID0gcGFyZW50c05leHRTaWJsaW5nCisg
ICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG5ld0NoaWxkc0xhc3RFbGVtZW50Lm5l
eHQgPSBOb25lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBuZXh0Q2hpbGQgPSBzZWxmLmNv
bnRlbnRzW3Bvc2l0aW9uXQorICAgICAgICAgICAgbmV3Q2hpbGQubmV4dFNpYmxpbmcgPSBuZXh0
Q2hpbGQKKyAgICAgICAgICAgIGlmIG5ld0NoaWxkLm5leHRTaWJsaW5nOgorICAgICAgICAgICAg
ICAgIG5ld0NoaWxkLm5leHRTaWJsaW5nLnByZXZpb3VzU2libGluZyA9IG5ld0NoaWxkCisgICAg
ICAgICAgICBuZXdDaGlsZHNMYXN0RWxlbWVudC5uZXh0ID0gbmV4dENoaWxkCisKKyAgICAgICAg
aWYgbmV3Q2hpbGRzTGFzdEVsZW1lbnQubmV4dDoKKyAgICAgICAgICAgIG5ld0NoaWxkc0xhc3RF
bGVtZW50Lm5leHQucHJldmlvdXMgPSBuZXdDaGlsZHNMYXN0RWxlbWVudAorICAgICAgICBzZWxm
LmNvbnRlbnRzLmluc2VydChwb3NpdGlvbiwgbmV3Q2hpbGQpCisKKyAgICBkZWYgYXBwZW5kKHNl
bGYsIHRhZyk6CisgICAgICAgICIiIkFwcGVuZHMgdGhlIGdpdmVuIHRhZyB0byB0aGUgY29udGVu
dHMgb2YgdGhpcyB0YWcuIiIiCisgICAgICAgIHNlbGYuaW5zZXJ0KGxlbihzZWxmLmNvbnRlbnRz
KSwgdGFnKQorCisgICAgZGVmIGZpbmROZXh0KHNlbGYsIG5hbWU9Tm9uZSwgYXR0cnM9e30sIHRl
eHQ9Tm9uZSwgKiprd2FyZ3MpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBmaXJzdCBpdGVtIHRo
YXQgbWF0Y2hlcyB0aGUgZ2l2ZW4gY3JpdGVyaWEgYW5kCisgICAgICAgIGFwcGVhcnMgYWZ0ZXIg
dGhpcyBUYWcgaW4gdGhlIGRvY3VtZW50LiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fZmluZE9u
ZShzZWxmLmZpbmRBbGxOZXh0LCBuYW1lLCBhdHRycywgdGV4dCwgKiprd2FyZ3MpCisKKyAgICBk
ZWYgZmluZEFsbE5leHQoc2VsZiwgbmFtZT1Ob25lLCBhdHRycz17fSwgdGV4dD1Ob25lLCBsaW1p
dD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAqKmt3YXJncyk6CisgICAgICAgICIiIlJldHVy
bnMgYWxsIGl0ZW1zIHRoYXQgbWF0Y2ggdGhlIGdpdmVuIGNyaXRlcmlhIGFuZCBhcHBlYXIKKyAg
ICAgICAgYWZ0ZXIgdGhpcyBUYWcgaW4gdGhlIGRvY3VtZW50LiIiIgorICAgICAgICByZXR1cm4g
c2VsZi5fZmluZEFsbChuYW1lLCBhdHRycywgdGV4dCwgbGltaXQsIHNlbGYubmV4dEdlbmVyYXRv
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiprd2FyZ3MpCisKKyAgICBkZWYgZmlu
ZE5leHRTaWJsaW5nKHNlbGYsIG5hbWU9Tm9uZSwgYXR0cnM9e30sIHRleHQ9Tm9uZSwgKiprd2Fy
Z3MpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBjbG9zZXN0IHNpYmxpbmcgdG8gdGhpcyBUYWcg
dGhhdCBtYXRjaGVzIHRoZQorICAgICAgICBnaXZlbiBjcml0ZXJpYSBhbmQgYXBwZWFycyBhZnRl
ciB0aGlzIFRhZyBpbiB0aGUgZG9jdW1lbnQuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9maW5k
T25lKHNlbGYuZmluZE5leHRTaWJsaW5ncywgbmFtZSwgYXR0cnMsIHRleHQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICoqa3dhcmdzKQorCisgICAgZGVmIGZpbmROZXh0U2libGluZ3Mo
c2VsZiwgbmFtZT1Ob25lLCBhdHRycz17fSwgdGV4dD1Ob25lLCBsaW1pdD1Ob25lLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICoqa3dhcmdzKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgc2li
bGluZ3Mgb2YgdGhpcyBUYWcgdGhhdCBtYXRjaCB0aGUgZ2l2ZW4KKyAgICAgICAgY3JpdGVyaWEg
YW5kIGFwcGVhciBhZnRlciB0aGlzIFRhZyBpbiB0aGUgZG9jdW1lbnQuIiIiCisgICAgICAgIHJl
dHVybiBzZWxmLl9maW5kQWxsKG5hbWUsIGF0dHJzLCB0ZXh0LCBsaW1pdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2VsZi5uZXh0U2libGluZ0dlbmVyYXRvciwgKiprd2FyZ3MpCisg
ICAgZmV0Y2hOZXh0U2libGluZ3MgPSBmaW5kTmV4dFNpYmxpbmdzICMgQ29tcGF0aWJpbGl0eSB3
aXRoIHByZS0zLngKKworICAgIGRlZiBmaW5kUHJldmlvdXMoc2VsZiwgbmFtZT1Ob25lLCBhdHRy
cz17fSwgdGV4dD1Ob25lLCAqKmt3YXJncyk6CisgICAgICAgICIiIlJldHVybnMgdGhlIGZpcnN0
IGl0ZW0gdGhhdCBtYXRjaGVzIHRoZSBnaXZlbiBjcml0ZXJpYSBhbmQKKyAgICAgICAgYXBwZWFy
cyBiZWZvcmUgdGhpcyBUYWcgaW4gdGhlIGRvY3VtZW50LiIiIgorICAgICAgICByZXR1cm4gc2Vs
Zi5fZmluZE9uZShzZWxmLmZpbmRBbGxQcmV2aW91cywgbmFtZSwgYXR0cnMsIHRleHQsICoqa3dh
cmdzKQorCisgICAgZGVmIGZpbmRBbGxQcmV2aW91cyhzZWxmLCBuYW1lPU5vbmUsIGF0dHJzPXt9
LCB0ZXh0PU5vbmUsIGxpbWl0PU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAqKmt3YXJn
cyk6CisgICAgICAgICIiIlJldHVybnMgYWxsIGl0ZW1zIHRoYXQgbWF0Y2ggdGhlIGdpdmVuIGNy
aXRlcmlhIGFuZCBhcHBlYXIKKyAgICAgICAgYmVmb3JlIHRoaXMgVGFnIGluIHRoZSBkb2N1bWVu
dC4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbmRBbGwobmFtZSwgYXR0cnMsIHRleHQsIGxp
bWl0LCBzZWxmLnByZXZpb3VzR2VuZXJhdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
Kiprd2FyZ3MpCisgICAgZmV0Y2hQcmV2aW91cyA9IGZpbmRBbGxQcmV2aW91cyAjIENvbXBhdGli
aWxpdHkgd2l0aCBwcmUtMy54CisKKyAgICBkZWYgZmluZFByZXZpb3VzU2libGluZyhzZWxmLCBu
YW1lPU5vbmUsIGF0dHJzPXt9LCB0ZXh0PU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgIiIiUmV0
dXJucyB0aGUgY2xvc2VzdCBzaWJsaW5nIHRvIHRoaXMgVGFnIHRoYXQgbWF0Y2hlcyB0aGUKKyAg
ICAgICAgZ2l2ZW4gY3JpdGVyaWEgYW5kIGFwcGVhcnMgYmVmb3JlIHRoaXMgVGFnIGluIHRoZSBk
b2N1bWVudC4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbmRPbmUoc2VsZi5maW5kUHJldmlv
dXNTaWJsaW5ncywgbmFtZSwgYXR0cnMsIHRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICoqa3dhcmdzKQorCisgICAgZGVmIGZpbmRQcmV2aW91c1NpYmxpbmdzKHNlbGYsIG5hbWU9
Tm9uZSwgYXR0cnM9e30sIHRleHQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bGltaXQ9Tm9uZSwgKiprd2FyZ3MpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSBzaWJsaW5ncyBv
ZiB0aGlzIFRhZyB0aGF0IG1hdGNoIHRoZSBnaXZlbgorICAgICAgICBjcml0ZXJpYSBhbmQgYXBw
ZWFyIGJlZm9yZSB0aGlzIFRhZyBpbiB0aGUgZG9jdW1lbnQuIiIiCisgICAgICAgIHJldHVybiBz
ZWxmLl9maW5kQWxsKG5hbWUsIGF0dHJzLCB0ZXh0LCBsaW1pdCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2VsZi5wcmV2aW91c1NpYmxpbmdHZW5lcmF0b3IsICoqa3dhcmdzKQorICAg
IGZldGNoUHJldmlvdXNTaWJsaW5ncyA9IGZpbmRQcmV2aW91c1NpYmxpbmdzICMgQ29tcGF0aWJp
bGl0eSB3aXRoIHByZS0zLngKKworICAgIGRlZiBmaW5kUGFyZW50KHNlbGYsIG5hbWU9Tm9uZSwg
YXR0cnM9e30sICoqa3dhcmdzKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgY2xvc2VzdCBwYXJl
bnQgb2YgdGhpcyBUYWcgdGhhdCBtYXRjaGVzIHRoZSBnaXZlbgorICAgICAgICBjcml0ZXJpYS4i
IiIKKyAgICAgICAgIyBOT1RFOiBXZSBjYW4ndCB1c2UgX2ZpbmRPbmUgYmVjYXVzZSBmaW5kUGFy
ZW50cyB0YWtlcyBhIGRpZmZlcmVudAorICAgICAgICAjIHNldCBvZiBhcmd1bWVudHMuCisgICAg
ICAgIHIgPSBOb25lCisgICAgICAgIGwgPSBzZWxmLmZpbmRQYXJlbnRzKG5hbWUsIGF0dHJzLCAx
KQorICAgICAgICBpZiBsOgorICAgICAgICAgICAgciA9IGxbMF0KKyAgICAgICAgcmV0dXJuIHIK
KworICAgIGRlZiBmaW5kUGFyZW50cyhzZWxmLCBuYW1lPU5vbmUsIGF0dHJzPXt9LCBsaW1pdD1O
b25lLCAqKmt3YXJncyk6CisgICAgICAgICIiIlJldHVybnMgdGhlIHBhcmVudHMgb2YgdGhpcyBU
YWcgdGhhdCBtYXRjaCB0aGUgZ2l2ZW4KKyAgICAgICAgY3JpdGVyaWEuIiIiCisKKyAgICAgICAg
cmV0dXJuIHNlbGYuX2ZpbmRBbGwobmFtZSwgYXR0cnMsIE5vbmUsIGxpbWl0LCBzZWxmLnBhcmVu
dEdlbmVyYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiprd2FyZ3MpCisgICAg
ZmV0Y2hQYXJlbnRzID0gZmluZFBhcmVudHMgIyBDb21wYXRpYmlsaXR5IHdpdGggcHJlLTMueAor
CisgICAgI1RoZXNlIG1ldGhvZHMgZG8gdGhlIHJlYWwgaGVhdnkgbGlmdGluZy4KKworICAgIGRl
ZiBfZmluZE9uZShzZWxmLCBtZXRob2QsIG5hbWUsIGF0dHJzLCB0ZXh0LCAqKmt3YXJncyk6Cisg
ICAgICAgIHIgPSBOb25lCisgICAgICAgIGwgPSBtZXRob2QobmFtZSwgYXR0cnMsIHRleHQsIDEs
ICoqa3dhcmdzKQorICAgICAgICBpZiBsOgorICAgICAgICAgICAgciA9IGxbMF0KKyAgICAgICAg
cmV0dXJuIHIKKworICAgIGRlZiBfZmluZEFsbChzZWxmLCBuYW1lLCBhdHRycywgdGV4dCwgbGlt
aXQsIGdlbmVyYXRvciwgKiprd2FyZ3MpOgorICAgICAgICAiSXRlcmF0ZXMgb3ZlciBhIGdlbmVy
YXRvciBsb29raW5nIGZvciB0aGluZ3MgdGhhdCBtYXRjaC4iCisKKyAgICAgICAgaWYgaXNpbnN0
YW5jZShuYW1lLCBTb3VwU3RyYWluZXIpOgorICAgICAgICAgICAgc3RyYWluZXIgPSBuYW1lCisg
ICAgICAgICMgKFBvc3NpYmx5KSBzcGVjaWFsIGNhc2Ugc29tZSBmaW5kQWxsKiguLi4pIHNlYXJj
aGVzCisgICAgICAgIGVsaWYgdGV4dCBpcyBOb25lIGFuZCBub3QgbGltaXQgYW5kIG5vdCBhdHRy
cyBhbmQgbm90IGt3YXJnczoKKyAgICAgICAgICAgICMgZmluZEFsbCooVHJ1ZSkKKyAgICAgICAg
ICAgIGlmIG5hbWUgaXMgVHJ1ZToKKyAgICAgICAgICAgICAgICByZXR1cm4gW2VsZW1lbnQgZm9y
IGVsZW1lbnQgaW4gZ2VuZXJhdG9yKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5z
dGFuY2UoZWxlbWVudCwgVGFnKV0KKyAgICAgICAgICAgICMgZmluZEFsbCooJ3RhZy1uYW1lJykK
KyAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShuYW1lLCBiYXNlc3RyaW5nKToKKyAgICAgICAg
ICAgICAgICByZXR1cm4gW2VsZW1lbnQgZm9yIGVsZW1lbnQgaW4gZ2VuZXJhdG9yKCkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZWxlbWVudCwgVGFnKSBhbmQKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGVsZW1lbnQubmFtZSA9PSBuYW1lXQorICAgICAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgICAgICBzdHJhaW5lciA9IFNvdXBTdHJhaW5lcihuYW1lLCBhdHRycywg
dGV4dCwgKiprd2FyZ3MpCisgICAgICAgICMgQnVpbGQgYSBTb3VwU3RyYWluZXIKKyAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgIHN0cmFpbmVyID0gU291cFN0cmFpbmVyKG5hbWUsIGF0dHJzLCB0
ZXh0LCAqKmt3YXJncykKKyAgICAgICAgcmVzdWx0cyA9IFJlc3VsdFNldChzdHJhaW5lcikKKyAg
ICAgICAgZyA9IGdlbmVyYXRvcigpCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICB0
cnk6CisgICAgICAgICAgICAgICAgaSA9IGcubmV4dCgpCisgICAgICAgICAgICBleGNlcHQgU3Rv
cEl0ZXJhdGlvbjoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaWYgaToKKyAg
ICAgICAgICAgICAgICBmb3VuZCA9IHN0cmFpbmVyLnNlYXJjaChpKQorICAgICAgICAgICAgICAg
IGlmIGZvdW5kOgorICAgICAgICAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChmb3VuZCkKKyAg
ICAgICAgICAgICAgICAgICAgaWYgbGltaXQgYW5kIGxlbihyZXN1bHRzKSA+PSBsaW1pdDoKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIHJldHVybiByZXN1bHRzCisKKyAg
ICAjVGhlc2UgR2VuZXJhdG9ycyBjYW4gYmUgdXNlZCB0byBuYXZpZ2F0ZSBzdGFydGluZyBmcm9t
IGJvdGgKKyAgICAjTmF2aWdhYmxlU3RyaW5ncyBhbmQgVGFncy4KKyAgICBkZWYgbmV4dEdlbmVy
YXRvcihzZWxmKToKKyAgICAgICAgaSA9IHNlbGYKKyAgICAgICAgd2hpbGUgaSBpcyBub3QgTm9u
ZToKKyAgICAgICAgICAgIGkgPSBpLm5leHQKKyAgICAgICAgICAgIHlpZWxkIGkKKworICAgIGRl
ZiBuZXh0U2libGluZ0dlbmVyYXRvcihzZWxmKToKKyAgICAgICAgaSA9IHNlbGYKKyAgICAgICAg
d2hpbGUgaSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGkgPSBpLm5leHRTaWJsaW5nCisgICAg
ICAgICAgICB5aWVsZCBpCisKKyAgICBkZWYgcHJldmlvdXNHZW5lcmF0b3Ioc2VsZik6CisgICAg
ICAgIGkgPSBzZWxmCisgICAgICAgIHdoaWxlIGkgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBp
ID0gaS5wcmV2aW91cworICAgICAgICAgICAgeWllbGQgaQorCisgICAgZGVmIHByZXZpb3VzU2li
bGluZ0dlbmVyYXRvcihzZWxmKToKKyAgICAgICAgaSA9IHNlbGYKKyAgICAgICAgd2hpbGUgaSBp
cyBub3QgTm9uZToKKyAgICAgICAgICAgIGkgPSBpLnByZXZpb3VzU2libGluZworICAgICAgICAg
ICAgeWllbGQgaQorCisgICAgZGVmIHBhcmVudEdlbmVyYXRvcihzZWxmKToKKyAgICAgICAgaSA9
IHNlbGYKKyAgICAgICAgd2hpbGUgaSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGkgPSBpLnBh
cmVudAorICAgICAgICAgICAgeWllbGQgaQorCisgICAgIyBVdGlsaXR5IG1ldGhvZHMKKyAgICBk
ZWYgc3Vic3RpdHV0ZUVuY29kaW5nKHNlbGYsIHN0ciwgZW5jb2Rpbmc9Tm9uZSk6CisgICAgICAg
IGVuY29kaW5nID0gZW5jb2Rpbmcgb3IgInV0Zi04IgorICAgICAgICByZXR1cm4gc3RyLnJlcGxh
Y2UoIiVTT1VQLUVOQ09ESU5HJSIsIGVuY29kaW5nKQorCisgICAgZGVmIHRvRW5jb2Rpbmcoc2Vs
ZiwgcywgZW5jb2Rpbmc9Tm9uZSk6CisgICAgICAgICIiIkVuY29kZXMgYW4gb2JqZWN0IHRvIGEg
c3RyaW5nIGluIHNvbWUgZW5jb2RpbmcsIG9yIHRvIFVuaWNvZGUuCisgICAgICAgIC4iIiIKKyAg
ICAgICAgaWYgaXNpbnN0YW5jZShzLCB1bmljb2RlKToKKyAgICAgICAgICAgIGlmIGVuY29kaW5n
OgorICAgICAgICAgICAgICAgIHMgPSBzLmVuY29kZShlbmNvZGluZykKKyAgICAgICAgZWxpZiBp
c2luc3RhbmNlKHMsIHN0cik6CisgICAgICAgICAgICBpZiBlbmNvZGluZzoKKyAgICAgICAgICAg
ICAgICBzID0gcy5lbmNvZGUoZW5jb2RpbmcpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgICAgIHMgPSB1bmljb2RlKHMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBlbmNv
ZGluZzoKKyAgICAgICAgICAgICAgICBzICA9IHNlbGYudG9FbmNvZGluZyhzdHIocyksIGVuY29k
aW5nKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzID0gdW5pY29kZShzKQor
ICAgICAgICByZXR1cm4gcworCitjbGFzcyBOYXZpZ2FibGVTdHJpbmcodW5pY29kZSwgUGFnZUVs
ZW1lbnQpOgorCisgICAgZGVmIF9fbmV3X18oY2xzLCB2YWx1ZSk6CisgICAgICAgICIiIkNyZWF0
ZSBhIG5ldyBOYXZpZ2FibGVTdHJpbmcuCisKKyAgICAgICAgV2hlbiB1bnBpY2tsaW5nIGEgTmF2
aWdhYmxlU3RyaW5nLCB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgd2l0aAorICAgICAgICB0aGUgc3Ry
aW5nIGluIERFRkFVTFRfT1VUUFVUX0VOQ09ESU5HLiBUaGF0IGVuY29kaW5nIG5lZWRzIHRvIGJl
CisgICAgICAgIHBhc3NlZCBpbiB0byB0aGUgc3VwZXJjbGFzcydzIF9fbmV3X18gb3IgdGhlIHN1
cGVyY2xhc3Mgd29uJ3Qga25vdworICAgICAgICBob3cgdG8gaGFuZGxlIG5vbi1BU0NJSSBjaGFy
YWN0ZXJzLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgdW5pY29k
ZSk6CisgICAgICAgICAgICByZXR1cm4gdW5pY29kZS5fX25ld19fKGNscywgdmFsdWUpCisgICAg
ICAgIHJldHVybiB1bmljb2RlLl9fbmV3X18oY2xzLCB2YWx1ZSwgREVGQVVMVF9PVVRQVVRfRU5D
T0RJTkcpCisKKyAgICBkZWYgX19nZXRuZXdhcmdzX18oc2VsZik6CisgICAgICAgIHJldHVybiAo
TmF2aWdhYmxlU3RyaW5nLl9fc3RyX18oc2VsZiksKQorCisgICAgZGVmIF9fZ2V0YXR0cl9fKHNl
bGYsIGF0dHIpOgorICAgICAgICAiIiJ0ZXh0LnN0cmluZyBnaXZlcyB5b3UgdGV4dC4gVGhpcyBp
cyBmb3IgYmFja3dhcmRzCisgICAgICAgIGNvbXBhdGliaWxpdHkgZm9yIE5hdmlnYWJsZSpTdHJp
bmcsIGJ1dCBmb3IgQ0RhdGEqIGl0IGxldHMgeW91CisgICAgICAgIGdldCB0aGUgc3RyaW5nIHdp
dGhvdXQgdGhlIENEYXRhIHdyYXBwZXIuIiIiCisgICAgICAgIGlmIGF0dHIgPT0gJ3N0cmluZyc6
CisgICAgICAgICAgICByZXR1cm4gc2VsZgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFp
c2UgQXR0cmlidXRlRXJyb3IsICInJXMnIG9iamVjdCBoYXMgbm8gYXR0cmlidXRlICclcyciICUg
KHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCBhdHRyKQorCisgICAgZGVmIF9fdW5pY29kZV9fKHNl
bGYpOgorICAgICAgICByZXR1cm4gc3RyKHNlbGYpLmRlY29kZShERUZBVUxUX09VVFBVVF9FTkNP
RElORykKKworICAgIGRlZiBfX3N0cl9fKHNlbGYsIGVuY29kaW5nPURFRkFVTFRfT1VUUFVUX0VO
Q09ESU5HKToKKyAgICAgICAgaWYgZW5jb2Rpbmc6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5l
bmNvZGUoZW5jb2RpbmcpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZgor
CitjbGFzcyBDRGF0YShOYXZpZ2FibGVTdHJpbmcpOgorCisgICAgZGVmIF9fc3RyX18oc2VsZiwg
ZW5jb2Rpbmc9REVGQVVMVF9PVVRQVVRfRU5DT0RJTkcpOgorICAgICAgICByZXR1cm4gIjwhW0NE
QVRBWyVzXV0+IiAlIE5hdmlnYWJsZVN0cmluZy5fX3N0cl9fKHNlbGYsIGVuY29kaW5nKQorCitj
bGFzcyBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oTmF2aWdhYmxlU3RyaW5nKToKKyAgICBkZWYgX19z
dHJfXyhzZWxmLCBlbmNvZGluZz1ERUZBVUxUX09VVFBVVF9FTkNPRElORyk6CisgICAgICAgIG91
dHB1dCA9IHNlbGYKKyAgICAgICAgaWYgIiVTT1VQLUVOQ09ESU5HJSIgaW4gb3V0cHV0OgorICAg
ICAgICAgICAgb3V0cHV0ID0gc2VsZi5zdWJzdGl0dXRlRW5jb2Rpbmcob3V0cHV0LCBlbmNvZGlu
ZykKKyAgICAgICAgcmV0dXJuICI8PyVzPz4iICUgc2VsZi50b0VuY29kaW5nKG91dHB1dCwgZW5j
b2RpbmcpCisKK2NsYXNzIENvbW1lbnQoTmF2aWdhYmxlU3RyaW5nKToKKyAgICBkZWYgX19zdHJf
XyhzZWxmLCBlbmNvZGluZz1ERUZBVUxUX09VVFBVVF9FTkNPRElORyk6CisgICAgICAgIHJldHVy
biAiPCEtLSVzLS0+IiAlIE5hdmlnYWJsZVN0cmluZy5fX3N0cl9fKHNlbGYsIGVuY29kaW5nKQor
CitjbGFzcyBEZWNsYXJhdGlvbihOYXZpZ2FibGVTdHJpbmcpOgorICAgIGRlZiBfX3N0cl9fKHNl
bGYsIGVuY29kaW5nPURFRkFVTFRfT1VUUFVUX0VOQ09ESU5HKToKKyAgICAgICAgcmV0dXJuICI8
ISVzPiIgJSBOYXZpZ2FibGVTdHJpbmcuX19zdHJfXyhzZWxmLCBlbmNvZGluZykKKworY2xhc3Mg
VGFnKFBhZ2VFbGVtZW50KToKKworICAgICIiIlJlcHJlc2VudHMgYSBmb3VuZCBIVE1MIHRhZyB3
aXRoIGl0cyBhdHRyaWJ1dGVzIGFuZCBjb250ZW50cy4iIiIKKworICAgIGRlZiBfaW52ZXJ0KGgp
OgorICAgICAgICAiQ2hlYXAgZnVuY3Rpb24gdG8gaW52ZXJ0IGEgaGFzaC4iCisgICAgICAgIGkg
PSB7fQorICAgICAgICBmb3Igayx2IGluIGguaXRlbXMoKToKKyAgICAgICAgICAgIGlbdl0gPSBr
CisgICAgICAgIHJldHVybiBpCisKKyAgICBYTUxfRU5USVRJRVNfVE9fU1BFQ0lBTF9DSEFSUyA9
IHsgImFwb3MiIDogIiciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
cXVvdCIgOiAnIicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbXAi
IDogIiYiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibHQiIDogIjwi
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ3QiIDogIj4iIH0KKwor
ICAgIFhNTF9TUEVDSUFMX0NIQVJTX1RPX0VOVElUSUVTID0gX2ludmVydChYTUxfRU5USVRJRVNf
VE9fU1BFQ0lBTF9DSEFSUykKKworICAgIGRlZiBfY29udmVydEVudGl0aWVzKHNlbGYsIG1hdGNo
KToKKyAgICAgICAgIiIiVXNlZCBpbiBhIGNhbGwgdG8gcmUuc3ViIHRvIHJlcGxhY2UgSFRNTCwg
WE1MLCBhbmQgbnVtZXJpYworICAgICAgICBlbnRpdGllcyB3aXRoIHRoZSBhcHByb3ByaWF0ZSBV
bmljb2RlIGNoYXJhY3RlcnMuIElmIEhUTUwKKyAgICAgICAgZW50aXRpZXMgYXJlIGJlaW5nIGNv
bnZlcnRlZCwgYW55IHVucmVjb2duaXplZCBlbnRpdGllcyBhcmUKKyAgICAgICAgZXNjYXBlZC4i
IiIKKyAgICAgICAgeCA9IG1hdGNoLmdyb3VwKDEpCisgICAgICAgIGlmIHNlbGYuY29udmVydEhU
TUxFbnRpdGllcyBhbmQgeCBpbiBuYW1lMmNvZGVwb2ludDoKKyAgICAgICAgICAgIHJldHVybiB1
bmljaHIobmFtZTJjb2RlcG9pbnRbeF0pCisgICAgICAgIGVsaWYgeCBpbiBzZWxmLlhNTF9FTlRJ
VElFU19UT19TUEVDSUFMX0NIQVJTOgorICAgICAgICAgICAgaWYgc2VsZi5jb252ZXJ0WE1MRW50
aXRpZXM6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuWE1MX0VOVElUSUVTX1RPX1NQRUNJ
QUxfQ0hBUlNbeF0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIHUn
JiVzOycgJSB4CisgICAgICAgIGVsaWYgbGVuKHgpID4gMCBhbmQgeFswXSA9PSAnIyc6CisgICAg
ICAgICAgICAjIEhhbmRsZSBudW1lcmljIGVudGl0aWVzCisgICAgICAgICAgICBpZiBsZW4oeCkg
PiAxIGFuZCB4WzFdID09ICd4JzoKKyAgICAgICAgICAgICAgICByZXR1cm4gdW5pY2hyKGludCh4
WzI6XSwgMTYpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gdW5p
Y2hyKGludCh4WzE6XSkpCisKKyAgICAgICAgZWxpZiBzZWxmLmVzY2FwZVVucmVjb2duaXplZEVu
dGl0aWVzOgorICAgICAgICAgICAgcmV0dXJuIHUnJmFtcDslczsnICUgeAorICAgICAgICBlbHNl
OgorICAgICAgICAgICAgcmV0dXJuIHUnJiVzOycgJSB4CisKKyAgICBkZWYgX19pbml0X18oc2Vs
ZiwgcGFyc2VyLCBuYW1lLCBhdHRycz1Ob25lLCBwYXJlbnQ9Tm9uZSwKKyAgICAgICAgICAgICAg
ICAgcHJldmlvdXM9Tm9uZSk6CisgICAgICAgICJCYXNpYyBjb25zdHJ1Y3Rvci4iCisKKyAgICAg
ICAgIyBXZSBkb24ndCBhY3R1YWxseSBzdG9yZSB0aGUgcGFyc2VyIG9iamVjdDogdGhhdCBsZXRz
IGV4dHJhY3RlZAorICAgICAgICAjIGNodW5rcyBiZSBnYXJiYWdlLWNvbGxlY3RlZAorICAgICAg
ICBzZWxmLnBhcnNlckNsYXNzID0gcGFyc2VyLl9fY2xhc3NfXworICAgICAgICBzZWxmLmlzU2Vs
ZkNsb3NpbmcgPSBwYXJzZXIuaXNTZWxmQ2xvc2luZ1RhZyhuYW1lKQorICAgICAgICBzZWxmLm5h
bWUgPSBuYW1lCisgICAgICAgIGlmIGF0dHJzIGlzIE5vbmU6CisgICAgICAgICAgICBhdHRycyA9
IFtdCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShhdHRycywgZGljdCk6CisgICAgICAgICAgICBh
dHRycyA9IGF0dHJzLml0ZW1zKCkKKyAgICAgICAgc2VsZi5hdHRycyA9IGF0dHJzCisgICAgICAg
IHNlbGYuY29udGVudHMgPSBbXQorICAgICAgICBzZWxmLnNldHVwKHBhcmVudCwgcHJldmlvdXMp
CisgICAgICAgIHNlbGYuaGlkZGVuID0gRmFsc2UKKyAgICAgICAgc2VsZi5jb250YWluc1N1YnN0
aXR1dGlvbnMgPSBGYWxzZQorICAgICAgICBzZWxmLmNvbnZlcnRIVE1MRW50aXRpZXMgPSBwYXJz
ZXIuY29udmVydEhUTUxFbnRpdGllcworICAgICAgICBzZWxmLmNvbnZlcnRYTUxFbnRpdGllcyA9
IHBhcnNlci5jb252ZXJ0WE1MRW50aXRpZXMKKyAgICAgICAgc2VsZi5lc2NhcGVVbnJlY29nbml6
ZWRFbnRpdGllcyA9IHBhcnNlci5lc2NhcGVVbnJlY29nbml6ZWRFbnRpdGllcworCisgICAgICAg
ICMgQ29udmVydCBhbnkgSFRNTCwgWE1MLCBvciBudW1lcmljIGVudGl0aWVzIGluIHRoZSBhdHRy
aWJ1dGUgdmFsdWVzLgorICAgICAgICBjb252ZXJ0ID0gbGFtYmRhKGssIHZhbCk6IChrLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZS5zdWIoIiYoI1xkK3wjeFswLTlhLWZB
LUZdK3xcdyspOyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
ZWxmLl9jb252ZXJ0RW50aXRpZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YWwpKQorICAgICAgICBzZWxmLmF0dHJzID0gbWFwKGNvbnZlcnQsIHNlbGYuYXR0
cnMpCisKKyAgICBkZWYgZ2V0U3RyaW5nKHNlbGYpOgorICAgICAgICBpZiAobGVuKHNlbGYuY29u
dGVudHMpID09IDEKKyAgICAgICAgICAgIGFuZCBpc2luc3RhbmNlKHNlbGYuY29udGVudHNbMF0s
IE5hdmlnYWJsZVN0cmluZykpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuY29udGVudHNbMF0K
KworICAgIGRlZiBzZXRTdHJpbmcoc2VsZiwgc3RyaW5nKToKKyAgICAgICAgIiIiUmVwbGFjZSB0
aGUgY29udGVudHMgb2YgdGhlIHRhZyB3aXRoIGEgc3RyaW5nIiIiCisgICAgICAgIHNlbGYuY2xl
YXIoKQorICAgICAgICBzZWxmLmFwcGVuZChzdHJpbmcpCisKKyAgICBzdHJpbmcgPSBwcm9wZXJ0
eShnZXRTdHJpbmcsIHNldFN0cmluZykKKworICAgIGRlZiBnZXRUZXh0KHNlbGYsIHNlcGFyYXRv
cj11IiIpOgorICAgICAgICBpZiBub3QgbGVuKHNlbGYuY29udGVudHMpOgorICAgICAgICAgICAg
cmV0dXJuIHUiIgorICAgICAgICBzdG9wTm9kZSA9IHNlbGYuX2xhc3RSZWN1cnNpdmVDaGlsZCgp
Lm5leHQKKyAgICAgICAgc3RyaW5ncyA9IFtdCisgICAgICAgIGN1cnJlbnQgPSBzZWxmLmNvbnRl
bnRzWzBdCisgICAgICAgIHdoaWxlIGN1cnJlbnQgaXMgbm90IHN0b3BOb2RlOgorICAgICAgICAg
ICAgaWYgaXNpbnN0YW5jZShjdXJyZW50LCBOYXZpZ2FibGVTdHJpbmcpOgorICAgICAgICAgICAg
ICAgIHN0cmluZ3MuYXBwZW5kKGN1cnJlbnQuc3RyaXAoKSkKKyAgICAgICAgICAgIGN1cnJlbnQg
PSBjdXJyZW50Lm5leHQKKyAgICAgICAgcmV0dXJuIHNlcGFyYXRvci5qb2luKHN0cmluZ3MpCisK
KyAgICB0ZXh0ID0gcHJvcGVydHkoZ2V0VGV4dCkKKworICAgIGRlZiBnZXQoc2VsZiwga2V5LCBk
ZWZhdWx0PU5vbmUpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJ2tleScg
YXR0cmlidXRlIGZvciB0aGUgdGFnLCBvcgorICAgICAgICB0aGUgdmFsdWUgZ2l2ZW4gZm9yICdk
ZWZhdWx0JyBpZiBpdCBkb2Vzbid0IGhhdmUgdGhhdAorICAgICAgICBhdHRyaWJ1dGUuIiIiCisg
ICAgICAgIHJldHVybiBzZWxmLl9nZXRBdHRyTWFwKCkuZ2V0KGtleSwgZGVmYXVsdCkKKworICAg
IGRlZiBjbGVhcihzZWxmKToKKyAgICAgICAgIiIiRXh0cmFjdCBhbGwgY2hpbGRyZW4uIiIiCisg
ICAgICAgIGZvciBjaGlsZCBpbiBzZWxmLmNvbnRlbnRzWzpdOgorICAgICAgICAgICAgY2hpbGQu
ZXh0cmFjdCgpCisKKyAgICBkZWYgaW5kZXgoc2VsZiwgZWxlbWVudCk6CisgICAgICAgIGZvciBp
LCBjaGlsZCBpbiBlbnVtZXJhdGUoc2VsZi5jb250ZW50cyk6CisgICAgICAgICAgICBpZiBjaGls
ZCBpcyBlbGVtZW50OgorICAgICAgICAgICAgICAgIHJldHVybiBpCisgICAgICAgIHJhaXNlIFZh
bHVlRXJyb3IoIlRhZy5pbmRleDogZWxlbWVudCBub3QgaW4gdGFnIikKKworICAgIGRlZiBoYXNf
a2V5KHNlbGYsIGtleSk6CisgICAgICAgIHJldHVybiBzZWxmLl9nZXRBdHRyTWFwKCkuaGFzX2tl
eShrZXkpCisKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKKyAgICAgICAgIiIidGFn
W2tleV0gcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICdrZXknIGF0dHJpYnV0ZSBmb3IgdGhlIHRh
ZywKKyAgICAgICAgYW5kIHRocm93cyBhbiBleGNlcHRpb24gaWYgaXQncyBub3QgdGhlcmUuIiIi
CisgICAgICAgIHJldHVybiBzZWxmLl9nZXRBdHRyTWFwKClba2V5XQorCisgICAgZGVmIF9faXRl
cl9fKHNlbGYpOgorICAgICAgICAiSXRlcmF0aW5nIG92ZXIgYSB0YWcgaXRlcmF0ZXMgb3ZlciBp
dHMgY29udGVudHMuIgorICAgICAgICByZXR1cm4gaXRlcihzZWxmLmNvbnRlbnRzKQorCisgICAg
ZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgICJUaGUgbGVuZ3RoIG9mIGEgdGFnIGlzIHRoZSBs
ZW5ndGggb2YgaXRzIGxpc3Qgb2YgY29udGVudHMuIgorICAgICAgICByZXR1cm4gbGVuKHNlbGYu
Y29udGVudHMpCisKKyAgICBkZWYgX19jb250YWluc19fKHNlbGYsIHgpOgorICAgICAgICByZXR1
cm4geCBpbiBzZWxmLmNvbnRlbnRzCisKKyAgICBkZWYgX19ub256ZXJvX18oc2VsZik6CisgICAg
ICAgICJBIHRhZyBpcyBub24tTm9uZSBldmVuIGlmIGl0IGhhcyBubyBjb250ZW50cy4iCisgICAg
ICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgX19zZXRpdGVtX18oc2VsZiwga2V5LCB2YWx1ZSk6
CisgICAgICAgICIiIlNldHRpbmcgdGFnW2tleV0gc2V0cyB0aGUgdmFsdWUgb2YgdGhlICdrZXkn
IGF0dHJpYnV0ZSBmb3IgdGhlCisgICAgICAgIHRhZy4iIiIKKyAgICAgICAgc2VsZi5fZ2V0QXR0
ck1hcCgpCisgICAgICAgIHNlbGYuYXR0ck1hcFtrZXldID0gdmFsdWUKKyAgICAgICAgZm91bmQg
PSBGYWxzZQorICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4oc2VsZi5hdHRycykpOgorICAg
ICAgICAgICAgaWYgc2VsZi5hdHRyc1tpXVswXSA9PSBrZXk6CisgICAgICAgICAgICAgICAgc2Vs
Zi5hdHRyc1tpXSA9IChrZXksIHZhbHVlKQorICAgICAgICAgICAgICAgIGZvdW5kID0gVHJ1ZQor
ICAgICAgICBpZiBub3QgZm91bmQ6CisgICAgICAgICAgICBzZWxmLmF0dHJzLmFwcGVuZCgoa2V5
LCB2YWx1ZSkpCisgICAgICAgIHNlbGYuX2dldEF0dHJNYXAoKVtrZXldID0gdmFsdWUKKworICAg
IGRlZiBfX2RlbGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICAiRGVsZXRpbmcgdGFnW2tleV0g
ZGVsZXRlcyBhbGwgJ2tleScgYXR0cmlidXRlcyBmb3IgdGhlIHRhZy4iCisgICAgICAgIGZvciBp
dGVtIGluIHNlbGYuYXR0cnM6CisgICAgICAgICAgICBpZiBpdGVtWzBdID09IGtleToKKyAgICAg
ICAgICAgICAgICBzZWxmLmF0dHJzLnJlbW92ZShpdGVtKQorICAgICAgICAgICAgICAgICNXZSBk
b24ndCBicmVhayBiZWNhdXNlIGJhZCBIVE1MIGNhbiBkZWZpbmUgdGhlIHNhbWUKKyAgICAgICAg
ICAgICAgICAjYXR0cmlidXRlIG11bHRpcGxlIHRpbWVzLgorICAgICAgICAgICAgc2VsZi5fZ2V0
QXR0ck1hcCgpCisgICAgICAgICAgICBpZiBzZWxmLmF0dHJNYXAuaGFzX2tleShrZXkpOgorICAg
ICAgICAgICAgICAgIGRlbCBzZWxmLmF0dHJNYXBba2V5XQorCisgICAgZGVmIF9fY2FsbF9fKHNl
bGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICIiIkNhbGxpbmcgYSB0YWcgbGlrZSBhIGZ1
bmN0aW9uIGlzIHRoZSBzYW1lIGFzIGNhbGxpbmcgaXRzCisgICAgICAgIGZpbmRBbGwoKSBtZXRo
b2QuIEVnLiB0YWcoJ2EnKSByZXR1cm5zIGEgbGlzdCBvZiBhbGwgdGhlIEEgdGFncworICAgICAg
ICBmb3VuZCB3aXRoaW4gdGhpcyB0YWcuIiIiCisgICAgICAgIHJldHVybiBhcHBseShzZWxmLmZp
bmRBbGwsIGFyZ3MsIGt3YXJncykKKworICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCB0YWcpOgor
ICAgICAgICAjcHJpbnQgIkdldGF0dHIgJXMuJXMiICUgKHNlbGYuX19jbGFzc19fLCB0YWcpCisg
ICAgICAgIGlmIGxlbih0YWcpID4gMyBhbmQgdGFnLnJmaW5kKCdUYWcnKSA9PSBsZW4odGFnKS0z
OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZmluZCh0YWdbOi0zXSkKKyAgICAgICAgZWxpZiB0
YWcuZmluZCgnX18nKSAhPSAwOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZmluZCh0YWcpCisg
ICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yLCAiJyVzJyBvYmplY3QgaGFzIG5vIGF0dHJpYnV0
ZSAnJXMnIiAlIChzZWxmLl9fY2xhc3NfXywgdGFnKQorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBv
dGhlcik6CisgICAgICAgICIiIlJldHVybnMgdHJ1ZSBpZmYgdGhpcyB0YWcgaGFzIHRoZSBzYW1l
IG5hbWUsIHRoZSBzYW1lIGF0dHJpYnV0ZXMsCisgICAgICAgIGFuZCB0aGUgc2FtZSBjb250ZW50
cyAocmVjdXJzaXZlbHkpIGFzIHRoZSBnaXZlbiB0YWcuCisKKyAgICAgICAgTk9URTogcmlnaHQg
bm93IHRoaXMgd2lsbCByZXR1cm4gZmFsc2UgaWYgdHdvIHRhZ3MgaGF2ZSB0aGUKKyAgICAgICAg
c2FtZSBhdHRyaWJ1dGVzIGluIGEgZGlmZmVyZW50IG9yZGVyLiBTaG91bGQgdGhpcyBiZSBmaXhl
ZD8iIiIKKyAgICAgICAgaWYgb3RoZXIgaXMgc2VsZjoKKyAgICAgICAgICAgIHJldHVybiBUcnVl
CisgICAgICAgIGlmIG5vdCBoYXNhdHRyKG90aGVyLCAnbmFtZScpIG9yIG5vdCBoYXNhdHRyKG90
aGVyLCAnYXR0cnMnKSBvciBub3QgaGFzYXR0cihvdGhlciwgJ2NvbnRlbnRzJykgb3Igc2VsZi5u
YW1lICE9IG90aGVyLm5hbWUgb3Igc2VsZi5hdHRycyAhPSBvdGhlci5hdHRycyBvciBsZW4oc2Vs
ZikgIT0gbGVuKG90aGVyKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBmb3Ig
aSBpbiByYW5nZSgwLCBsZW4oc2VsZi5jb250ZW50cykpOgorICAgICAgICAgICAgaWYgc2VsZi5j
b250ZW50c1tpXSAhPSBvdGhlci5jb250ZW50c1tpXToKKyAgICAgICAgICAgICAgICByZXR1cm4g
RmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIp
OgorICAgICAgICAiIiJSZXR1cm5zIHRydWUgaWZmIHRoaXMgdGFnIGlzIG5vdCBpZGVudGljYWwg
dG8gdGhlIG90aGVyIHRhZywKKyAgICAgICAgYXMgZGVmaW5lZCBpbiBfX2VxX18uIiIiCisgICAg
ICAgIHJldHVybiBub3Qgc2VsZiA9PSBvdGhlcgorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYsIGVu
Y29kaW5nPURFRkFVTFRfT1VUUFVUX0VOQ09ESU5HKToKKyAgICAgICAgIiIiUmVuZGVycyB0aGlz
IHRhZyBhcyBhIHN0cmluZy4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX19zdHJfXyhlbmNvZGlu
ZykKKworICAgIGRlZiBfX3VuaWNvZGVfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX19z
dHJfXyhOb25lKQorCisgICAgQkFSRV9BTVBFUlNBTkRfT1JfQlJBQ0tFVCA9IHJlLmNvbXBpbGUo
IihbPD5dfCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIm
KD8hI1xkKzt8I3hbMC05YS1mQS1GXSs7fFx3KzspIgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICsgIikiKQorCisgICAgZGVmIF9zdWJfZW50aXR5KHNlbGYsIHgp
OgorICAgICAgICAiIiJVc2VkIHdpdGggYSByZWd1bGFyIGV4cHJlc3Npb24gdG8gc3Vic3RpdHV0
ZSB0aGUKKyAgICAgICAgYXBwcm9wcmlhdGUgWE1MIGVudGl0eSBmb3IgYW4gWE1MIHNwZWNpYWwg
Y2hhcmFjdGVyLiIiIgorICAgICAgICByZXR1cm4gIiYiICsgc2VsZi5YTUxfU1BFQ0lBTF9DSEFS
U19UT19FTlRJVElFU1t4Lmdyb3VwKDApWzBdXSArICI7IgorCisgICAgZGVmIF9fc3RyX18oc2Vs
ZiwgZW5jb2Rpbmc9REVGQVVMVF9PVVRQVVRfRU5DT0RJTkcsCisgICAgICAgICAgICAgICAgcHJl
dHR5UHJpbnQ9RmFsc2UsIGluZGVudExldmVsPTApOgorICAgICAgICAiIiJSZXR1cm5zIGEgc3Ry
aW5nIG9yIFVuaWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhpcyB0YWcgYW5kCisgICAgICAgIGl0
cyBjb250ZW50cy4gVG8gZ2V0IFVuaWNvZGUsIHBhc3MgTm9uZSBmb3IgZW5jb2RpbmcuCisKKyAg
ICAgICAgTk9URTogc2luY2UgUHl0aG9uJ3MgSFRNTCBwYXJzZXIgY29uc3VtZXMgd2hpdGVzcGFj
ZSwgdGhpcworICAgICAgICBtZXRob2QgaXMgbm90IGNlcnRhaW4gdG8gcmVwcm9kdWNlIHRoZSB3
aGl0ZXNwYWNlIHByZXNlbnQgaW4KKyAgICAgICAgdGhlIG9yaWdpbmFsIHN0cmluZy4iIiIKKwor
ICAgICAgICBlbmNvZGVkTmFtZSA9IHNlbGYudG9FbmNvZGluZyhzZWxmLm5hbWUsIGVuY29kaW5n
KQorCisgICAgICAgIGF0dHJzID0gW10KKyAgICAgICAgaWYgc2VsZi5hdHRyczoKKyAgICAgICAg
ICAgIGZvciBrZXksIHZhbCBpbiBzZWxmLmF0dHJzOgorICAgICAgICAgICAgICAgIGZtdCA9ICcl
cz0iJXMiJworICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsLCBiYXNlc3RyaW5nKToK
KyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5jb250YWluc1N1YnN0aXR1dGlvbnMgYW5kICcl
U09VUC1FTkNPRElORyUnIGluIHZhbDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IHNl
bGYuc3Vic3RpdHV0ZUVuY29kaW5nKHZhbCwgZW5jb2RpbmcpCisKKyAgICAgICAgICAgICAgICAg
ICAgIyBUaGUgYXR0cmlidXRlIHZhbHVlIGVpdGhlcjoKKyAgICAgICAgICAgICAgICAgICAgIwor
ICAgICAgICAgICAgICAgICAgICAjICogQ29udGFpbnMgbm8gZW1iZWRkZWQgZG91YmxlIHF1b3Rl
cyBvciBzaW5nbGUgcXVvdGVzLgorICAgICAgICAgICAgICAgICAgICAjICAgTm8gcHJvYmxlbTog
d2UgZW5jbG9zZSBpdCBpbiBkb3VibGUgcXVvdGVzLgorICAgICAgICAgICAgICAgICAgICAjICog
Q29udGFpbnMgZW1iZWRkZWQgc2luZ2xlIHF1b3Rlcy4gTm8gcHJvYmxlbToKKyAgICAgICAgICAg
ICAgICAgICAgIyAgIGRvdWJsZSBxdW90ZXMgd29yayBoZXJlIHRvby4KKyAgICAgICAgICAgICAg
ICAgICAgIyAqIENvbnRhaW5zIGVtYmVkZGVkIGRvdWJsZSBxdW90ZXMuIE5vIHByb2JsZW06Cisg
ICAgICAgICAgICAgICAgICAgICMgICB3ZSBlbmNsb3NlIGl0IGluIHNpbmdsZSBxdW90ZXMuCisg
ICAgICAgICAgICAgICAgICAgICMgKiBFbWJlZHMgYm90aCBzaW5nbGUgX2FuZF8gZG91YmxlIHF1
b3Rlcy4gVGhpcworICAgICAgICAgICAgICAgICAgICAjICAgY2FuJ3QgaGFwcGVuIG5hdHVyYWxs
eSwgYnV0IGl0IGNhbiBoYXBwZW4gaWYKKyAgICAgICAgICAgICAgICAgICAgIyAgIHlvdSBtb2Rp
ZnkgYW4gYXR0cmlidXRlIHZhbHVlIGFmdGVyIHBhcnNpbmcKKyAgICAgICAgICAgICAgICAgICAg
IyAgIHRoZSBkb2N1bWVudC4gTm93IHdlIGhhdmUgYSBiaXQgb2YgYQorICAgICAgICAgICAgICAg
ICAgICAjICAgcHJvYmxlbS4gV2Ugc29sdmUgaXQgYnkgZW5jbG9zaW5nIHRoZQorICAgICAgICAg
ICAgICAgICAgICAjICAgYXR0cmlidXRlIGluIHNpbmdsZSBxdW90ZXMsIGFuZCBlc2NhcGluZyBh
bnkKKyAgICAgICAgICAgICAgICAgICAgIyAgIGVtYmVkZGVkIHNpbmdsZSBxdW90ZXMgdG8gWE1M
IGVudGl0aWVzLgorICAgICAgICAgICAgICAgICAgICBpZiAnIicgaW4gdmFsOgorICAgICAgICAg
ICAgICAgICAgICAgICAgZm10ID0gIiVzPSclcyciCisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAiJyIgaW4gdmFsOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgVE9ETzogcmVwbGFj
ZSB3aXRoIGFwb3Mgd2hlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYXBwcm9wcmlh
dGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gdmFsLnJlcGxhY2UoIiciLCAi
JnNxdW90OyIpCisKKyAgICAgICAgICAgICAgICAgICAgIyBOb3cgd2UncmUgb2theSB3L3IvdCBx
dW90ZXMuIEJ1dCB0aGUgYXR0cmlidXRlCisgICAgICAgICAgICAgICAgICAgICMgdmFsdWUgbWln
aHQgYWxzbyBjb250YWluIGFuZ2xlIGJyYWNrZXRzLCBvcgorICAgICAgICAgICAgICAgICAgICAj
IGFtcGVyc2FuZHMgdGhhdCBhcmVuJ3QgcGFydCBvZiBlbnRpdGllcy4gV2UgbmVlZAorICAgICAg
ICAgICAgICAgICAgICAjIHRvIGVzY2FwZSB0aG9zZSB0byBYTUwgZW50aXRpZXMgdG9vLgorICAg
ICAgICAgICAgICAgICAgICB2YWwgPSBzZWxmLkJBUkVfQU1QRVJTQU5EX09SX0JSQUNLRVQuc3Vi
KHNlbGYuX3N1Yl9lbnRpdHksIHZhbCkKKworICAgICAgICAgICAgICAgIGF0dHJzLmFwcGVuZChm
bXQgJSAoc2VsZi50b0VuY29kaW5nKGtleSwgZW5jb2RpbmcpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2VsZi50b0VuY29kaW5nKHZhbCwgZW5jb2RpbmcpKSkKKyAgICAg
ICAgY2xvc2UgPSAnJworICAgICAgICBjbG9zZVRhZyA9ICcnCisgICAgICAgIGlmIHNlbGYuaXNT
ZWxmQ2xvc2luZzoKKyAgICAgICAgICAgIGNsb3NlID0gJyAvJworICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgY2xvc2VUYWcgPSAnPC8lcz4nICUgZW5jb2RlZE5hbWUKKworICAgICAgICBpbmRl
bnRUYWcsIGluZGVudENvbnRlbnRzID0gMCwgMAorICAgICAgICBpZiBwcmV0dHlQcmludDoKKyAg
ICAgICAgICAgIGluZGVudFRhZyA9IGluZGVudExldmVsCisgICAgICAgICAgICBzcGFjZSA9ICgn
ICcgKiAoaW5kZW50VGFnLTEpKQorICAgICAgICAgICAgaW5kZW50Q29udGVudHMgPSBpbmRlbnRU
YWcgKyAxCisgICAgICAgIGNvbnRlbnRzID0gc2VsZi5yZW5kZXJDb250ZW50cyhlbmNvZGluZywg
cHJldHR5UHJpbnQsIGluZGVudENvbnRlbnRzKQorICAgICAgICBpZiBzZWxmLmhpZGRlbjoKKyAg
ICAgICAgICAgIHMgPSBjb250ZW50cworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcyA9IFtd
CisgICAgICAgICAgICBhdHRyaWJ1dGVTdHJpbmcgPSAnJworICAgICAgICAgICAgaWYgYXR0cnM6
CisgICAgICAgICAgICAgICAgYXR0cmlidXRlU3RyaW5nID0gJyAnICsgJyAnLmpvaW4oYXR0cnMp
CisgICAgICAgICAgICBpZiBwcmV0dHlQcmludDoKKyAgICAgICAgICAgICAgICBzLmFwcGVuZChz
cGFjZSkKKyAgICAgICAgICAgIHMuYXBwZW5kKCc8JXMlcyVzPicgJSAoZW5jb2RlZE5hbWUsIGF0
dHJpYnV0ZVN0cmluZywgY2xvc2UpKQorICAgICAgICAgICAgaWYgcHJldHR5UHJpbnQ6CisgICAg
ICAgICAgICAgICAgcy5hcHBlbmQoIlxuIikKKyAgICAgICAgICAgIHMuYXBwZW5kKGNvbnRlbnRz
KQorICAgICAgICAgICAgaWYgcHJldHR5UHJpbnQgYW5kIGNvbnRlbnRzIGFuZCBjb250ZW50c1st
MV0gIT0gIlxuIjoKKyAgICAgICAgICAgICAgICBzLmFwcGVuZCgiXG4iKQorICAgICAgICAgICAg
aWYgcHJldHR5UHJpbnQgYW5kIGNsb3NlVGFnOgorICAgICAgICAgICAgICAgIHMuYXBwZW5kKHNw
YWNlKQorICAgICAgICAgICAgcy5hcHBlbmQoY2xvc2VUYWcpCisgICAgICAgICAgICBpZiBwcmV0
dHlQcmludCBhbmQgY2xvc2VUYWcgYW5kIHNlbGYubmV4dFNpYmxpbmc6CisgICAgICAgICAgICAg
ICAgcy5hcHBlbmQoIlxuIikKKyAgICAgICAgICAgIHMgPSAnJy5qb2luKHMpCisgICAgICAgIHJl
dHVybiBzCisKKyAgICBkZWYgZGVjb21wb3NlKHNlbGYpOgorICAgICAgICAiIiJSZWN1cnNpdmVs
eSBkZXN0cm95cyB0aGUgY29udGVudHMgb2YgdGhpcyB0cmVlLiIiIgorICAgICAgICBzZWxmLmV4
dHJhY3QoKQorICAgICAgICBpZiBsZW4oc2VsZi5jb250ZW50cykgPT0gMDoKKyAgICAgICAgICAg
IHJldHVybgorICAgICAgICBjdXJyZW50ID0gc2VsZi5jb250ZW50c1swXQorICAgICAgICB3aGls
ZSBjdXJyZW50IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgbmV4dCA9IGN1cnJlbnQubmV4dAor
ICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShjdXJyZW50LCBUYWcpOgorICAgICAgICAgICAgICAg
IGRlbCBjdXJyZW50LmNvbnRlbnRzWzpdCisgICAgICAgICAgICBjdXJyZW50LnBhcmVudCA9IE5v
bmUKKyAgICAgICAgICAgIGN1cnJlbnQucHJldmlvdXMgPSBOb25lCisgICAgICAgICAgICBjdXJy
ZW50LnByZXZpb3VzU2libGluZyA9IE5vbmUKKyAgICAgICAgICAgIGN1cnJlbnQubmV4dCA9IE5v
bmUKKyAgICAgICAgICAgIGN1cnJlbnQubmV4dFNpYmxpbmcgPSBOb25lCisgICAgICAgICAgICBj
dXJyZW50ID0gbmV4dAorCisgICAgZGVmIHByZXR0aWZ5KHNlbGYsIGVuY29kaW5nPURFRkFVTFRf
T1VUUFVUX0VOQ09ESU5HKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX19zdHJfXyhlbmNvZGluZywg
VHJ1ZSkKKworICAgIGRlZiByZW5kZXJDb250ZW50cyhzZWxmLCBlbmNvZGluZz1ERUZBVUxUX09V
VFBVVF9FTkNPRElORywKKyAgICAgICAgICAgICAgICAgICAgICAgcHJldHR5UHJpbnQ9RmFsc2Us
IGluZGVudExldmVsPTApOgorICAgICAgICAiIiJSZW5kZXJzIHRoZSBjb250ZW50cyBvZiB0aGlz
IHRhZyBhcyBhIHN0cmluZyBpbiB0aGUgZ2l2ZW4KKyAgICAgICAgZW5jb2RpbmcuIElmIGVuY29k
aW5nIGlzIE5vbmUsIHJldHVybnMgYSBVbmljb2RlIHN0cmluZy4uIiIiCisgICAgICAgIHM9W10K
KyAgICAgICAgZm9yIGMgaW4gc2VsZjoKKyAgICAgICAgICAgIHRleHQgPSBOb25lCisgICAgICAg
ICAgICBpZiBpc2luc3RhbmNlKGMsIE5hdmlnYWJsZVN0cmluZyk6CisgICAgICAgICAgICAgICAg
dGV4dCA9IGMuX19zdHJfXyhlbmNvZGluZykKKyAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShj
LCBUYWcpOgorICAgICAgICAgICAgICAgIHMuYXBwZW5kKGMuX19zdHJfXyhlbmNvZGluZywgcHJl
dHR5UHJpbnQsIGluZGVudExldmVsKSkKKyAgICAgICAgICAgIGlmIHRleHQgYW5kIHByZXR0eVBy
aW50OgorICAgICAgICAgICAgICAgIHRleHQgPSB0ZXh0LnN0cmlwKCkKKyAgICAgICAgICAgIGlm
IHRleHQ6CisgICAgICAgICAgICAgICAgaWYgcHJldHR5UHJpbnQ6CisgICAgICAgICAgICAgICAg
ICAgIHMuYXBwZW5kKCIgIiAqIChpbmRlbnRMZXZlbC0xKSkKKyAgICAgICAgICAgICAgICBzLmFw
cGVuZCh0ZXh0KQorICAgICAgICAgICAgICAgIGlmIHByZXR0eVByaW50OgorICAgICAgICAgICAg
ICAgICAgICBzLmFwcGVuZCgiXG4iKQorICAgICAgICByZXR1cm4gJycuam9pbihzKQorCisgICAg
I1NvdXAgbWV0aG9kcworCisgICAgZGVmIGZpbmQoc2VsZiwgbmFtZT1Ob25lLCBhdHRycz17fSwg
cmVjdXJzaXZlPVRydWUsIHRleHQ9Tm9uZSwKKyAgICAgICAgICAgICAqKmt3YXJncyk6CisgICAg
ICAgICIiIlJldHVybiBvbmx5IHRoZSBmaXJzdCBjaGlsZCBvZiB0aGlzIFRhZyBtYXRjaGluZyB0
aGUgZ2l2ZW4KKyAgICAgICAgY3JpdGVyaWEuIiIiCisgICAgICAgIHIgPSBOb25lCisgICAgICAg
IGwgPSBzZWxmLmZpbmRBbGwobmFtZSwgYXR0cnMsIHJlY3Vyc2l2ZSwgdGV4dCwgMSwgKiprd2Fy
Z3MpCisgICAgICAgIGlmIGw6CisgICAgICAgICAgICByID0gbFswXQorICAgICAgICByZXR1cm4g
cgorICAgIGZpbmRDaGlsZCA9IGZpbmQKKworICAgIGRlZiBmaW5kQWxsKHNlbGYsIG5hbWU9Tm9u
ZSwgYXR0cnM9e30sIHJlY3Vyc2l2ZT1UcnVlLCB0ZXh0PU5vbmUsCisgICAgICAgICAgICAgICAg
bGltaXQ9Tm9uZSwgKiprd2FyZ3MpOgorICAgICAgICAiIiJFeHRyYWN0cyBhIGxpc3Qgb2YgVGFn
IG9iamVjdHMgdGhhdCBtYXRjaCB0aGUgZ2l2ZW4KKyAgICAgICAgY3JpdGVyaWEuICBZb3UgY2Fu
IHNwZWNpZnkgdGhlIG5hbWUgb2YgdGhlIFRhZyBhbmQgYW55CisgICAgICAgIGF0dHJpYnV0ZXMg
eW91IHdhbnQgdGhlIFRhZyB0byBoYXZlLgorCisgICAgICAgIFRoZSB2YWx1ZSBvZiBhIGtleS12
YWx1ZSBwYWlyIGluIHRoZSAnYXR0cnMnIG1hcCBjYW4gYmUgYQorICAgICAgICBzdHJpbmcsIGEg
bGlzdCBvZiBzdHJpbmdzLCBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBvYmplY3QsIG9yIGEKKyAgICAg
ICAgY2FsbGFibGUgdGhhdCB0YWtlcyBhIHN0cmluZyBhbmQgcmV0dXJucyB3aGV0aGVyIG9yIG5v
dCB0aGUKKyAgICAgICAgc3RyaW5nIG1hdGNoZXMgZm9yIHNvbWUgY3VzdG9tIGRlZmluaXRpb24g
b2YgJ21hdGNoZXMnLiBUaGUKKyAgICAgICAgc2FtZSBpcyB0cnVlIG9mIHRoZSB0YWcgbmFtZS4i
IiIKKyAgICAgICAgZ2VuZXJhdG9yID0gc2VsZi5yZWN1cnNpdmVDaGlsZEdlbmVyYXRvcgorICAg
ICAgICBpZiBub3QgcmVjdXJzaXZlOgorICAgICAgICAgICAgZ2VuZXJhdG9yID0gc2VsZi5jaGls
ZEdlbmVyYXRvcgorICAgICAgICByZXR1cm4gc2VsZi5fZmluZEFsbChuYW1lLCBhdHRycywgdGV4
dCwgbGltaXQsIGdlbmVyYXRvciwgKiprd2FyZ3MpCisgICAgZmluZENoaWxkcmVuID0gZmluZEFs
bAorCisgICAgIyBQcmUtMy54IGNvbXBhdGliaWxpdHkgbWV0aG9kcworICAgIGZpcnN0ID0gZmlu
ZAorICAgIGZldGNoID0gZmluZEFsbAorCisgICAgZGVmIGZldGNoVGV4dChzZWxmLCB0ZXh0PU5v
bmUsIHJlY3Vyc2l2ZT1UcnVlLCBsaW1pdD1Ob25lKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZmlu
ZEFsbCh0ZXh0PXRleHQsIHJlY3Vyc2l2ZT1yZWN1cnNpdmUsIGxpbWl0PWxpbWl0KQorCisgICAg
ZGVmIGZpcnN0VGV4dChzZWxmLCB0ZXh0PU5vbmUsIHJlY3Vyc2l2ZT1UcnVlKToKKyAgICAgICAg
cmV0dXJuIHNlbGYuZmluZCh0ZXh0PXRleHQsIHJlY3Vyc2l2ZT1yZWN1cnNpdmUpCisKKyAgICAj
UHJpdmF0ZSBtZXRob2RzCisKKyAgICBkZWYgX2dldEF0dHJNYXAoc2VsZik6CisgICAgICAgICIi
IkluaXRpYWxpemVzIGEgbWFwIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgdGFnJ3MgYXR0cmlidXRl
cywKKyAgICAgICAgaWYgbm90IGFscmVhZHkgaW5pdGlhbGl6ZWQuIiIiCisgICAgICAgIGlmIG5v
dCBnZXRhdHRyKHNlbGYsICdhdHRyTWFwJyk6CisgICAgICAgICAgICBzZWxmLmF0dHJNYXAgPSB7
fQorICAgICAgICAgICAgZm9yIChrZXksIHZhbHVlKSBpbiBzZWxmLmF0dHJzOgorICAgICAgICAg
ICAgICAgIHNlbGYuYXR0ck1hcFtrZXldID0gdmFsdWUKKyAgICAgICAgcmV0dXJuIHNlbGYuYXR0
ck1hcAorCisgICAgI0dlbmVyYXRvciBtZXRob2RzCisgICAgZGVmIGNoaWxkR2VuZXJhdG9yKHNl
bGYpOgorICAgICAgICAjIEp1c3QgdXNlIHRoZSBpdGVyYXRvciBmcm9tIHRoZSBjb250ZW50cwor
ICAgICAgICByZXR1cm4gaXRlcihzZWxmLmNvbnRlbnRzKQorCisgICAgZGVmIHJlY3Vyc2l2ZUNo
aWxkR2VuZXJhdG9yKHNlbGYpOgorICAgICAgICBpZiBub3QgbGVuKHNlbGYuY29udGVudHMpOgor
ICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgorICAgICAgICBzdG9wTm9kZSA9IHNlbGYu
X2xhc3RSZWN1cnNpdmVDaGlsZCgpLm5leHQKKyAgICAgICAgY3VycmVudCA9IHNlbGYuY29udGVu
dHNbMF0KKyAgICAgICAgd2hpbGUgY3VycmVudCBpcyBub3Qgc3RvcE5vZGU6CisgICAgICAgICAg
ICB5aWVsZCBjdXJyZW50CisgICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC5uZXh0CisKKwor
IyBOZXh0LCBhIGNvdXBsZSBjbGFzc2VzIHRvIHJlcHJlc2VudCBxdWVyaWVzIGFuZCB0aGVpciBy
ZXN1bHRzLgorY2xhc3MgU291cFN0cmFpbmVyOgorICAgICIiIkVuY2Fwc3VsYXRlcyBhIG51bWJl
ciBvZiB3YXlzIG9mIG1hdGNoaW5nIGEgbWFya3VwIGVsZW1lbnQgKHRhZyBvcgorICAgIHRleHQp
LiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWU9Tm9uZSwgYXR0cnM9e30sIHRleHQ9
Tm9uZSwgKiprd2FyZ3MpOgorICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisgICAgICAgIGlmIGlz
aW5zdGFuY2UoYXR0cnMsIGJhc2VzdHJpbmcpOgorICAgICAgICAgICAga3dhcmdzWydjbGFzcydd
ID0gX21hdGNoX2Nzc19jbGFzcyhhdHRycykKKyAgICAgICAgICAgIGF0dHJzID0gTm9uZQorICAg
ICAgICBpZiBrd2FyZ3M6CisgICAgICAgICAgICBpZiBhdHRyczoKKyAgICAgICAgICAgICAgICBh
dHRycyA9IGF0dHJzLmNvcHkoKQorICAgICAgICAgICAgICAgIGF0dHJzLnVwZGF0ZShrd2FyZ3Mp
CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGF0dHJzID0ga3dhcmdzCisgICAg
ICAgIHNlbGYuYXR0cnMgPSBhdHRycworICAgICAgICBzZWxmLnRleHQgPSB0ZXh0CisKKyAgICBk
ZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi50ZXh0OgorICAgICAgICAgICAgcmV0
dXJuIHNlbGYudGV4dAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuICIlc3wlcyIg
JSAoc2VsZi5uYW1lLCBzZWxmLmF0dHJzKQorCisgICAgZGVmIHNlYXJjaFRhZyhzZWxmLCBtYXJr
dXBOYW1lPU5vbmUsIG1hcmt1cEF0dHJzPXt9KToKKyAgICAgICAgZm91bmQgPSBOb25lCisgICAg
ICAgIG1hcmt1cCA9IE5vbmUKKyAgICAgICAgaWYgaXNpbnN0YW5jZShtYXJrdXBOYW1lLCBUYWcp
OgorICAgICAgICAgICAgbWFya3VwID0gbWFya3VwTmFtZQorICAgICAgICAgICAgbWFya3VwQXR0
cnMgPSBtYXJrdXAKKyAgICAgICAgY2FsbEZ1bmN0aW9uV2l0aFRhZ0RhdGEgPSBjYWxsYWJsZShz
ZWxmLm5hbWUpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIG5vdCBpc2lu
c3RhbmNlKG1hcmt1cE5hbWUsIFRhZykKKworICAgICAgICBpZiAobm90IHNlbGYubmFtZSkgXAor
ICAgICAgICAgICAgICAgb3IgY2FsbEZ1bmN0aW9uV2l0aFRhZ0RhdGEgXAorICAgICAgICAgICAg
ICAgb3IgKG1hcmt1cCBhbmQgc2VsZi5fbWF0Y2hlcyhtYXJrdXAsIHNlbGYubmFtZSkpIFwKKyAg
ICAgICAgICAgICAgIG9yIChub3QgbWFya3VwIGFuZCBzZWxmLl9tYXRjaGVzKG1hcmt1cE5hbWUs
IHNlbGYubmFtZSkpOgorICAgICAgICAgICAgaWYgY2FsbEZ1bmN0aW9uV2l0aFRhZ0RhdGE6Cisg
ICAgICAgICAgICAgICAgbWF0Y2ggPSBzZWxmLm5hbWUobWFya3VwTmFtZSwgbWFya3VwQXR0cnMp
CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG1hdGNoID0gVHJ1ZQorICAgICAg
ICAgICAgICAgIG1hcmt1cEF0dHJNYXAgPSBOb25lCisgICAgICAgICAgICAgICAgZm9yIGF0dHIs
IG1hdGNoQWdhaW5zdCBpbiBzZWxmLmF0dHJzLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgICAg
IGlmIG5vdCBtYXJrdXBBdHRyTWFwOgorICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGhhc2F0
dHIobWFya3VwQXR0cnMsICdnZXQnKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJr
dXBBdHRyTWFwID0gbWFya3VwQXR0cnMKKyAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmt1cEF0dHJNYXAgPSB7fQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciBrLHYgaW4gbWFya3VwQXR0cnM6CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1hcmt1cEF0dHJNYXBba10gPSB2CisgICAgICAgICAgICAgICAg
ICAgIGF0dHJWYWx1ZSA9IG1hcmt1cEF0dHJNYXAuZ2V0KGF0dHIpCisgICAgICAgICAgICAgICAg
ICAgIGlmIG5vdCBzZWxmLl9tYXRjaGVzKGF0dHJWYWx1ZSwgbWF0Y2hBZ2FpbnN0KToKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG1hdGNoID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrCisgICAgICAgICAgICBpZiBtYXRjaDoKKyAgICAgICAgICAgICAgICBpZiBtYXJrdXA6
CisgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gbWFya3VwCisgICAgICAgICAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBtYXJrdXBOYW1lCisgICAgICAgIHJldHVy
biBmb3VuZAorCisgICAgZGVmIHNlYXJjaChzZWxmLCBtYXJrdXApOgorICAgICAgICAjcHJpbnQg
J2xvb2tpbmcgZm9yICVzIGluICVzJyAlIChzZWxmLCBtYXJrdXApCisgICAgICAgIGZvdW5kID0g
Tm9uZQorICAgICAgICAjIElmIGdpdmVuIGEgbGlzdCBvZiBpdGVtcywgc2NhbiBpdCBmb3IgYSB0
ZXh0IGVsZW1lbnQgdGhhdAorICAgICAgICAjIG1hdGNoZXMuCisgICAgICAgIGlmIGhhc2F0dHIo
bWFya3VwLCAiX19pdGVyX18iKSBcCisgICAgICAgICAgICAgICAgYW5kIG5vdCBpc2luc3RhbmNl
KG1hcmt1cCwgVGFnKToKKyAgICAgICAgICAgIGZvciBlbGVtZW50IGluIG1hcmt1cDoKKyAgICAg
ICAgICAgICAgICBpZiBpc2luc3RhbmNlKGVsZW1lbnQsIE5hdmlnYWJsZVN0cmluZykgXAorICAg
ICAgICAgICAgICAgICAgICAgICBhbmQgc2VsZi5zZWFyY2goZWxlbWVudCk6CisgICAgICAgICAg
ICAgICAgICAgIGZvdW5kID0gZWxlbWVudAorICAgICAgICAgICAgICAgICAgICBicmVhaworICAg
ICAgICAjIElmIGl0J3MgYSBUYWcsIG1ha2Ugc3VyZSBpdHMgbmFtZSBvciBhdHRyaWJ1dGVzIG1h
dGNoLgorICAgICAgICAjIERvbid0IGJvdGhlciB3aXRoIFRhZ3MgaWYgd2UncmUgc2VhcmNoaW5n
IGZvciB0ZXh0LgorICAgICAgICBlbGlmIGlzaW5zdGFuY2UobWFya3VwLCBUYWcpOgorICAgICAg
ICAgICAgaWYgbm90IHNlbGYudGV4dDoKKyAgICAgICAgICAgICAgICBmb3VuZCA9IHNlbGYuc2Vh
cmNoVGFnKG1hcmt1cCkKKyAgICAgICAgIyBJZiBpdCdzIHRleHQsIG1ha2Ugc3VyZSB0aGUgdGV4
dCBtYXRjaGVzLgorICAgICAgICBlbGlmIGlzaW5zdGFuY2UobWFya3VwLCBOYXZpZ2FibGVTdHJp
bmcpIG9yIFwKKyAgICAgICAgICAgICAgICAgaXNpbnN0YW5jZShtYXJrdXAsIGJhc2VzdHJpbmcp
OgorICAgICAgICAgICAgaWYgc2VsZi5fbWF0Y2hlcyhtYXJrdXAsIHNlbGYudGV4dCk6CisgICAg
ICAgICAgICAgICAgZm91bmQgPSBtYXJrdXAKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJh
aXNlIEV4Y2VwdGlvbiwgIkkgZG9uJ3Qga25vdyBob3cgdG8gbWF0Y2ggYWdhaW5zdCBhICVzIiBc
CisgICAgICAgICAgICAgICAgICAlIG1hcmt1cC5fX2NsYXNzX18KKyAgICAgICAgcmV0dXJuIGZv
dW5kCisKKyAgICBkZWYgX21hdGNoZXMoc2VsZiwgbWFya3VwLCBtYXRjaEFnYWluc3QpOgorICAg
ICAgICAjcHJpbnQgIk1hdGNoaW5nICVzIGFnYWluc3QgJXMiICUgKG1hcmt1cCwgbWF0Y2hBZ2Fp
bnN0KQorICAgICAgICByZXN1bHQgPSBGYWxzZQorICAgICAgICBpZiBtYXRjaEFnYWluc3QgaXMg
VHJ1ZToKKyAgICAgICAgICAgIHJlc3VsdCA9IG1hcmt1cCBpcyBub3QgTm9uZQorICAgICAgICBl
bGlmIGNhbGxhYmxlKG1hdGNoQWdhaW5zdCk6CisgICAgICAgICAgICByZXN1bHQgPSBtYXRjaEFn
YWluc3QobWFya3VwKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgI0N1c3RvbSBtYXRjaCBt
ZXRob2RzIHRha2UgdGhlIHRhZyBhcyBhbiBhcmd1bWVudCwgYnV0IGFsbAorICAgICAgICAgICAg
I290aGVyIHdheXMgb2YgbWF0Y2hpbmcgbWF0Y2ggdGhlIHRhZyBuYW1lIGFzIGEgc3RyaW5nLgor
ICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShtYXJrdXAsIFRhZyk6CisgICAgICAgICAgICAgICAg
bWFya3VwID0gbWFya3VwLm5hbWUKKyAgICAgICAgICAgIGlmIG1hcmt1cCBhbmQgbm90IGlzaW5z
dGFuY2UobWFya3VwLCBiYXNlc3RyaW5nKToKKyAgICAgICAgICAgICAgICBtYXJrdXAgPSB1bmlj
b2RlKG1hcmt1cCkKKyAgICAgICAgICAgICNOb3cgd2Uga25vdyB0aGF0IGNodW5rIGlzIGVpdGhl
ciBhIHN0cmluZywgb3IgTm9uZS4KKyAgICAgICAgICAgIGlmIGhhc2F0dHIobWF0Y2hBZ2FpbnN0
LCAnbWF0Y2gnKToKKyAgICAgICAgICAgICAgICAjIEl0J3MgYSByZWdleHAgb2JqZWN0LgorICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IG1hcmt1cCBhbmQgbWF0Y2hBZ2FpbnN0LnNlYXJjaChtYXJr
dXApCisgICAgICAgICAgICBlbGlmIGhhc2F0dHIobWF0Y2hBZ2FpbnN0LCAnX19pdGVyX18nKTog
IyBsaXN0LWxpa2UKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBtYXJrdXAgaW4gbWF0Y2hBZ2Fp
bnN0CisgICAgICAgICAgICBlbGlmIGhhc2F0dHIobWF0Y2hBZ2FpbnN0LCAnaXRlbXMnKToKKyAg
ICAgICAgICAgICAgICByZXN1bHQgPSBtYXJrdXAuaGFzX2tleShtYXRjaEFnYWluc3QpCisgICAg
ICAgICAgICBlbGlmIG1hdGNoQWdhaW5zdCBhbmQgaXNpbnN0YW5jZShtYXJrdXAsIGJhc2VzdHJp
bmcpOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UobWFya3VwLCB1bmljb2RlKToKKyAg
ICAgICAgICAgICAgICAgICAgbWF0Y2hBZ2FpbnN0ID0gdW5pY29kZShtYXRjaEFnYWluc3QpCisg
ICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgbWF0Y2hBZ2FpbnN0ID0g
c3RyKG1hdGNoQWdhaW5zdCkKKworICAgICAgICAgICAgaWYgbm90IHJlc3VsdDoKKyAgICAgICAg
ICAgICAgICByZXN1bHQgPSBtYXRjaEFnYWluc3QgPT0gbWFya3VwCisgICAgICAgIHJldHVybiBy
ZXN1bHQKKworY2xhc3MgUmVzdWx0U2V0KGxpc3QpOgorICAgICIiIkEgUmVzdWx0U2V0IGlzIGp1
c3QgYSBsaXN0IHRoYXQga2VlcHMgdHJhY2sgb2YgdGhlIFNvdXBTdHJhaW5lcgorICAgIHRoYXQg
Y3JlYXRlZCBpdC4iIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc291cmNlKToKKyAgICAgICAg
bGlzdC5fX2luaXRfXyhbXSkKKyAgICAgICAgc2VsZi5zb3VyY2UgPSBzb3VyY2UKKworIyBOb3cs
IHNvbWUgaGVscGVyIGZ1bmN0aW9ucy4KKworZGVmIGJ1aWxkVGFnTWFwKGRlZmF1bHQsICphcmdz
KToKKyAgICAiIiJUdXJucyBhIGxpc3Qgb2YgbWFwcywgbGlzdHMsIG9yIHNjYWxhcnMgaW50byBh
IHNpbmdsZSBtYXAuCisgICAgVXNlZCB0byBidWlsZCB0aGUgU0VMRl9DTE9TSU5HX1RBR1MsIE5F
U1RBQkxFX1RBR1MsIGFuZAorICAgIE5FU1RJTkdfUkVTRVRfVEFHUyBtYXBzIG91dCBvZiBsaXN0
cyBhbmQgcGFydGlhbCBtYXBzLiIiIgorICAgIGJ1aWx0ID0ge30KKyAgICBmb3IgcG9ydGlvbiBp
biBhcmdzOgorICAgICAgICBpZiBoYXNhdHRyKHBvcnRpb24sICdpdGVtcycpOgorICAgICAgICAg
ICAgI0l0J3MgYSBtYXAuIE1lcmdlIGl0LgorICAgICAgICAgICAgZm9yIGssdiBpbiBwb3J0aW9u
Lml0ZW1zKCk6CisgICAgICAgICAgICAgICAgYnVpbHRba10gPSB2CisgICAgICAgIGVsaWYgaGFz
YXR0cihwb3J0aW9uLCAnX19pdGVyX18nKTogIyBpcyBhIGxpc3QKKyAgICAgICAgICAgICNJdCdz
IGEgbGlzdC4gTWFwIGVhY2ggaXRlbSB0byB0aGUgZGVmYXVsdC4KKyAgICAgICAgICAgIGZvciBr
IGluIHBvcnRpb246CisgICAgICAgICAgICAgICAgYnVpbHRba10gPSBkZWZhdWx0CisgICAgICAg
IGVsc2U6CisgICAgICAgICAgICAjSXQncyBhIHNjYWxhci4gTWFwIGl0IHRvIHRoZSBkZWZhdWx0
LgorICAgICAgICAgICAgYnVpbHRbcG9ydGlvbl0gPSBkZWZhdWx0CisgICAgcmV0dXJuIGJ1aWx0
CisKKyMgTm93LCB0aGUgcGFyc2VyIGNsYXNzZXMuCisKK2NsYXNzIEJlYXV0aWZ1bFN0b25lU291
cChUYWcsIFNHTUxQYXJzZXIpOgorCisgICAgIiIiVGhpcyBjbGFzcyBjb250YWlucyB0aGUgYmFz
aWMgcGFyc2VyIGFuZCBzZWFyY2ggY29kZS4gSXQgZGVmaW5lcworICAgIGEgcGFyc2VyIHRoYXQg
a25vd3Mgbm90aGluZyBhYm91dCB0YWcgYmVoYXZpb3IgZXhjZXB0IGZvciB0aGUKKyAgICBmb2xs
b3dpbmc6CisKKyAgICAgIFlvdSBjYW4ndCBjbG9zZSBhIHRhZyB3aXRob3V0IGNsb3NpbmcgYWxs
IHRoZSB0YWdzIGl0IGVuY2xvc2VzLgorICAgICAgVGhhdCBpcywgIjxmb28+PGJhcj48L2Zvbz4i
IGFjdHVhbGx5IG1lYW5zCisgICAgICAiPGZvbz48YmFyPjwvYmFyPjwvZm9vPiIuCisKKyAgICBb
QW5vdGhlciBwb3NzaWJsZSBleHBsYW5hdGlvbiBpcyAiPGZvbz48YmFyIC8+PC9mb28+IiwgYnV0
IHNpbmNlCisgICAgdGhpcyBjbGFzcyBkZWZpbmVzIG5vIFNFTEZfQ0xPU0lOR19UQUdTLCBpdCB3
aWxsIG5ldmVyIHVzZSB0aGF0CisgICAgZXhwbGFuYXRpb24uXQorCisgICAgVGhpcyBjbGFzcyBp
cyB1c2VmdWwgZm9yIHBhcnNpbmcgWE1MIG9yIG1hZGUtdXAgbWFya3VwIGxhbmd1YWdlcywKKyAg
ICBvciB3aGVuIEJlYXV0aWZ1bFNvdXAgbWFrZXMgYW4gYXNzdW1wdGlvbiBjb3VudGVyIHRvIHdo
YXQgeW91IHdlcmUKKyAgICBleHBlY3RpbmcuIiIiCisKKyAgICBTRUxGX0NMT1NJTkdfVEFHUyA9
IHt9CisgICAgTkVTVEFCTEVfVEFHUyA9IHt9CisgICAgUkVTRVRfTkVTVElOR19UQUdTID0ge30K
KyAgICBRVU9URV9UQUdTID0ge30KKyAgICBQUkVTRVJWRV9XSElURVNQQUNFX1RBR1MgPSBbXQor
CisgICAgTUFSS1VQX01BU1NBR0UgPSBbKHJlLmNvbXBpbGUoJyg8W148Pl0qKS8+JyksCisgICAg
ICAgICAgICAgICAgICAgICAgIGxhbWJkYSB4OiB4Lmdyb3VwKDEpICsgJyAvPicpLAorICAgICAg
ICAgICAgICAgICAgICAgIChyZS5jb21waWxlKCc8IVxzKyhbXjw+XSopPicpLAorICAgICAgICAg
ICAgICAgICAgICAgICBsYW1iZGEgeDogJzwhJyArIHguZ3JvdXAoMSkgKyAnPicpCisgICAgICAg
ICAgICAgICAgICAgICAgXQorCisgICAgUk9PVF9UQUdfTkFNRSA9IHUnW2RvY3VtZW50XScKKwor
ICAgIEhUTUxfRU5USVRJRVMgPSAiaHRtbCIKKyAgICBYTUxfRU5USVRJRVMgPSAieG1sIgorICAg
IFhIVE1MX0VOVElUSUVTID0gInhodG1sIgorICAgICMgVE9ETzogVGhpcyBvbmx5IGV4aXN0cyBm
b3IgYmFja3dhcmRzLWNvbXBhdGliaWxpdHkKKyAgICBBTExfRU5USVRJRVMgPSBYSFRNTF9FTlRJ
VElFUworCisgICAgIyBVc2VkIHdoZW4gZGV0ZXJtaW5pbmcgd2hldGhlciBhIHRleHQgbm9kZSBp
cyBhbGwgd2hpdGVzcGFjZSBhbmQKKyAgICAjIGNhbiBiZSByZXBsYWNlZCB3aXRoIGEgc2luZ2xl
IHNwYWNlLiBBIHRleHQgbm9kZSB0aGF0IGNvbnRhaW5zCisgICAgIyBmYW5jeSBVbmljb2RlIHNw
YWNlcyAodXN1YWxseSBub24tYnJlYWtpbmcpIHNob3VsZCBiZSBsZWZ0CisgICAgIyBhbG9uZS4K
KyAgICBTVFJJUF9BU0NJSV9TUEFDRVMgPSB7IDk6IE5vbmUsIDEwOiBOb25lLCAxMjogTm9uZSwg
MTM6IE5vbmUsIDMyOiBOb25lLCB9CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWFya3VwPSIi
LCBwYXJzZU9ubHlUaGVzZT1Ob25lLCBmcm9tRW5jb2Rpbmc9Tm9uZSwKKyAgICAgICAgICAgICAg
ICAgbWFya3VwTWFzc2FnZT1UcnVlLCBzbWFydFF1b3Rlc1RvPVhNTF9FTlRJVElFUywKKyAgICAg
ICAgICAgICAgICAgY29udmVydEVudGl0aWVzPU5vbmUsIHNlbGZDbG9zaW5nVGFncz1Ob25lLCBp
c0hUTUw9RmFsc2UpOgorICAgICAgICAiIiJUaGUgU291cCBvYmplY3QgaXMgaW5pdGlhbGl6ZWQg
YXMgdGhlICdyb290IHRhZycsIGFuZCB0aGUKKyAgICAgICAgcHJvdmlkZWQgbWFya3VwICh3aGlj
aCBjYW4gYmUgYSBzdHJpbmcgb3IgYSBmaWxlLWxpa2Ugb2JqZWN0KQorICAgICAgICBpcyBmZWQg
aW50byB0aGUgdW5kZXJseWluZyBwYXJzZXIuCisKKyAgICAgICAgc2dtbGxpYiB3aWxsIHByb2Nl
c3MgbW9zdCBiYWQgSFRNTCwgYW5kIHRoZSBCZWF1dGlmdWxTb3VwCisgICAgICAgIGNsYXNzIGhh
cyBzb21lIHRyaWNrcyBmb3IgZGVhbGluZyB3aXRoIHNvbWUgSFRNTCB0aGF0IGtpbGxzCisgICAg
ICAgIHNnbWxsaWIsIGJ1dCBCZWF1dGlmdWwgU291cCBjYW4gbm9uZXRoZWxlc3MgY2hva2Ugb3Ig
bG9zZSBkYXRhCisgICAgICAgIGlmIHlvdXIgZGF0YSB1c2VzIHNlbGYtY2xvc2luZyB0YWdzIG9y
IGRlY2xhcmF0aW9ucworICAgICAgICBpbmNvcnJlY3RseS4KKworICAgICAgICBCeSBkZWZhdWx0
LCBCZWF1dGlmdWwgU291cCB1c2VzIHJlZ2V4ZXMgdG8gc2FuaXRpemUgaW5wdXQsCisgICAgICAg
IGF2b2lkaW5nIHRoZSB2YXN0IG1ham9yaXR5IG9mIHRoZXNlIHByb2JsZW1zLiBJZiB0aGUgcHJv
YmxlbXMKKyAgICAgICAgZG9uJ3QgYXBwbHkgdG8geW91LCBwYXNzIGluIEZhbHNlIGZvciBtYXJr
dXBNYXNzYWdlLCBhbmQKKyAgICAgICAgeW91J2xsIGdldCBiZXR0ZXIgcGVyZm9ybWFuY2UuCisK
KyAgICAgICAgVGhlIGRlZmF1bHQgcGFyc2VyIG1hc3NhZ2UgdGVjaG5pcXVlcyBmaXggdGhlIHR3
byBtb3N0IGNvbW1vbgorICAgICAgICBpbnN0YW5jZXMgb2YgaW52YWxpZCBIVE1MIHRoYXQgY2hv
a2Ugc2dtbGxpYjoKKworICAgICAgICAgPGJyLz4gKE5vIHNwYWNlIGJldHdlZW4gbmFtZSBvZiBj
bG9zaW5nIHRhZyBhbmQgdGFnIGNsb3NlKQorICAgICAgICAgPCEgLS1Db21tZW50LS0+IChFeHRy
YW5lb3VzIHdoaXRlc3BhY2UgaW4gZGVjbGFyYXRpb24pCisKKyAgICAgICAgWW91IGNhbiBwYXNz
IGluIGEgY3VzdG9tIGxpc3Qgb2YgKFJFIG9iamVjdCwgcmVwbGFjZSBtZXRob2QpCisgICAgICAg
IHR1cGxlcyB0byBnZXQgQmVhdXRpZnVsIFNvdXAgdG8gc2NydWIgeW91ciBpbnB1dCB0aGUgd2F5
IHlvdQorICAgICAgICB3YW50LiIiIgorCisgICAgICAgIHNlbGYucGFyc2VPbmx5VGhlc2UgPSBw
YXJzZU9ubHlUaGVzZQorICAgICAgICBzZWxmLmZyb21FbmNvZGluZyA9IGZyb21FbmNvZGluZwor
ICAgICAgICBzZWxmLnNtYXJ0UXVvdGVzVG8gPSBzbWFydFF1b3Rlc1RvCisgICAgICAgIHNlbGYu
Y29udmVydEVudGl0aWVzID0gY29udmVydEVudGl0aWVzCisgICAgICAgICMgU2V0IHRoZSBydWxl
cyBmb3IgaG93IHdlJ2xsIGRlYWwgd2l0aCB0aGUgZW50aXRpZXMgd2UKKyAgICAgICAgIyBlbmNv
dW50ZXIKKyAgICAgICAgaWYgc2VsZi5jb252ZXJ0RW50aXRpZXM6CisgICAgICAgICAgICAjIEl0
IGRvZXNuJ3QgbWFrZSBzZW5zZSB0byBjb252ZXJ0IGVuY29kZWQgY2hhcmFjdGVycyB0bworICAg
ICAgICAgICAgIyBlbnRpdGllcyBldmVuIHdoaWxlIHlvdSdyZSBjb252ZXJ0aW5nIGVudGl0aWVz
IHRvIFVuaWNvZGUuCisgICAgICAgICAgICAjIEp1c3QgY29udmVydCBpdCBhbGwgdG8gVW5pY29k
ZS4KKyAgICAgICAgICAgIHNlbGYuc21hcnRRdW90ZXNUbyA9IE5vbmUKKyAgICAgICAgICAgIGlm
IGNvbnZlcnRFbnRpdGllcyA9PSBzZWxmLkhUTUxfRU5USVRJRVM6CisgICAgICAgICAgICAgICAg
c2VsZi5jb252ZXJ0WE1MRW50aXRpZXMgPSBGYWxzZQorICAgICAgICAgICAgICAgIHNlbGYuY29u
dmVydEhUTUxFbnRpdGllcyA9IFRydWUKKyAgICAgICAgICAgICAgICBzZWxmLmVzY2FwZVVucmVj
b2duaXplZEVudGl0aWVzID0gVHJ1ZQorICAgICAgICAgICAgZWxpZiBjb252ZXJ0RW50aXRpZXMg
PT0gc2VsZi5YSFRNTF9FTlRJVElFUzoKKyAgICAgICAgICAgICAgICBzZWxmLmNvbnZlcnRYTUxF
bnRpdGllcyA9IFRydWUKKyAgICAgICAgICAgICAgICBzZWxmLmNvbnZlcnRIVE1MRW50aXRpZXMg
PSBUcnVlCisgICAgICAgICAgICAgICAgc2VsZi5lc2NhcGVVbnJlY29nbml6ZWRFbnRpdGllcyA9
IEZhbHNlCisgICAgICAgICAgICBlbGlmIGNvbnZlcnRFbnRpdGllcyA9PSBzZWxmLlhNTF9FTlRJ
VElFUzoKKyAgICAgICAgICAgICAgICBzZWxmLmNvbnZlcnRYTUxFbnRpdGllcyA9IFRydWUKKyAg
ICAgICAgICAgICAgICBzZWxmLmNvbnZlcnRIVE1MRW50aXRpZXMgPSBGYWxzZQorICAgICAgICAg
ICAgICAgIHNlbGYuZXNjYXBlVW5yZWNvZ25pemVkRW50aXRpZXMgPSBGYWxzZQorICAgICAgICBl
bHNlOgorICAgICAgICAgICAgc2VsZi5jb252ZXJ0WE1MRW50aXRpZXMgPSBGYWxzZQorICAgICAg
ICAgICAgc2VsZi5jb252ZXJ0SFRNTEVudGl0aWVzID0gRmFsc2UKKyAgICAgICAgICAgIHNlbGYu
ZXNjYXBlVW5yZWNvZ25pemVkRW50aXRpZXMgPSBGYWxzZQorCisgICAgICAgIHNlbGYuaW5zdGFu
Y2VTZWxmQ2xvc2luZ1RhZ3MgPSBidWlsZFRhZ01hcChOb25lLCBzZWxmQ2xvc2luZ1RhZ3MpCisg
ICAgICAgIFNHTUxQYXJzZXIuX19pbml0X18oc2VsZikKKworICAgICAgICBpZiBoYXNhdHRyKG1h
cmt1cCwgJ3JlYWQnKTogICAgICAgICMgSXQncyBhIGZpbGUtdHlwZSBvYmplY3QuCisgICAgICAg
ICAgICBtYXJrdXAgPSBtYXJrdXAucmVhZCgpCisgICAgICAgIHNlbGYubWFya3VwID0gbWFya3Vw
CisgICAgICAgIHNlbGYubWFya3VwTWFzc2FnZSA9IG1hcmt1cE1hc3NhZ2UKKyAgICAgICAgdHJ5
OgorICAgICAgICAgICAgc2VsZi5fZmVlZChpc0hUTUw9aXNIVE1MKQorICAgICAgICBleGNlcHQg
U3RvcFBhcnNpbmc6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYubWFya3VwID0gTm9u
ZSAgICAgICAgICAgICAgICAgIyBUaGUgbWFya3VwIGNhbiBub3cgYmUgR0NlZAorCisgICAgZGVm
IGNvbnZlcnRfY2hhcnJlZihzZWxmLCBuYW1lKToKKyAgICAgICAgIiIiVGhpcyBtZXRob2QgZml4
ZXMgYSBidWcgaW4gUHl0aG9uJ3MgU0dNTFBhcnNlci4iIiIKKyAgICAgICAgdHJ5OgorICAgICAg
ICAgICAgbiA9IGludChuYW1lKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAg
ICAgIHJldHVybgorICAgICAgICBpZiBub3QgMCA8PSBuIDw9IDEyNyA6ICMgQVNDSUkgZW5kcyBh
dCAxMjcsIG5vdCAyNTUKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICByZXR1cm4gc2VsZi5j
b252ZXJ0X2NvZGVwb2ludChuKQorCisgICAgZGVmIF9mZWVkKHNlbGYsIGluRG9jdW1lbnRFbmNv
ZGluZz1Ob25lLCBpc0hUTUw9RmFsc2UpOgorICAgICAgICAjIENvbnZlcnQgdGhlIGRvY3VtZW50
IHRvIFVuaWNvZGUuCisgICAgICAgIG1hcmt1cCA9IHNlbGYubWFya3VwCisgICAgICAgIGlmIGlz
aW5zdGFuY2UobWFya3VwLCB1bmljb2RlKToKKyAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNl
bGYsICdvcmlnaW5hbEVuY29kaW5nJyk6CisgICAgICAgICAgICAgICAgc2VsZi5vcmlnaW5hbEVu
Y29kaW5nID0gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZGFtbWl0ID0gVW5pY29k
ZURhbW1pdFwKKyAgICAgICAgICAgICAgICAgICAgIChtYXJrdXAsIFtzZWxmLmZyb21FbmNvZGlu
ZywgaW5Eb2N1bWVudEVuY29kaW5nXSwKKyAgICAgICAgICAgICAgICAgICAgICBzbWFydFF1b3Rl
c1RvPXNlbGYuc21hcnRRdW90ZXNUbywgaXNIVE1MPWlzSFRNTCkKKyAgICAgICAgICAgIG1hcmt1
cCA9IGRhbW1pdC51bmljb2RlCisgICAgICAgICAgICBzZWxmLm9yaWdpbmFsRW5jb2RpbmcgPSBk
YW1taXQub3JpZ2luYWxFbmNvZGluZworICAgICAgICAgICAgc2VsZi5kZWNsYXJlZEhUTUxFbmNv
ZGluZyA9IGRhbW1pdC5kZWNsYXJlZEhUTUxFbmNvZGluZworICAgICAgICBpZiBtYXJrdXA6Cisg
ICAgICAgICAgICBpZiBzZWxmLm1hcmt1cE1hc3NhZ2U6CisgICAgICAgICAgICAgICAgaWYgbm90
IGhhc2F0dHIoc2VsZi5tYXJrdXBNYXNzYWdlLCAiX19pdGVyX18iKToKKyAgICAgICAgICAgICAg
ICAgICAgc2VsZi5tYXJrdXBNYXNzYWdlID0gc2VsZi5NQVJLVVBfTUFTU0FHRQorICAgICAgICAg
ICAgICAgIGZvciBmaXgsIG0gaW4gc2VsZi5tYXJrdXBNYXNzYWdlOgorICAgICAgICAgICAgICAg
ICAgICBtYXJrdXAgPSBmaXguc3ViKG0sIG1hcmt1cCkKKyAgICAgICAgICAgICAgICAjIFRPRE86
IFdlIGdldCByaWQgb2YgbWFya3VwTWFzc2FnZSBzbyB0aGF0IHRoZQorICAgICAgICAgICAgICAg
ICMgc291cCBvYmplY3QgY2FuIGJlIGRlZXBjb3BpZWQgbGF0ZXIgb24uIFNvbWUKKyAgICAgICAg
ICAgICAgICAjIFB5dGhvbiBpbnN0YWxsYXRpb25zIGNhbid0IGNvcHkgcmVnZXhlcy4gSWYgYW55
b25lCisgICAgICAgICAgICAgICAgIyB3YXMgcmVseWluZyBvbiB0aGUgZXhpc3RlbmNlIG9mIG1h
cmt1cE1hc3NhZ2UsIHRoaXMKKyAgICAgICAgICAgICAgICAjIG1pZ2h0IGNhdXNlIHByb2JsZW1z
LgorICAgICAgICAgICAgICAgIGRlbChzZWxmLm1hcmt1cE1hc3NhZ2UpCisgICAgICAgIHNlbGYu
cmVzZXQoKQorCisgICAgICAgIFNHTUxQYXJzZXIuZmVlZChzZWxmLCBtYXJrdXApCisgICAgICAg
ICMgQ2xvc2Ugb3V0IGFueSB1bmZpbmlzaGVkIHN0cmluZ3MgYW5kIGNsb3NlIGFsbCB0aGUgb3Bl
biB0YWdzLgorICAgICAgICBzZWxmLmVuZERhdGEoKQorICAgICAgICB3aGlsZSBzZWxmLmN1cnJl
bnRUYWcubmFtZSAhPSBzZWxmLlJPT1RfVEFHX05BTUU6CisgICAgICAgICAgICBzZWxmLnBvcFRh
ZygpCisKKyAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgbWV0aG9kTmFtZSk6CisgICAgICAgICIi
IlRoaXMgbWV0aG9kIHJvdXRlcyBtZXRob2QgY2FsbCByZXF1ZXN0cyB0byBlaXRoZXIgdGhlIFNH
TUxQYXJzZXIKKyAgICAgICAgc3VwZXJjbGFzcyBvciB0aGUgVGFnIHN1cGVyY2xhc3MsIGRlcGVu
ZGluZyBvbiB0aGUgbWV0aG9kIG5hbWUuIiIiCisgICAgICAgICNwcmludCAiX19nZXRhdHRyX18g
Y2FsbGVkIG9uICVzLiVzIiAlIChzZWxmLl9fY2xhc3NfXywgbWV0aG9kTmFtZSkKKworICAgICAg
ICBpZiBtZXRob2ROYW1lLnN0YXJ0c3dpdGgoJ3N0YXJ0XycpIG9yIG1ldGhvZE5hbWUuc3RhcnRz
d2l0aCgnZW5kXycpIFwKKyAgICAgICAgICAgICAgIG9yIG1ldGhvZE5hbWUuc3RhcnRzd2l0aCgn
ZG9fJyk6CisgICAgICAgICAgICByZXR1cm4gU0dNTFBhcnNlci5fX2dldGF0dHJfXyhzZWxmLCBt
ZXRob2ROYW1lKQorICAgICAgICBlbGlmIG5vdCBtZXRob2ROYW1lLnN0YXJ0c3dpdGgoJ19fJyk6
CisgICAgICAgICAgICByZXR1cm4gVGFnLl9fZ2V0YXR0cl9fKHNlbGYsIG1ldGhvZE5hbWUpCisg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcgorCisgICAgZGVm
IGlzU2VsZkNsb3NpbmdUYWcoc2VsZiwgbmFtZSk6CisgICAgICAgICIiIlJldHVybnMgdHJ1ZSBp
ZmYgdGhlIGdpdmVuIHN0cmluZyBpcyB0aGUgbmFtZSBvZiBhCisgICAgICAgIHNlbGYtY2xvc2lu
ZyB0YWcgYWNjb3JkaW5nIHRvIHRoaXMgcGFyc2VyLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5T
RUxGX0NMT1NJTkdfVEFHUy5oYXNfa2V5KG5hbWUpIFwKKyAgICAgICAgICAgICAgIG9yIHNlbGYu
aW5zdGFuY2VTZWxmQ2xvc2luZ1RhZ3MuaGFzX2tleShuYW1lKQorCisgICAgZGVmIHJlc2V0KHNl
bGYpOgorICAgICAgICBUYWcuX19pbml0X18oc2VsZiwgc2VsZiwgc2VsZi5ST09UX1RBR19OQU1F
KQorICAgICAgICBzZWxmLmhpZGRlbiA9IDEKKyAgICAgICAgU0dNTFBhcnNlci5yZXNldChzZWxm
KQorICAgICAgICBzZWxmLmN1cnJlbnREYXRhID0gW10KKyAgICAgICAgc2VsZi5jdXJyZW50VGFn
ID0gTm9uZQorICAgICAgICBzZWxmLnRhZ1N0YWNrID0gW10KKyAgICAgICAgc2VsZi5xdW90ZVN0
YWNrID0gW10KKyAgICAgICAgc2VsZi5wdXNoVGFnKHNlbGYpCisKKyAgICBkZWYgcG9wVGFnKHNl
bGYpOgorICAgICAgICB0YWcgPSBzZWxmLnRhZ1N0YWNrLnBvcCgpCisKKyAgICAgICAgI3ByaW50
ICJQb3AiLCB0YWcubmFtZQorICAgICAgICBpZiBzZWxmLnRhZ1N0YWNrOgorICAgICAgICAgICAg
c2VsZi5jdXJyZW50VGFnID0gc2VsZi50YWdTdGFja1stMV0KKyAgICAgICAgcmV0dXJuIHNlbGYu
Y3VycmVudFRhZworCisgICAgZGVmIHB1c2hUYWcoc2VsZiwgdGFnKToKKyAgICAgICAgI3ByaW50
ICJQdXNoIiwgdGFnLm5hbWUKKyAgICAgICAgaWYgc2VsZi5jdXJyZW50VGFnOgorICAgICAgICAg
ICAgc2VsZi5jdXJyZW50VGFnLmNvbnRlbnRzLmFwcGVuZCh0YWcpCisgICAgICAgIHNlbGYudGFn
U3RhY2suYXBwZW5kKHRhZykKKyAgICAgICAgc2VsZi5jdXJyZW50VGFnID0gc2VsZi50YWdTdGFj
a1stMV0KKworICAgIGRlZiBlbmREYXRhKHNlbGYsIGNvbnRhaW5lckNsYXNzPU5hdmlnYWJsZVN0
cmluZyk6CisgICAgICAgIGlmIHNlbGYuY3VycmVudERhdGE6CisgICAgICAgICAgICBjdXJyZW50
RGF0YSA9IHUnJy5qb2luKHNlbGYuY3VycmVudERhdGEpCisgICAgICAgICAgICBpZiAoY3VycmVu
dERhdGEudHJhbnNsYXRlKHNlbGYuU1RSSVBfQVNDSUlfU1BBQ0VTKSA9PSAnJyBhbmQKKyAgICAg
ICAgICAgICAgICBub3Qgc2V0KFt0YWcubmFtZSBmb3IgdGFnIGluIHNlbGYudGFnU3RhY2tdKS5p
bnRlcnNlY3Rpb24oCisgICAgICAgICAgICAgICAgICAgIHNlbGYuUFJFU0VSVkVfV0hJVEVTUEFD
RV9UQUdTKSk6CisgICAgICAgICAgICAgICAgaWYgJ1xuJyBpbiBjdXJyZW50RGF0YToKKyAgICAg
ICAgICAgICAgICAgICAgY3VycmVudERhdGEgPSAnXG4nCisgICAgICAgICAgICAgICAgZWxzZToK
KyAgICAgICAgICAgICAgICAgICAgY3VycmVudERhdGEgPSAnICcKKyAgICAgICAgICAgIHNlbGYu
Y3VycmVudERhdGEgPSBbXQorICAgICAgICAgICAgaWYgc2VsZi5wYXJzZU9ubHlUaGVzZSBhbmQg
bGVuKHNlbGYudGFnU3RhY2spIDw9IDEgYW5kIFwKKyAgICAgICAgICAgICAgICAgICAobm90IHNl
bGYucGFyc2VPbmx5VGhlc2UudGV4dCBvciBcCisgICAgICAgICAgICAgICAgICAgIG5vdCBzZWxm
LnBhcnNlT25seVRoZXNlLnNlYXJjaChjdXJyZW50RGF0YSkpOgorICAgICAgICAgICAgICAgIHJl
dHVybgorICAgICAgICAgICAgbyA9IGNvbnRhaW5lckNsYXNzKGN1cnJlbnREYXRhKQorICAgICAg
ICAgICAgby5zZXR1cChzZWxmLmN1cnJlbnRUYWcsIHNlbGYucHJldmlvdXMpCisgICAgICAgICAg
ICBpZiBzZWxmLnByZXZpb3VzOgorICAgICAgICAgICAgICAgIHNlbGYucHJldmlvdXMubmV4dCA9
IG8KKyAgICAgICAgICAgIHNlbGYucHJldmlvdXMgPSBvCisgICAgICAgICAgICBzZWxmLmN1cnJl
bnRUYWcuY29udGVudHMuYXBwZW5kKG8pCisKKworICAgIGRlZiBfcG9wVG9UYWcoc2VsZiwgbmFt
ZSwgaW5jbHVzaXZlUG9wPVRydWUpOgorICAgICAgICAiIiJQb3BzIHRoZSB0YWcgc3RhY2sgdXAg
dG8gYW5kIGluY2x1ZGluZyB0aGUgbW9zdCByZWNlbnQKKyAgICAgICAgaW5zdGFuY2Ugb2YgdGhl
IGdpdmVuIHRhZy4gSWYgaW5jbHVzaXZlUG9wIGlzIGZhbHNlLCBwb3BzIHRoZSB0YWcKKyAgICAg
ICAgc3RhY2sgdXAgdG8gYnV0ICpub3QqIGluY2x1ZGluZyB0aGUgbW9zdCByZWNlbnQgaW5zdHFh
bmNlIG9mCisgICAgICAgIHRoZSBnaXZlbiB0YWcuIiIiCisgICAgICAgICNwcmludCAiUG9wcGlu
ZyB0byAlcyIgJSBuYW1lCisgICAgICAgIGlmIG5hbWUgPT0gc2VsZi5ST09UX1RBR19OQU1FOgor
ICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgbnVtUG9wcyA9IDAKKyAgICAgICAgbW9zdFJl
Y2VudFRhZyA9IE5vbmUKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKHNlbGYudGFnU3RhY2sp
LTEsIDAsIC0xKToKKyAgICAgICAgICAgIGlmIG5hbWUgPT0gc2VsZi50YWdTdGFja1tpXS5uYW1l
OgorICAgICAgICAgICAgICAgIG51bVBvcHMgPSBsZW4oc2VsZi50YWdTdGFjayktaQorICAgICAg
ICAgICAgICAgIGJyZWFrCisgICAgICAgIGlmIG5vdCBpbmNsdXNpdmVQb3A6CisgICAgICAgICAg
ICBudW1Qb3BzID0gbnVtUG9wcyAtIDEKKworICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBudW1Q
b3BzKToKKyAgICAgICAgICAgIG1vc3RSZWNlbnRUYWcgPSBzZWxmLnBvcFRhZygpCisgICAgICAg
IHJldHVybiBtb3N0UmVjZW50VGFnCisKKyAgICBkZWYgX3NtYXJ0UG9wKHNlbGYsIG5hbWUpOgor
CisgICAgICAgICIiIldlIG5lZWQgdG8gcG9wIHVwIHRvIHRoZSBwcmV2aW91cyB0YWcgb2YgdGhp
cyB0eXBlLCB1bmxlc3MKKyAgICAgICAgb25lIG9mIHRoaXMgdGFnJ3MgbmVzdGluZyByZXNldCB0
cmlnZ2VycyBjb21lcyBiZXR3ZWVuIHRoaXMKKyAgICAgICAgdGFnIGFuZCB0aGUgcHJldmlvdXMg
dGFnIG9mIHRoaXMgdHlwZSwgT1IgdW5sZXNzIHRoaXMgdGFnIGlzIGEKKyAgICAgICAgZ2VuZXJp
YyBuZXN0aW5nIHRyaWdnZXIgYW5kIGFub3RoZXIgZ2VuZXJpYyBuZXN0aW5nIHRyaWdnZXIKKyAg
ICAgICAgY29tZXMgYmV0d2VlbiB0aGlzIHRhZyBhbmQgdGhlIHByZXZpb3VzIHRhZyBvZiB0aGlz
IHR5cGUuCisKKyAgICAgICAgRXhhbXBsZXM6CisgICAgICAgICA8cD5Gb288Yj5CYXIgKjxwPiog
c2hvdWxkIHBvcCB0byAncCcsIG5vdCAnYicuCisgICAgICAgICA8cD5Gb288dGFibGU+QmFyICo8
cD4qIHNob3VsZCBwb3AgdG8gJ3RhYmxlJywgbm90ICdwJy4KKyAgICAgICAgIDxwPkZvbzx0YWJs
ZT48dHI+QmFyICo8cD4qIHNob3VsZCBwb3AgdG8gJ3RyJywgbm90ICdwJy4KKworICAgICAgICAg
PGxpPjx1bD48bGk+ICo8bGk+KiBzaG91bGQgcG9wIHRvICd1bCcsIG5vdCB0aGUgZmlyc3QgJ2xp
Jy4KKyAgICAgICAgIDx0cj48dGFibGU+PHRyPiAqPHRyPiogc2hvdWxkIHBvcCB0byAndGFibGUn
LCBub3QgdGhlIGZpcnN0ICd0cicKKyAgICAgICAgIDx0ZD48dHI+PHRkPiAqPHRkPiogc2hvdWxk
IHBvcCB0byAndHInLCBub3QgdGhlIGZpcnN0ICd0ZCcKKyAgICAgICAgIiIiCisKKyAgICAgICAg
bmVzdGluZ1Jlc2V0VHJpZ2dlcnMgPSBzZWxmLk5FU1RBQkxFX1RBR1MuZ2V0KG5hbWUpCisgICAg
ICAgIGlzTmVzdGFibGUgPSBuZXN0aW5nUmVzZXRUcmlnZ2VycyAhPSBOb25lCisgICAgICAgIGlz
UmVzZXROZXN0aW5nID0gc2VsZi5SRVNFVF9ORVNUSU5HX1RBR1MuaGFzX2tleShuYW1lKQorICAg
ICAgICBwb3BUbyA9IE5vbmUKKyAgICAgICAgaW5jbHVzaXZlID0gVHJ1ZQorICAgICAgICBmb3Ig
aSBpbiByYW5nZShsZW4oc2VsZi50YWdTdGFjayktMSwgMCwgLTEpOgorICAgICAgICAgICAgcCA9
IHNlbGYudGFnU3RhY2tbaV0KKyAgICAgICAgICAgIGlmIChub3QgcCBvciBwLm5hbWUgPT0gbmFt
ZSkgYW5kIG5vdCBpc05lc3RhYmxlOgorICAgICAgICAgICAgICAgICNOb24tbmVzdGFibGUgdGFn
cyBnZXQgcG9wcGVkIHRvIHRoZSB0b3Agb3IgdG8gdGhlaXIKKyAgICAgICAgICAgICAgICAjbGFz
dCBvY2N1cmFuY2UuCisgICAgICAgICAgICAgICAgcG9wVG8gPSBuYW1lCisgICAgICAgICAgICAg
ICAgYnJlYWsKKyAgICAgICAgICAgIGlmIChuZXN0aW5nUmVzZXRUcmlnZ2VycyBpcyBub3QgTm9u
ZQorICAgICAgICAgICAgICAgIGFuZCBwLm5hbWUgaW4gbmVzdGluZ1Jlc2V0VHJpZ2dlcnMpIFwK
KyAgICAgICAgICAgICAgICBvciAobmVzdGluZ1Jlc2V0VHJpZ2dlcnMgaXMgTm9uZSBhbmQgaXNS
ZXNldE5lc3RpbmcKKyAgICAgICAgICAgICAgICAgICAgYW5kIHNlbGYuUkVTRVRfTkVTVElOR19U
QUdTLmhhc19rZXkocC5uYW1lKSk6CisKKyAgICAgICAgICAgICAgICAjSWYgd2UgZW5jb3VudGVy
IG9uZSBvZiB0aGUgbmVzdGluZyByZXNldCB0cmlnZ2VycworICAgICAgICAgICAgICAgICNwZWN1
bGlhciB0byB0aGlzIHRhZywgb3Igd2UgZW5jb3VudGVyIGFub3RoZXIgdGFnCisgICAgICAgICAg
ICAgICAgI3RoYXQgY2F1c2VzIG5lc3RpbmcgdG8gcmVzZXQsIHBvcCB1cCB0byBidXQgbm90Cisg
ICAgICAgICAgICAgICAgI2luY2x1ZGluZyB0aGF0IHRhZy4KKyAgICAgICAgICAgICAgICBwb3BU
byA9IHAubmFtZQorICAgICAgICAgICAgICAgIGluY2x1c2l2ZSA9IEZhbHNlCisgICAgICAgICAg
ICAgICAgYnJlYWsKKyAgICAgICAgICAgIHAgPSBwLnBhcmVudAorICAgICAgICBpZiBwb3BUbzoK
KyAgICAgICAgICAgIHNlbGYuX3BvcFRvVGFnKHBvcFRvLCBpbmNsdXNpdmUpCisKKyAgICBkZWYg
dW5rbm93bl9zdGFydHRhZyhzZWxmLCBuYW1lLCBhdHRycywgc2VsZkNsb3Npbmc9MCk6CisgICAg
ICAgICNwcmludCAiU3RhcnQgdGFnICVzOiAlcyIgJSAobmFtZSwgYXR0cnMpCisgICAgICAgIGlm
IHNlbGYucXVvdGVTdGFjazoKKyAgICAgICAgICAgICNUaGlzIGlzIG5vdCBhIHJlYWwgdGFnLgor
ICAgICAgICAgICAgI3ByaW50ICI8JXM+IGlzIG5vdCByZWFsISIgJSBuYW1lCisgICAgICAgICAg
ICBhdHRycyA9ICcnLmpvaW4oWycgJXM9IiVzIicgJSAoeCwgeSkgZm9yIHgsIHkgaW4gYXR0cnNd
KQorICAgICAgICAgICAgc2VsZi5oYW5kbGVfZGF0YSgnPCVzJXM+JyAlIChuYW1lLCBhdHRycykp
CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5lbmREYXRhKCkKKworICAgICAgICBp
ZiBub3Qgc2VsZi5pc1NlbGZDbG9zaW5nVGFnKG5hbWUpIGFuZCBub3Qgc2VsZkNsb3Npbmc6Cisg
ICAgICAgICAgICBzZWxmLl9zbWFydFBvcChuYW1lKQorCisgICAgICAgIGlmIHNlbGYucGFyc2VP
bmx5VGhlc2UgYW5kIGxlbihzZWxmLnRhZ1N0YWNrKSA8PSAxIFwKKyAgICAgICAgICAgICAgIGFu
ZCAoc2VsZi5wYXJzZU9ubHlUaGVzZS50ZXh0IG9yIG5vdCBzZWxmLnBhcnNlT25seVRoZXNlLnNl
YXJjaFRhZyhuYW1lLCBhdHRycykpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgdGFn
ID0gVGFnKHNlbGYsIG5hbWUsIGF0dHJzLCBzZWxmLmN1cnJlbnRUYWcsIHNlbGYucHJldmlvdXMp
CisgICAgICAgIGlmIHNlbGYucHJldmlvdXM6CisgICAgICAgICAgICBzZWxmLnByZXZpb3VzLm5l
eHQgPSB0YWcKKyAgICAgICAgc2VsZi5wcmV2aW91cyA9IHRhZworICAgICAgICBzZWxmLnB1c2hU
YWcodGFnKQorICAgICAgICBpZiBzZWxmQ2xvc2luZyBvciBzZWxmLmlzU2VsZkNsb3NpbmdUYWco
bmFtZSk6CisgICAgICAgICAgICBzZWxmLnBvcFRhZygpCisgICAgICAgIGlmIG5hbWUgaW4gc2Vs
Zi5RVU9URV9UQUdTOgorICAgICAgICAgICAgI3ByaW50ICJCZWdpbm5pbmcgcXVvdGUgKCVzKSIg
JSBuYW1lCisgICAgICAgICAgICBzZWxmLnF1b3RlU3RhY2suYXBwZW5kKG5hbWUpCisgICAgICAg
ICAgICBzZWxmLmxpdGVyYWwgPSAxCisgICAgICAgIHJldHVybiB0YWcKKworICAgIGRlZiB1bmtu
b3duX2VuZHRhZyhzZWxmLCBuYW1lKToKKyAgICAgICAgI3ByaW50ICJFbmQgdGFnICVzIiAlIG5h
bWUKKyAgICAgICAgaWYgc2VsZi5xdW90ZVN0YWNrIGFuZCBzZWxmLnF1b3RlU3RhY2tbLTFdICE9
IG5hbWU6CisgICAgICAgICAgICAjVGhpcyBpcyBub3QgYSByZWFsIGVuZCB0YWcuCisgICAgICAg
ICAgICAjcHJpbnQgIjwvJXM+IGlzIG5vdCByZWFsISIgJSBuYW1lCisgICAgICAgICAgICBzZWxm
LmhhbmRsZV9kYXRhKCc8LyVzPicgJSBuYW1lKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAg
IHNlbGYuZW5kRGF0YSgpCisgICAgICAgIHNlbGYuX3BvcFRvVGFnKG5hbWUpCisgICAgICAgIGlm
IHNlbGYucXVvdGVTdGFjayBhbmQgc2VsZi5xdW90ZVN0YWNrWy0xXSA9PSBuYW1lOgorICAgICAg
ICAgICAgc2VsZi5xdW90ZVN0YWNrLnBvcCgpCisgICAgICAgICAgICBzZWxmLmxpdGVyYWwgPSAo
bGVuKHNlbGYucXVvdGVTdGFjaykgPiAwKQorCisgICAgZGVmIGhhbmRsZV9kYXRhKHNlbGYsIGRh
dGEpOgorICAgICAgICBzZWxmLmN1cnJlbnREYXRhLmFwcGVuZChkYXRhKQorCisgICAgZGVmIF90
b1N0cmluZ1N1YmNsYXNzKHNlbGYsIHRleHQsIHN1YmNsYXNzKToKKyAgICAgICAgIiIiQWRkcyBh
IGNlcnRhaW4gcGllY2Ugb2YgdGV4dCB0byB0aGUgdHJlZSBhcyBhIE5hdmlnYWJsZVN0cmluZwor
ICAgICAgICBzdWJjbGFzcy4iIiIKKyAgICAgICAgc2VsZi5lbmREYXRhKCkKKyAgICAgICAgc2Vs
Zi5oYW5kbGVfZGF0YSh0ZXh0KQorICAgICAgICBzZWxmLmVuZERhdGEoc3ViY2xhc3MpCisKKyAg
ICBkZWYgaGFuZGxlX3BpKHNlbGYsIHRleHQpOgorICAgICAgICAiIiJIYW5kbGUgYSBwcm9jZXNz
aW5nIGluc3RydWN0aW9uIGFzIGEgUHJvY2Vzc2luZ0luc3RydWN0aW9uCisgICAgICAgIG9iamVj
dCwgcG9zc2libHkgb25lIHdpdGggYSAlU09VUC1FTkNPRElORyUgc2xvdCBpbnRvIHdoaWNoIGFu
CisgICAgICAgIGVuY29kaW5nIHdpbGwgYmUgcGx1Z2dlZCBsYXRlci4iIiIKKyAgICAgICAgaWYg
dGV4dFs6M10gPT0gInhtbCI6CisgICAgICAgICAgICB0ZXh0ID0gdSJ4bWwgdmVyc2lvbj0nMS4w
JyBlbmNvZGluZz0nJVNPVVAtRU5DT0RJTkclJyIKKyAgICAgICAgc2VsZi5fdG9TdHJpbmdTdWJj
bGFzcyh0ZXh0LCBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24pCisKKyAgICBkZWYgaGFuZGxlX2NvbW1l
bnQoc2VsZiwgdGV4dCk6CisgICAgICAgICJIYW5kbGUgY29tbWVudHMgYXMgQ29tbWVudCBvYmpl
Y3RzLiIKKyAgICAgICAgc2VsZi5fdG9TdHJpbmdTdWJjbGFzcyh0ZXh0LCBDb21tZW50KQorCisg
ICAgZGVmIGhhbmRsZV9jaGFycmVmKHNlbGYsIHJlZik6CisgICAgICAgICJIYW5kbGUgY2hhcmFj
dGVyIHJlZmVyZW5jZXMgYXMgZGF0YS4iCisgICAgICAgIGlmIHNlbGYuY29udmVydEVudGl0aWVz
OgorICAgICAgICAgICAgZGF0YSA9IHVuaWNocihpbnQocmVmKSkKKyAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgIGRhdGEgPSAnJiMlczsnICUgcmVmCisgICAgICAgIHNlbGYuaGFuZGxlX2RhdGEo
ZGF0YSkKKworICAgIGRlZiBoYW5kbGVfZW50aXR5cmVmKHNlbGYsIHJlZik6CisgICAgICAgICIi
IkhhbmRsZSBlbnRpdHkgcmVmZXJlbmNlcyBhcyBkYXRhLCBwb3NzaWJseSBjb252ZXJ0aW5nIGtu
b3duCisgICAgICAgIEhUTUwgYW5kL29yIFhNTCBlbnRpdHkgcmVmZXJlbmNlcyB0byB0aGUgY29y
cmVzcG9uZGluZyBVbmljb2RlCisgICAgICAgIGNoYXJhY3RlcnMuIiIiCisgICAgICAgIGRhdGEg
PSBOb25lCisgICAgICAgIGlmIHNlbGYuY29udmVydEhUTUxFbnRpdGllczoKKyAgICAgICAgICAg
IHRyeToKKyAgICAgICAgICAgICAgICBkYXRhID0gdW5pY2hyKG5hbWUyY29kZXBvaW50W3JlZl0p
CisgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworCisg
ICAgICAgIGlmIG5vdCBkYXRhIGFuZCBzZWxmLmNvbnZlcnRYTUxFbnRpdGllczoKKyAgICAgICAg
ICAgICAgICBkYXRhID0gc2VsZi5YTUxfRU5USVRJRVNfVE9fU1BFQ0lBTF9DSEFSUy5nZXQocmVm
KQorCisgICAgICAgIGlmIG5vdCBkYXRhIGFuZCBzZWxmLmNvbnZlcnRIVE1MRW50aXRpZXMgYW5k
IFwKKyAgICAgICAgICAgIG5vdCBzZWxmLlhNTF9FTlRJVElFU19UT19TUEVDSUFMX0NIQVJTLmdl
dChyZWYpOgorICAgICAgICAgICAgICAgICMgVE9ETzogV2UndmUgZ290IGEgcHJvYmxlbSBoZXJl
LiBXZSdyZSB0b2xkIHRoaXMgaXMKKyAgICAgICAgICAgICAgICAjIGFuIGVudGl0eSByZWZlcmVu
Y2UsIGJ1dCBpdCdzIG5vdCBhbiBYTUwgZW50aXR5CisgICAgICAgICAgICAgICAgIyByZWZlcmVu
Y2Ugb3IgYW4gSFRNTCBlbnRpdHkgcmVmZXJlbmNlLiBOb25ldGhlbGVzcywKKyAgICAgICAgICAg
ICAgICAjIHRoZSBsb2dpY2FsIHRoaW5nIHRvIGRvIGlzIHRvIHBhc3MgaXQgdGhyb3VnaCBhcyBh
bgorICAgICAgICAgICAgICAgICMgdW5yZWNvZ25pemVkIGVudGl0eSByZWZlcmVuY2UuCisgICAg
ICAgICAgICAgICAgIworICAgICAgICAgICAgICAgICMgRXhjZXB0OiB3aGVuIHRoZSBpbnB1dCBp
cyAiJmNhcm9sOyIgdGhpcyBmdW5jdGlvbgorICAgICAgICAgICAgICAgICMgd2lsbCBiZSBjYWxs
ZWQgd2l0aCBpbnB1dCAiY2Fyb2wiLiBXaGVuIHRoZSBpbnB1dCBpcworICAgICAgICAgICAgICAg
ICMgIkFUJlQiLCB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdpdGggaW5wdXQKKyAgICAg
ICAgICAgICAgICAjICJUIi4gV2UgaGF2ZSBubyB3YXkgb2Yga25vd2luZyB3aGV0aGVyIGEgc2Vt
aWNvbG9uCisgICAgICAgICAgICAgICAgIyB3YXMgcHJlc2VudCBvcmlnaW5hbGx5LCBzbyB3ZSBk
b24ndCBrbm93IHdoZXRoZXIKKyAgICAgICAgICAgICAgICAjIHRoaXMgaXMgYW4gdW5rbm93biBl
bnRpdHkgb3IganVzdCBhIG1pc3BsYWNlZAorICAgICAgICAgICAgICAgICMgYW1wZXJzYW5kLgor
ICAgICAgICAgICAgICAgICMKKyAgICAgICAgICAgICAgICAjIFRoZSBtb3JlIGNvbW1vbiBjYXNl
IGlzIGEgbWlzcGxhY2VkIGFtcGVyc2FuZCwgc28gSQorICAgICAgICAgICAgICAgICMgZXNjYXBl
IHRoZSBhbXBlcnNhbmQgYW5kIG9taXQgdGhlIHRyYWlsaW5nIHNlbWljb2xvbi4KKyAgICAgICAg
ICAgICAgICBkYXRhID0gIiZhbXA7JXMiICUgcmVmCisgICAgICAgIGlmIG5vdCBkYXRhOgorICAg
ICAgICAgICAgIyBUaGlzIGNhc2UgaXMgZGlmZmVyZW50IGZyb20gdGhlIG9uZSBhYm92ZSwgYmVj
YXVzZSB3ZQorICAgICAgICAgICAgIyBoYXZlbid0IGFscmVhZHkgZ29uZSB0aHJvdWdoIGEgc3Vw
cG9zZWRseSBjb21wcmVoZW5zaXZlCisgICAgICAgICAgICAjIG1hcHBpbmcgb2YgZW50aXRpZXMg
dG8gVW5pY29kZSBjaGFyYWN0ZXJzLiBXZSBtaWdodCBub3QKKyAgICAgICAgICAgICMgaGF2ZSBn
b25lIHRocm91Z2ggYW55IG1hcHBpbmcgYXQgYWxsLiBTbyB0aGUgY2hhbmNlcyBhcmUKKyAgICAg
ICAgICAgICMgdmVyeSBoaWdoIHRoYXQgdGhpcyBpcyBhIHJlYWwgZW50aXR5LCBhbmQgbm90IGEK
KyAgICAgICAgICAgICMgbWlzcGxhY2VkIGFtcGVyc2FuZC4KKyAgICAgICAgICAgIGRhdGEgPSAi
JiVzOyIgJSByZWYKKyAgICAgICAgc2VsZi5oYW5kbGVfZGF0YShkYXRhKQorCisgICAgZGVmIGhh
bmRsZV9kZWNsKHNlbGYsIGRhdGEpOgorICAgICAgICAiSGFuZGxlIERPQ1RZUEVzIGFuZCB0aGUg
bGlrZSBhcyBEZWNsYXJhdGlvbiBvYmplY3RzLiIKKyAgICAgICAgc2VsZi5fdG9TdHJpbmdTdWJj
bGFzcyhkYXRhLCBEZWNsYXJhdGlvbikKKworICAgIGRlZiBwYXJzZV9kZWNsYXJhdGlvbihzZWxm
LCBpKToKKyAgICAgICAgIiIiVHJlYXQgYSBib2d1cyBTR01MIGRlY2xhcmF0aW9uIGFzIHJhdyBk
YXRhLiBUcmVhdCBhIENEQVRBCisgICAgICAgIGRlY2xhcmF0aW9uIGFzIGEgQ0RhdGEgb2JqZWN0
LiIiIgorICAgICAgICBqID0gTm9uZQorICAgICAgICBpZiBzZWxmLnJhd2RhdGFbaTppKzldID09
ICc8IVtDREFUQVsnOgorICAgICAgICAgICAgIGsgPSBzZWxmLnJhd2RhdGEuZmluZCgnXV0+Jywg
aSkKKyAgICAgICAgICAgICBpZiBrID09IC0xOgorICAgICAgICAgICAgICAgICBrID0gbGVuKHNl
bGYucmF3ZGF0YSkKKyAgICAgICAgICAgICBkYXRhID0gc2VsZi5yYXdkYXRhW2krOTprXQorICAg
ICAgICAgICAgIGogPSBrKzMKKyAgICAgICAgICAgICBzZWxmLl90b1N0cmluZ1N1YmNsYXNzKGRh
dGEsIENEYXRhKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAg
ICAgIGogPSBTR01MUGFyc2VyLnBhcnNlX2RlY2xhcmF0aW9uKHNlbGYsIGkpCisgICAgICAgICAg
ICBleGNlcHQgU0dNTFBhcnNlRXJyb3I6CisgICAgICAgICAgICAgICAgdG9IYW5kbGUgPSBzZWxm
LnJhd2RhdGFbaTpdCisgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfZGF0YSh0b0hhbmRsZSkK
KyAgICAgICAgICAgICAgICBqID0gaSArIGxlbih0b0hhbmRsZSkKKyAgICAgICAgcmV0dXJuIGoK
KworY2xhc3MgQmVhdXRpZnVsU291cChCZWF1dGlmdWxTdG9uZVNvdXApOgorCisgICAgIiIiVGhp
cyBwYXJzZXIga25vd3MgdGhlIGZvbGxvd2luZyBmYWN0cyBhYm91dCBIVE1MOgorCisgICAgKiBT
b21lIHRhZ3MgaGF2ZSBubyBjbG9zaW5nIHRhZyBhbmQgc2hvdWxkIGJlIGludGVycHJldGVkIGFz
IGJlaW5nCisgICAgICBjbG9zZWQgYXMgc29vbiBhcyB0aGV5IGFyZSBlbmNvdW50ZXJlZC4KKwor
ICAgICogVGhlIHRleHQgaW5zaWRlIHNvbWUgdGFncyAoaWUuICdzY3JpcHQnKSBtYXkgY29udGFp
biB0YWdzIHdoaWNoCisgICAgICBhcmUgbm90IHJlYWxseSBwYXJ0IG9mIHRoZSBkb2N1bWVudCBh
bmQgd2hpY2ggc2hvdWxkIGJlIHBhcnNlZAorICAgICAgYXMgdGV4dCwgbm90IHRhZ3MuIElmIHlv
dSB3YW50IHRvIHBhcnNlIHRoZSB0ZXh0IGFzIHRhZ3MsIHlvdSBjYW4KKyAgICAgIGFsd2F5cyBm
ZXRjaCBpdCBhbmQgcGFyc2UgaXQgZXhwbGljaXRseS4KKworICAgICogVGFnIG5lc3RpbmcgcnVs
ZXM6CisKKyAgICAgIE1vc3QgdGFncyBjYW4ndCBiZSBuZXN0ZWQgYXQgYWxsLiBGb3IgaW5zdGFu
Y2UsIHRoZSBvY2N1cmFuY2Ugb2YKKyAgICAgIGEgPHA+IHRhZyBzaG91bGQgaW1wbGljaXRseSBj
bG9zZSB0aGUgcHJldmlvdXMgPHA+IHRhZy4KKworICAgICAgIDxwPlBhcmExPHA+UGFyYTIKKyAg
ICAgICAgc2hvdWxkIGJlIHRyYW5zZm9ybWVkIGludG86CisgICAgICAgPHA+UGFyYTE8L3A+PHA+
UGFyYTIKKworICAgICAgU29tZSB0YWdzIGNhbiBiZSBuZXN0ZWQgYXJiaXRyYXJpbHkuIEZvciBp
bnN0YW5jZSwgdGhlIG9jY3VyYW5jZQorICAgICAgb2YgYSA8YmxvY2txdW90ZT4gdGFnIHNob3Vs
ZCBfbm90XyBpbXBsaWNpdGx5IGNsb3NlIHRoZSBwcmV2aW91cworICAgICAgPGJsb2NrcXVvdGU+
IHRhZy4KKworICAgICAgIEFsaWNlIHNhaWQ6IDxibG9ja3F1b3RlPkJvYiBzYWlkOiA8YmxvY2tx
dW90ZT5CbGFoCisgICAgICAgIHNob3VsZCBOT1QgYmUgdHJhbnNmb3JtZWQgaW50bzoKKyAgICAg
ICBBbGljZSBzYWlkOiA8YmxvY2txdW90ZT5Cb2Igc2FpZDogPC9ibG9ja3F1b3RlPjxibG9ja3F1
b3RlPkJsYWgKKworICAgICAgU29tZSB0YWdzIGNhbiBiZSBuZXN0ZWQsIGJ1dCB0aGUgbmVzdGlu
ZyBpcyByZXNldCBieSB0aGUKKyAgICAgIGludGVycG9zaXRpb24gb2Ygb3RoZXIgdGFncy4gRm9y
IGluc3RhbmNlLCBhIDx0cj4gdGFnIHNob3VsZAorICAgICAgaW1wbGljaXRseSBjbG9zZSB0aGUg
cHJldmlvdXMgPHRyPiB0YWcgd2l0aGluIHRoZSBzYW1lIDx0YWJsZT4sCisgICAgICBidXQgbm90
IGNsb3NlIGEgPHRyPiB0YWcgaW4gYW5vdGhlciB0YWJsZS4KKworICAgICAgIDx0YWJsZT48dHI+
QmxhaDx0cj5CbGFoCisgICAgICAgIHNob3VsZCBiZSB0cmFuc2Zvcm1lZCBpbnRvOgorICAgICAg
IDx0YWJsZT48dHI+QmxhaDwvdHI+PHRyPkJsYWgKKyAgICAgICAgYnV0LAorICAgICAgIDx0cj5C
bGFoPHRhYmxlPjx0cj5CbGFoCisgICAgICAgIHNob3VsZCBOT1QgYmUgdHJhbnNmb3JtZWQgaW50
bworICAgICAgIDx0cj5CbGFoPHRhYmxlPjwvdHI+PHRyPkJsYWgKKworICAgIERpZmZlcmluZyBh
c3N1bXB0aW9ucyBhYm91dCB0YWcgbmVzdGluZyBydWxlcyBhcmUgYSBtYWpvciBzb3VyY2UKKyAg
ICBvZiBwcm9ibGVtcyB3aXRoIHRoZSBCZWF1dGlmdWxTb3VwIGNsYXNzLiBJZiBCZWF1dGlmdWxT
b3VwIGlzIG5vdAorICAgIHRyZWF0aW5nIGFzIG5lc3RhYmxlIGEgdGFnIHlvdXIgcGFnZSBhdXRo
b3IgdHJlYXRzIGFzIG5lc3RhYmxlLAorICAgIHRyeSBJQ2FudEJlbGlldmVJdHNCZWF1dGlmdWxT
b3VwLCBNaW5pbWFsU291cCwgb3IKKyAgICBCZWF1dGlmdWxTdG9uZVNvdXAgYmVmb3JlIHdyaXRp
bmcgeW91ciBvd24gc3ViY2xhc3MuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3Ms
ICoqa3dhcmdzKToKKyAgICAgICAgaWYgbm90IGt3YXJncy5oYXNfa2V5KCdzbWFydFF1b3Rlc1Rv
Jyk6CisgICAgICAgICAgICBrd2FyZ3NbJ3NtYXJ0UXVvdGVzVG8nXSA9IHNlbGYuSFRNTF9FTlRJ
VElFUworICAgICAgICBrd2FyZ3NbJ2lzSFRNTCddID0gVHJ1ZQorICAgICAgICBCZWF1dGlmdWxT
dG9uZVNvdXAuX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKQorCisgICAgU0VMRl9DTE9T
SU5HX1RBR1MgPSBidWlsZFRhZ01hcChOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKCdicicgLCAnaHInLCAnaW5wdXQnLCAnaW1nJywgJ21ldGEnLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NwYWNlcicsICdsaW5rJywgJ2ZyYW1lJywgJ2Jh
c2UnLCAnY29sJykpCisKKyAgICBQUkVTRVJWRV9XSElURVNQQUNFX1RBR1MgPSBzZXQoWydwcmUn
LCAndGV4dGFyZWEnXSkKKworICAgIFFVT1RFX1RBR1MgPSB7J3NjcmlwdCcgOiBOb25lLCAndGV4
dGFyZWEnIDogTm9uZX0KKworICAgICNBY2NvcmRpbmcgdG8gdGhlIEhUTUwgc3RhbmRhcmQsIGVh
Y2ggb2YgdGhlc2UgaW5saW5lIHRhZ3MgY2FuCisgICAgI2NvbnRhaW4gYW5vdGhlciB0YWcgb2Yg
dGhlIHNhbWUgdHlwZS4gRnVydGhlcm1vcmUsIGl0J3MgY29tbW9uCisgICAgI3RvIGFjdHVhbGx5
IHVzZSB0aGVzZSB0YWdzIHRoaXMgd2F5LgorICAgIE5FU1RBQkxFX0lOTElORV9UQUdTID0gKCdz
cGFuJywgJ2ZvbnQnLCAncScsICdvYmplY3QnLCAnYmRvJywgJ3N1YicsICdzdXAnLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICdjZW50ZXInKQorCisgICAgI0FjY29yZGluZyB0byB0aGUg
SFRNTCBzdGFuZGFyZCwgdGhlc2UgYmxvY2sgdGFncyBjYW4gY29udGFpbgorICAgICNhbm90aGVy
IHRhZyBvZiB0aGUgc2FtZSB0eXBlLiBGdXJ0aGVybW9yZSwgaXQncyBjb21tb24KKyAgICAjdG8g
YWN0dWFsbHkgdXNlIHRoZXNlIHRhZ3MgdGhpcyB3YXkuCisgICAgTkVTVEFCTEVfQkxPQ0tfVEFH
UyA9ICgnYmxvY2txdW90ZScsICdkaXYnLCAnZmllbGRzZXQnLCAnaW5zJywgJ2RlbCcpCisKKyAg
ICAjTGlzdHMgY2FuIGNvbnRhaW4gb3RoZXIgbGlzdHMsIGJ1dCB0aGVyZSBhcmUgcmVzdHJpY3Rp
b25zLgorICAgIE5FU1RBQkxFX0xJU1RfVEFHUyA9IHsgJ29sJyA6IFtdLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJ3VsJyA6IFtdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xp
JyA6IFsndWwnLCAnb2wnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICdkbCcgOiBbXSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZCcgOiBbJ2RsJ10sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAnZHQnIDogWydkbCddIH0KKworICAgICNUYWJsZXMgY2FuIGNvbnRhaW4g
b3RoZXIgdGFibGVzLCBidXQgdGhlcmUgYXJlIHJlc3RyaWN0aW9ucy4KKyAgICBORVNUQUJMRV9U
QUJMRV9UQUdTID0geyd0YWJsZScgOiBbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICd0
cicgOiBbJ3RhYmxlJywgJ3Rib2R5JywgJ3Rmb290JywgJ3RoZWFkJ10sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAndGQnIDogWyd0ciddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
J3RoJyA6IFsndHInXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aGVhZCcgOiBbJ3Rh
YmxlJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAndGJvZHknIDogWyd0YWJsZSddLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rmb290JyA6IFsndGFibGUnXSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKworICAgIE5PTl9ORVNUQUJMRV9CTE9DS19UQUdTID0gKCdh
ZGRyZXNzJywgJ2Zvcm0nLCAncCcsICdwcmUnKQorCisgICAgI0lmIG9uZSBvZiB0aGVzZSB0YWdz
IGlzIGVuY291bnRlcmVkLCBhbGwgdGFncyB1cCB0byB0aGUgbmV4dCB0YWcgb2YKKyAgICAjdGhp
cyB0eXBlIGFyZSBwb3BwZWQuCisgICAgUkVTRVRfTkVTVElOR19UQUdTID0gYnVpbGRUYWdNYXAo
Tm9uZSwgTkVTVEFCTEVfQkxPQ0tfVEFHUywgJ25vc2NyaXB0JywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBOT05fTkVTVEFCTEVfQkxPQ0tfVEFHUywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBORVNUQUJMRV9MSVNUX1RBR1MsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVTVEFCTEVfVEFCTEVfVEFHUykKKworICAgIE5F
U1RBQkxFX1RBR1MgPSBidWlsZFRhZ01hcChbXSwgTkVTVEFCTEVfSU5MSU5FX1RBR1MsIE5FU1RB
QkxFX0JMT0NLX1RBR1MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FU1RBQkxF
X0xJU1RfVEFHUywgTkVTVEFCTEVfVEFCTEVfVEFHUykKKworICAgICMgVXNlZCB0byBkZXRlY3Qg
dGhlIGNoYXJzZXQgaW4gYSBNRVRBIHRhZzsgc2VlIHN0YXJ0X21ldGEKKyAgICBDSEFSU0VUX1JF
ID0gcmUuY29tcGlsZSgiKChefDspXHMqY2hhcnNldD0pKFteO10qKSIsIHJlLk0pCisKKyAgICBk
ZWYgc3RhcnRfbWV0YShzZWxmLCBhdHRycyk6CisgICAgICAgICIiIkJlYXV0aWZ1bCBTb3VwIGNh
biBkZXRlY3QgYSBjaGFyc2V0IGluY2x1ZGVkIGluIGEgTUVUQSB0YWcsCisgICAgICAgIHRyeSB0
byBjb252ZXJ0IHRoZSBkb2N1bWVudCB0byB0aGF0IGNoYXJzZXQsIGFuZCByZS1wYXJzZSB0aGUK
KyAgICAgICAgZG9jdW1lbnQgZnJvbSB0aGUgYmVnaW5uaW5nLiIiIgorICAgICAgICBodHRwRXF1
aXYgPSBOb25lCisgICAgICAgIGNvbnRlbnRUeXBlID0gTm9uZQorICAgICAgICBjb250ZW50VHlw
ZUluZGV4ID0gTm9uZQorICAgICAgICB0YWdOZWVkc0VuY29kaW5nU3Vic3RpdHV0aW9uID0gRmFs
c2UKKworICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4oYXR0cnMpKToKKyAgICAgICAgICAg
IGtleSwgdmFsdWUgPSBhdHRyc1tpXQorICAgICAgICAgICAga2V5ID0ga2V5Lmxvd2VyKCkKKyAg
ICAgICAgICAgIGlmIGtleSA9PSAnaHR0cC1lcXVpdic6CisgICAgICAgICAgICAgICAgaHR0cEVx
dWl2ID0gdmFsdWUKKyAgICAgICAgICAgIGVsaWYga2V5ID09ICdjb250ZW50JzoKKyAgICAgICAg
ICAgICAgICBjb250ZW50VHlwZSA9IHZhbHVlCisgICAgICAgICAgICAgICAgY29udGVudFR5cGVJ
bmRleCA9IGkKKworICAgICAgICBpZiBodHRwRXF1aXYgYW5kIGNvbnRlbnRUeXBlOiAjIEl0J3Mg
YW4gaW50ZXJlc3RpbmcgbWV0YSB0YWcuCisgICAgICAgICAgICBtYXRjaCA9IHNlbGYuQ0hBUlNF
VF9SRS5zZWFyY2goY29udGVudFR5cGUpCisgICAgICAgICAgICBpZiBtYXRjaDoKKyAgICAgICAg
ICAgICAgICBpZiAoc2VsZi5kZWNsYXJlZEhUTUxFbmNvZGluZyBpcyBub3QgTm9uZSBvcgorICAg
ICAgICAgICAgICAgICAgICBzZWxmLm9yaWdpbmFsRW5jb2RpbmcgPT0gc2VsZi5mcm9tRW5jb2Rp
bmcpOgorICAgICAgICAgICAgICAgICAgICAjIEFuIEhUTUwgZW5jb2Rpbmcgd2FzIHNuaWZmZWQg
d2hpbGUgY29udmVydGluZworICAgICAgICAgICAgICAgICAgICAjIHRoZSBkb2N1bWVudCB0byBV
bmljb2RlLCBvciBhbiBIVE1MIGVuY29kaW5nIHdhcworICAgICAgICAgICAgICAgICAgICAjIHNu
aWZmZWQgZHVyaW5nIGEgcHJldmlvdXMgcGFzcyB0aHJvdWdoIHRoZQorICAgICAgICAgICAgICAg
ICAgICAjIGRvY3VtZW50LCBvciBhbiBlbmNvZGluZyB3YXMgc3BlY2lmaWVkCisgICAgICAgICAg
ICAgICAgICAgICMgZXhwbGljaXRseSBhbmQgaXQgd29ya2VkLiBSZXdyaXRlIHRoZSBtZXRhIHRh
Zy4KKyAgICAgICAgICAgICAgICAgICAgZGVmIHJld3JpdGUobWF0Y2gpOgorICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIG1hdGNoLmdyb3VwKDEpICsgIiVTT1VQLUVOQ09ESU5HJSIKKyAg
ICAgICAgICAgICAgICAgICAgbmV3QXR0ciA9IHNlbGYuQ0hBUlNFVF9SRS5zdWIocmV3cml0ZSwg
Y29udGVudFR5cGUpCisgICAgICAgICAgICAgICAgICAgIGF0dHJzW2NvbnRlbnRUeXBlSW5kZXhd
ID0gKGF0dHJzW2NvbnRlbnRUeXBlSW5kZXhdWzBdLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuZXdBdHRyKQorICAgICAgICAgICAgICAgICAgICB0YWdO
ZWVkc0VuY29kaW5nU3Vic3RpdHV0aW9uID0gVHJ1ZQorICAgICAgICAgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICAgICAgICAgICMgVGhpcyBpcyBvdXIgZmlyc3QgcGFzcyB0aHJvdWdoIHRoZSBk
b2N1bWVudC4KKyAgICAgICAgICAgICAgICAgICAgIyBHbyB0aHJvdWdoIGl0IGFnYWluIHdpdGgg
dGhlIGVuY29kaW5nIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICBuZXdDaGFyc2V0
ID0gbWF0Y2guZ3JvdXAoMykKKyAgICAgICAgICAgICAgICAgICAgaWYgbmV3Q2hhcnNldCBhbmQg
bmV3Q2hhcnNldCAhPSBzZWxmLm9yaWdpbmFsRW5jb2Rpbmc6CisgICAgICAgICAgICAgICAgICAg
ICAgICBzZWxmLmRlY2xhcmVkSFRNTEVuY29kaW5nID0gbmV3Q2hhcnNldAorICAgICAgICAgICAg
ICAgICAgICAgICAgc2VsZi5fZmVlZChzZWxmLmRlY2xhcmVkSFRNTEVuY29kaW5nKQorICAgICAg
ICAgICAgICAgICAgICAgICAgcmFpc2UgU3RvcFBhcnNpbmcKKyAgICAgICAgICAgICAgICAgICAg
cGFzcworICAgICAgICB0YWcgPSBzZWxmLnVua25vd25fc3RhcnR0YWcoIm1ldGEiLCBhdHRycykK
KyAgICAgICAgaWYgdGFnIGFuZCB0YWdOZWVkc0VuY29kaW5nU3Vic3RpdHV0aW9uOgorICAgICAg
ICAgICAgdGFnLmNvbnRhaW5zU3Vic3RpdHV0aW9ucyA9IFRydWUKKworY2xhc3MgU3RvcFBhcnNp
bmcoRXhjZXB0aW9uKToKKyAgICBwYXNzCisKK2NsYXNzIElDYW50QmVsaWV2ZUl0c0JlYXV0aWZ1
bFNvdXAoQmVhdXRpZnVsU291cCk6CisKKyAgICAiIiJUaGUgQmVhdXRpZnVsU291cCBjbGFzcyBp
cyBvcmllbnRlZCB0b3dhcmRzIHNraXBwaW5nIG92ZXIKKyAgICBjb21tb24gSFRNTCBlcnJvcnMg
bGlrZSB1bmNsb3NlZCB0YWdzLiBIb3dldmVyLCBzb21ldGltZXMgaXQgbWFrZXMKKyAgICBlcnJv
cnMgb2YgaXRzIG93bi4gRm9yIGluc3RhbmNlLCBjb25zaWRlciB0aGlzIGZyYWdtZW50OgorCisg
ICAgIDxiPkZvbzxiPkJhcjwvYj48L2I+CisKKyAgICBUaGlzIGlzIHBlcmZlY3RseSB2YWxpZCAo
aWYgYml6YXJyZSkgSFRNTC4gSG93ZXZlciwgdGhlCisgICAgQmVhdXRpZnVsU291cCBjbGFzcyB3
aWxsIGltcGxpY2l0bHkgY2xvc2UgdGhlIGZpcnN0IGIgdGFnIHdoZW4gaXQKKyAgICBlbmNvdW50
ZXJzIHRoZSBzZWNvbmQgJ2InLiBJdCB3aWxsIHRoaW5rIHRoZSBhdXRob3Igd3JvdGUKKyAgICAi
PGI+Rm9vPGI+QmFyIiwgYW5kIGRpZG4ndCBjbG9zZSB0aGUgZmlyc3QgJ2InIHRhZywgYmVjYXVz
ZQorICAgIHRoZXJlJ3Mgbm8gcmVhbC13b3JsZCByZWFzb24gdG8gYm9sZCBzb21ldGhpbmcgdGhh
dCdzIGFscmVhZHkKKyAgICBib2xkLiBXaGVuIGl0IGVuY291bnRlcnMgJzwvYj48L2I+JyBpdCB3
aWxsIGNsb3NlIHR3byBtb3JlICdiJworICAgIHRhZ3MsIGZvciBhIGdyYW5kIHRvdGFsIG9mIHRo
cmVlIHRhZ3MgY2xvc2VkIGluc3RlYWQgb2YgdHdvLiBUaGlzCisgICAgY2FuIHRocm93IG9mZiB0
aGUgcmVzdCBvZiB5b3VyIGRvY3VtZW50IHN0cnVjdHVyZS4gVGhlIHNhbWUgaXMKKyAgICB0cnVl
IG9mIGEgbnVtYmVyIG9mIG90aGVyIHRhZ3MsIGxpc3RlZCBiZWxvdy4KKworICAgIEl0J3MgbXVj
aCBtb3JlIGNvbW1vbiBmb3Igc29tZW9uZSB0byBmb3JnZXQgdG8gY2xvc2UgYSAnYicgdGFnCisg
ICAgdGhhbiB0byBhY3R1YWxseSB1c2UgbmVzdGVkICdiJyB0YWdzLCBhbmQgdGhlIEJlYXV0aWZ1
bFNvdXAgY2xhc3MKKyAgICBoYW5kbGVzIHRoZSBjb21tb24gY2FzZS4gVGhpcyBjbGFzcyBoYW5k
bGVzIHRoZSBub3QtY28tY29tbW9uCisgICAgY2FzZTogd2hlcmUgeW91IGNhbid0IGJlbGlldmUg
c29tZW9uZSB3cm90ZSB3aGF0IHRoZXkgZGlkLCBidXQKKyAgICBpdCdzIHZhbGlkIEhUTUwgYW5k
IEJlYXV0aWZ1bFNvdXAgc2NyZXdlZCB1cCBieSBhc3N1bWluZyBpdAorICAgIHdvdWxkbid0IGJl
LiIiIgorCisgICAgSV9DQU5UX0JFTElFVkVfVEhFWVJFX05FU1RBQkxFX0lOTElORV9UQUdTID0g
XAorICAgICAoJ2VtJywgJ2JpZycsICdpJywgJ3NtYWxsJywgJ3R0JywgJ2FiYnInLCAnYWNyb255
bScsICdzdHJvbmcnLAorICAgICAgJ2NpdGUnLCAnY29kZScsICdkZm4nLCAna2JkJywgJ3NhbXAn
LCAnc3Ryb25nJywgJ3ZhcicsICdiJywKKyAgICAgICdiaWcnKQorCisgICAgSV9DQU5UX0JFTElF
VkVfVEhFWVJFX05FU1RBQkxFX0JMT0NLX1RBR1MgPSAoJ25vc2NyaXB0JywpCisKKyAgICBORVNU
QUJMRV9UQUdTID0gYnVpbGRUYWdNYXAoW10sIEJlYXV0aWZ1bFNvdXAuTkVTVEFCTEVfVEFHUywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSV9DQU5UX0JFTElFVkVfVEhFWVJFX05F
U1RBQkxFX0JMT0NLX1RBR1MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElfQ0FO
VF9CRUxJRVZFX1RIRVlSRV9ORVNUQUJMRV9JTkxJTkVfVEFHUykKKworY2xhc3MgTWluaW1hbFNv
dXAoQmVhdXRpZnVsU291cCk6CisgICAgIiIiVGhlIE1pbmltYWxTb3VwIGNsYXNzIGlzIGZvciBw
YXJzaW5nIEhUTUwgdGhhdCBjb250YWlucworICAgIHBhdGhvbG9naWNhbGx5IGJhZCBtYXJrdXAu
IEl0IG1ha2VzIG5vIGFzc3VtcHRpb25zIGFib3V0IHRhZworICAgIG5lc3RpbmcsIGJ1dCBpdCBk
b2VzIGtub3cgd2hpY2ggdGFncyBhcmUgc2VsZi1jbG9zaW5nLCB0aGF0CisgICAgPHNjcmlwdD4g
dGFncyBjb250YWluIEphdmFzY3JpcHQgYW5kIHNob3VsZCBub3QgYmUgcGFyc2VkLCB0aGF0Cisg
ICAgTUVUQSB0YWdzIG1heSBjb250YWluIGVuY29kaW5nIGluZm9ybWF0aW9uLCBhbmQgc28gb24u
CisKKyAgICBUaGlzIGFsc28gbWFrZXMgaXQgYmV0dGVyIGZvciBzdWJjbGFzc2luZyB0aGFuIEJl
YXV0aWZ1bFN0b25lU291cAorICAgIG9yIEJlYXV0aWZ1bFNvdXAuIiIiCisKKyAgICBSRVNFVF9O
RVNUSU5HX1RBR1MgPSBidWlsZFRhZ01hcCgnbm9zY3JpcHQnKQorICAgIE5FU1RBQkxFX1RBR1Mg
PSB7fQorCitjbGFzcyBCZWF1dGlmdWxTT0FQKEJlYXV0aWZ1bFN0b25lU291cCk6CisgICAgIiIi
VGhpcyBjbGFzcyB3aWxsIHB1c2ggYSB0YWcgd2l0aCBvbmx5IGEgc2luZ2xlIHN0cmluZyBjaGls
ZCBpbnRvCisgICAgdGhlIHRhZydzIHBhcmVudCBhcyBhbiBhdHRyaWJ1dGUuIFRoZSBhdHRyaWJ1
dGUncyBuYW1lIGlzIHRoZSB0YWcKKyAgICBuYW1lLCBhbmQgdGhlIHZhbHVlIGlzIHRoZSBzdHJp
bmcgY2hpbGQuIEFuIGV4YW1wbGUgc2hvdWxkIGdpdmUKKyAgICB0aGUgZmxhdm9yIG9mIHRoZSBj
aGFuZ2U6CisKKyAgICA8Zm9vPjxiYXI+YmF6PC9iYXI+PC9mb28+CisgICAgID0+CisgICAgPGZv
byBiYXI9ImJheiI+PGJhcj5iYXo8L2Jhcj48L2Zvbz4KKworICAgIFlvdSBjYW4gdGhlbiBhY2Nl
c3MgZm9vVGFnWydiYXInXSBpbnN0ZWFkIG9mIGZvb1RhZy5iYXJUYWcuc3RyaW5nLgorCisgICAg
VGhpcyBpcywgb2YgY291cnNlLCB1c2VmdWwgZm9yIHNjcmFwaW5nIHN0cnVjdHVyZXMgdGhhdCB0
ZW5kIHRvCisgICAgdXNlIHN1YmVsZW1lbnRzIGluc3RlYWQgb2YgYXR0cmlidXRlcywgc3VjaCBh
cyBTT0FQIG1lc3NhZ2VzLiBOb3RlCisgICAgdGhhdCBpdCBtb2RpZmllcyBpdHMgaW5wdXQsIHNv
IGRvbid0IHByaW50IHRoZSBtb2RpZmllZCB2ZXJzaW9uCisgICAgb3V0LgorCisgICAgSSdtIG5v
dCBzdXJlIGhvdyBtYW55IHBlb3BsZSByZWFsbHkgd2FudCB0byB1c2UgdGhpcyBjbGFzczsgbGV0
IG1lCisgICAga25vdyBpZiB5b3UgZG8uIE1haW5seSBJIGxpa2UgdGhlIG5hbWUuIiIiCisKKyAg
ICBkZWYgcG9wVGFnKHNlbGYpOgorICAgICAgICBpZiBsZW4oc2VsZi50YWdTdGFjaykgPiAxOgor
ICAgICAgICAgICAgdGFnID0gc2VsZi50YWdTdGFja1stMV0KKyAgICAgICAgICAgIHBhcmVudCA9
IHNlbGYudGFnU3RhY2tbLTJdCisgICAgICAgICAgICBwYXJlbnQuX2dldEF0dHJNYXAoKQorICAg
ICAgICAgICAgaWYgKGlzaW5zdGFuY2UodGFnLCBUYWcpIGFuZCBsZW4odGFnLmNvbnRlbnRzKSA9
PSAxIGFuZAorICAgICAgICAgICAgICAgIGlzaW5zdGFuY2UodGFnLmNvbnRlbnRzWzBdLCBOYXZp
Z2FibGVTdHJpbmcpIGFuZAorICAgICAgICAgICAgICAgIG5vdCBwYXJlbnQuYXR0ck1hcC5oYXNf
a2V5KHRhZy5uYW1lKSk6CisgICAgICAgICAgICAgICAgcGFyZW50W3RhZy5uYW1lXSA9IHRhZy5j
b250ZW50c1swXQorICAgICAgICBCZWF1dGlmdWxTdG9uZVNvdXAucG9wVGFnKHNlbGYpCisKKyNF
bnRlcnByaXNlIGNsYXNzIG5hbWVzISBJdCBoYXMgY29tZSB0byBvdXIgYXR0ZW50aW9uIHRoYXQg
c29tZSBwZW9wbGUKKyN0aGluayB0aGUgbmFtZXMgb2YgdGhlIEJlYXV0aWZ1bCBTb3VwIHBhcnNl
ciBjbGFzc2VzIGFyZSB0b28gc2lsbHkKKyNhbmQgInVucHJvZmVzc2lvbmFsIiBmb3IgdXNlIGlu
IGVudGVycHJpc2Ugc2NyZWVuLXNjcmFwaW5nLiBXZSBmZWVsCisjeW91ciBwYWluISBGb3Igc3Vj
aC1taW5kZWQgZm9saywgdGhlIEJlYXV0aWZ1bCBTb3VwIENvbnNvcnRpdW0gQW5kCisjQWxsLU5p
Z2h0IEtvc2hlciBCYWtlcnkgcmVjb21tZW5kcyByZW5hbWluZyB0aGlzIGZpbGUgdG8KKyMiUm9i
dXN0UGFyc2VyLnB5IiAob3IsIGluIGNhc2VzIG9mIGV4dHJlbWUgZW50ZXJwcmlzaW5lc3MsCisj
IlJvYnVzdFBhcnNlckJlYW5JbnRlcmZhY2UuY2xhc3MiKSBhbmQgdXNpbmcgdGhlIGZvbGxvd2lu
ZworI2VudGVycHJpc2UtZnJpZW5kbHkgY2xhc3MgYWxpYXNlczoKK2NsYXNzIFJvYnVzdFhNTFBh
cnNlcihCZWF1dGlmdWxTdG9uZVNvdXApOgorICAgIHBhc3MKK2NsYXNzIFJvYnVzdEhUTUxQYXJz
ZXIoQmVhdXRpZnVsU291cCk6CisgICAgcGFzcworY2xhc3MgUm9idXN0V2Fja0Fzc0hUTUxQYXJz
ZXIoSUNhbnRCZWxpZXZlSXRzQmVhdXRpZnVsU291cCk6CisgICAgcGFzcworY2xhc3MgUm9idXN0
SW5zYW5lbHlXYWNrQXNzSFRNTFBhcnNlcihNaW5pbWFsU291cCk6CisgICAgcGFzcworY2xhc3Mg
U2ltcGxpZnlpbmdTT0FQUGFyc2VyKEJlYXV0aWZ1bFNPQVApOgorICAgIHBhc3MKKworIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIEJv
bnVzIGxpYnJhcnk6IFVuaWNvZGUsIERhbW1pdAorIworIyBUaGlzIGNsYXNzIGZvcmNlcyBYTUwg
ZGF0YSBpbnRvIGEgc3RhbmRhcmQgZm9ybWF0ICh1c3VhbGx5IHRvIFVURi04CisjIG9yIFVuaWNv
ZGUpLiAgSXQgaXMgaGVhdmlseSBiYXNlZCBvbiBjb2RlIGZyb20gTWFyayBQaWxncmltJ3MKKyMg
VW5pdmVyc2FsIEZlZWQgUGFyc2VyLiBJdCBkb2VzIG5vdCByZXdyaXRlIHRoZSBYTUwgb3IgSFRN
TCB0bworIyByZWZsZWN0IGEgbmV3IGVuY29kaW5nOiB0aGF0IGhhcHBlbnMgaW4gQmVhdXRpZnVs
U3RvbmVTb3VwLmhhbmRsZV9waQorIyAoWE1MKSBhbmQgQmVhdXRpZnVsU291cC5zdGFydF9tZXRh
IChIVE1MKS4KKworIyBBdXRvZGV0ZWN0cyBjaGFyYWN0ZXIgZW5jb2RpbmdzLgorIyBEb3dubG9h
ZCBmcm9tIGh0dHA6Ly9jaGFyZGV0LmZlZWRwYXJzZXIub3JnLwordHJ5OgorICAgIGltcG9ydCBj
aGFyZGV0CisjICAgIGltcG9ydCBjaGFyZGV0LmNvbnN0YW50cworIyAgICBjaGFyZGV0LmNvbnN0
YW50cy5fZGVidWcgPSAxCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgY2hhcmRldCA9IE5vbmUK
KworIyBjamtjb2RlY3MgYW5kIGljb252X2NvZGVjIG1ha2UgUHl0aG9uIGtub3cgYWJvdXQgbW9y
ZSBjaGFyYWN0ZXIgZW5jb2RpbmdzLgorIyBCb3RoIGFyZSBhdmFpbGFibGUgZnJvbSBodHRwOi8v
Y2prcHl0aG9uLmkxOG4ub3JnLworIyBUaGV5J3JlIGJ1aWx0IGluIGlmIHlvdSB1c2UgUHl0aG9u
IDIuNC4KK3RyeToKKyAgICBpbXBvcnQgY2prY29kZWNzLmFsaWFzZXMKK2V4Y2VwdCBJbXBvcnRF
cnJvcjoKKyAgICBwYXNzCit0cnk6CisgICAgaW1wb3J0IGljb252X2NvZGVjCitleGNlcHQgSW1w
b3J0RXJyb3I6CisgICAgcGFzcworCitjbGFzcyBVbmljb2RlRGFtbWl0OgorICAgICIiIkEgY2xh
c3MgZm9yIGRldGVjdGluZyB0aGUgZW5jb2Rpbmcgb2YgYSAqTUwgZG9jdW1lbnQgYW5kCisgICAg
Y29udmVydGluZyBpdCB0byBhIFVuaWNvZGUgc3RyaW5nLiBJZiB0aGUgc291cmNlIGVuY29kaW5n
IGlzCisgICAgd2luZG93cy0xMjUyLCBjYW4gcmVwbGFjZSBNUyBzbWFydCBxdW90ZXMgd2l0aCB0
aGVpciBIVE1MIG9yIFhNTAorICAgIGVxdWl2YWxlbnRzLiIiIgorCisgICAgIyBUaGlzIGRpY3Rp
b25hcnkgbWFwcyBjb21tb25seSBzZWVuIHZhbHVlcyBmb3IgImNoYXJzZXQiIGluIEhUTUwKKyAg
ICAjIG1ldGEgdGFncyB0byB0aGUgY29ycmVzcG9uZGluZyBQeXRob24gY29kZWMgbmFtZXMuIEl0
IG9ubHkgY292ZXJzCisgICAgIyB2YWx1ZXMgdGhhdCBhcmVuJ3QgaW4gUHl0aG9uJ3MgYWxpYXNl
cyBhbmQgY2FuJ3QgYmUgZGV0ZXJtaW5lZAorICAgICMgYnkgdGhlIGhldXJpc3RpY3MgaW4gZmlu
ZF9jb2RlYy4KKyAgICBDSEFSU0VUX0FMSUFTRVMgPSB7ICJtYWNpbnRvc2giIDogIm1hYy1yb21h
biIsCisgICAgICAgICAgICAgICAgICAgICAgICAieC1zamlzIiA6ICJzaGlmdC1qaXMiIH0KKwor
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXJrdXAsIG92ZXJyaWRlRW5jb2RpbmdzPVtdLAorICAg
ICAgICAgICAgICAgICBzbWFydFF1b3Rlc1RvPSd4bWwnLCBpc0hUTUw9RmFsc2UpOgorICAgICAg
ICBzZWxmLmRlY2xhcmVkSFRNTEVuY29kaW5nID0gTm9uZQorICAgICAgICBzZWxmLm1hcmt1cCwg
ZG9jdW1lbnRFbmNvZGluZywgc25pZmZlZEVuY29kaW5nID0gXAorICAgICAgICAgICAgICAgICAg
ICAgc2VsZi5fZGV0ZWN0RW5jb2RpbmcobWFya3VwLCBpc0hUTUwpCisgICAgICAgIHNlbGYuc21h
cnRRdW90ZXNUbyA9IHNtYXJ0UXVvdGVzVG8KKyAgICAgICAgc2VsZi50cmllZEVuY29kaW5ncyA9
IFtdCisgICAgICAgIGlmIG1hcmt1cCA9PSAnJyBvciBpc2luc3RhbmNlKG1hcmt1cCwgdW5pY29k
ZSk6CisgICAgICAgICAgICBzZWxmLm9yaWdpbmFsRW5jb2RpbmcgPSBOb25lCisgICAgICAgICAg
ICBzZWxmLnVuaWNvZGUgPSB1bmljb2RlKG1hcmt1cCkKKyAgICAgICAgICAgIHJldHVybgorCisg
ICAgICAgIHUgPSBOb25lCisgICAgICAgIGZvciBwcm9wb3NlZEVuY29kaW5nIGluIG92ZXJyaWRl
RW5jb2RpbmdzOgorICAgICAgICAgICAgdSA9IHNlbGYuX2NvbnZlcnRGcm9tKHByb3Bvc2VkRW5j
b2RpbmcpCisgICAgICAgICAgICBpZiB1OiBicmVhaworICAgICAgICBpZiBub3QgdToKKyAgICAg
ICAgICAgIGZvciBwcm9wb3NlZEVuY29kaW5nIGluIChkb2N1bWVudEVuY29kaW5nLCBzbmlmZmVk
RW5jb2RpbmcpOgorICAgICAgICAgICAgICAgIHUgPSBzZWxmLl9jb252ZXJ0RnJvbShwcm9wb3Nl
ZEVuY29kaW5nKQorICAgICAgICAgICAgICAgIGlmIHU6IGJyZWFrCisKKyAgICAgICAgIyBJZiBu
byBsdWNrIGFuZCB3ZSBoYXZlIGF1dG8tZGV0ZWN0aW9uIGxpYnJhcnksIHRyeSB0aGF0OgorICAg
ICAgICBpZiBub3QgdSBhbmQgY2hhcmRldCBhbmQgbm90IGlzaW5zdGFuY2Uoc2VsZi5tYXJrdXAs
IHVuaWNvZGUpOgorICAgICAgICAgICAgdSA9IHNlbGYuX2NvbnZlcnRGcm9tKGNoYXJkZXQuZGV0
ZWN0KHNlbGYubWFya3VwKVsnZW5jb2RpbmcnXSkKKworICAgICAgICAjIEFzIGEgbGFzdCByZXNv
cnQsIHRyeSB1dGYtOCBhbmQgd2luZG93cy0xMjUyOgorICAgICAgICBpZiBub3QgdToKKyAgICAg
ICAgICAgIGZvciBwcm9wb3NlZF9lbmNvZGluZyBpbiAoInV0Zi04IiwgIndpbmRvd3MtMTI1MiIp
OgorICAgICAgICAgICAgICAgIHUgPSBzZWxmLl9jb252ZXJ0RnJvbShwcm9wb3NlZF9lbmNvZGlu
ZykKKyAgICAgICAgICAgICAgICBpZiB1OiBicmVhaworCisgICAgICAgIHNlbGYudW5pY29kZSA9
IHUKKyAgICAgICAgaWYgbm90IHU6IHNlbGYub3JpZ2luYWxFbmNvZGluZyA9IE5vbmUKKworICAg
IGRlZiBfc3ViTVNDaGFyKHNlbGYsIG9yaWcpOgorICAgICAgICAiIiJDaGFuZ2VzIGEgTVMgc21h
cnQgcXVvdGUgY2hhcmFjdGVyIHRvIGFuIFhNTCBvciBIVE1MCisgICAgICAgIGVudGl0eS4iIiIK
KyAgICAgICAgc3ViID0gc2VsZi5NU19DSEFSUy5nZXQob3JpZykKKyAgICAgICAgaWYgaXNpbnN0
YW5jZShzdWIsIHR1cGxlKToKKyAgICAgICAgICAgIGlmIHNlbGYuc21hcnRRdW90ZXNUbyA9PSAn
eG1sJzoKKyAgICAgICAgICAgICAgICBzdWIgPSAnJiN4JXM7JyAlIHN1YlsxXQorICAgICAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgICAgICBzdWIgPSAnJiVzOycgJSBzdWJbMF0KKyAgICAgICAg
cmV0dXJuIHN1YgorCisgICAgZGVmIF9jb252ZXJ0RnJvbShzZWxmLCBwcm9wb3NlZCk6CisgICAg
ICAgIHByb3Bvc2VkID0gc2VsZi5maW5kX2NvZGVjKHByb3Bvc2VkKQorICAgICAgICBpZiBub3Qg
cHJvcG9zZWQgb3IgcHJvcG9zZWQgaW4gc2VsZi50cmllZEVuY29kaW5nczoKKyAgICAgICAgICAg
IHJldHVybiBOb25lCisgICAgICAgIHNlbGYudHJpZWRFbmNvZGluZ3MuYXBwZW5kKHByb3Bvc2Vk
KQorICAgICAgICBtYXJrdXAgPSBzZWxmLm1hcmt1cAorCisgICAgICAgICMgQ29udmVydCBzbWFy
dCBxdW90ZXMgdG8gSFRNTCBpZiBjb21pbmcgZnJvbSBhbiBlbmNvZGluZworICAgICAgICAjIHRo
YXQgbWlnaHQgaGF2ZSB0aGVtLgorICAgICAgICBpZiBzZWxmLnNtYXJ0UXVvdGVzVG8gYW5kIHBy
b3Bvc2VkLmxvd2VyKCkgaW4oIndpbmRvd3MtMTI1MiIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaXNvLTg4NTktMSIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaXNvLTg4NTktMiIp
OgorICAgICAgICAgICAgbWFya3VwID0gcmUuY29tcGlsZSgiKFtceDgwLVx4OWZdKSIpLnN1YiBc
CisgICAgICAgICAgICAgICAgICAgICAobGFtYmRhKHgpOiBzZWxmLl9zdWJNU0NoYXIoeC5ncm91
cCgxKSksCisgICAgICAgICAgICAgICAgICAgICAgbWFya3VwKQorCisgICAgICAgIHRyeToKKyAg
ICAgICAgICAgICMgcHJpbnQgIlRyeWluZyB0byBjb252ZXJ0IGRvY3VtZW50IHRvICVzIiAlIHBy
b3Bvc2VkCisgICAgICAgICAgICB1ID0gc2VsZi5fdG9Vbmljb2RlKG1hcmt1cCwgcHJvcG9zZWQp
CisgICAgICAgICAgICBzZWxmLm1hcmt1cCA9IHUKKyAgICAgICAgICAgIHNlbGYub3JpZ2luYWxF
bmNvZGluZyA9IHByb3Bvc2VkCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAg
ICAgICAjIHByaW50ICJUaGF0IGRpZG4ndCB3b3JrISIKKyAgICAgICAgICAgICMgcHJpbnQgZQor
ICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgI3ByaW50ICJDb3JyZWN0IGVuY29kaW5n
OiAlcyIgJSBwcm9wb3NlZAorICAgICAgICByZXR1cm4gc2VsZi5tYXJrdXAKKworICAgIGRlZiBf
dG9Vbmljb2RlKHNlbGYsIGRhdGEsIGVuY29kaW5nKToKKyAgICAgICAgJycnR2l2ZW4gYSBzdHJp
bmcgYW5kIGl0cyBlbmNvZGluZywgZGVjb2RlcyB0aGUgc3RyaW5nIGludG8gVW5pY29kZS4KKyAg
ICAgICAgJWVuY29kaW5nIGlzIGEgc3RyaW5nIHJlY29nbml6ZWQgYnkgZW5jb2RpbmdzLmFsaWFz
ZXMnJycKKworICAgICAgICAjIHN0cmlwIEJ5dGUgT3JkZXIgTWFyayAoaWYgcHJlc2VudCkKKyAg
ICAgICAgaWYgKGxlbihkYXRhKSA+PSA0KSBhbmQgKGRhdGFbOjJdID09ICdceGZlXHhmZicpIFwK
KyAgICAgICAgICAgICAgIGFuZCAoZGF0YVsyOjRdICE9ICdceDAwXHgwMCcpOgorICAgICAgICAg
ICAgZW5jb2RpbmcgPSAndXRmLTE2YmUnCisgICAgICAgICAgICBkYXRhID0gZGF0YVsyOl0KKyAg
ICAgICAgZWxpZiAobGVuKGRhdGEpID49IDQpIGFuZCAoZGF0YVs6Ml0gPT0gJ1x4ZmZceGZlJykg
XAorICAgICAgICAgICAgICAgICBhbmQgKGRhdGFbMjo0XSAhPSAnXHgwMFx4MDAnKToKKyAgICAg
ICAgICAgIGVuY29kaW5nID0gJ3V0Zi0xNmxlJworICAgICAgICAgICAgZGF0YSA9IGRhdGFbMjpd
CisgICAgICAgIGVsaWYgZGF0YVs6M10gPT0gJ1x4ZWZceGJiXHhiZic6CisgICAgICAgICAgICBl
bmNvZGluZyA9ICd1dGYtOCcKKyAgICAgICAgICAgIGRhdGEgPSBkYXRhWzM6XQorICAgICAgICBl
bGlmIGRhdGFbOjRdID09ICdceDAwXHgwMFx4ZmVceGZmJzoKKyAgICAgICAgICAgIGVuY29kaW5n
ID0gJ3V0Zi0zMmJlJworICAgICAgICAgICAgZGF0YSA9IGRhdGFbNDpdCisgICAgICAgIGVsaWYg
ZGF0YVs6NF0gPT0gJ1x4ZmZceGZlXHgwMFx4MDAnOgorICAgICAgICAgICAgZW5jb2RpbmcgPSAn
dXRmLTMybGUnCisgICAgICAgICAgICBkYXRhID0gZGF0YVs0Ol0KKyAgICAgICAgbmV3ZGF0YSA9
IHVuaWNvZGUoZGF0YSwgZW5jb2RpbmcpCisgICAgICAgIHJldHVybiBuZXdkYXRhCisKKyAgICBk
ZWYgX2RldGVjdEVuY29kaW5nKHNlbGYsIHhtbF9kYXRhLCBpc0hUTUw9RmFsc2UpOgorICAgICAg
ICAiIiJHaXZlbiBhIGRvY3VtZW50LCB0cmllcyB0byBkZXRlY3QgaXRzIFhNTCBlbmNvZGluZy4i
IiIKKyAgICAgICAgeG1sX2VuY29kaW5nID0gc25pZmZlZF94bWxfZW5jb2RpbmcgPSBOb25lCisg
ICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIHhtbF9kYXRhWzo0XSA9PSAnXHg0Y1x4NmZceGE3
XHg5NCc6CisgICAgICAgICAgICAgICAgIyBFQkNESUMKKyAgICAgICAgICAgICAgICB4bWxfZGF0
YSA9IHNlbGYuX2ViY2RpY190b19hc2NpaSh4bWxfZGF0YSkKKyAgICAgICAgICAgIGVsaWYgeG1s
X2RhdGFbOjRdID09ICdceDAwXHgzY1x4MDBceDNmJzoKKyAgICAgICAgICAgICAgICAjIFVURi0x
NkJFCisgICAgICAgICAgICAgICAgc25pZmZlZF94bWxfZW5jb2RpbmcgPSAndXRmLTE2YmUnCisg
ICAgICAgICAgICAgICAgeG1sX2RhdGEgPSB1bmljb2RlKHhtbF9kYXRhLCAndXRmLTE2YmUnKS5l
bmNvZGUoJ3V0Zi04JykKKyAgICAgICAgICAgIGVsaWYgKGxlbih4bWxfZGF0YSkgPj0gNCkgYW5k
ICh4bWxfZGF0YVs6Ml0gPT0gJ1x4ZmVceGZmJykgXAorICAgICAgICAgICAgICAgICAgICAgYW5k
ICh4bWxfZGF0YVsyOjRdICE9ICdceDAwXHgwMCcpOgorICAgICAgICAgICAgICAgICMgVVRGLTE2
QkUgd2l0aCBCT00KKyAgICAgICAgICAgICAgICBzbmlmZmVkX3htbF9lbmNvZGluZyA9ICd1dGYt
MTZiZScKKyAgICAgICAgICAgICAgICB4bWxfZGF0YSA9IHVuaWNvZGUoeG1sX2RhdGFbMjpdLCAn
dXRmLTE2YmUnKS5lbmNvZGUoJ3V0Zi04JykKKyAgICAgICAgICAgIGVsaWYgeG1sX2RhdGFbOjRd
ID09ICdceDNjXHgwMFx4M2ZceDAwJzoKKyAgICAgICAgICAgICAgICAjIFVURi0xNkxFCisgICAg
ICAgICAgICAgICAgc25pZmZlZF94bWxfZW5jb2RpbmcgPSAndXRmLTE2bGUnCisgICAgICAgICAg
ICAgICAgeG1sX2RhdGEgPSB1bmljb2RlKHhtbF9kYXRhLCAndXRmLTE2bGUnKS5lbmNvZGUoJ3V0
Zi04JykKKyAgICAgICAgICAgIGVsaWYgKGxlbih4bWxfZGF0YSkgPj0gNCkgYW5kICh4bWxfZGF0
YVs6Ml0gPT0gJ1x4ZmZceGZlJykgYW5kIFwKKyAgICAgICAgICAgICAgICAgICAgICh4bWxfZGF0
YVsyOjRdICE9ICdceDAwXHgwMCcpOgorICAgICAgICAgICAgICAgICMgVVRGLTE2TEUgd2l0aCBC
T00KKyAgICAgICAgICAgICAgICBzbmlmZmVkX3htbF9lbmNvZGluZyA9ICd1dGYtMTZsZScKKyAg
ICAgICAgICAgICAgICB4bWxfZGF0YSA9IHVuaWNvZGUoeG1sX2RhdGFbMjpdLCAndXRmLTE2bGUn
KS5lbmNvZGUoJ3V0Zi04JykKKyAgICAgICAgICAgIGVsaWYgeG1sX2RhdGFbOjRdID09ICdceDAw
XHgwMFx4MDBceDNjJzoKKyAgICAgICAgICAgICAgICAjIFVURi0zMkJFCisgICAgICAgICAgICAg
ICAgc25pZmZlZF94bWxfZW5jb2RpbmcgPSAndXRmLTMyYmUnCisgICAgICAgICAgICAgICAgeG1s
X2RhdGEgPSB1bmljb2RlKHhtbF9kYXRhLCAndXRmLTMyYmUnKS5lbmNvZGUoJ3V0Zi04JykKKyAg
ICAgICAgICAgIGVsaWYgeG1sX2RhdGFbOjRdID09ICdceDNjXHgwMFx4MDBceDAwJzoKKyAgICAg
ICAgICAgICAgICAjIFVURi0zMkxFCisgICAgICAgICAgICAgICAgc25pZmZlZF94bWxfZW5jb2Rp
bmcgPSAndXRmLTMybGUnCisgICAgICAgICAgICAgICAgeG1sX2RhdGEgPSB1bmljb2RlKHhtbF9k
YXRhLCAndXRmLTMybGUnKS5lbmNvZGUoJ3V0Zi04JykKKyAgICAgICAgICAgIGVsaWYgeG1sX2Rh
dGFbOjRdID09ICdceDAwXHgwMFx4ZmVceGZmJzoKKyAgICAgICAgICAgICAgICAjIFVURi0zMkJF
IHdpdGggQk9NCisgICAgICAgICAgICAgICAgc25pZmZlZF94bWxfZW5jb2RpbmcgPSAndXRmLTMy
YmUnCisgICAgICAgICAgICAgICAgeG1sX2RhdGEgPSB1bmljb2RlKHhtbF9kYXRhWzQ6XSwgJ3V0
Zi0zMmJlJykuZW5jb2RlKCd1dGYtOCcpCisgICAgICAgICAgICBlbGlmIHhtbF9kYXRhWzo0XSA9
PSAnXHhmZlx4ZmVceDAwXHgwMCc6CisgICAgICAgICAgICAgICAgIyBVVEYtMzJMRSB3aXRoIEJP
TQorICAgICAgICAgICAgICAgIHNuaWZmZWRfeG1sX2VuY29kaW5nID0gJ3V0Zi0zMmxlJworICAg
ICAgICAgICAgICAgIHhtbF9kYXRhID0gdW5pY29kZSh4bWxfZGF0YVs0Ol0sICd1dGYtMzJsZScp
LmVuY29kZSgndXRmLTgnKQorICAgICAgICAgICAgZWxpZiB4bWxfZGF0YVs6M10gPT0gJ1x4ZWZc
eGJiXHhiZic6CisgICAgICAgICAgICAgICAgIyBVVEYtOCB3aXRoIEJPTQorICAgICAgICAgICAg
ICAgIHNuaWZmZWRfeG1sX2VuY29kaW5nID0gJ3V0Zi04JworICAgICAgICAgICAgICAgIHhtbF9k
YXRhID0gdW5pY29kZSh4bWxfZGF0YVszOl0sICd1dGYtOCcpLmVuY29kZSgndXRmLTgnKQorICAg
ICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzbmlmZmVkX3htbF9lbmNvZGluZyA9ICdh
c2NpaScKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAg
IHhtbF9lbmNvZGluZ19tYXRjaCA9IE5vbmUKKyAgICAgICAgeG1sX2VuY29kaW5nX21hdGNoID0g
cmUuY29tcGlsZSgKKyAgICAgICAgICAgICdePFw/LiplbmNvZGluZz1bXCciXSguKj8pW1wnIl0u
Klw/PicpLm1hdGNoKHhtbF9kYXRhKQorICAgICAgICBpZiBub3QgeG1sX2VuY29kaW5nX21hdGNo
IGFuZCBpc0hUTUw6CisgICAgICAgICAgICByZWdleHAgPSByZS5jb21waWxlKCc8XHMqbWV0YVte
Pl0rY2hhcnNldD0oW14+XSo/KVs7XCciPl0nLCByZS5JKQorICAgICAgICAgICAgeG1sX2VuY29k
aW5nX21hdGNoID0gcmVnZXhwLnNlYXJjaCh4bWxfZGF0YSkKKyAgICAgICAgaWYgeG1sX2VuY29k
aW5nX21hdGNoIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgeG1sX2VuY29kaW5nID0geG1sX2Vu
Y29kaW5nX21hdGNoLmdyb3VwcygpWzBdLmxvd2VyKCkKKyAgICAgICAgICAgIGlmIGlzSFRNTDoK
KyAgICAgICAgICAgICAgICBzZWxmLmRlY2xhcmVkSFRNTEVuY29kaW5nID0geG1sX2VuY29kaW5n
CisgICAgICAgICAgICBpZiBzbmlmZmVkX3htbF9lbmNvZGluZyBhbmQgXAorICAgICAgICAgICAg
ICAgKHhtbF9lbmNvZGluZyBpbiAoJ2lzby0xMDY0Ni11Y3MtMicsICd1Y3MtMicsICdjc3VuaWNv
ZGUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lzby0xMDY0Ni11Y3MtNCcs
ICd1Y3MtNCcsICdjc3VjczQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3V0
Zi0xNicsICd1dGYtMzInLCAndXRmXzE2JywgJ3V0Zl8zMicsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAndXRmMTYnLCAndTE2JykpOgorICAgICAgICAgICAgICAgIHhtbF9lbmNv
ZGluZyA9IHNuaWZmZWRfeG1sX2VuY29kaW5nCisgICAgICAgIHJldHVybiB4bWxfZGF0YSwgeG1s
X2VuY29kaW5nLCBzbmlmZmVkX3htbF9lbmNvZGluZworCisKKyAgICBkZWYgZmluZF9jb2RlYyhz
ZWxmLCBjaGFyc2V0KToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NvZGVjKHNlbGYuQ0hBUlNFVF9B
TElBU0VTLmdldChjaGFyc2V0LCBjaGFyc2V0KSkgXAorICAgICAgICAgICAgICAgb3IgKGNoYXJz
ZXQgYW5kIHNlbGYuX2NvZGVjKGNoYXJzZXQucmVwbGFjZSgiLSIsICIiKSkpIFwKKyAgICAgICAg
ICAgICAgIG9yIChjaGFyc2V0IGFuZCBzZWxmLl9jb2RlYyhjaGFyc2V0LnJlcGxhY2UoIi0iLCAi
XyIpKSkgXAorICAgICAgICAgICAgICAgb3IgY2hhcnNldAorCisgICAgZGVmIF9jb2RlYyhzZWxm
LCBjaGFyc2V0KToKKyAgICAgICAgaWYgbm90IGNoYXJzZXQ6IHJldHVybiBjaGFyc2V0CisgICAg
ICAgIGNvZGVjID0gTm9uZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjb2RlY3MubG9va3Vw
KGNoYXJzZXQpCisgICAgICAgICAgICBjb2RlYyA9IGNoYXJzZXQKKyAgICAgICAgZXhjZXB0IChM
b29rdXBFcnJvciwgVmFsdWVFcnJvcik6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHJldHVy
biBjb2RlYworCisgICAgRUJDRElDX1RPX0FTQ0lJX01BUCA9IE5vbmUKKyAgICBkZWYgX2ViY2Rp
Y190b19hc2NpaShzZWxmLCBzKToKKyAgICAgICAgYyA9IHNlbGYuX19jbGFzc19fCisgICAgICAg
IGlmIG5vdCBjLkVCQ0RJQ19UT19BU0NJSV9NQVA6CisgICAgICAgICAgICBlbWFwID0gKDAsMSwy
LDMsMTU2LDksMTM0LDEyNywxNTEsMTQxLDE0MiwxMSwxMiwxMywxNCwxNSwKKyAgICAgICAgICAg
ICAgICAgICAgMTYsMTcsMTgsMTksMTU3LDEzMyw4LDEzNSwyNCwyNSwxNDYsMTQzLDI4LDI5LDMw
LDMxLAorICAgICAgICAgICAgICAgICAgICAxMjgsMTI5LDEzMCwxMzEsMTMyLDEwLDIzLDI3LDEz
NiwxMzcsMTM4LDEzOSwxNDAsNSw2LDcsCisgICAgICAgICAgICAgICAgICAgIDE0NCwxNDUsMjIs
MTQ3LDE0OCwxNDksMTUwLDQsMTUyLDE1MywxNTQsMTU1LDIwLDIxLDE1OCwyNiwKKyAgICAgICAg
ICAgICAgICAgICAgMzIsMTYwLDE2MSwxNjIsMTYzLDE2NCwxNjUsMTY2LDE2NywxNjgsOTEsNDYs
NjAsNDAsNDMsMzMsCisgICAgICAgICAgICAgICAgICAgIDM4LDE2OSwxNzAsMTcxLDE3MiwxNzMs
MTc0LDE3NSwxNzYsMTc3LDkzLDM2LDQyLDQxLDU5LDk0LAorICAgICAgICAgICAgICAgICAgICA0
NSw0NywxNzgsMTc5LDE4MCwxODEsMTgyLDE4MywxODQsMTg1LDEyNCw0NCwzNyw5NSw2Miw2MywK
KyAgICAgICAgICAgICAgICAgICAgMTg2LDE4NywxODgsMTg5LDE5MCwxOTEsMTkyLDE5MywxOTQs
OTYsNTgsMzUsNjQsMzksNjEsMzQsCisgICAgICAgICAgICAgICAgICAgIDE5NSw5Nyw5OCw5OSwx
MDAsMTAxLDEwMiwxMDMsMTA0LDEwNSwxOTYsMTk3LDE5OCwxOTksMjAwLAorICAgICAgICAgICAg
ICAgICAgICAyMDEsMjAyLDEwNiwxMDcsMTA4LDEwOSwxMTAsMTExLDExMiwxMTMsMTE0LDIwMywy
MDQsMjA1LAorICAgICAgICAgICAgICAgICAgICAyMDYsMjA3LDIwOCwyMDksMTI2LDExNSwxMTYs
MTE3LDExOCwxMTksMTIwLDEyMSwxMjIsMjEwLAorICAgICAgICAgICAgICAgICAgICAyMTEsMjEy
LDIxMywyMTQsMjE1LDIxNiwyMTcsMjE4LDIxOSwyMjAsMjIxLDIyMiwyMjMsMjI0LAorICAgICAg
ICAgICAgICAgICAgICAyMjUsMjI2LDIyNywyMjgsMjI5LDIzMCwyMzEsMTIzLDY1LDY2LDY3LDY4
LDY5LDcwLDcxLDcyLAorICAgICAgICAgICAgICAgICAgICA3MywyMzIsMjMzLDIzNCwyMzUsMjM2
LDIzNywxMjUsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsCisgICAgICAgICAgICAgICAgICAgIDgy
LDIzOCwyMzksMjQwLDI0MSwyNDIsMjQzLDkyLDE1OSw4Myw4NCw4NSw4Niw4Nyw4OCw4OSwKKyAg
ICAgICAgICAgICAgICAgICAgOTAsMjQ0LDI0NSwyNDYsMjQ3LDI0OCwyNDksNDgsNDksNTAsNTEs
NTIsNTMsNTQsNTUsNTYsNTcsCisgICAgICAgICAgICAgICAgICAgIDI1MCwyNTEsMjUyLDI1Mywy
NTQsMjU1KQorICAgICAgICAgICAgaW1wb3J0IHN0cmluZworICAgICAgICAgICAgYy5FQkNESUNf
VE9fQVNDSUlfTUFQID0gc3RyaW5nLm1ha2V0cmFucyggXAorICAgICAgICAgICAgJycuam9pbiht
YXAoY2hyLCByYW5nZSgyNTYpKSksICcnLmpvaW4obWFwKGNociwgZW1hcCkpKQorICAgICAgICBy
ZXR1cm4gcy50cmFuc2xhdGUoYy5FQkNESUNfVE9fQVNDSUlfTUFQKQorCisgICAgTVNfQ0hBUlMg
PSB7ICdceDgwJyA6ICgnZXVybycsICcyMEFDJyksCisgICAgICAgICAgICAgICAgICdceDgxJyA6
ICcgJywKKyAgICAgICAgICAgICAgICAgJ1x4ODInIDogKCdzYnF1bycsICcyMDFBJyksCisgICAg
ICAgICAgICAgICAgICdceDgzJyA6ICgnZm5vZicsICcxOTInKSwKKyAgICAgICAgICAgICAgICAg
J1x4ODQnIDogKCdiZHF1bycsICcyMDFFJyksCisgICAgICAgICAgICAgICAgICdceDg1JyA6ICgn
aGVsbGlwJywgJzIwMjYnKSwKKyAgICAgICAgICAgICAgICAgJ1x4ODYnIDogKCdkYWdnZXInLCAn
MjAyMCcpLAorICAgICAgICAgICAgICAgICAnXHg4NycgOiAoJ0RhZ2dlcicsICcyMDIxJyksCisg
ICAgICAgICAgICAgICAgICdceDg4JyA6ICgnY2lyYycsICcyQzYnKSwKKyAgICAgICAgICAgICAg
ICAgJ1x4ODknIDogKCdwZXJtaWwnLCAnMjAzMCcpLAorICAgICAgICAgICAgICAgICAnXHg4QScg
OiAoJ1NjYXJvbicsICcxNjAnKSwKKyAgICAgICAgICAgICAgICAgJ1x4OEInIDogKCdsc2FxdW8n
LCAnMjAzOScpLAorICAgICAgICAgICAgICAgICAnXHg4QycgOiAoJ09FbGlnJywgJzE1MicpLAor
ICAgICAgICAgICAgICAgICAnXHg4RCcgOiAnPycsCisgICAgICAgICAgICAgICAgICdceDhFJyA6
ICgnI3gxN0QnLCAnMTdEJyksCisgICAgICAgICAgICAgICAgICdceDhGJyA6ICc/JywKKyAgICAg
ICAgICAgICAgICAgJ1x4OTAnIDogJz8nLAorICAgICAgICAgICAgICAgICAnXHg5MScgOiAoJ2xz
cXVvJywgJzIwMTgnKSwKKyAgICAgICAgICAgICAgICAgJ1x4OTInIDogKCdyc3F1bycsICcyMDE5
JyksCisgICAgICAgICAgICAgICAgICdceDkzJyA6ICgnbGRxdW8nLCAnMjAxQycpLAorICAgICAg
ICAgICAgICAgICAnXHg5NCcgOiAoJ3JkcXVvJywgJzIwMUQnKSwKKyAgICAgICAgICAgICAgICAg
J1x4OTUnIDogKCdidWxsJywgJzIwMjInKSwKKyAgICAgICAgICAgICAgICAgJ1x4OTYnIDogKCdu
ZGFzaCcsICcyMDEzJyksCisgICAgICAgICAgICAgICAgICdceDk3JyA6ICgnbWRhc2gnLCAnMjAx
NCcpLAorICAgICAgICAgICAgICAgICAnXHg5OCcgOiAoJ3RpbGRlJywgJzJEQycpLAorICAgICAg
ICAgICAgICAgICAnXHg5OScgOiAoJ3RyYWRlJywgJzIxMjInKSwKKyAgICAgICAgICAgICAgICAg
J1x4OWEnIDogKCdzY2Fyb24nLCAnMTYxJyksCisgICAgICAgICAgICAgICAgICdceDliJyA6ICgn
cnNhcXVvJywgJzIwM0EnKSwKKyAgICAgICAgICAgICAgICAgJ1x4OWMnIDogKCdvZWxpZycsICcx
NTMnKSwKKyAgICAgICAgICAgICAgICAgJ1x4OWQnIDogJz8nLAorICAgICAgICAgICAgICAgICAn
XHg5ZScgOiAoJyN4MTdFJywgJzE3RScpLAorICAgICAgICAgICAgICAgICAnXHg5ZicgOiAoJ1l1
bWwnLCAnJyksfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisKKyNCeSBkZWZhdWx0LCBhY3QgYXMgYW4g
SFRNTCBwcmV0dHktcHJpbnRlci4KK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgaW1w
b3J0IHN5cworICAgIHNvdXAgPSBCZWF1dGlmdWxTb3VwKHN5cy5zdGRpbikKKyAgICBwcmludCBz
b3VwLnByZXR0aWZ5KCkKZGlmZiAtLWdpdCBhL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2V3cy1h
cHAvZXdzL3RoaXJkcGFydHkvX19pbml0X18ucHkgYi9Ub29scy9CdWlsZFNsYXZlU3VwcG9ydC9l
d3MtYXBwL2V3cy90aGlyZHBhcnR5L19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwLi5lNjlkZTI5YmIyZApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9n
IGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDQzMTdiNmMzYmQwLi44MDE1MWE1NTk1ZSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEz
IEBACisyMDE4LTExLTI2ICBBYWthc2ggSmFpbiAgPGFha2FzaF9qYWluQGFwcGxlLmNvbT4KKwor
ICAgICAgICBbZXdzLWFwcF0gQWRkIEJlYXV0aWZ1bFNvdXAKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MTk5NAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogQnVpbGRTbGF2ZVN1cHBvcnQvZXdzLWFwcC9l
d3MvdGhpcmRwYXJ0eS9CZWF1dGlmdWxTb3VwLnB5OiBDb3BpZWQgZnJvbSBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3RoaXJkcGFydHkvQmVhdXRpZnVsU291cC5weQorICAgICAgICAqIEJ1aWxkU2xh
dmVTdXBwb3J0L2V3cy1hcHAvZXdzL3RoaXJkcGFydHkvX19pbml0X18ucHk6IEFkZGVkLgorCiAy
MDE4LTExLTI0ICBBYWthc2ggSmFpbiAgPGFha2FzaF9qYWluQGFwcGxlLmNvbT4KIAogICAgICAg
ICBbZXdzLWFwcF0gQWRkIHN1cHBvcnQgdG8gZG93bmxvYWQgUGF0Y2ggZnJvbSBCdWd6aWxsYQot
LSAKMi4xNy4yIChBcHBsZSBHaXQtMTEzKQoK
</data>
<flag name="review"
          id="372769"
          type_id="1"
          status="+"
          setter="lforschler"
    />
          </attachment>
      

    </bug>

</bugzilla>