<?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>31617</bug_id>
          
          <creation_ts>2009-11-18 00:34:42 -0800</creation_ts>
          <short_desc>WebSocket handshake doesn&apos;t check query component of URL</short_desc>
          <delta_ts>2009-12-02 00:29:46 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ian &apos;Hixie&apos; Hickson">ian</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>ukai</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>164482</commentid>
    <comment_count>0</comment_count>
    <who name="Ian &apos;Hixie&apos; Hickson">ian</who>
    <bug_when>2009-11-18 00:34:42 -0800</bug_when>
    <thetext>STEPS TO REPRODUCE
1. Try to connect to a server that returns the WebSocket-Location &quot;ws://example.com/test&quot;, but use &quot;ws://example.com/test?&quot; as the URL to connect to.

ACTUAL RESULTS
It connects.

EXPECTED RESULTS
If the server&apos;s returned WebSocket-Location isn&apos;t the same as the actual location used, including the query component, then the client should refuse to connect.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>164498</commentid>
    <comment_count>1</comment_count>
    <who name="Ian &apos;Hixie&apos; Hickson">ian</who>
    <bug_when>2009-11-18 01:43:34 -0800</bug_when>
    <thetext>In fact it looks like if the server does return the query component, the connection fails because the client does do a full comparison, but ignores the returned query component when doing so.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>164516</commentid>
    <comment_count>2</comment_count>
      <attachid>43421</attachid>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2009-11-18 02:35:13 -0800</bug_when>
    <thetext>Created attachment 43421
WebSocket handshake check query component of URL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>164517</commentid>
    <comment_count>3</comment_count>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2009-11-18 02:38:31 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; In fact it looks like if the server does return the query component, the
&gt; connection fails because the client does do a full comparison, but ignores the
&gt; returned query component when doing so.

One question.  if use &quot;ws://example.com/test?&quot;, we must send &quot;GET /test? HTTP/1.1&quot;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>164521</commentid>
    <comment_count>4</comment_count>
    <who name="Ian &apos;Hixie&apos; Hickson">ian</who>
    <bug_when>2009-11-18 03:29:09 -0800</bug_when>
    <thetext>Yes, same as with regular HTTP. See steps 9 to 11 of the &quot;parse a Web Socket URL&apos;s components&quot; algorithm in the spec, and then step 5 of the &quot;establish a Web Socket connection&quot; algorithm.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>164522</commentid>
    <comment_count>5</comment_count>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2009-11-18 03:42:53 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; Yes, same as with regular HTTP. See steps 9 to 11 of the &quot;parse a Web Socket
&gt; URL&apos;s components&quot; algorithm in the spec, and then step 5 of the &quot;establish a
&gt; Web Socket connection&quot; algorithm.

Hmm, then we should fix WebSocketHandshake::clientHandshakeMessage().
For now, it sends &quot;GET /test HTTP/1.1&quot; for &quot;ws://example.com/test?&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>164524</commentid>
    <comment_count>6</comment_count>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2009-11-18 04:05:29 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; Yes, same as with regular HTTP. See steps 9 to 11 of the &quot;parse a Web Socket
&gt; &gt; URL&apos;s components&quot; algorithm in the spec, and then step 5 of the &quot;establish a
&gt; &gt; Web Socket connection&quot; algorithm.
&gt; 
&gt; Hmm, then we should fix WebSocketHandshake::clientHandshakeMessage().
&gt; For now, it sends &quot;GET /test HTTP/1.1&quot; for &quot;ws://example.com/test?&quot;.

Should we add new method in KURL to construct request resource?
(or hasQuery()?)

I also found that pywebsocket couldn&apos;t handle /test? properly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>164528</commentid>
    <comment_count>7</comment_count>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2009-11-18 04:18:45 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; In fact it looks like if the server does return the query component, the
&gt; connection fails because the client does do a full comparison, but ignores the
&gt; returned query component when doing so.

Is it expected that the server doesn&apos;t return the query component, or it depends on server implementation?

If the server should not return the query component, is it the same that opening with query components should always fail?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165123</commentid>
    <comment_count>8</comment_count>
    <who name="Ian &apos;Hixie&apos; Hickson">ian</who>
    <bug_when>2009-11-19 15:31:13 -0800</bug_when>
    <thetext>If the connection is to be established, the server should send back the same URL as was requested (constructing it from the request, taking the scheme from whether the request was encrypted, the domain from the Host: line, and the rest from the data after the GET).

Typically, I&apos;d expect most servers to have the returned value hard-coded, so that they don&apos;t have to parse the handshake and they can rely on the client checking that the URL was correct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165447</commentid>
    <comment_count>9</comment_count>
      <attachid>43421</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-11-20 14:17:02 -0800</bug_when>
    <thetext>Comment on attachment 43421
WebSocket handshake check query component of URL.

+    KURL location_url = m_url.copy();

As explained in a comment in KURL.h, copy() shouldn&apos;t be used here.

+    KURL location_url = m_url.copy();

In WebKit style, this would be named locationURL. I don&apos;t understand why the function and variable use the word &quot;location&quot; - where did it come from?

+    location_url.setHost(location_url.host().lower());

Hmm, I think that KURL should do this internally. Probably worth a FIXME for now.

