<?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>92448</bug_id>
          
          <creation_ts>2012-07-26 19:21:44 -0700</creation_ts>
          <short_desc>Make QuotesData use a Vector of pairs</short_desc>
          <delta_ts>2012-07-30 19:56:30 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>92061</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Elliott Sprehn">esprehn</reporter>
          <assigned_to name="Elliott Sprehn">esprehn</assigned_to>
          <cc>bdakin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>eric</cc>
    
    <cc>inferno</cc>
    
    <cc>jchaffraix</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>680019</commentid>
    <comment_count>0</comment_count>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-07-26 19:21:44 -0700</bug_when>
    <thetext>Make QuotesData use a Vector of pairs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680022</commentid>
    <comment_count>1</comment_count>
      <attachid>154813</attachid>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-07-26 19:27:49 -0700</bug_when>
    <thetext>Created attachment 154813
Patch

Move QuotesData to use managed containers instead of being a ptr to raw memory that contains both a QuotesData and a set of String instances off the end.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680079</commentid>
    <comment_count>2</comment_count>
      <attachid>154829</attachid>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-07-26 21:14:26 -0700</bug_when>
    <thetext>Created attachment 154829
Patch

Incorporated review comments from jchaffraix on WKBug 92061.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680993</commentid>
    <comment_count>3</comment_count>
      <attachid>155028</attachid>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-07-27 12:49:53 -0700</bug_when>
    <thetext>Created attachment 155028
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681087</commentid>
    <comment_count>4</comment_count>
      <attachid>155028</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-07-27 14:25:02 -0700</bug_when>
    <thetext>Comment on attachment 155028
Patch for landing

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

I would like to see another round.

&gt; Source/WebCore/css/StyleResolver.cpp:3453
&gt; +                // item() returns null if out of bounds so this is safe

A sentence usually ends with a dot.

&gt; Source/WebCore/css/StyleResolver.cpp:3460
&gt; +                String startQuote = static_cast&lt;CSSPrimitiveValue*&gt;(first)-&gt;getStringValue();
&gt; +                String endQuote = static_cast&lt;CSSPrimitiveValue*&gt;(second)-&gt;getStringValue();

I would support adding toCSSPrimitiveValue to match other objects in WebKit but maybe people working in CSS on a more regular basis would object.

&gt; Source/WebCore/rendering/RenderQuote.cpp:139
&gt; +typedef HashMap&lt;AtomicString, const QuotesData*&gt; QuotesMap;

I think you should just use a HashMap with the CaseFoldingHash here:

typedef HashMap&lt;AtomicString, const QuotesData*, CaseFoldingHash&gt; QuotesMap;

This would avoid the need to call lower() below for the hash computation.

&gt; Source/WebCore/rendering/RenderQuote.cpp:199
&gt; +        return quotes-&gt;getCloseQuote(m_depth ? m_depth - 1 : m_depth + 1).impl();

Writing this:

int closeQuoteIndex = max&lt;int&gt;(m_depth - 1, 1);
return quotes-&gt;getCloseQuote(closeQuoteIndex).impl();

would be a lot more readable as m_depth != -1. On top of that, you would see that you never call getCloseQuote() with a negative number.

However this is completely wrong as it doesn&apos;t match what the spec says: &quot;A &apos;close-quote&apos; or &apos;no-close-quote&apos; that would make the depth negative is in error and is ignored&quot;. Let&apos;s add a FIXME about that as it was already wrong.

&gt; Source/WebCore/rendering/style/QuotesData.cpp:42
&gt; +PassRefPtr&lt;QuotesData&gt; QuotesData::create()

Nit: This could be inlined in the header as it is a trivial create().

&gt; Source/WebCore/rendering/style/QuotesData.cpp:56
&gt; +    if ((size_t)index &gt;= m_quotePairs.size())

I would cast index as an unsigned to avoid this cast. It could be argued either way though so it&apos;s a nit.

&gt; Source/WebCore/rendering/style/QuotesData.cpp:70
&gt; +bool QuotesData::equal(const QuotesData* a, const QuotesData* b)

This function should be named equals() in proper English. Alternatively it should be replaced by an operator= to match the rest of the style code. You don&apos;t need to fix this now but at least let&apos;s put a FIXME here.

&gt; Source/WebCore/rendering/style/QuotesData.cpp:72
&gt; +    return a &amp;&amp; b &amp;&amp; a-&gt;m_quotePairs == b-&gt;m_quotePairs;

The case where both |a| and |b| are NULL is impossible or am I wrong? If that&apos;s the case, we should add the appropriate ASSERT.

&gt; Source/WebCore/rendering/style/QuotesData.h:39
&gt; +    ~QuotesData() { };

The empty destructor can be removed. The compiler will generate it for you with the right access specifier AFAICT.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681101</commentid>
    <comment_count>5</comment_count>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-07-27 14:42:14 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 155028 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=155028&amp;action=review
&gt; ..
&gt; I would support adding toCSSPrimitiveValue to match other objects in WebKit but maybe people working in CSS on a more regular basis would object.

Yeah this seems reasonable.

&gt; &gt; Source/WebCore/rendering/RenderQuote.cpp:199
&gt; &gt; +        return quotes-&gt;getCloseQuote(m_depth ? m_depth - 1 : m_depth + 1).impl();
&gt; 
&gt; Writing this:
&gt; 
&gt; int closeQuoteIndex = max&lt;int&gt;(m_depth - 1, 1);
&gt; return quotes-&gt;getCloseQuote(closeQuoteIndex).impl();

This would be wrong.

&gt; 
&gt; would be a lot more readable as m_depth != -1. On top of that, you would see that you never call getCloseQuote() with a negative number.
&gt; 
&gt; However this is completely wrong as it doesn&apos;t match what the spec says: &quot;A &apos;close-quote&apos; or &apos;no-close-quote&apos; that would make the depth negative is in error and is ignored&quot;. Let&apos;s add a FIXME about that as it was already wrong.

This isn&apos;t wrong.  Calling getCloseQuote with a negative number returns an empty string which is the correct behavior per the spec. The local depth can be negative in which case we should render as if the quote was an empty string.

&gt; 
&gt; &gt; Source/WebCore/rendering/style/QuotesData.cpp:72
&gt; &gt; +    return a &amp;&amp; b &amp;&amp; a-&gt;m_quotePairs == b-&gt;m_quotePairs;
&gt; 
&gt; The case where both |a| and |b| are NULL is impossible or am I wrong? If that&apos;s the case, we should add the appropriate ASSERT.

It can happen if someone changes the quotes CSS property and then we go down through styleDidChange in RenderQuote.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681134</commentid>
    <comment_count>6</comment_count>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-07-27 15:08:58 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 155028 [details])
&gt; 
&gt; &gt; Source/WebCore/css/StyleResolver.cpp:3460
&gt; &gt; +                String startQuote = static_cast&lt;CSSPrimitiveValue*&gt;(first)-&gt;getStringValue();
&gt; &gt; +                String endQuote = static_cast&lt;CSSPrimitiveValue*&gt;(second)-&gt;getStringValue();
&gt; 
&gt; I would support adding toCSSPrimitiveValue to match other objects in WebKit but maybe people working in CSS on a more regular basis would object.
&gt; 

I&apos;ll do this in a separate patch since it makes more sense to change all of them in that file at once.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681146</commentid>
    <comment_count>7</comment_count>
      <attachid>155028</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-07-27 15:20:11 -0700</bug_when>
    <thetext>Comment on attachment 155028
Patch for landing

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

&gt;&gt;&gt; Source/WebCore/rendering/RenderQuote.cpp:199
&gt;&gt;&gt; +        return quotes-&gt;getCloseQuote(m_depth ? m_depth - 1 : m_depth + 1).impl();
&gt;&gt; 
&gt;&gt; Writing this:
&gt;&gt; 
&gt;&gt; int closeQuoteIndex = max&lt;int&gt;(m_depth - 1, 1);
&gt;&gt; return quotes-&gt;getCloseQuote(closeQuoteIndex).impl();
&gt;&gt; 
&gt;&gt; would be a lot more readable as m_depth != -1. On top of that, you would see that you never call getCloseQuote() with a negative number.
&gt;&gt; 
&gt;&gt; However this is completely wrong as it doesn&apos;t match what the spec says: &quot;A &apos;close-quote&apos; or &apos;no-close-quote&apos; that would make the depth negative is in error and is ignored&quot;. Let&apos;s add a FIXME about that as it was already wrong.
&gt; 
&gt; This would be wrong.

I missed the &apos;1&apos; case so the max doesn&apos;t work indeed. So much for simplifying.

If I am reading correctly, the code doesn&apos;t make much sense for m_depth == 0 as we will use the 2nd pair of quotes. If you could put a FIXME comment (or an explanation comment if I missed something again) that would be cool.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681166</commentid>
    <comment_count>8</comment_count>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-07-27 15:38:41 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 155028 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=155028&amp;action=review
&gt; 
&gt; I missed the &apos;1&apos; case so the max doesn&apos;t work indeed. So much for simplifying.
&gt; 
&gt; If I am reading correctly, the code doesn&apos;t make much sense for m_depth == 0 as we will use the 2nd pair of quotes. If you could put a FIXME comment (or an explanation comment if I missed something again) that would be cool.

