<?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>53040</bug_id>
          
          <creation_ts>2011-01-24 13:21:59 -0800</creation_ts>
          <short_desc>nrwt: add more unit tests for rebaseline-chromium-webkit-tests</short_desc>
          <delta_ts>2011-01-30 15:16:55 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>53036</dependson>
    
    <dependson>53326</dependson>
          <blocked>51222</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dirk Pranke">dpranke</reporter>
          <assigned_to name="Dirk Pranke">dpranke</assigned_to>
          <cc>eric</cc>
    
    <cc>koz</cc>
    
    <cc>mihaip</cc>
    
    <cc>ojan</cc>
    
    <cc>tony</cc>
    
    <cc>victorw</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>339224</commentid>
    <comment_count>0</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-01-24 13:21:59 -0800</bug_when>
    <thetext>nrwt: add more unit tests for rebaseline-chromium-webkit-tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339227</commentid>
    <comment_count>1</comment_count>
      <attachid>79965</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-01-24 13:24:57 -0800</bug_when>
    <thetext>Created attachment 79965
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339254</commentid>
    <comment_count>2</comment_count>
      <attachid>79974</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-01-24 14:06:44 -0800</bug_when>
    <thetext>Created attachment 79974
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339295</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-01-24 15:21:51 -0800</bug_when>
    <thetext>This seems to overlap with work the Koz and I have recently been doing re: dealing with zip files and pulling down results from servers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339298</commentid>
    <comment_count>4</comment_count>
      <attachid>79974</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-01-24 15:23:55 -0800</bug_when>
    <thetext>Comment on attachment 79974
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=79974&amp;action=review

&gt; Tools/Scripts/webkitpy/common/zipper.py:34
&gt; +class UnZipper(object):

Slightly odd that this is called Unzipper and the file is zipper.  Did you plan to add a Zipper class?  How does that relate with filesystem.create_zip?

I&apos;m not sure why having a wrapper around zipfile is better than just passing mock zipfiles?

&gt; Tools/Scripts/webkitpy/common/zipper_mock.py:30
&gt; +def make_unzipper(ziphashes):

I don&apos;t understand the point of a wrapper function here.  why not just expose the class and use the constructor?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339312</commentid>
    <comment_count>5</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-01-24 15:38:18 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; This seems to overlap with work the Koz and I have recently been doing re: dealing with zip files and pulling down results from servers.

Thanks for adding him, I was about to do so. Yes, there&apos;s definitely overlap, and it&apos;s sort of a race to see who lands first. I was posting a version of this as-is and then was going to do another pass to see how close I could get it to Koz&apos;s version.

(In reply to comment #4)
&gt; (From update of attachment 79974 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=79974&amp;action=review
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/common/zipper.py:34
&gt; &gt; +class UnZipper(object):
&gt; 
&gt; Slightly odd that this is called Unzipper and the file is zipper.  Did you plan to add a Zipper class?

I don&apos;t, but I figured someone would eventually.

&gt;  How does that relate with filesystem.create_zip?

I am not aware of any such function. I hope there doesn&apos;t come to be one.

&gt; 
&gt; I&apos;m not sure why having a wrapper around zipfile is better than just passing mock zipfiles?
&gt;

Having a wrapper around the zipfile allows us to enforce a restricted API, which makes it easier to keep the zipfile interface in sync with the mock interface.

&gt; &gt; Tools/Scripts/webkitpy/common/zipper_mock.py:30
&gt; &gt; +def make_unzipper(ziphashes):
&gt; 
&gt; I don&apos;t understand the point of a wrapper function here.  why not just expose the class and use the constructor?

The constructor to Zipfile takes a path as an argument (the path to the zipfile). The code in rebaseline-chromium-webkit-tests creates zipfiles on the fly from paths in the filesystem, which means that it needs to be able to create objects. 

Using the maker function, I can ensure that only the objects I expect to be created are being created, and I can control what their contents would be, in a reusable manner, by having the object returned from make_unzipper have a reference to the lexically scoped dictionary in the &apos;ziphashes&apos; argument.

If there&apos;s a better way to accomplish this, I&apos;m certainly open to suggestions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339319</commentid>
    <comment_count>6</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-01-24 15:41:29 -0800</bug_when>
    <thetext>Oh, also, it&apos;s worth noting that the approach I&apos;m using (mocking out the whole filesystem, the network, the zipfile constructor, etc.) allows me to pretty easily write high-level functional tests of the entire module. This gets me good coverage without requiring me to be too aware of the implementation of the module or having to write very fragile unit tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339345</commentid>
    <comment_count>7</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-01-24 16:06:28 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #3)
&gt; &gt; This seems to overlap with work the Koz and I have recently been doing re: dealing with zip files and pulling down results from servers.
&gt; 
&gt; Thanks for adding him, I was about to do so. Yes, there&apos;s definitely overlap, and it&apos;s sort of a race to see who lands first. I was posting a version of this as-is and then was going to do another pass to see how close I could get it to Koz&apos;s version.
&gt; 

Okay, Koz&apos;s code mostly creates zip files (looking at common/system/mock_zip.py in bug 50098), so there&apos;s not a huge amount of overlap; we should be able to cut&amp;paste-merge the two files together. Note that I would probably put this file in common/, not common/system .

There&apos;s also the common/system/fileset.py module, which appears to do something vaguely zip like, but frankly I don&apos;t really understand what that file is for (and there&apos;s almost no comments in it), so hopefully koz can say better how that fits into things and if it makes some of the work in this bug redundant.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339359</commentid>
    <comment_count>8</comment_count>
      <attachid>79987</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-01-24 16:34:56 -0800</bug_when>
    <thetext>Created attachment 79987
hand-test non-mocked code paths, fix a few bugs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339385</commentid>
    <comment_count>9</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-01-24 17:08:28 -0800</bug_when>
    <thetext>Victor, FYI ... I&apos;ve added a bunch more unit tests to rebaseline-chromium-webkit-tests and needed to restructure some things. Let me know if you have any comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339718</commentid>
    <comment_count>10</comment_count>
    <who name="Victor Wang">victorw</who>
    <bug_when>2011-01-25 10:14:13 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; Victor, FYI ... I&apos;ve added a bunch more unit tests to rebaseline-chromium-webkit-tests and needed to restructure some things. Let me know if you have any comments.
Thanks for taking care of this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>340432</commentid>
    <comment_count>11</comment_count>
      <attachid>79987</attachid>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2011-01-26 13:22:15 -0800</bug_when>
    <thetext>Comment on attachment 79987
hand-test non-mocked code paths, fix a few bugs

View in context: https://bugs.webkit.org/attachment.cgi?id=79987&amp;action=review

&gt; Tools/Scripts/webkitpy/common/fetcher.py:34
&gt; +class UrlFetcher(object):

Can the file be called urlfetcher.py, to mirror the class name? fetcher.py is a bit too generic.

&gt; Tools/Scripts/webkitpy/common/zipper.py:34
&gt; +class UnZipper(object):

I see that comparisons have already been made to the fileset classes that Koz added (they&apos;re meant for the rebaselining new tool, thus they should satisfy the needs of the old one too).

This class seems pretty similar to ZipFileSet (e.g. they both have namelist and read). I&apos;m not seeing any barriers to just using it directly.

&gt; Tools/Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:894
&gt; +    # We need to create three different Port objects over the life of this

I think this comment should stay in main(), since that&apos;s where we actually create the port objects.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341681</commentid>
    <comment_count>12</comment_count>
      <attachid>80489</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-01-28 13:20:05 -0800</bug_when>
    <thetext>Created attachment 80489
use filesets</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341744</commentid>
    <comment_count>13</comment_count>
      <attachid>80489</attachid>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2011-01-28 14:37:18 -0800</bug_when>
    <thetext>Comment on attachment 80489
use filesets

View in context: https://bugs.webkit.org/attachment.cgi?id=80489&amp;action=review

&gt; Tools/Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:888
&gt; +    # We need to create three different Port objects over the life of this

This comment should go in main, where we actually create  the objects, or the comment should be re-done to describe the parameters of real_main.

Also, port_obj no longer exists.

&gt; Tools/Scripts/webkitpy/layout_tests/rebaseline_chromium_webkit_tests.py:892
&gt; +    # Then we create a rebaselining port to actual find and manage the

Typo, &quot;actual&quot; instead of &quot;actually&quot; (you can also omit the word entirely).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341765</commentid>
    <comment_count>14</comment_count>
      <attachid>80501</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-01-28 15:05:20 -0800</bug_when>
    <thetext>Created attachment 80501
update comments/docstring for real_main()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>342385</commentid>
    <comment_count>15</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-01-30 15:16:55 -0800</bug_when>
    <thetext>Committed r77095: &lt;http://trac.webkit.org/changeset/77095&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79965</attachid>
            <date>2011-01-24 13:24:57 -0800</date>
            <delta_ts>2011-01-24 14:06:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-53040-20110124132456.patch</filename>
            <type>text/plain</type>
            <size>31587</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBjNjAw
ZWYzYWY3OTZlYTNlZjJiMDU4YTU1OTRhZDMxNmEwNGQyMmM2Li43MTlmMWI5ZDIzYmZmMjVlODQ3
ZDUxYzdkMjQ3NGI4ZGY2OThmMzA3IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIv
VG9vbHMvQ2hhbmdlTG9nCkBAIC0yLDYgKzIsMjIgQEAKIAogICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KIAorICAgICAgICBBZGQgbW9yZSB1bml0IHRlc3RzIGZvciByZWJhc2Vs
aW5lLWNocm9taXVtLXdlYmtpdC10ZXN0cy4gVGhpcworICAgICAgICBjaGFuZ2UgaW52b2x2ZXMg
cmVzdHJ1Y3R1cmluZyBhIGJ1bmNoIG9mIHItYy13LXQgY29kZSB0byBtYWtlIGl0CisgICAgICAg
IG1vcmUgdGVzdGFibGUgYXMgd2VsbC4gV2UgYWxzbyBhZGQgd3JhcHBlciBjbGFzc2VzIGZvciBo
YW5kbGluZworICAgICAgICB6aXAgZmlsZXMgYW5kIGZldGNoaW5nIFVSTHMuCisKKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9mZXRjaGVyLnB5OgorICAgICAgICAqIFNjcmlwdHMv
d2Via2l0cHkvY29tbW9uL2ZldGNoZXJfbW9jay5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L2NvbW1vbi96aXBwZXIucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24v
emlwcGVyX21vY2sucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRfdGVzdHMucHk6CisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRfdGVzdHNfdW5p
dHRlc3QucHk6CisKKzIwMTEtMDEtMjQgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKICAgICAgICAgTWlu
b3IgYnVnIGZpeGVzIGFuZCBjbGVhbnVwIGZvciBmaWxlc3lzdGVtIHdyYXBwZXJzLCBwb3J0Lyog
dGVzdAogICAgICAgICBjbGFzc2VzLCB0ZXN0X2V4cGVjdGF0aW9ucy5weS4gVGhpcyBjaGFuZ2Ug
YWRkcyAidGVzdC13aW4iIGFuZAogICAgICAgICAidGVzdC1tYWMiIHZhcmlhbnRzIHRvIHRoZSB0
ZXN0IHBvcnQgc28gdGhhdCB3ZSBjYW4gYmV0dGVyIHRlc3QKZGlmZiAtLWdpdCBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbV9tb2NrLnB5IGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtX21vY2sucHkKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWNlYjZj
ZjYzMmVmNGMwNjI5NjBiYTA2MmJiMmU1MmQwZmNmZTViMAotLS0gL2Rldi9udWxsCisrKyBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbV9tb2NrLnB5CkBAIC0wLDAg
KzEsNDUgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisjICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJp
YnV0aW9uLgorIyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiJXcmFwcGVyIG1vZHVsZSBmb3IgbW9ja2luZyBv
dXQgLyB0ZXN0aW5nIFNDTSBvYmplY3RzLiIiIgorCisKK2NsYXNzIE1vY2tTQ00ob2JqZWN0KToK
KyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuYWRkZWRfcGF0aHMgPSBzZXQo
KQorCisgICAgZGVmIGFkZChzZWxmLCBwYXRoLCByZXR1cm5fZXhpdF9jb2RlPUZhbHNlKToKKyAg
ICAgICAgc2VsZi5hZGRlZF9wYXRocy5hZGQocGF0aCkKKyAgICAgICAgaWYgcmV0dXJuX2V4aXRf
Y29kZToKKyAgICAgICAgICAgIHJldHVybiAwCisKKyAgICBkZWYgc2hvd19oZWFkKHNlbGYsIHBh
dGgpOgorICAgICAgICByZXR1cm4gcGF0aAorCisgICAgZGVmIGRpZmZfZm9yX2ZpbGUoc2VsZiwg
cGF0aCwgbG9nPU5vbmUpOgorICAgICAgICByZXR1cm4gcGF0aCArICctZGlmZicKZGlmZiAtLWdp
dCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2ZldGNoZXIucHkgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9mZXRjaGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkyMWU2ZDM4MDhlZDEx
ZGE5ZjQwODU0OGZiOWIyYjNiMTM3OGQxYTAKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9mZXRjaGVyLnB5CkBAIC0wLDAgKzEsNTEgQEAKKyMgQ29weXJp
Z2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
IyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorCisiIiJXcmFwcGVyIG1vZHVsZSBmb3IgZmV0Y2hpbmcgVVJMcy4iIiIKKworaW1w
b3J0IHVybGxpYgorCisKK2NsYXNzIFVybEZldGNoZXIob2JqZWN0KToKKyAgICAiIiJDbGFzcyB3
aXRoIHJlc3RyaWN0ZWQgaW50ZXJmYWNlIHRvIGZldGNoIFVSTHMgKG1ha2VzIHRlc3RpbmcgZWFz
aWVyKSIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlc3lzdGVtKToKKyAgICAgICAgc2Vs
Zi5fZmlsZXN5c3RlbSA9IGZpbGVzeXN0ZW0KKworICAgIGRlZiBmZXRjaChzZWxmLCB1cmwpOgor
ICAgICAgICAiIiJGZXRjaGVzIHRoZSBjb250ZW50cyBvZiB0aGUgVVJMIGFzIGEgc3RyaW5nLiIi
IgorICAgICAgICBmID0gdXJsbGliLnVybG9wZW4odXJsKQorICAgICAgICBjb250ZW50ID0gZi5y
ZWFkKCkKKyAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHJldHVybiBjb250ZW50CisKKyAgICBk
ZWYgZmV0Y2hfaW50b19maWxlKHNlbGYsIHVybCk6CisgICAgICAgICIiIkZldGNoZXMgdGhlIGNv
bnRlbnRzIG9mIHRoZSBVUkwgaW50byBhIHRlbXBvcmFyeSBmaWxlIGFuZCByZXR1cm4gdGhlIGZp
bGVuYW1lLiIiIgorICAgICAgICBmLCBmbiA9IHNlbGYuX2ZpbGVzeXN0ZW0ub3Blbl9iaW5hcnlf
dGVtcGZpbGUoc2VsZikKKyAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHVybGxpYi51cmxyZXRy
aWV2ZSh1cmwsIGZuKQorICAgICAgICByZXR1cm4gZm4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvY29tbW9uL2ZldGNoZXJfbW9jay5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvY29tbW9uL2ZldGNoZXJfbW9jay5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lOGE3NTMyMDg0OTI1ZGIwMjU5
OWJlZjU1NmQ2ZTNlZmJiNzFlNDRmCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9jb21tb24vZmV0Y2hlcl9tb2NrLnB5CkBAIC0wLDAgKzEsNDYgQEAKKyMgQ29weXJp
Z2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisj
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorCisKK2RlZiBtYWtlX2ZldGNoZXJfY2xzKHVybHMpOgorICAgICIiIlVybEZldGNoZXIg
ZmFjdG9yeSByb3V0aW5lIHRoYXQgc2ltdWxhdGVzIG5ldHdvcmsgYWNjZXNzCisgICAgdXNpbmcg
YSBkaWN0IG9mIFVSTHMgLT4gY29udGVudHMuIiIiCisgICAgY2xhc3MgTW9ja0ZldGNoZXIob2Jq
ZWN0KToKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVzeXN0ZW0pOgorICAgICAgICAg
ICAgc2VsZi5fZmlsZXN5c3RlbSA9IGZpbGVzeXN0ZW0KKworICAgICAgICBkZWYgZmV0Y2goc2Vs
ZiwgdXJsKToKKyAgICAgICAgICAgIHJldHVybiB1cmxzW3VybF0KKworICAgICAgICBkZWYgZmV0
Y2hfaW50b19maWxlKHNlbGYsIHVybCk6CisgICAgICAgICAgICBmLCBmbiA9IHNlbGYuX2ZpbGVz
eXN0ZW0ub3Blbl9iaW5hcnlfdGVtcGZpbGUoJ21vY2tmZXRjaGVyJykKKyAgICAgICAgICAgIGYu
d3JpdGUoc2VsZi5mZXRjaCh1cmwpKQorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAg
ICByZXR1cm4gZm4KKworICAgIHJldHVybiBNb2NrRmV0Y2hlcgpkaWZmIC0tZ2l0IGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9jb21tb24vemlwcGVyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9jb21tb24vemlwcGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc5NDBkYWU2ZGNlM2FlZTM3MGYyYjc0ZjY2
YWY0NDIxM2YwMDVmMTMKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2NvbW1vbi96aXBwZXIucHkKQEAgLTAsMCArMSw0NSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
IyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIi
IldyYXBwZXIgbW9kdWxlIGZvciBoYW5kbGluZyB6aXBmaWxlcyAobWFrZXMgdGVzdGluZyBlYXNp
ZXIpLiIiIgorCitpbXBvcnQgemlwZmlsZQorCisKK2NsYXNzIFVuWmlwcGVyKG9iamVjdCk6Cisg
ICAgIiIiWmlwLWZpbGUgaGFuZGxpbmcgY2xhc3Mgd2l0aCBhIHJlc3RyaWN0ZWQgaW50ZXJmYWNl
IChtYWtlcyB0ZXN0aW5nIGVhc2llcikuIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGgp
OgorICAgICAgICBzZWxmLl96aXBmaWxlID0gemlwZmlsZS5aaXBGaWxlKHBhdGgsICdyJykKKwor
ICAgIGRlZiBuYW1lbGlzdChzZWxmKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgbGlzdCBvZiBt
ZW1iZXJzIG9mIGFuIGFyY2hpdmUuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl96aXBmaWxlLm5h
bWVsaXN0KCkKKworICAgIGRlZiByZWFkKHNlbGYsIG1lbWJlcik6CisgICAgICAgICIiIkV4dHJh
Y3RzIHRoZSBuYW1lZCBtZW1iZXIgYW5kIHJldHVybnMgaXRzIGNvbnRlbnRzIGFzIGEgc3RyaW5n
LiIiIgorICAgICAgICByZXR1cm4gc2VsZi5femlwZmlsZS5yZWFkKG1lbWJlcikKZGlmZiAtLWdp
dCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3ppcHBlcl9tb2NrLnB5IGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9jb21tb24vemlwcGVyX21vY2sucHkKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjk0NWZk
NmU3NTk0ZjhhYzc1NzAwNzA0MWM0ODRkOWU4NWIwYzIwMAotLS0gL2Rldi9udWxsCisrKyBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3ppcHBlcl9tb2NrLnB5CkBAIC0wLDAgKzEsNDcg
QEAKKyMgQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisjICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9u
LgorIyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorCisKK2RlZiBtYWtlX3VuemlwcGVyKHppcGhhc2hlcyk6CisgICAg
IiIiVW5aaXBwZXIgZmFjdG9yeSByb3V0aW5lIHRoYXQgbG9va3MgdXAgemlwZmlsZXMgaW4gYSBk
aWN0OworICAgIGVhY2ggemlwZmlsZSBzaG91bGQgYWxzbyBiZSBhIGRpY3Qgb2YgbWVtYmVyIG5h
bWVzIC0+IGNvbnRlbnRzLiIiIgorICAgIGNsYXNzIE1vY2tVblppcHBlcihvYmplY3QpOgorICAg
ICAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aCk6CisgICAgICAgICAgICBzZWxmLl9wYXRoID0g
cGF0aAorICAgICAgICAgICAgc2VsZi5femlwaGFzaCA9IHppcGhhc2hlc1twYXRoXQorCisgICAg
ICAgIGRlZiBuYW1lbGlzdChzZWxmKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl96aXBoYXNo
LmtleXMoKQorCisgICAgICAgIGRlZiByZWFkKHNlbGYsIG1lbWJlcik6CisgICAgICAgICAgICBy
ZXR1cm4gc2VsZi5femlwaGFzaFttZW1iZXJdCisKKyAgICAgICAgZGVmIGNsb3NlKHNlbGYpOgor
ICAgICAgICAgICAgcGFzcworCisgICAgcmV0dXJuIE1vY2tVblppcHBlcgpkaWZmIC0tZ2l0IGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcmViYXNlbGluZV9jaHJvbWl1bV93
ZWJraXRfdGVzdHMucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9yZWJh
c2VsaW5lX2Nocm9taXVtX3dlYmtpdF90ZXN0cy5weQppbmRleCBjODUyMTg2ZmM4ZjEzOGFhNWUz
ZGJiNjA1YWI0MzZiODcxNmE5OGM5Li4xMTQ2NzdmMjIzNmIxYTk3NzJjZjU1ODBmN2NmMGJhYTJk
OTVkNjZiIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9y
ZWJhc2VsaW5lX2Nocm9taXVtX3dlYmtpdF90ZXN0cy5weQorKysgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9yZWJhc2VsaW5lX2Nocm9taXVtX3dlYmtpdF90ZXN0cy5weQpA
QCAtNDcsMTAgKzQ3LDEwIEBAIGltcG9ydCBvcHRwYXJzZQogaW1wb3J0IHJlCiBpbXBvcnQgc3lz
CiBpbXBvcnQgdGltZQotaW1wb3J0IHVybGxpYgotaW1wb3J0IHppcGZpbGUKIAogZnJvbSB3ZWJr
aXRweS5jb21tb24uY2hlY2tvdXQgaW1wb3J0IHNjbQorZnJvbSB3ZWJraXRweS5jb21tb24gaW1w
b3J0IHppcHBlcgorZnJvbSB3ZWJraXRweS5jb21tb24gaW1wb3J0IGZldGNoZXIKIGZyb20gd2Vi
a2l0cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQgcGF0aAogZnJvbSB3ZWJraXRweS5jb21tb24uc3lz
dGVtLmV4ZWN1dGl2ZSBpbXBvcnQgU2NyaXB0RXJyb3IKIApAQCAtMTQyLDcgKzE0Miw4IEBAIGNs
YXNzIFJlYmFzZWxpbmVyKG9iamVjdCk6CiAKICAgICBSRVZJU0lPTl9SRUdFWCA9IHInPGEgaHJl
Zj1cIihcZCspL1wiPicKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBydW5uaW5nX3BvcnQsIHRh
cmdldF9wb3J0LCBwbGF0Zm9ybSwgb3B0aW9ucyk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJ1
bm5pbmdfcG9ydCwgdGFyZ2V0X3BvcnQsIHBsYXRmb3JtLCBvcHRpb25zLAorICAgICAgICAgICAg
ICAgICBmZXRjaGVyLCB1bnppcHBlcl9jbHMsIHNjbSk6CiAgICAgICAgICIiIgogICAgICAgICBB
cmdzOgogICAgICAgICAgICAgcnVubmluZ19wb3J0OiB0aGUgUG9ydCB0aGUgc2NyaXB0IGlzIHJ1
bm5pbmcgb24uCkBAIC0xNTAsMTYgKzE1MSwyMyBAQCBjbGFzcyBSZWJhc2VsaW5lcihvYmplY3Qp
OgogICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gbGlrZSB0aGUgdGVz
dF9leHBlY3RhdGlvbnMudHh0CiAgICAgICAgICAgICAgICAgZmlsZSBsb2NhdGlvbiBhbmQgdGhl
IGxpc3Qgb2YgdGVzdCBwbGF0Zm9ybXMuCiAgICAgICAgICAgICBwbGF0Zm9ybTogdGhlIHRlc3Qg
cGxhdGZvcm0gdG8gcmViYXNlbGluZQotICAgICAgICAgICAgb3B0aW9uczogdGhlIGNvbW1hbmQt
bGluZSBvcHRpb25zIG9iamVjdC4iIiIKKyAgICAgICAgICAgIG9wdGlvbnM6IHRoZSBjb21tYW5k
LWxpbmUgb3B0aW9ucyBvYmplY3QuCisgICAgICAgICAgICBmZXRjaGVyOiBhbiBvYmplY3QgdXNl
ZCB0byBmZXRjaCB0aGUgY29udGVudHMgb2YgVVJMcy4KKyAgICAgICAgICAgIHVuemlwcGVyX2Ns
czogY2xhc3Mgb2JqZWN0IHVzZWQgdG8gY3JlYXRlIHVuemlwcGVyIG9iamVjdHMuCisgICAgICAg
ICAgICBzY206IHNjbSBvYmplY3QgZm9yIGFkZGluZyBuZXcgYmFzZWxpbmVzCisgICAgICAgICIi
IgogICAgICAgICBzZWxmLl9wbGF0Zm9ybSA9IHBsYXRmb3JtCiAgICAgICAgIHNlbGYuX29wdGlv
bnMgPSBvcHRpb25zCiAgICAgICAgIHNlbGYuX3BvcnQgPSBydW5uaW5nX3BvcnQKICAgICAgICAg
c2VsZi5fZmlsZXN5c3RlbSA9IHJ1bm5pbmdfcG9ydC5fZmlsZXN5c3RlbQogICAgICAgICBzZWxm
Ll90YXJnZXRfcG9ydCA9IHRhcmdldF9wb3J0CiAgICAgICAgIHNlbGYuX3JlYmFzZWxpbmVfcG9y
dCA9IHBvcnQuZ2V0KAotICAgICAgICAgICAgc2VsZi5fdGFyZ2V0X3BvcnQudGVzdF9wbGF0Zm9y
bV9uYW1lX3RvX25hbWUocGxhdGZvcm0pLCBvcHRpb25zKQorICAgICAgICAgICAgc2VsZi5fdGFy
Z2V0X3BvcnQudGVzdF9wbGF0Zm9ybV9uYW1lX3RvX25hbWUocGxhdGZvcm0pLCBvcHRpb25zLAor
ICAgICAgICAgICAgZmlsZXN5c3RlbT1zZWxmLl9maWxlc3lzdGVtKQogICAgICAgICBzZWxmLl9y
ZWJhc2VsaW5pbmdfdGVzdHMgPSBbXQogICAgICAgICBzZWxmLl9yZWJhc2VsaW5lZF90ZXN0cyA9
IFtdCisgICAgICAgIHNlbGYuX2ZldGNoZXIgPSBmZXRjaGVyCisgICAgICAgIHNlbGYuX3Vuemlw
cGVyX2NscyA9IHVuemlwcGVyX2NscwogCiAgICAgICAgICMgQ3JlYXRlIHRlc3RzIGFuZCBleHBl
Y3RhdGlvbnMgaGVscGVyIHdoaWNoIGlzIHVzZWQgdG86CiAgICAgICAgICMgICAtLiBjb21waWxl
IGxpc3Qgb2YgdGVzdHMgdGhhdCBuZWVkIHJlYmFzZWxpbmluZy4KQEAgLTE3Myw3ICsxODEsNyBA
QCBjbGFzcyBSZWJhc2VsaW5lcihvYmplY3QpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzZWxmLl9wbGF0Zm9ybSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEZhbHNlKQotICAgICAgICBzZWxmLl9zY20gPSBzY20u
ZGVmYXVsdF9zY20oKQorICAgICAgICBzZWxmLl9zY20gPSBzY20KIAogICAgIGRlZiBydW4oc2Vs
ZiwgYmFja3VwKToKICAgICAgICAgIiIiUnVuIHJlYmFzZWxpbmUgcHJvY2Vzcy4iIiIKQEAgLTI1
NCw5ICsyNjIsNyBAQCBjbGFzcyBSZWJhc2VsaW5lcihvYmplY3QpOgogCiAgICAgICAgIF9sb2cu
ZGVidWcoJ1VybCB0byByZXRyaWV2ZSByZXZpc2lvbjogIiVzIicsIHVybCkKIAotICAgICAgICBm
ID0gdXJsbGliLnVybG9wZW4odXJsKQotICAgICAgICBjb250ZW50ID0gZi5yZWFkKCkKLSAgICAg
ICAgZi5jbG9zZSgpCisgICAgICAgIGNvbnRlbnQgPSBzZWxmLl9mZXRjaGVyLmZldGNoKHVybCkK
IAogICAgICAgICByZXZpc2lvbnMgPSByZS5maW5kYWxsKHNlbGYuUkVWSVNJT05fUkVHRVgsIGNv
bnRlbnQpCiAgICAgICAgIGlmIG5vdCByZXZpc2lvbnM6CkBAIC0zMjQsNyArMzMwLDcgQEAgY2xh
c3MgUmViYXNlbGluZXIob2JqZWN0KToKICAgICAgICAgaWYgdXJsIGlzIE5vbmU6CiAgICAgICAg
ICAgICByZXR1cm4gTm9uZQogCi0gICAgICAgIGZuID0gdXJsbGliLnVybHJldHJpZXZlKHVybClb
MF0KKyAgICAgICAgZm4gPSBzZWxmLl9mZXRjaGVyLmZldGNoX2ludG9fZmlsZSh1cmwpCiAgICAg
ICAgIF9sb2cuaW5mbygnQXJjaGl2ZSBkb3dubG9hZGVkIGFuZCBzYXZlZCB0byBmaWxlOiAiJXMi
JywgZm4pCiAgICAgICAgIHJldHVybiBmbgogCkBAIC0zMzksNyArMzQ1LDcgQEAgY2xhc3MgUmVi
YXNlbGluZXIob2JqZWN0KToKICAgICAgICAgICBOb25lIG9uIGZhaWx1cmUuCiAgICAgICAgICIi
IgogCi0gICAgICAgIHppcF9maWxlID0gemlwZmlsZS5aaXBGaWxlKGFyY2hpdmVfZmlsZSwgJ3In
KQorICAgICAgICB6aXBfZmlsZSA9IHNlbGYuX3VuemlwcGVyX2NscyhhcmNoaXZlX2ZpbGUpCiAg
ICAgICAgIHppcF9uYW1lbGlzdCA9IHppcF9maWxlLm5hbWVsaXN0KCkKIAogICAgICAgICBfbG9n
LmRlYnVnKCd6aXAgZmlsZSBuYW1lbGlzdDonKQpAQCAtODU3LDE4ICs4NjMsOSBAQCBkZWYgcGFy
c2Vfb3B0aW9ucyhhcmdzKToKICAgICByZXR1cm4gKG9wdGlvbnMsIHRhcmdldF9vcHRpb25zKQog
CiAKLWRlZiBtYWluKCk6Ci0gICAgIiIiTWFpbiBmdW5jdGlvbiB0byBwcm9kdWNlIG5ldyBiYXNl
bGluZXMuIiIiCi0KLSAgICAob3B0aW9ucywgdGFyZ2V0X29wdGlvbnMpID0gcGFyc2Vfb3B0aW9u
cyhzeXMuYXJndlsxOl0pCi0KLSAgICAjIFdlIG5lZWQgdG8gY3JlYXRlIHRocmVlIGRpZmZlcmVu
dCBQb3J0IG9iamVjdHMgb3ZlciB0aGUgbGlmZSBvZiB0aGlzCi0gICAgIyBzY3JpcHQuIHx0YXJn
ZXRfcG9ydF9vYmp8IGlzIHVzZWQgdG8gZGV0ZXJtaW5lIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRp
b246Ci0gICAgIyBsb2NhdGlvbiBvZiB0aGUgZXhwZWN0YXRpb25zIGZpbGUsIG5hbWVzIG9mIHBv
cnRzIHRvIHJlYmFzZWxpbmUsIGV0Yy4KLSAgICAjIHxwb3J0X29ianwgaXMgdXNlZCBmb3IgcnVu
dGltZSBmdW5jdGlvbmFsaXR5IGxpa2UgYWN0dWFsbHkgZGlmZmluZwotICAgICMgVGhlbiB3ZSBj
cmVhdGUgYSByZWJhc2VsaW5pbmcgcG9ydCB0byBhY3R1YWwgZmluZCBhbmQgbWFuYWdlIHRoZQot
ICAgICMgYmFzZWxpbmVzLgotICAgIHRhcmdldF9wb3J0X29iaiA9IHBvcnQuZ2V0KE5vbmUsIHRh
cmdldF9vcHRpb25zKQorZGVmIG1haW4oYXJncyk6CisgICAgIiIiQm9vdHN0cmFwIGZ1bmN0aW9u
IHRoYXQgc2V0cyB1cCB0aGUgb2JqZWN0IHJlZmVyZW5jZXMgd2UgbmVlZCBhbmQgY2FsbHMgcmVh
bF9tYWluKCkuIiIiCisgICAgb3B0aW9ucywgdGFyZ2V0X29wdGlvbnMgPSBwYXJzZV9vcHRpb25z
KGFyZ3MpCiAKICAgICAjIFNldCB1cCBvdXIgbG9nZ2luZyBmb3JtYXQuCiAgICAgbG9nX2xldmVs
ID0gbG9nZ2luZy5JTkZPCkBAIC04NzksMjAgKzg3NiwzNyBAQCBkZWYgbWFpbigpOgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAnJShsZXZlbG5hbWUpcyAlKG1lc3NhZ2UpcycpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZWZtdD0nJXklbSVkICVIOiVNOiVTJykKIAorICAg
IHRhcmdldF9wb3J0X29iaiA9IHBvcnQuZ2V0KE5vbmUsIHRhcmdldF9vcHRpb25zKQogICAgIGhv
c3RfcG9ydF9vYmogPSBnZXRfaG9zdF9wb3J0X29iamVjdChvcHRpb25zKQotICAgIGlmIG5vdCBo
b3N0X3BvcnRfb2JqOgotICAgICAgICBzeXMuZXhpdCgxKQorICAgIGlmIG5vdCBob3N0X3BvcnRf
b2JqIG9yIG5vdCB0YXJnZXRfcG9ydF9vYmo6CisgICAgICAgIHJldHVybiAxCiAKKyAgICBmZXRj
aGVyID0gZmV0Y2hlci5VcmxGZXRjaGVyKGhvc3RfcG9ydF9vYmouX2ZpbGVzeXN0ZW0pCisgICAg
dW56aXBwZXIgPSB6aXBwZXIuVW5aaXBwZXIoKQorICAgIHNjbV9vYmogPSBzY20uZGVmYXVsdF9z
Y20oKQorCisgICAgcmV0dXJuIHJlYWxfbWFpbihvcHRpb25zLCB0YXJnZXRfb3B0aW9ucywgaG9z
dF9wb3J0X29iaiwgZmV0Y2hlcl9jbHMsIHVuemlwcGVyLCBzY21fb2JqKQorCisKK2RlZiByZWFs
X21haW4ob3B0aW9ucywgdGFyZ2V0X29wdGlvbnMsIGhvc3RfcG9ydF9vYmosIHRhcmdldF9wb3J0
X29iaiwgZmV0Y2hlcl9jbHMsCisgICAgICAgICAgICAgIHVuemlwcGVyLCBzY21fb2JqKToKKyAg
ICAiIiJNYWluIGZ1bmN0aW9uIHRvIHByb2R1Y2UgbmV3IGJhc2VsaW5lcy4iIiIKKyAgICAjIFdl
IG5lZWQgdG8gY3JlYXRlIHRocmVlIGRpZmZlcmVudCBQb3J0IG9iamVjdHMgb3ZlciB0aGUgbGlm
ZSBvZiB0aGlzCisgICAgIyBzY3JpcHQuIHx0YXJnZXRfcG9ydF9vYmp8IGlzIHVzZWQgdG8gZGV0
ZXJtaW5lIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb246CisgICAgIyBsb2NhdGlvbiBvZiB0aGUg
ZXhwZWN0YXRpb25zIGZpbGUsIG5hbWVzIG9mIHBvcnRzIHRvIHJlYmFzZWxpbmUsIGV0Yy4KKyAg
ICAjIHxwb3J0X29ianwgaXMgdXNlZCBmb3IgcnVudGltZSBmdW5jdGlvbmFsaXR5IGxpa2UgYWN0
dWFsbHkgZGlmZmluZworICAgICMgVGhlbiB3ZSBjcmVhdGUgYSByZWJhc2VsaW5pbmcgcG9ydCB0
byBhY3R1YWwgZmluZCBhbmQgbWFuYWdlIHRoZQorICAgICMgYmFzZWxpbmVzLgogICAgICMgVmVy
aWZ5ICdwbGF0Zm9ybXMnIG9wdGlvbiBpcyB2YWxpZC4KICAgICBpZiBub3Qgb3B0aW9ucy5wbGF0
Zm9ybXM6CiAgICAgICAgIF9sb2cuZXJyb3IoJ0ludmFsaWQgInBsYXRmb3JtcyIgb3B0aW9uLiAt
LXBsYXRmb3JtcyBtdXN0IGJlICcKICAgICAgICAgICAgICAgICAgICAnc3BlY2lmaWVkIGluIG9y
ZGVyIHRvIHJlYmFzZWxpbmUuJykKLSAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAgcmV0dXJu
IDEKICAgICBwbGF0Zm9ybXMgPSBbcC5zdHJpcCgpLmxvd2VyKCkgZm9yIHAgaW4gb3B0aW9ucy5w
bGF0Zm9ybXMuc3BsaXQoJywnKV0KICAgICBmb3IgcGxhdGZvcm0gaW4gcGxhdGZvcm1zOgogICAg
ICAgICBpZiBub3QgcGxhdGZvcm0gaW4gUkVCQVNFTElORV9QTEFURk9STV9PUkRFUjoKICAgICAg
ICAgICAgIF9sb2cuZXJyb3IoJ0ludmFsaWQgcGxhdGZvcm06ICIlcyInICUgKHBsYXRmb3JtKSkK
LSAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgICAgICByZXR1cm4gMQogCiAgICAgIyBB
ZGp1c3QgdGhlIHBsYXRmb3JtIG9yZGVyIHNvIHJlYmFzZWxpbmUgdG9vbCBpcyBydW5uaW5nIGF0
IHRoZSBvcmRlciBvZgogICAgICMgJ21hYycsICd3aW4nIGFuZCAnbGludXgnLiBUaGlzIGlzIGlu
IHNhbWUgb3JkZXIgd2l0aCBsYXlvdXQgdGVzdCBiYXNlbGluZQpAQCAtOTA5LDcgKzkyMyw4IEBA
IGRlZiBtYWluKCk6CiAgICAgYmFja3VwID0gb3B0aW9ucy5iYWNrdXAKICAgICBmb3IgcGxhdGZv
cm0gaW4gcmViYXNlbGluZV9wbGF0Zm9ybXM6CiAgICAgICAgIHJlYmFzZWxpbmVyID0gUmViYXNl
bGluZXIoaG9zdF9wb3J0X29iaiwgdGFyZ2V0X3BvcnRfb2JqLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBsYXRmb3JtLCBvcHRpb25zKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHBsYXRmb3JtLCBvcHRpb25zLCBmZXRjaGVyX2NscywgdW56aXBwZXIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NtX29iaikKIAogICAgICAgICBfbG9n
LmluZm8oJycpCiAgICAgICAgIGxvZ19kYXNoZWRfc3RyaW5nKCdSZWJhc2VsaW5lIHN0YXJ0ZWQn
LCBwbGF0Zm9ybSkKQEAgLTkzNCw3ICs5NDksOCBAQCBkZWYgbWFpbigpOgogICAgICAgICBodG1s
X2dlbmVyYXRvci5zaG93X2h0bWwoKQogICAgIGxvZ19kYXNoZWRfc3RyaW5nKCdSZWJhc2VsaW5p
bmcgcmVzdWx0IGNvbXBhcmlzb24gZG9uZScsIE5vbmUpCiAKLSAgICBzeXMuZXhpdCgwKQorICAg
IHJldHVybiAwCisKIAogaWYgJ19fbWFpbl9fJyA9PSBfX25hbWVfXzoKLSAgICBtYWluKCkKKyAg
ICBzeXMuZXhpdChtYWluKHN5cy5hcmd2WzE6XSkpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9yZWJhc2VsaW5lX2Nocm9taXVtX3dlYmtpdF90ZXN0c191
bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3JlYmFzZWxp
bmVfY2hyb21pdW1fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5CmluZGV4IGRhZDU3ZDFhNmQzMjE4
YzkzYTYzOWQxN2M4YWFjN2Y1M2RmZmNjZWEuLjJiNjBkODhmNjE3YzgzOTYwYmRlYTA2N2NmNTcx
MzliY2FlN2RhY2UgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3JlYmFzZWxpbmVfY2hyb21pdW1fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5CisrKyBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3JlYmFzZWxpbmVfY2hyb21pdW1fd2Vi
a2l0X3Rlc3RzX3VuaXR0ZXN0LnB5CkBAIC0zMiw3ICszMiwxMSBAQAogaW1wb3J0IHVuaXR0ZXN0
CiAKIGZyb20gd2Via2l0cHkudG9vbCBpbXBvcnQgbW9ja3Rvb2wKK2Zyb20gd2Via2l0cHkuY29t
bW9uIGltcG9ydCBmZXRjaGVyX21vY2sKK2Zyb20gd2Via2l0cHkuY29tbW9uIGltcG9ydCB6aXBw
ZXJfbW9jaworZnJvbSB3ZWJraXRweS5jb21tb24uY2hlY2tvdXQgaW1wb3J0IHNjbV9tb2NrCiBm
cm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0gaW1wb3J0IGZpbGVzeXN0ZW1fbW9jaworZnJvbSB3
ZWJraXRweS5jb21tb24uc3lzdGVtIGltcG9ydCB1c2VyX21vY2sKIGZyb20gd2Via2l0cHkuY29t
bW9uLnN5c3RlbS5leGVjdXRpdmUgaW1wb3J0IEV4ZWN1dGl2ZSwgU2NyaXB0RXJyb3IKIAogaW1w
b3J0IHBvcnQKQEAgLTYwLDkgKzY0LDggQEAgY2xhc3MgVGVzdEdldEhvc3RQb3J0T2JqZWN0KHVu
aXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgcG9ydC5nZXQgPSBnZXRfbW9ja19nZXQoeydSZWxl
YXNlJzogcmVsZWFzZV9wcmVzZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
J0RlYnVnJzogZGVidWdfcHJlc2VudH0pCiAgICAgICAgIG9wdGlvbnMgPSBtb2NrdG9vbC5Nb2Nr
T3B0aW9ucyhjb25maWd1cmF0aW9uPU5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBodG1sX2RpcmVjdG9yeT1Ob25lKQotICAgICAgICBwb3J0X29iaiA9IHJlYmFz
ZWxpbmVfY2hyb21pdW1fd2Via2l0X3Rlc3RzLmdldF9ob3N0X3BvcnRfb2JqZWN0KAotICAgICAg
ICAgICAgb3B0aW9ucykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0
bWxfZGlyZWN0b3J5PScvdG1wJykKKyAgICAgICAgcG9ydF9vYmogPSByZWJhc2VsaW5lX2Nocm9t
aXVtX3dlYmtpdF90ZXN0cy5nZXRfaG9zdF9wb3J0X29iamVjdChvcHRpb25zKQogICAgICAgICBp
ZiB2YWxpZF9wb3J0X29iajoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocG9ydF9v
YmosIE5vbmUpCiAgICAgICAgIGVsc2U6CkBAIC04NCwxOCArODcsNyBAQCBjbGFzcyBUZXN0R2V0
SG9zdFBvcnRPYmplY3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBwb3J0LmdldCA9IG9s
ZF9nZXQKIAogCi1jbGFzcyBUZXN0UmViYXNlbGluZXIodW5pdHRlc3QuVGVzdENhc2UpOgotICAg
IGRlZiBtYWtlX3JlYmFzZWxpbmVyKHNlbGYpOgotICAgICAgICBvcHRpb25zID0gbW9ja3Rvb2wu
TW9ja09wdGlvbnMoY29uZmlndXJhdGlvbj1Ob25lLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaHRtbF9kaXJlY3Rvcnk9Tm9uZSkKLSAgICAgICAgZmlsZXN5c3RlbSA9
IGZpbGVzeXN0ZW1fbW9jay5Nb2NrRmlsZVN5c3RlbSgpCi0gICAgICAgIGhvc3RfcG9ydF9vYmog
PSBwb3J0LmdldCgndGVzdCcsIG9wdGlvbnMsIGZpbGVzeXN0ZW09ZmlsZXN5c3RlbSkKLSAgICAg
ICAgdGFyZ2V0X29wdGlvbnMgPSBvcHRpb25zCi0gICAgICAgIHRhcmdldF9wb3J0X29iaiA9IHBv
cnQuZ2V0KCd0ZXN0JywgdGFyZ2V0X29wdGlvbnMsIGZpbGVzeXN0ZW09ZmlsZXN5c3RlbSkKLSAg
ICAgICAgcGxhdGZvcm0gPSB0YXJnZXRfcG9ydF9vYmoudGVzdF9wbGF0Zm9ybV9uYW1lKCkKLSAg
ICAgICAgcmV0dXJuIHJlYmFzZWxpbmVfY2hyb21pdW1fd2Via2l0X3Rlc3RzLlJlYmFzZWxpbmVy
KAotICAgICAgICAgICAgaG9zdF9wb3J0X29iaiwgdGFyZ2V0X3BvcnRfb2JqLCBwbGF0Zm9ybSwg
b3B0aW9ucykKLQorY2xhc3MgVGVzdE9wdGlvbnModW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRl
ZiB0ZXN0X3BhcnNlX29wdGlvbnMoc2VsZik6CiAgICAgICAgIChvcHRpb25zLCB0YXJnZXRfb3B0
aW9ucykgPSByZWJhc2VsaW5lX2Nocm9taXVtX3dlYmtpdF90ZXN0cy5wYXJzZV9vcHRpb25zKFtd
KQogICAgICAgICBzZWxmLmFzc2VydFRydWUodGFyZ2V0X29wdGlvbnMuY2hyb21pdW0pCkBAIC0x
MDUsMzkgKzk3LDE1NiBAQCBjbGFzcyBUZXN0UmViYXNlbGluZXIodW5pdHRlc3QuVGVzdENhc2Up
OgogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIodGFyZ2V0X29wdGlvbnMsICdjaHJv
bWl1bScpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wdGlvbnMudG9sZXJhbmNlLCAwKQog
CitBUkNISVZFX1VSTCA9ICdodHRwOi8vbG9jYWxob3N0L2xheW91dF90ZXN0X3Jlc3VsdHMnCisK
KworZGVmIHRlc3Rfb3B0aW9ucygpOgorICAgIHJldHVybiBtb2NrdG9vbC5Nb2NrT3B0aW9ucyhj
b25maWd1cmF0aW9uPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2t1
cD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbF9kaXJlY3Rvcnk9
Jy90bXAnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmNoaXZlX3VybD1BUkNI
SVZFX1VSTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yY2VfYXJjaGl2ZV91
cmw9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2Via2l0X2NhbmFyeT1U
cnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VfZHJ0PUZhbHNlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRfcGxhdGZvcm09J2Nocm9taXVtJywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyYm9zZT1GYWxzZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcXVpZXQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHBsYXRmb3Jtcz0nbWFjLHdpbicpCisKKworZGVmIHRlc3RfaG9zdF9wb3J0
X2FuZF9maWxlc3lzdGVtKG9wdGlvbnMsIGV4cGVjdGF0aW9ucyk6CisgICAgZmlsZXN5c3RlbSA9
IHBvcnQudW5pdF90ZXN0X2ZpbGVzeXN0ZW0oKQorICAgIGhvc3RfcG9ydF9vYmogPSBwb3J0Lmdl
dCgndGVzdCcsIG9wdGlvbnMsIGZpbGVzeXN0ZW09ZmlsZXN5c3RlbSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdXNlcj11c2VyX21vY2suTW9ja1VzZXIoKSkKKworICAgIGV4cGVjdGF0
aW9uc19wYXRoID0gaG9zdF9wb3J0X29iai5wYXRoX3RvX3Rlc3RfZXhwZWN0YXRpb25zX2ZpbGUo
KQorICAgIGZpbGVzeXN0ZW0ud3JpdGVfdGV4dF9maWxlKGV4cGVjdGF0aW9uc19wYXRoLCBleHBl
Y3RhdGlvbnMpCisgICAgcmV0dXJuIChob3N0X3BvcnRfb2JqLCBmaWxlc3lzdGVtKQorCisKK2Rl
ZiB0ZXN0X2ZldGNoZXIoZmlsZXN5c3RlbSk6CisgICAgdXJscyA9IHsKKyAgICAgICAgQVJDSElW
RV9VUkwgKyAnL1dlYmtpdF9NYWMxMF81Lyc6ICc8YSBocmVmPSIxLyI+PGEgaHJlZj0iMi8iPics
CisgICAgICAgIEFSQ0hJVkVfVVJMICsgJy9XZWJraXRfTWFjMTBfNS8yL2xheW91dC10ZXN0LXJl
c3VsdHMuemlwJzogJzInLAorICAgICAgICBBUkNISVZFX1VSTCArICcvV2Via2l0X1dpbi8nOiAn
PGEgaHJlZj0iMS8iPicsCisgICAgICAgIEFSQ0hJVkVfVVJMICsgJy9XZWJraXRfV2luLzEvbGF5
b3V0LXRlc3QtcmVzdWx0cy56aXAnOiAnMScsCisgICAgfQorICAgIHJldHVybiBmZXRjaGVyX21v
Y2subWFrZV9mZXRjaGVyX2Nscyh1cmxzKShmaWxlc3lzdGVtKQorCisKK2RlZiB0ZXN0X3Vuemlw
cGVyX2NscygpOgorICAgIHppcGhhc2hlcyA9IHsKKyAgICAgICAgJy9fX2ltX3RtcC90bXBfMF9t
b2NrZmV0Y2hlcic6IHsKKyAgICAgICAgICAgICdsYXlvdXQtdGVzdC1yZXN1bHRzL2ZhaWx1cmVz
L2V4cGVjdGVkL2ltYWdlLWFjdHVhbC50eHQnOiAnbmV3LWltYWdlLXR4dCcsCisgICAgICAgICAg
ICAnbGF5b3V0LXRlc3QtcmVzdWx0cy9mYWlsdXJlcy9leHBlY3RlZC9pbWFnZS1hY3R1YWwuY2hl
Y2tzdW0nOiAnbmV3LWltYWdlLWNoZWNrc3VtJywKKyAgICAgICAgICAgICdsYXlvdXQtdGVzdC1y
ZXN1bHRzL2ZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlLWFjdHVhbC5wbmcnOiAnbmV3LWltYWdlLXBu
ZycsCisgICAgICAgIH0sCisgICAgICAgICcvX19pbV90bXAvdG1wXzRfbW9ja2ZldGNoZXInOiB7
CisgICAgICAgICAgICAnbGF5b3V0LXRlc3QtcmVzdWx0cy9mYWlsdXJlcy9leHBlY3RlZC9pbWFn
ZS1hY3R1YWwudHh0JzogJ3dpbi1pbWFnZS10eHQnLAorICAgICAgICAgICAgJ2xheW91dC10ZXN0
LXJlc3VsdHMvZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2UtYWN0dWFsLmNoZWNrc3VtJzogJ3dpbi1p
bWFnZS1jaGVja3N1bScsCisgICAgICAgICAgICAnbGF5b3V0LXRlc3QtcmVzdWx0cy9mYWlsdXJl
cy9leHBlY3RlZC9pbWFnZS1hY3R1YWwucG5nJzogJ3dpbi1pbWFnZS1wbmcnLAorICAgICAgICB9
LAorICAgIH0KKyAgICByZXR1cm4gemlwcGVyX21vY2subWFrZV91bnppcHBlcih6aXBoYXNoZXMp
CisKKworY2xhc3MgVGVzdFJlYmFzZWxpbmVyKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYg
bWFrZV9yZWJhc2VsaW5lcihzZWxmLCBleHBlY3RhdGlvbnMpOgorICAgICAgICBvcHRpb25zID0g
dGVzdF9vcHRpb25zKCkKKyAgICAgICAgaG9zdF9wb3J0X29iaiwgZmlsZXN5c3RlbSA9IHRlc3Rf
aG9zdF9wb3J0X2FuZF9maWxlc3lzdGVtKG9wdGlvbnMsIGV4cGVjdGF0aW9ucykKKworICAgICAg
ICB0YXJnZXRfb3B0aW9ucyA9IG9wdGlvbnMKKyAgICAgICAgdGFyZ2V0X3BvcnRfb2JqID0gcG9y
dC5nZXQoJ3Rlc3QnLCB0YXJnZXRfb3B0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZmlsZXN5c3RlbT1maWxlc3lzdGVtKQorICAgICAgICB0YXJnZXRfcG9ydF9vYmou
X2V4cGVjdGF0aW9ucyA9IGV4cGVjdGF0aW9ucworICAgICAgICBwbGF0Zm9ybSA9IHRhcmdldF9w
b3J0X29iai50ZXN0X3BsYXRmb3JtX25hbWUoKQorCisgICAgICAgIGZldGNoZXIgPSB0ZXN0X2Zl
dGNoZXIoZmlsZXN5c3RlbSkKKyAgICAgICAgdW56aXBwZXJfY2xzID0gdGVzdF91bnppcHBlcl9j
bHMoKQorICAgICAgICBtb2NrX3NjbSA9IHNjbV9tb2NrLk1vY2tTQ00oKQorICAgICAgICByZWJh
c2VsaW5lciA9IHJlYmFzZWxpbmVfY2hyb21pdW1fd2Via2l0X3Rlc3RzLlJlYmFzZWxpbmVyKGhv
c3RfcG9ydF9vYmosCisgICAgICAgICAgICB0YXJnZXRfcG9ydF9vYmosIHBsYXRmb3JtLCBvcHRp
b25zLCBmZXRjaGVyLCB1bnppcHBlcl9jbHMsIG1vY2tfc2NtKQorICAgICAgICByZXR1cm4gcmVi
YXNlbGluZXIsIGZpbGVzeXN0ZW0KKwogICAgIGRlZiB0ZXN0X25vb3Aoc2VsZik6CiAgICAgICAg
ICMgdGhpcyBtZXRob2QgdGVzdHMgdGhhdCB3YXMgY2FuIGF0IGxlYXN0IGluc3RhbnRpYXRlIGFu
IG9iamVjdCwgZXZlbgogICAgICAgICAjIGlmIHRoZXJlIGlzIG5vdGhpbmcgdG8gZG8uCi0gICAg
ICAgIHJlYmFzZWxpbmVyID0gc2VsZi5tYWtlX3JlYmFzZWxpbmVyKCkKLSAgICAgICAgc2VsZi5h
c3NlcnROb3RFcXVhbChyZWJhc2VsaW5lciwgTm9uZSkKKyAgICAgICAgcmViYXNlbGluZXIsIGZp
bGVzeXN0ZW0gPSBzZWxmLm1ha2VfcmViYXNlbGluZXIoIiIpCisgICAgICAgIHJlYmFzZWxpbmVy
LnJ1bihGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZmlsZXN5c3RlbS53cml0
dGVuX2ZpbGVzKSwgMSkKKworICAgIGRlZiB0ZXN0X29uZV9wbGF0Zm9ybShzZWxmKToKKyAgICAg
ICAgcmViYXNlbGluZXIsIGZpbGVzeXN0ZW0gPSBzZWxmLm1ha2VfcmViYXNlbGluZXIoCisgICAg
ICAgICAgICAiQlVHWCBSRUJBU0VMSU5FIE1BQyA6IGZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlLmh0
bWwgPSBJTUFHRSIpCisgICAgICAgIHJlYmFzZWxpbmVyLnJ1bihGYWxzZSkKKyAgICAgICAgIyBX
ZSBleHBlY3QgdG8gaGF2ZSB3cml0dGVuIDEzIGZpbGVzIG92ZXIgdGhlIGNvdXJzZSBvZiB0aGlz
IHJlYmFzZWxpbmU6CisgICAgICAgICMgKikgMSBmaWxlIGluIC9fX2ltX3RtcCBmb3IgdGhlIGRv
d25sb2FkZWQgbWFjIGFyY2hpdmUsCisgICAgICAgICMgKikgMyBmaWxlcyBpbiAvX19pbV90bXAg
Zm9yIHRoZSBleHRyYWN0ZWQgYXJjaGl2ZSBtZW1iZXJzCisgICAgICAgICMgKikgMyBuZXcgYmFz
ZWxpbmVzIHVuZGVyICcvdGVzdC5jaGVja291dC9MYXlvdXRUZXN0cycKKyAgICAgICAgIyAqKSAx
IHVwZGF0ZWQgdGVzdF9leHBlY3RhdGlvbnMgZmlsZQorICAgICAgICAjICopIDQgZmlsZXMgaW4g
L3RtcCBmb3IgdGhlIG5ldyBhbmQgb2xkIGJhc2VsaW5lcyBpbiB0aGUgcmVzdWx0IGZpbGUKKyAg
ICAgICAgIyAqKSAxIHRleHQgZGlmZiBpbiAvdG1wIGZvciB0aGUgcmVzdWx0IGZpbGUKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZmlsZXN5c3RlbS53cml0dGVuX2ZpbGVzKSwgMTMpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZXN5c3RlbS5maWxlc1snL3Rlc3QuY2hlY2tvdXQv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vdGVzdC90ZXN0X2V4cGVjdGF0aW9ucy50eHQnXSwgJycpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZXN5c3RlbS5maWxlc1snL3Rlc3QuY2hlY2tvdXQv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vdGVzdC1tYWMvZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2UtZXhw
ZWN0ZWQuY2hlY2tzdW0nXSwgJ25ldy1pbWFnZS1jaGVja3N1bScpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoZmlsZXN5c3RlbS5maWxlc1snL3Rlc3QuY2hlY2tvdXQvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vdGVzdC1tYWMvZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2UtZXhwZWN0ZWQucG5nJ10sICdu
ZXctaW1hZ2UtcG5nJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlc3lzdGVtLmZpbGVz
WycvdGVzdC5jaGVja291dC9MYXlvdXRUZXN0cy9wbGF0Zm9ybS90ZXN0LW1hYy9mYWlsdXJlcy9l
eHBlY3RlZC9pbWFnZS1leHBlY3RlZC50eHQnXSwgJ25ldy1pbWFnZS10eHQnKQorCisgICAgZGVm
IHRlc3RfYWxsX3BsYXRmb3JtcyhzZWxmKToKKyAgICAgICAgcmViYXNlbGluZXIsIGZpbGVzeXN0
ZW0gPSBzZWxmLm1ha2VfcmViYXNlbGluZXIoCisgICAgICAgICAgICAiQlVHWCBSRUJBU0VMSU5F
IDogZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2UuaHRtbCA9IElNQUdFIikKKyAgICAgICAgcmViYXNl
bGluZXIucnVuKEZhbHNlKQorICAgICAgICAjIFNlZSBjb21tZW50IGluIHRlc3Rfb25lX3BsYXRm
b3JtIGZvciBhbiBleHBsYW5hdGlvbiBvZiB0aGUgMTMgd3JpdHRlbiB0ZXN0cy4KKyAgICAgICAg
IyBOb3RlIHRoYXQgZXZlbiB0aG91Z2ggdGhlIHJlYmFzZWxpbmUgaXMgbWFya2VkIGZvciBhbGwg
cGxhdGZvcm1zLCBlYWNoCisgICAgICAgICMgcmViYXNlbGluZXIgb25seSBldmVyIGRvZXMgb25l
LgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihmaWxlc3lzdGVtLndyaXR0ZW5fZmlsZXMp
LCAxMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlc3lzdGVtLmZpbGVzWycvdGVzdC5j
aGVja291dC9MYXlvdXRUZXN0cy9wbGF0Zm9ybS90ZXN0L3Rlc3RfZXhwZWN0YXRpb25zLnR4dCdd
LCAnQlVHWCBSRUJBU0VMSU5FIFdJTiA6IGZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlLmh0bWwgPSBJ
TUFHRVxuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlc3lzdGVtLmZpbGVzWycvdGVz
dC5jaGVja291dC9MYXlvdXRUZXN0cy9wbGF0Zm9ybS90ZXN0LW1hYy9mYWlsdXJlcy9leHBlY3Rl
ZC9pbWFnZS1leHBlY3RlZC5jaGVja3N1bSddLCAnbmV3LWltYWdlLWNoZWNrc3VtJykKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlc3lzdGVtLmZpbGVzWycvdGVzdC5jaGVja291dC9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS90ZXN0LW1hYy9mYWlsdXJlcy9leHBlY3RlZC9pbWFnZS1leHBlY3Rl
ZC5wbmcnXSwgJ25ldy1pbWFnZS1wbmcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVz
eXN0ZW0uZmlsZXNbJy90ZXN0LmNoZWNrb3V0L0xheW91dFRlc3RzL3BsYXRmb3JtL3Rlc3QtbWFj
L2ZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlLWV4cGVjdGVkLnR4dCddLCAnbmV3LWltYWdlLXR4dCcp
CiAKICAgICBkZWYgdGVzdF9kaWZmX2Jhc2VsaW5lc190eHQoc2VsZik6Ci0gICAgICAgIHJlYmFz
ZWxpbmVyID0gc2VsZi5tYWtlX3JlYmFzZWxpbmVyKCkKLSAgICAgICAgb3V0cHV0ID0gcmViYXNl
bGluZXIuX3BvcnQuZXhwZWN0ZWRfdGV4dCgKLSAgICAgICAgICAgIHJlYmFzZWxpbmVyLl9wb3J0
Ll9maWxlc3lzdGVtLmpvaW4ocmViYXNlbGluZXIuX3BvcnQubGF5b3V0X3Rlc3RzX2RpcigpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFzc2VzL3Rl
eHQuaHRtbCcpKQorICAgICAgICByZWJhc2VsaW5lciwgZmlsZXN5c3RlbSA9IHNlbGYubWFrZV9y
ZWJhc2VsaW5lcigiIikKKyAgICAgICAgcG9ydCA9IHJlYmFzZWxpbmVyLl9wb3J0CisgICAgICAg
IG91dHB1dCA9IHBvcnQuZXhwZWN0ZWRfdGV4dCgKKyAgICAgICAgICAgIHBvcnQuX2ZpbGVzeXN0
ZW0uam9pbihwb3J0LmxheW91dF90ZXN0c19kaXIoKSwgJ3Bhc3Nlcy90ZXh0Lmh0bWwnKSkKICAg
ICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZWJhc2VsaW5lci5fZGlmZl9iYXNlbGluZXMob3V0cHV0
LCBvdXRwdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlzX2ltYWdlPUZhbHNlKSkKIAogICAgIGRlZiB0ZXN0X2RpZmZfYmFzZWxpbmVzX3Bu
ZyhzZWxmKToKLSAgICAgICAgcmViYXNlbGluZXIgPSBzZWxmLm1ha2VfcmViYXNlbGluZXIoKQot
ICAgICAgICBpbWFnZSA9IHJlYmFzZWxpbmVyLl9wb3J0LmV4cGVjdGVkX2ltYWdlKAotICAgICAg
ICAgICAgcmViYXNlbGluZXIuX3BvcnQuX2ZpbGVzeXN0ZW0uam9pbihyZWJhc2VsaW5lci5fcG9y
dC5sYXlvdXRfdGVzdHNfZGlyKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICdwYXNzZXMvaW1hZ2UuaHRtbCcpKQorICAgICAgICByZWJhc2VsaW5lciwg
ZmlsZXN5c3RlbSA9IHNlbGYubWFrZV9yZWJhc2VsaW5lcignJykKKyAgICAgICAgcG9ydCA9IHJl
YmFzZWxpbmVyLl9wb3J0CisgICAgICAgIGltYWdlID0gcG9ydC5leHBlY3RlZF9pbWFnZSgKKyAg
ICAgICAgICAgIHBvcnQuX2ZpbGVzeXN0ZW0uam9pbihwb3J0LmxheW91dF90ZXN0c19kaXIoKSwg
J3Bhc3Nlcy9pbWFnZS5odG1sJykpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmViYXNlbGlu
ZXIuX2RpZmZfYmFzZWxpbmVzKGltYWdlLCBpbWFnZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfaW1hZ2U9VHJ1ZSkpCiAKIAorY2xhc3Mg
VGVzdFJlYWxNYWluKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9hbGxfcGxhdGZv
cm1zKHNlbGYpOgorICAgICAgICBleHBlY3RhdGlvbnMgPSAiQlVHWCBSRUJBU0VMSU5FIDogZmFp
bHVyZXMvZXhwZWN0ZWQvaW1hZ2UuaHRtbCA9IElNQUdFIgorCisgICAgICAgIG9wdGlvbnMgPSB0
ZXN0X29wdGlvbnMoKQorCisgICAgICAgIGhvc3RfcG9ydF9vYmosIGZpbGVzeXN0ZW0gPSB0ZXN0
X2hvc3RfcG9ydF9hbmRfZmlsZXN5c3RlbShvcHRpb25zLCBleHBlY3RhdGlvbnMpCisgICAgICAg
IGZldGNoZXIgPSB0ZXN0X2ZldGNoZXIoZmlsZXN5c3RlbSkKKyAgICAgICAgdW56aXBwZXJfY2xz
ID0gdGVzdF91bnppcHBlcl9jbHMoKQorICAgICAgICBtb2NrX3NjbSA9IHNjbV9tb2NrLk1vY2tT
Q00oKQorICAgICAgICByZWJhc2VsaW5lX2Nocm9taXVtX3dlYmtpdF90ZXN0cy5yZWFsX21haW4o
b3B0aW9ucywgb3B0aW9ucywgaG9zdF9wb3J0X29iaiwKKyAgICAgICAgICAgIGhvc3RfcG9ydF9v
YmosIGZldGNoZXIsIHVuemlwcGVyX2NscywgbW9ja19zY20pCisKKyAgICAgICAgIyBXZSBleHBl
Y3QgdG8gaGF2ZSB3cml0dGVuIDI2IGZpbGVzIG92ZXIgdGhlIGNvdXJzZSBvZiB0aGlzIHJlYmFz
ZWxpbmU6CisgICAgICAgICMgMiAqIHRlc3RfYWxsX3BsYXRmb3JtcywgYWJvdmUKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChsZW4oZmlsZXN5c3RlbS53cml0dGVuX2ZpbGVzKSwgMjYpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZXN5c3RlbS5maWxlc1snL3Rlc3QuY2hlY2tvdXQvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vdGVzdC90ZXN0X2V4cGVjdGF0aW9ucy50eHQnXSwgJycpCisKKwog
Y2xhc3MgVGVzdEh0bWxHZW5lcmF0b3IodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBtYWtl
X2dlbmVyYXRvcihzZWxmLCBmaWxlcywgdGVzdHMpOgogICAgICAgICBvcHRpb25zID0gbW9ja3Rv
b2wuTW9ja09wdGlvbnMoY29uZmlndXJhdGlvbj1Ob25lLCBodG1sX2RpcmVjdG9yeT0nL3RtcCcp
CiAgICAgICAgIGhvc3RfcG9ydCA9IHBvcnQuZ2V0KCd0ZXN0Jywgb3B0aW9ucywgZmlsZXN5c3Rl
bT1maWxlc3lzdGVtX21vY2suTW9ja0ZpbGVTeXN0ZW0oZmlsZXMpKQotICAgICAgICBnZW5lcmF0
b3IgPSByZWJhc2VsaW5lX2Nocm9taXVtX3dlYmtpdF90ZXN0cy5IdG1sR2VuZXJhdG9yKAotICAg
ICAgICAgICAgaG9zdF9wb3J0LAotICAgICAgICAgICAgdGFyZ2V0X3BvcnQ9Tm9uZSwKLSAgICAg
ICAgICAgIG9wdGlvbnM9b3B0aW9ucywKLSAgICAgICAgICAgIHBsYXRmb3Jtcz1bJ21hYyddLAot
ICAgICAgICAgICAgcmViYXNlbGluaW5nX3Rlc3RzPXRlc3RzKQorICAgICAgICBnZW5lcmF0b3Ig
PSByZWJhc2VsaW5lX2Nocm9taXVtX3dlYmtpdF90ZXN0cy5IdG1sR2VuZXJhdG9yKGhvc3RfcG9y
dCwKKyAgICAgICAgICAgIHRhcmdldF9wb3J0PU5vbmUsIG9wdGlvbnM9b3B0aW9ucywgcGxhdGZv
cm1zPVsnbWFjJ10sIHJlYmFzZWxpbmluZ190ZXN0cz10ZXN0cykKICAgICAgICAgcmV0dXJuIGdl
bmVyYXRvciwgaG9zdF9wb3J0CiAKICAgICBkZWYgdGVzdF9nZW5lcmF0ZV9iYXNlbGluZV9saW5r
cyhzZWxmKToK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79974</attachid>
            <date>2011-01-24 14:06:44 -0800</date>
            <delta_ts>2011-01-24 16:34:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-53040-20110124140643.patch</filename>
            <type>text/plain</type>
            <size>31314</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA5ODAy
YzZiOTM1YWUyMTY1MDViZTk2Njg4MmNjYTVhZDIwZTliNjNhLi5jMWYwYWRiYjVkYjE5NzFjMDgy
OWQ1MWY1ZGIwNzI1YTE4ZjRhMGFlIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIv
VG9vbHMvQ2hhbmdlTG9nCkBAIC0yLDYgKzIsMjUgQEAKIAogICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KIAorICAgICAgICBBZGQgbW9yZSB1bml0IHRlc3RzIGZvciByZWJhc2Vs
aW5lLWNocm9taXVtLXdlYmtpdC10ZXN0cy4gVGhpcworICAgICAgICBjaGFuZ2UgaW52b2x2ZXMg
cmVzdHJ1Y3R1cmluZyBhIGJ1bmNoIG9mIHItYy13LXQgY29kZSB0byBtYWtlIGl0CisgICAgICAg
IG1vcmUgdGVzdGFibGUgYXMgd2VsbC4gV2UgYWxzbyBhZGQgd3JhcHBlciBjbGFzc2VzIGZvciBo
YW5kbGluZworICAgICAgICB6aXAgZmlsZXMgYW5kIGZldGNoaW5nIFVSTHMuCisKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUzMDQwCisKKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20ucHk6CisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9jb21tb24vZmV0Y2hlci5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L2NvbW1vbi9mZXRjaGVyX21vY2sucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9j
b21tb24vemlwcGVyLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3ppcHBl
cl9tb2NrLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3JlYmFz
ZWxpbmVfY2hyb21pdW1fd2Via2l0X3Rlc3RzLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3JlYmFzZWxpbmVfY2hyb21pdW1fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0
LnB5OgorCisyMDExLTAxLTI0ICBEaXJrIFByYW5rZSAgPGRwcmFua2VAY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCiAgICAgICAgIE1pbm9yIGJ1
ZyBmaXhlcyBhbmQgY2xlYW51cCBmb3IgZmlsZXN5c3RlbSB3cmFwcGVycywgcG9ydC8qIHRlc3QK
ICAgICAgICAgY2xhc3NlcywgdGVzdF9leHBlY3RhdGlvbnMucHkuIFRoaXMgY2hhbmdlIGFkZHMg
InRlc3Qtd2luIiBhbmQKICAgICAgICAgInRlc3QtbWFjIiB2YXJpYW50cyB0byB0aGUgdGVzdCBw
b3J0IHNvIHRoYXQgd2UgY2FuIGJldHRlciB0ZXN0CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2NvbW1vbi9mZXRjaGVyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21t
b24vZmV0Y2hlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MjFlNmQzODA4ZWQxMWRhOWY0MDg1NDhmYjliMmIz
YjEzNzhkMWEwCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21t
b24vZmV0Y2hlci5weQpAQCAtMCwwICsxLDUxIEBACisjIENvcHlyaWdodCAoQykgMjAxMSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisj
CisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIiV3Jh
cHBlciBtb2R1bGUgZm9yIGZldGNoaW5nIFVSTHMuIiIiCisKK2ltcG9ydCB1cmxsaWIKKworCitj
bGFzcyBVcmxGZXRjaGVyKG9iamVjdCk6CisgICAgIiIiQ2xhc3Mgd2l0aCByZXN0cmljdGVkIGlu
dGVyZmFjZSB0byBmZXRjaCBVUkxzIChtYWtlcyB0ZXN0aW5nIGVhc2llcikiIiIKKyAgICBkZWYg
X19pbml0X18oc2VsZiwgZmlsZXN5c3RlbSk6CisgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0gPSBm
aWxlc3lzdGVtCisKKyAgICBkZWYgZmV0Y2goc2VsZiwgdXJsKToKKyAgICAgICAgIiIiRmV0Y2hl
cyB0aGUgY29udGVudHMgb2YgdGhlIFVSTCBhcyBhIHN0cmluZy4iIiIKKyAgICAgICAgZiA9IHVy
bGxpYi51cmxvcGVuKHVybCkKKyAgICAgICAgY29udGVudCA9IGYucmVhZCgpCisgICAgICAgIGYu
Y2xvc2UoKQorICAgICAgICByZXR1cm4gY29udGVudAorCisgICAgZGVmIGZldGNoX2ludG9fZmls
ZShzZWxmLCB1cmwpOgorICAgICAgICAiIiJGZXRjaGVzIHRoZSBjb250ZW50cyBvZiB0aGUgVVJM
IGludG8gYSB0ZW1wb3JhcnkgZmlsZSBhbmQgcmV0dXJuIHRoZSBmaWxlbmFtZS4iIiIKKyAgICAg
ICAgZiwgZm4gPSBzZWxmLl9maWxlc3lzdGVtLm9wZW5fYmluYXJ5X3RlbXBmaWxlKHNlbGYpCisg
ICAgICAgIGYuY2xvc2UoKQorICAgICAgICB1cmxsaWIudXJscmV0cmlldmUodXJsLCBmbikKKyAg
ICAgICAgcmV0dXJuIGZuCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi9mZXRjaGVyX21vY2sucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9mZXRjaGVy
X21vY2sucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZThhNzUzMjA4NDkyNWRiMDI1OTliZWY1NTZkNmUzZWZiYjcx
ZTQ0ZgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2Zl
dGNoZXJfbW9jay5weQpAQCAtMCwwICsxLDQ2IEBACisjIENvcHlyaWdodCAoQykgMjAxMSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorIyBtZXQ6CisjCisjICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisj
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisj
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCitkZWYgbWFr
ZV9mZXRjaGVyX2Nscyh1cmxzKToKKyAgICAiIiJVcmxGZXRjaGVyIGZhY3Rvcnkgcm91dGluZSB0
aGF0IHNpbXVsYXRlcyBuZXR3b3JrIGFjY2VzcworICAgIHVzaW5nIGEgZGljdCBvZiBVUkxzIC0+
IGNvbnRlbnRzLiIiIgorICAgIGNsYXNzIE1vY2tGZXRjaGVyKG9iamVjdCk6CisgICAgICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBmaWxlc3lzdGVtKToKKyAgICAgICAgICAgIHNlbGYuX2ZpbGVzeXN0
ZW0gPSBmaWxlc3lzdGVtCisKKyAgICAgICAgZGVmIGZldGNoKHNlbGYsIHVybCk6CisgICAgICAg
ICAgICByZXR1cm4gdXJsc1t1cmxdCisKKyAgICAgICAgZGVmIGZldGNoX2ludG9fZmlsZShzZWxm
LCB1cmwpOgorICAgICAgICAgICAgZiwgZm4gPSBzZWxmLl9maWxlc3lzdGVtLm9wZW5fYmluYXJ5
X3RlbXBmaWxlKCdtb2NrZmV0Y2hlcicpCisgICAgICAgICAgICBmLndyaXRlKHNlbGYuZmV0Y2go
dXJsKSkKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgcmV0dXJuIGZuCisKKyAg
ICByZXR1cm4gTW9ja0ZldGNoZXIKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL3ppcHBlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3ppcHBlci5w
eQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi43OTQwZGFlNmRjZTNhZWUzNzBmMmI3NGY2NmFmNDQyMTNmMDA1ZjEzCi0t
LSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vemlwcGVyLnB5
CkBAIC0wLDAgKzEsNDUgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoK
KyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiJXcmFwcGVyIG1vZHVsZSBm
b3IgaGFuZGxpbmcgemlwZmlsZXMgKG1ha2VzIHRlc3RpbmcgZWFzaWVyKS4iIiIKKworaW1wb3J0
IHppcGZpbGUKKworCitjbGFzcyBVblppcHBlcihvYmplY3QpOgorICAgICIiIlppcC1maWxlIGhh
bmRsaW5nIGNsYXNzIHdpdGggYSByZXN0cmljdGVkIGludGVyZmFjZSAobWFrZXMgdGVzdGluZyBl
YXNpZXIpLiIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoKToKKyAgICAgICAgc2VsZi5f
emlwZmlsZSA9IHppcGZpbGUuWmlwRmlsZShwYXRoLCAncicpCisKKyAgICBkZWYgbmFtZWxpc3Qo
c2VsZik6CisgICAgICAgICIiIlJldHVybnMgdGhlIGxpc3Qgb2YgbWVtYmVycyBvZiBhbiBhcmNo
aXZlLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5femlwZmlsZS5uYW1lbGlzdCgpCisKKyAgICBk
ZWYgcmVhZChzZWxmLCBtZW1iZXIpOgorICAgICAgICAiIiJFeHRyYWN0cyB0aGUgbmFtZWQgbWVt
YmVyIGFuZCByZXR1cm5zIGl0cyBjb250ZW50cyBhcyBhIHN0cmluZy4iIiIKKyAgICAgICAgcmV0
dXJuIHNlbGYuX3ppcGZpbGUucmVhZChtZW1iZXIpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2NvbW1vbi96aXBwZXJfbW9jay5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL3ppcHBlcl9tb2NrLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI5NDVmZDZlNzU5NGY4YWM3NTcwMDcw
NDFjNDg0ZDllODViMGMyMDAKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2NvbW1vbi96aXBwZXJfbW9jay5weQpAQCAtMCwwICsxLDQ3IEBACisjIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KworCitkZWYgbWFrZV91bnppcHBlcih6aXBoYXNoZXMpOgorICAgICIiIlVuWmlwcGVyIGZhY3Rv
cnkgcm91dGluZSB0aGF0IGxvb2tzIHVwIHppcGZpbGVzIGluIGEgZGljdDsKKyAgICBlYWNoIHpp
cGZpbGUgc2hvdWxkIGFsc28gYmUgYSBkaWN0IG9mIG1lbWJlciBuYW1lcyAtPiBjb250ZW50cy4i
IiIKKyAgICBjbGFzcyBNb2NrVW5aaXBwZXIob2JqZWN0KToKKyAgICAgICAgZGVmIF9faW5pdF9f
KHNlbGYsIHBhdGgpOgorICAgICAgICAgICAgc2VsZi5fcGF0aCA9IHBhdGgKKyAgICAgICAgICAg
IHNlbGYuX3ppcGhhc2ggPSB6aXBoYXNoZXNbcGF0aF0KKworICAgICAgICBkZWYgbmFtZWxpc3Qo
c2VsZik6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5femlwaGFzaC5rZXlzKCkKKworICAgICAg
ICBkZWYgcmVhZChzZWxmLCBtZW1iZXIpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3ppcGhh
c2hbbWVtYmVyXQorCisgICAgICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgICAgIHBhc3MK
KworICAgIHJldHVybiBNb2NrVW5aaXBwZXIKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3JlYmFzZWxpbmVfY2hyb21pdW1fd2Via2l0X3Rlc3RzLnB5IGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcmViYXNlbGluZV9jaHJvbWl1bV93
ZWJraXRfdGVzdHMucHkKaW5kZXggYzg1MjE4NmZjOGYxMzhhYTVlM2RiYjYwNWFiNDM2Yjg3MTZh
OThjOS4uMTE0Njc3ZjIyMzZiMWE5NzcyY2Y1NTgwZjdjZjBiYWEyZDk1ZDY2YiAxMDA2NDQKLS0t
IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcmViYXNlbGluZV9jaHJvbWl1
bV93ZWJraXRfdGVzdHMucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRfdGVzdHMucHkKQEAgLTQ3LDEwICs0NywxMCBA
QCBpbXBvcnQgb3B0cGFyc2UKIGltcG9ydCByZQogaW1wb3J0IHN5cwogaW1wb3J0IHRpbWUKLWlt
cG9ydCB1cmxsaWIKLWltcG9ydCB6aXBmaWxlCiAKIGZyb20gd2Via2l0cHkuY29tbW9uLmNoZWNr
b3V0IGltcG9ydCBzY20KK2Zyb20gd2Via2l0cHkuY29tbW9uIGltcG9ydCB6aXBwZXIKK2Zyb20g
d2Via2l0cHkuY29tbW9uIGltcG9ydCBmZXRjaGVyCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0
ZW0gaW1wb3J0IHBhdGgKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmUgaW1w
b3J0IFNjcmlwdEVycm9yCiAKQEAgLTE0Miw3ICsxNDIsOCBAQCBjbGFzcyBSZWJhc2VsaW5lcihv
YmplY3QpOgogCiAgICAgUkVWSVNJT05fUkVHRVggPSByJzxhIGhyZWY9XCIoXGQrKS9cIj4nCiAK
LSAgICBkZWYgX19pbml0X18oc2VsZiwgcnVubmluZ19wb3J0LCB0YXJnZXRfcG9ydCwgcGxhdGZv
cm0sIG9wdGlvbnMpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBydW5uaW5nX3BvcnQsIHRhcmdl
dF9wb3J0LCBwbGF0Zm9ybSwgb3B0aW9ucywKKyAgICAgICAgICAgICAgICAgZmV0Y2hlciwgdW56
aXBwZXJfY2xzLCBzY20pOgogICAgICAgICAiIiIKICAgICAgICAgQXJnczoKICAgICAgICAgICAg
IHJ1bm5pbmdfcG9ydDogdGhlIFBvcnQgdGhlIHNjcmlwdCBpcyBydW5uaW5nIG9uLgpAQCAtMTUw
LDE2ICsxNTEsMjMgQEAgY2xhc3MgUmViYXNlbGluZXIob2JqZWN0KToKICAgICAgICAgICAgICAg
ICBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGxpa2UgdGhlIHRlc3RfZXhwZWN0YXRpb25zLnR4
dAogICAgICAgICAgICAgICAgIGZpbGUgbG9jYXRpb24gYW5kIHRoZSBsaXN0IG9mIHRlc3QgcGxh
dGZvcm1zLgogICAgICAgICAgICAgcGxhdGZvcm06IHRoZSB0ZXN0IHBsYXRmb3JtIHRvIHJlYmFz
ZWxpbmUKLSAgICAgICAgICAgIG9wdGlvbnM6IHRoZSBjb21tYW5kLWxpbmUgb3B0aW9ucyBvYmpl
Y3QuIiIiCisgICAgICAgICAgICBvcHRpb25zOiB0aGUgY29tbWFuZC1saW5lIG9wdGlvbnMgb2Jq
ZWN0LgorICAgICAgICAgICAgZmV0Y2hlcjogYW4gb2JqZWN0IHVzZWQgdG8gZmV0Y2ggdGhlIGNv
bnRlbnRzIG9mIFVSTHMuCisgICAgICAgICAgICB1bnppcHBlcl9jbHM6IGNsYXNzIG9iamVjdCB1
c2VkIHRvIGNyZWF0ZSB1bnppcHBlciBvYmplY3RzLgorICAgICAgICAgICAgc2NtOiBzY20gb2Jq
ZWN0IGZvciBhZGRpbmcgbmV3IGJhc2VsaW5lcworICAgICAgICAiIiIKICAgICAgICAgc2VsZi5f
cGxhdGZvcm0gPSBwbGF0Zm9ybQogICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucwogICAg
ICAgICBzZWxmLl9wb3J0ID0gcnVubmluZ19wb3J0CiAgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0g
PSBydW5uaW5nX3BvcnQuX2ZpbGVzeXN0ZW0KICAgICAgICAgc2VsZi5fdGFyZ2V0X3BvcnQgPSB0
YXJnZXRfcG9ydAogICAgICAgICBzZWxmLl9yZWJhc2VsaW5lX3BvcnQgPSBwb3J0LmdldCgKLSAg
ICAgICAgICAgIHNlbGYuX3RhcmdldF9wb3J0LnRlc3RfcGxhdGZvcm1fbmFtZV90b19uYW1lKHBs
YXRmb3JtKSwgb3B0aW9ucykKKyAgICAgICAgICAgIHNlbGYuX3RhcmdldF9wb3J0LnRlc3RfcGxh
dGZvcm1fbmFtZV90b19uYW1lKHBsYXRmb3JtKSwgb3B0aW9ucywKKyAgICAgICAgICAgIGZpbGVz
eXN0ZW09c2VsZi5fZmlsZXN5c3RlbSkKICAgICAgICAgc2VsZi5fcmViYXNlbGluaW5nX3Rlc3Rz
ID0gW10KICAgICAgICAgc2VsZi5fcmViYXNlbGluZWRfdGVzdHMgPSBbXQorICAgICAgICBzZWxm
Ll9mZXRjaGVyID0gZmV0Y2hlcgorICAgICAgICBzZWxmLl91bnppcHBlcl9jbHMgPSB1bnppcHBl
cl9jbHMKIAogICAgICAgICAjIENyZWF0ZSB0ZXN0cyBhbmQgZXhwZWN0YXRpb25zIGhlbHBlciB3
aGljaCBpcyB1c2VkIHRvOgogICAgICAgICAjICAgLS4gY29tcGlsZSBsaXN0IG9mIHRlc3RzIHRo
YXQgbmVlZCByZWJhc2VsaW5pbmcuCkBAIC0xNzMsNyArMTgxLDcgQEAgY2xhc3MgUmViYXNlbGlu
ZXIob2JqZWN0KToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2VsZi5fcGxhdGZvcm0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBGYWxzZSkKLSAgICAgICAgc2VsZi5fc2NtID0gc2NtLmRlZmF1bHRfc2NtKCkKKyAg
ICAgICAgc2VsZi5fc2NtID0gc2NtCiAKICAgICBkZWYgcnVuKHNlbGYsIGJhY2t1cCk6CiAgICAg
ICAgICIiIlJ1biByZWJhc2VsaW5lIHByb2Nlc3MuIiIiCkBAIC0yNTQsOSArMjYyLDcgQEAgY2xh
c3MgUmViYXNlbGluZXIob2JqZWN0KToKIAogICAgICAgICBfbG9nLmRlYnVnKCdVcmwgdG8gcmV0
cmlldmUgcmV2aXNpb246ICIlcyInLCB1cmwpCiAKLSAgICAgICAgZiA9IHVybGxpYi51cmxvcGVu
KHVybCkKLSAgICAgICAgY29udGVudCA9IGYucmVhZCgpCi0gICAgICAgIGYuY2xvc2UoKQorICAg
ICAgICBjb250ZW50ID0gc2VsZi5fZmV0Y2hlci5mZXRjaCh1cmwpCiAKICAgICAgICAgcmV2aXNp
b25zID0gcmUuZmluZGFsbChzZWxmLlJFVklTSU9OX1JFR0VYLCBjb250ZW50KQogICAgICAgICBp
ZiBub3QgcmV2aXNpb25zOgpAQCAtMzI0LDcgKzMzMCw3IEBAIGNsYXNzIFJlYmFzZWxpbmVyKG9i
amVjdCk6CiAgICAgICAgIGlmIHVybCBpcyBOb25lOgogICAgICAgICAgICAgcmV0dXJuIE5vbmUK
IAotICAgICAgICBmbiA9IHVybGxpYi51cmxyZXRyaWV2ZSh1cmwpWzBdCisgICAgICAgIGZuID0g
c2VsZi5fZmV0Y2hlci5mZXRjaF9pbnRvX2ZpbGUodXJsKQogICAgICAgICBfbG9nLmluZm8oJ0Fy
Y2hpdmUgZG93bmxvYWRlZCBhbmQgc2F2ZWQgdG8gZmlsZTogIiVzIicsIGZuKQogICAgICAgICBy
ZXR1cm4gZm4KIApAQCAtMzM5LDcgKzM0NSw3IEBAIGNsYXNzIFJlYmFzZWxpbmVyKG9iamVjdCk6
CiAgICAgICAgICAgTm9uZSBvbiBmYWlsdXJlLgogICAgICAgICAiIiIKIAotICAgICAgICB6aXBf
ZmlsZSA9IHppcGZpbGUuWmlwRmlsZShhcmNoaXZlX2ZpbGUsICdyJykKKyAgICAgICAgemlwX2Zp
bGUgPSBzZWxmLl91bnppcHBlcl9jbHMoYXJjaGl2ZV9maWxlKQogICAgICAgICB6aXBfbmFtZWxp
c3QgPSB6aXBfZmlsZS5uYW1lbGlzdCgpCiAKICAgICAgICAgX2xvZy5kZWJ1ZygnemlwIGZpbGUg
bmFtZWxpc3Q6JykKQEAgLTg1NywxOCArODYzLDkgQEAgZGVmIHBhcnNlX29wdGlvbnMoYXJncyk6
CiAgICAgcmV0dXJuIChvcHRpb25zLCB0YXJnZXRfb3B0aW9ucykKIAogCi1kZWYgbWFpbigpOgot
ICAgICIiIk1haW4gZnVuY3Rpb24gdG8gcHJvZHVjZSBuZXcgYmFzZWxpbmVzLiIiIgotCi0gICAg
KG9wdGlvbnMsIHRhcmdldF9vcHRpb25zKSA9IHBhcnNlX29wdGlvbnMoc3lzLmFyZ3ZbMTpdKQot
Ci0gICAgIyBXZSBuZWVkIHRvIGNyZWF0ZSB0aHJlZSBkaWZmZXJlbnQgUG9ydCBvYmplY3RzIG92
ZXIgdGhlIGxpZmUgb2YgdGhpcwotICAgICMgc2NyaXB0LiB8dGFyZ2V0X3BvcnRfb2JqfCBpcyB1
c2VkIHRvIGRldGVybWluZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uOgotICAgICMgbG9jYXRp
b24gb2YgdGhlIGV4cGVjdGF0aW9ucyBmaWxlLCBuYW1lcyBvZiBwb3J0cyB0byByZWJhc2VsaW5l
LCBldGMuCi0gICAgIyB8cG9ydF9vYmp8IGlzIHVzZWQgZm9yIHJ1bnRpbWUgZnVuY3Rpb25hbGl0
eSBsaWtlIGFjdHVhbGx5IGRpZmZpbmcKLSAgICAjIFRoZW4gd2UgY3JlYXRlIGEgcmViYXNlbGlu
aW5nIHBvcnQgdG8gYWN0dWFsIGZpbmQgYW5kIG1hbmFnZSB0aGUKLSAgICAjIGJhc2VsaW5lcy4K
LSAgICB0YXJnZXRfcG9ydF9vYmogPSBwb3J0LmdldChOb25lLCB0YXJnZXRfb3B0aW9ucykKK2Rl
ZiBtYWluKGFyZ3MpOgorICAgICIiIkJvb3RzdHJhcCBmdW5jdGlvbiB0aGF0IHNldHMgdXAgdGhl
IG9iamVjdCByZWZlcmVuY2VzIHdlIG5lZWQgYW5kIGNhbGxzIHJlYWxfbWFpbigpLiIiIgorICAg
IG9wdGlvbnMsIHRhcmdldF9vcHRpb25zID0gcGFyc2Vfb3B0aW9ucyhhcmdzKQogCiAgICAgIyBT
ZXQgdXAgb3VyIGxvZ2dpbmcgZm9ybWF0LgogICAgIGxvZ19sZXZlbCA9IGxvZ2dpbmcuSU5GTwpA
QCAtODc5LDIwICs4NzYsMzcgQEAgZGVmIG1haW4oKToKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJyUobGV2ZWxuYW1lKXMgJShtZXNzYWdlKXMnKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGVmbXQ9JyV5JW0lZCAlSDolTTolUycpCiAKKyAgICB0YXJnZXRfcG9ydF9vYmog
PSBwb3J0LmdldChOb25lLCB0YXJnZXRfb3B0aW9ucykKICAgICBob3N0X3BvcnRfb2JqID0gZ2V0
X2hvc3RfcG9ydF9vYmplY3Qob3B0aW9ucykKLSAgICBpZiBub3QgaG9zdF9wb3J0X29iajoKLSAg
ICAgICAgc3lzLmV4aXQoMSkKKyAgICBpZiBub3QgaG9zdF9wb3J0X29iaiBvciBub3QgdGFyZ2V0
X3BvcnRfb2JqOgorICAgICAgICByZXR1cm4gMQogCisgICAgZmV0Y2hlciA9IGZldGNoZXIuVXJs
RmV0Y2hlcihob3N0X3BvcnRfb2JqLl9maWxlc3lzdGVtKQorICAgIHVuemlwcGVyID0gemlwcGVy
LlVuWmlwcGVyKCkKKyAgICBzY21fb2JqID0gc2NtLmRlZmF1bHRfc2NtKCkKKworICAgIHJldHVy
biByZWFsX21haW4ob3B0aW9ucywgdGFyZ2V0X29wdGlvbnMsIGhvc3RfcG9ydF9vYmosIGZldGNo
ZXJfY2xzLCB1bnppcHBlciwgc2NtX29iaikKKworCitkZWYgcmVhbF9tYWluKG9wdGlvbnMsIHRh
cmdldF9vcHRpb25zLCBob3N0X3BvcnRfb2JqLCB0YXJnZXRfcG9ydF9vYmosIGZldGNoZXJfY2xz
LAorICAgICAgICAgICAgICB1bnppcHBlciwgc2NtX29iaik6CisgICAgIiIiTWFpbiBmdW5jdGlv
biB0byBwcm9kdWNlIG5ldyBiYXNlbGluZXMuIiIiCisgICAgIyBXZSBuZWVkIHRvIGNyZWF0ZSB0
aHJlZSBkaWZmZXJlbnQgUG9ydCBvYmplY3RzIG92ZXIgdGhlIGxpZmUgb2YgdGhpcworICAgICMg
c2NyaXB0LiB8dGFyZ2V0X3BvcnRfb2JqfCBpcyB1c2VkIHRvIGRldGVybWluZSBjb25maWd1cmF0
aW9uIGluZm9ybWF0aW9uOgorICAgICMgbG9jYXRpb24gb2YgdGhlIGV4cGVjdGF0aW9ucyBmaWxl
LCBuYW1lcyBvZiBwb3J0cyB0byByZWJhc2VsaW5lLCBldGMuCisgICAgIyB8cG9ydF9vYmp8IGlz
IHVzZWQgZm9yIHJ1bnRpbWUgZnVuY3Rpb25hbGl0eSBsaWtlIGFjdHVhbGx5IGRpZmZpbmcKKyAg
ICAjIFRoZW4gd2UgY3JlYXRlIGEgcmViYXNlbGluaW5nIHBvcnQgdG8gYWN0dWFsIGZpbmQgYW5k
IG1hbmFnZSB0aGUKKyAgICAjIGJhc2VsaW5lcy4KICAgICAjIFZlcmlmeSAncGxhdGZvcm1zJyBv
cHRpb24gaXMgdmFsaWQuCiAgICAgaWYgbm90IG9wdGlvbnMucGxhdGZvcm1zOgogICAgICAgICBf
bG9nLmVycm9yKCdJbnZhbGlkICJwbGF0Zm9ybXMiIG9wdGlvbi4gLS1wbGF0Zm9ybXMgbXVzdCBi
ZSAnCiAgICAgICAgICAgICAgICAgICAgJ3NwZWNpZmllZCBpbiBvcmRlciB0byByZWJhc2VsaW5l
LicpCi0gICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgIHJldHVybiAxCiAgICAgcGxhdGZvcm1z
ID0gW3Auc3RyaXAoKS5sb3dlcigpIGZvciBwIGluIG9wdGlvbnMucGxhdGZvcm1zLnNwbGl0KCcs
JyldCiAgICAgZm9yIHBsYXRmb3JtIGluIHBsYXRmb3JtczoKICAgICAgICAgaWYgbm90IHBsYXRm
b3JtIGluIFJFQkFTRUxJTkVfUExBVEZPUk1fT1JERVI6CiAgICAgICAgICAgICBfbG9nLmVycm9y
KCdJbnZhbGlkIHBsYXRmb3JtOiAiJXMiJyAlIChwbGF0Zm9ybSkpCi0gICAgICAgICAgICBzeXMu
ZXhpdCgxKQorICAgICAgICAgICAgcmV0dXJuIDEKIAogICAgICMgQWRqdXN0IHRoZSBwbGF0Zm9y
bSBvcmRlciBzbyByZWJhc2VsaW5lIHRvb2wgaXMgcnVubmluZyBhdCB0aGUgb3JkZXIgb2YKICAg
ICAjICdtYWMnLCAnd2luJyBhbmQgJ2xpbnV4Jy4gVGhpcyBpcyBpbiBzYW1lIG9yZGVyIHdpdGgg
bGF5b3V0IHRlc3QgYmFzZWxpbmUKQEAgLTkwOSw3ICs5MjMsOCBAQCBkZWYgbWFpbigpOgogICAg
IGJhY2t1cCA9IG9wdGlvbnMuYmFja3VwCiAgICAgZm9yIHBsYXRmb3JtIGluIHJlYmFzZWxpbmVf
cGxhdGZvcm1zOgogICAgICAgICByZWJhc2VsaW5lciA9IFJlYmFzZWxpbmVyKGhvc3RfcG9ydF9v
YmosIHRhcmdldF9wb3J0X29iaiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
bGF0Zm9ybSwgb3B0aW9ucykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGF0
Zm9ybSwgb3B0aW9ucywgZmV0Y2hlcl9jbHMsIHVuemlwcGVyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNjbV9vYmopCiAKICAgICAgICAgX2xvZy5pbmZvKCcnKQogICAgICAg
ICBsb2dfZGFzaGVkX3N0cmluZygnUmViYXNlbGluZSBzdGFydGVkJywgcGxhdGZvcm0pCkBAIC05
MzQsNyArOTQ5LDggQEAgZGVmIG1haW4oKToKICAgICAgICAgaHRtbF9nZW5lcmF0b3Iuc2hvd19o
dG1sKCkKICAgICBsb2dfZGFzaGVkX3N0cmluZygnUmViYXNlbGluaW5nIHJlc3VsdCBjb21wYXJp
c29uIGRvbmUnLCBOb25lKQogCi0gICAgc3lzLmV4aXQoMCkKKyAgICByZXR1cm4gMAorCiAKIGlm
ICdfX21haW5fXycgPT0gX19uYW1lX186Ci0gICAgbWFpbigpCisgICAgc3lzLmV4aXQobWFpbihz
eXMuYXJndlsxOl0pKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHkgYi9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9yZWJhc2VsaW5lX2Nocm9taXVtX3dlYmtp
dF90ZXN0c191bml0dGVzdC5weQppbmRleCBhMGY1ZWViMTM2ZjRmMjk5YTQ5NTFlYjAzNDdhNmVi
NDIwZDgwMzM3Li43M2RlNGE2MjRkZmVlOTY4N2JjMzg3ZTAyYzg2MDg5ZDc5MmQ2ODI2IDEwMDY0
NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9yZWJhc2VsaW5lX2No
cm9taXVtX3dlYmtpdF90ZXN0c191bml0dGVzdC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9yZWJhc2VsaW5lX2Nocm9taXVtX3dlYmtpdF90ZXN0c191bml0dGVz
dC5weQpAQCAtMzIsNiArMzIsMTAgQEAKIGltcG9ydCB1bml0dGVzdAogCiBmcm9tIHdlYmtpdHB5
LnRvb2wgaW1wb3J0IG1vY2t0b29sCitmcm9tIHdlYmtpdHB5LmNvbW1vbiBpbXBvcnQgZmV0Y2hl
cl9tb2NrCitmcm9tIHdlYmtpdHB5LmNvbW1vbiBpbXBvcnQgemlwcGVyX21vY2sKK2Zyb20gd2Vi
a2l0cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQgZmlsZXN5c3RlbV9tb2NrCitmcm9tIHdlYmtpdHB5
LmNvbW1vbi5zeXN0ZW0gaW1wb3J0IG91dHB1dGNhcHR1cmUKIGZyb20gd2Via2l0cHkuY29tbW9u
LnN5c3RlbS5leGVjdXRpdmUgaW1wb3J0IEV4ZWN1dGl2ZSwgU2NyaXB0RXJyb3IKIAogaW1wb3J0
IHBvcnQKQEAgLTUyLDYgKzU2LDU5IEBAIGRlZiBnZXRfbW9ja19nZXQoY29uZmlnX2V4cGVjdGF0
aW9ucyk6CiAgICAgcmV0dXJuIG1vY2tfZ2V0CiAKIAorQVJDSElWRV9VUkwgPSAnaHR0cDovL2xv
Y2FsaG9zdC9sYXlvdXRfdGVzdF9yZXN1bHRzJworCisKK2RlZiB0ZXN0X29wdGlvbnMoKToKKyAg
ICByZXR1cm4gbW9ja3Rvb2wuTW9ja09wdGlvbnMoY29uZmlndXJhdGlvbj1Ob25lLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrdXA9RmFsc2UsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGh0bWxfZGlyZWN0b3J5PScvdG1wJywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYXJjaGl2ZV91cmw9QVJDSElWRV9VUkwsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZvcmNlX2FyY2hpdmVfdXJsPU5vbmUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdlYmtpdF9jYW5hcnk9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdXNlX2RydD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGFyZ2V0X3BsYXRmb3JtPSdjaHJvbWl1bScsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZlcmJvc2U9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1
aWV0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGF0Zm9ybXM9J21h
Yyx3aW4nKQorCisKK2RlZiB0ZXN0X2hvc3RfcG9ydF9hbmRfZmlsZXN5c3RlbShvcHRpb25zLCBl
eHBlY3RhdGlvbnMpOgorICAgIGZpbGVzeXN0ZW0gPSBwb3J0LnVuaXRfdGVzdF9maWxlc3lzdGVt
KCkKKyAgICBob3N0X3BvcnRfb2JqID0gcG9ydC5nZXQoJ3Rlc3QnLCBvcHRpb25zLCBmaWxlc3lz
dGVtPWZpbGVzeXN0ZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXI9bW9ja3Rv
b2wuTW9ja1VzZXIoKSkKKworICAgIGV4cGVjdGF0aW9uc19wYXRoID0gaG9zdF9wb3J0X29iai5w
YXRoX3RvX3Rlc3RfZXhwZWN0YXRpb25zX2ZpbGUoKQorICAgIGZpbGVzeXN0ZW0ud3JpdGVfdGV4
dF9maWxlKGV4cGVjdGF0aW9uc19wYXRoLCBleHBlY3RhdGlvbnMpCisgICAgcmV0dXJuIChob3N0
X3BvcnRfb2JqLCBmaWxlc3lzdGVtKQorCisKK2RlZiB0ZXN0X2ZldGNoZXIoZmlsZXN5c3RlbSk6
CisgICAgdXJscyA9IHsKKyAgICAgICAgQVJDSElWRV9VUkwgKyAnL1dlYmtpdF9NYWMxMF81Lyc6
ICc8YSBocmVmPSIxLyI+PGEgaHJlZj0iMi8iPicsCisgICAgICAgIEFSQ0hJVkVfVVJMICsgJy9X
ZWJraXRfTWFjMTBfNS8yL2xheW91dC10ZXN0LXJlc3VsdHMuemlwJzogJzInLAorICAgICAgICBB
UkNISVZFX1VSTCArICcvV2Via2l0X1dpbi8nOiAnPGEgaHJlZj0iMS8iPicsCisgICAgICAgIEFS
Q0hJVkVfVVJMICsgJy9XZWJraXRfV2luLzEvbGF5b3V0LXRlc3QtcmVzdWx0cy56aXAnOiAnMScs
CisgICAgfQorICAgIHJldHVybiBmZXRjaGVyX21vY2subWFrZV9mZXRjaGVyX2Nscyh1cmxzKShm
aWxlc3lzdGVtKQorCisKK2RlZiB0ZXN0X3VuemlwcGVyX2NscygpOgorICAgIHppcGhhc2hlcyA9
IHsKKyAgICAgICAgJy9fX2ltX3RtcC90bXBfMF9tb2NrZmV0Y2hlcic6IHsKKyAgICAgICAgICAg
ICdsYXlvdXQtdGVzdC1yZXN1bHRzL2ZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlLWFjdHVhbC50eHQn
OiAnbmV3LWltYWdlLXR4dCcsCisgICAgICAgICAgICAnbGF5b3V0LXRlc3QtcmVzdWx0cy9mYWls
dXJlcy9leHBlY3RlZC9pbWFnZS1hY3R1YWwuY2hlY2tzdW0nOiAnbmV3LWltYWdlLWNoZWNrc3Vt
JywKKyAgICAgICAgICAgICdsYXlvdXQtdGVzdC1yZXN1bHRzL2ZhaWx1cmVzL2V4cGVjdGVkL2lt
YWdlLWFjdHVhbC5wbmcnOiAnbmV3LWltYWdlLXBuZycsCisgICAgICAgIH0sCisgICAgICAgICcv
X19pbV90bXAvdG1wXzRfbW9ja2ZldGNoZXInOiB7CisgICAgICAgICAgICAnbGF5b3V0LXRlc3Qt
cmVzdWx0cy9mYWlsdXJlcy9leHBlY3RlZC9pbWFnZS1hY3R1YWwudHh0JzogJ3dpbi1pbWFnZS10
eHQnLAorICAgICAgICAgICAgJ2xheW91dC10ZXN0LXJlc3VsdHMvZmFpbHVyZXMvZXhwZWN0ZWQv
aW1hZ2UtYWN0dWFsLmNoZWNrc3VtJzogJ3dpbi1pbWFnZS1jaGVja3N1bScsCisgICAgICAgICAg
ICAnbGF5b3V0LXRlc3QtcmVzdWx0cy9mYWlsdXJlcy9leHBlY3RlZC9pbWFnZS1hY3R1YWwucG5n
JzogJ3dpbi1pbWFnZS1wbmcnLAorICAgICAgICB9LAorICAgIH0KKyAgICByZXR1cm4gemlwcGVy
X21vY2subWFrZV91bnppcHBlcih6aXBoYXNoZXMpCisKKwogY2xhc3MgVGVzdEdldEhvc3RQb3J0
T2JqZWN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgYXNzZXJ0X3Jlc3VsdChzZWxmLCBy
ZWxlYXNlX3ByZXNlbnQsIGRlYnVnX3ByZXNlbnQsIHZhbGlkX3BvcnRfb2JqKToKICAgICAgICAg
IyBUZXN0cyB3aGV0aGVyIHdlIGdldCBhIHZhbGlkIHBvcnQgb2JqZWN0IHJldHVybmVkIHdoZW4g
d2UgY2xhaW0KQEAgLTU5LDkgKzExNiw4IEBAIGNsYXNzIFRlc3RHZXRIb3N0UG9ydE9iamVjdCh1
bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHBvcnQuZ2V0ID0gZ2V0X21vY2tfZ2V0KHsnUmVs
ZWFzZSc6IHJlbGVhc2VfcHJlc2VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICdEZWJ1Zyc6IGRlYnVnX3ByZXNlbnR9KQogICAgICAgICBvcHRpb25zID0gbW9ja3Rvb2wuTW9j
a09wdGlvbnMoY29uZmlndXJhdGlvbj1Ob25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaHRtbF9kaXJlY3Rvcnk9Tm9uZSkKLSAgICAgICAgcG9ydF9vYmogPSByZWJh
c2VsaW5lX2Nocm9taXVtX3dlYmtpdF90ZXN0cy5nZXRfaG9zdF9wb3J0X29iamVjdCgKLSAgICAg
ICAgICAgIG9wdGlvbnMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBo
dG1sX2RpcmVjdG9yeT0nL3RtcCcpCisgICAgICAgIHBvcnRfb2JqID0gcmViYXNlbGluZV9jaHJv
bWl1bV93ZWJraXRfdGVzdHMuZ2V0X2hvc3RfcG9ydF9vYmplY3Qob3B0aW9ucykKICAgICAgICAg
aWYgdmFsaWRfcG9ydF9vYmo6CiAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHBvcnRf
b2JqLCBOb25lKQogICAgICAgICBlbHNlOgpAQCAtODMsMTggKzEzOSw3IEBAIGNsYXNzIFRlc3RH
ZXRIb3N0UG9ydE9iamVjdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHBvcnQuZ2V0ID0g
b2xkX2dldAogCiAKLWNsYXNzIFRlc3RSZWJhc2VsaW5lcih1bml0dGVzdC5UZXN0Q2FzZSk6Ci0g
ICAgZGVmIG1ha2VfcmViYXNlbGluZXIoc2VsZik6Ci0gICAgICAgIG9wdGlvbnMgPSBtb2NrdG9v
bC5Nb2NrT3B0aW9ucyhjb25maWd1cmF0aW9uPU5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBodG1sX2RpcmVjdG9yeT1Ob25lKQotICAgICAgICBmaWxlc3lzdGVt
ID0gcG9ydC51bml0X3Rlc3RfZmlsZXN5c3RlbSgpCi0gICAgICAgIGhvc3RfcG9ydF9vYmogPSBw
b3J0LmdldCgndGVzdCcsIG9wdGlvbnMsIGZpbGVzeXN0ZW09ZmlsZXN5c3RlbSkKLSAgICAgICAg
dGFyZ2V0X29wdGlvbnMgPSBvcHRpb25zCi0gICAgICAgIHRhcmdldF9wb3J0X29iaiA9IHBvcnQu
Z2V0KCd0ZXN0JywgdGFyZ2V0X29wdGlvbnMsIGZpbGVzeXN0ZW09ZmlsZXN5c3RlbSkKLSAgICAg
ICAgcGxhdGZvcm0gPSB0YXJnZXRfcG9ydF9vYmoudGVzdF9wbGF0Zm9ybV9uYW1lKCkKLSAgICAg
ICAgcmV0dXJuIHJlYmFzZWxpbmVfY2hyb21pdW1fd2Via2l0X3Rlc3RzLlJlYmFzZWxpbmVyKAot
ICAgICAgICAgICAgaG9zdF9wb3J0X29iaiwgdGFyZ2V0X3BvcnRfb2JqLCBwbGF0Zm9ybSwgb3B0
aW9ucykKLQorY2xhc3MgVGVzdE9wdGlvbnModW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0
ZXN0X3BhcnNlX29wdGlvbnMoc2VsZik6CiAgICAgICAgIChvcHRpb25zLCB0YXJnZXRfb3B0aW9u
cykgPSByZWJhc2VsaW5lX2Nocm9taXVtX3dlYmtpdF90ZXN0cy5wYXJzZV9vcHRpb25zKFtdKQog
ICAgICAgICBzZWxmLmFzc2VydFRydWUodGFyZ2V0X29wdGlvbnMuY2hyb21pdW0pCkBAIC0xMDQs
MzkgKzE0OSwxMDcgQEAgY2xhc3MgVGVzdFJlYmFzZWxpbmVyKHVuaXR0ZXN0LlRlc3RDYXNlKToK
ICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKHRhcmdldF9vcHRpb25zLCAnY2hyb21p
dW0nKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcHRpb25zLnRvbGVyYW5jZSwgMCkKIAor
CitjbGFzcyBUZXN0UmViYXNlbGluZXIodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBtYWtl
X3JlYmFzZWxpbmVyKHNlbGYsIGV4cGVjdGF0aW9ucyk6CisgICAgICAgIG9wdGlvbnMgPSB0ZXN0
X29wdGlvbnMoKQorICAgICAgICBob3N0X3BvcnRfb2JqLCBmaWxlc3lzdGVtID0gdGVzdF9ob3N0
X3BvcnRfYW5kX2ZpbGVzeXN0ZW0ob3B0aW9ucywgZXhwZWN0YXRpb25zKQorCisgICAgICAgIHRh
cmdldF9vcHRpb25zID0gb3B0aW9ucworICAgICAgICB0YXJnZXRfcG9ydF9vYmogPSBwb3J0Lmdl
dCgndGVzdCcsIHRhcmdldF9vcHRpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmaWxlc3lzdGVtPWZpbGVzeXN0ZW0pCisgICAgICAgIHRhcmdldF9wb3J0X29iai5fZXhw
ZWN0YXRpb25zID0gZXhwZWN0YXRpb25zCisgICAgICAgIHBsYXRmb3JtID0gdGFyZ2V0X3BvcnRf
b2JqLnRlc3RfcGxhdGZvcm1fbmFtZSgpCisKKyAgICAgICAgZmV0Y2hlciA9IHRlc3RfZmV0Y2hl
cihmaWxlc3lzdGVtKQorICAgICAgICB1bnppcHBlcl9jbHMgPSB0ZXN0X3VuemlwcGVyX2Nscygp
CisgICAgICAgIG1vY2tfc2NtID0gbW9ja3Rvb2wuTW9ja1NDTSgpCisgICAgICAgIHJlYmFzZWxp
bmVyID0gcmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRfdGVzdHMuUmViYXNlbGluZXIoaG9zdF9w
b3J0X29iaiwKKyAgICAgICAgICAgIHRhcmdldF9wb3J0X29iaiwgcGxhdGZvcm0sIG9wdGlvbnMs
IGZldGNoZXIsIHVuemlwcGVyX2NscywgbW9ja19zY20pCisgICAgICAgIHJldHVybiByZWJhc2Vs
aW5lciwgZmlsZXN5c3RlbQorCiAgICAgZGVmIHRlc3Rfbm9vcChzZWxmKToKICAgICAgICAgIyB0
aGlzIG1ldGhvZCB0ZXN0cyB0aGF0IHdhcyBjYW4gYXQgbGVhc3QgaW5zdGFudGlhdGUgYW4gb2Jq
ZWN0LCBldmVuCiAgICAgICAgICMgaWYgdGhlcmUgaXMgbm90aGluZyB0byBkby4KLSAgICAgICAg
cmViYXNlbGluZXIgPSBzZWxmLm1ha2VfcmViYXNlbGluZXIoKQotICAgICAgICBzZWxmLmFzc2Vy
dE5vdEVxdWFsKHJlYmFzZWxpbmVyLCBOb25lKQorICAgICAgICByZWJhc2VsaW5lciwgZmlsZXN5
c3RlbSA9IHNlbGYubWFrZV9yZWJhc2VsaW5lcigiIikKKyAgICAgICAgcmViYXNlbGluZXIucnVu
KEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihmaWxlc3lzdGVtLndyaXR0ZW5f
ZmlsZXMpLCAxKQorCisgICAgZGVmIHRlc3Rfb25lX3BsYXRmb3JtKHNlbGYpOgorICAgICAgICBy
ZWJhc2VsaW5lciwgZmlsZXN5c3RlbSA9IHNlbGYubWFrZV9yZWJhc2VsaW5lcigKKyAgICAgICAg
ICAgICJCVUdYIFJFQkFTRUxJTkUgTUFDIDogZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2UuaHRtbCA9
IElNQUdFIikKKyAgICAgICAgcmViYXNlbGluZXIucnVuKEZhbHNlKQorICAgICAgICAjIFdlIGV4
cGVjdCB0byBoYXZlIHdyaXR0ZW4gMTMgZmlsZXMgb3ZlciB0aGUgY291cnNlIG9mIHRoaXMgcmVi
YXNlbGluZToKKyAgICAgICAgIyAqKSAxIGZpbGUgaW4gL19faW1fdG1wIGZvciB0aGUgZG93bmxv
YWRlZCBtYWMgYXJjaGl2ZSwKKyAgICAgICAgIyAqKSAzIGZpbGVzIGluIC9fX2ltX3RtcCBmb3Ig
dGhlIGV4dHJhY3RlZCBhcmNoaXZlIG1lbWJlcnMKKyAgICAgICAgIyAqKSAzIG5ldyBiYXNlbGlu
ZXMgdW5kZXIgJy90ZXN0LmNoZWNrb3V0L0xheW91dFRlc3RzJworICAgICAgICAjICopIDEgdXBk
YXRlZCB0ZXN0X2V4cGVjdGF0aW9ucyBmaWxlCisgICAgICAgICMgKikgNCBmaWxlcyBpbiAvdG1w
IGZvciB0aGUgbmV3IGFuZCBvbGQgYmFzZWxpbmVzIGluIHRoZSByZXN1bHQgZmlsZQorICAgICAg
ICAjICopIDEgdGV4dCBkaWZmIGluIC90bXAgZm9yIHRoZSByZXN1bHQgZmlsZQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKGxlbihmaWxlc3lzdGVtLndyaXR0ZW5fZmlsZXMpLCAxMykKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlc3lzdGVtLmZpbGVzWycvdGVzdC5jaGVja291dC9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS90ZXN0L3Rlc3RfZXhwZWN0YXRpb25zLnR4dCddLCAnJykKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlc3lzdGVtLmZpbGVzWycvdGVzdC5jaGVja291dC9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS90ZXN0LW1hYy9mYWlsdXJlcy9leHBlY3RlZC9pbWFnZS1leHBlY3Rl
ZC5jaGVja3N1bSddLCAnbmV3LWltYWdlLWNoZWNrc3VtJykKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChmaWxlc3lzdGVtLmZpbGVzWycvdGVzdC5jaGVja291dC9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS90ZXN0LW1hYy9mYWlsdXJlcy9leHBlY3RlZC9pbWFnZS1leHBlY3RlZC5wbmcnXSwgJ25ldy1p
bWFnZS1wbmcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVzeXN0ZW0uZmlsZXNbJy90
ZXN0LmNoZWNrb3V0L0xheW91dFRlc3RzL3BsYXRmb3JtL3Rlc3QtbWFjL2ZhaWx1cmVzL2V4cGVj
dGVkL2ltYWdlLWV4cGVjdGVkLnR4dCddLCAnbmV3LWltYWdlLXR4dCcpCisKKyAgICBkZWYgdGVz
dF9hbGxfcGxhdGZvcm1zKHNlbGYpOgorICAgICAgICByZWJhc2VsaW5lciwgZmlsZXN5c3RlbSA9
IHNlbGYubWFrZV9yZWJhc2VsaW5lcigKKyAgICAgICAgICAgICJCVUdYIFJFQkFTRUxJTkUgOiBm
YWlsdXJlcy9leHBlY3RlZC9pbWFnZS5odG1sID0gSU1BR0UiKQorICAgICAgICByZWJhc2VsaW5l
ci5ydW4oRmFsc2UpCisgICAgICAgICMgU2VlIGNvbW1lbnQgaW4gdGVzdF9vbmVfcGxhdGZvcm0g
Zm9yIGFuIGV4cGxhbmF0aW9uIG9mIHRoZSAxMyB3cml0dGVuIHRlc3RzLgorICAgICAgICAjIE5v
dGUgdGhhdCBldmVuIHRob3VnaCB0aGUgcmViYXNlbGluZSBpcyBtYXJrZWQgZm9yIGFsbCBwbGF0
Zm9ybXMsIGVhY2gKKyAgICAgICAgIyByZWJhc2VsaW5lciBvbmx5IGV2ZXIgZG9lcyBvbmUuCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGZpbGVzeXN0ZW0ud3JpdHRlbl9maWxlcyksIDEz
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVzeXN0ZW0uZmlsZXNbJy90ZXN0LmNoZWNr
b3V0L0xheW91dFRlc3RzL3BsYXRmb3JtL3Rlc3QvdGVzdF9leHBlY3RhdGlvbnMudHh0J10sICdC
VUdYIFJFQkFTRUxJTkUgV0lOIDogZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2UuaHRtbCA9IElNQUdF
XG4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVzeXN0ZW0uZmlsZXNbJy90ZXN0LmNo
ZWNrb3V0L0xheW91dFRlc3RzL3BsYXRmb3JtL3Rlc3QtbWFjL2ZhaWx1cmVzL2V4cGVjdGVkL2lt
YWdlLWV4cGVjdGVkLmNoZWNrc3VtJ10sICduZXctaW1hZ2UtY2hlY2tzdW0nKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKGZpbGVzeXN0ZW0uZmlsZXNbJy90ZXN0LmNoZWNrb3V0L0xheW91dFRl
c3RzL3BsYXRmb3JtL3Rlc3QtbWFjL2ZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlLWV4cGVjdGVkLnBu
ZyddLCAnbmV3LWltYWdlLXBuZycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZXN5c3Rl
bS5maWxlc1snL3Rlc3QuY2hlY2tvdXQvTGF5b3V0VGVzdHMvcGxhdGZvcm0vdGVzdC1tYWMvZmFp
bHVyZXMvZXhwZWN0ZWQvaW1hZ2UtZXhwZWN0ZWQudHh0J10sICduZXctaW1hZ2UtdHh0JykKIAog
ICAgIGRlZiB0ZXN0X2RpZmZfYmFzZWxpbmVzX3R4dChzZWxmKToKLSAgICAgICAgcmViYXNlbGlu
ZXIgPSBzZWxmLm1ha2VfcmViYXNlbGluZXIoKQotICAgICAgICBvdXRwdXQgPSByZWJhc2VsaW5l
ci5fcG9ydC5leHBlY3RlZF90ZXh0KAotICAgICAgICAgICAgcmViYXNlbGluZXIuX3BvcnQuX2Zp
bGVzeXN0ZW0uam9pbihyZWJhc2VsaW5lci5fcG9ydC5sYXlvdXRfdGVzdHNfZGlyKCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYXNzZXMvdGV4dC5o
dG1sJykpCisgICAgICAgIHJlYmFzZWxpbmVyLCBmaWxlc3lzdGVtID0gc2VsZi5tYWtlX3JlYmFz
ZWxpbmVyKCIiKQorICAgICAgICBwb3J0ID0gcmViYXNlbGluZXIuX3BvcnQKKyAgICAgICAgb3V0
cHV0ID0gcG9ydC5leHBlY3RlZF90ZXh0KAorICAgICAgICAgICAgcG9ydC5fZmlsZXN5c3RlbS5q
b2luKHBvcnQubGF5b3V0X3Rlc3RzX2RpcigpLCAncGFzc2VzL3RleHQuaHRtbCcpKQogICAgICAg
ICBzZWxmLmFzc2VydEZhbHNlKHJlYmFzZWxpbmVyLl9kaWZmX2Jhc2VsaW5lcyhvdXRwdXQsIG91
dHB1dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaXNfaW1hZ2U9RmFsc2UpKQogCiAgICAgZGVmIHRlc3RfZGlmZl9iYXNlbGluZXNfcG5nKHNl
bGYpOgotICAgICAgICByZWJhc2VsaW5lciA9IHNlbGYubWFrZV9yZWJhc2VsaW5lcigpCi0gICAg
ICAgIGltYWdlID0gcmViYXNlbGluZXIuX3BvcnQuZXhwZWN0ZWRfaW1hZ2UoCi0gICAgICAgICAg
ICByZWJhc2VsaW5lci5fcG9ydC5fZmlsZXN5c3RlbS5qb2luKHJlYmFzZWxpbmVyLl9wb3J0Lmxh
eW91dF90ZXN0c19kaXIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJ3Bhc3Nlcy9pbWFnZS5odG1sJykpCisgICAgICAgIHJlYmFzZWxpbmVyLCBmaWxl
c3lzdGVtID0gc2VsZi5tYWtlX3JlYmFzZWxpbmVyKCcnKQorICAgICAgICBwb3J0ID0gcmViYXNl
bGluZXIuX3BvcnQKKyAgICAgICAgaW1hZ2UgPSBwb3J0LmV4cGVjdGVkX2ltYWdlKAorICAgICAg
ICAgICAgcG9ydC5fZmlsZXN5c3RlbS5qb2luKHBvcnQubGF5b3V0X3Rlc3RzX2RpcigpLCAncGFz
c2VzL2ltYWdlLmh0bWwnKSkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZWJhc2VsaW5lci5f
ZGlmZl9iYXNlbGluZXMoaW1hZ2UsIGltYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpc19pbWFnZT1UcnVlKSkKIAogCitjbGFzcyBUZXN0
UmVhbE1haW4odW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2FsbF9wbGF0Zm9ybXMo
c2VsZik6CisgICAgICAgIGV4cGVjdGF0aW9ucyA9ICJCVUdYIFJFQkFTRUxJTkUgOiBmYWlsdXJl
cy9leHBlY3RlZC9pbWFnZS5odG1sID0gSU1BR0UiCisKKyAgICAgICAgb3B0aW9ucyA9IHRlc3Rf
b3B0aW9ucygpCisKKyAgICAgICAgaG9zdF9wb3J0X29iaiwgZmlsZXN5c3RlbSA9IHRlc3RfaG9z
dF9wb3J0X2FuZF9maWxlc3lzdGVtKG9wdGlvbnMsIGV4cGVjdGF0aW9ucykKKyAgICAgICAgZmV0
Y2hlciA9IHRlc3RfZmV0Y2hlcihmaWxlc3lzdGVtKQorICAgICAgICB1bnppcHBlcl9jbHMgPSB0
ZXN0X3VuemlwcGVyX2NscygpCisgICAgICAgIG1vY2tfc2NtID0gbW9ja3Rvb2wuTW9ja1NDTSgp
CisgICAgICAgIG9jID0gb3V0cHV0Y2FwdHVyZS5PdXRwdXRDYXB0dXJlKCkKKyAgICAgICAgb2Mu
Y2FwdHVyZV9vdXRwdXQoKQorICAgICAgICByZWJhc2VsaW5lX2Nocm9taXVtX3dlYmtpdF90ZXN0
cy5yZWFsX21haW4ob3B0aW9ucywgb3B0aW9ucywgaG9zdF9wb3J0X29iaiwKKyAgICAgICAgICAg
IGhvc3RfcG9ydF9vYmosIGZldGNoZXIsIHVuemlwcGVyX2NscywgbW9ja19zY20pCisgICAgICAg
IG9jLnJlc3RvcmVfb3V0cHV0KCkKKworICAgICAgICAjIFdlIGV4cGVjdCB0byBoYXZlIHdyaXR0
ZW4gMjYgZmlsZXMgb3ZlciB0aGUgY291cnNlIG9mIHRoaXMgcmViYXNlbGluZToKKyAgICAgICAg
IyAyICogdGVzdF9hbGxfcGxhdGZvcm1zLCBhYm92ZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KGxlbihmaWxlc3lzdGVtLndyaXR0ZW5fZmlsZXMpLCAyNikKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChmaWxlc3lzdGVtLmZpbGVzWycvdGVzdC5jaGVja291dC9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS90ZXN0L3Rlc3RfZXhwZWN0YXRpb25zLnR4dCddLCAnJykKKworCiBjbGFzcyBUZXN0SHRtbEdl
bmVyYXRvcih1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIG1ha2VfZ2VuZXJhdG9yKHNlbGYs
IGZpbGVzLCB0ZXN0cyk6CiAgICAgICAgIG9wdGlvbnMgPSBtb2NrdG9vbC5Nb2NrT3B0aW9ucyhj
b25maWd1cmF0aW9uPU5vbmUsIGh0bWxfZGlyZWN0b3J5PScvdG1wJykKICAgICAgICAgaG9zdF9w
b3J0ID0gcG9ydC5nZXQoJ3Rlc3QnLCBvcHRpb25zLCBmaWxlc3lzdGVtPXBvcnQudW5pdF90ZXN0
X2ZpbGVzeXN0ZW0oZmlsZXMpKQotICAgICAgICBnZW5lcmF0b3IgPSByZWJhc2VsaW5lX2Nocm9t
aXVtX3dlYmtpdF90ZXN0cy5IdG1sR2VuZXJhdG9yKAotICAgICAgICAgICAgaG9zdF9wb3J0LAot
ICAgICAgICAgICAgdGFyZ2V0X3BvcnQ9Tm9uZSwKLSAgICAgICAgICAgIG9wdGlvbnM9b3B0aW9u
cywKLSAgICAgICAgICAgIHBsYXRmb3Jtcz1bJ21hYyddLAotICAgICAgICAgICAgcmViYXNlbGlu
aW5nX3Rlc3RzPXRlc3RzKQorICAgICAgICBnZW5lcmF0b3IgPSByZWJhc2VsaW5lX2Nocm9taXVt
X3dlYmtpdF90ZXN0cy5IdG1sR2VuZXJhdG9yKGhvc3RfcG9ydCwKKyAgICAgICAgICAgIHRhcmdl
dF9wb3J0PU5vbmUsIG9wdGlvbnM9b3B0aW9ucywgcGxhdGZvcm1zPVsnbWFjJ10sIHJlYmFzZWxp
bmluZ190ZXN0cz10ZXN0cykKICAgICAgICAgcmV0dXJuIGdlbmVyYXRvciwgaG9zdF9wb3J0CiAK
ICAgICBkZWYgdGVzdF9nZW5lcmF0ZV9iYXNlbGluZV9saW5rcyhzZWxmKToKZGlmZiAtLWdpdCBh
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9tb2NrdG9vbC5weSBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvdG9vbC9tb2NrdG9vbC5weQppbmRleCAzNjgwZDRjZWY4NGU2MTM3ZmRiYTkwNDZj
ZTJmODNlNDE4ZTAxZjQ3Li43MmJkMWVjMGYyZTM0ZTM1NGFhYzlhMjBmMDkxOTc0NGQ0NDY4NjRi
IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvbW9ja3Rvb2wucHkKKysr
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL21vY2t0b29sLnB5CkBAIC00NjQsNiArNDY0
LDEyIEBAIGNsYXNzIE1vY2tTQ00oTW9jayk6CiAgICAgICAgICMgb3MuZ2V0Y3dkKCkgY2FuJ3Qg
d29yayBoZXJlIGJlY2F1c2Ugb3RoZXIgcGFydHMgb2YgdGhlIGNvZGUgYXNzdW1lIHRoYXQgImNo
ZWNrb3V0X3Jvb3QiCiAgICAgICAgICMgd2lsbCBhY3R1YWxseSBiZSB0aGUgcm9vdC4gIFNpbmNl
IGdldGN3ZCgpIGlzIHdyb25nLCB1c2UgYSBnbG9iYWxseSBmYWtlIHJvb3QgZm9yIG5vdy4KICAg
ICAgICAgc2VsZi5jaGVja291dF9yb290ID0gc2VsZi5mYWtlX2NoZWNrb3V0X3Jvb3QKKyAgICAg
ICAgc2VsZi5hZGRlZF9wYXRocyA9IHNldCgpCisKKyAgICBkZWYgYWRkKHNlbGYsIGRlc3RpbmF0
aW9uX3BhdGgsIHJldHVybl9leGl0X2NvZGU9RmFsc2UpOgorICAgICAgICBzZWxmLmFkZGVkX3Bh
dGhzLmFkZChkZXN0aW5hdGlvbl9wYXRoKQorICAgICAgICBpZiByZXR1cm5fZXhpdF9jb2RlOgor
ICAgICAgICAgICAgcmV0dXJuIDAKIAogICAgIGRlZiBjaGFuZ2VkX2ZpbGVzKHNlbGYsIGdpdF9j
b21taXQ9Tm9uZSk6CiAgICAgICAgIHJldHVybiBbIk1vY2tGaWxlMSJdCkBAIC00ODMsMTcgKzQ4
OSwxOSBAQCBjbGFzcyBNb2NrU0NNKE1vY2spOgogICAgICAgICAgICAgICAgICJodHRwczovL2J1
Z3MuZXhhbXBsZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1XG4iKQogICAgICAgICByYWlzZSBFeGNl
cHRpb24oIkJvZ3VzIGNvbW1pdF9pZCBpbiBjb21taXRfbWVzc2FnZV9mb3JfbG9jYWxfY29tbWl0
LiIpCiAKKyAgICBkZWYgZGlmZl9mb3JfZmlsZShzZWxmLCBwYXRoLCBsb2c9Tm9uZSk6CisgICAg
ICAgIHJldHVybiBwYXRoICsgJy1kaWZmJworCiAgICAgZGVmIGRpZmZfZm9yX3JldmlzaW9uKHNl
bGYsIHJldmlzaW9uKToKICAgICAgICAgcmV0dXJuICJEaWZmRm9yUmV2aXNpb24lc1xuIiBcCiAg
ICAgICAgICAgICAgICAiaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIz
NDUiICUgcmV2aXNpb24KIAorICAgIGRlZiBzaG93X2hlYWQoc2VsZiwgcGF0aCk6CisgICAgICAg
IHJldHVybiBwYXRoCisKICAgICBkZWYgc3ZuX3JldmlzaW9uX2Zyb21fY29tbWl0X3RleHQoc2Vs
ZiwgY29tbWl0X3RleHQpOgogICAgICAgICByZXR1cm4gIjQ5ODI0IgogCi0gICAgZGVmIGFkZChz
ZWxmLCBkZXN0aW5hdGlvbl9wYXRoLCByZXR1cm5fZXhpdF9jb2RlPUZhbHNlKToKLSAgICAgICAg
aWYgcmV0dXJuX2V4aXRfY29kZToKLSAgICAgICAgICAgIHJldHVybiAwCi0KIAogY2xhc3MgTW9j
a0NoZWNrb3V0KG9iamVjdCk6CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79987</attachid>
            <date>2011-01-24 16:34:56 -0800</date>
            <delta_ts>2011-01-28 13:20:02 -0800</delta_ts>
            <desc>hand-test non-mocked code paths, fix a few bugs</desc>
            <filename>bug-53040-20110124163455.patch</filename>
            <type>text/plain</type>
            <size>32244</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA5ODAy
YzZiOTM1YWUyMTY1MDViZTk2Njg4MmNjYTVhZDIwZTliNjNhLi42MzNkODA0ZjU3NWE4ODJlYmM2
MTVhMTI1YzExYmZiZWExOWQyMjA2IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIv
VG9vbHMvQ2hhbmdlTG9nCkBAIC0yLDYgKzIsMjUgQEAKIAogICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KIAorICAgICAgICBBZGQgbW9yZSB1bml0IHRlc3RzIGZvciByZWJhc2Vs
aW5lLWNocm9taXVtLXdlYmtpdC10ZXN0cy4gVGhpcworICAgICAgICBjaGFuZ2UgaW52b2x2ZXMg
cmVzdHJ1Y3R1cmluZyBhIGJ1bmNoIG9mIHItYy13LXQgY29kZSB0byBtYWtlIGl0CisgICAgICAg
IG1vcmUgdGVzdGFibGUgYXMgd2VsbC4gV2UgYWxzbyBhZGQgd3JhcHBlciBjbGFzc2VzIGZvciBo
YW5kbGluZworICAgICAgICB6aXAgZmlsZXMgYW5kIGZldGNoaW5nIFVSTHMuCisKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUzMDQwCisKKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9mZXRjaGVyLnB5OgorICAgICAgICAqIFNjcmlwdHMv
d2Via2l0cHkvY29tbW9uL2ZldGNoZXJfbW9jay5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L2NvbW1vbi96aXBwZXIucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24v
emlwcGVyX21vY2sucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRfdGVzdHMucHk6CisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRfdGVzdHNfdW5p
dHRlc3QucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL21vY2t0b29sLnB5Ogor
CisyMDExLTAxLTI0ICBEaXJrIFByYW5rZSAgPGRwcmFua2VAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCiAgICAgICAgIE1pbm9yIGJ1ZyBmaXhl
cyBhbmQgY2xlYW51cCBmb3IgZmlsZXN5c3RlbSB3cmFwcGVycywgcG9ydC8qIHRlc3QKICAgICAg
ICAgY2xhc3NlcywgdGVzdF9leHBlY3RhdGlvbnMucHkuIFRoaXMgY2hhbmdlIGFkZHMgInRlc3Qt
d2luIiBhbmQKICAgICAgICAgInRlc3QtbWFjIiB2YXJpYW50cyB0byB0aGUgdGVzdCBwb3J0IHNv
IHRoYXQgd2UgY2FuIGJldHRlciB0ZXN0CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3JlYmFz
ZWxpbmUtY2hyb21pdW0td2Via2l0LXRlc3RzIGIvVG9vbHMvU2NyaXB0cy9yZWJhc2VsaW5lLWNo
cm9taXVtLXdlYmtpdC10ZXN0cwppbmRleCA4ZDE0Yjg2NWQyZjI5NDBmOWMyNzI3ZTYwMmNmYWQ1
Yjc2NzZkYjQyLi44MDZjYTE3OGViYmJhZTllOTUyYzc4Y2M0MzdhY2QxNGI4ZmJhMmY3IDEwMDc1
NQotLS0gYS9Ub29scy9TY3JpcHRzL3JlYmFzZWxpbmUtY2hyb21pdW0td2Via2l0LXRlc3RzCisr
KyBiL1Rvb2xzL1NjcmlwdHMvcmViYXNlbGluZS1jaHJvbWl1bS13ZWJraXQtdGVzdHMKQEAgLTQx
LDQgKzQxLDQgQEAgc3lzLnBhdGguYXBwZW5kKG9zLnBhdGguam9pbih3ZWJraXRweV9kaXJlY3Rv
cnksICJ0aGlyZHBhcnR5IikpCiBpbXBvcnQgcmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRfdGVz
dHMKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICByZWJhc2VsaW5lX2Nocm9taXVt
X3dlYmtpdF90ZXN0cy5tYWluKCkKKyAgICByZWJhc2VsaW5lX2Nocm9taXVtX3dlYmtpdF90ZXN0
cy5tYWluKHN5cy5hcmd2WzE6XSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL2ZldGNoZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9mZXRjaGVy
LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjViZDcwYWU0MzI3ZTgyMTkzMDE2ZDg3MTNlZjMwZjg5MTJmYzcwYjEK
LS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9mZXRjaGVy
LnB5CkBAIC0wLDAgKzEsNTYgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1l
dDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMg
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiJXcmFwcGVyIG1vZHVs
ZSBmb3IgZmV0Y2hpbmcgVVJMcy4iIiIKKworaW1wb3J0IHVybGxpYgorCisKK2NsYXNzIFVybEZl
dGNoZXIob2JqZWN0KToKKyAgICAiIiJDbGFzcyB3aXRoIHJlc3RyaWN0ZWQgaW50ZXJmYWNlIHRv
IGZldGNoIFVSTHMgKG1ha2VzIHRlc3RpbmcgZWFzaWVyKSIiIgorICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBmaWxlc3lzdGVtKToKKyAgICAgICAgc2VsZi5fZmlsZXN5c3RlbSA9IGZpbGVzeXN0ZW0K
KworICAgIGRlZiBmZXRjaChzZWxmLCB1cmwpOgorICAgICAgICAiIiJGZXRjaGVzIHRoZSBjb250
ZW50cyBvZiB0aGUgVVJMIGFzIGEgc3RyaW5nLiIiIgorICAgICAgICBmID0gdXJsbGliLnVybG9w
ZW4odXJsKQorICAgICAgICBjb250ZW50ID0gZi5yZWFkKCkKKyAgICAgICAgZi5jbG9zZSgpCisg
ICAgICAgIHJldHVybiBjb250ZW50CisKKyAgICBkZWYgZmV0Y2hfaW50b19maWxlKHNlbGYsIHVy
bCk6CisgICAgICAgICIiIkZldGNoZXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBVUkwgaW50byBhIHRl
bXBvcmFyeSBmaWxlIGFuZCByZXR1cm4gdGhlIGZpbGVuYW1lLgorCisgICAgICAgIFRoaXMgaXMg
dGhlIGVxdWl2YWxlbnQgb2YgdXJsbGliLnJldHJpZXZlKCkgZXhjZXB0IHRoYXQgd2UgZG9uJ3Qg
cmV0dXJuIGFueSBoZWFkZXJzLgorICAgICAgICAiIiIKKyAgICAgICAgZiwgZm4gPSBzZWxmLl9m
aWxlc3lzdGVtLm9wZW5fYmluYXJ5X3RlbXBmaWxlKCctZmV0Y2hlZCcpCisgICAgICAgIGNvbnRl
bnRzID0gc2VsZi5mZXRjaCh1cmwpCisgICAgICAgIGYud3JpdGUoY29udGVudHMpCisgICAgICAg
IGYuY2xvc2UoKQorICAgICAgICB1cmxsaWIudXJscmV0cmlldmUodXJsLCBmbikKKyAgICAgICAg
cmV0dXJuIGZuCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9mZXRj
aGVyX21vY2sucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9mZXRjaGVyX21vY2su
cHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZThhNzUzMjA4NDkyNWRiMDI1OTliZWY1NTZkNmUzZWZiYjcxZTQ0Zgot
LS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2ZldGNoZXJf
bW9jay5weQpAQCAtMCwwICsxLDQ2IEBACisjIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
IyBtZXQ6CisjCisjICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
IyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCitkZWYgbWFrZV9mZXRj
aGVyX2Nscyh1cmxzKToKKyAgICAiIiJVcmxGZXRjaGVyIGZhY3Rvcnkgcm91dGluZSB0aGF0IHNp
bXVsYXRlcyBuZXR3b3JrIGFjY2VzcworICAgIHVzaW5nIGEgZGljdCBvZiBVUkxzIC0+IGNvbnRl
bnRzLiIiIgorICAgIGNsYXNzIE1vY2tGZXRjaGVyKG9iamVjdCk6CisgICAgICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBmaWxlc3lzdGVtKToKKyAgICAgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0gPSBm
aWxlc3lzdGVtCisKKyAgICAgICAgZGVmIGZldGNoKHNlbGYsIHVybCk6CisgICAgICAgICAgICBy
ZXR1cm4gdXJsc1t1cmxdCisKKyAgICAgICAgZGVmIGZldGNoX2ludG9fZmlsZShzZWxmLCB1cmwp
OgorICAgICAgICAgICAgZiwgZm4gPSBzZWxmLl9maWxlc3lzdGVtLm9wZW5fYmluYXJ5X3RlbXBm
aWxlKCdtb2NrZmV0Y2hlcicpCisgICAgICAgICAgICBmLndyaXRlKHNlbGYuZmV0Y2godXJsKSkK
KyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgcmV0dXJuIGZuCisKKyAgICByZXR1
cm4gTW9ja0ZldGNoZXIKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9u
L3ppcHBlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3ppcHBlci5weQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5lZDY4OTU3MmNjMWUwNGJhNjg0MzM2ZjlkZDQ4OWRmZjMxZDQ4ZTM4Ci0tLSAvZGV2
L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vemlwcGVyLnB5CkBAIC0w
LDAgKzEsNTEgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMg
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBk
aXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisj
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisj
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiJXcmFwcGVyIG1vZHVsZSBmb3IgaGFu
ZGxpbmcgemlwZmlsZXMgKG1ha2VzIHRlc3RpbmcgZWFzaWVyKS4iIiIKKworaW1wb3J0IHppcGZp
bGUKKworCitjbGFzcyBVblppcHBlcihvYmplY3QpOgorICAgICIiIlppcC1maWxlIGhhbmRsaW5n
IGNsYXNzIHdpdGggYSByZXN0cmljdGVkIGludGVyZmFjZSAobWFrZXMgdGVzdGluZyBlYXNpZXIp
LiIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoKToKKyAgICAgICAgc2VsZi5femlwZmls
ZSA9IHppcGZpbGUuWmlwRmlsZShwYXRoLCAncicpCisgICAgICAgIHNlbGYuX2Nsb3NlZCA9IEZh
bHNlCisKKyAgICBkZWYgbmFtZWxpc3Qoc2VsZik6CisgICAgICAgICIiIlJldHVybnMgdGhlIGxp
c3Qgb2YgbWVtYmVycyBvZiBhbiBhcmNoaXZlLiIiIgorICAgICAgICBhc3NlcnQgbm90IHNlbGYu
X2Nsb3NlZAorICAgICAgICByZXR1cm4gc2VsZi5femlwZmlsZS5uYW1lbGlzdCgpCisKKyAgICBk
ZWYgcmVhZChzZWxmLCBtZW1iZXIpOgorICAgICAgICAiIiJFeHRyYWN0cyB0aGUgbmFtZWQgbWVt
YmVyIGFuZCByZXR1cm5zIGl0cyBjb250ZW50cyBhcyBhIHN0cmluZy4iIiIKKyAgICAgICAgYXNz
ZXJ0IG5vdCBzZWxmLl9jbG9zZWQKKyAgICAgICAgcmV0dXJuIHNlbGYuX3ppcGZpbGUucmVhZCht
ZW1iZXIpCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIHNlbGYuY2xvc2VkID0gVHJ1
ZQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vemlwcGVyX21vY2su
cHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi96aXBwZXJfbW9jay5weQpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4yOTQ1ZmQ2ZTc1OTRmOGFjNzU3MDA3MDQxYzQ4NGQ5ZTg1YjBjMjAwCi0tLSAvZGV2L251
bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vemlwcGVyX21vY2sucHkKQEAg
LTAsMCArMSw0NyBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIwor
IyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBk
aXN0cmlidXRpb24uCisjICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworZGVmIG1ha2VfdW56aXBwZXIoemlwaGFz
aGVzKToKKyAgICAiIiJVblppcHBlciBmYWN0b3J5IHJvdXRpbmUgdGhhdCBsb29rcyB1cCB6aXBm
aWxlcyBpbiBhIGRpY3Q7CisgICAgZWFjaCB6aXBmaWxlIHNob3VsZCBhbHNvIGJlIGEgZGljdCBv
ZiBtZW1iZXIgbmFtZXMgLT4gY29udGVudHMuIiIiCisgICAgY2xhc3MgTW9ja1VuWmlwcGVyKG9i
amVjdCk6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoKToKKyAgICAgICAgICAgIHNl
bGYuX3BhdGggPSBwYXRoCisgICAgICAgICAgICBzZWxmLl96aXBoYXNoID0gemlwaGFzaGVzW3Bh
dGhdCisKKyAgICAgICAgZGVmIG5hbWVsaXN0KHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIHNl
bGYuX3ppcGhhc2gua2V5cygpCisKKyAgICAgICAgZGVmIHJlYWQoc2VsZiwgbWVtYmVyKToKKyAg
ICAgICAgICAgIHJldHVybiBzZWxmLl96aXBoYXNoW21lbWJlcl0KKworICAgICAgICBkZWYgY2xv
c2Uoc2VsZik6CisgICAgICAgICAgICBwYXNzCisKKyAgICByZXR1cm4gTW9ja1VuWmlwcGVyCmRp
ZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9yZWJhc2VsaW5l
X2Nocm9taXVtX3dlYmtpdF90ZXN0cy5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3JlYmFzZWxpbmVfY2hyb21pdW1fd2Via2l0X3Rlc3RzLnB5CmluZGV4IGM4NTIxODZm
YzhmMTM4YWE1ZTNkYmI2MDVhYjQzNmI4NzE2YTk4YzkuLjc4ZGY1NzlhYmQ4ZDNmZWJlNzE3ZjU5
MTFhZTY2OWNjOTkxY2YyNmQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3JlYmFzZWxpbmVfY2hyb21pdW1fd2Via2l0X3Rlc3RzLnB5CisrKyBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3JlYmFzZWxpbmVfY2hyb21pdW1fd2Via2l0
X3Rlc3RzLnB5CkBAIC00NywxMCArNDcsMTAgQEAgaW1wb3J0IG9wdHBhcnNlCiBpbXBvcnQgcmUK
IGltcG9ydCBzeXMKIGltcG9ydCB0aW1lCi1pbXBvcnQgdXJsbGliCi1pbXBvcnQgemlwZmlsZQog
CiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5jaGVja291dCBpbXBvcnQgc2NtCitmcm9tIHdlYmtpdHB5
LmNvbW1vbiBpbXBvcnQgemlwcGVyCitmcm9tIHdlYmtpdHB5LmNvbW1vbiBpbXBvcnQgZmV0Y2hl
cgogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGltcG9ydCBwYXRoCiBmcm9tIHdlYmtpdHB5
LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZlIGltcG9ydCBTY3JpcHRFcnJvcgogCkBAIC0xNDIsNyAr
MTQyLDggQEAgY2xhc3MgUmViYXNlbGluZXIob2JqZWN0KToKIAogICAgIFJFVklTSU9OX1JFR0VY
ID0gcic8YSBocmVmPVwiKFxkKykvXCI+JwogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHJ1bm5p
bmdfcG9ydCwgdGFyZ2V0X3BvcnQsIHBsYXRmb3JtLCBvcHRpb25zKToKKyAgICBkZWYgX19pbml0
X18oc2VsZiwgcnVubmluZ19wb3J0LCB0YXJnZXRfcG9ydCwgcGxhdGZvcm0sIG9wdGlvbnMsCisg
ICAgICAgICAgICAgICAgIHVybF9mZXRjaGVyLCB1bnppcHBlcl9jbHMsIHNjbSk6CiAgICAgICAg
ICIiIgogICAgICAgICBBcmdzOgogICAgICAgICAgICAgcnVubmluZ19wb3J0OiB0aGUgUG9ydCB0
aGUgc2NyaXB0IGlzIHJ1bm5pbmcgb24uCkBAIC0xNTAsMTYgKzE1MSwyMyBAQCBjbGFzcyBSZWJh
c2VsaW5lcihvYmplY3QpOgogICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRp
b24gbGlrZSB0aGUgdGVzdF9leHBlY3RhdGlvbnMudHh0CiAgICAgICAgICAgICAgICAgZmlsZSBs
b2NhdGlvbiBhbmQgdGhlIGxpc3Qgb2YgdGVzdCBwbGF0Zm9ybXMuCiAgICAgICAgICAgICBwbGF0
Zm9ybTogdGhlIHRlc3QgcGxhdGZvcm0gdG8gcmViYXNlbGluZQotICAgICAgICAgICAgb3B0aW9u
czogdGhlIGNvbW1hbmQtbGluZSBvcHRpb25zIG9iamVjdC4iIiIKKyAgICAgICAgICAgIG9wdGlv
bnM6IHRoZSBjb21tYW5kLWxpbmUgb3B0aW9ucyBvYmplY3QuCisgICAgICAgICAgICB1cmxfZmV0
Y2hlcjogYW4gb2JqZWN0IHVzZWQgdG8gZmV0Y2ggdGhlIGNvbnRlbnRzIG9mIFVSTHMuCisgICAg
ICAgICAgICB1bnppcHBlcl9jbHM6IGNsYXNzIG9iamVjdCB1c2VkIHRvIGNyZWF0ZSB6aXBmaWxl
IG9iamVjdHMuCisgICAgICAgICAgICBzY206IHNjbSBvYmplY3QgZm9yIGFkZGluZyBuZXcgYmFz
ZWxpbmVzCisgICAgICAgICIiIgogICAgICAgICBzZWxmLl9wbGF0Zm9ybSA9IHBsYXRmb3JtCiAg
ICAgICAgIHNlbGYuX29wdGlvbnMgPSBvcHRpb25zCiAgICAgICAgIHNlbGYuX3BvcnQgPSBydW5u
aW5nX3BvcnQKICAgICAgICAgc2VsZi5fZmlsZXN5c3RlbSA9IHJ1bm5pbmdfcG9ydC5fZmlsZXN5
c3RlbQogICAgICAgICBzZWxmLl90YXJnZXRfcG9ydCA9IHRhcmdldF9wb3J0CiAgICAgICAgIHNl
bGYuX3JlYmFzZWxpbmVfcG9ydCA9IHBvcnQuZ2V0KAotICAgICAgICAgICAgc2VsZi5fdGFyZ2V0
X3BvcnQudGVzdF9wbGF0Zm9ybV9uYW1lX3RvX25hbWUocGxhdGZvcm0pLCBvcHRpb25zKQorICAg
ICAgICAgICAgc2VsZi5fdGFyZ2V0X3BvcnQudGVzdF9wbGF0Zm9ybV9uYW1lX3RvX25hbWUocGxh
dGZvcm0pLCBvcHRpb25zLAorICAgICAgICAgICAgZmlsZXN5c3RlbT1zZWxmLl9maWxlc3lzdGVt
KQogICAgICAgICBzZWxmLl9yZWJhc2VsaW5pbmdfdGVzdHMgPSBbXQogICAgICAgICBzZWxmLl9y
ZWJhc2VsaW5lZF90ZXN0cyA9IFtdCisgICAgICAgIHNlbGYuX3VybF9mZXRjaGVyID0gdXJsX2Zl
dGNoZXIKKyAgICAgICAgc2VsZi5fdW56aXBwZXJfY2xzID0gdW56aXBwZXJfY2xzCiAKICAgICAg
ICAgIyBDcmVhdGUgdGVzdHMgYW5kIGV4cGVjdGF0aW9ucyBoZWxwZXIgd2hpY2ggaXMgdXNlZCB0
bzoKICAgICAgICAgIyAgIC0uIGNvbXBpbGUgbGlzdCBvZiB0ZXN0cyB0aGF0IG5lZWQgcmViYXNl
bGluaW5nLgpAQCAtMTczLDcgKzE4MSw3IEBAIGNsYXNzIFJlYmFzZWxpbmVyKG9iamVjdCk6CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BsYXRm
b3JtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGYWxz
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmFsc2Up
Ci0gICAgICAgIHNlbGYuX3NjbSA9IHNjbS5kZWZhdWx0X3NjbSgpCisgICAgICAgIHNlbGYuX3Nj
bSA9IHNjbQogCiAgICAgZGVmIHJ1bihzZWxmLCBiYWNrdXApOgogICAgICAgICAiIiJSdW4gcmVi
YXNlbGluZSBwcm9jZXNzLiIiIgpAQCAtMjU0LDkgKzI2Miw3IEBAIGNsYXNzIFJlYmFzZWxpbmVy
KG9iamVjdCk6CiAKICAgICAgICAgX2xvZy5kZWJ1ZygnVXJsIHRvIHJldHJpZXZlIHJldmlzaW9u
OiAiJXMiJywgdXJsKQogCi0gICAgICAgIGYgPSB1cmxsaWIudXJsb3Blbih1cmwpCi0gICAgICAg
IGNvbnRlbnQgPSBmLnJlYWQoKQotICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgY29udGVudCA9
IHNlbGYuX3VybF9mZXRjaGVyLmZldGNoKHVybCkKIAogICAgICAgICByZXZpc2lvbnMgPSByZS5m
aW5kYWxsKHNlbGYuUkVWSVNJT05fUkVHRVgsIGNvbnRlbnQpCiAgICAgICAgIGlmIG5vdCByZXZp
c2lvbnM6CkBAIC0zMjQsNyArMzMwLDcgQEAgY2xhc3MgUmViYXNlbGluZXIob2JqZWN0KToKICAg
ICAgICAgaWYgdXJsIGlzIE5vbmU6CiAgICAgICAgICAgICByZXR1cm4gTm9uZQogCi0gICAgICAg
IGZuID0gdXJsbGliLnVybHJldHJpZXZlKHVybClbMF0KKyAgICAgICAgZm4gPSBzZWxmLl91cmxf
ZmV0Y2hlci5mZXRjaF9pbnRvX2ZpbGUodXJsKQogICAgICAgICBfbG9nLmluZm8oJ0FyY2hpdmUg
ZG93bmxvYWRlZCBhbmQgc2F2ZWQgdG8gZmlsZTogIiVzIicsIGZuKQogICAgICAgICByZXR1cm4g
Zm4KIApAQCAtMzM5LDcgKzM0NSw3IEBAIGNsYXNzIFJlYmFzZWxpbmVyKG9iamVjdCk6CiAgICAg
ICAgICAgTm9uZSBvbiBmYWlsdXJlLgogICAgICAgICAiIiIKIAotICAgICAgICB6aXBfZmlsZSA9
IHppcGZpbGUuWmlwRmlsZShhcmNoaXZlX2ZpbGUsICdyJykKKyAgICAgICAgemlwX2ZpbGUgPSBz
ZWxmLl91bnppcHBlcl9jbHMoYXJjaGl2ZV9maWxlKQogICAgICAgICB6aXBfbmFtZWxpc3QgPSB6
aXBfZmlsZS5uYW1lbGlzdCgpCiAKICAgICAgICAgX2xvZy5kZWJ1ZygnemlwIGZpbGUgbmFtZWxp
c3Q6JykKQEAgLTg1NywxOCArODYzLDkgQEAgZGVmIHBhcnNlX29wdGlvbnMoYXJncyk6CiAgICAg
cmV0dXJuIChvcHRpb25zLCB0YXJnZXRfb3B0aW9ucykKIAogCi1kZWYgbWFpbigpOgotICAgICIi
Ik1haW4gZnVuY3Rpb24gdG8gcHJvZHVjZSBuZXcgYmFzZWxpbmVzLiIiIgotCi0gICAgKG9wdGlv
bnMsIHRhcmdldF9vcHRpb25zKSA9IHBhcnNlX29wdGlvbnMoc3lzLmFyZ3ZbMTpdKQotCi0gICAg
IyBXZSBuZWVkIHRvIGNyZWF0ZSB0aHJlZSBkaWZmZXJlbnQgUG9ydCBvYmplY3RzIG92ZXIgdGhl
IGxpZmUgb2YgdGhpcwotICAgICMgc2NyaXB0LiB8dGFyZ2V0X3BvcnRfb2JqfCBpcyB1c2VkIHRv
IGRldGVybWluZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uOgotICAgICMgbG9jYXRpb24gb2Yg
dGhlIGV4cGVjdGF0aW9ucyBmaWxlLCBuYW1lcyBvZiBwb3J0cyB0byByZWJhc2VsaW5lLCBldGMu
Ci0gICAgIyB8cG9ydF9vYmp8IGlzIHVzZWQgZm9yIHJ1bnRpbWUgZnVuY3Rpb25hbGl0eSBsaWtl
IGFjdHVhbGx5IGRpZmZpbmcKLSAgICAjIFRoZW4gd2UgY3JlYXRlIGEgcmViYXNlbGluaW5nIHBv
cnQgdG8gYWN0dWFsIGZpbmQgYW5kIG1hbmFnZSB0aGUKLSAgICAjIGJhc2VsaW5lcy4KLSAgICB0
YXJnZXRfcG9ydF9vYmogPSBwb3J0LmdldChOb25lLCB0YXJnZXRfb3B0aW9ucykKK2RlZiBtYWlu
KGFyZ3MpOgorICAgICIiIkJvb3RzdHJhcCBmdW5jdGlvbiB0aGF0IHNldHMgdXAgdGhlIG9iamVj
dCByZWZlcmVuY2VzIHdlIG5lZWQgYW5kIGNhbGxzIHJlYWxfbWFpbigpLiIiIgorICAgIG9wdGlv
bnMsIHRhcmdldF9vcHRpb25zID0gcGFyc2Vfb3B0aW9ucyhhcmdzKQogCiAgICAgIyBTZXQgdXAg
b3VyIGxvZ2dpbmcgZm9ybWF0LgogICAgIGxvZ19sZXZlbCA9IGxvZ2dpbmcuSU5GTwpAQCAtODc5
LDIwICs4NzYsMzcgQEAgZGVmIG1haW4oKToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJyUobGV2ZWxuYW1lKXMgJShtZXNzYWdlKXMnKSwKICAgICAgICAgICAgICAgICAgICAgICAg
IGRhdGVmbXQ9JyV5JW0lZCAlSDolTTolUycpCiAKKyAgICB0YXJnZXRfcG9ydF9vYmogPSBwb3J0
LmdldChOb25lLCB0YXJnZXRfb3B0aW9ucykKICAgICBob3N0X3BvcnRfb2JqID0gZ2V0X2hvc3Rf
cG9ydF9vYmplY3Qob3B0aW9ucykKLSAgICBpZiBub3QgaG9zdF9wb3J0X29iajoKLSAgICAgICAg
c3lzLmV4aXQoMSkKKyAgICBpZiBub3QgaG9zdF9wb3J0X29iaiBvciBub3QgdGFyZ2V0X3BvcnRf
b2JqOgorICAgICAgICByZXR1cm4gMQogCisgICAgdXJsX2ZldGNoZXIgPSBmZXRjaGVyLlVybEZl
dGNoZXIoaG9zdF9wb3J0X29iai5fZmlsZXN5c3RlbSkKKyAgICBzY21fb2JqID0gc2NtLmRlZmF1
bHRfc2NtKCkKKworICAgIHJldHVybiByZWFsX21haW4ob3B0aW9ucywgdGFyZ2V0X29wdGlvbnMs
IGhvc3RfcG9ydF9vYmosIHRhcmdldF9wb3J0X29iaiwgdXJsX2ZldGNoZXIsCisgICAgICAgICAg
ICAgICAgICAgICB6aXBwZXIuVW5aaXBwZXIsIHNjbV9vYmopCisKKworZGVmIHJlYWxfbWFpbihv
cHRpb25zLCB0YXJnZXRfb3B0aW9ucywgaG9zdF9wb3J0X29iaiwgdGFyZ2V0X3BvcnRfb2JqLCB1
cmxfZmV0Y2hlciwKKyAgICAgICAgICAgICAgdW56aXBwZXJfY2xzLCBzY21fb2JqKToKKyAgICAi
IiJNYWluIGZ1bmN0aW9uIHRvIHByb2R1Y2UgbmV3IGJhc2VsaW5lcy4iIiIKKyAgICAjIFdlIG5l
ZWQgdG8gY3JlYXRlIHRocmVlIGRpZmZlcmVudCBQb3J0IG9iamVjdHMgb3ZlciB0aGUgbGlmZSBv
ZiB0aGlzCisgICAgIyBzY3JpcHQuIHx0YXJnZXRfcG9ydF9vYmp8IGlzIHVzZWQgdG8gZGV0ZXJt
aW5lIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb246CisgICAgIyBsb2NhdGlvbiBvZiB0aGUgZXhw
ZWN0YXRpb25zIGZpbGUsIG5hbWVzIG9mIHBvcnRzIHRvIHJlYmFzZWxpbmUsIGV0Yy4KKyAgICAj
IHxwb3J0X29ianwgaXMgdXNlZCBmb3IgcnVudGltZSBmdW5jdGlvbmFsaXR5IGxpa2UgYWN0dWFs
bHkgZGlmZmluZworICAgICMgVGhlbiB3ZSBjcmVhdGUgYSByZWJhc2VsaW5pbmcgcG9ydCB0byBh
Y3R1YWwgZmluZCBhbmQgbWFuYWdlIHRoZQorICAgICMgYmFzZWxpbmVzLgogICAgICMgVmVyaWZ5
ICdwbGF0Zm9ybXMnIG9wdGlvbiBpcyB2YWxpZC4KICAgICBpZiBub3Qgb3B0aW9ucy5wbGF0Zm9y
bXM6CiAgICAgICAgIF9sb2cuZXJyb3IoJ0ludmFsaWQgInBsYXRmb3JtcyIgb3B0aW9uLiAtLXBs
YXRmb3JtcyBtdXN0IGJlICcKICAgICAgICAgICAgICAgICAgICAnc3BlY2lmaWVkIGluIG9yZGVy
IHRvIHJlYmFzZWxpbmUuJykKLSAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAgcmV0dXJuIDEK
ICAgICBwbGF0Zm9ybXMgPSBbcC5zdHJpcCgpLmxvd2VyKCkgZm9yIHAgaW4gb3B0aW9ucy5wbGF0
Zm9ybXMuc3BsaXQoJywnKV0KICAgICBmb3IgcGxhdGZvcm0gaW4gcGxhdGZvcm1zOgogICAgICAg
ICBpZiBub3QgcGxhdGZvcm0gaW4gUkVCQVNFTElORV9QTEFURk9STV9PUkRFUjoKICAgICAgICAg
ICAgIF9sb2cuZXJyb3IoJ0ludmFsaWQgcGxhdGZvcm06ICIlcyInICUgKHBsYXRmb3JtKSkKLSAg
ICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgICAgICByZXR1cm4gMQogCiAgICAgIyBBZGp1
c3QgdGhlIHBsYXRmb3JtIG9yZGVyIHNvIHJlYmFzZWxpbmUgdG9vbCBpcyBydW5uaW5nIGF0IHRo
ZSBvcmRlciBvZgogICAgICMgJ21hYycsICd3aW4nIGFuZCAnbGludXgnLiBUaGlzIGlzIGluIHNh
bWUgb3JkZXIgd2l0aCBsYXlvdXQgdGVzdCBiYXNlbGluZQpAQCAtOTA5LDcgKzkyMyw4IEBAIGRl
ZiBtYWluKCk6CiAgICAgYmFja3VwID0gb3B0aW9ucy5iYWNrdXAKICAgICBmb3IgcGxhdGZvcm0g
aW4gcmViYXNlbGluZV9wbGF0Zm9ybXM6CiAgICAgICAgIHJlYmFzZWxpbmVyID0gUmViYXNlbGlu
ZXIoaG9zdF9wb3J0X29iaiwgdGFyZ2V0X3BvcnRfb2JqLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHBsYXRmb3JtLCBvcHRpb25zKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBsYXRmb3JtLCBvcHRpb25zLCB1cmxfZmV0Y2hlciwgdW56aXBwZXJfY2xzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjbV9vYmopCiAKICAgICAgICAgX2xv
Zy5pbmZvKCcnKQogICAgICAgICBsb2dfZGFzaGVkX3N0cmluZygnUmViYXNlbGluZSBzdGFydGVk
JywgcGxhdGZvcm0pCkBAIC05MzQsNyArOTQ5LDggQEAgZGVmIG1haW4oKToKICAgICAgICAgaHRt
bF9nZW5lcmF0b3Iuc2hvd19odG1sKCkKICAgICBsb2dfZGFzaGVkX3N0cmluZygnUmViYXNlbGlu
aW5nIHJlc3VsdCBjb21wYXJpc29uIGRvbmUnLCBOb25lKQogCi0gICAgc3lzLmV4aXQoMCkKKyAg
ICByZXR1cm4gMAorCiAKIGlmICdfX21haW5fXycgPT0gX19uYW1lX186Ci0gICAgbWFpbigpCisg
ICAgc3lzLmV4aXQobWFpbihzeXMuYXJndlsxOl0pKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRfdGVzdHNf
dW5pdHRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9yZWJhc2Vs
aW5lX2Nocm9taXVtX3dlYmtpdF90ZXN0c191bml0dGVzdC5weQppbmRleCBhMGY1ZWViMTM2ZjRm
Mjk5YTQ5NTFlYjAzNDdhNmViNDIwZDgwMzM3Li43M2RlNGE2MjRkZmVlOTY4N2JjMzg3ZTAyYzg2
MDg5ZDc5MmQ2ODI2IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9yZWJhc2VsaW5lX2Nocm9taXVtX3dlYmtpdF90ZXN0c191bml0dGVzdC5weQorKysgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9yZWJhc2VsaW5lX2Nocm9taXVtX3dl
YmtpdF90ZXN0c191bml0dGVzdC5weQpAQCAtMzIsNiArMzIsMTAgQEAKIGltcG9ydCB1bml0dGVz
dAogCiBmcm9tIHdlYmtpdHB5LnRvb2wgaW1wb3J0IG1vY2t0b29sCitmcm9tIHdlYmtpdHB5LmNv
bW1vbiBpbXBvcnQgZmV0Y2hlcl9tb2NrCitmcm9tIHdlYmtpdHB5LmNvbW1vbiBpbXBvcnQgemlw
cGVyX21vY2sKK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQgZmlsZXN5c3RlbV9t
b2NrCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0gaW1wb3J0IG91dHB1dGNhcHR1cmUKIGZy
b20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmUgaW1wb3J0IEV4ZWN1dGl2ZSwgU2Ny
aXB0RXJyb3IKIAogaW1wb3J0IHBvcnQKQEAgLTUyLDYgKzU2LDU5IEBAIGRlZiBnZXRfbW9ja19n
ZXQoY29uZmlnX2V4cGVjdGF0aW9ucyk6CiAgICAgcmV0dXJuIG1vY2tfZ2V0CiAKIAorQVJDSElW
RV9VUkwgPSAnaHR0cDovL2xvY2FsaG9zdC9sYXlvdXRfdGVzdF9yZXN1bHRzJworCisKK2RlZiB0
ZXN0X29wdGlvbnMoKToKKyAgICByZXR1cm4gbW9ja3Rvb2wuTW9ja09wdGlvbnMoY29uZmlndXJh
dGlvbj1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrdXA9RmFsc2Us
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWxfZGlyZWN0b3J5PScvdG1wJywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJjaGl2ZV91cmw9QVJDSElWRV9VUkws
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNlX2FyY2hpdmVfdXJsPU5vbmUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlYmtpdF9jYW5hcnk9VHJ1ZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlX2RydD1GYWxzZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X3BsYXRmb3JtPSdjaHJvbWl1bScsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZlcmJvc2U9RmFsc2UsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHF1aWV0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwbGF0Zm9ybXM9J21hYyx3aW4nKQorCisKK2RlZiB0ZXN0X2hvc3RfcG9ydF9hbmRfZmls
ZXN5c3RlbShvcHRpb25zLCBleHBlY3RhdGlvbnMpOgorICAgIGZpbGVzeXN0ZW0gPSBwb3J0LnVu
aXRfdGVzdF9maWxlc3lzdGVtKCkKKyAgICBob3N0X3BvcnRfb2JqID0gcG9ydC5nZXQoJ3Rlc3Qn
LCBvcHRpb25zLCBmaWxlc3lzdGVtPWZpbGVzeXN0ZW0sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVzZXI9bW9ja3Rvb2wuTW9ja1VzZXIoKSkKKworICAgIGV4cGVjdGF0aW9uc19wYXRo
ID0gaG9zdF9wb3J0X29iai5wYXRoX3RvX3Rlc3RfZXhwZWN0YXRpb25zX2ZpbGUoKQorICAgIGZp
bGVzeXN0ZW0ud3JpdGVfdGV4dF9maWxlKGV4cGVjdGF0aW9uc19wYXRoLCBleHBlY3RhdGlvbnMp
CisgICAgcmV0dXJuIChob3N0X3BvcnRfb2JqLCBmaWxlc3lzdGVtKQorCisKK2RlZiB0ZXN0X2Zl
dGNoZXIoZmlsZXN5c3RlbSk6CisgICAgdXJscyA9IHsKKyAgICAgICAgQVJDSElWRV9VUkwgKyAn
L1dlYmtpdF9NYWMxMF81Lyc6ICc8YSBocmVmPSIxLyI+PGEgaHJlZj0iMi8iPicsCisgICAgICAg
IEFSQ0hJVkVfVVJMICsgJy9XZWJraXRfTWFjMTBfNS8yL2xheW91dC10ZXN0LXJlc3VsdHMuemlw
JzogJzInLAorICAgICAgICBBUkNISVZFX1VSTCArICcvV2Via2l0X1dpbi8nOiAnPGEgaHJlZj0i
MS8iPicsCisgICAgICAgIEFSQ0hJVkVfVVJMICsgJy9XZWJraXRfV2luLzEvbGF5b3V0LXRlc3Qt
cmVzdWx0cy56aXAnOiAnMScsCisgICAgfQorICAgIHJldHVybiBmZXRjaGVyX21vY2subWFrZV9m
ZXRjaGVyX2Nscyh1cmxzKShmaWxlc3lzdGVtKQorCisKK2RlZiB0ZXN0X3VuemlwcGVyX2Nscygp
OgorICAgIHppcGhhc2hlcyA9IHsKKyAgICAgICAgJy9fX2ltX3RtcC90bXBfMF9tb2NrZmV0Y2hl
cic6IHsKKyAgICAgICAgICAgICdsYXlvdXQtdGVzdC1yZXN1bHRzL2ZhaWx1cmVzL2V4cGVjdGVk
L2ltYWdlLWFjdHVhbC50eHQnOiAnbmV3LWltYWdlLXR4dCcsCisgICAgICAgICAgICAnbGF5b3V0
LXRlc3QtcmVzdWx0cy9mYWlsdXJlcy9leHBlY3RlZC9pbWFnZS1hY3R1YWwuY2hlY2tzdW0nOiAn
bmV3LWltYWdlLWNoZWNrc3VtJywKKyAgICAgICAgICAgICdsYXlvdXQtdGVzdC1yZXN1bHRzL2Zh
aWx1cmVzL2V4cGVjdGVkL2ltYWdlLWFjdHVhbC5wbmcnOiAnbmV3LWltYWdlLXBuZycsCisgICAg
ICAgIH0sCisgICAgICAgICcvX19pbV90bXAvdG1wXzRfbW9ja2ZldGNoZXInOiB7CisgICAgICAg
ICAgICAnbGF5b3V0LXRlc3QtcmVzdWx0cy9mYWlsdXJlcy9leHBlY3RlZC9pbWFnZS1hY3R1YWwu
dHh0JzogJ3dpbi1pbWFnZS10eHQnLAorICAgICAgICAgICAgJ2xheW91dC10ZXN0LXJlc3VsdHMv
ZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2UtYWN0dWFsLmNoZWNrc3VtJzogJ3dpbi1pbWFnZS1jaGVj
a3N1bScsCisgICAgICAgICAgICAnbGF5b3V0LXRlc3QtcmVzdWx0cy9mYWlsdXJlcy9leHBlY3Rl
ZC9pbWFnZS1hY3R1YWwucG5nJzogJ3dpbi1pbWFnZS1wbmcnLAorICAgICAgICB9LAorICAgIH0K
KyAgICByZXR1cm4gemlwcGVyX21vY2subWFrZV91bnppcHBlcih6aXBoYXNoZXMpCisKKwogY2xh
c3MgVGVzdEdldEhvc3RQb3J0T2JqZWN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgYXNz
ZXJ0X3Jlc3VsdChzZWxmLCByZWxlYXNlX3ByZXNlbnQsIGRlYnVnX3ByZXNlbnQsIHZhbGlkX3Bv
cnRfb2JqKToKICAgICAgICAgIyBUZXN0cyB3aGV0aGVyIHdlIGdldCBhIHZhbGlkIHBvcnQgb2Jq
ZWN0IHJldHVybmVkIHdoZW4gd2UgY2xhaW0KQEAgLTU5LDkgKzExNiw4IEBAIGNsYXNzIFRlc3RH
ZXRIb3N0UG9ydE9iamVjdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHBvcnQuZ2V0ID0g
Z2V0X21vY2tfZ2V0KHsnUmVsZWFzZSc6IHJlbGVhc2VfcHJlc2VudCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICdEZWJ1Zyc6IGRlYnVnX3ByZXNlbnR9KQogICAgICAgICBvcHRp
b25zID0gbW9ja3Rvb2wuTW9ja09wdGlvbnMoY29uZmlndXJhdGlvbj1Ob25lLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbF9kaXJlY3Rvcnk9Tm9uZSkKLSAgICAg
ICAgcG9ydF9vYmogPSByZWJhc2VsaW5lX2Nocm9taXVtX3dlYmtpdF90ZXN0cy5nZXRfaG9zdF9w
b3J0X29iamVjdCgKLSAgICAgICAgICAgIG9wdGlvbnMpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBodG1sX2RpcmVjdG9yeT0nL3RtcCcpCisgICAgICAgIHBvcnRfb2Jq
ID0gcmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRfdGVzdHMuZ2V0X2hvc3RfcG9ydF9vYmplY3Qo
b3B0aW9ucykKICAgICAgICAgaWYgdmFsaWRfcG9ydF9vYmo6CiAgICAgICAgICAgICBzZWxmLmFz
c2VydE5vdEVxdWFsKHBvcnRfb2JqLCBOb25lKQogICAgICAgICBlbHNlOgpAQCAtODMsMTggKzEz
OSw3IEBAIGNsYXNzIFRlc3RHZXRIb3N0UG9ydE9iamVjdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAg
ICAgICAgIHBvcnQuZ2V0ID0gb2xkX2dldAogCiAKLWNsYXNzIFRlc3RSZWJhc2VsaW5lcih1bml0
dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZGVmIG1ha2VfcmViYXNlbGluZXIoc2VsZik6Ci0gICAgICAg
IG9wdGlvbnMgPSBtb2NrdG9vbC5Nb2NrT3B0aW9ucyhjb25maWd1cmF0aW9uPU5vbmUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sX2RpcmVjdG9yeT1Ob25lKQot
ICAgICAgICBmaWxlc3lzdGVtID0gcG9ydC51bml0X3Rlc3RfZmlsZXN5c3RlbSgpCi0gICAgICAg
IGhvc3RfcG9ydF9vYmogPSBwb3J0LmdldCgndGVzdCcsIG9wdGlvbnMsIGZpbGVzeXN0ZW09Zmls
ZXN5c3RlbSkKLSAgICAgICAgdGFyZ2V0X29wdGlvbnMgPSBvcHRpb25zCi0gICAgICAgIHRhcmdl
dF9wb3J0X29iaiA9IHBvcnQuZ2V0KCd0ZXN0JywgdGFyZ2V0X29wdGlvbnMsIGZpbGVzeXN0ZW09
ZmlsZXN5c3RlbSkKLSAgICAgICAgcGxhdGZvcm0gPSB0YXJnZXRfcG9ydF9vYmoudGVzdF9wbGF0
Zm9ybV9uYW1lKCkKLSAgICAgICAgcmV0dXJuIHJlYmFzZWxpbmVfY2hyb21pdW1fd2Via2l0X3Rl
c3RzLlJlYmFzZWxpbmVyKAotICAgICAgICAgICAgaG9zdF9wb3J0X29iaiwgdGFyZ2V0X3BvcnRf
b2JqLCBwbGF0Zm9ybSwgb3B0aW9ucykKLQorY2xhc3MgVGVzdE9wdGlvbnModW5pdHRlc3QuVGVz
dENhc2UpOgogICAgIGRlZiB0ZXN0X3BhcnNlX29wdGlvbnMoc2VsZik6CiAgICAgICAgIChvcHRp
b25zLCB0YXJnZXRfb3B0aW9ucykgPSByZWJhc2VsaW5lX2Nocm9taXVtX3dlYmtpdF90ZXN0cy5w
YXJzZV9vcHRpb25zKFtdKQogICAgICAgICBzZWxmLmFzc2VydFRydWUodGFyZ2V0X29wdGlvbnMu
Y2hyb21pdW0pCkBAIC0xMDQsMzkgKzE0OSwxMDcgQEAgY2xhc3MgVGVzdFJlYmFzZWxpbmVyKHVu
aXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKHRhcmdl
dF9vcHRpb25zLCAnY2hyb21pdW0nKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcHRpb25z
LnRvbGVyYW5jZSwgMCkKIAorCitjbGFzcyBUZXN0UmViYXNlbGluZXIodW5pdHRlc3QuVGVzdENh
c2UpOgorICAgIGRlZiBtYWtlX3JlYmFzZWxpbmVyKHNlbGYsIGV4cGVjdGF0aW9ucyk6CisgICAg
ICAgIG9wdGlvbnMgPSB0ZXN0X29wdGlvbnMoKQorICAgICAgICBob3N0X3BvcnRfb2JqLCBmaWxl
c3lzdGVtID0gdGVzdF9ob3N0X3BvcnRfYW5kX2ZpbGVzeXN0ZW0ob3B0aW9ucywgZXhwZWN0YXRp
b25zKQorCisgICAgICAgIHRhcmdldF9vcHRpb25zID0gb3B0aW9ucworICAgICAgICB0YXJnZXRf
cG9ydF9vYmogPSBwb3J0LmdldCgndGVzdCcsIHRhcmdldF9vcHRpb25zLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmaWxlc3lzdGVtPWZpbGVzeXN0ZW0pCisgICAgICAgIHRh
cmdldF9wb3J0X29iai5fZXhwZWN0YXRpb25zID0gZXhwZWN0YXRpb25zCisgICAgICAgIHBsYXRm
b3JtID0gdGFyZ2V0X3BvcnRfb2JqLnRlc3RfcGxhdGZvcm1fbmFtZSgpCisKKyAgICAgICAgZmV0
Y2hlciA9IHRlc3RfZmV0Y2hlcihmaWxlc3lzdGVtKQorICAgICAgICB1bnppcHBlcl9jbHMgPSB0
ZXN0X3VuemlwcGVyX2NscygpCisgICAgICAgIG1vY2tfc2NtID0gbW9ja3Rvb2wuTW9ja1NDTSgp
CisgICAgICAgIHJlYmFzZWxpbmVyID0gcmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRfdGVzdHMu
UmViYXNlbGluZXIoaG9zdF9wb3J0X29iaiwKKyAgICAgICAgICAgIHRhcmdldF9wb3J0X29iaiwg
cGxhdGZvcm0sIG9wdGlvbnMsIGZldGNoZXIsIHVuemlwcGVyX2NscywgbW9ja19zY20pCisgICAg
ICAgIHJldHVybiByZWJhc2VsaW5lciwgZmlsZXN5c3RlbQorCiAgICAgZGVmIHRlc3Rfbm9vcChz
ZWxmKToKICAgICAgICAgIyB0aGlzIG1ldGhvZCB0ZXN0cyB0aGF0IHdhcyBjYW4gYXQgbGVhc3Qg
aW5zdGFudGlhdGUgYW4gb2JqZWN0LCBldmVuCiAgICAgICAgICMgaWYgdGhlcmUgaXMgbm90aGlu
ZyB0byBkby4KLSAgICAgICAgcmViYXNlbGluZXIgPSBzZWxmLm1ha2VfcmViYXNlbGluZXIoKQot
ICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJlYmFzZWxpbmVyLCBOb25lKQorICAgICAgICBy
ZWJhc2VsaW5lciwgZmlsZXN5c3RlbSA9IHNlbGYubWFrZV9yZWJhc2VsaW5lcigiIikKKyAgICAg
ICAgcmViYXNlbGluZXIucnVuKEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihm
aWxlc3lzdGVtLndyaXR0ZW5fZmlsZXMpLCAxKQorCisgICAgZGVmIHRlc3Rfb25lX3BsYXRmb3Jt
KHNlbGYpOgorICAgICAgICByZWJhc2VsaW5lciwgZmlsZXN5c3RlbSA9IHNlbGYubWFrZV9yZWJh
c2VsaW5lcigKKyAgICAgICAgICAgICJCVUdYIFJFQkFTRUxJTkUgTUFDIDogZmFpbHVyZXMvZXhw
ZWN0ZWQvaW1hZ2UuaHRtbCA9IElNQUdFIikKKyAgICAgICAgcmViYXNlbGluZXIucnVuKEZhbHNl
KQorICAgICAgICAjIFdlIGV4cGVjdCB0byBoYXZlIHdyaXR0ZW4gMTMgZmlsZXMgb3ZlciB0aGUg
Y291cnNlIG9mIHRoaXMgcmViYXNlbGluZToKKyAgICAgICAgIyAqKSAxIGZpbGUgaW4gL19faW1f
dG1wIGZvciB0aGUgZG93bmxvYWRlZCBtYWMgYXJjaGl2ZSwKKyAgICAgICAgIyAqKSAzIGZpbGVz
IGluIC9fX2ltX3RtcCBmb3IgdGhlIGV4dHJhY3RlZCBhcmNoaXZlIG1lbWJlcnMKKyAgICAgICAg
IyAqKSAzIG5ldyBiYXNlbGluZXMgdW5kZXIgJy90ZXN0LmNoZWNrb3V0L0xheW91dFRlc3RzJwor
ICAgICAgICAjICopIDEgdXBkYXRlZCB0ZXN0X2V4cGVjdGF0aW9ucyBmaWxlCisgICAgICAgICMg
KikgNCBmaWxlcyBpbiAvdG1wIGZvciB0aGUgbmV3IGFuZCBvbGQgYmFzZWxpbmVzIGluIHRoZSBy
ZXN1bHQgZmlsZQorICAgICAgICAjICopIDEgdGV4dCBkaWZmIGluIC90bXAgZm9yIHRoZSByZXN1
bHQgZmlsZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihmaWxlc3lzdGVtLndyaXR0ZW5f
ZmlsZXMpLCAxMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlc3lzdGVtLmZpbGVzWycv
dGVzdC5jaGVja291dC9MYXlvdXRUZXN0cy9wbGF0Zm9ybS90ZXN0L3Rlc3RfZXhwZWN0YXRpb25z
LnR4dCddLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlc3lzdGVtLmZpbGVzWycv
dGVzdC5jaGVja291dC9MYXlvdXRUZXN0cy9wbGF0Zm9ybS90ZXN0LW1hYy9mYWlsdXJlcy9leHBl
Y3RlZC9pbWFnZS1leHBlY3RlZC5jaGVja3N1bSddLCAnbmV3LWltYWdlLWNoZWNrc3VtJykKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlc3lzdGVtLmZpbGVzWycvdGVzdC5jaGVja291dC9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS90ZXN0LW1hYy9mYWlsdXJlcy9leHBlY3RlZC9pbWFnZS1leHBl
Y3RlZC5wbmcnXSwgJ25ldy1pbWFnZS1wbmcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZp
bGVzeXN0ZW0uZmlsZXNbJy90ZXN0LmNoZWNrb3V0L0xheW91dFRlc3RzL3BsYXRmb3JtL3Rlc3Qt
bWFjL2ZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlLWV4cGVjdGVkLnR4dCddLCAnbmV3LWltYWdlLXR4
dCcpCisKKyAgICBkZWYgdGVzdF9hbGxfcGxhdGZvcm1zKHNlbGYpOgorICAgICAgICByZWJhc2Vs
aW5lciwgZmlsZXN5c3RlbSA9IHNlbGYubWFrZV9yZWJhc2VsaW5lcigKKyAgICAgICAgICAgICJC
VUdYIFJFQkFTRUxJTkUgOiBmYWlsdXJlcy9leHBlY3RlZC9pbWFnZS5odG1sID0gSU1BR0UiKQor
ICAgICAgICByZWJhc2VsaW5lci5ydW4oRmFsc2UpCisgICAgICAgICMgU2VlIGNvbW1lbnQgaW4g
dGVzdF9vbmVfcGxhdGZvcm0gZm9yIGFuIGV4cGxhbmF0aW9uIG9mIHRoZSAxMyB3cml0dGVuIHRl
c3RzLgorICAgICAgICAjIE5vdGUgdGhhdCBldmVuIHRob3VnaCB0aGUgcmViYXNlbGluZSBpcyBt
YXJrZWQgZm9yIGFsbCBwbGF0Zm9ybXMsIGVhY2gKKyAgICAgICAgIyByZWJhc2VsaW5lciBvbmx5
IGV2ZXIgZG9lcyBvbmUuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGZpbGVzeXN0ZW0u
d3JpdHRlbl9maWxlcyksIDEzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVzeXN0ZW0u
ZmlsZXNbJy90ZXN0LmNoZWNrb3V0L0xheW91dFRlc3RzL3BsYXRmb3JtL3Rlc3QvdGVzdF9leHBl
Y3RhdGlvbnMudHh0J10sICdCVUdYIFJFQkFTRUxJTkUgV0lOIDogZmFpbHVyZXMvZXhwZWN0ZWQv
aW1hZ2UuaHRtbCA9IElNQUdFXG4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVzeXN0
ZW0uZmlsZXNbJy90ZXN0LmNoZWNrb3V0L0xheW91dFRlc3RzL3BsYXRmb3JtL3Rlc3QtbWFjL2Zh
aWx1cmVzL2V4cGVjdGVkL2ltYWdlLWV4cGVjdGVkLmNoZWNrc3VtJ10sICduZXctaW1hZ2UtY2hl
Y2tzdW0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVzeXN0ZW0uZmlsZXNbJy90ZXN0
LmNoZWNrb3V0L0xheW91dFRlc3RzL3BsYXRmb3JtL3Rlc3QtbWFjL2ZhaWx1cmVzL2V4cGVjdGVk
L2ltYWdlLWV4cGVjdGVkLnBuZyddLCAnbmV3LWltYWdlLXBuZycpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoZmlsZXN5c3RlbS5maWxlc1snL3Rlc3QuY2hlY2tvdXQvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vdGVzdC1tYWMvZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2UtZXhwZWN0ZWQudHh0J10sICdu
ZXctaW1hZ2UtdHh0JykKIAogICAgIGRlZiB0ZXN0X2RpZmZfYmFzZWxpbmVzX3R4dChzZWxmKToK
LSAgICAgICAgcmViYXNlbGluZXIgPSBzZWxmLm1ha2VfcmViYXNlbGluZXIoKQotICAgICAgICBv
dXRwdXQgPSByZWJhc2VsaW5lci5fcG9ydC5leHBlY3RlZF90ZXh0KAotICAgICAgICAgICAgcmVi
YXNlbGluZXIuX3BvcnQuX2ZpbGVzeXN0ZW0uam9pbihyZWJhc2VsaW5lci5fcG9ydC5sYXlvdXRf
dGVzdHNfZGlyKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICdwYXNzZXMvdGV4dC5odG1sJykpCisgICAgICAgIHJlYmFzZWxpbmVyLCBmaWxlc3lzdGVt
ID0gc2VsZi5tYWtlX3JlYmFzZWxpbmVyKCIiKQorICAgICAgICBwb3J0ID0gcmViYXNlbGluZXIu
X3BvcnQKKyAgICAgICAgb3V0cHV0ID0gcG9ydC5leHBlY3RlZF90ZXh0KAorICAgICAgICAgICAg
cG9ydC5fZmlsZXN5c3RlbS5qb2luKHBvcnQubGF5b3V0X3Rlc3RzX2RpcigpLCAncGFzc2VzL3Rl
eHQuaHRtbCcpKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJlYmFzZWxpbmVyLl9kaWZmX2Jh
c2VsaW5lcyhvdXRwdXQsIG91dHB1dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaXNfaW1hZ2U9RmFsc2UpKQogCiAgICAgZGVmIHRlc3RfZGlm
Zl9iYXNlbGluZXNfcG5nKHNlbGYpOgotICAgICAgICByZWJhc2VsaW5lciA9IHNlbGYubWFrZV9y
ZWJhc2VsaW5lcigpCi0gICAgICAgIGltYWdlID0gcmViYXNlbGluZXIuX3BvcnQuZXhwZWN0ZWRf
aW1hZ2UoCi0gICAgICAgICAgICByZWJhc2VsaW5lci5fcG9ydC5fZmlsZXN5c3RlbS5qb2luKHJl
YmFzZWxpbmVyLl9wb3J0LmxheW91dF90ZXN0c19kaXIoKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Bhc3Nlcy9pbWFnZS5odG1sJykpCisgICAgICAg
IHJlYmFzZWxpbmVyLCBmaWxlc3lzdGVtID0gc2VsZi5tYWtlX3JlYmFzZWxpbmVyKCcnKQorICAg
ICAgICBwb3J0ID0gcmViYXNlbGluZXIuX3BvcnQKKyAgICAgICAgaW1hZ2UgPSBwb3J0LmV4cGVj
dGVkX2ltYWdlKAorICAgICAgICAgICAgcG9ydC5fZmlsZXN5c3RlbS5qb2luKHBvcnQubGF5b3V0
X3Rlc3RzX2RpcigpLCAncGFzc2VzL2ltYWdlLmh0bWwnKSkKICAgICAgICAgc2VsZi5hc3NlcnRG
YWxzZShyZWJhc2VsaW5lci5fZGlmZl9iYXNlbGluZXMoaW1hZ2UsIGltYWdlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19pbWFnZT1UcnVl
KSkKIAogCitjbGFzcyBUZXN0UmVhbE1haW4odW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0
ZXN0X2FsbF9wbGF0Zm9ybXMoc2VsZik6CisgICAgICAgIGV4cGVjdGF0aW9ucyA9ICJCVUdYIFJF
QkFTRUxJTkUgOiBmYWlsdXJlcy9leHBlY3RlZC9pbWFnZS5odG1sID0gSU1BR0UiCisKKyAgICAg
ICAgb3B0aW9ucyA9IHRlc3Rfb3B0aW9ucygpCisKKyAgICAgICAgaG9zdF9wb3J0X29iaiwgZmls
ZXN5c3RlbSA9IHRlc3RfaG9zdF9wb3J0X2FuZF9maWxlc3lzdGVtKG9wdGlvbnMsIGV4cGVjdGF0
aW9ucykKKyAgICAgICAgZmV0Y2hlciA9IHRlc3RfZmV0Y2hlcihmaWxlc3lzdGVtKQorICAgICAg
ICB1bnppcHBlcl9jbHMgPSB0ZXN0X3VuemlwcGVyX2NscygpCisgICAgICAgIG1vY2tfc2NtID0g
bW9ja3Rvb2wuTW9ja1NDTSgpCisgICAgICAgIG9jID0gb3V0cHV0Y2FwdHVyZS5PdXRwdXRDYXB0
dXJlKCkKKyAgICAgICAgb2MuY2FwdHVyZV9vdXRwdXQoKQorICAgICAgICByZWJhc2VsaW5lX2No
cm9taXVtX3dlYmtpdF90ZXN0cy5yZWFsX21haW4ob3B0aW9ucywgb3B0aW9ucywgaG9zdF9wb3J0
X29iaiwKKyAgICAgICAgICAgIGhvc3RfcG9ydF9vYmosIGZldGNoZXIsIHVuemlwcGVyX2Nscywg
bW9ja19zY20pCisgICAgICAgIG9jLnJlc3RvcmVfb3V0cHV0KCkKKworICAgICAgICAjIFdlIGV4
cGVjdCB0byBoYXZlIHdyaXR0ZW4gMjYgZmlsZXMgb3ZlciB0aGUgY291cnNlIG9mIHRoaXMgcmVi
YXNlbGluZToKKyAgICAgICAgIyAyICogdGVzdF9hbGxfcGxhdGZvcm1zLCBhYm92ZQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKGxlbihmaWxlc3lzdGVtLndyaXR0ZW5fZmlsZXMpLCAyNikKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlc3lzdGVtLmZpbGVzWycvdGVzdC5jaGVja291dC9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS90ZXN0L3Rlc3RfZXhwZWN0YXRpb25zLnR4dCddLCAnJykKKwor
CiBjbGFzcyBUZXN0SHRtbEdlbmVyYXRvcih1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIG1h
a2VfZ2VuZXJhdG9yKHNlbGYsIGZpbGVzLCB0ZXN0cyk6CiAgICAgICAgIG9wdGlvbnMgPSBtb2Nr
dG9vbC5Nb2NrT3B0aW9ucyhjb25maWd1cmF0aW9uPU5vbmUsIGh0bWxfZGlyZWN0b3J5PScvdG1w
JykKICAgICAgICAgaG9zdF9wb3J0ID0gcG9ydC5nZXQoJ3Rlc3QnLCBvcHRpb25zLCBmaWxlc3lz
dGVtPXBvcnQudW5pdF90ZXN0X2ZpbGVzeXN0ZW0oZmlsZXMpKQotICAgICAgICBnZW5lcmF0b3Ig
PSByZWJhc2VsaW5lX2Nocm9taXVtX3dlYmtpdF90ZXN0cy5IdG1sR2VuZXJhdG9yKAotICAgICAg
ICAgICAgaG9zdF9wb3J0LAotICAgICAgICAgICAgdGFyZ2V0X3BvcnQ9Tm9uZSwKLSAgICAgICAg
ICAgIG9wdGlvbnM9b3B0aW9ucywKLSAgICAgICAgICAgIHBsYXRmb3Jtcz1bJ21hYyddLAotICAg
ICAgICAgICAgcmViYXNlbGluaW5nX3Rlc3RzPXRlc3RzKQorICAgICAgICBnZW5lcmF0b3IgPSBy
ZWJhc2VsaW5lX2Nocm9taXVtX3dlYmtpdF90ZXN0cy5IdG1sR2VuZXJhdG9yKGhvc3RfcG9ydCwK
KyAgICAgICAgICAgIHRhcmdldF9wb3J0PU5vbmUsIG9wdGlvbnM9b3B0aW9ucywgcGxhdGZvcm1z
PVsnbWFjJ10sIHJlYmFzZWxpbmluZ190ZXN0cz10ZXN0cykKICAgICAgICAgcmV0dXJuIGdlbmVy
YXRvciwgaG9zdF9wb3J0CiAKICAgICBkZWYgdGVzdF9nZW5lcmF0ZV9iYXNlbGluZV9saW5rcyhz
ZWxmKToKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9tb2NrdG9vbC5w
eSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9tb2NrdG9vbC5weQppbmRleCAzNjgwZDRj
ZWY4NGU2MTM3ZmRiYTkwNDZjZTJmODNlNDE4ZTAxZjQ3Li43MmJkMWVjMGYyZTM0ZTM1NGFhYzlh
MjBmMDkxOTc0NGQ0NDY4NjRiIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rv
b2wvbW9ja3Rvb2wucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL21vY2t0b29s
LnB5CkBAIC00NjQsNiArNDY0LDEyIEBAIGNsYXNzIE1vY2tTQ00oTW9jayk6CiAgICAgICAgICMg
b3MuZ2V0Y3dkKCkgY2FuJ3Qgd29yayBoZXJlIGJlY2F1c2Ugb3RoZXIgcGFydHMgb2YgdGhlIGNv
ZGUgYXNzdW1lIHRoYXQgImNoZWNrb3V0X3Jvb3QiCiAgICAgICAgICMgd2lsbCBhY3R1YWxseSBi
ZSB0aGUgcm9vdC4gIFNpbmNlIGdldGN3ZCgpIGlzIHdyb25nLCB1c2UgYSBnbG9iYWxseSBmYWtl
IHJvb3QgZm9yIG5vdy4KICAgICAgICAgc2VsZi5jaGVja291dF9yb290ID0gc2VsZi5mYWtlX2No
ZWNrb3V0X3Jvb3QKKyAgICAgICAgc2VsZi5hZGRlZF9wYXRocyA9IHNldCgpCisKKyAgICBkZWYg
YWRkKHNlbGYsIGRlc3RpbmF0aW9uX3BhdGgsIHJldHVybl9leGl0X2NvZGU9RmFsc2UpOgorICAg
ICAgICBzZWxmLmFkZGVkX3BhdGhzLmFkZChkZXN0aW5hdGlvbl9wYXRoKQorICAgICAgICBpZiBy
ZXR1cm5fZXhpdF9jb2RlOgorICAgICAgICAgICAgcmV0dXJuIDAKIAogICAgIGRlZiBjaGFuZ2Vk
X2ZpbGVzKHNlbGYsIGdpdF9jb21taXQ9Tm9uZSk6CiAgICAgICAgIHJldHVybiBbIk1vY2tGaWxl
MSJdCkBAIC00ODMsMTcgKzQ4OSwxOSBAQCBjbGFzcyBNb2NrU0NNKE1vY2spOgogICAgICAgICAg
ICAgICAgICJodHRwczovL2J1Z3MuZXhhbXBsZS5vcmcvc2hvd19idWcuY2dpP2lkPTc1XG4iKQog
ICAgICAgICByYWlzZSBFeGNlcHRpb24oIkJvZ3VzIGNvbW1pdF9pZCBpbiBjb21taXRfbWVzc2Fn
ZV9mb3JfbG9jYWxfY29tbWl0LiIpCiAKKyAgICBkZWYgZGlmZl9mb3JfZmlsZShzZWxmLCBwYXRo
LCBsb2c9Tm9uZSk6CisgICAgICAgIHJldHVybiBwYXRoICsgJy1kaWZmJworCiAgICAgZGVmIGRp
ZmZfZm9yX3JldmlzaW9uKHNlbGYsIHJldmlzaW9uKToKICAgICAgICAgcmV0dXJuICJEaWZmRm9y
UmV2aXNpb24lc1xuIiBcCiAgICAgICAgICAgICAgICAiaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTIzNDUiICUgcmV2aXNpb24KIAorICAgIGRlZiBzaG93X2hlYWQoc2Vs
ZiwgcGF0aCk6CisgICAgICAgIHJldHVybiBwYXRoCisKICAgICBkZWYgc3ZuX3JldmlzaW9uX2Zy
b21fY29tbWl0X3RleHQoc2VsZiwgY29tbWl0X3RleHQpOgogICAgICAgICByZXR1cm4gIjQ5ODI0
IgogCi0gICAgZGVmIGFkZChzZWxmLCBkZXN0aW5hdGlvbl9wYXRoLCByZXR1cm5fZXhpdF9jb2Rl
PUZhbHNlKToKLSAgICAgICAgaWYgcmV0dXJuX2V4aXRfY29kZToKLSAgICAgICAgICAgIHJldHVy
biAwCi0KIAogY2xhc3MgTW9ja0NoZWNrb3V0KG9iamVjdCk6CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80489</attachid>
            <date>2011-01-28 13:20:05 -0800</date>
            <delta_ts>2011-01-28 15:05:17 -0800</delta_ts>
            <desc>use filesets</desc>
            <filename>bug-53040-20110128132004.patch</filename>
            <type>text/plain</type>
            <size>31765</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAzZWNi
NTZkNmZiZTU3MDVlNmJhMWU0OTAzNGI2ZDk1NWVjNGJlMGRmLi5kMzBiYjM5ZGUzNzVhODYzNzBj
ZmM5Mzk0YmJkNWYxY2VlYTQ4N2Q0IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIv
VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTEtMDEtMjggIERpcmsgUHJhbmtl
ICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkIG1vcmUgdW5pdCB0ZXN0cyBmb3IgcmViYXNlbGluZS1jaHJv
bWl1bS13ZWJraXQtdGVzdHMuIFRoaXMKKyAgICAgICAgY2hhbmdlIGludm9sdmVzIHJlc3RydWN0
dXJpbmcgYSBidW5jaCBvZiByLWMtdy10IGNvZGUgdG8gbWFrZSBpdAorICAgICAgICBtb3JlIHRl
c3RhYmxlIGFzIHdlbGwuIFdlIGFsc28gYWRkIHdyYXBwZXIgY2xhc3NlcyBmb3IgaGFuZGxpbmcK
KyAgICAgICAgdGVzdGluZyB6aXAgZmlsZXMgYW5kIGZldGNoaW5nIFVSTHMuCisKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUzMDQwCisKKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vdXJsZmV0Y2hlci5weToKKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vdXJsZmV0Y2hlcl9tb2NrLnB5OgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS96aXBmaWxlc2V0X21vY2sucHk6
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcmViYXNlbGluZV9jaHJv
bWl1bV93ZWJraXRfdGVzdHMucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHk6CisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL21vY2t0b29sLnB5OgorCiAyMDExLTAxLTI3ICBE
aXJrIFByYW5rZSAgPGRwcmFua2VAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9yZWJhc2VsaW5lLWNo
cm9taXVtLXdlYmtpdC10ZXN0cyBiL1Rvb2xzL1NjcmlwdHMvcmViYXNlbGluZS1jaHJvbWl1bS13
ZWJraXQtdGVzdHMKaW5kZXggOGQxNGI4NjVkMmYyOTQwZjljMjcyN2U2MDJjZmFkNWI3Njc2ZGI0
Mi4uODA2Y2ExNzhlYmJiYWU5ZTk1MmM3OGNjNDM3YWNkMTRiOGZiYTJmNyAxMDA3NTUKLS0tIGEv
VG9vbHMvU2NyaXB0cy9yZWJhc2VsaW5lLWNocm9taXVtLXdlYmtpdC10ZXN0cworKysgYi9Ub29s
cy9TY3JpcHRzL3JlYmFzZWxpbmUtY2hyb21pdW0td2Via2l0LXRlc3RzCkBAIC00MSw0ICs0MSw0
IEBAIHN5cy5wYXRoLmFwcGVuZChvcy5wYXRoLmpvaW4od2Via2l0cHlfZGlyZWN0b3J5LCAidGhp
cmRwYXJ0eSIpKQogaW1wb3J0IHJlYmFzZWxpbmVfY2hyb21pdW1fd2Via2l0X3Rlc3RzCiAKIGlm
IF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgcmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRf
dGVzdHMubWFpbigpCisgICAgcmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRfdGVzdHMubWFpbihz
eXMuYXJndlsxOl0pCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9z
eXN0ZW0vdXJsZmV0Y2hlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3Rl
bS91cmxmZXRjaGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJkOWU1ZWNhYWEwODY2YTczM2IwZWY5MmJhODlk
NmE2OTBhMDYwZDYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi9zeXN0ZW0vdXJsZmV0Y2hlci5weQpAQCAtMCwwICsxLDU1IEBACisjIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisj
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
IyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKworIiIiV3JhcHBlciBtb2R1bGUgZm9yIGZldGNoaW5nIFVSTHMuIiIiCisKK2ltcG9ydCB1
cmxsaWIKKworCitjbGFzcyBVcmxGZXRjaGVyKG9iamVjdCk6CisgICAgIiIiQ2xhc3Mgd2l0aCBy
ZXN0cmljdGVkIGludGVyZmFjZSB0byBmZXRjaCBVUkxzIChtYWtlcyB0ZXN0aW5nIGVhc2llciki
IiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZXN5c3RlbSk6CisgICAgICAgIHNlbGYuX2Zp
bGVzeXN0ZW0gPSBmaWxlc3lzdGVtCisKKyAgICBkZWYgZmV0Y2goc2VsZiwgdXJsKToKKyAgICAg
ICAgIiIiRmV0Y2hlcyB0aGUgY29udGVudHMgb2YgdGhlIFVSTCBhcyBhIHN0cmluZy4iIiIKKyAg
ICAgICAgZmlsZV9vYmplY3QgPSB1cmxsaWIudXJsb3Blbih1cmwpCisgICAgICAgIGNvbnRlbnQg
PSBmaWxlX29iamVjdC5yZWFkKCkKKyAgICAgICAgZmlsZV9vYmplY3QuY2xvc2UoKQorICAgICAg
ICByZXR1cm4gY29udGVudAorCisgICAgZGVmIGZldGNoX2ludG9fZmlsZShzZWxmLCB1cmwpOgor
ICAgICAgICAiIiJGZXRjaGVzIHRoZSBjb250ZW50cyBvZiB0aGUgVVJMIGludG8gYSB0ZW1wb3Jh
cnkgZmlsZSBhbmQgcmV0dXJuIHRoZSBmaWxlbmFtZS4KKworICAgICAgICBUaGlzIGlzIHRoZSBl
cXVpdmFsZW50IG9mIHVybGxpYi5yZXRyaWV2ZSgpIGV4Y2VwdCB0aGF0IHdlIGRvbid0IHJldHVy
biBhbnkgaGVhZGVycy4KKyAgICAgICAgIiIiCisgICAgICAgIGZpbGVfb2JqZWN0LCBmaWxlbmFt
ZSA9IHNlbGYuX2ZpbGVzeXN0ZW0ub3Blbl9iaW5hcnlfdGVtcGZpbGUoJy1mZXRjaGVkJykKKyAg
ICAgICAgY29udGVudHMgPSBzZWxmLmZldGNoKHVybCkKKyAgICAgICAgZmlsZV9vYmplY3Qud3Jp
dGUoY29udGVudHMpCisgICAgICAgIGZpbGVfb2JqZWN0LmNsb3NlKCkKKyAgICAgICAgcmV0dXJu
IGZpbGVuYW1lCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0
ZW0vdXJsZmV0Y2hlcl9tb2NrLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lz
dGVtL3VybGZldGNoZXJfbW9jay5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lOGE3NTMyMDg0OTI1ZGIwMjU5OWJl
ZjU1NmQ2ZTNlZmJiNzFlNDRmCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9jb21tb24vc3lzdGVtL3VybGZldGNoZXJfbW9jay5weQpAQCAtMCwwICsxLDQ2IEBACisj
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIwor
IyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorIyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMg
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKworCitkZWYgbWFrZV9mZXRjaGVyX2Nscyh1cmxzKToKKyAgICAiIiJVcmxG
ZXRjaGVyIGZhY3Rvcnkgcm91dGluZSB0aGF0IHNpbXVsYXRlcyBuZXR3b3JrIGFjY2VzcworICAg
IHVzaW5nIGEgZGljdCBvZiBVUkxzIC0+IGNvbnRlbnRzLiIiIgorICAgIGNsYXNzIE1vY2tGZXRj
aGVyKG9iamVjdCk6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlc3lzdGVtKToKKyAg
ICAgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0gPSBmaWxlc3lzdGVtCisKKyAgICAgICAgZGVmIGZl
dGNoKHNlbGYsIHVybCk6CisgICAgICAgICAgICByZXR1cm4gdXJsc1t1cmxdCisKKyAgICAgICAg
ZGVmIGZldGNoX2ludG9fZmlsZShzZWxmLCB1cmwpOgorICAgICAgICAgICAgZiwgZm4gPSBzZWxm
Ll9maWxlc3lzdGVtLm9wZW5fYmluYXJ5X3RlbXBmaWxlKCdtb2NrZmV0Y2hlcicpCisgICAgICAg
ICAgICBmLndyaXRlKHNlbGYuZmV0Y2godXJsKSkKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAg
ICAgICAgICAgcmV0dXJuIGZuCisKKyAgICByZXR1cm4gTW9ja0ZldGNoZXIKZGlmZiAtLWdpdCBh
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS96aXBmaWxlc2V0X21vY2sucHkg
Yi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vemlwZmlsZXNldF9tb2NrLnB5
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjI0YWM4Y2JhMDVmOGQzMjg5ZTQwNGIzZmI4N2Q5ZjkyZmUxZTQwMGMKLS0t
IC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vemlw
ZmlsZXNldF9tb2NrLnB5CkBAIC0wLDAgKzEsNTEgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDExIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisjIG1ldDoKKyMKKyMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMK
KyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKK2RlZiBt
YWtlX2ZhY3RvcnkoemlwaGFzaGVzKToKKyAgICAiIiJaaXBGaWxlU2V0IGZhY3Rvcnkgcm91dGlu
ZSB0aGF0IGxvb2tzIHVwIHppcGZpbGVzIGluIGEgZGljdDsKKyAgICBlYWNoIHppcGZpbGUgc2hv
dWxkIGFsc28gYmUgYSBkaWN0IG9mIG1lbWJlciBuYW1lcyAtPiBjb250ZW50cy4iIiIKKyAgICBj
bGFzcyBNb2NrWmlwRmlsZVNldChvYmplY3QpOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwg
dXJsKToKKyAgICAgICAgICAgIHNlbGYuX3VybCA9IHVybAorICAgICAgICAgICAgc2VsZi5femlw
aGFzaCA9IHppcGhhc2hlc1t1cmxdCisKKyAgICAgICAgZGVmIG5hbWVsaXN0KHNlbGYpOgorICAg
ICAgICAgICAgcmV0dXJuIHNlbGYuX3ppcGhhc2gua2V5cygpCisKKyAgICAgICAgZGVmIHJlYWQo
c2VsZiwgbWVtYmVyKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl96aXBoYXNoW21lbWJlcl0K
KworICAgICAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYg
bWFrZXIodXJsKToKKyAgICAgICAgIyBXZSByZXR1cm4gTm9uZSBiZWNhdXNlIHRoZXJlJ3Mgbm8g
dGVtcGZpbGUgdG8gZGVsZXRlLgorICAgICAgICByZXR1cm4gKE5vbmUsIE1vY2taaXBGaWxlU2V0
KHVybCkpCisKKyAgICByZXR1cm4gbWFrZXIKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3JlYmFzZWxpbmVfY2hyb21pdW1fd2Via2l0X3Rlc3RzLnB5IGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcmViYXNlbGluZV9jaHJvbWl1bV93
ZWJraXRfdGVzdHMucHkKaW5kZXggYzg1MjE4NmZjOGYxMzhhYTVlM2RiYjYwNWFiNDM2Yjg3MTZh
OThjOS4uZmJmZGQyYzk4MDk4OTE4MzI0MTE5NWVjNTFmMWViNmQzYmZmMDY5MyAxMDA2NDQKLS0t
IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcmViYXNlbGluZV9jaHJvbWl1
bV93ZWJraXRfdGVzdHMucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRfdGVzdHMucHkKQEAgLTQ3LDE4ICs0NywxNyBA
QCBpbXBvcnQgb3B0cGFyc2UKIGltcG9ydCByZQogaW1wb3J0IHN5cwogaW1wb3J0IHRpbWUKLWlt
cG9ydCB1cmxsaWIKLWltcG9ydCB6aXBmaWxlCiAKIGZyb20gd2Via2l0cHkuY29tbW9uLmNoZWNr
b3V0IGltcG9ydCBzY20KK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQgemlwZmls
ZXNldAogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGltcG9ydCBwYXRoCitmcm9tIHdlYmtp
dHB5LmNvbW1vbi5zeXN0ZW0gaW1wb3J0IHVybGZldGNoZXIKIGZyb20gd2Via2l0cHkuY29tbW9u
LnN5c3RlbS5leGVjdXRpdmUgaW1wb3J0IFNjcmlwdEVycm9yCiAKLWltcG9ydCBwb3J0Ci1mcm9t
IGxheW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0X2V4cGVjdGF0aW9ucworZnJvbSB3ZWJraXRweS5s
YXlvdXRfdGVzdHMgaW1wb3J0IHBvcnQKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91
dF9wYWNrYWdlIGltcG9ydCB0ZXN0X2V4cGVjdGF0aW9ucwogCi1fbG9nID0gbG9nZ2luZy5nZXRM
b2dnZXIoIndlYmtpdHB5LmxheW91dF90ZXN0cy4iCi0gICAgICAgICAgICAgICAgICAgICAgICAg
InJlYmFzZWxpbmVfY2hyb21pdW1fd2Via2l0X3Rlc3RzIikKK19sb2cgPSBsb2dnaW5nLmdldExv
Z2dlcihfX25hbWVfXykKIAogQkFTRUxJTkVfU1VGRklYRVMgPSBbJy50eHQnLCAnLnBuZycsICcu
Y2hlY2tzdW0nXQogUkVCQVNFTElORV9QTEFURk9STV9PUkRFUiA9IFsnbWFjJywgJ3dpbicsICd3
aW4teHAnLCAnd2luLXZpc3RhJywgJ2xpbnV4J10KQEAgLTE0Miw3ICsxNDEsNyBAQCBjbGFzcyBS
ZWJhc2VsaW5lcihvYmplY3QpOgogCiAgICAgUkVWSVNJT05fUkVHRVggPSByJzxhIGhyZWY9XCIo
XGQrKS9cIj4nCiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgcnVubmluZ19wb3J0LCB0YXJnZXRf
cG9ydCwgcGxhdGZvcm0sIG9wdGlvbnMpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBydW5uaW5n
X3BvcnQsIHRhcmdldF9wb3J0LCBwbGF0Zm9ybSwgb3B0aW9ucywgdXJsX2ZldGNoZXIsIHppcF9m
YWN0b3J5LCBzY20pOgogICAgICAgICAiIiIKICAgICAgICAgQXJnczoKICAgICAgICAgICAgIHJ1
bm5pbmdfcG9ydDogdGhlIFBvcnQgdGhlIHNjcmlwdCBpcyBydW5uaW5nIG9uLgpAQCAtMTUwLDE0
ICsxNDksMTkgQEAgY2xhc3MgUmViYXNlbGluZXIob2JqZWN0KToKICAgICAgICAgICAgICAgICBj
b25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGxpa2UgdGhlIHRlc3RfZXhwZWN0YXRpb25zLnR4dAog
ICAgICAgICAgICAgICAgIGZpbGUgbG9jYXRpb24gYW5kIHRoZSBsaXN0IG9mIHRlc3QgcGxhdGZv
cm1zLgogICAgICAgICAgICAgcGxhdGZvcm06IHRoZSB0ZXN0IHBsYXRmb3JtIHRvIHJlYmFzZWxp
bmUKLSAgICAgICAgICAgIG9wdGlvbnM6IHRoZSBjb21tYW5kLWxpbmUgb3B0aW9ucyBvYmplY3Qu
IiIiCisgICAgICAgICAgICBvcHRpb25zOiB0aGUgY29tbWFuZC1saW5lIG9wdGlvbnMgb2JqZWN0
LgorICAgICAgICAgICAgdXJsX2ZldGNoZXI6IG9iamVjdCB0aGF0IGNhbiBmZXRjaCBvYmplY3Rz
IGZyb20gVVJMcworICAgICAgICAgICAgemlwX2ZhY3Rvcnk6IG9wdGlvbmFsIG9iamVjdCB0aGF0
IGNhbiBmZXRjaCB6aXAgZmlsZXMgZnJvbSBVUkxzCisgICAgICAgICAgICBzY206IHNjbSBvYmpl
Y3QgZm9yIGFkZGluZyBuZXcgYmFzZWxpbmVzCisgICAgICAgICIiIgogICAgICAgICBzZWxmLl9w
bGF0Zm9ybSA9IHBsYXRmb3JtCiAgICAgICAgIHNlbGYuX29wdGlvbnMgPSBvcHRpb25zCiAgICAg
ICAgIHNlbGYuX3BvcnQgPSBydW5uaW5nX3BvcnQKICAgICAgICAgc2VsZi5fZmlsZXN5c3RlbSA9
IHJ1bm5pbmdfcG9ydC5fZmlsZXN5c3RlbQogICAgICAgICBzZWxmLl90YXJnZXRfcG9ydCA9IHRh
cmdldF9wb3J0CiAgICAgICAgIHNlbGYuX3JlYmFzZWxpbmVfcG9ydCA9IHBvcnQuZ2V0KAotICAg
ICAgICAgICAgc2VsZi5fdGFyZ2V0X3BvcnQudGVzdF9wbGF0Zm9ybV9uYW1lX3RvX25hbWUocGxh
dGZvcm0pLCBvcHRpb25zKQorICAgICAgICAgICAgc2VsZi5fdGFyZ2V0X3BvcnQudGVzdF9wbGF0
Zm9ybV9uYW1lX3RvX25hbWUocGxhdGZvcm0pLCBvcHRpb25zLAorICAgICAgICAgICAgZmlsZXN5
c3RlbT1zZWxmLl9maWxlc3lzdGVtKQogICAgICAgICBzZWxmLl9yZWJhc2VsaW5pbmdfdGVzdHMg
PSBbXQogICAgICAgICBzZWxmLl9yZWJhc2VsaW5lZF90ZXN0cyA9IFtdCiAKQEAgLTE3Myw3ICsx
NzcsOSBAQCBjbGFzcyBSZWJhc2VsaW5lcihvYmplY3QpOgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9wbGF0Zm9ybSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmFsc2UsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZhbHNlKQotICAgICAgICBzZWxmLl9zY20g
PSBzY20uZGVmYXVsdF9zY20oKQorICAgICAgICBzZWxmLl91cmxfZmV0Y2hlciA9IHVybF9mZXRj
aGVyCisgICAgICAgIHNlbGYuX3ppcF9mYWN0b3J5ID0gemlwX2ZhY3RvcnkKKyAgICAgICAgc2Vs
Zi5fc2NtID0gc2NtCiAKICAgICBkZWYgcnVuKHNlbGYsIGJhY2t1cCk6CiAgICAgICAgICIiIlJ1
biByZWJhc2VsaW5lIHByb2Nlc3MuIiIiCkBAIC0xOTIsOCArMTk4LDExIEBAIGNsYXNzIFJlYmFz
ZWxpbmVyKG9iamVjdCk6CiAgICAgICAgIGxvZ19kYXNoZWRfc3RyaW5nKCdFeHRyYWN0aW5nIGFu
ZCBhZGRpbmcgbmV3IGJhc2VsaW5lcycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYu
X3BsYXRmb3JtKQogICAgICAgICBpZiBub3Qgc2VsZi5fZXh0cmFjdF9hbmRfYWRkX25ld19iYXNl
bGluZXMoYXJjaGl2ZV9maWxlKToKKyAgICAgICAgICAgIGFyY2hpdmVfZmlsZS5jbG9zZSgpCiAg
ICAgICAgICAgICByZXR1cm4gRmFsc2UKIAorICAgICAgICBhcmNoaXZlX2ZpbGUuY2xvc2UoKQor
CiAgICAgICAgIGxvZ19kYXNoZWRfc3RyaW5nKCdVcGRhdGluZyByZWJhc2VsaW5lZCB0ZXN0cyBp
biBmaWxlJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcGxhdGZvcm0pCiAgICAg
ICAgIHNlbGYuX3VwZGF0ZV9yZWJhc2VsaW5lZF90ZXN0c19pbl9maWxlKGJhY2t1cCkKQEAgLTI1
NCw5ICsyNjMsNyBAQCBjbGFzcyBSZWJhc2VsaW5lcihvYmplY3QpOgogCiAgICAgICAgIF9sb2cu
ZGVidWcoJ1VybCB0byByZXRyaWV2ZSByZXZpc2lvbjogIiVzIicsIHVybCkKIAotICAgICAgICBm
ID0gdXJsbGliLnVybG9wZW4odXJsKQotICAgICAgICBjb250ZW50ID0gZi5yZWFkKCkKLSAgICAg
ICAgZi5jbG9zZSgpCisgICAgICAgIGNvbnRlbnQgPSBzZWxmLl91cmxfZmV0Y2hlci5mZXRjaCh1
cmwpCiAKICAgICAgICAgcmV2aXNpb25zID0gcmUuZmluZGFsbChzZWxmLlJFVklTSU9OX1JFR0VY
LCBjb250ZW50KQogICAgICAgICBpZiBub3QgcmV2aXNpb25zOgpAQCAtMzEzLDMzICszMjAsMjQg
QEAgY2xhc3MgUmViYXNlbGluZXIob2JqZWN0KToKICAgICAgICAgcmV0dXJuIGFyY2hpdmVfdXJs
CiAKICAgICBkZWYgX2Rvd25sb2FkX2J1aWxkYm90X2FyY2hpdmUoc2VsZik6Ci0gICAgICAgICIi
IkRvd25sb2FkIGxheW91dCB0ZXN0IGFyY2hpdmUgZmlsZSBmcm9tIGJ1aWxkYm90LgotCi0gICAg
ICAgIFJldHVybnM6Ci0gICAgICAgICAgVHJ1ZSBpZiBkb3dubG9hZCBzdWNjZWVkZWQgb3IKLSAg
ICAgICAgICBGYWxzZSBvdGhlcndpc2UuCi0gICAgICAgICIiIgotCisgICAgICAgICIiIkRvd25s
b2FkIGxheW91dCB0ZXN0IGFyY2hpdmUgZmlsZSBmcm9tIGJ1aWxkYm90IGFuZCByZXR1cm4gYSBo
YW5kbGUgdG8gaXQuIiIiCiAgICAgICAgIHVybCA9IHNlbGYuX2dldF9hcmNoaXZlX3VybCgpCiAg
ICAgICAgIGlmIHVybCBpcyBOb25lOgogICAgICAgICAgICAgcmV0dXJuIE5vbmUKIAotICAgICAg
ICBmbiA9IHVybGxpYi51cmxyZXRyaWV2ZSh1cmwpWzBdCi0gICAgICAgIF9sb2cuaW5mbygnQXJj
aGl2ZSBkb3dubG9hZGVkIGFuZCBzYXZlZCB0byBmaWxlOiAiJXMiJywgZm4pCi0gICAgICAgIHJl
dHVybiBmbgotCi0gICAgZGVmIF9leHRyYWN0X2FuZF9hZGRfbmV3X2Jhc2VsaW5lcyhzZWxmLCBh
cmNoaXZlX2ZpbGUpOgotICAgICAgICAiIiJFeHRyYWN0IG5ldyBiYXNlbGluZXMgZnJvbSBhcmNo
aXZlIGFuZCBhZGQgdGhlbSB0byBTVk4gcmVwb3NpdG9yeS4KKyAgICAgICAgYXJjaGl2ZV9maWxl
ID0gemlwZmlsZXNldC5aaXBGaWxlU2V0KHVybCwgZmlsZXN5c3RlbT1zZWxmLl9maWxlc3lzdGVt
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6aXBfZmFjdG9yeT1z
ZWxmLl96aXBfZmFjdG9yeSkKKyAgICAgICAgX2xvZy5pbmZvKCdBcmNoaXZlIGRvd25sb2FkZWQn
KQorICAgICAgICByZXR1cm4gYXJjaGl2ZV9maWxlCiAKLSAgICAgICAgQXJnczoKLSAgICAgICAg
ICBhcmNoaXZlX2ZpbGU6IGZ1bGwgcGF0aCB0byB0aGUgYXJjaGl2ZSBmaWxlLgorICAgIGRlZiBf
ZXh0cmFjdF9hbmRfYWRkX25ld19iYXNlbGluZXMoc2VsZiwgemlwX2ZpbGUpOgorICAgICAgICAi
IiJFeHRyYWN0IG5ldyBiYXNlbGluZXMgZnJvbSB0aGUgemlwIGZpbGUgYW5kIGFkZCB0aGVtIHRv
IFNWTiByZXBvc2l0b3J5LgogCiAgICAgICAgIFJldHVybnM6CiAgICAgICAgICAgTGlzdCBvZiB0
ZXN0cyB0aGF0IGhhdmUgYmVlbiByZWJhc2VsaW5lZCBvcgogICAgICAgICAgIE5vbmUgb24gZmFp
bHVyZS4KICAgICAgICAgIiIiCiAKLSAgICAgICAgemlwX2ZpbGUgPSB6aXBmaWxlLlppcEZpbGUo
YXJjaGl2ZV9maWxlLCAncicpCiAgICAgICAgIHppcF9uYW1lbGlzdCA9IHppcF9maWxlLm5hbWVs
aXN0KCkKIAogICAgICAgICBfbG9nLmRlYnVnKCd6aXAgZmlsZSBuYW1lbGlzdDonKQpAQCAtNDE5
LDcgKzQxNyw2IEBAIGNsYXNzIFJlYmFzZWxpbmVyKG9iamVjdCk6CiAgICAgICAgICAgICB0ZXN0
X25vICs9IDEKIAogICAgICAgICB6aXBfZmlsZS5jbG9zZSgpCi0gICAgICAgIHNlbGYuX2ZpbGVz
eXN0ZW0ucmVtb3ZlKGFyY2hpdmVfZmlsZSkKIAogICAgICAgICByZXR1cm4gc2VsZi5fcmViYXNl
bGluZWRfdGVzdHMKIApAQCAtODU3LDE4ICs4NTQsOSBAQCBkZWYgcGFyc2Vfb3B0aW9ucyhhcmdz
KToKICAgICByZXR1cm4gKG9wdGlvbnMsIHRhcmdldF9vcHRpb25zKQogCiAKLWRlZiBtYWluKCk6
Ci0gICAgIiIiTWFpbiBmdW5jdGlvbiB0byBwcm9kdWNlIG5ldyBiYXNlbGluZXMuIiIiCi0KLSAg
ICAob3B0aW9ucywgdGFyZ2V0X29wdGlvbnMpID0gcGFyc2Vfb3B0aW9ucyhzeXMuYXJndlsxOl0p
Ci0KLSAgICAjIFdlIG5lZWQgdG8gY3JlYXRlIHRocmVlIGRpZmZlcmVudCBQb3J0IG9iamVjdHMg
b3ZlciB0aGUgbGlmZSBvZiB0aGlzCi0gICAgIyBzY3JpcHQuIHx0YXJnZXRfcG9ydF9vYmp8IGlz
IHVzZWQgdG8gZGV0ZXJtaW5lIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb246Ci0gICAgIyBsb2Nh
dGlvbiBvZiB0aGUgZXhwZWN0YXRpb25zIGZpbGUsIG5hbWVzIG9mIHBvcnRzIHRvIHJlYmFzZWxp
bmUsIGV0Yy4KLSAgICAjIHxwb3J0X29ianwgaXMgdXNlZCBmb3IgcnVudGltZSBmdW5jdGlvbmFs
aXR5IGxpa2UgYWN0dWFsbHkgZGlmZmluZwotICAgICMgVGhlbiB3ZSBjcmVhdGUgYSByZWJhc2Vs
aW5pbmcgcG9ydCB0byBhY3R1YWwgZmluZCBhbmQgbWFuYWdlIHRoZQotICAgICMgYmFzZWxpbmVz
LgotICAgIHRhcmdldF9wb3J0X29iaiA9IHBvcnQuZ2V0KE5vbmUsIHRhcmdldF9vcHRpb25zKQor
ZGVmIG1haW4oYXJncyk6CisgICAgIiIiQm9vdHN0cmFwIGZ1bmN0aW9uIHRoYXQgc2V0cyB1cCB0
aGUgb2JqZWN0IHJlZmVyZW5jZXMgd2UgbmVlZCBhbmQgY2FsbHMgcmVhbF9tYWluKCkuIiIiCisg
ICAgb3B0aW9ucywgdGFyZ2V0X29wdGlvbnMgPSBwYXJzZV9vcHRpb25zKGFyZ3MpCiAKICAgICAj
IFNldCB1cCBvdXIgbG9nZ2luZyBmb3JtYXQuCiAgICAgbG9nX2xldmVsID0gbG9nZ2luZy5JTkZP
CkBAIC04NzksMjAgKzg2Nyw0MCBAQCBkZWYgbWFpbigpOgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAnJShsZXZlbG5hbWUpcyAlKG1lc3NhZ2UpcycpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0ZWZtdD0nJXklbSVkICVIOiVNOiVTJykKIAorICAgIHRhcmdldF9wb3J0X29i
aiA9IHBvcnQuZ2V0KE5vbmUsIHRhcmdldF9vcHRpb25zKQogICAgIGhvc3RfcG9ydF9vYmogPSBn
ZXRfaG9zdF9wb3J0X29iamVjdChvcHRpb25zKQotICAgIGlmIG5vdCBob3N0X3BvcnRfb2JqOgot
ICAgICAgICBzeXMuZXhpdCgxKQorICAgIGlmIG5vdCBob3N0X3BvcnRfb2JqIG9yIG5vdCB0YXJn
ZXRfcG9ydF9vYmo6CisgICAgICAgIHJldHVybiAxCisKKyAgICB1cmxfZmV0Y2hlciA9IHVybGZl
dGNoZXIuVXJsRmV0Y2hlcihob3N0X3BvcnRfb2JqLl9maWxlc3lzdGVtKQorICAgIHNjbV9vYmog
PSBzY20uZGVmYXVsdF9zY20oKQorCisgICAgIyBXZSB1c2UgdGhlIGRlZmF1bHQgemlwIGZhY3Rv
cnkgbWV0aG9kLgorICAgIHppcF9mYWN0b3J5ID0gTm9uZQorCisgICAgcmV0dXJuIHJlYWxfbWFp
bihvcHRpb25zLCB0YXJnZXRfb3B0aW9ucywgaG9zdF9wb3J0X29iaiwgdGFyZ2V0X3BvcnRfb2Jq
LCB1cmxfZmV0Y2hlciwKKyAgICAgICAgICAgICAgICAgICAgIHppcF9mYWN0b3J5LCBzY21fb2Jq
KQorCiAKK2RlZiByZWFsX21haW4ob3B0aW9ucywgdGFyZ2V0X29wdGlvbnMsIGhvc3RfcG9ydF9v
YmosIHRhcmdldF9wb3J0X29iaiwgdXJsX2ZldGNoZXIsCisgICAgICAgICAgICAgIHppcF9mYWN0
b3J5LCBzY21fb2JqKToKKyAgICAiIiJNYWluIGZ1bmN0aW9uIHRvIHByb2R1Y2UgbmV3IGJhc2Vs
aW5lcy4iIiIKKyAgICAjIFdlIG5lZWQgdG8gY3JlYXRlIHRocmVlIGRpZmZlcmVudCBQb3J0IG9i
amVjdHMgb3ZlciB0aGUgbGlmZSBvZiB0aGlzCisgICAgIyBzY3JpcHQuIHx0YXJnZXRfcG9ydF9v
Ymp8IGlzIHVzZWQgdG8gZGV0ZXJtaW5lIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb246CisgICAg
IyBsb2NhdGlvbiBvZiB0aGUgZXhwZWN0YXRpb25zIGZpbGUsIG5hbWVzIG9mIHBvcnRzIHRvIHJl
YmFzZWxpbmUsIGV0Yy4KKyAgICAjIHxwb3J0X29ianwgaXMgdXNlZCBmb3IgcnVudGltZSBmdW5j
dGlvbmFsaXR5IGxpa2UgYWN0dWFsbHkgZGlmZmluZworICAgICMgVGhlbiB3ZSBjcmVhdGUgYSBy
ZWJhc2VsaW5pbmcgcG9ydCB0byBhY3R1YWwgZmluZCBhbmQgbWFuYWdlIHRoZQorICAgICMgYmFz
ZWxpbmVzLgogICAgICMgVmVyaWZ5ICdwbGF0Zm9ybXMnIG9wdGlvbiBpcyB2YWxpZC4KICAgICBp
ZiBub3Qgb3B0aW9ucy5wbGF0Zm9ybXM6CiAgICAgICAgIF9sb2cuZXJyb3IoJ0ludmFsaWQgInBs
YXRmb3JtcyIgb3B0aW9uLiAtLXBsYXRmb3JtcyBtdXN0IGJlICcKICAgICAgICAgICAgICAgICAg
ICAnc3BlY2lmaWVkIGluIG9yZGVyIHRvIHJlYmFzZWxpbmUuJykKLSAgICAgICAgc3lzLmV4aXQo
MSkKKyAgICAgICAgcmV0dXJuIDEKICAgICBwbGF0Zm9ybXMgPSBbcC5zdHJpcCgpLmxvd2VyKCkg
Zm9yIHAgaW4gb3B0aW9ucy5wbGF0Zm9ybXMuc3BsaXQoJywnKV0KICAgICBmb3IgcGxhdGZvcm0g
aW4gcGxhdGZvcm1zOgogICAgICAgICBpZiBub3QgcGxhdGZvcm0gaW4gUkVCQVNFTElORV9QTEFU
Rk9STV9PUkRFUjoKICAgICAgICAgICAgIF9sb2cuZXJyb3IoJ0ludmFsaWQgcGxhdGZvcm06ICIl
cyInICUgKHBsYXRmb3JtKSkKLSAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgICAgICBy
ZXR1cm4gMQogCiAgICAgIyBBZGp1c3QgdGhlIHBsYXRmb3JtIG9yZGVyIHNvIHJlYmFzZWxpbmUg
dG9vbCBpcyBydW5uaW5nIGF0IHRoZSBvcmRlciBvZgogICAgICMgJ21hYycsICd3aW4nIGFuZCAn
bGludXgnLiBUaGlzIGlzIGluIHNhbWUgb3JkZXIgd2l0aCBsYXlvdXQgdGVzdCBiYXNlbGluZQpA
QCAtOTA5LDcgKzkxNyw4IEBAIGRlZiBtYWluKCk6CiAgICAgYmFja3VwID0gb3B0aW9ucy5iYWNr
dXAKICAgICBmb3IgcGxhdGZvcm0gaW4gcmViYXNlbGluZV9wbGF0Zm9ybXM6CiAgICAgICAgIHJl
YmFzZWxpbmVyID0gUmViYXNlbGluZXIoaG9zdF9wb3J0X29iaiwgdGFyZ2V0X3BvcnRfb2JqLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtLCBvcHRpb25zKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtLCBvcHRpb25zLCB1cmxfZmV0
Y2hlciwgemlwX2ZhY3RvcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Nt
X29iaikKIAogICAgICAgICBfbG9nLmluZm8oJycpCiAgICAgICAgIGxvZ19kYXNoZWRfc3RyaW5n
KCdSZWJhc2VsaW5lIHN0YXJ0ZWQnLCBwbGF0Zm9ybSkKQEAgLTkzNCw3ICs5NDMsOCBAQCBkZWYg
bWFpbigpOgogICAgICAgICBodG1sX2dlbmVyYXRvci5zaG93X2h0bWwoKQogICAgIGxvZ19kYXNo
ZWRfc3RyaW5nKCdSZWJhc2VsaW5pbmcgcmVzdWx0IGNvbXBhcmlzb24gZG9uZScsIE5vbmUpCiAK
LSAgICBzeXMuZXhpdCgwKQorICAgIHJldHVybiAwCisKIAogaWYgJ19fbWFpbl9fJyA9PSBfX25h
bWVfXzoKLSAgICBtYWluKCkKKyAgICBzeXMuZXhpdChtYWluKHN5cy5hcmd2WzE6XSkpCmRpZmYg
LS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9yZWJhc2VsaW5lX2No
cm9taXVtX3dlYmtpdF90ZXN0c191bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3JlYmFzZWxpbmVfY2hyb21pdW1fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5
CmluZGV4IGEwZjVlZWIxMzZmNGYyOTlhNDk1MWViMDM0N2E2ZWI0MjBkODAzMzcuLmFhY2UwMzZm
ZTUyMDg3Mjg1ZDIyYjkxMjE2Y2NiY2RiZGFiZDI2YWMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3JlYmFzZWxpbmVfY2hyb21pdW1fd2Via2l0X3Rlc3Rz
X3VuaXR0ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Jl
YmFzZWxpbmVfY2hyb21pdW1fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5CkBAIC0zMiwxMCArMzIs
MTQgQEAKIGltcG9ydCB1bml0dGVzdAogCiBmcm9tIHdlYmtpdHB5LnRvb2wgaW1wb3J0IG1vY2t0
b29sCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0gaW1wb3J0IHVybGZldGNoZXJfbW9jawor
ZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGltcG9ydCBmaWxlc3lzdGVtX21vY2sKK2Zyb20g
d2Via2l0cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQgemlwZmlsZXNldF9tb2NrCitmcm9tIHdlYmtp
dHB5LmNvbW1vbi5zeXN0ZW0gaW1wb3J0IG91dHB1dGNhcHR1cmUKIGZyb20gd2Via2l0cHkuY29t
bW9uLnN5c3RlbS5leGVjdXRpdmUgaW1wb3J0IEV4ZWN1dGl2ZSwgU2NyaXB0RXJyb3IKIAotaW1w
b3J0IHBvcnQKLWltcG9ydCByZWJhc2VsaW5lX2Nocm9taXVtX3dlYmtpdF90ZXN0cworZnJvbSB3
ZWJraXRweS5sYXlvdXRfdGVzdHMgaW1wb3J0IHBvcnQKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rl
c3RzIGltcG9ydCByZWJhc2VsaW5lX2Nocm9taXVtX3dlYmtpdF90ZXN0cwogCiAKIGNsYXNzIE1v
Y2tQb3J0KG9iamVjdCk6CkBAIC01Miw2ICs1Niw1NyBAQCBkZWYgZ2V0X21vY2tfZ2V0KGNvbmZp
Z19leHBlY3RhdGlvbnMpOgogICAgIHJldHVybiBtb2NrX2dldAogCiAKK0FSQ0hJVkVfVVJMID0g
J2h0dHA6Ly9sb2NhbGhvc3QvbGF5b3V0X3Rlc3RfcmVzdWx0cycKKworCitkZWYgdGVzdF9vcHRp
b25zKCk6CisgICAgcmV0dXJuIG1vY2t0b29sLk1vY2tPcHRpb25zKGNvbmZpZ3VyYXRpb249Tm9u
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja3VwPUZhbHNlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sX2RpcmVjdG9yeT0nL3RtcCcsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFyY2hpdmVfdXJsPUFSQ0hJVkVfVVJMLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JjZV9hcmNoaXZlX3VybD1Ob25lLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWJraXRfY2FuYXJ5PVRydWUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVzZV9kcnQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRhcmdldF9wbGF0Zm9ybT0nY2hyb21pdW0nLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2ZXJib3NlPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBxdWlldD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxh
dGZvcm1zPSdtYWMsd2luJykKKworCitkZWYgdGVzdF9ob3N0X3BvcnRfYW5kX2ZpbGVzeXN0ZW0o
b3B0aW9ucywgZXhwZWN0YXRpb25zKToKKyAgICBmaWxlc3lzdGVtID0gcG9ydC51bml0X3Rlc3Rf
ZmlsZXN5c3RlbSgpCisgICAgaG9zdF9wb3J0X29iaiA9IHBvcnQuZ2V0KCd0ZXN0Jywgb3B0aW9u
cywgZmlsZXN5c3RlbT1maWxlc3lzdGVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
c2VyPW1vY2t0b29sLk1vY2tVc2VyKCkpCisKKyAgICBleHBlY3RhdGlvbnNfcGF0aCA9IGhvc3Rf
cG9ydF9vYmoucGF0aF90b190ZXN0X2V4cGVjdGF0aW9uc19maWxlKCkKKyAgICBmaWxlc3lzdGVt
LndyaXRlX3RleHRfZmlsZShleHBlY3RhdGlvbnNfcGF0aCwgZXhwZWN0YXRpb25zKQorICAgIHJl
dHVybiAoaG9zdF9wb3J0X29iaiwgZmlsZXN5c3RlbSkKKworCitkZWYgdGVzdF91cmxfZmV0Y2hl
cihmaWxlc3lzdGVtKToKKyAgICB1cmxzID0geworICAgICAgICBBUkNISVZFX1VSTCArICcvV2Vi
a2l0X01hYzEwXzUvJzogJzxhIGhyZWY9IjEvIj48YSBocmVmPSIyLyI+JywKKyAgICAgICAgQVJD
SElWRV9VUkwgKyAnL1dlYmtpdF9XaW4vJzogJzxhIGhyZWY9IjEvIj4nLAorICAgIH0KKyAgICBy
ZXR1cm4gdXJsZmV0Y2hlcl9tb2NrLm1ha2VfZmV0Y2hlcl9jbHModXJscykoZmlsZXN5c3RlbSkK
KworCitkZWYgdGVzdF96aXBfZmFjdG9yeSgpOgorICAgIHppcGhhc2hlcyA9IHsKKyAgICAgICAg
QVJDSElWRV9VUkwgKyAnL1dlYmtpdF9NYWMxMF81LzIvbGF5b3V0LXRlc3QtcmVzdWx0cy56aXAn
OiB7CisgICAgICAgICAgICAnbGF5b3V0LXRlc3QtcmVzdWx0cy9mYWlsdXJlcy9leHBlY3RlZC9p
bWFnZS1hY3R1YWwudHh0JzogJ25ldy1pbWFnZS10eHQnLAorICAgICAgICAgICAgJ2xheW91dC10
ZXN0LXJlc3VsdHMvZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2UtYWN0dWFsLmNoZWNrc3VtJzogJ25l
dy1pbWFnZS1jaGVja3N1bScsCisgICAgICAgICAgICAnbGF5b3V0LXRlc3QtcmVzdWx0cy9mYWls
dXJlcy9leHBlY3RlZC9pbWFnZS1hY3R1YWwucG5nJzogJ25ldy1pbWFnZS1wbmcnLAorICAgICAg
ICB9LAorICAgICAgICBBUkNISVZFX1VSTCArICcvV2Via2l0X1dpbi8xL2xheW91dC10ZXN0LXJl
c3VsdHMuemlwJzogeworICAgICAgICAgICAgJ2xheW91dC10ZXN0LXJlc3VsdHMvZmFpbHVyZXMv
ZXhwZWN0ZWQvaW1hZ2UtYWN0dWFsLnR4dCc6ICd3aW4taW1hZ2UtdHh0JywKKyAgICAgICAgICAg
ICdsYXlvdXQtdGVzdC1yZXN1bHRzL2ZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlLWFjdHVhbC5jaGVj
a3N1bSc6ICd3aW4taW1hZ2UtY2hlY2tzdW0nLAorICAgICAgICAgICAgJ2xheW91dC10ZXN0LXJl
c3VsdHMvZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2UtYWN0dWFsLnBuZyc6ICd3aW4taW1hZ2UtcG5n
JywKKyAgICAgICAgfSwKKyAgICB9CisgICAgcmV0dXJuIHppcGZpbGVzZXRfbW9jay5tYWtlX2Zh
Y3RvcnkoemlwaGFzaGVzKQorCisKIGNsYXNzIFRlc3RHZXRIb3N0UG9ydE9iamVjdCh1bml0dGVz
dC5UZXN0Q2FzZSk6CiAgICAgZGVmIGFzc2VydF9yZXN1bHQoc2VsZiwgcmVsZWFzZV9wcmVzZW50
LCBkZWJ1Z19wcmVzZW50LCB2YWxpZF9wb3J0X29iaik6CiAgICAgICAgICMgVGVzdHMgd2hldGhl
ciB3ZSBnZXQgYSB2YWxpZCBwb3J0IG9iamVjdCByZXR1cm5lZCB3aGVuIHdlIGNsYWltCkBAIC01
OSw5ICsxMTQsOCBAQCBjbGFzcyBUZXN0R2V0SG9zdFBvcnRPYmplY3QodW5pdHRlc3QuVGVzdENh
c2UpOgogICAgICAgICBwb3J0LmdldCA9IGdldF9tb2NrX2dldCh7J1JlbGVhc2UnOiByZWxlYXNl
X3ByZXNlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRGVidWcnOiBkZWJ1
Z19wcmVzZW50fSkKICAgICAgICAgb3B0aW9ucyA9IG1vY2t0b29sLk1vY2tPcHRpb25zKGNvbmZp
Z3VyYXRpb249Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0
bWxfZGlyZWN0b3J5PU5vbmUpCi0gICAgICAgIHBvcnRfb2JqID0gcmViYXNlbGluZV9jaHJvbWl1
bV93ZWJraXRfdGVzdHMuZ2V0X2hvc3RfcG9ydF9vYmplY3QoCi0gICAgICAgICAgICBvcHRpb25z
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbF9kaXJlY3Rvcnk9
Jy90bXAnKQorICAgICAgICBwb3J0X29iaiA9IHJlYmFzZWxpbmVfY2hyb21pdW1fd2Via2l0X3Rl
c3RzLmdldF9ob3N0X3BvcnRfb2JqZWN0KG9wdGlvbnMpCiAgICAgICAgIGlmIHZhbGlkX3BvcnRf
b2JqOgogICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChwb3J0X29iaiwgTm9uZSkKICAg
ICAgICAgZWxzZToKQEAgLTgzLDE4ICsxMzcsNyBAQCBjbGFzcyBUZXN0R2V0SG9zdFBvcnRPYmpl
Y3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBwb3J0LmdldCA9IG9sZF9nZXQKIAogCi1j
bGFzcyBUZXN0UmViYXNlbGluZXIodW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGRlZiBtYWtlX3Jl
YmFzZWxpbmVyKHNlbGYpOgotICAgICAgICBvcHRpb25zID0gbW9ja3Rvb2wuTW9ja09wdGlvbnMo
Y29uZmlndXJhdGlvbj1Ob25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaHRtbF9kaXJlY3Rvcnk9Tm9uZSkKLSAgICAgICAgZmlsZXN5c3RlbSA9IHBvcnQudW5pdF90
ZXN0X2ZpbGVzeXN0ZW0oKQotICAgICAgICBob3N0X3BvcnRfb2JqID0gcG9ydC5nZXQoJ3Rlc3Qn
LCBvcHRpb25zLCBmaWxlc3lzdGVtPWZpbGVzeXN0ZW0pCi0gICAgICAgIHRhcmdldF9vcHRpb25z
ID0gb3B0aW9ucwotICAgICAgICB0YXJnZXRfcG9ydF9vYmogPSBwb3J0LmdldCgndGVzdCcsIHRh
cmdldF9vcHRpb25zLCBmaWxlc3lzdGVtPWZpbGVzeXN0ZW0pCi0gICAgICAgIHBsYXRmb3JtID0g
dGFyZ2V0X3BvcnRfb2JqLnRlc3RfcGxhdGZvcm1fbmFtZSgpCi0gICAgICAgIHJldHVybiByZWJh
c2VsaW5lX2Nocm9taXVtX3dlYmtpdF90ZXN0cy5SZWJhc2VsaW5lcigKLSAgICAgICAgICAgIGhv
c3RfcG9ydF9vYmosIHRhcmdldF9wb3J0X29iaiwgcGxhdGZvcm0sIG9wdGlvbnMpCi0KK2NsYXNz
IFRlc3RPcHRpb25zKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9wYXJzZV9vcHRp
b25zKHNlbGYpOgogICAgICAgICAob3B0aW9ucywgdGFyZ2V0X29wdGlvbnMpID0gcmViYXNlbGlu
ZV9jaHJvbWl1bV93ZWJraXRfdGVzdHMucGFyc2Vfb3B0aW9ucyhbXSkKICAgICAgICAgc2VsZi5h
c3NlcnRUcnVlKHRhcmdldF9vcHRpb25zLmNocm9taXVtKQpAQCAtMTA0LDM5ICsxNDcsMTA2IEBA
IGNsYXNzIFRlc3RSZWJhc2VsaW5lcih1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHNlbGYu
YXNzZXJ0RmFsc2UoaGFzYXR0cih0YXJnZXRfb3B0aW9ucywgJ2Nocm9taXVtJykpCiAgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwob3B0aW9ucy50b2xlcmFuY2UsIDApCiAKKworY2xhc3MgVGVzdFJl
YmFzZWxpbmVyKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgbWFrZV9yZWJhc2VsaW5lcihz
ZWxmLCBleHBlY3RhdGlvbnMpOgorICAgICAgICBvcHRpb25zID0gdGVzdF9vcHRpb25zKCkKKyAg
ICAgICAgaG9zdF9wb3J0X29iaiwgZmlsZXN5c3RlbSA9IHRlc3RfaG9zdF9wb3J0X2FuZF9maWxl
c3lzdGVtKG9wdGlvbnMsIGV4cGVjdGF0aW9ucykKKworICAgICAgICB0YXJnZXRfb3B0aW9ucyA9
IG9wdGlvbnMKKyAgICAgICAgdGFyZ2V0X3BvcnRfb2JqID0gcG9ydC5nZXQoJ3Rlc3QnLCB0YXJn
ZXRfb3B0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXN5c3Rl
bT1maWxlc3lzdGVtKQorICAgICAgICB0YXJnZXRfcG9ydF9vYmouX2V4cGVjdGF0aW9ucyA9IGV4
cGVjdGF0aW9ucworICAgICAgICBwbGF0Zm9ybSA9IHRhcmdldF9wb3J0X29iai50ZXN0X3BsYXRm
b3JtX25hbWUoKQorCisgICAgICAgIHVybF9mZXRjaGVyID0gdGVzdF91cmxfZmV0Y2hlcihmaWxl
c3lzdGVtKQorICAgICAgICB6aXBfZmFjdG9yeSA9IHRlc3RfemlwX2ZhY3RvcnkoKQorICAgICAg
ICBtb2NrX3NjbSA9IG1vY2t0b29sLk1vY2tTQ00oKQorICAgICAgICByZWJhc2VsaW5lciA9IHJl
YmFzZWxpbmVfY2hyb21pdW1fd2Via2l0X3Rlc3RzLlJlYmFzZWxpbmVyKGhvc3RfcG9ydF9vYmos
CisgICAgICAgICAgICB0YXJnZXRfcG9ydF9vYmosIHBsYXRmb3JtLCBvcHRpb25zLCB1cmxfZmV0
Y2hlciwgemlwX2ZhY3RvcnksIG1vY2tfc2NtKQorICAgICAgICByZXR1cm4gcmViYXNlbGluZXIs
IGZpbGVzeXN0ZW0KKwogICAgIGRlZiB0ZXN0X25vb3Aoc2VsZik6CiAgICAgICAgICMgdGhpcyBt
ZXRob2QgdGVzdHMgdGhhdCB3YXMgY2FuIGF0IGxlYXN0IGluc3RhbnRpYXRlIGFuIG9iamVjdCwg
ZXZlbgogICAgICAgICAjIGlmIHRoZXJlIGlzIG5vdGhpbmcgdG8gZG8uCi0gICAgICAgIHJlYmFz
ZWxpbmVyID0gc2VsZi5tYWtlX3JlYmFzZWxpbmVyKCkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RF
cXVhbChyZWJhc2VsaW5lciwgTm9uZSkKKyAgICAgICAgcmViYXNlbGluZXIsIGZpbGVzeXN0ZW0g
PSBzZWxmLm1ha2VfcmViYXNlbGluZXIoIiIpCisgICAgICAgIHJlYmFzZWxpbmVyLnJ1bihGYWxz
ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZmlsZXN5c3RlbS53cml0dGVuX2ZpbGVz
KSwgMSkKKworICAgIGRlZiB0ZXN0X29uZV9wbGF0Zm9ybShzZWxmKToKKyAgICAgICAgcmViYXNl
bGluZXIsIGZpbGVzeXN0ZW0gPSBzZWxmLm1ha2VfcmViYXNlbGluZXIoCisgICAgICAgICAgICAi
QlVHWCBSRUJBU0VMSU5FIE1BQyA6IGZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlLmh0bWwgPSBJTUFH
RSIpCisgICAgICAgIHJlYmFzZWxpbmVyLnJ1bihGYWxzZSkKKyAgICAgICAgIyBXZSBleHBlY3Qg
dG8gaGF2ZSB3cml0dGVuIDEyIGZpbGVzIG92ZXIgdGhlIGNvdXJzZSBvZiB0aGlzIHJlYmFzZWxp
bmU6CisgICAgICAgICMgKikgMyBmaWxlcyBpbiAvX19pbV90bXAgZm9yIHRoZSBleHRyYWN0ZWQg
YXJjaGl2ZSBtZW1iZXJzCisgICAgICAgICMgKikgMyBuZXcgYmFzZWxpbmVzIHVuZGVyICcvdGVz
dC5jaGVja291dC9MYXlvdXRUZXN0cycKKyAgICAgICAgIyAqKSAxIHVwZGF0ZWQgdGVzdF9leHBl
Y3RhdGlvbnMgZmlsZQorICAgICAgICAjICopIDQgZmlsZXMgaW4gL3RtcCBmb3IgdGhlIG5ldyBh
bmQgb2xkIGJhc2VsaW5lcyBpbiB0aGUgcmVzdWx0IGZpbGUKKyAgICAgICAgIyAqKSAxIHRleHQg
ZGlmZiBpbiAvdG1wIGZvciB0aGUgcmVzdWx0IGZpbGUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChsZW4oZmlsZXN5c3RlbS53cml0dGVuX2ZpbGVzKSwgMTIpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoZmlsZXN5c3RlbS5maWxlc1snL3Rlc3QuY2hlY2tvdXQvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vdGVzdC90ZXN0X2V4cGVjdGF0aW9ucy50eHQnXSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoZmlsZXN5c3RlbS5maWxlc1snL3Rlc3QuY2hlY2tvdXQvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vdGVzdC1tYWMvZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2UtZXhwZWN0ZWQuY2hlY2tzdW0nXSwg
J25ldy1pbWFnZS1jaGVja3N1bScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZXN5c3Rl
bS5maWxlc1snL3Rlc3QuY2hlY2tvdXQvTGF5b3V0VGVzdHMvcGxhdGZvcm0vdGVzdC1tYWMvZmFp
bHVyZXMvZXhwZWN0ZWQvaW1hZ2UtZXhwZWN0ZWQucG5nJ10sICduZXctaW1hZ2UtcG5nJykKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlc3lzdGVtLmZpbGVzWycvdGVzdC5jaGVja291dC9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS90ZXN0LW1hYy9mYWlsdXJlcy9leHBlY3RlZC9pbWFnZS1leHBl
Y3RlZC50eHQnXSwgJ25ldy1pbWFnZS10eHQnKQorCisgICAgZGVmIHRlc3RfYWxsX3BsYXRmb3Jt
cyhzZWxmKToKKyAgICAgICAgcmViYXNlbGluZXIsIGZpbGVzeXN0ZW0gPSBzZWxmLm1ha2VfcmVi
YXNlbGluZXIoCisgICAgICAgICAgICAiQlVHWCBSRUJBU0VMSU5FIDogZmFpbHVyZXMvZXhwZWN0
ZWQvaW1hZ2UuaHRtbCA9IElNQUdFIikKKyAgICAgICAgcmViYXNlbGluZXIucnVuKEZhbHNlKQor
ICAgICAgICAjIFNlZSBjb21tZW50IGluIHRlc3Rfb25lX3BsYXRmb3JtIGZvciBhbiBleHBsYW5h
dGlvbiBvZiB0aGUgMTIgd3JpdHRlbiB0ZXN0cy4KKyAgICAgICAgIyBOb3RlIHRoYXQgZXZlbiB0
aG91Z2ggdGhlIHJlYmFzZWxpbmUgaXMgbWFya2VkIGZvciBhbGwgcGxhdGZvcm1zLCBlYWNoCisg
ICAgICAgICMgcmViYXNlbGluZXIgb25seSBldmVyIGRvZXMgb25lLgorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKGxlbihmaWxlc3lzdGVtLndyaXR0ZW5fZmlsZXMpLCAxMikKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChmaWxlc3lzdGVtLmZpbGVzWycvdGVzdC5jaGVja291dC9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS90ZXN0L3Rlc3RfZXhwZWN0YXRpb25zLnR4dCddLCAnQlVHWCBSRUJBU0VMSU5F
IFdJTiA6IGZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlLmh0bWwgPSBJTUFHRVxuJykKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChmaWxlc3lzdGVtLmZpbGVzWycvdGVzdC5jaGVja291dC9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS90ZXN0LW1hYy9mYWlsdXJlcy9leHBlY3RlZC9pbWFnZS1leHBlY3RlZC5j
aGVja3N1bSddLCAnbmV3LWltYWdlLWNoZWNrc3VtJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChmaWxlc3lzdGVtLmZpbGVzWycvdGVzdC5jaGVja291dC9MYXlvdXRUZXN0cy9wbGF0Zm9ybS90
ZXN0LW1hYy9mYWlsdXJlcy9leHBlY3RlZC9pbWFnZS1leHBlY3RlZC5wbmcnXSwgJ25ldy1pbWFn
ZS1wbmcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVzeXN0ZW0uZmlsZXNbJy90ZXN0
LmNoZWNrb3V0L0xheW91dFRlc3RzL3BsYXRmb3JtL3Rlc3QtbWFjL2ZhaWx1cmVzL2V4cGVjdGVk
L2ltYWdlLWV4cGVjdGVkLnR4dCddLCAnbmV3LWltYWdlLXR4dCcpCiAKICAgICBkZWYgdGVzdF9k
aWZmX2Jhc2VsaW5lc190eHQoc2VsZik6Ci0gICAgICAgIHJlYmFzZWxpbmVyID0gc2VsZi5tYWtl
X3JlYmFzZWxpbmVyKCkKLSAgICAgICAgb3V0cHV0ID0gcmViYXNlbGluZXIuX3BvcnQuZXhwZWN0
ZWRfdGV4dCgKLSAgICAgICAgICAgIHJlYmFzZWxpbmVyLl9wb3J0Ll9maWxlc3lzdGVtLmpvaW4o
cmViYXNlbGluZXIuX3BvcnQubGF5b3V0X3Rlc3RzX2RpcigpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFzc2VzL3RleHQuaHRtbCcpKQorICAgICAg
ICByZWJhc2VsaW5lciwgZmlsZXN5c3RlbSA9IHNlbGYubWFrZV9yZWJhc2VsaW5lcigiIikKKyAg
ICAgICAgcG9ydCA9IHJlYmFzZWxpbmVyLl9wb3J0CisgICAgICAgIG91dHB1dCA9IHBvcnQuZXhw
ZWN0ZWRfdGV4dCgKKyAgICAgICAgICAgIHBvcnQuX2ZpbGVzeXN0ZW0uam9pbihwb3J0LmxheW91
dF90ZXN0c19kaXIoKSwgJ3Bhc3Nlcy90ZXh0Lmh0bWwnKSkKICAgICAgICAgc2VsZi5hc3NlcnRG
YWxzZShyZWJhc2VsaW5lci5fZGlmZl9iYXNlbGluZXMob3V0cHV0LCBvdXRwdXQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzX2ltYWdlPUZh
bHNlKSkKIAogICAgIGRlZiB0ZXN0X2RpZmZfYmFzZWxpbmVzX3BuZyhzZWxmKToKLSAgICAgICAg
cmViYXNlbGluZXIgPSBzZWxmLm1ha2VfcmViYXNlbGluZXIoKQotICAgICAgICBpbWFnZSA9IHJl
YmFzZWxpbmVyLl9wb3J0LmV4cGVjdGVkX2ltYWdlKAotICAgICAgICAgICAgcmViYXNlbGluZXIu
X3BvcnQuX2ZpbGVzeXN0ZW0uam9pbihyZWJhc2VsaW5lci5fcG9ydC5sYXlvdXRfdGVzdHNfZGly
KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYXNz
ZXMvaW1hZ2UuaHRtbCcpKQorICAgICAgICByZWJhc2VsaW5lciwgZmlsZXN5c3RlbSA9IHNlbGYu
bWFrZV9yZWJhc2VsaW5lcignJykKKyAgICAgICAgcG9ydCA9IHJlYmFzZWxpbmVyLl9wb3J0Cisg
ICAgICAgIGltYWdlID0gcG9ydC5leHBlY3RlZF9pbWFnZSgKKyAgICAgICAgICAgIHBvcnQuX2Zp
bGVzeXN0ZW0uam9pbihwb3J0LmxheW91dF90ZXN0c19kaXIoKSwgJ3Bhc3Nlcy9pbWFnZS5odG1s
JykpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmViYXNlbGluZXIuX2RpZmZfYmFzZWxpbmVz
KGltYWdlLCBpbWFnZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaXNfaW1hZ2U9VHJ1ZSkpCiAKIAorY2xhc3MgVGVzdFJlYWxNYWluKHVuaXR0
ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9hbGxfcGxhdGZvcm1zKHNlbGYpOgorICAgICAg
ICBleHBlY3RhdGlvbnMgPSAiQlVHWCBSRUJBU0VMSU5FIDogZmFpbHVyZXMvZXhwZWN0ZWQvaW1h
Z2UuaHRtbCA9IElNQUdFIgorCisgICAgICAgIG9wdGlvbnMgPSB0ZXN0X29wdGlvbnMoKQorCisg
ICAgICAgIGhvc3RfcG9ydF9vYmosIGZpbGVzeXN0ZW0gPSB0ZXN0X2hvc3RfcG9ydF9hbmRfZmls
ZXN5c3RlbShvcHRpb25zLCBleHBlY3RhdGlvbnMpCisgICAgICAgIHVybF9mZXRjaGVyID0gdGVz
dF91cmxfZmV0Y2hlcihmaWxlc3lzdGVtKQorICAgICAgICB6aXBfZmFjdG9yeSA9IHRlc3Rfemlw
X2ZhY3RvcnkoKQorICAgICAgICBtb2NrX3NjbSA9IG1vY2t0b29sLk1vY2tTQ00oKQorICAgICAg
ICBvYyA9IG91dHB1dGNhcHR1cmUuT3V0cHV0Q2FwdHVyZSgpCisgICAgICAgIG9jLmNhcHR1cmVf
b3V0cHV0KCkKKyAgICAgICAgcmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRfdGVzdHMucmVhbF9t
YWluKG9wdGlvbnMsIG9wdGlvbnMsIGhvc3RfcG9ydF9vYmosCisgICAgICAgICAgICBob3N0X3Bv
cnRfb2JqLCB1cmxfZmV0Y2hlciwgemlwX2ZhY3RvcnksIG1vY2tfc2NtKQorICAgICAgICBvYy5y
ZXN0b3JlX291dHB1dCgpCisKKyAgICAgICAgIyBXZSBleHBlY3QgdG8gaGF2ZSB3cml0dGVuIDI0
IGZpbGVzIG92ZXIgdGhlIGNvdXJzZSBvZiB0aGlzIHJlYmFzZWxpbmU6CisgICAgICAgICMgMiAq
IHRlc3RfYWxsX3BsYXRmb3JtcywgYWJvdmUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4o
ZmlsZXN5c3RlbS53cml0dGVuX2ZpbGVzKSwgMjQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
ZmlsZXN5c3RlbS5maWxlc1snL3Rlc3QuY2hlY2tvdXQvTGF5b3V0VGVzdHMvcGxhdGZvcm0vdGVz
dC90ZXN0X2V4cGVjdGF0aW9ucy50eHQnXSwgJycpCisKKwogY2xhc3MgVGVzdEh0bWxHZW5lcmF0
b3IodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBtYWtlX2dlbmVyYXRvcihzZWxmLCBmaWxl
cywgdGVzdHMpOgogICAgICAgICBvcHRpb25zID0gbW9ja3Rvb2wuTW9ja09wdGlvbnMoY29uZmln
dXJhdGlvbj1Ob25lLCBodG1sX2RpcmVjdG9yeT0nL3RtcCcpCiAgICAgICAgIGhvc3RfcG9ydCA9
IHBvcnQuZ2V0KCd0ZXN0Jywgb3B0aW9ucywgZmlsZXN5c3RlbT1wb3J0LnVuaXRfdGVzdF9maWxl
c3lzdGVtKGZpbGVzKSkKLSAgICAgICAgZ2VuZXJhdG9yID0gcmViYXNlbGluZV9jaHJvbWl1bV93
ZWJraXRfdGVzdHMuSHRtbEdlbmVyYXRvcigKLSAgICAgICAgICAgIGhvc3RfcG9ydCwKLSAgICAg
ICAgICAgIHRhcmdldF9wb3J0PU5vbmUsCi0gICAgICAgICAgICBvcHRpb25zPW9wdGlvbnMsCi0g
ICAgICAgICAgICBwbGF0Zm9ybXM9WydtYWMnXSwKLSAgICAgICAgICAgIHJlYmFzZWxpbmluZ190
ZXN0cz10ZXN0cykKKyAgICAgICAgZ2VuZXJhdG9yID0gcmViYXNlbGluZV9jaHJvbWl1bV93ZWJr
aXRfdGVzdHMuSHRtbEdlbmVyYXRvcihob3N0X3BvcnQsCisgICAgICAgICAgICB0YXJnZXRfcG9y
dD1Ob25lLCBvcHRpb25zPW9wdGlvbnMsIHBsYXRmb3Jtcz1bJ21hYyddLCByZWJhc2VsaW5pbmdf
dGVzdHM9dGVzdHMpCiAgICAgICAgIHJldHVybiBnZW5lcmF0b3IsIGhvc3RfcG9ydAogCiAgICAg
ZGVmIHRlc3RfZ2VuZXJhdGVfYmFzZWxpbmVfbGlua3Moc2VsZik6CmRpZmYgLS1naXQgYS9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvbW9ja3Rvb2wucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L3Rvb2wvbW9ja3Rvb2wucHkKaW5kZXggMzY4MGQ0Y2VmODRlNjEzN2ZkYmE5MDQ2Y2UyZjgz
ZTQxOGUwMWY0Ny4uNzJiZDFlYzBmMmUzNGUzNTRhYWM5YTIwZjA5MTk3NDRkNDQ2ODY0YiAxMDA2
NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL21vY2t0b29sLnB5CisrKyBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9tb2NrdG9vbC5weQpAQCAtNDY0LDYgKzQ2NCwxMiBA
QCBjbGFzcyBNb2NrU0NNKE1vY2spOgogICAgICAgICAjIG9zLmdldGN3ZCgpIGNhbid0IHdvcmsg
aGVyZSBiZWNhdXNlIG90aGVyIHBhcnRzIG9mIHRoZSBjb2RlIGFzc3VtZSB0aGF0ICJjaGVja291
dF9yb290IgogICAgICAgICAjIHdpbGwgYWN0dWFsbHkgYmUgdGhlIHJvb3QuICBTaW5jZSBnZXRj
d2QoKSBpcyB3cm9uZywgdXNlIGEgZ2xvYmFsbHkgZmFrZSByb290IGZvciBub3cuCiAgICAgICAg
IHNlbGYuY2hlY2tvdXRfcm9vdCA9IHNlbGYuZmFrZV9jaGVja291dF9yb290CisgICAgICAgIHNl
bGYuYWRkZWRfcGF0aHMgPSBzZXQoKQorCisgICAgZGVmIGFkZChzZWxmLCBkZXN0aW5hdGlvbl9w
YXRoLCByZXR1cm5fZXhpdF9jb2RlPUZhbHNlKToKKyAgICAgICAgc2VsZi5hZGRlZF9wYXRocy5h
ZGQoZGVzdGluYXRpb25fcGF0aCkKKyAgICAgICAgaWYgcmV0dXJuX2V4aXRfY29kZToKKyAgICAg
ICAgICAgIHJldHVybiAwCiAKICAgICBkZWYgY2hhbmdlZF9maWxlcyhzZWxmLCBnaXRfY29tbWl0
PU5vbmUpOgogICAgICAgICByZXR1cm4gWyJNb2NrRmlsZTEiXQpAQCAtNDgzLDE3ICs0ODksMTkg
QEAgY2xhc3MgTW9ja1NDTShNb2NrKToKICAgICAgICAgICAgICAgICAiaHR0cHM6Ly9idWdzLmV4
YW1wbGUub3JnL3Nob3dfYnVnLmNnaT9pZD03NVxuIikKICAgICAgICAgcmFpc2UgRXhjZXB0aW9u
KCJCb2d1cyBjb21taXRfaWQgaW4gY29tbWl0X21lc3NhZ2VfZm9yX2xvY2FsX2NvbW1pdC4iKQog
CisgICAgZGVmIGRpZmZfZm9yX2ZpbGUoc2VsZiwgcGF0aCwgbG9nPU5vbmUpOgorICAgICAgICBy
ZXR1cm4gcGF0aCArICctZGlmZicKKwogICAgIGRlZiBkaWZmX2Zvcl9yZXZpc2lvbihzZWxmLCBy
ZXZpc2lvbik6CiAgICAgICAgIHJldHVybiAiRGlmZkZvclJldmlzaW9uJXNcbiIgXAogICAgICAg
ICAgICAgICAgImh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzQ1IiAl
IHJldmlzaW9uCiAKKyAgICBkZWYgc2hvd19oZWFkKHNlbGYsIHBhdGgpOgorICAgICAgICByZXR1
cm4gcGF0aAorCiAgICAgZGVmIHN2bl9yZXZpc2lvbl9mcm9tX2NvbW1pdF90ZXh0KHNlbGYsIGNv
bW1pdF90ZXh0KToKICAgICAgICAgcmV0dXJuICI0OTgyNCIKIAotICAgIGRlZiBhZGQoc2VsZiwg
ZGVzdGluYXRpb25fcGF0aCwgcmV0dXJuX2V4aXRfY29kZT1GYWxzZSk6Ci0gICAgICAgIGlmIHJl
dHVybl9leGl0X2NvZGU6Ci0gICAgICAgICAgICByZXR1cm4gMAotCiAKIGNsYXNzIE1vY2tDaGVj
a291dChvYmplY3QpOgogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80501</attachid>
            <date>2011-01-28 15:05:20 -0800</date>
            <delta_ts>2011-01-28 15:16:37 -0800</delta_ts>
            <desc>update comments/docstring for real_main()</desc>
            <filename>bug-53040-20110128150519.patch</filename>
            <type>text/plain</type>
            <size>35746</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBiYzgx
MTY0MWM4ZmUzNWQ3MjU1NmVlZmZmNzlhODdlODc5OWZiYTA1Li5kMzBiYjM5ZGUzNzVhODYzNzBj
ZmM5Mzk0YmJkNWYxY2VlYTQ4N2Q0IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIv
VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTEtMDEtMjggIERpcmsgUHJhbmtl
ICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkIG1vcmUgdW5pdCB0ZXN0cyBmb3IgcmViYXNlbGluZS1jaHJv
bWl1bS13ZWJraXQtdGVzdHMuIFRoaXMKKyAgICAgICAgY2hhbmdlIGludm9sdmVzIHJlc3RydWN0
dXJpbmcgYSBidW5jaCBvZiByLWMtdy10IGNvZGUgdG8gbWFrZSBpdAorICAgICAgICBtb3JlIHRl
c3RhYmxlIGFzIHdlbGwuIFdlIGFsc28gYWRkIHdyYXBwZXIgY2xhc3NlcyBmb3IgaGFuZGxpbmcK
KyAgICAgICAgdGVzdGluZyB6aXAgZmlsZXMgYW5kIGZldGNoaW5nIFVSTHMuCisKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUzMDQwCisKKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vdXJsZmV0Y2hlci5weToKKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vdXJsZmV0Y2hlcl9tb2NrLnB5OgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS96aXBmaWxlc2V0X21vY2sucHk6
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcmViYXNlbGluZV9jaHJv
bWl1bV93ZWJraXRfdGVzdHMucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHk6CisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL21vY2t0b29sLnB5OgorCiAyMDExLTAxLTI3ICBE
aXJrIFByYW5rZSAgPGRwcmFua2VAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgpAQCAtMTMsMTMgKzMxLDEwIEBACiAgICAgICAgIGFsbG93cyB6aXBm
aWxlc2V0IHRvIGNsZWFuIHVwIGFmdGVyIGl0c2VsZiB3aGVuIGl0IGNyZWF0ZXMKICAgICAgICAg
dGVtcGZpbGVzIHRvIHN0b3JlIGRvd25sb2Fkcy4KIAotICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTMzMjYKLQogICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvY29tbW9uL3N5c3RlbS9kaXJlY3RvcnlmaWxlc2V0LnB5OgogICAgICAgICAqIFNjcmlwdHMv
d2Via2l0cHkvY29tbW9uL3N5c3RlbS9maWxlc2V0LnB5OgogICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvY29tbW9uL3N5c3RlbS9maWxlc3lzdGVtLnB5OgogICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvY29tbW9uL3N5c3RlbS9maWxlc3lzdGVtX21vY2sucHk6Ci0gICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2ZpbGVzeXN0ZW1fdW5pdHRlc3QucHk6CiAgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL29zcGF0aC5weToKICAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vemlwZmlsZXNldC5weToKICAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vemlwZmlsZXNldF91bml0dGVzdC5weToKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvcmViYXNlbGluZS1jaHJvbWl1bS13ZWJraXQtdGVzdHMg
Yi9Ub29scy9TY3JpcHRzL3JlYmFzZWxpbmUtY2hyb21pdW0td2Via2l0LXRlc3RzCmluZGV4IDhk
MTRiODY1ZDJmMjk0MGY5YzI3MjdlNjAyY2ZhZDViNzY3NmRiNDIuLjgwNmNhMTc4ZWJiYmFlOWU5
NTJjNzhjYzQzN2FjZDE0YjhmYmEyZjcgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvcmViYXNl
bGluZS1jaHJvbWl1bS13ZWJraXQtdGVzdHMKKysrIGIvVG9vbHMvU2NyaXB0cy9yZWJhc2VsaW5l
LWNocm9taXVtLXdlYmtpdC10ZXN0cwpAQCAtNDEsNCArNDEsNCBAQCBzeXMucGF0aC5hcHBlbmQo
b3MucGF0aC5qb2luKHdlYmtpdHB5X2RpcmVjdG9yeSwgInRoaXJkcGFydHkiKSkKIGltcG9ydCBy
ZWJhc2VsaW5lX2Nocm9taXVtX3dlYmtpdF90ZXN0cwogCiBpZiBfX25hbWVfXyA9PSAnX19tYWlu
X18nOgotICAgIHJlYmFzZWxpbmVfY2hyb21pdW1fd2Via2l0X3Rlc3RzLm1haW4oKQorICAgIHJl
YmFzZWxpbmVfY2hyb21pdW1fd2Via2l0X3Rlc3RzLm1haW4oc3lzLmFyZ3ZbMTpdKQpkaWZmIC0t
Z2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2ZpbGVzeXN0ZW0ucHkg
Yi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbS5weQppbmRl
eCBmMzhjY2IyODE1NDFhMTI4MmZkNWNlNWRmNjJkZGEzNjU1ZGU4ZWE5Li5iY2Q3ZjIwNmI3MzVk
MzU5OGQ4MjQwYmJiZDcxNTk1YTc5OTBkYjQzIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbS5weQorKysgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbS5weQpAQCAtNDcsMTIgKzQ3LDcgQEAgY2xh
c3MgRmlsZVN5c3RlbShvYmplY3QpOgogICAgIFVubGVzcyBvdGhlcndpc2Ugbm90ZWQsIGFsbCBw
YXRocyBhcmUgYWxsb3dlZCB0byBiZSBlaXRoZXIgYWJzb2x1dGUKICAgICBvciByZWxhdGl2ZS4i
IiIKICAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgIHNlbGYuX3NlcCA9IG9zLnNlcAot
Ci0gICAgZGVmIF9nZXRfc2VwKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5fc2VwCi0KLSAg
ICBzZXAgPSBwcm9wZXJ0eShfZ2V0X3NlcCwgZG9jPSJwYXRobmFtZSBzZXBhcmF0b3IiKQorICAg
ICAgICBzZWxmLnNlcCA9IG9zLnNlcAogCiAgICAgZGVmIGFic3BhdGgoc2VsZiwgcGF0aCk6CiAg
ICAgICAgIHJldHVybiBvcy5wYXRoLmFic3BhdGgocGF0aCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9maWxlc3lzdGVtX21vY2sucHkgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbV9tb2NrLnB5CmluZGV4IDQ1
MzlkNzllMjAzOTE0NTAzYjZjZDUwYTc4ZGExNTE1OTllMWZjOWEuLjhhMTA2OGI3MjY3MDVmMjA5
NmExMjU5OTc5OTZhNTc3NTM5MGI4ODggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvY29tbW9uL3N5c3RlbS9maWxlc3lzdGVtX21vY2sucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9jb21tb24vc3lzdGVtL2ZpbGVzeXN0ZW1fbW9jay5weQpAQCAtNDYsMTQgKzQ2LDkg
QEAgY2xhc3MgTW9ja0ZpbGVTeXN0ZW0ob2JqZWN0KToKICAgICAgICAgIiIiCiAgICAgICAgIHNl
bGYuZmlsZXMgPSBmaWxlcyBvciB7fQogICAgICAgICBzZWxmLndyaXR0ZW5fZmlsZXMgPSB7fQot
ICAgICAgICBzZWxmLl9zZXAgPSAnLycKKyAgICAgICAgc2VsZi5zZXAgPSAnLycKICAgICAgICAg
c2VsZi5jdXJyZW50X3RtcG5vID0gMAogCi0gICAgZGVmIF9nZXRfc2VwKHNlbGYpOgotICAgICAg
ICByZXR1cm4gc2VsZi5fc2VwCi0KLSAgICBzZXAgPSBwcm9wZXJ0eShfZ2V0X3NlcCwgZG9jPSJw
YXRobmFtZSBzZXBhcmF0b3IiKQotCiAgICAgZGVmIF9yYWlzZV9ub3RfZm91bmQoc2VsZiwgcGF0
aCk6CiAgICAgICAgIHJhaXNlIElPRXJyb3IoZXJybm8uRU5PRU5ULCBwYXRoLCBvcy5zdHJlcnJv
cihlcnJuby5FTk9FTlQpKQogCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi9zeXN0ZW0vZmlsZXN5c3RlbV91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvY29tbW9uL3N5c3RlbS9maWxlc3lzdGVtX3VuaXR0ZXN0LnB5CmluZGV4IDJmMjllNTYwZTU2
MjE4YmFiNmNkNDhiYmI0ODU5OGUwNGVjZjBlYzAuLjI2N2NhMTNkNzUzN2JlYjQxYTU0MWM4YmE2
OGRkNjkzMzQ2NjFkMDYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9u
L3N5c3RlbS9maWxlc3lzdGVtX3VuaXR0ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvY29tbW9uL3N5c3RlbS9maWxlc3lzdGVtX3VuaXR0ZXN0LnB5CkBAIC0xNjcsMjIgKzE2Nyw2
IEBAIGNsYXNzIEZpbGVTeXN0ZW1UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgc2Vs
Zi5hc3NlcnRUcnVlKGZzLnJlbW92ZSgnZmlsZW5hbWUnLCByZW1vdmVfd2l0aF9leGNlcHRpb24p
KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFscygtMSwgRmlsZVN5c3RlbVRlc3QuX3JlbW92ZV9m
YWlsdXJlcykKIAotICAgIGRlZiB0ZXN0X3NlcChzZWxmKToKLSAgICAgICAgZnMgPSBGaWxlU3lz
dGVtKCkKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmcy5zZXAsIG9zLnNlcCkKLSAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbHMoZnMuam9pbigiZm9vIiwgImJhciIpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oImZvbyIsICJiYXIiKSkKLQotICAgIGRlZiB0ZXN0
X3NlcF9faXNfcmVhZG9ubHkoc2VsZik6Ci0gICAgICAgIGZzID0gRmlsZVN5c3RlbSgpCi0KLSAg
ICAgICAgdHJ5OgotICAgICAgICAgICAgZnMuc2VwID0gJyAnCi0gICAgICAgICAgICBzZWxmLmFz
c2VydFRydWUoRmFsc2UsIG1zZz0iZnMuc2VwIGlzbid0IHJlYWRvbmx5IikKLSAgICAgICAgZXhj
ZXB0IEF0dHJpYnV0ZUVycm9yLCBlOgotICAgICAgICAgICAgcGFzcwotCiAKIGlmIF9fbmFtZV9f
ID09ICdfX21haW5fXyc6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vdXJsZmV0Y2hlci5weSBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS91cmxmZXRjaGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJkOWU1
ZWNhYWEwODY2YTczM2IwZWY5MmJhODlkNmE2OTBhMDYwZDYKLS0tIC9kZXYvbnVsbAorKysgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vdXJsZmV0Y2hlci5weQpAQCAtMCww
ICsxLDU1IEBACisjIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlz
dHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIiV3JhcHBlciBtb2R1bGUgZm9yIGZldGNo
aW5nIFVSTHMuIiIiCisKK2ltcG9ydCB1cmxsaWIKKworCitjbGFzcyBVcmxGZXRjaGVyKG9iamVj
dCk6CisgICAgIiIiQ2xhc3Mgd2l0aCByZXN0cmljdGVkIGludGVyZmFjZSB0byBmZXRjaCBVUkxz
IChtYWtlcyB0ZXN0aW5nIGVhc2llcikiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZXN5
c3RlbSk6CisgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0gPSBmaWxlc3lzdGVtCisKKyAgICBkZWYg
ZmV0Y2goc2VsZiwgdXJsKToKKyAgICAgICAgIiIiRmV0Y2hlcyB0aGUgY29udGVudHMgb2YgdGhl
IFVSTCBhcyBhIHN0cmluZy4iIiIKKyAgICAgICAgZmlsZV9vYmplY3QgPSB1cmxsaWIudXJsb3Bl
bih1cmwpCisgICAgICAgIGNvbnRlbnQgPSBmaWxlX29iamVjdC5yZWFkKCkKKyAgICAgICAgZmls
ZV9vYmplY3QuY2xvc2UoKQorICAgICAgICByZXR1cm4gY29udGVudAorCisgICAgZGVmIGZldGNo
X2ludG9fZmlsZShzZWxmLCB1cmwpOgorICAgICAgICAiIiJGZXRjaGVzIHRoZSBjb250ZW50cyBv
ZiB0aGUgVVJMIGludG8gYSB0ZW1wb3JhcnkgZmlsZSBhbmQgcmV0dXJuIHRoZSBmaWxlbmFtZS4K
KworICAgICAgICBUaGlzIGlzIHRoZSBlcXVpdmFsZW50IG9mIHVybGxpYi5yZXRyaWV2ZSgpIGV4
Y2VwdCB0aGF0IHdlIGRvbid0IHJldHVybiBhbnkgaGVhZGVycy4KKyAgICAgICAgIiIiCisgICAg
ICAgIGZpbGVfb2JqZWN0LCBmaWxlbmFtZSA9IHNlbGYuX2ZpbGVzeXN0ZW0ub3Blbl9iaW5hcnlf
dGVtcGZpbGUoJy1mZXRjaGVkJykKKyAgICAgICAgY29udGVudHMgPSBzZWxmLmZldGNoKHVybCkK
KyAgICAgICAgZmlsZV9vYmplY3Qud3JpdGUoY29udGVudHMpCisgICAgICAgIGZpbGVfb2JqZWN0
LmNsb3NlKCkKKyAgICAgICAgcmV0dXJuIGZpbGVuYW1lCmRpZmYgLS1naXQgYS9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vdXJsZmV0Y2hlcl9tb2NrLnB5IGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3VybGZldGNoZXJfbW9jay5weQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5lOGE3NTMyMDg0OTI1ZGIwMjU5OWJlZjU1NmQ2ZTNlZmJiNzFlNDRmCi0tLSAvZGV2L251bGwK
KysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3VybGZldGNoZXJfbW9j
ay5weQpAQCAtMCwwICsxLDQ2IEBACisjIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBt
ZXQ6CisjCisjICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCitkZWYgbWFrZV9mZXRjaGVy
X2Nscyh1cmxzKToKKyAgICAiIiJVcmxGZXRjaGVyIGZhY3Rvcnkgcm91dGluZSB0aGF0IHNpbXVs
YXRlcyBuZXR3b3JrIGFjY2VzcworICAgIHVzaW5nIGEgZGljdCBvZiBVUkxzIC0+IGNvbnRlbnRz
LiIiIgorICAgIGNsYXNzIE1vY2tGZXRjaGVyKG9iamVjdCk6CisgICAgICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBmaWxlc3lzdGVtKToKKyAgICAgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0gPSBmaWxl
c3lzdGVtCisKKyAgICAgICAgZGVmIGZldGNoKHNlbGYsIHVybCk6CisgICAgICAgICAgICByZXR1
cm4gdXJsc1t1cmxdCisKKyAgICAgICAgZGVmIGZldGNoX2ludG9fZmlsZShzZWxmLCB1cmwpOgor
ICAgICAgICAgICAgZiwgZm4gPSBzZWxmLl9maWxlc3lzdGVtLm9wZW5fYmluYXJ5X3RlbXBmaWxl
KCdtb2NrZmV0Y2hlcicpCisgICAgICAgICAgICBmLndyaXRlKHNlbGYuZmV0Y2godXJsKSkKKyAg
ICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgcmV0dXJuIGZuCisKKyAgICByZXR1cm4g
TW9ja0ZldGNoZXIKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5
c3RlbS96aXBmaWxlc2V0X21vY2sucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9z
eXN0ZW0vemlwZmlsZXNldF9tb2NrLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI0YWM4Y2JhMDVmOGQzMjg5ZTQw
NGIzZmI4N2Q5ZjkyZmUxZTQwMGMKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9zeXN0ZW0vemlwZmlsZXNldF9tb2NrLnB5CkBAIC0wLDAgKzEsNTEgQEAK
KyMgQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisj
CisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
IyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisjICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgor
IyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
IyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorCisKK2RlZiBtYWtlX2ZhY3RvcnkoemlwaGFzaGVzKToKKyAgICAiIiJa
aXBGaWxlU2V0IGZhY3Rvcnkgcm91dGluZSB0aGF0IGxvb2tzIHVwIHppcGZpbGVzIGluIGEgZGlj
dDsKKyAgICBlYWNoIHppcGZpbGUgc2hvdWxkIGFsc28gYmUgYSBkaWN0IG9mIG1lbWJlciBuYW1l
cyAtPiBjb250ZW50cy4iIiIKKyAgICBjbGFzcyBNb2NrWmlwRmlsZVNldChvYmplY3QpOgorICAg
ICAgICBkZWYgX19pbml0X18oc2VsZiwgdXJsKToKKyAgICAgICAgICAgIHNlbGYuX3VybCA9IHVy
bAorICAgICAgICAgICAgc2VsZi5femlwaGFzaCA9IHppcGhhc2hlc1t1cmxdCisKKyAgICAgICAg
ZGVmIG5hbWVsaXN0KHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3ppcGhhc2gua2V5
cygpCisKKyAgICAgICAgZGVmIHJlYWQoc2VsZiwgbWVtYmVyKToKKyAgICAgICAgICAgIHJldHVy
biBzZWxmLl96aXBoYXNoW21lbWJlcl0KKworICAgICAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAg
ICAgICAgICBwYXNzCisKKyAgICBkZWYgbWFrZXIodXJsKToKKyAgICAgICAgIyBXZSByZXR1cm4g
Tm9uZSBiZWNhdXNlIHRoZXJlJ3Mgbm8gdGVtcGZpbGUgdG8gZGVsZXRlLgorICAgICAgICByZXR1
cm4gKE5vbmUsIE1vY2taaXBGaWxlU2V0KHVybCkpCisKKyAgICByZXR1cm4gbWFrZXIKZGlmZiAt
LWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3JlYmFzZWxpbmVfY2hy
b21pdW1fd2Via2l0X3Rlc3RzLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRfdGVzdHMucHkKaW5kZXggYzg1MjE4NmZjOGYx
MzhhYTVlM2RiYjYwNWFiNDM2Yjg3MTZhOThjOS4uMjFhMTc2MGY2NzAxMWUxOTkxM2NiZDI3MTMz
ZGYzMTlmMzJjZmRiOCAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRfdGVzdHMucHkKKysrIGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRfdGVz
dHMucHkKQEAgLTQ3LDE4ICs0NywxNyBAQCBpbXBvcnQgb3B0cGFyc2UKIGltcG9ydCByZQogaW1w
b3J0IHN5cwogaW1wb3J0IHRpbWUKLWltcG9ydCB1cmxsaWIKLWltcG9ydCB6aXBmaWxlCiAKIGZy
b20gd2Via2l0cHkuY29tbW9uLmNoZWNrb3V0IGltcG9ydCBzY20KK2Zyb20gd2Via2l0cHkuY29t
bW9uLnN5c3RlbSBpbXBvcnQgemlwZmlsZXNldAogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVt
IGltcG9ydCBwYXRoCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0gaW1wb3J0IHVybGZldGNo
ZXIKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmUgaW1wb3J0IFNjcmlwdEVy
cm9yCiAKLWltcG9ydCBwb3J0Ci1mcm9tIGxheW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0X2V4cGVj
dGF0aW9ucworZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMgaW1wb3J0IHBvcnQKK2Zyb20gd2Vi
a2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0X2V4cGVjdGF0aW9u
cwogCi1fbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoIndlYmtpdHB5LmxheW91dF90ZXN0cy4iCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgInJlYmFzZWxpbmVfY2hyb21pdW1fd2Via2l0X3Rlc3Rz
IikKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKIAogQkFTRUxJTkVfU1VGRklY
RVMgPSBbJy50eHQnLCAnLnBuZycsICcuY2hlY2tzdW0nXQogUkVCQVNFTElORV9QTEFURk9STV9P
UkRFUiA9IFsnbWFjJywgJ3dpbicsICd3aW4teHAnLCAnd2luLXZpc3RhJywgJ2xpbnV4J10KQEAg
LTE0Miw3ICsxNDEsNyBAQCBjbGFzcyBSZWJhc2VsaW5lcihvYmplY3QpOgogCiAgICAgUkVWSVNJ
T05fUkVHRVggPSByJzxhIGhyZWY9XCIoXGQrKS9cIj4nCiAKLSAgICBkZWYgX19pbml0X18oc2Vs
ZiwgcnVubmluZ19wb3J0LCB0YXJnZXRfcG9ydCwgcGxhdGZvcm0sIG9wdGlvbnMpOgorICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBydW5uaW5nX3BvcnQsIHRhcmdldF9wb3J0LCBwbGF0Zm9ybSwgb3B0
aW9ucywgdXJsX2ZldGNoZXIsIHppcF9mYWN0b3J5LCBzY20pOgogICAgICAgICAiIiIKICAgICAg
ICAgQXJnczoKICAgICAgICAgICAgIHJ1bm5pbmdfcG9ydDogdGhlIFBvcnQgdGhlIHNjcmlwdCBp
cyBydW5uaW5nIG9uLgpAQCAtMTUwLDE0ICsxNDksMTkgQEAgY2xhc3MgUmViYXNlbGluZXIob2Jq
ZWN0KToKICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGxpa2UgdGhl
IHRlc3RfZXhwZWN0YXRpb25zLnR4dAogICAgICAgICAgICAgICAgIGZpbGUgbG9jYXRpb24gYW5k
IHRoZSBsaXN0IG9mIHRlc3QgcGxhdGZvcm1zLgogICAgICAgICAgICAgcGxhdGZvcm06IHRoZSB0
ZXN0IHBsYXRmb3JtIHRvIHJlYmFzZWxpbmUKLSAgICAgICAgICAgIG9wdGlvbnM6IHRoZSBjb21t
YW5kLWxpbmUgb3B0aW9ucyBvYmplY3QuIiIiCisgICAgICAgICAgICBvcHRpb25zOiB0aGUgY29t
bWFuZC1saW5lIG9wdGlvbnMgb2JqZWN0LgorICAgICAgICAgICAgdXJsX2ZldGNoZXI6IG9iamVj
dCB0aGF0IGNhbiBmZXRjaCBvYmplY3RzIGZyb20gVVJMcworICAgICAgICAgICAgemlwX2ZhY3Rv
cnk6IG9wdGlvbmFsIG9iamVjdCB0aGF0IGNhbiBmZXRjaCB6aXAgZmlsZXMgZnJvbSBVUkxzCisg
ICAgICAgICAgICBzY206IHNjbSBvYmplY3QgZm9yIGFkZGluZyBuZXcgYmFzZWxpbmVzCisgICAg
ICAgICIiIgogICAgICAgICBzZWxmLl9wbGF0Zm9ybSA9IHBsYXRmb3JtCiAgICAgICAgIHNlbGYu
X29wdGlvbnMgPSBvcHRpb25zCiAgICAgICAgIHNlbGYuX3BvcnQgPSBydW5uaW5nX3BvcnQKICAg
ICAgICAgc2VsZi5fZmlsZXN5c3RlbSA9IHJ1bm5pbmdfcG9ydC5fZmlsZXN5c3RlbQogICAgICAg
ICBzZWxmLl90YXJnZXRfcG9ydCA9IHRhcmdldF9wb3J0CiAgICAgICAgIHNlbGYuX3JlYmFzZWxp
bmVfcG9ydCA9IHBvcnQuZ2V0KAotICAgICAgICAgICAgc2VsZi5fdGFyZ2V0X3BvcnQudGVzdF9w
bGF0Zm9ybV9uYW1lX3RvX25hbWUocGxhdGZvcm0pLCBvcHRpb25zKQorICAgICAgICAgICAgc2Vs
Zi5fdGFyZ2V0X3BvcnQudGVzdF9wbGF0Zm9ybV9uYW1lX3RvX25hbWUocGxhdGZvcm0pLCBvcHRp
b25zLAorICAgICAgICAgICAgZmlsZXN5c3RlbT1zZWxmLl9maWxlc3lzdGVtKQogICAgICAgICBz
ZWxmLl9yZWJhc2VsaW5pbmdfdGVzdHMgPSBbXQogICAgICAgICBzZWxmLl9yZWJhc2VsaW5lZF90
ZXN0cyA9IFtdCiAKQEAgLTE3Myw3ICsxNzcsOSBAQCBjbGFzcyBSZWJhc2VsaW5lcihvYmplY3Qp
OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9w
bGF0Zm9ybSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
RmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZh
bHNlKQotICAgICAgICBzZWxmLl9zY20gPSBzY20uZGVmYXVsdF9zY20oKQorICAgICAgICBzZWxm
Ll91cmxfZmV0Y2hlciA9IHVybF9mZXRjaGVyCisgICAgICAgIHNlbGYuX3ppcF9mYWN0b3J5ID0g
emlwX2ZhY3RvcnkKKyAgICAgICAgc2VsZi5fc2NtID0gc2NtCiAKICAgICBkZWYgcnVuKHNlbGYs
IGJhY2t1cCk6CiAgICAgICAgICIiIlJ1biByZWJhc2VsaW5lIHByb2Nlc3MuIiIiCkBAIC0xOTIs
OCArMTk4LDExIEBAIGNsYXNzIFJlYmFzZWxpbmVyKG9iamVjdCk6CiAgICAgICAgIGxvZ19kYXNo
ZWRfc3RyaW5nKCdFeHRyYWN0aW5nIGFuZCBhZGRpbmcgbmV3IGJhc2VsaW5lcycsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNlbGYuX3BsYXRmb3JtKQogICAgICAgICBpZiBub3Qgc2VsZi5f
ZXh0cmFjdF9hbmRfYWRkX25ld19iYXNlbGluZXMoYXJjaGl2ZV9maWxlKToKKyAgICAgICAgICAg
IGFyY2hpdmVfZmlsZS5jbG9zZSgpCiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKIAorICAgICAg
ICBhcmNoaXZlX2ZpbGUuY2xvc2UoKQorCiAgICAgICAgIGxvZ19kYXNoZWRfc3RyaW5nKCdVcGRh
dGluZyByZWJhc2VsaW5lZCB0ZXN0cyBpbiBmaWxlJywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2VsZi5fcGxhdGZvcm0pCiAgICAgICAgIHNlbGYuX3VwZGF0ZV9yZWJhc2VsaW5lZF90ZXN0
c19pbl9maWxlKGJhY2t1cCkKQEAgLTI1NCw5ICsyNjMsNyBAQCBjbGFzcyBSZWJhc2VsaW5lcihv
YmplY3QpOgogCiAgICAgICAgIF9sb2cuZGVidWcoJ1VybCB0byByZXRyaWV2ZSByZXZpc2lvbjog
IiVzIicsIHVybCkKIAotICAgICAgICBmID0gdXJsbGliLnVybG9wZW4odXJsKQotICAgICAgICBj
b250ZW50ID0gZi5yZWFkKCkKLSAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIGNvbnRlbnQgPSBz
ZWxmLl91cmxfZmV0Y2hlci5mZXRjaCh1cmwpCiAKICAgICAgICAgcmV2aXNpb25zID0gcmUuZmlu
ZGFsbChzZWxmLlJFVklTSU9OX1JFR0VYLCBjb250ZW50KQogICAgICAgICBpZiBub3QgcmV2aXNp
b25zOgpAQCAtMzEzLDMzICszMjAsMjQgQEAgY2xhc3MgUmViYXNlbGluZXIob2JqZWN0KToKICAg
ICAgICAgcmV0dXJuIGFyY2hpdmVfdXJsCiAKICAgICBkZWYgX2Rvd25sb2FkX2J1aWxkYm90X2Fy
Y2hpdmUoc2VsZik6Ci0gICAgICAgICIiIkRvd25sb2FkIGxheW91dCB0ZXN0IGFyY2hpdmUgZmls
ZSBmcm9tIGJ1aWxkYm90LgotCi0gICAgICAgIFJldHVybnM6Ci0gICAgICAgICAgVHJ1ZSBpZiBk
b3dubG9hZCBzdWNjZWVkZWQgb3IKLSAgICAgICAgICBGYWxzZSBvdGhlcndpc2UuCi0gICAgICAg
ICIiIgotCisgICAgICAgICIiIkRvd25sb2FkIGxheW91dCB0ZXN0IGFyY2hpdmUgZmlsZSBmcm9t
IGJ1aWxkYm90IGFuZCByZXR1cm4gYSBoYW5kbGUgdG8gaXQuIiIiCiAgICAgICAgIHVybCA9IHNl
bGYuX2dldF9hcmNoaXZlX3VybCgpCiAgICAgICAgIGlmIHVybCBpcyBOb25lOgogICAgICAgICAg
ICAgcmV0dXJuIE5vbmUKIAotICAgICAgICBmbiA9IHVybGxpYi51cmxyZXRyaWV2ZSh1cmwpWzBd
Ci0gICAgICAgIF9sb2cuaW5mbygnQXJjaGl2ZSBkb3dubG9hZGVkIGFuZCBzYXZlZCB0byBmaWxl
OiAiJXMiJywgZm4pCi0gICAgICAgIHJldHVybiBmbgotCi0gICAgZGVmIF9leHRyYWN0X2FuZF9h
ZGRfbmV3X2Jhc2VsaW5lcyhzZWxmLCBhcmNoaXZlX2ZpbGUpOgotICAgICAgICAiIiJFeHRyYWN0
IG5ldyBiYXNlbGluZXMgZnJvbSBhcmNoaXZlIGFuZCBhZGQgdGhlbSB0byBTVk4gcmVwb3NpdG9y
eS4KKyAgICAgICAgYXJjaGl2ZV9maWxlID0gemlwZmlsZXNldC5aaXBGaWxlU2V0KHVybCwgZmls
ZXN5c3RlbT1zZWxmLl9maWxlc3lzdGVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB6aXBfZmFjdG9yeT1zZWxmLl96aXBfZmFjdG9yeSkKKyAgICAgICAgX2xvZy5p
bmZvKCdBcmNoaXZlIGRvd25sb2FkZWQnKQorICAgICAgICByZXR1cm4gYXJjaGl2ZV9maWxlCiAK
LSAgICAgICAgQXJnczoKLSAgICAgICAgICBhcmNoaXZlX2ZpbGU6IGZ1bGwgcGF0aCB0byB0aGUg
YXJjaGl2ZSBmaWxlLgorICAgIGRlZiBfZXh0cmFjdF9hbmRfYWRkX25ld19iYXNlbGluZXMoc2Vs
ZiwgemlwX2ZpbGUpOgorICAgICAgICAiIiJFeHRyYWN0IG5ldyBiYXNlbGluZXMgZnJvbSB0aGUg
emlwIGZpbGUgYW5kIGFkZCB0aGVtIHRvIFNWTiByZXBvc2l0b3J5LgogCiAgICAgICAgIFJldHVy
bnM6CiAgICAgICAgICAgTGlzdCBvZiB0ZXN0cyB0aGF0IGhhdmUgYmVlbiByZWJhc2VsaW5lZCBv
cgogICAgICAgICAgIE5vbmUgb24gZmFpbHVyZS4KICAgICAgICAgIiIiCiAKLSAgICAgICAgemlw
X2ZpbGUgPSB6aXBmaWxlLlppcEZpbGUoYXJjaGl2ZV9maWxlLCAncicpCiAgICAgICAgIHppcF9u
YW1lbGlzdCA9IHppcF9maWxlLm5hbWVsaXN0KCkKIAogICAgICAgICBfbG9nLmRlYnVnKCd6aXAg
ZmlsZSBuYW1lbGlzdDonKQpAQCAtNDE5LDcgKzQxNyw2IEBAIGNsYXNzIFJlYmFzZWxpbmVyKG9i
amVjdCk6CiAgICAgICAgICAgICB0ZXN0X25vICs9IDEKIAogICAgICAgICB6aXBfZmlsZS5jbG9z
ZSgpCi0gICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0ucmVtb3ZlKGFyY2hpdmVfZmlsZSkKIAogICAg
ICAgICByZXR1cm4gc2VsZi5fcmViYXNlbGluZWRfdGVzdHMKIApAQCAtODU3LDE4ICs4NTQsOSBA
QCBkZWYgcGFyc2Vfb3B0aW9ucyhhcmdzKToKICAgICByZXR1cm4gKG9wdGlvbnMsIHRhcmdldF9v
cHRpb25zKQogCiAKLWRlZiBtYWluKCk6Ci0gICAgIiIiTWFpbiBmdW5jdGlvbiB0byBwcm9kdWNl
IG5ldyBiYXNlbGluZXMuIiIiCi0KLSAgICAob3B0aW9ucywgdGFyZ2V0X29wdGlvbnMpID0gcGFy
c2Vfb3B0aW9ucyhzeXMuYXJndlsxOl0pCi0KLSAgICAjIFdlIG5lZWQgdG8gY3JlYXRlIHRocmVl
IGRpZmZlcmVudCBQb3J0IG9iamVjdHMgb3ZlciB0aGUgbGlmZSBvZiB0aGlzCi0gICAgIyBzY3Jp
cHQuIHx0YXJnZXRfcG9ydF9vYmp8IGlzIHVzZWQgdG8gZGV0ZXJtaW5lIGNvbmZpZ3VyYXRpb24g
aW5mb3JtYXRpb246Ci0gICAgIyBsb2NhdGlvbiBvZiB0aGUgZXhwZWN0YXRpb25zIGZpbGUsIG5h
bWVzIG9mIHBvcnRzIHRvIHJlYmFzZWxpbmUsIGV0Yy4KLSAgICAjIHxwb3J0X29ianwgaXMgdXNl
ZCBmb3IgcnVudGltZSBmdW5jdGlvbmFsaXR5IGxpa2UgYWN0dWFsbHkgZGlmZmluZwotICAgICMg
VGhlbiB3ZSBjcmVhdGUgYSByZWJhc2VsaW5pbmcgcG9ydCB0byBhY3R1YWwgZmluZCBhbmQgbWFu
YWdlIHRoZQotICAgICMgYmFzZWxpbmVzLgotICAgIHRhcmdldF9wb3J0X29iaiA9IHBvcnQuZ2V0
KE5vbmUsIHRhcmdldF9vcHRpb25zKQorZGVmIG1haW4oYXJncyk6CisgICAgIiIiQm9vdHN0cmFw
IGZ1bmN0aW9uIHRoYXQgc2V0cyB1cCB0aGUgb2JqZWN0IHJlZmVyZW5jZXMgd2UgbmVlZCBhbmQg
Y2FsbHMgcmVhbF9tYWluKCkuIiIiCisgICAgb3B0aW9ucywgdGFyZ2V0X29wdGlvbnMgPSBwYXJz
ZV9vcHRpb25zKGFyZ3MpCiAKICAgICAjIFNldCB1cCBvdXIgbG9nZ2luZyBmb3JtYXQuCiAgICAg
bG9nX2xldmVsID0gbG9nZ2luZy5JTkZPCkBAIC04NzksMjAgKzg2Nyw1MyBAQCBkZWYgbWFpbigp
OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJShsZXZlbG5hbWUpcyAlKG1lc3Nh
Z2UpcycpLAogICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZWZtdD0nJXklbSVkICVIOiVNOiVT
JykKIAorICAgIHRhcmdldF9wb3J0X29iaiA9IHBvcnQuZ2V0KE5vbmUsIHRhcmdldF9vcHRpb25z
KQogICAgIGhvc3RfcG9ydF9vYmogPSBnZXRfaG9zdF9wb3J0X29iamVjdChvcHRpb25zKQotICAg
IGlmIG5vdCBob3N0X3BvcnRfb2JqOgotICAgICAgICBzeXMuZXhpdCgxKQorICAgIGlmIG5vdCBo
b3N0X3BvcnRfb2JqIG9yIG5vdCB0YXJnZXRfcG9ydF9vYmo6CisgICAgICAgIHJldHVybiAxCisK
KyAgICB1cmxfZmV0Y2hlciA9IHVybGZldGNoZXIuVXJsRmV0Y2hlcihob3N0X3BvcnRfb2JqLl9m
aWxlc3lzdGVtKQorICAgIHNjbV9vYmogPSBzY20uZGVmYXVsdF9zY20oKQorCisgICAgIyBXZSB1
c2UgdGhlIGRlZmF1bHQgemlwIGZhY3RvcnkgbWV0aG9kLgorICAgIHppcF9mYWN0b3J5ID0gTm9u
ZQorCisgICAgcmV0dXJuIHJlYWxfbWFpbihvcHRpb25zLCB0YXJnZXRfb3B0aW9ucywgaG9zdF9w
b3J0X29iaiwgdGFyZ2V0X3BvcnRfb2JqLCB1cmxfZmV0Y2hlciwKKyAgICAgICAgICAgICAgICAg
ICAgIHppcF9mYWN0b3J5LCBzY21fb2JqKQogCisKK2RlZiByZWFsX21haW4ob3B0aW9ucywgdGFy
Z2V0X29wdGlvbnMsIGhvc3RfcG9ydF9vYmosIHRhcmdldF9wb3J0X29iaiwgdXJsX2ZldGNoZXIs
CisgICAgICAgICAgICAgIHppcF9mYWN0b3J5LCBzY21fb2JqKToKKyAgICAiIiJNYWluIGZ1bmN0
aW9uIHRvIHByb2R1Y2UgbmV3IGJhc2VsaW5lcy4gVGhlIFJlYmFzZWxpbmVyIG9iamVjdCB1c2Vz
IHR3bworICAgIGRpZmZlcmVudCBQb3J0IG9iamVjdHMgLSBvbmUgdG8gcmVwcmVzZW50IHRoZSBt
YWNoaW5lIHRoZSBvYmplY3QgaXMgcnVubmluZworICAgIG9uLCBhbmQgb25lIHRvIHJlcHJlc2Vu
dCB0aGUgcG9ydCB3aG9zZSBleHBlY3RhdGlvbnMgYXJlIGJlaW5nIHVwZGF0ZWQuCisgICAgRS5n
LiwgeW91IGNhbiBydW4gdGhlIHNjcmlwdCBvbiBhIG1hYyBhbmQgcmViYXNlbGluZSB0aGUgJ3dp
bicgcG9ydC4KKworICAgIEFyZ3M6CisgICAgICAgIG9wdGlvbnM6IGNvbW1hbmQtbGluZSBhcmd1
bWVudCB1c2VkIGZvciB0aGUgaG9zdF9wb3J0X29iaiAoc2VlIGJlbG93KQorICAgICAgICB0YXJn
ZXRfb3B0aW9uczogY29tbWFuZF9saW5lIGFyZ3VtZW50IHVzZWQgZm9yIHRoZSB0YXJnZXRfcG9y
dF9vYmouCisgICAgICAgICAgICBUaGlzIG9iamVjdCBtYXkgaGF2ZSBzbGlnaHRseSBkaWZmZXJl
bnQgdmFsdWVzIHRoYW4gfG9wdGlvbnN8LgorICAgICAgICBob3N0X3BvcnRfb2JqOiBhIFBvcnQg
b2JqZWN0IGZvciB0aGUgcGxhdGZvcm0gdGhlIHNjcmlwdCBpcyBydW5uaW5nCisgICAgICAgICAg
ICBvbi4gVGhpcyBpcyB1c2VkIHRvIHByb2R1Y2UgaW1hZ2UgYW5kIHRleHQgZGlmZnMsIG1vc3Rs
eSwgYW5kCisgICAgICAgICAgICBpcyB1c3VhbGx5IGFjcXVpcmVkIGZyb20gZ2V0X2hvc3RfcG9y
dF9vYmooKS4KKyAgICAgICAgdGFyZ2V0X3BvcnRfb2JqOiBhIFBvcnQgb2JqIHJlcHJlc2VudGlu
ZyB0aGUgcG9ydCBnZXR0aW5nIHJlYmFzZWxpbmVkLgorICAgICAgICAgICAgVGhpcyBpcyB1c2Vk
IHRvIGZpbmQgdGhlIGV4cGVjdGF0aW9ucyBmaWxlLCB0aGUgYmFzZWxpbmUgcGF0aHMsCisgICAg
ICAgICAgICBldGMuCisgICAgICAgIHVybF9mZXRjaGVyOiBvYmplY3QgdXNlZCB0byBkb3dubG9h
ZCB0aGUgYnVpbGQgYXJjaGl2ZXMgZnJvbSB0aGUgYm90cworICAgICAgICB6aXBfZmFjdG9yeTog
ZmFjdG9yeSBmdW5jdGlvbiB1c2VkIHRvIGNyZWF0ZSB6aXAgZmlsZSBvYmplY3RzIGZvcgorICAg
ICAgICAgICAgdGhlIGFyY2hpdmVzLgorICAgICAgICBzY21fb2JqOiBvYmplY3QgdXNlZCB0byBh
ZGQgbmV3IGJhc2VsaW5lcyB0byB0aGUgc291cmNlIGNvbnRyb2wgc3lzdGVtLgorICAgICIiIgog
ICAgICMgVmVyaWZ5ICdwbGF0Zm9ybXMnIG9wdGlvbiBpcyB2YWxpZC4KICAgICBpZiBub3Qgb3B0
aW9ucy5wbGF0Zm9ybXM6CiAgICAgICAgIF9sb2cuZXJyb3IoJ0ludmFsaWQgInBsYXRmb3JtcyIg
b3B0aW9uLiAtLXBsYXRmb3JtcyBtdXN0IGJlICcKICAgICAgICAgICAgICAgICAgICAnc3BlY2lm
aWVkIGluIG9yZGVyIHRvIHJlYmFzZWxpbmUuJykKLSAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAg
ICAgcmV0dXJuIDEKICAgICBwbGF0Zm9ybXMgPSBbcC5zdHJpcCgpLmxvd2VyKCkgZm9yIHAgaW4g
b3B0aW9ucy5wbGF0Zm9ybXMuc3BsaXQoJywnKV0KICAgICBmb3IgcGxhdGZvcm0gaW4gcGxhdGZv
cm1zOgogICAgICAgICBpZiBub3QgcGxhdGZvcm0gaW4gUkVCQVNFTElORV9QTEFURk9STV9PUkRF
UjoKICAgICAgICAgICAgIF9sb2cuZXJyb3IoJ0ludmFsaWQgcGxhdGZvcm06ICIlcyInICUgKHBs
YXRmb3JtKSkKLSAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgICAgICByZXR1cm4gMQog
CiAgICAgIyBBZGp1c3QgdGhlIHBsYXRmb3JtIG9yZGVyIHNvIHJlYmFzZWxpbmUgdG9vbCBpcyBy
dW5uaW5nIGF0IHRoZSBvcmRlciBvZgogICAgICMgJ21hYycsICd3aW4nIGFuZCAnbGludXgnLiBU
aGlzIGlzIGluIHNhbWUgb3JkZXIgd2l0aCBsYXlvdXQgdGVzdCBiYXNlbGluZQpAQCAtOTA5LDcg
KzkzMCw4IEBAIGRlZiBtYWluKCk6CiAgICAgYmFja3VwID0gb3B0aW9ucy5iYWNrdXAKICAgICBm
b3IgcGxhdGZvcm0gaW4gcmViYXNlbGluZV9wbGF0Zm9ybXM6CiAgICAgICAgIHJlYmFzZWxpbmVy
ID0gUmViYXNlbGluZXIoaG9zdF9wb3J0X29iaiwgdGFyZ2V0X3BvcnRfb2JqLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtLCBvcHRpb25zKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtLCBvcHRpb25zLCB1cmxfZmV0Y2hlciwgemlw
X2ZhY3RvcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NtX29iaikKIAog
ICAgICAgICBfbG9nLmluZm8oJycpCiAgICAgICAgIGxvZ19kYXNoZWRfc3RyaW5nKCdSZWJhc2Vs
aW5lIHN0YXJ0ZWQnLCBwbGF0Zm9ybSkKQEAgLTkzNCw3ICs5NTYsOCBAQCBkZWYgbWFpbigpOgog
ICAgICAgICBodG1sX2dlbmVyYXRvci5zaG93X2h0bWwoKQogICAgIGxvZ19kYXNoZWRfc3RyaW5n
KCdSZWJhc2VsaW5pbmcgcmVzdWx0IGNvbXBhcmlzb24gZG9uZScsIE5vbmUpCiAKLSAgICBzeXMu
ZXhpdCgwKQorICAgIHJldHVybiAwCisKIAogaWYgJ19fbWFpbl9fJyA9PSBfX25hbWVfXzoKLSAg
ICBtYWluKCkKKyAgICBzeXMuZXhpdChtYWluKHN5cy5hcmd2WzE6XSkpCmRpZmYgLS1naXQgYS9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9yZWJhc2VsaW5lX2Nocm9taXVtX3dl
YmtpdF90ZXN0c191bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3JlYmFzZWxpbmVfY2hyb21pdW1fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5CmluZGV4IGEw
ZjVlZWIxMzZmNGYyOTlhNDk1MWViMDM0N2E2ZWI0MjBkODAzMzcuLmFhY2UwMzZmZTUyMDg3Mjg1
ZDIyYjkxMjE2Y2NiY2RiZGFiZDI2YWMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3JlYmFzZWxpbmVfY2hyb21pdW1fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0
LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3JlYmFzZWxpbmVf
Y2hyb21pdW1fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5CkBAIC0zMiwxMCArMzIsMTQgQEAKIGlt
cG9ydCB1bml0dGVzdAogCiBmcm9tIHdlYmtpdHB5LnRvb2wgaW1wb3J0IG1vY2t0b29sCitmcm9t
IHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0gaW1wb3J0IHVybGZldGNoZXJfbW9jaworZnJvbSB3ZWJr
aXRweS5jb21tb24uc3lzdGVtIGltcG9ydCBmaWxlc3lzdGVtX21vY2sKK2Zyb20gd2Via2l0cHku
Y29tbW9uLnN5c3RlbSBpbXBvcnQgemlwZmlsZXNldF9tb2NrCitmcm9tIHdlYmtpdHB5LmNvbW1v
bi5zeXN0ZW0gaW1wb3J0IG91dHB1dGNhcHR1cmUKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3Rl
bS5leGVjdXRpdmUgaW1wb3J0IEV4ZWN1dGl2ZSwgU2NyaXB0RXJyb3IKIAotaW1wb3J0IHBvcnQK
LWltcG9ydCByZWJhc2VsaW5lX2Nocm9taXVtX3dlYmtpdF90ZXN0cworZnJvbSB3ZWJraXRweS5s
YXlvdXRfdGVzdHMgaW1wb3J0IHBvcnQKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzIGltcG9y
dCByZWJhc2VsaW5lX2Nocm9taXVtX3dlYmtpdF90ZXN0cwogCiAKIGNsYXNzIE1vY2tQb3J0KG9i
amVjdCk6CkBAIC01Miw2ICs1Niw1NyBAQCBkZWYgZ2V0X21vY2tfZ2V0KGNvbmZpZ19leHBlY3Rh
dGlvbnMpOgogICAgIHJldHVybiBtb2NrX2dldAogCiAKK0FSQ0hJVkVfVVJMID0gJ2h0dHA6Ly9s
b2NhbGhvc3QvbGF5b3V0X3Rlc3RfcmVzdWx0cycKKworCitkZWYgdGVzdF9vcHRpb25zKCk6Cisg
ICAgcmV0dXJuIG1vY2t0b29sLk1vY2tPcHRpb25zKGNvbmZpZ3VyYXRpb249Tm9uZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja3VwPUZhbHNlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBodG1sX2RpcmVjdG9yeT0nL3RtcCcsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFyY2hpdmVfdXJsPUFSQ0hJVkVfVVJMLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmb3JjZV9hcmNoaXZlX3VybD1Ob25lLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB3ZWJraXRfY2FuYXJ5PVRydWUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVzZV9kcnQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRhcmdldF9wbGF0Zm9ybT0nY2hyb21pdW0nLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2ZXJib3NlPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBx
dWlldD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhdGZvcm1zPSdt
YWMsd2luJykKKworCitkZWYgdGVzdF9ob3N0X3BvcnRfYW5kX2ZpbGVzeXN0ZW0ob3B0aW9ucywg
ZXhwZWN0YXRpb25zKToKKyAgICBmaWxlc3lzdGVtID0gcG9ydC51bml0X3Rlc3RfZmlsZXN5c3Rl
bSgpCisgICAgaG9zdF9wb3J0X29iaiA9IHBvcnQuZ2V0KCd0ZXN0Jywgb3B0aW9ucywgZmlsZXN5
c3RlbT1maWxlc3lzdGVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyPW1vY2t0
b29sLk1vY2tVc2VyKCkpCisKKyAgICBleHBlY3RhdGlvbnNfcGF0aCA9IGhvc3RfcG9ydF9vYmou
cGF0aF90b190ZXN0X2V4cGVjdGF0aW9uc19maWxlKCkKKyAgICBmaWxlc3lzdGVtLndyaXRlX3Rl
eHRfZmlsZShleHBlY3RhdGlvbnNfcGF0aCwgZXhwZWN0YXRpb25zKQorICAgIHJldHVybiAoaG9z
dF9wb3J0X29iaiwgZmlsZXN5c3RlbSkKKworCitkZWYgdGVzdF91cmxfZmV0Y2hlcihmaWxlc3lz
dGVtKToKKyAgICB1cmxzID0geworICAgICAgICBBUkNISVZFX1VSTCArICcvV2Via2l0X01hYzEw
XzUvJzogJzxhIGhyZWY9IjEvIj48YSBocmVmPSIyLyI+JywKKyAgICAgICAgQVJDSElWRV9VUkwg
KyAnL1dlYmtpdF9XaW4vJzogJzxhIGhyZWY9IjEvIj4nLAorICAgIH0KKyAgICByZXR1cm4gdXJs
ZmV0Y2hlcl9tb2NrLm1ha2VfZmV0Y2hlcl9jbHModXJscykoZmlsZXN5c3RlbSkKKworCitkZWYg
dGVzdF96aXBfZmFjdG9yeSgpOgorICAgIHppcGhhc2hlcyA9IHsKKyAgICAgICAgQVJDSElWRV9V
UkwgKyAnL1dlYmtpdF9NYWMxMF81LzIvbGF5b3V0LXRlc3QtcmVzdWx0cy56aXAnOiB7CisgICAg
ICAgICAgICAnbGF5b3V0LXRlc3QtcmVzdWx0cy9mYWlsdXJlcy9leHBlY3RlZC9pbWFnZS1hY3R1
YWwudHh0JzogJ25ldy1pbWFnZS10eHQnLAorICAgICAgICAgICAgJ2xheW91dC10ZXN0LXJlc3Vs
dHMvZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2UtYWN0dWFsLmNoZWNrc3VtJzogJ25ldy1pbWFnZS1j
aGVja3N1bScsCisgICAgICAgICAgICAnbGF5b3V0LXRlc3QtcmVzdWx0cy9mYWlsdXJlcy9leHBl
Y3RlZC9pbWFnZS1hY3R1YWwucG5nJzogJ25ldy1pbWFnZS1wbmcnLAorICAgICAgICB9LAorICAg
ICAgICBBUkNISVZFX1VSTCArICcvV2Via2l0X1dpbi8xL2xheW91dC10ZXN0LXJlc3VsdHMuemlw
JzogeworICAgICAgICAgICAgJ2xheW91dC10ZXN0LXJlc3VsdHMvZmFpbHVyZXMvZXhwZWN0ZWQv
aW1hZ2UtYWN0dWFsLnR4dCc6ICd3aW4taW1hZ2UtdHh0JywKKyAgICAgICAgICAgICdsYXlvdXQt
dGVzdC1yZXN1bHRzL2ZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlLWFjdHVhbC5jaGVja3N1bSc6ICd3
aW4taW1hZ2UtY2hlY2tzdW0nLAorICAgICAgICAgICAgJ2xheW91dC10ZXN0LXJlc3VsdHMvZmFp
bHVyZXMvZXhwZWN0ZWQvaW1hZ2UtYWN0dWFsLnBuZyc6ICd3aW4taW1hZ2UtcG5nJywKKyAgICAg
ICAgfSwKKyAgICB9CisgICAgcmV0dXJuIHppcGZpbGVzZXRfbW9jay5tYWtlX2ZhY3Rvcnkoemlw
aGFzaGVzKQorCisKIGNsYXNzIFRlc3RHZXRIb3N0UG9ydE9iamVjdCh1bml0dGVzdC5UZXN0Q2Fz
ZSk6CiAgICAgZGVmIGFzc2VydF9yZXN1bHQoc2VsZiwgcmVsZWFzZV9wcmVzZW50LCBkZWJ1Z19w
cmVzZW50LCB2YWxpZF9wb3J0X29iaik6CiAgICAgICAgICMgVGVzdHMgd2hldGhlciB3ZSBnZXQg
YSB2YWxpZCBwb3J0IG9iamVjdCByZXR1cm5lZCB3aGVuIHdlIGNsYWltCkBAIC01OSw5ICsxMTQs
OCBAQCBjbGFzcyBUZXN0R2V0SG9zdFBvcnRPYmplY3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAg
ICAgICBwb3J0LmdldCA9IGdldF9tb2NrX2dldCh7J1JlbGVhc2UnOiByZWxlYXNlX3ByZXNlbnQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRGVidWcnOiBkZWJ1Z19wcmVzZW50
fSkKICAgICAgICAgb3B0aW9ucyA9IG1vY2t0b29sLk1vY2tPcHRpb25zKGNvbmZpZ3VyYXRpb249
Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWxfZGlyZWN0
b3J5PU5vbmUpCi0gICAgICAgIHBvcnRfb2JqID0gcmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRf
dGVzdHMuZ2V0X2hvc3RfcG9ydF9vYmplY3QoCi0gICAgICAgICAgICBvcHRpb25zKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbF9kaXJlY3Rvcnk9Jy90bXAnKQor
ICAgICAgICBwb3J0X29iaiA9IHJlYmFzZWxpbmVfY2hyb21pdW1fd2Via2l0X3Rlc3RzLmdldF9o
b3N0X3BvcnRfb2JqZWN0KG9wdGlvbnMpCiAgICAgICAgIGlmIHZhbGlkX3BvcnRfb2JqOgogICAg
ICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChwb3J0X29iaiwgTm9uZSkKICAgICAgICAgZWxz
ZToKQEAgLTgzLDE4ICsxMzcsNyBAQCBjbGFzcyBUZXN0R2V0SG9zdFBvcnRPYmplY3QodW5pdHRl
c3QuVGVzdENhc2UpOgogICAgICAgICBwb3J0LmdldCA9IG9sZF9nZXQKIAogCi1jbGFzcyBUZXN0
UmViYXNlbGluZXIodW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGRlZiBtYWtlX3JlYmFzZWxpbmVy
KHNlbGYpOgotICAgICAgICBvcHRpb25zID0gbW9ja3Rvb2wuTW9ja09wdGlvbnMoY29uZmlndXJh
dGlvbj1Ob25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbF9k
aXJlY3Rvcnk9Tm9uZSkKLSAgICAgICAgZmlsZXN5c3RlbSA9IHBvcnQudW5pdF90ZXN0X2ZpbGVz
eXN0ZW0oKQotICAgICAgICBob3N0X3BvcnRfb2JqID0gcG9ydC5nZXQoJ3Rlc3QnLCBvcHRpb25z
LCBmaWxlc3lzdGVtPWZpbGVzeXN0ZW0pCi0gICAgICAgIHRhcmdldF9vcHRpb25zID0gb3B0aW9u
cwotICAgICAgICB0YXJnZXRfcG9ydF9vYmogPSBwb3J0LmdldCgndGVzdCcsIHRhcmdldF9vcHRp
b25zLCBmaWxlc3lzdGVtPWZpbGVzeXN0ZW0pCi0gICAgICAgIHBsYXRmb3JtID0gdGFyZ2V0X3Bv
cnRfb2JqLnRlc3RfcGxhdGZvcm1fbmFtZSgpCi0gICAgICAgIHJldHVybiByZWJhc2VsaW5lX2No
cm9taXVtX3dlYmtpdF90ZXN0cy5SZWJhc2VsaW5lcigKLSAgICAgICAgICAgIGhvc3RfcG9ydF9v
YmosIHRhcmdldF9wb3J0X29iaiwgcGxhdGZvcm0sIG9wdGlvbnMpCi0KK2NsYXNzIFRlc3RPcHRp
b25zKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9wYXJzZV9vcHRpb25zKHNlbGYp
OgogICAgICAgICAob3B0aW9ucywgdGFyZ2V0X29wdGlvbnMpID0gcmViYXNlbGluZV9jaHJvbWl1
bV93ZWJraXRfdGVzdHMucGFyc2Vfb3B0aW9ucyhbXSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVl
KHRhcmdldF9vcHRpb25zLmNocm9taXVtKQpAQCAtMTA0LDM5ICsxNDcsMTA2IEBAIGNsYXNzIFRl
c3RSZWJhc2VsaW5lcih1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHNlbGYuYXNzZXJ0RmFs
c2UoaGFzYXR0cih0YXJnZXRfb3B0aW9ucywgJ2Nocm9taXVtJykpCiAgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwob3B0aW9ucy50b2xlcmFuY2UsIDApCiAKKworY2xhc3MgVGVzdFJlYmFzZWxpbmVy
KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgbWFrZV9yZWJhc2VsaW5lcihzZWxmLCBleHBl
Y3RhdGlvbnMpOgorICAgICAgICBvcHRpb25zID0gdGVzdF9vcHRpb25zKCkKKyAgICAgICAgaG9z
dF9wb3J0X29iaiwgZmlsZXN5c3RlbSA9IHRlc3RfaG9zdF9wb3J0X2FuZF9maWxlc3lzdGVtKG9w
dGlvbnMsIGV4cGVjdGF0aW9ucykKKworICAgICAgICB0YXJnZXRfb3B0aW9ucyA9IG9wdGlvbnMK
KyAgICAgICAgdGFyZ2V0X3BvcnRfb2JqID0gcG9ydC5nZXQoJ3Rlc3QnLCB0YXJnZXRfb3B0aW9u
cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXN5c3RlbT1maWxlc3lz
dGVtKQorICAgICAgICB0YXJnZXRfcG9ydF9vYmouX2V4cGVjdGF0aW9ucyA9IGV4cGVjdGF0aW9u
cworICAgICAgICBwbGF0Zm9ybSA9IHRhcmdldF9wb3J0X29iai50ZXN0X3BsYXRmb3JtX25hbWUo
KQorCisgICAgICAgIHVybF9mZXRjaGVyID0gdGVzdF91cmxfZmV0Y2hlcihmaWxlc3lzdGVtKQor
ICAgICAgICB6aXBfZmFjdG9yeSA9IHRlc3RfemlwX2ZhY3RvcnkoKQorICAgICAgICBtb2NrX3Nj
bSA9IG1vY2t0b29sLk1vY2tTQ00oKQorICAgICAgICByZWJhc2VsaW5lciA9IHJlYmFzZWxpbmVf
Y2hyb21pdW1fd2Via2l0X3Rlc3RzLlJlYmFzZWxpbmVyKGhvc3RfcG9ydF9vYmosCisgICAgICAg
ICAgICB0YXJnZXRfcG9ydF9vYmosIHBsYXRmb3JtLCBvcHRpb25zLCB1cmxfZmV0Y2hlciwgemlw
X2ZhY3RvcnksIG1vY2tfc2NtKQorICAgICAgICByZXR1cm4gcmViYXNlbGluZXIsIGZpbGVzeXN0
ZW0KKwogICAgIGRlZiB0ZXN0X25vb3Aoc2VsZik6CiAgICAgICAgICMgdGhpcyBtZXRob2QgdGVz
dHMgdGhhdCB3YXMgY2FuIGF0IGxlYXN0IGluc3RhbnRpYXRlIGFuIG9iamVjdCwgZXZlbgogICAg
ICAgICAjIGlmIHRoZXJlIGlzIG5vdGhpbmcgdG8gZG8uCi0gICAgICAgIHJlYmFzZWxpbmVyID0g
c2VsZi5tYWtlX3JlYmFzZWxpbmVyKCkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyZWJh
c2VsaW5lciwgTm9uZSkKKyAgICAgICAgcmViYXNlbGluZXIsIGZpbGVzeXN0ZW0gPSBzZWxmLm1h
a2VfcmViYXNlbGluZXIoIiIpCisgICAgICAgIHJlYmFzZWxpbmVyLnJ1bihGYWxzZSkKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZmlsZXN5c3RlbS53cml0dGVuX2ZpbGVzKSwgMSkKKwor
ICAgIGRlZiB0ZXN0X29uZV9wbGF0Zm9ybShzZWxmKToKKyAgICAgICAgcmViYXNlbGluZXIsIGZp
bGVzeXN0ZW0gPSBzZWxmLm1ha2VfcmViYXNlbGluZXIoCisgICAgICAgICAgICAiQlVHWCBSRUJB
U0VMSU5FIE1BQyA6IGZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlLmh0bWwgPSBJTUFHRSIpCisgICAg
ICAgIHJlYmFzZWxpbmVyLnJ1bihGYWxzZSkKKyAgICAgICAgIyBXZSBleHBlY3QgdG8gaGF2ZSB3
cml0dGVuIDEyIGZpbGVzIG92ZXIgdGhlIGNvdXJzZSBvZiB0aGlzIHJlYmFzZWxpbmU6CisgICAg
ICAgICMgKikgMyBmaWxlcyBpbiAvX19pbV90bXAgZm9yIHRoZSBleHRyYWN0ZWQgYXJjaGl2ZSBt
ZW1iZXJzCisgICAgICAgICMgKikgMyBuZXcgYmFzZWxpbmVzIHVuZGVyICcvdGVzdC5jaGVja291
dC9MYXlvdXRUZXN0cycKKyAgICAgICAgIyAqKSAxIHVwZGF0ZWQgdGVzdF9leHBlY3RhdGlvbnMg
ZmlsZQorICAgICAgICAjICopIDQgZmlsZXMgaW4gL3RtcCBmb3IgdGhlIG5ldyBhbmQgb2xkIGJh
c2VsaW5lcyBpbiB0aGUgcmVzdWx0IGZpbGUKKyAgICAgICAgIyAqKSAxIHRleHQgZGlmZiBpbiAv
dG1wIGZvciB0aGUgcmVzdWx0IGZpbGUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZmls
ZXN5c3RlbS53cml0dGVuX2ZpbGVzKSwgMTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmls
ZXN5c3RlbS5maWxlc1snL3Rlc3QuY2hlY2tvdXQvTGF5b3V0VGVzdHMvcGxhdGZvcm0vdGVzdC90
ZXN0X2V4cGVjdGF0aW9ucy50eHQnXSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmls
ZXN5c3RlbS5maWxlc1snL3Rlc3QuY2hlY2tvdXQvTGF5b3V0VGVzdHMvcGxhdGZvcm0vdGVzdC1t
YWMvZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2UtZXhwZWN0ZWQuY2hlY2tzdW0nXSwgJ25ldy1pbWFn
ZS1jaGVja3N1bScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZXN5c3RlbS5maWxlc1sn
L3Rlc3QuY2hlY2tvdXQvTGF5b3V0VGVzdHMvcGxhdGZvcm0vdGVzdC1tYWMvZmFpbHVyZXMvZXhw
ZWN0ZWQvaW1hZ2UtZXhwZWN0ZWQucG5nJ10sICduZXctaW1hZ2UtcG5nJykKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChmaWxlc3lzdGVtLmZpbGVzWycvdGVzdC5jaGVja291dC9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS90ZXN0LW1hYy9mYWlsdXJlcy9leHBlY3RlZC9pbWFnZS1leHBlY3RlZC50eHQn
XSwgJ25ldy1pbWFnZS10eHQnKQorCisgICAgZGVmIHRlc3RfYWxsX3BsYXRmb3JtcyhzZWxmKToK
KyAgICAgICAgcmViYXNlbGluZXIsIGZpbGVzeXN0ZW0gPSBzZWxmLm1ha2VfcmViYXNlbGluZXIo
CisgICAgICAgICAgICAiQlVHWCBSRUJBU0VMSU5FIDogZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2Uu
aHRtbCA9IElNQUdFIikKKyAgICAgICAgcmViYXNlbGluZXIucnVuKEZhbHNlKQorICAgICAgICAj
IFNlZSBjb21tZW50IGluIHRlc3Rfb25lX3BsYXRmb3JtIGZvciBhbiBleHBsYW5hdGlvbiBvZiB0
aGUgMTIgd3JpdHRlbiB0ZXN0cy4KKyAgICAgICAgIyBOb3RlIHRoYXQgZXZlbiB0aG91Z2ggdGhl
IHJlYmFzZWxpbmUgaXMgbWFya2VkIGZvciBhbGwgcGxhdGZvcm1zLCBlYWNoCisgICAgICAgICMg
cmViYXNlbGluZXIgb25seSBldmVyIGRvZXMgb25lLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KGxlbihmaWxlc3lzdGVtLndyaXR0ZW5fZmlsZXMpLCAxMikKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChmaWxlc3lzdGVtLmZpbGVzWycvdGVzdC5jaGVja291dC9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS90ZXN0L3Rlc3RfZXhwZWN0YXRpb25zLnR4dCddLCAnQlVHWCBSRUJBU0VMSU5FIFdJTiA6IGZh
aWx1cmVzL2V4cGVjdGVkL2ltYWdlLmh0bWwgPSBJTUFHRVxuJykKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChmaWxlc3lzdGVtLmZpbGVzWycvdGVzdC5jaGVja291dC9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS90ZXN0LW1hYy9mYWlsdXJlcy9leHBlY3RlZC9pbWFnZS1leHBlY3RlZC5jaGVja3N1bSdd
LCAnbmV3LWltYWdlLWNoZWNrc3VtJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlc3lz
dGVtLmZpbGVzWycvdGVzdC5jaGVja291dC9MYXlvdXRUZXN0cy9wbGF0Zm9ybS90ZXN0LW1hYy9m
YWlsdXJlcy9leHBlY3RlZC9pbWFnZS1leHBlY3RlZC5wbmcnXSwgJ25ldy1pbWFnZS1wbmcnKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVzeXN0ZW0uZmlsZXNbJy90ZXN0LmNoZWNrb3V0
L0xheW91dFRlc3RzL3BsYXRmb3JtL3Rlc3QtbWFjL2ZhaWx1cmVzL2V4cGVjdGVkL2ltYWdlLWV4
cGVjdGVkLnR4dCddLCAnbmV3LWltYWdlLXR4dCcpCiAKICAgICBkZWYgdGVzdF9kaWZmX2Jhc2Vs
aW5lc190eHQoc2VsZik6Ci0gICAgICAgIHJlYmFzZWxpbmVyID0gc2VsZi5tYWtlX3JlYmFzZWxp
bmVyKCkKLSAgICAgICAgb3V0cHV0ID0gcmViYXNlbGluZXIuX3BvcnQuZXhwZWN0ZWRfdGV4dCgK
LSAgICAgICAgICAgIHJlYmFzZWxpbmVyLl9wb3J0Ll9maWxlc3lzdGVtLmpvaW4ocmViYXNlbGlu
ZXIuX3BvcnQubGF5b3V0X3Rlc3RzX2RpcigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAncGFzc2VzL3RleHQuaHRtbCcpKQorICAgICAgICByZWJhc2Vs
aW5lciwgZmlsZXN5c3RlbSA9IHNlbGYubWFrZV9yZWJhc2VsaW5lcigiIikKKyAgICAgICAgcG9y
dCA9IHJlYmFzZWxpbmVyLl9wb3J0CisgICAgICAgIG91dHB1dCA9IHBvcnQuZXhwZWN0ZWRfdGV4
dCgKKyAgICAgICAgICAgIHBvcnQuX2ZpbGVzeXN0ZW0uam9pbihwb3J0LmxheW91dF90ZXN0c19k
aXIoKSwgJ3Bhc3Nlcy90ZXh0Lmh0bWwnKSkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZWJh
c2VsaW5lci5fZGlmZl9iYXNlbGluZXMob3V0cHV0LCBvdXRwdXQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzX2ltYWdlPUZhbHNlKSkKIAog
ICAgIGRlZiB0ZXN0X2RpZmZfYmFzZWxpbmVzX3BuZyhzZWxmKToKLSAgICAgICAgcmViYXNlbGlu
ZXIgPSBzZWxmLm1ha2VfcmViYXNlbGluZXIoKQotICAgICAgICBpbWFnZSA9IHJlYmFzZWxpbmVy
Ll9wb3J0LmV4cGVjdGVkX2ltYWdlKAotICAgICAgICAgICAgcmViYXNlbGluZXIuX3BvcnQuX2Zp
bGVzeXN0ZW0uam9pbihyZWJhc2VsaW5lci5fcG9ydC5sYXlvdXRfdGVzdHNfZGlyKCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYXNzZXMvaW1hZ2Uu
aHRtbCcpKQorICAgICAgICByZWJhc2VsaW5lciwgZmlsZXN5c3RlbSA9IHNlbGYubWFrZV9yZWJh
c2VsaW5lcignJykKKyAgICAgICAgcG9ydCA9IHJlYmFzZWxpbmVyLl9wb3J0CisgICAgICAgIGlt
YWdlID0gcG9ydC5leHBlY3RlZF9pbWFnZSgKKyAgICAgICAgICAgIHBvcnQuX2ZpbGVzeXN0ZW0u
am9pbihwb3J0LmxheW91dF90ZXN0c19kaXIoKSwgJ3Bhc3Nlcy9pbWFnZS5odG1sJykpCiAgICAg
ICAgIHNlbGYuYXNzZXJ0RmFsc2UocmViYXNlbGluZXIuX2RpZmZfYmFzZWxpbmVzKGltYWdlLCBp
bWFnZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaXNfaW1hZ2U9VHJ1ZSkpCiAKIAorY2xhc3MgVGVzdFJlYWxNYWluKHVuaXR0ZXN0LlRlc3RD
YXNlKToKKyAgICBkZWYgdGVzdF9hbGxfcGxhdGZvcm1zKHNlbGYpOgorICAgICAgICBleHBlY3Rh
dGlvbnMgPSAiQlVHWCBSRUJBU0VMSU5FIDogZmFpbHVyZXMvZXhwZWN0ZWQvaW1hZ2UuaHRtbCA9
IElNQUdFIgorCisgICAgICAgIG9wdGlvbnMgPSB0ZXN0X29wdGlvbnMoKQorCisgICAgICAgIGhv
c3RfcG9ydF9vYmosIGZpbGVzeXN0ZW0gPSB0ZXN0X2hvc3RfcG9ydF9hbmRfZmlsZXN5c3RlbShv
cHRpb25zLCBleHBlY3RhdGlvbnMpCisgICAgICAgIHVybF9mZXRjaGVyID0gdGVzdF91cmxfZmV0
Y2hlcihmaWxlc3lzdGVtKQorICAgICAgICB6aXBfZmFjdG9yeSA9IHRlc3RfemlwX2ZhY3Rvcnko
KQorICAgICAgICBtb2NrX3NjbSA9IG1vY2t0b29sLk1vY2tTQ00oKQorICAgICAgICBvYyA9IG91
dHB1dGNhcHR1cmUuT3V0cHV0Q2FwdHVyZSgpCisgICAgICAgIG9jLmNhcHR1cmVfb3V0cHV0KCkK
KyAgICAgICAgcmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRfdGVzdHMucmVhbF9tYWluKG9wdGlv
bnMsIG9wdGlvbnMsIGhvc3RfcG9ydF9vYmosCisgICAgICAgICAgICBob3N0X3BvcnRfb2JqLCB1
cmxfZmV0Y2hlciwgemlwX2ZhY3RvcnksIG1vY2tfc2NtKQorICAgICAgICBvYy5yZXN0b3JlX291
dHB1dCgpCisKKyAgICAgICAgIyBXZSBleHBlY3QgdG8gaGF2ZSB3cml0dGVuIDI0IGZpbGVzIG92
ZXIgdGhlIGNvdXJzZSBvZiB0aGlzIHJlYmFzZWxpbmU6CisgICAgICAgICMgMiAqIHRlc3RfYWxs
X3BsYXRmb3JtcywgYWJvdmUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZmlsZXN5c3Rl
bS53cml0dGVuX2ZpbGVzKSwgMjQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZXN5c3Rl
bS5maWxlc1snL3Rlc3QuY2hlY2tvdXQvTGF5b3V0VGVzdHMvcGxhdGZvcm0vdGVzdC90ZXN0X2V4
cGVjdGF0aW9ucy50eHQnXSwgJycpCisKKwogY2xhc3MgVGVzdEh0bWxHZW5lcmF0b3IodW5pdHRl
c3QuVGVzdENhc2UpOgogICAgIGRlZiBtYWtlX2dlbmVyYXRvcihzZWxmLCBmaWxlcywgdGVzdHMp
OgogICAgICAgICBvcHRpb25zID0gbW9ja3Rvb2wuTW9ja09wdGlvbnMoY29uZmlndXJhdGlvbj1O
b25lLCBodG1sX2RpcmVjdG9yeT0nL3RtcCcpCiAgICAgICAgIGhvc3RfcG9ydCA9IHBvcnQuZ2V0
KCd0ZXN0Jywgb3B0aW9ucywgZmlsZXN5c3RlbT1wb3J0LnVuaXRfdGVzdF9maWxlc3lzdGVtKGZp
bGVzKSkKLSAgICAgICAgZ2VuZXJhdG9yID0gcmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRfdGVz
dHMuSHRtbEdlbmVyYXRvcigKLSAgICAgICAgICAgIGhvc3RfcG9ydCwKLSAgICAgICAgICAgIHRh
cmdldF9wb3J0PU5vbmUsCi0gICAgICAgICAgICBvcHRpb25zPW9wdGlvbnMsCi0gICAgICAgICAg
ICBwbGF0Zm9ybXM9WydtYWMnXSwKLSAgICAgICAgICAgIHJlYmFzZWxpbmluZ190ZXN0cz10ZXN0
cykKKyAgICAgICAgZ2VuZXJhdG9yID0gcmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRfdGVzdHMu
SHRtbEdlbmVyYXRvcihob3N0X3BvcnQsCisgICAgICAgICAgICB0YXJnZXRfcG9ydD1Ob25lLCBv
cHRpb25zPW9wdGlvbnMsIHBsYXRmb3Jtcz1bJ21hYyddLCByZWJhc2VsaW5pbmdfdGVzdHM9dGVz
dHMpCiAgICAgICAgIHJldHVybiBnZW5lcmF0b3IsIGhvc3RfcG9ydAogCiAgICAgZGVmIHRlc3Rf
Z2VuZXJhdGVfYmFzZWxpbmVfbGlua3Moc2VsZik6CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L3Rvb2wvbW9ja3Rvb2wucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wv
bW9ja3Rvb2wucHkKaW5kZXggMzY4MGQ0Y2VmODRlNjEzN2ZkYmE5MDQ2Y2UyZjgzZTQxOGUwMWY0
Ny4uNzJiZDFlYzBmMmUzNGUzNTRhYWM5YTIwZjA5MTk3NDRkNDQ2ODY0YiAxMDA2NDQKLS0tIGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL21vY2t0b29sLnB5CisrKyBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvdG9vbC9tb2NrdG9vbC5weQpAQCAtNDY0LDYgKzQ2NCwxMiBAQCBjbGFzcyBN
b2NrU0NNKE1vY2spOgogICAgICAgICAjIG9zLmdldGN3ZCgpIGNhbid0IHdvcmsgaGVyZSBiZWNh
dXNlIG90aGVyIHBhcnRzIG9mIHRoZSBjb2RlIGFzc3VtZSB0aGF0ICJjaGVja291dF9yb290Igog
ICAgICAgICAjIHdpbGwgYWN0dWFsbHkgYmUgdGhlIHJvb3QuICBTaW5jZSBnZXRjd2QoKSBpcyB3
cm9uZywgdXNlIGEgZ2xvYmFsbHkgZmFrZSByb290IGZvciBub3cuCiAgICAgICAgIHNlbGYuY2hl
Y2tvdXRfcm9vdCA9IHNlbGYuZmFrZV9jaGVja291dF9yb290CisgICAgICAgIHNlbGYuYWRkZWRf
cGF0aHMgPSBzZXQoKQorCisgICAgZGVmIGFkZChzZWxmLCBkZXN0aW5hdGlvbl9wYXRoLCByZXR1
cm5fZXhpdF9jb2RlPUZhbHNlKToKKyAgICAgICAgc2VsZi5hZGRlZF9wYXRocy5hZGQoZGVzdGlu
YXRpb25fcGF0aCkKKyAgICAgICAgaWYgcmV0dXJuX2V4aXRfY29kZToKKyAgICAgICAgICAgIHJl
dHVybiAwCiAKICAgICBkZWYgY2hhbmdlZF9maWxlcyhzZWxmLCBnaXRfY29tbWl0PU5vbmUpOgog
ICAgICAgICByZXR1cm4gWyJNb2NrRmlsZTEiXQpAQCAtNDgzLDE3ICs0ODksMTkgQEAgY2xhc3Mg
TW9ja1NDTShNb2NrKToKICAgICAgICAgICAgICAgICAiaHR0cHM6Ly9idWdzLmV4YW1wbGUub3Jn
L3Nob3dfYnVnLmNnaT9pZD03NVxuIikKICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJCb2d1cyBj
b21taXRfaWQgaW4gY29tbWl0X21lc3NhZ2VfZm9yX2xvY2FsX2NvbW1pdC4iKQogCisgICAgZGVm
IGRpZmZfZm9yX2ZpbGUoc2VsZiwgcGF0aCwgbG9nPU5vbmUpOgorICAgICAgICByZXR1cm4gcGF0
aCArICctZGlmZicKKwogICAgIGRlZiBkaWZmX2Zvcl9yZXZpc2lvbihzZWxmLCByZXZpc2lvbik6
CiAgICAgICAgIHJldHVybiAiRGlmZkZvclJldmlzaW9uJXNcbiIgXAogICAgICAgICAgICAgICAg
Imh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzQ1IiAlIHJldmlzaW9u
CiAKKyAgICBkZWYgc2hvd19oZWFkKHNlbGYsIHBhdGgpOgorICAgICAgICByZXR1cm4gcGF0aAor
CiAgICAgZGVmIHN2bl9yZXZpc2lvbl9mcm9tX2NvbW1pdF90ZXh0KHNlbGYsIGNvbW1pdF90ZXh0
KToKICAgICAgICAgcmV0dXJuICI0OTgyNCIKIAotICAgIGRlZiBhZGQoc2VsZiwgZGVzdGluYXRp
b25fcGF0aCwgcmV0dXJuX2V4aXRfY29kZT1GYWxzZSk6Ci0gICAgICAgIGlmIHJldHVybl9leGl0
X2NvZGU6Ci0gICAgICAgICAgICByZXR1cm4gMAotCiAKIGNsYXNzIE1vY2tDaGVja291dChvYmpl
Y3QpOgogCg==
</data>
<flag name="review"
          id="71994"
          type_id="1"
          status="+"
          setter="mihaip"
    />
          </attachment>
      

    </bug>

</bugzilla>