<?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>32249</bug_id>
          
          <creation_ts>2009-12-07 14:58:10 -0800</creation_ts>
          <short_desc>WebSocket test server handshake is not strict enough</short_desc>
          <delta_ts>2009-12-17 18:38:21 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ian</cc>
    
    <cc>ukai</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yuzo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>169484</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-12-07 14:58:10 -0800</bug_when>
    <thetext>WebSocket test server should reject invalid WebSocket connection attempts (thus testing that the client handshake request is valid).

Steps to reproduce:
1. run-webkit-websocketserver
2. telnet 127.0.0.1 8880
3. Paste the following handshake text:
--------------------
GET       /websocket/tests/simple      HTTP/1.1
connection:Upgrade
Upgrade:     WebSocket
Host: 127.0.0.1:8880
origin:
 http://www.example.org

--------------------

Results: a connection is established successfully. It shouldn&apos;t be.

There are several issues with this request:
- wrong whitespace (must always be a single space);
- wrong case of headers;
- wrong order of Connection and Upgrade headers;
- Origin is continued to the next line, which is not allowed for WebSocket.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169486</commentid>
    <comment_count>1</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-12-07 15:01:25 -0800</bug_when>
    <thetext>Somehow, the spec does not mention Connection and Upgrade headers in section 5.1, and even says that Host should be the first header in request.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169617</commentid>
    <comment_count>2</comment_count>
    <who name="Ian &apos;Hixie&apos; Hickson">ian</who>
    <bug_when>2009-12-08 00:14:06 -0800</bug_when>
    <thetext>Uh yeah, apparently I forgot about those. Pretend they&apos;re there...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169947</commentid>
    <comment_count>3</comment_count>
      <attachid>44524</attachid>
    <who name="Yuzo Fujishima">yuzo</who>
    <bug_when>2009-12-09 01:55:17 -0800</bug_when>
    <thetext>Created attachment 44524
Update pywebsocket to 0.4.4 and make handshake checking stricter</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169949</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-09 01:55:56 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 44524 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169950</commentid>
    <comment_count>5</comment_count>
    <who name="Yuzo Fujishima">yuzo</who>
    <bug_when>2009-12-09 01:56:54 -0800</bug_when>
    <thetext>Hi, reviewers,

Can you review this patch?

Yuzo</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169968</commentid>
    <comment_count>6</comment_count>
    <who name="Ian &apos;Hixie&apos; Hickson">ian</who>
    <bug_when>2009-12-09 04:55:02 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Uh yeah, apparently I forgot about those. Pretend they&apos;re there...

I fixed the spec.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170012</commentid>
    <comment_count>7</comment_count>
      <attachid>44524</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-12-09 08:46:44 -0800</bug_when>
    <thetext>Comment on attachment 44524
Update pywebsocket to 0.4.4 and make handshake checking stricter

&gt; +        &quot;--strict&quot;,

I don&apos;t think this should be an option - why would we want to encourage sloppy implementations?

