<?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>66588</bug_id>
          
          <creation_ts>2011-08-19 14:07:01 -0700</creation_ts>
          <short_desc>XSS filter bypass via non-standard URL encoding</short_desc>
          <delta_ts>2011-09-09 05:18:51 -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>WebKit Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>XSSAuditor</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>66579</blocked>
    
    <blocked>67134</blocked>
    
    <blocked>67842</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Daniel Bates">dbates</assigned_to>
          <cc>dbates</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>454070</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-08-19 14:07:01 -0700</bug_when>
    <thetext>(I thought this bug was filed somewhere already, but I couldn&apos;t find it.)

Quoting Wikipedia:

[[
There exists a non-standard encoding for Unicode characters: %uxxxx, where xxxx is a Unicode value represented as four hexadecimal digits. This behavior is not specified by any RFC and has been rejected by the W3C. The third edition of ECMA-262 still includes an escape(string) function that uses this syntax, but also an encodeURI(uri) function that converts to UTF-8 and percent-encodes each octet.
]]
-- http://en.wikipedia.org/wiki/Percent-encoding#Non-standard_implementations

It turns out ASP (or possibly ASP.NET) servers decode these sequences, which leads to an XSS filter bypass because we don&apos;t understand that transformation.  ASP servers are a large enough population that it&apos;s probably worth teaching the XSS auditor to understand this case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461052</commentid>
    <comment_count>1</comment_count>
      <attachid>106094</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-09-01 22:35:49 -0700</bug_when>
    <thetext>Created attachment 106094
Work-in-progress patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461053</commentid>
    <comment_count>2</comment_count>
      <attachid>106094</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-09-01 22:43:09 -0700</bug_when>
    <thetext>Comment on attachment 106094
Work-in-progress patch

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

&gt; Source/WebCore/html/parser/XSSAuditor.cpp:119
&gt; +static inline String decodeFancyUnicodeEscapeSequences(const String&amp; string)

Love the name.

&gt; Source/WebCore/platform/text/DecodeEscapeSequences.h:38
&gt; +static inline int hexDigitValue(UChar c)

Supposedly including static functions in a header makes the linker sad.  I think this function is in ASCIIType anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461359</commentid>
    <comment_count>3</comment_count>
      <attachid>106094</attachid>
    <who name="Thomas Sepez">tsepez</who>
    <bug_when>2011-09-02 11:20:15 -0700</bug_when>
    <thetext>Comment on attachment 106094
Work-in-progress patch

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

&gt;&gt; Source/WebCore/html/parser/XSSAuditor.cpp:119
&gt;&gt; +static inline String decodeFancyUnicodeEscapeSequences(const String&amp; string)
&gt; 
&gt; Love the name.

Might call it decode16BitUnicodeEscapeSequences.

&gt; Source/WebCore/html/parser/XSSAuditor.cpp:135
&gt;          String decodedString = decoder-&gt;encoding().decode(workingStringUTF8.data(), workingStringUTF8.length());

We know this can&apos;t work.  OK for now, but the decoding has to happen inside decodeURLEscapeSequences so maybe pass it the decoder.

&gt; Source/WebCore/platform/text/DecodeEscapeSequences.h:62
&gt; +            *p++ = (hexDigitValue(run[2]) &lt;&lt; 12) | (hexDigitValue(run[3]) &lt;&lt; 8) | (hexDigitValue(run[4]) &lt;&lt; 4) | hexDigitValue(run[5]);

*p is a char, but you&apos;re assigning 16 bit value to it.

&gt; Source/WebCore/platform/text/DecodeEscapeSequences.h:112
&gt; +        String decoded = (encoding.isValid() ? encoding : UTF8Encoding()).decode(buffer.data(), numBytesWritten);

There&apos;s a difference between the 8bit version where the %-escapes are interepreted relative to an encoding vs. the %u-style escapes, which are expected to represent a unicode code point no matter what the encoding and shouldn&apos;t get decoded.  I think your palceDecodedRunInBuffer needs to be passed the encoding so it can decide whether to do this or not, with the output buffer being a String (or UChar equivalent).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461364</commentid>
    <comment_count>4</comment_count>
      <attachid>106094</attachid>
    <who name="Thomas Sepez">tsepez</who>
    <bug_when>2011-09-02 11:23:08 -0700</bug_when>
    <thetext>Comment on attachment 106094
Work-in-progress patch

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

&gt; LayoutTests/http/tests/security/xssAuditor/script-tag-with-fancy-unicode2.html:13
&gt; +&lt;/iframe&gt;

Really need to stick some high-valued codepoints in here -- that may show the *p bug above.  Also %252525u0061 should be tried as well to test interaction between the two decoders.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461402</commentid>
    <comment_count>5</comment_count>
      <attachid>106094</attachid>
    <who name="Thomas Sepez">tsepez</who>
    <bug_when>2011-09-02 12:00:53 -0700</bug_when>
    <thetext>Comment on attachment 106094
Work-in-progress patch

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

&gt; Source/WebCore/html/parser/XSSAuditor.cpp:130
&gt;          workingString = decodeURLEscapeSequences(workingString);

Might want to circumvent the path through KURL.cpp to avoid schizophrenic issues about whether KURLGoogle.cpp is used on a given build.  You could just call the templated function directly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461906</commentid>
    <comment_count>6</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-09-03 21:59:44 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 106094 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=106094&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/html/parser/XSSAuditor.cpp:119
&gt; &gt; +static inline String decodeFancyUnicodeEscapeSequences(const String&amp; string)
&gt; 
&gt; Love the name.

Although we understand the meaning of &quot;fancy&quot;, I suggest we rename this function to decode16BitUnicodeEscapeSequences() as suggested by Thomas Sepez because this name better conveys the fanciness of these Unicode escape sequences.

&gt; 
&gt; &gt; Source/WebCore/platform/text/DecodeEscapeSequences.h:38
&gt; &gt; +static inline int hexDigitValue(UChar c)
&gt; 
&gt; Supposedly including static functions in a header makes the linker sad.  I think this function is in ASCIIType anyway.

Will remove.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461907</commentid>
    <comment_count>7</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-09-03 22:01:36 -0700</bug_when>
    <thetext>Okiedokes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461910</commentid>
    <comment_count>8</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-09-03 22:06:46 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 106094 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=106094&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/html/parser/XSSAuditor.cpp:119
&gt; &gt;&gt; +static inline String decodeFancyUnicodeEscapeSequences(const String&amp; string)
&gt; &gt; 
&gt; &gt; Love the name.
&gt; 
&gt; Might call it decode16BitUnicodeEscapeSequences.

Will rename.

&gt; 
&gt; &gt; Source/WebCore/html/parser/XSSAuditor.cpp:135
&gt; &gt;          String decodedString = decoder-&gt;encoding().decode(workingStringUTF8.data(), workingStringUTF8.length());
&gt; 
&gt; We know this can&apos;t work.  OK for now, but the decoding has to happen inside decodeURLEscapeSequences so maybe pass it the decoder.

Will remove and instead pass text encoding to decodeURLEscapeSequences().

&gt; 
&gt; &gt; Source/WebCore/platform/text/DecodeEscapeSequences.h:62
&gt; &gt; +            *p++ = (hexDigitValue(run[2]) &lt;&lt; 12) | (hexDigitValue(run[3]) &lt;&lt; 8) | (hexDigitValue(run[4]) &lt;&lt; 4) | hexDigitValue(run[5]);
&gt; 
&gt; *p is a char, but you&apos;re assigning 16 bit value to it.
&gt; 

Will fix.

&gt; &gt; Source/WebCore/platform/text/DecodeEscapeSequences.h:112
&gt; &gt; +        String decoded = (encoding.isValid() ? encoding : UTF8Encoding()).decode(buffer.data(), numBytesWritten);
&gt; 
&gt; There&apos;s a difference between the 8bit version where the %-escapes are interepreted relative to an encoding vs. the %u-style escapes, which are expected to represent a unicode code point no matter what the encoding and shouldn&apos;t get decoded.  I think your palceDecodedRunInBuffer needs to be passed the encoding so it can decide whether to do this or not, with the output buffer being a String (or UChar equivalent).

Will rename placeDecodedRunInBuffer() to decodeRun(), have it take as input a text encoding, and have it return a String object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461911</commentid>
    <comment_count>9</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-09-03 22:08:04 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 106094 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=106094&amp;action=review
&gt; 
&gt; &gt; LayoutTests/http/tests/security/xssAuditor/script-tag-with-fancy-unicode2.html:13
&gt; &gt; +&lt;/iframe&gt;
&gt; 
&gt; Really need to stick some high-valued codepoints in here -- that may show the *p bug above.  Also %252525u0061 should be tried as well to test interaction between the two decoders.

Will add test cases that include high-valued Unicode code points.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461914</commentid>
    <comment_count>10</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-09-03 22:21:06 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 106094 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=106094&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/html/parser/XSSAuditor.cpp:130
&gt; &gt;          workingString = decodeURLEscapeSequences(workingString);
&gt; 
&gt; Might want to circumvent the path through KURL.cpp to avoid schizophrenic issues about whether KURLGoogle.cpp is used on a given build.  You could just call the templated function directly.

Will call templated function decodeEscapeSequences&lt;URLEscapeSequence&gt;() instead of KURL&apos;s decodeURLEscapeSequences().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461917</commentid>
    <comment_count>11</comment_count>
      <attachid>106279</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-09-03 22:32:54 -0700</bug_when>
    <thetext>Created attachment 106279
Patch and layout tests

Needs change log. We could also look to bolster the test case script-tag-with-fancy-unicode5.html with more high-valued Unicode code points.

Additionally, added an early return in XSSAuditor::init() when the document&apos;s URL is null or the empty string (i.e. url.isEmpty() evaluates to true). This can happen when opening a new browser window or calling window.open(&quot;&quot;) (i.e. not specifying a URL to window.open()).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461993</commentid>
    <comment_count>12</comment_count>
      <attachid>106296</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-09-04 16:37:33 -0700</bug_when>
    <thetext>Created attachment 106296
Patch and layout tests

Add more high-valued Unicode code points to test case script-tag-with-16bit-unicode5.html (formerly named script-tag-with-fancy-unicode5.html).

I renamed the test cases such that they have the suffix 16bit-unicode in their name so as to more closely match the references to 16-bit Unicode escape sequences in the code. I am open to suggestions. Should we decide to use this suffix then we should rename the existing test case script-tag-with-fancy-unicode.html for consistency.

Added an additional test case, window-open-without-url-should-not-assert.html, to ensure we don&apos;t assert when opening a browser window without a URL using window.open(&quot;&quot;) (verbatim).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462203</commentid>
    <comment_count>13</comment_count>
      <attachid>106296</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-09-05 11:38:47 -0700</bug_when>
    <thetext>Comment on attachment 106296
Patch and layout tests

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

This looks good.  Below are a bunch of minor comments.  I&apos;d like to look at it one more time to make sure we get the multi-byte unicode stuff right.

&gt; Source/WebCore/html/parser/XSSAuditor.cpp:126
&gt; +static inline String commonDecodeURLEscapeSequences(const String&amp; string, const TextEncoding&amp; encoding)

decodeCommonURLEscapeSequences ?  As written, the name doesn&apos;t seem to read quite right.  Maybe decodeStandardURLEscapSequences ?

&gt; Source/WebCore/html/parser/XSSAuditor.cpp:142
&gt; +    workingString = decode16BitUnicodeEscapeSequences(workingString);

Don&apos;t we need to do this inside the loop too?

&gt; Source/WebCore/platform/text/DecodeEscapeSequences.h:46
&gt; +            &amp;&amp; WTF::isASCIIHexDigit(string[start + 2]) &amp;&amp; WTF::isASCIIHexDigit(string[start + 3])
&gt; +            &amp;&amp; WTF::isASCIIHexDigit(string[start + 4]) &amp;&amp; WTF::isASCIIHexDigit(string[start + 5]);

You probably don&apos;t need the WTF:: parts.

&gt; Source/WebCore/platform/text/DecodeEscapeSequences.h:52
&gt; +        size_t numSequences = runLength / size;

numSequences =&gt; numberOfSequences

&gt; Source/WebCore/platform/text/DecodeEscapeSequences.h:53
&gt; +        Vector&lt;UChar, 512&gt; buffer;

Given that we need to return a String anyway, we should just use StringBuilder and reserveCapacity.  We can&apos;t avoid the malloc in any case.

&gt; Source/WebCore/platform/text/DecodeEscapeSequences.h:57
&gt; +            *p++ = (toASCIIHexValue(run[2]) &lt;&lt; 12) | (toASCIIHexValue(run[3]) &lt;&lt; 8) | (toASCIIHexValue(run[4]) &lt;&lt; 4) | toASCIIHexValue(run[5]);

Is this correct even with surrogates?  I would have expected you to do something like what we do here:

http://trac.webkit.org/browser/trunk/Source/WebCore/html/parser/HTMLEntityParser.cpp#L73

&gt; Source/WebCore/platform/text/DecodeEscapeSequences.h:76
&gt; +        DEFINE_STATIC_LOCAL(CharBuffer, buffer, ());

Why are we declaring it static?  That can cause problems if this code is run on multiple threads or re-entered.  Just allocating it on the stack should be find (and essentially free).

&gt; Source/WebCore/platform/text/DecodeEscapeSequences.h:78
&gt; +        size_t numSequences = runLength / size;

numSequences =&gt; numberOfSequences

&gt; Source/WebCore/platform/text/DecodeEscapeSequences.h:84
&gt; +        }

I&apos;d add an ASSERT about buffer.size.

&gt; Source/WebCore/platform/text/DecodeEscapeSequences.h:92
&gt; +    Vector&lt;UChar&gt; result;

StringBuilder is probably better here.

&gt; Source/WebCore/platform/text/DecodeEscapeSequences.h:93
&gt; +    unsigned length = string.length();

size_t &lt;-- amounts of memory are measured in size_t so they work properly on 64-bit machines.

&gt; Source/WebCore/platform/text/DecodeEscapeSequences.h:95
&gt; +    unsigned decodedPosition = 0;
&gt; +    unsigned searchPosition = 0;

Same here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>464476</commentid>
    <comment_count>14</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-09-08 16:17:35 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; [...]
&gt; &gt; Source/WebCore/html/parser/XSSAuditor.cpp:126
&gt; &gt; +static inline String commonDecodeURLEscapeSequences(const String&amp; string, const TextEncoding&amp; encoding)
&gt; 
&gt; decodeCommonURLEscapeSequences ?  As written, the name doesn&apos;t seem to read quite right.  Maybe decodeStandardURLEscapSequences ?
&gt; 

I&apos;ll use decodeStandardURLEscapeSequences().

Both decodeCommonURLEscapeSequences() and decodeStandardURLEscapeSequences() seem to imply that there exists some uncommon/non-standard URL escape sequences that this function doesn&apos;t decode.

I wanted to convey that this function doesn&apos;t use the platform-specific KURL URL decoding machinery. So, I chose the prefix &quot;common&quot; as a synonym for cross-platform. Maybe prefixing with &quot;crossPlatform&quot; would be more descriptive? Another idea is to rename decodeURLEscapeSequences() to platformDecodeURLEscapeSequences() in KURL.{cpp, h} and KURLGoogle.{cpp, h}. Then we can reuse the name decodeURLEscapeSequences for a function that calls decodeEscapeSequences&lt;URLEscapeSequence&gt;().

&gt; &gt; Source/WebCore/html/parser/XSSAuditor.cpp:142
&gt; &gt; +    workingString = decode16BitUnicodeEscapeSequences(workingString);
&gt; 
&gt; Don&apos;t we need to do this inside the loop too?

Yes, will fix.

Then we&apos;ll catch the following attacks that intermix the %u- and URL- encodings, such as: http://localhost:8000/security/xssAuditor/resources/echo-intertag-decode-16bit-unicode.pl?q=&lt;script&gt;alert(/XS%u002525u0053/)&lt;/script&gt;.

&gt; 
&gt; &gt; Source/WebCore/platform/text/DecodeEscapeSequences.h:46
&gt; &gt; +            &amp;&amp; WTF::isASCIIHexDigit(string[start + 2]) &amp;&amp; WTF::isASCIIHexDigit(string[start + 3])
&gt; &gt; +            &amp;&amp; WTF::isASCIIHexDigit(string[start + 4]) &amp;&amp; WTF::isASCIIHexDigit(string[start + 5]);
&gt; 
&gt; You probably don&apos;t need the WTF:: parts.

Will remove.

&gt; 
&gt; &gt; Source/WebCore/platform/text/DecodeEscapeSequences.h:52
&gt; &gt; +        size_t numSequences = runLength / size;
&gt; 
&gt; numSequences =&gt; numberOfSequences

Will rename.

&gt; 
&gt; &gt; Source/WebCore/platform/text/DecodeEscapeSequences.h:53
&gt; &gt; +        Vector&lt;UChar, 512&gt; buffer;
&gt; 
&gt; Given that we need to return a String anyway, we should just use StringBuilder and reserveCapacity.  We can&apos;t avoid the malloc in any case.

Will use StringBuilder.

&gt; 
&gt; &gt; Source/WebCore/platform/text/DecodeEscapeSequences.h:57
&gt; &gt; +            *p++ = (toASCIIHexValue(run[2]) &lt;&lt; 12) | (toASCIIHexValue(run[3]) &lt;&lt; 8) | (toASCIIHexValue(run[4]) &lt;&lt; 4) | toASCIIHexValue(run[5]);
&gt; 
&gt; Is this correct even with surrogates?  I would have expected you to do something like what we do here:
&gt; 
&gt; http://trac.webkit.org/browser/trunk/Source/WebCore/html/parser/HTMLEntityParser.cpp#L73

Yes, this works with surrogates.

We discussed this over IRC on 09/06/2011. Will follow this comment with a transcript from that discussion.

&gt; 
&gt; &gt; Source/WebCore/platform/text/DecodeEscapeSequences.h:76
&gt; &gt; +        DEFINE_STATIC_LOCAL(CharBuffer, buffer, ());
&gt; 
&gt; Why are we declaring it static?  That can cause problems if this code is run on multiple threads or re-entered.  Just allocating it on the stack should be find (and essentially free).

Will remove. Instead, will stack allocate a buffer.

&gt; 
&gt; &gt; Source/WebCore/platform/text/DecodeEscapeSequences.h:78
&gt; &gt; +        size_t numSequences = runLength / size;
&gt; 
&gt; numSequences =&gt; numberOfSequences

Will rename.

&gt; 
&gt; &gt; Source/WebCore/platform/text/DecodeEscapeSequences.h:84
&gt; &gt; +        }
&gt; 
&gt; I&apos;d add an ASSERT about buffer.size.

Will add ASSERT(buffer.size() == static_cast&lt;size_t&gt;(p - buffer.data())).

&gt; 
&gt; &gt; Source/WebCore/platform/text/DecodeEscapeSequences.h:92
&gt; &gt; +    Vector&lt;UChar&gt; result;
&gt; 
&gt; StringBuilder is probably better here.

Will use StringBuilder.

&gt; 
&gt; &gt; Source/WebCore/platform/text/DecodeEscapeSequences.h:93
&gt; &gt; +    unsigned length = string.length();
&gt; 
&gt; size_t &lt;-- amounts of memory are measured in size_t so they work properly on 64-bit machines.
&gt; 
&gt; &gt; Source/WebCore/platform/text/DecodeEscapeSequences.h:95
&gt; &gt; +    unsigned decodedPosition = 0;
&gt; &gt; +    unsigned searchPosition = 0;
&gt; 
&gt; Same here.

Will use size_t.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>464480</commentid>
    <comment_count>15</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-09-08 16:24:49 -0700</bug_when>
    <thetext>For completeness, I discussed with Adam over IRC on 09/06/2011 about the correctness of the decoding routine for %u-escape sequences that he asked about in comment 13:

&quot;&gt; Source/WebCore/platform/text/DecodeEscapeSequences.h:57
&gt; +            *p++ = (toASCIIHexValue(run[2]) &lt;&lt; 12) | (toASCIIHexValue(run[3]) &lt;&lt; 8) | (toASCIIHexValue(run[4]) &lt;&lt; 4) | toASCIIHexValue(run[5]);

Is this correct even with surrogates?  I would have expected you to do something like what we do here:

http://trac.webkit.org/browser/trunk/Source/WebCore/html/parser/HTMLEntityParser.cpp#L73&quot;

The paraphrased IRC transcript follows:

[7:56pm] abarth: dydz: were you looking for me earlier?
[7:57pm] dydz: abarth: Hi abarth. I was. I wanted to talk about &lt;https://bugs.webkit.org/show_bug.cgi?id=66588#c13&gt;
[7:57pm] dydz: abarth: In particular, about the surrogates.
[7:57pm] abarth: yessir
[7:58pm] dydz: abarth: From my understanding a String obejct represents UTF-16 string
[7:58pm] dydz: And %u-escape sequences represent UTF-16 code points.
[7:58pm] dydz: err
[7:58pm] dydz: UTF-16 code unit
[7:58pm] dydz: That is, the escape sequence doesn&apos;t represent a Unicode code point.
[7:59pm] abarth: dydz: why do you think that?
[7:59pm] abarth: maybe ECMA-262 says?
[8:00pm] abarth: &quot;%uxxxx, where xxxx is a Unicode value represented as four hexadecimal digits&quot;
[8:00pm] abarth: is what wikipedia says
[8:00pm] abarth: which isn&apos;t all that precise 
[8:00pm] abarth: but you&apos;re right that 262 usually deals in code units
[8:01pm] abarth: http://www.w3.org/International/iri-edit/draft-duerst-iri.html
[8:01pm] abarth: might be a good source
[8:02pm] abarth: &quot;Instead of using the existing percent-encoding convention of URIs, which is based on octets, the idea was to create a new encoding convention, for example to use &apos;%u&apos; to introduce UCS code points.&quot;
[8:02pm] dydz: abarth: I haven&apos;t read ECMA-262 yet, but for your reference the definition of Unicode code units seems consistent with the implementation of unescape &lt;http://trac.webkit.org/browser/trunk/Source/JavaScriptCore/runtime/JSGlobalObjectFunctions.cpp#L568&gt;
[8:03pm] pizlo joined the chat room.
[8:03pm] abarth: Lexer::convertUnicode
[8:03pm] abarth: ok
[8:03pm] abarth: you&apos;re probably right
[8:03pm] abarth: maybe add a comment explaining?
[8:04pm] dydz: abarth: sure
[8:04pm] dydz: abarth: Can you save me some time, is a UCS-2 code point the same as a UTF-16 code unit?
[8:05pm] abarth: http://en.wikipedia.org/wiki/UTF-16/UCS-2
[8:05pm] abarth: &quot;The older UCS-2 (2-byte Universal Character Set) is a similar character encoding that was superseded by UTF-16 in version 2.0 of the Unicode standard in July 1996.[2] It produces a fixed-length format by simply using the code point as the 16-bit code unit and produces exactly the same result as UTF-16 for 96.9% of all the code points in the range 0-0xFFFF, including all characters that had been assigned a value at that time.&quot;
[8:05pm] abarth: sounds like UTF-16 without the surroages
[8:06pm] abarth: and unable to represent characters that UTF-16 uses surrogates for
[8:10pm] dydz: abarth: ok. So a UCS-2 code point is analogous to a UTF-16 code unit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>464509</commentid>
    <comment_count>16</comment_count>
      <attachid>106817</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-09-08 17:09:33 -0700</bug_when>
    <thetext>Created attachment 106817
Patch and layout tests

Updated patch based on Adam Barth&apos;s comments.

Added additional tests, including script-tag-with-16bit-unicode-surrogate-pair.html.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>464513</commentid>
    <comment_count>17</comment_count>
      <attachid>106817</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-09-08 17:13:28 -0700</bug_when>
    <thetext>Comment on attachment 106817
Patch and layout tests

Thanks Dan.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>464602</commentid>
    <comment_count>18</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-09-08 19:39:16 -0700</bug_when>
    <thetext>Committed r94828: &lt;http://trac.webkit.org/changeset/94828&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106094</attachid>
            <date>2011-09-01 22:35:49 -0700</date>
            <delta_ts>2011-09-03 22:32:54 -0700</delta_ts>
            <desc>Work-in-progress patch</desc>
            <filename>Bug66588.patch</filename>
            <type>text/plain</type>
            <size>19193</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gOTQyNjEpCisrKyBT
