<?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>22475</bug_id>
          
          <creation_ts>2008-11-24 17:39:12 -0800</creation_ts>
          <short_desc>REGRESSION: Async XMLHttpRequest never finishes on nonexistent files anymore</short_desc>
          <delta_ts>2009-04-02 00:17:03 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>XML</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar, Regression</keywords>
          <priority>P1</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Francisco Tolmasky">tolmasky</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          <cc>ap</cc>
    
    <cc>emacemac7</cc>
    
    <cc>jchaffraix</cc>
    
    <cc>jwatts</cc>
    
    <cc>mihnea</cc>
    
    <cc>tom</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>100113</commentid>
    <comment_count>0</comment_count>
    <who name="Francisco Tolmasky">tolmasky</who>
    <bug_when>2008-11-24 17:39:12 -0800</bug_when>
    <thetext>when requesting a local file that doesn&apos;t exist, the xmlhttprequest never gets beyond status &quot;1&quot;.  In regular safari it gets all the way to 4.  We use this to determine when our users type in incorrect file names.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100114</commentid>
    <comment_count>1</comment_count>
      <attachid>25463</attachid>
    <who name="Francisco Tolmasky">tolmasky</who>
    <bug_when>2008-11-24 17:40:14 -0800</bug_when>
    <thetext>Created attachment 25463
Reduction

Expected result: 1 then 2 then 4 (as in safari)
Actual result: 1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100119</commentid>
    <comment_count>2</comment_count>
    <who name="Francisco Tolmasky">tolmasky</who>
    <bug_when>2008-11-24 17:53:34 -0800</bug_when>
    <thetext>Note: The attachment (test case) must be run locally</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100210</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-11-25 06:54:11 -0800</bug_when>
    <thetext>Confirmed as a regression with r38750.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100258</commentid>
    <comment_count>4</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2008-11-25 12:20:27 -0800</bug_when>
    <thetext>&lt;rdar://problem/6400722&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110514</commentid>
    <comment_count>5</comment_count>
      <attachid>27869</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2009-02-22 13:57:34 -0800</bug_when>
    <thetext>Created attachment 27869
Proposed fix: fake the old behaviour when didFail is called</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110575</commentid>
    <comment_count>6</comment_count>
      <attachid>27869</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-02-23 06:59:43 -0800</bug_when>
    <thetext>Comment on attachment 27869
Proposed fix: fake the old behaviour when didFail is called

&gt; +        Safari 2 did not make a difference between loading nonexistent or existent files from an XHR point of view.

Should this mention Safari 3, as in this bug report?

&gt; +    // For compatibility we fake a correct load for nonexistent local files (see bug 22475).
&gt; +    // We do not dispatch a readyState event for LOADING to match the normal local file handling.
&gt; +    if (m_url.isLocalFile() &amp;&amp; !fileExists(m_url.string())) {

How does this fileExists() check change the behavior? Other common reasons for a local file to fail loading that come to mind are permissions issues and trying to load a directory instead of a file. It would be nice to have a test for the latter case at least, to verify that it doesn&apos;t need this special treatment.

&gt; Index: LayoutTests/fast/loader/xmlhttprequest-nonexistent-file-expected.txt

It&apos;s funny that some non-HTTP XHR tests are in fast/loader, and others are in fast/dom.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110597</commentid>
    <comment_count>7</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2009-02-23 10:09:12 -0800</bug_when>
    <thetext>&gt; &gt; +        Safari 2 did not make a difference between loading nonexistent or existent files from an XHR point of view.
&gt; 
&gt; Should this mention Safari 3, as in this bug report?

Oh, right, the current stable Safari version is 3.2.1. I will correct it.
 
&gt; &gt; +    // For compatibility we fake a correct load for nonexistent local files (see bug 22475).
&gt; &gt; +    // We do not dispatch a readyState event for LOADING to match the normal local file handling.
&gt; &gt; +    if (m_url.isLocalFile() &amp;&amp; !fileExists(m_url.string())) {
&gt; 
&gt; How does this fileExists() check change the behavior? Other common reasons for
&gt; a local file to fail loading that come to mind are permissions issues and
&gt; trying to load a directory instead of a file. It would be nice to have a test
&gt; for the latter case at least, to verify that it doesn&apos;t need this special
&gt; treatment.

The idea was to make the changes as small as possible because
1) this area is not covered by the XHR spec.
2) browsers have crazy behaviour in such a corner case (I have filed a bug about FF throwing a cross-site exception!).

After some testing, I will side with you on this one as fileExist returns false in the 3 cases. Thus it will just hinder us (I think of windows that may have different rules).

&gt; &gt; Index: LayoutTests/fast/loader/xmlhttprequest-nonexistent-file-expected.txt
&gt; 
&gt; It&apos;s funny that some non-HTTP XHR tests are in fast/loader, and others are in
&gt; fast/dom.

There was only 5 test cases so it was not worth having an xmlhttprequest directory. Maybe with 1 or 2 more it is time for a change :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110645</commentid>
    <comment_count>8</comment_count>
      <attachid>27895</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2009-02-23 14:57:44 -0800</bug_when>
    <thetext>Created attachment 27895
New version updated with ap&apos;s comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110734</commentid>
    <comment_count>9</comment_count>
      <attachid>27895</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-02-24 07:39:06 -0800</bug_when>
    <thetext>Comment on attachment 27895
New version updated with ap&apos;s comments

Test results don&apos;t match expectations here: readyState 4 is only logged once. Also, I&apos;m pretty sure that interleaving of the two requests&apos; results is timing dependent and unreliable. You need waitUntilDone()/notifyDone(), and it would be better to start the second request once the first is done (or to normalize the results in some other way, e.g. by logging into separate DIVs).

&gt; +    // For compatibility we fake a correct load for local files in error (see bug 22475).
&gt; +    // We do not dispatch a readyState event for LOADING to match the normal local file handling.
&gt; +    if (m_url.isLocalFile()) {

Should this say &quot;file: URLs&quot; instead of local files? For one thing, these can be directories, and they can be on remote server volumes that are mounted locally. And yes, I&apos;m unhappy about the existing method name, too.

I&apos;ve performed some testing now, and I wonder why this is limited to local files at all. I&apos;ve tried loading an http resource from a non-existent domain (to make sure I get a network error, not a 404 response), and both Safari 3 and Firefox 3 dispatched readystate events for states 2 and 4 - and ToT WebKit didn&apos;t. Unless I did something wrong in my test, this fix should not be limited to local files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110736</commentid>
    <comment_count>10</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-02-24 07:40:31 -0800</bug_when>
    <thetext>(I didn&apos;t test IE or check what the spec says in HTTP case though).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110851</commentid>
    <comment_count>11</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2009-02-24 16:05:44 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 27895 [review])
&gt; Test results don&apos;t match expectations here: readyState 4 is only logged once.
&gt; Also, I&apos;m pretty sure that interleaving of the two requests&apos; results is timing
&gt; dependent and unreliable. You need waitUntilDone()/notifyDone(), and it would
&gt; be better to start the second request once the first is done (or to normalize
&gt; the results in some other way, e.g. by logging into separate DIVs).

My apologies, I was working on another test case that used synchronous XHR and I have mixed the two in my mind: for me we were doing sync loads (which would have worked nicely). I should have checked the new output instead of blindly seeing the two requests been done and assuming it was working.
Of course, this test needs to serialize the 2 requests and the waitUntilDone()/notifyFinished() as you were pointing out.

