<?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>165178</bug_id>
          
          <creation_ts>2016-11-29 17:33:58 -0800</creation_ts>
          <short_desc>Require preflight for non-standard CORS-safelisted request headers Accept, Accept-Language, and Content-Language</short_desc>
          <delta_ts>2024-03-22 01:36:32 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=165566</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=166363</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="John Wilander">wilander</reporter>
          <assigned_to name="John Wilander">wilander</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>cdumez</cc>
    
    <cc>chris.e.brown17</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>japhet</cc>
    
    <cc>mike</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wilander</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1254594</commentid>
    <comment_count>0</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2016-11-29 17:33:58 -0800</bug_when>
    <thetext>Fetch currently only restricts the header Content-Type for simple requests: https://fetch.spec.whatwg.org/#cors-safelisted-request-header

This means simple CORS requests can send unexpected characters in Accept, Accept-Language, and Content-Language header values.

RFC 7231 implies restrictions on these header values:
Accept https://tools.ietf.org/html/rfc7231#section-5.3.2
Accept-Language https://tools.ietf.org/html/rfc7231#section-5.3.5
Content-Language https://tools.ietf.org/html/rfc7231#section-3.1.3.2

As per discussions in the W3C WebAppSec group we should try to restrict these header values to help protect servers that do not expect simple CORS requests.

Non-standard header values should trigger a preflight and require the headers to be whitelisted in the response&apos;s Access-Control-Allow-Headers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1254626</commentid>
    <comment_count>1</comment_count>
      <attachid>295689</attachid>
    <who name="John Wilander">wilander</who>
    <bug_when>2016-11-29 18:29:13 -0800</bug_when>
    <thetext>Created attachment 295689
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1254627</commentid>
    <comment_count>2</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2016-11-29 18:31:42 -0800</bug_when>
    <thetext>rdar://problem/18792250</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1254649</commentid>
    <comment_count>3</comment_count>
      <attachid>295689</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2016-11-29 19:41:13 -0800</bug_when>
    <thetext>Comment on attachment 295689
Patch

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

&gt; Source/WebCore/ChangeLog:8
&gt; +

I know that you explain the motivation behind this change in comment 0. I suggest that we also repeat this reasoning in the ChangeLog description so as to avoid the need for a person to visit the bug to understand the motivation for this change.

&gt; Source/WebCore/ChangeLog:13
&gt; +            Now makes a call to WebCore:: isValidAcceptHeaderValue for Accept headers

&quot;WebCore:: isValidAcceptHeaderValue&quot; =&gt; &quot;WebCore::isValidAcceptHeaderValue()&quot;

&gt; Source/WebCore/ChangeLog:14
&gt; +            and WebCore:: isValidLanguageHeaderValue for Accept-Language and

&quot;WebCore:: isValidLanguageHeaderValue&quot; =&gt; &quot;WebCore::isValidLanguageHeaderValue()&quot;

&gt; Source/WebCore/ChangeLog:28
&gt; +            Now makes a call to WebCore:: isValidAcceptHeaderValue for Accept headers

&quot;WebCore:: isValidAcceptHeaderValue&quot; =&gt; &quot;WebCore::isValidAcceptHeaderValue()&quot;

&gt; Source/WebCore/ChangeLog:29
&gt; +            and WebCore:: isValidLanguageHeaderValue for Accept-Language and

&quot;WebCore:: isValidLanguageHeaderValue&quot; =&gt; &quot;WebCore::isValidLanguageHeaderValue()&quot;

&gt; Source/WebCore/platform/Language.cpp:200
&gt; +    UChar c;

No need to follow C89 semantics and declare all variables up-front and we are not returning this value. Please declare/define this variable where it is initialized on line 202.

&gt; Source/WebCore/platform/Language.cpp:211
&gt; +    for (unsigned i = 0; i &lt; value.length(); ++i) {
&gt; +        c = value[i];
&gt; +        if (!isASCIIAlphanumeric(c)
&gt; +            &amp;&amp; c != &apos; &apos;
&gt; +            &amp;&amp; c != &apos;*&apos;
&gt; +            &amp;&amp; c != &apos;-&apos;
&gt; +            &amp;&amp; c != &apos;.&apos;
&gt; +            &amp;&amp; c != &apos;;&apos;
&gt; +            &amp;&amp; c != &apos;=&apos;)
&gt; +            return false;
&gt; +    }

It tends to be harder to reason about negation. I would write this as:

for (unsigned i = 0; i &lt; value.length(); ++i) {
    UChar c = value[i];
    if (isASCIIAlphanumeric(c) || c == &apos; &apos; || c == &apos;*&apos; || c == &apos;-&apos; || c == &apos;.&apos; || c == &apos;;&apos; || c == &apos;=&apos;)
        continue;
    return false;
}
return true;

&gt; Source/WebCore/platform/network/HTTPParsers.cpp:133
&gt; +    UChar c;

No need to follow C89 semantics and declare all variables up-front and we are not returning this value. Please declare/define this variable where it is initialized on line 135.

&gt; Source/WebCore/platform/network/HTTPParsers.cpp:146
&gt; +    for (unsigned i = 0; i &lt; value.length(); ++i) {
&gt; +        c = value[i];
&gt; +        if (!isASCIIAlphanumeric(c)
&gt; +            &amp;&amp; c != &apos; &apos;
&gt; +            &amp;&amp; c != &apos;*&apos;
&gt; +            &amp;&amp; c != &apos;.&apos;
&gt; +            &amp;&amp; c != &apos;/&apos;
&gt; +            &amp;&amp; c != &apos;;&apos;
&gt; +            &amp;&amp; c != &apos;=&apos;)
&gt; +            return false;
&gt; +    }
&gt; +    
&gt; +    return true;

I would use a similar style as mentioned in comment in isValidLanguageHeaderValue().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1254652</commentid>
    <comment_count>4</comment_count>
      <attachid>295689</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2016-11-29 19:44:38 -0800</bug_when>
    <thetext>Comment on attachment 295689
Patch

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

&gt; Source/WebCore/platform/Language.cpp:193
&gt; +bool isValidLanguageHeaderValue(const String&amp; value)

This file, Language.cpp, does not seem like the appropriate place for such HTTP header validation logic. How did you come to the decision to put such logic here as opposed to HTTPParsers.cpp as you did for isValidAcceptHeaderValue()?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1254659</commentid>
    <comment_count>5</comment_count>
      <attachid>295689</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2016-11-29 19:52:22 -0800</bug_when>
    <thetext>Comment on attachment 295689
Patch

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

&gt; Source/WebCore/platform/Language.cpp:215
&gt; +    return true;

i assume an empty string is valid? (I haven&apos;t read the referenced RFCs)

&gt; Source/WebCore/platform/network/HTTPParsers.cpp:131
&gt; +bool isValidAcceptHeaderValue(const String&amp; value)

I assume an empty string is valid? (I haven&apos;t read the referenced RFCs)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1254709</commentid>
    <comment_count>6</comment_count>
      <attachid>295689</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-11-29 23:20:17 -0800</bug_when>
    <thetext>Comment on attachment 295689
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:8
&gt;&gt; +
&gt; 
&gt; I know that you explain the motivation behind this change in comment 0. I suggest that we also repeat this reasoning in the ChangeLog description so as to avoid the need for a person to visit the bug to understand the motivation for this change.

AFAIK, this is not yet part of the fetch specification. There was some push back IIRC.
Would you be able to give a link to webapp-sec WG discussions?
Do you know the status on other browsers?

Fetch no-cors mode allows fetch API to send cross-origin requests without any preflight.
Even with that change, servers will need to protect themselves from browser requests containing those header values.

&gt;&gt; Source/WebCore/platform/network/HTTPParsers.cpp:146
&gt;&gt; +    return true;
&gt; 
&gt; I would use a similar style as mentioned in comment in isValidLanguageHeaderValue().

It is simpler to group isValidAcceptHeaderValue and isValidLanguageHeaderValue together.
They also are the same atm.

&gt; LayoutTests/http/tests/xmlhttprequest/cors-non-standard-safelisted-headers-should-trigger-preflight.html:9
&gt; +&lt;!-- https://fetch.spec.whatwg.org/#cors-safelisted-request-header --&gt;

When fetch spec will get updated, this link should be relevant to those tests but currently it is not.
These tests would be a good contribution to W3C web-platform-tests if they were testharness.js based.
That may also help adoption of that CORS change.

If you want to update the tests accordingly, you might want to consider promise_test and fetch API, which might be more handy as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1254831</commentid>
    <comment_count>7</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2016-11-30 10:20:16 -0800</bug_when>
    <thetext>Thanks for your reviews, Dan and Youenn! Comments inline below.

(In reply to comment #3)
&gt; Comment on attachment 295689 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=295689&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:8
&gt; &gt; +
&gt; 
&gt; I know that you explain the motivation behind this change in comment 0. I
&gt; suggest that we also repeat this reasoning in the ChangeLog description so
&gt; as to avoid the need for a person to visit the bug to understand the
&gt; motivation for this change.

Agreed.

&gt; &gt; Source/WebCore/ChangeLog:13
&gt; &gt; +            Now makes a call to WebCore:: isValidAcceptHeaderValue for Accept headers
&gt; 
&gt; &quot;WebCore:: isValidAcceptHeaderValue&quot; =&gt; &quot;WebCore::isValidAcceptHeaderValue()&quot;
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:14
&gt; &gt; +            and WebCore:: isValidLanguageHeaderValue for Accept-Language and
&gt; 
&gt; &quot;WebCore:: isValidLanguageHeaderValue&quot; =&gt;
&gt; &quot;WebCore::isValidLanguageHeaderValue()&quot;
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:28
&gt; &gt; +            Now makes a call to WebCore:: isValidAcceptHeaderValue for Accept headers
&gt; 
&gt; &quot;WebCore:: isValidAcceptHeaderValue&quot; =&gt; &quot;WebCore::isValidAcceptHeaderValue()&quot;
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:29
&gt; &gt; +            and WebCore:: isValidLanguageHeaderValue for Accept-Language and
&gt; 
&gt; &quot;WebCore:: isValidLanguageHeaderValue&quot; =&gt;
&gt; &quot;WebCore::isValidLanguageHeaderValue()&quot;

Looks like my text editor is playing tricks on me. Will fix.

&gt; &gt; Source/WebCore/platform/Language.cpp:200
&gt; &gt; +    UChar c;
&gt; 
&gt; No need to follow C89 semantics and declare all variables up-front and we
&gt; are not returning this value. Please declare/define this variable where it
&gt; is initialized on line 202.
&gt; 
&gt; &gt; Source/WebCore/platform/Language.cpp:211
&gt; &gt; +    for (unsigned i = 0; i &lt; value.length(); ++i) {
&gt; &gt; +        c = value[i];
&gt; &gt; +        if (!isASCIIAlphanumeric(c)
&gt; &gt; +            &amp;&amp; c != &apos; &apos;
&gt; &gt; +            &amp;&amp; c != &apos;*&apos;
&gt; &gt; +            &amp;&amp; c != &apos;-&apos;
&gt; &gt; +            &amp;&amp; c != &apos;.&apos;
&gt; &gt; +            &amp;&amp; c != &apos;;&apos;
&gt; &gt; +            &amp;&amp; c != &apos;=&apos;)
&gt; &gt; +            return false;
&gt; &gt; +    }

Will fix.

&gt; It tends to be harder to reason about negation. I would write this as:
&gt; 
&gt; for (unsigned i = 0; i &lt; value.length(); ++i) {
&gt;     UChar c = value[i];
&gt;     if (isASCIIAlphanumeric(c) || c == &apos; &apos; || c == &apos;*&apos; || c == &apos;-&apos; || c ==
&gt; &apos;.&apos; || c == &apos;;&apos; || c == &apos;=&apos;)
&gt;         continue;
&gt;     return false;
&gt; }
&gt; return true;

Agreed.

&gt; &gt; Source/WebCore/platform/network/HTTPParsers.cpp:133
&gt; &gt; +    UChar c;
&gt; 
&gt; No need to follow C89 semantics and declare all variables up-front and we
&gt; are not returning this value. Please declare/define this variable where it
&gt; is initialized on line 135.

Will fix.

&gt; &gt; Source/WebCore/platform/network/HTTPParsers.cpp:146
&gt; &gt; +    for (unsigned i = 0; i &lt; value.length(); ++i) {
&gt; &gt; +        c = value[i];
&gt; &gt; +        if (!isASCIIAlphanumeric(c)
&gt; &gt; +            &amp;&amp; c != &apos; &apos;
&gt; &gt; +            &amp;&amp; c != &apos;*&apos;
&gt; &gt; +            &amp;&amp; c != &apos;.&apos;
&gt; &gt; +            &amp;&amp; c != &apos;/&apos;
&gt; &gt; +            &amp;&amp; c != &apos;;&apos;
&gt; &gt; +            &amp;&amp; c != &apos;=&apos;)
&gt; &gt; +            return false;
&gt; &gt; +    }
&gt; &gt; +    
&gt; &gt; +    return true;
&gt; 
&gt; I would use a similar style as mentioned in comment in
&gt; isValidLanguageHeaderValue().

Agreed.


(In reply to comment #4)
&gt; Comment on attachment 295689 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=295689&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/Language.cpp:193
&gt; &gt; +bool isValidLanguageHeaderValue(const String&amp; value)
&gt; 
&gt; This file, Language.cpp, does not seem like the appropriate place for such
&gt; HTTP header validation logic. How did you come to the decision to put such
&gt; logic here as opposed to HTTPParsers.cpp as you did for
&gt; isValidAcceptHeaderValue()?

It is the file that deals with language codes. When working on this patch I came across https://bugs.webkit.org/show_bug.cgi?id=123926 and I have a follow-up patch for Language.cpp and VideoTrack.cpp that takes us closer to full validation of language codes/tags. But I can absolutely split language validation into a basic header check in HTTPParsers.cpp and deeper things in Language.cpp.


(In reply to comment #6)
&gt; Comment on attachment 295689 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=295689&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/ChangeLog:8
&gt; &gt;&gt; +
&gt; &gt; 
&gt; &gt; I know that you explain the motivation behind this change in comment 0. I suggest that we also repeat this reasoning in the ChangeLog description so as to avoid the need for a person to visit the bug to understand the motivation for this change.
&gt; 
&gt; AFAIK, this is not yet part of the fetch specification.

Fetch bug: https://github.com/whatwg/fetch/issues/382

&gt; There was some push back IIRC.

The pushback was primarily from a former Mozilla engineer Jonas Sicking, in this thread: https://github.com/whatwg/fetch/issues/313

It was brought up again at the W3C WebAppSec phone meeting and since Sicking has left Mozilla they wanted to go through it again.

&gt; Would you be able to give a link to webapp-sec WG discussions?

The notes from the phone meeting on 11/16 are not yet available:
https://www.w3.org/2011/webappsec/Minutes.html

&gt; Do you know the status on other browsers?

At the 11/16 meeting Google was in favor of this change but we agreed we need ample beta testing. In the case of WebKit it will be through trunk and Safari Technology Preview.

It should be noted here that we&apos;re not blocking such request headers, merely making them trigger a preflight. And it is odd that three of the four safe-listed request headers for simple CORS do not have any restrictions beyond field-content token production.

&gt; Fetch no-cors mode allows fetch API to send cross-origin requests without
&gt; any preflight.
&gt; Even with that change, servers will need to protect themselves from browser
&gt; requests containing those header values.

Yes. But the danger here lies in cross-origin requests.

&gt; &gt;&gt; Source/WebCore/platform/network/HTTPParsers.cpp:146
&gt; &gt;&gt; +    return true;
&gt; &gt; 
&gt; &gt; I would use a similar style as mentioned in comment in isValidLanguageHeaderValue().
&gt; 
&gt; It is simpler to group isValidAcceptHeaderValue and
&gt; isValidLanguageHeaderValue together.
&gt; They also are the same atm.

Actually, they are not the same which is why they are separate functions. Accept is allowed to use &apos;/&apos; and Accept-Language and Content-Language are allowed to use &apos;-&apos;.

&gt; &gt; LayoutTests/http/tests/xmlhttprequest/cors-non-standard-safelisted-headers-should-trigger-preflight.html:9
&gt; &gt; +&lt;!-- https://fetch.spec.whatwg.org/#cors-safelisted-request-header --&gt;
&gt; 
&gt; When fetch spec will get updated, this link should be relevant to those
&gt; tests but currently it is not.

I put it there to refer to which headers are safe-listed. But I can remove it.

&gt; These tests would be a good contribution to W3C web-platform-tests if they
&gt; were testharness.js based.
&gt; That may also help adoption of that CORS change.

Agreed. Is it OK if I file a follow-up bug for that? I&apos;d like to get field testing and a conversation with the other browsers going.

&gt; If you want to update the tests accordingly, you might want to consider
&gt; promise_test and fetch API, which might be more handy as well.

Thanks, I look at that when it&apos;s time to harmonize the tests with W3C.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1254854</commentid>
    <comment_count>8</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-11-30 11:05:09 -0800</bug_when>
    <thetext>&gt; &gt; Fetch no-cors mode allows fetch API to send cross-origin requests without
&gt; &gt; any preflight.
&gt; &gt; Even with that change, servers will need to protect themselves from browser
&gt; &gt; requests containing those header values.
&gt; 
&gt; Yes. But the danger here lies in cross-origin requests.

That is not very clear to me.
Do you mean that the danger is in cross-origin requests in fetch cors mode and not in cross-origin requests in fetch no-cors mode?

&gt; &gt; &gt; LayoutTests/http/tests/xmlhttprequest/cors-non-standard-safelisted-headers-should-trigger-preflight.html:9
&gt; &gt; &gt; +&lt;!-- https://fetch.spec.whatwg.org/#cors-safelisted-request-header --&gt;
&gt; &gt; 
&gt; &gt; When fetch spec will get updated, this link should be relevant to those
&gt; &gt; tests but currently it is not.
&gt; 
&gt; I put it there to refer to which headers are safe-listed. But I can remove
&gt; it.

I guess when fetch spec will get updated, the pointer will be the same.
Let&apos;s keep it then.
You could make it as &lt;meta name=&quot;help&quot; href=&quot;https://fetch.spec.whatwg.org/#cors-safelisted-request-header&quot;&gt;

&gt; &gt; These tests would be a good contribution to W3C web-platform-tests if they
&gt; &gt; were testharness.js based.
&gt; &gt; That may also help adoption of that CORS change.
&gt; 
&gt; Agreed. Is it OK if I file a follow-up bug for that? I&apos;d like to get field
&gt; testing and a conversation with the other browsers going.

np</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1254871</commentid>
    <comment_count>9</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2016-11-30 11:46:32 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; &gt; &gt; Fetch no-cors mode allows fetch API to send cross-origin requests without
&gt; &gt; &gt; any preflight.
&gt; &gt; &gt; Even with that change, servers will need to protect themselves from browser
&gt; &gt; &gt; requests containing those header values.
&gt; &gt; 
&gt; &gt; Yes. But the danger here lies in cross-origin requests.
&gt; 
&gt; That is not very clear to me.
&gt; Do you mean that the danger is in cross-origin requests in fetch cors mode
&gt; and not in cross-origin requests in fetch no-cors mode?

Sorry, I got confused with regular, same-origin Fetch. You know the two CORS modes better than I do so please advice. :)

The isSimpleHeader() check is done for for no-cors mode too. FetchHeaders.cpp will deny the header write for no-cors:

static ExceptionOr&lt;bool&gt; canWriteHeader(const String&amp; name, const String&amp; value, FetchHeaders::Guard guard)
{
    ...
    if (guard == FetchHeaders::Guard::RequestNoCors &amp;&amp; !isSimpleHeader(name, value))
        return false;

&gt; &gt; &gt; &gt; LayoutTests/http/tests/xmlhttprequest/cors-non-standard-safelisted-headers-should-trigger-preflight.html:9
&gt; &gt; &gt; &gt; +&lt;!-- https://fetch.spec.whatwg.org/#cors-safelisted-request-header --&gt;
&gt; &gt; &gt; 
&gt; &gt; &gt; When fetch spec will get updated, this link should be relevant to those
&gt; &gt; &gt; tests but currently it is not.
&gt; &gt; 
&gt; &gt; I put it there to refer to which headers are safe-listed. But I can remove
&gt; &gt; it.
&gt; 
&gt; I guess when fetch spec will get updated, the pointer will be the same.
&gt; Let&apos;s keep it then.
&gt; You could make it as &lt;meta name=&quot;help&quot;
&gt; href=&quot;https://fetch.spec.whatwg.org/#cors-safelisted-request-header&quot;&gt;
&gt; 
&gt; &gt; &gt; These tests would be a good contribution to W3C web-platform-tests if they
&gt; &gt; &gt; were testharness.js based.
&gt; &gt; &gt; That may also help adoption of that CORS change.
&gt; &gt; 
&gt; &gt; Agreed. Is it OK if I file a follow-up bug for that? I&apos;d like to get field
&gt; &gt; testing and a conversation with the other browsers going.
&gt; 
&gt; np</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1254876</commentid>
    <comment_count>10</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-11-30 11:57:33 -0800</bug_when>
    <thetext>&gt; The isSimpleHeader() check is done for for no-cors mode too.
&gt; FetchHeaders.cpp will deny the header write for no-cors:

We would then have requests emitted without Accept/Accept-Language/Content-Language headers.
We need tests on that before shipping that change.
We probably want some additional discussion on GitHub fetch as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1254877</commentid>
    <comment_count>11</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-11-30 11:58:19 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; &gt; The isSimpleHeader() check is done for for no-cors mode too.
&gt; &gt; FetchHeaders.cpp will deny the header write for no-cors:
&gt; 
&gt; We would then have requests emitted without
&gt; Accept/Accept-Language/Content-Language headers.

Or with default values defined by lower network layers?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1254880</commentid>
    <comment_count>12</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2016-11-30 12:02:38 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; &gt; The isSimpleHeader() check is done for for no-cors mode too.
&gt; &gt; FetchHeaders.cpp will deny the header write for no-cors:
&gt; 
&gt; We would then have requests emitted without
&gt; Accept/Accept-Language/Content-Language headers.
&gt; We need tests on that before shipping that change.
&gt; We probably want some additional discussion on GitHub fetch as well.

Yes, I saw that in my manual testing.

Are you saying I should add Fetch no-cors tests now or we need to do it before shipping Fetch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1255097</commentid>
    <comment_count>13</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2016-11-30 18:00:49 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; &gt; The isSimpleHeader() check is done for for no-cors mode too.
&gt; &gt; FetchHeaders.cpp will deny the header write for no-cors:
&gt; 
&gt; We would then have requests emitted without
&gt; Accept/Accept-Language/Content-Language headers.
&gt; We need tests on that before shipping that change.

I looked into this today. There&apos;s no easy way for the server to signal whether it received a particular request header or not since the response is opaque.

I may be able to get it working through a conditional redirect on the server and a { mode: &quot;no-cors&quot;, redirect: &quot;error&quot; } setting in the client. Does that sound reasonable to you? If not, how would you structure this test?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1255292</commentid>
    <comment_count>14</comment_count>
      <attachid>295863</attachid>
    <who name="John Wilander">wilander</who>
    <bug_when>2016-12-01 10:33:43 -0800</bug_when>
    <thetext>Created attachment 295863
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1255303</commentid>
    <comment_count>15</comment_count>
      <attachid>295863</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2016-12-01 10:45:00 -0800</bug_when>
    <thetext>Comment on attachment 295863
Patch

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

&gt; LayoutTests/ChangeLog:10
&gt; +        Fetch currently only restricts the header Content-Type for simple requests:
&gt; +        https://fetch.spec.whatwg.org/#cors-safelisted-request-header

This patch seems to be adding an implementation that is parallel to one in XMLHttprequest (see e.g. isForbiddenRequestHeader and checks in XMLHttpRequest::setRequestHeader).

Is it right to make such changes at a different level? The effect seems very confusing - sometimes misuse results in an exception, other times it results in preflight, depending on the exact API used.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1255314</commentid>
    <comment_count>16</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2016-12-01 11:01:55 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; Comment on attachment 295863 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=295863&amp;action=review
&gt; 
&gt; &gt; LayoutTests/ChangeLog:10
&gt; &gt; +        Fetch currently only restricts the header Content-Type for simple requests:
&gt; &gt; +        https://fetch.spec.whatwg.org/#cors-safelisted-request-header
&gt; 
&gt; This patch seems to be adding an implementation that is parallel to one in
&gt; XMLHttprequest (see e.g. isForbiddenRequestHeader and checks in
&gt; XMLHttpRequest::setRequestHeader).
&gt; 
&gt; Is it right to make such changes at a different level? The effect seems very
&gt; confusing - sometimes misuse results in an exception, other times it results
&gt; in preflight, depending on the exact API used.

It is not a parallel to isForbiddenRequestHeader() or the checks in setRequestHeader(). These headers are explicitly allowed by spec and even &quot;safe listed&quot; for simple CORS requests. I did consider an alternate naming of the new functions but decided that this is the best way, i.e.:
1) The new functions check the header values according to RFC 7231, which is why I think their names are correct.
2) The new functions are (currently) called when we check if a cross-origin request should be handled as simple.
3) The decision in the case of CORS and Fetch in cors mode is to trigger a preflight. The decision in the case of Fetch in non-cors mode is to not allow the header write.
4) If the server responds with Access-Control-Allow-Headers and whitelists the header(s) in question, we will send it/them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1255321</commentid>
    <comment_count>17</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-12-01 11:21:38 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #10)
&gt; &gt; &gt; The isSimpleHeader() check is done for for no-cors mode too.
&gt; &gt; &gt; FetchHeaders.cpp will deny the header write for no-cors:
&gt; &gt; 
&gt; &gt; We would then have requests emitted without
&gt; &gt; Accept/Accept-Language/Content-Language headers.
&gt; &gt; We need tests on that before shipping that change.
&gt; 
&gt; I looked into this today. There&apos;s no easy way for the server to signal
&gt; whether it received a particular request header or not since the response is
&gt; opaque.
&gt; 
&gt; I may be able to get it working through a conditional redirect on the server
&gt; and a { mode: &quot;no-cors&quot;, redirect: &quot;error&quot; } setting in the client. Does
&gt; that sound reasonable to you? If not, how would you structure this test?

One approach is to do keep this information in the server:
- a first request is the no-cors one and sets the state
- a second request will retrieve the state (doing a same origin or cors request)

The infrastructure is already available in web-platform-tests.
See for instance LayoutTests/imported/w3c/web-platform-tests/fetch/api/resources/preflight.py and LayoutTests/imported/w3c/web-platform-tests/fetch/api/cors/cors-redirect-preflight.js for examples.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1255541</commentid>
    <comment_count>18</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2016-12-01 16:06:46 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; (In reply to comment #13)
&gt; &gt; (In reply to comment #10)
&gt; &gt; &gt; &gt; The isSimpleHeader() check is done for for no-cors mode too.
&gt; &gt; &gt; &gt; FetchHeaders.cpp will deny the header write for no-cors:
&gt; &gt; &gt; 
&gt; &gt; &gt; We would then have requests emitted without
&gt; &gt; &gt; Accept/Accept-Language/Content-Language headers.
&gt; &gt; &gt; We need tests on that before shipping that change.
&gt; &gt; 
&gt; &gt; I looked into this today. There&apos;s no easy way for the server to signal
&gt; &gt; whether it received a particular request header or not since the response is
&gt; &gt; opaque.
&gt; &gt; 
&gt; &gt; I may be able to get it working through a conditional redirect on the server
&gt; &gt; and a { mode: &quot;no-cors&quot;, redirect: &quot;error&quot; } setting in the client. Does
&gt; &gt; that sound reasonable to you? If not, how would you structure this test?
&gt; 
&gt; One approach is to do keep this information in the server:
&gt; - a first request is the no-cors one and sets the state
&gt; - a second request will retrieve the state (doing a same origin or cors
&gt; request)
&gt; 
&gt; The infrastructure is already available in web-platform-tests.
&gt; See for instance
&gt; LayoutTests/imported/w3c/web-platform-tests/fetch/api/resources/preflight.py
&gt; and
&gt; LayoutTests/imported/w3c/web-platform-tests/fetch/api/cors/cors-redirect-
&gt; preflight.js for examples.

I have a test stub but LayoutTests/http/tests/fetch/ is not configured to run a Python server yet. Can we get this patch landed without the Fetch no-cors test? We need to get it into Safari Technology Preview to assess whether the change is possible to ship at all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1255629</commentid>
    <comment_count>19</comment_count>
      <attachid>295863</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-12-01 23:52:26 -0800</bug_when>
    <thetext>Comment on attachment 295863
Patch

Let&apos;s try it then.

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

&gt; Source/WebCore/platform/network/HTTPParsers.cpp:856
&gt;  {

This routine is the same as isOnAccessControlSimpleRequestHeaderWhitelist.
Would you be able when landing to remove it and replace it with isCrossOriginSafeRequestHeader?
isSimpleHeader is also sharing some functionality with it.
Can we unify all three when landing this patch?

&gt;&gt;&gt; LayoutTests/ChangeLog:10
&gt;&gt;&gt; +        https://fetch.spec.whatwg.org/#cors-safelisted-request-header
&gt;&gt; 
&gt;&gt; This patch seems to be adding an implementation that is parallel to one in XMLHttprequest (see e.g. isForbiddenRequestHeader and checks in XMLHttpRequest::setRequestHeader).
&gt;&gt; 
&gt;&gt; Is it right to make such changes at a different level? The effect seems very confusing - sometimes misuse results in an exception, other times it results in preflight, depending on the exact API used.
&gt; 
&gt; It is not a parallel to isForbiddenRequestHeader() or the checks in setRequestHeader(). These headers are explicitly allowed by spec and even &quot;safe listed&quot; for simple CORS requests. I did consider an alternate naming of the new functions but decided that this is the best way, i.e.:
&gt; 1) The new functions check the header values according to RFC 7231, which is why I think their names are correct.
&gt; 2) The new functions are (currently) called when we check if a cross-origin request should be handled as simple.
&gt; 3) The decision in the case of CORS and Fetch in cors mode is to trigger a preflight. The decision in the case of Fetch in non-cors mode is to not allow the header write.
&gt; 4) If the server responds with Access-Control-Allow-Headers and whitelists the header(s) in question, we will send it/them.

XHR should be using isForbiddenHeaderName as per the spec.
But there are some differences with isForbiddenRequestHeader.
We should work on unifying them in the future.

&gt; LayoutTests/http/tests/xmlhttprequest/cors-non-standard-safelisted-headers-should-trigger-preflight.html:37
&gt; +                testPassed(description);

indentation issue.

&gt; LayoutTests/http/tests/xmlhttprequest/cors-non-standard-safelisted-headers-should-trigger-preflight.html:42
&gt; +                } else {

one liners do not need {}

&gt; LayoutTests/http/tests/xmlhttprequest/cors-non-standard-safelisted-headers-should-trigger-preflight.html:48
&gt; +    var abnormalSimpleCorsHeaderValue = &quot;() { :;};&quot;

Can we have a test containing all allowed non-alphanumeric characters for each one of the three headers?

&gt; LayoutTests/http/tests/xmlhttprequest/cors-non-standard-safelisted-headers-should-trigger-preflight.html:130
&gt; +        if(invocation) {

space after the if.
Also why do we need that if test?
The &quot;invocation&quot;variable seems a bit strange, xhr would be more usual I guess.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1255630</commentid>
    <comment_count>20</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-12-01 23:55:16 -0800</bug_when>
    <thetext>&gt; I have a test stub but LayoutTests/http/tests/fetch/ is not configured to
&gt; run a Python server yet. Can we get this patch landed without the Fetch
&gt; no-cors test? We need to get it into Safari Technology Preview to assess
&gt; whether the change is possible to ship at all.

Given we want interop here and work jointly with other browsers, it makes sense to me to upload those tests/create new tests to web-platform-tests.
They should also be run in LayoutTests/imported/w3c/web-platform-tests as all tests in that folders are run behind wpt python server</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1255773</commentid>
    <comment_count>21</comment_count>
      <attachid>295966</attachid>
    <who name="John Wilander">wilander</who>
    <bug_when>2016-12-02 11:18:21 -0800</bug_when>
    <thetext>Created attachment 295966
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1255775</commentid>
    <comment_count>22</comment_count>
      <attachid>295966</attachid>
    <who name="John Wilander">wilander</who>
    <bug_when>2016-12-02 11:20:50 -0800</bug_when>
    <thetext>Comment on attachment 295966
Patch

I have one more change to make.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1255777</commentid>
    <comment_count>23</comment_count>
      <attachid>295967</attachid>
    <who name="John Wilander">wilander</who>
    <bug_when>2016-12-02 11:27:32 -0800</bug_when>
    <thetext>Created attachment 295967
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1255778</commentid>
    <comment_count>24</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2016-12-02 11:31:16 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; Comment on attachment 295863 [details]
&gt; Patch
&gt; 
&gt; Let&apos;s try it then.
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=295863&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/network/HTTPParsers.cpp:856
&gt; &gt;  {
&gt; 
&gt; This routine is the same as isOnAccessControlSimpleRequestHeaderWhitelist.
&gt; Would you be able when landing to remove it and replace it with
&gt; isCrossOriginSafeRequestHeader?
&gt; isSimpleHeader is also sharing some functionality with it.
&gt; Can we unify all three when landing this patch?

I agree. Done.

&gt; &gt;&gt;&gt; LayoutTests/ChangeLog:10
&gt; &gt;&gt;&gt; +        https://fetch.spec.whatwg.org/#cors-safelisted-request-header
&gt; &gt;&gt; 
&gt; &gt;&gt; This patch seems to be adding an implementation that is parallel to one in XMLHttprequest (see e.g. isForbiddenRequestHeader and checks in XMLHttpRequest::setRequestHeader).
&gt; &gt;&gt; 
&gt; &gt;&gt; Is it right to make such changes at a different level? The effect seems very confusing - sometimes misuse results in an exception, other times it results in preflight, depending on the exact API used.
&gt; &gt; 
&gt; &gt; It is not a parallel to isForbiddenRequestHeader() or the checks in setRequestHeader(). These headers are explicitly allowed by spec and even &quot;safe listed&quot; for simple CORS requests. I did consider an alternate naming of the new functions but decided that this is the best way, i.e.:
&gt; &gt; 1) The new functions check the header values according to RFC 7231, which is why I think their names are correct.
&gt; &gt; 2) The new functions are (currently) called when we check if a cross-origin request should be handled as simple.
&gt; &gt; 3) The decision in the case of CORS and Fetch in cors mode is to trigger a preflight. The decision in the case of Fetch in non-cors mode is to not allow the header write.
&gt; &gt; 4) If the server responds with Access-Control-Allow-Headers and whitelists the header(s) in question, we will send it/them.
&gt; 
&gt; XHR should be using isForbiddenHeaderName as per the spec.
&gt; But there are some differences with isForbiddenRequestHeader.
&gt; We should work on unifying them in the future.