b3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC0yODEz
LDYgKzI4MTMsNyBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvQmlkaUNvbnRleHQuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9C
aWRpUmVzb2x2ZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpUnVuTGlz
dC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0RlY29kZUVzY2FwZVNlcXVlbmNl
cy5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0h5cGhlbmF0aW9uLmNwcCBcCiAJ
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9IeXBoZW5hdGlvbi5oIFwKIAlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L0xpbmVCcmVha0l0ZXJhdG9yUG9vbElDVS5oIFwKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkJKHJldmlzaW9uIDk0MjYxKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCSh3b3JraW5nIGNvcHkpCkBAIC04NDgsNiArODQ4LDcgQEAKICAgICAgICAgICAgICdwbGF0
Zm9ybS90ZXh0L0JpZGlSdW5MaXN0LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL3RleHQvQmlk
aUNvbnRleHQuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vdGV4dC9CaWRpUmVzb2x2ZXIuaCcs
CisgICAgICAgICAgICAncGxhdGZvcm0vdGV4dC9EZWNvZGVFc2NhcGVTZXF1ZW5jZXMuaCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vdGV4dC9MaW5lQnJlYWtJdGVyYXRvclBvb2xJQ1UuaCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vdGV4dC9MaW5lRW5kaW5nLmgnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL3RleHQvUGxhdGZvcm1TdHJpbmcuaCcsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwkocmV2aXNp
b24gOTQyNjEpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpA
QCAtMjEwMiw2ICsyMTAyLDcgQEAgSEVBREVSUyArPSBcCiAgICAgcGxhdGZvcm0vc3FsL1NRTFZh
bHVlLmggXAogICAgIHBsYXRmb3JtL3RleHQvQmFzZTY0LmggXAogICAgIHBsYXRmb3JtL3RleHQv
QmlkaUNvbnRleHQuaCBcCisgICAgcGxhdGZvcm0vdGV4dC9EZWNvZGVFc2NhcGVTZXF1ZW5jZXMu
aCBcCiAgICAgcGxhdGZvcm0vdGV4dC9IeXBoZW5hdGlvbi5oIFwKICAgICBwbGF0Zm9ybS90ZXh0
L1F1b3RlZFByaW50YWJsZS5oIFwKICAgICBwbGF0Zm9ybS90ZXh0L3F0L1RleHRDb2RlY1F0Lmgg
XApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJ
KHJldmlzaW9uIDk0MjYxKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTMxNjA1LDYgKzMxNjA1LDEwIEBACiAJCQkJCT4K
IAkJCQk8L0ZpbGU+CiAJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVx0
ZXh0XERlY29kZUVzY2FwZVNlcXVlbmNlcy5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxG
aWxlCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cdGV4dFxIeXBoZW5hdGlvbi5oIgog
CQkJCQk+CiAJCQkJPC9GaWxlPgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gOTQyNjEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTU0NDcsNiArNTQ0Nyw3IEBACiAJCUNFNTRGRDM4MTAxNkQ5QTYwMDhCNDRDOCAvKiBTY3JpcHRT
b3VyY2VQcm92aWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQ0U1NEZEMzcxMDE2RDlBNjAwOEI0NEM4IC8qIFNjcmlwdFNvdXJjZVByb3ZpZGVyLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQ0VBMzk0
OUMxMUQ0NUNEQTAwMzA5NENGIC8qIFN0YXRpY0hhc2hTZXROb2RlTGlzdC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRUEzOTQ5QTExRDQ1Q0RBMDAz
MDk0Q0YgLyogU3RhdGljSGFzaFNldE5vZGVMaXN0LmNwcCAqLzsgfTsKIAkJQ0VBMzk0OUQxMUQ0
NUNEQTAwMzA5NENGIC8qIFN0YXRpY0hhc2hTZXROb2RlTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0VBMzk0OUIxMUQ0NUNEQTAwMzA5NENGIC8q
IFN0YXRpY0hhc2hTZXROb2RlTGlzdC5oICovOyB9OworCQlDRUQzQ0IwODE0MTA0NkYxMDAyM0M2
NzkgLyogRGVjb2RlRXNjYXBlU2VxdWVuY2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDRUQzQ0IwNzE0MTA0NkYxMDAyM0M2NzkgLyogRGVjb2RlRXNj
YXBlU2VxdWVuY2VzLmggKi87IH07CiAJCUNFRjQxOENFMTE3OTY3OEMwMDlEMTEyQyAvKiBWaWV3
cG9ydEFyZ3VtZW50cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDRUY0MThDQzExNzk2NzhDMDA5RDExMkMgLyogVmlld3BvcnRBcmd1bWVudHMuY3Bw
ICovOyB9OwogCQlDRUY0MThDRjExNzk2NzhDMDA5RDExMkMgLyogVmlld3BvcnRBcmd1bWVudHMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENFRjQxOENE
MTE3OTY3OEMwMDlEMTEyQyAvKiBWaWV3cG9ydEFyZ3VtZW50cy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUQwMDBFQkEyMTFCREFGRDQwMEM0Nzcy
NiAvKiBGcmFtZUxvYWRlclN0YXRlTWFjaGluZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMDAwRUJBMDExQkRBRkQ0MDBDNDc3MjYgLyogRnJhbWVM
b2FkZXJTdGF0ZU1hY2hpbmUuY3BwICovOyB9OwpAQCAtMTIyMDMsNiArMTIyMDQsNyBAQAogCQlD
RTU0RkQzNzEwMTZEOUE2MDA4QjQ0QzggLyogU2NyaXB0U291cmNlUHJvdmlkZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0U291cmNlUHJvdmlkZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0VBMzk0OUExMUQ0NUNEQTAwMzA5NENGIC8qIFN0YXRp
Y0hhc2hTZXROb2RlTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBTdGF0aWNIYXNoU2V0Tm9kZUxpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlDRUEzOTQ5QjExRDQ1Q0RBMDAzMDk0Q0YgLyogU3RhdGljSGFzaFNldE5vZGVMaXN0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0YXRpY0hhc2hTZXROb2RlTGlzdC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDRUQzQ0IwNzE0MTA0NkYxMDAyM0M2NzkgLyog
RGVjb2RlRXNjYXBlU2VxdWVuY2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IERlY29kZUVzY2FwZVNlcXVlbmNlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlD
RUY0MThDQzExNzk2NzhDMDA5RDExMkMgLyogVmlld3BvcnRBcmd1bWVudHMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVmlld3BvcnRBcmd1bWVudHMuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRUY0MThDRDExNzk2NzhDMDA5RDExMkMgLyogVmll
d3BvcnRBcmd1bWVudHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmlld3Bv
cnRBcmd1bWVudHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDAwMEVCQTAxMUJE
QUZENDAwQzQ3NzI2IC8qIEZyYW1lTG9hZGVyU3RhdGVNYWNoaW5lLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZyYW1lTG9hZGVyU3RhdGVNYWNoaW5lLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE4Mzc2LDYgKzE4Mzc4LDcgQEAKIAkJCQlCMkMz
RDlGMzBEMDA2QzFEMDBFRjZGMjYgLyogQmlkaUNvbnRleHQuaCAqLywKIAkJCQlCMkMzRDlGNDBE
MDA2QzFEMDBFRjZGMjYgLyogQmlkaVJlc29sdmVyLmggKi8sCiAJCQkJQThDNDAyOTIxMzQ4QjIy
MjAwNjNGMUU1IC8qIEJpZGlSdW5MaXN0LmggKi8sCisJCQkJQ0VEM0NCMDcxNDEwNDZGMTAwMjND
Njc5IC8qIERlY29kZUVzY2FwZVNlcXVlbmNlcy5oICovLAogCQkJCTM3NUNEMjMxMTE5RDQzQzgw
MEEyQTg1OSAvKiBIeXBoZW5hdGlvbi5oICovLAogCQkJCUE1QUJCNzg2MTNCOTA0QkMwMEYxOTdF
MyAvKiBMaW5lQnJlYWtJdGVyYXRvclBvb2xJQ1UuaCAqLywKIAkJCQk4OUI1RUE5RjExRTgwMDNE
MDBGMjM2N0UgLyogTGluZUVuZGluZy5jcHAgKi8sCkBAIC0yMzQ2NCw2ICsyMzQ2Nyw3IEBACiAJ
CQkJQjEwQjY5ODAxNDBDMTc0MDAwQkMxQzI2IC8qIFdlYlZUVFRva2VuLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCMTBCNjk4MjE0MEMxNzQwMDBCQzFDMjYgLyogV2ViVlRUVG9rZW5pemVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQk5QjBGQjE5MjE0MERCNTc5MDAyMjU4OEYgLyogSFRUUFZhbGlkYXRp
b24uaCBpbiBIZWFkZXJzICovLAorCQkJCUNFRDNDQjA4MTQxMDQ2RjEwMDIzQzY3OSAvKiBEZWNv
ZGVFc2NhcGVTZXF1ZW5jZXMuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JE
ZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9wYXJzZXIvWFNTQXVkaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9wYXJzZXIvWFNTQXVkaXRvci5jcHAJKHJldmlzaW9uIDk0MjYxKQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9wYXJzZXIvWFNTQXVkaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYg
KzI4LDcgQEAKIAogI2luY2x1ZGUgIkNvbnNvbGUuaCIKICNpbmNsdWRlICJET01XaW5kb3cuaCIK
KyNpbmNsdWRlICJEZWNvZGVFc2NhcGVTZXF1ZW5jZXMuaCIKICNpbmNsdWRlICJEb2N1bWVudC5o
IgogI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKQEAgLTEx
NSw2ICsxMTYsMTEgQEAgc3RhdGljIGJvb2wgY29udGFpbnNKYXZhU2NyaXB0VVJMKGNvbnN0IAog
ICAgIHJldHVybiBlcXVhbElnbm9yaW5nQ2FzZSh2YWx1ZS5kYXRhKCkgKyBpLCBqYXZhU2NyaXB0
U2NoZW1lLCBsZW5ndGhPZkphdmFTY3JpcHRTY2hlbWUpOwogfQogCitzdGF0aWMgaW5saW5lIFN0
cmluZyBkZWNvZGVGYW5jeVVuaWNvZGVFc2NhcGVTZXF1ZW5jZXMoY29uc3QgU3RyaW5nJiBzdHJp
bmcpCit7CisgICAgcmV0dXJuIGRlY29kZUVzY2FwZVNlcXVlbmNlczxGYW5jeVVuaWNvZGVFc2Nh
cGVTZXF1ZW5jZT4oc3RyaW5nLCBVVEY4RW5jb2RpbmcoKSk7Cit9CisKIHN0YXRpYyBTdHJpbmcg
ZnVsbHlEZWNvZGVTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGNvbnN0IFRleHRSZXNvdXJj
ZURlY29kZXIqIGRlY29kZXIpCiB7CiAgICAgc2l6ZV90IG9sZFdvcmtpbmdTdHJpbmdMZW5ndGg7
CkBAIC0xMjMsNiArMTI5LDcgQEAgc3RhdGljIFN0cmluZyBmdWxseURlY29kZVN0cmluZyhjb25z
dCBTdAogICAgICAgICBvbGRXb3JraW5nU3RyaW5nTGVuZ3RoID0gd29ya2luZ1N0cmluZy5sZW5n
dGgoKTsKICAgICAgICAgd29ya2luZ1N0cmluZyA9IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyh3
b3JraW5nU3RyaW5nKTsKICAgICB9IHdoaWxlICh3b3JraW5nU3RyaW5nLmxlbmd0aCgpIDwgb2xk
V29ya2luZ1N0cmluZ0xlbmd0aCk7CisgICAgd29ya2luZ1N0cmluZyA9IGRlY29kZUZhbmN5VW5p
Y29kZUVzY2FwZVNlcXVlbmNlcyh3b3JraW5nU3RyaW5nKTsKICAgICBpZiAoZGVjb2Rlcikgewog
ICAgICAgICBDU3RyaW5nIHdvcmtpbmdTdHJpbmdVVEY4ID0gd29ya2luZ1N0cmluZy51dGY4KCk7
CiAgICAgICAgIFN0cmluZyBkZWNvZGVkU3RyaW5nID0gZGVjb2Rlci0+ZW5jb2RpbmcoKS5kZWNv
ZGUod29ya2luZ1N0cmluZ1VURjguZGF0YSgpLCB3b3JraW5nU3RyaW5nVVRGOC5sZW5ndGgoKSk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmNwcAkocmV2aXNpb24gOTQyNjEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYs
NyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIktVUkwuaCIKIAorI2luY2x1ZGUg
IkRlY29kZUVzY2FwZVNlcXVlbmNlcy5oIgogI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgogI2lu
Y2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTI1MCwxNCArMjUx
LDYgQEAgc3RhdGljIGlubGluZSBib29sIGlzU2NoZW1lQ2hhcmFjdGVyTWF0YwogICAgIHJldHVy
biAoY2hhcmFjdGVyIHwgMHgyMCkgPT0gc2NoZW1lQ2hhcmFjdGVyOwogfQogCi1zdGF0aWMgaW5s
aW5lIGludCBoZXhEaWdpdFZhbHVlKFVDaGFyIGMpCi17Ci0gICAgQVNTRVJUKGlzQVNDSUlIZXhE
aWdpdChjKSk7Ci0gICAgaWYgKGMgPCAnQScpCi0gICAgICAgIHJldHVybiBjIC0gJzAnOwotICAg
IHJldHVybiAoYyAtICdBJyArIDEwKSAmIDB4RjsgLy8gaGFuZGxlIGJvdGggdXBwZXIgYW5kIGxv
d2VyIGNhc2Ugd2l0aG91dCBhIGJyYW5jaAotfQotCiAvLyBDb3BpZXMgdGhlIHNvdXJjZSB0byB0
aGUgZGVzdGluYXRpb24sIGFzc3VtaW5nIGFsbCB0aGUgc291cmNlIGNoYXJhY3RlcnMgYXJlCiAv
LyBBU0NJSS4gVGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciBtdXN0IGJlIGxhcmdlIGVub3VnaC4gTnVs
bCBjaGFyYWN0ZXJzIGFyZSBhbGxvd2VkCiAvLyBpbiB0aGUgc291cmNlIHN0cmluZywgYW5kIG5v
IGF0dGVtcHQgaXMgbWFkZSB0byBudWxsLXRlcm1pbmF0ZSB0aGUgcmVzdWx0LgpAQCAtOTM0LDU3
ICs5MjcsMTIgQEAgU3RyaW5nIEtVUkw6OmRlcHJlY2F0ZWRTdHJpbmcoKSBjb25zdAogCiBTdHJp
bmcgZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKGNvbnN0IFN0cmluZyYgc3RyKQogewotICAgIHJl
dHVybiBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMoc3RyLCBVVEY4RW5jb2RpbmcoKSk7CisgICAg
cmV0dXJuIGRlY29kZUVzY2FwZVNlcXVlbmNlczxVUkxFc2NhcGVTZXF1ZW5jZT4oc3RyLCBVVEY4
RW5jb2RpbmcoKSk7CiB9CiAKIFN0cmluZyBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMoY29uc3Qg
U3RyaW5nJiBzdHIsIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcpCiB7Ci0gICAgVmVjdG9y
PFVDaGFyPiByZXN1bHQ7Ci0KLSAgICBDaGFyQnVmZmVyIGJ1ZmZlcjsKLQotICAgIHVuc2lnbmVk
IGxlbmd0aCA9IHN0ci5sZW5ndGgoKTsKLSAgICB1bnNpZ25lZCBkZWNvZGVkUG9zaXRpb24gPSAw
OwotICAgIHVuc2lnbmVkIHNlYXJjaFBvc2l0aW9uID0gMDsKLSAgICBzaXplX3QgZW5jb2RlZFJ1
blBvc2l0aW9uOwotICAgIHdoaWxlICgoZW5jb2RlZFJ1blBvc2l0aW9uID0gc3RyLmZpbmQoJyUn
LCBzZWFyY2hQb3NpdGlvbikpICE9IG5vdEZvdW5kKSB7Ci0gICAgICAgIC8vIEZpbmQgdGhlIHNl
cXVlbmNlIG9mICUtZXNjYXBlIGNvZGVzLgotICAgICAgICB1bnNpZ25lZCBlbmNvZGVkUnVuRW5k
ID0gZW5jb2RlZFJ1blBvc2l0aW9uOwotICAgICAgICB3aGlsZSAobGVuZ3RoIC0gZW5jb2RlZFJ1
bkVuZCA+PSAzCi0gICAgICAgICAgICAgICAgJiYgc3RyW2VuY29kZWRSdW5FbmRdID09ICclJwot
ICAgICAgICAgICAgICAgICYmIGlzQVNDSUlIZXhEaWdpdChzdHJbZW5jb2RlZFJ1bkVuZCArIDFd
KQotICAgICAgICAgICAgICAgICYmIGlzQVNDSUlIZXhEaWdpdChzdHJbZW5jb2RlZFJ1bkVuZCAr
IDJdKSkKLSAgICAgICAgICAgIGVuY29kZWRSdW5FbmQgKz0gMzsKLSAgICAgICAgc2VhcmNoUG9z
aXRpb24gPSBlbmNvZGVkUnVuRW5kOwotICAgICAgICBpZiAoZW5jb2RlZFJ1bkVuZCA9PSBlbmNv
ZGVkUnVuUG9zaXRpb24pIHsKLSAgICAgICAgICAgICsrc2VhcmNoUG9zaXRpb247Ci0gICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIERlY29kZSB0aGUgJS1lc2Nh
cGVzIGludG8gYnl0ZXMuCi0gICAgICAgIHVuc2lnbmVkIHJ1bkxlbmd0aCA9IChlbmNvZGVkUnVu
RW5kIC0gZW5jb2RlZFJ1blBvc2l0aW9uKSAvIDM7Ci0gICAgICAgIGJ1ZmZlci5yZXNpemUocnVu
TGVuZ3RoKTsKLSAgICAgICAgY2hhciogcCA9IGJ1ZmZlci5kYXRhKCk7Ci0gICAgICAgIGNvbnN0
IFVDaGFyKiBxID0gc3RyLmNoYXJhY3RlcnMoKSArIGVuY29kZWRSdW5Qb3NpdGlvbjsKLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJ1bkxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAg
ICAqcCsrID0gKGhleERpZ2l0VmFsdWUocVsxXSkgPDwgNCkgfCBoZXhEaWdpdFZhbHVlKHFbMl0p
OwotICAgICAgICAgICAgcSArPSAzOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gRGVjb2RlIHRo
ZSBieXRlcyBpbnRvIFVuaWNvZGUgY2hhcmFjdGVycy4KLSAgICAgICAgU3RyaW5nIGRlY29kZWQg
PSAoZW5jb2RpbmcuaXNWYWxpZCgpID8gZW5jb2RpbmcgOiBVVEY4RW5jb2RpbmcoKSkuZGVjb2Rl
KGJ1ZmZlci5kYXRhKCksIHAgLSBidWZmZXIuZGF0YSgpKTsKLSAgICAgICAgaWYgKGRlY29kZWQu
aXNFbXB0eSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgLy8gQnVpbGQgdXAg
dGhlIHN0cmluZyB3aXRoIHdoYXQgd2UganVzdCBza2lwcGVkIGFuZCB3aGF0IHdlIGp1c3QgZGVj
b2RlZC4KLSAgICAgICAgcmVzdWx0LmFwcGVuZChzdHIuY2hhcmFjdGVycygpICsgZGVjb2RlZFBv
c2l0aW9uLCBlbmNvZGVkUnVuUG9zaXRpb24gLSBkZWNvZGVkUG9zaXRpb24pOwotICAgICAgICBy
ZXN1bHQuYXBwZW5kKGRlY29kZWQuY2hhcmFjdGVycygpLCBkZWNvZGVkLmxlbmd0aCgpKTsKLSAg
ICAgICAgZGVjb2RlZFBvc2l0aW9uID0gZW5jb2RlZFJ1bkVuZDsKLSAgICB9Ci0KLSAgICByZXN1
bHQuYXBwZW5kKHN0ci5jaGFyYWN0ZXJzKCkgKyBkZWNvZGVkUG9zaXRpb24sIGxlbmd0aCAtIGRl
Y29kZWRQb3NpdGlvbik7Ci0KLSAgICByZXR1cm4gU3RyaW5nOjphZG9wdChyZXN1bHQpOworICAg
IHJldHVybiBkZWNvZGVFc2NhcGVTZXF1ZW5jZXM8VVJMRXNjYXBlU2VxdWVuY2U+KHN0ciwgZW5j
b2RpbmcpOwogfQogCiAvLyBDYXV0aW9uOiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGJvdW5kcyBj
aGVjay4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvRGVjb2RlRXNjYXBlU2Vx
dWVuY2VzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9EZWNv
ZGVFc2NhcGVTZXF1ZW5jZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvRGVjb2RlRXNjYXBlU2VxdWVuY2VzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MTI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIERhbmllbCBCYXRlcyAoZGJhdGVzQGlu
dHVhdGEuY29tKS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBEZWNvZGVFc2NhcGVTZXF1ZW5jZXNfaAorI2Rl
ZmluZSBEZWNvZGVFc2NhcGVTZXF1ZW5jZXNfaAorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcu
aCIKKyNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKKyNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5o
PgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
dHlwZWRlZiBWZWN0b3I8Y2hhciwgNTEyPiBDaGFyQnVmZmVyOworCitzdGF0aWMgaW5saW5lIGlu
dCBoZXhEaWdpdFZhbHVlKFVDaGFyIGMpCit7CisgICAgQVNTRVJUKGlzQVNDSUlIZXhEaWdpdChj
KSk7CisgICAgaWYgKGMgPCAnQScpCisgICAgICAgIHJldHVybiBjIC0gJzAnOworICAgIHJldHVy
biAoYyAtICdBJyArIDEwKSAmIDB4RjsgLy8gaGFuZGxlIGJvdGggdXBwZXIgYW5kIGxvd2VyIGNh
c2Ugd2l0aG91dCBhIGJyYW5jaAorfQorCitzdHJ1Y3QgRmFuY3lVbmljb2RlRXNjYXBlU2VxdWVu
Y2UgeworICAgIGVudW0geyBzaXplID0gNiB9OyAvLyBlLmcuICV1MDA0MQorICAgIHN0YXRpYyBz
aXplX3QgZmluZEluU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyLCB1bnNpZ25lZCBzdGFydCA9IDAp
IHsgcmV0dXJuIHN0ci5maW5kKCIldSIsIHN0YXJ0KTsgfQorICAgIHN0YXRpYyBib29sIG1hdGNo
U3RyaW5nUHJlZml4KGNvbnN0IFN0cmluZyYgc3RyLCB1bnNpZ25lZCBzdGFydCA9IDApCisgICAg
eworICAgICAgICBpZiAoc3RyLmxlbmd0aCgpIC0gc3RhcnQgPCBzaXplKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gc3RyW3N0YXJ0XSA9PSAnJScgJiYgc3RyW3N0
YXJ0ICsgMV0gPT0gJ3UnICYmIFdURjo6aXNBU0NJSUhleERpZ2l0KHN0cltzdGFydCArIDJdKQor
ICAgICAgICAgICAgJiYgV1RGOjppc0FTQ0lJSGV4RGlnaXQoc3RyW3N0YXJ0ICsgM10pICYmIFdU
Rjo6aXNBU0NJSUhleERpZ2l0KHN0cltzdGFydCArIDRdKSAmJiBXVEY6OmlzQVNDSUlIZXhEaWdp
dChzdHJbc3RhcnQgKyA1XSk7CisgICAgfQorICAgIHN0YXRpYyBzaXplX3QgcGxhY2VEZWNvZGVk
UnVuSW5CdWZmZXIoQ2hhckJ1ZmZlciYgZGVzdGluYXRpb24sIGNvbnN0IFVDaGFyKiBydW4sIHNp
emVfdCBydW5MZW5ndGgpCisgICAgeworICAgICAgICB1bnNpZ25lZCBudW1TZXF1ZW5jZXMgPSBy
dW5MZW5ndGggLyBzaXplOworICAgICAgICBkZXN0aW5hdGlvbi5yZXNpemUobnVtU2VxdWVuY2Vz
KTsKKyAgICAgICAgY2hhciogcCA9IGRlc3RpbmF0aW9uLmRhdGEoKTsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG51bVNlcXVlbmNlczsgKytpKSB7CisgICAgICAgICAgICAqcCsr
ID0gKGhleERpZ2l0VmFsdWUocnVuWzJdKSA8PCAxMikgfCAoaGV4RGlnaXRWYWx1ZShydW5bM10p
IDw8IDgpIHwgKGhleERpZ2l0VmFsdWUocnVuWzRdKSA8PCA0KSB8IGhleERpZ2l0VmFsdWUocnVu
WzVdKTsKKyAgICAgICAgICAgIHJ1biArPSBzaXplOworICAgICAgICB9CisgICAgICAgIHJldHVy
biBwIC0gZGVzdGluYXRpb24uZGF0YSgpOworICAgIH0KK307CisKK3N0cnVjdCBVUkxFc2NhcGVT
ZXF1ZW5jZSB7CisgICAgZW51bSB7IHNpemUgPSAzIH07IC8vIGUuZy4gJTQxCisgICAgc3RhdGlj
IHNpemVfdCBmaW5kSW5TdHJpbmcoY29uc3QgU3RyaW5nJiBzdHIsIHVuc2lnbmVkIHN0YXJ0ID0g
MCkgeyByZXR1cm4gc3RyLmZpbmQoJyUnLCBzdGFydCk7IH0KKyAgICBzdGF0aWMgYm9vbCBtYXRj
aFN0cmluZ1ByZWZpeChjb25zdCBTdHJpbmcmIHN0ciwgdW5zaWduZWQgc3RhcnQgPSAwKQorICAg
IHsKKyAgICAgICAgaWYgKHN0ci5sZW5ndGgoKSAtIHN0YXJ0IDwgc2l6ZSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHN0cltzdGFydF0gPT0gJyUnICYmIFdURjo6
aXNBU0NJSUhleERpZ2l0KHN0cltzdGFydCArIDFdKSAmJiBXVEY6OmlzQVNDSUlIZXhEaWdpdChz
dHJbc3RhcnQgKyAyXSk7CisgICAgfQorICAgIHN0YXRpYyBzaXplX3QgcGxhY2VEZWNvZGVkUnVu
SW5CdWZmZXIoQ2hhckJ1ZmZlciYgZGVzdGluYXRpb24sIGNvbnN0IFVDaGFyKiBydW4sIHNpemVf
dCBydW5MZW5ndGgpCisgICAgeworICAgICAgICB1bnNpZ25lZCBudW1TZXF1ZW5jZXMgPSBydW5M
ZW5ndGggLyBzaXplOworICAgICAgICBkZXN0aW5hdGlvbi5yZXNpemUobnVtU2VxdWVuY2VzKTsK
KyAgICAgICAgY2hhciogcCA9IGRlc3RpbmF0aW9uLmRhdGEoKTsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG51bVNlcXVlbmNlczsgKytpKSB7CisgICAgICAgICAgICAqcCsrID0g
KGhleERpZ2l0VmFsdWUocnVuWzFdKSA8PCA0KSB8IGhleERpZ2l0VmFsdWUocnVuWzJdKTsKKyAg
ICAgICAgICAgIHJ1biArPSBzaXplOworICAgICAgICB9CisgICAgICAgIHJldHVybiBwIC0gZGVz
dGluYXRpb24uZGF0YSgpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEVzY2FwZVNl
cXVlbmNlPgorU3RyaW5nIGRlY29kZUVzY2FwZVNlcXVlbmNlcyhjb25zdCBTdHJpbmcmIHN0ciwg
Y29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZykKK3sKKyAgICBWZWN0b3I8VUNoYXI+IHJlc3Vs
dDsKKyAgICBDaGFyQnVmZmVyIGJ1ZmZlcjsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHIubGVu
Z3RoKCk7CisgICAgdW5zaWduZWQgZGVjb2RlZFBvc2l0aW9uID0gMDsKKyAgICB1bnNpZ25lZCBz
ZWFyY2hQb3NpdGlvbiA9IDA7CisgICAgc2l6ZV90IGVuY29kZWRSdW5Qb3NpdGlvbjsKKworICAg
IHdoaWxlICgoZW5jb2RlZFJ1blBvc2l0aW9uID0gRXNjYXBlU2VxdWVuY2U6OmZpbmRJblN0cmlu
ZyhzdHIsIHNlYXJjaFBvc2l0aW9uKSkgIT0gbm90Rm91bmQpIHsKKyAgICAgICAgdW5zaWduZWQg
ZW5jb2RlZFJ1bkVuZCA9IGVuY29kZWRSdW5Qb3NpdGlvbjsKKyAgICAgICAgd2hpbGUgKGxlbmd0
aCAtIGVuY29kZWRSdW5FbmQgPj0gRXNjYXBlU2VxdWVuY2U6OnNpemUgJiYgRXNjYXBlU2VxdWVu
Y2U6Om1hdGNoU3RyaW5nUHJlZml4KHN0ciwgZW5jb2RlZFJ1bkVuZCkpCisgICAgICAgICAgICBl
bmNvZGVkUnVuRW5kICs9IEVzY2FwZVNlcXVlbmNlOjpzaXplOworICAgICAgICBzZWFyY2hQb3Np
dGlvbiA9IGVuY29kZWRSdW5FbmQ7CisgICAgICAgIGlmIChlbmNvZGVkUnVuRW5kID09IGVuY29k
ZWRSdW5Qb3NpdGlvbikgeworICAgICAgICAgICAgKytzZWFyY2hQb3NpdGlvbjsKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgc2l6ZV90IG51bUJ5dGVzV3JpdHRl
biA9IEVzY2FwZVNlcXVlbmNlOjpwbGFjZURlY29kZWRSdW5JbkJ1ZmZlcihidWZmZXIsIHN0ci5j
aGFyYWN0ZXJzKCkgKyBlbmNvZGVkUnVuUG9zaXRpb24sIGVuY29kZWRSdW5FbmQgLSBlbmNvZGVk
UnVuUG9zaXRpb24pOworICAgICAgICBTdHJpbmcgZGVjb2RlZCA9IChlbmNvZGluZy5pc1ZhbGlk
KCkgPyBlbmNvZGluZyA6IFVURjhFbmNvZGluZygpKS5kZWNvZGUoYnVmZmVyLmRhdGEoKSwgbnVt
Qnl0ZXNXcml0dGVuKTsKKyAgICAgICAgaWYgKGRlY29kZWQuaXNFbXB0eSgpKQorICAgICAgICAg
ICAgY29udGludWU7CisKKyAgICAgICAgcmVzdWx0LmFwcGVuZChzdHIuY2hhcmFjdGVycygpICsg
ZGVjb2RlZFBvc2l0aW9uLCBlbmNvZGVkUnVuUG9zaXRpb24gLSBkZWNvZGVkUG9zaXRpb24pOwor
ICAgICAgICByZXN1bHQuYXBwZW5kKGRlY29kZWQuY2hhcmFjdGVycygpLCBkZWNvZGVkLmxlbmd0
aCgpKTsKKyAgICAgICAgZGVjb2RlZFBvc2l0aW9uID0gZW5jb2RlZFJ1bkVuZDsKKyAgICB9Cisg
ICAgcmVzdWx0LmFwcGVuZChzdHIuY2hhcmFjdGVycygpICsgZGVjb2RlZFBvc2l0aW9uLCBsZW5n
dGggLSBkZWNvZGVkUG9zaXRpb24pOworICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KHJlc3VsdCk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIERlY29kZUVzY2FwZVNl
cXVlbmNlc19oCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0
b3Ivc2NyaXB0LXRhZy13aXRoLWZhbmN5LXVuaWNvZGUyLWV4cGVjdGVkLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRh
Zy13aXRoLWZhbmN5LXVuaWNvZGUyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLXdpdGgtZmFu
Y3ktdW5pY29kZTItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMgQEAKK0NP
TlNPTEUgTUVTU0FHRTogbGluZSAxOiBSZWZ1c2VkIHRvIGV4ZWN1dGUgYSBKYXZhU2NyaXB0IHNj
cmlwdC4gU291cmNlIGNvZGUgb2Ygc2NyaXB0IGZvdW5kIHdpdGhpbiByZXF1ZXN0LgorCisKSW5k
ZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFn
LXdpdGgtZmFuY3ktdW5pY29kZTIuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy13aXRoLWZhbmN5LXVuaWNvZGUy
Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hz
c0F1ZGl0b3Ivc2NyaXB0LXRhZy13aXRoLWZhbmN5LXVuaWNvZGUyLmh0bWwJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTUgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3Jp
cHQ+CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgIGxheW91dFRlc3RDb250
cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgbGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0WFNTQXVkaXRv
ckVuYWJsZWQodHJ1ZSk7Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGlmcmFtZSBz
cmM9Imh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC9zZWN1cml0eS94c3NBdWRpdG9yL3Jlc291cmNlcy9l
Y2hvLWludGVydGFnLWRlY29kZS1wZXJjZW50LXVuaWNvZGUucGw/cT0lMjV1MDAzYyUyNXUwMDcz
JTI1dTAwNjMlMjV1MDA3MiUyNXUwMDY5JTI1dTAwNzAlMjV1MDA3NCUyNXUwMDNlJTI1dTAwNjEl
MjV1MDA2YyUyNXUwMDY1JTI1dTAwNzIlMjV1MDA3NCUyNXUwMDI4JTI1dTAwMmYlMjV1MDA1OCUy
NXUwMDUzJTI1dTAwNTMlMjV1MDAyZiUyNXUwMDI5JTI1dTAwM2MlMjV1MDAyZiUyNXUwMDczJTI1
dTAwNjMlMjV1MDA3MiUyNXUwMDY5JTI1dTAwNzAlMjV1MDA3NCUyNXUwMDNlIj4KKzwvaWZyYW1l
PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0
eS94c3NBdWRpdG9yL3NjcmlwdC10YWctd2l0aC1mYW5jeS11bmljb2RlLWV4cGVjdGVkLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Iv
c2NyaXB0LXRhZy13aXRoLWZhbmN5LXVuaWNvZGUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA5NDI2
MSkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQt
dGFnLXdpdGgtZmFuY3ktdW5pY29kZS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEs
MiArMSwzIEBACi1BTEVSVDogL1hTUy8KK0NPTlNPTEUgTUVTU0FHRTogbGluZSAxOiBSZWZ1c2Vk
IHRvIGV4ZWN1dGUgYSBKYXZhU2NyaXB0IHNjcmlwdC4gU291cmNlIGNvZGUgb2Ygc2NyaXB0IGZv
dW5kIHdpdGhpbiByZXF1ZXN0LgorCiAKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2Vj
dXJpdHkveHNzQXVkaXRvci9yZXNvdXJjZXMvZWNoby1pbnRlcnRhZy1kZWNvZGUtZmFuY3ktdW5p
Y29kZS5wbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hz
c0F1ZGl0b3IvcmVzb3VyY2VzL2VjaG8taW50ZXJ0YWctZGVjb2RlLWZhbmN5LXVuaWNvZGUucGwJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0
b3IvcmVzb3VyY2VzL2VjaG8taW50ZXJ0YWctZGVjb2RlLWZhbmN5LXVuaWNvZGUucGwJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMjIgQEAKKyMhL3Vzci9iaW4vcGVybCAtd1QKK3VzZSBzdHJpY3Q7
Cit1c2UgQ0dJOworCitteSAkY2dpID0gbmV3IENHSTsKKworIyBTZWUgPGh0dHA6Ly9lbi53aWtp
cGVkaWEub3JnL3dpa2kvUGVyY2VudC1lbmNvZGluZyNOb24tc3RhbmRhcmRfaW1wbGVtZW50YXRp
b25zPi4KK3N1YiBkZWNvZGVGYW5jeVVuaWNvZGVFc2NhcGVTZXF1ZW5jZXMKK3sKKyAgICBteSAo
JHN0cikgPSBAXzsKKyAgICAkc3RyID1+IHMvJXUoWzAtOUEtWmEtel17MSw0fSkvQHtbY2hyKGhl
eCgiMHgkMSIpKV19L2c7ICMgY2hyKCkgc3VwcG9ydHMgVW5pY29kZS4KKyAgICByZXR1cm4gJHN0
cjsKK30KKworcHJpbnQgIkNvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PVVURi04XG5c
biI7CisKK3ByaW50ICI8IURPQ1RZUEUgaHRtbD5cbiI7CitwcmludCAiPGh0bWw+XG4iOworcHJp
bnQgIjxib2R5PlxuIjsKK3ByaW50IGRlY29kZUZhbmN5VW5pY29kZUVzY2FwZVNlcXVlbmNlcygk
Y2dpLT5wYXJhbSgncScpKTsKK3ByaW50ICI8L2JvZHk+XG4iOworcHJpbnQgIjwvaHRtbD5cbiI7
CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hz
c0F1ZGl0b3IvcmVzb3VyY2VzL2VjaG8taW50ZXJ0YWctZGVjb2RlLWZhbmN5LXVuaWNvZGUucGwK
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106279</attachid>
            <date>2011-09-03 22:32:54 -0700</date>
            <delta_ts>2011-09-04 16:37:33 -0700</delta_ts>
            <desc>Patch and layout tests</desc>
            <filename>Bug66588_5.patch</filename>
            <type>text/plain</type>
            <size>24656</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gOTQyNjEpCisrKyBT