&gt; &gt; +    // For compatibility we fake a correct load for local files in error (see bug 22475).
&gt; &gt; +    // We do not dispatch a readyState event for LOADING to match the normal local file handling.
&gt; &gt; +    if (m_url.isLocalFile()) {
&gt; 
&gt; Should this say &quot;file: URLs&quot; instead of local files? For one thing, these can
&gt; be directories, and they can be on remote server volumes that are mounted
&gt; locally. And yes, I&apos;m unhappy about the existing method name, too.

Even though I understand your point and agree with your rationale to some extend (such distinctions are done at the OS level and we cannot say where a file in the filesystem hierarchy is located), I think it is better to stick with the current naming scheme.

&gt; I&apos;ve performed some testing now, and I wonder why this is limited to local
&gt; files at all. I&apos;ve tried loading an http resource from a non-existent domain
&gt; (to make sure I get a network error, not a 404 response), and both Safari 3 and
&gt; Firefox 3 dispatched readystate events for states 2 and 4 - and ToT WebKit
&gt; didn&apos;t. Unless I did something wrong in my test, this fix should not be limited
&gt; to local files.

I think you should have a look at http://trac.webkit.org/browser/trunk/WebCore/xml/XMLHttpRequest.cpp#L925. The XHR says that we should go from OPENED(1) to DONE(4) directly without dispatching HEADERS_RECEIVED(2) but we are not following it to match Firefox. If FF has changed how it handles network errors, then it would be better to solve this in a separate bug.
I will test it too and file a bug if needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110914</commentid>
    <comment_count>12</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-02-24 23:12:43 -0800</bug_when>
    <thetext>&gt; I think it is better to stick with the current naming scheme.

OK, but please fix the comment.

&gt; I will test it too and file a bug if needed.

I&apos;m not convinced that these cases should be handled in separate bugs. If other browsers handle local and non-local errors identically, introducing code that makes them different in WebKit looks like a bad move to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110932</commentid>
    <comment_count>13</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-02-25 03:17:46 -0800</bug_when>
    <thetext>Please note that some of this code is also touched in bug 24089, I&apos;m worried that these patches may clash in subtle or not so subtle ways.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112697</commentid>
    <comment_count>14</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2009-03-06 22:02:55 -0800</bug_when>
    <thetext>&gt; I&apos;ve performed some testing now, and I wonder why this is limited to local
&gt; files at all. I&apos;ve tried loading an http resource from a non-existent domain
&gt; (to make sure I get a network error, not a 404 response), and both Safari 3 and
&gt; Firefox 3 dispatched readystate events for states 2 and 4 - and ToT WebKit
&gt; didn&apos;t. Unless I did something wrong in my test, this fix should not be limited
&gt; to local files.

I have done some more testing but I have different results:

- FF 3 and Safari 3 raised a cross-site exception on open() and did not dispatch any readyState event when requesting a non-existent HTTP domain both from file:// or HTTP page
- Opera raised it on send() and dispatched a readyState event for OPEN and HEADERS_RECEIVED
- ToT matches Safari 3 except for the file:// page where it continues the load as if no error happened.


&gt;&gt; I think it is better to stick with the current naming scheme.

&gt; OK, but please fix the comment.

What I meant what that modifying just the comments while leaving the rest untouched will lead to a discrepancy in the naming scheme (the method is still named isLocalFile). As you seem to really what this change, I will make the changes in the XHR class.

&gt; &gt; I will test it too and file a bug if needed.

&gt; I&apos;m not convinced that these cases should be handled in separate bugs. If other
&gt; browsers handle local and non-local errors identically, introducing code that
&gt; makes them different in WebKit looks like a bad move to me.

If they are treated the same, I agree that it should be done in this bug. However during my testing, I would say that they are usually treated differently. That&apos;s why I wanted to keep this change as simple as necessary to avoid further regressions and move the other (related) changes to another bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112703</commentid>
    <comment_count>15</comment_count>
      <attachid>28385</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-03-07 01:16:36 -0800</bug_when>
    <thetext>Created attachment 28385
test for non-existent domain (run from local file)

(In reply to comment #14)
&gt; I have done some more testing but I have different results:

Attaching my test.

&gt; If they are treated the same, I agree that it should be done in this bug.
&gt; However during my testing, I would say that they are usually treated
&gt; differently.

OK, I&apos;m glad we don&apos;t disagree here.

&gt; What I meant what that modifying just the comments while leaving the rest
&gt; untouched will lead to a discrepancy in the naming scheme (the method is still
&gt; named isLocalFile). As you seem to really what this change, I will make the
&gt; changes in the XHR class.

I&apos;m not sure if we are on the same page here. isLocalFile() is not a perfectly descriptive name, but stuffing all fine details in its name seems impractical to me. Since fine details turn out to be so important in XHR case, I think that we should document what we expect from this function precisely.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112724</commentid>
    <comment_count>16</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2009-03-07 11:17:27 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; Created an attachment (id=28385) [review]
&gt; test for non-existent domain (run from local file)

Now I see what is different with my test. You are asking Gecko to authorize XMLHttpRequest from file:// to HTTP. If you forget that, it will reject the request without even looking at the domain.

Looking at the result for Safari 3, it seems that we have changed how we handle this case: we used to match FF by raising an exception but now we continue the load and call the error handler. I remember seeing such a change but I could not pinpoint it. Do you remember what the rationale was?

&gt; &gt; What I meant what that modifying just the comments while leaving the rest
&gt; &gt; untouched will lead to a discrepancy in the naming scheme (the method is still
&gt; &gt; named isLocalFile). As you seem to really what this change, I will make the
&gt; &gt; changes in the XHR class.
&gt; 
&gt; I&apos;m not sure if we are on the same page here. isLocalFile() is not a perfectly
&gt; descriptive name, but stuffing all fine details in its name seems impractical
&gt; to me. Since fine details turn out to be so important in XHR case, I think that
&gt; we should document what we expect from this function precisely.

That&apos;s what I understood. What I find strange is changing only a part of the issue, that is not changing the name (to something like isFileURI()) and just refining our expectation on XHR (not even in the KURL class). If this distinction is important for XHR, it may be of interest to other part of the engine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>113333</commentid>
    <comment_count>17</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2009-03-12 01:37:31 -0700</bug_when>
    <thetext>We have discussed this a bit further off the bug. I have summed up our conclusions along with the original comment.

&gt; Looking at the result for Safari 3, it seems that we have changed how we handle
&gt; this case: we used to match FF by raising an exception but now we continue the
&gt; load and call the error handler. I remember seeing such a change but I could
&gt; not pinpoint it. Do you remember what the rationale was?

file:// URL always had universal access and I was just thinking of some old related change which is irrelevant here.
Also my results were wrong but we could not find the cause (lI was likely confused by some results). I have tested again and now I agree with Alexey.
It means that the change should not be limited to file:// URL only. Leaving the bug summary as-is but I will add a comment in the ChangeLog to cover this discussion and explain the broader fix.

&gt; That&apos;s what I understood. What I find strange is changing only a part of the
&gt; issue, that is not changing the name (to something like isFileURI()) and just
&gt; refining our expectation on XHR (not even in the KURL class). If this
&gt; distinction is important for XHR, it may be of interest to other part of the
&gt; engine.

About this part, we have decided to change the name to isFileURL() as it is clearer (also URI would sound strange in KURL and URI is not used much inside WebCore). I have filed bug 24543 to handle this renaming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114727</commentid>
    <comment_count>18</comment_count>
      <attachid>28839</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2009-03-22 15:01:30 -0700</bug_when>
    <thetext>Created attachment 28839
Updated version: Made the test more reliable, fake the load for file:// URL to cover all cases</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114755</commentid>
    <comment_count>19</comment_count>
      <attachid>28839</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-03-23 00:34:12 -0700</bug_when>
    <thetext>Comment on attachment 28839
Updated version: Made the test more reliable, fake the load for file:// URL to cover all cases

&gt; +    // For compatibility we fake a correct load when the XHR is issued from a file:// URL in error (see bug 22475).
&gt; +    if (scriptExecutionContext()-&gt;url().isLocalFile()) {

I don&apos;t think that this is right. We should do this when the request is sent from an HTTP URL, too. In Safari 3, this immediately raised a permission denied exception, but now we implement cross-origin XHR, so it should work just like in Firefox 3.1 beta.

I tested, and a request from http to a non-existent domain also results in reaching the final state in Firefox.

Also, note this comment in genericError():

    // The spec says we should &quot;Synchronously switch the state to DONE.&quot; and then &quot;Synchronously dispatch a readystatechange event on the object&quot;
    // but this does not match Firefox.

What exactly about this behavior doesn&apos;t match Firefox? Maybe the comment is wrong, and the new code should be in genericError(), and not in didFail()?

+                xhr.open(&quot;GET&quot;, &quot;http://non.existent.domain.in.the.web.org&quot;, true);

I usually send requests to 127.0.0.1:7 to simulate a host that doesn&apos;t have an HTTP server in such tests - this avoids the need to hit the network. Another way to simulate a network error is via a redirect to self.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>115677</commentid>
    <comment_count>20</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-03-28 09:54:46 -0700</bug_when>
    <thetext>See also: bug 24886.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116155</commentid>
    <comment_count>21</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-04-01 03:51:57 -0700</bug_when>
    <thetext>*** Bug 24886 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116156</commentid>
    <comment_count>22</comment_count>
      <attachid>29157</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-04-01 04:28:09 -0700</bug_when>
    <thetext>Created attachment 29157
proposed fix

This patch fixes both issues without special casing file:// requests. I didn&apos;t find any regressions in changed test results.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116181</commentid>
    <comment_count>23</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-04-01 10:19:29 -0700</bug_when>
    <thetext>Thx! One minor issue:
  sp in WebCore/ChangeLog: &quot;readyststechange&quot;-&gt;&quot;readystatechange&quot;

fwiw, other than that it looks good to me.  
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116214</commentid>
    <comment_count>24</comment_count>
      <attachid>29157</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-04-01 13:39:08 -0700</bug_when>
    <thetext>Comment on attachment 29157
proposed fix

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116256</commentid>
    <comment_count>25</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-04-02 00:17:03 -0700</bug_when>
    <thetext>Committed &lt;http://trac.webkit.org/changeset/42164&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>25463</attachid>
            <date>2008-11-24 17:40:14 -0800</date>
            <delta_ts>2008-11-24 17:40:14 -0800</delta_ts>
            <desc>Reduction</desc>
            <filename>ax.html</filename>
            <type>text/html</type>
            <size>178</size>
            <attacher name="Francisco Tolmasky">tolmasky</attacher>
            
              <data encoding="base64">PHNjcmlwdD4KCnggPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKCngub25yZWFkeXN0YXRlY2hhbmdl
ID0gZnVuY3Rpb24oKQp7CmFsZXJ0KHgucmVhZHlTdGF0ZSk7Cn0KCnRyeXsKeC5vcGVuKCJHRVQi
LCAiYXNkZiIsIDEpOwp4LnNlbmQoIiIpOwp9Y2F0Y2goZSkKewphbGVydCgiLi4uIik7Cn0KCjwv
c2NyaXB0Pg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27869</attachid>
            <date>2009-02-22 13:57:34 -0800</date>
            <delta_ts>2009-02-23 14:57:44 -0800</delta_ts>
            <desc>Proposed fix: fake the old behaviour when didFail is called</desc>
            <filename>bug22475-asyncXHR-localfile.diff</filename>
            <type>text/plain</type>
            <size>5134</size>
            <attacher name="Julien Chaffraix">jchaffraix</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MTEyNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTkgQEAKKzIwMDktMDItMjIgIEp1bGllbiBDaGFmZnJhaXggIDxqY2hhZmZyYWl4
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQnVnIDIyNDc1OiBSRUdSRVNTSU9OOiBBc3luYyBYTUxIdHRwUmVxdWVzdCBuZXZlciBm
aW5pc2hlcyBvbiBub25leGlzdGVudCBmaWxlcyBhbnltb3JlCisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS82NDAwNzIyPgorCisgICAgICAgIFNhZmFyaSAyIGRpZCBub3QgbWFrZSBhIGRpZmZlcmVu
Y2UgYmV0d2VlbiBsb2FkaW5nIG5vbmV4aXN0ZW50IG9yIGV4aXN0ZW50IGZpbGVzIGZyb20gYW4g
WEhSIHBvaW50IG9mIHZpZXcuCisgICAgICAgIFRvIGtlZXAgdGhlIGNvbXBhdGliaWxpdHksIHdl
IGp1c3QgbWF0Y2ggdGhpcyBiZWhhdmlvdXIgYW5kIGZha2UgdGhlIGxvYWRpbmcgd2hlbiBkaWRG
YWlsIGlzIGNhbGxlZCBieSBkaXNwYXRjaGluZworICAgICAgICB0aGUgcmVhZHlTdGF0ZSBldmVu
dHMuCisKKyAgICAgICAgVGVzdDogZmFzdC9sb2FkZXIveG1saHR0cHJlcXVlc3Qtbm9uZXhpc3Rl
bnQtZmlsZS5odG1sCisKKyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OmRpZEZhaWwpOgorCiAyMDA5LTAyLTIxICBIaXJv
bm9yaSBCb25vICA8aGJvbm9AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFs
ZXhleSBQcm9za3VyeWFrb3YuCkluZGV4OiBXZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCShyZXZpc2lvbiA0
MTEyNCkKKysrIFdlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJF
dmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiRmlsZS5oIgorI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIK
ICNpbmNsdWRlICJIVFRQUGFyc2Vycy5oIgogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJL
VVJMSGFzaC5oIgpAQCAtMTE2Niw2ICsxMTY3LDE0IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRp
ZEZhaWwoY29uc3QgUmVzb3UKICAgICB9CiAKICAgICBuZXR3b3JrRXJyb3IoKTsKKworICAgIC8v
IEZvciBjb21wYXRpYmlsaXR5IHdlIGZha2UgYSBjb3JyZWN0IGxvYWQgZm9yIG5vbmV4aXN0ZW50
IGxvY2FsIGZpbGVzIChzZWUgYnVnIDIyNDc1KS4KKyAgICAvLyBXZSBkbyBub3QgZGlzcGF0Y2gg
YSByZWFkeVN0YXRlIGV2ZW50IGZvciBMT0FESU5HIHRvIG1hdGNoIHRoZSBub3JtYWwgbG9jYWwg
ZmlsZSBoYW5kbGluZy4KKyAgICBpZiAobV91cmwuaXNMb2NhbEZpbGUoKSAmJiAhZmlsZUV4aXN0
cyhtX3VybC5zdHJpbmcoKSkpIHsKKyAgICAgICAgQVNTRVJUKHJlYWR5U3RhdGUoKSA9PSBPUEVO
RUQpOworICAgICAgICBjaGFuZ2VTdGF0ZShIRUFERVJTX1JFQ0VJVkVEKTsKKyAgICAgICAgY2hh
bmdlU3RhdGUoRE9ORSk7CisgICAgfQogfQogCiB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpkaWRGYWls
V2lsbFNlbmRSZXF1ZXN0Q2hlY2soKQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNDExMjUpCisrKyBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAwOS0w
Mi0yMiAgSnVsaWVuIENoYWZmcmFpeCAgPGpjaGFmZnJhaXhAd2Via2l0Lm9yZz4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCdWcgMjI0NzU6IFJFR1JF
U1NJT046IEFzeW5jIFhNTEh0dHBSZXF1ZXN0IG5ldmVyIGZpbmlzaGVzIG9uIG5vbmV4aXN0ZW50
IGZpbGVzIGFueW1vcmUKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzY0MDA3MjI+CisKKyAgICAg
ICAgKiBmYXN0L2xvYWRlci94bWxodHRwcmVxdWVzdC1ub25leGlzdGVudC1maWxlLWV4cGVjdGVk
LnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9sb2FkZXIveG1saHR0cHJlcXVlc3Qtbm9uZXhp
c3RlbnQtZmlsZS5odG1sOiBBZGRlZC4KKwogMjAwOS0wMi0yMSAgSGlyb25vcmkgQm9ubyAgPGhi
b25vQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbGV4ZXkgUHJvc2t1cnlh
a292LgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIveG1saHR0cHJlcXVlc3Qtbm9uZXhp
c3RlbnQtZmlsZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9s
b2FkZXIveG1saHR0cHJlcXVlc3Qtbm9uZXhpc3RlbnQtZmlsZS1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2xvYWRlci94bWxodHRwcmVxdWVzdC1ub25leGlz
dGVudC1maWxlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5IEBACitCdWcg
MjI0NzU6IFJFR1JFU1NJT046IEFzeW5jIFhNTEh0dHBSZXF1ZXN0IG5ldmVyIGZpbmlzaGVzIG9u
IG5vbmV4aXN0ZW50IGZpbGVzIGFueW1vcmUKKworRm9yIHRoaXMgdGVzdCB0byBwYXNzLCB0aGUg
cmVhZHlTdGF0ZSBoYW5kbGVyIHNob3VsZCBiZSBjYWxsZWQgZm9yIHJlYWR5U3RhdGUgPSAxLCAy
IGFuZCA0LiBUaGUgZXJyb3IgaGFuZGxlciBzaG91bGQgYWxzbyBiZSBjYWxsZWQgb25jZS4KKwor
UmVhZHlTdGF0ZSBoYW5kbGVyOiByZWFkeVN0YXRlID0gMQorRXJyb3IgaGFuZGxlcjogcmVhZHlT
dGF0ZSA9IDEKK1JlYWR5U3RhdGUgaGFuZGxlcjogcmVhZHlTdGF0ZSA9IDIKK1JlYWR5U3RhdGUg
aGFuZGxlcjogcmVhZHlTdGF0ZSA9IDQKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIv
eG1saHR0cHJlcXVlc3Qtbm9uZXhpc3RlbnQtZmlsZS5odG1sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2Zhc3QvbG9hZGVyL3htbGh0dHByZXF1ZXN0LW5vbmV4aXN0ZW50LWZpbGUuaHRtbAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3htbGh0dHByZXF1ZXN0LW5v
bmV4aXN0ZW50LWZpbGUuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0OCBAQAorPCFET0NU
WVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIK
KyAgICAgICAgICAgICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2Uu
ZHRkIj4KKzxodG1sPgorPGhlYWQ+CisgICAgPHNjcmlwdD4KKyAgICAgICAgdmFyIHhocjsKKwor
ICAgICAgICBmdW5jdGlvbiBsb2cobWVzc2FnZSkKKyAgICAgICAgeworICAgICAgICAgICAgdmFy
IGNvbnNvbGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpOworICAgICAgICAg
ICAgY29uc29sZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShtZXNzYWdlKSk7
CisgICAgICAgICAgICBjb25zb2xlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
J2JyJykpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gZXJyb3JIYW5kbGVyKCkKKyAg
ICAgICAgeworICAgICAgICAgICAgbG9nKCJFcnJvciBoYW5kbGVyOiByZWFkeVN0YXRlID0gIiAr
IHhoci5yZWFkeVN0YXRlKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHJlYWR5U3Rh
dGVIYW5kbGVyKCkKKyAgICAgICAgeworICAgICAgICAgICAgbG9nKCJSZWFkeVN0YXRlIGhhbmRs
ZXI6IHJlYWR5U3RhdGUgPSAiICsgeGhyLnJlYWR5U3RhdGUpOworICAgICAgICB9CisKKyAgICAg
ICAgZnVuY3Rpb24gdGVzdCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
ZHVtcEFzVGV4dCgpOworCisgICAgICAgICAgICB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsK
KyAgICAgICAgICAgIHhoci5vbmVycm9yID0gZXJyb3JIYW5kbGVyOworICAgICAgICAgICAgeGhy
Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IHJlYWR5U3RhdGVIYW5kbGVyOworCisgICAgICAgICAgICB0
cnkgeworICAgICAgICAgICAgICAgIHhoci5vcGVuKCJHRVQiLCAibm9uLWV4aXN0ZW50Lmh0bWwi
LCB0cnVlKTsKKyAgICAgICAgICAgICAgICB4aHIuc2VuZCgiIik7CisgICAgICAgICAgICB9IGNh
dGNoKGUpIHsKKyAgICAgICAgICAgICAgICBsb2coIkV4Y2VwdGlvbjogIiArIGUubWVzc2FnZSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgPC9zY3JpcHQ+CisgICAgPC9oZWFk
PgorICAgIDxib2R5IG9ubG9hZD0idGVzdCgpIj4KKyAgICAgICAgPHA+IEJ1ZyA8YSBocmVmPSJo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI0NzUiPjIyNDc1PC9hPjog
UkVHUkVTU0lPTjogQXN5bmMgWE1MSHR0cFJlcXVlc3QgbmV2ZXIgZmluaXNoZXMgb24gbm9uZXhp
c3RlbnQgZmlsZXMgYW55bW9yZSA8L3A+CisgICAgICAgIDxwPiBGb3IgdGhpcyB0ZXN0IHRvIHBh
c3MsIHRoZSByZWFkeVN0YXRlIGhhbmRsZXIgc2hvdWxkIGJlIGNhbGxlZCBmb3IgcmVhZHlTdGF0
ZSA9IDEsIDIgYW5kIDQuIFRoZSBlcnJvciBoYW5kbGVyIHNob3VsZCBhbHNvIGJlIGNhbGxlZCBv
bmNlLiA8L3A+CisgICAgICAgIDxkaXYgaWQ9ImNvbnNvbGUiLz4KKyAgICA8L2JvZHk+Cis8L2h0
bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27895</attachid>
            <date>2009-02-23 14:57:44 -0800</date>
            <delta_ts>2009-03-22 15:01:30 -0700</delta_ts>
            <desc>New version updated with ap&apos;s comments</desc>
            <filename>bug22475-asyncXHR-localfile-updated.diff</filename>
            <type>text/plain</type>
            <size>5690</size>
            <attacher name="Julien Chaffraix">jchaffraix</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MTE0OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTkgQEAKKzIwMDktMDItMjMgIEp1bGllbiBDaGFmZnJhaXggIDxqY2hhZmZyYWl4
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQnVnIDIyNDc1OiBSRUdSRVNTSU9OOiBBc3luYyBYTUxIdHRwUmVxdWVzdCBuZXZlciBm
aW5pc2hlcyBvbiBub25leGlzdGVudCBmaWxlcyBhbnltb3JlCisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS82NDAwNzIyPgorCisgICAgICAgIFNhZmFyaSAzIGRpZCBub3QgbWFrZSBhIGRpZmZlcmVu
Y2UgYmV0d2VlbiBsb2FkaW5nIG5vbmV4aXN0ZW50IG9yIGV4aXN0ZW50IGZpbGVzIGZyb20gYW4g
WEhSIHBvaW50IG9mIHZpZXcuCisgICAgICAgIFRvIGtlZXAgdGhlIGNvbXBhdGliaWxpdHksIHdl
IGp1c3QgbWF0Y2ggdGhpcyBiZWhhdmlvdXIgYW5kIGZha2UgdGhlIGxvYWRpbmcsIHdoZW4gZGlk
RmFpbCBpcyBjYWxsZWQsIGJ5IGRpc3BhdGNoaW5nCisgICAgICAgIHRoZSByZWFkeVN0YXRlIGV2
ZW50cy4KKworICAgICAgICBUZXN0OiBmYXN0L3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0
LW5vbmV4aXN0ZW50LWZpbGUuaHRtbAorCisgICAgICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjpkaWRGYWlsKToKKwogMjAwOS0w
Mi0yMyAgVGhpYWdvIE1hY2llaXJhICA8dGhpYWdvLm1hY2llaXJhQG5va2lhLmNvbT4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBTaW1vbiBIYXVzbWFubi4KSW5kZXg6IFdlYkNvcmUveG1sL1hNTEh0
dHBSZXF1ZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5j
cHAJKHJldmlzaW9uIDQxMTI0KQorKysgV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTY2LDYgKzExNjYsMTQgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6
ZGlkRmFpbChjb25zdCBSZXNvdQogICAgIH0KIAogICAgIG5ldHdvcmtFcnJvcigpOworCisgICAg
Ly8gRm9yIGNvbXBhdGliaWxpdHkgd2UgZmFrZSBhIGNvcnJlY3QgbG9hZCBmb3IgbG9jYWwgZmls
ZXMgaW4gZXJyb3IgKHNlZSBidWcgMjI0NzUpLgorICAgIC8vIFdlIGRvIG5vdCBkaXNwYXRjaCBh
IHJlYWR5U3RhdGUgZXZlbnQgZm9yIExPQURJTkcgdG8gbWF0Y2ggdGhlIG5vcm1hbCBsb2NhbCBm
aWxlIGhhbmRsaW5nLgorICAgIGlmIChtX3VybC5pc0xvY2FsRmlsZSgpKSB7CisgICAgICAgIEFT
U0VSVChyZWFkeVN0YXRlKCkgPT0gT1BFTkVEKTsKKyAgICAgICAgY2hhbmdlU3RhdGUoSEVBREVS
U19SRUNFSVZFRCk7CisgICAgICAgIGNoYW5nZVN0YXRlKERPTkUpOworICAgIH0KIH0KIAogdm9p
ZCBYTUxIdHRwUmVxdWVzdDo6ZGlkRmFpbFdpbGxTZW5kUmVxdWVzdENoZWNrKCkKSW5kZXg6IExh
eW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDQxMTQ5KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMTUgQEAKKzIwMDktMDItMjMgIEp1bGllbiBDaGFmZnJhaXggIDxqY2hhZmZy
YWl4QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQnVnIDIyNDc1OiBSRUdSRVNTSU9OOiBBc3luYyBYTUxIdHRwUmVxdWVzdCBuZXZl
ciBmaW5pc2hlcyBvbiBub25leGlzdGVudCBmaWxlcyBhbnltb3JlCisgICAgICAgIDxyZGFyOi8v
cHJvYmxlbS82NDAwNzIyPgorCisgICAgICAgICogZmFzdC94bWxodHRwcmVxdWVzdDogQWRkZWQu
CisgICAgICAgICogZmFzdC94bWxodHRwcmVxdWVzdC9yZXNvdXJjZXM6IEFkZGVkLgorICAgICAg
ICAqIGZhc3QveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3Qtbm9uZXhpc3RlbnQtZmlsZS1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QveG1saHR0cHJlcXVlc3QveG1saHR0
cHJlcXVlc3Qtbm9uZXhpc3RlbnQtZmlsZS5odG1sOiBBZGRlZC4KKwogMjAwOS0wMi0yMyAgR3Vz
dGF2byBOb3JvbmhhIFNpbHZhICA8Z25zQGdub21lLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBBbGV4ZXkgUHJvc2t1cnlha292LgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC94bWxodHRwcmVx
dWVzdC94bWxodHRwcmVxdWVzdC1ub25leGlzdGVudC1maWxlLWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LW5v
bmV4aXN0ZW50LWZpbGUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
ZmFzdC94bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVzdC1ub25leGlzdGVudC1maWxlLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNSBAQAorQnVnIDIyNDc1OiBSRUdSRVNT
SU9OOiBBc3luYyBYTUxIdHRwUmVxdWVzdCBuZXZlciBmaW5pc2hlcyBvbiBub25leGlzdGVudCBm
aWxlcyBhbnltb3JlCisKK0ZvciB0aGlzIHRlc3QgdG8gcGFzcywgdGhlcmUgc2hvdWxkIGJlIDIg
WEhSIGRvbmU6IG9uZSB0byBhIG5vbmV4aXN0ZW50IGZpbGUsIHRoZSBvdGhlciB0byBhIGRpcmVj
dG9yeS4gSW4gYm90aCBjYXNlcywgdGhlIHJlYWR5U3RhdGUgaGFuZGxlciBzaG91bGQgYmUgY2Fs
bGVkIGZvciByZWFkeVN0YXRlID0gMSwgMiBhbmQgNC4gVGhlIGVycm9yIGhhbmRsZXIgc2hvdWxk
IGFsc28gYmUgY2FsbGVkIG9uY2UuCisKK0RvaW5nIGFuIFhIUiB0byBhIG5vbmV4aXN0ZW50Zmls
ZS4KK1JlYWR5U3RhdGUgaGFuZGxlcjogcmVhZHlTdGF0ZSA9IDEKK0RvaW5nIGFuIFhIUiB0byBh
IGRpcmVjdG9yeS4KK1JlYWR5U3RhdGUgaGFuZGxlcjogcmVhZHlTdGF0ZSA9IDEKK0Vycm9yIGhh
bmRsZXI6IHJlYWR5U3RhdGUgPSAxCitSZWFkeVN0YXRlIGhhbmRsZXI6IHJlYWR5U3RhdGUgPSAx
CitSZWFkeVN0YXRlIGhhbmRsZXI6IHJlYWR5U3RhdGUgPSAxCitFcnJvciBoYW5kbGVyOiByZWFk
eVN0YXRlID0gMQorUmVhZHlTdGF0ZSBoYW5kbGVyOiByZWFkeVN0YXRlID0gMgorUmVhZHlTdGF0
ZSBoYW5kbGVyOiByZWFkeVN0YXRlID0gNAorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3htbGh0
dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LW5vbmV4aXN0ZW50LWZpbGUuaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LW5vbmV4
aXN0ZW50LWZpbGUuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QveG1saHR0
cHJlcXVlc3QveG1saHR0cHJlcXVlc3Qtbm9uZXhpc3RlbnQtZmlsZS5odG1sCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDU1IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhU
TUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIgorICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8v
d3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorPGh0bWw+Cis8aGVhZD4KKyAgICA8c2Ny
aXB0PgorICAgICAgICBmdW5jdGlvbiBsb2cobWVzc2FnZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgdmFyIGNvbnNvbGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpOworICAg
ICAgICAgICAgY29uc29sZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShtZXNz
YWdlKSk7CisgICAgICAgICAgICBjb25zb2xlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoJ2JyJykpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gZXJyb3JIYW5kbGVy
KCkKKyAgICAgICAgeworICAgICAgICAgICAgbG9nKCJFcnJvciBoYW5kbGVyOiByZWFkeVN0YXRl
ID0gIiArIHhoci5yZWFkeVN0YXRlKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHJl
YWR5U3RhdGVIYW5kbGVyKCkKKyAgICAgICAgeworICAgICAgICAgICAgbG9nKCJSZWFkeVN0YXRl
IGhhbmRsZXI6IHJlYWR5U3RhdGUgPSAiICsgeGhyLnJlYWR5U3RhdGUpOworICAgICAgICB9CisK
KyAgICAgICAgZnVuY3Rpb24gdGVzdFhIUihmaWxlKQorICAgICAgICB7CisgICAgICAgICAgICB4
aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAgICAgICAgICAgIHhoci5vbmVycm9yID0gZXJy
b3JIYW5kbGVyOworICAgICAgICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IHJlYWR5U3Rh
dGVIYW5kbGVyOworCisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHhoci5vcGVu
KCJHRVQiLCBmaWxlLCB0cnVlKTsKKyAgICAgICAgICAgICAgICB4aHIuc2VuZCgiIik7CisgICAg
ICAgICAgICB9IGNhdGNoKGUpIHsKKyAgICAgICAgICAgICAgICBsb2coIkV4Y2VwdGlvbjogIiAr
IGUubWVzc2FnZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlv
biB0ZXN0KCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29u
dHJvbGxlcikKKyAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0
KCk7CisKKyAgICAgICAgICAgIGxvZygiRG9pbmcgYW4gWEhSIHRvIGEgbm9uZXhpc3RlbnRmaWxl
LiIpOworICAgICAgICAgICAgdGVzdFhIUigibm9uZXhpc3RlbnQuaHRtbCIpOworCisgICAgICAg
ICAgICBsb2coIkRvaW5nIGFuIFhIUiB0byBhIGRpcmVjdG9yeS4iKTsKKyAgICAgICAgICAgIHRl
c3RYSFIoInJlc291cmNlcyIpOworICAgICAgICB9CisgICAgICAgIDwvc2NyaXB0PgorICAgIDwv
aGVhZD4KKyAgICA8Ym9keSBvbmxvYWQ9InRlc3QoKSI+CisgICAgICAgIDxwPiBCdWcgPGEgaHJl
Zj0iaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNDc1Ij4yMjQ3NTwv
YT46IFJFR1JFU1NJT046IEFzeW5jIFhNTEh0dHBSZXF1ZXN0IG5ldmVyIGZpbmlzaGVzIG9uIG5v
bmV4aXN0ZW50IGZpbGVzIGFueW1vcmUgPC9wPgorICAgICAgICA8cD4gRm9yIHRoaXMgdGVzdCB0
byBwYXNzLCB0aGVyZSBzaG91bGQgYmUgMiBYSFIgZG9uZTogb25lIHRvIGEgbm9uZXhpc3RlbnQg
ZmlsZSwgdGhlIG90aGVyIHRvIGEgZGlyZWN0b3J5LiBJbiBib3RoIGNhc2VzLCB0aGUgcmVhZHlT
dGF0ZSBoYW5kbGVyIHNob3VsZCBiZSBjYWxsZWQgZm9yIHJlYWR5U3RhdGUgPSAxLCAyIGFuZCA0
LiBUaGUgZXJyb3IgaGFuZGxlciBzaG91bGQgYWxzbyBiZSBjYWxsZWQgb25jZS4gPC9wPgorICAg
ICAgICA8ZGl2IGlkPSJjb25zb2xlIi8+CisgICAgPC9ib2R5PgorPC9odG1sPgo=
</data>
<flag name="review"
          id="13579"
          type_id="1"
          status="-"
          setter="ap"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>28385</attachid>
            <date>2009-03-07 01:16:36 -0800</date>
            <delta_ts>2009-03-07 01:16:36 -0800</delta_ts>
            <desc>test for non-existent domain (run from local file)</desc>
            <filename>xhr-missing-domain.html</filename>
            <type>application/octet-stream</type>
            <size>526</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">PHByZT48L3ByZT4KPHNjcmlwdD4KLy8gRmlyZWZveC1vbmx5LCBTYWZhcmkgYWx3YXlzIGdyYW50
cyB1bml2ZXJzYWwgYWNjZXNzIHRvIGZpbGU6Ly8gZG9jdW1lbnRzLgp0cnkgeyBuZXRzY2FwZS5z
ZWN1cml0eS5Qcml2aWxlZ2VNYW5hZ2VyLmVuYWJsZVByaXZpbGVnZSgiVW5pdmVyc2FsQnJvd3Nl
clJlYWQiKTsgfSBjYXRjaCAoZXgpIHsgfQoKZnVuY3Rpb24gb25SZWFkeVN0YXRlKCkKewogICAg
ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInByZSIpWzBdLmlubmVySFRNTCArPSByZXEu
cmVhZHlTdGF0ZSArICJcbiI7Cn0KCnRyeSB7CiAgICB2YXIgcmVxID0gbmV3IFhNTEh0dHBSZXF1
ZXN0OwogICAgcmVxLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IG9uUmVhZHlTdGF0ZTsKICAgIHJlcS5v
cGVuKCJHRVQiLCAiaHR0cDovL3J0ZmZ2aGJqbmttbGtuamJoZ2NmY2d2aGJqbnFkcWQuY29tLyIs
IHRydWUpOwogICAgcmVxLnNlbmQobnVsbCk7Cn0gY2F0Y2ggKGV4KSB7CiAgICBhbGVydChleCk7
Cn0KPC9zY3JpcHQ+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28839</attachid>
            <date>2009-03-22 15:01:30 -0700</date>
            <delta_ts>2009-03-23 00:34:12 -0700</delta_ts>
            <desc>Updated version: Made the test more reliable, fake the load for file:// URL to cover all cases</desc>
            <filename>bug22475-asyncXHR-localfile-updated2.diff</filename>
            <type>text/plain</type>
            <size>8833</size>
            <attacher name="Julien Chaffraix">jchaffraix</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MTkwMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjMgQEAKKzIwMDktMDMtMjIgIEp1bGllbiBDaGFmZnJhaXggIDxqY2hhZmZyYWl4
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQnVnIDIyNDc1OiBSRUdSRVNTSU9OOiBBc3luYyBYTUxIdHRwUmVxdWVzdCBuZXZlciBm
aW5pc2hlcyBvbiBub25leGlzdGVudCBmaWxlcyBhbnltb3JlCisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS82NDAwNzIyPgorCisgICAgICAgIFNhZmFyaSAzIGRpZCBub3QgbWFrZSBhIGRpZmZlcmVu
Y2Ugd2hlbiBhbiBhc3luY2hyb25vdXMgbG9hZCBmYWlsZWQgZnJvbSBhIGZpbGU6Ly8gVVJMLgor
ICAgICAgICBUbyBrZWVwIHRoZSBjb21wYXRpYmlsaXR5LCB3ZSBqdXN0IG1hdGNoIHRoaXMgYmVo
YXZpb3VyIGFuZCBmYWtlIHRoZSBsb2FkaW5nLiBXaGVuIGRpZEZhaWwgaXMKKyAgICAgICAgY2Fs
bGVkLCB3ZSBjb250aW51ZSB0byBkaXNwYXRjaCB0aGUgcmVhZHlTdGF0ZSBldmVudHMgYXMgaWYg
dGhlIGxvYWQgaGFkIG5vdCBmYWlsZWQuCisKKyAgICAgICAgVGVzdDogZmFzdC94bWxodHRwcmVx
dWVzdC94bWxodHRwcmVxdWVzdC1ub25leGlzdGVudC1maWxlLmh0bWwKKworICAgICAgICAqIG1h
bnVhbC10ZXN0cy94bWxodHRwcmVxdWVzdC1ub25leGlzdGVudC1kb21haW4uaHRtbDogQWRkZWQu
CisgICAgICAgIFRoaXMgdGVzdCBpcyBtYW51YWwgYXMgRFJUIGRvZXMgbm90IG1hdGNoIFNhZmFy
aSBhbmQgZG9lcyBub3QKKyAgICAgICAgYWxsb3cgZmlsZTovLyBVUkwgdG8gbG9hZCBodHRwIFVS
TCAoZXZlbiBub24gZXhpc3RlbnQgZG9tYWluKS4KKworICAgICAgICAqIHhtbC9YTUxIdHRwUmVx
dWVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6ZGlkRmFpbCk6CisK
IDIwMDktMDMtMjIgIEtldmluIE9sbGl2aWVyICA8a2V2aW5vQHRoZW9sbGl2aWVycy5jb20+CiAK
ICAgICAgICAgd3hHVEsgYnVpbGQgZml4LiBBZGQgbWlzc2luZyBoZWFkZXIuCkluZGV4OiBXZWJD
b3JlL21hbnVhbC10ZXN0cy94bWxodHRwcmVxdWVzdC1ub25leGlzdGVudC1kb21haW4uaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL21hbnVhbC10ZXN0cy94bWxodHRwcmVxdWVzdC1ub25leGlz
dGVudC1kb21haW4uaHRtbAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvbWFudWFsLXRlc3RzL3ht
bGh0dHByZXF1ZXN0LW5vbmV4aXN0ZW50LWRvbWFpbi5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDQ0IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBU
cmFuc2l0aW9uYWwvL0VOIgorICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9y
Zy9UUi9odG1sNC9sb29zZS5kdGQiPgorPGh0bWw+Cis8aGVhZD4KKyAgICA8c2NyaXB0PgorICAg
ICAgICBmdW5jdGlvbiBsb2cobWVzc2FnZSkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIGNv
bnNvbGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpOworICAgICAgICAgICAg
Y29uc29sZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShtZXNzYWdlKSk7Cisg
ICAgICAgICAgICBjb25zb2xlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Jy
JykpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gZXJyb3JIYW5kbGVyKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgbG9nKCJFcnJvciBoYW5kbGVyOiByZWFkeVN0YXRlID0gIiArIHho
ci5yZWFkeVN0YXRlKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHJlYWR5U3RhdGVI
YW5kbGVyTm9uRXhpc3RlbnREb21haW4oKQorICAgICAgICB7CisgICAgICAgICAgICBsb2coIlJl
YWR5U3RhdGUgaGFuZGxlcjogcmVhZHlTdGF0ZSA9ICIgKyB4aHIucmVhZHlTdGF0ZSk7CisgICAg
ICAgIH0KKworICAgICAgICBmdW5jdGlvbiB0ZXN0WEhSTm9uRXhpc3RlbnREb21haW4oKQorICAg
ICAgICB7CisgICAgICAgICAgICBsb2coIkRvaW5nIGFuIFhIUiB0byBhIG5vbiBleGlzdGVudCBk
b21haW4uIik7CisgICAgICAgICAgICB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAgICAg
ICAgICAgIHhoci5vbmVycm9yID0gZXJyb3JIYW5kbGVyOworICAgICAgICAgICAgeGhyLm9ucmVh
ZHlzdGF0ZWNoYW5nZSA9IHJlYWR5U3RhdGVIYW5kbGVyTm9uRXhpc3RlbnREb21haW47CisKKyAg
ICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgeGhyLm9wZW4oIkdFVCIsICJodHRwOi8v
bm9uLmV4aXN0ZW50LmRvbWFpbi5pbi50aGUud2ViLm9yZyIsIHRydWUpOworICAgICAgICAgICAg
ICAgIHhoci5zZW5kKCIiKTsKKyAgICAgICAgICAgIH0gY2F0Y2goZSkgeworICAgICAgICAgICAg
ICAgIGxvZygiRXhjZXB0aW9uOiAiICsgZS5tZXNzYWdlKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICA8L3NjcmlwdD4KKyAgICA8L2hlYWQ+CisgICAgPGJvZHkgb25sb2FkPSJ0
ZXN0WEhSTm9uRXhpc3RlbnREb21haW4oKSI+CisgICAgICAgIDxwPiBCdWcgPGEgaHJlZj0iaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNDc1Ij4yMjQ3NTwvYT46IFJF
R1JFU1NJT046IEFzeW5jIFhNTEh0dHBSZXF1ZXN0IG5ldmVyIGZpbmlzaGVzIG9uIG5vbmV4aXN0
ZW50IGZpbGVzIGFueW1vcmUgPC9wPgorICAgICAgICA8cD4gVGhpcyB0ZXN0IGNoZWNrIHRoYXQg
YW4gWEhSIGRvbmUgZnJvbSBhIGZpbGU6Ly8gVVJMIHRvIGEgbm9uZXhpc3RlbnQgZG9tYWluIGRp
c3BhdGNoZXMgZXZlbnRzIGZvciByZWFkeVN0YXRlID0gMSwgMiBhbmQgNCBhcyBpZiB0aGUgbG9h
ZCB3b3JrZWQuIDwvcD4KKyAgICAgICAgPGRpdiBpZD0iY29uc29sZSIvPgorICAgIDwvYm9keT4K
KzwvaHRtbD4KSW5kZXg6IFdlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAJKHJldmlzaW9uIDQxOTAyKQorKysg
V2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NTgsNiAr
OTU4LDEzIEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRpZEZhaWwoY29uc3QgUmVzb3UKIAogICAg
IG1fZXhjZXB0aW9uQ29kZSA9IFhNTEh0dHBSZXF1ZXN0RXhjZXB0aW9uOjpORVRXT1JLX0VSUjsK
ICAgICBuZXR3b3JrRXJyb3IoKTsKKworICAgIC8vIEZvciBjb21wYXRpYmlsaXR5IHdlIGZha2Ug
YSBjb3JyZWN0IGxvYWQgd2hlbiB0aGUgWEhSIGlzIGlzc3VlZCBmcm9tIGEgZmlsZTovLyBVUkwg
aW4gZXJyb3IgKHNlZSBidWcgMjI0NzUpLgorICAgIGlmIChzY3JpcHRFeGVjdXRpb25Db250ZXh0
KCktPnVybCgpLmlzTG9jYWxGaWxlKCkpIHsKKyAgICAgICAgQVNTRVJUKHJlYWR5U3RhdGUoKSA9
PSBPUEVORUQpOworICAgICAgICBjaGFuZ2VTdGF0ZShIRUFERVJTX1JFQ0VJVkVEKTsKKyAgICAg
ICAgY2hhbmdlU3RhdGUoRE9ORSk7CisgICAgfQogfQogCiB2b2lkIFhNTEh0dHBSZXF1ZXN0Ojpk
aWRGYWlsUmVkaXJlY3RDaGVjaygpCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA0MTkwMikKKysrIExheW91
dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDA5LTAz
LTIyICBKdWxpZW4gQ2hhZmZyYWl4ICA8amNoYWZmcmFpeEB3ZWJraXQub3JnPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyAyMjQ3NTogUkVHUkVT
U0lPTjogQXN5bmMgWE1MSHR0cFJlcXVlc3QgbmV2ZXIgZmluaXNoZXMgb24gbm9uZXhpc3RlbnQg
ZmlsZXMgYW55bW9yZQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNjQwMDcyMj4KKworICAgICAg
ICAqIGZhc3QveG1saHR0cHJlcXVlc3Q6IEFkZGVkLgorICAgICAgICAqIGZhc3QveG1saHR0cHJl
cXVlc3QvcmVzb3VyY2VzOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3htbGh0dHByZXF1ZXN0L3ht
bGh0dHByZXF1ZXN0LW5vbmV4aXN0ZW50LWZpbGUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAg
ICAgKiBmYXN0L3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LW5vbmV4aXN0ZW50LWZpbGUu
aHRtbDogQWRkZWQuCisKIDIwMDktMDMtMjIgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBh
cHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFuIEJlcm5zdGVpbgpJbmRleDogTGF5
b3V0VGVzdHMvZmFzdC94bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJbmRleDog
TGF5b3V0VGVzdHMvZmFzdC94bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVzdC1ub25leGlzdGVu
dC1maWxlLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3htbGh0
dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LW5vbmV4aXN0ZW50LWZpbGUtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC94bWxodHRwcmVxdWVzdC94bWxodHRwcmVx
dWVzdC1ub25leGlzdGVudC1maWxlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxNSBAQAorQnVnIDIyNDc1OiBSRUdSRVNTSU9OOiBBc3luYyBYTUxIdHRwUmVxdWVzdCBuZXZl
ciBmaW5pc2hlcyBvbiBub25leGlzdGVudCBmaWxlcyBhbnltb3JlCisKK0ZvciB0aGlzIHRlc3Qg
dG8gcGFzcywgdGhlcmUgc2hvdWxkIGJlIDIgWEhSIGRvbmU6IG9uZSB0byBhIG5vbmV4aXN0ZW50
IGZpbGUsIHRoZSBvdGhlciB0byBhIGRpcmVjdG9yeS4gSW4gYm90aCBjYXNlcywgdGhlIHJlYWR5
U3RhdGUgaGFuZGxlciBzaG91bGQgYmUgY2FsbGVkIGZvciByZWFkeVN0YXRlID0gMSwgMiBhbmQg
NC4gVGhlIGVycm9yIGhhbmRsZXIgc2hvdWxkIGFsc28gYmUgY2FsbGVkIG9uY2UgZm9yIHRoZSBu
b24tZXhpc3RlbnQgY2FzZS4KKworRG9pbmcgYW4gWEhSIHRvIGEgbm9uZXhpc3RlbnQgZmlsZS4K
K1JlYWR5U3RhdGUgaGFuZGxlcjogcmVhZHlTdGF0ZSA9IDEKK0Vycm9yIGhhbmRsZXI6IHJlYWR5
U3RhdGUgPSAxCitSZWFkeVN0YXRlIGhhbmRsZXI6IHJlYWR5U3RhdGUgPSAyCitSZWFkeVN0YXRl
IGhhbmRsZXI6IHJlYWR5U3RhdGUgPSA0CisKK0RvaW5nIGFuIFhIUiB0byBhIGRpcmVjdG9yeS4K
K1JlYWR5U3RhdGUgaGFuZGxlcjogcmVhZHlTdGF0ZSA9IDEKK1JlYWR5U3RhdGUgaGFuZGxlcjog
cmVhZHlTdGF0ZSA9IDIKK1JlYWR5U3RhdGUgaGFuZGxlcjogcmVhZHlTdGF0ZSA9IDQKKwpJbmRl
eDogTGF5b3V0VGVzdHMvZmFzdC94bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVzdC1ub25leGlz
dGVudC1maWxlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC94bWxodHRwcmVx
dWVzdC94bWxodHRwcmVxdWVzdC1ub25leGlzdGVudC1maWxlLmh0bWwJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9mYXN0L3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LW5vbmV4aXN0
ZW50LWZpbGUuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NSBAQAorPCFET0NUWVBFIGh0
bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIKKyAgICAg
ICAgICAgICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4K
KzxodG1sPgorPGhlYWQ+CisgICAgPHNjcmlwdD4KKyAgICAgICAgZnVuY3Rpb24gbG9nKG1lc3Nh
Z2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBjb25zb2xlID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoJ2NvbnNvbGUnKTsKKyAgICAgICAgICAgIGNvbnNvbGUuYXBwZW5kQ2hpbGQoZG9j
dW1lbnQuY3JlYXRlVGV4dE5vZGUobWVzc2FnZSkpOworICAgICAgICAgICAgY29uc29sZS5hcHBl
bmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdicicpKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGZ1bmN0aW9uIGVycm9ySGFuZGxlcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIGxvZygi
RXJyb3IgaGFuZGxlcjogcmVhZHlTdGF0ZSA9ICIgKyB4aHIucmVhZHlTdGF0ZSk7CisgICAgICAg
IH0KKworICAgICAgICBmdW5jdGlvbiByZWFkeVN0YXRlSGFuZGxlckRpcmVjdG9yeSgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGxvZygiUmVhZHlTdGF0ZSBoYW5kbGVyOiByZWFkeVN0YXRlID0g
IiArIHhoci5yZWFkeVN0YXRlKTsKKyAgICAgICAgICAgIGlmICh4aHIucmVhZHlTdGF0ZSA9PSA0
ICYmIHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgICAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlv
biB0ZXN0WEhSRGlyZWN0b3J5KCkKKyAgICAgICAgeworICAgICAgICAgICAgbG9nKCIiKTsKKyAg
ICAgICAgICAgIGxvZygiRG9pbmcgYW4gWEhSIHRvIGEgZGlyZWN0b3J5LiIpOworICAgICAgICAg
ICAgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisgICAgICAgICAgICB4aHIub25lcnJvciA9
IGVycm9ySGFuZGxlcjsKKyAgICAgICAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSByZWFk
eVN0YXRlSGFuZGxlckRpcmVjdG9yeTsKKworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAg
ICAgICB4aHIub3BlbigiR0VUIiwgInJlc291cmNlcyIsIHRydWUpOworICAgICAgICAgICAgICAg
IHhoci5zZW5kKCIiKTsKKyAgICAgICAgICAgIH0gY2F0Y2goZSkgeworICAgICAgICAgICAgICAg
IGxvZygiRXhjZXB0aW9uOiAiICsgZS5tZXNzYWdlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIGZ1bmN0aW9uIHJlYWR5U3RhdGVIYW5kbGVyTm9uRXhpc3RlbnQoKQorICAg
ICAgICB7CisgICAgICAgICAgICBsb2coIlJlYWR5U3RhdGUgaGFuZGxlcjogcmVhZHlTdGF0ZSA9
ICIgKyB4aHIucmVhZHlTdGF0ZSk7CisgICAgICAgICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT0g
NCkKKyAgICAgICAgICAgICAgICB0ZXN0WEhSRGlyZWN0b3J5KCk7CisgICAgICAgIH0KKworICAg
ICAgICBmdW5jdGlvbiB0ZXN0WEhSTm9uRXhpc3RlbnRGaWxlKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICAgICAgICAg
IGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgICAgICAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGxvZygiRG9pbmcgYW4gWEhSIHRvIGEgbm9uZXhpc3RlbnQgZmlsZS4iKTsKKyAgICAg
ICAgICAgIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworICAgICAgICAgICAgeGhyLm9uZXJy
b3IgPSBlcnJvckhhbmRsZXI7CisgICAgICAgICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0g
cmVhZHlTdGF0ZUhhbmRsZXJOb25FeGlzdGVudDsKKworICAgICAgICAgICAgdHJ5IHsKKyAgICAg
ICAgICAgICAgICB4aHIub3BlbigiR0VUIiwgIm5vbmV4aXN0ZW50Lmh0bWwiLCB0cnVlKTsKKyAg
ICAgICAgICAgICAgICB4aHIuc2VuZCgiIik7CisgICAgICAgICAgICB9IGNhdGNoKGUpIHsKKyAg
ICAgICAgICAgICAgICBsb2coIkV4Y2VwdGlvbjogIiArIGUubWVzc2FnZSk7CisgICAgICAgICAg
ICAgICAgdGVzdFhIUkRpcmVjdG9yeSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIDwvc2NyaXB0PgorICAgIDwvaGVhZD4KKyAgICA8Ym9keSBvbmxvYWQ9InRlc3RYSFJOb25F
eGlzdGVudEZpbGUoKSI+CisgICAgICAgIDxwPiBCdWcgPGEgaHJlZj0iaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNDc1Ij4yMjQ3NTwvYT46IFJFR1JFU1NJT046IEFz
eW5jIFhNTEh0dHBSZXF1ZXN0IG5ldmVyIGZpbmlzaGVzIG9uIG5vbmV4aXN0ZW50IGZpbGVzIGFu
eW1vcmUgPC9wPgorICAgICAgICA8cD4gRm9yIHRoaXMgdGVzdCB0byBwYXNzLCB0aGVyZSBzaG91
bGQgYmUgMiBYSFIgZG9uZTogb25lIHRvIGEgbm9uZXhpc3RlbnQgZmlsZSwgdGhlIG90aGVyIHRv
IGEgZGlyZWN0b3J5LiBJbiBib3RoIGNhc2VzLCB0aGUgcmVhZHlTdGF0ZSBoYW5kbGVyIHNob3Vs
ZCBiZSBjYWxsZWQgZm9yIHJlYWR5U3RhdGUgPSAxLCAyIGFuZCA0LiBUaGUgZXJyb3IgaGFuZGxl
ciBzaG91bGQgYWxzbyBiZSBjYWxsZWQgb25jZSBmb3IgdGhlIG5vbi1leGlzdGVudCBjYXNlLiA8
L3A+CisgICAgICAgIDxkaXYgaWQ9ImNvbnNvbGUiLz4KKyAgICA8L2JvZHk+Cis8L2h0bWw+Cg==
</data>
<flag name="review"
          id="14238"
          type_id="1"
          status="-"
          setter="ap"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29157</attachid>
            <date>2009-04-01 04:28:09 -0700</date>
            <delta_ts>2009-04-01 13:39:08 -0700</delta_ts>
            <desc>proposed fix</desc>
            <filename>ReachDoneState.txt</filename>
            <type>text/plain</type>
            <size>63152</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MjE0OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjYgQEAKKzIwMDktMDQtMDEgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEB3ZWJr
aXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLiBCYXNlZCBvbiB3
b3JrIG9mIEp1bGllbiBDaGFmZnJhaXguCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIyNDc1CisgICAgICAgIFJFR1JFU1NJT046IEFzeW5jIFhNTEh0
dHBSZXF1ZXN0IG5ldmVyIGZpbmlzaGVzIG9uIG5vbmV4aXN0ZW50IGZpbGVzIGFueW1vcmUKKwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjQ4ODYKKyAg
ICAgICAgWEhSIHJlcXVlc3RzIG9wZW5lZCB3aGVuIG9mZmxpbmUgbmV2ZXIgcmV0dXJuCisKKyAg
ICAgICAgVGVzdHM6IGZhc3QveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3Qtbm9uZXhpc3Rl
bnQtZmlsZS5odG1sCisgICAgICAgICAgICAgICBodHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3N0
YXRlLWFmdGVyLW5ldHdvcmstZXJyb3IuaHRtbAorCisgICAgICAgICogeG1sL1hNTEh0dHBSZXF1
ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjpjYWxsUmVhZHlTdGF0
ZUNoYW5nZUxpc3RlbmVyKTogT25seSBkaXNwYXRjaCBsb2FkIGV2ZW50IGlmIHRoaXMKKyAgICAg
ICAgd2Fzbid0IGFuIGVycm9yLgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OmFi
b3J0KTogRml4ZWQgZm9ybWF0dGluZy4KKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0
OjpnZW5lcmljRXJyb3IpOiBDaGFuZ2Ugc3RhdGUgdG8gRE9ORSBhbmQgZGlzcGF0Y2ggcmVhZHlz
dHN0ZWNoYW5nZS4KKyAgICAgICAgVGhlIGNvbW1lbnQgc2F5aW5nIHRoYXQgdGhpcyBkb2Vzbid0
IG1hdGNoIEZpcmVmb3ggd2FzIGFkZGVkIGluIHIzMzU1OSB3aXRob3V0IGV4cGxhbmF0aW9uCisg
ICAgICAgIG9yIHRlc3RzLCBhbmQgSSBkb24ndCB0aGluayB0aGF0IGl0J3MgYWNjdXJhdGUuIEFs
c28sIEZpcmVmb3ggYW5kIFNhZmFyaSAzIGJvdGggY2hhbmdlIHN0YXRlCisgICAgICAgIHRvIEhF
QURFUlNfUkVDRUlWRUQgcmVjZWl2ZWQgYmVmb3JlIERPTkUgb24gZXJyb3IgLSB0aGlzIGRvZXNu
J3QgbWF0Y2ggdGhlIHNwZWMsIGFuZCBJIGRvdWJ0CisgICAgICAgIHRoYXQgYW55IGNvZGUgZGVw
ZW5kcyBvbiB0aGlzLCBzbyBJIHdlbnQgd2l0aCB0aGUgc3BlYyBoZXJlLgorCiAyMDA5LTAzLTMx
ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSb2xsZWQgb3V0IHRo
YXQgbGFzdCBjaGFuZ2UgdW50aWwgSSBjYW4gaW52ZXN0aWdhdGUgdGhlIHJlZ3Jlc3Npb24gdGVz
dCBmYWlsdXJlcyBpdCBzZWVtcwpJbmRleDogV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAkocmV2aXNpb24g
NDIxNDgpCisrKyBXZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI4NCw3ICsyODQsNyBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpjYWxsUmVhZHlTdGF0ZUNo
YW5nCiAKICAgICBkaXNwYXRjaFJlYWR5U3RhdGVDaGFuZ2VFdmVudCgpOwogCi0gICAgaWYgKG1f
c3RhdGUgPT0gRE9ORSkKKyAgICBpZiAobV9zdGF0ZSA9PSBET05FICYmICFtX2Vycm9yKQogICAg
ICAgICBkaXNwYXRjaExvYWRFdmVudCgpOwogfQogCkBAIC02ODIsNyArNjgyLDcgQEAgdm9pZCBY
TUxIdHRwUmVxdWVzdDo6YWJvcnQoKQogICAgIAogICAgIGlmICgobV9zdGF0ZSA8PSBPUEVORUQg
JiYgIXNlbmRGbGFnKSB8fCBtX3N0YXRlID09IERPTkUpCiAgICAgICAgIG1fc3RhdGUgPSBVTlNF
TlQ7Ci0gICAgIGVsc2UgeworICAgIGVsc2UgewogICAgICAgICBBU1NFUlQoIW1fbG9hZGVyKTsK
ICAgICAgICAgY2hhbmdlU3RhdGUoRE9ORSk7CiAgICAgICAgIG1fc3RhdGUgPSBVTlNFTlQ7CkBA
IC03MzYsOCArNzM2LDcgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6Z2VuZXJpY0Vycm9yKCkKICAg
ICBjbGVhclJlcXVlc3QoKTsKICAgICBtX2Vycm9yID0gdHJ1ZTsKIAotICAgIC8vIFRoZSBzcGVj
IHNheXMgd2Ugc2hvdWxkICJTeW5jaHJvbm91c2x5IHN3aXRjaCB0aGUgc3RhdGUgdG8gRE9ORS4i
IGFuZCB0aGVuICJTeW5jaHJvbm91c2x5IGRpc3BhdGNoIGEgcmVhZHlzdGF0ZWNoYW5nZSBldmVu
dCBvbiB0aGUgb2JqZWN0IgotICAgIC8vIGJ1dCB0aGlzIGRvZXMgbm90IG1hdGNoIEZpcmVmb3gu
CisgICAgY2hhbmdlU3RhdGUoRE9ORSk7CiB9CiAKIHZvaWQgWE1MSHR0cFJlcXVlc3Q6Om5ldHdv
cmtFcnJvcigpCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA0MjE0OCkKKysrIExheW91dFRlc3RzL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcyIEBACisyMDA5LTA0LTAxICBBbGV4ZXkg
UHJvc2t1cnlha292ICA8YXBAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4gQmFzZWQgb24gd29yayBvZiBKdWxpZW4gQ2hhZmZyYWl4LgorCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjQ3NQorICAgICAgICBS
RUdSRVNTSU9OOiBBc3luYyBYTUxIdHRwUmVxdWVzdCBuZXZlciBmaW5pc2hlcyBvbiBub25leGlz
dGVudCBmaWxlcyBhbnltb3JlCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTI0ODg2CisgICAgICAgIFhIUiByZXF1ZXN0cyBvcGVuZWQgd2hlbiBvZmZs
aW5lIG5ldmVyIHJldHVybgorCisgICAgICAgICogZmFzdC9sb2FkZXIveG1saHR0cHJlcXVlc3Qt
bWlzc2luZy1maWxlLWV4Y2VwdGlvbi1leHBlY3RlZC50eHQ6IFJlbW92ZWQuCisgICAgICAgICog
ZmFzdC9sb2FkZXIveG1saHR0cHJlcXVlc3QtbWlzc2luZy1maWxlLWV4Y2VwdGlvbi5odG1sOiBS
ZW1vdmVkLgorICAgICAgICAqIGh0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qvc3RhdGUtYWZ0ZXIt
bmV0d29yay1lcnJvci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMv
eG1saHR0cHJlcXVlc3Qvc3RhdGUtYWZ0ZXItbmV0d29yay1lcnJvci5odG1sOiBBZGRlZC4KKyAg
ICAgICAgQWRkZWQgdGVzdHMgZm9yIHRoZXNlIGlzc3Vlcy4KKworICAgICAgICAqIGh0dHAvdGVz
dHMveG1saHR0cHJlcXVlc3QvZnJhbWUtbG9hZC1jYW5jZWxsZWQtYWJvcnQtZXhwZWN0ZWQudHh0
OiBBcyB3aXRoIG90aGVyIGVycm9ycywKKyAgICAgICAgdGhlIHJlcXVlc3Qgbm93IHJlYWNoZXMg
RE9ORSBzdGF0ZSBub3cuIFRoaXMgbWFrZXMgdGhlIHJlc3VsdHMgY2xvc2VyIHRvIEZpcmVmb3gg
YWdhaW4KKyAgICAgICAgKHRoZXkgY2hhbmdlZCBtdWx0aXBsZSB0aW1lcyByZWNlbnRseSkuCisg
ICAgICAgICogaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMvZnJhbWUtbG9hZC10
by1jYW5jZWwuaHRtbDogRmlyZWZveCBkaXNwYXRjaGVzCisgICAgICAgIGNhbmNlbGxhdGlvbiBl
dmVudHMgYXQgYSBsYXRlciBwb2ludCwgd2hlbiB3aW5kb3cucGFyZW50IGlzIGFscmVhZHkgdW5k
ZWZpbmVkLiBDaGFuZ2VkCisgICAgICAgIHRoZSB0ZXN0IHRvIGxvZyBhbGwgZXZlbnRzLCBtYWtp
bmcgdGhlIGRpZmZlcmVuY2Ugd2l0aCBGaXJlZm94IGxlc3MgY29uZnVzaW5nLgorCisgICAgICAg
ICogaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9zaW1wbGUtY3Jvc3Mtb3JpZ2luLXByb2dyZXNz
LWV2ZW50cy5odG1sOiBGaXhlZCBhIG1pc3Rha2UgaW4KKyAgICAgICAgdGhlIHRlc3QsIHdoaWNo
IGNvdWxkIGNhbGwgYSBub24tZXhpc3RlbnQgZnVuY3Rpb24gaW4gc29tZSBjb2RlIHBhdGhzLgor
CisgICAgICAgICogaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVzdC11bnNh
ZmUtcmVkaXJlY3QtZXhwZWN0ZWQudHh0OiBTdGF0ZSBub3cgcmVhY2hlcworICAgICAgICBET05F
IG9uIGNyb3NzLW9yaWdpbiBjaGVjayBmYWlsdXJlLCBhcyBpdCBzaG91bGQgcGVyIHRoZSBzcGVj
LiBUaGlzIG1hdGNoZXMgRmlyZWZveCBpbiBhc3luYworICAgICAgICBjYXNlIChhbmQgaW4gc3lu
YyBjYXNlLCBpdCBzaW1wbHkgZG9lc24ndCBkaXNwYXRjaCBhbnkgb25yZWFkeXN0YXRlY2hhbmdl
IGV2ZW50cywgbm90IHN1cmUgd2h5KS4KKworICAgICAgICAqIGZhc3QvZG9tL251bGwtZG9jdW1l
bnQteG1saHR0cHJlcXVlc3Qtb3Blbi1leHBlY3RlZC50eHQ6IFJlbW92ZWQuCisgICAgICAgICog
ZmFzdC9kb20vbnVsbC1kb2N1bWVudC14bWxodHRwcmVxdWVzdC1vcGVuLmh0bWw6IFJlbW92ZWQu
CisgICAgICAgICogZmFzdC9kb20vcmVzb3VyY2VzLzEyNTEuaHRtbDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBmYXN0L2RvbS9yZXNvdXJjZXMveG1saHR0cHJlcXVlc3QtZ2V0LWRhdGEueG1sOiBSZW1v
dmVkLgorICAgICAgICAqIGZhc3QvZG9tL3htbGh0dHByZXF1ZXN0LWdjLWV4cGVjdGVkLnR4dDog
UmVtb3ZlZC4KKyAgICAgICAgKiBmYXN0L2RvbS94bWxodHRwcmVxdWVzdC1nYy5odG1sOiBSZW1v
dmVkLgorICAgICAgICAqIGZhc3QvZG9tL3htbGh0dHByZXF1ZXN0LWdldC1leHBlY3RlZC50eHQ6
IFJlbW92ZWQuCisgICAgICAgICogZmFzdC9kb20veG1saHR0cHJlcXVlc3QtZ2V0LnhodG1sOiBS
ZW1vdmVkLgorICAgICAgICAqIGZhc3QvZG9tL3htbGh0dHByZXF1ZXN0LWh0bWwtcmVzcG9uc2Ut
ZW5jb2RpbmctZXhwZWN0ZWQudHh0OiBSZW1vdmVkLgorICAgICAgICAqIGZhc3QvZG9tL3htbGh0
dHByZXF1ZXN0LWh0bWwtcmVzcG9uc2UtZW5jb2RpbmcuaHRtbDogUmVtb3ZlZC4KKyAgICAgICAg
KiBmYXN0L2RvbS94bWxodHRwcmVxdWVzdC1pbnZhbGlkLXZhbHVlcy1leHBlY3RlZC50eHQ6IFJl
bW92ZWQuCisgICAgICAgICogZmFzdC9kb20veG1saHR0cHJlcXVlc3QtaW52YWxpZC12YWx1ZXMu
aHRtbDogUmVtb3ZlZC4KKyAgICAgICAgKiBmYXN0L2xvYWRlci9yZXNvdXJjZXMvcGxpc3QuYXBw
OiBSZW1vdmVkLgorICAgICAgICAqIGZhc3QvbG9hZGVyL3htbGh0dHByZXF1ZXN0LWJhZC1taW1l
dHlwZS1leHBlY3RlZC50eHQ6IFJlbW92ZWQuCisgICAgICAgICogZmFzdC9sb2FkZXIveG1saHR0
cHJlcXVlc3QtYmFkLW1pbWV0eXBlLmh0bWw6IFJlbW92ZWQuCisgICAgICAgICogZmFzdC94bWxo
dHRwcmVxdWVzdDogQWRkZWQuCisgICAgICAgICogZmFzdC94bWxodHRwcmVxdWVzdC9udWxsLWRv
Y3VtZW50LXhtbGh0dHByZXF1ZXN0LW9wZW4tZXhwZWN0ZWQudHh0OiBDb3BpZWQgZnJvbSBMYXlv
dXRUZXN0cy9mYXN0L2RvbS9udWxsLWRvY3VtZW50LXhtbGh0dHByZXF1ZXN0LW9wZW4tZXhwZWN0
ZWQudHh0LgorICAgICAgICAqIGZhc3QveG1saHR0cHJlcXVlc3QvbnVsbC1kb2N1bWVudC14bWxo
dHRwcmVxdWVzdC1vcGVuLmh0bWw6IENvcGllZCBmcm9tIExheW91dFRlc3RzL2Zhc3QvZG9tL251
bGwtZG9jdW1lbnQteG1saHR0cHJlcXVlc3Qtb3Blbi5odG1sLgorICAgICAgICAqIGZhc3QveG1s
aHR0cHJlcXVlc3QvcmVzb3VyY2VzOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3htbGh0dHByZXF1
ZXN0L3Jlc291cmNlcy8xMjUxLmh0bWw6IENvcGllZCBmcm9tIExheW91dFRlc3RzL2Zhc3QvZG9t
L3Jlc291cmNlcy8xMjUxLmh0bWwuCisgICAgICAgICogZmFzdC94bWxodHRwcmVxdWVzdC9yZXNv
dXJjZXMvcGxpc3QuYXBwOiBDb3BpZWQgZnJvbSBMYXlvdXRUZXN0cy9mYXN0L2xvYWRlci9yZXNv
dXJjZXMvcGxpc3QuYXBwLgorICAgICAgICAqIGZhc3QveG1saHR0cHJlcXVlc3QvcmVzb3VyY2Vz
L3htbGh0dHByZXF1ZXN0LWdldC1kYXRhLnhtbDogQ29waWVkIGZyb20gTGF5b3V0VGVzdHMvZmFz
dC9kb20vcmVzb3VyY2VzL3htbGh0dHByZXF1ZXN0LWdldC1kYXRhLnhtbC4KKyAgICAgICAgKiBm
YXN0L3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LWJhZC1taW1ldHlwZS1leHBlY3RlZC50
eHQ6IENvcGllZCBmcm9tIExheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3htbGh0dHByZXF1ZXN0LWJh
ZC1taW1ldHlwZS1leHBlY3RlZC50eHQuCisgICAgICAgICogZmFzdC94bWxodHRwcmVxdWVzdC94
bWxodHRwcmVxdWVzdC1iYWQtbWltZXR5cGUuaHRtbDogQ29waWVkIGZyb20gTGF5b3V0VGVzdHMv
ZmFzdC9sb2FkZXIveG1saHR0cHJlcXVlc3QtYmFkLW1pbWV0eXBlLmh0bWwuCisgICAgICAgICog
ZmFzdC94bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVzdC1nYy1leHBlY3RlZC50eHQ6IENvcGll
ZCBmcm9tIExheW91dFRlc3RzL2Zhc3QvZG9tL3htbGh0dHByZXF1ZXN0LWdjLWV4cGVjdGVkLnR4
dC4KKyAgICAgICAgKiBmYXN0L3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LWdjLmh0bWw6
IENvcGllZCBmcm9tIExheW91dFRlc3RzL2Zhc3QvZG9tL3htbGh0dHByZXF1ZXN0LWdjLmh0bWwu
CisgICAgICAgICogZmFzdC94bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVzdC1nZXQtZXhwZWN0
ZWQudHh0OiBDb3BpZWQgZnJvbSBMYXlvdXRUZXN0cy9mYXN0L2RvbS94bWxodHRwcmVxdWVzdC1n
ZXQtZXhwZWN0ZWQudHh0LgorICAgICAgICAqIGZhc3QveG1saHR0cHJlcXVlc3QveG1saHR0cHJl
cXVlc3QtZ2V0LnhodG1sOiBDb3BpZWQgZnJvbSBMYXlvdXRUZXN0cy9mYXN0L2RvbS94bWxodHRw
cmVxdWVzdC1nZXQueGh0bWwuCisgICAgICAgICogZmFzdC94bWxodHRwcmVxdWVzdC94bWxodHRw
cmVxdWVzdC1odG1sLXJlc3BvbnNlLWVuY29kaW5nLWV4cGVjdGVkLnR4dDogQ29waWVkIGZyb20g
TGF5b3V0VGVzdHMvZmFzdC9kb20veG1saHR0cHJlcXVlc3QtaHRtbC1yZXNwb25zZS1lbmNvZGlu
Zy1leHBlY3RlZC50eHQuCisgICAgICAgICogZmFzdC94bWxodHRwcmVxdWVzdC94bWxodHRwcmVx
dWVzdC1odG1sLXJlc3BvbnNlLWVuY29kaW5nLmh0bWw6IENvcGllZCBmcm9tIExheW91dFRlc3Rz
L2Zhc3QvZG9tL3htbGh0dHByZXF1ZXN0LWh0bWwtcmVzcG9uc2UtZW5jb2RpbmcuaHRtbC4KKyAg
ICAgICAgKiBmYXN0L3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LWludmFsaWQtdmFsdWVz
LWV4cGVjdGVkLnR4dDogQ29waWVkIGZyb20gTGF5b3V0VGVzdHMvZmFzdC9kb20veG1saHR0cHJl
cXVlc3QtaW52YWxpZC12YWx1ZXMtZXhwZWN0ZWQudHh0LgorICAgICAgICAqIGZhc3QveG1saHR0
cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtaW52YWxpZC12YWx1ZXMuaHRtbDogQ29waWVkIGZyb20g
TGF5b3V0VGVzdHMvZmFzdC9kb20veG1saHR0cHJlcXVlc3QtaW52YWxpZC12YWx1ZXMuaHRtbC4K
KyAgICAgICAgKiBmYXN0L3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LW1pc3NpbmctZmls
ZS1leGNlcHRpb24tZXhwZWN0ZWQudHh0OiBDb3BpZWQgZnJvbSBMYXlvdXRUZXN0cy9mYXN0L2xv
YWRlci94bWxodHRwcmVxdWVzdC1taXNzaW5nLWZpbGUtZXhjZXB0aW9uLWV4cGVjdGVkLnR4dC4K
KyAgICAgICAgKiBmYXN0L3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LW1pc3NpbmctZmls
ZS1leGNlcHRpb24uaHRtbDogQ29waWVkIGZyb20gTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIveG1s
aHR0cHJlcXVlc3QtbWlzc2luZy1maWxlLWV4Y2VwdGlvbi5odG1sLgorICAgICAgICAqIGZhc3Qv
eG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3Qtbm9uZXhpc3RlbnQtZmlsZS1leHBlY3RlZC50
eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3Qt
bm9uZXhpc3RlbnQtZmlsZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvU2tp
cHBlZDoKKyAgICAgICAgTW92ZWQgbm9uLUhUVFAgWE1MSHR0cFJlcXVlc3QgdGVzdHMgdG8gZmFz
dC94bWxodHRwcmVxdWVzdC4KKwogMjAwOS0wMy0zMSAgRXJpYyBDYXJsc29uICA8ZXJpYy5jYXJs
c29uQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6
IExheW91dFRlc3RzL2Zhc3QvZG9tL251bGwtZG9jdW1lbnQteG1saHR0cHJlcXVlc3Qtb3Blbi1l
eHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vbnVsbC1kb2N1
bWVudC14bWxodHRwcmVxdWVzdC1vcGVuLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNDIxNDgpCisr
KyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9udWxsLWRvY3VtZW50LXhtbGh0dHByZXF1ZXN0LW9wZW4t
ZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzAsMCBAQAotVGhpcyB0ZXN0IGNo
ZWNrcyBmb3IgYSBOVUxMIGRvY3VtZW50IGNyYXNoIHRoYXQgY2FuIGhhcHBlbiB3aGVuIGNhbGxp
bmcgWE1MSHR0cFJlcXVlc3Qub3Blbi4gSWYgdGhlIHRlc3QgcGFzc2VzLCB5b3UnbGwgc2VlIGEg
UEFTUyBtZXNzYWdlIGJlbG93LgotCi1QQVNTOiBZb3UgZGlkbid0IGNyYXNoLgotCkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L2RvbS9udWxsLWRvY3VtZW50LXhtbGh0dHByZXF1ZXN0LW9wZW4uaHRt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9udWxsLWRvY3VtZW50LXhtbGh0
dHByZXF1ZXN0LW9wZW4uaHRtbAkocmV2aXNpb24gNDIxNDgpCisrKyBMYXlvdXRUZXN0cy9mYXN0
L2RvbS9udWxsLWRvY3VtZW50LXhtbGh0dHByZXF1ZXN0LW9wZW4uaHRtbAkod29ya2luZyBjb3B5
KQpAQCAtMSw0MSArMCwwIEBACi08cD5UaGlzIHRlc3QgY2hlY2tzIGZvciBhIE5VTEwgZG9jdW1l
bnQgY3Jhc2ggdGhhdCBjYW4gaGFwcGVuIHdoZW4gY2FsbGluZwotWE1MSHR0cFJlcXVlc3Qub3Bl
bi4gSWYgdGhlIHRlc3QgcGFzc2VzLCB5b3UnbGwgc2VlIGEgUEFTUyBtZXNzYWdlIGJlbG93Ljwv
cD4KLTxocj4KLTxwcmUgaWQ9InByZSI+PC9wcmU+Ci08aWZyYW1lIG5hbWU9ImlmcmFtZSIgc3R5
bGU9InZpc2liaWxpdHk6aGlkZGVuIiBzcmM9ImRvZXMtbm90LWV4aXN0LmJvZ3VzIj48L2lmcmFt
ZT4gPCEtLSBmb3JjZXMgYXN5bmNocm9ub3VzIGxvYWQgLS0+Ci08c2NyaXB0PgotPCEtLQotZnVu
Y3Rpb24gbG9nKHMpCi17Ci0gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInByZSIpLmFwcGVu
ZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHMpKTsKLX0KLQotZnVuY3Rpb24gdGVzdCgp
Ci17Ci0gICAgdmFyIHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKLSAgICByZXF1ZXN0
Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKGV2ZW50KSB7IGlmIChldmVudC50YXJnZXQu
cmVhZHlTdGF0ZSA9PSAxKSBwYXJlbnQucGFzcygpOyB9OwotICAgIHJlcXVlc3Qub3BlbigiR0VU
Iiwgd2luZG93LmxvY2F0aW9uKTsKLX0KLQotZnVuY3Rpb24gcGFzcygpCi17Ci0gICAgbG9nKCJQ
QVNTOiBZb3UgZGlkbid0IGNyYXNoLiIpOwotCi0gICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29u
dHJvbGxlcikKLSAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOwotfQot
Ci1mdW5jdGlvbiBtYWluKCkKLXsKLSAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVy
KSB7Ci0gICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKLSAgICAgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOwotICAgIH0gICAgCi0gICAgCi0g
ICAgLy8gc2V0VGltZW91dCBmb3JjZXMgZXhlY3V0aW9uIGluIHRoZSBjb250ZXh0IG9mIHRoZSBm
cmFtZQotICAgIGZyYW1lc1swXS5zZXRUaW1lb3V0KHRlc3QsIDApOwotfQotCi1tYWluKCk7Ci0t
LT4KLTwvc2NyaXB0PgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20veG1saHR0cHJlcXVlc3Qt
Z2MtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL3htbGh0
dHByZXF1ZXN0LWdjLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNDIxNDgpCisrKyBMYXlvdXRUZXN0
cy9mYXN0L2RvbS94bWxodHRwcmVxdWVzdC1nYy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTEsNiArMCwwIEBACi1UZXN0cyB0aGF0IGdhcmJhZ2UgY29sbGVjdGlvbiBkb2Vzbid0IGRy
b3AgdGhlIFhNTEh0dHBSZXF1ZXN0IEpTIHdyYXBwZXIgdW50aWwgdGhlIHNlbmQgY29tbWFuZCBp
cyBkb25lLiBZb3Ugc2hvdWxkIHNlZSAnYmFyJyBmb3VyIHRpbWVzIGJlbG93LgotYmFyCi1iYXIK
LWJhcgotYmFyCi0KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL3htbGh0dHByZXF1ZXN0LWdj
Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20veG1saHR0cHJlcXVlc3Qt
Z2MuaHRtbAkocmV2aXNpb24gNDIxNDgpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS94bWxodHRw
cmVxdWVzdC1nYy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQwICswLDAgQEAKLTxodG1sPgot
PHNjcmlwdD4KLWZ1bmN0aW9uIHN0YXRlQ2hhbmdlKCkgewotICAgIGRvY3VtZW50LndyaXRlKHRo
aXMuZm9vICsgJzxicj4nKTsKLX0KLQotZnVuY3Rpb24gY29sbGVjdEdhcmJhZ2UoKSB7Ci0gICAg
aWYgKHdpbmRvdy5HQ0NvbnRyb2xsZXIpIHsKLSAgICAgICAgd2luZG93LkdDQ29udHJvbGxlci5j
b2xsZWN0KCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNTAwMDA7
IGkrKykKLSAgICAgICAgICBuZXcgT2JqZWN0KCk7Ci0gICAgfQotfQotCi1mdW5jdGlvbiBydW5U
ZXN0KCkgewotICAgIGRvY3VtZW50LndyaXRlKCJUZXN0cyB0aGF0IGdhcmJhZ2UgY29sbGVjdGlv
biBkb2Vzbid0IGRyb3AgdGhlIFhNTEh0dHBSZXF1ZXN0IEpTIHdyYXBwZXIgdW50aWwgdGhlIHNl
bmQgY29tbWFuZCBpcyBkb25lLiAgWW91IHNob3VsZCBzZWUgJ2JhcicgZm91ciB0aW1lcyBiZWxv
dy48YnI+Iik7Ci0KLSAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7Ci0gICAg
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKLSAgICAgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOwotICAgIH0KLQotICAgIHZhciB4aHIgPSBuZXcg
WE1MSHR0cFJlcXVlc3QoKTsKLSAgICB4aHIuZm9vID0gJ2Jhcic7Ci0gICAgeGhyLm9ucmVhZHlz
dGF0ZWNoYW5nZSA9IHN0YXRlQ2hhbmdlOwotICAgIHhoci5vcGVuKCJHRVQiLCAieG1saHR0cHJl
cXVlc3QtZ2MuaHRtbCIsIHRydWUpOwotICAgIHhoci5zZW5kKG51bGwpOwotCi0gICAgeGhyID0g
bnVsbDsKLSAgICBjb2xsZWN0R2FyYmFnZSgpOwotCi0gICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0
Q29udHJvbGxlcikKLSAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOwot
fQotCi08L3NjcmlwdD4KLTxib2R5IG9ubG9hZD0ncnVuVGVzdCgpJz4KLTwvYm9keT4KLTwvaHRt
bD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL3htbGh0dHByZXF1ZXN0LWdldC1leHBlY3Rl
ZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20veG1saHR0cHJlcXVlc3Qt
Z2V0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNDIxNDgpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Rv
bS94bWxodHRwcmVxdWVzdC1nZXQtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDcy
ICswLDAgQEAKLUdFVCB0ZXN0Ci0KLXJlc3BvbnNlVGV4dAotPD94bWwgdmVyc2lvbj0iMS4wIj8+
Ci08IURPQ1RZUEUgZG9jIFsKLTwhQVRUTElTVCBkIGlkIElEICNJTVBMSUVEPgotXT4KLTxkb2M+
Ci0gIDxmb28geG1sbnM9ImZvb2JhciI+T25lPC9mb28+IDx4OmJhciB4bWxuczp4PSJiYXJmb28i
PlR3bzwveDpiYXI+Ci0gIDxkIGlkPSJpZDMiPlRocmVlPC9kPgotPC9kb2M+Ci1yZXNwb25zZVhN
TCBzZXJpYWxpemVkCi08IURPQ1RZUEUgZG9jPjxkb2M+Ci0gIDxmb28geG1sbnM9ImZvb2JhciI+
T25lPC9mb28+IDx4OmJhciB4bWxuczp4PSJiYXJmb28iPlR3bzwveDpiYXI+Ci0gIDxkIGlkPSJp
ZDMiPlRocmVlPC9kPgotPC9kb2M+Ci1nZXRBbGxSZXNwb25zZUhlYWRlcnMoKQotc3RhdHVzCi0w
Ci1zdGF0dXNUZXh0Ci1yZWFkeVN0YXRlCi00Ci1FdmVudCBpbmZvcm1hdGlvbgotRXZlbnQgb2Jq
ZWN0OiBbb2JqZWN0IFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudF0KLUV2ZW50IHByb3BlcnRp
ZXM6Ci1BVF9UQVJHRVQgOiAnMicKLUJMVVIgOiAnODE5MicKLUJVQkJMSU5HX1BIQVNFIDogJzMn
Ci1DQVBUVVJJTkdfUEhBU0UgOiAnMScKLUNIQU5HRSA6ICczMjc2OCcKLUNMSUNLIDogJzY0Jwot
REJMQ0xJQ0sgOiAnMTI4JwotRFJBR0RST1AgOiAnMjA0OCcKLUZPQ1VTIDogJzQwOTYnCi1LRVlE
T1dOIDogJzI1NicKLUtFWVBSRVNTIDogJzEwMjQnCi1LRVlVUCA6ICc1MTInCi1NT1VTRURPV04g
OiAnMScKLU1PVVNFRFJBRyA6ICczMicKLU1PVVNFTU9WRSA6ICcxNicKLU1PVVNFT1VUIDogJzgn
Ci1NT1VTRU9WRVIgOiAnNCcKLU1PVVNFVVAgOiAnMicKLVNFTEVDVCA6ICcxNjM4NCcKLWJ1YmJs
ZXMgOiAnZmFsc2UnCi1jYW5jZWxCdWJibGUgOiAnZmFsc2UnCi1jYW5jZWxhYmxlIDogJ3RydWUn
Ci1jbGlwYm9hcmREYXRhIDogJ3VuZGVmaW5lZCcKLWN1cnJlbnRUYXJnZXQgOiAnW29iamVjdCBY
TUxIdHRwUmVxdWVzdF0nCi1ldmVudFBoYXNlIDogJzAnCi1pbml0RXZlbnQgOiAnZnVuY3Rpb24g
aW5pdEV2ZW50KCkgewotICAgIFtuYXRpdmUgY29kZV0KLX0nCi1pbml0UHJvZ3Jlc3NFdmVudCA6
ICdmdW5jdGlvbiBpbml0UHJvZ3Jlc3NFdmVudCgpIHsKLSAgICBbbmF0aXZlIGNvZGVdCi19Jwot
bGVuZ3RoQ29tcHV0YWJsZSA6ICdmYWxzZScKLWxvYWRlZCA6ICcwJwotcG9zaXRpb24gOiAnMCcK
LXByZXZlbnREZWZhdWx0IDogJ2Z1bmN0aW9uIHByZXZlbnREZWZhdWx0KCkgewotICAgIFtuYXRp
dmUgY29kZV0KLX0nCi1yZXR1cm5WYWx1ZSA6ICd0cnVlJwotc3JjRWxlbWVudCA6ICdbb2JqZWN0
IFhNTEh0dHBSZXF1ZXN0XScKLXN0b3BQcm9wYWdhdGlvbiA6ICdmdW5jdGlvbiBzdG9wUHJvcGFn
YXRpb24oKSB7Ci0gICAgW25hdGl2ZSBjb2RlXQotfScKLXRhcmdldCA6ICdbb2JqZWN0IFhNTEh0
dHBSZXF1ZXN0XScKLXRvdGFsIDogJzAnCi10b3RhbFNpemUgOiAnMCcKLXR5cGUgOiAnbG9hZCcK
LQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20veG1saHR0cHJlcXVlc3QtZ2V0LnhodG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL3htbGh0dHByZXF1ZXN0LWdldC54aHRt
bAkocmV2aXNpb24gNDIxNDgpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS94bWxodHRwcmVxdWVz
dC1nZXQueGh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTEsMTExICswLDAgQEAKLTw/eG1sIHZlcnNp
b249IjEuMCI/PgotPCEtLSAKLSAgIC0gVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3Vi
amVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMKLSAgIC0gTGljZW5zZSBWZXJzaW9uIDEuMSAodGhl
ICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUKLSAgIC0gZXhjZXB0IGluIGNv
bXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mCi0gICAt
IHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLwotICAgLSAKLSAgIC0g
U29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24g
YW4gIkFTCi0gICAtIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0
aGVyIGV4cHJlc3Mgb3IKLSAgIC0gaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3Bl
Y2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCi0gICAtIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5k
ZXIgdGhlIExpY2Vuc2UuCi0gICAtIAotICAgLSBUaGUgT3JpZ2luYWwgQ29kZSBpcyBNb3ppbGxh
IFRlc3QgQ2FzZXMuCi0gICAtIAotICAgLSBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9y
aWdpbmFsIENvZGUgaXMgTmV0c2NhcGUgQ29tbXVuaWNhdGlvbnMKLSAgIC0gQ29ycC4gIFBvcnRp
b25zIGNyZWF0ZWQgYnkgTmV0c2NhcGUgQ29tbXVuaWNhdGlvbnMgQ29ycC4gYXJlIAotICAgLSBD
b3B5cmlnaHQgKEMpIDIwMDEgTmV0c2NhcGUgQ29tbXVuaWNhdGlvbnMgQ29ycC4gIEFsbAotICAg
LSBSaWdodHMgUmVzZXJ2ZWQuCi0gICAtIAotICAgLSBDb250cmlidXRvcihzKTogCi0gIC0tPgot
PGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgotPGhlYWQ+Ci08dGl0
bGU+R0VUIHRlc3Q8L3RpdGxlPgotPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KLS5ib3ggewotICBk
aXNwbGF5OiBib3g7Ci0gIGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOwotICBtYXJnaW4tYm90dG9t
OiAwLjVlbTsKLX0KLS5ib3hoZWFkZXIgewotICBmb250LXdlaWdodDogYm9sZDsKLSAgY29sb3I6
IG1hcm9vbjsKLX0KLXByZSB7Ci0gIG1hcmdpbi1sZWZ0OiAyZW07Ci19Ci08L3N0eWxlPgotPHNj
cmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotdmFyIHAgPSBuZXcgWE1MSHR0cFJlcXVlc3Qo
KTsKLQotaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKLQlsYXlvdXRUZXN0Q29udHJv
bGxlci5kdW1wQXNUZXh0KCk7Ci0KLWZ1bmN0aW9uIG15ZnVuYyhlKQotewotICBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgiaWQxIikuZmlyc3RDaGlsZC5ub2RlVmFsdWUgPSBwLnJlc3BvbnNlVGV4
dDsKLSAgaWYgKHAucmVzcG9uc2VYTUwpIHsKLSAgICB2YXIgcyA9IG5ldyBYTUxTZXJpYWxpemVy
KCk7Ci0gICAgdmFyIGQgPSBwLnJlc3BvbnNlWE1MOwotICAgIHZhciBzdHIgPSBzLnNlcmlhbGl6
ZVRvU3RyaW5nKGQpOwotICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJpZDIiKS5maXJzdENo
aWxkLm5vZGVWYWx1ZSA9IHN0cjsKLSAgfQotICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaWQz
IikuZmlyc3RDaGlsZC5ub2RlVmFsdWUgPSBwLmdldEFsbFJlc3BvbnNlSGVhZGVycygpOwotICBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaWQ0IikuZmlyc3RDaGlsZC5ub2RlVmFsdWUgPSBwLnN0
YXR1czsKLSAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImlkNSIpLmZpcnN0Q2hpbGQubm9kZVZh
bHVlID0gcC5zdGF0dXNUZXh0OwotICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaWQ2IikuZmly
c3RDaGlsZC5ub2RlVmFsdWUgPSBwLnJlYWR5U3RhdGU7Ci0gIHZhciBwcm9wTmFtZXMgPSBuZXcg
QXJyYXk7Ci0gIGZvciAocHJvcCBpbiBlKSB7Ci0gICAgaWYgKHByb3AgIT0gInRpbWVTdGFtcCIp
IHsKLSAgICAgICAgcHJvcE5hbWVzLnB1c2gocHJvcCk7Ci0gICAgfQotICB9Ci0gIHByb3BOYW1l
cy5zb3J0KCk7Ci0gIHZhciBldmVudFByb3BlcnRpZXMgPSAiIjsKLSAgZm9yIChpIGluIHByb3BO
YW1lcykgewotICAgICAgICB2YXIgcHJvcCA9IHByb3BOYW1lc1tpXTsKLSAgICAJZXZlbnRQcm9w
ZXJ0aWVzICs9IHByb3AgKyAiIDogJyIgKyBlW3Byb3BdICsgIidcbiI7Ci0gIH0KLSAgCi0gIGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJpZDciKS5maXJzdENoaWxkLm5vZGVWYWx1ZSA9IAotICAg
ICJFdmVudCBvYmplY3Q6ICIgKyBlICsgIlxuIiArCi0gICAgIkV2ZW50IHByb3BlcnRpZXM6XG4i
ICsgZXZlbnRQcm9wZXJ0aWVzOwotfQotCi1wLm9ubG9hZCA9IG15ZnVuYzsKLXAub3BlbigiR0VU
IiwgInJlc291cmNlcy94bWxodHRwcmVxdWVzdC1nZXQtZGF0YS54bWwiKTsKLQotZnVuY3Rpb24g
bXlzZW5kKCkKLXsKLSAgcC5zZW5kKG51bGwpOwotfQotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9k
eSBvbmxvYWQ9Im15c2VuZCgpOyI+Ci08aDE+R0VUIHRlc3Q8L2gxPgotCi08ZGl2IGNsYXNzPSJi
b3giPjxzcGFuIGNsYXNzPSJib3hoZWFkZXIiPnJlc3BvbnNlVGV4dDwvc3Bhbj4KLTxwcmUgaWQ9
ImlkMSI+QEBObyByZXN1bHRAQDwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJib3giPjxzcGFu
IGNsYXNzPSJib3hoZWFkZXIiPnJlc3BvbnNlWE1MIHNlcmlhbGl6ZWQ8L3NwYW4+Ci08cHJlIGlk
PSJpZDIiPkBATm8gcmVzdWx0QEA8L3ByZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0iYm94Ij48c3Bh
biBjbGFzcz0iYm94aGVhZGVyIj5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKTwvc3Bhbj4KLTxwcmUg
aWQ9ImlkMyI+QEBObyByZXN1bHRAQDwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJib3giPjxz
cGFuIGNsYXNzPSJib3hoZWFkZXIiPnN0YXR1czwvc3Bhbj4KLTxwcmUgaWQ9ImlkNCI+QEBObyBy
ZXN1bHRAQDwvcHJlPgotPC9kaXY+Ci08ZGl2IGNsYXNzPSJib3giPjxzcGFuIGNsYXNzPSJib3ho
ZWFkZXIiPnN0YXR1c1RleHQ8L3NwYW4+Ci08cHJlIGlkPSJpZDUiPkBATm8gcmVzdWx0QEA8L3By
ZT4KLTwvZGl2PgotPGRpdiBjbGFzcz0iYm94Ij48c3BhbiBjbGFzcz0iYm94aGVhZGVyIj5yZWFk
eVN0YXRlPC9zcGFuPgotPHByZSBpZD0iaWQ2Ij5AQE5vIHJlc3VsdEBAPC9wcmU+Ci08L2Rpdj4K
LTxkaXYgY2xhc3M9ImJveCI+PHNwYW4gY2xhc3M9ImJveGhlYWRlciI+RXZlbnQgaW5mb3JtYXRp
b248L3NwYW4+Ci08cHJlIGlkPSJpZDciPkBATm8gcmVzdWx0QEA8L3ByZT4KLTwvZGl2PgotCi08
L2JvZHk+Ci08L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS94bWxodHRwcmVxdWVz
dC1odG1sLXJlc3BvbnNlLWVuY29kaW5nLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9mYXN0L2RvbS94bWxodHRwcmVxdWVzdC1odG1sLXJlc3BvbnNlLWVuY29kaW5nLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gNDIxNDgpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS94bWxo
dHRwcmVxdWVzdC1odG1sLXJlc3BvbnNlLWVuY29kaW5nLWV4cGVjdGVkLnR4dAkod29ya2luZyBj
b3B5KQpAQCAtMSw0ICswLDAgQEAKLVRlc3QgZm9yIGJ1ZyAxNDI4ODogWE1MSHR0cFJlcXVlc3Qg
ZG9lc24ndCB1c2UgYSBjb3JyZWN0IGNvbnRlbnQgdHlwZSBmb3IgZmlsZTovLyBVUkxzLgotCi1I
VE1MLCBjaGFyc2V0IGRldGVybWluZWQgYnkgYSBNRVRBOiDQn9GA0L7QstC10YDQutCwCi1Bc3lu
YzogSFRNTCwgY2hhcnNldCBkZXRlcm1pbmVkIGJ5IGEgTUVUQTog0J/RgNC+0LLQtdGA0LrQsApJ
bmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20veG1saHR0cHJlcXVlc3QtaHRtbC1yZXNwb25zZS1l
bmNvZGluZy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL3htbGh0dHBy
ZXF1ZXN0LWh0bWwtcmVzcG9uc2UtZW5jb2RpbmcuaHRtbAkocmV2aXNpb24gNDIxNDgpCisrKyBM
YXlvdXRUZXN0cy9mYXN0L2RvbS94bWxodHRwcmVxdWVzdC1odG1sLXJlc3BvbnNlLWVuY29kaW5n
Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTEsNjIgKzAsMCBAQAotPGh0bWw+Ci08aGVhZD4KLTx0
aXRsZT5UZXN0IFhtbEh0dHBSZXF1ZXN0IHJlc3BvbnNlIGVuY29kaW5nIGhhbmRsaW5nPC90aXRs
ZT4KLTwvaGVhZD4KLTxib2R5PgotPHA+VGVzdCBmb3IgPGEgaHJlZj0iaHR0cDovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQyODgiPmJ1ZyAxNDI4ODwvYT46Ci1YTUxIdHRwUmVx
dWVzdCBkb2Vzbid0IHVzZSBhIGNvcnJlY3QgY29udGVudCB0eXBlIGZvciBmaWxlOi8vIFVSTHMu
PC9wPgotPHNjcmlwdD4KLQotICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCi0g
ICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKLQotICAgIHZhciBjb25z
b2xlX21lc3NhZ2VzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgib2wiKTsKLSAgICBkb2N1bWVu
dC5ib2R5LmFwcGVuZENoaWxkKGNvbnNvbGVfbWVzc2FnZXMpOwotICAgIAotICAgIHZhciBhc3lu
Y1N0ZXAgPSAxOwotICAgIAotICAgIGZ1bmN0aW9uIGxvZyhtZXNzYWdlKQotICAgIHsKLSAgICAg
ICAgdmFyIGl0ZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsaSIpOwotICAgICAgICBpdGVt
LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG1lc3NhZ2UpKTsKLSAgICAgICAg
Y29uc29sZV9tZXNzYWdlcy5hcHBlbmRDaGlsZChpdGVtKTsKLSAgICB9Ci0gICAgCi0gICAgZnVu
Y3Rpb24gZ2V0KHVybCwgYXN5bmMpCi0gICAgewotICAgICAgICBpZiAod2luZG93LlhNTEh0dHBS
ZXF1ZXN0KSB7Ci0gICAgICAgICAgICByZXEgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgcmVxID0gbmV3
IEFjdGl2ZVhPYmplY3QoIk1zeG1sMi5YTUxIVFRQIik7Ci0gICAgICAgICAgICB9IGNhdGNoIChl
eCkgewotICAgICAgICAgICAgICAgIHJlcSA9IG5ldyBBY3RpdmVYT2JqZWN0KCJNaWNyb3NvZnQu
WE1MSFRUUCIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBp
ZiAoYXN5bmMpCi0gICAgICAgICAgICByZXEub25yZWFkeXN0YXRlY2hhbmdlID0gcHJvY2Vzc1N0
YXRlQ2hhbmdlOwotICAgICAgICAKLSAgICAgICAgcmVxLm9wZW4oJ0dFVCcsIHVybCwgYXN5bmMp
OwotICAgICAgICByZXEuc2VuZChudWxsKTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiByZXE7
Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gcHJvY2Vzc1N0YXRlQ2hhbmdlKCl7Ci0gICAgICBpZiAo
cmVxLnJlYWR5U3RhdGUgPT0gNCkKLSAgICAgICAgbG9nKCJBc3luYzogSFRNTCwgY2hhcnNldCBk
ZXRlcm1pbmVkIGJ5IGEgTUVUQTogIiArIHJlcS5yZXNwb25zZVRleHQucmVwbGFjZSgvXHMvZywg
IiIpLnJlcGxhY2UoLy4qPGJvZHk+KC4qKTxcL2JvZHk+LiovLCAiJDEiKSk7Ci0gICAgfQotCi0g
ICAgdHJ5IHsKLSAgICAgICAgcmVxID0gIGdldCgncmVzb3VyY2VzLzEyNTEuaHRtbCcsIGZhbHNl
KTsKLSAgICAgICAgbG9nKCJIVE1MLCBjaGFyc2V0IGRldGVybWluZWQgYnkgYSBNRVRBOiAiICsg
cmVxLnJlc3BvbnNlVGV4dC5yZXBsYWNlKC9ccy9nLCAiIikucmVwbGFjZSgvLio8Ym9keT4oLiop
PFwvYm9keT4uKi8sICIkMSIpKTsKLSAgICB9IGNhdGNoIChleCkgewotICAgICAgICBsb2coIkV4
Y2VwdGlvbjogIiArIGV4LmRlc2NyaXB0aW9uKTsKLSAgICB9Ci0KLSAgICBnZXQoJ3Jlc291cmNl
cy8xMjUxLmh0bWwnLCB0cnVlKTsKLSAgICAKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpJ
bmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20veG1saHR0cHJlcXVlc3QtaW52YWxpZC12YWx1ZXMt
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL3htbGh0dHBy
ZXF1ZXN0LWludmFsaWQtdmFsdWVzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNDIxNDgpCisrKyBM
YXlvdXRUZXN0cy9mYXN0L2RvbS94bWxodHRwcmVxdWVzdC1pbnZhbGlkLXZhbHVlcy1leHBlY3Rl
ZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMCwwIEBACi1UaGlzIHRlc3RzIHRoYXQgc2V0
dGluZyBpbnZhbGlkIGhlYWRlciBuYW1lcywgdmFsdWVzIGFuZCB1c2luZyBhbiBpbnZhbGlkIG1l
dGhvZCBjYXVzZXMgWE1MSHR0cFJlcXVlc3QgdG8gdGhyb3cgdGhlIGFwcHJvcHJpYXRlIGV4Y2Vw
dGlvbnMuCi10ZXN0SW52YWxpZE1ldGhvZDogU1VDQ0VTUwotdGVzdEludmFsaWRIZWFkZXJOYW1l
OiBTVUNDRVNTCi10ZXN0SW52YWxpZEhlYWRlclZhbHVlczogU1VDQ0VTUwpJbmRleDogTGF5b3V0
VGVzdHMvZmFzdC9kb20veG1saHR0cHJlcXVlc3QtaW52YWxpZC12YWx1ZXMuaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS94bWxodHRwcmVxdWVzdC1pbnZhbGlkLXZhbHVl
cy5odG1sCShyZXZpc2lvbiA0MjE0OCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL3htbGh0dHBy
ZXF1ZXN0LWludmFsaWQtdmFsdWVzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTEsODkgKzAsMCBA
QAotPGh0bWw+Ci08c2NyaXB0PgotZnVuY3Rpb24gdGVzdEludmFsaWRNZXRob2QoKSB7Ci0gICAg
dmFyIHJlc3VsdCA9ICdGQUlMVVJFJzsKLSAgICAKLSAgICB2YXIgcmVxID0gbmV3IFhNTEh0dHBS
ZXF1ZXN0KCk7Ci0KLSAgICB0cnkgewotICAgICAgICByZXEub3BlbigndGVzdFxyXG5mb29iYXIn
LCB3aW5kb3cubG9jYXRpb24sIHRydWUpCi0gICAgfSBjYXRjaCAoZSkgewotICAgICAgICBpZiAo
ZS5jb2RlID09IERPTUV4Y2VwdGlvbi5TWU5UQVhfRVJSKQotICAgICAgICAgICAgcmVzdWx0ID0g
J1NVQ0NFU1MnOwotICAgIH0KLSAgICAKLSAgICBkZWJ1ZygndGVzdEludmFsaWRNZXRob2Q6ICcg
KyByZXN1bHQpOwotfQotCi1mdW5jdGlvbiB0ZXN0SW52YWxpZEhlYWRlck5hbWUoKSB7Ci0gICAg
dmFyIHJlc3VsdCA9ICdGQUlMVVJFJzsKLQotICAgIHZhciByZXEgPSBuZXcgWE1MSHR0cFJlcXVl
c3QoKTsKLSAgICByZXEub3BlbignR0VUJywgd2luZG93LmxvY2F0aW9uLCB0cnVlKQotICAgIAot
ICAgIHRyeSB7Ci0gICAgICAgIHJlcS5zZXRSZXF1ZXN0SGVhZGVyKCJob3N0OiIsICJleGFtcGxl
LmNvbSIpOwotICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgaWYgKGUuY29kZSA9PSBET01FeGNl
cHRpb24uU1lOVEFYX0VSUikKLSAgICAgICAgICAgIHJlc3VsdCA9ICdTVUNDRVNTJzsKLSAgICB9
Ci0gICAgCi0gICAgZGVidWcoJ3Rlc3RJbnZhbGlkSGVhZGVyTmFtZTogJyArIHJlc3VsdCk7ICAg
IAotfQotCi1mdW5jdGlvbiB0ZXN0SW52YWxpZEhlYWRlclZhbHVlcygpIHsKLSAgICB2YXIgcmVz
dWx0ID0gJ0ZBSUxVUkUnOwotICAgIHZhciBzdWNjZXNzQ291bnQgPSAwOwotCi0gICAgdmFyIHJl
cSA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOwotICAgIHJlcS5vcGVuKCdHRVQnLCB3aW5kb3cubG9j
YXRpb24sIHRydWUpCi0gICAgCi0gICAgdHJ5IHsKLSAgICAgICAgcmVxLnNldFJlcXVlc3RIZWFk
ZXIoIlgtSGFjayIsICJUZXN0XHJcbkhvc3Q6IHd3dy5leGFtcGxlLmNvbVxyXG5cclxuR0VUIC8g
SFRUUC8xLjEiKTsKLSAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgIGlmIChlLmNvZGUgPT0gRE9N
RXhjZXB0aW9uLlNZTlRBWF9FUlIpCi0gICAgICAgICAgICBzdWNjZXNzQ291bnQrKzsKLSAgICB9
Ci0KLSAgICB0cnkgewotICAgICAgICByZXEuc2V0UmVxdWVzdEhlYWRlcigiWC1IYWNrIiwgIlRl
c3Rcbkhvc3Q6IHd3dy5leGFtcGxlLmNvbVxuXG5HRVQgLyBIVFRQLzEuMSIpOwotICAgIH0gY2F0
Y2ggKGUpIHsKLSAgICAgICAgaWYgKGUuY29kZSA9PSBET01FeGNlcHRpb24uU1lOVEFYX0VSUikK
LSAgICAgICAgICAgIHN1Y2Nlc3NDb3VudCsrOwotICAgIH0KLQotICAgIHRyeSB7Ci0gICAgICAg
IHJlcS5zZXRSZXF1ZXN0SGVhZGVyKCJYLUhhY2siLCAiVGVzdFxySG9zdDogd3d3LmV4YW1wbGUu
Y29tXHJcckdFVCAvIEhUVFAvMS4xIik7Ci0gICAgfSBjYXRjaCAoZSkgewotICAgICAgICBpZiAo
ZS5jb2RlID09IERPTUV4Y2VwdGlvbi5TWU5UQVhfRVJSKQotICAgICAgICAgICAgc3VjY2Vzc0Nv
dW50Kys7Ci0gICAgfQotICAgIAotICAgIGlmIChzdWNjZXNzQ291bnQgPT0gMykKLSAgICAgICAg
cmVzdWx0ID0gJ1NVQ0NFU1MnOwotICAgICAgICAKLSAgICBkZWJ1ZygndGVzdEludmFsaWRIZWFk
ZXJWYWx1ZXM6ICcgKyByZXN1bHQpOyAgICAKLX0KLQotZnVuY3Rpb24gZGVidWcoc3RyKSB7Ci0g
ICAgdmFyIGNvbnNvbGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpOwotICAg
IHZhciBsaSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpJyk7Ci0gICAgbGkuYXBwZW5kQ2hp
bGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoc3RyKSk7Ci0gICAgY29uc29sZS5hcHBlbmRDaGls
ZChsaSk7Ci19Ci0KLWZ1bmN0aW9uIHJ1blRlc3QoKSB7Ci0gICAgaWYgKHdpbmRvdy5sYXlvdXRU
ZXN0Q29udHJvbGxlcikKLSAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgp
OwotCi0gICAgdGVzdEludmFsaWRNZXRob2QoKTsKLSAgICB0ZXN0SW52YWxpZEhlYWRlck5hbWUo
KTsKLSAgICB0ZXN0SW52YWxpZEhlYWRlclZhbHVlcygpOwotfQotPC9zY3JpcHQ+Ci08Ym9keSBv
bmxvYWQ9InJ1blRlc3QoKSI+Ci0gICAgVGhpcyB0ZXN0cyB0aGF0IHNldHRpbmcgaW52YWxpZCBo
ZWFkZXIgbmFtZXMsIHZhbHVlcyBhbmQgdXNpbmcgYW4gaW52YWxpZCBtZXRob2QgY2F1c2VzIFhN
TEh0dHBSZXF1ZXN0IHRvIHRocm93IHRoZSBhcHByb3ByaWF0ZSBleGNlcHRpb25zLgotPC9ib2R5
PgotPHVsIGlkPSJjb25zb2xlIj4KLTwvdWw+Ci08L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9m
YXN0L2RvbS9yZXNvdXJjZXMvMTI1MS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3QvZG9tL3Jlc291cmNlcy8xMjUxLmh0bWwJKHJldmlzaW9uIDQyMTQ4KQorKysgTGF5b3V0VGVz
dHMvZmFzdC9kb20vcmVzb3VyY2VzLzEyNTEuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsw
LDAgQEAKLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJjb250ZW50LXR5cGUiIGNv
bnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTEiPgotPC9oZWFkPgotPGJvZHk+
z/Du4uXw6uA8L2JvZHk+Ci08L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9yZXNv
dXJjZXMveG1saHR0cHJlcXVlc3QtZ2V0LWRhdGEueG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3QvZG9tL3Jlc291cmNlcy94bWxodHRwcmVxdWVzdC1nZXQtZGF0YS54bWwJKHJldmlz
aW9uIDQyMTQ4KQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vcmVzb3VyY2VzL3htbGh0dHByZXF1
ZXN0LWdldC1kYXRhLnhtbAkod29ya2luZyBjb3B5KQpAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZl
cnNpb249IjEuMCI/PgotPCFET0NUWVBFIGRvYyBbCi08IUFUVExJU1QgZCBpZCBJRCAjSU1QTElF
RD4KLV0+Ci08ZG9jPgotICA8Zm9vIHhtbG5zPSJmb29iYXIiPk9uZTwvZm9vPiA8eDpiYXIgeG1s
bnM6eD0iYmFyZm9vIj5Ud288L3g6YmFyPgotICA8ZCBpZD0iaWQzIj5UaHJlZTwvZD4KLTwvZG9j
PgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIveG1saHR0cHJlcXVlc3QtYmFkLW1pbWV0
eXBlLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2xvYWRlci94
bWxodHRwcmVxdWVzdC1iYWQtbWltZXR5cGUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA0MjE0OCkK
KysrIExheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3htbGh0dHByZXF1ZXN0LWJhZC1taW1ldHlwZS1l
eHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsOSArMCwwIEBACi1UaGlzIHRlc3QgY2hl
Y2tzIGZvciA8cmRhcjovL3Byb2JsZW0vNTMwMzU2Nz4gUkVHUkVTU0lPTjogWE1MSHR0cFJlcXVl
c3QucmVzcG9uc2VYTUwgcmV0dXJucyBOVUxMIGlmIHJlc3BvbnNlIE1JTUUgdHlwZSBpcyBub3Qg
WE1MIC0tIGJyZWFrcyBXaWtpcGVkaWEgd2lkZ2V0Ci0KLVBBU1M6IE5vIGV4Y2VwdGlvbi4KLXJl
YWR5U3RhdGU6IDQgKG51bWJlcikKLXJlc3BvbnNlVGV4dDogPD94bWwgdmVyc2lvbj0iMS4wIiBl
bmNvZGluZz0iVVRGLTgiPz4uLi4gKHN0cmluZykKLXJlc3BvbnNlWE1MOiBbb2JqZWN0IERvY3Vt
ZW50XSAob2JqZWN0KQotc3RhdHVzOiAwIChudW1iZXIpCi1zdGF0dXNUZXh0OiAgKHN0cmluZykK
LQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIveG1saHR0cHJlcXVlc3QtYmFkLW1pbWV0
eXBlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIveG1saHR0cHJl
cXVlc3QtYmFkLW1pbWV0eXBlLmh0bWwJKHJldmlzaW9uIDQyMTQ4KQorKysgTGF5b3V0VGVzdHMv
ZmFzdC9sb2FkZXIveG1saHR0cHJlcXVlc3QtYmFkLW1pbWV0eXBlLmh0bWwJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNTggKzAsMCBAQAotPHA+VGhpcyB0ZXN0IGNoZWNrcyBmb3IgPGEgaHJlZj0icmRh
cjovL3Byb2JsZW0vNTMwMzU2NyI+Jmx0O3JkYXI6Ly9wcm9ibGVtLzUzMDM1NjcmZ3Q7PC9hPiBS
RUdSRVNTSU9OOiBYTUxIdHRwUmVxdWVzdC5yZXNwb25zZVhNTCByZXR1cm5zIE5VTEwgaWYgcmVz
cG9uc2UgTUlNRSB0eXBlIGlzIG5vdCBYTUwgLS0gYnJlYWtzIFdpa2lwZWRpYSB3aWRnZXQ8L3A+
Ci08aHI+Ci0KLTxwcmUgaWQ9ImNvbnNvbGUiPjwvcHJlPgotCi08c2NyaXB0PgotZnVuY3Rpb24g
bG9nKHMpCi17Ci0gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUiKS5hcHBlbmRD
aGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShzICsgIlxuIikpOwotfQotCi1mdW5jdGlvbiBs
b2dQcm9wZXJ0eShvYmplY3QsIHByb3BlcnR5TmFtZSkKLXsKLSAgICB2YXIgcHJvcGVydHk7Ci0g
ICAgdHJ5IHsKLSAgICAgICAgcHJvcGVydHkgPSBvYmplY3RbcHJvcGVydHlOYW1lXTsKLSAgICB9
IGNhdGNoKGUpIHsKLSAgICAgICAgcHJvcGVydHkgPSBlOwotICAgIH0KLSAgICAKLSAgICBpZiAo
U3RyaW5nKHByb3BlcnR5KS5pbmRleE9mKCJcbiIpICE9IC0xKQotICAgICAgICBwcm9wZXJ0eSA9
IHByb3BlcnR5LnNwbGl0KCJcbiIpWzBdICsgIi4uLiI7Ci0gICAgbG9nKHByb3BlcnR5TmFtZSAr
ICI6ICIgKyBwcm9wZXJ0eSArICIgKCIgKyB0eXBlb2YgcHJvcGVydHkgKyAiKSIpOwotfQotCi1m
dW5jdGlvbiBzZW5kUmVxdWVzdCh1cmwpIAotewotICAgIHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJl
cXVlc3QoKTsKLSAgICByZXF1ZXN0Lm9wZW4oIkdFVCIsIHVybCwgZmFsc2UpOwotICAgIHJlcXVl
c3Quc2VuZChudWxsKTsKLSAgICByZXR1cm4gcmVxdWVzdDsKLX0KLQotZnVuY3Rpb24gdGVzdCh1
cmwpCi17Ci0gICAgdHJ5IHsKLSAgICAgICAgc2VuZFJlcXVlc3QodXJsKTsKLSAgICAgICAgbG9n
KCJQQVNTOiBObyBleGNlcHRpb24uIik7Ci0gICAgfSBjYXRjaChlKSB7Ci0gICAgICAgIGxvZygi
RkFJTDogQ2F1Z2h0IGV4Y2VwdGlvbiAiICsgZSArICIuIik7Ci0gICAgfQotCi0gICAgdmFyIHBy
b3BlcnRpZXMgPSBbCi0gICAgICAgICJyZWFkeVN0YXRlIiwKLSAgICAgICAgInJlc3BvbnNlVGV4
dCIsCi0gICAgICAgICJyZXNwb25zZVhNTCIsCi0gICAgICAgICJzdGF0dXMiLAotICAgICAgICAi
c3RhdHVzVGV4dCIsCi0gICAgXTsKLSAgICAKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3Bl
cnRpZXMubGVuZ3RoOyBpKyspIC8vPgotICAgICAgICBsb2dQcm9wZXJ0eShyZXF1ZXN0LCBwcm9w
ZXJ0aWVzW2ldKTsKLX0KLQotaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKLSAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7Ci10ZXN0KCJyZXNvdXJjZXMvcGxpc3Qu
YXBwIik7Ci08L3NjcmlwdD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3htbGh0dHBy
ZXF1ZXN0LW1pc3NpbmctZmlsZS1leGNlcHRpb24tZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3htbGh0dHByZXF1ZXN0LW1pc3NpbmctZmlsZS1leGNl
cHRpb24tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA0MjE0OCkKKysrIExheW91dFRlc3RzL2Zhc3Qv
bG9hZGVyL3htbGh0dHByZXF1ZXN0LW1pc3NpbmctZmlsZS1leGNlcHRpb24tZXhwZWN0ZWQudHh0
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDggKzAsMCBAQAotVGhpcyB0ZXN0IGNoZWNrcyBmb3IgcmRh
cjovL3Byb2JsZW0vNDk2MjI5OCBSRUdSRVNTSU9OOiBTeW5jaHJvbm91cyBYSFIgZm9yIG1pc3Np
bmcgbG9jYWwgZmlsZSB0aHJvd3MgZXhjZXB0aW9uIC0tIGJyZWFrcyBXaWtpcGVkaWEgd2lkZ2V0
Ci0KLVBBU1M6IE5vIGV4Y2VwdGlvbi4KLXJlYWR5U3RhdGU6IDQgKG51bWJlcikKLXJlc3BvbnNl
VGV4dDogIChzdHJpbmcpCi1yZXNwb25zZVhNTDogbnVsbCAob2JqZWN0KQotc3RhdHVzVGV4dDog
IChzdHJpbmcpCi0KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3htbGh0dHByZXF1ZXN0
LW1pc3NpbmctZmlsZS1leGNlcHRpb24uaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L2xvYWRlci94bWxodHRwcmVxdWVzdC1taXNzaW5nLWZpbGUtZXhjZXB0aW9uLmh0bWwJKHJl
dmlzaW9uIDQyMTQ4KQorKysgTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIveG1saHR0cHJlcXVlc3Qt
bWlzc2luZy1maWxlLWV4Y2VwdGlvbi5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUxICswLDAg
QEAKLTxwPlRoaXMgdGVzdCBjaGVja3MgZm9yIHJkYXI6Ly9wcm9ibGVtLzQ5NjIyOTggUkVHUkVT
U0lPTjogU3luY2hyb25vdXMgWEhSIGZvciBtaXNzaW5nIGxvY2FsIGZpbGUgdGhyb3dzIGV4Y2Vw
dGlvbiAtLSBicmVha3MgV2lraXBlZGlhIHdpZGdldDwvcD4KLTxocj4KLQotPHByZSBpZD0iY29u
c29sZSI+PC9wcmU+Ci0KLTxzY3JpcHQ+Ci1mdW5jdGlvbiBsb2cocykKLXsKLSAgICBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRl
eHROb2RlKHMgKyAiXG4iKSk7Ci19Ci0KLWZ1bmN0aW9uIGxvZ1Byb3BlcnR5KG9iamVjdCwgcHJv
cGVydHlOYW1lKQotewotICAgIHZhciBwcm9wZXJ0eTsKLSAgICB0cnkgewotICAgICAgICBwcm9w
ZXJ0eSA9IG9iamVjdFtwcm9wZXJ0eU5hbWVdOwotICAgIH0gY2F0Y2goZSkgewotICAgICAgICBw
cm9wZXJ0eSA9IGU7Ci0gICAgfQotICAgIGxvZyhwcm9wZXJ0eU5hbWUgKyAiOiAiICsgcHJvcGVy
dHkgKyAiICgiICsgdHlwZW9mIHByb3BlcnR5ICsgIikiKTsKLX0KLQotZnVuY3Rpb24gc2VuZFJl
cXVlc3QoKSAKLXsKLSAgICB2YXIgcmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOwotICAg
IHJlcXVlc3Qub3BlbigiR0VUIiwgImZpbGU6Ly8vaWFtdGhld2FscnVzIiwgZmFsc2UpOwotICAg
IHJlcXVlc3Quc2VuZChudWxsKTsKLSAgICByZXR1cm4gcmVxdWVzdDsKLX0KLQotaWYgKHdpbmRv
dy5sYXlvdXRUZXN0Q29udHJvbGxlcikKLSAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNU
ZXh0KCk7Ci0KLXRyeSB7Ci0gICAgdmFyIHJlcXVlc3QgPSBzZW5kUmVxdWVzdCgpOwotCi0gICAg
dmFyIHByb3BlcnRpZXMgPSBbCi0gICAgICAgICJyZWFkeVN0YXRlIiwKLSAgICAgICAgInJlc3Bv
bnNlVGV4dCIsCi0gICAgICAgICJyZXNwb25zZVhNTCIsCi0gICAgICAgIC8qICJzdGF0dXMiLCAt
LSBleGNsdWRlZCBiZWNhdXNlIGl0IGRpZmZlcnMgb24gdGlnZXIgYW5kIGxlb3BhcmQgKi8KLSAg
ICAgICAgInN0YXR1c1RleHQiLAotICAgIF07Ci0gICAgCi0gICAgbG9nKCJQQVNTOiBObyBleGNl
cHRpb24uIik7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsr
KSAvLz4KLSAgICAgICAgbG9nUHJvcGVydHkocmVxdWVzdCwgcHJvcGVydGllc1tpXSk7Ci19IGNh
dGNoKGUpIHsKLSAgICBsb2coIkZBSUw6IENhdWdodCBleGNlcHRpb24gIiArIGUgKyAiLiIpOwot
fQotPC9zY3JpcHQ+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2xvYWRlci9yZXNvdXJjZXMvcGxp
c3QuYXBwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3Jlc291cmNlcy9w
bGlzdC5hcHAJKHJldmlzaW9uIDQyMTQ4KQorKysgTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIvcmVz
b3VyY2VzL3BsaXN0LmFwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxNiArMCwwIEBACi08P3htbCB2
ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIHBsaXN0IFBVQkxJQyAi
LS8vQXBwbGUgQ29tcHV0ZXIvL0RURCBQTElTVCAxLjAvL0VOIiAiaHR0cDovL3d3dy5hcHBsZS5j
b20vRFREcy9Qcm9wZXJ0eUxpc3QtMS4wLmR0ZCI+Ci08cGxpc3QgdmVyc2lvbj0iMS4wIj4KLTxk
aWN0PgotCTxrZXk+QnVpbGRWZXJzaW9uPC9rZXk+Ci0JPHN0cmluZz4wMDA8L3N0cmluZz4KLQk8
a2V5PkNGQnVuZGxlU2hvcnRWZXJzaW9uU3RyaW5nPC9rZXk+Ci0JPHN0cmluZz4wLjkuMjwvc3Ry
aW5nPgotCTxrZXk+Q0ZCdW5kbGVWZXJzaW9uPC9rZXk+Ci0JPHN0cmluZz4wLjkuMjwvc3RyaW5n
PgotCTxrZXk+UHJvamVjdE5hbWU8L2tleT4KLQk8c3RyaW5nPldpa2lwZWRpYVdpZGdldDwvc3Ry
aW5nPgotCTxrZXk+U291cmNlVmVyc2lvbjwva2V5PgotCTxzdHJpbmc+MDAwPC9zdHJpbmc+Ci08
L2RpY3Q+Ci08L3BsaXN0PgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC94bWxodHRwcmVxdWVzdC9u
dWxsLWRvY3VtZW50LXhtbGh0dHByZXF1ZXN0LW9wZW4tZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3QveG1saHR0cHJlcXVlc3QvbnVsbC1kb2N1bWVudC14bWxodHRw
cmVxdWVzdC1vcGVuLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNDIxNDgpCShmcm9tIExheW91dFRl
c3RzL2Zhc3QvZG9tL251bGwtZG9jdW1lbnQteG1saHR0cHJlcXVlc3Qtb3Blbi1leHBlY3RlZC50
eHQ6NDIxNDgpCisrKyBMYXlvdXRUZXN0cy9mYXN0L3htbGh0dHByZXF1ZXN0L251bGwtZG9jdW1l
bnQteG1saHR0cHJlcXVlc3Qtb3Blbi1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw0IEBACitUaGlzIHRlc3QgY2hlY2tzIGZvciBhIE5VTEwgZG9jdW1lbnQgY3Jhc2ggdGhh
dCBjYW4gaGFwcGVuIHdoZW4gY2FsbGluZyBYTUxIdHRwUmVxdWVzdC5vcGVuLiBJZiB0aGUgdGVz
dCBwYXNzZXMsIHlvdSdsbCBzZWUgYSBQQVNTIG1lc3NhZ2UgYmVsb3cuCisKK1BBU1M6IFlvdSBk
aWRuJ3QgY3Jhc2guCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QveG1saHR0cHJlcXVlc3QvbnVs
bC1kb2N1bWVudC14bWxodHRwcmVxdWVzdC1vcGVuLmh0bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC94bWxodHRwcmVxdWVzdC9udWxsLWRvY3VtZW50LXhtbGh0dHByZXF1ZXN0LW9w
ZW4uaHRtbAkocmV2aXNpb24gNDIxNDgpCShmcm9tIExheW91dFRlc3RzL2Zhc3QvZG9tL251bGwt
ZG9jdW1lbnQteG1saHR0cHJlcXVlc3Qtb3Blbi5odG1sOjQyMTQ4KQorKysgTGF5b3V0VGVzdHMv
ZmFzdC94bWxodHRwcmVxdWVzdC9udWxsLWRvY3VtZW50LXhtbGh0dHByZXF1ZXN0LW9wZW4uaHRt
bAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACis8cD5UaGlzIHRlc3QgY2hlY2tzIGZv
ciBhIE5VTEwgZG9jdW1lbnQgY3Jhc2ggdGhhdCBjYW4gaGFwcGVuIHdoZW4gY2FsbGluZworWE1M
SHR0cFJlcXVlc3Qub3Blbi4gSWYgdGhlIHRlc3QgcGFzc2VzLCB5b3UnbGwgc2VlIGEgUEFTUyBt
ZXNzYWdlIGJlbG93LjwvcD4KKzxocj4KKzxwcmUgaWQ9InByZSI+PC9wcmU+Cis8aWZyYW1lIG5h
bWU9ImlmcmFtZSIgc3R5bGU9InZpc2liaWxpdHk6aGlkZGVuIiBzcmM9ImRvZXMtbm90LWV4aXN0
LmJvZ3VzIj48L2lmcmFtZT4gPCEtLSBmb3JjZXMgYXN5bmNocm9ub3VzIGxvYWQgLS0+Cis8c2Ny
aXB0PgorPCEtLQorZnVuY3Rpb24gbG9nKHMpCit7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoInByZSIpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHMpKTsKK30KKwor
ZnVuY3Rpb24gdGVzdCgpCit7CisgICAgdmFyIHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3Qo
KTsKKyAgICByZXF1ZXN0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKGV2ZW50KSB7IGlm
IChldmVudC50YXJnZXQucmVhZHlTdGF0ZSA9PSAxKSBwYXJlbnQucGFzcygpOyB9OworICAgIHJl
cXVlc3Qub3BlbigiR0VUIiwgd2luZG93LmxvY2F0aW9uKTsKK30KKworZnVuY3Rpb24gcGFzcygp
Cit7CisgICAgbG9nKCJQQVNTOiBZb3UgZGlkbid0IGNyYXNoLiIpOworCisgICAgaWYgKHdpbmRv
dy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90
aWZ5RG9uZSgpOworfQorCitmdW5jdGlvbiBtYWluKCkKK3sKKyAgICBpZiAod2luZG93LmxheW91
dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1Rl
eHQoKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAg
IH0gICAgCisgICAgCisgICAgLy8gc2V0VGltZW91dCBmb3JjZXMgZXhlY3V0aW9uIGluIHRoZSBj
b250ZXh0IG9mIHRoZSBmcmFtZQorICAgIGZyYW1lc1swXS5zZXRUaW1lb3V0KHRlc3QsIDApOwor
fQorCittYWluKCk7CistLT4KKzwvc2NyaXB0PgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC94bWxo
dHRwcmVxdWVzdC94bWxodHRwcmVxdWVzdC1iYWQtbWltZXR5cGUtZXhwZWN0ZWQudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3Qt
YmFkLW1pbWV0eXBlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNDIxNDgpCShmcm9tIExheW91dFRl
c3RzL2Zhc3QvbG9hZGVyL3htbGh0dHByZXF1ZXN0LWJhZC1taW1ldHlwZS1leHBlY3RlZC50eHQ6
NDIxNDgpCisrKyBMYXlvdXRUZXN0cy9mYXN0L3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0
LWJhZC1taW1ldHlwZS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5IEBA
CitUaGlzIHRlc3QgY2hlY2tzIGZvciA8cmRhcjovL3Byb2JsZW0vNTMwMzU2Nz4gUkVHUkVTU0lP
TjogWE1MSHR0cFJlcXVlc3QucmVzcG9uc2VYTUwgcmV0dXJucyBOVUxMIGlmIHJlc3BvbnNlIE1J
TUUgdHlwZSBpcyBub3QgWE1MIC0tIGJyZWFrcyBXaWtpcGVkaWEgd2lkZ2V0CisKK1BBU1M6IE5v
IGV4Y2VwdGlvbi4KK3JlYWR5U3RhdGU6IDQgKG51bWJlcikKK3Jlc3BvbnNlVGV4dDogPD94bWwg
dmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4uLi4gKHN0cmluZykKK3Jlc3BvbnNlWE1M
OiBbb2JqZWN0IERvY3VtZW50XSAob2JqZWN0KQorc3RhdHVzOiAwIChudW1iZXIpCitzdGF0dXNU
ZXh0OiAgKHN0cmluZykKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC94bWxodHRwcmVxdWVzdC94
bWxodHRwcmVxdWVzdC1iYWQtbWltZXR5cGUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9mYXN0L3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LWJhZC1taW1ldHlwZS5odG1sCShy
ZXZpc2lvbiA0MjE0OCkJKGZyb20gTGF5b3V0VGVzdHMvZmFzdC9sb2FkZXIveG1saHR0cHJlcXVl
c3QtYmFkLW1pbWV0eXBlLmh0bWw6NDIxNDgpCisrKyBMYXlvdXRUZXN0cy9mYXN0L3htbGh0dHBy
ZXF1ZXN0L3htbGh0dHByZXF1ZXN0LWJhZC1taW1ldHlwZS5odG1sCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNTggQEAKKzxwPlRoaXMgdGVzdCBjaGVja3MgZm9yIDxhIGhyZWY9InJkYXI6Ly9w
cm9ibGVtLzUzMDM1NjciPiZsdDtyZGFyOi8vcHJvYmxlbS81MzAzNTY3Jmd0OzwvYT4gUkVHUkVT
U0lPTjogWE1MSHR0cFJlcXVlc3QucmVzcG9uc2VYTUwgcmV0dXJucyBOVUxMIGlmIHJlc3BvbnNl
IE1JTUUgdHlwZSBpcyBub3QgWE1MIC0tIGJyZWFrcyBXaWtpcGVkaWEgd2lkZ2V0PC9wPgorPGhy
PgorCis8cHJlIGlkPSJjb25zb2xlIj48L3ByZT4KKworPHNjcmlwdD4KK2Z1bmN0aW9uIGxvZyhz
KQoreworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlIikuYXBwZW5kQ2hpbGQo
ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocyArICJcbiIpKTsKK30KKworZnVuY3Rpb24gbG9nUHJv
cGVydHkob2JqZWN0LCBwcm9wZXJ0eU5hbWUpCit7CisgICAgdmFyIHByb3BlcnR5OworICAgIHRy
eSB7CisgICAgICAgIHByb3BlcnR5ID0gb2JqZWN0W3Byb3BlcnR5TmFtZV07CisgICAgfSBjYXRj
aChlKSB7CisgICAgICAgIHByb3BlcnR5ID0gZTsKKyAgICB9CisgICAgCisgICAgaWYgKFN0cmlu
Zyhwcm9wZXJ0eSkuaW5kZXhPZigiXG4iKSAhPSAtMSkKKyAgICAgICAgcHJvcGVydHkgPSBwcm9w
ZXJ0eS5zcGxpdCgiXG4iKVswXSArICIuLi4iOworICAgIGxvZyhwcm9wZXJ0eU5hbWUgKyAiOiAi
ICsgcHJvcGVydHkgKyAiICgiICsgdHlwZW9mIHByb3BlcnR5ICsgIikiKTsKK30KKworZnVuY3Rp
b24gc2VuZFJlcXVlc3QodXJsKSAKK3sKKyAgICByZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0
KCk7CisgICAgcmVxdWVzdC5vcGVuKCJHRVQiLCB1cmwsIGZhbHNlKTsKKyAgICByZXF1ZXN0LnNl
bmQobnVsbCk7CisgICAgcmV0dXJuIHJlcXVlc3Q7Cit9CisKK2Z1bmN0aW9uIHRlc3QodXJsKQor
eworICAgIHRyeSB7CisgICAgICAgIHNlbmRSZXF1ZXN0KHVybCk7CisgICAgICAgIGxvZygiUEFT
UzogTm8gZXhjZXB0aW9uLiIpOworICAgIH0gY2F0Y2goZSkgeworICAgICAgICBsb2coIkZBSUw6
IENhdWdodCBleGNlcHRpb24gIiArIGUgKyAiLiIpOworICAgIH0KKworICAgIHZhciBwcm9wZXJ0
aWVzID0gWworICAgICAgICAicmVhZHlTdGF0ZSIsCisgICAgICAgICJyZXNwb25zZVRleHQiLAor
ICAgICAgICAicmVzcG9uc2VYTUwiLAorICAgICAgICAic3RhdHVzIiwKKyAgICAgICAgInN0YXR1
c1RleHQiLAorICAgIF07CisgICAgCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVz
Lmxlbmd0aDsgaSsrKSAvLz4KKyAgICAgICAgbG9nUHJvcGVydHkocmVxdWVzdCwgcHJvcGVydGll
c1tpXSk7Cit9CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOwordGVzdCgicmVzb3VyY2VzL3BsaXN0LmFwcCIp
OworPC9zY3JpcHQ+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3htbGh0dHByZXF1ZXN0L3htbGh0
dHByZXF1ZXN0LWdjLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0
L3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LWdjLWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
NDIxNDgpCShmcm9tIExheW91dFRlc3RzL2Zhc3QvZG9tL3htbGh0dHByZXF1ZXN0LWdjLWV4cGVj
dGVkLnR4dDo0MjE0OCkKKysrIExheW91dFRlc3RzL2Zhc3QveG1saHR0cHJlcXVlc3QveG1saHR0
cHJlcXVlc3QtZ2MtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNiBAQAor
VGVzdHMgdGhhdCBnYXJiYWdlIGNvbGxlY3Rpb24gZG9lc24ndCBkcm9wIHRoZSBYTUxIdHRwUmVx
dWVzdCBKUyB3cmFwcGVyIHVudGlsIHRoZSBzZW5kIGNvbW1hbmQgaXMgZG9uZS4gWW91IHNob3Vs
ZCBzZWUgJ2JhcicgZm91ciB0aW1lcyBiZWxvdy4KK2JhcgorYmFyCitiYXIKK2JhcgorCkluZGV4
OiBMYXlvdXRUZXN0cy9mYXN0L3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LWdjLmh0bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC94bWxodHRwcmVxdWVzdC94bWxodHRwcmVx
dWVzdC1nYy5odG1sCShyZXZpc2lvbiA0MjE0OCkJKGZyb20gTGF5b3V0VGVzdHMvZmFzdC9kb20v
eG1saHR0cHJlcXVlc3QtZ2MuaHRtbDo0MjE0OCkKKysrIExheW91dFRlc3RzL2Zhc3QveG1saHR0
cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtZ2MuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDQwIEBACis8aHRtbD4KKzxzY3JpcHQ+CitmdW5jdGlvbiBzdGF0ZUNoYW5nZSgpIHsKKyAgICBk
b2N1bWVudC53cml0ZSh0aGlzLmZvbyArICc8YnI+Jyk7Cit9CisKK2Z1bmN0aW9uIGNvbGxlY3RH
YXJiYWdlKCkgeworICAgIGlmICh3aW5kb3cuR0NDb250cm9sbGVyKSB7CisgICAgICAgIHdpbmRv
dy5HQ0NvbnRyb2xsZXIuY29sbGVjdCgpOworICAgIH0gZWxzZSB7CisgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IDUwMDAwOyBpKyspCisgICAgICAgICAgbmV3IE9iamVjdCgpOworICAgIH0KK30K
KworZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICBkb2N1bWVudC53cml0ZSgiVGVzdHMgdGhhdCBn
YXJiYWdlIGNvbGxlY3Rpb24gZG9lc24ndCBkcm9wIHRoZSBYTUxIdHRwUmVxdWVzdCBKUyB3cmFw
cGVyIHVudGlsIHRoZSBzZW5kIGNvbW1hbmQgaXMgZG9uZS4gIFlvdSBzaG91bGQgc2VlICdiYXIn
IGZvdXIgdGltZXMgYmVsb3cuPGJyPiIpOworCisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29u
dHJvbGxlcikgeworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7Cisg
ICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICB9CisKKyAg
ICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisgICAgeGhyLmZvbyA9ICdiYXInOwor
ICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBzdGF0ZUNoYW5nZTsKKyAgICB4aHIub3Blbigi
R0VUIiwgInhtbGh0dHByZXF1ZXN0LWdjLmh0bWwiLCB0cnVlKTsKKyAgICB4aHIuc2VuZChudWxs
KTsKKworICAgIHhociA9IG51bGw7CisgICAgY29sbGVjdEdhcmJhZ2UoKTsKKworICAgIGlmICh3
aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVy
Lm5vdGlmeURvbmUoKTsKK30KKworPC9zY3JpcHQ+Cis8Ym9keSBvbmxvYWQ9J3J1blRlc3QoKSc+
Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3htbGh0dHByZXF1ZXN0
L3htbGh0dHByZXF1ZXN0LWdldC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC94bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVzdC1nZXQtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiA0MjE0OCkJKGZyb20gTGF5b3V0VGVzdHMvZmFzdC9kb20veG1saHR0cHJlcXVlc3Qt
Z2V0LWV4cGVjdGVkLnR4dDo0MjE0OCkKKysrIExheW91dFRlc3RzL2Zhc3QveG1saHR0cHJlcXVl
c3QveG1saHR0cHJlcXVlc3QtZ2V0LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDcyIEBACitHRVQgdGVzdAorCityZXNwb25zZVRleHQKKzw/eG1sIHZlcnNpb249IjEuMCI/
PgorPCFET0NUWVBFIGRvYyBbCis8IUFUVExJU1QgZCBpZCBJRCAjSU1QTElFRD4KK10+Cis8ZG9j
PgorICA8Zm9vIHhtbG5zPSJmb29iYXIiPk9uZTwvZm9vPiA8eDpiYXIgeG1sbnM6eD0iYmFyZm9v
Ij5Ud288L3g6YmFyPgorICA8ZCBpZD0iaWQzIj5UaHJlZTwvZD4KKzwvZG9jPgorcmVzcG9uc2VY
TUwgc2VyaWFsaXplZAorPCFET0NUWVBFIGRvYz48ZG9jPgorICA8Zm9vIHhtbG5zPSJmb29iYXIi
Pk9uZTwvZm9vPiA8eDpiYXIgeG1sbnM6eD0iYmFyZm9vIj5Ud288L3g6YmFyPgorICA8ZCBpZD0i
aWQzIj5UaHJlZTwvZD4KKzwvZG9jPgorZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkKK3N0YXR1cwor
MAorc3RhdHVzVGV4dAorcmVhZHlTdGF0ZQorNAorRXZlbnQgaW5mb3JtYXRpb24KK0V2ZW50IG9i
amVjdDogW29iamVjdCBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRdCitFdmVudCBwcm9wZXJ0
aWVzOgorQVRfVEFSR0VUIDogJzInCitCTFVSIDogJzgxOTInCitCVUJCTElOR19QSEFTRSA6ICcz
JworQ0FQVFVSSU5HX1BIQVNFIDogJzEnCitDSEFOR0UgOiAnMzI3NjgnCitDTElDSyA6ICc2NCcK
K0RCTENMSUNLIDogJzEyOCcKK0RSQUdEUk9QIDogJzIwNDgnCitGT0NVUyA6ICc0MDk2JworS0VZ
RE9XTiA6ICcyNTYnCitLRVlQUkVTUyA6ICcxMDI0JworS0VZVVAgOiAnNTEyJworTU9VU0VET1dO
IDogJzEnCitNT1VTRURSQUcgOiAnMzInCitNT1VTRU1PVkUgOiAnMTYnCitNT1VTRU9VVCA6ICc4
JworTU9VU0VPVkVSIDogJzQnCitNT1VTRVVQIDogJzInCitTRUxFQ1QgOiAnMTYzODQnCitidWJi
bGVzIDogJ2ZhbHNlJworY2FuY2VsQnViYmxlIDogJ2ZhbHNlJworY2FuY2VsYWJsZSA6ICd0cnVl
JworY2xpcGJvYXJkRGF0YSA6ICd1bmRlZmluZWQnCitjdXJyZW50VGFyZ2V0IDogJ1tvYmplY3Qg
WE1MSHR0cFJlcXVlc3RdJworZXZlbnRQaGFzZSA6ICcwJworaW5pdEV2ZW50IDogJ2Z1bmN0aW9u
IGluaXRFdmVudCgpIHsKKyAgICBbbmF0aXZlIGNvZGVdCit9JworaW5pdFByb2dyZXNzRXZlbnQg
OiAnZnVuY3Rpb24gaW5pdFByb2dyZXNzRXZlbnQoKSB7CisgICAgW25hdGl2ZSBjb2RlXQorfScK
K2xlbmd0aENvbXB1dGFibGUgOiAnZmFsc2UnCitsb2FkZWQgOiAnMCcKK3Bvc2l0aW9uIDogJzAn
CitwcmV2ZW50RGVmYXVsdCA6ICdmdW5jdGlvbiBwcmV2ZW50RGVmYXVsdCgpIHsKKyAgICBbbmF0
aXZlIGNvZGVdCit9JworcmV0dXJuVmFsdWUgOiAndHJ1ZScKK3NyY0VsZW1lbnQgOiAnW29iamVj
dCBYTUxIdHRwUmVxdWVzdF0nCitzdG9wUHJvcGFnYXRpb24gOiAnZnVuY3Rpb24gc3RvcFByb3Bh
Z2F0aW9uKCkgeworICAgIFtuYXRpdmUgY29kZV0KK30nCit0YXJnZXQgOiAnW29iamVjdCBYTUxI
dHRwUmVxdWVzdF0nCit0b3RhbCA6ICcwJwordG90YWxTaXplIDogJzAnCit0eXBlIDogJ2xvYWQn
CisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3Qt
Z2V0LnhodG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QveG1saHR0cHJlcXVlc3Qv
eG1saHR0cHJlcXVlc3QtZ2V0LnhodG1sCShyZXZpc2lvbiA0MjE0OCkJKGZyb20gTGF5b3V0VGVz
dHMvZmFzdC9kb20veG1saHR0cHJlcXVlc3QtZ2V0LnhodG1sOjQyMTQ4KQorKysgTGF5b3V0VGVz
dHMvZmFzdC94bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVzdC1nZXQueGh0bWwJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMTEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCEtLSAKKyAg
IC0gVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQ
dWJsaWMKKyAgIC0gTGljZW5zZSBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkg
bm90IHVzZSB0aGlzIGZpbGUKKyAgIC0gZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGlj
ZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mCisgICAtIHRoZSBMaWNlbnNlIGF0IGh0dHA6
Ly93d3cubW96aWxsYS5vcmcvTVBMLworICAgLSAKKyAgIC0gU29mdHdhcmUgZGlzdHJpYnV0ZWQg
dW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTCisgICAtIElTIiBiYXNp
cywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKKyAgIC0g
aW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJu
aW5nCisgICAtIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgICAt
IAorICAgLSBUaGUgT3JpZ2luYWwgQ29kZSBpcyBNb3ppbGxhIFRlc3QgQ2FzZXMuCisgICAtIAor
ICAgLSBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMgTmV0c2Nh
cGUgQ29tbXVuaWNhdGlvbnMKKyAgIC0gQ29ycC4gIFBvcnRpb25zIGNyZWF0ZWQgYnkgTmV0c2Nh
cGUgQ29tbXVuaWNhdGlvbnMgQ29ycC4gYXJlIAorICAgLSBDb3B5cmlnaHQgKEMpIDIwMDEgTmV0
c2NhcGUgQ29tbXVuaWNhdGlvbnMgQ29ycC4gIEFsbAorICAgLSBSaWdodHMgUmVzZXJ2ZWQuCisg
ICAtIAorICAgLSBDb250cmlidXRvcihzKTogCisgIC0tPgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93
d3cudzMub3JnLzE5OTkveGh0bWwiPgorPGhlYWQ+Cis8dGl0bGU+R0VUIHRlc3Q8L3RpdGxlPgor
PHN0eWxlIHR5cGU9InRleHQvY3NzIj4KKy5ib3ggeworICBkaXNwbGF5OiBib3g7CisgIGJvcmRl
cjogMXB4IHNvbGlkIGJsYWNrOworICBtYXJnaW4tYm90dG9tOiAwLjVlbTsKK30KKy5ib3hoZWFk
ZXIgeworICBmb250LXdlaWdodDogYm9sZDsKKyAgY29sb3I6IG1hcm9vbjsKK30KK3ByZSB7Cisg
IG1hcmdpbi1sZWZ0OiAyZW07Cit9Cis8L3N0eWxlPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFz
Y3JpcHQiPgordmFyIHAgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKworaWYgKHdpbmRvdy5sYXlv
dXRUZXN0Q29udHJvbGxlcikKKwlsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisK
K2Z1bmN0aW9uIG15ZnVuYyhlKQoreworICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaWQxIiku
Zmlyc3RDaGlsZC5ub2RlVmFsdWUgPSBwLnJlc3BvbnNlVGV4dDsKKyAgaWYgKHAucmVzcG9uc2VY
TUwpIHsKKyAgICB2YXIgcyA9IG5ldyBYTUxTZXJpYWxpemVyKCk7CisgICAgdmFyIGQgPSBwLnJl
c3BvbnNlWE1MOworICAgIHZhciBzdHIgPSBzLnNlcmlhbGl6ZVRvU3RyaW5nKGQpOworICAgIGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJpZDIiKS5maXJzdENoaWxkLm5vZGVWYWx1ZSA9IHN0cjsK
KyAgfQorICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaWQzIikuZmlyc3RDaGlsZC5ub2RlVmFs
dWUgPSBwLmdldEFsbFJlc3BvbnNlSGVhZGVycygpOworICBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgiaWQ0IikuZmlyc3RDaGlsZC5ub2RlVmFsdWUgPSBwLnN0YXR1czsKKyAgZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoImlkNSIpLmZpcnN0Q2hpbGQubm9kZVZhbHVlID0gcC5zdGF0dXNUZXh0Owor
ICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaWQ2IikuZmlyc3RDaGlsZC5ub2RlVmFsdWUgPSBw
LnJlYWR5U3RhdGU7CisgIHZhciBwcm9wTmFtZXMgPSBuZXcgQXJyYXk7CisgIGZvciAocHJvcCBp
biBlKSB7CisgICAgaWYgKHByb3AgIT0gInRpbWVTdGFtcCIpIHsKKyAgICAgICAgcHJvcE5hbWVz
LnB1c2gocHJvcCk7CisgICAgfQorICB9CisgIHByb3BOYW1lcy5zb3J0KCk7CisgIHZhciBldmVu
dFByb3BlcnRpZXMgPSAiIjsKKyAgZm9yIChpIGluIHByb3BOYW1lcykgeworICAgICAgICB2YXIg
cHJvcCA9IHByb3BOYW1lc1tpXTsKKyAgICAJZXZlbnRQcm9wZXJ0aWVzICs9IHByb3AgKyAiIDog
JyIgKyBlW3Byb3BdICsgIidcbiI7CisgIH0KKyAgCisgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJpZDciKS5maXJzdENoaWxkLm5vZGVWYWx1ZSA9IAorICAgICJFdmVudCBvYmplY3Q6ICIgKyBl
ICsgIlxuIiArCisgICAgIkV2ZW50IHByb3BlcnRpZXM6XG4iICsgZXZlbnRQcm9wZXJ0aWVzOwor
fQorCitwLm9ubG9hZCA9IG15ZnVuYzsKK3Aub3BlbigiR0VUIiwgInJlc291cmNlcy94bWxodHRw
cmVxdWVzdC1nZXQtZGF0YS54bWwiKTsKKworZnVuY3Rpb24gbXlzZW5kKCkKK3sKKyAgcC5zZW5k
KG51bGwpOworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9Im15c2VuZCgpOyI+
Cis8aDE+R0VUIHRlc3Q8L2gxPgorCis8ZGl2IGNsYXNzPSJib3giPjxzcGFuIGNsYXNzPSJib3ho
ZWFkZXIiPnJlc3BvbnNlVGV4dDwvc3Bhbj4KKzxwcmUgaWQ9ImlkMSI+QEBObyByZXN1bHRAQDwv
cHJlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJib3giPjxzcGFuIGNsYXNzPSJib3hoZWFkZXIiPnJl
c3BvbnNlWE1MIHNlcmlhbGl6ZWQ8L3NwYW4+Cis8cHJlIGlkPSJpZDIiPkBATm8gcmVzdWx0QEA8
L3ByZT4KKzwvZGl2PgorPGRpdiBjbGFzcz0iYm94Ij48c3BhbiBjbGFzcz0iYm94aGVhZGVyIj5n
ZXRBbGxSZXNwb25zZUhlYWRlcnMoKTwvc3Bhbj4KKzxwcmUgaWQ9ImlkMyI+QEBObyByZXN1bHRA
QDwvcHJlPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJib3giPjxzcGFuIGNsYXNzPSJib3hoZWFkZXIi
PnN0YXR1czwvc3Bhbj4KKzxwcmUgaWQ9ImlkNCI+QEBObyByZXN1bHRAQDwvcHJlPgorPC9kaXY+
Cis8ZGl2IGNsYXNzPSJib3giPjxzcGFuIGNsYXNzPSJib3hoZWFkZXIiPnN0YXR1c1RleHQ8L3Nw
YW4+Cis8cHJlIGlkPSJpZDUiPkBATm8gcmVzdWx0QEA8L3ByZT4KKzwvZGl2PgorPGRpdiBjbGFz
cz0iYm94Ij48c3BhbiBjbGFzcz0iYm94aGVhZGVyIj5yZWFkeVN0YXRlPC9zcGFuPgorPHByZSBp
ZD0iaWQ2Ij5AQE5vIHJlc3VsdEBAPC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9ImJveCI+PHNw
YW4gY2xhc3M9ImJveGhlYWRlciI+RXZlbnQgaW5mb3JtYXRpb248L3NwYW4+Cis8cHJlIGlkPSJp
ZDciPkBATm8gcmVzdWx0QEA8L3ByZT4KKzwvZGl2PgorCis8L2JvZHk+Cis8L2h0bWw+CkluZGV4
OiBMYXlvdXRUZXN0cy9mYXN0L3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LWh0bWwtcmVz
cG9uc2UtZW5jb2RpbmctZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3QveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtaHRtbC1yZXNwb25zZS1lbmNvZGluZy1l
eHBlY3RlZC50eHQJKHJldmlzaW9uIDQyMTQ4KQkoZnJvbSBMYXlvdXRUZXN0cy9mYXN0L2RvbS94
bWxodHRwcmVxdWVzdC1odG1sLXJlc3BvbnNlLWVuY29kaW5nLWV4cGVjdGVkLnR4dDo0MjE0OCkK
KysrIExheW91dFRlc3RzL2Zhc3QveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtaHRtbC1y
ZXNwb25zZS1lbmNvZGluZy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0
IEBACitUZXN0IGZvciBidWcgMTQyODg6IFhNTEh0dHBSZXF1ZXN0IGRvZXNuJ3QgdXNlIGEgY29y
cmVjdCBjb250ZW50IHR5cGUgZm9yIGZpbGU6Ly8gVVJMcy4KKworSFRNTCwgY2hhcnNldCBkZXRl
cm1pbmVkIGJ5IGEgTUVUQTog0J/RgNC+0LLQtdGA0LrQsAorQXN5bmM6IEhUTUwsIGNoYXJzZXQg
ZGV0ZXJtaW5lZCBieSBhIE1FVEE6INCf0YDQvtCy0LXRgNC60LAKSW5kZXg6IExheW91dFRlc3Rz
L2Zhc3QveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtaHRtbC1yZXNwb25zZS1lbmNvZGlu
Zy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QveG1saHR0cHJlcXVlc3QveG1s
aHR0cHJlcXVlc3QtaHRtbC1yZXNwb25zZS1lbmNvZGluZy5odG1sCShyZXZpc2lvbiA0MjE0OCkJ
KGZyb20gTGF5b3V0VGVzdHMvZmFzdC9kb20veG1saHR0cHJlcXVlc3QtaHRtbC1yZXNwb25zZS1l
bmNvZGluZy5odG1sOjQyMTQ4KQorKysgTGF5b3V0VGVzdHMvZmFzdC94bWxodHRwcmVxdWVzdC94
bWxodHRwcmVxdWVzdC1odG1sLXJlc3BvbnNlLWVuY29kaW5nLmh0bWwJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw2MiBAQAorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5UZXN0IFhtbEh0dHBSZXF1
ZXN0IHJlc3BvbnNlIGVuY29kaW5nIGhhbmRsaW5nPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5Pgor
PHA+VGVzdCBmb3IgPGEgaHJlZj0iaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTQyODgiPmJ1ZyAxNDI4ODwvYT46CitYTUxIdHRwUmVxdWVzdCBkb2Vzbid0IHVzZSBhIGNv
cnJlY3QgY29udGVudCB0eXBlIGZvciBmaWxlOi8vIFVSTHMuPC9wPgorPHNjcmlwdD4KKworICAg
IGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250
cm9sbGVyLmR1bXBBc1RleHQoKTsKKworICAgIHZhciBjb25zb2xlX21lc3NhZ2VzID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgib2wiKTsKKyAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGNv
bnNvbGVfbWVzc2FnZXMpOworICAgIAorICAgIHZhciBhc3luY1N0ZXAgPSAxOworICAgIAorICAg
IGZ1bmN0aW9uIGxvZyhtZXNzYWdlKQorICAgIHsKKyAgICAgICAgdmFyIGl0ZW0gPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCJsaSIpOworICAgICAgICBpdGVtLmFwcGVuZENoaWxkKGRvY3VtZW50
LmNyZWF0ZVRleHROb2RlKG1lc3NhZ2UpKTsKKyAgICAgICAgY29uc29sZV9tZXNzYWdlcy5hcHBl
bmRDaGlsZChpdGVtKTsKKyAgICB9CisgICAgCisgICAgZnVuY3Rpb24gZ2V0KHVybCwgYXN5bmMp
CisgICAgeworICAgICAgICBpZiAod2luZG93LlhNTEh0dHBSZXF1ZXN0KSB7CisgICAgICAgICAg
ICByZXEgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIHRyeSB7CisgICAgICAgICAgICAgICAgcmVxID0gbmV3IEFjdGl2ZVhPYmplY3QoIk1zeG1s
Mi5YTUxIVFRQIik7CisgICAgICAgICAgICB9IGNhdGNoIChleCkgeworICAgICAgICAgICAgICAg
IHJlcSA9IG5ldyBBY3RpdmVYT2JqZWN0KCJNaWNyb3NvZnQuWE1MSFRUUCIpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoYXN5bmMpCisgICAgICAgICAg
ICByZXEub25yZWFkeXN0YXRlY2hhbmdlID0gcHJvY2Vzc1N0YXRlQ2hhbmdlOworICAgICAgICAK
KyAgICAgICAgcmVxLm9wZW4oJ0dFVCcsIHVybCwgYXN5bmMpOworICAgICAgICByZXEuc2VuZChu
dWxsKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiByZXE7CisgICAgfQorCisgICAgZnVuY3Rp
b24gcHJvY2Vzc1N0YXRlQ2hhbmdlKCl7CisgICAgICBpZiAocmVxLnJlYWR5U3RhdGUgPT0gNCkK
KyAgICAgICAgbG9nKCJBc3luYzogSFRNTCwgY2hhcnNldCBkZXRlcm1pbmVkIGJ5IGEgTUVUQTog
IiArIHJlcS5yZXNwb25zZVRleHQucmVwbGFjZSgvXHMvZywgIiIpLnJlcGxhY2UoLy4qPGJvZHk+
KC4qKTxcL2JvZHk+LiovLCAiJDEiKSk7CisgICAgfQorCisgICAgdHJ5IHsKKyAgICAgICAgcmVx
ID0gIGdldCgncmVzb3VyY2VzLzEyNTEuaHRtbCcsIGZhbHNlKTsKKyAgICAgICAgbG9nKCJIVE1M
LCBjaGFyc2V0IGRldGVybWluZWQgYnkgYSBNRVRBOiAiICsgcmVxLnJlc3BvbnNlVGV4dC5yZXBs
YWNlKC9ccy9nLCAiIikucmVwbGFjZSgvLio8Ym9keT4oLiopPFwvYm9keT4uKi8sICIkMSIpKTsK
KyAgICB9IGNhdGNoIChleCkgeworICAgICAgICBsb2coIkV4Y2VwdGlvbjogIiArIGV4LmRlc2Ny
aXB0aW9uKTsKKyAgICB9CisKKyAgICBnZXQoJ3Jlc291cmNlcy8xMjUxLmh0bWwnLCB0cnVlKTsK
KyAgICAKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC94bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVzdC1pbnZhbGlkLXZhbHVlcy1leHBlY3RlZC50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC94bWxodHRwcmVxdWVzdC94bWxodHRw
cmVxdWVzdC1pbnZhbGlkLXZhbHVlcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDQyMTQ4KQkoZnJv
bSBMYXlvdXRUZXN0cy9mYXN0L2RvbS94bWxodHRwcmVxdWVzdC1pbnZhbGlkLXZhbHVlcy1leHBl
Y3RlZC50eHQ6NDIxNDgpCisrKyBMYXlvdXRUZXN0cy9mYXN0L3htbGh0dHByZXF1ZXN0L3htbGh0
dHByZXF1ZXN0LWludmFsaWQtdmFsdWVzLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDQgQEAKK1RoaXMgdGVzdHMgdGhhdCBzZXR0aW5nIGludmFsaWQgaGVhZGVyIG5hbWVz
LCB2YWx1ZXMgYW5kIHVzaW5nIGFuIGludmFsaWQgbWV0aG9kIGNhdXNlcyBYTUxIdHRwUmVxdWVz
dCB0byB0aHJvdyB0aGUgYXBwcm9wcmlhdGUgZXhjZXB0aW9ucy4KK3Rlc3RJbnZhbGlkTWV0aG9k
OiBTVUNDRVNTCit0ZXN0SW52YWxpZEhlYWRlck5hbWU6IFNVQ0NFU1MKK3Rlc3RJbnZhbGlkSGVh
ZGVyVmFsdWVzOiBTVUNDRVNTCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3htbGh0dHByZXF1ZXN0
L3htbGh0dHByZXF1ZXN0LWludmFsaWQtdmFsdWVzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC94bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVzdC1pbnZhbGlkLXZhbHVlcy5o
dG1sCShyZXZpc2lvbiA0MjE0OCkJKGZyb20gTGF5b3V0VGVzdHMvZmFzdC9kb20veG1saHR0cHJl
cXVlc3QtaW52YWxpZC12YWx1ZXMuaHRtbDo0MjE0OCkKKysrIExheW91dFRlc3RzL2Zhc3QveG1s
aHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtaW52YWxpZC12YWx1ZXMuaHRtbAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDg5IEBACis8aHRtbD4KKzxzY3JpcHQ+CitmdW5jdGlvbiB0ZXN0SW52
YWxpZE1ldGhvZCgpIHsKKyAgICB2YXIgcmVzdWx0ID0gJ0ZBSUxVUkUnOworICAgIAorICAgIHZh
ciByZXEgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKworICAgIHRyeSB7CisgICAgICAgIHJlcS5v
cGVuKCd0ZXN0XHJcbmZvb2JhcicsIHdpbmRvdy5sb2NhdGlvbiwgdHJ1ZSkKKyAgICB9IGNhdGNo
IChlKSB7CisgICAgICAgIGlmIChlLmNvZGUgPT0gRE9NRXhjZXB0aW9uLlNZTlRBWF9FUlIpCisg
ICAgICAgICAgICByZXN1bHQgPSAnU1VDQ0VTUyc7CisgICAgfQorICAgIAorICAgIGRlYnVnKCd0
ZXN0SW52YWxpZE1ldGhvZDogJyArIHJlc3VsdCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RJbnZhbGlk
SGVhZGVyTmFtZSgpIHsKKyAgICB2YXIgcmVzdWx0ID0gJ0ZBSUxVUkUnOworCisgICAgdmFyIHJl
cSA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworICAgIHJlcS5vcGVuKCdHRVQnLCB3aW5kb3cubG9j
YXRpb24sIHRydWUpCisgICAgCisgICAgdHJ5IHsKKyAgICAgICAgcmVxLnNldFJlcXVlc3RIZWFk
ZXIoImhvc3Q6IiwgImV4YW1wbGUuY29tIik7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICBp
ZiAoZS5jb2RlID09IERPTUV4Y2VwdGlvbi5TWU5UQVhfRVJSKQorICAgICAgICAgICAgcmVzdWx0
ID0gJ1NVQ0NFU1MnOworICAgIH0KKyAgICAKKyAgICBkZWJ1ZygndGVzdEludmFsaWRIZWFkZXJO
YW1lOiAnICsgcmVzdWx0KTsgICAgCit9CisKK2Z1bmN0aW9uIHRlc3RJbnZhbGlkSGVhZGVyVmFs
dWVzKCkgeworICAgIHZhciByZXN1bHQgPSAnRkFJTFVSRSc7CisgICAgdmFyIHN1Y2Nlc3NDb3Vu
dCA9IDA7CisKKyAgICB2YXIgcmVxID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisgICAgcmVxLm9w
ZW4oJ0dFVCcsIHdpbmRvdy5sb2NhdGlvbiwgdHJ1ZSkKKyAgICAKKyAgICB0cnkgeworICAgICAg
ICByZXEuc2V0UmVxdWVzdEhlYWRlcigiWC1IYWNrIiwgIlRlc3RcclxuSG9zdDogd3d3LmV4YW1w
bGUuY29tXHJcblxyXG5HRVQgLyBIVFRQLzEuMSIpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAg
ICAgaWYgKGUuY29kZSA9PSBET01FeGNlcHRpb24uU1lOVEFYX0VSUikKKyAgICAgICAgICAgIHN1
Y2Nlc3NDb3VudCsrOworICAgIH0KKworICAgIHRyeSB7CisgICAgICAgIHJlcS5zZXRSZXF1ZXN0
SGVhZGVyKCJYLUhhY2siLCAiVGVzdFxuSG9zdDogd3d3LmV4YW1wbGUuY29tXG5cbkdFVCAvIEhU
VFAvMS4xIik7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICBpZiAoZS5jb2RlID09IERPTUV4
Y2VwdGlvbi5TWU5UQVhfRVJSKQorICAgICAgICAgICAgc3VjY2Vzc0NvdW50Kys7CisgICAgfQor
CisgICAgdHJ5IHsKKyAgICAgICAgcmVxLnNldFJlcXVlc3RIZWFkZXIoIlgtSGFjayIsICJUZXN0
XHJIb3N0OiB3d3cuZXhhbXBsZS5jb21cclxyR0VUIC8gSFRUUC8xLjEiKTsKKyAgICB9IGNhdGNo
IChlKSB7CisgICAgICAgIGlmIChlLmNvZGUgPT0gRE9NRXhjZXB0aW9uLlNZTlRBWF9FUlIpCisg
ICAgICAgICAgICBzdWNjZXNzQ291bnQrKzsKKyAgICB9CisgICAgCisgICAgaWYgKHN1Y2Nlc3ND
b3VudCA9PSAzKQorICAgICAgICByZXN1bHQgPSAnU1VDQ0VTUyc7CisgICAgICAgIAorICAgIGRl
YnVnKCd0ZXN0SW52YWxpZEhlYWRlclZhbHVlczogJyArIHJlc3VsdCk7ICAgIAorfQorCitmdW5j
dGlvbiBkZWJ1ZyhzdHIpIHsKKyAgICB2YXIgY29uc29sZSA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCdjb25zb2xlJyk7CisgICAgdmFyIGxpID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGkn
KTsKKyAgICBsaS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShzdHIpKTsKKyAg
ICBjb25zb2xlLmFwcGVuZENoaWxkKGxpKTsKK30KKworZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAg
ICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci5kdW1wQXNUZXh0KCk7CisKKyAgICB0ZXN0SW52YWxpZE1ldGhvZCgpOworICAgIHRl
c3RJbnZhbGlkSGVhZGVyTmFtZSgpOworICAgIHRlc3RJbnZhbGlkSGVhZGVyVmFsdWVzKCk7Cit9
Cis8L3NjcmlwdD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdCgpIj4KKyAgICBUaGlzIHRlc3RzIHRo
YXQgc2V0dGluZyBpbnZhbGlkIGhlYWRlciBuYW1lcywgdmFsdWVzIGFuZCB1c2luZyBhbiBpbnZh
bGlkIG1ldGhvZCBjYXVzZXMgWE1MSHR0cFJlcXVlc3QgdG8gdGhyb3cgdGhlIGFwcHJvcHJpYXRl
IGV4Y2VwdGlvbnMuCis8L2JvZHk+Cis8dWwgaWQ9ImNvbnNvbGUiPgorPC91bD4KKzwvaHRtbD4K
SW5kZXg6IExheW91dFRlc3RzL2Zhc3QveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtbWlz
c2luZy1maWxlLWV4Y2VwdGlvbi1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC94bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVzdC1taXNzaW5nLWZpbGUtZXhjZXB0
aW9uLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNDIxNDgpCShmcm9tIExheW91dFRlc3RzL2Zhc3Qv
bG9hZGVyL3htbGh0dHByZXF1ZXN0LW1pc3NpbmctZmlsZS1leGNlcHRpb24tZXhwZWN0ZWQudHh0
OjQyMTQ4KQorKysgTGF5b3V0VGVzdHMvZmFzdC94bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVz
dC1taXNzaW5nLWZpbGUtZXhjZXB0aW9uLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDggQEAKK1RoaXMgdGVzdCBjaGVja3MgZm9yIHJkYXI6Ly9wcm9ibGVtLzQ5NjIyOTgg
UkVHUkVTU0lPTjogU3luY2hyb25vdXMgWEhSIGZvciBtaXNzaW5nIGxvY2FsIGZpbGUgdGhyb3dz
IGV4Y2VwdGlvbiAtLSBicmVha3MgV2lraXBlZGlhIHdpZGdldAorCitQQVNTOiBObyBleGNlcHRp
b24uCityZWFkeVN0YXRlOiA0IChudW1iZXIpCityZXNwb25zZVRleHQ6ICAoc3RyaW5nKQorcmVz
cG9uc2VYTUw6IG51bGwgKG9iamVjdCkKK3N0YXR1c1RleHQ6ICAoc3RyaW5nKQorCkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LW1pc3NpbmctZmls
ZS1leGNlcHRpb24uaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3htbGh0dHBy
ZXF1ZXN0L3htbGh0dHByZXF1ZXN0LW1pc3NpbmctZmlsZS1leGNlcHRpb24uaHRtbAkocmV2aXNp
b24gNDIxNDgpCShmcm9tIExheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3htbGh0dHByZXF1ZXN0LW1p
c3NpbmctZmlsZS1leGNlcHRpb24uaHRtbDo0MjE0OCkKKysrIExheW91dFRlc3RzL2Zhc3QveG1s
aHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtbWlzc2luZy1maWxlLWV4Y2VwdGlvbi5odG1sCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTEgQEAKKzxwPlRoaXMgdGVzdCBjaGVja3MgZm9yIHJk
YXI6Ly9wcm9ibGVtLzQ5NjIyOTggUkVHUkVTU0lPTjogU3luY2hyb25vdXMgWEhSIGZvciBtaXNz
aW5nIGxvY2FsIGZpbGUgdGhyb3dzIGV4Y2VwdGlvbiAtLSBicmVha3MgV2lraXBlZGlhIHdpZGdl
dDwvcD4KKzxocj4KKworPHByZSBpZD0iY29uc29sZSI+PC9wcmU+CisKKzxzY3JpcHQ+CitmdW5j
dGlvbiBsb2cocykKK3sKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpLmFw
cGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHMgKyAiXG4iKSk7Cit9CisKK2Z1bmN0
aW9uIGxvZ1Byb3BlcnR5KG9iamVjdCwgcHJvcGVydHlOYW1lKQoreworICAgIHZhciBwcm9wZXJ0
eTsKKyAgICB0cnkgeworICAgICAgICBwcm9wZXJ0eSA9IG9iamVjdFtwcm9wZXJ0eU5hbWVdOwor
ICAgIH0gY2F0Y2goZSkgeworICAgICAgICBwcm9wZXJ0eSA9IGU7CisgICAgfQorICAgIGxvZyhw
cm9wZXJ0eU5hbWUgKyAiOiAiICsgcHJvcGVydHkgKyAiICgiICsgdHlwZW9mIHByb3BlcnR5ICsg
IikiKTsKK30KKworZnVuY3Rpb24gc2VuZFJlcXVlc3QoKSAKK3sKKyAgICB2YXIgcmVxdWVzdCA9
IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworICAgIHJlcXVlc3Qub3BlbigiR0VUIiwgImZpbGU6Ly8v
aWFtdGhld2FscnVzIiwgZmFsc2UpOworICAgIHJlcXVlc3Quc2VuZChudWxsKTsKKyAgICByZXR1
cm4gcmVxdWVzdDsKK30KKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKK3RyeSB7CisgICAgdmFyIHJlcXVl
c3QgPSBzZW5kUmVxdWVzdCgpOworCisgICAgdmFyIHByb3BlcnRpZXMgPSBbCisgICAgICAgICJy
ZWFkeVN0YXRlIiwKKyAgICAgICAgInJlc3BvbnNlVGV4dCIsCisgICAgICAgICJyZXNwb25zZVhN
TCIsCisgICAgICAgIC8qICJzdGF0dXMiLCAtLSBleGNsdWRlZCBiZWNhdXNlIGl0IGRpZmZlcnMg
b24gdGlnZXIgYW5kIGxlb3BhcmQgKi8KKyAgICAgICAgInN0YXR1c1RleHQiLAorICAgIF07Cisg
ICAgCisgICAgbG9nKCJQQVNTOiBObyBleGNlcHRpb24uIik7CisgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSAvLz4KKyAgICAgICAgbG9nUHJvcGVydHkocmVx
dWVzdCwgcHJvcGVydGllc1tpXSk7Cit9IGNhdGNoKGUpIHsKKyAgICBsb2coIkZBSUw6IENhdWdo
dCBleGNlcHRpb24gIiArIGUgKyAiLiIpOworfQorPC9zY3JpcHQ+CkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LW5vbmV4aXN0ZW50LWZpbGUtZXhw
ZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QveG1saHR0cHJlcXVlc3Qv
eG1saHR0cHJlcXVlc3Qtbm9uZXhpc3RlbnQtZmlsZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LW5vbmV4
aXN0ZW50LWZpbGUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0IEBACitC
dWcgMjI0NzU6IFJFR1JFU1NJT046IEFzeW5jIFhNTEh0dHBSZXF1ZXN0IG5ldmVyIGZpbmlzaGVz
IG9uIG5vbmV4aXN0ZW50IGZpbGVzIGFueW1vcmUKKworSW4gYm90aCBjYXNlcywgcmVhZHlTdGF0
ZSA0IHNob3VsZCBiZSByZWFjaGVkLCBhbmQgZXJyb3IgaGFuZGxlciBzaG91bGQgYmUgaW52b2tl
ZC4KKworRG9pbmcgYW4gWEhSIHRvIGEgbm9uZXhpc3RlbnQgZmlsZS4KK1JlYWR5U3RhdGUgaGFu
ZGxlcjogcmVhZHlTdGF0ZSA9IDEKK1JlYWR5U3RhdGUgaGFuZGxlcjogcmVhZHlTdGF0ZSA9IDQK
K0Vycm9yIGhhbmRsZXI6IHJlYWR5U3RhdGUgPSA0CisKK0RvaW5nIGFuIFhIUiB0byBhIGRpcmVj
dG9yeS4KK1JlYWR5U3RhdGUgaGFuZGxlcjogcmVhZHlTdGF0ZSA9IDEKK1JlYWR5U3RhdGUgaGFu
ZGxlcjogcmVhZHlTdGF0ZSA9IDQKK0Vycm9yIGhhbmRsZXI6IHJlYWR5U3RhdGUgPSA0CisKClBy
b3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2Zhc3QveG1saHR0cHJlcXVlc3QveG1saHR0
cHJlcXVlc3Qtbm9uZXhpc3RlbnQtZmlsZS1leHBlY3RlZC50eHQKX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBz
dm46bWltZS10eXBlCiAgICsgdGV4dC9wbGFpbgpOYW1lOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0
aXZlCgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC94bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVz
dC1ub25leGlzdGVudC1maWxlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC94
bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVzdC1ub25leGlzdGVudC1maWxlLmh0bWwJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0
LW5vbmV4aXN0ZW50LWZpbGUuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NiBAQAorPCFE
T0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9F
TiIKKyAgICAgICAgICAgICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9v
c2UuZHRkIj4KKzxodG1sPgorPGhlYWQ+CisgICAgPHNjcmlwdD4KKyAgICAgICAgZnVuY3Rpb24g
bG9nKG1lc3NhZ2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBjb25zb2xlID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKTsKKyAgICAgICAgICAgIGNvbnNvbGUuYXBwZW5k
Q2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobWVzc2FnZSkpOworICAgICAgICAgICAgY29u
c29sZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdicicpKTsKKyAgICAgICAg
fQorCisgICAgICAgIGZ1bmN0aW9uIGVycm9ySGFuZGxlcigpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGxvZygiRXJyb3IgaGFuZGxlcjogcmVhZHlTdGF0ZSA9ICIgKyB4aHIucmVhZHlTdGF0ZSk7
CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiByZWFkeVN0YXRlSGFuZGxlckRpcmVjdG9y
eSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGxvZygiUmVhZHlTdGF0ZSBoYW5kbGVyOiByZWFk
eVN0YXRlID0gIiArIHhoci5yZWFkeVN0YXRlKTsKKyAgICAgICAgICAgIGlmICh4aHIucmVhZHlT
dGF0ZSA9PSA0ICYmIHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICAgICAg
ICAgIHNldFRpbWVvdXQoImxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKSIsIDApOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gdGVzdFhIUkRpcmVj
dG9yeSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGxvZygiIik7CisgICAgICAgICAgICBsb2co
IkRvaW5nIGFuIFhIUiB0byBhIGRpcmVjdG9yeS4iKTsKKyAgICAgICAgICAgIHhociA9IG5ldyBY
TUxIdHRwUmVxdWVzdCgpOworICAgICAgICAgICAgeGhyLm9uZXJyb3IgPSBlcnJvckhhbmRsZXI7
CisgICAgICAgICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gcmVhZHlTdGF0ZUhhbmRsZXJE
aXJlY3Rvcnk7CisKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgeGhyLm9wZW4o
IkdFVCIsICJyZXNvdXJjZXMiLCB0cnVlKTsKKyAgICAgICAgICAgICAgICB4aHIuc2VuZCgiIik7
CisgICAgICAgICAgICB9IGNhdGNoKGUpIHsKKyAgICAgICAgICAgICAgICBsb2coIkV4Y2VwdGlv
bjogIiArIGUubWVzc2FnZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBm
dW5jdGlvbiByZWFkeVN0YXRlSGFuZGxlck5vbkV4aXN0ZW50KCkKKyAgICAgICAgeworICAgICAg
ICAgICAgbG9nKCJSZWFkeVN0YXRlIGhhbmRsZXI6IHJlYWR5U3RhdGUgPSAiICsgeGhyLnJlYWR5
U3RhdGUpOworICAgICAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09IDQpCisgICAgICAgICAg
ICAgICAgc2V0VGltZW91dCgidGVzdFhIUkRpcmVjdG9yeSgpIiwgMCk7CisgICAgICAgIH0KKwor
ICAgICAgICBmdW5jdGlvbiB0ZXN0WEhSTm9uRXhpc3RlbnRGaWxlKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICAgICAg
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgICAgICAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGxvZygiRG9pbmcgYW4gWEhSIHRvIGEgbm9uZXhpc3RlbnQgZmlsZS4iKTsKKyAg
ICAgICAgICAgIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworICAgICAgICAgICAgeGhyLm9u
ZXJyb3IgPSBlcnJvckhhbmRsZXI7CisgICAgICAgICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdl
ID0gcmVhZHlTdGF0ZUhhbmRsZXJOb25FeGlzdGVudDsKKworICAgICAgICAgICAgdHJ5IHsKKyAg
ICAgICAgICAgICAgICB4aHIub3BlbigiR0VUIiwgIm5vbmV4aXN0ZW50Lmh0bWwiLCB0cnVlKTsK
KyAgICAgICAgICAgICAgICB4aHIuc2VuZCgiIik7CisgICAgICAgICAgICB9IGNhdGNoKGUpIHsK
KyAgICAgICAgICAgICAgICBsb2coIkV4Y2VwdGlvbjogIiArIGUubWVzc2FnZSk7CisgICAgICAg
ICAgICAgICAgdGVzdFhIUkRpcmVjdG9yeSgpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIDwvc2NyaXB0PgorICAgIDwvaGVhZD4KKyAgICA8Ym9keSBvbmxvYWQ9InRlc3RYSFJO
b25FeGlzdGVudEZpbGUoKSI+CisgICAgICAgIDxwPiBCdWcgPGEgaHJlZj0iaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNDc1Ij4yMjQ3NTwvYT46IFJFR1JFU1NJT046
IEFzeW5jIFhNTEh0dHBSZXF1ZXN0IG5ldmVyIGZpbmlzaGVzIG9uIG5vbmV4aXN0ZW50IGZpbGVz
IGFueW1vcmUgPC9wPgorICAgICAgICA8cD4gSW4gYm90aCBjYXNlcywgcmVhZHlTdGF0ZSA0IHNo
b3VsZCBiZSByZWFjaGVkLCBhbmQgZXJyb3IgaGFuZGxlciBzaG91bGQgYmUgaW52b2tlZC4gPC9w
PgorICAgICAgICA8ZGl2IGlkPSJjb25zb2xlIi8+CisgICAgPC9ib2R5PgorPC9odG1sPgoKUHJv
cGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvZmFzdC94bWxodHRwcmVxdWVzdC94bWxodHRw
cmVxdWVzdC1ub25leGlzdGVudC1maWxlLmh0bWwKX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46bWltZS10
eXBlCiAgICsgdGV4dC9odG1sCgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC94bWxodHRwcmVxdWVz
dC9yZXNvdXJjZXMvMTI1MS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QveG1s
aHR0cHJlcXVlc3QvcmVzb3VyY2VzLzEyNTEuaHRtbAkocmV2aXNpb24gNDIxNDgpCShmcm9tIExh
eW91dFRlc3RzL2Zhc3QvZG9tL3Jlc291cmNlcy8xMjUxLmh0bWw6NDIxNDgpCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L3htbGh0dHByZXF1ZXN0L3Jlc291cmNlcy8xMjUxLmh0bWwJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw2IEBACis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iY29u
dGVudC10eXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUxIj4KKzwv
aGVhZD4KKzxib2R5Ps/w7uLl8OrgPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMv
ZmFzdC94bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMvcGxpc3QuYXBwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3QveG1saHR0cHJlcXVlc3QvcmVzb3VyY2VzL3BsaXN0LmFwcAkocmV2aXNp
b24gNDIxNDgpCShmcm9tIExheW91dFRlc3RzL2Zhc3QvbG9hZGVyL3Jlc291cmNlcy9wbGlzdC5h
cHA6NDIxNDgpCisrKyBMYXlvdXRUZXN0cy9mYXN0L3htbGh0dHByZXF1ZXN0L3Jlc291cmNlcy9w
bGlzdC5hcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNiBAQAorPD94bWwgdmVyc2lvbj0i
MS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhRE9DVFlQRSBwbGlzdCBQVUJMSUMgIi0vL0FwcGxl
IENvbXB1dGVyLy9EVEQgUExJU1QgMS4wLy9FTiIgImh0dHA6Ly93d3cuYXBwbGUuY29tL0RURHMv
UHJvcGVydHlMaXN0LTEuMC5kdGQiPgorPHBsaXN0IHZlcnNpb249IjEuMCI+Cis8ZGljdD4KKwk8
a2V5PkJ1aWxkVmVyc2lvbjwva2V5PgorCTxzdHJpbmc+MDAwPC9zdHJpbmc+CisJPGtleT5DRkJ1
bmRsZVNob3J0VmVyc2lvblN0cmluZzwva2V5PgorCTxzdHJpbmc+MC45LjI8L3N0cmluZz4KKwk8
a2V5PkNGQnVuZGxlVmVyc2lvbjwva2V5PgorCTxzdHJpbmc+MC45LjI8L3N0cmluZz4KKwk8a2V5
PlByb2plY3ROYW1lPC9rZXk+CisJPHN0cmluZz5XaWtpcGVkaWFXaWRnZXQ8L3N0cmluZz4KKwk8
a2V5PlNvdXJjZVZlcnNpb248L2tleT4KKwk8c3RyaW5nPjAwMDwvc3RyaW5nPgorPC9kaWN0Pgor
PC9wbGlzdD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QveG1saHR0cHJlcXVlc3QvcmVzb3VyY2Vz
L3htbGh0dHByZXF1ZXN0LWdldC1kYXRhLnhtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L3htbGh0dHByZXF1ZXN0L3Jlc291cmNlcy94bWxodHRwcmVxdWVzdC1nZXQtZGF0YS54bWwJ
KHJldmlzaW9uIDQyMTQ4KQkoZnJvbSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9yZXNvdXJjZXMveG1s
aHR0cHJlcXVlc3QtZ2V0LWRhdGEueG1sOjQyMTQ4KQorKysgTGF5b3V0VGVzdHMvZmFzdC94bWxo
dHRwcmVxdWVzdC9yZXNvdXJjZXMveG1saHR0cHJlcXVlc3QtZ2V0LWRhdGEueG1sCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUg
ZG9jIFsKKzwhQVRUTElTVCBkIGlkIElEICNJTVBMSUVEPgorXT4KKzxkb2M+CisgIDxmb28geG1s
bnM9ImZvb2JhciI+T25lPC9mb28+IDx4OmJhciB4bWxuczp4PSJiYXJmb28iPlR3bzwveDpiYXI+
CisgIDxkIGlkPSJpZDMiPlRocmVlPC9kPgorPC9kb2M+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3htbGh0dHByZXF1ZXN0L2ZyYW1lLWxvYWQtY2FuY2VsbGVkLWFib3J0LWV4cGVjdGVk
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0
L2ZyYW1lLWxvYWQtY2FuY2VsbGVkLWFib3J0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNDIxNDgp
CisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L2ZyYW1lLWxvYWQtY2Fu
Y2VsbGVkLWFib3J0LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtOSw2ICs5LDcgQEAg
VGhhdCBkaWRGaW5pc2hlZExvYWRpbmcoKSBjYWxsIHNob3VsZCBpbQogTG9hZGluZyBzdWJmcmFt
ZSB0byBjYW5jZWwKIFJlYWR5IFN0YXRlOiAxCiBCb2R5IG9mIHN1YmZyYW1lIGlzIGxvYWRlZC4g
WE1MSHR0cFJlcXVlc3Qgc2hvdWxkIGJlIGluIHByb2dyZXNzLiBOdWtpbmcgdGhlIGlmcmFtZQor
UmVhZHkgU3RhdGU6IDQKIElmcmFtZSB1bmxvYWRlZAogSWZyYW1lIHJlbW92ZWQKIApJbmRleDog
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9zaW1wbGUtY3Jvc3Mtb3JpZ2lu
LXByb2dyZXNzLWV2ZW50cy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVz
dHMveG1saHR0cHJlcXVlc3Qvc2ltcGxlLWNyb3NzLW9yaWdpbi1wcm9ncmVzcy1ldmVudHMuaHRt
bAkocmV2aXNpb24gNDIxNDgpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1
ZXN0L3NpbXBsZS1jcm9zcy1vcmlnaW4tcHJvZ3Jlc3MtZXZlbnRzLmh0bWwJKHdvcmtpbmcgY29w
eSkKQEAgLTUyLDcgKzUyLDcgQEAgZnVuY3Rpb24gdGVzdDEoKQogICAgIHhoci51cGxvYWQub25w
cm9ncmVzcyA9IHVwbG9hZFByb2dyZXNzOwogICAgIHhoci51cGxvYWQub25sb2FkID0gZnVuY3Rp
b24oKSB7IGxvZygiRkFJTDogdXBsb2FkLm9ubG9hZCIpIH0KICAgICB4aHIudXBsb2FkLm9uZXJy
b3IgPSBmdW5jdGlvbigpIHsgbG9nKCJGQUlMOiB1cGxvYWQub25lcnJvciIpIH0KLSAgICB4aHIu
b25lcnJvciA9IGZ1bmN0aW9uKCkgeyByZXBvcnQoeGhyKTsgbG9nKCJvbmVycm9yIikgfQorICAg
IHhoci5vbmVycm9yID0gZnVuY3Rpb24oKSB7IGxvZygib25lcnJvciIpIH0KICAgICB4aHIub25s
b2FkID0gZnVuY3Rpb24oKSB7CiAgICAgICAgIGxvZygib25sb2FkIik7CiAgICAgICAgIGxvZygi
UmVzcG9uc2UgbGVuZ3RoOiAiICsgeGhyLnJlc3BvbnNlVGV4dC5sZW5ndGgpOwpAQCAtODMsNyAr
ODMsNyBAQCBmdW5jdGlvbiB0ZXN0MigpCiAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci5ub3RpZnlEb25lKCk7CiAgICAgfQogICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbigpIHsKLSAg
ICAgICAgcmVwb3J0KHhocik7CisgICAgICAgIGxvZygib25sb2FkIik7CiAgICAgfQogfQogCklu
ZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3N0YXRlLWFmdGVyLW5l
dHdvcmstZXJyb3ItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAv
dGVzdHMveG1saHR0cHJlcXVlc3Qvc3RhdGUtYWZ0ZXItbmV0d29yay1lcnJvci1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0
L3N0YXRlLWFmdGVyLW5ldHdvcmstZXJyb3ItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDYgQEAKK1Rlc3QgdGhhdCByZXF1ZXN0IHN0YXRlIHJlYWNoZXMgRE9ORSBldmVuIGlm
IGEgbmV0d29yayBlcnJvciBvY2N1cnMuCisKK1Nob3VsZCBzYXkgU1VDQ0VTUzoKKworU1VDQ0VT
UworCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHBy
ZXF1ZXN0L3N0YXRlLWFmdGVyLW5ldHdvcmstZXJyb3ItZXhwZWN0ZWQudHh0Cl9fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
TmFtZTogc3ZuOm1pbWUtdHlwZQogICArIHRleHQvcGxhaW4KTmFtZTogc3ZuOmVvbC1zdHlsZQog
ICArIG5hdGl2ZQoKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qv
c3RhdGUtYWZ0ZXItbmV0d29yay1lcnJvci5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qvc3RhdGUtYWZ0ZXItbmV0d29yay1lcnJvci5odG1s
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9z
dGF0ZS1hZnRlci1uZXR3b3JrLWVycm9yLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDMg
QEAKKzxib2R5PgorPHA+VGVzdCB0aGF0IHJlcXVlc3Qgc3RhdGUgcmVhY2hlcyBET05FIGV2ZW4g
aWYgYSBuZXR3b3JrIGVycm9yIG9jY3Vycy48L3A+Cis8cD5TaG91bGQgc2F5IFNVQ0NFU1M6PC9w
PgorPGRpdiBpZD1yZXN1bHQ+PC9kaXY+CisKKzxzY3JpcHQ+CitpZiAod2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOwor
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKK30KKworZnVuY3Rpb24g
bG9nKG1lc3NhZ2UpCit7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlc3VsdCIpLmlu
bmVySFRNTCArPSBtZXNzYWdlICsgIjxicj4iOworfQorCitmdW5jdGlvbiBzZXROZXR3b3JrRW5h
YmxlZChzdGF0ZSkKK3sKKyAgICB2YXIgcmVxID0gbmV3IFhNTEh0dHBSZXF1ZXN0OworICAgIHJl
cS5vcGVuKCJHRVQiLCAiL3Jlc291cmNlcy9uZXR3b3JrLXNpbXVsYXRvci5waHA/Y29tbWFuZD0i
ICsgKHN0YXRlID8gImNvbm5lY3QiIDogImRpc2Nvbm5lY3QiKSwgZmFsc2UpOworICAgIHJlcS5z
ZW5kKCIiKTsKK30KKworZnVuY3Rpb24gb25SZWFkeVN0YXRlQ2hhbmdlKCkKK3sKKyAgICBpZiAo
eGhyLnJlYWR5U3RhdGUgPT0gNCkgeworICAgICAgICBzZXROZXR3b3JrRW5hYmxlZCh0cnVlKTsK
KyAgICAgICAgbG9nKCJTVUNDRVNTIik7CisgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpCisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7
CisgICAgfQorfQorCitzZXROZXR3b3JrRW5hYmxlZChmYWxzZSk7Cit2YXIgeGhyID0gbmV3IFhN
TEh0dHBSZXF1ZXN0KCk7Cit4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gb25SZWFkeVN0YXRlQ2hh
bmdlOworeGhyLm9wZW4oJ0dFVCcsICcvcmVzb3VyY2VzL25ldHdvcmstc2ltdWxhdG9yLnBocD9w
YXRoPS8nLCB0cnVlKTsKK3hoci5zZW5kKG51bGwpOworCis8L3NjcmlwdD4KKworPC9oZWFkPgor
PC9ib2R5PgoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxo
dHRwcmVxdWVzdC9zdGF0ZS1hZnRlci1uZXR3b3JrLWVycm9yLmh0bWwKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1l
OiBzdm46bWltZS10eXBlCiAgICsgdGV4dC9odG1sCgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy94bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVzdC11bnNhZmUtcmVkaXJlY3QtZXhwZWN0
ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVl
c3QveG1saHR0cHJlcXVlc3QtdW5zYWZlLXJlZGlyZWN0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
NDIxNDgpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3htbGh0dHBy
ZXF1ZXN0LXVuc2FmZS1yZWRpcmVjdC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEs
OCArMSwxMCBAQAogVGhpcyB0ZXN0cyB0aGF0IHVuc2FmZSByZWRpcmVjdHMgd29uJ3QgYmUgYWxs
b3dlZCB3aGVuIG1ha2luZyBhbiBYTUxIdHRwUmVxdWVzdC4KIFN5bmMgWEhSIHN0YXJ0ZWQuCiBy
ZWFkeVN0YXRlIGNoYW5nZSAxCityZWFkeVN0YXRlIGNoYW5nZSA0CiBFcnJvciBldmVudC4KIEV4
Y2VwdGlvbjogRXJyb3I6IE5FVFdPUktfRVJSOiBYTUxIdHRwUmVxdWVzdCBFeGNlcHRpb24gMTAx
CiBBc3luYyBYSFIgc3RhcnRlZC4KIHJlYWR5U3RhdGUgY2hhbmdlIDEKLVNVQ0NFU1M6IEVycm9y
IGhhbmRsZXIgd2FzIGNhbGxlZCB3aXRoIHJlYWR5U3RhdGUgMQorcmVhZHlTdGF0ZSBjaGFuZ2Ug
NAorU1VDQ0VTUzogRXJyb3IgaGFuZGxlciB3YXMgY2FsbGVkIHdpdGggcmVhZHlTdGF0ZSA0Cklu
ZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3Jlc291cmNlcy9mcmFt
ZS1sb2FkLXRvLWNhbmNlbC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVz
dHMveG1saHR0cHJlcXVlc3QvcmVzb3VyY2VzL2ZyYW1lLWxvYWQtdG8tY2FuY2VsLmh0bWwJKHJl
dmlzaW9uIDQyMTQ4KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9y
ZXNvdXJjZXMvZnJhbWUtbG9hZC10by1jYW5jZWwuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMSw4
ICsxLDYgQEAKICAgICA8aHRtbD4KIDxoZWFkPgogPHNjcmlwdD4KLXZhciBycTsKLQogZnVuY3Rp
b24gbG9hZFhNTERvYygpCiB7CiAgICAgdXJsID0gJ2VuZGxlc3N4bWwucGhwJzsKQEAgLTEzLDcg
KzExLDggQEAgZnVuY3Rpb24gbG9hZFhNTERvYygpCiAgICAgICBpZiAod2luZG93LlhNTEh0dHBS
ZXF1ZXN0KSB7CiAgICAgICAgIHJxID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CiAgICAgICAgIHJx
Lm92ZXJyaWRlTWltZVR5cGUoJ3RleHQveG1sJyk7Ci0gICAgICAgIHJxLm9ucmVhZHlzdGF0ZWNo
YW5nZSA9IHJlYWR5U3RhdGVDaGFuZ2VkCisgICAgICAgIHJxLm9ucmVhZHlzdGF0ZWNoYW5nZSA9
IHJlYWR5U3RhdGVDaGFuZ2VkOworICAgICAgICBycS5wYXJlbnQgPSB3aW5kb3cucGFyZW50Owog
ICAgICAgICBycS5vcGVuKCdHRVQnLCB1cmwsIHRydWUpOwogICAgICAgICBycS5zZW5kKG51bGwp
OwogICAgICAgfQpAQCAtMjMsOSArMjIsOSBAQCBmdW5jdGlvbiBsb2FkWE1MRG9jKCkKICAgICB9
CiB9CiAKLWZ1bmN0aW9uIHJlYWR5U3RhdGVDaGFuZ2VkKCkKK2Z1bmN0aW9uIHJlYWR5U3RhdGVD
aGFuZ2VkKGV2dCkKIHsKLSAgICB3aW5kb3cucGFyZW50LmR1bXBSZXF1ZXN0U3RhdHVzKHJxKTsK
KyAgICBldnQudGFyZ2V0LnBhcmVudC5kdW1wUmVxdWVzdFN0YXR1cyhldnQudGFyZ2V0KTsKIH0K
IAogPC9zY3JpcHQ+CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAkocmV2aXNpb24gNDIx
NDgpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAkod29ya2luZyBjb3B5KQpA
QCAtMzYsNyArMzYsNiBAQCBmYXN0L2RvbS9leGNlcHRpb24tbm8tZnJhbWUtdGltZW91dC1jcmFz
CiBmYXN0L2RvbS9mcmFtZS1sb2FkaW5nLXZpYS1kb2N1bWVudC13cml0ZS5odG1sCiBmYXN0L2Rv
bS9nYy04Lmh0bWwKIGZhc3QvZG9tL2xvY2F0aW9uLWhhc2guaHRtbAotZmFzdC9kb20vbnVsbC1k
b2N1bWVudC14bWxodHRwcmVxdWVzdC1vcGVuLmh0bWwKIGZhc3QvZG9tL29iamVjdC1lbWJlZC1w
bHVnaW4tc2NyaXB0aW5nLmh0bWwKIGZhc3QvZG9tL29iamVjdC1wbHVnaW4taGlkZXMtcHJvcGVy
dGllcy5odG1sCiBmYXN0L2RvbS9vbmVycm9yLWltZy5odG1sCkBAIC0yNTMsNyArMjUyLDYgQEAg
ZmFzdC9sb2FkZXIvb251bmxvYWQtZm9ybS1zdWJtaXQtY3Jhc2gtMgogZmFzdC9sb2FkZXIvb251
bmxvYWQtZm9ybS1zdWJtaXQtY3Jhc2guaHRtbAogZmFzdC9sb2FkZXIvb3BhcXVlLWJhc2UtdXJs
Lmh0bWwKIGZhc3QvbG9hZGVyL3N0b3AtcHJvdmlzaW9uYWwtbG9hZHMuaHRtbAotZmFzdC9sb2Fk
ZXIveG1saHR0cHJlcXVlc3QtbWlzc2luZy1maWxlLWV4Y2VwdGlvbi5odG1sCiBmYXN0L2xvYWRl
ci9udWxsLXJlcXVlc3QtYWZ0ZXItd2lsbFNlbmRSZXF1ZXN0Lmh0bWwKIGZhc3QvbG9hZGVyL3Bs
YWluLXRleHQtZG9jdW1lbnQuaHRtbAogZmFzdC9vdmVyZmxvdy9zY3JvbGwtdmVydGljYWwtbm90
LWhvcml6b250YWwuaHRtbApAQCAtMjgwLDYgKzI3OCw4IEBAIGZhc3QvdGV4dC9wbGFpbi10ZXh0
LWxpbmUtYnJlYWtzLmh0bWwKIGZhc3QvdGV4dC96ZXJvLXdpZHRoLWNoYXJhY3RlcnMuaHRtbAog
ZmFzdC90b2tlbml6ZXIvaWdub3JlLXRhZ3MtaW4taWZyYW1lLmh0bWwKIGZhc3Qvd29ya2Vycy93
b3JrZXItbG9jYXRpb24uaHRtbAorZmFzdC94bWxodHRwcmVxdWVzdC9udWxsLWRvY3VtZW50LXht
bGh0dHByZXF1ZXN0LW9wZW4uaHRtbAorZmFzdC94bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVz
dC1taXNzaW5nLWZpbGUtZXhjZXB0aW9uLmh0bWwKIGZhc3QveHBhdGgvaWQtc2ltcGxlLmh0bWwK
IGZhc3QveHNsL21vemlsbGEtdGVzdHMueG1sCiBmYXN0L3hzbC94c2x0LXRleHQuaHRtbAo=
</data>
<flag name="review"
          id="14450"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>