<?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>46559</bug_id>
          
          <creation_ts>2010-09-25 00:59:44 -0700</creation_ts>
          <short_desc>[chromium] Refactor ChromiumDataObject to use getters/setters.</short_desc>
          <delta_ts>2010-09-30 11:21:02 -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>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Daniel Cheng">dcheng</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>284968</commentid>
    <comment_count>0</comment_count>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2010-09-25 00:59:44 -0700</bug_when>
    <thetext>This is an intermediate step to converting ChromiumDataObject to use callbacks to the browser to retrieve data. Special handling for URL and text/uri-list has also been removed; they now treat their data argument as just an opaque blob of text.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>284972</commentid>
    <comment_count>1</comment_count>
      <attachid>68817</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2010-09-25 01:31:22 -0700</bug_when>
    <thetext>Created attachment 68817
Patch

Marking as R? so EWS runs this patch. I am not sure if removing special URL handling will require updating other platforms; if it does, I will split out removing special URL handling into a separate patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285566</commentid>
    <comment_count>2</comment_count>
      <attachid>68817</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-09-27 10:48:50 -0700</bug_when>
    <thetext>Comment on attachment 68817
Patch

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

&gt; LayoutTests/ChangeLog:14
&gt; +        * editing/pasteboard/dataTransfer-setData-getData-expected.txt:
&gt; +        * editing/pasteboard/script-tests/dataTransfer-setData-getData.js:

Can you explain what you changed in the test?

&gt; LayoutTests/editing/pasteboard/script-tests/dataTransfer-setData-getData.js:93
&gt; -    test(&quot;text/uri-list&quot;, [&quot;http://test.com&quot;, &quot;http://check.com&quot;], 
&gt; -         &quot;text/uri-list&quot;, [&quot;http://test.com&quot;, &quot;http://check.com&quot;]);
&gt; +    test(&quot;text/uri-list&quot;, &quot;http://test.com&quot;, 
&gt; +         &quot;text/uri-list&quot;, &quot;http://test.com&quot;);

Why were the tests that take a list of URLs removed?  Shouldn&apos;t we still verify that \r\n or comments gets passed through properly?

&gt; LayoutTests/editing/pasteboard/script-tests/dataTransfer-setData-getData.js:97
&gt; -    test(&quot;text/uri-list&quot;, [&quot;http://test.com&quot;, &quot;http://check.com&quot;], 
&gt; -         &quot;URL&quot;, [&quot;http://test.com&quot;]);
&gt; +    test(&quot;text/uri-list&quot;, &quot;http://test.com&quot;, 
&gt; +         &quot;URL&quot;, &quot;http://test.com&quot;);

This seems like an important test to keep too (setting more than one urls and getting one back).

&gt; WebCore/platform/chromium/ChromiumDataObject.cpp:108
&gt; +    if (!m_url.isEmpty()) {
&gt; +        results.add(&quot;URL&quot;);
&gt; +        results.add(&quot;text/uri-list&quot;);
&gt; +    }

The previous code in ClipboardChromium::types() filtered out file URLs.  Why doesn&apos;t that happen in the new code?

&gt; WebCore/platform/chromium/ChromiumDataObject.cpp:121
&gt; +    if (type == &quot;text/plain&quot;) {

The various types should be constants somewhere.

&gt; WebCore/platform/chromium/ChromiumDataObject.h:50
&gt; -        static PassRefPtr&lt;ChromiumDataObject&gt; create()
&gt; +      static PassRefPtr&lt;ChromiumDataObject&gt; create(Clipboard::ClipboardType clipboardType)

Nit: Indention looks wrong.

&gt; WebCore/platform/chromium/ClipboardChromium.cpp:60
&gt; -    // Includes two special cases for IE compatibility.
&gt; -    if (cleanType == &quot;text&quot; || cleanType == &quot;text/plain&quot; || cleanType.startsWith(&quot;text/plain;&quot;))
&gt; -        return ClipboardDataTypePlainText;
&gt; +    if (cleanType == &quot;text&quot;)
&gt; +        return &quot;text/plain&quot;;

We seemed to have lost the &quot;text/plain;&quot; case.  Is that intentional?  Should we have a test that checks for this?

&gt; WebCore/platform/chromium/ClipboardChromium.cpp:111
&gt; +    return m_dataObject-&gt;getData(normalizeType(type), success);

I thought getData(&quot;URL&quot;) is supposed to only return the first URL in uri-list.  It looks like normalizing causes us to lose that distinction.

&gt; WebKit/chromium/src/WebDragData.cpp:118
&gt;  bool WebDragData::hasFileNames() const
&gt;  {

Nit: We should probably try to rename this method (in a different set of changes) to containsFilenames since it seems like &apos;contains&apos; is used more than &apos;has&apos;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285568</commentid>
    <comment_count>3</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-09-27 10:50:05 -0700</bug_when>
    <thetext>Thanks for doing this refactoring into a class.  I like the direction this is going, but there seems to be some behavioral changes included.  I think it&apos;s fine to change the underlying data representation for URLs and uri-lists to Strings, but some of the changes seem to do more than just that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285891</commentid>
    <comment_count>4</comment_count>
      <attachid>68990</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2010-09-27 16:47:37 -0700</bug_when>
    <thetext>Created attachment 68990
Patch

(In reply to comment #2)
&gt; (From update of attachment 68817 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=68817&amp;action=review
&gt; 
&gt; &gt; LayoutTests/ChangeLog:14
&gt; &gt; +        * editing/pasteboard/dataTransfer-setData-getData-expected.txt:
&gt; &gt; +        * editing/pasteboard/script-tests/dataTransfer-setData-getData.js:
&gt; 
&gt; Can you explain what you changed in the test?
&gt; 

Done.

&gt; &gt; LayoutTests/editing/pasteboard/script-tests/dataTransfer-setData-getData.js:93
&gt; &gt; -    test(&quot;text/uri-list&quot;, [&quot;http://test.com&quot;, &quot;http://check.com&quot;], 
&gt; &gt; -         &quot;text/uri-list&quot;, [&quot;http://test.com&quot;, &quot;http://check.com&quot;]);
&gt; &gt; +    test(&quot;text/uri-list&quot;, &quot;http://test.com&quot;, 
&gt; &gt; +         &quot;text/uri-list&quot;, &quot;http://test.com&quot;);
&gt; 
&gt; Why were the tests that take a list of URLs removed?  Shouldn&apos;t we still verify that \r\n or comments gets passed through properly?

This was part of the change--removing special handling for any data handled by dataTransfer. Since we plan on adding more data types in the future, some of which can be arbitrarily user-defined, I&apos;m uncomfortable with the idea that we&apos;re validating some types and potentially setting different data than what the user passed in and not validating other types. The various ports vary in how they implement this feature as well:

GTK: I might be reading it incorrectly, but it seems to me that setting URL or text/uri-list only manipulate the uri-list component. If you call setData(&quot;text/uri-list&quot;) and then call getData(&quot;URL&quot;), there will be no data returned.
Mac: Will only return one URL for URL and possibly multiple URLs for text/uri-list. There is no special handling in setData() for splitting a text/uri-list into its component URLs.
QT: Does not appear to handle text/uri-list or URL specially in any way.
Windows: Handles text/uri-list and URL identically.

I am OK with reverting this behavior, but it seems far simpler to just not validate--and easier to make it consistent among the various ports as well.

&gt; 
&gt; &gt; LayoutTests/editing/pasteboard/script-tests/dataTransfer-setData-getData.js:97
&gt; &gt; -    test(&quot;text/uri-list&quot;, [&quot;http://test.com&quot;, &quot;http://check.com&quot;], 
&gt; &gt; -         &quot;URL&quot;, [&quot;http://test.com&quot;]);
&gt; &gt; +    test(&quot;text/uri-list&quot;, &quot;http://test.com&quot;, 
&gt; &gt; +         &quot;URL&quot;, &quot;http://test.com&quot;);
&gt; 
&gt; This seems like an important test to keep too (setting more than one urls and getting one back).

See above.

&gt; 
&gt; &gt; WebCore/platform/chromium/ChromiumDataObject.cpp:108
&gt; &gt; +    if (!m_url.isEmpty()) {
&gt; &gt; +        results.add(&quot;URL&quot;);
&gt; &gt; +        results.add(&quot;text/uri-list&quot;);
&gt; &gt; +    }
&gt; 
&gt; The previous code in ClipboardChromium::types() filtered out file URLs.  Why doesn&apos;t that happen in the new code?
&gt; 

This actually hasn&apos;t been necessary for a long time. I made another change in Chromium/WebKit that made the original hack unnecessary.

&gt; &gt; WebCore/platform/chromium/ChromiumDataObject.cpp:121
&gt; &gt; +    if (type == &quot;text/plain&quot;) {
&gt; 
&gt; The various types should be constants somewhere.

Any suggestions on an appropriate location?

&gt; 
&gt; &gt; WebCore/platform/chromium/ChromiumDataObject.h:50
&gt; &gt; -        static PassRefPtr&lt;ChromiumDataObject&gt; create()
&gt; &gt; +      static PassRefPtr&lt;ChromiumDataObject&gt; create(Clipboard::ClipboardType clipboardType)
&gt; 
&gt; Nit: Indention looks wrong.

Done. I wonder why the style checker didn&apos;t catch this.

&gt; 
&gt; &gt; WebCore/platform/chromium/ClipboardChromium.cpp:60
&gt; &gt; -    // Includes two special cases for IE compatibility.
&gt; &gt; -    if (cleanType == &quot;text&quot; || cleanType == &quot;text/plain&quot; || cleanType.startsWith(&quot;text/plain;&quot;))
&gt; &gt; -        return ClipboardDataTypePlainText;
&gt; &gt; +    if (cleanType == &quot;text&quot;)
&gt; &gt; +        return &quot;text/plain&quot;;
&gt; 
&gt; We seemed to have lost the &quot;text/plain;&quot; case.  Is that intentional?  Should we have a test that checks for this?
&gt; 

It was an unintentional change. I added it back in, though I&apos;m not entirely sure why we do this to begin with.

&gt; &gt; WebCore/platform/chromium/ClipboardChromium.cpp:111
&gt; &gt; +    return m_dataObject-&gt;getData(normalizeType(type), success);
&gt; 
&gt; I thought getData(&quot;URL&quot;) is supposed to only return the first URL in uri-list.  It looks like normalizing causes us to lose that distinction.
&gt; 

A strict reading of the spec indicates that URL is simply supposed to be an alias for text/uri-list.

&gt; &gt; WebKit/chromium/src/WebDragData.cpp:118
&gt; &gt;  bool WebDragData::hasFileNames() const
&gt; &gt;  {
&gt; 
&gt; Nit: We should probably try to rename this method (in a different set of changes) to containsFilenames since it seems like &apos;contains&apos; is used more than &apos;has&apos;.

I&apos;ll make another patch after this one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285933</commentid>
    <comment_count>5</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-09-27 17:18:01 -0700</bug_when>
    <thetext>http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html#datatransfer
&quot;If the format (after conversion to lowercase) is &quot;url&quot;, then the data associated with the &quot;text/uri-list&quot; format must be parsed as appropriate for text/uri-list data, and the first URL from the list must be returned. If there is no data with that format, or if there is but it has no URLs, then the method must return the empty string. [RFC2483]&quot;

This seems pretty clear to me that we have to have special code for handling getting of URL and text/uri-list.  If the data is not properly formatted, we have to return an empty string.  Am I reading the wrong spec?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285981</commentid>
    <comment_count>6</comment_count>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2010-09-27 18:24:41 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html#datatransfer
&gt; &quot;If the format (after conversion to lowercase) is &quot;url&quot;, then the data associated with the &quot;text/uri-list&quot; format must be parsed as appropriate for text/uri-list data, and the first URL from the list must be returned. If there is no data with that format, or if there is but it has no URLs, then the method must return the empty string. [RFC2483]&quot;
&gt; 
&gt; This seems pretty clear to me that we have to have special code for handling getting of URL and text/uri-list.  If the data is not properly formatted, we have to return an empty string.  Am I reading the wrong spec?

I see. I don&apos;t know why I missed that section of the spec earlier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>286635</commentid>
    <comment_count>7</comment_count>
      <attachid>69135</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2010-09-28 16:55:21 -0700</bug_when>
    <thetext>Created attachment 69135
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>286638</commentid>
    <comment_count>8</comment_count>
      <attachid>69136</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2010-09-28 17:01:08 -0700</bug_when>
    <thetext>Created attachment 69136
Patch

I left out the ClipboardChromium changes by accident.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>286640</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-28 17:03:26 -0700</bug_when>
    <thetext>Attachment 69136 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/platform/chromium/ClipboardChromium.cpp:33:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 15 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>286660</commentid>
    <comment_count>10</comment_count>
      <attachid>69142</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2010-09-28 17:27:32 -0700</bug_when>
    <thetext>Created attachment 69142
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>286678</commentid>
    <comment_count>11</comment_count>
      <attachid>69142</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-09-28 18:04:51 -0700</bug_when>
    <thetext>Comment on attachment 69142
Patch

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

Almost done...  r- because of the WebDragData.h change.

&gt; WebCore/ChangeLog:13
&gt; +        Test: editing/pasteboard/dataTransfer-setData-getData.html

You might want to just say that this change is covered by existing tests since this test is no longer modified.

&gt; WebCore/platform/chromium/ChromiumDataObject.h:112
&gt; +        // These two are linked.
&gt; +        KURL m_url;
&gt; +        Vector&lt;String&gt; m_uriList;

Nit: Can you expand on this comment a bit?  &apos;linked&apos; is kind of vague.

&gt; WebCore/platform/chromium/ClipboardChromium.cpp:57
&gt; -static ClipboardDataType clipboardTypeFromMIMEType(const String&amp; type)
&gt; +static String normalizeType(const String&amp; type)

FWIW, I preferred having ClipboardDataType since it&apos;s clear whether or not normalization has occurred yet.  I don&apos;t feel strongly about this, but it would be nice if we had a test case for the &quot;text/plain;&quot; normalization (I suspect on Windows if you&apos;re copying text in a different encoding, you might hit this).

&gt; WebCore/platform/chromium/DragDataChromium.cpp:59
&gt; +    if (containsURL(DoNotConvertFilenames)) {

Nit: Would it be clearer to write this as m_platformDragData-&gt;types().contains(mimeTypeURL)?

&gt; WebKit/chromium/public/WebDragData.h:69
&gt; -    WEBKIT_API WebURL url() const;
&gt; +    WEBKIT_API WebString url() const;

Won&apos;t this break callers?

&gt; WebKit/chromium/src/WebDragData.cpp:71
&gt; +    return m_private-&gt;getData(&quot;text/uri-list&quot;, ignoredSuccess);

Should this file use the constants in ClipboardMimeTypes.h?  Other cases below.  For this specific case, should this use &apos;URL&apos; instead of &apos;text/uri-list&apos;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>287379</commentid>
    <comment_count>12</comment_count>
      <attachid>69312</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2010-09-29 22:37:01 -0700</bug_when>
    <thetext>Created attachment 69312
Patch

(In reply to comment #11)
&gt; (From update of attachment 69142 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=69142&amp;action=review
&gt; 
&gt; Almost done...  r- because of the WebDragData.h change.
&gt; 
&gt; &gt; WebCore/ChangeLog:13
&gt; &gt; +        Test: editing/pasteboard/dataTransfer-setData-getData.html
&gt; 
&gt; You might want to just say that this change is covered by existing tests since this test is no longer modified.
&gt; 

Done.

&gt; &gt; WebCore/platform/chromium/ChromiumDataObject.h:112
&gt; &gt; +        // These two are linked.
&gt; &gt; +        KURL m_url;
&gt; &gt; +        Vector&lt;String&gt; m_uriList;
&gt; 
&gt; Nit: Can you expand on this comment a bit?  &apos;linked&apos; is kind of vague.
&gt; 

Done.

&gt; &gt; WebCore/platform/chromium/ClipboardChromium.cpp:57
&gt; &gt; -static ClipboardDataType clipboardTypeFromMIMEType(const String&amp; type)
&gt; &gt; +static String normalizeType(const String&amp; type)
&gt; 
&gt; FWIW, I preferred having ClipboardDataType since it&apos;s clear whether or not normalization has occurred yet.  I don&apos;t feel strongly about this, but it would be nice if we had a test case for the &quot;text/plain;&quot; normalization (I suspect on Windows if you&apos;re copying text in a different encoding, you might hit this).
&gt; 

In the future, we need to handle arbitrary strings. We could still use ClipboardDataType, but that means we&apos;d need a getData() that takes a ClipboardDataType and another that takes a string.

&gt; &gt; WebCore/platform/chromium/DragDataChromium.cpp:59
&gt; &gt; +    if (containsURL(DoNotConvertFilenames)) {
&gt; 
&gt; Nit: Would it be clearer to write this as m_platformDragData-&gt;types().contains(mimeTypeURL)?
&gt; 

Done.

&gt; &gt; WebKit/chromium/public/WebDragData.h:69
&gt; &gt; -    WEBKIT_API WebURL url() const;
&gt; &gt; +    WEBKIT_API WebString url() const;
&gt; 
&gt; Won&apos;t this break callers?
&gt; 

If I use WebURL, there&apos;s no implicit conversion from String to WebURL so the build will fail in WebKit. But on the Chromium side, WebString can automatically be converted to GURL, so it works.

&gt; &gt; WebKit/chromium/src/WebDragData.cpp:71
&gt; &gt; +    return m_private-&gt;getData(&quot;text/uri-list&quot;, ignoredSuccess);
&gt; 
&gt; Should this file use the constants in ClipboardMimeTypes.h?  Other cases below.  For this specific case, should this use &apos;URL&apos; instead of &apos;text/uri-list&apos;?

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>287643</commentid>
    <comment_count>13</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-09-30 10:40:02 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; &gt; FWIW, I preferred having ClipboardDataType since it&apos;s clear whether or not normalization has occurred yet.  I don&apos;t feel strongly about this, but it would be nice if we had a test case for the &quot;text/plain;&quot; normalization (I suspect on Windows if you&apos;re copying text in a different encoding, you might hit this).
&gt; &gt; 
&gt; 
&gt; In the future, we need to handle arbitrary strings. We could still use ClipboardDataType, but that means we&apos;d need a getData() that takes a ClipboardDataType and another that takes a string.

Ah, that&apos;s a good point.  Maybe we should have setData and getData both normalize the string so callers don&apos;t have to?  That&apos;s how it used to work, right?  I&apos;m just worried about callers forgetting to normalize.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>287683</commentid>
    <comment_count>14</comment_count>
      <attachid>69312</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-09-30 11:20:55 -0700</bug_when>
    <thetext>Comment on attachment 69312
Patch

Clearing flags on attachment: 69312

Committed r68807: &lt;http://trac.webkit.org/changeset/68807&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>287684</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-09-30 11:21:02 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68817</attachid>
            <date>2010-09-25 01:31:22 -0700</date>
            <delta_ts>2010-09-27 16:47:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>foo.patch</filename>
            <type>text/plain</type>
            <size>51503</size>
            <attacher name="Daniel Cheng">dcheng</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBlZjlhZDU5Li4yYmNlYzJjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTAtMDkt
MjUgIERhbmllbCBDaGVuZyAgPGRjaGVuZ0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW2Nocm9taXVtXSBSZWZhY3RvciBDaHJv
bWl1bURhdGFPYmplY3QgdG8gdXNlIGdldHRlcnMvc2V0dGVycy4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ2NTU5CisKKyAgICAgICAgVGhpcyBpcyBh
biBpbnRlcm1lZGlhdGUgc3RlcCB0byBjb252ZXJ0aW5nIENocm9taXVtRGF0YU9iamVjdCB0byB1
c2UKKyAgICAgICAgY2FsbGJhY2tzIHRvIHRoZSBicm93c2VyIHRvIHJldHJpZXZlIGRhdGEuIFNw
ZWNpYWwgaGFuZGxpbmcgZm9yIFVSTCBhbmQKKyAgICAgICAgdGV4dC91cmktbGlzdCBoYXMgYWxz
byBiZWVuIHJlbW92ZWQ7IHRoZXkgbm93IHRyZWF0IHRoZWlyIGRhdGEgYXJndW1lbnQKKyAgICAg
ICAgYXMganVzdCBhbiBvcGFxdWUgYmxvYiBvZiB0ZXh0LgorCisgICAgICAgICogZWRpdGluZy9w
YXN0ZWJvYXJkL2RhdGFUcmFuc2Zlci1zZXREYXRhLWdldERhdGEtZXhwZWN0ZWQudHh0OgorICAg
ICAgICAqIGVkaXRpbmcvcGFzdGVib2FyZC9zY3JpcHQtdGVzdHMvZGF0YVRyYW5zZmVyLXNldERh
dGEtZ2V0RGF0YS5qczoKKyAgICAgICAgKGRvRHJvcCk6CisgICAgICAgICh0ZXN0KToKKyAgICAg
ICAgKHJ1blRlc3QpOgorCiAyMDEwLTA5LTIyICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBw
bGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEdhdmluIEJhcnJhY2xvdWdoLgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkL2RhdGFUcmFuc2Zlci1zZXREYXRh
LWdldERhdGEtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkL2Rh
dGFUcmFuc2Zlci1zZXREYXRhLWdldERhdGEtZXhwZWN0ZWQudHh0CmluZGV4IDA2M2E2YmIuLmFm
NDY1YWYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9kYXRhVHJh
bnNmZXItc2V0RGF0YS1nZXREYXRhLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9lZGl0
aW5nL3Bhc3RlYm9hcmQvZGF0YVRyYW5zZmVyLXNldERhdGEtZ2V0RGF0YS1leHBlY3RlZC50eHQK
QEAgLTEsMzQgKzEsMzMgQEAKLVRlc3RzIGNvcnJlY3QgYmVoYXZpb3Igb2YgZXZlbnQuZGF0YVRy
YW5zZmVyLnNldERhdGEvZ2V0RGF0YSBmb3IgJ1VSTCcsICd0ZXh0L3VyaS1saXN0JyBhbmQgJ3Rl
eHQvcGxhaW4nCi0KLU9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIg
bWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KLQotCi0tLS0gVGVzdCBzZXQv
Z2V0ICdVUkwnOgotUEFTUyBnZXREYXRhUmVzdWx0VHlwZSBpcyAic3RyaW5nIgotUEFTUyBnZXRE
YXRhTGluZXMubGVuZ3RoIGlzIDEKLVBBU1MgZ2V0RGF0YUxpbmVzWzBdLnJlcGxhY2UoL1wvJC8s
ICcnKSBpcyAiaHR0cDovL3Rlc3QuY29tIgotLS0tIFRlc3Qgc2V0L2dldCAndGV4dC91cmktbGlz
dCc6Ci1QQVNTIGdldERhdGFSZXN1bHRUeXBlIGlzICJzdHJpbmciCi1QQVNTIGdldERhdGFMaW5l
cy5sZW5ndGggaXMgMgotUEFTUyBnZXREYXRhTGluZXNbMF0ucmVwbGFjZSgvXC8kLywgJycpIGlz
ICJodHRwOi8vdGVzdC5jb20iCi1QQVNTIGdldERhdGFMaW5lc1sxXS5yZXBsYWNlKC9cLyQvLCAn
JykgaXMgImh0dHA6Ly9jaGVjay5jb20iCi0tLS0gVGVzdCBzZXQgJ3RleHQvdXJpLWxpc3QnLCBn
ZXQgJ1VSTCc6Ci1QQVNTIGdldERhdGFSZXN1bHRUeXBlIGlzICJzdHJpbmciCi1QQVNTIGdldERh
dGFMaW5lcy5sZW5ndGggaXMgMQotUEFTUyBnZXREYXRhTGluZXNbMF0ucmVwbGFjZSgvXC8kLywg
JycpIGlzICJodHRwOi8vdGVzdC5jb20iCi0tLS0gVGVzdCBzZXQgJ3RleHQvdXJpLWxpc3QnLCBn
ZXQgJ1VSTCcsIHVzaW5nIG9ubHkgJ1xuJzoKLVBBU1MgZ2V0RGF0YVJlc3VsdFR5cGUgaXMgInN0
cmluZyIKLVBBU1MgZ2V0RGF0YUxpbmVzLmxlbmd0aCBpcyAxCi1QQVNTIGdldERhdGFMaW5lc1sw
XS5yZXBsYWNlKC9cLyQvLCAnJykgaXMgImh0dHA6Ly90ZXN0LmNvbSIKLS0tLSBUZXN0IHNldC9n
ZXQgJ3RleHQvdXJpLWxpc3QnIHdpdGggY29tbWVudHM6Ci1QQVNTIGdldERhdGFSZXN1bHRUeXBl
IGlzICJzdHJpbmciCi1QQVNTIGdldERhdGFMaW5lcy5sZW5ndGggaXMgMgotUEFTUyBnZXREYXRh
TGluZXNbMF0ucmVwbGFjZSgvXC8kLywgJycpIGlzICJodHRwOi8vdGVzdC5jb20iCi1QQVNTIGdl
dERhdGFMaW5lc1sxXS5yZXBsYWNlKC9cLyQvLCAnJykgaXMgImh0dHA6Ly9jaGVjay5jb20iCi0t
LS0gVGVzdCBzZXQvZ2V0ICd0ZXh0L3BsYWluJzoKLVBBU1MgZ2V0RGF0YVJlc3VsdFR5cGUgaXMg
InN0cmluZyIKLVBBU1MgZ2V0RGF0YUxpbmVzLmxlbmd0aCBpcyAxCi1QQVNTIGdldERhdGFMaW5l
c1swXS5yZXBsYWNlKC9cLyQvLCAnJykgaXMgIkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiIK
LVBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKLQotVEVTVCBDT01QTEVURQorVGVzdHMg
Y29ycmVjdCBiZWhhdmlvciBvZiBldmVudC5kYXRhVHJhbnNmZXIuc2V0RGF0YS9nZXREYXRhIGZv
ciAnVVJMJywgJ3RleHQvdXJpLWxpc3QnIGFuZCAndGV4dC9wbGFpbicNCisNCitPbiBzdWNjZXNz
LCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAi
VEVTVCBDT01QTEVURSIuDQorDQorDQorLS0tIFRlc3Qgc2V0L2dldCAndGV4dC9wbGFpbic6DQor
UEFTUyBnZXREYXRhUmVzdWx0VHlwZSBpcyAic3RyaW5nIg0KK1BBU1MgZ2V0RGF0YVJlc3VsdCBp
cyAiTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIg0KKy0tLSBUZXN0IHNldCAndGV4dC9wbGFp
bicsIGdldCAnVGV4dCc6DQorUEFTUyBnZXREYXRhUmVzdWx0VHlwZSBpcyAic3RyaW5nIg0KK1BB
U1MgZ2V0RGF0YVJlc3VsdCBpcyAiTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIg0KKy0tLSBU
ZXN0IHNldC9nZXQgJ1VSTCc6DQorUEFTUyBnZXREYXRhUmVzdWx0VHlwZSBpcyAic3RyaW5nIg0K
K1BBU1MgZ2V0RGF0YVJlc3VsdCBpcyAiaHR0cDovL3Rlc3QuY29tIg0KKy0tLSBUZXN0IHNldC9n
ZXQgJ3RleHQvdXJpLWxpc3QnOg0KK1BBU1MgZ2V0RGF0YVJlc3VsdFR5cGUgaXMgInN0cmluZyIN
CitQQVNTIGdldERhdGFSZXN1bHQgaXMgImh0dHA6Ly90ZXN0LmNvbSINCistLS0gVGVzdCBzZXQg
J3RleHQvdXJpLWxpc3QnLCBnZXQgJ1VSTCc6DQorUEFTUyBnZXREYXRhUmVzdWx0VHlwZSBpcyAi
c3RyaW5nIg0KK1BBU1MgZ2V0RGF0YVJlc3VsdCBpcyAiaHR0cDovL3Rlc3QuY29tIg0KKy0tLSBU
ZXN0IHNldCAnVVJMJywgZ2V0ICd0ZXh0L3VyaS1saXN0JzoNCitQQVNTIGdldERhdGFSZXN1bHRU
eXBlIGlzICJzdHJpbmciDQorUEFTUyBnZXREYXRhUmVzdWx0IGlzICJodHRwOi8vdGVzdC5jb20i
DQorLS0tIFRlc3Qgc2V0IGludmFsaWQgVVJMIGluICdVUkwnLCBnZXQgJ3RleHQvdXJpLWxpc3Qn
Og0KK1BBU1MgZ2V0RGF0YVJlc3VsdFR5cGUgaXMgInN0cmluZyINCitQQVNTIGdldERhdGFSZXN1
bHQgaXMgIj48Ig0KKy0tLSBUZXN0IHNldCBpbnZhbGlkIFVSTCBpbiAndGV4dC91cmktbGlzdCcs
IGdldCAnVVJMJzoNCitQQVNTIGdldERhdGFSZXN1bHRUeXBlIGlzICJzdHJpbmciDQorUEFTUyBn
ZXREYXRhUmVzdWx0IGlzICI+PCINCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlDQor
DQorVEVTVCBDT01QTEVURQ0KKw0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2VkaXRpbmcvcGFz
dGVib2FyZC9zY3JpcHQtdGVzdHMvZGF0YVRyYW5zZmVyLXNldERhdGEtZ2V0RGF0YS5qcyBiL0xh
eW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9zY3JpcHQtdGVzdHMvZGF0YVRyYW5zZmVyLXNl
dERhdGEtZ2V0RGF0YS5qcwppbmRleCBmMTBkNzg1Li40YTExOGY2IDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQvc2NyaXB0LXRlc3RzL2RhdGFUcmFuc2Zlci1zZXRE
YXRhLWdldERhdGEuanMKKysrIGIvTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkL3Njcmlw
dC10ZXN0cy9kYXRhVHJhbnNmZXItc2V0RGF0YS1nZXREYXRhLmpzCkBAIC0xMiw5ICsxMiw5IEBA
IGRyYWdUYXJnZXQuc3R5bGUuaGVpZ2h0ID0gIjEwMHB4IjsKIGRvY3VtZW50LmJvZHkuaW5zZXJ0
QmVmb3JlKGRyYWdUYXJnZXQsIGRyYWdNZSk7CiAKIHZhciBzZXREYXRhVHlwZTsKLXZhciBzZXRE
YXRhVmFsdWVzOwordmFyIHNldERhdGFWYWx1ZTsKIHZhciBnZXREYXRhVHlwZTsKLXZhciBnZXRE
YXRhVmFsdWVzOwordmFyIGdldERhdGFWYWx1ZTsKIHZhciBnZXREYXRhUmVzdWx0OwogdmFyIGdl
dERhdGFSZXN1bHRUeXBlOwogdmFyIGdldERhdGFMaW5lczsKQEAgLTIyLDcgKzIyLDcgQEAgdmFy
IGdldERhdGFMaW5lczsKIHZhciBDUkxGID0gIlxyXG4iOwogCiBkcmFnTWUuYWRkRXZlbnRMaXN0
ZW5lcigiZHJhZ3N0YXJ0IiwgZnVuY3Rpb24oKSB7Ci0gICAgZXZlbnQuZGF0YVRyYW5zZmVyLnNl
dERhdGEoc2V0RGF0YVR5cGUsIHNldERhdGFWYWx1ZXMuam9pbihDUkxGKSk7CisgICAgZXZlbnQu
ZGF0YVRyYW5zZmVyLnNldERhdGEoc2V0RGF0YVR5cGUsIHNldERhdGFWYWx1ZSk7CiB9LCBmYWxz
ZSk7CiAKIGRyYWdUYXJnZXQuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ2VudGVyIiwgZnVuY3Rpb24o
KSB7CkBAIC02Myw1MCArNjMsNTAgQEAgZnVuY3Rpb24gZG9Ecm9wKCkgewogICAgIGdldERhdGFS
ZXN1bHQgPSBldmVudC5kYXRhVHJhbnNmZXIuZ2V0RGF0YShnZXREYXRhVHlwZSk7CiAgICAgZ2V0
RGF0YVJlc3VsdFR5cGUgPSB0eXBlb2YgZ2V0RGF0YVJlc3VsdDsKICAgICBzaG91bGRCZUVxdWFs
VG9TdHJpbmcoImdldERhdGFSZXN1bHRUeXBlIiwgInN0cmluZyIpOwotICAgIGdldERhdGFMaW5l
cyA9IGdldERhdGFSZXN1bHQuc3BsaXQoQ1JMRik7ICAgIAotICAgIC8vIHJlbW92ZSBwb3RlbnRp
YWwgY29tbWVudHMKLSAgICBnZXREYXRhTGluZXMgPSBnZXREYXRhTGluZXMuZmlsdGVyKGZ1bmN0
aW9uKGxpbmUpIHsKLSAgICAgIHJldHVybiBsaW5lWzBdICE9PSAnIyc7Ci0gICAgfSk7Ci0gICAg
c2hvdWxkRXZhbHVhdGVUbygiZ2V0RGF0YUxpbmVzLmxlbmd0aCIsIGdldERhdGFWYWx1ZXMubGVu
Z3RoKTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgZ2V0RGF0YUxpbmVzLmxlbmd0aCAmJiBpIDwgZ2V0
RGF0YVZhbHVlcy5sZW5ndGg7ICsraSkgewotICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmco
ImdldERhdGFMaW5lc1siICsgaSArICJdLnJlcGxhY2UoL1xcLyQvLCAnJykiLCBnZXREYXRhVmFs
dWVzW2ldKTsKLSAgICB9CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJnZXREYXRhUmVzdWx0
IiwgZ2V0RGF0YVZhbHVlKTsKIH0KIAotZnVuY3Rpb24gdGVzdChzZXRUeXBlLCBzZXRWYWx1ZXMs
IGdldFR5cGUsIGdldFZhbHVlcykgeworZnVuY3Rpb24gdGVzdChzZXRUeXBlLCBzZXRWYWx1ZSwg
Z2V0VHlwZSwgZ2V0VmFsdWUpIHsKICAgICBzZXREYXRhVHlwZSA9IHNldFR5cGU7Ci0gICAgc2V0
RGF0YVZhbHVlcyA9IHNldFZhbHVlczsKKyAgICBzZXREYXRhVmFsdWUgPSBzZXRWYWx1ZTsKICAg
ICBnZXREYXRhVHlwZSA9IGdldFR5cGU7Ci0gICAgZ2V0RGF0YVZhbHVlcyA9IGdldFZhbHVlczsK
KyAgICBnZXREYXRhVmFsdWUgPSBnZXRWYWx1ZTsKICAgICBkcmFnT250b0RyYWdUYXJnZXQoKTsK
IH0KIAogZnVuY3Rpb24gcnVuVGVzdCgpCiB7CisgICAgZGVidWcoIi0tLSBUZXN0IHNldC9nZXQg
J3RleHQvcGxhaW4nOiIpOworICAgIHRlc3QoInRleHQvcGxhaW4iLCAiTG9yZW0gaXBzdW0gZG9s
b3Igc2l0IGFtZXQuIiwgCisgICAgICAgICAidGV4dC9wbGFpbiIsICJMb3JlbSBpcHN1bSBkb2xv
ciBzaXQgYW1ldC4iKTsKKworICAgIGRlYnVnKCItLS0gVGVzdCBzZXQgJ3RleHQvcGxhaW4nLCBn
ZXQgJ1RleHQnOiIpOworICAgIHRlc3QoInRleHQvcGxhaW4iLCAiTG9yZW0gaXBzdW0gZG9sb3Ig
c2l0IGFtZXQuIiwgCisgICAgICAgICAiVGV4dCIsICJMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1l
dC4iKTsKKwogICAgIGRlYnVnKCItLS0gVGVzdCBzZXQvZ2V0ICdVUkwnOiIpOwotICAgIHRlc3Qo
IlVSTCIsIFsiaHR0cDovL3Rlc3QuY29tIl0sIAotICAgICAgICAgIlVSTCIsIFsiaHR0cDovL3Rl
c3QuY29tIl0pOworICAgIHRlc3QoIlVSTCIsICJodHRwOi8vdGVzdC5jb20iLCAKKyAgICAgICAg
ICJVUkwiLCAiaHR0cDovL3Rlc3QuY29tIik7CiAKICAgICBkZWJ1ZygiLS0tIFRlc3Qgc2V0L2dl
dCAndGV4dC91cmktbGlzdCc6Iik7Ci0gICAgdGVzdCgidGV4dC91cmktbGlzdCIsIFsiaHR0cDov
L3Rlc3QuY29tIiwgImh0dHA6Ly9jaGVjay5jb20iXSwgCi0gICAgICAgICAidGV4dC91cmktbGlz
dCIsIFsiaHR0cDovL3Rlc3QuY29tIiwgImh0dHA6Ly9jaGVjay5jb20iXSk7CisgICAgdGVzdCgi
dGV4dC91cmktbGlzdCIsICJodHRwOi8vdGVzdC5jb20iLCAKKyAgICAgICAgICJ0ZXh0L3VyaS1s
aXN0IiwgImh0dHA6Ly90ZXN0LmNvbSIpOwogCiAgICAgZGVidWcoIi0tLSBUZXN0IHNldCAndGV4
dC91cmktbGlzdCcsIGdldCAnVVJMJzoiKTsKLSAgICB0ZXN0KCJ0ZXh0L3VyaS1saXN0IiwgWyJo
dHRwOi8vdGVzdC5jb20iLCAiaHR0cDovL2NoZWNrLmNvbSJdLCAKLSAgICAgICAgICJVUkwiLCBb
Imh0dHA6Ly90ZXN0LmNvbSJdKTsKKyAgICB0ZXN0KCJ0ZXh0L3VyaS1saXN0IiwgImh0dHA6Ly90
ZXN0LmNvbSIsIAorICAgICAgICAgIlVSTCIsICJodHRwOi8vdGVzdC5jb20iKTsKIAotICAgIGRl
YnVnKCItLS0gVGVzdCBzZXQgJ3RleHQvdXJpLWxpc3QnLCBnZXQgJ1VSTCcsIHVzaW5nIG9ubHkg
J1xcbic6Iik7Ci0gICAgdGVzdCgidGV4dC91cmktbGlzdCIsIFsiaHR0cDovL3Rlc3QuY29tXG5o
dHRwOi8vY2hlY2suY29tIl0sIAotICAgICAgICAgIlVSTCIsIFsiaHR0cDovL3Rlc3QuY29tIl0p
OworICAgIGRlYnVnKCItLS0gVGVzdCBzZXQgJ1VSTCcsIGdldCAndGV4dC91cmktbGlzdCc6Iik7
CisgICAgdGVzdCgiVVJMIiwgImh0dHA6Ly90ZXN0LmNvbSIsIAorICAgICAgICAgInRleHQvdXJp
LWxpc3QiLCAiaHR0cDovL3Rlc3QuY29tIik7CiAKLSAgICBkZWJ1ZygiLS0tIFRlc3Qgc2V0L2dl
dCAndGV4dC91cmktbGlzdCcgd2l0aCBjb21tZW50czoiKTsKLSAgICB0ZXN0KCJ0ZXh0L3VyaS1s
aXN0IiwgWyIjIGNvbW1lbnQiLCAiaHR0cDovL3Rlc3QuY29tIiwgImh0dHA6Ly9jaGVjay5jb20i
XSwgCi0gICAgICAgICAidGV4dC91cmktbGlzdCIsIFsiaHR0cDovL3Rlc3QuY29tIiwgImh0dHA6
Ly9jaGVjay5jb20iXSk7CisgICAgZGVidWcoIi0tLSBUZXN0IHNldCBpbnZhbGlkIFVSTCBpbiAn
VVJMJywgZ2V0ICd0ZXh0L3VyaS1saXN0JzoiKTsKKyAgICB0ZXN0KCJVUkwiLCAiPjwiLCAKKyAg
ICAgICAgICJ0ZXh0L3VyaS1saXN0IiwgIj48Iik7CiAKLSAgICBkZWJ1ZygiLS0tIFRlc3Qgc2V0
L2dldCAndGV4dC9wbGFpbic6Iik7Ci0gICAgdGVzdCgidGV4dC9wbGFpbiIsIFsiTG9yZW0gaXBz
dW0gZG9sb3Igc2l0IGFtZXQuIl0sIAotICAgICAgICAgInRleHQvcGxhaW4iLCBbIkxvcmVtIGlw
c3VtIGRvbG9yIHNpdCBhbWV0LiJdKTsKKyAgICBkZWJ1ZygiLS0tIFRlc3Qgc2V0IGludmFsaWQg
VVJMIGluICd0ZXh0L3VyaS1saXN0JywgZ2V0ICdVUkwnOiIpOworICAgIHRlc3QoInRleHQvdXJp
LWxpc3QiLCAiPjwiLCAKKyAgICAgICAgICJVUkwiLCAiPjwiKTsKIH0KIAogaWYgKHdpbmRvdy5l
dmVudFNlbmRlcikgewpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAzOGQzMTEwLi4xNWE1OTljIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5n
ZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcxIEBACisyMDEwLTA5LTI1
ICBEYW5pZWwgQ2hlbmcgIDxkY2hlbmdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gUmVmYWN0b3IgQ2hyb21p
dW1EYXRhT2JqZWN0IHRvIHVzZSBnZXR0ZXJzL3NldHRlcnMuCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NjU1OQorCisgICAgICAgIFRoaXMgaXMgYW4g
aW50ZXJtZWRpYXRlIHN0ZXAgdG8gY29udmVydGluZyBDaHJvbWl1bURhdGFPYmplY3QgdG8gdXNl
CisgICAgICAgIGNhbGxiYWNrcyB0byB0aGUgYnJvd3NlciB0byByZXRyaWV2ZSBkYXRhLiBTcGVj
aWFsIGhhbmRsaW5nIGZvciBVUkwgYW5kCisgICAgICAgIHRleHQvdXJpLWxpc3QgaGFzIGFsc28g
YmVlbiByZW1vdmVkOyB0aGV5IG5vdyB0cmVhdCB0aGVpciBkYXRhIGFyZ3VtZW50CisgICAgICAg
IGFzIGp1c3QgYW4gb3BhcXVlIGJsb2Igb2YgdGV4dC4KKworICAgICAgICBUZXN0OiBlZGl0aW5n
L3Bhc3RlYm9hcmQvZGF0YVRyYW5zZmVyLXNldERhdGEtZ2V0RGF0YS5odG1sCisKKyAgICAgICAg
KiBlZGl0aW5nL2Nocm9taXVtL0VkaXRvckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6bmV3R2VuZXJhbENsaXBib2FyZCk6CisgICAgICAgICogcGFnZS9jaHJvbWl1bS9F
dmVudEhhbmRsZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6
OmNyZWF0ZURyYWdnaW5nQ2xpcGJvYXJkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9D
aHJvbWl1bURhdGFPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2Jq
ZWN0OjpjbGVhckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0Ojpj
bGVhckFsbCk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OmNsZWFyQWxs
RXhjZXB0RmlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpoYXNE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6dHlwZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpnZXREYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6c2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpD
aHJvbWl1bURhdGFPYmplY3Q6OkNocm9taXVtRGF0YU9iamVjdCk6CisgICAgICAgICogcGxhdGZv
cm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpDaHJv
bWl1bURhdGFPYmplY3Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFP
YmplY3Q6OnVybFRpdGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6
c2V0VXJsVGl0bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpodG1s
QmFzZVVybCk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OnNldEh0bWxC
YXNlVXJsKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6Y29udGFpbnNG
aWxlbmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpmaWxlbmFt
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpzZXRGaWxlbmFtZXMp
OgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpmaWxlRXh0ZW5zaW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6c2V0RmlsZUV4dGVuc2lvbik6
CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OmZpbGVDb250ZW50RmlsZW5h
bWUpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpzZXRGaWxlQ29udGVu
dEZpbGVuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6ZmlsZUNv
bnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpzZXRGaWxlQ29u
dGVudCk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6bm9ybWFsaXplVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpD
bGlwYm9hcmRDaHJvbWl1bTo6Y2xlYXJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2Fy
ZENocm9taXVtOjpjbGVhckFsbERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkQ2hy
b21pdW06OmdldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkQ2hyb21pdW06OnNl
dERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkQ2hyb21pdW06OnR5cGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENocm9taXVtOjpmaWxlcyk6CisgICAgICAgIChXZWJD
b3JlOjp3cml0ZUltYWdlVG9EYXRhT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2Fy
ZENocm9taXVtOjpkZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
Q2xpcGJvYXJkQ2hyb21pdW06OndyaXRlVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2Fy
ZENocm9taXVtOjp3cml0ZVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENocm9t
aXVtOjp3cml0ZVBsYWluVGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJv
YXJkQ2hyb21pdW1XaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkQ2hyb21pdW06
OnZhbGlkYXRlRmlsZU5hbWUpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0RyYWdEYXRh
Q2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29udGFpbnNIVE1MKToKKyAgICAgICAg
KFdlYkNvcmU6OkRyYWdEYXRhOjpjb250YWluc1VSTCk6CisgICAgICAgIChXZWJDb3JlOjpEcmFn
RGF0YTo6YXNVUkwpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmNvbnRhaW5zRmlsZXMp
OgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmFzRmlsZW5hbWVzKToKKyAgICAgICAgKFdl
YkNvcmU6OkRyYWdEYXRhOjpjb250YWluc1BsYWluVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpE
cmFnRGF0YTo6YXNQbGFpblRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmNhblNt
YXJ0UmVwbGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0YTo6YXNGcmFnbWVudCk6CisK
IDIwMTAtMDktMjIgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy9j
aHJvbWl1bS9FZGl0b3JDaHJvbWl1bS5jcHAgYi9XZWJDb3JlL2VkaXRpbmcvY2hyb21pdW0vRWRp
dG9yQ2hyb21pdW0uY3BwCmluZGV4IGM5MzhhN2UuLjJiZmI1YWYgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvZWRpdGluZy9jaHJvbWl1bS9FZGl0b3JDaHJvbWl1bS5jcHAKKysrIGIvV2ViQ29yZS9lZGl0
aW5nL2Nocm9taXVtL0VkaXRvckNocm9taXVtLmNwcApAQCAtMzksNyArMzksNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIFBhc3NSZWZQdHI8Q2xpcGJvYXJkPiBFZGl0b3I6Om5ld0dlbmVyYWxD
bGlwYm9hcmQoQ2xpcGJvYXJkQWNjZXNzUG9saWN5IHBvbGljeSwgRnJhbWUqIGZyYW1lKQogewot
ICAgIHJldHVybiBDbGlwYm9hcmRDaHJvbWl1bTo6Y3JlYXRlKENsaXBib2FyZDo6Q29weUFuZFBh
c3RlLCBDaHJvbWl1bURhdGFPYmplY3Q6OmNyZWF0ZSgpLCBwb2xpY3ksIGZyYW1lKTsKKyAgICBy
ZXR1cm4gQ2xpcGJvYXJkQ2hyb21pdW06OmNyZWF0ZShDbGlwYm9hcmQ6OkNvcHlBbmRQYXN0ZSwg
Q2hyb21pdW1EYXRhT2JqZWN0OjpjcmVhdGUoQ2xpcGJvYXJkOjpDb3B5QW5kUGFzdGUpLCBwb2xp
Y3ksIGZyYW1lKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wYWdlL2Nocm9taXVtL0V2ZW50SGFuZGxlckNocm9taXVtLmNwcCBiL1dlYkNvcmUvcGFn
ZS9jaHJvbWl1bS9FdmVudEhhbmRsZXJDaHJvbWl1bS5jcHAKaW5kZXggOWU5YTc5YS4uMTliOGE4
NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL2Nocm9taXVtL0V2ZW50SGFuZGxlckNocm9taXVt
LmNwcAorKysgYi9XZWJDb3JlL3BhZ2UvY2hyb21pdW0vRXZlbnRIYW5kbGVyQ2hyb21pdW0uY3Bw
CkBAIC0xMjgsNyArMTI4LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmV2ZW50QWN0aXZhdGVkVmll
dyhjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2ZW50KSBjb25zdAogCiBQYXNzUmVmUHRyPENs
aXBib2FyZD4gRXZlbnRIYW5kbGVyOjpjcmVhdGVEcmFnZ2luZ0NsaXBib2FyZCgpIGNvbnN0CiB7
Ci0gICAgUmVmUHRyPENocm9taXVtRGF0YU9iamVjdD4gZGF0YU9iamVjdCA9IENocm9taXVtRGF0
YU9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPENocm9taXVtRGF0YU9iamVjdD4gZGF0YU9i
amVjdCA9IENocm9taXVtRGF0YU9iamVjdDo6Y3JlYXRlKENsaXBib2FyZDo6RHJhZ0FuZERyb3Ap
OwogICAgIHJldHVybiBDbGlwYm9hcmRDaHJvbWl1bTo6Y3JlYXRlKENsaXBib2FyZDo6RHJhZ0Fu
ZERyb3AsIGRhdGFPYmplY3QuZ2V0KCksIENsaXBib2FyZFdyaXRhYmxlLCBtX2ZyYW1lKTsKIH0K
IApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmpl
Y3QuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuY3Bw
CmluZGV4IDgzNTI2NjkuLjk4ZTRmYTUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9t
aXVtL0Nocm9taXVtRGF0YU9iamVjdC5jcHAKQEAgLTMxLDU2ICszMSwxODQgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJDaHJvbWl1bURhdGFPYmplY3QuaCIKIAorI2luY2x1ZGUg
IkNocm9taXVtQnJpZGdlLmgiCisjaW5jbHVkZSAiUGFzdGVib2FyZC5oIgorCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLXZvaWQgQ2hyb21pdW1EYXRhT2JqZWN0OjpjbGVhcigpCit2b2lkIENocm9t
aXVtRGF0YU9iamVjdDo6Y2xlYXJEYXRhKGNvbnN0IFN0cmluZyYgdHlwZSkKK3sKKyAgICBpZiAo
dHlwZSA9PSAidGV4dC9wbGFpbiIpIHsKKyAgICAgICAgbV9wbGFpblRleHQgPSAiIjsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICh0eXBlID09ICJ0ZXh0L3VyaS1saXN0Iikgewor
ICAgICAgICBtX3VybCA9ICIiOworICAgICAgICBtX3VybFRpdGxlID0gIiI7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAodHlwZSA9PSAidGV4dC9odG1sIikgeworICAgICAgICBt
X3RleHRIdG1sID0gIiI7CisgICAgICAgIG1faHRtbEJhc2VVcmwgPSBLVVJMKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAodHlwZSA9PSAiZG93bmxvYWR1cmwiKSB7CisgICAg
ICAgIG1fZG93bmxvYWRNZXRhZGF0YSA9ICIiOworICAgICAgICByZXR1cm47CisgICAgfQorfQor
Cit2b2lkIENocm9taXVtRGF0YU9iamVjdDo6Y2xlYXJBbGwoKQogewogICAgIGNsZWFyQWxsRXhj
ZXB0RmlsZXMoKTsKLSAgICBmaWxlbmFtZXMuY2xlYXIoKTsKKyAgICBtX2ZpbGVuYW1lcy5jbGVh
cigpOwogfQogCiB2b2lkIENocm9taXVtRGF0YU9iamVjdDo6Y2xlYXJBbGxFeGNlcHRGaWxlcygp
CiB7Ci0gICAgdXJsID0gS1VSTCgpOwotICAgIHVybFRpdGxlID0gIiI7Ci0gICAgdXJpTGlzdC5j
bGVhcigpOwotICAgIGRvd25sb2FkTWV0YWRhdGEgPSAiIjsKLSAgICBmaWxlRXh0ZW5zaW9uID0g
IiI7Ci0gICAgcGxhaW5UZXh0ID0gIiI7Ci0gICAgdGV4dEh0bWwgPSAiIjsKLSAgICBodG1sQmFz
ZVVybCA9IEtVUkwoKTsKLSAgICBmaWxlQ29udGVudEZpbGVuYW1lID0gIiI7Ci0gICAgaWYgKGZp
bGVDb250ZW50KQotICAgICAgICBmaWxlQ29udGVudC0+Y2xlYXIoKTsKKyAgICBtX3VybCA9IEtV
UkwoKTsKKyAgICBtX3VybFRpdGxlID0gIiI7CisgICAgbV9kb3dubG9hZE1ldGFkYXRhID0gIiI7
CisgICAgbV9maWxlRXh0ZW5zaW9uID0gIiI7CisgICAgbV9wbGFpblRleHQgPSAiIjsKKyAgICBt
X3RleHRIdG1sID0gIiI7CisgICAgbV9odG1sQmFzZVVybCA9IEtVUkwoKTsKKyAgICBtX2ZpbGVD
b250ZW50RmlsZW5hbWUgPSAiIjsKKyAgICBpZiAobV9maWxlQ29udGVudCkKKyAgICAgICAgbV9m
aWxlQ29udGVudC0+Y2xlYXIoKTsKIH0KIAogYm9vbCBDaHJvbWl1bURhdGFPYmplY3Q6Omhhc0Rh
dGEoKSBjb25zdAogewotICAgIHJldHVybiAhdXJsLmlzRW1wdHkoKQotICAgICAgICB8fCAhdXJp
TGlzdC5pc0VtcHR5KCkKLSAgICAgICAgfHwgIWRvd25sb2FkTWV0YWRhdGEuaXNFbXB0eSgpCi0g
ICAgICAgIHx8ICFmaWxlRXh0ZW5zaW9uLmlzRW1wdHkoKQotICAgICAgICB8fCAhZmlsZW5hbWVz
LmlzRW1wdHkoKQotICAgICAgICB8fCAhcGxhaW5UZXh0LmlzRW1wdHkoKQotICAgICAgICB8fCAh
dGV4dEh0bWwuaXNFbXB0eSgpCi0gICAgICAgIHx8IGZpbGVDb250ZW50OworICAgIHJldHVybiAh
bV91cmwuaXNFbXB0eSgpCisgICAgICAgIHx8ICFtX2Rvd25sb2FkTWV0YWRhdGEuaXNFbXB0eSgp
CisgICAgICAgIHx8ICFtX2ZpbGVFeHRlbnNpb24uaXNFbXB0eSgpCisgICAgICAgIHx8ICFtX2Zp
bGVuYW1lcy5pc0VtcHR5KCkKKyAgICAgICAgfHwgIW1fcGxhaW5UZXh0LmlzRW1wdHkoKQorICAg
ICAgICB8fCAhbV90ZXh0SHRtbC5pc0VtcHR5KCkKKyAgICAgICAgfHwgbV9maWxlQ29udGVudDsK
K30KKworSGFzaFNldDxTdHJpbmc+IENocm9taXVtRGF0YU9iamVjdDo6dHlwZXMoKSBjb25zdAor
eworICAgIC8vIFRoaXMgaXMgY3VycmVudGx5IGJyb2tlbiBmb3IgcGFzdGVib2FyZCBldmVudHMs
IGFuZCBhbHdheXMgaGFzIGJlZW4uCisgICAgSGFzaFNldDxTdHJpbmc+IHJlc3VsdHM7CisKKyAg
ICBpZiAoIW1fcGxhaW5UZXh0LmlzRW1wdHkoKSkgeworICAgICAgICByZXN1bHRzLmFkZCgiVGV4
dCIpOworICAgICAgICByZXN1bHRzLmFkZCgidGV4dC9wbGFpbiIpOworICAgIH0KKworICAgIGlm
ICghbV91cmwuaXNFbXB0eSgpKSB7CisgICAgICAgIHJlc3VsdHMuYWRkKCJVUkwiKTsKKyAgICAg
ICAgcmVzdWx0cy5hZGQoInRleHQvdXJpLWxpc3QiKTsKKyAgICB9CisKKyAgICBpZiAoIW1fdGV4
dEh0bWwuaXNFbXB0eSgpKQorICAgICAgICByZXN1bHRzLmFkZCgidGV4dC9odG1sIik7CisKKyAg
ICBpZiAoIW1fZmlsZW5hbWVzLmlzRW1wdHkoKSkKKyAgICAgICAgcmVzdWx0cy5hZGQoIkZpbGVz
Iik7CisKKyAgICByZXR1cm4gcmVzdWx0czsKK30KKworU3RyaW5nIENocm9taXVtRGF0YU9iamVj
dDo6Z2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGJvb2wmIHN1Y2Nlc3MpCit7CisgICAgaWYg
KHR5cGUgPT0gInRleHQvcGxhaW4iKSB7CisgICAgICAgIGlmIChtX2NsaXBib2FyZFR5cGUgPT0g
Q2xpcGJvYXJkOjpDb3B5QW5kUGFzdGUpIHsKKyAgICAgICAgICAgIFBhc3RlYm9hcmRQcml2YXRl
OjpDbGlwYm9hcmRCdWZmZXIgYnVmZmVyID0KKyAgICAgICAgICAgICAgICBQYXN0ZWJvYXJkOjpn
ZW5lcmFsUGFzdGVib2FyZCgpLT5pc1NlbGVjdGlvbk1vZGUoKSA/CisgICAgICAgICAgICAgICAg
UGFzdGVib2FyZFByaXZhdGU6OlNlbGVjdGlvbkJ1ZmZlciA6CisgICAgICAgICAgICAgICAgUGFz
dGVib2FyZFByaXZhdGU6OlN0YW5kYXJkQnVmZmVyOworICAgICAgICAgICAgU3RyaW5nIHRleHQg
PSBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkUmVhZFBsYWluVGV4dChidWZmZXIpOworICAgICAg
ICAgICAgc3VjY2VzcyA9ICF0ZXh0LmlzRW1wdHkoKTsKKyAgICAgICAgICAgIHJldHVybiB0ZXh0
OworICAgICAgICB9CisgICAgICAgIHN1Y2Nlc3MgPSAhbV9wbGFpblRleHQuaXNFbXB0eSgpOwor
ICAgICAgICByZXR1cm4gbV9wbGFpblRleHQ7CisgICAgfQorCisgICAgaWYgKHR5cGUgPT0gInRl
eHQvdXJpLWxpc3QiKSB7CisgICAgICAgIHN1Y2Nlc3MgPSAhbV91cmwuaXNFbXB0eSgpOworICAg
ICAgICByZXR1cm4gbV91cmw7CisgICAgfQorCisgICAgaWYgKHR5cGUgPT0gInRleHQvaHRtbCIp
IHsKKyAgICAgICAgaWYgKG1fY2xpcGJvYXJkVHlwZSA9PSBDbGlwYm9hcmQ6OkNvcHlBbmRQYXN0
ZSkgeworICAgICAgICAgICAgUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlciBidWZm
ZXIgPQorICAgICAgICAgICAgICAgIFBhc3RlYm9hcmQ6OmdlbmVyYWxQYXN0ZWJvYXJkKCktPmlz
U2VsZWN0aW9uTW9kZSgpID8KKyAgICAgICAgICAgICAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6U2Vs
ZWN0aW9uQnVmZmVyIDoKKyAgICAgICAgICAgICAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6U3RhbmRh
cmRCdWZmZXI7CisgICAgICAgICAgICBTdHJpbmcgaHRtbFRleHQ7CisgICAgICAgICAgICBLVVJM
IHNvdXJjZVVSTDsKKyAgICAgICAgICAgIENocm9taXVtQnJpZGdlOjpjbGlwYm9hcmRSZWFkSFRN
TChidWZmZXIsICZodG1sVGV4dCwgJnNvdXJjZVVSTCk7CisgICAgICAgICAgICBzdWNjZXNzID0g
IWh0bWxUZXh0LmlzRW1wdHkoKTsKKyAgICAgICAgICAgIHJldHVybiBodG1sVGV4dDsKKyAgICAg
ICAgfQorICAgICAgICBzdWNjZXNzID0gIW1fdGV4dEh0bWwuaXNFbXB0eSgpOworICAgICAgICBy
ZXR1cm4gbV90ZXh0SHRtbDsKKyAgICB9CisKKyAgICBpZiAodHlwZSA9PSAiZG93bmxvYWR1cmwi
KSB7CisgICAgICAgIHN1Y2Nlc3MgPSAhbV9kb3dubG9hZE1ldGFkYXRhLmlzRW1wdHkoKTsKKyAg
ICAgICAgcmV0dXJuIG1fZG93bmxvYWRNZXRhZGF0YTsKKyAgICB9CisKKyAgICBzdWNjZXNzID0g
ZmFsc2U7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitib29sIENocm9taXVtRGF0YU9iamVj
dDo6c2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSkKK3sKKyAg
ICBpZiAodHlwZSA9PSAidGV4dC9wbGFpbiIpIHsKKyAgICAgICAgbV9wbGFpblRleHQgPSBkYXRh
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAodHlwZSA9PSAidGV4dC91
cmktbGlzdCIpIHsKKyAgICAgICAgbV91cmwgPSBkYXRhOworICAgICAgICBtX3VybFRpdGxlID0g
IiI7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmICh0eXBlID09ICJ0ZXh0
L2h0bWwiKSB7CisgICAgICAgIG1fdGV4dEh0bWwgPSBkYXRhOworICAgICAgICBtX2h0bWxCYXNl
VXJsID0gS1VSTCgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAodHlw
ZSA9PSAiZG93bmxvYWR1cmwiKSB7CisgICAgICAgIG1fZG93bmxvYWRNZXRhZGF0YSA9IGRhdGE7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwor
Q2hyb21pdW1EYXRhT2JqZWN0OjpDaHJvbWl1bURhdGFPYmplY3QoQ2xpcGJvYXJkOjpDbGlwYm9h
cmRUeXBlIGNsaXBib2FyZFR5cGUpCisgICAgOiBtX2NsaXBib2FyZFR5cGUoY2xpcGJvYXJkVHlw
ZSkKK3sKIH0KIAogQ2hyb21pdW1EYXRhT2JqZWN0OjpDaHJvbWl1bURhdGFPYmplY3QoY29uc3Qg
Q2hyb21pdW1EYXRhT2JqZWN0JiBvdGhlcikKICAgICA6IFJlZkNvdW50ZWQ8Q2hyb21pdW1EYXRh
T2JqZWN0PigpCi0gICAgLCB1cmxUaXRsZShvdGhlci51cmxUaXRsZSkKLSAgICAsIGRvd25sb2Fk
TWV0YWRhdGEob3RoZXIuZG93bmxvYWRNZXRhZGF0YSkKLSAgICAsIGZpbGVFeHRlbnNpb24ob3Ro
ZXIuZmlsZUV4dGVuc2lvbikKLSAgICAsIGZpbGVuYW1lcyhvdGhlci5maWxlbmFtZXMpCi0gICAg
LCBwbGFpblRleHQob3RoZXIucGxhaW5UZXh0KQotICAgICwgdGV4dEh0bWwob3RoZXIudGV4dEh0
bWwpCi0gICAgLCBodG1sQmFzZVVybChvdGhlci5odG1sQmFzZVVybCkKLSAgICAsIGZpbGVDb250
ZW50RmlsZW5hbWUob3RoZXIuZmlsZUNvbnRlbnRGaWxlbmFtZSkKLSAgICAsIHVybChvdGhlci51
cmwpCi0gICAgLCB1cmlMaXN0KG90aGVyLnVyaUxpc3QpCisgICAgLCBtX2NsaXBib2FyZFR5cGUo
b3RoZXIubV9jbGlwYm9hcmRUeXBlKQorICAgICwgbV91cmxUaXRsZShvdGhlci5tX3VybFRpdGxl
KQorICAgICwgbV9kb3dubG9hZE1ldGFkYXRhKG90aGVyLm1fZG93bmxvYWRNZXRhZGF0YSkKKyAg
ICAsIG1fZmlsZUV4dGVuc2lvbihvdGhlci5tX2ZpbGVFeHRlbnNpb24pCisgICAgLCBtX2ZpbGVu
YW1lcyhvdGhlci5tX2ZpbGVuYW1lcykKKyAgICAsIG1fcGxhaW5UZXh0KG90aGVyLm1fcGxhaW5U
ZXh0KQorICAgICwgbV90ZXh0SHRtbChvdGhlci5tX3RleHRIdG1sKQorICAgICwgbV9odG1sQmFz
ZVVybChvdGhlci5tX2h0bWxCYXNlVXJsKQorICAgICwgbV9maWxlQ29udGVudEZpbGVuYW1lKG90
aGVyLm1fZmlsZUNvbnRlbnRGaWxlbmFtZSkKKyAgICAsIG1fdXJsKG90aGVyLm1fdXJsKQogewot
ICAgIGlmIChvdGhlci5maWxlQ29udGVudC5nZXQoKSkKLSAgICAgICAgZmlsZUNvbnRlbnQgPSBv
dGhlci5maWxlQ29udGVudC0+Y29weSgpOworICAgIGlmIChvdGhlci5tX2ZpbGVDb250ZW50Lmdl
dCgpKQorICAgICAgICBtX2ZpbGVDb250ZW50ID0gb3RoZXIubV9maWxlQ29udGVudC0+Y29weSgp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRm
b3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9DaHJvbWl1bURhdGFPYmplY3QuaAppbmRleCBhZjBhM2ZhLi4wZDQ1NTUxIDEwMDY0NAot
LS0gYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5oCisrKyBi
L1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmgKQEAgLTMxLDEx
ICszMSwxNCBAQAogI2lmbmRlZiBDaHJvbWl1bURhdGFPYmplY3RfaAogI2RlZmluZSBDaHJvbWl1
bURhdGFPYmplY3RfaAogCisjaW5jbHVkZSAiQ2xpcGJvYXJkLmgiCiAjaW5jbHVkZSAiS1VSTC5o
IgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgi
CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00NCw5ICs0Nyw5IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAvLyBvZiBhbmQgaXMgbm90IHNwZWNpZmljIHRvIGEgcGxhdGZvcm0uCiAgICAgY2xh
c3MgQ2hyb21pdW1EYXRhT2JqZWN0IDogcHVibGljIFJlZkNvdW50ZWQ8Q2hyb21pdW1EYXRhT2Jq
ZWN0PiB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDaHJvbWl1bURh
dGFPYmplY3Q+IGNyZWF0ZSgpCisgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDaHJvbWl1bURhdGFP
YmplY3Q+IGNyZWF0ZShDbGlwYm9hcmQ6OkNsaXBib2FyZFR5cGUgY2xpcGJvYXJkVHlwZSkKICAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDaHJvbWl1bURhdGFPYmpl
Y3QpOworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDaHJvbWl1bURhdGFPYmplY3Qo
Y2xpcGJvYXJkVHlwZSkpOwogICAgICAgICB9CiAKICAgICAgICAgUGFzc1JlZlB0cjxDaHJvbWl1
bURhdGFPYmplY3Q+IGNvcHkoKSBjb25zdApAQCAtNTQsNjAgKzU3LDU3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2hyb21pdW1EYXRhT2Jq
ZWN0KCp0aGlzKSk7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkIGNsZWFyKCk7CisgICAgICAg
IHZvaWQgY2xlYXJEYXRhKGNvbnN0IFN0cmluZyYgdHlwZSk7CisgICAgICAgIHZvaWQgY2xlYXJB
bGwoKTsKICAgICAgICAgdm9pZCBjbGVhckFsbEV4Y2VwdEZpbGVzKCk7Ci0gICAgICAgIGJvb2wg
aGFzRGF0YSgpIGNvbnN0OwotCi0gICAgICAgIHZvaWQgY2xlYXJVUkwoKQotICAgICAgICB7Ci0g
ICAgICAgICAgICB1cmwgPSBLVVJMKCk7Ci0gICAgICAgICAgICB1cmlMaXN0LmNsZWFyKCk7Ci0g
ICAgICAgICAgICB1cmxUaXRsZSA9ICIiOwotICAgICAgICB9CiAKLSAgICAgICAgYm9vbCBoYXNW
YWxpZFVSTCgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiB1cmwuaXNWYWxp
ZCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgS1VSTCBnZXRVUkwoKSBjb25zdAotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gdXJsOwotICAgICAgICB9CisgICAgICAgIGJvb2wgaGFzRGF0
YSgpIGNvbnN0OwogCi0gICAgICAgIHZvaWQgc2V0VVJMKGNvbnN0IEtVUkwmIG5ld1VSTCkKLSAg
ICAgICAgewotICAgICAgICAgICAgdXJsID0gbmV3VVJMOwotICAgICAgICAgICAgdXJpTGlzdC5j
bGVhcigpOwotICAgICAgICAgICAgaWYgKG5ld1VSTC5pc0VtcHR5KCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgdXJpTGlzdC5hcHBlbmQobmV3VVJMLnN0cmluZygpKTsK
LSAgICAgICAgfQorICAgICAgICBIYXNoU2V0PFN0cmluZz4gdHlwZXMoKSBjb25zdDsKKyAgICAg
ICAgU3RyaW5nIGdldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBib29sJiBzdWNjZXNzKTsKKyAg
ICAgICAgYm9vbCBzZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRh
KTsKKworICAgICAgICAvLyBTcGVjaWFsIGhhbmRsZXJzIGZvciBVUkwvSFRNTCBtZXRhZGF0YS4K
KyAgICAgICAgU3RyaW5nIHVybFRpdGxlKCkgY29uc3QgeyByZXR1cm4gbV91cmxUaXRsZTsgfQor
ICAgICAgICB2b2lkIHNldFVybFRpdGxlKGNvbnN0IFN0cmluZyYgdXJsVGl0bGUpIHsgbV91cmxU
aXRsZSA9IHVybFRpdGxlOyB9CisgICAgICAgIEtVUkwgaHRtbEJhc2VVcmwoKSBjb25zdCB7IHJl
dHVybiBtX2h0bWxCYXNlVXJsOyB9CisgICAgICAgIHZvaWQgc2V0SHRtbEJhc2VVcmwoY29uc3Qg
S1VSTCYgdXJsKSB7IG1faHRtbEJhc2VVcmwgPSB1cmw7IH0KKworICAgICAgICAvLyBVc2VkIHRv
IGhhbmRsZSBmaWxlcyBiZWluZyBkcmFnZ2VkIGluLgorICAgICAgICBib29sIGNvbnRhaW5zRmls
ZW5hbWVzKCkgY29uc3QgeyByZXR1cm4gIW1fZmlsZW5hbWVzLmlzRW1wdHkoKTsgfQorICAgICAg
ICBWZWN0b3I8U3RyaW5nPiBmaWxlbmFtZXMoKSBjb25zdCB7IHJldHVybiBtX2ZpbGVuYW1lczsg
fQorICAgICAgICB2b2lkIHNldEZpbGVuYW1lcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5h
bWVzKSB7IG1fZmlsZW5hbWVzID0gZmlsZW5hbWVzOyB9CisKKyAgICAgICAgLy8gVXNlZCB0byBo
YW5kbGUgZmlsZXMgKGltYWdlcykgYmVpbmcgZHJhZ2dlZCBvdXQuCisgICAgICAgIFN0cmluZyBm
aWxlRXh0ZW5zaW9uKCkgY29uc3QgeyByZXR1cm4gbV9maWxlRXh0ZW5zaW9uOyB9CisgICAgICAg
IHZvaWQgc2V0RmlsZUV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGZpbGVFeHRlbnNpb24pIHsgbV9m
aWxlRXh0ZW5zaW9uID0gZmlsZUV4dGVuc2lvbjsgfQorICAgICAgICBTdHJpbmcgZmlsZUNvbnRl
bnRGaWxlbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsZUNvbnRlbnRGaWxlbmFtZTsgfQorICAg
ICAgICB2b2lkIHNldEZpbGVDb250ZW50RmlsZW5hbWUoY29uc3QgU3RyaW5nJiBmaWxlQ29udGVu
dEZpbGVuYW1lKSB7IG1fZmlsZUNvbnRlbnRGaWxlbmFtZSA9IGZpbGVDb250ZW50RmlsZW5hbWU7
IH0KKyAgICAgICAgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGZpbGVDb250ZW50KCkgY29uc3Qg
eyByZXR1cm4gbV9maWxlQ29udGVudDsgfQorICAgICAgICB2b2lkIHNldEZpbGVDb250ZW50KFBh
c3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBmaWxlQ29udGVudCkgeyBtX2ZpbGVDb250ZW50ID0gZmls
ZUNvbnRlbnQ7IH0KIAotICAgICAgICBTdHJpbmcgdXJsVGl0bGU7CisgICAgcHJpdmF0ZToKKyAg
ICAgICAgQ2hyb21pdW1EYXRhT2JqZWN0KENsaXBib2FyZDo6Q2xpcGJvYXJkVHlwZSk7CisgICAg
ICAgIENocm9taXVtRGF0YU9iamVjdChjb25zdCBDaHJvbWl1bURhdGFPYmplY3QmKTsKIAotICAg
ICAgICBTdHJpbmcgZG93bmxvYWRNZXRhZGF0YTsKKyAgICAgICAgQ2xpcGJvYXJkOjpDbGlwYm9h
cmRUeXBlIG1fY2xpcGJvYXJkVHlwZTsKIAotICAgICAgICBTdHJpbmcgZmlsZUV4dGVuc2lvbjsK
LSAgICAgICAgVmVjdG9yPFN0cmluZz4gZmlsZW5hbWVzOworICAgICAgICBTdHJpbmcgbV91cmxU
aXRsZTsKIAotICAgICAgICBTdHJpbmcgcGxhaW5UZXh0OworICAgICAgICBTdHJpbmcgbV9kb3du
bG9hZE1ldGFkYXRhOwogCi0gICAgICAgIFN0cmluZyB0ZXh0SHRtbDsKLSAgICAgICAgS1VSTCBo
dG1sQmFzZVVybDsKKyAgICAgICAgU3RyaW5nIG1fZmlsZUV4dGVuc2lvbjsKKyAgICAgICAgVmVj
dG9yPFN0cmluZz4gbV9maWxlbmFtZXM7CiAKLSAgICAgICAgU3RyaW5nIGZpbGVDb250ZW50Rmls
ZW5hbWU7Ci0gICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGZpbGVDb250ZW50OworICAgICAg
ICBTdHJpbmcgbV9wbGFpblRleHQ7CiAKLSAgICBwcml2YXRlOgotICAgICAgICAvLyBVUkwgYW5k
IHVyaS1saXN0IGFyZSBsaW5rZWQsIHNvIHRoZXkgc2hvdWxkIG5vdCBiZSBhY2Nlc3NlZCBpbmRp
dmlkdWFsbHkuCi0gICAgICAgIEtVUkwgdXJsOwotICAgICAgICBWZWN0b3I8U3RyaW5nPiB1cmlM
aXN0OworICAgICAgICBTdHJpbmcgbV90ZXh0SHRtbDsKKyAgICAgICAgS1VSTCBtX2h0bWxCYXNl
VXJsOwogCi0gICAgICAgIENocm9taXVtRGF0YU9iamVjdCgpIHt9Ci0gICAgICAgIENocm9taXVt
RGF0YU9iamVjdChjb25zdCBDaHJvbWl1bURhdGFPYmplY3QmKTsKKyAgICAgICAgU3RyaW5nIG1f
ZmlsZUNvbnRlbnRGaWxlbmFtZTsKKyAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV9maWxl
Q29udGVudDsKIAotICAgICAgICBmcmllbmQgY2xhc3MgQ2xpcGJvYXJkQ2hyb21pdW07CisgICAg
ICAgIFN0cmluZyBtX3VybDsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmNwcCBi
L1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uY3BwCmluZGV4IGMy
ZWM4MGMuLjM5NWEwNTYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xp
cGJvYXJkQ2hyb21pdW0uY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJv
YXJkQ2hyb21pdW0uY3BwCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSAiQ2xpcGJvYXJkQ2hy
b21pdW0uaCIKIAogI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCi0jaW5jbHVkZSAiQ2hyb21pdW1C
cmlkZ2UuaCIKICNpbmNsdWRlICJDaHJvbWl1bURhdGFPYmplY3QuaCIKICNpbmNsdWRlICJDbGlw
Ym9hcmRVdGlsaXRpZXNDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCkBAIC00MCw3
ICszOSw2IEBACiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5
LmgiCiAjaW5jbHVkZSAiTmFtZWROb2RlTWFwLmgiCi0jaW5jbHVkZSAiUGFzdGVib2FyZC5oIgog
I2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRl
ICJSZW5kZXJJbWFnZS5oIgpAQCAtNTUsNDAgKzUzLDE0IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1M
TmFtZXM7CiAvLyBXZSBwcm92aWRlIHRoZSBJRSBjbGlwYm9hcmQgdHlwZXMgKFVSTCBhbmQgVGV4
dCksIGFuZCB0aGUgY2xpcGJvYXJkIHR5cGVzIHNwZWNpZmllZCBpbiB0aGUgV0hBVFdHIFdlYiBB
cHBsaWNhdGlvbnMgMS4wIGRyYWZ0CiAvLyBzZWUgaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNz
L3dlYi1hcHBzL2N1cnJlbnQtd29yay8gU2VjdGlvbiA2LjMuNS4zCiAKLWVudW0gQ2xpcGJvYXJk
RGF0YVR5cGUgewotICAgIENsaXBib2FyZERhdGFUeXBlTm9uZSwKLQotICAgIENsaXBib2FyZERh
dGFUeXBlVVJMLAotICAgIENsaXBib2FyZERhdGFUeXBlVVJJTGlzdCwKLSAgICBDbGlwYm9hcmRE
YXRhVHlwZURvd25sb2FkVVJMLAotICAgIENsaXBib2FyZERhdGFUeXBlUGxhaW5UZXh0LAotICAg
IENsaXBib2FyZERhdGFUeXBlSFRNTCwKLQotICAgIENsaXBib2FyZERhdGFUeXBlT3RoZXIsCi19
OwotCi0vLyBQZXIgUkZDIDI0ODMsIHRoZSBsaW5lIHNlcGFyYXRvciBmb3IgInRleHQvLi4uIiBN
SU1FIHR5cGVzIGlzIENSLUxGLgotc3RhdGljIGNoYXIgY29uc3QqIGNvbnN0IHRleHRNSU1FVHlw
ZUxpbmVTZXBhcmF0b3IgPSAiXHJcbiI7Ci0KLXN0YXRpYyBDbGlwYm9hcmREYXRhVHlwZSBjbGlw
Ym9hcmRUeXBlRnJvbU1JTUVUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSkKK3N0YXRpYyBTdHJpbmcg
bm9ybWFsaXplVHlwZShjb25zdCBTdHJpbmcmIHR5cGUpCiB7CiAgICAgU3RyaW5nIGNsZWFuVHlw
ZSA9IHR5cGUuc3RyaXBXaGl0ZVNwYWNlKCkubG93ZXIoKTsKLSAgICBpZiAoY2xlYW5UeXBlLmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIENsaXBib2FyZERhdGFUeXBlTm9uZTsKLQotICAgIC8v
IEluY2x1ZGVzIHR3byBzcGVjaWFsIGNhc2VzIGZvciBJRSBjb21wYXRpYmlsaXR5LgotICAgIGlm
IChjbGVhblR5cGUgPT0gInRleHQiIHx8IGNsZWFuVHlwZSA9PSAidGV4dC9wbGFpbiIgfHwgY2xl
YW5UeXBlLnN0YXJ0c1dpdGgoInRleHQvcGxhaW47IikpCi0gICAgICAgIHJldHVybiBDbGlwYm9h
cmREYXRhVHlwZVBsYWluVGV4dDsKKyAgICBpZiAoY2xlYW5UeXBlID09ICJ0ZXh0IikKKyAgICAg
ICAgcmV0dXJuICJ0ZXh0L3BsYWluIjsKICAgICBpZiAoY2xlYW5UeXBlID09ICJ1cmwiKQotICAg
ICAgICByZXR1cm4gQ2xpcGJvYXJkRGF0YVR5cGVVUkw7Ci0gICAgaWYgKGNsZWFuVHlwZSA9PSAi
dGV4dC91cmktbGlzdCIpCi0gICAgICAgIHJldHVybiBDbGlwYm9hcmREYXRhVHlwZVVSSUxpc3Q7
Ci0gICAgaWYgKGNsZWFuVHlwZSA9PSAiZG93bmxvYWR1cmwiKQotICAgICAgICByZXR1cm4gQ2xp
cGJvYXJkRGF0YVR5cGVEb3dubG9hZFVSTDsKLSAgICBpZiAoY2xlYW5UeXBlID09ICJ0ZXh0L2h0
bWwiKQotICAgICAgICByZXR1cm4gQ2xpcGJvYXJkRGF0YVR5cGVIVE1MOwotCi0gICAgcmV0dXJu
IENsaXBib2FyZERhdGFUeXBlT3RoZXI7CisgICAgICAgIHJldHVybiAidGV4dC91cmktbGlzdCI7
CisgICAgcmV0dXJuIGNsZWFuVHlwZTsKIH0KIAogUGFzc1JlZlB0cjxDbGlwYm9hcmQ+IENsaXBi
b2FyZDo6Y3JlYXRlKENsaXBib2FyZEFjY2Vzc1BvbGljeSBwb2xpY3ksIERyYWdEYXRhKiBkcmFn
RGF0YSwgRnJhbWUqIGZyYW1lKQpAQCAtMTE3LDM2ICs4OSw3IEBAIHZvaWQgQ2xpcGJvYXJkQ2hy
b21pdW06OmNsZWFyRGF0YShjb25zdCBTdHJpbmcmIHR5cGUpCiAgICAgaWYgKHBvbGljeSgpICE9
IENsaXBib2FyZFdyaXRhYmxlIHx8ICFtX2RhdGFPYmplY3QpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIENsaXBib2FyZERhdGFUeXBlIGRhdGFUeXBlID0gY2xpcGJvYXJkVHlwZUZyb21NSU1FVHlw
ZSh0eXBlKTsKLSAgICBzd2l0Y2ggKGRhdGFUeXBlKSB7Ci0gICAgY2FzZSBDbGlwYm9hcmREYXRh
VHlwZU5vbmU6Ci0gICAgICAgIC8vIElmIGNhbGxlZCB3aXRoIG5vIGFyZ3VtZW50cywgZXZlcnl0
aGluZyBleGNlcHQgdGhlIGZpbGUgbGlzdCBtdXN0IGJlIGNsZWFyZWQuCi0gICAgICAgIC8vIChT
ZWUgSFRNTDUgc3BlYywgIlRoZSBEcmFnRXZlbnQgYW5kIERhdGFUcmFuc2ZlciBpbnRlcmZhY2Vz
IikKLSAgICAgICAgbV9kYXRhT2JqZWN0LT5jbGVhckFsbEV4Y2VwdEZpbGVzKCk7Ci0gICAgICAg
IHJldHVybjsKLQotICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVVUkw6Ci0gICAgY2FzZSBDbGlw
Ym9hcmREYXRhVHlwZVVSSUxpc3Q6Ci0gICAgICAgIG1fZGF0YU9iamVjdC0+Y2xlYXJVUkwoKTsK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZURvd25sb2FkVVJM
OgotICAgICAgICBtX2RhdGFPYmplY3QtPmRvd25sb2FkTWV0YWRhdGEgPSAiIjsKLSAgICAgICAg
cmV0dXJuOwotICAgICAgICAKLSAgICBjYXNlIENsaXBib2FyZERhdGFUeXBlUGxhaW5UZXh0Ogot
ICAgICAgICBtX2RhdGFPYmplY3QtPnBsYWluVGV4dCA9ICIiOwotICAgICAgICByZXR1cm47Ci0K
LSAgICBjYXNlIENsaXBib2FyZERhdGFUeXBlSFRNTDoKLSAgICAgICAgbV9kYXRhT2JqZWN0LT50
ZXh0SHRtbCA9ICIiOwotICAgICAgICBtX2RhdGFPYmplY3QtPmh0bWxCYXNlVXJsID0gS1VSTCgp
OwotICAgICAgICByZXR1cm47Ci0KLSAgICBjYXNlIENsaXBib2FyZERhdGFUeXBlT3RoZXI6Ci0g
ICAgICAgIC8vIE5vdCB5ZXQgaW1wbGVtZW50ZWQsIHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MzQ0MTAKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBtX2Rh
dGFPYmplY3QtPmNsZWFyRGF0YShub3JtYWxpemVUeXBlKHR5cGUpKTsKIAogICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogfQpAQCAtMTU2LDcgKzk5LDcgQEAgdm9pZCBDbGlwYm9hcmRDaHJvbWl1
bTo6Y2xlYXJBbGxEYXRhKCkKICAgICBpZiAocG9saWN5KCkgIT0gQ2xpcGJvYXJkV3JpdGFibGUp
CiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZGF0YU9iamVjdC0+Y2xlYXIoKTsKKyAgICBtX2Rh
dGFPYmplY3QtPmNsZWFyQWxsKCk7CiB9CiAKIFN0cmluZyBDbGlwYm9hcmRDaHJvbWl1bTo6Z2V0
RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGJvb2wmIHN1Y2Nlc3MpIGNvbnN0CkBAIC0xNjUsODAg
KzEwOCw3IEBAIFN0cmluZyBDbGlwYm9hcmRDaHJvbWl1bTo6Z2V0RGF0YShjb25zdCBTdHJpbmcm
IHR5cGUsIGJvb2wmIHN1Y2Nlc3MpIGNvbnN0CiAgICAgaWYgKHBvbGljeSgpICE9IENsaXBib2Fy
ZFJlYWRhYmxlIHx8ICFtX2RhdGFPYmplY3QpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAot
ICAgIENsaXBib2FyZERhdGFUeXBlIGRhdGFUeXBlID0gY2xpcGJvYXJkVHlwZUZyb21NSU1FVHlw
ZSh0eXBlKTsKLSAgICBzd2l0Y2ggKGRhdGFUeXBlKSB7Ci0gICAgY2FzZSBDbGlwYm9hcmREYXRh
VHlwZU5vbmU6Ci0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIC8vIEhhY2sgZm9yIFVS
THMuIGZpbGUgVVJMcyBhcmUgdXNlZCBpbnRlcm5hbGx5IGZvciBkcm9wJ3MgZGVmYXVsdCBhY3Rp
b24sIGJ1dCB3ZSBkb24ndCB3YW50Ci0gICAgLy8gdG8gZXhwb3NlIHRoZW0gdG8gdGhlIHBhZ2Us
IHNvIHdlIGZpbHRlciB0aGVtIG91dCBoZXJlLgotICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVV
UklMaXN0OgotICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgdGV4dDsKLSAgICAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9kYXRhT2JqZWN0LT51cmlMaXN0LnNpemUoKTsgKytp
KSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiB1cmkgPSBtX2RhdGFPYmplY3QtPnVy
aUxpc3RbaV07Ci0gICAgICAgICAgICAgICAgaWYgKHByb3RvY29sSXModXJpLCAiZmlsZSIpKQot
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBBU1NFUlQoIXVy
aS5pc0VtcHR5KCkpOwotICAgICAgICAgICAgICAgIGlmICghdGV4dC5pc0VtcHR5KCkpCi0gICAg
ICAgICAgICAgICAgICAgIHRleHQuYXBwZW5kKHRleHRNSU1FVHlwZUxpbmVTZXBhcmF0b3IpOwot
ICAgICAgICAgICAgICAgIC8vIFVSSXMgaGF2ZSBhbHJlYWR5IGJlZW4gY2Fub25pY2FsaXplZCwg
c28gY29weSBldmVyeXRoaW5nIHZlcmJhdGltLgotICAgICAgICAgICAgICAgIHRleHQuYXBwZW5k
KHVyaSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzdWNjZXNzID0gIXRleHQuaXNFbXB0
eSgpOwotICAgICAgICAgICAgcmV0dXJuIHRleHQ7Ci0gICAgICAgIH0KLQotICAgIGNhc2UgQ2xp
cGJvYXJkRGF0YVR5cGVVUkw6Ci0gICAgICAgIC8vIEluIGNhc2Ugb2YgYSBwcmV2aW91cyBzZXRE
YXRhKCd0ZXh0L3VyaS1saXN0JyksIHNldERhdGEoKSBoYXMgYWxyZWFkeQotICAgICAgICAvLyBw
cmVwYXJlZCB0aGUgJ3VybCcgbWVtYmVyLCBzbyB3ZSBjYW4ganVzdCByZXRyaWV2ZSBpdCBoZXJl
LgotICAgICAgICBpZiAoIW1fZGF0YU9iamVjdC0+dXJsLmlzRW1wdHkoKSAmJiAhbV9kYXRhT2Jq
ZWN0LT51cmwuaXNMb2NhbEZpbGUoKSkgewotICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7Ci0g
ICAgICAgICAgICByZXR1cm4gbV9kYXRhT2JqZWN0LT51cmwuc3RyaW5nKCk7Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZURv
d25sb2FkVVJMOgotICAgICAgICBzdWNjZXNzID0gIW1fZGF0YU9iamVjdC0+ZG93bmxvYWRNZXRh
ZGF0YS5pc0VtcHR5KCk7Ci0gICAgICAgIHJldHVybiBtX2RhdGFPYmplY3QtPmRvd25sb2FkTWV0
YWRhdGE7Ci0gICAgCi0gICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZVBsYWluVGV4dDoKLSAgICAg
ICAgaWYgKGlzRm9yQ29weUFuZFBhc3RlKCkpIHsKLSAgICAgICAgICAgIFBhc3RlYm9hcmRQcml2
YXRlOjpDbGlwYm9hcmRCdWZmZXIgYnVmZmVyID0gCi0gICAgICAgICAgICAgICAgUGFzdGVib2Fy
ZDo6Z2VuZXJhbFBhc3RlYm9hcmQoKS0+aXNTZWxlY3Rpb25Nb2RlKCkgPwotICAgICAgICAgICAg
ICAgIFBhc3RlYm9hcmRQcml2YXRlOjpTZWxlY3Rpb25CdWZmZXIgOiAKLSAgICAgICAgICAgICAg
ICBQYXN0ZWJvYXJkUHJpdmF0ZTo6U3RhbmRhcmRCdWZmZXI7Ci0gICAgICAgICAgICBTdHJpbmcg
dGV4dCA9IENocm9taXVtQnJpZGdlOjpjbGlwYm9hcmRSZWFkUGxhaW5UZXh0KGJ1ZmZlcik7Ci0g
ICAgICAgICAgICBzdWNjZXNzID0gIXRleHQuaXNFbXB0eSgpOwotICAgICAgICAgICAgcmV0dXJu
IHRleHQ7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gT3RoZXJ3aXNlIHJldHVybiB3aGF0ZXZlciBp
cyBzdG9yZWQgaW4gcGxhaW5UZXh0LgotICAgICAgICBzdWNjZXNzID0gIW1fZGF0YU9iamVjdC0+
cGxhaW5UZXh0LmlzRW1wdHkoKTsKLSAgICAgICAgcmV0dXJuIG1fZGF0YU9iamVjdC0+cGxhaW5U
ZXh0OwotCi0gICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZUhUTUw6Ci0gICAgICAgIGlmIChpc0Zv
ckNvcHlBbmRQYXN0ZSgpKSB7Ci0gICAgICAgICAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJv
YXJkQnVmZmVyIGJ1ZmZlciA9IAotICAgICAgICAgICAgICAgIFBhc3RlYm9hcmQ6OmdlbmVyYWxQ
YXN0ZWJvYXJkKCktPmlzU2VsZWN0aW9uTW9kZSgpID8KLSAgICAgICAgICAgICAgICBQYXN0ZWJv
YXJkUHJpdmF0ZTo6U2VsZWN0aW9uQnVmZmVyIDogCi0gICAgICAgICAgICAgICAgUGFzdGVib2Fy
ZFByaXZhdGU6OlN0YW5kYXJkQnVmZmVyOwotICAgICAgICAgICAgU3RyaW5nIGh0bWxUZXh0Owot
ICAgICAgICAgICAgS1VSTCBzb3VyY2VVUkw7Ci0gICAgICAgICAgICBDaHJvbWl1bUJyaWRnZTo6
Y2xpcGJvYXJkUmVhZEhUTUwoYnVmZmVyLCAmaHRtbFRleHQsICZzb3VyY2VVUkwpOwotICAgICAg
ICAgICAgc3VjY2VzcyA9ICFodG1sVGV4dC5pc0VtcHR5KCk7Ci0gICAgICAgICAgICByZXR1cm4g
aHRtbFRleHQ7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gT3RoZXJ3aXNlIHJldHVybiB3aGF0ZXZl
ciBpcyBzdG9yZWQgaW4gdGV4dEh0bWwuCi0gICAgICAgIHN1Y2Nlc3MgPSAhbV9kYXRhT2JqZWN0
LT50ZXh0SHRtbC5pc0VtcHR5KCk7Ci0gICAgICAgIHJldHVybiBtX2RhdGFPYmplY3QtPnRleHRI
dG1sOwotCi0gICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZU90aGVyOgotICAgICAgICAvLyBub3Qg
eWV0IGltcGxlbWVudGVkLCBzZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTM0NDEwCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICB9Ci0KLSAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0dXJuIG1fZGF0YU9i
amVjdC0+Z2V0RGF0YShub3JtYWxpemVUeXBlKHR5cGUpLCBzdWNjZXNzKTsKIH0KIAogYm9vbCBD
bGlwYm9hcmRDaHJvbWl1bTo6c2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmlu
ZyYgZGF0YSkKQEAgLTI0Niw2OSArMTE2LDcgQEAgYm9vbCBDbGlwYm9hcmRDaHJvbWl1bTo6c2V0
RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSkKICAgICBpZiAocG9s
aWN5KCkgIT0gQ2xpcGJvYXJkV3JpdGFibGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IENsaXBib2FyZERhdGFUeXBlIGRhdGFUeXBlID0gY2xpcGJvYXJkVHlwZUZyb21NSU1FVHlwZSh0
eXBlKTsKLSAgICBzd2l0Y2ggKGRhdGFUeXBlKSB7Ci0gICAgY2FzZSBDbGlwYm9hcmREYXRhVHlw
ZU5vbmU6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5
cGVVUkw6Ci0gICAgICAgIC8vIEZvciBzZXREYXRhKCksICJVUkwiIG11c3QgYmUgdHJlYXRlZCBh
cyAidGV4dC91cmktbGlzdCIuCi0gICAgICAgIC8vIChTZWUgSFRNTDUgc3BlYywgIlRoZSBEcmFn
RXZlbnQgYW5kIERhdGFUcmFuc2ZlciBpbnRlcmZhY2VzIikKLSAgICBjYXNlIENsaXBib2FyZERh
dGFUeXBlVVJJTGlzdDoKLSAgICAgICAgbV9kYXRhT2JqZWN0LT51cmwgPSBLVVJMKCk7Ci0gICAg
ICAgIC8vIExpbmUgc2VwYXJhdG9yIGlzIFxyXG4gcGVyIFJGQyAyNDgzIC0gaG93ZXZlciwgZm9y
IGNvbXBhdGliaWxpdHkgcmVhc29ucwotICAgICAgICAvLyB3ZSBhbHNvIGFsbG93IGp1c3QgXG4g
aGVyZS4gCi0gICAgICAgIGRhdGEuc3BsaXQoJ1xuJywgbV9kYXRhT2JqZWN0LT51cmlMaXN0KTsK
LSAgICAgICAgLy8gU3RyaXAgd2hpdGUgc3BhY2Ugb24gYWxsIGxpbmVzLCBpbmNsdWRpbmcgdHJh
aWxpbmcgXHIgZnJvbSBhYm92ZSBzcGxpdC4KLSAgICAgICAgLy8gSWYgdGhpcyBsZWF2ZXMgYSBs
aW5lIGVtcHR5LCByZW1vdmUgaXQgY29tcGxldGVseS4KLSAgICAgICAgLy8KLSAgICAgICAgLy8g
QWxzbywgY29weSB0aGUgZmlyc3QgdmFsaWQgVVJMIGludG8gdGhlICd1cmwnIG1lbWJlciBhcyB3
ZWxsLgotICAgICAgICAvLyBJbiBjYXNlIG5vIGVudHJ5IGlzIGEgdmFsaWQgVVJMIChpLmUuLCBy
ZW1hcmtzIG9ubHkpLCB0aGVuIHdlIGxlYXZlICd1cmwnIGVtcHR5LgotICAgICAgICAvLyBJLmUu
LCBpbiB0aGF0IGNhc2Ugc3Vic2VxdWVudCBjYWxscyB0byBnZXREYXRhKCJVUkwiKSB3aWxsIGdl
dCBhbiBlbXB0eSBzdHJpbmcuCi0gICAgICAgIC8vIFRoaXMgaXMgaW4gbGluZSB3aXRoIHRoZSBI
VE1MNSBzcGVjIChzZWUgIlRoZSBEcmFnRXZlbnQgYW5kIERhdGFUcmFuc2ZlciBpbnRlcmZhY2Vz
IikuCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9kYXRhT2JqZWN0LT51cmlMaXN0
LnNpemUoKTsgLyoqLykgewotICAgICAgICAgICAgU3RyaW5nJiBsaW5lID0gbV9kYXRhT2JqZWN0
LT51cmlMaXN0W2ldOwotICAgICAgICAgICAgbGluZSA9IGxpbmUuc3RyaXBXaGl0ZVNwYWNlKCk7
Ci0gICAgICAgICAgICBpZiAobGluZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBtX2Rh
dGFPYmplY3QtPnVyaUxpc3QucmVtb3ZlKGkpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgKytpOwotICAgICAgICAgICAgLy8gT25seSBjb3B5
IHRoZSBmaXJzdCB2YWxpZCBVUkwuCi0gICAgICAgICAgICBpZiAobV9kYXRhT2JqZWN0LT51cmwu
aXNWYWxpZCgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgLy8gU2tp
cCByZW1hcmtzLgotICAgICAgICAgICAgaWYgKGxpbmVbMF0gPT0gJyMnKQotICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgS1VSTCB1cmwgPSBLVVJMKFBhcnNlZFVSTFN0cmlu
ZywgbGluZSk7Ci0gICAgICAgICAgICBpZiAodXJsLmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAg
ICBtX2RhdGFPYmplY3QtPnVybCA9IHVybDsKLSAgICAgICAgfQotICAgICAgICBpZiAobV9kYXRh
T2JqZWN0LT51cmlMaXN0LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgQVNTRVJUKG1fZGF0YU9i
amVjdC0+dXJsLmlzRW1wdHkoKSk7Ci0gICAgICAgICAgICByZXR1cm4gZGF0YS5pc0VtcHR5KCk7
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBjYXNlIENsaXBib2FyZERh
dGFUeXBlRG93bmxvYWRVUkw6Ci0gICAgICAgIG1fZGF0YU9iamVjdC0+ZG93bmxvYWRNZXRhZGF0
YSA9IGRhdGE7Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgY2FzZSBDbGlwYm9hcmREYXRh
VHlwZVBsYWluVGV4dDoKLSAgICAgICAgbV9kYXRhT2JqZWN0LT5wbGFpblRleHQgPSBkYXRhOwot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVIVE1MOgot
ICAgICAgICBtX2RhdGFPYmplY3QtPnRleHRIdG1sID0gZGF0YTsKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0KLSAgICBjYXNlIENsaXBib2FyZERhdGFUeXBlT3RoZXI6Ci0gICAgICAgIC8vIE5vdCB5
ZXQgaW1wbGVtZW50ZWQsIHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MzQ0MTAKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG1fZGF0YU9iamVj
dC0+c2V0RGF0YShub3JtYWxpemVUeXBlKHR5cGUpLCBkYXRhKTsKIH0KIAogLy8gZXh0ZW5zaW9u
cyBiZXlvbmQgSUUncyBBUEkKQEAgLTMyMSwzMyArMTI5LDcgQEAgSGFzaFNldDxTdHJpbmc+IENs
aXBib2FyZENocm9taXVtOjp0eXBlcygpIGNvbnN0CiAgICAgaWYgKCFtX2RhdGFPYmplY3QpCiAg
ICAgICAgIHJldHVybiByZXN1bHRzOwogCi0gICAgaWYgKCFtX2RhdGFPYmplY3QtPmZpbGVuYW1l
cy5pc0VtcHR5KCkpCi0gICAgICAgIHJlc3VsdHMuYWRkKCJGaWxlcyIpOwotCi0gICAgLy8gSGFj
ayBmb3IgVVJMcy4gZmlsZSBVUkxzIGFyZSB1c2VkIGludGVybmFsbHkgZm9yIGRyb3AncyBkZWZh
dWx0IGFjdGlvbiwgYnV0IHdlIGRvbid0IHdhbnQKLSAgICAvLyB0byBleHBvc2UgdGhlbSB0byB0
aGUgcGFnZSwgc28gd2UgZmlsdGVyIHRoZW0gb3V0IGhlcmUuCi0gICAgaWYgKG1fZGF0YU9iamVj
dC0+dXJsLmlzVmFsaWQoKSAmJiAhbV9kYXRhT2JqZWN0LT51cmwuaXNMb2NhbEZpbGUoKSkgewot
ICAgICAgICBBU1NFUlQoIW1fZGF0YU9iamVjdC0+dXJpTGlzdC5pc0VtcHR5KCkpOwotICAgICAg
ICByZXN1bHRzLmFkZCgiVVJMIik7Ci0gICAgfQotCi0gICAgaWYgKCFtX2RhdGFPYmplY3QtPnVy
aUxpc3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIFZlcmlmeSB0aGF0IHRoZSBVUkkgbGlzdCBj
b250YWlucyBhdCBsZWFzdCBvbmUgbm9uLWZpbGUgVVJMLgotICAgICAgICBmb3IgKFZlY3RvcjxT
dHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fZGF0YU9iamVjdC0+dXJpTGlzdC5iZWdpbigp
OwotICAgICAgICAgICAgIGl0ICE9IG1fZGF0YU9iamVjdC0+dXJpTGlzdC5lbmQoKTsgKytpdCkg
ewotICAgICAgICAgICAgaWYgKCFwcm90b2NvbElzKCppdCwgImZpbGUiKSkgewotICAgICAgICAg
ICAgICAgIC8vIE5vdGUgdGhhdCBldmVuIGlmIHRoZSBVUkkgbGlzdCBpcyBub3QgZW1wdHksIGl0
IG1heSBub3QgYWN0dWFsbHkKLSAgICAgICAgICAgICAgICAvLyBjb250YWluIGEgdmFsaWQgVVJM
LCBzbyB3ZSBjYW4ndCByZXR1cm4gIlVSTCIgaGVyZS4KLSAgICAgICAgICAgICAgICByZXN1bHRz
LmFkZCgidGV4dC91cmktbGlzdCIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFtX2RhdGFPYmplY3QtPnBsYWluVGV4
dC5pc0VtcHR5KCkpIHsKLSAgICAgICAgcmVzdWx0cy5hZGQoIlRleHQiKTsKLSAgICAgICAgcmVz
dWx0cy5hZGQoInRleHQvcGxhaW4iKTsKLSAgICB9CisgICAgcmVzdWx0cyA9IG1fZGF0YU9iamVj
dC0+dHlwZXMoKTsKIAogICAgIHJldHVybiByZXN1bHRzOwogfQpAQCAtMzU3LDEyICsxMzksMTMg
QEAgUGFzc1JlZlB0cjxGaWxlTGlzdD4gQ2xpcGJvYXJkQ2hyb21pdW06OmZpbGVzKCkgY29uc3QK
ICAgICBpZiAocG9saWN5KCkgIT0gQ2xpcGJvYXJkUmVhZGFibGUpCiAgICAgICAgIHJldHVybiBG
aWxlTGlzdDo6Y3JlYXRlKCk7CiAKLSAgICBpZiAoIW1fZGF0YU9iamVjdCB8fCBtX2RhdGFPYmpl
Y3QtPmZpbGVuYW1lcy5pc0VtcHR5KCkpCisgICAgaWYgKCFtX2RhdGFPYmplY3QpCiAgICAgICAg
IHJldHVybiBGaWxlTGlzdDo6Y3JlYXRlKCk7CiAKKyAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYg
ZmlsZW5hbWVzID0gbV9kYXRhT2JqZWN0LT5maWxlbmFtZXMoKTsKICAgICBSZWZQdHI8RmlsZUxp
c3Q+IGZpbGVMaXN0ID0gRmlsZUxpc3Q6OmNyZWF0ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV9kYXRhT2JqZWN0LT5maWxlbmFtZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIGZpbGVM
aXN0LT5hcHBlbmQoRmlsZTo6Y3JlYXRlKG1fZGF0YU9iamVjdC0+ZmlsZW5hbWVzLmF0KGkpKSk7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWxlbmFtZXMuc2l6ZSgpOyArK2kpCisgICAg
ICAgIGZpbGVMaXN0LT5hcHBlbmQoRmlsZTo6Y3JlYXRlKGZpbGVuYW1lcy5hdChpKSkpOwogCiAg
ICAgcmV0dXJuIGZpbGVMaXN0LnJlbGVhc2UoKTsKIH0KQEAgLTQ2MSw3ICsyNDQsNyBAQCBzdGF0
aWMgdm9pZCB3cml0ZUltYWdlVG9EYXRhT2JqZWN0KENocm9taXVtRGF0YU9iamVjdCogZGF0YU9i
amVjdCwgRWxlbWVudCogZWxlbQogICAgIGlmICghaW1hZ2VCdWZmZXIgfHwgIWltYWdlQnVmZmVy
LT5zaXplKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGRhdGFPYmplY3QtPmZpbGVDb250ZW50
ID0gaW1hZ2VCdWZmZXI7CisgICAgZGF0YU9iamVjdC0+c2V0RmlsZUNvbnRlbnQoaW1hZ2VCdWZm
ZXIpOwogCiAgICAgLy8gRGV0ZXJtaW5lIHRoZSBmaWxlbmFtZSBmb3IgdGhlIGZpbGUgY29udGVu
dHMgb2YgdGhlIGltYWdlLiAgV2UgdHJ5IHRvCiAgICAgLy8gdXNlIHRoZSBhbHQgdGFnIGlmIG9u
ZSBleGlzdHMsIG90aGVyd2lzZSB3ZSBmYWxsIGJhY2sgb24gdGhlIHN1Z2dlc3RlZApAQCAtNDY5
LDEzICsyNTIsMTMgQEAgc3RhdGljIHZvaWQgd3JpdGVJbWFnZVRvRGF0YU9iamVjdChDaHJvbWl1
bURhdGFPYmplY3QqIGRhdGFPYmplY3QsIEVsZW1lbnQqIGVsZW0KICAgICAvLyBpbiB0aGUgVVJM
LgogICAgIFN0cmluZyBleHRlbnNpb24gPSBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRQcmVmZXJyZWRF
eHRlbnNpb25Gb3JNSU1FVHlwZSgKICAgICAgICAgY2FjaGVkSW1hZ2UtPnJlc3BvbnNlKCkubWlt
ZVR5cGUoKSk7Ci0gICAgZGF0YU9iamVjdC0+ZmlsZUV4dGVuc2lvbiA9IGV4dGVuc2lvbi5pc0Vt
cHR5KCkgPyAiIiA6ICIuIiArIGV4dGVuc2lvbjsKKyAgICBkYXRhT2JqZWN0LT5zZXRGaWxlRXh0
ZW5zaW9uKGV4dGVuc2lvbi5pc0VtcHR5KCkgPyAiIiA6ICIuIiArIGV4dGVuc2lvbik7CiAgICAg
U3RyaW5nIHRpdGxlID0gZWxlbWVudC0+Z2V0QXR0cmlidXRlKGFsdEF0dHIpOwogICAgIGlmICh0
aXRsZS5pc0VtcHR5KCkpCiAgICAgICAgIHRpdGxlID0gY2FjaGVkSW1hZ2UtPnJlc3BvbnNlKCku
c3VnZ2VzdGVkRmlsZW5hbWUoKTsKIAogICAgIHRpdGxlID0gQ2xpcGJvYXJkQ2hyb21pdW06OnZh
bGlkYXRlRmlsZU5hbWUodGl0bGUsIGRhdGFPYmplY3QpOwotICAgIGRhdGFPYmplY3QtPmZpbGVD
b250ZW50RmlsZW5hbWUgPSB0aXRsZSArIGRhdGFPYmplY3QtPmZpbGVFeHRlbnNpb247CisgICAg
ZGF0YU9iamVjdC0+c2V0RmlsZUNvbnRlbnRGaWxlbmFtZSh0aXRsZSArIGRhdGFPYmplY3QtPmZp
bGVFeHRlbnNpb24oKSk7CiB9CiAKIHZvaWQgQ2xpcGJvYXJkQ2hyb21pdW06OmRlY2xhcmVBbmRX
cml0ZURyYWdJbWFnZShFbGVtZW50KiBlbGVtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0
cmluZyYgdGl0bGUsIEZyYW1lKiBmcmFtZSkKQEAgLTQ4Myw4ICsyNjYsOCBAQCB2b2lkIENsaXBi
b2FyZENocm9taXVtOjpkZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2UoRWxlbWVudCogZWxlbWVudCwg
Y29uc3QgS1VSTCYgdQogICAgIGlmICghbV9kYXRhT2JqZWN0KQogICAgICAgICByZXR1cm47CiAK
LSAgICBtX2RhdGFPYmplY3QtPnVybCA9IHVybDsKLSAgICBtX2RhdGFPYmplY3QtPnVybFRpdGxl
ID0gdGl0bGU7CisgICAgbV9kYXRhT2JqZWN0LT5zZXREYXRhKCJ0ZXh0L3VyaS1saXN0IiwgdXJs
KTsKKyAgICBtX2RhdGFPYmplY3QtPnNldFVybFRpdGxlKHRpdGxlKTsKIAogICAgIC8vIFdyaXRl
IHRoZSBieXRlcyBpbiB0aGUgaW1hZ2UgdG8gdGhlIGZpbGUgZm9ybWF0LgogICAgIHdyaXRlSW1h
Z2VUb0RhdGFPYmplY3QobV9kYXRhT2JqZWN0LmdldCgpLCBlbGVtZW50LCB1cmwpOwpAQCAtNDk4
LDcgKzI4MSw3IEBAIHZvaWQgQ2xpcGJvYXJkQ2hyb21pdW06OmRlY2xhcmVBbmRXcml0ZURyYWdJ
bWFnZShFbGVtZW50KiBlbGVtZW50LCBjb25zdCBLVVJMJiB1CiAgICAgICAgIHJldHVybjsKIAog
ICAgIC8vIFB1dCBpbWcgdGFnIG9uIHRoZSBjbGlwYm9hcmQgcmVmZXJlbmNpbmcgdGhlIGltYWdl
Ci0gICAgbV9kYXRhT2JqZWN0LT50ZXh0SHRtbCA9IGltYWdlVG9NYXJrdXAoZnVsbFVSTCwgZWxl
bWVudCk7CisgICAgbV9kYXRhT2JqZWN0LT5zZXREYXRhKCJ0ZXh0L2h0bWwiLCBpbWFnZVRvTWFy
a3VwKGZ1bGxVUkwsIGVsZW1lbnQpKTsKIH0KIAogdm9pZCBDbGlwYm9hcmRDaHJvbWl1bTo6d3Jp
dGVVUkwoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBGcmFtZSopCkBAIC01
MDYsMTcgKzI4OSwxNSBAQCB2b2lkIENsaXBib2FyZENocm9taXVtOjp3cml0ZVVSTChjb25zdCBL
VVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdGl0bGUsIEZyYW1lKikKICAgICBpZiAoIW1fZGF0YU9i
amVjdCkKICAgICAgICAgcmV0dXJuOwogICAgIEFTU0VSVCghdXJsLmlzRW1wdHkoKSk7Ci0gICAg
bV9kYXRhT2JqZWN0LT51cmwgPSB1cmw7Ci0gICAgbV9kYXRhT2JqZWN0LT51cmxUaXRsZSA9IHRp
dGxlOwotICAgIG1fZGF0YU9iamVjdC0+dXJpTGlzdC5jbGVhcigpOwotICAgIG1fZGF0YU9iamVj
dC0+dXJpTGlzdC5hcHBlbmQodXJsKTsKKyAgICBtX2RhdGFPYmplY3QtPnNldERhdGEoInRleHQv
dXJpLWxpc3QiLCB1cmwpOworICAgIG1fZGF0YU9iamVjdC0+c2V0VXJsVGl0bGUodGl0bGUpOwog
CiAgICAgLy8gVGhlIFVSTCBjYW4gYWxzbyBiZSB1c2VkIGFzIHBsYWluIHRleHQuCi0gICAgbV9k
YXRhT2JqZWN0LT5wbGFpblRleHQgPSB1cmwuc3RyaW5nKCk7CisgICAgbV9kYXRhT2JqZWN0LT5z
ZXREYXRhKCJ0ZXh0L3BsYWluIiwgdXJsLnN0cmluZygpKTsKIAogICAgIC8vIFRoZSBVUkwgY2Fu
IGFsc28gYmUgdXNlZCBhcyBhbiBIVE1MIGZyYWdtZW50LgotICAgIG1fZGF0YU9iamVjdC0+dGV4
dEh0bWwgPSB1cmxUb01hcmt1cCh1cmwsIHRpdGxlKTsKLSAgICBtX2RhdGFPYmplY3QtPmh0bWxC
YXNlVXJsID0gdXJsOworICAgIG1fZGF0YU9iamVjdC0+c2V0RGF0YSgidGV4dC9odG1sIiwgdXJs
VG9NYXJrdXAodXJsLCB0aXRsZSkpOworICAgIG1fZGF0YU9iamVjdC0+c2V0SHRtbEJhc2VVcmwo
dXJsKTsKIH0KIAogdm9pZCBDbGlwYm9hcmRDaHJvbWl1bTo6d3JpdGVSYW5nZShSYW5nZSogc2Vs
ZWN0ZWRSYW5nZSwgRnJhbWUqIGZyYW1lKQpAQCAtNTI1LDE1ICszMDYsMTUgQEAgdm9pZCBDbGlw
Ym9hcmRDaHJvbWl1bTo6d3JpdGVSYW5nZShSYW5nZSogc2VsZWN0ZWRSYW5nZSwgRnJhbWUqIGZy
YW1lKQogICAgIGlmICghbV9kYXRhT2JqZWN0KQogICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9k
YXRhT2JqZWN0LT50ZXh0SHRtbCA9IGNyZWF0ZU1hcmt1cChzZWxlY3RlZFJhbmdlLCAwLCBBbm5v
dGF0ZUZvckludGVyY2hhbmdlLCBmYWxzZSwgQWJzb2x1dGVVUkxzKTsKLSAgICBtX2RhdGFPYmpl
Y3QtPmh0bWxCYXNlVXJsID0gZnJhbWUtPmRvY3VtZW50KCktPnVybCgpOworICAgIG1fZGF0YU9i
amVjdC0+c2V0RGF0YSgidGV4dC9odG1sIiwgY3JlYXRlTWFya3VwKHNlbGVjdGVkUmFuZ2UsIDAs
IEFubm90YXRlRm9ySW50ZXJjaGFuZ2UsIGZhbHNlLCBBYnNvbHV0ZVVSTHMpKTsKKyAgICBtX2Rh
dGFPYmplY3QtPnNldEh0bWxCYXNlVXJsKGZyYW1lLT5kb2N1bWVudCgpLT51cmwoKSk7CiAKICAg
ICBTdHJpbmcgc3RyID0gZnJhbWUtPmVkaXRvcigpLT5zZWxlY3RlZFRleHQoKTsKICNpZiBPUyhX
SU5ET1dTKQogICAgIHJlcGxhY2VOZXdsaW5lc1dpdGhXaW5kb3dzU3R5bGVOZXdsaW5lcyhzdHIp
OwogI2VuZGlmCiAgICAgcmVwbGFjZU5CU1BXaXRoU3BhY2Uoc3RyKTsKLSAgICBtX2RhdGFPYmpl
Y3QtPnBsYWluVGV4dCA9IHN0cjsKKyAgICBtX2RhdGFPYmplY3QtPnNldERhdGEoInRleHQvcGxh
aW4iLCBzdHIpOwogfQogCiB2b2lkIENsaXBib2FyZENocm9taXVtOjp3cml0ZVBsYWluVGV4dChj
b25zdCBTdHJpbmcmIHRleHQpCkBAIC01NDYsNyArMzI3LDcgQEAgdm9pZCBDbGlwYm9hcmRDaHJv
bWl1bTo6d3JpdGVQbGFpblRleHQoY29uc3QgU3RyaW5nJiB0ZXh0KQogICAgIHJlcGxhY2VOZXds
aW5lc1dpdGhXaW5kb3dzU3R5bGVOZXdsaW5lcyhzdHIpOwogI2VuZGlmCiAgICAgcmVwbGFjZU5C
U1BXaXRoU3BhY2Uoc3RyKTsKLSAgICBtX2RhdGFPYmplY3QtPnBsYWluVGV4dCA9IHN0cjsKKyAg
ICBtX2RhdGFPYmplY3QtPnNldERhdGEoInRleHQvcGxhaW4iLCBzdHIpOwogfQogCiBib29sIENs
aXBib2FyZENocm9taXVtOjpoYXNEYXRhKCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
Y2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW1XaW4uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9DbGlwYm9hcmRDaHJvbWl1bVdpbi5jcHAKaW5kZXggYjRhMmMyMS4uZDliYmViNSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bVdpbi5j
cHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bVdpbi5j
cHAKQEAgLTQ0LDExICs0NCwxMSBAQCBTdHJpbmcgQ2xpcGJvYXJkQ2hyb21pdW06OnZhbGlkYXRl
RmlsZU5hbWUoY29uc3QgU3RyaW5nJiB0aXRsZSwgQ2hyb21pdW1EYXRhT2JqZQogewogICAgIC8v
IFJlbW92ZSBhbnkgaW52YWxpZCBmaWxlIHN5c3RlbSBjaGFyYWN0ZXJzLgogICAgIFN0cmluZyBy
ZXN1bHQgPSB0aXRsZS5yZW1vdmVDaGFyYWN0ZXJzKCZpc0ludmFsaWRGaWxlQ2hhcmFjdGVyKTsK
LSAgICBpZiAocmVzdWx0Lmxlbmd0aCgpICsgZGF0YU9iamVjdC0+ZmlsZUV4dGVuc2lvbi5sZW5n
dGgoKSArIDEgPj0gTUFYX1BBVEgpIHsKLSAgICAgICAgaWYgKGRhdGFPYmplY3QtPmZpbGVFeHRl
bnNpb24ubGVuZ3RoKCkgKyAxID49IE1BWF9QQVRIKQotICAgICAgICAgICAgZGF0YU9iamVjdC0+
ZmlsZUV4dGVuc2lvbiA9ICIiOwotICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCgpICsgZGF0YU9i
amVjdC0+ZmlsZUV4dGVuc2lvbi5sZW5ndGgoKSArIDEgPj0gTUFYX1BBVEgpCi0gICAgICAgICAg
ICByZXN1bHQgPSByZXN1bHQuc3Vic3RyaW5nKDAsIE1BWF9QQVRIIC0gZGF0YU9iamVjdC0+Zmls
ZUV4dGVuc2lvbi5sZW5ndGgoKSAtIDEpOworICAgIGlmIChyZXN1bHQubGVuZ3RoKCkgKyBkYXRh
T2JqZWN0LT5maWxlRXh0ZW5zaW9uKCkubGVuZ3RoKCkgKyAxID49IE1BWF9QQVRIKSB7CisgICAg
ICAgIGlmIChkYXRhT2JqZWN0LT5maWxlRXh0ZW5zaW9uKCkubGVuZ3RoKCkgKyAxID49IE1BWF9Q
QVRIKQorICAgICAgICAgICAgZGF0YU9iamVjdC0+c2V0RmlsZUV4dGVuc2lvbigiIik7CisgICAg
ICAgIGlmIChyZXN1bHQubGVuZ3RoKCkgKyBkYXRhT2JqZWN0LT5maWxlRXh0ZW5zaW9uKCkubGVu
Z3RoKCkgKyAxID49IE1BWF9QQVRIKQorICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnN1YnN0
cmluZygwLCBNQVhfUEFUSCAtIGRhdGFPYmplY3QtPmZpbGVFeHRlbnNpb24oKS5sZW5ndGgoKSAt
IDEpOwogICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
bGF0Zm9ybS9jaHJvbWl1bS9EcmFnRGF0YUNocm9taXVtLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0v
Y2hyb21pdW0vRHJhZ0RhdGFDaHJvbWl1bS5jcHAKaW5kZXggNjc0ZDM0ZC4uMGRmNzQ5NiAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EcmFnRGF0YUNocm9taXVtLmNwcAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RyYWdEYXRhQ2hyb21pdW0uY3BwCkBAIC00
Myw1MCArNDMsNTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgYm9vbCBjb250YWlu
c0hUTUwoY29uc3QgQ2hyb21pdW1EYXRhT2JqZWN0KiBkcm9wRGF0YSkKIHsKLSAgICByZXR1cm4g
ZHJvcERhdGEtPnRleHRIdG1sLmxlbmd0aCgpID4gMDsKKyAgICByZXR1cm4gZHJvcERhdGEtPnR5
cGVzKCkuY29udGFpbnMoInRleHQvaHRtbCIpOwogfQogCiBib29sIERyYWdEYXRhOjpjb250YWlu
c1VSTChGaWxlbmFtZUNvbnZlcnNpb25Qb2xpY3kgZmlsZW5hbWVQb2xpY3kpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuICFhc1VSTChmaWxlbmFtZVBvbGljeSkuaXNFbXB0eSgpOworICAgIHJldHVybiBt
X3BsYXRmb3JtRHJhZ0RhdGEtPnR5cGVzKCkuY29udGFpbnMoInRleHQvdXJpLWxpc3QiKQorICAg
ICAgICB8fCAoZmlsZW5hbWVQb2xpY3kgPT0gQ29udmVydEZpbGVuYW1lcyAmJiBtX3BsYXRmb3Jt
RHJhZ0RhdGEtPmNvbnRhaW5zRmlsZW5hbWVzKCkpOwogfQogCiBTdHJpbmcgRHJhZ0RhdGE6OmFz
VVJMKEZpbGVuYW1lQ29udmVyc2lvblBvbGljeSBmaWxlbmFtZVBvbGljeSwgU3RyaW5nKiB0aXRs
ZSkgY29uc3QKIHsKICAgICBTdHJpbmcgdXJsOwotICAgIGlmIChtX3BsYXRmb3JtRHJhZ0RhdGEt
Pmhhc1ZhbGlkVVJMKCkpCi0gICAgICAgIHVybCA9IG1fcGxhdGZvcm1EcmFnRGF0YS0+Z2V0VVJM
KCkuc3RyaW5nKCk7Ci0gICAgZWxzZSBpZiAoZmlsZW5hbWVQb2xpY3kgPT0gQ29udmVydEZpbGVu
YW1lcyAmJiAhbV9wbGF0Zm9ybURyYWdEYXRhLT5maWxlbmFtZXMuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgIFN0cmluZyBmaWxlTmFtZSA9IG1fcGxhdGZvcm1EcmFnRGF0YS0+ZmlsZW5hbWVzWzBdOwot
ICAgICAgICBmaWxlTmFtZSA9IENocm9taXVtQnJpZGdlOjpnZXRBYnNvbHV0ZVBhdGgoZmlsZU5h
bWUpOwotICAgICAgICB1cmwgPSBDaHJvbWl1bUJyaWRnZTo6ZmlsZVBhdGhUb1VSTChmaWxlTmFt
ZSkuc3RyaW5nKCk7CisgICAgaWYgKGNvbnRhaW5zVVJMKERvTm90Q29udmVydEZpbGVuYW1lcykp
IHsKKyAgICAgICAgYm9vbCBpZ25vcmVkU3VjY2VzczsKKyAgICAgICAgdXJsID0gbV9wbGF0Zm9y
bURyYWdEYXRhLT5nZXREYXRhKCJ0ZXh0L3VyaS1saXN0IiwgaWdub3JlZFN1Y2Nlc3MpOworICAg
ICAgICBpZiAodGl0bGUpCisgICAgICAgICAgICAqdGl0bGUgPSBtX3BsYXRmb3JtRHJhZ0RhdGEt
PnVybFRpdGxlKCk7CisgICAgfSBlbHNlIGlmIChmaWxlbmFtZVBvbGljeSA9PSBDb252ZXJ0Rmls
ZW5hbWVzICYmIGNvbnRhaW5zRmlsZXMoKSkgeworICAgICAgICB1cmwgPSBDaHJvbWl1bUJyaWRn
ZTo6ZmlsZVBhdGhUb1VSTChDaHJvbWl1bUJyaWRnZTo6Z2V0QWJzb2x1dGVQYXRoKG1fcGxhdGZv
cm1EcmFnRGF0YS0+ZmlsZW5hbWVzKClbMF0pKTsKICAgICB9Ci0gCi0gICAgLy8gfHRpdGxlfCBj
YW4gYmUgTlVMTAotICAgIGlmICh0aXRsZSkKLSAgICAgICAgKnRpdGxlID0gbV9wbGF0Zm9ybURy
YWdEYXRhLT51cmxUaXRsZTsKICAgICByZXR1cm4gdXJsOwogfQogCiBib29sIERyYWdEYXRhOjpj
b250YWluc0ZpbGVzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gIW1fcGxhdGZvcm1EcmFnRGF0YS0+
ZmlsZW5hbWVzLmlzRW1wdHkoKTsKKyAgICByZXR1cm4gbV9wbGF0Zm9ybURyYWdEYXRhLT5jb250
YWluc0ZpbGVuYW1lcygpOwogfQogCiB2b2lkIERyYWdEYXRhOjphc0ZpbGVuYW1lcyhWZWN0b3I8
U3RyaW5nPiYgcmVzdWx0KSBjb25zdAogewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9w
bGF0Zm9ybURyYWdEYXRhLT5maWxlbmFtZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIHJlc3VsdC5h
cHBlbmQobV9wbGF0Zm9ybURyYWdEYXRhLT5maWxlbmFtZXNbaV0pOworICAgIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBmaWxlbmFtZXMgPSBtX3BsYXRmb3JtRHJhZ0RhdGEtPmZpbGVuYW1lcygpOwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmlsZW5hbWVzLnNpemUoKTsgKytpKQorICAgICAg
ICByZXN1bHQuYXBwZW5kKGZpbGVuYW1lc1tpXSk7CiB9CiAKIGJvb2wgRHJhZ0RhdGE6OmNvbnRh
aW5zUGxhaW5UZXh0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gIW1fcGxhdGZvcm1EcmFnRGF0YS0+
cGxhaW5UZXh0LmlzRW1wdHkoKTsKKyAgICByZXR1cm4gbV9wbGF0Zm9ybURyYWdEYXRhLT50eXBl
cygpLmNvbnRhaW5zKCJ0ZXh0L3BsYWluIik7CiB9CiAKIFN0cmluZyBEcmFnRGF0YTo6YXNQbGFp
blRleHQoKSBjb25zdAogewotICAgIHJldHVybiBtX3BsYXRmb3JtRHJhZ0RhdGEtPnBsYWluVGV4
dDsKKyAgICBib29sIGlnbm9yZWRTdWNjZXNzOworICAgIHJldHVybiBtX3BsYXRmb3JtRHJhZ0Rh
dGEtPmdldERhdGEoInRleHQvcGxhaW4iLCBpZ25vcmVkU3VjY2Vzcyk7CiB9CiAKIGJvb2wgRHJh
Z0RhdGE6OmNvbnRhaW5zQ29sb3IoKSBjb25zdApAQCAtMTAxLDggKzEwMSw4IEBAIGJvb2wgRHJh
Z0RhdGE6OmNhblNtYXJ0UmVwbGFjZSgpIGNvbnN0CiAgICAgLy8gVGhpcyBpcyBhbGxvd2VkIHdo
ZW5ldmVyIHRoZSBkcmFnIGRhdGEgY29udGFpbnMgYSAncmFuZ2UnIChpZS4sCiAgICAgLy8gQ2xp
cGJvYXJkV2luOjp3cml0ZVJhbmdlIGlzIGNhbGxlZCkuICBGb3IgZXhhbXBsZSwgZHJhZ2dpbmcg
YSBsaW5rCiAgICAgLy8gc2hvdWxkIG5vdCByZXN1bHQgaW4gYSBzcGFjZSBiZWluZyBhZGRlZC4K
LSAgICByZXR1cm4gIW1fcGxhdGZvcm1EcmFnRGF0YS0+cGxhaW5UZXh0LmlzRW1wdHkoKQotICAg
ICAgICAmJiAhbV9wbGF0Zm9ybURyYWdEYXRhLT5oYXNWYWxpZFVSTCgpOworICAgIHJldHVybiBt
X3BsYXRmb3JtRHJhZ0RhdGEtPnR5cGVzKCkuY29udGFpbnMoInRleHQvcGxhaW4iKQorICAgICAg
ICAmJiAhbV9wbGF0Zm9ybURyYWdEYXRhLT50eXBlcygpLmNvbnRhaW5zKCJ0ZXh0L3VyaS1saXN0
Iik7CiB9CiAKIGJvb2wgRHJhZ0RhdGE6OmNvbnRhaW5zQ29tcGF0aWJsZUNvbnRlbnQoKSBjb25z
dApAQCAtMTM0LDkgKzEzNCwxMCBAQCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IERyYWdE
YXRhOjphc0ZyYWdtZW50KERvY3VtZW50KiBkb2MpIGNvbnN0CiAgICAgICAgIC8vICAgIHJldHVy
biBmcmFnbWVudDsKICAgICB9CiAKLSAgICBpZiAoIW1fcGxhdGZvcm1EcmFnRGF0YS0+dGV4dEh0
bWwuaXNFbXB0eSgpKSB7CisgICAgaWYgKG1fcGxhdGZvcm1EcmFnRGF0YS0+dHlwZXMoKS5jb250
YWlucygidGV4dC9odG1sIikpIHsKKyAgICAgICAgYm9vbCBpZ25vcmVkU3VjY2VzczsKICAgICAg
ICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9t
TWFya3VwKGRvYywKLSAgICAgICAgICAgIG1fcGxhdGZvcm1EcmFnRGF0YS0+dGV4dEh0bWwsIG1f
cGxhdGZvcm1EcmFnRGF0YS0+aHRtbEJhc2VVcmwsIEZyYWdtZW50U2NyaXB0aW5nTm90QWxsb3dl
ZCk7CisgICAgICAgICAgICBtX3BsYXRmb3JtRHJhZ0RhdGEtPmdldERhdGEoInRleHQvaHRtbCIs
IGlnbm9yZWRTdWNjZXNzKSwgbV9wbGF0Zm9ybURyYWdEYXRhLT5odG1sQmFzZVVybCgpLCBGcmFn
bWVudFNjcmlwdGluZ05vdEFsbG93ZWQpOwogICAgICAgICByZXR1cm4gZnJhZ21lbnQucmVsZWFz
ZSgpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggNDFhYjA4ZC4uZTBiMGJkMCAxMDA2NDQKLS0t
IGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsNDEgQEAKKzIwMTAtMDktMjUgIERhbmllbCBDaGVuZyAgPGRjaGVuZ0Bj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgW2Nocm9taXVtXSBSZWZhY3RvciBDaHJvbWl1bURhdGFPYmplY3QgdG8gdXNlIGdldHRl
cnMvc2V0dGVycy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTQ2NTU5CisKKyAgICAgICAgVGhpcyBpcyBhbiBpbnRlcm1lZGlhdGUgc3RlcCB0byBjb252
ZXJ0aW5nIENocm9taXVtRGF0YU9iamVjdCB0byB1c2UKKyAgICAgICAgY2FsbGJhY2tzIHRvIHRo
ZSBicm93c2VyIHRvIHJldHJpZXZlIGRhdGEuIFNwZWNpYWwgaGFuZGxpbmcgZm9yIFVSTCBhbmQK
KyAgICAgICAgdGV4dC91cmktbGlzdCBoYXMgYWxzbyBiZWVuIHJlbW92ZWQ7IHRoZXkgbm93IHRy
ZWF0IHRoZWlyIGRhdGEgYXJndW1lbnQKKyAgICAgICAgYXMganVzdCBhbiBvcGFxdWUgYmxvYiBv
ZiB0ZXh0LgorCisgICAgICAgICogcHVibGljL1dlYkRyYWdEYXRhLmg6CisgICAgICAgICogc3Jj
L1dlYkRyYWdEYXRhLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0RhdGE6OmluaXRpYWxp
emUpOgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFnRGF0YTo6dXJsKToKKyAgICAgICAgKFdlYktp
dDo6V2ViRHJhZ0RhdGE6OnNldFVSTCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRyYWdEYXRhOjp1
cmxUaXRsZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkRyYWdEYXRhOjpzZXRVUkxUaXRsZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkRyYWdEYXRhOjpkb3dubG9hZE1ldGFkYXRhKToKKyAgICAgICAg
KFdlYktpdDo6V2ViRHJhZ0RhdGE6OnNldERvd25sb2FkTWV0YWRhdGEpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJEcmFnRGF0YTo6ZmlsZUV4dGVuc2lvbik6CisgICAgICAgIChXZWJLaXQ6OldlYkRy
YWdEYXRhOjpzZXRGaWxlRXh0ZW5zaW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0RhdGE6
Omhhc0ZpbGVOYW1lcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkRyYWdEYXRhOjpmaWxlTmFtZXMp
OgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFnRGF0YTo6c2V0RmlsZU5hbWVzKToKKyAgICAgICAg
KFdlYktpdDo6V2ViRHJhZ0RhdGE6OmFwcGVuZFRvRmlsZU5hbWVzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViRHJhZ0RhdGE6OnBsYWluVGV4dCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRyYWdEYXRh
OjpzZXRQbGFpblRleHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFnRGF0YTo6aHRtbFRleHQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFnRGF0YTo6c2V0SFRNTFRleHQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJEcmFnRGF0YTo6aHRtbEJhc2VVUkwpOgorICAgICAgICAoV2ViS2l0OjpXZWJE
cmFnRGF0YTo6c2V0SFRNTEJhc2VVUkwpOgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFnRGF0YTo6
ZmlsZUNvbnRlbnRGaWxlTmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkRyYWdEYXRhOjpzZXRG
aWxlQ29udGVudEZpbGVOYW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0RhdGE6OmZpbGVD
b250ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0RhdGE6OnNldEZpbGVDb250ZW50KToK
KwogMjAxMC0wOS0yMiAgS2VubmV0aCBSdXNzZWxsICA8a2JyQGdvb2dsZS5jb20+CiAKICAgICAg
ICAgVW5yZXZpZXdlZCwgQ2hyb21pdW0gYnVpbGQgZml4LiBGaXggYnVpbGQgd2hlbiBhY2NlbGVy
YXRlZApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJEcmFnRGF0YS5oIGIv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJEcmFnRGF0YS5oCmluZGV4IDI5Nzk1MTkuLjY3NDhm
ZTAgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRHJhZ0RhdGEuaAorKysg
Yi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkRyYWdEYXRhLmgKQEAgLTY2LDcgKzY2LDcgQEAg
cHVibGljOgogCiAgICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiAhbV9wcml2YXRlOyB9
CiAKLSAgICBXRUJLSVRfQVBJIFdlYlVSTCB1cmwoKSBjb25zdDsKKyAgICBXRUJLSVRfQVBJIFdl
YlN0cmluZyB1cmwoKSBjb25zdDsKICAgICBXRUJLSVRfQVBJIHZvaWQgc2V0VVJMKGNvbnN0IFdl
YlVSTCYpOwogCiAgICAgV0VCS0lUX0FQSSBXZWJTdHJpbmcgdXJsVGl0bGUoKSBjb25zdDsKZGlm
ZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRHJhZ0RhdGEuY3BwIGIvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJEcmFnRGF0YS5jcHAKaW5kZXggNjQzYzM1ZC4uYTg2NmYwNCAxMDA2NDQK
LS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEcmFnRGF0YS5jcHAKKysrIGIvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJEcmFnRGF0YS5jcHAKQEAgLTQ4LDcgKzQ4LDcgQEAgY2xhc3MgV2ViRHJh
Z0RhdGFQcml2YXRlIDogcHVibGljIENocm9taXVtRGF0YU9iamVjdCB7CiAKIHZvaWQgV2ViRHJh
Z0RhdGE6OmluaXRpYWxpemUoKQogewotICAgIGFzc2lnbihzdGF0aWNfY2FzdDxXZWJEcmFnRGF0
YVByaXZhdGUqPihDaHJvbWl1bURhdGFPYmplY3Q6OmNyZWF0ZSgpLnJlbGVhc2VSZWYoKSkpOwor
ICAgIGFzc2lnbihzdGF0aWNfY2FzdDxXZWJEcmFnRGF0YVByaXZhdGUqPihDaHJvbWl1bURhdGFP
YmplY3Q6OmNyZWF0ZShDbGlwYm9hcmQ6OkRyYWdBbmREcm9wKS5yZWxlYXNlUmVmKCkpKTsKIH0K
IAogdm9pZCBXZWJEcmFnRGF0YTo6cmVzZXQoKQpAQCAtNjQsMTM3ICs2NCwxNDQgQEAgdm9pZCBX
ZWJEcmFnRGF0YTo6YXNzaWduKGNvbnN0IFdlYkRyYWdEYXRhJiBvdGhlcikKICAgICBhc3NpZ24o
cCk7CiB9CiAKLVdlYlVSTCBXZWJEcmFnRGF0YTo6dXJsKCkgY29uc3QKK1dlYlN0cmluZyBXZWJE
cmFnRGF0YTo6dXJsKCkgY29uc3QKIHsKICAgICBBU1NFUlQoIWlzTnVsbCgpKTsKLSAgICByZXR1
cm4gbV9wcml2YXRlLT5nZXRVUkwoKTsKKyAgICBib29sIGlnbm9yZWRTdWNjZXNzOworICAgIHJl
dHVybiBtX3ByaXZhdGUtPmdldERhdGEoInRleHQvdXJpLWxpc3QiLCBpZ25vcmVkU3VjY2Vzcyk7
CiB9CiAKIHZvaWQgV2ViRHJhZ0RhdGE6OnNldFVSTChjb25zdCBXZWJVUkwmIHVybCkKIHsKICAg
ICBlbnN1cmVNdXRhYmxlKCk7Ci0gICAgbV9wcml2YXRlLT5zZXRVUkwodXJsKTsKKyAgICBtX3By
aXZhdGUtPnNldERhdGEoInRleHQvdXJpLWxpc3QiLCBLVVJMKHVybCkuc3RyaW5nKCkpOwogfQog
CiBXZWJTdHJpbmcgV2ViRHJhZ0RhdGE6OnVybFRpdGxlKCkgY29uc3QKIHsKICAgICBBU1NFUlQo
IWlzTnVsbCgpKTsKLSAgICByZXR1cm4gbV9wcml2YXRlLT51cmxUaXRsZTsKKyAgICByZXR1cm4g
bV9wcml2YXRlLT51cmxUaXRsZSgpOwogfQogCiB2b2lkIFdlYkRyYWdEYXRhOjpzZXRVUkxUaXRs
ZShjb25zdCBXZWJTdHJpbmcmIHVybFRpdGxlKQogewogICAgIGVuc3VyZU11dGFibGUoKTsKLSAg
ICBtX3ByaXZhdGUtPnVybFRpdGxlID0gdXJsVGl0bGU7CisgICAgbV9wcml2YXRlLT5zZXRVcmxU
aXRsZSh1cmxUaXRsZSk7CiB9CiAKIFdlYlN0cmluZyBXZWJEcmFnRGF0YTo6ZG93bmxvYWRNZXRh
ZGF0YSgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFpc051bGwoKSk7Ci0gICAgcmV0dXJuIG1fcHJp
dmF0ZS0+ZG93bmxvYWRNZXRhZGF0YTsKKyAgICBib29sIGlnbm9yZWRTdWNjZXNzOworICAgIHJl
dHVybiBtX3ByaXZhdGUtPmdldERhdGEoImRvd25sb2FkdXJsIiwgaWdub3JlZFN1Y2Nlc3MpOwog
fQogCiB2b2lkIFdlYkRyYWdEYXRhOjpzZXREb3dubG9hZE1ldGFkYXRhKGNvbnN0IFdlYlN0cmlu
ZyYgZG93bmxvYWRNZXRhZGF0YSkKIHsKICAgICBlbnN1cmVNdXRhYmxlKCk7Ci0gICAgbV9wcml2
YXRlLT5kb3dubG9hZE1ldGFkYXRhID0gZG93bmxvYWRNZXRhZGF0YTsKKyAgICBtX3ByaXZhdGUt
PnNldERhdGEoImRvd25sb2FkdXJsIiwgZG93bmxvYWRNZXRhZGF0YSk7CiB9CiAKIFdlYlN0cmlu
ZyBXZWJEcmFnRGF0YTo6ZmlsZUV4dGVuc2lvbigpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFpc051
bGwoKSk7Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+ZmlsZUV4dGVuc2lvbjsKKyAgICByZXR1cm4g
bV9wcml2YXRlLT5maWxlRXh0ZW5zaW9uKCk7CiB9CiAKIHZvaWQgV2ViRHJhZ0RhdGE6OnNldEZp
bGVFeHRlbnNpb24oY29uc3QgV2ViU3RyaW5nJiBmaWxlRXh0ZW5zaW9uKQogewogICAgIGVuc3Vy
ZU11dGFibGUoKTsKLSAgICBtX3ByaXZhdGUtPmZpbGVFeHRlbnNpb24gPSBmaWxlRXh0ZW5zaW9u
OworICAgIG1fcHJpdmF0ZS0+c2V0RmlsZUV4dGVuc2lvbihmaWxlRXh0ZW5zaW9uKTsKIH0KIAog
Ym9vbCBXZWJEcmFnRGF0YTo6aGFzRmlsZU5hbWVzKCkgY29uc3QKIHsKICAgICBBU1NFUlQoIWlz
TnVsbCgpKTsKLSAgICByZXR1cm4gIW1fcHJpdmF0ZS0+ZmlsZW5hbWVzLmlzRW1wdHkoKTsKKyAg
ICByZXR1cm4gbV9wcml2YXRlLT5jb250YWluc0ZpbGVuYW1lcygpOwogfQogCiB2b2lkIFdlYkRy
YWdEYXRhOjpmaWxlTmFtZXMoV2ViVmVjdG9yPFdlYlN0cmluZz4mIGZpbGVOYW1lcykgY29uc3QK
IHsKICAgICBBU1NFUlQoIWlzTnVsbCgpKTsKLSAgICBmaWxlTmFtZXMgPSBtX3ByaXZhdGUtPmZp
bGVuYW1lczsKKyAgICBmaWxlTmFtZXMgPSBtX3ByaXZhdGUtPmZpbGVuYW1lcygpOwogfQogCiB2
b2lkIFdlYkRyYWdEYXRhOjpzZXRGaWxlTmFtZXMoY29uc3QgV2ViVmVjdG9yPFdlYlN0cmluZz4m
IGZpbGVOYW1lcykKIHsKICAgICBlbnN1cmVNdXRhYmxlKCk7Ci0gICAgbV9wcml2YXRlLT5maWxl
bmFtZXMuY2xlYXIoKTsKLSAgICBtX3ByaXZhdGUtPmZpbGVuYW1lcy5hcHBlbmQoZmlsZU5hbWVz
LmRhdGEoKSwgZmlsZU5hbWVzLnNpemUoKSk7CisgICAgVmVjdG9yPFN0cmluZz4gZmlsZU5hbWVz
Q29weTsKKyAgICBmaWxlTmFtZXNDb3B5LmFwcGVuZChmaWxlTmFtZXMuZGF0YSgpLCBmaWxlTmFt
ZXMuc2l6ZSgpKTsKKyAgICBtX3ByaXZhdGUtPnNldEZpbGVuYW1lcyhmaWxlTmFtZXNDb3B5KTsK
IH0KIAogdm9pZCBXZWJEcmFnRGF0YTo6YXBwZW5kVG9GaWxlTmFtZXMoY29uc3QgV2ViU3RyaW5n
JiBmaWxlTmFtZSkKIHsKICAgICBlbnN1cmVNdXRhYmxlKCk7Ci0gICAgbV9wcml2YXRlLT5maWxl
bmFtZXMuYXBwZW5kKGZpbGVOYW1lKTsKKyAgICBWZWN0b3I8U3RyaW5nPiBmaWxlTmFtZXMgPSBt
X3ByaXZhdGUtPmZpbGVuYW1lcygpOworICAgIGZpbGVOYW1lcy5hcHBlbmQoZmlsZU5hbWUpOwor
ICAgIG1fcHJpdmF0ZS0+c2V0RmlsZW5hbWVzKGZpbGVOYW1lcyk7CiB9CiAKIFdlYlN0cmluZyBX
ZWJEcmFnRGF0YTo6cGxhaW5UZXh0KCkgY29uc3QKIHsKICAgICBBU1NFUlQoIWlzTnVsbCgpKTsK
LSAgICByZXR1cm4gbV9wcml2YXRlLT5wbGFpblRleHQ7CisgICAgYm9vbCBpZ25vcmVkU3VjY2Vz
czsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5nZXREYXRhKCJ0ZXh0L3BsYWluIiwgaWdub3JlZFN1
Y2Nlc3MpOwogfQogCiB2b2lkIFdlYkRyYWdEYXRhOjpzZXRQbGFpblRleHQoY29uc3QgV2ViU3Ry
aW5nJiBwbGFpblRleHQpCiB7CiAgICAgZW5zdXJlTXV0YWJsZSgpOwotICAgIG1fcHJpdmF0ZS0+
cGxhaW5UZXh0ID0gcGxhaW5UZXh0OworICAgIG1fcHJpdmF0ZS0+c2V0RGF0YSgidGV4dC9wbGFp
biIsIHBsYWluVGV4dCk7CiB9CiAKIFdlYlN0cmluZyBXZWJEcmFnRGF0YTo6aHRtbFRleHQoKSBj
b25zdAogewogICAgIEFTU0VSVCghaXNOdWxsKCkpOwotICAgIHJldHVybiBtX3ByaXZhdGUtPnRl
eHRIdG1sOworICAgIGJvb2wgaWdub3JlZFN1Y2Nlc3M7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+
Z2V0RGF0YSgidGV4dC9odG1sIiwgaWdub3JlZFN1Y2Nlc3MpOwogfQogCiB2b2lkIFdlYkRyYWdE
YXRhOjpzZXRIVE1MVGV4dChjb25zdCBXZWJTdHJpbmcmIGh0bWxUZXh0KQogewogICAgIGVuc3Vy
ZU11dGFibGUoKTsKLSAgICBtX3ByaXZhdGUtPnRleHRIdG1sID0gaHRtbFRleHQ7CisgICAgbV9w
cml2YXRlLT5zZXREYXRhKCJ0ZXh0L2h0bWwiLCBodG1sVGV4dCk7CiB9CiAKIFdlYlVSTCBXZWJE
cmFnRGF0YTo6aHRtbEJhc2VVUkwoKSBjb25zdAogewogICAgIEFTU0VSVCghaXNOdWxsKCkpOwot
ICAgIHJldHVybiBtX3ByaXZhdGUtPmh0bWxCYXNlVXJsOworICAgIHJldHVybiBtX3ByaXZhdGUt
Pmh0bWxCYXNlVXJsKCk7CiB9CiAKIHZvaWQgV2ViRHJhZ0RhdGE6OnNldEhUTUxCYXNlVVJMKGNv
bnN0IFdlYlVSTCYgaHRtbEJhc2VVUkwpCiB7CiAgICAgZW5zdXJlTXV0YWJsZSgpOwotICAgIG1f
cHJpdmF0ZS0+aHRtbEJhc2VVcmwgPSBodG1sQmFzZVVSTDsKKyAgICBtX3ByaXZhdGUtPnNldEh0
bWxCYXNlVXJsKGh0bWxCYXNlVVJMKTsKIH0KIAogV2ViU3RyaW5nIFdlYkRyYWdEYXRhOjpmaWxl
Q29udGVudEZpbGVOYW1lKCkgY29uc3QKIHsKICAgICBBU1NFUlQoIWlzTnVsbCgpKTsKLSAgICBy
ZXR1cm4gbV9wcml2YXRlLT5maWxlQ29udGVudEZpbGVuYW1lOworICAgIHJldHVybiBtX3ByaXZh
dGUtPmZpbGVDb250ZW50RmlsZW5hbWUoKTsKIH0KIAogdm9pZCBXZWJEcmFnRGF0YTo6c2V0Rmls
ZUNvbnRlbnRGaWxlTmFtZShjb25zdCBXZWJTdHJpbmcmIGZpbGVOYW1lKQogewogICAgIGVuc3Vy
ZU11dGFibGUoKTsKLSAgICBtX3ByaXZhdGUtPmZpbGVDb250ZW50RmlsZW5hbWUgPSBmaWxlTmFt
ZTsKKyAgICBtX3ByaXZhdGUtPnNldEZpbGVDb250ZW50RmlsZW5hbWUoZmlsZU5hbWUpOwogfQog
CiBXZWJEYXRhIFdlYkRyYWdEYXRhOjpmaWxlQ29udGVudCgpIGNvbnN0CiB7CiAgICAgQVNTRVJU
KCFpc051bGwoKSk7Ci0gICAgcmV0dXJuIFdlYkRhdGEobV9wcml2YXRlLT5maWxlQ29udGVudCk7
CisgICAgcmV0dXJuIFdlYkRhdGEobV9wcml2YXRlLT5maWxlQ29udGVudCgpKTsKIH0KIAogdm9p
ZCBXZWJEcmFnRGF0YTo6c2V0RmlsZUNvbnRlbnQoY29uc3QgV2ViRGF0YSYgZmlsZUNvbnRlbnQp
CiB7CiAgICAgZW5zdXJlTXV0YWJsZSgpOwotICAgIG1fcHJpdmF0ZS0+ZmlsZUNvbnRlbnQgPSBm
aWxlQ29udGVudDsKKyAgICBtX3ByaXZhdGUtPnNldEZpbGVDb250ZW50KGZpbGVDb250ZW50KTsK
IH0KIAogV2ViRHJhZ0RhdGE6OldlYkRyYWdEYXRhKGNvbnN0IFdURjo6UGFzc1JlZlB0cjxXZWJD
b3JlOjpDaHJvbWl1bURhdGFPYmplY3Q+JiBkYXRhKQo=
</data>
<flag name="review"
          id="58395"
          type_id="1"
          status="-"
          setter="tony"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68990</attachid>
            <date>2010-09-27 16:47:37 -0700</date>
            <delta_ts>2010-09-28 16:55:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>foo.patch</filename>
            <type>text/plain</type>
            <size>51738</size>
            <attacher name="Daniel Cheng">dcheng</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBlZjlhZDU5Li4yZmMzNDU5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTAtMDkt
MjUgIERhbmllbCBDaGVuZyAgPGRjaGVuZ0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW2Nocm9taXVtXSBSZWZhY3RvciBDaHJv
bWl1bURhdGFPYmplY3QgdG8gdXNlIGdldHRlcnMvc2V0dGVycy4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ2NTU5CisKKyAgICAgICAgVGhpcyBpcyBh
biBpbnRlcm1lZGlhdGUgc3RlcCB0byBjb252ZXJ0aW5nIENocm9taXVtRGF0YU9iamVjdCB0byB1
c2UKKyAgICAgICAgY2FsbGJhY2tzIHRvIHRoZSBicm93c2VyIHRvIHJldHJpZXZlIGRhdGEuIFNw
ZWNpYWwgaGFuZGxpbmcgZm9yIFVSTCBhbmQKKyAgICAgICAgdGV4dC91cmktbGlzdCBoYXMgYWxz
byBiZWVuIHJlbW92ZWQ7IHRoZXkgbm93IHRyZWF0IHRoZWlyIGRhdGEgYXJndW1lbnQKKyAgICAg
ICAgYXMganVzdCBhbiBvcGFxdWUgYmxvYiBvZiB0ZXh0LgorCisgICAgICAgIFRoZSBsYXlvdXQg
dGVzdHMgaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gcmVmbGVjdCB0aGUgZmFjdCB0aGF0IFVSTCBpcwor
ICAgICAgICBzaW1wbHkgYSBzeW5vbnltIGZvciB0ZXh0L3VyaS1saXN0LiBJdCBhbHNvIGNoZWNr
cyB0aGUgZXF1aXZhbGVuY2Ugb2YKKyAgICAgICAgdGV4dCBhbmQgdGV4dC9wbGFpbiBhcyB3ZWxs
LgorCisgICAgICAgICogZWRpdGluZy9wYXN0ZWJvYXJkL2RhdGFUcmFuc2Zlci1zZXREYXRhLWdl
dERhdGEtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGVkaXRpbmcvcGFzdGVib2FyZC9zY3JpcHQt
dGVzdHMvZGF0YVRyYW5zZmVyLXNldERhdGEtZ2V0RGF0YS5qczoKKyAgICAgICAgKGRvRHJvcCk6
CisgICAgICAgICh0ZXN0KToKKyAgICAgICAgKHJ1blRlc3QpOgorCiAyMDEwLTA5LTIyICBNaWNo
YWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEdh
dmluIEJhcnJhY2xvdWdoLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJv
YXJkL2RhdGFUcmFuc2Zlci1zZXREYXRhLWdldERhdGEtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvZWRpdGluZy9wYXN0ZWJvYXJkL2RhdGFUcmFuc2Zlci1zZXREYXRhLWdldERhdGEtZXhwZWN0
ZWQudHh0CmluZGV4IDA2M2E2YmIuLmFmNDY1YWYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Vk
aXRpbmcvcGFzdGVib2FyZC9kYXRhVHJhbnNmZXItc2V0RGF0YS1nZXREYXRhLWV4cGVjdGVkLnR4
dAorKysgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQvZGF0YVRyYW5zZmVyLXNldERh
dGEtZ2V0RGF0YS1leHBlY3RlZC50eHQKQEAgLTEsMzQgKzEsMzMgQEAKLVRlc3RzIGNvcnJlY3Qg
YmVoYXZpb3Igb2YgZXZlbnQuZGF0YVRyYW5zZmVyLnNldERhdGEvZ2V0RGF0YSBmb3IgJ1VSTCcs
ICd0ZXh0L3VyaS1saXN0JyBhbmQgJ3RleHQvcGxhaW4nCi0KLU9uIHN1Y2Nlc3MsIHlvdSB3aWxs
IHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBM
RVRFIi4KLQotCi0tLS0gVGVzdCBzZXQvZ2V0ICdVUkwnOgotUEFTUyBnZXREYXRhUmVzdWx0VHlw
ZSBpcyAic3RyaW5nIgotUEFTUyBnZXREYXRhTGluZXMubGVuZ3RoIGlzIDEKLVBBU1MgZ2V0RGF0
YUxpbmVzWzBdLnJlcGxhY2UoL1wvJC8sICcnKSBpcyAiaHR0cDovL3Rlc3QuY29tIgotLS0tIFRl
c3Qgc2V0L2dldCAndGV4dC91cmktbGlzdCc6Ci1QQVNTIGdldERhdGFSZXN1bHRUeXBlIGlzICJz
dHJpbmciCi1QQVNTIGdldERhdGFMaW5lcy5sZW5ndGggaXMgMgotUEFTUyBnZXREYXRhTGluZXNb
MF0ucmVwbGFjZSgvXC8kLywgJycpIGlzICJodHRwOi8vdGVzdC5jb20iCi1QQVNTIGdldERhdGFM
aW5lc1sxXS5yZXBsYWNlKC9cLyQvLCAnJykgaXMgImh0dHA6Ly9jaGVjay5jb20iCi0tLS0gVGVz
dCBzZXQgJ3RleHQvdXJpLWxpc3QnLCBnZXQgJ1VSTCc6Ci1QQVNTIGdldERhdGFSZXN1bHRUeXBl
IGlzICJzdHJpbmciCi1QQVNTIGdldERhdGFMaW5lcy5sZW5ndGggaXMgMQotUEFTUyBnZXREYXRh
TGluZXNbMF0ucmVwbGFjZSgvXC8kLywgJycpIGlzICJodHRwOi8vdGVzdC5jb20iCi0tLS0gVGVz
dCBzZXQgJ3RleHQvdXJpLWxpc3QnLCBnZXQgJ1VSTCcsIHVzaW5nIG9ubHkgJ1xuJzoKLVBBU1Mg
Z2V0RGF0YVJlc3VsdFR5cGUgaXMgInN0cmluZyIKLVBBU1MgZ2V0RGF0YUxpbmVzLmxlbmd0aCBp
cyAxCi1QQVNTIGdldERhdGFMaW5lc1swXS5yZXBsYWNlKC9cLyQvLCAnJykgaXMgImh0dHA6Ly90
ZXN0LmNvbSIKLS0tLSBUZXN0IHNldC9nZXQgJ3RleHQvdXJpLWxpc3QnIHdpdGggY29tbWVudHM6
Ci1QQVNTIGdldERhdGFSZXN1bHRUeXBlIGlzICJzdHJpbmciCi1QQVNTIGdldERhdGFMaW5lcy5s
ZW5ndGggaXMgMgotUEFTUyBnZXREYXRhTGluZXNbMF0ucmVwbGFjZSgvXC8kLywgJycpIGlzICJo
dHRwOi8vdGVzdC5jb20iCi1QQVNTIGdldERhdGFMaW5lc1sxXS5yZXBsYWNlKC9cLyQvLCAnJykg
aXMgImh0dHA6Ly9jaGVjay5jb20iCi0tLS0gVGVzdCBzZXQvZ2V0ICd0ZXh0L3BsYWluJzoKLVBB
U1MgZ2V0RGF0YVJlc3VsdFR5cGUgaXMgInN0cmluZyIKLVBBU1MgZ2V0RGF0YUxpbmVzLmxlbmd0
aCBpcyAxCi1QQVNTIGdldERhdGFMaW5lc1swXS5yZXBsYWNlKC9cLyQvLCAnJykgaXMgIkxvcmVt
IGlwc3VtIGRvbG9yIHNpdCBhbWV0LiIKLVBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUK
LQotVEVTVCBDT01QTEVURQorVGVzdHMgY29ycmVjdCBiZWhhdmlvciBvZiBldmVudC5kYXRhVHJh
bnNmZXIuc2V0RGF0YS9nZXREYXRhIGZvciAnVVJMJywgJ3RleHQvdXJpLWxpc3QnIGFuZCAndGV4
dC9wbGFpbicNCisNCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1Mi
IG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuDQorDQorDQorLS0tIFRlc3Qg
c2V0L2dldCAndGV4dC9wbGFpbic6DQorUEFTUyBnZXREYXRhUmVzdWx0VHlwZSBpcyAic3RyaW5n
Ig0KK1BBU1MgZ2V0RGF0YVJlc3VsdCBpcyAiTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIg0K
Ky0tLSBUZXN0IHNldCAndGV4dC9wbGFpbicsIGdldCAnVGV4dCc6DQorUEFTUyBnZXREYXRhUmVz
dWx0VHlwZSBpcyAic3RyaW5nIg0KK1BBU1MgZ2V0RGF0YVJlc3VsdCBpcyAiTG9yZW0gaXBzdW0g
ZG9sb3Igc2l0IGFtZXQuIg0KKy0tLSBUZXN0IHNldC9nZXQgJ1VSTCc6DQorUEFTUyBnZXREYXRh
UmVzdWx0VHlwZSBpcyAic3RyaW5nIg0KK1BBU1MgZ2V0RGF0YVJlc3VsdCBpcyAiaHR0cDovL3Rl
c3QuY29tIg0KKy0tLSBUZXN0IHNldC9nZXQgJ3RleHQvdXJpLWxpc3QnOg0KK1BBU1MgZ2V0RGF0
YVJlc3VsdFR5cGUgaXMgInN0cmluZyINCitQQVNTIGdldERhdGFSZXN1bHQgaXMgImh0dHA6Ly90
ZXN0LmNvbSINCistLS0gVGVzdCBzZXQgJ3RleHQvdXJpLWxpc3QnLCBnZXQgJ1VSTCc6DQorUEFT
UyBnZXREYXRhUmVzdWx0VHlwZSBpcyAic3RyaW5nIg0KK1BBU1MgZ2V0RGF0YVJlc3VsdCBpcyAi
aHR0cDovL3Rlc3QuY29tIg0KKy0tLSBUZXN0IHNldCAnVVJMJywgZ2V0ICd0ZXh0L3VyaS1saXN0
JzoNCitQQVNTIGdldERhdGFSZXN1bHRUeXBlIGlzICJzdHJpbmciDQorUEFTUyBnZXREYXRhUmVz
dWx0IGlzICJodHRwOi8vdGVzdC5jb20iDQorLS0tIFRlc3Qgc2V0IGludmFsaWQgVVJMIGluICdV
UkwnLCBnZXQgJ3RleHQvdXJpLWxpc3QnOg0KK1BBU1MgZ2V0RGF0YVJlc3VsdFR5cGUgaXMgInN0
cmluZyINCitQQVNTIGdldERhdGFSZXN1bHQgaXMgIj48Ig0KKy0tLSBUZXN0IHNldCBpbnZhbGlk
IFVSTCBpbiAndGV4dC91cmktbGlzdCcsIGdldCAnVVJMJzoNCitQQVNTIGdldERhdGFSZXN1bHRU
eXBlIGlzICJzdHJpbmciDQorUEFTUyBnZXREYXRhUmVzdWx0IGlzICI+PCINCitQQVNTIHN1Y2Nl
c3NmdWxseVBhcnNlZCBpcyB0cnVlDQorDQorVEVTVCBDT01QTEVURQ0KKw0KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9zY3JpcHQtdGVzdHMvZGF0YVRyYW5zZmVy
LXNldERhdGEtZ2V0RGF0YS5qcyBiL0xheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9zY3Jp
cHQtdGVzdHMvZGF0YVRyYW5zZmVyLXNldERhdGEtZ2V0RGF0YS5qcwppbmRleCBmMTBkNzg1Li40
YTExOGY2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQvc2NyaXB0
LXRlc3RzL2RhdGFUcmFuc2Zlci1zZXREYXRhLWdldERhdGEuanMKKysrIGIvTGF5b3V0VGVzdHMv
ZWRpdGluZy9wYXN0ZWJvYXJkL3NjcmlwdC10ZXN0cy9kYXRhVHJhbnNmZXItc2V0RGF0YS1nZXRE
YXRhLmpzCkBAIC0xMiw5ICsxMiw5IEBAIGRyYWdUYXJnZXQuc3R5bGUuaGVpZ2h0ID0gIjEwMHB4
IjsKIGRvY3VtZW50LmJvZHkuaW5zZXJ0QmVmb3JlKGRyYWdUYXJnZXQsIGRyYWdNZSk7CiAKIHZh
ciBzZXREYXRhVHlwZTsKLXZhciBzZXREYXRhVmFsdWVzOwordmFyIHNldERhdGFWYWx1ZTsKIHZh
ciBnZXREYXRhVHlwZTsKLXZhciBnZXREYXRhVmFsdWVzOwordmFyIGdldERhdGFWYWx1ZTsKIHZh
ciBnZXREYXRhUmVzdWx0OwogdmFyIGdldERhdGFSZXN1bHRUeXBlOwogdmFyIGdldERhdGFMaW5l
czsKQEAgLTIyLDcgKzIyLDcgQEAgdmFyIGdldERhdGFMaW5lczsKIHZhciBDUkxGID0gIlxyXG4i
OwogCiBkcmFnTWUuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ3N0YXJ0IiwgZnVuY3Rpb24oKSB7Ci0g
ICAgZXZlbnQuZGF0YVRyYW5zZmVyLnNldERhdGEoc2V0RGF0YVR5cGUsIHNldERhdGFWYWx1ZXMu
am9pbihDUkxGKSk7CisgICAgZXZlbnQuZGF0YVRyYW5zZmVyLnNldERhdGEoc2V0RGF0YVR5cGUs
IHNldERhdGFWYWx1ZSk7CiB9LCBmYWxzZSk7CiAKIGRyYWdUYXJnZXQuYWRkRXZlbnRMaXN0ZW5l
cigiZHJhZ2VudGVyIiwgZnVuY3Rpb24oKSB7CkBAIC02Myw1MCArNjMsNTAgQEAgZnVuY3Rpb24g
ZG9Ecm9wKCkgewogICAgIGdldERhdGFSZXN1bHQgPSBldmVudC5kYXRhVHJhbnNmZXIuZ2V0RGF0
YShnZXREYXRhVHlwZSk7CiAgICAgZ2V0RGF0YVJlc3VsdFR5cGUgPSB0eXBlb2YgZ2V0RGF0YVJl
c3VsdDsKICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoImdldERhdGFSZXN1bHRUeXBlIiwgInN0
cmluZyIpOwotICAgIGdldERhdGFMaW5lcyA9IGdldERhdGFSZXN1bHQuc3BsaXQoQ1JMRik7ICAg
IAotICAgIC8vIHJlbW92ZSBwb3RlbnRpYWwgY29tbWVudHMKLSAgICBnZXREYXRhTGluZXMgPSBn
ZXREYXRhTGluZXMuZmlsdGVyKGZ1bmN0aW9uKGxpbmUpIHsKLSAgICAgIHJldHVybiBsaW5lWzBd
ICE9PSAnIyc7Ci0gICAgfSk7Ci0gICAgc2hvdWxkRXZhbHVhdGVUbygiZ2V0RGF0YUxpbmVzLmxl
bmd0aCIsIGdldERhdGFWYWx1ZXMubGVuZ3RoKTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgZ2V0RGF0
YUxpbmVzLmxlbmd0aCAmJiBpIDwgZ2V0RGF0YVZhbHVlcy5sZW5ndGg7ICsraSkgewotICAgICAg
ICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoImdldERhdGFMaW5lc1siICsgaSArICJdLnJlcGxhY2Uo
L1xcLyQvLCAnJykiLCBnZXREYXRhVmFsdWVzW2ldKTsKLSAgICB9CisgICAgc2hvdWxkQmVFcXVh
bFRvU3RyaW5nKCJnZXREYXRhUmVzdWx0IiwgZ2V0RGF0YVZhbHVlKTsKIH0KIAotZnVuY3Rpb24g
dGVzdChzZXRUeXBlLCBzZXRWYWx1ZXMsIGdldFR5cGUsIGdldFZhbHVlcykgeworZnVuY3Rpb24g
dGVzdChzZXRUeXBlLCBzZXRWYWx1ZSwgZ2V0VHlwZSwgZ2V0VmFsdWUpIHsKICAgICBzZXREYXRh
VHlwZSA9IHNldFR5cGU7Ci0gICAgc2V0RGF0YVZhbHVlcyA9IHNldFZhbHVlczsKKyAgICBzZXRE
YXRhVmFsdWUgPSBzZXRWYWx1ZTsKICAgICBnZXREYXRhVHlwZSA9IGdldFR5cGU7Ci0gICAgZ2V0
RGF0YVZhbHVlcyA9IGdldFZhbHVlczsKKyAgICBnZXREYXRhVmFsdWUgPSBnZXRWYWx1ZTsKICAg
ICBkcmFnT250b0RyYWdUYXJnZXQoKTsKIH0KIAogZnVuY3Rpb24gcnVuVGVzdCgpCiB7CisgICAg
ZGVidWcoIi0tLSBUZXN0IHNldC9nZXQgJ3RleHQvcGxhaW4nOiIpOworICAgIHRlc3QoInRleHQv
cGxhaW4iLCAiTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIiwgCisgICAgICAgICAidGV4dC9w
bGFpbiIsICJMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4iKTsKKworICAgIGRlYnVnKCItLS0g
VGVzdCBzZXQgJ3RleHQvcGxhaW4nLCBnZXQgJ1RleHQnOiIpOworICAgIHRlc3QoInRleHQvcGxh
aW4iLCAiTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIiwgCisgICAgICAgICAiVGV4dCIsICJM
b3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4iKTsKKwogICAgIGRlYnVnKCItLS0gVGVzdCBzZXQv
Z2V0ICdVUkwnOiIpOwotICAgIHRlc3QoIlVSTCIsIFsiaHR0cDovL3Rlc3QuY29tIl0sIAotICAg
ICAgICAgIlVSTCIsIFsiaHR0cDovL3Rlc3QuY29tIl0pOworICAgIHRlc3QoIlVSTCIsICJodHRw
Oi8vdGVzdC5jb20iLCAKKyAgICAgICAgICJVUkwiLCAiaHR0cDovL3Rlc3QuY29tIik7CiAKICAg
ICBkZWJ1ZygiLS0tIFRlc3Qgc2V0L2dldCAndGV4dC91cmktbGlzdCc6Iik7Ci0gICAgdGVzdCgi
dGV4dC91cmktbGlzdCIsIFsiaHR0cDovL3Rlc3QuY29tIiwgImh0dHA6Ly9jaGVjay5jb20iXSwg
Ci0gICAgICAgICAidGV4dC91cmktbGlzdCIsIFsiaHR0cDovL3Rlc3QuY29tIiwgImh0dHA6Ly9j
aGVjay5jb20iXSk7CisgICAgdGVzdCgidGV4dC91cmktbGlzdCIsICJodHRwOi8vdGVzdC5jb20i
LCAKKyAgICAgICAgICJ0ZXh0L3VyaS1saXN0IiwgImh0dHA6Ly90ZXN0LmNvbSIpOwogCiAgICAg
ZGVidWcoIi0tLSBUZXN0IHNldCAndGV4dC91cmktbGlzdCcsIGdldCAnVVJMJzoiKTsKLSAgICB0
ZXN0KCJ0ZXh0L3VyaS1saXN0IiwgWyJodHRwOi8vdGVzdC5jb20iLCAiaHR0cDovL2NoZWNrLmNv
bSJdLCAKLSAgICAgICAgICJVUkwiLCBbImh0dHA6Ly90ZXN0LmNvbSJdKTsKKyAgICB0ZXN0KCJ0
ZXh0L3VyaS1saXN0IiwgImh0dHA6Ly90ZXN0LmNvbSIsIAorICAgICAgICAgIlVSTCIsICJodHRw
Oi8vdGVzdC5jb20iKTsKIAotICAgIGRlYnVnKCItLS0gVGVzdCBzZXQgJ3RleHQvdXJpLWxpc3Qn
LCBnZXQgJ1VSTCcsIHVzaW5nIG9ubHkgJ1xcbic6Iik7Ci0gICAgdGVzdCgidGV4dC91cmktbGlz
dCIsIFsiaHR0cDovL3Rlc3QuY29tXG5odHRwOi8vY2hlY2suY29tIl0sIAotICAgICAgICAgIlVS
TCIsIFsiaHR0cDovL3Rlc3QuY29tIl0pOworICAgIGRlYnVnKCItLS0gVGVzdCBzZXQgJ1VSTCcs
IGdldCAndGV4dC91cmktbGlzdCc6Iik7CisgICAgdGVzdCgiVVJMIiwgImh0dHA6Ly90ZXN0LmNv
bSIsIAorICAgICAgICAgInRleHQvdXJpLWxpc3QiLCAiaHR0cDovL3Rlc3QuY29tIik7CiAKLSAg
ICBkZWJ1ZygiLS0tIFRlc3Qgc2V0L2dldCAndGV4dC91cmktbGlzdCcgd2l0aCBjb21tZW50czoi
KTsKLSAgICB0ZXN0KCJ0ZXh0L3VyaS1saXN0IiwgWyIjIGNvbW1lbnQiLCAiaHR0cDovL3Rlc3Qu
Y29tIiwgImh0dHA6Ly9jaGVjay5jb20iXSwgCi0gICAgICAgICAidGV4dC91cmktbGlzdCIsIFsi
aHR0cDovL3Rlc3QuY29tIiwgImh0dHA6Ly9jaGVjay5jb20iXSk7CisgICAgZGVidWcoIi0tLSBU
ZXN0IHNldCBpbnZhbGlkIFVSTCBpbiAnVVJMJywgZ2V0ICd0ZXh0L3VyaS1saXN0JzoiKTsKKyAg
ICB0ZXN0KCJVUkwiLCAiPjwiLCAKKyAgICAgICAgICJ0ZXh0L3VyaS1saXN0IiwgIj48Iik7CiAK
LSAgICBkZWJ1ZygiLS0tIFRlc3Qgc2V0L2dldCAndGV4dC9wbGFpbic6Iik7Ci0gICAgdGVzdCgi
dGV4dC9wbGFpbiIsIFsiTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIl0sIAotICAgICAgICAg
InRleHQvcGxhaW4iLCBbIkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiJdKTsKKyAgICBkZWJ1
ZygiLS0tIFRlc3Qgc2V0IGludmFsaWQgVVJMIGluICd0ZXh0L3VyaS1saXN0JywgZ2V0ICdVUkwn
OiIpOworICAgIHRlc3QoInRleHQvdXJpLWxpc3QiLCAiPjwiLCAKKyAgICAgICAgICJVUkwiLCAi
PjwiKTsKIH0KIAogaWYgKHdpbmRvdy5ldmVudFNlbmRlcikgewpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAzOGQzMTEwLi4xNWE1OTljIDEw
MDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDcxIEBACisyMDEwLTA5LTI1ICBEYW5pZWwgQ2hlbmcgIDxkY2hlbmdAY2hyb21pdW0u
b3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtj
aHJvbWl1bV0gUmVmYWN0b3IgQ2hyb21pdW1EYXRhT2JqZWN0IHRvIHVzZSBnZXR0ZXJzL3NldHRl
cnMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NjU1
OQorCisgICAgICAgIFRoaXMgaXMgYW4gaW50ZXJtZWRpYXRlIHN0ZXAgdG8gY29udmVydGluZyBD
aHJvbWl1bURhdGFPYmplY3QgdG8gdXNlCisgICAgICAgIGNhbGxiYWNrcyB0byB0aGUgYnJvd3Nl
ciB0byByZXRyaWV2ZSBkYXRhLiBTcGVjaWFsIGhhbmRsaW5nIGZvciBVUkwgYW5kCisgICAgICAg
IHRleHQvdXJpLWxpc3QgaGFzIGFsc28gYmVlbiByZW1vdmVkOyB0aGV5IG5vdyB0cmVhdCB0aGVp
ciBkYXRhIGFyZ3VtZW50CisgICAgICAgIGFzIGp1c3QgYW4gb3BhcXVlIGJsb2Igb2YgdGV4dC4K
KworICAgICAgICBUZXN0OiBlZGl0aW5nL3Bhc3RlYm9hcmQvZGF0YVRyYW5zZmVyLXNldERhdGEt
Z2V0RGF0YS5odG1sCisKKyAgICAgICAgKiBlZGl0aW5nL2Nocm9taXVtL0VkaXRvckNocm9taXVt
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bmV3R2VuZXJhbENsaXBib2FyZCk6Cisg
ICAgICAgICogcGFnZS9jaHJvbWl1bS9FdmVudEhhbmRsZXJDaHJvbWl1bS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmNyZWF0ZURyYWdnaW5nQ2xpcGJvYXJkKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpjbGVhckRhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpjbGVhckFsbCk6CisgICAgICAgIChXZWJDb3JlOjpDaHJv
bWl1bURhdGFPYmplY3Q6OmNsZWFyQWxsRXhjZXB0RmlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6
Q2hyb21pdW1EYXRhT2JqZWN0OjpoYXNEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVt
RGF0YU9iamVjdDo6dHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0
OjpnZXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6c2V0RGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OkNocm9taXVtRGF0YU9i
amVjdCk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0Lmg6
CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OnVybFRpdGxlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNocm9taXVtRGF0YU9iamVjdDo6c2V0VXJsVGl0bGUpOgorICAgICAgICAoV2ViQ29yZTo6
Q2hyb21pdW1EYXRhT2JqZWN0OjpodG1sQmFzZVVybCk6CisgICAgICAgIChXZWJDb3JlOjpDaHJv
bWl1bURhdGFPYmplY3Q6OnNldEh0bWxCYXNlVXJsKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9t
aXVtRGF0YU9iamVjdDo6Y29udGFpbnNGaWxlbmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q2hy
b21pdW1EYXRhT2JqZWN0OjpmaWxlbmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1E
YXRhT2JqZWN0OjpzZXRGaWxlbmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRh
T2JqZWN0OjpmaWxlRXh0ZW5zaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9i
amVjdDo6c2V0RmlsZUV4dGVuc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFP
YmplY3Q6OmZpbGVDb250ZW50RmlsZW5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1E
YXRhT2JqZWN0OjpzZXRGaWxlQ29udGVudEZpbGVuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNo
cm9taXVtRGF0YU9iamVjdDo6ZmlsZUNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21p
dW1EYXRhT2JqZWN0OjpzZXRGaWxlQ29udGVudCk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21p
dW0vQ2xpcGJvYXJkQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6bm9ybWFsaXplVHlw
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRDaHJvbWl1bTo6Y2xlYXJEYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENocm9taXVtOjpjbGVhckFsbERhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6Q2xpcGJvYXJkQ2hyb21pdW06OmdldERhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2xpcGJvYXJkQ2hyb21pdW06OnNldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJv
YXJkQ2hyb21pdW06OnR5cGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENocm9taXVt
OjpmaWxlcyk6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZUltYWdlVG9EYXRhT2JqZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENocm9taXVtOjpkZWNsYXJlQW5kV3JpdGVEcmFnSW1h
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkQ2hyb21pdW06OndyaXRlVVJMKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENocm9taXVtOjp3cml0ZVJhbmdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNsaXBib2FyZENocm9taXVtOjp3cml0ZVBsYWluVGV4dCk6CisgICAgICAgICog
cGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW1XaW4uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q2xpcGJvYXJkQ2hyb21pdW06OnZhbGlkYXRlRmlsZU5hbWUpOgorICAgICAgICAqIHBs
YXRmb3JtL2Nocm9taXVtL0RyYWdEYXRhQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Y29udGFpbnNIVE1MKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjpjb250YWluc1VSTCk6
CisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0YTo6YXNVUkwpOgorICAgICAgICAoV2ViQ29yZTo6
RHJhZ0RhdGE6OmNvbnRhaW5zRmlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmFz
RmlsZW5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjpjb250YWluc1BsYWluVGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0YTo6YXNQbGFpblRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6RHJhZ0RhdGE6OmNhblNtYXJ0UmVwbGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpE
cmFnRGF0YTo6YXNGcmFnbWVudCk6CisKIDIwMTAtMDktMjIgIEFsZXhleSBQcm9za3VyeWFrb3Yg
IDxhcEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KZGlmZiAt
LWdpdCBhL1dlYkNvcmUvZWRpdGluZy9jaHJvbWl1bS9FZGl0b3JDaHJvbWl1bS5jcHAgYi9XZWJD
b3JlL2VkaXRpbmcvY2hyb21pdW0vRWRpdG9yQ2hyb21pdW0uY3BwCmluZGV4IGM5MzhhN2UuLjJi
ZmI1YWYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9jaHJvbWl1bS9FZGl0b3JDaHJvbWl1
bS5jcHAKKysrIGIvV2ViQ29yZS9lZGl0aW5nL2Nocm9taXVtL0VkaXRvckNocm9taXVtLmNwcApA
QCAtMzksNyArMzksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFBhc3NSZWZQdHI8Q2xpcGJv
YXJkPiBFZGl0b3I6Om5ld0dlbmVyYWxDbGlwYm9hcmQoQ2xpcGJvYXJkQWNjZXNzUG9saWN5IHBv
bGljeSwgRnJhbWUqIGZyYW1lKQogewotICAgIHJldHVybiBDbGlwYm9hcmRDaHJvbWl1bTo6Y3Jl
YXRlKENsaXBib2FyZDo6Q29weUFuZFBhc3RlLCBDaHJvbWl1bURhdGFPYmplY3Q6OmNyZWF0ZSgp
LCBwb2xpY3ksIGZyYW1lKTsKKyAgICByZXR1cm4gQ2xpcGJvYXJkQ2hyb21pdW06OmNyZWF0ZShD
bGlwYm9hcmQ6OkNvcHlBbmRQYXN0ZSwgQ2hyb21pdW1EYXRhT2JqZWN0OjpjcmVhdGUoQ2xpcGJv
YXJkOjpDb3B5QW5kUGFzdGUpLCBwb2xpY3ksIGZyYW1lKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL2Nocm9taXVtL0V2ZW50SGFuZGxlckNo
cm9taXVtLmNwcCBiL1dlYkNvcmUvcGFnZS9jaHJvbWl1bS9FdmVudEhhbmRsZXJDaHJvbWl1bS5j
cHAKaW5kZXggOWU5YTc5YS4uMTliOGE4NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL2Nocm9t
aXVtL0V2ZW50SGFuZGxlckNocm9taXVtLmNwcAorKysgYi9XZWJDb3JlL3BhZ2UvY2hyb21pdW0v
RXZlbnRIYW5kbGVyQ2hyb21pdW0uY3BwCkBAIC0xMjgsNyArMTI4LDcgQEAgYm9vbCBFdmVudEhh
bmRsZXI6OmV2ZW50QWN0aXZhdGVkVmlldyhjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2ZW50
KSBjb25zdAogCiBQYXNzUmVmUHRyPENsaXBib2FyZD4gRXZlbnRIYW5kbGVyOjpjcmVhdGVEcmFn
Z2luZ0NsaXBib2FyZCgpIGNvbnN0CiB7Ci0gICAgUmVmUHRyPENocm9taXVtRGF0YU9iamVjdD4g
ZGF0YU9iamVjdCA9IENocm9taXVtRGF0YU9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPENo
cm9taXVtRGF0YU9iamVjdD4gZGF0YU9iamVjdCA9IENocm9taXVtRGF0YU9iamVjdDo6Y3JlYXRl
KENsaXBib2FyZDo6RHJhZ0FuZERyb3ApOwogICAgIHJldHVybiBDbGlwYm9hcmRDaHJvbWl1bTo6
Y3JlYXRlKENsaXBib2FyZDo6RHJhZ0FuZERyb3AsIGRhdGFPYmplY3QuZ2V0KCksIENsaXBib2Fy
ZFdyaXRhYmxlLCBtX2ZyYW1lKTsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9j
aHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9DaHJvbWl1bURhdGFPYmplY3QuY3BwCmluZGV4IDgzNTI2NjkuLjk4ZTRmYTUgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmNwcAorKysg
Yi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5jcHAKQEAgLTMx
LDU2ICszMSwxODQgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDaHJvbWl1bURh
dGFPYmplY3QuaCIKIAorI2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiCisjaW5jbHVkZSAiUGFz
dGVib2FyZC5oIgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgQ2hyb21pdW1EYXRhT2Jq
ZWN0OjpjbGVhcigpCit2b2lkIENocm9taXVtRGF0YU9iamVjdDo6Y2xlYXJEYXRhKGNvbnN0IFN0
cmluZyYgdHlwZSkKK3sKKyAgICBpZiAodHlwZSA9PSAidGV4dC9wbGFpbiIpIHsKKyAgICAgICAg
bV9wbGFpblRleHQgPSAiIjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICh0eXBl
ID09ICJ0ZXh0L3VyaS1saXN0IikgeworICAgICAgICBtX3VybCA9ICIiOworICAgICAgICBtX3Vy
bFRpdGxlID0gIiI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAodHlwZSA9PSAi
dGV4dC9odG1sIikgeworICAgICAgICBtX3RleHRIdG1sID0gIiI7CisgICAgICAgIG1faHRtbEJh
c2VVcmwgPSBLVVJMKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAodHlwZSA9
PSAiZG93bmxvYWR1cmwiKSB7CisgICAgICAgIG1fZG93bmxvYWRNZXRhZGF0YSA9ICIiOworICAg
ICAgICByZXR1cm47CisgICAgfQorfQorCit2b2lkIENocm9taXVtRGF0YU9iamVjdDo6Y2xlYXJB
bGwoKQogewogICAgIGNsZWFyQWxsRXhjZXB0RmlsZXMoKTsKLSAgICBmaWxlbmFtZXMuY2xlYXIo
KTsKKyAgICBtX2ZpbGVuYW1lcy5jbGVhcigpOwogfQogCiB2b2lkIENocm9taXVtRGF0YU9iamVj
dDo6Y2xlYXJBbGxFeGNlcHRGaWxlcygpCiB7Ci0gICAgdXJsID0gS1VSTCgpOwotICAgIHVybFRp
dGxlID0gIiI7Ci0gICAgdXJpTGlzdC5jbGVhcigpOwotICAgIGRvd25sb2FkTWV0YWRhdGEgPSAi
IjsKLSAgICBmaWxlRXh0ZW5zaW9uID0gIiI7Ci0gICAgcGxhaW5UZXh0ID0gIiI7Ci0gICAgdGV4
dEh0bWwgPSAiIjsKLSAgICBodG1sQmFzZVVybCA9IEtVUkwoKTsKLSAgICBmaWxlQ29udGVudEZp
bGVuYW1lID0gIiI7Ci0gICAgaWYgKGZpbGVDb250ZW50KQotICAgICAgICBmaWxlQ29udGVudC0+
Y2xlYXIoKTsKKyAgICBtX3VybCA9IEtVUkwoKTsKKyAgICBtX3VybFRpdGxlID0gIiI7CisgICAg
bV9kb3dubG9hZE1ldGFkYXRhID0gIiI7CisgICAgbV9maWxlRXh0ZW5zaW9uID0gIiI7CisgICAg
bV9wbGFpblRleHQgPSAiIjsKKyAgICBtX3RleHRIdG1sID0gIiI7CisgICAgbV9odG1sQmFzZVVy
bCA9IEtVUkwoKTsKKyAgICBtX2ZpbGVDb250ZW50RmlsZW5hbWUgPSAiIjsKKyAgICBpZiAobV9m
aWxlQ29udGVudCkKKyAgICAgICAgbV9maWxlQ29udGVudC0+Y2xlYXIoKTsKIH0KIAogYm9vbCBD
aHJvbWl1bURhdGFPYmplY3Q6Omhhc0RhdGEoKSBjb25zdAogewotICAgIHJldHVybiAhdXJsLmlz
RW1wdHkoKQotICAgICAgICB8fCAhdXJpTGlzdC5pc0VtcHR5KCkKLSAgICAgICAgfHwgIWRvd25s
b2FkTWV0YWRhdGEuaXNFbXB0eSgpCi0gICAgICAgIHx8ICFmaWxlRXh0ZW5zaW9uLmlzRW1wdHko
KQotICAgICAgICB8fCAhZmlsZW5hbWVzLmlzRW1wdHkoKQotICAgICAgICB8fCAhcGxhaW5UZXh0
LmlzRW1wdHkoKQotICAgICAgICB8fCAhdGV4dEh0bWwuaXNFbXB0eSgpCi0gICAgICAgIHx8IGZp
bGVDb250ZW50OworICAgIHJldHVybiAhbV91cmwuaXNFbXB0eSgpCisgICAgICAgIHx8ICFtX2Rv
d25sb2FkTWV0YWRhdGEuaXNFbXB0eSgpCisgICAgICAgIHx8ICFtX2ZpbGVFeHRlbnNpb24uaXNF
bXB0eSgpCisgICAgICAgIHx8ICFtX2ZpbGVuYW1lcy5pc0VtcHR5KCkKKyAgICAgICAgfHwgIW1f
cGxhaW5UZXh0LmlzRW1wdHkoKQorICAgICAgICB8fCAhbV90ZXh0SHRtbC5pc0VtcHR5KCkKKyAg
ICAgICAgfHwgbV9maWxlQ29udGVudDsKK30KKworSGFzaFNldDxTdHJpbmc+IENocm9taXVtRGF0
YU9iamVjdDo6dHlwZXMoKSBjb25zdAoreworICAgIC8vIFRoaXMgaXMgY3VycmVudGx5IGJyb2tl
biBmb3IgcGFzdGVib2FyZCBldmVudHMsIGFuZCBhbHdheXMgaGFzIGJlZW4uCisgICAgSGFzaFNl
dDxTdHJpbmc+IHJlc3VsdHM7CisKKyAgICBpZiAoIW1fcGxhaW5UZXh0LmlzRW1wdHkoKSkgewor
ICAgICAgICByZXN1bHRzLmFkZCgiVGV4dCIpOworICAgICAgICByZXN1bHRzLmFkZCgidGV4dC9w
bGFpbiIpOworICAgIH0KKworICAgIGlmICghbV91cmwuaXNFbXB0eSgpKSB7CisgICAgICAgIHJl
c3VsdHMuYWRkKCJVUkwiKTsKKyAgICAgICAgcmVzdWx0cy5hZGQoInRleHQvdXJpLWxpc3QiKTsK
KyAgICB9CisKKyAgICBpZiAoIW1fdGV4dEh0bWwuaXNFbXB0eSgpKQorICAgICAgICByZXN1bHRz
LmFkZCgidGV4dC9odG1sIik7CisKKyAgICBpZiAoIW1fZmlsZW5hbWVzLmlzRW1wdHkoKSkKKyAg
ICAgICAgcmVzdWx0cy5hZGQoIkZpbGVzIik7CisKKyAgICByZXR1cm4gcmVzdWx0czsKK30KKwor
U3RyaW5nIENocm9taXVtRGF0YU9iamVjdDo6Z2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGJv
b2wmIHN1Y2Nlc3MpCit7CisgICAgaWYgKHR5cGUgPT0gInRleHQvcGxhaW4iKSB7CisgICAgICAg
IGlmIChtX2NsaXBib2FyZFR5cGUgPT0gQ2xpcGJvYXJkOjpDb3B5QW5kUGFzdGUpIHsKKyAgICAg
ICAgICAgIFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIgYnVmZmVyID0KKyAgICAg
ICAgICAgICAgICBQYXN0ZWJvYXJkOjpnZW5lcmFsUGFzdGVib2FyZCgpLT5pc1NlbGVjdGlvbk1v
ZGUoKSA/CisgICAgICAgICAgICAgICAgUGFzdGVib2FyZFByaXZhdGU6OlNlbGVjdGlvbkJ1ZmZl
ciA6CisgICAgICAgICAgICAgICAgUGFzdGVib2FyZFByaXZhdGU6OlN0YW5kYXJkQnVmZmVyOwor
ICAgICAgICAgICAgU3RyaW5nIHRleHQgPSBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkUmVhZFBs
YWluVGV4dChidWZmZXIpOworICAgICAgICAgICAgc3VjY2VzcyA9ICF0ZXh0LmlzRW1wdHkoKTsK
KyAgICAgICAgICAgIHJldHVybiB0ZXh0OworICAgICAgICB9CisgICAgICAgIHN1Y2Nlc3MgPSAh
bV9wbGFpblRleHQuaXNFbXB0eSgpOworICAgICAgICByZXR1cm4gbV9wbGFpblRleHQ7CisgICAg
fQorCisgICAgaWYgKHR5cGUgPT0gInRleHQvdXJpLWxpc3QiKSB7CisgICAgICAgIHN1Y2Nlc3Mg
PSAhbV91cmwuaXNFbXB0eSgpOworICAgICAgICByZXR1cm4gbV91cmw7CisgICAgfQorCisgICAg
aWYgKHR5cGUgPT0gInRleHQvaHRtbCIpIHsKKyAgICAgICAgaWYgKG1fY2xpcGJvYXJkVHlwZSA9
PSBDbGlwYm9hcmQ6OkNvcHlBbmRQYXN0ZSkgeworICAgICAgICAgICAgUGFzdGVib2FyZFByaXZh
dGU6OkNsaXBib2FyZEJ1ZmZlciBidWZmZXIgPQorICAgICAgICAgICAgICAgIFBhc3RlYm9hcmQ6
OmdlbmVyYWxQYXN0ZWJvYXJkKCktPmlzU2VsZWN0aW9uTW9kZSgpID8KKyAgICAgICAgICAgICAg
ICBQYXN0ZWJvYXJkUHJpdmF0ZTo6U2VsZWN0aW9uQnVmZmVyIDoKKyAgICAgICAgICAgICAgICBQ
YXN0ZWJvYXJkUHJpdmF0ZTo6U3RhbmRhcmRCdWZmZXI7CisgICAgICAgICAgICBTdHJpbmcgaHRt
bFRleHQ7CisgICAgICAgICAgICBLVVJMIHNvdXJjZVVSTDsKKyAgICAgICAgICAgIENocm9taXVt
QnJpZGdlOjpjbGlwYm9hcmRSZWFkSFRNTChidWZmZXIsICZodG1sVGV4dCwgJnNvdXJjZVVSTCk7
CisgICAgICAgICAgICBzdWNjZXNzID0gIWh0bWxUZXh0LmlzRW1wdHkoKTsKKyAgICAgICAgICAg
IHJldHVybiBodG1sVGV4dDsKKyAgICAgICAgfQorICAgICAgICBzdWNjZXNzID0gIW1fdGV4dEh0
bWwuaXNFbXB0eSgpOworICAgICAgICByZXR1cm4gbV90ZXh0SHRtbDsKKyAgICB9CisKKyAgICBp
ZiAodHlwZSA9PSAiZG93bmxvYWR1cmwiKSB7CisgICAgICAgIHN1Y2Nlc3MgPSAhbV9kb3dubG9h
ZE1ldGFkYXRhLmlzRW1wdHkoKTsKKyAgICAgICAgcmV0dXJuIG1fZG93bmxvYWRNZXRhZGF0YTsK
KyAgICB9CisKKyAgICBzdWNjZXNzID0gZmFsc2U7CisgICAgcmV0dXJuIFN0cmluZygpOworfQor
Citib29sIENocm9taXVtRGF0YU9iamVjdDo6c2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGNv
bnN0IFN0cmluZyYgZGF0YSkKK3sKKyAgICBpZiAodHlwZSA9PSAidGV4dC9wbGFpbiIpIHsKKyAg
ICAgICAgbV9wbGFpblRleHQgPSBkYXRhOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
KyAgICBpZiAodHlwZSA9PSAidGV4dC91cmktbGlzdCIpIHsKKyAgICAgICAgbV91cmwgPSBkYXRh
OworICAgICAgICBtX3VybFRpdGxlID0gIiI7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIGlmICh0eXBlID09ICJ0ZXh0L2h0bWwiKSB7CisgICAgICAgIG1fdGV4dEh0bWwgPSBk
YXRhOworICAgICAgICBtX2h0bWxCYXNlVXJsID0gS1VSTCgpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKKyAgICBpZiAodHlwZSA9PSAiZG93bmxvYWR1cmwiKSB7CisgICAgICAgIG1f
ZG93bmxvYWRNZXRhZGF0YSA9IGRhdGE7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwor
ICAgIHJldHVybiBmYWxzZTsKK30KKworQ2hyb21pdW1EYXRhT2JqZWN0OjpDaHJvbWl1bURhdGFP
YmplY3QoQ2xpcGJvYXJkOjpDbGlwYm9hcmRUeXBlIGNsaXBib2FyZFR5cGUpCisgICAgOiBtX2Ns
aXBib2FyZFR5cGUoY2xpcGJvYXJkVHlwZSkKK3sKIH0KIAogQ2hyb21pdW1EYXRhT2JqZWN0OjpD
aHJvbWl1bURhdGFPYmplY3QoY29uc3QgQ2hyb21pdW1EYXRhT2JqZWN0JiBvdGhlcikKICAgICA6
IFJlZkNvdW50ZWQ8Q2hyb21pdW1EYXRhT2JqZWN0PigpCi0gICAgLCB1cmxUaXRsZShvdGhlci51
cmxUaXRsZSkKLSAgICAsIGRvd25sb2FkTWV0YWRhdGEob3RoZXIuZG93bmxvYWRNZXRhZGF0YSkK
LSAgICAsIGZpbGVFeHRlbnNpb24ob3RoZXIuZmlsZUV4dGVuc2lvbikKLSAgICAsIGZpbGVuYW1l
cyhvdGhlci5maWxlbmFtZXMpCi0gICAgLCBwbGFpblRleHQob3RoZXIucGxhaW5UZXh0KQotICAg
ICwgdGV4dEh0bWwob3RoZXIudGV4dEh0bWwpCi0gICAgLCBodG1sQmFzZVVybChvdGhlci5odG1s
QmFzZVVybCkKLSAgICAsIGZpbGVDb250ZW50RmlsZW5hbWUob3RoZXIuZmlsZUNvbnRlbnRGaWxl
bmFtZSkKLSAgICAsIHVybChvdGhlci51cmwpCi0gICAgLCB1cmlMaXN0KG90aGVyLnVyaUxpc3Qp
CisgICAgLCBtX2NsaXBib2FyZFR5cGUob3RoZXIubV9jbGlwYm9hcmRUeXBlKQorICAgICwgbV91
cmxUaXRsZShvdGhlci5tX3VybFRpdGxlKQorICAgICwgbV9kb3dubG9hZE1ldGFkYXRhKG90aGVy
Lm1fZG93bmxvYWRNZXRhZGF0YSkKKyAgICAsIG1fZmlsZUV4dGVuc2lvbihvdGhlci5tX2ZpbGVF
eHRlbnNpb24pCisgICAgLCBtX2ZpbGVuYW1lcyhvdGhlci5tX2ZpbGVuYW1lcykKKyAgICAsIG1f
cGxhaW5UZXh0KG90aGVyLm1fcGxhaW5UZXh0KQorICAgICwgbV90ZXh0SHRtbChvdGhlci5tX3Rl
eHRIdG1sKQorICAgICwgbV9odG1sQmFzZVVybChvdGhlci5tX2h0bWxCYXNlVXJsKQorICAgICwg
bV9maWxlQ29udGVudEZpbGVuYW1lKG90aGVyLm1fZmlsZUNvbnRlbnRGaWxlbmFtZSkKKyAgICAs
IG1fdXJsKG90aGVyLm1fdXJsKQogewotICAgIGlmIChvdGhlci5maWxlQ29udGVudC5nZXQoKSkK
LSAgICAgICAgZmlsZUNvbnRlbnQgPSBvdGhlci5maWxlQ29udGVudC0+Y29weSgpOworICAgIGlm
IChvdGhlci5tX2ZpbGVDb250ZW50LmdldCgpKQorICAgICAgICBtX2ZpbGVDb250ZW50ID0gb3Ro
ZXIubV9maWxlQ29udGVudC0+Y29weSgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5o
IGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuaAppbmRleCBh
ZjBhM2ZhLi43Y2UxODQ4IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0No
cm9taXVtRGF0YU9iamVjdC5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21p
dW1EYXRhT2JqZWN0LmgKQEAgLTMxLDExICszMSwxNCBAQAogI2lmbmRlZiBDaHJvbWl1bURhdGFP
YmplY3RfaAogI2RlZmluZSBDaHJvbWl1bURhdGFPYmplY3RfaAogCisjaW5jbHVkZSAiQ2xpcGJv
YXJkLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAj
aW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0hhc2guaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00NCw5ICs0
Nyw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAvLyBvZiBhbmQgaXMgbm90IHNwZWNpZmlj
IHRvIGEgcGxhdGZvcm0uCiAgICAgY2xhc3MgQ2hyb21pdW1EYXRhT2JqZWN0IDogcHVibGljIFJl
ZkNvdW50ZWQ8Q2hyb21pdW1EYXRhT2JqZWN0PiB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxDaHJvbWl1bURhdGFPYmplY3Q+IGNyZWF0ZSgpCisgICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPENocm9taXVtRGF0YU9iamVjdD4gY3JlYXRlKENsaXBib2FyZDo6Q2xpcGJv
YXJkVHlwZSBjbGlwYm9hcmRUeXBlKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IENocm9taXVtRGF0YU9iamVjdCk7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IENocm9taXVtRGF0YU9iamVjdChjbGlwYm9hcmRUeXBlKSk7CiAgICAgICAgIH0KIAog
ICAgICAgICBQYXNzUmVmUHRyPENocm9taXVtRGF0YU9iamVjdD4gY29weSgpIGNvbnN0CkBAIC01
NCw2MCArNTcsNTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBDaHJvbWl1bURhdGFPYmplY3QoKnRoaXMpKTsKICAgICAgICAgfQogCi0gICAg
ICAgIHZvaWQgY2xlYXIoKTsKKyAgICAgICAgdm9pZCBjbGVhckRhdGEoY29uc3QgU3RyaW5nJiB0
eXBlKTsKKyAgICAgICAgdm9pZCBjbGVhckFsbCgpOwogICAgICAgICB2b2lkIGNsZWFyQWxsRXhj
ZXB0RmlsZXMoKTsKLSAgICAgICAgYm9vbCBoYXNEYXRhKCkgY29uc3Q7Ci0KLSAgICAgICAgdm9p
ZCBjbGVhclVSTCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVybCA9IEtVUkwoKTsKLSAgICAg
ICAgICAgIHVyaUxpc3QuY2xlYXIoKTsKLSAgICAgICAgICAgIHVybFRpdGxlID0gIiI7Ci0gICAg
ICAgIH0KIAotICAgICAgICBib29sIGhhc1ZhbGlkVVJMKCkgY29uc3QKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIHVybC5pc1ZhbGlkKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBLVVJM
IGdldFVSTCgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiB1cmw7Ci0gICAg
ICAgIH0KKyAgICAgICAgYm9vbCBoYXNEYXRhKCkgY29uc3Q7CiAKLSAgICAgICAgdm9pZCBzZXRV
UkwoY29uc3QgS1VSTCYgbmV3VVJMKQotICAgICAgICB7Ci0gICAgICAgICAgICB1cmwgPSBuZXdV
Ukw7Ci0gICAgICAgICAgICB1cmlMaXN0LmNsZWFyKCk7Ci0gICAgICAgICAgICBpZiAobmV3VVJM
LmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB1cmlMaXN0
LmFwcGVuZChuZXdVUkwuc3RyaW5nKCkpOwotICAgICAgICB9CisgICAgICAgIEhhc2hTZXQ8U3Ry
aW5nPiB0eXBlcygpIGNvbnN0OworICAgICAgICBTdHJpbmcgZ2V0RGF0YShjb25zdCBTdHJpbmcm
IHR5cGUsIGJvb2wmIHN1Y2Nlc3MpOworICAgICAgICBib29sIHNldERhdGEoY29uc3QgU3RyaW5n
JiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpOworCisgICAgICAgIC8vIFNwZWNpYWwgaGFuZGxl
cnMgZm9yIFVSTC9IVE1MIG1ldGFkYXRhLgorICAgICAgICBTdHJpbmcgdXJsVGl0bGUoKSBjb25z
dCB7IHJldHVybiBtX3VybFRpdGxlOyB9CisgICAgICAgIHZvaWQgc2V0VXJsVGl0bGUoY29uc3Qg
U3RyaW5nJiB1cmxUaXRsZSkgeyBtX3VybFRpdGxlID0gdXJsVGl0bGU7IH0KKyAgICAgICAgS1VS
TCBodG1sQmFzZVVybCgpIGNvbnN0IHsgcmV0dXJuIG1faHRtbEJhc2VVcmw7IH0KKyAgICAgICAg
dm9pZCBzZXRIdG1sQmFzZVVybChjb25zdCBLVVJMJiB1cmwpIHsgbV9odG1sQmFzZVVybCA9IHVy
bDsgfQorCisgICAgICAgIC8vIFVzZWQgdG8gaGFuZGxlIGZpbGVzIGJlaW5nIGRyYWdnZWQgaW4u
CisgICAgICAgIGJvb2wgY29udGFpbnNGaWxlbmFtZXMoKSBjb25zdCB7IHJldHVybiAhbV9maWxl
bmFtZXMuaXNFbXB0eSgpOyB9CisgICAgICAgIFZlY3RvcjxTdHJpbmc+IGZpbGVuYW1lcygpIGNv
bnN0IHsgcmV0dXJuIG1fZmlsZW5hbWVzOyB9CisgICAgICAgIHZvaWQgc2V0RmlsZW5hbWVzKGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMpIHsgbV9maWxlbmFtZXMgPSBmaWxlbmFtZXM7
IH0KKworICAgICAgICAvLyBVc2VkIHRvIGhhbmRsZSBmaWxlcyAoaW1hZ2VzKSBiZWluZyBkcmFn
Z2VkIG91dC4KKyAgICAgICAgU3RyaW5nIGZpbGVFeHRlbnNpb24oKSBjb25zdCB7IHJldHVybiBt
X2ZpbGVFeHRlbnNpb247IH0KKyAgICAgICAgdm9pZCBzZXRGaWxlRXh0ZW5zaW9uKGNvbnN0IFN0
cmluZyYgZmlsZUV4dGVuc2lvbikgeyBtX2ZpbGVFeHRlbnNpb24gPSBmaWxlRXh0ZW5zaW9uOyB9
CisgICAgICAgIFN0cmluZyBmaWxlQ29udGVudEZpbGVuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9m
aWxlQ29udGVudEZpbGVuYW1lOyB9CisgICAgICAgIHZvaWQgc2V0RmlsZUNvbnRlbnRGaWxlbmFt
ZShjb25zdCBTdHJpbmcmIGZpbGVDb250ZW50RmlsZW5hbWUpIHsgbV9maWxlQ29udGVudEZpbGVu
YW1lID0gZmlsZUNvbnRlbnRGaWxlbmFtZTsgfQorICAgICAgICBQYXNzUmVmUHRyPFNoYXJlZEJ1
ZmZlcj4gZmlsZUNvbnRlbnQoKSBjb25zdCB7IHJldHVybiBtX2ZpbGVDb250ZW50OyB9CisgICAg
ICAgIHZvaWQgc2V0RmlsZUNvbnRlbnQoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGZpbGVDb250
ZW50KSB7IG1fZmlsZUNvbnRlbnQgPSBmaWxlQ29udGVudDsgfQogCi0gICAgICAgIFN0cmluZyB1
cmxUaXRsZTsKKyAgICBwcml2YXRlOgorICAgICAgICBDaHJvbWl1bURhdGFPYmplY3QoQ2xpcGJv
YXJkOjpDbGlwYm9hcmRUeXBlKTsKKyAgICAgICAgQ2hyb21pdW1EYXRhT2JqZWN0KGNvbnN0IENo
cm9taXVtRGF0YU9iamVjdCYpOwogCi0gICAgICAgIFN0cmluZyBkb3dubG9hZE1ldGFkYXRhOwor
ICAgICAgICBDbGlwYm9hcmQ6OkNsaXBib2FyZFR5cGUgbV9jbGlwYm9hcmRUeXBlOwogCi0gICAg
ICAgIFN0cmluZyBmaWxlRXh0ZW5zaW9uOwotICAgICAgICBWZWN0b3I8U3RyaW5nPiBmaWxlbmFt
ZXM7CisgICAgICAgIFN0cmluZyBtX3VybFRpdGxlOwogCi0gICAgICAgIFN0cmluZyBwbGFpblRl
eHQ7CisgICAgICAgIFN0cmluZyBtX2Rvd25sb2FkTWV0YWRhdGE7CiAKLSAgICAgICAgU3RyaW5n
IHRleHRIdG1sOwotICAgICAgICBLVVJMIGh0bWxCYXNlVXJsOworICAgICAgICBTdHJpbmcgbV9m
aWxlRXh0ZW5zaW9uOworICAgICAgICBWZWN0b3I8U3RyaW5nPiBtX2ZpbGVuYW1lczsKIAotICAg
ICAgICBTdHJpbmcgZmlsZUNvbnRlbnRGaWxlbmFtZTsKLSAgICAgICAgUmVmUHRyPFNoYXJlZEJ1
ZmZlcj4gZmlsZUNvbnRlbnQ7CisgICAgICAgIFN0cmluZyBtX3BsYWluVGV4dDsKIAotICAgIHBy
aXZhdGU6Ci0gICAgICAgIC8vIFVSTCBhbmQgdXJpLWxpc3QgYXJlIGxpbmtlZCwgc28gdGhleSBz
aG91bGQgbm90IGJlIGFjY2Vzc2VkIGluZGl2aWR1YWxseS4KLSAgICAgICAgS1VSTCB1cmw7Ci0g
ICAgICAgIFZlY3RvcjxTdHJpbmc+IHVyaUxpc3Q7CisgICAgICAgIFN0cmluZyBtX3RleHRIdG1s
OworICAgICAgICBLVVJMIG1faHRtbEJhc2VVcmw7CiAKLSAgICAgICAgQ2hyb21pdW1EYXRhT2Jq
ZWN0KCkge30KLSAgICAgICAgQ2hyb21pdW1EYXRhT2JqZWN0KGNvbnN0IENocm9taXVtRGF0YU9i
amVjdCYpOworICAgICAgICBTdHJpbmcgbV9maWxlQ29udGVudEZpbGVuYW1lOworICAgICAgICBS
ZWZQdHI8U2hhcmVkQnVmZmVyPiBtX2ZpbGVDb250ZW50OwogCi0gICAgICAgIGZyaWVuZCBjbGFz
cyBDbGlwYm9hcmRDaHJvbWl1bTsKKyAgICAgICAgU3RyaW5nIG1fdXJsOwogICAgIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vQ2xpcGJvYXJkQ2hyb21pdW0uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlw
Ym9hcmRDaHJvbWl1bS5jcHAKaW5kZXggYzJlYzgwYy4uODI0OTc0NyAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5jcHAKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5jcHAKQEAgLTI4LDcgKzI4LDYg
QEAKICNpbmNsdWRlICJDbGlwYm9hcmRDaHJvbWl1bS5oIgogCiAjaW5jbHVkZSAiQ2FjaGVkSW1h
Z2UuaCIKLSNpbmNsdWRlICJDaHJvbWl1bUJyaWRnZS5oIgogI2luY2x1ZGUgIkNocm9taXVtRGF0
YU9iamVjdC5oIgogI2luY2x1ZGUgIkNsaXBib2FyZFV0aWxpdGllc0Nocm9taXVtLmgiCiAjaW5j
bHVkZSAiRG9jdW1lbnQuaCIKQEAgLTQwLDcgKzM5LDYgQEAKICNpbmNsdWRlICJJbWFnZS5oIgog
I2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKICNpbmNsdWRlICJOYW1lZE5vZGVNYXAuaCIK
LSNpbmNsdWRlICJQYXN0ZWJvYXJkLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNp
bmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCkBAIC01NSw0MCArNTMs
MTQgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIC8vIFdlIHByb3ZpZGUgdGhlIElFIGNs
aXBib2FyZCB0eXBlcyAoVVJMIGFuZCBUZXh0KSwgYW5kIHRoZSBjbGlwYm9hcmQgdHlwZXMgc3Bl
Y2lmaWVkIGluIHRoZSBXSEFUV0cgV2ViIEFwcGxpY2F0aW9ucyAxLjAgZHJhZnQKIC8vIHNlZSBo
dHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrLyBTZWN0aW9u
IDYuMy41LjMKIAotZW51bSBDbGlwYm9hcmREYXRhVHlwZSB7Ci0gICAgQ2xpcGJvYXJkRGF0YVR5
cGVOb25lLAotCi0gICAgQ2xpcGJvYXJkRGF0YVR5cGVVUkwsCi0gICAgQ2xpcGJvYXJkRGF0YVR5
cGVVUklMaXN0LAotICAgIENsaXBib2FyZERhdGFUeXBlRG93bmxvYWRVUkwsCi0gICAgQ2xpcGJv
YXJkRGF0YVR5cGVQbGFpblRleHQsCi0gICAgQ2xpcGJvYXJkRGF0YVR5cGVIVE1MLAotCi0gICAg
Q2xpcGJvYXJkRGF0YVR5cGVPdGhlciwKLX07Ci0KLS8vIFBlciBSRkMgMjQ4MywgdGhlIGxpbmUg
c2VwYXJhdG9yIGZvciAidGV4dC8uLi4iIE1JTUUgdHlwZXMgaXMgQ1ItTEYuCi1zdGF0aWMgY2hh
ciBjb25zdCogY29uc3QgdGV4dE1JTUVUeXBlTGluZVNlcGFyYXRvciA9ICJcclxuIjsKLQotc3Rh
dGljIENsaXBib2FyZERhdGFUeXBlIGNsaXBib2FyZFR5cGVGcm9tTUlNRVR5cGUoY29uc3QgU3Ry
aW5nJiB0eXBlKQorc3RhdGljIFN0cmluZyBub3JtYWxpemVUeXBlKGNvbnN0IFN0cmluZyYgdHlw
ZSkKIHsKICAgICBTdHJpbmcgY2xlYW5UeXBlID0gdHlwZS5zdHJpcFdoaXRlU3BhY2UoKS5sb3dl
cigpOwotICAgIGlmIChjbGVhblR5cGUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gQ2xpcGJv
YXJkRGF0YVR5cGVOb25lOwotCi0gICAgLy8gSW5jbHVkZXMgdHdvIHNwZWNpYWwgY2FzZXMgZm9y
IElFIGNvbXBhdGliaWxpdHkuCi0gICAgaWYgKGNsZWFuVHlwZSA9PSAidGV4dCIgfHwgY2xlYW5U
eXBlID09ICJ0ZXh0L3BsYWluIiB8fCBjbGVhblR5cGUuc3RhcnRzV2l0aCgidGV4dC9wbGFpbjsi
KSkKLSAgICAgICAgcmV0dXJuIENsaXBib2FyZERhdGFUeXBlUGxhaW5UZXh0OworICAgIGlmIChj
bGVhblR5cGUgPT0gInRleHQiIHx8IGNsZWFuVHlwZS5zdGFydHNXaXRoKCJ0ZXh0L3BsYWluOyIp
CisgICAgICAgIHJldHVybiAidGV4dC9wbGFpbiI7CiAgICAgaWYgKGNsZWFuVHlwZSA9PSAidXJs
IikKLSAgICAgICAgcmV0dXJuIENsaXBib2FyZERhdGFUeXBlVVJMOwotICAgIGlmIChjbGVhblR5
cGUgPT0gInRleHQvdXJpLWxpc3QiKQotICAgICAgICByZXR1cm4gQ2xpcGJvYXJkRGF0YVR5cGVV
UklMaXN0OwotICAgIGlmIChjbGVhblR5cGUgPT0gImRvd25sb2FkdXJsIikKLSAgICAgICAgcmV0
dXJuIENsaXBib2FyZERhdGFUeXBlRG93bmxvYWRVUkw7Ci0gICAgaWYgKGNsZWFuVHlwZSA9PSAi
dGV4dC9odG1sIikKLSAgICAgICAgcmV0dXJuIENsaXBib2FyZERhdGFUeXBlSFRNTDsKLQotICAg
IHJldHVybiBDbGlwYm9hcmREYXRhVHlwZU90aGVyOworICAgICAgICByZXR1cm4gInRleHQvdXJp
LWxpc3QiOworICAgIHJldHVybiBjbGVhblR5cGU7CiB9CiAKIFBhc3NSZWZQdHI8Q2xpcGJvYXJk
PiBDbGlwYm9hcmQ6OmNyZWF0ZShDbGlwYm9hcmRBY2Nlc3NQb2xpY3kgcG9saWN5LCBEcmFnRGF0
YSogZHJhZ0RhdGEsIEZyYW1lKiBmcmFtZSkKQEAgLTExNywzNiArODksNyBAQCB2b2lkIENsaXBi
b2FyZENocm9taXVtOjpjbGVhckRhdGEoY29uc3QgU3RyaW5nJiB0eXBlKQogICAgIGlmIChwb2xp
Y3koKSAhPSBDbGlwYm9hcmRXcml0YWJsZSB8fCAhbV9kYXRhT2JqZWN0KQogICAgICAgICByZXR1
cm47CiAKLSAgICBDbGlwYm9hcmREYXRhVHlwZSBkYXRhVHlwZSA9IGNsaXBib2FyZFR5cGVGcm9t
TUlNRVR5cGUodHlwZSk7Ci0gICAgc3dpdGNoIChkYXRhVHlwZSkgewotICAgIGNhc2UgQ2xpcGJv
YXJkRGF0YVR5cGVOb25lOgotICAgICAgICAvLyBJZiBjYWxsZWQgd2l0aCBubyBhcmd1bWVudHMs
IGV2ZXJ5dGhpbmcgZXhjZXB0IHRoZSBmaWxlIGxpc3QgbXVzdCBiZSBjbGVhcmVkLgotICAgICAg
ICAvLyAoU2VlIEhUTUw1IHNwZWMsICJUaGUgRHJhZ0V2ZW50IGFuZCBEYXRhVHJhbnNmZXIgaW50
ZXJmYWNlcyIpCi0gICAgICAgIG1fZGF0YU9iamVjdC0+Y2xlYXJBbGxFeGNlcHRGaWxlcygpOwot
ICAgICAgICByZXR1cm47Ci0KLSAgICBjYXNlIENsaXBib2FyZERhdGFUeXBlVVJMOgotICAgIGNh
c2UgQ2xpcGJvYXJkRGF0YVR5cGVVUklMaXN0OgotICAgICAgICBtX2RhdGFPYmplY3QtPmNsZWFy
VVJMKCk7Ci0gICAgICAgIHJldHVybjsKLQotICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVEb3du
bG9hZFVSTDoKLSAgICAgICAgbV9kYXRhT2JqZWN0LT5kb3dubG9hZE1ldGFkYXRhID0gIiI7Ci0g
ICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZVBsYWlu
VGV4dDoKLSAgICAgICAgbV9kYXRhT2JqZWN0LT5wbGFpblRleHQgPSAiIjsKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZUhUTUw6Ci0gICAgICAgIG1fZGF0YU9i
amVjdC0+dGV4dEh0bWwgPSAiIjsKLSAgICAgICAgbV9kYXRhT2JqZWN0LT5odG1sQmFzZVVybCA9
IEtVUkwoKTsKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZU90
aGVyOgotICAgICAgICAvLyBOb3QgeWV0IGltcGxlbWVudGVkLCBzZWUgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM0NDEwCi0gICAgICAgIHJldHVybjsKLSAgICB9Cisg
ICAgbV9kYXRhT2JqZWN0LT5jbGVhckRhdGEobm9ybWFsaXplVHlwZSh0eXBlKSk7CiAKICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KQEAgLTE1Niw3ICs5OSw3IEBAIHZvaWQgQ2xpcGJvYXJk
Q2hyb21pdW06OmNsZWFyQWxsRGF0YSgpCiAgICAgaWYgKHBvbGljeSgpICE9IENsaXBib2FyZFdy
aXRhYmxlKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2RhdGFPYmplY3QtPmNsZWFyKCk7Cisg
ICAgbV9kYXRhT2JqZWN0LT5jbGVhckFsbCgpOwogfQogCiBTdHJpbmcgQ2xpcGJvYXJkQ2hyb21p
dW06OmdldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBib29sJiBzdWNjZXNzKSBjb25zdApAQCAt
MTY1LDgwICsxMDgsNyBAQCBTdHJpbmcgQ2xpcGJvYXJkQ2hyb21pdW06OmdldERhdGEoY29uc3Qg
U3RyaW5nJiB0eXBlLCBib29sJiBzdWNjZXNzKSBjb25zdAogICAgIGlmIChwb2xpY3koKSAhPSBD
bGlwYm9hcmRSZWFkYWJsZSB8fCAhbV9kYXRhT2JqZWN0KQogICAgICAgICByZXR1cm4gU3RyaW5n
KCk7CiAKLSAgICBDbGlwYm9hcmREYXRhVHlwZSBkYXRhVHlwZSA9IGNsaXBib2FyZFR5cGVGcm9t
TUlNRVR5cGUodHlwZSk7Ci0gICAgc3dpdGNoIChkYXRhVHlwZSkgewotICAgIGNhc2UgQ2xpcGJv
YXJkRGF0YVR5cGVOb25lOgotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICAvLyBIYWNr
IGZvciBVUkxzLiBmaWxlIFVSTHMgYXJlIHVzZWQgaW50ZXJuYWxseSBmb3IgZHJvcCdzIGRlZmF1
bHQgYWN0aW9uLCBidXQgd2UgZG9uJ3Qgd2FudAotICAgIC8vIHRvIGV4cG9zZSB0aGVtIHRvIHRo
ZSBwYWdlLCBzbyB3ZSBmaWx0ZXIgdGhlbSBvdXQgaGVyZS4KLSAgICBjYXNlIENsaXBib2FyZERh
dGFUeXBlVVJJTGlzdDoKLSAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIHRleHQ7Ci0gICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZGF0YU9iamVjdC0+dXJpTGlzdC5zaXpl
KCk7ICsraSkgewotICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgdXJpID0gbV9kYXRhT2Jq
ZWN0LT51cmlMaXN0W2ldOwotICAgICAgICAgICAgICAgIGlmIChwcm90b2NvbElzKHVyaSwgImZp
bGUiKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgQVNT
RVJUKCF1cmkuaXNFbXB0eSgpKTsKLSAgICAgICAgICAgICAgICBpZiAoIXRleHQuaXNFbXB0eSgp
KQotICAgICAgICAgICAgICAgICAgICB0ZXh0LmFwcGVuZCh0ZXh0TUlNRVR5cGVMaW5lU2VwYXJh
dG9yKTsKLSAgICAgICAgICAgICAgICAvLyBVUklzIGhhdmUgYWxyZWFkeSBiZWVuIGNhbm9uaWNh
bGl6ZWQsIHNvIGNvcHkgZXZlcnl0aGluZyB2ZXJiYXRpbS4KLSAgICAgICAgICAgICAgICB0ZXh0
LmFwcGVuZCh1cmkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc3VjY2VzcyA9ICF0ZXh0
LmlzRW1wdHkoKTsKLSAgICAgICAgICAgIHJldHVybiB0ZXh0OwotICAgICAgICB9Ci0KLSAgICBj
YXNlIENsaXBib2FyZERhdGFUeXBlVVJMOgotICAgICAgICAvLyBJbiBjYXNlIG9mIGEgcHJldmlv
dXMgc2V0RGF0YSgndGV4dC91cmktbGlzdCcpLCBzZXREYXRhKCkgaGFzIGFscmVhZHkKLSAgICAg
ICAgLy8gcHJlcGFyZWQgdGhlICd1cmwnIG1lbWJlciwgc28gd2UgY2FuIGp1c3QgcmV0cmlldmUg
aXQgaGVyZS4KLSAgICAgICAgaWYgKCFtX2RhdGFPYmplY3QtPnVybC5pc0VtcHR5KCkgJiYgIW1f
ZGF0YU9iamVjdC0+dXJsLmlzTG9jYWxGaWxlKCkpIHsKLSAgICAgICAgICAgIHN1Y2Nlc3MgPSB0
cnVlOwotICAgICAgICAgICAgcmV0dXJuIG1fZGF0YU9iamVjdC0+dXJsLnN0cmluZygpOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIGNhc2UgQ2xpcGJvYXJkRGF0
YVR5cGVEb3dubG9hZFVSTDoKLSAgICAgICAgc3VjY2VzcyA9ICFtX2RhdGFPYmplY3QtPmRvd25s
b2FkTWV0YWRhdGEuaXNFbXB0eSgpOwotICAgICAgICByZXR1cm4gbV9kYXRhT2JqZWN0LT5kb3du
bG9hZE1ldGFkYXRhOwotICAgIAotICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVQbGFpblRleHQ6
Ci0gICAgICAgIGlmIChpc0ZvckNvcHlBbmRQYXN0ZSgpKSB7Ci0gICAgICAgICAgICBQYXN0ZWJv
YXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyIGJ1ZmZlciA9IAotICAgICAgICAgICAgICAgIFBh
c3RlYm9hcmQ6OmdlbmVyYWxQYXN0ZWJvYXJkKCktPmlzU2VsZWN0aW9uTW9kZSgpID8KLSAgICAg
ICAgICAgICAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6U2VsZWN0aW9uQnVmZmVyIDogCi0gICAgICAg
ICAgICAgICAgUGFzdGVib2FyZFByaXZhdGU6OlN0YW5kYXJkQnVmZmVyOwotICAgICAgICAgICAg
U3RyaW5nIHRleHQgPSBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkUmVhZFBsYWluVGV4dChidWZm
ZXIpOwotICAgICAgICAgICAgc3VjY2VzcyA9ICF0ZXh0LmlzRW1wdHkoKTsKLSAgICAgICAgICAg
IHJldHVybiB0ZXh0OwotICAgICAgICB9Ci0gICAgICAgIC8vIE90aGVyd2lzZSByZXR1cm4gd2hh
dGV2ZXIgaXMgc3RvcmVkIGluIHBsYWluVGV4dC4KLSAgICAgICAgc3VjY2VzcyA9ICFtX2RhdGFP
YmplY3QtPnBsYWluVGV4dC5pc0VtcHR5KCk7Ci0gICAgICAgIHJldHVybiBtX2RhdGFPYmplY3Qt
PnBsYWluVGV4dDsKLQotICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVIVE1MOgotICAgICAgICBp
ZiAoaXNGb3JDb3B5QW5kUGFzdGUoKSkgewotICAgICAgICAgICAgUGFzdGVib2FyZFByaXZhdGU6
OkNsaXBib2FyZEJ1ZmZlciBidWZmZXIgPSAKLSAgICAgICAgICAgICAgICBQYXN0ZWJvYXJkOjpn
ZW5lcmFsUGFzdGVib2FyZCgpLT5pc1NlbGVjdGlvbk1vZGUoKSA/Ci0gICAgICAgICAgICAgICAg
UGFzdGVib2FyZFByaXZhdGU6OlNlbGVjdGlvbkJ1ZmZlciA6IAotICAgICAgICAgICAgICAgIFBh
c3RlYm9hcmRQcml2YXRlOjpTdGFuZGFyZEJ1ZmZlcjsKLSAgICAgICAgICAgIFN0cmluZyBodG1s
VGV4dDsKLSAgICAgICAgICAgIEtVUkwgc291cmNlVVJMOwotICAgICAgICAgICAgQ2hyb21pdW1C
cmlkZ2U6OmNsaXBib2FyZFJlYWRIVE1MKGJ1ZmZlciwgJmh0bWxUZXh0LCAmc291cmNlVVJMKTsK
LSAgICAgICAgICAgIHN1Y2Nlc3MgPSAhaHRtbFRleHQuaXNFbXB0eSgpOwotICAgICAgICAgICAg
cmV0dXJuIGh0bWxUZXh0OwotICAgICAgICB9Ci0gICAgICAgIC8vIE90aGVyd2lzZSByZXR1cm4g
d2hhdGV2ZXIgaXMgc3RvcmVkIGluIHRleHRIdG1sLgotICAgICAgICBzdWNjZXNzID0gIW1fZGF0
YU9iamVjdC0+dGV4dEh0bWwuaXNFbXB0eSgpOwotICAgICAgICByZXR1cm4gbV9kYXRhT2JqZWN0
LT50ZXh0SHRtbDsKLQotICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVPdGhlcjoKLSAgICAgICAg
Ly8gbm90IHlldCBpbXBsZW1lbnRlZCwgc2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0zNDQxMAotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgfQotCi0gICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOworICAgIHJldHVybiBt
X2RhdGFPYmplY3QtPmdldERhdGEobm9ybWFsaXplVHlwZSh0eXBlKSwgc3VjY2Vzcyk7CiB9CiAK
IGJvb2wgQ2xpcGJvYXJkQ2hyb21pdW06OnNldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25z
dCBTdHJpbmcmIGRhdGEpCkBAIC0yNDYsNjkgKzExNiw3IEBAIGJvb2wgQ2xpcGJvYXJkQ2hyb21p
dW06OnNldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpCiAgICAg
aWYgKHBvbGljeSgpICE9IENsaXBib2FyZFdyaXRhYmxlKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBDbGlwYm9hcmREYXRhVHlwZSBkYXRhVHlwZSA9IGNsaXBib2FyZFR5cGVGcm9tTUlN
RVR5cGUodHlwZSk7Ci0gICAgc3dpdGNoIChkYXRhVHlwZSkgewotICAgIGNhc2UgQ2xpcGJvYXJk
RGF0YVR5cGVOb25lOgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBjYXNlIENsaXBib2Fy
ZERhdGFUeXBlVVJMOgotICAgICAgICAvLyBGb3Igc2V0RGF0YSgpLCAiVVJMIiBtdXN0IGJlIHRy
ZWF0ZWQgYXMgInRleHQvdXJpLWxpc3QiLgotICAgICAgICAvLyAoU2VlIEhUTUw1IHNwZWMsICJU
aGUgRHJhZ0V2ZW50IGFuZCBEYXRhVHJhbnNmZXIgaW50ZXJmYWNlcyIpCi0gICAgY2FzZSBDbGlw
Ym9hcmREYXRhVHlwZVVSSUxpc3Q6Ci0gICAgICAgIG1fZGF0YU9iamVjdC0+dXJsID0gS1VSTCgp
OwotICAgICAgICAvLyBMaW5lIHNlcGFyYXRvciBpcyBcclxuIHBlciBSRkMgMjQ4MyAtIGhvd2V2
ZXIsIGZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMKLSAgICAgICAgLy8gd2UgYWxzbyBhbGxvdyBq
dXN0IFxuIGhlcmUuIAotICAgICAgICBkYXRhLnNwbGl0KCdcbicsIG1fZGF0YU9iamVjdC0+dXJp
TGlzdCk7Ci0gICAgICAgIC8vIFN0cmlwIHdoaXRlIHNwYWNlIG9uIGFsbCBsaW5lcywgaW5jbHVk
aW5nIHRyYWlsaW5nIFxyIGZyb20gYWJvdmUgc3BsaXQuCi0gICAgICAgIC8vIElmIHRoaXMgbGVh
dmVzIGEgbGluZSBlbXB0eSwgcmVtb3ZlIGl0IGNvbXBsZXRlbHkuCi0gICAgICAgIC8vCi0gICAg
ICAgIC8vIEFsc28sIGNvcHkgdGhlIGZpcnN0IHZhbGlkIFVSTCBpbnRvIHRoZSAndXJsJyBtZW1i
ZXIgYXMgd2VsbC4KLSAgICAgICAgLy8gSW4gY2FzZSBubyBlbnRyeSBpcyBhIHZhbGlkIFVSTCAo
aS5lLiwgcmVtYXJrcyBvbmx5KSwgdGhlbiB3ZSBsZWF2ZSAndXJsJyBlbXB0eS4KLSAgICAgICAg
Ly8gSS5lLiwgaW4gdGhhdCBjYXNlIHN1YnNlcXVlbnQgY2FsbHMgdG8gZ2V0RGF0YSgiVVJMIikg
d2lsbCBnZXQgYW4gZW1wdHkgc3RyaW5nLgotICAgICAgICAvLyBUaGlzIGlzIGluIGxpbmUgd2l0
aCB0aGUgSFRNTDUgc3BlYyAoc2VlICJUaGUgRHJhZ0V2ZW50IGFuZCBEYXRhVHJhbnNmZXIgaW50
ZXJmYWNlcyIpLgotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZGF0YU9iamVjdC0+
dXJpTGlzdC5zaXplKCk7IC8qKi8pIHsKLSAgICAgICAgICAgIFN0cmluZyYgbGluZSA9IG1fZGF0
YU9iamVjdC0+dXJpTGlzdFtpXTsKLSAgICAgICAgICAgIGxpbmUgPSBsaW5lLnN0cmlwV2hpdGVT
cGFjZSgpOwotICAgICAgICAgICAgaWYgKGxpbmUuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAg
ICAgbV9kYXRhT2JqZWN0LT51cmlMaXN0LnJlbW92ZShpKTsKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICsraTsKLSAgICAgICAgICAgIC8vIE9u
bHkgY29weSB0aGUgZmlyc3QgdmFsaWQgVVJMLgotICAgICAgICAgICAgaWYgKG1fZGF0YU9iamVj
dC0+dXJsLmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
IC8vIFNraXAgcmVtYXJrcy4KLSAgICAgICAgICAgIGlmIChsaW5lWzBdID09ICcjJykKLSAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIEtVUkwgdXJsID0gS1VSTChQYXJzZWRV
UkxTdHJpbmcsIGxpbmUpOwotICAgICAgICAgICAgaWYgKHVybC5pc1ZhbGlkKCkpCi0gICAgICAg
ICAgICAgICAgbV9kYXRhT2JqZWN0LT51cmwgPSB1cmw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYg
KG1fZGF0YU9iamVjdC0+dXJpTGlzdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIEFTU0VSVCht
X2RhdGFPYmplY3QtPnVybC5pc0VtcHR5KCkpOwotICAgICAgICAgICAgcmV0dXJuIGRhdGEuaXNF
bXB0eSgpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgY2FzZSBDbGlw
Ym9hcmREYXRhVHlwZURvd25sb2FkVVJMOgotICAgICAgICBtX2RhdGFPYmplY3QtPmRvd25sb2Fk
TWV0YWRhdGEgPSBkYXRhOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGNhc2UgQ2xpcGJv
YXJkRGF0YVR5cGVQbGFpblRleHQ6Ci0gICAgICAgIG1fZGF0YU9iamVjdC0+cGxhaW5UZXh0ID0g
ZGF0YTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBjYXNlIENsaXBib2FyZERhdGFUeXBl
SFRNTDoKLSAgICAgICAgbV9kYXRhT2JqZWN0LT50ZXh0SHRtbCA9IGRhdGE7Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZU90aGVyOgotICAgICAgICAv
LyBOb3QgeWV0IGltcGxlbWVudGVkLCBzZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTM0NDEwCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBtX2Rh
dGFPYmplY3QtPnNldERhdGEobm9ybWFsaXplVHlwZSh0eXBlKSwgZGF0YSk7CiB9CiAKIC8vIGV4
dGVuc2lvbnMgYmV5b25kIElFJ3MgQVBJCkBAIC0zMjEsMzMgKzEyOSw3IEBAIEhhc2hTZXQ8U3Ry
aW5nPiBDbGlwYm9hcmRDaHJvbWl1bTo6dHlwZXMoKSBjb25zdAogICAgIGlmICghbV9kYXRhT2Jq
ZWN0KQogICAgICAgICByZXR1cm4gcmVzdWx0czsKIAotICAgIGlmICghbV9kYXRhT2JqZWN0LT5m
aWxlbmFtZXMuaXNFbXB0eSgpKQotICAgICAgICByZXN1bHRzLmFkZCgiRmlsZXMiKTsKLQotICAg
IC8vIEhhY2sgZm9yIFVSTHMuIGZpbGUgVVJMcyBhcmUgdXNlZCBpbnRlcm5hbGx5IGZvciBkcm9w
J3MgZGVmYXVsdCBhY3Rpb24sIGJ1dCB3ZSBkb24ndCB3YW50Ci0gICAgLy8gdG8gZXhwb3NlIHRo
ZW0gdG8gdGhlIHBhZ2UsIHNvIHdlIGZpbHRlciB0aGVtIG91dCBoZXJlLgotICAgIGlmIChtX2Rh
dGFPYmplY3QtPnVybC5pc1ZhbGlkKCkgJiYgIW1fZGF0YU9iamVjdC0+dXJsLmlzTG9jYWxGaWxl
KCkpIHsKLSAgICAgICAgQVNTRVJUKCFtX2RhdGFPYmplY3QtPnVyaUxpc3QuaXNFbXB0eSgpKTsK
LSAgICAgICAgcmVzdWx0cy5hZGQoIlVSTCIpOwotICAgIH0KLQotICAgIGlmICghbV9kYXRhT2Jq
ZWN0LT51cmlMaXN0LmlzRW1wdHkoKSkgewotICAgICAgICAvLyBWZXJpZnkgdGhhdCB0aGUgVVJJ
IGxpc3QgY29udGFpbnMgYXQgbGVhc3Qgb25lIG5vbi1maWxlIFVSTC4KLSAgICAgICAgZm9yIChW
ZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2RhdGFPYmplY3QtPnVyaUxpc3Qu
YmVnaW4oKTsKLSAgICAgICAgICAgICBpdCAhPSBtX2RhdGFPYmplY3QtPnVyaUxpc3QuZW5kKCk7
ICsraXQpIHsKLSAgICAgICAgICAgIGlmICghcHJvdG9jb2xJcygqaXQsICJmaWxlIikpIHsKLSAg
ICAgICAgICAgICAgICAvLyBOb3RlIHRoYXQgZXZlbiBpZiB0aGUgVVJJIGxpc3QgaXMgbm90IGVt
cHR5LCBpdCBtYXkgbm90IGFjdHVhbGx5Ci0gICAgICAgICAgICAgICAgLy8gY29udGFpbiBhIHZh
bGlkIFVSTCwgc28gd2UgY2FuJ3QgcmV0dXJuICJVUkwiIGhlcmUuCi0gICAgICAgICAgICAgICAg
cmVzdWx0cy5hZGQoInRleHQvdXJpLWxpc3QiKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghbV9kYXRhT2JqZWN0LT5w
bGFpblRleHQuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHJlc3VsdHMuYWRkKCJUZXh0Iik7Ci0gICAg
ICAgIHJlc3VsdHMuYWRkKCJ0ZXh0L3BsYWluIik7Ci0gICAgfQorICAgIHJlc3VsdHMgPSBtX2Rh
dGFPYmplY3QtPnR5cGVzKCk7CiAKICAgICByZXR1cm4gcmVzdWx0czsKIH0KQEAgLTM1NywxMiAr
MTM5LDEzIEBAIFBhc3NSZWZQdHI8RmlsZUxpc3Q+IENsaXBib2FyZENocm9taXVtOjpmaWxlcygp
IGNvbnN0CiAgICAgaWYgKHBvbGljeSgpICE9IENsaXBib2FyZFJlYWRhYmxlKQogICAgICAgICBy
ZXR1cm4gRmlsZUxpc3Q6OmNyZWF0ZSgpOwogCi0gICAgaWYgKCFtX2RhdGFPYmplY3QgfHwgbV9k
YXRhT2JqZWN0LT5maWxlbmFtZXMuaXNFbXB0eSgpKQorICAgIGlmICghbV9kYXRhT2JqZWN0KQog
ICAgICAgICByZXR1cm4gRmlsZUxpc3Q6OmNyZWF0ZSgpOwogCisgICAgY29uc3QgVmVjdG9yPFN0
cmluZz4mIGZpbGVuYW1lcyA9IG1fZGF0YU9iamVjdC0+ZmlsZW5hbWVzKCk7CiAgICAgUmVmUHRy
PEZpbGVMaXN0PiBmaWxlTGlzdCA9IEZpbGVMaXN0OjpjcmVhdGUoKTsKLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1fZGF0YU9iamVjdC0+ZmlsZW5hbWVzLnNpemUoKTsgKytpKQotICAgICAg
ICBmaWxlTGlzdC0+YXBwZW5kKEZpbGU6OmNyZWF0ZShtX2RhdGFPYmplY3QtPmZpbGVuYW1lcy5h
dChpKSkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmlsZW5hbWVzLnNpemUoKTsgKytp
KQorICAgICAgICBmaWxlTGlzdC0+YXBwZW5kKEZpbGU6OmNyZWF0ZShmaWxlbmFtZXMuYXQoaSkp
KTsKIAogICAgIHJldHVybiBmaWxlTGlzdC5yZWxlYXNlKCk7CiB9CkBAIC00NjEsNyArMjQ0LDcg
QEAgc3RhdGljIHZvaWQgd3JpdGVJbWFnZVRvRGF0YU9iamVjdChDaHJvbWl1bURhdGFPYmplY3Qq
IGRhdGFPYmplY3QsIEVsZW1lbnQqIGVsZW0KICAgICBpZiAoIWltYWdlQnVmZmVyIHx8ICFpbWFn
ZUJ1ZmZlci0+c2l6ZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBkYXRhT2JqZWN0LT5maWxl
Q29udGVudCA9IGltYWdlQnVmZmVyOworICAgIGRhdGFPYmplY3QtPnNldEZpbGVDb250ZW50KGlt
YWdlQnVmZmVyKTsKIAogICAgIC8vIERldGVybWluZSB0aGUgZmlsZW5hbWUgZm9yIHRoZSBmaWxl
IGNvbnRlbnRzIG9mIHRoZSBpbWFnZS4gIFdlIHRyeSB0bwogICAgIC8vIHVzZSB0aGUgYWx0IHRh
ZyBpZiBvbmUgZXhpc3RzLCBvdGhlcndpc2Ugd2UgZmFsbCBiYWNrIG9uIHRoZSBzdWdnZXN0ZWQK
QEAgLTQ2OSwxMyArMjUyLDEzIEBAIHN0YXRpYyB2b2lkIHdyaXRlSW1hZ2VUb0RhdGFPYmplY3Qo
Q2hyb21pdW1EYXRhT2JqZWN0KiBkYXRhT2JqZWN0LCBFbGVtZW50KiBlbGVtCiAgICAgLy8gaW4g
dGhlIFVSTC4KICAgICBTdHJpbmcgZXh0ZW5zaW9uID0gTUlNRVR5cGVSZWdpc3RyeTo6Z2V0UHJl
ZmVycmVkRXh0ZW5zaW9uRm9yTUlNRVR5cGUoCiAgICAgICAgIGNhY2hlZEltYWdlLT5yZXNwb25z
ZSgpLm1pbWVUeXBlKCkpOwotICAgIGRhdGFPYmplY3QtPmZpbGVFeHRlbnNpb24gPSBleHRlbnNp
b24uaXNFbXB0eSgpID8gIiIgOiAiLiIgKyBleHRlbnNpb247CisgICAgZGF0YU9iamVjdC0+c2V0
RmlsZUV4dGVuc2lvbihleHRlbnNpb24uaXNFbXB0eSgpID8gIiIgOiAiLiIgKyBleHRlbnNpb24p
OwogICAgIFN0cmluZyB0aXRsZSA9IGVsZW1lbnQtPmdldEF0dHJpYnV0ZShhbHRBdHRyKTsKICAg
ICBpZiAodGl0bGUuaXNFbXB0eSgpKQogICAgICAgICB0aXRsZSA9IGNhY2hlZEltYWdlLT5yZXNw
b25zZSgpLnN1Z2dlc3RlZEZpbGVuYW1lKCk7CiAKICAgICB0aXRsZSA9IENsaXBib2FyZENocm9t
aXVtOjp2YWxpZGF0ZUZpbGVOYW1lKHRpdGxlLCBkYXRhT2JqZWN0KTsKLSAgICBkYXRhT2JqZWN0
LT5maWxlQ29udGVudEZpbGVuYW1lID0gdGl0bGUgKyBkYXRhT2JqZWN0LT5maWxlRXh0ZW5zaW9u
OworICAgIGRhdGFPYmplY3QtPnNldEZpbGVDb250ZW50RmlsZW5hbWUodGl0bGUgKyBkYXRhT2Jq
ZWN0LT5maWxlRXh0ZW5zaW9uKCkpOwogfQogCiB2b2lkIENsaXBib2FyZENocm9taXVtOjpkZWNs
YXJlQW5kV3JpdGVEcmFnSW1hZ2UoRWxlbWVudCogZWxlbWVudCwgY29uc3QgS1VSTCYgdXJsLCBj
b25zdCBTdHJpbmcmIHRpdGxlLCBGcmFtZSogZnJhbWUpCkBAIC00ODMsOCArMjY2LDggQEAgdm9p
ZCBDbGlwYm9hcmRDaHJvbWl1bTo6ZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKEVsZW1lbnQqIGVs
ZW1lbnQsIGNvbnN0IEtVUkwmIHUKICAgICBpZiAoIW1fZGF0YU9iamVjdCkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgbV9kYXRhT2JqZWN0LT51cmwgPSB1cmw7Ci0gICAgbV9kYXRhT2JqZWN0LT51
cmxUaXRsZSA9IHRpdGxlOworICAgIG1fZGF0YU9iamVjdC0+c2V0RGF0YSgidGV4dC91cmktbGlz
dCIsIHVybCk7CisgICAgbV9kYXRhT2JqZWN0LT5zZXRVcmxUaXRsZSh0aXRsZSk7CiAKICAgICAv
LyBXcml0ZSB0aGUgYnl0ZXMgaW4gdGhlIGltYWdlIHRvIHRoZSBmaWxlIGZvcm1hdC4KICAgICB3
cml0ZUltYWdlVG9EYXRhT2JqZWN0KG1fZGF0YU9iamVjdC5nZXQoKSwgZWxlbWVudCwgdXJsKTsK
QEAgLTQ5OCw3ICsyODEsNyBAQCB2b2lkIENsaXBib2FyZENocm9taXVtOjpkZWNsYXJlQW5kV3Jp
dGVEcmFnSW1hZ2UoRWxlbWVudCogZWxlbWVudCwgY29uc3QgS1VSTCYgdQogICAgICAgICByZXR1
cm47CiAKICAgICAvLyBQdXQgaW1nIHRhZyBvbiB0aGUgY2xpcGJvYXJkIHJlZmVyZW5jaW5nIHRo
ZSBpbWFnZQotICAgIG1fZGF0YU9iamVjdC0+dGV4dEh0bWwgPSBpbWFnZVRvTWFya3VwKGZ1bGxV
UkwsIGVsZW1lbnQpOworICAgIG1fZGF0YU9iamVjdC0+c2V0RGF0YSgidGV4dC9odG1sIiwgaW1h
Z2VUb01hcmt1cChmdWxsVVJMLCBlbGVtZW50KSk7CiB9CiAKIHZvaWQgQ2xpcGJvYXJkQ2hyb21p
dW06OndyaXRlVVJMKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB0aXRsZSwgRnJhbWUq
KQpAQCAtNTA2LDE3ICsyODksMTUgQEAgdm9pZCBDbGlwYm9hcmRDaHJvbWl1bTo6d3JpdGVVUkwo
Y29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBGcmFtZSopCiAgICAgaWYgKCFt
X2RhdGFPYmplY3QpCiAgICAgICAgIHJldHVybjsKICAgICBBU1NFUlQoIXVybC5pc0VtcHR5KCkp
OwotICAgIG1fZGF0YU9iamVjdC0+dXJsID0gdXJsOwotICAgIG1fZGF0YU9iamVjdC0+dXJsVGl0
bGUgPSB0aXRsZTsKLSAgICBtX2RhdGFPYmplY3QtPnVyaUxpc3QuY2xlYXIoKTsKLSAgICBtX2Rh
dGFPYmplY3QtPnVyaUxpc3QuYXBwZW5kKHVybCk7CisgICAgbV9kYXRhT2JqZWN0LT5zZXREYXRh
KCJ0ZXh0L3VyaS1saXN0IiwgdXJsKTsKKyAgICBtX2RhdGFPYmplY3QtPnNldFVybFRpdGxlKHRp
dGxlKTsKIAogICAgIC8vIFRoZSBVUkwgY2FuIGFsc28gYmUgdXNlZCBhcyBwbGFpbiB0ZXh0Lgot
ICAgIG1fZGF0YU9iamVjdC0+cGxhaW5UZXh0ID0gdXJsLnN0cmluZygpOworICAgIG1fZGF0YU9i
amVjdC0+c2V0RGF0YSgidGV4dC9wbGFpbiIsIHVybC5zdHJpbmcoKSk7CiAKICAgICAvLyBUaGUg
VVJMIGNhbiBhbHNvIGJlIHVzZWQgYXMgYW4gSFRNTCBmcmFnbWVudC4KLSAgICBtX2RhdGFPYmpl
Y3QtPnRleHRIdG1sID0gdXJsVG9NYXJrdXAodXJsLCB0aXRsZSk7Ci0gICAgbV9kYXRhT2JqZWN0
LT5odG1sQmFzZVVybCA9IHVybDsKKyAgICBtX2RhdGFPYmplY3QtPnNldERhdGEoInRleHQvaHRt
bCIsIHVybFRvTWFya3VwKHVybCwgdGl0bGUpKTsKKyAgICBtX2RhdGFPYmplY3QtPnNldEh0bWxC
YXNlVXJsKHVybCk7CiB9CiAKIHZvaWQgQ2xpcGJvYXJkQ2hyb21pdW06OndyaXRlUmFuZ2UoUmFu
Z2UqIHNlbGVjdGVkUmFuZ2UsIEZyYW1lKiBmcmFtZSkKQEAgLTUyNSwxNSArMzA2LDE1IEBAIHZv
aWQgQ2xpcGJvYXJkQ2hyb21pdW06OndyaXRlUmFuZ2UoUmFuZ2UqIHNlbGVjdGVkUmFuZ2UsIEZy
YW1lKiBmcmFtZSkKICAgICBpZiAoIW1fZGF0YU9iamVjdCkKICAgICAgICAgIHJldHVybjsKIAot
ICAgIG1fZGF0YU9iamVjdC0+dGV4dEh0bWwgPSBjcmVhdGVNYXJrdXAoc2VsZWN0ZWRSYW5nZSwg
MCwgQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSwgZmFsc2UsIEFic29sdXRlVVJMcyk7Ci0gICAgbV9k
YXRhT2JqZWN0LT5odG1sQmFzZVVybCA9IGZyYW1lLT5kb2N1bWVudCgpLT51cmwoKTsKKyAgICBt
X2RhdGFPYmplY3QtPnNldERhdGEoInRleHQvaHRtbCIsIGNyZWF0ZU1hcmt1cChzZWxlY3RlZFJh
bmdlLCAwLCBBbm5vdGF0ZUZvckludGVyY2hhbmdlLCBmYWxzZSwgQWJzb2x1dGVVUkxzKSk7Cisg
ICAgbV9kYXRhT2JqZWN0LT5zZXRIdG1sQmFzZVVybChmcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkp
OwogCiAgICAgU3RyaW5nIHN0ciA9IGZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0ZWRUZXh0KCk7CiAj
aWYgT1MoV0lORE9XUykKICAgICByZXBsYWNlTmV3bGluZXNXaXRoV2luZG93c1N0eWxlTmV3bGlu
ZXMoc3RyKTsKICNlbmRpZgogICAgIHJlcGxhY2VOQlNQV2l0aFNwYWNlKHN0cik7Ci0gICAgbV9k
YXRhT2JqZWN0LT5wbGFpblRleHQgPSBzdHI7CisgICAgbV9kYXRhT2JqZWN0LT5zZXREYXRhKCJ0
ZXh0L3BsYWluIiwgc3RyKTsKIH0KIAogdm9pZCBDbGlwYm9hcmRDaHJvbWl1bTo6d3JpdGVQbGFp
blRleHQoY29uc3QgU3RyaW5nJiB0ZXh0KQpAQCAtNTQ2LDcgKzMyNyw3IEBAIHZvaWQgQ2xpcGJv
YXJkQ2hyb21pdW06OndyaXRlUGxhaW5UZXh0KGNvbnN0IFN0cmluZyYgdGV4dCkKICAgICByZXBs
YWNlTmV3bGluZXNXaXRoV2luZG93c1N0eWxlTmV3bGluZXMoc3RyKTsKICNlbmRpZgogICAgIHJl
cGxhY2VOQlNQV2l0aFNwYWNlKHN0cik7Ci0gICAgbV9kYXRhT2JqZWN0LT5wbGFpblRleHQgPSBz
dHI7CisgICAgbV9kYXRhT2JqZWN0LT5zZXREYXRhKCJ0ZXh0L3BsYWluIiwgc3RyKTsKIH0KIAog
Ym9vbCBDbGlwYm9hcmRDaHJvbWl1bTo6aGFzRGF0YSgpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtV2luLmNwcCBiL1dlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW1XaW4uY3BwCmluZGV4IGI0YTJjMjEuLmQ5YmJl
YjUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21p
dW1XaW4uY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21p
dW1XaW4uY3BwCkBAIC00NCwxMSArNDQsMTEgQEAgU3RyaW5nIENsaXBib2FyZENocm9taXVtOjp2
YWxpZGF0ZUZpbGVOYW1lKGNvbnN0IFN0cmluZyYgdGl0bGUsIENocm9taXVtRGF0YU9iamUKIHsK
ICAgICAvLyBSZW1vdmUgYW55IGludmFsaWQgZmlsZSBzeXN0ZW0gY2hhcmFjdGVycy4KICAgICBT
dHJpbmcgcmVzdWx0ID0gdGl0bGUucmVtb3ZlQ2hhcmFjdGVycygmaXNJbnZhbGlkRmlsZUNoYXJh
Y3Rlcik7Ci0gICAgaWYgKHJlc3VsdC5sZW5ndGgoKSArIGRhdGFPYmplY3QtPmZpbGVFeHRlbnNp
b24ubGVuZ3RoKCkgKyAxID49IE1BWF9QQVRIKSB7Ci0gICAgICAgIGlmIChkYXRhT2JqZWN0LT5m
aWxlRXh0ZW5zaW9uLmxlbmd0aCgpICsgMSA+PSBNQVhfUEFUSCkKLSAgICAgICAgICAgIGRhdGFP
YmplY3QtPmZpbGVFeHRlbnNpb24gPSAiIjsKLSAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGgoKSAr
IGRhdGFPYmplY3QtPmZpbGVFeHRlbnNpb24ubGVuZ3RoKCkgKyAxID49IE1BWF9QQVRIKQotICAg
ICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnN1YnN0cmluZygwLCBNQVhfUEFUSCAtIGRhdGFPYmpl
Y3QtPmZpbGVFeHRlbnNpb24ubGVuZ3RoKCkgLSAxKTsKKyAgICBpZiAocmVzdWx0Lmxlbmd0aCgp
ICsgZGF0YU9iamVjdC0+ZmlsZUV4dGVuc2lvbigpLmxlbmd0aCgpICsgMSA+PSBNQVhfUEFUSCkg
eworICAgICAgICBpZiAoZGF0YU9iamVjdC0+ZmlsZUV4dGVuc2lvbigpLmxlbmd0aCgpICsgMSA+
PSBNQVhfUEFUSCkKKyAgICAgICAgICAgIGRhdGFPYmplY3QtPnNldEZpbGVFeHRlbnNpb24oIiIp
OworICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCgpICsgZGF0YU9iamVjdC0+ZmlsZUV4dGVuc2lv
bigpLmxlbmd0aCgpICsgMSA+PSBNQVhfUEFUSCkKKyAgICAgICAgICAgIHJlc3VsdCA9IHJlc3Vs
dC5zdWJzdHJpbmcoMCwgTUFYX1BBVEggLSBkYXRhT2JqZWN0LT5maWxlRXh0ZW5zaW9uKCkubGVu
Z3RoKCkgLSAxKTsKICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRHJhZ0RhdGFDaHJvbWl1bS5jcHAgYi9XZWJDb3JlL3Bs
YXRmb3JtL2Nocm9taXVtL0RyYWdEYXRhQ2hyb21pdW0uY3BwCmluZGV4IDY3NGQzNGQuLjBkZjc0
OTYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRHJhZ0RhdGFDaHJvbWl1
bS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EcmFnRGF0YUNocm9taXVtLmNw
cApAQCAtNDMsNTAgKzQzLDUwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIGJvb2wg
Y29udGFpbnNIVE1MKGNvbnN0IENocm9taXVtRGF0YU9iamVjdCogZHJvcERhdGEpCiB7Ci0gICAg
cmV0dXJuIGRyb3BEYXRhLT50ZXh0SHRtbC5sZW5ndGgoKSA+IDA7CisgICAgcmV0dXJuIGRyb3BE
YXRhLT50eXBlcygpLmNvbnRhaW5zKCJ0ZXh0L2h0bWwiKTsKIH0KIAogYm9vbCBEcmFnRGF0YTo6
Y29udGFpbnNVUkwoRmlsZW5hbWVDb252ZXJzaW9uUG9saWN5IGZpbGVuYW1lUG9saWN5KSBjb25z
dAogewotICAgIHJldHVybiAhYXNVUkwoZmlsZW5hbWVQb2xpY3kpLmlzRW1wdHkoKTsKKyAgICBy
ZXR1cm4gbV9wbGF0Zm9ybURyYWdEYXRhLT50eXBlcygpLmNvbnRhaW5zKCJ0ZXh0L3VyaS1saXN0
IikKKyAgICAgICAgfHwgKGZpbGVuYW1lUG9saWN5ID09IENvbnZlcnRGaWxlbmFtZXMgJiYgbV9w
bGF0Zm9ybURyYWdEYXRhLT5jb250YWluc0ZpbGVuYW1lcygpKTsKIH0KIAogU3RyaW5nIERyYWdE
YXRhOjphc1VSTChGaWxlbmFtZUNvbnZlcnNpb25Qb2xpY3kgZmlsZW5hbWVQb2xpY3ksIFN0cmlu
ZyogdGl0bGUpIGNvbnN0CiB7CiAgICAgU3RyaW5nIHVybDsKLSAgICBpZiAobV9wbGF0Zm9ybURy
YWdEYXRhLT5oYXNWYWxpZFVSTCgpKQotICAgICAgICB1cmwgPSBtX3BsYXRmb3JtRHJhZ0RhdGEt
PmdldFVSTCgpLnN0cmluZygpOwotICAgIGVsc2UgaWYgKGZpbGVuYW1lUG9saWN5ID09IENvbnZl
cnRGaWxlbmFtZXMgJiYgIW1fcGxhdGZvcm1EcmFnRGF0YS0+ZmlsZW5hbWVzLmlzRW1wdHkoKSkg
ewotICAgICAgICBTdHJpbmcgZmlsZU5hbWUgPSBtX3BsYXRmb3JtRHJhZ0RhdGEtPmZpbGVuYW1l
c1swXTsKLSAgICAgICAgZmlsZU5hbWUgPSBDaHJvbWl1bUJyaWRnZTo6Z2V0QWJzb2x1dGVQYXRo
KGZpbGVOYW1lKTsKLSAgICAgICAgdXJsID0gQ2hyb21pdW1CcmlkZ2U6OmZpbGVQYXRoVG9VUkwo
ZmlsZU5hbWUpLnN0cmluZygpOworICAgIGlmIChjb250YWluc1VSTChEb05vdENvbnZlcnRGaWxl
bmFtZXMpKSB7CisgICAgICAgIGJvb2wgaWdub3JlZFN1Y2Nlc3M7CisgICAgICAgIHVybCA9IG1f
cGxhdGZvcm1EcmFnRGF0YS0+Z2V0RGF0YSgidGV4dC91cmktbGlzdCIsIGlnbm9yZWRTdWNjZXNz
KTsKKyAgICAgICAgaWYgKHRpdGxlKQorICAgICAgICAgICAgKnRpdGxlID0gbV9wbGF0Zm9ybURy
YWdEYXRhLT51cmxUaXRsZSgpOworICAgIH0gZWxzZSBpZiAoZmlsZW5hbWVQb2xpY3kgPT0gQ29u
dmVydEZpbGVuYW1lcyAmJiBjb250YWluc0ZpbGVzKCkpIHsKKyAgICAgICAgdXJsID0gQ2hyb21p
dW1CcmlkZ2U6OmZpbGVQYXRoVG9VUkwoQ2hyb21pdW1CcmlkZ2U6OmdldEFic29sdXRlUGF0aCht
X3BsYXRmb3JtRHJhZ0RhdGEtPmZpbGVuYW1lcygpWzBdKSk7CiAgICAgfQotIAotICAgIC8vIHx0
aXRsZXwgY2FuIGJlIE5VTEwKLSAgICBpZiAodGl0bGUpCi0gICAgICAgICp0aXRsZSA9IG1fcGxh
dGZvcm1EcmFnRGF0YS0+dXJsVGl0bGU7CiAgICAgcmV0dXJuIHVybDsKIH0KIAogYm9vbCBEcmFn
RGF0YTo6Y29udGFpbnNGaWxlcygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICFtX3BsYXRmb3JtRHJh
Z0RhdGEtPmZpbGVuYW1lcy5pc0VtcHR5KCk7CisgICAgcmV0dXJuIG1fcGxhdGZvcm1EcmFnRGF0
YS0+Y29udGFpbnNGaWxlbmFtZXMoKTsKIH0KIAogdm9pZCBEcmFnRGF0YTo6YXNGaWxlbmFtZXMo
VmVjdG9yPFN0cmluZz4mIHJlc3VsdCkgY29uc3QKIHsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG1fcGxhdGZvcm1EcmFnRGF0YS0+ZmlsZW5hbWVzLnNpemUoKTsgKytpKQotICAgICAgICBy
ZXN1bHQuYXBwZW5kKG1fcGxhdGZvcm1EcmFnRGF0YS0+ZmlsZW5hbWVzW2ldKTsKKyAgICBjb25z
dCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVzID0gbV9wbGF0Zm9ybURyYWdEYXRhLT5maWxlbmFt
ZXMoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZpbGVuYW1lcy5zaXplKCk7ICsraSkK
KyAgICAgICAgcmVzdWx0LmFwcGVuZChmaWxlbmFtZXNbaV0pOwogfQogCiBib29sIERyYWdEYXRh
Ojpjb250YWluc1BsYWluVGV4dCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICFtX3BsYXRmb3JtRHJh
Z0RhdGEtPnBsYWluVGV4dC5pc0VtcHR5KCk7CisgICAgcmV0dXJuIG1fcGxhdGZvcm1EcmFnRGF0
YS0+dHlwZXMoKS5jb250YWlucygidGV4dC9wbGFpbiIpOwogfQogCiBTdHJpbmcgRHJhZ0RhdGE6
OmFzUGxhaW5UZXh0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9wbGF0Zm9ybURyYWdEYXRhLT5w
bGFpblRleHQ7CisgICAgYm9vbCBpZ25vcmVkU3VjY2VzczsKKyAgICByZXR1cm4gbV9wbGF0Zm9y
bURyYWdEYXRhLT5nZXREYXRhKCJ0ZXh0L3BsYWluIiwgaWdub3JlZFN1Y2Nlc3MpOwogfQogCiBi
b29sIERyYWdEYXRhOjpjb250YWluc0NvbG9yKCkgY29uc3QKQEAgLTEwMSw4ICsxMDEsOCBAQCBi
b29sIERyYWdEYXRhOjpjYW5TbWFydFJlcGxhY2UoKSBjb25zdAogICAgIC8vIFRoaXMgaXMgYWxs
b3dlZCB3aGVuZXZlciB0aGUgZHJhZyBkYXRhIGNvbnRhaW5zIGEgJ3JhbmdlJyAoaWUuLAogICAg
IC8vIENsaXBib2FyZFdpbjo6d3JpdGVSYW5nZSBpcyBjYWxsZWQpLiAgRm9yIGV4YW1wbGUsIGRy
YWdnaW5nIGEgbGluawogICAgIC8vIHNob3VsZCBub3QgcmVzdWx0IGluIGEgc3BhY2UgYmVpbmcg
YWRkZWQuCi0gICAgcmV0dXJuICFtX3BsYXRmb3JtRHJhZ0RhdGEtPnBsYWluVGV4dC5pc0VtcHR5
KCkKLSAgICAgICAgJiYgIW1fcGxhdGZvcm1EcmFnRGF0YS0+aGFzVmFsaWRVUkwoKTsKKyAgICBy
ZXR1cm4gbV9wbGF0Zm9ybURyYWdEYXRhLT50eXBlcygpLmNvbnRhaW5zKCJ0ZXh0L3BsYWluIikK
KyAgICAgICAgJiYgIW1fcGxhdGZvcm1EcmFnRGF0YS0+dHlwZXMoKS5jb250YWlucygidGV4dC91
cmktbGlzdCIpOwogfQogCiBib29sIERyYWdEYXRhOjpjb250YWluc0NvbXBhdGlibGVDb250ZW50
KCkgY29uc3QKQEAgLTEzNCw5ICsxMzQsMTAgQEAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50
PiBEcmFnRGF0YTo6YXNGcmFnbWVudChEb2N1bWVudCogZG9jKSBjb25zdAogICAgICAgICAvLyAg
ICByZXR1cm4gZnJhZ21lbnQ7CiAgICAgfQogCi0gICAgaWYgKCFtX3BsYXRmb3JtRHJhZ0RhdGEt
PnRleHRIdG1sLmlzRW1wdHkoKSkgeworICAgIGlmIChtX3BsYXRmb3JtRHJhZ0RhdGEtPnR5cGVz
KCkuY29udGFpbnMoInRleHQvaHRtbCIpKSB7CisgICAgICAgIGJvb2wgaWdub3JlZFN1Y2Nlc3M7
CiAgICAgICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGNyZWF0ZUZyYWdt
ZW50RnJvbU1hcmt1cChkb2MsCi0gICAgICAgICAgICBtX3BsYXRmb3JtRHJhZ0RhdGEtPnRleHRI
dG1sLCBtX3BsYXRmb3JtRHJhZ0RhdGEtPmh0bWxCYXNlVXJsLCBGcmFnbWVudFNjcmlwdGluZ05v
dEFsbG93ZWQpOworICAgICAgICAgICAgbV9wbGF0Zm9ybURyYWdEYXRhLT5nZXREYXRhKCJ0ZXh0
L2h0bWwiLCBpZ25vcmVkU3VjY2VzcyksIG1fcGxhdGZvcm1EcmFnRGF0YS0+aHRtbEJhc2VVcmwo
KSwgRnJhZ21lbnRTY3JpcHRpbmdOb3RBbGxvd2VkKTsKICAgICAgICAgcmV0dXJuIGZyYWdtZW50
LnJlbGVhc2UoKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDQxYWIwOGQuLmUwYjBiZDAgMTAw
NjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDEwLTA5LTI1ICBEYW5pZWwgQ2hlbmcgIDxk
Y2hlbmdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFtjaHJvbWl1bV0gUmVmYWN0b3IgQ2hyb21pdW1EYXRhT2JqZWN0IHRvIHVz
ZSBnZXR0ZXJzL3NldHRlcnMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD00NjU1OQorCisgICAgICAgIFRoaXMgaXMgYW4gaW50ZXJtZWRpYXRlIHN0ZXAg
dG8gY29udmVydGluZyBDaHJvbWl1bURhdGFPYmplY3QgdG8gdXNlCisgICAgICAgIGNhbGxiYWNr
cyB0byB0aGUgYnJvd3NlciB0byByZXRyaWV2ZSBkYXRhLiBTcGVjaWFsIGhhbmRsaW5nIGZvciBV
UkwgYW5kCisgICAgICAgIHRleHQvdXJpLWxpc3QgaGFzIGFsc28gYmVlbiByZW1vdmVkOyB0aGV5
IG5vdyB0cmVhdCB0aGVpciBkYXRhIGFyZ3VtZW50CisgICAgICAgIGFzIGp1c3QgYW4gb3BhcXVl
IGJsb2Igb2YgdGV4dC4KKworICAgICAgICAqIHB1YmxpYy9XZWJEcmFnRGF0YS5oOgorICAgICAg
ICAqIHNyYy9XZWJEcmFnRGF0YS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkRyYWdEYXRhOjpp
bml0aWFsaXplKToKKyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0RhdGE6OnVybCk6CisgICAgICAg
IChXZWJLaXQ6OldlYkRyYWdEYXRhOjpzZXRVUkwpOgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFn
RGF0YTo6dXJsVGl0bGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFnRGF0YTo6c2V0VVJMVGl0
bGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFnRGF0YTo6ZG93bmxvYWRNZXRhZGF0YSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkRyYWdEYXRhOjpzZXREb3dubG9hZE1ldGFkYXRhKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViRHJhZ0RhdGE6OmZpbGVFeHRlbnNpb24pOgorICAgICAgICAoV2ViS2l0
OjpXZWJEcmFnRGF0YTo6c2V0RmlsZUV4dGVuc2lvbik6CisgICAgICAgIChXZWJLaXQ6OldlYkRy
YWdEYXRhOjpoYXNGaWxlTmFtZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFnRGF0YTo6Zmls
ZU5hbWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0RhdGE6OnNldEZpbGVOYW1lcyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkRyYWdEYXRhOjphcHBlbmRUb0ZpbGVOYW1lcyk6CisgICAgICAg
IChXZWJLaXQ6OldlYkRyYWdEYXRhOjpwbGFpblRleHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJE
cmFnRGF0YTo6c2V0UGxhaW5UZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0RhdGE6Omh0
bWxUZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0RhdGE6OnNldEhUTUxUZXh0KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViRHJhZ0RhdGE6Omh0bWxCYXNlVVJMKToKKyAgICAgICAgKFdlYktp
dDo6V2ViRHJhZ0RhdGE6OnNldEhUTUxCYXNlVVJMKToKKyAgICAgICAgKFdlYktpdDo6V2ViRHJh
Z0RhdGE6OmZpbGVDb250ZW50RmlsZU5hbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFnRGF0
YTo6c2V0RmlsZUNvbnRlbnRGaWxlTmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkRyYWdEYXRh
OjpmaWxlQ29udGVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRyYWdEYXRhOjpzZXRGaWxlQ29u
dGVudCk6CisKIDIwMTAtMDktMjIgIEtlbm5ldGggUnVzc2VsbCAgPGtickBnb29nbGUuY29tPgog
CiAgICAgICAgIFVucmV2aWV3ZWQsIENocm9taXVtIGJ1aWxkIGZpeC4gRml4IGJ1aWxkIHdoZW4g
YWNjZWxlcmF0ZWQKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRHJhZ0Rh
dGEuaCBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRHJhZ0RhdGEuaAppbmRleCAyOTc5NTE5
Li42NzQ4ZmUwIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkRyYWdEYXRh
LmgKKysrIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJEcmFnRGF0YS5oCkBAIC02Niw3ICs2
Niw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gIW1fcHJp
dmF0ZTsgfQogCi0gICAgV0VCS0lUX0FQSSBXZWJVUkwgdXJsKCkgY29uc3Q7CisgICAgV0VCS0lU
X0FQSSBXZWJTdHJpbmcgdXJsKCkgY29uc3Q7CiAgICAgV0VCS0lUX0FQSSB2b2lkIHNldFVSTChj
b25zdCBXZWJVUkwmKTsKIAogICAgIFdFQktJVF9BUEkgV2ViU3RyaW5nIHVybFRpdGxlKCkgY29u
c3Q7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRyYWdEYXRhLmNwcCBiL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViRHJhZ0RhdGEuY3BwCmluZGV4IDY0M2MzNWQuLmE4NjZmMDQg
MTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRHJhZ0RhdGEuY3BwCisrKyBiL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViRHJhZ0RhdGEuY3BwCkBAIC00OCw3ICs0OCw3IEBAIGNsYXNz
IFdlYkRyYWdEYXRhUHJpdmF0ZSA6IHB1YmxpYyBDaHJvbWl1bURhdGFPYmplY3QgewogCiB2b2lk
IFdlYkRyYWdEYXRhOjppbml0aWFsaXplKCkKIHsKLSAgICBhc3NpZ24oc3RhdGljX2Nhc3Q8V2Vi
RHJhZ0RhdGFQcml2YXRlKj4oQ2hyb21pdW1EYXRhT2JqZWN0OjpjcmVhdGUoKS5yZWxlYXNlUmVm
KCkpKTsKKyAgICBhc3NpZ24oc3RhdGljX2Nhc3Q8V2ViRHJhZ0RhdGFQcml2YXRlKj4oQ2hyb21p
dW1EYXRhT2JqZWN0OjpjcmVhdGUoQ2xpcGJvYXJkOjpEcmFnQW5kRHJvcCkucmVsZWFzZVJlZigp
KSk7CiB9CiAKIHZvaWQgV2ViRHJhZ0RhdGE6OnJlc2V0KCkKQEAgLTY0LDEzNyArNjQsMTQ0IEBA
IHZvaWQgV2ViRHJhZ0RhdGE6OmFzc2lnbihjb25zdCBXZWJEcmFnRGF0YSYgb3RoZXIpCiAgICAg
YXNzaWduKHApOwogfQogCi1XZWJVUkwgV2ViRHJhZ0RhdGE6OnVybCgpIGNvbnN0CitXZWJTdHJp
bmcgV2ViRHJhZ0RhdGE6OnVybCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFpc051bGwoKSk7Ci0g
ICAgcmV0dXJuIG1fcHJpdmF0ZS0+Z2V0VVJMKCk7CisgICAgYm9vbCBpZ25vcmVkU3VjY2VzczsK
KyAgICByZXR1cm4gbV9wcml2YXRlLT5nZXREYXRhKCJ0ZXh0L3VyaS1saXN0IiwgaWdub3JlZFN1
Y2Nlc3MpOwogfQogCiB2b2lkIFdlYkRyYWdEYXRhOjpzZXRVUkwoY29uc3QgV2ViVVJMJiB1cmwp
CiB7CiAgICAgZW5zdXJlTXV0YWJsZSgpOwotICAgIG1fcHJpdmF0ZS0+c2V0VVJMKHVybCk7Cisg
ICAgbV9wcml2YXRlLT5zZXREYXRhKCJ0ZXh0L3VyaS1saXN0IiwgS1VSTCh1cmwpLnN0cmluZygp
KTsKIH0KIAogV2ViU3RyaW5nIFdlYkRyYWdEYXRhOjp1cmxUaXRsZSgpIGNvbnN0CiB7CiAgICAg
QVNTRVJUKCFpc051bGwoKSk7Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+dXJsVGl0bGU7CisgICAg
cmV0dXJuIG1fcHJpdmF0ZS0+dXJsVGl0bGUoKTsKIH0KIAogdm9pZCBXZWJEcmFnRGF0YTo6c2V0
VVJMVGl0bGUoY29uc3QgV2ViU3RyaW5nJiB1cmxUaXRsZSkKIHsKICAgICBlbnN1cmVNdXRhYmxl
KCk7Ci0gICAgbV9wcml2YXRlLT51cmxUaXRsZSA9IHVybFRpdGxlOworICAgIG1fcHJpdmF0ZS0+
c2V0VXJsVGl0bGUodXJsVGl0bGUpOwogfQogCiBXZWJTdHJpbmcgV2ViRHJhZ0RhdGE6OmRvd25s
b2FkTWV0YWRhdGEoKSBjb25zdAogewogICAgIEFTU0VSVCghaXNOdWxsKCkpOwotICAgIHJldHVy
biBtX3ByaXZhdGUtPmRvd25sb2FkTWV0YWRhdGE7CisgICAgYm9vbCBpZ25vcmVkU3VjY2VzczsK
KyAgICByZXR1cm4gbV9wcml2YXRlLT5nZXREYXRhKCJkb3dubG9hZHVybCIsIGlnbm9yZWRTdWNj
ZXNzKTsKIH0KIAogdm9pZCBXZWJEcmFnRGF0YTo6c2V0RG93bmxvYWRNZXRhZGF0YShjb25zdCBX
ZWJTdHJpbmcmIGRvd25sb2FkTWV0YWRhdGEpCiB7CiAgICAgZW5zdXJlTXV0YWJsZSgpOwotICAg
IG1fcHJpdmF0ZS0+ZG93bmxvYWRNZXRhZGF0YSA9IGRvd25sb2FkTWV0YWRhdGE7CisgICAgbV9w
cml2YXRlLT5zZXREYXRhKCJkb3dubG9hZHVybCIsIGRvd25sb2FkTWV0YWRhdGEpOwogfQogCiBX
ZWJTdHJpbmcgV2ViRHJhZ0RhdGE6OmZpbGVFeHRlbnNpb24oKSBjb25zdAogewogICAgIEFTU0VS
VCghaXNOdWxsKCkpOwotICAgIHJldHVybiBtX3ByaXZhdGUtPmZpbGVFeHRlbnNpb247CisgICAg
cmV0dXJuIG1fcHJpdmF0ZS0+ZmlsZUV4dGVuc2lvbigpOwogfQogCiB2b2lkIFdlYkRyYWdEYXRh
OjpzZXRGaWxlRXh0ZW5zaW9uKGNvbnN0IFdlYlN0cmluZyYgZmlsZUV4dGVuc2lvbikKIHsKICAg
ICBlbnN1cmVNdXRhYmxlKCk7Ci0gICAgbV9wcml2YXRlLT5maWxlRXh0ZW5zaW9uID0gZmlsZUV4
dGVuc2lvbjsKKyAgICBtX3ByaXZhdGUtPnNldEZpbGVFeHRlbnNpb24oZmlsZUV4dGVuc2lvbik7
CiB9CiAKIGJvb2wgV2ViRHJhZ0RhdGE6Omhhc0ZpbGVOYW1lcygpIGNvbnN0CiB7CiAgICAgQVNT
RVJUKCFpc051bGwoKSk7Ci0gICAgcmV0dXJuICFtX3ByaXZhdGUtPmZpbGVuYW1lcy5pc0VtcHR5
KCk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Y29udGFpbnNGaWxlbmFtZXMoKTsKIH0KIAogdm9p
ZCBXZWJEcmFnRGF0YTo6ZmlsZU5hbWVzKFdlYlZlY3RvcjxXZWJTdHJpbmc+JiBmaWxlTmFtZXMp
IGNvbnN0CiB7CiAgICAgQVNTRVJUKCFpc051bGwoKSk7Ci0gICAgZmlsZU5hbWVzID0gbV9wcml2
YXRlLT5maWxlbmFtZXM7CisgICAgZmlsZU5hbWVzID0gbV9wcml2YXRlLT5maWxlbmFtZXMoKTsK
IH0KIAogdm9pZCBXZWJEcmFnRGF0YTo6c2V0RmlsZU5hbWVzKGNvbnN0IFdlYlZlY3RvcjxXZWJT
dHJpbmc+JiBmaWxlTmFtZXMpCiB7CiAgICAgZW5zdXJlTXV0YWJsZSgpOwotICAgIG1fcHJpdmF0
ZS0+ZmlsZW5hbWVzLmNsZWFyKCk7Ci0gICAgbV9wcml2YXRlLT5maWxlbmFtZXMuYXBwZW5kKGZp
bGVOYW1lcy5kYXRhKCksIGZpbGVOYW1lcy5zaXplKCkpOworICAgIFZlY3RvcjxTdHJpbmc+IGZp
bGVOYW1lc0NvcHk7CisgICAgZmlsZU5hbWVzQ29weS5hcHBlbmQoZmlsZU5hbWVzLmRhdGEoKSwg
ZmlsZU5hbWVzLnNpemUoKSk7CisgICAgbV9wcml2YXRlLT5zZXRGaWxlbmFtZXMoZmlsZU5hbWVz
Q29weSk7CiB9CiAKIHZvaWQgV2ViRHJhZ0RhdGE6OmFwcGVuZFRvRmlsZU5hbWVzKGNvbnN0IFdl
YlN0cmluZyYgZmlsZU5hbWUpCiB7CiAgICAgZW5zdXJlTXV0YWJsZSgpOwotICAgIG1fcHJpdmF0
ZS0+ZmlsZW5hbWVzLmFwcGVuZChmaWxlTmFtZSk7CisgICAgVmVjdG9yPFN0cmluZz4gZmlsZU5h
bWVzID0gbV9wcml2YXRlLT5maWxlbmFtZXMoKTsKKyAgICBmaWxlTmFtZXMuYXBwZW5kKGZpbGVO
YW1lKTsKKyAgICBtX3ByaXZhdGUtPnNldEZpbGVuYW1lcyhmaWxlTmFtZXMpOwogfQogCiBXZWJT
dHJpbmcgV2ViRHJhZ0RhdGE6OnBsYWluVGV4dCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFpc051
bGwoKSk7Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+cGxhaW5UZXh0OworICAgIGJvb2wgaWdub3Jl
ZFN1Y2Nlc3M7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Z2V0RGF0YSgidGV4dC9wbGFpbiIsIGln
bm9yZWRTdWNjZXNzKTsKIH0KIAogdm9pZCBXZWJEcmFnRGF0YTo6c2V0UGxhaW5UZXh0KGNvbnN0
IFdlYlN0cmluZyYgcGxhaW5UZXh0KQogewogICAgIGVuc3VyZU11dGFibGUoKTsKLSAgICBtX3By
aXZhdGUtPnBsYWluVGV4dCA9IHBsYWluVGV4dDsKKyAgICBtX3ByaXZhdGUtPnNldERhdGEoInRl
eHQvcGxhaW4iLCBwbGFpblRleHQpOwogfQogCiBXZWJTdHJpbmcgV2ViRHJhZ0RhdGE6Omh0bWxU
ZXh0KCkgY29uc3QKIHsKICAgICBBU1NFUlQoIWlzTnVsbCgpKTsKLSAgICByZXR1cm4gbV9wcml2
YXRlLT50ZXh0SHRtbDsKKyAgICBib29sIGlnbm9yZWRTdWNjZXNzOworICAgIHJldHVybiBtX3By
aXZhdGUtPmdldERhdGEoInRleHQvaHRtbCIsIGlnbm9yZWRTdWNjZXNzKTsKIH0KIAogdm9pZCBX
ZWJEcmFnRGF0YTo6c2V0SFRNTFRleHQoY29uc3QgV2ViU3RyaW5nJiBodG1sVGV4dCkKIHsKICAg
ICBlbnN1cmVNdXRhYmxlKCk7Ci0gICAgbV9wcml2YXRlLT50ZXh0SHRtbCA9IGh0bWxUZXh0Owor
ICAgIG1fcHJpdmF0ZS0+c2V0RGF0YSgidGV4dC9odG1sIiwgaHRtbFRleHQpOwogfQogCiBXZWJV
UkwgV2ViRHJhZ0RhdGE6Omh0bWxCYXNlVVJMKCkgY29uc3QKIHsKICAgICBBU1NFUlQoIWlzTnVs
bCgpKTsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5odG1sQmFzZVVybDsKKyAgICByZXR1cm4gbV9w
cml2YXRlLT5odG1sQmFzZVVybCgpOwogfQogCiB2b2lkIFdlYkRyYWdEYXRhOjpzZXRIVE1MQmFz
ZVVSTChjb25zdCBXZWJVUkwmIGh0bWxCYXNlVVJMKQogewogICAgIGVuc3VyZU11dGFibGUoKTsK
LSAgICBtX3ByaXZhdGUtPmh0bWxCYXNlVXJsID0gaHRtbEJhc2VVUkw7CisgICAgbV9wcml2YXRl
LT5zZXRIdG1sQmFzZVVybChodG1sQmFzZVVSTCk7CiB9CiAKIFdlYlN0cmluZyBXZWJEcmFnRGF0
YTo6ZmlsZUNvbnRlbnRGaWxlTmFtZSgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFpc051bGwoKSk7
Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+ZmlsZUNvbnRlbnRGaWxlbmFtZTsKKyAgICByZXR1cm4g
bV9wcml2YXRlLT5maWxlQ29udGVudEZpbGVuYW1lKCk7CiB9CiAKIHZvaWQgV2ViRHJhZ0RhdGE6
OnNldEZpbGVDb250ZW50RmlsZU5hbWUoY29uc3QgV2ViU3RyaW5nJiBmaWxlTmFtZSkKIHsKICAg
ICBlbnN1cmVNdXRhYmxlKCk7Ci0gICAgbV9wcml2YXRlLT5maWxlQ29udGVudEZpbGVuYW1lID0g
ZmlsZU5hbWU7CisgICAgbV9wcml2YXRlLT5zZXRGaWxlQ29udGVudEZpbGVuYW1lKGZpbGVOYW1l
KTsKIH0KIAogV2ViRGF0YSBXZWJEcmFnRGF0YTo6ZmlsZUNvbnRlbnQoKSBjb25zdAogewogICAg
IEFTU0VSVCghaXNOdWxsKCkpOwotICAgIHJldHVybiBXZWJEYXRhKG1fcHJpdmF0ZS0+ZmlsZUNv
bnRlbnQpOworICAgIHJldHVybiBXZWJEYXRhKG1fcHJpdmF0ZS0+ZmlsZUNvbnRlbnQoKSk7CiB9
CiAKIHZvaWQgV2ViRHJhZ0RhdGE6OnNldEZpbGVDb250ZW50KGNvbnN0IFdlYkRhdGEmIGZpbGVD
b250ZW50KQogewogICAgIGVuc3VyZU11dGFibGUoKTsKLSAgICBtX3ByaXZhdGUtPmZpbGVDb250
ZW50ID0gZmlsZUNvbnRlbnQ7CisgICAgbV9wcml2YXRlLT5zZXRGaWxlQ29udGVudChmaWxlQ29u
dGVudCk7CiB9CiAKIFdlYkRyYWdEYXRhOjpXZWJEcmFnRGF0YShjb25zdCBXVEY6OlBhc3NSZWZQ
dHI8V2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0PiYgZGF0YSkK
</data>
<flag name="review"
          id="58598"
          type_id="1"
          status="-"
          setter="dcheng"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69135</attachid>
            <date>2010-09-28 16:55:21 -0700</date>
            <delta_ts>2010-09-28 17:01:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>foo.patch</filename>
            <type>text/plain</type>
            <size>50338</size>
            <attacher name="Daniel Cheng">dcheng</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MzhkMzExMC4uNmRkNzZlZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4MSBAQAorMjAxMC0wOS0yOCAgRGFuaWVsIENoZW5n
ICA8ZGNoZW5nQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBbY2hyb21pdW1dIFJlZmFjdG9yIENocm9taXVtRGF0YU9iamVjdCB0
byB1c2UgZ2V0dGVycy9zZXR0ZXJzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NDY1NTkKKworICAgICAgICBUaGlzIGlzIGFuIGludGVybWVkaWF0ZSBz
dGVwIHRvIGNvbnZlcnRpbmcgQ2hyb21pdW1EYXRhT2JqZWN0IHRvIHVzZQorICAgICAgICBjYWxs
YmFja3MgdG8gdGhlIGJyb3dzZXIgdG8gcmV0cmlldmUgZGF0YS4gU3BlY2lhbCBoYW5kbGluZyBm
b3IgVVJMIGFuZAorICAgICAgICB0ZXh0L3VyaS1saXN0IGhhcyBhbHNvIGJlZW4gcmVtb3ZlZDsg
dGhleSBub3cgdHJlYXQgdGhlaXIgZGF0YSBhcmd1bWVudAorICAgICAgICBhcyBqdXN0IGFuIG9w
YXF1ZSBibG9iIG9mIHRleHQuCisKKyAgICAgICAgVGVzdDogZWRpdGluZy9wYXN0ZWJvYXJkL2Rh
dGFUcmFuc2Zlci1zZXREYXRhLWdldERhdGEuaHRtbAorCisgICAgICAgICogZWRpdGluZy9jaHJv
bWl1bS9FZGl0b3JDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om5ld0dl
bmVyYWxDbGlwYm9hcmQpOgorICAgICAgICAqIHBhZ2UvY2hyb21pdW0vRXZlbnRIYW5kbGVyQ2hy
b21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpjcmVhdGVEcmFnZ2lu
Z0NsaXBib2FyZCk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6Y2xlYXJEYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6Y2xlYXJBbGwpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpjbGVhckFsbEV4Y2VwdEZpbGVzKToK
KyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6aGFzRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OnR5cGVzKToKKyAgICAgICAgKFdlYkNvcmU6
OkNocm9taXVtRGF0YU9iamVjdDo6Z2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1
bURhdGFPYmplY3Q6OnNldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2Jq
ZWN0OjpDaHJvbWl1bURhdGFPYmplY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0No
cm9taXVtRGF0YU9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0Ojp1cmxUaXRs
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OnNldFVybFRpdGxlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6aHRtbEJhc2VVcmwpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpzZXRIdG1sQmFzZVVybCk6CisgICAg
ICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OmNvbnRhaW5zRmlsZW5hbWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6ZmlsZW5hbWVzKToKKyAgICAgICAg
KFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6c2V0RmlsZW5hbWVzKToKKyAgICAgICAgKFdl
YkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6ZmlsZUV4dGVuc2lvbik6CisgICAgICAgIChXZWJD
b3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OnNldEZpbGVFeHRlbnNpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpmaWxlQ29udGVudEZpbGVuYW1lKToKKyAgICAgICAg
KFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6c2V0RmlsZUNvbnRlbnRGaWxlbmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OmZpbGVDb250ZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6c2V0RmlsZUNvbnRlbnQpOgorICAgICAg
ICAqIHBsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Om5vcm1hbGl6ZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkQ2hyb21p
dW06OmNsZWFyRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRDaHJvbWl1bTo6Y2xl
YXJBbGxEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENocm9taXVtOjpnZXREYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENocm9taXVtOjpzZXREYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNsaXBib2FyZENocm9taXVtOjp0eXBlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpDbGlwYm9hcmRDaHJvbWl1bTo6ZmlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVJbWFn
ZVRvRGF0YU9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRDaHJvbWl1bTo6ZGVj
bGFyZUFuZFdyaXRlRHJhZ0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENocm9t
aXVtOjp3cml0ZVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRDaHJvbWl1bTo6d3Jp
dGVSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRDaHJvbWl1bTo6d3JpdGVQbGFp
blRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtV2lu
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENocm9taXVtOjp2YWxpZGF0ZUZpbGVO
YW1lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRNaW1lVHlwZXMuY3Bw
OgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZE1pbWVUeXBlcy5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0RyYWdEYXRhQ2hyb21pdW0uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Y29udGFpbnNIVE1MKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjpjb250
YWluc1VSTCk6CisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0YTo6YXNVUkwpOgorICAgICAgICAo
V2ViQ29yZTo6RHJhZ0RhdGE6OmNvbnRhaW5zRmlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6RHJh
Z0RhdGE6OmFzRmlsZW5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjpjb250YWlu
c1BsYWluVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0YTo6YXNQbGFpblRleHQpOgor
ICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmNhblNtYXJ0UmVwbGFjZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEcmFnRGF0YTo6YXNGcmFnbWVudCk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21p
dW0vUmVhZGFibGVEYXRhT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlYWRhYmxlRGF0
YU9iamVjdDo6Z2V0VVJMKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWRhYmxlRGF0YU9iamVjdDo6
Z2V0SFRNTCk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vV3JpdGFibGVEYXRhT2JqZWN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldyaXRhYmxlRGF0YU9iamVjdDo6Y2xlYXJEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OldyaXRhYmxlRGF0YU9iamVjdDo6c2V0RGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpXcml0YWJsZURhdGFPYmplY3Q6OnNldFVSTCk6CisgICAgICAgIChXZWJDb3Jl
OjpXcml0YWJsZURhdGFPYmplY3Q6OnNldEhUTUwpOgorCiAyMDEwLTA5LTIyICBBbGV4ZXkgUHJv
c2t1cnlha292ICA8YXBAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFy
dGguCmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvY2hyb21pdW0vRWRpdG9yQ2hyb21pdW0u
Y3BwIGIvV2ViQ29yZS9lZGl0aW5nL2Nocm9taXVtL0VkaXRvckNocm9taXVtLmNwcAppbmRleCBj
OTM4YTdlLi4yYmZiNWFmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvY2hyb21pdW0vRWRp
dG9yQ2hyb21pdW0uY3BwCisrKyBiL1dlYkNvcmUvZWRpdGluZy9jaHJvbWl1bS9FZGl0b3JDaHJv
bWl1bS5jcHAKQEAgLTM5LDcgKzM5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBQYXNzUmVm
UHRyPENsaXBib2FyZD4gRWRpdG9yOjpuZXdHZW5lcmFsQ2xpcGJvYXJkKENsaXBib2FyZEFjY2Vz
c1BvbGljeSBwb2xpY3ksIEZyYW1lKiBmcmFtZSkKIHsKLSAgICByZXR1cm4gQ2xpcGJvYXJkQ2hy
b21pdW06OmNyZWF0ZShDbGlwYm9hcmQ6OkNvcHlBbmRQYXN0ZSwgQ2hyb21pdW1EYXRhT2JqZWN0
OjpjcmVhdGUoKSwgcG9saWN5LCBmcmFtZSk7CisgICAgcmV0dXJuIENsaXBib2FyZENocm9taXVt
OjpjcmVhdGUoQ2xpcGJvYXJkOjpDb3B5QW5kUGFzdGUsIENocm9taXVtRGF0YU9iamVjdDo6Y3Jl
YXRlKENsaXBib2FyZDo6Q29weUFuZFBhc3RlKSwgcG9saWN5LCBmcmFtZSk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9jaHJvbWl1bS9FdmVu
dEhhbmRsZXJDaHJvbWl1bS5jcHAgYi9XZWJDb3JlL3BhZ2UvY2hyb21pdW0vRXZlbnRIYW5kbGVy
Q2hyb21pdW0uY3BwCmluZGV4IDllOWE3OWEuLjE5YjhhODUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGFnZS9jaHJvbWl1bS9FdmVudEhhbmRsZXJDaHJvbWl1bS5jcHAKKysrIGIvV2ViQ29yZS9wYWdl
L2Nocm9taXVtL0V2ZW50SGFuZGxlckNocm9taXVtLmNwcApAQCAtMTI4LDcgKzEyOCw3IEBAIGJv
b2wgRXZlbnRIYW5kbGVyOjpldmVudEFjdGl2YXRlZFZpZXcoY29uc3QgUGxhdGZvcm1Nb3VzZUV2
ZW50JiBldmVudCkgY29uc3QKIAogUGFzc1JlZlB0cjxDbGlwYm9hcmQ+IEV2ZW50SGFuZGxlcjo6
Y3JlYXRlRHJhZ2dpbmdDbGlwYm9hcmQoKSBjb25zdAogewotICAgIFJlZlB0cjxDaHJvbWl1bURh
dGFPYmplY3Q+IGRhdGFPYmplY3QgPSBDaHJvbWl1bURhdGFPYmplY3Q6OmNyZWF0ZSgpOworICAg
IFJlZlB0cjxDaHJvbWl1bURhdGFPYmplY3Q+IGRhdGFPYmplY3QgPSBDaHJvbWl1bURhdGFPYmpl
Y3Q6OmNyZWF0ZShDbGlwYm9hcmQ6OkRyYWdBbmREcm9wKTsKICAgICByZXR1cm4gQ2xpcGJvYXJk
Q2hyb21pdW06OmNyZWF0ZShDbGlwYm9hcmQ6OkRyYWdBbmREcm9wLCBkYXRhT2JqZWN0LmdldCgp
LCBDbGlwYm9hcmRXcml0YWJsZSwgbV9mcmFtZSk7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmNwcCBiL1dlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmNwcAppbmRleCA4MzUyNjY5Li5hMDM1ZDdh
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVj
dC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3Qu
Y3BwCkBAIC0zMSw1NiArMzEsMjM2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
Q2hyb21pdW1EYXRhT2JqZWN0LmgiCiAKKyNpbmNsdWRlICJDaHJvbWl1bUJyaWRnZS5oIgorI2lu
Y2x1ZGUgIkNsaXBib2FyZE1pbWVUeXBlcy5oIgorI2luY2x1ZGUgIlBhc3RlYm9hcmQuaCIKKwog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIENocm9taXVtRGF0YU9iamVjdDo6Y2xlYXIoKQor
Ly8gUGVyIFJGQyAyNDgzLCB0aGUgbGluZSBzZXBhcmF0b3IgZm9yICJ0ZXh0Ly4uLiIgTUlNRSB0
eXBlcyBpcyBDUi1MRi4KK3N0YXRpYyBjaGFyIGNvbnN0KiBjb25zdCB0ZXh0TUlNRVR5cGVMaW5l
U2VwYXJhdG9yID0gIlxyXG4iOworCit2b2lkIENocm9taXVtRGF0YU9iamVjdDo6Y2xlYXJEYXRh
KGNvbnN0IFN0cmluZyYgdHlwZSkKK3sKKyAgICBpZiAodHlwZSA9PSBtaW1lVHlwZVRleHRQbGFp
bikgeworICAgICAgICBtX3BsYWluVGV4dCA9ICIiOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKHR5cGUgPT0gbWltZVR5cGVVUkwgfHwgdHlwZSA9PSBtaW1lVHlwZVRleHRVUklM
aXN0KSB7CisgICAgICAgIG1fdXJsID0gS1VSTCgpOworICAgICAgICBtX3VybFRpdGxlID0gIiI7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAodHlwZSA9PSBtaW1lVHlwZVRleHRI
VE1MKSB7CisgICAgICAgIG1fdGV4dEh0bWwgPSAiIjsKKyAgICAgICAgbV9odG1sQmFzZVVybCA9
IEtVUkwoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICh0eXBlID09IG1pbWVU
eXBlRG93bmxvYWRVUkwpIHsKKyAgICAgICAgbV9kb3dubG9hZE1ldGFkYXRhID0gIiI7CisgICAg
ICAgIHJldHVybjsKKyAgICB9Cit9CisKK3ZvaWQgQ2hyb21pdW1EYXRhT2JqZWN0OjpjbGVhckFs
bCgpCiB7CiAgICAgY2xlYXJBbGxFeGNlcHRGaWxlcygpOwotICAgIGZpbGVuYW1lcy5jbGVhcigp
OworICAgIG1fZmlsZW5hbWVzLmNsZWFyKCk7CiB9CiAKIHZvaWQgQ2hyb21pdW1EYXRhT2JqZWN0
OjpjbGVhckFsbEV4Y2VwdEZpbGVzKCkKIHsKLSAgICB1cmwgPSBLVVJMKCk7Ci0gICAgdXJsVGl0
bGUgPSAiIjsKLSAgICB1cmlMaXN0LmNsZWFyKCk7Ci0gICAgZG93bmxvYWRNZXRhZGF0YSA9ICIi
OwotICAgIGZpbGVFeHRlbnNpb24gPSAiIjsKLSAgICBwbGFpblRleHQgPSAiIjsKLSAgICB0ZXh0
SHRtbCA9ICIiOwotICAgIGh0bWxCYXNlVXJsID0gS1VSTCgpOwotICAgIGZpbGVDb250ZW50Rmls
ZW5hbWUgPSAiIjsKLSAgICBpZiAoZmlsZUNvbnRlbnQpCi0gICAgICAgIGZpbGVDb250ZW50LT5j
bGVhcigpOworICAgIG1fdXJsID0gS1VSTCgpOworICAgIG1fdXJpTGlzdC5jbGVhcigpOworICAg
IG1fdXJsVGl0bGUgPSAiIjsKKyAgICBtX2Rvd25sb2FkTWV0YWRhdGEgPSAiIjsKKyAgICBtX2Zp
bGVFeHRlbnNpb24gPSAiIjsKKyAgICBtX3BsYWluVGV4dCA9ICIiOworICAgIG1fdGV4dEh0bWwg
PSAiIjsKKyAgICBtX2h0bWxCYXNlVXJsID0gS1VSTCgpOworICAgIG1fZmlsZUNvbnRlbnRGaWxl
bmFtZSA9ICIiOworICAgIGlmIChtX2ZpbGVDb250ZW50KQorICAgICAgICBtX2ZpbGVDb250ZW50
LT5jbGVhcigpOwogfQogCiBib29sIENocm9taXVtRGF0YU9iamVjdDo6aGFzRGF0YSgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuICF1cmwuaXNFbXB0eSgpCi0gICAgICAgIHx8ICF1cmlMaXN0LmlzRW1w
dHkoKQotICAgICAgICB8fCAhZG93bmxvYWRNZXRhZGF0YS5pc0VtcHR5KCkKLSAgICAgICAgfHwg
IWZpbGVFeHRlbnNpb24uaXNFbXB0eSgpCi0gICAgICAgIHx8ICFmaWxlbmFtZXMuaXNFbXB0eSgp
Ci0gICAgICAgIHx8ICFwbGFpblRleHQuaXNFbXB0eSgpCi0gICAgICAgIHx8ICF0ZXh0SHRtbC5p
c0VtcHR5KCkKLSAgICAgICAgfHwgZmlsZUNvbnRlbnQ7CisgICAgcmV0dXJuICFtX3VybC5pc0Vt
cHR5KCkKKyAgICAgICAgfHwgIW1fdXJpTGlzdC5pc0VtcHR5KCkKKyAgICAgICAgfHwgIW1fZG93
bmxvYWRNZXRhZGF0YS5pc0VtcHR5KCkKKyAgICAgICAgfHwgIW1fZmlsZUV4dGVuc2lvbi5pc0Vt
cHR5KCkKKyAgICAgICAgfHwgIW1fZmlsZW5hbWVzLmlzRW1wdHkoKQorICAgICAgICB8fCAhbV9w
bGFpblRleHQuaXNFbXB0eSgpCisgICAgICAgIHx8ICFtX3RleHRIdG1sLmlzRW1wdHkoKQorICAg
ICAgICB8fCBtX2ZpbGVDb250ZW50OworfQorCitIYXNoU2V0PFN0cmluZz4gQ2hyb21pdW1EYXRh
T2JqZWN0Ojp0eXBlcygpIGNvbnN0Cit7CisgICAgLy8gVGhpcyBpcyBjdXJyZW50bHkgYnJva2Vu
IGZvciBwYXN0ZWJvYXJkIGV2ZW50cywgYW5kIGFsd2F5cyBoYXMgYmVlbi4KKyAgICBIYXNoU2V0
PFN0cmluZz4gcmVzdWx0czsKKworICAgIGlmICghbV9wbGFpblRleHQuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIHJlc3VsdHMuYWRkKG1pbWVUeXBlVGV4dCk7CisgICAgICAgIHJlc3VsdHMuYWRkKG1p
bWVUeXBlVGV4dFBsYWluKTsKKyAgICB9CisKKyAgICBpZiAoIW1fdXJsLmlzRW1wdHkoKSkgewor
ICAgICAgICByZXN1bHRzLmFkZChtaW1lVHlwZVVSTCk7CisgICAgICAgIHJlc3VsdHMuYWRkKG1p
bWVUeXBlVGV4dFVSSUxpc3QpOworICAgIH0KKworICAgIGlmICghbV90ZXh0SHRtbC5pc0VtcHR5
KCkpCisgICAgICAgIHJlc3VsdHMuYWRkKG1pbWVUeXBlVGV4dEhUTUwpOworCisgICAgaWYgKCFt
X2ZpbGVuYW1lcy5pc0VtcHR5KCkpCisgICAgICAgIHJlc3VsdHMuYWRkKCJGaWxlcyIpOworCisg
ICAgcmV0dXJuIHJlc3VsdHM7Cit9CisKK1N0cmluZyBDaHJvbWl1bURhdGFPYmplY3Q6OmdldERh
dGEoY29uc3QgU3RyaW5nJiB0eXBlLCBib29sJiBzdWNjZXNzKQoreworICAgIGlmICh0eXBlID09
IG1pbWVUeXBlVGV4dFBsYWluKSB7CisgICAgICAgIGlmIChtX2NsaXBib2FyZFR5cGUgPT0gQ2xp
cGJvYXJkOjpDb3B5QW5kUGFzdGUpIHsKKyAgICAgICAgICAgIFBhc3RlYm9hcmRQcml2YXRlOjpD
bGlwYm9hcmRCdWZmZXIgYnVmZmVyID0KKyAgICAgICAgICAgICAgICBQYXN0ZWJvYXJkOjpnZW5l
cmFsUGFzdGVib2FyZCgpLT5pc1NlbGVjdGlvbk1vZGUoKSA/CisgICAgICAgICAgICAgICAgUGFz
dGVib2FyZFByaXZhdGU6OlNlbGVjdGlvbkJ1ZmZlciA6CisgICAgICAgICAgICAgICAgUGFzdGVi
b2FyZFByaXZhdGU6OlN0YW5kYXJkQnVmZmVyOworICAgICAgICAgICAgU3RyaW5nIHRleHQgPSBD
aHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkUmVhZFBsYWluVGV4dChidWZmZXIpOworICAgICAgICAg
ICAgc3VjY2VzcyA9ICF0ZXh0LmlzRW1wdHkoKTsKKyAgICAgICAgICAgIHJldHVybiB0ZXh0Owor
ICAgICAgICB9CisgICAgICAgIHN1Y2Nlc3MgPSAhbV9wbGFpblRleHQuaXNFbXB0eSgpOworICAg
ICAgICByZXR1cm4gbV9wbGFpblRleHQ7CisgICAgfQorCisgICAgaWYgKHR5cGUgPT0gbWltZVR5
cGVVUkwpIHsKKyAgICAgICAgc3VjY2VzcyA9ICFtX3VybC5pc0VtcHR5KCk7CisgICAgICAgIHJl
dHVybiBtX3VybC5zdHJpbmcoKTsKKyAgICB9CisKKyAgICBpZiAodHlwZSA9PSBtaW1lVHlwZVRl
eHRVUklMaXN0KSB7CisgICAgICAgIC8vIFRoaXMgd2lsbCBhbHdheXMgYmUgZW1wdHkgb24gYSBk
cmFnLWluLgorICAgICAgICBpZiAobV91cmlMaXN0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAg
c3VjY2VzcyA9ICFtX3VybC5pc0VtcHR5KCk7CisgICAgICAgICAgICByZXR1cm4gbV91cmw7Cisg
ICAgICAgIH0KKyAgICAgICAgc3VjY2VzcyA9IHRydWU7CisgICAgICAgIFN0cmluZyB1cmlMaXN0
U3RyaW5nKG1fdXJpTGlzdFswXSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgbV91
cmlMaXN0LnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICB1cmlMaXN0U3RyaW5nLmFwcGVuZCh0
ZXh0TUlNRVR5cGVMaW5lU2VwYXJhdG9yKTsKKyAgICAgICAgICAgIHVyaUxpc3RTdHJpbmcuYXBw
ZW5kKG1fdXJpTGlzdFtpXSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHVyaUxpc3RTdHJp
bmc7CisgICAgfQorCisgICAgaWYgKHR5cGUgPT0gbWltZVR5cGVUZXh0SFRNTCkgeworICAgICAg
ICBpZiAobV9jbGlwYm9hcmRUeXBlID09IENsaXBib2FyZDo6Q29weUFuZFBhc3RlKSB7CisgICAg
ICAgICAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyIGJ1ZmZlciA9CisgICAg
ICAgICAgICAgICAgUGFzdGVib2FyZDo6Z2VuZXJhbFBhc3RlYm9hcmQoKS0+aXNTZWxlY3Rpb25N
b2RlKCkgPworICAgICAgICAgICAgICAgIFBhc3RlYm9hcmRQcml2YXRlOjpTZWxlY3Rpb25CdWZm
ZXIgOgorICAgICAgICAgICAgICAgIFBhc3RlYm9hcmRQcml2YXRlOjpTdGFuZGFyZEJ1ZmZlcjsK
KyAgICAgICAgICAgIFN0cmluZyBodG1sVGV4dDsKKyAgICAgICAgICAgIEtVUkwgc291cmNlVVJM
OworICAgICAgICAgICAgQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFJlYWRIVE1MKGJ1ZmZlciwg
Jmh0bWxUZXh0LCAmc291cmNlVVJMKTsKKyAgICAgICAgICAgIHN1Y2Nlc3MgPSAhaHRtbFRleHQu
aXNFbXB0eSgpOworICAgICAgICAgICAgcmV0dXJuIGh0bWxUZXh0OworICAgICAgICB9CisgICAg
ICAgIHN1Y2Nlc3MgPSAhbV90ZXh0SHRtbC5pc0VtcHR5KCk7CisgICAgICAgIHJldHVybiBtX3Rl
eHRIdG1sOworICAgIH0KKworICAgIGlmICh0eXBlID09IG1pbWVUeXBlRG93bmxvYWRVUkwpIHsK
KyAgICAgICAgc3VjY2VzcyA9ICFtX2Rvd25sb2FkTWV0YWRhdGEuaXNFbXB0eSgpOworICAgICAg
ICByZXR1cm4gbV9kb3dubG9hZE1ldGFkYXRhOworICAgIH0KKworICAgIHN1Y2Nlc3MgPSBmYWxz
ZTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK2Jvb2wgQ2hyb21pdW1EYXRhT2JqZWN0Ojpz
ZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKQoreworICAgIGlm
ICh0eXBlID09IG1pbWVUeXBlVGV4dFBsYWluKSB7CisgICAgICAgIG1fcGxhaW5UZXh0ID0gZGF0
YTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKHR5cGUgPT0gbWltZVR5
cGVVUkwgfHwgdHlwZSA9PSBtaW1lVHlwZVRleHRVUklMaXN0KSB7CisgICAgICAgIG1fdXJsID0g
S1VSTCgpOworICAgICAgICAvLyBMaW5lIHNlcGFyYXRvciBpcyBcclxuIHBlciBSRkMgMjQ4MyAt
IGhvd2V2ZXIsIGZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMKKyAgICAgICAgLy8gd2UgYWxzbyBh
bGxvdyBqdXN0IFxuIGhlcmUuCisgICAgICAgIGRhdGEuc3BsaXQoJ1xuJywgbV91cmlMaXN0KTsK
KyAgICAgICAgLy8gU3RyaXAgd2hpdGUgc3BhY2Ugb24gYWxsIGxpbmVzLCBpbmNsdWRpbmcgdHJh
aWxpbmcgXHIgZnJvbSBhYm92ZSBzcGxpdC4KKyAgICAgICAgLy8gSWYgdGhpcyBsZWF2ZXMgYSBs
aW5lIGVtcHR5LCByZW1vdmUgaXQgY29tcGxldGVseS4KKyAgICAgICAgLy8KKyAgICAgICAgLy8g
QWxzbywgY29weSB0aGUgZmlyc3QgdmFsaWQgVVJMIGludG8gdGhlICd1cmwnIG1lbWJlciBhcyB3
ZWxsLgorICAgICAgICAvLyBJbiBjYXNlIG5vIGVudHJ5IGlzIGEgdmFsaWQgVVJMIChpLmUuLCBy
ZW1hcmtzIG9ubHkpLCB0aGVuIHdlIGxlYXZlICd1cmwnIGVtcHR5LgorICAgICAgICAvLyBJLmUu
LCBpbiB0aGF0IGNhc2Ugc3Vic2VxdWVudCBjYWxscyB0byBnZXREYXRhKCJVUkwiKSB3aWxsIGdl
dCBhbiBlbXB0eSBzdHJpbmcuCisgICAgICAgIC8vIFRoaXMgaXMgaW4gbGluZSB3aXRoIHRoZSBI
VE1MNSBzcGVjIChzZWUgIlRoZSBEcmFnRXZlbnQgYW5kIERhdGFUcmFuc2ZlciBpbnRlcmZhY2Vz
IikuCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV91cmlMaXN0LnNpemUoKTsgLyoq
LykgeworICAgICAgICAgICAgU3RyaW5nJiBsaW5lID0gbV91cmlMaXN0W2ldOworICAgICAgICAg
ICAgbGluZSA9IGxpbmUuc3RyaXBXaGl0ZVNwYWNlKCk7CisgICAgICAgICAgICBpZiAobGluZS5p
c0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBtX3VyaUxpc3QucmVtb3ZlKGkpOworICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgKytpOworICAg
ICAgICAgICAgLy8gT25seSBjb3B5IHRoZSBmaXJzdCB2YWxpZCBVUkwuCisgICAgICAgICAgICBp
ZiAobV91cmwuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgLy8gU2tpcCByZW1hcmtzLgorICAgICAgICAgICAgaWYgKGxpbmVbMF0gPT0gJyMnKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgS1VSTCB1cmwgPSBLVVJMKFBhcnNl
ZFVSTFN0cmluZywgbGluZSk7CisgICAgICAgICAgICBpZiAodXJsLmlzVmFsaWQoKSkKKyAgICAg
ICAgICAgICAgICBtX3VybCA9IHVybDsKKyAgICAgICAgfQorICAgICAgICBpZiAobV91cmlMaXN0
LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgQVNTRVJUKG1fdXJsLmlzRW1wdHkoKSk7CisgICAg
ICAgICAgICByZXR1cm4gZGF0YS5pc0VtcHR5KCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgaWYgKHR5cGUgPT0gbWltZVR5cGVUZXh0SFRNTCkgeworICAg
ICAgICBtX3RleHRIdG1sID0gZGF0YTsKKyAgICAgICAgbV9odG1sQmFzZVVybCA9IEtVUkwoKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKHR5cGUgPT0gbWltZVR5cGVE
b3dubG9hZFVSTCkgeworICAgICAgICBtX2Rvd25sb2FkTWV0YWRhdGEgPSBkYXRhOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0Nocm9taXVt
RGF0YU9iamVjdDo6Q2hyb21pdW1EYXRhT2JqZWN0KENsaXBib2FyZDo6Q2xpcGJvYXJkVHlwZSBj
bGlwYm9hcmRUeXBlKQorICAgIDogbV9jbGlwYm9hcmRUeXBlKGNsaXBib2FyZFR5cGUpCit7CiB9
CiAKIENocm9taXVtRGF0YU9iamVjdDo6Q2hyb21pdW1EYXRhT2JqZWN0KGNvbnN0IENocm9taXVt
RGF0YU9iamVjdCYgb3RoZXIpCiAgICAgOiBSZWZDb3VudGVkPENocm9taXVtRGF0YU9iamVjdD4o
KQotICAgICwgdXJsVGl0bGUob3RoZXIudXJsVGl0bGUpCi0gICAgLCBkb3dubG9hZE1ldGFkYXRh
KG90aGVyLmRvd25sb2FkTWV0YWRhdGEpCi0gICAgLCBmaWxlRXh0ZW5zaW9uKG90aGVyLmZpbGVF
eHRlbnNpb24pCi0gICAgLCBmaWxlbmFtZXMob3RoZXIuZmlsZW5hbWVzKQotICAgICwgcGxhaW5U
ZXh0KG90aGVyLnBsYWluVGV4dCkKLSAgICAsIHRleHRIdG1sKG90aGVyLnRleHRIdG1sKQotICAg
ICwgaHRtbEJhc2VVcmwob3RoZXIuaHRtbEJhc2VVcmwpCi0gICAgLCBmaWxlQ29udGVudEZpbGVu
YW1lKG90aGVyLmZpbGVDb250ZW50RmlsZW5hbWUpCi0gICAgLCB1cmwob3RoZXIudXJsKQotICAg
ICwgdXJpTGlzdChvdGhlci51cmlMaXN0KQorICAgICwgbV9jbGlwYm9hcmRUeXBlKG90aGVyLm1f
Y2xpcGJvYXJkVHlwZSkKKyAgICAsIG1fdXJsVGl0bGUob3RoZXIubV91cmxUaXRsZSkKKyAgICAs
IG1fZG93bmxvYWRNZXRhZGF0YShvdGhlci5tX2Rvd25sb2FkTWV0YWRhdGEpCisgICAgLCBtX2Zp
bGVFeHRlbnNpb24ob3RoZXIubV9maWxlRXh0ZW5zaW9uKQorICAgICwgbV9maWxlbmFtZXMob3Ro
ZXIubV9maWxlbmFtZXMpCisgICAgLCBtX3BsYWluVGV4dChvdGhlci5tX3BsYWluVGV4dCkKKyAg
ICAsIG1fdGV4dEh0bWwob3RoZXIubV90ZXh0SHRtbCkKKyAgICAsIG1faHRtbEJhc2VVcmwob3Ro
ZXIubV9odG1sQmFzZVVybCkKKyAgICAsIG1fZmlsZUNvbnRlbnRGaWxlbmFtZShvdGhlci5tX2Zp
bGVDb250ZW50RmlsZW5hbWUpCisgICAgLCBtX3VybChvdGhlci5tX3VybCkKIHsKLSAgICBpZiAo
b3RoZXIuZmlsZUNvbnRlbnQuZ2V0KCkpCi0gICAgICAgIGZpbGVDb250ZW50ID0gb3RoZXIuZmls
ZUNvbnRlbnQtPmNvcHkoKTsKKyAgICBpZiAob3RoZXIubV9maWxlQ29udGVudC5nZXQoKSkKKyAg
ICAgICAgbV9maWxlQ29udGVudCA9IG90aGVyLm1fZmlsZUNvbnRlbnQtPmNvcHkoKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9DaHJvbWl1bURhdGFPYmplY3QuaCBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hy
b21pdW1EYXRhT2JqZWN0LmgKaW5kZXggYWYwYTNmYS4uYWY2ZTllMiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuaAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5oCkBAIC0zMSwxMSArMzEsMTQg
QEAKICNpZm5kZWYgQ2hyb21pdW1EYXRhT2JqZWN0X2gKICNkZWZpbmUgQ2hyb21pdW1EYXRhT2Jq
ZWN0X2gKIAorI2luY2x1ZGUgIkNsaXBib2FyZC5oIgogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNs
dWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1
ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIApAQCAtNDQsOSArNDcsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
Ly8gb2YgYW5kIGlzIG5vdCBzcGVjaWZpYyB0byBhIHBsYXRmb3JtLgogICAgIGNsYXNzIENocm9t
aXVtRGF0YU9iamVjdCA6IHB1YmxpYyBSZWZDb3VudGVkPENocm9taXVtRGF0YU9iamVjdD4gewog
ICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2hyb21pdW1EYXRhT2JqZWN0
PiBjcmVhdGUoKQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDaHJvbWl1bURhdGFPYmplY3Q+
IGNyZWF0ZShDbGlwYm9hcmQ6OkNsaXBib2FyZFR5cGUgY2xpcGJvYXJkVHlwZSkKICAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDaHJvbWl1bURhdGFPYmplY3QpOwor
ICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDaHJvbWl1bURhdGFPYmplY3QoY2xpcGJv
YXJkVHlwZSkpOwogICAgICAgICB9CiAKICAgICAgICAgUGFzc1JlZlB0cjxDaHJvbWl1bURhdGFP
YmplY3Q+IGNvcHkoKSBjb25zdApAQCAtNTQsNjAgKzU3LDU5IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2hyb21pdW1EYXRhT2JqZWN0KCp0
aGlzKSk7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkIGNsZWFyKCk7CisgICAgICAgIHZvaWQg
Y2xlYXJEYXRhKGNvbnN0IFN0cmluZyYgdHlwZSk7CisgICAgICAgIHZvaWQgY2xlYXJBbGwoKTsK
ICAgICAgICAgdm9pZCBjbGVhckFsbEV4Y2VwdEZpbGVzKCk7Ci0gICAgICAgIGJvb2wgaGFzRGF0
YSgpIGNvbnN0OwotCi0gICAgICAgIHZvaWQgY2xlYXJVUkwoKQotICAgICAgICB7Ci0gICAgICAg
ICAgICB1cmwgPSBLVVJMKCk7Ci0gICAgICAgICAgICB1cmlMaXN0LmNsZWFyKCk7Ci0gICAgICAg
ICAgICB1cmxUaXRsZSA9ICIiOwotICAgICAgICB9CiAKLSAgICAgICAgYm9vbCBoYXNWYWxpZFVS
TCgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiB1cmwuaXNWYWxpZCgpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgS1VSTCBnZXRVUkwoKSBjb25zdAotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gdXJsOwotICAgICAgICB9CisgICAgICAgIGJvb2wgaGFzRGF0YSgpIGNv
bnN0OwogCi0gICAgICAgIHZvaWQgc2V0VVJMKGNvbnN0IEtVUkwmIG5ld1VSTCkKLSAgICAgICAg
ewotICAgICAgICAgICAgdXJsID0gbmV3VVJMOwotICAgICAgICAgICAgdXJpTGlzdC5jbGVhcigp
OwotICAgICAgICAgICAgaWYgKG5ld1VSTC5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgdXJpTGlzdC5hcHBlbmQobmV3VVJMLnN0cmluZygpKTsKLSAgICAg
ICAgfQorICAgICAgICBIYXNoU2V0PFN0cmluZz4gdHlwZXMoKSBjb25zdDsKKyAgICAgICAgU3Ry
aW5nIGdldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBib29sJiBzdWNjZXNzKTsKKyAgICAgICAg
Ym9vbCBzZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKTsKKwor
ICAgICAgICAvLyBTcGVjaWFsIGhhbmRsZXJzIGZvciBVUkwvSFRNTCBtZXRhZGF0YS4KKyAgICAg
ICAgU3RyaW5nIHVybFRpdGxlKCkgY29uc3QgeyByZXR1cm4gbV91cmxUaXRsZTsgfQorICAgICAg
ICB2b2lkIHNldFVybFRpdGxlKGNvbnN0IFN0cmluZyYgdXJsVGl0bGUpIHsgbV91cmxUaXRsZSA9
IHVybFRpdGxlOyB9CisgICAgICAgIEtVUkwgaHRtbEJhc2VVcmwoKSBjb25zdCB7IHJldHVybiBt
X2h0bWxCYXNlVXJsOyB9CisgICAgICAgIHZvaWQgc2V0SHRtbEJhc2VVcmwoY29uc3QgS1VSTCYg
dXJsKSB7IG1faHRtbEJhc2VVcmwgPSB1cmw7IH0KKworICAgICAgICAvLyBVc2VkIHRvIGhhbmRs
ZSBmaWxlcyBiZWluZyBkcmFnZ2VkIGluLgorICAgICAgICBib29sIGNvbnRhaW5zRmlsZW5hbWVz
KCkgY29uc3QgeyByZXR1cm4gIW1fZmlsZW5hbWVzLmlzRW1wdHkoKTsgfQorICAgICAgICBWZWN0
b3I8U3RyaW5nPiBmaWxlbmFtZXMoKSBjb25zdCB7IHJldHVybiBtX2ZpbGVuYW1lczsgfQorICAg
ICAgICB2b2lkIHNldEZpbGVuYW1lcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVzKSB7
IG1fZmlsZW5hbWVzID0gZmlsZW5hbWVzOyB9CisKKyAgICAgICAgLy8gVXNlZCB0byBoYW5kbGUg
ZmlsZXMgKGltYWdlcykgYmVpbmcgZHJhZ2dlZCBvdXQuCisgICAgICAgIFN0cmluZyBmaWxlRXh0
ZW5zaW9uKCkgY29uc3QgeyByZXR1cm4gbV9maWxlRXh0ZW5zaW9uOyB9CisgICAgICAgIHZvaWQg
c2V0RmlsZUV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGZpbGVFeHRlbnNpb24pIHsgbV9maWxlRXh0
ZW5zaW9uID0gZmlsZUV4dGVuc2lvbjsgfQorICAgICAgICBTdHJpbmcgZmlsZUNvbnRlbnRGaWxl
bmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsZUNvbnRlbnRGaWxlbmFtZTsgfQorICAgICAgICB2
b2lkIHNldEZpbGVDb250ZW50RmlsZW5hbWUoY29uc3QgU3RyaW5nJiBmaWxlQ29udGVudEZpbGVu
YW1lKSB7IG1fZmlsZUNvbnRlbnRGaWxlbmFtZSA9IGZpbGVDb250ZW50RmlsZW5hbWU7IH0KKyAg
ICAgICAgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGZpbGVDb250ZW50KCkgY29uc3QgeyByZXR1
cm4gbV9maWxlQ29udGVudDsgfQorICAgICAgICB2b2lkIHNldEZpbGVDb250ZW50KFBhc3NSZWZQ
dHI8U2hhcmVkQnVmZmVyPiBmaWxlQ29udGVudCkgeyBtX2ZpbGVDb250ZW50ID0gZmlsZUNvbnRl
bnQ7IH0KIAotICAgICAgICBTdHJpbmcgdXJsVGl0bGU7CisgICAgcHJpdmF0ZToKKyAgICAgICAg
Q2hyb21pdW1EYXRhT2JqZWN0KENsaXBib2FyZDo6Q2xpcGJvYXJkVHlwZSk7CisgICAgICAgIENo
cm9taXVtRGF0YU9iamVjdChjb25zdCBDaHJvbWl1bURhdGFPYmplY3QmKTsKIAotICAgICAgICBT
dHJpbmcgZG93bmxvYWRNZXRhZGF0YTsKKyAgICAgICAgQ2xpcGJvYXJkOjpDbGlwYm9hcmRUeXBl
IG1fY2xpcGJvYXJkVHlwZTsKIAotICAgICAgICBTdHJpbmcgZmlsZUV4dGVuc2lvbjsKLSAgICAg
ICAgVmVjdG9yPFN0cmluZz4gZmlsZW5hbWVzOworICAgICAgICBTdHJpbmcgbV91cmxUaXRsZTsK
IAotICAgICAgICBTdHJpbmcgcGxhaW5UZXh0OworICAgICAgICBTdHJpbmcgbV9kb3dubG9hZE1l
dGFkYXRhOwogCi0gICAgICAgIFN0cmluZyB0ZXh0SHRtbDsKLSAgICAgICAgS1VSTCBodG1sQmFz
ZVVybDsKKyAgICAgICAgU3RyaW5nIG1fZmlsZUV4dGVuc2lvbjsKKyAgICAgICAgVmVjdG9yPFN0
cmluZz4gbV9maWxlbmFtZXM7CiAKLSAgICAgICAgU3RyaW5nIGZpbGVDb250ZW50RmlsZW5hbWU7
Ci0gICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGZpbGVDb250ZW50OworICAgICAgICBTdHJp
bmcgbV9wbGFpblRleHQ7CiAKLSAgICBwcml2YXRlOgotICAgICAgICAvLyBVUkwgYW5kIHVyaS1s
aXN0IGFyZSBsaW5rZWQsIHNvIHRoZXkgc2hvdWxkIG5vdCBiZSBhY2Nlc3NlZCBpbmRpdmlkdWFs
bHkuCi0gICAgICAgIEtVUkwgdXJsOwotICAgICAgICBWZWN0b3I8U3RyaW5nPiB1cmlMaXN0Owor
ICAgICAgICBTdHJpbmcgbV90ZXh0SHRtbDsKKyAgICAgICAgS1VSTCBtX2h0bWxCYXNlVXJsOwog
Ci0gICAgICAgIENocm9taXVtRGF0YU9iamVjdCgpIHt9Ci0gICAgICAgIENocm9taXVtRGF0YU9i
amVjdChjb25zdCBDaHJvbWl1bURhdGFPYmplY3QmKTsKKyAgICAgICAgU3RyaW5nIG1fZmlsZUNv
bnRlbnRGaWxlbmFtZTsKKyAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV9maWxlQ29udGVu
dDsKIAotICAgICAgICBmcmllbmQgY2xhc3MgQ2xpcGJvYXJkQ2hyb21pdW07CisgICAgICAgIC8v
IFRoZXNlIHR3byBhcmUgbGlua2VkLgorICAgICAgICBLVVJMIG1fdXJsOworICAgICAgICBWZWN0
b3I8U3RyaW5nPiBtX3VyaUxpc3Q7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5j
cHAgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmNwcAppbmRl
eCBjMmVjODBjLi4xNDk0YjE2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVt
L0NsaXBib2FyZENocm9taXVtLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Ns
aXBib2FyZENocm9taXVtLmNwcApAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgIkNsaXBib2Fy
ZENocm9taXVtLmgiCiAKICNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgotI2luY2x1ZGUgIkNocm9t
aXVtQnJpZGdlLmgiCiAjaW5jbHVkZSAiQ2hyb21pdW1EYXRhT2JqZWN0LmgiCiAjaW5jbHVkZSAi
Q2xpcGJvYXJkVXRpbGl0aWVzQ2hyb21pdW0uaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgpAQCAt
NDAsNyArMzksNiBAQAogI2luY2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdp
c3RyeS5oIgogI2luY2x1ZGUgIk5hbWVkTm9kZU1hcC5oIgotI2luY2x1ZGUgIlBhc3RlYm9hcmQu
aCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5j
bHVkZSAiUmVuZGVySW1hZ2UuaCIKQEAgLTU1LDQwICs1MywxNSBAQCB1c2luZyBuYW1lc3BhY2Ug
SFRNTE5hbWVzOwogLy8gV2UgcHJvdmlkZSB0aGUgSUUgY2xpcGJvYXJkIHR5cGVzIChVUkwgYW5k
IFRleHQpLCBhbmQgdGhlIGNsaXBib2FyZCB0eXBlcyBzcGVjaWZpZWQgaW4gdGhlIFdIQVRXRyBX
ZWIgQXBwbGljYXRpb25zIDEuMCBkcmFmdAogLy8gc2VlIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9z
cGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvIFNlY3Rpb24gNi4zLjUuMwogCi1lbnVtIENsaXBi
b2FyZERhdGFUeXBlIHsKLSAgICBDbGlwYm9hcmREYXRhVHlwZU5vbmUsCi0KLSAgICBDbGlwYm9h
cmREYXRhVHlwZVVSTCwKLSAgICBDbGlwYm9hcmREYXRhVHlwZVVSSUxpc3QsCi0gICAgQ2xpcGJv
YXJkRGF0YVR5cGVEb3dubG9hZFVSTCwKLSAgICBDbGlwYm9hcmREYXRhVHlwZVBsYWluVGV4dCwK
LSAgICBDbGlwYm9hcmREYXRhVHlwZUhUTUwsCi0KLSAgICBDbGlwYm9hcmREYXRhVHlwZU90aGVy
LAotfTsKLQogLy8gUGVyIFJGQyAyNDgzLCB0aGUgbGluZSBzZXBhcmF0b3IgZm9yICJ0ZXh0Ly4u
LiIgTUlNRSB0eXBlcyBpcyBDUi1MRi4KIHN0YXRpYyBjaGFyIGNvbnN0KiBjb25zdCB0ZXh0TUlN
RVR5cGVMaW5lU2VwYXJhdG9yID0gIlxyXG4iOwogCi1zdGF0aWMgQ2xpcGJvYXJkRGF0YVR5cGUg
Y2xpcGJvYXJkVHlwZUZyb21NSU1FVHlwZShjb25zdCBTdHJpbmcmIHR5cGUpCitzdGF0aWMgU3Ry
aW5nIG5vcm1hbGl6ZVR5cGUoY29uc3QgU3RyaW5nJiB0eXBlKQogewogICAgIFN0cmluZyBjbGVh
blR5cGUgPSB0eXBlLnN0cmlwV2hpdGVTcGFjZSgpLmxvd2VyKCk7Ci0gICAgaWYgKGNsZWFuVHlw
ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBDbGlwYm9hcmREYXRhVHlwZU5vbmU7Ci0KLSAg
ICAvLyBJbmNsdWRlcyB0d28gc3BlY2lhbCBjYXNlcyBmb3IgSUUgY29tcGF0aWJpbGl0eS4KLSAg
ICBpZiAoY2xlYW5UeXBlID09ICJ0ZXh0IiB8fCBjbGVhblR5cGUgPT0gInRleHQvcGxhaW4iIHx8
IGNsZWFuVHlwZS5zdGFydHNXaXRoKCJ0ZXh0L3BsYWluOyIpKQotICAgICAgICByZXR1cm4gQ2xp
cGJvYXJkRGF0YVR5cGVQbGFpblRleHQ7Ci0gICAgaWYgKGNsZWFuVHlwZSA9PSAidXJsIikKLSAg
ICAgICAgcmV0dXJuIENsaXBib2FyZERhdGFUeXBlVVJMOwotICAgIGlmIChjbGVhblR5cGUgPT0g
InRleHQvdXJpLWxpc3QiKQotICAgICAgICByZXR1cm4gQ2xpcGJvYXJkRGF0YVR5cGVVUklMaXN0
OwotICAgIGlmIChjbGVhblR5cGUgPT0gImRvd25sb2FkdXJsIikKLSAgICAgICAgcmV0dXJuIENs
aXBib2FyZERhdGFUeXBlRG93bmxvYWRVUkw7Ci0gICAgaWYgKGNsZWFuVHlwZSA9PSAidGV4dC9o
dG1sIikKLSAgICAgICAgcmV0dXJuIENsaXBib2FyZERhdGFUeXBlSFRNTDsKLQotICAgIHJldHVy
biBDbGlwYm9hcmREYXRhVHlwZU90aGVyOworICAgIGlmIChjbGVhblR5cGUgPT0gInRleHQiIHx8
IGNsZWFuVHlwZS5zdGFydHNXaXRoKCJ0ZXh0L3BsYWluOyIpKQorICAgICAgICByZXR1cm4gInRl
eHQvcGxhaW4iOworICAgIHJldHVybiBjbGVhblR5cGU7CiB9CiAKIFBhc3NSZWZQdHI8Q2xpcGJv
YXJkPiBDbGlwYm9hcmQ6OmNyZWF0ZShDbGlwYm9hcmRBY2Nlc3NQb2xpY3kgcG9saWN5LCBEcmFn
RGF0YSogZHJhZ0RhdGEsIEZyYW1lKiBmcmFtZSkKQEAgLTExNywzNiArOTAsNyBAQCB2b2lkIENs
aXBib2FyZENocm9taXVtOjpjbGVhckRhdGEoY29uc3QgU3RyaW5nJiB0eXBlKQogICAgIGlmIChw
b2xpY3koKSAhPSBDbGlwYm9hcmRXcml0YWJsZSB8fCAhbV9kYXRhT2JqZWN0KQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBDbGlwYm9hcmREYXRhVHlwZSBkYXRhVHlwZSA9IGNsaXBib2FyZFR5cGVG
cm9tTUlNRVR5cGUodHlwZSk7Ci0gICAgc3dpdGNoIChkYXRhVHlwZSkgewotICAgIGNhc2UgQ2xp
cGJvYXJkRGF0YVR5cGVOb25lOgotICAgICAgICAvLyBJZiBjYWxsZWQgd2l0aCBubyBhcmd1bWVu
dHMsIGV2ZXJ5dGhpbmcgZXhjZXB0IHRoZSBmaWxlIGxpc3QgbXVzdCBiZSBjbGVhcmVkLgotICAg
ICAgICAvLyAoU2VlIEhUTUw1IHNwZWMsICJUaGUgRHJhZ0V2ZW50IGFuZCBEYXRhVHJhbnNmZXIg
aW50ZXJmYWNlcyIpCi0gICAgICAgIG1fZGF0YU9iamVjdC0+Y2xlYXJBbGxFeGNlcHRGaWxlcygp
OwotICAgICAgICByZXR1cm47Ci0KLSAgICBjYXNlIENsaXBib2FyZERhdGFUeXBlVVJMOgotICAg
IGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVVUklMaXN0OgotICAgICAgICBtX2RhdGFPYmplY3QtPmNs
ZWFyVVJMKCk7Ci0gICAgICAgIHJldHVybjsKLQotICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVE
b3dubG9hZFVSTDoKLSAgICAgICAgbV9kYXRhT2JqZWN0LT5kb3dubG9hZE1ldGFkYXRhID0gIiI7
Ci0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZVBs
YWluVGV4dDoKLSAgICAgICAgbV9kYXRhT2JqZWN0LT5wbGFpblRleHQgPSAiIjsKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZUhUTUw6Ci0gICAgICAgIG1fZGF0
YU9iamVjdC0+dGV4dEh0bWwgPSAiIjsKLSAgICAgICAgbV9kYXRhT2JqZWN0LT5odG1sQmFzZVVy
bCA9IEtVUkwoKTsKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2FzZSBDbGlwYm9hcmREYXRhVHlw
ZU90aGVyOgotICAgICAgICAvLyBOb3QgeWV0IGltcGxlbWVudGVkLCBzZWUgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM0NDEwCi0gICAgICAgIHJldHVybjsKLSAgICB9
CisgICAgbV9kYXRhT2JqZWN0LT5jbGVhckRhdGEobm9ybWFsaXplVHlwZSh0eXBlKSk7CiAKICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KQEAgLTE1Niw3ICsxMDAsNyBAQCB2b2lkIENsaXBi
b2FyZENocm9taXVtOjpjbGVhckFsbERhdGEoKQogICAgIGlmIChwb2xpY3koKSAhPSBDbGlwYm9h
cmRXcml0YWJsZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9kYXRhT2JqZWN0LT5jbGVhcigp
OworICAgIG1fZGF0YU9iamVjdC0+Y2xlYXJBbGwoKTsKIH0KIAogU3RyaW5nIENsaXBib2FyZENo
cm9taXVtOjpnZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgYm9vbCYgc3VjY2VzcykgY29uc3QK
QEAgLTE2NSw4MCArMTA5LDcgQEAgU3RyaW5nIENsaXBib2FyZENocm9taXVtOjpnZXREYXRhKGNv
bnN0IFN0cmluZyYgdHlwZSwgYm9vbCYgc3VjY2VzcykgY29uc3QKICAgICBpZiAocG9saWN5KCkg
IT0gQ2xpcGJvYXJkUmVhZGFibGUgfHwgIW1fZGF0YU9iamVjdCkKICAgICAgICAgcmV0dXJuIFN0
cmluZygpOwogCi0gICAgQ2xpcGJvYXJkRGF0YVR5cGUgZGF0YVR5cGUgPSBjbGlwYm9hcmRUeXBl
RnJvbU1JTUVUeXBlKHR5cGUpOwotICAgIHN3aXRjaCAoZGF0YVR5cGUpIHsKLSAgICBjYXNlIENs
aXBib2FyZERhdGFUeXBlTm9uZToKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgLy8g
SGFjayBmb3IgVVJMcy4gZmlsZSBVUkxzIGFyZSB1c2VkIGludGVybmFsbHkgZm9yIGRyb3AncyBk
ZWZhdWx0IGFjdGlvbiwgYnV0IHdlIGRvbid0IHdhbnQKLSAgICAvLyB0byBleHBvc2UgdGhlbSB0
byB0aGUgcGFnZSwgc28gd2UgZmlsdGVyIHRoZW0gb3V0IGhlcmUuCi0gICAgY2FzZSBDbGlwYm9h
cmREYXRhVHlwZVVSSUxpc3Q6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyB0ZXh0Owot
ICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2RhdGFPYmplY3QtPnVyaUxpc3Qu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHVyaSA9IG1fZGF0
YU9iamVjdC0+dXJpTGlzdFtpXTsKLSAgICAgICAgICAgICAgICBpZiAocHJvdG9jb2xJcyh1cmks
ICJmaWxlIikpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAg
IEFTU0VSVCghdXJpLmlzRW1wdHkoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCF0ZXh0LmlzRW1w
dHkoKSkKLSAgICAgICAgICAgICAgICAgICAgdGV4dC5hcHBlbmQodGV4dE1JTUVUeXBlTGluZVNl
cGFyYXRvcik7Ci0gICAgICAgICAgICAgICAgLy8gVVJJcyBoYXZlIGFscmVhZHkgYmVlbiBjYW5v
bmljYWxpemVkLCBzbyBjb3B5IGV2ZXJ5dGhpbmcgdmVyYmF0aW0uCi0gICAgICAgICAgICAgICAg
dGV4dC5hcHBlbmQodXJpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHN1Y2Nlc3MgPSAh
dGV4dC5pc0VtcHR5KCk7Ci0gICAgICAgICAgICByZXR1cm4gdGV4dDsKLSAgICAgICAgfQotCi0g
ICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZVVSTDoKLSAgICAgICAgLy8gSW4gY2FzZSBvZiBhIHBy
ZXZpb3VzIHNldERhdGEoJ3RleHQvdXJpLWxpc3QnKSwgc2V0RGF0YSgpIGhhcyBhbHJlYWR5Ci0g
ICAgICAgIC8vIHByZXBhcmVkIHRoZSAndXJsJyBtZW1iZXIsIHNvIHdlIGNhbiBqdXN0IHJldHJp
ZXZlIGl0IGhlcmUuCi0gICAgICAgIGlmICghbV9kYXRhT2JqZWN0LT51cmwuaXNFbXB0eSgpICYm
ICFtX2RhdGFPYmplY3QtPnVybC5pc0xvY2FsRmlsZSgpKSB7Ci0gICAgICAgICAgICBzdWNjZXNz
ID0gdHJ1ZTsKLSAgICAgICAgICAgIHJldHVybiBtX2RhdGFPYmplY3QtPnVybC5zdHJpbmcoKTsK
LSAgICAgICAgfQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBjYXNlIENsaXBib2Fy
ZERhdGFUeXBlRG93bmxvYWRVUkw6Ci0gICAgICAgIHN1Y2Nlc3MgPSAhbV9kYXRhT2JqZWN0LT5k
b3dubG9hZE1ldGFkYXRhLmlzRW1wdHkoKTsKLSAgICAgICAgcmV0dXJuIG1fZGF0YU9iamVjdC0+
ZG93bmxvYWRNZXRhZGF0YTsKLSAgICAKLSAgICBjYXNlIENsaXBib2FyZERhdGFUeXBlUGxhaW5U
ZXh0OgotICAgICAgICBpZiAoaXNGb3JDb3B5QW5kUGFzdGUoKSkgewotICAgICAgICAgICAgUGFz
dGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlciBidWZmZXIgPSAKLSAgICAgICAgICAgICAg
ICBQYXN0ZWJvYXJkOjpnZW5lcmFsUGFzdGVib2FyZCgpLT5pc1NlbGVjdGlvbk1vZGUoKSA/Ci0g
ICAgICAgICAgICAgICAgUGFzdGVib2FyZFByaXZhdGU6OlNlbGVjdGlvbkJ1ZmZlciA6IAotICAg
ICAgICAgICAgICAgIFBhc3RlYm9hcmRQcml2YXRlOjpTdGFuZGFyZEJ1ZmZlcjsKLSAgICAgICAg
ICAgIFN0cmluZyB0ZXh0ID0gQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFJlYWRQbGFpblRleHQo
YnVmZmVyKTsKLSAgICAgICAgICAgIHN1Y2Nlc3MgPSAhdGV4dC5pc0VtcHR5KCk7Ci0gICAgICAg
ICAgICByZXR1cm4gdGV4dDsKLSAgICAgICAgfQotICAgICAgICAvLyBPdGhlcndpc2UgcmV0dXJu
IHdoYXRldmVyIGlzIHN0b3JlZCBpbiBwbGFpblRleHQuCi0gICAgICAgIHN1Y2Nlc3MgPSAhbV9k
YXRhT2JqZWN0LT5wbGFpblRleHQuaXNFbXB0eSgpOwotICAgICAgICByZXR1cm4gbV9kYXRhT2Jq
ZWN0LT5wbGFpblRleHQ7Ci0KLSAgICBjYXNlIENsaXBib2FyZERhdGFUeXBlSFRNTDoKLSAgICAg
ICAgaWYgKGlzRm9yQ29weUFuZFBhc3RlKCkpIHsKLSAgICAgICAgICAgIFBhc3RlYm9hcmRQcml2
YXRlOjpDbGlwYm9hcmRCdWZmZXIgYnVmZmVyID0gCi0gICAgICAgICAgICAgICAgUGFzdGVib2Fy
ZDo6Z2VuZXJhbFBhc3RlYm9hcmQoKS0+aXNTZWxlY3Rpb25Nb2RlKCkgPwotICAgICAgICAgICAg
ICAgIFBhc3RlYm9hcmRQcml2YXRlOjpTZWxlY3Rpb25CdWZmZXIgOiAKLSAgICAgICAgICAgICAg
ICBQYXN0ZWJvYXJkUHJpdmF0ZTo6U3RhbmRhcmRCdWZmZXI7Ci0gICAgICAgICAgICBTdHJpbmcg
aHRtbFRleHQ7Ci0gICAgICAgICAgICBLVVJMIHNvdXJjZVVSTDsKLSAgICAgICAgICAgIENocm9t
aXVtQnJpZGdlOjpjbGlwYm9hcmRSZWFkSFRNTChidWZmZXIsICZodG1sVGV4dCwgJnNvdXJjZVVS
TCk7Ci0gICAgICAgICAgICBzdWNjZXNzID0gIWh0bWxUZXh0LmlzRW1wdHkoKTsKLSAgICAgICAg
ICAgIHJldHVybiBodG1sVGV4dDsKLSAgICAgICAgfQotICAgICAgICAvLyBPdGhlcndpc2UgcmV0
dXJuIHdoYXRldmVyIGlzIHN0b3JlZCBpbiB0ZXh0SHRtbC4KLSAgICAgICAgc3VjY2VzcyA9ICFt
X2RhdGFPYmplY3QtPnRleHRIdG1sLmlzRW1wdHkoKTsKLSAgICAgICAgcmV0dXJuIG1fZGF0YU9i
amVjdC0+dGV4dEh0bWw7Ci0KLSAgICBjYXNlIENsaXBib2FyZERhdGFUeXBlT3RoZXI6Ci0gICAg
ICAgIC8vIG5vdCB5ZXQgaW1wbGVtZW50ZWQsIHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MzQ0MTAKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIH0KLQot
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICByZXR1
cm4gbV9kYXRhT2JqZWN0LT5nZXREYXRhKG5vcm1hbGl6ZVR5cGUodHlwZSksIHN1Y2Nlc3MpOwog
fQogCiBib29sIENsaXBib2FyZENocm9taXVtOjpzZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwg
Y29uc3QgU3RyaW5nJiBkYXRhKQpAQCAtMjQ2LDY5ICsxMTcsNyBAQCBib29sIENsaXBib2FyZENo
cm9taXVtOjpzZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKQog
ICAgIGlmIChwb2xpY3koKSAhPSBDbGlwYm9hcmRXcml0YWJsZSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgQ2xpcGJvYXJkRGF0YVR5cGUgZGF0YVR5cGUgPSBjbGlwYm9hcmRUeXBlRnJv
bU1JTUVUeXBlKHR5cGUpOwotICAgIHN3aXRjaCAoZGF0YVR5cGUpIHsKLSAgICBjYXNlIENsaXBi
b2FyZERhdGFUeXBlTm9uZToKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgY2FzZSBDbGlw
Ym9hcmREYXRhVHlwZVVSTDoKLSAgICAgICAgLy8gRm9yIHNldERhdGEoKSwgIlVSTCIgbXVzdCBi
ZSB0cmVhdGVkIGFzICJ0ZXh0L3VyaS1saXN0Ii4KLSAgICAgICAgLy8gKFNlZSBIVE1MNSBzcGVj
LCAiVGhlIERyYWdFdmVudCBhbmQgRGF0YVRyYW5zZmVyIGludGVyZmFjZXMiKQotICAgIGNhc2Ug
Q2xpcGJvYXJkRGF0YVR5cGVVUklMaXN0OgotICAgICAgICBtX2RhdGFPYmplY3QtPnVybCA9IEtV
UkwoKTsKLSAgICAgICAgLy8gTGluZSBzZXBhcmF0b3IgaXMgXHJcbiBwZXIgUkZDIDI0ODMgLSBo
b3dldmVyLCBmb3IgY29tcGF0aWJpbGl0eSByZWFzb25zCi0gICAgICAgIC8vIHdlIGFsc28gYWxs
b3cganVzdCBcbiBoZXJlLiAKLSAgICAgICAgZGF0YS5zcGxpdCgnXG4nLCBtX2RhdGFPYmplY3Qt
PnVyaUxpc3QpOwotICAgICAgICAvLyBTdHJpcCB3aGl0ZSBzcGFjZSBvbiBhbGwgbGluZXMsIGlu
Y2x1ZGluZyB0cmFpbGluZyBcciBmcm9tIGFib3ZlIHNwbGl0LgotICAgICAgICAvLyBJZiB0aGlz
IGxlYXZlcyBhIGxpbmUgZW1wdHksIHJlbW92ZSBpdCBjb21wbGV0ZWx5LgotICAgICAgICAvLwot
ICAgICAgICAvLyBBbHNvLCBjb3B5IHRoZSBmaXJzdCB2YWxpZCBVUkwgaW50byB0aGUgJ3VybCcg
bWVtYmVyIGFzIHdlbGwuCi0gICAgICAgIC8vIEluIGNhc2Ugbm8gZW50cnkgaXMgYSB2YWxpZCBV
UkwgKGkuZS4sIHJlbWFya3Mgb25seSksIHRoZW4gd2UgbGVhdmUgJ3VybCcgZW1wdHkuCi0gICAg
ICAgIC8vIEkuZS4sIGluIHRoYXQgY2FzZSBzdWJzZXF1ZW50IGNhbGxzIHRvIGdldERhdGEoIlVS
TCIpIHdpbGwgZ2V0IGFuIGVtcHR5IHN0cmluZy4KLSAgICAgICAgLy8gVGhpcyBpcyBpbiBsaW5l
IHdpdGggdGhlIEhUTUw1IHNwZWMgKHNlZSAiVGhlIERyYWdFdmVudCBhbmQgRGF0YVRyYW5zZmVy
IGludGVyZmFjZXMiKS4KLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2RhdGFPYmpl
Y3QtPnVyaUxpc3Quc2l6ZSgpOyAvKiovKSB7Ci0gICAgICAgICAgICBTdHJpbmcmIGxpbmUgPSBt
X2RhdGFPYmplY3QtPnVyaUxpc3RbaV07Ci0gICAgICAgICAgICBsaW5lID0gbGluZS5zdHJpcFdo
aXRlU3BhY2UoKTsKLSAgICAgICAgICAgIGlmIChsaW5lLmlzRW1wdHkoKSkgewotICAgICAgICAg
ICAgICAgIG1fZGF0YU9iamVjdC0+dXJpTGlzdC5yZW1vdmUoaSk7Ci0gICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICArK2k7Ci0gICAgICAgICAgICAv
LyBPbmx5IGNvcHkgdGhlIGZpcnN0IHZhbGlkIFVSTC4KLSAgICAgICAgICAgIGlmIChtX2RhdGFP
YmplY3QtPnVybC5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICAvLyBTa2lwIHJlbWFya3MuCi0gICAgICAgICAgICBpZiAobGluZVswXSA9PSAnIycpCi0g
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBLVVJMIHVybCA9IEtVUkwoUGFy
c2VkVVJMU3RyaW5nLCBsaW5lKTsKLSAgICAgICAgICAgIGlmICh1cmwuaXNWYWxpZCgpKQotICAg
ICAgICAgICAgICAgIG1fZGF0YU9iamVjdC0+dXJsID0gdXJsOwotICAgICAgICB9Ci0gICAgICAg
IGlmIChtX2RhdGFPYmplY3QtPnVyaUxpc3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBBU1NF
UlQobV9kYXRhT2JqZWN0LT51cmwuaXNFbXB0eSgpKTsKLSAgICAgICAgICAgIHJldHVybiBkYXRh
LmlzRW1wdHkoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGNhc2Ug
Q2xpcGJvYXJkRGF0YVR5cGVEb3dubG9hZFVSTDoKLSAgICAgICAgbV9kYXRhT2JqZWN0LT5kb3du
bG9hZE1ldGFkYXRhID0gZGF0YTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBjYXNlIENs
aXBib2FyZERhdGFUeXBlUGxhaW5UZXh0OgotICAgICAgICBtX2RhdGFPYmplY3QtPnBsYWluVGV4
dCA9IGRhdGE7Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgY2FzZSBDbGlwYm9hcmREYXRh
VHlwZUhUTUw6Ci0gICAgICAgIG1fZGF0YU9iamVjdC0+dGV4dEh0bWwgPSBkYXRhOwotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVPdGhlcjoKLSAgICAg
ICAgLy8gTm90IHlldCBpbXBsZW1lbnRlZCwgc2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0zNDQxMAotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAot
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4g
bV9kYXRhT2JqZWN0LT5zZXREYXRhKG5vcm1hbGl6ZVR5cGUodHlwZSksIGRhdGEpOwogfQogCiAv
LyBleHRlbnNpb25zIGJleW9uZCBJRSdzIEFQSQpAQCAtMzIxLDMzICsxMzAsNyBAQCBIYXNoU2V0
PFN0cmluZz4gQ2xpcGJvYXJkQ2hyb21pdW06OnR5cGVzKCkgY29uc3QKICAgICBpZiAoIW1fZGF0
YU9iamVjdCkKICAgICAgICAgcmV0dXJuIHJlc3VsdHM7CiAKLSAgICBpZiAoIW1fZGF0YU9iamVj
dC0+ZmlsZW5hbWVzLmlzRW1wdHkoKSkKLSAgICAgICAgcmVzdWx0cy5hZGQoIkZpbGVzIik7Ci0K
LSAgICAvLyBIYWNrIGZvciBVUkxzLiBmaWxlIFVSTHMgYXJlIHVzZWQgaW50ZXJuYWxseSBmb3Ig
ZHJvcCdzIGRlZmF1bHQgYWN0aW9uLCBidXQgd2UgZG9uJ3Qgd2FudAotICAgIC8vIHRvIGV4cG9z
ZSB0aGVtIHRvIHRoZSBwYWdlLCBzbyB3ZSBmaWx0ZXIgdGhlbSBvdXQgaGVyZS4KLSAgICBpZiAo
bV9kYXRhT2JqZWN0LT51cmwuaXNWYWxpZCgpICYmICFtX2RhdGFPYmplY3QtPnVybC5pc0xvY2Fs
RmlsZSgpKSB7Ci0gICAgICAgIEFTU0VSVCghbV9kYXRhT2JqZWN0LT51cmlMaXN0LmlzRW1wdHko
KSk7Ci0gICAgICAgIHJlc3VsdHMuYWRkKCJVUkwiKTsKLSAgICB9Ci0KLSAgICBpZiAoIW1fZGF0
YU9iamVjdC0+dXJpTGlzdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgLy8gVmVyaWZ5IHRoYXQgdGhl
IFVSSSBsaXN0IGNvbnRhaW5zIGF0IGxlYXN0IG9uZSBub24tZmlsZSBVUkwuCi0gICAgICAgIGZv
ciAoVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9kYXRhT2JqZWN0LT51cmlM
aXN0LmJlZ2luKCk7Ci0gICAgICAgICAgICAgaXQgIT0gbV9kYXRhT2JqZWN0LT51cmlMaXN0LmVu
ZCgpOyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAoIXByb3RvY29sSXMoKml0LCAiZmlsZSIpKSB7
Ci0gICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0IGV2ZW4gaWYgdGhlIFVSSSBsaXN0IGlzIG5v
dCBlbXB0eSwgaXQgbWF5IG5vdCBhY3R1YWxseQotICAgICAgICAgICAgICAgIC8vIGNvbnRhaW4g
YSB2YWxpZCBVUkwsIHNvIHdlIGNhbid0IHJldHVybiAiVVJMIiBoZXJlLgotICAgICAgICAgICAg
ICAgIHJlc3VsdHMuYWRkKCJ0ZXh0L3VyaS1saXN0Iik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIW1fZGF0YU9iamVj
dC0+cGxhaW5UZXh0LmlzRW1wdHkoKSkgewotICAgICAgICByZXN1bHRzLmFkZCgiVGV4dCIpOwot
ICAgICAgICByZXN1bHRzLmFkZCgidGV4dC9wbGFpbiIpOwotICAgIH0KKyAgICByZXN1bHRzID0g
bV9kYXRhT2JqZWN0LT50eXBlcygpOwogCiAgICAgcmV0dXJuIHJlc3VsdHM7CiB9CkBAIC0zNTcs
MTIgKzE0MCwxMyBAQCBQYXNzUmVmUHRyPEZpbGVMaXN0PiBDbGlwYm9hcmRDaHJvbWl1bTo6Zmls
ZXMoKSBjb25zdAogICAgIGlmIChwb2xpY3koKSAhPSBDbGlwYm9hcmRSZWFkYWJsZSkKICAgICAg
ICAgcmV0dXJuIEZpbGVMaXN0OjpjcmVhdGUoKTsKIAotICAgIGlmICghbV9kYXRhT2JqZWN0IHx8
IG1fZGF0YU9iamVjdC0+ZmlsZW5hbWVzLmlzRW1wdHkoKSkKKyAgICBpZiAoIW1fZGF0YU9iamVj
dCkKICAgICAgICAgcmV0dXJuIEZpbGVMaXN0OjpjcmVhdGUoKTsKIAorICAgIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBmaWxlbmFtZXMgPSBtX2RhdGFPYmplY3QtPmZpbGVuYW1lcygpOwogICAgIFJl
ZlB0cjxGaWxlTGlzdD4gZmlsZUxpc3QgPSBGaWxlTGlzdDo6Y3JlYXRlKCk7Ci0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX2RhdGFPYmplY3QtPmZpbGVuYW1lcy5zaXplKCk7ICsraSkKLSAg
ICAgICAgZmlsZUxpc3QtPmFwcGVuZChGaWxlOjpjcmVhdGUobV9kYXRhT2JqZWN0LT5maWxlbmFt
ZXMuYXQoaSkpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZpbGVuYW1lcy5zaXplKCk7
ICsraSkKKyAgICAgICAgZmlsZUxpc3QtPmFwcGVuZChGaWxlOjpjcmVhdGUoZmlsZW5hbWVzLmF0
KGkpKSk7CiAKICAgICByZXR1cm4gZmlsZUxpc3QucmVsZWFzZSgpOwogfQpAQCAtNDYxLDcgKzI0
NSw3IEBAIHN0YXRpYyB2b2lkIHdyaXRlSW1hZ2VUb0RhdGFPYmplY3QoQ2hyb21pdW1EYXRhT2Jq
ZWN0KiBkYXRhT2JqZWN0LCBFbGVtZW50KiBlbGVtCiAgICAgaWYgKCFpbWFnZUJ1ZmZlciB8fCAh
aW1hZ2VCdWZmZXItPnNpemUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZGF0YU9iamVjdC0+
ZmlsZUNvbnRlbnQgPSBpbWFnZUJ1ZmZlcjsKKyAgICBkYXRhT2JqZWN0LT5zZXRGaWxlQ29udGVu
dChpbWFnZUJ1ZmZlcik7CiAKICAgICAvLyBEZXRlcm1pbmUgdGhlIGZpbGVuYW1lIGZvciB0aGUg
ZmlsZSBjb250ZW50cyBvZiB0aGUgaW1hZ2UuICBXZSB0cnkgdG8KICAgICAvLyB1c2UgdGhlIGFs
dCB0YWcgaWYgb25lIGV4aXN0cywgb3RoZXJ3aXNlIHdlIGZhbGwgYmFjayBvbiB0aGUgc3VnZ2Vz
dGVkCkBAIC00NjksMTMgKzI1MywxMyBAQCBzdGF0aWMgdm9pZCB3cml0ZUltYWdlVG9EYXRhT2Jq
ZWN0KENocm9taXVtRGF0YU9iamVjdCogZGF0YU9iamVjdCwgRWxlbWVudCogZWxlbQogICAgIC8v
IGluIHRoZSBVUkwuCiAgICAgU3RyaW5nIGV4dGVuc2lvbiA9IE1JTUVUeXBlUmVnaXN0cnk6Omdl
dFByZWZlcnJlZEV4dGVuc2lvbkZvck1JTUVUeXBlKAogICAgICAgICBjYWNoZWRJbWFnZS0+cmVz
cG9uc2UoKS5taW1lVHlwZSgpKTsKLSAgICBkYXRhT2JqZWN0LT5maWxlRXh0ZW5zaW9uID0gZXh0
ZW5zaW9uLmlzRW1wdHkoKSA/ICIiIDogIi4iICsgZXh0ZW5zaW9uOworICAgIGRhdGFPYmplY3Qt
PnNldEZpbGVFeHRlbnNpb24oZXh0ZW5zaW9uLmlzRW1wdHkoKSA/ICIiIDogIi4iICsgZXh0ZW5z
aW9uKTsKICAgICBTdHJpbmcgdGl0bGUgPSBlbGVtZW50LT5nZXRBdHRyaWJ1dGUoYWx0QXR0cik7
CiAgICAgaWYgKHRpdGxlLmlzRW1wdHkoKSkKICAgICAgICAgdGl0bGUgPSBjYWNoZWRJbWFnZS0+
cmVzcG9uc2UoKS5zdWdnZXN0ZWRGaWxlbmFtZSgpOwogCiAgICAgdGl0bGUgPSBDbGlwYm9hcmRD
aHJvbWl1bTo6dmFsaWRhdGVGaWxlTmFtZSh0aXRsZSwgZGF0YU9iamVjdCk7Ci0gICAgZGF0YU9i
amVjdC0+ZmlsZUNvbnRlbnRGaWxlbmFtZSA9IHRpdGxlICsgZGF0YU9iamVjdC0+ZmlsZUV4dGVu
c2lvbjsKKyAgICBkYXRhT2JqZWN0LT5zZXRGaWxlQ29udGVudEZpbGVuYW1lKHRpdGxlICsgZGF0
YU9iamVjdC0+ZmlsZUV4dGVuc2lvbigpKTsKIH0KIAogdm9pZCBDbGlwYm9hcmRDaHJvbWl1bTo6
ZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEtVUkwmIHVy
bCwgY29uc3QgU3RyaW5nJiB0aXRsZSwgRnJhbWUqIGZyYW1lKQpAQCAtNDgzLDggKzI2Nyw4IEBA
IHZvaWQgQ2xpcGJvYXJkQ2hyb21pdW06OmRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZShFbGVtZW50
KiBlbGVtZW50LCBjb25zdCBLVVJMJiB1CiAgICAgaWYgKCFtX2RhdGFPYmplY3QpCiAgICAgICAg
IHJldHVybjsKIAotICAgIG1fZGF0YU9iamVjdC0+dXJsID0gdXJsOwotICAgIG1fZGF0YU9iamVj
dC0+dXJsVGl0bGUgPSB0aXRsZTsKKyAgICBtX2RhdGFPYmplY3QtPnNldERhdGEoInRleHQvdXJp
LWxpc3QiLCB1cmwpOworICAgIG1fZGF0YU9iamVjdC0+c2V0VXJsVGl0bGUodGl0bGUpOwogCiAg
ICAgLy8gV3JpdGUgdGhlIGJ5dGVzIGluIHRoZSBpbWFnZSB0byB0aGUgZmlsZSBmb3JtYXQuCiAg
ICAgd3JpdGVJbWFnZVRvRGF0YU9iamVjdChtX2RhdGFPYmplY3QuZ2V0KCksIGVsZW1lbnQsIHVy
bCk7CkBAIC00OTgsNyArMjgyLDcgQEAgdm9pZCBDbGlwYm9hcmRDaHJvbWl1bTo6ZGVjbGFyZUFu
ZFdyaXRlRHJhZ0ltYWdlKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEtVUkwmIHUKICAgICAgICAg
cmV0dXJuOwogCiAgICAgLy8gUHV0IGltZyB0YWcgb24gdGhlIGNsaXBib2FyZCByZWZlcmVuY2lu
ZyB0aGUgaW1hZ2UKLSAgICBtX2RhdGFPYmplY3QtPnRleHRIdG1sID0gaW1hZ2VUb01hcmt1cChm
dWxsVVJMLCBlbGVtZW50KTsKKyAgICBtX2RhdGFPYmplY3QtPnNldERhdGEoInRleHQvaHRtbCIs
IGltYWdlVG9NYXJrdXAoZnVsbFVSTCwgZWxlbWVudCkpOwogfQogCiB2b2lkIENsaXBib2FyZENo
cm9taXVtOjp3cml0ZVVSTChjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdGl0bGUsIEZy
YW1lKikKQEAgLTUwNiwxNyArMjkwLDE1IEBAIHZvaWQgQ2xpcGJvYXJkQ2hyb21pdW06OndyaXRl
VVJMKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB0aXRsZSwgRnJhbWUqKQogICAgIGlm
ICghbV9kYXRhT2JqZWN0KQogICAgICAgICByZXR1cm47CiAgICAgQVNTRVJUKCF1cmwuaXNFbXB0
eSgpKTsKLSAgICBtX2RhdGFPYmplY3QtPnVybCA9IHVybDsKLSAgICBtX2RhdGFPYmplY3QtPnVy
bFRpdGxlID0gdGl0bGU7Ci0gICAgbV9kYXRhT2JqZWN0LT51cmlMaXN0LmNsZWFyKCk7Ci0gICAg
bV9kYXRhT2JqZWN0LT51cmlMaXN0LmFwcGVuZCh1cmwpOworICAgIG1fZGF0YU9iamVjdC0+c2V0
RGF0YSgidGV4dC91cmktbGlzdCIsIHVybCk7CisgICAgbV9kYXRhT2JqZWN0LT5zZXRVcmxUaXRs
ZSh0aXRsZSk7CiAKICAgICAvLyBUaGUgVVJMIGNhbiBhbHNvIGJlIHVzZWQgYXMgcGxhaW4gdGV4
dC4KLSAgICBtX2RhdGFPYmplY3QtPnBsYWluVGV4dCA9IHVybC5zdHJpbmcoKTsKKyAgICBtX2Rh
dGFPYmplY3QtPnNldERhdGEoInRleHQvcGxhaW4iLCB1cmwuc3RyaW5nKCkpOwogCiAgICAgLy8g
VGhlIFVSTCBjYW4gYWxzbyBiZSB1c2VkIGFzIGFuIEhUTUwgZnJhZ21lbnQuCi0gICAgbV9kYXRh
T2JqZWN0LT50ZXh0SHRtbCA9IHVybFRvTWFya3VwKHVybCwgdGl0bGUpOwotICAgIG1fZGF0YU9i
amVjdC0+aHRtbEJhc2VVcmwgPSB1cmw7CisgICAgbV9kYXRhT2JqZWN0LT5zZXREYXRhKCJ0ZXh0
L2h0bWwiLCB1cmxUb01hcmt1cCh1cmwsIHRpdGxlKSk7CisgICAgbV9kYXRhT2JqZWN0LT5zZXRI
dG1sQmFzZVVybCh1cmwpOwogfQogCiB2b2lkIENsaXBib2FyZENocm9taXVtOjp3cml0ZVJhbmdl
KFJhbmdlKiBzZWxlY3RlZFJhbmdlLCBGcmFtZSogZnJhbWUpCkBAIC01MjUsMTUgKzMwNywxNSBA
QCB2b2lkIENsaXBib2FyZENocm9taXVtOjp3cml0ZVJhbmdlKFJhbmdlKiBzZWxlY3RlZFJhbmdl
LCBGcmFtZSogZnJhbWUpCiAgICAgaWYgKCFtX2RhdGFPYmplY3QpCiAgICAgICAgICByZXR1cm47
CiAKLSAgICBtX2RhdGFPYmplY3QtPnRleHRIdG1sID0gY3JlYXRlTWFya3VwKHNlbGVjdGVkUmFu
Z2UsIDAsIEFubm90YXRlRm9ySW50ZXJjaGFuZ2UsIGZhbHNlLCBBYnNvbHV0ZVVSTHMpOwotICAg
IG1fZGF0YU9iamVjdC0+aHRtbEJhc2VVcmwgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCk7Cisg
ICAgbV9kYXRhT2JqZWN0LT5zZXREYXRhKCJ0ZXh0L2h0bWwiLCBjcmVhdGVNYXJrdXAoc2VsZWN0
ZWRSYW5nZSwgMCwgQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSwgZmFsc2UsIEFic29sdXRlVVJMcykp
OworICAgIG1fZGF0YU9iamVjdC0+c2V0SHRtbEJhc2VVcmwoZnJhbWUtPmRvY3VtZW50KCktPnVy
bCgpKTsKIAogICAgIFN0cmluZyBzdHIgPSBmcmFtZS0+ZWRpdG9yKCktPnNlbGVjdGVkVGV4dCgp
OwogI2lmIE9TKFdJTkRPV1MpCiAgICAgcmVwbGFjZU5ld2xpbmVzV2l0aFdpbmRvd3NTdHlsZU5l
d2xpbmVzKHN0cik7CiAjZW5kaWYKICAgICByZXBsYWNlTkJTUFdpdGhTcGFjZShzdHIpOwotICAg
IG1fZGF0YU9iamVjdC0+cGxhaW5UZXh0ID0gc3RyOworICAgIG1fZGF0YU9iamVjdC0+c2V0RGF0
YSgidGV4dC9wbGFpbiIsIHN0cik7CiB9CiAKIHZvaWQgQ2xpcGJvYXJkQ2hyb21pdW06OndyaXRl
UGxhaW5UZXh0KGNvbnN0IFN0cmluZyYgdGV4dCkKQEAgLTU0Niw3ICszMjgsNyBAQCB2b2lkIENs
aXBib2FyZENocm9taXVtOjp3cml0ZVBsYWluVGV4dChjb25zdCBTdHJpbmcmIHRleHQpCiAgICAg
cmVwbGFjZU5ld2xpbmVzV2l0aFdpbmRvd3NTdHlsZU5ld2xpbmVzKHN0cik7CiAjZW5kaWYKICAg
ICByZXBsYWNlTkJTUFdpdGhTcGFjZShzdHIpOwotICAgIG1fZGF0YU9iamVjdC0+cGxhaW5UZXh0
ID0gc3RyOworICAgIG1fZGF0YU9iamVjdC0+c2V0RGF0YSgidGV4dC9wbGFpbiIsIHN0cik7CiB9
CiAKIGJvb2wgQ2xpcGJvYXJkQ2hyb21pdW06Omhhc0RhdGEoKQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bVdpbi5jcHAgYi9XZWJDb3JlL3Bs
YXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtV2luLmNwcAppbmRleCBiNGEyYzIxLi5k
OWJiZWI1IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENo
cm9taXVtV2luLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENo
cm9taXVtV2luLmNwcApAQCAtNDQsMTEgKzQ0LDExIEBAIFN0cmluZyBDbGlwYm9hcmRDaHJvbWl1
bTo6dmFsaWRhdGVGaWxlTmFtZShjb25zdCBTdHJpbmcmIHRpdGxlLCBDaHJvbWl1bURhdGFPYmpl
CiB7CiAgICAgLy8gUmVtb3ZlIGFueSBpbnZhbGlkIGZpbGUgc3lzdGVtIGNoYXJhY3RlcnMuCiAg
ICAgU3RyaW5nIHJlc3VsdCA9IHRpdGxlLnJlbW92ZUNoYXJhY3RlcnMoJmlzSW52YWxpZEZpbGVD
aGFyYWN0ZXIpOwotICAgIGlmIChyZXN1bHQubGVuZ3RoKCkgKyBkYXRhT2JqZWN0LT5maWxlRXh0
ZW5zaW9uLmxlbmd0aCgpICsgMSA+PSBNQVhfUEFUSCkgewotICAgICAgICBpZiAoZGF0YU9iamVj
dC0+ZmlsZUV4dGVuc2lvbi5sZW5ndGgoKSArIDEgPj0gTUFYX1BBVEgpCi0gICAgICAgICAgICBk
YXRhT2JqZWN0LT5maWxlRXh0ZW5zaW9uID0gIiI7Ci0gICAgICAgIGlmIChyZXN1bHQubGVuZ3Ro
KCkgKyBkYXRhT2JqZWN0LT5maWxlRXh0ZW5zaW9uLmxlbmd0aCgpICsgMSA+PSBNQVhfUEFUSCkK
LSAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5zdWJzdHJpbmcoMCwgTUFYX1BBVEggLSBkYXRh
T2JqZWN0LT5maWxlRXh0ZW5zaW9uLmxlbmd0aCgpIC0gMSk7CisgICAgaWYgKHJlc3VsdC5sZW5n
dGgoKSArIGRhdGFPYmplY3QtPmZpbGVFeHRlbnNpb24oKS5sZW5ndGgoKSArIDEgPj0gTUFYX1BB
VEgpIHsKKyAgICAgICAgaWYgKGRhdGFPYmplY3QtPmZpbGVFeHRlbnNpb24oKS5sZW5ndGgoKSAr
IDEgPj0gTUFYX1BBVEgpCisgICAgICAgICAgICBkYXRhT2JqZWN0LT5zZXRGaWxlRXh0ZW5zaW9u
KCIiKTsKKyAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGgoKSArIGRhdGFPYmplY3QtPmZpbGVFeHRl
bnNpb24oKS5sZW5ndGgoKSArIDEgPj0gTUFYX1BBVEgpCisgICAgICAgICAgICByZXN1bHQgPSBy
ZXN1bHQuc3Vic3RyaW5nKDAsIE1BWF9QQVRIIC0gZGF0YU9iamVjdC0+ZmlsZUV4dGVuc2lvbigp
Lmxlbmd0aCgpIC0gMSk7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZE1pbWVUeXBlcy5jcHAgYi9XZWJD
b3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZE1pbWVUeXBlcy5jcHAKaW5kZXggYjk1NzQ0
Zi4uYTIxM2RhMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9h
cmRNaW1lVHlwZXMuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJk
TWltZVR5cGVzLmNwcApAQCAtMzMsOCArMzMsMTIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1jb25zdCBjaGFyIHRleHRQbGFpblR5cGVbXSA9ICJ0ZXh0L3BsYWluIjsKLWNvbnN0IGNoYXIg
dGV4dEh0bWxUeXBlW10gPSAidGV4dC9odG1sIjsKLWNvbnN0IGNoYXIgdGV4dFVyaUxpc3RUeXBl
W10gPSAidGV4dC91cmktbGlzdCI7Citjb25zdCBjaGFyIG1pbWVUeXBlVGV4dFtdID0gInRleHQv
cGxhaW4iOworY29uc3QgY2hhciBtaW1lVHlwZVRleHRQbGFpbltdID0gInRleHQvcGxhaW4iOwor
Y29uc3QgY2hhciBtaW1lVHlwZVRleHRQbGFpbkV0Y1tdID0gInRleHQvcGxhaW47IjsKK2NvbnN0
IGNoYXIgbWltZVR5cGVUZXh0SFRNTFtdID0gInRleHQvaHRtbCI7Citjb25zdCBjaGFyIG1pbWVU
eXBlVVJMW10gPSAidXJsIjsKK2NvbnN0IGNoYXIgbWltZVR5cGVUZXh0VVJJTGlzdFtdID0gInRl
eHQvdXJpLWxpc3QiOworY29uc3QgY2hhciBtaW1lVHlwZURvd25sb2FkVVJMW10gPSAiZG93bmxv
YWR1cmwiOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZE1pbWVUeXBlcy5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9j
aHJvbWl1bS9DbGlwYm9hcmRNaW1lVHlwZXMuaAppbmRleCBkNzQ2OGYyLi45YmRjY2ZlIDEwMDY0
NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZE1pbWVUeXBlcy5oCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkTWltZVR5cGVzLmgKQEAgLTMz
LDkgKzMzLDEzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotZXh0ZXJuIGNvbnN0IGNoYXIg
dGV4dFBsYWluVHlwZVtdOwotZXh0ZXJuIGNvbnN0IGNoYXIgdGV4dEh0bWxUeXBlW107Ci1leHRl
cm4gY29uc3QgY2hhciB0ZXh0VXJpTGlzdFR5cGVbXTsKK2V4dGVybiBjb25zdCBjaGFyIG1pbWVU
eXBlVGV4dFtdOworZXh0ZXJuIGNvbnN0IGNoYXIgbWltZVR5cGVUZXh0UGxhaW5bXTsKK2V4dGVy
biBjb25zdCBjaGFyIG1pbWVUeXBlVGV4dFBsYWluRXRjW107CitleHRlcm4gY29uc3QgY2hhciBt
aW1lVHlwZVRleHRIVE1MW107CitleHRlcm4gY29uc3QgY2hhciBtaW1lVHlwZVVSTFtdOworZXh0
ZXJuIGNvbnN0IGNoYXIgbWltZVR5cGVUZXh0VVJJTGlzdFtdOworZXh0ZXJuIGNvbnN0IGNoYXIg
bWltZVR5cGVEb3dubG9hZFVSTFtdOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRHJhZ0RhdGFDaHJvbWl1bS5jcHAgYi9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RyYWdEYXRhQ2hyb21pdW0uY3BwCmluZGV4IDY3NGQz
NGQuLmZlNTY2M2YgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRHJhZ0Rh
dGFDaHJvbWl1bS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EcmFnRGF0YUNo
cm9taXVtLmNwcApAQCAtMzIsNiArMzIsNyBAQAogCiAjaW5jbHVkZSAiQ2hyb21pdW1CcmlkZ2Uu
aCIKICNpbmNsdWRlICJDaHJvbWl1bURhdGFPYmplY3QuaCIKKyNpbmNsdWRlICJDbGlwYm9hcmRN
aW1lVHlwZXMuaCIKICNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCiAjaW5jbHVkZSAiRmls
ZVN5c3RlbS5oIgogI2luY2x1ZGUgIktVUkwuaCIKQEAgLTQzLDUwICs0NCw1MCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBib29sIGNvbnRhaW5zSFRNTChjb25zdCBDaHJvbWl1bURh
dGFPYmplY3QqIGRyb3BEYXRhKQogewotICAgIHJldHVybiBkcm9wRGF0YS0+dGV4dEh0bWwubGVu
Z3RoKCkgPiAwOworICAgIHJldHVybiBkcm9wRGF0YS0+dHlwZXMoKS5jb250YWlucyhtaW1lVHlw
ZVRleHRIVE1MKTsKIH0KIAogYm9vbCBEcmFnRGF0YTo6Y29udGFpbnNVUkwoRmlsZW5hbWVDb252
ZXJzaW9uUG9saWN5IGZpbGVuYW1lUG9saWN5KSBjb25zdAogewotICAgIHJldHVybiAhYXNVUkwo
ZmlsZW5hbWVQb2xpY3kpLmlzRW1wdHkoKTsKKyAgICByZXR1cm4gbV9wbGF0Zm9ybURyYWdEYXRh
LT50eXBlcygpLmNvbnRhaW5zKG1pbWVUeXBlVVJMKQorICAgICAgICB8fCAoZmlsZW5hbWVQb2xp
Y3kgPT0gQ29udmVydEZpbGVuYW1lcyAmJiBtX3BsYXRmb3JtRHJhZ0RhdGEtPmNvbnRhaW5zRmls
ZW5hbWVzKCkpOwogfQogCiBTdHJpbmcgRHJhZ0RhdGE6OmFzVVJMKEZpbGVuYW1lQ29udmVyc2lv
blBvbGljeSBmaWxlbmFtZVBvbGljeSwgU3RyaW5nKiB0aXRsZSkgY29uc3QKIHsKICAgICBTdHJp
bmcgdXJsOwotICAgIGlmIChtX3BsYXRmb3JtRHJhZ0RhdGEtPmhhc1ZhbGlkVVJMKCkpCi0gICAg
ICAgIHVybCA9IG1fcGxhdGZvcm1EcmFnRGF0YS0+Z2V0VVJMKCkuc3RyaW5nKCk7Ci0gICAgZWxz
ZSBpZiAoZmlsZW5hbWVQb2xpY3kgPT0gQ29udmVydEZpbGVuYW1lcyAmJiAhbV9wbGF0Zm9ybURy
YWdEYXRhLT5maWxlbmFtZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFN0cmluZyBmaWxlTmFtZSA9
IG1fcGxhdGZvcm1EcmFnRGF0YS0+ZmlsZW5hbWVzWzBdOwotICAgICAgICBmaWxlTmFtZSA9IENo
cm9taXVtQnJpZGdlOjpnZXRBYnNvbHV0ZVBhdGgoZmlsZU5hbWUpOwotICAgICAgICB1cmwgPSBD
aHJvbWl1bUJyaWRnZTo6ZmlsZVBhdGhUb1VSTChmaWxlTmFtZSkuc3RyaW5nKCk7CisgICAgaWYg
KGNvbnRhaW5zVVJMKERvTm90Q29udmVydEZpbGVuYW1lcykpIHsKKyAgICAgICAgYm9vbCBpZ25v
cmVkU3VjY2VzczsKKyAgICAgICAgdXJsID0gbV9wbGF0Zm9ybURyYWdEYXRhLT5nZXREYXRhKG1p
bWVUeXBlVVJMLCBpZ25vcmVkU3VjY2Vzcyk7CisgICAgICAgIGlmICh0aXRsZSkKKyAgICAgICAg
ICAgICp0aXRsZSA9IG1fcGxhdGZvcm1EcmFnRGF0YS0+dXJsVGl0bGUoKTsKKyAgICB9IGVsc2Ug
aWYgKGZpbGVuYW1lUG9saWN5ID09IENvbnZlcnRGaWxlbmFtZXMgJiYgY29udGFpbnNGaWxlcygp
KSB7CisgICAgICAgIHVybCA9IENocm9taXVtQnJpZGdlOjpmaWxlUGF0aFRvVVJMKENocm9taXVt
QnJpZGdlOjpnZXRBYnNvbHV0ZVBhdGgobV9wbGF0Zm9ybURyYWdEYXRhLT5maWxlbmFtZXMoKVsw
XSkpOwogICAgIH0KLSAKLSAgICAvLyB8dGl0bGV8IGNhbiBiZSBOVUxMCi0gICAgaWYgKHRpdGxl
KQotICAgICAgICAqdGl0bGUgPSBtX3BsYXRmb3JtRHJhZ0RhdGEtPnVybFRpdGxlOwogICAgIHJl
dHVybiB1cmw7CiB9CiAKIGJvb2wgRHJhZ0RhdGE6OmNvbnRhaW5zRmlsZXMoKSBjb25zdAogewot
ICAgIHJldHVybiAhbV9wbGF0Zm9ybURyYWdEYXRhLT5maWxlbmFtZXMuaXNFbXB0eSgpOworICAg
IHJldHVybiBtX3BsYXRmb3JtRHJhZ0RhdGEtPmNvbnRhaW5zRmlsZW5hbWVzKCk7CiB9CiAKIHZv
aWQgRHJhZ0RhdGE6OmFzRmlsZW5hbWVzKFZlY3RvcjxTdHJpbmc+JiByZXN1bHQpIGNvbnN0CiB7
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3BsYXRmb3JtRHJhZ0RhdGEtPmZpbGVuYW1l
cy5zaXplKCk7ICsraSkKLSAgICAgICAgcmVzdWx0LmFwcGVuZChtX3BsYXRmb3JtRHJhZ0RhdGEt
PmZpbGVuYW1lc1tpXSk7CisgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcyA9IG1f
cGxhdGZvcm1EcmFnRGF0YS0+ZmlsZW5hbWVzKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBmaWxlbmFtZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoZmlsZW5hbWVz
W2ldKTsKIH0KIAogYm9vbCBEcmFnRGF0YTo6Y29udGFpbnNQbGFpblRleHQoKSBjb25zdAogewot
ICAgIHJldHVybiAhbV9wbGF0Zm9ybURyYWdEYXRhLT5wbGFpblRleHQuaXNFbXB0eSgpOworICAg
IHJldHVybiBtX3BsYXRmb3JtRHJhZ0RhdGEtPnR5cGVzKCkuY29udGFpbnMobWltZVR5cGVUZXh0
UGxhaW4pOwogfQogCiBTdHJpbmcgRHJhZ0RhdGE6OmFzUGxhaW5UZXh0KCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gbV9wbGF0Zm9ybURyYWdEYXRhLT5wbGFpblRleHQ7CisgICAgYm9vbCBpZ25vcmVk
U3VjY2VzczsKKyAgICByZXR1cm4gbV9wbGF0Zm9ybURyYWdEYXRhLT5nZXREYXRhKG1pbWVUeXBl
VGV4dFBsYWluLCBpZ25vcmVkU3VjY2Vzcyk7CiB9CiAKIGJvb2wgRHJhZ0RhdGE6OmNvbnRhaW5z
Q29sb3IoKSBjb25zdApAQCAtMTAxLDggKzEwMiw4IEBAIGJvb2wgRHJhZ0RhdGE6OmNhblNtYXJ0
UmVwbGFjZSgpIGNvbnN0CiAgICAgLy8gVGhpcyBpcyBhbGxvd2VkIHdoZW5ldmVyIHRoZSBkcmFn
IGRhdGEgY29udGFpbnMgYSAncmFuZ2UnIChpZS4sCiAgICAgLy8gQ2xpcGJvYXJkV2luOjp3cml0
ZVJhbmdlIGlzIGNhbGxlZCkuICBGb3IgZXhhbXBsZSwgZHJhZ2dpbmcgYSBsaW5rCiAgICAgLy8g
c2hvdWxkIG5vdCByZXN1bHQgaW4gYSBzcGFjZSBiZWluZyBhZGRlZC4KLSAgICByZXR1cm4gIW1f
cGxhdGZvcm1EcmFnRGF0YS0+cGxhaW5UZXh0LmlzRW1wdHkoKQotICAgICAgICAmJiAhbV9wbGF0
Zm9ybURyYWdEYXRhLT5oYXNWYWxpZFVSTCgpOworICAgIHJldHVybiBtX3BsYXRmb3JtRHJhZ0Rh
dGEtPnR5cGVzKCkuY29udGFpbnMobWltZVR5cGVUZXh0UGxhaW4pCisgICAgICAgICYmICFtX3Bs
YXRmb3JtRHJhZ0RhdGEtPnR5cGVzKCkuY29udGFpbnMobWltZVR5cGVVUkwpOwogfQogCiBib29s
IERyYWdEYXRhOjpjb250YWluc0NvbXBhdGlibGVDb250ZW50KCkgY29uc3QKQEAgLTEzNCw5ICsx
MzUsMTAgQEAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBEcmFnRGF0YTo6YXNGcmFnbWVu
dChEb2N1bWVudCogZG9jKSBjb25zdAogICAgICAgICAvLyAgICByZXR1cm4gZnJhZ21lbnQ7CiAg
ICAgfQogCi0gICAgaWYgKCFtX3BsYXRmb3JtRHJhZ0RhdGEtPnRleHRIdG1sLmlzRW1wdHkoKSkg
eworICAgIGlmIChtX3BsYXRmb3JtRHJhZ0RhdGEtPnR5cGVzKCkuY29udGFpbnMobWltZVR5cGVU
ZXh0SFRNTCkpIHsKKyAgICAgICAgYm9vbCBpZ25vcmVkU3VjY2VzczsKICAgICAgICAgUmVmUHRy
PERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKGRv
YywKLSAgICAgICAgICAgIG1fcGxhdGZvcm1EcmFnRGF0YS0+dGV4dEh0bWwsIG1fcGxhdGZvcm1E
cmFnRGF0YS0+aHRtbEJhc2VVcmwsIEZyYWdtZW50U2NyaXB0aW5nTm90QWxsb3dlZCk7CisgICAg
ICAgICAgICBtX3BsYXRmb3JtRHJhZ0RhdGEtPmdldERhdGEobWltZVR5cGVUZXh0SFRNTCwgaWdu
b3JlZFN1Y2Nlc3MpLCBtX3BsYXRmb3JtRHJhZ0RhdGEtPmh0bWxCYXNlVXJsKCksIEZyYWdtZW50
U2NyaXB0aW5nTm90QWxsb3dlZCk7CiAgICAgICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNlKCk7
CiAgICAgfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1JlYWRhYmxl
RGF0YU9iamVjdC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1JlYWRhYmxlRGF0YU9i
amVjdC5jcHAKaW5kZXggMWEzMzNiYi4uMDg4NjczZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9SZWFkYWJsZURhdGFPYmplY3QuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vUmVhZGFibGVEYXRhT2JqZWN0LmNwcApAQCAtODEsNyArODEsNyBAQCBTdHJp
bmcgUmVhZGFibGVEYXRhT2JqZWN0OjpnZXRVUkwoU3RyaW5nKiB0aXRsZSkgY29uc3QKICAgICBp
ZiAoIXRpdGxlKQogICAgICAgICB0aXRsZSA9ICZpZ25vcmVkVGl0bGU7CiAgICAgQ2hyb21pdW1C
cmlkZ2U6OmNsaXBib2FyZFJlYWREYXRhKAotICAgICAgICBjbGlwYm9hcmRCdWZmZXIobV9pc0Zv
ckRyYWdnaW5nKSwgdGV4dFVyaUxpc3RUeXBlLCB1cmwsICp0aXRsZSk7CisgICAgICAgIGNsaXBi
b2FyZEJ1ZmZlcihtX2lzRm9yRHJhZ2dpbmcpLCBtaW1lVHlwZVRleHRVUklMaXN0LCB1cmwsICp0
aXRsZSk7CiAgICAgcmV0dXJuIHVybDsKIH0KIApAQCAtOTIsNyArOTIsNyBAQCBTdHJpbmcgUmVh
ZGFibGVEYXRhT2JqZWN0OjpnZXRIVE1MKFN0cmluZyogYmFzZVVSTCkgY29uc3QKICAgICBpZiAo
IWJhc2VVUkwpCiAgICAgICAgIGJhc2VVUkwgPSAmaWdub3JlZEJhc2VVUkw7CiAgICAgQ2hyb21p
dW1CcmlkZ2U6OmNsaXBib2FyZFJlYWREYXRhKAotICAgICAgICBjbGlwYm9hcmRCdWZmZXIobV9p
c0ZvckRyYWdnaW5nKSwgdGV4dEh0bWxUeXBlLCBodG1sLCAqYmFzZVVSTCk7CisgICAgICAgIGNs
aXBib2FyZEJ1ZmZlcihtX2lzRm9yRHJhZ2dpbmcpLCBtaW1lVHlwZVRleHRIVE1MLCBodG1sLCAq
YmFzZVVSTCk7CiAgICAgcmV0dXJuIGh0bWw7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vV3JpdGFibGVEYXRhT2JqZWN0LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0v
Y2hyb21pdW0vV3JpdGFibGVEYXRhT2JqZWN0LmNwcAppbmRleCA2ZTdjMjgzLi5hZWU3YmZjIDEw
MDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1dyaXRhYmxlRGF0YU9iamVjdC5j
cHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9Xcml0YWJsZURhdGFPYmplY3QuY3Bw
CkBAIC00OSw5ICs0OSw5IEBAIFdyaXRhYmxlRGF0YU9iamVjdDo6V3JpdGFibGVEYXRhT2JqZWN0
KGJvb2wgaXNGb3JEcmFnZ2luZykKIHZvaWQgV3JpdGFibGVEYXRhT2JqZWN0OjpjbGVhckRhdGEo
Y29uc3QgU3RyaW5nJiB0eXBlKQogewogICAgIG1fZGF0YU1hcC5yZW1vdmUodHlwZSk7Ci0gICAg
aWYgKHR5cGUgPT0gdGV4dFVyaUxpc3RUeXBlKQorICAgIGlmICh0eXBlID09IG1pbWVUeXBlVGV4
dFVSSUxpc3QpCiAgICAgICAgIG1fdXJsVGl0bGUgPSAiIjsKLSAgICBlbHNlIGlmICh0eXBlID09
IHRleHRIdG1sVHlwZSkKKyAgICBlbHNlIGlmICh0eXBlID09IG1pbWVUeXBlVGV4dEhUTUwpCiAg
ICAgICAgIG1faHRtbEJhc2VVUkwgPSBLVVJMKCk7CiB9CiAKQEAgLTgxLDIyICs4MSwyMiBAQCBi
b29sIFdyaXRhYmxlRGF0YU9iamVjdDo6c2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0
IFN0cmluZyYgZGF0YSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIG1fZGF0YU1h
cC5zZXQodHlwZSwgZGF0YSk7Ci0gICAgaWYgKHR5cGUgPT0gdGV4dFVyaUxpc3RUeXBlKQorICAg
IGlmICh0eXBlID09IG1pbWVUeXBlVGV4dFVSSUxpc3QpCiAgICAgICAgIG1fdXJsVGl0bGUgPSAi
IjsKLSAgICBlbHNlIGlmICh0eXBlID09IHRleHRIdG1sVHlwZSkKKyAgICBlbHNlIGlmICh0eXBl
ID09IG1pbWVUeXBlVGV4dEhUTUwpCiAgICAgICAgIG1faHRtbEJhc2VVUkwgPSBLVVJMKCk7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgV3JpdGFibGVEYXRhT2JqZWN0OjpzZXRVUkwoY29u
c3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgdGl0bGUpCiB7Ci0gICAgc2V0RGF0YSh0ZXh0
VXJpTGlzdFR5cGUsIHVybCk7CisgICAgc2V0RGF0YShtaW1lVHlwZVRleHRVUklMaXN0LCB1cmwp
OwogICAgIG1fdXJsVGl0bGUgPSB0aXRsZTsKIH0KIAogdm9pZCBXcml0YWJsZURhdGFPYmplY3Q6
OnNldEhUTUwoY29uc3QgU3RyaW5nJiBodG1sLCBjb25zdCBLVVJMJiBiYXNlVVJMKQogewotICAg
IHNldERhdGEodGV4dEh0bWxUeXBlLCBodG1sKTsKKyAgICBzZXREYXRhKG1pbWVUeXBlVGV4dEhU
TUwsIGh0bWwpOwogICAgIG1faHRtbEJhc2VVUkwgPSBiYXNlVVJMOwogfQogCmRpZmYgLS1naXQg
YS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpp
bmRleCA0MWFiMDhkLi4wZTYxZTc2IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCisrKyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MSBAQAorMjAx
MC0wOS0yOCAgRGFuaWVsIENoZW5nICA8ZGNoZW5nQGNocm9taXVtLm9yZz4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbY2hyb21pdW1dIFJlZmFjdG9y
IENocm9taXVtRGF0YU9iamVjdCB0byB1c2UgZ2V0dGVycy9zZXR0ZXJzLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDY1NTkKKworICAgICAgICBUaGlz
IGlzIGFuIGludGVybWVkaWF0ZSBzdGVwIHRvIGNvbnZlcnRpbmcgQ2hyb21pdW1EYXRhT2JqZWN0
IHRvIHVzZQorICAgICAgICBjYWxsYmFja3MgdG8gdGhlIGJyb3dzZXIgdG8gcmV0cmlldmUgZGF0
YS4gU3BlY2lhbCBoYW5kbGluZyBmb3IgVVJMIGFuZAorICAgICAgICB0ZXh0L3VyaS1saXN0IGhh
cyBhbHNvIGJlZW4gcmVtb3ZlZDsgdGhleSBub3cgdHJlYXQgdGhlaXIgZGF0YSBhcmd1bWVudAor
ICAgICAgICBhcyBqdXN0IGFuIG9wYXF1ZSBibG9iIG9mIHRleHQuCisKKyAgICAgICAgKiBwdWJs
aWMvV2ViRHJhZ0RhdGEuaDoKKyAgICAgICAgKiBzcmMvV2ViRHJhZ0RhdGEuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJEcmFnRGF0YTo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkRyYWdEYXRhOjp1cmwpOgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFnRGF0YTo6c2V0VVJMKToK
KyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0RhdGE6OnVybFRpdGxlKToKKyAgICAgICAgKFdlYktp
dDo6V2ViRHJhZ0RhdGE6OnNldFVSTFRpdGxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0Rh
dGE6OmRvd25sb2FkTWV0YWRhdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFnRGF0YTo6c2V0
RG93bmxvYWRNZXRhZGF0YSk6CisgICAgICAgIChXZWJLaXQ6OldlYkRyYWdEYXRhOjpmaWxlRXh0
ZW5zaW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0RhdGE6OnNldEZpbGVFeHRlbnNpb24p
OgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFnRGF0YTo6aGFzRmlsZU5hbWVzKToKKyAgICAgICAg
KFdlYktpdDo6V2ViRHJhZ0RhdGE6OmZpbGVOYW1lcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkRy
YWdEYXRhOjpzZXRGaWxlTmFtZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFnRGF0YTo6YXBw
ZW5kVG9GaWxlTmFtZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFnRGF0YTo6cGxhaW5UZXh0
KToKKyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0RhdGE6OnNldFBsYWluVGV4dCk6CisgICAgICAg
IChXZWJLaXQ6OldlYkRyYWdEYXRhOjpodG1sVGV4dCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRy
YWdEYXRhOjpzZXRIVE1MVGV4dCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRyYWdEYXRhOjpodG1s
QmFzZVVSTCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRyYWdEYXRhOjpzZXRIVE1MQmFzZVVSTCk6
CisgICAgICAgIChXZWJLaXQ6OldlYkRyYWdEYXRhOjpmaWxlQ29udGVudEZpbGVOYW1lKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViRHJhZ0RhdGE6OnNldEZpbGVDb250ZW50RmlsZU5hbWUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJEcmFnRGF0YTo6ZmlsZUNvbnRlbnQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJEcmFnRGF0YTo6c2V0RmlsZUNvbnRlbnQpOgorCiAyMDEwLTA5LTIyICBLZW5uZXRoIFJ1
c3NlbGwgIDxrYnJAZ29vZ2xlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBDaHJvbWl1bSBi
dWlsZCBmaXguIEZpeCBidWlsZCB3aGVuIGFjY2VsZXJhdGVkCmRpZmYgLS1naXQgYS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYkRyYWdEYXRhLmggYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YkRyYWdEYXRhLmgKaW5kZXggMjk3OTUxOS4uNjc0OGZlMCAxMDA2NDQKLS0tIGEvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJEcmFnRGF0YS5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViRHJhZ0RhdGEuaApAQCAtNjYsNyArNjYsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzTnVs
bCgpIGNvbnN0IHsgcmV0dXJuICFtX3ByaXZhdGU7IH0KIAotICAgIFdFQktJVF9BUEkgV2ViVVJM
IHVybCgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgV2ViU3RyaW5nIHVybCgpIGNvbnN0OwogICAg
IFdFQktJVF9BUEkgdm9pZCBzZXRVUkwoY29uc3QgV2ViVVJMJik7CiAKICAgICBXRUJLSVRfQVBJ
IFdlYlN0cmluZyB1cmxUaXRsZSgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJEcmFnRGF0YS5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRyYWdEYXRhLmNw
cAppbmRleCA2NDNjMzVkLi5hODY2ZjA0IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkRyYWdEYXRhLmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRyYWdEYXRhLmNw
cApAQCAtNDgsNyArNDgsNyBAQCBjbGFzcyBXZWJEcmFnRGF0YVByaXZhdGUgOiBwdWJsaWMgQ2hy
b21pdW1EYXRhT2JqZWN0IHsKIAogdm9pZCBXZWJEcmFnRGF0YTo6aW5pdGlhbGl6ZSgpCiB7Ci0g
ICAgYXNzaWduKHN0YXRpY19jYXN0PFdlYkRyYWdEYXRhUHJpdmF0ZSo+KENocm9taXVtRGF0YU9i
amVjdDo6Y3JlYXRlKCkucmVsZWFzZVJlZigpKSk7CisgICAgYXNzaWduKHN0YXRpY19jYXN0PFdl
YkRyYWdEYXRhUHJpdmF0ZSo+KENocm9taXVtRGF0YU9iamVjdDo6Y3JlYXRlKENsaXBib2FyZDo6
RHJhZ0FuZERyb3ApLnJlbGVhc2VSZWYoKSkpOwogfQogCiB2b2lkIFdlYkRyYWdEYXRhOjpyZXNl
dCgpCkBAIC02NCwxMzcgKzY0LDE0NCBAQCB2b2lkIFdlYkRyYWdEYXRhOjphc3NpZ24oY29uc3Qg
V2ViRHJhZ0RhdGEmIG90aGVyKQogICAgIGFzc2lnbihwKTsKIH0KIAotV2ViVVJMIFdlYkRyYWdE
YXRhOjp1cmwoKSBjb25zdAorV2ViU3RyaW5nIFdlYkRyYWdEYXRhOjp1cmwoKSBjb25zdAogewog
ICAgIEFTU0VSVCghaXNOdWxsKCkpOwotICAgIHJldHVybiBtX3ByaXZhdGUtPmdldFVSTCgpOwor
ICAgIGJvb2wgaWdub3JlZFN1Y2Nlc3M7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Z2V0RGF0YSgi
dGV4dC91cmktbGlzdCIsIGlnbm9yZWRTdWNjZXNzKTsKIH0KIAogdm9pZCBXZWJEcmFnRGF0YTo6
c2V0VVJMKGNvbnN0IFdlYlVSTCYgdXJsKQogewogICAgIGVuc3VyZU11dGFibGUoKTsKLSAgICBt
X3ByaXZhdGUtPnNldFVSTCh1cmwpOworICAgIG1fcHJpdmF0ZS0+c2V0RGF0YSgidGV4dC91cmkt
bGlzdCIsIEtVUkwodXJsKS5zdHJpbmcoKSk7CiB9CiAKIFdlYlN0cmluZyBXZWJEcmFnRGF0YTo6
dXJsVGl0bGUoKSBjb25zdAogewogICAgIEFTU0VSVCghaXNOdWxsKCkpOwotICAgIHJldHVybiBt
X3ByaXZhdGUtPnVybFRpdGxlOworICAgIHJldHVybiBtX3ByaXZhdGUtPnVybFRpdGxlKCk7CiB9
CiAKIHZvaWQgV2ViRHJhZ0RhdGE6OnNldFVSTFRpdGxlKGNvbnN0IFdlYlN0cmluZyYgdXJsVGl0
bGUpCiB7CiAgICAgZW5zdXJlTXV0YWJsZSgpOwotICAgIG1fcHJpdmF0ZS0+dXJsVGl0bGUgPSB1
cmxUaXRsZTsKKyAgICBtX3ByaXZhdGUtPnNldFVybFRpdGxlKHVybFRpdGxlKTsKIH0KIAogV2Vi
U3RyaW5nIFdlYkRyYWdEYXRhOjpkb3dubG9hZE1ldGFkYXRhKCkgY29uc3QKIHsKICAgICBBU1NF
UlQoIWlzTnVsbCgpKTsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5kb3dubG9hZE1ldGFkYXRhOwor
ICAgIGJvb2wgaWdub3JlZFN1Y2Nlc3M7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Z2V0RGF0YSgi
ZG93bmxvYWR1cmwiLCBpZ25vcmVkU3VjY2Vzcyk7CiB9CiAKIHZvaWQgV2ViRHJhZ0RhdGE6OnNl
dERvd25sb2FkTWV0YWRhdGEoY29uc3QgV2ViU3RyaW5nJiBkb3dubG9hZE1ldGFkYXRhKQogewog
ICAgIGVuc3VyZU11dGFibGUoKTsKLSAgICBtX3ByaXZhdGUtPmRvd25sb2FkTWV0YWRhdGEgPSBk
b3dubG9hZE1ldGFkYXRhOworICAgIG1fcHJpdmF0ZS0+c2V0RGF0YSgiZG93bmxvYWR1cmwiLCBk
b3dubG9hZE1ldGFkYXRhKTsKIH0KIAogV2ViU3RyaW5nIFdlYkRyYWdEYXRhOjpmaWxlRXh0ZW5z
aW9uKCkgY29uc3QKIHsKICAgICBBU1NFUlQoIWlzTnVsbCgpKTsKLSAgICByZXR1cm4gbV9wcml2
YXRlLT5maWxlRXh0ZW5zaW9uOworICAgIHJldHVybiBtX3ByaXZhdGUtPmZpbGVFeHRlbnNpb24o
KTsKIH0KIAogdm9pZCBXZWJEcmFnRGF0YTo6c2V0RmlsZUV4dGVuc2lvbihjb25zdCBXZWJTdHJp
bmcmIGZpbGVFeHRlbnNpb24pCiB7CiAgICAgZW5zdXJlTXV0YWJsZSgpOwotICAgIG1fcHJpdmF0
ZS0+ZmlsZUV4dGVuc2lvbiA9IGZpbGVFeHRlbnNpb247CisgICAgbV9wcml2YXRlLT5zZXRGaWxl
RXh0ZW5zaW9uKGZpbGVFeHRlbnNpb24pOwogfQogCiBib29sIFdlYkRyYWdEYXRhOjpoYXNGaWxl
TmFtZXMoKSBjb25zdAogewogICAgIEFTU0VSVCghaXNOdWxsKCkpOwotICAgIHJldHVybiAhbV9w
cml2YXRlLT5maWxlbmFtZXMuaXNFbXB0eSgpOworICAgIHJldHVybiBtX3ByaXZhdGUtPmNvbnRh
aW5zRmlsZW5hbWVzKCk7CiB9CiAKIHZvaWQgV2ViRHJhZ0RhdGE6OmZpbGVOYW1lcyhXZWJWZWN0
b3I8V2ViU3RyaW5nPiYgZmlsZU5hbWVzKSBjb25zdAogewogICAgIEFTU0VSVCghaXNOdWxsKCkp
OwotICAgIGZpbGVOYW1lcyA9IG1fcHJpdmF0ZS0+ZmlsZW5hbWVzOworICAgIGZpbGVOYW1lcyA9
IG1fcHJpdmF0ZS0+ZmlsZW5hbWVzKCk7CiB9CiAKIHZvaWQgV2ViRHJhZ0RhdGE6OnNldEZpbGVO
YW1lcyhjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYgZmlsZU5hbWVzKQogewogICAgIGVuc3Vy
ZU11dGFibGUoKTsKLSAgICBtX3ByaXZhdGUtPmZpbGVuYW1lcy5jbGVhcigpOwotICAgIG1fcHJp
dmF0ZS0+ZmlsZW5hbWVzLmFwcGVuZChmaWxlTmFtZXMuZGF0YSgpLCBmaWxlTmFtZXMuc2l6ZSgp
KTsKKyAgICBWZWN0b3I8U3RyaW5nPiBmaWxlTmFtZXNDb3B5OworICAgIGZpbGVOYW1lc0NvcHku
YXBwZW5kKGZpbGVOYW1lcy5kYXRhKCksIGZpbGVOYW1lcy5zaXplKCkpOworICAgIG1fcHJpdmF0
ZS0+c2V0RmlsZW5hbWVzKGZpbGVOYW1lc0NvcHkpOwogfQogCiB2b2lkIFdlYkRyYWdEYXRhOjph
cHBlbmRUb0ZpbGVOYW1lcyhjb25zdCBXZWJTdHJpbmcmIGZpbGVOYW1lKQogewogICAgIGVuc3Vy
ZU11dGFibGUoKTsKLSAgICBtX3ByaXZhdGUtPmZpbGVuYW1lcy5hcHBlbmQoZmlsZU5hbWUpOwor
ICAgIFZlY3RvcjxTdHJpbmc+IGZpbGVOYW1lcyA9IG1fcHJpdmF0ZS0+ZmlsZW5hbWVzKCk7Cisg
ICAgZmlsZU5hbWVzLmFwcGVuZChmaWxlTmFtZSk7CisgICAgbV9wcml2YXRlLT5zZXRGaWxlbmFt
ZXMoZmlsZU5hbWVzKTsKIH0KIAogV2ViU3RyaW5nIFdlYkRyYWdEYXRhOjpwbGFpblRleHQoKSBj
b25zdAogewogICAgIEFTU0VSVCghaXNOdWxsKCkpOwotICAgIHJldHVybiBtX3ByaXZhdGUtPnBs
YWluVGV4dDsKKyAgICBib29sIGlnbm9yZWRTdWNjZXNzOworICAgIHJldHVybiBtX3ByaXZhdGUt
PmdldERhdGEoInRleHQvcGxhaW4iLCBpZ25vcmVkU3VjY2Vzcyk7CiB9CiAKIHZvaWQgV2ViRHJh
Z0RhdGE6OnNldFBsYWluVGV4dChjb25zdCBXZWJTdHJpbmcmIHBsYWluVGV4dCkKIHsKICAgICBl
bnN1cmVNdXRhYmxlKCk7Ci0gICAgbV9wcml2YXRlLT5wbGFpblRleHQgPSBwbGFpblRleHQ7Cisg
ICAgbV9wcml2YXRlLT5zZXREYXRhKCJ0ZXh0L3BsYWluIiwgcGxhaW5UZXh0KTsKIH0KIAogV2Vi
U3RyaW5nIFdlYkRyYWdEYXRhOjpodG1sVGV4dCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFpc051
bGwoKSk7Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+dGV4dEh0bWw7CisgICAgYm9vbCBpZ25vcmVk
U3VjY2VzczsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5nZXREYXRhKCJ0ZXh0L2h0bWwiLCBpZ25v
cmVkU3VjY2Vzcyk7CiB9CiAKIHZvaWQgV2ViRHJhZ0RhdGE6OnNldEhUTUxUZXh0KGNvbnN0IFdl
YlN0cmluZyYgaHRtbFRleHQpCiB7CiAgICAgZW5zdXJlTXV0YWJsZSgpOwotICAgIG1fcHJpdmF0
ZS0+dGV4dEh0bWwgPSBodG1sVGV4dDsKKyAgICBtX3ByaXZhdGUtPnNldERhdGEoInRleHQvaHRt
bCIsIGh0bWxUZXh0KTsKIH0KIAogV2ViVVJMIFdlYkRyYWdEYXRhOjpodG1sQmFzZVVSTCgpIGNv
bnN0CiB7CiAgICAgQVNTRVJUKCFpc051bGwoKSk7Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+aHRt
bEJhc2VVcmw7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+aHRtbEJhc2VVcmwoKTsKIH0KIAogdm9p
ZCBXZWJEcmFnRGF0YTo6c2V0SFRNTEJhc2VVUkwoY29uc3QgV2ViVVJMJiBodG1sQmFzZVVSTCkK
IHsKICAgICBlbnN1cmVNdXRhYmxlKCk7Ci0gICAgbV9wcml2YXRlLT5odG1sQmFzZVVybCA9IGh0
bWxCYXNlVVJMOworICAgIG1fcHJpdmF0ZS0+c2V0SHRtbEJhc2VVcmwoaHRtbEJhc2VVUkwpOwog
fQogCiBXZWJTdHJpbmcgV2ViRHJhZ0RhdGE6OmZpbGVDb250ZW50RmlsZU5hbWUoKSBjb25zdAog
ewogICAgIEFTU0VSVCghaXNOdWxsKCkpOwotICAgIHJldHVybiBtX3ByaXZhdGUtPmZpbGVDb250
ZW50RmlsZW5hbWU7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+ZmlsZUNvbnRlbnRGaWxlbmFtZSgp
OwogfQogCiB2b2lkIFdlYkRyYWdEYXRhOjpzZXRGaWxlQ29udGVudEZpbGVOYW1lKGNvbnN0IFdl
YlN0cmluZyYgZmlsZU5hbWUpCiB7CiAgICAgZW5zdXJlTXV0YWJsZSgpOwotICAgIG1fcHJpdmF0
ZS0+ZmlsZUNvbnRlbnRGaWxlbmFtZSA9IGZpbGVOYW1lOworICAgIG1fcHJpdmF0ZS0+c2V0Rmls
ZUNvbnRlbnRGaWxlbmFtZShmaWxlTmFtZSk7CiB9CiAKIFdlYkRhdGEgV2ViRHJhZ0RhdGE6OmZp
bGVDb250ZW50KCkgY29uc3QKIHsKICAgICBBU1NFUlQoIWlzTnVsbCgpKTsKLSAgICByZXR1cm4g
V2ViRGF0YShtX3ByaXZhdGUtPmZpbGVDb250ZW50KTsKKyAgICByZXR1cm4gV2ViRGF0YShtX3By
aXZhdGUtPmZpbGVDb250ZW50KCkpOwogfQogCiB2b2lkIFdlYkRyYWdEYXRhOjpzZXRGaWxlQ29u
dGVudChjb25zdCBXZWJEYXRhJiBmaWxlQ29udGVudCkKIHsKICAgICBlbnN1cmVNdXRhYmxlKCk7
Ci0gICAgbV9wcml2YXRlLT5maWxlQ29udGVudCA9IGZpbGVDb250ZW50OworICAgIG1fcHJpdmF0
ZS0+c2V0RmlsZUNvbnRlbnQoZmlsZUNvbnRlbnQpOwogfQogCiBXZWJEcmFnRGF0YTo6V2ViRHJh
Z0RhdGEoY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdD4m
IGRhdGEpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69136</attachid>
            <date>2010-09-28 17:01:08 -0700</date>
            <delta_ts>2010-09-28 17:27:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>foo.patch</filename>
            <type>text/plain</type>
            <size>50455</size>
            <attacher name="Daniel Cheng">dcheng</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MzhkMzExMC4uNmRkNzZlZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4MSBAQAorMjAxMC0wOS0yOCAgRGFuaWVsIENoZW5n
ICA8ZGNoZW5nQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBbY2hyb21pdW1dIFJlZmFjdG9yIENocm9taXVtRGF0YU9iamVjdCB0
byB1c2UgZ2V0dGVycy9zZXR0ZXJzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NDY1NTkKKworICAgICAgICBUaGlzIGlzIGFuIGludGVybWVkaWF0ZSBz
dGVwIHRvIGNvbnZlcnRpbmcgQ2hyb21pdW1EYXRhT2JqZWN0IHRvIHVzZQorICAgICAgICBjYWxs
YmFja3MgdG8gdGhlIGJyb3dzZXIgdG8gcmV0cmlldmUgZGF0YS4gU3BlY2lhbCBoYW5kbGluZyBm
b3IgVVJMIGFuZAorICAgICAgICB0ZXh0L3VyaS1saXN0IGhhcyBhbHNvIGJlZW4gcmVtb3ZlZDsg
dGhleSBub3cgdHJlYXQgdGhlaXIgZGF0YSBhcmd1bWVudAorICAgICAgICBhcyBqdXN0IGFuIG9w
YXF1ZSBibG9iIG9mIHRleHQuCisKKyAgICAgICAgVGVzdDogZWRpdGluZy9wYXN0ZWJvYXJkL2Rh
dGFUcmFuc2Zlci1zZXREYXRhLWdldERhdGEuaHRtbAorCisgICAgICAgICogZWRpdGluZy9jaHJv
bWl1bS9FZGl0b3JDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om5ld0dl
bmVyYWxDbGlwYm9hcmQpOgorICAgICAgICAqIHBhZ2UvY2hyb21pdW0vRXZlbnRIYW5kbGVyQ2hy
b21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpjcmVhdGVEcmFnZ2lu
Z0NsaXBib2FyZCk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6Y2xlYXJEYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6Y2xlYXJBbGwpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpjbGVhckFsbEV4Y2VwdEZpbGVzKToK
KyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6aGFzRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OnR5cGVzKToKKyAgICAgICAgKFdlYkNvcmU6
OkNocm9taXVtRGF0YU9iamVjdDo6Z2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1
bURhdGFPYmplY3Q6OnNldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2Jq
ZWN0OjpDaHJvbWl1bURhdGFPYmplY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0No
cm9taXVtRGF0YU9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0Ojp1cmxUaXRs
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OnNldFVybFRpdGxlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6aHRtbEJhc2VVcmwpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpzZXRIdG1sQmFzZVVybCk6CisgICAg
ICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OmNvbnRhaW5zRmlsZW5hbWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6ZmlsZW5hbWVzKToKKyAgICAgICAg
KFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6c2V0RmlsZW5hbWVzKToKKyAgICAgICAgKFdl
YkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6ZmlsZUV4dGVuc2lvbik6CisgICAgICAgIChXZWJD
b3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OnNldEZpbGVFeHRlbnNpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpmaWxlQ29udGVudEZpbGVuYW1lKToKKyAgICAgICAg
KFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6c2V0RmlsZUNvbnRlbnRGaWxlbmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OmZpbGVDb250ZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6c2V0RmlsZUNvbnRlbnQpOgorICAgICAg
ICAqIHBsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Om5vcm1hbGl6ZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkQ2hyb21p
dW06OmNsZWFyRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRDaHJvbWl1bTo6Y2xl
YXJBbGxEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENocm9taXVtOjpnZXREYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENocm9taXVtOjpzZXREYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNsaXBib2FyZENocm9taXVtOjp0eXBlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpDbGlwYm9hcmRDaHJvbWl1bTo6ZmlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVJbWFn
ZVRvRGF0YU9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRDaHJvbWl1bTo6ZGVj
bGFyZUFuZFdyaXRlRHJhZ0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENocm9t
aXVtOjp3cml0ZVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRDaHJvbWl1bTo6d3Jp
dGVSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRDaHJvbWl1bTo6d3JpdGVQbGFp
blRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtV2lu
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENocm9taXVtOjp2YWxpZGF0ZUZpbGVO
YW1lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRNaW1lVHlwZXMuY3Bw
OgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZE1pbWVUeXBlcy5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0RyYWdEYXRhQ2hyb21pdW0uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Y29udGFpbnNIVE1MKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjpjb250
YWluc1VSTCk6CisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0YTo6YXNVUkwpOgorICAgICAgICAo
V2ViQ29yZTo6RHJhZ0RhdGE6OmNvbnRhaW5zRmlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6RHJh
Z0RhdGE6OmFzRmlsZW5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjpjb250YWlu
c1BsYWluVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0YTo6YXNQbGFpblRleHQpOgor
ICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmNhblNtYXJ0UmVwbGFjZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEcmFnRGF0YTo6YXNGcmFnbWVudCk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21p
dW0vUmVhZGFibGVEYXRhT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlYWRhYmxlRGF0
YU9iamVjdDo6Z2V0VVJMKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWRhYmxlRGF0YU9iamVjdDo6
Z2V0SFRNTCk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vV3JpdGFibGVEYXRhT2JqZWN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldyaXRhYmxlRGF0YU9iamVjdDo6Y2xlYXJEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OldyaXRhYmxlRGF0YU9iamVjdDo6c2V0RGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpXcml0YWJsZURhdGFPYmplY3Q6OnNldFVSTCk6CisgICAgICAgIChXZWJDb3Jl
OjpXcml0YWJsZURhdGFPYmplY3Q6OnNldEhUTUwpOgorCiAyMDEwLTA5LTIyICBBbGV4ZXkgUHJv
c2t1cnlha292ICA8YXBAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFy
dGguCmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvY2hyb21pdW0vRWRpdG9yQ2hyb21pdW0u
Y3BwIGIvV2ViQ29yZS9lZGl0aW5nL2Nocm9taXVtL0VkaXRvckNocm9taXVtLmNwcAppbmRleCBj
OTM4YTdlLi4yYmZiNWFmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvY2hyb21pdW0vRWRp
dG9yQ2hyb21pdW0uY3BwCisrKyBiL1dlYkNvcmUvZWRpdGluZy9jaHJvbWl1bS9FZGl0b3JDaHJv
bWl1bS5jcHAKQEAgLTM5LDcgKzM5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBQYXNzUmVm
UHRyPENsaXBib2FyZD4gRWRpdG9yOjpuZXdHZW5lcmFsQ2xpcGJvYXJkKENsaXBib2FyZEFjY2Vz
c1BvbGljeSBwb2xpY3ksIEZyYW1lKiBmcmFtZSkKIHsKLSAgICByZXR1cm4gQ2xpcGJvYXJkQ2hy
b21pdW06OmNyZWF0ZShDbGlwYm9hcmQ6OkNvcHlBbmRQYXN0ZSwgQ2hyb21pdW1EYXRhT2JqZWN0
OjpjcmVhdGUoKSwgcG9saWN5LCBmcmFtZSk7CisgICAgcmV0dXJuIENsaXBib2FyZENocm9taXVt
OjpjcmVhdGUoQ2xpcGJvYXJkOjpDb3B5QW5kUGFzdGUsIENocm9taXVtRGF0YU9iamVjdDo6Y3Jl
YXRlKENsaXBib2FyZDo6Q29weUFuZFBhc3RlKSwgcG9saWN5LCBmcmFtZSk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9jaHJvbWl1bS9FdmVu
dEhhbmRsZXJDaHJvbWl1bS5jcHAgYi9XZWJDb3JlL3BhZ2UvY2hyb21pdW0vRXZlbnRIYW5kbGVy
Q2hyb21pdW0uY3BwCmluZGV4IDllOWE3OWEuLjE5YjhhODUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGFnZS9jaHJvbWl1bS9FdmVudEhhbmRsZXJDaHJvbWl1bS5jcHAKKysrIGIvV2ViQ29yZS9wYWdl
L2Nocm9taXVtL0V2ZW50SGFuZGxlckNocm9taXVtLmNwcApAQCAtMTI4LDcgKzEyOCw3IEBAIGJv
b2wgRXZlbnRIYW5kbGVyOjpldmVudEFjdGl2YXRlZFZpZXcoY29uc3QgUGxhdGZvcm1Nb3VzZUV2
ZW50JiBldmVudCkgY29uc3QKIAogUGFzc1JlZlB0cjxDbGlwYm9hcmQ+IEV2ZW50SGFuZGxlcjo6
Y3JlYXRlRHJhZ2dpbmdDbGlwYm9hcmQoKSBjb25zdAogewotICAgIFJlZlB0cjxDaHJvbWl1bURh
dGFPYmplY3Q+IGRhdGFPYmplY3QgPSBDaHJvbWl1bURhdGFPYmplY3Q6OmNyZWF0ZSgpOworICAg
IFJlZlB0cjxDaHJvbWl1bURhdGFPYmplY3Q+IGRhdGFPYmplY3QgPSBDaHJvbWl1bURhdGFPYmpl
Y3Q6OmNyZWF0ZShDbGlwYm9hcmQ6OkRyYWdBbmREcm9wKTsKICAgICByZXR1cm4gQ2xpcGJvYXJk
Q2hyb21pdW06OmNyZWF0ZShDbGlwYm9hcmQ6OkRyYWdBbmREcm9wLCBkYXRhT2JqZWN0LmdldCgp
LCBDbGlwYm9hcmRXcml0YWJsZSwgbV9mcmFtZSk7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmNwcCBiL1dlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmNwcAppbmRleCA4MzUyNjY5Li5hMDM1ZDdh
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVj
dC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3Qu
Y3BwCkBAIC0zMSw1NiArMzEsMjM2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
Q2hyb21pdW1EYXRhT2JqZWN0LmgiCiAKKyNpbmNsdWRlICJDaHJvbWl1bUJyaWRnZS5oIgorI2lu
Y2x1ZGUgIkNsaXBib2FyZE1pbWVUeXBlcy5oIgorI2luY2x1ZGUgIlBhc3RlYm9hcmQuaCIKKwog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIENocm9taXVtRGF0YU9iamVjdDo6Y2xlYXIoKQor
Ly8gUGVyIFJGQyAyNDgzLCB0aGUgbGluZSBzZXBhcmF0b3IgZm9yICJ0ZXh0Ly4uLiIgTUlNRSB0
eXBlcyBpcyBDUi1MRi4KK3N0YXRpYyBjaGFyIGNvbnN0KiBjb25zdCB0ZXh0TUlNRVR5cGVMaW5l
U2VwYXJhdG9yID0gIlxyXG4iOworCit2b2lkIENocm9taXVtRGF0YU9iamVjdDo6Y2xlYXJEYXRh
KGNvbnN0IFN0cmluZyYgdHlwZSkKK3sKKyAgICBpZiAodHlwZSA9PSBtaW1lVHlwZVRleHRQbGFp
bikgeworICAgICAgICBtX3BsYWluVGV4dCA9ICIiOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKHR5cGUgPT0gbWltZVR5cGVVUkwgfHwgdHlwZSA9PSBtaW1lVHlwZVRleHRVUklM
aXN0KSB7CisgICAgICAgIG1fdXJsID0gS1VSTCgpOworICAgICAgICBtX3VybFRpdGxlID0gIiI7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAodHlwZSA9PSBtaW1lVHlwZVRleHRI
VE1MKSB7CisgICAgICAgIG1fdGV4dEh0bWwgPSAiIjsKKyAgICAgICAgbV9odG1sQmFzZVVybCA9
IEtVUkwoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICh0eXBlID09IG1pbWVU
eXBlRG93bmxvYWRVUkwpIHsKKyAgICAgICAgbV9kb3dubG9hZE1ldGFkYXRhID0gIiI7CisgICAg
ICAgIHJldHVybjsKKyAgICB9Cit9CisKK3ZvaWQgQ2hyb21pdW1EYXRhT2JqZWN0OjpjbGVhckFs
bCgpCiB7CiAgICAgY2xlYXJBbGxFeGNlcHRGaWxlcygpOwotICAgIGZpbGVuYW1lcy5jbGVhcigp
OworICAgIG1fZmlsZW5hbWVzLmNsZWFyKCk7CiB9CiAKIHZvaWQgQ2hyb21pdW1EYXRhT2JqZWN0
OjpjbGVhckFsbEV4Y2VwdEZpbGVzKCkKIHsKLSAgICB1cmwgPSBLVVJMKCk7Ci0gICAgdXJsVGl0
bGUgPSAiIjsKLSAgICB1cmlMaXN0LmNsZWFyKCk7Ci0gICAgZG93bmxvYWRNZXRhZGF0YSA9ICIi
OwotICAgIGZpbGVFeHRlbnNpb24gPSAiIjsKLSAgICBwbGFpblRleHQgPSAiIjsKLSAgICB0ZXh0
SHRtbCA9ICIiOwotICAgIGh0bWxCYXNlVXJsID0gS1VSTCgpOwotICAgIGZpbGVDb250ZW50Rmls
ZW5hbWUgPSAiIjsKLSAgICBpZiAoZmlsZUNvbnRlbnQpCi0gICAgICAgIGZpbGVDb250ZW50LT5j
bGVhcigpOworICAgIG1fdXJsID0gS1VSTCgpOworICAgIG1fdXJpTGlzdC5jbGVhcigpOworICAg
IG1fdXJsVGl0bGUgPSAiIjsKKyAgICBtX2Rvd25sb2FkTWV0YWRhdGEgPSAiIjsKKyAgICBtX2Zp
bGVFeHRlbnNpb24gPSAiIjsKKyAgICBtX3BsYWluVGV4dCA9ICIiOworICAgIG1fdGV4dEh0bWwg
PSAiIjsKKyAgICBtX2h0bWxCYXNlVXJsID0gS1VSTCgpOworICAgIG1fZmlsZUNvbnRlbnRGaWxl
bmFtZSA9ICIiOworICAgIGlmIChtX2ZpbGVDb250ZW50KQorICAgICAgICBtX2ZpbGVDb250ZW50
LT5jbGVhcigpOwogfQogCiBib29sIENocm9taXVtRGF0YU9iamVjdDo6aGFzRGF0YSgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuICF1cmwuaXNFbXB0eSgpCi0gICAgICAgIHx8ICF1cmlMaXN0LmlzRW1w
dHkoKQotICAgICAgICB8fCAhZG93bmxvYWRNZXRhZGF0YS5pc0VtcHR5KCkKLSAgICAgICAgfHwg
IWZpbGVFeHRlbnNpb24uaXNFbXB0eSgpCi0gICAgICAgIHx8ICFmaWxlbmFtZXMuaXNFbXB0eSgp
Ci0gICAgICAgIHx8ICFwbGFpblRleHQuaXNFbXB0eSgpCi0gICAgICAgIHx8ICF0ZXh0SHRtbC5p
c0VtcHR5KCkKLSAgICAgICAgfHwgZmlsZUNvbnRlbnQ7CisgICAgcmV0dXJuICFtX3VybC5pc0Vt
cHR5KCkKKyAgICAgICAgfHwgIW1fdXJpTGlzdC5pc0VtcHR5KCkKKyAgICAgICAgfHwgIW1fZG93
bmxvYWRNZXRhZGF0YS5pc0VtcHR5KCkKKyAgICAgICAgfHwgIW1fZmlsZUV4dGVuc2lvbi5pc0Vt
cHR5KCkKKyAgICAgICAgfHwgIW1fZmlsZW5hbWVzLmlzRW1wdHkoKQorICAgICAgICB8fCAhbV9w
bGFpblRleHQuaXNFbXB0eSgpCisgICAgICAgIHx8ICFtX3RleHRIdG1sLmlzRW1wdHkoKQorICAg
ICAgICB8fCBtX2ZpbGVDb250ZW50OworfQorCitIYXNoU2V0PFN0cmluZz4gQ2hyb21pdW1EYXRh
T2JqZWN0Ojp0eXBlcygpIGNvbnN0Cit7CisgICAgLy8gVGhpcyBpcyBjdXJyZW50bHkgYnJva2Vu
IGZvciBwYXN0ZWJvYXJkIGV2ZW50cywgYW5kIGFsd2F5cyBoYXMgYmVlbi4KKyAgICBIYXNoU2V0
PFN0cmluZz4gcmVzdWx0czsKKworICAgIGlmICghbV9wbGFpblRleHQuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIHJlc3VsdHMuYWRkKG1pbWVUeXBlVGV4dCk7CisgICAgICAgIHJlc3VsdHMuYWRkKG1p
bWVUeXBlVGV4dFBsYWluKTsKKyAgICB9CisKKyAgICBpZiAoIW1fdXJsLmlzRW1wdHkoKSkgewor
ICAgICAgICByZXN1bHRzLmFkZChtaW1lVHlwZVVSTCk7CisgICAgICAgIHJlc3VsdHMuYWRkKG1p
bWVUeXBlVGV4dFVSSUxpc3QpOworICAgIH0KKworICAgIGlmICghbV90ZXh0SHRtbC5pc0VtcHR5
KCkpCisgICAgICAgIHJlc3VsdHMuYWRkKG1pbWVUeXBlVGV4dEhUTUwpOworCisgICAgaWYgKCFt
X2ZpbGVuYW1lcy5pc0VtcHR5KCkpCisgICAgICAgIHJlc3VsdHMuYWRkKCJGaWxlcyIpOworCisg
ICAgcmV0dXJuIHJlc3VsdHM7Cit9CisKK1N0cmluZyBDaHJvbWl1bURhdGFPYmplY3Q6OmdldERh
dGEoY29uc3QgU3RyaW5nJiB0eXBlLCBib29sJiBzdWNjZXNzKQoreworICAgIGlmICh0eXBlID09
IG1pbWVUeXBlVGV4dFBsYWluKSB7CisgICAgICAgIGlmIChtX2NsaXBib2FyZFR5cGUgPT0gQ2xp
cGJvYXJkOjpDb3B5QW5kUGFzdGUpIHsKKyAgICAgICAgICAgIFBhc3RlYm9hcmRQcml2YXRlOjpD
bGlwYm9hcmRCdWZmZXIgYnVmZmVyID0KKyAgICAgICAgICAgICAgICBQYXN0ZWJvYXJkOjpnZW5l
cmFsUGFzdGVib2FyZCgpLT5pc1NlbGVjdGlvbk1vZGUoKSA/CisgICAgICAgICAgICAgICAgUGFz
dGVib2FyZFByaXZhdGU6OlNlbGVjdGlvbkJ1ZmZlciA6CisgICAgICAgICAgICAgICAgUGFzdGVi
b2FyZFByaXZhdGU6OlN0YW5kYXJkQnVmZmVyOworICAgICAgICAgICAgU3RyaW5nIHRleHQgPSBD
aHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkUmVhZFBsYWluVGV4dChidWZmZXIpOworICAgICAgICAg
ICAgc3VjY2VzcyA9ICF0ZXh0LmlzRW1wdHkoKTsKKyAgICAgICAgICAgIHJldHVybiB0ZXh0Owor
ICAgICAgICB9CisgICAgICAgIHN1Y2Nlc3MgPSAhbV9wbGFpblRleHQuaXNFbXB0eSgpOworICAg
ICAgICByZXR1cm4gbV9wbGFpblRleHQ7CisgICAgfQorCisgICAgaWYgKHR5cGUgPT0gbWltZVR5
cGVVUkwpIHsKKyAgICAgICAgc3VjY2VzcyA9ICFtX3VybC5pc0VtcHR5KCk7CisgICAgICAgIHJl
dHVybiBtX3VybC5zdHJpbmcoKTsKKyAgICB9CisKKyAgICBpZiAodHlwZSA9PSBtaW1lVHlwZVRl
eHRVUklMaXN0KSB7CisgICAgICAgIC8vIFRoaXMgd2lsbCBhbHdheXMgYmUgZW1wdHkgb24gYSBk
cmFnLWluLgorICAgICAgICBpZiAobV91cmlMaXN0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAg
c3VjY2VzcyA9ICFtX3VybC5pc0VtcHR5KCk7CisgICAgICAgICAgICByZXR1cm4gbV91cmw7Cisg
ICAgICAgIH0KKyAgICAgICAgc3VjY2VzcyA9IHRydWU7CisgICAgICAgIFN0cmluZyB1cmlMaXN0
U3RyaW5nKG1fdXJpTGlzdFswXSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgbV91
cmlMaXN0LnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICB1cmlMaXN0U3RyaW5nLmFwcGVuZCh0
ZXh0TUlNRVR5cGVMaW5lU2VwYXJhdG9yKTsKKyAgICAgICAgICAgIHVyaUxpc3RTdHJpbmcuYXBw
ZW5kKG1fdXJpTGlzdFtpXSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHVyaUxpc3RTdHJp
bmc7CisgICAgfQorCisgICAgaWYgKHR5cGUgPT0gbWltZVR5cGVUZXh0SFRNTCkgeworICAgICAg
ICBpZiAobV9jbGlwYm9hcmRUeXBlID09IENsaXBib2FyZDo6Q29weUFuZFBhc3RlKSB7CisgICAg
ICAgICAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyIGJ1ZmZlciA9CisgICAg
ICAgICAgICAgICAgUGFzdGVib2FyZDo6Z2VuZXJhbFBhc3RlYm9hcmQoKS0+aXNTZWxlY3Rpb25N
b2RlKCkgPworICAgICAgICAgICAgICAgIFBhc3RlYm9hcmRQcml2YXRlOjpTZWxlY3Rpb25CdWZm
ZXIgOgorICAgICAgICAgICAgICAgIFBhc3RlYm9hcmRQcml2YXRlOjpTdGFuZGFyZEJ1ZmZlcjsK
KyAgICAgICAgICAgIFN0cmluZyBodG1sVGV4dDsKKyAgICAgICAgICAgIEtVUkwgc291cmNlVVJM
OworICAgICAgICAgICAgQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFJlYWRIVE1MKGJ1ZmZlciwg
Jmh0bWxUZXh0LCAmc291cmNlVVJMKTsKKyAgICAgICAgICAgIHN1Y2Nlc3MgPSAhaHRtbFRleHQu
aXNFbXB0eSgpOworICAgICAgICAgICAgcmV0dXJuIGh0bWxUZXh0OworICAgICAgICB9CisgICAg
ICAgIHN1Y2Nlc3MgPSAhbV90ZXh0SHRtbC5pc0VtcHR5KCk7CisgICAgICAgIHJldHVybiBtX3Rl
eHRIdG1sOworICAgIH0KKworICAgIGlmICh0eXBlID09IG1pbWVUeXBlRG93bmxvYWRVUkwpIHsK
KyAgICAgICAgc3VjY2VzcyA9ICFtX2Rvd25sb2FkTWV0YWRhdGEuaXNFbXB0eSgpOworICAgICAg
ICByZXR1cm4gbV9kb3dubG9hZE1ldGFkYXRhOworICAgIH0KKworICAgIHN1Y2Nlc3MgPSBmYWxz
ZTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK2Jvb2wgQ2hyb21pdW1EYXRhT2JqZWN0Ojpz
ZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKQoreworICAgIGlm
ICh0eXBlID09IG1pbWVUeXBlVGV4dFBsYWluKSB7CisgICAgICAgIG1fcGxhaW5UZXh0ID0gZGF0
YTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKHR5cGUgPT0gbWltZVR5
cGVVUkwgfHwgdHlwZSA9PSBtaW1lVHlwZVRleHRVUklMaXN0KSB7CisgICAgICAgIG1fdXJsID0g
S1VSTCgpOworICAgICAgICAvLyBMaW5lIHNlcGFyYXRvciBpcyBcclxuIHBlciBSRkMgMjQ4MyAt
IGhvd2V2ZXIsIGZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMKKyAgICAgICAgLy8gd2UgYWxzbyBh
bGxvdyBqdXN0IFxuIGhlcmUuCisgICAgICAgIGRhdGEuc3BsaXQoJ1xuJywgbV91cmlMaXN0KTsK
KyAgICAgICAgLy8gU3RyaXAgd2hpdGUgc3BhY2Ugb24gYWxsIGxpbmVzLCBpbmNsdWRpbmcgdHJh
aWxpbmcgXHIgZnJvbSBhYm92ZSBzcGxpdC4KKyAgICAgICAgLy8gSWYgdGhpcyBsZWF2ZXMgYSBs
aW5lIGVtcHR5LCByZW1vdmUgaXQgY29tcGxldGVseS4KKyAgICAgICAgLy8KKyAgICAgICAgLy8g
QWxzbywgY29weSB0aGUgZmlyc3QgdmFsaWQgVVJMIGludG8gdGhlICd1cmwnIG1lbWJlciBhcyB3
ZWxsLgorICAgICAgICAvLyBJbiBjYXNlIG5vIGVudHJ5IGlzIGEgdmFsaWQgVVJMIChpLmUuLCBy
ZW1hcmtzIG9ubHkpLCB0aGVuIHdlIGxlYXZlICd1cmwnIGVtcHR5LgorICAgICAgICAvLyBJLmUu
LCBpbiB0aGF0IGNhc2Ugc3Vic2VxdWVudCBjYWxscyB0byBnZXREYXRhKCJVUkwiKSB3aWxsIGdl
dCBhbiBlbXB0eSBzdHJpbmcuCisgICAgICAgIC8vIFRoaXMgaXMgaW4gbGluZSB3aXRoIHRoZSBI
VE1MNSBzcGVjIChzZWUgIlRoZSBEcmFnRXZlbnQgYW5kIERhdGFUcmFuc2ZlciBpbnRlcmZhY2Vz
IikuCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV91cmlMaXN0LnNpemUoKTsgLyoq
LykgeworICAgICAgICAgICAgU3RyaW5nJiBsaW5lID0gbV91cmlMaXN0W2ldOworICAgICAgICAg
ICAgbGluZSA9IGxpbmUuc3RyaXBXaGl0ZVNwYWNlKCk7CisgICAgICAgICAgICBpZiAobGluZS5p
c0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBtX3VyaUxpc3QucmVtb3ZlKGkpOworICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgKytpOworICAg
ICAgICAgICAgLy8gT25seSBjb3B5IHRoZSBmaXJzdCB2YWxpZCBVUkwuCisgICAgICAgICAgICBp
ZiAobV91cmwuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgLy8gU2tpcCByZW1hcmtzLgorICAgICAgICAgICAgaWYgKGxpbmVbMF0gPT0gJyMnKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgS1VSTCB1cmwgPSBLVVJMKFBhcnNl
ZFVSTFN0cmluZywgbGluZSk7CisgICAgICAgICAgICBpZiAodXJsLmlzVmFsaWQoKSkKKyAgICAg
ICAgICAgICAgICBtX3VybCA9IHVybDsKKyAgICAgICAgfQorICAgICAgICBpZiAobV91cmlMaXN0
LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgQVNTRVJUKG1fdXJsLmlzRW1wdHkoKSk7CisgICAg
ICAgICAgICByZXR1cm4gZGF0YS5pc0VtcHR5KCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgaWYgKHR5cGUgPT0gbWltZVR5cGVUZXh0SFRNTCkgeworICAg
ICAgICBtX3RleHRIdG1sID0gZGF0YTsKKyAgICAgICAgbV9odG1sQmFzZVVybCA9IEtVUkwoKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKHR5cGUgPT0gbWltZVR5cGVE
b3dubG9hZFVSTCkgeworICAgICAgICBtX2Rvd25sb2FkTWV0YWRhdGEgPSBkYXRhOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0Nocm9taXVt
RGF0YU9iamVjdDo6Q2hyb21pdW1EYXRhT2JqZWN0KENsaXBib2FyZDo6Q2xpcGJvYXJkVHlwZSBj
bGlwYm9hcmRUeXBlKQorICAgIDogbV9jbGlwYm9hcmRUeXBlKGNsaXBib2FyZFR5cGUpCit7CiB9
CiAKIENocm9taXVtRGF0YU9iamVjdDo6Q2hyb21pdW1EYXRhT2JqZWN0KGNvbnN0IENocm9taXVt
RGF0YU9iamVjdCYgb3RoZXIpCiAgICAgOiBSZWZDb3VudGVkPENocm9taXVtRGF0YU9iamVjdD4o
KQotICAgICwgdXJsVGl0bGUob3RoZXIudXJsVGl0bGUpCi0gICAgLCBkb3dubG9hZE1ldGFkYXRh
KG90aGVyLmRvd25sb2FkTWV0YWRhdGEpCi0gICAgLCBmaWxlRXh0ZW5zaW9uKG90aGVyLmZpbGVF
eHRlbnNpb24pCi0gICAgLCBmaWxlbmFtZXMob3RoZXIuZmlsZW5hbWVzKQotICAgICwgcGxhaW5U
ZXh0KG90aGVyLnBsYWluVGV4dCkKLSAgICAsIHRleHRIdG1sKG90aGVyLnRleHRIdG1sKQotICAg
ICwgaHRtbEJhc2VVcmwob3RoZXIuaHRtbEJhc2VVcmwpCi0gICAgLCBmaWxlQ29udGVudEZpbGVu
YW1lKG90aGVyLmZpbGVDb250ZW50RmlsZW5hbWUpCi0gICAgLCB1cmwob3RoZXIudXJsKQotICAg
ICwgdXJpTGlzdChvdGhlci51cmlMaXN0KQorICAgICwgbV9jbGlwYm9hcmRUeXBlKG90aGVyLm1f
Y2xpcGJvYXJkVHlwZSkKKyAgICAsIG1fdXJsVGl0bGUob3RoZXIubV91cmxUaXRsZSkKKyAgICAs
IG1fZG93bmxvYWRNZXRhZGF0YShvdGhlci5tX2Rvd25sb2FkTWV0YWRhdGEpCisgICAgLCBtX2Zp
bGVFeHRlbnNpb24ob3RoZXIubV9maWxlRXh0ZW5zaW9uKQorICAgICwgbV9maWxlbmFtZXMob3Ro
ZXIubV9maWxlbmFtZXMpCisgICAgLCBtX3BsYWluVGV4dChvdGhlci5tX3BsYWluVGV4dCkKKyAg
ICAsIG1fdGV4dEh0bWwob3RoZXIubV90ZXh0SHRtbCkKKyAgICAsIG1faHRtbEJhc2VVcmwob3Ro
ZXIubV9odG1sQmFzZVVybCkKKyAgICAsIG1fZmlsZUNvbnRlbnRGaWxlbmFtZShvdGhlci5tX2Zp
bGVDb250ZW50RmlsZW5hbWUpCisgICAgLCBtX3VybChvdGhlci5tX3VybCkKIHsKLSAgICBpZiAo
b3RoZXIuZmlsZUNvbnRlbnQuZ2V0KCkpCi0gICAgICAgIGZpbGVDb250ZW50ID0gb3RoZXIuZmls
ZUNvbnRlbnQtPmNvcHkoKTsKKyAgICBpZiAob3RoZXIubV9maWxlQ29udGVudC5nZXQoKSkKKyAg
ICAgICAgbV9maWxlQ29udGVudCA9IG90aGVyLm1fZmlsZUNvbnRlbnQtPmNvcHkoKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9DaHJvbWl1bURhdGFPYmplY3QuaCBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hy
b21pdW1EYXRhT2JqZWN0LmgKaW5kZXggYWYwYTNmYS4uYWY2ZTllMiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuaAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5oCkBAIC0zMSwxMSArMzEsMTQg
QEAKICNpZm5kZWYgQ2hyb21pdW1EYXRhT2JqZWN0X2gKICNkZWZpbmUgQ2hyb21pdW1EYXRhT2Jq
ZWN0X2gKIAorI2luY2x1ZGUgIkNsaXBib2FyZC5oIgogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNs
dWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1
ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIApAQCAtNDQsOSArNDcsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
Ly8gb2YgYW5kIGlzIG5vdCBzcGVjaWZpYyB0byBhIHBsYXRmb3JtLgogICAgIGNsYXNzIENocm9t
aXVtRGF0YU9iamVjdCA6IHB1YmxpYyBSZWZDb3VudGVkPENocm9taXVtRGF0YU9iamVjdD4gewog
ICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2hyb21pdW1EYXRhT2JqZWN0
PiBjcmVhdGUoKQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDaHJvbWl1bURhdGFPYmplY3Q+
IGNyZWF0ZShDbGlwYm9hcmQ6OkNsaXBib2FyZFR5cGUgY2xpcGJvYXJkVHlwZSkKICAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDaHJvbWl1bURhdGFPYmplY3QpOwor
ICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDaHJvbWl1bURhdGFPYmplY3QoY2xpcGJv
YXJkVHlwZSkpOwogICAgICAgICB9CiAKICAgICAgICAgUGFzc1JlZlB0cjxDaHJvbWl1bURhdGFP
YmplY3Q+IGNvcHkoKSBjb25zdApAQCAtNTQsNjAgKzU3LDU5IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2hyb21pdW1EYXRhT2JqZWN0KCp0
aGlzKSk7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkIGNsZWFyKCk7CisgICAgICAgIHZvaWQg
Y2xlYXJEYXRhKGNvbnN0IFN0cmluZyYgdHlwZSk7CisgICAgICAgIHZvaWQgY2xlYXJBbGwoKTsK
ICAgICAgICAgdm9pZCBjbGVhckFsbEV4Y2VwdEZpbGVzKCk7Ci0gICAgICAgIGJvb2wgaGFzRGF0
YSgpIGNvbnN0OwotCi0gICAgICAgIHZvaWQgY2xlYXJVUkwoKQotICAgICAgICB7Ci0gICAgICAg
ICAgICB1cmwgPSBLVVJMKCk7Ci0gICAgICAgICAgICB1cmlMaXN0LmNsZWFyKCk7Ci0gICAgICAg
ICAgICB1cmxUaXRsZSA9ICIiOwotICAgICAgICB9CiAKLSAgICAgICAgYm9vbCBoYXNWYWxpZFVS
TCgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiB1cmwuaXNWYWxpZCgpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgS1VSTCBnZXRVUkwoKSBjb25zdAotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gdXJsOwotICAgICAgICB9CisgICAgICAgIGJvb2wgaGFzRGF0YSgpIGNv
bnN0OwogCi0gICAgICAgIHZvaWQgc2V0VVJMKGNvbnN0IEtVUkwmIG5ld1VSTCkKLSAgICAgICAg
ewotICAgICAgICAgICAgdXJsID0gbmV3VVJMOwotICAgICAgICAgICAgdXJpTGlzdC5jbGVhcigp
OwotICAgICAgICAgICAgaWYgKG5ld1VSTC5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgdXJpTGlzdC5hcHBlbmQobmV3VVJMLnN0cmluZygpKTsKLSAgICAg
ICAgfQorICAgICAgICBIYXNoU2V0PFN0cmluZz4gdHlwZXMoKSBjb25zdDsKKyAgICAgICAgU3Ry
aW5nIGdldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBib29sJiBzdWNjZXNzKTsKKyAgICAgICAg
Ym9vbCBzZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKTsKKwor
ICAgICAgICAvLyBTcGVjaWFsIGhhbmRsZXJzIGZvciBVUkwvSFRNTCBtZXRhZGF0YS4KKyAgICAg
ICAgU3RyaW5nIHVybFRpdGxlKCkgY29uc3QgeyByZXR1cm4gbV91cmxUaXRsZTsgfQorICAgICAg
ICB2b2lkIHNldFVybFRpdGxlKGNvbnN0IFN0cmluZyYgdXJsVGl0bGUpIHsgbV91cmxUaXRsZSA9
IHVybFRpdGxlOyB9CisgICAgICAgIEtVUkwgaHRtbEJhc2VVcmwoKSBjb25zdCB7IHJldHVybiBt
X2h0bWxCYXNlVXJsOyB9CisgICAgICAgIHZvaWQgc2V0SHRtbEJhc2VVcmwoY29uc3QgS1VSTCYg
dXJsKSB7IG1faHRtbEJhc2VVcmwgPSB1cmw7IH0KKworICAgICAgICAvLyBVc2VkIHRvIGhhbmRs
ZSBmaWxlcyBiZWluZyBkcmFnZ2VkIGluLgorICAgICAgICBib29sIGNvbnRhaW5zRmlsZW5hbWVz
KCkgY29uc3QgeyByZXR1cm4gIW1fZmlsZW5hbWVzLmlzRW1wdHkoKTsgfQorICAgICAgICBWZWN0
b3I8U3RyaW5nPiBmaWxlbmFtZXMoKSBjb25zdCB7IHJldHVybiBtX2ZpbGVuYW1lczsgfQorICAg
ICAgICB2b2lkIHNldEZpbGVuYW1lcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVzKSB7
IG1fZmlsZW5hbWVzID0gZmlsZW5hbWVzOyB9CisKKyAgICAgICAgLy8gVXNlZCB0byBoYW5kbGUg
ZmlsZXMgKGltYWdlcykgYmVpbmcgZHJhZ2dlZCBvdXQuCisgICAgICAgIFN0cmluZyBmaWxlRXh0
ZW5zaW9uKCkgY29uc3QgeyByZXR1cm4gbV9maWxlRXh0ZW5zaW9uOyB9CisgICAgICAgIHZvaWQg
c2V0RmlsZUV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGZpbGVFeHRlbnNpb24pIHsgbV9maWxlRXh0
ZW5zaW9uID0gZmlsZUV4dGVuc2lvbjsgfQorICAgICAgICBTdHJpbmcgZmlsZUNvbnRlbnRGaWxl
bmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsZUNvbnRlbnRGaWxlbmFtZTsgfQorICAgICAgICB2
b2lkIHNldEZpbGVDb250ZW50RmlsZW5hbWUoY29uc3QgU3RyaW5nJiBmaWxlQ29udGVudEZpbGVu
YW1lKSB7IG1fZmlsZUNvbnRlbnRGaWxlbmFtZSA9IGZpbGVDb250ZW50RmlsZW5hbWU7IH0KKyAg
ICAgICAgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGZpbGVDb250ZW50KCkgY29uc3QgeyByZXR1
cm4gbV9maWxlQ29udGVudDsgfQorICAgICAgICB2b2lkIHNldEZpbGVDb250ZW50KFBhc3NSZWZQ
dHI8U2hhcmVkQnVmZmVyPiBmaWxlQ29udGVudCkgeyBtX2ZpbGVDb250ZW50ID0gZmlsZUNvbnRl
bnQ7IH0KIAotICAgICAgICBTdHJpbmcgdXJsVGl0bGU7CisgICAgcHJpdmF0ZToKKyAgICAgICAg
Q2hyb21pdW1EYXRhT2JqZWN0KENsaXBib2FyZDo6Q2xpcGJvYXJkVHlwZSk7CisgICAgICAgIENo
cm9taXVtRGF0YU9iamVjdChjb25zdCBDaHJvbWl1bURhdGFPYmplY3QmKTsKIAotICAgICAgICBT
dHJpbmcgZG93bmxvYWRNZXRhZGF0YTsKKyAgICAgICAgQ2xpcGJvYXJkOjpDbGlwYm9hcmRUeXBl
IG1fY2xpcGJvYXJkVHlwZTsKIAotICAgICAgICBTdHJpbmcgZmlsZUV4dGVuc2lvbjsKLSAgICAg
ICAgVmVjdG9yPFN0cmluZz4gZmlsZW5hbWVzOworICAgICAgICBTdHJpbmcgbV91cmxUaXRsZTsK
IAotICAgICAgICBTdHJpbmcgcGxhaW5UZXh0OworICAgICAgICBTdHJpbmcgbV9kb3dubG9hZE1l
dGFkYXRhOwogCi0gICAgICAgIFN0cmluZyB0ZXh0SHRtbDsKLSAgICAgICAgS1VSTCBodG1sQmFz
ZVVybDsKKyAgICAgICAgU3RyaW5nIG1fZmlsZUV4dGVuc2lvbjsKKyAgICAgICAgVmVjdG9yPFN0
cmluZz4gbV9maWxlbmFtZXM7CiAKLSAgICAgICAgU3RyaW5nIGZpbGVDb250ZW50RmlsZW5hbWU7
Ci0gICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGZpbGVDb250ZW50OworICAgICAgICBTdHJp
bmcgbV9wbGFpblRleHQ7CiAKLSAgICBwcml2YXRlOgotICAgICAgICAvLyBVUkwgYW5kIHVyaS1s
aXN0IGFyZSBsaW5rZWQsIHNvIHRoZXkgc2hvdWxkIG5vdCBiZSBhY2Nlc3NlZCBpbmRpdmlkdWFs
bHkuCi0gICAgICAgIEtVUkwgdXJsOwotICAgICAgICBWZWN0b3I8U3RyaW5nPiB1cmlMaXN0Owor
ICAgICAgICBTdHJpbmcgbV90ZXh0SHRtbDsKKyAgICAgICAgS1VSTCBtX2h0bWxCYXNlVXJsOwog
Ci0gICAgICAgIENocm9taXVtRGF0YU9iamVjdCgpIHt9Ci0gICAgICAgIENocm9taXVtRGF0YU9i
amVjdChjb25zdCBDaHJvbWl1bURhdGFPYmplY3QmKTsKKyAgICAgICAgU3RyaW5nIG1fZmlsZUNv
bnRlbnRGaWxlbmFtZTsKKyAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV9maWxlQ29udGVu
dDsKIAotICAgICAgICBmcmllbmQgY2xhc3MgQ2xpcGJvYXJkQ2hyb21pdW07CisgICAgICAgIC8v
IFRoZXNlIHR3byBhcmUgbGlua2VkLgorICAgICAgICBLVVJMIG1fdXJsOworICAgICAgICBWZWN0
b3I8U3RyaW5nPiBtX3VyaUxpc3Q7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5j
cHAgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmNwcAppbmRl
eCBjMmVjODBjLi4xYjU1NDMxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVt
L0NsaXBib2FyZENocm9taXVtLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Ns
aXBib2FyZENocm9taXVtLmNwcApAQCAtMjgsOSArMjgsOSBAQAogI2luY2x1ZGUgIkNsaXBib2Fy
ZENocm9taXVtLmgiCiAKICNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgotI2luY2x1ZGUgIkNocm9t
aXVtQnJpZGdlLmgiCiAjaW5jbHVkZSAiQ2hyb21pdW1EYXRhT2JqZWN0LmgiCiAjaW5jbHVkZSAi
Q2xpcGJvYXJkVXRpbGl0aWVzQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJDbGlwYm9hcmRNaW1lVHlw
ZXMuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkRyYWdEYXRhLmgiCiAjaW5j
bHVkZSAiRWxlbWVudC5oIgpAQCAtNDAsNyArNDAsNiBAQAogI2luY2x1ZGUgIkltYWdlLmgiCiAj
aW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIk5hbWVkTm9kZU1hcC5oIgot
I2luY2x1ZGUgIlBhc3RlYm9hcmQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2lu
Y2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVuZGVySW1hZ2UuaCIKQEAgLTU1LDQwICs1NCwx
MiBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogLy8gV2UgcHJvdmlkZSB0aGUgSUUgY2xp
cGJvYXJkIHR5cGVzIChVUkwgYW5kIFRleHQpLCBhbmQgdGhlIGNsaXBib2FyZCB0eXBlcyBzcGVj
aWZpZWQgaW4gdGhlIFdIQVRXRyBXZWIgQXBwbGljYXRpb25zIDEuMCBkcmFmdAogLy8gc2VlIGh0
dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvIFNlY3Rpb24g
Ni4zLjUuMwogCi1lbnVtIENsaXBib2FyZERhdGFUeXBlIHsKLSAgICBDbGlwYm9hcmREYXRhVHlw
ZU5vbmUsCi0KLSAgICBDbGlwYm9hcmREYXRhVHlwZVVSTCwKLSAgICBDbGlwYm9hcmREYXRhVHlw
ZVVSSUxpc3QsCi0gICAgQ2xpcGJvYXJkRGF0YVR5cGVEb3dubG9hZFVSTCwKLSAgICBDbGlwYm9h
cmREYXRhVHlwZVBsYWluVGV4dCwKLSAgICBDbGlwYm9hcmREYXRhVHlwZUhUTUwsCi0KLSAgICBD
bGlwYm9hcmREYXRhVHlwZU90aGVyLAotfTsKLQotLy8gUGVyIFJGQyAyNDgzLCB0aGUgbGluZSBz
ZXBhcmF0b3IgZm9yICJ0ZXh0Ly4uLiIgTUlNRSB0eXBlcyBpcyBDUi1MRi4KLXN0YXRpYyBjaGFy
IGNvbnN0KiBjb25zdCB0ZXh0TUlNRVR5cGVMaW5lU2VwYXJhdG9yID0gIlxyXG4iOwotCi1zdGF0
aWMgQ2xpcGJvYXJkRGF0YVR5cGUgY2xpcGJvYXJkVHlwZUZyb21NSU1FVHlwZShjb25zdCBTdHJp
bmcmIHR5cGUpCitzdGF0aWMgU3RyaW5nIG5vcm1hbGl6ZVR5cGUoY29uc3QgU3RyaW5nJiB0eXBl
KQogewogICAgIFN0cmluZyBjbGVhblR5cGUgPSB0eXBlLnN0cmlwV2hpdGVTcGFjZSgpLmxvd2Vy
KCk7Ci0gICAgaWYgKGNsZWFuVHlwZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBDbGlwYm9h
cmREYXRhVHlwZU5vbmU7Ci0KLSAgICAvLyBJbmNsdWRlcyB0d28gc3BlY2lhbCBjYXNlcyBmb3Ig
SUUgY29tcGF0aWJpbGl0eS4KLSAgICBpZiAoY2xlYW5UeXBlID09ICJ0ZXh0IiB8fCBjbGVhblR5
cGUgPT0gInRleHQvcGxhaW4iIHx8IGNsZWFuVHlwZS5zdGFydHNXaXRoKCJ0ZXh0L3BsYWluOyIp
KQotICAgICAgICByZXR1cm4gQ2xpcGJvYXJkRGF0YVR5cGVQbGFpblRleHQ7Ci0gICAgaWYgKGNs
ZWFuVHlwZSA9PSAidXJsIikKLSAgICAgICAgcmV0dXJuIENsaXBib2FyZERhdGFUeXBlVVJMOwot
ICAgIGlmIChjbGVhblR5cGUgPT0gInRleHQvdXJpLWxpc3QiKQotICAgICAgICByZXR1cm4gQ2xp
cGJvYXJkRGF0YVR5cGVVUklMaXN0OwotICAgIGlmIChjbGVhblR5cGUgPT0gImRvd25sb2FkdXJs
IikKLSAgICAgICAgcmV0dXJuIENsaXBib2FyZERhdGFUeXBlRG93bmxvYWRVUkw7Ci0gICAgaWYg
KGNsZWFuVHlwZSA9PSAidGV4dC9odG1sIikKLSAgICAgICAgcmV0dXJuIENsaXBib2FyZERhdGFU
eXBlSFRNTDsKLQotICAgIHJldHVybiBDbGlwYm9hcmREYXRhVHlwZU90aGVyOworICAgIGlmIChj
bGVhblR5cGUgPT0gbWltZVR5cGVUZXh0IHx8IGNsZWFuVHlwZS5zdGFydHNXaXRoKG1pbWVUeXBl
VGV4dFBsYWluRXRjKSkKKyAgICAgICAgcmV0dXJuIG1pbWVUeXBlVGV4dFBsYWluOworICAgIHJl
dHVybiBjbGVhblR5cGU7CiB9CiAKIFBhc3NSZWZQdHI8Q2xpcGJvYXJkPiBDbGlwYm9hcmQ6OmNy
ZWF0ZShDbGlwYm9hcmRBY2Nlc3NQb2xpY3kgcG9saWN5LCBEcmFnRGF0YSogZHJhZ0RhdGEsIEZy
YW1lKiBmcmFtZSkKQEAgLTExNywzNiArODgsNyBAQCB2b2lkIENsaXBib2FyZENocm9taXVtOjpj
bGVhckRhdGEoY29uc3QgU3RyaW5nJiB0eXBlKQogICAgIGlmIChwb2xpY3koKSAhPSBDbGlwYm9h
cmRXcml0YWJsZSB8fCAhbV9kYXRhT2JqZWN0KQogICAgICAgICByZXR1cm47CiAKLSAgICBDbGlw
Ym9hcmREYXRhVHlwZSBkYXRhVHlwZSA9IGNsaXBib2FyZFR5cGVGcm9tTUlNRVR5cGUodHlwZSk7
Ci0gICAgc3dpdGNoIChkYXRhVHlwZSkgewotICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVOb25l
OgotICAgICAgICAvLyBJZiBjYWxsZWQgd2l0aCBubyBhcmd1bWVudHMsIGV2ZXJ5dGhpbmcgZXhj
ZXB0IHRoZSBmaWxlIGxpc3QgbXVzdCBiZSBjbGVhcmVkLgotICAgICAgICAvLyAoU2VlIEhUTUw1
IHNwZWMsICJUaGUgRHJhZ0V2ZW50IGFuZCBEYXRhVHJhbnNmZXIgaW50ZXJmYWNlcyIpCi0gICAg
ICAgIG1fZGF0YU9iamVjdC0+Y2xlYXJBbGxFeGNlcHRGaWxlcygpOwotICAgICAgICByZXR1cm47
Ci0KLSAgICBjYXNlIENsaXBib2FyZERhdGFUeXBlVVJMOgotICAgIGNhc2UgQ2xpcGJvYXJkRGF0
YVR5cGVVUklMaXN0OgotICAgICAgICBtX2RhdGFPYmplY3QtPmNsZWFyVVJMKCk7Ci0gICAgICAg
IHJldHVybjsKLQotICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVEb3dubG9hZFVSTDoKLSAgICAg
ICAgbV9kYXRhT2JqZWN0LT5kb3dubG9hZE1ldGFkYXRhID0gIiI7Ci0gICAgICAgIHJldHVybjsK
LSAgICAgICAgCi0gICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZVBsYWluVGV4dDoKLSAgICAgICAg
bV9kYXRhT2JqZWN0LT5wbGFpblRleHQgPSAiIjsKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2Fz
ZSBDbGlwYm9hcmREYXRhVHlwZUhUTUw6Ci0gICAgICAgIG1fZGF0YU9iamVjdC0+dGV4dEh0bWwg
PSAiIjsKLSAgICAgICAgbV9kYXRhT2JqZWN0LT5odG1sQmFzZVVybCA9IEtVUkwoKTsKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZU90aGVyOgotICAgICAgICAv
LyBOb3QgeWV0IGltcGxlbWVudGVkLCBzZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTM0NDEwCi0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgbV9kYXRhT2JqZWN0
LT5jbGVhckRhdGEobm9ybWFsaXplVHlwZSh0eXBlKSk7CiAKICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKIH0KQEAgLTE1Niw3ICs5OCw3IEBAIHZvaWQgQ2xpcGJvYXJkQ2hyb21pdW06OmNsZWFy
QWxsRGF0YSgpCiAgICAgaWYgKHBvbGljeSgpICE9IENsaXBib2FyZFdyaXRhYmxlKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBtX2RhdGFPYmplY3QtPmNsZWFyKCk7CisgICAgbV9kYXRhT2JqZWN0
LT5jbGVhckFsbCgpOwogfQogCiBTdHJpbmcgQ2xpcGJvYXJkQ2hyb21pdW06OmdldERhdGEoY29u
c3QgU3RyaW5nJiB0eXBlLCBib29sJiBzdWNjZXNzKSBjb25zdApAQCAtMTY1LDgwICsxMDcsNyBA
QCBTdHJpbmcgQ2xpcGJvYXJkQ2hyb21pdW06OmdldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBi
b29sJiBzdWNjZXNzKSBjb25zdAogICAgIGlmIChwb2xpY3koKSAhPSBDbGlwYm9hcmRSZWFkYWJs
ZSB8fCAhbV9kYXRhT2JqZWN0KQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKLSAgICBDbGlw
Ym9hcmREYXRhVHlwZSBkYXRhVHlwZSA9IGNsaXBib2FyZFR5cGVGcm9tTUlNRVR5cGUodHlwZSk7
Ci0gICAgc3dpdGNoIChkYXRhVHlwZSkgewotICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVOb25l
OgotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICAvLyBIYWNrIGZvciBVUkxzLiBmaWxl
IFVSTHMgYXJlIHVzZWQgaW50ZXJuYWxseSBmb3IgZHJvcCdzIGRlZmF1bHQgYWN0aW9uLCBidXQg
d2UgZG9uJ3Qgd2FudAotICAgIC8vIHRvIGV4cG9zZSB0aGVtIHRvIHRoZSBwYWdlLCBzbyB3ZSBm
aWx0ZXIgdGhlbSBvdXQgaGVyZS4KLSAgICBjYXNlIENsaXBib2FyZERhdGFUeXBlVVJJTGlzdDoK
LSAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIHRleHQ7Ci0gICAgICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1fZGF0YU9iamVjdC0+dXJpTGlzdC5zaXplKCk7ICsraSkgewotICAg
ICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgdXJpID0gbV9kYXRhT2JqZWN0LT51cmlMaXN0W2ld
OwotICAgICAgICAgICAgICAgIGlmIChwcm90b2NvbElzKHVyaSwgImZpbGUiKSkKLSAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKCF1cmkuaXNFbXB0
eSgpKTsKLSAgICAgICAgICAgICAgICBpZiAoIXRleHQuaXNFbXB0eSgpKQotICAgICAgICAgICAg
ICAgICAgICB0ZXh0LmFwcGVuZCh0ZXh0TUlNRVR5cGVMaW5lU2VwYXJhdG9yKTsKLSAgICAgICAg
ICAgICAgICAvLyBVUklzIGhhdmUgYWxyZWFkeSBiZWVuIGNhbm9uaWNhbGl6ZWQsIHNvIGNvcHkg
ZXZlcnl0aGluZyB2ZXJiYXRpbS4KLSAgICAgICAgICAgICAgICB0ZXh0LmFwcGVuZCh1cmkpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgc3VjY2VzcyA9ICF0ZXh0LmlzRW1wdHkoKTsKLSAg
ICAgICAgICAgIHJldHVybiB0ZXh0OwotICAgICAgICB9Ci0KLSAgICBjYXNlIENsaXBib2FyZERh
dGFUeXBlVVJMOgotICAgICAgICAvLyBJbiBjYXNlIG9mIGEgcHJldmlvdXMgc2V0RGF0YSgndGV4
dC91cmktbGlzdCcpLCBzZXREYXRhKCkgaGFzIGFscmVhZHkKLSAgICAgICAgLy8gcHJlcGFyZWQg
dGhlICd1cmwnIG1lbWJlciwgc28gd2UgY2FuIGp1c3QgcmV0cmlldmUgaXQgaGVyZS4KLSAgICAg
ICAgaWYgKCFtX2RhdGFPYmplY3QtPnVybC5pc0VtcHR5KCkgJiYgIW1fZGF0YU9iamVjdC0+dXJs
LmlzTG9jYWxGaWxlKCkpIHsKLSAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOwotICAgICAgICAg
ICAgcmV0dXJuIG1fZGF0YU9iamVjdC0+dXJsLnN0cmluZygpOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiBTdHJpbmcoKTsKLQotICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVEb3dubG9hZFVS
TDoKLSAgICAgICAgc3VjY2VzcyA9ICFtX2RhdGFPYmplY3QtPmRvd25sb2FkTWV0YWRhdGEuaXNF
bXB0eSgpOwotICAgICAgICByZXR1cm4gbV9kYXRhT2JqZWN0LT5kb3dubG9hZE1ldGFkYXRhOwot
ICAgIAotICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVQbGFpblRleHQ6Ci0gICAgICAgIGlmIChp
c0ZvckNvcHlBbmRQYXN0ZSgpKSB7Ci0gICAgICAgICAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xp
cGJvYXJkQnVmZmVyIGJ1ZmZlciA9IAotICAgICAgICAgICAgICAgIFBhc3RlYm9hcmQ6OmdlbmVy
YWxQYXN0ZWJvYXJkKCktPmlzU2VsZWN0aW9uTW9kZSgpID8KLSAgICAgICAgICAgICAgICBQYXN0
ZWJvYXJkUHJpdmF0ZTo6U2VsZWN0aW9uQnVmZmVyIDogCi0gICAgICAgICAgICAgICAgUGFzdGVi
b2FyZFByaXZhdGU6OlN0YW5kYXJkQnVmZmVyOwotICAgICAgICAgICAgU3RyaW5nIHRleHQgPSBD
aHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkUmVhZFBsYWluVGV4dChidWZmZXIpOwotICAgICAgICAg
ICAgc3VjY2VzcyA9ICF0ZXh0LmlzRW1wdHkoKTsKLSAgICAgICAgICAgIHJldHVybiB0ZXh0Owot
ICAgICAgICB9Ci0gICAgICAgIC8vIE90aGVyd2lzZSByZXR1cm4gd2hhdGV2ZXIgaXMgc3RvcmVk
IGluIHBsYWluVGV4dC4KLSAgICAgICAgc3VjY2VzcyA9ICFtX2RhdGFPYmplY3QtPnBsYWluVGV4
dC5pc0VtcHR5KCk7Ci0gICAgICAgIHJldHVybiBtX2RhdGFPYmplY3QtPnBsYWluVGV4dDsKLQot
ICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVIVE1MOgotICAgICAgICBpZiAoaXNGb3JDb3B5QW5k
UGFzdGUoKSkgewotICAgICAgICAgICAgUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZl
ciBidWZmZXIgPSAKLSAgICAgICAgICAgICAgICBQYXN0ZWJvYXJkOjpnZW5lcmFsUGFzdGVib2Fy
ZCgpLT5pc1NlbGVjdGlvbk1vZGUoKSA/Ci0gICAgICAgICAgICAgICAgUGFzdGVib2FyZFByaXZh
dGU6OlNlbGVjdGlvbkJ1ZmZlciA6IAotICAgICAgICAgICAgICAgIFBhc3RlYm9hcmRQcml2YXRl
OjpTdGFuZGFyZEJ1ZmZlcjsKLSAgICAgICAgICAgIFN0cmluZyBodG1sVGV4dDsKLSAgICAgICAg
ICAgIEtVUkwgc291cmNlVVJMOwotICAgICAgICAgICAgQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2Fy
ZFJlYWRIVE1MKGJ1ZmZlciwgJmh0bWxUZXh0LCAmc291cmNlVVJMKTsKLSAgICAgICAgICAgIHN1
Y2Nlc3MgPSAhaHRtbFRleHQuaXNFbXB0eSgpOwotICAgICAgICAgICAgcmV0dXJuIGh0bWxUZXh0
OwotICAgICAgICB9Ci0gICAgICAgIC8vIE90aGVyd2lzZSByZXR1cm4gd2hhdGV2ZXIgaXMgc3Rv
cmVkIGluIHRleHRIdG1sLgotICAgICAgICBzdWNjZXNzID0gIW1fZGF0YU9iamVjdC0+dGV4dEh0
bWwuaXNFbXB0eSgpOwotICAgICAgICByZXR1cm4gbV9kYXRhT2JqZWN0LT50ZXh0SHRtbDsKLQot
ICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVPdGhlcjoKLSAgICAgICAgLy8gbm90IHlldCBpbXBs
ZW1lbnRlZCwgc2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNDQx
MAotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgfQotCi0gICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOworICAgIHJldHVybiBtX2RhdGFPYmplY3QtPmdl
dERhdGEobm9ybWFsaXplVHlwZSh0eXBlKSwgc3VjY2Vzcyk7CiB9CiAKIGJvb2wgQ2xpcGJvYXJk
Q2hyb21pdW06OnNldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEp
CkBAIC0yNDYsNjkgKzExNSw3IEBAIGJvb2wgQ2xpcGJvYXJkQ2hyb21pdW06OnNldERhdGEoY29u
c3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpCiAgICAgaWYgKHBvbGljeSgpICE9
IENsaXBib2FyZFdyaXRhYmxlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBDbGlwYm9h
cmREYXRhVHlwZSBkYXRhVHlwZSA9IGNsaXBib2FyZFR5cGVGcm9tTUlNRVR5cGUodHlwZSk7Ci0g
ICAgc3dpdGNoIChkYXRhVHlwZSkgewotICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVOb25lOgot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBjYXNlIENsaXBib2FyZERhdGFUeXBlVVJMOgot
ICAgICAgICAvLyBGb3Igc2V0RGF0YSgpLCAiVVJMIiBtdXN0IGJlIHRyZWF0ZWQgYXMgInRleHQv
dXJpLWxpc3QiLgotICAgICAgICAvLyAoU2VlIEhUTUw1IHNwZWMsICJUaGUgRHJhZ0V2ZW50IGFu
ZCBEYXRhVHJhbnNmZXIgaW50ZXJmYWNlcyIpCi0gICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZVVS
SUxpc3Q6Ci0gICAgICAgIG1fZGF0YU9iamVjdC0+dXJsID0gS1VSTCgpOwotICAgICAgICAvLyBM
aW5lIHNlcGFyYXRvciBpcyBcclxuIHBlciBSRkMgMjQ4MyAtIGhvd2V2ZXIsIGZvciBjb21wYXRp
YmlsaXR5IHJlYXNvbnMKLSAgICAgICAgLy8gd2UgYWxzbyBhbGxvdyBqdXN0IFxuIGhlcmUuIAot
ICAgICAgICBkYXRhLnNwbGl0KCdcbicsIG1fZGF0YU9iamVjdC0+dXJpTGlzdCk7Ci0gICAgICAg
IC8vIFN0cmlwIHdoaXRlIHNwYWNlIG9uIGFsbCBsaW5lcywgaW5jbHVkaW5nIHRyYWlsaW5nIFxy
IGZyb20gYWJvdmUgc3BsaXQuCi0gICAgICAgIC8vIElmIHRoaXMgbGVhdmVzIGEgbGluZSBlbXB0
eSwgcmVtb3ZlIGl0IGNvbXBsZXRlbHkuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIEFsc28sIGNv
cHkgdGhlIGZpcnN0IHZhbGlkIFVSTCBpbnRvIHRoZSAndXJsJyBtZW1iZXIgYXMgd2VsbC4KLSAg
ICAgICAgLy8gSW4gY2FzZSBubyBlbnRyeSBpcyBhIHZhbGlkIFVSTCAoaS5lLiwgcmVtYXJrcyBv
bmx5KSwgdGhlbiB3ZSBsZWF2ZSAndXJsJyBlbXB0eS4KLSAgICAgICAgLy8gSS5lLiwgaW4gdGhh
dCBjYXNlIHN1YnNlcXVlbnQgY2FsbHMgdG8gZ2V0RGF0YSgiVVJMIikgd2lsbCBnZXQgYW4gZW1w
dHkgc3RyaW5nLgotICAgICAgICAvLyBUaGlzIGlzIGluIGxpbmUgd2l0aCB0aGUgSFRNTDUgc3Bl
YyAoc2VlICJUaGUgRHJhZ0V2ZW50IGFuZCBEYXRhVHJhbnNmZXIgaW50ZXJmYWNlcyIpLgotICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZGF0YU9iamVjdC0+dXJpTGlzdC5zaXplKCk7
IC8qKi8pIHsKLSAgICAgICAgICAgIFN0cmluZyYgbGluZSA9IG1fZGF0YU9iamVjdC0+dXJpTGlz
dFtpXTsKLSAgICAgICAgICAgIGxpbmUgPSBsaW5lLnN0cmlwV2hpdGVTcGFjZSgpOwotICAgICAg
ICAgICAgaWYgKGxpbmUuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgbV9kYXRhT2JqZWN0
LT51cmlMaXN0LnJlbW92ZShpKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICsraTsKLSAgICAgICAgICAgIC8vIE9ubHkgY29weSB0aGUgZmly
c3QgdmFsaWQgVVJMLgotICAgICAgICAgICAgaWYgKG1fZGF0YU9iamVjdC0+dXJsLmlzVmFsaWQo
KSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIC8vIFNraXAgcmVtYXJr
cy4KLSAgICAgICAgICAgIGlmIChsaW5lWzBdID09ICcjJykKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgIEtVUkwgdXJsID0gS1VSTChQYXJzZWRVUkxTdHJpbmcsIGxpbmUp
OwotICAgICAgICAgICAgaWYgKHVybC5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAgbV9kYXRh
T2JqZWN0LT51cmwgPSB1cmw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1fZGF0YU9iamVjdC0+
dXJpTGlzdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIEFTU0VSVChtX2RhdGFPYmplY3QtPnVy
bC5pc0VtcHR5KCkpOwotICAgICAgICAgICAgcmV0dXJuIGRhdGEuaXNFbXB0eSgpOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZURv
d25sb2FkVVJMOgotICAgICAgICBtX2RhdGFPYmplY3QtPmRvd25sb2FkTWV0YWRhdGEgPSBkYXRh
OwotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVQbGFp
blRleHQ6Ci0gICAgICAgIG1fZGF0YU9iamVjdC0+cGxhaW5UZXh0ID0gZGF0YTsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0KLSAgICBjYXNlIENsaXBib2FyZERhdGFUeXBlSFRNTDoKLSAgICAgICAg
bV9kYXRhT2JqZWN0LT50ZXh0SHRtbCA9IGRhdGE7Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0g
ICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZU90aGVyOgotICAgICAgICAvLyBOb3QgeWV0IGltcGxl
bWVudGVkLCBzZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM0NDEw
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBtX2RhdGFPYmplY3QtPnNldERh
dGEobm9ybWFsaXplVHlwZSh0eXBlKSwgZGF0YSk7CiB9CiAKIC8vIGV4dGVuc2lvbnMgYmV5b25k
IElFJ3MgQVBJCkBAIC0zMjEsMzMgKzEyOCw3IEBAIEhhc2hTZXQ8U3RyaW5nPiBDbGlwYm9hcmRD
aHJvbWl1bTo6dHlwZXMoKSBjb25zdAogICAgIGlmICghbV9kYXRhT2JqZWN0KQogICAgICAgICBy
ZXR1cm4gcmVzdWx0czsKIAotICAgIGlmICghbV9kYXRhT2JqZWN0LT5maWxlbmFtZXMuaXNFbXB0
eSgpKQotICAgICAgICByZXN1bHRzLmFkZCgiRmlsZXMiKTsKLQotICAgIC8vIEhhY2sgZm9yIFVS
THMuIGZpbGUgVVJMcyBhcmUgdXNlZCBpbnRlcm5hbGx5IGZvciBkcm9wJ3MgZGVmYXVsdCBhY3Rp
b24sIGJ1dCB3ZSBkb24ndCB3YW50Ci0gICAgLy8gdG8gZXhwb3NlIHRoZW0gdG8gdGhlIHBhZ2Us
IHNvIHdlIGZpbHRlciB0aGVtIG91dCBoZXJlLgotICAgIGlmIChtX2RhdGFPYmplY3QtPnVybC5p
c1ZhbGlkKCkgJiYgIW1fZGF0YU9iamVjdC0+dXJsLmlzTG9jYWxGaWxlKCkpIHsKLSAgICAgICAg
QVNTRVJUKCFtX2RhdGFPYmplY3QtPnVyaUxpc3QuaXNFbXB0eSgpKTsKLSAgICAgICAgcmVzdWx0
cy5hZGQoIlVSTCIpOwotICAgIH0KLQotICAgIGlmICghbV9kYXRhT2JqZWN0LT51cmlMaXN0Lmlz
RW1wdHkoKSkgewotICAgICAgICAvLyBWZXJpZnkgdGhhdCB0aGUgVVJJIGxpc3QgY29udGFpbnMg
YXQgbGVhc3Qgb25lIG5vbi1maWxlIFVSTC4KLSAgICAgICAgZm9yIChWZWN0b3I8U3RyaW5nPjo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2RhdGFPYmplY3QtPnVyaUxpc3QuYmVnaW4oKTsKLSAgICAg
ICAgICAgICBpdCAhPSBtX2RhdGFPYmplY3QtPnVyaUxpc3QuZW5kKCk7ICsraXQpIHsKLSAgICAg
ICAgICAgIGlmICghcHJvdG9jb2xJcygqaXQsICJmaWxlIikpIHsKLSAgICAgICAgICAgICAgICAv
LyBOb3RlIHRoYXQgZXZlbiBpZiB0aGUgVVJJIGxpc3QgaXMgbm90IGVtcHR5LCBpdCBtYXkgbm90
IGFjdHVhbGx5Ci0gICAgICAgICAgICAgICAgLy8gY29udGFpbiBhIHZhbGlkIFVSTCwgc28gd2Ug
Y2FuJ3QgcmV0dXJuICJVUkwiIGhlcmUuCi0gICAgICAgICAgICAgICAgcmVzdWx0cy5hZGQoInRl
eHQvdXJpLWxpc3QiKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0KLQotICAgIGlmICghbV9kYXRhT2JqZWN0LT5wbGFpblRleHQuaXNFbXB0
eSgpKSB7Ci0gICAgICAgIHJlc3VsdHMuYWRkKCJUZXh0Iik7Ci0gICAgICAgIHJlc3VsdHMuYWRk
KCJ0ZXh0L3BsYWluIik7Ci0gICAgfQorICAgIHJlc3VsdHMgPSBtX2RhdGFPYmplY3QtPnR5cGVz
KCk7CiAKICAgICByZXR1cm4gcmVzdWx0czsKIH0KQEAgLTM1NywxMiArMTM4LDEzIEBAIFBhc3NS
ZWZQdHI8RmlsZUxpc3Q+IENsaXBib2FyZENocm9taXVtOjpmaWxlcygpIGNvbnN0CiAgICAgaWYg
KHBvbGljeSgpICE9IENsaXBib2FyZFJlYWRhYmxlKQogICAgICAgICByZXR1cm4gRmlsZUxpc3Q6
OmNyZWF0ZSgpOwogCi0gICAgaWYgKCFtX2RhdGFPYmplY3QgfHwgbV9kYXRhT2JqZWN0LT5maWxl
bmFtZXMuaXNFbXB0eSgpKQorICAgIGlmICghbV9kYXRhT2JqZWN0KQogICAgICAgICByZXR1cm4g
RmlsZUxpc3Q6OmNyZWF0ZSgpOwogCisgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1l
cyA9IG1fZGF0YU9iamVjdC0+ZmlsZW5hbWVzKCk7CiAgICAgUmVmUHRyPEZpbGVMaXN0PiBmaWxl
TGlzdCA9IEZpbGVMaXN0OjpjcmVhdGUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
ZGF0YU9iamVjdC0+ZmlsZW5hbWVzLnNpemUoKTsgKytpKQotICAgICAgICBmaWxlTGlzdC0+YXBw
ZW5kKEZpbGU6OmNyZWF0ZShtX2RhdGFPYmplY3QtPmZpbGVuYW1lcy5hdChpKSkpOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgZmlsZW5hbWVzLnNpemUoKTsgKytpKQorICAgICAgICBmaWxl
TGlzdC0+YXBwZW5kKEZpbGU6OmNyZWF0ZShmaWxlbmFtZXMuYXQoaSkpKTsKIAogICAgIHJldHVy
biBmaWxlTGlzdC5yZWxlYXNlKCk7CiB9CkBAIC00NjEsNyArMjQzLDcgQEAgc3RhdGljIHZvaWQg
d3JpdGVJbWFnZVRvRGF0YU9iamVjdChDaHJvbWl1bURhdGFPYmplY3QqIGRhdGFPYmplY3QsIEVs
ZW1lbnQqIGVsZW0KICAgICBpZiAoIWltYWdlQnVmZmVyIHx8ICFpbWFnZUJ1ZmZlci0+c2l6ZSgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBkYXRhT2JqZWN0LT5maWxlQ29udGVudCA9IGltYWdl
QnVmZmVyOworICAgIGRhdGFPYmplY3QtPnNldEZpbGVDb250ZW50KGltYWdlQnVmZmVyKTsKIAog
ICAgIC8vIERldGVybWluZSB0aGUgZmlsZW5hbWUgZm9yIHRoZSBmaWxlIGNvbnRlbnRzIG9mIHRo
ZSBpbWFnZS4gIFdlIHRyeSB0bwogICAgIC8vIHVzZSB0aGUgYWx0IHRhZyBpZiBvbmUgZXhpc3Rz
LCBvdGhlcndpc2Ugd2UgZmFsbCBiYWNrIG9uIHRoZSBzdWdnZXN0ZWQKQEAgLTQ2OSwxMyArMjUx
LDEzIEBAIHN0YXRpYyB2b2lkIHdyaXRlSW1hZ2VUb0RhdGFPYmplY3QoQ2hyb21pdW1EYXRhT2Jq
ZWN0KiBkYXRhT2JqZWN0LCBFbGVtZW50KiBlbGVtCiAgICAgLy8gaW4gdGhlIFVSTC4KICAgICBT
dHJpbmcgZXh0ZW5zaW9uID0gTUlNRVR5cGVSZWdpc3RyeTo6Z2V0UHJlZmVycmVkRXh0ZW5zaW9u
Rm9yTUlNRVR5cGUoCiAgICAgICAgIGNhY2hlZEltYWdlLT5yZXNwb25zZSgpLm1pbWVUeXBlKCkp
OwotICAgIGRhdGFPYmplY3QtPmZpbGVFeHRlbnNpb24gPSBleHRlbnNpb24uaXNFbXB0eSgpID8g
IiIgOiAiLiIgKyBleHRlbnNpb247CisgICAgZGF0YU9iamVjdC0+c2V0RmlsZUV4dGVuc2lvbihl
eHRlbnNpb24uaXNFbXB0eSgpID8gIiIgOiAiLiIgKyBleHRlbnNpb24pOwogICAgIFN0cmluZyB0
aXRsZSA9IGVsZW1lbnQtPmdldEF0dHJpYnV0ZShhbHRBdHRyKTsKICAgICBpZiAodGl0bGUuaXNF
bXB0eSgpKQogICAgICAgICB0aXRsZSA9IGNhY2hlZEltYWdlLT5yZXNwb25zZSgpLnN1Z2dlc3Rl
ZEZpbGVuYW1lKCk7CiAKICAgICB0aXRsZSA9IENsaXBib2FyZENocm9taXVtOjp2YWxpZGF0ZUZp
bGVOYW1lKHRpdGxlLCBkYXRhT2JqZWN0KTsKLSAgICBkYXRhT2JqZWN0LT5maWxlQ29udGVudEZp
bGVuYW1lID0gdGl0bGUgKyBkYXRhT2JqZWN0LT5maWxlRXh0ZW5zaW9uOworICAgIGRhdGFPYmpl
Y3QtPnNldEZpbGVDb250ZW50RmlsZW5hbWUodGl0bGUgKyBkYXRhT2JqZWN0LT5maWxlRXh0ZW5z
aW9uKCkpOwogfQogCiB2b2lkIENsaXBib2FyZENocm9taXVtOjpkZWNsYXJlQW5kV3JpdGVEcmFn
SW1hZ2UoRWxlbWVudCogZWxlbWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHRp
dGxlLCBGcmFtZSogZnJhbWUpCkBAIC00ODMsOCArMjY1LDggQEAgdm9pZCBDbGlwYm9hcmRDaHJv
bWl1bTo6ZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEtV
UkwmIHUKICAgICBpZiAoIW1fZGF0YU9iamVjdCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9k
YXRhT2JqZWN0LT51cmwgPSB1cmw7Ci0gICAgbV9kYXRhT2JqZWN0LT51cmxUaXRsZSA9IHRpdGxl
OworICAgIG1fZGF0YU9iamVjdC0+c2V0RGF0YShtaW1lVHlwZVVSTCwgdXJsKTsKKyAgICBtX2Rh
dGFPYmplY3QtPnNldFVybFRpdGxlKHRpdGxlKTsKIAogICAgIC8vIFdyaXRlIHRoZSBieXRlcyBp
biB0aGUgaW1hZ2UgdG8gdGhlIGZpbGUgZm9ybWF0LgogICAgIHdyaXRlSW1hZ2VUb0RhdGFPYmpl
Y3QobV9kYXRhT2JqZWN0LmdldCgpLCBlbGVtZW50LCB1cmwpOwpAQCAtNDk4LDcgKzI4MCw3IEBA
IHZvaWQgQ2xpcGJvYXJkQ2hyb21pdW06OmRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZShFbGVtZW50
KiBlbGVtZW50LCBjb25zdCBLVVJMJiB1CiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFB1dCBp
bWcgdGFnIG9uIHRoZSBjbGlwYm9hcmQgcmVmZXJlbmNpbmcgdGhlIGltYWdlCi0gICAgbV9kYXRh
T2JqZWN0LT50ZXh0SHRtbCA9IGltYWdlVG9NYXJrdXAoZnVsbFVSTCwgZWxlbWVudCk7CisgICAg
bV9kYXRhT2JqZWN0LT5zZXREYXRhKG1pbWVUeXBlVGV4dEhUTUwsIGltYWdlVG9NYXJrdXAoZnVs
bFVSTCwgZWxlbWVudCkpOwogfQogCiB2b2lkIENsaXBib2FyZENocm9taXVtOjp3cml0ZVVSTChj
b25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdGl0bGUsIEZyYW1lKikKQEAgLTUwNiwxNyAr
Mjg4LDE1IEBAIHZvaWQgQ2xpcGJvYXJkQ2hyb21pdW06OndyaXRlVVJMKGNvbnN0IEtVUkwmIHVy
bCwgY29uc3QgU3RyaW5nJiB0aXRsZSwgRnJhbWUqKQogICAgIGlmICghbV9kYXRhT2JqZWN0KQog
ICAgICAgICByZXR1cm47CiAgICAgQVNTRVJUKCF1cmwuaXNFbXB0eSgpKTsKLSAgICBtX2RhdGFP
YmplY3QtPnVybCA9IHVybDsKLSAgICBtX2RhdGFPYmplY3QtPnVybFRpdGxlID0gdGl0bGU7Ci0g
ICAgbV9kYXRhT2JqZWN0LT51cmlMaXN0LmNsZWFyKCk7Ci0gICAgbV9kYXRhT2JqZWN0LT51cmlM
aXN0LmFwcGVuZCh1cmwpOworICAgIG1fZGF0YU9iamVjdC0+c2V0RGF0YShtaW1lVHlwZVVSTCwg
dXJsKTsKKyAgICBtX2RhdGFPYmplY3QtPnNldFVybFRpdGxlKHRpdGxlKTsKIAogICAgIC8vIFRo
ZSBVUkwgY2FuIGFsc28gYmUgdXNlZCBhcyBwbGFpbiB0ZXh0LgotICAgIG1fZGF0YU9iamVjdC0+
cGxhaW5UZXh0ID0gdXJsLnN0cmluZygpOworICAgIG1fZGF0YU9iamVjdC0+c2V0RGF0YShtaW1l
VHlwZVRleHRQbGFpbiwgdXJsLnN0cmluZygpKTsKIAogICAgIC8vIFRoZSBVUkwgY2FuIGFsc28g
YmUgdXNlZCBhcyBhbiBIVE1MIGZyYWdtZW50LgotICAgIG1fZGF0YU9iamVjdC0+dGV4dEh0bWwg
PSB1cmxUb01hcmt1cCh1cmwsIHRpdGxlKTsKLSAgICBtX2RhdGFPYmplY3QtPmh0bWxCYXNlVXJs
ID0gdXJsOworICAgIG1fZGF0YU9iamVjdC0+c2V0RGF0YShtaW1lVHlwZVRleHRIVE1MLCB1cmxU
b01hcmt1cCh1cmwsIHRpdGxlKSk7CisgICAgbV9kYXRhT2JqZWN0LT5zZXRIdG1sQmFzZVVybCh1
cmwpOwogfQogCiB2b2lkIENsaXBib2FyZENocm9taXVtOjp3cml0ZVJhbmdlKFJhbmdlKiBzZWxl
Y3RlZFJhbmdlLCBGcmFtZSogZnJhbWUpCkBAIC01MjUsMTUgKzMwNSwxNSBAQCB2b2lkIENsaXBi
b2FyZENocm9taXVtOjp3cml0ZVJhbmdlKFJhbmdlKiBzZWxlY3RlZFJhbmdlLCBGcmFtZSogZnJh
bWUpCiAgICAgaWYgKCFtX2RhdGFPYmplY3QpCiAgICAgICAgICByZXR1cm47CiAKLSAgICBtX2Rh
dGFPYmplY3QtPnRleHRIdG1sID0gY3JlYXRlTWFya3VwKHNlbGVjdGVkUmFuZ2UsIDAsIEFubm90
YXRlRm9ySW50ZXJjaGFuZ2UsIGZhbHNlLCBBYnNvbHV0ZVVSTHMpOwotICAgIG1fZGF0YU9iamVj
dC0+aHRtbEJhc2VVcmwgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCk7CisgICAgbV9kYXRhT2Jq
ZWN0LT5zZXREYXRhKG1pbWVUeXBlVGV4dEhUTUwsIGNyZWF0ZU1hcmt1cChzZWxlY3RlZFJhbmdl
LCAwLCBBbm5vdGF0ZUZvckludGVyY2hhbmdlLCBmYWxzZSwgQWJzb2x1dGVVUkxzKSk7CisgICAg
bV9kYXRhT2JqZWN0LT5zZXRIdG1sQmFzZVVybChmcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkpOwog
CiAgICAgU3RyaW5nIHN0ciA9IGZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0ZWRUZXh0KCk7CiAjaWYg
T1MoV0lORE9XUykKICAgICByZXBsYWNlTmV3bGluZXNXaXRoV2luZG93c1N0eWxlTmV3bGluZXMo
c3RyKTsKICNlbmRpZgogICAgIHJlcGxhY2VOQlNQV2l0aFNwYWNlKHN0cik7Ci0gICAgbV9kYXRh
T2JqZWN0LT5wbGFpblRleHQgPSBzdHI7CisgICAgbV9kYXRhT2JqZWN0LT5zZXREYXRhKG1pbWVU
eXBlVGV4dFBsYWluLCBzdHIpOwogfQogCiB2b2lkIENsaXBib2FyZENocm9taXVtOjp3cml0ZVBs
YWluVGV4dChjb25zdCBTdHJpbmcmIHRleHQpCkBAIC01NDYsNyArMzI2LDcgQEAgdm9pZCBDbGlw
Ym9hcmRDaHJvbWl1bTo6d3JpdGVQbGFpblRleHQoY29uc3QgU3RyaW5nJiB0ZXh0KQogICAgIHJl
cGxhY2VOZXdsaW5lc1dpdGhXaW5kb3dzU3R5bGVOZXdsaW5lcyhzdHIpOwogI2VuZGlmCiAgICAg
cmVwbGFjZU5CU1BXaXRoU3BhY2Uoc3RyKTsKLSAgICBtX2RhdGFPYmplY3QtPnBsYWluVGV4dCA9
IHN0cjsKKyAgICBtX2RhdGFPYmplY3QtPnNldERhdGEobWltZVR5cGVUZXh0UGxhaW4sIHN0cik7
CiB9CiAKIGJvb2wgQ2xpcGJvYXJkQ2hyb21pdW06Omhhc0RhdGEoKQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bVdpbi5jcHAgYi9XZWJDb3Jl
L3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtV2luLmNwcAppbmRleCBiNGEyYzIx
Li5kOWJiZWI1IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2Fy
ZENocm9taXVtV2luLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2Fy
ZENocm9taXVtV2luLmNwcApAQCAtNDQsMTEgKzQ0LDExIEBAIFN0cmluZyBDbGlwYm9hcmRDaHJv
bWl1bTo6dmFsaWRhdGVGaWxlTmFtZShjb25zdCBTdHJpbmcmIHRpdGxlLCBDaHJvbWl1bURhdGFP
YmplCiB7CiAgICAgLy8gUmVtb3ZlIGFueSBpbnZhbGlkIGZpbGUgc3lzdGVtIGNoYXJhY3RlcnMu
CiAgICAgU3RyaW5nIHJlc3VsdCA9IHRpdGxlLnJlbW92ZUNoYXJhY3RlcnMoJmlzSW52YWxpZEZp
bGVDaGFyYWN0ZXIpOwotICAgIGlmIChyZXN1bHQubGVuZ3RoKCkgKyBkYXRhT2JqZWN0LT5maWxl
RXh0ZW5zaW9uLmxlbmd0aCgpICsgMSA+PSBNQVhfUEFUSCkgewotICAgICAgICBpZiAoZGF0YU9i
amVjdC0+ZmlsZUV4dGVuc2lvbi5sZW5ndGgoKSArIDEgPj0gTUFYX1BBVEgpCi0gICAgICAgICAg
ICBkYXRhT2JqZWN0LT5maWxlRXh0ZW5zaW9uID0gIiI7Ci0gICAgICAgIGlmIChyZXN1bHQubGVu
Z3RoKCkgKyBkYXRhT2JqZWN0LT5maWxlRXh0ZW5zaW9uLmxlbmd0aCgpICsgMSA+PSBNQVhfUEFU
SCkKLSAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5zdWJzdHJpbmcoMCwgTUFYX1BBVEggLSBk
YXRhT2JqZWN0LT5maWxlRXh0ZW5zaW9uLmxlbmd0aCgpIC0gMSk7CisgICAgaWYgKHJlc3VsdC5s
ZW5ndGgoKSArIGRhdGFPYmplY3QtPmZpbGVFeHRlbnNpb24oKS5sZW5ndGgoKSArIDEgPj0gTUFY
X1BBVEgpIHsKKyAgICAgICAgaWYgKGRhdGFPYmplY3QtPmZpbGVFeHRlbnNpb24oKS5sZW5ndGgo
KSArIDEgPj0gTUFYX1BBVEgpCisgICAgICAgICAgICBkYXRhT2JqZWN0LT5zZXRGaWxlRXh0ZW5z
aW9uKCIiKTsKKyAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGgoKSArIGRhdGFPYmplY3QtPmZpbGVF
eHRlbnNpb24oKS5sZW5ndGgoKSArIDEgPj0gTUFYX1BBVEgpCisgICAgICAgICAgICByZXN1bHQg
PSByZXN1bHQuc3Vic3RyaW5nKDAsIE1BWF9QQVRIIC0gZGF0YU9iamVjdC0+ZmlsZUV4dGVuc2lv
bigpLmxlbmd0aCgpIC0gMSk7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZE1pbWVUeXBlcy5jcHAgYi9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZE1pbWVUeXBlcy5jcHAKaW5kZXggYjk1
NzQ0Zi4uYTIxM2RhMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlw
Ym9hcmRNaW1lVHlwZXMuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJv
YXJkTWltZVR5cGVzLmNwcApAQCAtMzMsOCArMzMsMTIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1jb25zdCBjaGFyIHRleHRQbGFpblR5cGVbXSA9ICJ0ZXh0L3BsYWluIjsKLWNvbnN0IGNo
YXIgdGV4dEh0bWxUeXBlW10gPSAidGV4dC9odG1sIjsKLWNvbnN0IGNoYXIgdGV4dFVyaUxpc3RU
eXBlW10gPSAidGV4dC91cmktbGlzdCI7Citjb25zdCBjaGFyIG1pbWVUeXBlVGV4dFtdID0gInRl
eHQvcGxhaW4iOworY29uc3QgY2hhciBtaW1lVHlwZVRleHRQbGFpbltdID0gInRleHQvcGxhaW4i
OworY29uc3QgY2hhciBtaW1lVHlwZVRleHRQbGFpbkV0Y1tdID0gInRleHQvcGxhaW47IjsKK2Nv
bnN0IGNoYXIgbWltZVR5cGVUZXh0SFRNTFtdID0gInRleHQvaHRtbCI7Citjb25zdCBjaGFyIG1p
bWVUeXBlVVJMW10gPSAidXJsIjsKK2NvbnN0IGNoYXIgbWltZVR5cGVUZXh0VVJJTGlzdFtdID0g
InRleHQvdXJpLWxpc3QiOworY29uc3QgY2hhciBtaW1lVHlwZURvd25sb2FkVVJMW10gPSAiZG93
bmxvYWR1cmwiOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZE1pbWVUeXBlcy5oIGIvV2ViQ29yZS9wbGF0Zm9y
bS9jaHJvbWl1bS9DbGlwYm9hcmRNaW1lVHlwZXMuaAppbmRleCBkNzQ2OGYyLi45YmRjY2ZlIDEw
MDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZE1pbWVUeXBlcy5o
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkTWltZVR5cGVzLmgKQEAg
LTMzLDkgKzMzLDEzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotZXh0ZXJuIGNvbnN0IGNo
YXIgdGV4dFBsYWluVHlwZVtdOwotZXh0ZXJuIGNvbnN0IGNoYXIgdGV4dEh0bWxUeXBlW107Ci1l
eHRlcm4gY29uc3QgY2hhciB0ZXh0VXJpTGlzdFR5cGVbXTsKK2V4dGVybiBjb25zdCBjaGFyIG1p
bWVUeXBlVGV4dFtdOworZXh0ZXJuIGNvbnN0IGNoYXIgbWltZVR5cGVUZXh0UGxhaW5bXTsKK2V4
dGVybiBjb25zdCBjaGFyIG1pbWVUeXBlVGV4dFBsYWluRXRjW107CitleHRlcm4gY29uc3QgY2hh
ciBtaW1lVHlwZVRleHRIVE1MW107CitleHRlcm4gY29uc3QgY2hhciBtaW1lVHlwZVVSTFtdOwor
ZXh0ZXJuIGNvbnN0IGNoYXIgbWltZVR5cGVUZXh0VVJJTGlzdFtdOworZXh0ZXJuIGNvbnN0IGNo
YXIgbWltZVR5cGVEb3dubG9hZFVSTFtdOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRHJhZ0RhdGFDaHJvbWl1bS5jcHAg
Yi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RyYWdEYXRhQ2hyb21pdW0uY3BwCmluZGV4IDY3
NGQzNGQuLmZlNTY2M2YgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRHJh
Z0RhdGFDaHJvbWl1bS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EcmFnRGF0
YUNocm9taXVtLmNwcApAQCAtMzIsNiArMzIsNyBAQAogCiAjaW5jbHVkZSAiQ2hyb21pdW1Ccmlk
Z2UuaCIKICNpbmNsdWRlICJDaHJvbWl1bURhdGFPYmplY3QuaCIKKyNpbmNsdWRlICJDbGlwYm9h
cmRNaW1lVHlwZXMuaCIKICNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCiAjaW5jbHVkZSAi
RmlsZVN5c3RlbS5oIgogI2luY2x1ZGUgIktVUkwuaCIKQEAgLTQzLDUwICs0NCw1MCBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBib29sIGNvbnRhaW5zSFRNTChjb25zdCBDaHJvbWl1
bURhdGFPYmplY3QqIGRyb3BEYXRhKQogewotICAgIHJldHVybiBkcm9wRGF0YS0+dGV4dEh0bWwu
bGVuZ3RoKCkgPiAwOworICAgIHJldHVybiBkcm9wRGF0YS0+dHlwZXMoKS5jb250YWlucyhtaW1l
VHlwZVRleHRIVE1MKTsKIH0KIAogYm9vbCBEcmFnRGF0YTo6Y29udGFpbnNVUkwoRmlsZW5hbWVD
b252ZXJzaW9uUG9saWN5IGZpbGVuYW1lUG9saWN5KSBjb25zdAogewotICAgIHJldHVybiAhYXNV
UkwoZmlsZW5hbWVQb2xpY3kpLmlzRW1wdHkoKTsKKyAgICByZXR1cm4gbV9wbGF0Zm9ybURyYWdE
YXRhLT50eXBlcygpLmNvbnRhaW5zKG1pbWVUeXBlVVJMKQorICAgICAgICB8fCAoZmlsZW5hbWVQ
b2xpY3kgPT0gQ29udmVydEZpbGVuYW1lcyAmJiBtX3BsYXRmb3JtRHJhZ0RhdGEtPmNvbnRhaW5z
RmlsZW5hbWVzKCkpOwogfQogCiBTdHJpbmcgRHJhZ0RhdGE6OmFzVVJMKEZpbGVuYW1lQ29udmVy
c2lvblBvbGljeSBmaWxlbmFtZVBvbGljeSwgU3RyaW5nKiB0aXRsZSkgY29uc3QKIHsKICAgICBT
dHJpbmcgdXJsOwotICAgIGlmIChtX3BsYXRmb3JtRHJhZ0RhdGEtPmhhc1ZhbGlkVVJMKCkpCi0g
ICAgICAgIHVybCA9IG1fcGxhdGZvcm1EcmFnRGF0YS0+Z2V0VVJMKCkuc3RyaW5nKCk7Ci0gICAg
ZWxzZSBpZiAoZmlsZW5hbWVQb2xpY3kgPT0gQ29udmVydEZpbGVuYW1lcyAmJiAhbV9wbGF0Zm9y
bURyYWdEYXRhLT5maWxlbmFtZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFN0cmluZyBmaWxlTmFt
ZSA9IG1fcGxhdGZvcm1EcmFnRGF0YS0+ZmlsZW5hbWVzWzBdOwotICAgICAgICBmaWxlTmFtZSA9
IENocm9taXVtQnJpZGdlOjpnZXRBYnNvbHV0ZVBhdGgoZmlsZU5hbWUpOwotICAgICAgICB1cmwg
PSBDaHJvbWl1bUJyaWRnZTo6ZmlsZVBhdGhUb1VSTChmaWxlTmFtZSkuc3RyaW5nKCk7CisgICAg
aWYgKGNvbnRhaW5zVVJMKERvTm90Q29udmVydEZpbGVuYW1lcykpIHsKKyAgICAgICAgYm9vbCBp
Z25vcmVkU3VjY2VzczsKKyAgICAgICAgdXJsID0gbV9wbGF0Zm9ybURyYWdEYXRhLT5nZXREYXRh
KG1pbWVUeXBlVVJMLCBpZ25vcmVkU3VjY2Vzcyk7CisgICAgICAgIGlmICh0aXRsZSkKKyAgICAg
ICAgICAgICp0aXRsZSA9IG1fcGxhdGZvcm1EcmFnRGF0YS0+dXJsVGl0bGUoKTsKKyAgICB9IGVs
c2UgaWYgKGZpbGVuYW1lUG9saWN5ID09IENvbnZlcnRGaWxlbmFtZXMgJiYgY29udGFpbnNGaWxl
cygpKSB7CisgICAgICAgIHVybCA9IENocm9taXVtQnJpZGdlOjpmaWxlUGF0aFRvVVJMKENocm9t
aXVtQnJpZGdlOjpnZXRBYnNvbHV0ZVBhdGgobV9wbGF0Zm9ybURyYWdEYXRhLT5maWxlbmFtZXMo
KVswXSkpOwogICAgIH0KLSAKLSAgICAvLyB8dGl0bGV8IGNhbiBiZSBOVUxMCi0gICAgaWYgKHRp
dGxlKQotICAgICAgICAqdGl0bGUgPSBtX3BsYXRmb3JtRHJhZ0RhdGEtPnVybFRpdGxlOwogICAg
IHJldHVybiB1cmw7CiB9CiAKIGJvb2wgRHJhZ0RhdGE6OmNvbnRhaW5zRmlsZXMoKSBjb25zdAog
ewotICAgIHJldHVybiAhbV9wbGF0Zm9ybURyYWdEYXRhLT5maWxlbmFtZXMuaXNFbXB0eSgpOwor
ICAgIHJldHVybiBtX3BsYXRmb3JtRHJhZ0RhdGEtPmNvbnRhaW5zRmlsZW5hbWVzKCk7CiB9CiAK
IHZvaWQgRHJhZ0RhdGE6OmFzRmlsZW5hbWVzKFZlY3RvcjxTdHJpbmc+JiByZXN1bHQpIGNvbnN0
CiB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3BsYXRmb3JtRHJhZ0RhdGEtPmZpbGVu
YW1lcy5zaXplKCk7ICsraSkKLSAgICAgICAgcmVzdWx0LmFwcGVuZChtX3BsYXRmb3JtRHJhZ0Rh
dGEtPmZpbGVuYW1lc1tpXSk7CisgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcyA9
IG1fcGxhdGZvcm1EcmFnRGF0YS0+ZmlsZW5hbWVzKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBmaWxlbmFtZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoZmlsZW5h
bWVzW2ldKTsKIH0KIAogYm9vbCBEcmFnRGF0YTo6Y29udGFpbnNQbGFpblRleHQoKSBjb25zdAog
ewotICAgIHJldHVybiAhbV9wbGF0Zm9ybURyYWdEYXRhLT5wbGFpblRleHQuaXNFbXB0eSgpOwor
ICAgIHJldHVybiBtX3BsYXRmb3JtRHJhZ0RhdGEtPnR5cGVzKCkuY29udGFpbnMobWltZVR5cGVU
ZXh0UGxhaW4pOwogfQogCiBTdHJpbmcgRHJhZ0RhdGE6OmFzUGxhaW5UZXh0KCkgY29uc3QKIHsK
LSAgICByZXR1cm4gbV9wbGF0Zm9ybURyYWdEYXRhLT5wbGFpblRleHQ7CisgICAgYm9vbCBpZ25v
cmVkU3VjY2VzczsKKyAgICByZXR1cm4gbV9wbGF0Zm9ybURyYWdEYXRhLT5nZXREYXRhKG1pbWVU
eXBlVGV4dFBsYWluLCBpZ25vcmVkU3VjY2Vzcyk7CiB9CiAKIGJvb2wgRHJhZ0RhdGE6OmNvbnRh
aW5zQ29sb3IoKSBjb25zdApAQCAtMTAxLDggKzEwMiw4IEBAIGJvb2wgRHJhZ0RhdGE6OmNhblNt
YXJ0UmVwbGFjZSgpIGNvbnN0CiAgICAgLy8gVGhpcyBpcyBhbGxvd2VkIHdoZW5ldmVyIHRoZSBk
cmFnIGRhdGEgY29udGFpbnMgYSAncmFuZ2UnIChpZS4sCiAgICAgLy8gQ2xpcGJvYXJkV2luOjp3
cml0ZVJhbmdlIGlzIGNhbGxlZCkuICBGb3IgZXhhbXBsZSwgZHJhZ2dpbmcgYSBsaW5rCiAgICAg
Ly8gc2hvdWxkIG5vdCByZXN1bHQgaW4gYSBzcGFjZSBiZWluZyBhZGRlZC4KLSAgICByZXR1cm4g
IW1fcGxhdGZvcm1EcmFnRGF0YS0+cGxhaW5UZXh0LmlzRW1wdHkoKQotICAgICAgICAmJiAhbV9w
bGF0Zm9ybURyYWdEYXRhLT5oYXNWYWxpZFVSTCgpOworICAgIHJldHVybiBtX3BsYXRmb3JtRHJh
Z0RhdGEtPnR5cGVzKCkuY29udGFpbnMobWltZVR5cGVUZXh0UGxhaW4pCisgICAgICAgICYmICFt
X3BsYXRmb3JtRHJhZ0RhdGEtPnR5cGVzKCkuY29udGFpbnMobWltZVR5cGVVUkwpOwogfQogCiBi
b29sIERyYWdEYXRhOjpjb250YWluc0NvbXBhdGlibGVDb250ZW50KCkgY29uc3QKQEAgLTEzNCw5
ICsxMzUsMTAgQEAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBEcmFnRGF0YTo6YXNGcmFn
bWVudChEb2N1bWVudCogZG9jKSBjb25zdAogICAgICAgICAvLyAgICByZXR1cm4gZnJhZ21lbnQ7
CiAgICAgfQogCi0gICAgaWYgKCFtX3BsYXRmb3JtRHJhZ0RhdGEtPnRleHRIdG1sLmlzRW1wdHko
KSkgeworICAgIGlmIChtX3BsYXRmb3JtRHJhZ0RhdGEtPnR5cGVzKCkuY29udGFpbnMobWltZVR5
cGVUZXh0SFRNTCkpIHsKKyAgICAgICAgYm9vbCBpZ25vcmVkU3VjY2VzczsKICAgICAgICAgUmVm
UHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3Vw
KGRvYywKLSAgICAgICAgICAgIG1fcGxhdGZvcm1EcmFnRGF0YS0+dGV4dEh0bWwsIG1fcGxhdGZv
cm1EcmFnRGF0YS0+aHRtbEJhc2VVcmwsIEZyYWdtZW50U2NyaXB0aW5nTm90QWxsb3dlZCk7Cisg
ICAgICAgICAgICBtX3BsYXRmb3JtRHJhZ0RhdGEtPmdldERhdGEobWltZVR5cGVUZXh0SFRNTCwg
aWdub3JlZFN1Y2Nlc3MpLCBtX3BsYXRmb3JtRHJhZ0RhdGEtPmh0bWxCYXNlVXJsKCksIEZyYWdt
ZW50U2NyaXB0aW5nTm90QWxsb3dlZCk7CiAgICAgICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNl
KCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1JlYWRh
YmxlRGF0YU9iamVjdC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1JlYWRhYmxlRGF0
YU9iamVjdC5jcHAKaW5kZXggMWEzMzNiYi4uMDg4NjczZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9w
bGF0Zm9ybS9jaHJvbWl1bS9SZWFkYWJsZURhdGFPYmplY3QuY3BwCisrKyBiL1dlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vUmVhZGFibGVEYXRhT2JqZWN0LmNwcApAQCAtODEsNyArODEsNyBAQCBT
dHJpbmcgUmVhZGFibGVEYXRhT2JqZWN0OjpnZXRVUkwoU3RyaW5nKiB0aXRsZSkgY29uc3QKICAg
ICBpZiAoIXRpdGxlKQogICAgICAgICB0aXRsZSA9ICZpZ25vcmVkVGl0bGU7CiAgICAgQ2hyb21p
dW1CcmlkZ2U6OmNsaXBib2FyZFJlYWREYXRhKAotICAgICAgICBjbGlwYm9hcmRCdWZmZXIobV9p
c0ZvckRyYWdnaW5nKSwgdGV4dFVyaUxpc3RUeXBlLCB1cmwsICp0aXRsZSk7CisgICAgICAgIGNs
aXBib2FyZEJ1ZmZlcihtX2lzRm9yRHJhZ2dpbmcpLCBtaW1lVHlwZVRleHRVUklMaXN0LCB1cmws
ICp0aXRsZSk7CiAgICAgcmV0dXJuIHVybDsKIH0KIApAQCAtOTIsNyArOTIsNyBAQCBTdHJpbmcg
UmVhZGFibGVEYXRhT2JqZWN0OjpnZXRIVE1MKFN0cmluZyogYmFzZVVSTCkgY29uc3QKICAgICBp
ZiAoIWJhc2VVUkwpCiAgICAgICAgIGJhc2VVUkwgPSAmaWdub3JlZEJhc2VVUkw7CiAgICAgQ2hy
b21pdW1CcmlkZ2U6OmNsaXBib2FyZFJlYWREYXRhKAotICAgICAgICBjbGlwYm9hcmRCdWZmZXIo
bV9pc0ZvckRyYWdnaW5nKSwgdGV4dEh0bWxUeXBlLCBodG1sLCAqYmFzZVVSTCk7CisgICAgICAg
IGNsaXBib2FyZEJ1ZmZlcihtX2lzRm9yRHJhZ2dpbmcpLCBtaW1lVHlwZVRleHRIVE1MLCBodG1s
LCAqYmFzZVVSTCk7CiAgICAgcmV0dXJuIGh0bWw7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vY2hyb21pdW0vV3JpdGFibGVEYXRhT2JqZWN0LmNwcCBiL1dlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vV3JpdGFibGVEYXRhT2JqZWN0LmNwcAppbmRleCA2ZTdjMjgzLi5hZWU3YmZj
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1dyaXRhYmxlRGF0YU9iamVj
dC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9Xcml0YWJsZURhdGFPYmplY3Qu
Y3BwCkBAIC00OSw5ICs0OSw5IEBAIFdyaXRhYmxlRGF0YU9iamVjdDo6V3JpdGFibGVEYXRhT2Jq
ZWN0KGJvb2wgaXNGb3JEcmFnZ2luZykKIHZvaWQgV3JpdGFibGVEYXRhT2JqZWN0OjpjbGVhckRh
dGEoY29uc3QgU3RyaW5nJiB0eXBlKQogewogICAgIG1fZGF0YU1hcC5yZW1vdmUodHlwZSk7Ci0g
ICAgaWYgKHR5cGUgPT0gdGV4dFVyaUxpc3RUeXBlKQorICAgIGlmICh0eXBlID09IG1pbWVUeXBl
VGV4dFVSSUxpc3QpCiAgICAgICAgIG1fdXJsVGl0bGUgPSAiIjsKLSAgICBlbHNlIGlmICh0eXBl
ID09IHRleHRIdG1sVHlwZSkKKyAgICBlbHNlIGlmICh0eXBlID09IG1pbWVUeXBlVGV4dEhUTUwp
CiAgICAgICAgIG1faHRtbEJhc2VVUkwgPSBLVVJMKCk7CiB9CiAKQEAgLTgxLDIyICs4MSwyMiBA
QCBib29sIFdyaXRhYmxlRGF0YU9iamVjdDo6c2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGNv
bnN0IFN0cmluZyYgZGF0YSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIG1fZGF0
YU1hcC5zZXQodHlwZSwgZGF0YSk7Ci0gICAgaWYgKHR5cGUgPT0gdGV4dFVyaUxpc3RUeXBlKQor
ICAgIGlmICh0eXBlID09IG1pbWVUeXBlVGV4dFVSSUxpc3QpCiAgICAgICAgIG1fdXJsVGl0bGUg
PSAiIjsKLSAgICBlbHNlIGlmICh0eXBlID09IHRleHRIdG1sVHlwZSkKKyAgICBlbHNlIGlmICh0
eXBlID09IG1pbWVUeXBlVGV4dEhUTUwpCiAgICAgICAgIG1faHRtbEJhc2VVUkwgPSBLVVJMKCk7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgV3JpdGFibGVEYXRhT2JqZWN0OjpzZXRVUkwo
Y29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgdGl0bGUpCiB7Ci0gICAgc2V0RGF0YSh0
ZXh0VXJpTGlzdFR5cGUsIHVybCk7CisgICAgc2V0RGF0YShtaW1lVHlwZVRleHRVUklMaXN0LCB1
cmwpOwogICAgIG1fdXJsVGl0bGUgPSB0aXRsZTsKIH0KIAogdm9pZCBXcml0YWJsZURhdGFPYmpl
Y3Q6OnNldEhUTUwoY29uc3QgU3RyaW5nJiBodG1sLCBjb25zdCBLVVJMJiBiYXNlVVJMKQogewot
ICAgIHNldERhdGEodGV4dEh0bWxUeXBlLCBodG1sKTsKKyAgICBzZXREYXRhKG1pbWVUeXBlVGV4
dEhUTUwsIGh0bWwpOwogICAgIG1faHRtbEJhc2VVUkwgPSBiYXNlVVJMOwogfQogCmRpZmYgLS1n
aXQgYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZwppbmRleCA0MWFiMDhkLi4wZTYxZTc2IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCisrKyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MSBAQAor
MjAxMC0wOS0yOCAgRGFuaWVsIENoZW5nICA8ZGNoZW5nQGNocm9taXVtLm9yZz4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbY2hyb21pdW1dIFJlZmFj
dG9yIENocm9taXVtRGF0YU9iamVjdCB0byB1c2UgZ2V0dGVycy9zZXR0ZXJzLgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDY1NTkKKworICAgICAgICBU
aGlzIGlzIGFuIGludGVybWVkaWF0ZSBzdGVwIHRvIGNvbnZlcnRpbmcgQ2hyb21pdW1EYXRhT2Jq
ZWN0IHRvIHVzZQorICAgICAgICBjYWxsYmFja3MgdG8gdGhlIGJyb3dzZXIgdG8gcmV0cmlldmUg
ZGF0YS4gU3BlY2lhbCBoYW5kbGluZyBmb3IgVVJMIGFuZAorICAgICAgICB0ZXh0L3VyaS1saXN0
IGhhcyBhbHNvIGJlZW4gcmVtb3ZlZDsgdGhleSBub3cgdHJlYXQgdGhlaXIgZGF0YSBhcmd1bWVu
dAorICAgICAgICBhcyBqdXN0IGFuIG9wYXF1ZSBibG9iIG9mIHRleHQuCisKKyAgICAgICAgKiBw
dWJsaWMvV2ViRHJhZ0RhdGEuaDoKKyAgICAgICAgKiBzcmMvV2ViRHJhZ0RhdGEuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJEcmFnRGF0YTo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYkRyYWdEYXRhOjp1cmwpOgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFnRGF0YTo6c2V0VVJM
KToKKyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0RhdGE6OnVybFRpdGxlKToKKyAgICAgICAgKFdl
YktpdDo6V2ViRHJhZ0RhdGE6OnNldFVSTFRpdGxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViRHJh
Z0RhdGE6OmRvd25sb2FkTWV0YWRhdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFnRGF0YTo6
c2V0RG93bmxvYWRNZXRhZGF0YSk6CisgICAgICAgIChXZWJLaXQ6OldlYkRyYWdEYXRhOjpmaWxl
RXh0ZW5zaW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0RhdGE6OnNldEZpbGVFeHRlbnNp
b24pOgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFnRGF0YTo6aGFzRmlsZU5hbWVzKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViRHJhZ0RhdGE6OmZpbGVOYW1lcyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkRyYWdEYXRhOjpzZXRGaWxlTmFtZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFnRGF0YTo6
YXBwZW5kVG9GaWxlTmFtZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFnRGF0YTo6cGxhaW5U
ZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0RhdGE6OnNldFBsYWluVGV4dCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkRyYWdEYXRhOjpodG1sVGV4dCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkRyYWdEYXRhOjpzZXRIVE1MVGV4dCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRyYWdEYXRhOjpo
dG1sQmFzZVVSTCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRyYWdEYXRhOjpzZXRIVE1MQmFzZVVS
TCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRyYWdEYXRhOjpmaWxlQ29udGVudEZpbGVOYW1lKToK
KyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0RhdGE6OnNldEZpbGVDb250ZW50RmlsZU5hbWUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJEcmFnRGF0YTo6ZmlsZUNvbnRlbnQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJEcmFnRGF0YTo6c2V0RmlsZUNvbnRlbnQpOgorCiAyMDEwLTA5LTIyICBLZW5uZXRo
IFJ1c3NlbGwgIDxrYnJAZ29vZ2xlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBDaHJvbWl1
bSBidWlsZCBmaXguIEZpeCBidWlsZCB3aGVuIGFjY2VsZXJhdGVkCmRpZmYgLS1naXQgYS9XZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYkRyYWdEYXRhLmggYi9XZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYkRyYWdEYXRhLmgKaW5kZXggMjk3OTUxOS4uNjc0OGZlMCAxMDA2NDQKLS0tIGEvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJEcmFnRGF0YS5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViRHJhZ0RhdGEuaApAQCAtNjYsNyArNjYsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGlz
TnVsbCgpIGNvbnN0IHsgcmV0dXJuICFtX3ByaXZhdGU7IH0KIAotICAgIFdFQktJVF9BUEkgV2Vi
VVJMIHVybCgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgV2ViU3RyaW5nIHVybCgpIGNvbnN0Owog
ICAgIFdFQktJVF9BUEkgdm9pZCBzZXRVUkwoY29uc3QgV2ViVVJMJik7CiAKICAgICBXRUJLSVRf
QVBJIFdlYlN0cmluZyB1cmxUaXRsZSgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJEcmFnRGF0YS5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRyYWdEYXRh
LmNwcAppbmRleCA2NDNjMzVkLi5hODY2ZjA0IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkRyYWdEYXRhLmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRyYWdEYXRh
LmNwcApAQCAtNDgsNyArNDgsNyBAQCBjbGFzcyBXZWJEcmFnRGF0YVByaXZhdGUgOiBwdWJsaWMg
Q2hyb21pdW1EYXRhT2JqZWN0IHsKIAogdm9pZCBXZWJEcmFnRGF0YTo6aW5pdGlhbGl6ZSgpCiB7
Ci0gICAgYXNzaWduKHN0YXRpY19jYXN0PFdlYkRyYWdEYXRhUHJpdmF0ZSo+KENocm9taXVtRGF0
YU9iamVjdDo6Y3JlYXRlKCkucmVsZWFzZVJlZigpKSk7CisgICAgYXNzaWduKHN0YXRpY19jYXN0
PFdlYkRyYWdEYXRhUHJpdmF0ZSo+KENocm9taXVtRGF0YU9iamVjdDo6Y3JlYXRlKENsaXBib2Fy
ZDo6RHJhZ0FuZERyb3ApLnJlbGVhc2VSZWYoKSkpOwogfQogCiB2b2lkIFdlYkRyYWdEYXRhOjpy
ZXNldCgpCkBAIC02NCwxMzcgKzY0LDE0NCBAQCB2b2lkIFdlYkRyYWdEYXRhOjphc3NpZ24oY29u
c3QgV2ViRHJhZ0RhdGEmIG90aGVyKQogICAgIGFzc2lnbihwKTsKIH0KIAotV2ViVVJMIFdlYkRy
YWdEYXRhOjp1cmwoKSBjb25zdAorV2ViU3RyaW5nIFdlYkRyYWdEYXRhOjp1cmwoKSBjb25zdAog
ewogICAgIEFTU0VSVCghaXNOdWxsKCkpOwotICAgIHJldHVybiBtX3ByaXZhdGUtPmdldFVSTCgp
OworICAgIGJvb2wgaWdub3JlZFN1Y2Nlc3M7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Z2V0RGF0
YSgidGV4dC91cmktbGlzdCIsIGlnbm9yZWRTdWNjZXNzKTsKIH0KIAogdm9pZCBXZWJEcmFnRGF0
YTo6c2V0VVJMKGNvbnN0IFdlYlVSTCYgdXJsKQogewogICAgIGVuc3VyZU11dGFibGUoKTsKLSAg
ICBtX3ByaXZhdGUtPnNldFVSTCh1cmwpOworICAgIG1fcHJpdmF0ZS0+c2V0RGF0YSgidGV4dC91
cmktbGlzdCIsIEtVUkwodXJsKS5zdHJpbmcoKSk7CiB9CiAKIFdlYlN0cmluZyBXZWJEcmFnRGF0
YTo6dXJsVGl0bGUoKSBjb25zdAogewogICAgIEFTU0VSVCghaXNOdWxsKCkpOwotICAgIHJldHVy
biBtX3ByaXZhdGUtPnVybFRpdGxlOworICAgIHJldHVybiBtX3ByaXZhdGUtPnVybFRpdGxlKCk7
CiB9CiAKIHZvaWQgV2ViRHJhZ0RhdGE6OnNldFVSTFRpdGxlKGNvbnN0IFdlYlN0cmluZyYgdXJs
VGl0bGUpCiB7CiAgICAgZW5zdXJlTXV0YWJsZSgpOwotICAgIG1fcHJpdmF0ZS0+dXJsVGl0bGUg
PSB1cmxUaXRsZTsKKyAgICBtX3ByaXZhdGUtPnNldFVybFRpdGxlKHVybFRpdGxlKTsKIH0KIAog
V2ViU3RyaW5nIFdlYkRyYWdEYXRhOjpkb3dubG9hZE1ldGFkYXRhKCkgY29uc3QKIHsKICAgICBB
U1NFUlQoIWlzTnVsbCgpKTsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5kb3dubG9hZE1ldGFkYXRh
OworICAgIGJvb2wgaWdub3JlZFN1Y2Nlc3M7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Z2V0RGF0
YSgiZG93bmxvYWR1cmwiLCBpZ25vcmVkU3VjY2Vzcyk7CiB9CiAKIHZvaWQgV2ViRHJhZ0RhdGE6
OnNldERvd25sb2FkTWV0YWRhdGEoY29uc3QgV2ViU3RyaW5nJiBkb3dubG9hZE1ldGFkYXRhKQog
ewogICAgIGVuc3VyZU11dGFibGUoKTsKLSAgICBtX3ByaXZhdGUtPmRvd25sb2FkTWV0YWRhdGEg
PSBkb3dubG9hZE1ldGFkYXRhOworICAgIG1fcHJpdmF0ZS0+c2V0RGF0YSgiZG93bmxvYWR1cmwi
LCBkb3dubG9hZE1ldGFkYXRhKTsKIH0KIAogV2ViU3RyaW5nIFdlYkRyYWdEYXRhOjpmaWxlRXh0
ZW5zaW9uKCkgY29uc3QKIHsKICAgICBBU1NFUlQoIWlzTnVsbCgpKTsKLSAgICByZXR1cm4gbV9w
cml2YXRlLT5maWxlRXh0ZW5zaW9uOworICAgIHJldHVybiBtX3ByaXZhdGUtPmZpbGVFeHRlbnNp
b24oKTsKIH0KIAogdm9pZCBXZWJEcmFnRGF0YTo6c2V0RmlsZUV4dGVuc2lvbihjb25zdCBXZWJT
dHJpbmcmIGZpbGVFeHRlbnNpb24pCiB7CiAgICAgZW5zdXJlTXV0YWJsZSgpOwotICAgIG1fcHJp
dmF0ZS0+ZmlsZUV4dGVuc2lvbiA9IGZpbGVFeHRlbnNpb247CisgICAgbV9wcml2YXRlLT5zZXRG
aWxlRXh0ZW5zaW9uKGZpbGVFeHRlbnNpb24pOwogfQogCiBib29sIFdlYkRyYWdEYXRhOjpoYXNG
aWxlTmFtZXMoKSBjb25zdAogewogICAgIEFTU0VSVCghaXNOdWxsKCkpOwotICAgIHJldHVybiAh
bV9wcml2YXRlLT5maWxlbmFtZXMuaXNFbXB0eSgpOworICAgIHJldHVybiBtX3ByaXZhdGUtPmNv
bnRhaW5zRmlsZW5hbWVzKCk7CiB9CiAKIHZvaWQgV2ViRHJhZ0RhdGE6OmZpbGVOYW1lcyhXZWJW
ZWN0b3I8V2ViU3RyaW5nPiYgZmlsZU5hbWVzKSBjb25zdAogewogICAgIEFTU0VSVCghaXNOdWxs
KCkpOwotICAgIGZpbGVOYW1lcyA9IG1fcHJpdmF0ZS0+ZmlsZW5hbWVzOworICAgIGZpbGVOYW1l
cyA9IG1fcHJpdmF0ZS0+ZmlsZW5hbWVzKCk7CiB9CiAKIHZvaWQgV2ViRHJhZ0RhdGE6OnNldEZp
bGVOYW1lcyhjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYgZmlsZU5hbWVzKQogewogICAgIGVu
c3VyZU11dGFibGUoKTsKLSAgICBtX3ByaXZhdGUtPmZpbGVuYW1lcy5jbGVhcigpOwotICAgIG1f
cHJpdmF0ZS0+ZmlsZW5hbWVzLmFwcGVuZChmaWxlTmFtZXMuZGF0YSgpLCBmaWxlTmFtZXMuc2l6
ZSgpKTsKKyAgICBWZWN0b3I8U3RyaW5nPiBmaWxlTmFtZXNDb3B5OworICAgIGZpbGVOYW1lc0Nv
cHkuYXBwZW5kKGZpbGVOYW1lcy5kYXRhKCksIGZpbGVOYW1lcy5zaXplKCkpOworICAgIG1fcHJp
dmF0ZS0+c2V0RmlsZW5hbWVzKGZpbGVOYW1lc0NvcHkpOwogfQogCiB2b2lkIFdlYkRyYWdEYXRh
OjphcHBlbmRUb0ZpbGVOYW1lcyhjb25zdCBXZWJTdHJpbmcmIGZpbGVOYW1lKQogewogICAgIGVu
c3VyZU11dGFibGUoKTsKLSAgICBtX3ByaXZhdGUtPmZpbGVuYW1lcy5hcHBlbmQoZmlsZU5hbWUp
OworICAgIFZlY3RvcjxTdHJpbmc+IGZpbGVOYW1lcyA9IG1fcHJpdmF0ZS0+ZmlsZW5hbWVzKCk7
CisgICAgZmlsZU5hbWVzLmFwcGVuZChmaWxlTmFtZSk7CisgICAgbV9wcml2YXRlLT5zZXRGaWxl
bmFtZXMoZmlsZU5hbWVzKTsKIH0KIAogV2ViU3RyaW5nIFdlYkRyYWdEYXRhOjpwbGFpblRleHQo
KSBjb25zdAogewogICAgIEFTU0VSVCghaXNOdWxsKCkpOwotICAgIHJldHVybiBtX3ByaXZhdGUt
PnBsYWluVGV4dDsKKyAgICBib29sIGlnbm9yZWRTdWNjZXNzOworICAgIHJldHVybiBtX3ByaXZh
dGUtPmdldERhdGEoInRleHQvcGxhaW4iLCBpZ25vcmVkU3VjY2Vzcyk7CiB9CiAKIHZvaWQgV2Vi
RHJhZ0RhdGE6OnNldFBsYWluVGV4dChjb25zdCBXZWJTdHJpbmcmIHBsYWluVGV4dCkKIHsKICAg
ICBlbnN1cmVNdXRhYmxlKCk7Ci0gICAgbV9wcml2YXRlLT5wbGFpblRleHQgPSBwbGFpblRleHQ7
CisgICAgbV9wcml2YXRlLT5zZXREYXRhKCJ0ZXh0L3BsYWluIiwgcGxhaW5UZXh0KTsKIH0KIAog
V2ViU3RyaW5nIFdlYkRyYWdEYXRhOjpodG1sVGV4dCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFp
c051bGwoKSk7Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+dGV4dEh0bWw7CisgICAgYm9vbCBpZ25v
cmVkU3VjY2VzczsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5nZXREYXRhKCJ0ZXh0L2h0bWwiLCBp
Z25vcmVkU3VjY2Vzcyk7CiB9CiAKIHZvaWQgV2ViRHJhZ0RhdGE6OnNldEhUTUxUZXh0KGNvbnN0
IFdlYlN0cmluZyYgaHRtbFRleHQpCiB7CiAgICAgZW5zdXJlTXV0YWJsZSgpOwotICAgIG1fcHJp
dmF0ZS0+dGV4dEh0bWwgPSBodG1sVGV4dDsKKyAgICBtX3ByaXZhdGUtPnNldERhdGEoInRleHQv
aHRtbCIsIGh0bWxUZXh0KTsKIH0KIAogV2ViVVJMIFdlYkRyYWdEYXRhOjpodG1sQmFzZVVSTCgp
IGNvbnN0CiB7CiAgICAgQVNTRVJUKCFpc051bGwoKSk7Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+
aHRtbEJhc2VVcmw7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+aHRtbEJhc2VVcmwoKTsKIH0KIAog
dm9pZCBXZWJEcmFnRGF0YTo6c2V0SFRNTEJhc2VVUkwoY29uc3QgV2ViVVJMJiBodG1sQmFzZVVS
TCkKIHsKICAgICBlbnN1cmVNdXRhYmxlKCk7Ci0gICAgbV9wcml2YXRlLT5odG1sQmFzZVVybCA9
IGh0bWxCYXNlVVJMOworICAgIG1fcHJpdmF0ZS0+c2V0SHRtbEJhc2VVcmwoaHRtbEJhc2VVUkwp
OwogfQogCiBXZWJTdHJpbmcgV2ViRHJhZ0RhdGE6OmZpbGVDb250ZW50RmlsZU5hbWUoKSBjb25z
dAogewogICAgIEFTU0VSVCghaXNOdWxsKCkpOwotICAgIHJldHVybiBtX3ByaXZhdGUtPmZpbGVD
b250ZW50RmlsZW5hbWU7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+ZmlsZUNvbnRlbnRGaWxlbmFt
ZSgpOwogfQogCiB2b2lkIFdlYkRyYWdEYXRhOjpzZXRGaWxlQ29udGVudEZpbGVOYW1lKGNvbnN0
IFdlYlN0cmluZyYgZmlsZU5hbWUpCiB7CiAgICAgZW5zdXJlTXV0YWJsZSgpOwotICAgIG1fcHJp
dmF0ZS0+ZmlsZUNvbnRlbnRGaWxlbmFtZSA9IGZpbGVOYW1lOworICAgIG1fcHJpdmF0ZS0+c2V0
RmlsZUNvbnRlbnRGaWxlbmFtZShmaWxlTmFtZSk7CiB9CiAKIFdlYkRhdGEgV2ViRHJhZ0RhdGE6
OmZpbGVDb250ZW50KCkgY29uc3QKIHsKICAgICBBU1NFUlQoIWlzTnVsbCgpKTsKLSAgICByZXR1
cm4gV2ViRGF0YShtX3ByaXZhdGUtPmZpbGVDb250ZW50KTsKKyAgICByZXR1cm4gV2ViRGF0YSht
X3ByaXZhdGUtPmZpbGVDb250ZW50KCkpOwogfQogCiB2b2lkIFdlYkRyYWdEYXRhOjpzZXRGaWxl
Q29udGVudChjb25zdCBXZWJEYXRhJiBmaWxlQ29udGVudCkKIHsKICAgICBlbnN1cmVNdXRhYmxl
KCk7Ci0gICAgbV9wcml2YXRlLT5maWxlQ29udGVudCA9IGZpbGVDb250ZW50OworICAgIG1fcHJp
dmF0ZS0+c2V0RmlsZUNvbnRlbnQoZmlsZUNvbnRlbnQpOwogfQogCiBXZWJEcmFnRGF0YTo6V2Vi
RHJhZ0RhdGEoY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVj
dD4mIGRhdGEpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69142</attachid>
            <date>2010-09-28 17:27:32 -0700</date>
            <delta_ts>2010-09-29 22:37:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>foo.patch</filename>
            <type>text/plain</type>
            <size>50433</size>
            <attacher name="Daniel Cheng">dcheng</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MzhkMzExMC4uNmRkNzZlZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4MSBAQAorMjAxMC0wOS0yOCAgRGFuaWVsIENoZW5n
ICA8ZGNoZW5nQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBbY2hyb21pdW1dIFJlZmFjdG9yIENocm9taXVtRGF0YU9iamVjdCB0
byB1c2UgZ2V0dGVycy9zZXR0ZXJzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NDY1NTkKKworICAgICAgICBUaGlzIGlzIGFuIGludGVybWVkaWF0ZSBz
dGVwIHRvIGNvbnZlcnRpbmcgQ2hyb21pdW1EYXRhT2JqZWN0IHRvIHVzZQorICAgICAgICBjYWxs
YmFja3MgdG8gdGhlIGJyb3dzZXIgdG8gcmV0cmlldmUgZGF0YS4gU3BlY2lhbCBoYW5kbGluZyBm
b3IgVVJMIGFuZAorICAgICAgICB0ZXh0L3VyaS1saXN0IGhhcyBhbHNvIGJlZW4gcmVtb3ZlZDsg
dGhleSBub3cgdHJlYXQgdGhlaXIgZGF0YSBhcmd1bWVudAorICAgICAgICBhcyBqdXN0IGFuIG9w
YXF1ZSBibG9iIG9mIHRleHQuCisKKyAgICAgICAgVGVzdDogZWRpdGluZy9wYXN0ZWJvYXJkL2Rh
dGFUcmFuc2Zlci1zZXREYXRhLWdldERhdGEuaHRtbAorCisgICAgICAgICogZWRpdGluZy9jaHJv
bWl1bS9FZGl0b3JDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om5ld0dl
bmVyYWxDbGlwYm9hcmQpOgorICAgICAgICAqIHBhZ2UvY2hyb21pdW0vRXZlbnRIYW5kbGVyQ2hy
b21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpjcmVhdGVEcmFnZ2lu
Z0NsaXBib2FyZCk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6Y2xlYXJEYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6Y2xlYXJBbGwpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpjbGVhckFsbEV4Y2VwdEZpbGVzKToK
KyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6aGFzRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OnR5cGVzKToKKyAgICAgICAgKFdlYkNvcmU6
OkNocm9taXVtRGF0YU9iamVjdDo6Z2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1
bURhdGFPYmplY3Q6OnNldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2Jq
ZWN0OjpDaHJvbWl1bURhdGFPYmplY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0No
cm9taXVtRGF0YU9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0Ojp1cmxUaXRs
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OnNldFVybFRpdGxlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6aHRtbEJhc2VVcmwpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpzZXRIdG1sQmFzZVVybCk6CisgICAg
ICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OmNvbnRhaW5zRmlsZW5hbWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6ZmlsZW5hbWVzKToKKyAgICAgICAg
KFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6c2V0RmlsZW5hbWVzKToKKyAgICAgICAgKFdl
YkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6ZmlsZUV4dGVuc2lvbik6CisgICAgICAgIChXZWJD
b3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OnNldEZpbGVFeHRlbnNpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpmaWxlQ29udGVudEZpbGVuYW1lKToKKyAgICAgICAg
KFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6c2V0RmlsZUNvbnRlbnRGaWxlbmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OmZpbGVDb250ZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6c2V0RmlsZUNvbnRlbnQpOgorICAgICAg
ICAqIHBsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Om5vcm1hbGl6ZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkQ2hyb21p
dW06OmNsZWFyRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRDaHJvbWl1bTo6Y2xl
YXJBbGxEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENocm9taXVtOjpnZXREYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENocm9taXVtOjpzZXREYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNsaXBib2FyZENocm9taXVtOjp0eXBlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpDbGlwYm9hcmRDaHJvbWl1bTo6ZmlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVJbWFn
ZVRvRGF0YU9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRDaHJvbWl1bTo6ZGVj
bGFyZUFuZFdyaXRlRHJhZ0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENocm9t
aXVtOjp3cml0ZVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRDaHJvbWl1bTo6d3Jp
dGVSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRDaHJvbWl1bTo6d3JpdGVQbGFp
blRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtV2lu
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENocm9taXVtOjp2YWxpZGF0ZUZpbGVO
YW1lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRNaW1lVHlwZXMuY3Bw
OgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZE1pbWVUeXBlcy5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0RyYWdEYXRhQ2hyb21pdW0uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Y29udGFpbnNIVE1MKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjpjb250
YWluc1VSTCk6CisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0YTo6YXNVUkwpOgorICAgICAgICAo
V2ViQ29yZTo6RHJhZ0RhdGE6OmNvbnRhaW5zRmlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6RHJh
Z0RhdGE6OmFzRmlsZW5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjpjb250YWlu
c1BsYWluVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0YTo6YXNQbGFpblRleHQpOgor
ICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmNhblNtYXJ0UmVwbGFjZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEcmFnRGF0YTo6YXNGcmFnbWVudCk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21p
dW0vUmVhZGFibGVEYXRhT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlYWRhYmxlRGF0
YU9iamVjdDo6Z2V0VVJMKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWRhYmxlRGF0YU9iamVjdDo6
Z2V0SFRNTCk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vV3JpdGFibGVEYXRhT2JqZWN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldyaXRhYmxlRGF0YU9iamVjdDo6Y2xlYXJEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OldyaXRhYmxlRGF0YU9iamVjdDo6c2V0RGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpXcml0YWJsZURhdGFPYmplY3Q6OnNldFVSTCk6CisgICAgICAgIChXZWJDb3Jl
OjpXcml0YWJsZURhdGFPYmplY3Q6OnNldEhUTUwpOgorCiAyMDEwLTA5LTIyICBBbGV4ZXkgUHJv
c2t1cnlha292ICA8YXBAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFy
dGguCmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvY2hyb21pdW0vRWRpdG9yQ2hyb21pdW0u
Y3BwIGIvV2ViQ29yZS9lZGl0aW5nL2Nocm9taXVtL0VkaXRvckNocm9taXVtLmNwcAppbmRleCBj
OTM4YTdlLi4yYmZiNWFmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvY2hyb21pdW0vRWRp
dG9yQ2hyb21pdW0uY3BwCisrKyBiL1dlYkNvcmUvZWRpdGluZy9jaHJvbWl1bS9FZGl0b3JDaHJv
bWl1bS5jcHAKQEAgLTM5LDcgKzM5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBQYXNzUmVm
UHRyPENsaXBib2FyZD4gRWRpdG9yOjpuZXdHZW5lcmFsQ2xpcGJvYXJkKENsaXBib2FyZEFjY2Vz
c1BvbGljeSBwb2xpY3ksIEZyYW1lKiBmcmFtZSkKIHsKLSAgICByZXR1cm4gQ2xpcGJvYXJkQ2hy
b21pdW06OmNyZWF0ZShDbGlwYm9hcmQ6OkNvcHlBbmRQYXN0ZSwgQ2hyb21pdW1EYXRhT2JqZWN0
OjpjcmVhdGUoKSwgcG9saWN5LCBmcmFtZSk7CisgICAgcmV0dXJuIENsaXBib2FyZENocm9taXVt
OjpjcmVhdGUoQ2xpcGJvYXJkOjpDb3B5QW5kUGFzdGUsIENocm9taXVtRGF0YU9iamVjdDo6Y3Jl
YXRlKENsaXBib2FyZDo6Q29weUFuZFBhc3RlKSwgcG9saWN5LCBmcmFtZSk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9jaHJvbWl1bS9FdmVu
dEhhbmRsZXJDaHJvbWl1bS5jcHAgYi9XZWJDb3JlL3BhZ2UvY2hyb21pdW0vRXZlbnRIYW5kbGVy
Q2hyb21pdW0uY3BwCmluZGV4IDllOWE3OWEuLjE5YjhhODUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGFnZS9jaHJvbWl1bS9FdmVudEhhbmRsZXJDaHJvbWl1bS5jcHAKKysrIGIvV2ViQ29yZS9wYWdl
L2Nocm9taXVtL0V2ZW50SGFuZGxlckNocm9taXVtLmNwcApAQCAtMTI4LDcgKzEyOCw3IEBAIGJv
b2wgRXZlbnRIYW5kbGVyOjpldmVudEFjdGl2YXRlZFZpZXcoY29uc3QgUGxhdGZvcm1Nb3VzZUV2
ZW50JiBldmVudCkgY29uc3QKIAogUGFzc1JlZlB0cjxDbGlwYm9hcmQ+IEV2ZW50SGFuZGxlcjo6
Y3JlYXRlRHJhZ2dpbmdDbGlwYm9hcmQoKSBjb25zdAogewotICAgIFJlZlB0cjxDaHJvbWl1bURh
dGFPYmplY3Q+IGRhdGFPYmplY3QgPSBDaHJvbWl1bURhdGFPYmplY3Q6OmNyZWF0ZSgpOworICAg
IFJlZlB0cjxDaHJvbWl1bURhdGFPYmplY3Q+IGRhdGFPYmplY3QgPSBDaHJvbWl1bURhdGFPYmpl
Y3Q6OmNyZWF0ZShDbGlwYm9hcmQ6OkRyYWdBbmREcm9wKTsKICAgICByZXR1cm4gQ2xpcGJvYXJk
Q2hyb21pdW06OmNyZWF0ZShDbGlwYm9hcmQ6OkRyYWdBbmREcm9wLCBkYXRhT2JqZWN0LmdldCgp
LCBDbGlwYm9hcmRXcml0YWJsZSwgbV9mcmFtZSk7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmNwcCBiL1dlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmNwcAppbmRleCA4MzUyNjY5Li5hMDM1ZDdh
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVj
dC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3Qu
Y3BwCkBAIC0zMSw1NiArMzEsMjM2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
Q2hyb21pdW1EYXRhT2JqZWN0LmgiCiAKKyNpbmNsdWRlICJDaHJvbWl1bUJyaWRnZS5oIgorI2lu
Y2x1ZGUgIkNsaXBib2FyZE1pbWVUeXBlcy5oIgorI2luY2x1ZGUgIlBhc3RlYm9hcmQuaCIKKwog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIENocm9taXVtRGF0YU9iamVjdDo6Y2xlYXIoKQor
Ly8gUGVyIFJGQyAyNDgzLCB0aGUgbGluZSBzZXBhcmF0b3IgZm9yICJ0ZXh0Ly4uLiIgTUlNRSB0
eXBlcyBpcyBDUi1MRi4KK3N0YXRpYyBjaGFyIGNvbnN0KiBjb25zdCB0ZXh0TUlNRVR5cGVMaW5l
U2VwYXJhdG9yID0gIlxyXG4iOworCit2b2lkIENocm9taXVtRGF0YU9iamVjdDo6Y2xlYXJEYXRh
KGNvbnN0IFN0cmluZyYgdHlwZSkKK3sKKyAgICBpZiAodHlwZSA9PSBtaW1lVHlwZVRleHRQbGFp
bikgeworICAgICAgICBtX3BsYWluVGV4dCA9ICIiOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKHR5cGUgPT0gbWltZVR5cGVVUkwgfHwgdHlwZSA9PSBtaW1lVHlwZVRleHRVUklM
aXN0KSB7CisgICAgICAgIG1fdXJsID0gS1VSTCgpOworICAgICAgICBtX3VybFRpdGxlID0gIiI7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAodHlwZSA9PSBtaW1lVHlwZVRleHRI
VE1MKSB7CisgICAgICAgIG1fdGV4dEh0bWwgPSAiIjsKKyAgICAgICAgbV9odG1sQmFzZVVybCA9
IEtVUkwoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICh0eXBlID09IG1pbWVU
eXBlRG93bmxvYWRVUkwpIHsKKyAgICAgICAgbV9kb3dubG9hZE1ldGFkYXRhID0gIiI7CisgICAg
ICAgIHJldHVybjsKKyAgICB9Cit9CisKK3ZvaWQgQ2hyb21pdW1EYXRhT2JqZWN0OjpjbGVhckFs
bCgpCiB7CiAgICAgY2xlYXJBbGxFeGNlcHRGaWxlcygpOwotICAgIGZpbGVuYW1lcy5jbGVhcigp
OworICAgIG1fZmlsZW5hbWVzLmNsZWFyKCk7CiB9CiAKIHZvaWQgQ2hyb21pdW1EYXRhT2JqZWN0
OjpjbGVhckFsbEV4Y2VwdEZpbGVzKCkKIHsKLSAgICB1cmwgPSBLVVJMKCk7Ci0gICAgdXJsVGl0
bGUgPSAiIjsKLSAgICB1cmlMaXN0LmNsZWFyKCk7Ci0gICAgZG93bmxvYWRNZXRhZGF0YSA9ICIi
OwotICAgIGZpbGVFeHRlbnNpb24gPSAiIjsKLSAgICBwbGFpblRleHQgPSAiIjsKLSAgICB0ZXh0
SHRtbCA9ICIiOwotICAgIGh0bWxCYXNlVXJsID0gS1VSTCgpOwotICAgIGZpbGVDb250ZW50Rmls
ZW5hbWUgPSAiIjsKLSAgICBpZiAoZmlsZUNvbnRlbnQpCi0gICAgICAgIGZpbGVDb250ZW50LT5j
bGVhcigpOworICAgIG1fdXJsID0gS1VSTCgpOworICAgIG1fdXJpTGlzdC5jbGVhcigpOworICAg
IG1fdXJsVGl0bGUgPSAiIjsKKyAgICBtX2Rvd25sb2FkTWV0YWRhdGEgPSAiIjsKKyAgICBtX2Zp
bGVFeHRlbnNpb24gPSAiIjsKKyAgICBtX3BsYWluVGV4dCA9ICIiOworICAgIG1fdGV4dEh0bWwg
PSAiIjsKKyAgICBtX2h0bWxCYXNlVXJsID0gS1VSTCgpOworICAgIG1fZmlsZUNvbnRlbnRGaWxl
bmFtZSA9ICIiOworICAgIGlmIChtX2ZpbGVDb250ZW50KQorICAgICAgICBtX2ZpbGVDb250ZW50
LT5jbGVhcigpOwogfQogCiBib29sIENocm9taXVtRGF0YU9iamVjdDo6aGFzRGF0YSgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuICF1cmwuaXNFbXB0eSgpCi0gICAgICAgIHx8ICF1cmlMaXN0LmlzRW1w
dHkoKQotICAgICAgICB8fCAhZG93bmxvYWRNZXRhZGF0YS5pc0VtcHR5KCkKLSAgICAgICAgfHwg
IWZpbGVFeHRlbnNpb24uaXNFbXB0eSgpCi0gICAgICAgIHx8ICFmaWxlbmFtZXMuaXNFbXB0eSgp
Ci0gICAgICAgIHx8ICFwbGFpblRleHQuaXNFbXB0eSgpCi0gICAgICAgIHx8ICF0ZXh0SHRtbC5p
c0VtcHR5KCkKLSAgICAgICAgfHwgZmlsZUNvbnRlbnQ7CisgICAgcmV0dXJuICFtX3VybC5pc0Vt
cHR5KCkKKyAgICAgICAgfHwgIW1fdXJpTGlzdC5pc0VtcHR5KCkKKyAgICAgICAgfHwgIW1fZG93
bmxvYWRNZXRhZGF0YS5pc0VtcHR5KCkKKyAgICAgICAgfHwgIW1fZmlsZUV4dGVuc2lvbi5pc0Vt
cHR5KCkKKyAgICAgICAgfHwgIW1fZmlsZW5hbWVzLmlzRW1wdHkoKQorICAgICAgICB8fCAhbV9w
bGFpblRleHQuaXNFbXB0eSgpCisgICAgICAgIHx8ICFtX3RleHRIdG1sLmlzRW1wdHkoKQorICAg
ICAgICB8fCBtX2ZpbGVDb250ZW50OworfQorCitIYXNoU2V0PFN0cmluZz4gQ2hyb21pdW1EYXRh
T2JqZWN0Ojp0eXBlcygpIGNvbnN0Cit7CisgICAgLy8gVGhpcyBpcyBjdXJyZW50bHkgYnJva2Vu
IGZvciBwYXN0ZWJvYXJkIGV2ZW50cywgYW5kIGFsd2F5cyBoYXMgYmVlbi4KKyAgICBIYXNoU2V0
PFN0cmluZz4gcmVzdWx0czsKKworICAgIGlmICghbV9wbGFpblRleHQuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIHJlc3VsdHMuYWRkKG1pbWVUeXBlVGV4dCk7CisgICAgICAgIHJlc3VsdHMuYWRkKG1p
bWVUeXBlVGV4dFBsYWluKTsKKyAgICB9CisKKyAgICBpZiAoIW1fdXJsLmlzRW1wdHkoKSkgewor
ICAgICAgICByZXN1bHRzLmFkZChtaW1lVHlwZVVSTCk7CisgICAgICAgIHJlc3VsdHMuYWRkKG1p
bWVUeXBlVGV4dFVSSUxpc3QpOworICAgIH0KKworICAgIGlmICghbV90ZXh0SHRtbC5pc0VtcHR5
KCkpCisgICAgICAgIHJlc3VsdHMuYWRkKG1pbWVUeXBlVGV4dEhUTUwpOworCisgICAgaWYgKCFt
X2ZpbGVuYW1lcy5pc0VtcHR5KCkpCisgICAgICAgIHJlc3VsdHMuYWRkKCJGaWxlcyIpOworCisg
ICAgcmV0dXJuIHJlc3VsdHM7Cit9CisKK1N0cmluZyBDaHJvbWl1bURhdGFPYmplY3Q6OmdldERh
dGEoY29uc3QgU3RyaW5nJiB0eXBlLCBib29sJiBzdWNjZXNzKQoreworICAgIGlmICh0eXBlID09
IG1pbWVUeXBlVGV4dFBsYWluKSB7CisgICAgICAgIGlmIChtX2NsaXBib2FyZFR5cGUgPT0gQ2xp
cGJvYXJkOjpDb3B5QW5kUGFzdGUpIHsKKyAgICAgICAgICAgIFBhc3RlYm9hcmRQcml2YXRlOjpD
bGlwYm9hcmRCdWZmZXIgYnVmZmVyID0KKyAgICAgICAgICAgICAgICBQYXN0ZWJvYXJkOjpnZW5l
cmFsUGFzdGVib2FyZCgpLT5pc1NlbGVjdGlvbk1vZGUoKSA/CisgICAgICAgICAgICAgICAgUGFz
dGVib2FyZFByaXZhdGU6OlNlbGVjdGlvbkJ1ZmZlciA6CisgICAgICAgICAgICAgICAgUGFzdGVi
b2FyZFByaXZhdGU6OlN0YW5kYXJkQnVmZmVyOworICAgICAgICAgICAgU3RyaW5nIHRleHQgPSBD
aHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkUmVhZFBsYWluVGV4dChidWZmZXIpOworICAgICAgICAg
ICAgc3VjY2VzcyA9ICF0ZXh0LmlzRW1wdHkoKTsKKyAgICAgICAgICAgIHJldHVybiB0ZXh0Owor
ICAgICAgICB9CisgICAgICAgIHN1Y2Nlc3MgPSAhbV9wbGFpblRleHQuaXNFbXB0eSgpOworICAg
ICAgICByZXR1cm4gbV9wbGFpblRleHQ7CisgICAgfQorCisgICAgaWYgKHR5cGUgPT0gbWltZVR5
cGVVUkwpIHsKKyAgICAgICAgc3VjY2VzcyA9ICFtX3VybC5pc0VtcHR5KCk7CisgICAgICAgIHJl
dHVybiBtX3VybC5zdHJpbmcoKTsKKyAgICB9CisKKyAgICBpZiAodHlwZSA9PSBtaW1lVHlwZVRl
eHRVUklMaXN0KSB7CisgICAgICAgIC8vIFRoaXMgd2lsbCBhbHdheXMgYmUgZW1wdHkgb24gYSBk
cmFnLWluLgorICAgICAgICBpZiAobV91cmlMaXN0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAg
c3VjY2VzcyA9ICFtX3VybC5pc0VtcHR5KCk7CisgICAgICAgICAgICByZXR1cm4gbV91cmw7Cisg
ICAgICAgIH0KKyAgICAgICAgc3VjY2VzcyA9IHRydWU7CisgICAgICAgIFN0cmluZyB1cmlMaXN0
U3RyaW5nKG1fdXJpTGlzdFswXSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgbV91
cmlMaXN0LnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICB1cmlMaXN0U3RyaW5nLmFwcGVuZCh0
ZXh0TUlNRVR5cGVMaW5lU2VwYXJhdG9yKTsKKyAgICAgICAgICAgIHVyaUxpc3RTdHJpbmcuYXBw
ZW5kKG1fdXJpTGlzdFtpXSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHVyaUxpc3RTdHJp
bmc7CisgICAgfQorCisgICAgaWYgKHR5cGUgPT0gbWltZVR5cGVUZXh0SFRNTCkgeworICAgICAg
ICBpZiAobV9jbGlwYm9hcmRUeXBlID09IENsaXBib2FyZDo6Q29weUFuZFBhc3RlKSB7CisgICAg
ICAgICAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyIGJ1ZmZlciA9CisgICAg
ICAgICAgICAgICAgUGFzdGVib2FyZDo6Z2VuZXJhbFBhc3RlYm9hcmQoKS0+aXNTZWxlY3Rpb25N
b2RlKCkgPworICAgICAgICAgICAgICAgIFBhc3RlYm9hcmRQcml2YXRlOjpTZWxlY3Rpb25CdWZm
ZXIgOgorICAgICAgICAgICAgICAgIFBhc3RlYm9hcmRQcml2YXRlOjpTdGFuZGFyZEJ1ZmZlcjsK
KyAgICAgICAgICAgIFN0cmluZyBodG1sVGV4dDsKKyAgICAgICAgICAgIEtVUkwgc291cmNlVVJM
OworICAgICAgICAgICAgQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFJlYWRIVE1MKGJ1ZmZlciwg
Jmh0bWxUZXh0LCAmc291cmNlVVJMKTsKKyAgICAgICAgICAgIHN1Y2Nlc3MgPSAhaHRtbFRleHQu
aXNFbXB0eSgpOworICAgICAgICAgICAgcmV0dXJuIGh0bWxUZXh0OworICAgICAgICB9CisgICAg
ICAgIHN1Y2Nlc3MgPSAhbV90ZXh0SHRtbC5pc0VtcHR5KCk7CisgICAgICAgIHJldHVybiBtX3Rl
eHRIdG1sOworICAgIH0KKworICAgIGlmICh0eXBlID09IG1pbWVUeXBlRG93bmxvYWRVUkwpIHsK
KyAgICAgICAgc3VjY2VzcyA9ICFtX2Rvd25sb2FkTWV0YWRhdGEuaXNFbXB0eSgpOworICAgICAg
ICByZXR1cm4gbV9kb3dubG9hZE1ldGFkYXRhOworICAgIH0KKworICAgIHN1Y2Nlc3MgPSBmYWxz
ZTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK2Jvb2wgQ2hyb21pdW1EYXRhT2JqZWN0Ojpz
ZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKQoreworICAgIGlm
ICh0eXBlID09IG1pbWVUeXBlVGV4dFBsYWluKSB7CisgICAgICAgIG1fcGxhaW5UZXh0ID0gZGF0
YTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKHR5cGUgPT0gbWltZVR5
cGVVUkwgfHwgdHlwZSA9PSBtaW1lVHlwZVRleHRVUklMaXN0KSB7CisgICAgICAgIG1fdXJsID0g
S1VSTCgpOworICAgICAgICAvLyBMaW5lIHNlcGFyYXRvciBpcyBcclxuIHBlciBSRkMgMjQ4MyAt
IGhvd2V2ZXIsIGZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMKKyAgICAgICAgLy8gd2UgYWxzbyBh
bGxvdyBqdXN0IFxuIGhlcmUuCisgICAgICAgIGRhdGEuc3BsaXQoJ1xuJywgbV91cmlMaXN0KTsK
KyAgICAgICAgLy8gU3RyaXAgd2hpdGUgc3BhY2Ugb24gYWxsIGxpbmVzLCBpbmNsdWRpbmcgdHJh
aWxpbmcgXHIgZnJvbSBhYm92ZSBzcGxpdC4KKyAgICAgICAgLy8gSWYgdGhpcyBsZWF2ZXMgYSBs
aW5lIGVtcHR5LCByZW1vdmUgaXQgY29tcGxldGVseS4KKyAgICAgICAgLy8KKyAgICAgICAgLy8g
QWxzbywgY29weSB0aGUgZmlyc3QgdmFsaWQgVVJMIGludG8gdGhlICd1cmwnIG1lbWJlciBhcyB3
ZWxsLgorICAgICAgICAvLyBJbiBjYXNlIG5vIGVudHJ5IGlzIGEgdmFsaWQgVVJMIChpLmUuLCBy
ZW1hcmtzIG9ubHkpLCB0aGVuIHdlIGxlYXZlICd1cmwnIGVtcHR5LgorICAgICAgICAvLyBJLmUu
LCBpbiB0aGF0IGNhc2Ugc3Vic2VxdWVudCBjYWxscyB0byBnZXREYXRhKCJVUkwiKSB3aWxsIGdl
dCBhbiBlbXB0eSBzdHJpbmcuCisgICAgICAgIC8vIFRoaXMgaXMgaW4gbGluZSB3aXRoIHRoZSBI
VE1MNSBzcGVjIChzZWUgIlRoZSBEcmFnRXZlbnQgYW5kIERhdGFUcmFuc2ZlciBpbnRlcmZhY2Vz
IikuCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV91cmlMaXN0LnNpemUoKTsgLyoq
LykgeworICAgICAgICAgICAgU3RyaW5nJiBsaW5lID0gbV91cmlMaXN0W2ldOworICAgICAgICAg
ICAgbGluZSA9IGxpbmUuc3RyaXBXaGl0ZVNwYWNlKCk7CisgICAgICAgICAgICBpZiAobGluZS5p
c0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBtX3VyaUxpc3QucmVtb3ZlKGkpOworICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgKytpOworICAg
ICAgICAgICAgLy8gT25seSBjb3B5IHRoZSBmaXJzdCB2YWxpZCBVUkwuCisgICAgICAgICAgICBp
ZiAobV91cmwuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgLy8gU2tpcCByZW1hcmtzLgorICAgICAgICAgICAgaWYgKGxpbmVbMF0gPT0gJyMnKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgS1VSTCB1cmwgPSBLVVJMKFBhcnNl
ZFVSTFN0cmluZywgbGluZSk7CisgICAgICAgICAgICBpZiAodXJsLmlzVmFsaWQoKSkKKyAgICAg
ICAgICAgICAgICBtX3VybCA9IHVybDsKKyAgICAgICAgfQorICAgICAgICBpZiAobV91cmlMaXN0
LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgQVNTRVJUKG1fdXJsLmlzRW1wdHkoKSk7CisgICAg
ICAgICAgICByZXR1cm4gZGF0YS5pc0VtcHR5KCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgaWYgKHR5cGUgPT0gbWltZVR5cGVUZXh0SFRNTCkgeworICAg
ICAgICBtX3RleHRIdG1sID0gZGF0YTsKKyAgICAgICAgbV9odG1sQmFzZVVybCA9IEtVUkwoKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKHR5cGUgPT0gbWltZVR5cGVE
b3dubG9hZFVSTCkgeworICAgICAgICBtX2Rvd25sb2FkTWV0YWRhdGEgPSBkYXRhOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0Nocm9taXVt
RGF0YU9iamVjdDo6Q2hyb21pdW1EYXRhT2JqZWN0KENsaXBib2FyZDo6Q2xpcGJvYXJkVHlwZSBj
bGlwYm9hcmRUeXBlKQorICAgIDogbV9jbGlwYm9hcmRUeXBlKGNsaXBib2FyZFR5cGUpCit7CiB9
CiAKIENocm9taXVtRGF0YU9iamVjdDo6Q2hyb21pdW1EYXRhT2JqZWN0KGNvbnN0IENocm9taXVt
RGF0YU9iamVjdCYgb3RoZXIpCiAgICAgOiBSZWZDb3VudGVkPENocm9taXVtRGF0YU9iamVjdD4o
KQotICAgICwgdXJsVGl0bGUob3RoZXIudXJsVGl0bGUpCi0gICAgLCBkb3dubG9hZE1ldGFkYXRh
KG90aGVyLmRvd25sb2FkTWV0YWRhdGEpCi0gICAgLCBmaWxlRXh0ZW5zaW9uKG90aGVyLmZpbGVF
eHRlbnNpb24pCi0gICAgLCBmaWxlbmFtZXMob3RoZXIuZmlsZW5hbWVzKQotICAgICwgcGxhaW5U
ZXh0KG90aGVyLnBsYWluVGV4dCkKLSAgICAsIHRleHRIdG1sKG90aGVyLnRleHRIdG1sKQotICAg
ICwgaHRtbEJhc2VVcmwob3RoZXIuaHRtbEJhc2VVcmwpCi0gICAgLCBmaWxlQ29udGVudEZpbGVu
YW1lKG90aGVyLmZpbGVDb250ZW50RmlsZW5hbWUpCi0gICAgLCB1cmwob3RoZXIudXJsKQotICAg
ICwgdXJpTGlzdChvdGhlci51cmlMaXN0KQorICAgICwgbV9jbGlwYm9hcmRUeXBlKG90aGVyLm1f
Y2xpcGJvYXJkVHlwZSkKKyAgICAsIG1fdXJsVGl0bGUob3RoZXIubV91cmxUaXRsZSkKKyAgICAs
IG1fZG93bmxvYWRNZXRhZGF0YShvdGhlci5tX2Rvd25sb2FkTWV0YWRhdGEpCisgICAgLCBtX2Zp
bGVFeHRlbnNpb24ob3RoZXIubV9maWxlRXh0ZW5zaW9uKQorICAgICwgbV9maWxlbmFtZXMob3Ro
ZXIubV9maWxlbmFtZXMpCisgICAgLCBtX3BsYWluVGV4dChvdGhlci5tX3BsYWluVGV4dCkKKyAg
ICAsIG1fdGV4dEh0bWwob3RoZXIubV90ZXh0SHRtbCkKKyAgICAsIG1faHRtbEJhc2VVcmwob3Ro
ZXIubV9odG1sQmFzZVVybCkKKyAgICAsIG1fZmlsZUNvbnRlbnRGaWxlbmFtZShvdGhlci5tX2Zp
bGVDb250ZW50RmlsZW5hbWUpCisgICAgLCBtX3VybChvdGhlci5tX3VybCkKIHsKLSAgICBpZiAo
b3RoZXIuZmlsZUNvbnRlbnQuZ2V0KCkpCi0gICAgICAgIGZpbGVDb250ZW50ID0gb3RoZXIuZmls
ZUNvbnRlbnQtPmNvcHkoKTsKKyAgICBpZiAob3RoZXIubV9maWxlQ29udGVudC5nZXQoKSkKKyAg
ICAgICAgbV9maWxlQ29udGVudCA9IG90aGVyLm1fZmlsZUNvbnRlbnQtPmNvcHkoKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9DaHJvbWl1bURhdGFPYmplY3QuaCBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hy
b21pdW1EYXRhT2JqZWN0LmgKaW5kZXggYWYwYTNmYS4uYWY2ZTllMiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuaAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5oCkBAIC0zMSwxMSArMzEsMTQg
QEAKICNpZm5kZWYgQ2hyb21pdW1EYXRhT2JqZWN0X2gKICNkZWZpbmUgQ2hyb21pdW1EYXRhT2Jq
ZWN0X2gKIAorI2luY2x1ZGUgIkNsaXBib2FyZC5oIgogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNs
dWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1
ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIApAQCAtNDQsOSArNDcsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
Ly8gb2YgYW5kIGlzIG5vdCBzcGVjaWZpYyB0byBhIHBsYXRmb3JtLgogICAgIGNsYXNzIENocm9t
aXVtRGF0YU9iamVjdCA6IHB1YmxpYyBSZWZDb3VudGVkPENocm9taXVtRGF0YU9iamVjdD4gewog
ICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2hyb21pdW1EYXRhT2JqZWN0
PiBjcmVhdGUoKQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDaHJvbWl1bURhdGFPYmplY3Q+
IGNyZWF0ZShDbGlwYm9hcmQ6OkNsaXBib2FyZFR5cGUgY2xpcGJvYXJkVHlwZSkKICAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDaHJvbWl1bURhdGFPYmplY3QpOwor
ICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDaHJvbWl1bURhdGFPYmplY3QoY2xpcGJv
YXJkVHlwZSkpOwogICAgICAgICB9CiAKICAgICAgICAgUGFzc1JlZlB0cjxDaHJvbWl1bURhdGFP
YmplY3Q+IGNvcHkoKSBjb25zdApAQCAtNTQsNjAgKzU3LDU5IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2hyb21pdW1EYXRhT2JqZWN0KCp0
aGlzKSk7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkIGNsZWFyKCk7CisgICAgICAgIHZvaWQg
Y2xlYXJEYXRhKGNvbnN0IFN0cmluZyYgdHlwZSk7CisgICAgICAgIHZvaWQgY2xlYXJBbGwoKTsK
ICAgICAgICAgdm9pZCBjbGVhckFsbEV4Y2VwdEZpbGVzKCk7Ci0gICAgICAgIGJvb2wgaGFzRGF0
YSgpIGNvbnN0OwotCi0gICAgICAgIHZvaWQgY2xlYXJVUkwoKQotICAgICAgICB7Ci0gICAgICAg
ICAgICB1cmwgPSBLVVJMKCk7Ci0gICAgICAgICAgICB1cmlMaXN0LmNsZWFyKCk7Ci0gICAgICAg
ICAgICB1cmxUaXRsZSA9ICIiOwotICAgICAgICB9CiAKLSAgICAgICAgYm9vbCBoYXNWYWxpZFVS
TCgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiB1cmwuaXNWYWxpZCgpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgS1VSTCBnZXRVUkwoKSBjb25zdAotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gdXJsOwotICAgICAgICB9CisgICAgICAgIGJvb2wgaGFzRGF0YSgpIGNv
bnN0OwogCi0gICAgICAgIHZvaWQgc2V0VVJMKGNvbnN0IEtVUkwmIG5ld1VSTCkKLSAgICAgICAg
ewotICAgICAgICAgICAgdXJsID0gbmV3VVJMOwotICAgICAgICAgICAgdXJpTGlzdC5jbGVhcigp
OwotICAgICAgICAgICAgaWYgKG5ld1VSTC5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgdXJpTGlzdC5hcHBlbmQobmV3VVJMLnN0cmluZygpKTsKLSAgICAg
ICAgfQorICAgICAgICBIYXNoU2V0PFN0cmluZz4gdHlwZXMoKSBjb25zdDsKKyAgICAgICAgU3Ry
aW5nIGdldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBib29sJiBzdWNjZXNzKTsKKyAgICAgICAg
Ym9vbCBzZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKTsKKwor
ICAgICAgICAvLyBTcGVjaWFsIGhhbmRsZXJzIGZvciBVUkwvSFRNTCBtZXRhZGF0YS4KKyAgICAg
ICAgU3RyaW5nIHVybFRpdGxlKCkgY29uc3QgeyByZXR1cm4gbV91cmxUaXRsZTsgfQorICAgICAg
ICB2b2lkIHNldFVybFRpdGxlKGNvbnN0IFN0cmluZyYgdXJsVGl0bGUpIHsgbV91cmxUaXRsZSA9
IHVybFRpdGxlOyB9CisgICAgICAgIEtVUkwgaHRtbEJhc2VVcmwoKSBjb25zdCB7IHJldHVybiBt
X2h0bWxCYXNlVXJsOyB9CisgICAgICAgIHZvaWQgc2V0SHRtbEJhc2VVcmwoY29uc3QgS1VSTCYg
dXJsKSB7IG1faHRtbEJhc2VVcmwgPSB1cmw7IH0KKworICAgICAgICAvLyBVc2VkIHRvIGhhbmRs
ZSBmaWxlcyBiZWluZyBkcmFnZ2VkIGluLgorICAgICAgICBib29sIGNvbnRhaW5zRmlsZW5hbWVz
KCkgY29uc3QgeyByZXR1cm4gIW1fZmlsZW5hbWVzLmlzRW1wdHkoKTsgfQorICAgICAgICBWZWN0
b3I8U3RyaW5nPiBmaWxlbmFtZXMoKSBjb25zdCB7IHJldHVybiBtX2ZpbGVuYW1lczsgfQorICAg
ICAgICB2b2lkIHNldEZpbGVuYW1lcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVzKSB7
IG1fZmlsZW5hbWVzID0gZmlsZW5hbWVzOyB9CisKKyAgICAgICAgLy8gVXNlZCB0byBoYW5kbGUg
ZmlsZXMgKGltYWdlcykgYmVpbmcgZHJhZ2dlZCBvdXQuCisgICAgICAgIFN0cmluZyBmaWxlRXh0
ZW5zaW9uKCkgY29uc3QgeyByZXR1cm4gbV9maWxlRXh0ZW5zaW9uOyB9CisgICAgICAgIHZvaWQg
c2V0RmlsZUV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGZpbGVFeHRlbnNpb24pIHsgbV9maWxlRXh0
ZW5zaW9uID0gZmlsZUV4dGVuc2lvbjsgfQorICAgICAgICBTdHJpbmcgZmlsZUNvbnRlbnRGaWxl
bmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsZUNvbnRlbnRGaWxlbmFtZTsgfQorICAgICAgICB2
b2lkIHNldEZpbGVDb250ZW50RmlsZW5hbWUoY29uc3QgU3RyaW5nJiBmaWxlQ29udGVudEZpbGVu
YW1lKSB7IG1fZmlsZUNvbnRlbnRGaWxlbmFtZSA9IGZpbGVDb250ZW50RmlsZW5hbWU7IH0KKyAg
ICAgICAgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGZpbGVDb250ZW50KCkgY29uc3QgeyByZXR1
cm4gbV9maWxlQ29udGVudDsgfQorICAgICAgICB2b2lkIHNldEZpbGVDb250ZW50KFBhc3NSZWZQ
dHI8U2hhcmVkQnVmZmVyPiBmaWxlQ29udGVudCkgeyBtX2ZpbGVDb250ZW50ID0gZmlsZUNvbnRl
bnQ7IH0KIAotICAgICAgICBTdHJpbmcgdXJsVGl0bGU7CisgICAgcHJpdmF0ZToKKyAgICAgICAg
Q2hyb21pdW1EYXRhT2JqZWN0KENsaXBib2FyZDo6Q2xpcGJvYXJkVHlwZSk7CisgICAgICAgIENo
cm9taXVtRGF0YU9iamVjdChjb25zdCBDaHJvbWl1bURhdGFPYmplY3QmKTsKIAotICAgICAgICBT
dHJpbmcgZG93bmxvYWRNZXRhZGF0YTsKKyAgICAgICAgQ2xpcGJvYXJkOjpDbGlwYm9hcmRUeXBl
IG1fY2xpcGJvYXJkVHlwZTsKIAotICAgICAgICBTdHJpbmcgZmlsZUV4dGVuc2lvbjsKLSAgICAg
ICAgVmVjdG9yPFN0cmluZz4gZmlsZW5hbWVzOworICAgICAgICBTdHJpbmcgbV91cmxUaXRsZTsK
IAotICAgICAgICBTdHJpbmcgcGxhaW5UZXh0OworICAgICAgICBTdHJpbmcgbV9kb3dubG9hZE1l
dGFkYXRhOwogCi0gICAgICAgIFN0cmluZyB0ZXh0SHRtbDsKLSAgICAgICAgS1VSTCBodG1sQmFz
ZVVybDsKKyAgICAgICAgU3RyaW5nIG1fZmlsZUV4dGVuc2lvbjsKKyAgICAgICAgVmVjdG9yPFN0
cmluZz4gbV9maWxlbmFtZXM7CiAKLSAgICAgICAgU3RyaW5nIGZpbGVDb250ZW50RmlsZW5hbWU7
Ci0gICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGZpbGVDb250ZW50OworICAgICAgICBTdHJp
bmcgbV9wbGFpblRleHQ7CiAKLSAgICBwcml2YXRlOgotICAgICAgICAvLyBVUkwgYW5kIHVyaS1s
aXN0IGFyZSBsaW5rZWQsIHNvIHRoZXkgc2hvdWxkIG5vdCBiZSBhY2Nlc3NlZCBpbmRpdmlkdWFs
bHkuCi0gICAgICAgIEtVUkwgdXJsOwotICAgICAgICBWZWN0b3I8U3RyaW5nPiB1cmlMaXN0Owor
ICAgICAgICBTdHJpbmcgbV90ZXh0SHRtbDsKKyAgICAgICAgS1VSTCBtX2h0bWxCYXNlVXJsOwog
Ci0gICAgICAgIENocm9taXVtRGF0YU9iamVjdCgpIHt9Ci0gICAgICAgIENocm9taXVtRGF0YU9i
amVjdChjb25zdCBDaHJvbWl1bURhdGFPYmplY3QmKTsKKyAgICAgICAgU3RyaW5nIG1fZmlsZUNv
bnRlbnRGaWxlbmFtZTsKKyAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV9maWxlQ29udGVu
dDsKIAotICAgICAgICBmcmllbmQgY2xhc3MgQ2xpcGJvYXJkQ2hyb21pdW07CisgICAgICAgIC8v
IFRoZXNlIHR3byBhcmUgbGlua2VkLgorICAgICAgICBLVVJMIG1fdXJsOworICAgICAgICBWZWN0
b3I8U3RyaW5nPiBtX3VyaUxpc3Q7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5j
cHAgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmNwcAppbmRl
eCBjMmVjODBjLi42NjQ1YThmIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVt
L0NsaXBib2FyZENocm9taXVtLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Ns
aXBib2FyZENocm9taXVtLmNwcApAQCAtMjgsOCArMjgsOCBAQAogI2luY2x1ZGUgIkNsaXBib2Fy
ZENocm9taXVtLmgiCiAKICNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgotI2luY2x1ZGUgIkNocm9t
aXVtQnJpZGdlLmgiCiAjaW5jbHVkZSAiQ2hyb21pdW1EYXRhT2JqZWN0LmgiCisjaW5jbHVkZSAi
Q2xpcGJvYXJkTWltZVR5cGVzLmgiCiAjaW5jbHVkZSAiQ2xpcGJvYXJkVXRpbGl0aWVzQ2hyb21p
dW0uaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkRyYWdEYXRhLmgiCkBAIC00
MCw3ICs0MCw2IEBACiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lz
dHJ5LmgiCiAjaW5jbHVkZSAiTmFtZWROb2RlTWFwLmgiCi0jaW5jbHVkZSAiUGFzdGVib2FyZC5o
IgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNs
dWRlICJSZW5kZXJJbWFnZS5oIgpAQCAtNTUsNDAgKzU0LDEyIEBAIHVzaW5nIG5hbWVzcGFjZSBI
VE1MTmFtZXM7CiAvLyBXZSBwcm92aWRlIHRoZSBJRSBjbGlwYm9hcmQgdHlwZXMgKFVSTCBhbmQg
VGV4dCksIGFuZCB0aGUgY2xpcGJvYXJkIHR5cGVzIHNwZWNpZmllZCBpbiB0aGUgV0hBVFdHIFdl
YiBBcHBsaWNhdGlvbnMgMS4wIGRyYWZ0CiAvLyBzZWUgaHR0cDovL3d3dy53aGF0d2cub3JnL3Nw
ZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay8gU2VjdGlvbiA2LjMuNS4zCiAKLWVudW0gQ2xpcGJv
YXJkRGF0YVR5cGUgewotICAgIENsaXBib2FyZERhdGFUeXBlTm9uZSwKLQotICAgIENsaXBib2Fy
ZERhdGFUeXBlVVJMLAotICAgIENsaXBib2FyZERhdGFUeXBlVVJJTGlzdCwKLSAgICBDbGlwYm9h
cmREYXRhVHlwZURvd25sb2FkVVJMLAotICAgIENsaXBib2FyZERhdGFUeXBlUGxhaW5UZXh0LAot
ICAgIENsaXBib2FyZERhdGFUeXBlSFRNTCwKLQotICAgIENsaXBib2FyZERhdGFUeXBlT3RoZXIs
Ci19OwotCi0vLyBQZXIgUkZDIDI0ODMsIHRoZSBsaW5lIHNlcGFyYXRvciBmb3IgInRleHQvLi4u
IiBNSU1FIHR5cGVzIGlzIENSLUxGLgotc3RhdGljIGNoYXIgY29uc3QqIGNvbnN0IHRleHRNSU1F
VHlwZUxpbmVTZXBhcmF0b3IgPSAiXHJcbiI7Ci0KLXN0YXRpYyBDbGlwYm9hcmREYXRhVHlwZSBj
bGlwYm9hcmRUeXBlRnJvbU1JTUVUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSkKK3N0YXRpYyBTdHJp
bmcgbm9ybWFsaXplVHlwZShjb25zdCBTdHJpbmcmIHR5cGUpCiB7CiAgICAgU3RyaW5nIGNsZWFu
VHlwZSA9IHR5cGUuc3RyaXBXaGl0ZVNwYWNlKCkubG93ZXIoKTsKLSAgICBpZiAoY2xlYW5UeXBl
LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIENsaXBib2FyZERhdGFUeXBlTm9uZTsKLQotICAg
IC8vIEluY2x1ZGVzIHR3byBzcGVjaWFsIGNhc2VzIGZvciBJRSBjb21wYXRpYmlsaXR5LgotICAg
IGlmIChjbGVhblR5cGUgPT0gInRleHQiIHx8IGNsZWFuVHlwZSA9PSAidGV4dC9wbGFpbiIgfHwg
Y2xlYW5UeXBlLnN0YXJ0c1dpdGgoInRleHQvcGxhaW47IikpCi0gICAgICAgIHJldHVybiBDbGlw
Ym9hcmREYXRhVHlwZVBsYWluVGV4dDsKLSAgICBpZiAoY2xlYW5UeXBlID09ICJ1cmwiKQotICAg
ICAgICByZXR1cm4gQ2xpcGJvYXJkRGF0YVR5cGVVUkw7Ci0gICAgaWYgKGNsZWFuVHlwZSA9PSAi
dGV4dC91cmktbGlzdCIpCi0gICAgICAgIHJldHVybiBDbGlwYm9hcmREYXRhVHlwZVVSSUxpc3Q7
Ci0gICAgaWYgKGNsZWFuVHlwZSA9PSAiZG93bmxvYWR1cmwiKQotICAgICAgICByZXR1cm4gQ2xp
cGJvYXJkRGF0YVR5cGVEb3dubG9hZFVSTDsKLSAgICBpZiAoY2xlYW5UeXBlID09ICJ0ZXh0L2h0
bWwiKQotICAgICAgICByZXR1cm4gQ2xpcGJvYXJkRGF0YVR5cGVIVE1MOwotCi0gICAgcmV0dXJu
IENsaXBib2FyZERhdGFUeXBlT3RoZXI7CisgICAgaWYgKGNsZWFuVHlwZSA9PSBtaW1lVHlwZVRl
eHQgfHwgY2xlYW5UeXBlLnN0YXJ0c1dpdGgobWltZVR5cGVUZXh0UGxhaW5FdGMpKQorICAgICAg
ICByZXR1cm4gbWltZVR5cGVUZXh0UGxhaW47CisgICAgcmV0dXJuIGNsZWFuVHlwZTsKIH0KIAog
UGFzc1JlZlB0cjxDbGlwYm9hcmQ+IENsaXBib2FyZDo6Y3JlYXRlKENsaXBib2FyZEFjY2Vzc1Bv
bGljeSBwb2xpY3ksIERyYWdEYXRhKiBkcmFnRGF0YSwgRnJhbWUqIGZyYW1lKQpAQCAtMTE3LDM2
ICs4OCw3IEBAIHZvaWQgQ2xpcGJvYXJkQ2hyb21pdW06OmNsZWFyRGF0YShjb25zdCBTdHJpbmcm
IHR5cGUpCiAgICAgaWYgKHBvbGljeSgpICE9IENsaXBib2FyZFdyaXRhYmxlIHx8ICFtX2RhdGFP
YmplY3QpCiAgICAgICAgIHJldHVybjsKIAotICAgIENsaXBib2FyZERhdGFUeXBlIGRhdGFUeXBl
ID0gY2xpcGJvYXJkVHlwZUZyb21NSU1FVHlwZSh0eXBlKTsKLSAgICBzd2l0Y2ggKGRhdGFUeXBl
KSB7Ci0gICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZU5vbmU6Ci0gICAgICAgIC8vIElmIGNhbGxl
ZCB3aXRoIG5vIGFyZ3VtZW50cywgZXZlcnl0aGluZyBleGNlcHQgdGhlIGZpbGUgbGlzdCBtdXN0
IGJlIGNsZWFyZWQuCi0gICAgICAgIC8vIChTZWUgSFRNTDUgc3BlYywgIlRoZSBEcmFnRXZlbnQg
YW5kIERhdGFUcmFuc2ZlciBpbnRlcmZhY2VzIikKLSAgICAgICAgbV9kYXRhT2JqZWN0LT5jbGVh
ckFsbEV4Y2VwdEZpbGVzKCk7Ci0gICAgICAgIHJldHVybjsKLQotICAgIGNhc2UgQ2xpcGJvYXJk
RGF0YVR5cGVVUkw6Ci0gICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZVVSSUxpc3Q6Ci0gICAgICAg
IG1fZGF0YU9iamVjdC0+Y2xlYXJVUkwoKTsKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2FzZSBD
bGlwYm9hcmREYXRhVHlwZURvd25sb2FkVVJMOgotICAgICAgICBtX2RhdGFPYmplY3QtPmRvd25s
b2FkTWV0YWRhdGEgPSAiIjsKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBjYXNlIENs
aXBib2FyZERhdGFUeXBlUGxhaW5UZXh0OgotICAgICAgICBtX2RhdGFPYmplY3QtPnBsYWluVGV4
dCA9ICIiOwotICAgICAgICByZXR1cm47Ci0KLSAgICBjYXNlIENsaXBib2FyZERhdGFUeXBlSFRN
TDoKLSAgICAgICAgbV9kYXRhT2JqZWN0LT50ZXh0SHRtbCA9ICIiOwotICAgICAgICBtX2RhdGFP
YmplY3QtPmh0bWxCYXNlVXJsID0gS1VSTCgpOwotICAgICAgICByZXR1cm47Ci0KLSAgICBjYXNl
IENsaXBib2FyZERhdGFUeXBlT3RoZXI6Ci0gICAgICAgIC8vIE5vdCB5ZXQgaW1wbGVtZW50ZWQs
IHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQ0MTAKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KKyAgICBtX2RhdGFPYmplY3QtPmNsZWFyRGF0YShub3JtYWxpemVU
eXBlKHR5cGUpKTsKIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQpAQCAtMTU2LDcgKzk4
LDcgQEAgdm9pZCBDbGlwYm9hcmRDaHJvbWl1bTo6Y2xlYXJBbGxEYXRhKCkKICAgICBpZiAocG9s
aWN5KCkgIT0gQ2xpcGJvYXJkV3JpdGFibGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZGF0
YU9iamVjdC0+Y2xlYXIoKTsKKyAgICBtX2RhdGFPYmplY3QtPmNsZWFyQWxsKCk7CiB9CiAKIFN0
cmluZyBDbGlwYm9hcmRDaHJvbWl1bTo6Z2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGJvb2wm
IHN1Y2Nlc3MpIGNvbnN0CkBAIC0xNjUsODAgKzEwNyw3IEBAIFN0cmluZyBDbGlwYm9hcmRDaHJv
bWl1bTo6Z2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGJvb2wmIHN1Y2Nlc3MpIGNvbnN0CiAg
ICAgaWYgKHBvbGljeSgpICE9IENsaXBib2FyZFJlYWRhYmxlIHx8ICFtX2RhdGFPYmplY3QpCiAg
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAotICAgIENsaXBib2FyZERhdGFUeXBlIGRhdGFUeXBl
ID0gY2xpcGJvYXJkVHlwZUZyb21NSU1FVHlwZSh0eXBlKTsKLSAgICBzd2l0Y2ggKGRhdGFUeXBl
KSB7Ci0gICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZU5vbmU6Ci0gICAgICAgIHJldHVybiBTdHJp
bmcoKTsKLQotICAgIC8vIEhhY2sgZm9yIFVSTHMuIGZpbGUgVVJMcyBhcmUgdXNlZCBpbnRlcm5h
bGx5IGZvciBkcm9wJ3MgZGVmYXVsdCBhY3Rpb24sIGJ1dCB3ZSBkb24ndCB3YW50Ci0gICAgLy8g
dG8gZXhwb3NlIHRoZW0gdG8gdGhlIHBhZ2UsIHNvIHdlIGZpbHRlciB0aGVtIG91dCBoZXJlLgot
ICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVVUklMaXN0OgotICAgICAgICB7Ci0gICAgICAgICAg
ICBTdHJpbmcgdGV4dDsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9kYXRh
T2JqZWN0LT51cmlMaXN0LnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgU3Ry
aW5nJiB1cmkgPSBtX2RhdGFPYmplY3QtPnVyaUxpc3RbaV07Ci0gICAgICAgICAgICAgICAgaWYg
KHByb3RvY29sSXModXJpLCAiZmlsZSIpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgICAgICBBU1NFUlQoIXVyaS5pc0VtcHR5KCkpOwotICAgICAgICAgICAgICAg
IGlmICghdGV4dC5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgICAgIHRleHQuYXBwZW5kKHRl
eHRNSU1FVHlwZUxpbmVTZXBhcmF0b3IpOwotICAgICAgICAgICAgICAgIC8vIFVSSXMgaGF2ZSBh
bHJlYWR5IGJlZW4gY2Fub25pY2FsaXplZCwgc28gY29weSBldmVyeXRoaW5nIHZlcmJhdGltLgot
ICAgICAgICAgICAgICAgIHRleHQuYXBwZW5kKHVyaSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBzdWNjZXNzID0gIXRleHQuaXNFbXB0eSgpOwotICAgICAgICAgICAgcmV0dXJuIHRleHQ7
Ci0gICAgICAgIH0KLQotICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVVUkw6Ci0gICAgICAgIC8v
IEluIGNhc2Ugb2YgYSBwcmV2aW91cyBzZXREYXRhKCd0ZXh0L3VyaS1saXN0JyksIHNldERhdGEo
KSBoYXMgYWxyZWFkeQotICAgICAgICAvLyBwcmVwYXJlZCB0aGUgJ3VybCcgbWVtYmVyLCBzbyB3
ZSBjYW4ganVzdCByZXRyaWV2ZSBpdCBoZXJlLgotICAgICAgICBpZiAoIW1fZGF0YU9iamVjdC0+
dXJsLmlzRW1wdHkoKSAmJiAhbV9kYXRhT2JqZWN0LT51cmwuaXNMb2NhbEZpbGUoKSkgewotICAg
ICAgICAgICAgc3VjY2VzcyA9IHRydWU7Ci0gICAgICAgICAgICByZXR1cm4gbV9kYXRhT2JqZWN0
LT51cmwuc3RyaW5nKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0g
ICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZURvd25sb2FkVVJMOgotICAgICAgICBzdWNjZXNzID0g
IW1fZGF0YU9iamVjdC0+ZG93bmxvYWRNZXRhZGF0YS5pc0VtcHR5KCk7Ci0gICAgICAgIHJldHVy
biBtX2RhdGFPYmplY3QtPmRvd25sb2FkTWV0YWRhdGE7Ci0gICAgCi0gICAgY2FzZSBDbGlwYm9h
cmREYXRhVHlwZVBsYWluVGV4dDoKLSAgICAgICAgaWYgKGlzRm9yQ29weUFuZFBhc3RlKCkpIHsK
LSAgICAgICAgICAgIFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIgYnVmZmVyID0g
Ci0gICAgICAgICAgICAgICAgUGFzdGVib2FyZDo6Z2VuZXJhbFBhc3RlYm9hcmQoKS0+aXNTZWxl
Y3Rpb25Nb2RlKCkgPwotICAgICAgICAgICAgICAgIFBhc3RlYm9hcmRQcml2YXRlOjpTZWxlY3Rp
b25CdWZmZXIgOiAKLSAgICAgICAgICAgICAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6U3RhbmRhcmRC
dWZmZXI7Ci0gICAgICAgICAgICBTdHJpbmcgdGV4dCA9IENocm9taXVtQnJpZGdlOjpjbGlwYm9h
cmRSZWFkUGxhaW5UZXh0KGJ1ZmZlcik7Ci0gICAgICAgICAgICBzdWNjZXNzID0gIXRleHQuaXNF
bXB0eSgpOwotICAgICAgICAgICAgcmV0dXJuIHRleHQ7Ci0gICAgICAgIH0KLSAgICAgICAgLy8g
T3RoZXJ3aXNlIHJldHVybiB3aGF0ZXZlciBpcyBzdG9yZWQgaW4gcGxhaW5UZXh0LgotICAgICAg
ICBzdWNjZXNzID0gIW1fZGF0YU9iamVjdC0+cGxhaW5UZXh0LmlzRW1wdHkoKTsKLSAgICAgICAg
cmV0dXJuIG1fZGF0YU9iamVjdC0+cGxhaW5UZXh0OwotCi0gICAgY2FzZSBDbGlwYm9hcmREYXRh
VHlwZUhUTUw6Ci0gICAgICAgIGlmIChpc0ZvckNvcHlBbmRQYXN0ZSgpKSB7Ci0gICAgICAgICAg
ICBQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyIGJ1ZmZlciA9IAotICAgICAgICAg
ICAgICAgIFBhc3RlYm9hcmQ6OmdlbmVyYWxQYXN0ZWJvYXJkKCktPmlzU2VsZWN0aW9uTW9kZSgp
ID8KLSAgICAgICAgICAgICAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6U2VsZWN0aW9uQnVmZmVyIDog
Ci0gICAgICAgICAgICAgICAgUGFzdGVib2FyZFByaXZhdGU6OlN0YW5kYXJkQnVmZmVyOwotICAg
ICAgICAgICAgU3RyaW5nIGh0bWxUZXh0OwotICAgICAgICAgICAgS1VSTCBzb3VyY2VVUkw7Ci0g
ICAgICAgICAgICBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkUmVhZEhUTUwoYnVmZmVyLCAmaHRt
bFRleHQsICZzb3VyY2VVUkwpOwotICAgICAgICAgICAgc3VjY2VzcyA9ICFodG1sVGV4dC5pc0Vt
cHR5KCk7Ci0gICAgICAgICAgICByZXR1cm4gaHRtbFRleHQ7Ci0gICAgICAgIH0KLSAgICAgICAg
Ly8gT3RoZXJ3aXNlIHJldHVybiB3aGF0ZXZlciBpcyBzdG9yZWQgaW4gdGV4dEh0bWwuCi0gICAg
ICAgIHN1Y2Nlc3MgPSAhbV9kYXRhT2JqZWN0LT50ZXh0SHRtbC5pc0VtcHR5KCk7Ci0gICAgICAg
IHJldHVybiBtX2RhdGFPYmplY3QtPnRleHRIdG1sOwotCi0gICAgY2FzZSBDbGlwYm9hcmREYXRh
VHlwZU90aGVyOgotICAgICAgICAvLyBub3QgeWV0IGltcGxlbWVudGVkLCBzZWUgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM0NDEwCi0gICAgICAgIHJldHVybiBTdHJp
bmcoKTsKLSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gU3Ry
aW5nKCk7CisgICAgcmV0dXJuIG1fZGF0YU9iamVjdC0+Z2V0RGF0YShub3JtYWxpemVUeXBlKHR5
cGUpLCBzdWNjZXNzKTsKIH0KIAogYm9vbCBDbGlwYm9hcmRDaHJvbWl1bTo6c2V0RGF0YShjb25z
dCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSkKQEAgLTI0Niw2OSArMTE1LDcgQEAg
Ym9vbCBDbGlwYm9hcmRDaHJvbWl1bTo6c2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0
IFN0cmluZyYgZGF0YSkKICAgICBpZiAocG9saWN5KCkgIT0gQ2xpcGJvYXJkV3JpdGFibGUpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIENsaXBib2FyZERhdGFUeXBlIGRhdGFUeXBlID0g
Y2xpcGJvYXJkVHlwZUZyb21NSU1FVHlwZSh0eXBlKTsKLSAgICBzd2l0Y2ggKGRhdGFUeXBlKSB7
Ci0gICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZU5vbmU6Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVVUkw6Ci0gICAgICAgIC8vIEZvciBzZXREYXRh
KCksICJVUkwiIG11c3QgYmUgdHJlYXRlZCBhcyAidGV4dC91cmktbGlzdCIuCi0gICAgICAgIC8v
IChTZWUgSFRNTDUgc3BlYywgIlRoZSBEcmFnRXZlbnQgYW5kIERhdGFUcmFuc2ZlciBpbnRlcmZh
Y2VzIikKLSAgICBjYXNlIENsaXBib2FyZERhdGFUeXBlVVJJTGlzdDoKLSAgICAgICAgbV9kYXRh
T2JqZWN0LT51cmwgPSBLVVJMKCk7Ci0gICAgICAgIC8vIExpbmUgc2VwYXJhdG9yIGlzIFxyXG4g
cGVyIFJGQyAyNDgzIC0gaG93ZXZlciwgZm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucwotICAgICAg
ICAvLyB3ZSBhbHNvIGFsbG93IGp1c3QgXG4gaGVyZS4gCi0gICAgICAgIGRhdGEuc3BsaXQoJ1xu
JywgbV9kYXRhT2JqZWN0LT51cmlMaXN0KTsKLSAgICAgICAgLy8gU3RyaXAgd2hpdGUgc3BhY2Ug
b24gYWxsIGxpbmVzLCBpbmNsdWRpbmcgdHJhaWxpbmcgXHIgZnJvbSBhYm92ZSBzcGxpdC4KLSAg
ICAgICAgLy8gSWYgdGhpcyBsZWF2ZXMgYSBsaW5lIGVtcHR5LCByZW1vdmUgaXQgY29tcGxldGVs
eS4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gQWxzbywgY29weSB0aGUgZmlyc3QgdmFsaWQgVVJM
IGludG8gdGhlICd1cmwnIG1lbWJlciBhcyB3ZWxsLgotICAgICAgICAvLyBJbiBjYXNlIG5vIGVu
dHJ5IGlzIGEgdmFsaWQgVVJMIChpLmUuLCByZW1hcmtzIG9ubHkpLCB0aGVuIHdlIGxlYXZlICd1
cmwnIGVtcHR5LgotICAgICAgICAvLyBJLmUuLCBpbiB0aGF0IGNhc2Ugc3Vic2VxdWVudCBjYWxs
cyB0byBnZXREYXRhKCJVUkwiKSB3aWxsIGdldCBhbiBlbXB0eSBzdHJpbmcuCi0gICAgICAgIC8v
IFRoaXMgaXMgaW4gbGluZSB3aXRoIHRoZSBIVE1MNSBzcGVjIChzZWUgIlRoZSBEcmFnRXZlbnQg
YW5kIERhdGFUcmFuc2ZlciBpbnRlcmZhY2VzIikuCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV9kYXRhT2JqZWN0LT51cmlMaXN0LnNpemUoKTsgLyoqLykgewotICAgICAgICAgICAg
U3RyaW5nJiBsaW5lID0gbV9kYXRhT2JqZWN0LT51cmlMaXN0W2ldOwotICAgICAgICAgICAgbGlu
ZSA9IGxpbmUuc3RyaXBXaGl0ZVNwYWNlKCk7Ci0gICAgICAgICAgICBpZiAobGluZS5pc0VtcHR5
KCkpIHsKLSAgICAgICAgICAgICAgICBtX2RhdGFPYmplY3QtPnVyaUxpc3QucmVtb3ZlKGkpOwot
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgKytp
OwotICAgICAgICAgICAgLy8gT25seSBjb3B5IHRoZSBmaXJzdCB2YWxpZCBVUkwuCi0gICAgICAg
ICAgICBpZiAobV9kYXRhT2JqZWN0LT51cmwuaXNWYWxpZCgpKQotICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgLy8gU2tpcCByZW1hcmtzLgotICAgICAgICAgICAgaWYgKGxp
bmVbMF0gPT0gJyMnKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgS1VS
TCB1cmwgPSBLVVJMKFBhcnNlZFVSTFN0cmluZywgbGluZSk7Ci0gICAgICAgICAgICBpZiAodXJs
LmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICBtX2RhdGFPYmplY3QtPnVybCA9IHVybDsKLSAg
ICAgICAgfQotICAgICAgICBpZiAobV9kYXRhT2JqZWN0LT51cmlMaXN0LmlzRW1wdHkoKSkgewot
ICAgICAgICAgICAgQVNTRVJUKG1fZGF0YU9iamVjdC0+dXJsLmlzRW1wdHkoKSk7Ci0gICAgICAg
ICAgICByZXR1cm4gZGF0YS5pc0VtcHR5KCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0KLSAgICBjYXNlIENsaXBib2FyZERhdGFUeXBlRG93bmxvYWRVUkw6Ci0gICAgICAgIG1f
ZGF0YU9iamVjdC0+ZG93bmxvYWRNZXRhZGF0YSA9IGRhdGE7Ci0gICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZVBsYWluVGV4dDoKLSAgICAgICAgbV9kYXRh
T2JqZWN0LT5wbGFpblRleHQgPSBkYXRhOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGNh
c2UgQ2xpcGJvYXJkRGF0YVR5cGVIVE1MOgotICAgICAgICBtX2RhdGFPYmplY3QtPnRleHRIdG1s
ID0gZGF0YTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBjYXNlIENsaXBib2FyZERhdGFU
eXBlT3RoZXI6Ci0gICAgICAgIC8vIE5vdCB5ZXQgaW1wbGVtZW50ZWQsIHNlZSBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQ0MTAKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLSAgICAKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFs
c2U7CisgICAgcmV0dXJuIG1fZGF0YU9iamVjdC0+c2V0RGF0YShub3JtYWxpemVUeXBlKHR5cGUp
LCBkYXRhKTsKIH0KIAogLy8gZXh0ZW5zaW9ucyBiZXlvbmQgSUUncyBBUEkKQEAgLTMyMSwzMyAr
MTI4LDcgQEAgSGFzaFNldDxTdHJpbmc+IENsaXBib2FyZENocm9taXVtOjp0eXBlcygpIGNvbnN0
CiAgICAgaWYgKCFtX2RhdGFPYmplY3QpCiAgICAgICAgIHJldHVybiByZXN1bHRzOwogCi0gICAg
aWYgKCFtX2RhdGFPYmplY3QtPmZpbGVuYW1lcy5pc0VtcHR5KCkpCi0gICAgICAgIHJlc3VsdHMu
YWRkKCJGaWxlcyIpOwotCi0gICAgLy8gSGFjayBmb3IgVVJMcy4gZmlsZSBVUkxzIGFyZSB1c2Vk
IGludGVybmFsbHkgZm9yIGRyb3AncyBkZWZhdWx0IGFjdGlvbiwgYnV0IHdlIGRvbid0IHdhbnQK
LSAgICAvLyB0byBleHBvc2UgdGhlbSB0byB0aGUgcGFnZSwgc28gd2UgZmlsdGVyIHRoZW0gb3V0
IGhlcmUuCi0gICAgaWYgKG1fZGF0YU9iamVjdC0+dXJsLmlzVmFsaWQoKSAmJiAhbV9kYXRhT2Jq
ZWN0LT51cmwuaXNMb2NhbEZpbGUoKSkgewotICAgICAgICBBU1NFUlQoIW1fZGF0YU9iamVjdC0+
dXJpTGlzdC5pc0VtcHR5KCkpOwotICAgICAgICByZXN1bHRzLmFkZCgiVVJMIik7Ci0gICAgfQot
Ci0gICAgaWYgKCFtX2RhdGFPYmplY3QtPnVyaUxpc3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgIC8v
IFZlcmlmeSB0aGF0IHRoZSBVUkkgbGlzdCBjb250YWlucyBhdCBsZWFzdCBvbmUgbm9uLWZpbGUg
VVJMLgotICAgICAgICBmb3IgKFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1f
ZGF0YU9iamVjdC0+dXJpTGlzdC5iZWdpbigpOwotICAgICAgICAgICAgIGl0ICE9IG1fZGF0YU9i
amVjdC0+dXJpTGlzdC5lbmQoKTsgKytpdCkgewotICAgICAgICAgICAgaWYgKCFwcm90b2NvbElz
KCppdCwgImZpbGUiKSkgewotICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCBldmVuIGlmIHRo
ZSBVUkkgbGlzdCBpcyBub3QgZW1wdHksIGl0IG1heSBub3QgYWN0dWFsbHkKLSAgICAgICAgICAg
ICAgICAvLyBjb250YWluIGEgdmFsaWQgVVJMLCBzbyB3ZSBjYW4ndCByZXR1cm4gIlVSTCIgaGVy
ZS4KLSAgICAgICAgICAgICAgICByZXN1bHRzLmFkZCgidGV4dC91cmktbGlzdCIpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAg
aWYgKCFtX2RhdGFPYmplY3QtPnBsYWluVGV4dC5pc0VtcHR5KCkpIHsKLSAgICAgICAgcmVzdWx0
cy5hZGQoIlRleHQiKTsKLSAgICAgICAgcmVzdWx0cy5hZGQoInRleHQvcGxhaW4iKTsKLSAgICB9
CisgICAgcmVzdWx0cyA9IG1fZGF0YU9iamVjdC0+dHlwZXMoKTsKIAogICAgIHJldHVybiByZXN1
bHRzOwogfQpAQCAtMzU3LDEyICsxMzgsMTMgQEAgUGFzc1JlZlB0cjxGaWxlTGlzdD4gQ2xpcGJv
YXJkQ2hyb21pdW06OmZpbGVzKCkgY29uc3QKICAgICBpZiAocG9saWN5KCkgIT0gQ2xpcGJvYXJk
UmVhZGFibGUpCiAgICAgICAgIHJldHVybiBGaWxlTGlzdDo6Y3JlYXRlKCk7CiAKLSAgICBpZiAo
IW1fZGF0YU9iamVjdCB8fCBtX2RhdGFPYmplY3QtPmZpbGVuYW1lcy5pc0VtcHR5KCkpCisgICAg
aWYgKCFtX2RhdGFPYmplY3QpCiAgICAgICAgIHJldHVybiBGaWxlTGlzdDo6Y3JlYXRlKCk7CiAK
KyAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVzID0gbV9kYXRhT2JqZWN0LT5maWxl
bmFtZXMoKTsKICAgICBSZWZQdHI8RmlsZUxpc3Q+IGZpbGVMaXN0ID0gRmlsZUxpc3Q6OmNyZWF0
ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9kYXRhT2JqZWN0LT5maWxlbmFtZXMu
c2l6ZSgpOyArK2kpCi0gICAgICAgIGZpbGVMaXN0LT5hcHBlbmQoRmlsZTo6Y3JlYXRlKG1fZGF0
YU9iamVjdC0+ZmlsZW5hbWVzLmF0KGkpKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBm
aWxlbmFtZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIGZpbGVMaXN0LT5hcHBlbmQoRmlsZTo6Y3Jl
YXRlKGZpbGVuYW1lcy5hdChpKSkpOwogCiAgICAgcmV0dXJuIGZpbGVMaXN0LnJlbGVhc2UoKTsK
IH0KQEAgLTQ2MSw3ICsyNDMsNyBAQCBzdGF0aWMgdm9pZCB3cml0ZUltYWdlVG9EYXRhT2JqZWN0
KENocm9taXVtRGF0YU9iamVjdCogZGF0YU9iamVjdCwgRWxlbWVudCogZWxlbQogICAgIGlmICgh
aW1hZ2VCdWZmZXIgfHwgIWltYWdlQnVmZmVyLT5zaXplKCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGRhdGFPYmplY3QtPmZpbGVDb250ZW50ID0gaW1hZ2VCdWZmZXI7CisgICAgZGF0YU9iamVj
dC0+c2V0RmlsZUNvbnRlbnQoaW1hZ2VCdWZmZXIpOwogCiAgICAgLy8gRGV0ZXJtaW5lIHRoZSBm
aWxlbmFtZSBmb3IgdGhlIGZpbGUgY29udGVudHMgb2YgdGhlIGltYWdlLiAgV2UgdHJ5IHRvCiAg
ICAgLy8gdXNlIHRoZSBhbHQgdGFnIGlmIG9uZSBleGlzdHMsIG90aGVyd2lzZSB3ZSBmYWxsIGJh
Y2sgb24gdGhlIHN1Z2dlc3RlZApAQCAtNDY5LDEzICsyNTEsMTMgQEAgc3RhdGljIHZvaWQgd3Jp
dGVJbWFnZVRvRGF0YU9iamVjdChDaHJvbWl1bURhdGFPYmplY3QqIGRhdGFPYmplY3QsIEVsZW1l
bnQqIGVsZW0KICAgICAvLyBpbiB0aGUgVVJMLgogICAgIFN0cmluZyBleHRlbnNpb24gPSBNSU1F
VHlwZVJlZ2lzdHJ5OjpnZXRQcmVmZXJyZWRFeHRlbnNpb25Gb3JNSU1FVHlwZSgKICAgICAgICAg
Y2FjaGVkSW1hZ2UtPnJlc3BvbnNlKCkubWltZVR5cGUoKSk7Ci0gICAgZGF0YU9iamVjdC0+Zmls
ZUV4dGVuc2lvbiA9IGV4dGVuc2lvbi5pc0VtcHR5KCkgPyAiIiA6ICIuIiArIGV4dGVuc2lvbjsK
KyAgICBkYXRhT2JqZWN0LT5zZXRGaWxlRXh0ZW5zaW9uKGV4dGVuc2lvbi5pc0VtcHR5KCkgPyAi
IiA6ICIuIiArIGV4dGVuc2lvbik7CiAgICAgU3RyaW5nIHRpdGxlID0gZWxlbWVudC0+Z2V0QXR0
cmlidXRlKGFsdEF0dHIpOwogICAgIGlmICh0aXRsZS5pc0VtcHR5KCkpCiAgICAgICAgIHRpdGxl
ID0gY2FjaGVkSW1hZ2UtPnJlc3BvbnNlKCkuc3VnZ2VzdGVkRmlsZW5hbWUoKTsKIAogICAgIHRp
dGxlID0gQ2xpcGJvYXJkQ2hyb21pdW06OnZhbGlkYXRlRmlsZU5hbWUodGl0bGUsIGRhdGFPYmpl
Y3QpOwotICAgIGRhdGFPYmplY3QtPmZpbGVDb250ZW50RmlsZW5hbWUgPSB0aXRsZSArIGRhdGFP
YmplY3QtPmZpbGVFeHRlbnNpb247CisgICAgZGF0YU9iamVjdC0+c2V0RmlsZUNvbnRlbnRGaWxl
bmFtZSh0aXRsZSArIGRhdGFPYmplY3QtPmZpbGVFeHRlbnNpb24oKSk7CiB9CiAKIHZvaWQgQ2xp
cGJvYXJkQ2hyb21pdW06OmRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZShFbGVtZW50KiBlbGVtZW50
LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdGl0bGUsIEZyYW1lKiBmcmFtZSkKQEAg
LTQ4Myw4ICsyNjUsOCBAQCB2b2lkIENsaXBib2FyZENocm9taXVtOjpkZWNsYXJlQW5kV3JpdGVE
cmFnSW1hZ2UoRWxlbWVudCogZWxlbWVudCwgY29uc3QgS1VSTCYgdQogICAgIGlmICghbV9kYXRh
T2JqZWN0KQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2RhdGFPYmplY3QtPnVybCA9IHVybDsK
LSAgICBtX2RhdGFPYmplY3QtPnVybFRpdGxlID0gdGl0bGU7CisgICAgbV9kYXRhT2JqZWN0LT5z
ZXREYXRhKG1pbWVUeXBlVVJMLCB1cmwpOworICAgIG1fZGF0YU9iamVjdC0+c2V0VXJsVGl0bGUo
dGl0bGUpOwogCiAgICAgLy8gV3JpdGUgdGhlIGJ5dGVzIGluIHRoZSBpbWFnZSB0byB0aGUgZmls
ZSBmb3JtYXQuCiAgICAgd3JpdGVJbWFnZVRvRGF0YU9iamVjdChtX2RhdGFPYmplY3QuZ2V0KCks
IGVsZW1lbnQsIHVybCk7CkBAIC00OTgsNyArMjgwLDcgQEAgdm9pZCBDbGlwYm9hcmRDaHJvbWl1
bTo6ZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEtVUkwm
IHUKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gUHV0IGltZyB0YWcgb24gdGhlIGNsaXBib2Fy
ZCByZWZlcmVuY2luZyB0aGUgaW1hZ2UKLSAgICBtX2RhdGFPYmplY3QtPnRleHRIdG1sID0gaW1h
Z2VUb01hcmt1cChmdWxsVVJMLCBlbGVtZW50KTsKKyAgICBtX2RhdGFPYmplY3QtPnNldERhdGEo
bWltZVR5cGVUZXh0SFRNTCwgaW1hZ2VUb01hcmt1cChmdWxsVVJMLCBlbGVtZW50KSk7CiB9CiAK
IHZvaWQgQ2xpcGJvYXJkQ2hyb21pdW06OndyaXRlVVJMKGNvbnN0IEtVUkwmIHVybCwgY29uc3Qg
U3RyaW5nJiB0aXRsZSwgRnJhbWUqKQpAQCAtNTA2LDE3ICsyODgsMTUgQEAgdm9pZCBDbGlwYm9h
cmRDaHJvbWl1bTo6d3JpdGVVUkwoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHRpdGxl
LCBGcmFtZSopCiAgICAgaWYgKCFtX2RhdGFPYmplY3QpCiAgICAgICAgIHJldHVybjsKICAgICBB
U1NFUlQoIXVybC5pc0VtcHR5KCkpOwotICAgIG1fZGF0YU9iamVjdC0+dXJsID0gdXJsOwotICAg
IG1fZGF0YU9iamVjdC0+dXJsVGl0bGUgPSB0aXRsZTsKLSAgICBtX2RhdGFPYmplY3QtPnVyaUxp
c3QuY2xlYXIoKTsKLSAgICBtX2RhdGFPYmplY3QtPnVyaUxpc3QuYXBwZW5kKHVybCk7CisgICAg
bV9kYXRhT2JqZWN0LT5zZXREYXRhKG1pbWVUeXBlVVJMLCB1cmwpOworICAgIG1fZGF0YU9iamVj
dC0+c2V0VXJsVGl0bGUodGl0bGUpOwogCiAgICAgLy8gVGhlIFVSTCBjYW4gYWxzbyBiZSB1c2Vk
IGFzIHBsYWluIHRleHQuCi0gICAgbV9kYXRhT2JqZWN0LT5wbGFpblRleHQgPSB1cmwuc3RyaW5n
KCk7CisgICAgbV9kYXRhT2JqZWN0LT5zZXREYXRhKG1pbWVUeXBlVGV4dFBsYWluLCB1cmwuc3Ry
aW5nKCkpOwogCiAgICAgLy8gVGhlIFVSTCBjYW4gYWxzbyBiZSB1c2VkIGFzIGFuIEhUTUwgZnJh
Z21lbnQuCi0gICAgbV9kYXRhT2JqZWN0LT50ZXh0SHRtbCA9IHVybFRvTWFya3VwKHVybCwgdGl0
bGUpOwotICAgIG1fZGF0YU9iamVjdC0+aHRtbEJhc2VVcmwgPSB1cmw7CisgICAgbV9kYXRhT2Jq
ZWN0LT5zZXREYXRhKG1pbWVUeXBlVGV4dEhUTUwsIHVybFRvTWFya3VwKHVybCwgdGl0bGUpKTsK
KyAgICBtX2RhdGFPYmplY3QtPnNldEh0bWxCYXNlVXJsKHVybCk7CiB9CiAKIHZvaWQgQ2xpcGJv
YXJkQ2hyb21pdW06OndyaXRlUmFuZ2UoUmFuZ2UqIHNlbGVjdGVkUmFuZ2UsIEZyYW1lKiBmcmFt
ZSkKQEAgLTUyNSwxNSArMzA1LDE1IEBAIHZvaWQgQ2xpcGJvYXJkQ2hyb21pdW06OndyaXRlUmFu
Z2UoUmFuZ2UqIHNlbGVjdGVkUmFuZ2UsIEZyYW1lKiBmcmFtZSkKICAgICBpZiAoIW1fZGF0YU9i
amVjdCkKICAgICAgICAgIHJldHVybjsKIAotICAgIG1fZGF0YU9iamVjdC0+dGV4dEh0bWwgPSBj
cmVhdGVNYXJrdXAoc2VsZWN0ZWRSYW5nZSwgMCwgQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSwgZmFs
c2UsIEFic29sdXRlVVJMcyk7Ci0gICAgbV9kYXRhT2JqZWN0LT5odG1sQmFzZVVybCA9IGZyYW1l
LT5kb2N1bWVudCgpLT51cmwoKTsKKyAgICBtX2RhdGFPYmplY3QtPnNldERhdGEobWltZVR5cGVU
ZXh0SFRNTCwgY3JlYXRlTWFya3VwKHNlbGVjdGVkUmFuZ2UsIDAsIEFubm90YXRlRm9ySW50ZXJj
aGFuZ2UsIGZhbHNlLCBBYnNvbHV0ZVVSTHMpKTsKKyAgICBtX2RhdGFPYmplY3QtPnNldEh0bWxC
YXNlVXJsKGZyYW1lLT5kb2N1bWVudCgpLT51cmwoKSk7CiAKICAgICBTdHJpbmcgc3RyID0gZnJh
bWUtPmVkaXRvcigpLT5zZWxlY3RlZFRleHQoKTsKICNpZiBPUyhXSU5ET1dTKQogICAgIHJlcGxh
Y2VOZXdsaW5lc1dpdGhXaW5kb3dzU3R5bGVOZXdsaW5lcyhzdHIpOwogI2VuZGlmCiAgICAgcmVw
bGFjZU5CU1BXaXRoU3BhY2Uoc3RyKTsKLSAgICBtX2RhdGFPYmplY3QtPnBsYWluVGV4dCA9IHN0
cjsKKyAgICBtX2RhdGFPYmplY3QtPnNldERhdGEobWltZVR5cGVUZXh0UGxhaW4sIHN0cik7CiB9
CiAKIHZvaWQgQ2xpcGJvYXJkQ2hyb21pdW06OndyaXRlUGxhaW5UZXh0KGNvbnN0IFN0cmluZyYg
dGV4dCkKQEAgLTU0Niw3ICszMjYsNyBAQCB2b2lkIENsaXBib2FyZENocm9taXVtOjp3cml0ZVBs
YWluVGV4dChjb25zdCBTdHJpbmcmIHRleHQpCiAgICAgcmVwbGFjZU5ld2xpbmVzV2l0aFdpbmRv
d3NTdHlsZU5ld2xpbmVzKHN0cik7CiAjZW5kaWYKICAgICByZXBsYWNlTkJTUFdpdGhTcGFjZShz
dHIpOwotICAgIG1fZGF0YU9iamVjdC0+cGxhaW5UZXh0ID0gc3RyOworICAgIG1fZGF0YU9iamVj
dC0+c2V0RGF0YShtaW1lVHlwZVRleHRQbGFpbiwgc3RyKTsKIH0KIAogYm9vbCBDbGlwYm9hcmRD
aHJvbWl1bTo6aGFzRGF0YSgpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVt
L0NsaXBib2FyZENocm9taXVtV2luLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xp
cGJvYXJkQ2hyb21pdW1XaW4uY3BwCmluZGV4IGI0YTJjMjEuLmQ5YmJlYjUgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW1XaW4uY3BwCisrKyBi
L1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW1XaW4uY3BwCkBAIC00
NCwxMSArNDQsMTEgQEAgU3RyaW5nIENsaXBib2FyZENocm9taXVtOjp2YWxpZGF0ZUZpbGVOYW1l
KGNvbnN0IFN0cmluZyYgdGl0bGUsIENocm9taXVtRGF0YU9iamUKIHsKICAgICAvLyBSZW1vdmUg
YW55IGludmFsaWQgZmlsZSBzeXN0ZW0gY2hhcmFjdGVycy4KICAgICBTdHJpbmcgcmVzdWx0ID0g
dGl0bGUucmVtb3ZlQ2hhcmFjdGVycygmaXNJbnZhbGlkRmlsZUNoYXJhY3Rlcik7Ci0gICAgaWYg
KHJlc3VsdC5sZW5ndGgoKSArIGRhdGFPYmplY3QtPmZpbGVFeHRlbnNpb24ubGVuZ3RoKCkgKyAx
ID49IE1BWF9QQVRIKSB7Ci0gICAgICAgIGlmIChkYXRhT2JqZWN0LT5maWxlRXh0ZW5zaW9uLmxl
bmd0aCgpICsgMSA+PSBNQVhfUEFUSCkKLSAgICAgICAgICAgIGRhdGFPYmplY3QtPmZpbGVFeHRl
bnNpb24gPSAiIjsKLSAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGgoKSArIGRhdGFPYmplY3QtPmZp
bGVFeHRlbnNpb24ubGVuZ3RoKCkgKyAxID49IE1BWF9QQVRIKQotICAgICAgICAgICAgcmVzdWx0
ID0gcmVzdWx0LnN1YnN0cmluZygwLCBNQVhfUEFUSCAtIGRhdGFPYmplY3QtPmZpbGVFeHRlbnNp
b24ubGVuZ3RoKCkgLSAxKTsKKyAgICBpZiAocmVzdWx0Lmxlbmd0aCgpICsgZGF0YU9iamVjdC0+
ZmlsZUV4dGVuc2lvbigpLmxlbmd0aCgpICsgMSA+PSBNQVhfUEFUSCkgeworICAgICAgICBpZiAo
ZGF0YU9iamVjdC0+ZmlsZUV4dGVuc2lvbigpLmxlbmd0aCgpICsgMSA+PSBNQVhfUEFUSCkKKyAg
ICAgICAgICAgIGRhdGFPYmplY3QtPnNldEZpbGVFeHRlbnNpb24oIiIpOworICAgICAgICBpZiAo
cmVzdWx0Lmxlbmd0aCgpICsgZGF0YU9iamVjdC0+ZmlsZUV4dGVuc2lvbigpLmxlbmd0aCgpICsg
MSA+PSBNQVhfUEFUSCkKKyAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5zdWJzdHJpbmcoMCwg
TUFYX1BBVEggLSBkYXRhT2JqZWN0LT5maWxlRXh0ZW5zaW9uKCkubGVuZ3RoKCkgLSAxKTsKICAg
ICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
Y2hyb21pdW0vQ2xpcGJvYXJkTWltZVR5cGVzLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vQ2xpcGJvYXJkTWltZVR5cGVzLmNwcAppbmRleCBiOTU3NDRmLi5hMjEzZGEwIDEwMDY0NAot
LS0gYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZE1pbWVUeXBlcy5jcHAKKysr
IGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRNaW1lVHlwZXMuY3BwCkBAIC0z
Myw4ICszMywxMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNvbnN0IGNoYXIgdGV4dFBs
YWluVHlwZVtdID0gInRleHQvcGxhaW4iOwotY29uc3QgY2hhciB0ZXh0SHRtbFR5cGVbXSA9ICJ0
ZXh0L2h0bWwiOwotY29uc3QgY2hhciB0ZXh0VXJpTGlzdFR5cGVbXSA9ICJ0ZXh0L3VyaS1saXN0
IjsKK2NvbnN0IGNoYXIgbWltZVR5cGVUZXh0W10gPSAidGV4dC9wbGFpbiI7Citjb25zdCBjaGFy
IG1pbWVUeXBlVGV4dFBsYWluW10gPSAidGV4dC9wbGFpbiI7Citjb25zdCBjaGFyIG1pbWVUeXBl
VGV4dFBsYWluRXRjW10gPSAidGV4dC9wbGFpbjsiOworY29uc3QgY2hhciBtaW1lVHlwZVRleHRI
VE1MW10gPSAidGV4dC9odG1sIjsKK2NvbnN0IGNoYXIgbWltZVR5cGVVUkxbXSA9ICJ1cmwiOwor
Y29uc3QgY2hhciBtaW1lVHlwZVRleHRVUklMaXN0W10gPSAidGV4dC91cmktbGlzdCI7Citjb25z
dCBjaGFyIG1pbWVUeXBlRG93bmxvYWRVUkxbXSA9ICJkb3dubG9hZHVybCI7CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xp
cGJvYXJkTWltZVR5cGVzLmggYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZE1p
bWVUeXBlcy5oCmluZGV4IGQ3NDY4ZjIuLjliZGNjZmUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkTWltZVR5cGVzLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9y
bS9jaHJvbWl1bS9DbGlwYm9hcmRNaW1lVHlwZXMuaApAQCAtMzMsOSArMzMsMTMgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1leHRlcm4gY29uc3QgY2hhciB0ZXh0UGxhaW5UeXBlW107Ci1l
eHRlcm4gY29uc3QgY2hhciB0ZXh0SHRtbFR5cGVbXTsKLWV4dGVybiBjb25zdCBjaGFyIHRleHRV
cmlMaXN0VHlwZVtdOworZXh0ZXJuIGNvbnN0IGNoYXIgbWltZVR5cGVUZXh0W107CitleHRlcm4g
Y29uc3QgY2hhciBtaW1lVHlwZVRleHRQbGFpbltdOworZXh0ZXJuIGNvbnN0IGNoYXIgbWltZVR5
cGVUZXh0UGxhaW5FdGNbXTsKK2V4dGVybiBjb25zdCBjaGFyIG1pbWVUeXBlVGV4dEhUTUxbXTsK
K2V4dGVybiBjb25zdCBjaGFyIG1pbWVUeXBlVVJMW107CitleHRlcm4gY29uc3QgY2hhciBtaW1l
VHlwZVRleHRVUklMaXN0W107CitleHRlcm4gY29uc3QgY2hhciBtaW1lVHlwZURvd25sb2FkVVJM
W107CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9EcmFnRGF0YUNocm9taXVtLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vRHJhZ0RhdGFDaHJvbWl1bS5jcHAKaW5kZXggNjc0ZDM0ZC4uZmU1NjYzZiAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EcmFnRGF0YUNocm9taXVtLmNwcAorKysg
Yi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RyYWdEYXRhQ2hyb21pdW0uY3BwCkBAIC0zMiw2
ICszMiw3IEBACiAKICNpbmNsdWRlICJDaHJvbWl1bUJyaWRnZS5oIgogI2luY2x1ZGUgIkNocm9t
aXVtRGF0YU9iamVjdC5oIgorI2luY2x1ZGUgIkNsaXBib2FyZE1pbWVUeXBlcy5oIgogI2luY2x1
ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKICNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCiAjaW5jbHVk
ZSAiS1VSTC5oIgpAQCAtNDMsNTAgKzQ0LDUwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3Rh
dGljIGJvb2wgY29udGFpbnNIVE1MKGNvbnN0IENocm9taXVtRGF0YU9iamVjdCogZHJvcERhdGEp
CiB7Ci0gICAgcmV0dXJuIGRyb3BEYXRhLT50ZXh0SHRtbC5sZW5ndGgoKSA+IDA7CisgICAgcmV0
dXJuIGRyb3BEYXRhLT50eXBlcygpLmNvbnRhaW5zKG1pbWVUeXBlVGV4dEhUTUwpOwogfQogCiBi
b29sIERyYWdEYXRhOjpjb250YWluc1VSTChGaWxlbmFtZUNvbnZlcnNpb25Qb2xpY3kgZmlsZW5h
bWVQb2xpY3kpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICFhc1VSTChmaWxlbmFtZVBvbGljeSkuaXNF
bXB0eSgpOworICAgIHJldHVybiBtX3BsYXRmb3JtRHJhZ0RhdGEtPnR5cGVzKCkuY29udGFpbnMo
bWltZVR5cGVVUkwpCisgICAgICAgIHx8IChmaWxlbmFtZVBvbGljeSA9PSBDb252ZXJ0RmlsZW5h
bWVzICYmIG1fcGxhdGZvcm1EcmFnRGF0YS0+Y29udGFpbnNGaWxlbmFtZXMoKSk7CiB9CiAKIFN0
cmluZyBEcmFnRGF0YTo6YXNVUkwoRmlsZW5hbWVDb252ZXJzaW9uUG9saWN5IGZpbGVuYW1lUG9s
aWN5LCBTdHJpbmcqIHRpdGxlKSBjb25zdAogewogICAgIFN0cmluZyB1cmw7Ci0gICAgaWYgKG1f
cGxhdGZvcm1EcmFnRGF0YS0+aGFzVmFsaWRVUkwoKSkKLSAgICAgICAgdXJsID0gbV9wbGF0Zm9y
bURyYWdEYXRhLT5nZXRVUkwoKS5zdHJpbmcoKTsKLSAgICBlbHNlIGlmIChmaWxlbmFtZVBvbGlj
eSA9PSBDb252ZXJ0RmlsZW5hbWVzICYmICFtX3BsYXRmb3JtRHJhZ0RhdGEtPmZpbGVuYW1lcy5p
c0VtcHR5KCkpIHsKLSAgICAgICAgU3RyaW5nIGZpbGVOYW1lID0gbV9wbGF0Zm9ybURyYWdEYXRh
LT5maWxlbmFtZXNbMF07Ci0gICAgICAgIGZpbGVOYW1lID0gQ2hyb21pdW1CcmlkZ2U6OmdldEFi
c29sdXRlUGF0aChmaWxlTmFtZSk7Ci0gICAgICAgIHVybCA9IENocm9taXVtQnJpZGdlOjpmaWxl
UGF0aFRvVVJMKGZpbGVOYW1lKS5zdHJpbmcoKTsKKyAgICBpZiAoY29udGFpbnNVUkwoRG9Ob3RD
b252ZXJ0RmlsZW5hbWVzKSkgeworICAgICAgICBib29sIGlnbm9yZWRTdWNjZXNzOworICAgICAg
ICB1cmwgPSBtX3BsYXRmb3JtRHJhZ0RhdGEtPmdldERhdGEobWltZVR5cGVVUkwsIGlnbm9yZWRT
dWNjZXNzKTsKKyAgICAgICAgaWYgKHRpdGxlKQorICAgICAgICAgICAgKnRpdGxlID0gbV9wbGF0
Zm9ybURyYWdEYXRhLT51cmxUaXRsZSgpOworICAgIH0gZWxzZSBpZiAoZmlsZW5hbWVQb2xpY3kg
PT0gQ29udmVydEZpbGVuYW1lcyAmJiBjb250YWluc0ZpbGVzKCkpIHsKKyAgICAgICAgdXJsID0g
Q2hyb21pdW1CcmlkZ2U6OmZpbGVQYXRoVG9VUkwoQ2hyb21pdW1CcmlkZ2U6OmdldEFic29sdXRl
UGF0aChtX3BsYXRmb3JtRHJhZ0RhdGEtPmZpbGVuYW1lcygpWzBdKSk7CiAgICAgfQotIAotICAg
IC8vIHx0aXRsZXwgY2FuIGJlIE5VTEwKLSAgICBpZiAodGl0bGUpCi0gICAgICAgICp0aXRsZSA9
IG1fcGxhdGZvcm1EcmFnRGF0YS0+dXJsVGl0bGU7CiAgICAgcmV0dXJuIHVybDsKIH0KIAogYm9v
bCBEcmFnRGF0YTo6Y29udGFpbnNGaWxlcygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICFtX3BsYXRm
b3JtRHJhZ0RhdGEtPmZpbGVuYW1lcy5pc0VtcHR5KCk7CisgICAgcmV0dXJuIG1fcGxhdGZvcm1E
cmFnRGF0YS0+Y29udGFpbnNGaWxlbmFtZXMoKTsKIH0KIAogdm9pZCBEcmFnRGF0YTo6YXNGaWxl
bmFtZXMoVmVjdG9yPFN0cmluZz4mIHJlc3VsdCkgY29uc3QKIHsKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fcGxhdGZvcm1EcmFnRGF0YS0+ZmlsZW5hbWVzLnNpemUoKTsgKytpKQotICAg
ICAgICByZXN1bHQuYXBwZW5kKG1fcGxhdGZvcm1EcmFnRGF0YS0+ZmlsZW5hbWVzW2ldKTsKKyAg
ICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVzID0gbV9wbGF0Zm9ybURyYWdEYXRhLT5m
aWxlbmFtZXMoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZpbGVuYW1lcy5zaXplKCk7
ICsraSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZChmaWxlbmFtZXNbaV0pOwogfQogCiBib29sIERy
YWdEYXRhOjpjb250YWluc1BsYWluVGV4dCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICFtX3BsYXRm
b3JtRHJhZ0RhdGEtPnBsYWluVGV4dC5pc0VtcHR5KCk7CisgICAgcmV0dXJuIG1fcGxhdGZvcm1E
cmFnRGF0YS0+dHlwZXMoKS5jb250YWlucyhtaW1lVHlwZVRleHRQbGFpbik7CiB9CiAKIFN0cmlu
ZyBEcmFnRGF0YTo6YXNQbGFpblRleHQoKSBjb25zdAogewotICAgIHJldHVybiBtX3BsYXRmb3Jt
RHJhZ0RhdGEtPnBsYWluVGV4dDsKKyAgICBib29sIGlnbm9yZWRTdWNjZXNzOworICAgIHJldHVy
biBtX3BsYXRmb3JtRHJhZ0RhdGEtPmdldERhdGEobWltZVR5cGVUZXh0UGxhaW4sIGlnbm9yZWRT
dWNjZXNzKTsKIH0KIAogYm9vbCBEcmFnRGF0YTo6Y29udGFpbnNDb2xvcigpIGNvbnN0CkBAIC0x
MDEsOCArMTAyLDggQEAgYm9vbCBEcmFnRGF0YTo6Y2FuU21hcnRSZXBsYWNlKCkgY29uc3QKICAg
ICAvLyBUaGlzIGlzIGFsbG93ZWQgd2hlbmV2ZXIgdGhlIGRyYWcgZGF0YSBjb250YWlucyBhICdy
YW5nZScgKGllLiwKICAgICAvLyBDbGlwYm9hcmRXaW46OndyaXRlUmFuZ2UgaXMgY2FsbGVkKS4g
IEZvciBleGFtcGxlLCBkcmFnZ2luZyBhIGxpbmsKICAgICAvLyBzaG91bGQgbm90IHJlc3VsdCBp
biBhIHNwYWNlIGJlaW5nIGFkZGVkLgotICAgIHJldHVybiAhbV9wbGF0Zm9ybURyYWdEYXRhLT5w
bGFpblRleHQuaXNFbXB0eSgpCi0gICAgICAgICYmICFtX3BsYXRmb3JtRHJhZ0RhdGEtPmhhc1Zh
bGlkVVJMKCk7CisgICAgcmV0dXJuIG1fcGxhdGZvcm1EcmFnRGF0YS0+dHlwZXMoKS5jb250YWlu
cyhtaW1lVHlwZVRleHRQbGFpbikKKyAgICAgICAgJiYgIW1fcGxhdGZvcm1EcmFnRGF0YS0+dHlw
ZXMoKS5jb250YWlucyhtaW1lVHlwZVVSTCk7CiB9CiAKIGJvb2wgRHJhZ0RhdGE6OmNvbnRhaW5z
Q29tcGF0aWJsZUNvbnRlbnQoKSBjb25zdApAQCAtMTM0LDkgKzEzNSwxMCBAQCBQYXNzUmVmUHRy
PERvY3VtZW50RnJhZ21lbnQ+IERyYWdEYXRhOjphc0ZyYWdtZW50KERvY3VtZW50KiBkb2MpIGNv
bnN0CiAgICAgICAgIC8vICAgIHJldHVybiBmcmFnbWVudDsKICAgICB9CiAKLSAgICBpZiAoIW1f
cGxhdGZvcm1EcmFnRGF0YS0+dGV4dEh0bWwuaXNFbXB0eSgpKSB7CisgICAgaWYgKG1fcGxhdGZv
cm1EcmFnRGF0YS0+dHlwZXMoKS5jb250YWlucyhtaW1lVHlwZVRleHRIVE1MKSkgeworICAgICAg
ICBib29sIGlnbm9yZWRTdWNjZXNzOwogICAgICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4g
ZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoZG9jLAotICAgICAgICAgICAgbV9w
bGF0Zm9ybURyYWdEYXRhLT50ZXh0SHRtbCwgbV9wbGF0Zm9ybURyYWdEYXRhLT5odG1sQmFzZVVy
bCwgRnJhZ21lbnRTY3JpcHRpbmdOb3RBbGxvd2VkKTsKKyAgICAgICAgICAgIG1fcGxhdGZvcm1E
cmFnRGF0YS0+Z2V0RGF0YShtaW1lVHlwZVRleHRIVE1MLCBpZ25vcmVkU3VjY2VzcyksIG1fcGxh
dGZvcm1EcmFnRGF0YS0+aHRtbEJhc2VVcmwoKSwgRnJhZ21lbnRTY3JpcHRpbmdOb3RBbGxvd2Vk
KTsKICAgICAgICAgcmV0dXJuIGZyYWdtZW50LnJlbGVhc2UoKTsKICAgICB9CiAKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUmVhZGFibGVEYXRhT2JqZWN0LmNwcCBiL1dl
YkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUmVhZGFibGVEYXRhT2JqZWN0LmNwcAppbmRleCAxYTMz
M2JiLi4wODg2NzNmIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1JlYWRh
YmxlRGF0YU9iamVjdC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9SZWFkYWJs
ZURhdGFPYmplY3QuY3BwCkBAIC04MSw3ICs4MSw3IEBAIFN0cmluZyBSZWFkYWJsZURhdGFPYmpl
Y3Q6OmdldFVSTChTdHJpbmcqIHRpdGxlKSBjb25zdAogICAgIGlmICghdGl0bGUpCiAgICAgICAg
IHRpdGxlID0gJmlnbm9yZWRUaXRsZTsKICAgICBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkUmVh
ZERhdGEoCi0gICAgICAgIGNsaXBib2FyZEJ1ZmZlcihtX2lzRm9yRHJhZ2dpbmcpLCB0ZXh0VXJp
TGlzdFR5cGUsIHVybCwgKnRpdGxlKTsKKyAgICAgICAgY2xpcGJvYXJkQnVmZmVyKG1faXNGb3JE
cmFnZ2luZyksIG1pbWVUeXBlVGV4dFVSSUxpc3QsIHVybCwgKnRpdGxlKTsKICAgICByZXR1cm4g
dXJsOwogfQogCkBAIC05Miw3ICs5Miw3IEBAIFN0cmluZyBSZWFkYWJsZURhdGFPYmplY3Q6Omdl
dEhUTUwoU3RyaW5nKiBiYXNlVVJMKSBjb25zdAogICAgIGlmICghYmFzZVVSTCkKICAgICAgICAg
YmFzZVVSTCA9ICZpZ25vcmVkQmFzZVVSTDsKICAgICBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJk
UmVhZERhdGEoCi0gICAgICAgIGNsaXBib2FyZEJ1ZmZlcihtX2lzRm9yRHJhZ2dpbmcpLCB0ZXh0
SHRtbFR5cGUsIGh0bWwsICpiYXNlVVJMKTsKKyAgICAgICAgY2xpcGJvYXJkQnVmZmVyKG1faXNG
b3JEcmFnZ2luZyksIG1pbWVUeXBlVGV4dEhUTUwsIGh0bWwsICpiYXNlVVJMKTsKICAgICByZXR1
cm4gaHRtbDsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9Xcml0
YWJsZURhdGFPYmplY3QuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9Xcml0YWJsZURh
dGFPYmplY3QuY3BwCmluZGV4IDZlN2MyODMuLmFlZTdiZmMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGxhdGZvcm0vY2hyb21pdW0vV3JpdGFibGVEYXRhT2JqZWN0LmNwcAorKysgYi9XZWJDb3JlL3Bs
YXRmb3JtL2Nocm9taXVtL1dyaXRhYmxlRGF0YU9iamVjdC5jcHAKQEAgLTQ5LDkgKzQ5LDkgQEAg
V3JpdGFibGVEYXRhT2JqZWN0OjpXcml0YWJsZURhdGFPYmplY3QoYm9vbCBpc0ZvckRyYWdnaW5n
KQogdm9pZCBXcml0YWJsZURhdGFPYmplY3Q6OmNsZWFyRGF0YShjb25zdCBTdHJpbmcmIHR5cGUp
CiB7CiAgICAgbV9kYXRhTWFwLnJlbW92ZSh0eXBlKTsKLSAgICBpZiAodHlwZSA9PSB0ZXh0VXJp
TGlzdFR5cGUpCisgICAgaWYgKHR5cGUgPT0gbWltZVR5cGVUZXh0VVJJTGlzdCkKICAgICAgICAg
bV91cmxUaXRsZSA9ICIiOwotICAgIGVsc2UgaWYgKHR5cGUgPT0gdGV4dEh0bWxUeXBlKQorICAg
IGVsc2UgaWYgKHR5cGUgPT0gbWltZVR5cGVUZXh0SFRNTCkKICAgICAgICAgbV9odG1sQmFzZVVS
TCA9IEtVUkwoKTsKIH0KIApAQCAtODEsMjIgKzgxLDIyIEBAIGJvb2wgV3JpdGFibGVEYXRhT2Jq
ZWN0OjpzZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgbV9kYXRhTWFwLnNldCh0eXBlLCBkYXRhKTsK
LSAgICBpZiAodHlwZSA9PSB0ZXh0VXJpTGlzdFR5cGUpCisgICAgaWYgKHR5cGUgPT0gbWltZVR5
cGVUZXh0VVJJTGlzdCkKICAgICAgICAgbV91cmxUaXRsZSA9ICIiOwotICAgIGVsc2UgaWYgKHR5
cGUgPT0gdGV4dEh0bWxUeXBlKQorICAgIGVsc2UgaWYgKHR5cGUgPT0gbWltZVR5cGVUZXh0SFRN
TCkKICAgICAgICAgbV9odG1sQmFzZVVSTCA9IEtVUkwoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAogdm9pZCBXcml0YWJsZURhdGFPYmplY3Q6OnNldFVSTChjb25zdCBTdHJpbmcmIHVybCwgY29u
c3QgU3RyaW5nJiB0aXRsZSkKIHsKLSAgICBzZXREYXRhKHRleHRVcmlMaXN0VHlwZSwgdXJsKTsK
KyAgICBzZXREYXRhKG1pbWVUeXBlVGV4dFVSSUxpc3QsIHVybCk7CiAgICAgbV91cmxUaXRsZSA9
IHRpdGxlOwogfQogCiB2b2lkIFdyaXRhYmxlRGF0YU9iamVjdDo6c2V0SFRNTChjb25zdCBTdHJp
bmcmIGh0bWwsIGNvbnN0IEtVUkwmIGJhc2VVUkwpCiB7Ci0gICAgc2V0RGF0YSh0ZXh0SHRtbFR5
cGUsIGh0bWwpOworICAgIHNldERhdGEobWltZVR5cGVUZXh0SFRNTCwgaHRtbCk7CiAgICAgbV9o
dG1sQmFzZVVSTCA9IGJhc2VVUkw7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDQxYWIwOGQuLjBlNjFl
NzYgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDEwLTA5LTI4ICBEYW5pZWwgQ2hl
bmcgIDxkY2hlbmdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gUmVmYWN0b3IgQ2hyb21pdW1EYXRhT2JqZWN0
IHRvIHVzZSBnZXR0ZXJzL3NldHRlcnMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD00NjU1OQorCisgICAgICAgIFRoaXMgaXMgYW4gaW50ZXJtZWRpYXRl
IHN0ZXAgdG8gY29udmVydGluZyBDaHJvbWl1bURhdGFPYmplY3QgdG8gdXNlCisgICAgICAgIGNh
bGxiYWNrcyB0byB0aGUgYnJvd3NlciB0byByZXRyaWV2ZSBkYXRhLiBTcGVjaWFsIGhhbmRsaW5n
IGZvciBVUkwgYW5kCisgICAgICAgIHRleHQvdXJpLWxpc3QgaGFzIGFsc28gYmVlbiByZW1vdmVk
OyB0aGV5IG5vdyB0cmVhdCB0aGVpciBkYXRhIGFyZ3VtZW50CisgICAgICAgIGFzIGp1c3QgYW4g
b3BhcXVlIGJsb2Igb2YgdGV4dC4KKworICAgICAgICAqIHB1YmxpYy9XZWJEcmFnRGF0YS5oOgor
ICAgICAgICAqIHNyYy9XZWJEcmFnRGF0YS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkRyYWdE
YXRhOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0RhdGE6OnVybCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkRyYWdEYXRhOjpzZXRVUkwpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJEcmFnRGF0YTo6dXJsVGl0bGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFnRGF0YTo6c2V0
VVJMVGl0bGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFnRGF0YTo6ZG93bmxvYWRNZXRhZGF0
YSk6CisgICAgICAgIChXZWJLaXQ6OldlYkRyYWdEYXRhOjpzZXREb3dubG9hZE1ldGFkYXRhKToK
KyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0RhdGE6OmZpbGVFeHRlbnNpb24pOgorICAgICAgICAo
V2ViS2l0OjpXZWJEcmFnRGF0YTo6c2V0RmlsZUV4dGVuc2lvbik6CisgICAgICAgIChXZWJLaXQ6
OldlYkRyYWdEYXRhOjpoYXNGaWxlTmFtZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFnRGF0
YTo6ZmlsZU5hbWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0RhdGE6OnNldEZpbGVOYW1l
cyk6CisgICAgICAgIChXZWJLaXQ6OldlYkRyYWdEYXRhOjphcHBlbmRUb0ZpbGVOYW1lcyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkRyYWdEYXRhOjpwbGFpblRleHQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJEcmFnRGF0YTo6c2V0UGxhaW5UZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0Rh
dGE6Omh0bWxUZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0RhdGE6OnNldEhUTUxUZXh0
KToKKyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0RhdGE6Omh0bWxCYXNlVVJMKToKKyAgICAgICAg
KFdlYktpdDo6V2ViRHJhZ0RhdGE6OnNldEhUTUxCYXNlVVJMKToKKyAgICAgICAgKFdlYktpdDo6
V2ViRHJhZ0RhdGE6OmZpbGVDb250ZW50RmlsZU5hbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJE
cmFnRGF0YTo6c2V0RmlsZUNvbnRlbnRGaWxlTmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkRy
YWdEYXRhOjpmaWxlQ29udGVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRyYWdEYXRhOjpzZXRG
aWxlQ29udGVudCk6CisKIDIwMTAtMDktMjIgIEtlbm5ldGggUnVzc2VsbCAgPGtickBnb29nbGUu
Y29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIENocm9taXVtIGJ1aWxkIGZpeC4gRml4IGJ1aWxk
IHdoZW4gYWNjZWxlcmF0ZWQKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2Vi
RHJhZ0RhdGEuaCBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRHJhZ0RhdGEuaAppbmRleCAy
OTc5NTE5Li42NzQ4ZmUwIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkRy
YWdEYXRhLmgKKysrIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJEcmFnRGF0YS5oCkBAIC02
Niw3ICs2Niw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4g
IW1fcHJpdmF0ZTsgfQogCi0gICAgV0VCS0lUX0FQSSBXZWJVUkwgdXJsKCkgY29uc3Q7CisgICAg
V0VCS0lUX0FQSSBXZWJTdHJpbmcgdXJsKCkgY29uc3Q7CiAgICAgV0VCS0lUX0FQSSB2b2lkIHNl
dFVSTChjb25zdCBXZWJVUkwmKTsKIAogICAgIFdFQktJVF9BUEkgV2ViU3RyaW5nIHVybFRpdGxl
KCkgY29uc3Q7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRyYWdEYXRhLmNw
cCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRHJhZ0RhdGEuY3BwCmluZGV4IDY0M2MzNWQuLmE4
NjZmMDQgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRHJhZ0RhdGEuY3BwCisr
KyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRHJhZ0RhdGEuY3BwCkBAIC00OCw3ICs0OCw3IEBA
IGNsYXNzIFdlYkRyYWdEYXRhUHJpdmF0ZSA6IHB1YmxpYyBDaHJvbWl1bURhdGFPYmplY3Qgewog
CiB2b2lkIFdlYkRyYWdEYXRhOjppbml0aWFsaXplKCkKIHsKLSAgICBhc3NpZ24oc3RhdGljX2Nh
c3Q8V2ViRHJhZ0RhdGFQcml2YXRlKj4oQ2hyb21pdW1EYXRhT2JqZWN0OjpjcmVhdGUoKS5yZWxl
YXNlUmVmKCkpKTsKKyAgICBhc3NpZ24oc3RhdGljX2Nhc3Q8V2ViRHJhZ0RhdGFQcml2YXRlKj4o
Q2hyb21pdW1EYXRhT2JqZWN0OjpjcmVhdGUoQ2xpcGJvYXJkOjpEcmFnQW5kRHJvcCkucmVsZWFz
ZVJlZigpKSk7CiB9CiAKIHZvaWQgV2ViRHJhZ0RhdGE6OnJlc2V0KCkKQEAgLTY0LDEzNyArNjQs
MTQ0IEBAIHZvaWQgV2ViRHJhZ0RhdGE6OmFzc2lnbihjb25zdCBXZWJEcmFnRGF0YSYgb3RoZXIp
CiAgICAgYXNzaWduKHApOwogfQogCi1XZWJVUkwgV2ViRHJhZ0RhdGE6OnVybCgpIGNvbnN0CitX
ZWJTdHJpbmcgV2ViRHJhZ0RhdGE6OnVybCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFpc051bGwo
KSk7Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+Z2V0VVJMKCk7CisgICAgYm9vbCBpZ25vcmVkU3Vj
Y2VzczsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5nZXREYXRhKCJ0ZXh0L3VyaS1saXN0IiwgaWdu
b3JlZFN1Y2Nlc3MpOwogfQogCiB2b2lkIFdlYkRyYWdEYXRhOjpzZXRVUkwoY29uc3QgV2ViVVJM
JiB1cmwpCiB7CiAgICAgZW5zdXJlTXV0YWJsZSgpOwotICAgIG1fcHJpdmF0ZS0+c2V0VVJMKHVy
bCk7CisgICAgbV9wcml2YXRlLT5zZXREYXRhKCJ0ZXh0L3VyaS1saXN0IiwgS1VSTCh1cmwpLnN0
cmluZygpKTsKIH0KIAogV2ViU3RyaW5nIFdlYkRyYWdEYXRhOjp1cmxUaXRsZSgpIGNvbnN0CiB7
CiAgICAgQVNTRVJUKCFpc051bGwoKSk7Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+dXJsVGl0bGU7
CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+dXJsVGl0bGUoKTsKIH0KIAogdm9pZCBXZWJEcmFnRGF0
YTo6c2V0VVJMVGl0bGUoY29uc3QgV2ViU3RyaW5nJiB1cmxUaXRsZSkKIHsKICAgICBlbnN1cmVN
dXRhYmxlKCk7Ci0gICAgbV9wcml2YXRlLT51cmxUaXRsZSA9IHVybFRpdGxlOworICAgIG1fcHJp
dmF0ZS0+c2V0VXJsVGl0bGUodXJsVGl0bGUpOwogfQogCiBXZWJTdHJpbmcgV2ViRHJhZ0RhdGE6
OmRvd25sb2FkTWV0YWRhdGEoKSBjb25zdAogewogICAgIEFTU0VSVCghaXNOdWxsKCkpOwotICAg
IHJldHVybiBtX3ByaXZhdGUtPmRvd25sb2FkTWV0YWRhdGE7CisgICAgYm9vbCBpZ25vcmVkU3Vj
Y2VzczsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5nZXREYXRhKCJkb3dubG9hZHVybCIsIGlnbm9y
ZWRTdWNjZXNzKTsKIH0KIAogdm9pZCBXZWJEcmFnRGF0YTo6c2V0RG93bmxvYWRNZXRhZGF0YShj
b25zdCBXZWJTdHJpbmcmIGRvd25sb2FkTWV0YWRhdGEpCiB7CiAgICAgZW5zdXJlTXV0YWJsZSgp
OwotICAgIG1fcHJpdmF0ZS0+ZG93bmxvYWRNZXRhZGF0YSA9IGRvd25sb2FkTWV0YWRhdGE7Cisg
ICAgbV9wcml2YXRlLT5zZXREYXRhKCJkb3dubG9hZHVybCIsIGRvd25sb2FkTWV0YWRhdGEpOwog
fQogCiBXZWJTdHJpbmcgV2ViRHJhZ0RhdGE6OmZpbGVFeHRlbnNpb24oKSBjb25zdAogewogICAg
IEFTU0VSVCghaXNOdWxsKCkpOwotICAgIHJldHVybiBtX3ByaXZhdGUtPmZpbGVFeHRlbnNpb247
CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+ZmlsZUV4dGVuc2lvbigpOwogfQogCiB2b2lkIFdlYkRy
YWdEYXRhOjpzZXRGaWxlRXh0ZW5zaW9uKGNvbnN0IFdlYlN0cmluZyYgZmlsZUV4dGVuc2lvbikK
IHsKICAgICBlbnN1cmVNdXRhYmxlKCk7Ci0gICAgbV9wcml2YXRlLT5maWxlRXh0ZW5zaW9uID0g
ZmlsZUV4dGVuc2lvbjsKKyAgICBtX3ByaXZhdGUtPnNldEZpbGVFeHRlbnNpb24oZmlsZUV4dGVu
c2lvbik7CiB9CiAKIGJvb2wgV2ViRHJhZ0RhdGE6Omhhc0ZpbGVOYW1lcygpIGNvbnN0CiB7CiAg
ICAgQVNTRVJUKCFpc051bGwoKSk7Ci0gICAgcmV0dXJuICFtX3ByaXZhdGUtPmZpbGVuYW1lcy5p
c0VtcHR5KCk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Y29udGFpbnNGaWxlbmFtZXMoKTsKIH0K
IAogdm9pZCBXZWJEcmFnRGF0YTo6ZmlsZU5hbWVzKFdlYlZlY3RvcjxXZWJTdHJpbmc+JiBmaWxl
TmFtZXMpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFpc051bGwoKSk7Ci0gICAgZmlsZU5hbWVzID0g
bV9wcml2YXRlLT5maWxlbmFtZXM7CisgICAgZmlsZU5hbWVzID0gbV9wcml2YXRlLT5maWxlbmFt
ZXMoKTsKIH0KIAogdm9pZCBXZWJEcmFnRGF0YTo6c2V0RmlsZU5hbWVzKGNvbnN0IFdlYlZlY3Rv
cjxXZWJTdHJpbmc+JiBmaWxlTmFtZXMpCiB7CiAgICAgZW5zdXJlTXV0YWJsZSgpOwotICAgIG1f
cHJpdmF0ZS0+ZmlsZW5hbWVzLmNsZWFyKCk7Ci0gICAgbV9wcml2YXRlLT5maWxlbmFtZXMuYXBw
ZW5kKGZpbGVOYW1lcy5kYXRhKCksIGZpbGVOYW1lcy5zaXplKCkpOworICAgIFZlY3RvcjxTdHJp
bmc+IGZpbGVOYW1lc0NvcHk7CisgICAgZmlsZU5hbWVzQ29weS5hcHBlbmQoZmlsZU5hbWVzLmRh
dGEoKSwgZmlsZU5hbWVzLnNpemUoKSk7CisgICAgbV9wcml2YXRlLT5zZXRGaWxlbmFtZXMoZmls
ZU5hbWVzQ29weSk7CiB9CiAKIHZvaWQgV2ViRHJhZ0RhdGE6OmFwcGVuZFRvRmlsZU5hbWVzKGNv
bnN0IFdlYlN0cmluZyYgZmlsZU5hbWUpCiB7CiAgICAgZW5zdXJlTXV0YWJsZSgpOwotICAgIG1f
cHJpdmF0ZS0+ZmlsZW5hbWVzLmFwcGVuZChmaWxlTmFtZSk7CisgICAgVmVjdG9yPFN0cmluZz4g
ZmlsZU5hbWVzID0gbV9wcml2YXRlLT5maWxlbmFtZXMoKTsKKyAgICBmaWxlTmFtZXMuYXBwZW5k
KGZpbGVOYW1lKTsKKyAgICBtX3ByaXZhdGUtPnNldEZpbGVuYW1lcyhmaWxlTmFtZXMpOwogfQog
CiBXZWJTdHJpbmcgV2ViRHJhZ0RhdGE6OnBsYWluVGV4dCgpIGNvbnN0CiB7CiAgICAgQVNTRVJU
KCFpc051bGwoKSk7Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+cGxhaW5UZXh0OworICAgIGJvb2wg
aWdub3JlZFN1Y2Nlc3M7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Z2V0RGF0YSgidGV4dC9wbGFp
biIsIGlnbm9yZWRTdWNjZXNzKTsKIH0KIAogdm9pZCBXZWJEcmFnRGF0YTo6c2V0UGxhaW5UZXh0
KGNvbnN0IFdlYlN0cmluZyYgcGxhaW5UZXh0KQogewogICAgIGVuc3VyZU11dGFibGUoKTsKLSAg
ICBtX3ByaXZhdGUtPnBsYWluVGV4dCA9IHBsYWluVGV4dDsKKyAgICBtX3ByaXZhdGUtPnNldERh
dGEoInRleHQvcGxhaW4iLCBwbGFpblRleHQpOwogfQogCiBXZWJTdHJpbmcgV2ViRHJhZ0RhdGE6
Omh0bWxUZXh0KCkgY29uc3QKIHsKICAgICBBU1NFUlQoIWlzTnVsbCgpKTsKLSAgICByZXR1cm4g
bV9wcml2YXRlLT50ZXh0SHRtbDsKKyAgICBib29sIGlnbm9yZWRTdWNjZXNzOworICAgIHJldHVy
biBtX3ByaXZhdGUtPmdldERhdGEoInRleHQvaHRtbCIsIGlnbm9yZWRTdWNjZXNzKTsKIH0KIAog
dm9pZCBXZWJEcmFnRGF0YTo6c2V0SFRNTFRleHQoY29uc3QgV2ViU3RyaW5nJiBodG1sVGV4dCkK
IHsKICAgICBlbnN1cmVNdXRhYmxlKCk7Ci0gICAgbV9wcml2YXRlLT50ZXh0SHRtbCA9IGh0bWxU
ZXh0OworICAgIG1fcHJpdmF0ZS0+c2V0RGF0YSgidGV4dC9odG1sIiwgaHRtbFRleHQpOwogfQog
CiBXZWJVUkwgV2ViRHJhZ0RhdGE6Omh0bWxCYXNlVVJMKCkgY29uc3QKIHsKICAgICBBU1NFUlQo
IWlzTnVsbCgpKTsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5odG1sQmFzZVVybDsKKyAgICByZXR1
cm4gbV9wcml2YXRlLT5odG1sQmFzZVVybCgpOwogfQogCiB2b2lkIFdlYkRyYWdEYXRhOjpzZXRI
VE1MQmFzZVVSTChjb25zdCBXZWJVUkwmIGh0bWxCYXNlVVJMKQogewogICAgIGVuc3VyZU11dGFi
bGUoKTsKLSAgICBtX3ByaXZhdGUtPmh0bWxCYXNlVXJsID0gaHRtbEJhc2VVUkw7CisgICAgbV9w
cml2YXRlLT5zZXRIdG1sQmFzZVVybChodG1sQmFzZVVSTCk7CiB9CiAKIFdlYlN0cmluZyBXZWJE
cmFnRGF0YTo6ZmlsZUNvbnRlbnRGaWxlTmFtZSgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFpc051
bGwoKSk7Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+ZmlsZUNvbnRlbnRGaWxlbmFtZTsKKyAgICBy
ZXR1cm4gbV9wcml2YXRlLT5maWxlQ29udGVudEZpbGVuYW1lKCk7CiB9CiAKIHZvaWQgV2ViRHJh
Z0RhdGE6OnNldEZpbGVDb250ZW50RmlsZU5hbWUoY29uc3QgV2ViU3RyaW5nJiBmaWxlTmFtZSkK
IHsKICAgICBlbnN1cmVNdXRhYmxlKCk7Ci0gICAgbV9wcml2YXRlLT5maWxlQ29udGVudEZpbGVu
YW1lID0gZmlsZU5hbWU7CisgICAgbV9wcml2YXRlLT5zZXRGaWxlQ29udGVudEZpbGVuYW1lKGZp
bGVOYW1lKTsKIH0KIAogV2ViRGF0YSBXZWJEcmFnRGF0YTo6ZmlsZUNvbnRlbnQoKSBjb25zdAog
ewogICAgIEFTU0VSVCghaXNOdWxsKCkpOwotICAgIHJldHVybiBXZWJEYXRhKG1fcHJpdmF0ZS0+
ZmlsZUNvbnRlbnQpOworICAgIHJldHVybiBXZWJEYXRhKG1fcHJpdmF0ZS0+ZmlsZUNvbnRlbnQo
KSk7CiB9CiAKIHZvaWQgV2ViRHJhZ0RhdGE6OnNldEZpbGVDb250ZW50KGNvbnN0IFdlYkRhdGEm
IGZpbGVDb250ZW50KQogewogICAgIGVuc3VyZU11dGFibGUoKTsKLSAgICBtX3ByaXZhdGUtPmZp
bGVDb250ZW50ID0gZmlsZUNvbnRlbnQ7CisgICAgbV9wcml2YXRlLT5zZXRGaWxlQ29udGVudChm
aWxlQ29udGVudCk7CiB9CiAKIFdlYkRyYWdEYXRhOjpXZWJEcmFnRGF0YShjb25zdCBXVEY6OlBh
c3NSZWZQdHI8V2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0PiYgZGF0YSkK
</data>
<flag name="review"
          id="58777"
          type_id="1"
          status="-"
          setter="tony"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69312</attachid>
            <date>2010-09-29 22:37:01 -0700</date>
            <delta_ts>2010-09-30 11:20:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>foo.patch</filename>
            <type>text/plain</type>
            <size>50547</size>
            <attacher name="Daniel Cheng">dcheng</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MzhkMzExMC4uN2JkZDBkMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3OSBAQAorMjAxMC0wOS0yOSAgRGFuaWVsIENoZW5n
ICA8ZGNoZW5nQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBbY2hyb21pdW1dIFJlZmFjdG9yIENocm9taXVtRGF0YU9iamVjdCB0
byB1c2UgZ2V0dGVycy9zZXR0ZXJzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NDY1NTkKKworICAgICAgICBUaGlzIGlzIGFuIGludGVybWVkaWF0ZSBz
dGVwIHRvIGNvbnZlcnRpbmcgQ2hyb21pdW1EYXRhT2JqZWN0IHRvIHVzZQorICAgICAgICBjYWxs
YmFja3MgdG8gdGhlIGJyb3dzZXIgdG8gcmV0cmlldmUgZGF0YS4KKworICAgICAgICBUaGlzIGlz
IGNvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAgKiBlZGl0aW5nL2Nocm9taXVt
L0VkaXRvckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bmV3R2VuZXJh
bENsaXBib2FyZCk6CisgICAgICAgICogcGFnZS9jaHJvbWl1bS9FdmVudEhhbmRsZXJDaHJvbWl1
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmNyZWF0ZURyYWdnaW5nQ2xp
cGJvYXJkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3Qu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpjbGVhckRhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpjbGVhckFsbCk6CisgICAgICAg
IChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OmNsZWFyQWxsRXhjZXB0RmlsZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpoYXNEYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6dHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q2hy
b21pdW1EYXRhT2JqZWN0OjpnZXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0
YU9iamVjdDo6c2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6
OkNocm9taXVtRGF0YU9iamVjdCk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21p
dW1EYXRhT2JqZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OnVybFRpdGxlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6c2V0VXJsVGl0bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpodG1sQmFzZVVybCk6CisgICAgICAg
IChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OnNldEh0bWxCYXNlVXJsKToKKyAgICAgICAg
KFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6Y29udGFpbnNGaWxlbmFtZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpmaWxlbmFtZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpzZXRGaWxlbmFtZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpmaWxlRXh0ZW5zaW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkNocm9taXVtRGF0YU9iamVjdDo6c2V0RmlsZUV4dGVuc2lvbik6CisgICAgICAgIChXZWJDb3Jl
OjpDaHJvbWl1bURhdGFPYmplY3Q6OmZpbGVDb250ZW50RmlsZW5hbWUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpzZXRGaWxlQ29udGVudEZpbGVuYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6ZmlsZUNvbnRlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpzZXRGaWxlQ29udGVudCk6CisgICAgICAgICog
cGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6bm9ybWFsaXplVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRDaHJvbWl1bTo6
Y2xlYXJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENocm9taXVtOjpjbGVhckFs
bERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkQ2hyb21pdW06OmdldERhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkQ2hyb21pdW06OnNldERhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6Q2xpcGJvYXJkQ2hyb21pdW06OnR5cGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNs
aXBib2FyZENocm9taXVtOjpmaWxlcyk6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZUltYWdlVG9E
YXRhT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENocm9taXVtOjpkZWNsYXJl
QW5kV3JpdGVEcmFnSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkQ2hyb21pdW06
OndyaXRlVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENocm9taXVtOjp3cml0ZVJh
bmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENocm9taXVtOjp3cml0ZVBsYWluVGV4
dCk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW1XaW4uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkQ2hyb21pdW06OnZhbGlkYXRlRmlsZU5hbWUp
OgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZE1pbWVUeXBlcy5jcHA6Cisg
ICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkTWltZVR5cGVzLmg6CisgICAgICAg
ICogcGxhdGZvcm0vY2hyb21pdW0vRHJhZ0RhdGFDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpjb250YWluc0hUTUwpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmNvbnRhaW5z
VVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjphc1VSTCk6CisgICAgICAgIChXZWJD
b3JlOjpEcmFnRGF0YTo6Y29udGFpbnNGaWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0
YTo6YXNGaWxlbmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmNvbnRhaW5zUGxh
aW5UZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjphc1BsYWluVGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpEcmFnRGF0YTo6Y2FuU21hcnRSZXBsYWNlKToKKyAgICAgICAgKFdlYkNv
cmU6OkRyYWdEYXRhOjphc0ZyYWdtZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9S
ZWFkYWJsZURhdGFPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVhZGFibGVEYXRhT2Jq
ZWN0OjpnZXRVUkwpOgorICAgICAgICAoV2ViQ29yZTo6UmVhZGFibGVEYXRhT2JqZWN0OjpnZXRI
VE1MKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9Xcml0YWJsZURhdGFPYmplY3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6V3JpdGFibGVEYXRhT2JqZWN0OjpjbGVhckRhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6V3JpdGFibGVEYXRhT2JqZWN0OjpzZXREYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OldyaXRhYmxlRGF0YU9iamVjdDo6c2V0VVJMKToKKyAgICAgICAgKFdlYkNvcmU6Oldy
aXRhYmxlRGF0YU9iamVjdDo6c2V0SFRNTCk6CisKIDIwMTAtMDktMjIgIEFsZXhleSBQcm9za3Vy
eWFrb3YgIDxhcEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy9jaHJvbWl1bS9FZGl0b3JDaHJvbWl1bS5jcHAg
Yi9XZWJDb3JlL2VkaXRpbmcvY2hyb21pdW0vRWRpdG9yQ2hyb21pdW0uY3BwCmluZGV4IGM5Mzhh
N2UuLjJiZmI1YWYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9jaHJvbWl1bS9FZGl0b3JD
aHJvbWl1bS5jcHAKKysrIGIvV2ViQ29yZS9lZGl0aW5nL2Nocm9taXVtL0VkaXRvckNocm9taXVt
LmNwcApAQCAtMzksNyArMzksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFBhc3NSZWZQdHI8
Q2xpcGJvYXJkPiBFZGl0b3I6Om5ld0dlbmVyYWxDbGlwYm9hcmQoQ2xpcGJvYXJkQWNjZXNzUG9s
aWN5IHBvbGljeSwgRnJhbWUqIGZyYW1lKQogewotICAgIHJldHVybiBDbGlwYm9hcmRDaHJvbWl1
bTo6Y3JlYXRlKENsaXBib2FyZDo6Q29weUFuZFBhc3RlLCBDaHJvbWl1bURhdGFPYmplY3Q6OmNy
ZWF0ZSgpLCBwb2xpY3ksIGZyYW1lKTsKKyAgICByZXR1cm4gQ2xpcGJvYXJkQ2hyb21pdW06OmNy
ZWF0ZShDbGlwYm9hcmQ6OkNvcHlBbmRQYXN0ZSwgQ2hyb21pdW1EYXRhT2JqZWN0OjpjcmVhdGUo
Q2xpcGJvYXJkOjpDb3B5QW5kUGFzdGUpLCBwb2xpY3ksIGZyYW1lKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL2Nocm9taXVtL0V2ZW50SGFu
ZGxlckNocm9taXVtLmNwcCBiL1dlYkNvcmUvcGFnZS9jaHJvbWl1bS9FdmVudEhhbmRsZXJDaHJv
bWl1bS5jcHAKaW5kZXggOWU5YTc5YS4uMTliOGE4NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdl
L2Nocm9taXVtL0V2ZW50SGFuZGxlckNocm9taXVtLmNwcAorKysgYi9XZWJDb3JlL3BhZ2UvY2hy
b21pdW0vRXZlbnRIYW5kbGVyQ2hyb21pdW0uY3BwCkBAIC0xMjgsNyArMTI4LDcgQEAgYm9vbCBF
dmVudEhhbmRsZXI6OmV2ZW50QWN0aXZhdGVkVmlldyhjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQm
IGV2ZW50KSBjb25zdAogCiBQYXNzUmVmUHRyPENsaXBib2FyZD4gRXZlbnRIYW5kbGVyOjpjcmVh
dGVEcmFnZ2luZ0NsaXBib2FyZCgpIGNvbnN0CiB7Ci0gICAgUmVmUHRyPENocm9taXVtRGF0YU9i
amVjdD4gZGF0YU9iamVjdCA9IENocm9taXVtRGF0YU9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVm
UHRyPENocm9taXVtRGF0YU9iamVjdD4gZGF0YU9iamVjdCA9IENocm9taXVtRGF0YU9iamVjdDo6
Y3JlYXRlKENsaXBib2FyZDo6RHJhZ0FuZERyb3ApOwogICAgIHJldHVybiBDbGlwYm9hcmRDaHJv
bWl1bTo6Y3JlYXRlKENsaXBib2FyZDo6RHJhZ0FuZERyb3AsIGRhdGFPYmplY3QuZ2V0KCksIENs
aXBib2FyZFdyaXRhYmxlLCBtX2ZyYW1lKTsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9j
aHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuY3BwCmluZGV4IDgzNTI2NjkuLmM1NzljZWMgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmNw
cAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5jcHAK
QEAgLTMxLDU2ICszMSwyMzUgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDaHJv
bWl1bURhdGFPYmplY3QuaCIKIAorI2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiCisjaW5jbHVk
ZSAiQ2xpcGJvYXJkTWltZVR5cGVzLmgiCisjaW5jbHVkZSAiUGFzdGVib2FyZC5oIgorCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgQ2hyb21pdW1EYXRhT2JqZWN0OjpjbGVhcigpCisvLyBQ
ZXIgUkZDIDI0ODMsIHRoZSBsaW5lIHNlcGFyYXRvciBmb3IgInRleHQvLi4uIiBNSU1FIHR5cGVz
IGlzIENSLUxGLgorc3RhdGljIGNoYXIgY29uc3QqIGNvbnN0IHRleHRNSU1FVHlwZUxpbmVTZXBh
cmF0b3IgPSAiXHJcbiI7CisKK3ZvaWQgQ2hyb21pdW1EYXRhT2JqZWN0OjpjbGVhckRhdGEoY29u
c3QgU3RyaW5nJiB0eXBlKQoreworICAgIGlmICh0eXBlID09IG1pbWVUeXBlVGV4dFBsYWluKSB7
CisgICAgICAgIG1fcGxhaW5UZXh0ID0gIiI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAodHlwZSA9PSBtaW1lVHlwZVVSTCB8fCB0eXBlID09IG1pbWVUeXBlVGV4dFVSSUxpc3Qp
IHsKKyAgICAgICAgbV91cmlMaXN0LmNsZWFyKCk7CisgICAgICAgIG1fdXJsID0gS1VSTCgpOwor
ICAgICAgICBtX3VybFRpdGxlID0gIiI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAodHlwZSA9PSBtaW1lVHlwZVRleHRIVE1MKSB7CisgICAgICAgIG1fdGV4dEh0bWwgPSAiIjsK
KyAgICAgICAgbV9odG1sQmFzZVVybCA9IEtVUkwoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmICh0eXBlID09IG1pbWVUeXBlRG93bmxvYWRVUkwpIHsKKyAgICAgICAgbV9kb3du
bG9hZE1ldGFkYXRhID0gIiI7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK3ZvaWQgQ2hy
b21pdW1EYXRhT2JqZWN0OjpjbGVhckFsbCgpCiB7CiAgICAgY2xlYXJBbGxFeGNlcHRGaWxlcygp
OwotICAgIGZpbGVuYW1lcy5jbGVhcigpOworICAgIG1fZmlsZW5hbWVzLmNsZWFyKCk7CiB9CiAK
IHZvaWQgQ2hyb21pdW1EYXRhT2JqZWN0OjpjbGVhckFsbEV4Y2VwdEZpbGVzKCkKIHsKLSAgICB1
cmwgPSBLVVJMKCk7Ci0gICAgdXJsVGl0bGUgPSAiIjsKLSAgICB1cmlMaXN0LmNsZWFyKCk7Ci0g
ICAgZG93bmxvYWRNZXRhZGF0YSA9ICIiOwotICAgIGZpbGVFeHRlbnNpb24gPSAiIjsKLSAgICBw
bGFpblRleHQgPSAiIjsKLSAgICB0ZXh0SHRtbCA9ICIiOwotICAgIGh0bWxCYXNlVXJsID0gS1VS
TCgpOwotICAgIGZpbGVDb250ZW50RmlsZW5hbWUgPSAiIjsKLSAgICBpZiAoZmlsZUNvbnRlbnQp
Ci0gICAgICAgIGZpbGVDb250ZW50LT5jbGVhcigpOworICAgIG1fdXJsVGl0bGUgPSAiIjsKKyAg
ICBtX3VybCA9IEtVUkwoKTsKKyAgICBtX3VyaUxpc3QuY2xlYXIoKTsKKyAgICBtX2Rvd25sb2Fk
TWV0YWRhdGEgPSAiIjsKKyAgICBtX2ZpbGVFeHRlbnNpb24gPSAiIjsKKyAgICBtX3BsYWluVGV4
dCA9ICIiOworICAgIG1fdGV4dEh0bWwgPSAiIjsKKyAgICBtX2h0bWxCYXNlVXJsID0gS1VSTCgp
OworICAgIG1fZmlsZUNvbnRlbnRGaWxlbmFtZSA9ICIiOworICAgIGlmIChtX2ZpbGVDb250ZW50
KQorICAgICAgICBtX2ZpbGVDb250ZW50LT5jbGVhcigpOwogfQogCiBib29sIENocm9taXVtRGF0
YU9iamVjdDo6aGFzRGF0YSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICF1cmwuaXNFbXB0eSgpCi0g
ICAgICAgIHx8ICF1cmlMaXN0LmlzRW1wdHkoKQotICAgICAgICB8fCAhZG93bmxvYWRNZXRhZGF0
YS5pc0VtcHR5KCkKLSAgICAgICAgfHwgIWZpbGVFeHRlbnNpb24uaXNFbXB0eSgpCi0gICAgICAg
IHx8ICFmaWxlbmFtZXMuaXNFbXB0eSgpCi0gICAgICAgIHx8ICFwbGFpblRleHQuaXNFbXB0eSgp
Ci0gICAgICAgIHx8ICF0ZXh0SHRtbC5pc0VtcHR5KCkKLSAgICAgICAgfHwgZmlsZUNvbnRlbnQ7
CisgICAgcmV0dXJuICFtX3VybC5pc0VtcHR5KCkKKyAgICAgICAgfHwgIW1fdXJpTGlzdC5pc0Vt
cHR5KCkKKyAgICAgICAgfHwgIW1fZG93bmxvYWRNZXRhZGF0YS5pc0VtcHR5KCkKKyAgICAgICAg
fHwgIW1fZmlsZUV4dGVuc2lvbi5pc0VtcHR5KCkKKyAgICAgICAgfHwgIW1fZmlsZW5hbWVzLmlz
RW1wdHkoKQorICAgICAgICB8fCAhbV9wbGFpblRleHQuaXNFbXB0eSgpCisgICAgICAgIHx8ICFt
X3RleHRIdG1sLmlzRW1wdHkoKQorICAgICAgICB8fCBtX2ZpbGVDb250ZW50OworfQorCitIYXNo
U2V0PFN0cmluZz4gQ2hyb21pdW1EYXRhT2JqZWN0Ojp0eXBlcygpIGNvbnN0Cit7CisgICAgLy8g
VGhpcyBpcyBjdXJyZW50bHkgYnJva2VuIGZvciBwYXN0ZWJvYXJkIGV2ZW50cywgYW5kIGFsd2F5
cyBoYXMgYmVlbi4KKyAgICBIYXNoU2V0PFN0cmluZz4gcmVzdWx0czsKKworICAgIGlmICghbV9w
bGFpblRleHQuaXNFbXB0eSgpKSB7CisgICAgICAgIHJlc3VsdHMuYWRkKG1pbWVUeXBlVGV4dCk7
CisgICAgICAgIHJlc3VsdHMuYWRkKG1pbWVUeXBlVGV4dFBsYWluKTsKKyAgICB9CisKKyAgICBp
ZiAoIW1fdXJsLmlzRW1wdHkoKSkgeworICAgICAgICByZXN1bHRzLmFkZChtaW1lVHlwZVVSTCk7
CisgICAgICAgIHJlc3VsdHMuYWRkKG1pbWVUeXBlVGV4dFVSSUxpc3QpOworICAgIH0KKworICAg
IGlmICghbV90ZXh0SHRtbC5pc0VtcHR5KCkpCisgICAgICAgIHJlc3VsdHMuYWRkKG1pbWVUeXBl
VGV4dEhUTUwpOworCisgICAgaWYgKCFtX2ZpbGVuYW1lcy5pc0VtcHR5KCkpCisgICAgICAgIHJl
c3VsdHMuYWRkKCJGaWxlcyIpOworCisgICAgcmV0dXJuIHJlc3VsdHM7Cit9CisKK1N0cmluZyBD
aHJvbWl1bURhdGFPYmplY3Q6OmdldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBib29sJiBzdWNj
ZXNzKQoreworICAgIGlmICh0eXBlID09IG1pbWVUeXBlVGV4dFBsYWluKSB7CisgICAgICAgIGlm
IChtX2NsaXBib2FyZFR5cGUgPT0gQ2xpcGJvYXJkOjpDb3B5QW5kUGFzdGUpIHsKKyAgICAgICAg
ICAgIFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIgYnVmZmVyID0KKyAgICAgICAg
ICAgICAgICBQYXN0ZWJvYXJkOjpnZW5lcmFsUGFzdGVib2FyZCgpLT5pc1NlbGVjdGlvbk1vZGUo
KSA/CisgICAgICAgICAgICAgICAgUGFzdGVib2FyZFByaXZhdGU6OlNlbGVjdGlvbkJ1ZmZlciA6
CisgICAgICAgICAgICAgICAgUGFzdGVib2FyZFByaXZhdGU6OlN0YW5kYXJkQnVmZmVyOworICAg
ICAgICAgICAgU3RyaW5nIHRleHQgPSBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkUmVhZFBsYWlu
VGV4dChidWZmZXIpOworICAgICAgICAgICAgc3VjY2VzcyA9ICF0ZXh0LmlzRW1wdHkoKTsKKyAg
ICAgICAgICAgIHJldHVybiB0ZXh0OworICAgICAgICB9CisgICAgICAgIHN1Y2Nlc3MgPSAhbV9w
bGFpblRleHQuaXNFbXB0eSgpOworICAgICAgICByZXR1cm4gbV9wbGFpblRleHQ7CisgICAgfQor
CisgICAgaWYgKHR5cGUgPT0gbWltZVR5cGVVUkwpIHsKKyAgICAgICAgQVNTRVJUKG1fdXJsLmlz
RW1wdHkoKSA9PSBtX3VyaUxpc3QuaXNFbXB0eSgpKTsKKyAgICAgICAgc3VjY2VzcyA9ICFtX3Vy
bC5pc0VtcHR5KCk7CisgICAgICAgIHJldHVybiBtX3VybC5zdHJpbmcoKTsKKyAgICB9CisKKyAg
ICBpZiAodHlwZSA9PSBtaW1lVHlwZVRleHRVUklMaXN0KSB7CisgICAgICAgIEFTU0VSVChtX3Vy
bC5pc0VtcHR5KCkgPT0gbV91cmlMaXN0LmlzRW1wdHkoKSk7CisgICAgICAgIGlmIChtX3VyaUxp
c3QuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7CisgICAgICAgICAg
ICByZXR1cm4gIiI7CisgICAgICAgIH0KKyAgICAgICAgU3RyaW5nIHVyaUxpc3RTdHJpbmcobV91
cmlMaXN0WzBdKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBtX3VyaUxpc3Quc2l6
ZSgpOyBpKyspIHsKKyAgICAgICAgICAgIHVyaUxpc3RTdHJpbmcuYXBwZW5kKHRleHRNSU1FVHlw
ZUxpbmVTZXBhcmF0b3IpOworICAgICAgICAgICAgdXJpTGlzdFN0cmluZy5hcHBlbmQobV91cmlM
aXN0W2ldKTsKKyAgICAgICAgfQorICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKKyAgICAgICAgcmV0
dXJuIHVyaUxpc3RTdHJpbmc7CisgICAgfQorCisgICAgaWYgKHR5cGUgPT0gbWltZVR5cGVUZXh0
SFRNTCkgeworICAgICAgICBpZiAobV9jbGlwYm9hcmRUeXBlID09IENsaXBib2FyZDo6Q29weUFu
ZFBhc3RlKSB7CisgICAgICAgICAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVy
IGJ1ZmZlciA9CisgICAgICAgICAgICAgICAgUGFzdGVib2FyZDo6Z2VuZXJhbFBhc3RlYm9hcmQo
KS0+aXNTZWxlY3Rpb25Nb2RlKCkgPworICAgICAgICAgICAgICAgIFBhc3RlYm9hcmRQcml2YXRl
OjpTZWxlY3Rpb25CdWZmZXIgOgorICAgICAgICAgICAgICAgIFBhc3RlYm9hcmRQcml2YXRlOjpT
dGFuZGFyZEJ1ZmZlcjsKKyAgICAgICAgICAgIFN0cmluZyBodG1sVGV4dDsKKyAgICAgICAgICAg
IEtVUkwgc291cmNlVVJMOworICAgICAgICAgICAgQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFJl
YWRIVE1MKGJ1ZmZlciwgJmh0bWxUZXh0LCAmc291cmNlVVJMKTsKKyAgICAgICAgICAgIHN1Y2Nl
c3MgPSAhaHRtbFRleHQuaXNFbXB0eSgpOworICAgICAgICAgICAgcmV0dXJuIGh0bWxUZXh0Owor
ICAgICAgICB9CisgICAgICAgIHN1Y2Nlc3MgPSAhbV90ZXh0SHRtbC5pc0VtcHR5KCk7CisgICAg
ICAgIHJldHVybiBtX3RleHRIdG1sOworICAgIH0KKworICAgIGlmICh0eXBlID09IG1pbWVUeXBl
RG93bmxvYWRVUkwpIHsKKyAgICAgICAgc3VjY2VzcyA9ICFtX2Rvd25sb2FkTWV0YWRhdGEuaXNF
bXB0eSgpOworICAgICAgICByZXR1cm4gbV9kb3dubG9hZE1ldGFkYXRhOworICAgIH0KKworICAg
IHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK2Jvb2wgQ2hyb21p
dW1EYXRhT2JqZWN0OjpzZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBk
YXRhKQoreworICAgIGlmICh0eXBlID09IG1pbWVUeXBlVGV4dFBsYWluKSB7CisgICAgICAgIG1f
cGxhaW5UZXh0ID0gZGF0YTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYg
KHR5cGUgPT0gbWltZVR5cGVVUkwgfHwgdHlwZSA9PSBtaW1lVHlwZVRleHRVUklMaXN0KSB7Cisg
ICAgICAgIG1fdXJsID0gS1VSTCgpOworICAgICAgICAvLyBMaW5lIHNlcGFyYXRvciBpcyBcclxu
IHBlciBSRkMgMjQ4MyAtIGhvd2V2ZXIsIGZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMKKyAgICAg
ICAgLy8gd2UgYWxzbyBhbGxvdyBqdXN0IFxuIGhlcmUuCisgICAgICAgIGRhdGEuc3BsaXQoJ1xu
JywgbV91cmlMaXN0KTsKKyAgICAgICAgLy8gU3RyaXAgd2hpdGUgc3BhY2Ugb24gYWxsIGxpbmVz
LCBpbmNsdWRpbmcgdHJhaWxpbmcgXHIgZnJvbSBhYm92ZSBzcGxpdC4KKyAgICAgICAgLy8gSWYg
dGhpcyBsZWF2ZXMgYSBsaW5lIGVtcHR5LCByZW1vdmUgaXQgY29tcGxldGVseS4KKyAgICAgICAg
Ly8KKyAgICAgICAgLy8gQWxzbywgY29weSB0aGUgZmlyc3QgdmFsaWQgVVJMIGludG8gdGhlICd1
cmwnIG1lbWJlciBhcyB3ZWxsLgorICAgICAgICAvLyBJbiBjYXNlIG5vIGVudHJ5IGlzIGEgdmFs
aWQgVVJMIChpLmUuLCByZW1hcmtzIG9ubHkpLCB0aGVuIHdlIGxlYXZlICd1cmwnIGVtcHR5Lgor
ICAgICAgICAvLyBJLmUuLCBpbiB0aGF0IGNhc2Ugc3Vic2VxdWVudCBjYWxscyB0byBnZXREYXRh
KCJVUkwiKSB3aWxsIGdldCBhbiBlbXB0eSBzdHJpbmcuCisgICAgICAgIC8vIFRoaXMgaXMgaW4g
bGluZSB3aXRoIHRoZSBIVE1MNSBzcGVjIChzZWUgIlRoZSBEcmFnRXZlbnQgYW5kIERhdGFUcmFu
c2ZlciBpbnRlcmZhY2VzIikuCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV91cmlM
aXN0LnNpemUoKTsgLyoqLykgeworICAgICAgICAgICAgU3RyaW5nJiBsaW5lID0gbV91cmlMaXN0
W2ldOworICAgICAgICAgICAgbGluZSA9IGxpbmUuc3RyaXBXaGl0ZVNwYWNlKCk7CisgICAgICAg
ICAgICBpZiAobGluZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBtX3VyaUxpc3QucmVt
b3ZlKGkpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgKytpOworICAgICAgICAgICAgLy8gT25seSBjb3B5IHRoZSBmaXJzdCB2YWxpZCBVUkwu
CisgICAgICAgICAgICBpZiAobV91cmwuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgaWYgKGxpbmVbMF0gPT0gJyMnKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgS1VSTCB1cmwgPSBLVVJMKFBhcnNlZFVSTFN0cmluZywgbGlu
ZSk7CisgICAgICAgICAgICBpZiAodXJsLmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICBtX3Vy
bCA9IHVybDsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlQobV91cmwuaXNFbXB0eSgpID09IG1f
dXJpTGlzdC5pc0VtcHR5KCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBp
ZiAodHlwZSA9PSBtaW1lVHlwZVRleHRIVE1MKSB7CisgICAgICAgIG1fdGV4dEh0bWwgPSBkYXRh
OworICAgICAgICBtX2h0bWxCYXNlVXJsID0gS1VSTCgpOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKKyAgICBpZiAodHlwZSA9PSBtaW1lVHlwZURvd25sb2FkVVJMKSB7CisgICAgICAg
IG1fZG93bmxvYWRNZXRhZGF0YSA9IGRhdGE7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIHJldHVybiBmYWxzZTsKK30KKworQ2hyb21pdW1EYXRhT2JqZWN0OjpDaHJvbWl1bURh
dGFPYmplY3QoQ2xpcGJvYXJkOjpDbGlwYm9hcmRUeXBlIGNsaXBib2FyZFR5cGUpCisgICAgOiBt
X2NsaXBib2FyZFR5cGUoY2xpcGJvYXJkVHlwZSkKK3sKIH0KIAogQ2hyb21pdW1EYXRhT2JqZWN0
OjpDaHJvbWl1bURhdGFPYmplY3QoY29uc3QgQ2hyb21pdW1EYXRhT2JqZWN0JiBvdGhlcikKICAg
ICA6IFJlZkNvdW50ZWQ8Q2hyb21pdW1EYXRhT2JqZWN0PigpCi0gICAgLCB1cmxUaXRsZShvdGhl
ci51cmxUaXRsZSkKLSAgICAsIGRvd25sb2FkTWV0YWRhdGEob3RoZXIuZG93bmxvYWRNZXRhZGF0
YSkKLSAgICAsIGZpbGVFeHRlbnNpb24ob3RoZXIuZmlsZUV4dGVuc2lvbikKLSAgICAsIGZpbGVu
YW1lcyhvdGhlci5maWxlbmFtZXMpCi0gICAgLCBwbGFpblRleHQob3RoZXIucGxhaW5UZXh0KQot
ICAgICwgdGV4dEh0bWwob3RoZXIudGV4dEh0bWwpCi0gICAgLCBodG1sQmFzZVVybChvdGhlci5o
dG1sQmFzZVVybCkKLSAgICAsIGZpbGVDb250ZW50RmlsZW5hbWUob3RoZXIuZmlsZUNvbnRlbnRG
aWxlbmFtZSkKLSAgICAsIHVybChvdGhlci51cmwpCi0gICAgLCB1cmlMaXN0KG90aGVyLnVyaUxp
c3QpCisgICAgLCBtX2NsaXBib2FyZFR5cGUob3RoZXIubV9jbGlwYm9hcmRUeXBlKQorICAgICwg
bV91cmxUaXRsZShvdGhlci5tX3VybFRpdGxlKQorICAgICwgbV9kb3dubG9hZE1ldGFkYXRhKG90
aGVyLm1fZG93bmxvYWRNZXRhZGF0YSkKKyAgICAsIG1fZmlsZUV4dGVuc2lvbihvdGhlci5tX2Zp
bGVFeHRlbnNpb24pCisgICAgLCBtX2ZpbGVuYW1lcyhvdGhlci5tX2ZpbGVuYW1lcykKKyAgICAs
IG1fcGxhaW5UZXh0KG90aGVyLm1fcGxhaW5UZXh0KQorICAgICwgbV90ZXh0SHRtbChvdGhlci5t
X3RleHRIdG1sKQorICAgICwgbV9odG1sQmFzZVVybChvdGhlci5tX2h0bWxCYXNlVXJsKQorICAg
ICwgbV9maWxlQ29udGVudEZpbGVuYW1lKG90aGVyLm1fZmlsZUNvbnRlbnRGaWxlbmFtZSkKKyAg
ICAsIG1fdXJsKG90aGVyLm1fdXJsKQorICAgICwgbV91cmlMaXN0KG90aGVyLm1fdXJpTGlzdCkK
IHsKLSAgICBpZiAob3RoZXIuZmlsZUNvbnRlbnQuZ2V0KCkpCi0gICAgICAgIGZpbGVDb250ZW50
ID0gb3RoZXIuZmlsZUNvbnRlbnQtPmNvcHkoKTsKKyAgICBpZiAob3RoZXIubV9maWxlQ29udGVu
dC5nZXQoKSkKKyAgICAgICAgbV9maWxlQ29udGVudCA9IG90aGVyLm1fZmlsZUNvbnRlbnQtPmNv
cHkoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
bGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuaCBiL1dlYkNvcmUvcGxhdGZvcm0v
Y2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmgKaW5kZXggYWYwYTNmYS4uMTU2MjQyMiAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuaAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5oCkBAIC0z
MSwxMSArMzEsMTQgQEAKICNpZm5kZWYgQ2hyb21pdW1EYXRhT2JqZWN0X2gKICNkZWZpbmUgQ2hy
b21pdW1EYXRhT2JqZWN0X2gKIAorI2luY2x1ZGUgIkNsaXBib2FyZC5oIgogI2luY2x1ZGUgIktV
UkwuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZl
ci5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgog
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDQsOSArNDcsOSBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgLy8gb2YgYW5kIGlzIG5vdCBzcGVjaWZpYyB0byBhIHBsYXRmb3JtLgogICAg
IGNsYXNzIENocm9taXVtRGF0YU9iamVjdCA6IHB1YmxpYyBSZWZDb3VudGVkPENocm9taXVtRGF0
YU9iamVjdD4gewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2hyb21p
dW1EYXRhT2JqZWN0PiBjcmVhdGUoKQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDaHJvbWl1
bURhdGFPYmplY3Q+IGNyZWF0ZShDbGlwYm9hcmQ6OkNsaXBib2FyZFR5cGUgY2xpcGJvYXJkVHlw
ZSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDaHJvbWl1bURh
dGFPYmplY3QpOworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDaHJvbWl1bURhdGFP
YmplY3QoY2xpcGJvYXJkVHlwZSkpOwogICAgICAgICB9CiAKICAgICAgICAgUGFzc1JlZlB0cjxD
aHJvbWl1bURhdGFPYmplY3Q+IGNvcHkoKSBjb25zdApAQCAtNTQsNjAgKzU3LDYxIEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2hyb21pdW1E
YXRhT2JqZWN0KCp0aGlzKSk7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkIGNsZWFyKCk7Cisg
ICAgICAgIHZvaWQgY2xlYXJEYXRhKGNvbnN0IFN0cmluZyYgdHlwZSk7CisgICAgICAgIHZvaWQg
Y2xlYXJBbGwoKTsKICAgICAgICAgdm9pZCBjbGVhckFsbEV4Y2VwdEZpbGVzKCk7Ci0gICAgICAg
IGJvb2wgaGFzRGF0YSgpIGNvbnN0OwotCi0gICAgICAgIHZvaWQgY2xlYXJVUkwoKQotICAgICAg
ICB7Ci0gICAgICAgICAgICB1cmwgPSBLVVJMKCk7Ci0gICAgICAgICAgICB1cmlMaXN0LmNsZWFy
KCk7Ci0gICAgICAgICAgICB1cmxUaXRsZSA9ICIiOwotICAgICAgICB9CiAKLSAgICAgICAgYm9v
bCBoYXNWYWxpZFVSTCgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiB1cmwu
aXNWYWxpZCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgS1VSTCBnZXRVUkwoKSBjb25zdAotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gdXJsOwotICAgICAgICB9CisgICAgICAgIGJvb2wg
aGFzRGF0YSgpIGNvbnN0OwogCi0gICAgICAgIHZvaWQgc2V0VVJMKGNvbnN0IEtVUkwmIG5ld1VS
TCkKLSAgICAgICAgewotICAgICAgICAgICAgdXJsID0gbmV3VVJMOwotICAgICAgICAgICAgdXJp
TGlzdC5jbGVhcigpOwotICAgICAgICAgICAgaWYgKG5ld1VSTC5pc0VtcHR5KCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgdXJpTGlzdC5hcHBlbmQobmV3VVJMLnN0cmlu
ZygpKTsKLSAgICAgICAgfQorICAgICAgICBIYXNoU2V0PFN0cmluZz4gdHlwZXMoKSBjb25zdDsK
KyAgICAgICAgU3RyaW5nIGdldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBib29sJiBzdWNjZXNz
KTsKKyAgICAgICAgYm9vbCBzZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5n
JiBkYXRhKTsKKworICAgICAgICAvLyBTcGVjaWFsIGhhbmRsZXJzIGZvciBVUkwvSFRNTCBtZXRh
ZGF0YS4KKyAgICAgICAgU3RyaW5nIHVybFRpdGxlKCkgY29uc3QgeyByZXR1cm4gbV91cmxUaXRs
ZTsgfQorICAgICAgICB2b2lkIHNldFVybFRpdGxlKGNvbnN0IFN0cmluZyYgdXJsVGl0bGUpIHsg
bV91cmxUaXRsZSA9IHVybFRpdGxlOyB9CisgICAgICAgIEtVUkwgaHRtbEJhc2VVcmwoKSBjb25z
dCB7IHJldHVybiBtX2h0bWxCYXNlVXJsOyB9CisgICAgICAgIHZvaWQgc2V0SHRtbEJhc2VVcmwo
Y29uc3QgS1VSTCYgdXJsKSB7IG1faHRtbEJhc2VVcmwgPSB1cmw7IH0KKworICAgICAgICAvLyBV
c2VkIHRvIGhhbmRsZSBmaWxlcyBiZWluZyBkcmFnZ2VkIGluLgorICAgICAgICBib29sIGNvbnRh
aW5zRmlsZW5hbWVzKCkgY29uc3QgeyByZXR1cm4gIW1fZmlsZW5hbWVzLmlzRW1wdHkoKTsgfQor
ICAgICAgICBWZWN0b3I8U3RyaW5nPiBmaWxlbmFtZXMoKSBjb25zdCB7IHJldHVybiBtX2ZpbGVu
YW1lczsgfQorICAgICAgICB2b2lkIHNldEZpbGVuYW1lcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYg
ZmlsZW5hbWVzKSB7IG1fZmlsZW5hbWVzID0gZmlsZW5hbWVzOyB9CisKKyAgICAgICAgLy8gVXNl
ZCB0byBoYW5kbGUgZmlsZXMgKGltYWdlcykgYmVpbmcgZHJhZ2dlZCBvdXQuCisgICAgICAgIFN0
cmluZyBmaWxlRXh0ZW5zaW9uKCkgY29uc3QgeyByZXR1cm4gbV9maWxlRXh0ZW5zaW9uOyB9Cisg
ICAgICAgIHZvaWQgc2V0RmlsZUV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGZpbGVFeHRlbnNpb24p
IHsgbV9maWxlRXh0ZW5zaW9uID0gZmlsZUV4dGVuc2lvbjsgfQorICAgICAgICBTdHJpbmcgZmls
ZUNvbnRlbnRGaWxlbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsZUNvbnRlbnRGaWxlbmFtZTsg
fQorICAgICAgICB2b2lkIHNldEZpbGVDb250ZW50RmlsZW5hbWUoY29uc3QgU3RyaW5nJiBmaWxl
Q29udGVudEZpbGVuYW1lKSB7IG1fZmlsZUNvbnRlbnRGaWxlbmFtZSA9IGZpbGVDb250ZW50Rmls
ZW5hbWU7IH0KKyAgICAgICAgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGZpbGVDb250ZW50KCkg
Y29uc3QgeyByZXR1cm4gbV9maWxlQ29udGVudDsgfQorICAgICAgICB2b2lkIHNldEZpbGVDb250
ZW50KFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBmaWxlQ29udGVudCkgeyBtX2ZpbGVDb250ZW50
ID0gZmlsZUNvbnRlbnQ7IH0KIAotICAgICAgICBTdHJpbmcgdXJsVGl0bGU7CisgICAgcHJpdmF0
ZToKKyAgICAgICAgQ2hyb21pdW1EYXRhT2JqZWN0KENsaXBib2FyZDo6Q2xpcGJvYXJkVHlwZSk7
CisgICAgICAgIENocm9taXVtRGF0YU9iamVjdChjb25zdCBDaHJvbWl1bURhdGFPYmplY3QmKTsK
IAotICAgICAgICBTdHJpbmcgZG93bmxvYWRNZXRhZGF0YTsKKyAgICAgICAgQ2xpcGJvYXJkOjpD
bGlwYm9hcmRUeXBlIG1fY2xpcGJvYXJkVHlwZTsKIAotICAgICAgICBTdHJpbmcgZmlsZUV4dGVu
c2lvbjsKLSAgICAgICAgVmVjdG9yPFN0cmluZz4gZmlsZW5hbWVzOworICAgICAgICBTdHJpbmcg
bV91cmxUaXRsZTsKIAotICAgICAgICBTdHJpbmcgcGxhaW5UZXh0OworICAgICAgICBTdHJpbmcg
bV9kb3dubG9hZE1ldGFkYXRhOwogCi0gICAgICAgIFN0cmluZyB0ZXh0SHRtbDsKLSAgICAgICAg
S1VSTCBodG1sQmFzZVVybDsKKyAgICAgICAgU3RyaW5nIG1fZmlsZUV4dGVuc2lvbjsKKyAgICAg
ICAgVmVjdG9yPFN0cmluZz4gbV9maWxlbmFtZXM7CiAKLSAgICAgICAgU3RyaW5nIGZpbGVDb250
ZW50RmlsZW5hbWU7Ci0gICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGZpbGVDb250ZW50Owor
ICAgICAgICBTdHJpbmcgbV9wbGFpblRleHQ7CiAKLSAgICBwcml2YXRlOgotICAgICAgICAvLyBV
UkwgYW5kIHVyaS1saXN0IGFyZSBsaW5rZWQsIHNvIHRoZXkgc2hvdWxkIG5vdCBiZSBhY2Nlc3Nl
ZCBpbmRpdmlkdWFsbHkuCi0gICAgICAgIEtVUkwgdXJsOwotICAgICAgICBWZWN0b3I8U3RyaW5n
PiB1cmlMaXN0OworICAgICAgICBTdHJpbmcgbV90ZXh0SHRtbDsKKyAgICAgICAgS1VSTCBtX2h0
bWxCYXNlVXJsOwogCi0gICAgICAgIENocm9taXVtRGF0YU9iamVjdCgpIHt9Ci0gICAgICAgIENo
cm9taXVtRGF0YU9iamVjdChjb25zdCBDaHJvbWl1bURhdGFPYmplY3QmKTsKKyAgICAgICAgU3Ry
aW5nIG1fZmlsZUNvbnRlbnRGaWxlbmFtZTsKKyAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4g
bV9maWxlQ29udGVudDsKIAotICAgICAgICBmcmllbmQgY2xhc3MgQ2xpcGJvYXJkQ2hyb21pdW07
CisgICAgICAgIC8vIFRoZXNlIHR3byBhcmUgbGlua2VkLiBTZXR0aW5nIG1fdXJsIHdpbGwgc2V0
IG1fdXJpTGlzdCB0byB0aGUgc2FtZQorICAgICAgICAvLyBzdHJpbmcgdmFsdWU7IHNldHRpbmcg
bV91cmlMaXN0IHdpbGwgY2F1c2UgaXRzIGNvbnRlbnRzIHRvIGJlIHBhcnNlZAorICAgICAgICAv
LyBhY2NvcmRpbmcgdG8gUkZDIDI0ODMgYW5kIHRoZSBmaXJzdCBVUkwgZm91bmQgd2lsbCBiZSBz
ZXQgaW4gbV91cmwuCisgICAgICAgIEtVUkwgbV91cmw7CisgICAgICAgIFZlY3RvcjxTdHJpbmc+
IG1fdXJpTGlzdDsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmNwcCBiL1dlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uY3BwCmluZGV4IGMyZWM4MGMu
LjY2NDVhOGYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJk
Q2hyb21pdW0uY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hy
b21pdW0uY3BwCkBAIC0yOCw4ICsyOCw4IEBACiAjaW5jbHVkZSAiQ2xpcGJvYXJkQ2hyb21pdW0u
aCIKIAogI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCi0jaW5jbHVkZSAiQ2hyb21pdW1CcmlkZ2Uu
aCIKICNpbmNsdWRlICJDaHJvbWl1bURhdGFPYmplY3QuaCIKKyNpbmNsdWRlICJDbGlwYm9hcmRN
aW1lVHlwZXMuaCIKICNpbmNsdWRlICJDbGlwYm9hcmRVdGlsaXRpZXNDaHJvbWl1bS5oIgogI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRHJhZ0RhdGEuaCIKQEAgLTQwLDcgKzQwLDYg
QEAKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKICNp
bmNsdWRlICJOYW1lZE5vZGVNYXAuaCIKLSNpbmNsdWRlICJQYXN0ZWJvYXJkLmgiCiAjaW5jbHVk
ZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlJlbmRl
ckltYWdlLmgiCkBAIC01NSw0MCArNTQsMTIgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsK
IC8vIFdlIHByb3ZpZGUgdGhlIElFIGNsaXBib2FyZCB0eXBlcyAoVVJMIGFuZCBUZXh0KSwgYW5k
IHRoZSBjbGlwYm9hcmQgdHlwZXMgc3BlY2lmaWVkIGluIHRoZSBXSEFUV0cgV2ViIEFwcGxpY2F0
aW9ucyAxLjAgZHJhZnQKIC8vIHNlZSBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFw
cHMvY3VycmVudC13b3JrLyBTZWN0aW9uIDYuMy41LjMKIAotZW51bSBDbGlwYm9hcmREYXRhVHlw
ZSB7Ci0gICAgQ2xpcGJvYXJkRGF0YVR5cGVOb25lLAotCi0gICAgQ2xpcGJvYXJkRGF0YVR5cGVV
UkwsCi0gICAgQ2xpcGJvYXJkRGF0YVR5cGVVUklMaXN0LAotICAgIENsaXBib2FyZERhdGFUeXBl
RG93bmxvYWRVUkwsCi0gICAgQ2xpcGJvYXJkRGF0YVR5cGVQbGFpblRleHQsCi0gICAgQ2xpcGJv
YXJkRGF0YVR5cGVIVE1MLAotCi0gICAgQ2xpcGJvYXJkRGF0YVR5cGVPdGhlciwKLX07Ci0KLS8v
IFBlciBSRkMgMjQ4MywgdGhlIGxpbmUgc2VwYXJhdG9yIGZvciAidGV4dC8uLi4iIE1JTUUgdHlw
ZXMgaXMgQ1ItTEYuCi1zdGF0aWMgY2hhciBjb25zdCogY29uc3QgdGV4dE1JTUVUeXBlTGluZVNl
cGFyYXRvciA9ICJcclxuIjsKLQotc3RhdGljIENsaXBib2FyZERhdGFUeXBlIGNsaXBib2FyZFR5
cGVGcm9tTUlNRVR5cGUoY29uc3QgU3RyaW5nJiB0eXBlKQorc3RhdGljIFN0cmluZyBub3JtYWxp
emVUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSkKIHsKICAgICBTdHJpbmcgY2xlYW5UeXBlID0gdHlw
ZS5zdHJpcFdoaXRlU3BhY2UoKS5sb3dlcigpOwotICAgIGlmIChjbGVhblR5cGUuaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm4gQ2xpcGJvYXJkRGF0YVR5cGVOb25lOwotCi0gICAgLy8gSW5jbHVk
ZXMgdHdvIHNwZWNpYWwgY2FzZXMgZm9yIElFIGNvbXBhdGliaWxpdHkuCi0gICAgaWYgKGNsZWFu
VHlwZSA9PSAidGV4dCIgfHwgY2xlYW5UeXBlID09ICJ0ZXh0L3BsYWluIiB8fCBjbGVhblR5cGUu
c3RhcnRzV2l0aCgidGV4dC9wbGFpbjsiKSkKLSAgICAgICAgcmV0dXJuIENsaXBib2FyZERhdGFU
eXBlUGxhaW5UZXh0OwotICAgIGlmIChjbGVhblR5cGUgPT0gInVybCIpCi0gICAgICAgIHJldHVy
biBDbGlwYm9hcmREYXRhVHlwZVVSTDsKLSAgICBpZiAoY2xlYW5UeXBlID09ICJ0ZXh0L3VyaS1s
aXN0IikKLSAgICAgICAgcmV0dXJuIENsaXBib2FyZERhdGFUeXBlVVJJTGlzdDsKLSAgICBpZiAo
Y2xlYW5UeXBlID09ICJkb3dubG9hZHVybCIpCi0gICAgICAgIHJldHVybiBDbGlwYm9hcmREYXRh
VHlwZURvd25sb2FkVVJMOwotICAgIGlmIChjbGVhblR5cGUgPT0gInRleHQvaHRtbCIpCi0gICAg
ICAgIHJldHVybiBDbGlwYm9hcmREYXRhVHlwZUhUTUw7Ci0KLSAgICByZXR1cm4gQ2xpcGJvYXJk
RGF0YVR5cGVPdGhlcjsKKyAgICBpZiAoY2xlYW5UeXBlID09IG1pbWVUeXBlVGV4dCB8fCBjbGVh
blR5cGUuc3RhcnRzV2l0aChtaW1lVHlwZVRleHRQbGFpbkV0YykpCisgICAgICAgIHJldHVybiBt
aW1lVHlwZVRleHRQbGFpbjsKKyAgICByZXR1cm4gY2xlYW5UeXBlOwogfQogCiBQYXNzUmVmUHRy
PENsaXBib2FyZD4gQ2xpcGJvYXJkOjpjcmVhdGUoQ2xpcGJvYXJkQWNjZXNzUG9saWN5IHBvbGlj
eSwgRHJhZ0RhdGEqIGRyYWdEYXRhLCBGcmFtZSogZnJhbWUpCkBAIC0xMTcsMzYgKzg4LDcgQEAg
dm9pZCBDbGlwYm9hcmRDaHJvbWl1bTo6Y2xlYXJEYXRhKGNvbnN0IFN0cmluZyYgdHlwZSkKICAg
ICBpZiAocG9saWN5KCkgIT0gQ2xpcGJvYXJkV3JpdGFibGUgfHwgIW1fZGF0YU9iamVjdCkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgQ2xpcGJvYXJkRGF0YVR5cGUgZGF0YVR5cGUgPSBjbGlwYm9h
cmRUeXBlRnJvbU1JTUVUeXBlKHR5cGUpOwotICAgIHN3aXRjaCAoZGF0YVR5cGUpIHsKLSAgICBj
YXNlIENsaXBib2FyZERhdGFUeXBlTm9uZToKLSAgICAgICAgLy8gSWYgY2FsbGVkIHdpdGggbm8g
YXJndW1lbnRzLCBldmVyeXRoaW5nIGV4Y2VwdCB0aGUgZmlsZSBsaXN0IG11c3QgYmUgY2xlYXJl
ZC4KLSAgICAgICAgLy8gKFNlZSBIVE1MNSBzcGVjLCAiVGhlIERyYWdFdmVudCBhbmQgRGF0YVRy
YW5zZmVyIGludGVyZmFjZXMiKQotICAgICAgICBtX2RhdGFPYmplY3QtPmNsZWFyQWxsRXhjZXB0
RmlsZXMoKTsKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZVVS
TDoKLSAgICBjYXNlIENsaXBib2FyZERhdGFUeXBlVVJJTGlzdDoKLSAgICAgICAgbV9kYXRhT2Jq
ZWN0LT5jbGVhclVSTCgpOwotICAgICAgICByZXR1cm47Ci0KLSAgICBjYXNlIENsaXBib2FyZERh
dGFUeXBlRG93bmxvYWRVUkw6Ci0gICAgICAgIG1fZGF0YU9iamVjdC0+ZG93bmxvYWRNZXRhZGF0
YSA9ICIiOwotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIGNhc2UgQ2xpcGJvYXJkRGF0
YVR5cGVQbGFpblRleHQ6Ci0gICAgICAgIG1fZGF0YU9iamVjdC0+cGxhaW5UZXh0ID0gIiI7Ci0g
ICAgICAgIHJldHVybjsKLQotICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVIVE1MOgotICAgICAg
ICBtX2RhdGFPYmplY3QtPnRleHRIdG1sID0gIiI7Ci0gICAgICAgIG1fZGF0YU9iamVjdC0+aHRt
bEJhc2VVcmwgPSBLVVJMKCk7Ci0gICAgICAgIHJldHVybjsKLQotICAgIGNhc2UgQ2xpcGJvYXJk
RGF0YVR5cGVPdGhlcjoKLSAgICAgICAgLy8gTm90IHlldCBpbXBsZW1lbnRlZCwgc2VlIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNDQxMAotICAgICAgICByZXR1cm47
Ci0gICAgfQorICAgIG1fZGF0YU9iamVjdC0+Y2xlYXJEYXRhKG5vcm1hbGl6ZVR5cGUodHlwZSkp
OwogCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CkBAIC0xNTYsNyArOTgsNyBAQCB2b2lk
IENsaXBib2FyZENocm9taXVtOjpjbGVhckFsbERhdGEoKQogICAgIGlmIChwb2xpY3koKSAhPSBD
bGlwYm9hcmRXcml0YWJsZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9kYXRhT2JqZWN0LT5j
bGVhcigpOworICAgIG1fZGF0YU9iamVjdC0+Y2xlYXJBbGwoKTsKIH0KIAogU3RyaW5nIENsaXBi
b2FyZENocm9taXVtOjpnZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgYm9vbCYgc3VjY2Vzcykg
Y29uc3QKQEAgLTE2NSw4MCArMTA3LDcgQEAgU3RyaW5nIENsaXBib2FyZENocm9taXVtOjpnZXRE
YXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgYm9vbCYgc3VjY2VzcykgY29uc3QKICAgICBpZiAocG9s
aWN5KCkgIT0gQ2xpcGJvYXJkUmVhZGFibGUgfHwgIW1fZGF0YU9iamVjdCkKICAgICAgICAgcmV0
dXJuIFN0cmluZygpOwogCi0gICAgQ2xpcGJvYXJkRGF0YVR5cGUgZGF0YVR5cGUgPSBjbGlwYm9h
cmRUeXBlRnJvbU1JTUVUeXBlKHR5cGUpOwotICAgIHN3aXRjaCAoZGF0YVR5cGUpIHsKLSAgICBj
YXNlIENsaXBib2FyZERhdGFUeXBlTm9uZToKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0g
ICAgLy8gSGFjayBmb3IgVVJMcy4gZmlsZSBVUkxzIGFyZSB1c2VkIGludGVybmFsbHkgZm9yIGRy
b3AncyBkZWZhdWx0IGFjdGlvbiwgYnV0IHdlIGRvbid0IHdhbnQKLSAgICAvLyB0byBleHBvc2Ug
dGhlbSB0byB0aGUgcGFnZSwgc28gd2UgZmlsdGVyIHRoZW0gb3V0IGhlcmUuCi0gICAgY2FzZSBD
bGlwYm9hcmREYXRhVHlwZVVSSUxpc3Q6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyB0
ZXh0OwotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2RhdGFPYmplY3QtPnVy
aUxpc3Quc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHVyaSA9
IG1fZGF0YU9iamVjdC0+dXJpTGlzdFtpXTsKLSAgICAgICAgICAgICAgICBpZiAocHJvdG9jb2xJ
cyh1cmksICJmaWxlIikpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgICAgIEFTU0VSVCghdXJpLmlzRW1wdHkoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCF0ZXh0
LmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICAgICAgdGV4dC5hcHBlbmQodGV4dE1JTUVUeXBl
TGluZVNlcGFyYXRvcik7Ci0gICAgICAgICAgICAgICAgLy8gVVJJcyBoYXZlIGFscmVhZHkgYmVl
biBjYW5vbmljYWxpemVkLCBzbyBjb3B5IGV2ZXJ5dGhpbmcgdmVyYmF0aW0uCi0gICAgICAgICAg
ICAgICAgdGV4dC5hcHBlbmQodXJpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHN1Y2Nl
c3MgPSAhdGV4dC5pc0VtcHR5KCk7Ci0gICAgICAgICAgICByZXR1cm4gdGV4dDsKLSAgICAgICAg
fQotCi0gICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZVVSTDoKLSAgICAgICAgLy8gSW4gY2FzZSBv
ZiBhIHByZXZpb3VzIHNldERhdGEoJ3RleHQvdXJpLWxpc3QnKSwgc2V0RGF0YSgpIGhhcyBhbHJl
YWR5Ci0gICAgICAgIC8vIHByZXBhcmVkIHRoZSAndXJsJyBtZW1iZXIsIHNvIHdlIGNhbiBqdXN0
IHJldHJpZXZlIGl0IGhlcmUuCi0gICAgICAgIGlmICghbV9kYXRhT2JqZWN0LT51cmwuaXNFbXB0
eSgpICYmICFtX2RhdGFPYmplY3QtPnVybC5pc0xvY2FsRmlsZSgpKSB7Ci0gICAgICAgICAgICBz
dWNjZXNzID0gdHJ1ZTsKLSAgICAgICAgICAgIHJldHVybiBtX2RhdGFPYmplY3QtPnVybC5zdHJp
bmcoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBjYXNlIENs
aXBib2FyZERhdGFUeXBlRG93bmxvYWRVUkw6Ci0gICAgICAgIHN1Y2Nlc3MgPSAhbV9kYXRhT2Jq
ZWN0LT5kb3dubG9hZE1ldGFkYXRhLmlzRW1wdHkoKTsKLSAgICAgICAgcmV0dXJuIG1fZGF0YU9i
amVjdC0+ZG93bmxvYWRNZXRhZGF0YTsKLSAgICAKLSAgICBjYXNlIENsaXBib2FyZERhdGFUeXBl
UGxhaW5UZXh0OgotICAgICAgICBpZiAoaXNGb3JDb3B5QW5kUGFzdGUoKSkgewotICAgICAgICAg
ICAgUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlciBidWZmZXIgPSAKLSAgICAgICAg
ICAgICAgICBQYXN0ZWJvYXJkOjpnZW5lcmFsUGFzdGVib2FyZCgpLT5pc1NlbGVjdGlvbk1vZGUo
KSA/Ci0gICAgICAgICAgICAgICAgUGFzdGVib2FyZFByaXZhdGU6OlNlbGVjdGlvbkJ1ZmZlciA6
IAotICAgICAgICAgICAgICAgIFBhc3RlYm9hcmRQcml2YXRlOjpTdGFuZGFyZEJ1ZmZlcjsKLSAg
ICAgICAgICAgIFN0cmluZyB0ZXh0ID0gQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFJlYWRQbGFp
blRleHQoYnVmZmVyKTsKLSAgICAgICAgICAgIHN1Y2Nlc3MgPSAhdGV4dC5pc0VtcHR5KCk7Ci0g
ICAgICAgICAgICByZXR1cm4gdGV4dDsKLSAgICAgICAgfQotICAgICAgICAvLyBPdGhlcndpc2Ug
cmV0dXJuIHdoYXRldmVyIGlzIHN0b3JlZCBpbiBwbGFpblRleHQuCi0gICAgICAgIHN1Y2Nlc3Mg
PSAhbV9kYXRhT2JqZWN0LT5wbGFpblRleHQuaXNFbXB0eSgpOwotICAgICAgICByZXR1cm4gbV9k
YXRhT2JqZWN0LT5wbGFpblRleHQ7Ci0KLSAgICBjYXNlIENsaXBib2FyZERhdGFUeXBlSFRNTDoK
LSAgICAgICAgaWYgKGlzRm9yQ29weUFuZFBhc3RlKCkpIHsKLSAgICAgICAgICAgIFBhc3RlYm9h
cmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIgYnVmZmVyID0gCi0gICAgICAgICAgICAgICAgUGFz
dGVib2FyZDo6Z2VuZXJhbFBhc3RlYm9hcmQoKS0+aXNTZWxlY3Rpb25Nb2RlKCkgPwotICAgICAg
ICAgICAgICAgIFBhc3RlYm9hcmRQcml2YXRlOjpTZWxlY3Rpb25CdWZmZXIgOiAKLSAgICAgICAg
ICAgICAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6U3RhbmRhcmRCdWZmZXI7Ci0gICAgICAgICAgICBT
dHJpbmcgaHRtbFRleHQ7Ci0gICAgICAgICAgICBLVVJMIHNvdXJjZVVSTDsKLSAgICAgICAgICAg
IENocm9taXVtQnJpZGdlOjpjbGlwYm9hcmRSZWFkSFRNTChidWZmZXIsICZodG1sVGV4dCwgJnNv
dXJjZVVSTCk7Ci0gICAgICAgICAgICBzdWNjZXNzID0gIWh0bWxUZXh0LmlzRW1wdHkoKTsKLSAg
ICAgICAgICAgIHJldHVybiBodG1sVGV4dDsKLSAgICAgICAgfQotICAgICAgICAvLyBPdGhlcndp
c2UgcmV0dXJuIHdoYXRldmVyIGlzIHN0b3JlZCBpbiB0ZXh0SHRtbC4KLSAgICAgICAgc3VjY2Vz
cyA9ICFtX2RhdGFPYmplY3QtPnRleHRIdG1sLmlzRW1wdHkoKTsKLSAgICAgICAgcmV0dXJuIG1f
ZGF0YU9iamVjdC0+dGV4dEh0bWw7Ci0KLSAgICBjYXNlIENsaXBib2FyZERhdGFUeXBlT3RoZXI6
Ci0gICAgICAgIC8vIG5vdCB5ZXQgaW1wbGVtZW50ZWQsIHNlZSBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQ0MTAKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAg
IH0KLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKKyAg
ICByZXR1cm4gbV9kYXRhT2JqZWN0LT5nZXREYXRhKG5vcm1hbGl6ZVR5cGUodHlwZSksIHN1Y2Nl
c3MpOwogfQogCiBib29sIENsaXBib2FyZENocm9taXVtOjpzZXREYXRhKGNvbnN0IFN0cmluZyYg
dHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKQpAQCAtMjQ2LDY5ICsxMTUsNyBAQCBib29sIENsaXBi
b2FyZENocm9taXVtOjpzZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBk
YXRhKQogICAgIGlmIChwb2xpY3koKSAhPSBDbGlwYm9hcmRXcml0YWJsZSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgQ2xpcGJvYXJkRGF0YVR5cGUgZGF0YVR5cGUgPSBjbGlwYm9hcmRU
eXBlRnJvbU1JTUVUeXBlKHR5cGUpOwotICAgIHN3aXRjaCAoZGF0YVR5cGUpIHsKLSAgICBjYXNl
IENsaXBib2FyZERhdGFUeXBlTm9uZToKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgY2Fz
ZSBDbGlwYm9hcmREYXRhVHlwZVVSTDoKLSAgICAgICAgLy8gRm9yIHNldERhdGEoKSwgIlVSTCIg
bXVzdCBiZSB0cmVhdGVkIGFzICJ0ZXh0L3VyaS1saXN0Ii4KLSAgICAgICAgLy8gKFNlZSBIVE1M
NSBzcGVjLCAiVGhlIERyYWdFdmVudCBhbmQgRGF0YVRyYW5zZmVyIGludGVyZmFjZXMiKQotICAg
IGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVVUklMaXN0OgotICAgICAgICBtX2RhdGFPYmplY3QtPnVy
bCA9IEtVUkwoKTsKLSAgICAgICAgLy8gTGluZSBzZXBhcmF0b3IgaXMgXHJcbiBwZXIgUkZDIDI0
ODMgLSBob3dldmVyLCBmb3IgY29tcGF0aWJpbGl0eSByZWFzb25zCi0gICAgICAgIC8vIHdlIGFs
c28gYWxsb3cganVzdCBcbiBoZXJlLiAKLSAgICAgICAgZGF0YS5zcGxpdCgnXG4nLCBtX2RhdGFP
YmplY3QtPnVyaUxpc3QpOwotICAgICAgICAvLyBTdHJpcCB3aGl0ZSBzcGFjZSBvbiBhbGwgbGlu
ZXMsIGluY2x1ZGluZyB0cmFpbGluZyBcciBmcm9tIGFib3ZlIHNwbGl0LgotICAgICAgICAvLyBJ
ZiB0aGlzIGxlYXZlcyBhIGxpbmUgZW1wdHksIHJlbW92ZSBpdCBjb21wbGV0ZWx5LgotICAgICAg
ICAvLwotICAgICAgICAvLyBBbHNvLCBjb3B5IHRoZSBmaXJzdCB2YWxpZCBVUkwgaW50byB0aGUg
J3VybCcgbWVtYmVyIGFzIHdlbGwuCi0gICAgICAgIC8vIEluIGNhc2Ugbm8gZW50cnkgaXMgYSB2
YWxpZCBVUkwgKGkuZS4sIHJlbWFya3Mgb25seSksIHRoZW4gd2UgbGVhdmUgJ3VybCcgZW1wdHku
Ci0gICAgICAgIC8vIEkuZS4sIGluIHRoYXQgY2FzZSBzdWJzZXF1ZW50IGNhbGxzIHRvIGdldERh
dGEoIlVSTCIpIHdpbGwgZ2V0IGFuIGVtcHR5IHN0cmluZy4KLSAgICAgICAgLy8gVGhpcyBpcyBp
biBsaW5lIHdpdGggdGhlIEhUTUw1IHNwZWMgKHNlZSAiVGhlIERyYWdFdmVudCBhbmQgRGF0YVRy
YW5zZmVyIGludGVyZmFjZXMiKS4KLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2Rh
dGFPYmplY3QtPnVyaUxpc3Quc2l6ZSgpOyAvKiovKSB7Ci0gICAgICAgICAgICBTdHJpbmcmIGxp
bmUgPSBtX2RhdGFPYmplY3QtPnVyaUxpc3RbaV07Ci0gICAgICAgICAgICBsaW5lID0gbGluZS5z
dHJpcFdoaXRlU3BhY2UoKTsKLSAgICAgICAgICAgIGlmIChsaW5lLmlzRW1wdHkoKSkgewotICAg
ICAgICAgICAgICAgIG1fZGF0YU9iamVjdC0+dXJpTGlzdC5yZW1vdmUoaSk7Ci0gICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICArK2k7Ci0gICAgICAg
ICAgICAvLyBPbmx5IGNvcHkgdGhlIGZpcnN0IHZhbGlkIFVSTC4KLSAgICAgICAgICAgIGlmICht
X2RhdGFPYmplY3QtPnVybC5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICAvLyBTa2lwIHJlbWFya3MuCi0gICAgICAgICAgICBpZiAobGluZVswXSA9PSAn
IycpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBLVVJMIHVybCA9IEtV
UkwoUGFyc2VkVVJMU3RyaW5nLCBsaW5lKTsKLSAgICAgICAgICAgIGlmICh1cmwuaXNWYWxpZCgp
KQotICAgICAgICAgICAgICAgIG1fZGF0YU9iamVjdC0+dXJsID0gdXJsOwotICAgICAgICB9Ci0g
ICAgICAgIGlmIChtX2RhdGFPYmplY3QtPnVyaUxpc3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAg
ICBBU1NFUlQobV9kYXRhT2JqZWN0LT51cmwuaXNFbXB0eSgpKTsKLSAgICAgICAgICAgIHJldHVy
biBkYXRhLmlzRW1wdHkoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAg
IGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVEb3dubG9hZFVSTDoKLSAgICAgICAgbV9kYXRhT2JqZWN0
LT5kb3dubG9hZE1ldGFkYXRhID0gZGF0YTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBj
YXNlIENsaXBib2FyZERhdGFUeXBlUGxhaW5UZXh0OgotICAgICAgICBtX2RhdGFPYmplY3QtPnBs
YWluVGV4dCA9IGRhdGE7Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgY2FzZSBDbGlwYm9h
cmREYXRhVHlwZUhUTUw6Ci0gICAgICAgIG1fZGF0YU9iamVjdC0+dGV4dEh0bWwgPSBkYXRhOwot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVPdGhlcjoK
LSAgICAgICAgLy8gTm90IHlldCBpbXBsZW1lbnRlZCwgc2VlIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0zNDQxMAotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
ICAgIAotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKKyAgICBy
ZXR1cm4gbV9kYXRhT2JqZWN0LT5zZXREYXRhKG5vcm1hbGl6ZVR5cGUodHlwZSksIGRhdGEpOwog
fQogCiAvLyBleHRlbnNpb25zIGJleW9uZCBJRSdzIEFQSQpAQCAtMzIxLDMzICsxMjgsNyBAQCBI
YXNoU2V0PFN0cmluZz4gQ2xpcGJvYXJkQ2hyb21pdW06OnR5cGVzKCkgY29uc3QKICAgICBpZiAo
IW1fZGF0YU9iamVjdCkKICAgICAgICAgcmV0dXJuIHJlc3VsdHM7CiAKLSAgICBpZiAoIW1fZGF0
YU9iamVjdC0+ZmlsZW5hbWVzLmlzRW1wdHkoKSkKLSAgICAgICAgcmVzdWx0cy5hZGQoIkZpbGVz
Iik7Ci0KLSAgICAvLyBIYWNrIGZvciBVUkxzLiBmaWxlIFVSTHMgYXJlIHVzZWQgaW50ZXJuYWxs
eSBmb3IgZHJvcCdzIGRlZmF1bHQgYWN0aW9uLCBidXQgd2UgZG9uJ3Qgd2FudAotICAgIC8vIHRv
IGV4cG9zZSB0aGVtIHRvIHRoZSBwYWdlLCBzbyB3ZSBmaWx0ZXIgdGhlbSBvdXQgaGVyZS4KLSAg
ICBpZiAobV9kYXRhT2JqZWN0LT51cmwuaXNWYWxpZCgpICYmICFtX2RhdGFPYmplY3QtPnVybC5p
c0xvY2FsRmlsZSgpKSB7Ci0gICAgICAgIEFTU0VSVCghbV9kYXRhT2JqZWN0LT51cmlMaXN0Lmlz
RW1wdHkoKSk7Ci0gICAgICAgIHJlc3VsdHMuYWRkKCJVUkwiKTsKLSAgICB9Ci0KLSAgICBpZiAo
IW1fZGF0YU9iamVjdC0+dXJpTGlzdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgLy8gVmVyaWZ5IHRo
YXQgdGhlIFVSSSBsaXN0IGNvbnRhaW5zIGF0IGxlYXN0IG9uZSBub24tZmlsZSBVUkwuCi0gICAg
ICAgIGZvciAoVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9kYXRhT2JqZWN0
LT51cmlMaXN0LmJlZ2luKCk7Ci0gICAgICAgICAgICAgaXQgIT0gbV9kYXRhT2JqZWN0LT51cmlM
aXN0LmVuZCgpOyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAoIXByb3RvY29sSXMoKml0LCAiZmls
ZSIpKSB7Ci0gICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0IGV2ZW4gaWYgdGhlIFVSSSBsaXN0
IGlzIG5vdCBlbXB0eSwgaXQgbWF5IG5vdCBhY3R1YWxseQotICAgICAgICAgICAgICAgIC8vIGNv
bnRhaW4gYSB2YWxpZCBVUkwsIHNvIHdlIGNhbid0IHJldHVybiAiVVJMIiBoZXJlLgotICAgICAg
ICAgICAgICAgIHJlc3VsdHMuYWRkKCJ0ZXh0L3VyaS1saXN0Iik7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIW1fZGF0
YU9iamVjdC0+cGxhaW5UZXh0LmlzRW1wdHkoKSkgewotICAgICAgICByZXN1bHRzLmFkZCgiVGV4
dCIpOwotICAgICAgICByZXN1bHRzLmFkZCgidGV4dC9wbGFpbiIpOwotICAgIH0KKyAgICByZXN1
bHRzID0gbV9kYXRhT2JqZWN0LT50eXBlcygpOwogCiAgICAgcmV0dXJuIHJlc3VsdHM7CiB9CkBA
IC0zNTcsMTIgKzEzOCwxMyBAQCBQYXNzUmVmUHRyPEZpbGVMaXN0PiBDbGlwYm9hcmRDaHJvbWl1
bTo6ZmlsZXMoKSBjb25zdAogICAgIGlmIChwb2xpY3koKSAhPSBDbGlwYm9hcmRSZWFkYWJsZSkK
ICAgICAgICAgcmV0dXJuIEZpbGVMaXN0OjpjcmVhdGUoKTsKIAotICAgIGlmICghbV9kYXRhT2Jq
ZWN0IHx8IG1fZGF0YU9iamVjdC0+ZmlsZW5hbWVzLmlzRW1wdHkoKSkKKyAgICBpZiAoIW1fZGF0
YU9iamVjdCkKICAgICAgICAgcmV0dXJuIEZpbGVMaXN0OjpjcmVhdGUoKTsKIAorICAgIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMgPSBtX2RhdGFPYmplY3QtPmZpbGVuYW1lcygpOwog
ICAgIFJlZlB0cjxGaWxlTGlzdD4gZmlsZUxpc3QgPSBGaWxlTGlzdDo6Y3JlYXRlKCk7Ci0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2RhdGFPYmplY3QtPmZpbGVuYW1lcy5zaXplKCk7ICsr
aSkKLSAgICAgICAgZmlsZUxpc3QtPmFwcGVuZChGaWxlOjpjcmVhdGUobV9kYXRhT2JqZWN0LT5m
aWxlbmFtZXMuYXQoaSkpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZpbGVuYW1lcy5z
aXplKCk7ICsraSkKKyAgICAgICAgZmlsZUxpc3QtPmFwcGVuZChGaWxlOjpjcmVhdGUoZmlsZW5h
bWVzLmF0KGkpKSk7CiAKICAgICByZXR1cm4gZmlsZUxpc3QucmVsZWFzZSgpOwogfQpAQCAtNDYx
LDcgKzI0Myw3IEBAIHN0YXRpYyB2b2lkIHdyaXRlSW1hZ2VUb0RhdGFPYmplY3QoQ2hyb21pdW1E
YXRhT2JqZWN0KiBkYXRhT2JqZWN0LCBFbGVtZW50KiBlbGVtCiAgICAgaWYgKCFpbWFnZUJ1ZmZl
ciB8fCAhaW1hZ2VCdWZmZXItPnNpemUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZGF0YU9i
amVjdC0+ZmlsZUNvbnRlbnQgPSBpbWFnZUJ1ZmZlcjsKKyAgICBkYXRhT2JqZWN0LT5zZXRGaWxl
Q29udGVudChpbWFnZUJ1ZmZlcik7CiAKICAgICAvLyBEZXRlcm1pbmUgdGhlIGZpbGVuYW1lIGZv
ciB0aGUgZmlsZSBjb250ZW50cyBvZiB0aGUgaW1hZ2UuICBXZSB0cnkgdG8KICAgICAvLyB1c2Ug
dGhlIGFsdCB0YWcgaWYgb25lIGV4aXN0cywgb3RoZXJ3aXNlIHdlIGZhbGwgYmFjayBvbiB0aGUg
c3VnZ2VzdGVkCkBAIC00NjksMTMgKzI1MSwxMyBAQCBzdGF0aWMgdm9pZCB3cml0ZUltYWdlVG9E
YXRhT2JqZWN0KENocm9taXVtRGF0YU9iamVjdCogZGF0YU9iamVjdCwgRWxlbWVudCogZWxlbQog
ICAgIC8vIGluIHRoZSBVUkwuCiAgICAgU3RyaW5nIGV4dGVuc2lvbiA9IE1JTUVUeXBlUmVnaXN0
cnk6OmdldFByZWZlcnJlZEV4dGVuc2lvbkZvck1JTUVUeXBlKAogICAgICAgICBjYWNoZWRJbWFn
ZS0+cmVzcG9uc2UoKS5taW1lVHlwZSgpKTsKLSAgICBkYXRhT2JqZWN0LT5maWxlRXh0ZW5zaW9u
ID0gZXh0ZW5zaW9uLmlzRW1wdHkoKSA/ICIiIDogIi4iICsgZXh0ZW5zaW9uOworICAgIGRhdGFP
YmplY3QtPnNldEZpbGVFeHRlbnNpb24oZXh0ZW5zaW9uLmlzRW1wdHkoKSA/ICIiIDogIi4iICsg
ZXh0ZW5zaW9uKTsKICAgICBTdHJpbmcgdGl0bGUgPSBlbGVtZW50LT5nZXRBdHRyaWJ1dGUoYWx0
QXR0cik7CiAgICAgaWYgKHRpdGxlLmlzRW1wdHkoKSkKICAgICAgICAgdGl0bGUgPSBjYWNoZWRJ
bWFnZS0+cmVzcG9uc2UoKS5zdWdnZXN0ZWRGaWxlbmFtZSgpOwogCiAgICAgdGl0bGUgPSBDbGlw
Ym9hcmRDaHJvbWl1bTo6dmFsaWRhdGVGaWxlTmFtZSh0aXRsZSwgZGF0YU9iamVjdCk7Ci0gICAg
ZGF0YU9iamVjdC0+ZmlsZUNvbnRlbnRGaWxlbmFtZSA9IHRpdGxlICsgZGF0YU9iamVjdC0+Zmls
ZUV4dGVuc2lvbjsKKyAgICBkYXRhT2JqZWN0LT5zZXRGaWxlQ29udGVudEZpbGVuYW1lKHRpdGxl
ICsgZGF0YU9iamVjdC0+ZmlsZUV4dGVuc2lvbigpKTsKIH0KIAogdm9pZCBDbGlwYm9hcmRDaHJv
bWl1bTo6ZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEtV
UkwmIHVybCwgY29uc3QgU3RyaW5nJiB0aXRsZSwgRnJhbWUqIGZyYW1lKQpAQCAtNDgzLDggKzI2
NSw4IEBAIHZvaWQgQ2xpcGJvYXJkQ2hyb21pdW06OmRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZShF
bGVtZW50KiBlbGVtZW50LCBjb25zdCBLVVJMJiB1CiAgICAgaWYgKCFtX2RhdGFPYmplY3QpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIG1fZGF0YU9iamVjdC0+dXJsID0gdXJsOwotICAgIG1fZGF0
YU9iamVjdC0+dXJsVGl0bGUgPSB0aXRsZTsKKyAgICBtX2RhdGFPYmplY3QtPnNldERhdGEobWlt
ZVR5cGVVUkwsIHVybCk7CisgICAgbV9kYXRhT2JqZWN0LT5zZXRVcmxUaXRsZSh0aXRsZSk7CiAK
ICAgICAvLyBXcml0ZSB0aGUgYnl0ZXMgaW4gdGhlIGltYWdlIHRvIHRoZSBmaWxlIGZvcm1hdC4K
ICAgICB3cml0ZUltYWdlVG9EYXRhT2JqZWN0KG1fZGF0YU9iamVjdC5nZXQoKSwgZWxlbWVudCwg
dXJsKTsKQEAgLTQ5OCw3ICsyODAsNyBAQCB2b2lkIENsaXBib2FyZENocm9taXVtOjpkZWNsYXJl
QW5kV3JpdGVEcmFnSW1hZ2UoRWxlbWVudCogZWxlbWVudCwgY29uc3QgS1VSTCYgdQogICAgICAg
ICByZXR1cm47CiAKICAgICAvLyBQdXQgaW1nIHRhZyBvbiB0aGUgY2xpcGJvYXJkIHJlZmVyZW5j
aW5nIHRoZSBpbWFnZQotICAgIG1fZGF0YU9iamVjdC0+dGV4dEh0bWwgPSBpbWFnZVRvTWFya3Vw
KGZ1bGxVUkwsIGVsZW1lbnQpOworICAgIG1fZGF0YU9iamVjdC0+c2V0RGF0YShtaW1lVHlwZVRl
eHRIVE1MLCBpbWFnZVRvTWFya3VwKGZ1bGxVUkwsIGVsZW1lbnQpKTsKIH0KIAogdm9pZCBDbGlw
Ym9hcmRDaHJvbWl1bTo6d3JpdGVVUkwoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHRp
dGxlLCBGcmFtZSopCkBAIC01MDYsMTcgKzI4OCwxNSBAQCB2b2lkIENsaXBib2FyZENocm9taXVt
Ojp3cml0ZVVSTChjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdGl0bGUsIEZyYW1lKikK
ICAgICBpZiAoIW1fZGF0YU9iamVjdCkKICAgICAgICAgcmV0dXJuOwogICAgIEFTU0VSVCghdXJs
LmlzRW1wdHkoKSk7Ci0gICAgbV9kYXRhT2JqZWN0LT51cmwgPSB1cmw7Ci0gICAgbV9kYXRhT2Jq
ZWN0LT51cmxUaXRsZSA9IHRpdGxlOwotICAgIG1fZGF0YU9iamVjdC0+dXJpTGlzdC5jbGVhcigp
OwotICAgIG1fZGF0YU9iamVjdC0+dXJpTGlzdC5hcHBlbmQodXJsKTsKKyAgICBtX2RhdGFPYmpl
Y3QtPnNldERhdGEobWltZVR5cGVVUkwsIHVybCk7CisgICAgbV9kYXRhT2JqZWN0LT5zZXRVcmxU
aXRsZSh0aXRsZSk7CiAKICAgICAvLyBUaGUgVVJMIGNhbiBhbHNvIGJlIHVzZWQgYXMgcGxhaW4g
dGV4dC4KLSAgICBtX2RhdGFPYmplY3QtPnBsYWluVGV4dCA9IHVybC5zdHJpbmcoKTsKKyAgICBt
X2RhdGFPYmplY3QtPnNldERhdGEobWltZVR5cGVUZXh0UGxhaW4sIHVybC5zdHJpbmcoKSk7CiAK
ICAgICAvLyBUaGUgVVJMIGNhbiBhbHNvIGJlIHVzZWQgYXMgYW4gSFRNTCBmcmFnbWVudC4KLSAg
ICBtX2RhdGFPYmplY3QtPnRleHRIdG1sID0gdXJsVG9NYXJrdXAodXJsLCB0aXRsZSk7Ci0gICAg
bV9kYXRhT2JqZWN0LT5odG1sQmFzZVVybCA9IHVybDsKKyAgICBtX2RhdGFPYmplY3QtPnNldERh
dGEobWltZVR5cGVUZXh0SFRNTCwgdXJsVG9NYXJrdXAodXJsLCB0aXRsZSkpOworICAgIG1fZGF0
YU9iamVjdC0+c2V0SHRtbEJhc2VVcmwodXJsKTsKIH0KIAogdm9pZCBDbGlwYm9hcmRDaHJvbWl1
bTo6d3JpdGVSYW5nZShSYW5nZSogc2VsZWN0ZWRSYW5nZSwgRnJhbWUqIGZyYW1lKQpAQCAtNTI1
LDE1ICszMDUsMTUgQEAgdm9pZCBDbGlwYm9hcmRDaHJvbWl1bTo6d3JpdGVSYW5nZShSYW5nZSog
c2VsZWN0ZWRSYW5nZSwgRnJhbWUqIGZyYW1lKQogICAgIGlmICghbV9kYXRhT2JqZWN0KQogICAg
ICAgICAgcmV0dXJuOwogCi0gICAgbV9kYXRhT2JqZWN0LT50ZXh0SHRtbCA9IGNyZWF0ZU1hcmt1
cChzZWxlY3RlZFJhbmdlLCAwLCBBbm5vdGF0ZUZvckludGVyY2hhbmdlLCBmYWxzZSwgQWJzb2x1
dGVVUkxzKTsKLSAgICBtX2RhdGFPYmplY3QtPmh0bWxCYXNlVXJsID0gZnJhbWUtPmRvY3VtZW50
KCktPnVybCgpOworICAgIG1fZGF0YU9iamVjdC0+c2V0RGF0YShtaW1lVHlwZVRleHRIVE1MLCBj
cmVhdGVNYXJrdXAoc2VsZWN0ZWRSYW5nZSwgMCwgQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSwgZmFs
c2UsIEFic29sdXRlVVJMcykpOworICAgIG1fZGF0YU9iamVjdC0+c2V0SHRtbEJhc2VVcmwoZnJh
bWUtPmRvY3VtZW50KCktPnVybCgpKTsKIAogICAgIFN0cmluZyBzdHIgPSBmcmFtZS0+ZWRpdG9y
KCktPnNlbGVjdGVkVGV4dCgpOwogI2lmIE9TKFdJTkRPV1MpCiAgICAgcmVwbGFjZU5ld2xpbmVz
V2l0aFdpbmRvd3NTdHlsZU5ld2xpbmVzKHN0cik7CiAjZW5kaWYKICAgICByZXBsYWNlTkJTUFdp
dGhTcGFjZShzdHIpOwotICAgIG1fZGF0YU9iamVjdC0+cGxhaW5UZXh0ID0gc3RyOworICAgIG1f
ZGF0YU9iamVjdC0+c2V0RGF0YShtaW1lVHlwZVRleHRQbGFpbiwgc3RyKTsKIH0KIAogdm9pZCBD
bGlwYm9hcmRDaHJvbWl1bTo6d3JpdGVQbGFpblRleHQoY29uc3QgU3RyaW5nJiB0ZXh0KQpAQCAt
NTQ2LDcgKzMyNiw3IEBAIHZvaWQgQ2xpcGJvYXJkQ2hyb21pdW06OndyaXRlUGxhaW5UZXh0KGNv
bnN0IFN0cmluZyYgdGV4dCkKICAgICByZXBsYWNlTmV3bGluZXNXaXRoV2luZG93c1N0eWxlTmV3
bGluZXMoc3RyKTsKICNlbmRpZgogICAgIHJlcGxhY2VOQlNQV2l0aFNwYWNlKHN0cik7Ci0gICAg
bV9kYXRhT2JqZWN0LT5wbGFpblRleHQgPSBzdHI7CisgICAgbV9kYXRhT2JqZWN0LT5zZXREYXRh
KG1pbWVUeXBlVGV4dFBsYWluLCBzdHIpOwogfQogCiBib29sIENsaXBib2FyZENocm9taXVtOjpo
YXNEYXRhKCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJk
Q2hyb21pdW1XaW4uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJv
bWl1bVdpbi5jcHAKaW5kZXggYjRhMmMyMS4uZDliYmViNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9w
bGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bVdpbi5jcHAKKysrIGIvV2ViQ29yZS9w
bGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bVdpbi5jcHAKQEAgLTQ0LDExICs0NCwx
MSBAQCBTdHJpbmcgQ2xpcGJvYXJkQ2hyb21pdW06OnZhbGlkYXRlRmlsZU5hbWUoY29uc3QgU3Ry
aW5nJiB0aXRsZSwgQ2hyb21pdW1EYXRhT2JqZQogewogICAgIC8vIFJlbW92ZSBhbnkgaW52YWxp
ZCBmaWxlIHN5c3RlbSBjaGFyYWN0ZXJzLgogICAgIFN0cmluZyByZXN1bHQgPSB0aXRsZS5yZW1v
dmVDaGFyYWN0ZXJzKCZpc0ludmFsaWRGaWxlQ2hhcmFjdGVyKTsKLSAgICBpZiAocmVzdWx0Lmxl
bmd0aCgpICsgZGF0YU9iamVjdC0+ZmlsZUV4dGVuc2lvbi5sZW5ndGgoKSArIDEgPj0gTUFYX1BB
VEgpIHsKLSAgICAgICAgaWYgKGRhdGFPYmplY3QtPmZpbGVFeHRlbnNpb24ubGVuZ3RoKCkgKyAx
ID49IE1BWF9QQVRIKQotICAgICAgICAgICAgZGF0YU9iamVjdC0+ZmlsZUV4dGVuc2lvbiA9ICIi
OwotICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCgpICsgZGF0YU9iamVjdC0+ZmlsZUV4dGVuc2lv
bi5sZW5ndGgoKSArIDEgPj0gTUFYX1BBVEgpCi0gICAgICAgICAgICByZXN1bHQgPSByZXN1bHQu
c3Vic3RyaW5nKDAsIE1BWF9QQVRIIC0gZGF0YU9iamVjdC0+ZmlsZUV4dGVuc2lvbi5sZW5ndGgo
KSAtIDEpOworICAgIGlmIChyZXN1bHQubGVuZ3RoKCkgKyBkYXRhT2JqZWN0LT5maWxlRXh0ZW5z
aW9uKCkubGVuZ3RoKCkgKyAxID49IE1BWF9QQVRIKSB7CisgICAgICAgIGlmIChkYXRhT2JqZWN0
LT5maWxlRXh0ZW5zaW9uKCkubGVuZ3RoKCkgKyAxID49IE1BWF9QQVRIKQorICAgICAgICAgICAg
ZGF0YU9iamVjdC0+c2V0RmlsZUV4dGVuc2lvbigiIik7CisgICAgICAgIGlmIChyZXN1bHQubGVu
Z3RoKCkgKyBkYXRhT2JqZWN0LT5maWxlRXh0ZW5zaW9uKCkubGVuZ3RoKCkgKyAxID49IE1BWF9Q
QVRIKQorICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnN1YnN0cmluZygwLCBNQVhfUEFUSCAt
IGRhdGFPYmplY3QtPmZpbGVFeHRlbnNpb24oKS5sZW5ndGgoKSAtIDEpOwogICAgIH0KICAgICBy
ZXR1cm4gcmVzdWx0OwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9D
bGlwYm9hcmRNaW1lVHlwZXMuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9h
cmRNaW1lVHlwZXMuY3BwCmluZGV4IGI5NTc0NGYuLmEyMTNkYTAgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkTWltZVR5cGVzLmNwcAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZE1pbWVUeXBlcy5jcHAKQEAgLTMzLDggKzMzLDEy
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY29uc3QgY2hhciB0ZXh0UGxhaW5UeXBlW10g
PSAidGV4dC9wbGFpbiI7Ci1jb25zdCBjaGFyIHRleHRIdG1sVHlwZVtdID0gInRleHQvaHRtbCI7
Ci1jb25zdCBjaGFyIHRleHRVcmlMaXN0VHlwZVtdID0gInRleHQvdXJpLWxpc3QiOworY29uc3Qg
Y2hhciBtaW1lVHlwZVRleHRbXSA9ICJ0ZXh0L3BsYWluIjsKK2NvbnN0IGNoYXIgbWltZVR5cGVU
ZXh0UGxhaW5bXSA9ICJ0ZXh0L3BsYWluIjsKK2NvbnN0IGNoYXIgbWltZVR5cGVUZXh0UGxhaW5F
dGNbXSA9ICJ0ZXh0L3BsYWluOyI7Citjb25zdCBjaGFyIG1pbWVUeXBlVGV4dEhUTUxbXSA9ICJ0
ZXh0L2h0bWwiOworY29uc3QgY2hhciBtaW1lVHlwZVVSTFtdID0gInVybCI7Citjb25zdCBjaGFy
IG1pbWVUeXBlVGV4dFVSSUxpc3RbXSA9ICJ0ZXh0L3VyaS1saXN0IjsKK2NvbnN0IGNoYXIgbWlt
ZVR5cGVEb3dubG9hZFVSTFtdID0gImRvd25sb2FkdXJsIjsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRNaW1l
VHlwZXMuaCBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkTWltZVR5cGVzLmgK
aW5kZXggZDc0NjhmMi4uOWJkY2NmZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9DbGlwYm9hcmRNaW1lVHlwZXMuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVt
L0NsaXBib2FyZE1pbWVUeXBlcy5oCkBAIC0zMyw5ICszMywxMyBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLWV4dGVybiBjb25zdCBjaGFyIHRleHRQbGFpblR5cGVbXTsKLWV4dGVybiBjb25z
dCBjaGFyIHRleHRIdG1sVHlwZVtdOwotZXh0ZXJuIGNvbnN0IGNoYXIgdGV4dFVyaUxpc3RUeXBl
W107CitleHRlcm4gY29uc3QgY2hhciBtaW1lVHlwZVRleHRbXTsKK2V4dGVybiBjb25zdCBjaGFy
IG1pbWVUeXBlVGV4dFBsYWluW107CitleHRlcm4gY29uc3QgY2hhciBtaW1lVHlwZVRleHRQbGFp
bkV0Y1tdOworZXh0ZXJuIGNvbnN0IGNoYXIgbWltZVR5cGVUZXh0SFRNTFtdOworZXh0ZXJuIGNv
bnN0IGNoYXIgbWltZVR5cGVVUkxbXTsKK2V4dGVybiBjb25zdCBjaGFyIG1pbWVUeXBlVGV4dFVS
SUxpc3RbXTsKK2V4dGVybiBjb25zdCBjaGFyIG1pbWVUeXBlRG93bmxvYWRVUkxbXTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9t
aXVtL0RyYWdEYXRhQ2hyb21pdW0uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EcmFn
RGF0YUNocm9taXVtLmNwcAppbmRleCA2NzRkMzRkLi4yYjA0NTIzIDEwMDY0NAotLS0gYS9XZWJD
b3JlL3BsYXRmb3JtL2Nocm9taXVtL0RyYWdEYXRhQ2hyb21pdW0uY3BwCisrKyBiL1dlYkNvcmUv
cGxhdGZvcm0vY2hyb21pdW0vRHJhZ0RhdGFDaHJvbWl1bS5jcHAKQEAgLTMyLDYgKzMyLDcgQEAK
IAogI2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiCiAjaW5jbHVkZSAiQ2hyb21pdW1EYXRhT2Jq
ZWN0LmgiCisjaW5jbHVkZSAiQ2xpcGJvYXJkTWltZVR5cGVzLmgiCiAjaW5jbHVkZSAiRG9jdW1l
bnRGcmFnbWVudC5oIgogI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJLVVJMLmgi
CkBAIC00Myw1MCArNDQsNTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgYm9vbCBj
b250YWluc0hUTUwoY29uc3QgQ2hyb21pdW1EYXRhT2JqZWN0KiBkcm9wRGF0YSkKIHsKLSAgICBy
ZXR1cm4gZHJvcERhdGEtPnRleHRIdG1sLmxlbmd0aCgpID4gMDsKKyAgICByZXR1cm4gZHJvcERh
dGEtPnR5cGVzKCkuY29udGFpbnMobWltZVR5cGVUZXh0SFRNTCk7CiB9CiAKIGJvb2wgRHJhZ0Rh
dGE6OmNvbnRhaW5zVVJMKEZpbGVuYW1lQ29udmVyc2lvblBvbGljeSBmaWxlbmFtZVBvbGljeSkg
Y29uc3QKIHsKLSAgICByZXR1cm4gIWFzVVJMKGZpbGVuYW1lUG9saWN5KS5pc0VtcHR5KCk7Cisg
ICAgcmV0dXJuIG1fcGxhdGZvcm1EcmFnRGF0YS0+dHlwZXMoKS5jb250YWlucyhtaW1lVHlwZVVS
TCkKKyAgICAgICAgfHwgKGZpbGVuYW1lUG9saWN5ID09IENvbnZlcnRGaWxlbmFtZXMgJiYgbV9w
bGF0Zm9ybURyYWdEYXRhLT5jb250YWluc0ZpbGVuYW1lcygpKTsKIH0KIAogU3RyaW5nIERyYWdE
YXRhOjphc1VSTChGaWxlbmFtZUNvbnZlcnNpb25Qb2xpY3kgZmlsZW5hbWVQb2xpY3ksIFN0cmlu
ZyogdGl0bGUpIGNvbnN0CiB7CiAgICAgU3RyaW5nIHVybDsKLSAgICBpZiAobV9wbGF0Zm9ybURy
YWdEYXRhLT5oYXNWYWxpZFVSTCgpKQotICAgICAgICB1cmwgPSBtX3BsYXRmb3JtRHJhZ0RhdGEt
PmdldFVSTCgpLnN0cmluZygpOwotICAgIGVsc2UgaWYgKGZpbGVuYW1lUG9saWN5ID09IENvbnZl
cnRGaWxlbmFtZXMgJiYgIW1fcGxhdGZvcm1EcmFnRGF0YS0+ZmlsZW5hbWVzLmlzRW1wdHkoKSkg
ewotICAgICAgICBTdHJpbmcgZmlsZU5hbWUgPSBtX3BsYXRmb3JtRHJhZ0RhdGEtPmZpbGVuYW1l
c1swXTsKLSAgICAgICAgZmlsZU5hbWUgPSBDaHJvbWl1bUJyaWRnZTo6Z2V0QWJzb2x1dGVQYXRo
KGZpbGVOYW1lKTsKLSAgICAgICAgdXJsID0gQ2hyb21pdW1CcmlkZ2U6OmZpbGVQYXRoVG9VUkwo
ZmlsZU5hbWUpLnN0cmluZygpOworICAgIGlmIChtX3BsYXRmb3JtRHJhZ0RhdGEtPnR5cGVzKCku
Y29udGFpbnMobWltZVR5cGVVUkwpKSB7CisgICAgICAgIGJvb2wgaWdub3JlZFN1Y2Nlc3M7Cisg
ICAgICAgIHVybCA9IG1fcGxhdGZvcm1EcmFnRGF0YS0+Z2V0RGF0YShtaW1lVHlwZVVSTCwgaWdu
b3JlZFN1Y2Nlc3MpOworICAgICAgICBpZiAodGl0bGUpCisgICAgICAgICAgICAqdGl0bGUgPSBt
X3BsYXRmb3JtRHJhZ0RhdGEtPnVybFRpdGxlKCk7CisgICAgfSBlbHNlIGlmIChmaWxlbmFtZVBv
bGljeSA9PSBDb252ZXJ0RmlsZW5hbWVzICYmIGNvbnRhaW5zRmlsZXMoKSkgeworICAgICAgICB1
cmwgPSBDaHJvbWl1bUJyaWRnZTo6ZmlsZVBhdGhUb1VSTChDaHJvbWl1bUJyaWRnZTo6Z2V0QWJz
b2x1dGVQYXRoKG1fcGxhdGZvcm1EcmFnRGF0YS0+ZmlsZW5hbWVzKClbMF0pKTsKICAgICB9Ci0g
Ci0gICAgLy8gfHRpdGxlfCBjYW4gYmUgTlVMTAotICAgIGlmICh0aXRsZSkKLSAgICAgICAgKnRp
dGxlID0gbV9wbGF0Zm9ybURyYWdEYXRhLT51cmxUaXRsZTsKICAgICByZXR1cm4gdXJsOwogfQog
CiBib29sIERyYWdEYXRhOjpjb250YWluc0ZpbGVzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gIW1f
cGxhdGZvcm1EcmFnRGF0YS0+ZmlsZW5hbWVzLmlzRW1wdHkoKTsKKyAgICByZXR1cm4gbV9wbGF0
Zm9ybURyYWdEYXRhLT5jb250YWluc0ZpbGVuYW1lcygpOwogfQogCiB2b2lkIERyYWdEYXRhOjph
c0ZpbGVuYW1lcyhWZWN0b3I8U3RyaW5nPiYgcmVzdWx0KSBjb25zdAogewotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9wbGF0Zm9ybURyYWdEYXRhLT5maWxlbmFtZXMuc2l6ZSgpOyArK2kp
Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQobV9wbGF0Zm9ybURyYWdEYXRhLT5maWxlbmFtZXNbaV0p
OworICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMgPSBtX3BsYXRmb3JtRHJhZ0Rh
dGEtPmZpbGVuYW1lcygpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmlsZW5hbWVzLnNp
emUoKTsgKytpKQorICAgICAgICByZXN1bHQuYXBwZW5kKGZpbGVuYW1lc1tpXSk7CiB9CiAKIGJv
b2wgRHJhZ0RhdGE6OmNvbnRhaW5zUGxhaW5UZXh0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gIW1f
cGxhdGZvcm1EcmFnRGF0YS0+cGxhaW5UZXh0LmlzRW1wdHkoKTsKKyAgICByZXR1cm4gbV9wbGF0
Zm9ybURyYWdEYXRhLT50eXBlcygpLmNvbnRhaW5zKG1pbWVUeXBlVGV4dFBsYWluKTsKIH0KIAog
U3RyaW5nIERyYWdEYXRhOjphc1BsYWluVGV4dCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fcGxh
dGZvcm1EcmFnRGF0YS0+cGxhaW5UZXh0OworICAgIGJvb2wgaWdub3JlZFN1Y2Nlc3M7CisgICAg
cmV0dXJuIG1fcGxhdGZvcm1EcmFnRGF0YS0+Z2V0RGF0YShtaW1lVHlwZVRleHRQbGFpbiwgaWdu
b3JlZFN1Y2Nlc3MpOwogfQogCiBib29sIERyYWdEYXRhOjpjb250YWluc0NvbG9yKCkgY29uc3QK
QEAgLTEwMSw4ICsxMDIsOCBAQCBib29sIERyYWdEYXRhOjpjYW5TbWFydFJlcGxhY2UoKSBjb25z
dAogICAgIC8vIFRoaXMgaXMgYWxsb3dlZCB3aGVuZXZlciB0aGUgZHJhZyBkYXRhIGNvbnRhaW5z
IGEgJ3JhbmdlJyAoaWUuLAogICAgIC8vIENsaXBib2FyZFdpbjo6d3JpdGVSYW5nZSBpcyBjYWxs
ZWQpLiAgRm9yIGV4YW1wbGUsIGRyYWdnaW5nIGEgbGluawogICAgIC8vIHNob3VsZCBub3QgcmVz
dWx0IGluIGEgc3BhY2UgYmVpbmcgYWRkZWQuCi0gICAgcmV0dXJuICFtX3BsYXRmb3JtRHJhZ0Rh
dGEtPnBsYWluVGV4dC5pc0VtcHR5KCkKLSAgICAgICAgJiYgIW1fcGxhdGZvcm1EcmFnRGF0YS0+
aGFzVmFsaWRVUkwoKTsKKyAgICByZXR1cm4gbV9wbGF0Zm9ybURyYWdEYXRhLT50eXBlcygpLmNv
bnRhaW5zKG1pbWVUeXBlVGV4dFBsYWluKQorICAgICAgICAmJiAhbV9wbGF0Zm9ybURyYWdEYXRh
LT50eXBlcygpLmNvbnRhaW5zKG1pbWVUeXBlVVJMKTsKIH0KIAogYm9vbCBEcmFnRGF0YTo6Y29u
dGFpbnNDb21wYXRpYmxlQ29udGVudCgpIGNvbnN0CkBAIC0xMzQsOSArMTM1LDEwIEBAIFBhc3NS
ZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gRHJhZ0RhdGE6OmFzRnJhZ21lbnQoRG9jdW1lbnQqIGRv
YykgY29uc3QKICAgICAgICAgLy8gICAgcmV0dXJuIGZyYWdtZW50OwogICAgIH0KIAotICAgIGlm
ICghbV9wbGF0Zm9ybURyYWdEYXRhLT50ZXh0SHRtbC5pc0VtcHR5KCkpIHsKKyAgICBpZiAobV9w
bGF0Zm9ybURyYWdEYXRhLT50eXBlcygpLmNvbnRhaW5zKG1pbWVUeXBlVGV4dEhUTUwpKSB7Cisg
ICAgICAgIGJvb2wgaWdub3JlZFN1Y2Nlc3M7CiAgICAgICAgIFJlZlB0cjxEb2N1bWVudEZyYWdt
ZW50PiBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChkb2MsCi0gICAgICAgICAg
ICBtX3BsYXRmb3JtRHJhZ0RhdGEtPnRleHRIdG1sLCBtX3BsYXRmb3JtRHJhZ0RhdGEtPmh0bWxC
YXNlVXJsLCBGcmFnbWVudFNjcmlwdGluZ05vdEFsbG93ZWQpOworICAgICAgICAgICAgbV9wbGF0
Zm9ybURyYWdEYXRhLT5nZXREYXRhKG1pbWVUeXBlVGV4dEhUTUwsIGlnbm9yZWRTdWNjZXNzKSwg
bV9wbGF0Zm9ybURyYWdEYXRhLT5odG1sQmFzZVVybCgpLCBGcmFnbWVudFNjcmlwdGluZ05vdEFs
bG93ZWQpOwogICAgICAgICByZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgpOwogICAgIH0KIApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9SZWFkYWJsZURhdGFPYmplY3QuY3Bw
IGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9SZWFkYWJsZURhdGFPYmplY3QuY3BwCmluZGV4
IDFhMzMzYmIuLjA4ODY3M2YgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0v
UmVhZGFibGVEYXRhT2JqZWN0LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Jl
YWRhYmxlRGF0YU9iamVjdC5jcHAKQEAgLTgxLDcgKzgxLDcgQEAgU3RyaW5nIFJlYWRhYmxlRGF0
YU9iamVjdDo6Z2V0VVJMKFN0cmluZyogdGl0bGUpIGNvbnN0CiAgICAgaWYgKCF0aXRsZSkKICAg
ICAgICAgdGl0bGUgPSAmaWdub3JlZFRpdGxlOwogICAgIENocm9taXVtQnJpZGdlOjpjbGlwYm9h
cmRSZWFkRGF0YSgKLSAgICAgICAgY2xpcGJvYXJkQnVmZmVyKG1faXNGb3JEcmFnZ2luZyksIHRl
eHRVcmlMaXN0VHlwZSwgdXJsLCAqdGl0bGUpOworICAgICAgICBjbGlwYm9hcmRCdWZmZXIobV9p
c0ZvckRyYWdnaW5nKSwgbWltZVR5cGVUZXh0VVJJTGlzdCwgdXJsLCAqdGl0bGUpOwogICAgIHJl
dHVybiB1cmw7CiB9CiAKQEAgLTkyLDcgKzkyLDcgQEAgU3RyaW5nIFJlYWRhYmxlRGF0YU9iamVj
dDo6Z2V0SFRNTChTdHJpbmcqIGJhc2VVUkwpIGNvbnN0CiAgICAgaWYgKCFiYXNlVVJMKQogICAg
ICAgICBiYXNlVVJMID0gJmlnbm9yZWRCYXNlVVJMOwogICAgIENocm9taXVtQnJpZGdlOjpjbGlw
Ym9hcmRSZWFkRGF0YSgKLSAgICAgICAgY2xpcGJvYXJkQnVmZmVyKG1faXNGb3JEcmFnZ2luZyks
IHRleHRIdG1sVHlwZSwgaHRtbCwgKmJhc2VVUkwpOworICAgICAgICBjbGlwYm9hcmRCdWZmZXIo
bV9pc0ZvckRyYWdnaW5nKSwgbWltZVR5cGVUZXh0SFRNTCwgaHRtbCwgKmJhc2VVUkwpOwogICAg
IHJldHVybiBodG1sOwogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVt
L1dyaXRhYmxlRGF0YU9iamVjdC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1dyaXRh
YmxlRGF0YU9iamVjdC5jcHAKaW5kZXggNmU3YzI4My4uYWVlN2JmYyAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9Xcml0YWJsZURhdGFPYmplY3QuY3BwCisrKyBiL1dlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vV3JpdGFibGVEYXRhT2JqZWN0LmNwcApAQCAtNDksOSArNDks
OSBAQCBXcml0YWJsZURhdGFPYmplY3Q6OldyaXRhYmxlRGF0YU9iamVjdChib29sIGlzRm9yRHJh
Z2dpbmcpCiB2b2lkIFdyaXRhYmxlRGF0YU9iamVjdDo6Y2xlYXJEYXRhKGNvbnN0IFN0cmluZyYg
dHlwZSkKIHsKICAgICBtX2RhdGFNYXAucmVtb3ZlKHR5cGUpOwotICAgIGlmICh0eXBlID09IHRl
eHRVcmlMaXN0VHlwZSkKKyAgICBpZiAodHlwZSA9PSBtaW1lVHlwZVRleHRVUklMaXN0KQogICAg
ICAgICBtX3VybFRpdGxlID0gIiI7Ci0gICAgZWxzZSBpZiAodHlwZSA9PSB0ZXh0SHRtbFR5cGUp
CisgICAgZWxzZSBpZiAodHlwZSA9PSBtaW1lVHlwZVRleHRIVE1MKQogICAgICAgICBtX2h0bWxC
YXNlVVJMID0gS1VSTCgpOwogfQogCkBAIC04MSwyMiArODEsMjIgQEAgYm9vbCBXcml0YWJsZURh
dGFPYmplY3Q6OnNldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEp
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBtX2RhdGFNYXAuc2V0KHR5cGUsIGRh
dGEpOwotICAgIGlmICh0eXBlID09IHRleHRVcmlMaXN0VHlwZSkKKyAgICBpZiAodHlwZSA9PSBt
aW1lVHlwZVRleHRVUklMaXN0KQogICAgICAgICBtX3VybFRpdGxlID0gIiI7Ci0gICAgZWxzZSBp
ZiAodHlwZSA9PSB0ZXh0SHRtbFR5cGUpCisgICAgZWxzZSBpZiAodHlwZSA9PSBtaW1lVHlwZVRl
eHRIVE1MKQogICAgICAgICBtX2h0bWxCYXNlVVJMID0gS1VSTCgpOwogICAgIHJldHVybiB0cnVl
OwogfQogCiB2b2lkIFdyaXRhYmxlRGF0YU9iamVjdDo6c2V0VVJMKGNvbnN0IFN0cmluZyYgdXJs
LCBjb25zdCBTdHJpbmcmIHRpdGxlKQogewotICAgIHNldERhdGEodGV4dFVyaUxpc3RUeXBlLCB1
cmwpOworICAgIHNldERhdGEobWltZVR5cGVUZXh0VVJJTGlzdCwgdXJsKTsKICAgICBtX3VybFRp
dGxlID0gdGl0bGU7CiB9CiAKIHZvaWQgV3JpdGFibGVEYXRhT2JqZWN0OjpzZXRIVE1MKGNvbnN0
IFN0cmluZyYgaHRtbCwgY29uc3QgS1VSTCYgYmFzZVVSTCkKIHsKLSAgICBzZXREYXRhKHRleHRI
dG1sVHlwZSwgaHRtbCk7CisgICAgc2V0RGF0YShtaW1lVHlwZVRleHRIVE1MLCBodG1sKTsKICAg
ICBtX2h0bWxCYXNlVVJMID0gYmFzZVVSTDsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggNDFhYjA4ZC4u
Njg2YjUxNiAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzkgQEAKKzIwMTAtMDktMjkgIERhbmll
bCBDaGVuZyAgPGRjaGVuZ0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgW2Nocm9taXVtXSBSZWZhY3RvciBDaHJvbWl1bURhdGFP
YmplY3QgdG8gdXNlIGdldHRlcnMvc2V0dGVycy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTQ2NTU5CisKKyAgICAgICAgVGhpcyBpcyBhbiBpbnRlcm1l
ZGlhdGUgc3RlcCB0byBjb252ZXJ0aW5nIENocm9taXVtRGF0YU9iamVjdCB0byB1c2UKKyAgICAg
ICAgY2FsbGJhY2tzIHRvIHRoZSBicm93c2VyIHRvIHJldHJpZXZlIGRhdGEuCisKKyAgICAgICAg
KiBwdWJsaWMvV2ViRHJhZ0RhdGEuaDoKKyAgICAgICAgKiBzcmMvV2ViRHJhZ0RhdGEuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJEcmFnRGF0YTo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYkRyYWdEYXRhOjp1cmwpOgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFnRGF0YTo6c2V0
VVJMKToKKyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0RhdGE6OnVybFRpdGxlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViRHJhZ0RhdGE6OnNldFVSTFRpdGxlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
RHJhZ0RhdGE6OmRvd25sb2FkTWV0YWRhdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFnRGF0
YTo6c2V0RG93bmxvYWRNZXRhZGF0YSk6CisgICAgICAgIChXZWJLaXQ6OldlYkRyYWdEYXRhOjpm
aWxlRXh0ZW5zaW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0RhdGE6OnNldEZpbGVFeHRl
bnNpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFnRGF0YTo6aGFzRmlsZU5hbWVzKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViRHJhZ0RhdGE6OmZpbGVOYW1lcyk6CisgICAgICAgIChXZWJLaXQ6
OldlYkRyYWdEYXRhOjpzZXRGaWxlTmFtZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFnRGF0
YTo6YXBwZW5kVG9GaWxlTmFtZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFnRGF0YTo6cGxh
aW5UZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0RhdGE6OnNldFBsYWluVGV4dCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkRyYWdEYXRhOjpodG1sVGV4dCk6CisgICAgICAgIChXZWJLaXQ6
OldlYkRyYWdEYXRhOjpzZXRIVE1MVGV4dCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRyYWdEYXRh
OjpodG1sQmFzZVVSTCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRyYWdEYXRhOjpzZXRIVE1MQmFz
ZVVSTCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRyYWdEYXRhOjpmaWxlQ29udGVudEZpbGVOYW1l
KToKKyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0RhdGE6OnNldEZpbGVDb250ZW50RmlsZU5hbWUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFnRGF0YTo6ZmlsZUNvbnRlbnQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJEcmFnRGF0YTo6c2V0RmlsZUNvbnRlbnQpOgorCiAyMDEwLTA5LTIyICBLZW5u
ZXRoIFJ1c3NlbGwgIDxrYnJAZ29vZ2xlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBDaHJv
bWl1bSBidWlsZCBmaXguIEZpeCBidWlsZCB3aGVuIGFjY2VsZXJhdGVkCmRpZmYgLS1naXQgYS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkRyYWdEYXRhLmggYi9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYkRyYWdEYXRhLmgKaW5kZXggMjk3OTUxOS4uNjc0OGZlMCAxMDA2NDQKLS0tIGEvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9XZWJEcmFnRGF0YS5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViRHJhZ0RhdGEuaApAQCAtNjYsNyArNjYsNyBAQCBwdWJsaWM6CiAKICAgICBib29s
IGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuICFtX3ByaXZhdGU7IH0KIAotICAgIFdFQktJVF9BUEkg
V2ViVVJMIHVybCgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgV2ViU3RyaW5nIHVybCgpIGNvbnN0
OwogICAgIFdFQktJVF9BUEkgdm9pZCBzZXRVUkwoY29uc3QgV2ViVVJMJik7CiAKICAgICBXRUJL
SVRfQVBJIFdlYlN0cmluZyB1cmxUaXRsZSgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJEcmFnRGF0YS5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRyYWdE
YXRhLmNwcAppbmRleCA2NDNjMzVkLi5iYzZiZGNjIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkRyYWdEYXRhLmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRyYWdE
YXRhLmNwcApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIldlYkRyYWdEYXRhLmgiCiAKICNp
bmNsdWRlICJDaHJvbWl1bURhdGFPYmplY3QuaCIKKyNpbmNsdWRlICJDbGlwYm9hcmRNaW1lVHlw
ZXMuaCIKICNpbmNsdWRlICJXZWJEYXRhLmgiCiAjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCiAjaW5j
bHVkZSAiV2ViVVJMLmgiCkBAIC00OCw3ICs0OSw3IEBAIGNsYXNzIFdlYkRyYWdEYXRhUHJpdmF0
ZSA6IHB1YmxpYyBDaHJvbWl1bURhdGFPYmplY3QgewogCiB2b2lkIFdlYkRyYWdEYXRhOjppbml0
aWFsaXplKCkKIHsKLSAgICBhc3NpZ24oc3RhdGljX2Nhc3Q8V2ViRHJhZ0RhdGFQcml2YXRlKj4o
Q2hyb21pdW1EYXRhT2JqZWN0OjpjcmVhdGUoKS5yZWxlYXNlUmVmKCkpKTsKKyAgICBhc3NpZ24o
c3RhdGljX2Nhc3Q8V2ViRHJhZ0RhdGFQcml2YXRlKj4oQ2hyb21pdW1EYXRhT2JqZWN0OjpjcmVh
dGUoQ2xpcGJvYXJkOjpEcmFnQW5kRHJvcCkucmVsZWFzZVJlZigpKSk7CiB9CiAKIHZvaWQgV2Vi
RHJhZ0RhdGE6OnJlc2V0KCkKQEAgLTY0LDEzNyArNjUsMTQ0IEBAIHZvaWQgV2ViRHJhZ0RhdGE6
OmFzc2lnbihjb25zdCBXZWJEcmFnRGF0YSYgb3RoZXIpCiAgICAgYXNzaWduKHApOwogfQogCi1X
ZWJVUkwgV2ViRHJhZ0RhdGE6OnVybCgpIGNvbnN0CitXZWJTdHJpbmcgV2ViRHJhZ0RhdGE6OnVy
bCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFpc051bGwoKSk7Ci0gICAgcmV0dXJuIG1fcHJpdmF0
ZS0+Z2V0VVJMKCk7CisgICAgYm9vbCBpZ25vcmVkU3VjY2VzczsKKyAgICByZXR1cm4gbV9wcml2
YXRlLT5nZXREYXRhKG1pbWVUeXBlVVJMLCBpZ25vcmVkU3VjY2Vzcyk7CiB9CiAKIHZvaWQgV2Vi
RHJhZ0RhdGE6OnNldFVSTChjb25zdCBXZWJVUkwmIHVybCkKIHsKICAgICBlbnN1cmVNdXRhYmxl
KCk7Ci0gICAgbV9wcml2YXRlLT5zZXRVUkwodXJsKTsKKyAgICBtX3ByaXZhdGUtPnNldERhdGEo
bWltZVR5cGVVUkwsIEtVUkwodXJsKS5zdHJpbmcoKSk7CiB9CiAKIFdlYlN0cmluZyBXZWJEcmFn
RGF0YTo6dXJsVGl0bGUoKSBjb25zdAogewogICAgIEFTU0VSVCghaXNOdWxsKCkpOwotICAgIHJl
dHVybiBtX3ByaXZhdGUtPnVybFRpdGxlOworICAgIHJldHVybiBtX3ByaXZhdGUtPnVybFRpdGxl
KCk7CiB9CiAKIHZvaWQgV2ViRHJhZ0RhdGE6OnNldFVSTFRpdGxlKGNvbnN0IFdlYlN0cmluZyYg
dXJsVGl0bGUpCiB7CiAgICAgZW5zdXJlTXV0YWJsZSgpOwotICAgIG1fcHJpdmF0ZS0+dXJsVGl0
bGUgPSB1cmxUaXRsZTsKKyAgICBtX3ByaXZhdGUtPnNldFVybFRpdGxlKHVybFRpdGxlKTsKIH0K
IAogV2ViU3RyaW5nIFdlYkRyYWdEYXRhOjpkb3dubG9hZE1ldGFkYXRhKCkgY29uc3QKIHsKICAg
ICBBU1NFUlQoIWlzTnVsbCgpKTsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5kb3dubG9hZE1ldGFk
YXRhOworICAgIGJvb2wgaWdub3JlZFN1Y2Nlc3M7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Z2V0
RGF0YShtaW1lVHlwZURvd25sb2FkVVJMLCBpZ25vcmVkU3VjY2Vzcyk7CiB9CiAKIHZvaWQgV2Vi
RHJhZ0RhdGE6OnNldERvd25sb2FkTWV0YWRhdGEoY29uc3QgV2ViU3RyaW5nJiBkb3dubG9hZE1l
dGFkYXRhKQogewogICAgIGVuc3VyZU11dGFibGUoKTsKLSAgICBtX3ByaXZhdGUtPmRvd25sb2Fk
TWV0YWRhdGEgPSBkb3dubG9hZE1ldGFkYXRhOworICAgIG1fcHJpdmF0ZS0+c2V0RGF0YShtaW1l
VHlwZURvd25sb2FkVVJMLCBkb3dubG9hZE1ldGFkYXRhKTsKIH0KIAogV2ViU3RyaW5nIFdlYkRy
YWdEYXRhOjpmaWxlRXh0ZW5zaW9uKCkgY29uc3QKIHsKICAgICBBU1NFUlQoIWlzTnVsbCgpKTsK
LSAgICByZXR1cm4gbV9wcml2YXRlLT5maWxlRXh0ZW5zaW9uOworICAgIHJldHVybiBtX3ByaXZh
dGUtPmZpbGVFeHRlbnNpb24oKTsKIH0KIAogdm9pZCBXZWJEcmFnRGF0YTo6c2V0RmlsZUV4dGVu
c2lvbihjb25zdCBXZWJTdHJpbmcmIGZpbGVFeHRlbnNpb24pCiB7CiAgICAgZW5zdXJlTXV0YWJs
ZSgpOwotICAgIG1fcHJpdmF0ZS0+ZmlsZUV4dGVuc2lvbiA9IGZpbGVFeHRlbnNpb247CisgICAg
bV9wcml2YXRlLT5zZXRGaWxlRXh0ZW5zaW9uKGZpbGVFeHRlbnNpb24pOwogfQogCiBib29sIFdl
YkRyYWdEYXRhOjpoYXNGaWxlTmFtZXMoKSBjb25zdAogewogICAgIEFTU0VSVCghaXNOdWxsKCkp
OwotICAgIHJldHVybiAhbV9wcml2YXRlLT5maWxlbmFtZXMuaXNFbXB0eSgpOworICAgIHJldHVy
biBtX3ByaXZhdGUtPmNvbnRhaW5zRmlsZW5hbWVzKCk7CiB9CiAKIHZvaWQgV2ViRHJhZ0RhdGE6
OmZpbGVOYW1lcyhXZWJWZWN0b3I8V2ViU3RyaW5nPiYgZmlsZU5hbWVzKSBjb25zdAogewogICAg
IEFTU0VSVCghaXNOdWxsKCkpOwotICAgIGZpbGVOYW1lcyA9IG1fcHJpdmF0ZS0+ZmlsZW5hbWVz
OworICAgIGZpbGVOYW1lcyA9IG1fcHJpdmF0ZS0+ZmlsZW5hbWVzKCk7CiB9CiAKIHZvaWQgV2Vi
RHJhZ0RhdGE6OnNldEZpbGVOYW1lcyhjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYgZmlsZU5h
bWVzKQogewogICAgIGVuc3VyZU11dGFibGUoKTsKLSAgICBtX3ByaXZhdGUtPmZpbGVuYW1lcy5j
bGVhcigpOwotICAgIG1fcHJpdmF0ZS0+ZmlsZW5hbWVzLmFwcGVuZChmaWxlTmFtZXMuZGF0YSgp
LCBmaWxlTmFtZXMuc2l6ZSgpKTsKKyAgICBWZWN0b3I8U3RyaW5nPiBmaWxlTmFtZXNDb3B5Owor
ICAgIGZpbGVOYW1lc0NvcHkuYXBwZW5kKGZpbGVOYW1lcy5kYXRhKCksIGZpbGVOYW1lcy5zaXpl
KCkpOworICAgIG1fcHJpdmF0ZS0+c2V0RmlsZW5hbWVzKGZpbGVOYW1lc0NvcHkpOwogfQogCiB2
b2lkIFdlYkRyYWdEYXRhOjphcHBlbmRUb0ZpbGVOYW1lcyhjb25zdCBXZWJTdHJpbmcmIGZpbGVO
YW1lKQogewogICAgIGVuc3VyZU11dGFibGUoKTsKLSAgICBtX3ByaXZhdGUtPmZpbGVuYW1lcy5h
cHBlbmQoZmlsZU5hbWUpOworICAgIFZlY3RvcjxTdHJpbmc+IGZpbGVOYW1lcyA9IG1fcHJpdmF0
ZS0+ZmlsZW5hbWVzKCk7CisgICAgZmlsZU5hbWVzLmFwcGVuZChmaWxlTmFtZSk7CisgICAgbV9w
cml2YXRlLT5zZXRGaWxlbmFtZXMoZmlsZU5hbWVzKTsKIH0KIAogV2ViU3RyaW5nIFdlYkRyYWdE
YXRhOjpwbGFpblRleHQoKSBjb25zdAogewogICAgIEFTU0VSVCghaXNOdWxsKCkpOwotICAgIHJl
dHVybiBtX3ByaXZhdGUtPnBsYWluVGV4dDsKKyAgICBib29sIGlnbm9yZWRTdWNjZXNzOworICAg
IHJldHVybiBtX3ByaXZhdGUtPmdldERhdGEobWltZVR5cGVUZXh0UGxhaW4sIGlnbm9yZWRTdWNj
ZXNzKTsKIH0KIAogdm9pZCBXZWJEcmFnRGF0YTo6c2V0UGxhaW5UZXh0KGNvbnN0IFdlYlN0cmlu
ZyYgcGxhaW5UZXh0KQogewogICAgIGVuc3VyZU11dGFibGUoKTsKLSAgICBtX3ByaXZhdGUtPnBs
YWluVGV4dCA9IHBsYWluVGV4dDsKKyAgICBtX3ByaXZhdGUtPnNldERhdGEobWltZVR5cGVUZXh0
UGxhaW4sIHBsYWluVGV4dCk7CiB9CiAKIFdlYlN0cmluZyBXZWJEcmFnRGF0YTo6aHRtbFRleHQo
KSBjb25zdAogewogICAgIEFTU0VSVCghaXNOdWxsKCkpOwotICAgIHJldHVybiBtX3ByaXZhdGUt
PnRleHRIdG1sOworICAgIGJvb2wgaWdub3JlZFN1Y2Nlc3M7CisgICAgcmV0dXJuIG1fcHJpdmF0
ZS0+Z2V0RGF0YShtaW1lVHlwZVRleHRIVE1MLCBpZ25vcmVkU3VjY2Vzcyk7CiB9CiAKIHZvaWQg
V2ViRHJhZ0RhdGE6OnNldEhUTUxUZXh0KGNvbnN0IFdlYlN0cmluZyYgaHRtbFRleHQpCiB7CiAg
ICAgZW5zdXJlTXV0YWJsZSgpOwotICAgIG1fcHJpdmF0ZS0+dGV4dEh0bWwgPSBodG1sVGV4dDsK
KyAgICBtX3ByaXZhdGUtPnNldERhdGEobWltZVR5cGVUZXh0SFRNTCwgaHRtbFRleHQpOwogfQog
CiBXZWJVUkwgV2ViRHJhZ0RhdGE6Omh0bWxCYXNlVVJMKCkgY29uc3QKIHsKICAgICBBU1NFUlQo
IWlzTnVsbCgpKTsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5odG1sQmFzZVVybDsKKyAgICByZXR1
cm4gbV9wcml2YXRlLT5odG1sQmFzZVVybCgpOwogfQogCiB2b2lkIFdlYkRyYWdEYXRhOjpzZXRI
VE1MQmFzZVVSTChjb25zdCBXZWJVUkwmIGh0bWxCYXNlVVJMKQogewogICAgIGVuc3VyZU11dGFi
bGUoKTsKLSAgICBtX3ByaXZhdGUtPmh0bWxCYXNlVXJsID0gaHRtbEJhc2VVUkw7CisgICAgbV9w
cml2YXRlLT5zZXRIdG1sQmFzZVVybChodG1sQmFzZVVSTCk7CiB9CiAKIFdlYlN0cmluZyBXZWJE
cmFnRGF0YTo6ZmlsZUNvbnRlbnRGaWxlTmFtZSgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFpc051
bGwoKSk7Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+ZmlsZUNvbnRlbnRGaWxlbmFtZTsKKyAgICBy
ZXR1cm4gbV9wcml2YXRlLT5maWxlQ29udGVudEZpbGVuYW1lKCk7CiB9CiAKIHZvaWQgV2ViRHJh
Z0RhdGE6OnNldEZpbGVDb250ZW50RmlsZU5hbWUoY29uc3QgV2ViU3RyaW5nJiBmaWxlTmFtZSkK
IHsKICAgICBlbnN1cmVNdXRhYmxlKCk7Ci0gICAgbV9wcml2YXRlLT5maWxlQ29udGVudEZpbGVu
YW1lID0gZmlsZU5hbWU7CisgICAgbV9wcml2YXRlLT5zZXRGaWxlQ29udGVudEZpbGVuYW1lKGZp
bGVOYW1lKTsKIH0KIAogV2ViRGF0YSBXZWJEcmFnRGF0YTo6ZmlsZUNvbnRlbnQoKSBjb25zdAog
ewogICAgIEFTU0VSVCghaXNOdWxsKCkpOwotICAgIHJldHVybiBXZWJEYXRhKG1fcHJpdmF0ZS0+
ZmlsZUNvbnRlbnQpOworICAgIHJldHVybiBXZWJEYXRhKG1fcHJpdmF0ZS0+ZmlsZUNvbnRlbnQo
KSk7CiB9CiAKIHZvaWQgV2ViRHJhZ0RhdGE6OnNldEZpbGVDb250ZW50KGNvbnN0IFdlYkRhdGEm
IGZpbGVDb250ZW50KQogewogICAgIGVuc3VyZU11dGFibGUoKTsKLSAgICBtX3ByaXZhdGUtPmZp
bGVDb250ZW50ID0gZmlsZUNvbnRlbnQ7CisgICAgbV9wcml2YXRlLT5zZXRGaWxlQ29udGVudChm
aWxlQ29udGVudCk7CiB9CiAKIFdlYkRyYWdEYXRhOjpXZWJEcmFnRGF0YShjb25zdCBXVEY6OlBh
c3NSZWZQdHI8V2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0PiYgZGF0YSkK
</data>

          </attachment>
      

    </bug>

</bugzilla>