<?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>92447</bug_id>
          
          <creation_ts>2012-07-26 19:00:30 -0700</creation_ts>
          <short_desc>nrwt: move image diffing code to a separate module</short_desc>
          <delta_ts>2012-07-27 11:21:19 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>NRWT</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>92450</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dirk Pranke">dpranke</reporter>
          <assigned_to name="Dirk Pranke">dpranke</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>ojan</cc>
    
    <cc>rniwa</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>680008</commentid>
    <comment_count>0</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-07-26 19:00:30 -0700</bug_when>
    <thetext>nrwt: move image diffing code to a separate module</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680011</commentid>
    <comment_count>1</comment_count>
      <attachid>154808</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-07-26 19:04:58 -0700</bug_when>
    <thetext>Created attachment 154808
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680050</commentid>
    <comment_count>2</comment_count>
      <attachid>154808</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-07-26 20:15:47 -0700</bug_when>
    <thetext>Comment on attachment 154808
Patch

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

&gt; Tools/ChangeLog:11
&gt; +        ImageDiff after a single invocation, and thus we subsequent

Nit: thus we subsequent

&gt; Tools/Scripts/webkitpy/layout_tests/port/image_diff.py:48
&gt; +        self._proc = None

Please spell out process. &quot;proc&quot; may refer to procedure, which I initially thought it was referring to.

&gt; Tools/Scripts/webkitpy/layout_tests/port/image_diff.py:62
&gt; +                            len(actual_contents), actual_contents,
&gt; +                            len(expected_contents), expected_contents))

Ditto about aligning indentation at (.

&gt; Tools/Scripts/webkitpy/layout_tests/port/image_diff.py:64
&gt; +        except IOError as e:

Please spell out exception.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680051</commentid>
    <comment_count>3</comment_count>
      <attachid>154808</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-07-26 20:17:59 -0700</bug_when>
    <thetext>Comment on attachment 154808
Patch

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

Somehow my earlier comment wasn&apos;t posted :(

&gt; Tools/Scripts/webkitpy/layout_tests/port/server_process.py:106
&gt; +                                                stdout=self._host.executive.PIPE,
&gt; +                                                stderr=self._host.executive.PIPE,
&gt; +                                                close_fds=close_fds,
&gt; +                                                env=self._env,
&gt; +                                                universal_newlines=self._universal_newlines)

We don&apos;t normally align subsequent lines like this elsewhere in WebKit.
Elsewhere, we indent by 4 spaces to the right of self._proc.
Is it really absolutely required for PEP8?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680109</commentid>
    <comment_count>4</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-07-26 21:59:05 -0700</bug_when>
    <thetext>Thanks for the review!

(In reply to comment #3)
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/port/server_process.py:106
&gt; &gt; +                                                stdout=self._host.executive.PIPE,
&gt; &gt; +                                                stderr=self._host.executive.PIPE,
&gt; &gt; +                                                close_fds=close_fds,
&gt; &gt; +                                                env=self._env,
&gt; &gt; +                                                universal_newlines=self._universal_newlines)
&gt; 
&gt; We don&apos;t normally align subsequent lines like this elsewhere in WebKit.
&gt; Elsewhere, we indent by 4 spaces to the right of self._proc.
&gt; Is it really absolutely required for PEP8?

PEP8 recommends either aligning to the paren or an 8-char indent (to distinguish that it is a continuation line rather than a new, indented line), but we don&apos;t typically enforce this and I&apos;d be surprised if there was a strong tendency for one or the other in the python code.

That said, done :).

