<?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>47748</bug_id>
          
          <creation_ts>2010-10-15 15:52:23 -0700</creation_ts>
          <short_desc>[chromium] WebPageSerializerImpl duplicates (poorly) a lot of code from MarkupAccumulator</short_desc>
          <delta_ts>2013-04-11 12:50:00 -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>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>47749</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>eric</cc>
    
    <cc>jcivelli</cc>
    
    <cc>rniwa</cc>
    
    <cc>schenney</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>294975</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-15 15:52:23 -0700</bug_when>
    <thetext>WebPageSerializerImpl duplicates (poorly) a lot of code from MarkupAccumulator</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294977</commentid>
    <comment_count>1</comment_count>
      <attachid>70910</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-15 15:53:08 -0700</bug_when>
    <thetext>Created attachment 70910
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294982</commentid>
    <comment_count>2</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-15 15:55:54 -0700</bug_when>
    <thetext>Whoever write this code didn&apos;t understand how the web works.  You can see them digging themselves deeper and deeper with each layer of complexity they added to try solve there problems.  This is something of a re-write.  The major design differences are as follows:

1) Start serializing from document instead of documentElement.  This avoids the need to manufacture a bunch of fake markup.

2) Always serialize in UTF-8.  This avoid a bunch of complexity about guess the charset wrong.  UTF-8 is the one true charset of the web.

3) Instead of trying to produce markup, use the editing code to do the heavy lifting.  This code should have no concept of a angle braket.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>295010</commentid>
    <comment_count>3</comment_count>
      <attachid>70918</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-15 16:47:17 -0700</bug_when>
    <thetext>Created attachment 70918
more code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>295044</commentid>
    <comment_count>4</comment_count>
      <attachid>70929</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-15 17:32:33 -0700</bug_when>
    <thetext>Created attachment 70929
mostly there</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>295105</commentid>
    <comment_count>5</comment_count>
      <attachid>70929</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-10-15 21:08:23 -0700</bug_when>
    <thetext>Comment on attachment 70929
mostly there

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

&gt; WebCore/editing/MarkupAccumulator.cpp:342
&gt; -        if (shouldResolveURLs() &amp;&amp; !element-&gt;document()-&gt;url().isLocalFile())
&gt; -            appendQuotedURLAttributeValue(out, element-&gt;document()-&gt;completeURL(attribute.value()).string());
&gt; +        if (shouldResolveURLs())
&gt; +            appendQuotedURLAttributeValue(out, resolveURL(element, attribute));
&gt;          else
&gt;              appendQuotedURLAttributeValue(out, attribute.value()); 

You may combine these lines and just do:
appendQuotedURLAttributeValue(out, shouldResolveURLs() ? resolveURL(element, attribute.value()) : attribute.value());

&gt; WebKit/chromium/src/WebPageSerializerImpl.cpp:153
&gt; +        if (element-&gt;hasTagName(metaTag) &amp;&amp; isCharsetDeclaration(element))
&gt; +            return

Now you can move this to serializeNodes!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>295706</commentid>
    <comment_count>6</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-18 12:51:42 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 70929 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=70929&amp;action=review
&gt; 
&gt; &gt; WebCore/editing/MarkupAccumulator.cpp:342
&gt; &gt; -        if (shouldResolveURLs() &amp;&amp; !element-&gt;document()-&gt;url().isLocalFile())
&gt; &gt; -            appendQuotedURLAttributeValue(out, element-&gt;document()-&gt;completeURL(attribute.value()).string());
&gt; &gt; +        if (shouldResolveURLs())
&gt; &gt; +            appendQuotedURLAttributeValue(out, resolveURL(element, attribute));
&gt; &gt;          else
&gt; &gt;              appendQuotedURLAttributeValue(out, attribute.value()); 
&gt; 
&gt; You may combine these lines and just do:
&gt; appendQuotedURLAttributeValue(out, shouldResolveURLs() ? resolveURL(element, attribute.value()) : attribute.value());

Done.

&gt; &gt; WebKit/chromium/src/WebPageSerializerImpl.cpp:153
&gt; &gt; +        if (element-&gt;hasTagName(metaTag) &amp;&amp; isCharsetDeclaration(element))
&gt; &gt; +            return
&gt; 
&gt; Now you can move this to serializeNodes!

Investigating now that I&apos;ve rebased to top-of-tree where serializeNodes exists.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>295711</commentid>
    <comment_count>7</comment_count>
      <attachid>70929</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-18 12:58:07 -0700</bug_when>
    <thetext>Comment on attachment 70929
mostly there

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

&gt;&gt;&gt; WebKit/chromium/src/WebPageSerializerImpl.cpp:153
&gt;&gt;&gt; +    virtual void appendElement(Vector&lt;UChar&gt;&amp; out, Element* element, Namespaces* namespaces)
&gt;&gt;&gt; +    {
&gt;&gt;&gt; +        if (element-&gt;hasTagName(metaTag) &amp;&amp; isCharsetDeclaration(element))
&gt;&gt;&gt; +            return
&gt;&gt; 
&gt;&gt; Now you can move this to serializeNodes!
&gt; 
&gt; Investigating now that I&apos;ve rebased to top-of-tree where serializeNodes exists.

So, that would work well for the &lt;meta&gt; case, but it doesn&apos;t work for the &lt;base&gt; case.  In the &lt;base&gt; case, we actually and to re-write the serialization of the tag instead of omitting it.  I&apos;m not sure its worth adding that complexity to the machine just for the &lt;meta&gt; case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>295718</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-10-18 13:28:49 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 70929 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=70929&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; WebKit/chromium/src/WebPageSerializerImpl.cpp:153
&gt; &gt;&gt;&gt; +    virtual void appendElement(Vector&lt;UChar&gt;&amp; out, Element* element, Namespaces* namespaces)
&gt; &gt;&gt;&gt; +    {
&gt; &gt;&gt;&gt; +        if (element-&gt;hasTagName(metaTag) &amp;&amp; isCharsetDeclaration(element))
&gt; &gt;&gt;&gt; +            return
&gt; &gt;&gt; 
&gt; &gt;&gt; Now you can move this to serializeNodes!
&gt; &gt; 
&gt; &gt; Investigating now that I&apos;ve rebased to top-of-tree where serializeNodes exists.
&gt; 
&gt; So, that would work well for the &lt;meta&gt; case, but it doesn&apos;t work for the &lt;base&gt; case.  In the &lt;base&gt; case, we actually and to re-write the serialization of the tag instead of omitting it.  I&apos;m not sure its worth adding that complexity to the machine just for the &lt;meta&gt; case.

I see. I guess it&apos;s to okay to add it to appendElement then.  But we might want to comment that this is fine only because meta &amp; base do not have end tags.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>295729</commentid>
    <comment_count>9</comment_count>
      <attachid>71078</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-18 14:00:50 -0700</bug_when>
    <thetext>Created attachment 71078
what-what the compile</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>295781</commentid>
    <comment_count>10</comment_count>
      <attachid>71090</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-18 15:05:34 -0700</bug_when>
    <thetext>Created attachment 71090
patch (seems to work)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>295784</commentid>
    <comment_count>11</comment_count>
      <attachid>71090</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-10-18 15:16:32 -0700</bug_when>
    <thetext>Comment on attachment 71090
patch (seems to work)

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

Great to see a lot of code being removed!

&gt; WebCore/editing/MarkupAccumulator.cpp:367
&gt; +        appendQuotedURLAttributeValue(out, shouldResolveURLs() ? resolveURL(element, attribute) : attribute.value().string());

Nice change.

&gt; WebKit/chromium/src/WebPageSerializerImpl.cpp:117
&gt; +    bool contains(const String&amp; url)

Can you make contains const?

&gt; WebKit/chromium/src/WebPageSerializerImpl.cpp:161
&gt; +        if (element-&gt;hasTagName(metaTag) &amp;&amp; isCharsetDeclaration(static_cast&lt;HTMLMetaElement*&gt;(element)))
&gt; +            return; // Notice that this works because &lt;meta&gt; is self-closing!

Why did you remove assertion here?

&gt; WebKit/chromium/src/WebPageSerializerImpl.cpp:207
&gt; +        String markOfTheWeb = WebPageSerializer::generateMarkOfTheWebDeclaration(url);

You can probably move generateMarkOfTheWebDeclaration into this class in the future.  In fact, everything in WebPageSerializer.cpp seems to belong to this file.  I don&apos;t even understand why we have interface + impl for this class given there&apos;s only one implementation of the interface.

&gt; WebKit/chromium/src/WebPageSerializerImpl.cpp:305
&gt; +    KURL mainURL = m_webFrame-&gt;frame()-&gt;document()-&gt;url();

I don&apos;t like the name mainURL but I guess we should change that later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>295787</commentid>
    <comment_count>12</comment_count>
      <attachid>71090</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-18 15:27:13 -0700</bug_when>
    <thetext>Comment on attachment 71090
patch (seems to work)

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

&gt;&gt; WebKit/chromium/src/WebPageSerializerImpl.cpp:117
&gt;&gt; +    bool contains(const String&amp; url)
&gt; 
&gt; Can you make contains const?

Sure.

&gt;&gt; WebKit/chromium/src/WebPageSerializerImpl.cpp:161
&gt;&gt; +            return; // Notice that this works because &lt;meta&gt; is self-closing!
&gt; 
&gt; Why did you remove assertion here?

Because it failed in testing.  I think I was calling the wrong function to tell if &lt;meta&gt; gets a close tag, or maybe I was calling it in the wrong way?

&gt;&gt; WebKit/chromium/src/WebPageSerializerImpl.cpp:207
&gt;&gt; +        String markOfTheWeb = WebPageSerializer::generateMarkOfTheWebDeclaration(url);
&gt; 
&gt; You can probably move generateMarkOfTheWebDeclaration into this class in the future.  In fact, everything in WebPageSerializer.cpp seems to belong to this file.  I don&apos;t even understand why we have interface + impl for this class given there&apos;s only one implementation of the interface.

The interface is part of the Chromium WebKit API.  I&apos;m not sure why we have an cpp file for it though.

&gt;&gt; WebKit/chromium/src/WebPageSerializerImpl.cpp:305
&gt;&gt; +    KURL mainURL = m_webFrame-&gt;frame()-&gt;document()-&gt;url();
&gt; 
&gt; I don&apos;t like the name mainURL but I guess we should change that later.

I&apos;m happy to change it now if you have a suggestion for a better name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>295793</commentid>
    <comment_count>13</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-10-18 15:33:13 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; &gt;&gt; WebKit/chromium/src/WebPageSerializerImpl.cpp:161
&gt; &gt;&gt; +            return; // Notice that this works because &lt;meta&gt; is self-closing!
&gt; &gt; 
&gt; &gt; Why did you remove assertion here?
&gt; 
&gt; Because it failed in testing.  I think I was calling the wrong function to tell if &lt;meta&gt; gets a close tag, or maybe I was calling it in the wrong way?

Try ASSERT(!node-&gt;hasChildNodes() &amp;&amp; elementCannotHaveEndTag(node));  shouldSelfClose checks a bunch of extra conditions.  Still, it&apos;s weird that we the assertion failed.  We might have some bug there...

&gt; The interface is part of the Chromium WebKit API.  I&apos;m not sure why we have an cpp file for it though.

I see.  I think we can still get rid of WebPageSerializer.cpp later.

&gt; &gt;&gt; WebKit/chromium/src/WebPageSerializerImpl.cpp:305
&gt; &gt;&gt; +    KURL mainURL = m_webFrame-&gt;frame()-&gt;document()-&gt;url();
&gt; &gt; 
&gt; &gt; I don&apos;t like the name mainURL but I guess we should change that later.
&gt; 
&gt; I&apos;m happy to change it now if you have a suggestion for a better name.

urlOfMainFrame or urlOfMainDocument?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>295800</commentid>
    <comment_count>14</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-18 15:42:50 -0700</bug_when>
    <thetext>&gt; Try ASSERT(!node-&gt;hasChildNodes() &amp;&amp; elementCannotHaveEndTag(node));  shouldSelfClose checks a bunch of extra conditions.  Still, it&apos;s weird that we the assertion failed.  We might have some bug there...

That assert will fail if someone inserts an element as a child of &lt;meta&gt; using the DOM.  Will we serialize an end tag in that case?

&gt; &gt; &gt;&gt; WebKit/chromium/src/WebPageSerializerImpl.cpp:305
&gt; &gt; &gt;&gt; +    KURL mainURL = m_webFrame-&gt;frame()-&gt;document()-&gt;url();
&gt; &gt; &gt; 
&gt; &gt; &gt; I don&apos;t like the name mainURL but I guess we should change that later.
&gt; &gt; 
&gt; &gt; I&apos;m happy to change it now if you have a suggestion for a better name.
&gt; 
&gt; urlOfMainFrame or urlOfMainDocument?

Ok.  I&apos;ll try something like that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>295801</commentid>
    <comment_count>15</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-10-18 15:43:45 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; &gt; urlOfMainFrame or urlOfMainDocument?
&gt; 
&gt; Ok.  I&apos;ll try something like that.

How about urlOfRootDocument?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301309</commentid>
    <comment_count>16</comment_count>
      <attachid>71090</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-10-28 13:45:54 -0700</bug_when>
    <thetext>Comment on attachment 71090
patch (seems to work)

LGTM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305909</commentid>
    <comment_count>17</comment_count>
      <attachid>71090</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-11-07 16:28:01 -0800</bug_when>
    <thetext>Comment on attachment 71090
patch (seems to work)

I&apos;m going to land this by hand.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324815</commentid>
    <comment_count>18</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-12-20 22:42:41 -0800</bug_when>
    <thetext>@abarth: ping?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>324872</commentid>
    <comment_count>19</comment_count>
      <attachid>71090</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-12-20 23:40:02 -0800</bug_when>
    <thetext>Comment on attachment 71090
patch (seems to work)

This patch turned out to be subtly wrong.  I&apos;ve lost context about how, sadly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552587</commentid>
    <comment_count>20</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-02-08 16:08:47 -0800</bug_when>
    <thetext>Sad to see this old patch die.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552589</commentid>
    <comment_count>21</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-02-08 16:10:00 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; Sad to see this old patch die.

I think abarth fixed this bug elsewhere. I see MarkupAccumulator used in WebPageSerializerImpl now.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70910</attachid>
            <date>2010-10-15 15:53:08 -0700</date>
            <delta_ts>2010-10-15 16:47:13 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>bug-47748-20101015155307.patch</filename>
            <type>text/plain</type>
            <size>13454</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCmluZGV4IGRmYjgzMzgwOGMyMmJmNWMyYmUyMjMzOTM1NjQxODExMjA3Zjg2MmMu
LmY4MTc5ODA3YjdkZGFkZjI5MDgxOTc5YmYxYTI5ODZhNjMzMzI3MzYgMTAwNjQ0Ci0tLSBhL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDIwIEBACisyMDEwLTEwLTE1ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2Vi
UGFnZVNlcmlhbGl6ZXJJbXBsIGR1cGxpY2F0ZXMgKHBvb3JseSkgYSBsb3Qgb2YgY29kZSBmcm9t
IE1hcmt1cEFjY3VtdWxhdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD00Nzc0OAorCisgICAgICAgICogc3JjL1dlYlBhZ2VTZXJpYWxpemVySW1wbC5j
cHA6CisgICAgICAgIChXZWJLaXQ6OlhYWE1hcmt1cEFjY3VtdWxhdG9yOjpYWFhNYXJrdXBBY2N1
bXVsYXRvcik6CisgICAgICAgIChXZWJLaXQ6OlhYWE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRF
bGVtZW50KToKKyAgICAgICAgKFdlYktpdDo6WFhYTWFya3VwQWNjdW11bGF0b3I6OmlzQ2hhcnNl
dERlY2xhcmF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6WFhYTWFya3VwQWNjdW11bGF0b3I6OmFw
cGVuZEJhc2VFbGVtZW50KToKKyAgICAgICAgKFdlYktpdDo6WFhYTWFya3VwQWNjdW11bGF0b3I6
OmFwcGVuZE1hcmtPZlRoZVdlYik6CisgICAgICAgIChXZWJLaXQ6OlhYWE1hcmt1cEFjY3VtdWxh
dG9yOjphcHBlbmRDaGFyc2V0RGVjbGFyYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
U2VyaWFsaXplckltcGw6Om9wZW5UYWdUb1N0cmluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2VTZXJpYWxpemVySW1wbDo6ZW5kVGFnVG9TdHJpbmcpOgorCiAyMDEwLTEwLTE1ICBTaGVyaWZm
IEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2Vk
LCByb2xsaW5nIG91dCByNjk4MDkuCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlBhZ2VTZXJpYWxpemVySW1wbC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VTZXJp
YWxpemVySW1wbC5jcHAKaW5kZXggMGQ4NWQ3ODY5MTQ3ZTQ0M2U5MTQ2MDI1OGY5NTEzYWUyM2E3
YzE4Yy4uYzFlZjFmMzQ5NDQzMDEzNWVlMTRjYzMzYmVjOTgzMzBhMjNiMWMyNiAxMDA2NDQKLS0t
IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQYWdlU2VyaWFsaXplckltcGwuY3BwCisrKyBiL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViUGFnZVNlcmlhbGl6ZXJJbXBsLmNwcApAQCAtMTAwLDYgKzEw
MCw4NyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAK
K3VzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CisKK2NsYXNzIFhYWE1hcmt1cEFjY3VtdWxhdG9y
IDogcHVibGljIE1hcmt1cEFjY3VtdWxhdG9yIHsKK3B1YmxpYzoKKyAgICBYWFhNYXJrdXBBY2N1
bXVsYXRvcigpCisgICAgICAgIDogTWFya3VwQWNjdW11bGF0b3IoMCwgQWJzb2x1dGVVUkxzKQor
ICAgICAgICAsIG1fdXJsKHVybCkKKyAgICAgICAgLCBtX2hhdmVBZGRlZE1hcmtPZlRoZVdlYihm
YWxzZSkKKyAgICAgICAgLCBtX2hhdmVBZGRlZENoYXJzZXREZWNsYXJhdGlvbihmYWxzZSkKKyAg
ICB7CisgICAgfQorCitwcml2YXRlOgorICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRFbGVtZW50KFZl
Y3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCogZWxlbWVudCwgTmFtZXNwYWNlcyogbmFtZXNwYWNl
cykKKyAgICB7CisgICAgICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKG1ldGFUYWcpICYmIGlz
Q2hhcnNldERlY2xhcmF0aW9uKGVsZW1lbnQpKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAg
ICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoYmFzZVRhZykpIHsKKyAgICAgICAgICAgIGFwcGVu
ZEJhc2VFbGVtZW50KG91dCwgc3RhdGljX2Nhc3Q8SFRNTEJhc2VFbGVtZW50Kj4oZWxlbWVudCkp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGVsZW1lbnQt
Pmhhc1RhZ05hbWUoaHRtbFRhZyAmJiAhbV9oYXZlQWRkZWRNYXJrT2ZUaGVXZWIpKQorICAgICAg
ICAgICAgYXBwZW5kTWFya09mVGhlV2ViKG91dCk7CisKKyAgICAgICAgTWFya3VwQWNjdW11bGF0
b3I6OmFwcGVuZEVsZW1lbnQob3V0LCBlbGVtZW50LCBuYW1lc3BhY2VzKTsKKworICAgICAgICBp
ZiAoZWxlbWVudC0+aGFzVGFnTmFtZShoZWFkVGFnKSAmJiAhbV9oYXZlQWRkZWRDaGFyc2V0RGVj
bGFyYXRpb24pCisgICAgICAgICAgICBhcHBlbmRDaGFyc2V0RGVjbGFyYXRpb24ob3V0LCBzdGF0
aWNfY2FzdDxIVE1MSGVhZEVsZW1lbnQqPihlbGVtZW50KSwgbmFtZXNwYWNlcyk7CisgICAgfQor
CisgICAgYm9vbCBpc0NoYXJzZXREZWNsYXJhdGlvbihFbGVtZW50KiBlbGVtZW50KQorICAgIHsK
KyAgICAgICAgQVNTRVJUKGVsZW1lbnQtPmhhc1RhZ05hbWUobWV0YVRhZykpOworICAgICAgICBT
dHJpbmcgZXF1aXYgPSBtZXRhLT5odHRwRXF1aXYoKTsKKyAgICAgICAgU3RyaW5nIGNvbnRlbnQg
PSBtZXRhLT5jb250ZW50KCk7CisgICAgICAgIC8vIEZJWE1FOiBXaGF0IGFib3V0IDxtZXRhIGNo
YXJzZXQ9Ii4uLiI+ID8KKyAgICAgICAgcmV0dXJuIGVxdWFsSWdub3JpbmdDYXNlKGVxdWl2LCAi
Y29udGVudC10eXBlIikgJiYgY29udGVudC5sZW5ndGgoKSAmJiBjb250ZW50LmNvbnRhaW5zKCJj
aGFyc2V0IiwgZmFsc2UpOworICAgIH0KKworICAgIHZvaWQgYXBwZW5kQmFzZUVsZW1lbnQoVmVj
dG9yPFVDaGFyPiYgb3V0LCBIVE1MQmFzZUVsZW1lbnQqIGJhc2UsIE5hbWVzcGFjZXMqIG5hbWVz
cGFjZXMpCisgICAgeworICAgICAgICAvLyBXZSB3YW50IHRvIHBpY2sgdXAgdGhlIHRhcmdldCBh
dHRyaWJ1dGUgZnJvbSB0aGUgYmFzZSBlbGVtZW50LCBidXQKKyAgICAgICAgLy8gd2UgZG9uJ3Qg
d2FudCB0byBwaWNrIHVwIHRoZSBocmVmIGF0dHJpYnV0ZS4KKyAgICAgICAgLy8gRklYTUU6IEN1
cnJlbnRseSB3ZSdyZSB3aGl0ZWxpc3RpbmcgdGhlIHRhcmdldCBhdHRyaWJ1dGUsIGJ1dAorICAg
ICAgICAvLyAgICAgICAgcGVyaGFwcyB3ZSBzaG91bGQgYmxhY2tsaXN0IHRoZSBocmVmIGF0dHJp
YnV0ZT8KKyAgICAgICAgUmVmUHRyPEhUTUxCYXNlRWxlbWVudD4gZmFrZUJhc2UgPSBIVE1MQmFz
ZUVsZW1lbnQ6OmNyZWF0ZShiYXNlVGFnLCBiYXNlLT5kb2N1bWVudCgpKTsKKyAgICAgICAgZmFr
ZUJhc2UtPnNldEF0dHJpYnV0ZSh0YXJnZXRBdHRyLCBiYXNlLT5nZXRBdHRyaWJ1dGUodGFyZ2V0
QXR0cikpOworICAgICAgICBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRWxlbWVudChvdXQsIGZh
a2VCYXNlLCBuYW1lc3BhY2VzKTsKKyAgICB9CisKKyAgICB2b2lkIGFwcGVuZE1hcmtPZlRoZVdl
YihWZWN0b3I8VUNoYXI+JiBvdXQpCisgICAgeworICAgICAgICBBU1NFUlQoIW1faGF2ZUFkZGVk
TWFya09mVGhlV2ViKTsKKyAgICAgICAgbV9oYXZlQWRkZWRNYXJrT2ZUaGVXZWIgPSB0cnVlOwor
ICAgICAgICAvLyBTZWUgaHR0cDovL21zZG4yLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9t
czUzNzYyOChWUy44NSkuYXNweC4KKyAgICAgICAgb3V0LmFwcGVuZChXZWJQYWdlU2VyaWFsaXpl
cjo6Z2VuZXJhdGVNYXJrT2ZUaGVXZWJEZWNsYXJhdGlvbihtX3VybCkpOworICAgIH0KKworICAg
IHZvaWQgYXBwZW5kQ2hhcnNldERlY2xhcmF0aW9uKFZlY3RvcjxVQ2hhcj4mIG91dCwgSFRNTEhl
YWRFbGVtZW50KiBoZWFkLCBOYW1lc3BhY2VzKiBuYW1lc3BhY2VzKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKCFtX2hhdmVBZGRlZENoYXJzZXREZWNsYXJhdGlvbik7CisgICAgICAgIG1faGF2ZUFk
ZGVkQ2hhcnNldERlY2xhcmF0aW9uID0gdHJ1ZTsKKyAgICAgICAgLy8gQ2hlY2sgbWV0YSBlbGVt
ZW50LiBXZWJLaXQgb25seSBwcmUtcGFyc2UgdGhlIGZpcnN0IDUxMiBieXRlcworICAgICAgICAv
LyBvZiB0aGUgZG9jdW1lbnQuIElmIHRoZSB3aG9sZSA8SEVBRD4gaXMgbGFyZ2VyIGFuZCBtZXRh
IGlzIHRoZQorICAgICAgICAvLyBlbmQgb2YgaGVhZCBwYXJ0LCB0aGVuIHRoaXMga2luZCBvZiBw
YWdlcyBhcmVuJ3QgZGVjb2RlZCBjb3JyZWN0bHkKKyAgICAgICAgLy8gYmVjYXVzZSBvZiB0aGlz
IGlzc3VlLiBTbyB3aGVuIHdlIHNlcmlhbGl6ZSB0aGUgRE9NLCB3ZSBuZWVkIHRvCisgICAgICAg
IC8vIG1ha2Ugc3VyZSB0aGUgbWV0YSB3aWxsIGluIGZpcnN0IGNoaWxkIG9mIGhlYWQgdGFnLgor
ICAgICAgICAvLyBTZWUgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2
MjEuCisgICAgICAgIC8vIEZpcnN0IHdlIGdlbmVyYXRlIG5ldyBjb250ZW50IGZvciB3cml0aW5n
IGNvcnJlY3QgTUVUQSBlbGVtZW50LgorICAgICAgICBSZWZQdHI8SFRNTE1ldGFFbGVtZW50PiBm
YWtlTWV0YSA9IEhUTUxNZXRhRWxlbWVudDo6Y3JlYXRlKG1ldGFUYWcsIGhlYWQtPmRvY3VtZW50
KCkpOworICAgICAgICBmYWtlTWV0YS0+c2V0QXR0cmlidXRlKGh0dHBFcXVpdkF0dHIsICJDb250
ZW50LVR5cGUiKTsKKyAgICAgICAgZmFrZU1ldGEtPnNldEF0dHJpYnV0ZShjb250ZW50QXR0ciwg
InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIpOworICAgICAgICBNYXJrdXBBY2N1bXVsYXRvcjo6
YXBwZW5kRWxlbWVudChvdXQsIGZha2VNZXRhLCBuYW1lc3BhY2VzKTsKKyAgICB9CisKKyAgICBL
VVJMIG1fdXJsOworICAgIGJvb2wgbV9oYXZlU2VlbkRvY1R5cGU7Cit9CisKIC8vIE1heGltdW0g
bGVuZ3RoIG9mIGRhdGEgYnVmZmVyIHdoaWNoIGlzIHVzZWQgdG8gdGVtcG9yYXJ5IHNhdmUgZ2Vu
ZXJhdGVkCiAvLyBodG1sIGNvbnRlbnQgZGF0YS4gVGhpcyBpcyBhIHNvZnQgbGltaXQgd2hpY2gg
bWlnaHQgYmUgcGFzc2VkIGlmIGEgdmVyeSBsYXJnZQogLy8gY29udGVnaW91cyBzdHJpbmcgaXMg
Zm91bmQgaW4gdGhlIHBhZ2UuCkBAIC0xMjMsMTQ2ICsyMDQsNiBAQCBXZWJQYWdlU2VyaWFsaXpl
ckltcGw6OlNlcmlhbGl6ZURvbVBhcmFtOjpTZXJpYWxpemVEb21QYXJhbShjb25zdCBLVVJMJiB1
cmwsCiB7CiB9CiAKLVN0cmluZyBXZWJQYWdlU2VyaWFsaXplckltcGw6OnByZUFjdGlvbkJlZm9y
ZVNlcmlhbGl6ZU9wZW5UYWcoCi0gICAgY29uc3QgRWxlbWVudCogZWxlbWVudCwgU2VyaWFsaXpl
RG9tUGFyYW0qIHBhcmFtLCBib29sKiBuZWVkU2tpcCkKLXsKLSAgICBTdHJpbmdCdWlsZGVyIHJl
c3VsdDsKLQotICAgICpuZWVkU2tpcCA9IGZhbHNlOwotICAgIGlmIChwYXJhbS0+aXNIVE1MRG9j
dW1lbnQpIHsKLSAgICAgICAgLy8gU2tpcCB0aGUgb3BlbiB0YWcgb2Ygb3JpZ2luYWwgTUVUQSB0
YWcgd2hpY2ggZGVjbGFyZSBjaGFyc2V0IHNpbmNlIHdlCi0gICAgICAgIC8vIGhhdmUgb3ZlcnJp
ZGVkIHRoZSBNRVRBIHdoaWNoIGhhdmUgY29ycmVjdCBjaGFyc2V0IGRlY2xhcmF0aW9uIGFmdGVy
Ci0gICAgICAgIC8vIHNlcmlhbGl6aW5nIG9wZW4gdGFnIG9mIEhFQUQgZWxlbWVudC4KLSAgICAg
ICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjptZXRhVGFnKSkgewotICAgICAg
ICAgICAgY29uc3QgSFRNTE1ldGFFbGVtZW50KiBtZXRhID0gc3RhdGljX2Nhc3Q8Y29uc3QgSFRN
TE1ldGFFbGVtZW50Kj4oZWxlbWVudCk7Ci0gICAgICAgICAgICAvLyBDaGVjayB3aGV0aGVyIHRo
ZSBNRVRBIHRhZyBoYXMgZGVjbGFyZWQgY2hhcnNldCBvciBub3QuCi0gICAgICAgICAgICBTdHJp
bmcgZXF1aXYgPSBtZXRhLT5odHRwRXF1aXYoKTsKLSAgICAgICAgICAgIGlmIChlcXVhbElnbm9y
aW5nQ2FzZShlcXVpdiwgImNvbnRlbnQtdHlwZSIpKSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5n
IGNvbnRlbnQgPSBtZXRhLT5jb250ZW50KCk7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRlbnQu
bGVuZ3RoKCkgJiYgY29udGVudC5jb250YWlucygiY2hhcnNldCIsIGZhbHNlKSkgewotICAgICAg
ICAgICAgICAgICAgICAvLyBGaW5kIE1FVEEgdGFnIGRlY2xhcmVkIGNoYXJzZXQsIHdlIG5lZWQg
dG8gc2tpcCBpdCB3aGVuCi0gICAgICAgICAgICAgICAgICAgIC8vIHNlcmlhbGl6aW5nIERPTS4K
LSAgICAgICAgICAgICAgICAgICAgcGFyYW0tPnNraXBNZXRhRWxlbWVudCA9IGVsZW1lbnQ7Ci0g
ICAgICAgICAgICAgICAgICAgICpuZWVkU2tpcCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjpodG1sVGFnKSkgewotICAgICAgICAgICAgLy8gQ2hlY2sgc29tZXRoaW5nIGJlZm9y
ZSBwcm9jZXNzaW5nIHRoZSBvcGVuIHRhZyBvZiBIRUFEIGVsZW1lbnQuCi0gICAgICAgICAgICAv
LyBGaXJzdCB3ZSBhZGQgZG9jIHR5cGUgZGVjbGFyYXRpb24gaWYgb3JpZ2luYWwgZG9jdW1lbnQg
aGFzIGl0LgotICAgICAgICAgICAgaWYgKCFwYXJhbS0+aGF2ZVNlZW5Eb2NUeXBlKSB7Ci0gICAg
ICAgICAgICAgICAgcGFyYW0tPmhhdmVTZWVuRG9jVHlwZSA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZChjcmVhdGVNYXJrdXAocGFyYW0tPmRvY3VtZW50LT5kb2N0eXBlKCkp
KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gQWRkIE1PVFcgZGVjbGFyYXRpb24g
YmVmb3JlIGh0bWwgdGFnLgotICAgICAgICAgICAgLy8gU2VlIGh0dHA6Ly9tc2RuMi5taWNyb3Nv
ZnQuY29tL2VuLXVzL2xpYnJhcnkvbXM1Mzc2MjgoVlMuODUpLmFzcHguCi0gICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKFdlYlBhZ2VTZXJpYWxpemVyOjpnZW5lcmF0ZU1hcmtPZlRoZVdlYkRlY2xh
cmF0aW9uKHBhcmFtLT51cmwpKTsKLSAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50LT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6YmFzZVRhZykpIHsKLSAgICAgICAgICAgIC8vIENvbW1lbnQgdGhlIEJB
U0UgdGFnIHdoZW4gc2VyaWFsaXppbmcgZG9tLgotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgi
PCEtLSIpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gV3JpdGUgWE1MIGRl
Y2xhcmF0aW9uLgotICAgICAgICBpZiAoIXBhcmFtLT5oYXZlQWRkZWRYTUxQcm9jZXNzaW5nRGly
ZWN0aXZlKSB7Ci0gICAgICAgICAgICBwYXJhbS0+aGF2ZUFkZGVkWE1MUHJvY2Vzc2luZ0RpcmVj
dGl2ZSA9IHRydWU7Ci0gICAgICAgICAgICAvLyBHZXQgZW5jb2RpbmcgaW5mby4KLSAgICAgICAg
ICAgIFN0cmluZyB4bWxFbmNvZGluZyA9IHBhcmFtLT5kb2N1bWVudC0+eG1sRW5jb2RpbmcoKTsK
LSAgICAgICAgICAgIGlmICh4bWxFbmNvZGluZy5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAg
eG1sRW5jb2RpbmcgPSBwYXJhbS0+ZG9jdW1lbnQtPmZyYW1lKCktPmxvYWRlcigpLT53cml0ZXIo
KS0+ZW5jb2RpbmcoKTsKLSAgICAgICAgICAgIGlmICh4bWxFbmNvZGluZy5pc0VtcHR5KCkpCi0g
ICAgICAgICAgICAgICAgeG1sRW5jb2RpbmcgPSBVVEY4RW5jb2RpbmcoKS5uYW1lKCk7Ci0gICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKCI8P3htbCB2ZXJzaW9uPVwiIik7Ci0gICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKHBhcmFtLT5kb2N1bWVudC0+eG1sVmVyc2lvbigpKTsKLSAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQoIlwiIGVuY29kaW5nPVwiIik7Ci0gICAgICAgICAgICByZXN1bHQuYXBw
ZW5kKHhtbEVuY29kaW5nKTsKLSAgICAgICAgICAgIGlmIChwYXJhbS0+ZG9jdW1lbnQtPnhtbFN0
YW5kYWxvbmUoKSkKLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCJcIiBzdGFuZGFsb25l
PVwieWVzIik7Ci0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKCJcIj8+XG4iKTsKLSAgICAgICAg
fQotICAgICAgICAvLyBBZGQgZG9jIHR5cGUgZGVjbGFyYXRpb24gaWYgb3JpZ2luYWwgZG9jdW1l
bnQgaGFzIGl0LgotICAgICAgICBpZiAoIXBhcmFtLT5oYXZlU2VlbkRvY1R5cGUpIHsKLSAgICAg
ICAgICAgIHBhcmFtLT5oYXZlU2VlbkRvY1R5cGUgPSB0cnVlOwotICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZChjcmVhdGVNYXJrdXAocGFyYW0tPmRvY3VtZW50LT5kb2N0eXBlKCkpKTsKLSAgICAg
ICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBX
ZWJQYWdlU2VyaWFsaXplckltcGw6OnBvc3RBY3Rpb25BZnRlclNlcmlhbGl6ZU9wZW5UYWcoCi0g
ICAgY29uc3QgRWxlbWVudCogZWxlbWVudCwgU2VyaWFsaXplRG9tUGFyYW0qIHBhcmFtKQotewot
ICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OwotCi0gICAgcGFyYW0tPmhhdmVBZGRlZENvbnRlbnRz
QmVmb3JlRW5kID0gZmFsc2U7Ci0gICAgaWYgKCFwYXJhbS0+aXNIVE1MRG9jdW1lbnQpCi0gICAg
ICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKLSAgICAvLyBDaGVjayBhZnRlciBwcm9jZXNz
aW5nIHRoZSBvcGVuIHRhZyBvZiBIRUFEIGVsZW1lbnQKLSAgICBpZiAoIXBhcmFtLT5oYXZlQWRk
ZWRDaGFyc2V0RGVjbGFyYXRpb24KLSAgICAgICAgJiYgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OmhlYWRUYWcpKSB7Ci0gICAgICAgIHBhcmFtLT5oYXZlQWRkZWRDaGFyc2V0RGVjbGFy
YXRpb24gPSB0cnVlOwotICAgICAgICAvLyBDaGVjayBtZXRhIGVsZW1lbnQuIFdlYktpdCBvbmx5
IHByZS1wYXJzZSB0aGUgZmlyc3QgNTEyIGJ5dGVzCi0gICAgICAgIC8vIG9mIHRoZSBkb2N1bWVu
dC4gSWYgdGhlIHdob2xlIDxIRUFEPiBpcyBsYXJnZXIgYW5kIG1ldGEgaXMgdGhlCi0gICAgICAg
IC8vIGVuZCBvZiBoZWFkIHBhcnQsIHRoZW4gdGhpcyBraW5kIG9mIHBhZ2VzIGFyZW4ndCBkZWNv
ZGVkIGNvcnJlY3RseQotICAgICAgICAvLyBiZWNhdXNlIG9mIHRoaXMgaXNzdWUuIFNvIHdoZW4g
d2Ugc2VyaWFsaXplIHRoZSBET00sIHdlIG5lZWQgdG8KLSAgICAgICAgLy8gbWFrZSBzdXJlIHRo
ZSBtZXRhIHdpbGwgaW4gZmlyc3QgY2hpbGQgb2YgaGVhZCB0YWcuCi0gICAgICAgIC8vIFNlZSBo
dHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjYyMS4KLSAgICAgICAgLy8g
Rmlyc3Qgd2UgZ2VuZXJhdGUgbmV3IGNvbnRlbnQgZm9yIHdyaXRpbmcgY29ycmVjdCBNRVRBIGVs
ZW1lbnQuCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoV2ViUGFnZVNlcmlhbGl6ZXI6OmdlbmVyYXRl
TWV0YUNoYXJzZXREZWNsYXJhdGlvbigKLSAgICAgICAgICAgIFN0cmluZyhwYXJhbS0+dGV4dEVu
Y29kaW5nLm5hbWUoKSkpKTsKLQotICAgICAgICBwYXJhbS0+aGF2ZUFkZGVkQ29udGVudHNCZWZv
cmVFbmQgPSB0cnVlOwotICAgICAgICAvLyBXaWxsIHNlYXJjaCBlYWNoIE1FVEEgd2hpY2ggaGFz
IGNoYXJzZXQgZGVjbGFyYXRpb24sIGFuZCBza2lwIHRoZW0gYWxsCi0gICAgICAgIC8vIGluIFBy
ZUFjdGlvbkJlZm9yZVNlcmlhbGl6ZU9wZW5UYWcuCi0gICAgfSBlbHNlIGlmIChlbGVtZW50LT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6c2NyaXB0VGFnKQotICAgICAgICAgICAgICAgfHwgZWxlbWVu
dC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnN0eWxlVGFnKSkgewotICAgICAgICBwYXJhbS0+aXNJ
blNjcmlwdE9yU3R5bGVUYWcgPSB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQudG9T
dHJpbmcoKTsKLX0KLQotU3RyaW5nIFdlYlBhZ2VTZXJpYWxpemVySW1wbDo6cHJlQWN0aW9uQmVm
b3JlU2VyaWFsaXplRW5kVGFnKAotICAgIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIFNlcmlhbGl6
ZURvbVBhcmFtKiBwYXJhbSwgYm9vbCogbmVlZFNraXApCi17Ci0gICAgU3RyaW5nIHJlc3VsdDsK
LQotICAgICpuZWVkU2tpcCA9IGZhbHNlOwotICAgIGlmICghcGFyYW0tPmlzSFRNTERvY3VtZW50
KQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIC8vIFNraXAgdGhlIGVuZCB0YWcgb2Ygb3Jp
Z2luYWwgTUVUQSB0YWcgd2hpY2ggZGVjbGFyZSBjaGFyc2V0LgotICAgIC8vIE5lZWQgbm90IHRv
IGNoZWNrIHdoZXRoZXIgaXQncyBNRVRBIHRhZyBzaW5jZSB3ZSBndWFyYW50ZWUKLSAgICAvLyBz
a2lwTWV0YUVsZW1lbnQgaXMgZGVmaW5pdGVseSBNRVRBIHRhZyBpZiBpdCdzIG5vdCAwLgotICAg
IGlmIChwYXJhbS0+c2tpcE1ldGFFbGVtZW50ID09IGVsZW1lbnQpCi0gICAgICAgICpuZWVkU2tp
cCA9IHRydWU7Ci0gICAgZWxzZSBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnNj
cmlwdFRhZykKLSAgICAgICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
c3R5bGVUYWcpKSB7Ci0gICAgICAgIEFTU0VSVChwYXJhbS0+aXNJblNjcmlwdE9yU3R5bGVUYWcp
OwotICAgICAgICBwYXJhbS0+aXNJblNjcmlwdE9yU3R5bGVUYWcgPSBmYWxzZTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0vLyBBZnRlciB3ZSBmaW5pc2ggc2VyaWFsaXppbmcg
ZW5kIHRhZyBvZiBhIGVsZW1lbnQsIHdlIGdpdmUgdGhlIHRhcmdldAotLy8gZWxlbWVudCBhIGNo
YW5jZSB0byBkbyBzb21lIHBvc3Qgd29yayB0byBhZGQgc29tZSBhZGRpdGlvbmFsIGRhdGEuCi1T
dHJpbmcgV2ViUGFnZVNlcmlhbGl6ZXJJbXBsOjpwb3N0QWN0aW9uQWZ0ZXJTZXJpYWxpemVFbmRU
YWcoCi0gICAgY29uc3QgRWxlbWVudCogZWxlbWVudCwgU2VyaWFsaXplRG9tUGFyYW0qIHBhcmFt
KQotewotICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OwotCi0gICAgaWYgKCFwYXJhbS0+aXNIVE1M
RG9jdW1lbnQpCi0gICAgICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKLSAgICAvLyBDb21t
ZW50IHRoZSBCQVNFIHRhZyB3aGVuIHNlcmlhbGl6aW5nIERPTS4KLSAgICBpZiAoZWxlbWVudC0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJhc2VUYWcpKSB7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQo
Ii0tPiIpOwotICAgICAgICAvLyBBcHBlbmQgYSBuZXcgYmFzZSB0YWcgZGVjbGFyYXRpb24uCi0g
ICAgICAgIHJlc3VsdC5hcHBlbmQoV2ViUGFnZVNlcmlhbGl6ZXI6OmdlbmVyYXRlQmFzZVRhZ0Rl
Y2xhcmF0aW9uKAotICAgICAgICAgICAgcGFyYW0tPmRvY3VtZW50LT5iYXNlVGFyZ2V0KCkpKTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci19Ci0KIHZvaWQgV2ViUGFn
ZVNlcmlhbGl6ZXJJbXBsOjpzYXZlSFRNTENvbnRlbnRUb0J1ZmZlcigKICAgICBjb25zdCBTdHJp
bmcmIHJlc3VsdCwgU2VyaWFsaXplRG9tUGFyYW0qIHBhcmFtKQogewpAQCAtMjk0LDggKzIzNSw3
IEBAIHZvaWQgV2ViUGFnZVNlcmlhbGl6ZXJJbXBsOjplbmNvZGVBbmRGbHVzaEJ1ZmZlcigKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyk7CiB9CiAKLXZvaWQg
V2ViUGFnZVNlcmlhbGl6ZXJJbXBsOjpvcGVuVGFnVG9TdHJpbmcoY29uc3QgRWxlbWVudCogZWxl
bWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VyaWFs
aXplRG9tUGFyYW0qIHBhcmFtKQordm9pZCBXZWJQYWdlU2VyaWFsaXplckltcGw6Om9wZW5UYWdU
b1N0cmluZyhjb25zdCBFbGVtZW50KiBlbGVtZW50LCBTZXJpYWxpemVEb21QYXJhbSogcGFyYW0p
CiB7CiAgICAgLy8gRklYTUU6IHVzZSBTdHJpbmdCdWlsZGVyIGluc3RlYWQgb2YgU3RyaW5nLgog
ICAgIGJvb2wgbmVlZFNraXA7CkBAIC0zNTksNDAgKzI5OSw4IEBAIHZvaWQgV2ViUGFnZVNlcmlh
bGl6ZXJJbXBsOjpvcGVuVGFnVG9TdHJpbmcoY29uc3QgRWxlbWVudCogZWxlbWVudCwKIH0KIAog
Ly8gU2VyaWFsaXplIGVuZCB0YWcgb2YgYW4gc3BlY2lmaWVkIGVsZW1lbnQuCi12b2lkIFdlYlBh
Z2VTZXJpYWxpemVySW1wbDo6ZW5kVGFnVG9TdHJpbmcoY29uc3QgRWxlbWVudCogZWxlbWVudCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXJpYWxpemVEb21Q
YXJhbSogcGFyYW0pCit2b2lkIFdlYlBhZ2VTZXJpYWxpemVySW1wbDo6ZW5kVGFnVG9TdHJpbmco
Y29uc3QgRWxlbWVudCogZWxlbWVudCwgU2VyaWFsaXplRG9tUGFyYW0qIHBhcmFtKQogewotICAg
IGJvb2wgbmVlZFNraXA7Ci0gICAgLy8gRG8gcHJlIGFjdGlvbiBmb3IgZW5kIHRhZy4KLSAgICBT
dHJpbmcgcmVzdWx0ID0gcHJlQWN0aW9uQmVmb3JlU2VyaWFsaXplRW5kVGFnKGVsZW1lbnQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVk
U2tpcCk7Ci0gICAgaWYgKG5lZWRTa2lwKQotICAgICAgICByZXR1cm47Ci0gICAgLy8gV3JpdGUg
ZW5kIHRhZyB3aGVuIGVsZW1lbnQgaGFzIGNoaWxkL2NoaWxkcmVuLgotICAgIGlmIChlbGVtZW50
LT5oYXNDaGlsZE5vZGVzKCkgfHwgcGFyYW0tPmhhdmVBZGRlZENvbnRlbnRzQmVmb3JlRW5kKSB7
Ci0gICAgICAgIHJlc3VsdCArPSAiPC8iOwotICAgICAgICByZXN1bHQgKz0gZWxlbWVudC0+bm9k
ZU5hbWUoKS5sb3dlcigpOwotICAgICAgICByZXN1bHQgKz0gIj4iOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIC8vIENoZWNrIHdoZXRoZXIgd2UgaGF2ZSB0byB3cml0ZSBlbmQgdGFnIGZvciBlbXB0
eSBlbGVtZW50LgotICAgICAgICBpZiAocGFyYW0tPmlzSFRNTERvY3VtZW50KSB7Ci0gICAgICAg
ICAgICByZXN1bHQgKz0gIj4iOwotICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgY29kZSBpcyBo
b3JyaWJseSB3cm9uZy4gIFdlYlBhZ2VTZXJpYWxpemVySW1wbCBtdXN0IGRpZS4KLSAgICAgICAg
ICAgIGlmICghc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTEVsZW1lbnQqPihlbGVtZW50KS0+aWVGb3Ji
aWRzSW5zZXJ0SFRNTCgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byB3cml0ZSBl
bmQgdGFnIHdoZW4gaXQgaXMgcmVxdWlyZWQuCi0gICAgICAgICAgICAgICAgcmVzdWx0ICs9ICI8
LyI7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ICs9IGVsZW1lbnQtPm5vZGVOYW1lKCkubG93ZXIo
KTsKLSAgICAgICAgICAgICAgICByZXN1bHQgKz0gIj4iOwotICAgICAgICAgICAgfQotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgLy8gRm9yIHhtbCBiYXNlIGRvY3VtZW50LgotICAgICAg
ICAgICAgcmVzdWx0ICs9ICIgLz4iOwotICAgICAgICB9Ci0gICAgfQotICAgIC8vIERvIHBvc3Qg
YWN0aW9uIGZvciBlbmQgdGFnLgotICAgIHJlc3VsdCArPSBwb3N0QWN0aW9uQWZ0ZXJTZXJpYWxp
emVFbmRUYWcoZWxlbWVudCwgcGFyYW0pOwotICAgIC8vIFNhdmUgdGhlIHJlc3VsdCB0byBkYXRh
IGJ1ZmZlci4KICAgICBzYXZlSFRNTENvbnRlbnRUb0J1ZmZlcihyZXN1bHQsIHBhcmFtKTsKIH0K
IAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70918</attachid>
            <date>2010-10-15 16:47:17 -0700</date>
            <delta_ts>2010-10-15 17:32:30 -0700</delta_ts>
            <desc>more code</desc>
            <filename>bug-47748-20101015164716.patch</filename>
            <type>text/plain</type>
            <size>26567</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5jcHAgYi9XZWJD
b3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuY3BwCmluZGV4IGFhNmU1Y2YzZGFlZmFkOTUy
ZDYyNmMxZGQ2ZjgxNDdhYWNjNWQzYjcuLmUxYjUwZjQxMmM1MjUwODk0Zjk3ZTE3NjhlMDc2Mzg1
NGFkZTAyNjQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5j
cHAKKysrIGIvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmNwcApAQCAtMzM2LDgg
KzMzNiw4IEBAIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEF0dHJpYnV0ZShWZWN0b3I8
VUNoYXI+JiBvdXQsIEVsZW1lbnQqIGVsZW1lbnQsIGNvCiAgICAgaWYgKGVsZW1lbnQtPmlzVVJM
QXR0cmlidXRlKGNvbnN0X2Nhc3Q8QXR0cmlidXRlKj4oJmF0dHJpYnV0ZSkpKSB7CiAgICAgICAg
IC8vIFdlIGRvbid0IHdhbnQgdG8gY29tcGxldGUgZmlsZTovLy8gVVJMcyBiZWNhdXNlIGl0IG1h
eSBjb250YWluIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbgogICAgICAgICAvLyBhYm91dCB0aGUgdXNl
cidzIHN5c3RlbS4KLSAgICAgICAgaWYgKHNob3VsZFJlc29sdmVVUkxzKCkgJiYgIWVsZW1lbnQt
PmRvY3VtZW50KCktPnVybCgpLmlzTG9jYWxGaWxlKCkpCi0gICAgICAgICAgICBhcHBlbmRRdW90
ZWRVUkxBdHRyaWJ1dGVWYWx1ZShvdXQsIGVsZW1lbnQtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJM
KGF0dHJpYnV0ZS52YWx1ZSgpKS5zdHJpbmcoKSk7CisgICAgICAgIGlmIChzaG91bGRSZXNvbHZl
VVJMcygpKQorICAgICAgICAgICAgYXBwZW5kUXVvdGVkVVJMQXR0cmlidXRlVmFsdWUob3V0LCBy
ZXNvbHZlVVJMKGVsZW1lbnQsIGF0dHJpYnV0ZSkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAg
ICBhcHBlbmRRdW90ZWRVUkxBdHRyaWJ1dGVWYWx1ZShvdXQsIGF0dHJpYnV0ZS52YWx1ZSgpKTsg
CiAgICAgfSBlbHNlIHsKQEAgLTM1MCw2ICszNTAsMTMgQEAgdm9pZCBNYXJrdXBBY2N1bXVsYXRv
cjo6YXBwZW5kQXR0cmlidXRlKFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCogZWxlbWVudCwg
Y28KICAgICAgICAgYXBwZW5kTmFtZXNwYWNlKG91dCwgYXR0cmlidXRlLnByZWZpeCgpLCBhdHRy
aWJ1dGUubmFtZXNwYWNlVVJJKCksICpuYW1lc3BhY2VzKTsKIH0KIAorU3RyaW5nIE1hcmt1cEFj
Y3VtdWxhdG9yOjpyZXNvbHZlVVJMKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEF0dHJpYnV0ZSYg
YXR0cmlidXRlKQoreworICAgIGlmIChlbGVtZW50LT5kb2N1bWVudCgpLT51cmwoKS5pc0xvY2Fs
RmlsZSgpKQorICAgICAgICByZXR1cm4gYXR0cmlidXRlLnZhbHVlKCk7CisgICAgcmV0dXJuIGVs
ZW1lbnQtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGF0dHJpYnV0ZS52YWx1ZSgpKS5zdHJpbmco
KTsKK30KKwogdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQ0RBVEFTZWN0aW9uKFZlY3Rv
cjxVQ2hhcj4mIG91dCwgY29uc3QgU3RyaW5nJiBzZWN0aW9uKQogewogICAgIC8vIEZJWE1FOiBD
REFUQSBjb250ZW50IGlzIG5vdCBlc2NhcGVkLCBidXQgWE1MU2VyaWFsaXplciAoYW5kIHBvc3Np
Ymx5IG90aGVyIGNhbGxlcnMpIHNob3VsZCByYWlzZSBhbiBleGNlcHRpb24gaWYgaXQgaW5jbHVk
ZXMgIl1dPiIuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3Iu
aCBiL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5oCmluZGV4IDM3NDEyNTk3NmRl
YTBiZDg5YTllOTUyNDI1NzljMDAyNTQ5Nzk3OTYuLjMwNWExMTZjMzA1NzA1MTk2ZDE3MzUwOTdh
OTNlMzJlNWNlYzg4ZTEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVs
YXRvci5oCisrKyBiL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5oCkBAIC05Niw2
ICs5Niw3IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIGFwcGVuZEVuZE1hcmt1cChWZWN0b3I8VUNo
YXI+JiByZXN1bHQsIGNvbnN0IE5vZGUqKTsKIAogICAgIGJvb2wgc2hvdWxkUmVzb2x2ZVVSTHMo
KSB7IHJldHVybiBtX3Nob3VsZFJlc29sdmVVUkxzID09IEFic29sdXRlVVJMczsgfQorICAgIHZp
cnR1YWwgU3RyaW5nIHJlc29sdmVVUkwoRWxlbWVudCogZWxlbWVudCwgY29uc3QgQXR0cmlidXRl
JiBhdHRyaWJ1dGUpCiAKICAgICBWZWN0b3I8Tm9kZSo+KiBjb25zdCBtX25vZGVzOwogICAgIGNv
bnN0IFJhbmdlKiBjb25zdCBtX3JhbmdlOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggZGZiODMzODA4YzIyYmY1
YzJiZTIyMzM5MzU2NDE4MTEyMDdmODYyYy4uZjgxNzk4MDdiN2RkYWRmMjkwODE5NzliZjFhMjk4
NmE2MzMzMjczNiAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTAtMTAtMTUgIEFk
YW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBXZWJQYWdlU2VyaWFsaXplckltcGwgZHVwbGljYXRlcyAo
cG9vcmx5KSBhIGxvdCBvZiBjb2RlIGZyb20gTWFya3VwQWNjdW11bGF0b3IKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3NzQ4CisKKyAgICAgICAgKiBz
cmMvV2ViUGFnZVNlcmlhbGl6ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6WFhYTWFya3Vw
QWNjdW11bGF0b3I6OlhYWE1hcmt1cEFjY3VtdWxhdG9yKToKKyAgICAgICAgKFdlYktpdDo6WFhY
TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVsZW1lbnQpOgorICAgICAgICAoV2ViS2l0OjpYWFhN
YXJrdXBBY2N1bXVsYXRvcjo6aXNDaGFyc2V0RGVjbGFyYXRpb24pOgorICAgICAgICAoV2ViS2l0
OjpYWFhNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQmFzZUVsZW1lbnQpOgorICAgICAgICAoV2Vi
S2l0OjpYWFhNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kTWFya09mVGhlV2ViKToKKyAgICAgICAg
KFdlYktpdDo6WFhYTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZENoYXJzZXREZWNsYXJhdGlvbik6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VTZXJpYWxpemVySW1wbDo6b3BlblRhZ1RvU3RyaW5n
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVNlcmlhbGl6ZXJJbXBsOjplbmRUYWdUb1N0cmlu
Zyk6CisKIDIwMTAtMTAtMTUgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwu
Y29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHI2OTgwOS4KZGlmZiAtLWdp
dCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGFnZVNlcmlhbGl6ZXJJbXBsLmNwcCBiL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViUGFnZVNlcmlhbGl6ZXJJbXBsLmNwcAppbmRleCAwZDg1ZDc4Njkx
NDdlNDQzZTkxNDYwMjU4Zjk1MTNhZTIzYTdjMThjLi5jZDdhZGVmOTVjNDhlNmZiMDFlYmE2YzVl
NGZlZDBkZWRjOWVlNTkyIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VT
ZXJpYWxpemVySW1wbC5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQYWdlU2VyaWFs
aXplckltcGwuY3BwCkBAIC0xMDAsMTA2ICsxMDAsMTAzIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotLy8gTWF4aW11bSBsZW5ndGggb2YgZGF0YSBi
dWZmZXIgd2hpY2ggaXMgdXNlZCB0byB0ZW1wb3Jhcnkgc2F2ZSBnZW5lcmF0ZWQKLS8vIGh0bWwg
Y29udGVudCBkYXRhLiBUaGlzIGlzIGEgc29mdCBsaW1pdCB3aGljaCBtaWdodCBiZSBwYXNzZWQg
aWYgYSB2ZXJ5IGxhcmdlCi0vLyBjb250ZWdpb3VzIHN0cmluZyBpcyBmb3VuZCBpbiB0aGUgcGFn
ZS4KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBkYXRhQnVmZmVyQ2FwYWNpdHkgPSA2NTUzNjsKK3Vz
aW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLVdlYlBhZ2VTZXJpYWxpemVySW1wbDo6U2VyaWFs
aXplRG9tUGFyYW06OlNlcmlhbGl6ZURvbVBhcmFtKGNvbnN0IEtVUkwmIHVybCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFRleHRFbmNvZGluZyYgdGV4dEVuY29kaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgU3RyaW5nJiBkaXJlY3RvcnlOYW1lKQotICAgIDogdXJsKHVybCkKLSAgICAsIHRleHRF
bmNvZGluZyh0ZXh0RW5jb2RpbmcpCi0gICAgLCBkb2N1bWVudChkb2N1bWVudCkKLSAgICAsIGRp
cmVjdG9yeU5hbWUoZGlyZWN0b3J5TmFtZSkKLSAgICAsIGlzSFRNTERvY3VtZW50KGRvY3VtZW50
LT5pc0hUTUxEb2N1bWVudCgpKQotICAgICwgaGF2ZVNlZW5Eb2NUeXBlKGZhbHNlKQotICAgICwg
aGF2ZUFkZGVkQ2hhcnNldERlY2xhcmF0aW9uKGZhbHNlKQotICAgICwgc2tpcE1ldGFFbGVtZW50
KDApCi0gICAgLCBpc0luU2NyaXB0T3JTdHlsZVRhZyhmYWxzZSkKLSAgICAsIGhhdmVBZGRlZFhN
TFByb2Nlc3NpbmdEaXJlY3RpdmUoZmFsc2UpCi0gICAgLCBoYXZlQWRkZWRDb250ZW50c0JlZm9y
ZUVuZChmYWxzZSkKLXsKLX0KK2NsYXNzIFVSTFJld3JpdGVyIDogcHVibGljIE5vbmNvcHlhYmxl
IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEhhc2hNYXA8V1RGOjpTdHJpbmcsIFdURjo6U3RyaW5n
PiBVUkxNYXA7CiAKLVN0cmluZyBXZWJQYWdlU2VyaWFsaXplckltcGw6OnByZUFjdGlvbkJlZm9y
ZVNlcmlhbGl6ZU9wZW5UYWcoCi0gICAgY29uc3QgRWxlbWVudCogZWxlbWVudCwgU2VyaWFsaXpl
RG9tUGFyYW0qIHBhcmFtLCBib29sKiBuZWVkU2tpcCkKLXsKLSAgICBTdHJpbmdCdWlsZGVyIHJl
c3VsdDsKLQotICAgICpuZWVkU2tpcCA9IGZhbHNlOwotICAgIGlmIChwYXJhbS0+aXNIVE1MRG9j
dW1lbnQpIHsKLSAgICAgICAgLy8gU2tpcCB0aGUgb3BlbiB0YWcgb2Ygb3JpZ2luYWwgTUVUQSB0
YWcgd2hpY2ggZGVjbGFyZSBjaGFyc2V0IHNpbmNlIHdlCi0gICAgICAgIC8vIGhhdmUgb3ZlcnJp
ZGVkIHRoZSBNRVRBIHdoaWNoIGhhdmUgY29ycmVjdCBjaGFyc2V0IGRlY2xhcmF0aW9uIGFmdGVy
Ci0gICAgICAgIC8vIHNlcmlhbGl6aW5nIG9wZW4gdGFnIG9mIEhFQUQgZWxlbWVudC4KLSAgICAg
ICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjptZXRhVGFnKSkgewotICAgICAg
ICAgICAgY29uc3QgSFRNTE1ldGFFbGVtZW50KiBtZXRhID0gc3RhdGljX2Nhc3Q8Y29uc3QgSFRN
TE1ldGFFbGVtZW50Kj4oZWxlbWVudCk7Ci0gICAgICAgICAgICAvLyBDaGVjayB3aGV0aGVyIHRo
ZSBNRVRBIHRhZyBoYXMgZGVjbGFyZWQgY2hhcnNldCBvciBub3QuCi0gICAgICAgICAgICBTdHJp
bmcgZXF1aXYgPSBtZXRhLT5odHRwRXF1aXYoKTsKLSAgICAgICAgICAgIGlmIChlcXVhbElnbm9y
aW5nQ2FzZShlcXVpdiwgImNvbnRlbnQtdHlwZSIpKSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5n
IGNvbnRlbnQgPSBtZXRhLT5jb250ZW50KCk7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRlbnQu
bGVuZ3RoKCkgJiYgY29udGVudC5jb250YWlucygiY2hhcnNldCIsIGZhbHNlKSkgewotICAgICAg
ICAgICAgICAgICAgICAvLyBGaW5kIE1FVEEgdGFnIGRlY2xhcmVkIGNoYXJzZXQsIHdlIG5lZWQg
dG8gc2tpcCBpdCB3aGVuCi0gICAgICAgICAgICAgICAgICAgIC8vIHNlcmlhbGl6aW5nIERPTS4K
LSAgICAgICAgICAgICAgICAgICAgcGFyYW0tPnNraXBNZXRhRWxlbWVudCA9IGVsZW1lbnQ7Ci0g
ICAgICAgICAgICAgICAgICAgICpuZWVkU2tpcCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjpodG1sVGFnKSkgewotICAgICAgICAgICAgLy8gQ2hlY2sgc29tZXRoaW5nIGJlZm9y
ZSBwcm9jZXNzaW5nIHRoZSBvcGVuIHRhZyBvZiBIRUFEIGVsZW1lbnQuCi0gICAgICAgICAgICAv
LyBGaXJzdCB3ZSBhZGQgZG9jIHR5cGUgZGVjbGFyYXRpb24gaWYgb3JpZ2luYWwgZG9jdW1lbnQg
aGFzIGl0LgotICAgICAgICAgICAgaWYgKCFwYXJhbS0+aGF2ZVNlZW5Eb2NUeXBlKSB7Ci0gICAg
ICAgICAgICAgICAgcGFyYW0tPmhhdmVTZWVuRG9jVHlwZSA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZChjcmVhdGVNYXJrdXAocGFyYW0tPmRvY3VtZW50LT5kb2N0eXBlKCkp
KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gQWRkIE1PVFcgZGVjbGFyYXRpb24g
YmVmb3JlIGh0bWwgdGFnLgotICAgICAgICAgICAgLy8gU2VlIGh0dHA6Ly9tc2RuMi5taWNyb3Nv
ZnQuY29tL2VuLXVzL2xpYnJhcnkvbXM1Mzc2MjgoVlMuODUpLmFzcHguCi0gICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKFdlYlBhZ2VTZXJpYWxpemVyOjpnZW5lcmF0ZU1hcmtPZlRoZVdlYkRlY2xh
cmF0aW9uKHBhcmFtLT51cmwpKTsKLSAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50LT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6YmFzZVRhZykpIHsKLSAgICAgICAgICAgIC8vIENvbW1lbnQgdGhlIEJB
U0UgdGFnIHdoZW4gc2VyaWFsaXppbmcgZG9tLgotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgi
PCEtLSIpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gV3JpdGUgWE1MIGRl
Y2xhcmF0aW9uLgotICAgICAgICBpZiAoIXBhcmFtLT5oYXZlQWRkZWRYTUxQcm9jZXNzaW5nRGly
ZWN0aXZlKSB7Ci0gICAgICAgICAgICBwYXJhbS0+aGF2ZUFkZGVkWE1MUHJvY2Vzc2luZ0RpcmVj
dGl2ZSA9IHRydWU7Ci0gICAgICAgICAgICAvLyBHZXQgZW5jb2RpbmcgaW5mby4KLSAgICAgICAg
ICAgIFN0cmluZyB4bWxFbmNvZGluZyA9IHBhcmFtLT5kb2N1bWVudC0+eG1sRW5jb2RpbmcoKTsK
LSAgICAgICAgICAgIGlmICh4bWxFbmNvZGluZy5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAg
eG1sRW5jb2RpbmcgPSBwYXJhbS0+ZG9jdW1lbnQtPmZyYW1lKCktPmxvYWRlcigpLT53cml0ZXIo
KS0+ZW5jb2RpbmcoKTsKLSAgICAgICAgICAgIGlmICh4bWxFbmNvZGluZy5pc0VtcHR5KCkpCi0g
ICAgICAgICAgICAgICAgeG1sRW5jb2RpbmcgPSBVVEY4RW5jb2RpbmcoKS5uYW1lKCk7Ci0gICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKCI8P3htbCB2ZXJzaW9uPVwiIik7Ci0gICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKHBhcmFtLT5kb2N1bWVudC0+eG1sVmVyc2lvbigpKTsKLSAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQoIlwiIGVuY29kaW5nPVwiIik7Ci0gICAgICAgICAgICByZXN1bHQuYXBw
ZW5kKHhtbEVuY29kaW5nKTsKLSAgICAgICAgICAgIGlmIChwYXJhbS0+ZG9jdW1lbnQtPnhtbFN0
YW5kYWxvbmUoKSkKLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCJcIiBzdGFuZGFsb25l
PVwieWVzIik7Ci0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKCJcIj8+XG4iKTsKLSAgICAgICAg
fQotICAgICAgICAvLyBBZGQgZG9jIHR5cGUgZGVjbGFyYXRpb24gaWYgb3JpZ2luYWwgZG9jdW1l
bnQgaGFzIGl0LgotICAgICAgICBpZiAoIXBhcmFtLT5oYXZlU2VlbkRvY1R5cGUpIHsKLSAgICAg
ICAgICAgIHBhcmFtLT5oYXZlU2VlbkRvY1R5cGUgPSB0cnVlOwotICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZChjcmVhdGVNYXJrdXAocGFyYW0tPmRvY3VtZW50LT5kb2N0eXBlKCkpKTsKKyAgICBV
UkxSZXdyaXRlcihjb25zdCBTdHJpbmcmIHByZWZpeCwgUGFzc093blB0cjxVUkxNYXA+IG1hcCkK
KyAgICAgICAgLCBtX3ByZWZpeChwcmVmaXgpCisgICAgICAgICwgbV9tYXAobWFwKQorICAgIHsK
KyAgICB9CisKKyAgICBTdHJpbmcgcmV3cml0ZShjb25zdCBTdHJpbmcmIHVybCkKKyAgICB7Cisg
ICAgICAgIGlmICghbV9sb2NhbExpbmtzLmNvbnRhaW5zKHVybCkpCisgICAgICAgICAgICByZXR1
cm4gdXJsOworCisgICAgICAgIFN0cmluZyByZXdyaXR0ZW5VUkw7CisgICAgICAgIGlmICghbV9w
cmVmaXguaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV3cml0dGVuVVJMID0gbV9wcmVmaXg7Cisg
ICAgICAgIHJld3JpdHRlblVSTCArPSBtX21hcC5nZXQodXJsKTsKKworICAgICAgICByZXR1cm4g
cmV3cml0dGVuVVJMOworICAgIH0KKworcHJpdmF0ZToKKyAgICBTdHJpbmcgbV9wcmVmaXg7Cisg
ICAgT3duUHRyPFVSTE1hcD4gbV9tYXA7Cit9OworCitjbGFzcyBYWFhNYXJrdXBBY2N1bXVsYXRv
ciA6IHB1YmxpYyBNYXJrdXBBY2N1bXVsYXRvciB7CitwdWJsaWM6CisgICAgWFhYTWFya3VwQWNj
dW11bGF0b3IoVVJMUmV3cml0ZXIqIHVybFJld3JpdGVyKQorICAgICAgICA6IE1hcmt1cEFjY3Vt
dWxhdG9yKDAsIEFic29sdXRlVVJMcykKKyAgICAgICAgLCBtX3VybFJld3JpdGVyKHVybFJld3Jp
dGVyKQorICAgICAgICAsIG1faGF2ZUFkZGVkTWFya09mVGhlV2ViKGZhbHNlKQorICAgICAgICAs
IG1faGF2ZUFkZGVkQ2hhcnNldERlY2xhcmF0aW9uKGZhbHNlKQorICAgIHsKKyAgICB9CisKK3By
aXZhdGU6CisgICAgdmlydHVhbCB2b2lkIGFwcGVuZEVsZW1lbnQoVmVjdG9yPFVDaGFyPiYgb3V0
LCBFbGVtZW50KiBlbGVtZW50LCBOYW1lc3BhY2VzKiBuYW1lc3BhY2VzKQorICAgIHsKKyAgICAg
ICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUobWV0YVRhZykgJiYgaXNDaGFyc2V0RGVjbGFyYXRp
b24oZWxlbWVudCkpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiAoZWxlbWVudC0+
aGFzVGFnTmFtZShiYXNlVGFnKSkgeworICAgICAgICAgICAgYXBwZW5kQmFzZUVsZW1lbnQob3V0
LCBzdGF0aWNfY2FzdDxIVE1MQmFzZUVsZW1lbnQqPihlbGVtZW50KSk7CisgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KKworICAgICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShodG1s
VGFnICYmICFtX2hhdmVBZGRlZE1hcmtPZlRoZVdlYikpCisgICAgICAgICAgICBhcHBlbmRNYXJr
T2ZUaGVXZWIob3V0LCBlbGVtZW50LT5kb2N1bWVudCgpLT51cmwoKSk7CisKKyAgICAgICAgTWFy
a3VwQWNjdW11bGF0b3I6OmFwcGVuZEVsZW1lbnQob3V0LCBlbGVtZW50LCBuYW1lc3BhY2VzKTsK
KworICAgICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShoZWFkVGFnKSAmJiAhbV9oYXZlQWRk
ZWRDaGFyc2V0RGVjbGFyYXRpb24pCisgICAgICAgICAgICBhcHBlbmRDaGFyc2V0RGVjbGFyYXRp
b24ob3V0LCBzdGF0aWNfY2FzdDxIVE1MSGVhZEVsZW1lbnQqPihlbGVtZW50KSwgbmFtZXNwYWNl
cyk7CiAgICAgfQotICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKLX0KIAotU3RyaW5nIFdl
YlBhZ2VTZXJpYWxpemVySW1wbDo6cG9zdEFjdGlvbkFmdGVyU2VyaWFsaXplT3BlblRhZygKLSAg
ICBjb25zdCBFbGVtZW50KiBlbGVtZW50LCBTZXJpYWxpemVEb21QYXJhbSogcGFyYW0pCi17Ci0g
ICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7Ci0KLSAgICBwYXJhbS0+aGF2ZUFkZGVkQ29udGVudHNC
ZWZvcmVFbmQgPSBmYWxzZTsKLSAgICBpZiAoIXBhcmFtLT5pc0hUTUxEb2N1bWVudCkKLSAgICAg
ICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotICAgIC8vIENoZWNrIGFmdGVyIHByb2Nlc3Np
bmcgdGhlIG9wZW4gdGFnIG9mIEhFQUQgZWxlbWVudAotICAgIGlmICghcGFyYW0tPmhhdmVBZGRl
ZENoYXJzZXREZWNsYXJhdGlvbgotICAgICAgICAmJiBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6aGVhZFRhZykpIHsKLSAgICAgICAgcGFyYW0tPmhhdmVBZGRlZENoYXJzZXREZWNsYXJh
dGlvbiA9IHRydWU7CisgICAgdmlydHVhbCBTdHJpbmcgcmVzb2x2ZVVSTChFbGVtZW50KiBlbGVt
ZW50LCBjb25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBt
X3VybFJld3JpdGVyLnJld3JpdGUoZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoYXR0
cmlidXRlLT52YWx1ZSgpKS5zdHJpbmcoKSk7CisgICAgfQorCisgICAgYm9vbCBpc0NoYXJzZXRE
ZWNsYXJhdGlvbihFbGVtZW50KiBlbGVtZW50KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGVsZW1l
bnQtPmhhc1RhZ05hbWUobWV0YVRhZykpOworICAgICAgICBTdHJpbmcgZXF1aXYgPSBtZXRhLT5o
dHRwRXF1aXYoKTsKKyAgICAgICAgU3RyaW5nIGNvbnRlbnQgPSBtZXRhLT5jb250ZW50KCk7Cisg
ICAgICAgIC8vIEZJWE1FOiBXaGF0IGFib3V0IDxtZXRhIGNoYXJzZXQ9Ii4uLiI+ID8KKyAgICAg
ICAgcmV0dXJuIGVxdWFsSWdub3JpbmdDYXNlKGVxdWl2LCAiY29udGVudC10eXBlIikgJiYgY29u
dGVudC5sZW5ndGgoKSAmJiBjb250ZW50LmNvbnRhaW5zKCJjaGFyc2V0IiwgZmFsc2UpOworICAg
IH0KKworICAgIHZvaWQgYXBwZW5kQmFzZUVsZW1lbnQoVmVjdG9yPFVDaGFyPiYgb3V0LCBIVE1M
QmFzZUVsZW1lbnQqIGJhc2UsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCisgICAgeworICAgICAg
ICAvLyBXZSB3YW50IHRvIHBpY2sgdXAgdGhlIHRhcmdldCBhdHRyaWJ1dGUgZnJvbSB0aGUgYmFz
ZSBlbGVtZW50LCBidXQKKyAgICAgICAgLy8gd2UgZG9uJ3Qgd2FudCB0byBwaWNrIHVwIHRoZSBo
cmVmIGF0dHJpYnV0ZS4KKyAgICAgICAgLy8gRklYTUU6IEN1cnJlbnRseSB3ZSdyZSB3aGl0ZWxp
c3RpbmcgdGhlIHRhcmdldCBhdHRyaWJ1dGUsIGJ1dAorICAgICAgICAvLyAgICAgICAgcGVyaGFw
cyB3ZSBzaG91bGQgYmxhY2tsaXN0IHRoZSBocmVmIGF0dHJpYnV0ZT8KKyAgICAgICAgUmVmUHRy
PEhUTUxCYXNlRWxlbWVudD4gZmFrZUJhc2UgPSBIVE1MQmFzZUVsZW1lbnQ6OmNyZWF0ZShiYXNl
VGFnLCBiYXNlLT5kb2N1bWVudCgpKTsKKyAgICAgICAgZmFrZUJhc2UtPnNldEF0dHJpYnV0ZSh0
YXJnZXRBdHRyLCBiYXNlLT5nZXRBdHRyaWJ1dGUodGFyZ2V0QXR0cikpOworICAgICAgICBNYXJr
dXBBY2N1bXVsYXRvcjo6YXBwZW5kRWxlbWVudChvdXQsIGZha2VCYXNlLCBuYW1lc3BhY2VzKTsK
KyAgICB9CisKKyAgICB2b2lkIGFwcGVuZE1hcmtPZlRoZVdlYihWZWN0b3I8VUNoYXI+JiBvdXQs
IGNvbnN0IEtVUkwqIHVybCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV9oYXZlQWRkZWRNYXJr
T2ZUaGVXZWIpOworICAgICAgICBtX2hhdmVBZGRlZE1hcmtPZlRoZVdlYiA9IHRydWU7CisgICAg
ICAgIC8vIFNlZSBodHRwOi8vbXNkbjIubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21zNTM3
NjI4KFZTLjg1KS5hc3B4LgorICAgICAgICBvdXQuYXBwZW5kKFdlYlBhZ2VTZXJpYWxpemVyOjpn
ZW5lcmF0ZU1hcmtPZlRoZVdlYkRlY2xhcmF0aW9uKHVybCkpOworICAgIH0KKworICAgIHZvaWQg
YXBwZW5kQ2hhcnNldERlY2xhcmF0aW9uKFZlY3RvcjxVQ2hhcj4mIG91dCwgSFRNTEhlYWRFbGVt
ZW50KiBoZWFkLCBOYW1lc3BhY2VzKiBuYW1lc3BhY2VzKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KCFtX2hhdmVBZGRlZENoYXJzZXREZWNsYXJhdGlvbik7CisgICAgICAgIG1faGF2ZUFkZGVkQ2hh
cnNldERlY2xhcmF0aW9uID0gdHJ1ZTsKICAgICAgICAgLy8gQ2hlY2sgbWV0YSBlbGVtZW50LiBX
ZWJLaXQgb25seSBwcmUtcGFyc2UgdGhlIGZpcnN0IDUxMiBieXRlcwogICAgICAgICAvLyBvZiB0
aGUgZG9jdW1lbnQuIElmIHRoZSB3aG9sZSA8SEVBRD4gaXMgbGFyZ2VyIGFuZCBtZXRhIGlzIHRo
ZQogICAgICAgICAvLyBlbmQgb2YgaGVhZCBwYXJ0LCB0aGVuIHRoaXMga2luZCBvZiBwYWdlcyBh
cmVuJ3QgZGVjb2RlZCBjb3JyZWN0bHkKQEAgLTIwNyw2MSArMjA0LDIxIEBAIFN0cmluZyBXZWJQ
YWdlU2VyaWFsaXplckltcGw6OnBvc3RBY3Rpb25BZnRlclNlcmlhbGl6ZU9wZW5UYWcoCiAgICAg
ICAgIC8vIG1ha2Ugc3VyZSB0aGUgbWV0YSB3aWxsIGluIGZpcnN0IGNoaWxkIG9mIGhlYWQgdGFn
LgogICAgICAgICAvLyBTZWUgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTY2MjEuCiAgICAgICAgIC8vIEZpcnN0IHdlIGdlbmVyYXRlIG5ldyBjb250ZW50IGZvciB3cml0
aW5nIGNvcnJlY3QgTUVUQSBlbGVtZW50LgotICAgICAgICByZXN1bHQuYXBwZW5kKFdlYlBhZ2VT
ZXJpYWxpemVyOjpnZW5lcmF0ZU1ldGFDaGFyc2V0RGVjbGFyYXRpb24oCi0gICAgICAgICAgICBT
dHJpbmcocGFyYW0tPnRleHRFbmNvZGluZy5uYW1lKCkpKSk7Ci0KLSAgICAgICAgcGFyYW0tPmhh
dmVBZGRlZENvbnRlbnRzQmVmb3JlRW5kID0gdHJ1ZTsKLSAgICAgICAgLy8gV2lsbCBzZWFyY2gg
ZWFjaCBNRVRBIHdoaWNoIGhhcyBjaGFyc2V0IGRlY2xhcmF0aW9uLCBhbmQgc2tpcCB0aGVtIGFs
bAotICAgICAgICAvLyBpbiBQcmVBY3Rpb25CZWZvcmVTZXJpYWxpemVPcGVuVGFnLgotICAgIH0g
ZWxzZSBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnNjcmlwdFRhZykKLSAgICAg
ICAgICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzdHlsZVRhZykpIHsK
LSAgICAgICAgcGFyYW0tPmlzSW5TY3JpcHRPclN0eWxlVGFnID0gdHJ1ZTsKKyAgICAgICAgUmVm
UHRyPEhUTUxNZXRhRWxlbWVudD4gZmFrZU1ldGEgPSBIVE1MTWV0YUVsZW1lbnQ6OmNyZWF0ZSht
ZXRhVGFnLCBoZWFkLT5kb2N1bWVudCgpKTsKKyAgICAgICAgZmFrZU1ldGEtPnNldEF0dHJpYnV0
ZShodHRwRXF1aXZBdHRyLCAiQ29udGVudC1UeXBlIik7CisgICAgICAgIGZha2VNZXRhLT5zZXRB
dHRyaWJ1dGUoY29udGVudEF0dHIsICJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiKTsKKyAgICAg
ICAgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVsZW1lbnQob3V0LCBmYWtlTWV0YSwgbmFtZXNw
YWNlcyk7CiAgICAgfQogCi0gICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworICAgIFVSTFJl
d3JpdGVyKiBtX3VybFJld3JpdGVyCisgICAgYm9vbCBtX2hhdmVBZGRlZE1hcmtPZlRoZVdlYjsK
KyAgICBib29sIG1faGF2ZUFkZGVkQ2hhcnNldERlY2xhcmF0aW9uOwogfQogCi1TdHJpbmcgV2Vi
UGFnZVNlcmlhbGl6ZXJJbXBsOjpwcmVBY3Rpb25CZWZvcmVTZXJpYWxpemVFbmRUYWcoCi0gICAg
Y29uc3QgRWxlbWVudCogZWxlbWVudCwgU2VyaWFsaXplRG9tUGFyYW0qIHBhcmFtLCBib29sKiBu
ZWVkU2tpcCkKLXsKLSAgICBTdHJpbmcgcmVzdWx0OwotCi0gICAgKm5lZWRTa2lwID0gZmFsc2U7
Ci0gICAgaWYgKCFwYXJhbS0+aXNIVE1MRG9jdW1lbnQpCi0gICAgICAgIHJldHVybiByZXN1bHQ7
Ci0gICAgLy8gU2tpcCB0aGUgZW5kIHRhZyBvZiBvcmlnaW5hbCBNRVRBIHRhZyB3aGljaCBkZWNs
YXJlIGNoYXJzZXQuCi0gICAgLy8gTmVlZCBub3QgdG8gY2hlY2sgd2hldGhlciBpdCdzIE1FVEEg
dGFnIHNpbmNlIHdlIGd1YXJhbnRlZQotICAgIC8vIHNraXBNZXRhRWxlbWVudCBpcyBkZWZpbml0
ZWx5IE1FVEEgdGFnIGlmIGl0J3Mgbm90IDAuCi0gICAgaWYgKHBhcmFtLT5za2lwTWV0YUVsZW1l
bnQgPT0gZWxlbWVudCkKLSAgICAgICAgKm5lZWRTa2lwID0gdHJ1ZTsKLSAgICBlbHNlIGlmIChl
bGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c2NyaXB0VGFnKQotICAgICAgICAgICAgIHx8
IGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzdHlsZVRhZykpIHsKLSAgICAgICAgQVNT
RVJUKHBhcmFtLT5pc0luU2NyaXB0T3JTdHlsZVRhZyk7Ci0gICAgICAgIHBhcmFtLT5pc0luU2Ny
aXB0T3JTdHlsZVRhZyA9IGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0K
LS8vIEFmdGVyIHdlIGZpbmlzaCBzZXJpYWxpemluZyBlbmQgdGFnIG9mIGEgZWxlbWVudCwgd2Ug
Z2l2ZSB0aGUgdGFyZ2V0Ci0vLyBlbGVtZW50IGEgY2hhbmNlIHRvIGRvIHNvbWUgcG9zdCB3b3Jr
IHRvIGFkZCBzb21lIGFkZGl0aW9uYWwgZGF0YS4KLVN0cmluZyBXZWJQYWdlU2VyaWFsaXplcklt
cGw6OnBvc3RBY3Rpb25BZnRlclNlcmlhbGl6ZUVuZFRhZygKLSAgICBjb25zdCBFbGVtZW50KiBl
bGVtZW50LCBTZXJpYWxpemVEb21QYXJhbSogcGFyYW0pCi17Ci0gICAgU3RyaW5nQnVpbGRlciBy
ZXN1bHQ7Ci0KLSAgICBpZiAoIXBhcmFtLT5pc0hUTUxEb2N1bWVudCkKLSAgICAgICAgcmV0dXJu
IHJlc3VsdC50b1N0cmluZygpOwotICAgIC8vIENvbW1lbnQgdGhlIEJBU0UgdGFnIHdoZW4gc2Vy
aWFsaXppbmcgRE9NLgotICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YmFz
ZVRhZykpIHsKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiLS0+Iik7Ci0gICAgICAgIC8vIEFwcGVu
ZCBhIG5ldyBiYXNlIHRhZyBkZWNsYXJhdGlvbi4KLSAgICAgICAgcmVzdWx0LmFwcGVuZChXZWJQ
YWdlU2VyaWFsaXplcjo6Z2VuZXJhdGVCYXNlVGFnRGVjbGFyYXRpb24oCi0gICAgICAgICAgICBw
YXJhbS0+ZG9jdW1lbnQtPmJhc2VUYXJnZXQoKSkpOwotICAgIH0KLQotICAgIHJldHVybiByZXN1
bHQudG9TdHJpbmcoKTsKLX0KKy8vIE1heGltdW0gbGVuZ3RoIG9mIGRhdGEgYnVmZmVyIHdoaWNo
IGlzIHVzZWQgdG8gdGVtcG9yYXJ5IHNhdmUgZ2VuZXJhdGVkCisvLyBodG1sIGNvbnRlbnQgZGF0
YS4gVGhpcyBpcyBhIHNvZnQgbGltaXQgd2hpY2ggbWlnaHQgYmUgcGFzc2VkIGlmIGEgdmVyeSBs
YXJnZQorLy8gY29udGVnaW91cyBzdHJpbmcgaXMgZm91bmQgaW4gdGhlIHBhZ2UuCitzdGF0aWMg
Y29uc3QgdW5zaWduZWQgZGF0YUJ1ZmZlckNhcGFjaXR5ID0gNjU1MzY7CiAKIHZvaWQgV2ViUGFn
ZVNlcmlhbGl6ZXJJbXBsOjpzYXZlSFRNTENvbnRlbnRUb0J1ZmZlcigKICAgICBjb25zdCBTdHJp
bmcmIHJlc3VsdCwgU2VyaWFsaXplRG9tUGFyYW0qIHBhcmFtKQpAQCAtMjk0LDE0MCArMjUxLDYg
QEAgdm9pZCBXZWJQYWdlU2VyaWFsaXplckltcGw6OmVuY29kZUFuZEZsdXNoQnVmZmVyKAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzKTsKIH0KIAotdm9pZCBX
ZWJQYWdlU2VyaWFsaXplckltcGw6Om9wZW5UYWdUb1N0cmluZyhjb25zdCBFbGVtZW50KiBlbGVt
ZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXJpYWxp
emVEb21QYXJhbSogcGFyYW0pCi17Ci0gICAgLy8gRklYTUU6IHVzZSBTdHJpbmdCdWlsZGVyIGlu
c3RlYWQgb2YgU3RyaW5nLgotICAgIGJvb2wgbmVlZFNraXA7Ci0gICAgLy8gRG8gcHJlIGFjdGlv
biBmb3Igb3BlbiB0YWcuCi0gICAgU3RyaW5nIHJlc3VsdCA9IHByZUFjdGlvbkJlZm9yZVNlcmlh
bGl6ZU9wZW5UYWcoZWxlbWVudCwgcGFyYW0sICZuZWVkU2tpcCk7Ci0gICAgaWYgKG5lZWRTa2lw
KQotICAgICAgICByZXR1cm47Ci0gICAgLy8gQWRkIG9wZW4gdGFnCi0gICAgcmVzdWx0ICs9ICI8
IiArIGVsZW1lbnQtPm5vZGVOYW1lKCkubG93ZXIoKTsKLSAgICAvLyBHbyB0aHJvdWdoIGFsbCBh
dHRyaWJ1dGVzIGFuZCBzZXJpYWxpemUgdGhlbS4KLSAgICBjb25zdCBOYW1lZE5vZGVNYXAgKmF0
dHJNYXAgPSBlbGVtZW50LT5hdHRyaWJ1dGVzKHRydWUpOwotICAgIGlmIChhdHRyTWFwKSB7Ci0g
ICAgICAgIHVuc2lnbmVkIG51bUF0dHJzID0gYXR0ck1hcC0+bGVuZ3RoKCk7Ci0gICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1BdHRyczsgaSsrKSB7Ci0gICAgICAgICAgICByZXN1
bHQgKz0gIiAiOwotICAgICAgICAgICAgLy8gQWRkIGF0dHJpYnV0ZSBwYWlyCi0gICAgICAgICAg
ICBjb25zdCBBdHRyaWJ1dGUgKmF0dHJpYnV0ZSA9IGF0dHJNYXAtPmF0dHJpYnV0ZUl0ZW0oaSk7
Ci0gICAgICAgICAgICByZXN1bHQgKz0gYXR0cmlidXRlLT5uYW1lKCkudG9TdHJpbmcoKTsKLSAg
ICAgICAgICAgIHJlc3VsdCArPSAiPVwiIjsKLSAgICAgICAgICAgIGlmICghYXR0cmlidXRlLT52
YWx1ZSgpLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgYXR0clZh
bHVlID0gYXR0cmlidXRlLT52YWx1ZSgpOwotCi0gICAgICAgICAgICAgICAgLy8gQ2hlY2sgd2hl
dGhlciB3ZSBuZWVkIHRvIHJlcGxhY2Ugc29tZSByZXNvdXJjZSBsaW5rcwotICAgICAgICAgICAg
ICAgIC8vIHdpdGggbG9jYWwgcmVzb3VyY2UgcGF0aHMuCi0gICAgICAgICAgICAgICAgY29uc3Qg
UXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUgPSBhdHRyaWJ1dGUtPm5hbWUoKTsKLSAgICAgICAgICAg
ICAgICBpZiAoZWxlbWVudEhhc0xlZ2FsTGlua0F0dHJpYnV0ZShlbGVtZW50LCBhdHRyTmFtZSkp
IHsKLSAgICAgICAgICAgICAgICAgICAgLy8gRm9yIGxpbmtzIHN0YXJ0IHdpdGggImphdmFzY3Jp
cHQ6Iiwgd2UgZG8gbm90IGNoYW5nZSBpdC4KLSAgICAgICAgICAgICAgICAgICAgaWYgKGF0dHJW
YWx1ZS5zdGFydHNXaXRoKCJqYXZhc2NyaXB0OiIsIGZhbHNlKSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdCArPSBhdHRyVmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBhYnNvbHV0ZSBsaW5rCi0gICAgICAg
ICAgICAgICAgICAgICAgICBTdHJpbmcgY29tcGxldGVVUkwgPSBwYXJhbS0+ZG9jdW1lbnQtPmNv
bXBsZXRlVVJMKGF0dHJWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayB3
aGV0aGVyIHdlIGhhdmUgbG9jYWwgZmlsZXMgZm9yIHRob3NlIGxpbmsuCi0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAobV9sb2NhbExpbmtzLmNvbnRhaW5zKGNvbXBsZXRlVVJMKSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbV9sb2NhbERpcmVjdG9yeU5hbWUuaXNFbXB0
eSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gIi4vIiArIG1f
bG9jYWxEaXJlY3RvcnlOYW1lICsgIi8iOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3VsdCArPSBtX2xvY2FsTGlua3MuZ2V0KGNvbXBsZXRlVVJMKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBjb21w
bGV0ZVVSTDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbS0+aXNIVE1MRG9jdW1lbnQpCi0gICAgICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgKz0gbV9odG1sRW50aXRpZXMuY29udmVydEVudGl0aWVz
SW5TdHJpbmcoYXR0clZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0ICs9IG1feG1sRW50aXRpZXMuY29udmVydEVudGl0aWVzSW5T
dHJpbmcoYXR0clZhbHVlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICByZXN1bHQgKz0gIlwiIjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIERvIHBv
c3QgYWN0aW9uIGZvciBvcGVuIHRhZy4KLSAgICBTdHJpbmcgYWRkZWRDb250ZW50cyA9IHBvc3RB
Y3Rpb25BZnRlclNlcmlhbGl6ZU9wZW5UYWcoZWxlbWVudCwgcGFyYW0pOwotICAgIC8vIENvbXBs
ZXRlIHRoZSBvcGVuIHRhZyBmb3IgZWxlbWVudCB3aGVuIGl0IGhhcyBjaGlsZC9jaGlsZHJlbi4K
LSAgICBpZiAoZWxlbWVudC0+aGFzQ2hpbGROb2RlcygpIHx8IHBhcmFtLT5oYXZlQWRkZWRDb250
ZW50c0JlZm9yZUVuZCkKLSAgICAgICAgcmVzdWx0ICs9ICI+IjsKLSAgICAvLyBBcHBlbmQgdGhl
IGFkZGVkIGNvbnRlbnRzIGdlbmVyYXRlIGluICBwb3N0IGFjdGlvbiBvZiBvcGVuIHRhZy4KLSAg
ICByZXN1bHQgKz0gYWRkZWRDb250ZW50czsKLSAgICAvLyBTYXZlIHRoZSByZXN1bHQgdG8gZGF0
YSBidWZmZXIuCi0gICAgc2F2ZUhUTUxDb250ZW50VG9CdWZmZXIocmVzdWx0LCBwYXJhbSk7Ci19
Ci0KLS8vIFNlcmlhbGl6ZSBlbmQgdGFnIG9mIGFuIHNwZWNpZmllZCBlbGVtZW50Lgotdm9pZCBX
ZWJQYWdlU2VyaWFsaXplckltcGw6OmVuZFRhZ1RvU3RyaW5nKGNvbnN0IEVsZW1lbnQqIGVsZW1l
bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VyaWFsaXpl
RG9tUGFyYW0qIHBhcmFtKQotewotICAgIGJvb2wgbmVlZFNraXA7Ci0gICAgLy8gRG8gcHJlIGFj
dGlvbiBmb3IgZW5kIHRhZy4KLSAgICBTdHJpbmcgcmVzdWx0ID0gcHJlQWN0aW9uQmVmb3JlU2Vy
aWFsaXplRW5kVGFnKGVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwYXJhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICZuZWVkU2tpcCk7Ci0gICAgaWYgKG5lZWRTa2lwKQotICAgICAg
ICByZXR1cm47Ci0gICAgLy8gV3JpdGUgZW5kIHRhZyB3aGVuIGVsZW1lbnQgaGFzIGNoaWxkL2No
aWxkcmVuLgotICAgIGlmIChlbGVtZW50LT5oYXNDaGlsZE5vZGVzKCkgfHwgcGFyYW0tPmhhdmVB
ZGRlZENvbnRlbnRzQmVmb3JlRW5kKSB7Ci0gICAgICAgIHJlc3VsdCArPSAiPC8iOwotICAgICAg
ICByZXN1bHQgKz0gZWxlbWVudC0+bm9kZU5hbWUoKS5sb3dlcigpOwotICAgICAgICByZXN1bHQg
Kz0gIj4iOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIENoZWNrIHdoZXRoZXIgd2UgaGF2ZSB0
byB3cml0ZSBlbmQgdGFnIGZvciBlbXB0eSBlbGVtZW50LgotICAgICAgICBpZiAocGFyYW0tPmlz
SFRNTERvY3VtZW50KSB7Ci0gICAgICAgICAgICByZXN1bHQgKz0gIj4iOwotICAgICAgICAgICAg
Ly8gRklYTUU6IFRoaXMgY29kZSBpcyBob3JyaWJseSB3cm9uZy4gIFdlYlBhZ2VTZXJpYWxpemVy
SW1wbCBtdXN0IGRpZS4KLSAgICAgICAgICAgIGlmICghc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTEVs
ZW1lbnQqPihlbGVtZW50KS0+aWVGb3JiaWRzSW5zZXJ0SFRNTCgpKSB7Ci0gICAgICAgICAgICAg
ICAgLy8gV2UgbmVlZCB0byB3cml0ZSBlbmQgdGFnIHdoZW4gaXQgaXMgcmVxdWlyZWQuCi0gICAg
ICAgICAgICAgICAgcmVzdWx0ICs9ICI8LyI7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ICs9IGVs
ZW1lbnQtPm5vZGVOYW1lKCkubG93ZXIoKTsKLSAgICAgICAgICAgICAgICByZXN1bHQgKz0gIj4i
OwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gRm9yIHht
bCBiYXNlIGRvY3VtZW50LgotICAgICAgICAgICAgcmVzdWx0ICs9ICIgLz4iOwotICAgICAgICB9
Ci0gICAgfQotICAgIC8vIERvIHBvc3QgYWN0aW9uIGZvciBlbmQgdGFnLgotICAgIHJlc3VsdCAr
PSBwb3N0QWN0aW9uQWZ0ZXJTZXJpYWxpemVFbmRUYWcoZWxlbWVudCwgcGFyYW0pOwotICAgIC8v
IFNhdmUgdGhlIHJlc3VsdCB0byBkYXRhIGJ1ZmZlci4KLSAgICBzYXZlSFRNTENvbnRlbnRUb0J1
ZmZlcihyZXN1bHQsIHBhcmFtKTsKLX0KLQotdm9pZCBXZWJQYWdlU2VyaWFsaXplckltcGw6OmJ1
aWxkQ29udGVudEZvck5vZGUoY29uc3QgTm9kZSogbm9kZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlcmlhbGl6ZURvbVBhcmFtKiBwYXJhbSkKLXsK
LSAgICBzd2l0Y2ggKG5vZGUtPm5vZGVUeXBlKCkpIHsKLSAgICBjYXNlIE5vZGU6OkVMRU1FTlRf
Tk9ERToKLSAgICAgICAgLy8gUHJvY2VzcyBvcGVuIHRhZyBvZiBlbGVtZW50LgotICAgICAgICBv
cGVuVGFnVG9TdHJpbmcoc3RhdGljX2Nhc3Q8Y29uc3QgRWxlbWVudCo+KG5vZGUpLCBwYXJhbSk7
Ci0gICAgICAgIC8vIFdhbGsgdGhyb3VnaCB0aGUgY2hpbGRyZW4gbm9kZXMgYW5kIHByb2Nlc3Mg
aXQuCi0gICAgICAgIGZvciAoY29uc3QgTm9kZSAqY2hpbGQgPSBub2RlLT5maXJzdENoaWxkKCk7
IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQotICAgICAgICAgICAgYnVpbGRD
b250ZW50Rm9yTm9kZShjaGlsZCwgcGFyYW0pOwotICAgICAgICAvLyBQcm9jZXNzIGVuZCB0YWcg
b2YgZWxlbWVudC4KLSAgICAgICAgZW5kVGFnVG9TdHJpbmcoc3RhdGljX2Nhc3Q8Y29uc3QgRWxl
bWVudCo+KG5vZGUpLCBwYXJhbSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTm9kZTo6VEVY
VF9OT0RFOgotICAgICAgICBzYXZlSFRNTENvbnRlbnRUb0J1ZmZlcihjcmVhdGVNYXJrdXAobm9k
ZSksIHBhcmFtKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBOb2RlOjpBVFRSSUJVVEVfTk9E
RToKLSAgICBjYXNlIE5vZGU6OkRPQ1VNRU5UX05PREU6Ci0gICAgY2FzZSBOb2RlOjpET0NVTUVO
VF9GUkFHTUVOVF9OT0RFOgotICAgICAgICAvLyBTaG91bGQgbm90IGV4aXN0LgotICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgLy8gRG9jdW1lbnQgdHlw
ZSBub2RlIGNhbiBiZSBpbiBET00/Ci0gICAgY2FzZSBOb2RlOjpET0NVTUVOVF9UWVBFX05PREU6
Ci0gICAgICAgIHBhcmFtLT5oYXZlU2VlbkRvY1R5cGUgPSB0cnVlOwotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIC8vIEZvciBvdGhlciB0eXBlIG5vZGUsIGNhbGwgZGVmYXVsdCBhY3Rpb24uCi0gICAg
ICAgIHNhdmVIVE1MQ29udGVudFRvQnVmZmVyKGNyZWF0ZU1hcmt1cChub2RlKSwgcGFyYW0pOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KIFdlYlBhZ2VTZXJpYWxpemVySW1wbDo6V2ViUGFn
ZVNlcmlhbGl6ZXJJbXBsKFdlYkZyYW1lKiBmcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVjdXJzaXZlU2VyaWFsaXphdGlvbiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYlBhZ2VTZXJpYWxpemVy
Q2xpZW50KiBjbGllbnQsCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VT
ZXJpYWxpemVySW1wbC5oIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQYWdlU2VyaWFsaXplcklt
cGwuaAppbmRleCA1ZWU4ODA1MzYyOThiMTEzMWM2ZGE3ZDIyNzliNTFkZTFlNWE2MDY0Li5lYWVh
NmVkYjMwNjJhN2JkOWQzNTAyZDQ0ZjUzMGVmY2ZkMzRhYmI4IDEwMDY0NAotLS0gYS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYlBhZ2VTZXJpYWxpemVySW1wbC5oCisrKyBiL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViUGFnZVNlcmlhbGl6ZXJJbXBsLmgKQEAgLTM4LDcgKzM4LDYgQEAKICNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CiAKLSNpbmNsdWRlICJXZWJFbnRpdGllcy5oIgogI2luY2x1ZGUgIldlYlBhZ2VTZXJpYWxpemVy
LmgiCiAjaW5jbHVkZSAiV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQuaCIKICNpbmNsdWRlICJXZWJT
dHJpbmcuaCIKQEAgLTUyLDYgKzUxLDcgQEAgY2xhc3MgVGV4dEVuY29kaW5nOwogfQogCiBuYW1l
c3BhY2UgV2ViS2l0IHsKKwogY2xhc3MgV2ViRnJhbWVJbXBsOwogCiAvLyBHZXQgaHRtbCBkYXRh
IGJ5IHNlcmlhbGl6aW5nIGFsbCBmcmFtZXMgb2YgY3VycmVudCBwYWdlIHdpdGggbGlzdHMKQEAg
LTg3LDYgKzg3LDI1IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
V2ViU3RyaW5nJiBsb2NhbERpcmVjdG9yeU5hbWUpOwogCiBwcml2YXRlOgorICAgIC8vIENvbGxl
Y3QgYWxsIHRhcmdldCBmcmFtZXMgd2hpY2ggbmVlZCB0byBiZSBzZXJpYWxpemVkLgorICAgIHZv
aWQgY29sbGVjdFRhcmdldEZyYW1lcygpOworCisgICAgLy8gU2F2ZSBnZW5lcmF0ZWQgaHRtbCBj
b250ZW50IHRvIGRhdGEgYnVmZmVyLgorICAgIHZvaWQgc2F2ZUhUTUxDb250ZW50VG9CdWZmZXIo
Y29uc3QgV1RGOjpTdHJpbmcmIGNvbnRlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBTZXJpYWxpemVEb21QYXJhbSogcGFyYW0pOworCisgICAgZW51bSBGbHVzaE9wdGlvbiB7
CisgICAgICAgIEZvcmNlRmx1c2gsCisgICAgICAgIERvTm90Rm9yY2VGbHVzaCwKKyAgICB9Owor
CisgICAgLy8gRmx1c2hlcyB0aGUgY29udGVudCBidWZmZXIgYnkgZW5jb2RpbmcgYW5kIHNlbmRp
bmcgdGhlIGNvbnRlbnQgdG8gdGhlCisgICAgLy8gV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQuIENv
bnRlbnQgaXMgbm90IGZsdXNoZWQgaWYgdGhlIGJ1ZmZlciBpcyBub3QgZnVsbAorICAgIC8vIHVu
bGVzcyBmb3JjZSBpcyAxLgorICAgIHZvaWQgZW5jb2RlQW5kRmx1c2hCdWZmZXIoV2ViUGFnZVNl
cmlhbGl6ZXJDbGllbnQ6OlBhZ2VTZXJpYWxpemF0aW9uU3RhdHVzIHN0YXR1cywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFNlcmlhbGl6ZURvbVBhcmFtKiBwYXJhbSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEZsdXNoT3B0aW9uKTsKKwogICAgIC8vIFNwZWNpZmllZCBm
cmFtZSB3aGljaCBuZWVkIHRvIGJlIHNlcmlhbGl6ZWQ7CiAgICAgV2ViRnJhbWVJbXBsKiBtX3Nw
ZWNpZmllZFdlYkZyYW1lSW1wbDsKICAgICAvLyBQb2ludGVyIG9mIFdlYlBhZ2VTZXJpYWxpemVy
Q2xpZW50CkBAIC0xMTAsNzggKzEyOSw2IEBAIHByaXZhdGU6CiAgICAgV1RGOjpTdHJpbmcgbV9s
b2NhbERpcmVjdG9yeU5hbWU7CiAgICAgLy8gVmVjdG9yIGZvciBzYXZpbmcgYWxsIGZyYW1lcyB3
aGljaCBuZWVkIHRvIGJlIHNlcmlhbGl6ZWQuCiAgICAgVmVjdG9yPFdlYkZyYW1lSW1wbCo+IG1f
ZnJhbWVzOwotCi0gICAgLy8gV2ViIGVudGl0aWVzIGNvbnZlcnNpb24gbWFwcy4KLSAgICBXZWJF
bnRpdGllcyBtX2h0bWxFbnRpdGllczsKLSAgICBXZWJFbnRpdGllcyBtX3htbEVudGl0aWVzOwot
Ci0gICAgc3RydWN0IFNlcmlhbGl6ZURvbVBhcmFtIHsKLSAgICAgICAgY29uc3QgV2ViQ29yZTo6
S1VSTCYgdXJsOwotICAgICAgICBjb25zdCBXZWJDb3JlOjpUZXh0RW5jb2RpbmcmIHRleHRFbmNv
ZGluZzsKLSAgICAgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGRvY3VtZW50OwotICAgICAgICBjb25z
dCBXVEY6OlN0cmluZyYgZGlyZWN0b3J5TmFtZTsKLSAgICAgICAgYm9vbCBpc0hUTUxEb2N1bWVu
dDsgLy8gZG9jdW1lbnQuaXNIVE1MRG9jdW1lbnQoKQotICAgICAgICBib29sIGhhdmVTZWVuRG9j
VHlwZTsKLSAgICAgICAgYm9vbCBoYXZlQWRkZWRDaGFyc2V0RGVjbGFyYXRpb247Ci0gICAgICAg
IC8vIFRoaXMgbWV0YSBlbGVtZW50IG5lZWQgdG8gYmUgc2tpcHBlZCB3aGVuIHNlcmlhbGl6aW5n
IERPTS4KLSAgICAgICAgY29uc3QgV2ViQ29yZTo6RWxlbWVudCogc2tpcE1ldGFFbGVtZW50Owot
ICAgICAgICAvLyBGbGFnIGluZGljYXRlcyB3ZSBhcmUgaW4gc2NyaXB0IG9yIHN0eWxlIHRhZy4K
LSAgICAgICAgYm9vbCBpc0luU2NyaXB0T3JTdHlsZVRhZzsKLSAgICAgICAgYm9vbCBoYXZlQWRk
ZWRYTUxQcm9jZXNzaW5nRGlyZWN0aXZlOwotICAgICAgICAvLyBGbGFnIGluZGljYXRlcyB3aGV0
aGVyIHdlIGhhdmUgYWRkZWQgYWRkaXRpb25hbCBjb250ZW50cyBiZWZvcmUgZW5kIHRhZy4KLSAg
ICAgICAgLy8gVGhpcyBmbGFnIHdpbGwgYmUgcmUtYXNzaWduZWQgaW4gZWFjaCBjYWxsIG9mIGZ1
bmN0aW9uCi0gICAgICAgIC8vIFBvc3RBY3Rpb25BZnRlclNlcmlhbGl6ZU9wZW5UYWcgYW5kIGl0
IGNvdWxkIGJlIGNoYW5nZWQgaW4gZnVuY3Rpb24KLSAgICAgICAgLy8gUHJlQWN0aW9uQmVmb3Jl
U2VyaWFsaXplRW5kVGFnIGlmIHRoZSBmdW5jdGlvbiBhZGRzIG5ldyBjb250ZW50cyBpbnRvCi0g
ICAgICAgIC8vIHNlcmlhbGl6YXRpb24gc3RyZWFtLgotICAgICAgICBib29sIGhhdmVBZGRlZENv
bnRlbnRzQmVmb3JlRW5kOwotCi0gICAgICAgIFNlcmlhbGl6ZURvbVBhcmFtKGNvbnN0IFdlYkNv
cmU6OktVUkwmLCBjb25zdCBXZWJDb3JlOjpUZXh0RW5jb2RpbmcmLCBXZWJDb3JlOjpEb2N1bWVu
dCosIGNvbnN0IFdURjo6U3RyaW5nJiBkaXJlY3RvcnlOYW1lKTsKLSAgICB9OwotCi0gICAgLy8g
Q29sbGVjdCBhbGwgdGFyZ2V0IGZyYW1lcyB3aGljaCBuZWVkIHRvIGJlIHNlcmlhbGl6ZWQuCi0g
ICAgdm9pZCBjb2xsZWN0VGFyZ2V0RnJhbWVzKCk7Ci0gICAgLy8gQmVmb3JlIHdlIGJlZ2luIHNl
cmlhbGl6aW5nIG9wZW4gdGFnIG9mIGEgZWxlbWVudCwgd2UgZ2l2ZSB0aGUgdGFyZ2V0Ci0gICAg
Ly8gZWxlbWVudCBhIGNoYW5jZSB0byBkbyBzb21lIHdvcmsgcHJpb3IgdG8gYWRkIHNvbWUgYWRk
aXRpb25hbCBkYXRhLgotICAgIFdURjo6U3RyaW5nIHByZUFjdGlvbkJlZm9yZVNlcmlhbGl6ZU9w
ZW5UYWcoY29uc3QgV2ViQ29yZTo6RWxlbWVudCogZWxlbWVudCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXJpYWxpemVEb21QYXJhbSogcGFy
YW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCogbmVlZFNraXApOwotICAgIC8vIEFmdGVyIHdlIGZpbmlzaCBzZXJpYWxpemluZyBvcGVu
IHRhZyBvZiBhIGVsZW1lbnQsIHdlIGdpdmUgdGhlIHRhcmdldAotICAgIC8vIGVsZW1lbnQgYSBj
aGFuY2UgdG8gZG8gc29tZSBwb3N0IHdvcmsgdG8gYWRkIHNvbWUgYWRkaXRpb25hbCBkYXRhLgot
ICAgIFdURjo6U3RyaW5nIHBvc3RBY3Rpb25BZnRlclNlcmlhbGl6ZU9wZW5UYWcoY29uc3QgV2Vi
Q29yZTo6RWxlbWVudCogZWxlbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBTZXJpYWxpemVEb21QYXJhbSogcGFyYW0pOwotICAgIC8vIEJl
Zm9yZSB3ZSBiZWdpbiBzZXJpYWxpemluZyBlbmQgdGFnIG9mIGEgZWxlbWVudCwgd2UgZ2l2ZSB0
aGUgdGFyZ2V0Ci0gICAgLy8gZWxlbWVudCBhIGNoYW5jZSB0byBkbyBzb21lIHdvcmsgcHJpb3Ig
dG8gYWRkIHNvbWUgYWRkaXRpb25hbCBkYXRhLgotICAgIFdURjo6U3RyaW5nIHByZUFjdGlvbkJl
Zm9yZVNlcmlhbGl6ZUVuZFRhZyhjb25zdCBXZWJDb3JlOjpFbGVtZW50KiBlbGVtZW50LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VyaWFsaXpl
RG9tUGFyYW0qIHBhcmFtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCogbmVlZFNraXApOwotICAgIC8vIEFmdGVyIHdlIGZpbmlzaCBzZXJp
YWxpemluZyBlbmQgdGFnIG9mIGEgZWxlbWVudCwgd2UgZ2l2ZSB0aGUgdGFyZ2V0Ci0gICAgLy8g
ZWxlbWVudCBhIGNoYW5jZSB0byBkbyBzb21lIHBvc3Qgd29yayB0byBhZGQgc29tZSBhZGRpdGlv
bmFsIGRhdGEuCi0gICAgV1RGOjpTdHJpbmcgcG9zdEFjdGlvbkFmdGVyU2VyaWFsaXplRW5kVGFn
KGNvbnN0IFdlYkNvcmU6OkVsZW1lbnQqIGVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXJpYWxpemVEb21QYXJhbSogcGFyYW0pOwot
ICAgIC8vIFNhdmUgZ2VuZXJhdGVkIGh0bWwgY29udGVudCB0byBkYXRhIGJ1ZmZlci4KLSAgICB2
b2lkIHNhdmVIVE1MQ29udGVudFRvQnVmZmVyKGNvbnN0IFdURjo6U3RyaW5nJiBjb250ZW50LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VyaWFsaXplRG9tUGFyYW0qIHBhcmFt
KTsKLQotICAgIGVudW0gRmx1c2hPcHRpb24gewotICAgICAgICBGb3JjZUZsdXNoLAotICAgICAg
ICBEb05vdEZvcmNlRmx1c2gsCi0gICAgfTsKLQotICAgIC8vIEZsdXNoZXMgdGhlIGNvbnRlbnQg
YnVmZmVyIGJ5IGVuY29kaW5nIGFuZCBzZW5kaW5nIHRoZSBjb250ZW50IHRvIHRoZQotICAgIC8v
IFdlYlBhZ2VTZXJpYWxpemVyQ2xpZW50LiBDb250ZW50IGlzIG5vdCBmbHVzaGVkIGlmIHRoZSBi
dWZmZXIgaXMgbm90IGZ1bGwKLSAgICAvLyB1bmxlc3MgZm9yY2UgaXMgMS4KLSAgICB2b2lkIGVu
Y29kZUFuZEZsdXNoQnVmZmVyKFdlYlBhZ2VTZXJpYWxpemVyQ2xpZW50OjpQYWdlU2VyaWFsaXph
dGlvblN0YXR1cyBzdGF0dXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXJpYWxp
emVEb21QYXJhbSogcGFyYW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbHVzaE9w
dGlvbik7Ci0gICAgLy8gU2VyaWFsaXplIG9wZW4gdGFnIG9mIGFuIHNwZWNpZmllZCBlbGVtZW50
LgotICAgIHZvaWQgb3BlblRhZ1RvU3RyaW5nKGNvbnN0IFdlYkNvcmU6OkVsZW1lbnQqIGVsZW1l
bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgU2VyaWFsaXplRG9tUGFyYW0qIHBhcmFtKTsK
LSAgICAvLyBTZXJpYWxpemUgZW5kIHRhZyBvZiBhbiBzcGVjaWZpZWQgZWxlbWVudC4KLSAgICB2
b2lkIGVuZFRhZ1RvU3RyaW5nKGNvbnN0IFdlYkNvcmU6OkVsZW1lbnQqIGVsZW1lbnQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICBTZXJpYWxpemVEb21QYXJhbSogcGFyYW0pOwotICAgIC8vIEJ1
aWxkIGNvbnRlbnQgZm9yIGEgc3BlY2lmaWVkIG5vZGUKLSAgICB2b2lkIGJ1aWxkQ29udGVudEZv
ck5vZGUoY29uc3QgV2ViQ29yZTo6Tm9kZSogbm9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgU2VyaWFsaXplRG9tUGFyYW0qIHBhcmFtKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YktpdAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70929</attachid>
            <date>2010-10-15 17:32:33 -0700</date>
            <delta_ts>2010-10-18 14:00:46 -0700</delta_ts>
            <desc>mostly there</desc>
            <filename>bug-47748-20101015173232.patch</filename>
            <type>text/plain</type>
            <size>33660</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5jcHAgYi9XZWJD
b3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuY3BwCmluZGV4IGFhNmU1Y2YzZGFlZmFkOTUy
ZDYyNmMxZGQ2ZjgxNDdhYWNjNWQzYjcuLmUxYjUwZjQxMmM1MjUwODk0Zjk3ZTE3NjhlMDc2Mzg1
NGFkZTAyNjQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5j
cHAKKysrIGIvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmNwcApAQCAtMzM2LDgg
KzMzNiw4IEBAIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEF0dHJpYnV0ZShWZWN0b3I8
VUNoYXI+JiBvdXQsIEVsZW1lbnQqIGVsZW1lbnQsIGNvCiAgICAgaWYgKGVsZW1lbnQtPmlzVVJM
QXR0cmlidXRlKGNvbnN0X2Nhc3Q8QXR0cmlidXRlKj4oJmF0dHJpYnV0ZSkpKSB7CiAgICAgICAg
IC8vIFdlIGRvbid0IHdhbnQgdG8gY29tcGxldGUgZmlsZTovLy8gVVJMcyBiZWNhdXNlIGl0IG1h
eSBjb250YWluIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbgogICAgICAgICAvLyBhYm91dCB0aGUgdXNl
cidzIHN5c3RlbS4KLSAgICAgICAgaWYgKHNob3VsZFJlc29sdmVVUkxzKCkgJiYgIWVsZW1lbnQt
PmRvY3VtZW50KCktPnVybCgpLmlzTG9jYWxGaWxlKCkpCi0gICAgICAgICAgICBhcHBlbmRRdW90
ZWRVUkxBdHRyaWJ1dGVWYWx1ZShvdXQsIGVsZW1lbnQtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJM
KGF0dHJpYnV0ZS52YWx1ZSgpKS5zdHJpbmcoKSk7CisgICAgICAgIGlmIChzaG91bGRSZXNvbHZl
VVJMcygpKQorICAgICAgICAgICAgYXBwZW5kUXVvdGVkVVJMQXR0cmlidXRlVmFsdWUob3V0LCBy
ZXNvbHZlVVJMKGVsZW1lbnQsIGF0dHJpYnV0ZSkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAg
ICBhcHBlbmRRdW90ZWRVUkxBdHRyaWJ1dGVWYWx1ZShvdXQsIGF0dHJpYnV0ZS52YWx1ZSgpKTsg
CiAgICAgfSBlbHNlIHsKQEAgLTM1MCw2ICszNTAsMTMgQEAgdm9pZCBNYXJrdXBBY2N1bXVsYXRv
cjo6YXBwZW5kQXR0cmlidXRlKFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCogZWxlbWVudCwg
Y28KICAgICAgICAgYXBwZW5kTmFtZXNwYWNlKG91dCwgYXR0cmlidXRlLnByZWZpeCgpLCBhdHRy
aWJ1dGUubmFtZXNwYWNlVVJJKCksICpuYW1lc3BhY2VzKTsKIH0KIAorU3RyaW5nIE1hcmt1cEFj
Y3VtdWxhdG9yOjpyZXNvbHZlVVJMKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEF0dHJpYnV0ZSYg
YXR0cmlidXRlKQoreworICAgIGlmIChlbGVtZW50LT5kb2N1bWVudCgpLT51cmwoKS5pc0xvY2Fs
RmlsZSgpKQorICAgICAgICByZXR1cm4gYXR0cmlidXRlLnZhbHVlKCk7CisgICAgcmV0dXJuIGVs
ZW1lbnQtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGF0dHJpYnV0ZS52YWx1ZSgpKS5zdHJpbmco
KTsKK30KKwogdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQ0RBVEFTZWN0aW9uKFZlY3Rv
cjxVQ2hhcj4mIG91dCwgY29uc3QgU3RyaW5nJiBzZWN0aW9uKQogewogICAgIC8vIEZJWE1FOiBD
REFUQSBjb250ZW50IGlzIG5vdCBlc2NhcGVkLCBidXQgWE1MU2VyaWFsaXplciAoYW5kIHBvc3Np
Ymx5IG90aGVyIGNhbGxlcnMpIHNob3VsZCByYWlzZSBhbiBleGNlcHRpb24gaWYgaXQgaW5jbHVk
ZXMgIl1dPiIuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3Iu
aCBiL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5oCmluZGV4IDM3NDEyNTk3NmRl
YTBiZDg5YTllOTUyNDI1NzljMDAyNTQ5Nzk3OTYuLjMwNWExMTZjMzA1NzA1MTk2ZDE3MzUwOTdh
OTNlMzJlNWNlYzg4ZTEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVs
YXRvci5oCisrKyBiL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5oCkBAIC05Niw2
ICs5Niw3IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIGFwcGVuZEVuZE1hcmt1cChWZWN0b3I8VUNo
YXI+JiByZXN1bHQsIGNvbnN0IE5vZGUqKTsKIAogICAgIGJvb2wgc2hvdWxkUmVzb2x2ZVVSTHMo
KSB7IHJldHVybiBtX3Nob3VsZFJlc29sdmVVUkxzID09IEFic29sdXRlVVJMczsgfQorICAgIHZp
cnR1YWwgU3RyaW5nIHJlc29sdmVVUkwoRWxlbWVudCogZWxlbWVudCwgY29uc3QgQXR0cmlidXRl
JiBhdHRyaWJ1dGUpCiAKICAgICBWZWN0b3I8Tm9kZSo+KiBjb25zdCBtX25vZGVzOwogICAgIGNv
bnN0IFJhbmdlKiBjb25zdCBtX3JhbmdlOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggZGZiODMzODA4YzIyYmY1
YzJiZTIyMzM5MzU2NDE4MTEyMDdmODYyYy4uZjgxNzk4MDdiN2RkYWRmMjkwODE5NzliZjFhMjk4
NmE2MzMzMjczNiAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTAtMTAtMTUgIEFk
YW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBXZWJQYWdlU2VyaWFsaXplckltcGwgZHVwbGljYXRlcyAo
cG9vcmx5KSBhIGxvdCBvZiBjb2RlIGZyb20gTWFya3VwQWNjdW11bGF0b3IKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3NzQ4CisKKyAgICAgICAgKiBz
cmMvV2ViUGFnZVNlcmlhbGl6ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6WFhYTWFya3Vw
QWNjdW11bGF0b3I6OlhYWE1hcmt1cEFjY3VtdWxhdG9yKToKKyAgICAgICAgKFdlYktpdDo6WFhY
TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVsZW1lbnQpOgorICAgICAgICAoV2ViS2l0OjpYWFhN
YXJrdXBBY2N1bXVsYXRvcjo6aXNDaGFyc2V0RGVjbGFyYXRpb24pOgorICAgICAgICAoV2ViS2l0
OjpYWFhNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQmFzZUVsZW1lbnQpOgorICAgICAgICAoV2Vi
S2l0OjpYWFhNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kTWFya09mVGhlV2ViKToKKyAgICAgICAg
KFdlYktpdDo6WFhYTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZENoYXJzZXREZWNsYXJhdGlvbik6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VTZXJpYWxpemVySW1wbDo6b3BlblRhZ1RvU3RyaW5n
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVNlcmlhbGl6ZXJJbXBsOjplbmRUYWdUb1N0cmlu
Zyk6CisKIDIwMTAtMTAtMTUgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwu
Y29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHI2OTgwOS4KZGlmZiAtLWdp
dCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGFnZVNlcmlhbGl6ZXJJbXBsLmNwcCBiL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViUGFnZVNlcmlhbGl6ZXJJbXBsLmNwcAppbmRleCAwZDg1ZDc4Njkx
NDdlNDQzZTkxNDYwMjU4Zjk1MTNhZTIzYTdjMThjLi4xYTQ3ZWZlMjExMjVjN2MwNTUzODg5MjRh
MmY2ZmQ1ZDc2OThkZjlmIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VT
ZXJpYWxpemVySW1wbC5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQYWdlU2VyaWFs
aXplckltcGwuY3BwCkBAIC0xMDAsNDAwICsxMDAsMTk2IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotLy8gTWF4aW11bSBsZW5ndGggb2YgZGF0YSBi
dWZmZXIgd2hpY2ggaXMgdXNlZCB0byB0ZW1wb3Jhcnkgc2F2ZSBnZW5lcmF0ZWQKLS8vIGh0bWwg
Y29udGVudCBkYXRhLiBUaGlzIGlzIGEgc29mdCBsaW1pdCB3aGljaCBtaWdodCBiZSBwYXNzZWQg
aWYgYSB2ZXJ5IGxhcmdlCi0vLyBjb250ZWdpb3VzIHN0cmluZyBpcyBmb3VuZCBpbiB0aGUgcGFn
ZS4KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBkYXRhQnVmZmVyQ2FwYWNpdHkgPSA2NTUzNjsKLQot
V2ViUGFnZVNlcmlhbGl6ZXJJbXBsOjpTZXJpYWxpemVEb21QYXJhbTo6U2VyaWFsaXplRG9tUGFy
YW0oY29uc3QgS1VSTCYgdXJsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVGV4dEVuY29kaW5nJiB0ZXh0RW5jb2Rpbmcs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBEb2N1bWVudCogZG9jdW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGRpcmVjdG9yeU5hbWUp
Ci0gICAgOiB1cmwodXJsKQotICAgICwgdGV4dEVuY29kaW5nKHRleHRFbmNvZGluZykKLSAgICAs
IGRvY3VtZW50KGRvY3VtZW50KQotICAgICwgZGlyZWN0b3J5TmFtZShkaXJlY3RvcnlOYW1lKQot
ICAgICwgaXNIVE1MRG9jdW1lbnQoZG9jdW1lbnQtPmlzSFRNTERvY3VtZW50KCkpCi0gICAgLCBo
YXZlU2VlbkRvY1R5cGUoZmFsc2UpCi0gICAgLCBoYXZlQWRkZWRDaGFyc2V0RGVjbGFyYXRpb24o
ZmFsc2UpCi0gICAgLCBza2lwTWV0YUVsZW1lbnQoMCkKLSAgICAsIGlzSW5TY3JpcHRPclN0eWxl
VGFnKGZhbHNlKQotICAgICwgaGF2ZUFkZGVkWE1MUHJvY2Vzc2luZ0RpcmVjdGl2ZShmYWxzZSkK
LSAgICAsIGhhdmVBZGRlZENvbnRlbnRzQmVmb3JlRW5kKGZhbHNlKQotewotfQordXNpbmcgbmFt
ZXNwYWNlIEhUTUxOYW1lczsKIAotU3RyaW5nIFdlYlBhZ2VTZXJpYWxpemVySW1wbDo6cHJlQWN0
aW9uQmVmb3JlU2VyaWFsaXplT3BlblRhZygKLSAgICBjb25zdCBFbGVtZW50KiBlbGVtZW50LCBT
ZXJpYWxpemVEb21QYXJhbSogcGFyYW0sIGJvb2wqIG5lZWRTa2lwKQotewotICAgIFN0cmluZ0J1
aWxkZXIgcmVzdWx0OwotCi0gICAgKm5lZWRTa2lwID0gZmFsc2U7Ci0gICAgaWYgKHBhcmFtLT5p
c0hUTUxEb2N1bWVudCkgewotICAgICAgICAvLyBTa2lwIHRoZSBvcGVuIHRhZyBvZiBvcmlnaW5h
bCBNRVRBIHRhZyB3aGljaCBkZWNsYXJlIGNoYXJzZXQgc2luY2Ugd2UKLSAgICAgICAgLy8gaGF2
ZSBvdmVycmlkZWQgdGhlIE1FVEEgd2hpY2ggaGF2ZSBjb3JyZWN0IGNoYXJzZXQgZGVjbGFyYXRp
b24gYWZ0ZXIKLSAgICAgICAgLy8gc2VyaWFsaXppbmcgb3BlbiB0YWcgb2YgSEVBRCBlbGVtZW50
LgotICAgICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om1ldGFUYWcpKSB7
Ci0gICAgICAgICAgICBjb25zdCBIVE1MTWV0YUVsZW1lbnQqIG1ldGEgPSBzdGF0aWNfY2FzdDxj
b25zdCBIVE1MTWV0YUVsZW1lbnQqPihlbGVtZW50KTsKLSAgICAgICAgICAgIC8vIENoZWNrIHdo
ZXRoZXIgdGhlIE1FVEEgdGFnIGhhcyBkZWNsYXJlZCBjaGFyc2V0IG9yIG5vdC4KLSAgICAgICAg
ICAgIFN0cmluZyBlcXVpdiA9IG1ldGEtPmh0dHBFcXVpdigpOwotICAgICAgICAgICAgaWYgKGVx
dWFsSWdub3JpbmdDYXNlKGVxdWl2LCAiY29udGVudC10eXBlIikpIHsKLSAgICAgICAgICAgICAg
ICBTdHJpbmcgY29udGVudCA9IG1ldGEtPmNvbnRlbnQoKTsKLSAgICAgICAgICAgICAgICBpZiAo
Y29udGVudC5sZW5ndGgoKSAmJiBjb250ZW50LmNvbnRhaW5zKCJjaGFyc2V0IiwgZmFsc2UpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIC8vIEZpbmQgTUVUQSB0YWcgZGVjbGFyZWQgY2hhcnNldCwg
d2UgbmVlZCB0byBza2lwIGl0IHdoZW4KLSAgICAgICAgICAgICAgICAgICAgLy8gc2VyaWFsaXpp
bmcgRE9NLgotICAgICAgICAgICAgICAgICAgICBwYXJhbS0+c2tpcE1ldGFFbGVtZW50ID0gZWxl
bWVudDsKLSAgICAgICAgICAgICAgICAgICAgKm5lZWRTa2lwID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6Omh0bWxUYWcpKSB7Ci0gICAgICAgICAgICAvLyBDaGVjayBzb21ldGhp
bmcgYmVmb3JlIHByb2Nlc3NpbmcgdGhlIG9wZW4gdGFnIG9mIEhFQUQgZWxlbWVudC4KLSAgICAg
ICAgICAgIC8vIEZpcnN0IHdlIGFkZCBkb2MgdHlwZSBkZWNsYXJhdGlvbiBpZiBvcmlnaW5hbCBk
b2N1bWVudCBoYXMgaXQuCi0gICAgICAgICAgICBpZiAoIXBhcmFtLT5oYXZlU2VlbkRvY1R5cGUp
IHsKLSAgICAgICAgICAgICAgICBwYXJhbS0+aGF2ZVNlZW5Eb2NUeXBlID0gdHJ1ZTsKLSAgICAg
ICAgICAgICAgICByZXN1bHQuYXBwZW5kKGNyZWF0ZU1hcmt1cChwYXJhbS0+ZG9jdW1lbnQtPmRv
Y3R5cGUoKSkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBBZGQgTU9UVyBkZWNs
YXJhdGlvbiBiZWZvcmUgaHRtbCB0YWcuCi0gICAgICAgICAgICAvLyBTZWUgaHR0cDovL21zZG4y
Lm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9tczUzNzYyOChWUy44NSkuYXNweC4KLSAgICAg
ICAgICAgIHJlc3VsdC5hcHBlbmQoV2ViUGFnZVNlcmlhbGl6ZXI6OmdlbmVyYXRlTWFya09mVGhl
V2ViRGVjbGFyYXRpb24ocGFyYW0tPnVybCkpOwotICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpiYXNlVGFnKSkgewotICAgICAgICAgICAgLy8gQ29tbWVu
dCB0aGUgQkFTRSB0YWcgd2hlbiBzZXJpYWxpemluZyBkb20uCi0gICAgICAgICAgICByZXN1bHQu
YXBwZW5kKCI8IS0tIik7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICAvLyBXcml0
ZSBYTUwgZGVjbGFyYXRpb24uCi0gICAgICAgIGlmICghcGFyYW0tPmhhdmVBZGRlZFhNTFByb2Nl
c3NpbmdEaXJlY3RpdmUpIHsKLSAgICAgICAgICAgIHBhcmFtLT5oYXZlQWRkZWRYTUxQcm9jZXNz
aW5nRGlyZWN0aXZlID0gdHJ1ZTsKLSAgICAgICAgICAgIC8vIEdldCBlbmNvZGluZyBpbmZvLgot
ICAgICAgICAgICAgU3RyaW5nIHhtbEVuY29kaW5nID0gcGFyYW0tPmRvY3VtZW50LT54bWxFbmNv
ZGluZygpOwotICAgICAgICAgICAgaWYgKHhtbEVuY29kaW5nLmlzRW1wdHkoKSkKLSAgICAgICAg
ICAgICAgICB4bWxFbmNvZGluZyA9IHBhcmFtLT5kb2N1bWVudC0+ZnJhbWUoKS0+bG9hZGVyKCkt
PndyaXRlcigpLT5lbmNvZGluZygpOwotICAgICAgICAgICAgaWYgKHhtbEVuY29kaW5nLmlzRW1w
dHkoKSkKLSAgICAgICAgICAgICAgICB4bWxFbmNvZGluZyA9IFVURjhFbmNvZGluZygpLm5hbWUo
KTsKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoIjw/eG1sIHZlcnNpb249XCIiKTsKLSAgICAg
ICAgICAgIHJlc3VsdC5hcHBlbmQocGFyYW0tPmRvY3VtZW50LT54bWxWZXJzaW9uKCkpOwotICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZCgiXCIgZW5jb2Rpbmc9XCIiKTsKLSAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmQoeG1sRW5jb2RpbmcpOwotICAgICAgICAgICAgaWYgKHBhcmFtLT5kb2N1bWVu
dC0+eG1sU3RhbmRhbG9uZSgpKQotICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoIlwiIHN0
YW5kYWxvbmU9XCJ5ZXMiKTsKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoIlwiPz5cbiIpOwot
ICAgICAgICB9Ci0gICAgICAgIC8vIEFkZCBkb2MgdHlwZSBkZWNsYXJhdGlvbiBpZiBvcmlnaW5h
bCBkb2N1bWVudCBoYXMgaXQuCi0gICAgICAgIGlmICghcGFyYW0tPmhhdmVTZWVuRG9jVHlwZSkg
ewotICAgICAgICAgICAgcGFyYW0tPmhhdmVTZWVuRG9jVHlwZSA9IHRydWU7Ci0gICAgICAgICAg
ICByZXN1bHQuYXBwZW5kKGNyZWF0ZU1hcmt1cChwYXJhbS0+ZG9jdW1lbnQtPmRvY3R5cGUoKSkp
OwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKLX0KK2Ns
YXNzIFVSTFJld3JpdGVyIDogcHVibGljIE5vbmNvcHlhYmxlIHsKK3B1YmxpYzoKKyAgICB0eXBl
ZGVmIEhhc2hNYXA8V1RGOjpTdHJpbmcsIFdURjo6U3RyaW5nPiBVUkxNYXA7CiAKLVN0cmluZyBX
ZWJQYWdlU2VyaWFsaXplckltcGw6OnBvc3RBY3Rpb25BZnRlclNlcmlhbGl6ZU9wZW5UYWcoCi0g
ICAgY29uc3QgRWxlbWVudCogZWxlbWVudCwgU2VyaWFsaXplRG9tUGFyYW0qIHBhcmFtKQotewot
ICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OwotCi0gICAgcGFyYW0tPmhhdmVBZGRlZENvbnRlbnRz
QmVmb3JlRW5kID0gZmFsc2U7Ci0gICAgaWYgKCFwYXJhbS0+aXNIVE1MRG9jdW1lbnQpCi0gICAg
ICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKLSAgICAvLyBDaGVjayBhZnRlciBwcm9jZXNz
aW5nIHRoZSBvcGVuIHRhZyBvZiBIRUFEIGVsZW1lbnQKLSAgICBpZiAoIXBhcmFtLT5oYXZlQWRk
ZWRDaGFyc2V0RGVjbGFyYXRpb24KLSAgICAgICAgJiYgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OmhlYWRUYWcpKSB7Ci0gICAgICAgIHBhcmFtLT5oYXZlQWRkZWRDaGFyc2V0RGVjbGFy
YXRpb24gPSB0cnVlOwotICAgICAgICAvLyBDaGVjayBtZXRhIGVsZW1lbnQuIFdlYktpdCBvbmx5
IHByZS1wYXJzZSB0aGUgZmlyc3QgNTEyIGJ5dGVzCi0gICAgICAgIC8vIG9mIHRoZSBkb2N1bWVu
dC4gSWYgdGhlIHdob2xlIDxIRUFEPiBpcyBsYXJnZXIgYW5kIG1ldGEgaXMgdGhlCi0gICAgICAg
IC8vIGVuZCBvZiBoZWFkIHBhcnQsIHRoZW4gdGhpcyBraW5kIG9mIHBhZ2VzIGFyZW4ndCBkZWNv
ZGVkIGNvcnJlY3RseQotICAgICAgICAvLyBiZWNhdXNlIG9mIHRoaXMgaXNzdWUuIFNvIHdoZW4g
d2Ugc2VyaWFsaXplIHRoZSBET00sIHdlIG5lZWQgdG8KLSAgICAgICAgLy8gbWFrZSBzdXJlIHRo
ZSBtZXRhIHdpbGwgaW4gZmlyc3QgY2hpbGQgb2YgaGVhZCB0YWcuCi0gICAgICAgIC8vIFNlZSBo
dHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjYyMS4KLSAgICAgICAgLy8g
Rmlyc3Qgd2UgZ2VuZXJhdGUgbmV3IGNvbnRlbnQgZm9yIHdyaXRpbmcgY29ycmVjdCBNRVRBIGVs
ZW1lbnQuCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoV2ViUGFnZVNlcmlhbGl6ZXI6OmdlbmVyYXRl
TWV0YUNoYXJzZXREZWNsYXJhdGlvbigKLSAgICAgICAgICAgIFN0cmluZyhwYXJhbS0+dGV4dEVu
Y29kaW5nLm5hbWUoKSkpKTsKLQotICAgICAgICBwYXJhbS0+aGF2ZUFkZGVkQ29udGVudHNCZWZv
cmVFbmQgPSB0cnVlOwotICAgICAgICAvLyBXaWxsIHNlYXJjaCBlYWNoIE1FVEEgd2hpY2ggaGFz
IGNoYXJzZXQgZGVjbGFyYXRpb24sIGFuZCBza2lwIHRoZW0gYWxsCi0gICAgICAgIC8vIGluIFBy
ZUFjdGlvbkJlZm9yZVNlcmlhbGl6ZU9wZW5UYWcuCi0gICAgfSBlbHNlIGlmIChlbGVtZW50LT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6c2NyaXB0VGFnKQotICAgICAgICAgICAgICAgfHwgZWxlbWVu
dC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnN0eWxlVGFnKSkgewotICAgICAgICBwYXJhbS0+aXNJ
blNjcmlwdE9yU3R5bGVUYWcgPSB0cnVlOworICAgIHN0YXRpYyBQYXNzT3duUHRyPFVSTFJld3Jp
dGVyPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBwcmVmaXgsIFBhc3NPd25QdHI8VVJMTWFwPiBtYXAp
CisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFVSTFJld3JpdGVyKHByZWZpeCwg
bWFwKSk7CiAgICAgfQogCi0gICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotfQorICAgIFN0
cmluZyByZXdyaXRlKGNvbnN0IFN0cmluZyYgdXJsKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2xv
Y2FsTGlua3MuY29udGFpbnModXJsKSkKKyAgICAgICAgICAgIHJldHVybiB1cmw7CiAKLVN0cmlu
ZyBXZWJQYWdlU2VyaWFsaXplckltcGw6OnByZUFjdGlvbkJlZm9yZVNlcmlhbGl6ZUVuZFRhZygK
LSAgICBjb25zdCBFbGVtZW50KiBlbGVtZW50LCBTZXJpYWxpemVEb21QYXJhbSogcGFyYW0sIGJv
b2wqIG5lZWRTa2lwKQotewotICAgIFN0cmluZyByZXN1bHQ7Ci0KLSAgICAqbmVlZFNraXAgPSBm
YWxzZTsKLSAgICBpZiAoIXBhcmFtLT5pc0hUTUxEb2N1bWVudCkKLSAgICAgICAgcmV0dXJuIHJl
c3VsdDsKLSAgICAvLyBTa2lwIHRoZSBlbmQgdGFnIG9mIG9yaWdpbmFsIE1FVEEgdGFnIHdoaWNo
IGRlY2xhcmUgY2hhcnNldC4KLSAgICAvLyBOZWVkIG5vdCB0byBjaGVjayB3aGV0aGVyIGl0J3Mg
TUVUQSB0YWcgc2luY2Ugd2UgZ3VhcmFudGVlCi0gICAgLy8gc2tpcE1ldGFFbGVtZW50IGlzIGRl
ZmluaXRlbHkgTUVUQSB0YWcgaWYgaXQncyBub3QgMC4KLSAgICBpZiAocGFyYW0tPnNraXBNZXRh
RWxlbWVudCA9PSBlbGVtZW50KQotICAgICAgICAqbmVlZFNraXAgPSB0cnVlOwotICAgIGVsc2Ug
aWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzY3JpcHRUYWcpCi0gICAgICAgICAg
ICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnN0eWxlVGFnKSkgewotICAgICAg
ICBBU1NFUlQocGFyYW0tPmlzSW5TY3JpcHRPclN0eWxlVGFnKTsKLSAgICAgICAgcGFyYW0tPmlz
SW5TY3JpcHRPclN0eWxlVGFnID0gZmFsc2U7CisgICAgICAgIFN0cmluZyByZXdyaXR0ZW5VUkw7
CisgICAgICAgIGlmICghbV9wcmVmaXguaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV3cml0dGVu
VVJMID0gbV9wcmVmaXg7CisgICAgICAgIHJld3JpdHRlblVSTCArPSBtX21hcC5nZXQodXJsKTsK
KworICAgICAgICByZXR1cm4gcmV3cml0dGVuVVJMOwogICAgIH0KIAotICAgIHJldHVybiByZXN1
bHQ7Ci19CisgICAgdm9pZCBzZXRQcmVmaXgoY29uc3QgU3RyaW5nJiBwcmVmaXgpIHsgbV9wcmVm
aXggPSBwcmVmaXg7IH0KIAotLy8gQWZ0ZXIgd2UgZmluaXNoIHNlcmlhbGl6aW5nIGVuZCB0YWcg
b2YgYSBlbGVtZW50LCB3ZSBnaXZlIHRoZSB0YXJnZXQKLS8vIGVsZW1lbnQgYSBjaGFuY2UgdG8g
ZG8gc29tZSBwb3N0IHdvcmsgdG8gYWRkIHNvbWUgYWRkaXRpb25hbCBkYXRhLgotU3RyaW5nIFdl
YlBhZ2VTZXJpYWxpemVySW1wbDo6cG9zdEFjdGlvbkFmdGVyU2VyaWFsaXplRW5kVGFnKAotICAg
IGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIFNlcmlhbGl6ZURvbVBhcmFtKiBwYXJhbSkKLXsKLSAg
ICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKLQotICAgIGlmICghcGFyYW0tPmlzSFRNTERvY3VtZW50
KQotICAgICAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci0gICAgLy8gQ29tbWVudCB0aGUg
QkFTRSB0YWcgd2hlbiBzZXJpYWxpemluZyBET00uCi0gICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpiYXNlVGFnKSkgewotICAgICAgICByZXN1bHQuYXBwZW5kKCItLT4iKTsK
LSAgICAgICAgLy8gQXBwZW5kIGEgbmV3IGJhc2UgdGFnIGRlY2xhcmF0aW9uLgotICAgICAgICBy
ZXN1bHQuYXBwZW5kKFdlYlBhZ2VTZXJpYWxpemVyOjpnZW5lcmF0ZUJhc2VUYWdEZWNsYXJhdGlv
bigKLSAgICAgICAgICAgIHBhcmFtLT5kb2N1bWVudC0+YmFzZVRhcmdldCgpKSk7Citwcml2YXRl
OgorICAgIFVSTFJld3JpdGVyKFBhc3NPd25QdHI8VVJMTWFwPiBtYXApCisgICAgICAgIDogbV9t
YXAobWFwKQorICAgIHsKICAgICB9CiAKLSAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci19
CisgICAgU3RyaW5nIG1fcHJlZml4OworICAgIE93blB0cjxVUkxNYXA+IG1fbWFwOworfTsKKwor
Y2xhc3MgTG9jYWxpemVkTWFya3VwQWNjdW11bGF0b3IgOiBwdWJsaWMgTWFya3VwQWNjdW11bGF0
b3IgeworcHVibGljOgorICAgIExvY2FsaXplZE1hcmt1cEFjY3VtdWxhdG9yKFVSTFJld3JpdGVy
KiB1cmxSZXdyaXRlcikKKyAgICAgICAgOiBNYXJrdXBBY2N1bXVsYXRvcigwLCBBYnNvbHV0ZVVS
THMpCisgICAgICAgICwgbV91cmxSZXdyaXRlcih1cmxSZXdyaXRlcikKKyAgICAgICAgLCBtX2hh
dmVBZGRlZE1hcmtPZlRoZVdlYihmYWxzZSkKKyAgICAgICAgLCBtX2hhdmVBZGRlZENoYXJzZXRE
ZWNsYXJhdGlvbihmYWxzZSkKKyAgICB7CisgICAgfQogCi12b2lkIFdlYlBhZ2VTZXJpYWxpemVy
SW1wbDo6c2F2ZUhUTUxDb250ZW50VG9CdWZmZXIoCi0gICAgY29uc3QgU3RyaW5nJiByZXN1bHQs
IFNlcmlhbGl6ZURvbVBhcmFtKiBwYXJhbSkKLXsKLSAgICBtX2RhdGFCdWZmZXIuYXBwZW5kKHJl
c3VsdCk7Ci0gICAgZW5jb2RlQW5kRmx1c2hCdWZmZXIoV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQ6
OkN1cnJlbnRGcmFtZUlzTm90RmluaXNoZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgcGFy
YW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgRG9Ob3RGb3JjZUZsdXNoKTsKLX0KK3ByaXZh
dGU6CisgICAgdmlydHVhbCB2b2lkIGFwcGVuZEVsZW1lbnQoVmVjdG9yPFVDaGFyPiYgb3V0LCBF
bGVtZW50KiBlbGVtZW50LCBOYW1lc3BhY2VzKiBuYW1lc3BhY2VzKQorICAgIHsKKyAgICAgICAg
aWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUobWV0YVRhZykgJiYgaXNDaGFyc2V0RGVjbGFyYXRpb24o
ZWxlbWVudCkpCisgICAgICAgICAgICByZXR1cm4KIAotdm9pZCBXZWJQYWdlU2VyaWFsaXplcklt
cGw6OmVuY29kZUFuZEZsdXNoQnVmZmVyKAotICAgIFdlYlBhZ2VTZXJpYWxpemVyQ2xpZW50OjpQ
YWdlU2VyaWFsaXphdGlvblN0YXR1cyBzdGF0dXMsCi0gICAgU2VyaWFsaXplRG9tUGFyYW0qIHBh
cmFtLAotICAgIEZsdXNoT3B0aW9uIGZsdXNoT3B0aW9uKQotewotICAgIC8vIERhdGEgYnVmZmVy
IGlzIG5vdCBmdWxsIG5vciBkbyB3ZSB3YW50IHRvIGZvcmNlIGZsdXNoLgotICAgIGlmIChmbHVz
aE9wdGlvbiAhPSBGb3JjZUZsdXNoICYmIG1fZGF0YUJ1ZmZlci5sZW5ndGgoKSA8PSBkYXRhQnVm
ZmVyQ2FwYWNpdHkpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKGVsZW1lbnQtPmhhc1Rh
Z05hbWUoYmFzZVRhZykpIHsKKyAgICAgICAgICAgIGFwcGVuZEJhc2VFbGVtZW50KG91dCwgc3Rh
dGljX2Nhc3Q8SFRNTEJhc2VFbGVtZW50Kj4oZWxlbWVudCkpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CiAKLSAgICBTdHJpbmcgY29udGVudCA9IG1fZGF0YUJ1ZmZlci50b1N0cmlu
ZygpOwotICAgIG1fZGF0YUJ1ZmZlciA9IFN0cmluZ0J1aWxkZXIoKTsKKyAgICAgICAgaWYgKGVs
ZW1lbnQtPmhhc1RhZ05hbWUoaHRtbFRhZyAmJiAhbV9oYXZlQWRkZWRNYXJrT2ZUaGVXZWIpKQor
ICAgICAgICAgICAgYXBwZW5kTWFya09mVGhlV2ViKG91dCwgZWxlbWVudC0+ZG9jdW1lbnQoKS0+
dXJsKCkpOwogCi0gICAgLy8gQ29udmVydCB0aGUgdW5pY29kZSBjb250ZW50IHRvIHRhcmdldCBl
bmNvZGluZwotICAgIENTdHJpbmcgZW5jb2RlZENvbnRlbnQgPSBwYXJhbS0+dGV4dEVuY29kaW5n
LmVuY29kZSgKLSAgICAgICAgY29udGVudC5jaGFyYWN0ZXJzKCksIGNvbnRlbnQubGVuZ3RoKCks
IEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKTsKKyAgICAgICAgTWFya3VwQWNjdW11bGF0b3I6OmFw
cGVuZEVsZW1lbnQob3V0LCBlbGVtZW50LCBuYW1lc3BhY2VzKTsKIAotICAgIC8vIFNlbmQgcmVz
dWx0IHRvIHRoZSBjbGllbnQuCi0gICAgbV9jbGllbnQtPmRpZFNlcmlhbGl6ZURhdGFGb3JGcmFt
ZShwYXJhbS0+dXJsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2Vi
Q1N0cmluZyhlbmNvZGVkQ29udGVudC5kYXRhKCksIGVuY29kZWRDb250ZW50Lmxlbmd0aCgpKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyk7Ci19CisgICAg
ICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKGhlYWRUYWcpICYmICFtX2hhdmVBZGRlZENoYXJz
ZXREZWNsYXJhdGlvbikKKyAgICAgICAgICAgIGFwcGVuZENoYXJzZXREZWNsYXJhdGlvbihvdXQs
IHN0YXRpY19jYXN0PEhUTUxIZWFkRWxlbWVudCo+KGVsZW1lbnQpLCBuYW1lc3BhY2VzKTsKKyAg
ICB9CiAKLXZvaWQgV2ViUGFnZVNlcmlhbGl6ZXJJbXBsOjpvcGVuVGFnVG9TdHJpbmcoY29uc3Qg
RWxlbWVudCogZWxlbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgU2VyaWFsaXplRG9tUGFyYW0qIHBhcmFtKQotewotICAgIC8vIEZJWE1FOiB1c2UgU3Ry
aW5nQnVpbGRlciBpbnN0ZWFkIG9mIFN0cmluZy4KLSAgICBib29sIG5lZWRTa2lwOwotICAgIC8v
IERvIHByZSBhY3Rpb24gZm9yIG9wZW4gdGFnLgotICAgIFN0cmluZyByZXN1bHQgPSBwcmVBY3Rp
b25CZWZvcmVTZXJpYWxpemVPcGVuVGFnKGVsZW1lbnQsIHBhcmFtLCAmbmVlZFNraXApOwotICAg
IGlmIChuZWVkU2tpcCkKLSAgICAgICAgcmV0dXJuOwotICAgIC8vIEFkZCBvcGVuIHRhZwotICAg
IHJlc3VsdCArPSAiPCIgKyBlbGVtZW50LT5ub2RlTmFtZSgpLmxvd2VyKCk7Ci0gICAgLy8gR28g
dGhyb3VnaCBhbGwgYXR0cmlidXRlcyBhbmQgc2VyaWFsaXplIHRoZW0uCi0gICAgY29uc3QgTmFt
ZWROb2RlTWFwICphdHRyTWFwID0gZWxlbWVudC0+YXR0cmlidXRlcyh0cnVlKTsKLSAgICBpZiAo
YXR0ck1hcCkgewotICAgICAgICB1bnNpZ25lZCBudW1BdHRycyA9IGF0dHJNYXAtPmxlbmd0aCgp
OwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtQXR0cnM7IGkrKykgewotICAg
ICAgICAgICAgcmVzdWx0ICs9ICIgIjsKLSAgICAgICAgICAgIC8vIEFkZCBhdHRyaWJ1dGUgcGFp
cgotICAgICAgICAgICAgY29uc3QgQXR0cmlidXRlICphdHRyaWJ1dGUgPSBhdHRyTWFwLT5hdHRy
aWJ1dGVJdGVtKGkpOwotICAgICAgICAgICAgcmVzdWx0ICs9IGF0dHJpYnV0ZS0+bmFtZSgpLnRv
U3RyaW5nKCk7Ci0gICAgICAgICAgICByZXN1bHQgKz0gIj1cIiI7Ci0gICAgICAgICAgICBpZiAo
IWF0dHJpYnV0ZS0+dmFsdWUoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBT
dHJpbmcmIGF0dHJWYWx1ZSA9IGF0dHJpYnV0ZS0+dmFsdWUoKTsKLQotICAgICAgICAgICAgICAg
IC8vIENoZWNrIHdoZXRoZXIgd2UgbmVlZCB0byByZXBsYWNlIHNvbWUgcmVzb3VyY2UgbGlua3MK
LSAgICAgICAgICAgICAgICAvLyB3aXRoIGxvY2FsIHJlc291cmNlIHBhdGhzLgotICAgICAgICAg
ICAgICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lID0gYXR0cmlidXRlLT5uYW1lKCk7
Ci0gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnRIYXNMZWdhbExpbmtBdHRyaWJ1dGUoZWxlbWVu
dCwgYXR0ck5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEZvciBsaW5rcyBzdGFydCB3
aXRoICJqYXZhc2NyaXB0OiIsIHdlIGRvIG5vdCBjaGFuZ2UgaXQuCi0gICAgICAgICAgICAgICAg
ICAgIGlmIChhdHRyVmFsdWUuc3RhcnRzV2l0aCgiamF2YXNjcmlwdDoiLCBmYWxzZSkpCi0gICAg
ICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gYXR0clZhbHVlOwotICAgICAgICAgICAgICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdldCB0aGUgYWJzb2x1dGUg
bGluawotICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGNvbXBsZXRlVVJMID0gcGFyYW0t
PmRvY3VtZW50LT5jb21wbGV0ZVVSTChhdHRyVmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gQ2hlY2sgd2hldGhlciB3ZSBoYXZlIGxvY2FsIGZpbGVzIGZvciB0aG9zZSBsaW5rLgot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fbG9jYWxMaW5rcy5jb250YWlucyhjb21wbGV0
ZVVSTCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1fbG9jYWxEaXJlY3Rv
cnlOYW1lLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
ICs9ICIuLyIgKyBtX2xvY2FsRGlyZWN0b3J5TmFtZSArICIvIjsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXN1bHQgKz0gbV9sb2NhbExpbmtzLmdldChjb21wbGV0ZVVSTCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQgKz0gY29tcGxldGVVUkw7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW0tPmlzSFRNTERvY3Vt
ZW50KQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IG1faHRtbEVudGl0aWVzLmNv
bnZlcnRFbnRpdGllc0luU3RyaW5nKGF0dHJWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBtX3htbEVudGl0aWVzLmNvbnZl
cnRFbnRpdGllc0luU3RyaW5nKGF0dHJWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgcmVzdWx0ICs9ICJcIiI7Ci0gICAgICAgIH0KKyAgICB2aXJ0
dWFsIFN0cmluZyByZXNvbHZlVVJMKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEF0dHJpYnV0ZSYg
YXR0cmlidXRlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdXJsUmV3cml0ZXIucmV3cml0ZShl
bGVtZW50LT5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTChhdHRyaWJ1dGUtPnZhbHVlKCkpLnN0cmlu
ZygpKTsKICAgICB9CiAKLSAgICAvLyBEbyBwb3N0IGFjdGlvbiBmb3Igb3BlbiB0YWcuCi0gICAg
U3RyaW5nIGFkZGVkQ29udGVudHMgPSBwb3N0QWN0aW9uQWZ0ZXJTZXJpYWxpemVPcGVuVGFnKGVs
ZW1lbnQsIHBhcmFtKTsKLSAgICAvLyBDb21wbGV0ZSB0aGUgb3BlbiB0YWcgZm9yIGVsZW1lbnQg
d2hlbiBpdCBoYXMgY2hpbGQvY2hpbGRyZW4uCi0gICAgaWYgKGVsZW1lbnQtPmhhc0NoaWxkTm9k
ZXMoKSB8fCBwYXJhbS0+aGF2ZUFkZGVkQ29udGVudHNCZWZvcmVFbmQpCi0gICAgICAgIHJlc3Vs
dCArPSAiPiI7Ci0gICAgLy8gQXBwZW5kIHRoZSBhZGRlZCBjb250ZW50cyBnZW5lcmF0ZSBpbiAg
cG9zdCBhY3Rpb24gb2Ygb3BlbiB0YWcuCi0gICAgcmVzdWx0ICs9IGFkZGVkQ29udGVudHM7Ci0g
ICAgLy8gU2F2ZSB0aGUgcmVzdWx0IHRvIGRhdGEgYnVmZmVyLgotICAgIHNhdmVIVE1MQ29udGVu
dFRvQnVmZmVyKHJlc3VsdCwgcGFyYW0pOwotfQorICAgIGJvb2wgaXNDaGFyc2V0RGVjbGFyYXRp
b24oRWxlbWVudCogZWxlbWVudCkKKyAgICB7CisgICAgICAgIEFTU0VSVChlbGVtZW50LT5oYXNU
YWdOYW1lKG1ldGFUYWcpKTsKKyAgICAgICAgU3RyaW5nIGVxdWl2ID0gbWV0YS0+aHR0cEVxdWl2
KCk7CisgICAgICAgIFN0cmluZyBjb250ZW50ID0gbWV0YS0+Y29udGVudCgpOworICAgICAgICAv
LyBGSVhNRTogV2hhdCBhYm91dCA8bWV0YSBjaGFyc2V0PSIuLi4iPiA/CisgICAgICAgIHJldHVy
biBlcXVhbElnbm9yaW5nQ2FzZShlcXVpdiwgImNvbnRlbnQtdHlwZSIpICYmIGNvbnRlbnQubGVu
Z3RoKCkgJiYgY29udGVudC5jb250YWlucygiY2hhcnNldCIsIGZhbHNlKTsKKyAgICB9CiAKLS8v
IFNlcmlhbGl6ZSBlbmQgdGFnIG9mIGFuIHNwZWNpZmllZCBlbGVtZW50Lgotdm9pZCBXZWJQYWdl
U2VyaWFsaXplckltcGw6OmVuZFRhZ1RvU3RyaW5nKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VyaWFsaXplRG9tUGFy
YW0qIHBhcmFtKQotewotICAgIGJvb2wgbmVlZFNraXA7Ci0gICAgLy8gRG8gcHJlIGFjdGlvbiBm
b3IgZW5kIHRhZy4KLSAgICBTdHJpbmcgcmVzdWx0ID0gcHJlQWN0aW9uQmVmb3JlU2VyaWFsaXpl
RW5kVGFnKGVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwYXJhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICZuZWVkU2tpcCk7Ci0gICAgaWYgKG5lZWRTa2lwKQotICAgICAgICByZXR1
cm47Ci0gICAgLy8gV3JpdGUgZW5kIHRhZyB3aGVuIGVsZW1lbnQgaGFzIGNoaWxkL2NoaWxkcmVu
LgotICAgIGlmIChlbGVtZW50LT5oYXNDaGlsZE5vZGVzKCkgfHwgcGFyYW0tPmhhdmVBZGRlZENv
bnRlbnRzQmVmb3JlRW5kKSB7Ci0gICAgICAgIHJlc3VsdCArPSAiPC8iOwotICAgICAgICByZXN1
bHQgKz0gZWxlbWVudC0+bm9kZU5hbWUoKS5sb3dlcigpOwotICAgICAgICByZXN1bHQgKz0gIj4i
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIENoZWNrIHdoZXRoZXIgd2UgaGF2ZSB0byB3cml0
ZSBlbmQgdGFnIGZvciBlbXB0eSBlbGVtZW50LgotICAgICAgICBpZiAocGFyYW0tPmlzSFRNTERv
Y3VtZW50KSB7Ci0gICAgICAgICAgICByZXN1bHQgKz0gIj4iOwotICAgICAgICAgICAgLy8gRklY
TUU6IFRoaXMgY29kZSBpcyBob3JyaWJseSB3cm9uZy4gIFdlYlBhZ2VTZXJpYWxpemVySW1wbCBt
dXN0IGRpZS4KLSAgICAgICAgICAgIGlmICghc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTEVsZW1lbnQq
PihlbGVtZW50KS0+aWVGb3JiaWRzSW5zZXJ0SFRNTCgpKSB7Ci0gICAgICAgICAgICAgICAgLy8g
V2UgbmVlZCB0byB3cml0ZSBlbmQgdGFnIHdoZW4gaXQgaXMgcmVxdWlyZWQuCi0gICAgICAgICAg
ICAgICAgcmVzdWx0ICs9ICI8LyI7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ICs9IGVsZW1lbnQt
Pm5vZGVOYW1lKCkubG93ZXIoKTsKLSAgICAgICAgICAgICAgICByZXN1bHQgKz0gIj4iOwotICAg
ICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gRm9yIHhtbCBiYXNl
IGRvY3VtZW50LgotICAgICAgICAgICAgcmVzdWx0ICs9ICIgLz4iOwotICAgICAgICB9CisgICAg
dm9pZCBhcHBlbmRCYXNlRWxlbWVudChWZWN0b3I8VUNoYXI+JiBvdXQsIEhUTUxCYXNlRWxlbWVu
dCogYmFzZSwgTmFtZXNwYWNlcyogbmFtZXNwYWNlcykKKyAgICB7CisgICAgICAgIC8vIFdlIHdh
bnQgdG8gcGljayB1cCB0aGUgdGFyZ2V0IGF0dHJpYnV0ZSBmcm9tIHRoZSBiYXNlIGVsZW1lbnQs
IGJ1dAorICAgICAgICAvLyB3ZSBkb24ndCB3YW50IHRvIHBpY2sgdXAgdGhlIGhyZWYgYXR0cmli
dXRlLgorICAgICAgICAvLyBGSVhNRTogQ3VycmVudGx5IHdlJ3JlIHdoaXRlbGlzdGluZyB0aGUg
dGFyZ2V0IGF0dHJpYnV0ZSwgYnV0CisgICAgICAgIC8vICAgICAgICBwZXJoYXBzIHdlIHNob3Vs
ZCBibGFja2xpc3QgdGhlIGhyZWYgYXR0cmlidXRlPworICAgICAgICBSZWZQdHI8SFRNTEJhc2VF
bGVtZW50PiBmYWtlQmFzZSA9IEhUTUxCYXNlRWxlbWVudDo6Y3JlYXRlKGJhc2VUYWcsIGJhc2Ut
PmRvY3VtZW50KCkpOworICAgICAgICBmYWtlQmFzZS0+c2V0QXR0cmlidXRlKHRhcmdldEF0dHIs
IGJhc2UtPmdldEF0dHJpYnV0ZSh0YXJnZXRBdHRyKSk7CisgICAgICAgIE1hcmt1cEFjY3VtdWxh
dG9yOjphcHBlbmRFbGVtZW50KG91dCwgZmFrZUJhc2UsIG5hbWVzcGFjZXMpOworICAgIH0KKwor
ICAgIHZvaWQgYXBwZW5kTWFya09mVGhlV2ViKFZlY3RvcjxVQ2hhcj4mIG91dCwgY29uc3QgS1VS
TCogdXJsKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX2hhdmVBZGRlZE1hcmtPZlRoZVdlYik7
CisgICAgICAgIG1faGF2ZUFkZGVkTWFya09mVGhlV2ViID0gdHJ1ZTsKKyAgICAgICAgLy8gU2Vl
IGh0dHA6Ly9tc2RuMi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXM1Mzc2MjgoVlMuODUp
LmFzcHguCisgICAgICAgIG91dC5hcHBlbmQoV2ViUGFnZVNlcmlhbGl6ZXI6OmdlbmVyYXRlTWFy
a09mVGhlV2ViRGVjbGFyYXRpb24odXJsKSk7CisgICAgfQorCisgICAgdm9pZCBhcHBlbmRDaGFy
c2V0RGVjbGFyYXRpb24oVmVjdG9yPFVDaGFyPiYgb3V0LCBIVE1MSGVhZEVsZW1lbnQqIGhlYWQs
IE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCisgICAgeworICAgICAgICBBU1NFUlQoIW1faGF2ZUFk
ZGVkQ2hhcnNldERlY2xhcmF0aW9uKTsKKyAgICAgICAgbV9oYXZlQWRkZWRDaGFyc2V0RGVjbGFy
YXRpb24gPSB0cnVlOworICAgICAgICAvLyBDaGVjayBtZXRhIGVsZW1lbnQuIFdlYktpdCBvbmx5
IHByZS1wYXJzZSB0aGUgZmlyc3QgNTEyIGJ5dGVzCisgICAgICAgIC8vIG9mIHRoZSBkb2N1bWVu
dC4gSWYgdGhlIHdob2xlIDxIRUFEPiBpcyBsYXJnZXIgYW5kIG1ldGEgaXMgdGhlCisgICAgICAg
IC8vIGVuZCBvZiBoZWFkIHBhcnQsIHRoZW4gdGhpcyBraW5kIG9mIHBhZ2VzIGFyZW4ndCBkZWNv
ZGVkIGNvcnJlY3RseQorICAgICAgICAvLyBiZWNhdXNlIG9mIHRoaXMgaXNzdWUuIFNvIHdoZW4g
d2Ugc2VyaWFsaXplIHRoZSBET00sIHdlIG5lZWQgdG8KKyAgICAgICAgLy8gbWFrZSBzdXJlIHRo
ZSBtZXRhIHdpbGwgaW4gZmlyc3QgY2hpbGQgb2YgaGVhZCB0YWcuCisgICAgICAgIC8vIFNlZSBo
dHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjYyMS4KKyAgICAgICAgLy8g
Rmlyc3Qgd2UgZ2VuZXJhdGUgbmV3IGNvbnRlbnQgZm9yIHdyaXRpbmcgY29ycmVjdCBNRVRBIGVs
ZW1lbnQuCisgICAgICAgIFJlZlB0cjxIVE1MTWV0YUVsZW1lbnQ+IGZha2VNZXRhID0gSFRNTE1l
dGFFbGVtZW50OjpjcmVhdGUobWV0YVRhZywgaGVhZC0+ZG9jdW1lbnQoKSk7CisgICAgICAgIGZh
a2VNZXRhLT5zZXRBdHRyaWJ1dGUoaHR0cEVxdWl2QXR0ciwgIkNvbnRlbnQtVHlwZSIpOworICAg
ICAgICBmYWtlTWV0YS0+c2V0QXR0cmlidXRlKGNvbnRlbnRBdHRyLCAidGV4dC9odG1sOyBjaGFy
c2V0PXV0Zi04Iik7CisgICAgICAgIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVtZW50KG91
dCwgZmFrZU1ldGEsIG5hbWVzcGFjZXMpOwogICAgIH0KLSAgICAvLyBEbyBwb3N0IGFjdGlvbiBm
b3IgZW5kIHRhZy4KLSAgICByZXN1bHQgKz0gcG9zdEFjdGlvbkFmdGVyU2VyaWFsaXplRW5kVGFn
KGVsZW1lbnQsIHBhcmFtKTsKLSAgICAvLyBTYXZlIHRoZSByZXN1bHQgdG8gZGF0YSBidWZmZXIu
Ci0gICAgc2F2ZUhUTUxDb250ZW50VG9CdWZmZXIocmVzdWx0LCBwYXJhbSk7CisKKyAgICBVUkxS
ZXdyaXRlciogbV91cmxSZXdyaXRlcgorICAgIGJvb2wgbV9oYXZlQWRkZWRNYXJrT2ZUaGVXZWI7
CisgICAgYm9vbCBtX2hhdmVBZGRlZENoYXJzZXREZWNsYXJhdGlvbjsKIH0KIAotdm9pZCBXZWJQ
YWdlU2VyaWFsaXplckltcGw6OmJ1aWxkQ29udGVudEZvck5vZGUoY29uc3QgTm9kZSogbm9kZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlcmlhbGl6
ZURvbVBhcmFtKiBwYXJhbSkKKy8vIE1heGltdW0gbGVuZ3RoIG9mIGRhdGEgYnVmZmVyIHdoaWNo
IGlzIHVzZWQgdG8gdGVtcG9yYXJ5IHNhdmUgZ2VuZXJhdGVkCisvLyBodG1sIGNvbnRlbnQgZGF0
YS4gVGhpcyBpcyBhIHNvZnQgbGltaXQgd2hpY2ggbWlnaHQgYmUgcGFzc2VkIGlmIGEgdmVyeSBs
YXJnZQorLy8gY29udGVnaW91cyBzdHJpbmcgaXMgZm91bmQgaW4gdGhlIHBhZ2UuCisvLyBGSVhN
RTogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGRhdGFCdWZmZXJDYXBhY2l0eSA9IDY1NTM2OworCit2
b2lkIFdlYlBhZ2VTZXJpYWxpemVySW1wbDo6ZW5jb2RlQW5kRmx1c2hCdWZmZXIoV2ViUGFnZVNl
cmlhbGl6ZXJDbGllbnQ6OlBhZ2VTZXJpYWxpemF0aW9uU3RhdHVzIHN0YXR1cywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBLVVJMJiB1cmws
IGNvbnN0IFN0cmluZyYgbWFya3VwLCBGbHVzaE9wdGlvbiBmbHVzaE9wdGlvbikKIHsKLSAgICBz
d2l0Y2ggKG5vZGUtPm5vZGVUeXBlKCkpIHsKLSAgICBjYXNlIE5vZGU6OkVMRU1FTlRfTk9ERToK
LSAgICAgICAgLy8gUHJvY2VzcyBvcGVuIHRhZyBvZiBlbGVtZW50LgotICAgICAgICBvcGVuVGFn
VG9TdHJpbmcoc3RhdGljX2Nhc3Q8Y29uc3QgRWxlbWVudCo+KG5vZGUpLCBwYXJhbSk7Ci0gICAg
ICAgIC8vIFdhbGsgdGhyb3VnaCB0aGUgY2hpbGRyZW4gbm9kZXMgYW5kIHByb2Nlc3MgaXQuCi0g
ICAgICAgIGZvciAoY29uc3QgTm9kZSAqY2hpbGQgPSBub2RlLT5maXJzdENoaWxkKCk7IGNoaWxk
OyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQotICAgICAgICAgICAgYnVpbGRDb250ZW50
Rm9yTm9kZShjaGlsZCwgcGFyYW0pOwotICAgICAgICAvLyBQcm9jZXNzIGVuZCB0YWcgb2YgZWxl
bWVudC4KLSAgICAgICAgZW5kVGFnVG9TdHJpbmcoc3RhdGljX2Nhc3Q8Y29uc3QgRWxlbWVudCo+
KG5vZGUpLCBwYXJhbSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTm9kZTo6VEVYVF9OT0RF
OgotICAgICAgICBzYXZlSFRNTENvbnRlbnRUb0J1ZmZlcihjcmVhdGVNYXJrdXAobm9kZSksIHBh
cmFtKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBOb2RlOjpBVFRSSUJVVEVfTk9ERToKLSAg
ICBjYXNlIE5vZGU6OkRPQ1VNRU5UX05PREU6Ci0gICAgY2FzZSBOb2RlOjpET0NVTUVOVF9GUkFH
TUVOVF9OT0RFOgotICAgICAgICAvLyBTaG91bGQgbm90IGV4aXN0LgotICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgLy8gRG9jdW1lbnQgdHlwZSBub2Rl
IGNhbiBiZSBpbiBET00/Ci0gICAgY2FzZSBOb2RlOjpET0NVTUVOVF9UWVBFX05PREU6Ci0gICAg
ICAgIHBhcmFtLT5oYXZlU2VlbkRvY1R5cGUgPSB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IC8vIEZvciBvdGhlciB0eXBlIG5vZGUsIGNhbGwgZGVmYXVsdCBhY3Rpb24uCi0gICAgICAgIHNh
dmVIVE1MQ29udGVudFRvQnVmZmVyKGNyZWF0ZU1hcmt1cChub2RlKSwgcGFyYW0pOwotICAgICAg
ICBicmVhazsKLSAgICB9CisgICAgLy8gRGF0YSBidWZmZXIgaXMgbm90IGZ1bGwgbm9yIGRvIHdl
IHdhbnQgdG8gZm9yY2UgZmx1c2guCisgICAgaWYgKGZsdXNoT3B0aW9uICE9IEZvcmNlRmx1c2gp
CisgICAgICAgIHJldHVybjsKKyAgICBDU3RyaW5nIGVuY29kZWRNYXJrdXAgPSBVVEY4RW5jb2Rp
bmcoKS5lbmNvZGUoY29udGVudC5jaGFyYWN0ZXJzKCksIGNvbnRlbnQubGVuZ3RoKCksIEVudGl0
aWVzRm9yVW5lbmNvZGFibGVzKTsKKyAgICBtX2NsaWVudC0+ZGlkU2VyaWFsaXplRGF0YUZvckZy
YW1lKHVybCwgV2ViQ1N0cmluZyhlbmNvZGVkTWFya3VwLmRhdGEoKSwgZW5jb2RlZE1hcmt1cC5s
ZW5ndGgoKSksIHN0YXR1cyk7CiB9CiAKIFdlYlBhZ2VTZXJpYWxpemVySW1wbDo6V2ViUGFnZVNl
cmlhbGl6ZXJJbXBsKFdlYkZyYW1lKiBmcmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgcmVjdXJzaXZlU2VyaWFsaXphdGlvbiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVjdXJzaXZlLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViUGFnZVNlcmlhbGl6
ZXJDbGllbnQqIGNsaWVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJVUkw+JiBsaW5rcywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiBs
b2NhbFBhdGhzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgV2ViU3RyaW5nJiBsb2NhbERpcmVjdG9yeU5hbWUpCiAgICAgOiBtX2NsaWVudChjbGll
bnQpCi0gICAgLCBtX3JlY3Vyc2l2ZVNlcmlhbGl6YXRpb24ocmVjdXJzaXZlU2VyaWFsaXphdGlv
bikKLSAgICAsIG1fZnJhbWVzQ29sbGVjdGVkKGZhbHNlKQorICAgICwgbV93ZWJGcmFtZShzdGF0
aWNfY2FzdDxXZWJGcmFtZUltcGwqPihmcmFtZSkpCisgICAgLCBtX3JlY3Vyc2l2ZShyZWN1cnNp
dmUpCiAgICAgLCBtX2xvY2FsRGlyZWN0b3J5TmFtZShsb2NhbERpcmVjdG9yeU5hbWUpCi0gICAg
LCBtX2h0bWxFbnRpdGllcyhmYWxzZSkKLSAgICAsIG1feG1sRW50aXRpZXModHJ1ZSkKIHsKLSAg
ICAvLyBNdXN0IHNwZWNpZnkgYXZhaWxhYmxlIHdlYmZyYW1lLgotICAgIEFTU0VSVChmcmFtZSk7
Ci0gICAgbV9zcGVjaWZpZWRXZWJGcmFtZUltcGwgPSBzdGF0aWNfY2FzdDxXZWJGcmFtZUltcGwq
PihmcmFtZSk7Ci0gICAgLy8gTWFrZSBzdXJlIHdlIGhhdmUgbm9uIDAgY2xpZW50LgogICAgIEFT
U0VSVChjbGllbnQpOwotICAgIC8vIEJ1aWxkIGxvY2FsIHJlc291cmNlcyBtYXAuCiAgICAgQVNT
RVJUKGxpbmtzLnNpemUoKSA9PSBsb2NhbFBhdGhzLnNpemUoKSk7Ci0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBsaW5rcy5zaXplKCk7IGkrKykgeworICAgIEFTU0VSVChmcmFtZSk7CisKKyAg
ICBPd25QdHI8VVJMUmV3cml0ZXI6OlVSTE1hcD4gbWFwID0gYWRvcHRQdHIobmV3IFVSTFJld3Jp
dGVyOjpVUkxNYXApOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlua3Muc2l6ZSgpOyAr
K2kpIHsKICAgICAgICAgS1VSTCB1cmwgPSBsaW5rc1tpXTsKLSAgICAgICAgQVNTRVJUKCFtX2xv
Y2FsTGlua3MuY29udGFpbnModXJsLnN0cmluZygpKSk7Ci0gICAgICAgIG1fbG9jYWxMaW5rcy5z
ZXQodXJsLnN0cmluZygpLCBsb2NhbFBhdGhzW2ldKTsKKyAgICAgICAgQVNTRVJUKCFtYXAtPmNv
bnRhaW5zKHVybC5zdHJpbmcoKSkpOworICAgICAgICBtYXAtPnNldCh1cmwuc3RyaW5nKCksIGxv
Y2FsUGF0aHNbaV0pOwogICAgIH0KKyAgICBtX3VybFJld3JpdGVyID0gVVJMUmV3cml0ZXI6OmNy
ZWF0ZShwcmVmaXgsIG1hcC5yZWxlYXNlKCkpOwogCiAgICAgQVNTRVJUKG1fZGF0YUJ1ZmZlci5p
c0VtcHR5KCkpOwogfQogCi12b2lkIFdlYlBhZ2VTZXJpYWxpemVySW1wbDo6Y29sbGVjdFRhcmdl
dEZyYW1lcygpCit2b2lkIFdlYlBhZ2VTZXJpYWxpemVySW1wbDo6Y29sbGVjdEZyYW1lcygpCiB7
Ci0gICAgQVNTRVJUKCFtX2ZyYW1lc0NvbGxlY3RlZCk7Ci0gICAgbV9mcmFtZXNDb2xsZWN0ZWQg
PSB0cnVlOwotCi0gICAgLy8gRmlyc3QsIHByb2Nlc3MgbWFpbiBmcmFtZS4KLSAgICBtX2ZyYW1l
cy5hcHBlbmQobV9zcGVjaWZpZWRXZWJGcmFtZUltcGwpOwotICAgIC8vIFJldHVybiBub3cgaWYg
dXNlciBvbmx5IG5lZWRzIHRvIHNlcmlhbGl6ZSBzcGVjaWZpZWQgZnJhbWUsIG5vdCBpbmNsdWRp
bmcKLSAgICAvLyBhbGwgc3ViLWZyYW1lcy4KLSAgICBpZiAoIW1fcmVjdXJzaXZlU2VyaWFsaXph
dGlvbikKKyAgICBpZiAoIW1fZnJhbWVzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAg
IG1fZnJhbWVzLmFwcGVuZChtX3dlYkZyYW1lKTsKKworICAgIGlmICghbV9yZWN1cnNpdmUpCiAg
ICAgICAgIHJldHVybjsKLSAgICAvLyBDb2xsZWN0IGFsbCBmcmFtZXMgaW5zaWRlIHRoZSBzcGVj
aWZpZWQgZnJhbWUuCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzdGF0aWNfY2FzdDxpbnQ+KG1f
ZnJhbWVzLnNpemUoKSk7ICsraSkgewotICAgICAgICBXZWJGcmFtZUltcGwqIGN1cnJlbnRGcmFt
ZSA9IG1fZnJhbWVzW2ldOwotICAgICAgICAvLyBHZXQgY3VycmVudCB1c2luZyBkb2N1bWVudC4K
LSAgICAgICAgRG9jdW1lbnQqIGN1cnJlbnREb2MgPSBjdXJyZW50RnJhbWUtPmZyYW1lKCktPmRv
Y3VtZW50KCk7Ci0gICAgICAgIC8vIEdvIHRocm91Z2ggc3ViLWZyYW1lcy4KLSAgICAgICAgUmVm
UHRyPEhUTUxBbGxDb2xsZWN0aW9uPiBhbGwgPSBjdXJyZW50RG9jLT5hbGwoKTsKKworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2ZyYW1lcy5zaXplKCk7ICsraSkgeworICAgICAgICBS
ZWZQdHI8SFRNTEFsbENvbGxlY3Rpb24+IGFsbCA9IG1fZnJhbWVzW2ldLT5mcmFtZSgpLT5kb2N1
bWVudCgpLT5hbGwoKTsKICAgICAgICAgZm9yIChOb2RlKiBub2RlID0gYWxsLT5maXJzdEl0ZW0o
KTsgbm9kZTsgbm9kZSA9IGFsbC0+bmV4dEl0ZW0oKSkgewogICAgICAgICAgICAgaWYgKCFub2Rl
LT5pc0hUTUxFbGVtZW50KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICBFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpOwotICAgICAg
ICAgICAgV2ViRnJhbWVJbXBsKiB3ZWJGcmFtZSA9Ci0gICAgICAgICAgICAgICAgV2ViRnJhbWVJ
bXBsOjpmcm9tRnJhbWVPd25lckVsZW1lbnQoZWxlbWVudCk7Ci0gICAgICAgICAgICBpZiAod2Vi
RnJhbWUpCi0gICAgICAgICAgICAgICAgbV9mcmFtZXMuYXBwZW5kKHdlYkZyYW1lKTsKKyAgICAg
ICAgICAgIFdlYkZyYW1lSW1wbCogd2ViRnJhbWUgPSBXZWJGcmFtZUltcGw6OmZyb21GcmFtZU93
bmVyRWxlbWVudChzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KG5vZGUpKTsKKyAgICAgICAgICAg
IGlmICghd2ViRnJhbWUpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBt
X2ZyYW1lcy5hcHBlbmQod2ViRnJhbWUpOwogICAgICAgICB9CiAgICAgfQogfQogCiBib29sIFdl
YlBhZ2VTZXJpYWxpemVySW1wbDo6c2VyaWFsaXplKCkKIHsKLSAgICBpZiAoIW1fZnJhbWVzQ29s
bGVjdGVkKQotICAgICAgICBjb2xsZWN0VGFyZ2V0RnJhbWVzKCk7CisgICAgY29sbGVjdEZyYW1l
cygpOwogCiAgICAgYm9vbCBkaWRTZXJpYWxpemF0aW9uID0gZmFsc2U7Ci0gICAgS1VSTCBtYWlu
VVJMID0gbV9zcGVjaWZpZWRXZWJGcmFtZUltcGwtPmZyYW1lKCktPmRvY3VtZW50KCktPnVybCgp
OworICAgIEtVUkwgbWFpblVSTCA9IG1fd2ViRnJhbWUtPmZyYW1lKCktPmRvY3VtZW50KCktPnVy
bCgpOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZnJhbWVzLnNpemUoKTsgKytp
KSB7CiAgICAgICAgIFdlYkZyYW1lSW1wbCogd2ViRnJhbWUgPSBtX2ZyYW1lc1tpXTsKQEAgLTUw
NSwxNyArMzAxLDExIEBAIGJvb2wgV2ViUGFnZVNlcmlhbGl6ZXJJbXBsOjpzZXJpYWxpemUoKQog
CiAgICAgICAgIGRpZFNlcmlhbGl6YXRpb24gPSB0cnVlOwogCi0gICAgICAgIFN0cmluZyBlbmNv
ZGluZyA9IHdlYkZyYW1lLT5mcmFtZSgpLT5sb2FkZXIoKS0+d3JpdGVyKCktPmVuY29kaW5nKCk7
Ci0gICAgICAgIGNvbnN0IFRleHRFbmNvZGluZyYgdGV4dEVuY29kaW5nID0gZW5jb2RpbmcuaXNF
bXB0eSgpID8gVVRGOEVuY29kaW5nKCkgOiBUZXh0RW5jb2RpbmcoZW5jb2RpbmcpOwotICAgICAg
ICBTdHJpbmcgZGlyZWN0b3J5TmFtZSA9IHVybCA9PSBtYWluVVJMID8gbV9sb2NhbERpcmVjdG9y
eU5hbWUgOiAiIjsKLQotICAgICAgICBTZXJpYWxpemVEb21QYXJhbSBwYXJhbSh1cmwsIHRleHRF
bmNvZGluZywgZG9jdW1lbnQsIGRpcmVjdG9yeU5hbWUpOwotCi0gICAgICAgIEVsZW1lbnQqIGRv
Y3VtZW50RWxlbWVudCA9IGRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKTsKLSAgICAgICAgaWYg
KGRvY3VtZW50RWxlbWVudCkKLSAgICAgICAgICAgIGJ1aWxkQ29udGVudEZvck5vZGUoZG9jdW1l
bnRFbGVtZW50LCAmcGFyYW0pOworICAgICAgICBtX3VybFJld3JpdGVyLT5zZXRQcmVmaXgodXJs
ID09IG1haW5VUkwgPyAiLi8iICsgbV9sb2NhbERpcmVjdG9yeU5hbWUgKyAiLyIgOiBTdHJpbmco
KSk7CisgICAgICAgIExvY2FsaXplZE1hcmt1cEFjY3VtdWxhdG9yIGFjY3VtdWxhdG9yKG1fdXJs
UmV3cml0ZXIuZ2V0KCkpOworICAgICAgICBTdHJpbmcgbWFya3VwID0gYWNjdW11bGF0b3Iuc2Vy
aWFsaXplTm9kZXMoZG9jdW1lbnQsIDAsIENoaWxkcmVuT25seSk7CiAKLSAgICAgICAgZW5jb2Rl
QW5kRmx1c2hCdWZmZXIoV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQ6OkN1cnJlbnRGcmFtZUlzRmlu
aXNoZWQsICZwYXJhbSwgRm9yY2VGbHVzaCk7CisgICAgICAgIGVuY29kZUFuZEZsdXNoQnVmZmVy
KFdlYlBhZ2VTZXJpYWxpemVyQ2xpZW50OjpDdXJyZW50RnJhbWVJc0ZpbmlzaGVkLCB1cmwsIG1h
cmt1cCwgRm9yY2VGbHVzaCk7CiAgICAgfQogCiAgICAgQVNTRVJUKG1fZGF0YUJ1ZmZlci5pc0Vt
cHR5KCkpOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQYWdlU2VyaWFsaXpl
ckltcGwuaCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGFnZVNlcmlhbGl6ZXJJbXBsLmgKaW5k
ZXggNWVlODgwNTM2Mjk4YjExMzFjNmRhN2QyMjc5YjUxZGUxZTVhNjA2NC4uZWUzZTg2NzljY2Zi
ZjRhYmU4OWZiMDA0ZTZkMWM4NzZjZjYyYzhkZCAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJQYWdlU2VyaWFsaXplckltcGwuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlBhZ2VTZXJpYWxpemVySW1wbC5oCkBAIC0zOCw3ICszOCw2IEBACiAjaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nSGFzaC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCi0jaW5j
bHVkZSAiV2ViRW50aXRpZXMuaCIKICNpbmNsdWRlICJXZWJQYWdlU2VyaWFsaXplci5oIgogI2lu
Y2x1ZGUgIldlYlBhZ2VTZXJpYWxpemVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViU3RyaW5nLmgi
CkBAIC01Miw2ICs1MSw3IEBAIGNsYXNzIFRleHRFbmNvZGluZzsKIH0KIAogbmFtZXNwYWNlIFdl
YktpdCB7CisKIGNsYXNzIFdlYkZyYW1lSW1wbDsKIAogLy8gR2V0IGh0bWwgZGF0YSBieSBzZXJp
YWxpemluZyBhbGwgZnJhbWVzIG9mIGN1cnJlbnQgcGFnZSB3aXRoIGxpc3RzCkBAIC04Nyw4MCAr
ODcsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlN0cmlu
ZyYgbG9jYWxEaXJlY3RvcnlOYW1lKTsKIAogcHJpdmF0ZToKLSAgICAvLyBTcGVjaWZpZWQgZnJh
bWUgd2hpY2ggbmVlZCB0byBiZSBzZXJpYWxpemVkOwotICAgIFdlYkZyYW1lSW1wbCogbV9zcGVj
aWZpZWRXZWJGcmFtZUltcGw7Ci0gICAgLy8gUG9pbnRlciBvZiBXZWJQYWdlU2VyaWFsaXplckNs
aWVudAotICAgIFdlYlBhZ2VTZXJpYWxpemVyQ2xpZW50KiBtX2NsaWVudDsKLSAgICAvLyBUaGlz
IGhhc2ggbWFwIGlzIHVzZWQgdG8gbWFwIHJlc291cmNlIFVSTCBvZiBvcmlnaW5hbCBsaW5rIHRv
IGl0cyBsb2NhbAotICAgIC8vIGZpbGUgcGF0aC4KLSAgICB0eXBlZGVmIEhhc2hNYXA8V1RGOjpT
dHJpbmcsIFdURjo6U3RyaW5nPiBMaW5rTG9jYWxQYXRoTWFwOwotICAgIC8vIGxvY2FsX2xpbmtz
XyBpbmNsdWRlIGFsbCBwYWlyIG9mIGxvY2FsIHJlc291cmNlIHBhdGggYW5kIGNvcnJlc3BvbmRp
bmcKLSAgICAvLyBvcmlnaW5hbCBsaW5rLgotICAgIExpbmtMb2NhbFBhdGhNYXAgbV9sb2NhbExp
bmtzOwotICAgIC8vIERhdGEgYnVmZmVyIGZvciBzYXZpbmcgcmVzdWx0IG9mIHNlcmlhbGl6ZWQg
RE9NIGRhdGEuCi0gICAgU3RyaW5nQnVpbGRlciBtX2RhdGFCdWZmZXI7Ci0gICAgLy8gUGFzc2lu
ZyB0cnVlIHRvIHJlY3Vyc2l2ZV9zZXJpYWxpemF0aW9uXyBpbmRpY2F0ZXMgd2Ugd2lsbCBzZXJp
YWxpemUgbm90Ci0gICAgLy8gb25seSB0aGUgc3BlY2lmaWVkIGZyYW1lIGJ1dCBhbHNvIGFsbCBz
dWItZnJhbWVzIGluIHRoZSBzcGVjaWZpYyBmcmFtZS4KLSAgICAvLyBPdGhlcndpc2Ugd2Ugb25s
eSBzZXJpYWxpemUgdGhlIHNwZWNpZmllZCBmcmFtZSBleGNsdWRlZCBhbGwgc3ViLWZyYW1lcy4K
LSAgICBib29sIG1fcmVjdXJzaXZlU2VyaWFsaXphdGlvbjsKLSAgICAvLyBGbGFnIGluZGljYXRl
cyB3aGV0aGVyIHdlIGhhdmUgY29sbGVjdGVkIGFsbCBmcmFtZXMgd2hpY2ggbmVlZCB0byBiZQot
ICAgIC8vIHNlcmlhbGl6ZWQgb3Igbm90OwotICAgIGJvb2wgbV9mcmFtZXNDb2xsZWN0ZWQ7Ci0g
ICAgLy8gTG9jYWwgZGlyZWN0b3J5IG5hbWUgb2YgYWxsIGxvY2FsIHJlc291cmNlIGZpbGVzLgot
ICAgIFdURjo6U3RyaW5nIG1fbG9jYWxEaXJlY3RvcnlOYW1lOwotICAgIC8vIFZlY3RvciBmb3Ig
c2F2aW5nIGFsbCBmcmFtZXMgd2hpY2ggbmVlZCB0byBiZSBzZXJpYWxpemVkLgotICAgIFZlY3Rv
cjxXZWJGcmFtZUltcGwqPiBtX2ZyYW1lczsKLQotICAgIC8vIFdlYiBlbnRpdGllcyBjb252ZXJz
aW9uIG1hcHMuCi0gICAgV2ViRW50aXRpZXMgbV9odG1sRW50aXRpZXM7Ci0gICAgV2ViRW50aXRp
ZXMgbV94bWxFbnRpdGllczsKLQotICAgIHN0cnVjdCBTZXJpYWxpemVEb21QYXJhbSB7Ci0gICAg
ICAgIGNvbnN0IFdlYkNvcmU6OktVUkwmIHVybDsKLSAgICAgICAgY29uc3QgV2ViQ29yZTo6VGV4
dEVuY29kaW5nJiB0ZXh0RW5jb2Rpbmc7Ci0gICAgICAgIFdlYkNvcmU6OkRvY3VtZW50KiBkb2N1
bWVudDsKLSAgICAgICAgY29uc3QgV1RGOjpTdHJpbmcmIGRpcmVjdG9yeU5hbWU7Ci0gICAgICAg
IGJvb2wgaXNIVE1MRG9jdW1lbnQ7IC8vIGRvY3VtZW50LmlzSFRNTERvY3VtZW50KCkKLSAgICAg
ICAgYm9vbCBoYXZlU2VlbkRvY1R5cGU7Ci0gICAgICAgIGJvb2wgaGF2ZUFkZGVkQ2hhcnNldERl
Y2xhcmF0aW9uOwotICAgICAgICAvLyBUaGlzIG1ldGEgZWxlbWVudCBuZWVkIHRvIGJlIHNraXBw
ZWQgd2hlbiBzZXJpYWxpemluZyBET00uCi0gICAgICAgIGNvbnN0IFdlYkNvcmU6OkVsZW1lbnQq
IHNraXBNZXRhRWxlbWVudDsKLSAgICAgICAgLy8gRmxhZyBpbmRpY2F0ZXMgd2UgYXJlIGluIHNj
cmlwdCBvciBzdHlsZSB0YWcuCi0gICAgICAgIGJvb2wgaXNJblNjcmlwdE9yU3R5bGVUYWc7Ci0g
ICAgICAgIGJvb2wgaGF2ZUFkZGVkWE1MUHJvY2Vzc2luZ0RpcmVjdGl2ZTsKLSAgICAgICAgLy8g
RmxhZyBpbmRpY2F0ZXMgd2hldGhlciB3ZSBoYXZlIGFkZGVkIGFkZGl0aW9uYWwgY29udGVudHMg
YmVmb3JlIGVuZCB0YWcuCi0gICAgICAgIC8vIFRoaXMgZmxhZyB3aWxsIGJlIHJlLWFzc2lnbmVk
IGluIGVhY2ggY2FsbCBvZiBmdW5jdGlvbgotICAgICAgICAvLyBQb3N0QWN0aW9uQWZ0ZXJTZXJp
YWxpemVPcGVuVGFnIGFuZCBpdCBjb3VsZCBiZSBjaGFuZ2VkIGluIGZ1bmN0aW9uCi0gICAgICAg
IC8vIFByZUFjdGlvbkJlZm9yZVNlcmlhbGl6ZUVuZFRhZyBpZiB0aGUgZnVuY3Rpb24gYWRkcyBu
ZXcgY29udGVudHMgaW50bwotICAgICAgICAvLyBzZXJpYWxpemF0aW9uIHN0cmVhbS4KLSAgICAg
ICAgYm9vbCBoYXZlQWRkZWRDb250ZW50c0JlZm9yZUVuZDsKLQotICAgICAgICBTZXJpYWxpemVE
b21QYXJhbShjb25zdCBXZWJDb3JlOjpLVVJMJiwgY29uc3QgV2ViQ29yZTo6VGV4dEVuY29kaW5n
JiwgV2ViQ29yZTo6RG9jdW1lbnQqLCBjb25zdCBXVEY6OlN0cmluZyYgZGlyZWN0b3J5TmFtZSk7
Ci0gICAgfTsKLQotICAgIC8vIENvbGxlY3QgYWxsIHRhcmdldCBmcmFtZXMgd2hpY2ggbmVlZCB0
byBiZSBzZXJpYWxpemVkLgotICAgIHZvaWQgY29sbGVjdFRhcmdldEZyYW1lcygpOwotICAgIC8v
IEJlZm9yZSB3ZSBiZWdpbiBzZXJpYWxpemluZyBvcGVuIHRhZyBvZiBhIGVsZW1lbnQsIHdlIGdp
dmUgdGhlIHRhcmdldAotICAgIC8vIGVsZW1lbnQgYSBjaGFuY2UgdG8gZG8gc29tZSB3b3JrIHBy
aW9yIHRvIGFkZCBzb21lIGFkZGl0aW9uYWwgZGF0YS4KLSAgICBXVEY6OlN0cmluZyBwcmVBY3Rp
b25CZWZvcmVTZXJpYWxpemVPcGVuVGFnKGNvbnN0IFdlYkNvcmU6OkVsZW1lbnQqIGVsZW1lbnQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2Vy
aWFsaXplRG9tUGFyYW0qIHBhcmFtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wqIG5lZWRTa2lwKTsKLSAgICAvLyBBZnRlciB3ZSBmaW5p
c2ggc2VyaWFsaXppbmcgb3BlbiB0YWcgb2YgYSBlbGVtZW50LCB3ZSBnaXZlIHRoZSB0YXJnZXQK
LSAgICAvLyBlbGVtZW50IGEgY2hhbmNlIHRvIGRvIHNvbWUgcG9zdCB3b3JrIHRvIGFkZCBzb21l
IGFkZGl0aW9uYWwgZGF0YS4KLSAgICBXVEY6OlN0cmluZyBwb3N0QWN0aW9uQWZ0ZXJTZXJpYWxp
emVPcGVuVGFnKGNvbnN0IFdlYkNvcmU6OkVsZW1lbnQqIGVsZW1lbnQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VyaWFsaXplRG9tUGFyYW0q
IHBhcmFtKTsKLSAgICAvLyBCZWZvcmUgd2UgYmVnaW4gc2VyaWFsaXppbmcgZW5kIHRhZyBvZiBh
IGVsZW1lbnQsIHdlIGdpdmUgdGhlIHRhcmdldAotICAgIC8vIGVsZW1lbnQgYSBjaGFuY2UgdG8g
ZG8gc29tZSB3b3JrIHByaW9yIHRvIGFkZCBzb21lIGFkZGl0aW9uYWwgZGF0YS4KLSAgICBXVEY6
OlN0cmluZyBwcmVBY3Rpb25CZWZvcmVTZXJpYWxpemVFbmRUYWcoY29uc3QgV2ViQ29yZTo6RWxl
bWVudCogZWxlbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFNlcmlhbGl6ZURvbVBhcmFtKiBwYXJhbSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wqIG5lZWRTa2lwKTsKLSAgICAvLyBB
ZnRlciB3ZSBmaW5pc2ggc2VyaWFsaXppbmcgZW5kIHRhZyBvZiBhIGVsZW1lbnQsIHdlIGdpdmUg
dGhlIHRhcmdldAotICAgIC8vIGVsZW1lbnQgYSBjaGFuY2UgdG8gZG8gc29tZSBwb3N0IHdvcmsg
dG8gYWRkIHNvbWUgYWRkaXRpb25hbCBkYXRhLgotICAgIFdURjo6U3RyaW5nIHBvc3RBY3Rpb25B
ZnRlclNlcmlhbGl6ZUVuZFRhZyhjb25zdCBXZWJDb3JlOjpFbGVtZW50KiBlbGVtZW50LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VyaWFsaXpl
RG9tUGFyYW0qIHBhcmFtKTsKLSAgICAvLyBTYXZlIGdlbmVyYXRlZCBodG1sIGNvbnRlbnQgdG8g
ZGF0YSBidWZmZXIuCi0gICAgdm9pZCBzYXZlSFRNTENvbnRlbnRUb0J1ZmZlcihjb25zdCBXVEY6
OlN0cmluZyYgY29udGVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlcmlh
bGl6ZURvbVBhcmFtKiBwYXJhbSk7CisgICAgdm9pZCBjb2xsZWN0RnJhbWVzKCk7CiAKICAgICBl
bnVtIEZsdXNoT3B0aW9uIHsKICAgICAgICAgRm9yY2VGbHVzaCwKQEAgLTE3MSwxNyArOTgsMTUg
QEAgcHJpdmF0ZToKICAgICAvLyBXZWJQYWdlU2VyaWFsaXplckNsaWVudC4gQ29udGVudCBpcyBu
b3QgZmx1c2hlZCBpZiB0aGUgYnVmZmVyIGlzIG5vdCBmdWxsCiAgICAgLy8gdW5sZXNzIGZvcmNl
IGlzIDEuCiAgICAgdm9pZCBlbmNvZGVBbmRGbHVzaEJ1ZmZlcihXZWJQYWdlU2VyaWFsaXplckNs
aWVudDo6UGFnZVNlcmlhbGl6YXRpb25TdGF0dXMgc3RhdHVzLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgU2VyaWFsaXplRG9tUGFyYW0qIHBhcmFtLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRmx1c2hPcHRpb24pOwotICAgIC8vIFNlcmlhbGl6ZSBvcGVuIHRhZyBvZiBh
biBzcGVjaWZpZWQgZWxlbWVudC4KLSAgICB2b2lkIG9wZW5UYWdUb1N0cmluZyhjb25zdCBXZWJD
b3JlOjpFbGVtZW50KiBlbGVtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgIFNlcmlhbGl6
ZURvbVBhcmFtKiBwYXJhbSk7Ci0gICAgLy8gU2VyaWFsaXplIGVuZCB0YWcgb2YgYW4gc3BlY2lm
aWVkIGVsZW1lbnQuCi0gICAgdm9pZCBlbmRUYWdUb1N0cmluZyhjb25zdCBXZWJDb3JlOjpFbGVt
ZW50KiBlbGVtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgU2VyaWFsaXplRG9tUGFyYW0q
IHBhcmFtKTsKLSAgICAvLyBCdWlsZCBjb250ZW50IGZvciBhIHNwZWNpZmllZCBub2RlCi0gICAg
dm9pZCBidWlsZENvbnRlbnRGb3JOb2RlKGNvbnN0IFdlYkNvcmU6Ok5vZGUqIG5vZGUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFNlcmlhbGl6ZURvbVBhcmFtKiBwYXJhbSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYg
bWFya3VwLCBGbHVzaE9wdGlvbik7CisKKyAgICBXZWJQYWdlU2VyaWFsaXplckNsaWVudCogbV9j
bGllbnQ7CisgICAgV2ViRnJhbWVJbXBsKiBtX3dlYkZyYW1lOworICAgIGJvb2wgbV9yZWN1cnNp
dmU7CisgICAgVmVjdG9yPFdlYkZyYW1lSW1wbCo+IG1fZnJhbWVzOworCisgICAgU3RyaW5nQnVp
bGRlciBtX2RhdGFCdWZmZXI7CisgICAgV1RGOjpTdHJpbmcgbV9sb2NhbERpcmVjdG9yeU5hbWU7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71078</attachid>
            <date>2010-10-18 14:00:50 -0700</date>
            <delta_ts>2010-10-18 15:05:30 -0700</delta_ts>
            <desc>what-what the compile</desc>
            <filename>bug-47748-20101018140049.patch</filename>
            <type>text/plain</type>
            <size>35016</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5jcHAgYi9XZWJD
b3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuY3BwCmluZGV4IDkxYTc0Yzg4ODkxMDI2ZGEy
OGRiZTE4Y2NkODE5ODczNTE0MDQ4N2QuLjczNDllMmVkMTIzOGRjMGI3YWUxNDM1ZmE5YTNlODJi
ZWJiZTNkM2EgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5j
cHAKKysrIGIvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmNwcApAQCAtMzY0LDEw
ICszNjQsNyBAQCB2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRBdHRyaWJ1dGUoVmVjdG9y
PFVDaGFyPiYgb3V0LCBFbGVtZW50KiBlbGVtZW50LCBjbwogICAgIGlmIChlbGVtZW50LT5pc1VS
TEF0dHJpYnV0ZShjb25zdF9jYXN0PEF0dHJpYnV0ZSo+KCZhdHRyaWJ1dGUpKSkgewogICAgICAg
ICAvLyBXZSBkb24ndCB3YW50IHRvIGNvbXBsZXRlIGZpbGU6Ly8vIFVSTHMgYmVjYXVzZSBpdCBt
YXkgY29udGFpbiBzZW5zaXRpdmUgaW5mb3JtYXRpb24KICAgICAgICAgLy8gYWJvdXQgdGhlIHVz
ZXIncyBzeXN0ZW0uCi0gICAgICAgIGlmIChzaG91bGRSZXNvbHZlVVJMcygpICYmICFlbGVtZW50
LT5kb2N1bWVudCgpLT51cmwoKS5pc0xvY2FsRmlsZSgpKQotICAgICAgICAgICAgYXBwZW5kUXVv
dGVkVVJMQXR0cmlidXRlVmFsdWUob3V0LCBlbGVtZW50LT5kb2N1bWVudCgpLT5jb21wbGV0ZVVS
TChhdHRyaWJ1dGUudmFsdWUoKSkuc3RyaW5nKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBhcHBlbmRRdW90ZWRVUkxBdHRyaWJ1dGVWYWx1ZShvdXQsIGF0dHJpYnV0ZS52YWx1ZSgpKTsg
CisgICAgICAgIGFwcGVuZFF1b3RlZFVSTEF0dHJpYnV0ZVZhbHVlKG91dCwgc2hvdWxkUmVzb2x2
ZVVSTHMoKSA/IHJlc29sdmVVUkwoZWxlbWVudCwgYXR0cmlidXRlKSA6IGF0dHJpYnV0ZS52YWx1
ZSgpLnN0cmluZygpKTsKICAgICB9IGVsc2UgewogICAgICAgICBvdXQuYXBwZW5kKCdcIicpOwog
ICAgICAgICBhcHBlbmRBdHRyaWJ1dGVWYWx1ZShvdXQsIGF0dHJpYnV0ZS52YWx1ZSgpLCBkb2N1
bWVudElzSFRNTCk7CkBAIC0zNzgsNiArMzc1LDEzIEBAIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6
OmFwcGVuZEF0dHJpYnV0ZShWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqIGVsZW1lbnQsIGNv
CiAgICAgICAgIGFwcGVuZE5hbWVzcGFjZShvdXQsIGF0dHJpYnV0ZS5wcmVmaXgoKSwgYXR0cmli
dXRlLm5hbWVzcGFjZVVSSSgpLCAqbmFtZXNwYWNlcyk7CiB9CiAKK1N0cmluZyBNYXJrdXBBY2N1
bXVsYXRvcjo6cmVzb2x2ZVVSTChFbGVtZW50KiBlbGVtZW50LCBjb25zdCBBdHRyaWJ1dGUmIGF0
dHJpYnV0ZSkKK3sKKyAgICBpZiAoZWxlbWVudC0+ZG9jdW1lbnQoKS0+dXJsKCkuaXNMb2NhbEZp
bGUoKSkKKyAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZS52YWx1ZSgpOworICAgIHJldHVybiBlbGVt
ZW50LT5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTChhdHRyaWJ1dGUudmFsdWUoKSkuc3RyaW5nKCk7
Cit9CisKIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZENEQVRBU2VjdGlvbihWZWN0b3I8
VUNoYXI+JiBvdXQsIGNvbnN0IFN0cmluZyYgc2VjdGlvbikKIHsKICAgICAvLyBGSVhNRTogQ0RB
VEEgY29udGVudCBpcyBub3QgZXNjYXBlZCwgYnV0IFhNTFNlcmlhbGl6ZXIgKGFuZCBwb3NzaWJs
eSBvdGhlciBjYWxsZXJzKSBzaG91bGQgcmFpc2UgYW4gZXhjZXB0aW9uIGlmIGl0IGluY2x1ZGVz
ICJdXT4iLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmgg
Yi9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuaAppbmRleCBiMzVkMjMwODc3N2Ex
ZjBhOGRkNTQwMmVlNzYzZTgyNzhhYWMwOTgwLi4wZGJmMzcwYTA0NDcyNGE5YmRjZjBlMzY0MTVh
ZmE1N2EyNDYzNmY3IDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0
b3IuaAorKysgYi9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuaApAQCAtOTksNiAr
OTksNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBhcHBlbmRFbmRNYXJrdXAoVmVjdG9yPFVDaGFy
PiYgcmVzdWx0LCBjb25zdCBOb2RlKik7CiAKICAgICBib29sIHNob3VsZFJlc29sdmVVUkxzKCkg
eyByZXR1cm4gbV9zaG91bGRSZXNvbHZlVVJMcyA9PSBBYnNvbHV0ZVVSTHM7IH0KKyAgICB2aXJ0
dWFsIFN0cmluZyByZXNvbHZlVVJMKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEF0dHJpYnV0ZSYg
YXR0cmlidXRlKTsKIAogICAgIFZlY3RvcjxOb2RlKj4qIGNvbnN0IG1fbm9kZXM7CiAgICAgY29u
c3QgUmFuZ2UqIGNvbnN0IG1fcmFuZ2U7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA3ODIwYjFhNTcxZmE2NmY4
N2Y5NWIzZWVmMWMzNzhjMDljN2I0ODQ3Li5lM2ExN2ExMGIzYWJlYzA2MWFhM2UyNDM5ZDM3YTU5
M2RiODY5M2UwIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAxMC0xMC0xOCAgQWRh
bSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFdlYlBhZ2VTZXJpYWxpemVySW1wbCBkdXBsaWNhdGVzIChw
b29ybHkpIGEgbG90IG9mIGNvZGUgZnJvbSBNYXJrdXBBY2N1bXVsYXRvcgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDc3NDgKKworICAgICAgICAqIHNy
Yy9XZWJQYWdlU2VyaWFsaXplckltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpYWFhNYXJrdXBB
Y2N1bXVsYXRvcjo6WFhYTWFya3VwQWNjdW11bGF0b3IpOgorICAgICAgICAoV2ViS2l0OjpYWFhN
YXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRWxlbWVudCk6CisgICAgICAgIChXZWJLaXQ6OlhYWE1h
cmt1cEFjY3VtdWxhdG9yOjppc0NoYXJzZXREZWNsYXJhdGlvbik6CisgICAgICAgIChXZWJLaXQ6
OlhYWE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRCYXNlRWxlbWVudCk6CisgICAgICAgIChXZWJL
aXQ6OlhYWE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRNYXJrT2ZUaGVXZWIpOgorICAgICAgICAo
V2ViS2l0OjpYWFhNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQ2hhcnNldERlY2xhcmF0aW9uKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVNlcmlhbGl6ZXJJbXBsOjpvcGVuVGFnVG9TdHJpbmcp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlU2VyaWFsaXplckltcGw6OmVuZFRhZ1RvU3RyaW5n
KToKKwogMjAxMC0xMC0xNyAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBSZXZpZXdlZCBieSBZdXJ5IFNlbWlraGF0c2t5LgpkaWZmIC0tZ2l0IGEvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJQYWdlU2VyaWFsaXplckltcGwuY3BwIGIvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJQYWdlU2VyaWFsaXplckltcGwuY3BwCmluZGV4IDBkODVkNzg2OTE0N2U0NDNl
OTE0NjAyNThmOTUxM2FlMjNhN2MxOGMuLjc0YWJiYjA3NTlmNWIwYjI3MmQ4ZmRiYjNlMzgwODcz
OTkyNTlkMGMgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGFnZVNlcmlhbGl6
ZXJJbXBsLmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VTZXJpYWxpemVySW1w
bC5jcHAKQEAgLTgzLDExICs4MywxNCBAQAogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRl
ICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIkhUTUxBbGxDb2xsZWN0aW9uLmgiCisjaW5jbHVk
ZSAiSFRNTEJhc2VFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKICNpbmNsdWRl
ICJIVE1MRm9ybUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MSGVhZEVsZW1lbnQuaCIKICNpbmNs
dWRlICJIVE1MTWV0YUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRl
ICJLVVJMLmgiCisjaW5jbHVkZSAiTWFya3VwQWNjdW11bGF0b3IuaCIKICNpbmNsdWRlICJUZXh0
RW5jb2RpbmcuaCIKICNpbmNsdWRlICJtYXJrdXAuaCIKIApAQCAtMTAwLDQyMiArMTAzLDIyNCBA
QCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLS8vIE1h
eGltdW0gbGVuZ3RoIG9mIGRhdGEgYnVmZmVyIHdoaWNoIGlzIHVzZWQgdG8gdGVtcG9yYXJ5IHNh
dmUgZ2VuZXJhdGVkCi0vLyBodG1sIGNvbnRlbnQgZGF0YS4gVGhpcyBpcyBhIHNvZnQgbGltaXQg
d2hpY2ggbWlnaHQgYmUgcGFzc2VkIGlmIGEgdmVyeSBsYXJnZQotLy8gY29udGVnaW91cyBzdHJp
bmcgaXMgZm91bmQgaW4gdGhlIHBhZ2UuCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgZGF0YUJ1ZmZl
ckNhcGFjaXR5ID0gNjU1MzY7Ci0KLVdlYlBhZ2VTZXJpYWxpemVySW1wbDo6U2VyaWFsaXplRG9t
UGFyYW06OlNlcmlhbGl6ZURvbVBhcmFtKGNvbnN0IEtVUkwmIHVybCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRleHRF
bmNvZGluZyYgdGV4dEVuY29kaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
U3RyaW5nJiBkaXJlY3RvcnlOYW1lKQotICAgIDogdXJsKHVybCkKLSAgICAsIHRleHRFbmNvZGlu
Zyh0ZXh0RW5jb2RpbmcpCi0gICAgLCBkb2N1bWVudChkb2N1bWVudCkKLSAgICAsIGRpcmVjdG9y
eU5hbWUoZGlyZWN0b3J5TmFtZSkKLSAgICAsIGlzSFRNTERvY3VtZW50KGRvY3VtZW50LT5pc0hU
TUxEb2N1bWVudCgpKQotICAgICwgaGF2ZVNlZW5Eb2NUeXBlKGZhbHNlKQotICAgICwgaGF2ZUFk
ZGVkQ2hhcnNldERlY2xhcmF0aW9uKGZhbHNlKQotICAgICwgc2tpcE1ldGFFbGVtZW50KDApCi0g
ICAgLCBpc0luU2NyaXB0T3JTdHlsZVRhZyhmYWxzZSkKLSAgICAsIGhhdmVBZGRlZFhNTFByb2Nl
c3NpbmdEaXJlY3RpdmUoZmFsc2UpCi0gICAgLCBoYXZlQWRkZWRDb250ZW50c0JlZm9yZUVuZChm
YWxzZSkKLXsKLX0KK3VzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLVN0cmluZyBXZWJQYWdl
U2VyaWFsaXplckltcGw6OnByZUFjdGlvbkJlZm9yZVNlcmlhbGl6ZU9wZW5UYWcoCi0gICAgY29u
c3QgRWxlbWVudCogZWxlbWVudCwgU2VyaWFsaXplRG9tUGFyYW0qIHBhcmFtLCBib29sKiBuZWVk
U2tpcCkKLXsKLSAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKLQotICAgICpuZWVkU2tpcCA9IGZh
bHNlOwotICAgIGlmIChwYXJhbS0+aXNIVE1MRG9jdW1lbnQpIHsKLSAgICAgICAgLy8gU2tpcCB0
aGUgb3BlbiB0YWcgb2Ygb3JpZ2luYWwgTUVUQSB0YWcgd2hpY2ggZGVjbGFyZSBjaGFyc2V0IHNp
bmNlIHdlCi0gICAgICAgIC8vIGhhdmUgb3ZlcnJpZGVkIHRoZSBNRVRBIHdoaWNoIGhhdmUgY29y
cmVjdCBjaGFyc2V0IGRlY2xhcmF0aW9uIGFmdGVyCi0gICAgICAgIC8vIHNlcmlhbGl6aW5nIG9w
ZW4gdGFnIG9mIEhFQUQgZWxlbWVudC4KLSAgICAgICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjptZXRhVGFnKSkgewotICAgICAgICAgICAgY29uc3QgSFRNTE1ldGFFbGVtZW50
KiBtZXRhID0gc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTE1ldGFFbGVtZW50Kj4oZWxlbWVudCk7Ci0g
ICAgICAgICAgICAvLyBDaGVjayB3aGV0aGVyIHRoZSBNRVRBIHRhZyBoYXMgZGVjbGFyZWQgY2hh
cnNldCBvciBub3QuCi0gICAgICAgICAgICBTdHJpbmcgZXF1aXYgPSBtZXRhLT5odHRwRXF1aXYo
KTsKLSAgICAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShlcXVpdiwgImNvbnRlbnQtdHlw
ZSIpKSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIGNvbnRlbnQgPSBtZXRhLT5jb250ZW50KCk7
Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRlbnQubGVuZ3RoKCkgJiYgY29udGVudC5jb250YWlu
cygiY2hhcnNldCIsIGZhbHNlKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBGaW5kIE1FVEEg
dGFnIGRlY2xhcmVkIGNoYXJzZXQsIHdlIG5lZWQgdG8gc2tpcCBpdCB3aGVuCi0gICAgICAgICAg
ICAgICAgICAgIC8vIHNlcmlhbGl6aW5nIERPTS4KLSAgICAgICAgICAgICAgICAgICAgcGFyYW0t
PnNraXBNZXRhRWxlbWVudCA9IGVsZW1lbnQ7Ci0gICAgICAgICAgICAgICAgICAgICpuZWVkU2tp
cCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9IGVs
c2UgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpodG1sVGFnKSkgewotICAgICAg
ICAgICAgLy8gQ2hlY2sgc29tZXRoaW5nIGJlZm9yZSBwcm9jZXNzaW5nIHRoZSBvcGVuIHRhZyBv
ZiBIRUFEIGVsZW1lbnQuCi0gICAgICAgICAgICAvLyBGaXJzdCB3ZSBhZGQgZG9jIHR5cGUgZGVj
bGFyYXRpb24gaWYgb3JpZ2luYWwgZG9jdW1lbnQgaGFzIGl0LgotICAgICAgICAgICAgaWYgKCFw
YXJhbS0+aGF2ZVNlZW5Eb2NUeXBlKSB7Ci0gICAgICAgICAgICAgICAgcGFyYW0tPmhhdmVTZWVu
RG9jVHlwZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChjcmVhdGVNYXJr
dXAocGFyYW0tPmRvY3VtZW50LT5kb2N0eXBlKCkpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgLy8gQWRkIE1PVFcgZGVjbGFyYXRpb24gYmVmb3JlIGh0bWwgdGFnLgotICAgICAgICAg
ICAgLy8gU2VlIGh0dHA6Ly9tc2RuMi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXM1Mzc2
MjgoVlMuODUpLmFzcHguCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKFdlYlBhZ2VTZXJpYWxp
emVyOjpnZW5lcmF0ZU1hcmtPZlRoZVdlYkRlY2xhcmF0aW9uKHBhcmFtLT51cmwpKTsKLSAgICAg
ICAgfSBlbHNlIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YmFzZVRhZykpIHsK
LSAgICAgICAgICAgIC8vIENvbW1lbnQgdGhlIEJBU0UgdGFnIHdoZW4gc2VyaWFsaXppbmcgZG9t
LgotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgiPCEtLSIpOwotICAgICAgICB9Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgLy8gV3JpdGUgWE1MIGRlY2xhcmF0aW9uLgotICAgICAgICBpZiAoIXBh
cmFtLT5oYXZlQWRkZWRYTUxQcm9jZXNzaW5nRGlyZWN0aXZlKSB7Ci0gICAgICAgICAgICBwYXJh
bS0+aGF2ZUFkZGVkWE1MUHJvY2Vzc2luZ0RpcmVjdGl2ZSA9IHRydWU7Ci0gICAgICAgICAgICAv
LyBHZXQgZW5jb2RpbmcgaW5mby4KLSAgICAgICAgICAgIFN0cmluZyB4bWxFbmNvZGluZyA9IHBh
cmFtLT5kb2N1bWVudC0+eG1sRW5jb2RpbmcoKTsKLSAgICAgICAgICAgIGlmICh4bWxFbmNvZGlu
Zy5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgeG1sRW5jb2RpbmcgPSBwYXJhbS0+ZG9jdW1l
bnQtPmZyYW1lKCktPmxvYWRlcigpLT53cml0ZXIoKS0+ZW5jb2RpbmcoKTsKLSAgICAgICAgICAg
IGlmICh4bWxFbmNvZGluZy5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgeG1sRW5jb2Rpbmcg
PSBVVEY4RW5jb2RpbmcoKS5uYW1lKCk7Ci0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKCI8P3ht
bCB2ZXJzaW9uPVwiIik7Ci0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKHBhcmFtLT5kb2N1bWVu
dC0+eG1sVmVyc2lvbigpKTsKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoIlwiIGVuY29kaW5n
PVwiIik7Ci0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKHhtbEVuY29kaW5nKTsKLSAgICAgICAg
ICAgIGlmIChwYXJhbS0+ZG9jdW1lbnQtPnhtbFN0YW5kYWxvbmUoKSkKLSAgICAgICAgICAgICAg
ICByZXN1bHQuYXBwZW5kKCJcIiBzdGFuZGFsb25lPVwieWVzIik7Ci0gICAgICAgICAgICByZXN1
bHQuYXBwZW5kKCJcIj8+XG4iKTsKLSAgICAgICAgfQotICAgICAgICAvLyBBZGQgZG9jIHR5cGUg
ZGVjbGFyYXRpb24gaWYgb3JpZ2luYWwgZG9jdW1lbnQgaGFzIGl0LgotICAgICAgICBpZiAoIXBh
cmFtLT5oYXZlU2VlbkRvY1R5cGUpIHsKLSAgICAgICAgICAgIHBhcmFtLT5oYXZlU2VlbkRvY1R5
cGUgPSB0cnVlOwotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChjcmVhdGVNYXJrdXAocGFyYW0t
PmRvY3VtZW50LT5kb2N0eXBlKCkpKTsKLSAgICAgICAgfQorY2xhc3MgVVJMUmV3cml0ZXIgOiBw
dWJsaWMgTm9uY29weWFibGUgeworcHVibGljOgorICAgIHR5cGVkZWYgV1RGOjpIYXNoTWFwPFdU
Rjo6U3RyaW5nLCBXVEY6OlN0cmluZz4gVVJMTWFwOworCisgICAgc3RhdGljIFBhc3NPd25QdHI8
VVJMUmV3cml0ZXI+IGNyZWF0ZShQYXNzT3duUHRyPFVSTE1hcD4gbWFwKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBVUkxSZXdyaXRlcihtYXApKTsKICAgICB9Ci0gICAgcmV0
dXJuIHJlc3VsdC50b1N0cmluZygpOwotfQogCi1TdHJpbmcgV2ViUGFnZVNlcmlhbGl6ZXJJbXBs
Ojpwb3N0QWN0aW9uQWZ0ZXJTZXJpYWxpemVPcGVuVGFnKAotICAgIGNvbnN0IEVsZW1lbnQqIGVs
ZW1lbnQsIFNlcmlhbGl6ZURvbVBhcmFtKiBwYXJhbSkKLXsKLSAgICBTdHJpbmdCdWlsZGVyIHJl
c3VsdDsKLQotICAgIHBhcmFtLT5oYXZlQWRkZWRDb250ZW50c0JlZm9yZUVuZCA9IGZhbHNlOwot
ICAgIGlmICghcGFyYW0tPmlzSFRNTERvY3VtZW50KQotICAgICAgICByZXR1cm4gcmVzdWx0LnRv
U3RyaW5nKCk7Ci0gICAgLy8gQ2hlY2sgYWZ0ZXIgcHJvY2Vzc2luZyB0aGUgb3BlbiB0YWcgb2Yg
SEVBRCBlbGVtZW50Ci0gICAgaWYgKCFwYXJhbS0+aGF2ZUFkZGVkQ2hhcnNldERlY2xhcmF0aW9u
Ci0gICAgICAgICYmIGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoZWFkVGFnKSkgewot
ICAgICAgICBwYXJhbS0+aGF2ZUFkZGVkQ2hhcnNldERlY2xhcmF0aW9uID0gdHJ1ZTsKLSAgICAg
ICAgLy8gQ2hlY2sgbWV0YSBlbGVtZW50LiBXZWJLaXQgb25seSBwcmUtcGFyc2UgdGhlIGZpcnN0
IDUxMiBieXRlcwotICAgICAgICAvLyBvZiB0aGUgZG9jdW1lbnQuIElmIHRoZSB3aG9sZSA8SEVB
RD4gaXMgbGFyZ2VyIGFuZCBtZXRhIGlzIHRoZQotICAgICAgICAvLyBlbmQgb2YgaGVhZCBwYXJ0
LCB0aGVuIHRoaXMga2luZCBvZiBwYWdlcyBhcmVuJ3QgZGVjb2RlZCBjb3JyZWN0bHkKLSAgICAg
ICAgLy8gYmVjYXVzZSBvZiB0aGlzIGlzc3VlLiBTbyB3aGVuIHdlIHNlcmlhbGl6ZSB0aGUgRE9N
LCB3ZSBuZWVkIHRvCi0gICAgICAgIC8vIG1ha2Ugc3VyZSB0aGUgbWV0YSB3aWxsIGluIGZpcnN0
IGNoaWxkIG9mIGhlYWQgdGFnLgotICAgICAgICAvLyBTZWUgaHR0cDovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTY2MjEuCi0gICAgICAgIC8vIEZpcnN0IHdlIGdlbmVyYXRlIG5l
dyBjb250ZW50IGZvciB3cml0aW5nIGNvcnJlY3QgTUVUQSBlbGVtZW50LgotICAgICAgICByZXN1
bHQuYXBwZW5kKFdlYlBhZ2VTZXJpYWxpemVyOjpnZW5lcmF0ZU1ldGFDaGFyc2V0RGVjbGFyYXRp
b24oCi0gICAgICAgICAgICBTdHJpbmcocGFyYW0tPnRleHRFbmNvZGluZy5uYW1lKCkpKSk7Ci0K
LSAgICAgICAgcGFyYW0tPmhhdmVBZGRlZENvbnRlbnRzQmVmb3JlRW5kID0gdHJ1ZTsKLSAgICAg
ICAgLy8gV2lsbCBzZWFyY2ggZWFjaCBNRVRBIHdoaWNoIGhhcyBjaGFyc2V0IGRlY2xhcmF0aW9u
LCBhbmQgc2tpcCB0aGVtIGFsbAotICAgICAgICAvLyBpbiBQcmVBY3Rpb25CZWZvcmVTZXJpYWxp
emVPcGVuVGFnLgotICAgIH0gZWxzZSBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OnNjcmlwdFRhZykKLSAgICAgICAgICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpzdHlsZVRhZykpIHsKLSAgICAgICAgcGFyYW0tPmlzSW5TY3JpcHRPclN0eWxlVGFnID0g
dHJ1ZTsKKyAgICBib29sIGNvbnRhaW5zKGNvbnN0IFN0cmluZyYgdXJsKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fbWFwLT5jb250YWlucyh1cmwpOworICAgIH0KKyAgICAKKyAgICBTdHJpbmcg
cmV3cml0ZShjb25zdCBTdHJpbmcmIHVybCkKKyAgICB7CisgICAgICAgIGlmICghbV9tYXAtPmNv
bnRhaW5zKHVybCkpCisgICAgICAgICAgICByZXR1cm4gdXJsOworCisgICAgICAgIFN0cmluZyBy
ZXdyaXR0ZW5VUkw7CisgICAgICAgIGlmICghbV9wcmVmaXguaXNFbXB0eSgpKQorICAgICAgICAg
ICAgcmV3cml0dGVuVVJMID0gbV9wcmVmaXg7CisgICAgICAgIHJld3JpdHRlblVSTCArPSBtX21h
cC0+Z2V0KHVybCk7CisKKyAgICAgICAgcmV0dXJuIHJld3JpdHRlblVSTDsKICAgICB9CiAKLSAg
ICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci19CisgICAgdm9pZCBzZXRQcmVmaXgoY29uc3Qg
U3RyaW5nJiBwcmVmaXgpIHsgbV9wcmVmaXggPSBwcmVmaXg7IH0KIAotU3RyaW5nIFdlYlBhZ2VT
ZXJpYWxpemVySW1wbDo6cHJlQWN0aW9uQmVmb3JlU2VyaWFsaXplRW5kVGFnKAotICAgIGNvbnN0
IEVsZW1lbnQqIGVsZW1lbnQsIFNlcmlhbGl6ZURvbVBhcmFtKiBwYXJhbSwgYm9vbCogbmVlZFNr
aXApCi17Ci0gICAgU3RyaW5nIHJlc3VsdDsKLQotICAgICpuZWVkU2tpcCA9IGZhbHNlOwotICAg
IGlmICghcGFyYW0tPmlzSFRNTERvY3VtZW50KQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAg
IC8vIFNraXAgdGhlIGVuZCB0YWcgb2Ygb3JpZ2luYWwgTUVUQSB0YWcgd2hpY2ggZGVjbGFyZSBj
aGFyc2V0LgotICAgIC8vIE5lZWQgbm90IHRvIGNoZWNrIHdoZXRoZXIgaXQncyBNRVRBIHRhZyBz
aW5jZSB3ZSBndWFyYW50ZWUKLSAgICAvLyBza2lwTWV0YUVsZW1lbnQgaXMgZGVmaW5pdGVseSBN
RVRBIHRhZyBpZiBpdCdzIG5vdCAwLgotICAgIGlmIChwYXJhbS0+c2tpcE1ldGFFbGVtZW50ID09
IGVsZW1lbnQpCi0gICAgICAgICpuZWVkU2tpcCA9IHRydWU7Ci0gICAgZWxzZSBpZiAoZWxlbWVu
dC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnNjcmlwdFRhZykKLSAgICAgICAgICAgICB8fCBlbGVt
ZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c3R5bGVUYWcpKSB7Ci0gICAgICAgIEFTU0VSVChw
YXJhbS0+aXNJblNjcmlwdE9yU3R5bGVUYWcpOwotICAgICAgICBwYXJhbS0+aXNJblNjcmlwdE9y
U3R5bGVUYWcgPSBmYWxzZTsKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgVVJMUmV3cml0ZXIoUGFz
c093blB0cjxVUkxNYXA+IG1hcCkKKyAgICAgICAgOiBtX21hcChtYXApCisgICAgewogICAgIH0K
IAotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8vIEFmdGVyIHdlIGZpbmlzaCBzZXJpYWxpemlu
ZyBlbmQgdGFnIG9mIGEgZWxlbWVudCwgd2UgZ2l2ZSB0aGUgdGFyZ2V0Ci0vLyBlbGVtZW50IGEg
Y2hhbmNlIHRvIGRvIHNvbWUgcG9zdCB3b3JrIHRvIGFkZCBzb21lIGFkZGl0aW9uYWwgZGF0YS4K
LVN0cmluZyBXZWJQYWdlU2VyaWFsaXplckltcGw6OnBvc3RBY3Rpb25BZnRlclNlcmlhbGl6ZUVu
ZFRhZygKLSAgICBjb25zdCBFbGVtZW50KiBlbGVtZW50LCBTZXJpYWxpemVEb21QYXJhbSogcGFy
YW0pCi17Ci0gICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7Ci0KLSAgICBpZiAoIXBhcmFtLT5pc0hU
TUxEb2N1bWVudCkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotICAgIC8vIENv
bW1lbnQgdGhlIEJBU0UgdGFnIHdoZW4gc2VyaWFsaXppbmcgRE9NLgotICAgIGlmIChlbGVtZW50
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YmFzZVRhZykpIHsKLSAgICAgICAgcmVzdWx0LmFwcGVu
ZCgiLS0+Iik7Ci0gICAgICAgIC8vIEFwcGVuZCBhIG5ldyBiYXNlIHRhZyBkZWNsYXJhdGlvbi4K
LSAgICAgICAgcmVzdWx0LmFwcGVuZChXZWJQYWdlU2VyaWFsaXplcjo6Z2VuZXJhdGVCYXNlVGFn
RGVjbGFyYXRpb24oCi0gICAgICAgICAgICBwYXJhbS0+ZG9jdW1lbnQtPmJhc2VUYXJnZXQoKSkp
OworICAgIFN0cmluZyBtX3ByZWZpeDsKKyAgICBPd25QdHI8VVJMTWFwPiBtX21hcDsKK307CisK
K2NsYXNzIExvY2FsaXplZE1hcmt1cEFjY3VtdWxhdG9yIDogcHVibGljIE1hcmt1cEFjY3VtdWxh
dG9yIHsKK3B1YmxpYzoKKyAgICBMb2NhbGl6ZWRNYXJrdXBBY2N1bXVsYXRvcihVUkxSZXdyaXRl
ciogdXJsUmV3cml0ZXIpCisgICAgICAgIDogTWFya3VwQWNjdW11bGF0b3IoMCwgQWJzb2x1dGVV
UkxzKQorICAgICAgICAsIG1fdXJsUmV3cml0ZXIodXJsUmV3cml0ZXIpCisgICAgICAgICwgbV9o
YXZlQWRkZWRNYXJrT2ZUaGVXZWIoZmFsc2UpCisgICAgICAgICwgbV9oYXZlQWRkZWRDaGFyc2V0
RGVjbGFyYXRpb24oZmFsc2UpCisgICAgewogICAgIH0KIAotICAgIHJldHVybiByZXN1bHQudG9T
dHJpbmcoKTsKLX0KK3ByaXZhdGU6CisgICAgdmlydHVhbCB2b2lkIGFwcGVuZEVsZW1lbnQoVmVj
dG9yPFVDaGFyPiYgb3V0LCBFbGVtZW50KiBlbGVtZW50LCBOYW1lc3BhY2VzKiBuYW1lc3BhY2Vz
KQorICAgIHsKKyAgICAgICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUobWV0YVRhZykgJiYgaXND
aGFyc2V0RGVjbGFyYXRpb24oc3RhdGljX2Nhc3Q8SFRNTE1ldGFFbGVtZW50Kj4oZWxlbWVudCkp
KSB7CisgICAgICAgICAgICBBU1NFUlQoc2hvdWxkU2VsZkNsb3NlKGVsZW1lbnQpKTsKKyAgICAg
ICAgICAgIHJldHVybjsgLy8gTm90aWNlIHRoYXQgdGhpcyB3b3JrcyBiZWNhdXNlIDxtZXRhPiBp
cyBzZWxmLWNsb3NpbmchCisgICAgICAgIH0KIAotdm9pZCBXZWJQYWdlU2VyaWFsaXplckltcGw6
OnNhdmVIVE1MQ29udGVudFRvQnVmZmVyKAotICAgIGNvbnN0IFN0cmluZyYgcmVzdWx0LCBTZXJp
YWxpemVEb21QYXJhbSogcGFyYW0pCi17Ci0gICAgbV9kYXRhQnVmZmVyLmFwcGVuZChyZXN1bHQp
OwotICAgIGVuY29kZUFuZEZsdXNoQnVmZmVyKFdlYlBhZ2VTZXJpYWxpemVyQ2xpZW50OjpDdXJy
ZW50RnJhbWVJc05vdEZpbmlzaGVkLAotICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtLAot
ICAgICAgICAgICAgICAgICAgICAgICAgIERvTm90Rm9yY2VGbHVzaCk7Ci19CisgICAgICAgIGlm
IChlbGVtZW50LT5oYXNUYWdOYW1lKGJhc2VUYWcpKSB7CisgICAgICAgICAgICBhcHBlbmRCYXNl
RWxlbWVudChvdXQsIHN0YXRpY19jYXN0PEhUTUxCYXNlRWxlbWVudCo+KGVsZW1lbnQpLCBuYW1l
c3BhY2VzKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi12b2lkIFdlYlBhZ2VT
ZXJpYWxpemVySW1wbDo6ZW5jb2RlQW5kRmx1c2hCdWZmZXIoCi0gICAgV2ViUGFnZVNlcmlhbGl6
ZXJDbGllbnQ6OlBhZ2VTZXJpYWxpemF0aW9uU3RhdHVzIHN0YXR1cywKLSAgICBTZXJpYWxpemVE
b21QYXJhbSogcGFyYW0sCi0gICAgRmx1c2hPcHRpb24gZmx1c2hPcHRpb24pCi17Ci0gICAgLy8g
RGF0YSBidWZmZXIgaXMgbm90IGZ1bGwgbm9yIGRvIHdlIHdhbnQgdG8gZm9yY2UgZmx1c2guCi0g
ICAgaWYgKGZsdXNoT3B0aW9uICE9IEZvcmNlRmx1c2ggJiYgbV9kYXRhQnVmZmVyLmxlbmd0aCgp
IDw9IGRhdGFCdWZmZXJDYXBhY2l0eSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoZWxl
bWVudC0+aGFzVGFnTmFtZShodG1sVGFnKSAmJiAhbV9oYXZlQWRkZWRNYXJrT2ZUaGVXZWIpCisg
ICAgICAgICAgICBhcHBlbmRNYXJrT2ZUaGVXZWIob3V0LCBlbGVtZW50LT5kb2N1bWVudCgpLT51
cmwoKSk7CiAKLSAgICBTdHJpbmcgY29udGVudCA9IG1fZGF0YUJ1ZmZlci50b1N0cmluZygpOwot
ICAgIG1fZGF0YUJ1ZmZlciA9IFN0cmluZ0J1aWxkZXIoKTsKKyAgICAgICAgTWFya3VwQWNjdW11
bGF0b3I6OmFwcGVuZEVsZW1lbnQob3V0LCBlbGVtZW50LCBuYW1lc3BhY2VzKTsKIAotICAgIC8v
IENvbnZlcnQgdGhlIHVuaWNvZGUgY29udGVudCB0byB0YXJnZXQgZW5jb2RpbmcKLSAgICBDU3Ry
aW5nIGVuY29kZWRDb250ZW50ID0gcGFyYW0tPnRleHRFbmNvZGluZy5lbmNvZGUoCi0gICAgICAg
IGNvbnRlbnQuY2hhcmFjdGVycygpLCBjb250ZW50Lmxlbmd0aCgpLCBFbnRpdGllc0ZvclVuZW5j
b2RhYmxlcyk7CisgICAgICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKGhlYWRUYWcpICYmICFt
X2hhdmVBZGRlZENoYXJzZXREZWNsYXJhdGlvbikKKyAgICAgICAgICAgIGFwcGVuZENoYXJzZXRE
ZWNsYXJhdGlvbihvdXQsIHN0YXRpY19jYXN0PEhUTUxIZWFkRWxlbWVudCo+KGVsZW1lbnQpLCBu
YW1lc3BhY2VzKTsKKyAgICB9CiAKLSAgICAvLyBTZW5kIHJlc3VsdCB0byB0aGUgY2xpZW50Lgot
ICAgIG1fY2xpZW50LT5kaWRTZXJpYWxpemVEYXRhRm9yRnJhbWUocGFyYW0tPnVybCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYkNTdHJpbmcoZW5jb2RlZENvbnRl
bnQuZGF0YSgpLCBlbmNvZGVkQ29udGVudC5sZW5ndGgoKSksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGF0dXMpOwotfQorICAgIHZpcnR1YWwgU3RyaW5nIHJlc29s
dmVVUkwoRWxlbWVudCogZWxlbWVudCwgY29uc3QgQXR0cmlidXRlJiBhdHRyaWJ1dGUpCisgICAg
eworICAgICAgICByZXR1cm4gbV91cmxSZXdyaXRlci0+cmV3cml0ZShlbGVtZW50LT5kb2N1bWVu
dCgpLT5jb21wbGV0ZVVSTChhdHRyaWJ1dGUudmFsdWUoKSkuc3RyaW5nKCkpOworICAgIH0KIAot
dm9pZCBXZWJQYWdlU2VyaWFsaXplckltcGw6Om9wZW5UYWdUb1N0cmluZyhjb25zdCBFbGVtZW50
KiBlbGVtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBT
ZXJpYWxpemVEb21QYXJhbSogcGFyYW0pCi17Ci0gICAgLy8gRklYTUU6IHVzZSBTdHJpbmdCdWls
ZGVyIGluc3RlYWQgb2YgU3RyaW5nLgotICAgIGJvb2wgbmVlZFNraXA7Ci0gICAgLy8gRG8gcHJl
IGFjdGlvbiBmb3Igb3BlbiB0YWcuCi0gICAgU3RyaW5nIHJlc3VsdCA9IHByZUFjdGlvbkJlZm9y
ZVNlcmlhbGl6ZU9wZW5UYWcoZWxlbWVudCwgcGFyYW0sICZuZWVkU2tpcCk7Ci0gICAgaWYgKG5l
ZWRTa2lwKQotICAgICAgICByZXR1cm47Ci0gICAgLy8gQWRkIG9wZW4gdGFnCi0gICAgcmVzdWx0
ICs9ICI8IiArIGVsZW1lbnQtPm5vZGVOYW1lKCkubG93ZXIoKTsKLSAgICAvLyBHbyB0aHJvdWdo
IGFsbCBhdHRyaWJ1dGVzIGFuZCBzZXJpYWxpemUgdGhlbS4KLSAgICBjb25zdCBOYW1lZE5vZGVN
YXAgKmF0dHJNYXAgPSBlbGVtZW50LT5hdHRyaWJ1dGVzKHRydWUpOwotICAgIGlmIChhdHRyTWFw
KSB7Ci0gICAgICAgIHVuc2lnbmVkIG51bUF0dHJzID0gYXR0ck1hcC0+bGVuZ3RoKCk7Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1BdHRyczsgaSsrKSB7Ci0gICAgICAgICAg
ICByZXN1bHQgKz0gIiAiOwotICAgICAgICAgICAgLy8gQWRkIGF0dHJpYnV0ZSBwYWlyCi0gICAg
ICAgICAgICBjb25zdCBBdHRyaWJ1dGUgKmF0dHJpYnV0ZSA9IGF0dHJNYXAtPmF0dHJpYnV0ZUl0
ZW0oaSk7Ci0gICAgICAgICAgICByZXN1bHQgKz0gYXR0cmlidXRlLT5uYW1lKCkudG9TdHJpbmco
KTsKLSAgICAgICAgICAgIHJlc3VsdCArPSAiPVwiIjsKLSAgICAgICAgICAgIGlmICghYXR0cmli
dXRlLT52YWx1ZSgpLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYg
YXR0clZhbHVlID0gYXR0cmlidXRlLT52YWx1ZSgpOwotCi0gICAgICAgICAgICAgICAgLy8gQ2hl
Y2sgd2hldGhlciB3ZSBuZWVkIHRvIHJlcGxhY2Ugc29tZSByZXNvdXJjZSBsaW5rcwotICAgICAg
ICAgICAgICAgIC8vIHdpdGggbG9jYWwgcmVzb3VyY2UgcGF0aHMuCi0gICAgICAgICAgICAgICAg
Y29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUgPSBhdHRyaWJ1dGUtPm5hbWUoKTsKLSAgICAg
ICAgICAgICAgICBpZiAoZWxlbWVudEhhc0xlZ2FsTGlua0F0dHJpYnV0ZShlbGVtZW50LCBhdHRy
TmFtZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gRm9yIGxpbmtzIHN0YXJ0IHdpdGggImph
dmFzY3JpcHQ6Iiwgd2UgZG8gbm90IGNoYW5nZSBpdC4KLSAgICAgICAgICAgICAgICAgICAgaWYg
KGF0dHJWYWx1ZS5zdGFydHNXaXRoKCJqYXZhc2NyaXB0OiIsIGZhbHNlKSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdCArPSBhdHRyVmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgIGVs
c2UgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBhYnNvbHV0ZSBsaW5rCi0g
ICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgY29tcGxldGVVUkwgPSBwYXJhbS0+ZG9jdW1l
bnQtPmNvbXBsZXRlVVJMKGF0dHJWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBD
aGVjayB3aGV0aGVyIHdlIGhhdmUgbG9jYWwgZmlsZXMgZm9yIHRob3NlIGxpbmsuCi0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAobV9sb2NhbExpbmtzLmNvbnRhaW5zKGNvbXBsZXRlVVJMKSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbV9sb2NhbERpcmVjdG9yeU5hbWUu
aXNFbXB0eSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gIi4v
IiArIG1fbG9jYWxEaXJlY3RvcnlOYW1lICsgIi8iOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdCArPSBtX2xvY2FsTGlua3MuZ2V0KGNvbXBsZXRlVVJMKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCAr
PSBjb21wbGV0ZVVSTDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbS0+aXNIVE1MRG9jdW1lbnQpCi0g
ICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gbV9odG1sRW50aXRpZXMuY29udmVydEVu
dGl0aWVzSW5TdHJpbmcoYXR0clZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IG1feG1sRW50aXRpZXMuY29udmVydEVudGl0
aWVzSW5TdHJpbmcoYXR0clZhbHVlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICByZXN1bHQgKz0gIlwiIjsKLSAgICAgICAgfQorICAgIGJvb2wgaXNDaGFy
c2V0RGVjbGFyYXRpb24oSFRNTE1ldGFFbGVtZW50KiBlbGVtZW50KQorICAgIHsKKyAgICAgICAg
QVNTRVJUKGVsZW1lbnQtPmhhc1RhZ05hbWUobWV0YVRhZykpOworICAgICAgICBTdHJpbmcgZXF1
aXYgPSBlbGVtZW50LT5odHRwRXF1aXYoKTsKKyAgICAgICAgU3RyaW5nIGNvbnRlbnQgPSBlbGVt
ZW50LT5jb250ZW50KCk7CisgICAgICAgIC8vIEZJWE1FOiBXaGF0IGFib3V0IDxtZXRhIGNoYXJz
ZXQ9Ii4uLiI+ID8KKyAgICAgICAgcmV0dXJuIGVxdWFsSWdub3JpbmdDYXNlKGVxdWl2LCAiY29u
dGVudC10eXBlIikgJiYgY29udGVudC5sZW5ndGgoKSAmJiBjb250ZW50LmNvbnRhaW5zKCJjaGFy
c2V0IiwgZmFsc2UpOwogICAgIH0KIAotICAgIC8vIERvIHBvc3QgYWN0aW9uIGZvciBvcGVuIHRh
Zy4KLSAgICBTdHJpbmcgYWRkZWRDb250ZW50cyA9IHBvc3RBY3Rpb25BZnRlclNlcmlhbGl6ZU9w
ZW5UYWcoZWxlbWVudCwgcGFyYW0pOwotICAgIC8vIENvbXBsZXRlIHRoZSBvcGVuIHRhZyBmb3Ig
ZWxlbWVudCB3aGVuIGl0IGhhcyBjaGlsZC9jaGlsZHJlbi4KLSAgICBpZiAoZWxlbWVudC0+aGFz
Q2hpbGROb2RlcygpIHx8IHBhcmFtLT5oYXZlQWRkZWRDb250ZW50c0JlZm9yZUVuZCkKLSAgICAg
ICAgcmVzdWx0ICs9ICI+IjsKLSAgICAvLyBBcHBlbmQgdGhlIGFkZGVkIGNvbnRlbnRzIGdlbmVy
YXRlIGluICBwb3N0IGFjdGlvbiBvZiBvcGVuIHRhZy4KLSAgICByZXN1bHQgKz0gYWRkZWRDb250
ZW50czsKLSAgICAvLyBTYXZlIHRoZSByZXN1bHQgdG8gZGF0YSBidWZmZXIuCi0gICAgc2F2ZUhU
TUxDb250ZW50VG9CdWZmZXIocmVzdWx0LCBwYXJhbSk7Ci19CisgICAgdm9pZCBhcHBlbmRCYXNl
RWxlbWVudChWZWN0b3I8VUNoYXI+JiBvdXQsIEhUTUxCYXNlRWxlbWVudCogYmFzZSwgTmFtZXNw
YWNlcyogbmFtZXNwYWNlcykKKyAgICB7CisgICAgICAgIC8vIFdlIHdhbnQgdG8gcGljayB1cCB0
aGUgdGFyZ2V0IGF0dHJpYnV0ZSBmcm9tIHRoZSBiYXNlIGVsZW1lbnQsIGJ1dAorICAgICAgICAv
LyB3ZSBkb24ndCB3YW50IHRvIHBpY2sgdXAgdGhlIGhyZWYgYXR0cmlidXRlLgorICAgICAgICAv
LyBGSVhNRTogQ3VycmVudGx5IHdlJ3JlIHdoaXRlbGlzdGluZyB0aGUgdGFyZ2V0IGF0dHJpYnV0
ZSwgYnV0CisgICAgICAgIC8vICAgICAgICBwZXJoYXBzIHdlIHNob3VsZCBibGFja2xpc3QgdGhl
IGhyZWYgYXR0cmlidXRlPworICAgICAgICBSZWZQdHI8SFRNTEJhc2VFbGVtZW50PiBmYWtlQmFz
ZSA9IEhUTUxCYXNlRWxlbWVudDo6Y3JlYXRlKGJhc2VUYWcsIGJhc2UtPmRvY3VtZW50KCkpOwor
ICAgICAgICBmYWtlQmFzZS0+c2V0QXR0cmlidXRlKHRhcmdldEF0dHIsIGJhc2UtPmdldEF0dHJp
YnV0ZSh0YXJnZXRBdHRyKSk7CisgICAgICAgIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVt
ZW50KG91dCwgZmFrZUJhc2UuZ2V0KCksIG5hbWVzcGFjZXMpOworICAgIH0KIAotLy8gU2VyaWFs
aXplIGVuZCB0YWcgb2YgYW4gc3BlY2lmaWVkIGVsZW1lbnQuCi12b2lkIFdlYlBhZ2VTZXJpYWxp
emVySW1wbDo6ZW5kVGFnVG9TdHJpbmcoY29uc3QgRWxlbWVudCogZWxlbWVudCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXJpYWxpemVEb21QYXJhbSogcGFy
YW0pCi17Ci0gICAgYm9vbCBuZWVkU2tpcDsKLSAgICAvLyBEbyBwcmUgYWN0aW9uIGZvciBlbmQg
dGFnLgotICAgIFN0cmluZyByZXN1bHQgPSBwcmVBY3Rpb25CZWZvcmVTZXJpYWxpemVFbmRUYWco
ZWxlbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBhcmFtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJm5lZWRTa2lwKTsKLSAgICBpZiAobmVlZFNraXApCi0gICAgICAgIHJldHVybjsKLSAg
ICAvLyBXcml0ZSBlbmQgdGFnIHdoZW4gZWxlbWVudCBoYXMgY2hpbGQvY2hpbGRyZW4uCi0gICAg
aWYgKGVsZW1lbnQtPmhhc0NoaWxkTm9kZXMoKSB8fCBwYXJhbS0+aGF2ZUFkZGVkQ29udGVudHNC
ZWZvcmVFbmQpIHsKLSAgICAgICAgcmVzdWx0ICs9ICI8LyI7Ci0gICAgICAgIHJlc3VsdCArPSBl
bGVtZW50LT5ub2RlTmFtZSgpLmxvd2VyKCk7Ci0gICAgICAgIHJlc3VsdCArPSAiPiI7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgLy8gQ2hlY2sgd2hldGhlciB3ZSBoYXZlIHRvIHdyaXRlIGVuZCB0
YWcgZm9yIGVtcHR5IGVsZW1lbnQuCi0gICAgICAgIGlmIChwYXJhbS0+aXNIVE1MRG9jdW1lbnQp
IHsKLSAgICAgICAgICAgIHJlc3VsdCArPSAiPiI7Ci0gICAgICAgICAgICAvLyBGSVhNRTogVGhp
cyBjb2RlIGlzIGhvcnJpYmx5IHdyb25nLiAgV2ViUGFnZVNlcmlhbGl6ZXJJbXBsIG11c3QgZGll
LgotICAgICAgICAgICAgaWYgKCFzdGF0aWNfY2FzdDxjb25zdCBIVE1MRWxlbWVudCo+KGVsZW1l
bnQpLT5pZUZvcmJpZHNJbnNlcnRIVE1MKCkpIHsKLSAgICAgICAgICAgICAgICAvLyBXZSBuZWVk
IHRvIHdyaXRlIGVuZCB0YWcgd2hlbiBpdCBpcyByZXF1aXJlZC4KLSAgICAgICAgICAgICAgICBy
ZXN1bHQgKz0gIjwvIjsKLSAgICAgICAgICAgICAgICByZXN1bHQgKz0gZWxlbWVudC0+bm9kZU5h
bWUoKS5sb3dlcigpOwotICAgICAgICAgICAgICAgIHJlc3VsdCArPSAiPiI7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBGb3IgeG1sIGJhc2UgZG9jdW1l
bnQuCi0gICAgICAgICAgICByZXN1bHQgKz0gIiAvPiI7Ci0gICAgICAgIH0KKyAgICB2b2lkIGFw
cGVuZE1hcmtPZlRoZVdlYihWZWN0b3I8VUNoYXI+JiBvdXQsIGNvbnN0IEtVUkwmIHVybCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVCghbV9oYXZlQWRkZWRNYXJrT2ZUaGVXZWIpOworICAgICAgICBt
X2hhdmVBZGRlZE1hcmtPZlRoZVdlYiA9IHRydWU7CisgICAgICAgIC8vIFNlZSBodHRwOi8vbXNk
bjIubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21zNTM3NjI4KFZTLjg1KS5hc3B4LgorICAg
ICAgICBTdHJpbmcgbWFya09mVGhlV2ViID0gV2ViUGFnZVNlcmlhbGl6ZXI6OmdlbmVyYXRlTWFy
a09mVGhlV2ViRGVjbGFyYXRpb24odXJsKTsKKyAgICAgICAgb3V0LmFwcGVuZChtYXJrT2ZUaGVX
ZWIuY2hhcmFjdGVycygpLCBtYXJrT2ZUaGVXZWIubGVuZ3RoKCkpOwogICAgIH0KLSAgICAvLyBE
byBwb3N0IGFjdGlvbiBmb3IgZW5kIHRhZy4KLSAgICByZXN1bHQgKz0gcG9zdEFjdGlvbkFmdGVy
U2VyaWFsaXplRW5kVGFnKGVsZW1lbnQsIHBhcmFtKTsKLSAgICAvLyBTYXZlIHRoZSByZXN1bHQg
dG8gZGF0YSBidWZmZXIuCi0gICAgc2F2ZUhUTUxDb250ZW50VG9CdWZmZXIocmVzdWx0LCBwYXJh
bSk7Ci19CiAKLXZvaWQgV2ViUGFnZVNlcmlhbGl6ZXJJbXBsOjpidWlsZENvbnRlbnRGb3JOb2Rl
KGNvbnN0IE5vZGUqIG5vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBTZXJpYWxpemVEb21QYXJhbSogcGFyYW0pCi17Ci0gICAgc3dpdGNoIChub2Rl
LT5ub2RlVHlwZSgpKSB7Ci0gICAgY2FzZSBOb2RlOjpFTEVNRU5UX05PREU6Ci0gICAgICAgIC8v
IFByb2Nlc3Mgb3BlbiB0YWcgb2YgZWxlbWVudC4KLSAgICAgICAgb3BlblRhZ1RvU3RyaW5nKHN0
YXRpY19jYXN0PGNvbnN0IEVsZW1lbnQqPihub2RlKSwgcGFyYW0pOwotICAgICAgICAvLyBXYWxr
IHRocm91Z2ggdGhlIGNoaWxkcmVuIG5vZGVzIGFuZCBwcm9jZXNzIGl0LgotICAgICAgICBmb3Ig
KGNvbnN0IE5vZGUgKmNoaWxkID0gbm9kZS0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBj
aGlsZC0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgICAgIGJ1aWxkQ29udGVudEZvck5vZGUoY2hp
bGQsIHBhcmFtKTsKLSAgICAgICAgLy8gUHJvY2VzcyBlbmQgdGFnIG9mIGVsZW1lbnQuCi0gICAg
ICAgIGVuZFRhZ1RvU3RyaW5nKHN0YXRpY19jYXN0PGNvbnN0IEVsZW1lbnQqPihub2RlKSwgcGFy
YW0pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE5vZGU6OlRFWFRfTk9ERToKLSAgICAgICAg
c2F2ZUhUTUxDb250ZW50VG9CdWZmZXIoY3JlYXRlTWFya3VwKG5vZGUpLCBwYXJhbSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgTm9kZTo6QVRUUklCVVRFX05PREU6Ci0gICAgY2FzZSBOb2Rl
OjpET0NVTUVOVF9OT0RFOgotICAgIGNhc2UgTm9kZTo6RE9DVU1FTlRfRlJBR01FTlRfTk9ERToK
LSAgICAgICAgLy8gU2hvdWxkIG5vdCBleGlzdC4KLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIC8vIERvY3VtZW50IHR5cGUgbm9kZSBjYW4gYmUgaW4g
RE9NPwotICAgIGNhc2UgTm9kZTo6RE9DVU1FTlRfVFlQRV9OT0RFOgotICAgICAgICBwYXJhbS0+
aGF2ZVNlZW5Eb2NUeXBlID0gdHJ1ZTsKLSAgICBkZWZhdWx0OgotICAgICAgICAvLyBGb3Igb3Ro
ZXIgdHlwZSBub2RlLCBjYWxsIGRlZmF1bHQgYWN0aW9uLgotICAgICAgICBzYXZlSFRNTENvbnRl
bnRUb0J1ZmZlcihjcmVhdGVNYXJrdXAobm9kZSksIHBhcmFtKTsKLSAgICAgICAgYnJlYWs7Cisg
ICAgdm9pZCBhcHBlbmRDaGFyc2V0RGVjbGFyYXRpb24oVmVjdG9yPFVDaGFyPiYgb3V0LCBIVE1M
SGVhZEVsZW1lbnQqIGhlYWQsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCisgICAgeworICAgICAg
ICBBU1NFUlQoIW1faGF2ZUFkZGVkQ2hhcnNldERlY2xhcmF0aW9uKTsKKyAgICAgICAgbV9oYXZl
QWRkZWRDaGFyc2V0RGVjbGFyYXRpb24gPSB0cnVlOworICAgICAgICAvLyBDaGVjayBtZXRhIGVs
ZW1lbnQuIFdlYktpdCBvbmx5IHByZS1wYXJzZSB0aGUgZmlyc3QgNTEyIGJ5dGVzCisgICAgICAg
IC8vIG9mIHRoZSBkb2N1bWVudC4gSWYgdGhlIHdob2xlIDxIRUFEPiBpcyBsYXJnZXIgYW5kIG1l
dGEgaXMgdGhlCisgICAgICAgIC8vIGVuZCBvZiBoZWFkIHBhcnQsIHRoZW4gdGhpcyBraW5kIG9m
IHBhZ2VzIGFyZW4ndCBkZWNvZGVkIGNvcnJlY3RseQorICAgICAgICAvLyBiZWNhdXNlIG9mIHRo
aXMgaXNzdWUuIFNvIHdoZW4gd2Ugc2VyaWFsaXplIHRoZSBET00sIHdlIG5lZWQgdG8KKyAgICAg
ICAgLy8gbWFrZSBzdXJlIHRoZSBtZXRhIHdpbGwgaW4gZmlyc3QgY2hpbGQgb2YgaGVhZCB0YWcu
CisgICAgICAgIC8vIFNlZSBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjYyMS4KKyAgICAgICAgLy8gRmlyc3Qgd2UgZ2VuZXJhdGUgbmV3IGNvbnRlbnQgZm9yIHdyaXRp
bmcgY29ycmVjdCBNRVRBIGVsZW1lbnQuCisgICAgICAgIFJlZlB0cjxIVE1MTWV0YUVsZW1lbnQ+
IGZha2VNZXRhID0gSFRNTE1ldGFFbGVtZW50OjpjcmVhdGUobWV0YVRhZywgaGVhZC0+ZG9jdW1l
bnQoKSk7CisgICAgICAgIGZha2VNZXRhLT5zZXRBdHRyaWJ1dGUoaHR0cF9lcXVpdkF0dHIsICJD
b250ZW50LVR5cGUiKTsKKyAgICAgICAgZmFrZU1ldGEtPnNldEF0dHJpYnV0ZShjb250ZW50QXR0
ciwgInRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIpOworICAgICAgICBNYXJrdXBBY2N1bXVsYXRv
cjo6YXBwZW5kRWxlbWVudChvdXQsIGZha2VNZXRhLmdldCgpLCBuYW1lc3BhY2VzKTsKICAgICB9
CisKKyAgICBVUkxSZXdyaXRlciogbV91cmxSZXdyaXRlcjsKKyAgICBib29sIG1faGF2ZUFkZGVk
TWFya09mVGhlV2ViOworICAgIGJvb2wgbV9oYXZlQWRkZWRDaGFyc2V0RGVjbGFyYXRpb247Cit9
OworCisvLyBNYXhpbXVtIGxlbmd0aCBvZiBkYXRhIGJ1ZmZlciB3aGljaCBpcyB1c2VkIHRvIHRl
bXBvcmFyeSBzYXZlIGdlbmVyYXRlZAorLy8gaHRtbCBjb250ZW50IGRhdGEuIFRoaXMgaXMgYSBz
b2Z0IGxpbWl0IHdoaWNoIG1pZ2h0IGJlIHBhc3NlZCBpZiBhIHZlcnkgbGFyZ2UKKy8vIGNvbnRl
Z2lvdXMgc3RyaW5nIGlzIGZvdW5kIGluIHRoZSBwYWdlLgorLy8gRklYTUU6IHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBkYXRhQnVmZmVyQ2FwYWNpdHkgPSA2NTUzNjsKKwordm9pZCBXZWJQYWdlU2Vy
aWFsaXplckltcGw6OmVuY29kZUFuZEZsdXNoQnVmZmVyKFdlYlBhZ2VTZXJpYWxpemVyQ2xpZW50
OjpQYWdlU2VyaWFsaXphdGlvblN0YXR1cyBzdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViVVJMJiB1cmwsIGNvbnN0IFN0cmlu
ZyYgbWFya3VwLCBGbHVzaE9wdGlvbiBmbHVzaE9wdGlvbikKK3sKKyAgICAvLyBEYXRhIGJ1ZmZl
ciBpcyBub3QgZnVsbCBub3IgZG8gd2Ugd2FudCB0byBmb3JjZSBmbHVzaC4KKyAgICBpZiAoZmx1
c2hPcHRpb24gIT0gRm9yY2VGbHVzaCkKKyAgICAgICAgcmV0dXJuOworICAgIENTdHJpbmcgZW5j
b2RlZE1hcmt1cCA9IFVURjhFbmNvZGluZygpLmVuY29kZShtYXJrdXAuY2hhcmFjdGVycygpLCBt
YXJrdXAubGVuZ3RoKCksIEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKTsKKyAgICBtX2NsaWVudC0+
ZGlkU2VyaWFsaXplRGF0YUZvckZyYW1lKHVybCwgV2ViQ1N0cmluZyhlbmNvZGVkTWFya3VwLmRh
dGEoKSwgZW5jb2RlZE1hcmt1cC5sZW5ndGgoKSksIHN0YXR1cyk7CiB9CiAKIFdlYlBhZ2VTZXJp
YWxpemVySW1wbDo6V2ViUGFnZVNlcmlhbGl6ZXJJbXBsKFdlYkZyYW1lKiBmcmFtZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVjdXJzaXZlU2Vy
aWFsaXphdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgcmVjdXJzaXZlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQqIGNsaWVudCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJVUkw+JiBsaW5r
cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdl
YlZlY3RvcjxXZWJTdHJpbmc+JiBsb2NhbFBhdGhzLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViU3RyaW5nJiBsb2NhbERpcmVjdG9yeU5hbWUp
CiAgICAgOiBtX2NsaWVudChjbGllbnQpCi0gICAgLCBtX3JlY3Vyc2l2ZVNlcmlhbGl6YXRpb24o
cmVjdXJzaXZlU2VyaWFsaXphdGlvbikKLSAgICAsIG1fZnJhbWVzQ29sbGVjdGVkKGZhbHNlKQor
ICAgICwgbV93ZWJGcmFtZShzdGF0aWNfY2FzdDxXZWJGcmFtZUltcGwqPihmcmFtZSkpCisgICAg
LCBtX3JlY3Vyc2l2ZShyZWN1cnNpdmUpCiAgICAgLCBtX2xvY2FsRGlyZWN0b3J5TmFtZShsb2Nh
bERpcmVjdG9yeU5hbWUpCi0gICAgLCBtX2h0bWxFbnRpdGllcyhmYWxzZSkKLSAgICAsIG1feG1s
RW50aXRpZXModHJ1ZSkKIHsKLSAgICAvLyBNdXN0IHNwZWNpZnkgYXZhaWxhYmxlIHdlYmZyYW1l
LgotICAgIEFTU0VSVChmcmFtZSk7Ci0gICAgbV9zcGVjaWZpZWRXZWJGcmFtZUltcGwgPSBzdGF0
aWNfY2FzdDxXZWJGcmFtZUltcGwqPihmcmFtZSk7Ci0gICAgLy8gTWFrZSBzdXJlIHdlIGhhdmUg
bm9uIDAgY2xpZW50LgogICAgIEFTU0VSVChjbGllbnQpOwotICAgIC8vIEJ1aWxkIGxvY2FsIHJl
c291cmNlcyBtYXAuCiAgICAgQVNTRVJUKGxpbmtzLnNpemUoKSA9PSBsb2NhbFBhdGhzLnNpemUo
KSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaW5rcy5zaXplKCk7IGkrKykgeworICAg
IEFTU0VSVChmcmFtZSk7CisKKyAgICBPd25QdHI8VVJMUmV3cml0ZXI6OlVSTE1hcD4gbWFwID0g
YWRvcHRQdHIobmV3IFVSTFJld3JpdGVyOjpVUkxNYXApOworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbGlua3Muc2l6ZSgpOyArK2kpIHsKICAgICAgICAgS1VSTCB1cmwgPSBsaW5rc1tpXTsK
LSAgICAgICAgQVNTRVJUKCFtX2xvY2FsTGlua3MuY29udGFpbnModXJsLnN0cmluZygpKSk7Ci0g
ICAgICAgIG1fbG9jYWxMaW5rcy5zZXQodXJsLnN0cmluZygpLCBsb2NhbFBhdGhzW2ldKTsKKyAg
ICAgICAgQVNTRVJUKCFtYXAtPmNvbnRhaW5zKHVybC5zdHJpbmcoKSkpOworICAgICAgICBtYXAt
PnNldCh1cmwuc3RyaW5nKCksIGxvY2FsUGF0aHNbaV0pOwogICAgIH0KKyAgICBtX3VybFJld3Jp
dGVyID0gVVJMUmV3cml0ZXI6OmNyZWF0ZShtYXAucmVsZWFzZSgpKTsKIAogICAgIEFTU0VSVCht
X2RhdGFCdWZmZXIuaXNFbXB0eSgpKTsKIH0KIAotdm9pZCBXZWJQYWdlU2VyaWFsaXplckltcGw6
OmNvbGxlY3RUYXJnZXRGcmFtZXMoKQorV2ViUGFnZVNlcmlhbGl6ZXJJbXBsOjp+V2ViUGFnZVNl
cmlhbGl6ZXJJbXBsKCkKK3sKK30KKwordm9pZCBXZWJQYWdlU2VyaWFsaXplckltcGw6OmNvbGxl
Y3RGcmFtZXMoKQogewotICAgIEFTU0VSVCghbV9mcmFtZXNDb2xsZWN0ZWQpOwotICAgIG1fZnJh
bWVzQ29sbGVjdGVkID0gdHJ1ZTsKLQotICAgIC8vIEZpcnN0LCBwcm9jZXNzIG1haW4gZnJhbWUu
Ci0gICAgbV9mcmFtZXMuYXBwZW5kKG1fc3BlY2lmaWVkV2ViRnJhbWVJbXBsKTsKLSAgICAvLyBS
ZXR1cm4gbm93IGlmIHVzZXIgb25seSBuZWVkcyB0byBzZXJpYWxpemUgc3BlY2lmaWVkIGZyYW1l
LCBub3QgaW5jbHVkaW5nCi0gICAgLy8gYWxsIHN1Yi1mcmFtZXMuCi0gICAgaWYgKCFtX3JlY3Vy
c2l2ZVNlcmlhbGl6YXRpb24pCisgICAgaWYgKCFtX2ZyYW1lcy5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybjsKLSAgICAvLyBDb2xsZWN0IGFsbCBmcmFtZXMgaW5zaWRlIHRoZSBzcGVjaWZpZWQg
ZnJhbWUuCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzdGF0aWNfY2FzdDxpbnQ+KG1fZnJhbWVz
LnNpemUoKSk7ICsraSkgewotICAgICAgICBXZWJGcmFtZUltcGwqIGN1cnJlbnRGcmFtZSA9IG1f
ZnJhbWVzW2ldOwotICAgICAgICAvLyBHZXQgY3VycmVudCB1c2luZyBkb2N1bWVudC4KLSAgICAg
ICAgRG9jdW1lbnQqIGN1cnJlbnREb2MgPSBjdXJyZW50RnJhbWUtPmZyYW1lKCktPmRvY3VtZW50
KCk7Ci0gICAgICAgIC8vIEdvIHRocm91Z2ggc3ViLWZyYW1lcy4KLSAgICAgICAgUmVmUHRyPEhU
TUxBbGxDb2xsZWN0aW9uPiBhbGwgPSBjdXJyZW50RG9jLT5hbGwoKTsKKyAgICBtX2ZyYW1lcy5h
cHBlbmQobV93ZWJGcmFtZSk7CisKKyAgICBpZiAoIW1fcmVjdXJzaXZlKQorICAgICAgICByZXR1
cm47CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9mcmFtZXMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgUmVmUHRyPEhUTUxBbGxDb2xsZWN0aW9uPiBhbGwgPSBtX2ZyYW1lc1tpXS0+
ZnJhbWUoKS0+ZG9jdW1lbnQoKS0+YWxsKCk7CiAgICAgICAgIGZvciAoTm9kZSogbm9kZSA9IGFs
bC0+Zmlyc3RJdGVtKCk7IG5vZGU7IG5vZGUgPSBhbGwtPm5leHRJdGVtKCkpIHsKICAgICAgICAg
ICAgIGlmICghbm9kZS0+aXNIVE1MRWxlbWVudCgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihu
b2RlKTsKLSAgICAgICAgICAgIFdlYkZyYW1lSW1wbCogd2ViRnJhbWUgPQotICAgICAgICAgICAg
ICAgIFdlYkZyYW1lSW1wbDo6ZnJvbUZyYW1lT3duZXJFbGVtZW50KGVsZW1lbnQpOwotICAgICAg
ICAgICAgaWYgKHdlYkZyYW1lKQotICAgICAgICAgICAgICAgIG1fZnJhbWVzLmFwcGVuZCh3ZWJG
cmFtZSk7CisgICAgICAgICAgICBXZWJGcmFtZUltcGwqIHdlYkZyYW1lID0gV2ViRnJhbWVJbXBs
Ojpmcm9tRnJhbWVPd25lckVsZW1lbnQoc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihub2RlKSk7
CisgICAgICAgICAgICBpZiAoIXdlYkZyYW1lKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgbV9mcmFtZXMuYXBwZW5kKHdlYkZyYW1lKTsKICAgICAgICAgfQogICAgIH0K
IH0KIAogYm9vbCBXZWJQYWdlU2VyaWFsaXplckltcGw6OnNlcmlhbGl6ZSgpCiB7Ci0gICAgaWYg
KCFtX2ZyYW1lc0NvbGxlY3RlZCkKLSAgICAgICAgY29sbGVjdFRhcmdldEZyYW1lcygpOworICAg
IGNvbGxlY3RGcmFtZXMoKTsKIAogICAgIGJvb2wgZGlkU2VyaWFsaXphdGlvbiA9IGZhbHNlOwot
ICAgIEtVUkwgbWFpblVSTCA9IG1fc3BlY2lmaWVkV2ViRnJhbWVJbXBsLT5mcmFtZSgpLT5kb2N1
bWVudCgpLT51cmwoKTsKKyAgICBLVVJMIG1haW5VUkwgPSBtX3dlYkZyYW1lLT5mcmFtZSgpLT5k
b2N1bWVudCgpLT51cmwoKTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2ZyYW1l
cy5zaXplKCk7ICsraSkgewogICAgICAgICBXZWJGcmFtZUltcGwqIHdlYkZyYW1lID0gbV9mcmFt
ZXNbaV07CiAgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHdlYkZyYW1lLT5mcmFtZSgpLT5k
b2N1bWVudCgpOwogICAgICAgICBjb25zdCBLVVJMJiB1cmwgPSBkb2N1bWVudC0+dXJsKCk7CiAK
LSAgICAgICAgaWYgKCF1cmwuaXNWYWxpZCgpIHx8ICFtX2xvY2FsTGlua3MuY29udGFpbnModXJs
LnN0cmluZygpKSkKKyAgICAgICAgaWYgKCF1cmwuaXNWYWxpZCgpIHx8ICFtX3VybFJld3JpdGVy
LT5jb250YWlucyh1cmwuc3RyaW5nKCkpKQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAg
ICAgZGlkU2VyaWFsaXphdGlvbiA9IHRydWU7CiAKLSAgICAgICAgU3RyaW5nIGVuY29kaW5nID0g
d2ViRnJhbWUtPmZyYW1lKCktPmxvYWRlcigpLT53cml0ZXIoKS0+ZW5jb2RpbmcoKTsKLSAgICAg
ICAgY29uc3QgVGV4dEVuY29kaW5nJiB0ZXh0RW5jb2RpbmcgPSBlbmNvZGluZy5pc0VtcHR5KCkg
PyBVVEY4RW5jb2RpbmcoKSA6IFRleHRFbmNvZGluZyhlbmNvZGluZyk7Ci0gICAgICAgIFN0cmlu
ZyBkaXJlY3RvcnlOYW1lID0gdXJsID09IG1haW5VUkwgPyBtX2xvY2FsRGlyZWN0b3J5TmFtZSA6
ICIiOwotCi0gICAgICAgIFNlcmlhbGl6ZURvbVBhcmFtIHBhcmFtKHVybCwgdGV4dEVuY29kaW5n
LCBkb2N1bWVudCwgZGlyZWN0b3J5TmFtZSk7Ci0KLSAgICAgICAgRWxlbWVudCogZG9jdW1lbnRF
bGVtZW50ID0gZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpOwotICAgICAgICBpZiAoZG9jdW1l
bnRFbGVtZW50KQotICAgICAgICAgICAgYnVpbGRDb250ZW50Rm9yTm9kZShkb2N1bWVudEVsZW1l
bnQsICZwYXJhbSk7CisgICAgICAgIG1fdXJsUmV3cml0ZXItPnNldFByZWZpeCh1cmwgPT0gbWFp
blVSTCA/ICIuLyIgKyBtX2xvY2FsRGlyZWN0b3J5TmFtZSArICIvIiA6IFN0cmluZygpKTsKKyAg
ICAgICAgTG9jYWxpemVkTWFya3VwQWNjdW11bGF0b3IgYWNjdW11bGF0b3IobV91cmxSZXdyaXRl
ci5nZXQoKSk7CisgICAgICAgIFN0cmluZyBtYXJrdXAgPSBhY2N1bXVsYXRvci5zZXJpYWxpemVO
b2Rlcyhkb2N1bWVudCwgMCwgQ2hpbGRyZW5Pbmx5KTsKIAotICAgICAgICBlbmNvZGVBbmRGbHVz
aEJ1ZmZlcihXZWJQYWdlU2VyaWFsaXplckNsaWVudDo6Q3VycmVudEZyYW1lSXNGaW5pc2hlZCwg
JnBhcmFtLCBGb3JjZUZsdXNoKTsKKyAgICAgICAgZW5jb2RlQW5kRmx1c2hCdWZmZXIoV2ViUGFn
ZVNlcmlhbGl6ZXJDbGllbnQ6OkN1cnJlbnRGcmFtZUlzRmluaXNoZWQsIHVybCwgbWFya3VwLCBG
b3JjZUZsdXNoKTsKICAgICB9CiAKICAgICBBU1NFUlQobV9kYXRhQnVmZmVyLmlzRW1wdHkoKSk7
CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VTZXJpYWxpemVySW1wbC5o
IGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQYWdlU2VyaWFsaXplckltcGwuaAppbmRleCA1ZWU4
ODA1MzYyOThiMTEzMWM2ZGE3ZDIyNzliNTFkZTFlNWE2MDY0Li5hNmYwM2I2ZWY2MTM3MjM1MWRi
ZDcwNGU1ZTAxMTJmN2NjNjFiY2IwIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlBhZ2VTZXJpYWxpemVySW1wbC5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGFnZVNl
cmlhbGl6ZXJJbXBsLmgKQEAgLTM4LDcgKzM4LDYgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdIYXNoLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKLSNpbmNsdWRlICJX
ZWJFbnRpdGllcy5oIgogI2luY2x1ZGUgIldlYlBhZ2VTZXJpYWxpemVyLmgiCiAjaW5jbHVkZSAi
V2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQuaCIKICNpbmNsdWRlICJXZWJTdHJpbmcuaCIKQEAgLTUy
LDcgKzUxLDkgQEAgY2xhc3MgVGV4dEVuY29kaW5nOwogfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsK
KwogY2xhc3MgV2ViRnJhbWVJbXBsOworY2xhc3MgVVJMUmV3cml0ZXI7CiAKIC8vIEdldCBodG1s
IGRhdGEgYnkgc2VyaWFsaXppbmcgYWxsIGZyYW1lcyBvZiBjdXJyZW50IHBhZ2Ugd2l0aCBsaXN0
cwogLy8gd2hpY2ggY29udGFpbiBhbGwgcmVzb3VyY2UgbGlua3MgdGhhdCBoYXZlIGxvY2FsIGNv
cHkuCkBAIC04NSw4MiArODYsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBXZWJWZWN0b3I8V2ViVVJMPiYgbGlua3MsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiBsb2NhbFBhdGhzLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBXZWJTdHJpbmcmIGxvY2FsRGlyZWN0b3J5TmFtZSk7CisgICAg
fldlYlBhZ2VTZXJpYWxpemVySW1wbCgpOwogCiBwcml2YXRlOgotICAgIC8vIFNwZWNpZmllZCBm
cmFtZSB3aGljaCBuZWVkIHRvIGJlIHNlcmlhbGl6ZWQ7Ci0gICAgV2ViRnJhbWVJbXBsKiBtX3Nw
ZWNpZmllZFdlYkZyYW1lSW1wbDsKLSAgICAvLyBQb2ludGVyIG9mIFdlYlBhZ2VTZXJpYWxpemVy
Q2xpZW50Ci0gICAgV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQqIG1fY2xpZW50OwotICAgIC8vIFRo
aXMgaGFzaCBtYXAgaXMgdXNlZCB0byBtYXAgcmVzb3VyY2UgVVJMIG9mIG9yaWdpbmFsIGxpbmsg
dG8gaXRzIGxvY2FsCi0gICAgLy8gZmlsZSBwYXRoLgotICAgIHR5cGVkZWYgSGFzaE1hcDxXVEY6
OlN0cmluZywgV1RGOjpTdHJpbmc+IExpbmtMb2NhbFBhdGhNYXA7Ci0gICAgLy8gbG9jYWxfbGlu
a3NfIGluY2x1ZGUgYWxsIHBhaXIgb2YgbG9jYWwgcmVzb3VyY2UgcGF0aCBhbmQgY29ycmVzcG9u
ZGluZwotICAgIC8vIG9yaWdpbmFsIGxpbmsuCi0gICAgTGlua0xvY2FsUGF0aE1hcCBtX2xvY2Fs
TGlua3M7Ci0gICAgLy8gRGF0YSBidWZmZXIgZm9yIHNhdmluZyByZXN1bHQgb2Ygc2VyaWFsaXpl
ZCBET00gZGF0YS4KLSAgICBTdHJpbmdCdWlsZGVyIG1fZGF0YUJ1ZmZlcjsKLSAgICAvLyBQYXNz
aW5nIHRydWUgdG8gcmVjdXJzaXZlX3NlcmlhbGl6YXRpb25fIGluZGljYXRlcyB3ZSB3aWxsIHNl
cmlhbGl6ZSBub3QKLSAgICAvLyBvbmx5IHRoZSBzcGVjaWZpZWQgZnJhbWUgYnV0IGFsc28gYWxs
IHN1Yi1mcmFtZXMgaW4gdGhlIHNwZWNpZmljIGZyYW1lLgotICAgIC8vIE90aGVyd2lzZSB3ZSBv
bmx5IHNlcmlhbGl6ZSB0aGUgc3BlY2lmaWVkIGZyYW1lIGV4Y2x1ZGVkIGFsbCBzdWItZnJhbWVz
LgotICAgIGJvb2wgbV9yZWN1cnNpdmVTZXJpYWxpemF0aW9uOwotICAgIC8vIEZsYWcgaW5kaWNh
dGVzIHdoZXRoZXIgd2UgaGF2ZSBjb2xsZWN0ZWQgYWxsIGZyYW1lcyB3aGljaCBuZWVkIHRvIGJl
Ci0gICAgLy8gc2VyaWFsaXplZCBvciBub3Q7Ci0gICAgYm9vbCBtX2ZyYW1lc0NvbGxlY3RlZDsK
LSAgICAvLyBMb2NhbCBkaXJlY3RvcnkgbmFtZSBvZiBhbGwgbG9jYWwgcmVzb3VyY2UgZmlsZXMu
Ci0gICAgV1RGOjpTdHJpbmcgbV9sb2NhbERpcmVjdG9yeU5hbWU7Ci0gICAgLy8gVmVjdG9yIGZv
ciBzYXZpbmcgYWxsIGZyYW1lcyB3aGljaCBuZWVkIHRvIGJlIHNlcmlhbGl6ZWQuCi0gICAgVmVj
dG9yPFdlYkZyYW1lSW1wbCo+IG1fZnJhbWVzOwotCi0gICAgLy8gV2ViIGVudGl0aWVzIGNvbnZl
cnNpb24gbWFwcy4KLSAgICBXZWJFbnRpdGllcyBtX2h0bWxFbnRpdGllczsKLSAgICBXZWJFbnRp
dGllcyBtX3htbEVudGl0aWVzOwotCi0gICAgc3RydWN0IFNlcmlhbGl6ZURvbVBhcmFtIHsKLSAg
ICAgICAgY29uc3QgV2ViQ29yZTo6S1VSTCYgdXJsOwotICAgICAgICBjb25zdCBXZWJDb3JlOjpU
ZXh0RW5jb2RpbmcmIHRleHRFbmNvZGluZzsKLSAgICAgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGRv
Y3VtZW50OwotICAgICAgICBjb25zdCBXVEY6OlN0cmluZyYgZGlyZWN0b3J5TmFtZTsKLSAgICAg
ICAgYm9vbCBpc0hUTUxEb2N1bWVudDsgLy8gZG9jdW1lbnQuaXNIVE1MRG9jdW1lbnQoKQotICAg
ICAgICBib29sIGhhdmVTZWVuRG9jVHlwZTsKLSAgICAgICAgYm9vbCBoYXZlQWRkZWRDaGFyc2V0
RGVjbGFyYXRpb247Ci0gICAgICAgIC8vIFRoaXMgbWV0YSBlbGVtZW50IG5lZWQgdG8gYmUgc2tp
cHBlZCB3aGVuIHNlcmlhbGl6aW5nIERPTS4KLSAgICAgICAgY29uc3QgV2ViQ29yZTo6RWxlbWVu
dCogc2tpcE1ldGFFbGVtZW50OwotICAgICAgICAvLyBGbGFnIGluZGljYXRlcyB3ZSBhcmUgaW4g
c2NyaXB0IG9yIHN0eWxlIHRhZy4KLSAgICAgICAgYm9vbCBpc0luU2NyaXB0T3JTdHlsZVRhZzsK
LSAgICAgICAgYm9vbCBoYXZlQWRkZWRYTUxQcm9jZXNzaW5nRGlyZWN0aXZlOwotICAgICAgICAv
LyBGbGFnIGluZGljYXRlcyB3aGV0aGVyIHdlIGhhdmUgYWRkZWQgYWRkaXRpb25hbCBjb250ZW50
cyBiZWZvcmUgZW5kIHRhZy4KLSAgICAgICAgLy8gVGhpcyBmbGFnIHdpbGwgYmUgcmUtYXNzaWdu
ZWQgaW4gZWFjaCBjYWxsIG9mIGZ1bmN0aW9uCi0gICAgICAgIC8vIFBvc3RBY3Rpb25BZnRlclNl
cmlhbGl6ZU9wZW5UYWcgYW5kIGl0IGNvdWxkIGJlIGNoYW5nZWQgaW4gZnVuY3Rpb24KLSAgICAg
ICAgLy8gUHJlQWN0aW9uQmVmb3JlU2VyaWFsaXplRW5kVGFnIGlmIHRoZSBmdW5jdGlvbiBhZGRz
IG5ldyBjb250ZW50cyBpbnRvCi0gICAgICAgIC8vIHNlcmlhbGl6YXRpb24gc3RyZWFtLgotICAg
ICAgICBib29sIGhhdmVBZGRlZENvbnRlbnRzQmVmb3JlRW5kOwotCi0gICAgICAgIFNlcmlhbGl6
ZURvbVBhcmFtKGNvbnN0IFdlYkNvcmU6OktVUkwmLCBjb25zdCBXZWJDb3JlOjpUZXh0RW5jb2Rp
bmcmLCBXZWJDb3JlOjpEb2N1bWVudCosIGNvbnN0IFdURjo6U3RyaW5nJiBkaXJlY3RvcnlOYW1l
KTsKLSAgICB9OwotCi0gICAgLy8gQ29sbGVjdCBhbGwgdGFyZ2V0IGZyYW1lcyB3aGljaCBuZWVk
IHRvIGJlIHNlcmlhbGl6ZWQuCi0gICAgdm9pZCBjb2xsZWN0VGFyZ2V0RnJhbWVzKCk7Ci0gICAg
Ly8gQmVmb3JlIHdlIGJlZ2luIHNlcmlhbGl6aW5nIG9wZW4gdGFnIG9mIGEgZWxlbWVudCwgd2Ug
Z2l2ZSB0aGUgdGFyZ2V0Ci0gICAgLy8gZWxlbWVudCBhIGNoYW5jZSB0byBkbyBzb21lIHdvcmsg
cHJpb3IgdG8gYWRkIHNvbWUgYWRkaXRpb25hbCBkYXRhLgotICAgIFdURjo6U3RyaW5nIHByZUFj
dGlvbkJlZm9yZVNlcmlhbGl6ZU9wZW5UYWcoY29uc3QgV2ViQ29yZTo6RWxlbWVudCogZWxlbWVu
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBT
ZXJpYWxpemVEb21QYXJhbSogcGFyYW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCogbmVlZFNraXApOwotICAgIC8vIEFmdGVyIHdlIGZp
bmlzaCBzZXJpYWxpemluZyBvcGVuIHRhZyBvZiBhIGVsZW1lbnQsIHdlIGdpdmUgdGhlIHRhcmdl
dAotICAgIC8vIGVsZW1lbnQgYSBjaGFuY2UgdG8gZG8gc29tZSBwb3N0IHdvcmsgdG8gYWRkIHNv
bWUgYWRkaXRpb25hbCBkYXRhLgotICAgIFdURjo6U3RyaW5nIHBvc3RBY3Rpb25BZnRlclNlcmlh
bGl6ZU9wZW5UYWcoY29uc3QgV2ViQ29yZTo6RWxlbWVudCogZWxlbWVudCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXJpYWxpemVEb21QYXJh
bSogcGFyYW0pOwotICAgIC8vIEJlZm9yZSB3ZSBiZWdpbiBzZXJpYWxpemluZyBlbmQgdGFnIG9m
IGEgZWxlbWVudCwgd2UgZ2l2ZSB0aGUgdGFyZ2V0Ci0gICAgLy8gZWxlbWVudCBhIGNoYW5jZSB0
byBkbyBzb21lIHdvcmsgcHJpb3IgdG8gYWRkIHNvbWUgYWRkaXRpb25hbCBkYXRhLgotICAgIFdU
Rjo6U3RyaW5nIHByZUFjdGlvbkJlZm9yZVNlcmlhbGl6ZUVuZFRhZyhjb25zdCBXZWJDb3JlOjpF
bGVtZW50KiBlbGVtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgU2VyaWFsaXplRG9tUGFyYW0qIHBhcmFtLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCogbmVlZFNraXApOwotICAgIC8v
IEFmdGVyIHdlIGZpbmlzaCBzZXJpYWxpemluZyBlbmQgdGFnIG9mIGEgZWxlbWVudCwgd2UgZ2l2
ZSB0aGUgdGFyZ2V0Ci0gICAgLy8gZWxlbWVudCBhIGNoYW5jZSB0byBkbyBzb21lIHBvc3Qgd29y
ayB0byBhZGQgc29tZSBhZGRpdGlvbmFsIGRhdGEuCi0gICAgV1RGOjpTdHJpbmcgcG9zdEFjdGlv
bkFmdGVyU2VyaWFsaXplRW5kVGFnKGNvbnN0IFdlYkNvcmU6OkVsZW1lbnQqIGVsZW1lbnQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXJpYWxp
emVEb21QYXJhbSogcGFyYW0pOwotICAgIC8vIFNhdmUgZ2VuZXJhdGVkIGh0bWwgY29udGVudCB0
byBkYXRhIGJ1ZmZlci4KLSAgICB2b2lkIHNhdmVIVE1MQ29udGVudFRvQnVmZmVyKGNvbnN0IFdU
Rjo6U3RyaW5nJiBjb250ZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2Vy
aWFsaXplRG9tUGFyYW0qIHBhcmFtKTsKKyAgICB2b2lkIGNvbGxlY3RGcmFtZXMoKTsKIAogICAg
IGVudW0gRmx1c2hPcHRpb24gewogICAgICAgICBGb3JjZUZsdXNoLApAQCAtMTcxLDE3ICsxMDAs
MTYgQEAgcHJpdmF0ZToKICAgICAvLyBXZWJQYWdlU2VyaWFsaXplckNsaWVudC4gQ29udGVudCBp
cyBub3QgZmx1c2hlZCBpZiB0aGUgYnVmZmVyIGlzIG5vdCBmdWxsCiAgICAgLy8gdW5sZXNzIGZv
cmNlIGlzIDEuCiAgICAgdm9pZCBlbmNvZGVBbmRGbHVzaEJ1ZmZlcihXZWJQYWdlU2VyaWFsaXpl
ckNsaWVudDo6UGFnZVNlcmlhbGl6YXRpb25TdGF0dXMgc3RhdHVzLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgU2VyaWFsaXplRG9tUGFyYW0qIHBhcmFtLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgRmx1c2hPcHRpb24pOwotICAgIC8vIFNlcmlhbGl6ZSBvcGVuIHRhZyBv
ZiBhbiBzcGVjaWZpZWQgZWxlbWVudC4KLSAgICB2b2lkIG9wZW5UYWdUb1N0cmluZyhjb25zdCBX
ZWJDb3JlOjpFbGVtZW50KiBlbGVtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgIFNlcmlh
bGl6ZURvbVBhcmFtKiBwYXJhbSk7Ci0gICAgLy8gU2VyaWFsaXplIGVuZCB0YWcgb2YgYW4gc3Bl
Y2lmaWVkIGVsZW1lbnQuCi0gICAgdm9pZCBlbmRUYWdUb1N0cmluZyhjb25zdCBXZWJDb3JlOjpF
bGVtZW50KiBlbGVtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgU2VyaWFsaXplRG9tUGFy
YW0qIHBhcmFtKTsKLSAgICAvLyBCdWlsZCBjb250ZW50IGZvciBhIHNwZWNpZmllZCBub2RlCi0g
ICAgdm9pZCBidWlsZENvbnRlbnRGb3JOb2RlKGNvbnN0IFdlYkNvcmU6Ok5vZGUqIG5vZGUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlcmlhbGl6ZURvbVBhcmFtKiBwYXJhbSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJVUkwmIHVybCwgY29uc3QgU3Ry
aW5nJiBtYXJrdXAsIEZsdXNoT3B0aW9uKTsKKworICAgIFdlYlBhZ2VTZXJpYWxpemVyQ2xpZW50
KiBtX2NsaWVudDsKKyAgICBXZWJGcmFtZUltcGwqIG1fd2ViRnJhbWU7CisgICAgYm9vbCBtX3Jl
Y3Vyc2l2ZTsKKyAgICBWZWN0b3I8V2ViRnJhbWVJbXBsKj4gbV9mcmFtZXM7CisgICAgT3duUHRy
PFVSTFJld3JpdGVyPiBtX3VybFJld3JpdGVyOworCisgICAgU3RyaW5nQnVpbGRlciBtX2RhdGFC
dWZmZXI7CisgICAgV1RGOjpTdHJpbmcgbV9sb2NhbERpcmVjdG9yeU5hbWU7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJLaXQK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71090</attachid>
            <date>2010-10-18 15:05:34 -0700</date>
            <delta_ts>2010-12-20 23:40:02 -0800</delta_ts>
            <desc>patch (seems to work)</desc>
            <filename>bug-47748-20101018150532.patch</filename>
            <type>text/plain</type>
            <size>37603</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NmQyNjRiYzZjNTQyODA2MGI4MTM3YTVmNTMzOGVlY2RmNjYxMDI5Mi4uYWQ1OWZkZDAwZDEyYjVh
YWMzOTBkMjk5NTJiYzlhYjBkMjdhOWExMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxMC0xMC0xOCAgQWRh
bSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFdlYlBhZ2VTZXJpYWxpemVySW1wbCBkdXBsaWNhdGVzIChw
b29ybHkpIGEgbG90IG9mIGNvZGUgZnJvbSBNYXJrdXBBY2N1bXVsYXRvcgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDc3NDgKKworICAgICAgICBUd2Vh
ayBhIGZldyB0aGluZ3MgaW4gTWFya3VwQUNjdW11bGF0b3Igc28gd2UgY2FuIG92ZXJyaWRlIHRo
ZW0gaW4gYQorICAgICAgICBkZXJpdmVkIGNsYXNzIGZvciB0aGUgd2ViIHBhZ2Ugc2VyaWFsaXpl
ci4KKworICAgICAgICAqIGVkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEF0dHJpYnV0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6cmVzb2x2ZVVSTCk6CisgICAgICAgICogZWRpdGlu
Zy9NYXJrdXBBY2N1bXVsYXRvci5oOgorCiAyMDEwLTEwLTE4ICBQYXZlbCBGZWxkbWFuICA8cGZl
bGRtYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFl1cnkgU2VtaWtoYXRz
a3kuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuY3BwIGIv
V2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmNwcAppbmRleCA5MWE3NGM4ODg5MTAy
NmRhMjhkYmUxOGNjZDgxOTg3MzUxNDA0ODdkLi43MzQ5ZTJlZDEyMzhkYzBiN2FlMTQzNWZhOWEz
ZTgyYmViYmUzZDNhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0
b3IuY3BwCisrKyBiL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5jcHAKQEAgLTM2
NCwxMCArMzY0LDcgQEAgdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQXR0cmlidXRlKFZl
Y3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCogZWxlbWVudCwgY28KICAgICBpZiAoZWxlbWVudC0+
aXNVUkxBdHRyaWJ1dGUoY29uc3RfY2FzdDxBdHRyaWJ1dGUqPigmYXR0cmlidXRlKSkpIHsKICAg
ICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBjb21wbGV0ZSBmaWxlOi8vLyBVUkxzIGJlY2F1c2Ug
aXQgbWF5IGNvbnRhaW4gc2Vuc2l0aXZlIGluZm9ybWF0aW9uCiAgICAgICAgIC8vIGFib3V0IHRo
ZSB1c2VyJ3Mgc3lzdGVtLgotICAgICAgICBpZiAoc2hvdWxkUmVzb2x2ZVVSTHMoKSAmJiAhZWxl
bWVudC0+ZG9jdW1lbnQoKS0+dXJsKCkuaXNMb2NhbEZpbGUoKSkKLSAgICAgICAgICAgIGFwcGVu
ZFF1b3RlZFVSTEF0dHJpYnV0ZVZhbHVlKG91dCwgZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y29tcGxl
dGVVUkwoYXR0cmlidXRlLnZhbHVlKCkpLnN0cmluZygpKTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgYXBwZW5kUXVvdGVkVVJMQXR0cmlidXRlVmFsdWUob3V0LCBhdHRyaWJ1dGUudmFsdWUo
KSk7IAorICAgICAgICBhcHBlbmRRdW90ZWRVUkxBdHRyaWJ1dGVWYWx1ZShvdXQsIHNob3VsZFJl
c29sdmVVUkxzKCkgPyByZXNvbHZlVVJMKGVsZW1lbnQsIGF0dHJpYnV0ZSkgOiBhdHRyaWJ1dGUu
dmFsdWUoKS5zdHJpbmcoKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgb3V0LmFwcGVuZCgnXCIn
KTsKICAgICAgICAgYXBwZW5kQXR0cmlidXRlVmFsdWUob3V0LCBhdHRyaWJ1dGUudmFsdWUoKSwg
ZG9jdW1lbnRJc0hUTUwpOwpAQCAtMzc4LDYgKzM3NSwxMyBAQCB2b2lkIE1hcmt1cEFjY3VtdWxh
dG9yOjphcHBlbmRBdHRyaWJ1dGUoVmVjdG9yPFVDaGFyPiYgb3V0LCBFbGVtZW50KiBlbGVtZW50
LCBjbwogICAgICAgICBhcHBlbmROYW1lc3BhY2Uob3V0LCBhdHRyaWJ1dGUucHJlZml4KCksIGF0
dHJpYnV0ZS5uYW1lc3BhY2VVUkkoKSwgKm5hbWVzcGFjZXMpOwogfQogCitTdHJpbmcgTWFya3Vw
QWNjdW11bGF0b3I6OnJlc29sdmVVUkwoRWxlbWVudCogZWxlbWVudCwgY29uc3QgQXR0cmlidXRl
JiBhdHRyaWJ1dGUpCit7CisgICAgaWYgKGVsZW1lbnQtPmRvY3VtZW50KCktPnVybCgpLmlzTG9j
YWxGaWxlKCkpCisgICAgICAgIHJldHVybiBhdHRyaWJ1dGUudmFsdWUoKTsKKyAgICByZXR1cm4g
ZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoYXR0cmlidXRlLnZhbHVlKCkpLnN0cmlu
ZygpOworfQorCiB2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDREFUQVNlY3Rpb24oVmVj
dG9yPFVDaGFyPiYgb3V0LCBjb25zdCBTdHJpbmcmIHNlY3Rpb24pCiB7CiAgICAgLy8gRklYTUU6
IENEQVRBIGNvbnRlbnQgaXMgbm90IGVzY2FwZWQsIGJ1dCBYTUxTZXJpYWxpemVyIChhbmQgcG9z
c2libHkgb3RoZXIgY2FsbGVycykgc2hvdWxkIHJhaXNlIGFuIGV4Y2VwdGlvbiBpZiBpdCBpbmNs
dWRlcyAiXV0+Ii4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRv
ci5oIGIvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmgKaW5kZXggYjM1ZDIzMDg3
NzdhMWYwYThkZDU0MDJlZTc2M2U4Mjc4YWFjMDk4MC4uMGRiZjM3MGEwNDQ3MjRhOWJkY2YwZTM2
NDE1YWZhNTdhMjQ2MzZmNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3Vt
dWxhdG9yLmgKKysrIGIvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmgKQEAgLTk5
LDYgKzk5LDcgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgYXBwZW5kRW5kTWFya3VwKFZlY3RvcjxV
Q2hhcj4mIHJlc3VsdCwgY29uc3QgTm9kZSopOwogCiAgICAgYm9vbCBzaG91bGRSZXNvbHZlVVJM
cygpIHsgcmV0dXJuIG1fc2hvdWxkUmVzb2x2ZVVSTHMgPT0gQWJzb2x1dGVVUkxzOyB9CisgICAg
dmlydHVhbCBTdHJpbmcgcmVzb2x2ZVVSTChFbGVtZW50KiBlbGVtZW50LCBjb25zdCBBdHRyaWJ1
dGUmIGF0dHJpYnV0ZSk7CiAKICAgICBWZWN0b3I8Tm9kZSo+KiBjb25zdCBtX25vZGVzOwogICAg
IGNvbnN0IFJhbmdlKiBjb25zdCBtX3JhbmdlOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggNzgyMGIxYTU3MWZh
NjZmODdmOTViM2VlZjFjMzc4YzA5YzdiNDg0Ny4uZWY5ODhhOTk1NzM3NDAxMDkzZTViZGEzM2Ji
ZmI1OGVhNzU1NDA3YiAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysg
Yi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTIgQEAKKzIwMTAtMTAtMTgg
IEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJQYWdlU2VyaWFsaXplckltcGwgZHVwbGljYXRl
cyAocG9vcmx5KSBhIGxvdCBvZiBjb2RlIGZyb20gTWFya3VwQWNjdW11bGF0b3IKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3NzQ4CisKKyAgICAgICAg
UmVtb3ZlIGEgbW91bnRhaW4gb2YgZHVwbGljYXRlZCBjb2RlLiAgVGhlcmUgYXJlIHN0aWxsIGEg
YnVuY2ggb2YKKyAgICAgICAgZXJyb3JzIGluIHRoZSBjb2RlIHRoYXQncyBsZWZ0LCB3aGljaCBJ
J3ZlIG1hcmtlZCB3aXRoIEZJWE1Fcy4gIFRoZQorICAgICAgICBnZW5lcmFsIHN0cmF0ZWd5IG9m
IHRoaXMgcGF0Y2ggaXMgYXMgZm9sbG93czoKKworICAgICAgICAxKSBTdGFydCBzZXJpYWxpemlu
ZyBmcm9tIGRvY3VtZW50IGluc3RlYWQgb2YgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LgorICAg
ICAgICAgICBUaGlzIHJlbW92ZXMgdGhlIG5lZWQgdG8gZ2VuZXJhdGUgYSBsb3Qgb2YgZmFrZSBt
YXJrdXAuCisgICAgICAgIDIpIEFsd2F5cyBlbmNvZGUgaW4gVVRGOC4gIFRyeWluZyB0byBqdWdn
bGUgZGlmZmVyZW50IGVuY29kaW5ncyBpcworICAgICAgICAgICB1bm5lZWRlZCBjb21wbGV4aXR5
LiAgVVRGLTggaXMgdGhlIGRlIGZhY3RvIGVuY29kaW5nIG9mIHRoZSB3ZWIuCisgICAgICAgIDMp
IFRoaXMgY29kZSBzaG91bGQga25vdyBub3RoaW5nIG9mICI8IiBvciAiPiIuICBBbGwgdGhhdCBr
bm93bGVkZ2UKKyAgICAgICAgICAgc2hvdWxkIGxpdmUgaW4gV2ViQ29yZS9lZGl0aW5nLgorCisg
ICAgICAgIEknbSBub3Qgc3VyZSB3aGF0IHRoZSB0ZXN0aW5nIHBsYW4gaXMgZm9yIHRoaXMgY29k
ZS4gIEkgYnVpbHQgYSB2ZXJzaW9uCisgICAgICAgIG9mIENocm9tZSB3aXRoIHRoaXMgcGF0Y2gg
YW5kIHBsYXllZCBhcm91bmQgd2l0aCBzYXZpbmcgd2ViIHBhZ2VzLgorICAgICAgICBUaGluZ3Mg
c2VlbWVkIHRvIHdvcmsgb2suICBUaGF0J3Mgbm90IHZlcnkgY29udmluY2luZyB0aG91Z2guICBN
YXliZSB3ZQorICAgICAgICBuZWVkIHNvbWUgc29ydCBvZiB1bml0IHRlc3Rpbmcgb2YgdGhlIENo
cm9taXVtIEFQST8gIEkgc2F3IHdlIGhhdmUgYQorICAgICAgICAidGVzdHMiIGRpcmVjdG9yeSwg
YnV0IGl0IHdhcyB1bmNsZWFyIHRvIG1lIHdoZXRoZXIgSSBjb3VsZCB0ZXN0IHRoaXMKKyAgICAg
ICAgY29kZSB0aGVyZS4KKworICAgICAgICBGaW5hbGx5LCBhIGJ1bmNoIG9mIHRoaXMgY29kZSBz
aG91bGQgbW92ZSBpbnRvIFdlYkNvcmUgcHJvcGVyLiAgTWFueQorICAgICAgICBwb3J0cyBtaWdo
dCBsaWtlIHRvIGJlIGFibGUgdG8gc2F2ZSB3ZWIgcGFnZXMuICBIb3dldmVyLCBJJ20gc2F2aW5n
CisgICAgICAgIHRoYXQgd29yayBmb3IgYSBmdXR1cmUgcGF0Y2guCisKKyAgICAgICAgKiBzcmMv
V2ViUGFnZVNlcmlhbGl6ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6VVJMUmV3cml0ZXI6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlVSTFJld3JpdGVyOjpjb250YWlucyk6CisgICAg
ICAgIChXZWJLaXQ6OlVSTFJld3JpdGVyOjpyZXdyaXRlKToKKyAgICAgICAgKFdlYktpdDo6VVJM
UmV3cml0ZXI6OnNldFByZWZpeCk6CisgICAgICAgIChXZWJLaXQ6OlVSTFJld3JpdGVyOjpVUkxS
ZXdyaXRlcik6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsaXplZE1hcmt1cEFjY3VtdWxhdG9yOjpM
b2NhbGl6ZWRNYXJrdXBBY2N1bXVsYXRvcik6CisgICAgICAgIChXZWJLaXQ6OkxvY2FsaXplZE1h
cmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVtZW50KToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxp
emVkTWFya3VwQWNjdW11bGF0b3I6OnJlc29sdmVVUkwpOgorICAgICAgICAoV2ViS2l0OjpMb2Nh
bGl6ZWRNYXJrdXBBY2N1bXVsYXRvcjo6aXNDaGFyc2V0RGVjbGFyYXRpb24pOgorICAgICAgICAo
V2ViS2l0OjpMb2NhbGl6ZWRNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQmFzZUVsZW1lbnQpOgor
ICAgICAgICAoV2ViS2l0OjpMb2NhbGl6ZWRNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kTWFya09m
VGhlV2ViKToKKyAgICAgICAgKFdlYktpdDo6TG9jYWxpemVkTWFya3VwQWNjdW11bGF0b3I6OmFw
cGVuZENoYXJzZXREZWNsYXJhdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VTZXJpYWxp
emVySW1wbDo6ZW5jb2RlQW5kRmx1c2hCdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
U2VyaWFsaXplckltcGw6OldlYlBhZ2VTZXJpYWxpemVySW1wbCk6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2VTZXJpYWxpemVySW1wbDo6fldlYlBhZ2VTZXJpYWxpemVySW1wbCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2VTZXJpYWxpemVySW1wbDo6Y29sbGVjdEZyYW1lcyk6CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2VTZXJpYWxpemVySW1wbDo6c2VyaWFsaXplKToKKyAgICAgICAgKiBz
cmMvV2ViUGFnZVNlcmlhbGl6ZXJJbXBsLmg6CisKIDIwMTAtMTAtMTcgIFBhdmVsIEZlbGRtYW4g
IDxwZmVsZG1hbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgWXVyeSBTZW1p
a2hhdHNreS4KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGFnZVNlcmlhbGl6
ZXJJbXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGFnZVNlcmlhbGl6ZXJJbXBsLmNw
cAppbmRleCAwZDg1ZDc4NjkxNDdlNDQzZTkxNDYwMjU4Zjk1MTNhZTIzYTdjMThjLi5jMDM0ZTZm
YTMxYTNjNzliZjZhZjMxYjViMmM3NjY1OWNkODlkZTFkIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYlBhZ2VTZXJpYWxpemVySW1wbC5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJQYWdlU2VyaWFsaXplckltcGwuY3BwCkBAIC04MywxMSArODMsMTQgQEAKICNpbmNs
dWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJIVE1M
QWxsQ29sbGVjdGlvbi5oIgorI2luY2x1ZGUgIkhUTUxCYXNlRWxlbWVudC5oIgogI2luY2x1ZGUg
IkhUTUxFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCisjaW5jbHVkZSAi
SFRNTEhlYWRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE1ldGFFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIk1hcmt1cEFjY3Vt
dWxhdG9yLmgiCiAjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCiAjaW5jbHVkZSAibWFya3VwLmgi
CiAKQEAgLTEwMCw0MjIgKzEwMywyMjIgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5h
bWVzcGFjZSBXZWJLaXQgewogCi0vLyBNYXhpbXVtIGxlbmd0aCBvZiBkYXRhIGJ1ZmZlciB3aGlj
aCBpcyB1c2VkIHRvIHRlbXBvcmFyeSBzYXZlIGdlbmVyYXRlZAotLy8gaHRtbCBjb250ZW50IGRh
dGEuIFRoaXMgaXMgYSBzb2Z0IGxpbWl0IHdoaWNoIG1pZ2h0IGJlIHBhc3NlZCBpZiBhIHZlcnkg
bGFyZ2UKLS8vIGNvbnRlZ2lvdXMgc3RyaW5nIGlzIGZvdW5kIGluIHRoZSBwYWdlLgotc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIGRhdGFCdWZmZXJDYXBhY2l0eSA9IDY1NTM2OwotCi1XZWJQYWdlU2Vy
aWFsaXplckltcGw6OlNlcmlhbGl6ZURvbVBhcmFtOjpTZXJpYWxpemVEb21QYXJhbShjb25zdCBL
VVJMJiB1cmwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBUZXh0RW5jb2RpbmcmIHRleHRFbmNvZGluZywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvY3Vt
ZW50KiBkb2N1bWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgZGlyZWN0b3J5TmFtZSkKLSAgICA6IHVy
bCh1cmwpCi0gICAgLCB0ZXh0RW5jb2RpbmcodGV4dEVuY29kaW5nKQotICAgICwgZG9jdW1lbnQo
ZG9jdW1lbnQpCi0gICAgLCBkaXJlY3RvcnlOYW1lKGRpcmVjdG9yeU5hbWUpCi0gICAgLCBpc0hU
TUxEb2N1bWVudChkb2N1bWVudC0+aXNIVE1MRG9jdW1lbnQoKSkKLSAgICAsIGhhdmVTZWVuRG9j
VHlwZShmYWxzZSkKLSAgICAsIGhhdmVBZGRlZENoYXJzZXREZWNsYXJhdGlvbihmYWxzZSkKLSAg
ICAsIHNraXBNZXRhRWxlbWVudCgwKQotICAgICwgaXNJblNjcmlwdE9yU3R5bGVUYWcoZmFsc2Up
Ci0gICAgLCBoYXZlQWRkZWRYTUxQcm9jZXNzaW5nRGlyZWN0aXZlKGZhbHNlKQotICAgICwgaGF2
ZUFkZGVkQ29udGVudHNCZWZvcmVFbmQoZmFsc2UpCi17Ci19Cit1c2luZyBuYW1lc3BhY2UgSFRN
TE5hbWVzOwogCi1TdHJpbmcgV2ViUGFnZVNlcmlhbGl6ZXJJbXBsOjpwcmVBY3Rpb25CZWZvcmVT
ZXJpYWxpemVPcGVuVGFnKAotICAgIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIFNlcmlhbGl6ZURv
bVBhcmFtKiBwYXJhbSwgYm9vbCogbmVlZFNraXApCi17Ci0gICAgU3RyaW5nQnVpbGRlciByZXN1
bHQ7Ci0KLSAgICAqbmVlZFNraXAgPSBmYWxzZTsKLSAgICBpZiAocGFyYW0tPmlzSFRNTERvY3Vt
ZW50KSB7Ci0gICAgICAgIC8vIFNraXAgdGhlIG9wZW4gdGFnIG9mIG9yaWdpbmFsIE1FVEEgdGFn
IHdoaWNoIGRlY2xhcmUgY2hhcnNldCBzaW5jZSB3ZQotICAgICAgICAvLyBoYXZlIG92ZXJyaWRl
ZCB0aGUgTUVUQSB3aGljaCBoYXZlIGNvcnJlY3QgY2hhcnNldCBkZWNsYXJhdGlvbiBhZnRlcgot
ICAgICAgICAvLyBzZXJpYWxpemluZyBvcGVuIHRhZyBvZiBIRUFEIGVsZW1lbnQuCi0gICAgICAg
IGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6bWV0YVRhZykpIHsKLSAgICAgICAg
ICAgIGNvbnN0IEhUTUxNZXRhRWxlbWVudCogbWV0YSA9IHN0YXRpY19jYXN0PGNvbnN0IEhUTUxN
ZXRhRWxlbWVudCo+KGVsZW1lbnQpOwotICAgICAgICAgICAgLy8gQ2hlY2sgd2hldGhlciB0aGUg
TUVUQSB0YWcgaGFzIGRlY2xhcmVkIGNoYXJzZXQgb3Igbm90LgotICAgICAgICAgICAgU3RyaW5n
IGVxdWl2ID0gbWV0YS0+aHR0cEVxdWl2KCk7Ci0gICAgICAgICAgICBpZiAoZXF1YWxJZ25vcmlu
Z0Nhc2UoZXF1aXYsICJjb250ZW50LXR5cGUiKSkgewotICAgICAgICAgICAgICAgIFN0cmluZyBj
b250ZW50ID0gbWV0YS0+Y29udGVudCgpOwotICAgICAgICAgICAgICAgIGlmIChjb250ZW50Lmxl
bmd0aCgpICYmIGNvbnRlbnQuY29udGFpbnMoImNoYXJzZXQiLCBmYWxzZSkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgLy8gRmluZCBNRVRBIHRhZyBkZWNsYXJlZCBjaGFyc2V0LCB3ZSBuZWVkIHRv
IHNraXAgaXQgd2hlbgotICAgICAgICAgICAgICAgICAgICAvLyBzZXJpYWxpemluZyBET00uCi0g
ICAgICAgICAgICAgICAgICAgIHBhcmFtLT5za2lwTWV0YUVsZW1lbnQgPSBlbGVtZW50OwotICAg
ICAgICAgICAgICAgICAgICAqbmVlZFNraXAgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6aHRtbFRhZykpIHsKLSAgICAgICAgICAgIC8vIENoZWNrIHNvbWV0aGluZyBiZWZvcmUg
cHJvY2Vzc2luZyB0aGUgb3BlbiB0YWcgb2YgSEVBRCBlbGVtZW50LgotICAgICAgICAgICAgLy8g
Rmlyc3Qgd2UgYWRkIGRvYyB0eXBlIGRlY2xhcmF0aW9uIGlmIG9yaWdpbmFsIGRvY3VtZW50IGhh
cyBpdC4KLSAgICAgICAgICAgIGlmICghcGFyYW0tPmhhdmVTZWVuRG9jVHlwZSkgewotICAgICAg
ICAgICAgICAgIHBhcmFtLT5oYXZlU2VlbkRvY1R5cGUgPSB0cnVlOwotICAgICAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQoY3JlYXRlTWFya3VwKHBhcmFtLT5kb2N1bWVudC0+ZG9jdHlwZSgpKSk7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIEFkZCBNT1RXIGRlY2xhcmF0aW9uIGJl
Zm9yZSBodG1sIHRhZy4KLSAgICAgICAgICAgIC8vIFNlZSBodHRwOi8vbXNkbjIubWljcm9zb2Z0
LmNvbS9lbi11cy9saWJyYXJ5L21zNTM3NjI4KFZTLjg1KS5hc3B4LgotICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZChXZWJQYWdlU2VyaWFsaXplcjo6Z2VuZXJhdGVNYXJrT2ZUaGVXZWJEZWNsYXJh
dGlvbihwYXJhbS0+dXJsKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OmJhc2VUYWcpKSB7Ci0gICAgICAgICAgICAvLyBDb21tZW50IHRoZSBCQVNF
IHRhZyB3aGVuIHNlcmlhbGl6aW5nIGRvbS4KLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoIjwh
LS0iKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIFdyaXRlIFhNTCBkZWNs
YXJhdGlvbi4KLSAgICAgICAgaWYgKCFwYXJhbS0+aGF2ZUFkZGVkWE1MUHJvY2Vzc2luZ0RpcmVj
dGl2ZSkgewotICAgICAgICAgICAgcGFyYW0tPmhhdmVBZGRlZFhNTFByb2Nlc3NpbmdEaXJlY3Rp
dmUgPSB0cnVlOwotICAgICAgICAgICAgLy8gR2V0IGVuY29kaW5nIGluZm8uCi0gICAgICAgICAg
ICBTdHJpbmcgeG1sRW5jb2RpbmcgPSBwYXJhbS0+ZG9jdW1lbnQtPnhtbEVuY29kaW5nKCk7Ci0g
ICAgICAgICAgICBpZiAoeG1sRW5jb2RpbmcuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHht
bEVuY29kaW5nID0gcGFyYW0tPmRvY3VtZW50LT5mcmFtZSgpLT5sb2FkZXIoKS0+d3JpdGVyKCkt
PmVuY29kaW5nKCk7Ci0gICAgICAgICAgICBpZiAoeG1sRW5jb2RpbmcuaXNFbXB0eSgpKQotICAg
ICAgICAgICAgICAgIHhtbEVuY29kaW5nID0gVVRGOEVuY29kaW5nKCkubmFtZSgpOwotICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZCgiPD94bWwgdmVyc2lvbj1cIiIpOwotICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZChwYXJhbS0+ZG9jdW1lbnQtPnhtbFZlcnNpb24oKSk7Ci0gICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKCJcIiBlbmNvZGluZz1cIiIpOwotICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZCh4bWxFbmNvZGluZyk7Ci0gICAgICAgICAgICBpZiAocGFyYW0tPmRvY3VtZW50LT54bWxTdGFu
ZGFsb25lKCkpCi0gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgiXCIgc3RhbmRhbG9uZT1c
InllcyIpOwotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgiXCI/PlxuIik7Ci0gICAgICAgIH0K
LSAgICAgICAgLy8gQWRkIGRvYyB0eXBlIGRlY2xhcmF0aW9uIGlmIG9yaWdpbmFsIGRvY3VtZW50
IGhhcyBpdC4KLSAgICAgICAgaWYgKCFwYXJhbS0+aGF2ZVNlZW5Eb2NUeXBlKSB7Ci0gICAgICAg
ICAgICBwYXJhbS0+aGF2ZVNlZW5Eb2NUeXBlID0gdHJ1ZTsKLSAgICAgICAgICAgIHJlc3VsdC5h
cHBlbmQoY3JlYXRlTWFya3VwKHBhcmFtLT5kb2N1bWVudC0+ZG9jdHlwZSgpKSk7Ci0gICAgICAg
IH0KK2NsYXNzIFVSTFJld3JpdGVyIDogcHVibGljIE5vbmNvcHlhYmxlIHsKK3B1YmxpYzoKKyAg
ICB0eXBlZGVmIFdURjo6SGFzaE1hcDxXVEY6OlN0cmluZywgV1RGOjpTdHJpbmc+IFVSTE1hcDsK
KworICAgIHN0YXRpYyBQYXNzT3duUHRyPFVSTFJld3JpdGVyPiBjcmVhdGUoUGFzc093blB0cjxV
UkxNYXA+IG1hcCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgVVJMUmV3cml0
ZXIobWFwKSk7CiAgICAgfQotICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKLX0KIAotU3Ry
aW5nIFdlYlBhZ2VTZXJpYWxpemVySW1wbDo6cG9zdEFjdGlvbkFmdGVyU2VyaWFsaXplT3BlblRh
ZygKLSAgICBjb25zdCBFbGVtZW50KiBlbGVtZW50LCBTZXJpYWxpemVEb21QYXJhbSogcGFyYW0p
Ci17Ci0gICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7Ci0KLSAgICBwYXJhbS0+aGF2ZUFkZGVkQ29u
dGVudHNCZWZvcmVFbmQgPSBmYWxzZTsKLSAgICBpZiAoIXBhcmFtLT5pc0hUTUxEb2N1bWVudCkK
LSAgICAgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotICAgIC8vIENoZWNrIGFmdGVyIHBy
b2Nlc3NpbmcgdGhlIG9wZW4gdGFnIG9mIEhFQUQgZWxlbWVudAotICAgIGlmICghcGFyYW0tPmhh
dmVBZGRlZENoYXJzZXREZWNsYXJhdGlvbgotICAgICAgICAmJiBlbGVtZW50LT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6aGVhZFRhZykpIHsKLSAgICAgICAgcGFyYW0tPmhhdmVBZGRlZENoYXJzZXRE
ZWNsYXJhdGlvbiA9IHRydWU7Ci0gICAgICAgIC8vIENoZWNrIG1ldGEgZWxlbWVudC4gV2ViS2l0
IG9ubHkgcHJlLXBhcnNlIHRoZSBmaXJzdCA1MTIgYnl0ZXMKLSAgICAgICAgLy8gb2YgdGhlIGRv
Y3VtZW50LiBJZiB0aGUgd2hvbGUgPEhFQUQ+IGlzIGxhcmdlciBhbmQgbWV0YSBpcyB0aGUKLSAg
ICAgICAgLy8gZW5kIG9mIGhlYWQgcGFydCwgdGhlbiB0aGlzIGtpbmQgb2YgcGFnZXMgYXJlbid0
IGRlY29kZWQgY29ycmVjdGx5Ci0gICAgICAgIC8vIGJlY2F1c2Ugb2YgdGhpcyBpc3N1ZS4gU28g
d2hlbiB3ZSBzZXJpYWxpemUgdGhlIERPTSwgd2UgbmVlZCB0bwotICAgICAgICAvLyBtYWtlIHN1
cmUgdGhlIG1ldGEgd2lsbCBpbiBmaXJzdCBjaGlsZCBvZiBoZWFkIHRhZy4KLSAgICAgICAgLy8g
U2VlIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjIxLgotICAgICAg
ICAvLyBGaXJzdCB3ZSBnZW5lcmF0ZSBuZXcgY29udGVudCBmb3Igd3JpdGluZyBjb3JyZWN0IE1F
VEEgZWxlbWVudC4KLSAgICAgICAgcmVzdWx0LmFwcGVuZChXZWJQYWdlU2VyaWFsaXplcjo6Z2Vu
ZXJhdGVNZXRhQ2hhcnNldERlY2xhcmF0aW9uKAotICAgICAgICAgICAgU3RyaW5nKHBhcmFtLT50
ZXh0RW5jb2RpbmcubmFtZSgpKSkpOwotCi0gICAgICAgIHBhcmFtLT5oYXZlQWRkZWRDb250ZW50
c0JlZm9yZUVuZCA9IHRydWU7Ci0gICAgICAgIC8vIFdpbGwgc2VhcmNoIGVhY2ggTUVUQSB3aGlj
aCBoYXMgY2hhcnNldCBkZWNsYXJhdGlvbiwgYW5kIHNraXAgdGhlbSBhbGwKLSAgICAgICAgLy8g
aW4gUHJlQWN0aW9uQmVmb3JlU2VyaWFsaXplT3BlblRhZy4KLSAgICB9IGVsc2UgaWYgKGVsZW1l
bnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzY3JpcHRUYWcpCi0gICAgICAgICAgICAgICB8fCBl
bGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c3R5bGVUYWcpKSB7Ci0gICAgICAgIHBhcmFt
LT5pc0luU2NyaXB0T3JTdHlsZVRhZyA9IHRydWU7CisgICAgYm9vbCBjb250YWlucyhjb25zdCBT
dHJpbmcmIHVybCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX21hcC0+Y29udGFpbnModXJsKTsK
KyAgICB9CisgICAgCisgICAgU3RyaW5nIHJld3JpdGUoY29uc3QgU3RyaW5nJiB1cmwpCisgICAg
eworICAgICAgICBpZiAoIW1fbWFwLT5jb250YWlucyh1cmwpKQorICAgICAgICAgICAgcmV0dXJu
IHVybDsKKworICAgICAgICBTdHJpbmcgcmV3cml0dGVuVVJMOworICAgICAgICBpZiAoIW1fcHJl
Zml4LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJld3JpdHRlblVSTCA9IG1fcHJlZml4OworICAg
ICAgICByZXdyaXR0ZW5VUkwgKz0gbV9tYXAtPmdldCh1cmwpOworCisgICAgICAgIHJldHVybiBy
ZXdyaXR0ZW5VUkw7CiAgICAgfQogCi0gICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotfQor
ICAgIHZvaWQgc2V0UHJlZml4KGNvbnN0IFN0cmluZyYgcHJlZml4KSB7IG1fcHJlZml4ID0gcHJl
Zml4OyB9CiAKLVN0cmluZyBXZWJQYWdlU2VyaWFsaXplckltcGw6OnByZUFjdGlvbkJlZm9yZVNl
cmlhbGl6ZUVuZFRhZygKLSAgICBjb25zdCBFbGVtZW50KiBlbGVtZW50LCBTZXJpYWxpemVEb21Q
YXJhbSogcGFyYW0sIGJvb2wqIG5lZWRTa2lwKQotewotICAgIFN0cmluZyByZXN1bHQ7Ci0KLSAg
ICAqbmVlZFNraXAgPSBmYWxzZTsKLSAgICBpZiAoIXBhcmFtLT5pc0hUTUxEb2N1bWVudCkKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAvLyBTa2lwIHRoZSBlbmQgdGFnIG9mIG9yaWdpbmFs
IE1FVEEgdGFnIHdoaWNoIGRlY2xhcmUgY2hhcnNldC4KLSAgICAvLyBOZWVkIG5vdCB0byBjaGVj
ayB3aGV0aGVyIGl0J3MgTUVUQSB0YWcgc2luY2Ugd2UgZ3VhcmFudGVlCi0gICAgLy8gc2tpcE1l
dGFFbGVtZW50IGlzIGRlZmluaXRlbHkgTUVUQSB0YWcgaWYgaXQncyBub3QgMC4KLSAgICBpZiAo
cGFyYW0tPnNraXBNZXRhRWxlbWVudCA9PSBlbGVtZW50KQotICAgICAgICAqbmVlZFNraXAgPSB0
cnVlOwotICAgIGVsc2UgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzY3JpcHRU
YWcpCi0gICAgICAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnN0eWxl
VGFnKSkgewotICAgICAgICBBU1NFUlQocGFyYW0tPmlzSW5TY3JpcHRPclN0eWxlVGFnKTsKLSAg
ICAgICAgcGFyYW0tPmlzSW5TY3JpcHRPclN0eWxlVGFnID0gZmFsc2U7Citwcml2YXRlOgorICAg
IGV4cGxpY2l0IFVSTFJld3JpdGVyKFBhc3NPd25QdHI8VVJMTWFwPiBtYXApCisgICAgICAgIDog
bV9tYXAobWFwKQorICAgIHsKICAgICB9CiAKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0vLyBB
ZnRlciB3ZSBmaW5pc2ggc2VyaWFsaXppbmcgZW5kIHRhZyBvZiBhIGVsZW1lbnQsIHdlIGdpdmUg
dGhlIHRhcmdldAotLy8gZWxlbWVudCBhIGNoYW5jZSB0byBkbyBzb21lIHBvc3Qgd29yayB0byBh
ZGQgc29tZSBhZGRpdGlvbmFsIGRhdGEuCi1TdHJpbmcgV2ViUGFnZVNlcmlhbGl6ZXJJbXBsOjpw
b3N0QWN0aW9uQWZ0ZXJTZXJpYWxpemVFbmRUYWcoCi0gICAgY29uc3QgRWxlbWVudCogZWxlbWVu
dCwgU2VyaWFsaXplRG9tUGFyYW0qIHBhcmFtKQotewotICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0
OwotCi0gICAgaWYgKCFwYXJhbS0+aXNIVE1MRG9jdW1lbnQpCi0gICAgICAgIHJldHVybiByZXN1
bHQudG9TdHJpbmcoKTsKLSAgICAvLyBDb21tZW50IHRoZSBCQVNFIHRhZyB3aGVuIHNlcmlhbGl6
aW5nIERPTS4KLSAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJhc2VUYWcp
KSB7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoIi0tPiIpOwotICAgICAgICAvLyBBcHBlbmQgYSBu
ZXcgYmFzZSB0YWcgZGVjbGFyYXRpb24uCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoV2ViUGFnZVNl
cmlhbGl6ZXI6OmdlbmVyYXRlQmFzZVRhZ0RlY2xhcmF0aW9uKAotICAgICAgICAgICAgcGFyYW0t
PmRvY3VtZW50LT5iYXNlVGFyZ2V0KCkpKTsKKyAgICBTdHJpbmcgbV9wcmVmaXg7CisgICAgT3du
UHRyPFVSTE1hcD4gbV9tYXA7Cit9OworCitjbGFzcyBMb2NhbGl6ZWRNYXJrdXBBY2N1bXVsYXRv
ciA6IHB1YmxpYyBNYXJrdXBBY2N1bXVsYXRvciB7CitwdWJsaWM6CisgICAgTG9jYWxpemVkTWFy
a3VwQWNjdW11bGF0b3IoVVJMUmV3cml0ZXIqIHVybFJld3JpdGVyKQorICAgICAgICA6IE1hcmt1
cEFjY3VtdWxhdG9yKDAsIEFic29sdXRlVVJMcykKKyAgICAgICAgLCBtX3VybFJld3JpdGVyKHVy
bFJld3JpdGVyKQorICAgICAgICAsIG1faGF2ZUFkZGVkTWFya09mVGhlV2ViKGZhbHNlKQorICAg
ICAgICAsIG1faGF2ZUFkZGVkQ2hhcnNldERlY2xhcmF0aW9uKGZhbHNlKQorICAgIHsKICAgICB9
CiAKLSAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci19Citwcml2YXRlOgorICAgIHZpcnR1
YWwgdm9pZCBhcHBlbmRFbGVtZW50KFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCogZWxlbWVu
dCwgTmFtZXNwYWNlcyogbmFtZXNwYWNlcykKKyAgICB7CisgICAgICAgIGlmIChlbGVtZW50LT5o
YXNUYWdOYW1lKG1ldGFUYWcpICYmIGlzQ2hhcnNldERlY2xhcmF0aW9uKHN0YXRpY19jYXN0PEhU
TUxNZXRhRWxlbWVudCo+KGVsZW1lbnQpKSkKKyAgICAgICAgICAgIHJldHVybjsgLy8gTm90aWNl
IHRoYXQgdGhpcyB3b3JrcyBiZWNhdXNlIDxtZXRhPiBpcyBzZWxmLWNsb3NpbmchCiAKLXZvaWQg
V2ViUGFnZVNlcmlhbGl6ZXJJbXBsOjpzYXZlSFRNTENvbnRlbnRUb0J1ZmZlcigKLSAgICBjb25z
dCBTdHJpbmcmIHJlc3VsdCwgU2VyaWFsaXplRG9tUGFyYW0qIHBhcmFtKQotewotICAgIG1fZGF0
YUJ1ZmZlci5hcHBlbmQocmVzdWx0KTsKLSAgICBlbmNvZGVBbmRGbHVzaEJ1ZmZlcihXZWJQYWdl
U2VyaWFsaXplckNsaWVudDo6Q3VycmVudEZyYW1lSXNOb3RGaW5pc2hlZCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICBwYXJhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBEb05vdEZvcmNl
Rmx1c2gpOwotfQorICAgICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShiYXNlVGFnKSkgewor
ICAgICAgICAgICAgYXBwZW5kQmFzZUVsZW1lbnQob3V0LCBzdGF0aWNfY2FzdDxIVE1MQmFzZUVs
ZW1lbnQqPihlbGVtZW50KSwgbmFtZXNwYWNlcyk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KIAotdm9pZCBXZWJQYWdlU2VyaWFsaXplckltcGw6OmVuY29kZUFuZEZsdXNoQnVmZmVy
KAotICAgIFdlYlBhZ2VTZXJpYWxpemVyQ2xpZW50OjpQYWdlU2VyaWFsaXphdGlvblN0YXR1cyBz
dGF0dXMsCi0gICAgU2VyaWFsaXplRG9tUGFyYW0qIHBhcmFtLAotICAgIEZsdXNoT3B0aW9uIGZs
dXNoT3B0aW9uKQotewotICAgIC8vIERhdGEgYnVmZmVyIGlzIG5vdCBmdWxsIG5vciBkbyB3ZSB3
YW50IHRvIGZvcmNlIGZsdXNoLgotICAgIGlmIChmbHVzaE9wdGlvbiAhPSBGb3JjZUZsdXNoICYm
IG1fZGF0YUJ1ZmZlci5sZW5ndGgoKSA8PSBkYXRhQnVmZmVyQ2FwYWNpdHkpCi0gICAgICAgIHJl
dHVybjsKKyAgICAgICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoaHRtbFRhZykgJiYgIW1faGF2
ZUFkZGVkTWFya09mVGhlV2ViKQorICAgICAgICAgICAgYXBwZW5kTWFya09mVGhlV2ViKG91dCwg
ZWxlbWVudC0+ZG9jdW1lbnQoKS0+dXJsKCkpOwogCi0gICAgU3RyaW5nIGNvbnRlbnQgPSBtX2Rh
dGFCdWZmZXIudG9TdHJpbmcoKTsKLSAgICBtX2RhdGFCdWZmZXIgPSBTdHJpbmdCdWlsZGVyKCk7
CisgICAgICAgIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVtZW50KG91dCwgZWxlbWVudCwg
bmFtZXNwYWNlcyk7CiAKLSAgICAvLyBDb252ZXJ0IHRoZSB1bmljb2RlIGNvbnRlbnQgdG8gdGFy
Z2V0IGVuY29kaW5nCi0gICAgQ1N0cmluZyBlbmNvZGVkQ29udGVudCA9IHBhcmFtLT50ZXh0RW5j
b2RpbmcuZW5jb2RlKAotICAgICAgICBjb250ZW50LmNoYXJhY3RlcnMoKSwgY29udGVudC5sZW5n
dGgoKSwgRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpOworICAgICAgICBpZiAoZWxlbWVudC0+aGFz
VGFnTmFtZShoZWFkVGFnKSAmJiAhbV9oYXZlQWRkZWRDaGFyc2V0RGVjbGFyYXRpb24pCisgICAg
ICAgICAgICBhcHBlbmRDaGFyc2V0RGVjbGFyYXRpb24ob3V0LCBzdGF0aWNfY2FzdDxIVE1MSGVh
ZEVsZW1lbnQqPihlbGVtZW50KSwgbmFtZXNwYWNlcyk7CisgICAgfQogCi0gICAgLy8gU2VuZCBy
ZXN1bHQgdG8gdGhlIGNsaWVudC4KLSAgICBtX2NsaWVudC0+ZGlkU2VyaWFsaXplRGF0YUZvckZy
YW1lKHBhcmFtLT51cmwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBX
ZWJDU3RyaW5nKGVuY29kZWRDb250ZW50LmRhdGEoKSwgZW5jb2RlZENvbnRlbnQubGVuZ3RoKCkp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzKTsKLX0KKyAg
ICB2aXJ0dWFsIFN0cmluZyByZXNvbHZlVVJMKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEF0dHJp
YnV0ZSYgYXR0cmlidXRlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdXJsUmV3cml0ZXItPnJl
d3JpdGUoZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoYXR0cmlidXRlLnZhbHVlKCkp
LnN0cmluZygpKTsKKyAgICB9CiAKLXZvaWQgV2ViUGFnZVNlcmlhbGl6ZXJJbXBsOjpvcGVuVGFn
VG9TdHJpbmcoY29uc3QgRWxlbWVudCogZWxlbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgU2VyaWFsaXplRG9tUGFyYW0qIHBhcmFtKQotewotICAgIC8v
IEZJWE1FOiB1c2UgU3RyaW5nQnVpbGRlciBpbnN0ZWFkIG9mIFN0cmluZy4KLSAgICBib29sIG5l
ZWRTa2lwOwotICAgIC8vIERvIHByZSBhY3Rpb24gZm9yIG9wZW4gdGFnLgotICAgIFN0cmluZyBy
ZXN1bHQgPSBwcmVBY3Rpb25CZWZvcmVTZXJpYWxpemVPcGVuVGFnKGVsZW1lbnQsIHBhcmFtLCAm
bmVlZFNraXApOwotICAgIGlmIChuZWVkU2tpcCkKLSAgICAgICAgcmV0dXJuOwotICAgIC8vIEFk
ZCBvcGVuIHRhZwotICAgIHJlc3VsdCArPSAiPCIgKyBlbGVtZW50LT5ub2RlTmFtZSgpLmxvd2Vy
KCk7Ci0gICAgLy8gR28gdGhyb3VnaCBhbGwgYXR0cmlidXRlcyBhbmQgc2VyaWFsaXplIHRoZW0u
Ci0gICAgY29uc3QgTmFtZWROb2RlTWFwICphdHRyTWFwID0gZWxlbWVudC0+YXR0cmlidXRlcyh0
cnVlKTsKLSAgICBpZiAoYXR0ck1hcCkgewotICAgICAgICB1bnNpZ25lZCBudW1BdHRycyA9IGF0
dHJNYXAtPmxlbmd0aCgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtQXR0
cnM7IGkrKykgewotICAgICAgICAgICAgcmVzdWx0ICs9ICIgIjsKLSAgICAgICAgICAgIC8vIEFk
ZCBhdHRyaWJ1dGUgcGFpcgotICAgICAgICAgICAgY29uc3QgQXR0cmlidXRlICphdHRyaWJ1dGUg
PSBhdHRyTWFwLT5hdHRyaWJ1dGVJdGVtKGkpOwotICAgICAgICAgICAgcmVzdWx0ICs9IGF0dHJp
YnV0ZS0+bmFtZSgpLnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICByZXN1bHQgKz0gIj1cIiI7Ci0g
ICAgICAgICAgICBpZiAoIWF0dHJpYnV0ZS0+dmFsdWUoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAg
ICAgICAgICBjb25zdCBTdHJpbmcmIGF0dHJWYWx1ZSA9IGF0dHJpYnV0ZS0+dmFsdWUoKTsKLQot
ICAgICAgICAgICAgICAgIC8vIENoZWNrIHdoZXRoZXIgd2UgbmVlZCB0byByZXBsYWNlIHNvbWUg
cmVzb3VyY2UgbGlua3MKLSAgICAgICAgICAgICAgICAvLyB3aXRoIGxvY2FsIHJlc291cmNlIHBh
dGhzLgotICAgICAgICAgICAgICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lID0gYXR0
cmlidXRlLT5uYW1lKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnRIYXNMZWdhbExpbmtB
dHRyaWJ1dGUoZWxlbWVudCwgYXR0ck5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEZv
ciBsaW5rcyBzdGFydCB3aXRoICJqYXZhc2NyaXB0OiIsIHdlIGRvIG5vdCBjaGFuZ2UgaXQuCi0g
ICAgICAgICAgICAgICAgICAgIGlmIChhdHRyVmFsdWUuc3RhcnRzV2l0aCgiamF2YXNjcmlwdDoi
LCBmYWxzZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gYXR0clZhbHVlOwot
ICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdl
dCB0aGUgYWJzb2x1dGUgbGluawotICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGNvbXBs
ZXRlVVJMID0gcGFyYW0tPmRvY3VtZW50LT5jb21wbGV0ZVVSTChhdHRyVmFsdWUpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgd2hldGhlciB3ZSBoYXZlIGxvY2FsIGZpbGVzIGZv
ciB0aG9zZSBsaW5rLgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fbG9jYWxMaW5rcy5j
b250YWlucyhjb21wbGV0ZVVSTCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IW1fbG9jYWxEaXJlY3RvcnlOYW1lLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0ICs9ICIuLyIgKyBtX2xvY2FsRGlyZWN0b3J5TmFtZSArICIvIjsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gbV9sb2NhbExpbmtzLmdldChjb21w
bGV0ZVVSTCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXN1bHQgKz0gY29tcGxldGVVUkw7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAocGFy
YW0tPmlzSFRNTERvY3VtZW50KQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IG1f
aHRtbEVudGl0aWVzLmNvbnZlcnRFbnRpdGllc0luU3RyaW5nKGF0dHJWYWx1ZSk7Ci0gICAgICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBtX3ht
bEVudGl0aWVzLmNvbnZlcnRFbnRpdGllc0luU3RyaW5nKGF0dHJWYWx1ZSk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmVzdWx0ICs9ICJcIiI7Ci0gICAg
ICAgIH0KKyAgICBib29sIGlzQ2hhcnNldERlY2xhcmF0aW9uKEhUTUxNZXRhRWxlbWVudCogZWxl
bWVudCkKKyAgICB7CisgICAgICAgIEFTU0VSVChlbGVtZW50LT5oYXNUYWdOYW1lKG1ldGFUYWcp
KTsKKyAgICAgICAgU3RyaW5nIGVxdWl2ID0gZWxlbWVudC0+aHR0cEVxdWl2KCk7CisgICAgICAg
IFN0cmluZyBjb250ZW50ID0gZWxlbWVudC0+Y29udGVudCgpOworICAgICAgICAvLyBGSVhNRTog
V2hhdCBhYm91dCA8bWV0YSBjaGFyc2V0PSIuLi4iPiA/CisgICAgICAgIHJldHVybiBlcXVhbEln
bm9yaW5nQ2FzZShlcXVpdiwgImNvbnRlbnQtdHlwZSIpICYmIGNvbnRlbnQubGVuZ3RoKCkgJiYg
Y29udGVudC5jb250YWlucygiY2hhcnNldCIsIGZhbHNlKTsKICAgICB9CiAKLSAgICAvLyBEbyBw
b3N0IGFjdGlvbiBmb3Igb3BlbiB0YWcuCi0gICAgU3RyaW5nIGFkZGVkQ29udGVudHMgPSBwb3N0
QWN0aW9uQWZ0ZXJTZXJpYWxpemVPcGVuVGFnKGVsZW1lbnQsIHBhcmFtKTsKLSAgICAvLyBDb21w
bGV0ZSB0aGUgb3BlbiB0YWcgZm9yIGVsZW1lbnQgd2hlbiBpdCBoYXMgY2hpbGQvY2hpbGRyZW4u
Ci0gICAgaWYgKGVsZW1lbnQtPmhhc0NoaWxkTm9kZXMoKSB8fCBwYXJhbS0+aGF2ZUFkZGVkQ29u
dGVudHNCZWZvcmVFbmQpCi0gICAgICAgIHJlc3VsdCArPSAiPiI7Ci0gICAgLy8gQXBwZW5kIHRo
ZSBhZGRlZCBjb250ZW50cyBnZW5lcmF0ZSBpbiAgcG9zdCBhY3Rpb24gb2Ygb3BlbiB0YWcuCi0g
ICAgcmVzdWx0ICs9IGFkZGVkQ29udGVudHM7Ci0gICAgLy8gU2F2ZSB0aGUgcmVzdWx0IHRvIGRh
dGEgYnVmZmVyLgotICAgIHNhdmVIVE1MQ29udGVudFRvQnVmZmVyKHJlc3VsdCwgcGFyYW0pOwot
fQorICAgIHZvaWQgYXBwZW5kQmFzZUVsZW1lbnQoVmVjdG9yPFVDaGFyPiYgb3V0LCBIVE1MQmFz
ZUVsZW1lbnQqIGJhc2UsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCisgICAgeworICAgICAgICAv
LyBXZSB3YW50IHRvIHBpY2sgdXAgdGhlIHRhcmdldCBhdHRyaWJ1dGUgZnJvbSB0aGUgYmFzZSBl
bGVtZW50LCBidXQKKyAgICAgICAgLy8gd2UgZG9uJ3Qgd2FudCB0byBwaWNrIHVwIHRoZSBocmVm
IGF0dHJpYnV0ZS4KKyAgICAgICAgLy8gRklYTUU6IEN1cnJlbnRseSB3ZSdyZSB3aGl0ZWxpc3Rp
bmcgdGhlIHRhcmdldCBhdHRyaWJ1dGUsIGJ1dAorICAgICAgICAvLyAgICAgICAgcGVyaGFwcyB3
ZSBzaG91bGQgYmxhY2tsaXN0IHRoZSBocmVmIGF0dHJpYnV0ZT8KKyAgICAgICAgUmVmUHRyPEhU
TUxCYXNlRWxlbWVudD4gZmFrZUJhc2UgPSBIVE1MQmFzZUVsZW1lbnQ6OmNyZWF0ZShiYXNlVGFn
LCBiYXNlLT5kb2N1bWVudCgpKTsKKyAgICAgICAgZmFrZUJhc2UtPnNldEF0dHJpYnV0ZSh0YXJn
ZXRBdHRyLCBiYXNlLT5nZXRBdHRyaWJ1dGUodGFyZ2V0QXR0cikpOworICAgICAgICBNYXJrdXBB
Y2N1bXVsYXRvcjo6YXBwZW5kRWxlbWVudChvdXQsIGZha2VCYXNlLmdldCgpLCBuYW1lc3BhY2Vz
KTsKKyAgICB9CiAKLS8vIFNlcmlhbGl6ZSBlbmQgdGFnIG9mIGFuIHNwZWNpZmllZCBlbGVtZW50
Lgotdm9pZCBXZWJQYWdlU2VyaWFsaXplckltcGw6OmVuZFRhZ1RvU3RyaW5nKGNvbnN0IEVsZW1l
bnQqIGVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
U2VyaWFsaXplRG9tUGFyYW0qIHBhcmFtKQotewotICAgIGJvb2wgbmVlZFNraXA7Ci0gICAgLy8g
RG8gcHJlIGFjdGlvbiBmb3IgZW5kIHRhZy4KLSAgICBTdHJpbmcgcmVzdWx0ID0gcHJlQWN0aW9u
QmVmb3JlU2VyaWFsaXplRW5kVGFnKGVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkU2tpcCk7Ci0gICAgaWYgKG5lZWRTa2lw
KQotICAgICAgICByZXR1cm47Ci0gICAgLy8gV3JpdGUgZW5kIHRhZyB3aGVuIGVsZW1lbnQgaGFz
IGNoaWxkL2NoaWxkcmVuLgotICAgIGlmIChlbGVtZW50LT5oYXNDaGlsZE5vZGVzKCkgfHwgcGFy
YW0tPmhhdmVBZGRlZENvbnRlbnRzQmVmb3JlRW5kKSB7Ci0gICAgICAgIHJlc3VsdCArPSAiPC8i
OwotICAgICAgICByZXN1bHQgKz0gZWxlbWVudC0+bm9kZU5hbWUoKS5sb3dlcigpOwotICAgICAg
ICByZXN1bHQgKz0gIj4iOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIENoZWNrIHdoZXRoZXIg
d2UgaGF2ZSB0byB3cml0ZSBlbmQgdGFnIGZvciBlbXB0eSBlbGVtZW50LgotICAgICAgICBpZiAo
cGFyYW0tPmlzSFRNTERvY3VtZW50KSB7Ci0gICAgICAgICAgICByZXN1bHQgKz0gIj4iOwotICAg
ICAgICAgICAgLy8gRklYTUU6IFRoaXMgY29kZSBpcyBob3JyaWJseSB3cm9uZy4gIFdlYlBhZ2VT
ZXJpYWxpemVySW1wbCBtdXN0IGRpZS4KLSAgICAgICAgICAgIGlmICghc3RhdGljX2Nhc3Q8Y29u
c3QgSFRNTEVsZW1lbnQqPihlbGVtZW50KS0+aWVGb3JiaWRzSW5zZXJ0SFRNTCgpKSB7Ci0gICAg
ICAgICAgICAgICAgLy8gV2UgbmVlZCB0byB3cml0ZSBlbmQgdGFnIHdoZW4gaXQgaXMgcmVxdWly
ZWQuCi0gICAgICAgICAgICAgICAgcmVzdWx0ICs9ICI8LyI7Ci0gICAgICAgICAgICAgICAgcmVz
dWx0ICs9IGVsZW1lbnQtPm5vZGVOYW1lKCkubG93ZXIoKTsKLSAgICAgICAgICAgICAgICByZXN1
bHQgKz0gIj4iOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
Ly8gRm9yIHhtbCBiYXNlIGRvY3VtZW50LgotICAgICAgICAgICAgcmVzdWx0ICs9ICIgLz4iOwot
ICAgICAgICB9CisgICAgdm9pZCBhcHBlbmRNYXJrT2ZUaGVXZWIoVmVjdG9yPFVDaGFyPiYgb3V0
LCBjb25zdCBLVVJMJiB1cmwpCisgICAgeworICAgICAgICBBU1NFUlQoIW1faGF2ZUFkZGVkTWFy
a09mVGhlV2ViKTsKKyAgICAgICAgbV9oYXZlQWRkZWRNYXJrT2ZUaGVXZWIgPSB0cnVlOworICAg
ICAgICAvLyBTZWUgaHR0cDovL21zZG4yLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9tczUz
NzYyOChWUy44NSkuYXNweC4KKyAgICAgICAgU3RyaW5nIG1hcmtPZlRoZVdlYiA9IFdlYlBhZ2VT
ZXJpYWxpemVyOjpnZW5lcmF0ZU1hcmtPZlRoZVdlYkRlY2xhcmF0aW9uKHVybCk7CisgICAgICAg
IG91dC5hcHBlbmQobWFya09mVGhlV2ViLmNoYXJhY3RlcnMoKSwgbWFya09mVGhlV2ViLmxlbmd0
aCgpKTsKICAgICB9Ci0gICAgLy8gRG8gcG9zdCBhY3Rpb24gZm9yIGVuZCB0YWcuCi0gICAgcmVz
dWx0ICs9IHBvc3RBY3Rpb25BZnRlclNlcmlhbGl6ZUVuZFRhZyhlbGVtZW50LCBwYXJhbSk7Ci0g
ICAgLy8gU2F2ZSB0aGUgcmVzdWx0IHRvIGRhdGEgYnVmZmVyLgotICAgIHNhdmVIVE1MQ29udGVu
dFRvQnVmZmVyKHJlc3VsdCwgcGFyYW0pOwotfQogCi12b2lkIFdlYlBhZ2VTZXJpYWxpemVySW1w
bDo6YnVpbGRDb250ZW50Rm9yTm9kZShjb25zdCBOb2RlKiBub2RlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VyaWFsaXplRG9tUGFyYW0qIHBhcmFt
KQotewotICAgIHN3aXRjaCAobm9kZS0+bm9kZVR5cGUoKSkgewotICAgIGNhc2UgTm9kZTo6RUxF
TUVOVF9OT0RFOgotICAgICAgICAvLyBQcm9jZXNzIG9wZW4gdGFnIG9mIGVsZW1lbnQuCi0gICAg
ICAgIG9wZW5UYWdUb1N0cmluZyhzdGF0aWNfY2FzdDxjb25zdCBFbGVtZW50Kj4obm9kZSksIHBh
cmFtKTsKLSAgICAgICAgLy8gV2FsayB0aHJvdWdoIHRoZSBjaGlsZHJlbiBub2RlcyBhbmQgcHJv
Y2VzcyBpdC4KLSAgICAgICAgZm9yIChjb25zdCBOb2RlICpjaGlsZCA9IG5vZGUtPmZpcnN0Q2hp
bGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCi0gICAgICAgICAgICBi
dWlsZENvbnRlbnRGb3JOb2RlKGNoaWxkLCBwYXJhbSk7Ci0gICAgICAgIC8vIFByb2Nlc3MgZW5k
IHRhZyBvZiBlbGVtZW50LgotICAgICAgICBlbmRUYWdUb1N0cmluZyhzdGF0aWNfY2FzdDxjb25z
dCBFbGVtZW50Kj4obm9kZSksIHBhcmFtKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBOb2Rl
OjpURVhUX05PREU6Ci0gICAgICAgIHNhdmVIVE1MQ29udGVudFRvQnVmZmVyKGNyZWF0ZU1hcmt1
cChub2RlKSwgcGFyYW0pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE5vZGU6OkFUVFJJQlVU
RV9OT0RFOgotICAgIGNhc2UgTm9kZTo6RE9DVU1FTlRfTk9ERToKLSAgICBjYXNlIE5vZGU6OkRP
Q1VNRU5UX0ZSQUdNRU5UX05PREU6Ci0gICAgICAgIC8vIFNob3VsZCBub3QgZXhpc3QuCi0gICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVhazsKLSAgICAvLyBEb2N1bWVu
dCB0eXBlIG5vZGUgY2FuIGJlIGluIERPTT8KLSAgICBjYXNlIE5vZGU6OkRPQ1VNRU5UX1RZUEVf
Tk9ERToKLSAgICAgICAgcGFyYW0tPmhhdmVTZWVuRG9jVHlwZSA9IHRydWU7Ci0gICAgZGVmYXVs
dDoKLSAgICAgICAgLy8gRm9yIG90aGVyIHR5cGUgbm9kZSwgY2FsbCBkZWZhdWx0IGFjdGlvbi4K
LSAgICAgICAgc2F2ZUhUTUxDb250ZW50VG9CdWZmZXIoY3JlYXRlTWFya3VwKG5vZGUpLCBwYXJh
bSk7Ci0gICAgICAgIGJyZWFrOworICAgIHZvaWQgYXBwZW5kQ2hhcnNldERlY2xhcmF0aW9uKFZl
Y3RvcjxVQ2hhcj4mIG91dCwgSFRNTEhlYWRFbGVtZW50KiBoZWFkLCBOYW1lc3BhY2VzKiBuYW1l
c3BhY2VzKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX2hhdmVBZGRlZENoYXJzZXREZWNsYXJh
dGlvbik7CisgICAgICAgIG1faGF2ZUFkZGVkQ2hhcnNldERlY2xhcmF0aW9uID0gdHJ1ZTsKKyAg
ICAgICAgLy8gQ2hlY2sgbWV0YSBlbGVtZW50LiBXZWJLaXQgb25seSBwcmUtcGFyc2UgdGhlIGZp
cnN0IDUxMiBieXRlcworICAgICAgICAvLyBvZiB0aGUgZG9jdW1lbnQuIElmIHRoZSB3aG9sZSA8
SEVBRD4gaXMgbGFyZ2VyIGFuZCBtZXRhIGlzIHRoZQorICAgICAgICAvLyBlbmQgb2YgaGVhZCBw
YXJ0LCB0aGVuIHRoaXMga2luZCBvZiBwYWdlcyBhcmVuJ3QgZGVjb2RlZCBjb3JyZWN0bHkKKyAg
ICAgICAgLy8gYmVjYXVzZSBvZiB0aGlzIGlzc3VlLiBTbyB3aGVuIHdlIHNlcmlhbGl6ZSB0aGUg
RE9NLCB3ZSBuZWVkIHRvCisgICAgICAgIC8vIG1ha2Ugc3VyZSB0aGUgbWV0YSB3aWxsIGluIGZp
cnN0IGNoaWxkIG9mIGhlYWQgdGFnLgorICAgICAgICAvLyBTZWUgaHR0cDovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY2MjEuCisgICAgICAgIC8vIEZpcnN0IHdlIGdlbmVyYXRl
IG5ldyBjb250ZW50IGZvciB3cml0aW5nIGNvcnJlY3QgTUVUQSBlbGVtZW50LgorICAgICAgICBS
ZWZQdHI8SFRNTE1ldGFFbGVtZW50PiBmYWtlTWV0YSA9IEhUTUxNZXRhRWxlbWVudDo6Y3JlYXRl
KG1ldGFUYWcsIGhlYWQtPmRvY3VtZW50KCkpOworICAgICAgICBmYWtlTWV0YS0+c2V0QXR0cmli
dXRlKGh0dHBfZXF1aXZBdHRyLCAiQ29udGVudC1UeXBlIik7CisgICAgICAgIGZha2VNZXRhLT5z
ZXRBdHRyaWJ1dGUoY29udGVudEF0dHIsICJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiKTsKKyAg
ICAgICAgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVsZW1lbnQob3V0LCBmYWtlTWV0YS5nZXQo
KSwgbmFtZXNwYWNlcyk7CiAgICAgfQorCisgICAgVVJMUmV3cml0ZXIqIG1fdXJsUmV3cml0ZXI7
CisgICAgYm9vbCBtX2hhdmVBZGRlZE1hcmtPZlRoZVdlYjsKKyAgICBib29sIG1faGF2ZUFkZGVk
Q2hhcnNldERlY2xhcmF0aW9uOworfTsKKworLy8gTWF4aW11bSBsZW5ndGggb2YgZGF0YSBidWZm
ZXIgd2hpY2ggaXMgdXNlZCB0byB0ZW1wb3Jhcnkgc2F2ZSBnZW5lcmF0ZWQKKy8vIGh0bWwgY29u
dGVudCBkYXRhLiBUaGlzIGlzIGEgc29mdCBsaW1pdCB3aGljaCBtaWdodCBiZSBwYXNzZWQgaWYg
YSB2ZXJ5IGxhcmdlCisvLyBjb250ZWdpb3VzIHN0cmluZyBpcyBmb3VuZCBpbiB0aGUgcGFnZS4K
Ky8vIEZJWE1FOiBzdGF0aWMgY29uc3QgdW5zaWduZWQgZGF0YUJ1ZmZlckNhcGFjaXR5ID0gNjU1
MzY7CisKK3ZvaWQgV2ViUGFnZVNlcmlhbGl6ZXJJbXBsOjplbmNvZGVBbmRGbHVzaEJ1ZmZlcihX
ZWJQYWdlU2VyaWFsaXplckNsaWVudDo6UGFnZVNlcmlhbGl6YXRpb25TdGF0dXMgc3RhdHVzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdl
YlVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG1hcmt1cCwgRmx1c2hPcHRpb24gZmx1c2hPcHRpb24p
Cit7CisgICAgLy8gRGF0YSBidWZmZXIgaXMgbm90IGZ1bGwgbm9yIGRvIHdlIHdhbnQgdG8gZm9y
Y2UgZmx1c2guCisgICAgaWYgKGZsdXNoT3B0aW9uICE9IEZvcmNlRmx1c2gpCisgICAgICAgIHJl
dHVybjsKKyAgICBDU3RyaW5nIGVuY29kZWRNYXJrdXAgPSBVVEY4RW5jb2RpbmcoKS5lbmNvZGUo
bWFya3VwLmNoYXJhY3RlcnMoKSwgbWFya3VwLmxlbmd0aCgpLCBFbnRpdGllc0ZvclVuZW5jb2Rh
Ymxlcyk7CisgICAgbV9jbGllbnQtPmRpZFNlcmlhbGl6ZURhdGFGb3JGcmFtZSh1cmwsIFdlYkNT
dHJpbmcoZW5jb2RlZE1hcmt1cC5kYXRhKCksIGVuY29kZWRNYXJrdXAubGVuZ3RoKCkpLCBzdGF0
dXMpOwogfQogCiBXZWJQYWdlU2VyaWFsaXplckltcGw6OldlYlBhZ2VTZXJpYWxpemVySW1wbChX
ZWJGcmFtZSogZnJhbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIHJlY3Vyc2l2ZVNlcmlhbGl6YXRpb24sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIHJlY3Vyc2l2ZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYlBhZ2VTZXJpYWxpemVyQ2xpZW50KiBjbGll
bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBX
ZWJWZWN0b3I8V2ViVVJMPiYgbGlua3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYgbG9jYWxQYXRocywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlN0cmlu
ZyYgbG9jYWxEaXJlY3RvcnlOYW1lKQogICAgIDogbV9jbGllbnQoY2xpZW50KQotICAgICwgbV9y
ZWN1cnNpdmVTZXJpYWxpemF0aW9uKHJlY3Vyc2l2ZVNlcmlhbGl6YXRpb24pCi0gICAgLCBtX2Zy
YW1lc0NvbGxlY3RlZChmYWxzZSkKKyAgICAsIG1fd2ViRnJhbWUoc3RhdGljX2Nhc3Q8V2ViRnJh
bWVJbXBsKj4oZnJhbWUpKQorICAgICwgbV9yZWN1cnNpdmUocmVjdXJzaXZlKQogICAgICwgbV9s
b2NhbERpcmVjdG9yeU5hbWUobG9jYWxEaXJlY3RvcnlOYW1lKQotICAgICwgbV9odG1sRW50aXRp
ZXMoZmFsc2UpCi0gICAgLCBtX3htbEVudGl0aWVzKHRydWUpCiB7Ci0gICAgLy8gTXVzdCBzcGVj
aWZ5IGF2YWlsYWJsZSB3ZWJmcmFtZS4KLSAgICBBU1NFUlQoZnJhbWUpOwotICAgIG1fc3BlY2lm
aWVkV2ViRnJhbWVJbXBsID0gc3RhdGljX2Nhc3Q8V2ViRnJhbWVJbXBsKj4oZnJhbWUpOwotICAg
IC8vIE1ha2Ugc3VyZSB3ZSBoYXZlIG5vbiAwIGNsaWVudC4KICAgICBBU1NFUlQoY2xpZW50KTsK
LSAgICAvLyBCdWlsZCBsb2NhbCByZXNvdXJjZXMgbWFwLgogICAgIEFTU0VSVChsaW5rcy5zaXpl
KCkgPT0gbG9jYWxQYXRocy5zaXplKCkpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlu
a3Muc2l6ZSgpOyBpKyspIHsKKyAgICBBU1NFUlQoZnJhbWUpOworCisgICAgT3duUHRyPFVSTFJl
d3JpdGVyOjpVUkxNYXA+IG1hcCA9IGFkb3B0UHRyKG5ldyBVUkxSZXdyaXRlcjo6VVJMTWFwKTsK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpbmtzLnNpemUoKTsgKytpKSB7CiAgICAgICAg
IEtVUkwgdXJsID0gbGlua3NbaV07Ci0gICAgICAgIEFTU0VSVCghbV9sb2NhbExpbmtzLmNvbnRh
aW5zKHVybC5zdHJpbmcoKSkpOwotICAgICAgICBtX2xvY2FsTGlua3Muc2V0KHVybC5zdHJpbmco
KSwgbG9jYWxQYXRoc1tpXSk7CisgICAgICAgIEFTU0VSVCghbWFwLT5jb250YWlucyh1cmwuc3Ry
aW5nKCkpKTsKKyAgICAgICAgbWFwLT5zZXQodXJsLnN0cmluZygpLCBsb2NhbFBhdGhzW2ldKTsK
ICAgICB9CisgICAgbV91cmxSZXdyaXRlciA9IFVSTFJld3JpdGVyOjpjcmVhdGUobWFwLnJlbGVh
c2UoKSk7CiAKICAgICBBU1NFUlQobV9kYXRhQnVmZmVyLmlzRW1wdHkoKSk7CiB9CiAKLXZvaWQg
V2ViUGFnZVNlcmlhbGl6ZXJJbXBsOjpjb2xsZWN0VGFyZ2V0RnJhbWVzKCkKK1dlYlBhZ2VTZXJp
YWxpemVySW1wbDo6fldlYlBhZ2VTZXJpYWxpemVySW1wbCgpCit7Cit9CisKK3ZvaWQgV2ViUGFn
ZVNlcmlhbGl6ZXJJbXBsOjpjb2xsZWN0RnJhbWVzKCkKIHsKLSAgICBBU1NFUlQoIW1fZnJhbWVz
Q29sbGVjdGVkKTsKLSAgICBtX2ZyYW1lc0NvbGxlY3RlZCA9IHRydWU7Ci0KLSAgICAvLyBGaXJz
dCwgcHJvY2VzcyBtYWluIGZyYW1lLgotICAgIG1fZnJhbWVzLmFwcGVuZChtX3NwZWNpZmllZFdl
YkZyYW1lSW1wbCk7Ci0gICAgLy8gUmV0dXJuIG5vdyBpZiB1c2VyIG9ubHkgbmVlZHMgdG8gc2Vy
aWFsaXplIHNwZWNpZmllZCBmcmFtZSwgbm90IGluY2x1ZGluZwotICAgIC8vIGFsbCBzdWItZnJh
bWVzLgotICAgIGlmICghbV9yZWN1cnNpdmVTZXJpYWxpemF0aW9uKQorICAgIGlmICghbV9mcmFt
ZXMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47Ci0gICAgLy8gQ29sbGVjdCBhbGwgZnJhbWVz
IGluc2lkZSB0aGUgc3BlY2lmaWVkIGZyYW1lLgotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3Rh
dGljX2Nhc3Q8aW50PihtX2ZyYW1lcy5zaXplKCkpOyArK2kpIHsKLSAgICAgICAgV2ViRnJhbWVJ
bXBsKiBjdXJyZW50RnJhbWUgPSBtX2ZyYW1lc1tpXTsKLSAgICAgICAgLy8gR2V0IGN1cnJlbnQg
dXNpbmcgZG9jdW1lbnQuCi0gICAgICAgIERvY3VtZW50KiBjdXJyZW50RG9jID0gY3VycmVudEZy
YW1lLT5mcmFtZSgpLT5kb2N1bWVudCgpOwotICAgICAgICAvLyBHbyB0aHJvdWdoIHN1Yi1mcmFt
ZXMuCi0gICAgICAgIFJlZlB0cjxIVE1MQWxsQ29sbGVjdGlvbj4gYWxsID0gY3VycmVudERvYy0+
YWxsKCk7CisgICAgbV9mcmFtZXMuYXBwZW5kKG1fd2ViRnJhbWUpOworCisgICAgaWYgKCFtX3Jl
Y3Vyc2l2ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fZnJhbWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIFJlZlB0cjxIVE1MQWxsQ29sbGVjdGlv
bj4gYWxsID0gbV9mcmFtZXNbaV0tPmZyYW1lKCktPmRvY3VtZW50KCktPmFsbCgpOwogICAgICAg
ICBmb3IgKE5vZGUqIG5vZGUgPSBhbGwtPmZpcnN0SXRlbSgpOyBub2RlOyBub2RlID0gYWxsLT5u
ZXh0SXRlbSgpKSB7CiAgICAgICAgICAgICBpZiAoIW5vZGUtPmlzSFRNTEVsZW1lbnQoKSkKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBz
dGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSk7Ci0gICAgICAgICAgICBXZWJGcmFtZUltcGwqIHdl
YkZyYW1lID0KLSAgICAgICAgICAgICAgICBXZWJGcmFtZUltcGw6OmZyb21GcmFtZU93bmVyRWxl
bWVudChlbGVtZW50KTsKLSAgICAgICAgICAgIGlmICh3ZWJGcmFtZSkKLSAgICAgICAgICAgICAg
ICBtX2ZyYW1lcy5hcHBlbmQod2ViRnJhbWUpOworICAgICAgICAgICAgV2ViRnJhbWVJbXBsKiB3
ZWJGcmFtZSA9IFdlYkZyYW1lSW1wbDo6ZnJvbUZyYW1lT3duZXJFbGVtZW50KHN0YXRpY19jYXN0
PEhUTUxFbGVtZW50Kj4obm9kZSkpOworICAgICAgICAgICAgaWYgKCF3ZWJGcmFtZSkKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIG1fZnJhbWVzLmFwcGVuZCh3ZWJGcmFt
ZSk7CiAgICAgICAgIH0KICAgICB9CiB9CiAKIGJvb2wgV2ViUGFnZVNlcmlhbGl6ZXJJbXBsOjpz
ZXJpYWxpemUoKQogewotICAgIGlmICghbV9mcmFtZXNDb2xsZWN0ZWQpCi0gICAgICAgIGNvbGxl
Y3RUYXJnZXRGcmFtZXMoKTsKKyAgICBjb2xsZWN0RnJhbWVzKCk7CiAKICAgICBib29sIGRpZFNl
cmlhbGl6YXRpb24gPSBmYWxzZTsKLSAgICBLVVJMIG1haW5VUkwgPSBtX3NwZWNpZmllZFdlYkZy
YW1lSW1wbC0+ZnJhbWUoKS0+ZG9jdW1lbnQoKS0+dXJsKCk7CisgICAgS1VSTCBtYWluVVJMID0g
bV93ZWJGcmFtZS0+ZnJhbWUoKS0+ZG9jdW1lbnQoKS0+dXJsKCk7CiAKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9mcmFtZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgV2ViRnJhbWVJ
bXBsKiB3ZWJGcmFtZSA9IG1fZnJhbWVzW2ldOwogICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQg
PSB3ZWJGcmFtZS0+ZnJhbWUoKS0+ZG9jdW1lbnQoKTsKICAgICAgICAgY29uc3QgS1VSTCYgdXJs
ID0gZG9jdW1lbnQtPnVybCgpOwogCi0gICAgICAgIGlmICghdXJsLmlzVmFsaWQoKSB8fCAhbV9s
b2NhbExpbmtzLmNvbnRhaW5zKHVybC5zdHJpbmcoKSkpCisgICAgICAgIGlmICghdXJsLmlzVmFs
aWQoKSB8fCAhbV91cmxSZXdyaXRlci0+Y29udGFpbnModXJsLnN0cmluZygpKSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogCiAgICAgICAgIGRpZFNlcmlhbGl6YXRpb24gPSB0cnVlOwogCi0gICAg
ICAgIFN0cmluZyBlbmNvZGluZyA9IHdlYkZyYW1lLT5mcmFtZSgpLT5sb2FkZXIoKS0+d3JpdGVy
KCktPmVuY29kaW5nKCk7Ci0gICAgICAgIGNvbnN0IFRleHRFbmNvZGluZyYgdGV4dEVuY29kaW5n
ID0gZW5jb2RpbmcuaXNFbXB0eSgpID8gVVRGOEVuY29kaW5nKCkgOiBUZXh0RW5jb2RpbmcoZW5j
b2RpbmcpOwotICAgICAgICBTdHJpbmcgZGlyZWN0b3J5TmFtZSA9IHVybCA9PSBtYWluVVJMID8g
bV9sb2NhbERpcmVjdG9yeU5hbWUgOiAiIjsKLQotICAgICAgICBTZXJpYWxpemVEb21QYXJhbSBw
YXJhbSh1cmwsIHRleHRFbmNvZGluZywgZG9jdW1lbnQsIGRpcmVjdG9yeU5hbWUpOwotCi0gICAg
ICAgIEVsZW1lbnQqIGRvY3VtZW50RWxlbWVudCA9IGRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQo
KTsKLSAgICAgICAgaWYgKGRvY3VtZW50RWxlbWVudCkKLSAgICAgICAgICAgIGJ1aWxkQ29udGVu
dEZvck5vZGUoZG9jdW1lbnRFbGVtZW50LCAmcGFyYW0pOworICAgICAgICBtX3VybFJld3JpdGVy
LT5zZXRQcmVmaXgodXJsID09IG1haW5VUkwgPyAiLi8iICsgbV9sb2NhbERpcmVjdG9yeU5hbWUg
KyAiLyIgOiBTdHJpbmcoKSk7CisgICAgICAgIExvY2FsaXplZE1hcmt1cEFjY3VtdWxhdG9yIGFj
Y3VtdWxhdG9yKG1fdXJsUmV3cml0ZXIuZ2V0KCkpOworICAgICAgICBTdHJpbmcgbWFya3VwID0g
YWNjdW11bGF0b3Iuc2VyaWFsaXplTm9kZXMoZG9jdW1lbnQsIDAsIENoaWxkcmVuT25seSk7CiAK
LSAgICAgICAgZW5jb2RlQW5kRmx1c2hCdWZmZXIoV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQ6OkN1
cnJlbnRGcmFtZUlzRmluaXNoZWQsICZwYXJhbSwgRm9yY2VGbHVzaCk7CisgICAgICAgIGVuY29k
ZUFuZEZsdXNoQnVmZmVyKFdlYlBhZ2VTZXJpYWxpemVyQ2xpZW50OjpDdXJyZW50RnJhbWVJc0Zp
bmlzaGVkLCB1cmwsIG1hcmt1cCwgRm9yY2VGbHVzaCk7CiAgICAgfQogCiAgICAgQVNTRVJUKG1f
ZGF0YUJ1ZmZlci5pc0VtcHR5KCkpOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJQYWdlU2VyaWFsaXplckltcGwuaCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGFnZVNlcmlh
bGl6ZXJJbXBsLmgKaW5kZXggNWVlODgwNTM2Mjk4YjExMzFjNmRhN2QyMjc5YjUxZGUxZTVhNjA2
NC4uYTZmMDNiNmVmNjEzNzIzNTFkYmQ3MDRlNWUwMTEyZjdjYzYxYmNiMCAxMDA2NDQKLS0tIGEv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQYWdlU2VyaWFsaXplckltcGwuaAorKysgYi9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYlBhZ2VTZXJpYWxpemVySW1wbC5oCkBAIC0zOCw3ICszOCw2IEBACiAj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgogCi0jaW5jbHVkZSAiV2ViRW50aXRpZXMuaCIKICNpbmNsdWRlICJXZWJQYWdlU2Vy
aWFsaXplci5oIgogI2luY2x1ZGUgIldlYlBhZ2VTZXJpYWxpemVyQ2xpZW50LmgiCiAjaW5jbHVk
ZSAiV2ViU3RyaW5nLmgiCkBAIC01Miw3ICs1MSw5IEBAIGNsYXNzIFRleHRFbmNvZGluZzsKIH0K
IAogbmFtZXNwYWNlIFdlYktpdCB7CisKIGNsYXNzIFdlYkZyYW1lSW1wbDsKK2NsYXNzIFVSTFJl
d3JpdGVyOwogCiAvLyBHZXQgaHRtbCBkYXRhIGJ5IHNlcmlhbGl6aW5nIGFsbCBmcmFtZXMgb2Yg
Y3VycmVudCBwYWdlIHdpdGggbGlzdHMKIC8vIHdoaWNoIGNvbnRhaW4gYWxsIHJlc291cmNlIGxp
bmtzIHRoYXQgaGF2ZSBsb2NhbCBjb3B5LgpAQCAtODUsODIgKzg2LDEwIEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViVmVjdG9yPFdlYlVSTD4mIGxpbmtzLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYgbG9j
YWxQYXRocywKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViU3RyaW5nJiBsb2Nh
bERpcmVjdG9yeU5hbWUpOworICAgIH5XZWJQYWdlU2VyaWFsaXplckltcGwoKTsKIAogcHJpdmF0
ZToKLSAgICAvLyBTcGVjaWZpZWQgZnJhbWUgd2hpY2ggbmVlZCB0byBiZSBzZXJpYWxpemVkOwot
ICAgIFdlYkZyYW1lSW1wbCogbV9zcGVjaWZpZWRXZWJGcmFtZUltcGw7Ci0gICAgLy8gUG9pbnRl
ciBvZiBXZWJQYWdlU2VyaWFsaXplckNsaWVudAotICAgIFdlYlBhZ2VTZXJpYWxpemVyQ2xpZW50
KiBtX2NsaWVudDsKLSAgICAvLyBUaGlzIGhhc2ggbWFwIGlzIHVzZWQgdG8gbWFwIHJlc291cmNl
IFVSTCBvZiBvcmlnaW5hbCBsaW5rIHRvIGl0cyBsb2NhbAotICAgIC8vIGZpbGUgcGF0aC4KLSAg
ICB0eXBlZGVmIEhhc2hNYXA8V1RGOjpTdHJpbmcsIFdURjo6U3RyaW5nPiBMaW5rTG9jYWxQYXRo
TWFwOwotICAgIC8vIGxvY2FsX2xpbmtzXyBpbmNsdWRlIGFsbCBwYWlyIG9mIGxvY2FsIHJlc291
cmNlIHBhdGggYW5kIGNvcnJlc3BvbmRpbmcKLSAgICAvLyBvcmlnaW5hbCBsaW5rLgotICAgIExp
bmtMb2NhbFBhdGhNYXAgbV9sb2NhbExpbmtzOwotICAgIC8vIERhdGEgYnVmZmVyIGZvciBzYXZp
bmcgcmVzdWx0IG9mIHNlcmlhbGl6ZWQgRE9NIGRhdGEuCi0gICAgU3RyaW5nQnVpbGRlciBtX2Rh
dGFCdWZmZXI7Ci0gICAgLy8gUGFzc2luZyB0cnVlIHRvIHJlY3Vyc2l2ZV9zZXJpYWxpemF0aW9u
XyBpbmRpY2F0ZXMgd2Ugd2lsbCBzZXJpYWxpemUgbm90Ci0gICAgLy8gb25seSB0aGUgc3BlY2lm
aWVkIGZyYW1lIGJ1dCBhbHNvIGFsbCBzdWItZnJhbWVzIGluIHRoZSBzcGVjaWZpYyBmcmFtZS4K
LSAgICAvLyBPdGhlcndpc2Ugd2Ugb25seSBzZXJpYWxpemUgdGhlIHNwZWNpZmllZCBmcmFtZSBl
eGNsdWRlZCBhbGwgc3ViLWZyYW1lcy4KLSAgICBib29sIG1fcmVjdXJzaXZlU2VyaWFsaXphdGlv
bjsKLSAgICAvLyBGbGFnIGluZGljYXRlcyB3aGV0aGVyIHdlIGhhdmUgY29sbGVjdGVkIGFsbCBm
cmFtZXMgd2hpY2ggbmVlZCB0byBiZQotICAgIC8vIHNlcmlhbGl6ZWQgb3Igbm90OwotICAgIGJv
b2wgbV9mcmFtZXNDb2xsZWN0ZWQ7Ci0gICAgLy8gTG9jYWwgZGlyZWN0b3J5IG5hbWUgb2YgYWxs
IGxvY2FsIHJlc291cmNlIGZpbGVzLgotICAgIFdURjo6U3RyaW5nIG1fbG9jYWxEaXJlY3RvcnlO
YW1lOwotICAgIC8vIFZlY3RvciBmb3Igc2F2aW5nIGFsbCBmcmFtZXMgd2hpY2ggbmVlZCB0byBi
ZSBzZXJpYWxpemVkLgotICAgIFZlY3RvcjxXZWJGcmFtZUltcGwqPiBtX2ZyYW1lczsKLQotICAg
IC8vIFdlYiBlbnRpdGllcyBjb252ZXJzaW9uIG1hcHMuCi0gICAgV2ViRW50aXRpZXMgbV9odG1s
RW50aXRpZXM7Ci0gICAgV2ViRW50aXRpZXMgbV94bWxFbnRpdGllczsKLQotICAgIHN0cnVjdCBT
ZXJpYWxpemVEb21QYXJhbSB7Ci0gICAgICAgIGNvbnN0IFdlYkNvcmU6OktVUkwmIHVybDsKLSAg
ICAgICAgY29uc3QgV2ViQ29yZTo6VGV4dEVuY29kaW5nJiB0ZXh0RW5jb2Rpbmc7Ci0gICAgICAg
IFdlYkNvcmU6OkRvY3VtZW50KiBkb2N1bWVudDsKLSAgICAgICAgY29uc3QgV1RGOjpTdHJpbmcm
IGRpcmVjdG9yeU5hbWU7Ci0gICAgICAgIGJvb2wgaXNIVE1MRG9jdW1lbnQ7IC8vIGRvY3VtZW50
LmlzSFRNTERvY3VtZW50KCkKLSAgICAgICAgYm9vbCBoYXZlU2VlbkRvY1R5cGU7Ci0gICAgICAg
IGJvb2wgaGF2ZUFkZGVkQ2hhcnNldERlY2xhcmF0aW9uOwotICAgICAgICAvLyBUaGlzIG1ldGEg
ZWxlbWVudCBuZWVkIHRvIGJlIHNraXBwZWQgd2hlbiBzZXJpYWxpemluZyBET00uCi0gICAgICAg
IGNvbnN0IFdlYkNvcmU6OkVsZW1lbnQqIHNraXBNZXRhRWxlbWVudDsKLSAgICAgICAgLy8gRmxh
ZyBpbmRpY2F0ZXMgd2UgYXJlIGluIHNjcmlwdCBvciBzdHlsZSB0YWcuCi0gICAgICAgIGJvb2wg
aXNJblNjcmlwdE9yU3R5bGVUYWc7Ci0gICAgICAgIGJvb2wgaGF2ZUFkZGVkWE1MUHJvY2Vzc2lu
Z0RpcmVjdGl2ZTsKLSAgICAgICAgLy8gRmxhZyBpbmRpY2F0ZXMgd2hldGhlciB3ZSBoYXZlIGFk
ZGVkIGFkZGl0aW9uYWwgY29udGVudHMgYmVmb3JlIGVuZCB0YWcuCi0gICAgICAgIC8vIFRoaXMg
ZmxhZyB3aWxsIGJlIHJlLWFzc2lnbmVkIGluIGVhY2ggY2FsbCBvZiBmdW5jdGlvbgotICAgICAg
ICAvLyBQb3N0QWN0aW9uQWZ0ZXJTZXJpYWxpemVPcGVuVGFnIGFuZCBpdCBjb3VsZCBiZSBjaGFu
Z2VkIGluIGZ1bmN0aW9uCi0gICAgICAgIC8vIFByZUFjdGlvbkJlZm9yZVNlcmlhbGl6ZUVuZFRh
ZyBpZiB0aGUgZnVuY3Rpb24gYWRkcyBuZXcgY29udGVudHMgaW50bwotICAgICAgICAvLyBzZXJp
YWxpemF0aW9uIHN0cmVhbS4KLSAgICAgICAgYm9vbCBoYXZlQWRkZWRDb250ZW50c0JlZm9yZUVu
ZDsKLQotICAgICAgICBTZXJpYWxpemVEb21QYXJhbShjb25zdCBXZWJDb3JlOjpLVVJMJiwgY29u
c3QgV2ViQ29yZTo6VGV4dEVuY29kaW5nJiwgV2ViQ29yZTo6RG9jdW1lbnQqLCBjb25zdCBXVEY6
OlN0cmluZyYgZGlyZWN0b3J5TmFtZSk7Ci0gICAgfTsKLQotICAgIC8vIENvbGxlY3QgYWxsIHRh
cmdldCBmcmFtZXMgd2hpY2ggbmVlZCB0byBiZSBzZXJpYWxpemVkLgotICAgIHZvaWQgY29sbGVj
dFRhcmdldEZyYW1lcygpOwotICAgIC8vIEJlZm9yZSB3ZSBiZWdpbiBzZXJpYWxpemluZyBvcGVu
IHRhZyBvZiBhIGVsZW1lbnQsIHdlIGdpdmUgdGhlIHRhcmdldAotICAgIC8vIGVsZW1lbnQgYSBj
aGFuY2UgdG8gZG8gc29tZSB3b3JrIHByaW9yIHRvIGFkZCBzb21lIGFkZGl0aW9uYWwgZGF0YS4K
LSAgICBXVEY6OlN0cmluZyBwcmVBY3Rpb25CZWZvcmVTZXJpYWxpemVPcGVuVGFnKGNvbnN0IFdl
YkNvcmU6OkVsZW1lbnQqIGVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgU2VyaWFsaXplRG9tUGFyYW0qIHBhcmFtLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wqIG5lZWRTa2lw
KTsKLSAgICAvLyBBZnRlciB3ZSBmaW5pc2ggc2VyaWFsaXppbmcgb3BlbiB0YWcgb2YgYSBlbGVt
ZW50LCB3ZSBnaXZlIHRoZSB0YXJnZXQKLSAgICAvLyBlbGVtZW50IGEgY2hhbmNlIHRvIGRvIHNv
bWUgcG9zdCB3b3JrIHRvIGFkZCBzb21lIGFkZGl0aW9uYWwgZGF0YS4KLSAgICBXVEY6OlN0cmlu
ZyBwb3N0QWN0aW9uQWZ0ZXJTZXJpYWxpemVPcGVuVGFnKGNvbnN0IFdlYkNvcmU6OkVsZW1lbnQq
IGVsZW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgU2VyaWFsaXplRG9tUGFyYW0qIHBhcmFtKTsKLSAgICAvLyBCZWZvcmUgd2UgYmVnaW4g
c2VyaWFsaXppbmcgZW5kIHRhZyBvZiBhIGVsZW1lbnQsIHdlIGdpdmUgdGhlIHRhcmdldAotICAg
IC8vIGVsZW1lbnQgYSBjaGFuY2UgdG8gZG8gc29tZSB3b3JrIHByaW9yIHRvIGFkZCBzb21lIGFk
ZGl0aW9uYWwgZGF0YS4KLSAgICBXVEY6OlN0cmluZyBwcmVBY3Rpb25CZWZvcmVTZXJpYWxpemVF
bmRUYWcoY29uc3QgV2ViQ29yZTo6RWxlbWVudCogZWxlbWVudCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlcmlhbGl6ZURvbVBhcmFtKiBwYXJh
bSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wqIG5lZWRTa2lwKTsKLSAgICAvLyBBZnRlciB3ZSBmaW5pc2ggc2VyaWFsaXppbmcgZW5kIHRh
ZyBvZiBhIGVsZW1lbnQsIHdlIGdpdmUgdGhlIHRhcmdldAotICAgIC8vIGVsZW1lbnQgYSBjaGFu
Y2UgdG8gZG8gc29tZSBwb3N0IHdvcmsgdG8gYWRkIHNvbWUgYWRkaXRpb25hbCBkYXRhLgotICAg
IFdURjo6U3RyaW5nIHBvc3RBY3Rpb25BZnRlclNlcmlhbGl6ZUVuZFRhZyhjb25zdCBXZWJDb3Jl
OjpFbGVtZW50KiBlbGVtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgU2VyaWFsaXplRG9tUGFyYW0qIHBhcmFtKTsKLSAgICAvLyBTYXZlIGdl
bmVyYXRlZCBodG1sIGNvbnRlbnQgdG8gZGF0YSBidWZmZXIuCi0gICAgdm9pZCBzYXZlSFRNTENv
bnRlbnRUb0J1ZmZlcihjb25zdCBXVEY6OlN0cmluZyYgY29udGVudCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFNlcmlhbGl6ZURvbVBhcmFtKiBwYXJhbSk7CisgICAgdm9pZCBj
b2xsZWN0RnJhbWVzKCk7CiAKICAgICBlbnVtIEZsdXNoT3B0aW9uIHsKICAgICAgICAgRm9yY2VG
bHVzaCwKQEAgLTE3MSwxNyArMTAwLDE2IEBAIHByaXZhdGU6CiAgICAgLy8gV2ViUGFnZVNlcmlh
bGl6ZXJDbGllbnQuIENvbnRlbnQgaXMgbm90IGZsdXNoZWQgaWYgdGhlIGJ1ZmZlciBpcyBub3Qg
ZnVsbAogICAgIC8vIHVubGVzcyBmb3JjZSBpcyAxLgogICAgIHZvaWQgZW5jb2RlQW5kRmx1c2hC
dWZmZXIoV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQ6OlBhZ2VTZXJpYWxpemF0aW9uU3RhdHVzIHN0
YXR1cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlcmlhbGl6ZURvbVBhcmFtKiBw
YXJhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsdXNoT3B0aW9uKTsKLSAgICAv
LyBTZXJpYWxpemUgb3BlbiB0YWcgb2YgYW4gc3BlY2lmaWVkIGVsZW1lbnQuCi0gICAgdm9pZCBv
cGVuVGFnVG9TdHJpbmcoY29uc3QgV2ViQ29yZTo6RWxlbWVudCogZWxlbWVudCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICBTZXJpYWxpemVEb21QYXJhbSogcGFyYW0pOwotICAgIC8vIFNlcmlh
bGl6ZSBlbmQgdGFnIG9mIGFuIHNwZWNpZmllZCBlbGVtZW50LgotICAgIHZvaWQgZW5kVGFnVG9T
dHJpbmcoY29uc3QgV2ViQ29yZTo6RWxlbWVudCogZWxlbWVudCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgIFNlcmlhbGl6ZURvbVBhcmFtKiBwYXJhbSk7Ci0gICAgLy8gQnVpbGQgY29udGVudCBm
b3IgYSBzcGVjaWZpZWQgbm9kZQotICAgIHZvaWQgYnVpbGRDb250ZW50Rm9yTm9kZShjb25zdCBX
ZWJDb3JlOjpOb2RlKiBub2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXJpYWxp
emVEb21QYXJhbSogcGFyYW0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
V2ViVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbWFya3VwLCBGbHVzaE9wdGlvbik7CisKKyAgICBX
ZWJQYWdlU2VyaWFsaXplckNsaWVudCogbV9jbGllbnQ7CisgICAgV2ViRnJhbWVJbXBsKiBtX3dl
YkZyYW1lOworICAgIGJvb2wgbV9yZWN1cnNpdmU7CisgICAgVmVjdG9yPFdlYkZyYW1lSW1wbCo+
IG1fZnJhbWVzOworICAgIE93blB0cjxVUkxSZXdyaXRlcj4gbV91cmxSZXdyaXRlcjsKKworICAg
IFN0cmluZ0J1aWxkZXIgbV9kYXRhQnVmZmVyOworICAgIFdURjo6U3RyaW5nIG1fbG9jYWxEaXJl
Y3RvcnlOYW1lOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cg==
</data>
<flag name="review"
          id="61048"
          type_id="1"
          status="-"
          setter="abarth"
    />
    <flag name="commit-queue"
          id="61049"
          type_id="3"
          status="-"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>