&gt; +_FIRST_FIVE_LINES = map(re.compile, [
&gt; +    r&apos;^GET [\S]+ HTTP/1.1\r\n$&apos;,

The spec also says that path must begin with a slash.

&gt; +_SIXTH_AND_LATER = re.compile(
&gt; +    r&apos;^&apos;
&gt; +    r&apos;(WebSocket-Protocol: [\x20-\x7e]+\r\n)?&apos;
&gt; +    r&apos;([Cc][Oo][Oo][Kk][Ii][Ee]2?:[^\r]*(\r\n[ \t][^\r]*)*\r\n)?&apos;
&gt; +    r&apos;\r\n&apos;)

The Cookie header must also be in the restricted WebSocket form. The spec says its semantics matches HTTP, but doesn&apos;t say anything special about syntax.

Does this allow having both Cookie and Cookie2 headers in a single request?

&gt;      for c in protocol:
&gt; -        if not 0x21 &lt;= ord(c) &lt;= 0x7e:
&gt; +        if not 0x20 &lt;= ord(c) &lt;= 0x7e:
&gt;              raise HandshakeError(&apos;Illegal character in protocol: %r&apos; % c)

I&apos;m confused - bug 32266 has already introduced a test verifying that space is allowed in protocol name. How could that possibly work before this change?

&gt; +_STRICTLY_GOOD_REQUESTS = (
&lt;...&gt;
&gt; +    (  # Cookie with continuation lines

This shouldn&apos;t be allowed - all handshake header fields are subject to WebSocket syntax.

&gt; +_NOT_STRICTLY_GOOD_REQUESTS = (
&gt; +    (  # Extra space after GET
&gt; +        &apos;GET  /demo HTTP/1.1\r\n&apos;,
&gt; +        &apos;upgrade: WebSocket\r\n&apos;,

Upgrade doesn&apos;t have a correct case here.

Please also test path without a slash at the beginning.

&gt; +    (  # Origin comes before Host

Please also test incorrect order of Upgrade and Connection

&gt; +    (  # Unknow header

Typo: unknown.

&gt; +# vi:sts=4 sw=4 et

We don&apos;t normally allow modelines in WebKit sources.

Looks good, thanks for tackling this! I can&apos;t deeply review Python code, but it looks reasonable to me, too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170067</commentid>
    <comment_count>8</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-12-09 11:22:06 -0800</bug_when>
    <thetext>&gt; I&apos;m confused - bug 32266 has already introduced a test verifying that space is
&gt; allowed in protocol name. How could that possibly work before this change?

I now see that it&apos;s skipped, waiting for this patch to be landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172186</commentid>
    <comment_count>9</comment_count>
    <who name="Yuzo Fujishima">yuzo</who>
    <bug_when>2009-12-15 23:56:07 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 44524 [details])
&gt; &gt; +        &quot;--strict&quot;,
&gt; 
&gt; I don&apos;t think this should be an option - why would we want to encourage sloppy
&gt; implementations?

Two reasons:
- pywebsocket is for general (although experimental) use, and
generally speaking, the receiver of data should be lenient.
The order of headers is minor enough to tolerate, in my opinion.
- strict checking is difficult to enforce in the Apache module version
of pywebsocket, and we want to keep the behavior as consistent as
possible.

&gt; 
&gt; &gt; +_FIRST_FIVE_LINES = map(re.compile, [
&gt; &gt; +    r&apos;^GET [\S]+ HTTP/1.1\r\n$&apos;,
&gt; 
&gt; The spec also says that path must begin with a slash.

Done.

&gt; 
&gt; &gt; +_SIXTH_AND_LATER = re.compile(
&gt; &gt; +    r&apos;^&apos;
&gt; &gt; +    r&apos;(WebSocket-Protocol: [\x20-\x7e]+\r\n)?&apos;
&gt; &gt; +    r&apos;([Cc][Oo][Oo][Kk][Ii][Ee]2?:[^\r]*(\r\n[ \t][^\r]*)*\r\n)?&apos;
&gt; &gt; +    r&apos;\r\n&apos;)
&gt; 
&gt; The Cookie header must also be in the restricted WebSocket form. The spec says
&gt; its semantics matches HTTP, but doesn&apos;t say anything special about syntax.
&gt; 
&gt; Does this allow having both Cookie and Cookie2 headers in a single request?

Fixed to allow both Cookie and Cookie2 in a same request.

&gt; 
&gt; &gt;      for c in protocol:
&gt; &gt; -        if not 0x21 &lt;= ord(c) &lt;= 0x7e:
&gt; &gt; +        if not 0x20 &lt;= ord(c) &lt;= 0x7e:
&gt; &gt;              raise HandshakeError(&apos;Illegal character in protocol: %r&apos; % c)
&gt; 
&gt; I&apos;m confused - bug 32266 has already introduced a test verifying that space is
&gt; allowed in protocol name. How could that possibly work before this change?

The test added by 32266 is currently skipped.

&gt; 
&gt; &gt; +_STRICTLY_GOOD_REQUESTS = (
&gt; &lt;...&gt;
&gt; &gt; +    (  # Cookie with continuation lines
&gt; 
&gt; This shouldn&apos;t be allowed - all handshake header fields are subject to
&gt; WebSocket syntax.

Fixed.

&gt; 
&gt; &gt; +_NOT_STRICTLY_GOOD_REQUESTS = (
&gt; &gt; +    (  # Extra space after GET
&gt; &gt; +        &apos;GET  /demo HTTP/1.1\r\n&apos;,
&gt; &gt; +        &apos;upgrade: WebSocket\r\n&apos;,
&gt; 
&gt; Upgrade doesn&apos;t have a correct case here.

Good catch. Thank you!

&gt; 
&gt; Please also test path without a slash at the beginning.

Added.

&gt; 
&gt; &gt; +    (  # Origin comes before Host
&gt; 
&gt; Please also test incorrect order of Upgrade and Connection

Added.

&gt; 
&gt; &gt; +    (  # Unknow header
&gt; 
&gt; Typo: unknown.

Fixed.

&gt; 
&gt; &gt; +# vi:sts=4 sw=4 et
&gt; 
&gt; We don&apos;t normally allow modelines in WebKit sources.

pywebsocket follows a coding rule different form that of WebKit. 

&gt; 
&gt; Looks good, thanks for tackling this! I can&apos;t deeply review Python code, but it
&gt; looks reasonable to me, too.

Thank you for the review. I&apos;ll upload a new patch right after this.

Yuzo</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172188</commentid>
    <comment_count>10</comment_count>
      <attachid>44948</attachid>
    <who name="Yuzo Fujishima">yuzo</who>
    <bug_when>2009-12-15 23:57:17 -0800</bug_when>
    <thetext>Created attachment 44948
Update pywebsocket to 0.4.4 and make handshake checking stricter</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172191</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-15 23:58:35 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 44948 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172202</commentid>
    <comment_count>12</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-12-16 00:13:35 -0800</bug_when>
    <thetext>&gt; Two reasons:
&gt; - pywebsocket is for general (although experimental) use, and
&gt; generally speaking, the receiver of data should be lenient.
&gt; The order of headers is minor enough to tolerate, in my opinion.
&gt; - strict checking is difficult to enforce in the Apache module version
&gt; of pywebsocket, and we want to keep the behavior as consistent as
&gt; possible.

The specification has MUST level requirements for strict checking, so any implementation that is lenient is automatically non-conforming. This is even more important in general use than in testing.

If it&apos;s not practically feasible to achieve the level of strictness required by the spec due to Apache limitations, please bring this up on IETF hybi mailing list - the protocol may need to be changed to achieve its security goals by other means.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172203</commentid>
    <comment_count>13</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-12-16 00:19:48 -0800</bug_when>
    <thetext>Hmm, re-reading the spec for server-side requirements, I&apos;m actually not sure what form they take. &quot;Requirements phrased in the imperative as part of algorithms &lt;...&gt; are to be interpreted with the meaning of the key word (&quot;must&quot;, &quot;should&quot;, &quot;may&quot;, etc) used in introducing the algorithm&quot; - I do not see where the algorithms are &quot;introduced&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172208</commentid>
    <comment_count>14</comment_count>
    <who name="Yuzo Fujishima">yuzo</who>
    <bug_when>2009-12-16 00:25:21 -0800</bug_when>
    <thetext>MUST level applies for the data sent by the client, but not for the data sent
by the server.
http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol-66#section-5.1

For example, &quot;if the second token doesn&apos;t begin with U+002F SOLIDUS character
(/), the server should abort the connection&quot;. The server may choose to keep the
connection in this case. The server has the freedom of being as lenient as
desired in checking received data.

Yuzo</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172210</commentid>
    <comment_count>15</comment_count>
    <who name="Yuzo Fujishima">yuzo</who>
    <bug_when>2009-12-16 00:27:42 -0800</bug_when>
    <thetext>Oops, sorry, I meant:

MUST level applies for the way the client sends data, but not for the way the
server examine the data.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172320</commentid>
    <comment_count>16</comment_count>
    <who name="Ian &apos;Hixie&apos; Hickson">ian</who>
    <bug_when>2009-12-16 09:14:24 -0800</bug_when>
    <thetext>Specifically, the only requirement on even reading the handshake was &quot;Servers may read part or all of the client&apos;s handshake before closing the connection or sending all of their side of the handshake&quot;.

I&apos;ve tried to clarify this by switching the first two subsections of the parser side around, and adding a requirement that at a minimum the 0A0D0A0D bytes be read and discarded before reading frames.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172357</commentid>
    <comment_count>17</comment_count>
      <attachid>44948</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-12-16 09:58:05 -0800</bug_when>
    <thetext>Comment on attachment 44948
Update pywebsocket to 0.4.4 and make handshake checking stricter

 +    r&apos;(WebSocket-Protocol: [\x20-\x7e]+\r\n)?&apos;
&gt; +    r&apos;([Cc][Oo][Oo][Kk][Ii][Ee]:[^\r]*\r\n)*&apos;
&gt; +    r&apos;([Cc][Oo][Oo][Kk][Ii][Ee]2:[^\r]*\r\n)?&apos;
&gt; +    r&apos;([Cc][Oo][Oo][Kk][Ii][Ee]:[^\r]*\r\n)*&apos;

You didn&apos;t address my comment about Cookie headers also being in restricted WebSocket syntax. Like other headers, they are case sensitive, require one space after colon, etc.

This doesn&apos;t correctly handle the case of multiple Cookie headers - that deserves at least a FIXME comment, if not fixing right away.

&gt; -      version=&apos;0.4.3&apos;,
&gt; +      version=&apos;0.4.5&apos;,

ChangeLog should be fixed to say 0.4.5.

&gt; MUST level applies for the way the client sends data, but not for the way the
&gt; server examine the data.

Ok.

r=me. ChangeLog will need to be fixed when landing, and please consider further improving Cookie handling in a future patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>173017</commentid>
    <comment_count>18</comment_count>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2009-12-17 18:38:21 -0800</bug_when>
    <thetext>Committed r52296: &lt;http://trac.webkit.org/changeset/52296&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44524</attachid>
            <date>2009-12-09 01:55:17 -0800</date>
            <delta_ts>2009-12-15 23:57:09 -0800</delta_ts>
            <desc>Update pywebsocket to 0.4.4 and make handshake checking stricter</desc>
            <filename>bug-32249-20091209185515.patch</filename>
            <type>text/plain</type>
            <size>21401</size>
            <attacher name="Yuzo Fujishima">yuzo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCBiNGYwNTgxLi41OGQ5NTgwIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMDktMTIt
MDkgIFl1em8gRnVqaXNoaW1hICA8eXV6b0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZSBweXdlYnNvY2tldCB0byAwLjQu
NCBhbmQgbWFrZSBoYW5kc2hha2UgY2hlY2tpbmcgc3RyaWN0ZXIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMyMjQ5CisKKyAgICAgICAgKiBTY3JpcHRz
L3J1bi13ZWJraXQtdGVzdHM6CisgICAgICAgICogcHl3ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0
L2hhbmRzaGFrZS5weToKKyAgICAgICAgKiBweXdlYnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQvbWVt
b3JpemluZ2ZpbGUucHk6IEFkZGVkLgorICAgICAgICAqIHB5d2Vic29ja2V0L21vZF9weXdlYnNv
Y2tldC9zdGFuZGFsb25lLnB5OgorICAgICAgICAqIHB5d2Vic29ja2V0L3NldHVwLnB5OgorICAg
ICAgICAqIHB5d2Vic29ja2V0L3Rlc3QvdGVzdF9oYW5kc2hha2UucHk6CisgICAgICAgICogcHl3
ZWJzb2NrZXQvdGVzdC90ZXN0X21lbW9yaXppbmdmaWxlLnB5OiBBZGRlZC4KKwogMjAwOS0xMi0w
OSAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IEVyaWMgU2VpZGVsLgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy9ydW4td2Via2l0
LXRlc3RzIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9ydW4td2Via2l0LXRlc3RzCmluZGV4IDZkZDgz
MzkuLjg3MDk5NDYgMTAwNzU1Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvcnVuLXdlYmtpdC10
ZXN0cworKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3J1bi13ZWJraXQtdGVzdHMKQEAgLTE0NTUs
NiArMTQ1NSw3IEBAIHN1YiBvcGVuV2ViU29ja2V0U2VydmVySWZOZWVkZWQoKQogICAgICAgICAi
LWQiLCAiJHdlYlNvY2tldEhhbmRsZXJEaXIiLAogICAgICAgICAiLXMiLCAiJHdlYlNvY2tldEhh
bmRsZXJTY2FuRGlyIiwKICAgICAgICAgIi1sIiwgIiRsb2dGaWxlIiwKKyAgICAgICAgIi0tc3Ry
aWN0IiwKICAgICApOwogICAgICMgd3NzIGlzIGRpc2FibGVkIHVudGlsIGFsbCBwbGF0Zm9ybXMg
c3VwcG9ydCBweU9wZW5TU0wuCiAgICAgIyBteSBAYXJnc1NlY3VyZSA9ICgKZGlmZiAtLWdpdCBh
L1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L21vZF9weXdlYnNvY2tldC9oYW5kc2hha2UucHkgYi9X
ZWJLaXRUb29scy9weXdlYnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQvaGFuZHNoYWtlLnB5CmluZGV4
IGE2N2FhZGQuLmE1ZTFkMGMgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L21v
ZF9weXdlYnNvY2tldC9oYW5kc2hha2UucHkKKysrIGIvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQv
bW9kX3B5d2Vic29ja2V0L2hhbmRzaGFrZS5weQpAQCAtMzksMTQgKzM5LDE0IEBAIG5vdCBzdWl0
YWJsZSBiZWNhdXNlIHRoZXkgZG9uJ3QgYWxsb3cgZGlyZWN0IHJhdyBieXRlcyB3cml0aW5nL3Jl
YWRpbmcuCiAKIGltcG9ydCByZQogCitpbXBvcnQgdXRpbAorCiAKIF9ERUZBVUxUX1dFQl9TT0NL
RVRfUE9SVCA9IDgwCiBfREVGQVVMVF9XRUJfU09DS0VUX1NFQ1VSRV9QT1JUID0gNDQzCiBfV0VC
X1NPQ0tFVF9TQ0hFTUUgPSAnd3MnCiBfV0VCX1NPQ0tFVF9TRUNVUkVfU0NIRU1FID0gJ3dzcycK
IAotX01FVEhPRF9MSU5FID0gcmUuY29tcGlsZShyJ15HRVQgKFteIF0rKSBIVFRQLzEuMVxyXG4k
JykKLQogX01BTkRBVE9SWV9IRUFERVJTID0gWwogICAgICMga2V5LCBleHBlY3RlZCB2YWx1ZSBv
ciBOb25lCiAgICAgWydVcGdyYWRlJywgJ1dlYlNvY2tldCddLApAQCAtNTUsNiArNTUsMjEgQEAg
X01BTkRBVE9SWV9IRUFERVJTID0gWwogICAgIFsnT3JpZ2luJywgTm9uZV0sCiBdCiAKK19GSVJT
VF9GSVZFX0xJTkVTID0gbWFwKHJlLmNvbXBpbGUsIFsKKyAgICByJ15HRVQgW1xTXSsgSFRUUC8x
LjFcclxuJCcsCisgICAgcideVXBncmFkZTogV2ViU29ja2V0XHJcbiQnLAorICAgIHInXkNvbm5l
Y3Rpb246IFVwZ3JhZGVcclxuJCcsCisgICAgcideSG9zdDogW1xTXStcclxuJCcsCisgICAgcide
T3JpZ2luOiBbXFNdK1xyXG4kJywKK10pCisKK19TSVhUSF9BTkRfTEFURVIgPSByZS5jb21waWxl
KAorICAgIHInXicKKyAgICByJyhXZWJTb2NrZXQtUHJvdG9jb2w6IFtceDIwLVx4N2VdK1xyXG4p
PycKKyAgICByJyhbQ2NdW09vXVtPb11bS2tdW0lpXVtFZV0yPzpbXlxyXSooXHJcblsgXHRdW15c
cl0qKSpcclxuKT8nCisgICAgcidcclxuJykKKworCiAKIGRlZiBfZGVmYXVsdF9wb3J0KGlzX3Nl
Y3VyZSk6CiAgICAgaWYgaXNfc2VjdXJlOgpAQCAtNzUsMTkgKzkwLDIyIEBAIGRlZiBfdmFsaWRh
dGVfcHJvdG9jb2wocHJvdG9jb2wpOgogICAgIGlmIG5vdCBwcm90b2NvbDoKICAgICAgICAgcmFp
c2UgSGFuZHNoYWtlRXJyb3IoJ0ludmFsaWQgV2ViU29ja2V0LVByb3RvY29sOiBlbXB0eScpCiAg
ICAgZm9yIGMgaW4gcHJvdG9jb2w6Ci0gICAgICAgIGlmIG5vdCAweDIxIDw9IG9yZChjKSA8PSAw
eDdlOgorICAgICAgICBpZiBub3QgMHgyMCA8PSBvcmQoYykgPD0gMHg3ZToKICAgICAgICAgICAg
IHJhaXNlIEhhbmRzaGFrZUVycm9yKCdJbGxlZ2FsIGNoYXJhY3RlciBpbiBwcm90b2NvbDogJXIn
ICUgYykKIAogCiBjbGFzcyBIYW5kc2hha2VyKG9iamVjdCk6CiAgICAgIiIiVGhpcyBjbGFzcyBw
ZXJmb3JtcyBXZWIgU29ja2V0IGhhbmRzaGFrZS4iIiIKIAotICAgIGRlZiBfX2luaXRfXyhzZWxm
LCByZXF1ZXN0LCBkaXNwYXRjaGVyKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVxdWVzdCwg
ZGlzcGF0Y2hlciwgc3RyaWN0PUZhbHNlKToKICAgICAgICAgIiIiQ29uc3RydWN0IGFuIGluc3Rh
bmNlLgogCiAgICAgICAgIEFyZ3M6CiAgICAgICAgICAgICByZXF1ZXN0OiBtb2RfcHl0aG9uIHJl
cXVlc3QuCiAgICAgICAgICAgICBkaXNwYXRjaGVyOiBEaXNwYXRjaGVyIChkaXNwYXRjaC5EaXNw
YXRjaGVyKS4KKyAgICAgICAgICAgIHN0cmljdDogU3RyaWN0bHkgY2hlY2sgaGFuZHNoYWtlIHJl
cXVlc3QuIERlZmF1bHQ6IEZhbHNlLgorICAgICAgICAgICAgICAgIElmIFRydWUsIHJlcXVlc3Qu
Y29ubmVjdGlvbiBtdXN0IHByb3ZpZGUgZ2V0X21lbW9yaXplZF9saW5lcworICAgICAgICAgICAg
ICAgIG1ldGhvZC4KIAogICAgICAgICBIYW5kc2hha2VyIHdpbGwgYWRkIGF0dHJpYnV0ZXMgc3Vj
aCBhcyB3c19yZXNvdXJjZSBpbiBwZXJmb3JtaW5nCiAgICAgICAgIGhhbmRzaGFrZS4KQEAgLTk1
LDYgKzExMyw3IEBAIGNsYXNzIEhhbmRzaGFrZXIob2JqZWN0KToKIAogICAgICAgICBzZWxmLl9y
ZXF1ZXN0ID0gcmVxdWVzdAogICAgICAgICBzZWxmLl9kaXNwYXRjaGVyID0gZGlzcGF0Y2hlcgor
ICAgICAgICBzZWxmLl9zdHJpY3QgPSBzdHJpY3QKIAogICAgIGRlZiBkb19oYW5kc2hha2Uoc2Vs
Zik6CiAgICAgICAgICIiIlBlcmZvcm0gV2ViIFNvY2tldCBIYW5kc2hha2UuIiIiCkBAIC0xNzMs
NiArMTkyLDI4IEBAIGNsYXNzIEhhbmRzaGFrZXIob2JqZWN0KToKICAgICAgICAgICAgICAgICBp
ZiBhY3R1YWxfdmFsdWUgIT0gZXhwZWN0ZWRfdmFsdWU6CiAgICAgICAgICAgICAgICAgICAgIHJh
aXNlIEhhbmRzaGFrZUVycm9yKCdJbGxlZ2FsIHZhbHVlIGZvciBoZWFkZXIgJXM6ICVzJyAlCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXksIGFjdHVhbF92YWx1
ZSkpCisgICAgICAgIGlmIHNlbGYuX3N0cmljdDoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAg
ICAgICAgICBsaW5lcyA9IHNlbGYuX3JlcXVlc3QuY29ubmVjdGlvbi5nZXRfbWVtb3JpemVkX2xp
bmVzKCkKKyAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvciwgZToKKyAgICAgICAgICAg
ICAgICB1dGlsLnByZXBlbmRfbWVzc2FnZV90b19leGNlcHRpb24oCisgICAgICAgICAgICAgICAg
ICAgICdTdHJpY3QgaGFuZHNoYWtlIGlzIHNwZWNpZmllZCBidXQgdGhlIGNvbm5lY3Rpb24gJwor
ICAgICAgICAgICAgICAgICAgICAnZG9lc25cJ3QgcHJvdmlkZSBnZXRfbWVtb3JpemVkX2xpbmVz
KCknLCBlKQorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBzZWxmLl9jaGVja19m
aXJzdF9saW5lcyhsaW5lcykKKworICAgIGRlZiBfY2hlY2tfZmlyc3RfbGluZXMoc2VsZiwgbGlu
ZXMpOgorICAgICAgICBpZiBsZW4obGluZXMpIDwgbGVuKF9GSVJTVF9GSVZFX0xJTkVTKToKKyAg
ICAgICAgICAgIHJhaXNlIEhhbmRzaGFrZUVycm9yKCdUb28gZmV3IGhlYWRlciBsaW5lczogJWQn
ICUgbGVuKGxpbmVzKSkKKyAgICAgICAgZm9yIGxpbmUsIHJlZ2V4cCBpbiB6aXAobGluZXMsIF9G
SVJTVF9GSVZFX0xJTkVTKToKKyAgICAgICAgICAgIGlmIG5vdCByZWdleHAuc2VhcmNoKGxpbmUp
OgorICAgICAgICAgICAgICAgIHJhaXNlIEhhbmRzaGFrZUVycm9yKCdVbmV4cGVjdGVkIGhlYWRl
cjogJXIgZG9lc25cJ3QgbWF0Y2ggJXInCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJSAobGluZSwgcmVnZXhwLnBhdHRlcm4pKQorICAgICAgICBzaXh0aF9hbmRfbGF0ZXIg
PSAnJy5qb2luKGxpbmVzWzU6XSkKKyAgICAgICAgaWYgbm90IF9TSVhUSF9BTkRfTEFURVIuc2Vh
cmNoKHNpeHRoX2FuZF9sYXRlcik6CisgICAgICAgICAgICByYWlzZSBIYW5kc2hha2VFcnJvcign
VW5leHBlY3RlZCBoZWFkZXI6ICVyIGRvZXNuXCd0IG1hdGNoICVyJworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJSAoc2l4dGhfYW5kX2xhdGVyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX1NJWFRIX0FORF9MQVRFUi5wYXR0ZXJuKSkKIAogCiAjIHZpOnN0
cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L21vZF9weXdl
YnNvY2tldC9tZW1vcml6aW5nZmlsZS5weSBiL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L21vZF9w
eXdlYnNvY2tldC9tZW1vcml6aW5nZmlsZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi4yZjhhNTRlCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvcHl3ZWJzb2Nr
ZXQvbW9kX3B5d2Vic29ja2V0L21lbW9yaXppbmdmaWxlLnB5CkBAIC0wLDAgKzEsODEgQEAKKyMh
L3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgMjAwOSwgR29vZ2xlIEluYy4KKyMg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMg
bWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
IyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworIiIiTWVtb3Jpemlu
ZyBmaWxlLgorCitBIG1lbW9yaXppbmcgZmlsZSB3cmFwcyBhIGZpbGUgYW5kIG1lbW9yaXplcyBs
aW5lcyByZWFkIGJ5IHJlYWRsaW5lLgorIiIiCisKKworaW1wb3J0IHN5cworCisKK2NsYXNzIE1l
bW9yaXppbmdGaWxlKG9iamVjdCk6CisgICAgIiIiTWVtb3JpemluZ0ZpbGUgd3JhcHMgYSBmaWxl
IGFuZCBtZW1vcml6ZXMgbGluZXMgcmVhZCBieSByZWFkbGluZS4KKworICAgIE5vdGUgdGhhdCBk
YXRhIHJlYWQgYnkgb3RoZXIgbWV0aG9kcyBhcmUgbm90IG1lbW9yaXplZC4gVGhpcyBiZWhhdmlv
cgorICAgIGlzIGdvb2QgZW5vdWdoIGZvciBtZW1vcml6aW5nIGxpbmVzIFNpbXBsZUhUVFBTZXJ2
ZXIgcmVhZHMgYmVmb3JlCisgICAgdGhlIGNvbnRyb2wgcmVhY2hlcyBXZWJTb2NrZXRSZXF1ZXN0
SGFuZGxlci4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZV8sIG1heF9tZW1v
cml6ZWRfbGluZXM9c3lzLm1heGludCk6CisgICAgICAgICIiIkNvbnN0cnVjdCBhbiBpbnN0YW5j
ZS4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgZmlsZV86IHRoZSBmaWxlIG9iamVjdCB0
byB3cmFwLgorICAgICAgICAgICAgbWF4X21lbW9yaXplZF9saW5lczogdGhlIG1heGltdW0gbnVt
YmVyIG9mIGxpbmVzIHRvIG1lbW9yaXplLgorICAgICAgICAgICAgICAgIE9ubHkgdGhlIGZpcnN0
IG1heF9tZW1vcml6ZWRfbGluZXMgYXJlIG1lbW9yaXplZC4KKyAgICAgICAgICAgICAgICBEZWZh
dWx0OiBzeXMubWF4aW50LiAKKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2ZpbGUgPSBmaWxl
XworICAgICAgICBzZWxmLl9tZW1vcml6ZWRfbGluZXMgPSBbXQorICAgICAgICBzZWxmLl9tYXhf
bWVtb3JpemVkX2xpbmVzID0gbWF4X21lbW9yaXplZF9saW5lcworCisgICAgZGVmIF9fZ2V0YXR0
cmlidXRlX18oc2VsZiwgbmFtZSk6CisgICAgICAgIGlmIG5hbWUgaW4gKCdfZmlsZScsICdfbWVt
b3JpemVkX2xpbmVzJywgJ19tYXhfbWVtb3JpemVkX2xpbmVzJywKKyAgICAgICAgICAgICAgICAg
ICAgJ3JlYWRsaW5lJywgJ2dldF9tZW1vcml6ZWRfbGluZXMnKToKKyAgICAgICAgICAgIHJldHVy
biBvYmplY3QuX19nZXRhdHRyaWJ1dGVfXyhzZWxmLCBuYW1lKQorICAgICAgICByZXR1cm4gc2Vs
Zi5fZmlsZS5fX2dldGF0dHJpYnV0ZV9fKG5hbWUpCisKKyAgICBkZWYgcmVhZGxpbmUoc2VsZik6
CisgICAgICAgICIiIk92ZXJyaWRlIGZpbGUucmVhZGxpbmUgYW5kIG1lbW9yaXplIHRoZSBsaW5l
IHJlYWQuIiIiCisKKyAgICAgICAgbGluZSA9IHNlbGYuX2ZpbGUucmVhZGxpbmUoKQorICAgICAg
ICBpZiBsaW5lIGFuZCBsZW4oc2VsZi5fbWVtb3JpemVkX2xpbmVzKSA8IHNlbGYuX21heF9tZW1v
cml6ZWRfbGluZXM6CisgICAgICAgICAgICBzZWxmLl9tZW1vcml6ZWRfbGluZXMuYXBwZW5kKGxp
bmUpCisgICAgICAgIHJldHVybiBsaW5lCisKKyAgICBkZWYgZ2V0X21lbW9yaXplZF9saW5lcyhz
ZWxmKToKKyAgICAgICAgIiIiR2V0IGxpbmVzIG1lbW9yaXplZCBzbyBmYXIuIiIiCisgICAgICAg
IHJldHVybiBzZWxmLl9tZW1vcml6ZWRfbGluZXMKKworCisjIHZpOnN0cz00IHN3PTQgZXQKZGlm
ZiAtLWdpdCBhL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L21vZF9weXdlYnNvY2tldC9zdGFuZGFs
b25lLnB5IGIvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0L3N0YW5kYWxv
bmUucHkKaW5kZXggNjIxNzU4NS4uMGExNzM2ZSAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvcHl3
ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0L3N0YW5kYWxvbmUucHkKKysrIGIvV2ViS2l0VG9vbHMv
cHl3ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0L3N0YW5kYWxvbmUucHkKQEAgLTc1LDYgKzc1LDcg
QEAgZXhjZXB0IEltcG9ydEVycm9yOgogCiBpbXBvcnQgZGlzcGF0Y2gKIGltcG9ydCBoYW5kc2hh
a2UKK2ltcG9ydCBtZW1vcml6aW5nZmlsZQogaW1wb3J0IHV0aWwKIAogCkBAIC04OCw2ICs4OSw4
IEBAIF9MT0dfTEVWRUxTID0gewogX0RFRkFVTFRfTE9HX01BWF9CWVRFUyA9IDEwMjQgKiAyNTYK
IF9ERUZBVUxUX0xPR19CQUNLVVBfQ09VTlQgPSA1CiAKKyMgMTAyNCBpcyBwcmFjdGljYWxseSBs
YXJnZSBlbm91Z2ggdG8gY29udGFpbiBXZWJTb2NrZXQgaGFuZHNoYWtlIGxpbmVzLgorX01BWF9N
RU1PUklaRURfTElORVMgPSAxMDI0CiAKIGRlZiBfcHJpbnRfd2FybmluZ3NfaWZfYW55KGRpc3Bh
dGNoZXIpOgogICAgIHdhcm5pbmdzID0gZGlzcGF0Y2hlci5zb3VyY2Vfd2FybmluZ3MoKQpAQCAt
MTI5LDYgKzEzMiwxMCBAQCBjbGFzcyBfU3RhbmRhbG9uZUNvbm5lY3Rpb24ob2JqZWN0KToKICAg
ICAgICAgIiIiTWltaWMgbXBfY29ubi5yZWFkKCkuIiIiCiAgICAgICAgIHJldHVybiBzZWxmLl9y
ZXF1ZXN0X2hhbmRsZXIucmZpbGUucmVhZChsZW5ndGgpCiAKKyAgICBkZWYgZ2V0X21lbW9yaXpl
ZF9saW5lcyhzZWxmKToKKyAgICAgICAgIiIiR2V0IG1lbW9yaXplZCBsaW5lcy4iIiIKKyAgICAg
ICAgcmV0dXJuIHNlbGYuX3JlcXVlc3RfaGFuZGxlci5yZmlsZS5nZXRfbWVtb3JpemVkX2xpbmVz
KCkKKwogCiBjbGFzcyBfU3RhbmRhbG9uZVJlcXVlc3Qob2JqZWN0KToKICAgICAiIiJNaW1pYyBt
b2RfcHl0aG9uIHJlcXVlc3QuIiIiCkBAIC0xOTgsNyArMjA1LDkgQEAgY2xhc3MgV2ViU29ja2V0
UmVxdWVzdEhhbmRsZXIoU2ltcGxlSFRUUFNlcnZlci5TaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXIp
OgogICAgICAgICAiIiJPdmVycmlkZSBTb2NrZXRTZXJ2ZXIuU3RyZWFtUmVxdWVzdEhhbmRsZXIu
c2V0dXAuIiIiCiAKICAgICAgICAgc2VsZi5jb25uZWN0aW9uID0gc2VsZi5yZXF1ZXN0Ci0gICAg
ICAgIHNlbGYucmZpbGUgPSBzb2NrZXQuX2ZpbGVvYmplY3Qoc2VsZi5yZXF1ZXN0LCAncmInLCBz
ZWxmLnJidWZzaXplKQorICAgICAgICBzZWxmLnJmaWxlID0gbWVtb3JpemluZ2ZpbGUuTWVtb3Jp
emluZ0ZpbGUoCisgICAgICAgICAgICAgICAgc29ja2V0Ll9maWxlb2JqZWN0KHNlbGYucmVxdWVz
dCwgJ3JiJywgc2VsZi5yYnVmc2l6ZSksCisgICAgICAgICAgICAgICAgbWF4X21lbW9yaXplZF9s
aW5lcz1fTUFYX01FTU9SSVpFRF9MSU5FUykKICAgICAgICAgc2VsZi53ZmlsZSA9IHNvY2tldC5f
ZmlsZW9iamVjdChzZWxmLnJlcXVlc3QsICd3YicsIHNlbGYud2J1ZnNpemUpCiAKICAgICBkZWYg
X19pbml0X18oc2VsZiwgKmFyZ3MsICoqa2V5d29yZHMpOgpAQCAtMjA2LDggKzIxNSw5IEBAIGNs
YXNzIFdlYlNvY2tldFJlcXVlc3RIYW5kbGVyKFNpbXBsZUhUVFBTZXJ2ZXIuU2ltcGxlSFRUUFJl
cXVlc3RIYW5kbGVyKToKICAgICAgICAgICAgICAgICBzZWxmLCBXZWJTb2NrZXRSZXF1ZXN0SGFu
ZGxlci5vcHRpb25zLnVzZV90bHMpCiAgICAgICAgIHNlbGYuX2Rpc3BhdGNoZXIgPSBXZWJTb2Nr
ZXRSZXF1ZXN0SGFuZGxlci5vcHRpb25zLmRpc3BhdGNoZXIKICAgICAgICAgc2VsZi5fcHJpbnRf
d2FybmluZ3NfaWZfYW55KCkKLSAgICAgICAgc2VsZi5faGFuZHNoYWtlciA9IGhhbmRzaGFrZS5I
YW5kc2hha2VyKHNlbGYuX3JlcXVlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzZWxmLl9kaXNwYXRjaGVyKQorICAgICAgICBzZWxmLl9oYW5kc2hh
a2VyID0gaGFuZHNoYWtlLkhhbmRzaGFrZXIoCisgICAgICAgICAgICAgICAgc2VsZi5fcmVxdWVz
dCwgc2VsZi5fZGlzcGF0Y2hlciwKKyAgICAgICAgICAgICAgICBXZWJTb2NrZXRSZXF1ZXN0SGFu
ZGxlci5vcHRpb25zLnN0cmljdCkKICAgICAgICAgU2ltcGxlSFRUUFNlcnZlci5TaW1wbGVIVFRQ
UmVxdWVzdEhhbmRsZXIuX19pbml0X18oCiAgICAgICAgICAgICAgICAgc2VsZiwgKmFyZ3MsICoq
a2V5d29yZHMpCiAKQEAgLTMwMiw2ICszMTIsOCBAQCBkZWYgX21haW4oKToKICAgICBwYXJzZXIu
YWRkX29wdGlvbignLS1sb2dfY291bnQnLCBkZXN0PSdsb2dfY291bnQnLCB0eXBlPSdpbnQnLAog
ICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9X0RFRkFVTFRfTE9HX0JBQ0tVUF9DT1VOVCwK
ICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdMb2cgYmFja3VwIGNvdW50JykKKyAgICBwYXJz
ZXIuYWRkX29wdGlvbignLS1zdHJpY3QnLCBkZXN0PSdzdHJpY3QnLCBhY3Rpb249J3N0b3JlX3Ry
dWUnLAorICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2UsIGhlbHA9J1N0cmljdGx5
IGNoZWNrIGhhbmRzaGFrZSByZXF1ZXN0JykKICAgICBvcHRpb25zID0gcGFyc2VyLnBhcnNlX2Fy
Z3MoKVswXQogCiAgICAgb3MuY2hkaXIob3B0aW9ucy5kb2N1bWVudF9yb290KQpkaWZmIC0tZ2l0
IGEvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvc2V0dXAucHkgYi9XZWJLaXRUb29scy9weXdlYnNv
Y2tldC9zZXR1cC5weQppbmRleCBkZjA1ZmVmLi5kZGU1ZDFmIDEwMDY0NAotLS0gYS9XZWJLaXRU
b29scy9weXdlYnNvY2tldC9zZXR1cC5weQorKysgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC9z
ZXR1cC5weQpAQCAtNTYsNyArNTYsNyBAQCBzZXR1cChhdXRob3I9J1l1em8gRnVqaXNoaW1hJywK
ICAgICAgIG5hbWU9X1BBQ0tBR0VfTkFNRSwKICAgICAgIHBhY2thZ2VzPVtfUEFDS0FHRV9OQU1F
XSwKICAgICAgIHVybD0naHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL3B5d2Vic29ja2V0LycsCi0g
ICAgICB2ZXJzaW9uPScwLjQuMycsCisgICAgICB2ZXJzaW9uPScwLjQuNCcsCiAgICAgICApCiAK
IApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0X2hhbmRzaGFr
ZS5weSBiL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L3Rlc3QvdGVzdF9oYW5kc2hha2UucHkKaW5k
ZXggZGQxZjY1Yy4uZjUzZWZkOCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQv
dGVzdC90ZXN0X2hhbmRzaGFrZS5weQorKysgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0
L3Rlc3RfaGFuZHNoYWtlLnB5CkBAIC0yMTQsMTEgKzIxNCwxMjQgQEAgX0JBRF9SRVFVRVNUUyA9
ICgKICAgICAgICAgICAgICdDb25uZWN0aW9uJzonVXBncmFkZScsCiAgICAgICAgICAgICAnSG9z
dCc6J2V4YW1wbGUuY29tJywKICAgICAgICAgICAgICdPcmlnaW4nOidodHRwOi8vZXhhbXBsZS5j
b20nLAotICAgICAgICAgICAgJ1dlYlNvY2tldC1Qcm90b2NvbCc6J2lsbGVnYWwgcHJvdG9jb2wn
LAorICAgICAgICAgICAgJ1dlYlNvY2tldC1Qcm90b2NvbCc6J2lsbGVnYWxceDA5cHJvdG9jb2wn
LAogICAgICAgICB9CiAgICAgKSwKICkKIAorX1NUUklDVExZX0dPT0RfUkVRVUVTVFMgPSAoCisg
ICAgKAorICAgICAgICAnR0VUIC9kZW1vIEhUVFAvMS4xXHJcbicsCisgICAgICAgICdVcGdyYWRl
OiBXZWJTb2NrZXRcclxuJywKKyAgICAgICAgJ0Nvbm5lY3Rpb246IFVwZ3JhZGVcclxuJywKKyAg
ICAgICAgJ0hvc3Q6IGV4YW1wbGUuY29tXHJcbicsCisgICAgICAgICdPcmlnaW46IGh0dHA6Ly9l
eGFtcGxlLmNvbVxyXG4nLAorICAgICAgICAnXHJcbicsCisgICAgKSwKKyAgICAoICAjIFdlYlNv
Y2tldC1Qcm90b2NvbAorICAgICAgICAnR0VUIC9kZW1vIEhUVFAvMS4xXHJcbicsCisgICAgICAg
ICdVcGdyYWRlOiBXZWJTb2NrZXRcclxuJywKKyAgICAgICAgJ0Nvbm5lY3Rpb246IFVwZ3JhZGVc
clxuJywKKyAgICAgICAgJ0hvc3Q6IGV4YW1wbGUuY29tXHJcbicsCisgICAgICAgICdPcmlnaW46
IGh0dHA6Ly9leGFtcGxlLmNvbVxyXG4nLAorICAgICAgICAnV2ViU29ja2V0LVByb3RvY29sOiBz
YW1wbGVcclxuJywKKyAgICAgICAgJ1xyXG4nLAorICAgICksCisgICAgKCAgIyBXZWJTb2NrZXQt
UHJvdG9jb2wgYW5kIENvb2tpZQorICAgICAgICAnR0VUIC9kZW1vIEhUVFAvMS4xXHJcbicsCisg
ICAgICAgICdVcGdyYWRlOiBXZWJTb2NrZXRcclxuJywKKyAgICAgICAgJ0Nvbm5lY3Rpb246IFVw
Z3JhZGVcclxuJywKKyAgICAgICAgJ0hvc3Q6IGV4YW1wbGUuY29tXHJcbicsCisgICAgICAgICdP
cmlnaW46IGh0dHA6Ly9leGFtcGxlLmNvbVxyXG4nLAorICAgICAgICAnV2ViU29ja2V0LVByb3Rv
Y29sOiBzYW1wbGVcclxuJywKKyAgICAgICAgJ0Nvb2tpZTogeHl6XHJcbicKKyAgICAgICAgJ1xy
XG4nLAorICAgICksCisgICAgKCAgIyBDb29raWUKKyAgICAgICAgJ0dFVCAvZGVtbyBIVFRQLzEu
MVxyXG4nLAorICAgICAgICAnVXBncmFkZTogV2ViU29ja2V0XHJcbicsCisgICAgICAgICdDb25u
ZWN0aW9uOiBVcGdyYWRlXHJcbicsCisgICAgICAgICdIb3N0OiBleGFtcGxlLmNvbVxyXG4nLAor
ICAgICAgICAnT3JpZ2luOiBodHRwOi8vZXhhbXBsZS5jb21cclxuJywKKyAgICAgICAgJ0Nvb2tp
ZTI6IHh5elxyXG4nCisgICAgICAgICdcclxuJywKKyAgICApLAorICAgICggICMgQ29va2llIHdp
dGggY29udGludWF0aW9uIGxpbmVzCisgICAgICAgICdHRVQgL2RlbW8gSFRUUC8xLjFcclxuJywK
KyAgICAgICAgJ1VwZ3JhZGU6IFdlYlNvY2tldFxyXG4nLAorICAgICAgICAnQ29ubmVjdGlvbjog
VXBncmFkZVxyXG4nLAorICAgICAgICAnSG9zdDogZXhhbXBsZS5jb21cclxuJywKKyAgICAgICAg
J09yaWdpbjogaHR0cDovL2V4YW1wbGUuY29tXHJcbicsCisgICAgICAgICdDb29raWUyOiB4eXpc
clxuJywKKyAgICAgICAgJyBhYmNcclxuJywKKyAgICAgICAgJyBkZWZnXHJcbicsCisgICAgICAg
ICdcclxuJywKKyAgICApLAorKQorCitfTk9UX1NUUklDVExZX0dPT0RfUkVRVUVTVFMgPSAoCisg
ICAgKCAgIyBFeHRyYSBzcGFjZSBhZnRlciBHRVQKKyAgICAgICAgJ0dFVCAgL2RlbW8gSFRUUC8x
LjFcclxuJywKKyAgICAgICAgJ3VwZ3JhZGU6IFdlYlNvY2tldFxyXG4nLAorICAgICAgICAnQ29u
bmVjdGlvbjogVXBncmFkZVxyXG4nLAorICAgICAgICAnSG9zdDogZXhhbXBsZS5jb21cclxuJywK
KyAgICAgICAgJ09yaWdpbjogaHR0cDovL2V4YW1wbGUuY29tXHJcbicsCisgICAgICAgICdcclxu
JywKKyAgICApLAorICAgICggICMgTm8gc3BhY2UgYWZ0ZXIgOgorICAgICAgICAnR0VUIC9kZW1v
IEhUVFAvMS4xXHJcbicsCisgICAgICAgICdVcGdyYWRlOldlYlNvY2tldFxyXG4nLAorICAgICAg
ICAnQ29ubmVjdGlvbjogVXBncmFkZVxyXG4nLAorICAgICAgICAnSG9zdDogZXhhbXBsZS5jb21c
clxuJywKKyAgICAgICAgJ09yaWdpbjogaHR0cDovL2V4YW1wbGUuY29tXHJcbicsCisgICAgICAg
ICdcclxuJywKKyAgICApLAorICAgICggICMgTG93ZXIgY2FzZSBVcGdyYWRlIGhlYWRlcgorICAg
ICAgICAnR0VUIC9kZW1vIEhUVFAvMS4xXHJcbicsCisgICAgICAgICd1cGdyYWRlOiBXZWJTb2Nr
ZXRcclxuJywKKyAgICAgICAgJ0Nvbm5lY3Rpb246IFVwZ3JhZGVcclxuJywKKyAgICAgICAgJ0hv
c3Q6IGV4YW1wbGUuY29tXHJcbicsCisgICAgICAgICdPcmlnaW46IGh0dHA6Ly9leGFtcGxlLmNv
bVxyXG4nLAorICAgICAgICAnXHJcbicsCisgICAgKSwKKyAgICAoICAjIE9yaWdpbiBjb21lcyBi
ZWZvcmUgSG9zdAorICAgICAgICAnR0VUIC9kZW1vIEhUVFAvMS4xXHJcbicsCisgICAgICAgICdV
cGdyYWRlOiBXZWJTb2NrZXRcclxuJywKKyAgICAgICAgJ0Nvbm5lY3Rpb246IFVwZ3JhZGVcclxu
JywKKyAgICAgICAgJ09yaWdpbjogaHR0cDovL2V4YW1wbGUuY29tXHJcbicsCisgICAgICAgICdI
b3N0OiBleGFtcGxlLmNvbVxyXG4nLAorICAgICAgICAnXHJcbicsCisgICAgKSwKKyAgICAoICAj
IEhvc3QgY29udGludWVkIHRvIHRoZSBuZXh0IGxpbmUKKyAgICAgICAgJ0dFVCAvZGVtbyBIVFRQ
LzEuMVxyXG4nLAorICAgICAgICAnVXBncmFkZTogV2ViU29ja2V0XHJcbicsCisgICAgICAgICdD
b25uZWN0aW9uOiBVcGdyYWRlXHJcbicsCisgICAgICAgICdIb3N0OiBleGFtcGxlXHJcbicsCisg
ICAgICAgICcgLmNvbVxyXG4nLAorICAgICAgICAnT3JpZ2luOiBodHRwOi8vZXhhbXBsZS5jb21c
clxuJywKKyAgICAgICAgJ1xyXG4nLAorICAgICksCisgICAgKCAjIENvb2tpZSBjb21lcyBiZWZv
cmUgV2ViU29ja2V0LVByb3RvY29sCisgICAgICAgICdHRVQgL2RlbW8gSFRUUC8xLjFcclxuJywK
KyAgICAgICAgJ1VwZ3JhZGU6IFdlYlNvY2tldFxyXG4nLAorICAgICAgICAnQ29ubmVjdGlvbjog
VXBncmFkZVxyXG4nLAorICAgICAgICAnSG9zdDogZXhhbXBsZS5jb21cclxuJywKKyAgICAgICAg
J09yaWdpbjogaHR0cDovL2V4YW1wbGUuY29tXHJcbicsCisgICAgICAgICdDb29raWU6IHh5elxy
XG4nCisgICAgICAgICdXZWJTb2NrZXQtUHJvdG9jb2w6IHNhbXBsZVxyXG4nLAorICAgICAgICAn
XHJcbicsCisgICAgKSwKKyAgICAoICAjIFVua25vdyBoZWFkZXIKKyAgICAgICAgJ0dFVCAvZGVt
byBIVFRQLzEuMVxyXG4nLAorICAgICAgICAnVXBncmFkZTogV2ViU29ja2V0XHJcbicsCisgICAg
ICAgICdDb25uZWN0aW9uOiBVcGdyYWRlXHJcbicsCisgICAgICAgICdIb3N0OiBleGFtcGxlLmNv
bVxyXG4nLAorICAgICAgICAnT3JpZ2luOiBodHRwOi8vZXhhbXBsZS5jb21cclxuJywKKyAgICAg
ICAgJ0NvbnRlbnQtVHlwZTogdGV4dC9odG1sXHJcbicKKyAgICAgICAgJ1xyXG4nLAorICAgICks
CispCisKIAogZGVmIF9jcmVhdGVfcmVxdWVzdChyZXF1ZXN0X2RlZik6CiAgICAgY29ubiA9IG1v
Y2suTW9ja0Nvbm4oJycpCkBAIC0yMjksMTMgKzM0MiwzNyBAQCBkZWYgX2NyZWF0ZV9yZXF1ZXN0
KHJlcXVlc3RfZGVmKToKICAgICAgICAgICAgIGNvbm5lY3Rpb249Y29ubikKIAogCitkZWYgX2Ny
ZWF0ZV9nZXRfbWVtb3JpemVkX2xpbmVzKGxpbmVzKToKKyAgICBkZWYgZ2V0X21lbW9yaXplZF9s
aW5lcygpOgorICAgICAgICByZXR1cm4gbGluZXMKKyAgICByZXR1cm4gZ2V0X21lbW9yaXplZF9s
aW5lcworCisKK2RlZiBfY3JlYXRlX3JlcXVlc3RzX3dpdGhfbGluZXMocmVxdWVzdF9saW5lc19z
ZXQpOgorICAgIHJlcXVlc3RzID0gW10KKyAgICBmb3IgbGluZXMgaW4gcmVxdWVzdF9saW5lc19z
ZXQ6CisgICAgICAgIHJlcXVlc3QgPSBfY3JlYXRlX3JlcXVlc3QoX0dPT0RfUkVRVUVTVCkKKyAg
ICAgICAgcmVxdWVzdC5jb25uZWN0aW9uLmdldF9tZW1vcml6ZWRfbGluZXMgPSBfY3JlYXRlX2dl
dF9tZW1vcml6ZWRfbGluZXMoCisgICAgICAgICAgICAgICAgbGluZXMpCisgICAgICAgIHJlcXVl
c3RzLmFwcGVuZChyZXF1ZXN0KQorICAgIHJldHVybiByZXF1ZXN0cworCisKIGNsYXNzIEhhbmRz
aGFrZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF92YWxpZGF0ZV9wcm90
b2NvbChzZWxmKToKICAgICAgICAgaGFuZHNoYWtlLl92YWxpZGF0ZV9wcm90b2NvbCgnc2FtcGxl
JykgICMgc2hvdWxkIHN1Y2NlZWQuCiAgICAgICAgIGhhbmRzaGFrZS5fdmFsaWRhdGVfcHJvdG9j
b2woJ1NhbXBsZScpICAjIHNob3VsZCBzdWNjZWVkLgorICAgICAgICBoYW5kc2hha2UuX3ZhbGlk
YXRlX3Byb3RvY29sKCdzYW1wbGVceDIwcHJvdG9jb2wnKSAgIyBzaG91bGQgc3VjY2VlZC4KKyAg
ICAgICAgaGFuZHNoYWtlLl92YWxpZGF0ZV9wcm90b2NvbCgnc2FtcGxlXHg3ZXByb3RvY29sJykg
ICMgc2hvdWxkIHN1Y2NlZWQuCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGhhbmRzaGFrZS5I
YW5kc2hha2VFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZHNoYWtlLl92YWxp
ZGF0ZV9wcm90b2NvbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NhbXBsZSBwcm90b2Nv
bCcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICcnKQorICAgICAgICBzZWxmLmFzc2VydFJh
aXNlcyhoYW5kc2hha2UuSGFuZHNoYWtlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAg
IGhhbmRzaGFrZS5fdmFsaWRhdGVfcHJvdG9jb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICdzYW1wbGVceDE5cHJvdG9jb2wnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhoYW5kc2hh
a2UuSGFuZHNoYWtlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRzaGFrZS5f
dmFsaWRhdGVfcHJvdG9jb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICdzYW1wbGVceDdm
cHJvdG9jb2wnKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhoYW5kc2hha2UuSGFuZHNoYWtl
RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRzaGFrZS5fdmFsaWRhdGVfcHJv
dG9jb2wsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICMgIkphcGFuIiBpbiBKYXBhbmVzZQpA
QCAtMzA4LDYgKzQ0NSwyMiBAQCBjbGFzcyBIYW5kc2hha2VyVGVzdCh1bml0dGVzdC5UZXN0Q2Fz
ZSk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9jay5N
b2NrRGlzcGF0Y2hlcigpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoaGFuZHNoYWtl
LkhhbmRzaGFrZUVycm9yLCBoYW5kc2hha2VyLmRvX2hhbmRzaGFrZSkKIAorICAgIGRlZiB0ZXN0
X3N0cmljdGx5X2dvb2RfcmVxdWVzdHMoc2VsZik6CisgICAgICAgIGZvciByZXF1ZXN0IGluIF9j
cmVhdGVfcmVxdWVzdHNfd2l0aF9saW5lcyhfU1RSSUNUTFlfR09PRF9SRVFVRVNUUyk6CisgICAg
ICAgICAgICBzdHJpY3RfaGFuZHNoYWtlciA9IGhhbmRzaGFrZS5IYW5kc2hha2VyKHJlcXVlc3Qs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1v
Y2suTW9ja0Rpc3BhdGNoZXIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVHJ1ZSkKKyAgICAgICAgICAgIHN0cmljdF9oYW5kc2hha2VyLmRv
X2hhbmRzaGFrZSgpCisKKyAgICBkZWYgdGVzdF9ub3Rfc3RyaWN0bHlfZ29vZF9yZXF1ZXN0cyhz
ZWxmKToKKyAgICAgICAgZm9yIHJlcXVlc3QgaW4gX2NyZWF0ZV9yZXF1ZXN0c193aXRoX2xpbmVz
KF9OT1RfU1RSSUNUTFlfR09PRF9SRVFVRVNUUyk6CisgICAgICAgICAgICBzdHJpY3RfaGFuZHNo
YWtlciA9IGhhbmRzaGFrZS5IYW5kc2hha2VyKHJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vY2suTW9ja0Rpc3BhdGNoZXIoKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJ1
ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGhhbmRzaGFrZS5IYW5kc2hha2VFcnJv
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmljdF9oYW5kc2hha2VyLmRvX2hh
bmRzaGFrZSkKKworCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdW5pdHRlc3Qu
bWFpbigpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L3Rlc3RfbWVt
b3JpemluZ2ZpbGUucHkgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC90ZXN0L3Rlc3RfbWVtb3Jp
emluZ2ZpbGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmRlNzdiYQot
LS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L3Rlc3QvdGVzdF9tZW1v
cml6aW5nZmlsZS5weQpAQCAtMCwwICsxLDcyIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMK
KyMgQ29weXJpZ2h0IDIwMDksIEdvb2dsZSBJbmMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisj
CisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24u
CisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorCisKKyIiIlRlc3RzIGZvciBtZW1vcml6aW5nZmlsZSBtb2R1bGUu
IiIiCisKKworaW1wb3J0IFN0cmluZ0lPCitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IGNvbmZp
ZyAgIyBUaGlzIG11c3QgYmUgaW1wb3J0ZWQgYmVmb3JlIG1vZF9weXdlYnNvY2tldC4KK2Zyb20g
bW9kX3B5d2Vic29ja2V0IGltcG9ydCBtZW1vcml6aW5nZmlsZQorCisKK2NsYXNzIFV0aWxUZXN0
KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgY2hlY2soc2VsZiwgbWVtb3JpemluZ19maWxl
LCBudW1fcmVhZCwgZXhwZWN0ZWRfbGlzdCk6CisgICAgICAgIGZvciB1bnVzZWQgaW4gcmFuZ2Uo
bnVtX3JlYWQpOgorICAgICAgICAgICAgbWVtb3JpemluZ19maWxlLnJlYWRsaW5lKCkKKyAgICAg
ICAgYWN0dWFsX2xpc3QgPSBtZW1vcml6aW5nX2ZpbGUuZ2V0X21lbW9yaXplZF9saW5lcygpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGV4cGVjdGVkX2xpc3QpLCBsZW4oYWN0dWFsX2xp
c3QpKQorICAgICAgICBmb3IgZXhwZWN0ZWQsIGFjdHVhbCBpbiB6aXAoZXhwZWN0ZWRfbGlzdCwg
YWN0dWFsX2xpc3QpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgYWN0
dWFsKQorCisgICAgZGVmIHRlc3RfZ2V0X21lbW9yaXplZF9saW5lcyhzZWxmKToKKyAgICAgICAg
bWVtb3JpemluZ19maWxlID0gbWVtb3JpemluZ2ZpbGUuTWVtb3JpemluZ0ZpbGUoU3RyaW5nSU8u
U3RyaW5nSU8oCisgICAgICAgICAgICAgICAgJ0hlbGxvXG5Xb3JsZFxuV2VsY29tZScpKQorICAg
ICAgICBzZWxmLmNoZWNrKG1lbW9yaXppbmdfZmlsZSwgMywgWydIZWxsb1xuJywgJ1dvcmxkXG4n
LCAnV2VsY29tZSddKQorCisgICAgZGVmIHRlc3RfZ2V0X21lbW9yaXplZF9saW5lc19saW1pdF9t
ZW1vcml6ZWRfbGluZXMoc2VsZik6CisgICAgICAgIG1lbW9yaXppbmdfZmlsZSA9IG1lbW9yaXpp
bmdmaWxlLk1lbW9yaXppbmdGaWxlKFN0cmluZ0lPLlN0cmluZ0lPKAorICAgICAgICAgICAgICAg
ICdIZWxsb1xuV29ybGRcbldlbGNvbWUnKSwgMikKKyAgICAgICAgc2VsZi5jaGVjayhtZW1vcml6
aW5nX2ZpbGUsIDMsIFsnSGVsbG9cbicsICdXb3JsZFxuJ10pCisKKyAgICBkZWYgdGVzdF9nZXRf
bWVtb3JpemVkX2xpbmVzX2VtcHR5X2ZpbGUoc2VsZik6CisgICAgICAgIG1lbW9yaXppbmdfZmls
ZSA9IG1lbW9yaXppbmdmaWxlLk1lbW9yaXppbmdGaWxlKFN0cmluZ0lPLlN0cmluZ0lPKAorICAg
ICAgICAgICAgICAgICcnKSkKKyAgICAgICAgc2VsZi5jaGVjayhtZW1vcml6aW5nX2ZpbGUsIDEw
LCBbXSkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4o
KQorCisKKyMgdmk6c3RzPTQgc3c9NCBldAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44948</attachid>
            <date>2009-12-15 23:57:17 -0800</date>
            <delta_ts>2009-12-16 09:58:05 -0800</delta_ts>
            <desc>Update pywebsocket to 0.4.4 and make handshake checking stricter</desc>
            <filename>bug-32249-20091216165714.patch</filename>
            <type>text/plain</type>
            <size>22050</size>
            <attacher name="Yuzo Fujishima">yuzo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCBkMWE3NDNkLi44NzM1NjI5IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMDktMTIt
MDkgIFl1em8gRnVqaXNoaW1hICA8eXV6b0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZSBweXdlYnNvY2tldCB0byAwLjQu
NCBhbmQgbWFrZSBoYW5kc2hha2UgY2hlY2tpbmcgc3RyaWN0ZXIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMyMjQ5CisKKyAgICAgICAgKiBTY3JpcHRz
L3J1bi13ZWJraXQtdGVzdHM6CisgICAgICAgICogcHl3ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0
L2hhbmRzaGFrZS5weToKKyAgICAgICAgKiBweXdlYnNvY2tldC9tb2RfcHl3ZWJzb2NrZXQvbWVt
b3JpemluZ2ZpbGUucHk6IEFkZGVkLgorICAgICAgICAqIHB5d2Vic29ja2V0L21vZF9weXdlYnNv
Y2tldC9zdGFuZGFsb25lLnB5OgorICAgICAgICAqIHB5d2Vic29ja2V0L3NldHVwLnB5OgorICAg
ICAgICAqIHB5d2Vic29ja2V0L3Rlc3QvdGVzdF9oYW5kc2hha2UucHk6CisgICAgICAgICogcHl3
ZWJzb2NrZXQvdGVzdC90ZXN0X21lbW9yaXppbmdmaWxlLnB5OiBBZGRlZC4KKwogMjAwOS0xMi0x
NSAgWWFhciBTY2huaXRtYW4gIDx5YWFyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBEYXJpbiBGaXNoZXIuCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3J1bi13
ZWJraXQtdGVzdHMgYi9XZWJLaXRUb29scy9TY3JpcHRzL3J1bi13ZWJraXQtdGVzdHMKaW5kZXgg
NmRkODMzOS4uODcwOTk0NiAxMDA3NTUKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy9ydW4td2Vi
a2l0LXRlc3RzCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvcnVuLXdlYmtpdC10ZXN0cwpAQCAt
MTQ1NSw2ICsxNDU1LDcgQEAgc3ViIG9wZW5XZWJTb2NrZXRTZXJ2ZXJJZk5lZWRlZCgpCiAgICAg
ICAgICItZCIsICIkd2ViU29ja2V0SGFuZGxlckRpciIsCiAgICAgICAgICItcyIsICIkd2ViU29j
a2V0SGFuZGxlclNjYW5EaXIiLAogICAgICAgICAiLWwiLCAiJGxvZ0ZpbGUiLAorICAgICAgICAi
LS1zdHJpY3QiLAogICAgICk7CiAgICAgIyB3c3MgaXMgZGlzYWJsZWQgdW50aWwgYWxsIHBsYXRm
b3JtcyBzdXBwb3J0IHB5T3BlblNTTC4KICAgICAjIG15IEBhcmdzU2VjdXJlID0gKApkaWZmIC0t
Z2l0IGEvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0L2hhbmRzaGFrZS5w
eSBiL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L21vZF9weXdlYnNvY2tldC9oYW5kc2hha2UucHkK
aW5kZXggYTY3YWFkZC4uZWE3ZTE5OCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvcHl3ZWJzb2Nr
ZXQvbW9kX3B5d2Vic29ja2V0L2hhbmRzaGFrZS5weQorKysgYi9XZWJLaXRUb29scy9weXdlYnNv
Y2tldC9tb2RfcHl3ZWJzb2NrZXQvaGFuZHNoYWtlLnB5CkBAIC0zOSwxNCArMzksMTQgQEAgbm90
IHN1aXRhYmxlIGJlY2F1c2UgdGhleSBkb24ndCBhbGxvdyBkaXJlY3QgcmF3IGJ5dGVzIHdyaXRp
bmcvcmVhZGluZy4KIAogaW1wb3J0IHJlCiAKK2ltcG9ydCB1dGlsCisKIAogX0RFRkFVTFRfV0VC
X1NPQ0tFVF9QT1JUID0gODAKIF9ERUZBVUxUX1dFQl9TT0NLRVRfU0VDVVJFX1BPUlQgPSA0NDMK
IF9XRUJfU09DS0VUX1NDSEVNRSA9ICd3cycKIF9XRUJfU09DS0VUX1NFQ1VSRV9TQ0hFTUUgPSAn
d3NzJwogCi1fTUVUSE9EX0xJTkUgPSByZS5jb21waWxlKHInXkdFVCAoW14gXSspIEhUVFAvMS4x
XHJcbiQnKQotCiBfTUFOREFUT1JZX0hFQURFUlMgPSBbCiAgICAgIyBrZXksIGV4cGVjdGVkIHZh
bHVlIG9yIE5vbmUKICAgICBbJ1VwZ3JhZGUnLCAnV2ViU29ja2V0J10sCkBAIC01NSw2ICs1NSwy
MyBAQCBfTUFOREFUT1JZX0hFQURFUlMgPSBbCiAgICAgWydPcmlnaW4nLCBOb25lXSwKIF0KIAor
X0ZJUlNUX0ZJVkVfTElORVMgPSBtYXAocmUuY29tcGlsZSwgWworICAgIHInXkdFVCAvW1xTXSsg
SFRUUC8xLjFcclxuJCcsCisgICAgcideVXBncmFkZTogV2ViU29ja2V0XHJcbiQnLAorICAgIHIn
XkNvbm5lY3Rpb246IFVwZ3JhZGVcclxuJCcsCisgICAgcideSG9zdDogW1xTXStcclxuJCcsCisg
ICAgcideT3JpZ2luOiBbXFNdK1xyXG4kJywKK10pCisKK19TSVhUSF9BTkRfTEFURVIgPSByZS5j
b21waWxlKAorICAgIHInXicKKyAgICByJyhXZWJTb2NrZXQtUHJvdG9jb2w6IFtceDIwLVx4N2Vd
K1xyXG4pPycKKyAgICByJyhbQ2NdW09vXVtPb11bS2tdW0lpXVtFZV06W15ccl0qXHJcbikqJwor
ICAgIHInKFtDY11bT29dW09vXVtLa11bSWldW0VlXTI6W15ccl0qXHJcbik/JworICAgIHInKFtD
Y11bT29dW09vXVtLa11bSWldW0VlXTpbXlxyXSpcclxuKSonCisgICAgcidcclxuJykKKworCiAK
IGRlZiBfZGVmYXVsdF9wb3J0KGlzX3NlY3VyZSk6CiAgICAgaWYgaXNfc2VjdXJlOgpAQCAtNzUs
MTkgKzkyLDIyIEBAIGRlZiBfdmFsaWRhdGVfcHJvdG9jb2wocHJvdG9jb2wpOgogICAgIGlmIG5v
dCBwcm90b2NvbDoKICAgICAgICAgcmFpc2UgSGFuZHNoYWtlRXJyb3IoJ0ludmFsaWQgV2ViU29j
a2V0LVByb3RvY29sOiBlbXB0eScpCiAgICAgZm9yIGMgaW4gcHJvdG9jb2w6Ci0gICAgICAgIGlm
IG5vdCAweDIxIDw9IG9yZChjKSA8PSAweDdlOgorICAgICAgICBpZiBub3QgMHgyMCA8PSBvcmQo
YykgPD0gMHg3ZToKICAgICAgICAgICAgIHJhaXNlIEhhbmRzaGFrZUVycm9yKCdJbGxlZ2FsIGNo
YXJhY3RlciBpbiBwcm90b2NvbDogJXInICUgYykKIAogCiBjbGFzcyBIYW5kc2hha2VyKG9iamVj
dCk6CiAgICAgIiIiVGhpcyBjbGFzcyBwZXJmb3JtcyBXZWIgU29ja2V0IGhhbmRzaGFrZS4iIiIK
IAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZXF1ZXN0LCBkaXNwYXRjaGVyKToKKyAgICBkZWYg
X19pbml0X18oc2VsZiwgcmVxdWVzdCwgZGlzcGF0Y2hlciwgc3RyaWN0PUZhbHNlKToKICAgICAg
ICAgIiIiQ29uc3RydWN0IGFuIGluc3RhbmNlLgogCiAgICAgICAgIEFyZ3M6CiAgICAgICAgICAg
ICByZXF1ZXN0OiBtb2RfcHl0aG9uIHJlcXVlc3QuCiAgICAgICAgICAgICBkaXNwYXRjaGVyOiBE
aXNwYXRjaGVyIChkaXNwYXRjaC5EaXNwYXRjaGVyKS4KKyAgICAgICAgICAgIHN0cmljdDogU3Ry
aWN0bHkgY2hlY2sgaGFuZHNoYWtlIHJlcXVlc3QuIERlZmF1bHQ6IEZhbHNlLgorICAgICAgICAg
ICAgICAgIElmIFRydWUsIHJlcXVlc3QuY29ubmVjdGlvbiBtdXN0IHByb3ZpZGUgZ2V0X21lbW9y
aXplZF9saW5lcworICAgICAgICAgICAgICAgIG1ldGhvZC4KIAogICAgICAgICBIYW5kc2hha2Vy
IHdpbGwgYWRkIGF0dHJpYnV0ZXMgc3VjaCBhcyB3c19yZXNvdXJjZSBpbiBwZXJmb3JtaW5nCiAg
ICAgICAgIGhhbmRzaGFrZS4KQEAgLTk1LDYgKzExNSw3IEBAIGNsYXNzIEhhbmRzaGFrZXIob2Jq
ZWN0KToKIAogICAgICAgICBzZWxmLl9yZXF1ZXN0ID0gcmVxdWVzdAogICAgICAgICBzZWxmLl9k
aXNwYXRjaGVyID0gZGlzcGF0Y2hlcgorICAgICAgICBzZWxmLl9zdHJpY3QgPSBzdHJpY3QKIAog
ICAgIGRlZiBkb19oYW5kc2hha2Uoc2VsZik6CiAgICAgICAgICIiIlBlcmZvcm0gV2ViIFNvY2tl
dCBIYW5kc2hha2UuIiIiCkBAIC0xNzMsNiArMTk0LDI4IEBAIGNsYXNzIEhhbmRzaGFrZXIob2Jq
ZWN0KToKICAgICAgICAgICAgICAgICBpZiBhY3R1YWxfdmFsdWUgIT0gZXhwZWN0ZWRfdmFsdWU6
CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEhhbmRzaGFrZUVycm9yKCdJbGxlZ2FsIHZhbHVl
IGZvciBoZWFkZXIgJXM6ICVzJyAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChrZXksIGFjdHVhbF92YWx1ZSkpCisgICAgICAgIGlmIHNlbGYuX3N0cmljdDoKKyAg
ICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBsaW5lcyA9IHNlbGYuX3JlcXVlc3QuY29u
bmVjdGlvbi5nZXRfbWVtb3JpemVkX2xpbmVzKCkKKyAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1
dGVFcnJvciwgZToKKyAgICAgICAgICAgICAgICB1dGlsLnByZXBlbmRfbWVzc2FnZV90b19leGNl
cHRpb24oCisgICAgICAgICAgICAgICAgICAgICdTdHJpY3QgaGFuZHNoYWtlIGlzIHNwZWNpZmll
ZCBidXQgdGhlIGNvbm5lY3Rpb24gJworICAgICAgICAgICAgICAgICAgICAnZG9lc25cJ3QgcHJv
dmlkZSBnZXRfbWVtb3JpemVkX2xpbmVzKCknLCBlKQorICAgICAgICAgICAgICAgIHJhaXNlCisg
ICAgICAgICAgICBzZWxmLl9jaGVja19maXJzdF9saW5lcyhsaW5lcykKKworICAgIGRlZiBfY2hl
Y2tfZmlyc3RfbGluZXMoc2VsZiwgbGluZXMpOgorICAgICAgICBpZiBsZW4obGluZXMpIDwgbGVu
KF9GSVJTVF9GSVZFX0xJTkVTKToKKyAgICAgICAgICAgIHJhaXNlIEhhbmRzaGFrZUVycm9yKCdU
b28gZmV3IGhlYWRlciBsaW5lczogJWQnICUgbGVuKGxpbmVzKSkKKyAgICAgICAgZm9yIGxpbmUs
IHJlZ2V4cCBpbiB6aXAobGluZXMsIF9GSVJTVF9GSVZFX0xJTkVTKToKKyAgICAgICAgICAgIGlm
IG5vdCByZWdleHAuc2VhcmNoKGxpbmUpOgorICAgICAgICAgICAgICAgIHJhaXNlIEhhbmRzaGFr
ZUVycm9yKCdVbmV4cGVjdGVkIGhlYWRlcjogJXIgZG9lc25cJ3QgbWF0Y2ggJXInCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAobGluZSwgcmVnZXhwLnBhdHRlcm4pKQor
ICAgICAgICBzaXh0aF9hbmRfbGF0ZXIgPSAnJy5qb2luKGxpbmVzWzU6XSkKKyAgICAgICAgaWYg
bm90IF9TSVhUSF9BTkRfTEFURVIuc2VhcmNoKHNpeHRoX2FuZF9sYXRlcik6CisgICAgICAgICAg
ICByYWlzZSBIYW5kc2hha2VFcnJvcignVW5leHBlY3RlZCBoZWFkZXI6ICVyIGRvZXNuXCd0IG1h
dGNoICVyJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoc2l4dGhfYW5kX2xh
dGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1NJWFRIX0FORF9MQVRF
Ui5wYXR0ZXJuKSkKIAogCiAjIHZpOnN0cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1dlYktpdFRv
b2xzL3B5d2Vic29ja2V0L21vZF9weXdlYnNvY2tldC9tZW1vcml6aW5nZmlsZS5weSBiL1dlYktp
dFRvb2xzL3B5d2Vic29ja2V0L21vZF9weXdlYnNvY2tldC9tZW1vcml6aW5nZmlsZS5weQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjhhNTRlCi0tLSAvZGV2L251bGwKKysr
IGIvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0L21lbW9yaXppbmdmaWxl
LnB5CkBAIC0wLDAgKzEsODEgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmln
aHQgMjAwOSwgR29vZ2xlIEluYy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisj
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisKKworIiIiTWVtb3JpemluZyBmaWxlLgorCitBIG1lbW9yaXppbmcgZmlsZSB3cmFw
cyBhIGZpbGUgYW5kIG1lbW9yaXplcyBsaW5lcyByZWFkIGJ5IHJlYWRsaW5lLgorIiIiCisKKwor
aW1wb3J0IHN5cworCisKK2NsYXNzIE1lbW9yaXppbmdGaWxlKG9iamVjdCk6CisgICAgIiIiTWVt
b3JpemluZ0ZpbGUgd3JhcHMgYSBmaWxlIGFuZCBtZW1vcml6ZXMgbGluZXMgcmVhZCBieSByZWFk
bGluZS4KKworICAgIE5vdGUgdGhhdCBkYXRhIHJlYWQgYnkgb3RoZXIgbWV0aG9kcyBhcmUgbm90
IG1lbW9yaXplZC4gVGhpcyBiZWhhdmlvcgorICAgIGlzIGdvb2QgZW5vdWdoIGZvciBtZW1vcml6
aW5nIGxpbmVzIFNpbXBsZUhUVFBTZXJ2ZXIgcmVhZHMgYmVmb3JlCisgICAgdGhlIGNvbnRyb2wg
cmVhY2hlcyBXZWJTb2NrZXRSZXF1ZXN0SGFuZGxlci4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0
X18oc2VsZiwgZmlsZV8sIG1heF9tZW1vcml6ZWRfbGluZXM9c3lzLm1heGludCk6CisgICAgICAg
ICIiIkNvbnN0cnVjdCBhbiBpbnN0YW5jZS4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAg
ZmlsZV86IHRoZSBmaWxlIG9iamVjdCB0byB3cmFwLgorICAgICAgICAgICAgbWF4X21lbW9yaXpl
ZF9saW5lczogdGhlIG1heGltdW0gbnVtYmVyIG9mIGxpbmVzIHRvIG1lbW9yaXplLgorICAgICAg
ICAgICAgICAgIE9ubHkgdGhlIGZpcnN0IG1heF9tZW1vcml6ZWRfbGluZXMgYXJlIG1lbW9yaXpl
ZC4KKyAgICAgICAgICAgICAgICBEZWZhdWx0OiBzeXMubWF4aW50LiAKKyAgICAgICAgIiIiCisg
ICAgICAgIHNlbGYuX2ZpbGUgPSBmaWxlXworICAgICAgICBzZWxmLl9tZW1vcml6ZWRfbGluZXMg
PSBbXQorICAgICAgICBzZWxmLl9tYXhfbWVtb3JpemVkX2xpbmVzID0gbWF4X21lbW9yaXplZF9s
aW5lcworCisgICAgZGVmIF9fZ2V0YXR0cmlidXRlX18oc2VsZiwgbmFtZSk6CisgICAgICAgIGlm
IG5hbWUgaW4gKCdfZmlsZScsICdfbWVtb3JpemVkX2xpbmVzJywgJ19tYXhfbWVtb3JpemVkX2xp
bmVzJywKKyAgICAgICAgICAgICAgICAgICAgJ3JlYWRsaW5lJywgJ2dldF9tZW1vcml6ZWRfbGlu
ZXMnKToKKyAgICAgICAgICAgIHJldHVybiBvYmplY3QuX19nZXRhdHRyaWJ1dGVfXyhzZWxmLCBu
YW1lKQorICAgICAgICByZXR1cm4gc2VsZi5fZmlsZS5fX2dldGF0dHJpYnV0ZV9fKG5hbWUpCisK
KyAgICBkZWYgcmVhZGxpbmUoc2VsZik6CisgICAgICAgICIiIk92ZXJyaWRlIGZpbGUucmVhZGxp
bmUgYW5kIG1lbW9yaXplIHRoZSBsaW5lIHJlYWQuIiIiCisKKyAgICAgICAgbGluZSA9IHNlbGYu
X2ZpbGUucmVhZGxpbmUoKQorICAgICAgICBpZiBsaW5lIGFuZCBsZW4oc2VsZi5fbWVtb3JpemVk
X2xpbmVzKSA8IHNlbGYuX21heF9tZW1vcml6ZWRfbGluZXM6CisgICAgICAgICAgICBzZWxmLl9t
ZW1vcml6ZWRfbGluZXMuYXBwZW5kKGxpbmUpCisgICAgICAgIHJldHVybiBsaW5lCisKKyAgICBk
ZWYgZ2V0X21lbW9yaXplZF9saW5lcyhzZWxmKToKKyAgICAgICAgIiIiR2V0IGxpbmVzIG1lbW9y
aXplZCBzbyBmYXIuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9tZW1vcml6ZWRfbGluZXMKKwor
CisjIHZpOnN0cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0
L21vZF9weXdlYnNvY2tldC9zdGFuZGFsb25lLnB5IGIvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQv
bW9kX3B5d2Vic29ja2V0L3N0YW5kYWxvbmUucHkKaW5kZXggNjIxNzU4NS4uMGExNzM2ZSAxMDA2
NDQKLS0tIGEvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0L3N0YW5kYWxv
bmUucHkKKysrIGIvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvbW9kX3B5d2Vic29ja2V0L3N0YW5k
YWxvbmUucHkKQEAgLTc1LDYgKzc1LDcgQEAgZXhjZXB0IEltcG9ydEVycm9yOgogCiBpbXBvcnQg
ZGlzcGF0Y2gKIGltcG9ydCBoYW5kc2hha2UKK2ltcG9ydCBtZW1vcml6aW5nZmlsZQogaW1wb3J0
IHV0aWwKIAogCkBAIC04OCw2ICs4OSw4IEBAIF9MT0dfTEVWRUxTID0gewogX0RFRkFVTFRfTE9H
X01BWF9CWVRFUyA9IDEwMjQgKiAyNTYKIF9ERUZBVUxUX0xPR19CQUNLVVBfQ09VTlQgPSA1CiAK
KyMgMTAyNCBpcyBwcmFjdGljYWxseSBsYXJnZSBlbm91Z2ggdG8gY29udGFpbiBXZWJTb2NrZXQg
aGFuZHNoYWtlIGxpbmVzLgorX01BWF9NRU1PUklaRURfTElORVMgPSAxMDI0CiAKIGRlZiBfcHJp
bnRfd2FybmluZ3NfaWZfYW55KGRpc3BhdGNoZXIpOgogICAgIHdhcm5pbmdzID0gZGlzcGF0Y2hl
ci5zb3VyY2Vfd2FybmluZ3MoKQpAQCAtMTI5LDYgKzEzMiwxMCBAQCBjbGFzcyBfU3RhbmRhbG9u
ZUNvbm5lY3Rpb24ob2JqZWN0KToKICAgICAgICAgIiIiTWltaWMgbXBfY29ubi5yZWFkKCkuIiIi
CiAgICAgICAgIHJldHVybiBzZWxmLl9yZXF1ZXN0X2hhbmRsZXIucmZpbGUucmVhZChsZW5ndGgp
CiAKKyAgICBkZWYgZ2V0X21lbW9yaXplZF9saW5lcyhzZWxmKToKKyAgICAgICAgIiIiR2V0IG1l
bW9yaXplZCBsaW5lcy4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3JlcXVlc3RfaGFuZGxlci5y
ZmlsZS5nZXRfbWVtb3JpemVkX2xpbmVzKCkKKwogCiBjbGFzcyBfU3RhbmRhbG9uZVJlcXVlc3Qo
b2JqZWN0KToKICAgICAiIiJNaW1pYyBtb2RfcHl0aG9uIHJlcXVlc3QuIiIiCkBAIC0xOTgsNyAr
MjA1LDkgQEAgY2xhc3MgV2ViU29ja2V0UmVxdWVzdEhhbmRsZXIoU2ltcGxlSFRUUFNlcnZlci5T
aW1wbGVIVFRQUmVxdWVzdEhhbmRsZXIpOgogICAgICAgICAiIiJPdmVycmlkZSBTb2NrZXRTZXJ2
ZXIuU3RyZWFtUmVxdWVzdEhhbmRsZXIuc2V0dXAuIiIiCiAKICAgICAgICAgc2VsZi5jb25uZWN0
aW9uID0gc2VsZi5yZXF1ZXN0Ci0gICAgICAgIHNlbGYucmZpbGUgPSBzb2NrZXQuX2ZpbGVvYmpl
Y3Qoc2VsZi5yZXF1ZXN0LCAncmInLCBzZWxmLnJidWZzaXplKQorICAgICAgICBzZWxmLnJmaWxl
ID0gbWVtb3JpemluZ2ZpbGUuTWVtb3JpemluZ0ZpbGUoCisgICAgICAgICAgICAgICAgc29ja2V0
Ll9maWxlb2JqZWN0KHNlbGYucmVxdWVzdCwgJ3JiJywgc2VsZi5yYnVmc2l6ZSksCisgICAgICAg
ICAgICAgICAgbWF4X21lbW9yaXplZF9saW5lcz1fTUFYX01FTU9SSVpFRF9MSU5FUykKICAgICAg
ICAgc2VsZi53ZmlsZSA9IHNvY2tldC5fZmlsZW9iamVjdChzZWxmLnJlcXVlc3QsICd3YicsIHNl
bGYud2J1ZnNpemUpCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa2V5d29yZHMp
OgpAQCAtMjA2LDggKzIxNSw5IEBAIGNsYXNzIFdlYlNvY2tldFJlcXVlc3RIYW5kbGVyKFNpbXBs
ZUhUVFBTZXJ2ZXIuU2ltcGxlSFRUUFJlcXVlc3RIYW5kbGVyKToKICAgICAgICAgICAgICAgICBz
ZWxmLCBXZWJTb2NrZXRSZXF1ZXN0SGFuZGxlci5vcHRpb25zLnVzZV90bHMpCiAgICAgICAgIHNl
bGYuX2Rpc3BhdGNoZXIgPSBXZWJTb2NrZXRSZXF1ZXN0SGFuZGxlci5vcHRpb25zLmRpc3BhdGNo
ZXIKICAgICAgICAgc2VsZi5fcHJpbnRfd2FybmluZ3NfaWZfYW55KCkKLSAgICAgICAgc2VsZi5f
aGFuZHNoYWtlciA9IGhhbmRzaGFrZS5IYW5kc2hha2VyKHNlbGYuX3JlcXVlc3QsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9kaXNwYXRjaGVy
KQorICAgICAgICBzZWxmLl9oYW5kc2hha2VyID0gaGFuZHNoYWtlLkhhbmRzaGFrZXIoCisgICAg
ICAgICAgICAgICAgc2VsZi5fcmVxdWVzdCwgc2VsZi5fZGlzcGF0Y2hlciwKKyAgICAgICAgICAg
ICAgICBXZWJTb2NrZXRSZXF1ZXN0SGFuZGxlci5vcHRpb25zLnN0cmljdCkKICAgICAgICAgU2lt
cGxlSFRUUFNlcnZlci5TaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXIuX19pbml0X18oCiAgICAgICAg
ICAgICAgICAgc2VsZiwgKmFyZ3MsICoqa2V5d29yZHMpCiAKQEAgLTMwMiw2ICszMTIsOCBAQCBk
ZWYgX21haW4oKToKICAgICBwYXJzZXIuYWRkX29wdGlvbignLS1sb2dfY291bnQnLCBkZXN0PSds
b2dfY291bnQnLCB0eXBlPSdpbnQnLAogICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9X0RF
RkFVTFRfTE9HX0JBQ0tVUF9DT1VOVCwKICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdMb2cg
YmFja3VwIGNvdW50JykKKyAgICBwYXJzZXIuYWRkX29wdGlvbignLS1zdHJpY3QnLCBkZXN0PSdz
dHJpY3QnLCBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICAgIGRlZmF1
bHQ9RmFsc2UsIGhlbHA9J1N0cmljdGx5IGNoZWNrIGhhbmRzaGFrZSByZXF1ZXN0JykKICAgICBv
cHRpb25zID0gcGFyc2VyLnBhcnNlX2FyZ3MoKVswXQogCiAgICAgb3MuY2hkaXIob3B0aW9ucy5k
b2N1bWVudF9yb290KQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvc2V0dXAu
cHkgYi9XZWJLaXRUb29scy9weXdlYnNvY2tldC9zZXR1cC5weQppbmRleCBkZjA1ZmVmLi5kNTUy
ZDkxIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9weXdlYnNvY2tldC9zZXR1cC5weQorKysgYi9X
ZWJLaXRUb29scy9weXdlYnNvY2tldC9zZXR1cC5weQpAQCAtNTYsNyArNTYsNyBAQCBzZXR1cChh
dXRob3I9J1l1em8gRnVqaXNoaW1hJywKICAgICAgIG5hbWU9X1BBQ0tBR0VfTkFNRSwKICAgICAg
IHBhY2thZ2VzPVtfUEFDS0FHRV9OQU1FXSwKICAgICAgIHVybD0naHR0cDovL2NvZGUuZ29vZ2xl
LmNvbS9wL3B5d2Vic29ja2V0LycsCi0gICAgICB2ZXJzaW9uPScwLjQuMycsCisgICAgICB2ZXJz
aW9uPScwLjQuNScsCiAgICAgICApCiAKIApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvcHl3ZWJz
b2NrZXQvdGVzdC90ZXN0X2hhbmRzaGFrZS5weSBiL1dlYktpdFRvb2xzL3B5d2Vic29ja2V0L3Rl
c3QvdGVzdF9oYW5kc2hha2UucHkKaW5kZXggZGQxZjY1Yy4uYzRjNDU5MCAxMDA2NDQKLS0tIGEv
V2ViS2l0VG9vbHMvcHl3ZWJzb2NrZXQvdGVzdC90ZXN0X2hhbmRzaGFrZS5weQorKysgYi9XZWJL
aXRUb29scy9weXdlYnNvY2tldC90ZXN0L3Rlc3RfaGFuZHNoYWtlLnB5CkBAIC0yMTQsMTEgKzIx
NCwxNDIgQEAgX0JBRF9SRVFVRVNUUyA9ICgKICAgICAgICAgICAgICdDb25uZWN0aW9uJzonVXBn
cmFkZScsCiAgICAgICAgICAgICAnSG9zdCc6J2V4YW1wbGUuY29tJywKICAgICAgICAgICAgICdP
cmlnaW4nOidodHRwOi8vZXhhbXBsZS5jb20nLAotICAgICAgICAgICAgJ1dlYlNvY2tldC1Qcm90
b2NvbCc6J2lsbGVnYWwgcHJvdG9jb2wnLAorICAgICAgICAgICAgJ1dlYlNvY2tldC1Qcm90b2Nv
bCc6J2lsbGVnYWxceDA5cHJvdG9jb2wnLAogICAgICAgICB9CiAgICAgKSwKICkKIAorX1NUUklD
VExZX0dPT0RfUkVRVUVTVFMgPSAoCisgICAgKAorICAgICAgICAnR0VUIC9kZW1vIEhUVFAvMS4x
XHJcbicsCisgICAgICAgICdVcGdyYWRlOiBXZWJTb2NrZXRcclxuJywKKyAgICAgICAgJ0Nvbm5l
Y3Rpb246IFVwZ3JhZGVcclxuJywKKyAgICAgICAgJ0hvc3Q6IGV4YW1wbGUuY29tXHJcbicsCisg
ICAgICAgICdPcmlnaW46IGh0dHA6Ly9leGFtcGxlLmNvbVxyXG4nLAorICAgICAgICAnXHJcbics
CisgICAgKSwKKyAgICAoICAjIFdlYlNvY2tldC1Qcm90b2NvbAorICAgICAgICAnR0VUIC9kZW1v
IEhUVFAvMS4xXHJcbicsCisgICAgICAgICdVcGdyYWRlOiBXZWJTb2NrZXRcclxuJywKKyAgICAg
ICAgJ0Nvbm5lY3Rpb246IFVwZ3JhZGVcclxuJywKKyAgICAgICAgJ0hvc3Q6IGV4YW1wbGUuY29t
XHJcbicsCisgICAgICAgICdPcmlnaW46IGh0dHA6Ly9leGFtcGxlLmNvbVxyXG4nLAorICAgICAg
ICAnV2ViU29ja2V0LVByb3RvY29sOiBzYW1wbGVcclxuJywKKyAgICAgICAgJ1xyXG4nLAorICAg
ICksCisgICAgKCAgIyBXZWJTb2NrZXQtUHJvdG9jb2wgYW5kIENvb2tpZQorICAgICAgICAnR0VU
IC9kZW1vIEhUVFAvMS4xXHJcbicsCisgICAgICAgICdVcGdyYWRlOiBXZWJTb2NrZXRcclxuJywK
KyAgICAgICAgJ0Nvbm5lY3Rpb246IFVwZ3JhZGVcclxuJywKKyAgICAgICAgJ0hvc3Q6IGV4YW1w
bGUuY29tXHJcbicsCisgICAgICAgICdPcmlnaW46IGh0dHA6Ly9leGFtcGxlLmNvbVxyXG4nLAor
ICAgICAgICAnV2ViU29ja2V0LVByb3RvY29sOiBzYW1wbGVcclxuJywKKyAgICAgICAgJ0Nvb2tp
ZTogeHl6XHJcbicKKyAgICAgICAgJ1xyXG4nLAorICAgICksCisgICAgKCAgIyBDb29raWUKKyAg
ICAgICAgJ0dFVCAvZGVtbyBIVFRQLzEuMVxyXG4nLAorICAgICAgICAnVXBncmFkZTogV2ViU29j
a2V0XHJcbicsCisgICAgICAgICdDb25uZWN0aW9uOiBVcGdyYWRlXHJcbicsCisgICAgICAgICdI
b3N0OiBleGFtcGxlLmNvbVxyXG4nLAorICAgICAgICAnT3JpZ2luOiBodHRwOi8vZXhhbXBsZS5j
b21cclxuJywKKyAgICAgICAgJ0Nvb2tpZTogYWJjL3h5elxyXG4nCisgICAgICAgICdDb29raWUy
OiAkVmVyc2lvbj0xXHJcbicKKyAgICAgICAgJ0Nvb2tpZTogYWJjXHJcbicKKyAgICAgICAgJ1xy
XG4nLAorICAgICksCispCisKK19OT1RfU1RSSUNUTFlfR09PRF9SRVFVRVNUUyA9ICgKKyAgICAo
ICAjIEV4dHJhIHNwYWNlIGFmdGVyIEdFVAorICAgICAgICAnR0VUICAvZGVtbyBIVFRQLzEuMVxy
XG4nLAorICAgICAgICAnVXBncmFkZTogV2ViU29ja2V0XHJcbicsCisgICAgICAgICdDb25uZWN0
aW9uOiBVcGdyYWRlXHJcbicsCisgICAgICAgICdIb3N0OiBleGFtcGxlLmNvbVxyXG4nLAorICAg
ICAgICAnT3JpZ2luOiBodHRwOi8vZXhhbXBsZS5jb21cclxuJywKKyAgICAgICAgJ1xyXG4nLAor
ICAgICksCisgICAgKCAgIyBSZXNvdXJjZSBuYW1lIGRvZXNuJ3Qgc3RhdCB3aXRoICcvJworICAg
ICAgICAnR0VUIGRlbW8gSFRUUC8xLjFcclxuJywKKyAgICAgICAgJ1VwZ3JhZGU6IFdlYlNvY2tl
dFxyXG4nLAorICAgICAgICAnQ29ubmVjdGlvbjogVXBncmFkZVxyXG4nLAorICAgICAgICAnSG9z
dDogZXhhbXBsZS5jb21cclxuJywKKyAgICAgICAgJ09yaWdpbjogaHR0cDovL2V4YW1wbGUuY29t
XHJcbicsCisgICAgICAgICdcclxuJywKKyAgICApLAorICAgICggICMgTm8gc3BhY2UgYWZ0ZXIg
OgorICAgICAgICAnR0VUIC9kZW1vIEhUVFAvMS4xXHJcbicsCisgICAgICAgICdVcGdyYWRlOldl
YlNvY2tldFxyXG4nLAorICAgICAgICAnQ29ubmVjdGlvbjogVXBncmFkZVxyXG4nLAorICAgICAg
ICAnSG9zdDogZXhhbXBsZS5jb21cclxuJywKKyAgICAgICAgJ09yaWdpbjogaHR0cDovL2V4YW1w
bGUuY29tXHJcbicsCisgICAgICAgICdcclxuJywKKyAgICApLAorICAgICggICMgTG93ZXIgY2Fz
ZSBVcGdyYWRlIGhlYWRlcgorICAgICAgICAnR0VUIC9kZW1vIEhUVFAvMS4xXHJcbicsCisgICAg
ICAgICd1cGdyYWRlOiBXZWJTb2NrZXRcclxuJywKKyAgICAgICAgJ0Nvbm5lY3Rpb246IFVwZ3Jh
ZGVcclxuJywKKyAgICAgICAgJ0hvc3Q6IGV4YW1wbGUuY29tXHJcbicsCisgICAgICAgICdPcmln
aW46IGh0dHA6Ly9leGFtcGxlLmNvbVxyXG4nLAorICAgICAgICAnXHJcbicsCisgICAgKSwKKyAg
ICAoICAjIENvbm5lY3Rpb24gY29tZXMgYmVmb3JlIFVwZ3JhZGUKKyAgICAgICAgJ0dFVCAvZGVt
byBIVFRQLzEuMVxyXG4nLAorICAgICAgICAnQ29ubmVjdGlvbjogVXBncmFkZVxyXG4nLAorICAg
ICAgICAnVXBncmFkZTogV2ViU29ja2V0XHJcbicsCisgICAgICAgICdIb3N0OiBleGFtcGxlLmNv
bVxyXG4nLAorICAgICAgICAnT3JpZ2luOiBodHRwOi8vZXhhbXBsZS5jb21cclxuJywKKyAgICAg
ICAgJ1xyXG4nLAorICAgICksCisgICAgKCAgIyBPcmlnaW4gY29tZXMgYmVmb3JlIEhvc3QKKyAg
ICAgICAgJ0dFVCAvZGVtbyBIVFRQLzEuMVxyXG4nLAorICAgICAgICAnVXBncmFkZTogV2ViU29j
a2V0XHJcbicsCisgICAgICAgICdDb25uZWN0aW9uOiBVcGdyYWRlXHJcbicsCisgICAgICAgICdP
cmlnaW46IGh0dHA6Ly9leGFtcGxlLmNvbVxyXG4nLAorICAgICAgICAnSG9zdDogZXhhbXBsZS5j
b21cclxuJywKKyAgICAgICAgJ1xyXG4nLAorICAgICksCisgICAgKCAgIyBIb3N0IGNvbnRpbnVl
ZCB0byB0aGUgbmV4dCBsaW5lCisgICAgICAgICdHRVQgL2RlbW8gSFRUUC8xLjFcclxuJywKKyAg
ICAgICAgJ1VwZ3JhZGU6IFdlYlNvY2tldFxyXG4nLAorICAgICAgICAnQ29ubmVjdGlvbjogVXBn
cmFkZVxyXG4nLAorICAgICAgICAnSG9zdDogZXhhbXBsZVxyXG4nLAorICAgICAgICAnIC5jb21c
clxuJywKKyAgICAgICAgJ09yaWdpbjogaHR0cDovL2V4YW1wbGUuY29tXHJcbicsCisgICAgICAg
ICdcclxuJywKKyAgICApLAorICAgICggIyBDb29raWUgY29tZXMgYmVmb3JlIFdlYlNvY2tldC1Q
cm90b2NvbAorICAgICAgICAnR0VUIC9kZW1vIEhUVFAvMS4xXHJcbicsCisgICAgICAgICdVcGdy
YWRlOiBXZWJTb2NrZXRcclxuJywKKyAgICAgICAgJ0Nvbm5lY3Rpb246IFVwZ3JhZGVcclxuJywK
KyAgICAgICAgJ0hvc3Q6IGV4YW1wbGUuY29tXHJcbicsCisgICAgICAgICdPcmlnaW46IGh0dHA6
Ly9leGFtcGxlLmNvbVxyXG4nLAorICAgICAgICAnQ29va2llOiB4eXpcclxuJworICAgICAgICAn
V2ViU29ja2V0LVByb3RvY29sOiBzYW1wbGVcclxuJywKKyAgICAgICAgJ1xyXG4nLAorICAgICks
CisgICAgKCAgIyBVbmtub3duIGhlYWRlcgorICAgICAgICAnR0VUIC9kZW1vIEhUVFAvMS4xXHJc
bicsCisgICAgICAgICdVcGdyYWRlOiBXZWJTb2NrZXRcclxuJywKKyAgICAgICAgJ0Nvbm5lY3Rp
b246IFVwZ3JhZGVcclxuJywKKyAgICAgICAgJ0hvc3Q6IGV4YW1wbGUuY29tXHJcbicsCisgICAg
ICAgICdPcmlnaW46IGh0dHA6Ly9leGFtcGxlLmNvbVxyXG4nLAorICAgICAgICAnQ29udGVudC1U
eXBlOiB0ZXh0L2h0bWxcclxuJworICAgICAgICAnXHJcbicsCisgICAgKSwKKyAgICAoICAjIENv
b2tpZSB3aXRoIGNvbnRpbnVhdGlvbiBsaW5lcworICAgICAgICAnR0VUIC9kZW1vIEhUVFAvMS4x
XHJcbicsCisgICAgICAgICdVcGdyYWRlOiBXZWJTb2NrZXRcclxuJywKKyAgICAgICAgJ0Nvbm5l
Y3Rpb246IFVwZ3JhZGVcclxuJywKKyAgICAgICAgJ0hvc3Q6IGV4YW1wbGUuY29tXHJcbicsCisg
ICAgICAgICdPcmlnaW46IGh0dHA6Ly9leGFtcGxlLmNvbVxyXG4nLAorICAgICAgICAnQ29va2ll
OiB4eXpcclxuJywKKyAgICAgICAgJyBhYmNcclxuJywKKyAgICAgICAgJyBkZWZnXHJcbicsCisg
ICAgICAgICdcclxuJywKKyAgICApLAorKQorCiAKIGRlZiBfY3JlYXRlX3JlcXVlc3QocmVxdWVz
dF9kZWYpOgogICAgIGNvbm4gPSBtb2NrLk1vY2tDb25uKCcnKQpAQCAtMjI5LDEzICszNjAsMzcg
QEAgZGVmIF9jcmVhdGVfcmVxdWVzdChyZXF1ZXN0X2RlZik6CiAgICAgICAgICAgICBjb25uZWN0
aW9uPWNvbm4pCiAKIAorZGVmIF9jcmVhdGVfZ2V0X21lbW9yaXplZF9saW5lcyhsaW5lcyk6Cisg
ICAgZGVmIGdldF9tZW1vcml6ZWRfbGluZXMoKToKKyAgICAgICAgcmV0dXJuIGxpbmVzCisgICAg
cmV0dXJuIGdldF9tZW1vcml6ZWRfbGluZXMKKworCitkZWYgX2NyZWF0ZV9yZXF1ZXN0c193aXRo
X2xpbmVzKHJlcXVlc3RfbGluZXNfc2V0KToKKyAgICByZXF1ZXN0cyA9IFtdCisgICAgZm9yIGxp
bmVzIGluIHJlcXVlc3RfbGluZXNfc2V0OgorICAgICAgICByZXF1ZXN0ID0gX2NyZWF0ZV9yZXF1
ZXN0KF9HT09EX1JFUVVFU1QpCisgICAgICAgIHJlcXVlc3QuY29ubmVjdGlvbi5nZXRfbWVtb3Jp
emVkX2xpbmVzID0gX2NyZWF0ZV9nZXRfbWVtb3JpemVkX2xpbmVzKAorICAgICAgICAgICAgICAg
IGxpbmVzKQorICAgICAgICByZXF1ZXN0cy5hcHBlbmQocmVxdWVzdCkKKyAgICByZXR1cm4gcmVx
dWVzdHMKKworCiBjbGFzcyBIYW5kc2hha2VyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAg
ZGVmIHRlc3RfdmFsaWRhdGVfcHJvdG9jb2woc2VsZik6CiAgICAgICAgIGhhbmRzaGFrZS5fdmFs
aWRhdGVfcHJvdG9jb2woJ3NhbXBsZScpICAjIHNob3VsZCBzdWNjZWVkLgogICAgICAgICBoYW5k
c2hha2UuX3ZhbGlkYXRlX3Byb3RvY29sKCdTYW1wbGUnKSAgIyBzaG91bGQgc3VjY2VlZC4KKyAg
ICAgICAgaGFuZHNoYWtlLl92YWxpZGF0ZV9wcm90b2NvbCgnc2FtcGxlXHgyMHByb3RvY29sJykg
ICMgc2hvdWxkIHN1Y2NlZWQuCisgICAgICAgIGhhbmRzaGFrZS5fdmFsaWRhdGVfcHJvdG9jb2wo
J3NhbXBsZVx4N2Vwcm90b2NvbCcpICAjIHNob3VsZCBzdWNjZWVkLgorICAgICAgICBzZWxmLmFz
c2VydFJhaXNlcyhoYW5kc2hha2UuSGFuZHNoYWtlRXJyb3IsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgIGhhbmRzaGFrZS5fdmFsaWRhdGVfcHJvdG9jb2wsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICcnKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhoYW5kc2hha2UuSGFuZHNoYWtl
RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRzaGFrZS5fdmFsaWRhdGVfcHJv
dG9jb2wsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICdzYW1wbGUgcHJvdG9jb2wnKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAnc2FtcGxlXHgxOXByb3RvY29sJykKKyAgICAgICAgc2Vs
Zi5hc3NlcnRSYWlzZXMoaGFuZHNoYWtlLkhhbmRzaGFrZUVycm9yLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICBoYW5kc2hha2UuX3ZhbGlkYXRlX3Byb3RvY29sLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAnc2FtcGxlXHg3ZnByb3RvY29sJykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlz
ZXMoaGFuZHNoYWtlLkhhbmRzaGFrZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICBo
YW5kc2hha2UuX3ZhbGlkYXRlX3Byb3RvY29sLAogICAgICAgICAgICAgICAgICAgICAgICAgICAj
ICJKYXBhbiIgaW4gSmFwYW5lc2UKQEAgLTMwOCw2ICs0NjMsMjIgQEAgY2xhc3MgSGFuZHNoYWtl
clRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1vY2suTW9ja0Rpc3BhdGNoZXIoKSkKICAgICAgICAgICAgIHNlbGYu
YXNzZXJ0UmFpc2VzKGhhbmRzaGFrZS5IYW5kc2hha2VFcnJvciwgaGFuZHNoYWtlci5kb19oYW5k
c2hha2UpCiAKKyAgICBkZWYgdGVzdF9zdHJpY3RseV9nb29kX3JlcXVlc3RzKHNlbGYpOgorICAg
ICAgICBmb3IgcmVxdWVzdCBpbiBfY3JlYXRlX3JlcXVlc3RzX3dpdGhfbGluZXMoX1NUUklDVExZ
X0dPT0RfUkVRVUVTVFMpOgorICAgICAgICAgICAgc3RyaWN0X2hhbmRzaGFrZXIgPSBoYW5kc2hh
a2UuSGFuZHNoYWtlcihyZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtb2NrLk1vY2tEaXNwYXRjaGVyKCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRydWUpCisgICAgICAgICAg
ICBzdHJpY3RfaGFuZHNoYWtlci5kb19oYW5kc2hha2UoKQorCisgICAgZGVmIHRlc3Rfbm90X3N0
cmljdGx5X2dvb2RfcmVxdWVzdHMoc2VsZik6CisgICAgICAgIGZvciByZXF1ZXN0IGluIF9jcmVh
dGVfcmVxdWVzdHNfd2l0aF9saW5lcyhfTk9UX1NUUklDVExZX0dPT0RfUkVRVUVTVFMpOgorICAg
ICAgICAgICAgc3RyaWN0X2hhbmRzaGFrZXIgPSBoYW5kc2hha2UuSGFuZHNoYWtlcihyZXF1ZXN0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
b2NrLk1vY2tEaXNwYXRjaGVyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFRydWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyho
YW5kc2hha2UuSGFuZHNoYWtlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dHJpY3RfaGFuZHNoYWtlci5kb19oYW5kc2hha2UpCisKKwogCiBpZiBfX25hbWVfXyA9PSAnX19t
YWluX18nOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvcHl3
ZWJzb2NrZXQvdGVzdC90ZXN0X21lbW9yaXppbmdmaWxlLnB5IGIvV2ViS2l0VG9vbHMvcHl3ZWJz
b2NrZXQvdGVzdC90ZXN0X21lbW9yaXppbmdmaWxlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjJkZTc3YmEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9weXdl
YnNvY2tldC90ZXN0L3Rlc3RfbWVtb3JpemluZ2ZpbGUucHkKQEAgLTAsMCArMSw3MiBAQAorIyEv
dXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAyMDA5LCBHb29nbGUgSW5jLgorIyBB
bGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBt
ZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisj
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCisiIiJUZXN0cyBmb3Ig
bWVtb3JpemluZ2ZpbGUgbW9kdWxlLiIiIgorCisKK2ltcG9ydCBTdHJpbmdJTworaW1wb3J0IHVu
aXR0ZXN0CisKK2ltcG9ydCBjb25maWcgICMgVGhpcyBtdXN0IGJlIGltcG9ydGVkIGJlZm9yZSBt
b2RfcHl3ZWJzb2NrZXQuCitmcm9tIG1vZF9weXdlYnNvY2tldCBpbXBvcnQgbWVtb3JpemluZ2Zp
bGUKKworCitjbGFzcyBVdGlsVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIGNoZWNr
KHNlbGYsIG1lbW9yaXppbmdfZmlsZSwgbnVtX3JlYWQsIGV4cGVjdGVkX2xpc3QpOgorICAgICAg
ICBmb3IgdW51c2VkIGluIHJhbmdlKG51bV9yZWFkKToKKyAgICAgICAgICAgIG1lbW9yaXppbmdf
ZmlsZS5yZWFkbGluZSgpCisgICAgICAgIGFjdHVhbF9saXN0ID0gbWVtb3JpemluZ19maWxlLmdl
dF9tZW1vcml6ZWRfbGluZXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihleHBlY3Rl
ZF9saXN0KSwgbGVuKGFjdHVhbF9saXN0KSkKKyAgICAgICAgZm9yIGV4cGVjdGVkLCBhY3R1YWwg
aW4gemlwKGV4cGVjdGVkX2xpc3QsIGFjdHVhbF9saXN0KToKKyAgICAgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoZXhwZWN0ZWQsIGFjdHVhbCkKKworICAgIGRlZiB0ZXN0X2dldF9tZW1vcml6ZWRf
bGluZXMoc2VsZik6CisgICAgICAgIG1lbW9yaXppbmdfZmlsZSA9IG1lbW9yaXppbmdmaWxlLk1l
bW9yaXppbmdGaWxlKFN0cmluZ0lPLlN0cmluZ0lPKAorICAgICAgICAgICAgICAgICdIZWxsb1xu
V29ybGRcbldlbGNvbWUnKSkKKyAgICAgICAgc2VsZi5jaGVjayhtZW1vcml6aW5nX2ZpbGUsIDMs
IFsnSGVsbG9cbicsICdXb3JsZFxuJywgJ1dlbGNvbWUnXSkKKworICAgIGRlZiB0ZXN0X2dldF9t
ZW1vcml6ZWRfbGluZXNfbGltaXRfbWVtb3JpemVkX2xpbmVzKHNlbGYpOgorICAgICAgICBtZW1v
cml6aW5nX2ZpbGUgPSBtZW1vcml6aW5nZmlsZS5NZW1vcml6aW5nRmlsZShTdHJpbmdJTy5TdHJp
bmdJTygKKyAgICAgICAgICAgICAgICAnSGVsbG9cbldvcmxkXG5XZWxjb21lJyksIDIpCisgICAg
ICAgIHNlbGYuY2hlY2sobWVtb3JpemluZ19maWxlLCAzLCBbJ0hlbGxvXG4nLCAnV29ybGRcbidd
KQorCisgICAgZGVmIHRlc3RfZ2V0X21lbW9yaXplZF9saW5lc19lbXB0eV9maWxlKHNlbGYpOgor
ICAgICAgICBtZW1vcml6aW5nX2ZpbGUgPSBtZW1vcml6aW5nZmlsZS5NZW1vcml6aW5nRmlsZShT
dHJpbmdJTy5TdHJpbmdJTygKKyAgICAgICAgICAgICAgICAnJykpCisgICAgICAgIHNlbGYuY2hl
Y2sobWVtb3JpemluZ19maWxlLCAxMCwgW10pCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9f
JzoKKyAgICB1bml0dGVzdC5tYWluKCkKKworCisjIHZpOnN0cz00IHN3PTQgZXQK
</data>
<flag name="review"
          id="26883"
          type_id="1"
          status="+"
          setter="ap"
    />
    <flag name="commit-queue"
          id="26884"
          type_id="3"
          status="-"
          setter="ap"
    />
          </attachment>
      

    </bug>

</bugzilla>