b3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC0yODEz
LDYgKzI4MTMsNyBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvQmlkaUNvbnRleHQuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9C
aWRpUmVzb2x2ZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpUnVuTGlz
dC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0RlY29kZUVzY2FwZVNlcXVlbmNl
cy5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0h5cGhlbmF0aW9uLmNwcCBcCiAJ
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9IeXBoZW5hdGlvbi5oIFwKIAlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L0xpbmVCcmVha0l0ZXJhdG9yUG9vbElDVS5oIFwKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkJKHJldmlzaW9uIDk0MjYxKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCSh3b3JraW5nIGNvcHkpCkBAIC04NDgsNiArODQ4LDcgQEAKICAgICAgICAgICAgICdwbGF0
Zm9ybS90ZXh0L0JpZGlSdW5MaXN0LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL3RleHQvQmlk
aUNvbnRleHQuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vdGV4dC9CaWRpUmVzb2x2ZXIuaCcs
CisgICAgICAgICAgICAncGxhdGZvcm0vdGV4dC9EZWNvZGVFc2NhcGVTZXF1ZW5jZXMuaCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vdGV4dC9MaW5lQnJlYWtJdGVyYXRvclBvb2xJQ1UuaCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vdGV4dC9MaW5lRW5kaW5nLmgnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL3RleHQvUGxhdGZvcm1TdHJpbmcuaCcsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwkocmV2aXNp
b24gOTQyNjEpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpA
QCAtMjEwMiw2ICsyMTAyLDcgQEAgSEVBREVSUyArPSBcCiAgICAgcGxhdGZvcm0vc3FsL1NRTFZh
bHVlLmggXAogICAgIHBsYXRmb3JtL3RleHQvQmFzZTY0LmggXAogICAgIHBsYXRmb3JtL3RleHQv
QmlkaUNvbnRleHQuaCBcCisgICAgcGxhdGZvcm0vdGV4dC9EZWNvZGVFc2NhcGVTZXF1ZW5jZXMu
aCBcCiAgICAgcGxhdGZvcm0vdGV4dC9IeXBoZW5hdGlvbi5oIFwKICAgICBwbGF0Zm9ybS90ZXh0
L1F1b3RlZFByaW50YWJsZS5oIFwKICAgICBwbGF0Zm9ybS90ZXh0L3F0L1RleHRDb2RlY1F0Lmgg
XApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJ
KHJldmlzaW9uIDk0MjYxKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTMxNjA1LDYgKzMxNjA1LDEwIEBACiAJCQkJCT4K
IAkJCQk8L0ZpbGU+CiAJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVx0
ZXh0XERlY29kZUVzY2FwZVNlcXVlbmNlcy5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxG
aWxlCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cdGV4dFxIeXBoZW5hdGlvbi5oIgog
CQkJCQk+CiAJCQkJPC9GaWxlPgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gOTQyNjEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTU0NDcsNiArNTQ0Nyw3IEBACiAJCUNFNTRGRDM4MTAxNkQ5QTYwMDhCNDRDOCAvKiBTY3JpcHRT
b3VyY2VQcm92aWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQ0U1NEZEMzcxMDE2RDlBNjAwOEI0NEM4IC8qIFNjcmlwdFNvdXJjZVByb3ZpZGVyLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQ0VBMzk0
OUMxMUQ0NUNEQTAwMzA5NENGIC8qIFN0YXRpY0hhc2hTZXROb2RlTGlzdC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRUEzOTQ5QTExRDQ1Q0RBMDAz
MDk0Q0YgLyogU3RhdGljSGFzaFNldE5vZGVMaXN0LmNwcCAqLzsgfTsKIAkJQ0VBMzk0OUQxMUQ0
NUNEQTAwMzA5NENGIC8qIFN0YXRpY0hhc2hTZXROb2RlTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0VBMzk0OUIxMUQ0NUNEQTAwMzA5NENGIC8q
IFN0YXRpY0hhc2hTZXROb2RlTGlzdC5oICovOyB9OworCQlDRUQzQ0IwODE0MTA0NkYxMDAyM0M2
NzkgLyogRGVjb2RlRXNjYXBlU2VxdWVuY2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDRUQzQ0IwNzE0MTA0NkYxMDAyM0M2NzkgLyogRGVjb2RlRXNj
YXBlU2VxdWVuY2VzLmggKi87IH07CiAJCUNFRjQxOENFMTE3OTY3OEMwMDlEMTEyQyAvKiBWaWV3
cG9ydEFyZ3VtZW50cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDRUY0MThDQzExNzk2NzhDMDA5RDExMkMgLyogVmlld3BvcnRBcmd1bWVudHMuY3Bw
ICovOyB9OwogCQlDRUY0MThDRjExNzk2NzhDMDA5RDExMkMgLyogVmlld3BvcnRBcmd1bWVudHMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENFRjQxOENE
MTE3OTY3OEMwMDlEMTEyQyAvKiBWaWV3cG9ydEFyZ3VtZW50cy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUQwMDBFQkEyMTFCREFGRDQwMEM0Nzcy
NiAvKiBGcmFtZUxvYWRlclN0YXRlTWFjaGluZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMDAwRUJBMDExQkRBRkQ0MDBDNDc3MjYgLyogRnJhbWVM
b2FkZXJTdGF0ZU1hY2hpbmUuY3BwICovOyB9OwpAQCAtMTIyMDMsNiArMTIyMDQsNyBAQAogCQlD
RTU0RkQzNzEwMTZEOUE2MDA4QjQ0QzggLyogU2NyaXB0U291cmNlUHJvdmlkZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0U291cmNlUHJvdmlkZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0VBMzk0OUExMUQ0NUNEQTAwMzA5NENGIC8qIFN0YXRp
Y0hhc2hTZXROb2RlTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBTdGF0aWNIYXNoU2V0Tm9kZUxpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlDRUEzOTQ5QjExRDQ1Q0RBMDAzMDk0Q0YgLyogU3RhdGljSGFzaFNldE5vZGVMaXN0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0YXRpY0hhc2hTZXROb2RlTGlzdC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDRUQzQ0IwNzE0MTA0NkYxMDAyM0M2NzkgLyog
RGVjb2RlRXNjYXBlU2VxdWVuY2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IERlY29kZUVzY2FwZVNlcXVlbmNlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlD
RUY0MThDQzExNzk2NzhDMDA5RDExMkMgLyogVmlld3BvcnRBcmd1bWVudHMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVmlld3BvcnRBcmd1bWVudHMuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRUY0MThDRDExNzk2NzhDMDA5RDExMkMgLyogVmll
d3BvcnRBcmd1bWVudHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmlld3Bv
cnRBcmd1bWVudHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDAwMEVCQTAxMUJE
QUZENDAwQzQ3NzI2IC8qIEZyYW1lTG9hZGVyU3RhdGVNYWNoaW5lLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZyYW1lTG9hZGVyU3RhdGVNYWNoaW5lLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE4Mzc2LDYgKzE4Mzc4LDcgQEAKIAkJCQlCMkMz
RDlGMzBEMDA2QzFEMDBFRjZGMjYgLyogQmlkaUNvbnRleHQuaCAqLywKIAkJCQlCMkMzRDlGNDBE
MDA2QzFEMDBFRjZGMjYgLyogQmlkaVJlc29sdmVyLmggKi8sCiAJCQkJQThDNDAyOTIxMzQ4QjIy
MjAwNjNGMUU1IC8qIEJpZGlSdW5MaXN0LmggKi8sCisJCQkJQ0VEM0NCMDcxNDEwNDZGMTAwMjND
Njc5IC8qIERlY29kZUVzY2FwZVNlcXVlbmNlcy5oICovLAogCQkJCTM3NUNEMjMxMTE5RDQzQzgw
MEEyQTg1OSAvKiBIeXBoZW5hdGlvbi5oICovLAogCQkJCUE1QUJCNzg2MTNCOTA0QkMwMEYxOTdF
MyAvKiBMaW5lQnJlYWtJdGVyYXRvclBvb2xJQ1UuaCAqLywKIAkJCQk4OUI1RUE5RjExRTgwMDNE
MDBGMjM2N0UgLyogTGluZUVuZGluZy5jcHAgKi8sCkBAIC0yMzQ2NCw2ICsyMzQ2Nyw3IEBACiAJ
CQkJQjEwQjY5ODAxNDBDMTc0MDAwQkMxQzI2IC8qIFdlYlZUVFRva2VuLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCMTBCNjk4MjE0MEMxNzQwMDBCQzFDMjYgLyogV2ViVlRUVG9rZW5pemVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQk5QjBGQjE5MjE0MERCNTc5MDAyMjU4OEYgLyogSFRUUFZhbGlkYXRp
b24uaCBpbiBIZWFkZXJzICovLAorCQkJCUNFRDNDQjA4MTQxMDQ2RjEwMDIzQzY3OSAvKiBEZWNv
ZGVFc2NhcGVTZXF1ZW5jZXMuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JE
ZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9wYXJzZXIvWFNTQXVkaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9wYXJzZXIvWFNTQXVkaXRvci5jcHAJKHJldmlzaW9uIDk0MjYxKQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9wYXJzZXIvWFNTQXVkaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDExIEFkYW0gQmFydGguIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgRGFuaWVsIEJhdGVzIChkYmF0ZXNAaW50
dWRhdGEuY29tKS4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsNiArMjks
NyBAQAogCiAjaW5jbHVkZSAiQ29uc29sZS5oIgogI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgorI2lu
Y2x1ZGUgIkRlY29kZUVzY2FwZVNlcXVlbmNlcy5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAj
aW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgpAQCAtMTE1LDIw
ICsxMTcsMjkgQEAgc3RhdGljIGJvb2wgY29udGFpbnNKYXZhU2NyaXB0VVJMKGNvbnN0IAogICAg
IHJldHVybiBlcXVhbElnbm9yaW5nQ2FzZSh2YWx1ZS5kYXRhKCkgKyBpLCBqYXZhU2NyaXB0U2No
ZW1lLCBsZW5ndGhPZkphdmFTY3JpcHRTY2hlbWUpOwogfQogCitzdGF0aWMgaW5saW5lIFN0cmlu
ZyBkZWNvZGUxNkJpdFVuaWNvZGVFc2NhcGVTZXF1ZW5jZXMoY29uc3QgU3RyaW5nJiBzdHJpbmcp
Cit7CisgICAgcmV0dXJuIGRlY29kZUVzY2FwZVNlcXVlbmNlczxVbmljb2RlMTZCaXRFc2NhcGVT
ZXF1ZW5jZT4oc3RyaW5nLCBVVEY4RW5jb2RpbmcoKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgU3Ry
aW5nIGNvbW1vbkRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyhjb25zdCBTdHJpbmcmIHN0cmluZywg
Y29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZykKK3sKKyAgICAvLyBXZSB1c2UgZGVjb2RlRXNj
YXBlU2VxdWVuY2VzKCkgdG8gYXZvaWQgZGlmZmVyZW5jZXMgaW4gVVJMIGRlY29kaW5nIGJldHdl
ZW4gS1VSTAorICAgIC8vIGFuZCBLVVJMR29vZ2xlIGltcGxlbWVudGF0aW9ucy4KKyAgICByZXR1
cm4gZGVjb2RlRXNjYXBlU2VxdWVuY2VzPFVSTEVzY2FwZVNlcXVlbmNlPihzdHJpbmcsIGVuY29k
aW5nKTsKK30KKwogc3RhdGljIFN0cmluZyBmdWxseURlY29kZVN0cmluZyhjb25zdCBTdHJpbmcm
IHN0cmluZywgY29uc3QgVGV4dFJlc291cmNlRGVjb2RlciogZGVjb2RlcikKIHsKKyAgICBjb25z
dCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nID0gZGVjb2RlciA/IGRlY29kZXItPmVuY29kaW5nKCkg
OiBVVEY4RW5jb2RpbmcoKTsKICAgICBzaXplX3Qgb2xkV29ya2luZ1N0cmluZ0xlbmd0aDsKICAg
ICBTdHJpbmcgd29ya2luZ1N0cmluZyA9IHN0cmluZzsKICAgICBkbyB7CiAgICAgICAgIG9sZFdv
cmtpbmdTdHJpbmdMZW5ndGggPSB3b3JraW5nU3RyaW5nLmxlbmd0aCgpOwotICAgICAgICB3b3Jr
aW5nU3RyaW5nID0gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKHdvcmtpbmdTdHJpbmcpOworICAg
ICAgICB3b3JraW5nU3RyaW5nID0gY29tbW9uRGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKHdvcmtp
bmdTdHJpbmcsIGVuY29kaW5nKTsKICAgICB9IHdoaWxlICh3b3JraW5nU3RyaW5nLmxlbmd0aCgp
IDwgb2xkV29ya2luZ1N0cmluZ0xlbmd0aCk7Ci0gICAgaWYgKGRlY29kZXIpIHsKLSAgICAgICAg
Q1N0cmluZyB3b3JraW5nU3RyaW5nVVRGOCA9IHdvcmtpbmdTdHJpbmcudXRmOCgpOwotICAgICAg
ICBTdHJpbmcgZGVjb2RlZFN0cmluZyA9IGRlY29kZXItPmVuY29kaW5nKCkuZGVjb2RlKHdvcmtp
bmdTdHJpbmdVVEY4LmRhdGEoKSwgd29ya2luZ1N0cmluZ1VURjgubGVuZ3RoKCkpOwotICAgICAg
ICBpZiAoIWRlY29kZWRTdHJpbmcuaXNFbXB0eSgpKQotICAgICAgICAgICAgd29ya2luZ1N0cmlu
ZyA9IGRlY29kZWRTdHJpbmc7Ci0gICAgfQorICAgIHdvcmtpbmdTdHJpbmcgPSBkZWNvZGUxNkJp
dFVuaWNvZGVFc2NhcGVTZXF1ZW5jZXMod29ya2luZ1N0cmluZyk7CisgICAgQVNTRVJUKCF3b3Jr
aW5nU3RyaW5nLmlzRW1wdHkoKSk7CiAgICAgd29ya2luZ1N0cmluZy5yZXBsYWNlKCcrJywgJyAn
KTsKICAgICB3b3JraW5nU3RyaW5nID0gY2Fub25pY2FsaXplKHdvcmtpbmdTdHJpbmcpOwogICAg
IHJldHVybiB3b3JraW5nU3RyaW5nOwpAQCAtMTY5LDYgKzE4MCwxMyBAQCB2b2lkIFhTU0F1ZGl0
b3I6OmluaXQoKQogCiAgICAgY29uc3QgS1VSTCYgdXJsID0gbV9wYXJzZXItPmRvY3VtZW50KCkt
PnVybCgpOwogCisgICAgaWYgKHVybC5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gVGhlIFVSTCBj
YW4gYmUgZW1wdHkgd2hlbiBvcGVuaW5nIGEgbmV3IGJyb3dzZXIgd2luZG93IG9yIGNhbGxpbmcg
d2luZG93Lm9wZW4oIiIpCisgICAgICAgIC8vIChub3RpY2UsIHRoZSBmaXJzdCBhcmdtZW50IG9m
IHdpbmRvdy5vcGVuKCkgaXMgaW50ZW50aW9uYWxseSB0aGUgZW1wdHkgc3RyaW5nKS4KKyAgICAg
ICAgbV9pc0VuYWJsZWQgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGlm
ICh1cmwucHJvdG9jb2xJc0RhdGEoKSkgewogICAgICAgICBtX2lzRW5hYmxlZCA9IGZhbHNlOwog
ICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmNwcAkocmV2aXNpb24g
OTQyNjEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIktVUkwu
aCIKIAorI2luY2x1ZGUgIkRlY29kZUVzY2FwZVNlcXVlbmNlcy5oIgogI2luY2x1ZGUgIlRleHRF
bmNvZGluZy5oIgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
QEAgLTI1MCwxNCArMjUxLDYgQEAgc3RhdGljIGlubGluZSBib29sIGlzU2NoZW1lQ2hhcmFjdGVy
TWF0YwogICAgIHJldHVybiAoY2hhcmFjdGVyIHwgMHgyMCkgPT0gc2NoZW1lQ2hhcmFjdGVyOwog
fQogCi1zdGF0aWMgaW5saW5lIGludCBoZXhEaWdpdFZhbHVlKFVDaGFyIGMpCi17Ci0gICAgQVNT
RVJUKGlzQVNDSUlIZXhEaWdpdChjKSk7Ci0gICAgaWYgKGMgPCAnQScpCi0gICAgICAgIHJldHVy
biBjIC0gJzAnOwotICAgIHJldHVybiAoYyAtICdBJyArIDEwKSAmIDB4RjsgLy8gaGFuZGxlIGJv
dGggdXBwZXIgYW5kIGxvd2VyIGNhc2Ugd2l0aG91dCBhIGJyYW5jaAotfQotCiAvLyBDb3BpZXMg
dGhlIHNvdXJjZSB0byB0aGUgZGVzdGluYXRpb24sIGFzc3VtaW5nIGFsbCB0aGUgc291cmNlIGNo
YXJhY3RlcnMgYXJlCiAvLyBBU0NJSS4gVGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciBtdXN0IGJlIGxh
cmdlIGVub3VnaC4gTnVsbCBjaGFyYWN0ZXJzIGFyZSBhbGxvd2VkCiAvLyBpbiB0aGUgc291cmNl
IHN0cmluZywgYW5kIG5vIGF0dGVtcHQgaXMgbWFkZSB0byBudWxsLXRlcm1pbmF0ZSB0aGUgcmVz
dWx0LgpAQCAtOTM0LDU3ICs5MjcsMTIgQEAgU3RyaW5nIEtVUkw6OmRlcHJlY2F0ZWRTdHJpbmco
KSBjb25zdAogCiBTdHJpbmcgZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKGNvbnN0IFN0cmluZyYg
c3RyKQogewotICAgIHJldHVybiBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMoc3RyLCBVVEY4RW5j
b2RpbmcoKSk7CisgICAgcmV0dXJuIGRlY29kZUVzY2FwZVNlcXVlbmNlczxVUkxFc2NhcGVTZXF1
ZW5jZT4oc3RyLCBVVEY4RW5jb2RpbmcoKSk7CiB9CiAKIFN0cmluZyBkZWNvZGVVUkxFc2NhcGVT
ZXF1ZW5jZXMoY29uc3QgU3RyaW5nJiBzdHIsIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2Rpbmcp
CiB7Ci0gICAgVmVjdG9yPFVDaGFyPiByZXN1bHQ7Ci0KLSAgICBDaGFyQnVmZmVyIGJ1ZmZlcjsK
LQotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0ci5sZW5ndGgoKTsKLSAgICB1bnNpZ25lZCBkZWNv
ZGVkUG9zaXRpb24gPSAwOwotICAgIHVuc2lnbmVkIHNlYXJjaFBvc2l0aW9uID0gMDsKLSAgICBz
aXplX3QgZW5jb2RlZFJ1blBvc2l0aW9uOwotICAgIHdoaWxlICgoZW5jb2RlZFJ1blBvc2l0aW9u
ID0gc3RyLmZpbmQoJyUnLCBzZWFyY2hQb3NpdGlvbikpICE9IG5vdEZvdW5kKSB7Ci0gICAgICAg
IC8vIEZpbmQgdGhlIHNlcXVlbmNlIG9mICUtZXNjYXBlIGNvZGVzLgotICAgICAgICB1bnNpZ25l
ZCBlbmNvZGVkUnVuRW5kID0gZW5jb2RlZFJ1blBvc2l0aW9uOwotICAgICAgICB3aGlsZSAobGVu
Z3RoIC0gZW5jb2RlZFJ1bkVuZCA+PSAzCi0gICAgICAgICAgICAgICAgJiYgc3RyW2VuY29kZWRS
dW5FbmRdID09ICclJwotICAgICAgICAgICAgICAgICYmIGlzQVNDSUlIZXhEaWdpdChzdHJbZW5j
b2RlZFJ1bkVuZCArIDFdKQotICAgICAgICAgICAgICAgICYmIGlzQVNDSUlIZXhEaWdpdChzdHJb
ZW5jb2RlZFJ1bkVuZCArIDJdKSkKLSAgICAgICAgICAgIGVuY29kZWRSdW5FbmQgKz0gMzsKLSAg
ICAgICAgc2VhcmNoUG9zaXRpb24gPSBlbmNvZGVkUnVuRW5kOwotICAgICAgICBpZiAoZW5jb2Rl
ZFJ1bkVuZCA9PSBlbmNvZGVkUnVuUG9zaXRpb24pIHsKLSAgICAgICAgICAgICsrc2VhcmNoUG9z
aXRpb247Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIERl
Y29kZSB0aGUgJS1lc2NhcGVzIGludG8gYnl0ZXMuCi0gICAgICAgIHVuc2lnbmVkIHJ1bkxlbmd0
aCA9IChlbmNvZGVkUnVuRW5kIC0gZW5jb2RlZFJ1blBvc2l0aW9uKSAvIDM7Ci0gICAgICAgIGJ1
ZmZlci5yZXNpemUocnVuTGVuZ3RoKTsKLSAgICAgICAgY2hhciogcCA9IGJ1ZmZlci5kYXRhKCk7
Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBxID0gc3RyLmNoYXJhY3RlcnMoKSArIGVuY29kZWRSdW5Q
b3NpdGlvbjsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJ1bkxlbmd0aDsgKytp
KSB7Ci0gICAgICAgICAgICAqcCsrID0gKGhleERpZ2l0VmFsdWUocVsxXSkgPDwgNCkgfCBoZXhE
aWdpdFZhbHVlKHFbMl0pOwotICAgICAgICAgICAgcSArPSAzOwotICAgICAgICB9Ci0KLSAgICAg
ICAgLy8gRGVjb2RlIHRoZSBieXRlcyBpbnRvIFVuaWNvZGUgY2hhcmFjdGVycy4KLSAgICAgICAg
U3RyaW5nIGRlY29kZWQgPSAoZW5jb2RpbmcuaXNWYWxpZCgpID8gZW5jb2RpbmcgOiBVVEY4RW5j
b2RpbmcoKSkuZGVjb2RlKGJ1ZmZlci5kYXRhKCksIHAgLSBidWZmZXIuZGF0YSgpKTsKLSAgICAg
ICAgaWYgKGRlY29kZWQuaXNFbXB0eSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAg
ICAgLy8gQnVpbGQgdXAgdGhlIHN0cmluZyB3aXRoIHdoYXQgd2UganVzdCBza2lwcGVkIGFuZCB3
aGF0IHdlIGp1c3QgZGVjb2RlZC4KLSAgICAgICAgcmVzdWx0LmFwcGVuZChzdHIuY2hhcmFjdGVy
cygpICsgZGVjb2RlZFBvc2l0aW9uLCBlbmNvZGVkUnVuUG9zaXRpb24gLSBkZWNvZGVkUG9zaXRp
b24pOwotICAgICAgICByZXN1bHQuYXBwZW5kKGRlY29kZWQuY2hhcmFjdGVycygpLCBkZWNvZGVk
Lmxlbmd0aCgpKTsKLSAgICAgICAgZGVjb2RlZFBvc2l0aW9uID0gZW5jb2RlZFJ1bkVuZDsKLSAg
ICB9Ci0KLSAgICByZXN1bHQuYXBwZW5kKHN0ci5jaGFyYWN0ZXJzKCkgKyBkZWNvZGVkUG9zaXRp
b24sIGxlbmd0aCAtIGRlY29kZWRQb3NpdGlvbik7Ci0KLSAgICByZXR1cm4gU3RyaW5nOjphZG9w
dChyZXN1bHQpOworICAgIHJldHVybiBkZWNvZGVFc2NhcGVTZXF1ZW5jZXM8VVJMRXNjYXBlU2Vx
dWVuY2U+KHN0ciwgZW5jb2RpbmcpOwogfQogCiAvLyBDYXV0aW9uOiBUaGlzIGZ1bmN0aW9uIGRv
ZXMgbm90IGJvdW5kcyBjaGVjay4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQv
RGVjb2RlRXNjYXBlU2VxdWVuY2VzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9EZWNvZGVFc2NhcGVTZXF1ZW5jZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvRGVjb2RlRXNjYXBlU2VxdWVuY2VzLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTIyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIERhbmllbCBC
YXRlcyAoZGJhdGVzQGludHVkYXRhLmNvbSkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRGVjb2RlRXNjYXBl
U2VxdWVuY2VzX2gKKyNkZWZpbmUgRGVjb2RlRXNjYXBlU2VxdWVuY2VzX2gKKworI2luY2x1ZGUg
IlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCisjaW5jbHVkZSA8
d3RmL0FTQ0lJQ1R5cGUuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKKy8vIEltcGxlbWVudHMgPGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dp
a2kvUGVyY2VudC1lbmNvZGluZyNOb24tc3RhbmRhcmRfaW1wbGVtZW50YXRpb25zPi4KK3N0cnVj
dCBVbmljb2RlMTZCaXRFc2NhcGVTZXF1ZW5jZSB7CisgICAgZW51bSB7IHNpemUgPSA2IH07IC8v
IGUuZy4gJXUyNkM0CisgICAgc3RhdGljIHNpemVfdCBmaW5kSW5TdHJpbmcoY29uc3QgU3RyaW5n
JiBzdHJpbmcsIHVuc2lnbmVkIHN0YXJ0ID0gMCkgeyByZXR1cm4gc3RyaW5nLmZpbmQoIiV1Iiwg
c3RhcnQpOyB9CisgICAgc3RhdGljIGJvb2wgbWF0Y2hTdHJpbmdQcmVmaXgoY29uc3QgU3RyaW5n
JiBzdHJpbmcsIHVuc2lnbmVkIHN0YXJ0ID0gMCkKKyAgICB7CisgICAgICAgIGlmIChzdHJpbmcu
bGVuZ3RoKCkgLSBzdGFydCA8IHNpemUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIHJldHVybiBzdHJpbmdbc3RhcnRdID09ICclJyAmJiBzdHJpbmdbc3RhcnQgKyAxXSA9PSAn
dScKKyAgICAgICAgICAgICYmIFdURjo6aXNBU0NJSUhleERpZ2l0KHN0cmluZ1tzdGFydCArIDJd
KSAmJiBXVEY6OmlzQVNDSUlIZXhEaWdpdChzdHJpbmdbc3RhcnQgKyAzXSkKKyAgICAgICAgICAg
ICYmIFdURjo6aXNBU0NJSUhleERpZ2l0KHN0cmluZ1tzdGFydCArIDRdKSAmJiBXVEY6OmlzQVND
SUlIZXhEaWdpdChzdHJpbmdbc3RhcnQgKyA1XSk7CisgICAgfQorICAgIHN0YXRpYyBTdHJpbmcg
ZGVjb2RlUnVuKGNvbnN0IFVDaGFyKiBydW4sIHNpemVfdCBydW5MZW5ndGgsIGNvbnN0IFRleHRF
bmNvZGluZyYpCisgICAgeworICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGRlY29kZSB3aXRo
IHJlc3BlY3QgdG8gdGhlIHNwZWNpZmllZCBlbmNvZGluZyBzaW5jZSBlYWNoCisgICAgICAgIC8v
ICV1LWVzY2FwZSBzZXF1ZW5jZSByZXByZXNlbnRzIGEgVW5pY29kZSBjb2RlIHBvaW50LgorICAg
ICAgICBzaXplX3QgbnVtU2VxdWVuY2VzID0gcnVuTGVuZ3RoIC8gc2l6ZTsKKyAgICAgICAgVmVj
dG9yPFVDaGFyLCA1MTI+IGJ1ZmZlcjsKKyAgICAgICAgYnVmZmVyLnJlc2l6ZShudW1TZXF1ZW5j
ZXMpOworICAgICAgICBVQ2hhciogcCA9IGJ1ZmZlci5kYXRhKCk7CisgICAgICAgIHdoaWxlIChu
dW1TZXF1ZW5jZXMtLSkgeworICAgICAgICAgICAgKnArKyA9ICh0b0FTQ0lJSGV4VmFsdWUocnVu
WzJdKSA8PCAxMikgfCAodG9BU0NJSUhleFZhbHVlKHJ1blszXSkgPDwgOCkgfCAodG9BU0NJSUhl
eFZhbHVlKHJ1bls0XSkgPDwgNCkgfCB0b0FTQ0lJSGV4VmFsdWUocnVuWzVdKTsKKyAgICAgICAg
ICAgIHJ1biArPSBzaXplOworICAgICAgICB9CisgICAgICAgIHJldHVybiBTdHJpbmc6OmFkb3B0
KGJ1ZmZlcik7CisgICAgfQorfTsKKworc3RydWN0IFVSTEVzY2FwZVNlcXVlbmNlIHsKKyAgICBl
bnVtIHsgc2l6ZSA9IDMgfTsgLy8gZS5nLiAlNDEKKyAgICBzdGF0aWMgc2l6ZV90IGZpbmRJblN0
cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZywgdW5zaWduZWQgc3RhcnQgPSAwKSB7IHJldHVybiBz
dHJpbmcuZmluZCgnJScsIHN0YXJ0KTsgfQorICAgIHN0YXRpYyBib29sIG1hdGNoU3RyaW5nUHJl
Zml4KGNvbnN0IFN0cmluZyYgc3RyaW5nLCB1bnNpZ25lZCBzdGFydCA9IDApCisgICAgeworICAg
ICAgICBpZiAoc3RyaW5nLmxlbmd0aCgpIC0gc3RhcnQgPCBzaXplKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gc3RyaW5nW3N0YXJ0XSA9PSAnJScgJiYgV1RGOjpp
c0FTQ0lJSGV4RGlnaXQoc3RyaW5nW3N0YXJ0ICsgMV0pICYmIFdURjo6aXNBU0NJSUhleERpZ2l0
KHN0cmluZ1tzdGFydCArIDJdKTsKKyAgICB9CisgICAgc3RhdGljIFN0cmluZyBkZWNvZGVSdW4o
Y29uc3QgVUNoYXIqIHJ1biwgc2l6ZV90IHJ1bkxlbmd0aCwgY29uc3QgVGV4dEVuY29kaW5nJiBl
bmNvZGluZykKKyAgICB7CisgICAgICAgIHR5cGVkZWYgVmVjdG9yPGNoYXIsIDUxMj4gQ2hhckJ1
ZmZlcjsKKyAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChDaGFyQnVmZmVyLCBidWZmZXIsICgp
KTsKKworICAgICAgICBzaXplX3QgbnVtU2VxdWVuY2VzID0gcnVuTGVuZ3RoIC8gc2l6ZTsKKyAg
ICAgICAgYnVmZmVyLnJlc2l6ZShudW1TZXF1ZW5jZXMpOworICAgICAgICBjaGFyKiBwID0gYnVm
ZmVyLmRhdGEoKTsKKyAgICAgICAgd2hpbGUgKG51bVNlcXVlbmNlcy0tKSB7CisgICAgICAgICAg
ICAqcCsrID0gKHRvQVNDSUlIZXhWYWx1ZShydW5bMV0pIDw8IDQpIHwgdG9BU0NJSUhleFZhbHVl
KHJ1blsyXSk7CisgICAgICAgICAgICBydW4gKz0gc2l6ZTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gKGVuY29kaW5nLmlzVmFsaWQoKSA/IGVuY29kaW5nIDogVVRGOEVuY29kaW5nKCkpLmRl
Y29kZShidWZmZXIuZGF0YSgpLCBwIC0gYnVmZmVyLmRhdGEoKSk7CisgICAgfQorfTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgRXNjYXBlU2VxdWVuY2U+CitTdHJpbmcgZGVjb2RlRXNjYXBlU2VxdWVu
Y2VzKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nKQor
eworICAgIFZlY3RvcjxVQ2hhcj4gcmVzdWx0OworICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmlu
Zy5sZW5ndGgoKTsKKyAgICB1bnNpZ25lZCBkZWNvZGVkUG9zaXRpb24gPSAwOworICAgIHVuc2ln
bmVkIHNlYXJjaFBvc2l0aW9uID0gMDsKKyAgICBzaXplX3QgZW5jb2RlZFJ1blBvc2l0aW9uOwor
CisgICAgd2hpbGUgKChlbmNvZGVkUnVuUG9zaXRpb24gPSBFc2NhcGVTZXF1ZW5jZTo6ZmluZElu
U3RyaW5nKHN0cmluZywgc2VhcmNoUG9zaXRpb24pKSAhPSBub3RGb3VuZCkgeworICAgICAgICB1
bnNpZ25lZCBlbmNvZGVkUnVuRW5kID0gZW5jb2RlZFJ1blBvc2l0aW9uOworICAgICAgICB3aGls
ZSAobGVuZ3RoIC0gZW5jb2RlZFJ1bkVuZCA+PSBFc2NhcGVTZXF1ZW5jZTo6c2l6ZSAmJiBFc2Nh
cGVTZXF1ZW5jZTo6bWF0Y2hTdHJpbmdQcmVmaXgoc3RyaW5nLCBlbmNvZGVkUnVuRW5kKSkKKyAg
ICAgICAgICAgIGVuY29kZWRSdW5FbmQgKz0gRXNjYXBlU2VxdWVuY2U6OnNpemU7CisgICAgICAg
IHNlYXJjaFBvc2l0aW9uID0gZW5jb2RlZFJ1bkVuZDsKKyAgICAgICAgaWYgKGVuY29kZWRSdW5F
bmQgPT0gZW5jb2RlZFJ1blBvc2l0aW9uKSB7CisgICAgICAgICAgICArK3NlYXJjaFBvc2l0aW9u
OworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBTdHJpbmcgZGVj
b2RlZCA9IEVzY2FwZVNlcXVlbmNlOjpkZWNvZGVSdW4oc3RyaW5nLmNoYXJhY3RlcnMoKSArIGVu
Y29kZWRSdW5Qb3NpdGlvbiwgZW5jb2RlZFJ1bkVuZCAtIGVuY29kZWRSdW5Qb3NpdGlvbiwgZW5j
b2RpbmcpOworICAgICAgICBpZiAoZGVjb2RlZC5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb250
aW51ZTsKKworICAgICAgICByZXN1bHQuYXBwZW5kKHN0cmluZy5jaGFyYWN0ZXJzKCkgKyBkZWNv
ZGVkUG9zaXRpb24sIGVuY29kZWRSdW5Qb3NpdGlvbiAtIGRlY29kZWRQb3NpdGlvbik7CisgICAg
ICAgIHJlc3VsdC5hcHBlbmQoZGVjb2RlZC5jaGFyYWN0ZXJzKCksIGRlY29kZWQubGVuZ3RoKCkp
OworICAgICAgICBkZWNvZGVkUG9zaXRpb24gPSBlbmNvZGVkUnVuRW5kOworICAgIH0KKyAgICBy
ZXN1bHQuYXBwZW5kKHN0cmluZy5jaGFyYWN0ZXJzKCkgKyBkZWNvZGVkUG9zaXRpb24sIGxlbmd0
aCAtIGRlY29kZWRQb3NpdGlvbik7CisgICAgcmV0dXJuIFN0cmluZzo6YWRvcHQocmVzdWx0KTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRGVjb2RlRXNjYXBlU2Vx
dWVuY2VzX2gKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRv
ci9zY3JpcHQtdGFnLXdpdGgtZmFuY3ktdW5pY29kZTItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFn
LXdpdGgtZmFuY3ktdW5pY29kZTItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctd2l0aC1mYW5j
eS11bmljb2RlMi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMyBAQAorQ09O
U09MRSBNRVNTQUdFOiBsaW5lIDE6IFJlZnVzZWQgdG8gZXhlY3V0ZSBhIEphdmFTY3JpcHQgc2Ny
aXB0LiBTb3VyY2UgY29kZSBvZiBzY3JpcHQgZm91bmQgd2l0aGluIHJlcXVlc3QuCisKKwpJbmRl
eDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWct
d2l0aC1mYW5jeS11bmljb2RlMi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAv
dGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLXdpdGgtZmFuY3ktdW5pY29kZTIu
aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNz
QXVkaXRvci9zY3JpcHQtdGFnLXdpdGgtZmFuY3ktdW5pY29kZTIuaHRtbAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxNSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlw
dD4KK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgbGF5b3V0VGVzdENvbnRy
b2xsZXIuZHVtcEFzVGV4dCgpOworICBsYXlvdXRUZXN0Q29udHJvbGxlci5zZXRYU1NBdWRpdG9y
RW5hYmxlZCh0cnVlKTsKK30KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8aWZyYW1lIHNy
Yz0iaHR0cDovL2xvY2FsaG9zdDo4MDAwL3NlY3VyaXR5L3hzc0F1ZGl0b3IvcmVzb3VyY2VzL2Vj
aG8taW50ZXJ0YWctZGVjb2RlLWZhbmN5LXVuaWNvZGUucGw/cT0lMjV1MDAzYyUyNXUwMDczJTI1
dTAwNjMlMjV1MDA3MiUyNXUwMDY5JTI1dTAwNzAlMjV1MDA3NCUyNXUwMDNlJTI1dTAwNjElMjV1
MDA2YyUyNXUwMDY1JTI1dTAwNzIlMjV1MDA3NCUyNXUwMDI4JTI1dTAwMmYlMjV1MDA1OCUyNXUw
MDUzJTI1dTAwNTMlMjV1MDAyZiUyNXUwMDI5JTI1dTAwM2MlMjV1MDAyZiUyNXUwMDczJTI1dTAw
NjMlMjV1MDA3MiUyNXUwMDY5JTI1dTAwNzAlMjV1MDA3NCUyNXUwMDNlIj4KKzwvaWZyYW1lPgor
PC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94
c3NBdWRpdG9yL3NjcmlwdC10YWctd2l0aC1mYW5jeS11bmljb2RlMy1leHBlY3RlZC50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3Nj
cmlwdC10YWctd2l0aC1mYW5jeS11bmljb2RlMy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy13
aXRoLWZhbmN5LXVuaWNvZGUzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwz
IEBACitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMTogUmVmdXNlZCB0byBleGVjdXRlIGEgSmF2YVNj
cmlwdCBzY3JpcHQuIFNvdXJjZSBjb2RlIG9mIHNjcmlwdCBmb3VuZCB3aXRoaW4gcmVxdWVzdC4K
KworCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2Ny
aXB0LXRhZy13aXRoLWZhbmN5LXVuaWNvZGUzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctd2l0aC1mYW5jeS11
bmljb2RlMy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1
cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctd2l0aC1mYW5jeS11bmljb2RlMy5odG1sCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDE1IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+
Cis8c2NyaXB0PgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICBsYXlvdXRU
ZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgIGxheW91dFRlc3RDb250cm9sbGVyLnNldFhT
U0F1ZGl0b3JFbmFibGVkKHRydWUpOworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxp
ZnJhbWUgc3JjPSJodHRwOi8vbG9jYWxob3N0OjgwMDAvc2VjdXJpdHkveHNzQXVkaXRvci9yZXNv
dXJjZXMvZWNoby1pbnRlcnRhZy5wbD9xPTxzY3JpcHQ+JTI1MjUyNXUwMDYxbGVydCgvWFNTLyk8
L3NjcmlwdD4iPgorPC9pZnJhbWU+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy13aXRoLWZhbmN5LXVu
aWNvZGU0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy13aXRoLWZhbmN5LXVuaWNvZGU0LWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkv
eHNzQXVkaXRvci9zY3JpcHQtdGFnLXdpdGgtZmFuY3ktdW5pY29kZTQtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMgQEAKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAxOiBSZWZ1
c2VkIHRvIGV4ZWN1dGUgYSBKYXZhU2NyaXB0IHNjcmlwdC4gU291cmNlIGNvZGUgb2Ygc2NyaXB0
IGZvdW5kIHdpdGhpbiByZXF1ZXN0LgorCisKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMv
c2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLXdpdGgtZmFuY3ktdW5pY29kZTQuaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Iv
c2NyaXB0LXRhZy13aXRoLWZhbmN5LXVuaWNvZGU0Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy13aXRoLWZh
bmN5LXVuaWNvZGU0Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTUgQEAKKzwhRE9DVFlQ
RSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CitpZiAod2luZG93LmxheW91dFRlc3RD
b250cm9sbGVyKSB7CisgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgbGF5
b3V0VGVzdENvbnRyb2xsZXIuc2V0WFNTQXVkaXRvckVuYWJsZWQodHJ1ZSk7Cit9Cis8L3Njcmlw
dD4KKzwvaGVhZD4KKzxib2R5PgorPGlmcmFtZSBzcmM9Imh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC9z
ZWN1cml0eS94c3NBdWRpdG9yL3Jlc291cmNlcy9lY2hvLWludGVydGFnLWRlY29kZS1mYW5jeS11
bmljb2RlLnBsP3E9JTI1dTAwM2MlMjV1MDA3MyUyNXUwMDYzJTI1dTAwNzIlMjV1MDA2OSUyNXUw
MDcwJTI1dTAwNzQlMjV1MDAzZSUyNXUwMDYxJTI1dTAwNmMlMjV1MDA2NSUyNXUwMDcyJTI1dTAw
NzQlMjV1MDAyOCUyNXUwMDJmJTI1dTAwNTglMjV1MDA1MyUyNXUwMDUzJTI1dTI2MjAlMjV1MDAy
ZiUyNXUwMDI5JTI1dTAwM2MlMjV1MDAyZiUyNXUwMDczJTI1dTAwNjMlMjV1MDA3MiUyNXUwMDY5
JTI1dTAwNzAlMjV1MDA3NCUyNXUwMDNlIj4KKzwvaWZyYW1lPgorPC9ib2R5PgorPC9odG1sPgpJ
bmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10
YWctd2l0aC1mYW5jeS11bmljb2RlNS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctd2l0aC1mYW5j
eS11bmljb2RlNS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy13aXRoLWZhbmN5LXVuaWNvZGU1
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACitDT05TT0xFIE1FU1NB
R0U6IGxpbmUgMTogUmVmdXNlZCB0byBleGVjdXRlIGEgSmF2YVNjcmlwdCBzY3JpcHQuIFNvdXJj
ZSBjb2RlIG9mIHNjcmlwdCBmb3VuZCB3aXRoaW4gcmVxdWVzdC4KKworCkluZGV4OiBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy13aXRoLWZhbmN5
LXVuaWNvZGU1Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1
cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctd2l0aC1mYW5jeS11bmljb2RlNS5odG1sCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3Nj
cmlwdC10YWctd2l0aC1mYW5jeS11bmljb2RlNS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDE1IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0PgoraWYgKHdp
bmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1w
QXNUZXh0KCk7CisgIGxheW91dFRlc3RDb250cm9sbGVyLnNldFhTU0F1ZGl0b3JFbmFibGVkKHRy
dWUpOworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxpZnJhbWUgc3JjPSJodHRwOi8v
bG9jYWxob3N0OjgwMDAvc2VjdXJpdHkveHNzQXVkaXRvci9yZXNvdXJjZXMvZWNoby1pbnRlcnRh
Zy1kZWNvZGUtZmFuY3ktdW5pY29kZS5wbD9xPTxzY3JpcHQ+YWxlcnQoJyV1MDA1OCV1MDA1MyV1
MDA1MyV1MDAyMCV1MDVkMCV1MDVkMSV1MDVkOCV1MDVkNyV1MDVkNCV1MDAyMCV1MDVlNCV1MDVk
MiV1MDVkOSV1MDVlMiV1MDVkNSV1MDVlYScpPC9zY3JpcHQ+Ij4KKzwvaWZyYW1lPgorPC9ib2R5
PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRp
dG9yL3NjcmlwdC10YWctd2l0aC1mYW5jeS11bmljb2RlLWV4cGVjdGVkLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRh
Zy13aXRoLWZhbmN5LXVuaWNvZGUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA5NDI2MSkKKysrIExh
eW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLXdpdGgt
ZmFuY3ktdW5pY29kZS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsMiArMSwzIEBA
Ci1BTEVSVDogL1hTUy8KK0NPTlNPTEUgTUVTU0FHRTogbGluZSAxOiBSZWZ1c2VkIHRvIGV4ZWN1
dGUgYSBKYXZhU2NyaXB0IHNjcmlwdC4gU291cmNlIGNvZGUgb2Ygc2NyaXB0IGZvdW5kIHdpdGhp
biByZXF1ZXN0LgorCiAKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNz
QXVkaXRvci9yZXNvdXJjZXMvZWNoby1pbnRlcnRhZy1kZWNvZGUtZmFuY3ktdW5pY29kZS5wbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Iv
cmVzb3VyY2VzL2VjaG8taW50ZXJ0YWctZGVjb2RlLWZhbmN5LXVuaWNvZGUucGwJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3IvcmVzb3Vy
Y2VzL2VjaG8taW50ZXJ0YWctZGVjb2RlLWZhbmN5LXVuaWNvZGUucGwJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMjIgQEAKKyMhL3Vzci9iaW4vcGVybCAtd1QKK3VzZSBzdHJpY3Q7Cit1c2UgQ0dJ
OworCitteSAkY2dpID0gbmV3IENHSTsKKworIyBTZWUgPGh0dHA6Ly9lbi53aWtpcGVkaWEub3Jn
L3dpa2kvUGVyY2VudC1lbmNvZGluZyNOb24tc3RhbmRhcmRfaW1wbGVtZW50YXRpb25zPi4KK3N1
YiBkZWNvZGVGYW5jeVVuaWNvZGVFc2NhcGVTZXF1ZW5jZXMKK3sKKyAgICBteSAoJHN0cikgPSBA
XzsKKyAgICAkc3RyID1+IHMvJXUoWzAtOUEtWmEtel17MSw0fSkvQHtbY2hyKGhleCgiMHgkMSIp
KV19L2c7ICMgY2hyKCkgc3VwcG9ydHMgVW5pY29kZS4KKyAgICByZXR1cm4gJHN0cjsKK30KKwor
cHJpbnQgIkNvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PVVURi04XG5cbiI7CisKK3By
aW50ICI8IURPQ1RZUEUgaHRtbD5cbiI7CitwcmludCAiPGh0bWw+XG4iOworcHJpbnQgIjxib2R5
PlxuIjsKK3ByaW50IGRlY29kZUZhbmN5VW5pY29kZUVzY2FwZVNlcXVlbmNlcygkY2dpLT5wYXJh
bSgncScpKTsKK3ByaW50ICI8L2JvZHk+XG4iOworcHJpbnQgIjwvaHRtbD5cbiI7CgpQcm9wZXJ0
eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Iv
cmVzb3VyY2VzL2VjaG8taW50ZXJ0YWctZGVjb2RlLWZhbmN5LXVuaWNvZGUucGwKX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
XwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106296</attachid>
            <date>2011-09-04 16:37:33 -0700</date>
            <delta_ts>2011-09-08 17:09:33 -0700</delta_ts>
            <desc>Patch and layout tests</desc>
            <filename>Bug66588_8.patch</filename>
            <type>text/plain</type>
            <size>31693</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk0NTA3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDMgQEAKKzIwMTEtMDktMDQgIERhbmllbCBC
