<?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>51253</bug_id>
          
          <creation_ts>2010-12-17 07:55:10 -0800</creation_ts>
          <short_desc>WebSockets: unbounded buffer growth when server sends bad data</short_desc>
          <delta_ts>2011-01-10 18:46:13 -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 JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://bohuco.net/dev/websocket/</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Joe Mason">joenotcharles</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>ifette</cc>
    
    <cc>ukai</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yong.li.webkit</cc>
    
    <cc>yutak</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>323770</commentid>
    <comment_count>0</comment_count>
    <who name="Joe Mason">joenotcharles</who>
    <bug_when>2010-12-17 07:55:10 -0800</bug_when>
    <thetext>If a server sends data with an embedded NULL before the handshake, the socket will stay in the &quot;connecting&quot; state and buffer all data sent to it.  The reason is this clause in WebSocketHandshake::readServerHandshake:

    if (!strnstr(header, &quot;\r\n\r\n&quot;, len)) {
        // Just hasn&apos;t been received fully yet.
        m_mode = Incomplete;
        return -1;
    }

strnstr stops searching at the first NULL, so if one is found before \r\n\r\n then the client will continue to read more data and then search the same segment of the buffer for \r\n\r\n.

This can be seen on http://bohuco.net/dev/websocket/, whose server has a race condition: every time data is received from one connected socket it is echoed to all connected sockets without checking their state, even those that have not completed a handshake.  So it&apos;s possible for the first bytes received by a client to be a WebSocket frame, which begins with NULL.  (To test this, open a window to http://bohuco.net/dev/websocket/ and move the mouse continuously in it while connecting to the same site in another window.  It will trigger the race condition at least half the time.)

The correct thing to do is disconnect immediately when the invalid frame is received from the server instead of the handshake.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>323772</commentid>
    <comment_count>1</comment_count>
      <attachid>76879</attachid>
    <who name="Joe Mason">joenotcharles</who>
    <bug_when>2010-12-17 08:02:43 -0800</bug_when>
    <thetext>Created attachment 76879
patch to check beginning bytes of buffer

My solution is to check the exact beginning bytes of the buffer for &quot;HTTP/&quot; before calling strnstr.  This makes sure that if a websocket frame without a handshake is sent it will disconnect immediately, and is safer before the existing handshake parser could accept other line-oriented protocols with different text before the first space.

It just occurred to me that this fix still us vulnerable to a server that sends &quot;HTTP/\0&quot;.

Unfortunately, I haven&apos;t had time to create a test case, but I wanted to file this before going on vacation tomorrow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>323777</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-17 08:09:38 -0800</bug_when>
    <thetext>Attachment 76879 did not build on chromium:
Build output: http://queues.webkit.org/results/7205018</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>323867</commentid>
    <comment_count>3</comment_count>
      <attachid>76879</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-12-17 10:44:01 -0800</bug_when>
    <thetext>Comment on attachment 76879
patch to check beginning bytes of buffer

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

This is a violation of WebSockets-76 spec - the spec doesn&apos;t require the response to start with &quot;HTTP/&quot;, see &lt;http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol-76#section-4.1&gt; step 28.

Also, this doesn&apos;t look like a complete fix.  What if the response line starts with &quot;HTTP/&quot;, but doesn&apos;t have any newlines? Current code would just read INT_MAX bytes, which is effectively unbounded.

It seems that we should just put a more practical limit on status line length, and tell the hybi working group that a limit should be added to the spec. In fact, it will be possible to add a regression test then.

&gt; WebCore/ChangeLog:14
&gt; +        No new tests. (OOPS!)

A commit hook will prevent landing with OOPS - please replace it with an explanation of why there is no test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329674</commentid>
    <comment_count>4</comment_count>
    <who name="Joe Mason">joenotcharles</who>
    <bug_when>2011-01-05 11:08:33 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 76879 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=76879&amp;action=review
&gt; 
&gt; This is a violation of WebSockets-76 spec - the spec doesn&apos;t require the response to start with &quot;HTTP/&quot;, see &lt;http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol-76#section-4.1&gt; step 28.

I guess that&apos;s what making reasonable assumptions gets you...

What&apos;s a good max length?  The server response doesn&apos;t contain a URL so we don&apos;t have to worry about long addresses.  My first thought is to just use 1024 chars.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329684</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-01-05 11:23:04 -0800</bug_when>
    <thetext>Please consider sending an e-mail to hybi@ietf.org working group about maximum length first. If there is no response, I&apos;d go with 1024 bytes indeed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329956</commentid>
    <comment_count>6</comment_count>
    <who name="Ian Fette">ifette</who>
    <bug_when>2011-01-05 18:19:35 -0800</bug_when>
    <thetext>It seems like we have rough consensus on the working group for a new handshake that is GET+Upgrade with the payload masking from client to server. As such, I&apos;m working on a -04 draft this week based on that method. The -04 text I&apos;m working on does not have this issue. 

In my mind -76 is long dead, I would much rather see us put the nail in it by shipping -04 than continuing to fiddle with -76. In the meantime however, if this is important to avoid any sort of exploitable bug I would say feel free to do what you want, -76 should hopefully live no longer than another month and so I&apos;m not really worried about being strictly compliant to a version of the spec we&apos;re trying to kill.

My $0.02.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>329957</commentid>
    <comment_count>7</comment_count>
    <who name="Ian Fette">ifette</who>
    <bug_when>2011-01-05 18:22:16 -0800</bug_when>
    <thetext>Also, as a bit more context, I&apos;m trying to write -04 in the context of RFC2616. That is, rather than saying &quot;Read X bytes, interpret it in such a fashion&quot; it&apos;s more &quot;There shall be a status-line as per RFC2616, there shall be a header called this, etc.&quot; Given that -04 is meant to be HTTP complaint, I&apos;m hoping we can re-use not just definitions from HTTP but also hopefully some of the parsing code for the handshake.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331518</commentid>
    <comment_count>8</comment_count>
      <attachid>78375</attachid>
    <who name="Joe Mason">joenotcharles</who>
    <bug_when>2011-01-09 23:34:13 -0800</bug_when>
    <thetext>Created attachment 78375
patch to cap handshake length at 1024 bytes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331519</commentid>
    <comment_count>9</comment_count>
      <attachid>78376</attachid>
    <who name="Joe Mason">joenotcharles</who>
    <bug_when>2011-01-09 23:36:39 -0800</bug_when>
    <thetext>Created attachment 78376
same patch, with ChangeLogs. Oops.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331520</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-09 23:40:11 -0800</bug_when>
    <thetext>Attachment 78375 did not build on chromium:
Build output: http://queues.webkit.org/results/7477004</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331521</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-09 23:42:15 -0800</bug_when>
    <thetext>Attachment 78376 did not build on chromium:
Build output: http://queues.webkit.org/results/7371101</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331522</commentid>
    <comment_count>12</comment_count>
      <attachid>78377</attachid>
    <who name="Joe Mason">joenotcharles</who>
    <bug_when>2011-01-09 23:54:26 -0800</bug_when>
    <thetext>Created attachment 78377
fix chromium build failure</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331535</commentid>
    <comment_count>13</comment_count>
      <attachid>78377</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-01-10 01:20:29 -0800</bug_when>
    <thetext>Comment on attachment 78377
fix chromium build failure

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

I&apos;m going to say r+, but please address the comments before landing.

If you&apos;d like to ask for another quick review pass after addressing the comments, please feel free to do so.

&gt; Source/WebCore/websockets/WebSocketHandshake.cpp:3
&gt; + * Copyright (C) Research In Motion Limited 2011. All rights reserved.

Should it be &quot;Copyright (C) 2011&quot;?

&gt; Source/WebCore/websockets/WebSocketHandshake.cpp:433
&gt; +    static const int maxLength = 1024;

We don&apos;t abbreviate when we can avoid it. I suggest something like &quot;maximumStatusLineLength&quot;.

&gt; Source/WebCore/websockets/WebSocketHandshake.cpp:454
&gt; +            // The caller will search for the ending newline with strnstr,
&gt; +            // which does not scan past nulls.  So a null in the stream will
&gt; +            // cause it to loop forever, reading more data and then repeating
&gt; +            // the search only on the data before the null, unless we abort
&gt; +            // immediately.

This explains why the caller will do a wrong thing, but doesn&apos;t explain why we shouldn&apos;t just fix the caller. Do we really want to detect an error here?

Assuming that I understand the situation correctly, this may be more clear: &quot;The caller isn&apos;t prepared to deal with null bytes in status line. WebSockets specification doesn&apos;t prohibit this, but HTTP does, so we&apos;ll just treat this as an error&quot;.

&gt; Source/WebCore/websockets/WebSocketHandshake.cpp:456
&gt; +            return p + 1 - header;

Shouldn&apos;t we set m_mode = Failed?

&gt; Source/WebCore/websockets/WebSocketHandshake.cpp:466
&gt; -        return INT_MAX;
&gt; +        return maxLength;

Ditto, shouldn&apos;t we set m_mode = Failed?

&gt; LayoutTests/http/tests/websocket/tests/handshake-fail-by-maxlength-expected.txt:1
&gt; +CONSOLE MESSAGE: line 0: Status line is too long: ................................................................................................................................â¦

Hmm, but this isn&apos;t 1024 bytes? Why?

Please consider not dumping the bad string - if it&apos;s over 1024 bytes, it&apos;s likely garbage, and can obstruct reading other text in console. The developer can using tcpdump or Wireshark to debug the problem.

&gt; LayoutTests/http/tests/websocket/tests/handshake-fail-by-maxlength.html:13
&gt; +&lt;!DOCTYPE HTML PUBLIC &quot;-//IETF//DTD HTML//EN&quot;&gt;
&gt; +&lt;html&gt;
&gt; +&lt;head&gt;
&gt; +&lt;link rel=&quot;stylesheet&quot; href=&quot;../../../js-test-resources/js-test-style.css&quot;&gt;
&gt; +&lt;script src=&quot;../../../js-test-resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
&gt; +&lt;script src=&quot;../../../js-test-resources/js-test-post-function.js&quot;&gt;&lt;/script&gt;
&gt; +&lt;/head&gt;
&gt; +&lt;body&gt;
&gt; +&lt;div id=&quot;description&quot;&gt;&lt;/div&gt;
&gt; +&lt;div id=&quot;console&quot;&gt;&lt;/div&gt;
&gt; +&lt;script src=&quot;script-tests/handshake-fail-by-maxlength.js&quot;&gt;&lt;/script&gt;
&gt; +&lt;/body&gt;
&gt; +&lt;/html&gt;

Please don&apos;t split tests into .html and .js parts. This is a anti-pattern that can be seen in many existing tests, but it should be avoided for new tests.

&gt; LayoutTests/http/tests/websocket/tests/handshake-fail-by-maxlength_wsh.py:1
&gt; +# Copyright (C) Research In Motion Limited 2011. All rights reserved.

Copyright (C) 2011?

&gt; LayoutTests/http/tests/websocket/tests/handshake-fail-by-maxlength_wsh.py:15
&gt; +#     * Neither the name of Google Inc. nor the names of its
&gt; +# contributors may be used to endorse or promote products derived from
&gt; +# this software without specific prior written permission.

&lt;http://webkit.org/coding/bsd-license.html&gt; is two clause. Or is this copied from a Google originated file, so you decided to keep their license?