Would be good, yes.

&gt; &gt; LayoutTests/http/tests/xmlhttprequest/cors-non-standard-safelisted-headers-should-trigger-preflight.html:37
&gt; &gt; +                testPassed(description);
&gt; 
&gt; indentation issue.

Fixed.

&gt; &gt; LayoutTests/http/tests/xmlhttprequest/cors-non-standard-safelisted-headers-should-trigger-preflight.html:42
&gt; &gt; +                } else {
&gt; 
&gt; one liners do not need {}

Fixed along with a set of others. I did not think the one-liner rule applied to JavaScript where I believe curly brackets are encouraged in general. Nevertheless, I removed them here.

&gt; &gt; LayoutTests/http/tests/xmlhttprequest/cors-non-standard-safelisted-headers-should-trigger-preflight.html:48
&gt; &gt; +    var abnormalSimpleCorsHeaderValue = &quot;() { :;};&quot;
&gt; 
&gt; Can we have a test containing all allowed non-alphanumeric characters for
&gt; each one of the three headers?

Good idea. Fixed.

&gt; &gt; LayoutTests/http/tests/xmlhttprequest/cors-non-standard-safelisted-headers-should-trigger-preflight.html:130
&gt; &gt; +        if(invocation) {
&gt; 
&gt; space after the if.
&gt; Also why do we need that if test?
&gt; The &quot;invocation&quot;variable seems a bit strange, xhr would be more usual I
&gt; guess.

Removed the if and renamed the variable.

Thanks for the review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1255844</commentid>
    <comment_count>25</comment_count>
      <attachid>295967</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-12-02 13:34:14 -0800</bug_when>
    <thetext>Comment on attachment 295967
Patch

Clearing flags on attachment: 295967

Committed r209261: &lt;http://trac.webkit.org/changeset/209261&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1255845</commentid>
    <comment_count>26</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-12-02 13:34:19 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>295689</attachid>
            <date>2016-11-29 18:29:13 -0800</date>
            <delta_ts>2016-12-01 10:33:39 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-165178-20161129182847.patch</filename>
            <type>text/plain</type>
            <size>20316</size>
            <attacher name="John Wilander">wilander</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwOTEwNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM1IEBACisyMDE2LTExLTI5ICBKb2huIFdp
bGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlcXVpcmUgcHJlZmxpZ2h0
IGZvciBub24tc3RhbmRhcmQgQ09SUy1zYWZlbGlzdGVkIHJlcXVlc3QgaGVhZGVycyBBY2NlcHQs
IEFjY2VwdC1MYW5ndWFnZSwgYW5kIENvbnRlbnQtTGFuZ3VhZ2UKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTE3OAorICAgICAgICA8cmRhcjovL3By
b2JsZW0vMTg3OTIyNTA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgVGVzdDogaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9jb3JzLW5vbi1zdGFuZGFy
ZC1zYWZlbGlzdGVkLWhlYWRlcnMtc2hvdWxkLXRyaWdnZXItcHJlZmxpZ2h0Lmh0bWwKKworICAg
ICAgICAqIGxvYWRlci9Dcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6aXNPbkFjY2Vzc0NvbnRyb2xTaW1wbGVSZXF1ZXN0SGVhZGVyV2hpdGVsaXN0KToKKyAg
ICAgICAgICAgIE5vdyBtYWtlcyBhIGNhbGwgdG8gV2ViQ29yZTo6IGlzVmFsaWRBY2NlcHRIZWFk
ZXJWYWx1ZSBmb3IgQWNjZXB0IGhlYWRlcnMKKyAgICAgICAgICAgIGFuZCBXZWJDb3JlOjogaXNW
YWxpZExhbmd1YWdlSGVhZGVyVmFsdWUgZm9yIEFjY2VwdC1MYW5ndWFnZSBhbmQKKyAgICAgICAg
ICAgIENvbnRlbnQtTGFuZ3VhZ2UgaGVhZGVycy4KKyAgICAgICAgKiBwbGF0Zm9ybS9MYW5ndWFn
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc1ZhbGlkTGFuZ3VhZ2VIZWFkZXJWYWx1ZSk6Cisg
ICAgICAgICAgICBCYXNpYyBjaGVjayB0aGF0IHRoZSBjaGFyYWN0ZXJzIGFyZSBhbGwgQVNDSUkg
YWxwaGFudW1lcmljLCAnICcsICcqJywgJy0nLCAnLicsICc7Jywgb3IgJz0nLgorICAgICAgICAq
IHBsYXRmb3JtL0xhbmd1YWdlLmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9IVFRQUGFy
c2Vycy5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc1ZhbGlkQWNjZXB0SGVhZGVyVmFsdWUpOgor
ICAgICAgICAgICAgQmFzaWMgY2hlY2sgdGhhdCB0aGUgY2hhcmFjdGVycyBhcmUgYWxsIEFTQ0lJ
IGFscGhhbnVtZXJpYywgJyAnLCAnKicsICcuJywgJy8nLCAnOycsIG9yICc9Jy4KKyAgICAgICAg
KFdlYkNvcmU6OmlzU2ltcGxlSGVhZGVyKToKKyAgICAgICAgICAgIE5vdyBtYWtlcyBhIGNhbGwg
dG8gV2ViQ29yZTo6IGlzVmFsaWRBY2NlcHRIZWFkZXJWYWx1ZSBmb3IgQWNjZXB0IGhlYWRlcnMK
KyAgICAgICAgICAgIGFuZCBXZWJDb3JlOjogaXNWYWxpZExhbmd1YWdlSGVhZGVyVmFsdWUgZm9y
IEFjY2VwdC1MYW5ndWFnZSBhbmQKKyAgICAgICAgICAgIENvbnRlbnQtTGFuZ3VhZ2UgaGVhZGVy
cy4KKyAgICAgICAgKFdlYkNvcmU6OmlzQ3Jvc3NPcmlnaW5TYWZlUmVxdWVzdEhlYWRlcik6Cisg
ICAgICAgICAgICBOb3cgbWFrZXMgYSBjYWxsIHRvIFdlYkNvcmU6OiBpc1ZhbGlkQWNjZXB0SGVh
ZGVyVmFsdWUgZm9yIEFjY2VwdCBoZWFkZXJzCisgICAgICAgICAgICBhbmQgV2ViQ29yZTo6IGlz
VmFsaWRMYW5ndWFnZUhlYWRlclZhbHVlIGZvciBBY2NlcHQtTGFuZ3VhZ2UgYW5kCisgICAgICAg
ICAgICBDb250ZW50LUxhbmd1YWdlIGhlYWRlcnMuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29y
ay9IVFRQUGFyc2Vycy5oOgorCiAyMDE2LTExLTI5ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFw
cGxlLmNvbT4KIAogICAgICAgICBGb2xsb3d1cCB0bzoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9Dcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wuY3BwCShyZXZpc2lvbiAyMDkw
MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiSFRUUEhlYWRl
ck5hbWVzLmgiCiAjaW5jbHVkZSAiSFRUUFBhcnNlcnMuaCIKKyNpbmNsdWRlICJMYW5ndWFnZS5o
IgogI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVzcG9u
c2UuaCIKICNpbmNsdWRlICJTY2hlbWVSZWdpc3RyeS5oIgpAQCAtNDksOSArNTAsMTAgQEAgYm9v
bCBpc09uQWNjZXNzQ29udHJvbFNpbXBsZVJlcXVlc3RIZWFkZQogewogICAgIHN3aXRjaCAobmFt
ZSkgewogICAgIGNhc2UgSFRUUEhlYWRlck5hbWU6OkFjY2VwdDoKKyAgICAgICAgcmV0dXJuIGlz
VmFsaWRBY2NlcHRIZWFkZXJWYWx1ZSh2YWx1ZSk7CiAgICAgY2FzZSBIVFRQSGVhZGVyTmFtZTo6
QWNjZXB0TGFuZ3VhZ2U6CiAgICAgY2FzZSBIVFRQSGVhZGVyTmFtZTo6Q29udGVudExhbmd1YWdl
OgotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGlzVmFsaWRMYW5ndWFnZUhl
YWRlclZhbHVlKHZhbHVlKTsKICAgICBjYXNlIEhUVFBIZWFkZXJOYW1lOjpDb250ZW50VHlwZTog
ewogICAgICAgICAvLyBQcmVmbGlnaHQgaXMgcmVxdWlyZWQgZm9yIE1JTUUgdHlwZXMgdGhhdCBj
YW4gbm90IGJlIHNlbnQgdmlhIGZvcm0gc3VibWlzc2lvbi4KICAgICAgICAgU3RyaW5nIG1pbWVU
eXBlID0gZXh0cmFjdE1JTUVUeXBlRnJvbU1lZGlhVHlwZSh2YWx1ZSk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9MYW5ndWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vTGFuZ3VhZ2UuY3BwCShyZXZpc2lvbiAyMDkwMDQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9MYW5ndWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJMYW5ndWFnZS5oIgogCisjaW5jbHVk
ZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUg
PHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybVVzZXJQcmVmZXJy
ZWRMYW5ndWFnZXMuaD4KQEAgLTE4OCw0ICsxODksMzAgQEAgU3RyaW5nIGRpc3BsYXlOYW1lRm9y
TGFuZ3VhZ2VMb2NhbGUoY29ucwogICAgIHJldHVybiBsb2NhbGVOYW1lOwogfQogCisKK2Jvb2wg
aXNWYWxpZExhbmd1YWdlSGVhZGVyVmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICAv
LyBBY2NlcHQtTGFuZ3VhZ2UgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2Vj
dGlvbi01LjMuNQorICAgIC8vIENvbnRlbnQtTGFuZ3VhZ2UgaHR0cHM6Ly90b29scy5pZXRmLm9y
Zy9odG1sL3JmYzcyMzEjc2VjdGlvbi0zLjEuMy4yCisgICAgLy8gTGFuZ3VhZ2UgcmFuZ2UgaHR0
cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQ2NDcjc2VjdGlvbi0yLjEKKyAgICAvLyBMYW5n
dWFnZSB0YWdzIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tMy4x
LjMuMQorICAgIC8vIExhbmd1YWdlIHRhZyBzeW50YXggaHR0cHM6Ly90b29scy5pZXRmLm9yZy9o
dG1sL2JjcDQ3I3NlY3Rpb24tMi4xCisgICAgVUNoYXIgYzsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgdmFsdWUubGVuZ3RoKCk7ICsraSkgeworICAgICAgICBjID0gdmFsdWVbaV07Cisg
ICAgICAgIGlmICghaXNBU0NJSUFscGhhbnVtZXJpYyhjKQorICAgICAgICAgICAgJiYgYyAhPSAn
ICcKKyAgICAgICAgICAgICYmIGMgIT0gJyonCisgICAgICAgICAgICAmJiBjICE9ICctJworICAg
ICAgICAgICAgJiYgYyAhPSAnLicKKyAgICAgICAgICAgICYmIGMgIT0gJzsnCisgICAgICAgICAg
ICAmJiBjICE9ICc9JykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAv
LyBGSVhNRTogVmFsaWRhdGUgZnVydGhlciBieSBzcGxpdHRpbmcgaW50byBsYW5ndWFnZSB0YWdz
IGFuZCBvcHRpb25hbCBxdWFsaXR5CisgICAgLy8gdmFsdWVzIChxPSkgYW5kIHRoZW4gY2hlY2sg
ZWFjaCBsYW5ndWFnZSB0YWcuCisgICAgcmV0dXJuIHRydWU7Cit9CisKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0xhbmd1YWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vTGFuZ3VhZ2UuaAkocmV2aXNpb24gMjA5MDA0KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vTGFuZ3VhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsOCBAQCBX
RUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZUxhbmd1YWdlQ2hhbmdlCiAKIFN0cmluZyBkaXNwbGF5
TmFtZUZvckxhbmd1YWdlTG9jYWxlKGNvbnN0IFN0cmluZyYpOwogCitib29sIGlzVmFsaWRMYW5n
dWFnZUhlYWRlclZhbHVlKGNvbnN0IFN0cmluZyYpOworCiAvLyBDYWxsZWQgZnJvbSBwbGF0Zm9y
bSBzcGVjaWZpYyBjb2RlIHdoZW4gdGhlIHVzZXIncyBwcmVmZXJyZWQgbGFuZ3VhZ2UocykgY2hh
bmdlLgogV0VCQ09SRV9FWFBPUlQgdm9pZCBsYW5ndWFnZURpZENoYW5nZSgpOwogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQUGFyc2Vycy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQUGFyc2Vycy5jcHAJKHJl
dmlzaW9uIDIwOTAwNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRUUFBh
cnNlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiSFRU
UFBhcnNlcnMuaCIKIAogI2luY2x1ZGUgIkhUVFBIZWFkZXJOYW1lcy5oIgorI2luY2x1ZGUgIkxh
bmd1YWdlLmgiCiAjaW5jbHVkZSA8d3RmL0RhdGVNYXRoLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVy
RGVzdHJveWVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgpAQCAtMTI2LDYgKzEy
NywyNSBAQCBib29sIGlzVmFsaWRIVFRQSGVhZGVyVmFsdWUoY29uc3QgU3RyaW5nCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKKy8vIFNlZSBSRkMgNzIzMSwgU2VjdGlvbiA1LjMuMgorYm9vbCBpc1Zh
bGlkQWNjZXB0SGVhZGVyVmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBVQ2hhciBj
OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGgoKTsgKytpKSB7Cisg
ICAgICAgIGMgPSB2YWx1ZVtpXTsKKyAgICAgICAgaWYgKCFpc0FTQ0lJQWxwaGFudW1lcmljKGMp
CisgICAgICAgICAgICAmJiBjICE9ICcgJworICAgICAgICAgICAgJiYgYyAhPSAnKicKKyAgICAg
ICAgICAgICYmIGMgIT0gJy4nCisgICAgICAgICAgICAmJiBjICE9ICcvJworICAgICAgICAgICAg
JiYgYyAhPSAnOycKKyAgICAgICAgICAgICYmIGMgIT0gJz0nKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyAgICAKIC8vIFNlZSBS
RkMgNzIzMCwgU2VjdGlvbiAzLjIuNi4KIGJvb2wgaXNWYWxpZEhUVFBUb2tlbihjb25zdCBTdHJp
bmcmIHZhbHVlKQogewpAQCAtNzMyLDcgKzc1Miw3IEBAIHZvaWQgcGFyc2VBY2Nlc3NDb250cm9s
RXhwb3NlSGVhZGVyc0FsbG8KICAgICB9CiB9CiAKLS8vIEltcGxlbWVtdG5hdGlvbiBvZiBodHRw
czovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29ycy1zYWZlbGlzdGVkLXJlc3BvbnNlLWhlYWRl
ci1uYW1lCisvLyBJbXBsZW1lbnRhdGlvbiBvZiBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9y
Zy8jY29ycy1zYWZlbGlzdGVkLXJlc3BvbnNlLWhlYWRlci1uYW1lCiBib29sIGlzRm9yYmlkZGVu
SGVhZGVyTmFtZShjb25zdCBTdHJpbmcmIG5hbWUpCiB7CiAgICAgSFRUUEhlYWRlck5hbWUgaGVh
ZGVyTmFtZTsKQEAgLTc3OCw5ICs3OTgsMTAgQEAgYm9vbCBpc1NpbXBsZUhlYWRlcihjb25zdCBT
dHJpbmcmIG5hbWUsIAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgc3dpdGNoIChoZWFkZXJO
YW1lKSB7CiAgICAgY2FzZSBIVFRQSGVhZGVyTmFtZTo6QWNjZXB0OgorICAgICAgICByZXR1cm4g
aXNWYWxpZEFjY2VwdEhlYWRlclZhbHVlKHZhbHVlKTsKICAgICBjYXNlIEhUVFBIZWFkZXJOYW1l
OjpBY2NlcHRMYW5ndWFnZToKICAgICBjYXNlIEhUVFBIZWFkZXJOYW1lOjpDb250ZW50TGFuZ3Vh
Z2U6Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gaXNWYWxpZExhbmd1YWdl
SGVhZGVyVmFsdWUodmFsdWUpOwogICAgIGNhc2UgSFRUUEhlYWRlck5hbWU6OkNvbnRlbnRUeXBl
OiB7CiAgICAgICAgIFN0cmluZyBtaW1lVHlwZSA9IGV4dHJhY3RNSU1FVHlwZUZyb21NZWRpYVR5
cGUodmFsdWUpOwogICAgICAgICByZXR1cm4gZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uo
bWltZVR5cGUsICJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKSB8fCBlcXVhbExl
dHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShtaW1lVHlwZSwgIm11bHRpcGFydC9mb3JtLWRhdGEiKSB8
fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShtaW1lVHlwZSwgInRleHQvcGxhaW4iKTsK
QEAgLTgyNCw5ICs4NDUsMTAgQEAgYm9vbCBpc0Nyb3NzT3JpZ2luU2FmZVJlcXVlc3RIZWFkZXIo
SFRUUAogewogICAgIHN3aXRjaCAobmFtZSkgewogICAgIGNhc2UgSFRUUEhlYWRlck5hbWU6OkFj
Y2VwdDoKKyAgICAgICAgcmV0dXJuIGlzVmFsaWRBY2NlcHRIZWFkZXJWYWx1ZSh2YWx1ZSk7CiAg
ICAgY2FzZSBIVFRQSGVhZGVyTmFtZTo6QWNjZXB0TGFuZ3VhZ2U6CiAgICAgY2FzZSBIVFRQSGVh
ZGVyTmFtZTo6Q29udGVudExhbmd1YWdlOgotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
cmV0dXJuIGlzVmFsaWRMYW5ndWFnZUhlYWRlclZhbHVlKHZhbHVlKTsKICAgICBjYXNlIEhUVFBI
ZWFkZXJOYW1lOjpDb250ZW50VHlwZTogewogICAgICAgICBTdHJpbmcgbWltZVR5cGUgPSBleHRy
YWN0TUlNRVR5cGVGcm9tTWVkaWFUeXBlKHZhbHVlKTsKICAgICAgICAgcmV0dXJuIGVxdWFsTGV0
dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG1pbWVUeXBlLCAiYXBwbGljYXRpb24veC13d3ctZm9ybS11
cmxlbmNvZGVkIikgfHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobWltZVR5cGUsICJt
dWx0aXBhcnQvZm9ybS1kYXRhIikgfHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobWlt
ZVR5cGUsICJ0ZXh0L3BsYWluIik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL0hUVFBQYXJzZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9IVFRQUGFyc2Vycy5oCShyZXZpc2lvbiAyMDkwMDQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBQYXJzZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDYg
KzY5LDcgQEAgZW51bSBYRnJhbWVPcHRpb25zRGlzcG9zaXRpb24gewogCiBib29sIGlzVmFsaWRS
ZWFzb25QaHJhc2UoY29uc3QgU3RyaW5nJik7CiBib29sIGlzVmFsaWRIVFRQSGVhZGVyVmFsdWUo
Y29uc3QgU3RyaW5nJik7Citib29sIGlzVmFsaWRBY2NlcHRIZWFkZXJWYWx1ZShjb25zdCBTdHJp
bmcmKTsKIGJvb2wgaXNWYWxpZEhUVFBUb2tlbihjb25zdCBTdHJpbmcmKTsKIGJvb2wgcGFyc2VI
VFRQUmVmcmVzaChjb25zdCBTdHJpbmcmIHJlZnJlc2gsIGRvdWJsZSYgZGVsYXksIFN0cmluZyYg
dXJsKTsKIHN0ZDo6b3B0aW9uYWw8c3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6dGltZV9wb2lu
dD4gcGFyc2VIVFRQRGF0ZShjb25zdCBTdHJpbmcmKTsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwOTAw
NCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5
IEBACisyMDE2LTExLTI5ICBKb2huIFdpbGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisg
ICAgICAgIFJlcXVpcmUgcHJlZmxpZ2h0IGZvciBub24tc3RhbmRhcmQgQ09SUy1zYWZlbGlzdGVk
IHJlcXVlc3QgaGVhZGVycyBBY2NlcHQsIEFjY2VwdC1MYW5ndWFnZSwgYW5kIENvbnRlbnQtTGFu
Z3VhZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
NTE3OAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTg3OTIyNTA+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBodHRwL3Rlc3RzL3htbGh0dHByZXF1
ZXN0L2NvcnMtbm9uLXN0YW5kYXJkLXNhZmVsaXN0ZWQtaGVhZGVycy1zaG91bGQtdHJpZ2dlci1w
cmVmbGlnaHQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3htbGh0
dHByZXF1ZXN0L2NvcnMtbm9uLXN0YW5kYXJkLXNhZmVsaXN0ZWQtaGVhZGVycy1zaG91bGQtdHJp
Z2dlci1wcmVmbGlnaHQuaHRtbDogQWRkZWQuCisgICAgICAgICAgICBUZXN0cyB0aGF0OgorICAg
ICAgICAgICAgICAgIE5vcm1hbCBBY2NlcHQsIEFjY2VwdC1MYW5ndWFnZSwgYW5kIENvbnRlbnQt
TGFuZ3VhZ2UgaGVhZGVycyBkb24ndCB0cmlnZ2VyIGEgcHJlZmxpZ2h0LgorICAgICAgICAgICAg
ICAgIEFibm9ybWFsIEFjY2VwdCwgQWNjZXB0LUxhbmd1YWdlLCBhbmQgQ29udGVudC1MYW5ndWFn
ZSBoZWFkZXJzIGRvIHRyaWdnZXIgYSBwcmVmbGlnaHQuCisgICAgICAgICAgICAgICAgQWJub3Jt
YWwgQWNjZXB0LCBBY2NlcHQtTGFuZ3VhZ2UsIGFuZCBDb250ZW50LUxhbmd1YWdlIGhlYWRlcnMg
YXJlIGFjY2VwdGVkIGlmIHRoZSBzZXJ2ZXIgd2hpdGVsaXN0cyB0aGVtLgorICAgICAgICAqIGh0
dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvcmVzb3VyY2VzL2NvcnMtcHJlZmxpZ2h0LXNhZmVsaXN0
ZWQtaGVhZGVycy1yZXNwb25kZXIucGhwOiBBZGRlZC4KKwogMjAxNi0xMS0yOCAgQW50dGkgS29p
dmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIEZJUlNUX0xJTkVfSU5I
RVJJVEVEIGZha2UgcHNldWRvIHN0eWxlCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3ht
bGh0dHByZXF1ZXN0L2NvcnMtbm9uLXN0YW5kYXJkLXNhZmVsaXN0ZWQtaGVhZGVycy1zaG91bGQt
dHJpZ2dlci1wcmVmbGlnaHQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvY29ycy1ub24tc3RhbmRhcmQtc2FmZWxpc3RlZC1o
ZWFkZXJzLXNob3VsZC10cmlnZ2VyLXByZWZsaWdodC1leHBlY3RlZC50eHQJKG5vbmV4aXN0ZW50
KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9jb3JzLW5vbi1zdGFu
ZGFyZC1zYWZlbGlzdGVkLWhlYWRlcnMtc2hvdWxkLXRyaWdnZXItcHJlZmxpZ2h0LWV4cGVjdGVk
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE4IEBACitDT05TT0xFIE1FU1NBR0U6IFhN
TEh0dHBSZXF1ZXN0IGNhbm5vdCBsb2FkIGh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC94bWxodHRwcmVx
dWVzdC9yZXNvdXJjZXMvY29ycy1wcmVmbGlnaHQtc2FmZWxpc3RlZC1oZWFkZXJzLXJlc3BvbmRl
ci5waHAuIFJlcXVlc3QgaGVhZGVyIGZpZWxkIEFjY2VwdCBpcyBub3QgYWxsb3dlZCBieSBBY2Nl
c3MtQ29udHJvbC1BbGxvdy1IZWFkZXJzLgorQ09OU09MRSBNRVNTQUdFOiBYTUxIdHRwUmVxdWVz
dCBjYW5ub3QgbG9hZCBodHRwOi8vbG9jYWxob3N0OjgwMDAveG1saHR0cHJlcXVlc3QvcmVzb3Vy
Y2VzL2NvcnMtcHJlZmxpZ2h0LXNhZmVsaXN0ZWQtaGVhZGVycy1yZXNwb25kZXIucGhwLiBSZXF1
ZXN0IGhlYWRlciBmaWVsZCBBY2NlcHQtTGFuZ3VhZ2UgaXMgbm90IGFsbG93ZWQgYnkgQWNjZXNz
LUNvbnRyb2wtQWxsb3ctSGVhZGVycy4KK0NPTlNPTEUgTUVTU0FHRTogWE1MSHR0cFJlcXVlc3Qg
Y2Fubm90IGxvYWQgaHR0cDovL2xvY2FsaG9zdDo4MDAwL3htbGh0dHByZXF1ZXN0L3Jlc291cmNl
cy9jb3JzLXByZWZsaWdodC1zYWZlbGlzdGVkLWhlYWRlcnMtcmVzcG9uZGVyLnBocC4gUmVxdWVz
dCBoZWFkZXIgZmllbGQgQ29udGVudC1MYW5ndWFnZSBpcyBub3QgYWxsb3dlZCBieSBBY2Nlc3Mt
Q29udHJvbC1BbGxvdy1IZWFkZXJzLgorQ09OU09MRSBNRVNTQUdFOiBYTUxIdHRwUmVxdWVzdCBj
YW5ub3QgbG9hZCBodHRwOi8vbG9jYWxob3N0OjgwMDAveG1saHR0cHJlcXVlc3QvcmVzb3VyY2Vz
L2NvcnMtcHJlZmxpZ2h0LXNhZmVsaXN0ZWQtaGVhZGVycy1yZXNwb25kZXIucGhwLiBSZXF1ZXN0
IGhlYWRlciBmaWVsZCBDb250ZW50LUxhbmd1YWdlIGlzIG5vdCBhbGxvd2VkIGJ5IEFjY2Vzcy1D
b250cm9sLUFsbG93LUhlYWRlcnMuCitDT05TT0xFIE1FU1NBR0U6IFhNTEh0dHBSZXF1ZXN0IGNh
bm5vdCBsb2FkIGh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC94bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMv
Y29ycy1wcmVmbGlnaHQtc2FmZWxpc3RlZC1oZWFkZXJzLXJlc3BvbmRlci5waHAuIFJlcXVlc3Qg
aGVhZGVyIGZpZWxkIEFjY2VwdCBpcyBub3QgYWxsb3dlZCBieSBBY2Nlc3MtQ29udHJvbC1BbGxv
dy1IZWFkZXJzLgorUEFTUyBBY2NlcHQgaGVhZGVyIHdpdGggbm9ybWFsIHZhbHVlIFNIT1VMRCBO
T1QgY2F1c2UgYSBwcmVmbGlnaHQKK1BBU1MgQWNjZXB0LUxhbmd1YWdlIGhlYWRlciB3aXRoIG5v
cm1hbCB2YWx1ZSBTSE9VTEQgTk9UIGNhdXNlIGEgcHJlZmxpZ2h0CitQQVNTIENvbnRlbnQtTGFu
Z3VhZ2UgaGVhZGVyIHdpdGggbm9ybWFsIHZhbHVlIFNIT1VMRCBOT1QgY2F1c2UgYSBwcmVmbGln
aHQKK1BBU1MgQWNjZXB0IGhlYWRlciB3aXRoIGFibm9ybWFsIHZhbHVlIFNIT1VMRCBjYXVzZSBh
IHByZWZsaWdodAorUEFTUyBBY2NlcHQtTGFuZ3VhZ2UgaGVhZGVyIHdpdGggYWJub3JtYWwgdmFs
dWUgU0hPVUxEIGNhdXNlIGEgcHJlZmxpZ2h0CitQQVNTIENvbnRlbnQtTGFuZ3VhZ2UgaGVhZGVy
IHdpdGggYWJub3JtYWwgdmFsdWUgU0hPVUxEIGNhdXNlIGEgcHJlZmxpZ2h0CitQQVNTIEFjY2Vw
dCBoZWFkZXIgd2l0aCBub3JtYWwgdmFsdWUsIEFjY2VwdC1MYW5ndWFnZSBoZWFkZXIgd2l0aCBu
b3JtYWwgdmFsdWUsIGFuZCBDb250ZW50LUxhbmd1YWdlIGhlYWRlciB3aXRoIGFibm9ybWFsIHZh
bHVlIFNIT1VMRCBjYXVzZSBhIHByZWZsaWdodAorUEFTUyBBY2NlcHQgaGVhZGVyIHdpdGggbm9y
bWFsIHZhbHVlIGFuZCB0aGVuIGFub3RoZXIgQWNjZXB0IGhlYWRlciB3aXRoIGFibm9ybWFsIHZh
bHVlIFNIT1VMRCBjYXVzZSBhIHByZWZsaWdodAorUEFTUyBBY2NlcHQgaGVhZGVyIHdpdGggYWJu
b3JtYWwgdmFsdWUgYW5kIGV4cGxpY2l0bHkgYWxsb3dlZCBoZWFkZXJzIFNIT1VMRCBiZSBhbGxv
d2VkCitQQVNTIENvbnRlbnQtTGFuZ3VhZ2UgaGVhZGVyIHdpdGggYWJub3JtYWwgdmFsdWUgYW5k
IGV4cGxpY2l0bHkgYWxsb3dlZCBoZWFkZXJzIFNIT1VMRCBiZSBhbGxvd2VkCitQQVNTIEFjY2Vw
dCBoZWFkZXIgd2l0aCBub3JtYWwgdmFsdWUsIEFjY2VwdC1MYW5ndWFnZSBoZWFkZXIgd2l0aCBu
b3JtYWwgdmFsdWUsIENvbnRlbnQtTGFuZ3VhZ2UgaGVhZGVyIHdpdGggYWJub3JtYWwgdmFsdWUs
IGFuZCBleHBsaWNpdGx5IGFsbG93ZWQgaGVhZGVycyBTSE9VTEQgYmUgYWxsb3dlZAorUEFTUyBB
Y2NlcHQgaGVhZGVyIHdpdGggbm9ybWFsIHZhbHVlLCB0aGVuIGFub3RoZXIgQWNjZXB0IGhlYWRl
ciB3aXRoIGFibm9ybWFsIHZhbHVlLCBhbmQgZXhwbGljaXRseSBhbGxvd2VkIGhlYWRlcnMgU0hP
VUxEIGJlIGFsbG93ZWQKKwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVx
dWVzdC9jb3JzLW5vbi1zdGFuZGFyZC1zYWZlbGlzdGVkLWhlYWRlcnMtc2hvdWxkLXRyaWdnZXIt
cHJlZmxpZ2h0Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxo
dHRwcmVxdWVzdC9jb3JzLW5vbi1zdGFuZGFyZC1zYWZlbGlzdGVkLWhlYWRlcnMtc2hvdWxkLXRy
aWdnZXItcHJlZmxpZ2h0Lmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy94bWxodHRwcmVxdWVzdC9jb3JzLW5vbi1zdGFuZGFyZC1zYWZlbGlzdGVkLWhlYWRlcnMt
c2hvdWxkLXRyaWdnZXItcHJlZmxpZ2h0Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
NDcgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+CisgICAgPG1l
dGEgY2hhcnNldD0iVVRGLTgiPgorICAgIDx0aXRsZT5Ob24tU3RhbmRhcmQgU2FmZWxpc3RlZCBI
ZWFkZXJzIFNIT1VMRCBUcmlnZ2VyIGEgUHJlZmxpZ2h0PC90aXRsZT4KKyAgICA8c2NyaXB0IHNy
Yz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5
PgorPCEtLSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29ycy1zYWZlbGlzdGVkLXJl
cXVlc3QtaGVhZGVyIC0tPgorPHNjcmlwdD4KKyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpIHsK
KyAgICAgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisgICAgICAgIHRlc3RSdW5uZXIud2Fp
dFVudGlsRG9uZSgpOworICAgIH0KKworICAgIHZhciBpbnZvY2F0aW9uOworICAgIHZhciB1cmwg
PSAnaHR0cDovL2xvY2FsaG9zdDo4MDAwL3htbGh0dHByZXF1ZXN0L3Jlc291cmNlcy9jb3JzLXBy
ZWZsaWdodC1zYWZlbGlzdGVkLWhlYWRlcnMtcmVzcG9uZGVyLnBocCc7CisKKyAgICBmdW5jdGlv
biBjcmVhdGVSZWFkeVN0YXRlSGFuZGxlciAoZGVzY3JpcHRpb24sIHRlc3ROdW1iZXIpIHsKKyAg
ICAgICAgcmV0dXJuIGZ1bmN0aW9uIGhhbmRsZXIgKGUpIHsKKyAgICAgICAgICAgIGlmIChpbnZv
Y2F0aW9uLnJlYWR5U3RhdGUgPT09IFhNTEh0dHBSZXF1ZXN0LkRPTkUpIHsKKyAgICAgICAgICAg
ICAgICB0ZXN0UGFzc2VkKGRlc2NyaXB0aW9uKTsKKyAgICAgICAgICAgICAgICBpZiAodGVzdE51
bWJlciA9PT0gKHRlc3RDYXNlcy5sZW5ndGggLSAxKSkgeworICAgICAgICAgICAgICAgICAgICBp
ZiAod2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RSdW5u
ZXIubm90aWZ5RG9uZSgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcnVuVGVzdENhc2UodGVzdE51bWJlciArIDEp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGZ1bmN0aW9uIGNyZWF0ZU9uRXJyb3JIYW5kbGVyIChkZXNjcmlwdGlvbiwgdGVzdE51bWJl
cikgeworICAgICAgICByZXR1cm4gZnVuY3Rpb24gaGFuZGxlciAoZSkgeworICAgICAgICAgICAg
ICAgIGUucHJldmVudERlZmF1bHQoKTsKKyAgICAgICAgICAgICAgICB0ZXN0UGFzc2VkKGRlc2Ny
aXB0aW9uKTsKKyAgICAgICAgICAgICAgICBpZiAodGVzdE51bWJlciA9PT0gKHRlc3RDYXNlcy5s
ZW5ndGggLSAxKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgcnVuVGVzdENhc2UodGVzdE51bWJlciArIDEpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICB9CisKKyAgICB2YXIgYWJub3JtYWxTaW1wbGVDb3JzSGVhZGVy
VmFsdWUgPSAiKCkgeyA6O307IgorICAgIHZhciB0ZXN0Q2FzZXMgPSBbCisgICAgICAgIC8vIFBv
c2l0aXZlIHRlc3QgY2FzZXMgd2l0aCBub3JtYWwgaGVhZGVycworICAgICAgICB7CisgICAgICAg
ICAgICBoZWFkZXJzVG9BZGQ6IFt7IG5hbWUgOiAiQWNjZXB0IiwgdmFsdWU6ICJ0ZXh0LyoiIH1d
LAorICAgICAgICAgICAgZXhwbGljaXRseUFsbG93SGVhZGVyczogZmFsc2UsCisgICAgICAgICAg
ICBzaG91bGRDYXVzZVByZWZsaWdodDogZmFsc2UsCisgICAgICAgICAgICBkZXNjcmlwdGlvbjog
IkFjY2VwdCBoZWFkZXIgd2l0aCBub3JtYWwgdmFsdWUgU0hPVUxEIE5PVCBjYXVzZSBhIHByZWZs
aWdodCIKKyAgICAgICAgfQorICAgICAgICAseworICAgICAgICAgICAgaGVhZGVyc1RvQWRkOiBb
eyBuYW1lIDogIkFjY2VwdC1MYW5ndWFnZSIsIHZhbHVlOiAiZW4iIH1dLAorICAgICAgICAgICAg
ZXhwbGljaXRseUFsbG93SGVhZGVyczogZmFsc2UsCisgICAgICAgICAgICBzaG91bGRDYXVzZVBy
ZWZsaWdodDogZmFsc2UsCisgICAgICAgICAgICBkZXNjcmlwdGlvbjogIkFjY2VwdC1MYW5ndWFn
ZSBoZWFkZXIgd2l0aCBub3JtYWwgdmFsdWUgU0hPVUxEIE5PVCBjYXVzZSBhIHByZWZsaWdodCIK
KyAgICAgICAgfQorICAgICAgICAseworICAgICAgICAgICAgaGVhZGVyc1RvQWRkOiBbeyBuYW1l
IDogIkNvbnRlbnQtTGFuZ3VhZ2UiLCB2YWx1ZTogImVuIiB9XSwKKyAgICAgICAgICAgIGV4cGxp
Y2l0bHlBbGxvd0hlYWRlcnM6IGZhbHNlLAorICAgICAgICAgICAgc2hvdWxkQ2F1c2VQcmVmbGln
aHQ6IGZhbHNlLAorICAgICAgICAgICAgZGVzY3JpcHRpb246ICJDb250ZW50LUxhbmd1YWdlIGhl
YWRlciB3aXRoIG5vcm1hbCB2YWx1ZSBTSE9VTEQgTk9UIGNhdXNlIGEgcHJlZmxpZ2h0IgorICAg
ICAgICB9CisgICAgICAgIC8vIE5lZ2F0aXZlIHRlc3QgY2FzZXMgd2l0aCBhYm5vcm1hbCBoZWFk
ZXJzCisgICAgICAgICx7CisgICAgICAgICAgICBoZWFkZXJzVG9BZGQ6IFt7IG5hbWUgOiAiQWNj
ZXB0IiwgdmFsdWU6IGFibm9ybWFsU2ltcGxlQ29yc0hlYWRlclZhbHVlIH1dLAorICAgICAgICAg
ICAgZXhwbGljaXRseUFsbG93SGVhZGVyczogZmFsc2UsCisgICAgICAgICAgICBzaG91bGRDYXVz
ZVByZWZsaWdodDogdHJ1ZSwKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAiQWNjZXB0IGhlYWRl
ciB3aXRoIGFibm9ybWFsIHZhbHVlIFNIT1VMRCBjYXVzZSBhIHByZWZsaWdodCIKKyAgICAgICAg
fQorICAgICAgICAseworICAgICAgICAgICAgaGVhZGVyc1RvQWRkOiBbeyBuYW1lIDogIkFjY2Vw
dC1MYW5ndWFnZSIsIHZhbHVlOiBhYm5vcm1hbFNpbXBsZUNvcnNIZWFkZXJWYWx1ZSB9XSwKKyAg
ICAgICAgICAgIGV4cGxpY2l0bHlBbGxvd0hlYWRlcnM6IGZhbHNlLAorICAgICAgICAgICAgc2hv
dWxkQ2F1c2VQcmVmbGlnaHQ6IHRydWUsCisgICAgICAgICAgICBkZXNjcmlwdGlvbjogIkFjY2Vw
dC1MYW5ndWFnZSBoZWFkZXIgd2l0aCBhYm5vcm1hbCB2YWx1ZSBTSE9VTEQgY2F1c2UgYSBwcmVm
bGlnaHQiCisgICAgICAgIH0KKyAgICAgICAgLHsKKyAgICAgICAgICAgIGhlYWRlcnNUb0FkZDog
W3sgbmFtZSA6ICJDb250ZW50LUxhbmd1YWdlIiwgdmFsdWU6IGFibm9ybWFsU2ltcGxlQ29yc0hl
YWRlclZhbHVlIH1dLAorICAgICAgICAgICAgZXhwbGljaXRseUFsbG93SGVhZGVyczogZmFsc2Us
CisgICAgICAgICAgICBzaG91bGRDYXVzZVByZWZsaWdodDogdHJ1ZSwKKyAgICAgICAgICAgIGRl
c2NyaXB0aW9uOiAiQ29udGVudC1MYW5ndWFnZSBoZWFkZXIgd2l0aCBhYm5vcm1hbCB2YWx1ZSBT
SE9VTEQgY2F1c2UgYSBwcmVmbGlnaHQiCisgICAgICAgIH0KKyAgICAgICAgLHsKKyAgICAgICAg
ICAgIGhlYWRlcnNUb0FkZDogW3sgbmFtZSA6ICJBY2NlcHQiLCB2YWx1ZTogInRleHQvKiIgfSwg
eyBuYW1lIDogIkFjY2VwdC1MYW5ndWFnZSIsIHZhbHVlOiAiZW4iIH0sIHsgbmFtZSA6ICJDb250
ZW50LUxhbmd1YWdlIiwgdmFsdWU6IGFibm9ybWFsU2ltcGxlQ29yc0hlYWRlclZhbHVlIH1dLAor
ICAgICAgICAgICAgZXhwbGljaXRseUFsbG93SGVhZGVyczogZmFsc2UsCisgICAgICAgICAgICBz
aG91bGRDYXVzZVByZWZsaWdodDogdHJ1ZSwKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAiQWNj
ZXB0IGhlYWRlciB3aXRoIG5vcm1hbCB2YWx1ZSwgQWNjZXB0LUxhbmd1YWdlIGhlYWRlciB3aXRo
IG5vcm1hbCB2YWx1ZSwgYW5kIENvbnRlbnQtTGFuZ3VhZ2UgaGVhZGVyIHdpdGggYWJub3JtYWwg
dmFsdWUgU0hPVUxEIGNhdXNlIGEgcHJlZmxpZ2h0IgorICAgICAgICB9CisgICAgICAgICx7Cisg
ICAgICAgICAgICBoZWFkZXJzVG9BZGQ6IFt7IG5hbWUgOiAiQWNjZXB0IiwgdmFsdWU6ICJ0ZXh0
LyoiIH0sIHsgbmFtZSA6ICJBY2NlcHQiLCB2YWx1ZTogYWJub3JtYWxTaW1wbGVDb3JzSGVhZGVy
VmFsdWUgfV0sCisgICAgICAgICAgICBleHBsaWNpdGx5QWxsb3dIZWFkZXJzOiBmYWxzZSwKKyAg
ICAgICAgICAgIHNob3VsZENhdXNlUHJlZmxpZ2h0OiB0cnVlLAorICAgICAgICAgICAgZGVzY3Jp
cHRpb246ICJBY2NlcHQgaGVhZGVyIHdpdGggbm9ybWFsIHZhbHVlIGFuZCB0aGVuIGFub3RoZXIg
QWNjZXB0IGhlYWRlciB3aXRoIGFibm9ybWFsIHZhbHVlIFNIT1VMRCBjYXVzZSBhIHByZWZsaWdo
dCIKKyAgICAgICAgfQorICAgICAgICAvLyBQb3NpdGl2ZSB0ZXN0IGNhc2VzIHdpdGggYWJub3Jt
YWwgaGVhZGVycworICAgICAgICAseworICAgICAgICAgICAgaGVhZGVyc1RvQWRkOiBbeyBuYW1l
IDogIkFjY2VwdCIsIHZhbHVlOiBhYm5vcm1hbFNpbXBsZUNvcnNIZWFkZXJWYWx1ZSB9XSwKKyAg
ICAgICAgICAgIGV4cGxpY2l0bHlBbGxvd0hlYWRlcnM6IHRydWUsCisgICAgICAgICAgICBzaG91
bGRDYXVzZVByZWZsaWdodDogdHJ1ZSwKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAiQWNjZXB0
IGhlYWRlciB3aXRoIGFibm9ybWFsIHZhbHVlIGFuZCBleHBsaWNpdGx5IGFsbG93ZWQgaGVhZGVy
cyBTSE9VTEQgYmUgYWxsb3dlZCIKKyAgICAgICAgfQorICAgICAgICAseworICAgICAgICAgICAg
aGVhZGVyc1RvQWRkOiBbeyBuYW1lIDogIkNvbnRlbnQtTGFuZ3VhZ2UiLCB2YWx1ZTogYWJub3Jt
YWxTaW1wbGVDb3JzSGVhZGVyVmFsdWUgfV0sCisgICAgICAgICAgICBleHBsaWNpdGx5QWxsb3dI
ZWFkZXJzOiB0cnVlLAorICAgICAgICAgICAgc2hvdWxkQ2F1c2VQcmVmbGlnaHQ6IHRydWUsCisg
ICAgICAgICAgICBkZXNjcmlwdGlvbjogIkNvbnRlbnQtTGFuZ3VhZ2UgaGVhZGVyIHdpdGggYWJu
b3JtYWwgdmFsdWUgYW5kIGV4cGxpY2l0bHkgYWxsb3dlZCBoZWFkZXJzIFNIT1VMRCBiZSBhbGxv
d2VkIgorICAgICAgICB9CisgICAgICAgICx7CisgICAgICAgICAgICBoZWFkZXJzVG9BZGQ6IFt7
IG5hbWUgOiAiQWNjZXB0IiwgdmFsdWU6ICJ0ZXh0LyoiIH0sIHsgbmFtZSA6ICJBY2NlcHQtTGFu
Z3VhZ2UiLCB2YWx1ZTogImVuIiB9LCB7IG5hbWUgOiAiQ29udGVudC1MYW5ndWFnZSIsIHZhbHVl
OiBhYm5vcm1hbFNpbXBsZUNvcnNIZWFkZXJWYWx1ZSB9XSwKKyAgICAgICAgICAgIGV4cGxpY2l0
bHlBbGxvd0hlYWRlcnM6IHRydWUsCisgICAgICAgICAgICBzaG91bGRDYXVzZVByZWZsaWdodDog
dHJ1ZSwKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAiQWNjZXB0IGhlYWRlciB3aXRoIG5vcm1h
bCB2YWx1ZSwgQWNjZXB0LUxhbmd1YWdlIGhlYWRlciB3aXRoIG5vcm1hbCB2YWx1ZSwgQ29udGVu
dC1MYW5ndWFnZSBoZWFkZXIgd2l0aCBhYm5vcm1hbCB2YWx1ZSwgYW5kIGV4cGxpY2l0bHkgYWxs
b3dlZCBoZWFkZXJzIFNIT1VMRCBiZSBhbGxvd2VkIgorICAgICAgICB9CisgICAgICAgICx7Cisg
ICAgICAgICAgICBoZWFkZXJzVG9BZGQ6IFt7IG5hbWUgOiAiQWNjZXB0IiwgdmFsdWU6ICJ0ZXh0
LyoiIH0sIHsgbmFtZSA6ICJBY2NlcHQiLCB2YWx1ZTogYWJub3JtYWxTaW1wbGVDb3JzSGVhZGVy
VmFsdWUgfV0sCisgICAgICAgICAgICBleHBsaWNpdGx5QWxsb3dIZWFkZXJzOiB0cnVlLAorICAg
ICAgICAgICAgc2hvdWxkQ2F1c2VQcmVmbGlnaHQ6IHRydWUsCisgICAgICAgICAgICBkZXNjcmlw
dGlvbjogIkFjY2VwdCBoZWFkZXIgd2l0aCBub3JtYWwgdmFsdWUsIHRoZW4gYW5vdGhlciBBY2Nl
cHQgaGVhZGVyIHdpdGggYWJub3JtYWwgdmFsdWUsIGFuZCBleHBsaWNpdGx5IGFsbG93ZWQgaGVh
ZGVycyBTSE9VTEQgYmUgYWxsb3dlZCIKKyAgICAgICAgfQorICAgIF07CisKKyAgICBmdW5jdGlv
biBydW5UZXN0Q2FzZSh0ZXN0TnVtYmVyKSB7CisgICAgICAgIHZhciB0ZXN0Q2FzZSA9IHRlc3RD
YXNlc1t0ZXN0TnVtYmVyXTsKKyAgICAgICAgaW52b2NhdGlvbiA9IG5ldyBYTUxIdHRwUmVxdWVz
dCgpOworICAgICAgICBpZihpbnZvY2F0aW9uKSB7CisgICAgICAgICAgICBpbnZvY2F0aW9uLm9w
ZW4oJ0dFVCcsIHVybCArICh0ZXN0Q2FzZS5leHBsaWNpdGx5QWxsb3dIZWFkZXJzID8gIi8/ZXhw
bGljaXRseUFsbG93SGVhZGVycz10cnVlIiA6ICIiKSwgdHJ1ZSk7CisgICAgICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IHRlc3RDYXNlLmhlYWRlcnNUb0FkZC5sZW5ndGg7IGkrKykgeworICAg
ICAgICAgICAgICAgIGludm9jYXRpb24uc2V0UmVxdWVzdEhlYWRlcih0ZXN0Q2FzZS5oZWFkZXJz
VG9BZGRbaV0ubmFtZSwgdGVzdENhc2UuaGVhZGVyc1RvQWRkW2ldLnZhbHVlKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmICh0ZXN0Q2FzZS5zaG91bGRDYXVzZVByZWZsaWdodCAmJiAh
dGVzdENhc2UuZXhwbGljaXRseUFsbG93SGVhZGVycykgeworICAgICAgICAgICAgICAgIGludm9j
YXRpb24ub25lcnJvciA9IGNyZWF0ZU9uRXJyb3JIYW5kbGVyKHRlc3RDYXNlLmRlc2NyaXB0aW9u
LCB0ZXN0TnVtYmVyKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaW52
b2NhdGlvbi5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBjcmVhdGVSZWFkeVN0YXRlSGFuZGxlcih0ZXN0
Q2FzZS5kZXNjcmlwdGlvbiwgdGVzdE51bWJlcik7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpbnZvY2F0aW9uLnNlbmQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJ1blRlc3RDYXNl
KDApOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg
ZmlsZQpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9yZXNvdXJj
ZXMvY29ycy1wcmVmbGlnaHQtc2FmZWxpc3RlZC1oZWFkZXJzLXJlc3BvbmRlci5waHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMv
Y29ycy1wcmVmbGlnaHQtc2FmZWxpc3RlZC1oZWFkZXJzLXJlc3BvbmRlci5waHAJKG5vbmV4aXN0
ZW50KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMv
Y29ycy1wcmVmbGlnaHQtc2FmZWxpc3RlZC1oZWFkZXJzLXJlc3BvbmRlci5waHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw4IEBACis8P3BocAoraGVhZGVyKCdBY2Nlc3MtQ29udHJvbC1BbGxv
dy1PcmlnaW46IGh0dHA6Ly8xMjcuMC4wLjE6ODAwMCcpOworCitpZiAoJF9TRVJWRVJbJ1JFUVVF
U1RfTUVUSE9EJ10gPT0gJ09QVElPTlMnICYmIGlzc2V0KCRfR0VUWydleHBsaWNpdGx5QWxsb3dI
ZWFkZXJzJ10pKSB7CisgICAgaGVhZGVyKCdBY2Nlc3MtQ29udHJvbC1BbGxvdy1NZXRob2RzOiBH
RVQsIE9QVElPTlMnKTsKKyAgICBoZWFkZXIoJ0FjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnM6
IEFjY2VwdCwgQWNjZXB0LUxhbmd1YWdlLCBDb250ZW50LUxhbmd1YWdlJyk7Cit9Cis/PgpcIE5v
IG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>295863</attachid>
            <date>2016-12-01 10:33:43 -0800</date>
            <delta_ts>2016-12-02 11:18:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-165178-20161201103314.patch</filename>
            <type>text/plain</type>
            <size>21055</size>
            <attacher name="John Wilander">wilander</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwOTE4NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU1IEBACisyMDE2LTEyLTAxICBKb2huIFdp
bGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlcXVpcmUgcHJlZmxpZ2h0
IGZvciBub24tc3RhbmRhcmQgQ09SUy1zYWZlbGlzdGVkIHJlcXVlc3QgaGVhZGVycyBBY2NlcHQs
IEFjY2VwdC1MYW5ndWFnZSwgYW5kIENvbnRlbnQtTGFuZ3VhZ2UKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTE3OAorICAgICAgICA8cmRhcjovL3By
b2JsZW0vMTg3OTIyNTA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgRmV0Y2ggY3VycmVudGx5IG9ubHkgcmVzdHJpY3RzIHRoZSBoZWFkZXIgQ29udGVu
dC1UeXBlIGZvciBzaW1wbGUgcmVxdWVzdHM6CisgICAgICAgIGh0dHBzOi8vZmV0Y2guc3BlYy53
aGF0d2cub3JnLyNjb3JzLXNhZmVsaXN0ZWQtcmVxdWVzdC1oZWFkZXIKKworICAgICAgICBUaGlz
IG1lYW5zIHNpbXBsZSBDT1JTIHJlcXVlc3RzIGNhbiBzZW5kIHVuZXhwZWN0ZWQgY2hhcmFjdGVy
cyBpbiBBY2NlcHQsIAorICAgICAgICBBY2NlcHQtTGFuZ3VhZ2UsIGFuZCBDb250ZW50LUxhbmd1
YWdlIGhlYWRlciB2YWx1ZXMuCisKKyAgICAgICAgUkZDIDcyMzEgaW1wbGllcyByZXN0cmljdGlv
bnMgb24gdGhlc2UgaGVhZGVyIHZhbHVlczoKKyAgICAgICAgLSBBY2NlcHQgaHR0cHM6Ly90b29s
cy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi01LjMuMgorICAgICAgICAtIEFjY2VwdC1M
YW5ndWFnZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTUuMy41
CisgICAgICAgIC0gQ29udGVudC1MYW5ndWFnZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwv
cmZjNzIzMSNzZWN0aW9uLTMuMS4zLjIKKworICAgICAgICBBcyBwZXIgZGlzY3Vzc2lvbnMgaW4g
dGhlIFczQyBXZWJBcHBTZWMgZ3JvdXAgd2Ugc2hvdWxkIHRyeSB0byByZXN0cmljdCAKKyAgICAg
ICAgdGhlc2UgaGVhZGVyIHZhbHVlcyB0byBoZWxwIHByb3RlY3Qgc2VydmVycyB0aGF0IGRvIG5v
dCBleHBlY3Qgc2ltcGxlIENPUlMgCisgICAgICAgIHJlcXVlc3RzLgorCisgICAgICAgIE5vbi1z
dGFuZGFyZCwgc2FmZWxpc3RlZCBoZWFkZXIgdmFsdWVzIHNob3VsZCB0cmlnZ2VyIGEgcHJlZmxp
Z2h0IGFuZCByZXF1aXJlCisgICAgICAgIHRoZSBoZWFkZXJzIHRvIGJlIHdoaXRlbGlzdGVkIGlu
IHRoZSByZXNwb25zZSdzIEFjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnMuCisgICAgICAgIEZv
ciBGZXRjaCBpbiBuby1jb3JzIG1vZGUgdGhpcyBjaGFuZ2UgbWVhbnMgbm9uLXN0YW5kYXJkIGhl
YWRlciB2YWx1ZXMgYXJlIG5vdAorICAgICAgICBhbGxvd2VkIHRvIGJlIHNldC4KKworICAgICAg
ICBUZXN0OiBodHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L2NvcnMtbm9uLXN0YW5kYXJkLXNhZmVs
aXN0ZWQtaGVhZGVycy1zaG91bGQtdHJpZ2dlci1wcmVmbGlnaHQuaHRtbAorCisgICAgICAgICog
bG9hZGVyL0Nyb3NzT3JpZ2luQWNjZXNzQ29udHJvbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpp
c09uQWNjZXNzQ29udHJvbFNpbXBsZVJlcXVlc3RIZWFkZXJXaGl0ZWxpc3QpOgorICAgICAgICAg
ICAgTm93IG1ha2VzIGEgY2FsbCB0byBXZWJDb3JlOjppc1ZhbGlkQWNjZXB0SGVhZGVyVmFsdWUo
KSBmb3IgQWNjZXB0CisgICAgICAgICAgICBoZWFkZXJzIGFuZCBXZWJDb3JlOjppc1ZhbGlkTGFu
Z3VhZ2VIZWFkZXJWYWx1ZSgpIGZvciBBY2NlcHQtTGFuZ3VhZ2UgCisgICAgICAgICAgICBhbmQg
Q29udGVudC1MYW5ndWFnZSBoZWFkZXJzLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvSFRU
UFBhcnNlcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNWYWxpZEFjY2VwdEhlYWRlclZhbHVl
KToKKyAgICAgICAgICAgIEJhc2ljIGNoZWNrIHRoYXQgdGhlIGNoYXJhY3RlcnMgYXJlIGFsbCBB
U0NJSSBhbHBoYW51bWVyaWMsICcgJywgJyonLCAnLicsCisgICAgICAgICAgICAnLycsICc7Jywg
b3IgJz0nLgorICAgICAgICAoV2ViQ29yZTo6aXNWYWxpZExhbmd1YWdlSGVhZGVyVmFsdWUpOgor
ICAgICAgICAgICAgQmFzaWMgY2hlY2sgdGhhdCB0aGUgY2hhcmFjdGVycyBhcmUgYWxsIEFTQ0lJ
IGFscGhhbnVtZXJpYywgJyAnLCAnKicsICctJywKKyAgICAgICAgICAgICcuJywgJzsnLCBvciAn
PScuCisgICAgICAgIChXZWJDb3JlOjppc1NpbXBsZUhlYWRlcik6CisgICAgICAgICAgICBOb3cg
bWFrZXMgYSBjYWxsIHRvIFdlYkNvcmU6OmlzVmFsaWRBY2NlcHRIZWFkZXJWYWx1ZSgpIGZvciBB
Y2NlcHQKKyAgICAgICAgICAgIGhlYWRlcnMgYW5kIFdlYkNvcmU6OmlzVmFsaWRMYW5ndWFnZUhl
YWRlclZhbHVlKCkgZm9yIEFjY2VwdC1MYW5ndWFnZQorICAgICAgICAgICAgYW5kIENvbnRlbnQt
TGFuZ3VhZ2UgaGVhZGVycy4KKyAgICAgICAgKFdlYkNvcmU6OmlzQ3Jvc3NPcmlnaW5TYWZlUmVx
dWVzdEhlYWRlcik6CisgICAgICAgICAgICBOb3cgbWFrZXMgYSBjYWxsIHRvIFdlYkNvcmU6Omlz
VmFsaWRBY2NlcHRIZWFkZXJWYWx1ZSgpIGZvciBBY2NlcHQKKyAgICAgICAgICAgIGhlYWRlcnMg
YW5kIFdlYkNvcmU6OmlzVmFsaWRMYW5ndWFnZUhlYWRlclZhbHVlKCkgZm9yIEFjY2VwdC1MYW5n
dWFnZQorICAgICAgICAgICAgYW5kIENvbnRlbnQtTGFuZ3VhZ2UgaGVhZGVycy4KKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL0hUVFBQYXJzZXJzLmg6CisKIDIwMTYtMTEtMzAgIFNhbSBXZWlu
aWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBbV2ViSURMXSBSZW1vdmUgY3VzdG9tIGJp
bmRpbmdzIGZvciBGaWxlIGFuZCBCbG9iIGNvbnN0cnVjdG9ycwpJbmRleDogU291cmNlL1dlYkNv
cmUvbG9hZGVyL0Nyb3NzT3JpZ2luQWNjZXNzQ29udHJvbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2luQWNjZXNzQ29udHJvbC5jcHAJKHJldmlzaW9u
IDIwOTE4MikKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpbkFjY2Vzc0NvbnRy
b2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw5ICs0OSwxMCBAQCBib29sIGlzT25BY2Nlc3ND
b250cm9sU2ltcGxlUmVxdWVzdEhlYWRlCiB7CiAgICAgc3dpdGNoIChuYW1lKSB7CiAgICAgY2Fz
ZSBIVFRQSGVhZGVyTmFtZTo6QWNjZXB0OgorICAgICAgICByZXR1cm4gaXNWYWxpZEFjY2VwdEhl
YWRlclZhbHVlKHZhbHVlKTsKICAgICBjYXNlIEhUVFBIZWFkZXJOYW1lOjpBY2NlcHRMYW5ndWFn
ZToKICAgICBjYXNlIEhUVFBIZWFkZXJOYW1lOjpDb250ZW50TGFuZ3VhZ2U6Ci0gICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICByZXR1cm4gaXNWYWxpZExhbmd1YWdlSGVhZGVyVmFsdWUodmFs
dWUpOwogICAgIGNhc2UgSFRUUEhlYWRlck5hbWU6OkNvbnRlbnRUeXBlOiB7CiAgICAgICAgIC8v
IFByZWZsaWdodCBpcyByZXF1aXJlZCBmb3IgTUlNRSB0eXBlcyB0aGF0IGNhbiBub3QgYmUgc2Vu
dCB2aWEgZm9ybSBzdWJtaXNzaW9uLgogICAgICAgICBTdHJpbmcgbWltZVR5cGUgPSBleHRyYWN0
TUlNRVR5cGVGcm9tTWVkaWFUeXBlKHZhbHVlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvSFRUUFBhcnNlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvSFRUUFBhcnNlcnMuY3BwCShyZXZpc2lvbiAyMDkxODIpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBQYXJzZXJzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkhUVFBQYXJzZXJzLmgiCiAKICNpbmNs
dWRlICJIVFRQSGVhZGVyTmFtZXMuaCIKKyNpbmNsdWRlICJMYW5ndWFnZS5oIgogI2luY2x1ZGUg
PHd0Zi9EYXRlTWF0aC5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KQEAgLTEyNiw2ICsxMjcsMzYgQEAgYm9vbCBpc1ZhbGlk
SFRUUEhlYWRlclZhbHVlKGNvbnN0IFN0cmluZwogICAgIHJldHVybiB0cnVlOwogfQogCisvLyBT
ZWUgUkZDIDcyMzEsIFNlY3Rpb24gNS4zLjIKK2Jvb2wgaXNWYWxpZEFjY2VwdEhlYWRlclZhbHVl
KGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZh
bHVlLmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgVUNoYXIgYyA9IHZhbHVlW2ldOworICAgICAg
ICBpZiAoaXNBU0NJSUFscGhhbnVtZXJpYyhjKSB8fCBjID09ICcgJyB8fCBjID09ICcqJyB8fCBj
ID09ICcuJyB8fCBjID09ICcvJyB8fCBjID09ICc7JyB8fCBjID09ICc9JykKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIHJldHVy
biB0cnVlOworfQorCisvLyBTZWUgUkZDIDcyMzEsIFNlY3Rpb24gNS4zLjUgYW5kIDMuMS4zLjIK
K2Jvb2wgaXNWYWxpZExhbmd1YWdlSGVhZGVyVmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoKCk7ICsraSkgeworICAg
ICAgICBVQ2hhciBjID0gdmFsdWVbaV07CisgICAgICAgIGlmIChpc0FTQ0lJQWxwaGFudW1lcmlj
KGMpIHx8IGMgPT0gJyAnIHx8IGMgPT0gJyonIHx8IGMgPT0gJy0nIHx8IGMgPT0gJy4nIHx8IGMg
PT0gJzsnIHx8IGMgPT0gJz0nKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgCisgICAgLy8gRklYTUU6IFZhbGlkYXRlIGZ1cnRoZXIgYnkg
c3BsaXR0aW5nIGludG8gbGFuZ3VhZ2UgdGFncyBhbmQgb3B0aW9uYWwgcXVhbGl0eQorICAgIC8v
IHZhbHVlcyAocT0pIGFuZCB0aGVuIGNoZWNrIGVhY2ggbGFuZ3VhZ2UgdGFnLgorICAgIC8vIExh
bmd1YWdlIHRhZ3MgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi0z
LjEuMy4xCisgICAgLy8gTGFuZ3VhZ2UgdGFnIHN5bnRheCBodHRwczovL3Rvb2xzLmlldGYub3Jn
L2h0bWwvYmNwNDcjc2VjdGlvbi0yLjEKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogLy8gU2VlIFJG
QyA3MjMwLCBTZWN0aW9uIDMuMi42LgogYm9vbCBpc1ZhbGlkSFRUUFRva2VuKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCiB7CkBAIC03MzIsNyArNzYzLDcgQEAgdm9pZCBwYXJzZUFjY2Vzc0NvbnRyb2xF
eHBvc2VIZWFkZXJzQWxsbwogICAgIH0KIH0KIAotLy8gSW1wbGVtZW10bmF0aW9uIG9mIGh0dHBz
Oi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb3JzLXNhZmVsaXN0ZWQtcmVzcG9uc2UtaGVhZGVy
LW5hbWUKKy8vIEltcGxlbWVudGF0aW9uIG9mIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3Jn
LyNjb3JzLXNhZmVsaXN0ZWQtcmVzcG9uc2UtaGVhZGVyLW5hbWUKIGJvb2wgaXNGb3JiaWRkZW5I
ZWFkZXJOYW1lKGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICBIVFRQSGVhZGVyTmFtZSBoZWFk
ZXJOYW1lOwpAQCAtNzc4LDkgKzgwOSwxMCBAQCBib29sIGlzU2ltcGxlSGVhZGVyKGNvbnN0IFN0
cmluZyYgbmFtZSwgCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBzd2l0Y2ggKGhlYWRlck5h
bWUpIHsKICAgICBjYXNlIEhUVFBIZWFkZXJOYW1lOjpBY2NlcHQ6CisgICAgICAgIHJldHVybiBp
c1ZhbGlkQWNjZXB0SGVhZGVyVmFsdWUodmFsdWUpOwogICAgIGNhc2UgSFRUUEhlYWRlck5hbWU6
OkFjY2VwdExhbmd1YWdlOgogICAgIGNhc2UgSFRUUEhlYWRlck5hbWU6OkNvbnRlbnRMYW5ndWFn
ZToKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBpc1ZhbGlkTGFuZ3VhZ2VI
ZWFkZXJWYWx1ZSh2YWx1ZSk7CiAgICAgY2FzZSBIVFRQSGVhZGVyTmFtZTo6Q29udGVudFR5cGU6
IHsKICAgICAgICAgU3RyaW5nIG1pbWVUeXBlID0gZXh0cmFjdE1JTUVUeXBlRnJvbU1lZGlhVHlw
ZSh2YWx1ZSk7CiAgICAgICAgIHJldHVybiBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSht
aW1lVHlwZSwgImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpIHx8IGVxdWFsTGV0
dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG1pbWVUeXBlLCAibXVsdGlwYXJ0L2Zvcm0tZGF0YSIpIHx8
IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG1pbWVUeXBlLCAidGV4dC9wbGFpbiIpOwpA
QCAtODI0LDkgKzg1NiwxMCBAQCBib29sIGlzQ3Jvc3NPcmlnaW5TYWZlUmVxdWVzdEhlYWRlcihI
VFRQCiB7CiAgICAgc3dpdGNoIChuYW1lKSB7CiAgICAgY2FzZSBIVFRQSGVhZGVyTmFtZTo6QWNj
ZXB0OgorICAgICAgICByZXR1cm4gaXNWYWxpZEFjY2VwdEhlYWRlclZhbHVlKHZhbHVlKTsKICAg
ICBjYXNlIEhUVFBIZWFkZXJOYW1lOjpBY2NlcHRMYW5ndWFnZToKICAgICBjYXNlIEhUVFBIZWFk
ZXJOYW1lOjpDb250ZW50TGFuZ3VhZ2U6Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBy
ZXR1cm4gaXNWYWxpZExhbmd1YWdlSGVhZGVyVmFsdWUodmFsdWUpOwogICAgIGNhc2UgSFRUUEhl
YWRlck5hbWU6OkNvbnRlbnRUeXBlOiB7CiAgICAgICAgIFN0cmluZyBtaW1lVHlwZSA9IGV4dHJh
Y3RNSU1FVHlwZUZyb21NZWRpYVR5cGUodmFsdWUpOwogICAgICAgICByZXR1cm4gZXF1YWxMZXR0
ZXJzSWdub3JpbmdBU0NJSUNhc2UobWltZVR5cGUsICJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVy
bGVuY29kZWQiKSB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShtaW1lVHlwZSwgIm11
bHRpcGFydC9mb3JtLWRhdGEiKSB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShtaW1l
VHlwZSwgInRleHQvcGxhaW4iKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvSFRUUFBhcnNlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL0hUVFBQYXJzZXJzLmgJKHJldmlzaW9uIDIwOTE4MikKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvSFRUUFBhcnNlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtNjksNiAr
NjksOCBAQCBlbnVtIFhGcmFtZU9wdGlvbnNEaXNwb3NpdGlvbiB7CiAKIGJvb2wgaXNWYWxpZFJl
YXNvblBocmFzZShjb25zdCBTdHJpbmcmKTsKIGJvb2wgaXNWYWxpZEhUVFBIZWFkZXJWYWx1ZShj
b25zdCBTdHJpbmcmKTsKK2Jvb2wgaXNWYWxpZEFjY2VwdEhlYWRlclZhbHVlKGNvbnN0IFN0cmlu
ZyYpOworYm9vbCBpc1ZhbGlkTGFuZ3VhZ2VIZWFkZXJWYWx1ZShjb25zdCBTdHJpbmcmKTsKIGJv
b2wgaXNWYWxpZEhUVFBUb2tlbihjb25zdCBTdHJpbmcmKTsKIGJvb2wgcGFyc2VIVFRQUmVmcmVz
aChjb25zdCBTdHJpbmcmIHJlZnJlc2gsIGRvdWJsZSYgZGVsYXksIFN0cmluZyYgdXJsKTsKIHN0
ZDo6b3B0aW9uYWw8c3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6dGltZV9wb2ludD4gcGFyc2VI
VFRQRGF0ZShjb25zdCBTdHJpbmcmKTsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwOTE4MikKKysrIExh
eW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyIEBACisyMDE2
LTEyLTAxICBKb2huIFdpbGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJl
cXVpcmUgcHJlZmxpZ2h0IGZvciBub24tc3RhbmRhcmQgQ09SUy1zYWZlbGlzdGVkIHJlcXVlc3Qg
aGVhZGVycyBBY2NlcHQsIEFjY2VwdC1MYW5ndWFnZSwgYW5kIENvbnRlbnQtTGFuZ3VhZ2UKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTE3OAorICAg
ICAgICA8cmRhcjovL3Byb2JsZW0vMTg3OTIyNTA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgRmV0Y2ggY3VycmVudGx5IG9ubHkgcmVzdHJpY3RzIHRo
ZSBoZWFkZXIgQ29udGVudC1UeXBlIGZvciBzaW1wbGUgcmVxdWVzdHM6CisgICAgICAgIGh0dHBz
Oi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb3JzLXNhZmVsaXN0ZWQtcmVxdWVzdC1oZWFkZXIK
KworICAgICAgICBUaGlzIG1lYW5zIHNpbXBsZSBDT1JTIHJlcXVlc3RzIGNhbiBzZW5kIHVuZXhw
ZWN0ZWQgY2hhcmFjdGVycyBpbiBBY2NlcHQsIAorICAgICAgICBBY2NlcHQtTGFuZ3VhZ2UsIGFu
ZCBDb250ZW50LUxhbmd1YWdlIGhlYWRlciB2YWx1ZXMuCisKKyAgICAgICAgUkZDIDcyMzEgaW1w
bGllcyByZXN0cmljdGlvbnMgb24gdGhlc2UgaGVhZGVyIHZhbHVlczoKKyAgICAgICAgLSBBY2Nl
cHQgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi01LjMuMgorICAg
ICAgICAtIEFjY2VwdC1MYW5ndWFnZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIz
MSNzZWN0aW9uLTUuMy41CisgICAgICAgIC0gQ29udGVudC1MYW5ndWFnZSBodHRwczovL3Rvb2xz
LmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTMuMS4zLjIKKworICAgICAgICBBcyBwZXIg
ZGlzY3Vzc2lvbnMgaW4gdGhlIFczQyBXZWJBcHBTZWMgZ3JvdXAgd2Ugc2hvdWxkIHRyeSB0byBy
ZXN0cmljdCAKKyAgICAgICAgdGhlc2UgaGVhZGVyIHZhbHVlcyB0byBoZWxwIHByb3RlY3Qgc2Vy
dmVycyB0aGF0IGRvIG5vdCBleHBlY3Qgc2ltcGxlIENPUlMgCisgICAgICAgIHJlcXVlc3RzLgor
CisgICAgICAgIE5vbi1zdGFuZGFyZCwgc2FmZWxpc3RlZCBoZWFkZXIgdmFsdWVzIHNob3VsZCB0
cmlnZ2VyIGEgcHJlZmxpZ2h0IGFuZCByZXF1aXJlCisgICAgICAgIHRoZSBoZWFkZXJzIHRvIGJl
IHdoaXRlbGlzdGVkIGluIHRoZSByZXNwb25zZSdzIEFjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRl
cnMuCisgICAgICAgIEZvciBGZXRjaCBpbiBuby1jb3JzIG1vZGUgdGhpcyBjaGFuZ2UgbWVhbnMg
bm9uLXN0YW5kYXJkIGhlYWRlciB2YWx1ZXMgYXJlIG5vdAorICAgICAgICBhbGxvd2VkIHRvIGJl
IHNldC4KKworICAgICAgICAqIGh0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvY29ycy1ub24tc3Rh
bmRhcmQtc2FmZWxpc3RlZC1oZWFkZXJzLXNob3VsZC10cmlnZ2VyLXByZWZsaWdodC1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvY29ycy1u
b24tc3RhbmRhcmQtc2FmZWxpc3RlZC1oZWFkZXJzLXNob3VsZC10cmlnZ2VyLXByZWZsaWdodC5o
dG1sOiBBZGRlZC4KKyAgICAgICAgICAgIFRlc3RzIHRoYXQ6CisgICAgICAgICAgICAtIE5vcm1h
bCBBY2NlcHQsIEFjY2VwdC1MYW5ndWFnZSwgYW5kIENvbnRlbnQtTGFuZ3VhZ2UgaGVhZGVycyBk
b24ndCB0cmlnZ2VyCisgICAgICAgICAgICAgICAgYSBwcmVmbGlnaHQuCisgICAgICAgICAgICAt
IEFibm9ybWFsIEFjY2VwdCwgQWNjZXB0LUxhbmd1YWdlLCBhbmQgQ29udGVudC1MYW5ndWFnZSBo
ZWFkZXJzIGRvIHRyaWdnZXIgCisgICAgICAgICAgICAgICAgYSBwcmVmbGlnaHQuCisgICAgICAg
ICAgICAtIEFibm9ybWFsIEFjY2VwdCwgQWNjZXB0LUxhbmd1YWdlLCBhbmQgQ29udGVudC1MYW5n
dWFnZSBoZWFkZXJzIGFyZSAKKyAgICAgICAgICAgICAgICBhY2NlcHRlZCBpZiB0aGUgc2VydmVy
IHdoaXRlbGlzdHMgdGhlbS4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3Jl
c291cmNlcy9jb3JzLXByZWZsaWdodC1zYWZlbGlzdGVkLWhlYWRlcnMtcmVzcG9uZGVyLnBocDog
QWRkZWQuCisKIDIwMTYtMTItMDEgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQGFwcGxlLmNvbT4K
IAogICAgICAgICBbTW9kZXJuIE1lZGlhIENvbnRyb2xzXSBQcm92aWRlIGEgVUkgb2JqZWN0IHRv
IHNob3cgYSBsaXN0IG9mIHRyYWNrcwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxo
dHRwcmVxdWVzdC9jb3JzLW5vbi1zdGFuZGFyZC1zYWZlbGlzdGVkLWhlYWRlcnMtc2hvdWxkLXRy
aWdnZXItcHJlZmxpZ2h0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L2NvcnMtbm9uLXN0YW5kYXJkLXNhZmVsaXN0ZWQtaGVh
ZGVycy1zaG91bGQtdHJpZ2dlci1wcmVmbGlnaHQtZXhwZWN0ZWQudHh0CShub25leGlzdGVudCkK
KysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvY29ycy1ub24tc3RhbmRh
cmQtc2FmZWxpc3RlZC1oZWFkZXJzLXNob3VsZC10cmlnZ2VyLXByZWZsaWdodC1leHBlY3RlZC50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOCBAQAorQ09OU09MRSBNRVNTQUdFOiBYTUxI
dHRwUmVxdWVzdCBjYW5ub3QgbG9hZCBodHRwOi8vbG9jYWxob3N0OjgwMDAveG1saHR0cHJlcXVl
c3QvcmVzb3VyY2VzL2NvcnMtcHJlZmxpZ2h0LXNhZmVsaXN0ZWQtaGVhZGVycy1yZXNwb25kZXIu
cGhwLiBSZXF1ZXN0IGhlYWRlciBmaWVsZCBBY2NlcHQgaXMgbm90IGFsbG93ZWQgYnkgQWNjZXNz
LUNvbnRyb2wtQWxsb3ctSGVhZGVycy4KK0NPTlNPTEUgTUVTU0FHRTogWE1MSHR0cFJlcXVlc3Qg
Y2Fubm90IGxvYWQgaHR0cDovL2xvY2FsaG9zdDo4MDAwL3htbGh0dHByZXF1ZXN0L3Jlc291cmNl
cy9jb3JzLXByZWZsaWdodC1zYWZlbGlzdGVkLWhlYWRlcnMtcmVzcG9uZGVyLnBocC4gUmVxdWVz
dCBoZWFkZXIgZmllbGQgQWNjZXB0LUxhbmd1YWdlIGlzIG5vdCBhbGxvd2VkIGJ5IEFjY2Vzcy1D
b250cm9sLUFsbG93LUhlYWRlcnMuCitDT05TT0xFIE1FU1NBR0U6IFhNTEh0dHBSZXF1ZXN0IGNh
bm5vdCBsb2FkIGh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC94bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMv
Y29ycy1wcmVmbGlnaHQtc2FmZWxpc3RlZC1oZWFkZXJzLXJlc3BvbmRlci5waHAuIFJlcXVlc3Qg
aGVhZGVyIGZpZWxkIENvbnRlbnQtTGFuZ3VhZ2UgaXMgbm90IGFsbG93ZWQgYnkgQWNjZXNzLUNv
bnRyb2wtQWxsb3ctSGVhZGVycy4KK0NPTlNPTEUgTUVTU0FHRTogWE1MSHR0cFJlcXVlc3QgY2Fu
bm90IGxvYWQgaHR0cDovL2xvY2FsaG9zdDo4MDAwL3htbGh0dHByZXF1ZXN0L3Jlc291cmNlcy9j
b3JzLXByZWZsaWdodC1zYWZlbGlzdGVkLWhlYWRlcnMtcmVzcG9uZGVyLnBocC4gUmVxdWVzdCBo
ZWFkZXIgZmllbGQgQ29udGVudC1MYW5ndWFnZSBpcyBub3QgYWxsb3dlZCBieSBBY2Nlc3MtQ29u
dHJvbC1BbGxvdy1IZWFkZXJzLgorQ09OU09MRSBNRVNTQUdFOiBYTUxIdHRwUmVxdWVzdCBjYW5u
b3QgbG9hZCBodHRwOi8vbG9jYWxob3N0OjgwMDAveG1saHR0cHJlcXVlc3QvcmVzb3VyY2VzL2Nv
cnMtcHJlZmxpZ2h0LXNhZmVsaXN0ZWQtaGVhZGVycy1yZXNwb25kZXIucGhwLiBSZXF1ZXN0IGhl
YWRlciBmaWVsZCBBY2NlcHQgaXMgbm90IGFsbG93ZWQgYnkgQWNjZXNzLUNvbnRyb2wtQWxsb3ct
SGVhZGVycy4KK1BBU1MgQWNjZXB0IGhlYWRlciB3aXRoIG5vcm1hbCB2YWx1ZSBTSE9VTEQgTk9U
IGNhdXNlIGEgcHJlZmxpZ2h0CitQQVNTIEFjY2VwdC1MYW5ndWFnZSBoZWFkZXIgd2l0aCBub3Jt
YWwgdmFsdWUgU0hPVUxEIE5PVCBjYXVzZSBhIHByZWZsaWdodAorUEFTUyBDb250ZW50LUxhbmd1
YWdlIGhlYWRlciB3aXRoIG5vcm1hbCB2YWx1ZSBTSE9VTEQgTk9UIGNhdXNlIGEgcHJlZmxpZ2h0
CitQQVNTIEFjY2VwdCBoZWFkZXIgd2l0aCBhYm5vcm1hbCB2YWx1ZSBTSE9VTEQgY2F1c2UgYSBw
cmVmbGlnaHQKK1BBU1MgQWNjZXB0LUxhbmd1YWdlIGhlYWRlciB3aXRoIGFibm9ybWFsIHZhbHVl
IFNIT1VMRCBjYXVzZSBhIHByZWZsaWdodAorUEFTUyBDb250ZW50LUxhbmd1YWdlIGhlYWRlciB3
aXRoIGFibm9ybWFsIHZhbHVlIFNIT1VMRCBjYXVzZSBhIHByZWZsaWdodAorUEFTUyBBY2NlcHQg
aGVhZGVyIHdpdGggbm9ybWFsIHZhbHVlLCBBY2NlcHQtTGFuZ3VhZ2UgaGVhZGVyIHdpdGggbm9y
bWFsIHZhbHVlLCBhbmQgQ29udGVudC1MYW5ndWFnZSBoZWFkZXIgd2l0aCBhYm5vcm1hbCB2YWx1
ZSBTSE9VTEQgY2F1c2UgYSBwcmVmbGlnaHQKK1BBU1MgQWNjZXB0IGhlYWRlciB3aXRoIG5vcm1h
bCB2YWx1ZSBhbmQgdGhlbiBhbm90aGVyIEFjY2VwdCBoZWFkZXIgd2l0aCBhYm5vcm1hbCB2YWx1
ZSBTSE9VTEQgY2F1c2UgYSBwcmVmbGlnaHQKK1BBU1MgQWNjZXB0IGhlYWRlciB3aXRoIGFibm9y
bWFsIHZhbHVlIGFuZCBleHBsaWNpdGx5IGFsbG93ZWQgaGVhZGVycyBTSE9VTEQgYmUgYWxsb3dl
ZAorUEFTUyBDb250ZW50LUxhbmd1YWdlIGhlYWRlciB3aXRoIGFibm9ybWFsIHZhbHVlIGFuZCBl
eHBsaWNpdGx5IGFsbG93ZWQgaGVhZGVycyBTSE9VTEQgYmUgYWxsb3dlZAorUEFTUyBBY2NlcHQg
aGVhZGVyIHdpdGggbm9ybWFsIHZhbHVlLCBBY2NlcHQtTGFuZ3VhZ2UgaGVhZGVyIHdpdGggbm9y
bWFsIHZhbHVlLCBDb250ZW50LUxhbmd1YWdlIGhlYWRlciB3aXRoIGFibm9ybWFsIHZhbHVlLCBh
bmQgZXhwbGljaXRseSBhbGxvd2VkIGhlYWRlcnMgU0hPVUxEIGJlIGFsbG93ZWQKK1BBU1MgQWNj
ZXB0IGhlYWRlciB3aXRoIG5vcm1hbCB2YWx1ZSwgdGhlbiBhbm90aGVyIEFjY2VwdCBoZWFkZXIg
d2l0aCBhYm5vcm1hbCB2YWx1ZSwgYW5kIGV4cGxpY2l0bHkgYWxsb3dlZCBoZWFkZXJzIFNIT1VM
RCBiZSBhbGxvd2VkCisKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVl
c3QvY29ycy1ub24tc3RhbmRhcmQtc2FmZWxpc3RlZC1oZWFkZXJzLXNob3VsZC10cmlnZ2VyLXBy
ZWZsaWdodC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0
cHJlcXVlc3QvY29ycy1ub24tc3RhbmRhcmQtc2FmZWxpc3RlZC1oZWFkZXJzLXNob3VsZC10cmln
Z2VyLXByZWZsaWdodC5odG1sCShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVz
dHMveG1saHR0cHJlcXVlc3QvY29ycy1ub24tc3RhbmRhcmQtc2FmZWxpc3RlZC1oZWFkZXJzLXNo
b3VsZC10cmlnZ2VyLXByZWZsaWdodC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQ3
IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorICAgIDxtZXRh
IGNoYXJzZXQ9IlVURi04Ij4KKyAgICA8dGl0bGU+Tm9uLVN0YW5kYXJkIFNhZmVsaXN0ZWQgSGVh
ZGVycyBTSE9VTEQgVHJpZ2dlciBhIFByZWZsaWdodDwvdGl0bGU+CisgICAgPHNjcmlwdCBzcmM9
Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4K
KzwhLS0gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvcnMtc2FmZWxpc3RlZC1yZXF1
ZXN0LWhlYWRlciAtLT4KKzxzY3JpcHQ+CisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7Cisg
ICAgICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOworICAgICAgICB0ZXN0UnVubmVyLndhaXRV
bnRpbERvbmUoKTsKKyAgICB9CisKKyAgICB2YXIgaW52b2NhdGlvbjsKKyAgICB2YXIgdXJsID0g
J2h0dHA6Ly9sb2NhbGhvc3Q6ODAwMC94bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMvY29ycy1wcmVm
bGlnaHQtc2FmZWxpc3RlZC1oZWFkZXJzLXJlc3BvbmRlci5waHAnOworCisgICAgZnVuY3Rpb24g
Y3JlYXRlUmVhZHlTdGF0ZUhhbmRsZXIgKGRlc2NyaXB0aW9uLCB0ZXN0TnVtYmVyKSB7CisgICAg
ICAgIHJldHVybiBmdW5jdGlvbiBoYW5kbGVyIChlKSB7CisgICAgICAgICAgICBpZiAoaW52b2Nh
dGlvbi5yZWFkeVN0YXRlID09PSBYTUxIdHRwUmVxdWVzdC5ET05FKSB7CisgICAgICAgICAgICAg
ICAgdGVzdFBhc3NlZChkZXNjcmlwdGlvbik7CisgICAgICAgICAgICAgICAgaWYgKHRlc3ROdW1i
ZXIgPT09ICh0ZXN0Q2FzZXMubGVuZ3RoIC0gMSkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0UnVubmVy
Lm5vdGlmeURvbmUoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHJ1blRlc3RDYXNlKHRlc3ROdW1iZXIgKyAxKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBmdW5jdGlvbiBjcmVhdGVPbkVycm9ySGFuZGxlciAoZGVzY3JpcHRpb24sIHRlc3ROdW1iZXIp
IHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGhhbmRsZXIgKGUpIHsKKyAgICAgICAgICAgICAg
ICBlLnByZXZlbnREZWZhdWx0KCk7CisgICAgICAgICAgICAgICAgdGVzdFBhc3NlZChkZXNjcmlw
dGlvbik7CisgICAgICAgICAgICAgICAgaWYgKHRlc3ROdW1iZXIgPT09ICh0ZXN0Q2FzZXMubGVu
Z3RoIC0gMSkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIHJ1blRlc3RDYXNlKHRlc3ROdW1iZXIgKyAxKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgfQorCisgICAgdmFyIGFibm9ybWFsU2ltcGxlQ29yc0hlYWRlclZh
bHVlID0gIigpIHsgOjt9OyIKKyAgICB2YXIgdGVzdENhc2VzID0gWworICAgICAgICAvLyBQb3Np
dGl2ZSB0ZXN0IGNhc2VzIHdpdGggbm9ybWFsIGhlYWRlcnMKKyAgICAgICAgeworICAgICAgICAg
ICAgaGVhZGVyc1RvQWRkOiBbeyBuYW1lIDogIkFjY2VwdCIsIHZhbHVlOiAidGV4dC8qIiB9XSwK
KyAgICAgICAgICAgIGV4cGxpY2l0bHlBbGxvd0hlYWRlcnM6IGZhbHNlLAorICAgICAgICAgICAg
c2hvdWxkQ2F1c2VQcmVmbGlnaHQ6IGZhbHNlLAorICAgICAgICAgICAgZGVzY3JpcHRpb246ICJB
Y2NlcHQgaGVhZGVyIHdpdGggbm9ybWFsIHZhbHVlIFNIT1VMRCBOT1QgY2F1c2UgYSBwcmVmbGln
aHQiCisgICAgICAgIH0KKyAgICAgICAgLHsKKyAgICAgICAgICAgIGhlYWRlcnNUb0FkZDogW3sg
bmFtZSA6ICJBY2NlcHQtTGFuZ3VhZ2UiLCB2YWx1ZTogImVuIiB9XSwKKyAgICAgICAgICAgIGV4
cGxpY2l0bHlBbGxvd0hlYWRlcnM6IGZhbHNlLAorICAgICAgICAgICAgc2hvdWxkQ2F1c2VQcmVm
bGlnaHQ6IGZhbHNlLAorICAgICAgICAgICAgZGVzY3JpcHRpb246ICJBY2NlcHQtTGFuZ3VhZ2Ug
aGVhZGVyIHdpdGggbm9ybWFsIHZhbHVlIFNIT1VMRCBOT1QgY2F1c2UgYSBwcmVmbGlnaHQiCisg
ICAgICAgIH0KKyAgICAgICAgLHsKKyAgICAgICAgICAgIGhlYWRlcnNUb0FkZDogW3sgbmFtZSA6
ICJDb250ZW50LUxhbmd1YWdlIiwgdmFsdWU6ICJlbiIgfV0sCisgICAgICAgICAgICBleHBsaWNp
dGx5QWxsb3dIZWFkZXJzOiBmYWxzZSwKKyAgICAgICAgICAgIHNob3VsZENhdXNlUHJlZmxpZ2h0
OiBmYWxzZSwKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAiQ29udGVudC1MYW5ndWFnZSBoZWFk
ZXIgd2l0aCBub3JtYWwgdmFsdWUgU0hPVUxEIE5PVCBjYXVzZSBhIHByZWZsaWdodCIKKyAgICAg
ICAgfQorICAgICAgICAvLyBOZWdhdGl2ZSB0ZXN0IGNhc2VzIHdpdGggYWJub3JtYWwgaGVhZGVy
cworICAgICAgICAseworICAgICAgICAgICAgaGVhZGVyc1RvQWRkOiBbeyBuYW1lIDogIkFjY2Vw
dCIsIHZhbHVlOiBhYm5vcm1hbFNpbXBsZUNvcnNIZWFkZXJWYWx1ZSB9XSwKKyAgICAgICAgICAg
IGV4cGxpY2l0bHlBbGxvd0hlYWRlcnM6IGZhbHNlLAorICAgICAgICAgICAgc2hvdWxkQ2F1c2VQ
cmVmbGlnaHQ6IHRydWUsCisgICAgICAgICAgICBkZXNjcmlwdGlvbjogIkFjY2VwdCBoZWFkZXIg
d2l0aCBhYm5vcm1hbCB2YWx1ZSBTSE9VTEQgY2F1c2UgYSBwcmVmbGlnaHQiCisgICAgICAgIH0K
KyAgICAgICAgLHsKKyAgICAgICAgICAgIGhlYWRlcnNUb0FkZDogW3sgbmFtZSA6ICJBY2NlcHQt
TGFuZ3VhZ2UiLCB2YWx1ZTogYWJub3JtYWxTaW1wbGVDb3JzSGVhZGVyVmFsdWUgfV0sCisgICAg
ICAgICAgICBleHBsaWNpdGx5QWxsb3dIZWFkZXJzOiBmYWxzZSwKKyAgICAgICAgICAgIHNob3Vs
ZENhdXNlUHJlZmxpZ2h0OiB0cnVlLAorICAgICAgICAgICAgZGVzY3JpcHRpb246ICJBY2NlcHQt
TGFuZ3VhZ2UgaGVhZGVyIHdpdGggYWJub3JtYWwgdmFsdWUgU0hPVUxEIGNhdXNlIGEgcHJlZmxp
Z2h0IgorICAgICAgICB9CisgICAgICAgICx7CisgICAgICAgICAgICBoZWFkZXJzVG9BZGQ6IFt7
IG5hbWUgOiAiQ29udGVudC1MYW5ndWFnZSIsIHZhbHVlOiBhYm5vcm1hbFNpbXBsZUNvcnNIZWFk
ZXJWYWx1ZSB9XSwKKyAgICAgICAgICAgIGV4cGxpY2l0bHlBbGxvd0hlYWRlcnM6IGZhbHNlLAor
ICAgICAgICAgICAgc2hvdWxkQ2F1c2VQcmVmbGlnaHQ6IHRydWUsCisgICAgICAgICAgICBkZXNj
cmlwdGlvbjogIkNvbnRlbnQtTGFuZ3VhZ2UgaGVhZGVyIHdpdGggYWJub3JtYWwgdmFsdWUgU0hP
VUxEIGNhdXNlIGEgcHJlZmxpZ2h0IgorICAgICAgICB9CisgICAgICAgICx7CisgICAgICAgICAg
ICBoZWFkZXJzVG9BZGQ6IFt7IG5hbWUgOiAiQWNjZXB0IiwgdmFsdWU6ICJ0ZXh0LyoiIH0sIHsg
bmFtZSA6ICJBY2NlcHQtTGFuZ3VhZ2UiLCB2YWx1ZTogImVuIiB9LCB7IG5hbWUgOiAiQ29udGVu
dC1MYW5ndWFnZSIsIHZhbHVlOiBhYm5vcm1hbFNpbXBsZUNvcnNIZWFkZXJWYWx1ZSB9XSwKKyAg
ICAgICAgICAgIGV4cGxpY2l0bHlBbGxvd0hlYWRlcnM6IGZhbHNlLAorICAgICAgICAgICAgc2hv
dWxkQ2F1c2VQcmVmbGlnaHQ6IHRydWUsCisgICAgICAgICAgICBkZXNjcmlwdGlvbjogIkFjY2Vw
dCBoZWFkZXIgd2l0aCBub3JtYWwgdmFsdWUsIEFjY2VwdC1MYW5ndWFnZSBoZWFkZXIgd2l0aCBu
b3JtYWwgdmFsdWUsIGFuZCBDb250ZW50LUxhbmd1YWdlIGhlYWRlciB3aXRoIGFibm9ybWFsIHZh
bHVlIFNIT1VMRCBjYXVzZSBhIHByZWZsaWdodCIKKyAgICAgICAgfQorICAgICAgICAseworICAg
ICAgICAgICAgaGVhZGVyc1RvQWRkOiBbeyBuYW1lIDogIkFjY2VwdCIsIHZhbHVlOiAidGV4dC8q
IiB9LCB7IG5hbWUgOiAiQWNjZXB0IiwgdmFsdWU6IGFibm9ybWFsU2ltcGxlQ29yc0hlYWRlclZh
bHVlIH1dLAorICAgICAgICAgICAgZXhwbGljaXRseUFsbG93SGVhZGVyczogZmFsc2UsCisgICAg
ICAgICAgICBzaG91bGRDYXVzZVByZWZsaWdodDogdHJ1ZSwKKyAgICAgICAgICAgIGRlc2NyaXB0
aW9uOiAiQWNjZXB0IGhlYWRlciB3aXRoIG5vcm1hbCB2YWx1ZSBhbmQgdGhlbiBhbm90aGVyIEFj
Y2VwdCBoZWFkZXIgd2l0aCBhYm5vcm1hbCB2YWx1ZSBTSE9VTEQgY2F1c2UgYSBwcmVmbGlnaHQi
CisgICAgICAgIH0KKyAgICAgICAgLy8gUG9zaXRpdmUgdGVzdCBjYXNlcyB3aXRoIGFibm9ybWFs
IGhlYWRlcnMKKyAgICAgICAgLHsKKyAgICAgICAgICAgIGhlYWRlcnNUb0FkZDogW3sgbmFtZSA6
ICJBY2NlcHQiLCB2YWx1ZTogYWJub3JtYWxTaW1wbGVDb3JzSGVhZGVyVmFsdWUgfV0sCisgICAg
ICAgICAgICBleHBsaWNpdGx5QWxsb3dIZWFkZXJzOiB0cnVlLAorICAgICAgICAgICAgc2hvdWxk
Q2F1c2VQcmVmbGlnaHQ6IHRydWUsCisgICAgICAgICAgICBkZXNjcmlwdGlvbjogIkFjY2VwdCBo
ZWFkZXIgd2l0aCBhYm5vcm1hbCB2YWx1ZSBhbmQgZXhwbGljaXRseSBhbGxvd2VkIGhlYWRlcnMg
U0hPVUxEIGJlIGFsbG93ZWQiCisgICAgICAgIH0KKyAgICAgICAgLHsKKyAgICAgICAgICAgIGhl
YWRlcnNUb0FkZDogW3sgbmFtZSA6ICJDb250ZW50LUxhbmd1YWdlIiwgdmFsdWU6IGFibm9ybWFs
U2ltcGxlQ29yc0hlYWRlclZhbHVlIH1dLAorICAgICAgICAgICAgZXhwbGljaXRseUFsbG93SGVh
ZGVyczogdHJ1ZSwKKyAgICAgICAgICAgIHNob3VsZENhdXNlUHJlZmxpZ2h0OiB0cnVlLAorICAg
ICAgICAgICAgZGVzY3JpcHRpb246ICJDb250ZW50LUxhbmd1YWdlIGhlYWRlciB3aXRoIGFibm9y
bWFsIHZhbHVlIGFuZCBleHBsaWNpdGx5IGFsbG93ZWQgaGVhZGVycyBTSE9VTEQgYmUgYWxsb3dl
ZCIKKyAgICAgICAgfQorICAgICAgICAseworICAgICAgICAgICAgaGVhZGVyc1RvQWRkOiBbeyBu
YW1lIDogIkFjY2VwdCIsIHZhbHVlOiAidGV4dC8qIiB9LCB7IG5hbWUgOiAiQWNjZXB0LUxhbmd1
YWdlIiwgdmFsdWU6ICJlbiIgfSwgeyBuYW1lIDogIkNvbnRlbnQtTGFuZ3VhZ2UiLCB2YWx1ZTog
YWJub3JtYWxTaW1wbGVDb3JzSGVhZGVyVmFsdWUgfV0sCisgICAgICAgICAgICBleHBsaWNpdGx5
QWxsb3dIZWFkZXJzOiB0cnVlLAorICAgICAgICAgICAgc2hvdWxkQ2F1c2VQcmVmbGlnaHQ6IHRy
dWUsCisgICAgICAgICAgICBkZXNjcmlwdGlvbjogIkFjY2VwdCBoZWFkZXIgd2l0aCBub3JtYWwg
dmFsdWUsIEFjY2VwdC1MYW5ndWFnZSBoZWFkZXIgd2l0aCBub3JtYWwgdmFsdWUsIENvbnRlbnQt
TGFuZ3VhZ2UgaGVhZGVyIHdpdGggYWJub3JtYWwgdmFsdWUsIGFuZCBleHBsaWNpdGx5IGFsbG93
ZWQgaGVhZGVycyBTSE9VTEQgYmUgYWxsb3dlZCIKKyAgICAgICAgfQorICAgICAgICAseworICAg
ICAgICAgICAgaGVhZGVyc1RvQWRkOiBbeyBuYW1lIDogIkFjY2VwdCIsIHZhbHVlOiAidGV4dC8q
IiB9LCB7IG5hbWUgOiAiQWNjZXB0IiwgdmFsdWU6IGFibm9ybWFsU2ltcGxlQ29yc0hlYWRlclZh
bHVlIH1dLAorICAgICAgICAgICAgZXhwbGljaXRseUFsbG93SGVhZGVyczogdHJ1ZSwKKyAgICAg
ICAgICAgIHNob3VsZENhdXNlUHJlZmxpZ2h0OiB0cnVlLAorICAgICAgICAgICAgZGVzY3JpcHRp
b246ICJBY2NlcHQgaGVhZGVyIHdpdGggbm9ybWFsIHZhbHVlLCB0aGVuIGFub3RoZXIgQWNjZXB0
IGhlYWRlciB3aXRoIGFibm9ybWFsIHZhbHVlLCBhbmQgZXhwbGljaXRseSBhbGxvd2VkIGhlYWRl
cnMgU0hPVUxEIGJlIGFsbG93ZWQiCisgICAgICAgIH0KKyAgICBdOworCisgICAgZnVuY3Rpb24g
cnVuVGVzdENhc2UodGVzdE51bWJlcikgeworICAgICAgICB2YXIgdGVzdENhc2UgPSB0ZXN0Q2Fz
ZXNbdGVzdE51bWJlcl07CisgICAgICAgIGludm9jYXRpb24gPSBuZXcgWE1MSHR0cFJlcXVlc3Qo
KTsKKyAgICAgICAgaWYoaW52b2NhdGlvbikgeworICAgICAgICAgICAgaW52b2NhdGlvbi5vcGVu
KCdHRVQnLCB1cmwgKyAodGVzdENhc2UuZXhwbGljaXRseUFsbG93SGVhZGVycyA/ICIvP2V4cGxp
Y2l0bHlBbGxvd0hlYWRlcnM9dHJ1ZSIgOiAiIiksIHRydWUpOworICAgICAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCB0ZXN0Q2FzZS5oZWFkZXJzVG9BZGQubGVuZ3RoOyBpKyspIHsKKyAgICAg
ICAgICAgICAgICBpbnZvY2F0aW9uLnNldFJlcXVlc3RIZWFkZXIodGVzdENhc2UuaGVhZGVyc1Rv
QWRkW2ldLm5hbWUsIHRlc3RDYXNlLmhlYWRlcnNUb0FkZFtpXS52YWx1ZSk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAodGVzdENhc2Uuc2hvdWxkQ2F1c2VQcmVmbGlnaHQgJiYgIXRl
c3RDYXNlLmV4cGxpY2l0bHlBbGxvd0hlYWRlcnMpIHsKKyAgICAgICAgICAgICAgICBpbnZvY2F0
aW9uLm9uZXJyb3IgPSBjcmVhdGVPbkVycm9ySGFuZGxlcih0ZXN0Q2FzZS5kZXNjcmlwdGlvbiwg
dGVzdE51bWJlcik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGludm9j
YXRpb24ub25yZWFkeXN0YXRlY2hhbmdlID0gY3JlYXRlUmVhZHlTdGF0ZUhhbmRsZXIodGVzdENh
c2UuZGVzY3JpcHRpb24sIHRlc3ROdW1iZXIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
aW52b2NhdGlvbi5zZW5kKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBydW5UZXN0Q2FzZSgw
KTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZp
bGUKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvcmVzb3VyY2Vz
L2NvcnMtcHJlZmxpZ2h0LXNhZmVsaXN0ZWQtaGVhZGVycy1yZXNwb25kZXIucGhwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvcmVzb3VyY2VzL2Nv
cnMtcHJlZmxpZ2h0LXNhZmVsaXN0ZWQtaGVhZGVycy1yZXNwb25kZXIucGhwCShub25leGlzdGVu
dCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvcmVzb3VyY2VzL2Nv
cnMtcHJlZmxpZ2h0LXNhZmVsaXN0ZWQtaGVhZGVycy1yZXNwb25kZXIucGhwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsOCBAQAorPD9waHAKK2hlYWRlcignQWNjZXNzLUNvbnRyb2wtQWxsb3ct
T3JpZ2luOiBodHRwOi8vMTI3LjAuMC4xOjgwMDAnKTsKKworaWYgKCRfU0VSVkVSWydSRVFVRVNU
X01FVEhPRCddID09ICdPUFRJT05TJyAmJiBpc3NldCgkX0dFVFsnZXhwbGljaXRseUFsbG93SGVh
ZGVycyddKSkgeworICAgIGhlYWRlcignQWNjZXNzLUNvbnRyb2wtQWxsb3ctTWV0aG9kczogR0VU
LCBPUFRJT05TJyk7CisgICAgaGVhZGVyKCdBY2Nlc3MtQ29udHJvbC1BbGxvdy1IZWFkZXJzOiBB
Y2NlcHQsIEFjY2VwdC1MYW5ndWFnZSwgQ29udGVudC1MYW5ndWFnZScpOworfQorPz4KXCBObyBu
ZXdsaW5lIGF0IGVuZCBvZiBmaWxlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>295966</attachid>
            <date>2016-12-02 11:18:21 -0800</date>
            <delta_ts>2016-12-02 11:20:50 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-165178-20161202111750.patch</filename>
            <type>text/plain</type>
            <size>25509</size>
            <attacher name="John Wilander">wilander</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwOTI0OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYxIEBACisyMDE2LTEyLTAyICBKb2huIFdp
bGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlcXVpcmUgcHJlZmxpZ2h0
IGZvciBub24tc3RhbmRhcmQgQ09SUy1zYWZlbGlzdGVkIHJlcXVlc3QgaGVhZGVycyBBY2NlcHQs
IEFjY2VwdC1MYW5ndWFnZSwgYW5kIENvbnRlbnQtTGFuZ3VhZ2UKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTE3OAorICAgICAgICA8cmRhcjovL3By
b2JsZW0vMTg3OTIyNTA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWW91ZW5uIEZhYmxldC4KKwor
ICAgICAgICBGZXRjaCBjdXJyZW50bHkgb25seSByZXN0cmljdHMgdGhlIGhlYWRlciBDb250ZW50
LVR5cGUgZm9yIHNpbXBsZSByZXF1ZXN0czoKKyAgICAgICAgaHR0cHM6Ly9mZXRjaC5zcGVjLndo
YXR3Zy5vcmcvI2NvcnMtc2FmZWxpc3RlZC1yZXF1ZXN0LWhlYWRlcgorCisgICAgICAgIFRoaXMg
bWVhbnMgc2ltcGxlIENPUlMgcmVxdWVzdHMgY2FuIHNlbmQgdW5leHBlY3RlZCBjaGFyYWN0ZXJz
IGluIEFjY2VwdCwgCisgICAgICAgIEFjY2VwdC1MYW5ndWFnZSwgYW5kIENvbnRlbnQtTGFuZ3Vh
Z2UgaGVhZGVyIHZhbHVlcy4KKworICAgICAgICBSRkMgNzIzMSBpbXBsaWVzIHJlc3RyaWN0aW9u
cyBvbiB0aGVzZSBoZWFkZXIgdmFsdWVzOgorICAgICAgICAtIEFjY2VwdCBodHRwczovL3Rvb2xz
LmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTUuMy4yCisgICAgICAgIC0gQWNjZXB0LUxh
bmd1YWdlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNS4zLjUK
KyAgICAgICAgLSBDb250ZW50LUxhbmd1YWdlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9y
ZmM3MjMxI3NlY3Rpb24tMy4xLjMuMgorCisgICAgICAgIEFzIHBlciBkaXNjdXNzaW9ucyBpbiB0
aGUgVzNDIFdlYkFwcFNlYyBncm91cCB3ZSBzaG91bGQgdHJ5IHRvIHJlc3RyaWN0IAorICAgICAg
ICB0aGVzZSBoZWFkZXIgdmFsdWVzIHRvIGhlbHAgcHJvdGVjdCBzZXJ2ZXJzIHRoYXQgZG8gbm90
IGV4cGVjdCBzaW1wbGUgQ09SUyAKKyAgICAgICAgcmVxdWVzdHMuCisKKyAgICAgICAgTm9uLXN0
YW5kYXJkLCBzYWZlbGlzdGVkIGhlYWRlciB2YWx1ZXMgc2hvdWxkIHRyaWdnZXIgYSBwcmVmbGln
aHQgYW5kIHJlcXVpcmUKKyAgICAgICAgdGhlIGhlYWRlcnMgdG8gYmUgd2hpdGVsaXN0ZWQgaW4g
dGhlIHJlc3BvbnNlJ3MgQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVycy4KKyAgICAgICAgRm9y
IEZldGNoIGluIG5vLWNvcnMgbW9kZSB0aGlzIGNoYW5nZSBtZWFucyBub24tc3RhbmRhcmQgaGVh
ZGVyIHZhbHVlcyBhcmUgbm90CisgICAgICAgIGFsbG93ZWQgdG8gYmUgc2V0LgorCisgICAgICAg
IFRlc3Q6IGh0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvY29ycy1ub24tc3RhbmRhcmQtc2FmZWxp
c3RlZC1oZWFkZXJzLXNob3VsZC10cmlnZ2VyLXByZWZsaWdodC5odG1sCisKKyAgICAgICAgKiBs
b2FkZXIvQ3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omlz
U2ltcGxlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0KToKKyAgICAgICAgICAgIE5vdyBjYWxscyBX
ZWJDb3JlOjppc0Nyb3NzT3JpZ2luU2FmZVJlcXVlc3RIZWFkZXIoKSBpbnN0ZWFkIG9mCisgICAg
ICAgICAgICBXZWJDb3JlOjppc09uQWNjZXNzQ29udHJvbFNpbXBsZVJlcXVlc3RIZWFkZXJXaGl0
ZWxpc3QoKS4KKyAgICAgICAgKFdlYkNvcmU6OmlzT25BY2Nlc3NDb250cm9sU2ltcGxlUmVxdWVz
dEhlYWRlcldoaXRlbGlzdCk6IERlbGV0ZWQuCisgICAgICAgICAgICBJdCB3YXMgYSBkdXBsaWNh
dGUgb2YgV2ViQ29yZTo6aXNDcm9zc09yaWdpblNhZmVSZXF1ZXN0SGVhZGVyKCkuCisgICAgICAg
ICogbG9hZGVyL0Nyb3NzT3JpZ2luQWNjZXNzQ29udHJvbC5oOgorICAgICAgICAqIGxvYWRlci9D
cm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNy
b3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGVJdGVtOjphbGxvd3NDcm9zc09yaWdpbkhlYWRl
cnMpOgorICAgICAgICAgICAgTm93IGNhbGxzIFdlYkNvcmU6OmlzQ3Jvc3NPcmlnaW5TYWZlUmVx
dWVzdEhlYWRlcigpIGluc3RlYWQgb2YKKyAgICAgICAgICAgIFdlYkNvcmU6OmlzT25BY2Nlc3ND
b250cm9sU2ltcGxlUmVxdWVzdEhlYWRlcldoaXRlbGlzdCgpLgorICAgICAgICAqIHBsYXRmb3Jt
L25ldHdvcmsvSFRUUFBhcnNlcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNWYWxpZEFjY2Vw
dEhlYWRlclZhbHVlKToKKyAgICAgICAgICAgIEJhc2ljIGNoZWNrIHRoYXQgdGhlIGNoYXJhY3Rl
cnMgYXJlIGFsbCBBU0NJSSBhbHBoYW51bWVyaWMsICcgJywgJyonLCAnLicsCisgICAgICAgICAg
ICAnLycsICc7Jywgb3IgJz0nLgorICAgICAgICAoV2ViQ29yZTo6aXNWYWxpZExhbmd1YWdlSGVh
ZGVyVmFsdWUpOgorICAgICAgICAgICAgQmFzaWMgY2hlY2sgdGhhdCB0aGUgY2hhcmFjdGVycyBh
cmUgYWxsIEFTQ0lJIGFscGhhbnVtZXJpYywgJyAnLCAnKicsICctJywKKyAgICAgICAgICAgICcu
JywgJzsnLCBvciAnPScuCisgICAgICAgIChXZWJDb3JlOjppc1NpbXBsZUhlYWRlcik6CisgICAg
ICAgICAgICBOb3cgbWFrZXMgYSBjYWxsIHRvIFdlYkNvcmU6OmlzVmFsaWRBY2NlcHRIZWFkZXJW
YWx1ZSgpIGZvciBBY2NlcHQKKyAgICAgICAgICAgIGhlYWRlcnMgYW5kIFdlYkNvcmU6OmlzVmFs
aWRMYW5ndWFnZUhlYWRlclZhbHVlKCkgZm9yIEFjY2VwdC1MYW5ndWFnZQorICAgICAgICAgICAg
YW5kIENvbnRlbnQtTGFuZ3VhZ2UgaGVhZGVycy4KKyAgICAgICAgKFdlYkNvcmU6OmlzQ3Jvc3NP
cmlnaW5TYWZlUmVxdWVzdEhlYWRlcik6CisgICAgICAgICAgICBOb3cgbWFrZXMgYSBjYWxsIHRv
IFdlYkNvcmU6OmlzVmFsaWRBY2NlcHRIZWFkZXJWYWx1ZSgpIGZvciBBY2NlcHQKKyAgICAgICAg
ICAgIGhlYWRlcnMgYW5kIFdlYkNvcmU6OmlzVmFsaWRMYW5ndWFnZUhlYWRlclZhbHVlKCkgZm9y
IEFjY2VwdC1MYW5ndWFnZQorICAgICAgICAgICAgYW5kIENvbnRlbnQtTGFuZ3VhZ2UgaGVhZGVy
cy4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0hUVFBQYXJzZXJzLmg6CisKIDIwMTYtMTIt
MDIgIERhdmUgSHlhdHQgIDxoeWF0dEBhcHBsZS5jb20+CiAKICAgICAgICAgW0NTUyBQYXJzZXJd
IEFkZCBzdXBwb3J0IGZvciB0aGUgU1ZHICdrZXJuaW5nJyBwcm9wZXJ0eQpJbmRleDogU291cmNl
L1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2luQWNjZXNzQ29udHJvbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2luQWNjZXNzQ29udHJvbC5jcHAJKHJl
dmlzaW9uIDIwOTE4MikKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpbkFjY2Vz
c0NvbnRyb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSwzMiArNDUsMTMgQEAgYm9vbCBpc09u
QWNjZXNzQ29udHJvbFNpbXBsZVJlcXVlc3RNZXRobwogICAgIHJldHVybiBtZXRob2QgPT0gIkdF
VCIgfHwgbWV0aG9kID09ICJIRUFEIiB8fCBtZXRob2QgPT0gIlBPU1QiOwogfQogCi1ib29sIGlz
T25BY2Nlc3NDb250cm9sU2ltcGxlUmVxdWVzdEhlYWRlcldoaXRlbGlzdChIVFRQSGVhZGVyTmFt
ZSBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIHN3aXRjaCAobmFtZSkgewotICAg
IGNhc2UgSFRUUEhlYWRlck5hbWU6OkFjY2VwdDoKLSAgICBjYXNlIEhUVFBIZWFkZXJOYW1lOjpB
Y2NlcHRMYW5ndWFnZToKLSAgICBjYXNlIEhUVFBIZWFkZXJOYW1lOjpDb250ZW50TGFuZ3VhZ2U6
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGNhc2UgSFRUUEhlYWRlck5hbWU6OkNvbnRlbnRU
eXBlOiB7Ci0gICAgICAgIC8vIFByZWZsaWdodCBpcyByZXF1aXJlZCBmb3IgTUlNRSB0eXBlcyB0
aGF0IGNhbiBub3QgYmUgc2VudCB2aWEgZm9ybSBzdWJtaXNzaW9uLgotICAgICAgICBTdHJpbmcg
bWltZVR5cGUgPSBleHRyYWN0TUlNRVR5cGVGcm9tTWVkaWFUeXBlKHZhbHVlKTsKLSAgICAgICAg
cmV0dXJuIGVxdWFsSWdub3JpbmdBU0NJSUNhc2UobWltZVR5cGUsICJhcHBsaWNhdGlvbi94LXd3
dy1mb3JtLXVybGVuY29kZWQiKQotICAgICAgICAgICAgfHwgZXF1YWxJZ25vcmluZ0FTQ0lJQ2Fz
ZShtaW1lVHlwZSwgIm11bHRpcGFydC9mb3JtLWRhdGEiKQotICAgICAgICAgICAgfHwgZXF1YWxJ
Z25vcmluZ0FTQ0lJQ2FzZShtaW1lVHlwZSwgInRleHQvcGxhaW4iKTsKLSAgICB9Ci0gICAgZGVm
YXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQogYm9vbCBpc1NpbXBsZUNy
b3NzT3JpZ2luQWNjZXNzUmVxdWVzdChjb25zdCBTdHJpbmcmIG1ldGhvZCwgY29uc3QgSFRUUEhl
YWRlck1hcCYgaGVhZGVyTWFwKQogewogICAgIGlmICghaXNPbkFjY2Vzc0NvbnRyb2xTaW1wbGVS
ZXF1ZXN0TWV0aG9kV2hpdGVsaXN0KG1ldGhvZCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIGZvciAoY29uc3QgYXV0byYgaGVhZGVyIDogaGVhZGVyTWFwKSB7Ci0gICAgICAgIGlmICgh
aGVhZGVyLmtleUFzSFRUUEhlYWRlck5hbWUgfHwgIWlzT25BY2Nlc3NDb250cm9sU2ltcGxlUmVx
dWVzdEhlYWRlcldoaXRlbGlzdChoZWFkZXIua2V5QXNIVFRQSGVhZGVyTmFtZS52YWx1ZSgpLCBo
ZWFkZXIudmFsdWUpKQorICAgICAgICBpZiAoIWhlYWRlci5rZXlBc0hUVFBIZWFkZXJOYW1lIHx8
ICFpc0Nyb3NzT3JpZ2luU2FmZVJlcXVlc3RIZWFkZXIoaGVhZGVyLmtleUFzSFRUUEhlYWRlck5h
bWUudmFsdWUoKSwgaGVhZGVyLnZhbHVlKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpbkFjY2Vzc0NvbnRy
b2wuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5BY2Nl
c3NDb250cm9sLmgJKHJldmlzaW9uIDIwOTE4MikKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9D
cm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNiBA
QCBjbGFzcyBVUkw7CiAKIGJvb2wgaXNTaW1wbGVDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3QoY29u
c3QgU3RyaW5nJiBtZXRob2QsIGNvbnN0IEhUVFBIZWFkZXJNYXAmKTsKIGJvb2wgaXNPbkFjY2Vz
c0NvbnRyb2xTaW1wbGVSZXF1ZXN0TWV0aG9kV2hpdGVsaXN0KGNvbnN0IFN0cmluZyYpOwotYm9v
bCBpc09uQWNjZXNzQ29udHJvbFNpbXBsZVJlcXVlc3RIZWFkZXJXaGl0ZWxpc3QoSFRUUEhlYWRl
ck5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpOwogYm9vbCBpc09uQWNjZXNzQ29udHJvbFJlc3Bv
bnNlSGVhZGVyV2hpdGVsaXN0KGNvbnN0IFN0cmluZyYpOwogCiB2b2lkIHVwZGF0ZVJlcXVlc3RG
b3JBY2Nlc3NDb250cm9sKFJlc291cmNlUmVxdWVzdCYsIFNlY3VyaXR5T3JpZ2luJiwgU3RvcmVk
Q3JlZGVudGlhbHMpOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2luUHJl
ZmxpZ2h0UmVzdWx0Q2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9Dcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmNwcAkocmV2aXNpb24gMjA5MTgyKQor
KysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJDcm9zc09y
aWdpbkFjY2Vzc0NvbnRyb2wuaCIKICNpbmNsdWRlICJIVFRQSGVhZGVyTmFtZXMuaCIKKyNpbmNs
dWRlICJIVFRQUGFyc2Vycy5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKICNpbmNs
dWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgpA
QCAtMTI3LDcgKzEyOCw3IEBAIGJvb2wgQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZUl0
ZW0KIGJvb2wgQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZUl0ZW06OmFsbG93c0Nyb3Nz
T3JpZ2luSGVhZGVycyhjb25zdCBIVFRQSGVhZGVyTWFwJiByZXF1ZXN0SGVhZGVycywgU3RyaW5n
JiBlcnJvckRlc2NyaXB0aW9uKSBjb25zdAogewogICAgIGZvciAoY29uc3QgYXV0byYgaGVhZGVy
IDogcmVxdWVzdEhlYWRlcnMpIHsKLSAgICAgICAgaWYgKGhlYWRlci5rZXlBc0hUVFBIZWFkZXJO
YW1lICYmIGlzT25BY2Nlc3NDb250cm9sU2ltcGxlUmVxdWVzdEhlYWRlcldoaXRlbGlzdChoZWFk
ZXIua2V5QXNIVFRQSGVhZGVyTmFtZS52YWx1ZSgpLCBoZWFkZXIudmFsdWUpKQorICAgICAgICBp
ZiAoaGVhZGVyLmtleUFzSFRUUEhlYWRlck5hbWUgJiYgaXNDcm9zc09yaWdpblNhZmVSZXF1ZXN0
SGVhZGVyKGhlYWRlci5rZXlBc0hUVFBIZWFkZXJOYW1lLnZhbHVlKCksIGhlYWRlci52YWx1ZSkp
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKCFtX2hlYWRlcnMuY29udGFpbnMo
aGVhZGVyLmtleSkpIHsKICAgICAgICAgICAgIGVycm9yRGVzY3JpcHRpb24gPSAiUmVxdWVzdCBo
ZWFkZXIgZmllbGQgIiArIGhlYWRlci5rZXkgKyAiIGlzIG5vdCBhbGxvd2VkIGJ5IEFjY2Vzcy1D
b250cm9sLUFsbG93LUhlYWRlcnMuIjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvSFRUUFBhcnNlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvSFRUUFBhcnNlcnMuY3BwCShyZXZpc2lvbiAyMDkxODIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBQYXJzZXJzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkhUVFBQYXJzZXJzLmgiCiAKICNpbmNsdWRlICJI
VFRQSGVhZGVyTmFtZXMuaCIKKyNpbmNsdWRlICJMYW5ndWFnZS5oIgogI2luY2x1ZGUgPHd0Zi9E
YXRlTWF0aC5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KQEAgLTEyNiw2ICsxMjcsMzYgQEAgYm9vbCBpc1ZhbGlkSFRUUEhl
YWRlclZhbHVlKGNvbnN0IFN0cmluZwogICAgIHJldHVybiB0cnVlOwogfQogCisvLyBTZWUgUkZD
IDcyMzEsIFNlY3Rpb24gNS4zLjIKK2Jvb2wgaXNWYWxpZEFjY2VwdEhlYWRlclZhbHVlKGNvbnN0
IFN0cmluZyYgdmFsdWUpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVlLmxl
bmd0aCgpOyArK2kpIHsKKyAgICAgICAgVUNoYXIgYyA9IHZhbHVlW2ldOworICAgICAgICBpZiAo
aXNBU0NJSUFscGhhbnVtZXJpYyhjKSB8fCBjID09ICcgJyB8fCBjID09ICcqJyB8fCBjID09ICcu
JyB8fCBjID09ICcvJyB8fCBjID09ICc7JyB8fCBjID09ICc9JykKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIHJldHVybiB0cnVl
OworfQorCisvLyBTZWUgUkZDIDcyMzEsIFNlY3Rpb24gNS4zLjUgYW5kIDMuMS4zLjIKK2Jvb2wg
aXNWYWxpZExhbmd1YWdlSGVhZGVyVmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoKCk7ICsraSkgeworICAgICAgICBV
Q2hhciBjID0gdmFsdWVbaV07CisgICAgICAgIGlmIChpc0FTQ0lJQWxwaGFudW1lcmljKGMpIHx8
IGMgPT0gJyAnIHx8IGMgPT0gJyonIHx8IGMgPT0gJy0nIHx8IGMgPT0gJy4nIHx8IGMgPT0gJzsn
IHx8IGMgPT0gJz0nKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgCisgICAgLy8gRklYTUU6IFZhbGlkYXRlIGZ1cnRoZXIgYnkgc3BsaXR0
aW5nIGludG8gbGFuZ3VhZ2UgdGFncyBhbmQgb3B0aW9uYWwgcXVhbGl0eQorICAgIC8vIHZhbHVl
cyAocT0pIGFuZCB0aGVuIGNoZWNrIGVhY2ggbGFuZ3VhZ2UgdGFnLgorICAgIC8vIExhbmd1YWdl
IHRhZ3MgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi0zLjEuMy4x
CisgICAgLy8gTGFuZ3VhZ2UgdGFnIHN5bnRheCBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwv
YmNwNDcjc2VjdGlvbi0yLjEKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogLy8gU2VlIFJGQyA3MjMw
LCBTZWN0aW9uIDMuMi42LgogYm9vbCBpc1ZhbGlkSFRUUFRva2VuKGNvbnN0IFN0cmluZyYgdmFs
dWUpCiB7CkBAIC03MzIsNyArNzYzLDcgQEAgdm9pZCBwYXJzZUFjY2Vzc0NvbnRyb2xFeHBvc2VI
ZWFkZXJzQWxsbwogICAgIH0KIH0KIAotLy8gSW1wbGVtZW10bmF0aW9uIG9mIGh0dHBzOi8vZmV0
Y2guc3BlYy53aGF0d2cub3JnLyNjb3JzLXNhZmVsaXN0ZWQtcmVzcG9uc2UtaGVhZGVyLW5hbWUK
Ky8vIEltcGxlbWVudGF0aW9uIG9mIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb3Jz
LXNhZmVsaXN0ZWQtcmVzcG9uc2UtaGVhZGVyLW5hbWUKIGJvb2wgaXNGb3JiaWRkZW5IZWFkZXJO
YW1lKGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICBIVFRQSGVhZGVyTmFtZSBoZWFkZXJOYW1l
OwpAQCAtNzc4LDkgKzgwOSwxMCBAQCBib29sIGlzU2ltcGxlSGVhZGVyKGNvbnN0IFN0cmluZyYg
bmFtZSwgCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBzd2l0Y2ggKGhlYWRlck5hbWUpIHsK
ICAgICBjYXNlIEhUVFBIZWFkZXJOYW1lOjpBY2NlcHQ6CisgICAgICAgIHJldHVybiBpc1ZhbGlk
QWNjZXB0SGVhZGVyVmFsdWUodmFsdWUpOwogICAgIGNhc2UgSFRUUEhlYWRlck5hbWU6OkFjY2Vw
dExhbmd1YWdlOgogICAgIGNhc2UgSFRUUEhlYWRlck5hbWU6OkNvbnRlbnRMYW5ndWFnZToKLSAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBpc1ZhbGlkTGFuZ3VhZ2VIZWFkZXJW
YWx1ZSh2YWx1ZSk7CiAgICAgY2FzZSBIVFRQSGVhZGVyTmFtZTo6Q29udGVudFR5cGU6IHsKICAg
ICAgICAgU3RyaW5nIG1pbWVUeXBlID0gZXh0cmFjdE1JTUVUeXBlRnJvbU1lZGlhVHlwZSh2YWx1
ZSk7CiAgICAgICAgIHJldHVybiBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShtaW1lVHlw
ZSwgImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpIHx8IGVxdWFsTGV0dGVyc0ln
bm9yaW5nQVNDSUlDYXNlKG1pbWVUeXBlLCAibXVsdGlwYXJ0L2Zvcm0tZGF0YSIpIHx8IGVxdWFs
TGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG1pbWVUeXBlLCAidGV4dC9wbGFpbiIpOwpAQCAtODI0
LDEwICs4NTYsMTIgQEAgYm9vbCBpc0Nyb3NzT3JpZ2luU2FmZVJlcXVlc3RIZWFkZXIoSFRUUAog
ewogICAgIHN3aXRjaCAobmFtZSkgewogICAgIGNhc2UgSFRUUEhlYWRlck5hbWU6OkFjY2VwdDoK
KyAgICAgICAgcmV0dXJuIGlzVmFsaWRBY2NlcHRIZWFkZXJWYWx1ZSh2YWx1ZSk7CiAgICAgY2Fz
ZSBIVFRQSGVhZGVyTmFtZTo6QWNjZXB0TGFuZ3VhZ2U6CiAgICAgY2FzZSBIVFRQSGVhZGVyTmFt
ZTo6Q29udGVudExhbmd1YWdlOgotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJu
IGlzVmFsaWRMYW5ndWFnZUhlYWRlclZhbHVlKHZhbHVlKTsKICAgICBjYXNlIEhUVFBIZWFkZXJO
YW1lOjpDb250ZW50VHlwZTogeworICAgICAgICAvLyBQcmVmbGlnaHQgaXMgcmVxdWlyZWQgZm9y
IE1JTUUgdHlwZXMgdGhhdCBjYW4gbm90IGJlIHNlbnQgdmlhIGZvcm0gc3VibWlzc2lvbi4KICAg
ICAgICAgU3RyaW5nIG1pbWVUeXBlID0gZXh0cmFjdE1JTUVUeXBlRnJvbU1lZGlhVHlwZSh2YWx1
ZSk7CiAgICAgICAgIHJldHVybiBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShtaW1lVHlw
ZSwgImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpIHx8IGVxdWFsTGV0dGVyc0ln
bm9yaW5nQVNDSUlDYXNlKG1pbWVUeXBlLCAibXVsdGlwYXJ0L2Zvcm0tZGF0YSIpIHx8IGVxdWFs
TGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG1pbWVUeXBlLCAidGV4dC9wbGFpbiIpOwogICAgIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRUUFBhcnNlcnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBQYXJzZXJzLmgJ
KHJldmlzaW9uIDIwOTE4MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRU
UFBhcnNlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtNjksNiArNjksOCBAQCBlbnVtIFhGcmFtZU9w
dGlvbnNEaXNwb3NpdGlvbiB7CiAKIGJvb2wgaXNWYWxpZFJlYXNvblBocmFzZShjb25zdCBTdHJp
bmcmKTsKIGJvb2wgaXNWYWxpZEhUVFBIZWFkZXJWYWx1ZShjb25zdCBTdHJpbmcmKTsKK2Jvb2wg
aXNWYWxpZEFjY2VwdEhlYWRlclZhbHVlKGNvbnN0IFN0cmluZyYpOworYm9vbCBpc1ZhbGlkTGFu
Z3VhZ2VIZWFkZXJWYWx1ZShjb25zdCBTdHJpbmcmKTsKIGJvb2wgaXNWYWxpZEhUVFBUb2tlbihj
b25zdCBTdHJpbmcmKTsKIGJvb2wgcGFyc2VIVFRQUmVmcmVzaChjb25zdCBTdHJpbmcmIHJlZnJl
c2gsIGRvdWJsZSYgZGVsYXksIFN0cmluZyYgdXJsKTsKIHN0ZDo6b3B0aW9uYWw8c3RkOjpjaHJv
bm86OnN5c3RlbV9jbG9jazo6dGltZV9wb2ludD4gcGFyc2VIVFRQRGF0ZShjb25zdCBTdHJpbmcm
KTsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwOTE4MikKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyIEBACisyMDE2LTEyLTAyICBKb2huIFdpbGFuZGVy
ICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlcXVpcmUgcHJlZmxpZ2h0IGZvciBu
b24tc3RhbmRhcmQgQ09SUy1zYWZlbGlzdGVkIHJlcXVlc3QgaGVhZGVycyBBY2NlcHQsIEFjY2Vw
dC1MYW5ndWFnZSwgYW5kIENvbnRlbnQtTGFuZ3VhZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTE3OAorICAgICAgICA8cmRhcjovL3Byb2JsZW0v
MTg3OTIyNTA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWW91ZW5uIEZhYmxldC4KKworICAgICAg
ICBGZXRjaCBjdXJyZW50bHkgb25seSByZXN0cmljdHMgdGhlIGhlYWRlciBDb250ZW50LVR5cGUg
Zm9yIHNpbXBsZSByZXF1ZXN0czoKKyAgICAgICAgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5v
cmcvI2NvcnMtc2FmZWxpc3RlZC1yZXF1ZXN0LWhlYWRlcgorCisgICAgICAgIFRoaXMgbWVhbnMg
c2ltcGxlIENPUlMgcmVxdWVzdHMgY2FuIHNlbmQgdW5leHBlY3RlZCBjaGFyYWN0ZXJzIGluIEFj
Y2VwdCwgCisgICAgICAgIEFjY2VwdC1MYW5ndWFnZSwgYW5kIENvbnRlbnQtTGFuZ3VhZ2UgaGVh
ZGVyIHZhbHVlcy4KKworICAgICAgICBSRkMgNzIzMSBpbXBsaWVzIHJlc3RyaWN0aW9ucyBvbiB0
aGVzZSBoZWFkZXIgdmFsdWVzOgorICAgICAgICAtIEFjY2VwdCBodHRwczovL3Rvb2xzLmlldGYu
b3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTUuMy4yCisgICAgICAgIC0gQWNjZXB0LUxhbmd1YWdl
IGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNS4zLjUKKyAgICAg
ICAgLSBDb250ZW50LUxhbmd1YWdlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMx
I3NlY3Rpb24tMy4xLjMuMgorCisgICAgICAgIEFzIHBlciBkaXNjdXNzaW9ucyBpbiB0aGUgVzND
IFdlYkFwcFNlYyBncm91cCB3ZSBzaG91bGQgdHJ5IHRvIHJlc3RyaWN0IAorICAgICAgICB0aGVz
ZSBoZWFkZXIgdmFsdWVzIHRvIGhlbHAgcHJvdGVjdCBzZXJ2ZXJzIHRoYXQgZG8gbm90IGV4cGVj
dCBzaW1wbGUgQ09SUyAKKyAgICAgICAgcmVxdWVzdHMuCisKKyAgICAgICAgTm9uLXN0YW5kYXJk
LCBzYWZlbGlzdGVkIGhlYWRlciB2YWx1ZXMgc2hvdWxkIHRyaWdnZXIgYSBwcmVmbGlnaHQgYW5k
IHJlcXVpcmUKKyAgICAgICAgdGhlIGhlYWRlcnMgdG8gYmUgd2hpdGVsaXN0ZWQgaW4gdGhlIHJl
c3BvbnNlJ3MgQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVycy4KKyAgICAgICAgRm9yIEZldGNo
IGluIG5vLWNvcnMgbW9kZSB0aGlzIGNoYW5nZSBtZWFucyBub24tc3RhbmRhcmQgaGVhZGVyIHZh
bHVlcyBhcmUgbm90CisgICAgICAgIGFsbG93ZWQgdG8gYmUgc2V0LgorCisgICAgICAgICogaHR0
cC90ZXN0cy94bWxodHRwcmVxdWVzdC9jb3JzLW5vbi1zdGFuZGFyZC1zYWZlbGlzdGVkLWhlYWRl
cnMtc2hvdWxkLXRyaWdnZXItcHJlZmxpZ2h0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9jb3JzLW5vbi1zdGFuZGFyZC1zYWZlbGlzdGVk
LWhlYWRlcnMtc2hvdWxkLXRyaWdnZXItcHJlZmxpZ2h0Lmh0bWw6IEFkZGVkLgorICAgICAgICAg
ICAgVGVzdHMgdGhhdDoKKyAgICAgICAgICAgIC0gTm9ybWFsIEFjY2VwdCwgQWNjZXB0LUxhbmd1
YWdlLCBhbmQgQ29udGVudC1MYW5ndWFnZSBoZWFkZXJzIGRvbid0IHRyaWdnZXIKKyAgICAgICAg
ICAgICAgICBhIHByZWZsaWdodC4KKyAgICAgICAgICAgIC0gQWJub3JtYWwgQWNjZXB0LCBBY2Nl
cHQtTGFuZ3VhZ2UsIGFuZCBDb250ZW50LUxhbmd1YWdlIGhlYWRlcnMgZG8gdHJpZ2dlciAKKyAg
ICAgICAgICAgICAgICBhIHByZWZsaWdodC4KKyAgICAgICAgICAgIC0gQWJub3JtYWwgQWNjZXB0
LCBBY2NlcHQtTGFuZ3VhZ2UsIGFuZCBDb250ZW50LUxhbmd1YWdlIGhlYWRlcnMgYXJlIAorICAg
ICAgICAgICAgICAgIGFjY2VwdGVkIGlmIHRoZSBzZXJ2ZXIgd2hpdGVsaXN0cyB0aGVtLgorICAg
ICAgICAqIGh0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvcmVzb3VyY2VzL2NvcnMtcHJlZmxpZ2h0
LXNhZmVsaXN0ZWQtaGVhZGVycy1yZXNwb25kZXIucGhwOiBBZGRlZC4KKwogMjAxNi0xMi0wMSAg
QW50b2luZSBRdWludCAgPGdyYW91dHNAYXBwbGUuY29tPgogCiAgICAgICAgIFtNb2Rlcm4gTWVk
aWEgQ29udHJvbHNdIFByb3ZpZGUgYSBVSSBvYmplY3QgdG8gc2hvdyBhIGxpc3Qgb2YgdHJhY2tz
CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L2NvcnMtbm9uLXN0
YW5kYXJkLXNhZmVsaXN0ZWQtaGVhZGVycy1zaG91bGQtdHJpZ2dlci1wcmVmbGlnaHQtZXhwZWN0
ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVl
c3QvY29ycy1ub24tc3RhbmRhcmQtc2FmZWxpc3RlZC1oZWFkZXJzLXNob3VsZC10cmlnZ2VyLXBy
ZWZsaWdodC1leHBlY3RlZC50eHQJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy94bWxodHRwcmVxdWVzdC9jb3JzLW5vbi1zdGFuZGFyZC1zYWZlbGlzdGVkLWhlYWRlcnMt
c2hvdWxkLXRyaWdnZXItcHJlZmxpZ2h0LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDIxIEBACitDT05TT0xFIE1FU1NBR0U6IFhNTEh0dHBSZXF1ZXN0IGNhbm5vdCBsb2Fk
IGh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC94bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMvY29ycy1wcmVm
bGlnaHQtc2FmZWxpc3RlZC1oZWFkZXJzLXJlc3BvbmRlci5waHAuIFJlcXVlc3QgaGVhZGVyIGZp
ZWxkIEFjY2VwdCBpcyBub3QgYWxsb3dlZCBieSBBY2Nlc3MtQ29udHJvbC1BbGxvdy1IZWFkZXJz
LgorQ09OU09MRSBNRVNTQUdFOiBYTUxIdHRwUmVxdWVzdCBjYW5ub3QgbG9hZCBodHRwOi8vbG9j
YWxob3N0OjgwMDAveG1saHR0cHJlcXVlc3QvcmVzb3VyY2VzL2NvcnMtcHJlZmxpZ2h0LXNhZmVs
aXN0ZWQtaGVhZGVycy1yZXNwb25kZXIucGhwLiBSZXF1ZXN0IGhlYWRlciBmaWVsZCBBY2NlcHQt
TGFuZ3VhZ2UgaXMgbm90IGFsbG93ZWQgYnkgQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVycy4K
K0NPTlNPTEUgTUVTU0FHRTogWE1MSHR0cFJlcXVlc3QgY2Fubm90IGxvYWQgaHR0cDovL2xvY2Fs
aG9zdDo4MDAwL3htbGh0dHByZXF1ZXN0L3Jlc291cmNlcy9jb3JzLXByZWZsaWdodC1zYWZlbGlz
dGVkLWhlYWRlcnMtcmVzcG9uZGVyLnBocC4gUmVxdWVzdCBoZWFkZXIgZmllbGQgQ29udGVudC1M
YW5ndWFnZSBpcyBub3QgYWxsb3dlZCBieSBBY2Nlc3MtQ29udHJvbC1BbGxvdy1IZWFkZXJzLgor
Q09OU09MRSBNRVNTQUdFOiBYTUxIdHRwUmVxdWVzdCBjYW5ub3QgbG9hZCBodHRwOi8vbG9jYWxo
b3N0OjgwMDAveG1saHR0cHJlcXVlc3QvcmVzb3VyY2VzL2NvcnMtcHJlZmxpZ2h0LXNhZmVsaXN0
ZWQtaGVhZGVycy1yZXNwb25kZXIucGhwLiBSZXF1ZXN0IGhlYWRlciBmaWVsZCBDb250ZW50LUxh
bmd1YWdlIGlzIG5vdCBhbGxvd2VkIGJ5IEFjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnMuCitD
T05TT0xFIE1FU1NBR0U6IFhNTEh0dHBSZXF1ZXN0IGNhbm5vdCBsb2FkIGh0dHA6Ly9sb2NhbGhv
c3Q6ODAwMC94bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMvY29ycy1wcmVmbGlnaHQtc2FmZWxpc3Rl
ZC1oZWFkZXJzLXJlc3BvbmRlci5waHAuIFJlcXVlc3QgaGVhZGVyIGZpZWxkIEFjY2VwdCBpcyBu
b3QgYWxsb3dlZCBieSBBY2Nlc3MtQ29udHJvbC1BbGxvdy1IZWFkZXJzLgorUEFTUyBBY2NlcHQg
aGVhZGVyIHdpdGggbm9ybWFsIHZhbHVlIFNIT1VMRCBOT1QgY2F1c2UgYSBwcmVmbGlnaHQKK1BB
U1MgQWNjZXB0IGhlYWRlciB2YWx1ZSB3aXRoIGFsbCBhbGxvd2VkIG5vbi1hbHBoYW51bWVyaWMg
Y2hhcmFjdGVycyBTSE9VTEQgTk9UIGNhdXNlIGEgcHJlZmxpZ2h0CitQQVNTIEFjY2VwdC1MYW5n
dWFnZSBoZWFkZXIgd2l0aCBub3JtYWwgdmFsdWUgU0hPVUxEIE5PVCBjYXVzZSBhIHByZWZsaWdo
dAorUEFTUyBBY2NlcHQtTGFuZ3VhZ2UgaGVhZGVyIHZhbHVlIHdpdGggYWxsIGFsbG93ZWQgbm9u
LWFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIFNIT1VMRCBOT1QgY2F1c2UgYSBwcmVmbGlnaHQKK1BB
U1MgQ29udGVudC1MYW5ndWFnZSBoZWFkZXIgd2l0aCBub3JtYWwgdmFsdWUgU0hPVUxEIE5PVCBj
YXVzZSBhIHByZWZsaWdodAorUEFTUyBDb250ZW50LUxhbmd1YWdlIGhlYWRlciB2YWx1ZSB3aXRo
IGFsbCBhbGxvd2VkIG5vbi1hbHBoYW51bWVyaWMgY2hhcmFjdGVycyBTSE9VTEQgTk9UIGNhdXNl
IGEgcHJlZmxpZ2h0CitQQVNTIEFjY2VwdCBoZWFkZXIgd2l0aCBhYm5vcm1hbCB2YWx1ZSBTSE9V
TEQgY2F1c2UgYSBwcmVmbGlnaHQKK1BBU1MgQWNjZXB0LUxhbmd1YWdlIGhlYWRlciB3aXRoIGFi
bm9ybWFsIHZhbHVlIFNIT1VMRCBjYXVzZSBhIHByZWZsaWdodAorUEFTUyBDb250ZW50LUxhbmd1
YWdlIGhlYWRlciB3aXRoIGFibm9ybWFsIHZhbHVlIFNIT1VMRCBjYXVzZSBhIHByZWZsaWdodAor
UEFTUyBBY2NlcHQgaGVhZGVyIHdpdGggbm9ybWFsIHZhbHVlLCBBY2NlcHQtTGFuZ3VhZ2UgaGVh
ZGVyIHdpdGggbm9ybWFsIHZhbHVlLCBhbmQgQ29udGVudC1MYW5ndWFnZSBoZWFkZXIgd2l0aCBh
Ym5vcm1hbCB2YWx1ZSBTSE9VTEQgY2F1c2UgYSBwcmVmbGlnaHQKK1BBU1MgQWNjZXB0IGhlYWRl
ciB3aXRoIG5vcm1hbCB2YWx1ZSBhbmQgdGhlbiBhbm90aGVyIEFjY2VwdCBoZWFkZXIgd2l0aCBh
Ym5vcm1hbCB2YWx1ZSBTSE9VTEQgY2F1c2UgYSBwcmVmbGlnaHQKK1BBU1MgQWNjZXB0IGhlYWRl
ciB3aXRoIGFibm9ybWFsIHZhbHVlIGFuZCBleHBsaWNpdGx5IGFsbG93ZWQgaGVhZGVycyBTSE9V
TEQgYmUgYWxsb3dlZAorUEFTUyBDb250ZW50LUxhbmd1YWdlIGhlYWRlciB3aXRoIGFibm9ybWFs
IHZhbHVlIGFuZCBleHBsaWNpdGx5IGFsbG93ZWQgaGVhZGVycyBTSE9VTEQgYmUgYWxsb3dlZAor
UEFTUyBBY2NlcHQgaGVhZGVyIHdpdGggbm9ybWFsIHZhbHVlLCBBY2NlcHQtTGFuZ3VhZ2UgaGVh
ZGVyIHdpdGggbm9ybWFsIHZhbHVlLCBDb250ZW50LUxhbmd1YWdlIGhlYWRlciB3aXRoIGFibm9y
bWFsIHZhbHVlLCBhbmQgZXhwbGljaXRseSBhbGxvd2VkIGhlYWRlcnMgU0hPVUxEIGJlIGFsbG93
ZWQKK1BBU1MgQWNjZXB0IGhlYWRlciB3aXRoIG5vcm1hbCB2YWx1ZSwgdGhlbiBhbm90aGVyIEFj
Y2VwdCBoZWFkZXIgd2l0aCBhYm5vcm1hbCB2YWx1ZSwgYW5kIGV4cGxpY2l0bHkgYWxsb3dlZCBo
ZWFkZXJzIFNIT1VMRCBiZSBhbGxvd2VkCisKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMv
eG1saHR0cHJlcXVlc3QvY29ycy1ub24tc3RhbmRhcmQtc2FmZWxpc3RlZC1oZWFkZXJzLXNob3Vs
ZC10cmlnZ2VyLXByZWZsaWdodC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAv
dGVzdHMveG1saHR0cHJlcXVlc3QvY29ycy1ub24tc3RhbmRhcmQtc2FmZWxpc3RlZC1oZWFkZXJz
LXNob3VsZC10cmlnZ2VyLXByZWZsaWdodC5odG1sCShub25leGlzdGVudCkKKysrIExheW91dFRl
c3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvY29ycy1ub24tc3RhbmRhcmQtc2FmZWxpc3Rl
ZC1oZWFkZXJzLXNob3VsZC10cmlnZ2VyLXByZWZsaWdodC5odG1sCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTYwIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFk
PgorICAgIDxtZXRhIGNoYXJzZXQ9IlVURi04Ij4KKyAgICA8dGl0bGU+Tm9uLVN0YW5kYXJkIFNh
ZmVsaXN0ZWQgSGVhZGVycyBTSE9VTEQgVHJpZ2dlciBhIFByZWZsaWdodDwvdGl0bGU+CisgICAg
PHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hl
YWQ+Cis8Ym9keT4KKzwhLS0gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvcnMtc2Fm
ZWxpc3RlZC1yZXF1ZXN0LWhlYWRlciAtLT4KKzxzY3JpcHQ+CisgICAgaWYgKHdpbmRvdy50ZXN0
UnVubmVyKSB7CisgICAgICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOworICAgICAgICB0ZXN0
UnVubmVyLndhaXRVbnRpbERvbmUoKTsKKyAgICB9CisKKyAgICB2YXIgeGhyOworICAgIHZhciB1
cmwgPSAnaHR0cDovL2xvY2FsaG9zdDo4MDAwL3htbGh0dHByZXF1ZXN0L3Jlc291cmNlcy9jb3Jz
LXByZWZsaWdodC1zYWZlbGlzdGVkLWhlYWRlcnMtcmVzcG9uZGVyLnBocCc7CisKKyAgICBmdW5j
dGlvbiBjcmVhdGVSZWFkeVN0YXRlSGFuZGxlciAoZGVzY3JpcHRpb24sIHRlc3ROdW1iZXIpIHsK
KyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGhhbmRsZXIgKGUpIHsKKyAgICAgICAgICAgIGlmICh4
aHIucmVhZHlTdGF0ZSA9PT0gWE1MSHR0cFJlcXVlc3QuRE9ORSkgeworICAgICAgICAgICAgICAg
IHRlc3RQYXNzZWQoZGVzY3JpcHRpb24pOworICAgICAgICAgICAgICAgIG5leHRTdGVwKHRlc3RO
dW1iZXIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24g
Y3JlYXRlT25FcnJvckhhbmRsZXIgKGRlc2NyaXB0aW9uLCB0ZXN0TnVtYmVyKSB7CisgICAgICAg
IHJldHVybiBmdW5jdGlvbiBoYW5kbGVyIChlKSB7CisgICAgICAgICAgICBlLnByZXZlbnREZWZh
dWx0KCk7CisgICAgICAgICAgICB0ZXN0UGFzc2VkKGRlc2NyaXB0aW9uKTsKKyAgICAgICAgICAg
IG5leHRTdGVwKHRlc3ROdW1iZXIpOworICAgICAgICB9CisgICAgfQorCisgICAgdmFyIGFibm9y
bWFsU2ltcGxlQ29yc0hlYWRlclZhbHVlID0gIigpIHsgOjt9OyIKKyAgICB2YXIgYWxsQWxsb3dl
ZE5vbkFscGhhbnVtZXJpY0NoYXJhY3RlcnNGb3JBY2NlcHRIZWFkZXIgPSAiICouLzs9IgorICAg
IHZhciBhbGxBbGxvd2VkTm9uQWxwaGFudW1lcmljQ2hhcmFjdGVyc0ZvckFjY2VwdEFuZENvbnRl
bnRMYW5ndWFnZUhlYWRlciA9ICIgKi0uOz0iCisgICAgdmFyIHRlc3RDYXNlcyA9IFsKKyAgICAg
ICAgLy8gUG9zaXRpdmUgdGVzdCBjYXNlcyB3aXRoIG5vcm1hbCBoZWFkZXJzCisgICAgICAgIHsK
KyAgICAgICAgICAgIGhlYWRlcnNUb0FkZDogW3sgbmFtZSA6ICJBY2NlcHQiLCB2YWx1ZTogInRl
eHQvKiIgfV0sCisgICAgICAgICAgICBleHBsaWNpdGx5QWxsb3dIZWFkZXJzOiBmYWxzZSwKKyAg
ICAgICAgICAgIHNob3VsZENhdXNlUHJlZmxpZ2h0OiBmYWxzZSwKKyAgICAgICAgICAgIGRlc2Ny
aXB0aW9uOiAiQWNjZXB0IGhlYWRlciB3aXRoIG5vcm1hbCB2YWx1ZSBTSE9VTEQgTk9UIGNhdXNl
IGEgcHJlZmxpZ2h0IgorICAgICAgICB9CisgICAgICAgICx7CisgICAgICAgICAgICBoZWFkZXJz
VG9BZGQ6IFt7IG5hbWUgOiAiQWNjZXB0IiwgdmFsdWU6IGFsbEFsbG93ZWROb25BbHBoYW51bWVy
aWNDaGFyYWN0ZXJzRm9yQWNjZXB0SGVhZGVyIH1dLAorICAgICAgICAgICAgZXhwbGljaXRseUFs
bG93SGVhZGVyczogZmFsc2UsCisgICAgICAgICAgICBzaG91bGRDYXVzZVByZWZsaWdodDogZmFs
c2UsCisgICAgICAgICAgICBkZXNjcmlwdGlvbjogIkFjY2VwdCBoZWFkZXIgdmFsdWUgd2l0aCBh
bGwgYWxsb3dlZCBub24tYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgU0hPVUxEIE5PVCBjYXVzZSBh
IHByZWZsaWdodCIKKyAgICAgICAgfQorICAgICAgICAseworICAgICAgICAgICAgaGVhZGVyc1Rv
QWRkOiBbeyBuYW1lIDogIkFjY2VwdC1MYW5ndWFnZSIsIHZhbHVlOiAiZW4iIH1dLAorICAgICAg
ICAgICAgZXhwbGljaXRseUFsbG93SGVhZGVyczogZmFsc2UsCisgICAgICAgICAgICBzaG91bGRD
YXVzZVByZWZsaWdodDogZmFsc2UsCisgICAgICAgICAgICBkZXNjcmlwdGlvbjogIkFjY2VwdC1M
YW5ndWFnZSBoZWFkZXIgd2l0aCBub3JtYWwgdmFsdWUgU0hPVUxEIE5PVCBjYXVzZSBhIHByZWZs
aWdodCIKKyAgICAgICAgfQorICAgICAgICAseworICAgICAgICAgICAgaGVhZGVyc1RvQWRkOiBb
eyBuYW1lIDogIkFjY2VwdC1MYW5ndWFnZSIsIHZhbHVlOiBhbGxBbGxvd2VkTm9uQWxwaGFudW1l
cmljQ2hhcmFjdGVyc0ZvckFjY2VwdEFuZENvbnRlbnRMYW5ndWFnZUhlYWRlciB9XSwKKyAgICAg
ICAgICAgIGV4cGxpY2l0bHlBbGxvd0hlYWRlcnM6IGZhbHNlLAorICAgICAgICAgICAgc2hvdWxk
Q2F1c2VQcmVmbGlnaHQ6IGZhbHNlLAorICAgICAgICAgICAgZGVzY3JpcHRpb246ICJBY2NlcHQt
TGFuZ3VhZ2UgaGVhZGVyIHZhbHVlIHdpdGggYWxsIGFsbG93ZWQgbm9uLWFscGhhbnVtZXJpYyBj
aGFyYWN0ZXJzIFNIT1VMRCBOT1QgY2F1c2UgYSBwcmVmbGlnaHQiCisgICAgICAgIH0KKyAgICAg
ICAgLHsKKyAgICAgICAgICAgIGhlYWRlcnNUb0FkZDogW3sgbmFtZSA6ICJDb250ZW50LUxhbmd1
YWdlIiwgdmFsdWU6ICJlbiIgfV0sCisgICAgICAgICAgICBleHBsaWNpdGx5QWxsb3dIZWFkZXJz
OiBmYWxzZSwKKyAgICAgICAgICAgIHNob3VsZENhdXNlUHJlZmxpZ2h0OiBmYWxzZSwKKyAgICAg
ICAgICAgIGRlc2NyaXB0aW9uOiAiQ29udGVudC1MYW5ndWFnZSBoZWFkZXIgd2l0aCBub3JtYWwg
dmFsdWUgU0hPVUxEIE5PVCBjYXVzZSBhIHByZWZsaWdodCIKKyAgICAgICAgfQorICAgICAgICAs
eworICAgICAgICAgICAgaGVhZGVyc1RvQWRkOiBbeyBuYW1lIDogIkNvbnRlbnQtTGFuZ3VhZ2Ui
LCB2YWx1ZTogYWxsQWxsb3dlZE5vbkFscGhhbnVtZXJpY0NoYXJhY3RlcnNGb3JBY2NlcHRBbmRD
b250ZW50TGFuZ3VhZ2VIZWFkZXIgfV0sCisgICAgICAgICAgICBleHBsaWNpdGx5QWxsb3dIZWFk
ZXJzOiBmYWxzZSwKKyAgICAgICAgICAgIHNob3VsZENhdXNlUHJlZmxpZ2h0OiBmYWxzZSwKKyAg
ICAgICAgICAgIGRlc2NyaXB0aW9uOiAiQ29udGVudC1MYW5ndWFnZSBoZWFkZXIgdmFsdWUgd2l0
aCBhbGwgYWxsb3dlZCBub24tYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgU0hPVUxEIE5PVCBjYXVz
ZSBhIHByZWZsaWdodCIKKyAgICAgICAgfQorICAgICAgICAvLyBOZWdhdGl2ZSB0ZXN0IGNhc2Vz
IHdpdGggYWJub3JtYWwgaGVhZGVycworICAgICAgICAseworICAgICAgICAgICAgaGVhZGVyc1Rv
QWRkOiBbeyBuYW1lIDogIkFjY2VwdCIsIHZhbHVlOiBhYm5vcm1hbFNpbXBsZUNvcnNIZWFkZXJW
YWx1ZSB9XSwKKyAgICAgICAgICAgIGV4cGxpY2l0bHlBbGxvd0hlYWRlcnM6IGZhbHNlLAorICAg
ICAgICAgICAgc2hvdWxkQ2F1c2VQcmVmbGlnaHQ6IHRydWUsCisgICAgICAgICAgICBkZXNjcmlw
dGlvbjogIkFjY2VwdCBoZWFkZXIgd2l0aCBhYm5vcm1hbCB2YWx1ZSBTSE9VTEQgY2F1c2UgYSBw
cmVmbGlnaHQiCisgICAgICAgIH0KKyAgICAgICAgLHsKKyAgICAgICAgICAgIGhlYWRlcnNUb0Fk
ZDogW3sgbmFtZSA6ICJBY2NlcHQtTGFuZ3VhZ2UiLCB2YWx1ZTogYWJub3JtYWxTaW1wbGVDb3Jz
SGVhZGVyVmFsdWUgfV0sCisgICAgICAgICAgICBleHBsaWNpdGx5QWxsb3dIZWFkZXJzOiBmYWxz
ZSwKKyAgICAgICAgICAgIHNob3VsZENhdXNlUHJlZmxpZ2h0OiB0cnVlLAorICAgICAgICAgICAg
ZGVzY3JpcHRpb246ICJBY2NlcHQtTGFuZ3VhZ2UgaGVhZGVyIHdpdGggYWJub3JtYWwgdmFsdWUg
U0hPVUxEIGNhdXNlIGEgcHJlZmxpZ2h0IgorICAgICAgICB9CisgICAgICAgICx7CisgICAgICAg
ICAgICBoZWFkZXJzVG9BZGQ6IFt7IG5hbWUgOiAiQ29udGVudC1MYW5ndWFnZSIsIHZhbHVlOiBh
Ym5vcm1hbFNpbXBsZUNvcnNIZWFkZXJWYWx1ZSB9XSwKKyAgICAgICAgICAgIGV4cGxpY2l0bHlB
bGxvd0hlYWRlcnM6IGZhbHNlLAorICAgICAgICAgICAgc2hvdWxkQ2F1c2VQcmVmbGlnaHQ6IHRy
dWUsCisgICAgICAgICAgICBkZXNjcmlwdGlvbjogIkNvbnRlbnQtTGFuZ3VhZ2UgaGVhZGVyIHdp
dGggYWJub3JtYWwgdmFsdWUgU0hPVUxEIGNhdXNlIGEgcHJlZmxpZ2h0IgorICAgICAgICB9Cisg
ICAgICAgICx7CisgICAgICAgICAgICBoZWFkZXJzVG9BZGQ6IFt7IG5hbWUgOiAiQWNjZXB0Iiwg
dmFsdWU6ICJ0ZXh0LyoiIH0sIHsgbmFtZSA6ICJBY2NlcHQtTGFuZ3VhZ2UiLCB2YWx1ZTogImVu
IiB9LCB7IG5hbWUgOiAiQ29udGVudC1MYW5ndWFnZSIsIHZhbHVlOiBhYm5vcm1hbFNpbXBsZUNv
cnNIZWFkZXJWYWx1ZSB9XSwKKyAgICAgICAgICAgIGV4cGxpY2l0bHlBbGxvd0hlYWRlcnM6IGZh
bHNlLAorICAgICAgICAgICAgc2hvdWxkQ2F1c2VQcmVmbGlnaHQ6IHRydWUsCisgICAgICAgICAg
ICBkZXNjcmlwdGlvbjogIkFjY2VwdCBoZWFkZXIgd2l0aCBub3JtYWwgdmFsdWUsIEFjY2VwdC1M
YW5ndWFnZSBoZWFkZXIgd2l0aCBub3JtYWwgdmFsdWUsIGFuZCBDb250ZW50LUxhbmd1YWdlIGhl
YWRlciB3aXRoIGFibm9ybWFsIHZhbHVlIFNIT1VMRCBjYXVzZSBhIHByZWZsaWdodCIKKyAgICAg
ICAgfQorICAgICAgICAseworICAgICAgICAgICAgaGVhZGVyc1RvQWRkOiBbeyBuYW1lIDogIkFj
Y2VwdCIsIHZhbHVlOiAidGV4dC8qIiB9LCB7IG5hbWUgOiAiQWNjZXB0IiwgdmFsdWU6IGFibm9y
bWFsU2ltcGxlQ29yc0hlYWRlclZhbHVlIH1dLAorICAgICAgICAgICAgZXhwbGljaXRseUFsbG93
SGVhZGVyczogZmFsc2UsCisgICAgICAgICAgICBzaG91bGRDYXVzZVByZWZsaWdodDogdHJ1ZSwK
KyAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAiQWNjZXB0IGhlYWRlciB3aXRoIG5vcm1hbCB2YWx1
ZSBhbmQgdGhlbiBhbm90aGVyIEFjY2VwdCBoZWFkZXIgd2l0aCBhYm5vcm1hbCB2YWx1ZSBTSE9V
TEQgY2F1c2UgYSBwcmVmbGlnaHQiCisgICAgICAgIH0KKyAgICAgICAgLy8gUG9zaXRpdmUgdGVz
dCBjYXNlcyB3aXRoIGFibm9ybWFsIGhlYWRlcnMKKyAgICAgICAgLHsKKyAgICAgICAgICAgIGhl
YWRlcnNUb0FkZDogW3sgbmFtZSA6ICJBY2NlcHQiLCB2YWx1ZTogYWJub3JtYWxTaW1wbGVDb3Jz
SGVhZGVyVmFsdWUgfV0sCisgICAgICAgICAgICBleHBsaWNpdGx5QWxsb3dIZWFkZXJzOiB0cnVl
LAorICAgICAgICAgICAgc2hvdWxkQ2F1c2VQcmVmbGlnaHQ6IHRydWUsCisgICAgICAgICAgICBk
ZXNjcmlwdGlvbjogIkFjY2VwdCBoZWFkZXIgd2l0aCBhYm5vcm1hbCB2YWx1ZSBhbmQgZXhwbGlj
aXRseSBhbGxvd2VkIGhlYWRlcnMgU0hPVUxEIGJlIGFsbG93ZWQiCisgICAgICAgIH0KKyAgICAg
ICAgLHsKKyAgICAgICAgICAgIGhlYWRlcnNUb0FkZDogW3sgbmFtZSA6ICJDb250ZW50LUxhbmd1
YWdlIiwgdmFsdWU6IGFibm9ybWFsU2ltcGxlQ29yc0hlYWRlclZhbHVlIH1dLAorICAgICAgICAg
ICAgZXhwbGljaXRseUFsbG93SGVhZGVyczogdHJ1ZSwKKyAgICAgICAgICAgIHNob3VsZENhdXNl
UHJlZmxpZ2h0OiB0cnVlLAorICAgICAgICAgICAgZGVzY3JpcHRpb246ICJDb250ZW50LUxhbmd1
YWdlIGhlYWRlciB3aXRoIGFibm9ybWFsIHZhbHVlIGFuZCBleHBsaWNpdGx5IGFsbG93ZWQgaGVh
ZGVycyBTSE9VTEQgYmUgYWxsb3dlZCIKKyAgICAgICAgfQorICAgICAgICAseworICAgICAgICAg
ICAgaGVhZGVyc1RvQWRkOiBbeyBuYW1lIDogIkFjY2VwdCIsIHZhbHVlOiAidGV4dC8qIiB9LCB7
IG5hbWUgOiAiQWNjZXB0LUxhbmd1YWdlIiwgdmFsdWU6ICJlbiIgfSwgeyBuYW1lIDogIkNvbnRl
bnQtTGFuZ3VhZ2UiLCB2YWx1ZTogYWJub3JtYWxTaW1wbGVDb3JzSGVhZGVyVmFsdWUgfV0sCisg
ICAgICAgICAgICBleHBsaWNpdGx5QWxsb3dIZWFkZXJzOiB0cnVlLAorICAgICAgICAgICAgc2hv
dWxkQ2F1c2VQcmVmbGlnaHQ6IHRydWUsCisgICAgICAgICAgICBkZXNjcmlwdGlvbjogIkFjY2Vw
dCBoZWFkZXIgd2l0aCBub3JtYWwgdmFsdWUsIEFjY2VwdC1MYW5ndWFnZSBoZWFkZXIgd2l0aCBu
b3JtYWwgdmFsdWUsIENvbnRlbnQtTGFuZ3VhZ2UgaGVhZGVyIHdpdGggYWJub3JtYWwgdmFsdWUs
IGFuZCBleHBsaWNpdGx5IGFsbG93ZWQgaGVhZGVycyBTSE9VTEQgYmUgYWxsb3dlZCIKKyAgICAg
ICAgfQorICAgICAgICAseworICAgICAgICAgICAgaGVhZGVyc1RvQWRkOiBbeyBuYW1lIDogIkFj
Y2VwdCIsIHZhbHVlOiAidGV4dC8qIiB9LCB7IG5hbWUgOiAiQWNjZXB0IiwgdmFsdWU6IGFibm9y
bWFsU2ltcGxlQ29yc0hlYWRlclZhbHVlIH1dLAorICAgICAgICAgICAgZXhwbGljaXRseUFsbG93
SGVhZGVyczogdHJ1ZSwKKyAgICAgICAgICAgIHNob3VsZENhdXNlUHJlZmxpZ2h0OiB0cnVlLAor
ICAgICAgICAgICAgZGVzY3JpcHRpb246ICJBY2NlcHQgaGVhZGVyIHdpdGggbm9ybWFsIHZhbHVl
LCB0aGVuIGFub3RoZXIgQWNjZXB0IGhlYWRlciB3aXRoIGFibm9ybWFsIHZhbHVlLCBhbmQgZXhw
bGljaXRseSBhbGxvd2VkIGhlYWRlcnMgU0hPVUxEIGJlIGFsbG93ZWQiCisgICAgICAgIH0KKyAg
ICBdOworCisgICAgZnVuY3Rpb24gcnVuVGVzdENhc2UodGVzdE51bWJlcikgeworICAgICAgICB2
YXIgdGVzdENhc2UgPSB0ZXN0Q2FzZXNbdGVzdE51bWJlcl07CisgICAgICAgIHhociA9IG5ldyBY
TUxIdHRwUmVxdWVzdCgpOworICAgICAgICB4aHIub3BlbignR0VUJywgdXJsICsgKHRlc3RDYXNl
LmV4cGxpY2l0bHlBbGxvd0hlYWRlcnMgPyAiLz9leHBsaWNpdGx5QWxsb3dIZWFkZXJzPXRydWUi
IDogIiIpLCB0cnVlKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXN0Q2FzZS5oZWFk
ZXJzVG9BZGQubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVy
KHRlc3RDYXNlLmhlYWRlcnNUb0FkZFtpXS5uYW1lLCB0ZXN0Q2FzZS5oZWFkZXJzVG9BZGRbaV0u
dmFsdWUpOworICAgICAgICB9CisgICAgICAgIGlmICh0ZXN0Q2FzZS5zaG91bGRDYXVzZVByZWZs
aWdodCAmJiAhdGVzdENhc2UuZXhwbGljaXRseUFsbG93SGVhZGVycykKKyAgICAgICAgICAgIHho
ci5vbmVycm9yID0gY3JlYXRlT25FcnJvckhhbmRsZXIodGVzdENhc2UuZGVzY3JpcHRpb24sIHRl
c3ROdW1iZXIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB4aHIub25yZWFkeXN0YXRlY2hh
bmdlID0gY3JlYXRlUmVhZHlTdGF0ZUhhbmRsZXIodGVzdENhc2UuZGVzY3JpcHRpb24sIHRlc3RO
dW1iZXIpOworICAgICAgICB4aHIuc2VuZCgpOworICAgIH0KKworICAgIGZ1bmN0aW9uIG5leHRT
dGVwICh0ZXN0TnVtYmVyKSB7CisgICAgICAgIGlmICh0ZXN0TnVtYmVyID09PSAodGVzdENhc2Vz
Lmxlbmd0aCAtIDEpKSB7CisgICAgICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAg
ICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgcnVuVGVzdENhc2UodGVzdE51bWJlciArIDEpOworICAgIH0KKworICAgIHJ1blRl
c3RDYXNlKDApOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBl
bmQgb2YgZmlsZQpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9y
ZXNvdXJjZXMvY29ycy1wcmVmbGlnaHQtc2FmZWxpc3RlZC1oZWFkZXJzLXJlc3BvbmRlci5waHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9yZXNv
dXJjZXMvY29ycy1wcmVmbGlnaHQtc2FmZWxpc3RlZC1oZWFkZXJzLXJlc3BvbmRlci5waHAJKG5v
bmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9yZXNv
dXJjZXMvY29ycy1wcmVmbGlnaHQtc2FmZWxpc3RlZC1oZWFkZXJzLXJlc3BvbmRlci5waHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw4IEBACis8P3BocAoraGVhZGVyKCdBY2Nlc3MtQ29udHJv
bC1BbGxvdy1PcmlnaW46IGh0dHA6Ly8xMjcuMC4wLjE6ODAwMCcpOworCitpZiAoJF9TRVJWRVJb
J1JFUVVFU1RfTUVUSE9EJ10gPT0gJ09QVElPTlMnICYmIGlzc2V0KCRfR0VUWydleHBsaWNpdGx5
QWxsb3dIZWFkZXJzJ10pKSB7CisgICAgaGVhZGVyKCdBY2Nlc3MtQ29udHJvbC1BbGxvdy1NZXRo
b2RzOiBHRVQsIE9QVElPTlMnKTsKKyAgICBoZWFkZXIoJ0FjY2Vzcy1Db250cm9sLUFsbG93LUhl
YWRlcnM6IEFjY2VwdCwgQWNjZXB0LUxhbmd1YWdlLCBDb250ZW50LUxhbmd1YWdlJyk7Cit9Cis/
PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>295967</attachid>
            <date>2016-12-02 11:27:32 -0800</date>
            <delta_ts>2016-12-02 13:34:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-165178-20161202112701.patch</filename>
            <type>text/plain</type>
            <size>25594</size>
            <attacher name="John Wilander">wilander</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwOTI0OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBACisyMDE2LTEyLTAyICBKb2huIFdp
bGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlcXVpcmUgcHJlZmxpZ2h0
IGZvciBub24tc3RhbmRhcmQgQ09SUy1zYWZlbGlzdGVkIHJlcXVlc3QgaGVhZGVycyBBY2NlcHQs
IEFjY2VwdC1MYW5ndWFnZSwgYW5kIENvbnRlbnQtTGFuZ3VhZ2UKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTE3OAorICAgICAgICA8cmRhcjovL3By
b2JsZW0vMTg3OTIyNTA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWW91ZW5uIEZhYmxldC4KKwor
ICAgICAgICBGZXRjaCBjdXJyZW50bHkgb25seSByZXN0cmljdHMgdGhlIGhlYWRlciBDb250ZW50
LVR5cGUgZm9yIHNpbXBsZSByZXF1ZXN0czoKKyAgICAgICAgaHR0cHM6Ly9mZXRjaC5zcGVjLndo
YXR3Zy5vcmcvI2NvcnMtc2FmZWxpc3RlZC1yZXF1ZXN0LWhlYWRlcgorCisgICAgICAgIFRoaXMg
bWVhbnMgc2ltcGxlIENPUlMgcmVxdWVzdHMgY2FuIHNlbmQgdW5leHBlY3RlZCBjaGFyYWN0ZXJz
IGluIEFjY2VwdCwgCisgICAgICAgIEFjY2VwdC1MYW5ndWFnZSwgYW5kIENvbnRlbnQtTGFuZ3Vh
Z2UgaGVhZGVyIHZhbHVlcy4KKworICAgICAgICBSRkMgNzIzMSBpbXBsaWVzIHJlc3RyaWN0aW9u
cyBvbiB0aGVzZSBoZWFkZXIgdmFsdWVzOgorICAgICAgICAtIEFjY2VwdCBodHRwczovL3Rvb2xz
LmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTUuMy4yCisgICAgICAgIC0gQWNjZXB0LUxh
bmd1YWdlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNS4zLjUK
KyAgICAgICAgLSBDb250ZW50LUxhbmd1YWdlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9y
ZmM3MjMxI3NlY3Rpb24tMy4xLjMuMgorCisgICAgICAgIEFzIHBlciBkaXNjdXNzaW9ucyBpbiB0
aGUgVzNDIFdlYkFwcFNlYyBncm91cCB3ZSBzaG91bGQgdHJ5IHRvIHJlc3RyaWN0IAorICAgICAg
ICB0aGVzZSBoZWFkZXIgdmFsdWVzIHRvIGhlbHAgcHJvdGVjdCBzZXJ2ZXJzIHRoYXQgZG8gbm90
IGV4cGVjdCBzaW1wbGUgQ09SUyAKKyAgICAgICAgcmVxdWVzdHMuCisKKyAgICAgICAgTm9uLXN0
YW5kYXJkLCBzYWZlbGlzdGVkIGhlYWRlciB2YWx1ZXMgc2hvdWxkIHRyaWdnZXIgYSBwcmVmbGln
aHQgYW5kIHJlcXVpcmUKKyAgICAgICAgdGhlIGhlYWRlcnMgdG8gYmUgd2hpdGVsaXN0ZWQgaW4g
dGhlIHJlc3BvbnNlJ3MgQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVycy4KKyAgICAgICAgRm9y
IEZldGNoIGluIG5vLWNvcnMgbW9kZSB0aGlzIGNoYW5nZSBtZWFucyBub24tc3RhbmRhcmQgaGVh
ZGVyIHZhbHVlcyBhcmUgbm90CisgICAgICAgIGFsbG93ZWQgdG8gYmUgc2V0LgorCisgICAgICAg
IFRlc3Q6IGh0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvY29ycy1ub24tc3RhbmRhcmQtc2FmZWxp
c3RlZC1oZWFkZXJzLXNob3VsZC10cmlnZ2VyLXByZWZsaWdodC5odG1sCisKKyAgICAgICAgKiBs
b2FkZXIvQ3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9sLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omlz
U2ltcGxlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0KToKKyAgICAgICAgICAgIE5vdyBjYWxscyBX
ZWJDb3JlOjppc0Nyb3NzT3JpZ2luU2FmZVJlcXVlc3RIZWFkZXIoKSBpbnN0ZWFkIG9mCisgICAg
ICAgICAgICBXZWJDb3JlOjppc09uQWNjZXNzQ29udHJvbFNpbXBsZVJlcXVlc3RIZWFkZXJXaGl0
ZWxpc3QoKS4KKyAgICAgICAgKFdlYkNvcmU6OmlzT25BY2Nlc3NDb250cm9sU2ltcGxlUmVxdWVz
dEhlYWRlcldoaXRlbGlzdCk6IERlbGV0ZWQuCisgICAgICAgICAgICBJdCB3YXMgYSBkdXBsaWNh
dGUgb2YgV2ViQ29yZTo6aXNDcm9zc09yaWdpblNhZmVSZXF1ZXN0SGVhZGVyKCkuCisgICAgICAg
ICogbG9hZGVyL0Nyb3NzT3JpZ2luQWNjZXNzQ29udHJvbC5oOgorICAgICAgICAqIGxvYWRlci9D
cm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNy
b3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGVJdGVtOjphbGxvd3NDcm9zc09yaWdpbkhlYWRl
cnMpOgorICAgICAgICAgICAgTm93IGNhbGxzIFdlYkNvcmU6OmlzQ3Jvc3NPcmlnaW5TYWZlUmVx
dWVzdEhlYWRlcigpIGluc3RlYWQgb2YKKyAgICAgICAgICAgIFdlYkNvcmU6OmlzT25BY2Nlc3ND
b250cm9sU2ltcGxlUmVxdWVzdEhlYWRlcldoaXRlbGlzdCgpLgorICAgICAgICAqIHBsYXRmb3Jt
L25ldHdvcmsvSFRUUFBhcnNlcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNWYWxpZEFjY2Vw
dEhlYWRlclZhbHVlKToKKyAgICAgICAgICAgIEJhc2ljIGNoZWNrIHRoYXQgdGhlIGNoYXJhY3Rl
cnMgYXJlIGFsbCBBU0NJSSBhbHBoYW51bWVyaWMsICcgJywgJyonLCAnLicsCisgICAgICAgICAg
ICAnLycsICc7Jywgb3IgJz0nLgorICAgICAgICAoV2ViQ29yZTo6aXNWYWxpZExhbmd1YWdlSGVh
ZGVyVmFsdWUpOgorICAgICAgICAgICAgQmFzaWMgY2hlY2sgdGhhdCB0aGUgY2hhcmFjdGVycyBh
cmUgYWxsIEFTQ0lJIGFscGhhbnVtZXJpYywgJyAnLCAnKicsICctJywKKyAgICAgICAgICAgICcu
JywgJzsnLCBvciAnPScuCisgICAgICAgIChXZWJDb3JlOjppc1NpbXBsZUhlYWRlcik6CisgICAg
ICAgICAgICBSZW1vdmVkIGR1cGxpY2F0ZSBjb2RlLiBOb3cgY2FsbHMgV2ViQ29yZTo6aXNDcm9z
c09yaWdpblNhZmVSZXF1ZXN0SGVhZGVyKCkuCisgICAgICAgIChXZWJDb3JlOjppc0Nyb3NzT3Jp
Z2luU2FmZVJlcXVlc3RIZWFkZXIpOgorICAgICAgICAgICAgTm93IG1ha2VzIGEgY2FsbCB0byBX
ZWJDb3JlOjppc1ZhbGlkQWNjZXB0SGVhZGVyVmFsdWUoKSBmb3IgQWNjZXB0CisgICAgICAgICAg
ICBoZWFkZXJzIGFuZCBXZWJDb3JlOjppc1ZhbGlkTGFuZ3VhZ2VIZWFkZXJWYWx1ZSgpIGZvciBB
Y2NlcHQtTGFuZ3VhZ2UKKyAgICAgICAgICAgIGFuZCBDb250ZW50LUxhbmd1YWdlIGhlYWRlcnMu
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9IVFRQUGFyc2Vycy5oOgorCiAyMDE2LTEyLTAy
ICBEYXZlIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29tPgogCiAgICAgICAgIFtDU1MgUGFyc2VyXSBB
ZGQgc3VwcG9ydCBmb3IgdGhlIFNWRyAna2VybmluZycgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpbkFjY2Vzc0NvbnRyb2wuY3BwCShyZXZp
c2lvbiAyMDkxODIpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5BY2Nlc3ND
b250cm9sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsMzIgKzQ1LDEzIEBAIGJvb2wgaXNPbkFj
Y2Vzc0NvbnRyb2xTaW1wbGVSZXF1ZXN0TWV0aG8KICAgICByZXR1cm4gbWV0aG9kID09ICJHRVQi
IHx8IG1ldGhvZCA9PSAiSEVBRCIgfHwgbWV0aG9kID09ICJQT1NUIjsKIH0KIAotYm9vbCBpc09u
QWNjZXNzQ29udHJvbFNpbXBsZVJlcXVlc3RIZWFkZXJXaGl0ZWxpc3QoSFRUUEhlYWRlck5hbWUg
bmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBzd2l0Y2ggKG5hbWUpIHsKLSAgICBj
YXNlIEhUVFBIZWFkZXJOYW1lOjpBY2NlcHQ6Ci0gICAgY2FzZSBIVFRQSGVhZGVyTmFtZTo6QWNj
ZXB0TGFuZ3VhZ2U6Ci0gICAgY2FzZSBIVFRQSGVhZGVyTmFtZTo6Q29udGVudExhbmd1YWdlOgot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIEhUVFBIZWFkZXJOYW1lOjpDb250ZW50VHlw
ZTogewotICAgICAgICAvLyBQcmVmbGlnaHQgaXMgcmVxdWlyZWQgZm9yIE1JTUUgdHlwZXMgdGhh
dCBjYW4gbm90IGJlIHNlbnQgdmlhIGZvcm0gc3VibWlzc2lvbi4KLSAgICAgICAgU3RyaW5nIG1p
bWVUeXBlID0gZXh0cmFjdE1JTUVUeXBlRnJvbU1lZGlhVHlwZSh2YWx1ZSk7Ci0gICAgICAgIHJl
dHVybiBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKG1pbWVUeXBlLCAiYXBwbGljYXRpb24veC13d3ct
Zm9ybS11cmxlbmNvZGVkIikKLSAgICAgICAgICAgIHx8IGVxdWFsSWdub3JpbmdBU0NJSUNhc2Uo
bWltZVR5cGUsICJtdWx0aXBhcnQvZm9ybS1kYXRhIikKLSAgICAgICAgICAgIHx8IGVxdWFsSWdu
b3JpbmdBU0NJSUNhc2UobWltZVR5cGUsICJ0ZXh0L3BsYWluIik7Ci0gICAgfQotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KIGJvb2wgaXNTaW1wbGVDcm9z
c09yaWdpbkFjY2Vzc1JlcXVlc3QoY29uc3QgU3RyaW5nJiBtZXRob2QsIGNvbnN0IEhUVFBIZWFk
ZXJNYXAmIGhlYWRlck1hcCkKIHsKICAgICBpZiAoIWlzT25BY2Nlc3NDb250cm9sU2ltcGxlUmVx
dWVzdE1ldGhvZFdoaXRlbGlzdChtZXRob2QpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICBmb3IgKGNvbnN0IGF1dG8mIGhlYWRlciA6IGhlYWRlck1hcCkgewotICAgICAgICBpZiAoIWhl
YWRlci5rZXlBc0hUVFBIZWFkZXJOYW1lIHx8ICFpc09uQWNjZXNzQ29udHJvbFNpbXBsZVJlcXVl
c3RIZWFkZXJXaGl0ZWxpc3QoaGVhZGVyLmtleUFzSFRUUEhlYWRlck5hbWUudmFsdWUoKSwgaGVh
ZGVyLnZhbHVlKSkKKyAgICAgICAgaWYgKCFoZWFkZXIua2V5QXNIVFRQSGVhZGVyTmFtZSB8fCAh
aXNDcm9zc09yaWdpblNhZmVSZXF1ZXN0SGVhZGVyKGhlYWRlci5rZXlBc0hUVFBIZWFkZXJOYW1l
LnZhbHVlKCksIGhlYWRlci52YWx1ZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9s
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2luQWNjZXNz
Q29udHJvbC5oCShyZXZpc2lvbiAyMDkxODIpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jv
c3NPcmlnaW5BY2Nlc3NDb250cm9sLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDYgQEAg
Y2xhc3MgVVJMOwogCiBib29sIGlzU2ltcGxlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0KGNvbnN0
IFN0cmluZyYgbWV0aG9kLCBjb25zdCBIVFRQSGVhZGVyTWFwJik7CiBib29sIGlzT25BY2Nlc3ND
b250cm9sU2ltcGxlUmVxdWVzdE1ldGhvZFdoaXRlbGlzdChjb25zdCBTdHJpbmcmKTsKLWJvb2wg
aXNPbkFjY2Vzc0NvbnRyb2xTaW1wbGVSZXF1ZXN0SGVhZGVyV2hpdGVsaXN0KEhUVFBIZWFkZXJO
YW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKIGJvb2wgaXNPbkFjY2Vzc0NvbnRyb2xSZXNwb25z
ZUhlYWRlcldoaXRlbGlzdChjb25zdCBTdHJpbmcmKTsKIAogdm9pZCB1cGRhdGVSZXF1ZXN0Rm9y
QWNjZXNzQ29udHJvbChSZXNvdXJjZVJlcXVlc3QmLCBTZWN1cml0eU9yaWdpbiYsIFN0b3JlZENy
ZWRlbnRpYWxzKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpblByZWZs
aWdodFJlc3VsdENhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIv
Q3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5jcHAJKHJldmlzaW9uIDIwOTE4MikKKysr
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiQ3Jvc3NPcmln
aW5BY2Nlc3NDb250cm9sLmgiCiAjaW5jbHVkZSAiSFRUUEhlYWRlck5hbWVzLmgiCisjaW5jbHVk
ZSAiSFRUUFBhcnNlcnMuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAjaW5jbHVk
ZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KQEAg
LTEyNyw3ICsxMjgsNyBAQCBib29sIENyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGVJdGVt
CiBib29sIENyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGVJdGVtOjphbGxvd3NDcm9zc09y
aWdpbkhlYWRlcnMoY29uc3QgSFRUUEhlYWRlck1hcCYgcmVxdWVzdEhlYWRlcnMsIFN0cmluZyYg
ZXJyb3JEZXNjcmlwdGlvbikgY29uc3QKIHsKICAgICBmb3IgKGNvbnN0IGF1dG8mIGhlYWRlciA6
IHJlcXVlc3RIZWFkZXJzKSB7Ci0gICAgICAgIGlmIChoZWFkZXIua2V5QXNIVFRQSGVhZGVyTmFt
ZSAmJiBpc09uQWNjZXNzQ29udHJvbFNpbXBsZVJlcXVlc3RIZWFkZXJXaGl0ZWxpc3QoaGVhZGVy
LmtleUFzSFRUUEhlYWRlck5hbWUudmFsdWUoKSwgaGVhZGVyLnZhbHVlKSkKKyAgICAgICAgaWYg
KGhlYWRlci5rZXlBc0hUVFBIZWFkZXJOYW1lICYmIGlzQ3Jvc3NPcmlnaW5TYWZlUmVxdWVzdEhl
YWRlcihoZWFkZXIua2V5QXNIVFRQSGVhZGVyTmFtZS52YWx1ZSgpLCBoZWFkZXIudmFsdWUpKQog
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlmICghbV9oZWFkZXJzLmNvbnRhaW5zKGhl
YWRlci5rZXkpKSB7CiAgICAgICAgICAgICBlcnJvckRlc2NyaXB0aW9uID0gIlJlcXVlc3QgaGVh
ZGVyIGZpZWxkICIgKyBoZWFkZXIua2V5ICsgIiBpcyBub3QgYWxsb3dlZCBieSBBY2Nlc3MtQ29u
dHJvbC1BbGxvdy1IZWFkZXJzLiI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL0hUVFBQYXJzZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL0hUVFBQYXJzZXJzLmNwcAkocmV2aXNpb24gMjA5MTgyKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQUGFyc2Vycy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJIVFRQUGFyc2Vycy5oIgogCiAjaW5jbHVkZSAiSFRU
UEhlYWRlck5hbWVzLmgiCisjaW5jbHVkZSAiTGFuZ3VhZ2UuaCIKICNpbmNsdWRlIDx3dGYvRGF0
ZU1hdGguaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CkBAIC0xMjYsNiArMTI3LDM2IEBAIGJvb2wgaXNWYWxpZEhUVFBIZWFk
ZXJWYWx1ZShjb25zdCBTdHJpbmcKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorLy8gU2VlIFJGQyA3
MjMxLCBTZWN0aW9uIDUuMy4yCitib29sIGlzVmFsaWRBY2NlcHRIZWFkZXJWYWx1ZShjb25zdCBT
dHJpbmcmIHZhbHVlKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5n
dGgoKTsgKytpKSB7CisgICAgICAgIFVDaGFyIGMgPSB2YWx1ZVtpXTsKKyAgICAgICAgaWYgKGlz
QVNDSUlBbHBoYW51bWVyaWMoYykgfHwgYyA9PSAnICcgfHwgYyA9PSAnKicgfHwgYyA9PSAnLicg
fHwgYyA9PSAnLycgfHwgYyA9PSAnOycgfHwgYyA9PSAnPScpCisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworLy8gU2VlIFJGQyA3MjMxLCBTZWN0aW9uIDUuMy41IGFuZCAzLjEuMy4yCitib29sIGlz
VmFsaWRMYW5ndWFnZUhlYWRlclZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgVUNo
YXIgYyA9IHZhbHVlW2ldOworICAgICAgICBpZiAoaXNBU0NJSUFscGhhbnVtZXJpYyhjKSB8fCBj
ID09ICcgJyB8fCBjID09ICcqJyB8fCBjID09ICctJyB8fCBjID09ICcuJyB8fCBjID09ICc7JyB8
fCBjID09ICc9JykKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorICAgIAorICAgIC8vIEZJWE1FOiBWYWxpZGF0ZSBmdXJ0aGVyIGJ5IHNwbGl0dGlu
ZyBpbnRvIGxhbmd1YWdlIHRhZ3MgYW5kIG9wdGlvbmFsIHF1YWxpdHkKKyAgICAvLyB2YWx1ZXMg
KHE9KSBhbmQgdGhlbiBjaGVjayBlYWNoIGxhbmd1YWdlIHRhZy4KKyAgICAvLyBMYW5ndWFnZSB0
YWdzIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tMy4xLjMuMQor
ICAgIC8vIExhbmd1YWdlIHRhZyBzeW50YXggaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL2Jj
cDQ3I3NlY3Rpb24tMi4xCisgICAgcmV0dXJuIHRydWU7Cit9CisKIC8vIFNlZSBSRkMgNzIzMCwg
U2VjdGlvbiAzLjIuNi4KIGJvb2wgaXNWYWxpZEhUVFBUb2tlbihjb25zdCBTdHJpbmcmIHZhbHVl
KQogewpAQCAtNzMyLDcgKzc2Myw3IEBAIHZvaWQgcGFyc2VBY2Nlc3NDb250cm9sRXhwb3NlSGVh
ZGVyc0FsbG8KICAgICB9CiB9CiAKLS8vIEltcGxlbWVtdG5hdGlvbiBvZiBodHRwczovL2ZldGNo
LnNwZWMud2hhdHdnLm9yZy8jY29ycy1zYWZlbGlzdGVkLXJlc3BvbnNlLWhlYWRlci1uYW1lCisv
LyBJbXBsZW1lbnRhdGlvbiBvZiBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29ycy1z
YWZlbGlzdGVkLXJlc3BvbnNlLWhlYWRlci1uYW1lCiBib29sIGlzRm9yYmlkZGVuSGVhZGVyTmFt
ZShjb25zdCBTdHJpbmcmIG5hbWUpCiB7CiAgICAgSFRUUEhlYWRlck5hbWUgaGVhZGVyTmFtZTsK
QEAgLTc3NiwxOCArODA3LDcgQEAgYm9vbCBpc1NpbXBsZUhlYWRlcihjb25zdCBTdHJpbmcmIG5h
bWUsIAogICAgIEhUVFBIZWFkZXJOYW1lIGhlYWRlck5hbWU7CiAgICAgaWYgKCFmaW5kSFRUUEhl
YWRlck5hbWUobmFtZSwgaGVhZGVyTmFtZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBz
d2l0Y2ggKGhlYWRlck5hbWUpIHsKLSAgICBjYXNlIEhUVFBIZWFkZXJOYW1lOjpBY2NlcHQ6Ci0g
ICAgY2FzZSBIVFRQSGVhZGVyTmFtZTo6QWNjZXB0TGFuZ3VhZ2U6Ci0gICAgY2FzZSBIVFRQSGVh
ZGVyTmFtZTo6Q29udGVudExhbmd1YWdlOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNl
IEhUVFBIZWFkZXJOYW1lOjpDb250ZW50VHlwZTogewotICAgICAgICBTdHJpbmcgbWltZVR5cGUg
PSBleHRyYWN0TUlNRVR5cGVGcm9tTWVkaWFUeXBlKHZhbHVlKTsKLSAgICAgICAgcmV0dXJuIGVx
dWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG1pbWVUeXBlLCAiYXBwbGljYXRpb24veC13d3ct
Zm9ybS11cmxlbmNvZGVkIikgfHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobWltZVR5
cGUsICJtdWx0aXBhcnQvZm9ybS1kYXRhIikgfHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNh
c2UobWltZVR5cGUsICJ0ZXh0L3BsYWluIik7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgcmV0dXJuIGlzQ3Jvc3NPcmlnaW5TYWZlUmVxdWVz
dEhlYWRlcihoZWFkZXJOYW1lLCB2YWx1ZSk7CiB9CiAKIGJvb2wgaXNDcm9zc09yaWdpblNhZmVI
ZWFkZXIoSFRUUEhlYWRlck5hbWUgbmFtZSwgY29uc3QgSFRUUEhlYWRlclNldCYgYWNjZXNzQ29u
dHJvbEV4cG9zZUhlYWRlclNldCkKQEAgLTgyNCwxMCArODQ0LDEyIEBAIGJvb2wgaXNDcm9zc09y
aWdpblNhZmVSZXF1ZXN0SGVhZGVyKEhUVFAKIHsKICAgICBzd2l0Y2ggKG5hbWUpIHsKICAgICBj
YXNlIEhUVFBIZWFkZXJOYW1lOjpBY2NlcHQ6CisgICAgICAgIHJldHVybiBpc1ZhbGlkQWNjZXB0
SGVhZGVyVmFsdWUodmFsdWUpOwogICAgIGNhc2UgSFRUUEhlYWRlck5hbWU6OkFjY2VwdExhbmd1
YWdlOgogICAgIGNhc2UgSFRUUEhlYWRlck5hbWU6OkNvbnRlbnRMYW5ndWFnZToKLSAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBpc1ZhbGlkTGFuZ3VhZ2VIZWFkZXJWYWx1ZSh2
YWx1ZSk7CiAgICAgY2FzZSBIVFRQSGVhZGVyTmFtZTo6Q29udGVudFR5cGU6IHsKKyAgICAgICAg
Ly8gUHJlZmxpZ2h0IGlzIHJlcXVpcmVkIGZvciBNSU1FIHR5cGVzIHRoYXQgY2FuIG5vdCBiZSBz
ZW50IHZpYSBmb3JtIHN1Ym1pc3Npb24uCiAgICAgICAgIFN0cmluZyBtaW1lVHlwZSA9IGV4dHJh
Y3RNSU1FVHlwZUZyb21NZWRpYVR5cGUodmFsdWUpOwogICAgICAgICByZXR1cm4gZXF1YWxMZXR0
ZXJzSWdub3JpbmdBU0NJSUNhc2UobWltZVR5cGUsICJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVy
bGVuY29kZWQiKSB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShtaW1lVHlwZSwgIm11
bHRpcGFydC9mb3JtLWRhdGEiKSB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShtaW1l
VHlwZSwgInRleHQvcGxhaW4iKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL0hUVFBQYXJzZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9IVFRQUGFyc2Vycy5oCShyZXZpc2lvbiAyMDkxODIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBQYXJzZXJzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTY5LDYgKzY5LDggQEAgZW51bSBYRnJhbWVPcHRpb25zRGlzcG9zaXRpb24gewogCiBib29sIGlz
VmFsaWRSZWFzb25QaHJhc2UoY29uc3QgU3RyaW5nJik7CiBib29sIGlzVmFsaWRIVFRQSGVhZGVy
VmFsdWUoY29uc3QgU3RyaW5nJik7Citib29sIGlzVmFsaWRBY2NlcHRIZWFkZXJWYWx1ZShjb25z
dCBTdHJpbmcmKTsKK2Jvb2wgaXNWYWxpZExhbmd1YWdlSGVhZGVyVmFsdWUoY29uc3QgU3RyaW5n
Jik7CiBib29sIGlzVmFsaWRIVFRQVG9rZW4oY29uc3QgU3RyaW5nJik7CiBib29sIHBhcnNlSFRU
UFJlZnJlc2goY29uc3QgU3RyaW5nJiByZWZyZXNoLCBkb3VibGUmIGRlbGF5LCBTdHJpbmcmIHVy
bCk7CiBzdGQ6Om9wdGlvbmFsPHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6OnRpbWVfcG9pbnQ+
IHBhcnNlSFRUUERhdGUoY29uc3QgU3RyaW5nJik7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDkxODIp
CisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0MiBA
QAorMjAxNi0xMi0wMiAgSm9obiBXaWxhbmRlciAgPHdpbGFuZGVyQGFwcGxlLmNvbT4KKworICAg
ICAgICBSZXF1aXJlIHByZWZsaWdodCBmb3Igbm9uLXN0YW5kYXJkIENPUlMtc2FmZWxpc3RlZCBy
ZXF1ZXN0IGhlYWRlcnMgQWNjZXB0LCBBY2NlcHQtTGFuZ3VhZ2UsIGFuZCBDb250ZW50LUxhbmd1
YWdlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjUx
NzgKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzE4NzkyMjUwPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IFlvdWVubiBGYWJsZXQuCisKKyAgICAgICAgRmV0Y2ggY3VycmVudGx5IG9ubHkgcmVzdHJp
Y3RzIHRoZSBoZWFkZXIgQ29udGVudC1UeXBlIGZvciBzaW1wbGUgcmVxdWVzdHM6CisgICAgICAg
IGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb3JzLXNhZmVsaXN0ZWQtcmVxdWVzdC1o
ZWFkZXIKKworICAgICAgICBUaGlzIG1lYW5zIHNpbXBsZSBDT1JTIHJlcXVlc3RzIGNhbiBzZW5k
IHVuZXhwZWN0ZWQgY2hhcmFjdGVycyBpbiBBY2NlcHQsIAorICAgICAgICBBY2NlcHQtTGFuZ3Vh
Z2UsIGFuZCBDb250ZW50LUxhbmd1YWdlIGhlYWRlciB2YWx1ZXMuCisKKyAgICAgICAgUkZDIDcy
MzEgaW1wbGllcyByZXN0cmljdGlvbnMgb24gdGhlc2UgaGVhZGVyIHZhbHVlczoKKyAgICAgICAg
LSBBY2NlcHQgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi01LjMu
MgorICAgICAgICAtIEFjY2VwdC1MYW5ndWFnZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwv
cmZjNzIzMSNzZWN0aW9uLTUuMy41CisgICAgICAgIC0gQ29udGVudC1MYW5ndWFnZSBodHRwczov
L3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTMuMS4zLjIKKworICAgICAgICBB
cyBwZXIgZGlzY3Vzc2lvbnMgaW4gdGhlIFczQyBXZWJBcHBTZWMgZ3JvdXAgd2Ugc2hvdWxkIHRy
eSB0byByZXN0cmljdCAKKyAgICAgICAgdGhlc2UgaGVhZGVyIHZhbHVlcyB0byBoZWxwIHByb3Rl
Y3Qgc2VydmVycyB0aGF0IGRvIG5vdCBleHBlY3Qgc2ltcGxlIENPUlMgCisgICAgICAgIHJlcXVl
c3RzLgorCisgICAgICAgIE5vbi1zdGFuZGFyZCwgc2FmZWxpc3RlZCBoZWFkZXIgdmFsdWVzIHNo
b3VsZCB0cmlnZ2VyIGEgcHJlZmxpZ2h0IGFuZCByZXF1aXJlCisgICAgICAgIHRoZSBoZWFkZXJz
IHRvIGJlIHdoaXRlbGlzdGVkIGluIHRoZSByZXNwb25zZSdzIEFjY2Vzcy1Db250cm9sLUFsbG93
LUhlYWRlcnMuCisgICAgICAgIEZvciBGZXRjaCBpbiBuby1jb3JzIG1vZGUgdGhpcyBjaGFuZ2Ug
bWVhbnMgbm9uLXN0YW5kYXJkIGhlYWRlciB2YWx1ZXMgYXJlIG5vdAorICAgICAgICBhbGxvd2Vk
IHRvIGJlIHNldC4KKworICAgICAgICAqIGh0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvY29ycy1u
b24tc3RhbmRhcmQtc2FmZWxpc3RlZC1oZWFkZXJzLXNob3VsZC10cmlnZ2VyLXByZWZsaWdodC1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qv
Y29ycy1ub24tc3RhbmRhcmQtc2FmZWxpc3RlZC1oZWFkZXJzLXNob3VsZC10cmlnZ2VyLXByZWZs
aWdodC5odG1sOiBBZGRlZC4KKyAgICAgICAgICAgIFRlc3RzIHRoYXQ6CisgICAgICAgICAgICAt
IE5vcm1hbCBBY2NlcHQsIEFjY2VwdC1MYW5ndWFnZSwgYW5kIENvbnRlbnQtTGFuZ3VhZ2UgaGVh
ZGVycyBkb24ndCB0cmlnZ2VyCisgICAgICAgICAgICAgICAgYSBwcmVmbGlnaHQuCisgICAgICAg
ICAgICAtIEFibm9ybWFsIEFjY2VwdCwgQWNjZXB0LUxhbmd1YWdlLCBhbmQgQ29udGVudC1MYW5n
dWFnZSBoZWFkZXJzIGRvIHRyaWdnZXIgCisgICAgICAgICAgICAgICAgYSBwcmVmbGlnaHQuCisg
ICAgICAgICAgICAtIEFibm9ybWFsIEFjY2VwdCwgQWNjZXB0LUxhbmd1YWdlLCBhbmQgQ29udGVu
dC1MYW5ndWFnZSBoZWFkZXJzIGFyZSAKKyAgICAgICAgICAgICAgICBhY2NlcHRlZCBpZiB0aGUg
c2VydmVyIHdoaXRlbGlzdHMgdGhlbS4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3htbGh0dHByZXF1
ZXN0L3Jlc291cmNlcy9jb3JzLXByZWZsaWdodC1zYWZlbGlzdGVkLWhlYWRlcnMtcmVzcG9uZGVy
LnBocDogQWRkZWQuCisKIDIwMTYtMTItMDEgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQGFwcGxl
LmNvbT4KIAogICAgICAgICBbTW9kZXJuIE1lZGlhIENvbnRyb2xzXSBQcm92aWRlIGEgVUkgb2Jq
ZWN0IHRvIHNob3cgYSBsaXN0IG9mIHRyYWNrcwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy94bWxodHRwcmVxdWVzdC9jb3JzLW5vbi1zdGFuZGFyZC1zYWZlbGlzdGVkLWhlYWRlcnMtc2hv
dWxkLXRyaWdnZXItcHJlZmxpZ2h0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L2NvcnMtbm9uLXN0YW5kYXJkLXNhZmVsaXN0
ZWQtaGVhZGVycy1zaG91bGQtdHJpZ2dlci1wcmVmbGlnaHQtZXhwZWN0ZWQudHh0CShub25leGlz
dGVudCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvY29ycy1ub24t
c3RhbmRhcmQtc2FmZWxpc3RlZC1oZWFkZXJzLXNob3VsZC10cmlnZ2VyLXByZWZsaWdodC1leHBl
Y3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMSBAQAorQ09OU09MRSBNRVNTQUdF
OiBYTUxIdHRwUmVxdWVzdCBjYW5ub3QgbG9hZCBodHRwOi8vbG9jYWxob3N0OjgwMDAveG1saHR0
cHJlcXVlc3QvcmVzb3VyY2VzL2NvcnMtcHJlZmxpZ2h0LXNhZmVsaXN0ZWQtaGVhZGVycy1yZXNw
b25kZXIucGhwLiBSZXF1ZXN0IGhlYWRlciBmaWVsZCBBY2NlcHQgaXMgbm90IGFsbG93ZWQgYnkg
QWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVycy4KK0NPTlNPTEUgTUVTU0FHRTogWE1MSHR0cFJl
cXVlc3QgY2Fubm90IGxvYWQgaHR0cDovL2xvY2FsaG9zdDo4MDAwL3htbGh0dHByZXF1ZXN0L3Jl
c291cmNlcy9jb3JzLXByZWZsaWdodC1zYWZlbGlzdGVkLWhlYWRlcnMtcmVzcG9uZGVyLnBocC4g
UmVxdWVzdCBoZWFkZXIgZmllbGQgQWNjZXB0LUxhbmd1YWdlIGlzIG5vdCBhbGxvd2VkIGJ5IEFj
Y2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnMuCitDT05TT0xFIE1FU1NBR0U6IFhNTEh0dHBSZXF1
ZXN0IGNhbm5vdCBsb2FkIGh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC94bWxodHRwcmVxdWVzdC9yZXNv
dXJjZXMvY29ycy1wcmVmbGlnaHQtc2FmZWxpc3RlZC1oZWFkZXJzLXJlc3BvbmRlci5waHAuIFJl
cXVlc3QgaGVhZGVyIGZpZWxkIENvbnRlbnQtTGFuZ3VhZ2UgaXMgbm90IGFsbG93ZWQgYnkgQWNj
ZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVycy4KK0NPTlNPTEUgTUVTU0FHRTogWE1MSHR0cFJlcXVl
c3QgY2Fubm90IGxvYWQgaHR0cDovL2xvY2FsaG9zdDo4MDAwL3htbGh0dHByZXF1ZXN0L3Jlc291
cmNlcy9jb3JzLXByZWZsaWdodC1zYWZlbGlzdGVkLWhlYWRlcnMtcmVzcG9uZGVyLnBocC4gUmVx
dWVzdCBoZWFkZXIgZmllbGQgQ29udGVudC1MYW5ndWFnZSBpcyBub3QgYWxsb3dlZCBieSBBY2Nl
c3MtQ29udHJvbC1BbGxvdy1IZWFkZXJzLgorQ09OU09MRSBNRVNTQUdFOiBYTUxIdHRwUmVxdWVz
dCBjYW5ub3QgbG9hZCBodHRwOi8vbG9jYWxob3N0OjgwMDAveG1saHR0cHJlcXVlc3QvcmVzb3Vy
Y2VzL2NvcnMtcHJlZmxpZ2h0LXNhZmVsaXN0ZWQtaGVhZGVycy1yZXNwb25kZXIucGhwLiBSZXF1
ZXN0IGhlYWRlciBmaWVsZCBBY2NlcHQgaXMgbm90IGFsbG93ZWQgYnkgQWNjZXNzLUNvbnRyb2wt
QWxsb3ctSGVhZGVycy4KK1BBU1MgQWNjZXB0IGhlYWRlciB3aXRoIG5vcm1hbCB2YWx1ZSBTSE9V
TEQgTk9UIGNhdXNlIGEgcHJlZmxpZ2h0CitQQVNTIEFjY2VwdCBoZWFkZXIgdmFsdWUgd2l0aCBh
bGwgYWxsb3dlZCBub24tYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgU0hPVUxEIE5PVCBjYXVzZSBh
IHByZWZsaWdodAorUEFTUyBBY2NlcHQtTGFuZ3VhZ2UgaGVhZGVyIHdpdGggbm9ybWFsIHZhbHVl
IFNIT1VMRCBOT1QgY2F1c2UgYSBwcmVmbGlnaHQKK1BBU1MgQWNjZXB0LUxhbmd1YWdlIGhlYWRl
ciB2YWx1ZSB3aXRoIGFsbCBhbGxvd2VkIG5vbi1hbHBoYW51bWVyaWMgY2hhcmFjdGVycyBTSE9V
TEQgTk9UIGNhdXNlIGEgcHJlZmxpZ2h0CitQQVNTIENvbnRlbnQtTGFuZ3VhZ2UgaGVhZGVyIHdp
dGggbm9ybWFsIHZhbHVlIFNIT1VMRCBOT1QgY2F1c2UgYSBwcmVmbGlnaHQKK1BBU1MgQ29udGVu
dC1MYW5ndWFnZSBoZWFkZXIgdmFsdWUgd2l0aCBhbGwgYWxsb3dlZCBub24tYWxwaGFudW1lcmlj
IGNoYXJhY3RlcnMgU0hPVUxEIE5PVCBjYXVzZSBhIHByZWZsaWdodAorUEFTUyBBY2NlcHQgaGVh
ZGVyIHdpdGggYWJub3JtYWwgdmFsdWUgU0hPVUxEIGNhdXNlIGEgcHJlZmxpZ2h0CitQQVNTIEFj
Y2VwdC1MYW5ndWFnZSBoZWFkZXIgd2l0aCBhYm5vcm1hbCB2YWx1ZSBTSE9VTEQgY2F1c2UgYSBw
cmVmbGlnaHQKK1BBU1MgQ29udGVudC1MYW5ndWFnZSBoZWFkZXIgd2l0aCBhYm5vcm1hbCB2YWx1
ZSBTSE9VTEQgY2F1c2UgYSBwcmVmbGlnaHQKK1BBU1MgQWNjZXB0IGhlYWRlciB3aXRoIG5vcm1h
bCB2YWx1ZSwgQWNjZXB0LUxhbmd1YWdlIGhlYWRlciB3aXRoIG5vcm1hbCB2YWx1ZSwgYW5kIENv
bnRlbnQtTGFuZ3VhZ2UgaGVhZGVyIHdpdGggYWJub3JtYWwgdmFsdWUgU0hPVUxEIGNhdXNlIGEg
cHJlZmxpZ2h0CitQQVNTIEFjY2VwdCBoZWFkZXIgd2l0aCBub3JtYWwgdmFsdWUgYW5kIHRoZW4g
YW5vdGhlciBBY2NlcHQgaGVhZGVyIHdpdGggYWJub3JtYWwgdmFsdWUgU0hPVUxEIGNhdXNlIGEg
cHJlZmxpZ2h0CitQQVNTIEFjY2VwdCBoZWFkZXIgd2l0aCBhYm5vcm1hbCB2YWx1ZSBhbmQgZXhw
bGljaXRseSBhbGxvd2VkIGhlYWRlcnMgU0hPVUxEIGJlIGFsbG93ZWQKK1BBU1MgQ29udGVudC1M
YW5ndWFnZSBoZWFkZXIgd2l0aCBhYm5vcm1hbCB2YWx1ZSBhbmQgZXhwbGljaXRseSBhbGxvd2Vk
IGhlYWRlcnMgU0hPVUxEIGJlIGFsbG93ZWQKK1BBU1MgQWNjZXB0IGhlYWRlciB3aXRoIG5vcm1h
bCB2YWx1ZSwgQWNjZXB0LUxhbmd1YWdlIGhlYWRlciB3aXRoIG5vcm1hbCB2YWx1ZSwgQ29udGVu
dC1MYW5ndWFnZSBoZWFkZXIgd2l0aCBhYm5vcm1hbCB2YWx1ZSwgYW5kIGV4cGxpY2l0bHkgYWxs
b3dlZCBoZWFkZXJzIFNIT1VMRCBiZSBhbGxvd2VkCitQQVNTIEFjY2VwdCBoZWFkZXIgd2l0aCBu
b3JtYWwgdmFsdWUsIHRoZW4gYW5vdGhlciBBY2NlcHQgaGVhZGVyIHdpdGggYWJub3JtYWwgdmFs
dWUsIGFuZCBleHBsaWNpdGx5IGFsbG93ZWQgaGVhZGVycyBTSE9VTEQgYmUgYWxsb3dlZAorCklu
ZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L2NvcnMtbm9uLXN0YW5k
YXJkLXNhZmVsaXN0ZWQtaGVhZGVycy1zaG91bGQtdHJpZ2dlci1wcmVmbGlnaHQuaHRtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L2NvcnMtbm9u
LXN0YW5kYXJkLXNhZmVsaXN0ZWQtaGVhZGVycy1zaG91bGQtdHJpZ2dlci1wcmVmbGlnaHQuaHRt
bAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0
L2NvcnMtbm9uLXN0YW5kYXJkLXNhZmVsaXN0ZWQtaGVhZGVycy1zaG91bGQtdHJpZ2dlci1wcmVm
bGlnaHQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2MCBAQAorPCFET0NUWVBFIGh0
bWw+Cis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKyAgICA8bWV0YSBjaGFyc2V0PSJVVEYtOCI+
CisgICAgPHRpdGxlPk5vbi1TdGFuZGFyZCBTYWZlbGlzdGVkIEhlYWRlcnMgU0hPVUxEIFRyaWdn
ZXIgYSBQcmVmbGlnaHQ8L3RpdGxlPgorICAgIDxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMt
dGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8IS0tIGh0dHBzOi8vZmV0
Y2guc3BlYy53aGF0d2cub3JnLyNjb3JzLXNhZmVsaXN0ZWQtcmVxdWVzdC1oZWFkZXIgLS0+Cis8
c2NyaXB0PgorICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgICAgICB0ZXN0UnVubmVy
LmR1bXBBc1RleHQoKTsKKyAgICAgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisgICAg
fQorCisgICAgdmFyIHhocjsKKyAgICB2YXIgdXJsID0gJ2h0dHA6Ly9sb2NhbGhvc3Q6ODAwMC94
bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMvY29ycy1wcmVmbGlnaHQtc2FmZWxpc3RlZC1oZWFkZXJz
LXJlc3BvbmRlci5waHAnOworCisgICAgZnVuY3Rpb24gY3JlYXRlUmVhZHlTdGF0ZUhhbmRsZXIg
KGRlc2NyaXB0aW9uLCB0ZXN0TnVtYmVyKSB7CisgICAgICAgIHJldHVybiBmdW5jdGlvbiBoYW5k
bGVyIChlKSB7CisgICAgICAgICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT09IFhNTEh0dHBSZXF1
ZXN0LkRPTkUpIHsKKyAgICAgICAgICAgICAgICB0ZXN0UGFzc2VkKGRlc2NyaXB0aW9uKTsKKyAg
ICAgICAgICAgICAgICBuZXh0U3RlcCh0ZXN0TnVtYmVyKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIGNyZWF0ZU9uRXJyb3JIYW5kbGVyIChkZXNjcmlw
dGlvbiwgdGVzdE51bWJlcikgeworICAgICAgICByZXR1cm4gZnVuY3Rpb24gaGFuZGxlciAoZSkg
eworICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICAgICAgdGVzdFBhc3Nl
ZChkZXNjcmlwdGlvbik7CisgICAgICAgICAgICBuZXh0U3RlcCh0ZXN0TnVtYmVyKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHZhciBhYm5vcm1hbFNpbXBsZUNvcnNIZWFkZXJWYWx1ZSA9ICIo
KSB7IDo7fTsiCisgICAgdmFyIGFsbEFsbG93ZWROb25BbHBoYW51bWVyaWNDaGFyYWN0ZXJzRm9y
QWNjZXB0SGVhZGVyID0gIiAqLi87PSIKKyAgICB2YXIgYWxsQWxsb3dlZE5vbkFscGhhbnVtZXJp
Y0NoYXJhY3RlcnNGb3JBY2NlcHRBbmRDb250ZW50TGFuZ3VhZ2VIZWFkZXIgPSAiICotLjs9Igor
ICAgIHZhciB0ZXN0Q2FzZXMgPSBbCisgICAgICAgIC8vIFBvc2l0aXZlIHRlc3QgY2FzZXMgd2l0
aCBub3JtYWwgaGVhZGVycworICAgICAgICB7CisgICAgICAgICAgICBoZWFkZXJzVG9BZGQ6IFt7
IG5hbWUgOiAiQWNjZXB0IiwgdmFsdWU6ICJ0ZXh0LyoiIH1dLAorICAgICAgICAgICAgZXhwbGlj
aXRseUFsbG93SGVhZGVyczogZmFsc2UsCisgICAgICAgICAgICBzaG91bGRDYXVzZVByZWZsaWdo
dDogZmFsc2UsCisgICAgICAgICAgICBkZXNjcmlwdGlvbjogIkFjY2VwdCBoZWFkZXIgd2l0aCBu
b3JtYWwgdmFsdWUgU0hPVUxEIE5PVCBjYXVzZSBhIHByZWZsaWdodCIKKyAgICAgICAgfQorICAg
ICAgICAseworICAgICAgICAgICAgaGVhZGVyc1RvQWRkOiBbeyBuYW1lIDogIkFjY2VwdCIsIHZh
bHVlOiBhbGxBbGxvd2VkTm9uQWxwaGFudW1lcmljQ2hhcmFjdGVyc0ZvckFjY2VwdEhlYWRlciB9
XSwKKyAgICAgICAgICAgIGV4cGxpY2l0bHlBbGxvd0hlYWRlcnM6IGZhbHNlLAorICAgICAgICAg
ICAgc2hvdWxkQ2F1c2VQcmVmbGlnaHQ6IGZhbHNlLAorICAgICAgICAgICAgZGVzY3JpcHRpb246
ICJBY2NlcHQgaGVhZGVyIHZhbHVlIHdpdGggYWxsIGFsbG93ZWQgbm9uLWFscGhhbnVtZXJpYyBj
aGFyYWN0ZXJzIFNIT1VMRCBOT1QgY2F1c2UgYSBwcmVmbGlnaHQiCisgICAgICAgIH0KKyAgICAg
ICAgLHsKKyAgICAgICAgICAgIGhlYWRlcnNUb0FkZDogW3sgbmFtZSA6ICJBY2NlcHQtTGFuZ3Vh
Z2UiLCB2YWx1ZTogImVuIiB9XSwKKyAgICAgICAgICAgIGV4cGxpY2l0bHlBbGxvd0hlYWRlcnM6
IGZhbHNlLAorICAgICAgICAgICAgc2hvdWxkQ2F1c2VQcmVmbGlnaHQ6IGZhbHNlLAorICAgICAg
ICAgICAgZGVzY3JpcHRpb246ICJBY2NlcHQtTGFuZ3VhZ2UgaGVhZGVyIHdpdGggbm9ybWFsIHZh
bHVlIFNIT1VMRCBOT1QgY2F1c2UgYSBwcmVmbGlnaHQiCisgICAgICAgIH0KKyAgICAgICAgLHsK
KyAgICAgICAgICAgIGhlYWRlcnNUb0FkZDogW3sgbmFtZSA6ICJBY2NlcHQtTGFuZ3VhZ2UiLCB2
YWx1ZTogYWxsQWxsb3dlZE5vbkFscGhhbnVtZXJpY0NoYXJhY3RlcnNGb3JBY2NlcHRBbmRDb250
ZW50TGFuZ3VhZ2VIZWFkZXIgfV0sCisgICAgICAgICAgICBleHBsaWNpdGx5QWxsb3dIZWFkZXJz
OiBmYWxzZSwKKyAgICAgICAgICAgIHNob3VsZENhdXNlUHJlZmxpZ2h0OiBmYWxzZSwKKyAgICAg
ICAgICAgIGRlc2NyaXB0aW9uOiAiQWNjZXB0LUxhbmd1YWdlIGhlYWRlciB2YWx1ZSB3aXRoIGFs
bCBhbGxvd2VkIG5vbi1hbHBoYW51bWVyaWMgY2hhcmFjdGVycyBTSE9VTEQgTk9UIGNhdXNlIGEg
cHJlZmxpZ2h0IgorICAgICAgICB9CisgICAgICAgICx7CisgICAgICAgICAgICBoZWFkZXJzVG9B
ZGQ6IFt7IG5hbWUgOiAiQ29udGVudC1MYW5ndWFnZSIsIHZhbHVlOiAiZW4iIH1dLAorICAgICAg
ICAgICAgZXhwbGljaXRseUFsbG93SGVhZGVyczogZmFsc2UsCisgICAgICAgICAgICBzaG91bGRD
YXVzZVByZWZsaWdodDogZmFsc2UsCisgICAgICAgICAgICBkZXNjcmlwdGlvbjogIkNvbnRlbnQt
TGFuZ3VhZ2UgaGVhZGVyIHdpdGggbm9ybWFsIHZhbHVlIFNIT1VMRCBOT1QgY2F1c2UgYSBwcmVm
bGlnaHQiCisgICAgICAgIH0KKyAgICAgICAgLHsKKyAgICAgICAgICAgIGhlYWRlcnNUb0FkZDog
W3sgbmFtZSA6ICJDb250ZW50LUxhbmd1YWdlIiwgdmFsdWU6IGFsbEFsbG93ZWROb25BbHBoYW51
bWVyaWNDaGFyYWN0ZXJzRm9yQWNjZXB0QW5kQ29udGVudExhbmd1YWdlSGVhZGVyIH1dLAorICAg
ICAgICAgICAgZXhwbGljaXRseUFsbG93SGVhZGVyczogZmFsc2UsCisgICAgICAgICAgICBzaG91
bGRDYXVzZVByZWZsaWdodDogZmFsc2UsCisgICAgICAgICAgICBkZXNjcmlwdGlvbjogIkNvbnRl
bnQtTGFuZ3VhZ2UgaGVhZGVyIHZhbHVlIHdpdGggYWxsIGFsbG93ZWQgbm9uLWFscGhhbnVtZXJp
YyBjaGFyYWN0ZXJzIFNIT1VMRCBOT1QgY2F1c2UgYSBwcmVmbGlnaHQiCisgICAgICAgIH0KKyAg
ICAgICAgLy8gTmVnYXRpdmUgdGVzdCBjYXNlcyB3aXRoIGFibm9ybWFsIGhlYWRlcnMKKyAgICAg
ICAgLHsKKyAgICAgICAgICAgIGhlYWRlcnNUb0FkZDogW3sgbmFtZSA6ICJBY2NlcHQiLCB2YWx1
ZTogYWJub3JtYWxTaW1wbGVDb3JzSGVhZGVyVmFsdWUgfV0sCisgICAgICAgICAgICBleHBsaWNp
dGx5QWxsb3dIZWFkZXJzOiBmYWxzZSwKKyAgICAgICAgICAgIHNob3VsZENhdXNlUHJlZmxpZ2h0
OiB0cnVlLAorICAgICAgICAgICAgZGVzY3JpcHRpb246ICJBY2NlcHQgaGVhZGVyIHdpdGggYWJu
b3JtYWwgdmFsdWUgU0hPVUxEIGNhdXNlIGEgcHJlZmxpZ2h0IgorICAgICAgICB9CisgICAgICAg
ICx7CisgICAgICAgICAgICBoZWFkZXJzVG9BZGQ6IFt7IG5hbWUgOiAiQWNjZXB0LUxhbmd1YWdl
IiwgdmFsdWU6IGFibm9ybWFsU2ltcGxlQ29yc0hlYWRlclZhbHVlIH1dLAorICAgICAgICAgICAg
ZXhwbGljaXRseUFsbG93SGVhZGVyczogZmFsc2UsCisgICAgICAgICAgICBzaG91bGRDYXVzZVBy
ZWZsaWdodDogdHJ1ZSwKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAiQWNjZXB0LUxhbmd1YWdl
IGhlYWRlciB3aXRoIGFibm9ybWFsIHZhbHVlIFNIT1VMRCBjYXVzZSBhIHByZWZsaWdodCIKKyAg
ICAgICAgfQorICAgICAgICAseworICAgICAgICAgICAgaGVhZGVyc1RvQWRkOiBbeyBuYW1lIDog
IkNvbnRlbnQtTGFuZ3VhZ2UiLCB2YWx1ZTogYWJub3JtYWxTaW1wbGVDb3JzSGVhZGVyVmFsdWUg
fV0sCisgICAgICAgICAgICBleHBsaWNpdGx5QWxsb3dIZWFkZXJzOiBmYWxzZSwKKyAgICAgICAg
ICAgIHNob3VsZENhdXNlUHJlZmxpZ2h0OiB0cnVlLAorICAgICAgICAgICAgZGVzY3JpcHRpb246
ICJDb250ZW50LUxhbmd1YWdlIGhlYWRlciB3aXRoIGFibm9ybWFsIHZhbHVlIFNIT1VMRCBjYXVz
ZSBhIHByZWZsaWdodCIKKyAgICAgICAgfQorICAgICAgICAseworICAgICAgICAgICAgaGVhZGVy
c1RvQWRkOiBbeyBuYW1lIDogIkFjY2VwdCIsIHZhbHVlOiAidGV4dC8qIiB9LCB7IG5hbWUgOiAi
QWNjZXB0LUxhbmd1YWdlIiwgdmFsdWU6ICJlbiIgfSwgeyBuYW1lIDogIkNvbnRlbnQtTGFuZ3Vh
Z2UiLCB2YWx1ZTogYWJub3JtYWxTaW1wbGVDb3JzSGVhZGVyVmFsdWUgfV0sCisgICAgICAgICAg
ICBleHBsaWNpdGx5QWxsb3dIZWFkZXJzOiBmYWxzZSwKKyAgICAgICAgICAgIHNob3VsZENhdXNl
UHJlZmxpZ2h0OiB0cnVlLAorICAgICAgICAgICAgZGVzY3JpcHRpb246ICJBY2NlcHQgaGVhZGVy
IHdpdGggbm9ybWFsIHZhbHVlLCBBY2NlcHQtTGFuZ3VhZ2UgaGVhZGVyIHdpdGggbm9ybWFsIHZh
bHVlLCBhbmQgQ29udGVudC1MYW5ndWFnZSBoZWFkZXIgd2l0aCBhYm5vcm1hbCB2YWx1ZSBTSE9V
TEQgY2F1c2UgYSBwcmVmbGlnaHQiCisgICAgICAgIH0KKyAgICAgICAgLHsKKyAgICAgICAgICAg
IGhlYWRlcnNUb0FkZDogW3sgbmFtZSA6ICJBY2NlcHQiLCB2YWx1ZTogInRleHQvKiIgfSwgeyBu
YW1lIDogIkFjY2VwdCIsIHZhbHVlOiBhYm5vcm1hbFNpbXBsZUNvcnNIZWFkZXJWYWx1ZSB9XSwK
KyAgICAgICAgICAgIGV4cGxpY2l0bHlBbGxvd0hlYWRlcnM6IGZhbHNlLAorICAgICAgICAgICAg
c2hvdWxkQ2F1c2VQcmVmbGlnaHQ6IHRydWUsCisgICAgICAgICAgICBkZXNjcmlwdGlvbjogIkFj
Y2VwdCBoZWFkZXIgd2l0aCBub3JtYWwgdmFsdWUgYW5kIHRoZW4gYW5vdGhlciBBY2NlcHQgaGVh
ZGVyIHdpdGggYWJub3JtYWwgdmFsdWUgU0hPVUxEIGNhdXNlIGEgcHJlZmxpZ2h0IgorICAgICAg
ICB9CisgICAgICAgIC8vIFBvc2l0aXZlIHRlc3QgY2FzZXMgd2l0aCBhYm5vcm1hbCBoZWFkZXJz
CisgICAgICAgICx7CisgICAgICAgICAgICBoZWFkZXJzVG9BZGQ6IFt7IG5hbWUgOiAiQWNjZXB0
IiwgdmFsdWU6IGFibm9ybWFsU2ltcGxlQ29yc0hlYWRlclZhbHVlIH1dLAorICAgICAgICAgICAg
ZXhwbGljaXRseUFsbG93SGVhZGVyczogdHJ1ZSwKKyAgICAgICAgICAgIHNob3VsZENhdXNlUHJl
ZmxpZ2h0OiB0cnVlLAorICAgICAgICAgICAgZGVzY3JpcHRpb246ICJBY2NlcHQgaGVhZGVyIHdp
dGggYWJub3JtYWwgdmFsdWUgYW5kIGV4cGxpY2l0bHkgYWxsb3dlZCBoZWFkZXJzIFNIT1VMRCBi
ZSBhbGxvd2VkIgorICAgICAgICB9CisgICAgICAgICx7CisgICAgICAgICAgICBoZWFkZXJzVG9B
ZGQ6IFt7IG5hbWUgOiAiQ29udGVudC1MYW5ndWFnZSIsIHZhbHVlOiBhYm5vcm1hbFNpbXBsZUNv
cnNIZWFkZXJWYWx1ZSB9XSwKKyAgICAgICAgICAgIGV4cGxpY2l0bHlBbGxvd0hlYWRlcnM6IHRy
dWUsCisgICAgICAgICAgICBzaG91bGRDYXVzZVByZWZsaWdodDogdHJ1ZSwKKyAgICAgICAgICAg
IGRlc2NyaXB0aW9uOiAiQ29udGVudC1MYW5ndWFnZSBoZWFkZXIgd2l0aCBhYm5vcm1hbCB2YWx1
ZSBhbmQgZXhwbGljaXRseSBhbGxvd2VkIGhlYWRlcnMgU0hPVUxEIGJlIGFsbG93ZWQiCisgICAg
ICAgIH0KKyAgICAgICAgLHsKKyAgICAgICAgICAgIGhlYWRlcnNUb0FkZDogW3sgbmFtZSA6ICJB
Y2NlcHQiLCB2YWx1ZTogInRleHQvKiIgfSwgeyBuYW1lIDogIkFjY2VwdC1MYW5ndWFnZSIsIHZh
bHVlOiAiZW4iIH0sIHsgbmFtZSA6ICJDb250ZW50LUxhbmd1YWdlIiwgdmFsdWU6IGFibm9ybWFs
U2ltcGxlQ29yc0hlYWRlclZhbHVlIH1dLAorICAgICAgICAgICAgZXhwbGljaXRseUFsbG93SGVh
ZGVyczogdHJ1ZSwKKyAgICAgICAgICAgIHNob3VsZENhdXNlUHJlZmxpZ2h0OiB0cnVlLAorICAg
ICAgICAgICAgZGVzY3JpcHRpb246ICJBY2NlcHQgaGVhZGVyIHdpdGggbm9ybWFsIHZhbHVlLCBB
Y2NlcHQtTGFuZ3VhZ2UgaGVhZGVyIHdpdGggbm9ybWFsIHZhbHVlLCBDb250ZW50LUxhbmd1YWdl
IGhlYWRlciB3aXRoIGFibm9ybWFsIHZhbHVlLCBhbmQgZXhwbGljaXRseSBhbGxvd2VkIGhlYWRl
cnMgU0hPVUxEIGJlIGFsbG93ZWQiCisgICAgICAgIH0KKyAgICAgICAgLHsKKyAgICAgICAgICAg
IGhlYWRlcnNUb0FkZDogW3sgbmFtZSA6ICJBY2NlcHQiLCB2YWx1ZTogInRleHQvKiIgfSwgeyBu
YW1lIDogIkFjY2VwdCIsIHZhbHVlOiBhYm5vcm1hbFNpbXBsZUNvcnNIZWFkZXJWYWx1ZSB9XSwK
KyAgICAgICAgICAgIGV4cGxpY2l0bHlBbGxvd0hlYWRlcnM6IHRydWUsCisgICAgICAgICAgICBz
aG91bGRDYXVzZVByZWZsaWdodDogdHJ1ZSwKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAiQWNj
ZXB0IGhlYWRlciB3aXRoIG5vcm1hbCB2YWx1ZSwgdGhlbiBhbm90aGVyIEFjY2VwdCBoZWFkZXIg
d2l0aCBhYm5vcm1hbCB2YWx1ZSwgYW5kIGV4cGxpY2l0bHkgYWxsb3dlZCBoZWFkZXJzIFNIT1VM
RCBiZSBhbGxvd2VkIgorICAgICAgICB9CisgICAgXTsKKworICAgIGZ1bmN0aW9uIHJ1blRlc3RD
YXNlKHRlc3ROdW1iZXIpIHsKKyAgICAgICAgdmFyIHRlc3RDYXNlID0gdGVzdENhc2VzW3Rlc3RO
dW1iZXJdOworICAgICAgICB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAgICAgICAgeGhy
Lm9wZW4oJ0dFVCcsIHVybCArICh0ZXN0Q2FzZS5leHBsaWNpdGx5QWxsb3dIZWFkZXJzID8gIi8/
ZXhwbGljaXRseUFsbG93SGVhZGVycz10cnVlIiA6ICIiKSwgdHJ1ZSk7CisgICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgdGVzdENhc2UuaGVhZGVyc1RvQWRkLmxlbmd0aDsgaSsrKSB7CisgICAg
ICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcih0ZXN0Q2FzZS5oZWFkZXJzVG9BZGRbaV0ubmFt
ZSwgdGVzdENhc2UuaGVhZGVyc1RvQWRkW2ldLnZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAodGVzdENhc2Uuc2hvdWxkQ2F1c2VQcmVmbGlnaHQgJiYgIXRlc3RDYXNlLmV4cGxpY2l0bHlB
bGxvd0hlYWRlcnMpCisgICAgICAgICAgICB4aHIub25lcnJvciA9IGNyZWF0ZU9uRXJyb3JIYW5k
bGVyKHRlc3RDYXNlLmRlc2NyaXB0aW9uLCB0ZXN0TnVtYmVyKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGNyZWF0ZVJlYWR5U3RhdGVIYW5kbGVy
KHRlc3RDYXNlLmRlc2NyaXB0aW9uLCB0ZXN0TnVtYmVyKTsKKyAgICAgICAgeGhyLnNlbmQoKTsK
KyAgICB9CisKKyAgICBmdW5jdGlvbiBuZXh0U3RlcCAodGVzdE51bWJlcikgeworICAgICAgICBp
ZiAodGVzdE51bWJlciA9PT0gKHRlc3RDYXNlcy5sZW5ndGggLSAxKSkgeworICAgICAgICAgICAg
aWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5
RG9uZSgpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHJ1blRlc3RDYXNlKHRlc3ROdW1i
ZXIgKyAxKTsKKyAgICB9CisKKyAgICBydW5UZXN0Q2FzZSgwKTsKKzwvc2NyaXB0PgorPC9ib2R5
PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IExheW91dFRlc3Rz
L2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvcmVzb3VyY2VzL2NvcnMtcHJlZmxpZ2h0LXNhZmVs
aXN0ZWQtaGVhZGVycy1yZXNwb25kZXIucGhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0
dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvcmVzb3VyY2VzL2NvcnMtcHJlZmxpZ2h0LXNhZmVsaXN0
ZWQtaGVhZGVycy1yZXNwb25kZXIucGhwCShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2h0
dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvcmVzb3VyY2VzL2NvcnMtcHJlZmxpZ2h0LXNhZmVsaXN0
ZWQtaGVhZGVycy1yZXNwb25kZXIucGhwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOCBAQAor
PD9waHAKK2hlYWRlcignQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luOiBodHRwOi8vMTI3LjAu
MC4xOjgwMDAnKTsKKworaWYgKCRfU0VSVkVSWydSRVFVRVNUX01FVEhPRCddID09ICdPUFRJT05T
JyAmJiBpc3NldCgkX0dFVFsnZXhwbGljaXRseUFsbG93SGVhZGVycyddKSkgeworICAgIGhlYWRl
cignQWNjZXNzLUNvbnRyb2wtQWxsb3ctTWV0aG9kczogR0VULCBPUFRJT05TJyk7CisgICAgaGVh
ZGVyKCdBY2Nlc3MtQ29udHJvbC1BbGxvdy1IZWFkZXJzOiBBY2NlcHQsIEFjY2VwdC1MYW5ndWFn
ZSwgQ29udGVudC1MYW5ndWFnZScpOworfQorPz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxl
Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>