YXRlcyAgPGRiYXRlc0B3ZWJraXQub3JnPgorCisgICAgICAgIFhTUyBmaWx0ZXIgYnlwYXNzIHZp
YSBub24tc3RhbmRhcmQgVVJMIGVuY29kaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD02NjU4OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFRlc3RzOiBodHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Iv
c2NyaXB0LXRhZy13aXRoLTE2Yml0LXVuaWNvZGUyLmh0bWwKKyAgICAgICAgICAgICAgIGh0dHAv
dGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLXdpdGgtMTZiaXQtdW5pY29kZTMu
aHRtbAorICAgICAgICAgICAgICAgaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3Njcmlw
dC10YWctd2l0aC0xNmJpdC11bmljb2RlNC5odG1sCisgICAgICAgICAgICAgICBodHRwL3Rlc3Rz
L3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy13aXRoLTE2Yml0LXVuaWNvZGU1Lmh0bWwK
KyAgICAgICAgICAgICAgIGh0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci93aW5kb3ctb3Bl
bi13aXRob3V0LXVybC1zaG91bGQtbm90LWFzc2VydC5odG1sCisKKyAgICAgICAgSW1wbGVtZW50
IHN1cHBvcnQgZm9yIGRlY29kaW5nIG5vbi1zdGFuZGFyZCAxNi1iaXQgVW5pY29kZSBlc2NhcGUg
c2VxdWVuY2VzIG9mCisgICAgICAgIHRoZSBmb3JtICV1MjZDNCAoaHR0cDovL2VuLndpa2lwZWRp
YS5vcmcvd2lraS9QZXJjZW50LWVuY29kaW5nI05vbi1zdGFuZGFyZF9pbXBsZW1lbnRhdGlvbnMp
LgorCisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbTogQWRkZWQgRGVjb2RlRXNjYXBlU2Vx
dWVuY2VzLmguCisgICAgICAgICogV2ViQ29yZS5neXBpOiBEaXR0by4KKyAgICAgICAgKiBXZWJD
b3JlLnBybzogRGl0dG8uCisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6
IERpdHRvLgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogRGl0
dG8uCisgICAgICAgICogaHRtbC9wYXJzZXIvWFNTQXVkaXRvci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpkZWNvZGUxNkJpdFVuaWNvZGVFc2NhcGVTZXF1ZW5jZXMpOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OmNvbW1vbkRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyk6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6ZnVsbHlEZWNvZGVTdHJpbmcpOiBNb2RpZmllZCB0byBjYWxsIGRlY29kZTE2
Qml0VW5pY29kZUVzY2FwZVNlcXVlbmNlcygpLgorICAgICAgICAoV2ViQ29yZTo6WFNTQXVkaXRv
cjo6aW5pdCk6IE1vZGlmaWVkIHRvIHJldHVybiBlYXJseSB3aGVuIHRoZSBVUkwgb2YgdGhlIGRv
Y3VtZW50CisgICAgICAgIGlzIHRoZSBlbXB0eSBzdHJpbmcuIFRoaXMgY2FuIGhhcHBlbiB3aGVu
IG9wZW5pbmcgYSBuZXcgYnJvd3NlciB3aW5kb3cgb3IgY2FsbGluZworICAgICAgICB3aW5kb3cu
b3BlbigiIikuCisgICAgICAgICogcGxhdGZvcm0vS1VSTC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMpOiBBYnN0cmFjdGVkIGNvZGUgaW50byB0ZW1wbGF0
ZS1mdW5jdGlvbiBkZWNvZGVFc2NhcGVTZXF1ZW5jZXMoKS4KKyAgICAgICAgVGhpcyBmdW5jdGlv
biBqdXN0IGNhbGxzIGRlY29kZUVzY2FwZVNlcXVlbmNlczxVUkxFc2NhcGVTZXF1ZW5jZT4oKS4K
KyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L0RlY29kZUVzY2FwZVNlcXVlbmNlcy5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlVuaWNvZGUxNkJpdEVzY2FwZVNlcXVlbmNlOjpmaW5kSW5TdHJp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6VW5pY29kZTE2Qml0RXNjYXBlU2VxdWVuY2U6Om1hdGNo
U3RyaW5nUHJlZml4KToKKyAgICAgICAgKFdlYkNvcmU6OlVuaWNvZGUxNkJpdEVzY2FwZVNlcXVl
bmNlOjpkZWNvZGVSdW4pOgorICAgICAgICAoV2ViQ29yZTo6VVJMRXNjYXBlU2VxdWVuY2U6OmZp
bmRJblN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpVUkxFc2NhcGVTZXF1ZW5jZTo6bWF0Y2hT
dHJpbmdQcmVmaXgpOgorICAgICAgICAoV2ViQ29yZTo6VVJMRXNjYXBlU2VxdWVuY2U6OmRlY29k
ZVJ1bik6CisgICAgICAgIChXZWJDb3JlOjpkZWNvZGVFc2NhcGVTZXF1ZW5jZXMpOgorCiAyMDEx
LTA5LTA0ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgRG9jdW1lbnQu
Y3JlYXRlRXZlbnQgc2hvdWxkIHN1cHBvcnQgYWxsIHRoZSBpbnRlcmZhY2VzIG9mIEV2ZW50IHdl
IGdvdApJbmRleDogU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiA5NDUwNykK
KysrIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAg
LTI4MTEsNiArMjgxMSw3IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L0JpZGlSZXNvbHZlci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlS
dW5MaXN0LmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvRGVjb2RlRXNjYXBlU2Vx
dWVuY2VzLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvSHlwaGVuYXRpb24uY3Bw
IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0h5cGhlbmF0aW9uLmggXAogCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvTGluZUJyZWFrSXRlcmF0b3JQb29sSUNVLmggXApJbmRl
eDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gOTQ1MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTg0OCw2ICs4NDgsNyBAQAogICAgICAgICAgICAg
J3BsYXRmb3JtL3RleHQvQmlkaVJ1bkxpc3QuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vdGV4
dC9CaWRpQ29udGV4dC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS90ZXh0L0JpZGlSZXNvbHZl
ci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS90ZXh0L0RlY29kZUVzY2FwZVNlcXVlbmNlcy5o
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS90ZXh0L0xpbmVCcmVha0l0ZXJhdG9yUG9vbElDVS5o
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS90ZXh0L0xpbmVFbmRpbmcuaCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vdGV4dC9QbGF0Zm9ybVN0cmluZy5oJywKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCShy
ZXZpc2lvbiA5NDUwNykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNv
cHkpCkBAIC0yMTA1LDYgKzIxMDUsNyBAQCBIRUFERVJTICs9IFwKICAgICBwbGF0Zm9ybS9zcWwv
U1FMVmFsdWUuaCBcCiAgICAgcGxhdGZvcm0vdGV4dC9CYXNlNjQuaCBcCiAgICAgcGxhdGZvcm0v
dGV4dC9CaWRpQ29udGV4dC5oIFwKKyAgICBwbGF0Zm9ybS90ZXh0L0RlY29kZUVzY2FwZVNlcXVl
bmNlcy5oIFwKICAgICBwbGF0Zm9ybS90ZXh0L0h5cGhlbmF0aW9uLmggXAogICAgIHBsYXRmb3Jt
L3RleHQvUXVvdGVkUHJpbnRhYmxlLmggXAogICAgIHBsYXRmb3JtL3RleHQvcXQvVGV4dENvZGVj
UXQuaCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
ago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvagkocmV2aXNpb24gOTQ1MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtMzE1NDksNiArMzE1NDksMTAgQEAKIAkJ
CQkJPgogCQkJCTwvRmlsZT4KIAkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRm
b3JtXHRleHRcRGVjb2RlRXNjYXBlU2VxdWVuY2VzLmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJ
CQkJPEZpbGUKIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVx0ZXh0XEh5cGhlbmF0aW9u
LmgiCiAJCQkJCT4KIAkJCQk8L0ZpbGU+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA5NDUwNykKKysrIFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtNTQ0OSw2ICs1NDQ5LDcgQEAKIAkJQ0U1NEZEMzgxMDE2RDlBNjAwOEI0NEM4IC8qIFNj
cmlwdFNvdXJjZVByb3ZpZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDRTU0RkQzNzEwMTZEOUE2MDA4QjQ0QzggLyogU2NyaXB0U291cmNlUHJvdmlk
ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlD
RUEzOTQ5QzExRDQ1Q0RBMDAzMDk0Q0YgLyogU3RhdGljSGFzaFNldE5vZGVMaXN0LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENFQTM5NDlBMTFENDVD
REEwMDMwOTRDRiAvKiBTdGF0aWNIYXNoU2V0Tm9kZUxpc3QuY3BwICovOyB9OwogCQlDRUEzOTQ5
RDExRDQ1Q0RBMDAzMDk0Q0YgLyogU3RhdGljSGFzaFNldE5vZGVMaXN0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRUEzOTQ5QjExRDQ1Q0RBMDAzMDk0
Q0YgLyogU3RhdGljSGFzaFNldE5vZGVMaXN0LmggKi87IH07CisJCUNFRDQyQjlCMTQxNDI1Q0Uw
MDczRjY0MiAvKiBEZWNvZGVFc2NhcGVTZXF1ZW5jZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENFRDQyQjlBMTQxNDI1Q0UwMDczRjY0MiAvKiBEZWNv
ZGVFc2NhcGVTZXF1ZW5jZXMuaCAqLzsgfTsKIAkJQ0VGNDE4Q0UxMTc5Njc4QzAwOUQxMTJDIC8q
IFZpZXdwb3J0QXJndW1lbnRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IENFRjQxOENDMTE3OTY3OEMwMDlEMTEyQyAvKiBWaWV3cG9ydEFyZ3VtZW50
cy5jcHAgKi87IH07CiAJCUNFRjQxOENGMTE3OTY3OEMwMDlEMTEyQyAvKiBWaWV3cG9ydEFyZ3Vt
ZW50cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0VG
NDE4Q0QxMTc5Njc4QzAwOUQxMTJDIC8qIFZpZXdwb3J0QXJndW1lbnRzLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRDAwMEVCQTIxMUJEQUZENDAw
QzQ3NzI2IC8qIEZyYW1lTG9hZGVyU3RhdGVNYWNoaW5lLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQwMDBFQkEwMTFCREFGRDQwMEM0NzcyNiAvKiBG
cmFtZUxvYWRlclN0YXRlTWFjaGluZS5jcHAgKi87IH07CkBAIC0xMjIwNiw2ICsxMjIwNyw3IEBA
CiAJCUNFNTRGRDM3MTAxNkQ5QTYwMDhCNDRDOCAvKiBTY3JpcHRTb3VyY2VQcm92aWRlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JpcHRTb3VyY2VQcm92aWRlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRUEzOTQ5QTExRDQ1Q0RBMDAzMDk0Q0YgLyog
U3RhdGljSGFzaFNldE5vZGVMaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFN0YXRpY0hhc2hTZXROb2RlTGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUNFQTM5NDlCMTFENDVDREEwMDMwOTRDRiAvKiBTdGF0aWNIYXNoU2V0Tm9kZUxpc3Qu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RhdGljSGFzaFNldE5vZGVMaXN0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNFRDQyQjlBMTQxNDI1Q0UwMDczRjY0
MiAvKiBEZWNvZGVFc2NhcGVTZXF1ZW5jZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRGVjb2RlRXNjYXBlU2VxdWVuY2VzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUNFRjQxOENDMTE3OTY3OEMwMDlEMTEyQyAvKiBWaWV3cG9ydEFyZ3VtZW50cy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWaWV3cG9ydEFyZ3VtZW50cy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNFRjQxOENEMTE3OTY3OEMwMDlEMTEyQyAv
KiBWaWV3cG9ydEFyZ3VtZW50cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBW
aWV3cG9ydEFyZ3VtZW50cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEMDAwRUJB
MDExQkRBRkQ0MDBDNDc3MjYgLyogRnJhbWVMb2FkZXJTdGF0ZU1hY2hpbmUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRnJhbWVMb2FkZXJTdGF0ZU1hY2hpbmUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTgzNzksNiArMTgzODEsNyBAQAogCQkJ
CUIyQzNEOUYzMEQwMDZDMUQwMEVGNkYyNiAvKiBCaWRpQ29udGV4dC5oICovLAogCQkJCUIyQzNE
OUY0MEQwMDZDMUQwMEVGNkYyNiAvKiBCaWRpUmVzb2x2ZXIuaCAqLywKIAkJCQlBOEM0MDI5MjEz
NDhCMjIyMDA2M0YxRTUgLyogQmlkaVJ1bkxpc3QuaCAqLywKKwkJCQlDRUQ0MkI5QTE0MTQyNUNF
MDA3M0Y2NDIgLyogRGVjb2RlRXNjYXBlU2VxdWVuY2VzLmggKi8sCiAJCQkJMzc1Q0QyMzExMTlE
NDNDODAwQTJBODU5IC8qIEh5cGhlbmF0aW9uLmggKi8sCiAJCQkJQTVBQkI3ODYxM0I5MDRCQzAw
RjE5N0UzIC8qIExpbmVCcmVha0l0ZXJhdG9yUG9vbElDVS5oICovLAogCQkJCTg5QjVFQTlGMTFF
ODAwM0QwMEYyMzY3RSAvKiBMaW5lRW5kaW5nLmNwcCAqLywKQEAgLTIzNDY5LDYgKzIzNDcyLDcg
QEAKIAkJCQk5QjBGQjE5MjE0MERCNTc5MDAyMjU4OEYgLyogSFRUUFZhbGlkYXRpb24uaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDMkNCRjRFMTQwRjFBQkQwMDM4NzlCRSAvKiBKU1dlYkdMQ29udGV4
dEV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzI3NEIyRjE0MEVCRUIyMDBFQURGQTYgLyog
Q1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlLmggaW4gSGVhZGVycyAqLywKKwkJCQlDRUQ0MkI5QjE0
MTQyNUNFMDA3M0Y2NDIgLyogRGVjb2RlRXNjYXBlU2VxdWVuY2VzLmggaW4gSGVhZGVycyAqLywK
IAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1hTU0F1ZGl0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1hTU0F1ZGl0b3IuY3BwCShyZXZpc2lv
biA5NDUwNykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1hTU0F1ZGl0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMSBB
ZGFtIEJhcnRoLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExIERh
bmllbCBCYXRlcyAoZGJhdGVzQGludHVkYXRhLmNvbSkuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTI4LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIkNvbnNvbGUuaCIKICNpbmNs
dWRlICJET01XaW5kb3cuaCIKKyNpbmNsdWRlICJEZWNvZGVFc2NhcGVTZXF1ZW5jZXMuaCIKICNp
bmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCiAjaW5jbHVk
ZSAiRnJhbWUuaCIKQEAgLTExNSwyMCArMTE3LDMwIEBAIHN0YXRpYyBib29sIGNvbnRhaW5zSmF2
YVNjcmlwdFVSTChjb25zdCAKICAgICByZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2UodmFsdWUuZGF0
YSgpICsgaSwgamF2YVNjcmlwdFNjaGVtZSwgbGVuZ3RoT2ZKYXZhU2NyaXB0U2NoZW1lKTsKIH0K
IAorc3RhdGljIGlubGluZSBTdHJpbmcgZGVjb2RlMTZCaXRVbmljb2RlRXNjYXBlU2VxdWVuY2Vz
KGNvbnN0IFN0cmluZyYgc3RyaW5nKQoreworICAgIC8vIE5vdGUsIHRoZSBlbmNvZGluZyBpcyBp
Z25vcmVkIHNpbmNlIGVhY2ggJXUtZXNjYXBlIHNlcXVlbmNlIHJlcHJlc2VudHMgYSBVbmljb2Rl
IGNvZGUgcG9pbnQuCisgICAgcmV0dXJuIGRlY29kZUVzY2FwZVNlcXVlbmNlczxVbmljb2RlMTZC
aXRFc2NhcGVTZXF1ZW5jZT4oc3RyaW5nLCBVVEY4RW5jb2RpbmcoKSk7Cit9CisKK3N0YXRpYyBp
bmxpbmUgU3RyaW5nIGNvbW1vbkRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyhjb25zdCBTdHJpbmcm
IHN0cmluZywgY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZykKK3sKKyAgICAvLyBXZSB1c2Ug
ZGVjb2RlRXNjYXBlU2VxdWVuY2VzKCkgdG8gYXZvaWQgZGlmZmVyZW5jZXMgaW4gVVJMIGRlY29k
aW5nIGJldHdlZW4gS1VSTAorICAgIC8vIGFuZCBLVVJMR29vZ2xlIGltcGxlbWVudGF0aW9ucy4K
KyAgICByZXR1cm4gZGVjb2RlRXNjYXBlU2VxdWVuY2VzPFVSTEVzY2FwZVNlcXVlbmNlPihzdHJp
bmcsIGVuY29kaW5nKTsKK30KKwogc3RhdGljIFN0cmluZyBmdWxseURlY29kZVN0cmluZyhjb25z
dCBTdHJpbmcmIHN0cmluZywgY29uc3QgVGV4dFJlc291cmNlRGVjb2RlciogZGVjb2RlcikKIHsK
KyAgICBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nID0gZGVjb2RlciA/IGRlY29kZXItPmVu
Y29kaW5nKCkgOiBVVEY4RW5jb2RpbmcoKTsKICAgICBzaXplX3Qgb2xkV29ya2luZ1N0cmluZ0xl
bmd0aDsKICAgICBTdHJpbmcgd29ya2luZ1N0cmluZyA9IHN0cmluZzsKICAgICBkbyB7CiAgICAg
ICAgIG9sZFdvcmtpbmdTdHJpbmdMZW5ndGggPSB3b3JraW5nU3RyaW5nLmxlbmd0aCgpOwotICAg
ICAgICB3b3JraW5nU3RyaW5nID0gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKHdvcmtpbmdTdHJp
bmcpOworICAgICAgICB3b3JraW5nU3RyaW5nID0gY29tbW9uRGVjb2RlVVJMRXNjYXBlU2VxdWVu
Y2VzKHdvcmtpbmdTdHJpbmcsIGVuY29kaW5nKTsKICAgICB9IHdoaWxlICh3b3JraW5nU3RyaW5n
Lmxlbmd0aCgpIDwgb2xkV29ya2luZ1N0cmluZ0xlbmd0aCk7Ci0gICAgaWYgKGRlY29kZXIpIHsK
LSAgICAgICAgQ1N0cmluZyB3b3JraW5nU3RyaW5nVVRGOCA9IHdvcmtpbmdTdHJpbmcudXRmOCgp
OwotICAgICAgICBTdHJpbmcgZGVjb2RlZFN0cmluZyA9IGRlY29kZXItPmVuY29kaW5nKCkuZGVj
b2RlKHdvcmtpbmdTdHJpbmdVVEY4LmRhdGEoKSwgd29ya2luZ1N0cmluZ1VURjgubGVuZ3RoKCkp
OwotICAgICAgICBpZiAoIWRlY29kZWRTdHJpbmcuaXNFbXB0eSgpKQotICAgICAgICAgICAgd29y
a2luZ1N0cmluZyA9IGRlY29kZWRTdHJpbmc7Ci0gICAgfQorICAgIHdvcmtpbmdTdHJpbmcgPSBk
ZWNvZGUxNkJpdFVuaWNvZGVFc2NhcGVTZXF1ZW5jZXMod29ya2luZ1N0cmluZyk7CisgICAgQVNT
RVJUKCF3b3JraW5nU3RyaW5nLmlzRW1wdHkoKSk7CiAgICAgd29ya2luZ1N0cmluZy5yZXBsYWNl
KCcrJywgJyAnKTsKICAgICB3b3JraW5nU3RyaW5nID0gY2Fub25pY2FsaXplKHdvcmtpbmdTdHJp
bmcpOwogICAgIHJldHVybiB3b3JraW5nU3RyaW5nOwpAQCAtMTY5LDYgKzE4MSwxMyBAQCB2b2lk
IFhTU0F1ZGl0b3I6OmluaXQoKQogCiAgICAgY29uc3QgS1VSTCYgdXJsID0gbV9wYXJzZXItPmRv
Y3VtZW50KCktPnVybCgpOwogCisgICAgaWYgKHVybC5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8g
VGhlIFVSTCBjYW4gYmUgZW1wdHkgd2hlbiBvcGVuaW5nIGEgbmV3IGJyb3dzZXIgd2luZG93IG9y
IGNhbGxpbmcgd2luZG93Lm9wZW4oIiIpCisgICAgICAgIC8vIChub3RpY2UsIHRoZSBmaXJzdCBh
cmdtZW50IG9mIHdpbmRvdy5vcGVuKCkgaXMgaW50ZW50aW9uYWxseSB0aGUgZW1wdHkgc3RyaW5n
KS4KKyAgICAgICAgbV9pc0VuYWJsZWQgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KwogICAgIGlmICh1cmwucHJvdG9jb2xJc0RhdGEoKSkgewogICAgICAgICBtX2lzRW5hYmxlZCA9
IGZhbHNlOwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9L
VVJMLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmNwcAko
cmV2aXNpb24gOTQ1MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIktVUkwuaCIKIAorI2luY2x1ZGUgIkRlY29kZUVzY2FwZVNlcXVlbmNlcy5oIgogI2luY2x1
ZGUgIlRleHRFbmNvZGluZy5oIgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KQEAgLTI1MCwxNCArMjUxLDYgQEAgc3RhdGljIGlubGluZSBib29sIGlzU2NoZW1l
Q2hhcmFjdGVyTWF0YwogICAgIHJldHVybiAoY2hhcmFjdGVyIHwgMHgyMCkgPT0gc2NoZW1lQ2hh
cmFjdGVyOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBoZXhEaWdpdFZhbHVlKFVDaGFyIGMpCi17
Ci0gICAgQVNTRVJUKGlzQVNDSUlIZXhEaWdpdChjKSk7Ci0gICAgaWYgKGMgPCAnQScpCi0gICAg
ICAgIHJldHVybiBjIC0gJzAnOwotICAgIHJldHVybiAoYyAtICdBJyArIDEwKSAmIDB4RjsgLy8g
aGFuZGxlIGJvdGggdXBwZXIgYW5kIGxvd2VyIGNhc2Ugd2l0aG91dCBhIGJyYW5jaAotfQotCiAv
LyBDb3BpZXMgdGhlIHNvdXJjZSB0byB0aGUgZGVzdGluYXRpb24sIGFzc3VtaW5nIGFsbCB0aGUg
c291cmNlIGNoYXJhY3RlcnMgYXJlCiAvLyBBU0NJSS4gVGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciBt
dXN0IGJlIGxhcmdlIGVub3VnaC4gTnVsbCBjaGFyYWN0ZXJzIGFyZSBhbGxvd2VkCiAvLyBpbiB0
aGUgc291cmNlIHN0cmluZywgYW5kIG5vIGF0dGVtcHQgaXMgbWFkZSB0byBudWxsLXRlcm1pbmF0
ZSB0aGUgcmVzdWx0LgpAQCAtOTM0LDU3ICs5MjcsMTIgQEAgU3RyaW5nIEtVUkw6OmRlcHJlY2F0
ZWRTdHJpbmcoKSBjb25zdAogCiBTdHJpbmcgZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKGNvbnN0
IFN0cmluZyYgc3RyKQogewotICAgIHJldHVybiBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMoc3Ry
LCBVVEY4RW5jb2RpbmcoKSk7CisgICAgcmV0dXJuIGRlY29kZUVzY2FwZVNlcXVlbmNlczxVUkxF
c2NhcGVTZXF1ZW5jZT4oc3RyLCBVVEY4RW5jb2RpbmcoKSk7CiB9CiAKIFN0cmluZyBkZWNvZGVV
UkxFc2NhcGVTZXF1ZW5jZXMoY29uc3QgU3RyaW5nJiBzdHIsIGNvbnN0IFRleHRFbmNvZGluZyYg
ZW5jb2RpbmcpCiB7Ci0gICAgVmVjdG9yPFVDaGFyPiByZXN1bHQ7Ci0KLSAgICBDaGFyQnVmZmVy
IGJ1ZmZlcjsKLQotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0ci5sZW5ndGgoKTsKLSAgICB1bnNp
Z25lZCBkZWNvZGVkUG9zaXRpb24gPSAwOwotICAgIHVuc2lnbmVkIHNlYXJjaFBvc2l0aW9uID0g
MDsKLSAgICBzaXplX3QgZW5jb2RlZFJ1blBvc2l0aW9uOwotICAgIHdoaWxlICgoZW5jb2RlZFJ1
blBvc2l0aW9uID0gc3RyLmZpbmQoJyUnLCBzZWFyY2hQb3NpdGlvbikpICE9IG5vdEZvdW5kKSB7
Ci0gICAgICAgIC8vIEZpbmQgdGhlIHNlcXVlbmNlIG9mICUtZXNjYXBlIGNvZGVzLgotICAgICAg
ICB1bnNpZ25lZCBlbmNvZGVkUnVuRW5kID0gZW5jb2RlZFJ1blBvc2l0aW9uOwotICAgICAgICB3
aGlsZSAobGVuZ3RoIC0gZW5jb2RlZFJ1bkVuZCA+PSAzCi0gICAgICAgICAgICAgICAgJiYgc3Ry
W2VuY29kZWRSdW5FbmRdID09ICclJwotICAgICAgICAgICAgICAgICYmIGlzQVNDSUlIZXhEaWdp
dChzdHJbZW5jb2RlZFJ1bkVuZCArIDFdKQotICAgICAgICAgICAgICAgICYmIGlzQVNDSUlIZXhE
aWdpdChzdHJbZW5jb2RlZFJ1bkVuZCArIDJdKSkKLSAgICAgICAgICAgIGVuY29kZWRSdW5FbmQg
Kz0gMzsKLSAgICAgICAgc2VhcmNoUG9zaXRpb24gPSBlbmNvZGVkUnVuRW5kOwotICAgICAgICBp
ZiAoZW5jb2RlZFJ1bkVuZCA9PSBlbmNvZGVkUnVuUG9zaXRpb24pIHsKLSAgICAgICAgICAgICsr
c2VhcmNoUG9zaXRpb247Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAg
ICAgIC8vIERlY29kZSB0aGUgJS1lc2NhcGVzIGludG8gYnl0ZXMuCi0gICAgICAgIHVuc2lnbmVk
IHJ1bkxlbmd0aCA9IChlbmNvZGVkUnVuRW5kIC0gZW5jb2RlZFJ1blBvc2l0aW9uKSAvIDM7Ci0g
ICAgICAgIGJ1ZmZlci5yZXNpemUocnVuTGVuZ3RoKTsKLSAgICAgICAgY2hhciogcCA9IGJ1ZmZl
ci5kYXRhKCk7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBxID0gc3RyLmNoYXJhY3RlcnMoKSArIGVu
Y29kZWRSdW5Qb3NpdGlvbjsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJ1bkxl
bmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAqcCsrID0gKGhleERpZ2l0VmFsdWUocVsxXSkgPDwg
NCkgfCBoZXhEaWdpdFZhbHVlKHFbMl0pOwotICAgICAgICAgICAgcSArPSAzOwotICAgICAgICB9
Ci0KLSAgICAgICAgLy8gRGVjb2RlIHRoZSBieXRlcyBpbnRvIFVuaWNvZGUgY2hhcmFjdGVycy4K
LSAgICAgICAgU3RyaW5nIGRlY29kZWQgPSAoZW5jb2RpbmcuaXNWYWxpZCgpID8gZW5jb2Rpbmcg
OiBVVEY4RW5jb2RpbmcoKSkuZGVjb2RlKGJ1ZmZlci5kYXRhKCksIHAgLSBidWZmZXIuZGF0YSgp
KTsKLSAgICAgICAgaWYgKGRlY29kZWQuaXNFbXB0eSgpKQotICAgICAgICAgICAgY29udGludWU7
Ci0KLSAgICAgICAgLy8gQnVpbGQgdXAgdGhlIHN0cmluZyB3aXRoIHdoYXQgd2UganVzdCBza2lw
cGVkIGFuZCB3aGF0IHdlIGp1c3QgZGVjb2RlZC4KLSAgICAgICAgcmVzdWx0LmFwcGVuZChzdHIu
Y2hhcmFjdGVycygpICsgZGVjb2RlZFBvc2l0aW9uLCBlbmNvZGVkUnVuUG9zaXRpb24gLSBkZWNv
ZGVkUG9zaXRpb24pOwotICAgICAgICByZXN1bHQuYXBwZW5kKGRlY29kZWQuY2hhcmFjdGVycygp
LCBkZWNvZGVkLmxlbmd0aCgpKTsKLSAgICAgICAgZGVjb2RlZFBvc2l0aW9uID0gZW5jb2RlZFJ1
bkVuZDsKLSAgICB9Ci0KLSAgICByZXN1bHQuYXBwZW5kKHN0ci5jaGFyYWN0ZXJzKCkgKyBkZWNv
ZGVkUG9zaXRpb24sIGxlbmd0aCAtIGRlY29kZWRQb3NpdGlvbik7Ci0KLSAgICByZXR1cm4gU3Ry
aW5nOjphZG9wdChyZXN1bHQpOworICAgIHJldHVybiBkZWNvZGVFc2NhcGVTZXF1ZW5jZXM8VVJM
RXNjYXBlU2VxdWVuY2U+KHN0ciwgZW5jb2RpbmcpOwogfQogCiAvLyBDYXV0aW9uOiBUaGlzIGZ1
bmN0aW9uIGRvZXMgbm90IGJvdW5kcyBjaGVjay4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvRGVjb2RlRXNjYXBlU2VxdWVuY2VzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9EZWNvZGVFc2NhcGVTZXF1ZW5jZXMuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvRGVjb2RlRXNjYXBlU2VxdWVuY2VzLmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IERhbmllbCBCYXRlcyAoZGJhdGVzQGludHVkYXRhLmNvbSkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRGVj
b2RlRXNjYXBlU2VxdWVuY2VzX2gKKyNkZWZpbmUgRGVjb2RlRXNjYXBlU2VxdWVuY2VzX2gKKwor
I2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCisj
aW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFNlZSA8aHR0cDovL2VuLndpa2lwZWRpYS5vcmcv
d2lraS9QZXJjZW50LWVuY29kaW5nI05vbi1zdGFuZGFyZF9pbXBsZW1lbnRhdGlvbnM+Lgorc3Ry
dWN0IFVuaWNvZGUxNkJpdEVzY2FwZVNlcXVlbmNlIHsKKyAgICBlbnVtIHsgc2l6ZSA9IDYgfTsg
Ly8gZS5nLiAldTI2QzQKKyAgICBzdGF0aWMgc2l6ZV90IGZpbmRJblN0cmluZyhjb25zdCBTdHJp
bmcmIHN0cmluZywgdW5zaWduZWQgc3RhcnQgPSAwKSB7IHJldHVybiBzdHJpbmcuZmluZCgiJXUi
LCBzdGFydCk7IH0KKyAgICBzdGF0aWMgYm9vbCBtYXRjaFN0cmluZ1ByZWZpeChjb25zdCBTdHJp
bmcmIHN0cmluZywgdW5zaWduZWQgc3RhcnQgPSAwKQorICAgIHsKKyAgICAgICAgaWYgKHN0cmlu
Zy5sZW5ndGgoKSAtIHN0YXJ0IDwgc2l6ZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgcmV0dXJuIHN0cmluZ1tzdGFydF0gPT0gJyUnICYmIHN0cmluZ1tzdGFydCArIDFdID09
ICd1JworICAgICAgICAgICAgJiYgV1RGOjppc0FTQ0lJSGV4RGlnaXQoc3RyaW5nW3N0YXJ0ICsg
Ml0pICYmIFdURjo6aXNBU0NJSUhleERpZ2l0KHN0cmluZ1tzdGFydCArIDNdKQorICAgICAgICAg
ICAgJiYgV1RGOjppc0FTQ0lJSGV4RGlnaXQoc3RyaW5nW3N0YXJ0ICsgNF0pICYmIFdURjo6aXNB
U0NJSUhleERpZ2l0KHN0cmluZ1tzdGFydCArIDVdKTsKKyAgICB9CisgICAgc3RhdGljIFN0cmlu
ZyBkZWNvZGVSdW4oY29uc3QgVUNoYXIqIHJ1biwgc2l6ZV90IHJ1bkxlbmd0aCwgY29uc3QgVGV4
dEVuY29kaW5nJikKKyAgICB7CisgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gZGVjb2RlIHdp
dGggcmVzcGVjdCB0byB0aGUgc3BlY2lmaWVkIGVuY29kaW5nIHNpbmNlIGVhY2gKKyAgICAgICAg
Ly8gJXUtZXNjYXBlIHNlcXVlbmNlIHJlcHJlc2VudHMgYSBVbmljb2RlIGNvZGUgcG9pbnQuCisg
ICAgICAgIHNpemVfdCBudW1TZXF1ZW5jZXMgPSBydW5MZW5ndGggLyBzaXplOworICAgICAgICBW
ZWN0b3I8VUNoYXIsIDUxMj4gYnVmZmVyOworICAgICAgICBidWZmZXIucmVzaXplKG51bVNlcXVl
bmNlcyk7CisgICAgICAgIFVDaGFyKiBwID0gYnVmZmVyLmRhdGEoKTsKKyAgICAgICAgd2hpbGUg
KG51bVNlcXVlbmNlcy0tKSB7CisgICAgICAgICAgICAqcCsrID0gKHRvQVNDSUlIZXhWYWx1ZShy
dW5bMl0pIDw8IDEyKSB8ICh0b0FTQ0lJSGV4VmFsdWUocnVuWzNdKSA8PCA4KSB8ICh0b0FTQ0lJ
SGV4VmFsdWUocnVuWzRdKSA8PCA0KSB8IHRvQVNDSUlIZXhWYWx1ZShydW5bNV0pOworICAgICAg
ICAgICAgcnVuICs9IHNpemU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFN0cmluZzo6YWRv
cHQoYnVmZmVyKTsKKyAgICB9Cit9OworCitzdHJ1Y3QgVVJMRXNjYXBlU2VxdWVuY2UgeworICAg
IGVudW0geyBzaXplID0gMyB9OyAvLyBlLmcuICU0MQorICAgIHN0YXRpYyBzaXplX3QgZmluZElu
U3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nLCB1bnNpZ25lZCBzdGFydCA9IDApIHsgcmV0dXJu
IHN0cmluZy5maW5kKCclJywgc3RhcnQpOyB9CisgICAgc3RhdGljIGJvb2wgbWF0Y2hTdHJpbmdQ
cmVmaXgoY29uc3QgU3RyaW5nJiBzdHJpbmcsIHVuc2lnbmVkIHN0YXJ0ID0gMCkKKyAgICB7Cisg
ICAgICAgIGlmIChzdHJpbmcubGVuZ3RoKCkgLSBzdGFydCA8IHNpemUpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBzdHJpbmdbc3RhcnRdID09ICclJyAmJiBXVEY6
OmlzQVNDSUlIZXhEaWdpdChzdHJpbmdbc3RhcnQgKyAxXSkgJiYgV1RGOjppc0FTQ0lJSGV4RGln
aXQoc3RyaW5nW3N0YXJ0ICsgMl0pOworICAgIH0KKyAgICBzdGF0aWMgU3RyaW5nIGRlY29kZVJ1
bihjb25zdCBVQ2hhciogcnVuLCBzaXplX3QgcnVuTGVuZ3RoLCBjb25zdCBUZXh0RW5jb2Rpbmcm
IGVuY29kaW5nKQorICAgIHsKKyAgICAgICAgdHlwZWRlZiBWZWN0b3I8Y2hhciwgNTEyPiBDaGFy
QnVmZmVyOworICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKENoYXJCdWZmZXIsIGJ1ZmZlciwg
KCkpOworCisgICAgICAgIHNpemVfdCBudW1TZXF1ZW5jZXMgPSBydW5MZW5ndGggLyBzaXplOwor
ICAgICAgICBidWZmZXIucmVzaXplKG51bVNlcXVlbmNlcyk7CisgICAgICAgIGNoYXIqIHAgPSBi
dWZmZXIuZGF0YSgpOworICAgICAgICB3aGlsZSAobnVtU2VxdWVuY2VzLS0pIHsKKyAgICAgICAg
ICAgICpwKysgPSAodG9BU0NJSUhleFZhbHVlKHJ1blsxXSkgPDwgNCkgfCB0b0FTQ0lJSGV4VmFs
dWUocnVuWzJdKTsKKyAgICAgICAgICAgIHJ1biArPSBzaXplOworICAgICAgICB9CisgICAgICAg
IHJldHVybiAoZW5jb2RpbmcuaXNWYWxpZCgpID8gZW5jb2RpbmcgOiBVVEY4RW5jb2RpbmcoKSku
ZGVjb2RlKGJ1ZmZlci5kYXRhKCksIHAgLSBidWZmZXIuZGF0YSgpKTsKKyAgICB9Cit9OworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBFc2NhcGVTZXF1ZW5jZT4KK1N0cmluZyBkZWNvZGVFc2NhcGVTZXF1
ZW5jZXMoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2Rpbmcp
Cit7CisgICAgVmVjdG9yPFVDaGFyPiByZXN1bHQ7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gc3Ry
aW5nLmxlbmd0aCgpOworICAgIHVuc2lnbmVkIGRlY29kZWRQb3NpdGlvbiA9IDA7CisgICAgdW5z
aWduZWQgc2VhcmNoUG9zaXRpb24gPSAwOworICAgIHNpemVfdCBlbmNvZGVkUnVuUG9zaXRpb247
CisKKyAgICB3aGlsZSAoKGVuY29kZWRSdW5Qb3NpdGlvbiA9IEVzY2FwZVNlcXVlbmNlOjpmaW5k
SW5TdHJpbmcoc3RyaW5nLCBzZWFyY2hQb3NpdGlvbikpICE9IG5vdEZvdW5kKSB7CisgICAgICAg
IHVuc2lnbmVkIGVuY29kZWRSdW5FbmQgPSBlbmNvZGVkUnVuUG9zaXRpb247CisgICAgICAgIHdo
aWxlIChsZW5ndGggLSBlbmNvZGVkUnVuRW5kID49IEVzY2FwZVNlcXVlbmNlOjpzaXplICYmIEVz
Y2FwZVNlcXVlbmNlOjptYXRjaFN0cmluZ1ByZWZpeChzdHJpbmcsIGVuY29kZWRSdW5FbmQpKQor
ICAgICAgICAgICAgZW5jb2RlZFJ1bkVuZCArPSBFc2NhcGVTZXF1ZW5jZTo6c2l6ZTsKKyAgICAg
ICAgc2VhcmNoUG9zaXRpb24gPSBlbmNvZGVkUnVuRW5kOworICAgICAgICBpZiAoZW5jb2RlZFJ1
bkVuZCA9PSBlbmNvZGVkUnVuUG9zaXRpb24pIHsKKyAgICAgICAgICAgICsrc2VhcmNoUG9zaXRp
b247CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIFN0cmluZyBk
ZWNvZGVkID0gRXNjYXBlU2VxdWVuY2U6OmRlY29kZVJ1bihzdHJpbmcuY2hhcmFjdGVycygpICsg
ZW5jb2RlZFJ1blBvc2l0aW9uLCBlbmNvZGVkUnVuRW5kIC0gZW5jb2RlZFJ1blBvc2l0aW9uLCBl
bmNvZGluZyk7CisgICAgICAgIGlmIChkZWNvZGVkLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgIHJlc3VsdC5hcHBlbmQoc3RyaW5nLmNoYXJhY3RlcnMoKSArIGRl
Y29kZWRQb3NpdGlvbiwgZW5jb2RlZFJ1blBvc2l0aW9uIC0gZGVjb2RlZFBvc2l0aW9uKTsKKyAg
ICAgICAgcmVzdWx0LmFwcGVuZChkZWNvZGVkLmNoYXJhY3RlcnMoKSwgZGVjb2RlZC5sZW5ndGgo
KSk7CisgICAgICAgIGRlY29kZWRQb3NpdGlvbiA9IGVuY29kZWRSdW5FbmQ7CisgICAgfQorICAg
IHJlc3VsdC5hcHBlbmQoc3RyaW5nLmNoYXJhY3RlcnMoKSArIGRlY29kZWRQb3NpdGlvbiwgbGVu
Z3RoIC0gZGVjb2RlZFBvc2l0aW9uKTsKKyAgICByZXR1cm4gU3RyaW5nOjphZG9wdChyZXN1bHQp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBEZWNvZGVFc2NhcGVT
ZXF1ZW5jZXNfaApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gOTQ1MDcpCisrKyBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzMCBAQAorMjAxMS0wOS0wNCAgRGFuaWVs
IEJhdGVzICA8ZGJhdGVzQHdlYmtpdC5vcmc+CisKKyAgICAgICAgWFNTIGZpbHRlciBieXBhc3Mg
dmlhIG5vbi1zdGFuZGFyZCBVUkwgZW5jb2RpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTY2NTg4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQWRkIHRlc3RzIGZvciBkZWNvZGluZyBub24tc3RhbmRhcmQg
MTYtYml0IFVuaWNvZGUgZXNjYXBlIHNlcXVlbmNlcy4KKworICAgICAgICBBbHNvIGFkZCBhIHRl
c3QgdG8gZW5zdXJlIHRoYXQgd2UgZG9uJ3QgY2F1c2UgYW4gYXNzZXJ0aW9uIGZhaWx1cmUgd2hl
bgorICAgICAgICBjYWxsaW5nIHdpbmRvdy5vcGVuKCIiKS4KKworICAgICAgICAqIGh0dHAvdGVz
dHMvc2VjdXJpdHkveHNzQXVkaXRvci9yZXNvdXJjZXMvZWNoby1pbnRlcnRhZy1kZWNvZGUtMTZi
aXQtdW5pY29kZS5wbDogQWRkZWQuCisgICAgICAgIChkZWNvZGUxNkJpdFVuaWNvZGVFc2NhcGVT
ZXF1ZW5jZXMpOgorICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3Jp
cHQtdGFnLXdpdGgtMTZiaXQtdW5pY29kZTItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiBodHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy13aXRoLTE2Yml0LXVu
aWNvZGUyLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVk
aXRvci9zY3JpcHQtdGFnLXdpdGgtMTZiaXQtdW5pY29kZTMtZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy13aXRo
LTE2Yml0LXVuaWNvZGUzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJp
dHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLXdpdGgtMTZiaXQtdW5pY29kZTQtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0
LXRhZy13aXRoLTE2Yml0LXVuaWNvZGU0Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVz
dHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLXdpdGgtMTZiaXQtdW5pY29kZTUtZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0
b3Ivc2NyaXB0LXRhZy13aXRoLTE2Yml0LXVuaWNvZGU1Lmh0bWw6IEFkZGVkLgorICAgICAgICAq
IGh0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLXdpdGgtZmFuY3ktdW5p
Y29kZS1leHBlY3RlZC50eHQ6IFVwZGF0ZWQgZXhwZWN0ZWQKKyAgICAgICAgcmVzdWx0IHNpbmNl
IHdlIG5vdyBwYXNzIHRoaXMgdGVzdC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L3hz
c0F1ZGl0b3Ivd2luZG93LW9wZW4td2l0aG91dC11cmwtc2hvdWxkLW5vdC1hc3NlcnQtZXhwZWN0
ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Iv
d2luZG93LW9wZW4td2l0aG91dC11cmwtc2hvdWxkLW5vdC1hc3NlcnQuaHRtbDogQWRkZWQuCisK
IDIwMTEtMDktMDQgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBGb3Jn
b3QgdG8gY2hlY2sgaW4gbmV3IHJlc3VsdHMgZm9yIGZhc3QvZXZlbnRzL2V2ZW50LWNyZWF0aW9u
Lmh0bWwKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9z
Y3JpcHQtdGFnLXdpdGgtMTZiaXQtdW5pY29kZTItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLXdp
dGgtMTZiaXQtdW5pY29kZTItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctd2l0aC0xNmJpdC11
bmljb2RlMi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMyBAQAorQ09OU09M
RSBNRVNTQUdFOiBsaW5lIDE6IFJlZnVzZWQgdG8gZXhlY3V0ZSBhIEphdmFTY3JpcHQgc2NyaXB0
LiBTb3VyY2UgY29kZSBvZiBzY3JpcHQgZm91bmQgd2l0aGluIHJlcXVlc3QuCisKKwpJbmRleDog
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctd2l0
aC0xNmJpdC11bmljb2RlMi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVz
dHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLXdpdGgtMTZiaXQtdW5pY29kZTIuaHRt
bAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVk
aXRvci9zY3JpcHQtdGFnLXdpdGgtMTZiaXQtdW5pY29kZTIuaHRtbAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwxNSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4K
K2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIuZHVtcEFzVGV4dCgpOworICBsYXlvdXRUZXN0Q29udHJvbGxlci5zZXRYU1NBdWRpdG9yRW5h
YmxlZCh0cnVlKTsKK30KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8aWZyYW1lIHNyYz0i
aHR0cDovL2xvY2FsaG9zdDo4MDAwL3NlY3VyaXR5L3hzc0F1ZGl0b3IvcmVzb3VyY2VzL2VjaG8t
aW50ZXJ0YWctZGVjb2RlLTE2Yml0LXVuaWNvZGUucGw/cT0lMjV1MDAzYyUyNXUwMDczJTI1dTAw
NjMlMjV1MDA3MiUyNXUwMDY5JTI1dTAwNzAlMjV1MDA3NCUyNXUwMDNlJTI1dTAwNjElMjV1MDA2
YyUyNXUwMDY1JTI1dTAwNzIlMjV1MDA3NCUyNXUwMDI4JTI1dTAwMmYlMjV1MDA1OCUyNXUwMDUz
JTI1dTAwNTMlMjV1MDAyZiUyNXUwMDI5JTI1dTAwM2MlMjV1MDAyZiUyNXUwMDczJTI1dTAwNjMl
MjV1MDA3MiUyNXUwMDY5JTI1dTAwNzAlMjV1MDA3NCUyNXUwMDNlIj4KKzwvaWZyYW1lPgorPC9i
b2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NB
dWRpdG9yL3NjcmlwdC10YWctd2l0aC0xNmJpdC11bmljb2RlMy1leHBlY3RlZC50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3Njcmlw
dC10YWctd2l0aC0xNmJpdC11bmljb2RlMy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy13aXRo
LTE2Yml0LXVuaWNvZGUzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBA
CitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMTogUmVmdXNlZCB0byBleGVjdXRlIGEgSmF2YVNjcmlw
dCBzY3JpcHQuIFNvdXJjZSBjb2RlIG9mIHNjcmlwdCBmb3VuZCB3aXRoaW4gcmVxdWVzdC4KKwor
CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0
LXRhZy13aXRoLTE2Yml0LXVuaWNvZGUzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctd2l0aC0xNmJpdC11bmlj
b2RlMy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0
eS94c3NBdWRpdG9yL3NjcmlwdC10YWctd2l0aC0xNmJpdC11bmljb2RlMy5odG1sCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDE1IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8
c2NyaXB0PgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICBsYXlvdXRUZXN0
Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgIGxheW91dFRlc3RDb250cm9sbGVyLnNldFhTU0F1
ZGl0b3JFbmFibGVkKHRydWUpOworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxpZnJh
bWUgc3JjPSJodHRwOi8vbG9jYWxob3N0OjgwMDAvc2VjdXJpdHkveHNzQXVkaXRvci9yZXNvdXJj
ZXMvZWNoby1pbnRlcnRhZy5wbD9xPTxzY3JpcHQ+JTI1MjUyNXUwMDYxbGVydCgvWFNTLyk8L3Nj
cmlwdD4iPgorPC9pZnJhbWU+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy13aXRoLTE2Yml0LXVuaWNv
ZGU0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3Nl
Y3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy13aXRoLTE2Yml0LXVuaWNvZGU0LWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNz
QXVkaXRvci9zY3JpcHQtdGFnLXdpdGgtMTZiaXQtdW5pY29kZTQtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDMgQEAKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAxOiBSZWZ1c2Vk
IHRvIGV4ZWN1dGUgYSBKYXZhU2NyaXB0IHNjcmlwdC4gU291cmNlIGNvZGUgb2Ygc2NyaXB0IGZv
dW5kIHdpdGhpbiByZXF1ZXN0LgorCisKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2Vj
dXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLXdpdGgtMTZiaXQtdW5pY29kZTQuaHRtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2Ny
aXB0LXRhZy13aXRoLTE2Yml0LXVuaWNvZGU0Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy13aXRoLTE2Yml0
LXVuaWNvZGU0Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTUgQEAKKzwhRE9DVFlQRSBo
dG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CitpZiAod2luZG93LmxheW91dFRlc3RDb250
cm9sbGVyKSB7CisgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgbGF5b3V0
VGVzdENvbnRyb2xsZXIuc2V0WFNTQXVkaXRvckVuYWJsZWQodHJ1ZSk7Cit9Cis8L3NjcmlwdD4K
KzwvaGVhZD4KKzxib2R5PgorPGlmcmFtZSBzcmM9Imh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC9zZWN1
cml0eS94c3NBdWRpdG9yL3Jlc291cmNlcy9lY2hvLWludGVydGFnLWRlY29kZS0xNmJpdC11bmlj
b2RlLnBsP3E9JTI1dTAwM2MlMjV1MDA3MyUyNXUwMDYzJTI1dTAwNzIlMjV1MDA2OSUyNXUwMDcw
JTI1dTAwNzQlMjV1MDAzZSUyNXUwMDYxJTI1dTAwNmMlMjV1MDA2NSUyNXUwMDcyJTI1dTAwNzQl
MjV1MDAyOCUyNXUwMDJmJTI1dTAwNTglMjV1MDA1MyUyNXUwMDUzJTI1dTI2MjAlMjV1MDAyZiUy
NXUwMDI5JTI1dTAwM2MlMjV1MDAyZiUyNXUwMDczJTI1dTAwNjMlMjV1MDA3MiUyNXUwMDY5JTI1
dTAwNzAlMjV1MDA3NCUyNXUwMDNlIj4KKzwvaWZyYW1lPgorPC9ib2R5PgorPC9odG1sPgpJbmRl
eDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWct
d2l0aC0xNmJpdC11bmljb2RlNS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctd2l0aC0xNmJpdC11
bmljb2RlNS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy13aXRoLTE2Yml0LXVuaWNvZGU1LWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACitDT05TT0xFIE1FU1NBR0U6
IGxpbmUgMTogUmVmdXNlZCB0byBleGVjdXRlIGEgSmF2YVNjcmlwdCBzY3JpcHQuIFNvdXJjZSBj
b2RlIG9mIHNjcmlwdCBmb3VuZCB3aXRoaW4gcmVxdWVzdC4KKworCkluZGV4OiBMYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy13aXRoLTE2Yml0LXVu
aWNvZGU1Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0
eS94c3NBdWRpdG9yL3NjcmlwdC10YWctd2l0aC0xNmJpdC11bmljb2RlNS5odG1sCShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3Njcmlw
dC10YWctd2l0aC0xNmJpdC11bmljb2RlNS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1
IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0PgoraWYgKHdpbmRv
dy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNU
ZXh0KCk7CisgIGxheW91dFRlc3RDb250cm9sbGVyLnNldFhTU0F1ZGl0b3JFbmFibGVkKHRydWUp
OworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxpZnJhbWUgc3JjPSJodHRwOi8vbG9j
YWxob3N0OjgwMDAvc2VjdXJpdHkveHNzQXVkaXRvci9yZXNvdXJjZXMvZWNoby1pbnRlcnRhZy1k
ZWNvZGUtMTZiaXQtdW5pY29kZS5wbD9xPTxzY3JpcHQ+YWxlcnQoJyV1MDA1OCV1MDA1MyV1MDA1
MyV1MDAyMCV1MDVkMCV1MDVkMSV1MDVkOCV1MDVkNyV1MDVkNCV1MDAyMCV1MDVlNCV1MDVkMiV1
MDVkOSV1MDVlMiV1MDVkNSV1MDVlYS0ldThkZTgldTdhZDkldTVmMGYldTgxMWEldTY3MmMldTY1
M2IldTUxZmInKTwvc2NyaXB0PiI+Cis8L2lmcmFtZT4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6
IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLXdp
dGgtZmFuY3ktdW5pY29kZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctd2l0aC1mYW5jeS11bmlj
b2RlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gOTQ1MDcpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy13aXRoLWZhbmN5LXVuaWNvZGUtZXhw
ZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDIgKzEsMyBAQAotQUxFUlQ6IC9YU1MvCitD
T05TT0xFIE1FU1NBR0U6IGxpbmUgMTogUmVmdXNlZCB0byBleGVjdXRlIGEgSmF2YVNjcmlwdCBz
Y3JpcHQuIFNvdXJjZSBjb2RlIG9mIHNjcmlwdCBmb3VuZCB3aXRoaW4gcmVxdWVzdC4KKwogCklu
ZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivd2luZG93LW9w
ZW4td2l0aG91dC11cmwtc2hvdWxkLW5vdC1hc3NlcnQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci93aW5kb3ctb3Bl
bi13aXRob3V0LXVybC1zaG91bGQtbm90LWFzc2VydC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivd2luZG93LW9w
ZW4td2l0aG91dC11cmwtc2hvdWxkLW5vdC1hc3NlcnQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDMgQEAKK1RoaXMgdGVzdCBQQVNTRUQgaWYgd2UgZG9uJ3QgdHJpZ2dlciBh
biBhc3NlcnRpb24gZmFpbHVyZSB3aGVuIG9wZW5pbmcgYSBwb3AtdXAgd2luZG93IHdpdGhvdXQg
YSBVUkwuIFRvIHJ1biB0aGlzIHRlc3QgYnkgaGFuZCwgZW5zdXJlIHRoYXQgcG9wLXVwIHdpbmRv
d3MgYXJlbid0IGJsb2NrZWQgYmVmb3JlIGxvYWRpbmcgdGhpcyBwYWdlLgorCitQQVNTRUQKSW5k
ZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci93aW5kb3ctb3Bl
bi13aXRob3V0LXVybC1zaG91bGQtbm90LWFzc2VydC5odG1sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci93aW5kb3ctb3Blbi13aXRob3V0
LXVybC1zaG91bGQtbm90LWFzc2VydC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3dpbmRvdy1vcGVuLXdpdGhvdXQtdXJsLXNo
b3VsZC1ub3QtYXNzZXJ0Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDQgQEAKKzwhRE9D
VFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CitpZiAod2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOwor
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLnNldFhTU0F1ZGl0b3JFbmFibGVkKHRydWUpOworICAg
IGxheW91dFRlc3RDb250cm9sbGVyLnNldENhbk9wZW5XaW5kb3dzKCk7CisgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIuc2V0Q2xvc2VSZW1haW5pbmdXaW5kb3dzV2hlbkNvbXBsZXRlKHRydWUpOwor
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKK30KKzwvc2NyaXB0Pgor
PC9oZWFkPgorPGJvZHk+Cis8cD5UaGlzIHRlc3QgUEFTU0VEIGlmIHdlIGRvbid0IHRyaWdnZXIg
YW4gYXNzZXJ0aW9uIGZhaWx1cmUgd2hlbiBvcGVuaW5nIGEgcG9wLXVwIHdpbmRvdyB3aXRob3V0
IGEgVVJMLiBUbyBydW4gdGhpcyB0ZXN0IGJ5IGhhbmQsIGVuc3VyZSB0aGF0IHBvcC11cCB3aW5k
b3dzIGFyZW4ndCBibG9ja2VkIGJlZm9yZSBsb2FkaW5nIHRoaXMgcGFnZS48L3A+Cis8cHJlIGlk
PSJjb25zb2xlIj48L3ByZT4KKzxzY3JpcHQ+CitmdW5jdGlvbiBmaW5pc2goKQoreworICAgIGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlIikuaW5uZXJUZXh0ID0gIlBBU1NFRCI7Cisg
ICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCitmdW5jdGlvbiBydW5UZXN0KCkKK3sKKyAgICB2
YXIgY2hpbGRXaW5kb3cgPSB3aW5kb3cub3BlbigiIik7CisgICAgaWYgKCFjaGlsZFdpbmRvdykg
eworICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpLmlubmVyVGV4dCA9
ICJGQUlMRUQgdG8gb3BlbiBwb3AtdXAgd2luZG93LiBFbnN1cmUgdGhhdCBwb3AtdXAgd2luZG93
cyBhcmVuJ3QgYmxvY2tlZC4iOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY2hpbGRX
aW5kb3cuZG9jdW1lbnQub3BlbigpOworICAgIGNoaWxkV2luZG93LmRvY3VtZW50LndyaXRlKCJQ
QVNTRUQiKTsKKworICAgIDwhLS0gQnJlYWsgdXAgdGhlIEhUTUwgU2NyaXB0IEVsZW1lbnQgc28g
aXQgaXMgbm90IGludGVycHJldGVkIGJ5IEhUTUw0IHBhcnNlcnMgYXMgcGVyIDxodHRwOi8vd3d3
LnczLm9yZy9UUi9odG1sNC90eXBlcy5odG1sI3R5cGUtY2RhdGE+LiAtLT4KKyAgICBjaGlsZFdp
bmRvdy5kb2N1bWVudC53cml0ZSgiPHNjciIgKyAiaXB0PndpbmRvdy5vcGVuZXIuZmluaXNoKCk8
IiArICIvc2NyaXB0PiIpOworCisgICAgY2hpbGRXaW5kb3cuZG9jdW1lbnQuY2xvc2UoKTsKK30K
K3J1blRlc3QoKTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3Jlc291cmNlcy9lY2hvLWludGVydGFn
LWRlY29kZS0xNmJpdC11bmljb2RlLnBsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAv
dGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9yZXNvdXJjZXMvZWNoby1pbnRlcnRhZy1kZWNvZGUt
MTZiaXQtdW5pY29kZS5wbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMv
c2VjdXJpdHkveHNzQXVkaXRvci9yZXNvdXJjZXMvZWNoby1pbnRlcnRhZy1kZWNvZGUtMTZiaXQt
dW5pY29kZS5wbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMiBAQAorIyEvdXNyL2Jpbi9wZXJs
IC13VAordXNlIHN0cmljdDsKK3VzZSBDR0k7CisKK215ICRjZ2kgPSBuZXcgQ0dJOworCisjIFNl
ZSA8aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9QZXJjZW50LWVuY29kaW5nI05vbi1zdGFu
ZGFyZF9pbXBsZW1lbnRhdGlvbnM+Lgorc3ViIGRlY29kZTE2Qml0VW5pY29kZUVzY2FwZVNlcXVl
bmNlcworeworICAgIG15ICgkc3RyKSA9IEBfOworICAgICRzdHIgPX4gcy8ldShbMC05QS1aYS16
XXsxLDR9KS9Ae1tjaHIoaGV4KCIweCQxIikpXX0vZzsgIyBjaHIoKSBzdXBwb3J0cyBVbmljb2Rl
LgorICAgIHJldHVybiAkc3RyOworfQorCitwcmludCAiQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7
IGNoYXJzZXQ9VVRGLThcblxuIjsKKworcHJpbnQgIjwhRE9DVFlQRSBodG1sPlxuIjsKK3ByaW50
ICI8aHRtbD5cbiI7CitwcmludCAiPGJvZHk+XG4iOworcHJpbnQgZGVjb2RlMTZCaXRVbmljb2Rl
RXNjYXBlU2VxdWVuY2VzKCRjZ2ktPnBhcmFtKCdxJykpOworcHJpbnQgIjwvYm9keT5cbiI7Citw
cmludCAiPC9odG1sPlxuIjsKClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2h0dHAv
dGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9yZXNvdXJjZXMvZWNoby1pbnRlcnRhZy1kZWNvZGUt
MTZiaXQtdW5pY29kZS5wbApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoK
Cg==
</data>
<flag name="review"
          id="102693"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106817</attachid>
            <date>2011-09-08 17:09:33 -0700</date>
            <delta_ts>2011-09-08 17:13:28 -0700</delta_ts>
            <desc>Patch and layout tests</desc>
            <filename>Bug66588_12.patch</filename>
            <type>text/plain</type>
            <size>39451</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk0ODE3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDggQEAKKzIwMTEtMDktMDggIERhbmllbCBC
