<?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>16989</bug_id>
          
          <creation_ts>2008-01-23 15:28:03 -0800</creation_ts>
          <short_desc>Add send() flag checks in XmlHttpRequest</short_desc>
          <delta_ts>2008-02-17 18:03:50 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>XML</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Julien Chaffraix">jchaffraix</reporter>
          <assigned_to name="Julien Chaffraix">jchaffraix</assigned_to>
          <cc>ap</cc>
    
    <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>68074</commentid>
    <comment_count>0</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-01-23 15:28:03 -0800</bug_when>
    <thetext>As mentioned in bug 13141, we should implement the send() flag algorithm given in the XHR specification:
http://www.w3.org/TR/XMLHttpRequest/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68084</commentid>
    <comment_count>1</comment_count>
      <attachid>18632</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-01-23 18:11:02 -0800</bug_when>
    <thetext>Created attachment 18632
Implementation + test case</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68094</commentid>
    <comment_count>2</comment_count>
      <attachid>18632</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-01-23 23:44:58 -0800</bug_when>
    <thetext>Comment on attachment 18632
Implementation + test case

The send flag that the spec talks about was supposed to be m_loader being non-null in our implementation.

Is it possible to match the behavior in the spec without introducing m_sendFlag?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68112</commentid>
    <comment_count>3</comment_count>
      <attachid>18633</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-01-24 06:27:57 -0800</bug_when>
    <thetext>Created attachment 18633
Patch using m_loader as ap pointed out