We need more tests:
- what happens if the server echoes the string with query (my understanding is that handshake should succeed):
- non-empty query;
- what happens if someone (client or server) sends an URL with fragment;
- what happens if the URL includes credentials (e.g. ws://user:pass@server/path).

This patch changes behavior of clientLocation() in the latter case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>166680</commentid>
    <comment_count>10</comment_count>
      <attachid>43909</attachid>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2009-11-26 01:19:29 -0800</bug_when>
    <thetext>Created attachment 43909
WebSocket handshake check query component of URL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>166681</commentid>
    <comment_count>11</comment_count>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2009-11-26 01:21:29 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; Created an attachment (id=43909) [details]
&gt; WebSocket handshake check query component of URL.

Note that some tests would fail on Mac by missing &quot;WebSocket is closed&quot;.
I think it should be a bug in platform code. cf. https://bugs.webkit.org/show_bug.cgi?id=31659 ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>166779</commentid>
    <comment_count>12</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-11-26 12:59:56 -0800</bug_when>
    <thetext>&gt; Note that some tests would fail on Mac by missing &quot;WebSocket is closed&quot;.
&gt; I think it should be a bug in platform code.

If we&apos;re going to land this change before it&apos;s fixed, then failing tests should be added to platform/mac/Skipped.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>166785</commentid>
    <comment_count>13</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-11-26 13:35:56 -0800</bug_when>
    <thetext>Thanks for the many new tests!

+        (WebCore::KURL::resourceName):

I don&apos;t think it&apos;s appropriate to add a method with this name to KURL. The only &quot;resource name&quot; I know of is URN, which is is confusing, as it&apos;s a related notion to URL, but not to what this method does.

I think that to come up with a good name for this function, we should look at where it is used, and name it accordingly to what&apos;s needed there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>166800</commentid>
    <comment_count>14</comment_count>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2009-11-26 17:22:23 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; Thanks for the many new tests!
&gt; 
&gt; +        (WebCore::KURL::resourceName):
&gt; 
&gt; I don&apos;t think it&apos;s appropriate to add a method with this name to KURL. The only
&gt; &quot;resource name&quot; I know of is URN, which is is confusing, as it&apos;s a related
&gt; notion to URL, but not to what this method does.
&gt; 
&gt; I think that to come up with a good name for this function, we should look at
&gt; where it is used, and name it accordingly to what&apos;s needed there.

I used &quot;resource name&quot; because it is used in the websocket protocol spec draft, and it is used for resource name in websocket code.
If &quot;resource name&quot; is not appropriate, how about pathForRequest, which is used in google url?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>166801</commentid>
    <comment_count>15</comment_count>
      <attachid>43933</attachid>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2009-11-26 17:46:30 -0800</bug_when>
    <thetext>Created attachment 43933
WebSocket handshake check query component of URL</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>167102</commentid>
    <comment_count>16</comment_count>
      <attachid>43933</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-11-29 13:49:22 -0800</bug_when>
    <thetext>Comment on attachment 43933
WebSocket handshake check query component of URL

There are tabs in this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>167148</commentid>
    <comment_count>17</comment_count>
      <attachid>44000</attachid>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2009-11-29 17:59:44 -0800</bug_when>
    <thetext>Created attachment 44000
WebSocket handshake check query component of URL</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>167150</commentid>
    <comment_count>18</comment_count>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2009-11-29 18:00:30 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; (From update of attachment 43933 [details])
&gt; There are tabs in this patch.

Sorry. Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>167379</commentid>
    <comment_count>19</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-11-30 12:48:13 -0800</bug_when>
    <thetext>Attachment 44000 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
Done processing WebCore/platform/KURLGooglePrivate.h
WebCore/platform/KURLGoogle.cpp:307:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Done processing WebCore/platform/KURLGoogle.cpp
Done processing WebCore/platform/KURL.cpp
Done processing WebCore/platform/KURL.h
Done processing WebCore/websockets/WebSocketHandshake.cpp
Total errors found: 1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>167495</commentid>
    <comment_count>20</comment_count>
      <attachid>44052</attachid>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2009-11-30 21:21:52 -0800</bug_when>
    <thetext>Created attachment 44052
WebSocket handshake check query component of URL</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>167496</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-11-30 21:27:14 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 44052 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>167657</commentid>
    <comment_count>22</comment_count>
      <attachid>44052</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-12-01 09:37:18 -0800</bug_when>
    <thetext>Comment on attachment 44052
WebSocket handshake check query component of URL

+# Missing &quot;WebSocket is closed&quot;

I don&apos;t think this is still needed - bug 31659	 is fixed now.

+var url = &quot;ws://user:pass@localhost:8880/websocket/tests/echo-location&quot;;

Are you testing cross-origin WebSocket here? HTTP tests run from 127.0.0.1, not from localhost, so accessing localhost is cross origin. Are WebSocket tests different?

+String KURL::resourceName() const

Now that I see where &quot;resource name&quot; is defined, I&apos;m positive that this accessor shouldn&apos;t be added to KURL. Resource name is solely a Web Sockets concept, so it should be confined to Web Sockets code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>167869</commentid>
    <comment_count>23</comment_count>
      <attachid>44127</attachid>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2009-12-01 21:25:49 -0800</bug_when>
    <thetext>Created attachment 44127
WebSocket handshake check query component of URL</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>167870</commentid>
    <comment_count>24</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-01 21:27:16 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 44127 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>167893</commentid>
    <comment_count>25</comment_count>
      <attachid>44127</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-12-01 23:41:27 -0800</bug_when>
    <thetext>Comment on attachment 44127
WebSocket handshake check query component of URL

r=me, thanks for adding all these tests!

It worries me that accidentally using localhost instead of 127.0.0.1 didn&apos;t dramatically affect test behavior. It doesn&apos;t necessarily indicate a problem, but we need to add many new tests for cross-origin WebSocket usage to check that it functions correctly.

Per-function comments in WebCore/ChangeLog would be appreciated. The change to KURL::query() is particularly interesting, as someone working on bug 21015 will need to know the rationale of the change you&apos;re making here, and won&apos;t find it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>167900</commentid>
    <comment_count>26</comment_count>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2009-12-02 00:20:22 -0800</bug_when>
    <thetext>Committed r51589: &lt;http://trac.webkit.org/changeset/51589&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>167904</commentid>
    <comment_count>27</comment_count>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2009-12-02 00:29:46 -0800</bug_when>
    <thetext>(In reply to comment #25)
&gt; (From update of attachment 44127 [details])
&gt; r=me, thanks for adding all these tests!

Thanks for review!

&gt; 
&gt; It worries me that accidentally using localhost instead of 127.0.0.1 didn&apos;t
&gt; dramatically affect test behavior. It doesn&apos;t necessarily indicate a problem,
&gt; but we need to add many new tests for cross-origin WebSocket usage to check
&gt; that it functions correctly.

I&apos;ve file a bug https://bugs.webkit.org/show_bug.cgi?id=32055.
I&apos;ll work on this.
 
&gt; Per-function comments in WebCore/ChangeLog would be appreciated. The change to
&gt; KURL::query() is particularly interesting, as someone working on bug 21015 will
&gt; need to know the rationale of the change you&apos;re making here, and won&apos;t find it.

Sure. Added comments.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>43421</attachid>
            <date>2009-11-18 02:35:13 -0800</date>
            <delta_ts>2009-11-26 01:19:22 -0800</delta_ts>
            <desc>WebSocket handshake check query component of URL.</desc>
            <filename>bug-31617-20091118193511.patch</filename>
            <type>text/plain</type>
            <size>4938</size>
            <attacher name="Fumitoshi Ukai">ukai</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAyYTExNjBjLi44YzQ0YmIzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMDktMTEt
MTggIEZ1bWl0b3NoaSBVa2FpICA8dWthaUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViU29ja2V0IGhhbmRzaGFrZSBjaGVj
ayBxdWVyeSBjb21wb25lbnQgb2YgVVJMLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MzE2MTcKKworICAgICAgICAqIHdlYnNvY2tldC90ZXN0cy9sb2Nh
dGlvbi13aXRoLXF1ZXJ5LWNvbXBvbmVudHMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiB3ZWJzb2NrZXQvdGVzdHMvbG9jYXRpb24td2l0aC1xdWVyeS1jb21wb25lbnRzLmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIHdlYnNvY2tldC90ZXN0cy9zY3JpcHQtdGVzdHMvbG9jYXRpb24td2l0
aC1xdWVyeS1jb21wb25lbnRzLmpzOiBBZGRlZC4KKwogMjAwOS0xMS0xNyAgSGF5YXRvIEl0byAg
PGhheWF0b0Bnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL2xvY2F0aW9uLXdpdGgtcXVl
cnktY29tcG9uZW50cy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMv
bG9jYXRpb24td2l0aC1xdWVyeS1jb21wb25lbnRzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4yY2FjMDkwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvd2Vic29ja2V0L3Rlc3RzL2xvY2F0aW9uLXdpdGgtcXVlcnktY29tcG9uZW50cy1leHBl
Y3RlZC50eHQKQEAgLTAsMCArMSwxMCBAQAorTWFrZSBzdXJlIGhhbmRzaGFrZSB3aXRoIFVSTCB3
aXRoIHF1ZXJ5IGNvbXBvbmVudHMgZmFpbHMuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBh
IHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4K
KworV2ViU29ja2V0IGlzIGNsb3NlZAorUEFTUyBoYW5kc2hha2Vfc3VjY2VzcyBpcyBmYWxzZQor
UEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy9sb2NhdGlvbi13aXRoLXF1ZXJ5LWNv
bXBvbmVudHMuaHRtbCBiL0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy9sb2NhdGlvbi13aXRo
LXF1ZXJ5LWNvbXBvbmVudHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5iNmRiMWE3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3Rz
L2xvY2F0aW9uLXdpdGgtcXVlcnktY29tcG9uZW50cy5odG1sCkBAIC0wLDAgKzEsMTMgQEAKKzwh
RE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhl
YWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2Vz
L2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNl
cy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9y
ZXNvdXJjZXMvanMtdGVzdC1wb3N0LWZ1bmN0aW9uLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5PgorPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2PgorPGRpdiBpZD0iY29uc29sZSI+PC9k
aXY+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2xvY2F0aW9uLXdpdGgtcXVlcnktY29tcG9u
ZW50cy5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy93ZWJzb2NrZXQvdGVzdHMvc2NyaXB0LXRlc3RzL2xvY2F0aW9uLXdpdGgtcXVlcnktY29t
cG9uZW50cy5qcyBiL0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy9zY3JpcHQtdGVzdHMvbG9j
YXRpb24td2l0aC1xdWVyeS1jb21wb25lbnRzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjg1MjU0YzcKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJzb2Nr
ZXQvdGVzdHMvc2NyaXB0LXRlc3RzL2xvY2F0aW9uLXdpdGgtcXVlcnktY29tcG9uZW50cy5qcwpA
QCAtMCwwICsxLDI5IEBACitkZXNjcmlwdGlvbigiTWFrZSBzdXJlIGhhbmRzaGFrZSB3aXRoIFVS
TCB3aXRoIHF1ZXJ5IGNvbXBvbmVudHMgZmFpbHMuIik7CisKK2lmICh3aW5kb3cubGF5b3V0VGVz
dENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOwor
Cit2YXIgaGFuZHNoYWtlX3N1Y2Nlc3MgPSBmYWxzZTsKKworZnVuY3Rpb24gZW5kVGVzdCgpCit7
CisgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJRCk7CisgICAgc2hvdWxkQmVGYWxzZSgiaGFuZHNo
YWtlX3N1Y2Nlc3MiKTsKKyAgICBpc1N1Y2Nlc3NmdWxseVBhcnNlZCgpOworICAgIGlmICh3aW5k
b3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5v
dGlmeURvbmUoKTsKK30KKwordmFyIHdzID0gbmV3IFdlYlNvY2tldCgid3M6Ly9sb2NhbGhvc3Q6
ODg4MC93ZWJzb2NrZXQvdGVzdHMvc2ltcGxlPyIpOword3Mub25vcGVuID0gZnVuY3Rpb24gKCkg
eworICAgIGRlYnVnKCJXZWJTb2NrZXQgaXMgb3BlbiIpOworICAgIGhhbmRzaGFrZV9zdWNjZXNz
ID0gdHJ1ZTsKKyAgICB3cy5jbG9zZSgpOworfTsKK3dzLm9uY2xvc2UgPSBmdW5jdGlvbiAoKSB7
CisgICAgZGVidWcoIldlYlNvY2tldCBpcyBjbG9zZWQiKTsKKyAgICBlbmRUZXN0KCk7Cit9Owor
dmFyIHRpbWVvdXRJRCA9IHNldFRpbWVvdXQoImVuZFRlc3QoKSIsIDIwMDApOworCit2YXIgc3Vj
Y2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIv
V2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzFmNWVjYi4uMjBiZWVkMSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAor
MjAwOS0xMS0xOCAgRnVtaXRvc2hpIFVrYWkgIDx1a2FpQGNocm9taXVtLm9yZz4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJTb2NrZXQgaGFuZHNo
YWtlIGNoZWNrIHF1ZXJ5IGNvbXBvbmVudCBvZiBVUkwuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMTYxNworCisgICAgICAgIENoYW5nZSBVUkwgbm9y
bWFsaXphdGlvbiBmb3IgY2xpZW50IGxvY2F0aW9uIHRvIHByZXNlcnZlCisgICAgICAgIHF1ZXJ5
IG1hcmsuCisKKyAgICAgICAgVGVzdDogd2Vic29ja2V0L3Rlc3RzL2xvY2F0aW9uLXdpdGgtcXVl
cnktY29tcG9uZW50cy5odG1sCisKKyAgICAgICAgKiB3ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRz
aGFrZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRIYW5kc2hha2U6OmNsaWVudExv
Y2F0aW9uKToKKwogMjAwOS0xMS0xNyAgTmljb2xhcyBXZWJlciAgPHRoYWtpc0BjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gRmlzaGVyLgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHAgYi9XZWJDb3JlL3dlYnNvY2tl
dHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcAppbmRleCA2OTFmYTFjLi4zNjBkMjIxIDEwMDY0NAot
LS0gYS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcAorKysgYi9XZWJD
b3JlL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcApAQCAtMTI5LDE4ICsxMjksMTQg
QEAgU3RyaW5nIFdlYlNvY2tldEhhbmRzaGFrZTo6Y2xpZW50T3JpZ2luKCkgY29uc3QKIAogU3Ry
aW5nIFdlYlNvY2tldEhhbmRzaGFrZTo6Y2xpZW50TG9jYXRpb24oKSBjb25zdAogewotICAgIFN0
cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICBidWlsZGVyLmFwcGVuZChtX3NlY3VyZSA/ICJ3c3Mi
IDogIndzIik7Ci0gICAgYnVpbGRlci5hcHBlbmQoIjovLyIpOwotICAgIGJ1aWxkZXIuYXBwZW5k
KG1fdXJsLmhvc3QoKS5sb3dlcigpKTsKLSAgICBpZiAobV91cmwucG9ydCgpKSB7Ci0gICAgICAg
IGlmICgoIW1fc2VjdXJlICYmIG1fdXJsLnBvcnQoKSAhPSA4MCkgfHwgKG1fc2VjdXJlICYmIG1f
dXJsLnBvcnQoKSAhPSA0NDMpKSB7Ci0gICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgiOiIpOwot
ICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoU3RyaW5nOjpudW1iZXIobV91cmwucG9ydCgpKSk7
Ci0gICAgICAgIH0KKyAgICBLVVJMIGxvY2F0aW9uX3VybCA9IG1fdXJsLmNvcHkoKTsKKyAgICBs
b2NhdGlvbl91cmwuc2V0SG9zdChsb2NhdGlvbl91cmwuaG9zdCgpLmxvd2VyKCkpOworICAgIGlm
IChsb2NhdGlvbl91cmwuaGFzUG9ydCgpKSB7CisgICAgICAgIGlmICgoIW1fc2VjdXJlICYmIGxv
Y2F0aW9uX3VybC5wb3J0KCkgPT0gODApIHx8IChtX3NlY3VyZSAmJiBsb2NhdGlvbl91cmwucG9y
dCgpID09IDQ0MykpCisgICAgICAgICAgICBsb2NhdGlvbl91cmwucmVtb3ZlUG9ydCgpOwogICAg
IH0KLSAgICBidWlsZGVyLmFwcGVuZChtX3VybC5wYXRoKCkpOwotICAgIHJldHVybiBidWlsZGVy
LnRvU3RyaW5nKCk7CisgICAgbG9jYXRpb25fdXJsLnJlbW92ZUZyYWdtZW50SWRlbnRpZmllcigp
OworICAgIHJldHVybiBsb2NhdGlvbl91cmw7CiB9CiAKIENTdHJpbmcgV2ViU29ja2V0SGFuZHNo
YWtlOjpjbGllbnRIYW5kc2hha2VNZXNzYWdlKCkgY29uc3QK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>43909</attachid>
            <date>2009-11-26 01:19:29 -0800</date>
            <delta_ts>2009-11-26 17:46:23 -0800</delta_ts>
            <desc>WebSocket handshake check query component of URL.</desc>
            <filename>bug-31617-20091126181927.patch</filename>
            <type>text/plain</type>
            <size>23827</size>
            <attacher name="Fumitoshi Ukai">ukai</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAzZmRhZmY4Li5mMTVjNzdhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjggQEAKKzIwMDktMTEt
MjYgIEZ1bWl0b3NoaSBVa2FpICA8dWthaUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViU29ja2V0IGhhbmRzaGFrZSBjaGVj
ayBxdWVyeSBjb21wb25lbnQgb2YgVVJMLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MzE2MTcKKworICAgICAgICAqIHdlYnNvY2tldC90ZXN0cy9lY2hv
LWxvY2F0aW9uX3dzaC5weTogQWRkZWQuCisgICAgICAgICogd2Vic29ja2V0L3Rlc3RzL25vLXF1
ZXJ5X3dzaC5weTogQWRkZWQuCisgICAgICAgICogd2Vic29ja2V0L3Rlc3RzL3NjcmlwdC10ZXN0
cy91cmwtd2l0aC1jcmVkZW50aWFsLmpzOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJzb2NrZXQvdGVz
dHMvc2NyaXB0LXRlc3RzL3VybC13aXRoLWVtcHR5LXF1ZXJ5LmpzOiBBZGRlZC4KKyAgICAgICAg
KiB3ZWJzb2NrZXQvdGVzdHMvc2NyaXB0LXRlc3RzL3VybC13aXRoLWZyYWdtZW50LmpzOiBBZGRl
ZC4KKyAgICAgICAgKiB3ZWJzb2NrZXQvdGVzdHMvc2NyaXB0LXRlc3RzL3VybC13aXRoLXF1ZXJ5
LWZvci1uby1xdWVyeS5qczogQWRkZWQuCisgICAgICAgICogd2Vic29ja2V0L3Rlc3RzL3Njcmlw
dC10ZXN0cy91cmwtd2l0aC1xdWVyeS5qczogQWRkZWQuCisgICAgICAgICogd2Vic29ja2V0L3Rl
c3RzL3VybC13aXRoLWNyZWRlbnRpYWwtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiB3
ZWJzb2NrZXQvdGVzdHMvdXJsLXdpdGgtY3JlZGVudGlhbC5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiB3ZWJzb2NrZXQvdGVzdHMvdXJsLXdpdGgtZW1wdHktcXVlcnktZXhwZWN0ZWQudHh0OiBBZGRl
ZC4KKyAgICAgICAgKiB3ZWJzb2NrZXQvdGVzdHMvdXJsLXdpdGgtZW1wdHktcXVlcnkuaHRtbDog
QWRkZWQuCisgICAgICAgICogd2Vic29ja2V0L3Rlc3RzL3VybC13aXRoLWZyYWdtZW50LWV4cGVj
dGVkLnR4dDogQWRkZWQuCisgICAgICAgICogd2Vic29ja2V0L3Rlc3RzL3VybC13aXRoLWZyYWdt
ZW50Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYnNvY2tldC90ZXN0cy91cmwtd2l0aC1xdWVy
eS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHdlYnNvY2tldC90ZXN0cy91cmwtd2l0
aC1xdWVyeS1mb3Itbm8tcXVlcnktZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiB3ZWJz
b2NrZXQvdGVzdHMvdXJsLXdpdGgtcXVlcnktZm9yLW5vLXF1ZXJ5Lmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIHdlYnNvY2tldC90ZXN0cy91cmwtd2l0aC1xdWVyeS5odG1sOiBBZGRlZC4KKwogMjAw
OS0xMS0yNSAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQub3JnPgogCiAgICAgICAg
IFtRdF0gQXVkaW8gcmVsYXRlZCBsYXlvdXQgdGVzdHMgYXJlIGZhaWxpbmcgb24gdGhlIGJ1aWxk
Ym90CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvZWNoby1sb2NhdGlv
bl93c2gucHkgYi9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvZWNoby1sb2NhdGlvbl93c2gu
cHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM5MDU3MAotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy9lY2hvLWxvY2F0aW9uX3dzaC5w
eQpAQCAtMCwwICsxLDM5IEBACisjIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6
CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCitmcm9tIG1vZF9weXdlYnNv
Y2tldCBpbXBvcnQgbXNndXRpbAorCisKK2RlZiB3ZWJfc29ja2V0X2RvX2V4dHJhX2hhbmRzaGFr
ZShyZXF1ZXN0KToKKyAgICBwYXNzCisKKworZGVmIHdlYl9zb2NrZXRfdHJhbnNmZXJfZGF0YShy
ZXF1ZXN0KToKKyAgICBwcmludCByZXF1ZXN0LndzX2xvY2F0aW9uCisgICAgbXNndXRpbC5zZW5k
X21lc3NhZ2UocmVxdWVzdCwgcmVxdWVzdC53c19sb2NhdGlvbikKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3dlYnNvY2tldC90ZXN0cy9uby1xdWVyeV93c2gucHkgYi9MYXlvdXRUZXN0cy93ZWJz
b2NrZXQvdGVzdHMvbm8tcXVlcnlfd3NoLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjJiNzk2MTUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJzb2NrZXQv
dGVzdHMvbm8tcXVlcnlfd3NoLnB5CkBAIC0wLDAgKzEsMzggQEAKKyMgQ29weXJpZ2h0IChDKSAy
MDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisj
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
CisKK2Zyb20gbW9kX3B5d2Vic29ja2V0IGltcG9ydCBtc2d1dGlsCisKKworZGVmIHdlYl9zb2Nr
ZXRfZG9fZXh0cmFfaGFuZHNoYWtlKHJlcXVlc3QpOgorICAgIHJlcXVlc3Qud3NfbG9jYXRpb24g
PSByZXF1ZXN0LndzX3Jlc291cmNlLnNwbGl0KCc/JywgMSlbMF0KKworCitkZWYgd2ViX3NvY2tl
dF90cmFuc2Zlcl9kYXRhKHJlcXVlc3QpOgorICAgIG1zZ3V0aWwuc2VuZF9tZXNzYWdlKHJlcXVl
c3QsIHJlcXVlc3Qud3NfbG9jYXRpb24pCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJzb2Nr
ZXQvdGVzdHMvc2NyaXB0LXRlc3RzL3VybC13aXRoLWNyZWRlbnRpYWwuanMgYi9MYXlvdXRUZXN0
cy93ZWJzb2NrZXQvdGVzdHMvc2NyaXB0LXRlc3RzL3VybC13aXRoLWNyZWRlbnRpYWwuanMKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjkzNTc5NgotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy9zY3JpcHQtdGVzdHMvdXJsLXdpdGgtY3Jl
ZGVudGlhbC5qcwpAQCAtMCwwICsxLDM3IEBACitkZXNjcmlwdGlvbigiTWFrZSBzdXJlIGhhbmRz
aGFrZSB3aXRoIFVSTCB3aXRoIGNyZWRlbnRhaWwgaW5mbyBzdWNjZXNzLiIpOworCitpZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRV
bnRpbERvbmUoKTsKKwordmFyIHVybCA9ICJ3czovL3VzZXI6cGFzc0Bsb2NhbGhvc3Q6ODg4MC93
ZWJzb2NrZXQvdGVzdHMvZWNoby1sb2NhdGlvbiI7Cit2YXIgaGFuZHNoYWtlX3N1Y2Nlc3MgPSBm
YWxzZTsKK3ZhciB3c19sb2NhdGlvbjsKKworZnVuY3Rpb24gZW5kVGVzdCgpCit7CisgICAgY2xl
YXJUaW1lb3V0KHRpbWVvdXRJRCk7CisgICAgc2hvdWxkQmVUcnVlKCJoYW5kc2hha2Vfc3VjY2Vz
cyIpOworICAgIHNob3VsZEJlKCJ3c19sb2NhdGlvbiIsICcid3M6Ly9sb2NhbGhvc3Q6ODg4MC93
ZWJzb2NrZXQvdGVzdHMvZWNoby1sb2NhdGlvbiInKTsKKyAgICBpc1N1Y2Nlc3NmdWxseVBhcnNl
ZCgpOworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91
dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKworZGVidWcoInVybD0iICsgdXJsKTsK
K3ZhciB3cyA9IG5ldyBXZWJTb2NrZXQodXJsKTsKK3dzLm9ub3BlbiA9IGZ1bmN0aW9uICgpIHsK
KyAgICBkZWJ1ZygiV2ViU29ja2V0IGlzIG9wZW4iKTsKKyAgICBoYW5kc2hha2Vfc3VjY2VzcyA9
IHRydWU7Cit9Oword3Mub25tZXNzYWdlID0gZnVuY3Rpb24gKGV2dCkgeworICAgIHdzX2xvY2F0
aW9uID0gZXZ0LmRhdGE7CisgICAgZGVidWcoInJlY2VpdmVkOiIgKyB3c19sb2NhdGlvbik7Cisg
ICAgd3MuY2xvc2UoKTsKK307Cit3cy5vbmNsb3NlID0gZnVuY3Rpb24gKCkgeworICAgIGRlYnVn
KCJXZWJTb2NrZXQgaXMgY2xvc2VkIik7CisgICAgZW5kVGVzdCgpOworfTsKK3ZhciB0aW1lb3V0
SUQgPSBzZXRUaW1lb3V0KCJlbmRUZXN0KCkiLCAyMDAwKTsKKwordmFyIHN1Y2Nlc3NmdWxseVBh
cnNlZCA9IHRydWU7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvc2Ny
aXB0LXRlc3RzL3VybC13aXRoLWVtcHR5LXF1ZXJ5LmpzIGIvTGF5b3V0VGVzdHMvd2Vic29ja2V0
L3Rlc3RzL3NjcmlwdC10ZXN0cy91cmwtd2l0aC1lbXB0eS1xdWVyeS5qcwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjRhZTE5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3NjcmlwdC10ZXN0cy91cmwtd2l0aC1lbXB0eS1xdWVyeS5q
cwpAQCAtMCwwICsxLDM3IEBACitkZXNjcmlwdGlvbigiTWFrZSBzdXJlIGhhbmRzaGFrZSB3aXRo
IFVSTCB3aXRoIGVtcHR5IHF1ZXJ5IGNvbXBvbmVudHMgc3VjY2Vzcy4iKTsKKworaWYgKHdpbmRv
dy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50
aWxEb25lKCk7CisKK3ZhciB1cmwgPSAid3M6Ly9sb2NhbGhvc3Q6ODg4MC93ZWJzb2NrZXQvdGVz
dHMvZWNoby1sb2NhdGlvbj8iOwordmFyIGhhbmRzaGFrZV9zdWNjZXNzID0gZmFsc2U7Cit2YXIg
d3NfbG9jYXRpb247CisKK2Z1bmN0aW9uIGVuZFRlc3QoKQoreworICAgIGNsZWFyVGltZW91dCh0
aW1lb3V0SUQpOworICAgIHNob3VsZEJlVHJ1ZSgiaGFuZHNoYWtlX3N1Y2Nlc3MiKTsKKyAgICBz
aG91bGRCZSgid3NfbG9jYXRpb24iLCAidXJsIik7CisgICAgaXNTdWNjZXNzZnVsbHlQYXJzZWQo
KTsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisKK2RlYnVnKCJ1cmw9IiArIHVybCk7Cit2
YXIgd3MgPSBuZXcgV2ViU29ja2V0KHVybCk7Cit3cy5vbm9wZW4gPSBmdW5jdGlvbiAoKSB7Cisg
ICAgZGVidWcoIldlYlNvY2tldCBpcyBvcGVuIik7CisgICAgaGFuZHNoYWtlX3N1Y2Nlc3MgPSB0
cnVlOworfTsKK3dzLm9ubWVzc2FnZSA9IGZ1bmN0aW9uIChldnQpIHsKKyAgICB3c19sb2NhdGlv
biA9IGV2dC5kYXRhOworICAgIGRlYnVnKCJyZWNlaXZlZDoiICsgd3NfbG9jYXRpb24pOworICAg
IHdzLmNsb3NlKCk7Cit9OyAKK3dzLm9uY2xvc2UgPSBmdW5jdGlvbiAoKSB7CisgICAgZGVidWco
IldlYlNvY2tldCBpcyBjbG9zZWQiKTsKKyAgICBlbmRUZXN0KCk7Cit9OwordmFyIHRpbWVvdXRJ
RCA9IHNldFRpbWVvdXQoImVuZFRlc3QoKSIsIDIwMDApOworCit2YXIgc3VjY2Vzc2Z1bGx5UGFy
c2VkID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy9zY3Jp
cHQtdGVzdHMvdXJsLXdpdGgtZnJhZ21lbnQuanMgYi9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVz
dHMvc2NyaXB0LXRlc3RzL3VybC13aXRoLWZyYWdtZW50LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjA5MDNkM2IKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93
ZWJzb2NrZXQvdGVzdHMvc2NyaXB0LXRlc3RzL3VybC13aXRoLWZyYWdtZW50LmpzCkBAIC0wLDAg
KzEsMzcgQEAKK2Rlc2NyaXB0aW9uKCJNYWtlIHN1cmUgaGFuZHNoYWtlIHdpdGggVVJMIHdpdGgg
ZnJhZ21lbnQgY29tcG9uZW50cyBzdWNjZXNzLiIpOworCitpZiAod2luZG93LmxheW91dFRlc3RD
b250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKwor
dmFyIHVybCA9ICJ3czovL2xvY2FsaG9zdDo4ODgwL3dlYnNvY2tldC90ZXN0cy9lY2hvLWxvY2F0
aW9uI2ZyYWdtZW50IjsKK3ZhciBoYW5kc2hha2Vfc3VjY2VzcyA9IGZhbHNlOwordmFyIHdzX2xv
Y2F0aW9uOworCitmdW5jdGlvbiBlbmRUZXN0KCkKK3sKKyAgICBjbGVhclRpbWVvdXQodGltZW91
dElEKTsKKyAgICBzaG91bGRCZVRydWUoImhhbmRzaGFrZV9zdWNjZXNzIik7CisgICAgc2hvdWxk
QmUoIndzX2xvY2F0aW9uIiwgJyJ3czovL2xvY2FsaG9zdDo4ODgwL3dlYnNvY2tldC90ZXN0cy9l
Y2hvLWxvY2F0aW9uIicpOworICAgIGlzU3VjY2Vzc2Z1bGx5UGFyc2VkKCk7CisgICAgaWYgKHdp
bmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
bm90aWZ5RG9uZSgpOworfQorCitkZWJ1ZygidXJsPSIgKyB1cmwpOwordmFyIHdzID0gbmV3IFdl
YlNvY2tldCh1cmwpOword3Mub25vcGVuID0gZnVuY3Rpb24gKCkgeworICAgIGRlYnVnKCJXZWJT
b2NrZXQgaXMgb3BlbiIpOworICAgIGhhbmRzaGFrZV9zdWNjZXNzID0gdHJ1ZTsKK307Cit3cy5v
bm1lc3NhZ2UgPSBmdW5jdGlvbiAoZXZ0KSB7CisgICAgd3NfbG9jYXRpb24gPSBldnQuZGF0YTsK
KyAgICBkZWJ1ZygicmVjZWl2ZWQ6IiArIHdzX2xvY2F0aW9uKTsKKyAgICB3cy5jbG9zZSgpOwor
fTsKK3dzLm9uY2xvc2UgPSBmdW5jdGlvbiAoKSB7CisgICAgZGVidWcoIldlYlNvY2tldCBpcyBj
bG9zZWQiKTsKKyAgICBlbmRUZXN0KCk7Cit9OwordmFyIHRpbWVvdXRJRCA9IHNldFRpbWVvdXQo
ImVuZFRlc3QoKSIsIDIwMDApOworCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy9zY3JpcHQtdGVzdHMvdXJsLXdp
dGgtcXVlcnktZm9yLW5vLXF1ZXJ5LmpzIGIvTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3Nj
cmlwdC10ZXN0cy91cmwtd2l0aC1xdWVyeS1mb3Itbm8tcXVlcnkuanMKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uNDNhYjhkZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL3dlYnNvY2tldC90ZXN0cy9zY3JpcHQtdGVzdHMvdXJsLXdpdGgtcXVlcnktZm9yLW5vLXF1
ZXJ5LmpzCkBAIC0wLDAgKzEsMzcgQEAKK2Rlc2NyaXB0aW9uKCJNYWtlIHN1cmUgaGFuZHNoYWtl
IHdpdGggVVJMIHdpdGggcXVlcnkgY29tcG9uZW50cyBmYWlscyBhZ2FpbnN0IHNlcnZlciB0aGF0
IGRvZXNuJ3Qgc3VwcG9ydCBxdWVyeSBjb21wb25lbnQuIik7CisKK2lmICh3aW5kb3cubGF5b3V0
VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgp
OworCit2YXIgdXJsID0gIndzOi8vbG9jYWxob3N0Ojg4ODAvd2Vic29ja2V0L3Rlc3RzL25vLXF1
ZXJ5LXN1cHBvcnQ/IjsKK3ZhciBoYW5kc2hha2Vfc3VjY2VzcyA9IGZhbHNlOwordmFyIHdzX2xv
Y2F0aW9uOworCitmdW5jdGlvbiBlbmRUZXN0KCkKK3sKKyAgICBjbGVhclRpbWVvdXQodGltZW91
dElEKTsKKyAgICBzaG91bGRCZUZhbHNlKCJoYW5kc2hha2Vfc3VjY2VzcyIpOworICAgIHNob3Vs
ZEJlVW5kZWZpbmVkKCJ3c19sb2NhdGlvbiIpOworICAgIGlzU3VjY2Vzc2Z1bGx5UGFyc2VkKCk7
CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCitkZWJ1ZygidXJsPSIgKyB1cmwpOwordmFy
IHdzID0gbmV3IFdlYlNvY2tldCh1cmwpOword3Mub25vcGVuID0gZnVuY3Rpb24gKCkgeworICAg
IGRlYnVnKCJXZWJTb2NrZXQgaXMgb3BlbiIpOworICAgIGhhbmRzaGFrZV9zdWNjZXNzID0gdHJ1
ZTsKK307Cit3cy5vbm1lc3NnZSA9IGZ1bmN0aW9uIChldnQpIHsKKyAgICB3c19sb2NhdGlvbiA9
IGV2dC5kYXRhOworICAgIGRlYnVnKCJyZWNlaXZlZDoiICsgd3NfbG9jYXRpb24pOworICAgIHdz
LmNsb3NlKCk7Cit9Oword3Mub25jbG9zZSA9IGZ1bmN0aW9uICgpIHsKKyAgICBkZWJ1ZygiV2Vi
U29ja2V0IGlzIGNsb3NlZCIpOworICAgIGVuZFRlc3QoKTsKK307Cit2YXIgdGltZW91dElEID0g
c2V0VGltZW91dCgiZW5kVGVzdCgpIiwgMjAwMCk7CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQg
PSB0cnVlOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3NjcmlwdC10
ZXN0cy91cmwtd2l0aC1xdWVyeS5qcyBiL0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy9zY3Jp
cHQtdGVzdHMvdXJsLXdpdGgtcXVlcnkuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uMDNiYWVlYwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYnNvY2tldC90
ZXN0cy9zY3JpcHQtdGVzdHMvdXJsLXdpdGgtcXVlcnkuanMKQEAgLTAsMCArMSwzNyBAQAorZGVz
Y3JpcHRpb24oIk1ha2Ugc3VyZSBoYW5kc2hha2Ugd2l0aCBVUkwgd2l0aCBxdWVyeSBjb21wb25l
bnRzIHN1Y2Nlc3MuIik7CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworCit2YXIgdXJsID0gIndzOi8v
bG9jYWxob3N0Ojg4ODAvd2Vic29ja2V0L3Rlc3RzL2VjaG8tbG9jYXRpb24/cT12IjsKK3ZhciBo
YW5kc2hha2Vfc3VjY2VzcyA9IGZhbHNlOwordmFyIHdzX2xvY2F0aW9uOworCitmdW5jdGlvbiBl
bmRUZXN0KCkKK3sKKyAgICBjbGVhclRpbWVvdXQodGltZW91dElEKTsKKyAgICBzaG91bGRCZVRy
dWUoImhhbmRzaGFrZV9zdWNjZXNzIik7CisgICAgc2hvdWxkQmUoIndzX2xvY2F0aW9uIiwgInVy
bCIpOworICAgIGlzU3VjY2Vzc2Z1bGx5UGFyc2VkKCk7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRU
ZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgp
OworfQorCitkZWJ1ZygidXJsPSIgKyB1cmwpOwordmFyIHdzID0gbmV3IFdlYlNvY2tldCh1cmwp
Oword3Mub25vcGVuID0gZnVuY3Rpb24gKCkgeworICAgIGRlYnVnKCJXZWJTb2NrZXQgaXMgb3Bl
biIpOworICAgIGhhbmRzaGFrZV9zdWNjZXNzID0gdHJ1ZTsKK307Cit3cy5vbm1lc3NhZ2UgPSBm
dW5jdGlvbiAoZXZ0KSB7CisgICAgd3NfbG9jYXRpb24gPSBldnQuZGF0YTsKKyAgICBkZWJ1Zygi
cmVjZWl2ZWQ6IiArIHdzX2xvY2F0aW9uKTsKKyAgICB3cy5jbG9zZSgpOworfTsKK3dzLm9uY2xv
c2UgPSBmdW5jdGlvbiAoKSB7CisgICAgZGVidWcoIldlYlNvY2tldCBpcyBjbG9zZWQiKTsKKyAg
ICBlbmRUZXN0KCk7Cit9OwordmFyIHRpbWVvdXRJRCA9IHNldFRpbWVvdXQoImVuZFRlc3QoKSIs
IDIwMDApOworCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy91cmwtd2l0aC1jcmVkZW50aWFsLWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy91cmwtd2l0aC1jcmVkZW50aWFsLWV4cGVj
dGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGFmZmZmCi0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3VybC13aXRoLWNyZWRl
bnRpYWwtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTQgQEAKK01ha2Ugc3VyZSBoYW5kc2hha2Ug
d2l0aCBVUkwgd2l0aCBjcmVkZW50YWlsIGluZm8gc3VjY2Vzcy4KKworT24gc3VjY2VzcywgeW91
IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1Qg
Q09NUExFVEUiLgorCit1cmw9d3M6Ly91c2VyOnBhc3NAbG9jYWxob3N0Ojg4ODAvd2Vic29ja2V0
L3Rlc3RzL2VjaG8tbG9jYXRpb24KK1dlYlNvY2tldCBpcyBvcGVuCityZWNlaXZlZDp3czovL2xv
Y2FsaG9zdDo4ODgwL3dlYnNvY2tldC90ZXN0cy9lY2hvLWxvY2F0aW9uCitXZWJTb2NrZXQgaXMg
Y2xvc2VkCitQQVNTIGhhbmRzaGFrZV9zdWNjZXNzIGlzIHRydWUKK1BBU1Mgd3NfbG9jYXRpb24g
aXMgIndzOi8vbG9jYWxob3N0Ojg4ODAvd2Vic29ja2V0L3Rlc3RzL2VjaG8tbG9jYXRpb24iCitQ
QVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3VybC13aXRoLWNyZWRlbnRpYWwuaHRt
bCBiL0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy91cmwtd2l0aC1jcmVkZW50aWFsLmh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FjNTU2YQotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy91cmwtd2l0aC1jcmVkZW50aWFsLmh0
bWwKQEAgLTAsMCArMSwxMyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQg
SFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0i
Li4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9
Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QtZnVuY3Rpb24uanMi
Pjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+
Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvdXJs
LXdpdGgtY3JlZGVudGlhbC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvdXJsLXdpdGgtZW1wdHktcXVlcnktZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3VybC13aXRoLWVtcHR5LXF1
ZXJ5LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWU5
ZTY5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3VybC13
aXRoLWVtcHR5LXF1ZXJ5LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE0IEBACitNYWtlIHN1cmUg
aGFuZHNoYWtlIHdpdGggVVJMIHdpdGggZW1wdHkgcXVlcnkgY29tcG9uZW50cyBzdWNjZXNzLgor
CitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBm
b2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKK3VybD13czovL2xvY2FsaG9zdDo4ODgwL3dl
YnNvY2tldC90ZXN0cy9lY2hvLWxvY2F0aW9uPworV2ViU29ja2V0IGlzIG9wZW4KK3JlY2VpdmVk
OndzOi8vbG9jYWxob3N0Ojg4ODAvd2Vic29ja2V0L3Rlc3RzL2VjaG8tbG9jYXRpb24/CitXZWJT
b2NrZXQgaXMgY2xvc2VkCitQQVNTIGhhbmRzaGFrZV9zdWNjZXNzIGlzIHRydWUKK1BBU1Mgd3Nf
bG9jYXRpb24gaXMgdXJsCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1Qg
Q09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3VybC13
aXRoLWVtcHR5LXF1ZXJ5Lmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvdXJsLXdp
dGgtZW1wdHktcXVlcnkuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4y
MjdmMGIzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3Vy
bC13aXRoLWVtcHR5LXF1ZXJ5Lmh0bWwKQEAgLTAsMCArMSwxMyBAQAorPCFET0NUWVBFIEhUTUwg
UFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJl
bD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHls
ZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJl
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10
ZXN0LXBvc3QtZnVuY3Rpb24uanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlk
PSJkZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQg
c3JjPSJzY3JpcHQtdGVzdHMvdXJsLXdpdGgtZW1wdHktcXVlcnkuanMiPjwvc2NyaXB0PgorPC9i
b2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3Vy
bC13aXRoLWZyYWdtZW50LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0
cy91cmwtd2l0aC1mcmFnbWVudC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uOTg0ODcyOAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYnNv
Y2tldC90ZXN0cy91cmwtd2l0aC1mcmFnbWVudC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxNCBA
QAorTWFrZSBzdXJlIGhhbmRzaGFrZSB3aXRoIFVSTCB3aXRoIGZyYWdtZW50IGNvbXBvbmVudHMg
c3VjY2Vzcy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBt
ZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCit1cmw9d3M6Ly9sb2NhbGhv
c3Q6ODg4MC93ZWJzb2NrZXQvdGVzdHMvZWNoby1sb2NhdGlvbiNmcmFnbWVudAorV2ViU29ja2V0
IGlzIG9wZW4KK3JlY2VpdmVkOndzOi8vbG9jYWxob3N0Ojg4ODAvd2Vic29ja2V0L3Rlc3RzL2Vj
aG8tbG9jYXRpb24KK1dlYlNvY2tldCBpcyBjbG9zZWQKK1BBU1MgaGFuZHNoYWtlX3N1Y2Nlc3Mg
aXMgdHJ1ZQorUEFTUyB3c19sb2NhdGlvbiBpcyAid3M6Ly9sb2NhbGhvc3Q6ODg4MC93ZWJzb2Nr
ZXQvdGVzdHMvZWNoby1sb2NhdGlvbiIKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUK
KworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVz
dHMvdXJsLXdpdGgtZnJhZ21lbnQuaHRtbCBiL0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy91
cmwtd2l0aC1mcmFnbWVudC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjJiMzQ3NzAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMv
dXJsLXdpdGgtZnJhZ21lbnQuaHRtbApAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUgSFRNTCBQ
VUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVs
PSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxl
LmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRl
c3QtcG9zdC1mdW5jdGlvbi5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9
ImRlc2NyaXB0aW9uIj48L2Rpdj4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBz
cmM9InNjcmlwdC10ZXN0cy91cmwtd2l0aC1mcmFnbWVudC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+
Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvdXJsLXdp
dGgtcXVlcnktZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3VybC13
aXRoLXF1ZXJ5LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5hMDBmZjU1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3Rz
L3VybC13aXRoLXF1ZXJ5LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE0IEBACitNYWtlIHN1cmUg
aGFuZHNoYWtlIHdpdGggVVJMIHdpdGggcXVlcnkgY29tcG9uZW50cyBzdWNjZXNzLgorCitPbiBz
dWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dl
ZCBieSAiVEVTVCBDT01QTEVURSIuCisKK3VybD13czovL2xvY2FsaG9zdDo4ODgwL3dlYnNvY2tl
dC90ZXN0cy9lY2hvLWxvY2F0aW9uP3E9dgorV2ViU29ja2V0IGlzIG9wZW4KK3JlY2VpdmVkOndz
Oi8vbG9jYWxob3N0Ojg4ODAvd2Vic29ja2V0L3Rlc3RzL2VjaG8tbG9jYXRpb24/cT12CitXZWJT
b2NrZXQgaXMgY2xvc2VkCitQQVNTIGhhbmRzaGFrZV9zdWNjZXNzIGlzIHRydWUKK1BBU1Mgd3Nf
bG9jYXRpb24gaXMgdXJsCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1Qg
Q09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3VybC13
aXRoLXF1ZXJ5LWZvci1uby1xdWVyeS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJzb2Nr
ZXQvdGVzdHMvdXJsLXdpdGgtcXVlcnktZm9yLW5vLXF1ZXJ5LWV4cGVjdGVkLnR4dApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmE5ZDQ4Ci0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3VybC13aXRoLXF1ZXJ5LWZvci1uby1xdWVyeS1l
eHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMiBAQAorTWFrZSBzdXJlIGhhbmRzaGFrZSB3aXRoIFVS
TCB3aXRoIHF1ZXJ5IGNvbXBvbmVudHMgZmFpbHMgYWdhaW5zdCBzZXJ2ZXIgdGhhdCBkb2Vzbid0
IHN1cHBvcnQgcXVlcnkgY29tcG9uZW50LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBz
ZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisK
K3VybD13czovL2xvY2FsaG9zdDo4ODgwL3dlYnNvY2tldC90ZXN0cy9uby1xdWVyeS1zdXBwb3J0
PworV2ViU29ja2V0IGlzIGNsb3NlZAorUEFTUyBoYW5kc2hha2Vfc3VjY2VzcyBpcyBmYWxzZQor
UEFTUyB3c19sb2NhdGlvbiBpcyB1bmRlZmluZWQuCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBp
cyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vic29j
a2V0L3Rlc3RzL3VybC13aXRoLXF1ZXJ5LWZvci1uby1xdWVyeS5odG1sIGIvTGF5b3V0VGVzdHMv
d2Vic29ja2V0L3Rlc3RzL3VybC13aXRoLXF1ZXJ5LWZvci1uby1xdWVyeS5odG1sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiMGZjMzkKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvdXJsLXdpdGgtcXVlcnktZm9yLW5vLXF1ZXJ5Lmh0
bWwKQEAgLTAsMCArMSwxMyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQg
SFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0i
Li4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9
Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QtZnVuY3Rpb24uanMi
Pjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+
Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvdXJs
LXdpdGgtcXVlcnktZm9yLW5vLXF1ZXJ5LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy91cmwtd2l0aC1xdWVyeS5o
dG1sIGIvTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3VybC13aXRoLXF1ZXJ5Lmh0bWwKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM5MDUwMgotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy91cmwtd2l0aC1xdWVyeS5odG1sCkBAIC0w
LDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VO
Ij4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2Zh
c3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi9m
YXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LWZ1bmN0aW9uLmpzIj48L3Njcmlw
dD4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2PgorPGRpdiBp
ZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL3VybC13aXRoLXF1
ZXJ5LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
Q2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2Q3OWVhNi4uNGNhMmIxMiAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNyBAQAorMjAwOS0xMS0yNiAgRnVtaXRvc2hpIFVrYWkgIDx1a2FpQGNocm9taXVtLm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJT
b2NrZXQgaGFuZHNoYWtlIGNoZWNrIHF1ZXJ5IGNvbXBvbmVudCBvZiBVUkwuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMTYxNworCisgICAgICAgIFRl
c3RzOiB3ZWJzb2NrZXQvdGVzdHMvdXJsLXdpdGgtY3JlZGVudGlhbC5odG1sCisgICAgICAgICAg
ICAgICB3ZWJzb2NrZXQvdGVzdHMvdXJsLXdpdGgtZW1wdHktcXVlcnkuaHRtbAorICAgICAgICAg
ICAgICAgd2Vic29ja2V0L3Rlc3RzL3VybC13aXRoLWZyYWdtZW50Lmh0bWwKKyAgICAgICAgICAg
ICAgIHdlYnNvY2tldC90ZXN0cy91cmwtd2l0aC1xdWVyeS1mb3Itbm8tcXVlcnkuaHRtbAorICAg
ICAgICAgICAgICAgd2Vic29ja2V0L3Rlc3RzL3VybC13aXRoLXF1ZXJ5Lmh0bWwKKworICAgICAg
ICAqIHBsYXRmb3JtL0tVUkwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6S1VSTDo6cmVzb3VyY2VO
YW1lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9LVVJMLmg6CisgICAgICAgICogcGxhdGZvcm0vS1VS
TEdvb2dsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpLVVJMR29vZ2xlUHJpdmF0ZTo6cGF0aEZv
clJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6S1VSTDo6cmVzb3VyY2VOYW1lKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9LVVJMR29vZ2xlUHJpdmF0ZS5oOgorICAgICAgICAqIHdlYnNvY2tldHMv
V2ViU29ja2V0SGFuZHNoYWtlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldEhhbmRz
aGFrZTo6Y2xpZW50TG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0SGFuZHNo
YWtlOjpjbGllbnRIYW5kc2hha2VNZXNzYWdlKToKKwogMjAwOS0xMS0yNSAgRGltaXRyaSBHbGF6
a292ICA8ZGdsYXprb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmlk
IExldmluLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmNwcCBiL1dlYkNvcmUv
cGxhdGZvcm0vS1VSTC5jcHAKaW5kZXggM2M5Mzk1Mi4uNzU4Yjc4ZSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wbGF0Zm9ybS9LVVJMLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL0tVUkwuY3BwCkBA
IC02NTksNiArNjU5LDExIEBAIFN0cmluZyBLVVJMOjpwYXRoKCkgY29uc3QKICAgICByZXR1cm4g
ZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKG1fc3RyaW5nLnN1YnN0cmluZyhtX3BvcnRFbmQsIG1f
cGF0aEVuZCAtIG1fcG9ydEVuZCkpOyAKIH0KIAorU3RyaW5nIEtVUkw6OnJlc291cmNlTmFtZSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIHBhdGgoKSArIG1fc3RyaW5nLnN1YnN0cmluZyhtX3BhdGhF
bmQsIG1fcXVlcnlFbmQgLSBtX3BhdGhFbmQpOworfQorCiB2b2lkIEtVUkw6OnNldFByb3RvY29s
KGNvbnN0IFN0cmluZyYgcykKIHsKICAgICAvLyBGSVhNRTogTm9uLUFTQ0lJIGNoYXJhY3RlcnMg
bXVzdCBiZSBlbmNvZGVkIGFuZCBlc2NhcGVkIHRvIG1hdGNoIHBhcnNlKCkgZXhwZWN0YXRpb25z
LApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmggYi9XZWJDb3JlL3BsYXRmb3Jt
L0tVUkwuaAppbmRleCA5OTM4NDJlLi44YjlkYWM3IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRm
b3JtL0tVUkwuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL0tVUkwuaApAQCAtMTI2LDYgKzEyNiw3
IEBAIHB1YmxpYzoKICAgICBTdHJpbmcgcGF0aCgpIGNvbnN0OwogICAgIFN0cmluZyBsYXN0UGF0
aENvbXBvbmVudCgpIGNvbnN0OwogICAgIFN0cmluZyBxdWVyeSgpIGNvbnN0OworICAgIFN0cmlu
ZyByZXNvdXJjZU5hbWUoKSBjb25zdDsKICAgICBTdHJpbmcgZnJhZ21lbnRJZGVudGlmaWVyKCkg
Y29uc3Q7CiAgICAgYm9vbCBoYXNGcmFnbWVudElkZW50aWZpZXIoKSBjb25zdDsKIApkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9LVVJMR29vZ2xlLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0v
S1VSTEdvb2dsZS5jcHAKaW5kZXggNzYzYmYzYi4uYzkxMGQzNiAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9wbGF0Zm9ybS9LVVJMR29vZ2xlLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL0tVUkxHb29n
bGUuY3BwCkBAIC0zMDQsNiArMzA0LDEzIEBAIFN0cmluZyBLVVJMR29vZ2xlUHJpdmF0ZTo6Y29t
cG9uZW50U3RyaW5nKGNvbnN0IHVybF9wYXJzZTo6Q29tcG9uZW50JiBjb21wKSBjb25zCiAgICAg
cmV0dXJuIHN0cmluZygpLnN1YnN0cmluZyhjb21wLmJlZ2luLCBjb21wLmxlbik7CiB9CiAKK1N0
cmluZyBLVVJMR29vZ2xlUHJpdmF0ZTo6cGF0aEZvclJlcXVlc3QoKSBjb25zdCB7CisgICAgaWYg
KG1fcGFyc2VkLnJlZi5sZW4gPj0gMCkKKwlyZXR1cm4gc3RyaW5nKCkuc3Vic3RyaW5nKG1fcGFy
c2VkLnBhdGguYmVnaW4sCisJCQkJICBtX3BhcnNlZC5yZWYuYmVnaW4gLSBtX3BhcnNlZC5wYXRo
LmJlZ2luIC0gMSk7CisgICAgcmV0dXJuIHN0cmluZygpLnN1YnN0cmluZyhtX3BhcnNlZC5wYXRo
LmJlZ2luKTsKK30KKwogdm9pZCBLVVJMR29vZ2xlUHJpdmF0ZTo6cmVwbGFjZUNvbXBvbmVudHMo
Y29uc3QgUmVwbGFjZW1lbnRzJiByZXBsYWNlbWVudHMpCiB7CiAgICAgdXJsX2Nhbm9uOjpSYXdD
YW5vbk91dHB1dFQ8Y2hhcj4gb3V0cHV0OwpAQCAtNTYxLDYgKzU2OCwxMSBAQCBTdHJpbmcgS1VS
TDo6cGF0aCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fdXJsLmNvbXBvbmVudFN0cmluZyhtX3VybC5t
X3BhcnNlZC5wYXRoKTsKIH0KIAorU3RyaW5nIEtVUkw6OnJlc291cmNlTmFtZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fdXJsLnBhdGhGb3JSZXF1ZXN0KCk7Cit9CisKIHZvaWQgS1VSTDo6c2V0
UHJvdG9jb2woY29uc3QgU3RyaW5nJiBwcm90b2NvbCkKIHsKICAgICBLVVJMR29vZ2xlUHJpdmF0
ZTo6UmVwbGFjZW1lbnRzIHJlcGxhY2VtZW50czsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZv
cm0vS1VSTEdvb2dsZVByaXZhdGUuaCBiL1dlYkNvcmUvcGxhdGZvcm0vS1VSTEdvb2dsZVByaXZh
dGUuaAppbmRleCBhNzBjY2U1Li5kNWYxMzM3IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3Jt
L0tVUkxHb29nbGVQcml2YXRlLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9LVVJMR29vZ2xlUHJp
dmF0ZS5oCkBAIC03MCw2ICs3MCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8g
UmV0dXJucyB0aGUgc3Vic3RyaW5nIG9mIHRoZSBpbnB1dCBpZGVudGlmaWVkIGJ5IHRoZSBnaXZl
biBjb21wb25lbnQuCiAgICAgICAgIFN0cmluZyBjb21wb25lbnRTdHJpbmcoY29uc3QgdXJsX3Bh
cnNlOjpDb21wb25lbnQmKSBjb25zdDsKIAorCS8vIFJldHVybnMgdGhlIHN1YnN0cmluZyBvZiB0
aGUgaW5wdXQgZm9yIHJlcXVlc3QuCisJU3RyaW5nIHBhdGhGb3JSZXF1ZXN0KCkgY29uc3Q7CisK
ICAgICAgICAgLy8gUmVwbGFjZXMgdGhlIGdpdmVuIGNvbXBvbmVudHMsIG1vZGlmeWluZyB0aGUg
Y3VycmVudCBVUkwuIFRoZSBjdXJyZW50CiAgICAgICAgIC8vIFVSTCBtdXN0IGJlIHZhbGlkLgog
ICAgICAgICB0eXBlZGVmIHVybF9jYW5vbjo6UmVwbGFjZW1lbnRzPHVybF9wYXJzZTo6VVRGMTZD
aGFyPiBSZXBsYWNlbWVudHM7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29j
a2V0SGFuZHNoYWtlLmNwcCBiL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2Uu
Y3BwCmluZGV4IDY5MWZhMWMuLjYzMDZhMDQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvd2Vic29ja2V0
cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwCisrKyBiL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2Nr
ZXRIYW5kc2hha2UuY3BwCkBAIC0xMzksNyArMTM5LDcgQEAgU3RyaW5nIFdlYlNvY2tldEhhbmRz
aGFrZTo6Y2xpZW50TG9jYXRpb24oKSBjb25zdAogICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQo
U3RyaW5nOjpudW1iZXIobV91cmwucG9ydCgpKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgYnVp
bGRlci5hcHBlbmQobV91cmwucGF0aCgpKTsKKyAgICBidWlsZGVyLmFwcGVuZChtX3VybC5yZXNv
dXJjZU5hbWUoKSk7CiAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKIH0KIApAQCAtMTQ4
LDExICsxNDgsNyBAQCBDU3RyaW5nIFdlYlNvY2tldEhhbmRzaGFrZTo6Y2xpZW50SGFuZHNoYWtl
TWVzc2FnZSgpIGNvbnN0CiAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwogCiAgICAgYnVpbGRl
ci5hcHBlbmQoIkdFVCAiKTsKLSAgICBidWlsZGVyLmFwcGVuZChtX3VybC5wYXRoKCkpOwotICAg
IGlmICghbV91cmwucXVlcnkoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQo
Ij8iKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQobV91cmwucXVlcnkoKSk7Ci0gICAgfQorICAg
IGJ1aWxkZXIuYXBwZW5kKG1fdXJsLnJlc291cmNlTmFtZSgpKTsKICAgICBidWlsZGVyLmFwcGVu
ZCgiIEhUVFAvMS4xXHJcbiIpOwogICAgIGJ1aWxkZXIuYXBwZW5kKCJVcGdyYWRlOiBXZWJTb2Nr
ZXRcclxuIik7CiAgICAgYnVpbGRlci5hcHBlbmQoIkNvbm5lY3Rpb246IFVwZ3JhZGVcclxuIik7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>43933</attachid>
            <date>2009-11-26 17:46:30 -0800</date>
            <delta_ts>2009-11-29 17:59:37 -0800</delta_ts>
            <desc>WebSocket handshake check query component of URL</desc>
            <filename>bug-31617-20091127104628.patch</filename>
            <type>text/plain</type>
            <size>24884</size>
            <attacher name="Fumitoshi Ukai">ukai</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAxOTMyOWU5Li44Zjc2YTI4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzAgQEAKKzIwMDktMTEt
MjYgIEZ1bWl0b3NoaSBVa2FpICA8dWthaUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViU29ja2V0IGhhbmRzaGFrZSBjaGVj
ayBxdWVyeSBjb21wb25lbnQgb2YgVVJMCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0zMTYxNworCisgICAgICAgICogcGxhdGZvcm0vbWFjL1NraXBwZWQ6
CisgICAgICAgICogcGxhdGZvcm0vd2luL1NraXBwZWQ6CisgICAgICAgICogd2Vic29ja2V0L3Rl
c3RzL2VjaG8tbG9jYXRpb25fd3NoLnB5OiBBZGRlZC4KKyAgICAgICAgKiB3ZWJzb2NrZXQvdGVz
dHMvbm8tcXVlcnlfd3NoLnB5OiBBZGRlZC4KKyAgICAgICAgKiB3ZWJzb2NrZXQvdGVzdHMvc2Ny
aXB0LXRlc3RzL3VybC13aXRoLWNyZWRlbnRpYWwuanM6IEFkZGVkLgorICAgICAgICAqIHdlYnNv
Y2tldC90ZXN0cy9zY3JpcHQtdGVzdHMvdXJsLXdpdGgtZW1wdHktcXVlcnkuanM6IEFkZGVkLgor
ICAgICAgICAqIHdlYnNvY2tldC90ZXN0cy9zY3JpcHQtdGVzdHMvdXJsLXdpdGgtZnJhZ21lbnQu
anM6IEFkZGVkLgorICAgICAgICAqIHdlYnNvY2tldC90ZXN0cy9zY3JpcHQtdGVzdHMvdXJsLXdp
dGgtcXVlcnktZm9yLW5vLXF1ZXJ5LmpzOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJzb2NrZXQvdGVz
dHMvc2NyaXB0LXRlc3RzL3VybC13aXRoLXF1ZXJ5LmpzOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJz
b2NrZXQvdGVzdHMvdXJsLXdpdGgtY3JlZGVudGlhbC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIHdlYnNvY2tldC90ZXN0cy91cmwtd2l0aC1jcmVkZW50aWFsLmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIHdlYnNvY2tldC90ZXN0cy91cmwtd2l0aC1lbXB0eS1xdWVyeS1leHBlY3RlZC50
eHQ6IEFkZGVkLgorICAgICAgICAqIHdlYnNvY2tldC90ZXN0cy91cmwtd2l0aC1lbXB0eS1xdWVy
eS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJzb2NrZXQvdGVzdHMvdXJsLXdpdGgtZnJhZ21l
bnQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiB3ZWJzb2NrZXQvdGVzdHMvdXJsLXdp
dGgtZnJhZ21lbnQuaHRtbDogQWRkZWQuCisgICAgICAgICogd2Vic29ja2V0L3Rlc3RzL3VybC13
aXRoLXF1ZXJ5LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogd2Vic29ja2V0L3Rlc3Rz
L3VybC13aXRoLXF1ZXJ5LWZvci1uby1xdWVyeS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIHdlYnNvY2tldC90ZXN0cy91cmwtd2l0aC1xdWVyeS1mb3Itbm8tcXVlcnkuaHRtbDogQWRk
ZWQuCisgICAgICAgICogd2Vic29ja2V0L3Rlc3RzL3VybC13aXRoLXF1ZXJ5Lmh0bWw6IEFkZGVk
LgorCiAyMDA5LTExLTI2ICBEYW5pZWwgQmF0ZXMgIDxkYmF0ZXNAd2Via2l0Lm9yZz4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBQYXZlbCBGZWxkbWFuLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vbWFjL1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvU2tpcHBlZApp
bmRleCBhMzYyZTk0Li4xZmRiZDY5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9t
YWMvU2tpcHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvU2tpcHBlZApAQCAtMTA4
LDMgKzEwOCw5IEBAIHBsdWdpbnMvcmVsb2FkcGx1Z2lucy1uby1wYWdlcy5odG1sCiAKICMgVGhl
c2UgdGVzdCByZXF1aXJlIFF0IFdpZGdldHMKIHBsdWdpbnMvcXQtcXdpZGdldC1wbHVnaW4uaHRt
bAorCisjIE1pc3NpbmcgIldlYlNvY2tldCBpcyBjbG9zZWQiCit3ZWJzb2NrZXQvdGVzdHMvdXJs
LXdpdGgtY3JlZGVudGlhbC5odG1sCit3ZWJzb2NrZXQvdGVzdHMvdXJsLXdpdGgtZW1wdHktcXVl
cnkuaHRtbAord2Vic29ja2V0L3Rlc3RzL3VybC13aXRoLWZyYWdtZW50Lmh0bWwKK3dlYnNvY2tl
dC90ZXN0cy91cmwtd2l0aC1xdWVyeS5odG1sCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS93aW4vU2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCmluZGV4
IGE0ZDViYTIuLjIwY2Y0NTUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9T
a2lwcGVkCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCkBAIC03MTYsMyAr
NzE2LDggQEAgcGx1Z2lucy9yZWxvYWRwbHVnaW5zLW5vLXBhZ2VzLmh0bWwKICMgVGhlc2UgdGVz
dHMgcmVxdWlyZSBRdCBXaWRnZXRzCiBwbHVnaW5zL3F0LXF3aWRnZXQtcGx1Z2luLmh0bWwKIAor
IyBNaXNzaW5nICJXZWJTb2NrZXQgaXMgY2xvc2VkIgord2Vic29ja2V0L3Rlc3RzL3VybC13aXRo
LWNyZWRlbnRpYWwuaHRtbAord2Vic29ja2V0L3Rlc3RzL3VybC13aXRoLWVtcHR5LXF1ZXJ5Lmh0
bWwKK3dlYnNvY2tldC90ZXN0cy91cmwtd2l0aC1mcmFnbWVudC5odG1sCit3ZWJzb2NrZXQvdGVz
dHMvdXJsLXdpdGgtcXVlcnkuaHRtbApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vic29ja2V0
L3Rlc3RzL2VjaG8tbG9jYXRpb25fd3NoLnB5IGIvTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3Rz
L2VjaG8tbG9jYXRpb25fd3NoLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjMzOTA1NzAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMv
ZWNoby1sb2NhdGlvbl93c2gucHkKQEAgLTAsMCArMSwzOSBAQAorIyBDb3B5cmlnaHQgKEMpIDIw
MDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMg
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisK
KworZnJvbSBtb2RfcHl3ZWJzb2NrZXQgaW1wb3J0IG1zZ3V0aWwKKworCitkZWYgd2ViX3NvY2tl
dF9kb19leHRyYV9oYW5kc2hha2UocmVxdWVzdCk6CisgICAgcGFzcworCisKK2RlZiB3ZWJfc29j
a2V0X3RyYW5zZmVyX2RhdGEocmVxdWVzdCk6CisgICAgcHJpbnQgcmVxdWVzdC53c19sb2NhdGlv
bgorICAgIG1zZ3V0aWwuc2VuZF9tZXNzYWdlKHJlcXVlc3QsIHJlcXVlc3Qud3NfbG9jYXRpb24p
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvbm8tcXVlcnlfd3NoLnB5
IGIvTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL25vLXF1ZXJ5X3dzaC5weQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjc5NjE1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL25vLXF1ZXJ5X3dzaC5weQpAQCAtMCwwICsxLDM4IEBA
CisjIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
IworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9u
LgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMg
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisj
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKworCitmcm9tIG1vZF9weXdlYnNvY2tldCBpbXBvcnQgbXNndXRp
bAorCisKK2RlZiB3ZWJfc29ja2V0X2RvX2V4dHJhX2hhbmRzaGFrZShyZXF1ZXN0KToKKyAgICBy
ZXF1ZXN0LndzX2xvY2F0aW9uID0gcmVxdWVzdC53c19yZXNvdXJjZS5zcGxpdCgnPycsIDEpWzBd
CisKKworZGVmIHdlYl9zb2NrZXRfdHJhbnNmZXJfZGF0YShyZXF1ZXN0KToKKyAgICBtc2d1dGls
LnNlbmRfbWVzc2FnZShyZXF1ZXN0LCByZXF1ZXN0LndzX2xvY2F0aW9uKQpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3NjcmlwdC10ZXN0cy91cmwtd2l0aC1jcmVkZW50
aWFsLmpzIGIvTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3NjcmlwdC10ZXN0cy91cmwtd2l0
aC1jcmVkZW50aWFsLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5MzU3
OTYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvc2NyaXB0
LXRlc3RzL3VybC13aXRoLWNyZWRlbnRpYWwuanMKQEAgLTAsMCArMSwzNyBAQAorZGVzY3JpcHRp
b24oIk1ha2Ugc3VyZSBoYW5kc2hha2Ugd2l0aCBVUkwgd2l0aCBjcmVkZW50YWlsIGluZm8gc3Vj
Y2Vzcy4iKTsKKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisKK3ZhciB1cmwgPSAid3M6Ly91c2VyOnBh
c3NAbG9jYWxob3N0Ojg4ODAvd2Vic29ja2V0L3Rlc3RzL2VjaG8tbG9jYXRpb24iOwordmFyIGhh
bmRzaGFrZV9zdWNjZXNzID0gZmFsc2U7Cit2YXIgd3NfbG9jYXRpb247CisKK2Z1bmN0aW9uIGVu
ZFRlc3QoKQoreworICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SUQpOworICAgIHNob3VsZEJlVHJ1
ZSgiaGFuZHNoYWtlX3N1Y2Nlc3MiKTsKKyAgICBzaG91bGRCZSgid3NfbG9jYXRpb24iLCAnIndz
Oi8vbG9jYWxob3N0Ojg4ODAvd2Vic29ja2V0L3Rlc3RzL2VjaG8tbG9jYXRpb24iJyk7CisgICAg
aXNTdWNjZXNzZnVsbHlQYXJzZWQoKTsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisKK2Rl
YnVnKCJ1cmw9IiArIHVybCk7Cit2YXIgd3MgPSBuZXcgV2ViU29ja2V0KHVybCk7Cit3cy5vbm9w
ZW4gPSBmdW5jdGlvbiAoKSB7CisgICAgZGVidWcoIldlYlNvY2tldCBpcyBvcGVuIik7CisgICAg
aGFuZHNoYWtlX3N1Y2Nlc3MgPSB0cnVlOworfTsKK3dzLm9ubWVzc2FnZSA9IGZ1bmN0aW9uIChl
dnQpIHsKKyAgICB3c19sb2NhdGlvbiA9IGV2dC5kYXRhOworICAgIGRlYnVnKCJyZWNlaXZlZDoi
ICsgd3NfbG9jYXRpb24pOworICAgIHdzLmNsb3NlKCk7Cit9Oword3Mub25jbG9zZSA9IGZ1bmN0
aW9uICgpIHsKKyAgICBkZWJ1ZygiV2ViU29ja2V0IGlzIGNsb3NlZCIpOworICAgIGVuZFRlc3Qo
KTsKK307Cit2YXIgdGltZW91dElEID0gc2V0VGltZW91dCgiZW5kVGVzdCgpIiwgMjAwMCk7CisK
K3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
d2Vic29ja2V0L3Rlc3RzL3NjcmlwdC10ZXN0cy91cmwtd2l0aC1lbXB0eS1xdWVyeS5qcyBiL0xh
eW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy9zY3JpcHQtdGVzdHMvdXJsLXdpdGgtZW1wdHktcXVl
cnkuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY0YWUxOQotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy9zY3JpcHQtdGVzdHMvdXJs
LXdpdGgtZW1wdHktcXVlcnkuanMKQEAgLTAsMCArMSwzNyBAQAorZGVzY3JpcHRpb24oIk1ha2Ug
c3VyZSBoYW5kc2hha2Ugd2l0aCBVUkwgd2l0aCBlbXB0eSBxdWVyeSBjb21wb25lbnRzIHN1Y2Nl
c3MuIik7CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworCit2YXIgdXJsID0gIndzOi8vbG9jYWxob3N0
Ojg4ODAvd2Vic29ja2V0L3Rlc3RzL2VjaG8tbG9jYXRpb24/IjsKK3ZhciBoYW5kc2hha2Vfc3Vj
Y2VzcyA9IGZhbHNlOwordmFyIHdzX2xvY2F0aW9uOworCitmdW5jdGlvbiBlbmRUZXN0KCkKK3sK
KyAgICBjbGVhclRpbWVvdXQodGltZW91dElEKTsKKyAgICBzaG91bGRCZVRydWUoImhhbmRzaGFr
ZV9zdWNjZXNzIik7CisgICAgc2hvdWxkQmUoIndzX2xvY2F0aW9uIiwgInVybCIpOworICAgIGlz
U3VjY2Vzc2Z1bGx5UGFyc2VkKCk7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
cikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCitkZWJ1
ZygidXJsPSIgKyB1cmwpOwordmFyIHdzID0gbmV3IFdlYlNvY2tldCh1cmwpOword3Mub25vcGVu
ID0gZnVuY3Rpb24gKCkgeworICAgIGRlYnVnKCJXZWJTb2NrZXQgaXMgb3BlbiIpOworICAgIGhh
bmRzaGFrZV9zdWNjZXNzID0gdHJ1ZTsKK307Cit3cy5vbm1lc3NhZ2UgPSBmdW5jdGlvbiAoZXZ0
KSB7CisgICAgd3NfbG9jYXRpb24gPSBldnQuZGF0YTsKKyAgICBkZWJ1ZygicmVjZWl2ZWQ6IiAr
IHdzX2xvY2F0aW9uKTsKKyAgICB3cy5jbG9zZSgpOworfTsgCit3cy5vbmNsb3NlID0gZnVuY3Rp
b24gKCkgeworICAgIGRlYnVnKCJXZWJTb2NrZXQgaXMgY2xvc2VkIik7CisgICAgZW5kVGVzdCgp
OworfTsKK3ZhciB0aW1lb3V0SUQgPSBzZXRUaW1lb3V0KCJlbmRUZXN0KCkiLCAyMDAwKTsKKwor
dmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93
ZWJzb2NrZXQvdGVzdHMvc2NyaXB0LXRlc3RzL3VybC13aXRoLWZyYWdtZW50LmpzIGIvTGF5b3V0
VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3NjcmlwdC10ZXN0cy91cmwtd2l0aC1mcmFnbWVudC5qcwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTAzZDNiCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3NjcmlwdC10ZXN0cy91cmwtd2l0aC1m
cmFnbWVudC5qcwpAQCAtMCwwICsxLDM3IEBACitkZXNjcmlwdGlvbigiTWFrZSBzdXJlIGhhbmRz
aGFrZSB3aXRoIFVSTCB3aXRoIGZyYWdtZW50IGNvbXBvbmVudHMgc3VjY2Vzcy4iKTsKKworaWYg
KHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53
YWl0VW50aWxEb25lKCk7CisKK3ZhciB1cmwgPSAid3M6Ly9sb2NhbGhvc3Q6ODg4MC93ZWJzb2Nr
ZXQvdGVzdHMvZWNoby1sb2NhdGlvbiNmcmFnbWVudCI7Cit2YXIgaGFuZHNoYWtlX3N1Y2Nlc3Mg
PSBmYWxzZTsKK3ZhciB3c19sb2NhdGlvbjsKKworZnVuY3Rpb24gZW5kVGVzdCgpCit7CisgICAg
Y2xlYXJUaW1lb3V0KHRpbWVvdXRJRCk7CisgICAgc2hvdWxkQmVUcnVlKCJoYW5kc2hha2Vfc3Vj
Y2VzcyIpOworICAgIHNob3VsZEJlKCJ3c19sb2NhdGlvbiIsICcid3M6Ly9sb2NhbGhvc3Q6ODg4
MC93ZWJzb2NrZXQvdGVzdHMvZWNoby1sb2NhdGlvbiInKTsKKyAgICBpc1N1Y2Nlc3NmdWxseVBh
cnNlZCgpOworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKworZGVidWcoInVybD0iICsgdXJs
KTsKK3ZhciB3cyA9IG5ldyBXZWJTb2NrZXQodXJsKTsKK3dzLm9ub3BlbiA9IGZ1bmN0aW9uICgp
IHsKKyAgICBkZWJ1ZygiV2ViU29ja2V0IGlzIG9wZW4iKTsKKyAgICBoYW5kc2hha2Vfc3VjY2Vz
cyA9IHRydWU7Cit9Oword3Mub25tZXNzYWdlID0gZnVuY3Rpb24gKGV2dCkgeworICAgIHdzX2xv
Y2F0aW9uID0gZXZ0LmRhdGE7CisgICAgZGVidWcoInJlY2VpdmVkOiIgKyB3c19sb2NhdGlvbik7
CisgICAgd3MuY2xvc2UoKTsKK307Cit3cy5vbmNsb3NlID0gZnVuY3Rpb24gKCkgeworICAgIGRl
YnVnKCJXZWJTb2NrZXQgaXMgY2xvc2VkIik7CisgICAgZW5kVGVzdCgpOworfTsKK3ZhciB0aW1l
b3V0SUQgPSBzZXRUaW1lb3V0KCJlbmRUZXN0KCkiLCAyMDAwKTsKKwordmFyIHN1Y2Nlc3NmdWxs
eVBhcnNlZCA9IHRydWU7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMv
c2NyaXB0LXRlc3RzL3VybC13aXRoLXF1ZXJ5LWZvci1uby1xdWVyeS5qcyBiL0xheW91dFRlc3Rz
L3dlYnNvY2tldC90ZXN0cy9zY3JpcHQtdGVzdHMvdXJsLXdpdGgtcXVlcnktZm9yLW5vLXF1ZXJ5
LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzYWI4ZGQKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvc2NyaXB0LXRlc3RzL3VybC13
aXRoLXF1ZXJ5LWZvci1uby1xdWVyeS5qcwpAQCAtMCwwICsxLDM3IEBACitkZXNjcmlwdGlvbigi
TWFrZSBzdXJlIGhhbmRzaGFrZSB3aXRoIFVSTCB3aXRoIHF1ZXJ5IGNvbXBvbmVudHMgZmFpbHMg
YWdhaW5zdCBzZXJ2ZXIgdGhhdCBkb2Vzbid0IHN1cHBvcnQgcXVlcnkgY29tcG9uZW50LiIpOwor
CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9s
bGVyLndhaXRVbnRpbERvbmUoKTsKKwordmFyIHVybCA9ICJ3czovL2xvY2FsaG9zdDo4ODgwL3dl
YnNvY2tldC90ZXN0cy9uby1xdWVyeS1zdXBwb3J0PyI7Cit2YXIgaGFuZHNoYWtlX3N1Y2Nlc3Mg
PSBmYWxzZTsKK3ZhciB3c19sb2NhdGlvbjsKKworZnVuY3Rpb24gZW5kVGVzdCgpCit7CisgICAg
Y2xlYXJUaW1lb3V0KHRpbWVvdXRJRCk7CisgICAgc2hvdWxkQmVGYWxzZSgiaGFuZHNoYWtlX3N1
Y2Nlc3MiKTsKKyAgICBzaG91bGRCZVVuZGVmaW5lZCgid3NfbG9jYXRpb24iKTsKKyAgICBpc1N1
Y2Nlc3NmdWxseVBhcnNlZCgpOworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIp
CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKworZGVidWco
InVybD0iICsgdXJsKTsKK3ZhciB3cyA9IG5ldyBXZWJTb2NrZXQodXJsKTsKK3dzLm9ub3BlbiA9
IGZ1bmN0aW9uICgpIHsKKyAgICBkZWJ1ZygiV2ViU29ja2V0IGlzIG9wZW4iKTsKKyAgICBoYW5k
c2hha2Vfc3VjY2VzcyA9IHRydWU7Cit9Oword3Mub25tZXNzZ2UgPSBmdW5jdGlvbiAoZXZ0KSB7
CisgICAgd3NfbG9jYXRpb24gPSBldnQuZGF0YTsKKyAgICBkZWJ1ZygicmVjZWl2ZWQ6IiArIHdz
X2xvY2F0aW9uKTsKKyAgICB3cy5jbG9zZSgpOworfTsKK3dzLm9uY2xvc2UgPSBmdW5jdGlvbiAo
KSB7CisgICAgZGVidWcoIldlYlNvY2tldCBpcyBjbG9zZWQiKTsKKyAgICBlbmRUZXN0KCk7Cit9
OwordmFyIHRpbWVvdXRJRCA9IHNldFRpbWVvdXQoImVuZFRlc3QoKSIsIDIwMDApOworCit2YXIg
c3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYnNv
Y2tldC90ZXN0cy9zY3JpcHQtdGVzdHMvdXJsLXdpdGgtcXVlcnkuanMgYi9MYXlvdXRUZXN0cy93
ZWJzb2NrZXQvdGVzdHMvc2NyaXB0LXRlc3RzL3VybC13aXRoLXF1ZXJ5LmpzCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzYmFlZWMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvc2NyaXB0LXRlc3RzL3VybC13aXRoLXF1ZXJ5LmpzCkBA
IC0wLDAgKzEsMzcgQEAKK2Rlc2NyaXB0aW9uKCJNYWtlIHN1cmUgaGFuZHNoYWtlIHdpdGggVVJM
IHdpdGggcXVlcnkgY29tcG9uZW50cyBzdWNjZXNzLiIpOworCitpZiAod2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsK
KwordmFyIHVybCA9ICJ3czovL2xvY2FsaG9zdDo4ODgwL3dlYnNvY2tldC90ZXN0cy9lY2hvLWxv
Y2F0aW9uP3E9diI7Cit2YXIgaGFuZHNoYWtlX3N1Y2Nlc3MgPSBmYWxzZTsKK3ZhciB3c19sb2Nh
dGlvbjsKKworZnVuY3Rpb24gZW5kVGVzdCgpCit7CisgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJ
RCk7CisgICAgc2hvdWxkQmVUcnVlKCJoYW5kc2hha2Vfc3VjY2VzcyIpOworICAgIHNob3VsZEJl
KCJ3c19sb2NhdGlvbiIsICJ1cmwiKTsKKyAgICBpc1N1Y2Nlc3NmdWxseVBhcnNlZCgpOworICAg
IGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250
cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKworZGVidWcoInVybD0iICsgdXJsKTsKK3ZhciB3cyA9
IG5ldyBXZWJTb2NrZXQodXJsKTsKK3dzLm9ub3BlbiA9IGZ1bmN0aW9uICgpIHsKKyAgICBkZWJ1
ZygiV2ViU29ja2V0IGlzIG9wZW4iKTsKKyAgICBoYW5kc2hha2Vfc3VjY2VzcyA9IHRydWU7Cit9
Oword3Mub25tZXNzYWdlID0gZnVuY3Rpb24gKGV2dCkgeworICAgIHdzX2xvY2F0aW9uID0gZXZ0
LmRhdGE7CisgICAgZGVidWcoInJlY2VpdmVkOiIgKyB3c19sb2NhdGlvbik7CisgICAgd3MuY2xv
c2UoKTsKK307Cit3cy5vbmNsb3NlID0gZnVuY3Rpb24gKCkgeworICAgIGRlYnVnKCJXZWJTb2Nr
ZXQgaXMgY2xvc2VkIik7CisgICAgZW5kVGVzdCgpOworfTsKK3ZhciB0aW1lb3V0SUQgPSBzZXRU
aW1lb3V0KCJlbmRUZXN0KCkiLCAyMDAwKTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRy
dWU7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvdXJsLXdpdGgtY3Jl
ZGVudGlhbC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvdXJsLXdp
dGgtY3JlZGVudGlhbC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uNjBhZmZmZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYnNvY2tldC90
ZXN0cy91cmwtd2l0aC1jcmVkZW50aWFsLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE0IEBACitN
YWtlIHN1cmUgaGFuZHNoYWtlIHdpdGggVVJMIHdpdGggY3JlZGVudGFpbCBpbmZvIHN1Y2Nlc3Mu
CisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMs
IGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKwordXJsPXdzOi8vdXNlcjpwYXNzQGxvY2Fs
aG9zdDo4ODgwL3dlYnNvY2tldC90ZXN0cy9lY2hvLWxvY2F0aW9uCitXZWJTb2NrZXQgaXMgb3Bl
bgorcmVjZWl2ZWQ6d3M6Ly9sb2NhbGhvc3Q6ODg4MC93ZWJzb2NrZXQvdGVzdHMvZWNoby1sb2Nh
dGlvbgorV2ViU29ja2V0IGlzIGNsb3NlZAorUEFTUyBoYW5kc2hha2Vfc3VjY2VzcyBpcyB0cnVl
CitQQVNTIHdzX2xvY2F0aW9uIGlzICJ3czovL2xvY2FsaG9zdDo4ODgwL3dlYnNvY2tldC90ZXN0
cy9lY2hvLWxvY2F0aW9uIgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNU
IENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy91cmwt
d2l0aC1jcmVkZW50aWFsLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvdXJsLXdp
dGgtY3JlZGVudGlhbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdh
YzU1NmEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvdXJs
LXdpdGgtY3JlZGVudGlhbC5odG1sCkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBIVE1MIFBV
QkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9
InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUu
Y3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVz
dC1wb3N0LWZ1bmN0aW9uLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0i
ZGVzY3JpcHRpb24iPjwvZGl2PgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0IHNy
Yz0ic2NyaXB0LXRlc3RzL3VybC13aXRoLWNyZWRlbnRpYWwuanMiPjwvc2NyaXB0PgorPC9ib2R5
PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3VybC13
aXRoLWVtcHR5LXF1ZXJ5LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0
cy91cmwtd2l0aC1lbXB0eS1xdWVyeS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uZmFlOWU2OQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dl
YnNvY2tldC90ZXN0cy91cmwtd2l0aC1lbXB0eS1xdWVyeS1leHBlY3RlZC50eHQKQEAgLTAsMCAr
MSwxNCBAQAorTWFrZSBzdXJlIGhhbmRzaGFrZSB3aXRoIFVSTCB3aXRoIGVtcHR5IHF1ZXJ5IGNv
bXBvbmVudHMgc3VjY2Vzcy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9m
ICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCit1cmw9d3M6
Ly9sb2NhbGhvc3Q6ODg4MC93ZWJzb2NrZXQvdGVzdHMvZWNoby1sb2NhdGlvbj8KK1dlYlNvY2tl
dCBpcyBvcGVuCityZWNlaXZlZDp3czovL2xvY2FsaG9zdDo4ODgwL3dlYnNvY2tldC90ZXN0cy9l
Y2hvLWxvY2F0aW9uPworV2ViU29ja2V0IGlzIGNsb3NlZAorUEFTUyBoYW5kc2hha2Vfc3VjY2Vz
cyBpcyB0cnVlCitQQVNTIHdzX2xvY2F0aW9uIGlzIHVybAorUEFTUyBzdWNjZXNzZnVsbHlQYXJz
ZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dl
YnNvY2tldC90ZXN0cy91cmwtd2l0aC1lbXB0eS1xdWVyeS5odG1sIGIvTGF5b3V0VGVzdHMvd2Vi
c29ja2V0L3Rlc3RzL3VybC13aXRoLWVtcHR5LXF1ZXJ5Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uMjI3ZjBiMwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L3dlYnNvY2tldC90ZXN0cy91cmwtd2l0aC1lbXB0eS1xdWVyeS5odG1sCkBAIC0wLDAgKzEsMTMg
QEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1s
PgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2Zhc3QvanMvcmVz
b3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jl
c291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFz
dC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LWZ1bmN0aW9uLmpzIj48L3NjcmlwdD4KKzwvaGVh
ZD4KKzxib2R5PgorPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2PgorPGRpdiBpZD0iY29uc29s
ZSI+PC9kaXY+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL3VybC13aXRoLWVtcHR5LXF1ZXJ5
LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3dlYnNvY2tldC90ZXN0cy91cmwtd2l0aC1mcmFnbWVudC1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy93ZWJzb2NrZXQvdGVzdHMvdXJsLXdpdGgtZnJhZ21lbnQtZXhwZWN0ZWQudHh0Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4NDg3MjgKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvdXJsLXdpdGgtZnJhZ21lbnQtZXhwZWN0ZWQu
dHh0CkBAIC0wLDAgKzEsMTQgQEAKK01ha2Ugc3VyZSBoYW5kc2hha2Ugd2l0aCBVUkwgd2l0aCBm
cmFnbWVudCBjb21wb25lbnRzIHN1Y2Nlc3MuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBh
IHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4K
KwordXJsPXdzOi8vbG9jYWxob3N0Ojg4ODAvd2Vic29ja2V0L3Rlc3RzL2VjaG8tbG9jYXRpb24j
ZnJhZ21lbnQKK1dlYlNvY2tldCBpcyBvcGVuCityZWNlaXZlZDp3czovL2xvY2FsaG9zdDo4ODgw
L3dlYnNvY2tldC90ZXN0cy9lY2hvLWxvY2F0aW9uCitXZWJTb2NrZXQgaXMgY2xvc2VkCitQQVNT
IGhhbmRzaGFrZV9zdWNjZXNzIGlzIHRydWUKK1BBU1Mgd3NfbG9jYXRpb24gaXMgIndzOi8vbG9j
YWxob3N0Ojg4ODAvd2Vic29ja2V0L3Rlc3RzL2VjaG8tbG9jYXRpb24iCitQQVNTIHN1Y2Nlc3Nm
dWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3VybC13aXRoLWZyYWdtZW50Lmh0bWwgYi9MYXlvdXRUZXN0
cy93ZWJzb2NrZXQvdGVzdHMvdXJsLXdpdGgtZnJhZ21lbnQuaHRtbApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi4yYjM0NzcwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvd2Vic29ja2V0L3Rlc3RzL3VybC13aXRoLWZyYWdtZW50Lmh0bWwKQEAgLTAsMCArMSwxMyBA
QAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+
Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZmFzdC9qcy9yZXNv
dXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVz
b3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0
L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QtZnVuY3Rpb24uanMiPjwvc2NyaXB0PgorPC9oZWFk
PgorPGJvZHk+Cis8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2IGlkPSJjb25zb2xl
Ij48L2Rpdj4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvdXJsLXdpdGgtZnJhZ21lbnQuanMi
Pjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vi
c29ja2V0L3Rlc3RzL3VybC13aXRoLXF1ZXJ5LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dl
YnNvY2tldC90ZXN0cy91cmwtd2l0aC1xdWVyeS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uYTAwZmY1NQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL3dlYnNvY2tldC90ZXN0cy91cmwtd2l0aC1xdWVyeS1leHBlY3RlZC50eHQKQEAgLTAsMCAr
MSwxNCBAQAorTWFrZSBzdXJlIGhhbmRzaGFrZSB3aXRoIFVSTCB3aXRoIHF1ZXJ5IGNvbXBvbmVu
dHMgc3VjY2Vzcy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNT
IiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCit1cmw9d3M6Ly9sb2Nh
bGhvc3Q6ODg4MC93ZWJzb2NrZXQvdGVzdHMvZWNoby1sb2NhdGlvbj9xPXYKK1dlYlNvY2tldCBp
cyBvcGVuCityZWNlaXZlZDp3czovL2xvY2FsaG9zdDo4ODgwL3dlYnNvY2tldC90ZXN0cy9lY2hv
LWxvY2F0aW9uP3E9dgorV2ViU29ja2V0IGlzIGNsb3NlZAorUEFTUyBoYW5kc2hha2Vfc3VjY2Vz
cyBpcyB0cnVlCitQQVNTIHdzX2xvY2F0aW9uIGlzIHVybAorUEFTUyBzdWNjZXNzZnVsbHlQYXJz
ZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dl
YnNvY2tldC90ZXN0cy91cmwtd2l0aC1xdWVyeS1mb3Itbm8tcXVlcnktZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3VybC13aXRoLXF1ZXJ5LWZvci1uby1xdWVyeS1l
eHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODJhOWQ0OAot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy91cmwtd2l0aC1x
dWVyeS1mb3Itbm8tcXVlcnktZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTIgQEAKK01ha2Ugc3Vy
ZSBoYW5kc2hha2Ugd2l0aCBVUkwgd2l0aCBxdWVyeSBjb21wb25lbnRzIGZhaWxzIGFnYWluc3Qg
c2VydmVyIHRoYXQgZG9lc24ndCBzdXBwb3J0IHF1ZXJ5IGNvbXBvbmVudC4KKworT24gc3VjY2Vz
cywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkg
IlRFU1QgQ09NUExFVEUiLgorCit1cmw9d3M6Ly9sb2NhbGhvc3Q6ODg4MC93ZWJzb2NrZXQvdGVz
dHMvbm8tcXVlcnktc3VwcG9ydD8KK1dlYlNvY2tldCBpcyBjbG9zZWQKK1BBU1MgaGFuZHNoYWtl
X3N1Y2Nlc3MgaXMgZmFsc2UKK1BBU1Mgd3NfbG9jYXRpb24gaXMgdW5kZWZpbmVkLgorUEFTUyBz
dWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy91cmwtd2l0aC1xdWVyeS1mb3Itbm8tcXVlcnku
aHRtbCBiL0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy91cmwtd2l0aC1xdWVyeS1mb3Itbm8t
cXVlcnkuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjBmYzM5Ci0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3VybC13aXRoLXF1
ZXJ5LWZvci1uby1xdWVyeS5odG1sCkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBIVE1MIFBV
QkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9
InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUu
Y3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVz
dC1wb3N0LWZ1bmN0aW9uLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0i
ZGVzY3JpcHRpb24iPjwvZGl2PgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0IHNy
Yz0ic2NyaXB0LXRlc3RzL3VybC13aXRoLXF1ZXJ5LWZvci1uby1xdWVyeS5qcyI+PC9zY3JpcHQ+
Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVz
dHMvdXJsLXdpdGgtcXVlcnkuaHRtbCBiL0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy91cmwt
d2l0aC1xdWVyeS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjOTA1
MDIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvdXJsLXdp
dGgtcXVlcnkuaHRtbApAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0v
L0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNo
ZWV0IiBocmVmPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC1m
dW5jdGlvbi5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9ImRlc2NyaXB0
aW9uIj48L2Rpdj4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9InNjcmlw
dC10ZXN0cy91cmwtd2l0aC1xdWVyeS5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDk4
MzE3MGIuLjI4OWM0NDMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNv
cmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcgQEAKKzIwMDktMTEtMjYgIEZ1bWl0b3NoaSBVa2Fp
ICA8dWthaUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgV2ViU29ja2V0IGhhbmRzaGFrZSBjaGVjayBxdWVyeSBjb21wb25lbnQg
b2YgVVJMCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0z
MTYxNworCisgICAgICAgIFRlc3RzOiB3ZWJzb2NrZXQvdGVzdHMvdXJsLXdpdGgtY3JlZGVudGlh
bC5odG1sCisgICAgICAgICAgICAgICB3ZWJzb2NrZXQvdGVzdHMvdXJsLXdpdGgtZW1wdHktcXVl
cnkuaHRtbAorICAgICAgICAgICAgICAgd2Vic29ja2V0L3Rlc3RzL3VybC13aXRoLWZyYWdtZW50
Lmh0bWwKKyAgICAgICAgICAgICAgIHdlYnNvY2tldC90ZXN0cy91cmwtd2l0aC1xdWVyeS1mb3It
bm8tcXVlcnkuaHRtbAorICAgICAgICAgICAgICAgd2Vic29ja2V0L3Rlc3RzL3VybC13aXRoLXF1
ZXJ5Lmh0bWwKKworICAgICAgICAqIHBsYXRmb3JtL0tVUkwuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6S1VSTDo6cmVzb3VyY2VOYW1lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9LVVJMLmg6CisgICAg
ICAgICogcGxhdGZvcm0vS1VSTEdvb2dsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpLVVJMR29v
Z2xlUHJpdmF0ZTo6cGF0aEZvclJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6S1VSTDo6cmVz
b3VyY2VOYW1lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9LVVJMR29vZ2xlUHJpdmF0ZS5oOgorICAg
ICAgICAqIHdlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OldlYlNvY2tldEhhbmRzaGFrZTo6Y2xpZW50TG9jYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViU29ja2V0SGFuZHNoYWtlOjpjbGllbnRIYW5kc2hha2VNZXNzYWdlKToKKwogMjAwOS0x
MS0yNiAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KIAogICAgICAgICBO
b3QgcmV2aWV3ZWQuIEJ1aWxkIGZpeDogcmV2ZXJ0IHI1MTQyMS4KZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGxhdGZvcm0vS1VSTC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL0tVUkwuY3BwCmluZGV4IDNj
OTM5NTIuLjc1OGI3OGUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vS1VSTC5jcHAKKysr
IGIvV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmNwcApAQCAtNjU5LDYgKzY1OSwxMSBAQCBTdHJpbmcg
S1VSTDo6cGF0aCgpIGNvbnN0CiAgICAgcmV0dXJuIGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyht
X3N0cmluZy5zdWJzdHJpbmcobV9wb3J0RW5kLCBtX3BhdGhFbmQgLSBtX3BvcnRFbmQpKTsgCiB9
CiAKK1N0cmluZyBLVVJMOjpyZXNvdXJjZU5hbWUoKSBjb25zdAoreworICAgIHJldHVybiBwYXRo
KCkgKyBtX3N0cmluZy5zdWJzdHJpbmcobV9wYXRoRW5kLCBtX3F1ZXJ5RW5kIC0gbV9wYXRoRW5k
KTsKK30KKwogdm9pZCBLVVJMOjpzZXRQcm90b2NvbChjb25zdCBTdHJpbmcmIHMpCiB7CiAgICAg
Ly8gRklYTUU6IE5vbi1BU0NJSSBjaGFyYWN0ZXJzIG11c3QgYmUgZW5jb2RlZCBhbmQgZXNjYXBl
ZCB0byBtYXRjaCBwYXJzZSgpIGV4cGVjdGF0aW9ucywKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vS1VSTC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmgKaW5kZXggOTkzODQyZS4uOGI5
ZGFjNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmgKKysrIGIvV2ViQ29yZS9w
bGF0Zm9ybS9LVVJMLmgKQEAgLTEyNiw2ICsxMjYsNyBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIHBh
dGgoKSBjb25zdDsKICAgICBTdHJpbmcgbGFzdFBhdGhDb21wb25lbnQoKSBjb25zdDsKICAgICBT
dHJpbmcgcXVlcnkoKSBjb25zdDsKKyAgICBTdHJpbmcgcmVzb3VyY2VOYW1lKCkgY29uc3Q7CiAg
ICAgU3RyaW5nIGZyYWdtZW50SWRlbnRpZmllcigpIGNvbnN0OwogICAgIGJvb2wgaGFzRnJhZ21l
bnRJZGVudGlmaWVyKCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vS1VS
TEdvb2dsZS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL0tVUkxHb29nbGUuY3BwCmluZGV4IDc2M2Jm
M2IuLmM5MTBkMzYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vS1VSTEdvb2dsZS5jcHAK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9LVVJMR29vZ2xlLmNwcApAQCAtMzA0LDYgKzMwNCwxMyBA
QCBTdHJpbmcgS1VSTEdvb2dsZVByaXZhdGU6OmNvbXBvbmVudFN0cmluZyhjb25zdCB1cmxfcGFy
c2U6OkNvbXBvbmVudCYgY29tcCkgY29ucwogICAgIHJldHVybiBzdHJpbmcoKS5zdWJzdHJpbmco
Y29tcC5iZWdpbiwgY29tcC5sZW4pOwogfQogCitTdHJpbmcgS1VSTEdvb2dsZVByaXZhdGU6OnBh
dGhGb3JSZXF1ZXN0KCkgY29uc3QgeworICAgIGlmIChtX3BhcnNlZC5yZWYubGVuID49IDApCisJ
cmV0dXJuIHN0cmluZygpLnN1YnN0cmluZyhtX3BhcnNlZC5wYXRoLmJlZ2luLAorCQkJCSAgbV9w
YXJzZWQucmVmLmJlZ2luIC0gbV9wYXJzZWQucGF0aC5iZWdpbiAtIDEpOworICAgIHJldHVybiBz
dHJpbmcoKS5zdWJzdHJpbmcobV9wYXJzZWQucGF0aC5iZWdpbik7Cit9CisKIHZvaWQgS1VSTEdv
b2dsZVByaXZhdGU6OnJlcGxhY2VDb21wb25lbnRzKGNvbnN0IFJlcGxhY2VtZW50cyYgcmVwbGFj
ZW1lbnRzKQogewogICAgIHVybF9jYW5vbjo6UmF3Q2Fub25PdXRwdXRUPGNoYXI+IG91dHB1dDsK
QEAgLTU2MSw2ICs1NjgsMTEgQEAgU3RyaW5nIEtVUkw6OnBhdGgoKSBjb25zdAogICAgIHJldHVy
biBtX3VybC5jb21wb25lbnRTdHJpbmcobV91cmwubV9wYXJzZWQucGF0aCk7CiB9CiAKK1N0cmlu
ZyBLVVJMOjpyZXNvdXJjZU5hbWUoKSBjb25zdAoreworICAgIHJldHVybiBtX3VybC5wYXRoRm9y
UmVxdWVzdCgpOworfQorCiB2b2lkIEtVUkw6OnNldFByb3RvY29sKGNvbnN0IFN0cmluZyYgcHJv
dG9jb2wpCiB7CiAgICAgS1VSTEdvb2dsZVByaXZhdGU6OlJlcGxhY2VtZW50cyByZXBsYWNlbWVu
dHM7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL0tVUkxHb29nbGVQcml2YXRlLmggYi9X
ZWJDb3JlL3BsYXRmb3JtL0tVUkxHb29nbGVQcml2YXRlLmgKaW5kZXggYTcwY2NlNS4uZDVmMTMz
NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9LVVJMR29vZ2xlUHJpdmF0ZS5oCisrKyBi
L1dlYkNvcmUvcGxhdGZvcm0vS1VSTEdvb2dsZVByaXZhdGUuaApAQCAtNzAsNiArNzAsOSBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIFJldHVybnMgdGhlIHN1YnN0cmluZyBvZiB0
aGUgaW5wdXQgaWRlbnRpZmllZCBieSB0aGUgZ2l2ZW4gY29tcG9uZW50LgogICAgICAgICBTdHJp
bmcgY29tcG9uZW50U3RyaW5nKGNvbnN0IHVybF9wYXJzZTo6Q29tcG9uZW50JikgY29uc3Q7CiAK
KwkvLyBSZXR1cm5zIHRoZSBzdWJzdHJpbmcgb2YgdGhlIGlucHV0IGZvciByZXF1ZXN0LgorCVN0
cmluZyBwYXRoRm9yUmVxdWVzdCgpIGNvbnN0OworCiAgICAgICAgIC8vIFJlcGxhY2VzIHRoZSBn
aXZlbiBjb21wb25lbnRzLCBtb2RpZnlpbmcgdGhlIGN1cnJlbnQgVVJMLiBUaGUgY3VycmVudAog
ICAgICAgICAvLyBVUkwgbXVzdCBiZSB2YWxpZC4KICAgICAgICAgdHlwZWRlZiB1cmxfY2Fub246
OlJlcGxhY2VtZW50czx1cmxfcGFyc2U6OlVURjE2Q2hhcj4gUmVwbGFjZW1lbnRzOwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHAgYi9XZWJDb3Jl
L3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcAppbmRleCA2OTFmYTFjLi42MzA2YTA0
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcAor
KysgYi9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcApAQCAtMTM5LDcg
KzEzOSw3IEBAIFN0cmluZyBXZWJTb2NrZXRIYW5kc2hha2U6OmNsaWVudExvY2F0aW9uKCkgY29u
c3QKICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKFN0cmluZzo6bnVtYmVyKG1fdXJsLnBvcnQo
KSkpOwogICAgICAgICB9CiAgICAgfQotICAgIGJ1aWxkZXIuYXBwZW5kKG1fdXJsLnBhdGgoKSk7
CisgICAgYnVpbGRlci5hcHBlbmQobV91cmwucmVzb3VyY2VOYW1lKCkpOwogICAgIHJldHVybiBi
dWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKQEAgLTE0OCwxMSArMTQ4LDcgQEAgQ1N0cmluZyBXZWJT
b2NrZXRIYW5kc2hha2U6OmNsaWVudEhhbmRzaGFrZU1lc3NhZ2UoKSBjb25zdAogICAgIFN0cmlu
Z0J1aWxkZXIgYnVpbGRlcjsKIAogICAgIGJ1aWxkZXIuYXBwZW5kKCJHRVQgIik7Ci0gICAgYnVp
bGRlci5hcHBlbmQobV91cmwucGF0aCgpKTsKLSAgICBpZiAoIW1fdXJsLnF1ZXJ5KCkuaXNFbXB0
eSgpKSB7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCI/Iik7Ci0gICAgICAgIGJ1aWxkZXIuYXBw
ZW5kKG1fdXJsLnF1ZXJ5KCkpOwotICAgIH0KKyAgICBidWlsZGVyLmFwcGVuZChtX3VybC5yZXNv
dXJjZU5hbWUoKSk7CiAgICAgYnVpbGRlci5hcHBlbmQoIiBIVFRQLzEuMVxyXG4iKTsKICAgICBi
dWlsZGVyLmFwcGVuZCgiVXBncmFkZTogV2ViU29ja2V0XHJcbiIpOwogICAgIGJ1aWxkZXIuYXBw
ZW5kKCJDb25uZWN0aW9uOiBVcGdyYWRlXHJcbiIpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44000</attachid>
            <date>2009-11-29 17:59:44 -0800</date>
            <delta_ts>2009-11-30 21:21:45 -0800</delta_ts>
            <desc>WebSocket handshake check query component of URL</desc>
            <filename>bug-31617-20091130105942.patch</filename>
            <type>text/plain</type>
            <size>24953</size>
            <attacher name="Fumitoshi Ukai">ukai</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA1NmQ2ZDI5Li43NjRhYTRjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzAgQEAKKzIwMDktMTEt
MjkgIEZ1bWl0b3NoaSBVa2FpICA8dWthaUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViU29ja2V0IGhhbmRzaGFrZSBjaGVj
ayBxdWVyeSBjb21wb25lbnQgb2YgVVJMCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0zMTYxNworCisgICAgICAgICogcGxhdGZvcm0vbWFjL1NraXBwZWQ6
CisgICAgICAgICogcGxhdGZvcm0vd2luL1NraXBwZWQ6CisgICAgICAgICogd2Vic29ja2V0L3Rl
c3RzL2VjaG8tbG9jYXRpb25fd3NoLnB5OiBBZGRlZC4KKyAgICAgICAgKiB3ZWJzb2NrZXQvdGVz
dHMvbm8tcXVlcnlfd3NoLnB5OiBBZGRlZC4KKyAgICAgICAgKiB3ZWJzb2NrZXQvdGVzdHMvc2Ny
aXB0LXRlc3RzL3VybC13aXRoLWNyZWRlbnRpYWwuanM6IEFkZGVkLgorICAgICAgICAqIHdlYnNv
Y2tldC90ZXN0cy9zY3JpcHQtdGVzdHMvdXJsLXdpdGgtZW1wdHktcXVlcnkuanM6IEFkZGVkLgor
ICAgICAgICAqIHdlYnNvY2tldC90ZXN0cy9zY3JpcHQtdGVzdHMvdXJsLXdpdGgtZnJhZ21lbnQu
anM6IEFkZGVkLgorICAgICAgICAqIHdlYnNvY2tldC90ZXN0cy9zY3JpcHQtdGVzdHMvdXJsLXdp
dGgtcXVlcnktZm9yLW5vLXF1ZXJ5LmpzOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJzb2NrZXQvdGVz
dHMvc2NyaXB0LXRlc3RzL3VybC13aXRoLXF1ZXJ5LmpzOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJz
b2NrZXQvdGVzdHMvdXJsLXdpdGgtY3JlZGVudGlhbC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIHdlYnNvY2tldC90ZXN0cy91cmwtd2l0aC1jcmVkZW50aWFsLmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIHdlYnNvY2tldC90ZXN0cy91cmwtd2l0aC1lbXB0eS1xdWVyeS1leHBlY3RlZC50
eHQ6IEFkZGVkLgorICAgICAgICAqIHdlYnNvY2tldC90ZXN0cy91cmwtd2l0aC1lbXB0eS1xdWVy
eS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJzb2NrZXQvdGVzdHMvdXJsLXdpdGgtZnJhZ21l
bnQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiB3ZWJzb2NrZXQvdGVzdHMvdXJsLXdp
dGgtZnJhZ21lbnQuaHRtbDogQWRkZWQuCisgICAgICAgICogd2Vic29ja2V0L3Rlc3RzL3VybC13
aXRoLXF1ZXJ5LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogd2Vic29ja2V0L3Rlc3Rz
L3VybC13aXRoLXF1ZXJ5LWZvci1uby1xdWVyeS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIHdlYnNvY2tldC90ZXN0cy91cmwtd2l0aC1xdWVyeS1mb3Itbm8tcXVlcnkuaHRtbDogQWRk
ZWQuCisgICAgICAgICogd2Vic29ja2V0L3Rlc3RzL3VybC13aXRoLXF1ZXJ5Lmh0bWw6IEFkZGVk
LgorCiAyMDA5LTExLTI5ICBTaHUgQ2hhbmcgIDxDaGFuZy5TaHVAbm9raWEuY29tPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vbWFjL1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvU2tpcHBlZAppbmRl
eCBhMzYyZTk0Li4xZmRiZDY5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMv
U2tpcHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvU2tpcHBlZApAQCAtMTA4LDMg
KzEwOCw5IEBAIHBsdWdpbnMvcmVsb2FkcGx1Z2lucy1uby1wYWdlcy5odG1sCiAKICMgVGhlc2Ug
dGVzdCByZXF1aXJlIFF0IFdpZGdldHMKIHBsdWdpbnMvcXQtcXdpZGdldC1wbHVnaW4uaHRtbAor
CisjIE1pc3NpbmcgIldlYlNvY2tldCBpcyBjbG9zZWQiCit3ZWJzb2NrZXQvdGVzdHMvdXJsLXdp
dGgtY3JlZGVudGlhbC5odG1sCit3ZWJzb2NrZXQvdGVzdHMvdXJsLXdpdGgtZW1wdHktcXVlcnku
aHRtbAord2Vic29ja2V0L3Rlc3RzL3VybC13aXRoLWZyYWdtZW50Lmh0bWwKK3dlYnNvY2tldC90
ZXN0cy91cmwtd2l0aC1xdWVyeS5odG1sCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS93aW4vU2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCmluZGV4IGYw
N2QyMjcuLmY4OGYzM2EgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lw
cGVkCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCkBAIC03MTYsMyArNzE2
LDkgQEAgcGx1Z2lucy9xdC1xd2lkZ2V0LXBsdWdpbi5odG1sCiAjIEZhaWx1cmUgaW50cm9kdWNl
ZCBieSBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC81MTQyOQogIyBoYW1hamkgd2ls
bCBsb29rIGludG8gdGhpcy4KIGVkaXRpbmcvc2VsZWN0aW9uL2xhc3QtZW1wdHktaW5saW5lLmh0
bWwKKworIyBNaXNzaW5nICJXZWJTb2NrZXQgaXMgY2xvc2VkIgord2Vic29ja2V0L3Rlc3RzL3Vy
bC13aXRoLWNyZWRlbnRpYWwuaHRtbAord2Vic29ja2V0L3Rlc3RzL3VybC13aXRoLWVtcHR5LXF1
ZXJ5Lmh0bWwKK3dlYnNvY2tldC90ZXN0cy91cmwtd2l0aC1mcmFnbWVudC5odG1sCit3ZWJzb2Nr
ZXQvdGVzdHMvdXJsLXdpdGgtcXVlcnkuaHRtbApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vi
c29ja2V0L3Rlc3RzL2VjaG8tbG9jYXRpb25fd3NoLnB5IGIvTGF5b3V0VGVzdHMvd2Vic29ja2V0
L3Rlc3RzL2VjaG8tbG9jYXRpb25fd3NoLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjMzOTA1NzAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJzb2NrZXQv
dGVzdHMvZWNoby1sb2NhdGlvbl93c2gucHkKQEAgLTAsMCArMSwzOSBAQAorIyBDb3B5cmlnaHQg
KEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
IyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisKKworZnJvbSBtb2RfcHl3ZWJzb2NrZXQgaW1wb3J0IG1zZ3V0aWwKKworCitkZWYgd2Vi
X3NvY2tldF9kb19leHRyYV9oYW5kc2hha2UocmVxdWVzdCk6CisgICAgcGFzcworCisKK2RlZiB3
ZWJfc29ja2V0X3RyYW5zZmVyX2RhdGEocmVxdWVzdCk6CisgICAgcHJpbnQgcmVxdWVzdC53c19s
b2NhdGlvbgorICAgIG1zZ3V0aWwuc2VuZF9tZXNzYWdlKHJlcXVlc3QsIHJlcXVlc3Qud3NfbG9j
YXRpb24pCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvbm8tcXVlcnlf
d3NoLnB5IGIvTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL25vLXF1ZXJ5X3dzaC5weQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjc5NjE1Ci0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL25vLXF1ZXJ5X3dzaC5weQpAQCAtMCwwICsx
LDM4IEBACisjIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJp
YnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCitmcm9tIG1vZF9weXdlYnNvY2tldCBpbXBvcnQg
bXNndXRpbAorCisKK2RlZiB3ZWJfc29ja2V0X2RvX2V4dHJhX2hhbmRzaGFrZShyZXF1ZXN0KToK
KyAgICByZXF1ZXN0LndzX2xvY2F0aW9uID0gcmVxdWVzdC53c19yZXNvdXJjZS5zcGxpdCgnPycs
IDEpWzBdCisKKworZGVmIHdlYl9zb2NrZXRfdHJhbnNmZXJfZGF0YShyZXF1ZXN0KToKKyAgICBt
c2d1dGlsLnNlbmRfbWVzc2FnZShyZXF1ZXN0LCByZXF1ZXN0LndzX2xvY2F0aW9uKQpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3NjcmlwdC10ZXN0cy91cmwtd2l0aC1j
cmVkZW50aWFsLmpzIGIvTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3NjcmlwdC10ZXN0cy91
cmwtd2l0aC1jcmVkZW50aWFsLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjI5MzU3OTYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMv
c2NyaXB0LXRlc3RzL3VybC13aXRoLWNyZWRlbnRpYWwuanMKQEAgLTAsMCArMSwzNyBAQAorZGVz
Y3JpcHRpb24oIk1ha2Ugc3VyZSBoYW5kc2hha2Ugd2l0aCBVUkwgd2l0aCBjcmVkZW50YWlsIGlu
Zm8gc3VjY2Vzcy4iKTsKKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisKK3ZhciB1cmwgPSAid3M6Ly91
c2VyOnBhc3NAbG9jYWxob3N0Ojg4ODAvd2Vic29ja2V0L3Rlc3RzL2VjaG8tbG9jYXRpb24iOwor
dmFyIGhhbmRzaGFrZV9zdWNjZXNzID0gZmFsc2U7Cit2YXIgd3NfbG9jYXRpb247CisKK2Z1bmN0
aW9uIGVuZFRlc3QoKQoreworICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SUQpOworICAgIHNob3Vs
ZEJlVHJ1ZSgiaGFuZHNoYWtlX3N1Y2Nlc3MiKTsKKyAgICBzaG91bGRCZSgid3NfbG9jYXRpb24i
LCAnIndzOi8vbG9jYWxob3N0Ojg4ODAvd2Vic29ja2V0L3Rlc3RzL2VjaG8tbG9jYXRpb24iJyk7
CisgICAgaXNTdWNjZXNzZnVsbHlQYXJzZWQoKTsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RD
b250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9
CisKK2RlYnVnKCJ1cmw9IiArIHVybCk7Cit2YXIgd3MgPSBuZXcgV2ViU29ja2V0KHVybCk7Cit3
cy5vbm9wZW4gPSBmdW5jdGlvbiAoKSB7CisgICAgZGVidWcoIldlYlNvY2tldCBpcyBvcGVuIik7
CisgICAgaGFuZHNoYWtlX3N1Y2Nlc3MgPSB0cnVlOworfTsKK3dzLm9ubWVzc2FnZSA9IGZ1bmN0
aW9uIChldnQpIHsKKyAgICB3c19sb2NhdGlvbiA9IGV2dC5kYXRhOworICAgIGRlYnVnKCJyZWNl
aXZlZDoiICsgd3NfbG9jYXRpb24pOworICAgIHdzLmNsb3NlKCk7Cit9Oword3Mub25jbG9zZSA9
IGZ1bmN0aW9uICgpIHsKKyAgICBkZWJ1ZygiV2ViU29ja2V0IGlzIGNsb3NlZCIpOworICAgIGVu
ZFRlc3QoKTsKK307Cit2YXIgdGltZW91dElEID0gc2V0VGltZW91dCgiZW5kVGVzdCgpIiwgMjAw
MCk7CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3NjcmlwdC10ZXN0cy91cmwtd2l0aC1lbXB0eS1xdWVyeS5q
cyBiL0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy9zY3JpcHQtdGVzdHMvdXJsLXdpdGgtZW1w
dHktcXVlcnkuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM2ZWY3MAot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy9zY3JpcHQtdGVz
dHMvdXJsLXdpdGgtZW1wdHktcXVlcnkuanMKQEAgLTAsMCArMSwzNyBAQAorZGVzY3JpcHRpb24o
Ik1ha2Ugc3VyZSBoYW5kc2hha2Ugd2l0aCBVUkwgd2l0aCBlbXB0eSBxdWVyeSBjb21wb25lbnRz
IHN1Y2Nlc3MuIik7CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworCit2YXIgdXJsID0gIndzOi8vbG9j
YWxob3N0Ojg4ODAvd2Vic29ja2V0L3Rlc3RzL2VjaG8tbG9jYXRpb24/IjsKK3ZhciBoYW5kc2hh
a2Vfc3VjY2VzcyA9IGZhbHNlOwordmFyIHdzX2xvY2F0aW9uOworCitmdW5jdGlvbiBlbmRUZXN0
KCkKK3sKKyAgICBjbGVhclRpbWVvdXQodGltZW91dElEKTsKKyAgICBzaG91bGRCZVRydWUoImhh
bmRzaGFrZV9zdWNjZXNzIik7CisgICAgc2hvdWxkQmUoIndzX2xvY2F0aW9uIiwgInVybCIpOwor
ICAgIGlzU3VjY2Vzc2Z1bGx5UGFyc2VkKCk7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29u
dHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQor
CitkZWJ1ZygidXJsPSIgKyB1cmwpOwordmFyIHdzID0gbmV3IFdlYlNvY2tldCh1cmwpOword3Mu
b25vcGVuID0gZnVuY3Rpb24gKCkgeworICAgIGRlYnVnKCJXZWJTb2NrZXQgaXMgb3BlbiIpOwor
ICAgIGhhbmRzaGFrZV9zdWNjZXNzID0gdHJ1ZTsKK307Cit3cy5vbm1lc3NhZ2UgPSBmdW5jdGlv
biAoZXZ0KSB7CisgICAgd3NfbG9jYXRpb24gPSBldnQuZGF0YTsKKyAgICBkZWJ1ZygicmVjZWl2
ZWQ6IiArIHdzX2xvY2F0aW9uKTsKKyAgICB3cy5jbG9zZSgpOworfTsKK3dzLm9uY2xvc2UgPSBm
dW5jdGlvbiAoKSB7CisgICAgZGVidWcoIldlYlNvY2tldCBpcyBjbG9zZWQiKTsKKyAgICBlbmRU
ZXN0KCk7Cit9OwordmFyIHRpbWVvdXRJRCA9IHNldFRpbWVvdXQoImVuZFRlc3QoKSIsIDIwMDAp
OworCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3dlYnNvY2tldC90ZXN0cy9zY3JpcHQtdGVzdHMvdXJsLXdpdGgtZnJhZ21lbnQuanMgYi9M
YXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvc2NyaXB0LXRlc3RzL3VybC13aXRoLWZyYWdtZW50
LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5MDNkM2IKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvc2NyaXB0LXRlc3RzL3VybC13
aXRoLWZyYWdtZW50LmpzCkBAIC0wLDAgKzEsMzcgQEAKK2Rlc2NyaXB0aW9uKCJNYWtlIHN1cmUg
aGFuZHNoYWtlIHdpdGggVVJMIHdpdGggZnJhZ21lbnQgY29tcG9uZW50cyBzdWNjZXNzLiIpOwor
CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9s
bGVyLndhaXRVbnRpbERvbmUoKTsKKwordmFyIHVybCA9ICJ3czovL2xvY2FsaG9zdDo4ODgwL3dl
YnNvY2tldC90ZXN0cy9lY2hvLWxvY2F0aW9uI2ZyYWdtZW50IjsKK3ZhciBoYW5kc2hha2Vfc3Vj
Y2VzcyA9IGZhbHNlOwordmFyIHdzX2xvY2F0aW9uOworCitmdW5jdGlvbiBlbmRUZXN0KCkKK3sK
KyAgICBjbGVhclRpbWVvdXQodGltZW91dElEKTsKKyAgICBzaG91bGRCZVRydWUoImhhbmRzaGFr
ZV9zdWNjZXNzIik7CisgICAgc2hvdWxkQmUoIndzX2xvY2F0aW9uIiwgJyJ3czovL2xvY2FsaG9z
dDo4ODgwL3dlYnNvY2tldC90ZXN0cy9lY2hvLWxvY2F0aW9uIicpOworICAgIGlzU3VjY2Vzc2Z1
bGx5UGFyc2VkKCk7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAg
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCitkZWJ1ZygidXJsPSIg
KyB1cmwpOwordmFyIHdzID0gbmV3IFdlYlNvY2tldCh1cmwpOword3Mub25vcGVuID0gZnVuY3Rp
b24gKCkgeworICAgIGRlYnVnKCJXZWJTb2NrZXQgaXMgb3BlbiIpOworICAgIGhhbmRzaGFrZV9z
dWNjZXNzID0gdHJ1ZTsKK307Cit3cy5vbm1lc3NhZ2UgPSBmdW5jdGlvbiAoZXZ0KSB7CisgICAg
d3NfbG9jYXRpb24gPSBldnQuZGF0YTsKKyAgICBkZWJ1ZygicmVjZWl2ZWQ6IiArIHdzX2xvY2F0
aW9uKTsKKyAgICB3cy5jbG9zZSgpOworfTsKK3dzLm9uY2xvc2UgPSBmdW5jdGlvbiAoKSB7Cisg
ICAgZGVidWcoIldlYlNvY2tldCBpcyBjbG9zZWQiKTsKKyAgICBlbmRUZXN0KCk7Cit9OwordmFy
IHRpbWVvdXRJRCA9IHNldFRpbWVvdXQoImVuZFRlc3QoKSIsIDIwMDApOworCit2YXIgc3VjY2Vz
c2Z1bGx5UGFyc2VkID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYnNvY2tldC90
ZXN0cy9zY3JpcHQtdGVzdHMvdXJsLXdpdGgtcXVlcnktZm9yLW5vLXF1ZXJ5LmpzIGIvTGF5b3V0
VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3NjcmlwdC10ZXN0cy91cmwtd2l0aC1xdWVyeS1mb3Itbm8t
cXVlcnkuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNhYjhkZAotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy9zY3JpcHQtdGVzdHMv
dXJsLXdpdGgtcXVlcnktZm9yLW5vLXF1ZXJ5LmpzCkBAIC0wLDAgKzEsMzcgQEAKK2Rlc2NyaXB0
aW9uKCJNYWtlIHN1cmUgaGFuZHNoYWtlIHdpdGggVVJMIHdpdGggcXVlcnkgY29tcG9uZW50cyBm
YWlscyBhZ2FpbnN0IHNlcnZlciB0aGF0IGRvZXNuJ3Qgc3VwcG9ydCBxdWVyeSBjb21wb25lbnQu
Iik7CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworCit2YXIgdXJsID0gIndzOi8vbG9jYWxob3N0Ojg4
ODAvd2Vic29ja2V0L3Rlc3RzL25vLXF1ZXJ5LXN1cHBvcnQ/IjsKK3ZhciBoYW5kc2hha2Vfc3Vj
Y2VzcyA9IGZhbHNlOwordmFyIHdzX2xvY2F0aW9uOworCitmdW5jdGlvbiBlbmRUZXN0KCkKK3sK
KyAgICBjbGVhclRpbWVvdXQodGltZW91dElEKTsKKyAgICBzaG91bGRCZUZhbHNlKCJoYW5kc2hh
a2Vfc3VjY2VzcyIpOworICAgIHNob3VsZEJlVW5kZWZpbmVkKCJ3c19sb2NhdGlvbiIpOworICAg
IGlzU3VjY2Vzc2Z1bGx5UGFyc2VkKCk7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCitk
ZWJ1ZygidXJsPSIgKyB1cmwpOwordmFyIHdzID0gbmV3IFdlYlNvY2tldCh1cmwpOword3Mub25v
cGVuID0gZnVuY3Rpb24gKCkgeworICAgIGRlYnVnKCJXZWJTb2NrZXQgaXMgb3BlbiIpOworICAg
IGhhbmRzaGFrZV9zdWNjZXNzID0gdHJ1ZTsKK307Cit3cy5vbm1lc3NnZSA9IGZ1bmN0aW9uIChl
dnQpIHsKKyAgICB3c19sb2NhdGlvbiA9IGV2dC5kYXRhOworICAgIGRlYnVnKCJyZWNlaXZlZDoi
ICsgd3NfbG9jYXRpb24pOworICAgIHdzLmNsb3NlKCk7Cit9Oword3Mub25jbG9zZSA9IGZ1bmN0
aW9uICgpIHsKKyAgICBkZWJ1ZygiV2ViU29ja2V0IGlzIGNsb3NlZCIpOworICAgIGVuZFRlc3Qo
KTsKK307Cit2YXIgdGltZW91dElEID0gc2V0VGltZW91dCgiZW5kVGVzdCgpIiwgMjAwMCk7CisK
K3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
d2Vic29ja2V0L3Rlc3RzL3NjcmlwdC10ZXN0cy91cmwtd2l0aC1xdWVyeS5qcyBiL0xheW91dFRl
c3RzL3dlYnNvY2tldC90ZXN0cy9zY3JpcHQtdGVzdHMvdXJsLXdpdGgtcXVlcnkuanMKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNiYWVlYwotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy9zY3JpcHQtdGVzdHMvdXJsLXdpdGgtcXVlcnku
anMKQEAgLTAsMCArMSwzNyBAQAorZGVzY3JpcHRpb24oIk1ha2Ugc3VyZSBoYW5kc2hha2Ugd2l0
aCBVUkwgd2l0aCBxdWVyeSBjb21wb25lbnRzIHN1Y2Nlc3MuIik7CisKK2lmICh3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9u
ZSgpOworCit2YXIgdXJsID0gIndzOi8vbG9jYWxob3N0Ojg4ODAvd2Vic29ja2V0L3Rlc3RzL2Vj
aG8tbG9jYXRpb24/cT12IjsKK3ZhciBoYW5kc2hha2Vfc3VjY2VzcyA9IGZhbHNlOwordmFyIHdz
X2xvY2F0aW9uOworCitmdW5jdGlvbiBlbmRUZXN0KCkKK3sKKyAgICBjbGVhclRpbWVvdXQodGlt
ZW91dElEKTsKKyAgICBzaG91bGRCZVRydWUoImhhbmRzaGFrZV9zdWNjZXNzIik7CisgICAgc2hv
dWxkQmUoIndzX2xvY2F0aW9uIiwgInVybCIpOworICAgIGlzU3VjY2Vzc2Z1bGx5UGFyc2VkKCk7
CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCitkZWJ1ZygidXJsPSIgKyB1cmwpOwordmFy
IHdzID0gbmV3IFdlYlNvY2tldCh1cmwpOword3Mub25vcGVuID0gZnVuY3Rpb24gKCkgeworICAg
IGRlYnVnKCJXZWJTb2NrZXQgaXMgb3BlbiIpOworICAgIGhhbmRzaGFrZV9zdWNjZXNzID0gdHJ1
ZTsKK307Cit3cy5vbm1lc3NhZ2UgPSBmdW5jdGlvbiAoZXZ0KSB7CisgICAgd3NfbG9jYXRpb24g
PSBldnQuZGF0YTsKKyAgICBkZWJ1ZygicmVjZWl2ZWQ6IiArIHdzX2xvY2F0aW9uKTsKKyAgICB3
cy5jbG9zZSgpOworfTsKK3dzLm9uY2xvc2UgPSBmdW5jdGlvbiAoKSB7CisgICAgZGVidWcoIldl
YlNvY2tldCBpcyBjbG9zZWQiKTsKKyAgICBlbmRUZXN0KCk7Cit9OwordmFyIHRpbWVvdXRJRCA9
IHNldFRpbWVvdXQoImVuZFRlc3QoKSIsIDIwMDApOworCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2Vk
ID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy91cmwtd2l0
aC1jcmVkZW50aWFsLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy91
cmwtd2l0aC1jcmVkZW50aWFsLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi42MGFmZmZmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2Vic29j
a2V0L3Rlc3RzL3VybC13aXRoLWNyZWRlbnRpYWwtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTQg
QEAKK01ha2Ugc3VyZSBoYW5kc2hha2Ugd2l0aCBVUkwgd2l0aCBjcmVkZW50YWlsIGluZm8gc3Vj
Y2Vzcy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNz
YWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCit1cmw9d3M6Ly91c2VyOnBhc3NA
bG9jYWxob3N0Ojg4ODAvd2Vic29ja2V0L3Rlc3RzL2VjaG8tbG9jYXRpb24KK1dlYlNvY2tldCBp
cyBvcGVuCityZWNlaXZlZDp3czovL2xvY2FsaG9zdDo4ODgwL3dlYnNvY2tldC90ZXN0cy9lY2hv
LWxvY2F0aW9uCitXZWJTb2NrZXQgaXMgY2xvc2VkCitQQVNTIGhhbmRzaGFrZV9zdWNjZXNzIGlz
IHRydWUKK1BBU1Mgd3NfbG9jYXRpb24gaXMgIndzOi8vbG9jYWxob3N0Ojg4ODAvd2Vic29ja2V0
L3Rlc3RzL2VjaG8tbG9jYXRpb24iCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisK
K1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3Rz
L3VybC13aXRoLWNyZWRlbnRpYWwuaHRtbCBiL0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy91
cmwtd2l0aC1jcmVkZW50aWFsLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uN2FjNTU2YQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0
cy91cmwtd2l0aC1jcmVkZW50aWFsLmh0bWwKQEAgLTAsMCArMSwxMyBAQAorPCFET0NUWVBFIEhU
TUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5r
IHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1z
dHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qt
cHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9q
cy10ZXN0LXBvc3QtZnVuY3Rpb24uanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2
IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3Jp
cHQgc3JjPSJzY3JpcHQtdGVzdHMvdXJsLXdpdGgtY3JlZGVudGlhbC5qcyI+PC9zY3JpcHQ+Cis8
L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMv
dXJsLXdpdGgtZW1wdHktcXVlcnktZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2Vic29ja2V0
L3Rlc3RzL3VybC13aXRoLWVtcHR5LXF1ZXJ5LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5mYWU5ZTY5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvd2Vic29ja2V0L3Rlc3RzL3VybC13aXRoLWVtcHR5LXF1ZXJ5LWV4cGVjdGVkLnR4dApAQCAt
MCwwICsxLDE0IEBACitNYWtlIHN1cmUgaGFuZHNoYWtlIHdpdGggVVJMIHdpdGggZW1wdHkgcXVl
cnkgY29tcG9uZW50cyBzdWNjZXNzLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJp
ZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKK3Vy
bD13czovL2xvY2FsaG9zdDo4ODgwL3dlYnNvY2tldC90ZXN0cy9lY2hvLWxvY2F0aW9uPworV2Vi
U29ja2V0IGlzIG9wZW4KK3JlY2VpdmVkOndzOi8vbG9jYWxob3N0Ojg4ODAvd2Vic29ja2V0L3Rl
c3RzL2VjaG8tbG9jYXRpb24/CitXZWJTb2NrZXQgaXMgY2xvc2VkCitQQVNTIGhhbmRzaGFrZV9z
dWNjZXNzIGlzIHRydWUKK1BBU1Mgd3NfbG9jYXRpb24gaXMgdXJsCitQQVNTIHN1Y2Nlc3NmdWxs
eVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvd2Vic29ja2V0L3Rlc3RzL3VybC13aXRoLWVtcHR5LXF1ZXJ5Lmh0bWwgYi9MYXlvdXRUZXN0
cy93ZWJzb2NrZXQvdGVzdHMvdXJsLXdpdGgtZW1wdHktcXVlcnkuaHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjdmMGIzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3VybC13aXRoLWVtcHR5LXF1ZXJ5Lmh0bWwKQEAgLTAsMCAr
MSwxMyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgor
PGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZmFzdC9q
cy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3Qv
anMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8u
Li9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QtZnVuY3Rpb24uanMiPjwvc2NyaXB0Pgor
PC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2IGlkPSJj
b25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvdXJsLXdpdGgtZW1wdHkt
cXVlcnkuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3VybC13aXRoLWZyYWdtZW50LWV4cGVjdGVkLnR4dCBiL0xh
eW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy91cmwtd2l0aC1mcmFnbWVudC1leHBlY3RlZC50eHQK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg0ODcyOAotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy91cmwtd2l0aC1mcmFnbWVudC1leHBl
Y3RlZC50eHQKQEAgLTAsMCArMSwxNCBAQAorTWFrZSBzdXJlIGhhbmRzaGFrZSB3aXRoIFVSTCB3
aXRoIGZyYWdtZW50IGNvbXBvbmVudHMgc3VjY2Vzcy4KKworT24gc3VjY2VzcywgeW91IHdpbGwg
c2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExF
VEUiLgorCit1cmw9d3M6Ly9sb2NhbGhvc3Q6ODg4MC93ZWJzb2NrZXQvdGVzdHMvZWNoby1sb2Nh
dGlvbiNmcmFnbWVudAorV2ViU29ja2V0IGlzIG9wZW4KK3JlY2VpdmVkOndzOi8vbG9jYWxob3N0
Ojg4ODAvd2Vic29ja2V0L3Rlc3RzL2VjaG8tbG9jYXRpb24KK1dlYlNvY2tldCBpcyBjbG9zZWQK
K1BBU1MgaGFuZHNoYWtlX3N1Y2Nlc3MgaXMgdHJ1ZQorUEFTUyB3c19sb2NhdGlvbiBpcyAid3M6
Ly9sb2NhbGhvc3Q6ODg4MC93ZWJzb2NrZXQvdGVzdHMvZWNoby1sb2NhdGlvbiIKK1BBU1Mgc3Vj
Y2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvdXJsLXdpdGgtZnJhZ21lbnQuaHRtbCBiL0xheW91
dFRlc3RzL3dlYnNvY2tldC90ZXN0cy91cmwtd2l0aC1mcmFnbWVudC5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiMzQ3NzAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvdXJsLXdpdGgtZnJhZ21lbnQuaHRtbApAQCAtMCwwICsx
LDEzIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8
aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9mYXN0L2pz
L3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9q
cy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4u
L2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC1mdW5jdGlvbi5qcyI+PC9zY3JpcHQ+Cis8
L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4KKzxkaXYgaWQ9ImNv
bnNvbGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy91cmwtd2l0aC1mcmFnbWVu
dC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy93ZWJzb2NrZXQvdGVzdHMvdXJsLXdpdGgtcXVlcnktZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvd2Vic29ja2V0L3Rlc3RzL3VybC13aXRoLXF1ZXJ5LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDBmZjU1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3VybC13aXRoLXF1ZXJ5LWV4cGVjdGVkLnR4dApAQCAt
MCwwICsxLDE0IEBACitNYWtlIHN1cmUgaGFuZHNoYWtlIHdpdGggVVJMIHdpdGggcXVlcnkgY29t
cG9uZW50cyBzdWNjZXNzLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2Yg
IlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKK3VybD13czov
L2xvY2FsaG9zdDo4ODgwL3dlYnNvY2tldC90ZXN0cy9lY2hvLWxvY2F0aW9uP3E9dgorV2ViU29j
a2V0IGlzIG9wZW4KK3JlY2VpdmVkOndzOi8vbG9jYWxob3N0Ojg4ODAvd2Vic29ja2V0L3Rlc3Rz
L2VjaG8tbG9jYXRpb24/cT12CitXZWJTb2NrZXQgaXMgY2xvc2VkCitQQVNTIGhhbmRzaGFrZV9z
dWNjZXNzIGlzIHRydWUKK1BBU1Mgd3NfbG9jYXRpb24gaXMgdXJsCitQQVNTIHN1Y2Nlc3NmdWxs
eVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvd2Vic29ja2V0L3Rlc3RzL3VybC13aXRoLXF1ZXJ5LWZvci1uby1xdWVyeS1leHBlY3RlZC50
eHQgYi9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvdXJsLXdpdGgtcXVlcnktZm9yLW5vLXF1
ZXJ5LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmE5
ZDQ4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3VybC13
aXRoLXF1ZXJ5LWZvci1uby1xdWVyeS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMiBAQAorTWFr
ZSBzdXJlIGhhbmRzaGFrZSB3aXRoIFVSTCB3aXRoIHF1ZXJ5IGNvbXBvbmVudHMgZmFpbHMgYWdh
aW5zdCBzZXJ2ZXIgdGhhdCBkb2Vzbid0IHN1cHBvcnQgcXVlcnkgY29tcG9uZW50LgorCitPbiBz
dWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dl
ZCBieSAiVEVTVCBDT01QTEVURSIuCisKK3VybD13czovL2xvY2FsaG9zdDo4ODgwL3dlYnNvY2tl
dC90ZXN0cy9uby1xdWVyeS1zdXBwb3J0PworV2ViU29ja2V0IGlzIGNsb3NlZAorUEFTUyBoYW5k
c2hha2Vfc3VjY2VzcyBpcyBmYWxzZQorUEFTUyB3c19sb2NhdGlvbiBpcyB1bmRlZmluZWQuCitQ
QVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3VybC13aXRoLXF1ZXJ5LWZvci1uby1x
dWVyeS5odG1sIGIvTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3VybC13aXRoLXF1ZXJ5LWZv
ci1uby1xdWVyeS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiMGZj
MzkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvdXJsLXdp
dGgtcXVlcnktZm9yLW5vLXF1ZXJ5Lmh0bWwKQEAgLTAsMCArMSwxMyBAQAorPCFET0NUWVBFIEhU
TUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5r
IHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1z
dHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qt
cHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9q
cy10ZXN0LXBvc3QtZnVuY3Rpb24uanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2
IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3Jp
cHQgc3JjPSJzY3JpcHQtdGVzdHMvdXJsLXdpdGgtcXVlcnktZm9yLW5vLXF1ZXJ5LmpzIj48L3Nj
cmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYnNvY2tl
dC90ZXN0cy91cmwtd2l0aC1xdWVyeS5odG1sIGIvTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3Rz
L3VybC13aXRoLXF1ZXJ5Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
YWM5MDUwMgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy91
cmwtd2l0aC1xdWVyeS5odG1sCkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJ
QyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0
eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3Nz
Ij4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1w
b3N0LWZ1bmN0aW9uLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0iZGVz
Y3JpcHRpb24iPjwvZGl2PgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0IHNyYz0i
c2NyaXB0LXRlc3RzL3VybC13aXRoLXF1ZXJ5LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5k
ZXggMmM3MTFiMS4uNGYxMjg4MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIv
V2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNyBAQAorMjAwOS0xMS0yOSAgRnVtaXRvc2hp
IFVrYWkgIDx1a2FpQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBXZWJTb2NrZXQgaGFuZHNoYWtlIGNoZWNrIHF1ZXJ5IGNvbXBv
bmVudCBvZiBVUkwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTMxNjE3CisKKyAgICAgICAgVGVzdHM6IHdlYnNvY2tldC90ZXN0cy91cmwtd2l0aC1jcmVk
ZW50aWFsLmh0bWwKKyAgICAgICAgICAgICAgIHdlYnNvY2tldC90ZXN0cy91cmwtd2l0aC1lbXB0
eS1xdWVyeS5odG1sCisgICAgICAgICAgICAgICB3ZWJzb2NrZXQvdGVzdHMvdXJsLXdpdGgtZnJh
Z21lbnQuaHRtbAorICAgICAgICAgICAgICAgd2Vic29ja2V0L3Rlc3RzL3VybC13aXRoLXF1ZXJ5
LWZvci1uby1xdWVyeS5odG1sCisgICAgICAgICAgICAgICB3ZWJzb2NrZXQvdGVzdHMvdXJsLXdp
dGgtcXVlcnkuaHRtbAorCisgICAgICAgICogcGxhdGZvcm0vS1VSTC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpLVVJMOjpyZXNvdXJjZU5hbWUpOgorICAgICAgICAqIHBsYXRmb3JtL0tVUkwuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9LVVJMR29vZ2xlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OktV
UkxHb29nbGVQcml2YXRlOjpwYXRoRm9yUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpLVVJM
OjpyZXNvdXJjZU5hbWUpOgorICAgICAgICAqIHBsYXRmb3JtL0tVUkxHb29nbGVQcml2YXRlLmg6
CisgICAgICAgICogd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6V2ViU29ja2V0SGFuZHNoYWtlOjpjbGllbnRMb2NhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJTb2NrZXRIYW5kc2hha2U6OmNsaWVudEhhbmRzaGFrZU1lc3NhZ2UpOgorCiAy
MDA5LTExLTI5ICBEYW5pZWwgQmF0ZXMgIDxkYmF0ZXNAd2Via2l0Lm9yZz4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vS1VS
TC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL0tVUkwuY3BwCmluZGV4IDNjOTM5NTIuLjc1OGI3OGUg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vS1VSTC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0
Zm9ybS9LVVJMLmNwcApAQCAtNjU5LDYgKzY1OSwxMSBAQCBTdHJpbmcgS1VSTDo6cGF0aCgpIGNv
bnN0CiAgICAgcmV0dXJuIGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyhtX3N0cmluZy5zdWJzdHJp
bmcobV9wb3J0RW5kLCBtX3BhdGhFbmQgLSBtX3BvcnRFbmQpKTsgCiB9CiAKK1N0cmluZyBLVVJM
OjpyZXNvdXJjZU5hbWUoKSBjb25zdAoreworICAgIHJldHVybiBwYXRoKCkgKyBtX3N0cmluZy5z
dWJzdHJpbmcobV9wYXRoRW5kLCBtX3F1ZXJ5RW5kIC0gbV9wYXRoRW5kKTsKK30KKwogdm9pZCBL
VVJMOjpzZXRQcm90b2NvbChjb25zdCBTdHJpbmcmIHMpCiB7CiAgICAgLy8gRklYTUU6IE5vbi1B
U0NJSSBjaGFyYWN0ZXJzIG11c3QgYmUgZW5jb2RlZCBhbmQgZXNjYXBlZCB0byBtYXRjaCBwYXJz
ZSgpIGV4cGVjdGF0aW9ucywKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vS1VSTC5oIGIv
V2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmgKaW5kZXggOTkzODQyZS4uOGI5ZGFjNyAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmgK
QEAgLTEyNiw2ICsxMjYsNyBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIHBhdGgoKSBjb25zdDsKICAg
ICBTdHJpbmcgbGFzdFBhdGhDb21wb25lbnQoKSBjb25zdDsKICAgICBTdHJpbmcgcXVlcnkoKSBj
b25zdDsKKyAgICBTdHJpbmcgcmVzb3VyY2VOYW1lKCkgY29uc3Q7CiAgICAgU3RyaW5nIGZyYWdt
ZW50SWRlbnRpZmllcigpIGNvbnN0OwogICAgIGJvb2wgaGFzRnJhZ21lbnRJZGVudGlmaWVyKCkg
Y29uc3Q7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vS1VSTEdvb2dsZS5jcHAgYi9X
ZWJDb3JlL3BsYXRmb3JtL0tVUkxHb29nbGUuY3BwCmluZGV4IDc2M2JmM2IuLmZjMTA5M2MgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vS1VSTEdvb2dsZS5jcHAKKysrIGIvV2ViQ29yZS9w
bGF0Zm9ybS9LVVJMR29vZ2xlLmNwcApAQCAtMzA0LDYgKzMwNCwxMyBAQCBTdHJpbmcgS1VSTEdv
b2dsZVByaXZhdGU6OmNvbXBvbmVudFN0cmluZyhjb25zdCB1cmxfcGFyc2U6OkNvbXBvbmVudCYg
Y29tcCkgY29ucwogICAgIHJldHVybiBzdHJpbmcoKS5zdWJzdHJpbmcoY29tcC5iZWdpbiwgY29t
cC5sZW4pOwogfQogCitTdHJpbmcgS1VSTEdvb2dsZVByaXZhdGU6OnBhdGhGb3JSZXF1ZXN0KCkg
Y29uc3QgeworICAgIGlmIChtX3BhcnNlZC5yZWYubGVuID49IDApCisgICAgICAgIHJldHVybiBz
dHJpbmcoKS5zdWJzdHJpbmcobV9wYXJzZWQucGF0aC5iZWdpbiwKKyAgICAgICAgICAgIG1fcGFy
c2VkLnJlZi5iZWdpbiAtIG1fcGFyc2VkLnBhdGguYmVnaW4gLSAxKTsKKyAgICByZXR1cm4gc3Ry
aW5nKCkuc3Vic3RyaW5nKG1fcGFyc2VkLnBhdGguYmVnaW4pOworfQorCiB2b2lkIEtVUkxHb29n
bGVQcml2YXRlOjpyZXBsYWNlQ29tcG9uZW50cyhjb25zdCBSZXBsYWNlbWVudHMmIHJlcGxhY2Vt
ZW50cykKIHsKICAgICB1cmxfY2Fub246OlJhd0Nhbm9uT3V0cHV0VDxjaGFyPiBvdXRwdXQ7CkBA
IC01NjEsNiArNTY4LDExIEBAIFN0cmluZyBLVVJMOjpwYXRoKCkgY29uc3QKICAgICByZXR1cm4g
bV91cmwuY29tcG9uZW50U3RyaW5nKG1fdXJsLm1fcGFyc2VkLnBhdGgpOwogfQogCitTdHJpbmcg
S1VSTDo6cmVzb3VyY2VOYW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV91cmwucGF0aEZvclJl
cXVlc3QoKTsKK30KKwogdm9pZCBLVVJMOjpzZXRQcm90b2NvbChjb25zdCBTdHJpbmcmIHByb3Rv
Y29sKQogewogICAgIEtVUkxHb29nbGVQcml2YXRlOjpSZXBsYWNlbWVudHMgcmVwbGFjZW1lbnRz
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9LVVJMR29vZ2xlUHJpdmF0ZS5oIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9LVVJMR29vZ2xlUHJpdmF0ZS5oCmluZGV4IGE3MGNjZTUuLjBiMGE0NGUg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vS1VSTEdvb2dsZVByaXZhdGUuaAorKysgYi9X
ZWJDb3JlL3BsYXRmb3JtL0tVUkxHb29nbGVQcml2YXRlLmgKQEAgLTcwLDYgKzcwLDkgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBSZXR1cm5zIHRoZSBzdWJzdHJpbmcgb2YgdGhl
IGlucHV0IGlkZW50aWZpZWQgYnkgdGhlIGdpdmVuIGNvbXBvbmVudC4KICAgICAgICAgU3RyaW5n
IGNvbXBvbmVudFN0cmluZyhjb25zdCB1cmxfcGFyc2U6OkNvbXBvbmVudCYpIGNvbnN0OwogCisg
ICAgICAgIC8vIFJldHVybnMgdGhlIHN1YnN0cmluZyBvZiB0aGUgaW5wdXQgZm9yIHJlcXVlc3Qu
CisgICAgICAgIFN0cmluZyBwYXRoRm9yUmVxdWVzdCgpIGNvbnN0OworCiAgICAgICAgIC8vIFJl
cGxhY2VzIHRoZSBnaXZlbiBjb21wb25lbnRzLCBtb2RpZnlpbmcgdGhlIGN1cnJlbnQgVVJMLiBU
aGUgY3VycmVudAogICAgICAgICAvLyBVUkwgbXVzdCBiZSB2YWxpZC4KICAgICAgICAgdHlwZWRl
ZiB1cmxfY2Fub246OlJlcGxhY2VtZW50czx1cmxfcGFyc2U6OlVURjE2Q2hhcj4gUmVwbGFjZW1l
bnRzOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5j
cHAgYi9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcAppbmRleCA2OTFm
YTFjLi42MzA2YTA0IDEwMDY0NAotLS0gYS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0SGFu
ZHNoYWtlLmNwcAorKysgYi9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNw
cApAQCAtMTM5LDcgKzEzOSw3IEBAIFN0cmluZyBXZWJTb2NrZXRIYW5kc2hha2U6OmNsaWVudExv
Y2F0aW9uKCkgY29uc3QKICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKFN0cmluZzo6bnVtYmVy
KG1fdXJsLnBvcnQoKSkpOwogICAgICAgICB9CiAgICAgfQotICAgIGJ1aWxkZXIuYXBwZW5kKG1f
dXJsLnBhdGgoKSk7CisgICAgYnVpbGRlci5hcHBlbmQobV91cmwucmVzb3VyY2VOYW1lKCkpOwog
ICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKQEAgLTE0OCwxMSArMTQ4LDcgQEAg
Q1N0cmluZyBXZWJTb2NrZXRIYW5kc2hha2U6OmNsaWVudEhhbmRzaGFrZU1lc3NhZ2UoKSBjb25z
dAogICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKIAogICAgIGJ1aWxkZXIuYXBwZW5kKCJHRVQg
Iik7Ci0gICAgYnVpbGRlci5hcHBlbmQobV91cmwucGF0aCgpKTsKLSAgICBpZiAoIW1fdXJsLnF1
ZXJ5KCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCI/Iik7Ci0gICAgICAg
IGJ1aWxkZXIuYXBwZW5kKG1fdXJsLnF1ZXJ5KCkpOwotICAgIH0KKyAgICBidWlsZGVyLmFwcGVu
ZChtX3VybC5yZXNvdXJjZU5hbWUoKSk7CiAgICAgYnVpbGRlci5hcHBlbmQoIiBIVFRQLzEuMVxy
XG4iKTsKICAgICBidWlsZGVyLmFwcGVuZCgiVXBncmFkZTogV2ViU29ja2V0XHJcbiIpOwogICAg
IGJ1aWxkZXIuYXBwZW5kKCJDb25uZWN0aW9uOiBVcGdyYWRlXHJcbiIpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44052</attachid>
            <date>2009-11-30 21:21:52 -0800</date>
            <delta_ts>2009-12-01 21:25:42 -0800</delta_ts>
            <desc>WebSocket handshake check query component of URL</desc>
            <filename>bug-31617-20091201142150.patch</filename>
            <type>text/plain</type>
            <size>25067</size>
            <attacher name="Fumitoshi Ukai">ukai</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBhNzg0ODY4Li4zZTJjMTUxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzAgQEAKKzIwMDktMTEt
MzAgIEZ1bWl0b3NoaSBVa2FpICA8dWthaUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViU29ja2V0IGhhbmRzaGFrZSBjaGVj
ayBxdWVyeSBjb21wb25lbnQgb2YgVVJMCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0zMTYxNworCisgICAgICAgICogcGxhdGZvcm0vbWFjL1NraXBwZWQ6
CisgICAgICAgICogcGxhdGZvcm0vd2luL1NraXBwZWQ6CisgICAgICAgICogd2Vic29ja2V0L3Rl
c3RzL2VjaG8tbG9jYXRpb25fd3NoLnB5OiBBZGRlZC4KKyAgICAgICAgKiB3ZWJzb2NrZXQvdGVz
dHMvbm8tcXVlcnlfd3NoLnB5OiBBZGRlZC4KKyAgICAgICAgKiB3ZWJzb2NrZXQvdGVzdHMvc2Ny
aXB0LXRlc3RzL3VybC13aXRoLWNyZWRlbnRpYWwuanM6IEFkZGVkLgorICAgICAgICAqIHdlYnNv
Y2tldC90ZXN0cy9zY3JpcHQtdGVzdHMvdXJsLXdpdGgtZW1wdHktcXVlcnkuanM6IEFkZGVkLgor
ICAgICAgICAqIHdlYnNvY2tldC90ZXN0cy9zY3JpcHQtdGVzdHMvdXJsLXdpdGgtZnJhZ21lbnQu
anM6IEFkZGVkLgorICAgICAgICAqIHdlYnNvY2tldC90ZXN0cy9zY3JpcHQtdGVzdHMvdXJsLXdp
dGgtcXVlcnktZm9yLW5vLXF1ZXJ5LmpzOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJzb2NrZXQvdGVz
dHMvc2NyaXB0LXRlc3RzL3VybC13aXRoLXF1ZXJ5LmpzOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJz
b2NrZXQvdGVzdHMvdXJsLXdpdGgtY3JlZGVudGlhbC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIHdlYnNvY2tldC90ZXN0cy91cmwtd2l0aC1jcmVkZW50aWFsLmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIHdlYnNvY2tldC90ZXN0cy91cmwtd2l0aC1lbXB0eS1xdWVyeS1leHBlY3RlZC50
eHQ6IEFkZGVkLgorICAgICAgICAqIHdlYnNvY2tldC90ZXN0cy91cmwtd2l0aC1lbXB0eS1xdWVy
eS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJzb2NrZXQvdGVzdHMvdXJsLXdpdGgtZnJhZ21l
bnQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiB3ZWJzb2NrZXQvdGVzdHMvdXJsLXdp
dGgtZnJhZ21lbnQuaHRtbDogQWRkZWQuCisgICAgICAgICogd2Vic29ja2V0L3Rlc3RzL3VybC13
aXRoLXF1ZXJ5LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogd2Vic29ja2V0L3Rlc3Rz
L3VybC13aXRoLXF1ZXJ5LWZvci1uby1xdWVyeS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIHdlYnNvY2tldC90ZXN0cy91cmwtd2l0aC1xdWVyeS1mb3Itbm8tcXVlcnkuaHRtbDogQWRk
ZWQuCisgICAgICAgICogd2Vic29ja2V0L3Rlc3RzL3VybC13aXRoLXF1ZXJ5Lmh0bWw6IEFkZGVk
LgorCiAyMDA5LTExLTMwICBFbnJpY2EgQ2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9tYWMvU2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9Ta2lwcGVkCmlu
ZGV4IGEzNjJlOTQuLjFmZGJkNjkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21h
Yy9Ta2lwcGVkCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9Ta2lwcGVkCkBAIC0xMDgs
MyArMTA4LDkgQEAgcGx1Z2lucy9yZWxvYWRwbHVnaW5zLW5vLXBhZ2VzLmh0bWwKIAogIyBUaGVz
ZSB0ZXN0IHJlcXVpcmUgUXQgV2lkZ2V0cwogcGx1Z2lucy9xdC1xd2lkZ2V0LXBsdWdpbi5odG1s
CisKKyMgTWlzc2luZyAiV2ViU29ja2V0IGlzIGNsb3NlZCIKK3dlYnNvY2tldC90ZXN0cy91cmwt
d2l0aC1jcmVkZW50aWFsLmh0bWwKK3dlYnNvY2tldC90ZXN0cy91cmwtd2l0aC1lbXB0eS1xdWVy
eS5odG1sCit3ZWJzb2NrZXQvdGVzdHMvdXJsLXdpdGgtZnJhZ21lbnQuaHRtbAord2Vic29ja2V0
L3Rlc3RzL3VybC13aXRoLXF1ZXJ5Lmh0bWwKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRm
b3JtL3dpbi9Ta2lwcGVkIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1NraXBwZWQKaW5kZXgg
ZjA3ZDIyNy4uZjg4ZjMzYSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1Nr
aXBwZWQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1NraXBwZWQKQEAgLTcxNiwzICs3
MTYsOSBAQCBwbHVnaW5zL3F0LXF3aWRnZXQtcGx1Z2luLmh0bWwKICMgRmFpbHVyZSBpbnRyb2R1
Y2VkIGJ5IGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzUxNDI5CiAjIGhhbWFqaSB3
aWxsIGxvb2sgaW50byB0aGlzLgogZWRpdGluZy9zZWxlY3Rpb24vbGFzdC1lbXB0eS1pbmxpbmUu
aHRtbAorCisjIE1pc3NpbmcgIldlYlNvY2tldCBpcyBjbG9zZWQiCit3ZWJzb2NrZXQvdGVzdHMv
dXJsLXdpdGgtY3JlZGVudGlhbC5odG1sCit3ZWJzb2NrZXQvdGVzdHMvdXJsLXdpdGgtZW1wdHkt
cXVlcnkuaHRtbAord2Vic29ja2V0L3Rlc3RzL3VybC13aXRoLWZyYWdtZW50Lmh0bWwKK3dlYnNv
Y2tldC90ZXN0cy91cmwtd2l0aC1xdWVyeS5odG1sCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93
ZWJzb2NrZXQvdGVzdHMvZWNoby1sb2NhdGlvbl93c2gucHkgYi9MYXlvdXRUZXN0cy93ZWJzb2Nr
ZXQvdGVzdHMvZWNoby1sb2NhdGlvbl93c2gucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uMzM5MDU3MAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYnNvY2tl
dC90ZXN0cy9lY2hvLWxvY2F0aW9uX3dzaC5weQpAQCAtMCwwICsxLDM5IEBACisjIENvcHlyaWdo
dCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMg
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKworCitmcm9tIG1vZF9weXdlYnNvY2tldCBpbXBvcnQgbXNndXRpbAorCisKK2RlZiB3
ZWJfc29ja2V0X2RvX2V4dHJhX2hhbmRzaGFrZShyZXF1ZXN0KToKKyAgICBwYXNzCisKKworZGVm
IHdlYl9zb2NrZXRfdHJhbnNmZXJfZGF0YShyZXF1ZXN0KToKKyAgICBwcmludCByZXF1ZXN0Lndz
X2xvY2F0aW9uCisgICAgbXNndXRpbC5zZW5kX21lc3NhZ2UocmVxdWVzdCwgcmVxdWVzdC53c19s
b2NhdGlvbikKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy9uby1xdWVy
eV93c2gucHkgYi9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvbm8tcXVlcnlfd3NoLnB5Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiNzk2MTUKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvbm8tcXVlcnlfd3NoLnB5CkBAIC0wLDAg
KzEsMzggQEAKKyMgQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0
cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKK2Zyb20gbW9kX3B5d2Vic29ja2V0IGltcG9y
dCBtc2d1dGlsCisKKworZGVmIHdlYl9zb2NrZXRfZG9fZXh0cmFfaGFuZHNoYWtlKHJlcXVlc3Qp
OgorICAgIHJlcXVlc3Qud3NfbG9jYXRpb24gPSByZXF1ZXN0LndzX3Jlc291cmNlLnNwbGl0KCc/
JywgMSlbMF0KKworCitkZWYgd2ViX3NvY2tldF90cmFuc2Zlcl9kYXRhKHJlcXVlc3QpOgorICAg
IG1zZ3V0aWwuc2VuZF9tZXNzYWdlKHJlcXVlc3QsIHJlcXVlc3Qud3NfbG9jYXRpb24pCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvc2NyaXB0LXRlc3RzL3VybC13aXRo
LWNyZWRlbnRpYWwuanMgYi9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvc2NyaXB0LXRlc3Rz
L3VybC13aXRoLWNyZWRlbnRpYWwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uMjkzNTc5NgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0
cy9zY3JpcHQtdGVzdHMvdXJsLXdpdGgtY3JlZGVudGlhbC5qcwpAQCAtMCwwICsxLDM3IEBACitk
ZXNjcmlwdGlvbigiTWFrZSBzdXJlIGhhbmRzaGFrZSB3aXRoIFVSTCB3aXRoIGNyZWRlbnRhaWwg
aW5mbyBzdWNjZXNzLiIpOworCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAg
IGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKwordmFyIHVybCA9ICJ3czov
L3VzZXI6cGFzc0Bsb2NhbGhvc3Q6ODg4MC93ZWJzb2NrZXQvdGVzdHMvZWNoby1sb2NhdGlvbiI7
Cit2YXIgaGFuZHNoYWtlX3N1Y2Nlc3MgPSBmYWxzZTsKK3ZhciB3c19sb2NhdGlvbjsKKworZnVu
Y3Rpb24gZW5kVGVzdCgpCit7CisgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJRCk7CisgICAgc2hv
dWxkQmVUcnVlKCJoYW5kc2hha2Vfc3VjY2VzcyIpOworICAgIHNob3VsZEJlKCJ3c19sb2NhdGlv
biIsICcid3M6Ly9sb2NhbGhvc3Q6ODg4MC93ZWJzb2NrZXQvdGVzdHMvZWNoby1sb2NhdGlvbiIn
KTsKKyAgICBpc1N1Y2Nlc3NmdWxseVBhcnNlZCgpOworICAgIGlmICh3aW5kb3cubGF5b3V0VGVz
dENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsK
K30KKworZGVidWcoInVybD0iICsgdXJsKTsKK3ZhciB3cyA9IG5ldyBXZWJTb2NrZXQodXJsKTsK
K3dzLm9ub3BlbiA9IGZ1bmN0aW9uICgpIHsKKyAgICBkZWJ1ZygiV2ViU29ja2V0IGlzIG9wZW4i
KTsKKyAgICBoYW5kc2hha2Vfc3VjY2VzcyA9IHRydWU7Cit9Oword3Mub25tZXNzYWdlID0gZnVu
Y3Rpb24gKGV2dCkgeworICAgIHdzX2xvY2F0aW9uID0gZXZ0LmRhdGE7CisgICAgZGVidWcoInJl
Y2VpdmVkOiIgKyB3c19sb2NhdGlvbik7CisgICAgd3MuY2xvc2UoKTsKK307Cit3cy5vbmNsb3Nl
ID0gZnVuY3Rpb24gKCkgeworICAgIGRlYnVnKCJXZWJTb2NrZXQgaXMgY2xvc2VkIik7CisgICAg
ZW5kVGVzdCgpOworfTsKK3ZhciB0aW1lb3V0SUQgPSBzZXRUaW1lb3V0KCJlbmRUZXN0KCkiLCAy
MDAwKTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvc2NyaXB0LXRlc3RzL3VybC13aXRoLWVtcHR5LXF1ZXJ5
LmpzIGIvTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3NjcmlwdC10ZXN0cy91cmwtd2l0aC1l
bXB0eS1xdWVyeS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzZlZjcw
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3NjcmlwdC10
ZXN0cy91cmwtd2l0aC1lbXB0eS1xdWVyeS5qcwpAQCAtMCwwICsxLDM3IEBACitkZXNjcmlwdGlv
bigiTWFrZSBzdXJlIGhhbmRzaGFrZSB3aXRoIFVSTCB3aXRoIGVtcHR5IHF1ZXJ5IGNvbXBvbmVu
dHMgc3VjY2Vzcy4iKTsKKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisKK3ZhciB1cmwgPSAid3M6Ly9s
b2NhbGhvc3Q6ODg4MC93ZWJzb2NrZXQvdGVzdHMvZWNoby1sb2NhdGlvbj8iOwordmFyIGhhbmRz
aGFrZV9zdWNjZXNzID0gZmFsc2U7Cit2YXIgd3NfbG9jYXRpb247CisKK2Z1bmN0aW9uIGVuZFRl
c3QoKQoreworICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SUQpOworICAgIHNob3VsZEJlVHJ1ZSgi
aGFuZHNoYWtlX3N1Y2Nlc3MiKTsKKyAgICBzaG91bGRCZSgid3NfbG9jYXRpb24iLCAidXJsIik7
CisgICAgaXNTdWNjZXNzZnVsbHlQYXJzZWQoKTsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RD
b250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9
CisKK2RlYnVnKCJ1cmw9IiArIHVybCk7Cit2YXIgd3MgPSBuZXcgV2ViU29ja2V0KHVybCk7Cit3
cy5vbm9wZW4gPSBmdW5jdGlvbiAoKSB7CisgICAgZGVidWcoIldlYlNvY2tldCBpcyBvcGVuIik7
CisgICAgaGFuZHNoYWtlX3N1Y2Nlc3MgPSB0cnVlOworfTsKK3dzLm9ubWVzc2FnZSA9IGZ1bmN0
aW9uIChldnQpIHsKKyAgICB3c19sb2NhdGlvbiA9IGV2dC5kYXRhOworICAgIGRlYnVnKCJyZWNl
aXZlZDoiICsgd3NfbG9jYXRpb24pOworICAgIHdzLmNsb3NlKCk7Cit9Oword3Mub25jbG9zZSA9
IGZ1bmN0aW9uICgpIHsKKyAgICBkZWJ1ZygiV2ViU29ja2V0IGlzIGNsb3NlZCIpOworICAgIGVu
ZFRlc3QoKTsKK307Cit2YXIgdGltZW91dElEID0gc2V0VGltZW91dCgiZW5kVGVzdCgpIiwgMjAw
MCk7CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3NjcmlwdC10ZXN0cy91cmwtd2l0aC1mcmFnbWVudC5qcyBi
L0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy9zY3JpcHQtdGVzdHMvdXJsLXdpdGgtZnJhZ21l
bnQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDkwM2QzYgotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy9zY3JpcHQtdGVzdHMvdXJs
LXdpdGgtZnJhZ21lbnQuanMKQEAgLTAsMCArMSwzNyBAQAorZGVzY3JpcHRpb24oIk1ha2Ugc3Vy
ZSBoYW5kc2hha2Ugd2l0aCBVUkwgd2l0aCBmcmFnbWVudCBjb21wb25lbnRzIHN1Y2Nlc3MuIik7
CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIud2FpdFVudGlsRG9uZSgpOworCit2YXIgdXJsID0gIndzOi8vbG9jYWxob3N0Ojg4ODAv
d2Vic29ja2V0L3Rlc3RzL2VjaG8tbG9jYXRpb24jZnJhZ21lbnQiOwordmFyIGhhbmRzaGFrZV9z
dWNjZXNzID0gZmFsc2U7Cit2YXIgd3NfbG9jYXRpb247CisKK2Z1bmN0aW9uIGVuZFRlc3QoKQor
eworICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SUQpOworICAgIHNob3VsZEJlVHJ1ZSgiaGFuZHNo
YWtlX3N1Y2Nlc3MiKTsKKyAgICBzaG91bGRCZSgid3NfbG9jYXRpb24iLCAnIndzOi8vbG9jYWxo
b3N0Ojg4ODAvd2Vic29ja2V0L3Rlc3RzL2VjaG8tbG9jYXRpb24iJyk7CisgICAgaXNTdWNjZXNz
ZnVsbHlQYXJzZWQoKTsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAg
ICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisKK2RlYnVnKCJ1cmw9
IiArIHVybCk7Cit2YXIgd3MgPSBuZXcgV2ViU29ja2V0KHVybCk7Cit3cy5vbm9wZW4gPSBmdW5j
dGlvbiAoKSB7CisgICAgZGVidWcoIldlYlNvY2tldCBpcyBvcGVuIik7CisgICAgaGFuZHNoYWtl
X3N1Y2Nlc3MgPSB0cnVlOworfTsKK3dzLm9ubWVzc2FnZSA9IGZ1bmN0aW9uIChldnQpIHsKKyAg
ICB3c19sb2NhdGlvbiA9IGV2dC5kYXRhOworICAgIGRlYnVnKCJyZWNlaXZlZDoiICsgd3NfbG9j
YXRpb24pOworICAgIHdzLmNsb3NlKCk7Cit9Oword3Mub25jbG9zZSA9IGZ1bmN0aW9uICgpIHsK
KyAgICBkZWJ1ZygiV2ViU29ja2V0IGlzIGNsb3NlZCIpOworICAgIGVuZFRlc3QoKTsKK307Cit2
YXIgdGltZW91dElEID0gc2V0VGltZW91dCgiZW5kVGVzdCgpIiwgMjAwMCk7CisKK3ZhciBzdWNj
ZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vic29ja2V0
L3Rlc3RzL3NjcmlwdC10ZXN0cy91cmwtd2l0aC1xdWVyeS1mb3Itbm8tcXVlcnkuanMgYi9MYXlv
dXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvc2NyaXB0LXRlc3RzL3VybC13aXRoLXF1ZXJ5LWZvci1u
by1xdWVyeS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2FiOGRkCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3NjcmlwdC10ZXN0
cy91cmwtd2l0aC1xdWVyeS1mb3Itbm8tcXVlcnkuanMKQEAgLTAsMCArMSwzNyBAQAorZGVzY3Jp
cHRpb24oIk1ha2Ugc3VyZSBoYW5kc2hha2Ugd2l0aCBVUkwgd2l0aCBxdWVyeSBjb21wb25lbnRz
IGZhaWxzIGFnYWluc3Qgc2VydmVyIHRoYXQgZG9lc24ndCBzdXBwb3J0IHF1ZXJ5IGNvbXBvbmVu
dC4iKTsKKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisKK3ZhciB1cmwgPSAid3M6Ly9sb2NhbGhvc3Q6
ODg4MC93ZWJzb2NrZXQvdGVzdHMvbm8tcXVlcnktc3VwcG9ydD8iOwordmFyIGhhbmRzaGFrZV9z
dWNjZXNzID0gZmFsc2U7Cit2YXIgd3NfbG9jYXRpb247CisKK2Z1bmN0aW9uIGVuZFRlc3QoKQor
eworICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SUQpOworICAgIHNob3VsZEJlRmFsc2UoImhhbmRz
aGFrZV9zdWNjZXNzIik7CisgICAgc2hvdWxkQmVVbmRlZmluZWQoIndzX2xvY2F0aW9uIik7Cisg
ICAgaXNTdWNjZXNzZnVsbHlQYXJzZWQoKTsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250
cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisK
K2RlYnVnKCJ1cmw9IiArIHVybCk7Cit2YXIgd3MgPSBuZXcgV2ViU29ja2V0KHVybCk7Cit3cy5v
bm9wZW4gPSBmdW5jdGlvbiAoKSB7CisgICAgZGVidWcoIldlYlNvY2tldCBpcyBvcGVuIik7Cisg
ICAgaGFuZHNoYWtlX3N1Y2Nlc3MgPSB0cnVlOworfTsKK3dzLm9ubWVzc2dlID0gZnVuY3Rpb24g
KGV2dCkgeworICAgIHdzX2xvY2F0aW9uID0gZXZ0LmRhdGE7CisgICAgZGVidWcoInJlY2VpdmVk
OiIgKyB3c19sb2NhdGlvbik7CisgICAgd3MuY2xvc2UoKTsKK307Cit3cy5vbmNsb3NlID0gZnVu
Y3Rpb24gKCkgeworICAgIGRlYnVnKCJXZWJTb2NrZXQgaXMgY2xvc2VkIik7CisgICAgZW5kVGVz
dCgpOworfTsKK3ZhciB0aW1lb3V0SUQgPSBzZXRUaW1lb3V0KCJlbmRUZXN0KCkiLCAyMDAwKTsK
KwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy93ZWJzb2NrZXQvdGVzdHMvc2NyaXB0LXRlc3RzL3VybC13aXRoLXF1ZXJ5LmpzIGIvTGF5b3V0
VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3NjcmlwdC10ZXN0cy91cmwtd2l0aC1xdWVyeS5qcwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2JhZWVjCi0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3NjcmlwdC10ZXN0cy91cmwtd2l0aC1xdWVy
eS5qcwpAQCAtMCwwICsxLDM3IEBACitkZXNjcmlwdGlvbigiTWFrZSBzdXJlIGhhbmRzaGFrZSB3
aXRoIFVSTCB3aXRoIHF1ZXJ5IGNvbXBvbmVudHMgc3VjY2Vzcy4iKTsKKworaWYgKHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxE
b25lKCk7CisKK3ZhciB1cmwgPSAid3M6Ly9sb2NhbGhvc3Q6ODg4MC93ZWJzb2NrZXQvdGVzdHMv
ZWNoby1sb2NhdGlvbj9xPXYiOwordmFyIGhhbmRzaGFrZV9zdWNjZXNzID0gZmFsc2U7Cit2YXIg
d3NfbG9jYXRpb247CisKK2Z1bmN0aW9uIGVuZFRlc3QoKQoreworICAgIGNsZWFyVGltZW91dCh0
aW1lb3V0SUQpOworICAgIHNob3VsZEJlVHJ1ZSgiaGFuZHNoYWtlX3N1Y2Nlc3MiKTsKKyAgICBz
aG91bGRCZSgid3NfbG9jYXRpb24iLCAidXJsIik7CisgICAgaXNTdWNjZXNzZnVsbHlQYXJzZWQo
KTsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisKK2RlYnVnKCJ1cmw9IiArIHVybCk7Cit2
YXIgd3MgPSBuZXcgV2ViU29ja2V0KHVybCk7Cit3cy5vbm9wZW4gPSBmdW5jdGlvbiAoKSB7Cisg
ICAgZGVidWcoIldlYlNvY2tldCBpcyBvcGVuIik7CisgICAgaGFuZHNoYWtlX3N1Y2Nlc3MgPSB0
cnVlOworfTsKK3dzLm9ubWVzc2FnZSA9IGZ1bmN0aW9uIChldnQpIHsKKyAgICB3c19sb2NhdGlv
biA9IGV2dC5kYXRhOworICAgIGRlYnVnKCJyZWNlaXZlZDoiICsgd3NfbG9jYXRpb24pOworICAg
IHdzLmNsb3NlKCk7Cit9Oword3Mub25jbG9zZSA9IGZ1bmN0aW9uICgpIHsKKyAgICBkZWJ1Zygi
V2ViU29ja2V0IGlzIGNsb3NlZCIpOworICAgIGVuZFRlc3QoKTsKK307Cit2YXIgdGltZW91dElE
ID0gc2V0VGltZW91dCgiZW5kVGVzdCgpIiwgMjAwMCk7CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJz
ZWQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3VybC13
aXRoLWNyZWRlbnRpYWwtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3Rz
L3VybC13aXRoLWNyZWRlbnRpYWwtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjYwYWZmZmYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJz
b2NrZXQvdGVzdHMvdXJsLXdpdGgtY3JlZGVudGlhbC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwx
NCBAQAorTWFrZSBzdXJlIGhhbmRzaGFrZSB3aXRoIFVSTCB3aXRoIGNyZWRlbnRhaWwgaW5mbyBz
dWNjZXNzLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1l
c3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKK3VybD13czovL3VzZXI6cGFz
c0Bsb2NhbGhvc3Q6ODg4MC93ZWJzb2NrZXQvdGVzdHMvZWNoby1sb2NhdGlvbgorV2ViU29ja2V0
IGlzIG9wZW4KK3JlY2VpdmVkOndzOi8vbG9jYWxob3N0Ojg4ODAvd2Vic29ja2V0L3Rlc3RzL2Vj
aG8tbG9jYXRpb24KK1dlYlNvY2tldCBpcyBjbG9zZWQKK1BBU1MgaGFuZHNoYWtlX3N1Y2Nlc3Mg
aXMgdHJ1ZQorUEFTUyB3c19sb2NhdGlvbiBpcyAid3M6Ly9sb2NhbGhvc3Q6ODg4MC93ZWJzb2Nr
ZXQvdGVzdHMvZWNoby1sb2NhdGlvbiIKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUK
KworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVz
dHMvdXJsLXdpdGgtY3JlZGVudGlhbC5odG1sIGIvTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3Rz
L3VybC13aXRoLWNyZWRlbnRpYWwuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi43YWM1NTZhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rl
c3RzL3VybC13aXRoLWNyZWRlbnRpYWwuaHRtbApAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUg
SFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxp
bmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0
LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVz
dC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2Vz
L2pzLXRlc3QtcG9zdC1mdW5jdGlvbi5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxk
aXYgaWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNj
cmlwdCBzcmM9InNjcmlwdC10ZXN0cy91cmwtd2l0aC1jcmVkZW50aWFsLmpzIj48L3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0
cy91cmwtd2l0aC1lbXB0eS1xdWVyeS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJzb2Nr
ZXQvdGVzdHMvdXJsLXdpdGgtZW1wdHktcXVlcnktZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhZTllNjkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy93ZWJzb2NrZXQvdGVzdHMvdXJsLXdpdGgtZW1wdHktcXVlcnktZXhwZWN0ZWQudHh0CkBA
IC0wLDAgKzEsMTQgQEAKK01ha2Ugc3VyZSBoYW5kc2hha2Ugd2l0aCBVUkwgd2l0aCBlbXB0eSBx
dWVyeSBjb21wb25lbnRzIHN1Y2Nlc3MuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNl
cmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKwor
dXJsPXdzOi8vbG9jYWxob3N0Ojg4ODAvd2Vic29ja2V0L3Rlc3RzL2VjaG8tbG9jYXRpb24/CitX
ZWJTb2NrZXQgaXMgb3BlbgorcmVjZWl2ZWQ6d3M6Ly9sb2NhbGhvc3Q6ODg4MC93ZWJzb2NrZXQv
dGVzdHMvZWNoby1sb2NhdGlvbj8KK1dlYlNvY2tldCBpcyBjbG9zZWQKK1BBU1MgaGFuZHNoYWtl
X3N1Y2Nlc3MgaXMgdHJ1ZQorUEFTUyB3c19sb2NhdGlvbiBpcyB1cmwKK1BBU1Mgc3VjY2Vzc2Z1
bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy93ZWJzb2NrZXQvdGVzdHMvdXJsLXdpdGgtZW1wdHktcXVlcnkuaHRtbCBiL0xheW91dFRl
c3RzL3dlYnNvY2tldC90ZXN0cy91cmwtd2l0aC1lbXB0eS1xdWVyeS5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyN2YwYjMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvdXJsLXdpdGgtZW1wdHktcXVlcnkuaHRtbApAQCAtMCww
ICsxLDEzIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+
Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9mYXN0
L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFz
dC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4u
Ly4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC1mdW5jdGlvbi5qcyI+PC9zY3JpcHQ+
Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4KKzxkaXYgaWQ9
ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy91cmwtd2l0aC1lbXB0
eS1xdWVyeS5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvdXJsLXdpdGgtZnJhZ21lbnQtZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3VybC13aXRoLWZyYWdtZW50LWV4cGVjdGVkLnR4
dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODQ4NzI4Ci0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3VybC13aXRoLWZyYWdtZW50LWV4
cGVjdGVkLnR4dApAQCAtMCwwICsxLDE0IEBACitNYWtlIHN1cmUgaGFuZHNoYWtlIHdpdGggVVJM
IHdpdGggZnJhZ21lbnQgY29tcG9uZW50cyBzdWNjZXNzLgorCitPbiBzdWNjZXNzLCB5b3Ugd2ls
bCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01Q
TEVURSIuCisKK3VybD13czovL2xvY2FsaG9zdDo4ODgwL3dlYnNvY2tldC90ZXN0cy9lY2hvLWxv
Y2F0aW9uI2ZyYWdtZW50CitXZWJTb2NrZXQgaXMgb3BlbgorcmVjZWl2ZWQ6d3M6Ly9sb2NhbGhv
c3Q6ODg4MC93ZWJzb2NrZXQvdGVzdHMvZWNoby1sb2NhdGlvbgorV2ViU29ja2V0IGlzIGNsb3Nl
ZAorUEFTUyBoYW5kc2hha2Vfc3VjY2VzcyBpcyB0cnVlCitQQVNTIHdzX2xvY2F0aW9uIGlzICJ3
czovL2xvY2FsaG9zdDo4ODgwL3dlYnNvY2tldC90ZXN0cy9lY2hvLWxvY2F0aW9uIgorUEFTUyBz
dWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy91cmwtd2l0aC1mcmFnbWVudC5odG1sIGIvTGF5
b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3VybC13aXRoLWZyYWdtZW50Lmh0bWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmIzNDc3MAotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy91cmwtd2l0aC1mcmFnbWVudC5odG1sCkBAIC0wLDAg
KzEsMTMgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4K
KzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2Zhc3Qv
anMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0
L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LWZ1bmN0aW9uLmpzIj48L3NjcmlwdD4K
KzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2PgorPGRpdiBpZD0i
Y29uc29sZSI+PC9kaXY+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL3VybC13aXRoLWZyYWdt
ZW50LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3dlYnNvY2tldC90ZXN0cy91cmwtd2l0aC1xdWVyeS1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy93ZWJzb2NrZXQvdGVzdHMvdXJsLXdpdGgtcXVlcnktZXhwZWN0ZWQudHh0Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwMGZmNTUKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvdXJsLXdpdGgtcXVlcnktZXhwZWN0ZWQudHh0CkBA
IC0wLDAgKzEsMTQgQEAKK01ha2Ugc3VyZSBoYW5kc2hha2Ugd2l0aCBVUkwgd2l0aCBxdWVyeSBj
b21wb25lbnRzIHN1Y2Nlc3MuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBv
ZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKwordXJsPXdz
Oi8vbG9jYWxob3N0Ojg4ODAvd2Vic29ja2V0L3Rlc3RzL2VjaG8tbG9jYXRpb24/cT12CitXZWJT
b2NrZXQgaXMgb3BlbgorcmVjZWl2ZWQ6d3M6Ly9sb2NhbGhvc3Q6ODg4MC93ZWJzb2NrZXQvdGVz
dHMvZWNoby1sb2NhdGlvbj9xPXYKK1dlYlNvY2tldCBpcyBjbG9zZWQKK1BBU1MgaGFuZHNoYWtl
X3N1Y2Nlc3MgaXMgdHJ1ZQorUEFTUyB3c19sb2NhdGlvbiBpcyB1cmwKK1BBU1Mgc3VjY2Vzc2Z1
bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy93ZWJzb2NrZXQvdGVzdHMvdXJsLXdpdGgtcXVlcnktZm9yLW5vLXF1ZXJ5LWV4cGVjdGVk
LnR4dCBiL0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy91cmwtd2l0aC1xdWVyeS1mb3Itbm8t
cXVlcnktZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgy
YTlkNDgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvdXJs
LXdpdGgtcXVlcnktZm9yLW5vLXF1ZXJ5LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEyIEBACitN
YWtlIHN1cmUgaGFuZHNoYWtlIHdpdGggVVJMIHdpdGggcXVlcnkgY29tcG9uZW50cyBmYWlscyBh
Z2FpbnN0IHNlcnZlciB0aGF0IGRvZXNuJ3Qgc3VwcG9ydCBxdWVyeSBjb21wb25lbnQuCisKK09u
IHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxv
d2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKwordXJsPXdzOi8vbG9jYWxob3N0Ojg4ODAvd2Vic29j
a2V0L3Rlc3RzL25vLXF1ZXJ5LXN1cHBvcnQ/CitXZWJTb2NrZXQgaXMgY2xvc2VkCitQQVNTIGhh
bmRzaGFrZV9zdWNjZXNzIGlzIGZhbHNlCitQQVNTIHdzX2xvY2F0aW9uIGlzIHVuZGVmaW5lZC4K
K1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvdXJsLXdpdGgtcXVlcnktZm9yLW5v
LXF1ZXJ5Lmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvdXJsLXdpdGgtcXVlcnkt
Zm9yLW5vLXF1ZXJ5Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Iw
ZmMzOQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy91cmwt
d2l0aC1xdWVyeS1mb3Itbm8tcXVlcnkuaHRtbApAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUg
SFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxp
bmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0
LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVz
dC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2Vz
L2pzLXRlc3QtcG9zdC1mdW5jdGlvbi5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxk
aXYgaWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNj
cmlwdCBzcmM9InNjcmlwdC10ZXN0cy91cmwtd2l0aC1xdWVyeS1mb3Itbm8tcXVlcnkuanMiPjwv
c2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vic29j
a2V0L3Rlc3RzL3VybC13aXRoLXF1ZXJ5Lmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVz
dHMvdXJsLXdpdGgtcXVlcnkuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5hYzkwNTAyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3Rz
L3VybC13aXRoLXF1ZXJ5Lmh0bWwKQEAgLTAsMCArMSwxMyBAQAorPCFET0NUWVBFIEhUTUwgUFVC
TElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0i
c3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5j
c3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0
LXBvc3QtZnVuY3Rpb24uanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJk
ZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgc3Jj
PSJzY3JpcHQtdGVzdHMvdXJsLXdpdGgtcXVlcnkuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9o
dG1sPgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwpp
bmRleCBlYjhmZWI2Li44Yjg2Njg1IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysg
Yi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDI5IEBACiAyMDA5LTExLTMwICBGdW1pdG9z
aGkgVWthaSAgPHVrYWlAY2hyb21pdW0ub3JnPgogCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFdlYlNvY2tldCBoYW5kc2hha2UgY2hlY2sgcXVlcnkgY29t
cG9uZW50IG9mIFVSTAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MzE2MTcKKworICAgICAgICBUZXN0czogd2Vic29ja2V0L3Rlc3RzL3VybC13aXRoLWNy
ZWRlbnRpYWwuaHRtbAorICAgICAgICAgICAgICAgd2Vic29ja2V0L3Rlc3RzL3VybC13aXRoLWVt
cHR5LXF1ZXJ5Lmh0bWwKKyAgICAgICAgICAgICAgIHdlYnNvY2tldC90ZXN0cy91cmwtd2l0aC1m
cmFnbWVudC5odG1sCisgICAgICAgICAgICAgICB3ZWJzb2NrZXQvdGVzdHMvdXJsLXdpdGgtcXVl
cnktZm9yLW5vLXF1ZXJ5Lmh0bWwKKyAgICAgICAgICAgICAgIHdlYnNvY2tldC90ZXN0cy91cmwt
d2l0aC1xdWVyeS5odG1sCisKKyAgICAgICAgKiBwbGF0Zm9ybS9LVVJMLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OktVUkw6OnJlc291cmNlTmFtZSk6CisgICAgICAgICogcGxhdGZvcm0vS1VSTC5o
OgorICAgICAgICAqIHBsYXRmb3JtL0tVUkxHb29nbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
S1VSTEdvb2dsZVByaXZhdGU6OnBhdGhGb3JSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OktV
Ukw6OnJlc291cmNlTmFtZSk6CisgICAgICAgICogcGxhdGZvcm0vS1VSTEdvb2dsZVByaXZhdGUu
aDoKKyAgICAgICAgKiB3ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpXZWJTb2NrZXRIYW5kc2hha2U6OmNsaWVudExvY2F0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYlNvY2tldEhhbmRzaGFrZTo6Y2xpZW50SGFuZHNoYWtlTWVzc2FnZSk6CisK
KzIwMDktMTEtMzAgIEZ1bWl0b3NoaSBVa2FpICA8dWthaUBjaHJvbWl1bS5vcmc+CisKICAgICAg
ICAgVW5yZXZpZXdlZCBDaHJvbWl1bSBidWlsZCBmaXggaW50cm9kdWNlZCBieSByNTEyMTIKIAog
ICAgICAgICBGaXggc2NyaXB0U3RhdGVGcm9tTm9kZSBhbmQgU2NyaXB0U3RhdGVGcm9tUGFnZSB0
byB0YWtlIERPTVdyYXBwZXJXb3JsZApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9LVVJM
LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vS1VSTC5jcHAKaW5kZXggM2M5Mzk1Mi4uNzU4Yjc4ZSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmNwcAorKysgYi9XZWJDb3JlL3BsYXRm
b3JtL0tVUkwuY3BwCkBAIC02NTksNiArNjU5LDExIEBAIFN0cmluZyBLVVJMOjpwYXRoKCkgY29u
c3QKICAgICByZXR1cm4gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKG1fc3RyaW5nLnN1YnN0cmlu
ZyhtX3BvcnRFbmQsIG1fcGF0aEVuZCAtIG1fcG9ydEVuZCkpOyAKIH0KIAorU3RyaW5nIEtVUkw6
OnJlc291cmNlTmFtZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHBhdGgoKSArIG1fc3RyaW5nLnN1
YnN0cmluZyhtX3BhdGhFbmQsIG1fcXVlcnlFbmQgLSBtX3BhdGhFbmQpOworfQorCiB2b2lkIEtV
Ukw6OnNldFByb3RvY29sKGNvbnN0IFN0cmluZyYgcykKIHsKICAgICAvLyBGSVhNRTogTm9uLUFT
Q0lJIGNoYXJhY3RlcnMgbXVzdCBiZSBlbmNvZGVkIGFuZCBlc2NhcGVkIHRvIG1hdGNoIHBhcnNl
KCkgZXhwZWN0YXRpb25zLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmggYi9X
ZWJDb3JlL3BsYXRmb3JtL0tVUkwuaAppbmRleCA5OTM4NDJlLi44YjlkYWM3IDEwMDY0NAotLS0g
YS9XZWJDb3JlL3BsYXRmb3JtL0tVUkwuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL0tVUkwuaApA
QCAtMTI2LDYgKzEyNiw3IEBAIHB1YmxpYzoKICAgICBTdHJpbmcgcGF0aCgpIGNvbnN0OwogICAg
IFN0cmluZyBsYXN0UGF0aENvbXBvbmVudCgpIGNvbnN0OwogICAgIFN0cmluZyBxdWVyeSgpIGNv
bnN0OworICAgIFN0cmluZyByZXNvdXJjZU5hbWUoKSBjb25zdDsKICAgICBTdHJpbmcgZnJhZ21l
bnRJZGVudGlmaWVyKCkgY29uc3Q7CiAgICAgYm9vbCBoYXNGcmFnbWVudElkZW50aWZpZXIoKSBj
b25zdDsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9LVVJMR29vZ2xlLmNwcCBiL1dl
YkNvcmUvcGxhdGZvcm0vS1VSTEdvb2dsZS5jcHAKaW5kZXggNzYzYmYzYi4uNDNmNWZmYyAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9LVVJMR29vZ2xlLmNwcAorKysgYi9XZWJDb3JlL3Bs
YXRmb3JtL0tVUkxHb29nbGUuY3BwCkBAIC0zMDQsNiArMzA0LDE0IEBAIFN0cmluZyBLVVJMR29v
Z2xlUHJpdmF0ZTo6Y29tcG9uZW50U3RyaW5nKGNvbnN0IHVybF9wYXJzZTo6Q29tcG9uZW50JiBj
b21wKSBjb25zCiAgICAgcmV0dXJuIHN0cmluZygpLnN1YnN0cmluZyhjb21wLmJlZ2luLCBjb21w
Lmxlbik7CiB9CiAKK1N0cmluZyBLVVJMR29vZ2xlUHJpdmF0ZTo6cGF0aEZvclJlcXVlc3QoKSBj
b25zdAoreworICAgIGlmIChtX3BhcnNlZC5yZWYubGVuID49IDApCisgICAgICAgIHJldHVybiBz
dHJpbmcoKS5zdWJzdHJpbmcobV9wYXJzZWQucGF0aC5iZWdpbiwKKyAgICAgICAgICAgIG1fcGFy
c2VkLnJlZi5iZWdpbiAtIG1fcGFyc2VkLnBhdGguYmVnaW4gLSAxKTsKKyAgICByZXR1cm4gc3Ry
aW5nKCkuc3Vic3RyaW5nKG1fcGFyc2VkLnBhdGguYmVnaW4pOworfQorCiB2b2lkIEtVUkxHb29n
bGVQcml2YXRlOjpyZXBsYWNlQ29tcG9uZW50cyhjb25zdCBSZXBsYWNlbWVudHMmIHJlcGxhY2Vt
ZW50cykKIHsKICAgICB1cmxfY2Fub246OlJhd0Nhbm9uT3V0cHV0VDxjaGFyPiBvdXRwdXQ7CkBA
IC01NjEsNiArNTY5LDExIEBAIFN0cmluZyBLVVJMOjpwYXRoKCkgY29uc3QKICAgICByZXR1cm4g
bV91cmwuY29tcG9uZW50U3RyaW5nKG1fdXJsLm1fcGFyc2VkLnBhdGgpOwogfQogCitTdHJpbmcg
S1VSTDo6cmVzb3VyY2VOYW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV91cmwucGF0aEZvclJl
cXVlc3QoKTsKK30KKwogdm9pZCBLVVJMOjpzZXRQcm90b2NvbChjb25zdCBTdHJpbmcmIHByb3Rv
Y29sKQogewogICAgIEtVUkxHb29nbGVQcml2YXRlOjpSZXBsYWNlbWVudHMgcmVwbGFjZW1lbnRz
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9LVVJMR29vZ2xlUHJpdmF0ZS5oIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9LVVJMR29vZ2xlUHJpdmF0ZS5oCmluZGV4IGE3MGNjZTUuLjBiMGE0NGUg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vS1VSTEdvb2dsZVByaXZhdGUuaAorKysgYi9X
ZWJDb3JlL3BsYXRmb3JtL0tVUkxHb29nbGVQcml2YXRlLmgKQEAgLTcwLDYgKzcwLDkgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBSZXR1cm5zIHRoZSBzdWJzdHJpbmcgb2YgdGhl
IGlucHV0IGlkZW50aWZpZWQgYnkgdGhlIGdpdmVuIGNvbXBvbmVudC4KICAgICAgICAgU3RyaW5n
IGNvbXBvbmVudFN0cmluZyhjb25zdCB1cmxfcGFyc2U6OkNvbXBvbmVudCYpIGNvbnN0OwogCisg
ICAgICAgIC8vIFJldHVybnMgdGhlIHN1YnN0cmluZyBvZiB0aGUgaW5wdXQgZm9yIHJlcXVlc3Qu
CisgICAgICAgIFN0cmluZyBwYXRoRm9yUmVxdWVzdCgpIGNvbnN0OworCiAgICAgICAgIC8vIFJl
cGxhY2VzIHRoZSBnaXZlbiBjb21wb25lbnRzLCBtb2RpZnlpbmcgdGhlIGN1cnJlbnQgVVJMLiBU
aGUgY3VycmVudAogICAgICAgICAvLyBVUkwgbXVzdCBiZSB2YWxpZC4KICAgICAgICAgdHlwZWRl
ZiB1cmxfY2Fub246OlJlcGxhY2VtZW50czx1cmxfcGFyc2U6OlVURjE2Q2hhcj4gUmVwbGFjZW1l
bnRzOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5j
cHAgYi9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcAppbmRleCA2OTFm
YTFjLi42MzA2YTA0IDEwMDY0NAotLS0gYS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0SGFu
ZHNoYWtlLmNwcAorKysgYi9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNw
cApAQCAtMTM5LDcgKzEzOSw3IEBAIFN0cmluZyBXZWJTb2NrZXRIYW5kc2hha2U6OmNsaWVudExv
Y2F0aW9uKCkgY29uc3QKICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKFN0cmluZzo6bnVtYmVy
KG1fdXJsLnBvcnQoKSkpOwogICAgICAgICB9CiAgICAgfQotICAgIGJ1aWxkZXIuYXBwZW5kKG1f
dXJsLnBhdGgoKSk7CisgICAgYnVpbGRlci5hcHBlbmQobV91cmwucmVzb3VyY2VOYW1lKCkpOwog
ICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKQEAgLTE0OCwxMSArMTQ4LDcgQEAg
Q1N0cmluZyBXZWJTb2NrZXRIYW5kc2hha2U6OmNsaWVudEhhbmRzaGFrZU1lc3NhZ2UoKSBjb25z
dAogICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKIAogICAgIGJ1aWxkZXIuYXBwZW5kKCJHRVQg
Iik7Ci0gICAgYnVpbGRlci5hcHBlbmQobV91cmwucGF0aCgpKTsKLSAgICBpZiAoIW1fdXJsLnF1
ZXJ5KCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCI/Iik7Ci0gICAgICAg
IGJ1aWxkZXIuYXBwZW5kKG1fdXJsLnF1ZXJ5KCkpOwotICAgIH0KKyAgICBidWlsZGVyLmFwcGVu
ZChtX3VybC5yZXNvdXJjZU5hbWUoKSk7CiAgICAgYnVpbGRlci5hcHBlbmQoIiBIVFRQLzEuMVxy
XG4iKTsKICAgICBidWlsZGVyLmFwcGVuZCgiVXBncmFkZTogV2ViU29ja2V0XHJcbiIpOwogICAg
IGJ1aWxkZXIuYXBwZW5kKCJDb25uZWN0aW9uOiBVcGdyYWRlXHJcbiIpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44127</attachid>
            <date>2009-12-01 21:25:49 -0800</date>
            <delta_ts>2009-12-01 23:41:27 -0800</delta_ts>
            <desc>WebSocket handshake check query component of URL</desc>
            <filename>bug-31617-20091202142547.patch</filename>
            <type>text/plain</type>
            <size>22080</size>
            <attacher name="Fumitoshi Ukai">ukai</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAzMDg4N2I0Li5jNTdlZTFiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjggQEAKKzIwMDktMTIt
MDEgIEZ1bWl0b3NoaSBVa2FpICA8dWthaUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViU29ja2V0IGhhbmRzaGFrZSBjaGVj
ayBxdWVyeSBjb21wb25lbnQgb2YgVVJMCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0zMTYxNworCisgICAgICAgICogd2Vic29ja2V0L3Rlc3RzL2VjaG8t
bG9jYXRpb25fd3NoLnB5OiBBZGRlZC4KKyAgICAgICAgKiB3ZWJzb2NrZXQvdGVzdHMvbm8tcXVl
cnlfd3NoLnB5OiBBZGRlZC4KKyAgICAgICAgKiB3ZWJzb2NrZXQvdGVzdHMvc2NyaXB0LXRlc3Rz
L3VybC13aXRoLWNyZWRlbnRpYWwuanM6IEFkZGVkLgorICAgICAgICAqIHdlYnNvY2tldC90ZXN0
cy9zY3JpcHQtdGVzdHMvdXJsLXdpdGgtZW1wdHktcXVlcnkuanM6IEFkZGVkLgorICAgICAgICAq
IHdlYnNvY2tldC90ZXN0cy9zY3JpcHQtdGVzdHMvdXJsLXdpdGgtZnJhZ21lbnQuanM6IEFkZGVk
LgorICAgICAgICAqIHdlYnNvY2tldC90ZXN0cy9zY3JpcHQtdGVzdHMvdXJsLXdpdGgtcXVlcnkt
Zm9yLW5vLXF1ZXJ5LmpzOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJzb2NrZXQvdGVzdHMvc2NyaXB0
LXRlc3RzL3VybC13aXRoLXF1ZXJ5LmpzOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJzb2NrZXQvdGVz
dHMvdXJsLXdpdGgtY3JlZGVudGlhbC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHdl
YnNvY2tldC90ZXN0cy91cmwtd2l0aC1jcmVkZW50aWFsLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IHdlYnNvY2tldC90ZXN0cy91cmwtd2l0aC1lbXB0eS1xdWVyeS1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIHdlYnNvY2tldC90ZXN0cy91cmwtd2l0aC1lbXB0eS1xdWVyeS5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiB3ZWJzb2NrZXQvdGVzdHMvdXJsLXdpdGgtZnJhZ21lbnQtZXhwZWN0
ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiB3ZWJzb2NrZXQvdGVzdHMvdXJsLXdpdGgtZnJhZ21l
bnQuaHRtbDogQWRkZWQuCisgICAgICAgICogd2Vic29ja2V0L3Rlc3RzL3VybC13aXRoLXF1ZXJ5
LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogd2Vic29ja2V0L3Rlc3RzL3VybC13aXRo
LXF1ZXJ5LWZvci1uby1xdWVyeS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHdlYnNv
Y2tldC90ZXN0cy91cmwtd2l0aC1xdWVyeS1mb3Itbm8tcXVlcnkuaHRtbDogQWRkZWQuCisgICAg
ICAgICogd2Vic29ja2V0L3Rlc3RzL3VybC13aXRoLXF1ZXJ5Lmh0bWw6IEFkZGVkLgorCiAyMDA5
LTEyLTAxICBLZW50IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBEYXJpbiBBZGxlci4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYnNvY2tldC90
ZXN0cy9lY2hvLWxvY2F0aW9uX3dzaC5weSBiL0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy9l
Y2hvLWxvY2F0aW9uX3dzaC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4z
MzkwNTcwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL2Vj
aG8tbG9jYXRpb25fd3NoLnB5CkBAIC0wLDAgKzEsMzkgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDA5
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisK
K2Zyb20gbW9kX3B5d2Vic29ja2V0IGltcG9ydCBtc2d1dGlsCisKKworZGVmIHdlYl9zb2NrZXRf
ZG9fZXh0cmFfaGFuZHNoYWtlKHJlcXVlc3QpOgorICAgIHBhc3MKKworCitkZWYgd2ViX3NvY2tl
dF90cmFuc2Zlcl9kYXRhKHJlcXVlc3QpOgorICAgIHByaW50IHJlcXVlc3Qud3NfbG9jYXRpb24K
KyAgICBtc2d1dGlsLnNlbmRfbWVzc2FnZShyZXF1ZXN0LCByZXF1ZXN0LndzX2xvY2F0aW9uKQpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL25vLXF1ZXJ5X3dzaC5weSBi
L0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy9uby1xdWVyeV93c2gucHkKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI3OTYxNQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL3dlYnNvY2tldC90ZXN0cy9uby1xdWVyeV93c2gucHkKQEAgLTAsMCArMSwzOCBAQAor
IyBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMK
KyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
IyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4K
KyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisKKworZnJvbSBtb2RfcHl3ZWJzb2NrZXQgaW1wb3J0IG1zZ3V0aWwK
KworCitkZWYgd2ViX3NvY2tldF9kb19leHRyYV9oYW5kc2hha2UocmVxdWVzdCk6CisgICAgcmVx
dWVzdC53c19sb2NhdGlvbiA9IHJlcXVlc3Qud3NfcmVzb3VyY2Uuc3BsaXQoJz8nLCAxKVswXQor
CisKK2RlZiB3ZWJfc29ja2V0X3RyYW5zZmVyX2RhdGEocmVxdWVzdCk6CisgICAgbXNndXRpbC5z
ZW5kX21lc3NhZ2UocmVxdWVzdCwgcmVxdWVzdC53c19sb2NhdGlvbikKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy9zY3JpcHQtdGVzdHMvdXJsLXdpdGgtY3JlZGVudGlh
bC5qcyBiL0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy9zY3JpcHQtdGVzdHMvdXJsLXdpdGgt
Y3JlZGVudGlhbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGI3MjM1
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3NjcmlwdC10
ZXN0cy91cmwtd2l0aC1jcmVkZW50aWFsLmpzCkBAIC0wLDAgKzEsMzcgQEAKK2Rlc2NyaXB0aW9u
KCJNYWtlIHN1cmUgaGFuZHNoYWtlIHdpdGggVVJMIHdpdGggY3JlZGVudGFpbCBpbmZvIHN1Y2Nl
c3MuIik7CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworCit2YXIgdXJsID0gIndzOi8vdXNlcjpwYXNz
QDEyNy4wLjAuMTo4ODgwL3dlYnNvY2tldC90ZXN0cy9lY2hvLWxvY2F0aW9uIjsKK3ZhciBoYW5k
c2hha2Vfc3VjY2VzcyA9IGZhbHNlOwordmFyIHdzX2xvY2F0aW9uOworCitmdW5jdGlvbiBlbmRU
ZXN0KCkKK3sKKyAgICBjbGVhclRpbWVvdXQodGltZW91dElEKTsKKyAgICBzaG91bGRCZVRydWUo
ImhhbmRzaGFrZV9zdWNjZXNzIik7CisgICAgc2hvdWxkQmUoIndzX2xvY2F0aW9uIiwgJyJ3czov
LzEyNy4wLjAuMTo4ODgwL3dlYnNvY2tldC90ZXN0cy9lY2hvLWxvY2F0aW9uIicpOworICAgIGlz
U3VjY2Vzc2Z1bGx5UGFyc2VkKCk7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
cikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCitkZWJ1
ZygidXJsPSIgKyB1cmwpOwordmFyIHdzID0gbmV3IFdlYlNvY2tldCh1cmwpOword3Mub25vcGVu
ID0gZnVuY3Rpb24gKCkgeworICAgIGRlYnVnKCJXZWJTb2NrZXQgaXMgb3BlbiIpOworICAgIGhh
bmRzaGFrZV9zdWNjZXNzID0gdHJ1ZTsKK307Cit3cy5vbm1lc3NhZ2UgPSBmdW5jdGlvbiAoZXZ0
KSB7CisgICAgd3NfbG9jYXRpb24gPSBldnQuZGF0YTsKKyAgICBkZWJ1ZygicmVjZWl2ZWQ6IiAr
IHdzX2xvY2F0aW9uKTsKKyAgICB3cy5jbG9zZSgpOworfTsKK3dzLm9uY2xvc2UgPSBmdW5jdGlv
biAoKSB7CisgICAgZGVidWcoIldlYlNvY2tldCBpcyBjbG9zZWQiKTsKKyAgICBlbmRUZXN0KCk7
Cit9OwordmFyIHRpbWVvdXRJRCA9IHNldFRpbWVvdXQoImVuZFRlc3QoKSIsIDIwMDApOworCit2
YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dl
YnNvY2tldC90ZXN0cy9zY3JpcHQtdGVzdHMvdXJsLXdpdGgtZW1wdHktcXVlcnkuanMgYi9MYXlv
dXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvc2NyaXB0LXRlc3RzL3VybC13aXRoLWVtcHR5LXF1ZXJ5
LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiNDc4YjYKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvc2NyaXB0LXRlc3RzL3VybC13
aXRoLWVtcHR5LXF1ZXJ5LmpzCkBAIC0wLDAgKzEsMzcgQEAKK2Rlc2NyaXB0aW9uKCJNYWtlIHN1
cmUgaGFuZHNoYWtlIHdpdGggVVJMIHdpdGggZW1wdHkgcXVlcnkgY29tcG9uZW50cyBzdWNjZXNz
LiIpOworCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RD
b250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKwordmFyIHVybCA9ICJ3czovLzEyNy4wLjAuMTo4
ODgwL3dlYnNvY2tldC90ZXN0cy9lY2hvLWxvY2F0aW9uPyI7Cit2YXIgaGFuZHNoYWtlX3N1Y2Nl
c3MgPSBmYWxzZTsKK3ZhciB3c19sb2NhdGlvbjsKKworZnVuY3Rpb24gZW5kVGVzdCgpCit7Cisg
ICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJRCk7CisgICAgc2hvdWxkQmVUcnVlKCJoYW5kc2hha2Vf
c3VjY2VzcyIpOworICAgIHNob3VsZEJlKCJ3c19sb2NhdGlvbiIsICJ1cmwiKTsKKyAgICBpc1N1
Y2Nlc3NmdWxseVBhcnNlZCgpOworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIp
CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKworZGVidWco
InVybD0iICsgdXJsKTsKK3ZhciB3cyA9IG5ldyBXZWJTb2NrZXQodXJsKTsKK3dzLm9ub3BlbiA9
IGZ1bmN0aW9uICgpIHsKKyAgICBkZWJ1ZygiV2ViU29ja2V0IGlzIG9wZW4iKTsKKyAgICBoYW5k
c2hha2Vfc3VjY2VzcyA9IHRydWU7Cit9Oword3Mub25tZXNzYWdlID0gZnVuY3Rpb24gKGV2dCkg
eworICAgIHdzX2xvY2F0aW9uID0gZXZ0LmRhdGE7CisgICAgZGVidWcoInJlY2VpdmVkOiIgKyB3
c19sb2NhdGlvbik7CisgICAgd3MuY2xvc2UoKTsKK307Cit3cy5vbmNsb3NlID0gZnVuY3Rpb24g
KCkgeworICAgIGRlYnVnKCJXZWJTb2NrZXQgaXMgY2xvc2VkIik7CisgICAgZW5kVGVzdCgpOwor
fTsKK3ZhciB0aW1lb3V0SUQgPSBzZXRUaW1lb3V0KCJlbmRUZXN0KCkiLCAyMDAwKTsKKwordmFy
IHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJz
b2NrZXQvdGVzdHMvc2NyaXB0LXRlc3RzL3VybC13aXRoLWZyYWdtZW50LmpzIGIvTGF5b3V0VGVz
dHMvd2Vic29ja2V0L3Rlc3RzL3NjcmlwdC10ZXN0cy91cmwtd2l0aC1mcmFnbWVudC5qcwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2U4YTAxCi0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3NjcmlwdC10ZXN0cy91cmwtd2l0aC1mcmFn
bWVudC5qcwpAQCAtMCwwICsxLDM3IEBACitkZXNjcmlwdGlvbigiTWFrZSBzdXJlIGhhbmRzaGFr
ZSB3aXRoIFVSTCB3aXRoIGZyYWdtZW50IGNvbXBvbmVudHMgc3VjY2Vzcy4iKTsKKworaWYgKHdp
bmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0
VW50aWxEb25lKCk7CisKK3ZhciB1cmwgPSAid3M6Ly8xMjcuMC4wLjE6ODg4MC93ZWJzb2NrZXQv
dGVzdHMvZWNoby1sb2NhdGlvbiNmcmFnbWVudCI7Cit2YXIgaGFuZHNoYWtlX3N1Y2Nlc3MgPSBm
YWxzZTsKK3ZhciB3c19sb2NhdGlvbjsKKworZnVuY3Rpb24gZW5kVGVzdCgpCit7CisgICAgY2xl
YXJUaW1lb3V0KHRpbWVvdXRJRCk7CisgICAgc2hvdWxkQmVUcnVlKCJoYW5kc2hha2Vfc3VjY2Vz
cyIpOworICAgIHNob3VsZEJlKCJ3c19sb2NhdGlvbiIsICcid3M6Ly8xMjcuMC4wLjE6ODg4MC93
ZWJzb2NrZXQvdGVzdHMvZWNoby1sb2NhdGlvbiInKTsKKyAgICBpc1N1Y2Nlc3NmdWxseVBhcnNl
ZCgpOworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91
dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKworZGVidWcoInVybD0iICsgdXJsKTsK
K3ZhciB3cyA9IG5ldyBXZWJTb2NrZXQodXJsKTsKK3dzLm9ub3BlbiA9IGZ1bmN0aW9uICgpIHsK
KyAgICBkZWJ1ZygiV2ViU29ja2V0IGlzIG9wZW4iKTsKKyAgICBoYW5kc2hha2Vfc3VjY2VzcyA9
IHRydWU7Cit9Oword3Mub25tZXNzYWdlID0gZnVuY3Rpb24gKGV2dCkgeworICAgIHdzX2xvY2F0
aW9uID0gZXZ0LmRhdGE7CisgICAgZGVidWcoInJlY2VpdmVkOiIgKyB3c19sb2NhdGlvbik7Cisg
ICAgd3MuY2xvc2UoKTsKK307Cit3cy5vbmNsb3NlID0gZnVuY3Rpb24gKCkgeworICAgIGRlYnVn
KCJXZWJTb2NrZXQgaXMgY2xvc2VkIik7CisgICAgZW5kVGVzdCgpOworfTsKK3ZhciB0aW1lb3V0
SUQgPSBzZXRUaW1lb3V0KCJlbmRUZXN0KCkiLCAyMDAwKTsKKwordmFyIHN1Y2Nlc3NmdWxseVBh
cnNlZCA9IHRydWU7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvc2Ny
aXB0LXRlc3RzL3VybC13aXRoLXF1ZXJ5LWZvci1uby1xdWVyeS5qcyBiL0xheW91dFRlc3RzL3dl
YnNvY2tldC90ZXN0cy9zY3JpcHQtdGVzdHMvdXJsLXdpdGgtcXVlcnktZm9yLW5vLXF1ZXJ5Lmpz
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxZDExMmIKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvc2NyaXB0LXRlc3RzL3VybC13aXRo
LXF1ZXJ5LWZvci1uby1xdWVyeS5qcwpAQCAtMCwwICsxLDM3IEBACitkZXNjcmlwdGlvbigiTWFr
ZSBzdXJlIGhhbmRzaGFrZSB3aXRoIFVSTCB3aXRoIHF1ZXJ5IGNvbXBvbmVudHMgZmFpbHMgYWdh
aW5zdCBzZXJ2ZXIgdGhhdCBkb2Vzbid0IHN1cHBvcnQgcXVlcnkgY29tcG9uZW50LiIpOworCitp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVy
LndhaXRVbnRpbERvbmUoKTsKKwordmFyIHVybCA9ICJ3czovLzEyNy4wLjAuMTo4ODgwL3dlYnNv
Y2tldC90ZXN0cy9uby1xdWVyeS1zdXBwb3J0PyI7Cit2YXIgaGFuZHNoYWtlX3N1Y2Nlc3MgPSBm
YWxzZTsKK3ZhciB3c19sb2NhdGlvbjsKKworZnVuY3Rpb24gZW5kVGVzdCgpCit7CisgICAgY2xl
YXJUaW1lb3V0KHRpbWVvdXRJRCk7CisgICAgc2hvdWxkQmVGYWxzZSgiaGFuZHNoYWtlX3N1Y2Nl
c3MiKTsKKyAgICBzaG91bGRCZVVuZGVmaW5lZCgid3NfbG9jYXRpb24iKTsKKyAgICBpc1N1Y2Nl
c3NmdWxseVBhcnNlZCgpOworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisg
ICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKworZGVidWcoInVy
bD0iICsgdXJsKTsKK3ZhciB3cyA9IG5ldyBXZWJTb2NrZXQodXJsKTsKK3dzLm9ub3BlbiA9IGZ1
bmN0aW9uICgpIHsKKyAgICBkZWJ1ZygiV2ViU29ja2V0IGlzIG9wZW4iKTsKKyAgICBoYW5kc2hh
a2Vfc3VjY2VzcyA9IHRydWU7Cit9Oword3Mub25tZXNzZ2UgPSBmdW5jdGlvbiAoZXZ0KSB7Cisg
ICAgd3NfbG9jYXRpb24gPSBldnQuZGF0YTsKKyAgICBkZWJ1ZygicmVjZWl2ZWQ6IiArIHdzX2xv
Y2F0aW9uKTsKKyAgICB3cy5jbG9zZSgpOworfTsKK3dzLm9uY2xvc2UgPSBmdW5jdGlvbiAoKSB7
CisgICAgZGVidWcoIldlYlNvY2tldCBpcyBjbG9zZWQiKTsKKyAgICBlbmRUZXN0KCk7Cit9Owor
dmFyIHRpbWVvdXRJRCA9IHNldFRpbWVvdXQoImVuZFRlc3QoKSIsIDIwMDApOworCit2YXIgc3Vj
Y2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYnNvY2tl
dC90ZXN0cy9zY3JpcHQtdGVzdHMvdXJsLXdpdGgtcXVlcnkuanMgYi9MYXlvdXRUZXN0cy93ZWJz
b2NrZXQvdGVzdHMvc2NyaXB0LXRlc3RzL3VybC13aXRoLXF1ZXJ5LmpzCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxODYyOGIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy93ZWJzb2NrZXQvdGVzdHMvc2NyaXB0LXRlc3RzL3VybC13aXRoLXF1ZXJ5LmpzCkBAIC0w
LDAgKzEsMzcgQEAKK2Rlc2NyaXB0aW9uKCJNYWtlIHN1cmUgaGFuZHNoYWtlIHdpdGggVVJMIHdp
dGggcXVlcnkgY29tcG9uZW50cyBzdWNjZXNzLiIpOworCitpZiAod2luZG93LmxheW91dFRlc3RD
b250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKwor
dmFyIHVybCA9ICJ3czovLzEyNy4wLjAuMTo4ODgwL3dlYnNvY2tldC90ZXN0cy9lY2hvLWxvY2F0
aW9uP3E9diI7Cit2YXIgaGFuZHNoYWtlX3N1Y2Nlc3MgPSBmYWxzZTsKK3ZhciB3c19sb2NhdGlv
bjsKKworZnVuY3Rpb24gZW5kVGVzdCgpCit7CisgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJRCk7
CisgICAgc2hvdWxkQmVUcnVlKCJoYW5kc2hha2Vfc3VjY2VzcyIpOworICAgIHNob3VsZEJlKCJ3
c19sb2NhdGlvbiIsICJ1cmwiKTsKKyAgICBpc1N1Y2Nlc3NmdWxseVBhcnNlZCgpOworICAgIGlm
ICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9s
bGVyLm5vdGlmeURvbmUoKTsKK30KKworZGVidWcoInVybD0iICsgdXJsKTsKK3ZhciB3cyA9IG5l
dyBXZWJTb2NrZXQodXJsKTsKK3dzLm9ub3BlbiA9IGZ1bmN0aW9uICgpIHsKKyAgICBkZWJ1Zygi
V2ViU29ja2V0IGlzIG9wZW4iKTsKKyAgICBoYW5kc2hha2Vfc3VjY2VzcyA9IHRydWU7Cit9Owor
d3Mub25tZXNzYWdlID0gZnVuY3Rpb24gKGV2dCkgeworICAgIHdzX2xvY2F0aW9uID0gZXZ0LmRh
dGE7CisgICAgZGVidWcoInJlY2VpdmVkOiIgKyB3c19sb2NhdGlvbik7CisgICAgd3MuY2xvc2Uo
KTsKK307Cit3cy5vbmNsb3NlID0gZnVuY3Rpb24gKCkgeworICAgIGRlYnVnKCJXZWJTb2NrZXQg
aXMgY2xvc2VkIik7CisgICAgZW5kVGVzdCgpOworfTsKK3ZhciB0aW1lb3V0SUQgPSBzZXRUaW1l
b3V0KCJlbmRUZXN0KCkiLCAyMDAwKTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvdXJsLXdpdGgtY3JlZGVu
dGlhbC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvdXJsLXdpdGgt
Y3JlZGVudGlhbC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uZGE3OWQ1MgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0
cy91cmwtd2l0aC1jcmVkZW50aWFsLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE0IEBACitNYWtl
IHN1cmUgaGFuZHNoYWtlIHdpdGggVVJMIHdpdGggY3JlZGVudGFpbCBpbmZvIHN1Y2Nlc3MuCisK
K09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZv
bGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKwordXJsPXdzOi8vdXNlcjpwYXNzQDEyNy4wLjAu
MTo4ODgwL3dlYnNvY2tldC90ZXN0cy9lY2hvLWxvY2F0aW9uCitXZWJTb2NrZXQgaXMgb3Blbgor
cmVjZWl2ZWQ6d3M6Ly8xMjcuMC4wLjE6ODg4MC93ZWJzb2NrZXQvdGVzdHMvZWNoby1sb2NhdGlv
bgorV2ViU29ja2V0IGlzIGNsb3NlZAorUEFTUyBoYW5kc2hha2Vfc3VjY2VzcyBpcyB0cnVlCitQ
QVNTIHdzX2xvY2F0aW9uIGlzICJ3czovLzEyNy4wLjAuMTo4ODgwL3dlYnNvY2tldC90ZXN0cy9l
Y2hvLWxvY2F0aW9uIgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENP
TVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy91cmwtd2l0
aC1jcmVkZW50aWFsLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvdXJsLXdpdGgt
Y3JlZGVudGlhbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhYzU1
NmEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvdXJsLXdp
dGgtY3JlZGVudGlhbC5odG1sCkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJ
QyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0
eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3Nz
Ij4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1w
b3N0LWZ1bmN0aW9uLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0iZGVz
Y3JpcHRpb24iPjwvZGl2PgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0IHNyYz0i
c2NyaXB0LXRlc3RzL3VybC13aXRoLWNyZWRlbnRpYWwuanMiPjwvc2NyaXB0PgorPC9ib2R5Pgor
PC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3VybC13aXRo
LWVtcHR5LXF1ZXJ5LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy91
cmwtd2l0aC1lbXB0eS1xdWVyeS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uZjJjYjllMwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYnNv
Y2tldC90ZXN0cy91cmwtd2l0aC1lbXB0eS1xdWVyeS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwx
NCBAQAorTWFrZSBzdXJlIGhhbmRzaGFrZSB3aXRoIFVSTCB3aXRoIGVtcHR5IHF1ZXJ5IGNvbXBv
bmVudHMgc3VjY2Vzcy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQ
QVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCit1cmw9d3M6Ly8x
MjcuMC4wLjE6ODg4MC93ZWJzb2NrZXQvdGVzdHMvZWNoby1sb2NhdGlvbj8KK1dlYlNvY2tldCBp
cyBvcGVuCityZWNlaXZlZDp3czovLzEyNy4wLjAuMTo4ODgwL3dlYnNvY2tldC90ZXN0cy9lY2hv
LWxvY2F0aW9uPworV2ViU29ja2V0IGlzIGNsb3NlZAorUEFTUyBoYW5kc2hha2Vfc3VjY2VzcyBp
cyB0cnVlCitQQVNTIHdzX2xvY2F0aW9uIGlzIHVybAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQg
aXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYnNv
Y2tldC90ZXN0cy91cmwtd2l0aC1lbXB0eS1xdWVyeS5odG1sIGIvTGF5b3V0VGVzdHMvd2Vic29j
a2V0L3Rlc3RzL3VybC13aXRoLWVtcHR5LXF1ZXJ5Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uMjI3ZjBiMwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dl
YnNvY2tldC90ZXN0cy91cmwtd2l0aC1lbXB0eS1xdWVyeS5odG1sCkBAIC0wLDAgKzEsMTMgQEAK
KzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgor
PGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2Zhc3QvanMvcmVzb3Vy
Y2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291
cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9q
cy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LWZ1bmN0aW9uLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4K
Kzxib2R5PgorPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2PgorPGRpdiBpZD0iY29uc29sZSI+
PC9kaXY+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL3VybC13aXRoLWVtcHR5LXF1ZXJ5Lmpz
Ij48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dl
YnNvY2tldC90ZXN0cy91cmwtd2l0aC1mcmFnbWVudC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0
cy93ZWJzb2NrZXQvdGVzdHMvdXJsLXdpdGgtZnJhZ21lbnQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3Yzc2NGYKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvdXJsLXdpdGgtZnJhZ21lbnQtZXhwZWN0ZWQudHh0
CkBAIC0wLDAgKzEsMTQgQEAKK01ha2Ugc3VyZSBoYW5kc2hha2Ugd2l0aCBVUkwgd2l0aCBmcmFn
bWVudCBjb21wb25lbnRzIHN1Y2Nlc3MuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNl
cmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKwor
dXJsPXdzOi8vMTI3LjAuMC4xOjg4ODAvd2Vic29ja2V0L3Rlc3RzL2VjaG8tbG9jYXRpb24jZnJh
Z21lbnQKK1dlYlNvY2tldCBpcyBvcGVuCityZWNlaXZlZDp3czovLzEyNy4wLjAuMTo4ODgwL3dl
YnNvY2tldC90ZXN0cy9lY2hvLWxvY2F0aW9uCitXZWJTb2NrZXQgaXMgY2xvc2VkCitQQVNTIGhh
bmRzaGFrZV9zdWNjZXNzIGlzIHRydWUKK1BBU1Mgd3NfbG9jYXRpb24gaXMgIndzOi8vMTI3LjAu
MC4xOjg4ODAvd2Vic29ja2V0L3Rlc3RzL2VjaG8tbG9jYXRpb24iCitQQVNTIHN1Y2Nlc3NmdWxs
eVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvd2Vic29ja2V0L3Rlc3RzL3VybC13aXRoLWZyYWdtZW50Lmh0bWwgYi9MYXlvdXRUZXN0cy93
ZWJzb2NrZXQvdGVzdHMvdXJsLXdpdGgtZnJhZ21lbnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi4yYjM0NzcwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
d2Vic29ja2V0L3Rlc3RzL3VybC13aXRoLWZyYWdtZW50Lmh0bWwKQEAgLTAsMCArMSwxMyBAQAor
PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8
aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZmFzdC9qcy9yZXNvdXJj
ZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3Vy
Y2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pz
L3Jlc291cmNlcy9qcy10ZXN0LXBvc3QtZnVuY3Rpb24uanMiPjwvc2NyaXB0PgorPC9oZWFkPgor
PGJvZHk+Cis8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2IGlkPSJjb25zb2xlIj48
L2Rpdj4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvdXJsLXdpdGgtZnJhZ21lbnQuanMiPjwv
c2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vic29j
a2V0L3Rlc3RzL3VybC13aXRoLXF1ZXJ5LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYnNv
Y2tldC90ZXN0cy91cmwtd2l0aC1xdWVyeS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uNDllN2MyOAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L3dlYnNvY2tldC90ZXN0cy91cmwtd2l0aC1xdWVyeS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwx
NCBAQAorTWFrZSBzdXJlIGhhbmRzaGFrZSB3aXRoIFVSTCB3aXRoIHF1ZXJ5IGNvbXBvbmVudHMg
c3VjY2Vzcy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBt
ZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCit1cmw9d3M6Ly8xMjcuMC4w
LjE6ODg4MC93ZWJzb2NrZXQvdGVzdHMvZWNoby1sb2NhdGlvbj9xPXYKK1dlYlNvY2tldCBpcyBv
cGVuCityZWNlaXZlZDp3czovLzEyNy4wLjAuMTo4ODgwL3dlYnNvY2tldC90ZXN0cy9lY2hvLWxv
Y2F0aW9uP3E9dgorV2ViU29ja2V0IGlzIGNsb3NlZAorUEFTUyBoYW5kc2hha2Vfc3VjY2VzcyBp
cyB0cnVlCitQQVNTIHdzX2xvY2F0aW9uIGlzIHVybAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQg
aXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYnNv
Y2tldC90ZXN0cy91cmwtd2l0aC1xdWVyeS1mb3Itbm8tcXVlcnktZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3VybC13aXRoLXF1ZXJ5LWZvci1uby1xdWVyeS1leHBl
Y3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzlhZjc3YwotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy91cmwtd2l0aC1xdWVy
eS1mb3Itbm8tcXVlcnktZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTIgQEAKK01ha2Ugc3VyZSBo
YW5kc2hha2Ugd2l0aCBVUkwgd2l0aCBxdWVyeSBjb21wb25lbnRzIGZhaWxzIGFnYWluc3Qgc2Vy
dmVyIHRoYXQgZG9lc24ndCBzdXBwb3J0IHF1ZXJ5IGNvbXBvbmVudC4KKworT24gc3VjY2Vzcywg
eW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRF
U1QgQ09NUExFVEUiLgorCit1cmw9d3M6Ly8xMjcuMC4wLjE6ODg4MC93ZWJzb2NrZXQvdGVzdHMv
bm8tcXVlcnktc3VwcG9ydD8KK1dlYlNvY2tldCBpcyBjbG9zZWQKK1BBU1MgaGFuZHNoYWtlX3N1
Y2Nlc3MgaXMgZmFsc2UKK1BBU1Mgd3NfbG9jYXRpb24gaXMgdW5kZWZpbmVkLgorUEFTUyBzdWNj
ZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy91cmwtd2l0aC1xdWVyeS1mb3Itbm8tcXVlcnkuaHRt
bCBiL0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy91cmwtd2l0aC1xdWVyeS1mb3Itbm8tcXVl
cnkuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjBmYzM5Ci0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3VybC13aXRoLXF1ZXJ5
LWZvci1uby1xdWVyeS5odG1sCkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJ
QyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0
eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3Nz
Ij4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1w
b3N0LWZ1bmN0aW9uLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0iZGVz
Y3JpcHRpb24iPjwvZGl2PgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0IHNyYz0i
c2NyaXB0LXRlc3RzL3VybC13aXRoLXF1ZXJ5LWZvci1uby1xdWVyeS5qcyI+PC9zY3JpcHQ+Cis8
L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMv
dXJsLXdpdGgtcXVlcnkuaHRtbCBiL0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy91cmwtd2l0
aC1xdWVyeS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjOTA1MDIK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvdXJsLXdpdGgt
cXVlcnkuaHRtbApAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lF
VEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0
IiBocmVmPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2Ny
aXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC1mdW5j
dGlvbi5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9ImRlc2NyaXB0aW9u
Ij48L2Rpdj4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9InNjcmlwdC10
ZXN0cy91cmwtd2l0aC1xdWVyeS5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYg
LS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDMwOWQ3
YzkuLmQ1YzUwMGUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMDktMTItMDEgIEZ1bWl0b3NoaSBVa2FpICA8
dWthaUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgV2ViU29ja2V0IGhhbmRzaGFrZSBjaGVjayBxdWVyeSBjb21wb25lbnQgb2Yg
VVJMCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMTYx
NworCisgICAgICAgIFRlc3RzOiB3ZWJzb2NrZXQvdGVzdHMvdXJsLXdpdGgtY3JlZGVudGlhbC5o
dG1sCisgICAgICAgICAgICAgICB3ZWJzb2NrZXQvdGVzdHMvdXJsLXdpdGgtZW1wdHktcXVlcnku
aHRtbAorICAgICAgICAgICAgICAgd2Vic29ja2V0L3Rlc3RzL3VybC13aXRoLWZyYWdtZW50Lmh0
bWwKKyAgICAgICAgICAgICAgIHdlYnNvY2tldC90ZXN0cy91cmwtd2l0aC1xdWVyeS1mb3Itbm8t
cXVlcnkuaHRtbAorICAgICAgICAgICAgICAgd2Vic29ja2V0L3Rlc3RzL3VybC13aXRoLXF1ZXJ5
Lmh0bWwKKworICAgICAgICAqIHBsYXRmb3JtL0tVUkxHb29nbGUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6S1VSTDo6cXVlcnkpOgorICAgICAgICAqIHdlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNo
YWtlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJlc291cmNlTmFtZSk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJTb2NrZXRIYW5kc2hha2U6OmNsaWVudExvY2F0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYlNvY2tldEhhbmRzaGFrZTo6Y2xpZW50SGFuZHNoYWtlTWVzc2FnZSk6CisKIDIwMDkt
MTItMDEgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IERhcmluIEFkbGVyLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9LVVJMR29v
Z2xlLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vS1VSTEdvb2dsZS5jcHAKaW5kZXggNzYzYmYzYi4u
NTYwNDg4MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9LVVJMR29vZ2xlLmNwcAorKysg
Yi9XZWJDb3JlL3BsYXRmb3JtL0tVUkxHb29nbGUuY3BwCkBAIC01NTIsNyArNTUyLDEwIEBAIFN0
cmluZyBLVVJMOjpxdWVyeSgpIGNvbnN0CiAgICAgLy8gQnVnOiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwMTUgdGhpcyBmdW5jdGlvbiByZXR1cm5zCiAgICAgLy8g
YW4gZW1wdHkgc3RyaW5nIHdoZW4gdGhlIHF1ZXJ5IGlzIGVtcHR5IHJhdGhlciB0aGFuIGEgbnVs
bCAobm90IHN1cmUKICAgICAvLyB3aGljaCBpcyByaWdodCkuCi0gICAgcmV0dXJuIFN0cmluZygi
IiwgMCk7CisgICAgLy8gUmV0dXJucyBhIG51bGwgaWYgdGhlIHF1ZXJ5IGlzIG5vdCBzcGVjaWZp
ZWQsIGluc3RlYWQgb2YgZW1wdHkuCisgICAgaWYgKG1fdXJsLm1fcGFyc2VkLnF1ZXJ5LmlzX3Zh
bGlkKCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoIiIsIDApOworICAgIHJldHVybiBTdHJpbmco
KTsKIH0KIAogU3RyaW5nIEtVUkw6OnBhdGgoKSBjb25zdApkaWZmIC0tZ2l0IGEvV2ViQ29yZS93
ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHAgYi9XZWJDb3JlL3dlYnNvY2tldHMvV2Vi
U29ja2V0SGFuZHNoYWtlLmNwcAppbmRleCA2OTFmYTFjLi5kMWRhNDQzIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcAorKysgYi9XZWJDb3JlL3dl
YnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcApAQCAtNzQsNiArNzQsMTMgQEAgc3RhdGlj
IFN0cmluZyBleHRyYWN0UmVzcG9uc2VDb2RlKGNvbnN0IGNoYXIqIGhlYWRlciwgaW50IGxlbikK
ICAgICByZXR1cm4gU3RyaW5nKHNwYWNlMSArIDEsIHNwYWNlMiAtIHNwYWNlMSAtIDEpOwogfQog
CitzdGF0aWMgU3RyaW5nIHJlc291cmNlTmFtZShjb25zdCBLVVJMJiB1cmwpCit7CisgICAgaWYg
KHVybC5xdWVyeSgpLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gdXJsLnBhdGgoKTsKKyAgICBy
ZXR1cm4gdXJsLnBhdGgoKSArICI/IiArIHVybC5xdWVyeSgpOworfQorCiBXZWJTb2NrZXRIYW5k
c2hha2U6OldlYlNvY2tldEhhbmRzaGFrZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYg
cHJvdG9jb2wsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCiAgICAgOiBtX3VybCh1
cmwpCiAgICAgLCBtX2NsaWVudFByb3RvY29sKHByb3RvY29sKQpAQCAtMTM5LDcgKzE0Niw3IEBA
IFN0cmluZyBXZWJTb2NrZXRIYW5kc2hha2U6OmNsaWVudExvY2F0aW9uKCkgY29uc3QKICAgICAg
ICAgICAgIGJ1aWxkZXIuYXBwZW5kKFN0cmluZzo6bnVtYmVyKG1fdXJsLnBvcnQoKSkpOwogICAg
ICAgICB9CiAgICAgfQotICAgIGJ1aWxkZXIuYXBwZW5kKG1fdXJsLnBhdGgoKSk7CisgICAgYnVp
bGRlci5hcHBlbmQocmVzb3VyY2VOYW1lKG1fdXJsKSk7CiAgICAgcmV0dXJuIGJ1aWxkZXIudG9T
dHJpbmcoKTsKIH0KIApAQCAtMTQ4LDExICsxNTUsNyBAQCBDU3RyaW5nIFdlYlNvY2tldEhhbmRz
aGFrZTo6Y2xpZW50SGFuZHNoYWtlTWVzc2FnZSgpIGNvbnN0CiAgICAgU3RyaW5nQnVpbGRlciBi
dWlsZGVyOwogCiAgICAgYnVpbGRlci5hcHBlbmQoIkdFVCAiKTsKLSAgICBidWlsZGVyLmFwcGVu
ZChtX3VybC5wYXRoKCkpOwotICAgIGlmICghbV91cmwucXVlcnkoKS5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgYnVpbGRlci5hcHBlbmQoIj8iKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQobV91cmwu
cXVlcnkoKSk7Ci0gICAgfQorICAgIGJ1aWxkZXIuYXBwZW5kKHJlc291cmNlTmFtZShtX3VybCkp
OwogICAgIGJ1aWxkZXIuYXBwZW5kKCIgSFRUUC8xLjFcclxuIik7CiAgICAgYnVpbGRlci5hcHBl
bmQoIlVwZ3JhZGU6IFdlYlNvY2tldFxyXG4iKTsKICAgICBidWlsZGVyLmFwcGVuZCgiQ29ubmVj
dGlvbjogVXBncmFkZVxyXG4iKTsK
</data>
<flag name="review"
          id="25908"
          type_id="1"
          status="+"
          setter="ap"
    />
          </attachment>
      

    </bug>

</bugzilla>