YXRlcyAgPGRiYXRlc0B3ZWJraXQub3JnPgorCisgICAgICAgIFhTUyBmaWx0ZXIgYnlwYXNzIHZp
YSBub24tc3RhbmRhcmQgVVJMIGVuY29kaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD02NjU4OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFRlc3RzOiBodHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Iv
c2NyaXB0LXRhZy13aXRoLTE2Yml0LXVuaWNvZGUtc3Vycm9nYXRlLXBhaXIuaHRtbAorICAgICAg
ICAgICAgICAgaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctd2l0aC0x
NmJpdC11bmljb2RlLmh0bWwKKyAgICAgICAgICAgICAgIGh0dHAvdGVzdHMvc2VjdXJpdHkveHNz
QXVkaXRvci9zY3JpcHQtdGFnLXdpdGgtMTZiaXQtdW5pY29kZTIuaHRtbAorICAgICAgICAgICAg
ICAgaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctd2l0aC0xNmJpdC11
bmljb2RlMy5odG1sCisgICAgICAgICAgICAgICBodHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0
b3Ivc2NyaXB0LXRhZy13aXRoLTE2Yml0LXVuaWNvZGU0Lmh0bWwKKyAgICAgICAgICAgICAgIGh0
dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLXdpdGgtMTZiaXQtdW5pY29k
ZTUuaHRtbAorICAgICAgICAgICAgICAgaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3Nj
cmlwdC10YWctd2l0aC10aHJlZS10aW1lcy11cmwtZW5jb2RlZC0xNmJpdC11bmljb2RlLmh0bWwK
KyAgICAgICAgICAgICAgIGh0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci93aW5kb3ctb3Bl
bi13aXRob3V0LXVybC1zaG91bGQtbm90LWFzc2VydC5odG1sCisKKyAgICAgICAgSW1wbGVtZW50
IHN1cHBvcnQgZm9yIGRlY29kaW5nIG5vbi1zdGFuZGFyZCAxNi1iaXQgVW5pY29kZSBlc2NhcGUg
c2VxdWVuY2VzIG9mCisgICAgICAgIHRoZSBmb3JtICV1MjZDNCBhcyBkZXNjcmliZWQgaW4gPGh0
dHA6Ly93d3cudzMub3JnL0ludGVybmF0aW9uYWwvaXJpLWVkaXQvZHJhZnQtZHVlcnN0LWlyaS5o
dG1sI2FuY2hvcjI5Pi4KKworICAgICAgICBTZWUgYWxzbyA8aHR0cDovL2VuLndpa2lwZWRpYS5v
cmcvd2lraS9QZXJjZW50LWVuY29kaW5nI05vbi1zdGFuZGFyZF9pbXBsZW1lbnRhdGlvbnM+Lgor
CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbTogQWRkZWQgRGVjb2RlRXNjYXBlU2VxdWVu
Y2VzLmguCisgICAgICAgICogV2ViQ29yZS5neXBpOiBEaXR0by4KKyAgICAgICAgKiBXZWJDb3Jl
LnBybzogRGl0dG8uCisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6IERp
dHRvLgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogRGl0dG8u
CisgICAgICAgICogaHRtbC9wYXJzZXIvWFNTQXVkaXRvci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpkZWNvZGUxNkJpdFVuaWNvZGVFc2NhcGVTZXF1ZW5jZXMpOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OmRlY29kZVN0YW5kYXJkVVJMRXNjYXBlU2VxdWVuY2VzKTogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpmdWxseURlY29kZVN0cmluZyk6IE1vZGlmaWVkIHRvIGNhbGwgZGVjb2RlMTZC
aXRVbmljb2RlRXNjYXBlU2VxdWVuY2VzKCkuCisgICAgICAgIChXZWJDb3JlOjpYU1NBdWRpdG9y
Ojppbml0KTogTW9kaWZpZWQgdG8gcmV0dXJuIGVhcmx5IHdoZW4gdGhlIFVSTCBvZiB0aGUgZG9j
dW1lbnQKKyAgICAgICAgaXMgdGhlIGVtcHR5IHN0cmluZy4gVGhpcyBjYW4gaGFwcGVuIHdoZW4g
b3BlbmluZyBhIG5ldyBicm93c2VyIHdpbmRvdyBvciBjYWxsaW5nCisgICAgICAgIHdpbmRvdy5v
cGVuKCIiKS4KKyAgICAgICAgKiBwbGF0Zm9ybS9LVVJMLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyk6IEFic3RyYWN0ZWQgY29kZSBpbnRvIHRlbXBsYXRl
LWZ1bmN0aW9uIGRlY29kZUVzY2FwZVNlcXVlbmNlcygpLgorICAgICAgICBUaGlzIGZ1bmN0aW9u
IGp1c3QgY2FsbHMgZGVjb2RlRXNjYXBlU2VxdWVuY2VzPFVSTEVzY2FwZVNlcXVlbmNlPigpLgor
ICAgICAgICAqIHBsYXRmb3JtL3RleHQvRGVjb2RlRXNjYXBlU2VxdWVuY2VzLmg6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6VW5pY29kZTE2Qml0RXNjYXBlU2VxdWVuY2U6OmZpbmRJblN0cmlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpVbmljb2RlMTZCaXRFc2NhcGVTZXF1ZW5jZTo6bWF0Y2hT
dHJpbmdQcmVmaXgpOgorICAgICAgICAoV2ViQ29yZTo6VW5pY29kZTE2Qml0RXNjYXBlU2VxdWVu
Y2U6OmRlY29kZVJ1bik6CisgICAgICAgIChXZWJDb3JlOjpVUkxFc2NhcGVTZXF1ZW5jZTo6Zmlu
ZEluU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlVSTEVzY2FwZVNlcXVlbmNlOjptYXRjaFN0
cmluZ1ByZWZpeCk6CisgICAgICAgIChXZWJDb3JlOjpVUkxFc2NhcGVTZXF1ZW5jZTo6ZGVjb2Rl
UnVuKToKKyAgICAgICAgKFdlYkNvcmU6OmRlY29kZUVzY2FwZVNlcXVlbmNlcyk6CisKIDIwMTEt
MDktMDggIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBTZWNvbmQg
YXR0ZW1wdCB0byBmaXggQ2hyb21pdW0gYnVpbGQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9HTlVt
YWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0JKHJldmlzaW9uIDk0ODA2KQorKysgU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUu
bGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAtMjgyMSw2ICsyODIxLDcgQEAgd2ViY29yZV9zb3Vy
Y2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0LmggXAog
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaVJlc29sdmVyLmggXAogCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaVJ1bkxpc3QuaCBcCisJU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9EZWNvZGVFc2NhcGVTZXF1ZW5jZXMuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9IeXBoZW5hdGlvbi5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvSHlwaGVuYXRpb24uaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9MaW5lQnJl
YWtJdGVyYXRvclBvb2xJQ1UuaCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA5NDgw
NikKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtODQ2
LDYgKzg0Niw3IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vdGV4dC9CaWRpUnVuTGlzdC5oJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0LmgnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL3RleHQvQmlkaVJlc29sdmVyLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL3Rl
eHQvRGVjb2RlRXNjYXBlU2VxdWVuY2VzLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL3RleHQv
TGluZUJyZWFrSXRlcmF0b3JQb29sSUNVLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL3RleHQv
TGluZUVuZGluZy5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS90ZXh0L1BsYXRmb3JtU3RyaW5n
LmgnLApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDk0ODA2KQorKysgU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTIxMTIsNiArMjExMiw3IEBAIEhFQURF
UlMgKz0gXAogICAgIHBsYXRmb3JtL3NxbC9TUUxWYWx1ZS5oIFwKICAgICBwbGF0Zm9ybS90ZXh0
L0Jhc2U2NC5oIFwKICAgICBwbGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0LmggXAorICAgIHBsYXRm
b3JtL3RleHQvRGVjb2RlRXNjYXBlU2VxdWVuY2VzLmggXAogICAgIHBsYXRmb3JtL3RleHQvSHlw
aGVuYXRpb24uaCBcCiAgICAgcGxhdGZvcm0vdGV4dC9RdW90ZWRQcmludGFibGUuaCBcCiAgICAg
cGxhdGZvcm0vdGV4dC9xdC9UZXh0Q29kZWNRdC5oIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA5NDgwNikKKysrIFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC0zMTU0OSw2ICszMTU0OSwxMCBAQAogCQkJCQk+CiAJCQkJPC9GaWxlPgogCQkJCTxGaWxlCisJ
CQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cdGV4dFxEZWNvZGVFc2NhcGVTZXF1ZW5jZXMu
aCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XHBsYXRmb3JtXHRleHRcSHlwaGVuYXRpb24uaCIKIAkJCQkJPgogCQkJCTwvRmlsZT4KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDk0ODA2KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01NDQ5LDYgKzU0NDksNyBAQAogCQlDRTU0
RkQzODEwMTZEOUE2MDA4QjQ0QzggLyogU2NyaXB0U291cmNlUHJvdmlkZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENFNTRGRDM3MTAxNkQ5QTYwMDhC
NDRDOCAvKiBTY3JpcHRTb3VyY2VQcm92aWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCUNFQTM5NDlDMTFENDVDREEwMDMwOTRDRiAvKiBTdGF0
aWNIYXNoU2V0Tm9kZUxpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQ0VBMzk0OUExMUQ0NUNEQTAwMzA5NENGIC8qIFN0YXRpY0hhc2hTZXROb2Rl
TGlzdC5jcHAgKi87IH07CiAJCUNFQTM5NDlEMTFENDVDREEwMDMwOTRDRiAvKiBTdGF0aWNIYXNo
U2V0Tm9kZUxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IENFQTM5NDlCMTFENDVDREEwMDMwOTRDRiAvKiBTdGF0aWNIYXNoU2V0Tm9kZUxpc3QuaCAq
LzsgfTsKKwkJQ0VDQ0ZDM0IxNDE5NzNENTAwMkEwQUMxIC8qIERlY29kZUVzY2FwZVNlcXVlbmNl
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0VDQ0ZD
M0ExNDE5NzNENTAwMkEwQUMxIC8qIERlY29kZUVzY2FwZVNlcXVlbmNlcy5oICovOyB9OwogCQlD
RUY0MThDRTExNzk2NzhDMDA5RDExMkMgLyogVmlld3BvcnRBcmd1bWVudHMuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0VGNDE4Q0MxMTc5Njc4QzAw
OUQxMTJDIC8qIFZpZXdwb3J0QXJndW1lbnRzLmNwcCAqLzsgfTsKIAkJQ0VGNDE4Q0YxMTc5Njc4
QzAwOUQxMTJDIC8qIFZpZXdwb3J0QXJndW1lbnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRUY0MThDRDExNzk2NzhDMDA5RDExMkMgLyogVmlld3Bv
cnRBcmd1bWVudHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlEMDAwRUJBMjExQkRBRkQ0MDBDNDc3MjYgLyogRnJhbWVMb2FkZXJTdGF0ZU1hY2hp
bmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDAw
MEVCQTAxMUJEQUZENDAwQzQ3NzI2IC8qIEZyYW1lTG9hZGVyU3RhdGVNYWNoaW5lLmNwcCAqLzsg
fTsKQEAgLTEyMjA4LDYgKzEyMjA5LDcgQEAKIAkJQ0U1NEZEMzcxMDE2RDlBNjAwOEI0NEM4IC8q
IFNjcmlwdFNvdXJjZVByb3ZpZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNjcmlwdFNvdXJjZVByb3ZpZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNF
QTM5NDlBMTFENDVDREEwMDMwOTRDRiAvKiBTdGF0aWNIYXNoU2V0Tm9kZUxpc3QuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RhdGljSGFzaFNldE5vZGVMaXN0LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0VBMzk0OUIxMUQ0NUNEQTAwMzA5NENG
IC8qIFN0YXRpY0hhc2hTZXROb2RlTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTdGF0aWNIYXNoU2V0Tm9kZUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQ0VDQ0ZDM0ExNDE5NzNENTAwMkEwQUMxIC8qIERlY29kZUVzY2FwZVNlcXVlbmNlcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZWNvZGVFc2NhcGVTZXF1ZW5jZXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0VGNDE4Q0MxMTc5Njc4QzAwOUQxMTJDIC8q
IFZpZXdwb3J0QXJndW1lbnRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFZpZXdwb3J0QXJndW1lbnRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
Q0VGNDE4Q0QxMTc5Njc4QzAwOUQxMTJDIC8qIFZpZXdwb3J0QXJndW1lbnRzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpZXdwb3J0QXJndW1lbnRzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUQwMDBFQkEwMTFCREFGRDQwMEM0NzcyNiAvKiBGcmFtZUxvYWRl
clN0YXRlTWFjaGluZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBG
cmFtZUxvYWRlclN0YXRlTWFjaGluZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0xODM4NCw2ICsxODM4Niw3IEBACiAJCQkJQjJDM0Q5RjMwRDAwNkMxRDAwRUY2RjI2IC8qIEJp
ZGlDb250ZXh0LmggKi8sCiAJCQkJQjJDM0Q5RjQwRDAwNkMxRDAwRUY2RjI2IC8qIEJpZGlSZXNv
bHZlci5oICovLAogCQkJCUE4QzQwMjkyMTM0OEIyMjIwMDYzRjFFNSAvKiBCaWRpUnVuTGlzdC5o
ICovLAorCQkJCUNFQ0NGQzNBMTQxOTczRDUwMDJBMEFDMSAvKiBEZWNvZGVFc2NhcGVTZXF1ZW5j
ZXMuaCAqLywKIAkJCQkzNzVDRDIzMTExOUQ0M0M4MDBBMkE4NTkgLyogSHlwaGVuYXRpb24uaCAq
LywKIAkJCQlBNUFCQjc4NjEzQjkwNEJDMDBGMTk3RTMgLyogTGluZUJyZWFrSXRlcmF0b3JQb29s
SUNVLmggKi8sCiAJCQkJODlCNUVBOUYxMUU4MDAzRDAwRjIzNjdFIC8qIExpbmVFbmRpbmcuY3Bw
ICovLApAQCAtMjM0NzYsNiArMjM0NzksNyBAQAogCQkJCTFBOTI3RkQyMTQxNkExNUIwMDNBODND
OCAvKiBucGFwaS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE5MjdGRDMxNDE2QTE1QjAwM0E4M0M4
IC8qIG5wcnVudGltZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE5MjdGRDQxNDE2QTE1QjAwM0E4
M0M4IC8qIG5wdHlwZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCUNFQ0NGQzNCMTQxOTczRDUwMDJB
MEFDMSAvKiBEZWNvZGVFc2NhcGVTZXF1ZW5jZXMuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJ
CXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvWFNTQXVkaXRvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvWFNTQXVkaXRvci5jcHAJKHJldmlzaW9uIDk0ODA2KQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvWFNTQXVkaXRvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDExIEFkYW0gQmFydGgu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgRGFuaWVsIEJhdGVz
IChkYmF0ZXNAaW50dWRhdGEuY29tKS4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMjgsNiArMjksNyBAQAogCiAjaW5jbHVkZSAiQ29uc29sZS5oIgogI2luY2x1ZGUgIkRPTVdp
bmRvdy5oIgorI2luY2x1ZGUgIkRlY29kZUVzY2FwZVNlcXVlbmNlcy5oIgogI2luY2x1ZGUgIkRv
Y3VtZW50LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZS5o
IgpAQCAtMTE1LDIwICsxMTcsMjkgQEAgc3RhdGljIGJvb2wgY29udGFpbnNKYXZhU2NyaXB0VVJM
KGNvbnN0IAogICAgIHJldHVybiBlcXVhbElnbm9yaW5nQ2FzZSh2YWx1ZS5kYXRhKCkgKyBpLCBq
YXZhU2NyaXB0U2NoZW1lLCBsZW5ndGhPZkphdmFTY3JpcHRTY2hlbWUpOwogfQogCitzdGF0aWMg
aW5saW5lIFN0cmluZyBkZWNvZGUxNkJpdFVuaWNvZGVFc2NhcGVTZXF1ZW5jZXMoY29uc3QgU3Ry
aW5nJiBzdHJpbmcpCit7CisgICAgLy8gTm90ZSwgdGhlIGVuY29kaW5nIGlzIGlnbm9yZWQgc2lu
Y2UgZWFjaCAldS1lc2NhcGUgc2VxdWVuY2UgcmVwcmVzZW50cyBhIFVURi0xNiBjb2RlIHVuaXQu
CisgICAgcmV0dXJuIGRlY29kZUVzY2FwZVNlcXVlbmNlczxVbmljb2RlMTZCaXRFc2NhcGVTZXF1
ZW5jZT4oc3RyaW5nLCBVVEY4RW5jb2RpbmcoKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgU3RyaW5n
IGRlY29kZVN0YW5kYXJkVVJMRXNjYXBlU2VxdWVuY2VzKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBj
b25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nKQoreworICAgIC8vIFdlIHVzZSBkZWNvZGVFc2Nh
cGVTZXF1ZW5jZXMoKSBpbnN0ZWFkIG9mIGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcygpIChkZWNs
YXJlZCBpbiBLVVJMLmgpIHRvCisgICAgLy8gYXZvaWQgcGxhdGZvcm0tc3BlY2lmaWMgVVJMIGRl
Y29kaW5nIGRpZmZlcmVuY2VzIChlLmcuIEtVUkxHb29nbGUpLgorICAgIHJldHVybiBkZWNvZGVF
c2NhcGVTZXF1ZW5jZXM8VVJMRXNjYXBlU2VxdWVuY2U+KHN0cmluZywgZW5jb2RpbmcpOworfQor
CiBzdGF0aWMgU3RyaW5nIGZ1bGx5RGVjb2RlU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBj
b25zdCBUZXh0UmVzb3VyY2VEZWNvZGVyKiBkZWNvZGVyKQogeworICAgIGNvbnN0IFRleHRFbmNv
ZGluZyYgZW5jb2RpbmcgPSBkZWNvZGVyID8gZGVjb2Rlci0+ZW5jb2RpbmcoKSA6IFVURjhFbmNv
ZGluZygpOwogICAgIHNpemVfdCBvbGRXb3JraW5nU3RyaW5nTGVuZ3RoOwogICAgIFN0cmluZyB3
b3JraW5nU3RyaW5nID0gc3RyaW5nOwogICAgIGRvIHsKICAgICAgICAgb2xkV29ya2luZ1N0cmlu
Z0xlbmd0aCA9IHdvcmtpbmdTdHJpbmcubGVuZ3RoKCk7Ci0gICAgICAgIHdvcmtpbmdTdHJpbmcg
PSBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMod29ya2luZ1N0cmluZyk7CisgICAgICAgIHdvcmtp
bmdTdHJpbmcgPSBkZWNvZGUxNkJpdFVuaWNvZGVFc2NhcGVTZXF1ZW5jZXMoZGVjb2RlU3RhbmRh
cmRVUkxFc2NhcGVTZXF1ZW5jZXMod29ya2luZ1N0cmluZywgZW5jb2RpbmcpKTsKICAgICB9IHdo
aWxlICh3b3JraW5nU3RyaW5nLmxlbmd0aCgpIDwgb2xkV29ya2luZ1N0cmluZ0xlbmd0aCk7Ci0g
ICAgaWYgKGRlY29kZXIpIHsKLSAgICAgICAgQ1N0cmluZyB3b3JraW5nU3RyaW5nVVRGOCA9IHdv
cmtpbmdTdHJpbmcudXRmOCgpOwotICAgICAgICBTdHJpbmcgZGVjb2RlZFN0cmluZyA9IGRlY29k
ZXItPmVuY29kaW5nKCkuZGVjb2RlKHdvcmtpbmdTdHJpbmdVVEY4LmRhdGEoKSwgd29ya2luZ1N0
cmluZ1VURjgubGVuZ3RoKCkpOwotICAgICAgICBpZiAoIWRlY29kZWRTdHJpbmcuaXNFbXB0eSgp
KQotICAgICAgICAgICAgd29ya2luZ1N0cmluZyA9IGRlY29kZWRTdHJpbmc7Ci0gICAgfQorICAg
IEFTU0VSVCghd29ya2luZ1N0cmluZy5pc0VtcHR5KCkpOwogICAgIHdvcmtpbmdTdHJpbmcucmVw
bGFjZSgnKycsICcgJyk7CiAgICAgd29ya2luZ1N0cmluZyA9IGNhbm9uaWNhbGl6ZSh3b3JraW5n
U3RyaW5nKTsKICAgICByZXR1cm4gd29ya2luZ1N0cmluZzsKQEAgLTE2OSw2ICsxODAsMTIgQEAg
dm9pZCBYU1NBdWRpdG9yOjppbml0KCkKIAogICAgIGNvbnN0IEtVUkwmIHVybCA9IG1fcGFyc2Vy
LT5kb2N1bWVudCgpLT51cmwoKTsKIAorICAgIGlmICh1cmwuaXNFbXB0eSgpKSB7CisgICAgICAg
IC8vIFRoZSBVUkwgY2FuIGJlIGVtcHR5IHdoZW4gb3BlbmluZyBhIG5ldyBicm93c2VyIHdpbmRv
dyBvciBjYWxsaW5nIHdpbmRvdy5vcGVuKCIiKS4KKyAgICAgICAgbV9pc0VuYWJsZWQgPSBmYWxz
ZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGlmICh1cmwucHJvdG9jb2xJc0RhdGEo
KSkgewogICAgICAgICBtX2lzRW5hYmxlZCA9IGZhbHNlOwogICAgICAgICByZXR1cm47CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmNwcAkocmV2aXNpb24gOTQ4MDYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9LVVJMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIktVUkwuaCIKIAorI2luY2x1ZGUgIkRlY29k
ZUVzY2FwZVNlcXVlbmNlcy5oIgogI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgogI2luY2x1ZGUg
PHN0ZGlvLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTI1MSwxNCArMjUyLDYgQEAg
c3RhdGljIGlubGluZSBib29sIGlzU2NoZW1lQ2hhcmFjdGVyTWF0YwogICAgIHJldHVybiAoY2hh
cmFjdGVyIHwgMHgyMCkgPT0gc2NoZW1lQ2hhcmFjdGVyOwogfQogCi1zdGF0aWMgaW5saW5lIGlu
dCBoZXhEaWdpdFZhbHVlKFVDaGFyIGMpCi17Ci0gICAgQVNTRVJUKGlzQVNDSUlIZXhEaWdpdChj
KSk7Ci0gICAgaWYgKGMgPCAnQScpCi0gICAgICAgIHJldHVybiBjIC0gJzAnOwotICAgIHJldHVy
biAoYyAtICdBJyArIDEwKSAmIDB4RjsgLy8gaGFuZGxlIGJvdGggdXBwZXIgYW5kIGxvd2VyIGNh
c2Ugd2l0aG91dCBhIGJyYW5jaAotfQotCiAvLyBDb3BpZXMgdGhlIHNvdXJjZSB0byB0aGUgZGVz
dGluYXRpb24sIGFzc3VtaW5nIGFsbCB0aGUgc291cmNlIGNoYXJhY3RlcnMgYXJlCiAvLyBBU0NJ
SS4gVGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciBtdXN0IGJlIGxhcmdlIGVub3VnaC4gTnVsbCBjaGFy
YWN0ZXJzIGFyZSBhbGxvd2VkCiAvLyBpbiB0aGUgc291cmNlIHN0cmluZywgYW5kIG5vIGF0dGVt
cHQgaXMgbWFkZSB0byBudWxsLXRlcm1pbmF0ZSB0aGUgcmVzdWx0LgpAQCAtOTMzLDU5ICs5MjYs
MTQgQEAgU3RyaW5nIEtVUkw6OmRlcHJlY2F0ZWRTdHJpbmcoKSBjb25zdAogICAgIHJldHVybiBy
ZXN1bHQudG9TdHJpbmcoKTsKIH0KIAotU3RyaW5nIGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyhj
b25zdCBTdHJpbmcmIHN0cikKK1N0cmluZyBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMoY29uc3Qg
U3RyaW5nJiBzdHJpbmcpCiB7Ci0gICAgcmV0dXJuIGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyhz
dHIsIFVURjhFbmNvZGluZygpKTsKKyAgICByZXR1cm4gZGVjb2RlRXNjYXBlU2VxdWVuY2VzPFVS
TEVzY2FwZVNlcXVlbmNlPihzdHJpbmcsIFVURjhFbmNvZGluZygpKTsKIH0KIAotU3RyaW5nIGRl
Y29kZVVSTEVzY2FwZVNlcXVlbmNlcyhjb25zdCBTdHJpbmcmIHN0ciwgY29uc3QgVGV4dEVuY29k
aW5nJiBlbmNvZGluZykKK1N0cmluZyBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMoY29uc3QgU3Ry
aW5nJiBzdHJpbmcsIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcpCiB7Ci0gICAgU3RyaW5n
QnVpbGRlciByZXN1bHQ7Ci0KLSAgICBDaGFyQnVmZmVyIGJ1ZmZlcjsKLQotICAgIHVuc2lnbmVk
IGxlbmd0aCA9IHN0ci5sZW5ndGgoKTsKLSAgICB1bnNpZ25lZCBkZWNvZGVkUG9zaXRpb24gPSAw
OwotICAgIHVuc2lnbmVkIHNlYXJjaFBvc2l0aW9uID0gMDsKLSAgICBzaXplX3QgZW5jb2RlZFJ1
blBvc2l0aW9uOwotICAgIHdoaWxlICgoZW5jb2RlZFJ1blBvc2l0aW9uID0gc3RyLmZpbmQoJyUn
LCBzZWFyY2hQb3NpdGlvbikpICE9IG5vdEZvdW5kKSB7Ci0gICAgICAgIC8vIEZpbmQgdGhlIHNl
cXVlbmNlIG9mICUtZXNjYXBlIGNvZGVzLgotICAgICAgICB1bnNpZ25lZCBlbmNvZGVkUnVuRW5k
ID0gZW5jb2RlZFJ1blBvc2l0aW9uOwotICAgICAgICB3aGlsZSAobGVuZ3RoIC0gZW5jb2RlZFJ1
bkVuZCA+PSAzCi0gICAgICAgICAgICAgICAgJiYgc3RyW2VuY29kZWRSdW5FbmRdID09ICclJwot
ICAgICAgICAgICAgICAgICYmIGlzQVNDSUlIZXhEaWdpdChzdHJbZW5jb2RlZFJ1bkVuZCArIDFd
KQotICAgICAgICAgICAgICAgICYmIGlzQVNDSUlIZXhEaWdpdChzdHJbZW5jb2RlZFJ1bkVuZCAr
IDJdKSkKLSAgICAgICAgICAgIGVuY29kZWRSdW5FbmQgKz0gMzsKLSAgICAgICAgc2VhcmNoUG9z
aXRpb24gPSBlbmNvZGVkUnVuRW5kOwotICAgICAgICBpZiAoZW5jb2RlZFJ1bkVuZCA9PSBlbmNv
ZGVkUnVuUG9zaXRpb24pIHsKLSAgICAgICAgICAgICsrc2VhcmNoUG9zaXRpb247Ci0gICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIERlY29kZSB0aGUgJS1lc2Nh
cGVzIGludG8gYnl0ZXMuCi0gICAgICAgIHVuc2lnbmVkIHJ1bkxlbmd0aCA9IChlbmNvZGVkUnVu
RW5kIC0gZW5jb2RlZFJ1blBvc2l0aW9uKSAvIDM7Ci0gICAgICAgIGJ1ZmZlci5yZXNpemUocnVu
TGVuZ3RoKTsKLSAgICAgICAgY2hhciogcCA9IGJ1ZmZlci5kYXRhKCk7Ci0gICAgICAgIGNvbnN0
IFVDaGFyKiBxID0gc3RyLmNoYXJhY3RlcnMoKSArIGVuY29kZWRSdW5Qb3NpdGlvbjsKLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJ1bkxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAg
ICAqcCsrID0gKGhleERpZ2l0VmFsdWUocVsxXSkgPDwgNCkgfCBoZXhEaWdpdFZhbHVlKHFbMl0p
OwotICAgICAgICAgICAgcSArPSAzOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gRGVjb2RlIHRo
ZSBieXRlcyBpbnRvIFVuaWNvZGUgY2hhcmFjdGVycy4KLSAgICAgICAgU3RyaW5nIGRlY29kZWQg
PSAoZW5jb2RpbmcuaXNWYWxpZCgpID8gZW5jb2RpbmcgOiBVVEY4RW5jb2RpbmcoKSkuZGVjb2Rl
KGJ1ZmZlci5kYXRhKCksIHAgLSBidWZmZXIuZGF0YSgpKTsKLSAgICAgICAgaWYgKGRlY29kZWQu
aXNFbXB0eSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgLy8gQnVpbGQgdXAg
dGhlIHN0cmluZyB3aXRoIHdoYXQgd2UganVzdCBza2lwcGVkIGFuZCB3aGF0IHdlIGp1c3QgZGVj
b2RlZC4KLSAgICAgICAgcmVzdWx0LmFwcGVuZChzdHIuY2hhcmFjdGVycygpICsgZGVjb2RlZFBv
c2l0aW9uLCBlbmNvZGVkUnVuUG9zaXRpb24gLSBkZWNvZGVkUG9zaXRpb24pOwotICAgICAgICBy
ZXN1bHQuYXBwZW5kKGRlY29kZWQpOwotICAgICAgICBkZWNvZGVkUG9zaXRpb24gPSBlbmNvZGVk
UnVuRW5kOwotICAgIH0KLQotICAgIHJlc3VsdC5hcHBlbmQoc3RyLmNoYXJhY3RlcnMoKSArIGRl
Y29kZWRQb3NpdGlvbiwgbGVuZ3RoIC0gZGVjb2RlZFBvc2l0aW9uKTsKLQotICAgIHJldHVybiBy
ZXN1bHQudG9TdHJpbmcoKTsKKyAgICByZXR1cm4gZGVjb2RlRXNjYXBlU2VxdWVuY2VzPFVSTEVz
Y2FwZVNlcXVlbmNlPihzdHJpbmcsIGVuY29kaW5nKTsKIH0KIAogLy8gQ2F1dGlvbjogVGhpcyBm
dW5jdGlvbiBkb2VzIG5vdCBib3VuZHMgY2hlY2suCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L0RlY29kZUVzY2FwZVNlcXVlbmNlcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvRGVjb2RlRXNjYXBlU2VxdWVuY2VzLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0RlY29kZUVzY2FwZVNlcXVlbmNlcy5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBEYW5pZWwgQmF0ZXMgKGRiYXRlc0BpbnR1ZGF0YS5jb20pLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIERl
Y29kZUVzY2FwZVNlcXVlbmNlc19oCisjZGVmaW5lIERlY29kZUVzY2FwZVNlcXVlbmNlc19oCisK
KyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgor
I2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworLy8gU2VlIDxodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1BlcmNlbnQtZW5jb2Rp
bmcjTm9uLXN0YW5kYXJkX2ltcGxlbWVudGF0aW9ucz4uCitzdHJ1Y3QgVW5pY29kZTE2Qml0RXNj
YXBlU2VxdWVuY2UgeworICAgIGVudW0geyBzaXplID0gNiB9OyAvLyBlLmcuICV1MjZDNAorICAg
IHN0YXRpYyBzaXplX3QgZmluZEluU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nLCB1bnNpZ25l
ZCBzdGFydCA9IDApIHsgcmV0dXJuIHN0cmluZy5maW5kKCIldSIsIHN0YXJ0KTsgfQorICAgIHN0
YXRpYyBib29sIG1hdGNoU3RyaW5nUHJlZml4KGNvbnN0IFN0cmluZyYgc3RyaW5nLCB1bnNpZ25l
ZCBzdGFydCA9IDApCisgICAgeworICAgICAgICBpZiAoc3RyaW5nLmxlbmd0aCgpIC0gc3RhcnQg
PCBzaXplKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gc3RyaW5n
W3N0YXJ0XSA9PSAnJScgJiYgc3RyaW5nW3N0YXJ0ICsgMV0gPT0gJ3UnCisgICAgICAgICAgICAm
JiBpc0FTQ0lJSGV4RGlnaXQoc3RyaW5nW3N0YXJ0ICsgMl0pICYmIGlzQVNDSUlIZXhEaWdpdChz
dHJpbmdbc3RhcnQgKyAzXSkKKyAgICAgICAgICAgICYmIGlzQVNDSUlIZXhEaWdpdChzdHJpbmdb
c3RhcnQgKyA0XSkgJiYgaXNBU0NJSUhleERpZ2l0KHN0cmluZ1tzdGFydCArIDVdKTsKKyAgICB9
CisgICAgc3RhdGljIFN0cmluZyBkZWNvZGVSdW4oY29uc3QgVUNoYXIqIHJ1biwgc2l6ZV90IHJ1
bkxlbmd0aCwgY29uc3QgVGV4dEVuY29kaW5nJikKKyAgICB7CisgICAgICAgIC8vIEVhY2ggJXUt
ZXNjYXBlIHNlcXVlbmNlIHJlcHJlc2VudHMgYSBVVEYtMTYgY29kZSB1bml0LgorICAgICAgICAv
LyBTZWUgPGh0dHA6Ly93d3cudzMub3JnL0ludGVybmF0aW9uYWwvaXJpLWVkaXQvZHJhZnQtZHVl
cnN0LWlyaS5odG1sI2FuY2hvcjI5Pi4KKyAgICAgICAgc2l6ZV90IG51bWJlck9mU2VxdWVuY2Vz
ID0gcnVuTGVuZ3RoIC8gc2l6ZTsKKyAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAg
ICAgICBidWlsZGVyLnJlc2VydmVDYXBhY2l0eShudW1iZXJPZlNlcXVlbmNlcyk7CisgICAgICAg
IHdoaWxlIChudW1iZXJPZlNlcXVlbmNlcy0tKSB7CisgICAgICAgICAgICBVQ2hhciBjb2RlVW5p
dCA9ICh0b0FTQ0lJSGV4VmFsdWUocnVuWzJdKSA8PCAxMikgfCAodG9BU0NJSUhleFZhbHVlKHJ1
blszXSkgPDwgOCkgfCAodG9BU0NJSUhleFZhbHVlKHJ1bls0XSkgPDwgNCkgfCB0b0FTQ0lJSGV4
VmFsdWUocnVuWzVdKTsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGNvZGVVbml0KTsKKyAg
ICAgICAgICAgIHJ1biArPSBzaXplOworICAgICAgICB9CisgICAgICAgIHJldHVybiBidWlsZGVy
LnRvU3RyaW5nKCk7CisgICAgfQorfTsKKworc3RydWN0IFVSTEVzY2FwZVNlcXVlbmNlIHsKKyAg
ICBlbnVtIHsgc2l6ZSA9IDMgfTsgLy8gZS5nLiAlNDEKKyAgICBzdGF0aWMgc2l6ZV90IGZpbmRJ
blN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZywgdW5zaWduZWQgc3RhcnQgPSAwKSB7IHJldHVy
biBzdHJpbmcuZmluZCgnJScsIHN0YXJ0KTsgfQorICAgIHN0YXRpYyBib29sIG1hdGNoU3RyaW5n
UHJlZml4KGNvbnN0IFN0cmluZyYgc3RyaW5nLCB1bnNpZ25lZCBzdGFydCA9IDApCisgICAgewor
ICAgICAgICBpZiAoc3RyaW5nLmxlbmd0aCgpIC0gc3RhcnQgPCBzaXplKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gc3RyaW5nW3N0YXJ0XSA9PSAnJScgJiYgaXNB
U0NJSUhleERpZ2l0KHN0cmluZ1tzdGFydCArIDFdKSAmJiBpc0FTQ0lJSGV4RGlnaXQoc3RyaW5n
W3N0YXJ0ICsgMl0pOworICAgIH0KKyAgICBzdGF0aWMgU3RyaW5nIGRlY29kZVJ1bihjb25zdCBV
Q2hhciogcnVuLCBzaXplX3QgcnVuTGVuZ3RoLCBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5n
KQorICAgIHsKKyAgICAgICAgc2l6ZV90IG51bWJlck9mU2VxdWVuY2VzID0gcnVuTGVuZ3RoIC8g
c2l6ZTsKKyAgICAgICAgVmVjdG9yPGNoYXIsIDUxMj4gYnVmZmVyOworICAgICAgICBidWZmZXIu
cmVzaXplKG51bWJlck9mU2VxdWVuY2VzKTsKKyAgICAgICAgY2hhciogcCA9IGJ1ZmZlci5kYXRh
KCk7CisgICAgICAgIHdoaWxlIChudW1iZXJPZlNlcXVlbmNlcy0tKSB7CisgICAgICAgICAgICAq
cCsrID0gKHRvQVNDSUlIZXhWYWx1ZShydW5bMV0pIDw8IDQpIHwgdG9BU0NJSUhleFZhbHVlKHJ1
blsyXSk7CisgICAgICAgICAgICBydW4gKz0gc2l6ZTsKKyAgICAgICAgfQorICAgICAgICBBU1NF
UlQoYnVmZmVyLnNpemUoKSA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KHAgLSBidWZmZXIuZGF0YSgp
KSk7CisgICAgICAgIHJldHVybiAoZW5jb2RpbmcuaXNWYWxpZCgpID8gZW5jb2RpbmcgOiBVVEY4
RW5jb2RpbmcoKSkuZGVjb2RlKGJ1ZmZlci5kYXRhKCksIHAgLSBidWZmZXIuZGF0YSgpKTsKKyAg
ICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBFc2NhcGVTZXF1ZW5jZT4KK1N0cmluZyBkZWNv
ZGVFc2NhcGVTZXF1ZW5jZXMoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGNvbnN0IFRleHRFbmNvZGlu
ZyYgZW5jb2RpbmcpCit7CisgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CisgICAgc2l6ZV90IGxl
bmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKKyAgICBzaXplX3QgZGVjb2RlZFBvc2l0aW9uID0gMDsK
KyAgICBzaXplX3Qgc2VhcmNoUG9zaXRpb24gPSAwOworICAgIHNpemVfdCBlbmNvZGVkUnVuUG9z
aXRpb247CisgICAgd2hpbGUgKChlbmNvZGVkUnVuUG9zaXRpb24gPSBFc2NhcGVTZXF1ZW5jZTo6
ZmluZEluU3RyaW5nKHN0cmluZywgc2VhcmNoUG9zaXRpb24pKSAhPSBub3RGb3VuZCkgeworICAg
ICAgICB1bnNpZ25lZCBlbmNvZGVkUnVuRW5kID0gZW5jb2RlZFJ1blBvc2l0aW9uOworICAgICAg
ICB3aGlsZSAobGVuZ3RoIC0gZW5jb2RlZFJ1bkVuZCA+PSBFc2NhcGVTZXF1ZW5jZTo6c2l6ZSAm
JiBFc2NhcGVTZXF1ZW5jZTo6bWF0Y2hTdHJpbmdQcmVmaXgoc3RyaW5nLCBlbmNvZGVkUnVuRW5k
KSkKKyAgICAgICAgICAgIGVuY29kZWRSdW5FbmQgKz0gRXNjYXBlU2VxdWVuY2U6OnNpemU7Cisg
ICAgICAgIHNlYXJjaFBvc2l0aW9uID0gZW5jb2RlZFJ1bkVuZDsKKyAgICAgICAgaWYgKGVuY29k
ZWRSdW5FbmQgPT0gZW5jb2RlZFJ1blBvc2l0aW9uKSB7CisgICAgICAgICAgICArK3NlYXJjaFBv
c2l0aW9uOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBTdHJp
bmcgZGVjb2RlZCA9IEVzY2FwZVNlcXVlbmNlOjpkZWNvZGVSdW4oc3RyaW5nLmNoYXJhY3RlcnMo
KSArIGVuY29kZWRSdW5Qb3NpdGlvbiwgZW5jb2RlZFJ1bkVuZCAtIGVuY29kZWRSdW5Qb3NpdGlv
biwgZW5jb2RpbmcpOworICAgICAgICBpZiAoZGVjb2RlZC5pc0VtcHR5KCkpCisgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICByZXN1bHQuYXBwZW5kKHN0cmluZy5jaGFyYWN0ZXJzKCkg
KyBkZWNvZGVkUG9zaXRpb24sIGVuY29kZWRSdW5Qb3NpdGlvbiAtIGRlY29kZWRQb3NpdGlvbik7
CisgICAgICAgIHJlc3VsdC5hcHBlbmQoZGVjb2RlZCk7CisgICAgICAgIGRlY29kZWRQb3NpdGlv
biA9IGVuY29kZWRSdW5FbmQ7CisgICAgfQorICAgIHJlc3VsdC5hcHBlbmQoc3RyaW5nLmNoYXJh
Y3RlcnMoKSArIGRlY29kZWRQb3NpdGlvbiwgbGVuZ3RoIC0gZGVjb2RlZFBvc2l0aW9uKTsKKyAg
ICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIERlY29kZUVzY2FwZVNlcXVlbmNlc19oCkluZGV4OiBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA5
NDgxNykKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDM5IEBACisyMDExLTA5LTA4ICBEYW5pZWwgQmF0ZXMgIDxkYmF0ZXNAd2Via2l0Lm9yZz4KKwor
ICAgICAgICBYU1MgZmlsdGVyIGJ5cGFzcyB2aWEgbm9uLXN0YW5kYXJkIFVSTCBlbmNvZGluZwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY1ODgKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgdGVzdHMg
Zm9yIGRlY29kaW5nIG5vbi1zdGFuZGFyZCAxNi1iaXQgVW5pY29kZSBlc2NhcGUgc2VxdWVuY2Vz
LgorCisgICAgICAgIEFsc28gYWRkIGEgdGVzdCB0byBlbnN1cmUgdGhhdCB3ZSBkb24ndCBjYXVz
ZSBhbiBhc3NlcnRpb24gZmFpbHVyZSB3aGVuCisgICAgICAgIGNhbGxpbmcgd2luZG93Lm9wZW4o
IiIpLgorCisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3Jlc291cmNl
cy9lY2hvLWludGVydGFnLWRlY29kZS0xNmJpdC11bmljb2RlLnBsOiBBZGRlZC4KKyAgICAgICAg
KGlzVVRGMTZTdXJyb2dhdGUpOgorICAgICAgICAoZGVjb2RlUnVuT2YxNkJpdFVuaWNvZGVFc2Nh
cGVTZXF1ZW5jZXMpOgorICAgICAgICAoZGVjb2RlMTZCaXRVbmljb2RlRXNjYXBlU2VxdWVuY2Vz
KToKKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy13
aXRoLTE2Yml0LXVuaWNvZGUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rl
c3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy13aXRoLTE2Yml0LXVuaWNvZGUtc3Vy
cm9nYXRlLXBhaXItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3Nl
Y3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy13aXRoLTE2Yml0LXVuaWNvZGUtc3Vycm9nYXRl
LXBhaXIuaHRtbDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRp
dG9yL3NjcmlwdC10YWctd2l0aC0xNmJpdC11bmljb2RlLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IGh0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLXdpdGgtMTZiaXQtdW5p
Y29kZTItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5
L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy13aXRoLTE2Yml0LXVuaWNvZGUyLmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLXdpdGgt
MTZiaXQtdW5pY29kZTMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3Rz
L3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy13aXRoLTE2Yml0LXVuaWNvZGUzLmh0bWw6
IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQt
dGFnLXdpdGgtMTZiaXQtdW5pY29kZTQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBo
dHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy13aXRoLTE2Yml0LXVuaWNv
ZGU0Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRv
ci9zY3JpcHQtdGFnLXdpdGgtMTZiaXQtdW5pY29kZTUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy13aXRoLTE2
Yml0LXVuaWNvZGU1Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkv
eHNzQXVkaXRvci9zY3JpcHQtdGFnLXdpdGgtZmFuY3ktdW5pY29kZS1leHBlY3RlZC50eHQ6IFVw
ZGF0ZWQgZXhwZWN0ZWQKKyAgICAgICAgcmVzdWx0IHNpbmNlIHdlIG5vdyBwYXNzIHRoaXMgdGVz
dC4gV2Ugc2hvdWxkIHJlbmFtZSB0aGlzIGZpbGUgdG8gc29tZXRoaW5nIG1vcmUgZGVzY3JpcHRp
dmUsCisgICAgICAgIHNlZSA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTY3ODE4Pi4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0
LXRhZy13aXRoLXRocmVlLXRpbWVzLXVybC1lbmNvZGVkLTE2Yml0LXVuaWNvZGUtZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2Ny
aXB0LXRhZy13aXRoLXRocmVlLXRpbWVzLXVybC1lbmNvZGVkLTE2Yml0LXVuaWNvZGUuaHRtbDog
QWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3dpbmRvdy1v
cGVuLXdpdGhvdXQtdXJsLXNob3VsZC1ub3QtYXNzZXJ0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisg
ICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3dpbmRvdy1vcGVuLXdpdGhv
dXQtdXJsLXNob3VsZC1ub3QtYXNzZXJ0Lmh0bWw6IEFkZGVkLgorCiAyMDExLTA5LTA4ICBSb2xh
bmQgU3RlaW5lciAgPHJvbGFuZHN0ZWluZXJAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2
aWV3ZWQsIHJvbGxpbmcgb3V0IHI5NDgwOS4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMv
c2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLXdpdGgtMTZiaXQtdW5pY29kZTItZXhwZWN0
ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNz
QXVkaXRvci9zY3JpcHQtdGFnLXdpdGgtMTZiaXQtdW5pY29kZTItZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3Nj
cmlwdC10YWctd2l0aC0xNmJpdC11bmljb2RlMi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMyBAQAorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDE6IFJlZnVzZWQgdG8gZXhlY3V0
ZSBhIEphdmFTY3JpcHQgc2NyaXB0LiBTb3VyY2UgY29kZSBvZiBzY3JpcHQgZm91bmQgd2l0aGlu
IHJlcXVlc3QuCisKKwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NB
dWRpdG9yL3NjcmlwdC10YWctd2l0aC0xNmJpdC11bmljb2RlMi5odG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLXdp
dGgtMTZiaXQtdW5pY29kZTIuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAv
dGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLXdpdGgtMTZiaXQtdW5pY29kZTIu
aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRt
bD4KKzxoZWFkPgorPHNjcmlwdD4KK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsK
KyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIuc2V0WFNTQXVkaXRvckVuYWJsZWQodHJ1ZSk7Cit9Cis8L3NjcmlwdD4KKzwvaGVh
ZD4KKzxib2R5PgorPGlmcmFtZSBzcmM9Imh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC9zZWN1cml0eS94
c3NBdWRpdG9yL3Jlc291cmNlcy9lY2hvLWludGVydGFnLWRlY29kZS0xNmJpdC11bmljb2RlLnBs
P3E9PHNjcmlwdD5hbGVydCgvWFMldTAwMjUyNXUwMDUzLyk8L3NjcmlwdD4iPgorPC9pZnJhbWU+
Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5
L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy13aXRoLTE2Yml0LXVuaWNvZGUzLWV4cGVjdGVkLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Iv
c2NyaXB0LXRhZy13aXRoLTE2Yml0LXVuaWNvZGUzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFn
LXdpdGgtMTZiaXQtdW5pY29kZTMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDMgQEAKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAxOiBSZWZ1c2VkIHRvIGV4ZWN1dGUgYSBKYXZh
U2NyaXB0IHNjcmlwdC4gU291cmNlIGNvZGUgb2Ygc2NyaXB0IGZvdW5kIHdpdGhpbiByZXF1ZXN0
LgorCisKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9z
Y3JpcHQtdGFnLXdpdGgtMTZiaXQtdW5pY29kZTMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy13aXRoLTE2Yml0
LXVuaWNvZGUzLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3Nl
Y3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy13aXRoLTE2Yml0LXVuaWNvZGUzLmh0bWwJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMTUgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVh
ZD4KKzxzY3JpcHQ+CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVy
LnNldFhTU0F1ZGl0b3JFbmFibGVkKHRydWUpOworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9k
eT4KKzxpZnJhbWUgc3JjPSJodHRwOi8vbG9jYWxob3N0OjgwMDAvc2VjdXJpdHkveHNzQXVkaXRv
ci9yZXNvdXJjZXMvZWNoby1pbnRlcnRhZy1kZWNvZGUtMTZiaXQtdW5pY29kZS5wbD9xPSUyNXUw
MDNjJTI1dTAwNzMlMjV1MDA2MyUyNXUwMDcyJTI1dTAwNjklMjV1MDA3MCUyNXUwMDc0JTI1dTAw
M2UlMjV1MDA2MSUyNXUwMDZjJTI1dTAwNjUlMjV1MDA3MiUyNXUwMDc0JTI1dTAwMjglMjV1MDAy
ZiUyNXUwMDU4JTI1dTAwNTMlMjV1MDA1MyUyNXUyNjIwJTI1dTAwMmYlMjV1MDAyOSUyNXUwMDNj
JTI1dTAwMmYlMjV1MDA3MyUyNXUwMDYzJTI1dTAwNzIlMjV1MDA2OSUyNXUwMDcwJTI1dTAwNzQl
MjV1MDAzZSI+Cis8L2lmcmFtZT4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3Rz
L2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLXdpdGgtMTZiaXQtdW5p
Y29kZTQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMv
c2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLXdpdGgtMTZiaXQtdW5pY29kZTQtZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94
c3NBdWRpdG9yL3NjcmlwdC10YWctd2l0aC0xNmJpdC11bmljb2RlNC1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMyBAQAorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDE6IFJlZnVz
ZWQgdG8gZXhlY3V0ZSBhIEphdmFTY3JpcHQgc2NyaXB0LiBTb3VyY2UgY29kZSBvZiBzY3JpcHQg
Zm91bmQgd2l0aGluIHJlcXVlc3QuCisKKwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9z
ZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctd2l0aC0xNmJpdC11bmljb2RlNC5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9z
Y3JpcHQtdGFnLXdpdGgtMTZiaXQtdW5pY29kZTQuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLXdpdGgtMTZi
aXQtdW5pY29kZTQuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNSBAQAorPCFET0NUWVBF
IGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4KK2lmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0WFNTQXVkaXRvckVuYWJsZWQodHJ1ZSk7Cit9Cis8L3Nj
cmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGlmcmFtZSBzcmM9Imh0dHA6Ly9sb2NhbGhvc3Q6ODAw
MC9zZWN1cml0eS94c3NBdWRpdG9yL3Jlc291cmNlcy9lY2hvLWludGVydGFnLWRlY29kZS0xNmJp
dC11bmljb2RlLnBsP3E9PHNjcmlwdD5hbGVydCgnJXUwMDU4JXUwMDUzJXUwMDUzJXUwMDIwJXUw
NWQwJXUwNWQxJXUwNWQ4JXUwNWQ3JXUwNWQ0JXUwMDIwJXUwNWU0JXUwNWQyJXUwNWQ5JXUwNWUy
JXUwNWQ1JXUwNWVhLSV1OGRlOCV1N2FkOSV1NWYwZiV1ODExYSV1NjcyYyV1NjUzYiV1NTFmYicp
PC9zY3JpcHQ+Ij4KKzwvaWZyYW1lPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctd2l0aC0xNmJpdC11
bmljb2RlNS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctd2l0aC0xNmJpdC11bmljb2RlNS1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5
L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy13aXRoLTE2Yml0LXVuaWNvZGU1LWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMTogUmVm
dXNlZCB0byBleGVjdXRlIGEgSmF2YVNjcmlwdCBzY3JpcHQuIFNvdXJjZSBjb2RlIG9mIHNjcmlw
dCBmb3VuZCB3aXRoaW4gcmVxdWVzdC4KKworCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy13aXRoLTE2Yml0LXVuaWNvZGU1Lmh0bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9y
L3NjcmlwdC10YWctd2l0aC0xNmJpdC11bmljb2RlNS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctd2l0aC0x
NmJpdC11bmljb2RlNS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1IEBACis8IURPQ1RZ
UEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0PgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0
Q29udHJvbGxlcikgeworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci5zZXRYU1NBdWRpdG9yRW5hYmxlZCh0cnVlKTsKK30KKzwv
c2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8aWZyYW1lIHNyYz0iaHR0cDovL2xvY2FsaG9zdDo4
MDAwL3NlY3VyaXR5L3hzc0F1ZGl0b3IvcmVzb3VyY2VzL2VjaG8taW50ZXJ0YWcucGw/cT08c2Ny
aXB0PmFsZXJ0KCcldTAwNTgldTAwNTMldTAwNTMldTAwMjAldTA1ZDAldTA1ZDEldTA1ZDgldTA1
ZDcldTA1ZDQldTAwMjAldTA1ZTQldTA1ZDIldTA1ZDkldTA1ZTIldTA1ZDUldTA1ZWEtJXU4ZGU4
JXU3YWQ5JXU1ZjBmJXU4MTFhJXU2NzJjJXU2NTNiJXU1MWZiJyk8L3NjcmlwdD4iPgorPC9pZnJh
bWU+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3Vy
aXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy13aXRoLTE2Yml0LXVuaWNvZGUtZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRv
ci9zY3JpcHQtdGFnLXdpdGgtMTZiaXQtdW5pY29kZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRh
Zy13aXRoLTE2Yml0LXVuaWNvZGUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDMgQEAKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAxOiBSZWZ1c2VkIHRvIGV4ZWN1dGUgYSBKYXZh
U2NyaXB0IHNjcmlwdC4gU291cmNlIGNvZGUgb2Ygc2NyaXB0IGZvdW5kIHdpdGhpbiByZXF1ZXN0
LgorCisKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9z
Y3JpcHQtdGFnLXdpdGgtMTZiaXQtdW5pY29kZS1zdXJyb2dhdGUtcGFpci1leHBlY3RlZC50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9y
L3NjcmlwdC10YWctd2l0aC0xNmJpdC11bmljb2RlLXN1cnJvZ2F0ZS1wYWlyLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVk
aXRvci9zY3JpcHQtdGFnLXdpdGgtMTZiaXQtdW5pY29kZS1zdXJyb2dhdGUtcGFpci1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMyBAQAorQ09OU09MRSBNRVNTQUdFOiBsaW5l
IDE6IFJlZnVzZWQgdG8gZXhlY3V0ZSBhIEphdmFTY3JpcHQgc2NyaXB0LiBTb3VyY2UgY29kZSBv
ZiBzY3JpcHQgZm91bmQgd2l0aGluIHJlcXVlc3QuCisKKwpJbmRleDogTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctd2l0aC0xNmJpdC11bmljb2Rl
LXN1cnJvZ2F0ZS1wYWlyLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctd2l0aC0xNmJpdC11bmljb2RlLXN1cnJv
Z2F0ZS1wYWlyLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3Nl
Y3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy13aXRoLTE2Yml0LXVuaWNvZGUtc3Vycm9nYXRl
LXBhaXIuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNSBAQAorPCFET0NUWVBFIGh0bWw+
Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4KK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xs
ZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIuc2V0WFNTQXVkaXRvckVuYWJsZWQodHJ1ZSk7Cit9Cis8L3NjcmlwdD4K
KzwvaGVhZD4KKzxib2R5PgorPGlmcmFtZSBzcmM9Imh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC9zZWN1
cml0eS94c3NBdWRpdG9yL3Jlc291cmNlcy9lY2hvLWludGVydGFnLnBsP3E9PHNjcmlwdD5hbGVy
dCgvWFMldUQ4MzQldUREMUUvKTwvc2NyaXB0PiI+Cis8L2lmcmFtZT4KKzwvYm9keT4KKzwvaHRt
bD4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3Jp
cHQtdGFnLXdpdGgtMTZiaXQtdW5pY29kZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLXdpdGgtMTZiaXQtdW5p
Y29kZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0
eS94c3NBdWRpdG9yL3NjcmlwdC10YWctd2l0aC0xNmJpdC11bmljb2RlLmh0bWwJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTUgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxz
Y3JpcHQ+CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLnNldFhT
U0F1ZGl0b3JFbmFibGVkKHRydWUpOworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxp
ZnJhbWUgc3JjPSJodHRwOi8vbG9jYWxob3N0OjgwMDAvc2VjdXJpdHkveHNzQXVkaXRvci9yZXNv
dXJjZXMvZWNoby1pbnRlcnRhZy1kZWNvZGUtMTZiaXQtdW5pY29kZS5wbD9xPSUyNXUwMDNjJTI1
dTAwNzMlMjV1MDA2MyUyNXUwMDcyJTI1dTAwNjklMjV1MDA3MCUyNXUwMDc0JTI1dTAwM2UlMjV1
MDA2MSUyNXUwMDZjJTI1dTAwNjUlMjV1MDA3MiUyNXUwMDc0JTI1dTAwMjglMjV1MDAyZiUyNXUw
MDU4JTI1dTAwNTMlMjV1MDA1MyUyNXUwMDJmJTI1dTAwMjklMjV1MDAzYyUyNXUwMDJmJTI1dTAw
NzMlMjV1MDA2MyUyNXUwMDcyJTI1dTAwNjklMjV1MDA3MCUyNXUwMDc0JTI1dTAwM2UiPgorPC9p
ZnJhbWU+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3Nl
Y3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy13aXRoLWZhbmN5LXVuaWNvZGUtZXhwZWN0ZWQu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVk
aXRvci9zY3JpcHQtdGFnLXdpdGgtZmFuY3ktdW5pY29kZS1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDk0ODA2KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3Nj
cmlwdC10YWctd2l0aC1mYW5jeS11bmljb2RlLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMSwyICsxLDMgQEAKLUFMRVJUOiAvWFNTLworQ09OU09MRSBNRVNTQUdFOiBsaW5lIDE6IFJl
ZnVzZWQgdG8gZXhlY3V0ZSBhIEphdmFTY3JpcHQgc2NyaXB0LiBTb3VyY2UgY29kZSBvZiBzY3Jp
cHQgZm91bmQgd2l0aGluIHJlcXVlc3QuCisKIApJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctd2l0aC10aHJlZS10aW1lcy11cmwtZW5j
b2RlZC0xNmJpdC11bmljb2RlLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy13aXRoLXRocmVlLXRp
bWVzLXVybC1lbmNvZGVkLTE2Yml0LXVuaWNvZGUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWct
d2l0aC10aHJlZS10aW1lcy11cmwtZW5jb2RlZC0xNmJpdC11bmljb2RlLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMTogUmVm
dXNlZCB0byBleGVjdXRlIGEgSmF2YVNjcmlwdCBzY3JpcHQuIFNvdXJjZSBjb2RlIG9mIHNjcmlw
dCBmb3VuZCB3aXRoaW4gcmVxdWVzdC4KKworCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy13aXRoLXRocmVlLXRpbWVzLXVybC1lbmNv
ZGVkLTE2Yml0LXVuaWNvZGUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy13aXRoLXRocmVlLXRpbWVzLXVybC1l
bmNvZGVkLTE2Yml0LXVuaWNvZGUuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0
dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLXdpdGgtdGhyZWUtdGltZXMt
dXJsLWVuY29kZWQtMTZiaXQtdW5pY29kZS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1
IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0PgoraWYgKHdpbmRv
dy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBB
c1RleHQoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5zZXRYU1NBdWRpdG9yRW5hYmxlZCh0
cnVlKTsKK30KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8aWZyYW1lIHNyYz0iaHR0cDov
L2xvY2FsaG9zdDo4MDAwL3NlY3VyaXR5L3hzc0F1ZGl0b3IvcmVzb3VyY2VzL2VjaG8taW50ZXJ0
YWcucGw/cT08c2NyaXB0PiUyNTI1MjV1MDA2MWxlcnQoL1hTUy8pPC9zY3JpcHQ+Ij4KKzwvaWZy
YW1lPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1
cml0eS94c3NBdWRpdG9yL3dpbmRvdy1vcGVuLXdpdGhvdXQtdXJsLXNob3VsZC1ub3QtYXNzZXJ0
LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3Vy
aXR5L3hzc0F1ZGl0b3Ivd2luZG93LW9wZW4td2l0aG91dC11cmwtc2hvdWxkLW5vdC1hc3NlcnQt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1
cml0eS94c3NBdWRpdG9yL3dpbmRvdy1vcGVuLXdpdGhvdXQtdXJsLXNob3VsZC1ub3QtYXNzZXJ0
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACitUaGlzIHRlc3QgUEFT
U0VEIGlmIHdlIGRvbid0IHRyaWdnZXIgYW4gYXNzZXJ0aW9uIGZhaWx1cmUgd2hlbiBvcGVuaW5n
IGEgcG9wLXVwIHdpbmRvdyB3aXRob3V0IGEgVVJMLiBUbyBydW4gdGhpcyB0ZXN0IGJ5IGhhbmQs
IGVuc3VyZSB0aGF0IHBvcC11cCB3aW5kb3dzIGFyZW4ndCBibG9ja2VkIGJlZm9yZSBsb2FkaW5n
IHRoaXMgcGFnZS4KKworUEFTU0VECkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3Vy
aXR5L3hzc0F1ZGl0b3Ivd2luZG93LW9wZW4td2l0aG91dC11cmwtc2hvdWxkLW5vdC1hc3NlcnQu
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1
ZGl0b3Ivd2luZG93LW9wZW4td2l0aG91dC11cmwtc2hvdWxkLW5vdC1hc3NlcnQuaHRtbAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci93
aW5kb3ctb3Blbi13aXRob3V0LXVybC1zaG91bGQtbm90LWFzc2VydC5odG1sCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDQ0IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2Ny
aXB0PgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgIGxheW91dFRlc3RD
b250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5zZXRYU1NB
dWRpdG9yRW5hYmxlZCh0cnVlKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5zZXRDYW5PcGVu
V2luZG93cygpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLnNldENsb3NlUmVtYWluaW5nV2lu
ZG93c1doZW5Db21wbGV0ZSh0cnVlKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50
aWxEb25lKCk7Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHA+VGhpcyB0ZXN0IFBB
U1NFRCBpZiB3ZSBkb24ndCB0cmlnZ2VyIGFuIGFzc2VydGlvbiBmYWlsdXJlIHdoZW4gb3Blbmlu
ZyBhIHBvcC11cCB3aW5kb3cgd2l0aG91dCBhIFVSTC4gVG8gcnVuIHRoaXMgdGVzdCBieSBoYW5k
LCBlbnN1cmUgdGhhdCBwb3AtdXAgd2luZG93cyBhcmVuJ3QgYmxvY2tlZCBiZWZvcmUgbG9hZGlu
ZyB0aGlzIHBhZ2UuPC9wPgorPHByZSBpZD0iY29uc29sZSI+PC9wcmU+Cis8c2NyaXB0PgorZnVu
Y3Rpb24gZmluaXNoKCkKK3sKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIp
LmlubmVyVGV4dCA9ICJQQVNTRUQiOworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xs
ZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKworZnVu
Y3Rpb24gcnVuVGVzdCgpCit7CisgICAgdmFyIGNoaWxkV2luZG93ID0gd2luZG93Lm9wZW4oIiIp
OworICAgIGlmICghY2hpbGRXaW5kb3cpIHsKKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoImNvbnNvbGUiKS5pbm5lclRleHQgPSAiRkFJTEVEIHRvIG9wZW4gcG9wLXVwIHdpbmRvdy4g
RW5zdXJlIHRoYXQgcG9wLXVwIHdpbmRvd3MgYXJlbid0IGJsb2NrZWQuIjsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGNoaWxkV2luZG93LmRvY3VtZW50Lm9wZW4oKTsKKyAgICBjaGls
ZFdpbmRvdy5kb2N1bWVudC53cml0ZSgiUEFTU0VEIik7CisKKyAgICA8IS0tIEJyZWFrIHVwIHRo
ZSBIVE1MIFNjcmlwdCBFbGVtZW50IHNvIGl0IGlzIG5vdCBpbnRlcnByZXRlZCBieSBIVE1MNCBw
YXJzZXJzIGFzIHBlciA8aHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvdHlwZXMuaHRtbCN0eXBl
LWNkYXRhPi4gLS0+CisgICAgY2hpbGRXaW5kb3cuZG9jdW1lbnQud3JpdGUoIjxzY3IiICsgImlw
dD53aW5kb3cub3BlbmVyLmZpbmlzaCgpPCIgKyAiL3NjcmlwdD4iKTsKKworICAgIGNoaWxkV2lu
ZG93LmRvY3VtZW50LmNsb3NlKCk7Cit9CitydW5UZXN0KCk7Cis8L3NjcmlwdD4KKzwvYm9keT4K
KzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRv
ci9yZXNvdXJjZXMvZWNoby1pbnRlcnRhZy1kZWNvZGUtMTZiaXQtdW5pY29kZS5wbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3IvcmVzb3Vy
Y2VzL2VjaG8taW50ZXJ0YWctZGVjb2RlLTE2Yml0LXVuaWNvZGUucGwJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3IvcmVzb3VyY2VzL2Vj
aG8taW50ZXJ0YWctZGVjb2RlLTE2Yml0LXVuaWNvZGUucGwJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNzcgQEAKKyMhL3Vzci9iaW4vcGVybCAtd1QKK3VzZSBzdHJpY3Q7Cit1c2UgQ0dJOwordXNl
IEVuY29kZTsKKworbXkgJGNnaSA9IG5ldyBDR0k7CisKK3VzZSBjb25zdGFudCBVbmljb2RlMTZC
aXRFc2NhcGVTZXF1ZW5jZUxlbmd0aCA9PiA2OyAjIGUuZy4gJXUyNkM0CitteSAkdW5pY29kZTE2
Qml0RXNjYXBlU2VxdWVuY2VSZWdFeCA9IHFyIyV1KFswLTlBLVphLXpdezEsNH0pIzsKKworc3Vi
IGlzVVRGMTZTdXJyb2dhdGUoJCkKK3sKKyAgICBteSAoJG51bWJlcikgPSBAXzsgCisgICAgcmV0
dXJuICRudW1iZXIgPj0gMHhEODAwICYmICRudW1iZXIgPD0gMHhERkZGOworfQorCisjIFNlZSA8
aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9QZXJjZW50LWVuY29kaW5nI05vbi1zdGFuZGFy
ZF9pbXBsZW1lbnRhdGlvbnM+Lgorc3ViIGRlY29kZVJ1bk9mMTZCaXRVbmljb2RlRXNjYXBlU2Vx
dWVuY2VzKCQpCit7CisgICAgbXkgKCRzdHJpbmcpID0gQF87CisgICAgbXkgQGNvZGVVbml0cyA9
IGdyZXAgeyBsZW5ndGgoJF8pIH0gc3BsaXQoLyR1bmljb2RlMTZCaXRFc2NhcGVTZXF1ZW5jZVJl
Z0V4LywgJHN0cmluZyk7CisgICAgbXkgJGkgPSAwOworICAgIG15ICRkZWNvZGVkUnVuID0gIiI7
CisgICAgd2hpbGUgKCRpIDwgQGNvZGVVbml0cykgeworICAgICAgICAjIEZJWE1FOiBXZSBmYWxs
YmFjayB0byB0aGUgVVRGLTggY2hhcmFjdGVyIGlmIHdlIGRvbid0IHJlY2VpdmUgYSBwcm9wZXIg
aGlnaCBhbmQgbG93IHN1cnJvZ2F0ZSBwYWlyLgorICAgICAgICAjICAgICAgICBJbnN0ZWFkLCB3
ZSBzaG91bGQgYWRkIGVycm9yIGhhbmRsaW5nIHRvIGRldGVjdCBoaWdoL2xvdyBzdXJyb2dhdGUg
bWlzbWF0Y2hlcyBhbmQgc2VxdWVuY2VzCisgICAgICAgICMgICAgICAgIG9mIHRoZSBmb3JtIGxv
dyBzdXJyb2dhdGUgdGhlbiBoaWdoIHN1cnJvZ2F0ZS4KKyAgICAgICAgbXkgJGhleERpZ2l0VmFs
dWVPZlBvc3NpYmxlSGlnaFN1cnJvZ2F0ZSA9IGhleCgkY29kZVVuaXRzWyRpXSk7CisgICAgICAg
IGlmIChpc1VURjE2U3Vycm9nYXRlKCRoZXhEaWdpdFZhbHVlT2ZQb3NzaWJsZUhpZ2hTdXJyb2dh
dGUpICYmICRpICsgMSA8IEBjb2RlVW5pdHMpIHsKKyAgICAgICAgICAgIG15ICRoZXhEaWdpdFZh
bHVlT2ZQb3NzaWJsZUxvd1N1cnJvZ2F0ZSA9IGhleCgkY29kZVVuaXRzWyRpICsgMV0pOworICAg
ICAgICAgICAgaWYgKGlzVVRGMTZTdXJyb2dhdGUoJGhleERpZ2l0VmFsdWVPZlBvc3NpYmxlTG93
U3Vycm9nYXRlKSkgeworICAgICAgICAgICAgICAgICRkZWNvZGVkUnVuIC49IGRlY29kZSgiVVRG
LTE2TEUiLCBwYWNrKCJTMiIsICRoZXhEaWdpdFZhbHVlT2ZQb3NzaWJsZUhpZ2hTdXJyb2dhdGUs
ICRoZXhEaWdpdFZhbHVlT2ZQb3NzaWJsZUxvd1N1cnJvZ2F0ZSkpOworICAgICAgICAgICAgICAg
ICRpICs9IDI7CisgICAgICAgICAgICAgICAgbmV4dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICAkZGVjb2RlZFJ1biAuPSBjaHIoJGhleERpZ2l0VmFsdWVPZlBvc3NpYmxlSGln
aFN1cnJvZ2F0ZSk7CisgICAgICAgICRpICs9IDE7CisgICAgfQorICAgIHJldHVybiAkZGVjb2Rl
ZFJ1bjsKK30KKworc3ViIGRlY29kZTE2Qml0VW5pY29kZUVzY2FwZVNlcXVlbmNlcworeworICAg
IG15ICgkc3RyaW5nKSA9IEBfOworICAgIG15ICRzdHJpbmdMZW5ndGggPSBsZW5ndGgoJHN0cmlu
Zyk7CisgICAgbXkgJHNlYXJjaFBvc2l0aW9uID0gMDsKKyAgICBteSAkZW5jb2RlZFJ1blBvc2l0
aW9uID0gMDsKKyAgICBteSAkZGVjb2RlZFBvc2l0aW9uID0gMDsKKyAgICBteSAkcmVzdWx0ID0g
IiI7CisgICAgd2hpbGUgKCgkZW5jb2RlZFJ1blBvc2l0aW9uID0gaW5kZXgoJHN0cmluZywgIiV1
IiwgJHNlYXJjaFBvc2l0aW9uKSkgPj0gMCkgeworICAgICAgICBteSAkZW5jb2RlZFJ1bkVuZFBv
c2l0aW9uID0gJGVuY29kZWRSdW5Qb3NpdGlvbjsKKyAgICAgICAgd2hpbGUgKCRzdHJpbmdMZW5n
dGggLSAkZW5jb2RlZFJ1bkVuZFBvc2l0aW9uID49IFVuaWNvZGUxNkJpdEVzY2FwZVNlcXVlbmNl
TGVuZ3RoCisgICAgICAgICAgICAmJiBzdWJzdHIoJHN0cmluZywgJGVuY29kZWRSdW5FbmRQb3Np
dGlvbiwgVW5pY29kZTE2Qml0RXNjYXBlU2VxdWVuY2VMZW5ndGgpID1+IC8kdW5pY29kZTE2Qml0
RXNjYXBlU2VxdWVuY2VSZWdFeC8pIHsKKyAgICAgICAgICAgICRlbmNvZGVkUnVuRW5kUG9zaXRp
b24gKz0gVW5pY29kZTE2Qml0RXNjYXBlU2VxdWVuY2VMZW5ndGg7CisgICAgICAgIH0KKyAgICAg
ICAgJHNlYXJjaFBvc2l0aW9uID0gJGVuY29kZWRSdW5FbmRQb3NpdGlvbjsKKyAgICAgICAgaWYg
KCRlbmNvZGVkUnVuRW5kUG9zaXRpb24gPT0gJGVuY29kZWRSdW5Qb3NpdGlvbikgeworICAgICAg
ICAgICAgKyskc2VhcmNoUG9zaXRpb247CisgICAgICAgICAgICBuZXh0OworICAgICAgICB9Cisg
ICAgICAgICRyZXN1bHQgLj0gc3Vic3RyKCRzdHJpbmcsICRkZWNvZGVkUG9zaXRpb24sICRlbmNv
ZGVkUnVuUG9zaXRpb24gLSAkZGVjb2RlZFBvc2l0aW9uKTsKKyAgICAgICAgJHJlc3VsdCAuPSBk
ZWNvZGVSdW5PZjE2Qml0VW5pY29kZUVzY2FwZVNlcXVlbmNlcyhzdWJzdHIoJHN0cmluZywgJGVu
Y29kZWRSdW5Qb3NpdGlvbiwgJGVuY29kZWRSdW5FbmRQb3NpdGlvbiAtICRlbmNvZGVkUnVuUG9z
aXRpb24pKTsKKyAgICAgICAgJGRlY29kZWRQb3NpdGlvbiA9ICRlbmNvZGVkUnVuRW5kUG9zaXRp
b247CisgICAgfQorICAgICRyZXN1bHQgLj0gc3Vic3RyKCRzdHJpbmcsICRkZWNvZGVkUG9zaXRp
b24pOworICAgIHJldHVybiAkcmVzdWx0OworfQorCitwcmludCAiQ29udGVudC1UeXBlOiB0ZXh0
L2h0bWw7IGNoYXJzZXQ9VVRGLThcblxuIjsKKworcHJpbnQgIjwhRE9DVFlQRSBodG1sPlxuIjsK
K3ByaW50ICI8aHRtbD5cbiI7CitwcmludCAiPGJvZHk+XG4iOworcHJpbnQgZGVjb2RlMTZCaXRV
bmljb2RlRXNjYXBlU2VxdWVuY2VzKCRjZ2ktPnBhcmFtKCdxJykpOworcHJpbnQgIjwvYm9keT5c
biI7CitwcmludCAiPC9odG1sPlxuIjsKClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3Rz
L2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9yZXNvdXJjZXMvZWNoby1pbnRlcnRhZy1k
ZWNvZGUtMTZiaXQtdW5pY29kZS5wbApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQog
ICArICoKCg==
</data>
<flag name="review"
          id="103338"
          type_id="1"
          status="+"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>