It&apos;s just wrong, but I didn&apos;t want to change behavior in this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681167</commentid>
    <comment_count>9</comment_count>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-07-27 15:40:20 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; (From update of attachment 155028 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=155028&amp;action=review
&gt; &gt; 
&gt; &gt; I missed the &apos;1&apos; case so the max doesn&apos;t work indeed. So much for simplifying.
&gt; &gt; 
&gt; &gt; If I am reading correctly, the code doesn&apos;t make much sense for m_depth == 0 as we will use the 2nd pair of quotes. If you could put a FIXME comment (or an explanation comment if I missed something again) that would be cool.
&gt; 
&gt; It&apos;s just wrong, but I didn&apos;t want to change behavior in this patch.

Actually, this was correct for the original code which stored all quotes in a flat array. If you were at depth 0, you should pick position 1 from the array since that&apos;d be the closing quote of the first pair. In the new code it should be std::max&lt;int&gt;(m_depth - 1, 0)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681181</commentid>
    <comment_count>10</comment_count>
      <attachid>155075</attachid>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-07-27 15:48:58 -0700</bug_when>
    <thetext>Created attachment 155075
Patch

Second round of review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682127</commentid>
    <comment_count>11</comment_count>
      <attachid>155075</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-07-30 10:16:35 -0700</bug_when>
    <thetext>Comment on attachment 155075
Patch

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

The change looks fine, now we need some testing as you changed some behaviors that were obvious not covered by the tests.

&gt; Source/WebCore/ChangeLog:20
&gt; +        (WebCore):
&gt; +                (WebCore::quotesDataLanguageMap): New function that returns the HashMap of languages.

Weird indentation.

&gt; Source/WebCore/rendering/RenderQuote.cpp:149
&gt; +    staticQuotesMap-&gt;set(&quot;en&quot;, QuotesData::create(U(&quot;\x201C&quot;), U(&quot;\x201D&quot;), U(&quot;\x2018&quot;), U(&quot;\x2019&quot;)).leakRef());
&gt; +    staticQuotesMap-&gt;set(&quot;no&quot;, QuotesData::create(U(&quot;\x00AB&quot;), U(&quot;\x00BB&quot;), U(&quot;\x2039&quot;), U(&quot;\x203A&quot;)).leakRef());
&gt; +    staticQuotesMap-&gt;set(&quot;ro&quot;, QuotesData::create(U(&quot;\x201E&quot;), U(&quot;\x201D&quot;)).leakRef());
&gt; +    staticQuotesMap-&gt;set(&quot;ru&quot;, QuotesData::create(U(&quot;\x00AB&quot;), U(&quot;\x00BB&quot;), U(&quot;\x201E&quot;), U(&quot;\x201C&quot;)).leakRef());

If you have some clue about where those constants come from, it would be nice to mention it here. The table in CSS 2.1 section 12.3.1 is informative and doesn&apos;t have a language mapping.

&gt; Source/WebCore/rendering/RenderQuote.cpp:174
&gt;      const AtomicString* language;

I think it should be an AtomicString and not a pointer. We don&apos;t ever expect |language| to be NULL: getAttribute returns nullAtom if there is no attribute.

&gt; Source/WebCore/rendering/RenderQuote.cpp:200
&gt; +        return quotes-&gt;getCloseQuote(std::max&lt;int&gt;(m_depth - 1, 0)).impl();

You did break this code in the previous patch for m_depth == 0, yet the tests passed with flying colors. We need a test for this case as part of this change (even if the result is not compliant with CSS 2.1 as we return a String when we shouldn&apos;t)

&gt; Source/WebCore/rendering/style/QuotesData.cpp:69
&gt; +    if (a == b)

This was also improperly handled in the previous patch and it would be nice to have some testing about that. Not 100% sure JS can trigger that reliably though but it&apos;s worth a try and adding some tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682436</commentid>
    <comment_count>12</comment_count>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-07-30 15:10:09 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 155075 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=155075&amp;action=review
&gt; ...
&gt; If you have some clue about where those constants come from, it would be nice to mention it here. The table in CSS 2.1 section 12.3.1 is informative and doesn&apos;t have a language mapping.
&gt; 

Added a link. Eventually this map should include the quotes for all the languages from bug 3234&apos;s css file.

&gt; 
&gt; &gt; Source/WebCore/rendering/style/QuotesData.cpp:69
&gt; &gt; +    if (a == b)
&gt; 
&gt; This was also improperly handled in the previous patch and it would be nice to have some testing about that. Not 100% sure JS can trigger that reliably though but it&apos;s worth a try and adding some tests.

This is hard to test because we&apos;d just be doing layout when we don&apos;t need to be so it&apos;s a perf thing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682450</commentid>
    <comment_count>13</comment_count>
      <attachid>155380</attachid>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-07-30 15:16:58 -0700</bug_when>
    <thetext>Created attachment 155380
Patch

Added test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682504</commentid>
    <comment_count>14</comment_count>
      <attachid>155380</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-07-30 16:25:06 -0700</bug_when>
    <thetext>Comment on attachment 155380
Patch

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

&gt; Source/WebCore/css/StyleResolver.cpp:3465
&gt; +        }
&gt; +        if (primitiveValue) {

You don&apos;t early-return above so it should still be an:

else if (primitiveValue) {

&gt; LayoutTests/fast/css-generated-content/close-quote-negative-depth.html:1
&gt; +

Please don&apos;t forget a DOCTYPE as we don&apos;t want to test quirks mode behavior.

&gt; LayoutTests/fast/css-generated-content/close-quote-negative-depth.html:8
&gt; +&lt;!-- There should be no quotes. --&gt;

Let&apos;s dump this in the output along with a description of what you are testing and potentially the bug number. This would make it easier for maintainer to see what&apos;s expected and if some output is right or wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682520</commentid>
    <comment_count>15</comment_count>
      <attachid>155396</attachid>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-07-30 16:40:20 -0700</bug_when>
    <thetext>Created attachment 155396
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682655</commentid>
    <comment_count>16</comment_count>
      <attachid>155396</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-30 19:56:25 -0700</bug_when>
    <thetext>Comment on attachment 155396
Patch for landing

Clearing flags on attachment: 155396

Committed r124157: &lt;http://trac.webkit.org/changeset/124157&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682656</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-30 19:56:30 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154813</attachid>
            <date>2012-07-26 19:27:49 -0700</date>
            <delta_ts>2012-07-26 21:14:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-92448-20120726192738.patch</filename>
            <type>text/plain</type>
            <size>16035</size>
            <attacher name="Elliott Sprehn">esprehn</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzMTM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDdlZWU2YzRjNDZjZjJl
M2VkZWM2NzFmNjczZTM1NTU4ZGNjNzRhNC4uM2JjZWM0ZGFjODNmMzQ5NDFlYjFmNmIyNGJkYzFh
NjVmYjg4OTUyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDEyLTA3LTI2ICBFbGxp
b3R0IFNwcmVobiAgPGVzcHJlaG5AZ21haWwuY29tPgorCisgICAgICAgIE1ha2UgUXVvdGVzRGF0
YSB1c2UgYSBWZWN0b3Igb2YgcGFpcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTkyNDQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgUXVvdGVzRGF0YTo6Y3JlYXRlIHJldHVybmVkIGFuIGFycmF5IG9mIG1l
bW9yeSB0aGF0IGNvbnRhaW5lZCBpbiBwbGFjZSBpbnN0YW50aWF0aW9ucworICAgICAgICBvZiBh
IFF1b3Rlc0RhdGEgYW5kIHRoZW4gU3RyaW5nIGluc3RhbmNlcy4gVGhpcyBjaGFuZ2VzIHRoZSBj
b2RlIHRvIHVzZSBhIFZlY3RvciBvZgorICAgICAgICBwYWlycyBtYWtpbmcgaXQgc2FmZXIgYW5k
IGVuc3VyaW5nIHRoYXQgcXVvdGVzIGFyZSBhbHdheXMgYmFsYW5jZWQuIFRoaXMgYWxzbyB1c2Vz
IGEKKyAgICAgICAgSGFzaE1hcCBkaXJlY3RseSBpbiB0aGUgUXVvdGVSZW5kZXJlciBpbnN0ZWFk
IG9mIGJ1aWxkaW5nIGl0IG9uIGZpcnN0IGFjY2VzcyByZWR1Y2luZworICAgICAgICB0aGUgYW1v
dW50IG9mIGNvZGUgbmVlZGVkIGZvciBwaWNraW5nIHF1b3RlcyBieSBsYW5ndWFnZS4KKworICAg
ICAgICBObyBuZXcgdGVzdHMgbmVlZGVkOiBUaGlzIGp1c3QgY2hhbmdlcyB0aGUgc3RvcmFnZSBm
b3JtYXQuCisKKyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QpOiBDcmVhdGUg
cGFpcnMgYW5kIHVzZSB0aGUgbmV3IFF1b3Rlc0RhdGEgQVBJLgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJRdW90ZS5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OnF1b3Rlc0RhdGFMYW5ndWFnZU1hcCk6IE5ldyBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIEhh
c2hNYXAgb2YgbGFuZ3VhZ2VzLgorICAgICAgICAoV2ViQ29yZTo6YmFzaWNRdW90ZXNEYXRhKTog
UmV0dXJucyB0aGUgc2ltcGxlIGZvcm0gb2YgcXVvdGVzLCAiIGFuZCAnLgorICAgICAgICAoV2Vi
Q29yZTo6ZGVmYXVsdFF1b3Rlcyk6IENoYW5nZWQgdG8gdXNlIHRoZSBuZXcgbWFwLgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyUXVvdGU6Om9yaWdpbmFsVGV4dCk6IENoYW5nZWQgdG8gdXNlIHRo
ZSBuZXcgZ2V0T3BlblF1b3RlIGFuZCBnZXRDbG9zZVF1b3RlIHdoaWNoIGVuc3VyZSBib3VuZHMg
Y2hlY2tzLgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9RdW90ZXNEYXRhLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlF1b3Rlc0RhdGE6OmNyZWF0ZSk6IE5vdyByZXR1cm5zIGEgcGxhaW4gaW5z
dGFuY2Ugb2YgUXVvdGVzRGF0YSB3aXRob3V0IHRoZSBpbiBwbGFjZSBhbGxvY2F0aW9uLgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpRdW90ZXNEYXRhOjphZGRQYWlyKTog
QWRkcyBhbiBzdGQ6OnBhaXIgb2Ygc3RyaW5ncyBlbnN1cmluZyBxdW90ZXMgYXJlIGFsd2F5cyBi
YWxhbmNlZC4KKyAgICAgICAgKFdlYkNvcmU6OlF1b3Rlc0RhdGE6OmdldE9wZW5RdW90ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpRdW90ZXNEYXRhOjpnZXRDbG9zZVF1b3RlKToKKyAgICAgICAgKFdl
YkNvcmU6OlF1b3Rlc0RhdGE6OmVxdWFsKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvUXVv
dGVzRGF0YS5oOgorICAgICAgICAoUXVvdGVzRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpRdW90
ZXNEYXRhOjp+UXVvdGVzRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpRdW90ZXNEYXRhOjpRdW90
ZXNEYXRhKToKKwogMjAxMi0wNy0xOSAgQmVtIEpvbmVzLUJleSAgPGJqb25lc2JlQGFkb2JlLmNv
bT4KIAogICAgICAgICBbQ1NTIEV4Y2x1c2lvbnNdIC0gQ29kZSBjbGVhbnVwOiBtYWtlIHNoYXBl
IHBhcnNpbmcgdXNlIGlzQ29tbWEoKSBpbnN0ZWFkIG9mIG1hbnVhbCBjaGVja3MKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZVJlc29sdmVyLmNwcAppbmRleCA2NDViMjA4MjRmNWM1YjdhMmFhZWY0NDc1NTRl
ZTg4Zjk1MjBiYjA4Li43ZGYwNTE4ZDEzMjg5ZmUyNDc2OWZlNGJiZDMyZDEyZjA1OTM0NjRiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCkBAIC0zNDQ3LDIyICszNDQ3LDIyIEBA
IHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NW
YWx1ZSogdmFsdWUpCiAgICAgICAgIH0KICAgICAgICAgaWYgKHZhbHVlLT5pc1ZhbHVlTGlzdCgp
KSB7CiAgICAgICAgICAgICBDU1NWYWx1ZUxpc3QqIGxpc3QgPSBzdGF0aWNfY2FzdDxDU1NWYWx1
ZUxpc3QqPih2YWx1ZSk7Ci0gICAgICAgICAgICBRdW90ZXNEYXRhKiBkYXRhID0gUXVvdGVzRGF0
YTo6Y3JlYXRlKGxpc3QtPmxlbmd0aCgpKTsKLSAgICAgICAgICAgIGlmICghZGF0YSkKLSAgICAg
ICAgICAgICAgICByZXR1cm47IC8vIE91dCBvZiBtZW1vcnkKLSAgICAgICAgICAgIFN0cmluZyog
cXVvdGVzID0gZGF0YS0+ZGF0YSgpOwotICAgICAgICAgICAgZm9yIChDU1NWYWx1ZUxpc3RJdGVy
YXRvciBpID0gbGlzdDsgaS5oYXNNb3JlKCk7IGkuYWR2YW5jZSgpKSB7Ci0gICAgICAgICAgICAg
ICAgQ1NTVmFsdWUqIGl0ZW0gPSBpLnZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGl0
ZW0tPmlzUHJpbWl0aXZlVmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgcHJpbWl0aXZlVmFsdWUg
PSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGl0ZW0pOwotICAgICAgICAgICAgICAg
IEFTU0VSVChwcmltaXRpdmVWYWx1ZS0+aXNTdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgcXVv
dGVzW2kuaW5kZXgoKV0gPSBwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKTsKKyAgICAg
ICAgICAgIFJlZlB0cjxRdW90ZXNEYXRhPiBxdW90ZXMgPSBRdW90ZXNEYXRhOjpjcmVhdGUoKTsK
KyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdC0+bGVuZ3RoKCk7IGkgKz0g
MikgeworICAgICAgICAgICAgICAgIC8vIGl0ZW0oKSByZXR1cm5zIG51bGwgaWYgb3V0IG9mIGJv
dW5kcyBzbyB0aGlzIGlzIHNhZmUKKyAgICAgICAgICAgICAgICBDU1NWYWx1ZSogZmlyc3QgPSBs
aXN0LT5pdGVtKGkpOworICAgICAgICAgICAgICAgIENTU1ZhbHVlKiBzZWNvbmQgPSBsaXN0LT5p
dGVtKGkgKyAxKTsKKyAgICAgICAgICAgICAgICBpZiAoIWZpcnN0IHx8ICFmaXJzdC0+aXNQcmlt
aXRpdmVWYWx1ZSgpIHx8ICFzZWNvbmQgfHwgIXNlY29uZC0+aXNQcmltaXRpdmVWYWx1ZSgpKQor
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgc3Rh
cnRRdW90ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oZmlyc3QpLT5nZXRTdHJp
bmdWYWx1ZSgpOworICAgICAgICAgICAgICAgIFN0cmluZyBlbmRRdW90ZSA9IHN0YXRpY19jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlKj4oc2Vjb25kKS0+Z2V0U3RyaW5nVmFsdWUoKTsKKyAgICAgICAg
ICAgICAgICBxdW90ZXMtPmFkZFBhaXIoc3RkOjptYWtlX3BhaXIoc3RhcnRRdW90ZSwgZW5kUXVv
dGUpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fc3R5bGUtPnNldFF1b3RlcyhhZG9w
dFJlZihkYXRhKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUpIHsKLSAgICAg
ICAgICAgIEFTU0VSVChwcmltaXRpdmVWYWx1ZS0+aXNJZGVudCgpKTsKKyAgICAgICAgICAgIG1f
c3R5bGUtPnNldFF1b3RlcyhxdW90ZXMpOworICAgICAgICB9CisgICAgICAgIGlmIChwcmltaXRp
dmVWYWx1ZSkgewogICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09
IENTU1ZhbHVlTm9uZSkKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRRdW90ZXMoYWRvcHRS
ZWYoUXVvdGVzRGF0YTo6Y3JlYXRlKDApKSk7CisgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0
UXVvdGVzKFF1b3Rlc0RhdGE6OmNyZWF0ZSgpKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47
CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRGYW1pbHk6IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJRdW90ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyUXVvdGUuY3BwCmluZGV4IDc5ZGEwZDIwZDZjOTFiNTQ2NDc1NTYzNTkwZTdmNGNm
ZjMwZjE5N2UuLjg2OGNkYzJlMmY0MWUyZmVmZDk1NDJmNjUwZjFkNDc1NWNiMTA4NzggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJRdW90ZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclF1b3RlLmNwcApAQCAtMjYsOSArMjYsNyBAQAog
I2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAjaW5jbHVkZSAiUXVvdGVzRGF0YS5oIgogI2luY2x1
ZGUgIlJlbmRlclN0eWxlLmgiCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L0F0b21pY1N0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2Rl
ZmluZSBVTktOT1dOX0RFUFRIIC0xCiAKQEAgLTEzNiw4OSArMTM0LDI5IEBAIHNraXBOZXdEZXB0
aENhbGM6CiAgICAgfSB3aGlsZSAoaGVhZCk7CiB9CiAKLSNkZWZpbmUgQVJSQVlfU0laRShDYXJy
YXkpIChzaXplb2YoQ2FycmF5KSAvIHNpemVvZigqQ2FycmF5KSkKLSNkZWZpbmUgTEFOR1VBR0Vf
REFUQShuYW1lLCBsYW5ndWFnZVNvdXJjZUFycmF5KSB7IG5hbWUsIGxhbmd1YWdlU291cmNlQXJy
YXksIEFSUkFZX1NJWkUobGFuZ3VhZ2VTb3VyY2VBcnJheSkgfQogI2RlZmluZSBVKHgpICgoY29u
c3QgVUNoYXIqKUwjI3gpCiAKLXN0YXRpYyBjb25zdCBVQ2hhciogc2ltcGxlUXVvdGVzW10gPSB7
VSgiXCIiKSwgVSgiXCIiKSwgVSgiJyIpLCBVKCInIil9OwordHlwZWRlZiBIYXNoTWFwPEF0b21p
Y1N0cmluZywgUmVmUHRyPFF1b3Rlc0RhdGE+ID4gUXVvdGVzTWFwOwogCi1zdGF0aWMgY29uc3Qg
VUNoYXIqIGVuZ2xpc2hRdW90ZXNbXSA9IHtVKCJceDIwMUMiKSwgVSgiXHgyMDFEIiksIFUoIlx4
MjAxOCIpLCBVKCJceDIwMTkiKX07Ci1zdGF0aWMgY29uc3QgVUNoYXIqIG5vcndlZ2lhblF1b3Rl
c1tdID0geyBVKCJceDAwQUIiKSwgVSgiXHgwMEJCIiksIFUoIlx4MjAzOSIpLCBVKCJceDIwM0Ei
KSB9Owotc3RhdGljIGNvbnN0IFVDaGFyKiByb21hbmlhblF1b3Rlc1tdID0geyBVKCJceDIwMUUi
KSwgVSgiXHgyMDFEIil9Owotc3RhdGljIGNvbnN0IFVDaGFyKiBydXNzaWFuUXVvdGVzW10gPSB7
IFUoIlx4MDBBQiIpLCBVKCJceDAwQkIiKSwgVSgiXHgyMDFFIiksIFUoIlx4MjAxQyIpIH07Ci0j
dW5kZWYgVQotCi1zdHJ1Y3QgTGFuZ3VhZ2VEYXRhIHsKLSAgICBjb25zdCBjaGFyICpuYW1lOwot
ICAgIGNvbnN0IFVDaGFyKiBjb25zdCogY29uc3QgYXJyYXk7Ci0gICAgY29uc3QgaW50IGFycmF5
U2l6ZTsKLSAgICBib29sIG9wZXJhdG9yPChjb25zdCBMYW5ndWFnZURhdGEmIGNvbXBhcmVUbykg
Y29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBzdHJjbXAobmFtZSwgY29tcGFyZVRvLm5hbWUp
OwotICAgIH0KLX07Ci0KLS8vIERhdGEgbWFzdCBiZSBhbHBoYWJldGljYWxseSBzb3J0ZWQgYW5k
IGluIGFsbCBsb3dlciBjYXNlIGZvciBmYXN0IGNvbXBhcmlzb24KLUxhbmd1YWdlRGF0YSBsYW5n
dWFnZURhdGFbXSA9IHsKLSAgICBMQU5HVUFHRV9EQVRBKCJlbiIsIGVuZ2xpc2hRdW90ZXMpLAot
ICAgIExBTkdVQUdFX0RBVEEoIm5vIiwgbm9yd2VnaWFuUXVvdGVzKSwKLSAgICBMQU5HVUFHRV9E
QVRBKCJybyIsIHJvbWFuaWFuUXVvdGVzKSwKLSAgICBMQU5HVUFHRV9EQVRBKCJydSIsIHJ1c3Np
YW5RdW90ZXMpCi19OwotI3VuZGVmIExBTkdVQUdFX0RBVEEKLWNvbnN0IExhbmd1YWdlRGF0YSog
Y29uc3QgbGFuZ3VhZ2VEYXRhRW5kID0gbGFuZ3VhZ2VEYXRhICsgQVJSQVlfU0laRShsYW5ndWFn
ZURhdGEpOwotCi0jZGVmaW5lIGRlZmF1bHRMYW5ndWFnZVF1b3Rlc1NvdXJjZSBzaW1wbGVRdW90
ZXMKLSNkZWZpbmUgZGVmYXVsdExhbmd1YWdlUXVvdGVzQ291bnQgQVJSQVlfU0laRShkZWZhdWx0
TGFuZ3VhZ2VRdW90ZXNTb3VyY2UpCi0KLXN0YXRpYyBRdW90ZXNEYXRhKiBkZWZhdWx0TGFuZ3Vh
Z2VRdW90ZXNWYWx1ZSA9IDA7Ci1zdGF0aWMgY29uc3QgUXVvdGVzRGF0YSogZGVmYXVsdExhbmd1
YWdlUXVvdGVzKCkKLXsKLSAgICBpZiAoIWRlZmF1bHRMYW5ndWFnZVF1b3Rlc1ZhbHVlKSB7Ci0g
ICAgICAgIGRlZmF1bHRMYW5ndWFnZVF1b3Rlc1ZhbHVlID0gUXVvdGVzRGF0YTo6Y3JlYXRlKGRl
ZmF1bHRMYW5ndWFnZVF1b3Rlc0NvdW50KTsKLSAgICAgICAgaWYgKCFkZWZhdWx0TGFuZ3VhZ2VR
dW90ZXNWYWx1ZSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBTdHJpbmcqIGRhdGEg
PSBkZWZhdWx0TGFuZ3VhZ2VRdW90ZXNWYWx1ZS0+ZGF0YSgpOwotICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGRlZmF1bHRMYW5ndWFnZVF1b3Rlc0NvdW50OyArK2kpCi0gICAgICAgICAg
ICBkYXRhW2ldID0gZGVmYXVsdExhbmd1YWdlUXVvdGVzU291cmNlW2ldOwotICAgIH0KLSAgICBy
ZXR1cm4gZGVmYXVsdExhbmd1YWdlUXVvdGVzVmFsdWU7Ci19Ci0jdW5kZWYgZGVmYXVsdExhbmd1
YWdlUXVvdGVzU291cmNlCi0jdW5kZWYgZGVmYXVsdExhbmd1YWdlUXVvdGVzQ291bnQKLQotdHlw
ZWRlZiBIYXNoTWFwPFJlZlB0cjxBdG9taWNTdHJpbmdJbXBsPiwgUXVvdGVzRGF0YSogPiBRdW90
ZXNNYXA7Ci0KLXN0YXRpYyBRdW90ZXNNYXAmIHF1b3Rlc01hcCgpCitzdGF0aWMgUXVvdGVzTWFw
JiBxdW90ZXNEYXRhTGFuZ3VhZ2VNYXAoKQogewogICAgIERFRklORV9TVEFUSUNfTE9DQUwoUXVv
dGVzTWFwLCBzdGF0aWNRdW90ZXNNYXAsICgpKTsKKyAgICBpZiAoc3RhdGljUXVvdGVzTWFwLnNp
emUoKSkKKyAgICAgICAgcmV0dXJuIHN0YXRpY1F1b3Rlc01hcDsKKyAgICBzdGF0aWNRdW90ZXNN
YXAuc2V0KCJlbiIsIFF1b3Rlc0RhdGE6OmNyZWF0ZShVKCJceDIwMUMiKSwgVSgiXHgyMDFEIiks
IFUoIlx4MjAxOCIpLCBVKCJceDIwMTkiKSkpOworICAgIHN0YXRpY1F1b3Rlc01hcC5zZXQoIm5v
IiwgUXVvdGVzRGF0YTo6Y3JlYXRlKFUoIlx4MDBBQiIpLCBVKCJceDAwQkIiKSwgVSgiXHgyMDM5
IiksIFUoIlx4MjAzQSIpKSk7CisgICAgc3RhdGljUXVvdGVzTWFwLnNldCgicm8iLCBRdW90ZXNE
YXRhOjpjcmVhdGUoVSgiXHgyMDFFIiksIFUoIlx4MjAxRCIpKSk7CisgICAgc3RhdGljUXVvdGVz
TWFwLnNldCgicnUiLCBRdW90ZXNEYXRhOjpjcmVhdGUoVSgiXHgwMEFCIiksIFUoIlx4MDBCQiIp
LCBVKCJceDIwMUUiKSwgVSgiXHgyMDFDIikpKTsKICAgICByZXR1cm4gc3RhdGljUXVvdGVzTWFw
OwogfQogCi1zdGF0aWMgY29uc3QgUXVvdGVzRGF0YSogcXVvdGVzRm9yTGFuZ3VhZ2UoQXRvbWlj
U3RyaW5nSW1wbCogbGFuZ3VhZ2UpCitzdGF0aWMgUXVvdGVzRGF0YSogYmFzaWNRdW90ZXNEYXRh
KCkKIHsKLSAgICBRdW90ZXNEYXRhKiByZXR1cm5WYWx1ZTsKLSAgICBBdG9taWNTdHJpbmcgbG93
ZXIobGFuZ3VhZ2UtPmxvd2VyKCkpOwotICAgIHJldHVyblZhbHVlID0gcXVvdGVzTWFwKCkuZ2V0
KGxvd2VyLmltcGwoKSk7Ci0gICAgaWYgKHJldHVyblZhbHVlKQotICAgICAgICByZXR1cm4gcmV0
dXJuVmFsdWU7Ci0gICAgQ1N0cmluZyBzKHN0YXRpY19jYXN0PGNvbnN0IFN0cmluZyY+KGxvd2Vy
KS5hc2NpaSgpKTsKLSAgICBMYW5ndWFnZURhdGEgcmVxdWVzdCA9IHsgcy5idWZmZXIoKS0+ZGF0
YSgpLCAwLCAwIH07Ci0gICAgY29uc3QgTGFuZ3VhZ2VEYXRhKiBsb3dlckJvdW5kID0gc3RkOjps
b3dlcl9ib3VuZDxjb25zdCBMYW5ndWFnZURhdGEqLCBjb25zdCBMYW5ndWFnZURhdGE+KGxhbmd1
YWdlRGF0YSwgbGFuZ3VhZ2VEYXRhRW5kLCByZXF1ZXN0KTsKLSAgICBpZiAobG93ZXJCb3VuZCA9
PSBsYW5ndWFnZURhdGFFbmQpCi0gICAgICAgIHJldHVybiBkZWZhdWx0TGFuZ3VhZ2VRdW90ZXMo
KTsKLSAgICBpZiAoc3RybmNtcChsb3dlckJvdW5kLT5uYW1lLCByZXF1ZXN0Lm5hbWUsIHN0cmxl
bihsb3dlckJvdW5kLT5uYW1lKSkpCi0gICAgICAgIHJldHVybiBkZWZhdWx0TGFuZ3VhZ2VRdW90
ZXMoKTsKLSAgICByZXR1cm5WYWx1ZSA9IFF1b3Rlc0RhdGE6OmNyZWF0ZShsb3dlckJvdW5kLT5h
cnJheVNpemUpOwotICAgIGlmICghcmV0dXJuVmFsdWUpCi0gICAgICAgIHJldHVybiBkZWZhdWx0
TGFuZ3VhZ2VRdW90ZXMoKTsKLSAgICBTdHJpbmcqIGRhdGEgPSByZXR1cm5WYWx1ZS0+ZGF0YSgp
OwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbG93ZXJCb3VuZC0+YXJyYXlTaXplOyArK2kpCi0g
ICAgICAgIGRhdGFbaV0gPSBsb3dlckJvdW5kLT5hcnJheVtpXTsKLSAgICBxdW90ZXNNYXAoKS5z
ZXQobG93ZXIuaW1wbCgpLCByZXR1cm5WYWx1ZSk7Ci0gICAgcmV0dXJuIHJldHVyblZhbHVlOwor
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoUmVmUHRyPFF1b3Rlc0RhdGE+LCBzdGF0aWNCYXNpY1F1
b3RlcywgKCkpOworICAgIGlmICghc3RhdGljQmFzaWNRdW90ZXMpCisgICAgICAgIHN0YXRpY0Jh
c2ljUXVvdGVzID0gUXVvdGVzRGF0YTo6Y3JlYXRlKFUoIlwiIiksIFUoIlwiIiksIFUoIiciKSwg
VSgiJyIpKTsKKyAgICByZXR1cm4gc3RhdGljQmFzaWNRdW90ZXMuZ2V0KCk7CiB9Ci0jdW5kZWYg
QVJSQVlfU0laRQogCiBzdGF0aWMgY29uc3QgUXVvdGVzRGF0YSogZGVmYXVsdFF1b3Rlcyhjb25z
dCBSZW5kZXJPYmplY3QqIG9iamVjdCkKIHsKQEAgLTIzMiwxNiArMTcwLDE5IEBAIHN0YXRpYyBj
b25zdCBRdW90ZXNEYXRhKiBkZWZhdWx0UXVvdGVzKGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0
KQogICAgIH0gZWxzZSBpZiAoIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkgewogICAgICAgICBlbGVt
ZW50ID0gbm9kZS0+cGFyZW50RWxlbWVudCgpOwogICAgICAgICBpZiAoIWVsZW1lbnQpCi0gICAg
ICAgICAgICByZXR1cm4gZGVmYXVsdExhbmd1YWdlUXVvdGVzKCk7CisgICAgICAgICAgICByZXR1
cm4gYmFzaWNRdW90ZXNEYXRhKCk7CiAgICAgfSBlbHNlCiAgICAgICBlbGVtZW50ID0gdG9FbGVt
ZW50KG5vZGUpOwogICAgIGNvbnN0IEF0b21pY1N0cmluZyogbGFuZ3VhZ2U7CiAgICAgd2hpbGUg
KChsYW5ndWFnZSA9ICZlbGVtZW50LT5nZXRBdHRyaWJ1dGUobGFuZ1N0cmluZykpICYmIGxhbmd1
YWdlLT5pc051bGwoKSkgewogICAgICAgICBlbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVu
dCgpOwogICAgICAgICBpZiAoIWVsZW1lbnQpCi0gICAgICAgICAgICByZXR1cm4gZGVmYXVsdExh
bmd1YWdlUXVvdGVzKCk7CisgICAgICAgICAgICByZXR1cm4gYmFzaWNRdW90ZXNEYXRhKCk7CiAg
ICAgfQotICAgIHJldHVybiBxdW90ZXNGb3JMYW5ndWFnZShsYW5ndWFnZS0+aW1wbCgpKTsKKyAg
ICBSZWZQdHI8UXVvdGVzRGF0YT4gcXVvdGVzRGF0YSA9IHF1b3Rlc0RhdGFMYW5ndWFnZU1hcCgp
LmdldChsYW5ndWFnZS0+bG93ZXIoKSk7CisgICAgaWYgKCFxdW90ZXNEYXRhKQorICAgICAgICBy
ZXR1cm4gYmFzaWNRdW90ZXNEYXRhKCk7CisgICAgcmV0dXJuIHF1b3Rlc0RhdGEuZ2V0KCk7CiB9
CiAKIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gUmVuZGVyUXVvdGU6Om9yaWdpbmFsVGV4dCgpIGNv
bnN0CkBAIC0yNTIsMzAgKzE5MywxOCBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFJlbmRlclF1
b3RlOjpvcmlnaW5hbFRleHQoKSBjb25zdAogICAgIGNvbnN0IFF1b3Rlc0RhdGEqIHF1b3RlcyA9
IHN0eWxlKCktPnF1b3RlcygpOwogICAgIGlmICghcXVvdGVzKQogICAgICAgICBxdW90ZXMgPSBk
ZWZhdWx0UXVvdGVzKHRoaXMpOwotICAgIGlmICghcXVvdGVzLT5sZW5ndGgpCi0gICAgICAgIHJl
dHVybiBlbXB0eUF0b20uaW1wbCgpOwotICAgIGludCBpbmRleCA9IG1fZGVwdGggKiAyOwogICAg
IHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBOT19PUEVOX1FVT1RFOgogICAgIGNhc2UgTk9f
Q0xPU0VfUVVPVEU6Ci0gICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpLmltcGwoKTsKKyAgICAg
ICAgcmV0dXJuIFN0cmluZ0ltcGw6OmVtcHR5KCk7CiAgICAgY2FzZSBDTE9TRV9RVU9URToKLSAg
ICAgICAgaWYgKGluZGV4KQotICAgICAgICAgICAgLS1pbmRleDsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgKytpbmRleDsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBxdW90ZXMt
PmdldENsb3NlUXVvdGUobV9kZXB0aCA/IG1fZGVwdGggLSAxIDogbV9kZXB0aCArIDEpLmltcGwo
KTsKICAgICBjYXNlIE9QRU5fUVVPVEU6Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4g
cXVvdGVzLT5nZXRPcGVuUXVvdGUobV9kZXB0aCkuaW1wbCgpOwogICAgIGRlZmF1bHQ6CiAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gZW1wdHlBdG9tLmltcGwo
KTsKKyAgICAgICAgcmV0dXJuIFN0cmluZ0ltcGw6OmVtcHR5KCk7CiAgICAgfQotICAgIGlmIChp
bmRleCA+PSBxdW90ZXMtPmxlbmd0aCkKLSAgICAgICAgaW5kZXggPSAocXVvdGVzLT5sZW5ndGgt
MikgfCAoaW5kZXggJiAxKTsKLSAgICBpZiAoaW5kZXggPCAwKQotICAgICAgICByZXR1cm4gZW1w
dHlBdG9tLmltcGwoKTsKLSAgICByZXR1cm4gcXVvdGVzLT5kYXRhKClbaW5kZXhdLmltcGwoKTsK
IH0KIAogdm9pZCBSZW5kZXJRdW90ZTo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoZmxv
YXQgbGVhZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9RdW90
ZXNEYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9RdW90ZXNEYXRhLmNw
cAppbmRleCA0ZTgxZjc1NjdmNWNiYTgzNWU2MmI4MDcyYzYxYWVmYTlhZTliNjE5Li41MTEyODgx
YTUwOTVhODE1NDEwMjRiMDNiMDczNTE5MmEzNTZjNjcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3R5bGUvUXVvdGVzRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N0eWxlL1F1b3Rlc0RhdGEuY3BwCkBAIC0xLDUgKzEsNiBAQAogLyoqCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCkBAIC0yMywzOCArMjQsNTIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1RdW90ZXNEYXRhKiBRdW90ZXNEYXRhOjpjcmVhdGUoaW50IHN0cmluZ0NvdW50KQorUGFzc1Jl
ZlB0cjxRdW90ZXNEYXRhPiBRdW90ZXNEYXRhOjpjcmVhdGUoU3RyaW5nIG9wZW4sIFN0cmluZyBj
bG9zZSkKIHsKLSAgICBjaGFyKiB0bXAgPSBuZXcgY2hhcltzaXplb2YoUXVvdGVzRGF0YSkrc2l6
ZW9mKFN0cmluZykqc3RyaW5nQ291bnRdOwotICAgIGlmICghdG1wKQotICAgICAgICByZXR1cm4g
MDsKLSAgICBRdW90ZXNEYXRhKiByZXQgPSBuZXcgKHRtcCkgUXVvdGVzRGF0YShzdHJpbmdDb3Vu
dCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzdHJpbmdDb3VudDsgKytpKQotICAgICAgICBu
ZXcgKHRtcCArc2l6ZW9mKFF1b3Rlc0RhdGEpICsgc2l6ZW9mKFN0cmluZykqaSkgU3RyaW5nKCk7
Ci0gICAgcmV0dXJuIHJldDsKKyAgICBSZWZQdHI8UXVvdGVzRGF0YT4gZGF0YSA9IFF1b3Rlc0Rh
dGE6OmNyZWF0ZSgpOworICAgIGRhdGEtPmFkZFBhaXIoc3RkOjptYWtlX3BhaXIob3BlbiwgY2xv
c2UpKTsKKyAgICByZXR1cm4gZGF0YTsKIH0KIAotYm9vbCBRdW90ZXNEYXRhOjplcXVhbChjb25z
dCBRdW90ZXNEYXRhKiBxdW90ZXNEYXRhMSwgY29uc3QgUXVvdGVzRGF0YSogcXVvdGVzRGF0YTIp
CitQYXNzUmVmUHRyPFF1b3Rlc0RhdGE+IFF1b3Rlc0RhdGE6OmNyZWF0ZShTdHJpbmcgb3BlbjEs
IFN0cmluZyBjbG9zZTEsIFN0cmluZyBvcGVuMiwgU3RyaW5nIGNsb3NlMikKIHsKLSAgICBpZiAo
cXVvdGVzRGF0YTEgPT0gcXVvdGVzRGF0YTIpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlm
ICghcXVvdGVzRGF0YTEgfHwgIXF1b3Rlc0RhdGEyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgaWYgKHF1b3Rlc0RhdGExLT5sZW5ndGggIT0gcXVvdGVzRGF0YTItPmxlbmd0aCkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGNvbnN0IFN0cmluZyogZGF0YTEgPSBxdW90ZXNEYXRhMS0+
ZGF0YSgpOwotICAgIGNvbnN0IFN0cmluZyogZGF0YTIgPSBxdW90ZXNEYXRhMi0+ZGF0YSgpOwot
ICAgIGZvciAoaW50IGkgPSBxdW90ZXNEYXRhMS0+bGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpCi0g
ICAgICAgIGlmIChkYXRhMVtpXSAhPSBkYXRhMltpXSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBSZWZQdHI8UXVvdGVzRGF0YT4gZGF0YSA9IFF1b3Rl
c0RhdGE6OmNyZWF0ZSgpOworICAgIGRhdGEtPmFkZFBhaXIoc3RkOjptYWtlX3BhaXIob3BlbjEs
IGNsb3NlMSkpOworICAgIGRhdGEtPmFkZFBhaXIoc3RkOjptYWtlX3BhaXIob3BlbjIsIGNsb3Nl
MikpOworICAgIHJldHVybiBkYXRhOwogfQogCi1RdW90ZXNEYXRhOjp+UXVvdGVzRGF0YSgpCitQ
YXNzUmVmUHRyPFF1b3Rlc0RhdGE+IFF1b3Rlc0RhdGE6OmNyZWF0ZSgpCiB7Ci0gICAgU3RyaW5n
KiBwID0gZGF0YSgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAg
ICAgIHBbaV0uflN0cmluZygpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgUXVvdGVzRGF0YSgp
KTsKK30KKwordm9pZCBRdW90ZXNEYXRhOjphZGRQYWlyKHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmlu
Zz4gcXVvdGVQYWlyKQoreworICAgIG1fcXVvdGVQYWlycy5hcHBlbmQocXVvdGVQYWlyKTsKK30K
KworY29uc3QgU3RyaW5nIFF1b3Rlc0RhdGE6OmdldE9wZW5RdW90ZShpbnQgaW5kZXgpIGNvbnN0
Cit7CisgICAgaWYgKCFtX3F1b3RlUGFpcnMuc2l6ZSgpIHx8IGluZGV4IDwgMCkKKyAgICAgICAg
cmV0dXJuIGVtcHR5U3RyaW5nKCk7CisgICAgaWYgKChzaXplX3QpaW5kZXggPj0gbV9xdW90ZVBh
aXJzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIG1fcXVvdGVQYWlycy5sYXN0KCkuZmlyc3Q7Cisg
ICAgcmV0dXJuIG1fcXVvdGVQYWlycy5hdChpbmRleCkuZmlyc3Q7Cit9CisKK2NvbnN0IFN0cmlu
ZyBRdW90ZXNEYXRhOjpnZXRDbG9zZVF1b3RlKGludCBpbmRleCkgY29uc3QKK3sKKyAgICBpZiAo
IW1fcXVvdGVQYWlycy5zaXplKCkgfHwgaW5kZXggPCAwKQorICAgICAgICByZXR1cm4gZW1wdHlT
dHJpbmcoKTsKKyAgICBpZiAoKHNpemVfdClpbmRleCA+PSBtX3F1b3RlUGFpcnMuc2l6ZSgpKQor
ICAgICAgICByZXR1cm4gbV9xdW90ZVBhaXJzLmxhc3QoKS5zZWNvbmQ7CisgICAgcmV0dXJuIG1f
cXVvdGVQYWlycy5hdChpbmRleCkuc2Vjb25kOworfQorCitib29sIFF1b3Rlc0RhdGE6OmVxdWFs
KGNvbnN0IFF1b3Rlc0RhdGEqIGEsIGNvbnN0IFF1b3Rlc0RhdGEqIGIpCit7CisgICAgcmV0dXJu
IGEgJiYgYiAmJiBhLT5tX3F1b3RlUGFpcnMgPT0gYi0+bV9xdW90ZVBhaXJzOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3R5bGUvUXVvdGVzRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1F1b3Rl
c0RhdGEuaAppbmRleCBmODE3OTk2ZjA4YzUzNjkwZjM5ODM1ZWJkNDQ0NjE4YjkwNTJkYWM2Li4y
MjUwOGIzNDQzMGI3ZjcxODZhMTA2MmMyNzViZjllNTdkZWE5Y2I5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUXVvdGVzRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9RdW90ZXNEYXRhLmgKQEAgLTEsNSArMSw2IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSAyMDExIE5va2lhIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCkBAIC0yMSwyNCArMjIsMzEgQEAKICNpZm5kZWYgUXVvdGVzRGF0YV9oCiAj
ZGVmaW5lIFF1b3Rlc0RhdGFfaAogCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgUXVvdGVzRGF0YSA6IHB1YmxpYyBSZWZDb3VudGVkPFF1
b3Rlc0RhdGE+IHsKIHB1YmxpYzoKLSAgICB2aXJ0dWFsIH5RdW90ZXNEYXRhKCk7Ci0gICAgc3Rh
dGljIFF1b3Rlc0RhdGEqIGNyZWF0ZShpbnQgc3RyaW5nQ291bnQpOwotICAgIFN0cmluZyogZGF0
YSgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8U3RyaW5nKj4odGhpcysxKTsgfQotICAgIGNv
bnN0IFN0cmluZyogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
U3RyaW5nKj4odGhpcysxKTsgfQotICAgIGludCBsZW5ndGg7Ci0gICAgdm9pZCBvcGVyYXRvciBk
ZWxldGUodm9pZCogcCkgeyBkZWxldGVbXSBzdGF0aWNfY2FzdDxjaGFyKj4ocCk7IH0KKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxRdW90ZXNEYXRhPiBjcmVhdGUoKTsKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxRdW90ZXNEYXRhPiBjcmVhdGUoY29uc3QgU3RyaW5nIG9wZW4sIGNvbnN0IFN0cmluZyBj
bG9zZSk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8UXVvdGVzRGF0YT4gY3JlYXRlKGNvbnN0IFN0
cmluZyBvcGVuMSwgY29uc3QgU3RyaW5nIGNsb3NlMSwgY29uc3QgU3RyaW5nIG9wZW4yLCBjb25z
dCBTdHJpbmcgY2xvc2UyKTsKICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBRdW90ZXNEYXRh
KiwgY29uc3QgUXVvdGVzRGF0YSopOworCisgICAgflF1b3Rlc0RhdGEoKSB7IH07CisgICAgdm9p
ZCBhZGRQYWlyKGNvbnN0IHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4gcXVvdGVQYWlyKTsKKyAg
ICBjb25zdCBTdHJpbmcgZ2V0T3BlblF1b3RlKGludCBpbmRleCkgY29uc3Q7CisgICAgY29uc3Qg
U3RyaW5nIGdldENsb3NlUXVvdGUoaW50IGluZGV4KSBjb25zdDsKKwogcHJpdmF0ZToKLSAgICBR
dW90ZXNEYXRhKGludCBzdHJpbmdDb3VudCkgOiBsZW5ndGgoc3RyaW5nQ291bnQpIHt9CisgICAg
UXVvdGVzRGF0YSgpIHsgfQorCisgICAgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4g
PiBtX3F1b3RlUGFpcnM7CiB9OwogCi19Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKICNlbmRp
ZiAvLyBRdW90ZXNEYXRhX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154829</attachid>
            <date>2012-07-26 21:14:26 -0700</date>
            <delta_ts>2012-07-27 12:49:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-92448-20120726211414.patch</filename>
            <type>text/plain</type>
            <size>16121</size>
            <attacher name="Elliott Sprehn">esprehn</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzMTM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDdlZWU2YzRjNDZjZjJl
M2VkZWM2NzFmNjczZTM1NTU4ZGNjNzRhNC4uM2JjZWM0ZGFjODNmMzQ5NDFlYjFmNmIyNGJkYzFh
NjVmYjg4OTUyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDEyLTA3LTI2ICBFbGxp
b3R0IFNwcmVobiAgPGVzcHJlaG5AZ21haWwuY29tPgorCisgICAgICAgIE1ha2UgUXVvdGVzRGF0
YSB1c2UgYSBWZWN0b3Igb2YgcGFpcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTkyNDQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgUXVvdGVzRGF0YTo6Y3JlYXRlIHJldHVybmVkIGFuIGFycmF5IG9mIG1l
bW9yeSB0aGF0IGNvbnRhaW5lZCBpbiBwbGFjZSBpbnN0YW50aWF0aW9ucworICAgICAgICBvZiBh
IFF1b3Rlc0RhdGEgYW5kIHRoZW4gU3RyaW5nIGluc3RhbmNlcy4gVGhpcyBjaGFuZ2VzIHRoZSBj
b2RlIHRvIHVzZSBhIFZlY3RvciBvZgorICAgICAgICBwYWlycyBtYWtpbmcgaXQgc2FmZXIgYW5k
IGVuc3VyaW5nIHRoYXQgcXVvdGVzIGFyZSBhbHdheXMgYmFsYW5jZWQuIFRoaXMgYWxzbyB1c2Vz
IGEKKyAgICAgICAgSGFzaE1hcCBkaXJlY3RseSBpbiB0aGUgUXVvdGVSZW5kZXJlciBpbnN0ZWFk
IG9mIGJ1aWxkaW5nIGl0IG9uIGZpcnN0IGFjY2VzcyByZWR1Y2luZworICAgICAgICB0aGUgYW1v
dW50IG9mIGNvZGUgbmVlZGVkIGZvciBwaWNraW5nIHF1b3RlcyBieSBsYW5ndWFnZS4KKworICAg
ICAgICBObyBuZXcgdGVzdHMgbmVlZGVkOiBUaGlzIGp1c3QgY2hhbmdlcyB0aGUgc3RvcmFnZSBm
b3JtYXQuCisKKyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QpOiBDcmVhdGUg
cGFpcnMgYW5kIHVzZSB0aGUgbmV3IFF1b3Rlc0RhdGEgQVBJLgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJRdW90ZS5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OnF1b3Rlc0RhdGFMYW5ndWFnZU1hcCk6IE5ldyBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIEhh
c2hNYXAgb2YgbGFuZ3VhZ2VzLgorICAgICAgICAoV2ViQ29yZTo6YmFzaWNRdW90ZXNEYXRhKTog
UmV0dXJucyB0aGUgc2ltcGxlIGZvcm0gb2YgcXVvdGVzLCAiIGFuZCAnLgorICAgICAgICAoV2Vi
Q29yZTo6ZGVmYXVsdFF1b3Rlcyk6IENoYW5nZWQgdG8gdXNlIHRoZSBuZXcgbWFwLgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyUXVvdGU6Om9yaWdpbmFsVGV4dCk6IENoYW5nZWQgdG8gdXNlIHRo
ZSBuZXcgZ2V0T3BlblF1b3RlIGFuZCBnZXRDbG9zZVF1b3RlIHdoaWNoIGVuc3VyZSBib3VuZHMg
Y2hlY2tzLgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9RdW90ZXNEYXRhLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlF1b3Rlc0RhdGE6OmNyZWF0ZSk6IE5vdyByZXR1cm5zIGEgcGxhaW4gaW5z
dGFuY2Ugb2YgUXVvdGVzRGF0YSB3aXRob3V0IHRoZSBpbiBwbGFjZSBhbGxvY2F0aW9uLgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpRdW90ZXNEYXRhOjphZGRQYWlyKTog
QWRkcyBhbiBzdGQ6OnBhaXIgb2Ygc3RyaW5ncyBlbnN1cmluZyBxdW90ZXMgYXJlIGFsd2F5cyBi
YWxhbmNlZC4KKyAgICAgICAgKFdlYkNvcmU6OlF1b3Rlc0RhdGE6OmdldE9wZW5RdW90ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpRdW90ZXNEYXRhOjpnZXRDbG9zZVF1b3RlKToKKyAgICAgICAgKFdl
YkNvcmU6OlF1b3Rlc0RhdGE6OmVxdWFsKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvUXVv
dGVzRGF0YS5oOgorICAgICAgICAoUXVvdGVzRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpRdW90
ZXNEYXRhOjp+UXVvdGVzRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpRdW90ZXNEYXRhOjpRdW90
ZXNEYXRhKToKKwogMjAxMi0wNy0xOSAgQmVtIEpvbmVzLUJleSAgPGJqb25lc2JlQGFkb2JlLmNv
bT4KIAogICAgICAgICBbQ1NTIEV4Y2x1c2lvbnNdIC0gQ29kZSBjbGVhbnVwOiBtYWtlIHNoYXBl
IHBhcnNpbmcgdXNlIGlzQ29tbWEoKSBpbnN0ZWFkIG9mIG1hbnVhbCBjaGVja3MKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZVJlc29sdmVyLmNwcAppbmRleCA2NDViMjA4MjRmNWM1YjdhMmFhZWY0NDc1NTRl
ZTg4Zjk1MjBiYjA4Li5kZGUwNGM3MDQ5MmNhYWFkZDc4ZDkyMzc0MTQ4MjAxNTY2ODljMzBkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCkBAIC0zNDQ3LDIyICszNDQ3LDI0IEBA
IHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NW
YWx1ZSogdmFsdWUpCiAgICAgICAgIH0KICAgICAgICAgaWYgKHZhbHVlLT5pc1ZhbHVlTGlzdCgp
KSB7CiAgICAgICAgICAgICBDU1NWYWx1ZUxpc3QqIGxpc3QgPSBzdGF0aWNfY2FzdDxDU1NWYWx1
ZUxpc3QqPih2YWx1ZSk7Ci0gICAgICAgICAgICBRdW90ZXNEYXRhKiBkYXRhID0gUXVvdGVzRGF0
YTo6Y3JlYXRlKGxpc3QtPmxlbmd0aCgpKTsKLSAgICAgICAgICAgIGlmICghZGF0YSkKLSAgICAg
ICAgICAgICAgICByZXR1cm47IC8vIE91dCBvZiBtZW1vcnkKLSAgICAgICAgICAgIFN0cmluZyog
cXVvdGVzID0gZGF0YS0+ZGF0YSgpOwotICAgICAgICAgICAgZm9yIChDU1NWYWx1ZUxpc3RJdGVy
YXRvciBpID0gbGlzdDsgaS5oYXNNb3JlKCk7IGkuYWR2YW5jZSgpKSB7Ci0gICAgICAgICAgICAg
ICAgQ1NTVmFsdWUqIGl0ZW0gPSBpLnZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGl0
ZW0tPmlzUHJpbWl0aXZlVmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgcHJpbWl0aXZlVmFsdWUg
PSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGl0ZW0pOwotICAgICAgICAgICAgICAg
IEFTU0VSVChwcmltaXRpdmVWYWx1ZS0+aXNTdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgcXVv
dGVzW2kuaW5kZXgoKV0gPSBwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKTsKKyAgICAg
ICAgICAgIFJlZlB0cjxRdW90ZXNEYXRhPiBxdW90ZXMgPSBRdW90ZXNEYXRhOjpjcmVhdGUoKTsK
KyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdC0+bGVuZ3RoKCk7IGkgKz0g
MikgeworICAgICAgICAgICAgICAgIENTU1ZhbHVlKiBmaXJzdCA9IGxpc3QtPml0ZW1XaXRob3V0
Qm91bmRzQ2hlY2soaSk7CisgICAgICAgICAgICAgICAgLy8gaXRlbSgpIHJldHVybnMgbnVsbCBp
ZiBvdXQgb2YgYm91bmRzIHNvIHRoaXMgaXMgc2FmZQorICAgICAgICAgICAgICAgIENTU1ZhbHVl
KiBzZWNvbmQgPSBsaXN0LT5pdGVtKGkgKyAxKTsKKyAgICAgICAgICAgICAgICBpZiAoIXNlY29u
ZCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgQVNTRVJU
KGZpcnN0LT5pc1ByaW1pdGl2ZVZhbHVlKCkpOworICAgICAgICAgICAgICAgIEFTU0VSVChzZWNv
bmQtPmlzUHJpbWl0aXZlVmFsdWUoKSk7CisgICAgICAgICAgICAgICAgU3RyaW5nIHN0YXJ0UXVv
dGUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGZpcnN0KS0+Z2V0U3RyaW5nVmFs
dWUoKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgZW5kUXVvdGUgPSBzdGF0aWNfY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZSo+KHNlY29uZCktPmdldFN0cmluZ1ZhbHVlKCk7CisgICAgICAgICAgICAg
ICAgcXVvdGVzLT5hZGRQYWlyKHN0ZDo6bWFrZV9wYWlyKHN0YXJ0UXVvdGUsIGVuZFF1b3RlKSk7
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX3N0eWxlLT5zZXRRdW90ZXMoYWRvcHRSZWYo
ZGF0YSkpOwotICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlKSB7Ci0gICAgICAgICAg
ICBBU1NFUlQocHJpbWl0aXZlVmFsdWUtPmlzSWRlbnQoKSk7CisgICAgICAgICAgICBtX3N0eWxl
LT5zZXRRdW90ZXMocXVvdGVzKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocHJpbWl0aXZlVmFs
dWUpIHsKICAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NW
YWx1ZU5vbmUpCi0gICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0UXVvdGVzKGFkb3B0UmVmKFF1
b3Rlc0RhdGE6OmNyZWF0ZSgwKSkpOworICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldFF1b3Rl
cyhRdW90ZXNEYXRhOjpjcmVhdGUoKSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAg
IGNhc2UgQ1NTUHJvcGVydHlGb250RmFtaWx5OiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyUXVvdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclF1b3RlLmNwcAppbmRleCA3OWRhMGQyMGQ2YzkxYjU0NjQ3NTU2MzU5MGU3ZjRjZmYzMGYx
OTdlLi5lZmJkYTdiOWEwNzlhM2Y0ZmJmYmY3ZDc3ZDJlYWQwMGNlMWUyZTdlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUXVvdGUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJRdW90ZS5jcHAKQEAgLTI2LDkgKzI2LDcgQEAKICNpbmNs
dWRlICJIVE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIlF1b3Rlc0RhdGEuaCIKICNpbmNsdWRlICJS
ZW5kZXJTdHlsZS5oIgotI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDx3dGYvdGV4dC9B
dG9taWNTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKICNkZWZpbmUg
VU5LTk9XTl9ERVBUSCAtMQogCkBAIC0xMzYsODkgKzEzNCwyNyBAQCBza2lwTmV3RGVwdGhDYWxj
OgogICAgIH0gd2hpbGUgKGhlYWQpOwogfQogCi0jZGVmaW5lIEFSUkFZX1NJWkUoQ2FycmF5KSAo
c2l6ZW9mKENhcnJheSkgLyBzaXplb2YoKkNhcnJheSkpCi0jZGVmaW5lIExBTkdVQUdFX0RBVEEo
bmFtZSwgbGFuZ3VhZ2VTb3VyY2VBcnJheSkgeyBuYW1lLCBsYW5ndWFnZVNvdXJjZUFycmF5LCBB
UlJBWV9TSVpFKGxhbmd1YWdlU291cmNlQXJyYXkpIH0KICNkZWZpbmUgVSh4KSAoKGNvbnN0IFVD
aGFyKilMIyN4KQogCi1zdGF0aWMgY29uc3QgVUNoYXIqIHNpbXBsZVF1b3Rlc1tdID0ge1UoIlwi
IiksIFUoIlwiIiksIFUoIiciKSwgVSgiJyIpfTsKK3R5cGVkZWYgSGFzaE1hcDxBdG9taWNTdHJp
bmcsIGNvbnN0IFF1b3Rlc0RhdGEqPiBRdW90ZXNNYXA7CiAKLXN0YXRpYyBjb25zdCBVQ2hhciog
ZW5nbGlzaFF1b3Rlc1tdID0ge1UoIlx4MjAxQyIpLCBVKCJceDIwMUQiKSwgVSgiXHgyMDE4Iiks
IFUoIlx4MjAxOSIpfTsKLXN0YXRpYyBjb25zdCBVQ2hhciogbm9yd2VnaWFuUXVvdGVzW10gPSB7
IFUoIlx4MDBBQiIpLCBVKCJceDAwQkIiKSwgVSgiXHgyMDM5IiksIFUoIlx4MjAzQSIpIH07Ci1z
dGF0aWMgY29uc3QgVUNoYXIqIHJvbWFuaWFuUXVvdGVzW10gPSB7IFUoIlx4MjAxRSIpLCBVKCJc
eDIwMUQiKX07Ci1zdGF0aWMgY29uc3QgVUNoYXIqIHJ1c3NpYW5RdW90ZXNbXSA9IHsgVSgiXHgw
MEFCIiksIFUoIlx4MDBCQiIpLCBVKCJceDIwMUUiKSwgVSgiXHgyMDFDIikgfTsKLSN1bmRlZiBV
Ci0KLXN0cnVjdCBMYW5ndWFnZURhdGEgewotICAgIGNvbnN0IGNoYXIgKm5hbWU7Ci0gICAgY29u
c3QgVUNoYXIqIGNvbnN0KiBjb25zdCBhcnJheTsKLSAgICBjb25zdCBpbnQgYXJyYXlTaXplOwot
ICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IExhbmd1YWdlRGF0YSYgY29tcGFyZVRvKSBjb25zdAot
ICAgIHsKLSAgICAgICAgcmV0dXJuIHN0cmNtcChuYW1lLCBjb21wYXJlVG8ubmFtZSk7Ci0gICAg
fQotfTsKLQotLy8gRGF0YSBtYXN0IGJlIGFscGhhYmV0aWNhbGx5IHNvcnRlZCBhbmQgaW4gYWxs
IGxvd2VyIGNhc2UgZm9yIGZhc3QgY29tcGFyaXNvbgotTGFuZ3VhZ2VEYXRhIGxhbmd1YWdlRGF0
YVtdID0gewotICAgIExBTkdVQUdFX0RBVEEoImVuIiwgZW5nbGlzaFF1b3RlcyksCi0gICAgTEFO
R1VBR0VfREFUQSgibm8iLCBub3J3ZWdpYW5RdW90ZXMpLAotICAgIExBTkdVQUdFX0RBVEEoInJv
Iiwgcm9tYW5pYW5RdW90ZXMpLAotICAgIExBTkdVQUdFX0RBVEEoInJ1IiwgcnVzc2lhblF1b3Rl
cykKLX07Ci0jdW5kZWYgTEFOR1VBR0VfREFUQQotY29uc3QgTGFuZ3VhZ2VEYXRhKiBjb25zdCBs
YW5ndWFnZURhdGFFbmQgPSBsYW5ndWFnZURhdGEgKyBBUlJBWV9TSVpFKGxhbmd1YWdlRGF0YSk7
Ci0KLSNkZWZpbmUgZGVmYXVsdExhbmd1YWdlUXVvdGVzU291cmNlIHNpbXBsZVF1b3RlcwotI2Rl
ZmluZSBkZWZhdWx0TGFuZ3VhZ2VRdW90ZXNDb3VudCBBUlJBWV9TSVpFKGRlZmF1bHRMYW5ndWFn
ZVF1b3Rlc1NvdXJjZSkKLQotc3RhdGljIFF1b3Rlc0RhdGEqIGRlZmF1bHRMYW5ndWFnZVF1b3Rl
c1ZhbHVlID0gMDsKLXN0YXRpYyBjb25zdCBRdW90ZXNEYXRhKiBkZWZhdWx0TGFuZ3VhZ2VRdW90
ZXMoKQotewotICAgIGlmICghZGVmYXVsdExhbmd1YWdlUXVvdGVzVmFsdWUpIHsKLSAgICAgICAg
ZGVmYXVsdExhbmd1YWdlUXVvdGVzVmFsdWUgPSBRdW90ZXNEYXRhOjpjcmVhdGUoZGVmYXVsdExh
bmd1YWdlUXVvdGVzQ291bnQpOwotICAgICAgICBpZiAoIWRlZmF1bHRMYW5ndWFnZVF1b3Rlc1Zh
bHVlKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIFN0cmluZyogZGF0YSA9IGRlZmF1
bHRMYW5ndWFnZVF1b3Rlc1ZhbHVlLT5kYXRhKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgZGVmYXVsdExhbmd1YWdlUXVvdGVzQ291bnQ7ICsraSkKLSAgICAgICAgICAgIGRhdGFb
aV0gPSBkZWZhdWx0TGFuZ3VhZ2VRdW90ZXNTb3VyY2VbaV07Ci0gICAgfQotICAgIHJldHVybiBk
ZWZhdWx0TGFuZ3VhZ2VRdW90ZXNWYWx1ZTsKLX0KLSN1bmRlZiBkZWZhdWx0TGFuZ3VhZ2VRdW90
ZXNTb3VyY2UKLSN1bmRlZiBkZWZhdWx0TGFuZ3VhZ2VRdW90ZXNDb3VudAotCi10eXBlZGVmIEhh
c2hNYXA8UmVmUHRyPEF0b21pY1N0cmluZ0ltcGw+LCBRdW90ZXNEYXRhKiA+IFF1b3Rlc01hcDsK
LQotc3RhdGljIFF1b3Rlc01hcCYgcXVvdGVzTWFwKCkKK3N0YXRpYyBjb25zdCBRdW90ZXNNYXAq
IHF1b3Rlc0RhdGFMYW5ndWFnZU1hcCgpCiB7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChRdW90
ZXNNYXAsIHN0YXRpY1F1b3Rlc01hcCwgKCkpOworICAgIHN0YXRpYyBRdW90ZXNNYXAqIHN0YXRp
Y1F1b3Rlc01hcCA9IG5ldyBRdW90ZXNNYXAoKTsKKyAgICBpZiAoc3RhdGljUXVvdGVzTWFwLT5z
aXplKCkpCisgICAgICAgIHJldHVybiBzdGF0aWNRdW90ZXNNYXA7CisgICAgc3RhdGljUXVvdGVz
TWFwLT5zZXQoImVuIiwgUXVvdGVzRGF0YTo6Y3JlYXRlKFUoIlx4MjAxQyIpLCBVKCJceDIwMUQi
KSwgVSgiXHgyMDE4IiksIFUoIlx4MjAxOSIpKS5sZWFrUmVmKCkpOworICAgIHN0YXRpY1F1b3Rl
c01hcC0+c2V0KCJubyIsIFF1b3Rlc0RhdGE6OmNyZWF0ZShVKCJceDAwQUIiKSwgVSgiXHgwMEJC
IiksIFUoIlx4MjAzOSIpLCBVKCJceDIwM0EiKSkubGVha1JlZigpKTsKKyAgICBzdGF0aWNRdW90
ZXNNYXAtPnNldCgicm8iLCBRdW90ZXNEYXRhOjpjcmVhdGUoVSgiXHgyMDFFIiksIFUoIlx4MjAx
RCIpKS5sZWFrUmVmKCkpOworICAgIHN0YXRpY1F1b3Rlc01hcC0+c2V0KCJydSIsIFF1b3Rlc0Rh
dGE6OmNyZWF0ZShVKCJceDAwQUIiKSwgVSgiXHgwMEJCIiksIFUoIlx4MjAxRSIpLCBVKCJceDIw
MUMiKSkubGVha1JlZigpKTsKICAgICByZXR1cm4gc3RhdGljUXVvdGVzTWFwOwogfQogCi1zdGF0
aWMgY29uc3QgUXVvdGVzRGF0YSogcXVvdGVzRm9yTGFuZ3VhZ2UoQXRvbWljU3RyaW5nSW1wbCog
bGFuZ3VhZ2UpCitzdGF0aWMgY29uc3QgUXVvdGVzRGF0YSogYmFzaWNRdW90ZXNEYXRhKCkKIHsK
LSAgICBRdW90ZXNEYXRhKiByZXR1cm5WYWx1ZTsKLSAgICBBdG9taWNTdHJpbmcgbG93ZXIobGFu
Z3VhZ2UtPmxvd2VyKCkpOwotICAgIHJldHVyblZhbHVlID0gcXVvdGVzTWFwKCkuZ2V0KGxvd2Vy
LmltcGwoKSk7Ci0gICAgaWYgKHJldHVyblZhbHVlKQotICAgICAgICByZXR1cm4gcmV0dXJuVmFs
dWU7Ci0gICAgQ1N0cmluZyBzKHN0YXRpY19jYXN0PGNvbnN0IFN0cmluZyY+KGxvd2VyKS5hc2Np
aSgpKTsKLSAgICBMYW5ndWFnZURhdGEgcmVxdWVzdCA9IHsgcy5idWZmZXIoKS0+ZGF0YSgpLCAw
LCAwIH07Ci0gICAgY29uc3QgTGFuZ3VhZ2VEYXRhKiBsb3dlckJvdW5kID0gc3RkOjpsb3dlcl9i
b3VuZDxjb25zdCBMYW5ndWFnZURhdGEqLCBjb25zdCBMYW5ndWFnZURhdGE+KGxhbmd1YWdlRGF0
YSwgbGFuZ3VhZ2VEYXRhRW5kLCByZXF1ZXN0KTsKLSAgICBpZiAobG93ZXJCb3VuZCA9PSBsYW5n
dWFnZURhdGFFbmQpCi0gICAgICAgIHJldHVybiBkZWZhdWx0TGFuZ3VhZ2VRdW90ZXMoKTsKLSAg
ICBpZiAoc3RybmNtcChsb3dlckJvdW5kLT5uYW1lLCByZXF1ZXN0Lm5hbWUsIHN0cmxlbihsb3dl
ckJvdW5kLT5uYW1lKSkpCi0gICAgICAgIHJldHVybiBkZWZhdWx0TGFuZ3VhZ2VRdW90ZXMoKTsK
LSAgICByZXR1cm5WYWx1ZSA9IFF1b3Rlc0RhdGE6OmNyZWF0ZShsb3dlckJvdW5kLT5hcnJheVNp
emUpOwotICAgIGlmICghcmV0dXJuVmFsdWUpCi0gICAgICAgIHJldHVybiBkZWZhdWx0TGFuZ3Vh
Z2VRdW90ZXMoKTsKLSAgICBTdHJpbmcqIGRhdGEgPSByZXR1cm5WYWx1ZS0+ZGF0YSgpOwotICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgbG93ZXJCb3VuZC0+YXJyYXlTaXplOyArK2kpCi0gICAgICAg
IGRhdGFbaV0gPSBsb3dlckJvdW5kLT5hcnJheVtpXTsKLSAgICBxdW90ZXNNYXAoKS5zZXQobG93
ZXIuaW1wbCgpLCByZXR1cm5WYWx1ZSk7Ci0gICAgcmV0dXJuIHJldHVyblZhbHVlOworICAgIHN0
YXRpYyBjb25zdCBRdW90ZXNEYXRhKiBzdGF0aWNCYXNpY1F1b3RlcyA9IFF1b3Rlc0RhdGE6OmNy
ZWF0ZShVKCJcIiIpLCBVKCJcIiIpLCBVKCInIiksIFUoIiciKSkubGVha1JlZigpOworICAgIHJl
dHVybiBzdGF0aWNCYXNpY1F1b3RlczsKIH0KLSN1bmRlZiBBUlJBWV9TSVpFCiAKIHN0YXRpYyBj
b25zdCBRdW90ZXNEYXRhKiBkZWZhdWx0UXVvdGVzKGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0
KQogewpAQCAtMjMyLDE2ICsxNjgsMTkgQEAgc3RhdGljIGNvbnN0IFF1b3Rlc0RhdGEqIGRlZmF1
bHRRdW90ZXMoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCiAgICAgfSBlbHNlIGlmICghbm9k
ZS0+aXNFbGVtZW50Tm9kZSgpKSB7CiAgICAgICAgIGVsZW1lbnQgPSBub2RlLT5wYXJlbnRFbGVt
ZW50KCk7CiAgICAgICAgIGlmICghZWxlbWVudCkKLSAgICAgICAgICAgIHJldHVybiBkZWZhdWx0
TGFuZ3VhZ2VRdW90ZXMoKTsKKyAgICAgICAgICAgIHJldHVybiBiYXNpY1F1b3Rlc0RhdGEoKTsK
ICAgICB9IGVsc2UKICAgICAgIGVsZW1lbnQgPSB0b0VsZW1lbnQobm9kZSk7CiAgICAgY29uc3Qg
QXRvbWljU3RyaW5nKiBsYW5ndWFnZTsKICAgICB3aGlsZSAoKGxhbmd1YWdlID0gJmVsZW1lbnQt
PmdldEF0dHJpYnV0ZShsYW5nU3RyaW5nKSkgJiYgbGFuZ3VhZ2UtPmlzTnVsbCgpKSB7CiAgICAg
ICAgIGVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCk7CiAgICAgICAgIGlmICghZWxl
bWVudCkKLSAgICAgICAgICAgIHJldHVybiBkZWZhdWx0TGFuZ3VhZ2VRdW90ZXMoKTsKKyAgICAg
ICAgICAgIHJldHVybiBiYXNpY1F1b3Rlc0RhdGEoKTsKICAgICB9Ci0gICAgcmV0dXJuIHF1b3Rl
c0Zvckxhbmd1YWdlKGxhbmd1YWdlLT5pbXBsKCkpOworICAgIGNvbnN0IFF1b3Rlc0RhdGEqIHF1
b3Rlc0RhdGEgPSBxdW90ZXNEYXRhTGFuZ3VhZ2VNYXAoKS0+Z2V0KGxhbmd1YWdlLT5sb3dlcigp
KTsKKyAgICBpZiAoIXF1b3Rlc0RhdGEpCisgICAgICAgIHJldHVybiBiYXNpY1F1b3Rlc0RhdGEo
KTsKKyAgICByZXR1cm4gcXVvdGVzRGF0YTsKIH0KIAogUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBS
ZW5kZXJRdW90ZTo6b3JpZ2luYWxUZXh0KCkgY29uc3QKQEAgLTI1MiwzMCArMTkxLDE4IEBAIFBh
c3NSZWZQdHI8U3RyaW5nSW1wbD4gUmVuZGVyUXVvdGU6Om9yaWdpbmFsVGV4dCgpIGNvbnN0CiAg
ICAgY29uc3QgUXVvdGVzRGF0YSogcXVvdGVzID0gc3R5bGUoKS0+cXVvdGVzKCk7CiAgICAgaWYg
KCFxdW90ZXMpCiAgICAgICAgIHF1b3RlcyA9IGRlZmF1bHRRdW90ZXModGhpcyk7Ci0gICAgaWYg
KCFxdW90ZXMtPmxlbmd0aCkKLSAgICAgICAgcmV0dXJuIGVtcHR5QXRvbS5pbXBsKCk7Ci0gICAg
aW50IGluZGV4ID0gbV9kZXB0aCAqIDI7CiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNl
IE5PX09QRU5fUVVPVEU6CiAgICAgY2FzZSBOT19DTE9TRV9RVU9URToKLSAgICAgICAgcmV0dXJu
IGVtcHR5U3RyaW5nKCkuaW1wbCgpOworICAgICAgICByZXR1cm4gU3RyaW5nSW1wbDo6ZW1wdHko
KTsKICAgICBjYXNlIENMT1NFX1FVT1RFOgotICAgICAgICBpZiAoaW5kZXgpCi0gICAgICAgICAg
ICAtLWluZGV4OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICArK2luZGV4OwotICAgICAgICBi
cmVhazsKKyAgICAgICAgcmV0dXJuIHF1b3Rlcy0+Z2V0Q2xvc2VRdW90ZShtX2RlcHRoID8gbV9k
ZXB0aCAtIDEgOiBtX2RlcHRoICsgMSkuaW1wbCgpOwogICAgIGNhc2UgT1BFTl9RVU9URToKLSAg
ICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBxdW90ZXMtPmdldE9wZW5RdW90ZShtX2RlcHRo
KS5pbXBsKCk7CiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgICAgIHJldHVybiBlbXB0eUF0b20uaW1wbCgpOworICAgICAgICByZXR1cm4gU3RyaW5nSW1w
bDo6ZW1wdHkoKTsKICAgICB9Ci0gICAgaWYgKGluZGV4ID49IHF1b3Rlcy0+bGVuZ3RoKQotICAg
ICAgICBpbmRleCA9IChxdW90ZXMtPmxlbmd0aC0yKSB8IChpbmRleCAmIDEpOwotICAgIGlmIChp
bmRleCA8IDApCi0gICAgICAgIHJldHVybiBlbXB0eUF0b20uaW1wbCgpOwotICAgIHJldHVybiBx
dW90ZXMtPmRhdGEoKVtpbmRleF0uaW1wbCgpOwogfQogCiB2b2lkIFJlbmRlclF1b3RlOjpjb21w
dXRlUHJlZmVycmVkTG9naWNhbFdpZHRocyhmbG9hdCBsZWFkKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1F1b3Rlc0RhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N0eWxlL1F1b3Rlc0RhdGEuY3BwCmluZGV4IDRlODFmNzU2N2Y1Y2JhODM1ZTYy
YjgwNzJjNjFhZWZhOWFlOWI2MTkuLjUxMTI4ODFhNTA5NWE4MTU0MTAyNGIwM2IwNzM1MTkyYTM1
NmM2NzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9RdW90ZXNE
YXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUXVvdGVzRGF0YS5j
cHAKQEAgLTEsNSArMSw2IEBACiAvKioKICAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIzLDM4ICsyNCw1
MiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVF1b3Rlc0RhdGEqIFF1b3Rlc0RhdGE6OmNy
ZWF0ZShpbnQgc3RyaW5nQ291bnQpCitQYXNzUmVmUHRyPFF1b3Rlc0RhdGE+IFF1b3Rlc0RhdGE6
OmNyZWF0ZShTdHJpbmcgb3BlbiwgU3RyaW5nIGNsb3NlKQogewotICAgIGNoYXIqIHRtcCA9IG5l
dyBjaGFyW3NpemVvZihRdW90ZXNEYXRhKStzaXplb2YoU3RyaW5nKSpzdHJpbmdDb3VudF07Ci0g
ICAgaWYgKCF0bXApCi0gICAgICAgIHJldHVybiAwOwotICAgIFF1b3Rlc0RhdGEqIHJldCA9IG5l
dyAodG1wKSBRdW90ZXNEYXRhKHN0cmluZ0NvdW50KTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8
IHN0cmluZ0NvdW50OyArK2kpCi0gICAgICAgIG5ldyAodG1wICtzaXplb2YoUXVvdGVzRGF0YSkg
KyBzaXplb2YoU3RyaW5nKSppKSBTdHJpbmcoKTsKLSAgICByZXR1cm4gcmV0OworICAgIFJlZlB0
cjxRdW90ZXNEYXRhPiBkYXRhID0gUXVvdGVzRGF0YTo6Y3JlYXRlKCk7CisgICAgZGF0YS0+YWRk
UGFpcihzdGQ6Om1ha2VfcGFpcihvcGVuLCBjbG9zZSkpOworICAgIHJldHVybiBkYXRhOwogfQog
Ci1ib29sIFF1b3Rlc0RhdGE6OmVxdWFsKGNvbnN0IFF1b3Rlc0RhdGEqIHF1b3Rlc0RhdGExLCBj
b25zdCBRdW90ZXNEYXRhKiBxdW90ZXNEYXRhMikKK1Bhc3NSZWZQdHI8UXVvdGVzRGF0YT4gUXVv
dGVzRGF0YTo6Y3JlYXRlKFN0cmluZyBvcGVuMSwgU3RyaW5nIGNsb3NlMSwgU3RyaW5nIG9wZW4y
LCBTdHJpbmcgY2xvc2UyKQogewotICAgIGlmIChxdW90ZXNEYXRhMSA9PSBxdW90ZXNEYXRhMikK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKCFxdW90ZXNEYXRhMSB8fCAhcXVvdGVzRGF0
YTIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAocXVvdGVzRGF0YTEtPmxlbmd0aCAh
PSBxdW90ZXNEYXRhMi0+bGVuZ3RoKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgY29uc3Qg
U3RyaW5nKiBkYXRhMSA9IHF1b3Rlc0RhdGExLT5kYXRhKCk7Ci0gICAgY29uc3QgU3RyaW5nKiBk
YXRhMiA9IHF1b3Rlc0RhdGEyLT5kYXRhKCk7Ci0gICAgZm9yIChpbnQgaSA9IHF1b3Rlc0RhdGEx
LT5sZW5ndGggLSAxOyBpID49IDA7IC0taSkKLSAgICAgICAgaWYgKGRhdGExW2ldICE9IGRhdGEy
W2ldKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOworICAgIFJl
ZlB0cjxRdW90ZXNEYXRhPiBkYXRhID0gUXVvdGVzRGF0YTo6Y3JlYXRlKCk7CisgICAgZGF0YS0+
YWRkUGFpcihzdGQ6Om1ha2VfcGFpcihvcGVuMSwgY2xvc2UxKSk7CisgICAgZGF0YS0+YWRkUGFp
cihzdGQ6Om1ha2VfcGFpcihvcGVuMiwgY2xvc2UyKSk7CisgICAgcmV0dXJuIGRhdGE7CiB9CiAK
LVF1b3Rlc0RhdGE6On5RdW90ZXNEYXRhKCkKK1Bhc3NSZWZQdHI8UXVvdGVzRGF0YT4gUXVvdGVz
RGF0YTo6Y3JlYXRlKCkKIHsKLSAgICBTdHJpbmcqIHAgPSBkYXRhKCk7Ci0gICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKLSAgICAgICAgcFtpXS5+U3RyaW5nKCk7CisgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBRdW90ZXNEYXRhKCkpOworfQorCit2b2lkIFF1b3Rlc0RhdGE6OmFk
ZFBhaXIoc3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPiBxdW90ZVBhaXIpCit7CisgICAgbV9xdW90
ZVBhaXJzLmFwcGVuZChxdW90ZVBhaXIpOworfQorCitjb25zdCBTdHJpbmcgUXVvdGVzRGF0YTo6
Z2V0T3BlblF1b3RlKGludCBpbmRleCkgY29uc3QKK3sKKyAgICBpZiAoIW1fcXVvdGVQYWlycy5z
aXplKCkgfHwgaW5kZXggPCAwKQorICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKyAgICBp
ZiAoKHNpemVfdClpbmRleCA+PSBtX3F1b3RlUGFpcnMuc2l6ZSgpKQorICAgICAgICByZXR1cm4g
bV9xdW90ZVBhaXJzLmxhc3QoKS5maXJzdDsKKyAgICByZXR1cm4gbV9xdW90ZVBhaXJzLmF0KGlu
ZGV4KS5maXJzdDsKK30KKworY29uc3QgU3RyaW5nIFF1b3Rlc0RhdGE6OmdldENsb3NlUXVvdGUo
aW50IGluZGV4KSBjb25zdAoreworICAgIGlmICghbV9xdW90ZVBhaXJzLnNpemUoKSB8fCBpbmRl
eCA8IDApCisgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOworICAgIGlmICgoc2l6ZV90KWlu
ZGV4ID49IG1fcXVvdGVQYWlycy5zaXplKCkpCisgICAgICAgIHJldHVybiBtX3F1b3RlUGFpcnMu
bGFzdCgpLnNlY29uZDsKKyAgICByZXR1cm4gbV9xdW90ZVBhaXJzLmF0KGluZGV4KS5zZWNvbmQ7
Cit9CisKK2Jvb2wgUXVvdGVzRGF0YTo6ZXF1YWwoY29uc3QgUXVvdGVzRGF0YSogYSwgY29uc3Qg
UXVvdGVzRGF0YSogYikKK3sKKyAgICByZXR1cm4gYSAmJiBiICYmIGEtPm1fcXVvdGVQYWlycyA9
PSBiLT5tX3F1b3RlUGFpcnM7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9RdW90ZXNEYXRhLmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUXVvdGVzRGF0YS5oCmluZGV4IGY4MTc5OTZmMDhjNTM2
OTBmMzk4MzVlYmQ0NDQ2MThiOTA1MmRhYzYuLjIyNTA4YjM0NDMwYjdmNzE4NmExMDYyYzI3NWJm
OWU1N2RlYTljYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9R
dW90ZXNEYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1F1b3Rlc0Rh
dGEuaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIxLDI0ICsyMiwz
MSBAQAogI2lmbmRlZiBRdW90ZXNEYXRhX2gKICNkZWZpbmUgUXVvdGVzRGF0YV9oCiAKKyNpbmNs
dWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBRdW90
ZXNEYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8UXVvdGVzRGF0YT4gewogcHVibGljOgotICAgIHZp
cnR1YWwgflF1b3Rlc0RhdGEoKTsKLSAgICBzdGF0aWMgUXVvdGVzRGF0YSogY3JlYXRlKGludCBz
dHJpbmdDb3VudCk7Ci0gICAgU3RyaW5nKiBkYXRhKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxTdHJpbmcqPih0aGlzKzEpOyB9Ci0gICAgY29uc3QgU3RyaW5nKiBkYXRhKCkgY29uc3QgeyBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBTdHJpbmcqPih0aGlzKzEpOyB9Ci0gICAgaW50
IGxlbmd0aDsKLSAgICB2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkKiBwKSB7IGRlbGV0ZVtdIHN0
YXRpY19jYXN0PGNoYXIqPihwKTsgfQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFF1b3Rlc0RhdGE+
IGNyZWF0ZSgpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFF1b3Rlc0RhdGE+IGNyZWF0ZShjb25z
dCBTdHJpbmcgb3BlbiwgY29uc3QgU3RyaW5nIGNsb3NlKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxRdW90ZXNEYXRhPiBjcmVhdGUoY29uc3QgU3RyaW5nIG9wZW4xLCBjb25zdCBTdHJpbmcgY2xv
c2UxLCBjb25zdCBTdHJpbmcgb3BlbjIsIGNvbnN0IFN0cmluZyBjbG9zZTIpOwogICAgIHN0YXRp
YyBib29sIGVxdWFsKGNvbnN0IFF1b3Rlc0RhdGEqLCBjb25zdCBRdW90ZXNEYXRhKik7CisKKyAg
ICB+UXVvdGVzRGF0YSgpIHsgfTsKKyAgICB2b2lkIGFkZFBhaXIoY29uc3Qgc3RkOjpwYWlyPFN0
cmluZywgU3RyaW5nPiBxdW90ZVBhaXIpOworICAgIGNvbnN0IFN0cmluZyBnZXRPcGVuUXVvdGUo
aW50IGluZGV4KSBjb25zdDsKKyAgICBjb25zdCBTdHJpbmcgZ2V0Q2xvc2VRdW90ZShpbnQgaW5k
ZXgpIGNvbnN0OworCiBwcml2YXRlOgotICAgIFF1b3Rlc0RhdGEoaW50IHN0cmluZ0NvdW50KSA6
IGxlbmd0aChzdHJpbmdDb3VudCkge30KKyAgICBRdW90ZXNEYXRhKCkgeyB9CisKKyAgICBWZWN0
b3I8c3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPiA+IG1fcXVvdGVQYWlyczsKIH07CiAKLX0KK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKwogI2VuZGlmIC8vIFF1b3Rlc0RhdGFfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155028</attachid>
            <date>2012-07-27 12:49:53 -0700</date>
            <delta_ts>2012-07-27 15:48:52 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-92448-20120727124940.patch</filename>
            <type>text/plain</type>
            <size>16121</size>
            <attacher name="Elliott Sprehn">esprehn</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzMTM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDdlZWU2YzRjNDZjZjJl
M2VkZWM2NzFmNjczZTM1NTU4ZGNjNzRhNC4uM2JjZWM0ZGFjODNmMzQ5NDFlYjFmNmIyNGJkYzFh
NjVmYjg4OTUyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDEyLTA3LTI2ICBFbGxp
b3R0IFNwcmVobiAgPGVzcHJlaG5AZ21haWwuY29tPgorCisgICAgICAgIE1ha2UgUXVvdGVzRGF0
YSB1c2UgYSBWZWN0b3Igb2YgcGFpcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTkyNDQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgUXVvdGVzRGF0YTo6Y3JlYXRlIHJldHVybmVkIGFuIGFycmF5IG9mIG1l
bW9yeSB0aGF0IGNvbnRhaW5lZCBpbiBwbGFjZSBpbnN0YW50aWF0aW9ucworICAgICAgICBvZiBh
IFF1b3Rlc0RhdGEgYW5kIHRoZW4gU3RyaW5nIGluc3RhbmNlcy4gVGhpcyBjaGFuZ2VzIHRoZSBj
b2RlIHRvIHVzZSBhIFZlY3RvciBvZgorICAgICAgICBwYWlycyBtYWtpbmcgaXQgc2FmZXIgYW5k
IGVuc3VyaW5nIHRoYXQgcXVvdGVzIGFyZSBhbHdheXMgYmFsYW5jZWQuIFRoaXMgYWxzbyB1c2Vz
IGEKKyAgICAgICAgSGFzaE1hcCBkaXJlY3RseSBpbiB0aGUgUXVvdGVSZW5kZXJlciBpbnN0ZWFk
IG9mIGJ1aWxkaW5nIGl0IG9uIGZpcnN0IGFjY2VzcyByZWR1Y2luZworICAgICAgICB0aGUgYW1v
dW50IG9mIGNvZGUgbmVlZGVkIGZvciBwaWNraW5nIHF1b3RlcyBieSBsYW5ndWFnZS4KKworICAg
ICAgICBObyBuZXcgdGVzdHMgbmVlZGVkOiBUaGlzIGp1c3QgY2hhbmdlcyB0aGUgc3RvcmFnZSBm
b3JtYXQuCisKKyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QpOiBDcmVhdGUg
cGFpcnMgYW5kIHVzZSB0aGUgbmV3IFF1b3Rlc0RhdGEgQVBJLgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJRdW90ZS5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OnF1b3Rlc0RhdGFMYW5ndWFnZU1hcCk6IE5ldyBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIEhh
c2hNYXAgb2YgbGFuZ3VhZ2VzLgorICAgICAgICAoV2ViQ29yZTo6YmFzaWNRdW90ZXNEYXRhKTog
UmV0dXJucyB0aGUgc2ltcGxlIGZvcm0gb2YgcXVvdGVzLCAiIGFuZCAnLgorICAgICAgICAoV2Vi
Q29yZTo6ZGVmYXVsdFF1b3Rlcyk6IENoYW5nZWQgdG8gdXNlIHRoZSBuZXcgbWFwLgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyUXVvdGU6Om9yaWdpbmFsVGV4dCk6IENoYW5nZWQgdG8gdXNlIHRo
ZSBuZXcgZ2V0T3BlblF1b3RlIGFuZCBnZXRDbG9zZVF1b3RlIHdoaWNoIGVuc3VyZSBib3VuZHMg
Y2hlY2tzLgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9RdW90ZXNEYXRhLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlF1b3Rlc0RhdGE6OmNyZWF0ZSk6IE5vdyByZXR1cm5zIGEgcGxhaW4gaW5z
dGFuY2Ugb2YgUXVvdGVzRGF0YSB3aXRob3V0IHRoZSBpbiBwbGFjZSBhbGxvY2F0aW9uLgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpRdW90ZXNEYXRhOjphZGRQYWlyKTog
QWRkcyBhbiBzdGQ6OnBhaXIgb2Ygc3RyaW5ncyBlbnN1cmluZyBxdW90ZXMgYXJlIGFsd2F5cyBi
YWxhbmNlZC4KKyAgICAgICAgKFdlYkNvcmU6OlF1b3Rlc0RhdGE6OmdldE9wZW5RdW90ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpRdW90ZXNEYXRhOjpnZXRDbG9zZVF1b3RlKToKKyAgICAgICAgKFdl
YkNvcmU6OlF1b3Rlc0RhdGE6OmVxdWFsKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvUXVv
dGVzRGF0YS5oOgorICAgICAgICAoUXVvdGVzRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpRdW90
ZXNEYXRhOjp+UXVvdGVzRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpRdW90ZXNEYXRhOjpRdW90
ZXNEYXRhKToKKwogMjAxMi0wNy0xOSAgQmVtIEpvbmVzLUJleSAgPGJqb25lc2JlQGFkb2JlLmNv
bT4KIAogICAgICAgICBbQ1NTIEV4Y2x1c2lvbnNdIC0gQ29kZSBjbGVhbnVwOiBtYWtlIHNoYXBl
IHBhcnNpbmcgdXNlIGlzQ29tbWEoKSBpbnN0ZWFkIG9mIG1hbnVhbCBjaGVja3MKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZVJlc29sdmVyLmNwcAppbmRleCA2NDViMjA4MjRmNWM1YjdhMmFhZWY0NDc1NTRl
ZTg4Zjk1MjBiYjA4Li5kZGUwNGM3MDQ5MmNhYWFkZDc4ZDkyMzc0MTQ4MjAxNTY2ODljMzBkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCkBAIC0zNDQ3LDIyICszNDQ3LDI0IEBA
IHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NW
YWx1ZSogdmFsdWUpCiAgICAgICAgIH0KICAgICAgICAgaWYgKHZhbHVlLT5pc1ZhbHVlTGlzdCgp
KSB7CiAgICAgICAgICAgICBDU1NWYWx1ZUxpc3QqIGxpc3QgPSBzdGF0aWNfY2FzdDxDU1NWYWx1
ZUxpc3QqPih2YWx1ZSk7Ci0gICAgICAgICAgICBRdW90ZXNEYXRhKiBkYXRhID0gUXVvdGVzRGF0
YTo6Y3JlYXRlKGxpc3QtPmxlbmd0aCgpKTsKLSAgICAgICAgICAgIGlmICghZGF0YSkKLSAgICAg
ICAgICAgICAgICByZXR1cm47IC8vIE91dCBvZiBtZW1vcnkKLSAgICAgICAgICAgIFN0cmluZyog
cXVvdGVzID0gZGF0YS0+ZGF0YSgpOwotICAgICAgICAgICAgZm9yIChDU1NWYWx1ZUxpc3RJdGVy
YXRvciBpID0gbGlzdDsgaS5oYXNNb3JlKCk7IGkuYWR2YW5jZSgpKSB7Ci0gICAgICAgICAgICAg
ICAgQ1NTVmFsdWUqIGl0ZW0gPSBpLnZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGl0
ZW0tPmlzUHJpbWl0aXZlVmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgcHJpbWl0aXZlVmFsdWUg
PSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGl0ZW0pOwotICAgICAgICAgICAgICAg
IEFTU0VSVChwcmltaXRpdmVWYWx1ZS0+aXNTdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgcXVv
dGVzW2kuaW5kZXgoKV0gPSBwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKTsKKyAgICAg
ICAgICAgIFJlZlB0cjxRdW90ZXNEYXRhPiBxdW90ZXMgPSBRdW90ZXNEYXRhOjpjcmVhdGUoKTsK
KyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdC0+bGVuZ3RoKCk7IGkgKz0g
MikgeworICAgICAgICAgICAgICAgIENTU1ZhbHVlKiBmaXJzdCA9IGxpc3QtPml0ZW1XaXRob3V0
Qm91bmRzQ2hlY2soaSk7CisgICAgICAgICAgICAgICAgLy8gaXRlbSgpIHJldHVybnMgbnVsbCBp
ZiBvdXQgb2YgYm91bmRzIHNvIHRoaXMgaXMgc2FmZQorICAgICAgICAgICAgICAgIENTU1ZhbHVl
KiBzZWNvbmQgPSBsaXN0LT5pdGVtKGkgKyAxKTsKKyAgICAgICAgICAgICAgICBpZiAoIXNlY29u
ZCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgQVNTRVJU
KGZpcnN0LT5pc1ByaW1pdGl2ZVZhbHVlKCkpOworICAgICAgICAgICAgICAgIEFTU0VSVChzZWNv
bmQtPmlzUHJpbWl0aXZlVmFsdWUoKSk7CisgICAgICAgICAgICAgICAgU3RyaW5nIHN0YXJ0UXVv
dGUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGZpcnN0KS0+Z2V0U3RyaW5nVmFs
dWUoKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgZW5kUXVvdGUgPSBzdGF0aWNfY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZSo+KHNlY29uZCktPmdldFN0cmluZ1ZhbHVlKCk7CisgICAgICAgICAgICAg
ICAgcXVvdGVzLT5hZGRQYWlyKHN0ZDo6bWFrZV9wYWlyKHN0YXJ0UXVvdGUsIGVuZFF1b3RlKSk7
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX3N0eWxlLT5zZXRRdW90ZXMoYWRvcHRSZWYo
ZGF0YSkpOwotICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlKSB7Ci0gICAgICAgICAg
ICBBU1NFUlQocHJpbWl0aXZlVmFsdWUtPmlzSWRlbnQoKSk7CisgICAgICAgICAgICBtX3N0eWxl
LT5zZXRRdW90ZXMocXVvdGVzKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocHJpbWl0aXZlVmFs
dWUpIHsKICAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NW
YWx1ZU5vbmUpCi0gICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0UXVvdGVzKGFkb3B0UmVmKFF1
b3Rlc0RhdGE6OmNyZWF0ZSgwKSkpOworICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldFF1b3Rl
cyhRdW90ZXNEYXRhOjpjcmVhdGUoKSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAg
IGNhc2UgQ1NTUHJvcGVydHlGb250RmFtaWx5OiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyUXVvdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclF1b3RlLmNwcAppbmRleCA3OWRhMGQyMGQ2YzkxYjU0NjQ3NTU2MzU5MGU3ZjRjZmYzMGYx
OTdlLi5lZmJkYTdiOWEwNzlhM2Y0ZmJmYmY3ZDc3ZDJlYWQwMGNlMWUyZTdlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUXVvdGUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJRdW90ZS5jcHAKQEAgLTI2LDkgKzI2LDcgQEAKICNpbmNs
dWRlICJIVE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIlF1b3Rlc0RhdGEuaCIKICNpbmNsdWRlICJS
ZW5kZXJTdHlsZS5oIgotI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDx3dGYvdGV4dC9B
dG9taWNTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKICNkZWZpbmUg
VU5LTk9XTl9ERVBUSCAtMQogCkBAIC0xMzYsODkgKzEzNCwyNyBAQCBza2lwTmV3RGVwdGhDYWxj
OgogICAgIH0gd2hpbGUgKGhlYWQpOwogfQogCi0jZGVmaW5lIEFSUkFZX1NJWkUoQ2FycmF5KSAo
c2l6ZW9mKENhcnJheSkgLyBzaXplb2YoKkNhcnJheSkpCi0jZGVmaW5lIExBTkdVQUdFX0RBVEEo
bmFtZSwgbGFuZ3VhZ2VTb3VyY2VBcnJheSkgeyBuYW1lLCBsYW5ndWFnZVNvdXJjZUFycmF5LCBB
UlJBWV9TSVpFKGxhbmd1YWdlU291cmNlQXJyYXkpIH0KICNkZWZpbmUgVSh4KSAoKGNvbnN0IFVD
aGFyKilMIyN4KQogCi1zdGF0aWMgY29uc3QgVUNoYXIqIHNpbXBsZVF1b3Rlc1tdID0ge1UoIlwi
IiksIFUoIlwiIiksIFUoIiciKSwgVSgiJyIpfTsKK3R5cGVkZWYgSGFzaE1hcDxBdG9taWNTdHJp
bmcsIGNvbnN0IFF1b3Rlc0RhdGEqPiBRdW90ZXNNYXA7CiAKLXN0YXRpYyBjb25zdCBVQ2hhciog
ZW5nbGlzaFF1b3Rlc1tdID0ge1UoIlx4MjAxQyIpLCBVKCJceDIwMUQiKSwgVSgiXHgyMDE4Iiks
IFUoIlx4MjAxOSIpfTsKLXN0YXRpYyBjb25zdCBVQ2hhciogbm9yd2VnaWFuUXVvdGVzW10gPSB7
IFUoIlx4MDBBQiIpLCBVKCJceDAwQkIiKSwgVSgiXHgyMDM5IiksIFUoIlx4MjAzQSIpIH07Ci1z
dGF0aWMgY29uc3QgVUNoYXIqIHJvbWFuaWFuUXVvdGVzW10gPSB7IFUoIlx4MjAxRSIpLCBVKCJc
eDIwMUQiKX07Ci1zdGF0aWMgY29uc3QgVUNoYXIqIHJ1c3NpYW5RdW90ZXNbXSA9IHsgVSgiXHgw
MEFCIiksIFUoIlx4MDBCQiIpLCBVKCJceDIwMUUiKSwgVSgiXHgyMDFDIikgfTsKLSN1bmRlZiBV
Ci0KLXN0cnVjdCBMYW5ndWFnZURhdGEgewotICAgIGNvbnN0IGNoYXIgKm5hbWU7Ci0gICAgY29u
c3QgVUNoYXIqIGNvbnN0KiBjb25zdCBhcnJheTsKLSAgICBjb25zdCBpbnQgYXJyYXlTaXplOwot
ICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IExhbmd1YWdlRGF0YSYgY29tcGFyZVRvKSBjb25zdAot
ICAgIHsKLSAgICAgICAgcmV0dXJuIHN0cmNtcChuYW1lLCBjb21wYXJlVG8ubmFtZSk7Ci0gICAg
fQotfTsKLQotLy8gRGF0YSBtYXN0IGJlIGFscGhhYmV0aWNhbGx5IHNvcnRlZCBhbmQgaW4gYWxs
IGxvd2VyIGNhc2UgZm9yIGZhc3QgY29tcGFyaXNvbgotTGFuZ3VhZ2VEYXRhIGxhbmd1YWdlRGF0
YVtdID0gewotICAgIExBTkdVQUdFX0RBVEEoImVuIiwgZW5nbGlzaFF1b3RlcyksCi0gICAgTEFO
R1VBR0VfREFUQSgibm8iLCBub3J3ZWdpYW5RdW90ZXMpLAotICAgIExBTkdVQUdFX0RBVEEoInJv
Iiwgcm9tYW5pYW5RdW90ZXMpLAotICAgIExBTkdVQUdFX0RBVEEoInJ1IiwgcnVzc2lhblF1b3Rl
cykKLX07Ci0jdW5kZWYgTEFOR1VBR0VfREFUQQotY29uc3QgTGFuZ3VhZ2VEYXRhKiBjb25zdCBs
YW5ndWFnZURhdGFFbmQgPSBsYW5ndWFnZURhdGEgKyBBUlJBWV9TSVpFKGxhbmd1YWdlRGF0YSk7
Ci0KLSNkZWZpbmUgZGVmYXVsdExhbmd1YWdlUXVvdGVzU291cmNlIHNpbXBsZVF1b3RlcwotI2Rl
ZmluZSBkZWZhdWx0TGFuZ3VhZ2VRdW90ZXNDb3VudCBBUlJBWV9TSVpFKGRlZmF1bHRMYW5ndWFn
ZVF1b3Rlc1NvdXJjZSkKLQotc3RhdGljIFF1b3Rlc0RhdGEqIGRlZmF1bHRMYW5ndWFnZVF1b3Rl
c1ZhbHVlID0gMDsKLXN0YXRpYyBjb25zdCBRdW90ZXNEYXRhKiBkZWZhdWx0TGFuZ3VhZ2VRdW90
ZXMoKQotewotICAgIGlmICghZGVmYXVsdExhbmd1YWdlUXVvdGVzVmFsdWUpIHsKLSAgICAgICAg
ZGVmYXVsdExhbmd1YWdlUXVvdGVzVmFsdWUgPSBRdW90ZXNEYXRhOjpjcmVhdGUoZGVmYXVsdExh
bmd1YWdlUXVvdGVzQ291bnQpOwotICAgICAgICBpZiAoIWRlZmF1bHRMYW5ndWFnZVF1b3Rlc1Zh
bHVlKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIFN0cmluZyogZGF0YSA9IGRlZmF1
bHRMYW5ndWFnZVF1b3Rlc1ZhbHVlLT5kYXRhKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgZGVmYXVsdExhbmd1YWdlUXVvdGVzQ291bnQ7ICsraSkKLSAgICAgICAgICAgIGRhdGFb
aV0gPSBkZWZhdWx0TGFuZ3VhZ2VRdW90ZXNTb3VyY2VbaV07Ci0gICAgfQotICAgIHJldHVybiBk
ZWZhdWx0TGFuZ3VhZ2VRdW90ZXNWYWx1ZTsKLX0KLSN1bmRlZiBkZWZhdWx0TGFuZ3VhZ2VRdW90
ZXNTb3VyY2UKLSN1bmRlZiBkZWZhdWx0TGFuZ3VhZ2VRdW90ZXNDb3VudAotCi10eXBlZGVmIEhh
c2hNYXA8UmVmUHRyPEF0b21pY1N0cmluZ0ltcGw+LCBRdW90ZXNEYXRhKiA+IFF1b3Rlc01hcDsK
LQotc3RhdGljIFF1b3Rlc01hcCYgcXVvdGVzTWFwKCkKK3N0YXRpYyBjb25zdCBRdW90ZXNNYXAq
IHF1b3Rlc0RhdGFMYW5ndWFnZU1hcCgpCiB7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChRdW90
ZXNNYXAsIHN0YXRpY1F1b3Rlc01hcCwgKCkpOworICAgIHN0YXRpYyBRdW90ZXNNYXAqIHN0YXRp
Y1F1b3Rlc01hcCA9IG5ldyBRdW90ZXNNYXAoKTsKKyAgICBpZiAoc3RhdGljUXVvdGVzTWFwLT5z
aXplKCkpCisgICAgICAgIHJldHVybiBzdGF0aWNRdW90ZXNNYXA7CisgICAgc3RhdGljUXVvdGVz
TWFwLT5zZXQoImVuIiwgUXVvdGVzRGF0YTo6Y3JlYXRlKFUoIlx4MjAxQyIpLCBVKCJceDIwMUQi
KSwgVSgiXHgyMDE4IiksIFUoIlx4MjAxOSIpKS5sZWFrUmVmKCkpOworICAgIHN0YXRpY1F1b3Rl
c01hcC0+c2V0KCJubyIsIFF1b3Rlc0RhdGE6OmNyZWF0ZShVKCJceDAwQUIiKSwgVSgiXHgwMEJC
IiksIFUoIlx4MjAzOSIpLCBVKCJceDIwM0EiKSkubGVha1JlZigpKTsKKyAgICBzdGF0aWNRdW90
ZXNNYXAtPnNldCgicm8iLCBRdW90ZXNEYXRhOjpjcmVhdGUoVSgiXHgyMDFFIiksIFUoIlx4MjAx
RCIpKS5sZWFrUmVmKCkpOworICAgIHN0YXRpY1F1b3Rlc01hcC0+c2V0KCJydSIsIFF1b3Rlc0Rh
dGE6OmNyZWF0ZShVKCJceDAwQUIiKSwgVSgiXHgwMEJCIiksIFUoIlx4MjAxRSIpLCBVKCJceDIw
MUMiKSkubGVha1JlZigpKTsKICAgICByZXR1cm4gc3RhdGljUXVvdGVzTWFwOwogfQogCi1zdGF0
aWMgY29uc3QgUXVvdGVzRGF0YSogcXVvdGVzRm9yTGFuZ3VhZ2UoQXRvbWljU3RyaW5nSW1wbCog
bGFuZ3VhZ2UpCitzdGF0aWMgY29uc3QgUXVvdGVzRGF0YSogYmFzaWNRdW90ZXNEYXRhKCkKIHsK
LSAgICBRdW90ZXNEYXRhKiByZXR1cm5WYWx1ZTsKLSAgICBBdG9taWNTdHJpbmcgbG93ZXIobGFu
Z3VhZ2UtPmxvd2VyKCkpOwotICAgIHJldHVyblZhbHVlID0gcXVvdGVzTWFwKCkuZ2V0KGxvd2Vy
LmltcGwoKSk7Ci0gICAgaWYgKHJldHVyblZhbHVlKQotICAgICAgICByZXR1cm4gcmV0dXJuVmFs
dWU7Ci0gICAgQ1N0cmluZyBzKHN0YXRpY19jYXN0PGNvbnN0IFN0cmluZyY+KGxvd2VyKS5hc2Np
aSgpKTsKLSAgICBMYW5ndWFnZURhdGEgcmVxdWVzdCA9IHsgcy5idWZmZXIoKS0+ZGF0YSgpLCAw
LCAwIH07Ci0gICAgY29uc3QgTGFuZ3VhZ2VEYXRhKiBsb3dlckJvdW5kID0gc3RkOjpsb3dlcl9i
b3VuZDxjb25zdCBMYW5ndWFnZURhdGEqLCBjb25zdCBMYW5ndWFnZURhdGE+KGxhbmd1YWdlRGF0
YSwgbGFuZ3VhZ2VEYXRhRW5kLCByZXF1ZXN0KTsKLSAgICBpZiAobG93ZXJCb3VuZCA9PSBsYW5n
dWFnZURhdGFFbmQpCi0gICAgICAgIHJldHVybiBkZWZhdWx0TGFuZ3VhZ2VRdW90ZXMoKTsKLSAg
ICBpZiAoc3RybmNtcChsb3dlckJvdW5kLT5uYW1lLCByZXF1ZXN0Lm5hbWUsIHN0cmxlbihsb3dl
ckJvdW5kLT5uYW1lKSkpCi0gICAgICAgIHJldHVybiBkZWZhdWx0TGFuZ3VhZ2VRdW90ZXMoKTsK
LSAgICByZXR1cm5WYWx1ZSA9IFF1b3Rlc0RhdGE6OmNyZWF0ZShsb3dlckJvdW5kLT5hcnJheVNp
emUpOwotICAgIGlmICghcmV0dXJuVmFsdWUpCi0gICAgICAgIHJldHVybiBkZWZhdWx0TGFuZ3Vh
Z2VRdW90ZXMoKTsKLSAgICBTdHJpbmcqIGRhdGEgPSByZXR1cm5WYWx1ZS0+ZGF0YSgpOwotICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgbG93ZXJCb3VuZC0+YXJyYXlTaXplOyArK2kpCi0gICAgICAg
IGRhdGFbaV0gPSBsb3dlckJvdW5kLT5hcnJheVtpXTsKLSAgICBxdW90ZXNNYXAoKS5zZXQobG93
ZXIuaW1wbCgpLCByZXR1cm5WYWx1ZSk7Ci0gICAgcmV0dXJuIHJldHVyblZhbHVlOworICAgIHN0
YXRpYyBjb25zdCBRdW90ZXNEYXRhKiBzdGF0aWNCYXNpY1F1b3RlcyA9IFF1b3Rlc0RhdGE6OmNy
ZWF0ZShVKCJcIiIpLCBVKCJcIiIpLCBVKCInIiksIFUoIiciKSkubGVha1JlZigpOworICAgIHJl
dHVybiBzdGF0aWNCYXNpY1F1b3RlczsKIH0KLSN1bmRlZiBBUlJBWV9TSVpFCiAKIHN0YXRpYyBj
b25zdCBRdW90ZXNEYXRhKiBkZWZhdWx0UXVvdGVzKGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0
KQogewpAQCAtMjMyLDE2ICsxNjgsMTkgQEAgc3RhdGljIGNvbnN0IFF1b3Rlc0RhdGEqIGRlZmF1
bHRRdW90ZXMoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCiAgICAgfSBlbHNlIGlmICghbm9k
ZS0+aXNFbGVtZW50Tm9kZSgpKSB7CiAgICAgICAgIGVsZW1lbnQgPSBub2RlLT5wYXJlbnRFbGVt
ZW50KCk7CiAgICAgICAgIGlmICghZWxlbWVudCkKLSAgICAgICAgICAgIHJldHVybiBkZWZhdWx0
TGFuZ3VhZ2VRdW90ZXMoKTsKKyAgICAgICAgICAgIHJldHVybiBiYXNpY1F1b3Rlc0RhdGEoKTsK
ICAgICB9IGVsc2UKICAgICAgIGVsZW1lbnQgPSB0b0VsZW1lbnQobm9kZSk7CiAgICAgY29uc3Qg
QXRvbWljU3RyaW5nKiBsYW5ndWFnZTsKICAgICB3aGlsZSAoKGxhbmd1YWdlID0gJmVsZW1lbnQt
PmdldEF0dHJpYnV0ZShsYW5nU3RyaW5nKSkgJiYgbGFuZ3VhZ2UtPmlzTnVsbCgpKSB7CiAgICAg
ICAgIGVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCk7CiAgICAgICAgIGlmICghZWxl
bWVudCkKLSAgICAgICAgICAgIHJldHVybiBkZWZhdWx0TGFuZ3VhZ2VRdW90ZXMoKTsKKyAgICAg
ICAgICAgIHJldHVybiBiYXNpY1F1b3Rlc0RhdGEoKTsKICAgICB9Ci0gICAgcmV0dXJuIHF1b3Rl
c0Zvckxhbmd1YWdlKGxhbmd1YWdlLT5pbXBsKCkpOworICAgIGNvbnN0IFF1b3Rlc0RhdGEqIHF1
b3Rlc0RhdGEgPSBxdW90ZXNEYXRhTGFuZ3VhZ2VNYXAoKS0+Z2V0KGxhbmd1YWdlLT5sb3dlcigp
KTsKKyAgICBpZiAoIXF1b3Rlc0RhdGEpCisgICAgICAgIHJldHVybiBiYXNpY1F1b3Rlc0RhdGEo
KTsKKyAgICByZXR1cm4gcXVvdGVzRGF0YTsKIH0KIAogUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBS
ZW5kZXJRdW90ZTo6b3JpZ2luYWxUZXh0KCkgY29uc3QKQEAgLTI1MiwzMCArMTkxLDE4IEBAIFBh
c3NSZWZQdHI8U3RyaW5nSW1wbD4gUmVuZGVyUXVvdGU6Om9yaWdpbmFsVGV4dCgpIGNvbnN0CiAg
ICAgY29uc3QgUXVvdGVzRGF0YSogcXVvdGVzID0gc3R5bGUoKS0+cXVvdGVzKCk7CiAgICAgaWYg
KCFxdW90ZXMpCiAgICAgICAgIHF1b3RlcyA9IGRlZmF1bHRRdW90ZXModGhpcyk7Ci0gICAgaWYg
KCFxdW90ZXMtPmxlbmd0aCkKLSAgICAgICAgcmV0dXJuIGVtcHR5QXRvbS5pbXBsKCk7Ci0gICAg
aW50IGluZGV4ID0gbV9kZXB0aCAqIDI7CiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNl
IE5PX09QRU5fUVVPVEU6CiAgICAgY2FzZSBOT19DTE9TRV9RVU9URToKLSAgICAgICAgcmV0dXJu
IGVtcHR5U3RyaW5nKCkuaW1wbCgpOworICAgICAgICByZXR1cm4gU3RyaW5nSW1wbDo6ZW1wdHko
KTsKICAgICBjYXNlIENMT1NFX1FVT1RFOgotICAgICAgICBpZiAoaW5kZXgpCi0gICAgICAgICAg
ICAtLWluZGV4OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICArK2luZGV4OwotICAgICAgICBi
cmVhazsKKyAgICAgICAgcmV0dXJuIHF1b3Rlcy0+Z2V0Q2xvc2VRdW90ZShtX2RlcHRoID8gbV9k
ZXB0aCAtIDEgOiBtX2RlcHRoICsgMSkuaW1wbCgpOwogICAgIGNhc2UgT1BFTl9RVU9URToKLSAg
ICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBxdW90ZXMtPmdldE9wZW5RdW90ZShtX2RlcHRo
KS5pbXBsKCk7CiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgICAgIHJldHVybiBlbXB0eUF0b20uaW1wbCgpOworICAgICAgICByZXR1cm4gU3RyaW5nSW1w
bDo6ZW1wdHkoKTsKICAgICB9Ci0gICAgaWYgKGluZGV4ID49IHF1b3Rlcy0+bGVuZ3RoKQotICAg
ICAgICBpbmRleCA9IChxdW90ZXMtPmxlbmd0aC0yKSB8IChpbmRleCAmIDEpOwotICAgIGlmIChp
bmRleCA8IDApCi0gICAgICAgIHJldHVybiBlbXB0eUF0b20uaW1wbCgpOwotICAgIHJldHVybiBx
dW90ZXMtPmRhdGEoKVtpbmRleF0uaW1wbCgpOwogfQogCiB2b2lkIFJlbmRlclF1b3RlOjpjb21w
dXRlUHJlZmVycmVkTG9naWNhbFdpZHRocyhmbG9hdCBsZWFkKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1F1b3Rlc0RhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N0eWxlL1F1b3Rlc0RhdGEuY3BwCmluZGV4IDRlODFmNzU2N2Y1Y2JhODM1ZTYy
YjgwNzJjNjFhZWZhOWFlOWI2MTkuLjUxMTI4ODFhNTA5NWE4MTU0MTAyNGIwM2IwNzM1MTkyYTM1
NmM2NzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9RdW90ZXNE
YXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUXVvdGVzRGF0YS5j
cHAKQEAgLTEsNSArMSw2IEBACiAvKioKICAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIzLDM4ICsyNCw1
MiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVF1b3Rlc0RhdGEqIFF1b3Rlc0RhdGE6OmNy
ZWF0ZShpbnQgc3RyaW5nQ291bnQpCitQYXNzUmVmUHRyPFF1b3Rlc0RhdGE+IFF1b3Rlc0RhdGE6
OmNyZWF0ZShTdHJpbmcgb3BlbiwgU3RyaW5nIGNsb3NlKQogewotICAgIGNoYXIqIHRtcCA9IG5l
dyBjaGFyW3NpemVvZihRdW90ZXNEYXRhKStzaXplb2YoU3RyaW5nKSpzdHJpbmdDb3VudF07Ci0g
ICAgaWYgKCF0bXApCi0gICAgICAgIHJldHVybiAwOwotICAgIFF1b3Rlc0RhdGEqIHJldCA9IG5l
dyAodG1wKSBRdW90ZXNEYXRhKHN0cmluZ0NvdW50KTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8
IHN0cmluZ0NvdW50OyArK2kpCi0gICAgICAgIG5ldyAodG1wICtzaXplb2YoUXVvdGVzRGF0YSkg
KyBzaXplb2YoU3RyaW5nKSppKSBTdHJpbmcoKTsKLSAgICByZXR1cm4gcmV0OworICAgIFJlZlB0
cjxRdW90ZXNEYXRhPiBkYXRhID0gUXVvdGVzRGF0YTo6Y3JlYXRlKCk7CisgICAgZGF0YS0+YWRk
UGFpcihzdGQ6Om1ha2VfcGFpcihvcGVuLCBjbG9zZSkpOworICAgIHJldHVybiBkYXRhOwogfQog
Ci1ib29sIFF1b3Rlc0RhdGE6OmVxdWFsKGNvbnN0IFF1b3Rlc0RhdGEqIHF1b3Rlc0RhdGExLCBj
b25zdCBRdW90ZXNEYXRhKiBxdW90ZXNEYXRhMikKK1Bhc3NSZWZQdHI8UXVvdGVzRGF0YT4gUXVv
dGVzRGF0YTo6Y3JlYXRlKFN0cmluZyBvcGVuMSwgU3RyaW5nIGNsb3NlMSwgU3RyaW5nIG9wZW4y
LCBTdHJpbmcgY2xvc2UyKQogewotICAgIGlmIChxdW90ZXNEYXRhMSA9PSBxdW90ZXNEYXRhMikK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKCFxdW90ZXNEYXRhMSB8fCAhcXVvdGVzRGF0
YTIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAocXVvdGVzRGF0YTEtPmxlbmd0aCAh
PSBxdW90ZXNEYXRhMi0+bGVuZ3RoKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgY29uc3Qg
U3RyaW5nKiBkYXRhMSA9IHF1b3Rlc0RhdGExLT5kYXRhKCk7Ci0gICAgY29uc3QgU3RyaW5nKiBk
YXRhMiA9IHF1b3Rlc0RhdGEyLT5kYXRhKCk7Ci0gICAgZm9yIChpbnQgaSA9IHF1b3Rlc0RhdGEx
LT5sZW5ndGggLSAxOyBpID49IDA7IC0taSkKLSAgICAgICAgaWYgKGRhdGExW2ldICE9IGRhdGEy
W2ldKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOworICAgIFJl
ZlB0cjxRdW90ZXNEYXRhPiBkYXRhID0gUXVvdGVzRGF0YTo6Y3JlYXRlKCk7CisgICAgZGF0YS0+
YWRkUGFpcihzdGQ6Om1ha2VfcGFpcihvcGVuMSwgY2xvc2UxKSk7CisgICAgZGF0YS0+YWRkUGFp
cihzdGQ6Om1ha2VfcGFpcihvcGVuMiwgY2xvc2UyKSk7CisgICAgcmV0dXJuIGRhdGE7CiB9CiAK
LVF1b3Rlc0RhdGE6On5RdW90ZXNEYXRhKCkKK1Bhc3NSZWZQdHI8UXVvdGVzRGF0YT4gUXVvdGVz
RGF0YTo6Y3JlYXRlKCkKIHsKLSAgICBTdHJpbmcqIHAgPSBkYXRhKCk7Ci0gICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKLSAgICAgICAgcFtpXS5+U3RyaW5nKCk7CisgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBRdW90ZXNEYXRhKCkpOworfQorCit2b2lkIFF1b3Rlc0RhdGE6OmFk
ZFBhaXIoc3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPiBxdW90ZVBhaXIpCit7CisgICAgbV9xdW90
ZVBhaXJzLmFwcGVuZChxdW90ZVBhaXIpOworfQorCitjb25zdCBTdHJpbmcgUXVvdGVzRGF0YTo6
Z2V0T3BlblF1b3RlKGludCBpbmRleCkgY29uc3QKK3sKKyAgICBpZiAoIW1fcXVvdGVQYWlycy5z
aXplKCkgfHwgaW5kZXggPCAwKQorICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKyAgICBp
ZiAoKHNpemVfdClpbmRleCA+PSBtX3F1b3RlUGFpcnMuc2l6ZSgpKQorICAgICAgICByZXR1cm4g
bV9xdW90ZVBhaXJzLmxhc3QoKS5maXJzdDsKKyAgICByZXR1cm4gbV9xdW90ZVBhaXJzLmF0KGlu
ZGV4KS5maXJzdDsKK30KKworY29uc3QgU3RyaW5nIFF1b3Rlc0RhdGE6OmdldENsb3NlUXVvdGUo
aW50IGluZGV4KSBjb25zdAoreworICAgIGlmICghbV9xdW90ZVBhaXJzLnNpemUoKSB8fCBpbmRl
eCA8IDApCisgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOworICAgIGlmICgoc2l6ZV90KWlu
ZGV4ID49IG1fcXVvdGVQYWlycy5zaXplKCkpCisgICAgICAgIHJldHVybiBtX3F1b3RlUGFpcnMu
bGFzdCgpLnNlY29uZDsKKyAgICByZXR1cm4gbV9xdW90ZVBhaXJzLmF0KGluZGV4KS5zZWNvbmQ7
Cit9CisKK2Jvb2wgUXVvdGVzRGF0YTo6ZXF1YWwoY29uc3QgUXVvdGVzRGF0YSogYSwgY29uc3Qg
UXVvdGVzRGF0YSogYikKK3sKKyAgICByZXR1cm4gYSAmJiBiICYmIGEtPm1fcXVvdGVQYWlycyA9
PSBiLT5tX3F1b3RlUGFpcnM7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9RdW90ZXNEYXRhLmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUXVvdGVzRGF0YS5oCmluZGV4IGY4MTc5OTZmMDhjNTM2
OTBmMzk4MzVlYmQ0NDQ2MThiOTA1MmRhYzYuLjIyNTA4YjM0NDMwYjdmNzE4NmExMDYyYzI3NWJm
OWU1N2RlYTljYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9R
dW90ZXNEYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1F1b3Rlc0Rh
dGEuaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIxLDI0ICsyMiwz
MSBAQAogI2lmbmRlZiBRdW90ZXNEYXRhX2gKICNkZWZpbmUgUXVvdGVzRGF0YV9oCiAKKyNpbmNs
dWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBRdW90
ZXNEYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8UXVvdGVzRGF0YT4gewogcHVibGljOgotICAgIHZp
cnR1YWwgflF1b3Rlc0RhdGEoKTsKLSAgICBzdGF0aWMgUXVvdGVzRGF0YSogY3JlYXRlKGludCBz
dHJpbmdDb3VudCk7Ci0gICAgU3RyaW5nKiBkYXRhKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxTdHJpbmcqPih0aGlzKzEpOyB9Ci0gICAgY29uc3QgU3RyaW5nKiBkYXRhKCkgY29uc3QgeyBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBTdHJpbmcqPih0aGlzKzEpOyB9Ci0gICAgaW50
IGxlbmd0aDsKLSAgICB2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkKiBwKSB7IGRlbGV0ZVtdIHN0
YXRpY19jYXN0PGNoYXIqPihwKTsgfQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFF1b3Rlc0RhdGE+
IGNyZWF0ZSgpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFF1b3Rlc0RhdGE+IGNyZWF0ZShjb25z
dCBTdHJpbmcgb3BlbiwgY29uc3QgU3RyaW5nIGNsb3NlKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxRdW90ZXNEYXRhPiBjcmVhdGUoY29uc3QgU3RyaW5nIG9wZW4xLCBjb25zdCBTdHJpbmcgY2xv
c2UxLCBjb25zdCBTdHJpbmcgb3BlbjIsIGNvbnN0IFN0cmluZyBjbG9zZTIpOwogICAgIHN0YXRp
YyBib29sIGVxdWFsKGNvbnN0IFF1b3Rlc0RhdGEqLCBjb25zdCBRdW90ZXNEYXRhKik7CisKKyAg
ICB+UXVvdGVzRGF0YSgpIHsgfTsKKyAgICB2b2lkIGFkZFBhaXIoY29uc3Qgc3RkOjpwYWlyPFN0
cmluZywgU3RyaW5nPiBxdW90ZVBhaXIpOworICAgIGNvbnN0IFN0cmluZyBnZXRPcGVuUXVvdGUo
aW50IGluZGV4KSBjb25zdDsKKyAgICBjb25zdCBTdHJpbmcgZ2V0Q2xvc2VRdW90ZShpbnQgaW5k
ZXgpIGNvbnN0OworCiBwcml2YXRlOgotICAgIFF1b3Rlc0RhdGEoaW50IHN0cmluZ0NvdW50KSA6
IGxlbmd0aChzdHJpbmdDb3VudCkge30KKyAgICBRdW90ZXNEYXRhKCkgeyB9CisKKyAgICBWZWN0
b3I8c3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPiA+IG1fcXVvdGVQYWlyczsKIH07CiAKLX0KK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKwogI2VuZGlmIC8vIFF1b3Rlc0RhdGFfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155075</attachid>
            <date>2012-07-27 15:48:58 -0700</date>
            <delta_ts>2012-07-30 15:16:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-92448-20120727154845.patch</filename>
            <type>text/plain</type>
            <size>18523</size>
            <attacher name="Elliott Sprehn">esprehn</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzMTM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDdlZWU2YzRjNDZjZjJl
M2VkZWM2NzFmNjczZTM1NTU4ZGNjNzRhNC4uYWNhMWJiNTJjNGU5OGFiZGViMWU1NTg0NjdiNGFl
ZmY1YmE5NjcwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDEyLTA3LTI3ICBFbGxp
b3R0IFNwcmVobiAgPGVzcHJlaG5AZ21haWwuY29tPgorCisgICAgICAgIE1ha2UgUXVvdGVzRGF0
YSB1c2UgYSBWZWN0b3Igb2YgcGFpcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTkyNDQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgUXVvdGVzRGF0YTo6Y3JlYXRlIHJldHVybmVkIGFuIGFycmF5IG9mIG1l
bW9yeSB0aGF0IGNvbnRhaW5lZCBpbiBwbGFjZSBpbnN0YW50aWF0aW9ucworICAgICAgICBvZiBh
IFF1b3Rlc0RhdGEgYW5kIHRoZW4gU3RyaW5nIGluc3RhbmNlcy4gVGhpcyBjaGFuZ2VzIHRoZSBj
b2RlIHRvIHVzZSBhIFZlY3RvciBvZgorICAgICAgICBwYWlycyBtYWtpbmcgaXQgc2FmZXIgYW5k
IGVuc3VyaW5nIHRoYXQgcXVvdGVzIGFyZSBhbHdheXMgYmFsYW5jZWQuIFRoaXMgYWxzbyB1c2Vz
IGEKKyAgICAgICAgSGFzaE1hcCBkaXJlY3RseSBpbiB0aGUgUXVvdGVSZW5kZXJlciBpbnN0ZWFk
IG9mIGJ1aWxkaW5nIGl0IG9uIGZpcnN0IGFjY2VzcyByZWR1Y2luZworICAgICAgICB0aGUgYW1v
dW50IG9mIGNvZGUgbmVlZGVkIGZvciBwaWNraW5nIHF1b3RlcyBieSBsYW5ndWFnZS4KKworICAg
ICAgICBObyBuZXcgdGVzdHMgbmVlZGVkOiBUaGlzIGp1c3QgY2hhbmdlcyB0aGUgc3RvcmFnZSBm
b3JtYXQuCisKKyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QpOiBDcmVhdGUg
cGFpcnMgYW5kIHVzZSB0aGUgbmV3IFF1b3Rlc0RhdGEgQVBJLgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJRdW90ZS5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgICAgICAgICAo
V2ViQ29yZTo6cXVvdGVzRGF0YUxhbmd1YWdlTWFwKTogTmV3IGZ1bmN0aW9uIHRoYXQgcmV0dXJu
cyB0aGUgSGFzaE1hcCBvZiBsYW5ndWFnZXMuCisgICAgICAgIChXZWJDb3JlOjpiYXNpY1F1b3Rl
c0RhdGEpOiBSZXR1cm5zIHRoZSBzaW1wbGUgZm9ybSBvZiBxdW90ZXMsICIgYW5kICcuCisgICAg
ICAgIChXZWJDb3JlOjpkZWZhdWx0UXVvdGVzKTogQ2hhbmdlZCB0byB1c2UgdGhlIG5ldyBtYXAu
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJRdW90ZTo6c3R5bGVEaWRDaGFuZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyUXVvdGU6Om9yaWdpbmFsVGV4dCk6IENoYW5nZWQgdG8gdXNlIHRo
ZSBuZXcgZ2V0T3BlblF1b3RlIGFuZCBnZXRDbG9zZVF1b3RlIHdoaWNoIGVuc3VyZSBib3VuZHMg
Y2hlY2tzLgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9RdW90ZXNEYXRhLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlF1b3Rlc0RhdGE6OmNyZWF0ZSk6IE5vdyByZXR1cm5zIGEgcGxhaW4gaW5z
dGFuY2Ugb2YgUXVvdGVzRGF0YSB3aXRob3V0IHRoZSBpbiBwbGFjZSBhbGxvY2F0aW9uLgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpRdW90ZXNEYXRhOjphZGRQYWlyKTog
QWRkcyBhbiBzdGQ6OnBhaXIgb2Ygc3RyaW5ncyBlbnN1cmluZyBxdW90ZXMgYXJlIGFsd2F5cyBi
YWxhbmNlZC4KKyAgICAgICAgKFdlYkNvcmU6OlF1b3Rlc0RhdGE6OmdldE9wZW5RdW90ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpRdW90ZXNEYXRhOjpnZXRDbG9zZVF1b3RlKToKKyAgICAgICAgKFdl
YkNvcmU6OlF1b3Rlc0RhdGE6OmVxdWFscyk6IFJlbmFtZWQgZXF1YWxzIChhZGRlZCB0aGUgcyku
CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1F1b3Rlc0RhdGEuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlF1b3Rlc0RhdGE6OmNyZWF0ZSk6CisgICAgICAgIChRdW90ZXNEYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OlF1b3Rlc0RhdGE6OlF1b3Rlc0RhdGEpOgorICAgICAgICAqIHJlbmRlcmluZy9z
dHlsZS9SZW5kZXJTdHlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6c2V0
UXVvdGVzKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU3R5bGVSYXJlSW5oZXJpdGVkRGF0
YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJhcmVJbmhlcml0ZWREYXRhOjpvcGVyYXRv
cj09KToKKwogMjAxMi0wNy0xOSAgQmVtIEpvbmVzLUJleSAgPGJqb25lc2JlQGFkb2JlLmNvbT4K
IAogICAgICAgICBbQ1NTIEV4Y2x1c2lvbnNdIC0gQ29kZSBjbGVhbnVwOiBtYWtlIHNoYXBlIHBh
cnNpbmcgdXNlIGlzQ29tbWEoKSBpbnN0ZWFkIG9mIG1hbnVhbCBjaGVja3MKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZVJlc29sdmVyLmNwcAppbmRleCA2NDViMjA4MjRmNWM1YjdhMmFhZWY0NDc1NTRlZTg4
Zjk1MjBiYjA4Li44NTk0OWYzOGQ2MGM2ZDMwM2IzNzViN2VhY2E2NmQyZmEwNmU1ZTBmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCkBAIC0zNDQ3LDIyICszNDQ3LDI0IEBAIHZv
aWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1
ZSogdmFsdWUpCiAgICAgICAgIH0KICAgICAgICAgaWYgKHZhbHVlLT5pc1ZhbHVlTGlzdCgpKSB7
CiAgICAgICAgICAgICBDU1NWYWx1ZUxpc3QqIGxpc3QgPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxp
c3QqPih2YWx1ZSk7Ci0gICAgICAgICAgICBRdW90ZXNEYXRhKiBkYXRhID0gUXVvdGVzRGF0YTo6
Y3JlYXRlKGxpc3QtPmxlbmd0aCgpKTsKLSAgICAgICAgICAgIGlmICghZGF0YSkKLSAgICAgICAg
ICAgICAgICByZXR1cm47IC8vIE91dCBvZiBtZW1vcnkKLSAgICAgICAgICAgIFN0cmluZyogcXVv
dGVzID0gZGF0YS0+ZGF0YSgpOwotICAgICAgICAgICAgZm9yIChDU1NWYWx1ZUxpc3RJdGVyYXRv
ciBpID0gbGlzdDsgaS5oYXNNb3JlKCk7IGkuYWR2YW5jZSgpKSB7Ci0gICAgICAgICAgICAgICAg
Q1NTVmFsdWUqIGl0ZW0gPSBpLnZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGl0ZW0t
PmlzUHJpbWl0aXZlVmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgcHJpbWl0aXZlVmFsdWUgPSBz
dGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGl0ZW0pOwotICAgICAgICAgICAgICAgIEFT
U0VSVChwcmltaXRpdmVWYWx1ZS0+aXNTdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgcXVvdGVz
W2kuaW5kZXgoKV0gPSBwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKTsKKyAgICAgICAg
ICAgIFJlZlB0cjxRdW90ZXNEYXRhPiBxdW90ZXMgPSBRdW90ZXNEYXRhOjpjcmVhdGUoKTsKKyAg
ICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdC0+bGVuZ3RoKCk7IGkgKz0gMikg
eworICAgICAgICAgICAgICAgIENTU1ZhbHVlKiBmaXJzdCA9IGxpc3QtPml0ZW1XaXRob3V0Qm91
bmRzQ2hlY2soaSk7CisgICAgICAgICAgICAgICAgLy8gaXRlbSgpIHJldHVybnMgbnVsbCBpZiBv
dXQgb2YgYm91bmRzIHNvIHRoaXMgaXMgc2FmZS4KKyAgICAgICAgICAgICAgICBDU1NWYWx1ZSog
c2Vjb25kID0gbGlzdC0+aXRlbShpICsgMSk7CisgICAgICAgICAgICAgICAgaWYgKCFzZWNvbmQp
CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIEFTU0VSVChm
aXJzdC0+aXNQcmltaXRpdmVWYWx1ZSgpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoc2Vjb25k
LT5pc1ByaW1pdGl2ZVZhbHVlKCkpOworICAgICAgICAgICAgICAgIFN0cmluZyBzdGFydFF1b3Rl
ID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihmaXJzdCktPmdldFN0cmluZ1ZhbHVl
KCk7CisgICAgICAgICAgICAgICAgU3RyaW5nIGVuZFF1b3RlID0gc3RhdGljX2Nhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWUqPihzZWNvbmQpLT5nZXRTdHJpbmdWYWx1ZSgpOworICAgICAgICAgICAgICAg
IHF1b3Rlcy0+YWRkUGFpcihzdGQ6Om1ha2VfcGFpcihzdGFydFF1b3RlLCBlbmRRdW90ZSkpOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgbV9zdHlsZS0+c2V0UXVvdGVzKGFkb3B0UmVmKGRh
dGEpKTsKLSAgICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZSkgewotICAgICAgICAgICAg
QVNTRVJUKHByaW1pdGl2ZVZhbHVlLT5pc0lkZW50KCkpOworICAgICAgICAgICAgbV9zdHlsZS0+
c2V0UXVvdGVzKHF1b3Rlcyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVl
KSB7CiAgICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFs
dWVOb25lKQotICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldFF1b3RlcyhhZG9wdFJlZihRdW90
ZXNEYXRhOjpjcmVhdGUoMCkpKTsKKyAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRRdW90ZXMo
UXVvdGVzRGF0YTo6Y3JlYXRlKCkpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICBj
YXNlIENTU1Byb3BlcnR5Rm9udEZhbWlseTogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclF1b3RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJRdW90ZS5jcHAKaW5kZXggNzlkYTBkMjBkNmM5MWI1NDY0NzU1NjM1OTBlN2Y0Y2ZmMzBmMTk3
ZS4uODBmMjA3ZjI1MTE1MDJiZWM3YWRjYTc3NjI3ZThhYmUyMDQyZDUwNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclF1b3RlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyUXVvdGUuY3BwCkBAIC0yNiw5ICsyNiw3IEBACiAjaW5jbHVk
ZSAiSFRNTEVsZW1lbnQuaCIKICNpbmNsdWRlICJRdW90ZXNEYXRhLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyU3R5bGUuaCIKLSNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8d3RmL3RleHQvQXRv
bWljU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjZGVmaW5lIFVO
S05PV05fREVQVEggLTEKIApAQCAtMTM2LDg5ICsxMzQsMjcgQEAgc2tpcE5ld0RlcHRoQ2FsYzoK
ICAgICB9IHdoaWxlIChoZWFkKTsKIH0KIAotI2RlZmluZSBBUlJBWV9TSVpFKENhcnJheSkgKHNp
emVvZihDYXJyYXkpIC8gc2l6ZW9mKCpDYXJyYXkpKQotI2RlZmluZSBMQU5HVUFHRV9EQVRBKG5h
bWUsIGxhbmd1YWdlU291cmNlQXJyYXkpIHsgbmFtZSwgbGFuZ3VhZ2VTb3VyY2VBcnJheSwgQVJS
QVlfU0laRShsYW5ndWFnZVNvdXJjZUFycmF5KSB9CiAjZGVmaW5lIFUoeCkgKChjb25zdCBVQ2hh
ciopTCMjeCkKIAotc3RhdGljIGNvbnN0IFVDaGFyKiBzaW1wbGVRdW90ZXNbXSA9IHtVKCJcIiIp
LCBVKCJcIiIpLCBVKCInIiksIFUoIiciKX07Cit0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5n
LCBjb25zdCBRdW90ZXNEYXRhKiwgQ2FzZUZvbGRpbmdIYXNoPiBRdW90ZXNNYXA7CiAKLXN0YXRp
YyBjb25zdCBVQ2hhciogZW5nbGlzaFF1b3Rlc1tdID0ge1UoIlx4MjAxQyIpLCBVKCJceDIwMUQi
KSwgVSgiXHgyMDE4IiksIFUoIlx4MjAxOSIpfTsKLXN0YXRpYyBjb25zdCBVQ2hhciogbm9yd2Vn
aWFuUXVvdGVzW10gPSB7IFUoIlx4MDBBQiIpLCBVKCJceDAwQkIiKSwgVSgiXHgyMDM5IiksIFUo
Ilx4MjAzQSIpIH07Ci1zdGF0aWMgY29uc3QgVUNoYXIqIHJvbWFuaWFuUXVvdGVzW10gPSB7IFUo
Ilx4MjAxRSIpLCBVKCJceDIwMUQiKX07Ci1zdGF0aWMgY29uc3QgVUNoYXIqIHJ1c3NpYW5RdW90
ZXNbXSA9IHsgVSgiXHgwMEFCIiksIFUoIlx4MDBCQiIpLCBVKCJceDIwMUUiKSwgVSgiXHgyMDFD
IikgfTsKLSN1bmRlZiBVCi0KLXN0cnVjdCBMYW5ndWFnZURhdGEgewotICAgIGNvbnN0IGNoYXIg
Km5hbWU7Ci0gICAgY29uc3QgVUNoYXIqIGNvbnN0KiBjb25zdCBhcnJheTsKLSAgICBjb25zdCBp
bnQgYXJyYXlTaXplOwotICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IExhbmd1YWdlRGF0YSYgY29t
cGFyZVRvKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIHN0cmNtcChuYW1lLCBjb21wYXJl
VG8ubmFtZSk7Ci0gICAgfQotfTsKLQotLy8gRGF0YSBtYXN0IGJlIGFscGhhYmV0aWNhbGx5IHNv
cnRlZCBhbmQgaW4gYWxsIGxvd2VyIGNhc2UgZm9yIGZhc3QgY29tcGFyaXNvbgotTGFuZ3VhZ2VE
YXRhIGxhbmd1YWdlRGF0YVtdID0gewotICAgIExBTkdVQUdFX0RBVEEoImVuIiwgZW5nbGlzaFF1
b3RlcyksCi0gICAgTEFOR1VBR0VfREFUQSgibm8iLCBub3J3ZWdpYW5RdW90ZXMpLAotICAgIExB
TkdVQUdFX0RBVEEoInJvIiwgcm9tYW5pYW5RdW90ZXMpLAotICAgIExBTkdVQUdFX0RBVEEoInJ1
IiwgcnVzc2lhblF1b3RlcykKLX07Ci0jdW5kZWYgTEFOR1VBR0VfREFUQQotY29uc3QgTGFuZ3Vh
Z2VEYXRhKiBjb25zdCBsYW5ndWFnZURhdGFFbmQgPSBsYW5ndWFnZURhdGEgKyBBUlJBWV9TSVpF
KGxhbmd1YWdlRGF0YSk7Ci0KLSNkZWZpbmUgZGVmYXVsdExhbmd1YWdlUXVvdGVzU291cmNlIHNp
bXBsZVF1b3RlcwotI2RlZmluZSBkZWZhdWx0TGFuZ3VhZ2VRdW90ZXNDb3VudCBBUlJBWV9TSVpF
KGRlZmF1bHRMYW5ndWFnZVF1b3Rlc1NvdXJjZSkKLQotc3RhdGljIFF1b3Rlc0RhdGEqIGRlZmF1
bHRMYW5ndWFnZVF1b3Rlc1ZhbHVlID0gMDsKLXN0YXRpYyBjb25zdCBRdW90ZXNEYXRhKiBkZWZh
dWx0TGFuZ3VhZ2VRdW90ZXMoKQotewotICAgIGlmICghZGVmYXVsdExhbmd1YWdlUXVvdGVzVmFs
dWUpIHsKLSAgICAgICAgZGVmYXVsdExhbmd1YWdlUXVvdGVzVmFsdWUgPSBRdW90ZXNEYXRhOjpj
cmVhdGUoZGVmYXVsdExhbmd1YWdlUXVvdGVzQ291bnQpOwotICAgICAgICBpZiAoIWRlZmF1bHRM
YW5ndWFnZVF1b3Rlc1ZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIFN0cmlu
ZyogZGF0YSA9IGRlZmF1bHRMYW5ndWFnZVF1b3Rlc1ZhbHVlLT5kYXRhKCk7Ci0gICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgZGVmYXVsdExhbmd1YWdlUXVvdGVzQ291bnQ7ICsraSkKLSAg
ICAgICAgICAgIGRhdGFbaV0gPSBkZWZhdWx0TGFuZ3VhZ2VRdW90ZXNTb3VyY2VbaV07Ci0gICAg
fQotICAgIHJldHVybiBkZWZhdWx0TGFuZ3VhZ2VRdW90ZXNWYWx1ZTsKLX0KLSN1bmRlZiBkZWZh
dWx0TGFuZ3VhZ2VRdW90ZXNTb3VyY2UKLSN1bmRlZiBkZWZhdWx0TGFuZ3VhZ2VRdW90ZXNDb3Vu
dAotCi10eXBlZGVmIEhhc2hNYXA8UmVmUHRyPEF0b21pY1N0cmluZ0ltcGw+LCBRdW90ZXNEYXRh
KiA+IFF1b3Rlc01hcDsKLQotc3RhdGljIFF1b3Rlc01hcCYgcXVvdGVzTWFwKCkKK3N0YXRpYyBj
b25zdCBRdW90ZXNNYXAqIHF1b3Rlc0RhdGFMYW5ndWFnZU1hcCgpCiB7Ci0gICAgREVGSU5FX1NU
QVRJQ19MT0NBTChRdW90ZXNNYXAsIHN0YXRpY1F1b3Rlc01hcCwgKCkpOworICAgIHN0YXRpYyBR
dW90ZXNNYXAqIHN0YXRpY1F1b3Rlc01hcCA9IG5ldyBRdW90ZXNNYXAoKTsKKyAgICBpZiAoc3Rh
dGljUXVvdGVzTWFwLT5zaXplKCkpCisgICAgICAgIHJldHVybiBzdGF0aWNRdW90ZXNNYXA7Cisg
ICAgc3RhdGljUXVvdGVzTWFwLT5zZXQoImVuIiwgUXVvdGVzRGF0YTo6Y3JlYXRlKFUoIlx4MjAx
QyIpLCBVKCJceDIwMUQiKSwgVSgiXHgyMDE4IiksIFUoIlx4MjAxOSIpKS5sZWFrUmVmKCkpOwor
ICAgIHN0YXRpY1F1b3Rlc01hcC0+c2V0KCJubyIsIFF1b3Rlc0RhdGE6OmNyZWF0ZShVKCJceDAw
QUIiKSwgVSgiXHgwMEJCIiksIFUoIlx4MjAzOSIpLCBVKCJceDIwM0EiKSkubGVha1JlZigpKTsK
KyAgICBzdGF0aWNRdW90ZXNNYXAtPnNldCgicm8iLCBRdW90ZXNEYXRhOjpjcmVhdGUoVSgiXHgy
MDFFIiksIFUoIlx4MjAxRCIpKS5sZWFrUmVmKCkpOworICAgIHN0YXRpY1F1b3Rlc01hcC0+c2V0
KCJydSIsIFF1b3Rlc0RhdGE6OmNyZWF0ZShVKCJceDAwQUIiKSwgVSgiXHgwMEJCIiksIFUoIlx4
MjAxRSIpLCBVKCJceDIwMUMiKSkubGVha1JlZigpKTsKICAgICByZXR1cm4gc3RhdGljUXVvdGVz
TWFwOwogfQogCi1zdGF0aWMgY29uc3QgUXVvdGVzRGF0YSogcXVvdGVzRm9yTGFuZ3VhZ2UoQXRv
bWljU3RyaW5nSW1wbCogbGFuZ3VhZ2UpCitzdGF0aWMgY29uc3QgUXVvdGVzRGF0YSogYmFzaWNR
dW90ZXNEYXRhKCkKIHsKLSAgICBRdW90ZXNEYXRhKiByZXR1cm5WYWx1ZTsKLSAgICBBdG9taWNT
dHJpbmcgbG93ZXIobGFuZ3VhZ2UtPmxvd2VyKCkpOwotICAgIHJldHVyblZhbHVlID0gcXVvdGVz
TWFwKCkuZ2V0KGxvd2VyLmltcGwoKSk7Ci0gICAgaWYgKHJldHVyblZhbHVlKQotICAgICAgICBy
ZXR1cm4gcmV0dXJuVmFsdWU7Ci0gICAgQ1N0cmluZyBzKHN0YXRpY19jYXN0PGNvbnN0IFN0cmlu
ZyY+KGxvd2VyKS5hc2NpaSgpKTsKLSAgICBMYW5ndWFnZURhdGEgcmVxdWVzdCA9IHsgcy5idWZm
ZXIoKS0+ZGF0YSgpLCAwLCAwIH07Ci0gICAgY29uc3QgTGFuZ3VhZ2VEYXRhKiBsb3dlckJvdW5k
ID0gc3RkOjpsb3dlcl9ib3VuZDxjb25zdCBMYW5ndWFnZURhdGEqLCBjb25zdCBMYW5ndWFnZURh
dGE+KGxhbmd1YWdlRGF0YSwgbGFuZ3VhZ2VEYXRhRW5kLCByZXF1ZXN0KTsKLSAgICBpZiAobG93
ZXJCb3VuZCA9PSBsYW5ndWFnZURhdGFFbmQpCi0gICAgICAgIHJldHVybiBkZWZhdWx0TGFuZ3Vh
Z2VRdW90ZXMoKTsKLSAgICBpZiAoc3RybmNtcChsb3dlckJvdW5kLT5uYW1lLCByZXF1ZXN0Lm5h
bWUsIHN0cmxlbihsb3dlckJvdW5kLT5uYW1lKSkpCi0gICAgICAgIHJldHVybiBkZWZhdWx0TGFu
Z3VhZ2VRdW90ZXMoKTsKLSAgICByZXR1cm5WYWx1ZSA9IFF1b3Rlc0RhdGE6OmNyZWF0ZShsb3dl
ckJvdW5kLT5hcnJheVNpemUpOwotICAgIGlmICghcmV0dXJuVmFsdWUpCi0gICAgICAgIHJldHVy
biBkZWZhdWx0TGFuZ3VhZ2VRdW90ZXMoKTsKLSAgICBTdHJpbmcqIGRhdGEgPSByZXR1cm5WYWx1
ZS0+ZGF0YSgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbG93ZXJCb3VuZC0+YXJyYXlTaXpl
OyArK2kpCi0gICAgICAgIGRhdGFbaV0gPSBsb3dlckJvdW5kLT5hcnJheVtpXTsKLSAgICBxdW90
ZXNNYXAoKS5zZXQobG93ZXIuaW1wbCgpLCByZXR1cm5WYWx1ZSk7Ci0gICAgcmV0dXJuIHJldHVy
blZhbHVlOworICAgIHN0YXRpYyBjb25zdCBRdW90ZXNEYXRhKiBzdGF0aWNCYXNpY1F1b3RlcyA9
IFF1b3Rlc0RhdGE6OmNyZWF0ZShVKCJcIiIpLCBVKCJcIiIpLCBVKCInIiksIFUoIiciKSkubGVh
a1JlZigpOworICAgIHJldHVybiBzdGF0aWNCYXNpY1F1b3RlczsKIH0KLSN1bmRlZiBBUlJBWV9T
SVpFCiAKIHN0YXRpYyBjb25zdCBRdW90ZXNEYXRhKiBkZWZhdWx0UXVvdGVzKGNvbnN0IFJlbmRl
ck9iamVjdCogb2JqZWN0KQogewpAQCAtMjMyLDE2ICsxNjgsMTkgQEAgc3RhdGljIGNvbnN0IFF1
b3Rlc0RhdGEqIGRlZmF1bHRRdW90ZXMoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCiAgICAg
fSBlbHNlIGlmICghbm9kZS0+aXNFbGVtZW50Tm9kZSgpKSB7CiAgICAgICAgIGVsZW1lbnQgPSBu
b2RlLT5wYXJlbnRFbGVtZW50KCk7CiAgICAgICAgIGlmICghZWxlbWVudCkKLSAgICAgICAgICAg
IHJldHVybiBkZWZhdWx0TGFuZ3VhZ2VRdW90ZXMoKTsKKyAgICAgICAgICAgIHJldHVybiBiYXNp
Y1F1b3Rlc0RhdGEoKTsKICAgICB9IGVsc2UKICAgICAgIGVsZW1lbnQgPSB0b0VsZW1lbnQobm9k
ZSk7CiAgICAgY29uc3QgQXRvbWljU3RyaW5nKiBsYW5ndWFnZTsKICAgICB3aGlsZSAoKGxhbmd1
YWdlID0gJmVsZW1lbnQtPmdldEF0dHJpYnV0ZShsYW5nU3RyaW5nKSkgJiYgbGFuZ3VhZ2UtPmlz
TnVsbCgpKSB7CiAgICAgICAgIGVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCk7CiAg
ICAgICAgIGlmICghZWxlbWVudCkKLSAgICAgICAgICAgIHJldHVybiBkZWZhdWx0TGFuZ3VhZ2VR
dW90ZXMoKTsKKyAgICAgICAgICAgIHJldHVybiBiYXNpY1F1b3Rlc0RhdGEoKTsKICAgICB9Ci0g
ICAgcmV0dXJuIHF1b3Rlc0Zvckxhbmd1YWdlKGxhbmd1YWdlLT5pbXBsKCkpOworICAgIGNvbnN0
IFF1b3Rlc0RhdGEqIHF1b3Rlc0RhdGEgPSBxdW90ZXNEYXRhTGFuZ3VhZ2VNYXAoKS0+Z2V0KCps
YW5ndWFnZSk7CisgICAgaWYgKCFxdW90ZXNEYXRhKQorICAgICAgICByZXR1cm4gYmFzaWNRdW90
ZXNEYXRhKCk7CisgICAgcmV0dXJuIHF1b3Rlc0RhdGE7CiB9CiAKIFBhc3NSZWZQdHI8U3RyaW5n
SW1wbD4gUmVuZGVyUXVvdGU6Om9yaWdpbmFsVGV4dCgpIGNvbnN0CkBAIC0yNTIsMzAgKzE5MSwx
OSBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFJlbmRlclF1b3RlOjpvcmlnaW5hbFRleHQoKSBj
b25zdAogICAgIGNvbnN0IFF1b3Rlc0RhdGEqIHF1b3RlcyA9IHN0eWxlKCktPnF1b3RlcygpOwog
ICAgIGlmICghcXVvdGVzKQogICAgICAgICBxdW90ZXMgPSBkZWZhdWx0UXVvdGVzKHRoaXMpOwot
ICAgIGlmICghcXVvdGVzLT5sZW5ndGgpCi0gICAgICAgIHJldHVybiBlbXB0eUF0b20uaW1wbCgp
OwotICAgIGludCBpbmRleCA9IG1fZGVwdGggKiAyOwogICAgIHN3aXRjaCAobV90eXBlKSB7CiAg
ICAgY2FzZSBOT19PUEVOX1FVT1RFOgogICAgIGNhc2UgTk9fQ0xPU0VfUVVPVEU6Ci0gICAgICAg
IHJldHVybiBlbXB0eVN0cmluZygpLmltcGwoKTsKKyAgICAgICAgcmV0dXJuIFN0cmluZ0ltcGw6
OmVtcHR5KCk7CiAgICAgY2FzZSBDTE9TRV9RVU9URToKLSAgICAgICAgaWYgKGluZGV4KQotICAg
ICAgICAgICAgLS1pbmRleDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgKytpbmRleDsKLSAg
ICAgICAgYnJlYWs7CisgICAgICAgIC8vIEZJWE1FOiBXaGVuIG1fZGVwdGggaXMgMCB3ZSBzaG91
bGQgcmV0dXJuIGVtcHR5IHN0cmluZy4KKyAgICAgICAgcmV0dXJuIHF1b3Rlcy0+Z2V0Q2xvc2VR
dW90ZShzdGQ6Om1heDxpbnQ+KG1fZGVwdGggLSAxLCAwKSkuaW1wbCgpOwogICAgIGNhc2UgT1BF
Tl9RVU9URToKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBxdW90ZXMtPmdldE9wZW5R
dW90ZShtX2RlcHRoKS5pbXBsKCk7CiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBlbXB0eUF0b20uaW1wbCgpOworICAgICAgICByZXR1
cm4gU3RyaW5nSW1wbDo6ZW1wdHkoKTsKICAgICB9Ci0gICAgaWYgKGluZGV4ID49IHF1b3Rlcy0+
bGVuZ3RoKQotICAgICAgICBpbmRleCA9IChxdW90ZXMtPmxlbmd0aC0yKSB8IChpbmRleCAmIDEp
OwotICAgIGlmIChpbmRleCA8IDApCi0gICAgICAgIHJldHVybiBlbXB0eUF0b20uaW1wbCgpOwot
ICAgIHJldHVybiBxdW90ZXMtPmRhdGEoKVtpbmRleF0uaW1wbCgpOwogfQogCiB2b2lkIFJlbmRl
clF1b3RlOjpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocyhmbG9hdCBsZWFkKQpAQCAtMzMz
LDcgKzI2MSw3IEBAIHZvaWQgUmVuZGVyUXVvdGU6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVy
ZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5CiB7CiAgICAgY29uc3QgUXVvdGVz
RGF0YSogbmV3UXVvdGVzID0gc3R5bGUoKS0+cXVvdGVzKCk7CiAgICAgY29uc3QgUXVvdGVzRGF0
YSogb2xkUXVvdGVzID0gb2xkU3R5bGUgPyBvbGRTdHlsZS0+cXVvdGVzKCkgOiAwOwotICAgIGlm
ICghUXVvdGVzRGF0YTo6ZXF1YWwobmV3UXVvdGVzLCBvbGRRdW90ZXMpKQorICAgIGlmICghUXVv
dGVzRGF0YTo6ZXF1YWxzKG5ld1F1b3Rlcywgb2xkUXVvdGVzKSkKICAgICAgICAgc2V0TmVlZHNM
YXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CiAgICAgUmVuZGVyVGV4dDo6c3R5bGVEaWRDaGFu
Z2UoZGlmZiwgb2xkU3R5bGUpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N0eWxlL1F1b3Rlc0RhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L1F1b3Rlc0RhdGEuY3BwCmluZGV4IDRlODFmNzU2N2Y1Y2JhODM1ZTYyYjgwNzJjNjFhZWZhOWFl
OWI2MTkuLmM4NTRiZDUzYzU0YmFlMGRmZWQxYjA4MzI1ZmNiMzM2MDVmY2FlNWUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9RdW90ZXNEYXRhLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUXVvdGVzRGF0YS5jcHAKQEAgLTEsNSArMSw2
IEBACiAvKioKICAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIzLDM4ICsyNCw1MyBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLVF1b3Rlc0RhdGEqIFF1b3Rlc0RhdGE6OmNyZWF0ZShpbnQgc3RyaW5n
Q291bnQpCitQYXNzUmVmUHRyPFF1b3Rlc0RhdGE+IFF1b3Rlc0RhdGE6OmNyZWF0ZShTdHJpbmcg
b3BlbiwgU3RyaW5nIGNsb3NlKQogewotICAgIGNoYXIqIHRtcCA9IG5ldyBjaGFyW3NpemVvZihR
dW90ZXNEYXRhKStzaXplb2YoU3RyaW5nKSpzdHJpbmdDb3VudF07Ci0gICAgaWYgKCF0bXApCi0g
ICAgICAgIHJldHVybiAwOwotICAgIFF1b3Rlc0RhdGEqIHJldCA9IG5ldyAodG1wKSBRdW90ZXNE
YXRhKHN0cmluZ0NvdW50KTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHN0cmluZ0NvdW50OyAr
K2kpCi0gICAgICAgIG5ldyAodG1wICtzaXplb2YoUXVvdGVzRGF0YSkgKyBzaXplb2YoU3RyaW5n
KSppKSBTdHJpbmcoKTsKLSAgICByZXR1cm4gcmV0OworICAgIFJlZlB0cjxRdW90ZXNEYXRhPiBk
YXRhID0gUXVvdGVzRGF0YTo6Y3JlYXRlKCk7CisgICAgZGF0YS0+YWRkUGFpcihzdGQ6Om1ha2Vf
cGFpcihvcGVuLCBjbG9zZSkpOworICAgIHJldHVybiBkYXRhOwogfQogCi1ib29sIFF1b3Rlc0Rh
dGE6OmVxdWFsKGNvbnN0IFF1b3Rlc0RhdGEqIHF1b3Rlc0RhdGExLCBjb25zdCBRdW90ZXNEYXRh
KiBxdW90ZXNEYXRhMikKK1Bhc3NSZWZQdHI8UXVvdGVzRGF0YT4gUXVvdGVzRGF0YTo6Y3JlYXRl
KFN0cmluZyBvcGVuMSwgU3RyaW5nIGNsb3NlMSwgU3RyaW5nIG9wZW4yLCBTdHJpbmcgY2xvc2Uy
KQogewotICAgIGlmIChxdW90ZXNEYXRhMSA9PSBxdW90ZXNEYXRhMikKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgaWYgKCFxdW90ZXNEYXRhMSB8fCAhcXVvdGVzRGF0YTIpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBpZiAocXVvdGVzRGF0YTEtPmxlbmd0aCAhPSBxdW90ZXNEYXRhMi0+
bGVuZ3RoKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgY29uc3QgU3RyaW5nKiBkYXRhMSA9
IHF1b3Rlc0RhdGExLT5kYXRhKCk7Ci0gICAgY29uc3QgU3RyaW5nKiBkYXRhMiA9IHF1b3Rlc0Rh
dGEyLT5kYXRhKCk7Ci0gICAgZm9yIChpbnQgaSA9IHF1b3Rlc0RhdGExLT5sZW5ndGggLSAxOyBp
ID49IDA7IC0taSkKLSAgICAgICAgaWYgKGRhdGExW2ldICE9IGRhdGEyW2ldKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOworICAgIFJlZlB0cjxRdW90ZXNEYXRh
PiBkYXRhID0gUXVvdGVzRGF0YTo6Y3JlYXRlKCk7CisgICAgZGF0YS0+YWRkUGFpcihzdGQ6Om1h
a2VfcGFpcihvcGVuMSwgY2xvc2UxKSk7CisgICAgZGF0YS0+YWRkUGFpcihzdGQ6Om1ha2VfcGFp
cihvcGVuMiwgY2xvc2UyKSk7CisgICAgcmV0dXJuIGRhdGE7Cit9CisKK3ZvaWQgUXVvdGVzRGF0
YTo6YWRkUGFpcihzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+IHF1b3RlUGFpcikKK3sKKyAgICBt
X3F1b3RlUGFpcnMuYXBwZW5kKHF1b3RlUGFpcik7Cit9CisKK2NvbnN0IFN0cmluZyBRdW90ZXNE
YXRhOjpnZXRPcGVuUXVvdGUoaW50IGluZGV4KSBjb25zdAoreworICAgIEFTU0VSVChpbmRleCA+
PSAwKTsKKyAgICBpZiAoIW1fcXVvdGVQYWlycy5zaXplKCkpCisgICAgICAgIHJldHVybiBlbXB0
eVN0cmluZygpOworICAgIGlmICgoc2l6ZV90KWluZGV4ID49IG1fcXVvdGVQYWlycy5zaXplKCkp
CisgICAgICAgIHJldHVybiBtX3F1b3RlUGFpcnMubGFzdCgpLmZpcnN0OworICAgIHJldHVybiBt
X3F1b3RlUGFpcnMuYXQoaW5kZXgpLmZpcnN0OwogfQogCi1RdW90ZXNEYXRhOjp+UXVvdGVzRGF0
YSgpCitjb25zdCBTdHJpbmcgUXVvdGVzRGF0YTo6Z2V0Q2xvc2VRdW90ZShpbnQgaW5kZXgpIGNv
bnN0CiB7Ci0gICAgU3RyaW5nKiBwID0gZGF0YSgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
bGVuZ3RoOyArK2kpCi0gICAgICAgIHBbaV0uflN0cmluZygpOworICAgIEFTU0VSVChpbmRleCA+
PSAwKTsKKyAgICBpZiAoIW1fcXVvdGVQYWlycy5zaXplKCkpCisgICAgICAgIHJldHVybiBlbXB0
eVN0cmluZygpOworICAgIGlmICgoc2l6ZV90KWluZGV4ID49IG1fcXVvdGVQYWlycy5zaXplKCkp
CisgICAgICAgIHJldHVybiBtX3F1b3RlUGFpcnMubGFzdCgpLnNlY29uZDsKKyAgICByZXR1cm4g
bV9xdW90ZVBhaXJzLmF0KGluZGV4KS5zZWNvbmQ7Cit9CisKK2Jvb2wgUXVvdGVzRGF0YTo6ZXF1
YWxzKGNvbnN0IFF1b3Rlc0RhdGEqIGEsIGNvbnN0IFF1b3Rlc0RhdGEqIGIpCit7CisgICAgaWYg
KGEgPT0gYikKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKCFhIHx8ICFiKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGEtPm1fcXVvdGVQYWlycyA9PSBiLT5tX3F1b3Rl
UGFpcnM7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9RdW90ZXNEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvUXVvdGVzRGF0YS5oCmluZGV4IGY4MTc5OTZmMDhjNTM2OTBmMzk4MzVlYmQ0
NDQ2MThiOTA1MmRhYzYuLjU2OTlmMzI0NTUzZWQwZjMyODM1ODI3ZjI1MDUxMjVhYzc5NTcyMjIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9RdW90ZXNEYXRhLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1F1b3Rlc0RhdGEuaApAQCAtMSw1
ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIxLDI0ICsyMiwzMiBAQAogI2lmbmRl
ZiBRdW90ZXNEYXRhX2gKICNkZWZpbmUgUXVvdGVzRGF0YV9oCiAKKyNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBRdW90ZXNEYXRhIDogcHVi
bGljIFJlZkNvdW50ZWQ8UXVvdGVzRGF0YT4gewogcHVibGljOgotICAgIHZpcnR1YWwgflF1b3Rl
c0RhdGEoKTsKLSAgICBzdGF0aWMgUXVvdGVzRGF0YSogY3JlYXRlKGludCBzdHJpbmdDb3VudCk7
Ci0gICAgU3RyaW5nKiBkYXRhKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxTdHJpbmcqPih0
aGlzKzEpOyB9Ci0gICAgY29uc3QgU3RyaW5nKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBTdHJpbmcqPih0aGlzKzEpOyB9Ci0gICAgaW50IGxlbmd0aDsKLSAg
ICB2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkKiBwKSB7IGRlbGV0ZVtdIHN0YXRpY19jYXN0PGNo
YXIqPihwKTsgfQotICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFF1b3Rlc0RhdGEqLCBjb25z
dCBRdW90ZXNEYXRhKik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8UXVvdGVzRGF0YT4gY3JlYXRl
KCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFF1b3Rlc0RhdGEoKSk7IH0KKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxRdW90ZXNEYXRhPiBjcmVhdGUoY29uc3QgU3RyaW5nIG9wZW4sIGNvbnN0IFN0cmlu
ZyBjbG9zZSk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8UXVvdGVzRGF0YT4gY3JlYXRlKGNvbnN0
IFN0cmluZyBvcGVuMSwgY29uc3QgU3RyaW5nIGNsb3NlMSwgY29uc3QgU3RyaW5nIG9wZW4yLCBj
b25zdCBTdHJpbmcgY2xvc2UyKTsKKworICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCBiZSBhbiBv
cGVyYXRvcj09LgorICAgIHN0YXRpYyBib29sIGVxdWFscyhjb25zdCBRdW90ZXNEYXRhKiwgY29u
c3QgUXVvdGVzRGF0YSopOworCisgICAgdm9pZCBhZGRQYWlyKGNvbnN0IHN0ZDo6cGFpcjxTdHJp
bmcsIFN0cmluZz4gcXVvdGVQYWlyKTsKKyAgICBjb25zdCBTdHJpbmcgZ2V0T3BlblF1b3RlKGlu
dCBpbmRleCkgY29uc3Q7CisgICAgY29uc3QgU3RyaW5nIGdldENsb3NlUXVvdGUoaW50IGluZGV4
KSBjb25zdDsKKwogcHJpdmF0ZToKLSAgICBRdW90ZXNEYXRhKGludCBzdHJpbmdDb3VudCkgOiBs
ZW5ndGgoc3RyaW5nQ291bnQpIHt9CisgICAgUXVvdGVzRGF0YSgpIHsgfQorCisgICAgVmVjdG9y
PHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4gPiBtX3F1b3RlUGFpcnM7CiB9OwogCi19Cit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKICNlbmRpZiAvLyBRdW90ZXNEYXRhX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwCmluZGV4IDhlNWE5MGU4Y2Zk
ZGIxNTQwODc2MWI5MjcyY2FlODg2OTFlOGE3OTguLmFiMDEzYWZiOTk2M2NjNjk0YWNhYmQyMGE1
ZGM5MzE4YzQ0ZTZlMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHls
ZS9SZW5kZXJTdHlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1Jl
bmRlclN0eWxlLmNwcApAQCAtNzAwLDcgKzcwMCw3IEBAIHZvaWQgUmVuZGVyU3R5bGU6OnNldEN1
cnNvckxpc3QoUGFzc1JlZlB0cjxDdXJzb3JMaXN0PiBvdGhlcikKIAogdm9pZCBSZW5kZXJTdHls
ZTo6c2V0UXVvdGVzKFBhc3NSZWZQdHI8UXVvdGVzRGF0YT4gcSkKIHsKLSAgICBpZiAoUXVvdGVz
RGF0YTo6ZXF1YWwocmFyZUluaGVyaXRlZERhdGEtPnF1b3Rlcy5nZXQoKSwgcS5nZXQoKSkpCisg
ICAgaWYgKFF1b3Rlc0RhdGE6OmVxdWFscyhyYXJlSW5oZXJpdGVkRGF0YS0+cXVvdGVzLmdldCgp
LCBxLmdldCgpKSkKICAgICAgICAgcmV0dXJuOwogICAgIHJhcmVJbmhlcml0ZWREYXRhLmFjY2Vz
cygpLT5xdW90ZXMgPSBxOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N0eWxlL1N0eWxlUmFyZUluaGVyaXRlZERhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N0eWxlL1N0eWxlUmFyZUluaGVyaXRlZERhdGEuY3BwCmluZGV4IDk3ZGU0MmQzYzM1YTlh
ZDlhY2E0YjUyZjJlZTRlMjA2OGVkZWQyOGQuLmMyMWNjYWNjYjVhODllMWZmMDgzMjlmNWFmZTc5
OWYwZDJjNDMxMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9T
dHlsZVJhcmVJbmhlcml0ZWREYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3R5bGUvU3R5bGVSYXJlSW5oZXJpdGVkRGF0YS5jcHAKQEAgLTIzMyw3ICsyMzMsNyBAQCBib29s
IFN0eWxlUmFyZUluaGVyaXRlZERhdGE6Om9wZXJhdG9yPT0oY29uc3QgU3R5bGVSYXJlSW5oZXJp
dGVkRGF0YSYgbykgY29uc3QKICAgICAgICAgJiYgaHlwaGVuYXRpb25TdHJpbmcgPT0gby5oeXBo
ZW5hdGlvblN0cmluZwogICAgICAgICAmJiBsb2NhbGUgPT0gby5sb2NhbGUKICAgICAgICAgJiYg
dGV4dEVtcGhhc2lzQ3VzdG9tTWFyayA9PSBvLnRleHRFbXBoYXNpc0N1c3RvbU1hcmsKLSAgICAg
ICAgJiYgUXVvdGVzRGF0YTo6ZXF1YWwocXVvdGVzLmdldCgpLCBvLnF1b3Rlcy5nZXQoKSkKKyAg
ICAgICAgJiYgUXVvdGVzRGF0YTo6ZXF1YWxzKHF1b3Rlcy5nZXQoKSwgby5xdW90ZXMuZ2V0KCkp
CiAgICAgICAgICYmIG1fdGFiU2l6ZSA9PSBvLm1fdGFiU2l6ZQogICAgICAgICAmJiBtX2xpbmVH
cmlkID09IG8ubV9saW5lR3JpZAogI2lmIEVOQUJMRShDU1NfSU1BR0VfT1JJRU5UQVRJT04pCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155380</attachid>
            <date>2012-07-30 15:16:58 -0700</date>
            <delta_ts>2012-07-30 16:40:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-92448-20120730151643.patch</filename>
            <type>text/plain</type>
            <size>20724</size>
            <attacher name="Elliott Sprehn">esprehn</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzMTM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDdlZWU2YzRjNDZjZjJl
M2VkZWM2NzFmNjczZTM1NTU4ZGNjNzRhNC4uYmMyNThmZWY3ZTI2NWIxMTk3MWQyOGE1YWQ1YTlm
MWU4YjYxOTRhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDEyLTA3LTMwICBFbGxp
b3R0IFNwcmVobiAgPGVzcHJlaG5AZ21haWwuY29tPgorCisgICAgICAgIE1ha2UgUXVvdGVzRGF0
YSB1c2UgYSBWZWN0b3Igb2YgcGFpcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTkyNDQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgUXVvdGVzRGF0YTo6Y3JlYXRlIHJldHVybmVkIGFuIGFycmF5IG9mIG1l
bW9yeSB0aGF0IGNvbnRhaW5lZCBpbiBwbGFjZSBpbnN0YW50aWF0aW9ucworICAgICAgICBvZiBh
IFF1b3Rlc0RhdGEgYW5kIHRoZW4gU3RyaW5nIGluc3RhbmNlcy4gVGhpcyBjaGFuZ2VzIHRoZSBj
b2RlIHRvIHVzZSBhIFZlY3RvciBvZgorICAgICAgICBwYWlycyBtYWtpbmcgaXQgc2FmZXIgYW5k
IGVuc3VyaW5nIHRoYXQgcXVvdGVzIGFyZSBhbHdheXMgYmFsYW5jZWQuIFRoaXMgYWxzbyB1c2Vz
IGEKKyAgICAgICAgSGFzaE1hcCBkaXJlY3RseSBpbiB0aGUgUXVvdGVSZW5kZXJlciBpbnN0ZWFk
IG9mIGJ1aWxkaW5nIGl0IG9uIGZpcnN0IGFjY2VzcyByZWR1Y2luZworICAgICAgICB0aGUgYW1v
dW50IG9mIGNvZGUgbmVlZGVkIGZvciBwaWNraW5nIHF1b3RlcyBieSBsYW5ndWFnZS4KKworICAg
ICAgICBUZXN0OiBmYXN0L2Nzcy1nZW5lcmF0ZWQtY29udGVudC9jbG9zZS1xdW90ZS1uZWdhdGl2
ZS1kZXB0aC5odG1sCisKKyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QpOiBD
cmVhdGUgcGFpcnMgYW5kIHVzZSB0aGUgbmV3IFF1b3Rlc0RhdGEgQVBJLgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJRdW90ZS5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OnF1b3Rlc0RhdGFMYW5ndWFnZU1hcCk6IE5ldyBmdW5jdGlvbiB0aGF0IHJldHVybnMg
dGhlIEhhc2hNYXAgb2YgbGFuZ3VhZ2VzLgorICAgICAgICAoV2ViQ29yZTo6YmFzaWNRdW90ZXNE
YXRhKTogUmV0dXJucyB0aGUgc2ltcGxlIGZvcm0gb2YgcXVvdGVzLCAiIGFuZCAnLgorICAgICAg
ICAoV2ViQ29yZTo6ZGVmYXVsdFF1b3Rlcyk6IENoYW5nZWQgdG8gdXNlIHRoZSBuZXcgbWFwLgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUXVvdGU6OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclF1b3RlOjpvcmlnaW5hbFRleHQpOiBDaGFuZ2VkIHRvIHVzZSB0aGUg
bmV3IGdldE9wZW5RdW90ZSBhbmQgZ2V0Q2xvc2VRdW90ZSB3aGljaCBlbnN1cmUgYm91bmRzIGNo
ZWNrcy4KKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvUXVvdGVzRGF0YS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpRdW90ZXNEYXRhOjpjcmVhdGUpOiBOb3cgcmV0dXJucyBhIHBsYWluIGluc3Rh
bmNlIG9mIFF1b3Rlc0RhdGEgd2l0aG91dCB0aGUgaW4gcGxhY2UgYWxsb2NhdGlvbi4KKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6UXVvdGVzRGF0YTo6YWRkUGFpcik6IEFk
ZHMgYW4gc3RkOjpwYWlyIG9mIHN0cmluZ3MgZW5zdXJpbmcgcXVvdGVzIGFyZSBhbHdheXMgYmFs
YW5jZWQuCisgICAgICAgIChXZWJDb3JlOjpRdW90ZXNEYXRhOjpnZXRPcGVuUXVvdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UXVvdGVzRGF0YTo6Z2V0Q2xvc2VRdW90ZSk6CisgICAgICAgIChXZWJD
b3JlOjpRdW90ZXNEYXRhOjplcXVhbHMpOiBSZW5hbWVkIGVxdWFscyAoYWRkZWQgdGhlIHMpLgor
ICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9RdW90ZXNEYXRhLmg6CisgICAgICAgIChXZWJDb3Jl
OjpRdW90ZXNEYXRhOjpjcmVhdGUpOgorICAgICAgICAoUXVvdGVzRGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpRdW90ZXNEYXRhOjpRdW90ZXNEYXRhKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5
bGUvUmVuZGVyU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OnNldFF1
b3Rlcyk6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1N0eWxlUmFyZUluaGVyaXRlZERhdGEu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSYXJlSW5oZXJpdGVkRGF0YTo6b3BlcmF0b3I9
PSk6CisKIDIwMTItMDctMTkgIEJlbSBKb25lcy1CZXkgIDxiam9uZXNiZUBhZG9iZS5jb20+CiAK
ICAgICAgICAgW0NTUyBFeGNsdXNpb25zXSAtIENvZGUgY2xlYW51cDogbWFrZSBzaGFwZSBwYXJz
aW5nIHVzZSBpc0NvbW1hKCkgaW5zdGVhZCBvZiBtYW51YWwgY2hlY2tzCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVSZXNvbHZlci5jcHAKaW5kZXggNjQ1YjIwODI0ZjVjNWI3YTJhYWVmNDQ3NTU0ZWU4OGY5
NTIwYmIwOC4uODU5NDlmMzhkNjBjNmQzMDNiMzc1YjdlYWNhNjZkMmZhMDZlNWUwZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcApAQCAtMzQ0NywyMiArMzQ0NywyNCBAQCB2b2lk
IFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUq
IHZhbHVlKQogICAgICAgICB9CiAgICAgICAgIGlmICh2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkgewog
ICAgICAgICAgICAgQ1NTVmFsdWVMaXN0KiBsaXN0ID0gc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0
Kj4odmFsdWUpOwotICAgICAgICAgICAgUXVvdGVzRGF0YSogZGF0YSA9IFF1b3Rlc0RhdGE6OmNy
ZWF0ZShsaXN0LT5sZW5ndGgoKSk7Ci0gICAgICAgICAgICBpZiAoIWRhdGEpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuOyAvLyBPdXQgb2YgbWVtb3J5Ci0gICAgICAgICAgICBTdHJpbmcqIHF1b3Rl
cyA9IGRhdGEtPmRhdGEoKTsKLSAgICAgICAgICAgIGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3Ig
aSA9IGxpc3Q7IGkuaGFzTW9yZSgpOyBpLmFkdmFuY2UoKSkgewotICAgICAgICAgICAgICAgIENT
U1ZhbHVlKiBpdGVtID0gaS52YWx1ZSgpOwotICAgICAgICAgICAgICAgIEFTU0VSVChpdGVtLT5p
c1ByaW1pdGl2ZVZhbHVlKCkpOwotICAgICAgICAgICAgICAgIHByaW1pdGl2ZVZhbHVlID0gc3Rh
dGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihpdGVtKTsKLSAgICAgICAgICAgICAgICBBU1NF
UlQocHJpbWl0aXZlVmFsdWUtPmlzU3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIHF1b3Rlc1tp
LmluZGV4KCldID0gcHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCk7CisgICAgICAgICAg
ICBSZWZQdHI8UXVvdGVzRGF0YT4gcXVvdGVzID0gUXVvdGVzRGF0YTo6Y3JlYXRlKCk7CisgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpc3QtPmxlbmd0aCgpOyBpICs9IDIpIHsK
KyAgICAgICAgICAgICAgICBDU1NWYWx1ZSogZmlyc3QgPSBsaXN0LT5pdGVtV2l0aG91dEJvdW5k
c0NoZWNrKGkpOworICAgICAgICAgICAgICAgIC8vIGl0ZW0oKSByZXR1cm5zIG51bGwgaWYgb3V0
IG9mIGJvdW5kcyBzbyB0aGlzIGlzIHNhZmUuCisgICAgICAgICAgICAgICAgQ1NTVmFsdWUqIHNl
Y29uZCA9IGxpc3QtPml0ZW0oaSArIDEpOworICAgICAgICAgICAgICAgIGlmICghc2Vjb25kKQor
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoZmly
c3QtPmlzUHJpbWl0aXZlVmFsdWUoKSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKHNlY29uZC0+
aXNQcmltaXRpdmVWYWx1ZSgpKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgc3RhcnRRdW90ZSA9
IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oZmlyc3QpLT5nZXRTdHJpbmdWYWx1ZSgp
OworICAgICAgICAgICAgICAgIFN0cmluZyBlbmRRdW90ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlKj4oc2Vjb25kKS0+Z2V0U3RyaW5nVmFsdWUoKTsKKyAgICAgICAgICAgICAgICBx
dW90ZXMtPmFkZFBhaXIoc3RkOjptYWtlX3BhaXIoc3RhcnRRdW90ZSwgZW5kUXVvdGUpKTsKICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fc3R5bGUtPnNldFF1b3RlcyhhZG9wdFJlZihkYXRh
KSk7Ci0gICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUpIHsKLSAgICAgICAgICAgIEFT
U0VSVChwcmltaXRpdmVWYWx1ZS0+aXNJZGVudCgpKTsKKyAgICAgICAgICAgIG1fc3R5bGUtPnNl
dFF1b3RlcyhxdW90ZXMpOworICAgICAgICB9CisgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZSkg
ewogICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVl
Tm9uZSkKLSAgICAgICAgICAgICAgICBtX3N0eWxlLT5zZXRRdW90ZXMoYWRvcHRSZWYoUXVvdGVz
RGF0YTo6Y3JlYXRlKDApKSk7CisgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0UXVvdGVzKFF1
b3Rlc0RhdGE6OmNyZWF0ZSgpKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eUZvbnRGYW1pbHk6IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJRdW90ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
UXVvdGUuY3BwCmluZGV4IDc5ZGEwZDIwZDZjOTFiNTQ2NDc1NTYzNTkwZTdmNGNmZjMwZjE5N2Uu
LmNiYTM2ZDY1ZmU1NTEwYjU5YTNjYjIyZWMxODM1M2EzODA5Yjc5YjEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJRdW90ZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclF1b3RlLmNwcApAQCAtMjYsOSArMjYsNyBAQAogI2luY2x1ZGUg
IkhUTUxFbGVtZW50LmgiCiAjaW5jbHVkZSAiUXVvdGVzRGF0YS5oIgogI2luY2x1ZGUgIlJlbmRl
clN0eWxlLmgiCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21p
Y1N0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2RlZmluZSBVTktO
T1dOX0RFUFRIIC0xCiAKQEAgLTEzNiw4OSArMTM0LDI4IEBAIHNraXBOZXdEZXB0aENhbGM6CiAg
ICAgfSB3aGlsZSAoaGVhZCk7CiB9CiAKLSNkZWZpbmUgQVJSQVlfU0laRShDYXJyYXkpIChzaXpl
b2YoQ2FycmF5KSAvIHNpemVvZigqQ2FycmF5KSkKLSNkZWZpbmUgTEFOR1VBR0VfREFUQShuYW1l
LCBsYW5ndWFnZVNvdXJjZUFycmF5KSB7IG5hbWUsIGxhbmd1YWdlU291cmNlQXJyYXksIEFSUkFZ
X1NJWkUobGFuZ3VhZ2VTb3VyY2VBcnJheSkgfQogI2RlZmluZSBVKHgpICgoY29uc3QgVUNoYXIq
KUwjI3gpCiAKLXN0YXRpYyBjb25zdCBVQ2hhciogc2ltcGxlUXVvdGVzW10gPSB7VSgiXCIiKSwg
VSgiXCIiKSwgVSgiJyIpLCBVKCInIil9OwordHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZywg
Y29uc3QgUXVvdGVzRGF0YSosIENhc2VGb2xkaW5nSGFzaD4gUXVvdGVzTWFwOwogCi1zdGF0aWMg
Y29uc3QgVUNoYXIqIGVuZ2xpc2hRdW90ZXNbXSA9IHtVKCJceDIwMUMiKSwgVSgiXHgyMDFEIiks
IFUoIlx4MjAxOCIpLCBVKCJceDIwMTkiKX07Ci1zdGF0aWMgY29uc3QgVUNoYXIqIG5vcndlZ2lh
blF1b3Rlc1tdID0geyBVKCJceDAwQUIiKSwgVSgiXHgwMEJCIiksIFUoIlx4MjAzOSIpLCBVKCJc
eDIwM0EiKSB9Owotc3RhdGljIGNvbnN0IFVDaGFyKiByb21hbmlhblF1b3Rlc1tdID0geyBVKCJc
eDIwMUUiKSwgVSgiXHgyMDFEIil9Owotc3RhdGljIGNvbnN0IFVDaGFyKiBydXNzaWFuUXVvdGVz
W10gPSB7IFUoIlx4MDBBQiIpLCBVKCJceDAwQkIiKSwgVSgiXHgyMDFFIiksIFUoIlx4MjAxQyIp
IH07Ci0jdW5kZWYgVQotCi1zdHJ1Y3QgTGFuZ3VhZ2VEYXRhIHsKLSAgICBjb25zdCBjaGFyICpu
YW1lOwotICAgIGNvbnN0IFVDaGFyKiBjb25zdCogY29uc3QgYXJyYXk7Ci0gICAgY29uc3QgaW50
IGFycmF5U2l6ZTsKLSAgICBib29sIG9wZXJhdG9yPChjb25zdCBMYW5ndWFnZURhdGEmIGNvbXBh
cmVUbykgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBzdHJjbXAobmFtZSwgY29tcGFyZVRv
Lm5hbWUpOwotICAgIH0KLX07Ci0KLS8vIERhdGEgbWFzdCBiZSBhbHBoYWJldGljYWxseSBzb3J0
ZWQgYW5kIGluIGFsbCBsb3dlciBjYXNlIGZvciBmYXN0IGNvbXBhcmlzb24KLUxhbmd1YWdlRGF0
YSBsYW5ndWFnZURhdGFbXSA9IHsKLSAgICBMQU5HVUFHRV9EQVRBKCJlbiIsIGVuZ2xpc2hRdW90
ZXMpLAotICAgIExBTkdVQUdFX0RBVEEoIm5vIiwgbm9yd2VnaWFuUXVvdGVzKSwKLSAgICBMQU5H
VUFHRV9EQVRBKCJybyIsIHJvbWFuaWFuUXVvdGVzKSwKLSAgICBMQU5HVUFHRV9EQVRBKCJydSIs
IHJ1c3NpYW5RdW90ZXMpCi19OwotI3VuZGVmIExBTkdVQUdFX0RBVEEKLWNvbnN0IExhbmd1YWdl
RGF0YSogY29uc3QgbGFuZ3VhZ2VEYXRhRW5kID0gbGFuZ3VhZ2VEYXRhICsgQVJSQVlfU0laRShs
YW5ndWFnZURhdGEpOwotCi0jZGVmaW5lIGRlZmF1bHRMYW5ndWFnZVF1b3Rlc1NvdXJjZSBzaW1w
bGVRdW90ZXMKLSNkZWZpbmUgZGVmYXVsdExhbmd1YWdlUXVvdGVzQ291bnQgQVJSQVlfU0laRShk
ZWZhdWx0TGFuZ3VhZ2VRdW90ZXNTb3VyY2UpCi0KLXN0YXRpYyBRdW90ZXNEYXRhKiBkZWZhdWx0
TGFuZ3VhZ2VRdW90ZXNWYWx1ZSA9IDA7Ci1zdGF0aWMgY29uc3QgUXVvdGVzRGF0YSogZGVmYXVs
dExhbmd1YWdlUXVvdGVzKCkKLXsKLSAgICBpZiAoIWRlZmF1bHRMYW5ndWFnZVF1b3Rlc1ZhbHVl
KSB7Ci0gICAgICAgIGRlZmF1bHRMYW5ndWFnZVF1b3Rlc1ZhbHVlID0gUXVvdGVzRGF0YTo6Y3Jl
YXRlKGRlZmF1bHRMYW5ndWFnZVF1b3Rlc0NvdW50KTsKLSAgICAgICAgaWYgKCFkZWZhdWx0TGFu
Z3VhZ2VRdW90ZXNWYWx1ZSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBTdHJpbmcq
IGRhdGEgPSBkZWZhdWx0TGFuZ3VhZ2VRdW90ZXNWYWx1ZS0+ZGF0YSgpOwotICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGRlZmF1bHRMYW5ndWFnZVF1b3Rlc0NvdW50OyArK2kpCi0gICAg
ICAgICAgICBkYXRhW2ldID0gZGVmYXVsdExhbmd1YWdlUXVvdGVzU291cmNlW2ldOwotICAgIH0K
LSAgICByZXR1cm4gZGVmYXVsdExhbmd1YWdlUXVvdGVzVmFsdWU7Ci19Ci0jdW5kZWYgZGVmYXVs
dExhbmd1YWdlUXVvdGVzU291cmNlCi0jdW5kZWYgZGVmYXVsdExhbmd1YWdlUXVvdGVzQ291bnQK
LQotdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxBdG9taWNTdHJpbmdJbXBsPiwgUXVvdGVzRGF0YSog
PiBRdW90ZXNNYXA7Ci0KLXN0YXRpYyBRdW90ZXNNYXAmIHF1b3Rlc01hcCgpCitzdGF0aWMgY29u
c3QgUXVvdGVzTWFwJiBxdW90ZXNEYXRhTGFuZ3VhZ2VNYXAoKQogewogICAgIERFRklORV9TVEFU
SUNfTE9DQUwoUXVvdGVzTWFwLCBzdGF0aWNRdW90ZXNNYXAsICgpKTsKKyAgICBpZiAoc3RhdGlj
UXVvdGVzTWFwLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIHN0YXRpY1F1b3Rlc01hcDsKKyAgICAv
LyBGSVhNRTogRXhwYW5kIHRoaXMgdGFibGUgdG8gaW5jbHVkZSBhbGwgdGhlIGxhbmd1YWdlcyBp
biBodHRwczovL2J1Zy0zMjM0LWF0dGFjaG1lbnRzLndlYmtpdC5vcmcvYXR0YWNobWVudC5jZ2k/
aWQ9MjEzNQorICAgIHN0YXRpY1F1b3Rlc01hcC5zZXQoImVuIiwgUXVvdGVzRGF0YTo6Y3JlYXRl
KFUoIlx4MjAxQyIpLCBVKCJceDIwMUQiKSwgVSgiXHgyMDE4IiksIFUoIlx4MjAxOSIpKS5sZWFr
UmVmKCkpOworICAgIHN0YXRpY1F1b3Rlc01hcC5zZXQoIm5vIiwgUXVvdGVzRGF0YTo6Y3JlYXRl
KFUoIlx4MDBBQiIpLCBVKCJceDAwQkIiKSwgVSgiXHgyMDM5IiksIFUoIlx4MjAzQSIpKS5sZWFr
UmVmKCkpOworICAgIHN0YXRpY1F1b3Rlc01hcC5zZXQoInJvIiwgUXVvdGVzRGF0YTo6Y3JlYXRl
KFUoIlx4MjAxRSIpLCBVKCJceDIwMUQiKSkubGVha1JlZigpKTsKKyAgICBzdGF0aWNRdW90ZXNN
YXAuc2V0KCJydSIsIFF1b3Rlc0RhdGE6OmNyZWF0ZShVKCJceDAwQUIiKSwgVSgiXHgwMEJCIiks
IFUoIlx4MjAxRSIpLCBVKCJceDIwMUMiKSkubGVha1JlZigpKTsKICAgICByZXR1cm4gc3RhdGlj
UXVvdGVzTWFwOwogfQogCi1zdGF0aWMgY29uc3QgUXVvdGVzRGF0YSogcXVvdGVzRm9yTGFuZ3Vh
Z2UoQXRvbWljU3RyaW5nSW1wbCogbGFuZ3VhZ2UpCitzdGF0aWMgY29uc3QgUXVvdGVzRGF0YSog
YmFzaWNRdW90ZXNEYXRhKCkKIHsKLSAgICBRdW90ZXNEYXRhKiByZXR1cm5WYWx1ZTsKLSAgICBB
dG9taWNTdHJpbmcgbG93ZXIobGFuZ3VhZ2UtPmxvd2VyKCkpOwotICAgIHJldHVyblZhbHVlID0g
cXVvdGVzTWFwKCkuZ2V0KGxvd2VyLmltcGwoKSk7Ci0gICAgaWYgKHJldHVyblZhbHVlKQotICAg
ICAgICByZXR1cm4gcmV0dXJuVmFsdWU7Ci0gICAgQ1N0cmluZyBzKHN0YXRpY19jYXN0PGNvbnN0
IFN0cmluZyY+KGxvd2VyKS5hc2NpaSgpKTsKLSAgICBMYW5ndWFnZURhdGEgcmVxdWVzdCA9IHsg
cy5idWZmZXIoKS0+ZGF0YSgpLCAwLCAwIH07Ci0gICAgY29uc3QgTGFuZ3VhZ2VEYXRhKiBsb3dl
ckJvdW5kID0gc3RkOjpsb3dlcl9ib3VuZDxjb25zdCBMYW5ndWFnZURhdGEqLCBjb25zdCBMYW5n
dWFnZURhdGE+KGxhbmd1YWdlRGF0YSwgbGFuZ3VhZ2VEYXRhRW5kLCByZXF1ZXN0KTsKLSAgICBp
ZiAobG93ZXJCb3VuZCA9PSBsYW5ndWFnZURhdGFFbmQpCi0gICAgICAgIHJldHVybiBkZWZhdWx0
TGFuZ3VhZ2VRdW90ZXMoKTsKLSAgICBpZiAoc3RybmNtcChsb3dlckJvdW5kLT5uYW1lLCByZXF1
ZXN0Lm5hbWUsIHN0cmxlbihsb3dlckJvdW5kLT5uYW1lKSkpCi0gICAgICAgIHJldHVybiBkZWZh
dWx0TGFuZ3VhZ2VRdW90ZXMoKTsKLSAgICByZXR1cm5WYWx1ZSA9IFF1b3Rlc0RhdGE6OmNyZWF0
ZShsb3dlckJvdW5kLT5hcnJheVNpemUpOwotICAgIGlmICghcmV0dXJuVmFsdWUpCi0gICAgICAg
IHJldHVybiBkZWZhdWx0TGFuZ3VhZ2VRdW90ZXMoKTsKLSAgICBTdHJpbmcqIGRhdGEgPSByZXR1
cm5WYWx1ZS0+ZGF0YSgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbG93ZXJCb3VuZC0+YXJy
YXlTaXplOyArK2kpCi0gICAgICAgIGRhdGFbaV0gPSBsb3dlckJvdW5kLT5hcnJheVtpXTsKLSAg
ICBxdW90ZXNNYXAoKS5zZXQobG93ZXIuaW1wbCgpLCByZXR1cm5WYWx1ZSk7Ci0gICAgcmV0dXJu
IHJldHVyblZhbHVlOworICAgIHN0YXRpYyBjb25zdCBRdW90ZXNEYXRhKiBzdGF0aWNCYXNpY1F1
b3RlcyA9IFF1b3Rlc0RhdGE6OmNyZWF0ZShVKCJcIiIpLCBVKCJcIiIpLCBVKCInIiksIFUoIici
KSkubGVha1JlZigpOworICAgIHJldHVybiBzdGF0aWNCYXNpY1F1b3RlczsKIH0KLSN1bmRlZiBB
UlJBWV9TSVpFCiAKIHN0YXRpYyBjb25zdCBRdW90ZXNEYXRhKiBkZWZhdWx0UXVvdGVzKGNvbnN0
IFJlbmRlck9iamVjdCogb2JqZWN0KQogewpAQCAtMjMyLDE2ICsxNjksMjAgQEAgc3RhdGljIGNv
bnN0IFF1b3Rlc0RhdGEqIGRlZmF1bHRRdW90ZXMoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3Qp
CiAgICAgfSBlbHNlIGlmICghbm9kZS0+aXNFbGVtZW50Tm9kZSgpKSB7CiAgICAgICAgIGVsZW1l
bnQgPSBub2RlLT5wYXJlbnRFbGVtZW50KCk7CiAgICAgICAgIGlmICghZWxlbWVudCkKLSAgICAg
ICAgICAgIHJldHVybiBkZWZhdWx0TGFuZ3VhZ2VRdW90ZXMoKTsKKyAgICAgICAgICAgIHJldHVy
biBiYXNpY1F1b3Rlc0RhdGEoKTsKICAgICB9IGVsc2UKICAgICAgIGVsZW1lbnQgPSB0b0VsZW1l
bnQobm9kZSk7Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nKiBsYW5ndWFnZTsKLSAgICB3aGlsZSAo
KGxhbmd1YWdlID0gJmVsZW1lbnQtPmdldEF0dHJpYnV0ZShsYW5nU3RyaW5nKSkgJiYgbGFuZ3Vh
Z2UtPmlzTnVsbCgpKSB7CisgICAgQXRvbWljU3RyaW5nIGxhbmd1YWdlID0gZWxlbWVudC0+Z2V0
QXR0cmlidXRlKGxhbmdTdHJpbmcpOworICAgIHdoaWxlIChsYW5ndWFnZS5pc051bGwoKSkgewog
ICAgICAgICBlbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpOwogICAgICAgICBpZiAo
IWVsZW1lbnQpCi0gICAgICAgICAgICByZXR1cm4gZGVmYXVsdExhbmd1YWdlUXVvdGVzKCk7Cisg
ICAgICAgICAgICByZXR1cm4gYmFzaWNRdW90ZXNEYXRhKCk7CisgICAgICAgIGxhbmd1YWdlID0g
ZWxlbWVudC0+Z2V0QXR0cmlidXRlKGxhbmdTdHJpbmcpOwogICAgIH0KLSAgICByZXR1cm4gcXVv
dGVzRm9yTGFuZ3VhZ2UobGFuZ3VhZ2UtPmltcGwoKSk7CisgICAgY29uc3QgUXVvdGVzRGF0YSog
cXVvdGVzRGF0YSA9IHF1b3Rlc0RhdGFMYW5ndWFnZU1hcCgpLmdldChsYW5ndWFnZSk7CisgICAg
aWYgKCFxdW90ZXNEYXRhKQorICAgICAgICByZXR1cm4gYmFzaWNRdW90ZXNEYXRhKCk7CisgICAg
cmV0dXJuIHF1b3Rlc0RhdGE7CiB9CiAKIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gUmVuZGVyUXVv
dGU6Om9yaWdpbmFsVGV4dCgpIGNvbnN0CkBAIC0yNTIsMzAgKzE5MywxOSBAQCBQYXNzUmVmUHRy
PFN0cmluZ0ltcGw+IFJlbmRlclF1b3RlOjpvcmlnaW5hbFRleHQoKSBjb25zdAogICAgIGNvbnN0
IFF1b3Rlc0RhdGEqIHF1b3RlcyA9IHN0eWxlKCktPnF1b3RlcygpOwogICAgIGlmICghcXVvdGVz
KQogICAgICAgICBxdW90ZXMgPSBkZWZhdWx0UXVvdGVzKHRoaXMpOwotICAgIGlmICghcXVvdGVz
LT5sZW5ndGgpCi0gICAgICAgIHJldHVybiBlbXB0eUF0b20uaW1wbCgpOwotICAgIGludCBpbmRl
eCA9IG1fZGVwdGggKiAyOwogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBOT19PUEVO
X1FVT1RFOgogICAgIGNhc2UgTk9fQ0xPU0VfUVVPVEU6Ci0gICAgICAgIHJldHVybiBlbXB0eVN0
cmluZygpLmltcGwoKTsKKyAgICAgICAgcmV0dXJuIFN0cmluZ0ltcGw6OmVtcHR5KCk7CiAgICAg
Y2FzZSBDTE9TRV9RVU9URToKLSAgICAgICAgaWYgKGluZGV4KQotICAgICAgICAgICAgLS1pbmRl
eDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgKytpbmRleDsKLSAgICAgICAgYnJlYWs7Cisg
ICAgICAgIC8vIEZJWE1FOiBXaGVuIG1fZGVwdGggaXMgMCB3ZSBzaG91bGQgcmV0dXJuIGVtcHR5
IHN0cmluZy4KKyAgICAgICAgcmV0dXJuIHF1b3Rlcy0+Z2V0Q2xvc2VRdW90ZShzdGQ6Om1heCht
X2RlcHRoIC0gMSwgMCkpLmltcGwoKTsKICAgICBjYXNlIE9QRU5fUVVPVEU6Ci0gICAgICAgIGJy
ZWFrOworICAgICAgICByZXR1cm4gcXVvdGVzLT5nZXRPcGVuUXVvdGUobV9kZXB0aCkuaW1wbCgp
OwogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBy
ZXR1cm4gZW1wdHlBdG9tLmltcGwoKTsKKyAgICAgICAgcmV0dXJuIFN0cmluZ0ltcGw6OmVtcHR5
KCk7CiAgICAgfQotICAgIGlmIChpbmRleCA+PSBxdW90ZXMtPmxlbmd0aCkKLSAgICAgICAgaW5k
ZXggPSAocXVvdGVzLT5sZW5ndGgtMikgfCAoaW5kZXggJiAxKTsKLSAgICBpZiAoaW5kZXggPCAw
KQotICAgICAgICByZXR1cm4gZW1wdHlBdG9tLmltcGwoKTsKLSAgICByZXR1cm4gcXVvdGVzLT5k
YXRhKClbaW5kZXhdLmltcGwoKTsKIH0KIAogdm9pZCBSZW5kZXJRdW90ZTo6Y29tcHV0ZVByZWZl
cnJlZExvZ2ljYWxXaWR0aHMoZmxvYXQgbGVhZCkKQEAgLTMzMyw3ICsyNjMsNyBAQCB2b2lkIFJl
bmRlclF1b3RlOjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVu
ZGVyU3R5bGUqIG9sZFN0eQogewogICAgIGNvbnN0IFF1b3Rlc0RhdGEqIG5ld1F1b3RlcyA9IHN0
eWxlKCktPnF1b3RlcygpOwogICAgIGNvbnN0IFF1b3Rlc0RhdGEqIG9sZFF1b3RlcyA9IG9sZFN0
eWxlID8gb2xkU3R5bGUtPnF1b3RlcygpIDogMDsKLSAgICBpZiAoIVF1b3Rlc0RhdGE6OmVxdWFs
KG5ld1F1b3Rlcywgb2xkUXVvdGVzKSkKKyAgICBpZiAoIVF1b3Rlc0RhdGE6OmVxdWFscyhuZXdR
dW90ZXMsIG9sZFF1b3RlcykpCiAgICAgICAgIHNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1Jl
Y2FsYygpOwogICAgIFJlbmRlclRleHQ6OnN0eWxlRGlkQ2hhbmdlKGRpZmYsIG9sZFN0eWxlKTsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9RdW90ZXNEYXRh
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9RdW90ZXNEYXRhLmNwcAppbmRl
eCA0ZTgxZjc1NjdmNWNiYTgzNWU2MmI4MDcyYzYxYWVmYTlhZTliNjE5Li5jODU0YmQ1M2M1NGJh
ZTBkZmVkMWIwODMyNWZjYjMzNjA1ZmNhZTVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3R5bGUvUXVvdGVzRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N0eWxlL1F1b3Rlc0RhdGEuY3BwCkBAIC0xLDUgKzEsNiBAQAogLyoqCiAgKiBDb3B5cmln
aHQgKEMpIDIwMTEgTm9raWEgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC0yMywzOCArMjQsNTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1RdW90
ZXNEYXRhKiBRdW90ZXNEYXRhOjpjcmVhdGUoaW50IHN0cmluZ0NvdW50KQorUGFzc1JlZlB0cjxR
dW90ZXNEYXRhPiBRdW90ZXNEYXRhOjpjcmVhdGUoU3RyaW5nIG9wZW4sIFN0cmluZyBjbG9zZSkK
IHsKLSAgICBjaGFyKiB0bXAgPSBuZXcgY2hhcltzaXplb2YoUXVvdGVzRGF0YSkrc2l6ZW9mKFN0
cmluZykqc3RyaW5nQ291bnRdOwotICAgIGlmICghdG1wKQotICAgICAgICByZXR1cm4gMDsKLSAg
ICBRdW90ZXNEYXRhKiByZXQgPSBuZXcgKHRtcCkgUXVvdGVzRGF0YShzdHJpbmdDb3VudCk7Ci0g
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzdHJpbmdDb3VudDsgKytpKQotICAgICAgICBuZXcgKHRt
cCArc2l6ZW9mKFF1b3Rlc0RhdGEpICsgc2l6ZW9mKFN0cmluZykqaSkgU3RyaW5nKCk7Ci0gICAg
cmV0dXJuIHJldDsKKyAgICBSZWZQdHI8UXVvdGVzRGF0YT4gZGF0YSA9IFF1b3Rlc0RhdGE6OmNy
ZWF0ZSgpOworICAgIGRhdGEtPmFkZFBhaXIoc3RkOjptYWtlX3BhaXIob3BlbiwgY2xvc2UpKTsK
KyAgICByZXR1cm4gZGF0YTsKIH0KIAotYm9vbCBRdW90ZXNEYXRhOjplcXVhbChjb25zdCBRdW90
ZXNEYXRhKiBxdW90ZXNEYXRhMSwgY29uc3QgUXVvdGVzRGF0YSogcXVvdGVzRGF0YTIpCitQYXNz
UmVmUHRyPFF1b3Rlc0RhdGE+IFF1b3Rlc0RhdGE6OmNyZWF0ZShTdHJpbmcgb3BlbjEsIFN0cmlu
ZyBjbG9zZTEsIFN0cmluZyBvcGVuMiwgU3RyaW5nIGNsb3NlMikKIHsKLSAgICBpZiAocXVvdGVz
RGF0YTEgPT0gcXVvdGVzRGF0YTIpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmICghcXVv
dGVzRGF0YTEgfHwgIXF1b3Rlc0RhdGEyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYg
KHF1b3Rlc0RhdGExLT5sZW5ndGggIT0gcXVvdGVzRGF0YTItPmxlbmd0aCkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIGNvbnN0IFN0cmluZyogZGF0YTEgPSBxdW90ZXNEYXRhMS0+ZGF0YSgp
OwotICAgIGNvbnN0IFN0cmluZyogZGF0YTIgPSBxdW90ZXNEYXRhMi0+ZGF0YSgpOwotICAgIGZv
ciAoaW50IGkgPSBxdW90ZXNEYXRhMS0+bGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpCi0gICAgICAg
IGlmIChkYXRhMVtpXSAhPSBkYXRhMltpXSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBSZWZQdHI8UXVvdGVzRGF0YT4gZGF0YSA9IFF1b3Rlc0RhdGE6
OmNyZWF0ZSgpOworICAgIGRhdGEtPmFkZFBhaXIoc3RkOjptYWtlX3BhaXIob3BlbjEsIGNsb3Nl
MSkpOworICAgIGRhdGEtPmFkZFBhaXIoc3RkOjptYWtlX3BhaXIob3BlbjIsIGNsb3NlMikpOwor
ICAgIHJldHVybiBkYXRhOworfQorCit2b2lkIFF1b3Rlc0RhdGE6OmFkZFBhaXIoc3RkOjpwYWly
PFN0cmluZywgU3RyaW5nPiBxdW90ZVBhaXIpCit7CisgICAgbV9xdW90ZVBhaXJzLmFwcGVuZChx
dW90ZVBhaXIpOworfQorCitjb25zdCBTdHJpbmcgUXVvdGVzRGF0YTo6Z2V0T3BlblF1b3RlKGlu
dCBpbmRleCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaW5kZXggPj0gMCk7CisgICAgaWYgKCFtX3F1
b3RlUGFpcnMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKyAgICBpZiAo
KHNpemVfdClpbmRleCA+PSBtX3F1b3RlUGFpcnMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gbV9x
dW90ZVBhaXJzLmxhc3QoKS5maXJzdDsKKyAgICByZXR1cm4gbV9xdW90ZVBhaXJzLmF0KGluZGV4
KS5maXJzdDsKIH0KIAotUXVvdGVzRGF0YTo6flF1b3Rlc0RhdGEoKQorY29uc3QgU3RyaW5nIFF1
b3Rlc0RhdGE6OmdldENsb3NlUXVvdGUoaW50IGluZGV4KSBjb25zdAogewotICAgIFN0cmluZyog
cCA9IGRhdGEoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAg
ICBwW2ldLn5TdHJpbmcoKTsKKyAgICBBU1NFUlQoaW5kZXggPj0gMCk7CisgICAgaWYgKCFtX3F1
b3RlUGFpcnMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKyAgICBpZiAo
KHNpemVfdClpbmRleCA+PSBtX3F1b3RlUGFpcnMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gbV9x
dW90ZVBhaXJzLmxhc3QoKS5zZWNvbmQ7CisgICAgcmV0dXJuIG1fcXVvdGVQYWlycy5hdChpbmRl
eCkuc2Vjb25kOworfQorCitib29sIFF1b3Rlc0RhdGE6OmVxdWFscyhjb25zdCBRdW90ZXNEYXRh
KiBhLCBjb25zdCBRdW90ZXNEYXRhKiBiKQoreworICAgIGlmIChhID09IGIpCisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIGlmICghYSB8fCAhYikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IHJldHVybiBhLT5tX3F1b3RlUGFpcnMgPT0gYi0+bV9xdW90ZVBhaXJzOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5
bGUvUXVvdGVzRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1F1b3Rlc0Rh
dGEuaAppbmRleCBmODE3OTk2ZjA4YzUzNjkwZjM5ODM1ZWJkNDQ0NjE4YjkwNTJkYWM2Li41Njk5
ZjMyNDU1M2VkMGYzMjgzNTgyN2YyNTA1MTI1YWM3OTU3MjIyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUXVvdGVzRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdHlsZS9RdW90ZXNEYXRhLmgKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29w
eXJpZ2h0IChDKSAyMDExIE5va2lhIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCkBAIC0yMSwyNCArMjIsMzIgQEAKICNpZm5kZWYgUXVvdGVzRGF0YV9oCiAjZGVm
aW5lIFF1b3Rlc0RhdGFfaAogCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogY2xhc3MgUXVvdGVzRGF0YSA6IHB1YmxpYyBSZWZDb3VudGVkPFF1b3Rl
c0RhdGE+IHsKIHB1YmxpYzoKLSAgICB2aXJ0dWFsIH5RdW90ZXNEYXRhKCk7Ci0gICAgc3RhdGlj
IFF1b3Rlc0RhdGEqIGNyZWF0ZShpbnQgc3RyaW5nQ291bnQpOwotICAgIFN0cmluZyogZGF0YSgp
IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8U3RyaW5nKj4odGhpcysxKTsgfQotICAgIGNvbnN0
IFN0cmluZyogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgU3Ry
aW5nKj4odGhpcysxKTsgfQotICAgIGludCBsZW5ndGg7Ci0gICAgdm9pZCBvcGVyYXRvciBkZWxl
dGUodm9pZCogcCkgeyBkZWxldGVbXSBzdGF0aWNfY2FzdDxjaGFyKj4ocCk7IH0KLSAgICBzdGF0
aWMgYm9vbCBlcXVhbChjb25zdCBRdW90ZXNEYXRhKiwgY29uc3QgUXVvdGVzRGF0YSopOworICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFF1b3Rlc0RhdGE+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVm
KG5ldyBRdW90ZXNEYXRhKCkpOyB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8UXVvdGVzRGF0YT4g
Y3JlYXRlKGNvbnN0IFN0cmluZyBvcGVuLCBjb25zdCBTdHJpbmcgY2xvc2UpOworICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFF1b3Rlc0RhdGE+IGNyZWF0ZShjb25zdCBTdHJpbmcgb3BlbjEsIGNvbnN0
IFN0cmluZyBjbG9zZTEsIGNvbnN0IFN0cmluZyBvcGVuMiwgY29uc3QgU3RyaW5nIGNsb3NlMik7
CisKKyAgICAvLyBGSVhNRTogdGhpcyBzaG91bGQgYmUgYW4gb3BlcmF0b3I9PS4KKyAgICBzdGF0
aWMgYm9vbCBlcXVhbHMoY29uc3QgUXVvdGVzRGF0YSosIGNvbnN0IFF1b3Rlc0RhdGEqKTsKKwor
ICAgIHZvaWQgYWRkUGFpcihjb25zdCBzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+IHF1b3RlUGFp
cik7CisgICAgY29uc3QgU3RyaW5nIGdldE9wZW5RdW90ZShpbnQgaW5kZXgpIGNvbnN0OworICAg
IGNvbnN0IFN0cmluZyBnZXRDbG9zZVF1b3RlKGludCBpbmRleCkgY29uc3Q7CisKIHByaXZhdGU6
Ci0gICAgUXVvdGVzRGF0YShpbnQgc3RyaW5nQ291bnQpIDogbGVuZ3RoKHN0cmluZ0NvdW50KSB7
fQorICAgIFF1b3Rlc0RhdGEoKSB7IH0KKworICAgIFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBT
dHJpbmc+ID4gbV9xdW90ZVBhaXJzOwogfTsKIAotfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CiAjZW5kaWYgLy8gUXVvdGVzRGF0YV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL1JlbmRlclN0eWxlLmNwcAppbmRleCA4ZTVhOTBlOGNmZGRiMTU0MDg3NjFiOTI3MmNhZTg4
NjkxZThhNzk4Li5hYjAxM2FmYjk5NjNjYzY5NGFjYWJkMjBhNWRjOTMxOGM0NGU2ZTJhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAKQEAgLTcw
MCw3ICs3MDAsNyBAQCB2b2lkIFJlbmRlclN0eWxlOjpzZXRDdXJzb3JMaXN0KFBhc3NSZWZQdHI8
Q3Vyc29yTGlzdD4gb3RoZXIpCiAKIHZvaWQgUmVuZGVyU3R5bGU6OnNldFF1b3RlcyhQYXNzUmVm
UHRyPFF1b3Rlc0RhdGE+IHEpCiB7Ci0gICAgaWYgKFF1b3Rlc0RhdGE6OmVxdWFsKHJhcmVJbmhl
cml0ZWREYXRhLT5xdW90ZXMuZ2V0KCksIHEuZ2V0KCkpKQorICAgIGlmIChRdW90ZXNEYXRhOjpl
cXVhbHMocmFyZUluaGVyaXRlZERhdGEtPnF1b3Rlcy5nZXQoKSwgcS5nZXQoKSkpCiAgICAgICAg
IHJldHVybjsKICAgICByYXJlSW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS0+cXVvdGVzID0gcTsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVJbmhl
cml0ZWREYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVJhcmVJ
bmhlcml0ZWREYXRhLmNwcAppbmRleCA5N2RlNDJkM2MzNWE5YWQ5YWNhNGI1MmYyZWU0ZTIwNjhl
ZGVkMjhkLi5jMjFjY2FjY2I1YTg5ZTFmZjA4MzI5ZjVhZmU3OTlmMGQyYzQzMTFiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVSYXJlSW5oZXJpdGVkRGF0
YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlUmFyZUluaGVy
aXRlZERhdGEuY3BwCkBAIC0yMzMsNyArMjMzLDcgQEAgYm9vbCBTdHlsZVJhcmVJbmhlcml0ZWRE
YXRhOjpvcGVyYXRvcj09KGNvbnN0IFN0eWxlUmFyZUluaGVyaXRlZERhdGEmIG8pIGNvbnN0CiAg
ICAgICAgICYmIGh5cGhlbmF0aW9uU3RyaW5nID09IG8uaHlwaGVuYXRpb25TdHJpbmcKICAgICAg
ICAgJiYgbG9jYWxlID09IG8ubG9jYWxlCiAgICAgICAgICYmIHRleHRFbXBoYXNpc0N1c3RvbU1h
cmsgPT0gby50ZXh0RW1waGFzaXNDdXN0b21NYXJrCi0gICAgICAgICYmIFF1b3Rlc0RhdGE6OmVx
dWFsKHF1b3Rlcy5nZXQoKSwgby5xdW90ZXMuZ2V0KCkpCisgICAgICAgICYmIFF1b3Rlc0RhdGE6
OmVxdWFscyhxdW90ZXMuZ2V0KCksIG8ucXVvdGVzLmdldCgpKQogICAgICAgICAmJiBtX3RhYlNp
emUgPT0gby5tX3RhYlNpemUKICAgICAgICAgJiYgbV9saW5lR3JpZCA9PSBvLm1fbGluZUdyaWQK
ICNpZiBFTkFCTEUoQ1NTX0lNQUdFX09SSUVOVEFUSU9OKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDE2ZTIyYjBiYzA5MjYz
MDcyMWU5YzYxNzBhYjViY2YxMjEzYTNmZGUuLmVlOTIyY2Q2N2IyZDQwNzM3OGJkOGYxMjdlNTQ2
ZTRmMTA1ODYwZGIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxMi0wNy0zMCAgRWxsaW90dCBT
cHJlaG4gIDxlc3ByZWhuQGdtYWlsLmNvbT4KKworICAgICAgICBNYWtlIFF1b3Rlc0RhdGEgdXNl
IGEgVmVjdG9yIG9mIHBhaXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD05MjQ0OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRlc3QgdGhhdCB3aGVuIHF1b3RlIGRlcHRocyBnbyBuZWdhdGl2ZSB3ZSBkbyBu
b3Qgb3V0cHV0IHF1b3Rlcy4gVGhlIGV4cGVjdGVkIHJlc3VsdAorICAgICAgICBpcyB3cm9uZyBy
aWdodCBub3cgYmVjYXVzZSB3ZSBvdXRwdXQgcXVvdGVzIGluIHRoaXMgY2FzZSB3aGVuIHdlIHNo
b3VsZCBub3QuCisKKyAgICAgICAgKiBmYXN0L2Nzcy1nZW5lcmF0ZWQtY29udGVudC9jbG9zZS1x
dW90ZS1uZWdhdGl2ZS1kZXB0aC1leHBlY3RlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0
L2Nzcy1nZW5lcmF0ZWQtY29udGVudC9jbG9zZS1xdW90ZS1uZWdhdGl2ZS1kZXB0aC5odG1sOiBB
ZGRlZC4KKwogMjAxMi0wNy0xOSAgTHVjaWFubyBXb2xmICA8bHVjaWFuby53b2xmQG9wZW5ib3Nz
YS5vcmc+CiAKICAgICAgICAgW1F0XSBbUGFydCA0XSBwbGF0Zm9ybS9xdC9jc3MxIHRlc3RzIG5l
ZWRzIHVwZGF0ZSBhZnRlciByZWJhc2VsaW5lIGFuZCBuZXcgdGVzdGZvbnRzCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9mYXN0L2Nzcy1nZW5lcmF0ZWQtY29udGVudC9jbG9zZS1xdW90ZS1uZWdh
dGl2ZS1kZXB0aC1leHBlY3RlZC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3MtZ2VuZXJhdGVk
LWNvbnRlbnQvY2xvc2UtcXVvdGUtbmVnYXRpdmUtZGVwdGgtZXhwZWN0ZWQuaHRtbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5hZWM5YjFmZTBmNzQ1ZGRlZThkODQwZGI1NTY1ZmMwOGNlOTA2NTZkCi0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3MtZ2VuZXJhdGVkLWNvbnRlbnQvY2xvc2UtcXVv
dGUtbmVnYXRpdmUtZGVwdGgtZXhwZWN0ZWQuaHRtbApAQCAtMCwwICsxLDcgQEAKKworPCEtLQor
ICAgIFRoaXMgaXMgd3JvbmcsIHRoZXJlIHNob3VsZCBiZSBubyBxdW90ZXMgb3V0cHV0IHdoZW4g
dGhlIGRlcHRoIHdvdWxkIGdvCisgICAgbmVnYXRpdmUsIGJ1dCBSZW5kZXJRdW90ZSBpcyBjdXJy
ZW50bHkgYnJva2VuLgorLS0+CisKKzxxPjwvcT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvY3NzLWdlbmVyYXRlZC1jb250ZW50L2Nsb3NlLXF1b3RlLW5lZ2F0aXZlLWRlcHRoLmh0bWwg
Yi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy1nZW5lcmF0ZWQtY29udGVudC9jbG9zZS1xdW90ZS1uZWdh
dGl2ZS1kZXB0aC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFhNWYwMjNjY2ExYzhmNjk2NWRlZGY0MWU0ZDVj
MDdlODhjYzUyNzkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy1nZW5l
cmF0ZWQtY29udGVudC9jbG9zZS1xdW90ZS1uZWdhdGl2ZS1kZXB0aC5odG1sCkBAIC0wLDAgKzEs
MTAgQEAKKworPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KKyAgICBxOmJlZm9yZSB7CisgICAgICAg
IGNvbnRlbnQ6IGNsb3NlLXF1b3RlOworICAgIH0KKzwvc3R5bGU+CisKKzwhLS0gVGhlcmUgc2hv
dWxkIGJlIG5vIHF1b3Rlcy4gLS0+CisKKzxxPjwvcT4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155396</attachid>
            <date>2012-07-30 16:40:20 -0700</date>
            <delta_ts>2012-07-30 19:56:25 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-92448-20120730164004.patch</filename>
            <type>text/plain</type>
            <size>20836</size>
            <attacher name="Elliott Sprehn">esprehn</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzMTM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDdlZWU2YzRjNDZjZjJl
M2VkZWM2NzFmNjczZTM1NTU4ZGNjNzRhNC4uMTE3NTYyNDNhNzUxZjg3YTI3YjEzMTNhYWU2ZjY5
ZmYzYmVlM2Q1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDEyLTA3LTMwICBFbGxp
b3R0IFNwcmVobiAgPGVzcHJlaG5AZ21haWwuY29tPgorCisgICAgICAgIE1ha2UgUXVvdGVzRGF0
YSB1c2UgYSBWZWN0b3Igb2YgcGFpcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTkyNDQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgSnVsaWVuIENoYWZm
cmFpeC4KKworICAgICAgICBRdW90ZXNEYXRhOjpjcmVhdGUgcmV0dXJuZWQgYW4gYXJyYXkgb2Yg
bWVtb3J5IHRoYXQgY29udGFpbmVkIGluIHBsYWNlIGluc3RhbnRpYXRpb25zCisgICAgICAgIG9m
IGEgUXVvdGVzRGF0YSBhbmQgdGhlbiBTdHJpbmcgaW5zdGFuY2VzLiBUaGlzIGNoYW5nZXMgdGhl
IGNvZGUgdG8gdXNlIGEgVmVjdG9yIG9mCisgICAgICAgIHBhaXJzIG1ha2luZyBpdCBzYWZlciBh
bmQgZW5zdXJpbmcgdGhhdCBxdW90ZXMgYXJlIGFsd2F5cyBiYWxhbmNlZC4gVGhpcyBhbHNvIHVz
ZXMgYQorICAgICAgICBIYXNoTWFwIGRpcmVjdGx5IGluIHRoZSBRdW90ZVJlbmRlcmVyIGluc3Rl
YWQgb2YgYnVpbGRpbmcgaXQgb24gZmlyc3QgYWNjZXNzIHJlZHVjaW5nCisgICAgICAgIHRoZSBh
bW91bnQgb2YgY29kZSBuZWVkZWQgZm9yIHBpY2tpbmcgcXVvdGVzIGJ5IGxhbmd1YWdlLgorCisg
ICAgICAgIFRlc3Q6IGZhc3QvY3NzLWdlbmVyYXRlZC1jb250ZW50L2Nsb3NlLXF1b3RlLW5lZ2F0
aXZlLWRlcHRoLmh0bWwKKworICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdCk6
IENyZWF0ZSBwYWlycyBhbmQgdXNlIHRoZSBuZXcgUXVvdGVzRGF0YSBBUEkuCisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlclF1b3RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6cXVvdGVzRGF0YUxhbmd1YWdlTWFwKTogTmV3IGZ1bmN0aW9uIHRoYXQgcmV0dXJu
cyB0aGUgSGFzaE1hcCBvZiBsYW5ndWFnZXMuCisgICAgICAgIChXZWJDb3JlOjpiYXNpY1F1b3Rl
c0RhdGEpOiBSZXR1cm5zIHRoZSBzaW1wbGUgZm9ybSBvZiBxdW90ZXMsICIgYW5kICcuCisgICAg
ICAgIChXZWJDb3JlOjpkZWZhdWx0UXVvdGVzKTogQ2hhbmdlZCB0byB1c2UgdGhlIG5ldyBtYXAu
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJRdW90ZTo6c3R5bGVEaWRDaGFuZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyUXVvdGU6Om9yaWdpbmFsVGV4dCk6IENoYW5nZWQgdG8gdXNlIHRo
ZSBuZXcgZ2V0T3BlblF1b3RlIGFuZCBnZXRDbG9zZVF1b3RlIHdoaWNoIGVuc3VyZSBib3VuZHMg
Y2hlY2tzLgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9RdW90ZXNEYXRhLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlF1b3Rlc0RhdGE6OmNyZWF0ZSk6IE5vdyByZXR1cm5zIGEgcGxhaW4gaW5z
dGFuY2Ugb2YgUXVvdGVzRGF0YSB3aXRob3V0IHRoZSBpbiBwbGFjZSBhbGxvY2F0aW9uLgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpRdW90ZXNEYXRhOjphZGRQYWlyKTog
QWRkcyBhbiBzdGQ6OnBhaXIgb2Ygc3RyaW5ncyBlbnN1cmluZyBxdW90ZXMgYXJlIGFsd2F5cyBi
YWxhbmNlZC4KKyAgICAgICAgKFdlYkNvcmU6OlF1b3Rlc0RhdGE6OmdldE9wZW5RdW90ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpRdW90ZXNEYXRhOjpnZXRDbG9zZVF1b3RlKToKKyAgICAgICAgKFdl
YkNvcmU6OlF1b3Rlc0RhdGE6OmVxdWFscyk6IFJlbmFtZWQgZXF1YWxzIChhZGRlZCB0aGUgcyku
CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1F1b3Rlc0RhdGEuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlF1b3Rlc0RhdGE6OmNyZWF0ZSk6CisgICAgICAgIChRdW90ZXNEYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OlF1b3Rlc0RhdGE6OlF1b3Rlc0RhdGEpOgorICAgICAgICAqIHJlbmRlcmluZy9z
dHlsZS9SZW5kZXJTdHlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6c2V0
UXVvdGVzKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU3R5bGVSYXJlSW5oZXJpdGVkRGF0
YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJhcmVJbmhlcml0ZWREYXRhOjpvcGVyYXRv
cj09KToKKwogMjAxMi0wNy0xOSAgQmVtIEpvbmVzLUJleSAgPGJqb25lc2JlQGFkb2JlLmNvbT4K
IAogICAgICAgICBbQ1NTIEV4Y2x1c2lvbnNdIC0gQ29kZSBjbGVhbnVwOiBtYWtlIHNoYXBlIHBh
cnNpbmcgdXNlIGlzQ29tbWEoKSBpbnN0ZWFkIG9mIG1hbnVhbCBjaGVja3MKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZVJlc29sdmVyLmNwcAppbmRleCA2NDViMjA4MjRmNWM1YjdhMmFhZWY0NDc1NTRlZTg4
Zjk1MjBiYjA4Li44MTA2MGQyYmQ5ZjMzYzFkYWRkMjZiNDY3N2M4MDZmNzkwYzE4NTUyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCkBAIC0zNDQ3LDIyICszNDQ3LDI1IEBAIHZv
aWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1
ZSogdmFsdWUpCiAgICAgICAgIH0KICAgICAgICAgaWYgKHZhbHVlLT5pc1ZhbHVlTGlzdCgpKSB7
CiAgICAgICAgICAgICBDU1NWYWx1ZUxpc3QqIGxpc3QgPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxp
c3QqPih2YWx1ZSk7Ci0gICAgICAgICAgICBRdW90ZXNEYXRhKiBkYXRhID0gUXVvdGVzRGF0YTo6
Y3JlYXRlKGxpc3QtPmxlbmd0aCgpKTsKLSAgICAgICAgICAgIGlmICghZGF0YSkKLSAgICAgICAg
ICAgICAgICByZXR1cm47IC8vIE91dCBvZiBtZW1vcnkKLSAgICAgICAgICAgIFN0cmluZyogcXVv
dGVzID0gZGF0YS0+ZGF0YSgpOwotICAgICAgICAgICAgZm9yIChDU1NWYWx1ZUxpc3RJdGVyYXRv
ciBpID0gbGlzdDsgaS5oYXNNb3JlKCk7IGkuYWR2YW5jZSgpKSB7Ci0gICAgICAgICAgICAgICAg
Q1NTVmFsdWUqIGl0ZW0gPSBpLnZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGl0ZW0t
PmlzUHJpbWl0aXZlVmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgcHJpbWl0aXZlVmFsdWUgPSBz
dGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGl0ZW0pOwotICAgICAgICAgICAgICAgIEFT
U0VSVChwcmltaXRpdmVWYWx1ZS0+aXNTdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgcXVvdGVz
W2kuaW5kZXgoKV0gPSBwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKTsKKyAgICAgICAg
ICAgIFJlZlB0cjxRdW90ZXNEYXRhPiBxdW90ZXMgPSBRdW90ZXNEYXRhOjpjcmVhdGUoKTsKKyAg
ICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdC0+bGVuZ3RoKCk7IGkgKz0gMikg
eworICAgICAgICAgICAgICAgIENTU1ZhbHVlKiBmaXJzdCA9IGxpc3QtPml0ZW1XaXRob3V0Qm91
bmRzQ2hlY2soaSk7CisgICAgICAgICAgICAgICAgLy8gaXRlbSgpIHJldHVybnMgbnVsbCBpZiBv
dXQgb2YgYm91bmRzIHNvIHRoaXMgaXMgc2FmZS4KKyAgICAgICAgICAgICAgICBDU1NWYWx1ZSog
c2Vjb25kID0gbGlzdC0+aXRlbShpICsgMSk7CisgICAgICAgICAgICAgICAgaWYgKCFzZWNvbmQp
CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIEFTU0VSVChm
aXJzdC0+aXNQcmltaXRpdmVWYWx1ZSgpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoc2Vjb25k
LT5pc1ByaW1pdGl2ZVZhbHVlKCkpOworICAgICAgICAgICAgICAgIFN0cmluZyBzdGFydFF1b3Rl
ID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihmaXJzdCktPmdldFN0cmluZ1ZhbHVl
KCk7CisgICAgICAgICAgICAgICAgU3RyaW5nIGVuZFF1b3RlID0gc3RhdGljX2Nhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWUqPihzZWNvbmQpLT5nZXRTdHJpbmdWYWx1ZSgpOworICAgICAgICAgICAgICAg
IHF1b3Rlcy0+YWRkUGFpcihzdGQ6Om1ha2VfcGFpcihzdGFydFF1b3RlLCBlbmRRdW90ZSkpOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgbV9zdHlsZS0+c2V0UXVvdGVzKGFkb3B0UmVmKGRh
dGEpKTsKLSAgICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZSkgewotICAgICAgICAgICAg
QVNTRVJUKHByaW1pdGl2ZVZhbHVlLT5pc0lkZW50KCkpOworICAgICAgICAgICAgbV9zdHlsZS0+
c2V0UXVvdGVzKHF1b3Rlcyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKHByaW1pdGl2ZVZhbHVlKSB7CiAgICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUt
PmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb25lKQotICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNl
dFF1b3RlcyhhZG9wdFJlZihRdW90ZXNEYXRhOjpjcmVhdGUoMCkpKTsKKyAgICAgICAgICAgICAg
ICBtX3N0eWxlLT5zZXRRdW90ZXMoUXVvdGVzRGF0YTo6Y3JlYXRlKCkpOwogICAgICAgICB9CiAg
ICAgICAgIHJldHVybjsKICAgICBjYXNlIENTU1Byb3BlcnR5Rm9udEZhbWlseTogewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclF1b3RlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJRdW90ZS5jcHAKaW5kZXggNzlkYTBkMjBkNmM5MWI1NDY0
NzU1NjM1OTBlN2Y0Y2ZmMzBmMTk3ZS4uY2JhMzZkNjVmZTU1MTBiNTlhM2NiMjJlYzE4MzUzYTM4
MDliNzliMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclF1b3Rl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUXVvdGUuY3BwCkBAIC0y
Niw5ICsyNiw3IEBACiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKICNpbmNsdWRlICJRdW90ZXNE
YXRhLmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKLSNpbmNsdWRlIDxhbGdvcml0aG0+CiAj
aW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgogCiAjZGVmaW5lIFVOS05PV05fREVQVEggLTEKIApAQCAtMTM2LDg5ICsxMzQsMjgg
QEAgc2tpcE5ld0RlcHRoQ2FsYzoKICAgICB9IHdoaWxlIChoZWFkKTsKIH0KIAotI2RlZmluZSBB
UlJBWV9TSVpFKENhcnJheSkgKHNpemVvZihDYXJyYXkpIC8gc2l6ZW9mKCpDYXJyYXkpKQotI2Rl
ZmluZSBMQU5HVUFHRV9EQVRBKG5hbWUsIGxhbmd1YWdlU291cmNlQXJyYXkpIHsgbmFtZSwgbGFu
Z3VhZ2VTb3VyY2VBcnJheSwgQVJSQVlfU0laRShsYW5ndWFnZVNvdXJjZUFycmF5KSB9CiAjZGVm
aW5lIFUoeCkgKChjb25zdCBVQ2hhciopTCMjeCkKIAotc3RhdGljIGNvbnN0IFVDaGFyKiBzaW1w
bGVRdW90ZXNbXSA9IHtVKCJcIiIpLCBVKCJcIiIpLCBVKCInIiksIFUoIiciKX07Cit0eXBlZGVm
IEhhc2hNYXA8QXRvbWljU3RyaW5nLCBjb25zdCBRdW90ZXNEYXRhKiwgQ2FzZUZvbGRpbmdIYXNo
PiBRdW90ZXNNYXA7CiAKLXN0YXRpYyBjb25zdCBVQ2hhciogZW5nbGlzaFF1b3Rlc1tdID0ge1Uo
Ilx4MjAxQyIpLCBVKCJceDIwMUQiKSwgVSgiXHgyMDE4IiksIFUoIlx4MjAxOSIpfTsKLXN0YXRp
YyBjb25zdCBVQ2hhciogbm9yd2VnaWFuUXVvdGVzW10gPSB7IFUoIlx4MDBBQiIpLCBVKCJceDAw
QkIiKSwgVSgiXHgyMDM5IiksIFUoIlx4MjAzQSIpIH07Ci1zdGF0aWMgY29uc3QgVUNoYXIqIHJv
bWFuaWFuUXVvdGVzW10gPSB7IFUoIlx4MjAxRSIpLCBVKCJceDIwMUQiKX07Ci1zdGF0aWMgY29u
c3QgVUNoYXIqIHJ1c3NpYW5RdW90ZXNbXSA9IHsgVSgiXHgwMEFCIiksIFUoIlx4MDBCQiIpLCBV
KCJceDIwMUUiKSwgVSgiXHgyMDFDIikgfTsKLSN1bmRlZiBVCi0KLXN0cnVjdCBMYW5ndWFnZURh
dGEgewotICAgIGNvbnN0IGNoYXIgKm5hbWU7Ci0gICAgY29uc3QgVUNoYXIqIGNvbnN0KiBjb25z
dCBhcnJheTsKLSAgICBjb25zdCBpbnQgYXJyYXlTaXplOwotICAgIGJvb2wgb3BlcmF0b3I8KGNv
bnN0IExhbmd1YWdlRGF0YSYgY29tcGFyZVRvKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJu
IHN0cmNtcChuYW1lLCBjb21wYXJlVG8ubmFtZSk7Ci0gICAgfQotfTsKLQotLy8gRGF0YSBtYXN0
IGJlIGFscGhhYmV0aWNhbGx5IHNvcnRlZCBhbmQgaW4gYWxsIGxvd2VyIGNhc2UgZm9yIGZhc3Qg
Y29tcGFyaXNvbgotTGFuZ3VhZ2VEYXRhIGxhbmd1YWdlRGF0YVtdID0gewotICAgIExBTkdVQUdF
X0RBVEEoImVuIiwgZW5nbGlzaFF1b3RlcyksCi0gICAgTEFOR1VBR0VfREFUQSgibm8iLCBub3J3
ZWdpYW5RdW90ZXMpLAotICAgIExBTkdVQUdFX0RBVEEoInJvIiwgcm9tYW5pYW5RdW90ZXMpLAot
ICAgIExBTkdVQUdFX0RBVEEoInJ1IiwgcnVzc2lhblF1b3RlcykKLX07Ci0jdW5kZWYgTEFOR1VB
R0VfREFUQQotY29uc3QgTGFuZ3VhZ2VEYXRhKiBjb25zdCBsYW5ndWFnZURhdGFFbmQgPSBsYW5n
dWFnZURhdGEgKyBBUlJBWV9TSVpFKGxhbmd1YWdlRGF0YSk7Ci0KLSNkZWZpbmUgZGVmYXVsdExh
bmd1YWdlUXVvdGVzU291cmNlIHNpbXBsZVF1b3RlcwotI2RlZmluZSBkZWZhdWx0TGFuZ3VhZ2VR
dW90ZXNDb3VudCBBUlJBWV9TSVpFKGRlZmF1bHRMYW5ndWFnZVF1b3Rlc1NvdXJjZSkKLQotc3Rh
dGljIFF1b3Rlc0RhdGEqIGRlZmF1bHRMYW5ndWFnZVF1b3Rlc1ZhbHVlID0gMDsKLXN0YXRpYyBj
b25zdCBRdW90ZXNEYXRhKiBkZWZhdWx0TGFuZ3VhZ2VRdW90ZXMoKQotewotICAgIGlmICghZGVm
YXVsdExhbmd1YWdlUXVvdGVzVmFsdWUpIHsKLSAgICAgICAgZGVmYXVsdExhbmd1YWdlUXVvdGVz
VmFsdWUgPSBRdW90ZXNEYXRhOjpjcmVhdGUoZGVmYXVsdExhbmd1YWdlUXVvdGVzQ291bnQpOwot
ICAgICAgICBpZiAoIWRlZmF1bHRMYW5ndWFnZVF1b3Rlc1ZhbHVlKQotICAgICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgICAgIFN0cmluZyogZGF0YSA9IGRlZmF1bHRMYW5ndWFnZVF1b3Rlc1ZhbHVl
LT5kYXRhKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGVmYXVsdExhbmd1YWdl
UXVvdGVzQ291bnQ7ICsraSkKLSAgICAgICAgICAgIGRhdGFbaV0gPSBkZWZhdWx0TGFuZ3VhZ2VR
dW90ZXNTb3VyY2VbaV07Ci0gICAgfQotICAgIHJldHVybiBkZWZhdWx0TGFuZ3VhZ2VRdW90ZXNW
YWx1ZTsKLX0KLSN1bmRlZiBkZWZhdWx0TGFuZ3VhZ2VRdW90ZXNTb3VyY2UKLSN1bmRlZiBkZWZh
dWx0TGFuZ3VhZ2VRdW90ZXNDb3VudAotCi10eXBlZGVmIEhhc2hNYXA8UmVmUHRyPEF0b21pY1N0
cmluZ0ltcGw+LCBRdW90ZXNEYXRhKiA+IFF1b3Rlc01hcDsKLQotc3RhdGljIFF1b3Rlc01hcCYg
cXVvdGVzTWFwKCkKK3N0YXRpYyBjb25zdCBRdW90ZXNNYXAmIHF1b3Rlc0RhdGFMYW5ndWFnZU1h
cCgpCiB7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChRdW90ZXNNYXAsIHN0YXRpY1F1b3Rlc01h
cCwgKCkpOworICAgIGlmIChzdGF0aWNRdW90ZXNNYXAuc2l6ZSgpKQorICAgICAgICByZXR1cm4g
c3RhdGljUXVvdGVzTWFwOworICAgIC8vIEZJWE1FOiBFeHBhbmQgdGhpcyB0YWJsZSB0byBpbmNs
dWRlIGFsbCB0aGUgbGFuZ3VhZ2VzIGluIGh0dHBzOi8vYnVnLTMyMzQtYXR0YWNobWVudHMud2Vi
a2l0Lm9yZy9hdHRhY2htZW50LmNnaT9pZD0yMTM1CisgICAgc3RhdGljUXVvdGVzTWFwLnNldCgi
ZW4iLCBRdW90ZXNEYXRhOjpjcmVhdGUoVSgiXHgyMDFDIiksIFUoIlx4MjAxRCIpLCBVKCJceDIw
MTgiKSwgVSgiXHgyMDE5IikpLmxlYWtSZWYoKSk7CisgICAgc3RhdGljUXVvdGVzTWFwLnNldCgi
bm8iLCBRdW90ZXNEYXRhOjpjcmVhdGUoVSgiXHgwMEFCIiksIFUoIlx4MDBCQiIpLCBVKCJceDIw
MzkiKSwgVSgiXHgyMDNBIikpLmxlYWtSZWYoKSk7CisgICAgc3RhdGljUXVvdGVzTWFwLnNldCgi
cm8iLCBRdW90ZXNEYXRhOjpjcmVhdGUoVSgiXHgyMDFFIiksIFUoIlx4MjAxRCIpKS5sZWFrUmVm
KCkpOworICAgIHN0YXRpY1F1b3Rlc01hcC5zZXQoInJ1IiwgUXVvdGVzRGF0YTo6Y3JlYXRlKFUo
Ilx4MDBBQiIpLCBVKCJceDAwQkIiKSwgVSgiXHgyMDFFIiksIFUoIlx4MjAxQyIpKS5sZWFrUmVm
KCkpOwogICAgIHJldHVybiBzdGF0aWNRdW90ZXNNYXA7CiB9CiAKLXN0YXRpYyBjb25zdCBRdW90
ZXNEYXRhKiBxdW90ZXNGb3JMYW5ndWFnZShBdG9taWNTdHJpbmdJbXBsKiBsYW5ndWFnZSkKK3N0
YXRpYyBjb25zdCBRdW90ZXNEYXRhKiBiYXNpY1F1b3Rlc0RhdGEoKQogewotICAgIFF1b3Rlc0Rh
dGEqIHJldHVyblZhbHVlOwotICAgIEF0b21pY1N0cmluZyBsb3dlcihsYW5ndWFnZS0+bG93ZXIo
KSk7Ci0gICAgcmV0dXJuVmFsdWUgPSBxdW90ZXNNYXAoKS5nZXQobG93ZXIuaW1wbCgpKTsKLSAg
ICBpZiAocmV0dXJuVmFsdWUpCi0gICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKLSAgICBDU3Ry
aW5nIHMoc3RhdGljX2Nhc3Q8Y29uc3QgU3RyaW5nJj4obG93ZXIpLmFzY2lpKCkpOwotICAgIExh
bmd1YWdlRGF0YSByZXF1ZXN0ID0geyBzLmJ1ZmZlcigpLT5kYXRhKCksIDAsIDAgfTsKLSAgICBj
b25zdCBMYW5ndWFnZURhdGEqIGxvd2VyQm91bmQgPSBzdGQ6Omxvd2VyX2JvdW5kPGNvbnN0IExh
bmd1YWdlRGF0YSosIGNvbnN0IExhbmd1YWdlRGF0YT4obGFuZ3VhZ2VEYXRhLCBsYW5ndWFnZURh
dGFFbmQsIHJlcXVlc3QpOwotICAgIGlmIChsb3dlckJvdW5kID09IGxhbmd1YWdlRGF0YUVuZCkK
LSAgICAgICAgcmV0dXJuIGRlZmF1bHRMYW5ndWFnZVF1b3RlcygpOwotICAgIGlmIChzdHJuY21w
KGxvd2VyQm91bmQtPm5hbWUsIHJlcXVlc3QubmFtZSwgc3RybGVuKGxvd2VyQm91bmQtPm5hbWUp
KSkKLSAgICAgICAgcmV0dXJuIGRlZmF1bHRMYW5ndWFnZVF1b3RlcygpOwotICAgIHJldHVyblZh
bHVlID0gUXVvdGVzRGF0YTo6Y3JlYXRlKGxvd2VyQm91bmQtPmFycmF5U2l6ZSk7Ci0gICAgaWYg
KCFyZXR1cm5WYWx1ZSkKLSAgICAgICAgcmV0dXJuIGRlZmF1bHRMYW5ndWFnZVF1b3RlcygpOwot
ICAgIFN0cmluZyogZGF0YSA9IHJldHVyblZhbHVlLT5kYXRhKCk7Ci0gICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBsb3dlckJvdW5kLT5hcnJheVNpemU7ICsraSkKLSAgICAgICAgZGF0YVtpXSA9IGxv
d2VyQm91bmQtPmFycmF5W2ldOwotICAgIHF1b3Rlc01hcCgpLnNldChsb3dlci5pbXBsKCksIHJl
dHVyblZhbHVlKTsKLSAgICByZXR1cm4gcmV0dXJuVmFsdWU7CisgICAgc3RhdGljIGNvbnN0IFF1
b3Rlc0RhdGEqIHN0YXRpY0Jhc2ljUXVvdGVzID0gUXVvdGVzRGF0YTo6Y3JlYXRlKFUoIlwiIiks
IFUoIlwiIiksIFUoIiciKSwgVSgiJyIpKS5sZWFrUmVmKCk7CisgICAgcmV0dXJuIHN0YXRpY0Jh
c2ljUXVvdGVzOwogfQotI3VuZGVmIEFSUkFZX1NJWkUKIAogc3RhdGljIGNvbnN0IFF1b3Rlc0Rh
dGEqIGRlZmF1bHRRdW90ZXMoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCiB7CkBAIC0yMzIs
MTYgKzE2OSwyMCBAQCBzdGF0aWMgY29uc3QgUXVvdGVzRGF0YSogZGVmYXVsdFF1b3Rlcyhjb25z
dCBSZW5kZXJPYmplY3QqIG9iamVjdCkKICAgICB9IGVsc2UgaWYgKCFub2RlLT5pc0VsZW1lbnRO
b2RlKCkpIHsKICAgICAgICAgZWxlbWVudCA9IG5vZGUtPnBhcmVudEVsZW1lbnQoKTsKICAgICAg
ICAgaWYgKCFlbGVtZW50KQotICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRMYW5ndWFnZVF1b3Rl
cygpOworICAgICAgICAgICAgcmV0dXJuIGJhc2ljUXVvdGVzRGF0YSgpOwogICAgIH0gZWxzZQog
ICAgICAgZWxlbWVudCA9IHRvRWxlbWVudChub2RlKTsKLSAgICBjb25zdCBBdG9taWNTdHJpbmcq
IGxhbmd1YWdlOwotICAgIHdoaWxlICgobGFuZ3VhZ2UgPSAmZWxlbWVudC0+Z2V0QXR0cmlidXRl
KGxhbmdTdHJpbmcpKSAmJiBsYW5ndWFnZS0+aXNOdWxsKCkpIHsKKyAgICBBdG9taWNTdHJpbmcg
bGFuZ3VhZ2UgPSBlbGVtZW50LT5nZXRBdHRyaWJ1dGUobGFuZ1N0cmluZyk7CisgICAgd2hpbGUg
KGxhbmd1YWdlLmlzTnVsbCgpKSB7CiAgICAgICAgIGVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRF
bGVtZW50KCk7CiAgICAgICAgIGlmICghZWxlbWVudCkKLSAgICAgICAgICAgIHJldHVybiBkZWZh
dWx0TGFuZ3VhZ2VRdW90ZXMoKTsKKyAgICAgICAgICAgIHJldHVybiBiYXNpY1F1b3Rlc0RhdGEo
KTsKKyAgICAgICAgbGFuZ3VhZ2UgPSBlbGVtZW50LT5nZXRBdHRyaWJ1dGUobGFuZ1N0cmluZyk7
CiAgICAgfQotICAgIHJldHVybiBxdW90ZXNGb3JMYW5ndWFnZShsYW5ndWFnZS0+aW1wbCgpKTsK
KyAgICBjb25zdCBRdW90ZXNEYXRhKiBxdW90ZXNEYXRhID0gcXVvdGVzRGF0YUxhbmd1YWdlTWFw
KCkuZ2V0KGxhbmd1YWdlKTsKKyAgICBpZiAoIXF1b3Rlc0RhdGEpCisgICAgICAgIHJldHVybiBi
YXNpY1F1b3Rlc0RhdGEoKTsKKyAgICByZXR1cm4gcXVvdGVzRGF0YTsKIH0KIAogUGFzc1JlZlB0
cjxTdHJpbmdJbXBsPiBSZW5kZXJRdW90ZTo6b3JpZ2luYWxUZXh0KCkgY29uc3QKQEAgLTI1Miwz
MCArMTkzLDE5IEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gUmVuZGVyUXVvdGU6Om9yaWdpbmFs
VGV4dCgpIGNvbnN0CiAgICAgY29uc3QgUXVvdGVzRGF0YSogcXVvdGVzID0gc3R5bGUoKS0+cXVv
dGVzKCk7CiAgICAgaWYgKCFxdW90ZXMpCiAgICAgICAgIHF1b3RlcyA9IGRlZmF1bHRRdW90ZXMo
dGhpcyk7Ci0gICAgaWYgKCFxdW90ZXMtPmxlbmd0aCkKLSAgICAgICAgcmV0dXJuIGVtcHR5QXRv
bS5pbXBsKCk7Ci0gICAgaW50IGluZGV4ID0gbV9kZXB0aCAqIDI7CiAgICAgc3dpdGNoIChtX3R5
cGUpIHsKICAgICBjYXNlIE5PX09QRU5fUVVPVEU6CiAgICAgY2FzZSBOT19DTE9TRV9RVU9URToK
LSAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCkuaW1wbCgpOworICAgICAgICByZXR1cm4gU3Ry
aW5nSW1wbDo6ZW1wdHkoKTsKICAgICBjYXNlIENMT1NFX1FVT1RFOgotICAgICAgICBpZiAoaW5k
ZXgpCi0gICAgICAgICAgICAtLWluZGV4OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICArK2lu
ZGV4OwotICAgICAgICBicmVhazsKKyAgICAgICAgLy8gRklYTUU6IFdoZW4gbV9kZXB0aCBpcyAw
IHdlIHNob3VsZCByZXR1cm4gZW1wdHkgc3RyaW5nLgorICAgICAgICByZXR1cm4gcXVvdGVzLT5n
ZXRDbG9zZVF1b3RlKHN0ZDo6bWF4KG1fZGVwdGggLSAxLCAwKSkuaW1wbCgpOwogICAgIGNhc2Ug
T1BFTl9RVU9URToKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBxdW90ZXMtPmdldE9w
ZW5RdW90ZShtX2RlcHRoKS5pbXBsKCk7CiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBlbXB0eUF0b20uaW1wbCgpOworICAgICAgICBy
ZXR1cm4gU3RyaW5nSW1wbDo6ZW1wdHkoKTsKICAgICB9Ci0gICAgaWYgKGluZGV4ID49IHF1b3Rl
cy0+bGVuZ3RoKQotICAgICAgICBpbmRleCA9IChxdW90ZXMtPmxlbmd0aC0yKSB8IChpbmRleCAm
IDEpOwotICAgIGlmIChpbmRleCA8IDApCi0gICAgICAgIHJldHVybiBlbXB0eUF0b20uaW1wbCgp
OwotICAgIHJldHVybiBxdW90ZXMtPmRhdGEoKVtpbmRleF0uaW1wbCgpOwogfQogCiB2b2lkIFJl
bmRlclF1b3RlOjpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocyhmbG9hdCBsZWFkKQpAQCAt
MzMzLDcgKzI2Myw3IEBAIHZvaWQgUmVuZGVyUXVvdGU6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlm
ZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5CiB7CiAgICAgY29uc3QgUXVv
dGVzRGF0YSogbmV3UXVvdGVzID0gc3R5bGUoKS0+cXVvdGVzKCk7CiAgICAgY29uc3QgUXVvdGVz
RGF0YSogb2xkUXVvdGVzID0gb2xkU3R5bGUgPyBvbGRTdHlsZS0+cXVvdGVzKCkgOiAwOwotICAg
IGlmICghUXVvdGVzRGF0YTo6ZXF1YWwobmV3UXVvdGVzLCBvbGRRdW90ZXMpKQorICAgIGlmICgh
UXVvdGVzRGF0YTo6ZXF1YWxzKG5ld1F1b3Rlcywgb2xkUXVvdGVzKSkKICAgICAgICAgc2V0TmVl
ZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CiAgICAgUmVuZGVyVGV4dDo6c3R5bGVEaWRD
aGFuZ2UoZGlmZiwgb2xkU3R5bGUpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL1F1b3Rlc0RhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL1F1b3Rlc0RhdGEuY3BwCmluZGV4IDRlODFmNzU2N2Y1Y2JhODM1ZTYyYjgwNzJjNjFhZWZh
OWFlOWI2MTkuLmM4NTRiZDUzYzU0YmFlMGRmZWQxYjA4MzI1ZmNiMzM2MDVmY2FlNWUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9RdW90ZXNEYXRhLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUXVvdGVzRGF0YS5jcHAKQEAgLTEsNSAr
MSw2IEBACiAvKioKICAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIzLDM4ICsyNCw1MyBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLVF1b3Rlc0RhdGEqIFF1b3Rlc0RhdGE6OmNyZWF0ZShpbnQgc3Ry
aW5nQ291bnQpCitQYXNzUmVmUHRyPFF1b3Rlc0RhdGE+IFF1b3Rlc0RhdGE6OmNyZWF0ZShTdHJp
bmcgb3BlbiwgU3RyaW5nIGNsb3NlKQogewotICAgIGNoYXIqIHRtcCA9IG5ldyBjaGFyW3NpemVv
ZihRdW90ZXNEYXRhKStzaXplb2YoU3RyaW5nKSpzdHJpbmdDb3VudF07Ci0gICAgaWYgKCF0bXAp
Ci0gICAgICAgIHJldHVybiAwOwotICAgIFF1b3Rlc0RhdGEqIHJldCA9IG5ldyAodG1wKSBRdW90
ZXNEYXRhKHN0cmluZ0NvdW50KTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHN0cmluZ0NvdW50
OyArK2kpCi0gICAgICAgIG5ldyAodG1wICtzaXplb2YoUXVvdGVzRGF0YSkgKyBzaXplb2YoU3Ry
aW5nKSppKSBTdHJpbmcoKTsKLSAgICByZXR1cm4gcmV0OworICAgIFJlZlB0cjxRdW90ZXNEYXRh
PiBkYXRhID0gUXVvdGVzRGF0YTo6Y3JlYXRlKCk7CisgICAgZGF0YS0+YWRkUGFpcihzdGQ6Om1h
a2VfcGFpcihvcGVuLCBjbG9zZSkpOworICAgIHJldHVybiBkYXRhOwogfQogCi1ib29sIFF1b3Rl
c0RhdGE6OmVxdWFsKGNvbnN0IFF1b3Rlc0RhdGEqIHF1b3Rlc0RhdGExLCBjb25zdCBRdW90ZXNE
YXRhKiBxdW90ZXNEYXRhMikKK1Bhc3NSZWZQdHI8UXVvdGVzRGF0YT4gUXVvdGVzRGF0YTo6Y3Jl
YXRlKFN0cmluZyBvcGVuMSwgU3RyaW5nIGNsb3NlMSwgU3RyaW5nIG9wZW4yLCBTdHJpbmcgY2xv
c2UyKQogewotICAgIGlmIChxdW90ZXNEYXRhMSA9PSBxdW90ZXNEYXRhMikKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgaWYgKCFxdW90ZXNEYXRhMSB8fCAhcXVvdGVzRGF0YTIpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBpZiAocXVvdGVzRGF0YTEtPmxlbmd0aCAhPSBxdW90ZXNEYXRh
Mi0+bGVuZ3RoKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgY29uc3QgU3RyaW5nKiBkYXRh
MSA9IHF1b3Rlc0RhdGExLT5kYXRhKCk7Ci0gICAgY29uc3QgU3RyaW5nKiBkYXRhMiA9IHF1b3Rl
c0RhdGEyLT5kYXRhKCk7Ci0gICAgZm9yIChpbnQgaSA9IHF1b3Rlc0RhdGExLT5sZW5ndGggLSAx
OyBpID49IDA7IC0taSkKLSAgICAgICAgaWYgKGRhdGExW2ldICE9IGRhdGEyW2ldKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOworICAgIFJlZlB0cjxRdW90ZXNE
YXRhPiBkYXRhID0gUXVvdGVzRGF0YTo6Y3JlYXRlKCk7CisgICAgZGF0YS0+YWRkUGFpcihzdGQ6
Om1ha2VfcGFpcihvcGVuMSwgY2xvc2UxKSk7CisgICAgZGF0YS0+YWRkUGFpcihzdGQ6Om1ha2Vf
cGFpcihvcGVuMiwgY2xvc2UyKSk7CisgICAgcmV0dXJuIGRhdGE7Cit9CisKK3ZvaWQgUXVvdGVz
RGF0YTo6YWRkUGFpcihzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+IHF1b3RlUGFpcikKK3sKKyAg
ICBtX3F1b3RlUGFpcnMuYXBwZW5kKHF1b3RlUGFpcik7Cit9CisKK2NvbnN0IFN0cmluZyBRdW90
ZXNEYXRhOjpnZXRPcGVuUXVvdGUoaW50IGluZGV4KSBjb25zdAoreworICAgIEFTU0VSVChpbmRl
eCA+PSAwKTsKKyAgICBpZiAoIW1fcXVvdGVQYWlycy5zaXplKCkpCisgICAgICAgIHJldHVybiBl
bXB0eVN0cmluZygpOworICAgIGlmICgoc2l6ZV90KWluZGV4ID49IG1fcXVvdGVQYWlycy5zaXpl
KCkpCisgICAgICAgIHJldHVybiBtX3F1b3RlUGFpcnMubGFzdCgpLmZpcnN0OworICAgIHJldHVy
biBtX3F1b3RlUGFpcnMuYXQoaW5kZXgpLmZpcnN0OwogfQogCi1RdW90ZXNEYXRhOjp+UXVvdGVz
RGF0YSgpCitjb25zdCBTdHJpbmcgUXVvdGVzRGF0YTo6Z2V0Q2xvc2VRdW90ZShpbnQgaW5kZXgp
IGNvbnN0CiB7Ci0gICAgU3RyaW5nKiBwID0gZGF0YSgpOwotICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgbGVuZ3RoOyArK2kpCi0gICAgICAgIHBbaV0uflN0cmluZygpOworICAgIEFTU0VSVChpbmRl
eCA+PSAwKTsKKyAgICBpZiAoIW1fcXVvdGVQYWlycy5zaXplKCkpCisgICAgICAgIHJldHVybiBl
bXB0eVN0cmluZygpOworICAgIGlmICgoc2l6ZV90KWluZGV4ID49IG1fcXVvdGVQYWlycy5zaXpl
KCkpCisgICAgICAgIHJldHVybiBtX3F1b3RlUGFpcnMubGFzdCgpLnNlY29uZDsKKyAgICByZXR1
cm4gbV9xdW90ZVBhaXJzLmF0KGluZGV4KS5zZWNvbmQ7Cit9CisKK2Jvb2wgUXVvdGVzRGF0YTo6
ZXF1YWxzKGNvbnN0IFF1b3Rlc0RhdGEqIGEsIGNvbnN0IFF1b3Rlc0RhdGEqIGIpCit7CisgICAg
aWYgKGEgPT0gYikKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKCFhIHx8ICFiKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGEtPm1fcXVvdGVQYWlycyA9PSBiLT5tX3F1
b3RlUGFpcnM7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9RdW90ZXNEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3R5bGUvUXVvdGVzRGF0YS5oCmluZGV4IGY4MTc5OTZmMDhjNTM2OTBmMzk4MzVl
YmQ0NDQ2MThiOTA1MmRhYzYuLjU2OTlmMzI0NTUzZWQwZjMyODM1ODI3ZjI1MDUxMjVhYzc5NTcy
MjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9RdW90ZXNEYXRh
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1F1b3Rlc0RhdGEuaApAQCAt
MSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIxLDI0ICsyMiwzMiBAQAogI2lm
bmRlZiBRdW90ZXNEYXRhX2gKICNkZWZpbmUgUXVvdGVzRGF0YV9oCiAKKyNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBRdW90ZXNEYXRhIDog
cHVibGljIFJlZkNvdW50ZWQ8UXVvdGVzRGF0YT4gewogcHVibGljOgotICAgIHZpcnR1YWwgflF1
b3Rlc0RhdGEoKTsKLSAgICBzdGF0aWMgUXVvdGVzRGF0YSogY3JlYXRlKGludCBzdHJpbmdDb3Vu
dCk7Ci0gICAgU3RyaW5nKiBkYXRhKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxTdHJpbmcq
Pih0aGlzKzEpOyB9Ci0gICAgY29uc3QgU3RyaW5nKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDxjb25zdCBTdHJpbmcqPih0aGlzKzEpOyB9Ci0gICAgaW50IGxlbmd0aDsK
LSAgICB2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkKiBwKSB7IGRlbGV0ZVtdIHN0YXRpY19jYXN0
PGNoYXIqPihwKTsgfQotICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFF1b3Rlc0RhdGEqLCBj
b25zdCBRdW90ZXNEYXRhKik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8UXVvdGVzRGF0YT4gY3Jl
YXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFF1b3Rlc0RhdGEoKSk7IH0KKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxRdW90ZXNEYXRhPiBjcmVhdGUoY29uc3QgU3RyaW5nIG9wZW4sIGNvbnN0IFN0
cmluZyBjbG9zZSk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8UXVvdGVzRGF0YT4gY3JlYXRlKGNv
bnN0IFN0cmluZyBvcGVuMSwgY29uc3QgU3RyaW5nIGNsb3NlMSwgY29uc3QgU3RyaW5nIG9wZW4y
LCBjb25zdCBTdHJpbmcgY2xvc2UyKTsKKworICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCBiZSBh
biBvcGVyYXRvcj09LgorICAgIHN0YXRpYyBib29sIGVxdWFscyhjb25zdCBRdW90ZXNEYXRhKiwg
Y29uc3QgUXVvdGVzRGF0YSopOworCisgICAgdm9pZCBhZGRQYWlyKGNvbnN0IHN0ZDo6cGFpcjxT
dHJpbmcsIFN0cmluZz4gcXVvdGVQYWlyKTsKKyAgICBjb25zdCBTdHJpbmcgZ2V0T3BlblF1b3Rl
KGludCBpbmRleCkgY29uc3Q7CisgICAgY29uc3QgU3RyaW5nIGdldENsb3NlUXVvdGUoaW50IGlu
ZGV4KSBjb25zdDsKKwogcHJpdmF0ZToKLSAgICBRdW90ZXNEYXRhKGludCBzdHJpbmdDb3VudCkg
OiBsZW5ndGgoc3RyaW5nQ291bnQpIHt9CisgICAgUXVvdGVzRGF0YSgpIHsgfQorCisgICAgVmVj
dG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4gPiBtX3F1b3RlUGFpcnM7CiB9OwogCi19Cit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKICNlbmRpZiAvLyBRdW90ZXNEYXRhX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwCmluZGV4IDhlNWE5MGU4
Y2ZkZGIxNTQwODc2MWI5MjcyY2FlODg2OTFlOGE3OTguLmFiMDEzYWZiOTk2M2NjNjk0YWNhYmQy
MGE1ZGM5MzE4YzQ0ZTZlMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dHlsZS9SZW5kZXJTdHlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L1JlbmRlclN0eWxlLmNwcApAQCAtNzAwLDcgKzcwMCw3IEBAIHZvaWQgUmVuZGVyU3R5bGU6OnNl
dEN1cnNvckxpc3QoUGFzc1JlZlB0cjxDdXJzb3JMaXN0PiBvdGhlcikKIAogdm9pZCBSZW5kZXJT
dHlsZTo6c2V0UXVvdGVzKFBhc3NSZWZQdHI8UXVvdGVzRGF0YT4gcSkKIHsKLSAgICBpZiAoUXVv
dGVzRGF0YTo6ZXF1YWwocmFyZUluaGVyaXRlZERhdGEtPnF1b3Rlcy5nZXQoKSwgcS5nZXQoKSkp
CisgICAgaWYgKFF1b3Rlc0RhdGE6OmVxdWFscyhyYXJlSW5oZXJpdGVkRGF0YS0+cXVvdGVzLmdl
dCgpLCBxLmdldCgpKSkKICAgICAgICAgcmV0dXJuOwogICAgIHJhcmVJbmhlcml0ZWREYXRhLmFj
Y2VzcygpLT5xdW90ZXMgPSBxOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N0eWxlL1N0eWxlUmFyZUluaGVyaXRlZERhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL1N0eWxlUmFyZUluaGVyaXRlZERhdGEuY3BwCmluZGV4IDk3ZGU0MmQzYzM1
YTlhZDlhY2E0YjUyZjJlZTRlMjA2OGVkZWQyOGQuLmMyMWNjYWNjYjVhODllMWZmMDgzMjlmNWFm
ZTc5OWYwZDJjNDMxMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHls
ZS9TdHlsZVJhcmVJbmhlcml0ZWREYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3R5bGUvU3R5bGVSYXJlSW5oZXJpdGVkRGF0YS5jcHAKQEAgLTIzMyw3ICsyMzMsNyBAQCBi
b29sIFN0eWxlUmFyZUluaGVyaXRlZERhdGE6Om9wZXJhdG9yPT0oY29uc3QgU3R5bGVSYXJlSW5o
ZXJpdGVkRGF0YSYgbykgY29uc3QKICAgICAgICAgJiYgaHlwaGVuYXRpb25TdHJpbmcgPT0gby5o
eXBoZW5hdGlvblN0cmluZwogICAgICAgICAmJiBsb2NhbGUgPT0gby5sb2NhbGUKICAgICAgICAg
JiYgdGV4dEVtcGhhc2lzQ3VzdG9tTWFyayA9PSBvLnRleHRFbXBoYXNpc0N1c3RvbU1hcmsKLSAg
ICAgICAgJiYgUXVvdGVzRGF0YTo6ZXF1YWwocXVvdGVzLmdldCgpLCBvLnF1b3Rlcy5nZXQoKSkK
KyAgICAgICAgJiYgUXVvdGVzRGF0YTo6ZXF1YWxzKHF1b3Rlcy5nZXQoKSwgby5xdW90ZXMuZ2V0
KCkpCiAgICAgICAgICYmIG1fdGFiU2l6ZSA9PSBvLm1fdGFiU2l6ZQogICAgICAgICAmJiBtX2xp
bmVHcmlkID09IG8ubV9saW5lR3JpZAogI2lmIEVOQUJMRShDU1NfSU1BR0VfT1JJRU5UQVRJT04p
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKaW5kZXggMTZlMjJiMGJjMDkyNjMwNzIxZTljNjE3MGFiNWJjZjEyMTNhM2ZkZS4uY2ZlMWM5
OTk5ZDRhNmNhOTY5NzY0MjY5MTcxZTk1Y2Q2ODcxZjc4YSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBA
CisyMDEyLTA3LTMwICBFbGxpb3R0IFNwcmVobiAgPGVzcHJlaG5AZ21haWwuY29tPgorCisgICAg
ICAgIE1ha2UgUXVvdGVzRGF0YSB1c2UgYSBWZWN0b3Igb2YgcGFpcnMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkyNDQ4CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgSnVsaWVuIENoYWZmcmFpeC4KKworICAgICAgICBUZXN0IHRoYXQgd2hlbiBxdW90ZSBk
ZXB0aHMgZ28gbmVnYXRpdmUgd2UgZG8gbm90IG91dHB1dCBxdW90ZXMuIFRoZSBleHBlY3RlZCBy
ZXN1bHQKKyAgICAgICAgaXMgd3JvbmcgcmlnaHQgbm93IGJlY2F1c2Ugd2Ugb3V0cHV0IHF1b3Rl
cyBpbiB0aGlzIGNhc2Ugd2hlbiB3ZSBzaG91bGQgbm90LgorCisgICAgICAgICogZmFzdC9jc3Mt
Z2VuZXJhdGVkLWNvbnRlbnQvY2xvc2UtcXVvdGUtbmVnYXRpdmUtZGVwdGgtZXhwZWN0ZWQuaHRt
bDogQWRkZWQuCisgICAgICAgICogZmFzdC9jc3MtZ2VuZXJhdGVkLWNvbnRlbnQvY2xvc2UtcXVv
dGUtbmVnYXRpdmUtZGVwdGguaHRtbDogQWRkZWQuCisKIDIwMTItMDctMTkgIEx1Y2lhbm8gV29s
ZiAgPGx1Y2lhbm8ud29sZkBvcGVuYm9zc2Eub3JnPgogCiAgICAgICAgIFtRdF0gW1BhcnQgNF0g
cGxhdGZvcm0vcXQvY3NzMSB0ZXN0cyBuZWVkcyB1cGRhdGUgYWZ0ZXIgcmViYXNlbGluZSBhbmQg
bmV3IHRlc3Rmb250cwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jc3MtZ2VuZXJhdGVk
LWNvbnRlbnQvY2xvc2UtcXVvdGUtbmVnYXRpdmUtZGVwdGgtZXhwZWN0ZWQuaHRtbCBiL0xheW91
dFRlc3RzL2Zhc3QvY3NzLWdlbmVyYXRlZC1jb250ZW50L2Nsb3NlLXF1b3RlLW5lZ2F0aXZlLWRl
cHRoLWV4cGVjdGVkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODA4MGVmNzE2ZDE0YjhmYTZjMTAzYWU0NGYy
MDIwZGQyYjhiODczYQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY3NzLWdl
bmVyYXRlZC1jb250ZW50L2Nsb3NlLXF1b3RlLW5lZ2F0aXZlLWRlcHRoLWV4cGVjdGVkLmh0bWwK
QEAgLTAsMCArMSw1IEBACis8IURPQ1RZUEUgaHRtbD4KKworVGhlcmUgc2hvdWxkIGJlIG5vIHF1
b3RlcyB3aGVuIHRoZSBkZXB0aCBvZiB0aGUgcXVvdGUgaXMgbmVnYXRpdmUsIGJ1dCB0aGlzIGlz
IGN1cnJlbnRseSBicm9rZW4uIFNlZSBXS0J1ZyA5MjY5MC4KKworPHE+PC9xPgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvZmFzdC9jc3MtZ2VuZXJhdGVkLWNvbnRlbnQvY2xvc2UtcXVvdGUtbmVn
YXRpdmUtZGVwdGguaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvY3NzLWdlbmVyYXRlZC1jb250ZW50
L2Nsb3NlLXF1b3RlLW5lZ2F0aXZlLWRlcHRoLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjI3YjEwODI2YTBm
NGI0MjdjMjI0M2I5Zjk3YjQzYmY2NGMyNThlMQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2Zhc3QvY3NzLWdlbmVyYXRlZC1jb250ZW50L2Nsb3NlLXF1b3RlLW5lZ2F0aXZlLWRlcHRo
Lmh0bWwKQEAgLTAsMCArMSwxMSBAQAorPCFET0NUWVBFIGh0bWw+CisKKzxzdHlsZSB0eXBlPSJ0
ZXh0L2NzcyI+CisgICAgcTpiZWZvcmUgeworICAgICAgICBjb250ZW50OiBjbG9zZS1xdW90ZTsK
KyAgICB9Cis8L3N0eWxlPgorCitUaGVyZSBzaG91bGQgYmUgbm8gcXVvdGVzIHdoZW4gdGhlIGRl
cHRoIG9mIHRoZSBxdW90ZSBpcyBuZWdhdGl2ZSwgYnV0IHRoaXMgaXMgY3VycmVudGx5IGJyb2tl
bi4gU2VlIFdLQnVnIDkyNjkwLgorCis8cT48L3E+Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>