(In reply to comment #2)
&gt; (From update of attachment 18632 [edit])
&gt; The send flag that the spec talks about was supposed to be m_loader being
&gt; non-null in our implementation.
&gt; 
&gt; Is it possible to match the behavior in the spec without introducing
&gt; m_sendFlag?
&gt; 

Indeed ! The attached patch display the right behaviour without the m_sendFlag.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68113</commentid>
    <comment_count>4</comment_count>
      <attachid>18633</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-01-24 09:09:10 -0800</bug_when>
    <thetext>Comment on attachment 18633
Patch using m_loader as ap pointed out

+        bug 16989: XmlHttpRequest should use the send() flag algorithm

It probably makes sense to rename this bug to make it clear what was fixed, as the send flag already worked. A detailed per-function ChangeLog would also help tremendously, since these changes are relatively risky, and will be studied by others many times if regressions come up.

+    m_state = Uninitialized;
...
+    m_loader = 0;

It seems that these changes result from a direct translation of the spec, and are not needed. For example, open() already asserts that m_state == Uninitialized, because this is ensured by other methods. Similarly, I do not see how m_loader can be non-null here.

-    if (m_state != Open) {
+    if (m_state != Open || m_loader) {

There is a check (with a FIXME) for m_loader just below this line; it should be removed.

-void XMLHttpRequest::abort()
+void XMLHttpRequest::abortRequest()

It&apos;s not clear from the name what the difference between these functions is; this will undoubtedly confuse someone sooner or later. Perhaps, it would be more straightforward to add a boolean flag with a default value to differentiate the two cases.

I&apos;m not sure if I fully understood all the changes without a detailed ChangeLog, but looks like there are still a few improvements  to be made to this patch; r- for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68114</commentid>
    <comment_count>5</comment_count>
      <attachid>18633</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-01-24 09:19:23 -0800</bug_when>
    <thetext>Comment on attachment 18633
Patch using m_loader as ap pointed out

Also, this change doesn&apos;t seem to be supported by layout tests:

 void XMLHttpRequest::setRequestHeader(const String&amp; name, const String&amp; value, ExceptionCode&amp; ec)
 {
-    if (m_state != Open) {
+    if (m_state != Open || m_loader) {

Do Firefox and IE work as the spec says?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68293</commentid>
    <comment_count>6</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-01-26 06:37:11 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 18633 [edit])
&gt; Also, this change doesn&apos;t seem to be supported by layout tests:
&gt; 
&gt;  void XMLHttpRequest::setRequestHeader(const String&amp; name, const String&amp; value,
&gt; ExceptionCode&amp; ec)
&gt;  {
&gt; -    if (m_state != Open) {
&gt; +    if (m_state != Open || m_loader) {
&gt;

to catch the new case, we would need to have called send() to set m_loader but should not have finished send() because it would trigger m_state != Open. I will try to produce a test case but I do not know if it is possible to catch it.

&gt; Do Firefox and IE work as the spec says?
&gt; 

No. Here are the results of my tests (I tested only the behaviour of abort as it is the easiest way of determining the support) :

- IE &amp; Opera seem to always set readyState to 0 without dispatching a readyState event
- The latest Firefox has a more complex algorithm : it first set readyState to 4 and dispatch a readyState event. 
  * If a listener send a new XmlHttpRequest, it considers that the current one is done and leaves the readyState to 4.
  * Otherwise, it sets readyState to 0 without dispatching a readyState event.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69260</commentid>
    <comment_count>7</comment_count>
      <attachid>18887</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-02-03 12:14:42 -0800</bug_when>
    <thetext>Created attachment 18887
updated patch

&gt; +        bug 16989: XmlHttpRequest should use the send() flag algorithm

&gt; It probably makes sense to rename this bug to make it clear what was fixed, as
&gt; the send flag already worked. A detailed per-function ChangeLog would also help
&gt; tremendously, since these changes are relatively risky, and will be studied by
&gt; others many times if regressions come up.

Changed the name for &quot;Add send() flag checks in XmlHttpRequest&quot; which is more explicit. I have also added a detailed ChangeLog

&gt; +    m_state = Uninitialized;

That one should be kept as we do not update the readystate in abort (it is more visible in the new patch)
&gt; ...
&gt; +    m_loader = 0;

Replaced by an ASSERT(!m_loader)

&gt; It seems that these changes result from a direct translation of the spec, and
&gt; are not needed. For example, open() already asserts that m_state ==
&gt; Uninitialized, because this is ensured by other methods. Similarly, I do not
&gt; see how m_loader can be non-null here.

The m_state == Uninitialized assertion is a guard that was introduced to replace a changeState(Uninitialized) that was moved in abort (see bug 13141).

&gt; There is a check (with a FIXME) for m_loader just below this line; it should be
&gt; removed.

Removed the FIXME

&gt; It&apos;s not clear from the name what the difference between these functions is;
&gt; this will undoubtedly confuse someone sooner or later. Perhaps, it would be
&gt; more straightforward to add a boolean flag with a default value to
&gt; differentiate the two cases.

I have merged the 2 methods and added a boolean parameter &apos;isJavascripAbort&apos; which triggers the abort behaviour as specified in the spec. The default value does not change readystate (which was the behaviour before bug 13141).

&gt;  void XMLHttpRequest::setRequestHeader(const String&amp; name, const String&amp; value,
&gt; ExceptionCode&amp; ec)
&gt;  {
&gt; -    if (m_state != Open) {
&gt; +    if (m_state != Open || m_loader) {
&gt;
&gt; to catch the new case, we would need to have called send() to set m_loader but
&gt; should not have finished send() because it would trigger m_state != Open. I
&gt; will try to produce a test case but I do not know if it is possible to catch
&gt; it.

I could not produce a test case for that part : send() is done completely before continuing Javascript execution which trigger m_state != Open.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69270</commentid>
    <comment_count>8</comment_count>
      <attachid>18887</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-02-03 14:01:39 -0800</bug_when>
    <thetext>Comment on attachment 18887
updated patch

This looks great to me. I have some suggestions on how to improve it.

Instead of adding the boolean parameter to abort, I suggest we create a private function with a name like cancel() or kill() or stop() and use abort() only for the true public XMLHttpRequest.abort. Then abort() can call the other function first, then do the work you put inside your isJavascriptAbort if statement.

The language is JavaScript, not Javascript.

+    // Do not check for m_loader as required by the spec as it cannot be non null

I don&apos;t understand this comment. Are you saying that we could assert m_loader is not 0? If so, then please add that assert. Another thing I&apos;d ask is: &quot;How can the spec require this?&quot; Since m_loader is an internal variable the specification should have nothing to say about it directly; if it says anything it would be indirect and I&apos;d like to know what it says. I think you need a better comment, and I want to more clearly understand why we don&apos;t need the if statement any more.

 void XMLHttpRequest::setRequestHeader(const String&amp; name, const String&amp; value, ExceptionCode&amp; ec)
 {
-    if (m_state != Open) {
+    if (m_state != Open || m_loader) {

You say that this cannot be covered by test cases. If not, then what is the check for? Why is this change needed? Why can&apos;t we test it? We can easily construct a load that won&apos;t complete with our test HTTP server, I believe.

I&apos;m going to say review- for now, but this looks really good to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69271</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-02-03 14:03:56 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; It&apos;s not clear from the name what the difference between these functions is;
&gt; this will undoubtedly confuse someone sooner or later. Perhaps, it would be
&gt; more straightforward to add a boolean flag with a default value to
&gt; differentiate the two cases.

I feel guilty because my comment is exactly the opposite of Alexey&apos;s.

If you decide to keep the boolean parameter, then I suggest that the default be the JavaScript behavior.

But on the other hand, it seems that the lower level version of abort() is a private function and I&apos;d be happier not exposing both. Sorry for the back and forth. You may want to hear what Alexey has to say too.

Again, my apologies for saying the opposite of what Alexey said.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69276</commentid>
    <comment_count>10</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-02-03 14:59:12 -0800</bug_when>
    <thetext>My suggestion to use a boolean flag was due to the fact I didn&apos;t have a good suggestion for another function&apos;s name. I am not sure if cancel, kill or stop really convey the difference either.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69283</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-02-03 16:03:36 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; My suggestion to use a boolean flag was due to the fact I didn&apos;t have a good
&gt; suggestion for another function&apos;s name. I am not sure if cancel, kill or stop
&gt; really convey the difference either.

If we can&apos;t find a good name, I suggest internalAbort().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69322</commentid>
    <comment_count>12</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-02-04 00:10:22 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; If we can&apos;t find a good name, I suggest internalAbort().

Thanks, that sounds better than a boolean flag to me.


+    // Do not check for m_loader as required by the spec as it cannot be non null
     if (m_state != Open) {
         ec = INVALID_STATE_ERR;
         return;
     }
-  
-    // FIXME: Should this abort or raise an exception instead if we already have a m_loader going?
-    if (m_loader)
-        return;

Why this doesn&apos;t break the send() flag algorithm? Calling send() twice in a row was being caught by the if (m_loader) check - and in the previous version of the patch, you changed the behavior from silently ignoring that to raising an exception, as required by the spec.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69423</commentid>
    <comment_count>13</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-02-04 19:39:01 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #11)
&gt; &gt; If we can&apos;t find a good name, I suggest internalAbort().
&gt; 
&gt; Thanks, that sounds better than a boolean flag to me.
&gt; 
&gt; 
&gt; +    // Do not check for m_loader as required by the spec as it cannot be non
&gt; null
&gt;      if (m_state != Open) {
&gt;          ec = INVALID_STATE_ERR;
&gt;          return;
&gt;      }
&gt; -  
&gt; -    // FIXME: Should this abort or raise an exception instead if we already
&gt; have a m_loader going?
&gt; -    if (m_loader)
&gt; -        return;
&gt; 
&gt; Why this doesn&apos;t break the send() flag algorithm? Calling send() twice in a row
&gt; was being caught by the if (m_loader) check - and in the previous version of
&gt; the patch, you changed the behavior from silently ignoring that to raising an
&gt; exception, as required by the spec.
&gt; 

I got confused by comment #4 where you stated that m_loader could not be non null. It is valid to do that check and I will add it again in the next patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69425</commentid>
    <comment_count>14</comment_count>
      <attachid>18924</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-02-04 20:25:34 -0800</bug_when>
    <thetext>Created attachment 18924
Updated patch with all the required testcases

&gt; You say that this cannot be covered by test cases. If not, then what is the
&gt; check for? Why is this change needed? Why can&apos;t we test it? We can easily
&gt; construct a load that won&apos;t complete with our test HTTP server, I believe.

You are right, I was able to produce the missing test cases. I was not looking in the right direction, thanks for pointing me to it.

&gt; If we can&apos;t find a good name, I suggest internalAbort().

I have picked internalAbort() as other names do not fit or could be misleading (we already have cancelRequests for example).

There was a big misinterpretation of the specification in the previous iterations which is corrected in that patch (abort was not doing step 3 &amp; 4 correctly).

I have been able to produce all the required test cases (I hope) and trying them on the other browser does provide more information about the current implementation :

- Opera does not have the send() flag checks in setRequestHeader and open
- Firefox does have the 2 checks

I could not check IE for the send() flag checks but I should be able to test tomorrow. I will update the results here as soon as I can.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69453</commentid>
    <comment_count>15</comment_count>
      <attachid>18933</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-02-05 03:06:36 -0800</bug_when>
    <thetext>Created attachment 18933
Correct mistakes in the ChangeLog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69485</commentid>
    <comment_count>16</comment_count>
      <attachid>18933</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-02-05 11:44:48 -0800</bug_when>
    <thetext>Comment on attachment 18933
Correct mistakes in the ChangeLog

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>70996</commentid>
    <comment_count>17</comment_count>
    <who name="Alp Toker">alp</who>
    <bug_when>2008-02-17 18:03:50 -0800</bug_when>
    <thetext>Landed in r30362.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18632</attachid>
            <date>2008-01-23 18:11:02 -0800</date>
            <delta_ts>2008-01-24 06:27:57 -0800</delta_ts>
            <desc>Implementation + test case</desc>
            <filename>bug16989.patch</filename>
            <type>text/plain</type>
            <size>13512</size>
            <attacher name="Julien Chaffraix">jchaffraix</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyOTc1MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjUgQEAKKzIwMDgtMDEtMjMgIEp1bGllbiBDaGFmZnJhaXggIDxqdWxpZW4uY2hh
ZmZyYWl4QGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBmaXggYnVnIDE2OTg5OiBYbWxIdHRwUmVxdWVzdCBzaG91bGQgdXNlIHRoZSBz
ZW5kKCkgZmxhZyBhbGdvcml0aG0KKworICAgICAgICBUZXN0czogaHR0cC90ZXN0cy94bWxodHRw
cmVxdWVzdC94bWxodHRwcmVxdWVzdC1hYm9ydC1yZWFkeVN0YXRlLWRvbmUuaHRtbAorICAgICAg
ICAgICAgICAgaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVzdC1hYm9ydC1y
ZWFkeVN0YXRlLXVuc2VuZC5odG1sCisKKyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OlhNTEh0dHBSZXF1ZXN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjpvcGVuKToKKyAgICAgICAgKFdlYkNvcmU6
OlhNTEh0dHBSZXF1ZXN0OjpzZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0
OjphYm9ydFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OmFib3J0
KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjpzZXRSZXF1ZXN0SGVhZGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0Ojpwcm9jZXNzU3luY0xvYWRSZXN1bHRz
KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0Ojp3aWxsU2VuZFJlcXVlc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OmNhbmNlbFJlcXVlc3RzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjpkZXRhY2hSZXF1ZXN0cyk6CisgICAgICAgICog
eG1sL1hNTEh0dHBSZXF1ZXN0Lmg6CisKIDIwMDgtMDEtMjMgIEFudHRpIEtvaXZpc3RvICA8YW50
dGlAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEh5YXR0LCBBZGVsZS4KSW5kZXg6
IFdlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3ht
bC9YTUxIdHRwUmVxdWVzdC5jcHAJKHJldmlzaW9uIDI5NzUyKQorKysgV2ViQ29yZS94bWwvWE1M
SHR0cFJlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjYsNiArMjY2LDcgQEAKICAgICAs
IG1fcmVzcG9uc2VUZXh0KCIiKQogICAgICwgbV9jcmVhdGVkRG9jdW1lbnQoZmFsc2UpCiAgICAg
LCBtX2Fib3J0ZWQoZmFsc2UpCisgICAgLCBtX3NlbmRGbGFnKGZhbHNlKQogewogICAgIEFTU0VS
VChtX2RvYyk7CiAgICAgYWRkVG9SZXF1ZXN0c0J5RG9jdW1lbnQobV9kb2MsIHRoaXMpOwpAQCAt
MzMyLDcgKzMzMyw4IEBACiAKIHZvaWQgWE1MSHR0cFJlcXVlc3Q6Om9wZW4oY29uc3QgU3RyaW5n
JiBtZXRob2QsIGNvbnN0IEtVUkwmIHVybCwgYm9vbCBhc3luYywgRXhjZXB0aW9uQ29kZSYgZWMp
CiB7Ci0gICAgYWJvcnQoKTsKKyAgICBhYm9ydFJlcXVlc3QoKTsKKyAgICBjaGFuZ2VTdGF0ZShV
bmluaXRpYWxpemVkKTsKICAgICBtX2Fib3J0ZWQgPSBmYWxzZTsKIAogICAgIC8vIGNsZWFyIHN0
dWZmIGZyb20gcG9zc2libGUgcHJldmlvdXMgbG9hZApAQCAtMzc3LDYgKzM3OSw3IEBACiAKICAg
ICBtX2FzeW5jID0gYXN5bmM7CiAKKyAgICBtX3NlbmRGbGFnID0gZmFsc2U7CiAgICAgY2hhbmdl
U3RhdGUoT3Blbik7CiB9CiAKQEAgLTQwMiwxMSArNDA1LDExIEBACiAgICAgaWYgKCFtX2RvYykK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fc3RhdGUgIT0gT3BlbikgeworICAgIGlmICht
X3N0YXRlICE9IE9wZW4gfHwgbV9zZW5kRmxhZykgewogICAgICAgICBlYyA9IElOVkFMSURfU1RB
VEVfRVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAKKwogICAgIC8vIEZJWE1FOiBTaG91
bGQgdGhpcyBhYm9ydCBvciByYWlzZSBhbiBleGNlcHRpb24gaW5zdGVhZCBpZiB3ZSBhbHJlYWR5
IGhhdmUgYSBtX2xvYWRlciBnb2luZz8KICAgICBpZiAobV9sb2FkZXIpCiAgICAgICAgIHJldHVy
bjsKQEAgLTQzOCw2ICs0NDEsMTAgQEAKICAgICAgICAgcmVxdWVzdC5zZXRIVFRQQm9keShQYXNz
UmVmUHRyPEZvcm1EYXRhPihuZXcgRm9ybURhdGEobV9lbmNvZGluZy5lbmNvZGUoYm9keS5jaGFy
YWN0ZXJzKCksIGJvZHkubGVuZ3RoKCkpKSkpOwogICAgIH0KIAorICAgIC8vIFNldCBtX2ZsYWcg
YWZ0ZXIgY2FsbGluZyBzZXRSZXF1ZXN0SGVhZGVyIHRvIGF2b2lkIHRyaWdnZXJpbmcgdGhlIGFz
c2VydGlvbgorICAgIGlmIChtX2FzeW5jKQorICAgICAgICBtX3NlbmRGbGFnID0gdHJ1ZTsKKwog
ICAgIGlmIChtX3JlcXVlc3RIZWFkZXJzLnNpemUoKSA+IDApCiAgICAgICAgIHJlcXVlc3QuYWRk
SFRUUEhlYWRlckZpZWxkcyhtX3JlcXVlc3RIZWFkZXJzKTsKIApAQCAtNDgzLDcgKzQ5MCw3IEBA
CiAgICAgbV9sb2FkZXIgPSBTdWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRlKG1fZG9jLT5mcmFtZSgp
LCB0aGlzLCByZXF1ZXN0LCBmYWxzZSwgdHJ1ZSwgcmVxdWVzdC51cmwoKS5pc0xvY2FsRmlsZSgp
KTsKIH0KIAotdm9pZCBYTUxIdHRwUmVxdWVzdDo6YWJvcnQoKQordm9pZCBYTUxIdHRwUmVxdWVz
dDo6YWJvcnRSZXF1ZXN0KCkKIHsKICAgICBib29sIGhhZExvYWRlciA9IG1fbG9hZGVyOwogCkBA
IC00OTQsMTIgKzUwMSwyNCBAQAogICAgICAgICBtX2xvYWRlciA9IDA7CiAgICAgfQogCisgICAg
bV9yZXF1ZXN0SGVhZGVycy5jbGVhcigpOworCiAgICAgbV9kZWNvZGVyID0gMDsKIAogICAgIGlm
IChoYWRMb2FkZXIpCiAgICAgICAgIGRyb3BQcm90ZWN0aW9uKCk7Cit9CiAKLSAgICBtX3N0YXRl
ID0gVW5pbml0aWFsaXplZDsKK3ZvaWQgWE1MSHR0cFJlcXVlc3Q6OmFib3J0KCkKK3sKKyAgICBh
Ym9ydFJlcXVlc3QoKTsKKworICAgIGlmICgobV9zdGF0ZSA8PSBPcGVuICYmICFtX3NlbmRGbGFn
KSB8fCBtX3N0YXRlID09IExvYWRlZCkKKyAgICAgICAgbV9zdGF0ZSA9IFVuaW5pdGlhbGl6ZWQ7
CisgICAgZWxzZSB7CisgICAgICAgIG1fc2VuZEZsYWcgPSBmYWxzZTsKKyAgICAgICAgY2hhbmdl
U3RhdGUoTG9hZGVkKTsKKyAgICB9CiB9CiAKIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRyb3BQcm90
ZWN0aW9uKCkgICAgICAgIApAQCAtNTMwLDcgKzU0OSw3IEBACiAgICAgCiB2b2lkIFhNTEh0dHBS
ZXF1ZXN0OjpzZXRSZXF1ZXN0SGVhZGVyKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5n
JiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgaWYgKG1fc3RhdGUgIT0gT3Blbikg
eworICAgIGlmIChtX3N0YXRlICE9IE9wZW4gfHwgbV9zZW5kRmxhZykgewogICAgICAgICBTZXR0
aW5ncyogc2V0dGluZ3MgPSBtX2RvYyA/IG1fZG9jLT5zZXR0aW5ncygpIDogMDsKICAgICAgICAg
aWYgKHNldHRpbmdzICYmIHNldHRpbmdzLT51c2VzRGFzaGJvYXJkQmFja3dhcmRDb21wYXRpYmls
aXR5TW9kZSgpKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtNjUyLDcgKzY3MSw3IEBACiB2b2lk
IFhNTEh0dHBSZXF1ZXN0Ojpwcm9jZXNzU3luY0xvYWRSZXN1bHRzKGNvbnN0IFZlY3RvcjxjaGFy
PiYgZGF0YSwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7CiAgICAgaWYgKCF1
cmxNYXRjaGVzRG9jdW1lbnREb21haW4ocmVzcG9uc2UudXJsKCkpKSB7Ci0gICAgICAgIGFib3J0
KCk7CisgICAgICAgIGFib3J0UmVxdWVzdCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBA
IC03MDUsNyArNzI0LDcgQEAKIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OndpbGxTZW5kUmVxdWVzdChT
dWJyZXNvdXJjZUxvYWRlciosIFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3Vy
Y2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkKIHsKICAgICBpZiAoIXVybE1hdGNoZXNEb2N1
bWVudERvbWFpbihyZXF1ZXN0LnVybCgpKSkKLSAgICAgICAgYWJvcnQoKTsKKyAgICAgICAgYWJv
cnRSZXF1ZXN0KCk7CiB9CiAKIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRpZFJlY2VpdmVSZXNwb25z
ZShTdWJyZXNvdXJjZUxvYWRlciosIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQpA
QCAtNzY4LDcgKzc4Nyw3IEBACiAgICAgUmVxdWVzdHNTZXQgY29weSA9ICpyZXF1ZXN0czsKICAg
ICBSZXF1ZXN0c1NldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY29weS5lbmQoKTsKICAgICBmb3Ig
KFJlcXVlc3RzU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IGNvcHkuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KQotICAgICAgICAoKml0KS0+YWJvcnQoKTsKKyAgICAgICAgKCppdCktPmFib3J0UmVx
dWVzdCgpOwogfQogCiB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpkZXRhY2hSZXF1ZXN0cyhEb2N1bWVu
dCogbV9kb2MpCkBAIC03ODAsNyArNzk5LDcgQEAKICAgICBSZXF1ZXN0c1NldDo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gcmVxdWVzdHMtPmVuZCgpOwogICAgIGZvciAoUmVxdWVzdHNTZXQ6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gcmVxdWVzdHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAg
ICAgICAoKml0KS0+bV9kb2MgPSAwOwotICAgICAgICAoKml0KS0+YWJvcnQoKTsKKyAgICAgICAg
KCppdCktPmFib3J0UmVxdWVzdCgpOwogICAgIH0KICAgICBkZWxldGUgcmVxdWVzdHM7CiB9Cklu
ZGV4OiBXZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
eG1sL1hNTEh0dHBSZXF1ZXN0LmgJKHJldmlzaW9uIDI5NzUyKQorKysgV2ViQ29yZS94bWwvWE1M
SHR0cFJlcXVlc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNzEsNiArNzEsNyBAQAogICAgIHZvaWQg
b3Blbihjb25zdCBTdHJpbmcmIG1ldGhvZCwgY29uc3QgS1VSTCYsIGJvb2wgYXN5bmMsIGNvbnN0
IFN0cmluZyYgdXNlciwgY29uc3QgU3RyaW5nJiBwYXNzd29yZCwgRXhjZXB0aW9uQ29kZSYpOwog
ICAgIHZvaWQgc2VuZChjb25zdCBTdHJpbmcmIGJvZHksIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2
b2lkIGFib3J0KCk7CisgICAgdm9pZCBhYm9ydFJlcXVlc3QoKTsKICAgICB2b2lkIHNldFJlcXVl
c3RIZWFkZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBFeGNlcHRp
b25Db2RlJik7CiAgICAgdm9pZCBvdmVycmlkZU1JTUVUeXBlKGNvbnN0IFN0cmluZyYgb3ZlcnJp
ZGUpOwogICAgIFN0cmluZyBnZXRBbGxSZXNwb25zZUhlYWRlcnMoRXhjZXB0aW9uQ29kZSYpIGNv
bnN0OwpAQCAtMTUyLDYgKzE1Myw3IEBACiAgICAgbXV0YWJsZSBSZWZQdHI8RG9jdW1lbnQ+IG1f
cmVzcG9uc2VYTUw7CiAKICAgICBib29sIG1fYWJvcnRlZDsKKyAgICBib29sIG1fc2VuZEZsYWc7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LWFib3J0LXJlYWR5U3RhdGUtZG9uZS1l
eHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRw
cmVxdWVzdC94bWxodHRwcmVxdWVzdC1hYm9ydC1yZWFkeVN0YXRlLWRvbmUtZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAyOTcyMSkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVl
c3QveG1saHR0cHJlcXVlc3QtYWJvcnQtcmVhZHlTdGF0ZS1kb25lLWV4cGVjdGVkLnR4dAkod29y
a2luZyBjb3B5KQpAQCAtMSw5ICsxLDE1IEBACiBUZXN0IGJ1ZyAxMzE0MSA6IFhNTEh0dHBSZXF1
ZXN0IHNob3VsZCBzZXQgcmVhZHlTdGF0ZSB0byAwIGFmdGVyIGFib3J0KCkKIAotU2hvdWxkIHNl
ZSAiUEFTUyIgZm91ciB0aW1lczoKK1VwZGF0ZWQgZm9yIGJ1ZyAxNjk4OTogWG1sSHR0cFJlcXVl
c3Qgc2hvdWxkIHVzZSB0aGUgc2VuZCgpIGZsYWcgYWxnb3JpdGhtCiAKK1Nob3VsZCBzZWUgIlBB
U1MiICYgIlBBU1MgKHJlYXN5U3RhdGUgZXZlbnQgc2VuZCkiIGZvdXIgdGltZXM6CisKK1BBU1Mg
KHJlYWR5c3RhdGUgZXZlbnQgc2VuZCkKIFBBU1MKK1BBU1MgKHJlYWR5c3RhdGUgZXZlbnQgc2Vu
ZCkKIFBBU1MKK1BBU1MgKHJlYWR5c3RhdGUgZXZlbnQgc2VuZCkKIFBBU1MKK1BBU1MgKHJlYWR5
c3RhdGUgZXZlbnQgc2VuZCkKIFBBU1MKIApJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94
bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVzdC1hYm9ydC1yZWFkeVN0YXRlLWV4cGVjdGVkLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3ht
bGh0dHByZXF1ZXN0LWFib3J0LXJlYWR5U3RhdGUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAyOTc1
MikKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVl
c3QtYWJvcnQtcmVhZHlTdGF0ZS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsOSAr
MCwwIEBACi1UZXN0IGJ1ZyAxMzE0MSA6IFhNTEh0dHBSZXF1ZXN0IHNob3VsZCBzZXQgcmVhZHlT
dGF0ZSB0byAwIGFmdGVyIGFib3J0KCkKLQotU2hvdWxkIHNlZSAiUEFTUyIgZm91ciB0aW1lczoK
LQotUEFTUwotUEFTUwotUEFTUwotUEFTUwotCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LWFib3J0LXJlYWR5U3RhdGUtZG9uZS5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QveG1s
aHR0cHJlcXVlc3QtYWJvcnQtcmVhZHlTdGF0ZS1kb25lLmh0bWwJKHJldmlzaW9uIDI5NzIxKQor
KysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVzdC1h
Ym9ydC1yZWFkeVN0YXRlLWRvbmUuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMyw3ICszLDggQEAK
IDxib2R5PgogCiA8cD5UZXN0IGJ1ZyAxMzE0MSA6IFhNTEh0dHBSZXF1ZXN0IHNob3VsZCBzZXQg
cmVhZHlTdGF0ZSB0byAwIGFmdGVyIGFib3J0KCkgPC9wPgotPHA+U2hvdWxkIHNlZSAiUEFTUyIg
Zm91ciB0aW1lczo8L3A+Cis8cD5VcGRhdGVkIGZvciBidWcgMTY5ODk6IFhtbEh0dHBSZXF1ZXN0
IHNob3VsZCB1c2UgdGhlIHNlbmQoKSBmbGFnIGFsZ29yaXRobSA8L3A+Cis8cD5TaG91bGQgc2Vl
ICJQQVNTIiAmICJQQVNTIChyZWFzeVN0YXRlIGV2ZW50IHNlbmQpIiBmb3VyIHRpbWVzOjwvcD4K
IDxkaXYgaWQ9ImFucyI+PC9kaXY+CiAKIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4K
QEAgLTE0LDEwICsxNSwxMCBAQAogCiAvLyBVc2VkIHRvIGRldGVjdCBpZiBhIHJlYWR5c3RhdGUg
ZXZlbnQgaXMgZGlzcGF0Y2hlZAogZnVuY3Rpb24gY2F0Y2hSZWFkeXN0YXRlRXZlbnRBYm9ydCgp
IHsKLSAgICBsb2coIkZBSUxFRCAocmVhZHlzdGF0ZSBldmVudCBzZW5kKSIpOworICAgIGxvZygi
UEFTUyAocmVhZHlzdGF0ZSBldmVudCBzZW5kKSIpOwogfQogCi1mdW5jdGlvbiB0ZXN0KG51bSkK
K2Z1bmN0aW9uIHRlc3RBYm9ydFRvRG9uZShudW0pCiB7CiAgICAgdmFyIHhocjsKIApAQCAtMzYs
NyArMzcsNyBAQAogICAgICAgICAgICAgKytmaW5pc2hlZFRlc3RzOwogICAgICAgICAgICAgdGhp
cy5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBjYXRjaFJlYWR5c3RhdGVFdmVudEFib3J0OwogICAgICAg
ICAgICAgdGhpcy5hYm9ydCgpOwotICAgICAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSAw
KQorICAgICAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSA0KQogICAgICAgICAgICAgICAg
IGxvZygiUEFTUyIpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGxvZygiRkFJ
TEVEIik7CkBAIC01OCwxMCArNTksMTEgQEAKIAogdmFyIGZpbmlzaGVkVGVzdHMgPSAwOwogCi1m
b3IgKGkgPSAxOyBpIDwgNTsgaSsrKSB7Ci0gICAgdGVzdChpKTsKLX0KK3ZhciBhYm9ydFRvRG8g
PSBbJzInLCAnMycsICcyJywgJzMnXTsKIAorZm9yIChpID0gMDsgaSA8IGFib3J0VG9Eby5sZW5n
dGg7IGkrKykKKyAgICB0ZXN0QWJvcnRUb0RvbmUoYWJvcnRUb0RvW2ldKTsKKwogPC9zY3JpcHQ+
CiA8L2JvZHk+CiA8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHBy
ZXF1ZXN0L3htbGh0dHByZXF1ZXN0LWFib3J0LXJlYWR5U3RhdGUuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LWFi
b3J0LXJlYWR5U3RhdGUuaHRtbAkocmV2aXNpb24gMjk3NTIpCisrKyBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LWFib3J0LXJlYWR5U3RhdGUuaHRt
bAkod29ya2luZyBjb3B5KQpAQCAtMSw2NyArMCwwIEBACi08aHRtbD4KLTxoZWFkPjwvaGVhZD4K
LTxib2R5PgotCi08cD5UZXN0IGJ1ZyAxMzE0MSA6IFhNTEh0dHBSZXF1ZXN0IHNob3VsZCBzZXQg
cmVhZHlTdGF0ZSB0byAwIGFmdGVyIGFib3J0KCkgPC9wPgotPHA+U2hvdWxkIHNlZSAiUEFTUyIg
Zm91ciB0aW1lczo8L3A+Ci08ZGl2IGlkPSJhbnMiPjwvZGl2PgotCi08c2NyaXB0IHR5cGU9InRl
eHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiBsb2cobWVzc2FnZSkgewotICAgIGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJhbnMiKS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSht
ZXNzYWdlKSk7Ci0gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFucyIpLmFwcGVuZENoaWxk
KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJyIikpOwotfQotCi0vLyBVc2VkIHRvIGRldGVjdCBp
ZiBhIHJlYWR5c3RhdGUgZXZlbnQgaXMgZGlzcGF0Y2hlZAotZnVuY3Rpb24gY2F0Y2hSZWFkeXN0
YXRlRXZlbnRBYm9ydCgpIHsKLSAgICBsb2coIkZBSUxFRCAocmVhZHlzdGF0ZSBldmVudCBzZW5k
KSIpOwotfQotCi1mdW5jdGlvbiB0ZXN0KG51bSkKLXsKLSAgICB2YXIgeGhyOwotCi0gICAgaWYg
KHdpbmRvdy5YTUxIdHRwUmVxdWVzdCkgewotICAgICAgICB4aHIgPSBuZXcgWE1MSHR0cFJlcXVl
c3QoKTsKLSAgICB9IGVsc2UgewotICAgICAgICB0cnkgewotICAgICAgICAgICAgeGhyID0gbmV3
IEFjdGl2ZVhPYmplY3QoIk1zeG1sMi5YTUxIVFRQIik7Ci0gICAgICAgIH0gY2F0Y2ggKGV4KSB7
Ci0gICAgICAgICAgICB4aHIgPSBuZXcgQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTEhUVFAi
KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5j
dGlvbiAoKSB7Ci0gICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gbnVtKSB7Ci0gICAgICAg
ICAgICArK2ZpbmlzaGVkVGVzdHM7Ci0gICAgICAgICAgICB0aGlzLm9ucmVhZHlzdGF0ZWNoYW5n
ZSA9IGNhdGNoUmVhZHlzdGF0ZUV2ZW50QWJvcnQ7Ci0gICAgICAgICAgICB0aGlzLmFib3J0KCk7
Ci0gICAgICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09IDApCi0gICAgICAgICAgICAgICAg
bG9nKCJQQVNTIik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbG9nKCJGQUlM
RUQiKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKGZpbmlzaGVkVGVzdHMgPT0g
NCAmJiB3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCi0gICAgICAgICAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Ci0gICAgfQotCi0gICAgeGhyLm9wZW4oIkdFVCIsICJy
ZXNvdXJjZXMvMTI1MS5odG1sIiwgdHJ1ZSk7Ci0gICAgaWYgKG51bSAhPSAxKQotICAgICAgICB4
aHIuc2VuZChudWxsKTsKLX0KLQotaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgewot
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKLSAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci53YWl0VW50aWxEb25lKCk7Ci19Ci0KLXZhciBmaW5pc2hlZFRlc3RzID0gMDsKLQot
Zm9yIChpID0gMTsgaSA8IDU7IGkrKykgewotICAgIHRlc3QoaSk7Ci19Ci0KLTwvc2NyaXB0Pgot
PC9ib2R5PgotPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVx
dWVzdC94bWxodHRwcmVxdWVzdC1hYm9ydC1yZWFkeVN0YXRlLXVuc2VuZC1leHBlY3RlZC50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC94bWxo
dHRwcmVxdWVzdC1hYm9ydC1yZWFkeVN0YXRlLXVuc2VuZC1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDI5NzIxKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC94bWxodHRw
cmVxdWVzdC1hYm9ydC1yZWFkeVN0YXRlLXVuc2VuZC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw3IEBACiBUZXN0IGJ1ZyAxMzE0MSA6IFhNTEh0dHBSZXF1ZXN0IHNob3Vs
ZCBzZXQgcmVhZHlTdGF0ZSB0byAwIGFmdGVyIGFib3J0KCkKIAorVXBkYXRlZCBmb3IgYnVnIDE2
OTg5OiBYbWxIdHRwUmVxdWVzdCBzaG91bGQgdXNlIHRoZSBzZW5kKCkgZmxhZyBhbGdvcml0aG0K
KwogU2hvdWxkIHNlZSAiUEFTUyIgZm91ciB0aW1lczoKIAogUEFTUwpJbmRleDogTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVzdC1hYm9ydC1yZWFkeVN0
YXRlLXVuc2VuZC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1s
aHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtYWJvcnQtcmVhZHlTdGF0ZS11bnNlbmQuaHRtbAko
cmV2aXNpb24gMjk3MjEpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0
L3htbGh0dHByZXF1ZXN0LWFib3J0LXJlYWR5U3RhdGUtdW5zZW5kLmh0bWwJKHdvcmtpbmcgY29w
eSkKQEAgLTMsNiArMyw3IEBACiA8Ym9keT4KIAogPHA+VGVzdCBidWcgMTMxNDEgOiBYTUxIdHRw
UmVxdWVzdCBzaG91bGQgc2V0IHJlYWR5U3RhdGUgdG8gMCBhZnRlciBhYm9ydCgpIDwvcD4KKzxw
PlVwZGF0ZWQgZm9yIGJ1ZyAxNjk4OTogWG1sSHR0cFJlcXVlc3Qgc2hvdWxkIHVzZSB0aGUgc2Vu
ZCgpIGZsYWcgYWxnb3JpdGhtIDwvcD4KIDxwPlNob3VsZCBzZWUgIlBBU1MiIGZvdXIgdGltZXM6
PC9wPgogPGRpdiBpZD0iYW5zIj48L2Rpdj4KIApAQCAtMTcsNyArMTgsNyBAQAogICAgIGxvZygi
RkFJTEVEIChyZWFkeXN0YXRlIGV2ZW50IHNlbmQpIik7CiB9CiAKLWZ1bmN0aW9uIHRlc3QobnVt
KQorZnVuY3Rpb24gdGVzdEFib3J0VG9VbnNlbmQobnVtKQogewogICAgIHZhciB4aHI7CiAKQEAg
LTU4LDEwICs1OSwxMSBAQAogCiB2YXIgZmluaXNoZWRUZXN0cyA9IDA7CiAKLWZvciAoaSA9IDE7
IGkgPCA1OyBpKyspIHsKLSAgICB0ZXN0KGkpOwotfQordmFyIGFib3J0VG9EbyA9IFsnMScsICc0
JywgJzEnLCAnNCddOwogCitmb3IgKGkgPSAwOyBpIDwgYWJvcnRUb0RvLmxlbmd0aDsgaSsrKQor
ICAgIHRlc3RBYm9ydFRvVW5zZW5kKGFib3J0VG9Eb1tpXSk7CisKIDwvc2NyaXB0PgogPC9ib2R5
PgogPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMjk3NTIpCisrKyBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOCBAQAorMjAwOC0wMS0yMyAgSnVsaWVu
IENoYWZmcmFpeCAgPGp1bGllbi5jaGFmZnJhaXhAZ21haWwuY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGJ1ZyAxNjk4OTogWG1sSHR0cFJlcXVl
c3Qgc2hvdWxkIHVzZSB0aGUgc2VuZCgpIGZsYWcgYWxnb3JpdGhtCisKKyAgICAgICAgU3BsaXR0
ZWQgeG1saHR0cHJlcXVlc3QtYWJvcnQtcmVhZHlzdGF0ZS1kb25lLmh0bWwgaW4gMiB0ZXN0IGNh
c2VzCisKKyAgICAgICAgKiBodHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0
LWFib3J0LXJlYWR5U3RhdGUtZG9uZS1leHBlY3RlZC50eHQ6IENvcGllZCBmcm9tIExheW91dFRl
c3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtYWJvcnQtcmVhZHlT
dGF0ZS1leHBlY3RlZC50eHQuCisgICAgICAgICogaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC94
bWxodHRwcmVxdWVzdC1hYm9ydC1yZWFkeVN0YXRlLWRvbmUuaHRtbDogQ29waWVkIGZyb20gTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVzdC1hYm9ydC1y
ZWFkeVN0YXRlLmh0bWwuCisgICAgICAgICogaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC94bWxo
dHRwcmVxdWVzdC1hYm9ydC1yZWFkeVN0YXRlLWV4cGVjdGVkLnR4dDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBodHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LWFib3J0LXJlYWR5
U3RhdGUtdW5zZW5kLWV4cGVjdGVkLnR4dDogQ29waWVkIGZyb20gTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy94bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVzdC1hYm9ydC1yZWFkeVN0YXRlLWV4cGVj
dGVkLnR4dC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1
ZXN0LWFib3J0LXJlYWR5U3RhdGUtdW5zZW5kLmh0bWw6IENvcGllZCBmcm9tIExheW91dFRlc3Rz
L2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtYWJvcnQtcmVhZHlTdGF0
ZS5odG1sLgorICAgICAgICAqIGh0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVl
c3QtYWJvcnQtcmVhZHlTdGF0ZS5odG1sOiBSZW1vdmVkLgorCiAyMDA4LTAxLTIzICBBbGV4ZXkg
UHJvc2t1cnlha292ICA8YXBAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJp
bi4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18633</attachid>
            <date>2008-01-24 06:27:57 -0800</date>
            <delta_ts>2008-02-03 12:14:42 -0800</delta_ts>
            <desc>Patch using m_loader as ap pointed out</desc>
            <filename>bug16989-loader.patch</filename>
            <type>text/plain</type>
            <size>18842</size>
            <attacher name="Julien Chaffraix">jchaffraix</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyOTc1NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjQgQEAKKzIwMDgtMDEtMjQgIEp1bGllbiBDaGFmZnJhaXggIDxqdWxpZW4uY2hh
ZmZyYWl4QGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBidWcgMTY5ODk6IFhtbEh0dHBSZXF1ZXN0IHNob3VsZCB1c2UgdGhlIHNlbmQo
KSBmbGFnIGFsZ29yaXRobQorCisgICAgICAgIFRlc3RzOiBodHRwL3Rlc3RzL3htbGh0dHByZXF1
ZXN0L3htbGh0dHByZXF1ZXN0LWFib3J0LXJlYWR5U3RhdGUtZG9uZS5odG1sCisgICAgICAgICAg
ICAgICBodHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LWFib3J0LXJlYWR5
U3RhdGUtdW5zZW5kLmh0bWwKKworICAgICAgICAqIHhtbC9YTUxIdHRwUmVxdWVzdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6b3Blbik6CisgICAgICAgIChXZWJDb3Jl
OjpYTUxIdHRwUmVxdWVzdDo6c2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVz
dDo6YWJvcnRSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjphYm9y
dCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6c2V0UmVxdWVzdEhlYWRlcik6
CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6cHJvY2Vzc1N5bmNMb2FkUmVzdWx0
cyk6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6d2lsbFNlbmRSZXF1ZXN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjpjYW5jZWxSZXF1ZXN0cyk6CisgICAg
ICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6ZGV0YWNoUmVxdWVzdHMpOgorICAgICAgICAq
IHhtbC9YTUxIdHRwUmVxdWVzdC5oOgorCiAyMDA4LTAxLTIzICBEYXZpZCBLaWx6ZXIgIDxkZGtp
bHplckBhcHBsZS5jb20+CiAKICAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU3MDI5NDc+IFdlYkNv
cmU6IENHQ29udGV4dERyYXdQREZEb2N1bWVudCB3aWxsIGJlIGRlcHJlY2F0ZWQKSW5kZXg6IFdl
YkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3htbC9Y
TUxIdHRwUmVxdWVzdC5jcHAJKHJldmlzaW9uIDI5NzU1KQorKysgV2ViQ29yZS94bWwvWE1MSHR0
cFJlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzIsNyArMzMyLDggQEAgYm9vbCBYTUxI
dHRwUmVxdWVzdDo6dXJsTWF0Y2hlc0RvY3VtZW50RAogCiB2b2lkIFhNTEh0dHBSZXF1ZXN0Ojpv
cGVuKGNvbnN0IFN0cmluZyYgbWV0aG9kLCBjb25zdCBLVVJMJiB1cmwsIGJvb2wgYXN5bmMsIEV4
Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIGFib3J0KCk7CisgICAgYWJvcnRSZXF1ZXN0KCk7Cisg
ICAgbV9zdGF0ZSA9IFVuaW5pdGlhbGl6ZWQ7CiAgICAgbV9hYm9ydGVkID0gZmFsc2U7CiAKICAg
ICAvLyBjbGVhciBzdHVmZiBmcm9tIHBvc3NpYmxlIHByZXZpb3VzIGxvYWQKQEAgLTM3Nyw2ICsz
NzgsNyBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpvcGVuKGNvbnN0IFN0cmluZyYgCiAKICAgICBt
X2FzeW5jID0gYXN5bmM7CiAKKyAgICBtX2xvYWRlciA9IDA7CiAgICAgY2hhbmdlU3RhdGUoT3Bl
bik7CiB9CiAKQEAgLTQwMiwxMSArNDA0LDExIEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OnNlbmQo
Y29uc3QgU3RyaW5nJiAKICAgICBpZiAoIW1fZG9jKQogICAgICAgICByZXR1cm47CiAKLSAgICBp
ZiAobV9zdGF0ZSAhPSBPcGVuKSB7CisgICAgaWYgKG1fc3RhdGUgIT0gT3BlbiB8fCBtX2xvYWRl
cikgewogICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwogICAgICAgICByZXR1cm47CiAg
ICAgfQotICAKKwogICAgIC8vIEZJWE1FOiBTaG91bGQgdGhpcyBhYm9ydCBvciByYWlzZSBhbiBl
eGNlcHRpb24gaW5zdGVhZCBpZiB3ZSBhbHJlYWR5IGhhdmUgYSBtX2xvYWRlciBnb2luZz8KICAg
ICBpZiAobV9sb2FkZXIpCiAgICAgICAgIHJldHVybjsKQEAgLTQ4Myw3ICs0ODUsNyBAQCB2b2lk
IFhNTEh0dHBSZXF1ZXN0OjpzZW5kKGNvbnN0IFN0cmluZyYgCiAgICAgbV9sb2FkZXIgPSBTdWJy
ZXNvdXJjZUxvYWRlcjo6Y3JlYXRlKG1fZG9jLT5mcmFtZSgpLCB0aGlzLCByZXF1ZXN0LCBmYWxz
ZSwgdHJ1ZSwgcmVxdWVzdC51cmwoKS5pc0xvY2FsRmlsZSgpKTsKIH0KIAotdm9pZCBYTUxIdHRw
UmVxdWVzdDo6YWJvcnQoKQordm9pZCBYTUxIdHRwUmVxdWVzdDo6YWJvcnRSZXF1ZXN0KCkKIHsK
ICAgICBib29sIGhhZExvYWRlciA9IG1fbG9hZGVyOwogCkBAIC00OTQsMTIgKzQ5NiwyNyBAQCB2
b2lkIFhNTEh0dHBSZXF1ZXN0OjphYm9ydCgpCiAgICAgICAgIG1fbG9hZGVyID0gMDsKICAgICB9
CiAKKyAgICBtX3JlcXVlc3RIZWFkZXJzLmNsZWFyKCk7CisKICAgICBtX2RlY29kZXIgPSAwOwog
CiAgICAgaWYgKGhhZExvYWRlcikKICAgICAgICAgZHJvcFByb3RlY3Rpb24oKTsKK30KIAotICAg
IG1fc3RhdGUgPSBVbmluaXRpYWxpemVkOwordm9pZCBYTUxIdHRwUmVxdWVzdDo6YWJvcnQoKQor
eworICAgIC8vIFNhdmUgbV9sb2FkZXIgc3RhdGUKKyAgICBib29sIHNlbmRGbGFnID0gbV9sb2Fk
ZXI7CisKKyAgICBhYm9ydFJlcXVlc3QoKTsKKworICAgIGlmICgobV9zdGF0ZSA8PSBPcGVuICYm
ICFzZW5kRmxhZykgfHwgbV9zdGF0ZSA9PSBMb2FkZWQpCisgICAgICAgIG1fc3RhdGUgPSBVbmlu
aXRpYWxpemVkOworICAgIGVsc2UgeworICAgICAgICBBU1NFUlQoIW1fbG9hZGVyKTsKKyAgICAg
ICAgY2hhbmdlU3RhdGUoTG9hZGVkKTsKKyAgICB9CiB9CiAKIHZvaWQgWE1MSHR0cFJlcXVlc3Q6
OmRyb3BQcm90ZWN0aW9uKCkgICAgICAgIApAQCAtNTMwLDcgKzU0Nyw3IEBAIHZvaWQgWE1MSHR0
cFJlcXVlc3Q6Om92ZXJyaWRlTUlNRVR5cGUoY28KICAgICAKIHZvaWQgWE1MSHR0cFJlcXVlc3Q6
OnNldFJlcXVlc3RIZWFkZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVl
LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBpZiAobV9zdGF0ZSAhPSBPcGVuKSB7CisgICAg
aWYgKG1fc3RhdGUgIT0gT3BlbiB8fCBtX2xvYWRlcikgewogICAgICAgICBTZXR0aW5ncyogc2V0
dGluZ3MgPSBtX2RvYyA/IG1fZG9jLT5zZXR0aW5ncygpIDogMDsKICAgICAgICAgaWYgKHNldHRp
bmdzICYmIHNldHRpbmdzLT51c2VzRGFzaGJvYXJkQmFja3dhcmRDb21wYXRpYmlsaXR5TW9kZSgp
KQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtNjUyLDcgKzY2OSw3IEBAIFN0cmluZyBYTUxIdHRw
UmVxdWVzdDo6Z2V0U3RhdHVzVGV4dChFeGMKIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OnByb2Nlc3NT
eW5jTG9hZFJlc3VsdHMoY29uc3QgVmVjdG9yPGNoYXI+JiBkYXRhLCBjb25zdCBSZXNvdXJjZVJl
c3BvbnNlJiByZXNwb25zZSkKIHsKICAgICBpZiAoIXVybE1hdGNoZXNEb2N1bWVudERvbWFpbihy
ZXNwb25zZS51cmwoKSkpIHsKLSAgICAgICAgYWJvcnQoKTsKKyAgICAgICAgYWJvcnRSZXF1ZXN0
KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTcwNSw3ICs3MjIsNyBAQCB2b2lkIFhN
TEh0dHBSZXF1ZXN0OjpkaWRGaW5pc2hMb2FkaW5nKFN1CiB2b2lkIFhNTEh0dHBSZXF1ZXN0Ojp3
aWxsU2VuZFJlcXVlc3QoU3VicmVzb3VyY2VMb2FkZXIqLCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVl
c3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpCiB7CiAgICAgaWYg
KCF1cmxNYXRjaGVzRG9jdW1lbnREb21haW4ocmVxdWVzdC51cmwoKSkpCi0gICAgICAgIGFib3J0
KCk7CisgICAgICAgIGFib3J0UmVxdWVzdCgpOwogfQogCiB2b2lkIFhNTEh0dHBSZXF1ZXN0Ojpk
aWRSZWNlaXZlUmVzcG9uc2UoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBSZXNvdXJjZVJlc3Bv
bnNlJiByZXNwb25zZSkKQEAgLTc2OCw3ICs3ODUsNyBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0Ojpj
YW5jZWxSZXF1ZXN0cyhEb2N1CiAgICAgUmVxdWVzdHNTZXQgY29weSA9ICpyZXF1ZXN0czsKICAg
ICBSZXF1ZXN0c1NldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY29weS5lbmQoKTsKICAgICBmb3Ig
KFJlcXVlc3RzU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IGNvcHkuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KQotICAgICAgICAoKml0KS0+YWJvcnQoKTsKKyAgICAgICAgKCppdCktPmFib3J0UmVx
dWVzdCgpOwogfQogCiB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpkZXRhY2hSZXF1ZXN0cyhEb2N1bWVu
dCogbV9kb2MpCkBAIC03ODAsNyArNzk3LDcgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6ZGV0YWNo
UmVxdWVzdHMoRG9jdQogICAgIFJlcXVlc3RzU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSByZXF1
ZXN0cy0+ZW5kKCk7CiAgICAgZm9yIChSZXF1ZXN0c1NldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBy
ZXF1ZXN0cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICgqaXQpLT5tX2Rv
YyA9IDA7Ci0gICAgICAgICgqaXQpLT5hYm9ydCgpOworICAgICAgICAoKml0KS0+YWJvcnRSZXF1
ZXN0KCk7CiAgICAgfQogICAgIGRlbGV0ZSByZXF1ZXN0czsKIH0KSW5kZXg6IFdlYkNvcmUveG1s
L1hNTEh0dHBSZXF1ZXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVl
c3QuaAkocmV2aXNpb24gMjk3NTUpCisrKyBXZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC03MSw2ICs3MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIG9wZW4oY29u
c3QgU3RyaW5nJiBtZXRob2QsIGNvbnN0IEtVUkwmLCBib29sIGFzeW5jLCBjb25zdCBTdHJpbmcm
IHVzZXIsIGNvbnN0IFN0cmluZyYgcGFzc3dvcmQsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lk
IHNlbmQoY29uc3QgU3RyaW5nJiBib2R5LCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBhYm9y
dCgpOworICAgIHZvaWQgYWJvcnRSZXF1ZXN0KCk7CiAgICAgdm9pZCBzZXRSZXF1ZXN0SGVhZGVy
KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYp
OwogICAgIHZvaWQgb3ZlcnJpZGVNSU1FVHlwZShjb25zdCBTdHJpbmcmIG92ZXJyaWRlKTsKICAg
ICBTdHJpbmcgZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKSW5k
ZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cJKHJldmlzaW9uIDI5NzU1KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMDgtMDEtMjQgIEp1bGllbiBDaGFmZnJhaXggIDxq
dWxpZW4uY2hhZmZyYWl4QGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBmaXggYnVnIDE2OTg5OiBYbWxIdHRwUmVxdWVzdCBzaG91bGQg
dXNlIHRoZSBzZW5kKCkgZmxhZyBhbGdvcml0aG0KKworICAgICAgICBTcGxpdHRlZCB4bWxodHRw
cmVxdWVzdC1hYm9ydC1yZWFkeXN0YXRlLWRvbmUuaHRtbCBpbiAyIHRlc3QgY2FzZXMKKworICAg
ICAgICAqIGh0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtYWJvcnQtcmVh
ZHlTdGF0ZS1kb25lLWV4cGVjdGVkLnR4dDogQ29waWVkIGZyb20gTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy94bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVzdC1hYm9ydC1yZWFkeVN0YXRlLWV4cGVj
dGVkLnR4dC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1
ZXN0LWFib3J0LXJlYWR5U3RhdGUtZG9uZS5odG1sOiBDb3BpZWQgZnJvbSBMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LWFib3J0LXJlYWR5U3RhdGUu
aHRtbC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0
LWFib3J0LXJlYWR5U3RhdGUtZXhwZWN0ZWQudHh0OiBSZW1vdmVkLgorICAgICAgICAqIGh0dHAv
dGVzdHMveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtYWJvcnQtcmVhZHlTdGF0ZS11bnNl
bmQtZXhwZWN0ZWQudHh0OiBDb3BpZWQgZnJvbSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0
dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LWFib3J0LXJlYWR5U3RhdGUtZXhwZWN0ZWQudHh0Lgor
ICAgICAgICAqIGh0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtYWJvcnQt
cmVhZHlTdGF0ZS11bnNlbmQuaHRtbDogQ29waWVkIGZyb20gTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy94bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVzdC1hYm9ydC1yZWFkeVN0YXRlLmh0bWwuCisg
ICAgICAgICogaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVzdC1hYm9ydC1y
ZWFkeVN0YXRlLmh0bWw6IFJlbW92ZWQuCisKIDIwMDgtMDEtMjMgIEFsZXhleSBQcm9za3VyeWFr
b3YgIDxhcEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluLgpJbmRleDog
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVzdC1hYm9y
dC1yZWFkeVN0YXRlLWRvbmUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtYWJvcnQtcmVhZHlTdGF0
ZS1kb25lLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMjk3MjEpCShmcm9tIExheW91dFRlc3RzL2h0
dHAvdGVzdHMveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtYWJvcnQtcmVhZHlTdGF0ZS1l
eHBlY3RlZC50eHQ6Mjk3MjEpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1
ZXN0L3htbGh0dHByZXF1ZXN0LWFib3J0LXJlYWR5U3RhdGUtZG9uZS1leHBlY3RlZC50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw5IEBACitUZXN0IGJ1ZyAxMzE0MSA6IFhNTEh0dHBSZXF1
ZXN0IHNob3VsZCBzZXQgcmVhZHlTdGF0ZSB0byAwIGFmdGVyIGFib3J0KCkKKworU2hvdWxkIHNl
ZSAiUEFTUyIgZm91ciB0aW1lczoKKworUEFTUworUEFTUworUEFTUworUEFTUworCkluZGV4OiBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LWFib3J0
LXJlYWR5U3RhdGUtZG9uZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVzdC1hYm9ydC1yZWFkeVN0YXRl
LWRvbmUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAyOTcyMSkKKysrIExheW91dFRlc3RzL2h0dHAv
dGVzdHMveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtYWJvcnQtcmVhZHlTdGF0ZS1kb25l
LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSw5ICsxLDE1IEBACiBUZXN0IGJ1ZyAx
MzE0MSA6IFhNTEh0dHBSZXF1ZXN0IHNob3VsZCBzZXQgcmVhZHlTdGF0ZSB0byAwIGFmdGVyIGFi
b3J0KCkKIAotU2hvdWxkIHNlZSAiUEFTUyIgZm91ciB0aW1lczoKK1VwZGF0ZWQgZm9yIGJ1ZyAx
Njk4OTogWG1sSHR0cFJlcXVlc3Qgc2hvdWxkIHVzZSB0aGUgc2VuZCgpIGZsYWcgYWxnb3JpdGht
CiAKK1Nob3VsZCBzZWUgIlBBU1MiICYgIlBBU1MgKHJlYXN5U3RhdGUgZXZlbnQgc2VuZCkiIGZv
dXIgdGltZXM6CisKK1BBU1MgKHJlYWR5c3RhdGUgZXZlbnQgc2VuZCkKIFBBU1MKK1BBU1MgKHJl
YWR5c3RhdGUgZXZlbnQgc2VuZCkKIFBBU1MKK1BBU1MgKHJlYWR5c3RhdGUgZXZlbnQgc2VuZCkK
IFBBU1MKK1BBU1MgKHJlYWR5c3RhdGUgZXZlbnQgc2VuZCkKIFBBU1MKIApJbmRleDogTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVzdC1hYm9ydC1yZWFk
eVN0YXRlLWRvbmUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3ht
bGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LWFib3J0LXJlYWR5U3RhdGUtZG9uZS5odG1sCShy
ZXZpc2lvbiAyOTcyMSkJKGZyb20gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVz
dC94bWxodHRwcmVxdWVzdC1hYm9ydC1yZWFkeVN0YXRlLmh0bWw6Mjk3MjEpCisrKyBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LWFib3J0LXJlYWR5
U3RhdGUtZG9uZS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjcgQEAKKzxodG1sPgor
PGhlYWQ+PC9oZWFkPgorPGJvZHk+CisKKzxwPlRlc3QgYnVnIDEzMTQxIDogWE1MSHR0cFJlcXVl
c3Qgc2hvdWxkIHNldCByZWFkeVN0YXRlIHRvIDAgYWZ0ZXIgYWJvcnQoKSA8L3A+Cis8cD5TaG91
bGQgc2VlICJQQVNTIiBmb3VyIHRpbWVzOjwvcD4KKzxkaXYgaWQ9ImFucyI+PC9kaXY+CisKKzxz
Y3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KK2Z1bmN0aW9uIGxvZyhtZXNzYWdlKSB7Cisg
ICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFucyIpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNy
ZWF0ZVRleHROb2RlKG1lc3NhZ2UpKTsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYW5z
IikuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnIiKSk7Cit9CisKKy8vIFVz
ZWQgdG8gZGV0ZWN0IGlmIGEgcmVhZHlzdGF0ZSBldmVudCBpcyBkaXNwYXRjaGVkCitmdW5jdGlv
biBjYXRjaFJlYWR5c3RhdGVFdmVudEFib3J0KCkgeworICAgIGxvZygiRkFJTEVEIChyZWFkeXN0
YXRlIGV2ZW50IHNlbmQpIik7Cit9CisKK2Z1bmN0aW9uIHRlc3QobnVtKQoreworICAgIHZhciB4
aHI7CisKKyAgICBpZiAod2luZG93LlhNTEh0dHBSZXF1ZXN0KSB7CisgICAgICAgIHhociA9IG5l
dyBYTUxIdHRwUmVxdWVzdCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIHRyeSB7CisgICAgICAg
ICAgICB4aHIgPSBuZXcgQWN0aXZlWE9iamVjdCgiTXN4bWwyLlhNTEhUVFAiKTsKKyAgICAgICAg
fSBjYXRjaCAoZXgpIHsKKyAgICAgICAgICAgIHhociA9IG5ldyBBY3RpdmVYT2JqZWN0KCJNaWNy
b3NvZnQuWE1MSFRUUCIpOworICAgICAgICB9CisgICAgfQorCisgICAgeGhyLm9ucmVhZHlzdGF0
ZWNoYW5nZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSBu
dW0pIHsKKyAgICAgICAgICAgICsrZmluaXNoZWRUZXN0czsKKyAgICAgICAgICAgIHRoaXMub25y
ZWFkeXN0YXRlY2hhbmdlID0gY2F0Y2hSZWFkeXN0YXRlRXZlbnRBYm9ydDsKKyAgICAgICAgICAg
IHRoaXMuYWJvcnQoKTsKKyAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gMCkKKyAg
ICAgICAgICAgICAgICBsb2coIlBBU1MiKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBsb2coIkZBSUxFRCIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoZmlu
aXNoZWRUZXN0cyA9PSA0ICYmIHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAg
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICB9CisKKyAgICB4aHIu
b3BlbigiR0VUIiwgInJlc291cmNlcy8xMjUxLmh0bWwiLCB0cnVlKTsKKyAgICBpZiAobnVtICE9
IDEpCisgICAgICAgIHhoci5zZW5kKG51bGwpOworfQorCitpZiAod2luZG93LmxheW91dFRlc3RD
b250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAg
IGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKK30KKwordmFyIGZpbmlzaGVk
VGVzdHMgPSAwOworCitmb3IgKGkgPSAxOyBpIDwgNTsgaSsrKSB7CisgICAgdGVzdChpKTsKK30K
KworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LWFib3J0LXJlYWR5U3RhdGUtZG9uZS5o
dG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qv
eG1saHR0cHJlcXVlc3QtYWJvcnQtcmVhZHlTdGF0ZS1kb25lLmh0bWwJKHJldmlzaW9uIDI5NzIx
KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVz
dC1hYm9ydC1yZWFkeVN0YXRlLWRvbmUuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMyw3ICszLDgg
QEAKIDxib2R5PgogCiA8cD5UZXN0IGJ1ZyAxMzE0MSA6IFhNTEh0dHBSZXF1ZXN0IHNob3VsZCBz
ZXQgcmVhZHlTdGF0ZSB0byAwIGFmdGVyIGFib3J0KCkgPC9wPgotPHA+U2hvdWxkIHNlZSAiUEFT
UyIgZm91ciB0aW1lczo8L3A+Cis8cD5VcGRhdGVkIGZvciBidWcgMTY5ODk6IFhtbEh0dHBSZXF1
ZXN0IHNob3VsZCB1c2UgdGhlIHNlbmQoKSBmbGFnIGFsZ29yaXRobSA8L3A+Cis8cD5TaG91bGQg
c2VlICJQQVNTIiAmICJQQVNTIChyZWFzeVN0YXRlIGV2ZW50IHNlbmQpIiBmb3VyIHRpbWVzOjwv
cD4KIDxkaXYgaWQ9ImFucyI+PC9kaXY+CiAKIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0
Ij4KQEAgLTE0LDEwICsxNSwxMCBAQCBmdW5jdGlvbiBsb2cobWVzc2FnZSkgewogCiAvLyBVc2Vk
IHRvIGRldGVjdCBpZiBhIHJlYWR5c3RhdGUgZXZlbnQgaXMgZGlzcGF0Y2hlZAogZnVuY3Rpb24g
Y2F0Y2hSZWFkeXN0YXRlRXZlbnRBYm9ydCgpIHsKLSAgICBsb2coIkZBSUxFRCAocmVhZHlzdGF0
ZSBldmVudCBzZW5kKSIpOworICAgIGxvZygiUEFTUyAocmVhZHlzdGF0ZSBldmVudCBzZW5kKSIp
OwogfQogCi1mdW5jdGlvbiB0ZXN0KG51bSkKK2Z1bmN0aW9uIHRlc3RBYm9ydFRvRG9uZShudW0p
CiB7CiAgICAgdmFyIHhocjsKIApAQCAtMzYsNyArMzcsNyBAQCBmdW5jdGlvbiB0ZXN0KG51bSkK
ICAgICAgICAgICAgICsrZmluaXNoZWRUZXN0czsKICAgICAgICAgICAgIHRoaXMub25yZWFkeXN0
YXRlY2hhbmdlID0gY2F0Y2hSZWFkeXN0YXRlRXZlbnRBYm9ydDsKICAgICAgICAgICAgIHRoaXMu
YWJvcnQoKTsKLSAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gMCkKKyAgICAgICAg
ICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gNCkKICAgICAgICAgICAgICAgICBsb2coIlBBU1Mi
KTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBsb2coIkZBSUxFRCIpOwpAQCAt
NTgsOSArNTksMTAgQEAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgewogCiB2YXIg
ZmluaXNoZWRUZXN0cyA9IDA7CiAKLWZvciAoaSA9IDE7IGkgPCA1OyBpKyspIHsKLSAgICB0ZXN0
KGkpOwotfQordmFyIGFib3J0VG9EbyA9IFsnMicsICczJywgJzInLCAnMyddOworCitmb3IgKGkg
PSAwOyBpIDwgYWJvcnRUb0RvLmxlbmd0aDsgaSsrKQorICAgIHRlc3RBYm9ydFRvRG9uZShhYm9y
dFRvRG9baV0pOwogCiA8L3NjcmlwdD4KIDwvYm9keT4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAv
dGVzdHMveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtYWJvcnQtcmVhZHlTdGF0ZS1leHBl
Y3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVx
dWVzdC94bWxodHRwcmVxdWVzdC1hYm9ydC1yZWFkeVN0YXRlLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMjk3NTUpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3htbGh0
dHByZXF1ZXN0LWFib3J0LXJlYWR5U3RhdGUtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC0xLDkgKzAsMCBAQAotVGVzdCBidWcgMTMxNDEgOiBYTUxIdHRwUmVxdWVzdCBzaG91bGQgc2V0
IHJlYWR5U3RhdGUgdG8gMCBhZnRlciBhYm9ydCgpCi0KLVNob3VsZCBzZWUgIlBBU1MiIGZvdXIg
dGltZXM6Ci0KLVBBU1MKLVBBU1MKLVBBU1MKLVBBU1MKLQpJbmRleDogTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy94bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVzdC1hYm9ydC1yZWFkeVN0YXRlLXVu
c2VuZC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94
bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVzdC1hYm9ydC1yZWFkeVN0YXRlLXVuc2VuZC1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDI5NzIxKQkoZnJvbSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3ht
bGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LWFib3J0LXJlYWR5U3RhdGUtZXhwZWN0ZWQudHh0
OjI5NzIxKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC94bWxodHRw
cmVxdWVzdC1hYm9ydC1yZWFkeVN0YXRlLXVuc2VuZC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw5IEBACitUZXN0IGJ1ZyAxMzE0MSA6IFhNTEh0dHBSZXF1ZXN0IHNob3Vs
ZCBzZXQgcmVhZHlTdGF0ZSB0byAwIGFmdGVyIGFib3J0KCkKKworU2hvdWxkIHNlZSAiUEFTUyIg
Zm91ciB0aW1lczoKKworUEFTUworUEFTUworUEFTUworUEFTUworCkluZGV4OiBMYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LWFib3J0LXJlYWR5U3Rh
dGUtdW5zZW5kLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LWFib3J0LXJlYWR5U3RhdGUtdW5zZW5k
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMjk3MjEpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LWFib3J0LXJlYWR5U3RhdGUtdW5zZW5kLWV4
cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDcgQEAKIFRlc3QgYnVnIDEzMTQx
IDogWE1MSHR0cFJlcXVlc3Qgc2hvdWxkIHNldCByZWFkeVN0YXRlIHRvIDAgYWZ0ZXIgYWJvcnQo
KQogCitVcGRhdGVkIGZvciBidWcgMTY5ODk6IFhtbEh0dHBSZXF1ZXN0IHNob3VsZCB1c2UgdGhl
IHNlbmQoKSBmbGFnIGFsZ29yaXRobQorCiBTaG91bGQgc2VlICJQQVNTIiBmb3VyIHRpbWVzOgog
CiBQQVNTCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3htbGh0
dHByZXF1ZXN0LWFib3J0LXJlYWR5U3RhdGUtdW5zZW5kLmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVzdC1hYm9ydC1y
ZWFkeVN0YXRlLXVuc2VuZC5odG1sCShyZXZpc2lvbiAyOTcyMSkJKGZyb20gTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVzdC1hYm9ydC1yZWFkeVN0YXRl
Lmh0bWw6Mjk3MjEpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3ht
bGh0dHByZXF1ZXN0LWFib3J0LXJlYWR5U3RhdGUtdW5zZW5kLmh0bWwJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw2NyBAQAorPGh0bWw+Cis8aGVhZD48L2hlYWQ+Cis8Ym9keT4KKworPHA+VGVz
dCBidWcgMTMxNDEgOiBYTUxIdHRwUmVxdWVzdCBzaG91bGQgc2V0IHJlYWR5U3RhdGUgdG8gMCBh
ZnRlciBhYm9ydCgpIDwvcD4KKzxwPlNob3VsZCBzZWUgIlBBU1MiIGZvdXIgdGltZXM6PC9wPgor
PGRpdiBpZD0iYW5zIj48L2Rpdj4KKworPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgor
ZnVuY3Rpb24gbG9nKG1lc3NhZ2UpIHsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYW5z
IikuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobWVzc2FnZSkpOworICAgIGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJhbnMiKS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJiciIpKTsKK30KKworLy8gVXNlZCB0byBkZXRlY3QgaWYgYSByZWFkeXN0YXRlIGV2
ZW50IGlzIGRpc3BhdGNoZWQKK2Z1bmN0aW9uIGNhdGNoUmVhZHlzdGF0ZUV2ZW50QWJvcnQoKSB7
CisgICAgbG9nKCJGQUlMRUQgKHJlYWR5c3RhdGUgZXZlbnQgc2VuZCkiKTsKK30KKworZnVuY3Rp
b24gdGVzdChudW0pCit7CisgICAgdmFyIHhocjsKKworICAgIGlmICh3aW5kb3cuWE1MSHR0cFJl
cXVlc3QpIHsKKyAgICAgICAgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHhociA9IG5ldyBBY3RpdmVYT2JqZWN0KCJN
c3htbDIuWE1MSFRUUCIpOworICAgICAgICB9IGNhdGNoIChleCkgeworICAgICAgICAgICAgeGhy
ID0gbmV3IEFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxIVFRQIik7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gKCkgeworICAgICAg
ICBpZiAodGhpcy5yZWFkeVN0YXRlID09IG51bSkgeworICAgICAgICAgICAgKytmaW5pc2hlZFRl
c3RzOworICAgICAgICAgICAgdGhpcy5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBjYXRjaFJlYWR5c3Rh
dGVFdmVudEFib3J0OworICAgICAgICAgICAgdGhpcy5hYm9ydCgpOworICAgICAgICAgICAgaWYg
KHRoaXMucmVhZHlTdGF0ZSA9PSAwKQorICAgICAgICAgICAgICAgIGxvZygiUEFTUyIpOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGxvZygiRkFJTEVEIik7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIGlmIChmaW5pc2hlZFRlc3RzID09IDQgJiYgd2luZG93LmxheW91
dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5
RG9uZSgpOworICAgIH0KKworICAgIHhoci5vcGVuKCJHRVQiLCAicmVzb3VyY2VzLzEyNTEuaHRt
bCIsIHRydWUpOworICAgIGlmIChudW0gIT0gMSkKKyAgICAgICAgeGhyLnNlbmQobnVsbCk7Cit9
CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGls
RG9uZSgpOworfQorCit2YXIgZmluaXNoZWRUZXN0cyA9IDA7CisKK2ZvciAoaSA9IDE7IGkgPCA1
OyBpKyspIHsKKyAgICB0ZXN0KGkpOworfQorCis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
SW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVl
c3QtYWJvcnQtcmVhZHlTdGF0ZS11bnNlbmQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LWFib3J0LXJlYWR5U3Rh
dGUtdW5zZW5kLmh0bWwJKHJldmlzaW9uIDI5NzIxKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy94bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVzdC1hYm9ydC1yZWFkeVN0YXRlLXVuc2VuZC5o
dG1sCSh3b3JraW5nIGNvcHkpCkBAIC0zLDYgKzMsNyBAQAogPGJvZHk+CiAKIDxwPlRlc3QgYnVn
IDEzMTQxIDogWE1MSHR0cFJlcXVlc3Qgc2hvdWxkIHNldCByZWFkeVN0YXRlIHRvIDAgYWZ0ZXIg
YWJvcnQoKSA8L3A+Cis8cD5VcGRhdGVkIGZvciBidWcgMTY5ODk6IFhtbEh0dHBSZXF1ZXN0IHNo
b3VsZCB1c2UgdGhlIHNlbmQoKSBmbGFnIGFsZ29yaXRobSA8L3A+CiA8cD5TaG91bGQgc2VlICJQ
QVNTIiBmb3VyIHRpbWVzOjwvcD4KIDxkaXYgaWQ9ImFucyI+PC9kaXY+CiAKQEAgLTE3LDcgKzE4
LDcgQEAgZnVuY3Rpb24gY2F0Y2hSZWFkeXN0YXRlRXZlbnRBYm9ydCgpIHsKICAgICBsb2coIkZB
SUxFRCAocmVhZHlzdGF0ZSBldmVudCBzZW5kKSIpOwogfQogCi1mdW5jdGlvbiB0ZXN0KG51bSkK
K2Z1bmN0aW9uIHRlc3RBYm9ydFRvVW5zZW5kKG51bSkKIHsKICAgICB2YXIgeGhyOwogCkBAIC01
OCw5ICs1OSwxMCBAQCBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CiAKIHZhciBm
aW5pc2hlZFRlc3RzID0gMDsKIAotZm9yIChpID0gMTsgaSA8IDU7IGkrKykgewotICAgIHRlc3Qo
aSk7Ci19Cit2YXIgYWJvcnRUb0RvID0gWycxJywgJzQnLCAnMScsICc0J107CisKK2ZvciAoaSA9
IDA7IGkgPCBhYm9ydFRvRG8ubGVuZ3RoOyBpKyspCisgICAgdGVzdEFib3J0VG9VbnNlbmQoYWJv
cnRUb0RvW2ldKTsKIAogPC9zY3JpcHQ+CiA8L2JvZHk+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LWFib3J0LXJlYWR5U3RhdGUuaHRt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3ht
bGh0dHByZXF1ZXN0LWFib3J0LXJlYWR5U3RhdGUuaHRtbAkocmV2aXNpb24gMjk3NTUpCisrKyBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LWFib3J0
LXJlYWR5U3RhdGUuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMSw2NyArMCwwIEBACi08aHRtbD4K
LTxoZWFkPjwvaGVhZD4KLTxib2R5PgotCi08cD5UZXN0IGJ1ZyAxMzE0MSA6IFhNTEh0dHBSZXF1
ZXN0IHNob3VsZCBzZXQgcmVhZHlTdGF0ZSB0byAwIGFmdGVyIGFib3J0KCkgPC9wPgotPHA+U2hv
dWxkIHNlZSAiUEFTUyIgZm91ciB0aW1lczo8L3A+Ci08ZGl2IGlkPSJhbnMiPjwvZGl2PgotCi08
c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci1mdW5jdGlvbiBsb2cobWVzc2FnZSkgewot
ICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhbnMiKS5hcHBlbmRDaGlsZChkb2N1bWVudC5j
cmVhdGVUZXh0Tm9kZShtZXNzYWdlKSk7Ci0gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFu
cyIpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJyIikpOwotfQotCi0vLyBV
c2VkIHRvIGRldGVjdCBpZiBhIHJlYWR5c3RhdGUgZXZlbnQgaXMgZGlzcGF0Y2hlZAotZnVuY3Rp
b24gY2F0Y2hSZWFkeXN0YXRlRXZlbnRBYm9ydCgpIHsKLSAgICBsb2coIkZBSUxFRCAocmVhZHlz
dGF0ZSBldmVudCBzZW5kKSIpOwotfQotCi1mdW5jdGlvbiB0ZXN0KG51bSkKLXsKLSAgICB2YXIg
eGhyOwotCi0gICAgaWYgKHdpbmRvdy5YTUxIdHRwUmVxdWVzdCkgewotICAgICAgICB4aHIgPSBu
ZXcgWE1MSHR0cFJlcXVlc3QoKTsKLSAgICB9IGVsc2UgewotICAgICAgICB0cnkgewotICAgICAg
ICAgICAgeGhyID0gbmV3IEFjdGl2ZVhPYmplY3QoIk1zeG1sMi5YTUxIVFRQIik7Ci0gICAgICAg
IH0gY2F0Y2ggKGV4KSB7Ci0gICAgICAgICAgICB4aHIgPSBuZXcgQWN0aXZlWE9iamVjdCgiTWlj
cm9zb2Z0LlhNTEhUVFAiKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHhoci5vbnJlYWR5c3Rh
dGVjaGFuZ2UgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0g
bnVtKSB7Ci0gICAgICAgICAgICArK2ZpbmlzaGVkVGVzdHM7Ci0gICAgICAgICAgICB0aGlzLm9u
cmVhZHlzdGF0ZWNoYW5nZSA9IGNhdGNoUmVhZHlzdGF0ZUV2ZW50QWJvcnQ7Ci0gICAgICAgICAg
ICB0aGlzLmFib3J0KCk7Ci0gICAgICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09IDApCi0g
ICAgICAgICAgICAgICAgbG9nKCJQQVNTIik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgbG9nKCJGQUlMRUQiKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKGZp
bmlzaGVkVGVzdHMgPT0gNCAmJiB3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCi0gICAgICAg
ICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Ci0gICAgfQotCi0gICAgeGhy
Lm9wZW4oIkdFVCIsICJyZXNvdXJjZXMvMTI1MS5odG1sIiwgdHJ1ZSk7Ci0gICAgaWYgKG51bSAh
PSAxKQotICAgICAgICB4aHIuc2VuZChudWxsKTsKLX0KLQotaWYgKHdpbmRvdy5sYXlvdXRUZXN0
Q29udHJvbGxlcikgewotICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKLSAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Ci19Ci0KLXZhciBmaW5pc2hl
ZFRlc3RzID0gMDsKLQotZm9yIChpID0gMTsgaSA8IDU7IGkrKykgewotICAgIHRlc3QoaSk7Ci19
Ci0KLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgo=
</data>
<flag name="review"
          id="8151"
          type_id="1"
          status="-"
          setter="ap"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18887</attachid>
            <date>2008-02-03 12:14:42 -0800</date>
            <delta_ts>2008-02-04 20:25:34 -0800</delta_ts>
            <desc>updated patch</desc>
            <filename>bug16989-loader-updated.patch</filename>
            <type>text/plain</type>
            <size>18775</size>
            <attacher name="Julien Chaffraix">jchaffraix</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyOTk0NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzAgQEAKKzIwMDgtMDItMDMgIEp1bGllbiBDaGFmZnJhaXggIDxqdWxpZW4uY2hh
ZmZyYWl4QGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBidWcgMTY5ODkgOiBBZGQgc2VuZCgpIGZsYWcgY2hlY2tzIGluIFhtbEh0dHBS
ZXF1ZXN0CisKKyAgICAgICAgQ2hhbmdlZCBYTUxIdHRwUmVxdWVzdDo6YWJvcnQgdG8gdGFrZSBh
IGJvb2wgcGFyYW1ldGVyICdpc0phdmFzY3JpcHRBYm9ydCcgdG8gZGlzY3JpbWluYXRlCisgICAg
ICAgIGJldHdlZW4gaW50ZXJuYWwgY2FsbHMgKG5ldHdvcmsgYWJvcnQpIGFuZCBjYWxscyB0byBK
YXZhc2NyaXB0IGFib3J0IG1ldGhvZC4KKworICAgICAgICBUZXN0czogaHR0cC90ZXN0cy94bWxo
dHRwcmVxdWVzdC94bWxodHRwcmVxdWVzdC1hYm9ydC1yZWFkeVN0YXRlLWRvbmUuaHRtbAorICAg
ICAgICAgICAgICAgaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVzdC1hYm9y
dC1yZWFkeVN0YXRlLXVuc2VuZC5odG1sCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1hNTEh0
dHBSZXF1ZXN0LmNwcDoKKyAgICAgICAgKEtKUzo6anNYTUxIdHRwUmVxdWVzdFByb3RvdHlwZUZ1
bmN0aW9uQWJvcnQpOgorICAgICAgICAqIHhtbC9YTUxIdHRwUmVxdWVzdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6b3Blbik6IGV4cGxpY2l0bHkgc3dpdGNoIHJlYWR5
c3RhdGUgdG8gdW5pbml0aWFsaXplZCB0byBhdm9pZAorICAgICAgICBkaXNwYXRjaGluZyByZWFk
eXN0YXRlRXZlbnQuCisKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjpzZW5kKToK
KyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjphYm9ydCk6IFVwZGF0ZSByZWFkeXN0
YXRlIGFzIHNwZWNpZmllZCBpbiB0aGUgc3BlYyBhbmQgY2xlYXIgdGhlCisgICAgICAgIHJlcXVl
c3QgaGVhZGVycyBpbiB0aGUgY2FzZSB3ZSBoYXZlIGNhbGxlZCBKYXZhc2NyaXB0IGFib3J0IG1l
dGhvZAorCisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6c2V0UmVxdWVzdEhlYWRl
cik6IEFkZGVkIG1fbG9hZGVyIGNoZWNrIChjb3VsZCBub3QgYmUgY292ZXJlZCBieSB0ZXN0Cisg
ICAgICAgIGNhc2VzKQorCisgICAgICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0Lmg6CisKIDIwMDgt
MDItMDIgIERhdmlkIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCBmb3Ig
YnVnIDU0NjgsIHN1cHBvcnQgQ1NTMyA6b25seS1jaGlsZCBhbmQgOm9ubHktb2YtdHlwZSBzZWxl
Y3RvcnMuCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdC5jcHAJKHJl
dmlzaW9uIDI5OTQ2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjE3LDcgKzIxNyw3IEBAIEpTVmFsdWUqIGpzWE1MSHR0cFJl
cXVlc3RQcm90b3R5cGVGdW5jdGkKIAogICAgIEpTWE1MSHR0cFJlcXVlc3QqIHJlcXVlc3QgPSBz
dGF0aWNfY2FzdDxKU1hNTEh0dHBSZXF1ZXN0Kj4odGhpc09iaik7CiAKLSAgICByZXF1ZXN0LT5p
bXBsKCktPmFib3J0KCk7CisgICAgcmVxdWVzdC0+aW1wbCgpLT5hYm9ydCh0cnVlKTsKICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIApJbmRleDogV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVl
c3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAkocmV2
aXNpb24gMjk5NDYpCisrKyBXZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMzMyw2ICszMzMsNyBAQCBib29sIFhNTEh0dHBSZXF1ZXN0Ojp1cmxNYXRjaGVz
RG9jdW1lbnRECiB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpvcGVuKGNvbnN0IFN0cmluZyYgbWV0aG9k
LCBjb25zdCBLVVJMJiB1cmwsIGJvb2wgYXN5bmMsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAg
IGFib3J0KCk7CisgICAgbV9zdGF0ZSA9IFVuaW5pdGlhbGl6ZWQ7CiAgICAgbV9hYm9ydGVkID0g
ZmFsc2U7CiAKICAgICAvLyBjbGVhciBzdHVmZiBmcm9tIHBvc3NpYmxlIHByZXZpb3VzIGxvYWQK
QEAgLTM3Nyw2ICszNzgsNyBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpvcGVuKGNvbnN0IFN0cmlu
ZyYgCiAKICAgICBtX2FzeW5jID0gYXN5bmM7CiAKKyAgICBBU1NFUlQoIW1fbG9hZGVyKTsKICAg
ICBjaGFuZ2VTdGF0ZShPcGVuKTsKIH0KIApAQCAtNDAyLDIwICs0MDQsMTcgQEAgdm9pZCBYTUxI
dHRwUmVxdWVzdDo6c2VuZChjb25zdCBTdHJpbmcmIAogICAgIGlmICghbV9kb2MpCiAgICAgICAg
IHJldHVybjsKIAorICAgIC8vIERvIG5vdCBjaGVjayBmb3IgbV9sb2FkZXIgYXMgcmVxdWlyZWQg
YnkgdGhlIHNwZWMgYXMgaXQgY2Fubm90IGJlIG5vbiBudWxsCiAgICAgaWYgKG1fc3RhdGUgIT0g
T3BlbikgewogICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwogICAgICAgICByZXR1cm47
CiAgICAgfQotICAKLSAgICAvLyBGSVhNRTogU2hvdWxkIHRoaXMgYWJvcnQgb3IgcmFpc2UgYW4g
ZXhjZXB0aW9uIGluc3RlYWQgaWYgd2UgYWxyZWFkeSBoYXZlIGEgbV9sb2FkZXIgZ29pbmc/Ci0g
ICAgaWYgKG1fbG9hZGVyKQotICAgICAgICByZXR1cm47CiAKICAgICBtX2Fib3J0ZWQgPSBmYWxz
ZTsKIAogICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KG1fdXJsKTsKICAgICByZXF1ZXN0LnNl
dEhUVFBNZXRob2QobV9tZXRob2QpOwotICAgIAorCiAgICAgaWYgKCFib2R5LmlzTnVsbCgpICYm
IG1fbWV0aG9kICE9ICJHRVQiICYmIG1fbWV0aG9kICE9ICJIRUFEIiAmJiAobV91cmwucHJvdG9j
b2woKS5sb3dlcigpID09ICJodHRwIiB8fCBtX3VybC5wcm90b2NvbCgpLmxvd2VyKCkgPT0gImh0
dHBzIikpIHsKICAgICAgICAgU3RyaW5nIGNvbnRlbnRUeXBlID0gZ2V0UmVxdWVzdEhlYWRlcigi
Q29udGVudC1UeXBlIik7CiAgICAgICAgIGlmIChjb250ZW50VHlwZS5pc0VtcHR5KCkpIHsKQEAg
LTQ4Myw3ICs0ODIsNyBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpzZW5kKGNvbnN0IFN0cmluZyYg
CiAgICAgbV9sb2FkZXIgPSBTdWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRlKG1fZG9jLT5mcmFtZSgp
LCB0aGlzLCByZXF1ZXN0LCBmYWxzZSwgdHJ1ZSwgcmVxdWVzdC51cmwoKS5pc0xvY2FsRmlsZSgp
KTsKIH0KIAotdm9pZCBYTUxIdHRwUmVxdWVzdDo6YWJvcnQoKQordm9pZCBYTUxIdHRwUmVxdWVz
dDo6YWJvcnQoYm9vbCBpc0phdmFzY3JpcHRBYm9ydCkKIHsKICAgICBib29sIGhhZExvYWRlciA9
IG1fbG9hZGVyOwogCkBAIC00OTksNyArNDk4LDE2IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmFi
b3J0KCkKICAgICBpZiAoaGFkTG9hZGVyKQogICAgICAgICBkcm9wUHJvdGVjdGlvbigpOwogCi0g
ICAgbV9zdGF0ZSA9IFVuaW5pdGlhbGl6ZWQ7CisgICAgaWYgKGlzSmF2YXNjcmlwdEFib3J0KSB7
CisgICAgICAgIC8vIENsZWFyIGhlYWRlcnMgYXMgcmVxdWlyZWQgYnkgdGhlIHNwZWMKKyAgICAg
ICAgbV9yZXF1ZXN0SGVhZGVycy5jbGVhcigpOworICAgICAgICBpZiAoKG1fc3RhdGUgPD0gT3Bl
biAmJiAhaGFkTG9hZGVyKSB8fCBtX3N0YXRlID09IExvYWRlZCkKKyAgICAgICAgICAgIG1fc3Rh
dGUgPSBVbmluaXRpYWxpemVkOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVCgh
bV9sb2FkZXIpOworICAgICAgICAgICAgY2hhbmdlU3RhdGUoTG9hZGVkKTsKKyAgICAgICAgfQor
ICAgIH0KIH0KIAogdm9pZCBYTUxIdHRwUmVxdWVzdDo6ZHJvcFByb3RlY3Rpb24oKSAgICAgICAg
CkBAIC01MzAsNyArNTM4LDcgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6b3ZlcnJpZGVNSU1FVHlw
ZShjbwogICAgIAogdm9pZCBYTUxIdHRwUmVxdWVzdDo6c2V0UmVxdWVzdEhlYWRlcihjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewot
ICAgIGlmIChtX3N0YXRlICE9IE9wZW4pIHsKKyAgICBpZiAobV9zdGF0ZSAhPSBPcGVuIHx8IG1f
bG9hZGVyKSB7CiAgICAgICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IG1fZG9jID8gbV9kb2MtPnNl
dHRpbmdzKCkgOiAwOwogICAgICAgICBpZiAoc2V0dGluZ3MgJiYgc2V0dGluZ3MtPnVzZXNEYXNo
Ym9hcmRCYWNrd2FyZENvbXBhdGliaWxpdHlNb2RlKCkpCiAgICAgICAgICAgICByZXR1cm47Cklu
ZGV4OiBXZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
eG1sL1hNTEh0dHBSZXF1ZXN0LmgJKHJldmlzaW9uIDI5OTQ2KQorKysgV2ViQ29yZS94bWwvWE1M
SHR0cFJlcXVlc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyArNzAsNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBvcGVuKGNvbnN0IFN0cmluZyYgbWV0aG9kLCBjb25zdCBLVVJMJiwgYm9vbCBhc3lu
YywgY29uc3QgU3RyaW5nJiB1c2VyLCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBvcGVuKGNv
bnN0IFN0cmluZyYgbWV0aG9kLCBjb25zdCBLVVJMJiwgYm9vbCBhc3luYywgY29uc3QgU3RyaW5n
JiB1c2VyLCBjb25zdCBTdHJpbmcmIHBhc3N3b3JkLCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9p
ZCBzZW5kKGNvbnN0IFN0cmluZyYgYm9keSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgYWJv
cnQoKTsKKyAgICB2b2lkIGFib3J0KGJvb2wgaXNKYXZhc2NyaXB0QWJvcnQgPSBmYWxzZSk7CiAg
ICAgdm9pZCBzZXRSZXF1ZXN0SGVhZGVyKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5n
JiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgb3ZlcnJpZGVNSU1FVHlwZShjb25z
dCBTdHJpbmcmIG92ZXJyaWRlKTsKICAgICBTdHJpbmcgZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKEV4
Y2VwdGlvbkNvZGUmKSBjb25zdDsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI5OTQ3KQorKysgTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMDgtMDIt
MDMgIEp1bGllbiBDaGFmZnJhaXggIDxqdWxpZW4uY2hhZmZyYWl4QGdtYWlsLmNvbT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBidWcgMTY5ODkgOiBB
ZGQgc2VuZCgpIGZsYWcgY2hlY2tzIGluIFhtbEh0dHBSZXF1ZXN0CisKKyAgICAgICAgU3BsaXR0
ZWQgeG1saHR0cHJlcXVlc3QtYWJvcnQtcmVhZHlzdGF0ZSBpbiAyIHRlc3QgY2FzZXMKKworICAg
ICAgICAqIGh0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtYWJvcnQtcmVh
ZHlTdGF0ZS1kb25lLWV4cGVjdGVkLnR4dDogQ29waWVkIGZyb20gTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy94bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVzdC1hYm9ydC1yZWFkeVN0YXRlLWV4cGVj
dGVkLnR4dC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1
ZXN0LWFib3J0LXJlYWR5U3RhdGUtZG9uZS5odG1sOiBDb3BpZWQgZnJvbSBMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LWFib3J0LXJlYWR5U3RhdGUu
aHRtbC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0
LWFib3J0LXJlYWR5U3RhdGUtZXhwZWN0ZWQudHh0OiBSZW1vdmVkLgorICAgICAgICAqIGh0dHAv
dGVzdHMveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtYWJvcnQtcmVhZHlTdGF0ZS11bnNl
bmQtZXhwZWN0ZWQudHh0OiBDb3BpZWQgZnJvbSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0
dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LWFib3J0LXJlYWR5U3RhdGUtZXhwZWN0ZWQudHh0Lgor
ICAgICAgICAqIGh0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtYWJvcnQt
cmVhZHlTdGF0ZS11bnNlbmQuaHRtbDogQ29waWVkIGZyb20gTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy94bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVzdC1hYm9ydC1yZWFkeVN0YXRlLmh0bWwuCisg
ICAgICAgICogaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVzdC1hYm9ydC1y
ZWFkeVN0YXRlLmh0bWw6IFJlbW92ZWQuCisKIDIwMDgtMDItMDMgIERhcmluIEFkbGVyICA8ZGFy
aW5AYXBwbGUuY29tPgogCiAgICAgICAgIC0gdXBkYXRlZCBzb21lIG1vcmUgb25seS1jaGlsZCBh
bmQgb25seS1vZi10eXBlIHRlc3RzIHRvIGV4cGVjdCBzdWNjZXNzCkluZGV4OiBMYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LWFib3J0LXJlYWR5U3Rh
dGUtZG9uZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy94bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVzdC1hYm9ydC1yZWFkeVN0YXRlLWRvbmUtZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAyOTcyMSkJKGZyb20gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94
bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVzdC1hYm9ydC1yZWFkeVN0YXRlLWV4cGVjdGVkLnR4
dDoyOTcyMSkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QveG1saHR0
cHJlcXVlc3QtYWJvcnQtcmVhZHlTdGF0ZS1kb25lLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDkgQEAKK1Rlc3QgYnVnIDEzMTQxIDogWE1MSHR0cFJlcXVlc3Qgc2hvdWxk
IHNldCByZWFkeVN0YXRlIHRvIDAgYWZ0ZXIgYWJvcnQoKQorCitTaG91bGQgc2VlICJQQVNTIiBm
b3VyIHRpbWVzOgorCitQQVNTCitQQVNTCitQQVNTCitQQVNTCisKSW5kZXg6IExheW91dFRlc3Rz
L2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtYWJvcnQtcmVhZHlTdGF0
ZS1kb25lLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LWFib3J0LXJlYWR5U3RhdGUtZG9uZS1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDI5NzIxKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxo
dHRwcmVxdWVzdC94bWxodHRwcmVxdWVzdC1hYm9ydC1yZWFkeVN0YXRlLWRvbmUtZXhwZWN0ZWQu
dHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDkgKzEsMTUgQEAKIFRlc3QgYnVnIDEzMTQxIDogWE1M
SHR0cFJlcXVlc3Qgc2hvdWxkIHNldCByZWFkeVN0YXRlIHRvIDAgYWZ0ZXIgYWJvcnQoKQogCi1T
aG91bGQgc2VlICJQQVNTIiBmb3VyIHRpbWVzOgorVXBkYXRlZCBmb3IgYnVnIDE2OTg5OiBYbWxI
dHRwUmVxdWVzdCBzaG91bGQgdXNlIHRoZSBzZW5kKCkgZmxhZyBhbGdvcml0aG0KIAorU2hvdWxk
IHNlZSAiUEFTUyIgJiAiUEFTUyAocmVhc3lTdGF0ZSBldmVudCBzZW5kKSIgZm91ciB0aW1lczoK
KworUEFTUyAocmVhZHlzdGF0ZSBldmVudCBzZW5kKQogUEFTUworUEFTUyAocmVhZHlzdGF0ZSBl
dmVudCBzZW5kKQogUEFTUworUEFTUyAocmVhZHlzdGF0ZSBldmVudCBzZW5kKQogUEFTUworUEFT
UyAocmVhZHlzdGF0ZSBldmVudCBzZW5kKQogUEFTUwogCkluZGV4OiBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LWFib3J0LXJlYWR5U3RhdGUtZG9u
ZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVl
c3QveG1saHR0cHJlcXVlc3QtYWJvcnQtcmVhZHlTdGF0ZS1kb25lLmh0bWwJKHJldmlzaW9uIDI5
NzIxKQkoZnJvbSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3htbGh0dHBy
ZXF1ZXN0LWFib3J0LXJlYWR5U3RhdGUuaHRtbDoyOTcyMSkKKysrIExheW91dFRlc3RzL2h0dHAv
dGVzdHMveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtYWJvcnQtcmVhZHlTdGF0ZS1kb25l
Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NyBAQAorPGh0bWw+Cis8aGVhZD48L2hl
YWQ+Cis8Ym9keT4KKworPHA+VGVzdCBidWcgMTMxNDEgOiBYTUxIdHRwUmVxdWVzdCBzaG91bGQg
c2V0IHJlYWR5U3RhdGUgdG8gMCBhZnRlciBhYm9ydCgpIDwvcD4KKzxwPlNob3VsZCBzZWUgIlBB
U1MiIGZvdXIgdGltZXM6PC9wPgorPGRpdiBpZD0iYW5zIj48L2Rpdj4KKworPHNjcmlwdCB0eXBl
PSJ0ZXh0L2phdmFzY3JpcHQiPgorZnVuY3Rpb24gbG9nKG1lc3NhZ2UpIHsKKyAgICBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgiYW5zIikuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5v
ZGUobWVzc2FnZSkpOworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhbnMiKS5hcHBlbmRD
aGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJiciIpKTsKK30KKworLy8gVXNlZCB0byBkZXRl
Y3QgaWYgYSByZWFkeXN0YXRlIGV2ZW50IGlzIGRpc3BhdGNoZWQKK2Z1bmN0aW9uIGNhdGNoUmVh
ZHlzdGF0ZUV2ZW50QWJvcnQoKSB7CisgICAgbG9nKCJGQUlMRUQgKHJlYWR5c3RhdGUgZXZlbnQg
c2VuZCkiKTsKK30KKworZnVuY3Rpb24gdGVzdChudW0pCit7CisgICAgdmFyIHhocjsKKworICAg
IGlmICh3aW5kb3cuWE1MSHR0cFJlcXVlc3QpIHsKKyAgICAgICAgeGhyID0gbmV3IFhNTEh0dHBS
ZXF1ZXN0KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHhociA9
IG5ldyBBY3RpdmVYT2JqZWN0KCJNc3htbDIuWE1MSFRUUCIpOworICAgICAgICB9IGNhdGNoIChl
eCkgeworICAgICAgICAgICAgeGhyID0gbmV3IEFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxI
VFRQIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09IG51bSkgeworICAg
ICAgICAgICAgKytmaW5pc2hlZFRlc3RzOworICAgICAgICAgICAgdGhpcy5vbnJlYWR5c3RhdGVj
aGFuZ2UgPSBjYXRjaFJlYWR5c3RhdGVFdmVudEFib3J0OworICAgICAgICAgICAgdGhpcy5hYm9y
dCgpOworICAgICAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSAwKQorICAgICAgICAgICAg
ICAgIGxvZygiUEFTUyIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGxvZygi
RkFJTEVEIik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChmaW5pc2hlZFRlc3Rz
ID09IDQgJiYgd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgIH0KKworICAgIHhoci5vcGVuKCJHRVQi
LCAicmVzb3VyY2VzLzEyNTEuaHRtbCIsIHRydWUpOworICAgIGlmIChudW0gIT0gMSkKKyAgICAg
ICAgeGhyLnNlbmQobnVsbCk7Cit9CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIp
IHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworfQorCit2YXIgZmluaXNoZWRUZXN0cyA9IDA7
CisKK2ZvciAoaSA9IDE7IGkgPCA1OyBpKyspIHsKKyAgICB0ZXN0KGkpOworfQorCis8L3Njcmlw
dD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0
cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtYWJvcnQtcmVhZHlTdGF0ZS1kb25lLmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC94bWxodHRwcmVx
dWVzdC1hYm9ydC1yZWFkeVN0YXRlLWRvbmUuaHRtbAkocmV2aXNpb24gMjk3MjEpCisrKyBMYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LWFib3J0LXJl
YWR5U3RhdGUtZG9uZS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0zLDcgKzMsOCBAQAogPGJvZHk+
CiAKIDxwPlRlc3QgYnVnIDEzMTQxIDogWE1MSHR0cFJlcXVlc3Qgc2hvdWxkIHNldCByZWFkeVN0
YXRlIHRvIDAgYWZ0ZXIgYWJvcnQoKSA8L3A+Ci08cD5TaG91bGQgc2VlICJQQVNTIiBmb3VyIHRp
bWVzOjwvcD4KKzxwPlVwZGF0ZWQgZm9yIGJ1ZyAxNjk4OTogWG1sSHR0cFJlcXVlc3Qgc2hvdWxk
IHVzZSB0aGUgc2VuZCgpIGZsYWcgYWxnb3JpdGhtIDwvcD4KKzxwPlNob3VsZCBzZWUgIlBBU1Mi
ICYgIlBBU1MgKHJlYXN5U3RhdGUgZXZlbnQgc2VuZCkiIGZvdXIgdGltZXM6PC9wPgogPGRpdiBp
ZD0iYW5zIj48L2Rpdj4KIAogPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgpAQCAtMTQs
MTAgKzE1LDEwIEBAIGZ1bmN0aW9uIGxvZyhtZXNzYWdlKSB7CiAKIC8vIFVzZWQgdG8gZGV0ZWN0
IGlmIGEgcmVhZHlzdGF0ZSBldmVudCBpcyBkaXNwYXRjaGVkCiBmdW5jdGlvbiBjYXRjaFJlYWR5
c3RhdGVFdmVudEFib3J0KCkgewotICAgIGxvZygiRkFJTEVEIChyZWFkeXN0YXRlIGV2ZW50IHNl
bmQpIik7CisgICAgbG9nKCJQQVNTIChyZWFkeXN0YXRlIGV2ZW50IHNlbmQpIik7CiB9CiAKLWZ1
bmN0aW9uIHRlc3QobnVtKQorZnVuY3Rpb24gdGVzdEFib3J0VG9Eb25lKG51bSkKIHsKICAgICB2
YXIgeGhyOwogCkBAIC0zNiw3ICszNyw3IEBAIGZ1bmN0aW9uIHRlc3QobnVtKQogICAgICAgICAg
ICAgKytmaW5pc2hlZFRlc3RzOwogICAgICAgICAgICAgdGhpcy5vbnJlYWR5c3RhdGVjaGFuZ2Ug
PSBjYXRjaFJlYWR5c3RhdGVFdmVudEFib3J0OwogICAgICAgICAgICAgdGhpcy5hYm9ydCgpOwot
ICAgICAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSAwKQorICAgICAgICAgICAgaWYgKHRo
aXMucmVhZHlTdGF0ZSA9PSA0KQogICAgICAgICAgICAgICAgIGxvZygiUEFTUyIpOwogICAgICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGxvZygiRkFJTEVEIik7CkBAIC01OCw5ICs1OSwx
MCBAQCBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CiAKIHZhciBmaW5pc2hlZFRl
c3RzID0gMDsKIAotZm9yIChpID0gMTsgaSA8IDU7IGkrKykgewotICAgIHRlc3QoaSk7Ci19Cit2
YXIgYWJvcnRUb0RvID0gWycyJywgJzMnLCAnMicsICczJ107CisKK2ZvciAoaSA9IDA7IGkgPCBh
Ym9ydFRvRG8ubGVuZ3RoOyBpKyspCisgICAgdGVzdEFib3J0VG9Eb25lKGFib3J0VG9Eb1tpXSk7
CiAKIDwvc2NyaXB0PgogPC9ib2R5PgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxo
dHRwcmVxdWVzdC94bWxodHRwcmVxdWVzdC1hYm9ydC1yZWFkeVN0YXRlLWV4cGVjdGVkLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3htbGh0
dHByZXF1ZXN0LWFib3J0LXJlYWR5U3RhdGUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAyOTk0NikK
KysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3Qt
YWJvcnQtcmVhZHlTdGF0ZS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsOSArMCww
IEBACi1UZXN0IGJ1ZyAxMzE0MSA6IFhNTEh0dHBSZXF1ZXN0IHNob3VsZCBzZXQgcmVhZHlTdGF0
ZSB0byAwIGFmdGVyIGFib3J0KCkKLQotU2hvdWxkIHNlZSAiUEFTUyIgZm91ciB0aW1lczoKLQot
UEFTUwotUEFTUwotUEFTUwotUEFTUwotCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3ht
bGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LWFib3J0LXJlYWR5U3RhdGUtdW5zZW5kLWV4cGVj
dGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1
ZXN0L3htbGh0dHByZXF1ZXN0LWFib3J0LXJlYWR5U3RhdGUtdW5zZW5kLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMjk3MjEpCShmcm9tIExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVl
c3QveG1saHR0cHJlcXVlc3QtYWJvcnQtcmVhZHlTdGF0ZS1leHBlY3RlZC50eHQ6Mjk3MjEpCisr
KyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LWFi
b3J0LXJlYWR5U3RhdGUtdW5zZW5kLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDkgQEAKK1Rlc3QgYnVnIDEzMTQxIDogWE1MSHR0cFJlcXVlc3Qgc2hvdWxkIHNldCByZWFk
eVN0YXRlIHRvIDAgYWZ0ZXIgYWJvcnQoKQorCitTaG91bGQgc2VlICJQQVNTIiBmb3VyIHRpbWVz
OgorCitQQVNTCitQQVNTCitQQVNTCitQQVNTCisKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVz
dHMveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtYWJvcnQtcmVhZHlTdGF0ZS11bnNlbmQt
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0
cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtYWJvcnQtcmVhZHlTdGF0ZS11bnNlbmQtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAyOTcyMSkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJl
cXVlc3QveG1saHR0cHJlcXVlc3QtYWJvcnQtcmVhZHlTdGF0ZS11bnNlbmQtZXhwZWN0ZWQudHh0
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNyBAQAogVGVzdCBidWcgMTMxNDEgOiBYTUxIdHRw
UmVxdWVzdCBzaG91bGQgc2V0IHJlYWR5U3RhdGUgdG8gMCBhZnRlciBhYm9ydCgpCiAKK1VwZGF0
ZWQgZm9yIGJ1ZyAxNjk4OTogWG1sSHR0cFJlcXVlc3Qgc2hvdWxkIHVzZSB0aGUgc2VuZCgpIGZs
YWcgYWxnb3JpdGhtCisKIFNob3VsZCBzZWUgIlBBU1MiIGZvdXIgdGltZXM6CiAKIFBBU1MKSW5k
ZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3Qt
YWJvcnQtcmVhZHlTdGF0ZS11bnNlbmQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LWFib3J0LXJlYWR5U3RhdGUt
dW5zZW5kLmh0bWwJKHJldmlzaW9uIDI5NzIxKQkoZnJvbSBMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LWFib3J0LXJlYWR5U3RhdGUuaHRtbDoyOTcy
MSkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVl
c3QtYWJvcnQtcmVhZHlTdGF0ZS11bnNlbmQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDY3IEBACis8aHRtbD4KKzxoZWFkPjwvaGVhZD4KKzxib2R5PgorCis8cD5UZXN0IGJ1ZyAxMzE0
MSA6IFhNTEh0dHBSZXF1ZXN0IHNob3VsZCBzZXQgcmVhZHlTdGF0ZSB0byAwIGFmdGVyIGFib3J0
KCkgPC9wPgorPHA+U2hvdWxkIHNlZSAiUEFTUyIgZm91ciB0aW1lczo8L3A+Cis8ZGl2IGlkPSJh
bnMiPjwvZGl2PgorCis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CitmdW5jdGlvbiBs
b2cobWVzc2FnZSkgeworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhbnMiKS5hcHBlbmRD
aGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShtZXNzYWdlKSk7CisgICAgZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoImFucyIpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJy
IikpOworfQorCisvLyBVc2VkIHRvIGRldGVjdCBpZiBhIHJlYWR5c3RhdGUgZXZlbnQgaXMgZGlz
cGF0Y2hlZAorZnVuY3Rpb24gY2F0Y2hSZWFkeXN0YXRlRXZlbnRBYm9ydCgpIHsKKyAgICBsb2co
IkZBSUxFRCAocmVhZHlzdGF0ZSBldmVudCBzZW5kKSIpOworfQorCitmdW5jdGlvbiB0ZXN0KG51
bSkKK3sKKyAgICB2YXIgeGhyOworCisgICAgaWYgKHdpbmRvdy5YTUxIdHRwUmVxdWVzdCkgewor
ICAgICAgICB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICB0cnkgeworICAgICAgICAgICAgeGhyID0gbmV3IEFjdGl2ZVhPYmplY3QoIk1zeG1sMi5YTUxI
VFRQIik7CisgICAgICAgIH0gY2F0Y2ggKGV4KSB7CisgICAgICAgICAgICB4aHIgPSBuZXcgQWN0
aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTEhUVFAiKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlz
LnJlYWR5U3RhdGUgPT0gbnVtKSB7CisgICAgICAgICAgICArK2ZpbmlzaGVkVGVzdHM7CisgICAg
ICAgICAgICB0aGlzLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGNhdGNoUmVhZHlzdGF0ZUV2ZW50QWJv
cnQ7CisgICAgICAgICAgICB0aGlzLmFib3J0KCk7CisgICAgICAgICAgICBpZiAodGhpcy5yZWFk
eVN0YXRlID09IDApCisgICAgICAgICAgICAgICAgbG9nKCJQQVNTIik7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgbG9nKCJGQUlMRUQiKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgaWYgKGZpbmlzaGVkVGVzdHMgPT0gNCAmJiB3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpCisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cisg
ICAgfQorCisgICAgeGhyLm9wZW4oIkdFVCIsICJyZXNvdXJjZXMvMTI1MS5odG1sIiwgdHJ1ZSk7
CisgICAgaWYgKG51bSAhPSAxKQorICAgICAgICB4aHIuc2VuZChudWxsKTsKK30KKworaWYgKHdp
bmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1
bXBBc1RleHQoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Cit9
CisKK3ZhciBmaW5pc2hlZFRlc3RzID0gMDsKKworZm9yIChpID0gMTsgaSA8IDU7IGkrKykgewor
ICAgIHRlc3QoaSk7Cit9CisKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVzdC1hYm9ydC1y
ZWFkeVN0YXRlLXVuc2VuZC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVz
dHMveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtYWJvcnQtcmVhZHlTdGF0ZS11bnNlbmQu
aHRtbAkocmV2aXNpb24gMjk3MjEpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHBy
ZXF1ZXN0L3htbGh0dHByZXF1ZXN0LWFib3J0LXJlYWR5U3RhdGUtdW5zZW5kLmh0bWwJKHdvcmtp
bmcgY29weSkKQEAgLTMsNiArMyw3IEBACiA8Ym9keT4KIAogPHA+VGVzdCBidWcgMTMxNDEgOiBY
TUxIdHRwUmVxdWVzdCBzaG91bGQgc2V0IHJlYWR5U3RhdGUgdG8gMCBhZnRlciBhYm9ydCgpIDwv
cD4KKzxwPlVwZGF0ZWQgZm9yIGJ1ZyAxNjk4OTogWG1sSHR0cFJlcXVlc3Qgc2hvdWxkIHVzZSB0
aGUgc2VuZCgpIGZsYWcgYWxnb3JpdGhtIDwvcD4KIDxwPlNob3VsZCBzZWUgIlBBU1MiIGZvdXIg
dGltZXM6PC9wPgogPGRpdiBpZD0iYW5zIj48L2Rpdj4KIApAQCAtMTcsNyArMTgsNyBAQCBmdW5j
dGlvbiBjYXRjaFJlYWR5c3RhdGVFdmVudEFib3J0KCkgewogICAgIGxvZygiRkFJTEVEIChyZWFk
eXN0YXRlIGV2ZW50IHNlbmQpIik7CiB9CiAKLWZ1bmN0aW9uIHRlc3QobnVtKQorZnVuY3Rpb24g
dGVzdEFib3J0VG9VbnNlbmQobnVtKQogewogICAgIHZhciB4aHI7CiAKQEAgLTU4LDkgKzU5LDEw
IEBAIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKIAogdmFyIGZpbmlzaGVkVGVz
dHMgPSAwOwogCi1mb3IgKGkgPSAxOyBpIDwgNTsgaSsrKSB7Ci0gICAgdGVzdChpKTsKLX0KK3Zh
ciBhYm9ydFRvRG8gPSBbJzEnLCAnNCcsICcxJywgJzQnXTsKKworZm9yIChpID0gMDsgaSA8IGFi
b3J0VG9Eby5sZW5ndGg7IGkrKykKKyAgICB0ZXN0QWJvcnRUb1Vuc2VuZChhYm9ydFRvRG9baV0p
OwogCiA8L3NjcmlwdD4KIDwvYm9keT4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1s
aHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtYWJvcnQtcmVhZHlTdGF0ZS5odG1sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVl
c3QtYWJvcnQtcmVhZHlTdGF0ZS5odG1sCShyZXZpc2lvbiAyOTk0NikKKysrIExheW91dFRlc3Rz
L2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtYWJvcnQtcmVhZHlTdGF0
ZS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0xLDY3ICswLDAgQEAKLTxodG1sPgotPGhlYWQ+PC9o
ZWFkPgotPGJvZHk+Ci0KLTxwPlRlc3QgYnVnIDEzMTQxIDogWE1MSHR0cFJlcXVlc3Qgc2hvdWxk
IHNldCByZWFkeVN0YXRlIHRvIDAgYWZ0ZXIgYWJvcnQoKSA8L3A+Ci08cD5TaG91bGQgc2VlICJQ
QVNTIiBmb3VyIHRpbWVzOjwvcD4KLTxkaXYgaWQ9ImFucyI+PC9kaXY+Ci0KLTxzY3JpcHQgdHlw
ZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIGxvZyhtZXNzYWdlKSB7Ci0gICAgZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoImFucyIpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHRO
b2RlKG1lc3NhZ2UpKTsKLSAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYW5zIikuYXBwZW5k
Q2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnIiKSk7Ci19Ci0KLS8vIFVzZWQgdG8gZGV0
ZWN0IGlmIGEgcmVhZHlzdGF0ZSBldmVudCBpcyBkaXNwYXRjaGVkCi1mdW5jdGlvbiBjYXRjaFJl
YWR5c3RhdGVFdmVudEFib3J0KCkgewotICAgIGxvZygiRkFJTEVEIChyZWFkeXN0YXRlIGV2ZW50
IHNlbmQpIik7Ci19Ci0KLWZ1bmN0aW9uIHRlc3QobnVtKQotewotICAgIHZhciB4aHI7Ci0KLSAg
ICBpZiAod2luZG93LlhNTEh0dHBSZXF1ZXN0KSB7Ci0gICAgICAgIHhociA9IG5ldyBYTUxIdHRw
UmVxdWVzdCgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICB4aHIg
PSBuZXcgQWN0aXZlWE9iamVjdCgiTXN4bWwyLlhNTEhUVFAiKTsKLSAgICAgICAgfSBjYXRjaCAo
ZXgpIHsKLSAgICAgICAgICAgIHhociA9IG5ldyBBY3RpdmVYT2JqZWN0KCJNaWNyb3NvZnQuWE1M
SFRUUCIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9
IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSBudW0pIHsKLSAg
ICAgICAgICAgICsrZmluaXNoZWRUZXN0czsKLSAgICAgICAgICAgIHRoaXMub25yZWFkeXN0YXRl
Y2hhbmdlID0gY2F0Y2hSZWFkeXN0YXRlRXZlbnRBYm9ydDsKLSAgICAgICAgICAgIHRoaXMuYWJv
cnQoKTsKLSAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gMCkKLSAgICAgICAgICAg
ICAgICBsb2coIlBBU1MiKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBsb2co
IkZBSUxFRCIpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoZmluaXNoZWRUZXN0
cyA9PSA0ICYmIHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKLSAgICAgICAgICAgIGxheW91
dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKLSAgICB9Ci0KLSAgICB4aHIub3BlbigiR0VU
IiwgInJlc291cmNlcy8xMjUxLmh0bWwiLCB0cnVlKTsKLSAgICBpZiAobnVtICE9IDEpCi0gICAg
ICAgIHhoci5zZW5kKG51bGwpOwotfQotCi1pZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVy
KSB7Ci0gICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOwotICAgIGxheW91dFRl
c3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKLX0KLQotdmFyIGZpbmlzaGVkVGVzdHMgPSAw
OwotCi1mb3IgKGkgPSAxOyBpIDwgNTsgaSsrKSB7Ci0gICAgdGVzdChpKTsKLX0KLQotPC9zY3Jp
cHQ+Ci08L2JvZHk+Ci08L2h0bWw+Cg==
</data>
<flag name="review"
          id="8247"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18924</attachid>
            <date>2008-02-04 20:25:34 -0800</date>
            <delta_ts>2008-02-05 03:06:36 -0800</delta_ts>
            <desc>Updated patch with all the required testcases</desc>
            <filename>bug16989-loader-updated.patch</filename>
            <type>text/plain</type>
            <size>24574</size>
            <attacher name="Julien Chaffraix">jchaffraix</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyOTk4NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzEgQEAKKzIwMDgtMDItMDQgIEp1bGllbiBDaGFmZnJhaXggIDxqdWxpZW4uY2hh
ZmZyYWl4QGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBidWcgMTY5ODkgOiBBZGQgc2VuZCgpIGZsYWcgY2hlY2tzIGluIFhtbEh0dHBS
ZXF1ZXN0CisKKyAgICAgICAgU3BsaXR0ZWQgWG1sSHR0cFJlcXVlc3Q6OmFib3J0IGludG8gYWJv
cnQgKGNhbGxlZCBmcm9tIEphdmFTY3JpcHQpIGFuZCBpbnRlcm5hbEFib3J0IHRoYXQgCisgICAg
ICAgIHBlcmZvcm0gdGhlIGNhbmNlbGxhdGlvbiBhbmQgaXMgY2FsbGVkIG1haW5seSBmcm9tIGlu
dGVybmFsIG1ldGhvZHMuCisKKyAgICAgICAgVGVzdHM6IGh0dHAvdGVzdHMveG1saHR0cHJlcXVl
c3QveG1saHR0cHJlcXVlc3QtYWJvcnQtcmVhZHlTdGF0ZS1zaG91bGREaXNwYXRjaEV2ZW50Lmh0
bWwKKyAgICAgICAgICAgICAgIGh0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVl
c3QtYWJvcnQtcmVhZHlTdGF0ZS1zaG91bGROb3REaXNwYXRjaEV2ZW50Lmh0bWwKKyAgICAgICAg
ICAgICAgIGh0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtdGVzdC1zZW5k
LWZsYWcuaHRtbAorCisgICAgICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjpvcGVuKTogTm93IGNhbGwgaW50ZXJuYWxBYm9ydCgp
IGFuZCBtb3ZlZCByZWR5U3RhdGUgY2hhbmdlIGludG8gbWV0aG9kCisgICAgICAgIChXZWJDb3Jl
OjpYTUxIdHRwUmVxdWVzdDo6c2VuZCk6IEFkZGVkIG1fbG9hZGVyIGNoZWNrCisgICAgICAgIChX
ZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6YWJvcnQpOiBVcGRhdGUgcmVhZHlzdGF0ZSBhbmQgY2xl
YXIgdGhlIHJlcXVlc3QgaGVhZGVycyBhcworICAgICAgICBzcGVjaWZpZWQgaW4gdGhlIHNwZWMK
KworICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OmludGVybmFsQWJvcnQpOiBNZXRo
b2RzIGhhbmRsaW5nIGNhbmNlbGxhdGlvbiAobm8gcmVhZHlTdGF0ZSB1cGRhdGUpCisgICAgICAg
IChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6c2V0UmVxdWVzdEhlYWRlcik6IEFkZGVkIG1fbG9h
ZGVyIGNoZWNrCisKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0Ojpwcm9jZXNzU3lu
Y0xvYWRSZXN1bHRzKTogTm93IGNhbGwgaW50ZXJuYWxBYm9ydCgpIGluc3RlYWQgb2YgYWJvcnQo
KQorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OndpbGxTZW5kUmVxdWVzdCk6IERp
dHRvCisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6Y2FuY2VsUmVxdWVzdHMpOiBE
aXR0bworICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OmRldGFjaFJlcXVlc3RzKTog
RGl0dG8KKyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3QuaDogQWRkZWQgdGhlIHByaXZhdGUg
aW50ZXJuYWxBYm9ydCBtZXRob2QKKwogMjAwOC0wMi0wNCAgQnJhZHkgRWlkc29uICA8YmVpZHNv
bkBhcHBsZS5jb20+CiAKICAgICAgICAgQXR0ZW1wdCB0byBmaXggYnVpbGQgb2YgYWxsIG5vbi1N
YWMgcGxhdGZvcm1zCkluZGV4OiBXZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCShyZXZpc2lvbiAyOTk4MykK
KysrIFdlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMy
LDcgKzMzMiw4IEBAIGJvb2wgWE1MSHR0cFJlcXVlc3Q6OnVybE1hdGNoZXNEb2N1bWVudEQKIAog
dm9pZCBYTUxIdHRwUmVxdWVzdDo6b3Blbihjb25zdCBTdHJpbmcmIG1ldGhvZCwgY29uc3QgS1VS
TCYgdXJsLCBib29sIGFzeW5jLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBhYm9ydCgpOwor
ICAgIGludGVybmFsQWJvcnQoKTsKKyAgICBtX3N0YXRlID0gVW5pbml0aWFsaXplZDsKICAgICBt
X2Fib3J0ZWQgPSBmYWxzZTsKIAogICAgIC8vIGNsZWFyIHN0dWZmIGZyb20gcG9zc2libGUgcHJl
dmlvdXMgbG9hZApAQCAtMzc3LDYgKzM3OCw3IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6Om9wZW4o
Y29uc3QgU3RyaW5nJiAKIAogICAgIG1fYXN5bmMgPSBhc3luYzsKIAorICAgIEFTU0VSVCghbV9s
b2FkZXIpOwogICAgIGNoYW5nZVN0YXRlKE9wZW4pOwogfQogCkBAIC00MDIsMjAgKzQwNCwxNiBA
QCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpzZW5kKGNvbnN0IFN0cmluZyYgCiAgICAgaWYgKCFtX2Rv
YykKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fc3RhdGUgIT0gT3BlbikgeworICAgIGlm
IChtX3N0YXRlICE9IE9wZW4gfHwgbV9sb2FkZXIpIHsKICAgICAgICAgZWMgPSBJTlZBTElEX1NU
QVRFX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgCi0gICAgLy8gRklYTUU6IFNob3Vs
ZCB0aGlzIGFib3J0IG9yIHJhaXNlIGFuIGV4Y2VwdGlvbiBpbnN0ZWFkIGlmIHdlIGFscmVhZHkg
aGF2ZSBhIG1fbG9hZGVyIGdvaW5nPwotICAgIGlmIChtX2xvYWRlcikKLSAgICAgICAgcmV0dXJu
OwogCiAgICAgbV9hYm9ydGVkID0gZmFsc2U7CiAKICAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVz
dChtX3VybCk7CiAgICAgcmVxdWVzdC5zZXRIVFRQTWV0aG9kKG1fbWV0aG9kKTsKLSAgICAKKwog
ICAgIGlmICghYm9keS5pc051bGwoKSAmJiBtX21ldGhvZCAhPSAiR0VUIiAmJiBtX21ldGhvZCAh
PSAiSEVBRCIgJiYgKG1fdXJsLnByb3RvY29sKCkubG93ZXIoKSA9PSAiaHR0cCIgfHwgbV91cmwu
cHJvdG9jb2woKS5sb3dlcigpID09ICJodHRwcyIpKSB7CiAgICAgICAgIFN0cmluZyBjb250ZW50
VHlwZSA9IGdldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIpOwogICAgICAgICBpZiAoY29u
dGVudFR5cGUuaXNFbXB0eSgpKSB7CkBAIC00ODUsMTAgKzQ4MywyOCBAQCB2b2lkIFhNTEh0dHBS
ZXF1ZXN0OjpzZW5kKGNvbnN0IFN0cmluZyYgCiAKIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmFib3J0
KCkKIHsKKyAgICBib29sIHNlbmRGbGFnID0gbV9sb2FkZXI7CisKKyAgICBpbnRlcm5hbEFib3J0
KCk7CisKKyAgICAvLyBDbGVhciBoZWFkZXJzIGFzIHJlcXVpcmVkIGJ5IHRoZSBzcGVjCisgICAg
bV9yZXF1ZXN0SGVhZGVycy5jbGVhcigpOworCisgICAgaWYgKChtX3N0YXRlIDw9IE9wZW4gJiYg
IXNlbmRGbGFnKSB8fCBtX3N0YXRlID09IExvYWRlZCkKKyAgICAgICAgbV9zdGF0ZSA9IFVuaW5p
dGlhbGl6ZWQ7CisgICAgIGVsc2UgeworICAgICAgICBBU1NFUlQoIW1fbG9hZGVyKTsKKyAgICAg
ICAgY2hhbmdlU3RhdGUoTG9hZGVkKTsKKyAgICAgICAgbV9zdGF0ZSA9IFVuaW5pdGlhbGl6ZWQ7
CisgICAgfQorfQorCit2b2lkIFhNTEh0dHBSZXF1ZXN0OjppbnRlcm5hbEFib3J0KCkKK3sKICAg
ICBib29sIGhhZExvYWRlciA9IG1fbG9hZGVyOwogCiAgICAgbV9hYm9ydGVkID0gdHJ1ZTsKLSAg
ICAKKwogICAgIGlmIChoYWRMb2FkZXIpIHsKICAgICAgICAgbV9sb2FkZXItPmNhbmNlbCgpOwog
ICAgICAgICBtX2xvYWRlciA9IDA7CkBAIC00OTgsOCArNTE0LDYgQEAgdm9pZCBYTUxIdHRwUmVx
dWVzdDo6YWJvcnQoKQogCiAgICAgaWYgKGhhZExvYWRlcikKICAgICAgICAgZHJvcFByb3RlY3Rp
b24oKTsKLQotICAgIG1fc3RhdGUgPSBVbmluaXRpYWxpemVkOwogfQogCiB2b2lkIFhNTEh0dHBS
ZXF1ZXN0Ojpkcm9wUHJvdGVjdGlvbigpICAgICAgICAKQEAgLTUzMCw3ICs1NDQsNyBAQCB2b2lk
IFhNTEh0dHBSZXF1ZXN0OjpvdmVycmlkZU1JTUVUeXBlKGNvCiAgICAgCiB2b2lkIFhNTEh0dHBS
ZXF1ZXN0OjpzZXRSZXF1ZXN0SGVhZGVyKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5n
JiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgaWYgKG1fc3RhdGUgIT0gT3Blbikg
eworICAgIGlmIChtX3N0YXRlICE9IE9wZW4gfHwgbV9sb2FkZXIpIHsKICAgICAgICAgU2V0dGlu
Z3MqIHNldHRpbmdzID0gbV9kb2MgPyBtX2RvYy0+c2V0dGluZ3MoKSA6IDA7CiAgICAgICAgIGlm
IChzZXR0aW5ncyAmJiBzZXR0aW5ncy0+dXNlc0Rhc2hib2FyZEJhY2t3YXJkQ29tcGF0aWJpbGl0
eU1vZGUoKSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTY1Miw3ICs2NjYsNyBAQCBTdHJpbmcg
WE1MSHR0cFJlcXVlc3Q6OmdldFN0YXR1c1RleHQoRXhjCiB2b2lkIFhNTEh0dHBSZXF1ZXN0Ojpw
cm9jZXNzU3luY0xvYWRSZXN1bHRzKGNvbnN0IFZlY3RvcjxjaGFyPiYgZGF0YSwgY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7CiAgICAgaWYgKCF1cmxNYXRjaGVzRG9jdW1lbnRE
b21haW4ocmVzcG9uc2UudXJsKCkpKSB7Ci0gICAgICAgIGFib3J0KCk7CisgICAgICAgIGludGVy
bmFsQWJvcnQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNzA1LDcgKzcxOSw3IEBA
IHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRpZEZpbmlzaExvYWRpbmcoU3UKIHZvaWQgWE1MSHR0cFJl
cXVlc3Q6OndpbGxTZW5kUmVxdWVzdChTdWJyZXNvdXJjZUxvYWRlciosIFJlc291cmNlUmVxdWVz
dCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkKIHsK
ICAgICBpZiAoIXVybE1hdGNoZXNEb2N1bWVudERvbWFpbihyZXF1ZXN0LnVybCgpKSkKLSAgICAg
ICAgYWJvcnQoKTsKKyAgICAgICAgaW50ZXJuYWxBYm9ydCgpOwogfQogCiB2b2lkIFhNTEh0dHBS
ZXF1ZXN0OjpkaWRSZWNlaXZlUmVzcG9uc2UoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBSZXNv
dXJjZVJlc3BvbnNlJiByZXNwb25zZSkKQEAgLTc2OCw3ICs3ODIsNyBAQCB2b2lkIFhNTEh0dHBS
ZXF1ZXN0OjpjYW5jZWxSZXF1ZXN0cyhEb2N1CiAgICAgUmVxdWVzdHNTZXQgY29weSA9ICpyZXF1
ZXN0czsKICAgICBSZXF1ZXN0c1NldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY29weS5lbmQoKTsK
ICAgICBmb3IgKFJlcXVlc3RzU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IGNvcHkuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KQotICAgICAgICAoKml0KS0+YWJvcnQoKTsKKyAgICAgICAgKCppdCkt
PmludGVybmFsQWJvcnQoKTsKIH0KIAogdm9pZCBYTUxIdHRwUmVxdWVzdDo6ZGV0YWNoUmVxdWVz
dHMoRG9jdW1lbnQqIG1fZG9jKQpAQCAtNzgwLDcgKzc5NCw3IEBAIHZvaWQgWE1MSHR0cFJlcXVl
c3Q6OmRldGFjaFJlcXVlc3RzKERvY3UKICAgICBSZXF1ZXN0c1NldDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gcmVxdWVzdHMtPmVuZCgpOwogICAgIGZvciAoUmVxdWVzdHNTZXQ6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gcmVxdWVzdHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAo
Kml0KS0+bV9kb2MgPSAwOwotICAgICAgICAoKml0KS0+YWJvcnQoKTsKKyAgICAgICAgKCppdCkt
PmludGVybmFsQWJvcnQoKTsKICAgICB9CiAgICAgZGVsZXRlIHJlcXVlc3RzOwogfQpJbmRleDog
V2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3htbC9Y
TUxIdHRwUmVxdWVzdC5oCShyZXZpc2lvbiAyOTk4MykKKysrIFdlYkNvcmUveG1sL1hNTEh0dHBS
ZXF1ZXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMCw2ICsxMjAsNyBAQCBwcml2YXRlOgogICAg
IHZvaWQgY2hhbmdlU3RhdGUoWE1MSHR0cFJlcXVlc3RTdGF0ZSBuZXdTdGF0ZSk7CiAgICAgdm9p
ZCBjYWxsUmVhZHlTdGF0ZUNoYW5nZUxpc3RlbmVyKCk7CiAgICAgdm9pZCBkcm9wUHJvdGVjdGlv
bigpOworICAgIHZvaWQgaW50ZXJuYWxBYm9ydCgpOwogCiAgICAgRG9jdW1lbnQqIG1fZG9jOwog
CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCShyZXZpc2lvbiAyOTk4NSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDA4LTAyLTA0ICBKdWxpZW4gQ2hhZmZyYWl4
ICA8anVsaWVuLmNoYWZmcmFpeEBnbWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgYnVnIDE2OTg5IDogQWRkIHNlbmQoKSBmbGFnIGNoZWNr
cyBpbiBYbWxIdHRwUmVxdWVzdAorCisgICAgICAgIC0gU3BsaXR0ZWQgeG1saHR0cHJlcXVlc3Qt
YWJvcnQtcmVhZHlzdGF0ZSBpbiAyIHRlc3QgY2FzZXMgKHhtbGh0dHByZXF1ZXN0LWFib3J0LXJl
YWR5c3RhdGUtc2hvdWxkRGlzcGF0Y2hFdmVudCBhbmQgeG1saHR0cHJlcXVlc3QtYWJvcnQtcmVh
ZHlzdGF0ZS1zaG91bGROb3REaXNwYXRjaEV2ZW50KQorCisgICAgICAgIC0gQWRkZWQgdGVzdCBj
YXNlIGZvciB0aGUgMiBzZW5kKCkgZmxhZyBjaGVja3MgYWRkZWQgKGluIFhtbEh0dHBSZXF1ZXN0
OjpzZW5kIGFuZCBYbWxIdHRwUmVxdWVzdDo6c2V0UmVxdWVzdEhlYWRlcikKKworICAgICAgICAq
IGh0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtYWJvcnQtcmVhZHlTdGF0
ZS1leHBlY3RlZC50eHQ6IFJlbW92ZWQuCisgICAgICAgICogaHR0cC90ZXN0cy94bWxodHRwcmVx
dWVzdC94bWxodHRwcmVxdWVzdC1hYm9ydC1yZWFkeVN0YXRlLXNob3VsZERpc3BhdGNoRXZlbnQt
ZXhwZWN0ZWQudHh0OiBDb3BpZWQgZnJvbSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHBy
ZXF1ZXN0L3htbGh0dHByZXF1ZXN0LWFib3J0LXJlYWR5U3RhdGUtZXhwZWN0ZWQudHh0LgorICAg
ICAgICAqIGh0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtYWJvcnQtcmVh
ZHlTdGF0ZS1zaG91bGREaXNwYXRjaEV2ZW50Lmh0bWw6IENvcGllZCBmcm9tIExheW91dFRlc3Rz
L2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtYWJvcnQtcmVhZHlTdGF0
ZS5odG1sLgorICAgICAgICAqIGh0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVl
c3QtYWJvcnQtcmVhZHlTdGF0ZS1zaG91bGROb3REaXNwYXRjaEV2ZW50LWV4cGVjdGVkLnR4dDog
Q29waWVkIGZyb20gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC94bWxodHRw
cmVxdWVzdC1hYm9ydC1yZWFkeVN0YXRlLWV4cGVjdGVkLnR4dC4KKyAgICAgICAgKiBodHRwL3Rl
c3RzL3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LWFib3J0LXJlYWR5U3RhdGUtc2hvdWxk
Tm90RGlzcGF0Y2hFdmVudC5odG1sOiBDb3BpZWQgZnJvbSBMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LWFib3J0LXJlYWR5U3RhdGUuaHRtbC4KKyAg
ICAgICAgKiBodHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LWFib3J0LXJl
YWR5U3RhdGUuaHRtbDogUmVtb3ZlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3htbGh0dHByZXF1
ZXN0L3htbGh0dHByZXF1ZXN0LXRlc3Qtc2VuZC1mbGFnLWV4cGVjdGVkLnR4dDogQWRkZWQuCisg
ICAgICAgICogaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVzdC10ZXN0LXNl
bmQtZmxhZy5odG1sOiBBZGRlZC4KKwogMjAwOC0wMi0wNCAgQWRhbSBSb2JlbiAgPGFyb2JlbkBh
cHBsZS5jb20+CiAKICAgICAgICAgKiBwbGF0Zm9ybS93aW4vU2tpcHBlZDogQWRkZWQgb25lIG1v
cmUgZmFpbHVyZS4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qv
eG1saHR0cHJlcXVlc3QtYWJvcnQtcmVhZHlTdGF0ZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVzdC1h
Ym9ydC1yZWFkeVN0YXRlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMjk5ODMpCisrKyBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LWFib3J0LXJlYWR5
U3RhdGUtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDkgKzAsMCBAQAotVGVzdCBi
dWcgMTMxNDEgOiBYTUxIdHRwUmVxdWVzdCBzaG91bGQgc2V0IHJlYWR5U3RhdGUgdG8gMCBhZnRl
ciBhYm9ydCgpCi0KLVNob3VsZCBzZWUgIlBBU1MiIGZvdXIgdGltZXM6Ci0KLVBBU1MKLVBBU1MK
LVBBU1MKLVBBU1MKLQpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVz
dC94bWxodHRwcmVxdWVzdC1hYm9ydC1yZWFkeVN0YXRlLXNob3VsZERpc3BhdGNoRXZlbnQtZXhw
ZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJl
cXVlc3QveG1saHR0cHJlcXVlc3QtYWJvcnQtcmVhZHlTdGF0ZS1zaG91bGREaXNwYXRjaEV2ZW50
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMjk5NTUpCShmcm9tIExheW91dFRlc3RzL2h0dHAvdGVz
dHMveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtYWJvcnQtcmVhZHlTdGF0ZS1leHBlY3Rl
ZC50eHQ6Mjk5NTUpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3ht
bGh0dHByZXF1ZXN0LWFib3J0LXJlYWR5U3RhdGUtc2hvdWxkRGlzcGF0Y2hFdmVudC1leHBlY3Rl
ZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5IEBACitUZXN0IGJ1ZyAxMzE0MSA6IFhN
TEh0dHBSZXF1ZXN0IHNob3VsZCBzZXQgcmVhZHlTdGF0ZSB0byAwIGFmdGVyIGFib3J0KCkKKwor
U2hvdWxkIHNlZSAiUEFTUyIgZm91ciB0aW1lczoKKworUEFTUworUEFTUworUEFTUworUEFTUwor
CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1
ZXN0LWFib3J0LXJlYWR5U3RhdGUtc2hvdWxkRGlzcGF0Y2hFdmVudC1leHBlY3RlZC50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC94bWxodHRw
cmVxdWVzdC1hYm9ydC1yZWFkeVN0YXRlLXNob3VsZERpc3BhdGNoRXZlbnQtZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAyOTk1NSkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVl
c3QveG1saHR0cHJlcXVlc3QtYWJvcnQtcmVhZHlTdGF0ZS1zaG91bGREaXNwYXRjaEV2ZW50LWV4
cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSw5ICsxLDEzIEBACiBUZXN0IGJ1ZyAxMzE0
MSA6IFhNTEh0dHBSZXF1ZXN0IHNob3VsZCBzZXQgcmVhZHlTdGF0ZSB0byAwIGFmdGVyIGFib3J0
KCkKIAotU2hvdWxkIHNlZSAiUEFTUyIgZm91ciB0aW1lczoKK1VwZGF0ZWQgZm9yIGJ1ZyAxNjk4
OTogQWRkIHNlbmQoKSBmbGFnIGNoZWNrcyBpbiBYbWxIdHRwUmVxdWVzdAogCitTaG91bGQgc2Vl
ICJQQVNTIChyZWFzeVN0YXRlIGV2ZW50IHNlbmQpIiAmICJQQVNTIiAoaW4gdGhhdCBvcmRlcikg
dGhyZWUgdGltZXM6CisKK1BBU1MgKHJlYWR5c3RhdGUgZXZlbnQgc2VuZCkKIFBBU1MKK1BBU1Mg
KHJlYWR5c3RhdGUgZXZlbnQgc2VuZCkKIFBBU1MKLVBBU1MKK1BBU1MgKHJlYWR5c3RhdGUgZXZl
bnQgc2VuZCkKIFBBU1MKIApJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVx
dWVzdC94bWxodHRwcmVxdWVzdC1hYm9ydC1yZWFkeVN0YXRlLXNob3VsZERpc3BhdGNoRXZlbnQu
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0
L3htbGh0dHByZXF1ZXN0LWFib3J0LXJlYWR5U3RhdGUtc2hvdWxkRGlzcGF0Y2hFdmVudC5odG1s
CShyZXZpc2lvbiAyOTk1NSkJKGZyb20gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVx
dWVzdC94bWxodHRwcmVxdWVzdC1hYm9ydC1yZWFkeVN0YXRlLmh0bWw6Mjk5NTUpCisrKyBMYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LWFib3J0LXJl
YWR5U3RhdGUtc2hvdWxkRGlzcGF0Y2hFdmVudC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNjcgQEAKKzxodG1sPgorPGhlYWQ+PC9oZWFkPgorPGJvZHk+CisKKzxwPlRlc3QgYnVnIDEz
MTQxIDogWE1MSHR0cFJlcXVlc3Qgc2hvdWxkIHNldCByZWFkeVN0YXRlIHRvIDAgYWZ0ZXIgYWJv
cnQoKSA8L3A+Cis8cD5TaG91bGQgc2VlICJQQVNTIiBmb3VyIHRpbWVzOjwvcD4KKzxkaXYgaWQ9
ImFucyI+PC9kaXY+CisKKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KK2Z1bmN0aW9u
IGxvZyhtZXNzYWdlKSB7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFucyIpLmFwcGVu
ZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG1lc3NhZ2UpKTsKKyAgICBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgiYW5zIikuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi
YnIiKSk7Cit9CisKKy8vIFVzZWQgdG8gZGV0ZWN0IGlmIGEgcmVhZHlzdGF0ZSBldmVudCBpcyBk
aXNwYXRjaGVkCitmdW5jdGlvbiBjYXRjaFJlYWR5c3RhdGVFdmVudEFib3J0KCkgeworICAgIGxv
ZygiRkFJTEVEIChyZWFkeXN0YXRlIGV2ZW50IHNlbmQpIik7Cit9CisKK2Z1bmN0aW9uIHRlc3Qo
bnVtKQoreworICAgIHZhciB4aHI7CisKKyAgICBpZiAod2luZG93LlhNTEh0dHBSZXF1ZXN0KSB7
CisgICAgICAgIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIHRyeSB7CisgICAgICAgICAgICB4aHIgPSBuZXcgQWN0aXZlWE9iamVjdCgiTXN4bWwyLlhN
TEhUVFAiKTsKKyAgICAgICAgfSBjYXRjaCAoZXgpIHsKKyAgICAgICAgICAgIHhociA9IG5ldyBB
Y3RpdmVYT2JqZWN0KCJNaWNyb3NvZnQuWE1MSFRUUCIpOworICAgICAgICB9CisgICAgfQorCisg
ICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRo
aXMucmVhZHlTdGF0ZSA9PSBudW0pIHsKKyAgICAgICAgICAgICsrZmluaXNoZWRUZXN0czsKKyAg
ICAgICAgICAgIHRoaXMub25yZWFkeXN0YXRlY2hhbmdlID0gY2F0Y2hSZWFkeXN0YXRlRXZlbnRB
Ym9ydDsKKyAgICAgICAgICAgIHRoaXMuYWJvcnQoKTsKKyAgICAgICAgICAgIGlmICh0aGlzLnJl
YWR5U3RhdGUgPT0gMCkKKyAgICAgICAgICAgICAgICBsb2coIlBBU1MiKTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBsb2coIkZBSUxFRCIpOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBpZiAoZmluaXNoZWRUZXN0cyA9PSA0ICYmIHdpbmRvdy5sYXlvdXRUZXN0Q29u
dHJvbGxlcikKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsK
KyAgICB9CisKKyAgICB4aHIub3BlbigiR0VUIiwgInJlc291cmNlcy8xMjUxLmh0bWwiLCB0cnVl
KTsKKyAgICBpZiAobnVtICE9IDEpCisgICAgICAgIHhoci5zZW5kKG51bGwpOworfQorCitpZiAo
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
ZHVtcEFzVGV4dCgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsK
K30KKwordmFyIGZpbmlzaGVkVGVzdHMgPSAwOworCitmb3IgKGkgPSAxOyBpIDwgNTsgaSsrKSB7
CisgICAgdGVzdChpKTsKK30KKworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LWFib3J0
LXJlYWR5U3RhdGUtc2hvdWxkRGlzcGF0Y2hFdmVudC5odG1sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtYWJvcnQtcmVh
ZHlTdGF0ZS1zaG91bGREaXNwYXRjaEV2ZW50Lmh0bWwJKHJldmlzaW9uIDI5OTU1KQorKysgTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVzdC1hYm9ydC1y
ZWFkeVN0YXRlLXNob3VsZERpc3BhdGNoRXZlbnQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMyw3
ICszLDggQEAKIDxib2R5PgogCiA8cD5UZXN0IGJ1ZyAxMzE0MSA6IFhNTEh0dHBSZXF1ZXN0IHNo
b3VsZCBzZXQgcmVhZHlTdGF0ZSB0byAwIGFmdGVyIGFib3J0KCkgPC9wPgotPHA+U2hvdWxkIHNl
ZSAiUEFTUyIgZm91ciB0aW1lczo8L3A+Cis8cD5VcGRhdGVkIGZvciBidWcgMTY5ODk6IEFkZCBz
ZW5kKCkgZmxhZyBjaGVja3MgaW4gWG1sSHR0cFJlcXVlc3QgPC9wPgorPHA+U2hvdWxkIHNlZSAi
UEFTUyAocmVhc3lTdGF0ZSBldmVudCBzZW5kKSIgJiAiUEFTUyIgKGluIHRoYXQgb3JkZXIpIHRo
cmVlIHRpbWVzOjwvcD4KIDxkaXYgaWQ9ImFucyI+PC9kaXY+CiAKIDxzY3JpcHQgdHlwZT0idGV4
dC9qYXZhc2NyaXB0Ij4KQEAgLTE0LDEwICsxNSw0NCBAQCBmdW5jdGlvbiBsb2cobWVzc2FnZSkg
ewogCiAvLyBVc2VkIHRvIGRldGVjdCBpZiBhIHJlYWR5c3RhdGUgZXZlbnQgaXMgZGlzcGF0Y2hl
ZAogZnVuY3Rpb24gY2F0Y2hSZWFkeXN0YXRlRXZlbnRBYm9ydCgpIHsKLSAgICBsb2coIkZBSUxF
RCAocmVhZHlzdGF0ZSBldmVudCBzZW5kKSIpOworICAgIGxvZygiUEFTUyAocmVhZHlzdGF0ZSBl
dmVudCBzZW5kKSIpOwogfQogCi1mdW5jdGlvbiB0ZXN0KG51bSkKKy8vIENhbGxlZCBvbmx5IGZv
ciByZWFkeVN0YXRlID09IDEKK2Z1bmN0aW9uIHRlc3RBYm9ydFdpdGhSZWFkeVN0YXRlRXZlbnRM
b2FkaW5nKCkKK3sKKyAgICB2YXIgeGhyOworCisgICAgaWYgKHdpbmRvdy5YTUxIdHRwUmVxdWVz
dCkgeworICAgICAgICB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICB0cnkgeworICAgICAgICAgICAgeGhyID0gbmV3IEFjdGl2ZVhPYmplY3QoIk1zeG1s
Mi5YTUxIVFRQIik7CisgICAgICAgIH0gY2F0Y2ggKGV4KSB7CisgICAgICAgICAgICB4aHIgPSBu
ZXcgQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTEhUVFAiKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIC8vIFdlIHVzZSBhIHNsb3cgcGFnZSB0byB0ZXN0IHRoZSBMT0FESU5HIHN0YXRlIHdp
dGggdGhlIHNlbmQoKSBmbGFnCisgICAgLy8gYW5kIHdlIGRvIG5vdCBjYXRjaCByZWFkeVN0YXRl
IGV2ZW50IGJlZm9yZSBzZW5kIGhhcyBiZWVuIGNhbGxlZAorICAgIHhoci5vcGVuKCJHRVQiLCAi
cmVzb3VyY2VzL2VuZGxlc3N4bWwucGhwIiwgdHJ1ZSk7CisgICAgeGhyLnNlbmQobnVsbCk7CisK
KyAgICArK2ZpbmlzaGVkVGVzdHM7CisgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGNhdGNo
UmVhZHlzdGF0ZUV2ZW50QWJvcnQ7CisgICAgeGhyLmFib3J0KCk7CisKKyAgICBpZiAoeGhyLnJl
YWR5U3RhdGUgPT0gMCkKKyAgICAgICAgbG9nKCJQQVNTIik7CisgICAgZWxzZQorICAgICAgICBs
b2coIkZBSUxFRCIpOworCisgICAgaWYgKGZpbmlzaGVkVGVzdHMgPT0gYWJvcnRUb0RvLmxlbmd0
aCAmJiB3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250
cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKworLy8gQ2FsbGVkIHdpdGggbnVtICE9IDEKK2Z1bmN0
aW9uIHRlc3RBYm9ydFdpdGhSZWFkeVN0YXRlRXZlbnQobnVtKQogewogICAgIHZhciB4aHI7CiAK
QEAgLTQxLDE0ICs3NiwxMyBAQCBmdW5jdGlvbiB0ZXN0KG51bSkKICAgICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgICAgICBsb2coIkZBSUxFRCIpOwogICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICBpZiAoZmluaXNoZWRUZXN0cyA9PSA0ICYmIHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
cikKKworICAgICAgICBpZiAoZmluaXNoZWRUZXN0cyA9PSBhYm9ydFRvRG8ubGVuZ3RoICYmIHdp
bmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9s
bGVyLm5vdGlmeURvbmUoKTsKICAgICB9CiAKICAgICB4aHIub3BlbigiR0VUIiwgInJlc291cmNl
cy8xMjUxLmh0bWwiLCB0cnVlKTsKLSAgICBpZiAobnVtICE9IDEpCi0gICAgICAgIHhoci5zZW5k
KG51bGwpOworICAgIHhoci5zZW5kKG51bGwpOwogfQogCiBpZiAod2luZG93LmxheW91dFRlc3RD
b250cm9sbGVyKSB7CkBAIC01OCw5ICs5MiwxMyBAQCBpZiAod2luZG93LmxheW91dFRlc3RDb250
cm9sbGVyKSB7CiAKIHZhciBmaW5pc2hlZFRlc3RzID0gMDsKIAotZm9yIChpID0gMTsgaSA8IDU7
IGkrKykgewotICAgIHRlc3QoaSk7Ci19Cit2YXIgYWJvcnRUb0RvID0gWycyJywgJzMnLCAnMSdd
OworCitmb3IgKGkgPSAwOyBpIDwgYWJvcnRUb0RvLmxlbmd0aDsgaSsrKQorICAgIGlmIChhYm9y
dFRvRG9baV0gPT0gMSkKKyAgICAgICAgdGVzdEFib3J0V2l0aFJlYWR5U3RhdGVFdmVudExvYWRp
bmcoKTsKKyAgICBlbHNlCisgICAgICAgIHRlc3RBYm9ydFdpdGhSZWFkeVN0YXRlRXZlbnQoYWJv
cnRUb0RvW2ldKTsKIAogPC9zY3JpcHQ+CiA8L2JvZHk+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LWFib3J0LXJlYWR5U3RhdGUtc2hv
dWxkTm90RGlzcGF0Y2hFdmVudC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVzdC1hYm9ydC1yZWFkeVN0
YXRlLXNob3VsZE5vdERpc3BhdGNoRXZlbnQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAyOTk1NSkJ
KGZyb20gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVz
dC1hYm9ydC1yZWFkeVN0YXRlLWV4cGVjdGVkLnR4dDoyOTk1NSkKKysrIExheW91dFRlc3RzL2h0
dHAvdGVzdHMveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtYWJvcnQtcmVhZHlTdGF0ZS1z
aG91bGROb3REaXNwYXRjaEV2ZW50LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDkgQEAKK1Rlc3QgYnVnIDEzMTQxIDogWE1MSHR0cFJlcXVlc3Qgc2hvdWxkIHNldCByZWFk
eVN0YXRlIHRvIDAgYWZ0ZXIgYWJvcnQoKQorCitTaG91bGQgc2VlICJQQVNTIiBmb3VyIHRpbWVz
OgorCitQQVNTCitQQVNTCitQQVNTCitQQVNTCisKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVz
dHMveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtYWJvcnQtcmVhZHlTdGF0ZS1zaG91bGRO
b3REaXNwYXRjaEV2ZW50LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LWFib3J0LXJlYWR5U3RhdGUt
c2hvdWxkTm90RGlzcGF0Y2hFdmVudC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDI5OTU1KQorKysg
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVzdC1hYm9y
dC1yZWFkeVN0YXRlLXNob3VsZE5vdERpc3BhdGNoRXZlbnQtZXhwZWN0ZWQudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC0xLDkgKzEsOSBAQAogVGVzdCBidWcgMTMxNDEgOiBYTUxIdHRwUmVxdWVzdCBz
aG91bGQgc2V0IHJlYWR5U3RhdGUgdG8gMCBhZnRlciBhYm9ydCgpCiAKLVNob3VsZCBzZWUgIlBB
U1MiIGZvdXIgdGltZXM6CitVcGRhdGVkIGZvciBidWcgMTY5ODk6IEFkZCBzZW5kKCkgZmxhZyBj
aGVja3MgaW4gWG1sSHR0cFJlcXVlc3QKKworU2hvdWxkIHNlZSAiUEFTUyIgdHdvIHRpbWVzOgog
Ci1QQVNTCi1QQVNTCiBQQVNTCiBQQVNTCiAKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMv
eG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtYWJvcnQtcmVhZHlTdGF0ZS1zaG91bGROb3RE
aXNwYXRjaEV2ZW50Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94
bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVzdC1hYm9ydC1yZWFkeVN0YXRlLXNob3VsZE5vdERp
c3BhdGNoRXZlbnQuaHRtbAkocmV2aXNpb24gMjk5NTUpCShmcm9tIExheW91dFRlc3RzL2h0dHAv
dGVzdHMveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtYWJvcnQtcmVhZHlTdGF0ZS5odG1s
OjI5OTU1KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC94bWxodHRw
cmVxdWVzdC1hYm9ydC1yZWFkeVN0YXRlLXNob3VsZE5vdERpc3BhdGNoRXZlbnQuaHRtbAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDY3IEBACis8aHRtbD4KKzxoZWFkPjwvaGVhZD4KKzxib2R5
PgorCis8cD5UZXN0IGJ1ZyAxMzE0MSA6IFhNTEh0dHBSZXF1ZXN0IHNob3VsZCBzZXQgcmVhZHlT
dGF0ZSB0byAwIGFmdGVyIGFib3J0KCkgPC9wPgorPHA+U2hvdWxkIHNlZSAiUEFTUyIgZm91ciB0
aW1lczo8L3A+Cis8ZGl2IGlkPSJhbnMiPjwvZGl2PgorCis8c2NyaXB0IHR5cGU9InRleHQvamF2
YXNjcmlwdCI+CitmdW5jdGlvbiBsb2cobWVzc2FnZSkgeworICAgIGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJhbnMiKS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShtZXNzYWdl
KSk7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFucyIpLmFwcGVuZENoaWxkKGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoImJyIikpOworfQorCisvLyBVc2VkIHRvIGRldGVjdCBpZiBhIHJl
YWR5c3RhdGUgZXZlbnQgaXMgZGlzcGF0Y2hlZAorZnVuY3Rpb24gY2F0Y2hSZWFkeXN0YXRlRXZl
bnRBYm9ydCgpIHsKKyAgICBsb2coIkZBSUxFRCAocmVhZHlzdGF0ZSBldmVudCBzZW5kKSIpOwor
fQorCitmdW5jdGlvbiB0ZXN0KG51bSkKK3sKKyAgICB2YXIgeGhyOworCisgICAgaWYgKHdpbmRv
dy5YTUxIdHRwUmVxdWVzdCkgeworICAgICAgICB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsK
KyAgICB9IGVsc2UgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgeGhyID0gbmV3IEFjdGl2
ZVhPYmplY3QoIk1zeG1sMi5YTUxIVFRQIik7CisgICAgICAgIH0gY2F0Y2ggKGV4KSB7CisgICAg
ICAgICAgICB4aHIgPSBuZXcgQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTEhUVFAiKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gbnVtKSB7CisgICAgICAgICAgICAr
K2ZpbmlzaGVkVGVzdHM7CisgICAgICAgICAgICB0aGlzLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGNh
dGNoUmVhZHlzdGF0ZUV2ZW50QWJvcnQ7CisgICAgICAgICAgICB0aGlzLmFib3J0KCk7CisgICAg
ICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09IDApCisgICAgICAgICAgICAgICAgbG9nKCJQ
QVNTIik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbG9nKCJGQUlMRUQiKTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGZpbmlzaGVkVGVzdHMgPT0gNCAmJiB3
aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJv
bGxlci5ub3RpZnlEb25lKCk7CisgICAgfQorCisgICAgeGhyLm9wZW4oIkdFVCIsICJyZXNvdXJj
ZXMvMTI1MS5odG1sIiwgdHJ1ZSk7CisgICAgaWYgKG51bSAhPSAxKQorICAgICAgICB4aHIuc2Vu
ZChudWxsKTsKK30KKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci53YWl0VW50aWxEb25lKCk7Cit9CisKK3ZhciBmaW5pc2hlZFRlc3RzID0gMDsKKworZm9yIChp
ID0gMTsgaSA8IDU7IGkrKykgeworICAgIHRlc3QoaSk7Cit9CisKKzwvc2NyaXB0PgorPC9ib2R5
PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC94
bWxodHRwcmVxdWVzdC1hYm9ydC1yZWFkeVN0YXRlLXNob3VsZE5vdERpc3BhdGNoRXZlbnQuaHRt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3ht
bGh0dHByZXF1ZXN0LWFib3J0LXJlYWR5U3RhdGUtc2hvdWxkTm90RGlzcGF0Y2hFdmVudC5odG1s
CShyZXZpc2lvbiAyOTk1NSkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVl
c3QveG1saHR0cHJlcXVlc3QtYWJvcnQtcmVhZHlTdGF0ZS1zaG91bGROb3REaXNwYXRjaEV2ZW50
Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTMsNyArMyw4IEBACiA8Ym9keT4KIAogPHA+VGVzdCBi
dWcgMTMxNDEgOiBYTUxIdHRwUmVxdWVzdCBzaG91bGQgc2V0IHJlYWR5U3RhdGUgdG8gMCBhZnRl
ciBhYm9ydCgpIDwvcD4KLTxwPlNob3VsZCBzZWUgIlBBU1MiIGZvdXIgdGltZXM6PC9wPgorPHA+
VXBkYXRlZCBmb3IgYnVnIDE2OTg5OiBBZGQgc2VuZCgpIGZsYWcgY2hlY2tzIGluIFhtbEh0dHBS
ZXF1ZXN0IDwvcD4KKzxwPlNob3VsZCBzZWUgIlBBU1MiIHR3byB0aW1lczo8L3A+CiA8ZGl2IGlk
PSJhbnMiPjwvZGl2PgogCiA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CkBAIC0xNyw3
ICsxOCw3IEBAIGZ1bmN0aW9uIGNhdGNoUmVhZHlzdGF0ZUV2ZW50QWJvcnQoKSB7CiAgICAgbG9n
KCJGQUlMRUQgKHJlYWR5c3RhdGUgZXZlbnQgc2VuZCkiKTsKIH0KIAotZnVuY3Rpb24gdGVzdChu
dW0pCitmdW5jdGlvbiB0ZXN0QWJvcnREb05vdERpc3BhdGNoRXZlbnQobnVtKQogewogICAgIHZh
ciB4aHI7CiAKQEAgLTQyLDExICs0MywxNCBAQCBmdW5jdGlvbiB0ZXN0KG51bSkKICAgICAgICAg
ICAgICAgICBsb2coIkZBSUxFRCIpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAo
ZmluaXNoZWRUZXN0cyA9PSA0ICYmIHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAg
ICAgaWYgKGZpbmlzaGVkVGVzdHMgPT0gYWJvcnRUb0RvLmxlbmd0aCAmJiB3aW5kb3cubGF5b3V0
VGVzdENvbnRyb2xsZXIpCiAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlE
b25lKCk7CiAgICAgfQogCiAgICAgeGhyLm9wZW4oIkdFVCIsICJyZXNvdXJjZXMvMTI1MS5odG1s
IiwgdHJ1ZSk7CisKKyAgICAvLyBXZSB3YW50IHRvIGJlIGFibGUgdG8gdGVzdCBpbiB0aGUgT1BF
TkVEIHN0YXRlIHdpdGggdGhlIHNlbmQoKSBmbGFnIHRvIGZhbHNlCisgICAgLy8gc28gZG8gbm90
IGNhbGwgc2VuZCBpbiB0aGF0IGNhc2UKICAgICBpZiAobnVtICE9IDEpCiAgICAgICAgIHhoci5z
ZW5kKG51bGwpOwogfQpAQCAtNTgsOSArNjIsMTAgQEAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29u
dHJvbGxlcikgewogCiB2YXIgZmluaXNoZWRUZXN0cyA9IDA7CiAKLWZvciAoaSA9IDE7IGkgPCA1
OyBpKyspIHsKLSAgICB0ZXN0KGkpOwotfQordmFyIGFib3J0VG9EbyA9IFsnMScsICc0J107CisK
K2ZvciAoaSA9IDA7IGkgPCBhYm9ydFRvRG8ubGVuZ3RoOyBpKyspCisgICAgdGVzdEFib3J0RG9O
b3REaXNwYXRjaEV2ZW50KGFib3J0VG9Eb1tpXSk7CiAKIDwvc2NyaXB0PgogPC9ib2R5PgpJbmRl
eDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVzdC1h
Ym9ydC1yZWFkeVN0YXRlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy94bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVzdC1hYm9ydC1yZWFkeVN0YXRlLmh0bWwJKHJl
dmlzaW9uIDI5OTgzKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC94
bWxodHRwcmVxdWVzdC1hYm9ydC1yZWFkeVN0YXRlLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTEs
NjcgKzAsMCBAQAotPGh0bWw+Ci08aGVhZD48L2hlYWQ+Ci08Ym9keT4KLQotPHA+VGVzdCBidWcg
MTMxNDEgOiBYTUxIdHRwUmVxdWVzdCBzaG91bGQgc2V0IHJlYWR5U3RhdGUgdG8gMCBhZnRlciBh
Ym9ydCgpIDwvcD4KLTxwPlNob3VsZCBzZWUgIlBBU1MiIGZvdXIgdGltZXM6PC9wPgotPGRpdiBp
ZD0iYW5zIj48L2Rpdj4KLQotPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotZnVuY3Rp
b24gbG9nKG1lc3NhZ2UpIHsKLSAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYW5zIikuYXBw
ZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobWVzc2FnZSkpOwotICAgIGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJhbnMiKS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCJiciIpKTsKLX0KLQotLy8gVXNlZCB0byBkZXRlY3QgaWYgYSByZWFkeXN0YXRlIGV2ZW50IGlz
IGRpc3BhdGNoZWQKLWZ1bmN0aW9uIGNhdGNoUmVhZHlzdGF0ZUV2ZW50QWJvcnQoKSB7Ci0gICAg
bG9nKCJGQUlMRUQgKHJlYWR5c3RhdGUgZXZlbnQgc2VuZCkiKTsKLX0KLQotZnVuY3Rpb24gdGVz
dChudW0pCi17Ci0gICAgdmFyIHhocjsKLQotICAgIGlmICh3aW5kb3cuWE1MSHR0cFJlcXVlc3Qp
IHsKLSAgICAgICAgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHhociA9IG5ldyBBY3RpdmVYT2JqZWN0KCJNc3htbDIu
WE1MSFRUUCIpOwotICAgICAgICB9IGNhdGNoIChleCkgewotICAgICAgICAgICAgeGhyID0gbmV3
IEFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxIVFRQIik7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gKCkgewotICAgICAgICBpZiAo
dGhpcy5yZWFkeVN0YXRlID09IG51bSkgewotICAgICAgICAgICAgKytmaW5pc2hlZFRlc3RzOwot
ICAgICAgICAgICAgdGhpcy5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBjYXRjaFJlYWR5c3RhdGVFdmVu
dEFib3J0OwotICAgICAgICAgICAgdGhpcy5hYm9ydCgpOwotICAgICAgICAgICAgaWYgKHRoaXMu
cmVhZHlTdGF0ZSA9PSAwKQotICAgICAgICAgICAgICAgIGxvZygiUEFTUyIpOwotICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIGxvZygiRkFJTEVEIik7Ci0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIGlmIChmaW5pc2hlZFRlc3RzID09IDQgJiYgd2luZG93LmxheW91dFRlc3RD
b250cm9sbGVyKQotICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgp
OwotICAgIH0KLQotICAgIHhoci5vcGVuKCJHRVQiLCAicmVzb3VyY2VzLzEyNTEuaHRtbCIsIHRy
dWUpOwotICAgIGlmIChudW0gIT0gMSkKLSAgICAgICAgeGhyLnNlbmQobnVsbCk7Ci19Ci0KLWlm
ICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKLSAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci5kdW1wQXNUZXh0KCk7Ci0gICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgp
OwotfQotCi12YXIgZmluaXNoZWRUZXN0cyA9IDA7Ci0KLWZvciAoaSA9IDE7IGkgPCA1OyBpKysp
IHsKLSAgICB0ZXN0KGkpOwotfQotCi08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KSW5kZXg6
IExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtdGVz
dC1zZW5kLWZsYWctZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAv
dGVzdHMveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtdGVzdC1zZW5kLWZsYWctZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVx
dWVzdC94bWxodHRwcmVxdWVzdC10ZXN0LXNlbmQtZmxhZy1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNyBAQAorVGVzdCBidWcgMTY5ODkgOiBBZGQgc2VuZCgpIGZsYWcgY2hl
Y2tzIGluIFhtbEh0dHBSZXF1ZXN0CisKK1lvdSBzaG91bGQgc2VlIFBBU1MgdHdvIHRpbWVzCisK
K1BBU1MKK1BBU1MKKwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVz
dC94bWxodHRwcmVxdWVzdC10ZXN0LXNlbmQtZmxhZy5odG1sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtdGVzdC1zZW5k
LWZsYWcuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0
cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtdGVzdC1zZW5kLWZsYWcuaHRtbAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw2NCBAQAorPGh0bWw+Cis8aGVhZD48L2hlYWQ+Cis8Ym9keT4KKworPHA+IFRl
c3QgYnVnIDE2OTg5IDogQWRkIHNlbmQoKSBmbGFnIGNoZWNrcyBpbiBYbWxIdHRwUmVxdWVzdCA8
L3A+Cis8cD4gWW91IHNob3VsZCBzZWUgUEFTUyB0d28gdGltZXMgPC9wPgorCis8ZGl2IGlkPSJh
bnMiPjwvZGl2PgorCis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CitmdW5jdGlvbiBs
b2cobWVzc2FnZSkgeworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhbnMiKS5hcHBlbmRD
aGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShtZXNzYWdlKSk7CisgICAgZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoImFucyIpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJy
IikpOworfQorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRl
c3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKwordmFyIHhocjsKKworaWYgKHdpbmRvdy5YTUxI
dHRwUmVxdWVzdCkgeworICAgIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworfSBlbHNlIHsK
KyAgICB0cnkgeworICAgICAgICB4aHIgPSBuZXcgQWN0aXZlWE9iamVjdCgiTXN4bWwyLlhNTEhU
VFAiKTsKKyAgICB9IGNhdGNoIChleCkgeworICAgICAgICB4aHIgPSBuZXcgQWN0aXZlWE9iamVj
dCgiTWljcm9zb2Z0LlhNTEhUVFAiKTsKKyAgICB9Cit9CisKKy8vIEZpcnN0IHRlc3QgOiB0ZXN0
IG9wZW4gbWV0aG9kIHNlbmQoKSBmbGFnIGNoZWNrCit4aHIub3BlbigiR0VUIiwgInJlc291cmNl
cy9lbmRsZXNzeG1sLnBocCIsIHRydWUpOworeGhyLnNlbmQobnVsbCk7Cit0cnkgeworICAgIGlm
ICh4aHIucmVhZHlTdGF0ZSA9PSAxKQorICAgICAgICB4aHIuc2VuZChudWxsKTsKKyAgICBsb2co
IkZBSUxFRCIpOworfSBjYXRjaCAoZSkgeworICAgIC8vIENhbGwgYWJvcnQgdG8gcHJldmVudCB0
cmlnZ2VyaW5nIHNvbWUgcmVhZHlzdGF0ZSBldmVudHMKKyAgICB4aHIuYWJvcnQoKTsKKyAgICBs
b2coIlBBU1MiKTsKK30KKworLy8gU2Vjb25kIHRlc3QgOiB0ZXN0IHNldFJlc3BvbnNlSGVhZGVy
IG1ldGhvZCBzZW5kKCkgZmxhZyBjaGVjaworeGhyLm9wZW4oIkdFVCIsICJyZXNvdXJjZXMvZW5k
bGVzc3htbC5waHAiLCB0cnVlKTsKK3hoci5zZXRSZXF1ZXN0SGVhZGVyKCJUZXN0MSIsICJUZXN0
MSIpOworeGhyLnNlbmQobnVsbCk7Cit0cnkgeworICAgIC8vIG1ha2VzIHN1cmUgcmVhZHlTdGF0
ZSBpcyBvcGVuZWQgKGJ1ZyBpbiBPcGVyYSkKKyAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT0gMSkK
KyAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoIlRlc3QiLCAiVGVzdCIpOworICAgIGxvZygi
RkFJTEVEIik7Cit9IGNhdGNoIChlKSB7CisgICAgLy8gQ2FsbCBhYm9ydCB0byBwcmV2ZW50IHRy
aWdnZXJpbmcgc29tZSByZWFkeXN0YXRlIGV2ZW50cworICAgIHhoci5hYm9ydCgpOworICAgIGxv
ZygiUEFTUyIpOworfQorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8
L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18933</attachid>
            <date>2008-02-05 03:06:36 -0800</date>
            <delta_ts>2008-02-05 11:44:48 -0800</delta_ts>
            <desc>Correct mistakes in the ChangeLog</desc>
            <filename>bug16989-loader-updated.patch</filename>
            <type>text/plain</type>
            <size>24608</size>
            <attacher name="Julien Chaffraix">jchaffraix</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzMDAwMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzEgQEAKKzIwMDgtMDItMDQgIEp1bGllbiBDaGFmZnJhaXggIDxqdWxpZW4uY2hh
ZmZyYWl4QGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBidWcgMTY5ODkgOiBBZGQgc2VuZCgpIGZsYWcgY2hlY2tzIGluIFhtbEh0dHBS
ZXF1ZXN0CisKKyAgICAgICAgU3BsaXR0ZWQgWG1sSHR0cFJlcXVlc3Q6OmFib3J0IGludG8gYWJv
cnQgKGNhbGxlZCBmcm9tIEphdmFTY3JpcHQpIGFuZCBpbnRlcm5hbEFib3J0IHRoYXQKKyAgICAg
ICAgcGVyZm9ybSB0aGUgY2FuY2VsbGF0aW9uIGFuZCBpcyBjYWxsZWQgbWFpbmx5IGZyb20gaW50
ZXJuYWwgbWV0aG9kcy4KKworICAgICAgICBUZXN0czogaHR0cC90ZXN0cy94bWxodHRwcmVxdWVz
dC94bWxodHRwcmVxdWVzdC1hYm9ydC1yZWFkeVN0YXRlLXNob3VsZERpc3BhdGNoRXZlbnQuaHRt
bAorICAgICAgICAgICAgICAgaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVz
dC1hYm9ydC1yZWFkeVN0YXRlLXNob3VsZE5vdERpc3BhdGNoRXZlbnQuaHRtbAorICAgICAgICAg
ICAgICAgaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVzdC10ZXN0LXNlbmQt
ZmxhZy5odG1sCisKKyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6Om9wZW4pOiBOb3cgY2FsbCBpbnRlcm5hbEFib3J0KCkg
YW5kIG1vdmVkIHJlYWR5U3RhdGUgY2hhbmdlIGludG8gbWV0aG9kCisgICAgICAgIChXZWJDb3Jl
OjpYTUxIdHRwUmVxdWVzdDo6c2VuZCk6IEFkZGVkIG1fbG9hZGVyIGNoZWNrCisgICAgICAgIChX
ZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6YWJvcnQpOiBOb3cgdXBkYXRlIHJlYWR5U3RhdGUgYW5k
IGNsZWFyIHRoZSByZXF1ZXN0IGhlYWRlcnMgYXMgc3BlY2lmaWVkCisgICAgICAgIGluIHRoZSBz
cGVjCisKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjppbnRlcm5hbEFib3J0KTog
UGVyZm9ybSBjYW5jZWxsYXRpb24gaW50ZXJuYWwgb3BlcmF0aW9ucyAobm8gcmVhZHlTdGF0ZSB1
cGRhdGUpCisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6c2V0UmVxdWVzdEhlYWRl
cik6IEFkZGVkIG1fbG9hZGVyIGNoZWNrCisKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1
ZXN0Ojpwcm9jZXNzU3luY0xvYWRSZXN1bHRzKTogTm93IGNhbGwgaW50ZXJuYWxBYm9ydCgpIGlu
c3RlYWQgb2YgYWJvcnQoKQorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OndpbGxT
ZW5kUmVxdWVzdCk6IERpdHRvCisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6Y2Fu
Y2VsUmVxdWVzdHMpOiBEaXR0bworICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OmRl
dGFjaFJlcXVlc3RzKTogRGl0dG8KKyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3QuaDogQWRk
ZWQgdGhlIHByaXZhdGUgaW50ZXJuYWxBYm9ydCBtZXRob2QKKwogMjAwOC0wMi0wNSAgTWFyayBS
b3dlICA8bXJvd2VAYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCB0aGUgd3hXaWRnZXQgTWFjIGJ1
aWxkIGJ5IGF2b2lkaW5nIHVzaW5nIElDVSBmdW5jdGlvbnMgdGhhdCB3ZXJlIGFkZGVkIGFmdGVy
IElDVSAzLjIuCkluZGV4OiBXZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCShyZXZpc2lvbiAzMDAwMikKKysr
IFdlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMyLDcg
KzMzMiw4IEBAIGJvb2wgWE1MSHR0cFJlcXVlc3Q6OnVybE1hdGNoZXNEb2N1bWVudEQKIAogdm9p
ZCBYTUxIdHRwUmVxdWVzdDo6b3Blbihjb25zdCBTdHJpbmcmIG1ldGhvZCwgY29uc3QgS1VSTCYg
dXJsLCBib29sIGFzeW5jLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBhYm9ydCgpOworICAg
IGludGVybmFsQWJvcnQoKTsKKyAgICBtX3N0YXRlID0gVW5pbml0aWFsaXplZDsKICAgICBtX2Fi
b3J0ZWQgPSBmYWxzZTsKIAogICAgIC8vIGNsZWFyIHN0dWZmIGZyb20gcG9zc2libGUgcHJldmlv
dXMgbG9hZApAQCAtMzc3LDYgKzM3OCw3IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6Om9wZW4oY29u
c3QgU3RyaW5nJiAKIAogICAgIG1fYXN5bmMgPSBhc3luYzsKIAorICAgIEFTU0VSVCghbV9sb2Fk
ZXIpOwogICAgIGNoYW5nZVN0YXRlKE9wZW4pOwogfQogCkBAIC00MDIsMjAgKzQwNCwxNiBAQCB2
b2lkIFhNTEh0dHBSZXF1ZXN0OjpzZW5kKGNvbnN0IFN0cmluZyYgCiAgICAgaWYgKCFtX2RvYykK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fc3RhdGUgIT0gT3BlbikgeworICAgIGlmICht
X3N0YXRlICE9IE9wZW4gfHwgbV9sb2FkZXIpIHsKICAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRF
X0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgCi0gICAgLy8gRklYTUU6IFNob3VsZCB0
aGlzIGFib3J0IG9yIHJhaXNlIGFuIGV4Y2VwdGlvbiBpbnN0ZWFkIGlmIHdlIGFscmVhZHkgaGF2
ZSBhIG1fbG9hZGVyIGdvaW5nPwotICAgIGlmIChtX2xvYWRlcikKLSAgICAgICAgcmV0dXJuOwog
CiAgICAgbV9hYm9ydGVkID0gZmFsc2U7CiAKICAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCht
X3VybCk7CiAgICAgcmVxdWVzdC5zZXRIVFRQTWV0aG9kKG1fbWV0aG9kKTsKLSAgICAKKwogICAg
IGlmICghYm9keS5pc051bGwoKSAmJiBtX21ldGhvZCAhPSAiR0VUIiAmJiBtX21ldGhvZCAhPSAi
SEVBRCIgJiYgKG1fdXJsLnByb3RvY29sKCkubG93ZXIoKSA9PSAiaHR0cCIgfHwgbV91cmwucHJv
dG9jb2woKS5sb3dlcigpID09ICJodHRwcyIpKSB7CiAgICAgICAgIFN0cmluZyBjb250ZW50VHlw
ZSA9IGdldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIpOwogICAgICAgICBpZiAoY29udGVu
dFR5cGUuaXNFbXB0eSgpKSB7CkBAIC00ODUsMTAgKzQ4MywyOCBAQCB2b2lkIFhNTEh0dHBSZXF1
ZXN0OjpzZW5kKGNvbnN0IFN0cmluZyYgCiAKIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmFib3J0KCkK
IHsKKyAgICBib29sIHNlbmRGbGFnID0gbV9sb2FkZXI7CisKKyAgICBpbnRlcm5hbEFib3J0KCk7
CisKKyAgICAvLyBDbGVhciBoZWFkZXJzIGFzIHJlcXVpcmVkIGJ5IHRoZSBzcGVjCisgICAgbV9y
ZXF1ZXN0SGVhZGVycy5jbGVhcigpOworCisgICAgaWYgKChtX3N0YXRlIDw9IE9wZW4gJiYgIXNl
bmRGbGFnKSB8fCBtX3N0YXRlID09IExvYWRlZCkKKyAgICAgICAgbV9zdGF0ZSA9IFVuaW5pdGlh
bGl6ZWQ7CisgICAgIGVsc2UgeworICAgICAgICBBU1NFUlQoIW1fbG9hZGVyKTsKKyAgICAgICAg
Y2hhbmdlU3RhdGUoTG9hZGVkKTsKKyAgICAgICAgbV9zdGF0ZSA9IFVuaW5pdGlhbGl6ZWQ7Cisg
ICAgfQorfQorCit2b2lkIFhNTEh0dHBSZXF1ZXN0OjppbnRlcm5hbEFib3J0KCkKK3sKICAgICBi
b29sIGhhZExvYWRlciA9IG1fbG9hZGVyOwogCiAgICAgbV9hYm9ydGVkID0gdHJ1ZTsKLSAgICAK
KwogICAgIGlmIChoYWRMb2FkZXIpIHsKICAgICAgICAgbV9sb2FkZXItPmNhbmNlbCgpOwogICAg
ICAgICBtX2xvYWRlciA9IDA7CkBAIC00OTgsOCArNTE0LDYgQEAgdm9pZCBYTUxIdHRwUmVxdWVz
dDo6YWJvcnQoKQogCiAgICAgaWYgKGhhZExvYWRlcikKICAgICAgICAgZHJvcFByb3RlY3Rpb24o
KTsKLQotICAgIG1fc3RhdGUgPSBVbmluaXRpYWxpemVkOwogfQogCiB2b2lkIFhNTEh0dHBSZXF1
ZXN0Ojpkcm9wUHJvdGVjdGlvbigpICAgICAgICAKQEAgLTUzMCw3ICs1NDQsNyBAQCB2b2lkIFhN
TEh0dHBSZXF1ZXN0OjpvdmVycmlkZU1JTUVUeXBlKGNvCiAgICAgCiB2b2lkIFhNTEh0dHBSZXF1
ZXN0OjpzZXRSZXF1ZXN0SGVhZGVyKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2
YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgaWYgKG1fc3RhdGUgIT0gT3Blbikgewor
ICAgIGlmIChtX3N0YXRlICE9IE9wZW4gfHwgbV9sb2FkZXIpIHsKICAgICAgICAgU2V0dGluZ3Mq
IHNldHRpbmdzID0gbV9kb2MgPyBtX2RvYy0+c2V0dGluZ3MoKSA6IDA7CiAgICAgICAgIGlmIChz
ZXR0aW5ncyAmJiBzZXR0aW5ncy0+dXNlc0Rhc2hib2FyZEJhY2t3YXJkQ29tcGF0aWJpbGl0eU1v
ZGUoKSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTY1Miw3ICs2NjYsNyBAQCBTdHJpbmcgWE1M
SHR0cFJlcXVlc3Q6OmdldFN0YXR1c1RleHQoRXhjCiB2b2lkIFhNTEh0dHBSZXF1ZXN0Ojpwcm9j
ZXNzU3luY0xvYWRSZXN1bHRzKGNvbnN0IFZlY3RvcjxjaGFyPiYgZGF0YSwgY29uc3QgUmVzb3Vy
Y2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7CiAgICAgaWYgKCF1cmxNYXRjaGVzRG9jdW1lbnREb21h
aW4ocmVzcG9uc2UudXJsKCkpKSB7Ci0gICAgICAgIGFib3J0KCk7CisgICAgICAgIGludGVybmFs
QWJvcnQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNzA1LDcgKzcxOSw3IEBAIHZv
aWQgWE1MSHR0cFJlcXVlc3Q6OmRpZEZpbmlzaExvYWRpbmcoU3UKIHZvaWQgWE1MSHR0cFJlcXVl
c3Q6OndpbGxTZW5kUmVxdWVzdChTdWJyZXNvdXJjZUxvYWRlciosIFJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkKIHsKICAg
ICBpZiAoIXVybE1hdGNoZXNEb2N1bWVudERvbWFpbihyZXF1ZXN0LnVybCgpKSkKLSAgICAgICAg
YWJvcnQoKTsKKyAgICAgICAgaW50ZXJuYWxBYm9ydCgpOwogfQogCiB2b2lkIFhNTEh0dHBSZXF1
ZXN0OjpkaWRSZWNlaXZlUmVzcG9uc2UoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBSZXNvdXJj
ZVJlc3BvbnNlJiByZXNwb25zZSkKQEAgLTc2OCw3ICs3ODIsNyBAQCB2b2lkIFhNTEh0dHBSZXF1
ZXN0OjpjYW5jZWxSZXF1ZXN0cyhEb2N1CiAgICAgUmVxdWVzdHNTZXQgY29weSA9ICpyZXF1ZXN0
czsKICAgICBSZXF1ZXN0c1NldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY29weS5lbmQoKTsKICAg
ICBmb3IgKFJlcXVlc3RzU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IGNvcHkuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KQotICAgICAgICAoKml0KS0+YWJvcnQoKTsKKyAgICAgICAgKCppdCktPmlu
dGVybmFsQWJvcnQoKTsKIH0KIAogdm9pZCBYTUxIdHRwUmVxdWVzdDo6ZGV0YWNoUmVxdWVzdHMo
RG9jdW1lbnQqIG1fZG9jKQpAQCAtNzgwLDcgKzc5NCw3IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6
OmRldGFjaFJlcXVlc3RzKERvY3UKICAgICBSZXF1ZXN0c1NldDo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gcmVxdWVzdHMtPmVuZCgpOwogICAgIGZvciAoUmVxdWVzdHNTZXQ6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gcmVxdWVzdHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAoKml0
KS0+bV9kb2MgPSAwOwotICAgICAgICAoKml0KS0+YWJvcnQoKTsKKyAgICAgICAgKCppdCktPmlu
dGVybmFsQWJvcnQoKTsKICAgICB9CiAgICAgZGVsZXRlIHJlcXVlc3RzOwogfQpJbmRleDogV2Vi
Q29yZS94bWwvWE1MSHR0cFJlcXVlc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3htbC9YTUxI
dHRwUmVxdWVzdC5oCShyZXZpc2lvbiAzMDAwMikKKysrIFdlYkNvcmUveG1sL1hNTEh0dHBSZXF1
ZXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMCw2ICsxMjAsNyBAQCBwcml2YXRlOgogICAgIHZv
aWQgY2hhbmdlU3RhdGUoWE1MSHR0cFJlcXVlc3RTdGF0ZSBuZXdTdGF0ZSk7CiAgICAgdm9pZCBj
YWxsUmVhZHlTdGF0ZUNoYW5nZUxpc3RlbmVyKCk7CiAgICAgdm9pZCBkcm9wUHJvdGVjdGlvbigp
OworICAgIHZvaWQgaW50ZXJuYWxBYm9ydCgpOwogCiAgICAgRG9jdW1lbnQqIG1fZG9jOwogCklu
ZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCShyZXZpc2lvbiAzMDAwMikKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDA4LTAyLTA0ICBKdWxpZW4gQ2hhZmZyYWl4ICA8
anVsaWVuLmNoYWZmcmFpeEBnbWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgYnVnIDE2OTg5IDogQWRkIHNlbmQoKSBmbGFnIGNoZWNrcyBp
biBYbWxIdHRwUmVxdWVzdAorCisgICAgICAgIC0gU3BsaXR0ZWQgeG1saHR0cHJlcXVlc3QtYWJv
cnQtcmVhZHlzdGF0ZSBpbiAyIHRlc3QgY2FzZXMgKHhtbGh0dHByZXF1ZXN0LWFib3J0LXJlYWR5
c3RhdGUtc2hvdWxkRGlzcGF0Y2hFdmVudCBhbmQgeG1saHR0cHJlcXVlc3QtYWJvcnQtcmVhZHlz
dGF0ZS1zaG91bGROb3REaXNwYXRjaEV2ZW50KQorCisgICAgICAgIC0gQWRkZWQgdGVzdCBjYXNl
IGZvciB0aGUgMiBzZW5kKCkgZmxhZyBjaGVja3MgaW4gWG1sSHR0cFJlcXVlc3Q6OnNlbmQgYW5k
IFhtbEh0dHBSZXF1ZXN0OjpzZXRSZXF1ZXN0SGVhZGVyCisKKyAgICAgICAgKiBodHRwL3Rlc3Rz
L3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LWFib3J0LXJlYWR5U3RhdGUtZXhwZWN0ZWQu
dHh0OiBSZW1vdmVkLgorICAgICAgICAqIGh0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QveG1saHR0
cHJlcXVlc3QtYWJvcnQtcmVhZHlTdGF0ZS1zaG91bGREaXNwYXRjaEV2ZW50LWV4cGVjdGVkLnR4
dDogQ29waWVkIGZyb20gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC94bWxo
dHRwcmVxdWVzdC1hYm9ydC1yZWFkeVN0YXRlLWV4cGVjdGVkLnR4dC4KKyAgICAgICAgKiBodHRw
L3Rlc3RzL3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LWFib3J0LXJlYWR5U3RhdGUtc2hv
dWxkRGlzcGF0Y2hFdmVudC5odG1sOiBDb3BpZWQgZnJvbSBMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LWFib3J0LXJlYWR5U3RhdGUuaHRtbC4KKyAg
ICAgICAgKiBodHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LWFib3J0LXJl
YWR5U3RhdGUtc2hvdWxkTm90RGlzcGF0Y2hFdmVudC1leHBlY3RlZC50eHQ6IENvcGllZCBmcm9t
IExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtYWJv
cnQtcmVhZHlTdGF0ZS1leHBlY3RlZC50eHQuCisgICAgICAgICogaHR0cC90ZXN0cy94bWxodHRw
cmVxdWVzdC94bWxodHRwcmVxdWVzdC1hYm9ydC1yZWFkeVN0YXRlLXNob3VsZE5vdERpc3BhdGNo
RXZlbnQuaHRtbDogQ29waWVkIGZyb20gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVx
dWVzdC94bWxodHRwcmVxdWVzdC1hYm9ydC1yZWFkeVN0YXRlLmh0bWwuCisgICAgICAgICogaHR0
cC90ZXN0cy94bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVzdC1hYm9ydC1yZWFkeVN0YXRlLmh0
bWw6IFJlbW92ZWQuCisgICAgICAgICogaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC94bWxodHRw
cmVxdWVzdC10ZXN0LXNlbmQtZmxhZy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0
dHAvdGVzdHMveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtdGVzdC1zZW5kLWZsYWcuaHRt
bDogQWRkZWQuCisKIDIwMDgtMDItMDQgIENhbWVyb24gWndhcmljaCAgPGN3endhcmljaEB1d2F0
ZXJsb28uY2E+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgT2xpdmVyIEh1bnQuCkluZGV4OiBMYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LWFib3J0LXJl
YWR5U3RhdGUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVz
dHMveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtYWJvcnQtcmVhZHlTdGF0ZS1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDMwMDAyKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRw
cmVxdWVzdC94bWxodHRwcmVxdWVzdC1hYm9ydC1yZWFkeVN0YXRlLWV4cGVjdGVkLnR4dAkod29y
a2luZyBjb3B5KQpAQCAtMSw5ICswLDAgQEAKLVRlc3QgYnVnIDEzMTQxIDogWE1MSHR0cFJlcXVl
c3Qgc2hvdWxkIHNldCByZWFkeVN0YXRlIHRvIDAgYWZ0ZXIgYWJvcnQoKQotCi1TaG91bGQgc2Vl
ICJQQVNTIiBmb3VyIHRpbWVzOgotCi1QQVNTCi1QQVNTCi1QQVNTCi1QQVNTCi0KSW5kZXg6IExh
eW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtYWJvcnQt
cmVhZHlTdGF0ZS1zaG91bGREaXNwYXRjaEV2ZW50LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LWFi
b3J0LXJlYWR5U3RhdGUtc2hvdWxkRGlzcGF0Y2hFdmVudC1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDI5OTU1KQkoZnJvbSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3htbGh0
dHByZXF1ZXN0LWFib3J0LXJlYWR5U3RhdGUtZXhwZWN0ZWQudHh0OjI5OTU1KQorKysgTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVzdC1hYm9ydC1yZWFk
eVN0YXRlLXNob3VsZERpc3BhdGNoRXZlbnQtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsOSBAQAorVGVzdCBidWcgMTMxNDEgOiBYTUxIdHRwUmVxdWVzdCBzaG91bGQgc2V0
IHJlYWR5U3RhdGUgdG8gMCBhZnRlciBhYm9ydCgpCisKK1Nob3VsZCBzZWUgIlBBU1MiIGZvdXIg
dGltZXM6CisKK1BBU1MKK1BBU1MKK1BBU1MKK1BBU1MKKwpJbmRleDogTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy94bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVzdC1hYm9ydC1yZWFkeVN0YXRlLXNo
b3VsZERpc3BhdGNoRXZlbnQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtYWJvcnQtcmVhZHlTdGF0
ZS1zaG91bGREaXNwYXRjaEV2ZW50LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMjk5NTUpCisrKyBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LWFib3J0
LXJlYWR5U3RhdGUtc2hvdWxkRGlzcGF0Y2hFdmVudC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTEsOSArMSwxMyBAQAogVGVzdCBidWcgMTMxNDEgOiBYTUxIdHRwUmVxdWVzdCBzaG91
bGQgc2V0IHJlYWR5U3RhdGUgdG8gMCBhZnRlciBhYm9ydCgpCiAKLVNob3VsZCBzZWUgIlBBU1Mi
IGZvdXIgdGltZXM6CitVcGRhdGVkIGZvciBidWcgMTY5ODk6IEFkZCBzZW5kKCkgZmxhZyBjaGVj
a3MgaW4gWG1sSHR0cFJlcXVlc3QKIAorU2hvdWxkIHNlZSAiUEFTUyAocmVhc3lTdGF0ZSBldmVu
dCBzZW5kKSIgJiAiUEFTUyIgKGluIHRoYXQgb3JkZXIpIHRocmVlIHRpbWVzOgorCitQQVNTIChy
ZWFkeXN0YXRlIGV2ZW50IHNlbmQpCiBQQVNTCitQQVNTIChyZWFkeXN0YXRlIGV2ZW50IHNlbmQp
CiBQQVNTCi1QQVNTCitQQVNTIChyZWFkeXN0YXRlIGV2ZW50IHNlbmQpCiBQQVNTCiAKSW5kZXg6
IExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtYWJv
cnQtcmVhZHlTdGF0ZS1zaG91bGREaXNwYXRjaEV2ZW50Lmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVzdC1hYm9ydC1y
ZWFkeVN0YXRlLXNob3VsZERpc3BhdGNoRXZlbnQuaHRtbAkocmV2aXNpb24gMjk5NTUpCShmcm9t
IExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtYWJv
cnQtcmVhZHlTdGF0ZS5odG1sOjI5OTU1KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxo
dHRwcmVxdWVzdC94bWxodHRwcmVxdWVzdC1hYm9ydC1yZWFkeVN0YXRlLXNob3VsZERpc3BhdGNo
RXZlbnQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY3IEBACis8aHRtbD4KKzxoZWFk
PjwvaGVhZD4KKzxib2R5PgorCis8cD5UZXN0IGJ1ZyAxMzE0MSA6IFhNTEh0dHBSZXF1ZXN0IHNo
b3VsZCBzZXQgcmVhZHlTdGF0ZSB0byAwIGFmdGVyIGFib3J0KCkgPC9wPgorPHA+U2hvdWxkIHNl
ZSAiUEFTUyIgZm91ciB0aW1lczo8L3A+Cis8ZGl2IGlkPSJhbnMiPjwvZGl2PgorCis8c2NyaXB0
IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CitmdW5jdGlvbiBsb2cobWVzc2FnZSkgeworICAgIGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJhbnMiKS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVU
ZXh0Tm9kZShtZXNzYWdlKSk7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFucyIpLmFw
cGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJyIikpOworfQorCisvLyBVc2VkIHRv
IGRldGVjdCBpZiBhIHJlYWR5c3RhdGUgZXZlbnQgaXMgZGlzcGF0Y2hlZAorZnVuY3Rpb24gY2F0
Y2hSZWFkeXN0YXRlRXZlbnRBYm9ydCgpIHsKKyAgICBsb2coIkZBSUxFRCAocmVhZHlzdGF0ZSBl
dmVudCBzZW5kKSIpOworfQorCitmdW5jdGlvbiB0ZXN0KG51bSkKK3sKKyAgICB2YXIgeGhyOwor
CisgICAgaWYgKHdpbmRvdy5YTUxIdHRwUmVxdWVzdCkgeworICAgICAgICB4aHIgPSBuZXcgWE1M
SHR0cFJlcXVlc3QoKTsKKyAgICB9IGVsc2UgeworICAgICAgICB0cnkgeworICAgICAgICAgICAg
eGhyID0gbmV3IEFjdGl2ZVhPYmplY3QoIk1zeG1sMi5YTUxIVFRQIik7CisgICAgICAgIH0gY2F0
Y2ggKGV4KSB7CisgICAgICAgICAgICB4aHIgPSBuZXcgQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0
LlhNTEhUVFAiKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHhoci5vbnJlYWR5c3RhdGVjaGFu
Z2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gbnVtKSB7
CisgICAgICAgICAgICArK2ZpbmlzaGVkVGVzdHM7CisgICAgICAgICAgICB0aGlzLm9ucmVhZHlz
dGF0ZWNoYW5nZSA9IGNhdGNoUmVhZHlzdGF0ZUV2ZW50QWJvcnQ7CisgICAgICAgICAgICB0aGlz
LmFib3J0KCk7CisgICAgICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09IDApCisgICAgICAg
ICAgICAgICAgbG9nKCJQQVNTIik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
bG9nKCJGQUlMRUQiKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGZpbmlzaGVk
VGVzdHMgPT0gNCAmJiB3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgfQorCisgICAgeGhyLm9wZW4o
IkdFVCIsICJyZXNvdXJjZXMvMTI1MS5odG1sIiwgdHJ1ZSk7CisgICAgaWYgKG51bSAhPSAxKQor
ICAgICAgICB4aHIuc2VuZChudWxsKTsKK30KKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlcikgeworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Cit9CisKK3ZhciBmaW5pc2hlZFRlc3Rz
ID0gMDsKKworZm9yIChpID0gMTsgaSA8IDU7IGkrKykgeworICAgIHRlc3QoaSk7Cit9CisKKzwv
c2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94
bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVzdC1hYm9ydC1yZWFkeVN0YXRlLXNob3VsZERpc3Bh
dGNoRXZlbnQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0
dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LWFib3J0LXJlYWR5U3RhdGUtc2hvdWxkRGlzcGF0Y2hF
dmVudC5odG1sCShyZXZpc2lvbiAyOTk1NSkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1s
aHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtYWJvcnQtcmVhZHlTdGF0ZS1zaG91bGREaXNwYXRj
aEV2ZW50Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTMsNyArMyw4IEBACiA8Ym9keT4KIAogPHA+
VGVzdCBidWcgMTMxNDEgOiBYTUxIdHRwUmVxdWVzdCBzaG91bGQgc2V0IHJlYWR5U3RhdGUgdG8g
MCBhZnRlciBhYm9ydCgpIDwvcD4KLTxwPlNob3VsZCBzZWUgIlBBU1MiIGZvdXIgdGltZXM6PC9w
PgorPHA+VXBkYXRlZCBmb3IgYnVnIDE2OTg5OiBBZGQgc2VuZCgpIGZsYWcgY2hlY2tzIGluIFht
bEh0dHBSZXF1ZXN0IDwvcD4KKzxwPlNob3VsZCBzZWUgIlBBU1MgKHJlYXN5U3RhdGUgZXZlbnQg
c2VuZCkiICYgIlBBU1MiIChpbiB0aGF0IG9yZGVyKSB0aHJlZSB0aW1lczo8L3A+CiA8ZGl2IGlk
PSJhbnMiPjwvZGl2PgogCiA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CkBAIC0xNCwx
MCArMTUsNDQgQEAgZnVuY3Rpb24gbG9nKG1lc3NhZ2UpIHsKIAogLy8gVXNlZCB0byBkZXRlY3Qg
aWYgYSByZWFkeXN0YXRlIGV2ZW50IGlzIGRpc3BhdGNoZWQKIGZ1bmN0aW9uIGNhdGNoUmVhZHlz
dGF0ZUV2ZW50QWJvcnQoKSB7Ci0gICAgbG9nKCJGQUlMRUQgKHJlYWR5c3RhdGUgZXZlbnQgc2Vu
ZCkiKTsKKyAgICBsb2coIlBBU1MgKHJlYWR5c3RhdGUgZXZlbnQgc2VuZCkiKTsKIH0KIAotZnVu
Y3Rpb24gdGVzdChudW0pCisvLyBDYWxsZWQgb25seSBmb3IgcmVhZHlTdGF0ZSA9PSAxCitmdW5j
dGlvbiB0ZXN0QWJvcnRXaXRoUmVhZHlTdGF0ZUV2ZW50TG9hZGluZygpCit7CisgICAgdmFyIHho
cjsKKworICAgIGlmICh3aW5kb3cuWE1MSHR0cFJlcXVlc3QpIHsKKyAgICAgICAgeGhyID0gbmV3
IFhNTEh0dHBSZXF1ZXN0KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAg
ICAgIHhociA9IG5ldyBBY3RpdmVYT2JqZWN0KCJNc3htbDIuWE1MSFRUUCIpOworICAgICAgICB9
IGNhdGNoIChleCkgeworICAgICAgICAgICAgeGhyID0gbmV3IEFjdGl2ZVhPYmplY3QoIk1pY3Jv
c29mdC5YTUxIVFRQIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBXZSB1c2UgYSBzbG93
IHBhZ2UgdG8gdGVzdCB0aGUgTE9BRElORyBzdGF0ZSB3aXRoIHRoZSBzZW5kKCkgZmxhZworICAg
IC8vIGFuZCB3ZSBkbyBub3QgY2F0Y2ggcmVhZHlTdGF0ZSBldmVudCBiZWZvcmUgc2VuZCBoYXMg
YmVlbiBjYWxsZWQKKyAgICB4aHIub3BlbigiR0VUIiwgInJlc291cmNlcy9lbmRsZXNzeG1sLnBo
cCIsIHRydWUpOworICAgIHhoci5zZW5kKG51bGwpOworCisgICAgKytmaW5pc2hlZFRlc3RzOwor
ICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBjYXRjaFJlYWR5c3RhdGVFdmVudEFib3J0Owor
ICAgIHhoci5hYm9ydCgpOworCisgICAgaWYgKHhoci5yZWFkeVN0YXRlID09IDApCisgICAgICAg
IGxvZygiUEFTUyIpOworICAgIGVsc2UKKyAgICAgICAgbG9nKCJGQUlMRUQiKTsKKworICAgIGlm
IChmaW5pc2hlZFRlc3RzID09IGFib3J0VG9Eby5sZW5ndGggJiYgd2luZG93LmxheW91dFRlc3RD
b250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9
CisKKy8vIENhbGxlZCB3aXRoIG51bSAhPSAxCitmdW5jdGlvbiB0ZXN0QWJvcnRXaXRoUmVhZHlT
dGF0ZUV2ZW50KG51bSkKIHsKICAgICB2YXIgeGhyOwogCkBAIC00MSwxNCArNzYsMTMgQEAgZnVu
Y3Rpb24gdGVzdChudW0pCiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgbG9nKCJG
QUlMRUQiKTsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKGZpbmlzaGVkVGVzdHMg
PT0gNCAmJiB3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisKKyAgICAgICAgaWYgKGZpbmlz
aGVkVGVzdHMgPT0gYWJvcnRUb0RvLmxlbmd0aCAmJiB3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xs
ZXIpCiAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CiAgICAg
fQogCiAgICAgeGhyLm9wZW4oIkdFVCIsICJyZXNvdXJjZXMvMTI1MS5odG1sIiwgdHJ1ZSk7Ci0g
ICAgaWYgKG51bSAhPSAxKQotICAgICAgICB4aHIuc2VuZChudWxsKTsKKyAgICB4aHIuc2VuZChu
dWxsKTsKIH0KIAogaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgewpAQCAtNTgsOSAr
OTIsMTMgQEAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgewogCiB2YXIgZmluaXNo
ZWRUZXN0cyA9IDA7CiAKLWZvciAoaSA9IDE7IGkgPCA1OyBpKyspIHsKLSAgICB0ZXN0KGkpOwot
fQordmFyIGFib3J0VG9EbyA9IFsnMicsICczJywgJzEnXTsKKworZm9yIChpID0gMDsgaSA8IGFi
b3J0VG9Eby5sZW5ndGg7IGkrKykKKyAgICBpZiAoYWJvcnRUb0RvW2ldID09IDEpCisgICAgICAg
IHRlc3RBYm9ydFdpdGhSZWFkeVN0YXRlRXZlbnRMb2FkaW5nKCk7CisgICAgZWxzZQorICAgICAg
ICB0ZXN0QWJvcnRXaXRoUmVhZHlTdGF0ZUV2ZW50KGFib3J0VG9Eb1tpXSk7CiAKIDwvc2NyaXB0
PgogPC9ib2R5PgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC94
bWxodHRwcmVxdWVzdC1hYm9ydC1yZWFkeVN0YXRlLXNob3VsZE5vdERpc3BhdGNoRXZlbnQtZXhw
ZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJl
cXVlc3QveG1saHR0cHJlcXVlc3QtYWJvcnQtcmVhZHlTdGF0ZS1zaG91bGROb3REaXNwYXRjaEV2
ZW50LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMjk5NTUpCShmcm9tIExheW91dFRlc3RzL2h0dHAv
dGVzdHMveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtYWJvcnQtcmVhZHlTdGF0ZS1leHBl
Y3RlZC50eHQ6Mjk5NTUpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0
L3htbGh0dHByZXF1ZXN0LWFib3J0LXJlYWR5U3RhdGUtc2hvdWxkTm90RGlzcGF0Y2hFdmVudC1l
eHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5IEBACitUZXN0IGJ1ZyAxMzE0
MSA6IFhNTEh0dHBSZXF1ZXN0IHNob3VsZCBzZXQgcmVhZHlTdGF0ZSB0byAwIGFmdGVyIGFib3J0
KCkKKworU2hvdWxkIHNlZSAiUEFTUyIgZm91ciB0aW1lczoKKworUEFTUworUEFTUworUEFTUwor
UEFTUworCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3htbGh0
dHByZXF1ZXN0LWFib3J0LXJlYWR5U3RhdGUtc2hvdWxkTm90RGlzcGF0Y2hFdmVudC1leHBlY3Rl
ZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVz
dC94bWxodHRwcmVxdWVzdC1hYm9ydC1yZWFkeVN0YXRlLXNob3VsZE5vdERpc3BhdGNoRXZlbnQt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAyOTk1NSkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMv
eG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtYWJvcnQtcmVhZHlTdGF0ZS1zaG91bGROb3RE
aXNwYXRjaEV2ZW50LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSw5ICsxLDkgQEAK
IFRlc3QgYnVnIDEzMTQxIDogWE1MSHR0cFJlcXVlc3Qgc2hvdWxkIHNldCByZWFkeVN0YXRlIHRv
IDAgYWZ0ZXIgYWJvcnQoKQogCi1TaG91bGQgc2VlICJQQVNTIiBmb3VyIHRpbWVzOgorVXBkYXRl
ZCBmb3IgYnVnIDE2OTg5OiBBZGQgc2VuZCgpIGZsYWcgY2hlY2tzIGluIFhtbEh0dHBSZXF1ZXN0
CisKK1Nob3VsZCBzZWUgIlBBU1MiIHR3byB0aW1lczoKIAotUEFTUwotUEFTUwogUEFTUwogUEFT
UwogCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3htbGh0dHBy
ZXF1ZXN0LWFib3J0LXJlYWR5U3RhdGUtc2hvdWxkTm90RGlzcGF0Y2hFdmVudC5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QveG1saHR0cHJl
cXVlc3QtYWJvcnQtcmVhZHlTdGF0ZS1zaG91bGROb3REaXNwYXRjaEV2ZW50Lmh0bWwJKHJldmlz
aW9uIDI5OTU1KQkoZnJvbSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3ht
bGh0dHByZXF1ZXN0LWFib3J0LXJlYWR5U3RhdGUuaHRtbDoyOTk1NSkKKysrIExheW91dFRlc3Rz
L2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtYWJvcnQtcmVhZHlTdGF0
ZS1zaG91bGROb3REaXNwYXRjaEV2ZW50Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2
NyBAQAorPGh0bWw+Cis8aGVhZD48L2hlYWQ+Cis8Ym9keT4KKworPHA+VGVzdCBidWcgMTMxNDEg
OiBYTUxIdHRwUmVxdWVzdCBzaG91bGQgc2V0IHJlYWR5U3RhdGUgdG8gMCBhZnRlciBhYm9ydCgp
IDwvcD4KKzxwPlNob3VsZCBzZWUgIlBBU1MiIGZvdXIgdGltZXM6PC9wPgorPGRpdiBpZD0iYW5z
Ij48L2Rpdj4KKworPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorZnVuY3Rpb24gbG9n
KG1lc3NhZ2UpIHsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYW5zIikuYXBwZW5kQ2hp
bGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobWVzc2FnZSkpOworICAgIGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJhbnMiKS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJiciIp
KTsKK30KKworLy8gVXNlZCB0byBkZXRlY3QgaWYgYSByZWFkeXN0YXRlIGV2ZW50IGlzIGRpc3Bh
dGNoZWQKK2Z1bmN0aW9uIGNhdGNoUmVhZHlzdGF0ZUV2ZW50QWJvcnQoKSB7CisgICAgbG9nKCJG
QUlMRUQgKHJlYWR5c3RhdGUgZXZlbnQgc2VuZCkiKTsKK30KKworZnVuY3Rpb24gdGVzdChudW0p
Cit7CisgICAgdmFyIHhocjsKKworICAgIGlmICh3aW5kb3cuWE1MSHR0cFJlcXVlc3QpIHsKKyAg
ICAgICAgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
dHJ5IHsKKyAgICAgICAgICAgIHhociA9IG5ldyBBY3RpdmVYT2JqZWN0KCJNc3htbDIuWE1MSFRU
UCIpOworICAgICAgICB9IGNhdGNoIChleCkgeworICAgICAgICAgICAgeGhyID0gbmV3IEFjdGl2
ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxIVFRQIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB4
aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy5y
ZWFkeVN0YXRlID09IG51bSkgeworICAgICAgICAgICAgKytmaW5pc2hlZFRlc3RzOworICAgICAg
ICAgICAgdGhpcy5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBjYXRjaFJlYWR5c3RhdGVFdmVudEFib3J0
OworICAgICAgICAgICAgdGhpcy5hYm9ydCgpOworICAgICAgICAgICAgaWYgKHRoaXMucmVhZHlT
dGF0ZSA9PSAwKQorICAgICAgICAgICAgICAgIGxvZygiUEFTUyIpOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIGxvZygiRkFJTEVEIik7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGlmIChmaW5pc2hlZFRlc3RzID09IDQgJiYgd2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKQorICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAg
IH0KKworICAgIHhoci5vcGVuKCJHRVQiLCAicmVzb3VyY2VzLzEyNTEuaHRtbCIsIHRydWUpOwor
ICAgIGlmIChudW0gIT0gMSkKKyAgICAgICAgeGhyLnNlbmQobnVsbCk7Cit9CisKK2lmICh3aW5k
b3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1w
QXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworfQor
Cit2YXIgZmluaXNoZWRUZXN0cyA9IDA7CisKK2ZvciAoaSA9IDE7IGkgPCA1OyBpKyspIHsKKyAg
ICB0ZXN0KGkpOworfQorCis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91
dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtYWJvcnQtcmVh
ZHlTdGF0ZS1zaG91bGROb3REaXNwYXRjaEV2ZW50Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVzdC1hYm9ydC1yZWFk
eVN0YXRlLXNob3VsZE5vdERpc3BhdGNoRXZlbnQuaHRtbAkocmV2aXNpb24gMjk5NTUpCisrKyBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LWFib3J0
LXJlYWR5U3RhdGUtc2hvdWxkTm90RGlzcGF0Y2hFdmVudC5odG1sCSh3b3JraW5nIGNvcHkpCkBA
IC0zLDcgKzMsOCBAQAogPGJvZHk+CiAKIDxwPlRlc3QgYnVnIDEzMTQxIDogWE1MSHR0cFJlcXVl
c3Qgc2hvdWxkIHNldCByZWFkeVN0YXRlIHRvIDAgYWZ0ZXIgYWJvcnQoKSA8L3A+Ci08cD5TaG91
bGQgc2VlICJQQVNTIiBmb3VyIHRpbWVzOjwvcD4KKzxwPlVwZGF0ZWQgZm9yIGJ1ZyAxNjk4OTog
QWRkIHNlbmQoKSBmbGFnIGNoZWNrcyBpbiBYbWxIdHRwUmVxdWVzdCA8L3A+Cis8cD5TaG91bGQg
c2VlICJQQVNTIiB0d28gdGltZXM6PC9wPgogPGRpdiBpZD0iYW5zIj48L2Rpdj4KIAogPHNjcmlw
dCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgpAQCAtMTcsNyArMTgsNyBAQCBmdW5jdGlvbiBjYXRj
aFJlYWR5c3RhdGVFdmVudEFib3J0KCkgewogICAgIGxvZygiRkFJTEVEIChyZWFkeXN0YXRlIGV2
ZW50IHNlbmQpIik7CiB9CiAKLWZ1bmN0aW9uIHRlc3QobnVtKQorZnVuY3Rpb24gdGVzdEFib3J0
RG9Ob3REaXNwYXRjaEV2ZW50KG51bSkKIHsKICAgICB2YXIgeGhyOwogCkBAIC00MiwxMSArNDMs
MTQgQEAgZnVuY3Rpb24gdGVzdChudW0pCiAgICAgICAgICAgICAgICAgbG9nKCJGQUlMRUQiKTsK
ICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKGZpbmlzaGVkVGVzdHMgPT0gNCAmJiB3
aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGlmIChmaW5pc2hlZFRlc3RzID09
IGFib3J0VG9Eby5sZW5ndGggJiYgd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQogICAgICAg
ICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOwogICAgIH0KIAogICAgIHho
ci5vcGVuKCJHRVQiLCAicmVzb3VyY2VzLzEyNTEuaHRtbCIsIHRydWUpOworCisgICAgLy8gV2Ug
d2FudCB0byBiZSBhYmxlIHRvIHRlc3QgaW4gdGhlIE9QRU5FRCBzdGF0ZSB3aXRoIHRoZSBzZW5k
KCkgZmxhZyB0byBmYWxzZQorICAgIC8vIHNvIGRvIG5vdCBjYWxsIHNlbmQgaW4gdGhhdCBjYXNl
CiAgICAgaWYgKG51bSAhPSAxKQogICAgICAgICB4aHIuc2VuZChudWxsKTsKIH0KQEAgLTU4LDkg
KzYyLDEwIEBAIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKIAogdmFyIGZpbmlz
aGVkVGVzdHMgPSAwOwogCi1mb3IgKGkgPSAxOyBpIDwgNTsgaSsrKSB7Ci0gICAgdGVzdChpKTsK
LX0KK3ZhciBhYm9ydFRvRG8gPSBbJzEnLCAnNCddOworCitmb3IgKGkgPSAwOyBpIDwgYWJvcnRU
b0RvLmxlbmd0aDsgaSsrKQorICAgIHRlc3RBYm9ydERvTm90RGlzcGF0Y2hFdmVudChhYm9ydFRv
RG9baV0pOwogCiA8L3NjcmlwdD4KIDwvYm9keT4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVz
dHMveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtYWJvcnQtcmVhZHlTdGF0ZS5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QveG1saHR0
cHJlcXVlc3QtYWJvcnQtcmVhZHlTdGF0ZS5odG1sCShyZXZpc2lvbiAzMDAwMikKKysrIExheW91
dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtYWJvcnQtcmVh
ZHlTdGF0ZS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0xLDY3ICswLDAgQEAKLTxodG1sPgotPGhl
YWQ+PC9oZWFkPgotPGJvZHk+Ci0KLTxwPlRlc3QgYnVnIDEzMTQxIDogWE1MSHR0cFJlcXVlc3Qg
c2hvdWxkIHNldCByZWFkeVN0YXRlIHRvIDAgYWZ0ZXIgYWJvcnQoKSA8L3A+Ci08cD5TaG91bGQg
c2VlICJQQVNTIiBmb3VyIHRpbWVzOjwvcD4KLTxkaXYgaWQ9ImFucyI+PC9kaXY+Ci0KLTxzY3Jp
cHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLWZ1bmN0aW9uIGxvZyhtZXNzYWdlKSB7Ci0gICAg
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFucyIpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0
ZVRleHROb2RlKG1lc3NhZ2UpKTsKLSAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYW5zIiku
YXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnIiKSk7Ci19Ci0KLS8vIFVzZWQg
dG8gZGV0ZWN0IGlmIGEgcmVhZHlzdGF0ZSBldmVudCBpcyBkaXNwYXRjaGVkCi1mdW5jdGlvbiBj
YXRjaFJlYWR5c3RhdGVFdmVudEFib3J0KCkgewotICAgIGxvZygiRkFJTEVEIChyZWFkeXN0YXRl
IGV2ZW50IHNlbmQpIik7Ci19Ci0KLWZ1bmN0aW9uIHRlc3QobnVtKQotewotICAgIHZhciB4aHI7
Ci0KLSAgICBpZiAod2luZG93LlhNTEh0dHBSZXF1ZXN0KSB7Ci0gICAgICAgIHhociA9IG5ldyBY
TUxIdHRwUmVxdWVzdCgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAg
ICB4aHIgPSBuZXcgQWN0aXZlWE9iamVjdCgiTXN4bWwyLlhNTEhUVFAiKTsKLSAgICAgICAgfSBj
YXRjaCAoZXgpIHsKLSAgICAgICAgICAgIHhociA9IG5ldyBBY3RpdmVYT2JqZWN0KCJNaWNyb3Nv
ZnQuWE1MSFRUUCIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgeGhyLm9ucmVhZHlzdGF0ZWNo
YW5nZSA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSBudW0p
IHsKLSAgICAgICAgICAgICsrZmluaXNoZWRUZXN0czsKLSAgICAgICAgICAgIHRoaXMub25yZWFk
eXN0YXRlY2hhbmdlID0gY2F0Y2hSZWFkeXN0YXRlRXZlbnRBYm9ydDsKLSAgICAgICAgICAgIHRo
aXMuYWJvcnQoKTsKLSAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gMCkKLSAgICAg
ICAgICAgICAgICBsb2coIlBBU1MiKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICBsb2coIkZBSUxFRCIpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoZmluaXNo
ZWRUZXN0cyA9PSA0ICYmIHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKLSAgICAgICAgICAg
IGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKLSAgICB9Ci0KLSAgICB4aHIub3Bl
bigiR0VUIiwgInJlc291cmNlcy8xMjUxLmh0bWwiLCB0cnVlKTsKLSAgICBpZiAobnVtICE9IDEp
Ci0gICAgICAgIHhoci5zZW5kKG51bGwpOwotfQotCi1pZiAod2luZG93LmxheW91dFRlc3RDb250
cm9sbGVyKSB7Ci0gICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOwotICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKLX0KLQotdmFyIGZpbmlzaGVkVGVz
dHMgPSAwOwotCi1mb3IgKGkgPSAxOyBpIDwgNTsgaSsrKSB7Ci0gICAgdGVzdChpKTsKLX0KLQot
PC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LXRlc3Qtc2VuZC1mbGFnLWV4cGVjdGVkLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3ht
bGh0dHByZXF1ZXN0LXRlc3Qtc2VuZC1mbGFnLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtdGVz
dC1zZW5kLWZsYWctZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcgQEAKK1Rl
c3QgYnVnIDE2OTg5IDogQWRkIHNlbmQoKSBmbGFnIGNoZWNrcyBpbiBYbWxIdHRwUmVxdWVzdAor
CitZb3Ugc2hvdWxkIHNlZSBQQVNTIHR3byB0aW1lcworCitQQVNTCitQQVNTCisKSW5kZXg6IExh
eW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtdGVzdC1z
ZW5kLWZsYWcuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0
dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LXRlc3Qtc2VuZC1mbGFnLmh0bWwJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0
LXRlc3Qtc2VuZC1mbGFnLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjQgQEAKKzxodG1s
PgorPGhlYWQ+PC9oZWFkPgorPGJvZHk+CisKKzxwPiBUZXN0IGJ1ZyAxNjk4OSA6IEFkZCBzZW5k
KCkgZmxhZyBjaGVja3MgaW4gWG1sSHR0cFJlcXVlc3QgPC9wPgorPHA+IFlvdSBzaG91bGQgc2Vl
IFBBU1MgdHdvIHRpbWVzIDwvcD4KKworPGRpdiBpZD0iYW5zIj48L2Rpdj4KKworPHNjcmlwdCB0
eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorZnVuY3Rpb24gbG9nKG1lc3NhZ2UpIHsKKyAgICBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgiYW5zIikuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4
dE5vZGUobWVzc2FnZSkpOworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhbnMiKS5hcHBl
bmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJiciIpKTsKK30KKworaWYgKHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0
KCk7CisKK3ZhciB4aHI7CisKK2lmICh3aW5kb3cuWE1MSHR0cFJlcXVlc3QpIHsKKyAgICB4aHIg
PSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKK30gZWxzZSB7CisgICAgdHJ5IHsKKyAgICAgICAgeGhy
ID0gbmV3IEFjdGl2ZVhPYmplY3QoIk1zeG1sMi5YTUxIVFRQIik7CisgICAgfSBjYXRjaCAoZXgp
IHsKKyAgICAgICAgeGhyID0gbmV3IEFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxIVFRQIik7
CisgICAgfQorfQorCisvLyBGaXJzdCB0ZXN0IDogdGVzdCBvcGVuIG1ldGhvZCBzZW5kKCkgZmxh
ZyBjaGVjaworeGhyLm9wZW4oIkdFVCIsICJyZXNvdXJjZXMvZW5kbGVzc3htbC5waHAiLCB0cnVl
KTsKK3hoci5zZW5kKG51bGwpOwordHJ5IHsKKyAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT0gMSkK
KyAgICAgICAgeGhyLnNlbmQobnVsbCk7CisgICAgbG9nKCJGQUlMRUQiKTsKK30gY2F0Y2ggKGUp
IHsKKyAgICAvLyBDYWxsIGFib3J0IHRvIHByZXZlbnQgdHJpZ2dlcmluZyBzb21lIHJlYWR5c3Rh
dGUgZXZlbnRzCisgICAgeGhyLmFib3J0KCk7CisgICAgbG9nKCJQQVNTIik7Cit9CisKKy8vIFNl
Y29uZCB0ZXN0IDogdGVzdCBzZXRSZXNwb25zZUhlYWRlciBtZXRob2Qgc2VuZCgpIGZsYWcgY2hl
Y2sKK3hoci5vcGVuKCJHRVQiLCAicmVzb3VyY2VzL2VuZGxlc3N4bWwucGhwIiwgdHJ1ZSk7Cit4
aHIuc2V0UmVxdWVzdEhlYWRlcigiVGVzdDEiLCAiVGVzdDEiKTsKK3hoci5zZW5kKG51bGwpOwor
dHJ5IHsKKyAgICAvLyBtYWtlcyBzdXJlIHJlYWR5U3RhdGUgaXMgb3BlbmVkIChidWcgaW4gT3Bl
cmEpCisgICAgaWYgKHhoci5yZWFkeVN0YXRlID09IDEpCisgICAgICAgIHhoci5zZXRSZXF1ZXN0
SGVhZGVyKCJUZXN0IiwgIlRlc3QiKTsKKyAgICBsb2coIkZBSUxFRCIpOworfSBjYXRjaCAoZSkg
eworICAgIC8vIENhbGwgYWJvcnQgdG8gcHJldmVudCB0cmlnZ2VyaW5nIHNvbWUgcmVhZHlzdGF0
ZSBldmVudHMKKyAgICB4aHIuYWJvcnQoKTsKKyAgICBsb2coIlBBU1MiKTsKK30KKworaWYgKHdp
bmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3Rp
ZnlEb25lKCk7CisKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>
<flag name="review"
          id="8273"
          type_id="1"
          status="+"
          setter="ap"
    />
          </attachment>
      

    </bug>

</bugzilla>