(In reply to comment #2)
&gt; (From update of attachment 154808 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=154808&amp;action=review
&gt; 
&gt; &gt; Tools/ChangeLog:11
&gt; &gt; +        ImageDiff after a single invocation, and thus we subsequent
&gt; 
&gt; Nit: thus we subsequent
&gt; 

Fixed.

&gt; &gt; Tools/Scripts/webkitpy/layout_tests/port/image_diff.py:48
&gt; &gt; +        self._proc = None
&gt; 
&gt; Please spell out process. &quot;proc&quot; may refer to procedure, which I initially thought it was referring to.
&gt;

Fixed.
 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/port/image_diff.py:62
&gt; &gt; +                            len(actual_contents), actual_contents,
&gt; &gt; +                            len(expected_contents), expected_contents))
&gt; 
&gt; Ditto about aligning indentation at (.
&gt;

Fixed.
 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/port/image_diff.py:64
&gt; &gt; +        except IOError as e:
&gt; 
&gt; Please spell out exception.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680110</commentid>
    <comment_count>5</comment_count>
      <attachid>154838</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-07-26 22:01:04 -0700</bug_when>
    <thetext>Created attachment 154838
address review comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680133</commentid>
    <comment_count>6</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-07-26 22:42:54 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Thanks for the review!
&gt; 
&gt; (In reply to comment #3)
&gt; &gt; &gt; Tools/Scripts/webkitpy/layout_tests/port/server_process.py:106
&gt; &gt; &gt; +                                                stdout=self._host.executive.PIPE,
&gt; &gt; &gt; +                                                stderr=self._host.executive.PIPE,
&gt; &gt; &gt; +                                                close_fds=close_fds,
&gt; &gt; &gt; +                                                env=self._env,
&gt; &gt; &gt; +                                                universal_newlines=self._universal_newlines)
&gt; &gt; 
&gt; &gt; We don&apos;t normally align subsequent lines like this elsewhere in WebKit.
&gt; &gt; Elsewhere, we indent by 4 spaces to the right of self._proc.
&gt; &gt; Is it really absolutely required for PEP8?
&gt; 
&gt; PEP8 recommends either aligning to the paren or an 8-char indent (to distinguish that it is a continuation line rather than a new, indented line), but we don&apos;t typically enforce this and I&apos;d be surprised if there was a strong tendency for one or the other in the python code.

If it&apos;s not mandatory, we should probably stick with the WebKit style guide.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680848</commentid>
    <comment_count>7</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-07-27 11:21:19 -0700</bug_when>
    <thetext>Committed r123893: &lt;http://trac.webkit.org/changeset/123893&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154808</attachid>
            <date>2012-07-26 19:04:58 -0700</date>
            <delta_ts>2012-07-26 22:01:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-92447-20120726190447.patch</filename>
            <type>text/plain</type>
            <size>32560</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzODE0CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNmY4ZGRjNDQ4MGU5MmJmYWFjMGRjMDYzMGRmMjI2MDk0
Y2M2ZTdhNi4uNDg3NzMwMWQ4NDUwNjhjZmRjMGQ2ZTFmYzAyZjlkZWNkODQ1MDg4YiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc5
IEBACisyMDEyLTA3LTI2ICBEaXJrIFByYW5rZSAgPGRwcmFua2VAY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIG5yd3Q6IG1vdmUgaW1hZ2UgZGlmZmluZyBjb2RlIHRvIGEgc2VwYXJhdGUgbW9kdWxl
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MjQ0Nwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0
Y2ggbW92ZXMgdGhlIGNvZGUgdG8gdGFsayB0byBJbWFnZURpZmYgaW50byBpdHMgb3duCisgICAg
ICAgIG1vZHVsZSwgYW5kIGFkZHMgbW9yZSB0ZXN0cyBmb3IgaXQuIEluIGFkZGl0aW9uLCB0aGUg
cGF0Y2gKKyAgICAgICAgbW9kaWZpZXMgZGlmZl9pbWFnZSgpIHNvIHRoYXQgd2UgZG9uJ3QgYXV0
b21hdGljYWxseSBzdG9wCisgICAgICAgIEltYWdlRGlmZiBhZnRlciBhIHNpbmdsZSBpbnZvY2F0
aW9uLCBhbmQgdGh1cyB3ZSBzdWJzZXF1ZW50CisgICAgICAgIGRpZmZzIG1heSBiZSBzbGlnaHRs
eSBmYXN0ZXIuIChOb3RlIHRoYXQgdGhlIGNocm9taXVtIHBvcnRzCisgICAgICAgIGRvbid0IHVz
ZSBhbnkgb2YgdGhpcyBjb2RlOyB0aGF0IGlzIG5vdCBjaGFuZ2VkIGJ5IHRoaXMgcGF0Y2gpLgor
CisgICAgICAgIFRoZSBtYWluIG1vdGl2YXRpb24gZm9yIHRoaXMgY2hhbmdlIGlzIHRvIG1vdmUg
bW9yZSAiZ2VuZXJpYyIKKyAgICAgICAgY29kZSBvdXQgb2YgdGhlIHBvcnQvKiBjbGFzc2VzLCBh
bmQgaW4gcGFydGljdWxhciB0byBtb3ZlIG1vcmUKKyAgICAgICAgY29kZSBvdXQgb2Ygd2Via2l0
LnB5IHNvIHRoYXQgd2UgY2FuIGV2ZW50dWFsbHkgZWxpbWluYXRlIGl0IGJ5CisgICAgICAgIG1l
cmdpbmcgaXQgaW50byBiYXNlLnB5LgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbyBzcGxpdHMg
TW9ja1NlcnZlclByb2Nlc3Mgb3V0IGZyb20gZHJpdmVyX3VuaXR0ZXN0LnB5CisgICAgICAgIHNv
IHRoYXQgaXQgY2FuIGJlIHJlLXVzZWQuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L2Jhc2UucHk6CisgICAgICAgIChQb3J0Ll9faW5pdF9fKToKKyAgICAg
ICAgKFBvcnQuZGlmZl9pbWFnZSk6CisgICAgICAgIChQb3J0LmNsZWFuX3VwX3Rlc3RfcnVuKToK
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2RyaXZlci5weToK
KyAgICAgICAgKERyaXZlci5fX2luaXRfXyk6CisgICAgICAgIChEcml2ZXIuX3N0YXJ0KToKKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2RyaXZlcl91bml0dGVz
dC5weToKKyAgICAgICAgKERyaXZlclRlc3QudGVzdF9zdG9wX2NsZWFuc191cF9wcm9wZXJseSk6
CisgICAgICAgIChEcml2ZXJUZXN0LnRlc3RfdHdvX3N0YXJ0c19jbGVhbnNfdXBfcHJvcGVybHkp
OgorICAgICAgICAoRHJpdmVyVGVzdC50ZXN0X3N0YXJ0X2FjdHVhbGx5X3N0YXJ0cyk6CisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9lZmwucHk6CisgICAgICAg
IChFZmxQb3J0LmNsZWFuX3VwX3Rlc3RfcnVuKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9wb3J0L2d0ay5weToKKyAgICAgICAgKEd0a1BvcnQuY2xlYW5fdXBfdGVz
dF9ydW4pOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvaW1h
Z2VfZGlmZi5weTogQWRkZWQuCisgICAgICAgIChJbWFnZURpZmZlcik6CisgICAgICAgIChJbWFn
ZURpZmZlci5fX2luaXRfXyk6CisgICAgICAgIChJbWFnZURpZmZlci5kaWZmX2ltYWdlKToKKyAg
ICAgICAgKEltYWdlRGlmZmVyLl9zdGFydCk6CisgICAgICAgIChJbWFnZURpZmZlci5fcmVhZCk6
CisgICAgICAgIChJbWFnZURpZmZlci5zdG9wKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9wb3J0L2ltYWdlX2RpZmZfdW5pdHRlc3QucHk6IEFkZGVkLgorICAgICAg
ICAoZm9yKToKKyAgICAgICAgKEZha2VQb3J0KToKKyAgICAgICAgKEZha2VQb3J0Ll9faW5pdF9f
KToKKyAgICAgICAgKEZha2VQb3J0Ll9wYXRoX3RvX2ltYWdlX2RpZmYpOgorICAgICAgICAoRmFr
ZVBvcnQuc2V0dXBfZW52aXJvbl9mb3Jfc2VydmVyKToKKyAgICAgICAgKFRlc3RJbWFnZURpZmZl
cik6CisgICAgICAgIChUZXN0SW1hZ2VEaWZmZXIudGVzdF9kaWZmX2ltYWdlKToKKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L21vY2tfZHJ0X3VuaXR0ZXN0LnB5
OgorICAgICAgICAoTW9ja0RSVFBvcnRUZXN0LnRlc3RfZGlmZl9pbWFnZSk6CisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9wb3J0X3Rlc3RjYXNlLnB5OgorICAg
ICAgICAoUG9ydFRlc3RDYXNlLnRlc3RfZGlmZl9pbWFnZV9fbWlzc2luZ19ib3RoKToKKyAgICAg
ICAgKFBvcnRUZXN0Q2FzZS50ZXN0X2RpZmZfaW1hZ2UpOgorICAgICAgICAoUG9ydFRlc3RDYXNl
LnRlc3RfZGlmZl9pbWFnZS5tYWtlX3Byb2MpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvc2VydmVyX3Byb2Nlc3MucHk6CisgICAgICAgIChTZXJ2ZXJQcm9j
ZXNzLl9zdGFydCk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9y
dC9zZXJ2ZXJfcHJvY2Vzc19tb2NrLnB5OiBBZGRlZC4KKyAgICAgICAgKE1vY2tTZXJ2ZXJQcm9j
ZXNzKToKKyAgICAgICAgKE1vY2tTZXJ2ZXJQcm9jZXNzLl9faW5pdF9fKToKKyAgICAgICAgKE1v
Y2tTZXJ2ZXJQcm9jZXNzLndyaXRlKToKKyAgICAgICAgKE1vY2tTZXJ2ZXJQcm9jZXNzLmhhc19j
cmFzaGVkKToKKyAgICAgICAgKE1vY2tTZXJ2ZXJQcm9jZXNzLnJlYWRfc3Rkb3V0X2xpbmUpOgor
ICAgICAgICAoTW9ja1NlcnZlclByb2Nlc3MucmVhZF9zdGRvdXQpOgorICAgICAgICAoTW9ja1Nl
cnZlclByb2Nlc3MucG9wX2FsbF9idWZmZXJlZF9zdGRlcnIpOgorICAgICAgICAoTW9ja1NlcnZl
clByb2Nlc3MucmVhZF9laXRoZXJfc3Rkb3V0X29yX3N0ZGVycl9saW5lKToKKyAgICAgICAgKE1v
Y2tTZXJ2ZXJQcm9jZXNzLnN0YXJ0KToKKyAgICAgICAgKE1vY2tTZXJ2ZXJQcm9jZXNzLnN0b3Ap
OgorICAgICAgICAoTW9ja1NlcnZlclByb2Nlc3Mua2lsbCk6CisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC93ZWJraXQucHk6CisgICAgICAgIChXZWJLaXRQb3J0
Ll9idWlsZF9kcml2ZXJfZmxhZ3MpOgorICAgICAgICAoV2ViS2l0UG9ydC5fc3ltYm9sc19zdHJp
bmcpOgorCiAyMDEyLTA3LTI2ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWls
LmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTIzNzk5LgpkaWZmIC0t
Z2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5IGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5CmluZGV4IGVl
ZGQxOWRhZDE4NGYzMjhmODlmMmU1NDRlNzAzY2E0OTk4ZDM4MGYuLjY1NmFmZmUyMjQ5OTE5YTlk
NTE0Y2Q3ZmQzNjA3YWE5YzU2MjdiZGMgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHkKQEAgLTU2LDYgKzU2LDggQEAgZnJvbSB3ZWJraXRw
eS5sYXlvdXRfdGVzdHMubW9kZWxzLnRlc3RfY29uZmlndXJhdGlvbiBpbXBvcnQgVGVzdENvbmZp
Z3VyYXRpb24KIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IGNvbmZpZyBh
cyBwb3J0X2NvbmZpZwogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydCBpbXBvcnQgZHJp
dmVyCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9ydCBodHRwX2xvY2sKK2Zy
b20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IGltYWdlX2RpZmYKK2Zyb20gd2Vi
a2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IHNlcnZlcl9wcm9jZXNzCiBmcm9tIHdlYmtp
dHB5LmxheW91dF90ZXN0cy5zZXJ2ZXJzIGltcG9ydCBhcGFjaGVfaHR0cF9zZXJ2ZXIKIGZyb20g
d2Via2l0cHkubGF5b3V0X3Rlc3RzLnNlcnZlcnMgaW1wb3J0IGh0dHBfc2VydmVyCiBmcm9tIHdl
YmtpdHB5LmxheW91dF90ZXN0cy5zZXJ2ZXJzIGltcG9ydCB3ZWJzb2NrZXRfc2VydmVyCkBAIC0x
MTAsNiArMTEyLDggQEAgY2xhc3MgUG9ydChvYmplY3QpOgogICAgICAgICBzZWxmLl9oZWxwZXIg
PSBOb25lCiAgICAgICAgIHNlbGYuX2h0dHBfc2VydmVyID0gTm9uZQogICAgICAgICBzZWxmLl93
ZWJzb2NrZXRfc2VydmVyID0gTm9uZQorICAgICAgICBzZWxmLl9pbWFnZV9kaWZmZXIgPSBOb25l
CisgICAgICAgIHNlbGYuX3NlcnZlcl9wcm9jZXNzX2NvbnN0cnVjdG9yID0gc2VydmVyX3Byb2Nl
c3MuU2VydmVyUHJvY2VzcyAgIyBvdmVycmlkYWJsZSBmb3IgdGVzdGluZwogICAgICAgICBzZWxm
Ll9odHRwX2xvY2sgPSBOb25lICAjIEZJWE1FOiBXaHkgZG9lcyB0aGlzIGxpdmUgb24gdGhlIHBv
cnQgb2JqZWN0PwogCiAgICAgICAgICMgUHl0aG9uJ3MgUG9wZW4gaGFzIGEgYnVnIHRoYXQgY2F1
c2VzIGFueSBwaXBlcyBvcGVuZWQgdG8gYQpAQCAtMzA5LDggKzMxMywxOCBAQCBjbGFzcyBQb3J0
KG9iamVjdCk6CiAKICAgICAgICAgfHRvbGVyYW5jZXwgc2hvdWxkIGJlIGEgcGVyY2VudGFnZSB2
YWx1ZSAoMC4wIC0gMTAwLjApLgogICAgICAgICBJZiBpdCBpcyBvbWl0dGVkLCB0aGUgcG9ydCBk
ZWZhdWx0IHRvbGVyYW5jZSB2YWx1ZSBpcyB1c2VkLgorCisgICAgICAgIElmIGFuIGVycm9yIG9j
Y3VycyAobGlrZSBJbWFnZURpZmYgaXNuJ3QgZm91bmQsIG9yIGNyYXNoZXMsIHdlIGxvZyBhbiBl
cnJvciBhbmQgcmV0dXJuIFRydWUgKGZvciBhIGRpZmYpLgogICAgICAgICAiIiIKLSAgICAgICAg
cmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignUG9ydC5kaWZmX2ltYWdlJykKKyAgICAgICAgaWYg
bm90IGFjdHVhbF9jb250ZW50cyBhbmQgbm90IGV4cGVjdGVkX2NvbnRlbnRzOgorICAgICAgICAg
ICAgcmV0dXJuIChOb25lLCAwKQorICAgICAgICBpZiBub3QgYWN0dWFsX2NvbnRlbnRzIG9yIG5v
dCBleHBlY3RlZF9jb250ZW50czoKKyAgICAgICAgICAgIHJldHVybiAoVHJ1ZSwgMCkKKyAgICAg
ICAgaWYgbm90IHNlbGYuX2ltYWdlX2RpZmZlcjoKKyAgICAgICAgICAgIHNlbGYuX2ltYWdlX2Rp
ZmZlciA9IGltYWdlX2RpZmYuSW1hZ2VEaWZmZXIoc2VsZikKKyAgICAgICAgc2VsZi5zZXRfb3B0
aW9uX2RlZmF1bHQoJ3RvbGVyYW5jZScsIDAuMSkKKyAgICAgICAgdG9sZXJhbmNlID0gdG9sZXJh
bmNlIG9yIHNlbGYuZ2V0X29wdGlvbigndG9sZXJhbmNlJykKKyAgICAgICAgcmV0dXJuIHNlbGYu
X2ltYWdlX2RpZmZlci5kaWZmX2ltYWdlKGV4cGVjdGVkX2NvbnRlbnRzLCBhY3R1YWxfY29udGVu
dHMsIHRvbGVyYW5jZSkKIAogICAgIGRlZiBkaWZmX3RleHQoc2VsZiwgZXhwZWN0ZWRfdGV4dCwg
YWN0dWFsX3RleHQsIGV4cGVjdGVkX2ZpbGVuYW1lLCBhY3R1YWxfZmlsZW5hbWUpOgogICAgICAg
ICAiIiJSZXR1cm5zIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGRpZmYgb2YgdGhlIHR3byB0ZXh0
IHN0cmluZ3MKQEAgLTc4MCw3ICs3OTQsOSBAQCBjbGFzcyBQb3J0KG9iamVjdCk6CiAKICAgICBk
ZWYgY2xlYW5fdXBfdGVzdF9ydW4oc2VsZik6CiAgICAgICAgICIiIlBlcmZvcm0gcG9ydC1zcGVj
aWZpYyB3b3JrIGF0IHRoZSBlbmQgb2YgYSB0ZXN0IHJ1bi4iIiIKLSAgICAgICAgcGFzcworICAg
ICAgICBpZiBzZWxmLl9pbWFnZV9kaWZmZXI6CisgICAgICAgICAgICBzZWxmLl9pbWFnZV9kaWZm
ZXIuc3RvcCgpCisgICAgICAgICAgICBzZWxmLl9pbWFnZV9kaWZmZXIgPSBOb25lCiAKICAgICAj
IEZJWE1FOiBvcy5lbnZpcm9uIGFjY2VzcyBzaG91bGQgYmUgbW92ZWQgdG8gb250byBhIGNvbW1v
bi9zeXN0ZW0gY2xhc3MgdG8gYmUgbW9yZSBlYXNpbHkgbW9ja2FibGUuCiAgICAgZGVmIF92YWx1
ZV9vcl9kZWZhdWx0X2Zyb21fZW52aXJvbihzZWxmLCBuYW1lLCBkZWZhdWx0PU5vbmUpOgpkaWZm
IC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9kcml2ZXIu
cHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2RyaXZlci5weQpp
bmRleCBmZmMxYzE5NDVkNjg5Y2NkYjIwYjQ5ZWZlNzhjMDFjMDkxMjBkMzM4Li5hZjU3NzQwZWQ5
MjMyYTY0MTExNWQ5M2E3MDI3Mjc2NmQxOWFjODAwIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2RyaXZlci5weQorKysgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2RyaXZlci5weQpAQCAtMzYsOCArMzYsNiBAQCBp
bXBvcnQgdGltZQogCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0gaW1wb3J0IHBhdGgKIAot
ZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydCBpbXBvcnQgc2VydmVyX3Byb2Nlc3MKLQog
CiBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCiAKQEAgLTExNSw5ICsxMTMsNiBA
QCBjbGFzcyBEcml2ZXIob2JqZWN0KToKICAgICAgICAgc2VsZi5fd29ya2VyX251bWJlciA9IHdv
cmtlcl9udW1iZXIKICAgICAgICAgc2VsZi5fbm9fdGltZW91dCA9IG5vX3RpbWVvdXQKIAotICAg
ICAgICAjIG92ZXJyaWRhYmxlIGZvciB0ZXN0aW5nLgotICAgICAgICBzZWxmLl9zZXJ2ZXJfcHJv
Y2Vzc19jb25zdHJ1Y3RvciA9IHNlcnZlcl9wcm9jZXNzLlNlcnZlclByb2Nlc3MKLQogICAgICAg
ICBzZWxmLl9kcml2ZXJfdGVtcGRpciA9IE5vbmUKICAgICAgICAgIyBXZWJLaXRUZXN0UnVubmVy
IGNhbiByZXBvcnQgYmFjayBzdWJwcm9jZXNzIGNyYXNoZXMgYnkgcHJpbnRpbmcKICAgICAgICAg
IyAiI0NSQVNIRUQgLSBQUk9DRVNTTkFNRSIuICBTaW5jZSB0aG9zZSBjYW4gaGFwcGVuIGF0IGFu
eSB0aW1lCkBAIC0yNzEsNyArMjY2LDcgQEAgY2xhc3MgRHJpdmVyKG9iamVjdCk6CiAgICAgICAg
IGVudmlyb25tZW50WydMT0NBTF9SRVNPVVJDRV9ST09UJ10gPSBzZWxmLl9wb3J0LmxheW91dF90
ZXN0c19kaXIoKQogICAgICAgICBzZWxmLl9jcmFzaGVkX3Byb2Nlc3NfbmFtZSA9IE5vbmUKICAg
ICAgICAgc2VsZi5fY3Jhc2hlZF9waWQgPSBOb25lCi0gICAgICAgIHNlbGYuX3NlcnZlcl9wcm9j
ZXNzID0gc2VsZi5fc2VydmVyX3Byb2Nlc3NfY29uc3RydWN0b3Ioc2VsZi5fcG9ydCwgc2VydmVy
X25hbWUsIHNlbGYuY21kX2xpbmUocGl4ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3MpLCBlbnZpcm9u
bWVudCkKKyAgICAgICAgc2VsZi5fc2VydmVyX3Byb2Nlc3MgPSBzZWxmLl9wb3J0Ll9zZXJ2ZXJf
cHJvY2Vzc19jb25zdHJ1Y3RvcihzZWxmLl9wb3J0LCBzZXJ2ZXJfbmFtZSwgc2VsZi5jbWRfbGlu
ZShwaXhlbF90ZXN0cywgcGVyX3Rlc3RfYXJncyksIGVudmlyb25tZW50KQogICAgICAgICBzZWxm
Ll9zZXJ2ZXJfcHJvY2Vzcy5zdGFydCgpCiAKICAgICBkZWYgc3RvcChzZWxmKToKZGlmZiAtLWdp
dCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZHJpdmVyX3VuaXR0
ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9kcml2ZXJf
dW5pdHRlc3QucHkKaW5kZXggZDcxMjAyM2UzYWNmMGI2NTdjMzAxNTAyYzM2Njg4MjAzNGEzYjA2
Yi4uNjJmNjk5NTJiZTZhMDFiMTk4ZjgxZjQ4YjQ2ODkzN2E3NzYyMTQ5ZSAxMDA2NDQKLS0tIGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9kcml2ZXJfdW5pdHRlc3Qu
cHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9kcml2ZXJf
dW5pdHRlc3QucHkKQEAgLTMxLDYgKzMxLDcgQEAgaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHdlYmtp
dHB5LmNvbW1vbi5zeXN0ZW0uc3lzdGVtaG9zdF9tb2NrIGltcG9ydCBNb2NrU3lzdGVtSG9zdAog
CiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9ydCBQb3J0LCBEcml2ZXIsIERy
aXZlck91dHB1dAorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydC5zZXJ2ZXJfcHJvY2Vz
c19tb2NrIGltcG9ydCBNb2NrU2VydmVyUHJvY2VzcwogCiAjIEZJWE1FOiByZW1vdmUgdGhlIGRl
cGVuZGVuY3kgb24gVGVzdFdlYktpdFBvcnQKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBv
cnQud2Via2l0X3VuaXR0ZXN0IGltcG9ydCBUZXN0V2ViS2l0UG9ydApAQCAtMjMyLDggKzIzMyw4
IEBAIGNsYXNzIERyaXZlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3Rf
c3RvcF9jbGVhbnNfdXBfcHJvcGVybHkoc2VsZik6CiAgICAgICAgIHBvcnQgPSBUZXN0V2ViS2l0
UG9ydCgpCisgICAgICAgIHBvcnQuX3NlcnZlcl9wcm9jZXNzX2NvbnN0cnVjdG9yID0gTW9ja1Nl
cnZlclByb2Nlc3MKICAgICAgICAgZHJpdmVyID0gRHJpdmVyKHBvcnQsIDAsIHBpeGVsX3Rlc3Rz
PVRydWUpCi0gICAgICAgIGRyaXZlci5fc2VydmVyX3Byb2Nlc3NfY29uc3RydWN0b3IgPSBNb2Nr
U2VydmVyUHJvY2VzcwogICAgICAgICBkcml2ZXIuc3RhcnQoVHJ1ZSwgW10pCiAgICAgICAgIGxh
c3RfdG1wZGlyID0gcG9ydC5fZmlsZXN5c3RlbS5sYXN0X3RtcGRpcgogICAgICAgICBzZWxmLmFz
c2VydE5vdEVxdWFscyhsYXN0X3RtcGRpciwgTm9uZSkKQEAgLTI0Miw4ICsyNDMsOCBAQCBjbGFz
cyBEcml2ZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X3R3b19zdGFy
dHNfY2xlYW5zX3VwX3Byb3Blcmx5KHNlbGYpOgogICAgICAgICBwb3J0ID0gVGVzdFdlYktpdFBv
cnQoKQorICAgICAgICBwb3J0Ll9zZXJ2ZXJfcHJvY2Vzc19jb25zdHJ1Y3RvciA9IE1vY2tTZXJ2
ZXJQcm9jZXNzCiAgICAgICAgIGRyaXZlciA9IERyaXZlcihwb3J0LCAwLCBwaXhlbF90ZXN0cz1U
cnVlKQotICAgICAgICBkcml2ZXIuX3NlcnZlcl9wcm9jZXNzX2NvbnN0cnVjdG9yID0gTW9ja1Nl
cnZlclByb2Nlc3MKICAgICAgICAgZHJpdmVyLnN0YXJ0KFRydWUsIFtdKQogICAgICAgICBsYXN0
X3RtcGRpciA9IHBvcnQuX2ZpbGVzeXN0ZW0ubGFzdF90bXBkaXIKICAgICAgICAgZHJpdmVyLl9z
dGFydChUcnVlLCBbXSkKQEAgLTI1MSw1MCArMjUyLDExIEBAIGNsYXNzIERyaXZlclRlc3QodW5p
dHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3Rfc3RhcnRfYWN0dWFsbHlfc3RhcnRzKHNl
bGYpOgogICAgICAgICBwb3J0ID0gVGVzdFdlYktpdFBvcnQoKQorICAgICAgICBwb3J0Ll9zZXJ2
ZXJfcHJvY2Vzc19jb25zdHJ1Y3RvciA9IE1vY2tTZXJ2ZXJQcm9jZXNzCiAgICAgICAgIGRyaXZl
ciA9IERyaXZlcihwb3J0LCAwLCBwaXhlbF90ZXN0cz1UcnVlKQotICAgICAgICBkcml2ZXIuX3Nl
cnZlcl9wcm9jZXNzX2NvbnN0cnVjdG9yID0gTW9ja1NlcnZlclByb2Nlc3MKICAgICAgICAgZHJp
dmVyLnN0YXJ0KFRydWUsIFtdKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoZHJpdmVyLl9zZXJ2
ZXJfcHJvY2Vzcy5zdGFydGVkKQogCiAKLWNsYXNzIE1vY2tTZXJ2ZXJQcm9jZXNzKG9iamVjdCk6
Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnRfb2JqPU5vbmUsIG5hbWU9Tm9uZSwgY21kPU5v
bmUsIGVudj1Ob25lLCB1bml2ZXJzYWxfbmV3bGluZXM9RmFsc2UsIGxpbmVzPU5vbmUpOgotICAg
ICAgICBzZWxmLnRpbWVkX291dCA9IEZhbHNlCi0gICAgICAgIHNlbGYubGluZXMgPSBsaW5lcyBv
ciBbXQotICAgICAgICBzZWxmLmNyYXNoZWQgPSBGYWxzZQotICAgICAgICBzZWxmLnN0YXJ0ZWQg
PSBGYWxzZQotCi0gICAgZGVmIGhhc19jcmFzaGVkKHNlbGYpOgotICAgICAgICByZXR1cm4gc2Vs
Zi5jcmFzaGVkCi0KLSAgICBkZWYgcmVhZF9zdGRvdXRfbGluZShzZWxmLCBkZWFkbGluZSk6Ci0g
ICAgICAgIHJldHVybiBzZWxmLmxpbmVzLnBvcCgwKSArICJcbiIKLQotICAgIGRlZiByZWFkX3N0
ZG91dChzZWxmLCBkZWFkbGluZSwgc2l6ZSk6Ci0gICAgICAgIGZpcnN0X2xpbmUgPSBzZWxmLmxp
bmVzWzBdCi0gICAgICAgIGlmIHNpemUgPiBsZW4oZmlyc3RfbGluZSk6Ci0gICAgICAgICAgICBz
ZWxmLmxpbmVzLnBvcCgwKQotICAgICAgICAgICAgcmVtYWluaW5nX3NpemUgPSBzaXplIC0gbGVu
KGZpcnN0X2xpbmUpIC0gMQotICAgICAgICAgICAgaWYgbm90IHJlbWFpbmluZ19zaXplOgotICAg
ICAgICAgICAgICAgIHJldHVybiBmaXJzdF9saW5lICsgIlxuIgotICAgICAgICAgICAgcmV0dXJu
IGZpcnN0X2xpbmUgKyAiXG4iICsgc2VsZi5yZWFkX3N0ZG91dChkZWFkbGluZSwgcmVtYWluaW5n
X3NpemUpCi0gICAgICAgIHJlc3VsdCA9IHNlbGYubGluZXNbMF1bOnNpemVdCi0gICAgICAgIHNl
bGYubGluZXNbMF0gPSBzZWxmLmxpbmVzWzBdW3NpemU6XQotICAgICAgICByZXR1cm4gcmVzdWx0
Ci0KLSAgICBkZWYgcmVhZF9laXRoZXJfc3Rkb3V0X29yX3N0ZGVycl9saW5lKHNlbGYsIGRlYWRs
aW5lKToKLSAgICAgICAgIyBGSVhNRTogV2Ugc2hvdWxkIGhhdmUgdGVzdHMgd2hpY2ggaW50ZXJt
aXggc3RkZXJyIGFuZCBzdGRvdXQgbGluZXMuCi0gICAgICAgIHJldHVybiBzZWxmLnJlYWRfc3Rk
b3V0X2xpbmUoZGVhZGxpbmUpLCBOb25lCi0KLSAgICBkZWYgc3RhcnQoc2VsZik6Ci0gICAgICAg
IHNlbGYuc3RhcnRlZCA9IFRydWUKLQotICAgIGRlZiBzdG9wKHNlbGYsIGtpbGxfZGlyZWN0bHk9
RmFsc2UpOgotICAgICAgICByZXR1cm4KLQotICAgIGRlZiBraWxsKHNlbGYpOgotICAgICAgICBy
ZXR1cm4KLQotCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIHVuaXR0ZXN0Lm1haW4o
KQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9l
ZmwucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2VmbC5weQpp
bmRleCA0NzU4ZjdhNjkzM2M2Nzk2Zjk0MzE0ZmRmZmM4YWM4Zjg1YWRmYzljLi4wNmRjZDE4N2E1
YjMyYTIyMTdiOTQzOWQ3YmY0NDdhZGZiMGQ5ZWViIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2VmbC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2VmbC5weQpAQCAtNzIsNiArNzIsNyBAQCBjbGFzcyBF
ZmxQb3J0KFdlYktpdFBvcnQsIFB1bHNlQXVkaW9TYW5pdGl6ZXIpOgogICAgICAgICByZXR1cm4g
c3VwZXIoRWZsUG9ydCwgc2VsZikuZGVmYXVsdF90aW1lb3V0X21zKCkKIAogICAgIGRlZiBjbGVh
bl91cF90ZXN0X3J1bihzZWxmKToKKyAgICAgICAgc3VwZXIoRWZsUG9ydCwgc2VsZikuY2xlYW5f
dXBfdGVzdF9ydW4oKQogICAgICAgICBzZWxmLl9yZXN0b3JlX3B1bHNlYXVkaW9fbW9kdWxlKCkK
IAogICAgIGRlZiBfZ2VuZXJhdGVfYWxsX3Rlc3RfY29uZmlndXJhdGlvbnMoc2VsZik6CmRpZmYg
LS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2d0ay5weSBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZ3RrLnB5CmluZGV4IGVi
Yjc2MWJiZDI1MjgxYjdlZmU3ZDU0ZGJmNTNhYjk0NDczMTNmZDUuLmYyYTI0N2M4MzI2MzQ1OWQw
MmJkYWI4MGM2YjdjMjU5NjdhOTZiYzkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZ3RrLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvZ3RrLnB5CkBAIC01MSw2ICs1MSw3IEBAIGNsYXNzIEd0a1BvcnQo
V2ViS2l0UG9ydCwgUHVsc2VBdWRpb1Nhbml0aXplcik6CiAgICAgICAgIHNlbGYuX3VubG9hZF9w
dWxzZWF1ZGlvX21vZHVsZSgpCiAKICAgICBkZWYgY2xlYW5fdXBfdGVzdF9ydW4oc2VsZik6Cisg
ICAgICAgIHN1cGVyKEd0a1BvcnQsIHNlbGYpLmNsZWFuX3VwX3Rlc3RfcnVuKCkKICAgICAgICAg
c2VsZi5fcmVzdG9yZV9wdWxzZWF1ZGlvX21vZHVsZSgpCiAKICAgICBkZWYgc2V0dXBfZW52aXJv
bl9mb3Jfc2VydmVyKHNlbGYsIHNlcnZlcl9uYW1lPU5vbmUpOgpkaWZmIC0tZ2l0IGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9pbWFnZV9kaWZmLnB5IGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9pbWFnZV9kaWZmLnB5Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjZmMDU5YmQwYjNiZTk5MjY4NDZkMjNhYTIyMTNlMzJkZWZjNzlmODIKLS0tIC9kZXYvbnVs
bAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2ltYWdlX2Rp
ZmYucHkKQEAgLTAsMCArMSwxMTcgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0
IChDKSAyMDEwIEdhYm9yIFJhcGNzYW55aSA8cmdhYm9yQGluZi51LXN6ZWdlZC5odT4sIFVuaXZl
cnNpdHkgb2YgU3plZ2VkCisjIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1l
dDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMg
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIEdvb2dsZSBuYW1lIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMg
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
IyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
IyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIiV2ViS2l0IGltcGxlbWVudGF0aW9u
cyBvZiB0aGUgUG9ydCBpbnRlcmZhY2UuIiIiCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgcmUK
K2ltcG9ydCB0aW1lCisKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IHNl
cnZlcl9wcm9jZXNzCisKKworX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQorCisK
K2NsYXNzIEltYWdlRGlmZmVyKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQp
OgorICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydAorICAgICAgICBzZWxmLl90b2xlcmFuY2UgPSBO
b25lCisgICAgICAgIHNlbGYuX3Byb2MgPSBOb25lCisKKyAgICBkZWYgZGlmZl9pbWFnZShzZWxm
LCBleHBlY3RlZF9jb250ZW50cywgYWN0dWFsX2NvbnRlbnRzLCB0b2xlcmFuY2UpOgorICAgICAg
ICBpZiB0b2xlcmFuY2UgIT0gc2VsZi5fdG9sZXJhbmNlOgorICAgICAgICAgICAgc2VsZi5zdG9w
KCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYXNzZXJ0KGV4cGVjdGVkX2NvbnRlbnRzKQor
ICAgICAgICAgICAgYXNzZXJ0KGFjdHVhbF9jb250ZW50cykKKyAgICAgICAgICAgIGFzc2VydCh0
b2xlcmFuY2UgaXMgbm90IE5vbmUpCisKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9wcm9jOgor
ICAgICAgICAgICAgICAgIHNlbGYuX3N0YXJ0KHRvbGVyYW5jZSkKKyAgICAgICAgICAgIHNlbGYu
X3Byb2Mud3JpdGUoJ0NvbnRlbnQtTGVuZ3RoOiAlZFxuJXNDb250ZW50LUxlbmd0aDogJWRcbiVz
JyAlICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4oYWN0dWFsX2NvbnRlbnRzKSwg
YWN0dWFsX2NvbnRlbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbihleHBlY3Rl
ZF9jb250ZW50cyksIGV4cGVjdGVkX2NvbnRlbnRzKSkKKyAgICAgICAgICAgIHJldHVybiBzZWxm
Ll9yZWFkKCkKKyAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgICAgIF9sb2cu
ZXJyb3IoIkZhaWxlZCB0byBjb21wdXRlIGFuIGltYWdlIGRpZmY6ICVzIiAlIHN0cihlKSkKKyAg
ICAgICAgICAgIHJldHVybiAoVHJ1ZSwgMCkKKworICAgIGRlZiBfc3RhcnQoc2VsZiwgdG9sZXJh
bmNlKToKKyAgICAgICAgY29tbWFuZCA9IFtzZWxmLl9wb3J0Ll9wYXRoX3RvX2ltYWdlX2RpZmYo
KSwgJy0tdG9sZXJhbmNlJywgc3RyKHRvbGVyYW5jZSldCisgICAgICAgIGVudmlyb25tZW50ID0g
c2VsZi5fcG9ydC5zZXR1cF9lbnZpcm9uX2Zvcl9zZXJ2ZXIoJ0ltYWdlRGlmZicpCisgICAgICAg
IHNlbGYuX3Byb2MgPSBzZWxmLl9wb3J0Ll9zZXJ2ZXJfcHJvY2Vzc19jb25zdHJ1Y3RvcihzZWxm
Ll9wb3J0LCAnSW1hZ2VEaWZmJywgY29tbWFuZCwgZW52aXJvbm1lbnQpCisgICAgICAgIHNlbGYu
X3Byb2Muc3RhcnQoKQorICAgICAgICBzZWxmLl90b2xlcmFuY2UgPSB0b2xlcmFuY2UKKworICAg
IGRlZiBfcmVhZChzZWxmKToKKyAgICAgICAgZGVhZGxpbmUgPSB0aW1lLnRpbWUoKSArIDIuMAor
ICAgICAgICBvdXRwdXQgPSBOb25lCisgICAgICAgIG91dHB1dF9pbWFnZSA9ICIiCisKKyAgICAg
ICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIG91dHB1dCA9IHNlbGYuX3Byb2MucmVhZF9zdGRv
dXRfbGluZShkZWFkbGluZSkKKyAgICAgICAgICAgIGlmIHNlbGYuX3Byb2MudGltZWRfb3V0IG9y
IHNlbGYuX3Byb2MuaGFzX2NyYXNoZWQoKSBvciBub3Qgb3V0cHV0OgorICAgICAgICAgICAgICAg
IGJyZWFrCisKKyAgICAgICAgICAgIGlmIG91dHB1dC5zdGFydHN3aXRoKCdkaWZmJyk6ICAjIFRo
aXMgaXMgdGhlIGxhc3QgbGluZSBJbWFnZURpZmYgcHJpbnRzLgorICAgICAgICAgICAgICAgIGJy
ZWFrCisKKyAgICAgICAgICAgIGlmIG91dHB1dC5zdGFydHN3aXRoKCdDb250ZW50LUxlbmd0aCcp
OgorICAgICAgICAgICAgICAgIG0gPSByZS5tYXRjaCgnQ29udGVudC1MZW5ndGg6IChcZCspJywg
b3V0cHV0KQorICAgICAgICAgICAgICAgIGNvbnRlbnRfbGVuZ3RoID0gaW50KG0uZ3JvdXAoMSkp
CisgICAgICAgICAgICAgICAgb3V0cHV0X2ltYWdlID0gc2VsZi5fcHJvYy5yZWFkX3N0ZG91dChk
ZWFkbGluZSwgY29udGVudF9sZW5ndGgpCisgICAgICAgICAgICAgICAgb3V0cHV0ID0gc2VsZi5f
cHJvYy5yZWFkX3N0ZG91dF9saW5lKGRlYWRsaW5lKQorICAgICAgICAgICAgICAgIGJyZWFrCisK
KyAgICAgICAgc3RkZXJyID0gc2VsZi5fcHJvYy5wb3BfYWxsX2J1ZmZlcmVkX3N0ZGVycigpCisg
ICAgICAgIGlmIHN0ZGVycjoKKyAgICAgICAgICAgIF9sb2cud2FybigiSW1hZ2VEaWZmIHByb2R1
Y2VkIHN0ZGVyciBvdXRwdXQ6XG4iICsgc3RkZXJyKQorICAgICAgICBpZiBzZWxmLl9wcm9jLnRp
bWVkX291dDoKKyAgICAgICAgICAgIF9sb2cuZXJyb3IoIkltYWdlRGlmZiB0aW1lZCBvdXQiKQor
ICAgICAgICBpZiBzZWxmLl9wcm9jLmhhc19jcmFzaGVkKCk6CisgICAgICAgICAgICBfbG9nLmVy
cm9yKCJJbWFnZURpZmYgY3Jhc2hlZCIpCisgICAgICAgICMgRklYTUU6IFRoZXJlIGlzIG5vIG5l
ZWQgdG8gc2h1dCBkb3duIHRoZSBJbWFnZURpZmYgc2VydmVyIGFmdGVyIGV2ZXJ5IGRpZmYuCisg
ICAgICAgIHNlbGYuX3Byb2Muc3RvcCgpCisKKyAgICAgICAgZGlmZl9wZXJjZW50ID0gMAorICAg
ICAgICBpZiBvdXRwdXQgYW5kIG91dHB1dC5zdGFydHN3aXRoKCdkaWZmJyk6CisgICAgICAgICAg
ICBtID0gcmUubWF0Y2goJ2RpZmY6ICguKyklIChwYXNzZWR8ZmFpbGVkKScsIG91dHB1dCkKKyAg
ICAgICAgICAgIGlmIG0uZ3JvdXAoMikgPT0gJ3Bhc3NlZCc6CisgICAgICAgICAgICAgICAgcmV0
dXJuIFtOb25lLCAwXQorICAgICAgICAgICAgZGlmZl9wZXJjZW50ID0gZmxvYXQobS5ncm91cCgx
KSkKKworICAgICAgICByZXR1cm4gKG91dHB1dF9pbWFnZSwgZGlmZl9wZXJjZW50KQorCisgICAg
ZGVmIHN0b3Aoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX3Byb2M6CisgICAgICAgICAgICBzZWxm
Ll9wcm9jLnN0b3AoKQorICAgICAgICAgICAgc2VsZi5fcHJvYyA9IE5vbmUKZGlmZiAtLWdpdCBh
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvaW1hZ2VfZGlmZl91bml0
dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvaW1hZ2Vf
ZGlmZl91bml0dGVzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMDY3NTZjMzU1NWY0MGRmZTQ2NDQ2NTAzMzhj
NDAwOTExOGI5MzQ0Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC9pbWFnZV9kaWZmX3VuaXR0ZXN0LnB5CkBAIC0wLDAgKzEsNTIgQEAK
KyMgQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisj
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
IFNVQ0ggREFNQUdFLgorCisiIiJVbml0IHRlc3RpbmcgYmFzZSBjbGFzcyBmb3IgUG9ydCBpbXBs
ZW1lbnRhdGlvbnMuIiIiCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIHdlYmtpdHB5LmxheW91
dF90ZXN0cy5wb3J0LnNlcnZlcl9wcm9jZXNzX21vY2sgaW1wb3J0IE1vY2tTZXJ2ZXJQcm9jZXNz
Citmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0LmltYWdlX2RpZmYgaW1wb3J0IEltYWdl
RGlmZmVyCisKKworY2xhc3MgRmFrZVBvcnQob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2Vs
Ziwgc2VydmVyX3Byb2Nlc3Nfb3V0cHV0KToKKyAgICAgICAgc2VsZi5fc2VydmVyX3Byb2Nlc3Nf
Y29uc3RydWN0b3IgPSBsYW1iZGEgcG9ydCwgbm0sIGNtZCwgZW52OiBNb2NrU2VydmVyUHJvY2Vz
cyhsaW5lcz1zZXJ2ZXJfcHJvY2Vzc19vdXRwdXQpCisKKyAgICBkZWYgX3BhdGhfdG9faW1hZ2Vf
ZGlmZihzZWxmKToKKyAgICAgICAgcmV0dXJuICcnCisKKyAgICBkZWYgc2V0dXBfZW52aXJvbl9m
b3Jfc2VydmVyKHNlbGYsIG5tKToKKyAgICAgICAgcmV0dXJuIE5vbmUKKworCitjbGFzcyBUZXN0
SW1hZ2VEaWZmZXIodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2RpZmZfaW1hZ2Uo
c2VsZik6CisgICAgICAgIHBvcnQgPSBGYWtlUG9ydChbJ2RpZmY6IDEwMCUgZmFpbGVkXG4nXSkK
KyAgICAgICAgaW1hZ2VfZGlmZmVyID0gSW1hZ2VEaWZmZXIocG9ydCkKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbHMoaW1hZ2VfZGlmZmVyLmRpZmZfaW1hZ2UoJ2ZvbycsICdiYXInLCAwLjEpLCAo
JycsIDEwMC4wKSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3BvcnQvbW9ja19kcnRfdW5pdHRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L21vY2tfZHJ0X3VuaXR0ZXN0LnB5CmluZGV4IDE2NTRlMWM0ODE3MDBh
NDA4ZGNlYjc1NGMyOTY4MDJhNDZlZWNhZTEuLjk2NGVmMDdlZjEyZDFmYjc5MzY0NTA4ZjIyMTg0
OGU4NWQzYTQ4OTEgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3BvcnQvbW9ja19kcnRfdW5pdHRlc3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC9tb2NrX2RydF91bml0dGVzdC5weQpAQCAtNTcsNiArNTcsOSBA
QCBjbGFzcyBNb2NrRFJUUG9ydFRlc3QocG9ydF90ZXN0Y2FzZS5Qb3J0VGVzdENhc2UpOgogICAg
IGRlZiB0ZXN0X2NoZWNrX3N5c19kZXBzKHNlbGYpOgogICAgICAgICBwYXNzCiAKKyAgICBkZWYg
dGVzdF9kaWZmX2ltYWdlKHNlbGYpOgorICAgICAgICBwYXNzCisKICAgICBkZWYgdGVzdF91c2Vz
X2FwYWNoZShzZWxmKToKICAgICAgICAgcGFzcwogCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3BvcnRfdGVzdGNhc2UucHkgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3BvcnRfdGVzdGNhc2UucHkKaW5kZXggOWY3
NzgzMmFhNDI5ZThjMGNmYTU3M2M2MDI4YjQ3YzM5YWQwY2RiMS4uN2RlMjU0MDJkMDkwNzFjOTRh
YmUxNWUwNTMyOTJmNjlkNmM2MzFjZCAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC9wb3J0X3Rlc3RjYXNlLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvcG9ydF90ZXN0Y2FzZS5weQpAQCAtNDEsNiArNDEs
NyBAQCBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5zZXJ2ZXJzIGltcG9ydCBodHRwX3NlcnZl
cl9iYXNlCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5zZXJ2ZXJzIGltcG9ydCBodHRwX3Nl
cnZlcl9iYXNlCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9ydCBmYWN0b3J5
CiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0LmNvbmZpZ19tb2NrIGltcG9ydCBNb2Nr
Q29uZmlnCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0LnNlcnZlcl9wcm9jZXNzX21v
Y2sgaW1wb3J0IE1vY2tTZXJ2ZXJQcm9jZXNzCiBmcm9tIHdlYmtpdHB5LnRvb2wubW9ja3Rvb2wg
aW1wb3J0IE1vY2tPcHRpb25zCiAKIApAQCAtMjA5LDYgKzIxMCw3IEBAIGNsYXNzIFBvcnRUZXN0
Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocG9ydC5k
aWZmX2ltYWdlKE5vbmUsIE5vbmUpWzBdKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHBvcnQu
ZGlmZl9pbWFnZShOb25lLCAnJylbMF0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocG9ydC5k
aWZmX2ltYWdlKCcnLCBOb25lKVswXSkKKwogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHBvcnQu
ZGlmZl9pbWFnZSgnJywgJycpWzBdKQogCiAgICAgZGVmIHRlc3RfZGlmZl9pbWFnZV9fbWlzc2lu
Z19hY3R1YWwoc2VsZik6CkBAIC0yMjEsNiArMjIzLDIyIEBAIGNsYXNzIFBvcnRUZXN0Q2FzZSh1
bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwb3J0LmRpZmZfaW1h
Z2UoJ2ZvbycsIE5vbmUpWzBdKQogICAgICAgICBzZWxmLmFzc2VydFRydWUocG9ydC5kaWZmX2lt
YWdlKCdmb28nLCAnJylbMF0pCiAKKyAgICBkZWYgdGVzdF9kaWZmX2ltYWdlKHNlbGYpOgorICAg
ICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQoKQorICAgICAgICBzZWxmLnByb2MgPSBOb25lCisK
KyAgICAgICAgZGVmIG1ha2VfcHJvYyhwb3J0LCBubSwgY21kLCBlbnYpOgorICAgICAgICAgICAg
c2VsZi5wcm9jID0gTW9ja1NlcnZlclByb2Nlc3MocG9ydCwgbm0sIGNtZCwgZW52LCBsaW5lcz1b
J2RpZmY6IDEwMCUgZmFpbGVkXG4nXSkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnByb2MKKwor
ICAgICAgICBwb3J0Ll9zZXJ2ZXJfcHJvY2Vzc19jb25zdHJ1Y3RvciA9IG1ha2VfcHJvYworICAg
ICAgICBwb3J0LnNldHVwX3Rlc3RfcnVuKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocG9y
dC5kaWZmX2ltYWdlKCdmb28nLCAnYmFyJyksICgnJywgMTAwLjApKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFscyhzZWxmLnByb2MuY21kWzE6M10sIFsiLS10b2xlcmFuY2UiLCAiMC4xIl0pCisg
ICAgICAgIHBvcnQuY2xlYW5fdXBfdGVzdF9ydW4oKQorICAgICAgICBzZWxmLmFzc2VydFRydWUo
c2VsZi5wcm9jLnN0b3BwZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHBvcnQuX2ltYWdl
X2RpZmZlciwgTm9uZSkKKwogICAgIGRlZiB0ZXN0X2NoZWNrX2J1aWxkKHNlbGYpOgogICAgICAg
ICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQoKQogICAgICAgICBwb3J0LmNoZWNrX2J1aWxkKG5lZWRz
X2h0dHA9VHJ1ZSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3BvcnQvc2VydmVyX3Byb2Nlc3MucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9wb3J0L3NlcnZlcl9wcm9jZXNzLnB5CmluZGV4IGUwN2E4MDRiMGIyMWJjYTBmM2I5
ODEyMzFlNTZhNjFjNTVmNjMxOWEuLjk1ZTExOTY3NjE0OWFjYmFmYzAzYmYxZTgxNWQwMDNlNzE3
ODUyNWMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Bv
cnQvc2VydmVyX3Byb2Nlc3MucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcG9ydC9zZXJ2ZXJfcHJvY2Vzcy5weQpAQCAtMzIsNyArMzIsNiBAQAogaW1wb3J0IGVy
cm5vCiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IHNpZ25hbAotaW1wb3J0IHN1YnByb2Nlc3MKIGlt
cG9ydCBzeXMKIGltcG9ydCB0aW1lCiAKQEAgLTk5LDEyICs5OCwxMiBAQCBjbGFzcyBTZXJ2ZXJQ
cm9jZXNzKG9iamVjdCk6CiAgICAgICAgIHNlbGYuX3Jlc2V0KCkKICAgICAgICAgIyBjbG9zZV9m
ZHMgaXMgYSB3b3JrYXJvdW5kIGZvciBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMjMyMAog
ICAgICAgICBjbG9zZV9mZHMgPSBub3Qgc2VsZi5faG9zdC5wbGF0Zm9ybS5pc193aW4oKQotICAg
ICAgICBzZWxmLl9wcm9jID0gc3VicHJvY2Vzcy5Qb3BlbihzZWxmLl9jbWQsIHN0ZGluPXN1YnBy
b2Nlc3MuUElQRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0
PXN1YnByb2Nlc3MuUElQRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RkZXJyPXN1YnByb2Nlc3MuUElQRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2xvc2VfZmRzPWNsb3NlX2ZkcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZW52PXNlbGYuX2VudiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdW5pdmVyc2FsX25ld2xpbmVzPXNlbGYuX3VuaXZlcnNhbF9uZXdsaW5lcykKKyAgICAg
ICAgc2VsZi5fcHJvYyA9IHNlbGYuX2hvc3QuZXhlY3V0aXZlLnBvcGVuKHNlbGYuX2NtZCwgc3Rk
aW49c2VsZi5faG9zdC5leGVjdXRpdmUuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zZWxmLl9ob3N0LmV4ZWN1dGl2ZS5QSVBFLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXNl
bGYuX2hvc3QuZXhlY3V0aXZlLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjbG9zZV9mZHM9Y2xvc2VfZmRzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52PXNlbGYuX2VudiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXZlcnNhbF9uZXdsaW5lcz1z
ZWxmLl91bml2ZXJzYWxfbmV3bGluZXMpCiAgICAgICAgIHNlbGYuX3BpZCA9IHNlbGYuX3Byb2Mu
cGlkCiAgICAgICAgIGZkID0gc2VsZi5fcHJvYy5zdGRvdXQuZmlsZW5vKCkKICAgICAgICAgaWYg
bm90IHNlbGYuX3VzZV93aW4zMl9hcGlzOgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC9zZXJ2ZXJfcHJvY2Vzc19tb2NrLnB5IGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9zZXJ2ZXJfcHJvY2Vzc19tb2NrLnB5Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmFlNDg1MjNlYjMyOGVjZmU2NDdiYzlkNGQ3NzcwZjI3M2JjZjBiYmMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3Nl
cnZlcl9wcm9jZXNzX21vY2sucHkKQEAgLTAsMCArMSw3NyBAQAorIyBDb3B5cmlnaHQgKEMpIDIw
MTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
IyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKwor
Y2xhc3MgTW9ja1NlcnZlclByb2Nlc3Mob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwg
cG9ydF9vYmo9Tm9uZSwgbmFtZT1Ob25lLCBjbWQ9Tm9uZSwgZW52PU5vbmUsIHVuaXZlcnNhbF9u
ZXdsaW5lcz1GYWxzZSwgbGluZXM9Tm9uZSk6CisgICAgICAgIHNlbGYudGltZWRfb3V0ID0gRmFs
c2UKKyAgICAgICAgc2VsZi5saW5lcyA9IGxpbmVzIG9yIFtdCisgICAgICAgIHNlbGYuY3Jhc2hl
ZCA9IEZhbHNlCisgICAgICAgIHNlbGYud3JpdGVzID0gW10KKyAgICAgICAgc2VsZi5jbWQgPSBj
bWQKKyAgICAgICAgc2VsZi5lbnYgPSBlbnYKKyAgICAgICAgc2VsZi5zdGFydGVkID0gRmFsc2UK
KyAgICAgICAgc2VsZi5zdG9wcGVkID0gRmFsc2UKKworICAgIGRlZiB3cml0ZShzZWxmLCBieXRl
cyk6CisgICAgICAgIHNlbGYud3JpdGVzLmFwcGVuZChieXRlcykKKworICAgIGRlZiBoYXNfY3Jh
c2hlZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuY3Jhc2hlZAorCisgICAgZGVmIHJlYWRf
c3Rkb3V0X2xpbmUoc2VsZiwgZGVhZGxpbmUpOgorICAgICAgICByZXR1cm4gc2VsZi5saW5lcy5w
b3AoMCkgKyAiXG4iCisKKyAgICBkZWYgcmVhZF9zdGRvdXQoc2VsZiwgZGVhZGxpbmUsIHNpemUp
OgorICAgICAgICBmaXJzdF9saW5lID0gc2VsZi5saW5lc1swXQorICAgICAgICBpZiBzaXplID4g
bGVuKGZpcnN0X2xpbmUpOgorICAgICAgICAgICAgc2VsZi5saW5lcy5wb3AoMCkKKyAgICAgICAg
ICAgIHJlbWFpbmluZ19zaXplID0gc2l6ZSAtIGxlbihmaXJzdF9saW5lKSAtIDEKKyAgICAgICAg
ICAgIGlmIG5vdCByZW1haW5pbmdfc2l6ZToKKyAgICAgICAgICAgICAgICByZXR1cm4gZmlyc3Rf
bGluZSArICJcbiIKKyAgICAgICAgICAgIHJldHVybiBmaXJzdF9saW5lICsgIlxuIiArIHNlbGYu
cmVhZF9zdGRvdXQoZGVhZGxpbmUsIHJlbWFpbmluZ19zaXplKQorICAgICAgICByZXN1bHQgPSBz
ZWxmLmxpbmVzWzBdWzpzaXplXQorICAgICAgICBzZWxmLmxpbmVzWzBdID0gc2VsZi5saW5lc1sw
XVtzaXplOl0KKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIHBvcF9hbGxfYnVmZmVy
ZWRfc3RkZXJyKHNlbGYpOgorICAgICAgICByZXR1cm4gJycKKworICAgIGRlZiByZWFkX2VpdGhl
cl9zdGRvdXRfb3Jfc3RkZXJyX2xpbmUoc2VsZiwgZGVhZGxpbmUpOgorICAgICAgICAjIEZJWE1F
OiBXZSBzaG91bGQgaGF2ZSB0ZXN0cyB3aGljaCBpbnRlcm1peCBzdGRlcnIgYW5kIHN0ZG91dCBs
aW5lcy4KKyAgICAgICAgcmV0dXJuIHNlbGYucmVhZF9zdGRvdXRfbGluZShkZWFkbGluZSksIE5v
bmUKKworICAgIGRlZiBzdGFydChzZWxmKToKKyAgICAgICAgc2VsZi5zdGFydGVkID0gVHJ1ZQor
CisgICAgZGVmIHN0b3Aoc2VsZiwga2lsbF9kaXJlY3RseT1GYWxzZSk6CisgICAgICAgIHNlbGYu
c3RvcHBlZCA9IFRydWUKKyAgICAgICAgcmV0dXJuCisKKyAgICBkZWYga2lsbChzZWxmKToKKyAg
ICAgICAgcmV0dXJuCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L3dlYmtpdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3BvcnQvd2Via2l0LnB5CmluZGV4IGQ1YjdjMGQ3ZjdhYTMyMjdiNmQ2ZDE3ZmQ2MmM0ZGQ0MWZi
ZGNhMjguLjI2ZWEwNTNkNmQ2MzA4MDAxMzM5M2JmY2UwNzgzMjZiMDExOTdiYjAgMTAwNzU1Ci0t
LSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Via2l0LnB5Cisr
KyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Via2l0LnB5CkBA
IC0zNCwxMSArMzQsOSBAQAogaW1wb3J0IGl0ZXJ0b29scwogaW1wb3J0IGxvZ2dpbmcKIGltcG9y
dCBvcGVyYXRvcgotaW1wb3J0IHJlCi1pbXBvcnQgdGltZQogCi1mcm9tIHdlYmtpdHB5LmNvbW1v
bi5zeXN0ZW0uZXhlY3V0aXZlIGltcG9ydCBFeGVjdXRpdmUsIFNjcmlwdEVycm9yCi1mcm9tIHdl
YmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9ydCBzZXJ2ZXJfcHJvY2VzcywgUG9ydAorZnJv
bSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZSBpbXBvcnQgU2NyaXB0RXJyb3IKK2Zy
b20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IFBvcnQKIAogCiBfbG9nID0gbG9n
Z2luZy5nZXRMb2dnZXIoX19uYW1lX18pCkBAIC05Niw4MSArOTQsNiBAQCBjbGFzcyBXZWJLaXRQ
b3J0KFBvcnQpOgogICAgIGRlZiBfYnVpbGRfZHJpdmVyX2ZsYWdzKHNlbGYpOgogICAgICAgICBy
ZXR1cm4gW10KIAotICAgIGRlZiBkaWZmX2ltYWdlKHNlbGYsIGV4cGVjdGVkX2NvbnRlbnRzLCBh
Y3R1YWxfY29udGVudHMsIHRvbGVyYW5jZT1Ob25lKToKLSAgICAgICAgIyBIYW5kbGUgdGhlIGNh
c2Ugd2hlcmUgdGhlIHRlc3QgZGlkbid0IGFjdHVhbGx5IGdlbmVyYXRlIGFuIGltYWdlLgotICAg
ICAgICAjIEZJWE1FOiBuZWVkIHVuaXQgdGVzdHMgZm9yIHRoaXMuCi0gICAgICAgIGlmIG5vdCBh
Y3R1YWxfY29udGVudHMgYW5kIG5vdCBleHBlY3RlZF9jb250ZW50czoKLSAgICAgICAgICAgIHJl
dHVybiAoTm9uZSwgMCkKLSAgICAgICAgaWYgbm90IGFjdHVhbF9jb250ZW50cyBvciBub3QgZXhw
ZWN0ZWRfY29udGVudHM6Ci0gICAgICAgICAgICAjIEZJWE1FOiBJdCdzIG5vdCBjbGVhciB3aGF0
IHdlIHNob3VsZCByZXR1cm4gaW4gdGhpcyBjYXNlLgotICAgICAgICAgICAgIyBNYXliZSB3ZSBz
aG91bGQgdGhyb3cgYW4gZXhjZXB0aW9uPwotICAgICAgICAgICAgcmV0dXJuIChUcnVlLCAwKQot
Ci0gICAgICAgIHByb2Nlc3MgPSBzZWxmLl9zdGFydF9pbWFnZV9kaWZmX3Byb2Nlc3MoZXhwZWN0
ZWRfY29udGVudHMsIGFjdHVhbF9jb250ZW50cywgdG9sZXJhbmNlPXRvbGVyYW5jZSkKLSAgICAg
ICAgcmV0dXJuIHNlbGYuX3JlYWRfaW1hZ2VfZGlmZihwcm9jZXNzKQotCi0gICAgZGVmIF9pbWFn
ZV9kaWZmX2NvbW1hbmQoc2VsZiwgdG9sZXJhbmNlPU5vbmUpOgotICAgICAgICAjIEZJWE1FOiBU
aGVyZSBuZWVkcyB0byBiZSBhIG1vcmUgc2FuZSB3YXkgb2YgaGFuZGxpbmcgZGVmYXVsdAotICAg
ICAgICAjIHZhbHVlcyBmb3Igb3B0aW9ucyBzbyB0aGF0IHlvdSBjYW4gZGlzdGluZ3Vpc2ggYmV0
d2VlbiBhIGRlZmF1bHQKLSAgICAgICAgIyB2YWx1ZSBvZiBOb25lIGFuZCBhIGRlZmF1bHQgdmFs
dWUgdGhhdCB3YXNuJ3Qgc2V0LgotICAgICAgICBpZiB0b2xlcmFuY2UgaXMgTm9uZToKLSAgICAg
ICAgICAgIGlmIHNlbGYuZ2V0X29wdGlvbigndG9sZXJhbmNlJykgaXMgbm90IE5vbmU6Ci0gICAg
ICAgICAgICAgICAgdG9sZXJhbmNlID0gc2VsZi5nZXRfb3B0aW9uKCd0b2xlcmFuY2UnKQotICAg
ICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICB0b2xlcmFuY2UgPSAwLjEKLQotICAgICAg
ICBjb21tYW5kID0gW3NlbGYuX3BhdGhfdG9faW1hZ2VfZGlmZigpLCAnLS10b2xlcmFuY2UnLCBz
dHIodG9sZXJhbmNlKV0KLSAgICAgICAgcmV0dXJuIGNvbW1hbmQKLQotICAgIGRlZiBfc3RhcnRf
aW1hZ2VfZGlmZl9wcm9jZXNzKHNlbGYsIGV4cGVjdGVkX2NvbnRlbnRzLCBhY3R1YWxfY29udGVu
dHMsIHRvbGVyYW5jZT1Ob25lKToKLSAgICAgICAgY29tbWFuZCA9IHNlbGYuX2ltYWdlX2RpZmZf
Y29tbWFuZCh0b2xlcmFuY2UpCi0gICAgICAgIGVudmlyb25tZW50ID0gc2VsZi5zZXR1cF9lbnZp
cm9uX2Zvcl9zZXJ2ZXIoJ0ltYWdlRGlmZicpCi0gICAgICAgIHByb2Nlc3MgPSBzZXJ2ZXJfcHJv
Y2Vzcy5TZXJ2ZXJQcm9jZXNzKHNlbGYsICdJbWFnZURpZmYnLCBjb21tYW5kLCBlbnZpcm9ubWVu
dCkKLQotICAgICAgICBwcm9jZXNzLndyaXRlKCdDb250ZW50LUxlbmd0aDogJWRcbiVzQ29udGVu
dC1MZW5ndGg6ICVkXG4lcycgJSAoCi0gICAgICAgICAgICBsZW4oYWN0dWFsX2NvbnRlbnRzKSwg
YWN0dWFsX2NvbnRlbnRzLAotICAgICAgICAgICAgbGVuKGV4cGVjdGVkX2NvbnRlbnRzKSwgZXhw
ZWN0ZWRfY29udGVudHMpKQotICAgICAgICByZXR1cm4gcHJvY2VzcwotCi0gICAgZGVmIF9yZWFk
X2ltYWdlX2RpZmYoc2VsZiwgc3ApOgotICAgICAgICBkZWFkbGluZSA9IHRpbWUudGltZSgpICsg
Mi4wCi0gICAgICAgIG91dHB1dCA9IE5vbmUKLSAgICAgICAgb3V0cHV0X2ltYWdlID0gIiIKLQot
ICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgb3V0cHV0ID0gc3AucmVhZF9zdGRvdXRf
bGluZShkZWFkbGluZSkKLSAgICAgICAgICAgIGlmIHNwLnRpbWVkX291dCBvciBzcC5oYXNfY3Jh
c2hlZCgpIG9yIG5vdCBvdXRwdXQ6Ci0gICAgICAgICAgICAgICAgYnJlYWsKLQotICAgICAgICAg
ICAgaWYgb3V0cHV0LnN0YXJ0c3dpdGgoJ2RpZmYnKTogICMgVGhpcyBpcyB0aGUgbGFzdCBsaW5l
IEltYWdlRGlmZiBwcmludHMuCi0gICAgICAgICAgICAgICAgYnJlYWsKLQotICAgICAgICAgICAg
aWYgb3V0cHV0LnN0YXJ0c3dpdGgoJ0NvbnRlbnQtTGVuZ3RoJyk6Ci0gICAgICAgICAgICAgICAg
bSA9IHJlLm1hdGNoKCdDb250ZW50LUxlbmd0aDogKFxkKyknLCBvdXRwdXQpCi0gICAgICAgICAg
ICAgICAgY29udGVudF9sZW5ndGggPSBpbnQobS5ncm91cCgxKSkKLSAgICAgICAgICAgICAgICBv
dXRwdXRfaW1hZ2UgPSBzcC5yZWFkX3N0ZG91dChkZWFkbGluZSwgY29udGVudF9sZW5ndGgpCi0g
ICAgICAgICAgICAgICAgb3V0cHV0ID0gc3AucmVhZF9zdGRvdXRfbGluZShkZWFkbGluZSkKLSAg
ICAgICAgICAgICAgICBicmVhawotCi0gICAgICAgIHN0ZGVyciA9IHNwLnBvcF9hbGxfYnVmZmVy
ZWRfc3RkZXJyKCkKLSAgICAgICAgaWYgc3RkZXJyOgotICAgICAgICAgICAgX2xvZy53YXJuKCJJ
bWFnZURpZmYgcHJvZHVjZWQgc3RkZXJyIG91dHB1dDpcbiIgKyBzdGRlcnIpCi0gICAgICAgIGlm
IHNwLnRpbWVkX291dDoKLSAgICAgICAgICAgIF9sb2cuZXJyb3IoIkltYWdlRGlmZiB0aW1lZCBv
dXQiKQotICAgICAgICBpZiBzcC5oYXNfY3Jhc2hlZCgpOgotICAgICAgICAgICAgX2xvZy5lcnJv
cigiSW1hZ2VEaWZmIGNyYXNoZWQiKQotICAgICAgICAjIEZJWE1FOiBUaGVyZSBpcyBubyBuZWVk
IHRvIHNodXQgZG93biB0aGUgSW1hZ2VEaWZmIHNlcnZlciBhZnRlciBldmVyeSBkaWZmLgotICAg
ICAgICBzcC5zdG9wKCkKLQotICAgICAgICBkaWZmX3BlcmNlbnQgPSAwCi0gICAgICAgIGlmIG91
dHB1dCBhbmQgb3V0cHV0LnN0YXJ0c3dpdGgoJ2RpZmYnKToKLSAgICAgICAgICAgIG0gPSByZS5t
YXRjaCgnZGlmZjogKC4rKSUgKHBhc3NlZHxmYWlsZWQpJywgb3V0cHV0KQotICAgICAgICAgICAg
aWYgbS5ncm91cCgyKSA9PSAncGFzc2VkJzoKLSAgICAgICAgICAgICAgICByZXR1cm4gW05vbmUs
IDBdCi0gICAgICAgICAgICBkaWZmX3BlcmNlbnQgPSBmbG9hdChtLmdyb3VwKDEpKQotCi0gICAg
ICAgIHJldHVybiAob3V0cHV0X2ltYWdlLCBkaWZmX3BlcmNlbnQpCi0KICAgICBkZWYgX3Rlc3Rz
X2Zvcl9vdGhlcl9wbGF0Zm9ybXMoc2VsZik6CiAgICAgICAgICMgQnkgZGVmYXVsdCB3ZSB3aWxs
IHNraXAgYW55IGRpcmVjdG9yeSB1bmRlciBMYXlvdXRUZXN0cy9wbGF0Zm9ybQogICAgICAgICAj
IHRoYXQgaXNuJ3QgaW4gb3VyIGJhc2VsaW5lIHNlYXJjaCBwYXRoICh0aGlzIG1pcnJvcnMgd2hh
dApAQCAtMjAxLDcgKzEyNCw3IEBAIGNsYXNzIFdlYktpdFBvcnQoUG9ydCk6CiAgICAgICAgIHN5
bWJvbHMgPSAnJwogICAgICAgICBmb3IgcGF0aF90b19tb2R1bGUgaW4gc2VsZi5fbW9kdWxlc190
b19zZWFyY2hfZm9yX3N5bWJvbHMoKToKICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAg
ICBzeW1ib2xzICs9IHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChbc2VsZi5ubV9jb21tYW5k
KCksIHBhdGhfdG9fbW9kdWxlXSwgZXJyb3JfaGFuZGxlcj1FeGVjdXRpdmUuaWdub3JlX2Vycm9y
KQorICAgICAgICAgICAgICAgIHN5bWJvbHMgKz0gc2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21tYW5k
KFtzZWxmLm5tX2NvbW1hbmQoKSwgcGF0aF90b19tb2R1bGVdLCBlcnJvcl9oYW5kbGVyPXNlbGYu
X2V4ZWN1dGl2ZS5pZ25vcmVfZXJyb3IpCiAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciwgZToK
ICAgICAgICAgICAgICAgICBfbG9nLndhcm4oIkZhaWxlZCB0byBydW4gbm06ICVzLiAgQ2FuJ3Qg
ZGV0ZXJtaW5lIHN1cHBvcnRlZCBmZWF0dXJlcyBjb3JyZWN0bHkuIiAlIGUpCiAgICAgICAgIHJl
dHVybiBzeW1ib2xzCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154838</attachid>
            <date>2012-07-26 22:01:04 -0700</date>
            <delta_ts>2012-07-26 22:01:43 -0700</delta_ts>
            <desc>address review comments</desc>
            <filename>bug-92447-20120726220053.patch</filename>
            <type>text/plain</type>
            <size>32420</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzODE0CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNmY4ZGRjNDQ4MGU5MmJmYWFjMGRjMDYzMGRmMjI2MDk0
Y2M2ZTdhNi4uYWY3ZTRjYTRlODQ4OTM5M2Y4YzQ0OTJhNmFkMTQ0NjI0YzI1NTc1MiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc5
IEBACisyMDEyLTA3LTI2ICBEaXJrIFByYW5rZSAgPGRwcmFua2VAY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIG5yd3Q6IG1vdmUgaW1hZ2UgZGlmZmluZyBjb2RlIHRvIGEgc2VwYXJhdGUgbW9kdWxl
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MjQ0Nwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0
Y2ggbW92ZXMgdGhlIGNvZGUgdG8gdGFsayB0byBJbWFnZURpZmYgaW50byBpdHMgb3duCisgICAg
ICAgIG1vZHVsZSwgYW5kIGFkZHMgbW9yZSB0ZXN0cyBmb3IgaXQuIEluIGFkZGl0aW9uLCB0aGUg
cGF0Y2gKKyAgICAgICAgbW9kaWZpZXMgZGlmZl9pbWFnZSgpIHNvIHRoYXQgd2UgZG9uJ3QgYXV0
b21hdGljYWxseSBzdG9wCisgICAgICAgIEltYWdlRGlmZiBhZnRlciBhIHNpbmdsZSBpbnZvY2F0
aW9uLCBhbmQgdGh1cyBzdWJzZXF1ZW50CisgICAgICAgIGRpZmZzIG1heSBiZSBzbGlnaHRseSBm
YXN0ZXIuIChOb3RlIHRoYXQgdGhlIGNocm9taXVtIHBvcnRzCisgICAgICAgIGRvbid0IHVzZSBh
bnkgb2YgdGhpcyBjb2RlOyB0aGF0IGlzIG5vdCBjaGFuZ2VkIGJ5IHRoaXMgcGF0Y2gpLgorCisg
ICAgICAgIFRoZSBtYWluIG1vdGl2YXRpb24gZm9yIHRoaXMgY2hhbmdlIGlzIHRvIG1vdmUgbW9y
ZSAiZ2VuZXJpYyIKKyAgICAgICAgY29kZSBvdXQgb2YgdGhlIHBvcnQvKiBjbGFzc2VzLCBhbmQg
aW4gcGFydGljdWxhciB0byBtb3ZlIG1vcmUKKyAgICAgICAgY29kZSBvdXQgb2Ygd2Via2l0LnB5
IHNvIHRoYXQgd2UgY2FuIGV2ZW50dWFsbHkgZWxpbWluYXRlIGl0IGJ5CisgICAgICAgIG1lcmdp
bmcgaXQgaW50byBiYXNlLnB5LgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbyBzcGxpdHMgTW9j
a1NlcnZlclByb2Nlc3Mgb3V0IGZyb20gZHJpdmVyX3VuaXR0ZXN0LnB5CisgICAgICAgIHNvIHRo
YXQgaXQgY2FuIGJlIHJlLXVzZWQuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9wb3J0L2Jhc2UucHk6CisgICAgICAgIChQb3J0Ll9faW5pdF9fKToKKyAgICAgICAg
KFBvcnQuZGlmZl9pbWFnZSk6CisgICAgICAgIChQb3J0LmNsZWFuX3VwX3Rlc3RfcnVuKToKKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2RyaXZlci5weToKKyAg
ICAgICAgKERyaXZlci5fX2luaXRfXyk6CisgICAgICAgIChEcml2ZXIuX3N0YXJ0KToKKyAgICAg
ICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2RyaXZlcl91bml0dGVzdC5w
eToKKyAgICAgICAgKERyaXZlclRlc3QudGVzdF9zdG9wX2NsZWFuc191cF9wcm9wZXJseSk6Cisg
ICAgICAgIChEcml2ZXJUZXN0LnRlc3RfdHdvX3N0YXJ0c19jbGVhbnNfdXBfcHJvcGVybHkpOgor
ICAgICAgICAoRHJpdmVyVGVzdC50ZXN0X3N0YXJ0X2FjdHVhbGx5X3N0YXJ0cyk6CisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9lZmwucHk6CisgICAgICAgIChF
ZmxQb3J0LmNsZWFuX3VwX3Rlc3RfcnVuKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L2d0ay5weToKKyAgICAgICAgKEd0a1BvcnQuY2xlYW5fdXBfdGVzdF9y
dW4pOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvaW1hZ2Vf
ZGlmZi5weTogQWRkZWQuCisgICAgICAgIChJbWFnZURpZmZlcik6CisgICAgICAgIChJbWFnZURp
ZmZlci5fX2luaXRfXyk6CisgICAgICAgIChJbWFnZURpZmZlci5kaWZmX2ltYWdlKToKKyAgICAg
ICAgKEltYWdlRGlmZmVyLl9zdGFydCk6CisgICAgICAgIChJbWFnZURpZmZlci5fcmVhZCk6Cisg
ICAgICAgIChJbWFnZURpZmZlci5zdG9wKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L2ltYWdlX2RpZmZfdW5pdHRlc3QucHk6IEFkZGVkLgorICAgICAgICAo
Zm9yKToKKyAgICAgICAgKEZha2VQb3J0KToKKyAgICAgICAgKEZha2VQb3J0Ll9faW5pdF9fKToK
KyAgICAgICAgKEZha2VQb3J0Ll9wYXRoX3RvX2ltYWdlX2RpZmYpOgorICAgICAgICAoRmFrZVBv
cnQuc2V0dXBfZW52aXJvbl9mb3Jfc2VydmVyKToKKyAgICAgICAgKFRlc3RJbWFnZURpZmZlcik6
CisgICAgICAgIChUZXN0SW1hZ2VEaWZmZXIudGVzdF9kaWZmX2ltYWdlKToKKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L21vY2tfZHJ0X3VuaXR0ZXN0LnB5Ogor
ICAgICAgICAoTW9ja0RSVFBvcnRUZXN0LnRlc3RfZGlmZl9pbWFnZSk6CisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9wb3J0X3Rlc3RjYXNlLnB5OgorICAgICAg
ICAoUG9ydFRlc3RDYXNlLnRlc3RfZGlmZl9pbWFnZV9fbWlzc2luZ19ib3RoKToKKyAgICAgICAg
KFBvcnRUZXN0Q2FzZS50ZXN0X2RpZmZfaW1hZ2UpOgorICAgICAgICAoUG9ydFRlc3RDYXNlLnRl
c3RfZGlmZl9pbWFnZS5tYWtlX3Byb2MpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3BvcnQvc2VydmVyX3Byb2Nlc3MucHk6CisgICAgICAgIChTZXJ2ZXJQcm9jZXNz
Ll9zdGFydCk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9z
ZXJ2ZXJfcHJvY2Vzc19tb2NrLnB5OiBBZGRlZC4KKyAgICAgICAgKE1vY2tTZXJ2ZXJQcm9jZXNz
KToKKyAgICAgICAgKE1vY2tTZXJ2ZXJQcm9jZXNzLl9faW5pdF9fKToKKyAgICAgICAgKE1vY2tT
ZXJ2ZXJQcm9jZXNzLndyaXRlKToKKyAgICAgICAgKE1vY2tTZXJ2ZXJQcm9jZXNzLmhhc19jcmFz
aGVkKToKKyAgICAgICAgKE1vY2tTZXJ2ZXJQcm9jZXNzLnJlYWRfc3Rkb3V0X2xpbmUpOgorICAg
ICAgICAoTW9ja1NlcnZlclByb2Nlc3MucmVhZF9zdGRvdXQpOgorICAgICAgICAoTW9ja1NlcnZl
clByb2Nlc3MucG9wX2FsbF9idWZmZXJlZF9zdGRlcnIpOgorICAgICAgICAoTW9ja1NlcnZlclBy
b2Nlc3MucmVhZF9laXRoZXJfc3Rkb3V0X29yX3N0ZGVycl9saW5lKToKKyAgICAgICAgKE1vY2tT
ZXJ2ZXJQcm9jZXNzLnN0YXJ0KToKKyAgICAgICAgKE1vY2tTZXJ2ZXJQcm9jZXNzLnN0b3ApOgor
ICAgICAgICAoTW9ja1NlcnZlclByb2Nlc3Mua2lsbCk6CisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC93ZWJraXQucHk6CisgICAgICAgIChXZWJLaXRQb3J0Ll9i
dWlsZF9kcml2ZXJfZmxhZ3MpOgorICAgICAgICAoV2ViS2l0UG9ydC5fc3ltYm9sc19zdHJpbmcp
OgorCiAyMDEyLTA3LTI2ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNv
bT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTIzNzk5LgpkaWZmIC0tZ2l0
IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5IGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5CmluZGV4IGVlZGQx
OWRhZDE4NGYzMjhmODlmMmU1NDRlNzAzY2E0OTk4ZDM4MGYuLjY1NmFmZmUyMjQ5OTE5YTlkNTE0
Y2Q3ZmQzNjA3YWE5YzU2MjdiZGMgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L2Jhc2UucHkKQEAgLTU2LDYgKzU2LDggQEAgZnJvbSB3ZWJraXRweS5s
YXlvdXRfdGVzdHMubW9kZWxzLnRlc3RfY29uZmlndXJhdGlvbiBpbXBvcnQgVGVzdENvbmZpZ3Vy
YXRpb24KIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IGNvbmZpZyBhcyBw
b3J0X2NvbmZpZwogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydCBpbXBvcnQgZHJpdmVy
CiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9ydCBodHRwX2xvY2sKK2Zyb20g
d2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IGltYWdlX2RpZmYKK2Zyb20gd2Via2l0
cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IHNlcnZlcl9wcm9jZXNzCiBmcm9tIHdlYmtpdHB5
LmxheW91dF90ZXN0cy5zZXJ2ZXJzIGltcG9ydCBhcGFjaGVfaHR0cF9zZXJ2ZXIKIGZyb20gd2Vi
a2l0cHkubGF5b3V0X3Rlc3RzLnNlcnZlcnMgaW1wb3J0IGh0dHBfc2VydmVyCiBmcm9tIHdlYmtp
dHB5LmxheW91dF90ZXN0cy5zZXJ2ZXJzIGltcG9ydCB3ZWJzb2NrZXRfc2VydmVyCkBAIC0xMTAs
NiArMTEyLDggQEAgY2xhc3MgUG9ydChvYmplY3QpOgogICAgICAgICBzZWxmLl9oZWxwZXIgPSBO
b25lCiAgICAgICAgIHNlbGYuX2h0dHBfc2VydmVyID0gTm9uZQogICAgICAgICBzZWxmLl93ZWJz
b2NrZXRfc2VydmVyID0gTm9uZQorICAgICAgICBzZWxmLl9pbWFnZV9kaWZmZXIgPSBOb25lCisg
ICAgICAgIHNlbGYuX3NlcnZlcl9wcm9jZXNzX2NvbnN0cnVjdG9yID0gc2VydmVyX3Byb2Nlc3Mu
U2VydmVyUHJvY2VzcyAgIyBvdmVycmlkYWJsZSBmb3IgdGVzdGluZwogICAgICAgICBzZWxmLl9o
dHRwX2xvY2sgPSBOb25lICAjIEZJWE1FOiBXaHkgZG9lcyB0aGlzIGxpdmUgb24gdGhlIHBvcnQg
b2JqZWN0PwogCiAgICAgICAgICMgUHl0aG9uJ3MgUG9wZW4gaGFzIGEgYnVnIHRoYXQgY2F1c2Vz
IGFueSBwaXBlcyBvcGVuZWQgdG8gYQpAQCAtMzA5LDggKzMxMywxOCBAQCBjbGFzcyBQb3J0KG9i
amVjdCk6CiAKICAgICAgICAgfHRvbGVyYW5jZXwgc2hvdWxkIGJlIGEgcGVyY2VudGFnZSB2YWx1
ZSAoMC4wIC0gMTAwLjApLgogICAgICAgICBJZiBpdCBpcyBvbWl0dGVkLCB0aGUgcG9ydCBkZWZh
dWx0IHRvbGVyYW5jZSB2YWx1ZSBpcyB1c2VkLgorCisgICAgICAgIElmIGFuIGVycm9yIG9jY3Vy
cyAobGlrZSBJbWFnZURpZmYgaXNuJ3QgZm91bmQsIG9yIGNyYXNoZXMsIHdlIGxvZyBhbiBlcnJv
ciBhbmQgcmV0dXJuIFRydWUgKGZvciBhIGRpZmYpLgogICAgICAgICAiIiIKLSAgICAgICAgcmFp
c2UgTm90SW1wbGVtZW50ZWRFcnJvcignUG9ydC5kaWZmX2ltYWdlJykKKyAgICAgICAgaWYgbm90
IGFjdHVhbF9jb250ZW50cyBhbmQgbm90IGV4cGVjdGVkX2NvbnRlbnRzOgorICAgICAgICAgICAg
cmV0dXJuIChOb25lLCAwKQorICAgICAgICBpZiBub3QgYWN0dWFsX2NvbnRlbnRzIG9yIG5vdCBl
eHBlY3RlZF9jb250ZW50czoKKyAgICAgICAgICAgIHJldHVybiAoVHJ1ZSwgMCkKKyAgICAgICAg
aWYgbm90IHNlbGYuX2ltYWdlX2RpZmZlcjoKKyAgICAgICAgICAgIHNlbGYuX2ltYWdlX2RpZmZl
ciA9IGltYWdlX2RpZmYuSW1hZ2VEaWZmZXIoc2VsZikKKyAgICAgICAgc2VsZi5zZXRfb3B0aW9u
X2RlZmF1bHQoJ3RvbGVyYW5jZScsIDAuMSkKKyAgICAgICAgdG9sZXJhbmNlID0gdG9sZXJhbmNl
IG9yIHNlbGYuZ2V0X29wdGlvbigndG9sZXJhbmNlJykKKyAgICAgICAgcmV0dXJuIHNlbGYuX2lt
YWdlX2RpZmZlci5kaWZmX2ltYWdlKGV4cGVjdGVkX2NvbnRlbnRzLCBhY3R1YWxfY29udGVudHMs
IHRvbGVyYW5jZSkKIAogICAgIGRlZiBkaWZmX3RleHQoc2VsZiwgZXhwZWN0ZWRfdGV4dCwgYWN0
dWFsX3RleHQsIGV4cGVjdGVkX2ZpbGVuYW1lLCBhY3R1YWxfZmlsZW5hbWUpOgogICAgICAgICAi
IiJSZXR1cm5zIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGRpZmYgb2YgdGhlIHR3byB0ZXh0IHN0
cmluZ3MKQEAgLTc4MCw3ICs3OTQsOSBAQCBjbGFzcyBQb3J0KG9iamVjdCk6CiAKICAgICBkZWYg
Y2xlYW5fdXBfdGVzdF9ydW4oc2VsZik6CiAgICAgICAgICIiIlBlcmZvcm0gcG9ydC1zcGVjaWZp
YyB3b3JrIGF0IHRoZSBlbmQgb2YgYSB0ZXN0IHJ1bi4iIiIKLSAgICAgICAgcGFzcworICAgICAg
ICBpZiBzZWxmLl9pbWFnZV9kaWZmZXI6CisgICAgICAgICAgICBzZWxmLl9pbWFnZV9kaWZmZXIu
c3RvcCgpCisgICAgICAgICAgICBzZWxmLl9pbWFnZV9kaWZmZXIgPSBOb25lCiAKICAgICAjIEZJ
WE1FOiBvcy5lbnZpcm9uIGFjY2VzcyBzaG91bGQgYmUgbW92ZWQgdG8gb250byBhIGNvbW1vbi9z
eXN0ZW0gY2xhc3MgdG8gYmUgbW9yZSBlYXNpbHkgbW9ja2FibGUuCiAgICAgZGVmIF92YWx1ZV9v
cl9kZWZhdWx0X2Zyb21fZW52aXJvbihzZWxmLCBuYW1lLCBkZWZhdWx0PU5vbmUpOgpkaWZmIC0t
Z2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9kcml2ZXIucHkg
Yi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2RyaXZlci5weQppbmRl
eCBmZmMxYzE5NDVkNjg5Y2NkYjIwYjQ5ZWZlNzhjMDFjMDkxMjBkMzM4Li5hZjU3NzQwZWQ5MjMy
YTY0MTExNWQ5M2E3MDI3Mjc2NmQxOWFjODAwIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2RyaXZlci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2RyaXZlci5weQpAQCAtMzYsOCArMzYsNiBAQCBpbXBv
cnQgdGltZQogCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0gaW1wb3J0IHBhdGgKIAotZnJv
bSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydCBpbXBvcnQgc2VydmVyX3Byb2Nlc3MKLQogCiBf
bG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCiAKQEAgLTExNSw5ICsxMTMsNiBAQCBj
bGFzcyBEcml2ZXIob2JqZWN0KToKICAgICAgICAgc2VsZi5fd29ya2VyX251bWJlciA9IHdvcmtl
cl9udW1iZXIKICAgICAgICAgc2VsZi5fbm9fdGltZW91dCA9IG5vX3RpbWVvdXQKIAotICAgICAg
ICAjIG92ZXJyaWRhYmxlIGZvciB0ZXN0aW5nLgotICAgICAgICBzZWxmLl9zZXJ2ZXJfcHJvY2Vz
c19jb25zdHJ1Y3RvciA9IHNlcnZlcl9wcm9jZXNzLlNlcnZlclByb2Nlc3MKLQogICAgICAgICBz
ZWxmLl9kcml2ZXJfdGVtcGRpciA9IE5vbmUKICAgICAgICAgIyBXZWJLaXRUZXN0UnVubmVyIGNh
biByZXBvcnQgYmFjayBzdWJwcm9jZXNzIGNyYXNoZXMgYnkgcHJpbnRpbmcKICAgICAgICAgIyAi
I0NSQVNIRUQgLSBQUk9DRVNTTkFNRSIuICBTaW5jZSB0aG9zZSBjYW4gaGFwcGVuIGF0IGFueSB0
aW1lCkBAIC0yNzEsNyArMjY2LDcgQEAgY2xhc3MgRHJpdmVyKG9iamVjdCk6CiAgICAgICAgIGVu
dmlyb25tZW50WydMT0NBTF9SRVNPVVJDRV9ST09UJ10gPSBzZWxmLl9wb3J0LmxheW91dF90ZXN0
c19kaXIoKQogICAgICAgICBzZWxmLl9jcmFzaGVkX3Byb2Nlc3NfbmFtZSA9IE5vbmUKICAgICAg
ICAgc2VsZi5fY3Jhc2hlZF9waWQgPSBOb25lCi0gICAgICAgIHNlbGYuX3NlcnZlcl9wcm9jZXNz
ID0gc2VsZi5fc2VydmVyX3Byb2Nlc3NfY29uc3RydWN0b3Ioc2VsZi5fcG9ydCwgc2VydmVyX25h
bWUsIHNlbGYuY21kX2xpbmUocGl4ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3MpLCBlbnZpcm9ubWVu
dCkKKyAgICAgICAgc2VsZi5fc2VydmVyX3Byb2Nlc3MgPSBzZWxmLl9wb3J0Ll9zZXJ2ZXJfcHJv
Y2Vzc19jb25zdHJ1Y3RvcihzZWxmLl9wb3J0LCBzZXJ2ZXJfbmFtZSwgc2VsZi5jbWRfbGluZShw
aXhlbF90ZXN0cywgcGVyX3Rlc3RfYXJncyksIGVudmlyb25tZW50KQogICAgICAgICBzZWxmLl9z
ZXJ2ZXJfcHJvY2Vzcy5zdGFydCgpCiAKICAgICBkZWYgc3RvcChzZWxmKToKZGlmZiAtLWdpdCBh
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZHJpdmVyX3VuaXR0ZXN0
LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9kcml2ZXJfdW5p
dHRlc3QucHkKaW5kZXggZDcxMjAyM2UzYWNmMGI2NTdjMzAxNTAyYzM2Njg4MjAzNGEzYjA2Yi4u
NjJmNjk5NTJiZTZhMDFiMTk4ZjgxZjQ4YjQ2ODkzN2E3NzYyMTQ5ZSAxMDA2NDQKLS0tIGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9kcml2ZXJfdW5pdHRlc3QucHkK
KysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9kcml2ZXJfdW5p
dHRlc3QucHkKQEAgLTMxLDYgKzMxLDcgQEAgaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHdlYmtpdHB5
LmNvbW1vbi5zeXN0ZW0uc3lzdGVtaG9zdF9tb2NrIGltcG9ydCBNb2NrU3lzdGVtSG9zdAogCiBm
cm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9ydCBQb3J0LCBEcml2ZXIsIERyaXZl
ck91dHB1dAorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydC5zZXJ2ZXJfcHJvY2Vzc19t
b2NrIGltcG9ydCBNb2NrU2VydmVyUHJvY2VzcwogCiAjIEZJWE1FOiByZW1vdmUgdGhlIGRlcGVu
ZGVuY3kgb24gVGVzdFdlYktpdFBvcnQKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQu
d2Via2l0X3VuaXR0ZXN0IGltcG9ydCBUZXN0V2ViS2l0UG9ydApAQCAtMjMyLDggKzIzMyw4IEBA
IGNsYXNzIERyaXZlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3Rfc3Rv
cF9jbGVhbnNfdXBfcHJvcGVybHkoc2VsZik6CiAgICAgICAgIHBvcnQgPSBUZXN0V2ViS2l0UG9y
dCgpCisgICAgICAgIHBvcnQuX3NlcnZlcl9wcm9jZXNzX2NvbnN0cnVjdG9yID0gTW9ja1NlcnZl
clByb2Nlc3MKICAgICAgICAgZHJpdmVyID0gRHJpdmVyKHBvcnQsIDAsIHBpeGVsX3Rlc3RzPVRy
dWUpCi0gICAgICAgIGRyaXZlci5fc2VydmVyX3Byb2Nlc3NfY29uc3RydWN0b3IgPSBNb2NrU2Vy
dmVyUHJvY2VzcwogICAgICAgICBkcml2ZXIuc3RhcnQoVHJ1ZSwgW10pCiAgICAgICAgIGxhc3Rf
dG1wZGlyID0gcG9ydC5fZmlsZXN5c3RlbS5sYXN0X3RtcGRpcgogICAgICAgICBzZWxmLmFzc2Vy
dE5vdEVxdWFscyhsYXN0X3RtcGRpciwgTm9uZSkKQEAgLTI0Miw4ICsyNDMsOCBAQCBjbGFzcyBE
cml2ZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X3R3b19zdGFydHNf
Y2xlYW5zX3VwX3Byb3Blcmx5KHNlbGYpOgogICAgICAgICBwb3J0ID0gVGVzdFdlYktpdFBvcnQo
KQorICAgICAgICBwb3J0Ll9zZXJ2ZXJfcHJvY2Vzc19jb25zdHJ1Y3RvciA9IE1vY2tTZXJ2ZXJQ
cm9jZXNzCiAgICAgICAgIGRyaXZlciA9IERyaXZlcihwb3J0LCAwLCBwaXhlbF90ZXN0cz1UcnVl
KQotICAgICAgICBkcml2ZXIuX3NlcnZlcl9wcm9jZXNzX2NvbnN0cnVjdG9yID0gTW9ja1NlcnZl
clByb2Nlc3MKICAgICAgICAgZHJpdmVyLnN0YXJ0KFRydWUsIFtdKQogICAgICAgICBsYXN0X3Rt
cGRpciA9IHBvcnQuX2ZpbGVzeXN0ZW0ubGFzdF90bXBkaXIKICAgICAgICAgZHJpdmVyLl9zdGFy
dChUcnVlLCBbXSkKQEAgLTI1MSw1MCArMjUyLDExIEBAIGNsYXNzIERyaXZlclRlc3QodW5pdHRl
c3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3Rfc3RhcnRfYWN0dWFsbHlfc3RhcnRzKHNlbGYp
OgogICAgICAgICBwb3J0ID0gVGVzdFdlYktpdFBvcnQoKQorICAgICAgICBwb3J0Ll9zZXJ2ZXJf
cHJvY2Vzc19jb25zdHJ1Y3RvciA9IE1vY2tTZXJ2ZXJQcm9jZXNzCiAgICAgICAgIGRyaXZlciA9
IERyaXZlcihwb3J0LCAwLCBwaXhlbF90ZXN0cz1UcnVlKQotICAgICAgICBkcml2ZXIuX3NlcnZl
cl9wcm9jZXNzX2NvbnN0cnVjdG9yID0gTW9ja1NlcnZlclByb2Nlc3MKICAgICAgICAgZHJpdmVy
LnN0YXJ0KFRydWUsIFtdKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoZHJpdmVyLl9zZXJ2ZXJf
cHJvY2Vzcy5zdGFydGVkKQogCiAKLWNsYXNzIE1vY2tTZXJ2ZXJQcm9jZXNzKG9iamVjdCk6Ci0g
ICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnRfb2JqPU5vbmUsIG5hbWU9Tm9uZSwgY21kPU5vbmUs
IGVudj1Ob25lLCB1bml2ZXJzYWxfbmV3bGluZXM9RmFsc2UsIGxpbmVzPU5vbmUpOgotICAgICAg
ICBzZWxmLnRpbWVkX291dCA9IEZhbHNlCi0gICAgICAgIHNlbGYubGluZXMgPSBsaW5lcyBvciBb
XQotICAgICAgICBzZWxmLmNyYXNoZWQgPSBGYWxzZQotICAgICAgICBzZWxmLnN0YXJ0ZWQgPSBG
YWxzZQotCi0gICAgZGVmIGhhc19jcmFzaGVkKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5j
cmFzaGVkCi0KLSAgICBkZWYgcmVhZF9zdGRvdXRfbGluZShzZWxmLCBkZWFkbGluZSk6Ci0gICAg
ICAgIHJldHVybiBzZWxmLmxpbmVzLnBvcCgwKSArICJcbiIKLQotICAgIGRlZiByZWFkX3N0ZG91
dChzZWxmLCBkZWFkbGluZSwgc2l6ZSk6Ci0gICAgICAgIGZpcnN0X2xpbmUgPSBzZWxmLmxpbmVz
WzBdCi0gICAgICAgIGlmIHNpemUgPiBsZW4oZmlyc3RfbGluZSk6Ci0gICAgICAgICAgICBzZWxm
LmxpbmVzLnBvcCgwKQotICAgICAgICAgICAgcmVtYWluaW5nX3NpemUgPSBzaXplIC0gbGVuKGZp
cnN0X2xpbmUpIC0gMQotICAgICAgICAgICAgaWYgbm90IHJlbWFpbmluZ19zaXplOgotICAgICAg
ICAgICAgICAgIHJldHVybiBmaXJzdF9saW5lICsgIlxuIgotICAgICAgICAgICAgcmV0dXJuIGZp
cnN0X2xpbmUgKyAiXG4iICsgc2VsZi5yZWFkX3N0ZG91dChkZWFkbGluZSwgcmVtYWluaW5nX3Np
emUpCi0gICAgICAgIHJlc3VsdCA9IHNlbGYubGluZXNbMF1bOnNpemVdCi0gICAgICAgIHNlbGYu
bGluZXNbMF0gPSBzZWxmLmxpbmVzWzBdW3NpemU6XQotICAgICAgICByZXR1cm4gcmVzdWx0Ci0K
LSAgICBkZWYgcmVhZF9laXRoZXJfc3Rkb3V0X29yX3N0ZGVycl9saW5lKHNlbGYsIGRlYWRsaW5l
KToKLSAgICAgICAgIyBGSVhNRTogV2Ugc2hvdWxkIGhhdmUgdGVzdHMgd2hpY2ggaW50ZXJtaXgg
c3RkZXJyIGFuZCBzdGRvdXQgbGluZXMuCi0gICAgICAgIHJldHVybiBzZWxmLnJlYWRfc3Rkb3V0
X2xpbmUoZGVhZGxpbmUpLCBOb25lCi0KLSAgICBkZWYgc3RhcnQoc2VsZik6Ci0gICAgICAgIHNl
bGYuc3RhcnRlZCA9IFRydWUKLQotICAgIGRlZiBzdG9wKHNlbGYsIGtpbGxfZGlyZWN0bHk9RmFs
c2UpOgotICAgICAgICByZXR1cm4KLQotICAgIGRlZiBraWxsKHNlbGYpOgotICAgICAgICByZXR1
cm4KLQotCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpk
aWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9lZmwu
cHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2VmbC5weQppbmRl
eCA0NzU4ZjdhNjkzM2M2Nzk2Zjk0MzE0ZmRmZmM4YWM4Zjg1YWRmYzljLi4wNmRjZDE4N2E1YjMy
YTIyMTdiOTQzOWQ3YmY0NDdhZGZiMGQ5ZWViIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2VmbC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L2VmbC5weQpAQCAtNzIsNiArNzIsNyBAQCBjbGFzcyBFZmxQ
b3J0KFdlYktpdFBvcnQsIFB1bHNlQXVkaW9TYW5pdGl6ZXIpOgogICAgICAgICByZXR1cm4gc3Vw
ZXIoRWZsUG9ydCwgc2VsZikuZGVmYXVsdF90aW1lb3V0X21zKCkKIAogICAgIGRlZiBjbGVhbl91
cF90ZXN0X3J1bihzZWxmKToKKyAgICAgICAgc3VwZXIoRWZsUG9ydCwgc2VsZikuY2xlYW5fdXBf
dGVzdF9ydW4oKQogICAgICAgICBzZWxmLl9yZXN0b3JlX3B1bHNlYXVkaW9fbW9kdWxlKCkKIAog
ICAgIGRlZiBfZ2VuZXJhdGVfYWxsX3Rlc3RfY29uZmlndXJhdGlvbnMoc2VsZik6CmRpZmYgLS1n
aXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2d0ay5weSBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZ3RrLnB5CmluZGV4IGViYjc2
MWJiZDI1MjgxYjdlZmU3ZDU0ZGJmNTNhYjk0NDczMTNmZDUuLmYyYTI0N2M4MzI2MzQ1OWQwMmJk
YWI4MGM2YjdjMjU5NjdhOTZiYzkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvZ3RrLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3BvcnQvZ3RrLnB5CkBAIC01MSw2ICs1MSw3IEBAIGNsYXNzIEd0a1BvcnQoV2Vi
S2l0UG9ydCwgUHVsc2VBdWRpb1Nhbml0aXplcik6CiAgICAgICAgIHNlbGYuX3VubG9hZF9wdWxz
ZWF1ZGlvX21vZHVsZSgpCiAKICAgICBkZWYgY2xlYW5fdXBfdGVzdF9ydW4oc2VsZik6CisgICAg
ICAgIHN1cGVyKEd0a1BvcnQsIHNlbGYpLmNsZWFuX3VwX3Rlc3RfcnVuKCkKICAgICAgICAgc2Vs
Zi5fcmVzdG9yZV9wdWxzZWF1ZGlvX21vZHVsZSgpCiAKICAgICBkZWYgc2V0dXBfZW52aXJvbl9m
b3Jfc2VydmVyKHNlbGYsIHNlcnZlcl9uYW1lPU5vbmUpOgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9pbWFnZV9kaWZmLnB5IGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9pbWFnZV9kaWZmLnB5Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjJjY2NjMWY1ZTVhMDZmOGU5YzhlYWNmMjU0OWY2ZDBiNGM1MmUxZDIKLS0tIC9kZXYvbnVsbAor
KysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2ltYWdlX2RpZmYu
cHkKQEAgLTAsMCArMSwxMTcgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChD
KSAyMDEwIEdhYm9yIFJhcGNzYW55aSA8cmdhYm9yQGluZi51LXN6ZWdlZC5odT4sIFVuaXZlcnNp
dHkgb2YgU3plZ2VkCisjIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoK
KyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIEdvb2dsZSBuYW1lIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIiV2ViS2l0IGltcGxlbWVudGF0aW9ucyBv
ZiB0aGUgUG9ydCBpbnRlcmZhY2UuIiIiCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgcmUKK2lt
cG9ydCB0aW1lCisKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IHNlcnZl
cl9wcm9jZXNzCisKKworX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQorCisKK2Ns
YXNzIEltYWdlRGlmZmVyKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQpOgor
ICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydAorICAgICAgICBzZWxmLl90b2xlcmFuY2UgPSBOb25l
CisgICAgICAgIHNlbGYuX3Byb2Nlc3MgPSBOb25lCisKKyAgICBkZWYgZGlmZl9pbWFnZShzZWxm
LCBleHBlY3RlZF9jb250ZW50cywgYWN0dWFsX2NvbnRlbnRzLCB0b2xlcmFuY2UpOgorICAgICAg
ICBpZiB0b2xlcmFuY2UgIT0gc2VsZi5fdG9sZXJhbmNlOgorICAgICAgICAgICAgc2VsZi5zdG9w
KCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYXNzZXJ0KGV4cGVjdGVkX2NvbnRlbnRzKQor
ICAgICAgICAgICAgYXNzZXJ0KGFjdHVhbF9jb250ZW50cykKKyAgICAgICAgICAgIGFzc2VydCh0
b2xlcmFuY2UgaXMgbm90IE5vbmUpCisKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9wcm9jZXNz
OgorICAgICAgICAgICAgICAgIHNlbGYuX3N0YXJ0KHRvbGVyYW5jZSkKKyAgICAgICAgICAgIHNl
bGYuX3Byb2Nlc3Mud3JpdGUoJ0NvbnRlbnQtTGVuZ3RoOiAlZFxuJXNDb250ZW50LUxlbmd0aDog
JWRcbiVzJyAlICgKKyAgICAgICAgICAgICAgICBsZW4oYWN0dWFsX2NvbnRlbnRzKSwgYWN0dWFs
X2NvbnRlbnRzLAorICAgICAgICAgICAgICAgIGxlbihleHBlY3RlZF9jb250ZW50cyksIGV4cGVj
dGVkX2NvbnRlbnRzKSkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9yZWFkKCkKKyAgICAgICAg
ZXhjZXB0IElPRXJyb3IgYXMgZXhjZXB0aW9uOgorICAgICAgICAgICAgX2xvZy5lcnJvcigiRmFp
bGVkIHRvIGNvbXB1dGUgYW4gaW1hZ2UgZGlmZjogJXMiICUgc3RyKGV4Y2VwdGlvbikpCisgICAg
ICAgICAgICByZXR1cm4gKFRydWUsIDApCisKKyAgICBkZWYgX3N0YXJ0KHNlbGYsIHRvbGVyYW5j
ZSk6CisgICAgICAgIGNvbW1hbmQgPSBbc2VsZi5fcG9ydC5fcGF0aF90b19pbWFnZV9kaWZmKCks
ICctLXRvbGVyYW5jZScsIHN0cih0b2xlcmFuY2UpXQorICAgICAgICBlbnZpcm9ubWVudCA9IHNl
bGYuX3BvcnQuc2V0dXBfZW52aXJvbl9mb3Jfc2VydmVyKCdJbWFnZURpZmYnKQorICAgICAgICBz
ZWxmLl9wcm9jZXNzID0gc2VsZi5fcG9ydC5fc2VydmVyX3Byb2Nlc3NfY29uc3RydWN0b3Ioc2Vs
Zi5fcG9ydCwgJ0ltYWdlRGlmZicsIGNvbW1hbmQsIGVudmlyb25tZW50KQorICAgICAgICBzZWxm
Ll9wcm9jZXNzLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5fdG9sZXJhbmNlID0gdG9sZXJhbmNlCisK
KyAgICBkZWYgX3JlYWQoc2VsZik6CisgICAgICAgIGRlYWRsaW5lID0gdGltZS50aW1lKCkgKyAy
LjAKKyAgICAgICAgb3V0cHV0ID0gTm9uZQorICAgICAgICBvdXRwdXRfaW1hZ2UgPSAiIgorCisg
ICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBvdXRwdXQgPSBzZWxmLl9wcm9jZXNzLnJl
YWRfc3Rkb3V0X2xpbmUoZGVhZGxpbmUpCisgICAgICAgICAgICBpZiBzZWxmLl9wcm9jZXNzLnRp
bWVkX291dCBvciBzZWxmLl9wcm9jZXNzLmhhc19jcmFzaGVkKCkgb3Igbm90IG91dHB1dDoKKyAg
ICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICBpZiBvdXRwdXQuc3RhcnRzd2l0aCgn
ZGlmZicpOiAgIyBUaGlzIGlzIHRoZSBsYXN0IGxpbmUgSW1hZ2VEaWZmIHByaW50cy4KKyAgICAg
ICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICBpZiBvdXRwdXQuc3RhcnRzd2l0aCgnQ29u
dGVudC1MZW5ndGgnKToKKyAgICAgICAgICAgICAgICBtID0gcmUubWF0Y2goJ0NvbnRlbnQtTGVu
Z3RoOiAoXGQrKScsIG91dHB1dCkKKyAgICAgICAgICAgICAgICBjb250ZW50X2xlbmd0aCA9IGlu
dChtLmdyb3VwKDEpKQorICAgICAgICAgICAgICAgIG91dHB1dF9pbWFnZSA9IHNlbGYuX3Byb2Nl
c3MucmVhZF9zdGRvdXQoZGVhZGxpbmUsIGNvbnRlbnRfbGVuZ3RoKQorICAgICAgICAgICAgICAg
IG91dHB1dCA9IHNlbGYuX3Byb2Nlc3MucmVhZF9zdGRvdXRfbGluZShkZWFkbGluZSkKKyAgICAg
ICAgICAgICAgICBicmVhaworCisgICAgICAgIHN0ZGVyciA9IHNlbGYuX3Byb2Nlc3MucG9wX2Fs
bF9idWZmZXJlZF9zdGRlcnIoKQorICAgICAgICBpZiBzdGRlcnI6CisgICAgICAgICAgICBfbG9n
Lndhcm4oIkltYWdlRGlmZiBwcm9kdWNlZCBzdGRlcnIgb3V0cHV0OlxuIiArIHN0ZGVycikKKyAg
ICAgICAgaWYgc2VsZi5fcHJvY2Vzcy50aW1lZF9vdXQ6CisgICAgICAgICAgICBfbG9nLmVycm9y
KCJJbWFnZURpZmYgdGltZWQgb3V0IikKKyAgICAgICAgaWYgc2VsZi5fcHJvY2Vzcy5oYXNfY3Jh
c2hlZCgpOgorICAgICAgICAgICAgX2xvZy5lcnJvcigiSW1hZ2VEaWZmIGNyYXNoZWQiKQorICAg
ICAgICAjIEZJWE1FOiBUaGVyZSBpcyBubyBuZWVkIHRvIHNodXQgZG93biB0aGUgSW1hZ2VEaWZm
IHNlcnZlciBhZnRlciBldmVyeSBkaWZmLgorICAgICAgICBzZWxmLl9wcm9jZXNzLnN0b3AoKQor
CisgICAgICAgIGRpZmZfcGVyY2VudCA9IDAKKyAgICAgICAgaWYgb3V0cHV0IGFuZCBvdXRwdXQu
c3RhcnRzd2l0aCgnZGlmZicpOgorICAgICAgICAgICAgbSA9IHJlLm1hdGNoKCdkaWZmOiAoLisp
JSAocGFzc2VkfGZhaWxlZCknLCBvdXRwdXQpCisgICAgICAgICAgICBpZiBtLmdyb3VwKDIpID09
ICdwYXNzZWQnOgorICAgICAgICAgICAgICAgIHJldHVybiBbTm9uZSwgMF0KKyAgICAgICAgICAg
IGRpZmZfcGVyY2VudCA9IGZsb2F0KG0uZ3JvdXAoMSkpCisKKyAgICAgICAgcmV0dXJuIChvdXRw
dXRfaW1hZ2UsIGRpZmZfcGVyY2VudCkKKworICAgIGRlZiBzdG9wKHNlbGYpOgorICAgICAgICBp
ZiBzZWxmLl9wcm9jZXNzOgorICAgICAgICAgICAgc2VsZi5fcHJvY2Vzcy5zdG9wKCkKKyAgICAg
ICAgICAgIHNlbGYuX3Byb2Nlc3MgPSBOb25lCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2ltYWdlX2RpZmZfdW5pdHRlc3QucHkgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2ltYWdlX2RpZmZfdW5pdHRlc3QucHkK
bmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYjA2NzU2YzM1NTVmNDBkZmU0NjQ0NjUwMzM4YzQwMDkxMThiOTM0NAotLS0g
L2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQv
aW1hZ2VfZGlmZl91bml0dGVzdC5weQpAQCAtMCwwICsxLDUyIEBACisjIENvcHlyaWdodCAoQykg
MjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMg
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKwor
IiIiVW5pdCB0ZXN0aW5nIGJhc2UgY2xhc3MgZm9yIFBvcnQgaW1wbGVtZW50YXRpb25zLiIiIgor
CitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydC5zZXJ2
ZXJfcHJvY2Vzc19tb2NrIGltcG9ydCBNb2NrU2VydmVyUHJvY2VzcworZnJvbSB3ZWJraXRweS5s
YXlvdXRfdGVzdHMucG9ydC5pbWFnZV9kaWZmIGltcG9ydCBJbWFnZURpZmZlcgorCisKK2NsYXNz
IEZha2VQb3J0KG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNlcnZlcl9wcm9jZXNz
X291dHB1dCk6CisgICAgICAgIHNlbGYuX3NlcnZlcl9wcm9jZXNzX2NvbnN0cnVjdG9yID0gbGFt
YmRhIHBvcnQsIG5tLCBjbWQsIGVudjogTW9ja1NlcnZlclByb2Nlc3MobGluZXM9c2VydmVyX3By
b2Nlc3Nfb3V0cHV0KQorCisgICAgZGVmIF9wYXRoX3RvX2ltYWdlX2RpZmYoc2VsZik6CisgICAg
ICAgIHJldHVybiAnJworCisgICAgZGVmIHNldHVwX2Vudmlyb25fZm9yX3NlcnZlcihzZWxmLCBu
bSk6CisgICAgICAgIHJldHVybiBOb25lCisKKworY2xhc3MgVGVzdEltYWdlRGlmZmVyKHVuaXR0
ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9kaWZmX2ltYWdlKHNlbGYpOgorICAgICAgICBw
b3J0ID0gRmFrZVBvcnQoWydkaWZmOiAxMDAlIGZhaWxlZFxuJ10pCisgICAgICAgIGltYWdlX2Rp
ZmZlciA9IEltYWdlRGlmZmVyKHBvcnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGltYWdl
X2RpZmZlci5kaWZmX2ltYWdlKCdmb28nLCAnYmFyJywgMC4xKSwgKCcnLCAxMDAuMCkpCmRpZmYg
LS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L21vY2tfZHJ0
X3VuaXR0ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9t
b2NrX2RydF91bml0dGVzdC5weQppbmRleCAxNjU0ZTFjNDgxNzAwYTQwOGRjZWI3NTRjMjk2ODAy
YTQ2ZWVjYWUxLi45NjRlZjA3ZWYxMmQxZmI3OTM2NDUwOGYyMjE4NDhlODVkM2E0ODkxIDEwMDc1
NQotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L21vY2tfZHJ0
X3VuaXR0ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Bv
cnQvbW9ja19kcnRfdW5pdHRlc3QucHkKQEAgLTU3LDYgKzU3LDkgQEAgY2xhc3MgTW9ja0RSVFBv
cnRUZXN0KHBvcnRfdGVzdGNhc2UuUG9ydFRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9jaGVja19z
eXNfZGVwcyhzZWxmKToKICAgICAgICAgcGFzcwogCisgICAgZGVmIHRlc3RfZGlmZl9pbWFnZShz
ZWxmKToKKyAgICAgICAgcGFzcworCiAgICAgZGVmIHRlc3RfdXNlc19hcGFjaGUoc2VsZik6CiAg
ICAgICAgIHBhc3MKIApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcG9ydC9wb3J0X3Rlc3RjYXNlLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC9wb3J0X3Rlc3RjYXNlLnB5CmluZGV4IDlmNzc4MzJhYTQyOWU4YzBjZmE1
NzNjNjAyOGI0N2MzOWFkMGNkYjEuLjdkZTI1NDAyZDA5MDcxYzk0YWJlMTVlMDUzMjkyZjY5ZDZj
NjMxY2QgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Bv
cnQvcG9ydF90ZXN0Y2FzZS5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L3BvcnRfdGVzdGNhc2UucHkKQEAgLTQxLDYgKzQxLDcgQEAgZnJvbSB3ZWJraXRw
eS5sYXlvdXRfdGVzdHMuc2VydmVycyBpbXBvcnQgaHR0cF9zZXJ2ZXJfYmFzZQogZnJvbSB3ZWJr
aXRweS5sYXlvdXRfdGVzdHMuc2VydmVycyBpbXBvcnQgaHR0cF9zZXJ2ZXJfYmFzZQogZnJvbSB3
ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydCBpbXBvcnQgZmFjdG9yeQogZnJvbSB3ZWJraXRweS5s
YXlvdXRfdGVzdHMucG9ydC5jb25maWdfbW9jayBpbXBvcnQgTW9ja0NvbmZpZworZnJvbSB3ZWJr
aXRweS5sYXlvdXRfdGVzdHMucG9ydC5zZXJ2ZXJfcHJvY2Vzc19tb2NrIGltcG9ydCBNb2NrU2Vy
dmVyUHJvY2VzcwogZnJvbSB3ZWJraXRweS50b29sLm1vY2t0b29sIGltcG9ydCBNb2NrT3B0aW9u
cwogCiAKQEAgLTIwOSw2ICsyMTAsNyBAQCBjbGFzcyBQb3J0VGVzdENhc2UodW5pdHRlc3QuVGVz
dENhc2UpOgogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHBvcnQuZGlmZl9pbWFnZShOb25lLCBO
b25lKVswXSkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwb3J0LmRpZmZfaW1hZ2UoTm9uZSwg
JycpWzBdKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHBvcnQuZGlmZl9pbWFnZSgnJywgTm9u
ZSlbMF0pCisKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwb3J0LmRpZmZfaW1hZ2UoJycsICcn
KVswXSkKIAogICAgIGRlZiB0ZXN0X2RpZmZfaW1hZ2VfX21pc3NpbmdfYWN0dWFsKHNlbGYpOgpA
QCAtMjIxLDYgKzIyMywyMiBAQCBjbGFzcyBQb3J0VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2Up
OgogICAgICAgICBzZWxmLmFzc2VydFRydWUocG9ydC5kaWZmX2ltYWdlKCdmb28nLCBOb25lKVsw
XSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBvcnQuZGlmZl9pbWFnZSgnZm9vJywgJycpWzBd
KQogCisgICAgZGVmIHRlc3RfZGlmZl9pbWFnZShzZWxmKToKKyAgICAgICAgcG9ydCA9IHNlbGYu
bWFrZV9wb3J0KCkKKyAgICAgICAgc2VsZi5wcm9jID0gTm9uZQorCisgICAgICAgIGRlZiBtYWtl
X3Byb2MocG9ydCwgbm0sIGNtZCwgZW52KToKKyAgICAgICAgICAgIHNlbGYucHJvYyA9IE1vY2tT
ZXJ2ZXJQcm9jZXNzKHBvcnQsIG5tLCBjbWQsIGVudiwgbGluZXM9WydkaWZmOiAxMDAlIGZhaWxl
ZFxuJ10pCisgICAgICAgICAgICByZXR1cm4gc2VsZi5wcm9jCisKKyAgICAgICAgcG9ydC5fc2Vy
dmVyX3Byb2Nlc3NfY29uc3RydWN0b3IgPSBtYWtlX3Byb2MKKyAgICAgICAgcG9ydC5zZXR1cF90
ZXN0X3J1bigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHBvcnQuZGlmZl9pbWFnZSgnZm9v
JywgJ2JhcicpLCAoJycsIDEwMC4wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5w
cm9jLmNtZFsxOjNdLCBbIi0tdG9sZXJhbmNlIiwgIjAuMSJdKQorICAgICAgICBwb3J0LmNsZWFu
X3VwX3Rlc3RfcnVuKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYucHJvYy5zdG9wcGVk
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhwb3J0Ll9pbWFnZV9kaWZmZXIsIE5vbmUpCisK
ICAgICBkZWYgdGVzdF9jaGVja19idWlsZChzZWxmKToKICAgICAgICAgcG9ydCA9IHNlbGYubWFr
ZV9wb3J0KCkKICAgICAgICAgcG9ydC5jaGVja19idWlsZChuZWVkc19odHRwPVRydWUpCmRpZmYg
LS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3NlcnZlcl9w
cm9jZXNzLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9zZXJ2
ZXJfcHJvY2Vzcy5weQppbmRleCBlMDdhODA0YjBiMjFiY2EwZjNiOTgxMjMxZTU2YTYxYzU1ZjYz
MTlhLi5hYTFlMzAyNGZkZTVlMmEzMjE2YWE2ZmIyOWFkOTYzYzZmZGJkYzM3IDEwMDY0NAotLS0g
YS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3NlcnZlcl9wcm9jZXNz
LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvc2VydmVy
X3Byb2Nlc3MucHkKQEAgLTMyLDcgKzMyLDYgQEAKIGltcG9ydCBlcnJubwogaW1wb3J0IGxvZ2dp
bmcKIGltcG9ydCBzaWduYWwKLWltcG9ydCBzdWJwcm9jZXNzCiBpbXBvcnQgc3lzCiBpbXBvcnQg
dGltZQogCkBAIC05OSwxMiArOTgsMTIgQEAgY2xhc3MgU2VydmVyUHJvY2VzcyhvYmplY3QpOgog
ICAgICAgICBzZWxmLl9yZXNldCgpCiAgICAgICAgICMgY2xvc2VfZmRzIGlzIGEgd29ya2Fyb3Vu
ZCBmb3IgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTIzMjAKICAgICAgICAgY2xvc2VfZmRz
ID0gbm90IHNlbGYuX2hvc3QucGxhdGZvcm0uaXNfd2luKCkKLSAgICAgICAgc2VsZi5fcHJvYyA9
IHN1YnByb2Nlc3MuUG9wZW4oc2VsZi5fY21kLCBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNz
LlBJUEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlX2Zkcz1j
bG9zZV9mZHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudj1zZWxm
Ll9lbnYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXZlcnNhbF9u
ZXdsaW5lcz1zZWxmLl91bml2ZXJzYWxfbmV3bGluZXMpCisgICAgICAgIHNlbGYuX3Byb2MgPSBz
ZWxmLl9ob3N0LmV4ZWN1dGl2ZS5wb3BlbihzZWxmLl9jbWQsIHN0ZGluPXNlbGYuX2hvc3QuZXhl
Y3V0aXZlLlBJUEUsCisgICAgICAgICAgICBzdGRvdXQ9c2VsZi5faG9zdC5leGVjdXRpdmUuUElQ
RSwKKyAgICAgICAgICAgIHN0ZGVycj1zZWxmLl9ob3N0LmV4ZWN1dGl2ZS5QSVBFLAorICAgICAg
ICAgICAgY2xvc2VfZmRzPWNsb3NlX2ZkcywKKyAgICAgICAgICAgIGVudj1zZWxmLl9lbnYsCisg
ICAgICAgICAgICB1bml2ZXJzYWxfbmV3bGluZXM9c2VsZi5fdW5pdmVyc2FsX25ld2xpbmVzKQog
ICAgICAgICBzZWxmLl9waWQgPSBzZWxmLl9wcm9jLnBpZAogICAgICAgICBmZCA9IHNlbGYuX3By
b2Muc3Rkb3V0LmZpbGVubygpCiAgICAgICAgIGlmIG5vdCBzZWxmLl91c2Vfd2luMzJfYXBpczoK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvc2Vy
dmVyX3Byb2Nlc3NfbW9jay5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3BvcnQvc2VydmVyX3Byb2Nlc3NfbW9jay5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZTQ4NTIzZWIzMjhlY2Zl
NjQ3YmM5ZDRkNzc3MGYyNzNiY2YwYmJjCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9zZXJ2ZXJfcHJvY2Vzc19tb2NrLnB5CkBAIC0w
LDAgKzEsNzcgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisjICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlz
dHJpYnV0aW9uLgorIyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKK2NsYXNzIE1vY2tTZXJ2ZXJQcm9jZXNzKG9i
amVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnRfb2JqPU5vbmUsIG5hbWU9Tm9uZSwg
Y21kPU5vbmUsIGVudj1Ob25lLCB1bml2ZXJzYWxfbmV3bGluZXM9RmFsc2UsIGxpbmVzPU5vbmUp
OgorICAgICAgICBzZWxmLnRpbWVkX291dCA9IEZhbHNlCisgICAgICAgIHNlbGYubGluZXMgPSBs
aW5lcyBvciBbXQorICAgICAgICBzZWxmLmNyYXNoZWQgPSBGYWxzZQorICAgICAgICBzZWxmLndy
aXRlcyA9IFtdCisgICAgICAgIHNlbGYuY21kID0gY21kCisgICAgICAgIHNlbGYuZW52ID0gZW52
CisgICAgICAgIHNlbGYuc3RhcnRlZCA9IEZhbHNlCisgICAgICAgIHNlbGYuc3RvcHBlZCA9IEZh
bHNlCisKKyAgICBkZWYgd3JpdGUoc2VsZiwgYnl0ZXMpOgorICAgICAgICBzZWxmLndyaXRlcy5h
cHBlbmQoYnl0ZXMpCisKKyAgICBkZWYgaGFzX2NyYXNoZWQoc2VsZik6CisgICAgICAgIHJldHVy
biBzZWxmLmNyYXNoZWQKKworICAgIGRlZiByZWFkX3N0ZG91dF9saW5lKHNlbGYsIGRlYWRsaW5l
KToKKyAgICAgICAgcmV0dXJuIHNlbGYubGluZXMucG9wKDApICsgIlxuIgorCisgICAgZGVmIHJl
YWRfc3Rkb3V0KHNlbGYsIGRlYWRsaW5lLCBzaXplKToKKyAgICAgICAgZmlyc3RfbGluZSA9IHNl
bGYubGluZXNbMF0KKyAgICAgICAgaWYgc2l6ZSA+IGxlbihmaXJzdF9saW5lKToKKyAgICAgICAg
ICAgIHNlbGYubGluZXMucG9wKDApCisgICAgICAgICAgICByZW1haW5pbmdfc2l6ZSA9IHNpemUg
LSBsZW4oZmlyc3RfbGluZSkgLSAxCisgICAgICAgICAgICBpZiBub3QgcmVtYWluaW5nX3NpemU6
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZpcnN0X2xpbmUgKyAiXG4iCisgICAgICAgICAgICBy
ZXR1cm4gZmlyc3RfbGluZSArICJcbiIgKyBzZWxmLnJlYWRfc3Rkb3V0KGRlYWRsaW5lLCByZW1h
aW5pbmdfc2l6ZSkKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5saW5lc1swXVs6c2l6ZV0KKyAgICAg
ICAgc2VsZi5saW5lc1swXSA9IHNlbGYubGluZXNbMF1bc2l6ZTpdCisgICAgICAgIHJldHVybiBy
ZXN1bHQKKworICAgIGRlZiBwb3BfYWxsX2J1ZmZlcmVkX3N0ZGVycihzZWxmKToKKyAgICAgICAg
cmV0dXJuICcnCisKKyAgICBkZWYgcmVhZF9laXRoZXJfc3Rkb3V0X29yX3N0ZGVycl9saW5lKHNl
bGYsIGRlYWRsaW5lKToKKyAgICAgICAgIyBGSVhNRTogV2Ugc2hvdWxkIGhhdmUgdGVzdHMgd2hp
Y2ggaW50ZXJtaXggc3RkZXJyIGFuZCBzdGRvdXQgbGluZXMuCisgICAgICAgIHJldHVybiBzZWxm
LnJlYWRfc3Rkb3V0X2xpbmUoZGVhZGxpbmUpLCBOb25lCisKKyAgICBkZWYgc3RhcnQoc2VsZik6
CisgICAgICAgIHNlbGYuc3RhcnRlZCA9IFRydWUKKworICAgIGRlZiBzdG9wKHNlbGYsIGtpbGxf
ZGlyZWN0bHk9RmFsc2UpOgorICAgICAgICBzZWxmLnN0b3BwZWQgPSBUcnVlCisgICAgICAgIHJl
dHVybgorCisgICAgZGVmIGtpbGwoc2VsZik6CisgICAgICAgIHJldHVybgpkaWZmIC0tZ2l0IGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC93ZWJraXQucHkgYi9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3dlYmtpdC5weQppbmRleCBkNWI3
YzBkN2Y3YWEzMjI3YjZkNmQxN2ZkNjJjNGRkNDFmYmRjYTI4Li4yNmVhMDUzZDZkNjMwODAwMTMz
OTNiZmNlMDc4MzI2YjAxMTk3YmIwIDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9wb3J0L3dlYmtpdC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9wb3J0L3dlYmtpdC5weQpAQCAtMzQsMTEgKzM0LDkgQEAKIGltcG9ydCBp
dGVydG9vbHMKIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgb3BlcmF0b3IKLWltcG9ydCByZQotaW1w
b3J0IHRpbWUKIAotZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZSBpbXBvcnQg
RXhlY3V0aXZlLCBTY3JpcHRFcnJvcgotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydCBp
bXBvcnQgc2VydmVyX3Byb2Nlc3MsIFBvcnQKK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5l
eGVjdXRpdmUgaW1wb3J0IFNjcmlwdEVycm9yCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5w
b3J0IGltcG9ydCBQb3J0CiAKIAogX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQpA
QCAtOTYsODEgKzk0LDYgQEAgY2xhc3MgV2ViS2l0UG9ydChQb3J0KToKICAgICBkZWYgX2J1aWxk
X2RyaXZlcl9mbGFncyhzZWxmKToKICAgICAgICAgcmV0dXJuIFtdCiAKLSAgICBkZWYgZGlmZl9p
bWFnZShzZWxmLCBleHBlY3RlZF9jb250ZW50cywgYWN0dWFsX2NvbnRlbnRzLCB0b2xlcmFuY2U9
Tm9uZSk6Ci0gICAgICAgICMgSGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRoZSB0ZXN0IGRpZG4ndCBh
Y3R1YWxseSBnZW5lcmF0ZSBhbiBpbWFnZS4KLSAgICAgICAgIyBGSVhNRTogbmVlZCB1bml0IHRl
c3RzIGZvciB0aGlzLgotICAgICAgICBpZiBub3QgYWN0dWFsX2NvbnRlbnRzIGFuZCBub3QgZXhw
ZWN0ZWRfY29udGVudHM6Ci0gICAgICAgICAgICByZXR1cm4gKE5vbmUsIDApCi0gICAgICAgIGlm
IG5vdCBhY3R1YWxfY29udGVudHMgb3Igbm90IGV4cGVjdGVkX2NvbnRlbnRzOgotICAgICAgICAg
ICAgIyBGSVhNRTogSXQncyBub3QgY2xlYXIgd2hhdCB3ZSBzaG91bGQgcmV0dXJuIGluIHRoaXMg
Y2FzZS4KLSAgICAgICAgICAgICMgTWF5YmUgd2Ugc2hvdWxkIHRocm93IGFuIGV4Y2VwdGlvbj8K
LSAgICAgICAgICAgIHJldHVybiAoVHJ1ZSwgMCkKLQotICAgICAgICBwcm9jZXNzID0gc2VsZi5f
c3RhcnRfaW1hZ2VfZGlmZl9wcm9jZXNzKGV4cGVjdGVkX2NvbnRlbnRzLCBhY3R1YWxfY29udGVu
dHMsIHRvbGVyYW5jZT10b2xlcmFuY2UpCi0gICAgICAgIHJldHVybiBzZWxmLl9yZWFkX2ltYWdl
X2RpZmYocHJvY2VzcykKLQotICAgIGRlZiBfaW1hZ2VfZGlmZl9jb21tYW5kKHNlbGYsIHRvbGVy
YW5jZT1Ob25lKToKLSAgICAgICAgIyBGSVhNRTogVGhlcmUgbmVlZHMgdG8gYmUgYSBtb3JlIHNh
bmUgd2F5IG9mIGhhbmRsaW5nIGRlZmF1bHQKLSAgICAgICAgIyB2YWx1ZXMgZm9yIG9wdGlvbnMg
c28gdGhhdCB5b3UgY2FuIGRpc3Rpbmd1aXNoIGJldHdlZW4gYSBkZWZhdWx0Ci0gICAgICAgICMg
dmFsdWUgb2YgTm9uZSBhbmQgYSBkZWZhdWx0IHZhbHVlIHRoYXQgd2Fzbid0IHNldC4KLSAgICAg
ICAgaWYgdG9sZXJhbmNlIGlzIE5vbmU6Ci0gICAgICAgICAgICBpZiBzZWxmLmdldF9vcHRpb24o
J3RvbGVyYW5jZScpIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIHRvbGVyYW5jZSA9IHNl
bGYuZ2V0X29wdGlvbigndG9sZXJhbmNlJykKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAg
ICAgICAgdG9sZXJhbmNlID0gMC4xCi0KLSAgICAgICAgY29tbWFuZCA9IFtzZWxmLl9wYXRoX3Rv
X2ltYWdlX2RpZmYoKSwgJy0tdG9sZXJhbmNlJywgc3RyKHRvbGVyYW5jZSldCi0gICAgICAgIHJl
dHVybiBjb21tYW5kCi0KLSAgICBkZWYgX3N0YXJ0X2ltYWdlX2RpZmZfcHJvY2VzcyhzZWxmLCBl
eHBlY3RlZF9jb250ZW50cywgYWN0dWFsX2NvbnRlbnRzLCB0b2xlcmFuY2U9Tm9uZSk6Ci0gICAg
ICAgIGNvbW1hbmQgPSBzZWxmLl9pbWFnZV9kaWZmX2NvbW1hbmQodG9sZXJhbmNlKQotICAgICAg
ICBlbnZpcm9ubWVudCA9IHNlbGYuc2V0dXBfZW52aXJvbl9mb3Jfc2VydmVyKCdJbWFnZURpZmYn
KQotICAgICAgICBwcm9jZXNzID0gc2VydmVyX3Byb2Nlc3MuU2VydmVyUHJvY2VzcyhzZWxmLCAn
SW1hZ2VEaWZmJywgY29tbWFuZCwgZW52aXJvbm1lbnQpCi0KLSAgICAgICAgcHJvY2Vzcy53cml0
ZSgnQ29udGVudC1MZW5ndGg6ICVkXG4lc0NvbnRlbnQtTGVuZ3RoOiAlZFxuJXMnICUgKAotICAg
ICAgICAgICAgbGVuKGFjdHVhbF9jb250ZW50cyksIGFjdHVhbF9jb250ZW50cywKLSAgICAgICAg
ICAgIGxlbihleHBlY3RlZF9jb250ZW50cyksIGV4cGVjdGVkX2NvbnRlbnRzKSkKLSAgICAgICAg
cmV0dXJuIHByb2Nlc3MKLQotICAgIGRlZiBfcmVhZF9pbWFnZV9kaWZmKHNlbGYsIHNwKToKLSAg
ICAgICAgZGVhZGxpbmUgPSB0aW1lLnRpbWUoKSArIDIuMAotICAgICAgICBvdXRwdXQgPSBOb25l
Ci0gICAgICAgIG91dHB1dF9pbWFnZSA9ICIiCi0KLSAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAg
ICAgICAgIG91dHB1dCA9IHNwLnJlYWRfc3Rkb3V0X2xpbmUoZGVhZGxpbmUpCi0gICAgICAgICAg
ICBpZiBzcC50aW1lZF9vdXQgb3Igc3AuaGFzX2NyYXNoZWQoKSBvciBub3Qgb3V0cHV0OgotICAg
ICAgICAgICAgICAgIGJyZWFrCi0KLSAgICAgICAgICAgIGlmIG91dHB1dC5zdGFydHN3aXRoKCdk
aWZmJyk6ICAjIFRoaXMgaXMgdGhlIGxhc3QgbGluZSBJbWFnZURpZmYgcHJpbnRzLgotICAgICAg
ICAgICAgICAgIGJyZWFrCi0KLSAgICAgICAgICAgIGlmIG91dHB1dC5zdGFydHN3aXRoKCdDb250
ZW50LUxlbmd0aCcpOgotICAgICAgICAgICAgICAgIG0gPSByZS5tYXRjaCgnQ29udGVudC1MZW5n
dGg6IChcZCspJywgb3V0cHV0KQotICAgICAgICAgICAgICAgIGNvbnRlbnRfbGVuZ3RoID0gaW50
KG0uZ3JvdXAoMSkpCi0gICAgICAgICAgICAgICAgb3V0cHV0X2ltYWdlID0gc3AucmVhZF9zdGRv
dXQoZGVhZGxpbmUsIGNvbnRlbnRfbGVuZ3RoKQotICAgICAgICAgICAgICAgIG91dHB1dCA9IHNw
LnJlYWRfc3Rkb3V0X2xpbmUoZGVhZGxpbmUpCi0gICAgICAgICAgICAgICAgYnJlYWsKLQotICAg
ICAgICBzdGRlcnIgPSBzcC5wb3BfYWxsX2J1ZmZlcmVkX3N0ZGVycigpCi0gICAgICAgIGlmIHN0
ZGVycjoKLSAgICAgICAgICAgIF9sb2cud2FybigiSW1hZ2VEaWZmIHByb2R1Y2VkIHN0ZGVyciBv
dXRwdXQ6XG4iICsgc3RkZXJyKQotICAgICAgICBpZiBzcC50aW1lZF9vdXQ6Ci0gICAgICAgICAg
ICBfbG9nLmVycm9yKCJJbWFnZURpZmYgdGltZWQgb3V0IikKLSAgICAgICAgaWYgc3AuaGFzX2Ny
YXNoZWQoKToKLSAgICAgICAgICAgIF9sb2cuZXJyb3IoIkltYWdlRGlmZiBjcmFzaGVkIikKLSAg
ICAgICAgIyBGSVhNRTogVGhlcmUgaXMgbm8gbmVlZCB0byBzaHV0IGRvd24gdGhlIEltYWdlRGlm
ZiBzZXJ2ZXIgYWZ0ZXIgZXZlcnkgZGlmZi4KLSAgICAgICAgc3Auc3RvcCgpCi0KLSAgICAgICAg
ZGlmZl9wZXJjZW50ID0gMAotICAgICAgICBpZiBvdXRwdXQgYW5kIG91dHB1dC5zdGFydHN3aXRo
KCdkaWZmJyk6Ci0gICAgICAgICAgICBtID0gcmUubWF0Y2goJ2RpZmY6ICguKyklIChwYXNzZWR8
ZmFpbGVkKScsIG91dHB1dCkKLSAgICAgICAgICAgIGlmIG0uZ3JvdXAoMikgPT0gJ3Bhc3NlZCc6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFtOb25lLCAwXQotICAgICAgICAgICAgZGlmZl9wZXJj
ZW50ID0gZmxvYXQobS5ncm91cCgxKSkKLQotICAgICAgICByZXR1cm4gKG91dHB1dF9pbWFnZSwg
ZGlmZl9wZXJjZW50KQotCiAgICAgZGVmIF90ZXN0c19mb3Jfb3RoZXJfcGxhdGZvcm1zKHNlbGYp
OgogICAgICAgICAjIEJ5IGRlZmF1bHQgd2Ugd2lsbCBza2lwIGFueSBkaXJlY3RvcnkgdW5kZXIg
TGF5b3V0VGVzdHMvcGxhdGZvcm0KICAgICAgICAgIyB0aGF0IGlzbid0IGluIG91ciBiYXNlbGlu
ZSBzZWFyY2ggcGF0aCAodGhpcyBtaXJyb3JzIHdoYXQKQEAgLTIwMSw3ICsxMjQsNyBAQCBjbGFz
cyBXZWJLaXRQb3J0KFBvcnQpOgogICAgICAgICBzeW1ib2xzID0gJycKICAgICAgICAgZm9yIHBh
dGhfdG9fbW9kdWxlIGluIHNlbGYuX21vZHVsZXNfdG9fc2VhcmNoX2Zvcl9zeW1ib2xzKCk6CiAg
ICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc3ltYm9scyArPSBzZWxmLl9leGVjdXRp
dmUucnVuX2NvbW1hbmQoW3NlbGYubm1fY29tbWFuZCgpLCBwYXRoX3RvX21vZHVsZV0sIGVycm9y
X2hhbmRsZXI9RXhlY3V0aXZlLmlnbm9yZV9lcnJvcikKKyAgICAgICAgICAgICAgICBzeW1ib2xz
ICs9IHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChbc2VsZi5ubV9jb21tYW5kKCksIHBhdGhf
dG9fbW9kdWxlXSwgZXJyb3JfaGFuZGxlcj1zZWxmLl9leGVjdXRpdmUuaWdub3JlX2Vycm9yKQog
ICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IsIGU6CiAgICAgICAgICAgICAgICAgX2xvZy53YXJu
KCJGYWlsZWQgdG8gcnVuIG5tOiAlcy4gIENhbid0IGRldGVybWluZSBzdXBwb3J0ZWQgZmVhdHVy
ZXMgY29ycmVjdGx5LiIgJSBlKQogICAgICAgICByZXR1cm4gc3ltYm9scwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>