I don&apos;t really understand why this needs a license block, and other new files don&apos;t.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331636</commentid>
    <comment_count>14</comment_count>
    <who name="Joe Mason">joenotcharles</who>
    <bug_when>2011-01-10 08:27:56 -0800</bug_when>
    <thetext>(In reply to comment #13)

&gt; &gt; Source/WebCore/websockets/WebSocketHandshake.cpp:3
&gt; &gt; + * Copyright (C) Research In Motion Limited 2011. All rights reserved.
&gt; 
&gt; Should it be &quot;Copyright (C) 2011&quot;?

Not according to our legal department.  I don&apos;t know why they want us to be special snowflakes.

&gt; &gt; Source/WebCore/websockets/WebSocketHandshake.cpp:433
&gt; &gt; +    static const int maxLength = 1024;
&gt; 
&gt; We don&apos;t abbreviate when we can avoid it. I suggest something like &quot;maximumStatusLineLength&quot;.

Whoops, will fix.

&gt; &gt; Source/WebCore/websockets/WebSocketHandshake.cpp:454
&gt; &gt; +            // The caller will search for the ending newline with strnstr,
&gt; &gt; +            // which does not scan past nulls.  So a null in the stream will
&gt; &gt; +            // cause it to loop forever, reading more data and then repeating
&gt; &gt; +            // the search only on the data before the null, unless we abort
&gt; &gt; +            // immediately.
&gt; 
&gt; This explains why the caller will do a wrong thing, but doesn&apos;t explain why we shouldn&apos;t just fix the caller. Do we really want to detect an error here?

Fixing the caller would involve hand rolling string searching code or drastically changing the algorithm, which I think is overkill for this bug.  This code will be obsolete once we implement the new websocket spec anyway.

&gt; Assuming that I understand the situation correctly, this may be more clear: &quot;The caller isn&apos;t prepared to deal with null bytes in status line. WebSockets specification doesn&apos;t prohibit this, but HTTP does, so we&apos;ll just treat this as an error&quot;.
&gt; 
&gt; &gt; Source/WebCore/websockets/WebSocketHandshake.cpp:456
&gt; &gt; +            return p + 1 - header;
&gt; 
&gt; Shouldn&apos;t we set m_mode = Failed?

The caller will do this, since the statusCode is -1.

&gt; &gt; LayoutTests/http/tests/websocket/tests/handshake-fail-by-maxlength-expected.txt:1
&gt; &gt; +CONSOLE MESSAGE: line 0: Status line is too long: ................................................................................................................................â¦
&gt; 
&gt; Hmm, but this isn&apos;t 1024 bytes? Why?

Console messages are capped at roughly 128 bytes (see trimConsoleMessage).

&gt; Please consider not dumping the bad string - if it&apos;s over 1024 bytes, it&apos;s likely garbage, and can obstruct reading other text in console. The developer can using tcpdump or Wireshark to debug the problem.

Ok, was just following the existing usage.  I&apos;ll change it.

&gt; &gt; LayoutTests/http/tests/websocket/tests/handshake-fail-by-maxlength.html:13
&gt; &gt; +&lt;!DOCTYPE HTML PUBLIC &quot;-//IETF//DTD HTML//EN&quot;&gt;
&gt; &gt; +&lt;html&gt;
&gt; &gt; +&lt;head&gt;
&gt; &gt; +&lt;link rel=&quot;stylesheet&quot; href=&quot;../../../js-test-resources/js-test-style.css&quot;&gt;
&gt; &gt; +&lt;script src=&quot;../../../js-test-resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
&gt; &gt; +&lt;script src=&quot;../../../js-test-resources/js-test-post-function.js&quot;&gt;&lt;/script&gt;
&gt; &gt; +&lt;/head&gt;
&gt; &gt; +&lt;body&gt;
&gt; &gt; +&lt;div id=&quot;description&quot;&gt;&lt;/div&gt;
&gt; &gt; +&lt;div id=&quot;console&quot;&gt;&lt;/div&gt;
&gt; &gt; +&lt;script src=&quot;script-tests/handshake-fail-by-maxlength.js&quot;&gt;&lt;/script&gt;
&gt; &gt; +&lt;/body&gt;
&gt; &gt; +&lt;/html&gt;
&gt; 
&gt; Please don&apos;t split tests into .html and .js parts. This is a anti-pattern that can be seen in many existing tests, but it should be avoided for new tests.

Ditto, I was copying an existing handshake-fail test.  I&apos;ll fix it.

&gt; &gt; LayoutTests/http/tests/websocket/tests/handshake-fail-by-maxlength_wsh.py:15
&gt; &gt; +#     * Neither the name of Google Inc. nor the names of its
&gt; &gt; +# contributors may be used to endorse or promote products derived from
&gt; &gt; +# this software without specific prior written permission.
&gt; 
&gt; &lt;http://webkit.org/coding/bsd-license.html&gt; is two clause. Or is this copied from a Google originated file, so you decided to keep their license?

Yeah, cut and paste error.  I&apos;ll fix it.

&gt; I don&apos;t really understand why this needs a license block, and other new files don&apos;t.

Again, was in the original file I used as a model.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331643</commentid>
    <comment_count>15</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-01-10 08:52:37 -0800</bug_when>
    <thetext>&gt; &gt; Shouldn&apos;t we set m_mode = Failed?
&gt; The caller will do this, since the statusCode is -1.

Indeed. It seems a bit opaque though - I think that code that detects and logs the error should also set the error flag.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331679</commentid>
    <comment_count>16</comment_count>
      <attachid>78408</attachid>
    <who name="Joe Mason">joenotcharles</who>
    <bug_when>2011-01-10 10:30:16 -0800</bug_when>
    <thetext>Created attachment 78408
addressed review comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331680</commentid>
    <comment_count>17</comment_count>
    <who name="Joe Mason">joenotcharles</who>
    <bug_when>2011-01-10 10:33:28 -0800</bug_when>
    <thetext>&gt; &gt; I don&apos;t really understand why this needs a license block, and other new files don&apos;t.
&gt;
&gt; Again, was in the original file I used as a model

Oh, yeah, the other reason is that the .html and .js files retain a lot of existing code copied from existing tests, so I can&apos;t just slap a new license on them claiming copyright.  The .py files are all-original, so I added a license.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331702</commentid>
    <comment_count>18</comment_count>
      <attachid>78408</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-01-10 10:50:44 -0800</bug_when>
    <thetext>Comment on attachment 78408
addressed review comments

I still don&apos;t like the subtlety or error detection code, but OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331805</commentid>
    <comment_count>19</comment_count>
      <attachid>78408</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-01-10 12:04:51 -0800</bug_when>
    <thetext>Comment on attachment 78408
addressed review comments

Rejecting attachment 78408 from commit-queue.

Failed to run &quot;[&apos;./Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=eseidel-sf-cq&apos;, &apos;land-attachment&apos;, &apos;--force-clean&apos;, &apos;--ignore-builders&apos;, &apos;--non-interactive&apos;, &apos;--parent-command=commit-queue&apos;, 78408]&quot; exit_code: 2
Last 500 characters of output:
2f8a4035bfde05e82f551a1eeb73a3c944d50fda
r75397 = 9b49509651112f4326642de3ad5ef7a0772f56fb
r75398 = ae7e202e6792383d22079e2f8013d5d8a0ebc1ac
r75399 = 5a6966f33c249967eaee5fcf1a15ec1a44a998ac
r75400 = cd356303c6d0a4b682875e48d855601f9a991203
r75401 = 73b728835f92bf8d19cc0e1009d66de02d22b689
Done rebuilding .git/svn/refs/remotes/origin/master/.rev_map.268f45cc-cd09-0410-ab3c-d52691b4dbfc
First, rewinding head to replay your work on top of it...
Fast-forwarded master to refs/remotes/origin/master.

Full output: http://queues.webkit.org/results/7392097</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>332015</commentid>
    <comment_count>20</comment_count>
      <attachid>78408</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-01-10 15:53:28 -0800</bug_when>
    <thetext>Comment on attachment 78408
addressed review comments

That&apos;s a very strange error.  Lets try again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>332100</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-01-10 18:24:21 -0800</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 78408:

fast/workers/storage/use-same-database-in-page-and-workers.html bug 50995 (author: dumi@chromium.org)
The commit-queue is continuing to process your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>332101</commentid>
    <comment_count>22</comment_count>
      <attachid>78408</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-01-10 18:26:23 -0800</bug_when>
    <thetext>Comment on attachment 78408
addressed review comments

Clearing flags on attachment: 78408

Committed r75461: &lt;http://trac.webkit.org/changeset/75461&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>332102</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-01-10 18:26:32 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>332114</commentid>
    <comment_count>24</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-10 18:46:13 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/75461 might have broken SnowLeopard Intel Release (Build)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>76879</attachid>
            <date>2010-12-17 08:02:43 -0800</date>
            <delta_ts>2011-01-09 23:34:13 -0800</delta_ts>
            <desc>patch to check beginning bytes of buffer</desc>
            <filename>websocket-handshake.patch</filename>
            <type>text/plain</type>
            <size>2512</size>
            <attacher name="Joe Mason">joenotcharles</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YzMwM2MzMS4uMjRhODY1OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMSBAQAorMjAxMC0xMi0xNyAgSm9lIE1hc29uICA8
am1hc29uQHJpbS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgV2ViU29ja2V0czogdW5ib3VuZGVkIGJ1ZmZlciBncm93dGggd2hlbiBzZXJ2ZXIg
c2VuZHMgYmFkIGRhdGEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTUxMjUzCisKKyAgICAgICAgQ2hlY2sgdGhhdCBpbmNvbWluZyBXZWJTb2NrZXQgaGFu
ZHNoYWtlIGxpbmUgYWN0dWFsbHkgc3RhcnRzIHdpdGgKKyAgICAgICAgSFRUUC8xLjEgKGV4YWN0
IHZlcnNpb24gbnVtYmVyIGlzIHVuaW1wb3J0YW50LCBhY2NvcmRpbmcgdG8gdGhlIHNwZWMpLgor
ICAgICAgICBUaGlzIGNhdXNlcyB0aGUgY29ubmVjdGlvbiB0byBjbG9zZSB3aXRoIGFuIGVycm9y
IHJhdGhlciB0aGFuIHN0YXlpbmcKKyAgICAgICAgaW4gdGhlIENvbm5lY3Rpbmcgc3RhdGUgYW5k
IGJ1ZmZlcmluZyBkYXRhIGZvcmV2ZXIgaWYgdGhlIHNlcnZlciBzZW5kcworICAgICAgICByYW5k
b20gZGF0YSBpbnN0ZWFkIG9mIGEgaGFuZHNoYWtlLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4g
KE9PUFMhKQorCisgICAgICAgICogd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0SGFuZHNoYWtlOjpyZWFkU3RhdHVzTGluZSk6CisK
IDIwMTAtMTEtMTEgIFNoaW5pY2hpcm8gSGFtYWppICA8aGFtYWppQGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvd2Vi
c29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwIGIvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNv
Y2tldEhhbmRzaGFrZS5jcHAKaW5kZXggNTA0OTA5OC4uNzk2ZmY1MiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHAKKysrIGIvV2ViQ29yZS93ZWJz
b2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHAKQEAgLTQyNyw2ICs0MjcsOSBAQCBLVVJMIFdl
YlNvY2tldEhhbmRzaGFrZTo6aHR0cFVSTEZvckF1dGhlbnRpY2F0aW9uQW5kQ29va2llcygpIGNv
bnN0CiAvLyBzdGF0dXNDb2RlIGFuZCBzdGF0dXNUZXh0IHdpbGwgYmUgc2V0IHRvIC0xIGFuZCBh
IG51bGwgc3RyaW5nLCByZXNwZWN0aXZlbHkuCiBpbnQgV2ViU29ja2V0SGFuZHNoYWtlOjpyZWFk
U3RhdHVzTGluZShjb25zdCBjaGFyKiBoZWFkZXIsIHNpemVfdCBoZWFkZXJMZW5ndGgsIGludCYg
c3RhdHVzQ29kZSwgU3RyaW5nJiBzdGF0dXNUZXh0KQogeworICAgIHN0YXRpYyBjb25zdCBjaGFy
KiBodHRwU3RyaW5nID0gIkhUVFAvIjsKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGh0dHBTdHJp
bmdMZW5ndGggPSA1OworCiAgICAgc3RhdHVzQ29kZSA9IC0xOwogICAgIHN0YXR1c1RleHQgPSBT
dHJpbmcoKTsKIApAQCAtNDY1LDYgKzQ2OCwxOSBAQCBpbnQgV2ViU29ja2V0SGFuZHNoYWtlOjpy
ZWFkU3RhdHVzTGluZShjb25zdCBjaGFyKiBoZWFkZXIsIHNpemVfdCBoZWFkZXJMZW5ndGgsCiAg
ICAgICAgIHJldHVybiBsaW5lTGVuZ3RoOwogICAgIH0KIAorICAgIC8vIFRoZSBsaW5lIG11c3Qg
YmVnaW4gd2l0aCAiSFRUUC8iICh0aGUgZXhhY3QgdmVyc2lvbiBpcyB1bmltcG9ydGFudCkKKyAg
ICBpZiAobGluZUxlbmd0aCA8IGh0dHBTdHJpbmdMZW5ndGgpIHsKKyAgICAgICAgbV9jb250ZXh0
LT5hZGRNZXNzYWdlKEpTTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIEVycm9yTWVzc2Fn
ZUxldmVsLCAiU3RhdHVzIGxpbmUgZG9lcyBub3QgYmVnaW4gd2l0aCBIVFRQIiwgMCwgY2xpZW50
T3JpZ2luKCkpOworICAgICAgICByZXR1cm4gbGluZUxlbmd0aDsKKyAgICB9CisKKyAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGh0dHBTdHJpbmdMZW5ndGg7IGkrKykgeworICAgICAgICBpZiAoaGVh
ZGVyW2ldICE9IGh0dHBTdHJpbmdbaV0pIHsKKyAgICAgICAgICAgIG1fY29udGV4dC0+YWRkTWVz
c2FnZShKU01lc3NhZ2VTb3VyY2UsIExvZ01lc3NhZ2VUeXBlLCBFcnJvck1lc3NhZ2VMZXZlbCwg
IlN0YXR1cyBsaW5lIGRvZXMgbm90IGJlZ2luIHdpdGggSFRUUCIsIDAsIGNsaWVudE9yaWdpbigp
KTsKKyAgICAgICAgICAgIHJldHVybiBsaW5lTGVuZ3RoOworICAgICAgICB9CisgICAgfQorCiAg
ICAgU3RyaW5nIHN0YXR1c0NvZGVTdHJpbmcoc3BhY2UxICsgMSwgc3BhY2UyIC0gc3BhY2UxIC0g
MSk7CiAgICAgaWYgKHN0YXR1c0NvZGVTdHJpbmcubGVuZ3RoKCkgIT0gMykgLy8gU3RhdHVzIGNv
ZGUgbXVzdCBjb25zaXN0IG9mIHRocmVlIGRpZ2l0cy4KICAgICAgICAgcmV0dXJuIGxpbmVMZW5n
dGg7Cg==
</data>
<flag name="review"
          id="67894"
          type_id="1"
          status="-"
          setter="ap"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78375</attachid>
            <date>2011-01-09 23:34:13 -0800</date>
            <delta_ts>2011-01-09 23:36:39 -0800</delta_ts>
            <desc>patch to cap handshake length at 1024 bytes</desc>
            <filename>bug51253.patch</filename>
            <type>text/plain</type>
            <size>14578</size>
            <attacher name="Joe Mason">joenotcharles</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFr
ZS5jcHAJKHJldmlzaW9uIDc1MzUzKQorKysgU291cmNlL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJT
b2NrZXRIYW5kc2hha2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMS4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTQyNyw2
ICs0MjgsMTAgQEAgS1VSTCBXZWJTb2NrZXRIYW5kc2hha2U6Omh0dHBVUkxGb3JBdXRoZQogLy8g
c3RhdHVzQ29kZSBhbmQgc3RhdHVzVGV4dCB3aWxsIGJlIHNldCB0byAtMSBhbmQgYSBudWxsIHN0
cmluZywgcmVzcGVjdGl2ZWx5LgogaW50IFdlYlNvY2tldEhhbmRzaGFrZTo6cmVhZFN0YXR1c0xp
bmUoY29uc3QgY2hhciogaGVhZGVyLCBzaXplX3QgaGVhZGVyTGVuZ3RoLCBpbnQmIHN0YXR1c0Nv
ZGUsIFN0cmluZyYgc3RhdHVzVGV4dCkKIHsKKyAgICAvLyBBcmJpdHJhcnkgc2l6ZSBsaW1pdCB0
byBwcmV2ZW50IHRoZSBzZXJ2ZXIgZnJvbSBzZW5kaW5nIGFuIHVuYm91bmRlZAorICAgIC8vIGFt
b3VudCBvZiBkYXRhIHdpdGggbm8gbmV3bGluZXMgYW5kIGZvcmNpbmcgdXMgdG8gYnVmZmVyIGl0
IGFsbC4KKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG1heExlbmd0aCA9IDEwMjQ7CisKICAgICBz
dGF0dXNDb2RlID0gLTE7CiAgICAgc3RhdHVzVGV4dCA9IFN0cmluZygpOwogCkBAIC00NDEsNiAr
NDQ2LDE0IEBAIGludCBXZWJTb2NrZXRIYW5kc2hha2U6OnJlYWRTdGF0dXNMaW5lKGMKICAgICAg
ICAgICAgICAgICBzcGFjZTEgPSBwOwogICAgICAgICAgICAgZWxzZSBpZiAoIXNwYWNlMikKICAg
ICAgICAgICAgICAgICBzcGFjZTIgPSBwOworICAgICAgICB9IGVsc2UgaWYgKCpwID09ICdcMCcp
IHsKKyAgICAgICAgICAgIC8vIFRoZSBjYWxsZXIgd2lsbCBzZWFyY2ggZm9yIHRoZSBlbmRpbmcg
bmV3bGluZSB3aXRoIHN0cm5zdHIsCisgICAgICAgICAgICAvLyB3aGljaCBkb2VzIG5vdCBzY2Fu
IHBhc3QgbnVsbHMuICBTbyBhIG51bGwgaW4gdGhlIHN0cmVhbSB3aWxsCisgICAgICAgICAgICAv
LyBjYXVzZSBpdCB0byBsb29wIGZvcmV2ZXIsIHJlYWRpbmcgbW9yZSBkYXRhIGFuZCB0aGVuIHJl
cGVhdGluZworICAgICAgICAgICAgLy8gdGhlIHNlYXJjaCBvbmx5IG9uIHRoZSBkYXRhIGJlZm9y
ZSB0aGUgbnVsbCwgdW5sZXNzIHdlIGFib3J0CisgICAgICAgICAgICAvLyBpbW1lZGlhdGVseS4K
KyAgICAgICAgICAgIG1fY29udGV4dC0+YWRkTWVzc2FnZShKU01lc3NhZ2VTb3VyY2UsIExvZ01l
c3NhZ2VUeXBlLCBFcnJvck1lc3NhZ2VMZXZlbCwgIlN0YXR1cyBsaW5lIGNvbnRhaW5zIGVtYmVk
ZGVkIG51bGwiLCAwLCBjbGllbnRPcmlnaW4oKSk7CisgICAgICAgICAgICByZXR1cm4gcCArIDEg
LSBoZWFkZXI7CiAgICAgICAgIH0gZWxzZSBpZiAoKnAgPT0gJ1xuJykKICAgICAgICAgICAgIGJy
ZWFrOwogICAgIH0KQEAgLTQ0OCw5ICs0NjEsOSBAQCBpbnQgV2ViU29ja2V0SGFuZHNoYWtlOjpy
ZWFkU3RhdHVzTGluZShjCiAgICAgICAgIHJldHVybiAtMTsgLy8gV2UgaGF2ZSBub3QgcmVjZWl2
ZWQgJ1xuJyB5ZXQuCiAKICAgICBjb25zdCBjaGFyKiBlbmQgPSBwICsgMTsKLSAgICBpZiAoZW5k
IC0gaGVhZGVyID4gSU5UX01BWCkgeworICAgIGlmIChlbmQgLSBoZWFkZXIgPiBtYXhMZW5ndGgp
IHsKICAgICAgICAgbV9jb250ZXh0LT5hZGRNZXNzYWdlKEpTTWVzc2FnZVNvdXJjZSwgTG9nTWVz
c2FnZVR5cGUsIEVycm9yTWVzc2FnZUxldmVsLCAiU3RhdHVzIGxpbmUgaXMgdG9vIGxvbmc6ICIg
KyB0cmltQ29uc29sZU1lc3NhZ2UoaGVhZGVyLCBtYXhDb25zb2xlTWVzc2FnZVNpemUgKyAxKSwg
MCwgY2xpZW50T3JpZ2luKCkpOwotICAgICAgICByZXR1cm4gSU5UX01BWDsKKyAgICAgICAgcmV0
dXJuIG1heExlbmd0aDsKICAgICB9CiAgICAgaW50IGxpbmVMZW5ndGggPSBlbmQgLSBoZWFkZXI7
CiAKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2hhbmRzaGFr
ZS1mYWlsLWJ5LW1heGxlbmd0aC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaGFuZHNoYWtlLWZhaWwtYnktbWF4bGVuZ3Ro
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vi
c29ja2V0L3Rlc3RzL2hhbmRzaGFrZS1mYWlsLWJ5LW1heGxlbmd0aC1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMTIgQEAKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAwOiBTdGF0
dXMgbGluZSBpcyB0b28gbG9uZzogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi7igKYKK0Nvbm5lY3Rpb24gc2hvdWxk
IGZhaWwgaW1tZWRpYXRlbHksIHJhdGhlciB0aGFuIHN1Y2NlZWRpbmcgb3Igc3RheWluZyBpbiBs
aW1ibyB1bnRpbCB0aW1lb3V0LCBpZiBoYW5kc2hha2UgaXMgbG9uZ2VyIHRoYW4gMTAyNCBieXRl
cy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdl
cywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCitQQVNTIHRpbWVkT3V0IGlzIGZhbHNl
CitQQVNTIGNvbm5lY3RlZCBpcyBmYWxzZQorUEFTUyBvcmlnaW4gaXMgdW5kZWZpbmVkLgorUEFT
UyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExh
eW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2hhbmRzaGFrZS1mYWlsLWJ5LW1h
eGxlbmd0aC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29j
a2V0L3Rlc3RzL2hhbmRzaGFrZS1mYWlsLWJ5LW1heGxlbmd0aC5odG1sCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaGFuZHNoYWtlLWZhaWwt
YnktbWF4bGVuZ3RoLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQ
RSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8
bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uLy4uL2pzLXRlc3QtcmVzb3VyY2VzL2pz
LXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9qcy10ZXN0LXJlc291cmNl
cy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vanMtdGVz
dC1yZXNvdXJjZXMvanMtdGVzdC1wb3N0LWZ1bmN0aW9uLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4K
Kzxib2R5PgorPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2PgorPGRpdiBpZD0iY29uc29sZSI+
PC9kaXY+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2hhbmRzaGFrZS1mYWlsLWJ5LW1heGxl
bmd0aC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oYW5kc2hha2UtZmFpbC1ieS1tYXhsZW5ndGhfd3No
LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3Rz
L2hhbmRzaGFrZS1mYWlsLWJ5LW1heGxlbmd0aF93c2gucHkJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oYW5kc2hha2UtZmFpbC1ieS1tYXhs
ZW5ndGhfd3NoLnB5CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUxIEBACisjIENvcHlyaWdodCAo
QykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlv
bi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRl
ZCBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCB0aW1lCisKK2RlZiB3
ZWJfc29ja2V0X2RvX2V4dHJhX2hhbmRzaGFrZShyZXF1ZXN0KToKKyAgICAjIFRoaXMgd2lsbCBj
YXVzZSB0aGUgaGFuZHNoYWtlIHRvIGZhaWwgYmVjYXVzZSBpdCBwdXNoZXMgdGhlIGxlbmd0aCBv
ZiB0aGUKKyAgICAjIHN0YXR1cyBsaW5lIHBhc3QgMTAyNCBjaGFyYWN0ZXJzCisgICAgbXNnID0g
IiIKKyAgICBmb3IgaSBpbiByYW5nZSgwLCAxMDI0KToKKyAgICAgICAgbXNnICs9ICIuIgorICAg
IG1zZyArPSAnSFRUUC8xLjEgMTAxIFdlYlNvY2tldCBQcm90b2NvbCBIYW5kc2hha2VcclxuJwor
ICAgIG1zZyArPSAnVXBncmFkZTogV2ViU29ja2V0XHJcbicKKyAgICBtc2cgKz0gJ0Nvbm5lY3Rp
b246IFVwZ3JhZGVcclxuJworICAgIG1zZyArPSAnU2VjLVdlYlNvY2tldC1Mb2NhdGlvbjogJyAr
IHJlcXVlc3Qud3NfbG9jYXRpb24gKyAnXHJcbicKKyAgICBtc2cgKz0gJ1NlYy1XZWJTb2NrZXQt
T3JpZ2luOiAnICsgcmVxdWVzdC53c19vcmlnaW4gKyAnXHJcbicKKyAgICBtc2cgKz0gJ1xyXG4n
CisgICAgbXNnICs9IHJlcXVlc3Qud3NfY2hhbGxlbmdlX21kNQorICAgIHJlcXVlc3QuY29ubmVj
dGlvbi53cml0ZShtc2cpCisgICAgIyBjb250aW51ZSB3cml0aW5nIGRhdGEgdW50aWwgdGhlIGNs
aWVudCBkaXNjb25uZWN0cworICAgIHdoaWxlIFRydWU6CisgICAgICAgIHRpbWUuc2xlZXAoMSkK
KyAgICAgICAgcmVxdWVzdC5jb25uZWN0aW9uLndyaXRlKCdrZWVwYWxpdmVcbicpCisKK2RlZiB3
ZWJfc29ja2V0X3RyYW5zZmVyX2RhdGEocmVxdWVzdCk6CisgICAgcGFzcwpJbmRleDogTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaGFuZHNoYWtlLWZhaWwtYnktcHJlcGVu
ZGVkLW51bGwtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVz
dHMvd2Vic29ja2V0L3Rlc3RzL2hhbmRzaGFrZS1mYWlsLWJ5LXByZXBlbmRlZC1udWxsLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0
L3Rlc3RzL2hhbmRzaGFrZS1mYWlsLWJ5LXByZXBlbmRlZC1udWxsLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxMiBAQAorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDA6IFN0YXR1
cyBsaW5lIGNvbnRhaW5zIGVtYmVkZGVkIG51bGwKK0Nvbm5lY3Rpb24gc2hvdWxkIGZhaWwgaW1t
ZWRpYXRlbHksIHJhdGhlciB0aGFuIHN1Y2NlZWRpbmcgb3Igc3RheWluZyBpbiBsaW1ibyB1bnRp
bCB0aW1lb3V0LCBpZiBhIG51bGwgYnl0ZSBpcyByZWNlaXZlZCBiZWZvcmUgdGhlIGhhbmRzaGFr
ZS4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdl
cywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCitQQVNTIHRpbWVkT3V0IGlzIGZhbHNl
CitQQVNTIGNvbm5lY3RlZCBpcyBmYWxzZQorUEFTUyBvcmlnaW4gaXMgdW5kZWZpbmVkLgorUEFT
UyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExh
eW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2hhbmRzaGFrZS1mYWlsLWJ5LXBy
ZXBlbmRlZC1udWxsLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93
ZWJzb2NrZXQvdGVzdHMvaGFuZHNoYWtlLWZhaWwtYnktcHJlcGVuZGVkLW51bGwuaHRtbAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2hhbmRz
aGFrZS1mYWlsLWJ5LXByZXBlbmRlZC1udWxsLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MTMgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxo
dG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uLy4uL2pzLXRl
c3QtcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9q
cy10ZXN0LXJlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vLi4vanMtdGVzdC1yZXNvdXJjZXMvanMtdGVzdC1wb3N0LWZ1bmN0aW9uLmpzIj48L3Nj
cmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2PgorPGRp
diBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2hhbmRzaGFr
ZS1mYWlsLWJ5LXByZXBlbmRlZC1udWxsLmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
SW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2hhbmRzaGFrZS1m
YWlsLWJ5LXByZXBlbmRlZC1udWxsX3dzaC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oYW5kc2hha2UtZmFpbC1ieS1wcmVwZW5kZWQtbnVs
bF93c2gucHkJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tl
dC90ZXN0cy9oYW5kc2hha2UtZmFpbC1ieS1wcmVwZW5kZWQtbnVsbF93c2gucHkJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNTYgQEAKKyMgQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24g
TGltaXRlZCAyMDExLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMg
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKworaW1wb3J0IHRpbWUKKworZGVmIHdlYl9zb2NrZXRfZG9fZXh0cmFfaGFu
ZHNoYWtlKHJlcXVlc3QpOgorICAgICMgVGhpcyBzaW11bGF0ZXMgYSBicm9rZW4gc2VydmVyIHRo
YXQgc2VuZHMgYSBXZWJTb2NrZXQgZnJhbWUgYmVmb3JlIHRoZQorICAgICMgaGFuZHNoYWtlLCBh
bmQgbW9yZSBmcmFtZXMgYWZ0ZXJ3YXJkcy4gIEl0IGlzIGltcG9ydGFudCB0aGF0IGlmIHRoaXMK
KyAgICAjIGhhcHBlbnMgdGhlIGNsaWVudCBkb2VzIG5vdCBidWZmZXIgYWxsIHRoZSBmcmFtZXMg
YXMgdGhlIHNlcnZlciBjb250aW51ZXMKKyAgICAjIHRvIHNlbmQgbW9yZSBkYXRhIC0gaXQgc2hv
dWxkIGFib3J0IGFmdGVyIHJlYWRpbmcgYSByZWFzb25hYmxlIG51bWJlciBvZgorICAgICMgYnl0
ZXMgKHNldCBhcmJpdHJhcmlseSB0byAxMDI0KS4KKyAgICBmcmFtZSA9ICdcMEZyYW1lLWNvbnRh
aW5zLXRoaXJ0eS10d28tYnl0ZXMnCisKKyAgICBtc2cgPSBmcmFtZQorICAgIG1zZyArPSAnSFRU
UC8xLjEgMTAxIFdlYlNvY2tldCBQcm90b2NvbCBIYW5kc2hha2VcclxuJworICAgIG1zZyArPSAn
VXBncmFkZTogV2ViU29ja2V0XHJcbicKKyAgICBtc2cgKz0gJ0Nvbm5lY3Rpb246IFVwZ3JhZGVc
clxuJworICAgIG1zZyArPSAnU2VjLVdlYlNvY2tldC1Mb2NhdGlvbjogJyArIHJlcXVlc3Qud3Nf
bG9jYXRpb24gKyAnXHJcbicKKyAgICBtc2cgKz0gJ1NlYy1XZWJTb2NrZXQtT3JpZ2luOiAnICsg
cmVxdWVzdC53c19vcmlnaW4gKyAnXHJcbicKKyAgICBtc2cgKz0gJ1xyXG4nCisgICAgbXNnICs9
IHJlcXVlc3Qud3NfY2hhbGxlbmdlX21kNQorICAgIHJlcXVlc3QuY29ubmVjdGlvbi53cml0ZSht
c2cpCisgICAgIyBjb250aW51ZSB3cml0aW5nIGRhdGEgdW50aWwgdGhlIGNsaWVudCBkaXNjb25u
ZWN0cworICAgIHdoaWxlIFRydWU6CisgICAgICAgIG51bUZyYW1lcyA9IDEwMjQgLyBsZW4oZnJh
bWUpICMgd3JpdGUgb3ZlciAxMDI0IGJ5dGVzIGluY2x1ZGluZyB0aGUgYWJvdmUgaGFuZHNoYWtl
CisgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIG51bUZyYW1lcyk6CisgICAgICAgICAgICByZXF1
ZXN0LmNvbm5lY3Rpb24ud3JpdGUoZnJhbWUpCisgICAgICAgIHRpbWUuc2xlZXAoMSkKKworZGVm
IHdlYl9zb2NrZXRfdHJhbnNmZXJfZGF0YShyZXF1ZXN0KToKKyAgICBwYXNzCkluZGV4OiBMYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9zY3JpcHQtdGVzdHMvaGFuZHNoYWtl
LWZhaWwtYnktbWF4bGVuZ3RoLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVz
dHMvd2Vic29ja2V0L3Rlc3RzL3NjcmlwdC10ZXN0cy9oYW5kc2hha2UtZmFpbC1ieS1tYXhsZW5n
dGguanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90
ZXN0cy9zY3JpcHQtdGVzdHMvaGFuZHNoYWtlLWZhaWwtYnktbWF4bGVuZ3RoLmpzCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDUwIEBACitkZXNjcmlwdGlvbignQ29ubmVjdGlvbiBzaG91bGQgZmFp
bCBpbW1lZGlhdGVseSwgcmF0aGVyIHRoYW4gc3VjY2VlZGluZyBvciBzdGF5aW5nIGluIGxpbWJv
IHVudGlsIHRpbWVvdXQsIGlmIGhhbmRzaGFrZSBpcyBsb25nZXIgdGhhbiAxMDI0IGJ5dGVzLicp
OworCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250
cm9sbGVyLndhaXRVbnRpbERvbmUoKQorCit2YXIgdGltZWRPdXQgPSBmYWxzZTsKK3ZhciBjb25u
ZWN0ZWQgPSBmYWxzZTsKK3ZhciBvcmlnaW47CisKK2Z1bmN0aW9uIGVuZFRlc3QoKSB7CisgICAg
c2hvdWxkQmVGYWxzZSgndGltZWRPdXQnKTsKKyAgICBzaG91bGRCZUZhbHNlKCdjb25uZWN0ZWQn
KTsKKyAgICBzaG91bGRCZVVuZGVmaW5lZCgnb3JpZ2luJyk7CisgICAgY2xlYXJUaW1lb3V0KHRp
bWVvdXRJRCk7CisgICAgaXNTdWNjZXNzZnVsbHlQYXJzZWQoKTsKKyAgICBpZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlE
b25lKCk7Cit9CisKK3ZhciB1cmwgPSAnd3M6Ly9sb2NhbGhvc3Q6ODg4MC93ZWJzb2NrZXQvdGVz
dHMvaGFuZHNoYWtlLWZhaWwtYnktbWF4bGVuZ3RoJzsKK3ZhciB3cyA9IG5ldyBXZWJTb2NrZXQo
dXJsKTsKKword3Mub25vcGVuID0gZnVuY3Rpb24oKQoreworICAgIGRlYnVnKCdDb25uZWN0ZWQn
KTsKKyAgICBjb25uZWN0ZWQgPSB0cnVlOworfQorCit3cy5vbm1lc3NhZ2UgPSBmdW5jdGlvbiht
ZXNzYWdlRXZlbnQpCit7CisgICAgb3JpZ2luID0gbWVzc2FnZUV2ZW50LmRhdGE7CisgICAgZGVi
dWcoJ29yaWdpbiA9ICcgKyBvcmlnaW4pOworICAgIHdzLmNsb3NlKCk7Cit9CisKK3dzLm9uY2xv
c2UgPSBmdW5jdGlvbigpCit7CisgICAgZW5kVGVzdCgpOworfQorCitmdW5jdGlvbiB0aW1lb3V0
Q2FsbGJhY2soKQoreworICAgIGRlYnVnKCdUaW1lZCBvdXQgKHN0YXRlID0gJyArIHdzLnJlYWR5
U3RhdGUgKyAnKScpOworICAgIHRpbWVkT3V0ID0gdHJ1ZTsKKyAgICBlbmRUZXN0KCk7Cit9CisK
K3ZhciB0aW1lb3V0SUQgPSBzZXRUaW1lb3V0KHRpbWVvdXRDYWxsYmFjaywgMzAwMCk7CisKK3Zh
ciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy93ZWJzb2NrZXQvdGVzdHMvc2NyaXB0LXRlc3RzL2hhbmRzaGFrZS1mYWlsLWJ5LXByZXBlbmRl
ZC1udWxsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0
L3Rlc3RzL3NjcmlwdC10ZXN0cy9oYW5kc2hha2UtZmFpbC1ieS1wcmVwZW5kZWQtbnVsbC5qcwko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL3Nj
cmlwdC10ZXN0cy9oYW5kc2hha2UtZmFpbC1ieS1wcmVwZW5kZWQtbnVsbC5qcwkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw1MSBAQAorZGVzY3JpcHRpb24oJ0Nvbm5lY3Rpb24gc2hvdWxkIGZhaWwg
aW1tZWRpYXRlbHksIHJhdGhlciB0aGFuIHN1Y2NlZWRpbmcgb3Igc3RheWluZyBpbiBsaW1ibyB1
bnRpbCB0aW1lb3V0LCBpZiBhIG51bGwgYnl0ZSBpcyByZWNlaXZlZCBiZWZvcmUgdGhlIGhhbmRz
aGFrZS4nKTsKKworCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91
dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKQorCit2YXIgdGltZWRPdXQgPSBmYWxzZTsK
K3ZhciBjb25uZWN0ZWQgPSBmYWxzZTsKK3ZhciBvcmlnaW47CisKK2Z1bmN0aW9uIGVuZFRlc3Qo
KSB7CisgICAgc2hvdWxkQmVGYWxzZSgndGltZWRPdXQnKTsKKyAgICBzaG91bGRCZUZhbHNlKCdj
b25uZWN0ZWQnKTsKKyAgICBzaG91bGRCZVVuZGVmaW5lZCgnb3JpZ2luJyk7CisgICAgY2xlYXJU
aW1lb3V0KHRpbWVvdXRJRCk7CisgICAgaXNTdWNjZXNzZnVsbHlQYXJzZWQoKTsKKyAgICBpZiAo
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci5ub3RpZnlEb25lKCk7Cit9CisKK3ZhciB1cmwgPSAnd3M6Ly9sb2NhbGhvc3Q6ODg4MC93ZWJz
b2NrZXQvdGVzdHMvaGFuZHNoYWtlLWZhaWwtYnktcHJlcGVuZGVkLW51bGwnOwordmFyIHdzID0g
bmV3IFdlYlNvY2tldCh1cmwpOworCit3cy5vbm9wZW4gPSBmdW5jdGlvbigpCit7CisgICAgZGVi
dWcoJ0Nvbm5lY3RlZCcpOworICAgIGNvbm5lY3RlZCA9IHRydWU7Cit9CisKK3dzLm9ubWVzc2Fn
ZSA9IGZ1bmN0aW9uKG1lc3NhZ2VFdmVudCkKK3sKKyAgICBvcmlnaW4gPSBtZXNzYWdlRXZlbnQu
ZGF0YTsKKyAgICBkZWJ1Zygnb3JpZ2luID0gJyArIG9yaWdpbik7CisgICAgd3MuY2xvc2UoKTsK
K30KKword3Mub25jbG9zZSA9IGZ1bmN0aW9uKCkKK3sKKyAgICBlbmRUZXN0KCk7Cit9CisKK2Z1
bmN0aW9uIHRpbWVvdXRDYWxsYmFjaygpCit7CisgICAgZGVidWcoJ1RpbWVkIG91dCAoc3RhdGUg
PSAnICsgd3MucmVhZHlTdGF0ZSArICcpJyk7CisgICAgdGltZWRPdXQgPSB0cnVlOworICAgIGVu
ZFRlc3QoKTsKK30KKwordmFyIHRpbWVvdXRJRCA9IHNldFRpbWVvdXQodGltZW91dENhbGxiYWNr
LCAzMDAwKTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78376</attachid>
            <date>2011-01-09 23:36:39 -0800</date>
            <delta_ts>2011-01-09 23:54:26 -0800</delta_ts>
            <desc>same patch, with ChangeLogs. Oops.</desc>
            <filename>bug51253.patch</filename>
            <type>text/plain</type>
            <size>17127</size>
            <attacher name="Joe Mason">joenotcharles</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc1MzYxKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTEtMDEtMDkgIEpvZSBNYXNv
biAgPGptYXNvbkByaW0uY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFdlYlNvY2tldHM6IHVuYm91bmRlZCBidWZmZXIgZ3Jvd3RoIHdoZW4gc2Vy
dmVyIHNlbmRzIGJhZCBkYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD01MTI1MworCisgICAgICAgIEZhaWwgYSB3ZWJzb2NrZXQgaGFuZHNoYWtlIGFm
dGVyIDEwMjQgYnl0ZXMgd2l0aG91dCBhIG5ld2xpbmUsIG9yIGlmIGl0CisgICAgICAgIGNvbnRh
aW5zIGEgbnVsbCBieXRlIGJlZm9yZSB0aGUgZmlyc3QgbmV3bGluZS4KKworICAgICAgICBUZXN0
czogaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaGFuZHNoYWtlLWZhaWwtYnktbWF4bGVuZ3Ro
Lmh0bWwKKyAgICAgICAgICAgICAgIGh0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2hhbmRzaGFr
ZS1mYWlsLWJ5LXByZXBlbmRlZC1udWxsLmh0bWwKKworICAgICAgICAqIHdlYnNvY2tldHMvV2Vi
U29ja2V0SGFuZHNoYWtlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldEhhbmRzaGFr
ZTo6cmVhZFN0YXR1c0xpbmUpOgorCiAyMDExLTAxLTA5ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5y
ZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCBy
NzUzMzcuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFr
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXRI
YW5kc2hha2UuY3BwCShyZXZpc2lvbiA3NTM1MykKKysrIFNvdXJjZS9XZWJDb3JlL3dlYnNvY2tl
dHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBA
IC00MjcsNiArNDI4LDEwIEBAIEtVUkwgV2ViU29ja2V0SGFuZHNoYWtlOjpodHRwVVJMRm9yQXV0
aGUKIC8vIHN0YXR1c0NvZGUgYW5kIHN0YXR1c1RleHQgd2lsbCBiZSBzZXQgdG8gLTEgYW5kIGEg
bnVsbCBzdHJpbmcsIHJlc3BlY3RpdmVseS4KIGludCBXZWJTb2NrZXRIYW5kc2hha2U6OnJlYWRT
dGF0dXNMaW5lKGNvbnN0IGNoYXIqIGhlYWRlciwgc2l6ZV90IGhlYWRlckxlbmd0aCwgaW50JiBz
dGF0dXNDb2RlLCBTdHJpbmcmIHN0YXR1c1RleHQpCiB7CisgICAgLy8gQXJiaXRyYXJ5IHNpemUg
bGltaXQgdG8gcHJldmVudCB0aGUgc2VydmVyIGZyb20gc2VuZGluZyBhbiB1bmJvdW5kZWQKKyAg
ICAvLyBhbW91bnQgb2YgZGF0YSB3aXRoIG5vIG5ld2xpbmVzIGFuZCBmb3JjaW5nIHVzIHRvIGJ1
ZmZlciBpdCBhbGwuCisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBtYXhMZW5ndGggPSAxMDI0Owor
CiAgICAgc3RhdHVzQ29kZSA9IC0xOwogICAgIHN0YXR1c1RleHQgPSBTdHJpbmcoKTsKIApAQCAt
NDQxLDYgKzQ0NiwxNCBAQCBpbnQgV2ViU29ja2V0SGFuZHNoYWtlOjpyZWFkU3RhdHVzTGluZShj
CiAgICAgICAgICAgICAgICAgc3BhY2UxID0gcDsKICAgICAgICAgICAgIGVsc2UgaWYgKCFzcGFj
ZTIpCiAgICAgICAgICAgICAgICAgc3BhY2UyID0gcDsKKyAgICAgICAgfSBlbHNlIGlmICgqcCA9
PSAnXDAnKSB7CisgICAgICAgICAgICAvLyBUaGUgY2FsbGVyIHdpbGwgc2VhcmNoIGZvciB0aGUg
ZW5kaW5nIG5ld2xpbmUgd2l0aCBzdHJuc3RyLAorICAgICAgICAgICAgLy8gd2hpY2ggZG9lcyBu
b3Qgc2NhbiBwYXN0IG51bGxzLiAgU28gYSBudWxsIGluIHRoZSBzdHJlYW0gd2lsbAorICAgICAg
ICAgICAgLy8gY2F1c2UgaXQgdG8gbG9vcCBmb3JldmVyLCByZWFkaW5nIG1vcmUgZGF0YSBhbmQg
dGhlbiByZXBlYXRpbmcKKyAgICAgICAgICAgIC8vIHRoZSBzZWFyY2ggb25seSBvbiB0aGUgZGF0
YSBiZWZvcmUgdGhlIG51bGwsIHVubGVzcyB3ZSBhYm9ydAorICAgICAgICAgICAgLy8gaW1tZWRp
YXRlbHkuCisgICAgICAgICAgICBtX2NvbnRleHQtPmFkZE1lc3NhZ2UoSlNNZXNzYWdlU291cmNl
LCBMb2dNZXNzYWdlVHlwZSwgRXJyb3JNZXNzYWdlTGV2ZWwsICJTdGF0dXMgbGluZSBjb250YWlu
cyBlbWJlZGRlZCBudWxsIiwgMCwgY2xpZW50T3JpZ2luKCkpOworICAgICAgICAgICAgcmV0dXJu
IHAgKyAxIC0gaGVhZGVyOwogICAgICAgICB9IGVsc2UgaWYgKCpwID09ICdcbicpCiAgICAgICAg
ICAgICBicmVhazsKICAgICB9CkBAIC00NDgsOSArNDYxLDkgQEAgaW50IFdlYlNvY2tldEhhbmRz
aGFrZTo6cmVhZFN0YXR1c0xpbmUoYwogICAgICAgICByZXR1cm4gLTE7IC8vIFdlIGhhdmUgbm90
IHJlY2VpdmVkICdcbicgeWV0LgogCiAgICAgY29uc3QgY2hhciogZW5kID0gcCArIDE7Ci0gICAg
aWYgKGVuZCAtIGhlYWRlciA+IElOVF9NQVgpIHsKKyAgICBpZiAoZW5kIC0gaGVhZGVyID4gbWF4
TGVuZ3RoKSB7CiAgICAgICAgIG1fY29udGV4dC0+YWRkTWVzc2FnZShKU01lc3NhZ2VTb3VyY2Us
IExvZ01lc3NhZ2VUeXBlLCBFcnJvck1lc3NhZ2VMZXZlbCwgIlN0YXR1cyBsaW5lIGlzIHRvbyBs
b25nOiAiICsgdHJpbUNvbnNvbGVNZXNzYWdlKGhlYWRlciwgbWF4Q29uc29sZU1lc3NhZ2VTaXpl
ICsgMSksIDAsIGNsaWVudE9yaWdpbigpKTsKLSAgICAgICAgcmV0dXJuIElOVF9NQVg7CisgICAg
ICAgIHJldHVybiBtYXhMZW5ndGg7CiAgICAgfQogICAgIGludCBsaW5lTGVuZ3RoID0gZW5kIC0g
aGVhZGVyOwogCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA3NTM2MSkKKysrIExheW91dFRlc3RzL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBACisyMDExLTAxLTA5ICBKb2UgTWFz
b24gIDxqbWFzb25AcmltLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBXZWJTb2NrZXRzOiB1bmJvdW5kZWQgYnVmZmVyIGdyb3d0aCB3aGVuIHNl
cnZlciBzZW5kcyBiYWQgZGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NTEyNTMKKworICAgICAgICBUZXN0cyB0aGF0IGEgd2Vic29ja2V0IGhhbmRz
aGFrZSBzaG91bGQgZmFpbCBhZnRlciAxMDI0IGJ5dGVzIHdpdGhvdXQgYQorICAgICAgICBuZXds
aW5lLCBvciBpZiBpdCBjb250YWlucyBhIG51bGwgYnl0ZSBiZWZvcmUgdGhlIGZpcnN0IG5ld2xp
bmUuCisgICAgICAgIAorICAgICAgICAqIGh0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2hhbmRz
aGFrZS1mYWlsLWJ5LW1heGxlbmd0aC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0
dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2hhbmRzaGFrZS1mYWlsLWJ5LW1heGxlbmd0aC5odG1s
OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oYW5kc2hha2Ut
ZmFpbC1ieS1tYXhsZW5ndGhfd3NoLnB5OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3dl
YnNvY2tldC90ZXN0cy9oYW5kc2hha2UtZmFpbC1ieS1wcmVwZW5kZWQtbnVsbC1leHBlY3RlZC50
eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2hhbmRzaGFr
ZS1mYWlsLWJ5LXByZXBlbmRlZC1udWxsLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVz
dHMvd2Vic29ja2V0L3Rlc3RzL2hhbmRzaGFrZS1mYWlsLWJ5LXByZXBlbmRlZC1udWxsX3dzaC5w
eTogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvc2NyaXB0LXRl
c3RzL2hhbmRzaGFrZS1mYWlsLWJ5LW1heGxlbmd0aC5qczogQWRkZWQuCisgICAgICAgIChlbmRU
ZXN0KToKKyAgICAgICAgKHdzLm9ub3Blbik6CisgICAgICAgICh3cy5vbm1lc3NhZ2UpOgorICAg
ICAgICAod3Mub25jbG9zZSk6CisgICAgICAgICh0aW1lb3V0Q2FsbGJhY2spOgorICAgICAgICAq
IGh0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL3NjcmlwdC10ZXN0cy9oYW5kc2hha2UtZmFpbC1i
eS1wcmVwZW5kZWQtbnVsbC5qczogQWRkZWQuCisgICAgICAgIChlbmRUZXN0KToKKyAgICAgICAg
KHdzLm9ub3Blbik6CisgICAgICAgICh3cy5vbm1lc3NhZ2UpOgorICAgICAgICAod3Mub25jbG9z
ZSk6CisgICAgICAgICh0aW1lb3V0Q2FsbGJhY2spOgorCiAyMDExLTAxLTA5ICBKdXN0aW4gR2Fy
Y2lhICA8anVzdGluLmdhcmNpYUBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gIEFk
ZGluZyBzdmcvdGV4dC9jYXJldC1pbi1zdmctdGV4dC54aHRtbCB0byBTa2lwcGVkIGxpc3QgZm9y
IGd0aywgd2hlcmUgdGhlcmUgCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tl
dC90ZXN0cy9oYW5kc2hha2UtZmFpbC1ieS1tYXhsZW5ndGgtZXhwZWN0ZWQudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2hhbmRzaGFrZS1m
YWlsLWJ5LW1heGxlbmd0aC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oYW5kc2hha2UtZmFpbC1ieS1tYXhsZW5ndGgt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyIEBACitDT05TT0xFIE1FU1NB
R0U6IGxpbmUgMDogU3RhdHVzIGxpbmUgaXMgdG9vIGxvbmc6IC4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u4oCmCitD
b25uZWN0aW9uIHNob3VsZCBmYWlsIGltbWVkaWF0ZWx5LCByYXRoZXIgdGhhbiBzdWNjZWVkaW5n
IG9yIHN0YXlpbmcgaW4gbGltYm8gdW50aWwgdGltZW91dCwgaWYgaGFuZHNoYWtlIGlzIGxvbmdl
ciB0aGFuIDEwMjQgYnl0ZXMuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBv
ZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworUEFTUyB0
aW1lZE91dCBpcyBmYWxzZQorUEFTUyBjb25uZWN0ZWQgaXMgZmFsc2UKK1BBU1Mgb3JpZ2luIGlz
IHVuZGVmaW5lZC4KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01Q
TEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oYW5k
c2hha2UtZmFpbC1ieS1tYXhsZW5ndGguaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oYW5kc2hha2UtZmFpbC1ieS1tYXhsZW5ndGguaHRt
bAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3Rz
L2hhbmRzaGFrZS1mYWlsLWJ5LW1heGxlbmd0aC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDEzIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8
aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8uLi9qcy10
ZXN0LXJlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4v
anMtdGVzdC1yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
Ii4uLy4uLy4uL2pzLXRlc3QtcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC1mdW5jdGlvbi5qcyI+PC9z
Y3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4KKzxk
aXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9oYW5kc2hh
a2UtZmFpbC1ieS1tYXhsZW5ndGguanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRl
eDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaGFuZHNoYWtlLWZhaWwt
YnktbWF4bGVuZ3RoX3dzaC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L3dlYnNvY2tldC90ZXN0cy9oYW5kc2hha2UtZmFpbC1ieS1tYXhsZW5ndGhfd3NoLnB5CShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaGFuZHNo
YWtlLWZhaWwtYnktbWF4bGVuZ3RoX3dzaC5weQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MSBA
QAorIyBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoK
KyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgdGltZQorCitkZWYg
d2ViX3NvY2tldF9kb19leHRyYV9oYW5kc2hha2UocmVxdWVzdCk6CisgICAgIyBUaGlzIHdpbGwg
Y2F1c2UgdGhlIGhhbmRzaGFrZSB0byBmYWlsIGJlY2F1c2UgaXQgcHVzaGVzIHRoZSBsZW5ndGgg
b2YgdGhlCisgICAgIyBzdGF0dXMgbGluZSBvZiAxMDI0IGNoYXJhY3RlcnMKKyAgICBtc2cgPSAi
IgorICAgIGZvciBpIGluIHJhbmdlKDAsIDEwMjQpOgorICAgICAgICBtc2cgKz0gIi4iCisgICAg
bXNnICs9ICdIVFRQLzEuMSAxMDEgV2ViU29ja2V0IFByb3RvY29sIEhhbmRzaGFrZVxyXG4nCisg
ICAgbXNnICs9ICdVcGdyYWRlOiBXZWJTb2NrZXRcclxuJworICAgIG1zZyArPSAnQ29ubmVjdGlv
bjogVXBncmFkZVxyXG4nCisgICAgbXNnICs9ICdTZWMtV2ViU29ja2V0LUxvY2F0aW9uOiAnICsg
cmVxdWVzdC53c19sb2NhdGlvbiArICdcclxuJworICAgIG1zZyArPSAnU2VjLVdlYlNvY2tldC1P
cmlnaW46ICcgKyByZXF1ZXN0LndzX29yaWdpbiArICdcclxuJworICAgIG1zZyArPSAnXHJcbicK
KyAgICBtc2cgKz0gcmVxdWVzdC53c19jaGFsbGVuZ2VfbWQ1CisgICAgcmVxdWVzdC5jb25uZWN0
aW9uLndyaXRlKG1zZykKKyAgICAjIGNvbnRpbnVlIHdyaXRpbmcgZGF0YSB1bnRpbCB0aGUgY2xp
ZW50IGRpc2Nvbm5lY3RzCisgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgdGltZS5zbGVlcCgxKQor
ICAgICAgICByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGUoJ2tlZXBhbGl2ZVxuJykKKworZGVmIHdl
Yl9zb2NrZXRfdHJhbnNmZXJfZGF0YShyZXF1ZXN0KToKKyAgICBwYXNzCkluZGV4OiBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oYW5kc2hha2UtZmFpbC1ieS1wcmVwZW5k
ZWQtbnVsbC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy93ZWJzb2NrZXQvdGVzdHMvaGFuZHNoYWtlLWZhaWwtYnktcHJlcGVuZGVkLW51bGwtZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQv
dGVzdHMvaGFuZHNoYWtlLWZhaWwtYnktcHJlcGVuZGVkLW51bGwtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDEyIEBACitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMDogU3RhdHVz
IGxpbmUgY29udGFpbnMgZW1iZWRkZWQgbnVsbAorQ29ubmVjdGlvbiBzaG91bGQgZmFpbCBpbW1l
ZGlhdGVseSwgcmF0aGVyIHRoYW4gc3VjY2VlZGluZyBvciBzdGF5aW5nIGluIGxpbWJvIHVudGls
IHRpbWVvdXQsIGlmIGEgbnVsbCBieXRlIGlzIHJlY2VpdmVkIGJlZm9yZSB0aGUgaGFuZHNoYWtl
LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2Vz
LCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKK1BBU1MgdGltZWRPdXQgaXMgZmFsc2UK
K1BBU1MgY29ubmVjdGVkIGlzIGZhbHNlCitQQVNTIG9yaWdpbiBpcyB1bmRlZmluZWQuCitQQVNT
IHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaGFuZHNoYWtlLWZhaWwtYnktcHJl
cGVuZGVkLW51bGwuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dl
YnNvY2tldC90ZXN0cy9oYW5kc2hha2UtZmFpbC1ieS1wcmVwZW5kZWQtbnVsbC5odG1sCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaGFuZHNo
YWtlLWZhaWwtYnktcHJlcGVuZGVkLW51bGwuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwx
MyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0
bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4vanMtdGVz
dC1yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2pz
LXRlc3QtcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIu
Li8uLi8uLi9qcy10ZXN0LXJlc291cmNlcy9qcy10ZXN0LXBvc3QtZnVuY3Rpb24uanMiPjwvc2Ny
aXB0PgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2
IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvaGFuZHNoYWtl
LWZhaWwtYnktcHJlcGVuZGVkLW51bGwuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJ
bmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaGFuZHNoYWtlLWZh
aWwtYnktcHJlcGVuZGVkLW51bGxfd3NoLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0
dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2hhbmRzaGFrZS1mYWlsLWJ5LXByZXBlbmRlZC1udWxs
X3dzaC5weQkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0
L3Rlc3RzL2hhbmRzaGFrZS1mYWlsLWJ5LXByZXBlbmRlZC1udWxsX3dzaC5weQkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw1NiBAQAorIyBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBM
aW1pdGVkIDIwMTEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFu
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
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitp
bXBvcnQgdGltZQorCitkZWYgd2ViX3NvY2tldF9kb19leHRyYV9oYW5kc2hha2UocmVxdWVzdCk6
CisgICAgIyBUaGlzIHNpbXVsYXRlcyBhIGJyb2tlbiBzZXJ2ZXIgdGhhdCBzZW5kcyBhIFdlYlNv
Y2tldCBmcmFtZSBiZWZvcmUgdGhlCisgICAgIyBoYW5kc2hha2UsIGFuZCBtb3JlIGZyYW1lcyBh
ZnRlcndhcmRzLiAgSXQgaXMgaW1wb3J0YW50IHRoYXQgaWYgdGhpcworICAgICMgaGFwcGVucyB0
aGUgY2xpZW50IGRvZXMgbm90IGJ1ZmZlciBhbGwgdGhlIGZyYW1lcyBhcyB0aGUgc2VydmVyIGNv
bnRpbnVlcworICAgICMgdG8gc2VuZCBtb3JlIGRhdGEgLSBpdCBzaG91bGQgYWJvcnQgYWZ0ZXIg
cmVhZGluZyBhIHJlYXNvbmFibGUgbnVtYmVyIG9mCisgICAgIyBieXRlcyAoc2V0IGFyYml0cmFy
aWx5IHRvIDEwMjQpLgorICAgIGZyYW1lID0gJ1wwRnJhbWUtY29udGFpbnMtdGhpcnR5LXR3by1i
eXRlcycKKworICAgIG1zZyA9IGZyYW1lCisgICAgbXNnICs9ICdIVFRQLzEuMSAxMDEgV2ViU29j
a2V0IFByb3RvY29sIEhhbmRzaGFrZVxyXG4nCisgICAgbXNnICs9ICdVcGdyYWRlOiBXZWJTb2Nr
ZXRcclxuJworICAgIG1zZyArPSAnQ29ubmVjdGlvbjogVXBncmFkZVxyXG4nCisgICAgbXNnICs9
ICdTZWMtV2ViU29ja2V0LUxvY2F0aW9uOiAnICsgcmVxdWVzdC53c19sb2NhdGlvbiArICdcclxu
JworICAgIG1zZyArPSAnU2VjLVdlYlNvY2tldC1PcmlnaW46ICcgKyByZXF1ZXN0LndzX29yaWdp
biArICdcclxuJworICAgIG1zZyArPSAnXHJcbicKKyAgICBtc2cgKz0gcmVxdWVzdC53c19jaGFs
bGVuZ2VfbWQ1CisgICAgcmVxdWVzdC5jb25uZWN0aW9uLndyaXRlKG1zZykKKyAgICAjIGNvbnRp
bnVlIHdyaXRpbmcgZGF0YSB1bnRpbCB0aGUgY2xpZW50IGRpc2Nvbm5lY3RzCisgICAgd2hpbGUg
VHJ1ZToKKyAgICAgICAgdGltZS5zbGVlcCgxKQorICAgICAgICBudW1GcmFtZXMgPSAxMDI0IC8g
bGVuKGZyYW1lKSAjIHdyaXRlIG92ZXIgMTAyNCBieXRlcyBpbmNsdWRpbmcgdGhlIGFib3ZlIGhh
bmRzaGFrZQorICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBudW1GcmFtZXMpOgorICAgICAgICAg
ICAgcmVxdWVzdC5jb25uZWN0aW9uLndyaXRlKGZyYW1lKQorCitkZWYgd2ViX3NvY2tldF90cmFu
c2Zlcl9kYXRhKHJlcXVlc3QpOgorICAgIHBhc3MKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVz
dHMvd2Vic29ja2V0L3Rlc3RzL3NjcmlwdC10ZXN0cy9oYW5kc2hha2UtZmFpbC1ieS1tYXhsZW5n
dGguanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVz
dHMvc2NyaXB0LXRlc3RzL2hhbmRzaGFrZS1mYWlsLWJ5LW1heGxlbmd0aC5qcwkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL3NjcmlwdC10ZXN0
cy9oYW5kc2hha2UtZmFpbC1ieS1tYXhsZW5ndGguanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NTAgQEAKK2Rlc2NyaXB0aW9uKCdDb25uZWN0aW9uIHNob3VsZCBmYWlsIGltbWVkaWF0ZWx5LCBy
YXRoZXIgdGhhbiBzdWNjZWVkaW5nIG9yIHN0YXlpbmcgaW4gbGltYm8gdW50aWwgdGltZW91dCwg
aWYgaGFuZHNoYWtlIGlzIGxvbmdlciB0aGFuIDEwMjQgYnl0ZXMuJyk7CisKK2lmICh3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGls
RG9uZSgpCisKK3ZhciB0aW1lZE91dCA9IGZhbHNlOwordmFyIGNvbm5lY3RlZCA9IGZhbHNlOwor
dmFyIG9yaWdpbjsKKworZnVuY3Rpb24gZW5kVGVzdCgpIHsKKyAgICBzaG91bGRCZUZhbHNlKCd0
aW1lZE91dCcpOworICAgIHNob3VsZEJlRmFsc2UoJ2Nvbm5lY3RlZCcpOworICAgIHNob3VsZEJl
VW5kZWZpbmVkKCdvcmlnaW4nKTsKKyAgICBjbGVhclRpbWVvdXQodGltZW91dElEKTsKKyAgICBp
c1N1Y2Nlc3NmdWxseVBhcnNlZCgpOworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xs
ZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKwordmFy
IHVybCA9ICd3czovL2xvY2FsaG9zdDo4ODgwL3dlYnNvY2tldC90ZXN0cy9oYW5kc2hha2UtZmFp
bC1ieS1tYXhsZW5ndGgnOwordmFyIHdzID0gbmV3IFdlYlNvY2tldCh1cmwpOworCit3cy5vbm9w
ZW4gPSBmdW5jdGlvbigpCit7CisgICAgZGVidWcoJ0Nvbm5lY3RlZCcpOworICAgIGNvbm5lY3Rl
ZCA9IHRydWU7Cit9CisKK3dzLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKG1lc3NhZ2VFdmVudCkKK3sK
KyAgICBvcmlnaW4gPSBtZXNzYWdlRXZlbnQuZGF0YTsKKyAgICBkZWJ1Zygnb3JpZ2luID0gJyAr
IG9yaWdpbik7CisgICAgd3MuY2xvc2UoKTsKK30KKword3Mub25jbG9zZSA9IGZ1bmN0aW9uKCkK
K3sKKyAgICBlbmRUZXN0KCk7Cit9CisKK2Z1bmN0aW9uIHRpbWVvdXRDYWxsYmFjaygpCit7Cisg
ICAgZGVidWcoJ1RpbWVkIG91dCAoc3RhdGUgPSAnICsgd3MucmVhZHlTdGF0ZSArICcpJyk7Cisg
ICAgdGltZWRPdXQgPSB0cnVlOworICAgIGVuZFRlc3QoKTsKK30KKwordmFyIHRpbWVvdXRJRCA9
IHNldFRpbWVvdXQodGltZW91dENhbGxiYWNrLCAzMDAwKTsKKwordmFyIHN1Y2Nlc3NmdWxseVBh
cnNlZCA9IHRydWU7CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0
cy9zY3JpcHQtdGVzdHMvaGFuZHNoYWtlLWZhaWwtYnktcHJlcGVuZGVkLW51bGwuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvc2NyaXB0LXRl
c3RzL2hhbmRzaGFrZS1mYWlsLWJ5LXByZXBlbmRlZC1udWxsLmpzCShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvc2NyaXB0LXRlc3RzL2hhbmRz
aGFrZS1mYWlsLWJ5LXByZXBlbmRlZC1udWxsLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUx
IEBACitkZXNjcmlwdGlvbignQ29ubmVjdGlvbiBzaG91bGQgZmFpbCBpbW1lZGlhdGVseSwgcmF0
aGVyIHRoYW4gc3VjY2VlZGluZyBvciBzdGF5aW5nIGluIGxpbWJvIHVudGlsIHRpbWVvdXQsIGlm
IGEgbnVsbCBieXRlIGlzIHJlY2VpdmVkIGJlZm9yZSB0aGUgaGFuZHNoYWtlLicpOworCisKK2lm
ICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
d2FpdFVudGlsRG9uZSgpCisKK3ZhciB0aW1lZE91dCA9IGZhbHNlOwordmFyIGNvbm5lY3RlZCA9
IGZhbHNlOwordmFyIG9yaWdpbjsKKworZnVuY3Rpb24gZW5kVGVzdCgpIHsKKyAgICBzaG91bGRC
ZUZhbHNlKCd0aW1lZE91dCcpOworICAgIHNob3VsZEJlRmFsc2UoJ2Nvbm5lY3RlZCcpOworICAg
IHNob3VsZEJlVW5kZWZpbmVkKCdvcmlnaW4nKTsKKyAgICBjbGVhclRpbWVvdXQodGltZW91dElE
KTsKKyAgICBpc1N1Y2Nlc3NmdWxseVBhcnNlZCgpOworICAgIGlmICh3aW5kb3cubGF5b3V0VGVz
dENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsK
K30KKwordmFyIHVybCA9ICd3czovL2xvY2FsaG9zdDo4ODgwL3dlYnNvY2tldC90ZXN0cy9oYW5k
c2hha2UtZmFpbC1ieS1wcmVwZW5kZWQtbnVsbCc7Cit2YXIgd3MgPSBuZXcgV2ViU29ja2V0KHVy
bCk7CisKK3dzLm9ub3BlbiA9IGZ1bmN0aW9uKCkKK3sKKyAgICBkZWJ1ZygnQ29ubmVjdGVkJyk7
CisgICAgY29ubmVjdGVkID0gdHJ1ZTsKK30KKword3Mub25tZXNzYWdlID0gZnVuY3Rpb24obWVz
c2FnZUV2ZW50KQoreworICAgIG9yaWdpbiA9IG1lc3NhZ2VFdmVudC5kYXRhOworICAgIGRlYnVn
KCdvcmlnaW4gPSAnICsgb3JpZ2luKTsKKyAgICB3cy5jbG9zZSgpOworfQorCit3cy5vbmNsb3Nl
ID0gZnVuY3Rpb24oKQoreworICAgIGVuZFRlc3QoKTsKK30KKworZnVuY3Rpb24gdGltZW91dENh
bGxiYWNrKCkKK3sKKyAgICBkZWJ1ZygnVGltZWQgb3V0IChzdGF0ZSA9ICcgKyB3cy5yZWFkeVN0
YXRlICsgJyknKTsKKyAgICB0aW1lZE91dCA9IHRydWU7CisgICAgZW5kVGVzdCgpOworfQorCit2
YXIgdGltZW91dElEID0gc2V0VGltZW91dCh0aW1lb3V0Q2FsbGJhY2ssIDMwMDApOworCit2YXIg
c3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78377</attachid>
            <date>2011-01-09 23:54:26 -0800</date>
            <delta_ts>2011-01-10 10:30:16 -0800</delta_ts>
            <desc>fix chromium build failure</desc>
            <filename>bug51253.patch</filename>
            <type>text/plain</type>
            <size>17124</size>
            <attacher name="Joe Mason">joenotcharles</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc1MzYxKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTEtMDEtMDkgIEpvZSBNYXNv
biAgPGptYXNvbkByaW0uY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFdlYlNvY2tldHM6IHVuYm91bmRlZCBidWZmZXIgZ3Jvd3RoIHdoZW4gc2Vy
dmVyIHNlbmRzIGJhZCBkYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD01MTI1MworCisgICAgICAgIEZhaWwgYSB3ZWJzb2NrZXQgaGFuZHNoYWtlIGFm
dGVyIDEwMjQgYnl0ZXMgd2l0aG91dCBhIG5ld2xpbmUsIG9yIGlmIGl0CisgICAgICAgIGNvbnRh
aW5zIGEgbnVsbCBieXRlIGJlZm9yZSB0aGUgZmlyc3QgbmV3bGluZS4KKworICAgICAgICBUZXN0
czogaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaGFuZHNoYWtlLWZhaWwtYnktbWF4bGVuZ3Ro
Lmh0bWwKKyAgICAgICAgICAgICAgIGh0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2hhbmRzaGFr
ZS1mYWlsLWJ5LXByZXBlbmRlZC1udWxsLmh0bWwKKworICAgICAgICAqIHdlYnNvY2tldHMvV2Vi
U29ja2V0SGFuZHNoYWtlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldEhhbmRzaGFr
ZTo6cmVhZFN0YXR1c0xpbmUpOgorCiAyMDExLTAxLTA5ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5y
ZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCBy
NzUzMzcuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFr
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXRI
YW5kc2hha2UuY3BwCShyZXZpc2lvbiA3NTM1MykKKysrIFNvdXJjZS9XZWJDb3JlL3dlYnNvY2tl
dHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBA
IC00MjcsNiArNDI4LDEwIEBAIEtVUkwgV2ViU29ja2V0SGFuZHNoYWtlOjpodHRwVVJMRm9yQXV0
aGUKIC8vIHN0YXR1c0NvZGUgYW5kIHN0YXR1c1RleHQgd2lsbCBiZSBzZXQgdG8gLTEgYW5kIGEg
bnVsbCBzdHJpbmcsIHJlc3BlY3RpdmVseS4KIGludCBXZWJTb2NrZXRIYW5kc2hha2U6OnJlYWRT
dGF0dXNMaW5lKGNvbnN0IGNoYXIqIGhlYWRlciwgc2l6ZV90IGhlYWRlckxlbmd0aCwgaW50JiBz
dGF0dXNDb2RlLCBTdHJpbmcmIHN0YXR1c1RleHQpCiB7CisgICAgLy8gQXJiaXRyYXJ5IHNpemUg
bGltaXQgdG8gcHJldmVudCB0aGUgc2VydmVyIGZyb20gc2VuZGluZyBhbiB1bmJvdW5kZWQKKyAg
ICAvLyBhbW91bnQgb2YgZGF0YSB3aXRoIG5vIG5ld2xpbmVzIGFuZCBmb3JjaW5nIHVzIHRvIGJ1
ZmZlciBpdCBhbGwuCisgICAgc3RhdGljIGNvbnN0IGludCBtYXhMZW5ndGggPSAxMDI0OworCiAg
ICAgc3RhdHVzQ29kZSA9IC0xOwogICAgIHN0YXR1c1RleHQgPSBTdHJpbmcoKTsKIApAQCAtNDQx
LDYgKzQ0NiwxNCBAQCBpbnQgV2ViU29ja2V0SGFuZHNoYWtlOjpyZWFkU3RhdHVzTGluZShjCiAg
ICAgICAgICAgICAgICAgc3BhY2UxID0gcDsKICAgICAgICAgICAgIGVsc2UgaWYgKCFzcGFjZTIp
CiAgICAgICAgICAgICAgICAgc3BhY2UyID0gcDsKKyAgICAgICAgfSBlbHNlIGlmICgqcCA9PSAn
XDAnKSB7CisgICAgICAgICAgICAvLyBUaGUgY2FsbGVyIHdpbGwgc2VhcmNoIGZvciB0aGUgZW5k
aW5nIG5ld2xpbmUgd2l0aCBzdHJuc3RyLAorICAgICAgICAgICAgLy8gd2hpY2ggZG9lcyBub3Qg
c2NhbiBwYXN0IG51bGxzLiAgU28gYSBudWxsIGluIHRoZSBzdHJlYW0gd2lsbAorICAgICAgICAg
ICAgLy8gY2F1c2UgaXQgdG8gbG9vcCBmb3JldmVyLCByZWFkaW5nIG1vcmUgZGF0YSBhbmQgdGhl
biByZXBlYXRpbmcKKyAgICAgICAgICAgIC8vIHRoZSBzZWFyY2ggb25seSBvbiB0aGUgZGF0YSBi
ZWZvcmUgdGhlIG51bGwsIHVubGVzcyB3ZSBhYm9ydAorICAgICAgICAgICAgLy8gaW1tZWRpYXRl
bHkuCisgICAgICAgICAgICBtX2NvbnRleHQtPmFkZE1lc3NhZ2UoSlNNZXNzYWdlU291cmNlLCBM
b2dNZXNzYWdlVHlwZSwgRXJyb3JNZXNzYWdlTGV2ZWwsICJTdGF0dXMgbGluZSBjb250YWlucyBl
bWJlZGRlZCBudWxsIiwgMCwgY2xpZW50T3JpZ2luKCkpOworICAgICAgICAgICAgcmV0dXJuIHAg
KyAxIC0gaGVhZGVyOwogICAgICAgICB9IGVsc2UgaWYgKCpwID09ICdcbicpCiAgICAgICAgICAg
ICBicmVhazsKICAgICB9CkBAIC00NDgsOSArNDYxLDkgQEAgaW50IFdlYlNvY2tldEhhbmRzaGFr
ZTo6cmVhZFN0YXR1c0xpbmUoYwogICAgICAgICByZXR1cm4gLTE7IC8vIFdlIGhhdmUgbm90IHJl
Y2VpdmVkICdcbicgeWV0LgogCiAgICAgY29uc3QgY2hhciogZW5kID0gcCArIDE7Ci0gICAgaWYg
KGVuZCAtIGhlYWRlciA+IElOVF9NQVgpIHsKKyAgICBpZiAoZW5kIC0gaGVhZGVyID4gbWF4TGVu
Z3RoKSB7CiAgICAgICAgIG1fY29udGV4dC0+YWRkTWVzc2FnZShKU01lc3NhZ2VTb3VyY2UsIExv
Z01lc3NhZ2VUeXBlLCBFcnJvck1lc3NhZ2VMZXZlbCwgIlN0YXR1cyBsaW5lIGlzIHRvbyBsb25n
OiAiICsgdHJpbUNvbnNvbGVNZXNzYWdlKGhlYWRlciwgbWF4Q29uc29sZU1lc3NhZ2VTaXplICsg
MSksIDAsIGNsaWVudE9yaWdpbigpKTsKLSAgICAgICAgcmV0dXJuIElOVF9NQVg7CisgICAgICAg
IHJldHVybiBtYXhMZW5ndGg7CiAgICAgfQogICAgIGludCBsaW5lTGVuZ3RoID0gZW5kIC0gaGVh
ZGVyOwogCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA3NTM2MSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBACisyMDExLTAxLTA5ICBKb2UgTWFzb24g
IDxqbWFzb25AcmltLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBXZWJTb2NrZXRzOiB1bmJvdW5kZWQgYnVmZmVyIGdyb3d0aCB3aGVuIHNlcnZl
ciBzZW5kcyBiYWQgZGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NTEyNTMKKworICAgICAgICBUZXN0cyB0aGF0IGEgd2Vic29ja2V0IGhhbmRzaGFr
ZSBzaG91bGQgZmFpbCBhZnRlciAxMDI0IGJ5dGVzIHdpdGhvdXQgYQorICAgICAgICBuZXdsaW5l
LCBvciBpZiBpdCBjb250YWlucyBhIG51bGwgYnl0ZSBiZWZvcmUgdGhlIGZpcnN0IG5ld2xpbmUu
CisgICAgICAgIAorICAgICAgICAqIGh0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2hhbmRzaGFr
ZS1mYWlsLWJ5LW1heGxlbmd0aC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAv
dGVzdHMvd2Vic29ja2V0L3Rlc3RzL2hhbmRzaGFrZS1mYWlsLWJ5LW1heGxlbmd0aC5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oYW5kc2hha2UtZmFp
bC1ieS1tYXhsZW5ndGhfd3NoLnB5OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3dlYnNv
Y2tldC90ZXN0cy9oYW5kc2hha2UtZmFpbC1ieS1wcmVwZW5kZWQtbnVsbC1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2hhbmRzaGFrZS1m
YWlsLWJ5LXByZXBlbmRlZC1udWxsLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMv
d2Vic29ja2V0L3Rlc3RzL2hhbmRzaGFrZS1mYWlsLWJ5LXByZXBlbmRlZC1udWxsX3dzaC5weTog
QWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvc2NyaXB0LXRlc3Rz
L2hhbmRzaGFrZS1mYWlsLWJ5LW1heGxlbmd0aC5qczogQWRkZWQuCisgICAgICAgIChlbmRUZXN0
KToKKyAgICAgICAgKHdzLm9ub3Blbik6CisgICAgICAgICh3cy5vbm1lc3NhZ2UpOgorICAgICAg
ICAod3Mub25jbG9zZSk6CisgICAgICAgICh0aW1lb3V0Q2FsbGJhY2spOgorICAgICAgICAqIGh0
dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL3NjcmlwdC10ZXN0cy9oYW5kc2hha2UtZmFpbC1ieS1w
cmVwZW5kZWQtbnVsbC5qczogQWRkZWQuCisgICAgICAgIChlbmRUZXN0KToKKyAgICAgICAgKHdz
Lm9ub3Blbik6CisgICAgICAgICh3cy5vbm1lc3NhZ2UpOgorICAgICAgICAod3Mub25jbG9zZSk6
CisgICAgICAgICh0aW1lb3V0Q2FsbGJhY2spOgorCiAyMDExLTAxLTA5ICBKdXN0aW4gR2FyY2lh
ICA8anVzdGluLmdhcmNpYUBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gIEFkZGlu
ZyBzdmcvdGV4dC9jYXJldC1pbi1zdmctdGV4dC54aHRtbCB0byBTa2lwcGVkIGxpc3QgZm9yIGd0
aywgd2hlcmUgdGhlcmUgCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90
ZXN0cy9oYW5kc2hha2UtZmFpbC1ieS1tYXhsZW5ndGgtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2hhbmRzaGFrZS1mYWls
LWJ5LW1heGxlbmd0aC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oYW5kc2hha2UtZmFpbC1ieS1tYXhsZW5ndGgtZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyIEBACitDT05TT0xFIE1FU1NBR0U6
IGxpbmUgMDogU3RhdHVzIGxpbmUgaXMgdG9vIGxvbmc6IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u4oCmCitDb25u
ZWN0aW9uIHNob3VsZCBmYWlsIGltbWVkaWF0ZWx5LCByYXRoZXIgdGhhbiBzdWNjZWVkaW5nIG9y
IHN0YXlpbmcgaW4gbGltYm8gdW50aWwgdGltZW91dCwgaWYgaGFuZHNoYWtlIGlzIGxvbmdlciB0
aGFuIDEwMjQgYnl0ZXMuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAi
UEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworUEFTUyB0aW1l
ZE91dCBpcyBmYWxzZQorUEFTUyBjb25uZWN0ZWQgaXMgZmFsc2UKK1BBU1Mgb3JpZ2luIGlzIHVu
ZGVmaW5lZC4KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVU
RQorCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oYW5kc2hh
a2UtZmFpbC1ieS1tYXhsZW5ndGguaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oYW5kc2hha2UtZmFpbC1ieS1tYXhsZW5ndGguaHRtbAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2hh
bmRzaGFrZS1mYWlsLWJ5LW1heGxlbmd0aC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEz
IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRt
bD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8uLi9qcy10ZXN0
LXJlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vanMt
dGVzdC1yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4u
Ly4uLy4uL2pzLXRlc3QtcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC1mdW5jdGlvbi5qcyI+PC9zY3Jp
cHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4KKzxkaXYg
aWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9oYW5kc2hha2Ut
ZmFpbC1ieS1tYXhsZW5ndGguanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDog
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaGFuZHNoYWtlLWZhaWwtYnkt
bWF4bGVuZ3RoX3dzaC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dl
YnNvY2tldC90ZXN0cy9oYW5kc2hha2UtZmFpbC1ieS1tYXhsZW5ndGhfd3NoLnB5CShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaGFuZHNoYWtl
LWZhaWwtYnktbWF4bGVuZ3RoX3dzaC5weQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MSBAQAor
IyBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMK
KyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
IyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
IyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgdGltZQorCitkZWYgd2Vi
X3NvY2tldF9kb19leHRyYV9oYW5kc2hha2UocmVxdWVzdCk6CisgICAgIyBUaGlzIHdpbGwgY2F1
c2UgdGhlIGhhbmRzaGFrZSB0byBmYWlsIGJlY2F1c2UgaXQgcHVzaGVzIHRoZSBsZW5ndGggb2Yg
dGhlCisgICAgIyBzdGF0dXMgbGluZSBvZiAxMDI0IGNoYXJhY3RlcnMKKyAgICBtc2cgPSAiIgor
ICAgIGZvciBpIGluIHJhbmdlKDAsIDEwMjQpOgorICAgICAgICBtc2cgKz0gIi4iCisgICAgbXNn
ICs9ICdIVFRQLzEuMSAxMDEgV2ViU29ja2V0IFByb3RvY29sIEhhbmRzaGFrZVxyXG4nCisgICAg
bXNnICs9ICdVcGdyYWRlOiBXZWJTb2NrZXRcclxuJworICAgIG1zZyArPSAnQ29ubmVjdGlvbjog
VXBncmFkZVxyXG4nCisgICAgbXNnICs9ICdTZWMtV2ViU29ja2V0LUxvY2F0aW9uOiAnICsgcmVx
dWVzdC53c19sb2NhdGlvbiArICdcclxuJworICAgIG1zZyArPSAnU2VjLVdlYlNvY2tldC1Pcmln
aW46ICcgKyByZXF1ZXN0LndzX29yaWdpbiArICdcclxuJworICAgIG1zZyArPSAnXHJcbicKKyAg
ICBtc2cgKz0gcmVxdWVzdC53c19jaGFsbGVuZ2VfbWQ1CisgICAgcmVxdWVzdC5jb25uZWN0aW9u
LndyaXRlKG1zZykKKyAgICAjIGNvbnRpbnVlIHdyaXRpbmcgZGF0YSB1bnRpbCB0aGUgY2xpZW50
IGRpc2Nvbm5lY3RzCisgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgdGltZS5zbGVlcCgxKQorICAg
ICAgICByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGUoJ2tlZXBhbGl2ZVxuJykKKworZGVmIHdlYl9z
b2NrZXRfdHJhbnNmZXJfZGF0YShyZXF1ZXN0KToKKyAgICBwYXNzCkluZGV4OiBMYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oYW5kc2hha2UtZmFpbC1ieS1wcmVwZW5kZWQt
bnVsbC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93
ZWJzb2NrZXQvdGVzdHMvaGFuZHNoYWtlLWZhaWwtYnktcHJlcGVuZGVkLW51bGwtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVz
dHMvaGFuZHNoYWtlLWZhaWwtYnktcHJlcGVuZGVkLW51bGwtZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDEyIEBACitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMDogU3RhdHVzIGxp
bmUgY29udGFpbnMgZW1iZWRkZWQgbnVsbAorQ29ubmVjdGlvbiBzaG91bGQgZmFpbCBpbW1lZGlh
dGVseSwgcmF0aGVyIHRoYW4gc3VjY2VlZGluZyBvciBzdGF5aW5nIGluIGxpbWJvIHVudGlsIHRp
bWVvdXQsIGlmIGEgbnVsbCBieXRlIGlzIHJlY2VpdmVkIGJlZm9yZSB0aGUgaGFuZHNoYWtlLgor
CitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBm
b2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKK1BBU1MgdGltZWRPdXQgaXMgZmFsc2UKK1BB
U1MgY29ubmVjdGVkIGlzIGZhbHNlCitQQVNTIG9yaWdpbiBpcyB1bmRlZmluZWQuCitQQVNTIHN1
Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaGFuZHNoYWtlLWZhaWwtYnktcHJlcGVu
ZGVkLW51bGwuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNv
Y2tldC90ZXN0cy9oYW5kc2hha2UtZmFpbC1ieS1wcmVwZW5kZWQtbnVsbC5odG1sCShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaGFuZHNoYWtl
LWZhaWwtYnktcHJlcGVuZGVkLW51bGwuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMyBA
QAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+
Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4vanMtdGVzdC1y
ZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2pzLXRl
c3QtcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8u
Li8uLi9qcy10ZXN0LXJlc291cmNlcy9qcy10ZXN0LXBvc3QtZnVuY3Rpb24uanMiPjwvc2NyaXB0
PgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2IGlk
PSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvaGFuZHNoYWtlLWZh
aWwtYnktcHJlcGVuZGVkLW51bGwuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRl
eDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaGFuZHNoYWtlLWZhaWwt
YnktcHJlcGVuZGVkLW51bGxfd3NoLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAv
dGVzdHMvd2Vic29ja2V0L3Rlc3RzL2hhbmRzaGFrZS1mYWlsLWJ5LXByZXBlbmRlZC1udWxsX3dz
aC5weQkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rl
c3RzL2hhbmRzaGFrZS1mYWlsLWJ5LXByZXBlbmRlZC1udWxsX3dzaC5weQkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw1NiBAQAorIyBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1p
dGVkIDIwMTEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMg
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBv
cnQgdGltZQorCitkZWYgd2ViX3NvY2tldF9kb19leHRyYV9oYW5kc2hha2UocmVxdWVzdCk6Cisg
ICAgIyBUaGlzIHNpbXVsYXRlcyBhIGJyb2tlbiBzZXJ2ZXIgdGhhdCBzZW5kcyBhIFdlYlNvY2tl
dCBmcmFtZSBiZWZvcmUgdGhlCisgICAgIyBoYW5kc2hha2UsIGFuZCBtb3JlIGZyYW1lcyBhZnRl
cndhcmRzLiAgSXQgaXMgaW1wb3J0YW50IHRoYXQgaWYgdGhpcworICAgICMgaGFwcGVucyB0aGUg
Y2xpZW50IGRvZXMgbm90IGJ1ZmZlciBhbGwgdGhlIGZyYW1lcyBhcyB0aGUgc2VydmVyIGNvbnRp
bnVlcworICAgICMgdG8gc2VuZCBtb3JlIGRhdGEgLSBpdCBzaG91bGQgYWJvcnQgYWZ0ZXIgcmVh
ZGluZyBhIHJlYXNvbmFibGUgbnVtYmVyIG9mCisgICAgIyBieXRlcyAoc2V0IGFyYml0cmFyaWx5
IHRvIDEwMjQpLgorICAgIGZyYW1lID0gJ1wwRnJhbWUtY29udGFpbnMtdGhpcnR5LXR3by1ieXRl
cycKKworICAgIG1zZyA9IGZyYW1lCisgICAgbXNnICs9ICdIVFRQLzEuMSAxMDEgV2ViU29ja2V0
IFByb3RvY29sIEhhbmRzaGFrZVxyXG4nCisgICAgbXNnICs9ICdVcGdyYWRlOiBXZWJTb2NrZXRc
clxuJworICAgIG1zZyArPSAnQ29ubmVjdGlvbjogVXBncmFkZVxyXG4nCisgICAgbXNnICs9ICdT
ZWMtV2ViU29ja2V0LUxvY2F0aW9uOiAnICsgcmVxdWVzdC53c19sb2NhdGlvbiArICdcclxuJwor
ICAgIG1zZyArPSAnU2VjLVdlYlNvY2tldC1PcmlnaW46ICcgKyByZXF1ZXN0LndzX29yaWdpbiAr
ICdcclxuJworICAgIG1zZyArPSAnXHJcbicKKyAgICBtc2cgKz0gcmVxdWVzdC53c19jaGFsbGVu
Z2VfbWQ1CisgICAgcmVxdWVzdC5jb25uZWN0aW9uLndyaXRlKG1zZykKKyAgICAjIGNvbnRpbnVl
IHdyaXRpbmcgZGF0YSB1bnRpbCB0aGUgY2xpZW50IGRpc2Nvbm5lY3RzCisgICAgd2hpbGUgVHJ1
ZToKKyAgICAgICAgdGltZS5zbGVlcCgxKQorICAgICAgICBudW1GcmFtZXMgPSAxMDI0IC8gbGVu
KGZyYW1lKSAjIHdyaXRlIG92ZXIgMTAyNCBieXRlcyBpbmNsdWRpbmcgdGhlIGFib3ZlIGhhbmRz
aGFrZQorICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBudW1GcmFtZXMpOgorICAgICAgICAgICAg
cmVxdWVzdC5jb25uZWN0aW9uLndyaXRlKGZyYW1lKQorCitkZWYgd2ViX3NvY2tldF90cmFuc2Zl
cl9kYXRhKHJlcXVlc3QpOgorICAgIHBhc3MKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMv
d2Vic29ja2V0L3Rlc3RzL3NjcmlwdC10ZXN0cy9oYW5kc2hha2UtZmFpbC1ieS1tYXhsZW5ndGgu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMv
c2NyaXB0LXRlc3RzL2hhbmRzaGFrZS1mYWlsLWJ5LW1heGxlbmd0aC5qcwkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL3NjcmlwdC10ZXN0cy9o
YW5kc2hha2UtZmFpbC1ieS1tYXhsZW5ndGguanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTAg
QEAKK2Rlc2NyaXB0aW9uKCdDb25uZWN0aW9uIHNob3VsZCBmYWlsIGltbWVkaWF0ZWx5LCByYXRo
ZXIgdGhhbiBzdWNjZWVkaW5nIG9yIHN0YXlpbmcgaW4gbGltYm8gdW50aWwgdGltZW91dCwgaWYg
aGFuZHNoYWtlIGlzIGxvbmdlciB0aGFuIDEwMjQgYnl0ZXMuJyk7CisKK2lmICh3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9u
ZSgpCisKK3ZhciB0aW1lZE91dCA9IGZhbHNlOwordmFyIGNvbm5lY3RlZCA9IGZhbHNlOwordmFy
IG9yaWdpbjsKKworZnVuY3Rpb24gZW5kVGVzdCgpIHsKKyAgICBzaG91bGRCZUZhbHNlKCd0aW1l
ZE91dCcpOworICAgIHNob3VsZEJlRmFsc2UoJ2Nvbm5lY3RlZCcpOworICAgIHNob3VsZEJlVW5k
ZWZpbmVkKCdvcmlnaW4nKTsKKyAgICBjbGVhclRpbWVvdXQodGltZW91dElEKTsKKyAgICBpc1N1
Y2Nlc3NmdWxseVBhcnNlZCgpOworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIp
CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKwordmFyIHVy
bCA9ICd3czovL2xvY2FsaG9zdDo4ODgwL3dlYnNvY2tldC90ZXN0cy9oYW5kc2hha2UtZmFpbC1i
eS1tYXhsZW5ndGgnOwordmFyIHdzID0gbmV3IFdlYlNvY2tldCh1cmwpOworCit3cy5vbm9wZW4g
PSBmdW5jdGlvbigpCit7CisgICAgZGVidWcoJ0Nvbm5lY3RlZCcpOworICAgIGNvbm5lY3RlZCA9
IHRydWU7Cit9CisKK3dzLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKG1lc3NhZ2VFdmVudCkKK3sKKyAg
ICBvcmlnaW4gPSBtZXNzYWdlRXZlbnQuZGF0YTsKKyAgICBkZWJ1Zygnb3JpZ2luID0gJyArIG9y
aWdpbik7CisgICAgd3MuY2xvc2UoKTsKK30KKword3Mub25jbG9zZSA9IGZ1bmN0aW9uKCkKK3sK
KyAgICBlbmRUZXN0KCk7Cit9CisKK2Z1bmN0aW9uIHRpbWVvdXRDYWxsYmFjaygpCit7CisgICAg
ZGVidWcoJ1RpbWVkIG91dCAoc3RhdGUgPSAnICsgd3MucmVhZHlTdGF0ZSArICcpJyk7CisgICAg
dGltZWRPdXQgPSB0cnVlOworICAgIGVuZFRlc3QoKTsKK30KKwordmFyIHRpbWVvdXRJRCA9IHNl
dFRpbWVvdXQodGltZW91dENhbGxiYWNrLCAzMDAwKTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNl
ZCA9IHRydWU7CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9z
Y3JpcHQtdGVzdHMvaGFuZHNoYWtlLWZhaWwtYnktcHJlcGVuZGVkLW51bGwuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvc2NyaXB0LXRlc3Rz
L2hhbmRzaGFrZS1mYWlsLWJ5LXByZXBlbmRlZC1udWxsLmpzCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvc2NyaXB0LXRlc3RzL2hhbmRzaGFr
ZS1mYWlsLWJ5LXByZXBlbmRlZC1udWxsLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUxIEBA
CitkZXNjcmlwdGlvbignQ29ubmVjdGlvbiBzaG91bGQgZmFpbCBpbW1lZGlhdGVseSwgcmF0aGVy
IHRoYW4gc3VjY2VlZGluZyBvciBzdGF5aW5nIGluIGxpbWJvIHVudGlsIHRpbWVvdXQsIGlmIGEg
bnVsbCBieXRlIGlzIHJlY2VpdmVkIGJlZm9yZSB0aGUgaGFuZHNoYWtlLicpOworCisKK2lmICh3
aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2Fp
dFVudGlsRG9uZSgpCisKK3ZhciB0aW1lZE91dCA9IGZhbHNlOwordmFyIGNvbm5lY3RlZCA9IGZh
bHNlOwordmFyIG9yaWdpbjsKKworZnVuY3Rpb24gZW5kVGVzdCgpIHsKKyAgICBzaG91bGRCZUZh
bHNlKCd0aW1lZE91dCcpOworICAgIHNob3VsZEJlRmFsc2UoJ2Nvbm5lY3RlZCcpOworICAgIHNo
b3VsZEJlVW5kZWZpbmVkKCdvcmlnaW4nKTsKKyAgICBjbGVhclRpbWVvdXQodGltZW91dElEKTsK
KyAgICBpc1N1Y2Nlc3NmdWxseVBhcnNlZCgpOworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30K
KwordmFyIHVybCA9ICd3czovL2xvY2FsaG9zdDo4ODgwL3dlYnNvY2tldC90ZXN0cy9oYW5kc2hh
a2UtZmFpbC1ieS1wcmVwZW5kZWQtbnVsbCc7Cit2YXIgd3MgPSBuZXcgV2ViU29ja2V0KHVybCk7
CisKK3dzLm9ub3BlbiA9IGZ1bmN0aW9uKCkKK3sKKyAgICBkZWJ1ZygnQ29ubmVjdGVkJyk7Cisg
ICAgY29ubmVjdGVkID0gdHJ1ZTsKK30KKword3Mub25tZXNzYWdlID0gZnVuY3Rpb24obWVzc2Fn
ZUV2ZW50KQoreworICAgIG9yaWdpbiA9IG1lc3NhZ2VFdmVudC5kYXRhOworICAgIGRlYnVnKCdv
cmlnaW4gPSAnICsgb3JpZ2luKTsKKyAgICB3cy5jbG9zZSgpOworfQorCit3cy5vbmNsb3NlID0g
ZnVuY3Rpb24oKQoreworICAgIGVuZFRlc3QoKTsKK30KKworZnVuY3Rpb24gdGltZW91dENhbGxi
YWNrKCkKK3sKKyAgICBkZWJ1ZygnVGltZWQgb3V0IChzdGF0ZSA9ICcgKyB3cy5yZWFkeVN0YXRl
ICsgJyknKTsKKyAgICB0aW1lZE91dCA9IHRydWU7CisgICAgZW5kVGVzdCgpOworfQorCit2YXIg
dGltZW91dElEID0gc2V0VGltZW91dCh0aW1lb3V0Q2FsbGJhY2ssIDMwMDApOworCit2YXIgc3Vj
Y2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsK
</data>
<flag name="review"
          id="69681"
          type_id="1"
          status="+"
          setter="ap"
    />
    <flag name="commit-queue"
          id="69682"
          type_id="3"
          status="-"
          setter="ap"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78408</attachid>
            <date>2011-01-10 10:30:16 -0800</date>
            <delta_ts>2011-01-10 18:26:23 -0800</delta_ts>
            <desc>addressed review comments</desc>
            <filename>bug51253-2.patch</filename>
            <type>text/plain</type>
            <size>15226</size>
            <attacher name="Joe Mason">joenotcharles</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc1MzgwKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTEtMDEtMDkgIEpvZSBNYXNv
biAgPGptYXNvbkByaW0uY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFdlYlNvY2tldHM6IHVuYm91bmRlZCBidWZmZXIgZ3Jvd3RoIHdoZW4gc2Vy
dmVyIHNlbmRzIGJhZCBkYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD01MTI1MworCisgICAgICAgIEZhaWwgYSB3ZWJzb2NrZXQgaGFuZHNoYWtlIGFm
dGVyIDEwMjQgYnl0ZXMgd2l0aG91dCBhIG5ld2xpbmUsIG9yIGlmIGl0CisgICAgICAgIGNvbnRh
aW5zIGEgbnVsbCBieXRlIGJlZm9yZSB0aGUgZmlyc3QgbmV3bGluZS4KKworICAgICAgICBUZXN0
czogaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaGFuZHNoYWtlLWZhaWwtYnktbWF4bGVuZ3Ro
Lmh0bWwKKyAgICAgICAgICAgICAgIGh0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2hhbmRzaGFr
ZS1mYWlsLWJ5LXByZXBlbmRlZC1udWxsLmh0bWwKKworICAgICAgICAqIHdlYnNvY2tldHMvV2Vi
U29ja2V0SGFuZHNoYWtlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldEhhbmRzaGFr
ZTo6cmVhZFN0YXR1c0xpbmUpOgorCiAyMDExLTAxLTEwICBDYXJsb3MgR2FyY2lhIENhbXBvcyAg
PGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBNYXJ0aW4gUm9iaW5z
b24uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5k
c2hha2UuY3BwCShyZXZpc2lvbiA3NTM4MCkKKysrIFNvdXJjZS9XZWJDb3JlL3dlYnNvY2tldHMv
V2ViU29ja2V0SGFuZHNoYWtlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8q
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC00
MjcsNiArNDI4LDEwIEBAIEtVUkwgV2ViU29ja2V0SGFuZHNoYWtlOjpodHRwVVJMRm9yQXV0aGUK
IC8vIHN0YXR1c0NvZGUgYW5kIHN0YXR1c1RleHQgd2lsbCBiZSBzZXQgdG8gLTEgYW5kIGEgbnVs
bCBzdHJpbmcsIHJlc3BlY3RpdmVseS4KIGludCBXZWJTb2NrZXRIYW5kc2hha2U6OnJlYWRTdGF0
dXNMaW5lKGNvbnN0IGNoYXIqIGhlYWRlciwgc2l6ZV90IGhlYWRlckxlbmd0aCwgaW50JiBzdGF0
dXNDb2RlLCBTdHJpbmcmIHN0YXR1c1RleHQpCiB7CisgICAgLy8gQXJiaXRyYXJ5IHNpemUgbGlt
aXQgdG8gcHJldmVudCB0aGUgc2VydmVyIGZyb20gc2VuZGluZyBhbiB1bmJvdW5kZWQKKyAgICAv
LyBhbW91bnQgb2YgZGF0YSB3aXRoIG5vIG5ld2xpbmVzIGFuZCBmb3JjaW5nIHVzIHRvIGJ1ZmZl
ciBpdCBhbGwuCisgICAgc3RhdGljIGNvbnN0IGludCBtYXhpbXVtTGVuZ3RoID0gMTAyNDsKKwog
ICAgIHN0YXR1c0NvZGUgPSAtMTsKICAgICBzdGF0dXNUZXh0ID0gU3RyaW5nKCk7CiAKQEAgLTQ0
MSw2ICs0NDYsMTIgQEAgaW50IFdlYlNvY2tldEhhbmRzaGFrZTo6cmVhZFN0YXR1c0xpbmUoYwog
ICAgICAgICAgICAgICAgIHNwYWNlMSA9IHA7CiAgICAgICAgICAgICBlbHNlIGlmICghc3BhY2Uy
KQogICAgICAgICAgICAgICAgIHNwYWNlMiA9IHA7CisgICAgICAgIH0gZWxzZSBpZiAoKnAgPT0g
J1wwJykgeworICAgICAgICAgICAgLy8gVGhlIGNhbGxlciBpc24ndCBwcmVwYXJlZCB0byBkZWFs
IHdpdGggbnVsbCBieXRlcyBpbiBzdGF0dXMKKyAgICAgICAgICAgIC8vIGxpbmUuIFdlYlNvY2tl
dHMgc3BlY2lmaWNhdGlvbiBkb2Vzbid0IHByb2hpYml0IHRoaXMsIGJ1dCBIVFRQCisgICAgICAg
ICAgICAvLyBkb2VzLCBzbyB3ZSdsbCBqdXN0IHRyZWF0IHRoaXMgYXMgYW4gZXJyb3IuIAorICAg
ICAgICAgICAgbV9jb250ZXh0LT5hZGRNZXNzYWdlKEpTTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2Fn
ZVR5cGUsIEVycm9yTWVzc2FnZUxldmVsLCAiU3RhdHVzIGxpbmUgY29udGFpbnMgZW1iZWRkZWQg
bnVsbCIsIDAsIGNsaWVudE9yaWdpbigpKTsKKyAgICAgICAgICAgIHJldHVybiBwICsgMSAtIGhl
YWRlcjsKICAgICAgICAgfSBlbHNlIGlmICgqcCA9PSAnXG4nKQogICAgICAgICAgICAgYnJlYWs7
CiAgICAgfQpAQCAtNDQ4LDkgKzQ1OSw5IEBAIGludCBXZWJTb2NrZXRIYW5kc2hha2U6OnJlYWRT
dGF0dXNMaW5lKGMKICAgICAgICAgcmV0dXJuIC0xOyAvLyBXZSBoYXZlIG5vdCByZWNlaXZlZCAn
XG4nIHlldC4KIAogICAgIGNvbnN0IGNoYXIqIGVuZCA9IHAgKyAxOwotICAgIGlmIChlbmQgLSBo
ZWFkZXIgPiBJTlRfTUFYKSB7Ci0gICAgICAgIG1fY29udGV4dC0+YWRkTWVzc2FnZShKU01lc3Nh
Z2VTb3VyY2UsIExvZ01lc3NhZ2VUeXBlLCBFcnJvck1lc3NhZ2VMZXZlbCwgIlN0YXR1cyBsaW5l
IGlzIHRvbyBsb25nOiAiICsgdHJpbUNvbnNvbGVNZXNzYWdlKGhlYWRlciwgbWF4Q29uc29sZU1l
c3NhZ2VTaXplICsgMSksIDAsIGNsaWVudE9yaWdpbigpKTsKLSAgICAgICAgcmV0dXJuIElOVF9N
QVg7CisgICAgaWYgKGVuZCAtIGhlYWRlciA+IG1heGltdW1MZW5ndGgpIHsKKyAgICAgICAgbV9j
b250ZXh0LT5hZGRNZXNzYWdlKEpTTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIEVycm9y
TWVzc2FnZUxldmVsLCAiU3RhdHVzIGxpbmUgaXMgdG9vIGxvbmciLCAwLCBjbGllbnRPcmlnaW4o
KSk7CisgICAgICAgIHJldHVybiBtYXhpbXVtTGVuZ3RoOwogICAgIH0KICAgICBpbnQgbGluZUxl
bmd0aCA9IGVuZCAtIGhlYWRlcjsKIApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNzUzODApCisrKyBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMCBAQAorMjAxMS0w
MS0wOSAgSm9lIE1hc29uICA8am1hc29uQHJpbS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViU29ja2V0czogdW5ib3VuZGVkIGJ1ZmZlciBn
cm93dGggd2hlbiBzZXJ2ZXIgc2VuZHMgYmFkIGRhdGEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUxMjUzCisKKyAgICAgICAgVGVzdHMgdGhhdCBhIHdl
YnNvY2tldCBoYW5kc2hha2Ugc2hvdWxkIGZhaWwgYWZ0ZXIgMTAyNCBieXRlcyB3aXRob3V0IGEK
KyAgICAgICAgbmV3bGluZSwgb3IgaWYgaXQgY29udGFpbnMgYSBudWxsIGJ5dGUgYmVmb3JlIHRo
ZSBmaXJzdCBuZXdsaW5lLgorICAgICAgICAKKyAgICAgICAgKiBodHRwL3Rlc3RzL3dlYnNvY2tl
dC90ZXN0cy9oYW5kc2hha2UtZmFpbC1ieS1tYXhsZW5ndGgtZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiBodHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oYW5kc2hha2UtZmFpbC1ieS1t
YXhsZW5ndGguaHRtbDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVz
dHMvaGFuZHNoYWtlLWZhaWwtYnktbWF4bGVuZ3RoX3dzaC5weTogQWRkZWQuCisgICAgICAgICog
aHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaGFuZHNoYWtlLWZhaWwtYnktcHJlcGVuZGVkLW51
bGwtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3dlYnNvY2tldC90
ZXN0cy9oYW5kc2hha2UtZmFpbC1ieS1wcmVwZW5kZWQtbnVsbC5odG1sOiBBZGRlZC4KKyAgICAg
ICAgKiBodHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oYW5kc2hha2UtZmFpbC1ieS1wcmVwZW5k
ZWQtbnVsbF93c2gucHk6IEFkZGVkLgorCiAyMDExLTAxLTEwICBBZGFtIFJvYmVuICA8YXJvYmVu
QGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgc29tZSBuZXcgdGVzdHMgdG8gdGhlIFdpbmRvd3Mg
U2tpcHBlZCBmaWxlCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0
cy9oYW5kc2hha2UtZmFpbC1ieS1tYXhsZW5ndGgtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2hhbmRzaGFrZS1mYWlsLWJ5
LW1heGxlbmd0aC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oYW5kc2hha2UtZmFpbC1ieS1tYXhsZW5ndGgtZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyIEBACitDT05TT0xFIE1FU1NBR0U6IGxp
bmUgMDogU3RhdHVzIGxpbmUgaXMgdG9vIGxvbmcKK0Nvbm5lY3Rpb24gc2hvdWxkIGZhaWwgaW1t
ZWRpYXRlbHksIHJhdGhlciB0aGFuIHN1Y2NlZWRpbmcgb3Igc3RheWluZyBpbiBsaW1ibyB1bnRp
bCB0aW1lb3V0LCBpZiBoYW5kc2hha2UgaXMgbG9uZ2VyIHRoYW4gMTAyNCBieXRlcy4KKworT24g
c3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93
ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCitQQVNTIHRpbWVkT3V0IGlzIGZhbHNlCitQQVNTIGNv
bm5lY3RlZCBpcyBmYWxzZQorUEFTUyBvcmlnaW4gaXMgdW5kZWZpbmVkLgorUEFTUyBzdWNjZXNz
ZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3Rz
L2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2hhbmRzaGFrZS1mYWlsLWJ5LW1heGxlbmd0aC5o
dG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3Rz
L2hhbmRzaGFrZS1mYWlsLWJ5LW1heGxlbmd0aC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaGFuZHNoYWtlLWZhaWwtYnktbWF4bGVu
Z3RoLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjQgQEAKKzwhRE9DVFlQRSBIVE1MIFBV
QkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9
InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uLy4uL2pzLXRlc3QtcmVzb3VyY2VzL2pzLXRlc3Qtc3R5
bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9qcy10ZXN0LXJlc291cmNlcy9qcy10ZXN0
LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vanMtdGVzdC1yZXNvdXJj
ZXMvanMtdGVzdC1wb3N0LWZ1bmN0aW9uLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5Pgor
PGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2PgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8
c2NyaXB0PgorZGVzY3JpcHRpb24oJ0Nvbm5lY3Rpb24gc2hvdWxkIGZhaWwgaW1tZWRpYXRlbHks
IHJhdGhlciB0aGFuIHN1Y2NlZWRpbmcgb3Igc3RheWluZyBpbiBsaW1ibyB1bnRpbCB0aW1lb3V0
LCBpZiBoYW5kc2hha2UgaXMgbG9uZ2VyIHRoYW4gMTAyNCBieXRlcy4nKTsKKworaWYgKHdpbmRv
dy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50
aWxEb25lKCkKKwordmFyIHRpbWVkT3V0ID0gZmFsc2U7Cit2YXIgY29ubmVjdGVkID0gZmFsc2U7
Cit2YXIgb3JpZ2luOworCitmdW5jdGlvbiBlbmRUZXN0KCkgeworICAgIHNob3VsZEJlRmFsc2Uo
J3RpbWVkT3V0Jyk7CisgICAgc2hvdWxkQmVGYWxzZSgnY29ubmVjdGVkJyk7CisgICAgc2hvdWxk
QmVVbmRlZmluZWQoJ29yaWdpbicpOworICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SUQpOworICAg
IGlzU3VjY2Vzc2Z1bGx5UGFyc2VkKCk7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCit2
YXIgdXJsID0gJ3dzOi8vbG9jYWxob3N0Ojg4ODAvd2Vic29ja2V0L3Rlc3RzL2hhbmRzaGFrZS1m
YWlsLWJ5LW1heGxlbmd0aCc7Cit2YXIgd3MgPSBuZXcgV2ViU29ja2V0KHVybCk7CisKK3dzLm9u
b3BlbiA9IGZ1bmN0aW9uKCkKK3sKKyAgICBkZWJ1ZygnQ29ubmVjdGVkJyk7CisgICAgY29ubmVj
dGVkID0gdHJ1ZTsKK30KKword3Mub25tZXNzYWdlID0gZnVuY3Rpb24obWVzc2FnZUV2ZW50KQor
eworICAgIG9yaWdpbiA9IG1lc3NhZ2VFdmVudC5kYXRhOworICAgIGRlYnVnKCdvcmlnaW4gPSAn
ICsgb3JpZ2luKTsKKyAgICB3cy5jbG9zZSgpOworfQorCit3cy5vbmNsb3NlID0gZnVuY3Rpb24o
KQoreworICAgIGVuZFRlc3QoKTsKK30KKworZnVuY3Rpb24gdGltZW91dENhbGxiYWNrKCkKK3sK
KyAgICBkZWJ1ZygnVGltZWQgb3V0IChzdGF0ZSA9ICcgKyB3cy5yZWFkeVN0YXRlICsgJyknKTsK
KyAgICB0aW1lZE91dCA9IHRydWU7CisgICAgZW5kVGVzdCgpOworfQorCit2YXIgdGltZW91dElE
ID0gc2V0VGltZW91dCh0aW1lb3V0Q2FsbGJhY2ssIDMwMDApOworCit2YXIgc3VjY2Vzc2Z1bGx5
UGFyc2VkID0gdHJ1ZTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaGFuZHNoYWtlLWZhaWwtYnktbWF4bGVu
Z3RoX3dzaC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tl
dC90ZXN0cy9oYW5kc2hha2UtZmFpbC1ieS1tYXhsZW5ndGhfd3NoLnB5CShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaGFuZHNoYWtlLWZhaWwt
YnktbWF4bGVuZ3RoX3dzaC5weQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NCBAQAorIyBDb3B5
cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUKKyMgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMKKyMgMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworIyBk
aXNjbGFpbWVyLgorIworIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUKKyMgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisj
CisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyDigJxBUyBJU+KAnSBBTkQgQU5ZIEVYUFJFU1MgT1IKKyMgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRgorIyBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTAorIyBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyMgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKQorIyBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCisj
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCB0aW1lCisKK2RlZiB3
ZWJfc29ja2V0X2RvX2V4dHJhX2hhbmRzaGFrZShyZXF1ZXN0KToKKyAgICAjIFRoaXMgd2lsbCBj
YXVzZSB0aGUgaGFuZHNoYWtlIHRvIGZhaWwgYmVjYXVzZSBpdCBwdXNoZXMgdGhlIGxlbmd0aCBv
ZiB0aGUKKyAgICAjIHN0YXR1cyBsaW5lIHBhc3QgMTAyNCBjaGFyYWN0ZXJzCisgICAgbXNnID0g
IiIKKyAgICBmb3IgaSBpbiByYW5nZSgwLCAxMDI0KToKKyAgICAgICAgbXNnICs9ICIuIgorICAg
IG1zZyArPSAnSFRUUC8xLjEgMTAxIFdlYlNvY2tldCBQcm90b2NvbCBIYW5kc2hha2VcclxuJwor
ICAgIG1zZyArPSAnVXBncmFkZTogV2ViU29ja2V0XHJcbicKKyAgICBtc2cgKz0gJ0Nvbm5lY3Rp
b246IFVwZ3JhZGVcclxuJworICAgIG1zZyArPSAnU2VjLVdlYlNvY2tldC1Mb2NhdGlvbjogJyAr
IHJlcXVlc3Qud3NfbG9jYXRpb24gKyAnXHJcbicKKyAgICBtc2cgKz0gJ1NlYy1XZWJTb2NrZXQt
T3JpZ2luOiAnICsgcmVxdWVzdC53c19vcmlnaW4gKyAnXHJcbicKKyAgICBtc2cgKz0gJ1xyXG4n
CisgICAgbXNnICs9IHJlcXVlc3Qud3NfY2hhbGxlbmdlX21kNQorICAgIHJlcXVlc3QuY29ubmVj
dGlvbi53cml0ZShtc2cpCisgICAgIyBjb250aW51ZSB3cml0aW5nIGRhdGEgdW50aWwgdGhlIGNs
aWVudCBkaXNjb25uZWN0cworICAgIHdoaWxlIFRydWU6CisgICAgICAgIHRpbWUuc2xlZXAoMSkK
KyAgICAgICAgcmVxdWVzdC5jb25uZWN0aW9uLndyaXRlKCdrZWVwYWxpdmVcbicpCisKK2RlZiB3
ZWJfc29ja2V0X3RyYW5zZmVyX2RhdGEocmVxdWVzdCk6CisgICAgcGFzcwpJbmRleDogTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaGFuZHNoYWtlLWZhaWwtYnktcHJlcGVu
ZGVkLW51bGwtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVz
dHMvd2Vic29ja2V0L3Rlc3RzL2hhbmRzaGFrZS1mYWlsLWJ5LXByZXBlbmRlZC1udWxsLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0
L3Rlc3RzL2hhbmRzaGFrZS1mYWlsLWJ5LXByZXBlbmRlZC1udWxsLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxMiBAQAorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDA6IFN0YXR1
cyBsaW5lIGNvbnRhaW5zIGVtYmVkZGVkIG51bGwKK0Nvbm5lY3Rpb24gc2hvdWxkIGZhaWwgaW1t
ZWRpYXRlbHksIHJhdGhlciB0aGFuIHN1Y2NlZWRpbmcgb3Igc3RheWluZyBpbiBsaW1ibyB1bnRp
bCB0aW1lb3V0LCBpZiBhIG51bGwgYnl0ZSBpcyByZWNlaXZlZCBiZWZvcmUgdGhlIGhhbmRzaGFr
ZS4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdl
cywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCitQQVNTIHRpbWVkT3V0IGlzIGZhbHNl
CitQQVNTIGNvbm5lY3RlZCBpcyBmYWxzZQorUEFTUyBvcmlnaW4gaXMgdW5kZWZpbmVkLgorUEFT
UyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExh
eW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2hhbmRzaGFrZS1mYWlsLWJ5LXBy
ZXBlbmRlZC1udWxsLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93
ZWJzb2NrZXQvdGVzdHMvaGFuZHNoYWtlLWZhaWwtYnktcHJlcGVuZGVkLW51bGwuaHRtbAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2hhbmRz
aGFrZS1mYWlsLWJ5LXByZXBlbmRlZC1udWxsLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NjQgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxo
dG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uLy4uL2pzLXRl
c3QtcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9q
cy10ZXN0LXJlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vLi4vanMtdGVzdC1yZXNvdXJjZXMvanMtdGVzdC1wb3N0LWZ1bmN0aW9uLmpzIj48L3Nj
cmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2PgorPGRp
diBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oJ0Nvbm5lY3Rpb24g
c2hvdWxkIGZhaWwgaW1tZWRpYXRlbHksIHJhdGhlciB0aGFuIHN1Y2NlZWRpbmcgb3Igc3RheWlu
ZyBpbiBsaW1ibyB1bnRpbCB0aW1lb3V0LCBpZiBhIG51bGwgYnl0ZSBpcyByZWNlaXZlZCBiZWZv
cmUgdGhlIGhhbmRzaGFrZS4nKTsKKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikK
KyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCkKKwordmFyIHRpbWVkT3V0
ID0gZmFsc2U7Cit2YXIgY29ubmVjdGVkID0gZmFsc2U7Cit2YXIgb3JpZ2luOworCitmdW5jdGlv
biBlbmRUZXN0KCkgeworICAgIHNob3VsZEJlRmFsc2UoJ3RpbWVkT3V0Jyk7CisgICAgc2hvdWxk
QmVGYWxzZSgnY29ubmVjdGVkJyk7CisgICAgc2hvdWxkQmVVbmRlZmluZWQoJ29yaWdpbicpOwor
ICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SUQpOworICAgIGlzU3VjY2Vzc2Z1bGx5UGFyc2VkKCk7
CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCit2YXIgdXJsID0gJ3dzOi8vbG9jYWxob3N0
Ojg4ODAvd2Vic29ja2V0L3Rlc3RzL2hhbmRzaGFrZS1mYWlsLWJ5LXByZXBlbmRlZC1udWxsJzsK
K3ZhciB3cyA9IG5ldyBXZWJTb2NrZXQodXJsKTsKKword3Mub25vcGVuID0gZnVuY3Rpb24oKQor
eworICAgIGRlYnVnKCdDb25uZWN0ZWQnKTsKKyAgICBjb25uZWN0ZWQgPSB0cnVlOworfQorCit3
cy5vbm1lc3NhZ2UgPSBmdW5jdGlvbihtZXNzYWdlRXZlbnQpCit7CisgICAgb3JpZ2luID0gbWVz
c2FnZUV2ZW50LmRhdGE7CisgICAgZGVidWcoJ29yaWdpbiA9ICcgKyBvcmlnaW4pOworICAgIHdz
LmNsb3NlKCk7Cit9CisKK3dzLm9uY2xvc2UgPSBmdW5jdGlvbigpCit7CisgICAgZW5kVGVzdCgp
OworfQorCitmdW5jdGlvbiB0aW1lb3V0Q2FsbGJhY2soKQoreworICAgIGRlYnVnKCdUaW1lZCBv
dXQgKHN0YXRlID0gJyArIHdzLnJlYWR5U3RhdGUgKyAnKScpOworICAgIHRpbWVkT3V0ID0gdHJ1
ZTsKKyAgICBlbmRUZXN0KCk7Cit9CisKK3ZhciB0aW1lb3V0SUQgPSBzZXRUaW1lb3V0KHRpbWVv
dXRDYWxsYmFjaywgMzAwMCk7CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworPC9z
Y3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dl
YnNvY2tldC90ZXN0cy9oYW5kc2hha2UtZmFpbC1ieS1wcmVwZW5kZWQtbnVsbF93c2gucHkKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaGFuZHNo
YWtlLWZhaWwtYnktcHJlcGVuZGVkLW51bGxfd3NoLnB5CShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaGFuZHNoYWtlLWZhaWwtYnktcHJlcGVu
ZGVkLW51bGxfd3NoLnB5CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ5IEBACisjIENvcHlyaWdo
dCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMS4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZQorIyBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIworIyAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisjIGRpc2Ns
YWltZXIuCisjCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZQorIyBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMg
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIOKAnEFTIElT4oCdIEFORCBBTlkgRVhQUkVTUyBPUgorIyBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
CisjIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMCisjIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorIyBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pCisjIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IKKyMgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUworIyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IHRpbWUKKworZGVmIHdlYl9z
b2NrZXRfZG9fZXh0cmFfaGFuZHNoYWtlKHJlcXVlc3QpOgorICAgICMgVGhpcyBzaW11bGF0ZXMg
YSBicm9rZW4gc2VydmVyIHRoYXQgc2VuZHMgYSBXZWJTb2NrZXQgZnJhbWUgYmVmb3JlIHRoZQor
ICAgICMgaGFuZHNoYWtlLCBhbmQgbW9yZSBmcmFtZXMgYWZ0ZXJ3YXJkcy4gIEl0IGlzIGltcG9y
dGFudCB0aGF0IGlmIHRoaXMKKyAgICAjIGhhcHBlbnMgdGhlIGNsaWVudCBkb2VzIG5vdCBidWZm
ZXIgYWxsIHRoZSBmcmFtZXMgYXMgdGhlIHNlcnZlciBjb250aW51ZXMKKyAgICAjIHRvIHNlbmQg
bW9yZSBkYXRhIC0gaXQgc2hvdWxkIGFib3J0IGFmdGVyIHJlYWRpbmcgYSByZWFzb25hYmxlIG51
bWJlciBvZgorICAgICMgYnl0ZXMgKHNldCBhcmJpdHJhcmlseSB0byAxMDI0KS4KKyAgICBmcmFt
ZSA9ICdcMEZyYW1lLWNvbnRhaW5zLXRoaXJ0eS10d28tYnl0ZXMnCisKKyAgICBtc2cgPSBmcmFt
ZQorICAgIG1zZyArPSAnSFRUUC8xLjEgMTAxIFdlYlNvY2tldCBQcm90b2NvbCBIYW5kc2hha2Vc
clxuJworICAgIG1zZyArPSAnVXBncmFkZTogV2ViU29ja2V0XHJcbicKKyAgICBtc2cgKz0gJ0Nv
bm5lY3Rpb246IFVwZ3JhZGVcclxuJworICAgIG1zZyArPSAnU2VjLVdlYlNvY2tldC1Mb2NhdGlv
bjogJyArIHJlcXVlc3Qud3NfbG9jYXRpb24gKyAnXHJcbicKKyAgICBtc2cgKz0gJ1NlYy1XZWJT
b2NrZXQtT3JpZ2luOiAnICsgcmVxdWVzdC53c19vcmlnaW4gKyAnXHJcbicKKyAgICBtc2cgKz0g
J1xyXG4nCisgICAgbXNnICs9IHJlcXVlc3Qud3NfY2hhbGxlbmdlX21kNQorICAgIHJlcXVlc3Qu
Y29ubmVjdGlvbi53cml0ZShtc2cpCisgICAgIyBjb250aW51ZSB3cml0aW5nIGRhdGEgdW50aWwg
dGhlIGNsaWVudCBkaXNjb25uZWN0cworICAgIHdoaWxlIFRydWU6CisgICAgICAgIHRpbWUuc2xl
ZXAoMSkKKyAgICAgICAgbnVtRnJhbWVzID0gMTAyNCAvIGxlbihmcmFtZSkgIyB3cml0ZSBvdmVy
IDEwMjQgYnl0ZXMgaW5jbHVkaW5nIHRoZSBhYm92ZSBoYW5kc2hha2UKKyAgICAgICAgZm9yIGkg
aW4gcmFuZ2UoMCwgbnVtRnJhbWVzKToKKyAgICAgICAgICAgIHJlcXVlc3QuY29ubmVjdGlvbi53
cml0ZShmcmFtZSkKKworZGVmIHdlYl9zb2NrZXRfdHJhbnNmZXJfZGF0YShyZXF1ZXN0KToKKyAg
ICBwYXNzCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>