<?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>76598</bug_id>
          
          <creation_ts>2012-01-18 19:51:15 -0800</creation_ts>
          <short_desc>[chromium] Refactor ClipboardChromium and DataTransferItemList/DataTransferItem to support HTML spec</short_desc>
          <delta_ts>2012-03-16 13:53:52 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>76856</dependson>
    
    <dependson>76925</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Daniel Cheng">dcheng</reporter>
          <assigned_to name="Daniel Cheng">dcheng</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>fishd</cc>
    
    <cc>jianli</cc>
    
    <cc>kinuko</cc>
    
    <cc>levin</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>538412</commentid>
    <comment_count>0</comment_count>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2012-01-18 19:51:15 -0800</bug_when>
    <thetext>[chromium] Refactor ClipboardChromium and DataTransferItemList/DataTransferItem to support HTML spec</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538413</commentid>
    <comment_count>1</comment_count>
      <attachid>123057</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2012-01-18 19:53:04 -0800</bug_when>
    <thetext>Created attachment 123057
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538416</commentid>
    <comment_count>2</comment_count>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2012-01-18 20:03:12 -0800</bug_when>
    <thetext>Just a starter patch that shows the gist of what I think we should do. A lot of stuff is still unimplemented, such as the lazy population of ChromiumDataObject::items() but the general idea is there.

I&apos;m not sure about the division of code between ClpboardChromium and ChromiumDataObject at the moment; I suspect it&apos;s something will become clearer with more refactoring.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538793</commentid>
    <comment_count>3</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-01-19 10:25:24 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Just a starter patch that shows the gist of what I think we should do. A lot of stuff is still unimplemented, such as the lazy population of ChromiumDataObject::items() but the general idea is there.

Can you explain what the refactoring is doing and why?  It&apos;s not obvious to me from skimming the huge patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538797</commentid>
    <comment_count>4</comment_count>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2012-01-19 10:38:12 -0800</bug_when>
    <thetext>There&apos;s a lot of duplicated logic today between ClipboardChromium and DataTransferItemListChromium/DataTransferItemChromium because the underlying representation between the two is so different, and it leads to a lot of situations where things are sort of implemented.

I&apos;m trying to unify this by representing the drag store / clipboard store as a list of (kind, type, value) tuples. I was planning on having a generic DataTransferItemChromium virtual interface, and then having various specializations to handle the various quirks of each flavor, e.g:

DataTransferItemDragText -- for generic text or custom MIME type text
DataTransferItemDragUriList -- for URLs, since we try to remember the title associated with the URL in the case of dragging an &lt;a&gt;
DataTransferItemDragHtml -- for HTML, so we can associate a base URL where appropriate.
DataTransferItemDragFile -- generic encapsulation for files. Maybe even add proper drag out/drag in support for file stream stuff, like when images are dragged. This comes with security considerations though. This will hopefully also make it easier for kinuko&apos;s work.

DataTransferItemClipboardText
DataTransferItemClipboardHtml
DataTransferItemClipboardImage -- I may just rename this to Blob.

ChromiumDataObject will manage this list, which makes exposing the actual DataTransferItem/DataTransferItemList to the page much easier, since it&apos;s the same as the underlying representation. The existing DataTransfer legacy APIs can expressed in terms of operations on the data store list as well.

This also removes the huge if()s in ChromiumDataObject::getData()/setData() and DataTransferItemChromium::getAsString(). We pay a slight performance cost because of additional vtable dispatch, but I think it&apos;s worth it to make this code more readable, understandable, and extensible.

I&apos;m planning on uploading another snapshot later today--I was hoping to have something more substantial by now, but a power outage took out my machines.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>539353</commentid>
    <comment_count>5</comment_count>
      <attachid>123271</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2012-01-20 01:55:19 -0800</bug_when>
    <thetext>Created attachment 123271
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>539354</commentid>
    <comment_count>6</comment_count>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2012-01-20 01:57:14 -0800</bug_when>
    <thetext>Unfortunately, this patch is huge and I don&apos;t have good ideas on how to break it up. It does better show the intent of this CL though--I&apos;ve implemented the basic plumbing between ChromiumDataObject and WebDragData, and the hierarchy in DataTransferItemChromium.h should give a good idea of how I&apos;m cleaning up the getAsString() implementations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541127</commentid>
    <comment_count>7</comment_count>
      <attachid>123698</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2012-01-23 22:06:02 -0800</bug_when>
    <thetext>Created attachment 123698
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541129</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-23 22:10:33 -0800</bug_when>
    <thetext>Please wait for approval from fishd@chromium.org before submitting because this patch contains changes to the Chromium public API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541191</commentid>
    <comment_count>9</comment_count>
      <attachid>123698</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-24 02:06:45 -0800</bug_when>
    <thetext>Comment on attachment 123698
Patch

Attachment 123698 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11336284

New failing tests:
fast/events/dropzone-002.html
editing/pasteboard/files-during-page-drags.html
editing/pasteboard/drop-link.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541448</commentid>
    <comment_count>10</comment_count>
      <attachid>123763</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2012-01-24 10:28:03 -0800</bug_when>
    <thetext>Created attachment 123763
Patch

Fix files-during-page-drags.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541533</commentid>
    <comment_count>11</comment_count>
      <attachid>123763</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-24 11:56:14 -0800</bug_when>
    <thetext>Comment on attachment 123763
Patch

Attachment 123763 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11242274

New failing tests:
fast/events/dropzone-002.html
editing/pasteboard/drop-link.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541828</commentid>
    <comment_count>12</comment_count>
      <attachid>123837</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2012-01-24 16:28:16 -0800</bug_when>
    <thetext>Created attachment 123837
Patch

Rebased patch for EWS. The new layout tests are not included yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545628</commentid>
    <comment_count>13</comment_count>
      <attachid>123837</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2012-01-30 17:16:59 -0800</bug_when>
    <thetext>Comment on attachment 123837
Patch

This patch is being broken up and landed as a series of patches. This bug will remain open for tracking reasons.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>577891</commentid>
    <comment_count>14</comment_count>
      <attachid>131729</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2012-03-13 15:35:04 -0700</bug_when>
    <thetext>Created attachment 131729
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>577899</commentid>
    <comment_count>15</comment_count>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2012-03-13 15:39:07 -0700</bug_when>
    <thetext>Several things that&apos;d make sense for a followup patch:
- Rename DataTransferItemListChromium and DataTransferItemChromium since they aren&apos;t (directly) DataTransferItemList/DataTransferItem anymore.
- Combine DataTransferItemListChromium and ChromiumDataObject.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578984</commentid>
    <comment_count>16</comment_count>
      <attachid>131729</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-03-14 17:42:10 -0700</bug_when>
    <thetext>Comment on attachment 131729
Patch

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

This patch is still ginormous.  I probably missed lots of things, but I&apos;m tired of scrolling up and down the patch.  Would it be possible to transition one type at a time?

&gt; Source/WebCore/platform/chromium/ChromiumDataObject.cpp:92
&gt; +    for (size_t i = 0; i &lt; m_itemList-&gt;length(); ) {
&gt; +        if (m_itemList-&gt;item(i)-&gt;kind() == DataTransferItem::kindString) {
&gt; +            m_itemList-&gt;deleteItem(i, ASSERT_NO_EXCEPTION);
&gt; +            continue;

I&apos;m a bit worried that future kinds will be added and this code forgotten.  != kindFile would help insulate from that.  Alternately, you could make a new list, copy the file kinds into it then swap.  Deleting while iterating makes me a bit nervous.

&gt; Source/WebCore/platform/chromium/ChromiumDataObject.cpp:190
&gt; +ChromiumDataObject::ChromiumDataObject(PassRefPtr&lt;DataTransferItemListChromium&gt; itemList)
&gt; +    : m_itemList(itemList)

Is it OK that we&apos;re sharing a pointer to itemList?  For example, ChromiumDataObject::copy() uses this constructor and will end up pointing to the same underlying itemList.  What is the expected behavior of copy()?

&gt; Source/WebCore/platform/chromium/ChromiumDataObject.h:68
&gt; +    void getURL(String&amp; url, String* title) const;
&gt; +    void setURL(const String&amp; url, const String&amp; title);
&gt; +    void getHTML(String&amp; html, KURL&amp; baseURL) const;

WebKit style is to not use the get prefix on getters.  In getURL, should |title| have a default value of 0?

&gt; Source/WebCore/platform/chromium/ClipboardChromium.cpp:152
&gt; +    m_list-&gt;add(file, m_clipboard-&gt;frame()-&gt;document()-&gt;scriptExecutionContext());

Is it possible for document() to change (thereby pointing to a different scriptExecutionContext) from the time the wrapper was created? It looks like the old code was holding on to the context from an earlier time.  Maybe this can&apos;t happen?

&gt; Source/WebCore/platform/chromium/ClipboardChromium.cpp:212
&gt; +static String normalizeType(const String&amp; type, bool&amp; convertToURL)

Nit: I would make convertToURL a pointer to a bool with a default value of 0 since only one caller needs it.

&gt; Source/WebCore/platform/chromium/DataTransferItemChromium.cpp:82
&gt; +DataTransferItemChromium::DataTransferItemChromium(const String&amp; kind, const String&amp; type, const String&amp; data,
&gt; +    PassRefPtr&lt;File&gt; file, PassRefPtr&lt;SharedBuffer&gt; sharedBuffer, const String&amp; title, const KURL&amp; baseURL)

Passing 7 parameters seems error prone.  Why not just have a constructor with kind and type and have the create methods set the other members?

&gt; Source/WebCore/platform/chromium/DataTransferItemChromium.cpp:119
&gt; +        ASSERT(m_sharedBuffer);
&gt; +        return 0; // FIXME: Support this?

By this, do you mean returning a shared buffer?

&gt; Source/WebCore/platform/chromium/DataTransferItemChromium.cpp:167
&gt; +    return PlatformSupport::clipboardSequenceNumber(currentPasteboardBuffer()) == m_sequenceNumber
&gt; +        ? data
&gt; +        : String();

Nit: I wouldn&apos;t bother wrapping here. Actually, I would just early return if the sequence number doesn&apos;t match so we don&apos;t do the extra work.

&gt; Source/WebCore/platform/chromium/DataTransferItemChromium.cpp:173
&gt; +    // FIXME: When we properly support File dragout, we&apos;ll need to make sure
&gt; +    // this works as expected for DragDataChromium.

Is there a bug filed for supporting file drag outs?

&gt; Source/WebCore/platform/chromium/DataTransferItemChromium.h:56
&gt; +    static PassRefPtr&lt;DataTransferItemChromium&gt; create(PassRefPtr&lt;File&gt;);
&gt; +    static PassRefPtr&lt;DataTransferItemChromium&gt; createFromURL(const String&amp; url, const String&amp; title);
&gt; +    static PassRefPtr&lt;DataTransferItemChromium&gt; createFromHTML(const String&amp; html, const KURL&amp; baseURL);
&gt; +    static PassRefPtr&lt;DataTransferItemChromium&gt; create(const String&amp; filename, PassRefPtr&lt;SharedBuffer&gt;);
&gt; +    static PassRefPtr&lt;DataTransferItemChromium&gt; createFromPasteboard(const String&amp; type, uint64_t sequenceNumber);

Why are some of these createFrom* and some are just create?

&gt; Source/WebCore/platform/chromium/DataTransferItemListChromium.cpp:61
&gt; +    uint64 sequenceNumber = PlatformSupport::clipboardSequenceNumber(currentPasteboardBuffer());

It looks like sequenceNumber should be uint64_t to match the function.

&gt; Source/WebCore/platform/chromium/DataTransferItemListChromium.cpp:85
&gt;  void DataTransferItemListChromium::deleteItem(unsigned long index, ExceptionCode&amp; ec)

|ec| appears to be unused. Doesn&apos;t clang complain about that?

&gt; Source/WebKit/chromium/src/WebDragData.cpp:87
&gt; +                continue; // FIXME: Support File properly.

Is this for the filename case that we were skipping before?  This FIXME is vague, can you expand on it more?

&gt; LayoutTests/fast/events/clipboard-dataTransferItemList.html:117
&gt; +    [runTest, [0, 0]],
&gt; +    [runTest, [0, 1]],
&gt; +    [runTest, [1, 0]],
&gt; +    [runTest, [1, 1]],

I would just hardcode runTest in runNext().  No need to repeat it 4 times here.

&gt; LayoutTests/fast/events/drag-dataTransferItemList.html:145
&gt; +    [runTest, [0, 0]],
&gt; +    [runTest, [0, 1]],
&gt; +    [runTest, [1, 0]],
&gt; +    [runTest, [1, 1]],

I would just hardcode runTest in runNext().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579850</commentid>
    <comment_count>17</comment_count>
      <attachid>132139</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2012-03-15 16:11:50 -0700</bug_when>
    <thetext>Created attachment 132139
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579853</commentid>
    <comment_count>18</comment_count>
      <attachid>131729</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2012-03-15 16:12:03 -0700</bug_when>
    <thetext>Comment on attachment 131729
Patch

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

&gt;&gt; Source/WebCore/platform/chromium/ChromiumDataObject.cpp:92
&gt;&gt; +            continue;
&gt; 
&gt; I&apos;m a bit worried that future kinds will be added and this code forgotten.  != kindFile would help insulate from that.  Alternately, you could make a new list, copy the file kinds into it then swap.  Deleting while iterating makes me a bit nervous.

Fixed to use kindFile.

&gt;&gt; Source/WebCore/platform/chromium/ChromiumDataObject.cpp:190
&gt;&gt; +    : m_itemList(itemList)
&gt; 
&gt; Is it OK that we&apos;re sharing a pointer to itemList?  For example, ChromiumDataObject::copy() uses this constructor and will end up pointing to the same underlying itemList.  What is the expected behavior of copy()?

Yes, it&apos;s OK to do this. We implement this operator for WebDragData, which asserts that only one ref is held before updating it.

&gt;&gt; Source/WebCore/platform/chromium/ChromiumDataObject.h:68
&gt;&gt; +    void getHTML(String&amp; html, KURL&amp; baseURL) const;
&gt; 
&gt; WebKit style is to not use the get prefix on getters.  In getURL, should |title| have a default value of 0?

Done for both. The default arg isn&apos;t really used currently though.

&gt;&gt; Source/WebCore/platform/chromium/ClipboardChromium.cpp:152
&gt;&gt; +    m_list-&gt;add(file, m_clipboard-&gt;frame()-&gt;document()-&gt;scriptExecutionContext());
&gt; 
&gt; Is it possible for document() to change (thereby pointing to a different scriptExecutionContext) from the time the wrapper was created? It looks like the old code was holding on to the context from an earlier time.  Maybe this can&apos;t happen?

I don&apos;t think this can happen. It&apos;s a slight optimization to avoid holding on to pointers that have a high chance of not being used.

&gt;&gt; Source/WebCore/platform/chromium/ClipboardChromium.cpp:212
&gt;&gt; +static String normalizeType(const String&amp; type, bool&amp; convertToURL)
&gt; 
&gt; Nit: I would make convertToURL a pointer to a bool with a default value of 0 since only one caller needs it.

Done.

&gt;&gt; Source/WebCore/platform/chromium/DataTransferItemChromium.cpp:82
&gt;&gt; +    PassRefPtr&lt;File&gt; file, PassRefPtr&lt;SharedBuffer&gt; sharedBuffer, const String&amp; title, const KURL&amp; baseURL)
&gt; 
&gt; Passing 7 parameters seems error prone.  Why not just have a constructor with kind and type and have the create methods set the other members?

This lets the data members be const. It&apos;d be nice to keep that, but I don&apos;t see how without losing the const members or using lots of const casts.

&gt;&gt; Source/WebCore/platform/chromium/DataTransferItemChromium.cpp:119
&gt;&gt; +        return 0; // FIXME: Support this?
&gt; 
&gt; By this, do you mean returning a shared buffer?

Yes, we&apos;d need some way to turn sharedBuffer into a file or blob.

&gt;&gt; Source/WebCore/platform/chromium/DataTransferItemChromium.cpp:167
&gt;&gt; +        : String();
&gt; 
&gt; Nit: I wouldn&apos;t bother wrapping here. Actually, I would just early return if the sequence number doesn&apos;t match so we don&apos;t do the extra work.

This is intended to fix a slight race condition (the sequence number may have changed between the time we got the data and the time we checked the sequence number)

&gt;&gt; Source/WebCore/platform/chromium/DataTransferItemChromium.cpp:173
&gt;&gt; +    // this works as expected for DragDataChromium.
&gt; 
&gt; Is there a bug filed for supporting file drag outs?

There isn&apos;t. I made one, though I have no plans to address it at the moment.

&gt;&gt; Source/WebCore/platform/chromium/DataTransferItemChromium.h:56
&gt;&gt; +    static PassRefPtr&lt;DataTransferItemChromium&gt; createFromPasteboard(const String&amp; type, uint64_t sequenceNumber);
&gt; 
&gt; Why are some of these createFrom* and some are just create?

Originally it was just to avoid the clash from create() and createFromURL() which have the same type signature. I&apos;ve just updated it so all of them are createFrom*

&gt;&gt; Source/WebCore/platform/chromium/DataTransferItemListChromium.cpp:61
&gt;&gt; +    uint64 sequenceNumber = PlatformSupport::clipboardSequenceNumber(currentPasteboardBuffer());
&gt; 
&gt; It looks like sequenceNumber should be uint64_t to match the function.

Done.

&gt; Source/WebCore/platform/chromium/DataTransferItemListChromium.cpp:85
&gt;  void DataTransferItemListChromium::deleteItem(unsigned long index, ExceptionCode&amp; ec)

Context: unused |ec|. I&apos;ve removed it, but I can&apos;t seem to reply directly because of some weird bug...

&gt;&gt; Source/WebKit/chromium/src/WebDragData.cpp:87
&gt;&gt; +                continue; // FIXME: Support File properly.
&gt; 
&gt; Is this for the filename case that we were skipping before?  This FIXME is vague, can you expand on it more?

Done. This would be needed to support DataTransferItemList.add(File)

&gt;&gt; LayoutTests/fast/events/clipboard-dataTransferItemList.html:117
&gt;&gt; +    [runTest, [1, 1]],
&gt; 
&gt; I would just hardcode runTest in runNext().  No need to repeat it 4 times here.

Done.

&gt;&gt; LayoutTests/fast/events/drag-dataTransferItemList.html:145
&gt;&gt; +    [runTest, [1, 1]],
&gt; 
&gt; I would just hardcode runTest in runNext().

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579923</commentid>
    <comment_count>19</comment_count>
      <attachid>132139</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-03-15 17:10:22 -0700</bug_when>
    <thetext>Comment on attachment 132139
Patch

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

I&apos;m really only confident that I&apos;ve checked the coding style.  The patch is too big for me to know if it&apos;s correct or not.  I think it&apos;s fine to land, but we should try to cover more test types in the test (e.g., files, text/html, etc)

&gt; Source/WebCore/platform/chromium/ChromiumDataObject.h:66
&gt; +    void urlAndTitle(String&amp; url, String* title = 0) const;

If all callers provide title, we can remove the default param (I would just make it pass by reference so it&apos;s more like htmlAndBaseURL).

&gt; Source/WebCore/platform/chromium/DataTransferItemChromium.cpp:82
&gt; +DataTransferItemChromium::DataTransferItemChromium(const String&amp; kind, const String&amp; type, const String&amp; data,
&gt; +    PassRefPtr&lt;File&gt; file, PassRefPtr&lt;SharedBuffer&gt; sharedBuffer, const String&amp; title, const KURL&amp; baseURL)

Given the simplicity of this class and that all the methods are const, I&apos;m not worried that the members are const or not.  When introducing a new type, I would find &quot;adoptRef(new DataTransferItemChromium(DataTransferItem::kindFile, String(), String(), 0, buffer, name, KURL()));&quot; harder to understand and more error prone than accidentally mutating a member variable.

&gt; Source/WebCore/platform/chromium/DataTransferItemChromium.cpp:119
&gt; +        ASSERT(m_sharedBuffer);
&gt; +        return 0; // FIXME: Support this?

Please make the comment more clear.  E.g., FIXME: Support converting a shared buffer into a file.

&gt; Source/WebCore/platform/chromium/DataTransferItemChromium.cpp:165
&gt; +    return PlatformSupport::clipboardSequenceNumber(currentPasteboardBuffer()) == m_sequenceNumber ? data : String();

Is there a test covering this bug fix?  Hiding a bug fix in an 80k patch is likely to regress in the future.  I would be better to fix the bug in a separate patch.

&gt; Source/WebCore/platform/chromium/DataTransferItemChromium.cpp:171
&gt; +    // FIXME: When we properly support File dragout, we&apos;ll need to make sure
&gt; +    // this works as expected for DragDataChromium.

Please include a link to the bug you created here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580920</commentid>
    <comment_count>20</comment_count>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2012-03-16 13:53:52 -0700</bug_when>
    <thetext>Committed r111061: &lt;http://trac.webkit.org/changeset/111061&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123057</attachid>
            <date>2012-01-18 19:53:04 -0800</date>
            <delta_ts>2012-01-20 01:55:15 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76598-20120118195303.patch</filename>
            <type>text/plain</type>
            <size>49362</size>
            <attacher name="Daniel Cheng">dcheng</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1MjI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2FjYzFlNzRjN2QzMjRm
ZTBjNDM1MjVmZWViZTk4ZjZjZDliZWNmMy4uMDAxZDNjYmViMWYwNDBiNDY2NWJlOGZmYzA1ODk2
MzBlYzlhOTg1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc1IEBACisyMDEyLTAxLTE4ICBEYW5p
ZWwgQ2hlbmcgIDxkY2hlbmdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gUmVm
YWN0b3IgQ2xpcGJvYXJkQ2hyb21pdW0gYW5kIERhdGFUcmFuc2Zlckl0ZW1MaXN0L0RhdGFUcmFu
c2Zlckl0ZW0gdG8gc3VwcG9ydCBIVE1MIHNwZWMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTc2NTk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiAoT09QUyEpCisKKyAgICAgICAgKiBX
ZWJDb3JlLmd5cGk6CisgICAgICAgICogZG9tL0RhdGFUcmFuc2Zlckl0ZW0uY3BwOgorICAgICAg
ICAqIGRvbS9EYXRhVHJhbnNmZXJJdGVtLmg6CisgICAgICAgICogZG9tL0RhdGFUcmFuc2Zlckl0
ZW1MaXN0LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBkb20vRGF0YVRyYW5zZmVySXRlbUxpc3Qu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjppdGVtcyk6CisgICAgICAgIChX
ZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OmNsZWFyRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpDaHJvbWl1bURhdGFPYmplY3Q6OmNsZWFyQWxsKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9t
aXVtRGF0YU9iamVjdDo6Y2xlYXJBbGxFeGNlcHRGaWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpD
aHJvbWl1bURhdGFPYmplY3Q6Omhhc0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1E
YXRhT2JqZWN0Ojp0eXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6
OmdldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpzZXREYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6dXJsVGl0bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpzZXRVcmxUaXRsZSk6CisgICAgICAg
IChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6Omh0bWxCYXNlVXJsKToKKyAgICAgICAgKFdl
YkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6c2V0SHRtbEJhc2VVcmwpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0Ojpjb250YWluc0ZpbGVuYW1lcyk6CisgICAgICAgIChX
ZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OmZpbGVuYW1lcyk6CisgICAgICAgIChXZWJDb3Jl
OjpDaHJvbWl1bURhdGFPYmplY3Q6OnNldEZpbGVuYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpD
aHJvbWl1bURhdGFPYmplY3Q6OmZpbGVFeHRlbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q2hy
b21pdW1EYXRhT2JqZWN0OjpzZXRGaWxlRXh0ZW5zaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNo
cm9taXVtRGF0YU9iamVjdDo6ZmlsZUNvbnRlbnRGaWxlbmFtZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDaHJvbWl1bURhdGFPYmplY3Q6OnNldEZpbGVDb250ZW50RmlsZW5hbWUpOgorICAgICAgICAo
V2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpmaWxlQ29udGVudCk6CisgICAgICAgIChXZWJD
b3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OnNldEZpbGVDb250ZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkNocm9taXVtRGF0YU9iamVjdDo6Y3VzdG9tRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpD
aHJvbWl1bURhdGFPYmplY3Q6OnNldEN1c3RvbURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2hy
b21pdW1EYXRhT2JqZWN0OjpDaHJvbWl1bURhdGFPYmplY3QpOgorICAgICAgICAqIHBsYXRmb3Jt
L2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5oOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9t
aXVtL0NsaXBib2FyZENocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENo
cm9taXVtOjpjbGVhckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkQ2hyb21pdW06
OmNsZWFyQWxsRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRDaHJvbWl1bTo6Z2V0
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRDaHJvbWl1bTo6c2V0RGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRDaHJvbWl1bTo6dHlwZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2xpcGJvYXJkQ2hyb21pdW06OmZpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBi
b2FyZENocm9taXVtOjpoYXNEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENocm9t
aXVtOjppdGVtcyk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21p
dW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENocm9taXVtOjpmcmFtZSk6CisgICAg
ICAgICogcGxhdGZvcm0vY2hyb21pdW0vRGF0YVRyYW5zZmVySXRlbUNocm9taXVtLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkRhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bTo6Y3JlYXRlRnJvbVBhc3Rl
Ym9hcmQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YVRyYW5zZmVySXRlbUNocm9taXVtOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YVRyYW5zZmVySXRlbUNocm9taXVtOjp+RGF0YVRy
YW5zZmVySXRlbUNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFUcmFuc2Zlckl0ZW1D
aHJvbWl1bTo6RGF0YVRyYW5zZmVySXRlbUNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGFUcmFuc2Zlckl0ZW1DaHJvbWl1bTo6Z2V0QXNTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
RGF0YVRyYW5zZmVySXRlbUNocm9taXVtOjpnZXRBc0ZpbGUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2Nocm9taXVtL0RhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6
RGF0YVRyYW5zZmVySXRlbUNocm9taXVtOjpraW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFU
cmFuc2Zlckl0ZW1DaHJvbWl1bTo6dHlwZSk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0v
RGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRh
VHJhbnNmZXJJdGVtTGlzdENocm9taXVtOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0
YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bTo6fkRhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0p
OgorICAgICAgICAoV2ViQ29yZTo6RGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bTo6bGVuZ3Ro
KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW06Oml0ZW0p
OgorICAgICAgICAoV2ViQ29yZTo6RGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bTo6ZGVsZXRl
SXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtOjpj
bGVhcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtOjph
ZGQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bTo6RGF0
YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bSk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0v
RGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bS5oOgorCiAyMDEyLTAxLTE3ICBOYXRlIENoYXBp
biAgPGphcGhldEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgRW5zdXJlIHdlIGRvbid0IGNhbmNl
bCByZXZhbGlkYXRpb24gb2YgYSBDYWNoZWRSZXNvdXJjZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZwppbmRleCA5MTdmZTEyZmFhZThkZjRhNWI5YTg2OWNhNTU0YTQ1MGMwYWIwY2FjLi4xZTcwYmY3
ZTRjYzRhNDk4MzQwMDUxNzA5MDlkMTE0MDM0YTAwMzZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDEyLTAxLTE4ICBEYW5pZWwgQ2hlbmcgIDxkY2hlbmdA
Y2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gUmVmYWN0b3IgQ2xpcGJvYXJkQ2hy
b21pdW0gYW5kIERhdGFUcmFuc2Zlckl0ZW1MaXN0L0RhdGFUcmFuc2Zlckl0ZW0gdG8gc3VwcG9y
dCBIVE1MIHNwZWMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTc2NTk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBzcmMvV2ViRHJhZ0RhdGEuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFnRGF0YTo6
c2V0Q3VzdG9tRGF0YSk6CisKIDIwMTItMDEtMTcgIFl1cnkgU2VtaWtoYXRza3kgIDx5dXJ5c0Bj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gVXBkYXRlIENocm9taXVtIGRlcGVu
ZGVuY3kgMTE3NjE2OjExNzg4MgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDZhZjNkYTExNGVjMmU5YjVm
NGMzN2E5ZDgzNTMyMWQwN2ZlMGM4OWQuLjQ5ZTdhMWM2ZDI0YTAzYmQ1M2ViYmNlMDkyNDY1OWUx
ZDU2N2MzMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTUzMzMsNyArNTMzMyw2IEBACiAgICAgICAg
ICAgICAnZG9tL0RPTVN0cmluZ01hcC5oJywKICAgICAgICAgICAgICdkb20vRGF0YVRyYW5zZmVy
SXRlbS5jcHAnLAogICAgICAgICAgICAgJ2RvbS9EYXRhVHJhbnNmZXJJdGVtLmgnLAotICAgICAg
ICAgICAgJ2RvbS9EYXRhVHJhbnNmZXJJdGVtTGlzdC5jcHAnLAogICAgICAgICAgICAgJ2RvbS9E
YXRhVHJhbnNmZXJJdGVtTGlzdC5oJywKICAgICAgICAgICAgICdkb20vRGF0YXNldERPTVN0cmlu
Z01hcC5jcHAnLAogICAgICAgICAgICAgJ2RvbS9EYXRhc2V0RE9NU3RyaW5nTWFwLmgnLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RhdGFUcmFuc2Zlckl0ZW0uY3BwIGIvU291cmNl
L1dlYkNvcmUvZG9tL0RhdGFUcmFuc2Zlckl0ZW0uY3BwCmluZGV4IDZjNzNlYjBkY2JlOTkyMDdh
ZTdlNzZmYzNjODIzMzJjOGNiODI5ODcuLjhlZWM4NjkyYWYxZmJkYmQ1MmI5OGU0YTZkNWI5NzI4
M2QxNjUyNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9EYXRhVHJhbnNmZXJJdGVt
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRGF0YVRyYW5zZmVySXRlbS5jcHAKQEAgLTMx
LDggKzMxLDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJEYXRhVHJhbnNmZXJJ
dGVtLmgiCiAKLSNpbmNsdWRlICJDbGlwYm9hcmQuaCIKLQogI2lmIEVOQUJMRShEQVRBX1RSQU5T
RkVSX0lURU1TKQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00MCwzNSArMzgsNiBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiBjb25zdCBjaGFyIERhdGFUcmFuc2Zlckl0ZW06OmtpbmRTdHJpbmdb
XSA9ICJzdHJpbmciOwogY29uc3QgY2hhciBEYXRhVHJhbnNmZXJJdGVtOjpraW5kRmlsZVtdID0g
ImZpbGUiOwogCi1EYXRhVHJhbnNmZXJJdGVtOjpEYXRhVHJhbnNmZXJJdGVtKFBhc3NSZWZQdHI8
Q2xpcGJvYXJkPiBvd25lciwgY29uc3QgU3RyaW5nJiBraW5kLCBjb25zdCBTdHJpbmcmIHR5cGUp
Ci0gICAgOiBtX293bmVyKG93bmVyKQotICAgICwgbV9raW5kKGtpbmQpCi0gICAgLCBtX3R5cGUo
dHlwZSkKLXsKLX0KLQotQ2xpcGJvYXJkKiBEYXRhVHJhbnNmZXJJdGVtOjpvd25lcigpCi17Ci0g
ICAgcmV0dXJuIG1fb3duZXIuZ2V0KCk7Ci19Ci0KLVN0cmluZyBEYXRhVHJhbnNmZXJJdGVtOjpr
aW5kKCkgY29uc3QKLXsKLSAgICBpZiAobV9vd25lci0+cG9saWN5KCkgPT0gQ2xpcGJvYXJkTnVt
YikKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgcmV0dXJuIG1fa2luZDsKLX0KLQot
U3RyaW5nIERhdGFUcmFuc2Zlckl0ZW06OnR5cGUoKSBjb25zdAotewotICAgIGlmIChtX293bmVy
LT5wb2xpY3koKSA9PSBDbGlwYm9hcmROdW1iKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0K
LSAgICByZXR1cm4gbV90eXBlOwotfQotCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2Vu
ZGlmIC8vIEVOQUJMRShEQVRBX1RSQU5TRkVSX0lURU1TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL0RhdGFUcmFuc2Zlckl0ZW0uaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9EYXRhVHJh
bnNmZXJJdGVtLmgKaW5kZXggNzRjMjViNzk5YmIwNjVhOWE5NGQzYTQ4ZDEyODg1NDI0ZjBmNDg4
ZS4uNzc2ZDRjZjIzOWFiMzJkZDVjOGNjMzY3NzBlNTE2YThiODgxNGNiMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL0RhdGFUcmFuc2Zlckl0ZW0uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRGF0YVRyYW5zZmVySXRlbS5oCkBAIC00OCwyNSArNDgsMTQgQEAgY2xhc3MgRGF0YVRy
YW5zZmVySXRlbSA6IHB1YmxpYyBSZWZDb3VudGVkPERhdGFUcmFuc2Zlckl0ZW0+IHsKIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIH5EYXRhVHJhbnNmZXJJdGVtKCkgeyB9CiAKLSAgICBzdGF0aWMgUGFz
c1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtPiBjcmVhdGUoUGFzc1JlZlB0cjxDbGlwYm9hcmQ+IG93
bmVyLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBkYXRhLCBjb25zdCBT
dHJpbmcmIHR5cGUpOwotCiAgICAgc3RhdGljIGNvbnN0IGNoYXIga2luZFN0cmluZ1tdOwogICAg
IHN0YXRpYyBjb25zdCBjaGFyIGtpbmRGaWxlW107CiAKLSAgICBTdHJpbmcga2luZCgpIGNvbnN0
OwotICAgIFN0cmluZyB0eXBlKCkgY29uc3Q7CisgICAgdmlydHVhbCBTdHJpbmcga2luZCgpIGNv
bnN0ID0gMDsKKyAgICB2aXJ0dWFsIFN0cmluZyB0eXBlKCkgY29uc3QgPSAwOwogCiAgICAgdmly
dHVhbCB2b2lkIGdldEFzU3RyaW5nKFBhc3NSZWZQdHI8U3RyaW5nQ2FsbGJhY2s+KSA9IDA7CiAg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPEJsb2I+IGdldEFzRmlsZSgpID0gMDsKLQotcHJvdGVjdGVk
OgotICAgIERhdGFUcmFuc2Zlckl0ZW0oUGFzc1JlZlB0cjxDbGlwYm9hcmQ+IG93bmVyLCBjb25z
dCBTdHJpbmcmIGtpbmQsIGNvbnN0IFN0cmluZyYgdHlwZSk7Ci0gICAgQ2xpcGJvYXJkKiBvd25l
cigpOwotCi1wcml2YXRlOgotICAgIGNvbnN0IFJlZlB0cjxDbGlwYm9hcmQ+IG1fb3duZXI7Ci0g
ICAgY29uc3QgU3RyaW5nIG1fa2luZDsKLSAgICBjb25zdCBTdHJpbmcgbV90eXBlOwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0Rh
dGFUcmFuc2Zlckl0ZW1MaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9EYXRhVHJhbnNmZXJJ
dGVtTGlzdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1ZmVhY2FjZjRmMjMz
ZmVlZmVkMzBmNDk2ODNlNzlkZjdkNzY4ZjQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RhdGFUcmFuc2Zlckl0ZW1MaXN0
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEwNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3Ry
aWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIkRhdGFUcmFuc2Zlckl0ZW1MaXN0LmgiCi0KLSNpbmNsdWRl
ICJEYXRhVHJhbnNmZXJJdGVtLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotCi0jaWYg
RU5BQkxFKERBVEFfVFJBTlNGRVJfSVRFTVMpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotRGF0
YVRyYW5zZmVySXRlbUxpc3Q6OkRhdGFUcmFuc2Zlckl0ZW1MaXN0KFBhc3NSZWZQdHI8Q2xpcGJv
YXJkPiBjbGlwYm9hcmQsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCi0gICAgOiBt
X293bmVyKGNsaXBib2FyZCkKLSAgICAsIG1fY29udGV4dChjb250ZXh0KQotewotfQotCi1zaXpl
X3QgRGF0YVRyYW5zZmVySXRlbUxpc3Q6Omxlbmd0aCgpIGNvbnN0Ci17Ci0gICAgaWYgKG1fb3du
ZXItPnBvbGljeSgpID09IENsaXBib2FyZE51bWIpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAg
cmV0dXJuIG1faXRlbXMuc2l6ZSgpOwotfQotCi1QYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW0+
IERhdGFUcmFuc2Zlckl0ZW1MaXN0OjppdGVtKHVuc2lnbmVkIGxvbmcgaW5kZXgpCi17Ci0gICAg
aWYgKG1fb3duZXItPnBvbGljeSgpID09IENsaXBib2FyZE51bWIgfHwgaW5kZXggPj0gbGVuZ3Ro
KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIG1faXRlbXNbaW5kZXhdOwotfQot
Ci12b2lkIERhdGFUcmFuc2Zlckl0ZW1MaXN0OjpkZWxldGVJdGVtKHVuc2lnbmVkIGxvbmcgaW5k
ZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGlmIChtX293bmVyLT5wb2xpY3koKSAhPSBD
bGlwYm9hcmRXcml0YWJsZSkgewotICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGluZGV4ID49IGxlbmd0aCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBtX2l0ZW1zLnJlbW92ZShpbmRleCk7Ci19Ci0KLXZvaWQgRGF0YVRy
YW5zZmVySXRlbUxpc3Q6OmNsZWFyKCkKLXsKLSAgICBpZiAobV9vd25lci0+cG9saWN5KCkgIT0g
Q2xpcGJvYXJkV3JpdGFibGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1faXRlbXMuY2xlYXIo
KTsKLQotfQotCi12b2lkIERhdGFUcmFuc2Zlckl0ZW1MaXN0OjphZGQoY29uc3QgU3RyaW5nJiBk
YXRhLCBjb25zdCBTdHJpbmcmIHR5cGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGlmICht
X293bmVyLT5wb2xpY3koKSAhPSBDbGlwYm9hcmRXcml0YWJsZSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgLy8gT25seSBvbmUgJ3N0cmluZycgaXRlbSB3aXRoIGEgZ2l2ZW4gdHlwZSBpcyBhbGxv
d2VkIGluIHRoZSBjb2xsZWN0aW9uLgotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9pdGVt
cy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAobV9pdGVtc1tpXS0+dHlwZSgpID09IHR5cGUg
JiYgbV9pdGVtc1tpXS0+a2luZCgpID09IERhdGFUcmFuc2Zlckl0ZW06OmtpbmRTdHJpbmcpIHsK
LSAgICAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtX2l0ZW1zLmFwcGVuZChEYXRhVHJhbnNmZXJJdGVt
OjpjcmVhdGUobV9vd25lciwgbV9jb250ZXh0LCBkYXRhLCB0eXBlKSk7Ci19Ci0KLX0KLQotI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRGF0YVRyYW5zZmVySXRlbUxpc3Qu
aCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9EYXRhVHJhbnNmZXJJdGVtTGlzdC5oCmluZGV4IGVmMzE4
ZTkyZDk1OGQ5YWIwYjYwYTQzZmMxYTM5NWEyMmY4ZDY1MTkuLmQ2N2I3NWI0ZWNmNmRlZTg0OGFi
ZWEzZmY2ODE2ZGQxZTU4NDNiNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9EYXRh
VHJhbnNmZXJJdGVtTGlzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9EYXRhVHJhbnNmZXJJ
dGVtTGlzdC5oCkBAIC00NywyMSArNDcsMTEgQEAgY2xhc3MgRGF0YVRyYW5zZmVySXRlbUxpc3Qg
OiBwdWJsaWMgUmVmQ291bnRlZDxEYXRhVHJhbnNmZXJJdGVtTGlzdD4gewogcHVibGljOgogICAg
IHZpcnR1YWwgfkRhdGFUcmFuc2Zlckl0ZW1MaXN0KCkgeyB9CiAKLSAgICB2aXJ0dWFsIHNpemVf
dCBsZW5ndGgoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RGF0YVRyYW5zZmVySXRl
bT4gaXRlbSh1bnNpZ25lZCBsb25nIGluZGV4KTsKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSXRl
bSh1bnNpZ25lZCBsb25nIGluZGV4LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdmlydHVhbCB2b2lk
IGNsZWFyKCk7Ci0gICAgdmlydHVhbCB2b2lkIGFkZChjb25zdCBTdHJpbmcmIGRhdGEsIGNvbnN0
IFN0cmluZyYgdHlwZSwgRXhjZXB0aW9uQ29kZSYpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgRGF0YVRy
YW5zZmVySXRlbUxpc3QoUGFzc1JlZlB0cjxDbGlwYm9hcmQ+LCBTY3JpcHRFeGVjdXRpb25Db250
ZXh0Kik7Ci0KLXByb3RlY3RlZDoKLSAgICBSZWZQdHI8Q2xpcGJvYXJkPiBtX293bmVyOwotICAg
IC8vIEluZGlyZWN0bHkgb3duZWQgYnkgb3VyIHBhcmVudC4KLSAgICBTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBtX2NvbnRleHQ7Ci0gICAgVmVjdG9yPFJlZlB0cjxEYXRhVHJhbnNmZXJJdGVtPiA+
IG1faXRlbXM7Ci0KKyAgICB2aXJ0dWFsIHNpemVfdCBsZW5ndGgoKSBjb25zdCA9IDA7CisgICAg
dmlydHVhbCBQYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW0+IGl0ZW0odW5zaWduZWQgbG9uZyBp
bmRleCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVJdGVtKHVuc2lnbmVkIGxvbmcgaW5k
ZXgsIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyKCkgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBhZGQoY29uc3QgU3RyaW5nJiBkYXRhLCBjb25zdCBTdHJpbmcmIHR5
cGUsIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFP
YmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRh
T2JqZWN0LmNwcAppbmRleCAwNWM1ZTEzMGNjZWJmNTYxNDk2MjY2YWExYzU4ZmVmZjQ0NWY0ODk2
Li5mZWJmNjk0YzFiOGFmY2JhNjQ1OTMyOGVkODM5ZGZjNmQyZmEyZDAwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5j
cHAKQEAgLTQxLDIxNiArNDEsMTE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIC8vIFBlciBSRkMg
MjQ4MywgdGhlIGxpbmUgc2VwYXJhdG9yIGZvciAidGV4dC8uLi4iIE1JTUUgdHlwZXMgaXMgQ1It
TEYuCiBzdGF0aWMgY2hhciBjb25zdCogY29uc3QgdGV4dE1JTUVUeXBlTGluZVNlcGFyYXRvciA9
ICJcclxuIjsKIAotdm9pZCBDaHJvbWl1bURhdGFPYmplY3Q6OmNsZWFyRGF0YShjb25zdCBTdHJp
bmcmIHR5cGUpCitQYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0+IENocm9t
aXVtRGF0YU9iamVjdDo6aXRlbXMoKSBjb25zdAogewotICAgIGlmICh0eXBlID09IG1pbWVUeXBl
VGV4dFBsYWluKSB7Ci0gICAgICAgIG1fcGxhaW5UZXh0ID0gIiI7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBpZiAodHlwZSA9PSBtaW1lVHlwZVVSTCB8fCB0eXBlID09IG1pbWVUeXBl
VGV4dFVSSUxpc3QpIHsKLSAgICAgICAgbV91cmlMaXN0ID0gIiI7Ci0gICAgICAgIG1fdXJsID0g
S1VSTCgpOwotICAgICAgICBtX3VybFRpdGxlID0gIiI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBpZiAodHlwZSA9PSBtaW1lVHlwZVRleHRIVE1MKSB7Ci0gICAgICAgIG1fdGV4dEh0
bWwgPSAiIjsKLSAgICAgICAgbV9odG1sQmFzZVVybCA9IEtVUkwoKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KKyAgICAvLyBGSVhNRTogTmVlZCB0byBsYXppbHkgcG9wdWxhdGUgbV9pdGVtcyBo
ZXJlLgorICAgIHJldHVybiBtX2l0ZW1zOworfQogCi0gICAgaWYgKHR5cGUgPT0gbWltZVR5cGVE
b3dubG9hZFVSTCkgewotICAgICAgICBtX2Rvd25sb2FkTWV0YWRhdGEgPSAiIjsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KK3ZvaWQgQ2hyb21pdW1EYXRhT2JqZWN0OjpjbGVhckRhdGEoY29uc3Qg
U3RyaW5nJiB0eXBlKQorewogfQogCiB2b2lkIENocm9taXVtRGF0YU9iamVjdDo6Y2xlYXJBbGwo
KQogewogICAgIGNsZWFyQWxsRXhjZXB0RmlsZXMoKTsKLSAgICBtX2ZpbGVuYW1lcy5jbGVhcigp
OwogfQogCiB2b2lkIENocm9taXVtRGF0YU9iamVjdDo6Y2xlYXJBbGxFeGNlcHRGaWxlcygpCiB7
Ci0gICAgbV91cmxUaXRsZSA9ICIiOwotICAgIG1fdXJsID0gS1VSTCgpOwotICAgIG1fdXJpTGlz
dCA9ICIiOwotICAgIG1fZG93bmxvYWRNZXRhZGF0YSA9ICIiOwotICAgIG1fZmlsZUV4dGVuc2lv
biA9ICIiOwotICAgIG1fcGxhaW5UZXh0ID0gIiI7Ci0gICAgbV90ZXh0SHRtbCA9ICIiOwotICAg
IG1faHRtbEJhc2VVcmwgPSBLVVJMKCk7Ci0gICAgbV9maWxlQ29udGVudEZpbGVuYW1lID0gIiI7
Ci0gICAgaWYgKG1fZmlsZUNvbnRlbnQpCi0gICAgICAgIG1fZmlsZUNvbnRlbnQtPmNsZWFyKCk7
CiB9CiAKIGJvb2wgQ2hyb21pdW1EYXRhT2JqZWN0OjpoYXNEYXRhKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gIW1fdXJsLmlzRW1wdHkoKQotICAgICAgICB8fCAhbV91cmlMaXN0LmlzRW1wdHkoKQot
ICAgICAgICB8fCAhbV9kb3dubG9hZE1ldGFkYXRhLmlzRW1wdHkoKQotICAgICAgICB8fCAhbV9m
aWxlRXh0ZW5zaW9uLmlzRW1wdHkoKQotICAgICAgICB8fCAhbV9maWxlbmFtZXMuaXNFbXB0eSgp
Ci0gICAgICAgIHx8ICFtX3BsYWluVGV4dC5pc0VtcHR5KCkKLSAgICAgICAgfHwgIW1fdGV4dEh0
bWwuaXNFbXB0eSgpCi0gICAgICAgIHx8IG1fZmlsZUNvbnRlbnQ7CisgICAgLy8gRklYTUU6IFJl
aW1wbGVtZW50CisgICAgcmV0dXJuIGZhbHNlOwogfQogCiBIYXNoU2V0PFN0cmluZz4gQ2hyb21p
dW1EYXRhT2JqZWN0Ojp0eXBlcygpIGNvbnN0CiB7Ci0gICAgaWYgKG1fc3RvcmFnZU1vZGUgPT0g
UGFzdGVib2FyZCkgewotICAgICAgICBib29sIGlnbm9yZWRDb250YWluc0ZpbGVuYW1lczsKLSAg
ICAgICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJvYXJkUmVhZEF2YWlsYWJsZVR5cGVz
KGN1cnJlbnRQYXN0ZWJvYXJkQnVmZmVyKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaWdub3JlZENvbnRhaW5zRmlsZW5hbWVz
KTsKLSAgICB9Ci0KLSAgICBIYXNoU2V0PFN0cmluZz4gcmVzdWx0czsKLQotICAgIGlmICghbV9w
bGFpblRleHQuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHJlc3VsdHMuYWRkKG1pbWVUeXBlVGV4dCk7
Ci0gICAgICAgIHJlc3VsdHMuYWRkKG1pbWVUeXBlVGV4dFBsYWluKTsKLSAgICB9Ci0KLSAgICBp
ZiAobV91cmwuaXNWYWxpZCgpKQotICAgICAgICByZXN1bHRzLmFkZChtaW1lVHlwZVVSTCk7Ci0K
LSAgICBpZiAoIW1fdXJpTGlzdC5pc0VtcHR5KCkpCi0gICAgICAgIHJlc3VsdHMuYWRkKG1pbWVU
eXBlVGV4dFVSSUxpc3QpOwotCi0gICAgaWYgKCFtX3RleHRIdG1sLmlzRW1wdHkoKSkKLSAgICAg
ICAgcmVzdWx0cy5hZGQobWltZVR5cGVUZXh0SFRNTCk7CisgICAgLy8gRklYTUU6IFJlaW1wbGVt
ZW50CisgICAgcmV0dXJuIEhhc2hTZXQ8U3RyaW5nPigpOworfQogCi0gICAgZm9yIChIYXNoTWFw
PFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3I6OktleXMgaXQgPSBtX2N1c3RvbURhdGEu
YmVnaW4oKS5rZXlzKCk7Ci0gICAgICAgICBpdCAhPSBtX2N1c3RvbURhdGEuZW5kKCkua2V5cygp
OyArK2l0KSB7Ci0gICAgICAgIHJlc3VsdHMuYWRkKCppdCk7Ci0gICAgfQorU3RyaW5nIENocm9t
aXVtRGF0YU9iamVjdDo6Z2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGJvb2wmIHN1Y2Nlc3Mp
IGNvbnN0Cit7CisgICAgLy8gRklYTUU6IFJlaW1wbGVtZW50CisgICAgc3VjY2VzcyA9IGZhbHNl
OworICAgIHJldHVybiBTdHJpbmcoKTsKK30KIAotICAgIHJldHVybiByZXN1bHRzOworYm9vbCBD
aHJvbWl1bURhdGFPYmplY3Q6OnNldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJp
bmcmIGRhdGEpCit7CisgICAgLy8gRklYTUU6IFJlaW1wbGVtZW50CisgICAgcmV0dXJuIGZhbHNl
OwogfQogCi1TdHJpbmcgQ2hyb21pdW1EYXRhT2JqZWN0OjpnZXREYXRhKGNvbnN0IFN0cmluZyYg
dHlwZSwgYm9vbCYgc3VjY2VzcykgY29uc3QKK1N0cmluZyBDaHJvbWl1bURhdGFPYmplY3Q6OnVy
bFRpdGxlKCkgY29uc3QKIHsKLSAgICBpZiAodHlwZSA9PSBtaW1lVHlwZVRleHRQbGFpbikgewot
ICAgICAgICBpZiAobV9zdG9yYWdlTW9kZSA9PSBQYXN0ZWJvYXJkKSB7Ci0gICAgICAgICAgICBT
dHJpbmcgdGV4dCA9IFBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJvYXJkUmVhZFBsYWluVGV4dChjdXJy
ZW50UGFzdGVib2FyZEJ1ZmZlcigpKTsKLSAgICAgICAgICAgIHN1Y2Nlc3MgPSAhdGV4dC5pc0Vt
cHR5KCk7Ci0gICAgICAgICAgICByZXR1cm4gdGV4dDsKLSAgICAgICAgfQotICAgICAgICBzdWNj
ZXNzID0gIW1fcGxhaW5UZXh0LmlzRW1wdHkoKTsKLSAgICAgICAgcmV0dXJuIG1fcGxhaW5UZXh0
OwotICAgIH0KKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CiAKLSAgICBpZiAodHlwZSA9PSBtaW1l
VHlwZVVSTCkgewotICAgICAgICBzdWNjZXNzID0gIW1fdXJsLmlzRW1wdHkoKTsKLSAgICAgICAg
cmV0dXJuIG1fdXJsLnN0cmluZygpOwotICAgIH0KK3ZvaWQgQ2hyb21pdW1EYXRhT2JqZWN0Ojpz
ZXRVcmxUaXRsZShjb25zdCBTdHJpbmcmIHVybFRpdGxlKQoreworfQogCi0gICAgaWYgKHR5cGUg
PT0gbWltZVR5cGVUZXh0VVJJTGlzdCkgewotICAgICAgICBzdWNjZXNzID0gIW1fdXJpTGlzdC5p
c0VtcHR5KCk7Ci0gICAgICAgIHJldHVybiBtX3VyaUxpc3Q7Ci0gICAgfQorS1VSTCBDaHJvbWl1
bURhdGFPYmplY3Q6Omh0bWxCYXNlVXJsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gS1VSTCgpOwor
fQogCi0gICAgaWYgKHR5cGUgPT0gbWltZVR5cGVUZXh0SFRNTCkgewotICAgICAgICBpZiAobV9z
dG9yYWdlTW9kZSA9PSBQYXN0ZWJvYXJkKSB7Ci0gICAgICAgICAgICBTdHJpbmcgaHRtbFRleHQ7
Ci0gICAgICAgICAgICBLVVJMIHNvdXJjZVVSTDsKLSAgICAgICAgICAgIHVuc2lnbmVkIGlnbm9y
ZWQ7Ci0gICAgICAgICAgICBQbGF0Zm9ybVN1cHBvcnQ6OmNsaXBib2FyZFJlYWRIVE1MKGN1cnJl
bnRQYXN0ZWJvYXJkQnVmZmVyKCksICZodG1sVGV4dCwgJnNvdXJjZVVSTCwgJmlnbm9yZWQsICZp
Z25vcmVkKTsKLSAgICAgICAgICAgIHN1Y2Nlc3MgPSAhaHRtbFRleHQuaXNFbXB0eSgpOwotICAg
ICAgICAgICAgcmV0dXJuIGh0bWxUZXh0OwotICAgICAgICB9Ci0gICAgICAgIHN1Y2Nlc3MgPSAh
bV90ZXh0SHRtbC5pc0VtcHR5KCk7Ci0gICAgICAgIHJldHVybiBtX3RleHRIdG1sOwotICAgIH0K
K3ZvaWQgQ2hyb21pdW1EYXRhT2JqZWN0OjpzZXRIdG1sQmFzZVVybChjb25zdCBLVVJMJiB1cmwp
Cit7Cit9CiAKLSAgICBpZiAodHlwZSA9PSBtaW1lVHlwZURvd25sb2FkVVJMKSB7Ci0gICAgICAg
IHN1Y2Nlc3MgPSAhbV9kb3dubG9hZE1ldGFkYXRhLmlzRW1wdHkoKTsKLSAgICAgICAgcmV0dXJu
IG1fZG93bmxvYWRNZXRhZGF0YTsKLSAgICB9Citib29sIENocm9taXVtRGF0YU9iamVjdDo6Y29u
dGFpbnNGaWxlbmFtZXMoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KIAotICAgIGlm
IChtX3N0b3JhZ2VNb2RlID09IFBhc3RlYm9hcmQpIHsKLSAgICAgICAgU3RyaW5nIGRhdGEgPSBQ
bGF0Zm9ybVN1cHBvcnQ6OmNsaXBib2FyZFJlYWRDdXN0b21EYXRhKGN1cnJlbnRQYXN0ZWJvYXJk
QnVmZmVyKCksIHR5cGUpOwotICAgICAgICBzdWNjZXNzID0gIWRhdGEuaXNFbXB0eSgpOwotICAg
ICAgICByZXR1cm4gZGF0YTsKLSAgICB9CitWZWN0b3I8U3RyaW5nPiBDaHJvbWl1bURhdGFPYmpl
Y3Q6OmZpbGVuYW1lcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7Cit9
CiAKLSAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2N1
c3RvbURhdGEuZmluZCh0eXBlKTsKLSAgICBpZiAoaXQgIT0gbV9jdXN0b21EYXRhLmVuZCgpKSB7
Ci0gICAgICAgIHN1Y2Nlc3MgPSB0cnVlOwotICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKLSAg
ICB9Cit2b2lkIENocm9taXVtRGF0YU9iamVjdDo6c2V0RmlsZW5hbWVzKGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBmaWxlbmFtZXMpCit7Cit9CiAKLSAgICBzdWNjZXNzID0gZmFsc2U7CitTdHJpbmcg
Q2hyb21pdW1EYXRhT2JqZWN0OjpmaWxlRXh0ZW5zaW9uKCkgY29uc3QKK3sKICAgICByZXR1cm4g
U3RyaW5nKCk7CiB9CiAKLWJvb2wgQ2hyb21pdW1EYXRhT2JqZWN0OjpzZXREYXRhKGNvbnN0IFN0
cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKQordm9pZCBDaHJvbWl1bURhdGFPYmplY3Q6
OnNldEZpbGVFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBmaWxlRXh0ZW5zaW9uKQogewotICAgIGlm
ICh0eXBlID09IG1pbWVUeXBlVGV4dFBsYWluKSB7Ci0gICAgICAgIG1fcGxhaW5UZXh0ID0gZGF0
YTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQorfQogCi0gICAgaWYgKHR5cGUgPT0gbWlt
ZVR5cGVVUkwgfHwgdHlwZSA9PSBtaW1lVHlwZVRleHRVUklMaXN0KSB7Ci0gICAgICAgIG1fdXJs
ID0gS1VSTCgpOwotICAgICAgICBWZWN0b3I8U3RyaW5nPiB1cmlMaXN0OwotICAgICAgICAvLyBM
aW5lIHNlcGFyYXRvciBpcyBcclxuIHBlciBSRkMgMjQ4MyAtIGhvd2V2ZXIsIGZvciBjb21wYXRp
YmlsaXR5Ci0gICAgICAgIC8vIHJlYXNvbnMgd2UgYWxzbyBhbGxvdyBqdXN0IFxuIGhlcmUuCi0g
ICAgICAgIGRhdGEuc3BsaXQoJ1xuJywgdXJpTGlzdCk7Ci0gICAgICAgIC8vIFByb2Nlc3MgdGhl
IGlucHV0IGFuZCBjb3B5IHRoZSBmaXJzdCB2YWxpZCBVUkwgaW50byB0aGUgdXJsIG1lbWJlci4K
LSAgICAgICAgLy8gSW4gY2FzZSBubyBVUkxzIGNhbiBiZSBmb3VuZCwgc3Vic2VxdWVudCBjYWxs
cyB0byBnZXREYXRhKCJVUkwiKQotICAgICAgICAvLyB3aWxsIGdldCBhbiBlbXB0eSBzdHJpbmcu
IFRoaXMgaXMgaW4gbGluZSB3aXRoIHRoZSBIVE1MNSBzcGVjIChzZWUKLSAgICAgICAgLy8gIlRo
ZSBEcmFnRXZlbnQgYW5kIERhdGFUcmFuc2ZlciBpbnRlcmZhY2VzIikuCi0gICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgdXJpTGlzdC5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgU3Ry
aW5nJiBsaW5lID0gdXJpTGlzdFtpXTsKLSAgICAgICAgICAgIGxpbmUgPSBsaW5lLnN0cmlwV2hp
dGVTcGFjZSgpOwotICAgICAgICAgICAgaWYgKGxpbmUuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobGluZVswXSA9
PSAnIycpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBLVVJMIHVybCA9
IEtVUkwoUGFyc2VkVVJMU3RyaW5nLCBsaW5lKTsKLSAgICAgICAgICAgIGlmICh1cmwuaXNWYWxp
ZCgpKSB7Ci0gICAgICAgICAgICAgICAgbV91cmwgPSB1cmw7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgbV91cmlMaXN0ID0gZGF0YTsK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQorU3RyaW5nIENocm9taXVtRGF0YU9iamVjdDo6
ZmlsZUNvbnRlbnRGaWxlbmFtZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFN0cmluZygpOworfQog
Ci0gICAgaWYgKHR5cGUgPT0gbWltZVR5cGVUZXh0SFRNTCkgewotICAgICAgICBtX3RleHRIdG1s
ID0gZGF0YTsKLSAgICAgICAgbV9odG1sQmFzZVVybCA9IEtVUkwoKTsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQordm9pZCBDaHJvbWl1bURhdGFPYmplY3Q6OnNldEZpbGVDb250ZW50Rmls
ZW5hbWUoY29uc3QgU3RyaW5nJiBmaWxlQ29udGVudEZpbGVuYW1lKQoreworfQogCi0gICAgaWYg
KHR5cGUgPT0gbWltZVR5cGVEb3dubG9hZFVSTCkgewotICAgICAgICBtX2Rvd25sb2FkTWV0YWRh
dGEgPSBkYXRhOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9CitQYXNzUmVmUHRyPFNoYXJl
ZEJ1ZmZlcj4gQ2hyb21pdW1EYXRhT2JqZWN0OjpmaWxlQ29udGVudCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIDA7Cit9CiAKLSAgICBpZiAodHlwZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKK3ZvaWQgQ2hyb21pdW1EYXRhT2JqZWN0OjpzZXRGaWxlQ29udGVudChQYXNzUmVmUHRy
PFNoYXJlZEJ1ZmZlcj4gZmlsZUNvbnRlbnQpCit7Cit9CiAKLSAgICBtX2N1c3RvbURhdGEuc2V0
KHR5cGUsIGRhdGEpOwotICAgIHJldHVybiB0cnVlOworY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0
cmluZz4mIENocm9taXVtRGF0YU9iamVjdDo6Y3VzdG9tRGF0YSgpIGNvbnN0Cit7CisgICAgc3Rh
dGljIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBkYXRhID0gKm5ldyBIYXNoTWFwPFN0cmluZywg
U3RyaW5nPigpOworICAgIHJldHVybiBkYXRhOwogfQogCi1ib29sIENocm9taXVtRGF0YU9iamVj
dDo6Y29udGFpbnNGaWxlbmFtZXMoKSBjb25zdAordm9pZCBDaHJvbWl1bURhdGFPYmplY3Q6OnNl
dEN1c3RvbURhdGEoY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mKQogewotICAgIGJvb2wg
Y29udGFpbnNGaWxlbmFtZXM7Ci0gICAgaWYgKG1fc3RvcmFnZU1vZGUgPT0gUGFzdGVib2FyZCkg
ewotICAgICAgICBIYXNoU2V0PFN0cmluZz4gaWdub3JlZFJlc3VsdHMgPQotICAgICAgICAgICAg
UGxhdGZvcm1TdXBwb3J0OjpjbGlwYm9hcmRSZWFkQXZhaWxhYmxlVHlwZXMoY3VycmVudFBhc3Rl
Ym9hcmRCdWZmZXIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICZjb250YWluc0ZpbGVuYW1lcyk7Ci0gICAgfSBlbHNlCi0gICAgICAg
IGNvbnRhaW5zRmlsZW5hbWVzID0gIW1fZmlsZW5hbWVzLmlzRW1wdHkoKTsKLSAgICByZXR1cm4g
Y29udGFpbnNGaWxlbmFtZXM7CiB9CiAKIENocm9taXVtRGF0YU9iamVjdDo6Q2hyb21pdW1EYXRh
T2JqZWN0KFN0b3JhZ2VNb2RlIHN0b3JhZ2VNb2RlKQpAQCAtMjU5LDIxICsxNjAsOSBAQCBDaHJv
bWl1bURhdGFPYmplY3Q6OkNocm9taXVtRGF0YU9iamVjdChTdG9yYWdlTW9kZSBzdG9yYWdlTW9k
ZSkKIH0KIAogQ2hyb21pdW1EYXRhT2JqZWN0OjpDaHJvbWl1bURhdGFPYmplY3QoY29uc3QgQ2hy
b21pdW1EYXRhT2JqZWN0JiBvdGhlcikKLSAgICA6IFJlZkNvdW50ZWQ8Q2hyb21pdW1EYXRhT2Jq
ZWN0PigpCi0gICAgLCBtX3N0b3JhZ2VNb2RlKG90aGVyLm1fc3RvcmFnZU1vZGUpCi0gICAgLCBt
X3VybFRpdGxlKG90aGVyLm1fdXJsVGl0bGUpCi0gICAgLCBtX2Rvd25sb2FkTWV0YWRhdGEob3Ro
ZXIubV9kb3dubG9hZE1ldGFkYXRhKQotICAgICwgbV9maWxlRXh0ZW5zaW9uKG90aGVyLm1fZmls
ZUV4dGVuc2lvbikKLSAgICAsIG1fZmlsZW5hbWVzKG90aGVyLm1fZmlsZW5hbWVzKQotICAgICwg
bV9wbGFpblRleHQob3RoZXIubV9wbGFpblRleHQpCi0gICAgLCBtX3RleHRIdG1sKG90aGVyLm1f
dGV4dEh0bWwpCi0gICAgLCBtX2h0bWxCYXNlVXJsKG90aGVyLm1faHRtbEJhc2VVcmwpCi0gICAg
LCBtX2ZpbGVDb250ZW50RmlsZW5hbWUob3RoZXIubV9maWxlQ29udGVudEZpbGVuYW1lKQotICAg
ICwgbV91cmwob3RoZXIubV91cmwpCi0gICAgLCBtX3VyaUxpc3Qob3RoZXIubV91cmlMaXN0KQor
ICAgIDogbV9zdG9yYWdlTW9kZShvdGhlci5zdG9yYWdlTW9kZSgpKQorICAgICwgbV9pdGVtcyhv
dGhlci5pdGVtcygpKSAvLyBOb3RlIGludGVudGlvbmFsIHVzZSBvZiBpdGVtcygpLgogewotICAg
IGlmIChvdGhlci5tX2ZpbGVDb250ZW50LmdldCgpKQotICAgICAgICBtX2ZpbGVDb250ZW50ID0g
b3RoZXIubV9maWxlQ29udGVudC0+Y29weSgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURh
dGFPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0
YU9iamVjdC5oCmluZGV4IDlkZGZiMGI5MzY0NTExMTNiMmM4MDIwZTg2ZmM3Mjg3MDJmOGFlZDku
LmE2NzFkMTM2Y2ZiMjAwNWI0YTY0MjRlZGJiMDJjMDI5ZDJmYzcwMGQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5oCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAwOCwgMjAwOSwgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwOCwgMjAwOSwgMjAx
MiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIAogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCkBAIC0zMSw2ICszMSw4IEBACiAjaWZuZGVmIENocm9taXVtRGF0YU9i
amVjdF9oCiAjZGVmaW5lIENocm9taXVtRGF0YU9iamVjdF9oCiAKKyNpbmNsdWRlICJDbGlwYm9h
cmRDaHJvbWl1bS5oIgorI2luY2x1ZGUgIkRhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0uaCIK
ICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRl
ICJTaGFyZWRCdWZmZXIuaCIKQEAgLTQyLDYgKzQ0LDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCitjbGFzcyBDbGlwYm9hcmRDaHJvbWl1bTsKKwogLy8gQSBkYXRhIG9iamVjdCBmb3IgaG9s
ZGluZyBkYXRhIHRoYXQgd291bGQgYmUgaW4gYSBjbGlwYm9hcmQgb3IgbW92ZWQKIC8vIGR1cmlu
ZyBhIGRyYWctbi1kcm9wIG9wZXJhdGlvbi4gIFRoaXMgaXMgdGhlIGRhdGEgdGhhdCBXZWJDb3Jl
IGlzIGF3YXJlCiAvLyBvZiBhbmQgaXMgbm90IHNwZWNpZmljIHRvIGEgcGxhdGZvcm0uCkBAIC02
OSw2ICs3Myw5IEBAIHB1YmxpYzoKIAogICAgIFN0b3JhZ2VNb2RlIHN0b3JhZ2VNb2RlKCkgY29u
c3QgeyByZXR1cm4gbV9zdG9yYWdlTW9kZTsgfQogCisgICAgLy8gVGhlIG5ldyBhd2Vzb21lbmVz
cy4gVXNlIHRoaXMuCisgICAgUGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVt
PiBpdGVtcygpIGNvbnN0OworCiAgICAgdm9pZCBjbGVhckRhdGEoY29uc3QgU3RyaW5nJiB0eXBl
KTsKICAgICB2b2lkIGNsZWFyQWxsKCk7CiAgICAgdm9pZCBjbGVhckFsbEV4Y2VwdEZpbGVzKCk7
CkBAIC03OSwyNiArODYsMjcgQEAgcHVibGljOgogICAgIFN0cmluZyBnZXREYXRhKGNvbnN0IFN0
cmluZyYgdHlwZSwgYm9vbCYgc3VjY2VzcykgY29uc3Q7CiAgICAgYm9vbCBzZXREYXRhKGNvbnN0
IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKTsKIAorICAgIC8vIFZhcmlvdXMgbGVn
YWN5IGhlbHBlcnMuCiAgICAgLy8gU3BlY2lhbCBoYW5kbGVycyBmb3IgVVJML0hUTUwgbWV0YWRh
dGEuCi0gICAgU3RyaW5nIHVybFRpdGxlKCkgY29uc3QgeyByZXR1cm4gbV91cmxUaXRsZTsgfQot
ICAgIHZvaWQgc2V0VXJsVGl0bGUoY29uc3QgU3RyaW5nJiB1cmxUaXRsZSkgeyBtX3VybFRpdGxl
ID0gdXJsVGl0bGU7IH0KLSAgICBLVVJMIGh0bWxCYXNlVXJsKCkgY29uc3QgeyByZXR1cm4gbV9o
dG1sQmFzZVVybDsgfQotICAgIHZvaWQgc2V0SHRtbEJhc2VVcmwoY29uc3QgS1VSTCYgdXJsKSB7
IG1faHRtbEJhc2VVcmwgPSB1cmw7IH0KKyAgICBTdHJpbmcgdXJsVGl0bGUoKSBjb25zdDsKKyAg
ICB2b2lkIHNldFVybFRpdGxlKGNvbnN0IFN0cmluZyYpOworICAgIEtVUkwgaHRtbEJhc2VVcmwo
KSBjb25zdDsKKyAgICB2b2lkIHNldEh0bWxCYXNlVXJsKGNvbnN0IEtVUkwmKTsKIAogICAgIC8v
IFVzZWQgdG8gaGFuZGxlIGZpbGVzIGJlaW5nIGRyYWdnZWQgaW4uCiAgICAgYm9vbCBjb250YWlu
c0ZpbGVuYW1lcygpIGNvbnN0OwotICAgIFZlY3RvcjxTdHJpbmc+IGZpbGVuYW1lcygpIGNvbnN0
IHsgcmV0dXJuIG1fZmlsZW5hbWVzOyB9Ci0gICAgdm9pZCBzZXRGaWxlbmFtZXMoY29uc3QgVmVj
dG9yPFN0cmluZz4mIGZpbGVuYW1lcykgeyBtX2ZpbGVuYW1lcyA9IGZpbGVuYW1lczsgfQorICAg
IFZlY3RvcjxTdHJpbmc+IGZpbGVuYW1lcygpIGNvbnN0OworICAgIHZvaWQgc2V0RmlsZW5hbWVz
KGNvbnN0IFZlY3RvcjxTdHJpbmc+Jik7CiAKICAgICAvLyBVc2VkIHRvIGhhbmRsZSBmaWxlcyAo
aW1hZ2VzKSBiZWluZyBkcmFnZ2VkIG91dC4KLSAgICBTdHJpbmcgZmlsZUV4dGVuc2lvbigpIGNv
bnN0IHsgcmV0dXJuIG1fZmlsZUV4dGVuc2lvbjsgfQotICAgIHZvaWQgc2V0RmlsZUV4dGVuc2lv
bihjb25zdCBTdHJpbmcmIGZpbGVFeHRlbnNpb24pIHsgbV9maWxlRXh0ZW5zaW9uID0gZmlsZUV4
dGVuc2lvbjsgfQotICAgIFN0cmluZyBmaWxlQ29udGVudEZpbGVuYW1lKCkgY29uc3QgeyByZXR1
cm4gbV9maWxlQ29udGVudEZpbGVuYW1lOyB9Ci0gICAgdm9pZCBzZXRGaWxlQ29udGVudEZpbGVu
YW1lKGNvbnN0IFN0cmluZyYgZmlsZUNvbnRlbnRGaWxlbmFtZSkgeyBtX2ZpbGVDb250ZW50Rmls
ZW5hbWUgPSBmaWxlQ29udGVudEZpbGVuYW1lOyB9Ci0gICAgUGFzc1JlZlB0cjxTaGFyZWRCdWZm
ZXI+IGZpbGVDb250ZW50KCkgY29uc3QgeyByZXR1cm4gbV9maWxlQ29udGVudDsgfQotICAgIHZv
aWQgc2V0RmlsZUNvbnRlbnQoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGZpbGVDb250ZW50KSB7
IG1fZmlsZUNvbnRlbnQgPSBmaWxlQ29udGVudDsgfQotICAgIGNvbnN0IEhhc2hNYXA8U3RyaW5n
LCBTdHJpbmc+JiBjdXN0b21EYXRhKCkgY29uc3QgeyByZXR1cm4gbV9jdXN0b21EYXRhOyB9Ci0g
ICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIGN1c3RvbURhdGEoKSB7IHJldHVybiBtX2N1c3Rv
bURhdGE7IH0KKyAgICBTdHJpbmcgZmlsZUV4dGVuc2lvbigpIGNvbnN0OworICAgIHZvaWQgc2V0
RmlsZUV4dGVuc2lvbihjb25zdCBTdHJpbmcmKTsKKyAgICBTdHJpbmcgZmlsZUNvbnRlbnRGaWxl
bmFtZSgpIGNvbnN0OworICAgIHZvaWQgc2V0RmlsZUNvbnRlbnRGaWxlbmFtZShjb25zdCBTdHJp
bmcmKTsKKyAgICBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZmlsZUNvbnRlbnQoKSBjb25zdDsK
KyAgICB2b2lkIHNldEZpbGVDb250ZW50KFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPik7CisgICAg
Y29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIGN1c3RvbURhdGEoKSBjb25zdDsKKyAgICB2
b2lkIHNldEN1c3RvbURhdGEoY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mKTsKIAogcHJp
dmF0ZToKICAgICBleHBsaWNpdCBDaHJvbWl1bURhdGFPYmplY3QoU3RvcmFnZU1vZGUpOwpAQCAt
MTA2LDI4ICsxMTQsNyBAQCBwcml2YXRlOgogCiAgICAgU3RvcmFnZU1vZGUgbV9zdG9yYWdlTW9k
ZTsKIAotICAgIFN0cmluZyBtX3VybFRpdGxlOwotCi0gICAgU3RyaW5nIG1fZG93bmxvYWRNZXRh
ZGF0YTsKLQotICAgIFN0cmluZyBtX2ZpbGVFeHRlbnNpb247Ci0gICAgVmVjdG9yPFN0cmluZz4g
bV9maWxlbmFtZXM7Ci0KLSAgICBTdHJpbmcgbV9wbGFpblRleHQ7Ci0KLSAgICBTdHJpbmcgbV90
ZXh0SHRtbDsKLSAgICBLVVJMIG1faHRtbEJhc2VVcmw7Ci0KLSAgICBTdHJpbmcgbV9maWxlQ29u
dGVudEZpbGVuYW1lOwotICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1fZmlsZUNvbnRlbnQ7Ci0K
LSAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBtX2N1c3RvbURhdGE7Ci0KLSAgICAvLyBUaGVz
ZSB0d28gYXJlIGxpbmtlZC4gU2V0dGluZyBtX3VybCB3aWxsIHNldCBtX3VyaUxpc3QgdG8gdGhl
IHNhbWUKLSAgICAvLyBzdHJpbmcgdmFsdWU7IHNldHRpbmcgbV91cmlMaXN0IHdpbGwgY2F1c2Ug
aXRzIGNvbnRlbnRzIHRvIGJlIHBhcnNlZAotICAgIC8vIGFjY29yZGluZyB0byBSRkMgMjQ4MyBh
bmQgdGhlIGZpcnN0IFVSTCBmb3VuZCB3aWxsIGJlIHNldCBpbiBtX3VybC4KLSAgICBLVVJMIG1f
dXJsOwotICAgIFN0cmluZyBtX3VyaUxpc3Q7CisgICAgUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1M
aXN0Q2hyb21pdW0+IG1faXRlbXM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1
bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1
bS5jcHAKaW5kZXggY2QwYmY3OGNmZmZiYzIzM2EwZDFmYWVhNGFjM2Q3NjIwMTUwYjczNS4uZTY0
OTEzMjlhMGE3NTU1OTVjYTg0ZDM4NmY2NTM5OTY0Njc1MjhjMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmNwcApAQCAt
MzEsMTAgKzMxLDEzIEBACiAjaW5jbHVkZSAiQ2hyb21pdW1EYXRhT2JqZWN0LmgiCiAjaW5jbHVk
ZSAiQ2xpcGJvYXJkTWltZVR5cGVzLmgiCiAjaW5jbHVkZSAiQ2xpcGJvYXJkVXRpbGl0aWVzQ2hy
b21pdW0uaCIKKyNpbmNsdWRlICJEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0uaCIKKyNpbmNsdWRl
ICJEYXRhVHJhbnNmZXJJdGVtTGlzdC5oIgogI2luY2x1ZGUgIkRhdGFUcmFuc2Zlckl0ZW1MaXN0
Q2hyb21pdW0uaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkRyYWdEYXRhLmgi
CiAjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNs
dWRlICJGaWxlTGlzdC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVz
LmgiCkBAIC00NSw3ICs0OCw3IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1TdXBwb3J0LmgiCiAjaW5j
bHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJJbWFnZS5oIgotI2luY2x1ZGUgIlNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJTdHJpbmdDYWxsYmFjay5oIgogI2luY2x1
ZGUgIm1hcmt1cC5oIgogCiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgpAQCAt
NTMsNiArNTYsMTQ0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorbmFtZXNwYWNlIHsKKwor
Ly8gVGhlc2Ugd3JhcHBlciBjbGFzc2VzIGhlbHAgdXMgdG8gcHJvcGVybHkgc2NvcGUgRGF0YVRy
YW5zZmVySXRlbS9EYXRhVHJhbnNmZXJJdGVtTGlzdCBzbyB0aGV5IGFyZQorLy8gbm90IGF2YWls
YWJsZSBvdXRzaWRlIHRoZSBjb250ZXh0IHRoYXQgYSBDbGlwYm9hcmQgb2JqZWN0IGlzIHZhbGlk
IGZvci4KK2NsYXNzIERhdGFUcmFuc2Zlckl0ZW1MaXN0V3JhcHBlciA6IHB1YmxpYyBEYXRhVHJh
bnNmZXJJdGVtTGlzdCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YVRyYW5z
ZmVySXRlbUxpc3RXcmFwcGVyPiBjcmVhdGUoCisgICAgICAgIFBhc3NSZWZQdHI8Q2xpcGJvYXJk
Q2hyb21pdW0+LCBQYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0+KTsKKwor
ICAgIHZpcnR1YWwgc2l6ZV90IGxlbmd0aCgpIGNvbnN0OworICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxEYXRhVHJhbnNmZXJJdGVtPiBpdGVtKHVuc2lnbmVkIGxvbmcgaW5kZXgpOworICAgIHZpcnR1
YWwgdm9pZCBkZWxldGVJdGVtKHVuc2lnbmVkIGxvbmcgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmKTsK
KyAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkKGNvbnN0IFN0
cmluZyYgZGF0YSwgY29uc3QgU3RyaW5nJiB0eXBlLCBFeGNlcHRpb25Db2RlJik7CisKK3ByaXZh
dGU6CisgICAgRGF0YVRyYW5zZmVySXRlbUxpc3RXcmFwcGVyKFBhc3NSZWZQdHI8Q2xpcGJvYXJk
Q2hyb21pdW0+LCBQYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0+KTsKKyAg
CisgICAgUmVmUHRyPENsaXBib2FyZENocm9taXVtPiBtX2NsaXBib2FyZDsKKyAgICBSZWZQdHI8
RGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bT4gbV9saXN0OworfTsKKworY2xhc3MgRGF0YVRy
YW5zZmVySXRlbVdyYXBwZXIgOiBwdWJsaWMgRGF0YVRyYW5zZmVySXRlbSB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YVRyYW5zZmVySXRlbVdyYXBwZXI+IGNyZWF0ZSgKKyAg
ICAgICAgUGFzc1JlZlB0cjxDbGlwYm9hcmRDaHJvbWl1bT4sIFBhc3NSZWZQdHI8RGF0YVRyYW5z
ZmVySXRlbUNocm9taXVtPik7CisKKyAgICB2aXJ0dWFsIFN0cmluZyBraW5kKCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBTdHJpbmcgdHlwZSgpIGNvbnN0OworCisgICAgdmlydHVhbCB2b2lkIGdldEFz
U3RyaW5nKFBhc3NSZWZQdHI8U3RyaW5nQ2FsbGJhY2s+KTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8QmxvYj4gZ2V0QXNGaWxlKCk7CisKK3ByaXZhdGU6CisgICAgRGF0YVRyYW5zZmVySXRlbVdy
YXBwZXIoUGFzc1JlZlB0cjxDbGlwYm9hcmRDaHJvbWl1bT4sIFBhc3NSZWZQdHI8RGF0YVRyYW5z
ZmVySXRlbUNocm9taXVtPik7CisKKyAgICBSZWZQdHI8Q2xpcGJvYXJkQ2hyb21pdW0+IG1fY2xp
cGJvYXJkOworICAgIFJlZlB0cjxEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0+IG1faXRlbTsKK307
CisKK1Bhc3NSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUxpc3RXcmFwcGVyPiBEYXRhVHJhbnNmZXJJ
dGVtTGlzdFdyYXBwZXI6OmNyZWF0ZSgKKyAgICBQYXNzUmVmUHRyPENsaXBib2FyZENocm9taXVt
PiBjbGlwYm9hcmQsIFBhc3NSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bT4gbGlz
dCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IERhdGFUcmFuc2Zlckl0ZW1MaXN0V3JhcHBl
cihjbGlwYm9hcmQsIGxpc3QpKTsKK30KKworc2l6ZV90IERhdGFUcmFuc2Zlckl0ZW1MaXN0V3Jh
cHBlcjo6bGVuZ3RoKCkgY29uc3QKK3sKKyAgICBpZiAobV9jbGlwYm9hcmQtPnBvbGljeSgpID09
IENsaXBib2FyZE51bWIpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBtX2xpc3QtPmxl
bmd0aCgpOworfQorCitQYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW0+IERhdGFUcmFuc2Zlckl0
ZW1MaXN0V3JhcHBlcjo6aXRlbSh1bnNpZ25lZCBsb25nIGluZGV4KQoreworICAgIGlmIChtX2Ns
aXBib2FyZC0+cG9saWN5KCkgPT0gQ2xpcGJvYXJkTnVtYikKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bT4gaXRlbSA9IG1fbGlzdC0+aXRlbShp
bmRleCk7CisgICAgaWYgKCFpdGVtKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gRGF0
YVRyYW5zZmVySXRlbVdyYXBwZXI6OmNyZWF0ZShtX2NsaXBib2FyZCwgaXRlbSk7Cit9CisKK3Zv
aWQgRGF0YVRyYW5zZmVySXRlbUxpc3RXcmFwcGVyOjpkZWxldGVJdGVtKHVuc2lnbmVkIGxvbmcg
aW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmIChtX2NsaXBib2FyZC0+cG9saWN5
KCkgIT0gQ2xpcGJvYXJkV3JpdGFibGUpIHsKKyAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VS
UjsgLy8gRklYTUU6IFdyb25nIGV4Y2VwdGlvbiBjb2RlIEkgdGhpbmsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBtX2xpc3QtPmRlbGV0ZUl0ZW0oaW5kZXgsIGVjKTsKK30KKwordm9pZCBE
YXRhVHJhbnNmZXJJdGVtTGlzdFdyYXBwZXI6OmNsZWFyKCkKK3sKKyAgICBpZiAobV9jbGlwYm9h
cmQtPnBvbGljeSgpICE9IENsaXBib2FyZFdyaXRhYmxlKQorICAgICAgICByZXR1cm47CisgICAg
bV9saXN0LT5jbGVhcigpOworfQorCit2b2lkIERhdGFUcmFuc2Zlckl0ZW1MaXN0V3JhcHBlcjo6
YWRkKGNvbnN0IFN0cmluZyYgZGF0YSwgY29uc3QgU3RyaW5nJiB0eXBlLCBFeGNlcHRpb25Db2Rl
JiBlYykKK3sKKyAgICBpZiAobV9jbGlwYm9hcmQtPnBvbGljeSgpICE9IENsaXBib2FyZFdyaXRh
YmxlKQorICAgICAgICByZXR1cm47CisgICAgbV9saXN0LT5hZGQoZGF0YSwgdHlwZSwgZWMpOwor
fQorCitEYXRhVHJhbnNmZXJJdGVtTGlzdFdyYXBwZXI6OkRhdGFUcmFuc2Zlckl0ZW1MaXN0V3Jh
cHBlcigKKyAgICBQYXNzUmVmUHRyPENsaXBib2FyZENocm9taXVtPiBjbGlwYm9hcmQsIFBhc3NS
ZWZQdHI8RGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bT4gbGlzdCkKKyAgICA6IG1fY2xpcGJv
YXJkKGNsaXBib2FyZCkKKyAgICAsIG1fbGlzdChsaXN0KQoreworfQorCitQYXNzUmVmUHRyPERh
dGFUcmFuc2Zlckl0ZW1XcmFwcGVyPiBEYXRhVHJhbnNmZXJJdGVtV3JhcHBlcjo6Y3JlYXRlKAor
ICAgIFBhc3NSZWZQdHI8Q2xpcGJvYXJkQ2hyb21pdW0+IGNsaXBib2FyZCwgUGFzc1JlZlB0cjxE
YXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0+IGl0ZW0pCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBEYXRhVHJhbnNmZXJJdGVtV3JhcHBlcihjbGlwYm9hcmQsIGl0ZW0pKTsKK30KKworU3RyaW5n
IERhdGFUcmFuc2Zlckl0ZW1XcmFwcGVyOjpraW5kKCkgY29uc3QKK3sKKyAgICBpZiAobV9jbGlw
Ym9hcmQtPnBvbGljeSgpID09IENsaXBib2FyZE51bWIpCisgICAgICAgIHJldHVybiBTdHJpbmco
KTsKKyAgICByZXR1cm4gbV9pdGVtLT5raW5kKCk7Cit9CisKK1N0cmluZyBEYXRhVHJhbnNmZXJJ
dGVtV3JhcHBlcjo6dHlwZSgpIGNvbnN0Cit7CisgICAgaWYgKG1fY2xpcGJvYXJkLT5wb2xpY3ko
KSA9PSBDbGlwYm9hcmROdW1iKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0dXJu
IG1faXRlbS0+dHlwZSgpOworfQorCit2b2lkIERhdGFUcmFuc2Zlckl0ZW1XcmFwcGVyOjpnZXRB
c1N0cmluZyhQYXNzUmVmUHRyPFN0cmluZ0NhbGxiYWNrPiBjYWxsYmFjaykKK3sKKyAgICBpZiAo
bV9jbGlwYm9hcmQtPnBvbGljeSgpICE9IENsaXBib2FyZFJlYWRhYmxlICYmIG1fY2xpcGJvYXJk
LT5wb2xpY3koKSAhPSBDbGlwYm9hcmRXcml0YWJsZSkKKyAgICAgICAgcmV0dXJuOworICAgICAg
IAorICAgIG1faXRlbS0+Z2V0QXNTdHJpbmcoY2FsbGJhY2ssIG1fY2xpcGJvYXJkLT5mcmFtZSgp
LT5kb2N1bWVudCgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOworfQorCitQYXNzUmVmUHRy
PEJsb2I+IERhdGFUcmFuc2Zlckl0ZW1XcmFwcGVyOjpnZXRBc0ZpbGUoKQoreworICAgIGlmICht
X2NsaXBib2FyZC0+cG9saWN5KCkgIT0gQ2xpcGJvYXJkUmVhZGFibGUgJiYgbV9jbGlwYm9hcmQt
PnBvbGljeSgpICE9IENsaXBib2FyZFdyaXRhYmxlKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IHJldHVybiBtX2l0ZW0tPmdldEFzRmlsZSgpOworfQorCitEYXRhVHJhbnNmZXJJdGVtV3JhcHBl
cjo6RGF0YVRyYW5zZmVySXRlbVdyYXBwZXIoCisgICAgUGFzc1JlZlB0cjxDbGlwYm9hcmRDaHJv
bWl1bT4gY2xpcGJvYXJkLCBQYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bT4gaXRl
bSkKKyAgICA6IG1fY2xpcGJvYXJkKGNsaXBib2FyZCkKKyAgICAsIG1faXRlbShpdGVtKQorewor
fQorCit9IC8vIG5hbWVzcGFjZQorCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiAvLyBX
ZSBwcm92aWRlIHRoZSBJRSBjbGlwYm9hcmQgdHlwZXMgKFVSTCBhbmQgVGV4dCksIGFuZCB0aGUg
Y2xpcGJvYXJkIHR5cGVzIHNwZWNpZmllZCBpbiB0aGUgV0hBVFdHIFdlYiBBcHBsaWNhdGlvbnMg
MS4wIGRyYWZ0CkBAIC05MCwxMiArMjMxLDExIEBAIFBhc3NSZWZQdHI8Q2xpcGJvYXJkQ2hyb21p
dW0+IENsaXBib2FyZENocm9taXVtOjpjcmVhdGUoQ2xpcGJvYXJkVHlwZSBjbGlwYm9hcmRUCiAK
IHZvaWQgQ2xpcGJvYXJkQ2hyb21pdW06OmNsZWFyRGF0YShjb25zdCBTdHJpbmcmIHR5cGUpCiB7
Ci0gICAgaWYgKHBvbGljeSgpICE9IENsaXBib2FyZFdyaXRhYmxlIHx8ICFtX2RhdGFPYmplY3Qp
CisgICAgaWYgKHBvbGljeSgpICE9IENsaXBib2FyZFdyaXRhYmxlKQogICAgICAgICByZXR1cm47
CiAKKyAgICAvLyBGSVhNRTogSWYgQ2xpcGJvYXJkQ2hyb21pdW0gaXMgdGhlIG9ubHkgY29uc3Vt
ZXIgb2YgdGhpcyBmdW5jdGlvbiwgbW92ZSB0aGUgaW1wbGVtZW50YXRpb24uCiAgICAgbV9kYXRh
T2JqZWN0LT5jbGVhckRhdGEobm9ybWFsaXplVHlwZSh0eXBlKSk7Ci0KLSAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKIH0KIAogdm9pZCBDbGlwYm9hcmRDaHJvbWl1bTo6Y2xlYXJBbGxEYXRhKCkK
QEAgLTEwMywxOSArMjQzLDIxIEBAIHZvaWQgQ2xpcGJvYXJkQ2hyb21pdW06OmNsZWFyQWxsRGF0
YSgpCiAgICAgaWYgKHBvbGljeSgpICE9IENsaXBib2FyZFdyaXRhYmxlKQogICAgICAgICByZXR1
cm47CiAKKyAgICAvLyBGSVhNRTogSWYgQ2xpcGJvYXJkQ2hyb21pdW0gaXMgdGhlIG9ubHkgY29u
c3VtZXIgb2YgdGhpcyBmdW5jdGlvbiwgbW92ZSB0aGUgaW1wbGVtZW50YXRpb24uCiAgICAgbV9k
YXRhT2JqZWN0LT5jbGVhckFsbCgpOwogfQogCiBTdHJpbmcgQ2xpcGJvYXJkQ2hyb21pdW06Omdl
dERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBib29sJiBzdWNjZXNzKSBjb25zdAogewogICAgIHN1
Y2Nlc3MgPSBmYWxzZTsKLSAgICBpZiAocG9saWN5KCkgIT0gQ2xpcGJvYXJkUmVhZGFibGUgfHwg
IW1fZGF0YU9iamVjdCkKKyAgICBpZiAocG9saWN5KCkgIT0gQ2xpcGJvYXJkUmVhZGFibGUpCiAg
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAogICAgIGlmIChpc0ZvckNvcHlBbmRQYXN0ZSgpICYm
IHBsYXRmb3JtQ2xpcGJvYXJkQ2hhbmdlZCgpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAK
LSAgICByZXR1cm4gbV9kYXRhT2JqZWN0LT5nZXREYXRhKG5vcm1hbGl6ZVR5cGUodHlwZSksIHN1
Y2Nlc3MpOworICAgIC8vIEZJWE1FOiBSZWltcGxlbWVudC4KKyAgICByZXR1cm4gU3RyaW5nKCk7
CiB9CiAKIGJvb2wgQ2xpcGJvYXJkQ2hyb21pdW06OnNldERhdGEoY29uc3QgU3RyaW5nJiB0eXBl
LCBjb25zdCBTdHJpbmcmIGRhdGEpCkBAIC0xMjMsNyArMjY1LDggQEAgYm9vbCBDbGlwYm9hcmRD
aHJvbWl1bTo6c2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSkK
ICAgICBpZiAocG9saWN5KCkgIT0gQ2xpcGJvYXJkV3JpdGFibGUpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIHJldHVybiBtX2RhdGFPYmplY3QtPnNldERhdGEobm9ybWFsaXplVHlwZSh0
eXBlKSwgZGF0YSk7CisgICAgLy8gRklYTUU6IFJlaW1wbGVtZW50LgorICAgIHJldHVybiBmYWxz
ZTsKIH0KIAogYm9vbCBDbGlwYm9hcmRDaHJvbWl1bTo6cGxhdGZvcm1DbGlwYm9hcmRDaGFuZ2Vk
KCkgY29uc3QKQEAgLTEzOCwxMiArMjgxLDE1IEBAIEhhc2hTZXQ8U3RyaW5nPiBDbGlwYm9hcmRD
aHJvbWl1bTo6dHlwZXMoKSBjb25zdAogICAgIGlmIChwb2xpY3koKSAhPSBDbGlwYm9hcmRSZWFk
YWJsZSAmJiBwb2xpY3koKSAhPSBDbGlwYm9hcmRUeXBlc1JlYWRhYmxlKQogICAgICAgICByZXR1
cm4gcmVzdWx0czsKIAotICAgIGlmICghbV9kYXRhT2JqZWN0KQotICAgICAgICByZXR1cm4gcmVz
dWx0czsKLQotICAgIHJlc3VsdHMgPSBtX2RhdGFPYmplY3QtPnR5cGVzKCk7Ci0KLSAgICBpZiAo
bV9kYXRhT2JqZWN0LT5jb250YWluc0ZpbGVuYW1lcygpKQorICAgIGJvb2wgY29udGFpbnNGaWxl
cyA9IGZhbHNlOworICAgIFJlZlB0cjxEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtPiBsaXN0
ID0gbV9kYXRhT2JqZWN0LT5pdGVtcygpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlz
dC0+bGVuZ3RoKCk7ICsraSkgeworICAgICAgICBpZiAobGlzdC0+aXRlbShpKS0+a2luZCgpID09
IERhdGFUcmFuc2Zlckl0ZW06OmtpbmRTdHJpbmcpCisgICAgICAgICAgICByZXN1bHRzLmFkZChs
aXN0LT5pdGVtKGkpLT50eXBlKCkpOworICAgICAgICBlbHNlIGlmIChsaXN0LT5pdGVtKGkpLT5r
aW5kKCkgPT0gRGF0YVRyYW5zZmVySXRlbTo6a2luZEZpbGUpCisgICAgICAgICAgICBjb250YWlu
c0ZpbGVzID0gdHJ1ZTsKKyAgICB9CisgICAgaWYgKGNvbnRhaW5zRmlsZXMpCiAgICAgICAgIHJl
c3VsdHMuYWRkKG1pbWVUeXBlRmlsZXMpOwogCiAgICAgcmV0dXJuIHJlc3VsdHM7CkBAIC0xNTEs
MTggKzI5NywyMCBAQCBIYXNoU2V0PFN0cmluZz4gQ2xpcGJvYXJkQ2hyb21pdW06OnR5cGVzKCkg
Y29uc3QKIAogUGFzc1JlZlB0cjxGaWxlTGlzdD4gQ2xpcGJvYXJkQ2hyb21pdW06OmZpbGVzKCkg
Y29uc3QKIHsKKyAgICAvLyBGSVhNRTogQWNjb3JkaW5nIHRvIHRoZSBzcGVjLCB3ZSBhcmUgc3Vw
cG9zZWQgdG8gcmV0dXJuIHRoZSBzYW1lIEZpbGVMaXN0IGVhY2ggdGltZS4KKyAgICBSZWZQdHI8
RmlsZUxpc3Q+IGZpbGVzID0gRmlsZUxpc3Q6OmNyZWF0ZSgpOwogICAgIGlmIChwb2xpY3koKSAh
PSBDbGlwYm9hcmRSZWFkYWJsZSkKLSAgICAgICAgcmV0dXJuIEZpbGVMaXN0OjpjcmVhdGUoKTsK
LQotICAgIGlmICghbV9kYXRhT2JqZWN0KQotICAgICAgICByZXR1cm4gRmlsZUxpc3Q6OmNyZWF0
ZSgpOwotCi0gICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcyA9IG1fZGF0YU9iamVj
dC0+ZmlsZW5hbWVzKCk7Ci0gICAgUmVmUHRyPEZpbGVMaXN0PiBmaWxlTGlzdCA9IEZpbGVMaXN0
OjpjcmVhdGUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZpbGVuYW1lcy5zaXplKCk7
ICsraSkKLSAgICAgICAgZmlsZUxpc3QtPmFwcGVuZChGaWxlOjpjcmVhdGUoZmlsZW5hbWVzLmF0
KGkpKSk7Ci0KLSAgICByZXR1cm4gZmlsZUxpc3QucmVsZWFzZSgpOworICAgICAgICByZXR1cm4g
ZmlsZXM7CisKKyAgICBSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bT4gbGlzdCA9
IG1fZGF0YU9iamVjdC0+aXRlbXMoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpc3Qt
Pmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgaWYgKGxpc3QtPml0ZW0oaSktPmtpbmQoKSA9PSBE
YXRhVHJhbnNmZXJJdGVtOjpraW5kRmlsZSkgeworICAgICAgICAgICAgUmVmUHRyPEJsb2I+IGJs
b2IgPSBsaXN0LT5pdGVtKGkpLT5nZXRBc0ZpbGUoKTsKKyAgICAgICAgICAgIGlmIChibG9iLT5p
c0ZpbGUoKSkKKyAgICAgICAgICAgICAgICBmaWxlcy0+YXBwZW5kKHN0YXRpY19jYXN0PEZpbGUq
PihibG9iLmdldCgpKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZpbGVzOwogfQog
CiB2b2lkIENsaXBib2FyZENocm9taXVtOjpzZXREcmFnSW1hZ2UoQ2FjaGVkSW1hZ2UqIGltYWdl
LCBOb2RlKiBub2RlLCBjb25zdCBJbnRQb2ludCYgbG9jKQpAQCAtMzE5LDI3ICs0NjcsMTUgQEAg
dm9pZCBDbGlwYm9hcmRDaHJvbWl1bTo6d3JpdGVQbGFpblRleHQoY29uc3QgU3RyaW5nJiB0ZXh0
KQogYm9vbCBDbGlwYm9hcmRDaHJvbWl1bTo6aGFzRGF0YSgpCiB7CiAgICAgQVNTRVJUKGlzRm9y
RHJhZ0FuZERyb3AoKSk7Ci0gICAgaWYgKCFtX2RhdGFPYmplY3QpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKIAorICAgIC8vIEZJWE1FOiBQZXJoYXBzIHRoaXMgaXMgdGhlIHJlYXNvbiB3ZSBjYW4n
dCBkcmFnIGFuZCBkcm9wIHdpdGggbm8gZGF0YSBzZXQ/CiAgICAgcmV0dXJuIG1fZGF0YU9iamVj
dC0+aGFzRGF0YSgpOwogfQogCiAjaWYgRU5BQkxFKERBVEFfVFJBTlNGRVJfSVRFTVMpCiBQYXNz
UmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1MaXN0PiBDbGlwYm9hcmRDaHJvbWl1bTo6aXRlbXMoKQog
ewotICAgIFJlZlB0cjxEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtPiBpdGVtcyA9IERhdGFU
cmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW06OmNyZWF0ZSh0aGlzLCBtX2ZyYW1lLT5kb2N1bWVudCgp
LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwotCi0gICAgaWYgKCFtX2RhdGFPYmplY3QpCi0g
ICAgICAgIHJldHVybiBpdGVtczsKLQotICAgIGlmIChpc0ZvckNvcHlBbmRQYXN0ZSgpICYmIHBv
bGljeSgpID09IENsaXBib2FyZFJlYWRhYmxlKSB7Ci0gICAgICAgIC8vIEl0ZXJhdGUgdGhyb3Vn
aCB0aGUgdHlwZXMgYW5kIGFkZCB0aGVtLgotICAgICAgICBIYXNoU2V0PFN0cmluZz4gdHlwZXMg
PSBtX2RhdGFPYmplY3QtPnR5cGVzKCk7Ci0gICAgICAgIGZvciAoSGFzaFNldDxTdHJpbmc+Ojpj
b25zdF9pdGVyYXRvciBpdCA9IHR5cGVzLmJlZ2luKCk7IGl0ICE9IHR5cGVzLmVuZCgpOyArK2l0
KQotICAgICAgICAgICAgaXRlbXMtPmFkZFBhc3RlYm9hcmRJdGVtKCppdCk7Ci0gICAgfQotICAg
IHJldHVybiBpdGVtczsKKyAgICByZXR1cm4gRGF0YVRyYW5zZmVySXRlbUxpc3RXcmFwcGVyOjpj
cmVhdGUodGhpcywgbV9kYXRhT2JqZWN0LT5pdGVtcygpKTsKIH0KICNlbmRpZgogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uaApp
bmRleCA4YjE3NDUyN2EwY2NkZjE3MzYzMjA0ODM3NTFhYjdmZjlmNmZkYWU0Li5lMGE2ZWQ5OGJh
YWY4YjJjZDVmYzNiYzhmYmU2YjdkYmZmNzRiZjNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmgKQEAgLTg0LDYgKzg0LDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2lmIEVOQUJMRShEQVRBX1RSQU5TRkVSX0lURU1TKQog
ICAgICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUxpc3Q+IGl0ZW1zKCk7
CiAjZW5kaWYKKyAgICAgICAgRnJhbWUqIGZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZTsg
fQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgQ2xpcGJvYXJkQ2hyb21pdW0oQ2xpcGJvYXJkVHlw
ZSwgUGFzc1JlZlB0cjxDaHJvbWl1bURhdGFPYmplY3Q+LCBDbGlwYm9hcmRBY2Nlc3NQb2xpY3ks
IEZyYW1lKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9E
YXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vRGF0YVRyYW5zZmVySXRlbUNocm9taXVtLmNwcAppbmRleCBhNzlhZTg1ZWJjMzNjYWZk
NjFlNjIxYTBhZDc2MTFlZjc3MDA5ZGM1Li5kOTI2YTNjZTE5YTA0OWNiMjcyOTQ2M2RiNjZlM2E2
MmU0MTEzNjExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9E
YXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2Nocm9taXVtL0RhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bS5jcHAKQEAgLTM0LDY1ICszNCw1NiBA
QAogI2lmIEVOQUJMRShEQVRBX1RSQU5TRkVSX0lURU1TKQogCiAjaW5jbHVkZSAiQmxvYi5oIgot
I2luY2x1ZGUgIkNsaXBib2FyZC5oIgotI2luY2x1ZGUgIkNsaXBib2FyZENocm9taXVtLmgiCiAj
aW5jbHVkZSAiQ2xpcGJvYXJkTWltZVR5cGVzLmgiCiAjaW5jbHVkZSAiQ2xpcGJvYXJkVXRpbGl0
aWVzQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJEYXRhVHJhbnNmZXJJdGVtLmgiCiAjaW5jbHVkZSAi
UGxhdGZvcm1TdXBwb3J0LmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5jbHVkZSAi
U3RyaW5nQ2FsbGJhY2suaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzUmVmUHRyPERh
dGFUcmFuc2Zlckl0ZW1DaHJvbWl1bT4gRGF0YVRyYW5zZmVySXRlbUNocm9taXVtOjpjcmVhdGVG
cm9tUGFzdGVib2FyZChQYXNzUmVmUHRyPENsaXBib2FyZD4gb3duZXIsIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgdHlwZSkKK1Bhc3NSZWZQdHI8RGF0YVRy
YW5zZmVySXRlbUNocm9taXVtPiBEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW06OmNyZWF0ZUZyb21Q
YXN0ZWJvYXJkKGNvbnN0IFN0cmluZyYgdHlwZSkKIHsKICAgICBpZiAodHlwZSA9PSBtaW1lVHlw
ZVRleHRQbGFpbiB8fCB0eXBlID09IG1pbWVUeXBlVGV4dEhUTUwpCi0gICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgRGF0YVRyYW5zZmVySXRlbUNocm9taXVtKG93bmVyLCBjb250ZXh0LCBQYXN0
ZWJvYXJkU291cmNlLCBEYXRhVHJhbnNmZXJJdGVtOjpraW5kU3RyaW5nLCB0eXBlLCAiIikpOwot
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGF0YVRyYW5zZmVySXRlbUNocm9taXVtKG93bmVyLCBj
b250ZXh0LCBQYXN0ZWJvYXJkU291cmNlLCBEYXRhVHJhbnNmZXJJdGVtOjpraW5kRmlsZSwgdHlw
ZSwgIiIpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEYXRhVHJhbnNmZXJJdGVtQ2hy
b21pdW0oUGFzdGVib2FyZFNvdXJjZSwgRGF0YVRyYW5zZmVySXRlbTo6a2luZFN0cmluZywgdHlw
ZSwgU3RyaW5nKCkpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IERhdGFUcmFuc2Zlckl0ZW1D
aHJvbWl1bShQYXN0ZWJvYXJkU291cmNlLCBEYXRhVHJhbnNmZXJJdGVtOjpraW5kRmlsZSwgdHlw
ZSwgU3RyaW5nKCkpKTsKIH0KIAotUGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0+
IERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bTo6Y3JlYXRlKFBhc3NSZWZQdHI8Q2xpcGJvYXJkPiBv
d25lciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFN0cmluZyYgZGF0YSwKK1Bhc3NSZWZQdHI8RGF0YVRyYW5zZmVySXRl
bUNocm9taXVtPiBEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW06OmNyZWF0ZShjb25zdCBTdHJpbmcm
IGRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiB0eXBlKQogewotICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgRGF0YVRyYW5zZmVySXRlbUNocm9taXVtKG93bmVyLCBjb250ZXh0LCBJbnRl
cm5hbFNvdXJjZSwgRGF0YVRyYW5zZmVySXRlbTo6a2luZFN0cmluZywgdHlwZSwgZGF0YSkpOwor
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGF0YVRyYW5zZmVySXRlbUNocm9taXVtKEludGVybmFs
U291cmNlLCBEYXRhVHJhbnNmZXJJdGVtOjpraW5kU3RyaW5nLCB0eXBlLCBkYXRhKSk7CiB9CiAK
LVBhc3NSZWZQdHI8RGF0YVRyYW5zZmVySXRlbT4gRGF0YVRyYW5zZmVySXRlbTo6Y3JlYXRlKFBh
c3NSZWZQdHI8Q2xpcGJvYXJkPiBvd25lciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBTdHJpbmcmIGRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHR5cGUpCitEYXRhVHJhbnNmZXJJdGVtQ2hy
b21pdW06On5EYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0oKQogewotICAgIHJldHVybiBEYXRhVHJh
bnNmZXJJdGVtQ2hyb21pdW06OmNyZWF0ZShvd25lciwgY29udGV4dCwgZGF0YSwgdHlwZSk7CiB9
CiAKLURhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bTo6RGF0YVRyYW5zZmVySXRlbUNocm9taXVtKFBh
c3NSZWZQdHI8Q2xpcGJvYXJkPiBvd25lciwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgRGF0YVNvdXJjZSBzb3VyY2UsIGNvbnN0IFN0cmluZyYga2luZCwgY29uc3QgU3RyaW5nJiB0
eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpCi0gICAgOiBEYXRhVHJhbnNmZXJJdGVtKG93bmVyLCBr
aW5kLCB0eXBlKQotICAgICwgbV9jb250ZXh0KGNvbnRleHQpCitEYXRhVHJhbnNmZXJJdGVtQ2hy
b21pdW06OkRhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bShEYXRhU291cmNlIHNvdXJjZSwgY29uc3Qg
U3RyaW5nJiBraW5kLCBjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSkKKyAg
ICA6IG1fa2luZChraW5kKQorICAgICwgbV90eXBlKHR5cGUpCiAgICAgLCBtX3NvdXJjZShzb3Vy
Y2UpCiAgICAgLCBtX2RhdGEoZGF0YSkKIHsKIH0KIAotdm9pZCBEYXRhVHJhbnNmZXJJdGVtQ2hy
b21pdW06OmdldEFzU3RyaW5nKFBhc3NSZWZQdHI8U3RyaW5nQ2FsbGJhY2s+IGNhbGxiYWNrKQor
dm9pZCBEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW06OmdldEFzU3RyaW5nKFBhc3NSZWZQdHI8U3Ry
aW5nQ2FsbGJhY2s+IGNhbGxiYWNrLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQog
ewotICAgIGlmICgob3duZXIoKS0+cG9saWN5KCkgIT0gQ2xpcGJvYXJkUmVhZGFibGUgJiYgb3du
ZXIoKS0+cG9saWN5KCkgIT0gQ2xpcGJvYXJkV3JpdGFibGUpCi0gICAgICAgIHx8IGtpbmQoKSAh
PSBraW5kU3RyaW5nKQorICAgIGlmIChraW5kKCkgIT0gRGF0YVRyYW5zZmVySXRlbTo6a2luZFN0
cmluZykKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1fc291cmNlID09IEludGVybmFsU291
cmNlKSB7Ci0gICAgICAgIGNhbGxiYWNrLT5zY2hlZHVsZUNhbGxiYWNrKG1fY29udGV4dCwgbV9k
YXRhKTsKKyAgICAgICAgY2FsbGJhY2stPnNjaGVkdWxlQ2FsbGJhY2soY29udGV4dCwgbV9kYXRh
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIEFTU0VSVChtX3NvdXJjZSA9PSBQYXN0
ZWJvYXJkU291cmNlKTsKLSAgICBpZiAoc3RhdGljX2Nhc3Q8Q2xpcGJvYXJkQ2hyb21pdW0qPihv
d25lcigpKS0+cGxhdGZvcm1DbGlwYm9hcmRDaGFuZ2VkKCkpCi0gICAgICAgIHJldHVybjsKKyAg
ICAvLyBGSVhNRTogTmVlZCB0byByZS1hZGQgdGhlIGNsaXBib2FyZCBjaGFuZ2VkIGNoZWNrLgog
CiAgICAgLy8gVGhpcyBpcyB1Z2x5IGJ1dCB0aGVyZSdzIG5vIHJlYWwgYWx0ZXJuYXRpdmUuCiAg
ICAgaWYgKHR5cGUoKSA9PSBtaW1lVHlwZVRleHRQbGFpbikgewotICAgICAgICBjYWxsYmFjay0+
c2NoZWR1bGVDYWxsYmFjayhtX2NvbnRleHQsIFBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJvYXJkUmVh
ZFBsYWluVGV4dChjdXJyZW50UGFzdGVib2FyZEJ1ZmZlcigpKSk7CisgICAgICAgIGNhbGxiYWNr
LT5zY2hlZHVsZUNhbGxiYWNrKGNvbnRleHQsIFBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJvYXJkUmVh
ZFBsYWluVGV4dChjdXJyZW50UGFzdGVib2FyZEJ1ZmZlcigpKSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgaWYgKHR5cGUoKSA9PSBtaW1lVHlwZVRleHRIVE1MKSB7CkBAIC0xMDAsNyAr
OTEsNyBAQCB2b2lkIERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bTo6Z2V0QXNTdHJpbmcoUGFzc1Jl
ZlB0cjxTdHJpbmdDYWxsYmFjaz4gY2FsbGJhY2spCiAgICAgICAgIEtVUkwgaWdub3JlZFNvdXJj
ZVVSTDsKICAgICAgICAgdW5zaWduZWQgaWdub3JlZDsKICAgICAgICAgUGxhdGZvcm1TdXBwb3J0
OjpjbGlwYm9hcmRSZWFkSFRNTChjdXJyZW50UGFzdGVib2FyZEJ1ZmZlcigpLCAmaHRtbCwgJmln
bm9yZWRTb3VyY2VVUkwsICZpZ25vcmVkLCAmaWdub3JlZCk7Ci0gICAgICAgIGNhbGxiYWNrLT5z
Y2hlZHVsZUNhbGxiYWNrKG1fY29udGV4dCwgaHRtbCk7CisgICAgICAgIGNhbGxiYWNrLT5zY2hl
ZHVsZUNhbGxiYWNrKGNvbnRleHQsIGh0bWwpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTExLDggKzEwMiw3IEBAIFBhc3NSZWZQdHI8Qmxv
Yj4gRGF0YVRyYW5zZmVySXRlbUNocm9taXVtOjpnZXRBc0ZpbGUoKQogICAgIGlmIChtX3NvdXJj
ZSA9PSBJbnRlcm5hbFNvdXJjZSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBpZiAoc3RhdGlj
X2Nhc3Q8Q2xpcGJvYXJkQ2hyb21pdW0qPihvd25lcigpKS0+cGxhdGZvcm1DbGlwYm9hcmRDaGFu
Z2VkKCkpCi0gICAgICAgIHJldHVybiAwOworICAgIC8vIEZJWE1FOiBOZWVkIHRvIHJlLWFkZCB0
aGUgY2xpcGJvYXJkIGNoYW5nZWQgY2hlY2suCiAKICAgICBBU1NFUlQobV9zb3VyY2UgPT0gUGFz
dGVib2FyZFNvdXJjZSk7CiAgICAgaWYgKHR5cGUoKSA9PSBtaW1lVHlwZUltYWdlUG5nKSB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EYXRhVHJhbnNmZXJJ
dGVtQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RhdGFUcmFu
c2Zlckl0ZW1DaHJvbWl1bS5oCmluZGV4IDE0NGU0MGY3Y2ZjNjcyZjNmZThhNDcxZjM0ZTk4OWQ0
MTQ4YmU4NjcuLjczZGY1Y2FkNzMzNTVlOTE2MmJiMGJlNzk2NmMwMWYyNTcyMDRhYWIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RhdGFUcmFuc2Zlckl0ZW1D
aHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RhdGFUcmFu
c2Zlckl0ZW1DaHJvbWl1bS5oCkBAIC0zMywyMSArMzMsMjkgQEAKIAogI2lmIEVOQUJMRShEQVRB
X1RSQU5TRkVSX0lURU1TKQogCi0jaW5jbHVkZSAiRGF0YVRyYW5zZmVySXRlbS5oIgorI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIENs
aXBib2FyZDsKK2NsYXNzIEJsb2I7CiBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OworY2xh
c3MgU3RyaW5nQ2FsbGJhY2s7CiAKLWNsYXNzIERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bSA6IHB1
YmxpYyBEYXRhVHJhbnNmZXJJdGVtIHsKK2NsYXNzIERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bSA6
IHB1YmxpYyBSZWZDb3VudGVkPERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bT4gewogcHVibGljOgot
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bT4gY3JlYXRlRnJv
bVBhc3RlYm9hcmQoUGFzc1JlZlB0cjxDbGlwYm9hcmQ+IG93bmVyLCBTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgY29uc3QgU3RyaW5nJiB0eXBlKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRh
VHJhbnNmZXJJdGVtQ2hyb21pdW0+IGNyZWF0ZShQYXNzUmVmUHRyPENsaXBib2FyZD4gb3duZXIs
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIGRhdGEsIGNvbnN0IFN0cmlu
ZyYgdHlwZSk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUNocm9taXVt
PiBjcmVhdGVGcm9tUGFzdGVib2FyZChjb25zdCBTdHJpbmcmIHR5cGUpOworICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bT4gY3JlYXRlKGNvbnN0IFN0cmluZyYg
ZGF0YSwgY29uc3QgU3RyaW5nJiB0eXBlKTsKIAotICAgIHZpcnR1YWwgdm9pZCBnZXRBc1N0cmlu
ZyhQYXNzUmVmUHRyPFN0cmluZ0NhbGxiYWNrPik7CisgICAgdmlydHVhbCB+RGF0YVRyYW5zZmVy
SXRlbUNocm9taXVtKCk7CisKKyAgICAvLyBGSVhNRTogQmVmb3JlIGxhbmRpbmcgdGhpcyBjaGFu
Z2UsIHdlIHByb2JhYmx5IHdhbnQgdG8gcmUtdmlydHVhbGl6ZSBkb20vRGF0YVRyYW5zZmVySXRl
bQorICAgIC8vIGZpcnN0LiBJdCB3aWxsIG1ha2UgdGhpcyBwYXRjaCBhIGJpdCBzbWFsbGVyLgor
ICAgIHZpcnR1YWwgU3RyaW5nIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KKyAgICB2
aXJ0dWFsIFN0cmluZyB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisKKyAgICB2aXJ0
dWFsIHZvaWQgZ2V0QXNTdHJpbmcoUGFzc1JlZlB0cjxTdHJpbmdDYWxsYmFjaz4sIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqKTsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8QmxvYj4gZ2V0QXNGaWxl
KCk7CiAKIHByaXZhdGU6CkBAIC01Niw5ICs2NCwxMSBAQCBwcml2YXRlOgogICAgICAgICBJbnRl
cm5hbFNvdXJjZSwKICAgICB9OwogCi0gICAgRGF0YVRyYW5zZmVySXRlbUNocm9taXVtKFBhc3NS
ZWZQdHI8Q2xpcGJvYXJkPiBvd25lciwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIERhdGFTb3Vy
Y2UsIGNvbnN0IFN0cmluZyYga2luZCwgY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcm
IGRhdGEpOworICAgIERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bShEYXRhU291cmNlLCBjb25zdCBT
dHJpbmcmIGtpbmQsIGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKTsKIAot
ICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIG1fY29udGV4dDsKKyAgICAvLyBGSVhNRTogVGFr
ZSBhZHZhbnRhZ2Ugb2YgdGhlIHZpcnR1YWwgZnVuY3Rpb25zIGFuZCBzcGxpdCB1cCB0aGlzIGNv
ZGUuCisgICAgY29uc3QgU3RyaW5nIG1fa2luZDsKKyAgICBjb25zdCBTdHJpbmcgbV90eXBlOwog
ICAgIGNvbnN0IERhdGFTb3VyY2UgbV9zb3VyY2U7CiAgICAgY29uc3QgU3RyaW5nIG1fZGF0YTsK
IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EYXRhVHJh
bnNmZXJJdGVtTGlzdENocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9t
aXVtL0RhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0uY3BwCmluZGV4IDMyMGU3NDkxNDQ2NTFi
ZjExNGY1YjE2ZTFhMTZhN2M1Yjk4NGZmZTMuLjM4YTUwNGJjN2ZkMWMxMDUwOWM3ZGQzOTY2OGMz
NjM3NjkzNzBhNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVt
L0RhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2Nocm9taXVtL0RhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0uY3BwCkBAIC0zMywy
NSArMzMsNjAgQEAKIAogI2lmIEVOQUJMRShEQVRBX1RSQU5TRkVSX0lURU1TKQogCi0jaW5jbHVk
ZSAiQ2xpcGJvYXJkLmgiCisjaW5jbHVkZSAiRGF0YVRyYW5zZmVySXRlbS5oIgogI2luY2x1ZGUg
IkRhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bS5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1MaXN0
Q2hyb21pdW0+IERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW06OmNyZWF0ZShQYXNzUmVmUHRy
PENsaXBib2FyZD4gb3duZXIsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCitQYXNz
UmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0+IERhdGFUcmFuc2Zlckl0ZW1MaXN0
Q2hyb21pdW06OmNyZWF0ZSgpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEYXRhVHJhbnNm
ZXJJdGVtTGlzdENocm9taXVtKG93bmVyLCBjb250ZXh0KSk7CisgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtKCkpOwogfQogCi1EYXRhVHJhbnNmZXJJ
dGVtTGlzdENocm9taXVtOjpEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtKFBhc3NSZWZQdHI8
Q2xpcGJvYXJkPiBvd25lciwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKLSAgICA6
IERhdGFUcmFuc2Zlckl0ZW1MaXN0KG93bmVyLCBjb250ZXh0KQorRGF0YVRyYW5zZmVySXRlbUxp
c3RDaHJvbWl1bTo6fkRhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0oKQogewogfQogCi12b2lk
IERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW06OmFkZFBhc3RlYm9hcmRJdGVtKGNvbnN0IFN0
cmluZyYgdHlwZSkKK3NpemVfdCBEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtOjpsZW5ndGgo
KSBjb25zdAoreworICAgIHJldHVybiBtX2l0ZW1zLnNpemUoKTsKK30KKworUGFzc1JlZlB0cjxE
YXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0+IERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW06Oml0
ZW0odW5zaWduZWQgbG9uZyBpbmRleCkKK3sKKyAgICBpZiAoaW5kZXggPj0gbGVuZ3RoKCkpCisg
ICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBtX2l0ZW1zW2luZGV4XTsKK30KKwordm9pZCBE
YXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtOjpkZWxldGVJdGVtKHVuc2lnbmVkIGxvbmcgaW5k
ZXgsIEV4Y2VwdGlvbkNvZGUmKQoreworICAgIGlmIChpbmRleCA+PSBsZW5ndGgoKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIG1faXRlbXMucmVtb3ZlKGluZGV4KTsKK30KKwordm9pZCBEYXRhVHJh
bnNmZXJJdGVtTGlzdENocm9taXVtOjpjbGVhcigpCit7CisgICAgbV9pdGVtcy5jbGVhcigpOwor
fQorCit2b2lkIERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW06OmFkZChjb25zdCBTdHJpbmcm
IGRhdGEsIGNvbnN0IFN0cmluZyYgdHlwZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgLy8g
T25seSBvbmUgJ3N0cmluZycgaXRlbSB3aXRoIGEgZ2l2ZW4gdHlwZSBpcyBhbGxvd2VkIGluIHRo
ZSBjb2xsZWN0aW9uLgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9pdGVtcy5zaXplKCk7
ICsraSkgeworICAgICAgICBpZiAobV9pdGVtc1tpXS0+dHlwZSgpID09IHR5cGUgJiYgbV9pdGVt
c1tpXS0+a2luZCgpID09IERhdGFUcmFuc2Zlckl0ZW06OmtpbmRTdHJpbmcpIHsKKyAgICAgICAg
ICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7IC8vIEZJWE1FOiBJcyB0aGlzIHRoZSByaWdodCBl
eGNlcHRpb24gY29kZT8KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIG1faXRlbXMuYXBwZW5kKERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bTo6Y3JlYXRlKGRhdGEs
IHR5cGUpKTsKK30KKworRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bTo6RGF0YVRyYW5zZmVy
SXRlbUxpc3RDaHJvbWl1bSgpCiB7Ci0gICAgbV9pdGVtcy5hcHBlbmQoRGF0YVRyYW5zZmVySXRl
bUNocm9taXVtOjpjcmVhdGVGcm9tUGFzdGVib2FyZChtX293bmVyLCBtX2NvbnRleHQsIHR5cGUp
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1
bS5oCmluZGV4IGEzMzIxYjVhZDM5ZDQ1ZmI0NmRlNGVjZThhYmMxYmRkMzYyZjNhMGUuLjQ2ZWVh
Y2FhMjA4MTdhYjEwNGMwMDY4OWJkYmZjNDAxZTc2ZDMxM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0uaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EYXRhVHJhbnNmZXJJdGVtTGlz
dENocm9taXVtLmgKQEAgLTMzLDI4ICszMywzMSBAQAogCiAjaWYgRU5BQkxFKERBVEFfVFJBTlNG
RVJfSVRFTVMpCiAKLSNpbmNsdWRlICJEYXRhVHJhbnNmZXJJdGVtTGlzdC5oIgorI2luY2x1ZGUg
IkRhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bS5oIgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBDbGlwYm9hcmQ7Ci1jbGFzcyBEYXRhVHJhbnNmZXJJ
dGVtQ2hyb21pdW07Ci1jbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwotCiB0eXBlZGVmIGlu
dCBFeGNlcHRpb25Db2RlOwogCi1jbGFzcyBEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtIDog
cHVibGljIERhdGFUcmFuc2Zlckl0ZW1MaXN0IHsKK2NsYXNzIERhdGFUcmFuc2Zlckl0ZW1MaXN0
Q2hyb21pdW0gOiBwdWJsaWMgUmVmQ291bnRlZDxEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVt
PiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUxpc3RD
aHJvbWl1bT4gY3JlYXRlKFBhc3NSZWZQdHI8Q2xpcGJvYXJkPiwgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21p
dW0+IGNyZWF0ZSgpOwogCi1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBDbGlwYm9hcmRDaHJv
bWl1bTsKKyAgICB2aXJ0dWFsIH5EYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtKCk7CiAKLSAg
ICBEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtKFBhc3NSZWZQdHI8Q2xpcGJvYXJkPiwgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCopOworICAgIHZpcnR1YWwgc2l6ZV90IGxlbmd0aCgpIGNvbnN0
OworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0+IGl0ZW0o
dW5zaWduZWQgbG9uZyBpbmRleCk7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUl0ZW0odW5zaWdu
ZWQgbG9uZyBpbmRleCwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZpcnR1YWwgdm9pZCBjbGVhcigp
OworICAgIHZpcnR1YWwgdm9pZCBhZGQoY29uc3QgU3RyaW5nJiBkYXRhLCBjb25zdCBTdHJpbmcm
IHR5cGUsIEV4Y2VwdGlvbkNvZGUmKTsKKworcHJpdmF0ZToKKyAgICBEYXRhVHJhbnNmZXJJdGVt
TGlzdENocm9taXVtKCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRkUGFzdGVib2FyZEl0ZW0oY29u
c3QgU3RyaW5nJiB0eXBlKTsKKyAgICBWZWN0b3I8UmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1DaHJv
bWl1bT4gPiBtX2l0ZW1zOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRHJhZ0RhdGEuY3BwIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViRHJhZ0RhdGEuY3BwCmluZGV4IDVjMzEyMzkxOGFmNjNmZTgx
NTQzMzBmZGZmMjUyYWU3MWNjMWU5NGEuLjQ0ZmM4ZTI2ZjFlNmUwYTBkZWJlOTFjNTFmMmFkZTY3
NGNhZTFlN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRyYWdE
YXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEcmFnRGF0YS5jcHAK
QEAgLTIyMyw5ICsyMjMsMTAgQEAgV2ViVmVjdG9yPFdlYkRyYWdEYXRhOjpDdXN0b21EYXRhPiBX
ZWJEcmFnRGF0YTo6Y3VzdG9tRGF0YSgpIGNvbnN0CiB2b2lkIFdlYkRyYWdEYXRhOjpzZXRDdXN0
b21EYXRhKGNvbnN0IFdlYlZlY3RvcjxXZWJEcmFnRGF0YTo6Q3VzdG9tRGF0YT4mIGN1c3RvbURh
dGEpCiB7CiAgICAgZW5zdXJlTXV0YWJsZSgpOwotICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+
JiBjdXN0b21EYXRhTWFwID0gbV9wcml2YXRlLT5jdXN0b21EYXRhKCk7CisgICAgSGFzaE1hcDxT
dHJpbmcsIFN0cmluZz4gY3VzdG9tRGF0YU1hcDsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGN1c3RvbURhdGEuc2l6ZSgpOyArK2kpCiAgICAgICAgIGN1c3RvbURhdGFNYXAuc2V0KGN1c3Rv
bURhdGFbaV0udHlwZSwgY3VzdG9tRGF0YVtpXS5kYXRhKTsKKyAgICBtX3ByaXZhdGUtPnNldEN1
c3RvbURhdGEoY3VzdG9tRGF0YU1hcCk7CiB9CiAKIFdlYkRyYWdEYXRhOjpXZWJEcmFnRGF0YShj
b25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0PiYgZGF0YSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123271</attachid>
            <date>2012-01-20 01:55:19 -0800</date>
            <delta_ts>2012-01-23 22:05:58 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76598-20120120015518.patch</filename>
            <type>text/plain</type>
            <size>72492</size>
            <attacher name="Daniel Cheng">dcheng</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1MjI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2FjYzFlNzRjN2QzMjRm
ZTBjNDM1MjVmZWViZTk4ZjZjZDliZWNmMy4uMDAxZDNjYmViMWYwNDBiNDY2NWJlOGZmYzA1ODk2
MzBlYzlhOTg1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc1IEBACisyMDEyLTAxLTE4ICBEYW5p
ZWwgQ2hlbmcgIDxkY2hlbmdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gUmVm
YWN0b3IgQ2xpcGJvYXJkQ2hyb21pdW0gYW5kIERhdGFUcmFuc2Zlckl0ZW1MaXN0L0RhdGFUcmFu
c2Zlckl0ZW0gdG8gc3VwcG9ydCBIVE1MIHNwZWMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTc2NTk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiAoT09QUyEpCisKKyAgICAgICAgKiBX
ZWJDb3JlLmd5cGk6CisgICAgICAgICogZG9tL0RhdGFUcmFuc2Zlckl0ZW0uY3BwOgorICAgICAg
ICAqIGRvbS9EYXRhVHJhbnNmZXJJdGVtLmg6CisgICAgICAgICogZG9tL0RhdGFUcmFuc2Zlckl0
ZW1MaXN0LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBkb20vRGF0YVRyYW5zZmVySXRlbUxpc3Qu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjppdGVtcyk6CisgICAgICAgIChX
ZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OmNsZWFyRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpDaHJvbWl1bURhdGFPYmplY3Q6OmNsZWFyQWxsKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9t
aXVtRGF0YU9iamVjdDo6Y2xlYXJBbGxFeGNlcHRGaWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpD
aHJvbWl1bURhdGFPYmplY3Q6Omhhc0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1E
YXRhT2JqZWN0Ojp0eXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6
OmdldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpzZXREYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6dXJsVGl0bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpzZXRVcmxUaXRsZSk6CisgICAgICAg
IChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6Omh0bWxCYXNlVXJsKToKKyAgICAgICAgKFdl
YkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6c2V0SHRtbEJhc2VVcmwpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0Ojpjb250YWluc0ZpbGVuYW1lcyk6CisgICAgICAgIChX
ZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OmZpbGVuYW1lcyk6CisgICAgICAgIChXZWJDb3Jl
OjpDaHJvbWl1bURhdGFPYmplY3Q6OnNldEZpbGVuYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpD
aHJvbWl1bURhdGFPYmplY3Q6OmZpbGVFeHRlbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q2hy
b21pdW1EYXRhT2JqZWN0OjpzZXRGaWxlRXh0ZW5zaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNo
cm9taXVtRGF0YU9iamVjdDo6ZmlsZUNvbnRlbnRGaWxlbmFtZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDaHJvbWl1bURhdGFPYmplY3Q6OnNldEZpbGVDb250ZW50RmlsZW5hbWUpOgorICAgICAgICAo
V2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpmaWxlQ29udGVudCk6CisgICAgICAgIChXZWJD
b3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OnNldEZpbGVDb250ZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkNocm9taXVtRGF0YU9iamVjdDo6Y3VzdG9tRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpD
aHJvbWl1bURhdGFPYmplY3Q6OnNldEN1c3RvbURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2hy
b21pdW1EYXRhT2JqZWN0OjpDaHJvbWl1bURhdGFPYmplY3QpOgorICAgICAgICAqIHBsYXRmb3Jt
L2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5oOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9t
aXVtL0NsaXBib2FyZENocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENo
cm9taXVtOjpjbGVhckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkQ2hyb21pdW06
OmNsZWFyQWxsRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRDaHJvbWl1bTo6Z2V0
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRDaHJvbWl1bTo6c2V0RGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRDaHJvbWl1bTo6dHlwZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2xpcGJvYXJkQ2hyb21pdW06OmZpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBi
b2FyZENocm9taXVtOjpoYXNEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENocm9t
aXVtOjppdGVtcyk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21p
dW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENocm9taXVtOjpmcmFtZSk6CisgICAg
ICAgICogcGxhdGZvcm0vY2hyb21pdW0vRGF0YVRyYW5zZmVySXRlbUNocm9taXVtLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkRhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bTo6Y3JlYXRlRnJvbVBhc3Rl
Ym9hcmQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YVRyYW5zZmVySXRlbUNocm9taXVtOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YVRyYW5zZmVySXRlbUNocm9taXVtOjp+RGF0YVRy
YW5zZmVySXRlbUNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFUcmFuc2Zlckl0ZW1D
aHJvbWl1bTo6RGF0YVRyYW5zZmVySXRlbUNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGFUcmFuc2Zlckl0ZW1DaHJvbWl1bTo6Z2V0QXNTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
RGF0YVRyYW5zZmVySXRlbUNocm9taXVtOjpnZXRBc0ZpbGUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2Nocm9taXVtL0RhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6
RGF0YVRyYW5zZmVySXRlbUNocm9taXVtOjpraW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFU
cmFuc2Zlckl0ZW1DaHJvbWl1bTo6dHlwZSk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0v
RGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRh
VHJhbnNmZXJJdGVtTGlzdENocm9taXVtOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0
YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bTo6fkRhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0p
OgorICAgICAgICAoV2ViQ29yZTo6RGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bTo6bGVuZ3Ro
KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW06Oml0ZW0p
OgorICAgICAgICAoV2ViQ29yZTo6RGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bTo6ZGVsZXRl
SXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtOjpj
bGVhcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtOjph
ZGQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bTo6RGF0
YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bSk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0v
RGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bS5oOgorCiAyMDEyLTAxLTE3ICBOYXRlIENoYXBp
biAgPGphcGhldEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgRW5zdXJlIHdlIGRvbid0IGNhbmNl
bCByZXZhbGlkYXRpb24gb2YgYSBDYWNoZWRSZXNvdXJjZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZwppbmRleCA5MTdmZTEyZmFhZThkZjRhNWI5YTg2OWNhNTU0YTQ1MGMwYWIwY2FjLi4xZTcwYmY3
ZTRjYzRhNDk4MzQwMDUxNzA5MDlkMTE0MDM0YTAwMzZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDEyLTAxLTE4ICBEYW5pZWwgQ2hlbmcgIDxkY2hlbmdA
Y2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gUmVmYWN0b3IgQ2xpcGJvYXJkQ2hy
b21pdW0gYW5kIERhdGFUcmFuc2Zlckl0ZW1MaXN0L0RhdGFUcmFuc2Zlckl0ZW0gdG8gc3VwcG9y
dCBIVE1MIHNwZWMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTc2NTk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBzcmMvV2ViRHJhZ0RhdGEuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFnRGF0YTo6
c2V0Q3VzdG9tRGF0YSk6CisKIDIwMTItMDEtMTcgIFl1cnkgU2VtaWtoYXRza3kgIDx5dXJ5c0Bj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gVXBkYXRlIENocm9taXVtIGRlcGVu
ZGVuY3kgMTE3NjE2OjExNzg4MgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDZhZjNkYTExNGVjMmU5YjVm
NGMzN2E5ZDgzNTMyMWQwN2ZlMGM4OWQuLjQ5ZTdhMWM2ZDI0YTAzYmQ1M2ViYmNlMDkyNDY1OWUx
ZDU2N2MzMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTUzMzMsNyArNTMzMyw2IEBACiAgICAgICAg
ICAgICAnZG9tL0RPTVN0cmluZ01hcC5oJywKICAgICAgICAgICAgICdkb20vRGF0YVRyYW5zZmVy
SXRlbS5jcHAnLAogICAgICAgICAgICAgJ2RvbS9EYXRhVHJhbnNmZXJJdGVtLmgnLAotICAgICAg
ICAgICAgJ2RvbS9EYXRhVHJhbnNmZXJJdGVtTGlzdC5jcHAnLAogICAgICAgICAgICAgJ2RvbS9E
YXRhVHJhbnNmZXJJdGVtTGlzdC5oJywKICAgICAgICAgICAgICdkb20vRGF0YXNldERPTVN0cmlu
Z01hcC5jcHAnLAogICAgICAgICAgICAgJ2RvbS9EYXRhc2V0RE9NU3RyaW5nTWFwLmgnLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RhdGFUcmFuc2Zlckl0ZW0uY3BwIGIvU291cmNl
L1dlYkNvcmUvZG9tL0RhdGFUcmFuc2Zlckl0ZW0uY3BwCmluZGV4IDZjNzNlYjBkY2JlOTkyMDdh
ZTdlNzZmYzNjODIzMzJjOGNiODI5ODcuLjhlZWM4NjkyYWYxZmJkYmQ1MmI5OGU0YTZkNWI5NzI4
M2QxNjUyNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9EYXRhVHJhbnNmZXJJdGVt
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRGF0YVRyYW5zZmVySXRlbS5jcHAKQEAgLTMx
LDggKzMxLDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJEYXRhVHJhbnNmZXJJ
dGVtLmgiCiAKLSNpbmNsdWRlICJDbGlwYm9hcmQuaCIKLQogI2lmIEVOQUJMRShEQVRBX1RSQU5T
RkVSX0lURU1TKQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00MCwzNSArMzgsNiBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiBjb25zdCBjaGFyIERhdGFUcmFuc2Zlckl0ZW06OmtpbmRTdHJpbmdb
XSA9ICJzdHJpbmciOwogY29uc3QgY2hhciBEYXRhVHJhbnNmZXJJdGVtOjpraW5kRmlsZVtdID0g
ImZpbGUiOwogCi1EYXRhVHJhbnNmZXJJdGVtOjpEYXRhVHJhbnNmZXJJdGVtKFBhc3NSZWZQdHI8
Q2xpcGJvYXJkPiBvd25lciwgY29uc3QgU3RyaW5nJiBraW5kLCBjb25zdCBTdHJpbmcmIHR5cGUp
Ci0gICAgOiBtX293bmVyKG93bmVyKQotICAgICwgbV9raW5kKGtpbmQpCi0gICAgLCBtX3R5cGUo
dHlwZSkKLXsKLX0KLQotQ2xpcGJvYXJkKiBEYXRhVHJhbnNmZXJJdGVtOjpvd25lcigpCi17Ci0g
ICAgcmV0dXJuIG1fb3duZXIuZ2V0KCk7Ci19Ci0KLVN0cmluZyBEYXRhVHJhbnNmZXJJdGVtOjpr
aW5kKCkgY29uc3QKLXsKLSAgICBpZiAobV9vd25lci0+cG9saWN5KCkgPT0gQ2xpcGJvYXJkTnVt
YikKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgcmV0dXJuIG1fa2luZDsKLX0KLQot
U3RyaW5nIERhdGFUcmFuc2Zlckl0ZW06OnR5cGUoKSBjb25zdAotewotICAgIGlmIChtX293bmVy
LT5wb2xpY3koKSA9PSBDbGlwYm9hcmROdW1iKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0K
LSAgICByZXR1cm4gbV90eXBlOwotfQotCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2Vu
ZGlmIC8vIEVOQUJMRShEQVRBX1RSQU5TRkVSX0lURU1TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL0RhdGFUcmFuc2Zlckl0ZW0uaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9EYXRhVHJh
bnNmZXJJdGVtLmgKaW5kZXggNzRjMjViNzk5YmIwNjVhOWE5NGQzYTQ4ZDEyODg1NDI0ZjBmNDg4
ZS4uNzc2ZDRjZjIzOWFiMzJkZDVjOGNjMzY3NzBlNTE2YThiODgxNGNiMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL0RhdGFUcmFuc2Zlckl0ZW0uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRGF0YVRyYW5zZmVySXRlbS5oCkBAIC00OCwyNSArNDgsMTQgQEAgY2xhc3MgRGF0YVRy
YW5zZmVySXRlbSA6IHB1YmxpYyBSZWZDb3VudGVkPERhdGFUcmFuc2Zlckl0ZW0+IHsKIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIH5EYXRhVHJhbnNmZXJJdGVtKCkgeyB9CiAKLSAgICBzdGF0aWMgUGFz
c1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtPiBjcmVhdGUoUGFzc1JlZlB0cjxDbGlwYm9hcmQ+IG93
bmVyLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBkYXRhLCBjb25zdCBT
dHJpbmcmIHR5cGUpOwotCiAgICAgc3RhdGljIGNvbnN0IGNoYXIga2luZFN0cmluZ1tdOwogICAg
IHN0YXRpYyBjb25zdCBjaGFyIGtpbmRGaWxlW107CiAKLSAgICBTdHJpbmcga2luZCgpIGNvbnN0
OwotICAgIFN0cmluZyB0eXBlKCkgY29uc3Q7CisgICAgdmlydHVhbCBTdHJpbmcga2luZCgpIGNv
bnN0ID0gMDsKKyAgICB2aXJ0dWFsIFN0cmluZyB0eXBlKCkgY29uc3QgPSAwOwogCiAgICAgdmly
dHVhbCB2b2lkIGdldEFzU3RyaW5nKFBhc3NSZWZQdHI8U3RyaW5nQ2FsbGJhY2s+KSA9IDA7CiAg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPEJsb2I+IGdldEFzRmlsZSgpID0gMDsKLQotcHJvdGVjdGVk
OgotICAgIERhdGFUcmFuc2Zlckl0ZW0oUGFzc1JlZlB0cjxDbGlwYm9hcmQ+IG93bmVyLCBjb25z
dCBTdHJpbmcmIGtpbmQsIGNvbnN0IFN0cmluZyYgdHlwZSk7Ci0gICAgQ2xpcGJvYXJkKiBvd25l
cigpOwotCi1wcml2YXRlOgotICAgIGNvbnN0IFJlZlB0cjxDbGlwYm9hcmQ+IG1fb3duZXI7Ci0g
ICAgY29uc3QgU3RyaW5nIG1fa2luZDsKLSAgICBjb25zdCBTdHJpbmcgbV90eXBlOwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0Rh
dGFUcmFuc2Zlckl0ZW1MaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9EYXRhVHJhbnNmZXJJ
dGVtTGlzdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1ZmVhY2FjZjRmMjMz
ZmVlZmVkMzBmNDk2ODNlNzlkZjdkNzY4ZjQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RhdGFUcmFuc2Zlckl0ZW1MaXN0
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEwNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3Ry
aWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIkRhdGFUcmFuc2Zlckl0ZW1MaXN0LmgiCi0KLSNpbmNsdWRl
ICJEYXRhVHJhbnNmZXJJdGVtLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotCi0jaWYg
RU5BQkxFKERBVEFfVFJBTlNGRVJfSVRFTVMpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotRGF0
YVRyYW5zZmVySXRlbUxpc3Q6OkRhdGFUcmFuc2Zlckl0ZW1MaXN0KFBhc3NSZWZQdHI8Q2xpcGJv
YXJkPiBjbGlwYm9hcmQsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCi0gICAgOiBt
X293bmVyKGNsaXBib2FyZCkKLSAgICAsIG1fY29udGV4dChjb250ZXh0KQotewotfQotCi1zaXpl
X3QgRGF0YVRyYW5zZmVySXRlbUxpc3Q6Omxlbmd0aCgpIGNvbnN0Ci17Ci0gICAgaWYgKG1fb3du
ZXItPnBvbGljeSgpID09IENsaXBib2FyZE51bWIpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAg
cmV0dXJuIG1faXRlbXMuc2l6ZSgpOwotfQotCi1QYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW0+
IERhdGFUcmFuc2Zlckl0ZW1MaXN0OjppdGVtKHVuc2lnbmVkIGxvbmcgaW5kZXgpCi17Ci0gICAg
aWYgKG1fb3duZXItPnBvbGljeSgpID09IENsaXBib2FyZE51bWIgfHwgaW5kZXggPj0gbGVuZ3Ro
KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIG1faXRlbXNbaW5kZXhdOwotfQot
Ci12b2lkIERhdGFUcmFuc2Zlckl0ZW1MaXN0OjpkZWxldGVJdGVtKHVuc2lnbmVkIGxvbmcgaW5k
ZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGlmIChtX293bmVyLT5wb2xpY3koKSAhPSBD
bGlwYm9hcmRXcml0YWJsZSkgewotICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGluZGV4ID49IGxlbmd0aCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBtX2l0ZW1zLnJlbW92ZShpbmRleCk7Ci19Ci0KLXZvaWQgRGF0YVRy
YW5zZmVySXRlbUxpc3Q6OmNsZWFyKCkKLXsKLSAgICBpZiAobV9vd25lci0+cG9saWN5KCkgIT0g
Q2xpcGJvYXJkV3JpdGFibGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1faXRlbXMuY2xlYXIo
KTsKLQotfQotCi12b2lkIERhdGFUcmFuc2Zlckl0ZW1MaXN0OjphZGQoY29uc3QgU3RyaW5nJiBk
YXRhLCBjb25zdCBTdHJpbmcmIHR5cGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGlmICht
X293bmVyLT5wb2xpY3koKSAhPSBDbGlwYm9hcmRXcml0YWJsZSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgLy8gT25seSBvbmUgJ3N0cmluZycgaXRlbSB3aXRoIGEgZ2l2ZW4gdHlwZSBpcyBhbGxv
d2VkIGluIHRoZSBjb2xsZWN0aW9uLgotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9pdGVt
cy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAobV9pdGVtc1tpXS0+dHlwZSgpID09IHR5cGUg
JiYgbV9pdGVtc1tpXS0+a2luZCgpID09IERhdGFUcmFuc2Zlckl0ZW06OmtpbmRTdHJpbmcpIHsK
LSAgICAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtX2l0ZW1zLmFwcGVuZChEYXRhVHJhbnNmZXJJdGVt
OjpjcmVhdGUobV9vd25lciwgbV9jb250ZXh0LCBkYXRhLCB0eXBlKSk7Ci19Ci0KLX0KLQotI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRGF0YVRyYW5zZmVySXRlbUxpc3Qu
aCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9EYXRhVHJhbnNmZXJJdGVtTGlzdC5oCmluZGV4IGVmMzE4
ZTkyZDk1OGQ5YWIwYjYwYTQzZmMxYTM5NWEyMmY4ZDY1MTkuLmQ2N2I3NWI0ZWNmNmRlZTg0OGFi
ZWEzZmY2ODE2ZGQxZTU4NDNiNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9EYXRh
VHJhbnNmZXJJdGVtTGlzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9EYXRhVHJhbnNmZXJJ
dGVtTGlzdC5oCkBAIC00NywyMSArNDcsMTEgQEAgY2xhc3MgRGF0YVRyYW5zZmVySXRlbUxpc3Qg
OiBwdWJsaWMgUmVmQ291bnRlZDxEYXRhVHJhbnNmZXJJdGVtTGlzdD4gewogcHVibGljOgogICAg
IHZpcnR1YWwgfkRhdGFUcmFuc2Zlckl0ZW1MaXN0KCkgeyB9CiAKLSAgICB2aXJ0dWFsIHNpemVf
dCBsZW5ndGgoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RGF0YVRyYW5zZmVySXRl
bT4gaXRlbSh1bnNpZ25lZCBsb25nIGluZGV4KTsKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSXRl
bSh1bnNpZ25lZCBsb25nIGluZGV4LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdmlydHVhbCB2b2lk
IGNsZWFyKCk7Ci0gICAgdmlydHVhbCB2b2lkIGFkZChjb25zdCBTdHJpbmcmIGRhdGEsIGNvbnN0
IFN0cmluZyYgdHlwZSwgRXhjZXB0aW9uQ29kZSYpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgRGF0YVRy
YW5zZmVySXRlbUxpc3QoUGFzc1JlZlB0cjxDbGlwYm9hcmQ+LCBTY3JpcHRFeGVjdXRpb25Db250
ZXh0Kik7Ci0KLXByb3RlY3RlZDoKLSAgICBSZWZQdHI8Q2xpcGJvYXJkPiBtX293bmVyOwotICAg
IC8vIEluZGlyZWN0bHkgb3duZWQgYnkgb3VyIHBhcmVudC4KLSAgICBTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBtX2NvbnRleHQ7Ci0gICAgVmVjdG9yPFJlZlB0cjxEYXRhVHJhbnNmZXJJdGVtPiA+
IG1faXRlbXM7Ci0KKyAgICB2aXJ0dWFsIHNpemVfdCBsZW5ndGgoKSBjb25zdCA9IDA7CisgICAg
dmlydHVhbCBQYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW0+IGl0ZW0odW5zaWduZWQgbG9uZyBp
bmRleCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVJdGVtKHVuc2lnbmVkIGxvbmcgaW5k
ZXgsIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyKCkgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBhZGQoY29uc3QgU3RyaW5nJiBkYXRhLCBjb25zdCBTdHJpbmcmIHR5
cGUsIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFP
YmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRh
T2JqZWN0LmNwcAppbmRleCAwNWM1ZTEzMGNjZWJmNTYxNDk2MjY2YWExYzU4ZmVmZjQ0NWY0ODk2
Li4xMWYzMGQwYTdjNjc3NWNmYTVkOGNlYThkZDFjODAxYzBkOTVmZjE2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5j
cHAKQEAgLTMzLDIyNCArMzMsMjM1IEBACiAKICNpbmNsdWRlICJDbGlwYm9hcmRNaW1lVHlwZXMu
aCIKICNpbmNsdWRlICJDbGlwYm9hcmRVdGlsaXRpZXNDaHJvbWl1bS5oIgorI2luY2x1ZGUgIkRh
dGFUcmFuc2Zlckl0ZW0uaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlUGxhY2Vob2xkZXIuaCIK
ICNpbmNsdWRlICJQYXN0ZWJvYXJkLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdXBwb3J0LmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotLy8gUGVyIFJGQyAyNDgzLCB0aGUgbGluZSBzZXBhcmF0
b3IgZm9yICJ0ZXh0Ly4uLiIgTUlNRSB0eXBlcyBpcyBDUi1MRi4KLXN0YXRpYyBjaGFyIGNvbnN0
KiBjb25zdCB0ZXh0TUlNRVR5cGVMaW5lU2VwYXJhdG9yID0gIlxyXG4iOworbmFtZXNwYWNlIHsK
IAotdm9pZCBDaHJvbWl1bURhdGFPYmplY3Q6OmNsZWFyRGF0YShjb25zdCBTdHJpbmcmIHR5cGUp
CitQYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bT4gZmluZEl0ZW0oCisgICAgUGFz
c1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtPiBsaXN0LCBjb25zdCBTdHJpbmcm
IGtpbmQsIGNvbnN0IFN0cmluZyYgdHlwZSkKIHsKLSAgICBpZiAodHlwZSA9PSBtaW1lVHlwZVRl
eHRQbGFpbikgewotICAgICAgICBtX3BsYWluVGV4dCA9ICIiOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdC0+bGVuZ3RoKCk7ICsraSkKKyAg
ICAgICAgaWYgKGxpc3QtPml0ZW0oaSktPmtpbmQoKSA9PSBraW5kICYmIGxpc3QtPml0ZW0oaSkt
PnR5cGUoKSA9PSB0eXBlKQorICAgICAgICAgICAgcmV0dXJuIGxpc3QtPml0ZW0oaSk7CisgICAg
cmV0dXJuIDA7Cit9CiAKLSAgICBpZiAodHlwZSA9PSBtaW1lVHlwZVVSTCB8fCB0eXBlID09IG1p
bWVUeXBlVGV4dFVSSUxpc3QpIHsKLSAgICAgICAgbV91cmlMaXN0ID0gIiI7Ci0gICAgICAgIG1f
dXJsID0gS1VSTCgpOwotICAgICAgICBtX3VybFRpdGxlID0gIiI7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Cit9IC8vIG5hbWVzcGFjZQogCi0gICAgaWYgKHR5cGUgPT0gbWltZVR5cGVUZXh0SFRN
TCkgewotICAgICAgICBtX3RleHRIdG1sID0gIiI7Ci0gICAgICAgIG1faHRtbEJhc2VVcmwgPSBL
VVJMKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisvLyBQZXIgUkZDIDI0ODMsIHRoZSBsaW5l
IHNlcGFyYXRvciBmb3IgInRleHQvLi4uIiBNSU1FIHR5cGVzIGlzIENSLUxGLgorc3RhdGljIGNo
YXIgY29uc3QqIGNvbnN0IHRleHRNSU1FVHlwZUxpbmVTZXBhcmF0b3IgPSAiXHJcbiI7CiAKLSAg
ICBpZiAodHlwZSA9PSBtaW1lVHlwZURvd25sb2FkVVJMKSB7Ci0gICAgICAgIG1fZG93bmxvYWRN
ZXRhZGF0YSA9ICIiOwotICAgICAgICByZXR1cm47Ci0gICAgfQorUGFzc1JlZlB0cjxEYXRhVHJh
bnNmZXJJdGVtTGlzdENocm9taXVtPiBDaHJvbWl1bURhdGFPYmplY3Q6Oml0ZW1zKCkgY29uc3QK
K3sKKyAgICAvLyBGSVhNRTogTmVlZCB0byBwb3B1bGF0ZSBtX2l0ZW1zIHBlcmlvZC4gVGhlIGxh
enkgYml0IGlzIG5vdyBpbiB0aGUgUGFzdGVib2FyZCBpbXBsLgorICAgIC8vIEZJWE1FOiBOZWVk
IHRvIGxhemlseSBwb3B1bGF0ZSBtX2l0ZW1zIGhlcmUuCisgICAgcmV0dXJuIG1faXRlbXM7CiB9
CiAKLXZvaWQgQ2hyb21pdW1EYXRhT2JqZWN0OjpjbGVhckFsbCgpCit2b2lkIENocm9taXVtRGF0
YU9iamVjdDo6Y2xlYXJEYXRhKGNvbnN0IFN0cmluZyYgdHlwZSkKIHsKLSAgICBjbGVhckFsbEV4
Y2VwdEZpbGVzKCk7Ci0gICAgbV9maWxlbmFtZXMuY2xlYXIoKTsKKyAgICBSZWZQdHI8RGF0YVRy
YW5zZmVySXRlbUxpc3RDaHJvbWl1bT4gbGlzdCA9IGl0ZW1zKCk7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBsaXN0LT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgIGlmIChsaXN0LT5pdGVt
KGkpLT5raW5kKCkgPT0gRGF0YVRyYW5zZmVySXRlbTo6a2luZFN0cmluZyAmJiBsaXN0LT5pdGVt
KGkpLT50eXBlKCkgPT0gdHlwZSkgeworICAgICAgICAgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBz
cGVjLCB0eXBlIG11c3QgYmUgdW5pcXVlIGFtb25nIGFsbCBpdGVtcyBvZiBraW5kICdzdHJpbmcn
LCBzbyB3ZQorICAgICAgICAgICAgLy8gY2FuIHJldHVybiBhcyBzb29uIGFzIHdlIGZpbmQgYW4g
aXRlbSB0aGF0IG1hdGNoZXMuCisgICAgICAgICAgICBsaXN0LT5kZWxldGVJdGVtKGkpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQogfQogCi12b2lkIENocm9taXVtRGF0
YU9iamVjdDo6Y2xlYXJBbGxFeGNlcHRGaWxlcygpCit2b2lkIENocm9taXVtRGF0YU9iamVjdDo6
Y2xlYXJBbGwoKQogewotICAgIG1fdXJsVGl0bGUgPSAiIjsKLSAgICBtX3VybCA9IEtVUkwoKTsK
LSAgICBtX3VyaUxpc3QgPSAiIjsKLSAgICBtX2Rvd25sb2FkTWV0YWRhdGEgPSAiIjsKLSAgICBt
X2ZpbGVFeHRlbnNpb24gPSAiIjsKLSAgICBtX3BsYWluVGV4dCA9ICIiOwotICAgIG1fdGV4dEh0
bWwgPSAiIjsKLSAgICBtX2h0bWxCYXNlVXJsID0gS1VSTCgpOwotICAgIG1fZmlsZUNvbnRlbnRG
aWxlbmFtZSA9ICIiOwotICAgIGlmIChtX2ZpbGVDb250ZW50KQotICAgICAgICBtX2ZpbGVDb250
ZW50LT5jbGVhcigpOworICAgIGl0ZW1zKCktPmNsZWFyKCk7CiB9CiAKLWJvb2wgQ2hyb21pdW1E
YXRhT2JqZWN0OjpoYXNEYXRhKCkgY29uc3QKK3ZvaWQgQ2hyb21pdW1EYXRhT2JqZWN0OjpjbGVh
ckFsbEV4Y2VwdEZpbGVzKCkKIHsKLSAgICByZXR1cm4gIW1fdXJsLmlzRW1wdHkoKQotICAgICAg
ICB8fCAhbV91cmlMaXN0LmlzRW1wdHkoKQotICAgICAgICB8fCAhbV9kb3dubG9hZE1ldGFkYXRh
LmlzRW1wdHkoKQotICAgICAgICB8fCAhbV9maWxlRXh0ZW5zaW9uLmlzRW1wdHkoKQotICAgICAg
ICB8fCAhbV9maWxlbmFtZXMuaXNFbXB0eSgpCi0gICAgICAgIHx8ICFtX3BsYWluVGV4dC5pc0Vt
cHR5KCkKLSAgICAgICAgfHwgIW1fdGV4dEh0bWwuaXNFbXB0eSgpCi0gICAgICAgIHx8IG1fZmls
ZUNvbnRlbnQ7CisgICAgUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0+IGxpc3Qg
PSBpdGVtcygpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdC0+bGVuZ3RoKCk7ICkg
eworICAgICAgICBpZiAobGlzdC0+aXRlbShpKS0+a2luZCgpID09IERhdGFUcmFuc2Zlckl0ZW06
OmtpbmRTdHJpbmcpIHsKKyAgICAgICAgICAgIGxpc3QtPmRlbGV0ZUl0ZW0oaSk7CisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICArK2k7CisgICAgfQogfQogCiBIYXNo
U2V0PFN0cmluZz4gQ2hyb21pdW1EYXRhT2JqZWN0Ojp0eXBlcygpIGNvbnN0CiB7Ci0gICAgaWYg
KG1fc3RvcmFnZU1vZGUgPT0gUGFzdGVib2FyZCkgewotICAgICAgICBib29sIGlnbm9yZWRDb250
YWluc0ZpbGVuYW1lczsKLSAgICAgICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJvYXJk
UmVhZEF2YWlsYWJsZVR5cGVzKGN1cnJlbnRQYXN0ZWJvYXJkQnVmZmVyKCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaWdub3Jl
ZENvbnRhaW5zRmlsZW5hbWVzKTsKKyAgICBIYXNoU2V0PFN0cmluZz4gcmVzdWx0czsKKyAgICBi
b29sIGNvbnRhaW5zRmlsZXMgPSBmYWxzZTsKKyAgICBSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUxp
c3RDaHJvbWl1bT4gbGlzdCA9IGl0ZW1zKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBs
aXN0LT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgIGlmIChsaXN0LT5pdGVtKGkpLT5raW5kKCkg
PT0gRGF0YVRyYW5zZmVySXRlbTo6a2luZFN0cmluZykKKyAgICAgICAgICAgIHJlc3VsdHMuYWRk
KGxpc3QtPml0ZW0oaSktPnR5cGUoKSk7CisgICAgICAgIGVsc2UgaWYgKGxpc3QtPml0ZW0oaSkt
PmtpbmQoKSA9PSBEYXRhVHJhbnNmZXJJdGVtOjpraW5kRmlsZSkKKyAgICAgICAgICAgIGNvbnRh
aW5zRmlsZXMgPSB0cnVlOwogICAgIH0KKyAgICBpZiAoY29udGFpbnNGaWxlcykKKyAgICAgICAg
cmVzdWx0cy5hZGQobWltZVR5cGVGaWxlcyk7CiAKLSAgICBIYXNoU2V0PFN0cmluZz4gcmVzdWx0
czsKKyAgICByZXR1cm4gcmVzdWx0czsKK30KIAotICAgIGlmICghbV9wbGFpblRleHQuaXNFbXB0
eSgpKSB7Ci0gICAgICAgIHJlc3VsdHMuYWRkKG1pbWVUeXBlVGV4dCk7Ci0gICAgICAgIHJlc3Vs
dHMuYWRkKG1pbWVUeXBlVGV4dFBsYWluKTsKK1N0cmluZyBDaHJvbWl1bURhdGFPYmplY3Q6Omdl
dERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBib29sJiBzdWNjZXNzKSBjb25zdAoreworICAgIFJl
ZlB0cjxEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtPiBsaXN0ID0gaXRlbXMoKTsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGxpc3QtPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgaWYg
KGxpc3QtPml0ZW0oaSktPmtpbmQoKSA9PSBEYXRhVHJhbnNmZXJJdGVtOjpraW5kU3RyaW5nCisg
ICAgICAgICAgICAmJiBsaXN0LT5pdGVtKGkpLT50eXBlKCkgPT0gdHlwZSkgeworICAgICAgICAg
ICAgc3VjY2VzcyA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gbGlzdC0+aXRlbShpKS0+bGVn
YWN5R2V0QXNTdHJpbmcoKTsKKyAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChtX3VybC5pc1Zh
bGlkKCkpCi0gICAgICAgIHJlc3VsdHMuYWRkKG1pbWVUeXBlVVJMKTsKLQotICAgIGlmICghbV91
cmlMaXN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmVzdWx0cy5hZGQobWltZVR5cGVUZXh0VVJJTGlz
dCk7CisgICAgcmV0dXJuIFN0cmluZygpOworfQogCi0gICAgaWYgKCFtX3RleHRIdG1sLmlzRW1w
dHkoKSkKLSAgICAgICAgcmVzdWx0cy5hZGQobWltZVR5cGVUZXh0SFRNTCk7Citib29sIENocm9t
aXVtRGF0YU9iamVjdDo6c2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYg
ZGF0YSkKK3sKKyAgICBjbGVhckRhdGEodHlwZSk7CisgICAgLy8gV2UgcmVtb3ZlZCB0aGUgb25s
eSBpdGVtIHdoZXJlIGtpbmQgPT0gJ3N0cmluZycgYW5kIG1hdGNoaW5nIHR5cGUsIHNvIGl0IHNo
b3VsZCBiZSBpbXBvc3NpYmxlCisgICAgLy8gdG8gZ2V0IGFuIGV4Y2VwdGlvbi4KKyAgICBtX2l0
ZW1zLT5hZGQoZGF0YSwgdHlwZSwgQVNTRVJUX05PX0VYQ0VQVElPTik7CisgICAgcmV0dXJuIHRy
dWU7Cit9CiAKLSAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRv
cjo6S2V5cyBpdCA9IG1fY3VzdG9tRGF0YS5iZWdpbigpLmtleXMoKTsKLSAgICAgICAgIGl0ICE9
IG1fY3VzdG9tRGF0YS5lbmQoKS5rZXlzKCk7ICsraXQpIHsKLSAgICAgICAgcmVzdWx0cy5hZGQo
Kml0KTsKK3ZvaWQgQ2hyb21pdW1EYXRhT2JqZWN0OjpnZXRVUkwoU3RyaW5nJiB1cmwsIFN0cmlu
ZyogdGl0bGUpIGNvbnN0Cit7CisgICAgUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bT4g
aXRlbSA9IGZpbmRJdGVtKGl0ZW1zKCksIERhdGFUcmFuc2Zlckl0ZW06OmtpbmRTdHJpbmcsIG1p
bWVUeXBlVGV4dFVSSUxpc3QpOworICAgIGlmIChpdGVtKSB7CisgICAgICAgIC8vIEZJWE1FOiBX
ZSBzaG91bGQgcHJvYmFibHkgaW1wbGVtZW50IGNvbnZlcnQtdG8tVVJMIGxvZ2ljIGhlcmUuCisg
ICAgICAgIHVybCA9IGl0ZW0tPmxlZ2FjeUdldEFzU3RyaW5nKCk7CisgICAgICAgIGlmICh0aXRs
ZSkKKyAgICAgICAgICAgICp0aXRsZSA9IHN0YXRpY19jYXN0PERhdGFUcmFuc2ZlclVSSUxpc3RJ
dGVtKj4oaXRlbS5nZXQoKSktPnRpdGxlKCk7CiAgICAgfQorfQogCi0gICAgcmV0dXJuIHJlc3Vs
dHM7Cit2b2lkIENocm9taXVtRGF0YU9iamVjdDo6c2V0VVJMKGNvbnN0IFN0cmluZyYgdXJsLCBj
b25zdCBTdHJpbmcmIHRpdGxlKQoreworICAgIGNsZWFyRGF0YShtaW1lVHlwZVRleHRVUklMaXN0
KTsKKyAgICBtX2l0ZW1zLT5pbnRlcm5hbEFkZFVSTCh1cmwsIHRpdGxlKTsKIH0KIAotU3RyaW5n
IENocm9taXVtRGF0YU9iamVjdDo6Z2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGJvb2wmIHN1
Y2Nlc3MpIGNvbnN0Cit2b2lkIENocm9taXVtRGF0YU9iamVjdDo6Z2V0SFRNTChTdHJpbmcmIG1h
cmt1cCwgS1VSTCYgYmFzZVVSTCkgY29uc3QKIHsKLSAgICBpZiAodHlwZSA9PSBtaW1lVHlwZVRl
eHRQbGFpbikgewotICAgICAgICBpZiAobV9zdG9yYWdlTW9kZSA9PSBQYXN0ZWJvYXJkKSB7Ci0g
ICAgICAgICAgICBTdHJpbmcgdGV4dCA9IFBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJvYXJkUmVhZFBs
YWluVGV4dChjdXJyZW50UGFzdGVib2FyZEJ1ZmZlcigpKTsKLSAgICAgICAgICAgIHN1Y2Nlc3Mg
PSAhdGV4dC5pc0VtcHR5KCk7Ci0gICAgICAgICAgICByZXR1cm4gdGV4dDsKLSAgICAgICAgfQot
ICAgICAgICBzdWNjZXNzID0gIW1fcGxhaW5UZXh0LmlzRW1wdHkoKTsKLSAgICAgICAgcmV0dXJu
IG1fcGxhaW5UZXh0OworICAgIFJlZlB0cjxEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0+IGl0ZW0g
PSBmaW5kSXRlbShpdGVtcygpLCBEYXRhVHJhbnNmZXJJdGVtOjpraW5kU3RyaW5nLCBtaW1lVHlw
ZVRleHRIVE1MKTsKKyAgICBpZiAoaXRlbSkgeworICAgICAgICBtYXJrdXAgPSBpdGVtLT5sZWdh
Y3lHZXRBc1N0cmluZygpOworICAgICAgICBiYXNlVVJMID0gc3RhdGljX2Nhc3Q8RGF0YVRyYW5z
ZmVySFRNTEl0ZW0qPihpdGVtLmdldCgpKS0+YmFzZVVSTCgpOwogICAgIH0KK30KIAotICAgIGlm
ICh0eXBlID09IG1pbWVUeXBlVVJMKSB7Ci0gICAgICAgIHN1Y2Nlc3MgPSAhbV91cmwuaXNFbXB0
eSgpOwotICAgICAgICByZXR1cm4gbV91cmwuc3RyaW5nKCk7Ci0gICAgfQordm9pZCBDaHJvbWl1
bURhdGFPYmplY3Q6OnNldEhUTUwoY29uc3QgU3RyaW5nJiBtYXJrdXAsIGNvbnN0IEtVUkwmIGJh
c2VVUkwpCit7CisgICAgY2xlYXJEYXRhKG1pbWVUeXBlVGV4dEhUTUwpOworICAgIG1faXRlbXMt
PmludGVybmFsQWRkSFRNTChtYXJrdXAsIGJhc2VVUkwpOworfQogCi0gICAgaWYgKHR5cGUgPT0g
bWltZVR5cGVUZXh0VVJJTGlzdCkgewotICAgICAgICBzdWNjZXNzID0gIW1fdXJpTGlzdC5pc0Vt
cHR5KCk7Ci0gICAgICAgIHJldHVybiBtX3VyaUxpc3Q7Ci0gICAgfQorU3RyaW5nIENocm9taXVt
RGF0YU9iamVjdDo6dXJsVGl0bGUoKSBjb25zdAoreworICAgIFJlZlB0cjxEYXRhVHJhbnNmZXJJ
dGVtQ2hyb21pdW0+IGl0ZW0gPSBmaW5kSXRlbShpdGVtcygpLCBEYXRhVHJhbnNmZXJJdGVtOjpr
aW5kU3RyaW5nLCBtaW1lVHlwZVRleHRVUklMaXN0KTsKKyAgICBpZiAoIWl0ZW0pCisgICAgICAg
IHJldHVybiBTdHJpbmcoKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RGF0YVRyYW5zZmVyVVJJ
TGlzdEl0ZW0qPihpdGVtLmdldCgpKS0+dGl0bGUoKTsKK30KIAotICAgIGlmICh0eXBlID09IG1p
bWVUeXBlVGV4dEhUTUwpIHsKLSAgICAgICAgaWYgKG1fc3RvcmFnZU1vZGUgPT0gUGFzdGVib2Fy
ZCkgewotICAgICAgICAgICAgU3RyaW5nIGh0bWxUZXh0OwotICAgICAgICAgICAgS1VSTCBzb3Vy
Y2VVUkw7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpZ25vcmVkOwotICAgICAgICAgICAgUGxhdGZv
cm1TdXBwb3J0OjpjbGlwYm9hcmRSZWFkSFRNTChjdXJyZW50UGFzdGVib2FyZEJ1ZmZlcigpLCAm
aHRtbFRleHQsICZzb3VyY2VVUkwsICZpZ25vcmVkLCAmaWdub3JlZCk7Ci0gICAgICAgICAgICBz
dWNjZXNzID0gIWh0bWxUZXh0LmlzRW1wdHkoKTsKLSAgICAgICAgICAgIHJldHVybiBodG1sVGV4
dDsKLSAgICAgICAgfQotICAgICAgICBzdWNjZXNzID0gIW1fdGV4dEh0bWwuaXNFbXB0eSgpOwot
ICAgICAgICByZXR1cm4gbV90ZXh0SHRtbDsKK3ZvaWQgQ2hyb21pdW1EYXRhT2JqZWN0OjpzZXRV
cmxUaXRsZShjb25zdCBTdHJpbmcmIHVybFRpdGxlKQoreworICAgIFJlZlB0cjxEYXRhVHJhbnNm
ZXJJdGVtQ2hyb21pdW0+IGl0ZW0gPSBmaW5kSXRlbShpdGVtcygpLCBEYXRhVHJhbnNmZXJJdGVt
OjpraW5kU3RyaW5nLCBtaW1lVHlwZVRleHRVUklMaXN0KTsKKyAgICBpZiAoIWl0ZW0pIHsKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIFRoZSBsZWdhY3kgQVBJIG5vdyBoYXMgdG8g
ZW5mb3JjZSBhbiBvcmRlcmluZy4gVWdoLgorICAgICAgICByZXR1cm47CiAgICAgfQorICAgIHN0
YXRpY19jYXN0PERhdGFUcmFuc2ZlclVSSUxpc3RJdGVtKj4oaXRlbS5nZXQoKSktPnNldFRpdGxl
KHVybFRpdGxlKTsKK30KIAotICAgIGlmICh0eXBlID09IG1pbWVUeXBlRG93bmxvYWRVUkwpIHsK
LSAgICAgICAgc3VjY2VzcyA9ICFtX2Rvd25sb2FkTWV0YWRhdGEuaXNFbXB0eSgpOwotICAgICAg
ICByZXR1cm4gbV9kb3dubG9hZE1ldGFkYXRhOwotICAgIH0KK0tVUkwgQ2hyb21pdW1EYXRhT2Jq
ZWN0OjpodG1sQmFzZVVybCgpIGNvbnN0Cit7CisgICAgUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1D
aHJvbWl1bT4gaXRlbSA9IGZpbmRJdGVtKGl0ZW1zKCksIERhdGFUcmFuc2Zlckl0ZW06OmtpbmRT
dHJpbmcsIG1pbWVUeXBlVGV4dEhUTUwpOworICAgIGlmICghaXRlbSkKKyAgICAgICAgcmV0dXJu
IEtVUkwoKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RGF0YVRyYW5zZmVySFRNTEl0ZW0qPihp
dGVtLmdldCgpKS0+YmFzZVVSTCgpOworfQogCi0gICAgaWYgKG1fc3RvcmFnZU1vZGUgPT0gUGFz
dGVib2FyZCkgewotICAgICAgICBTdHJpbmcgZGF0YSA9IFBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJv
YXJkUmVhZEN1c3RvbURhdGEoY3VycmVudFBhc3RlYm9hcmRCdWZmZXIoKSwgdHlwZSk7Ci0gICAg
ICAgIHN1Y2Nlc3MgPSAhZGF0YS5pc0VtcHR5KCk7Ci0gICAgICAgIHJldHVybiBkYXRhOwordm9p
ZCBDaHJvbWl1bURhdGFPYmplY3Q6OnNldEh0bWxCYXNlVXJsKGNvbnN0IEtVUkwmIHVybCkKK3sK
KyAgICBSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUNocm9taXVtPiBpdGVtID0gZmluZEl0ZW0oaXRl
bXMoKSwgRGF0YVRyYW5zZmVySXRlbTo6a2luZFN0cmluZywgbWltZVR5cGVUZXh0SFRNTCk7Cisg
ICAgaWYgKCFpdGVtKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBUaGUgbGVn
YWN5IEFQSSBub3cgaGFzIHRvIGVuZm9yY2UgYW4gb3JkZXJpbmcuIFVnaC4KKyAgICAgICAgcmV0
dXJuOwogICAgIH0KKyAgICBzdGF0aWNfY2FzdDxEYXRhVHJhbnNmZXJIVE1MSXRlbSo+KGl0ZW0u
Z2V0KCkpLT5zZXRCYXNlVVJMKHVybCk7Cit9CiAKLSAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5n
Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2N1c3RvbURhdGEuZmluZCh0eXBlKTsKLSAgICBpZiAo
aXQgIT0gbV9jdXN0b21EYXRhLmVuZCgpKSB7Ci0gICAgICAgIHN1Y2Nlc3MgPSB0cnVlOwotICAg
ICAgICByZXR1cm4gaXQtPnNlY29uZDsKK0hhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IENocm9taXVt
RGF0YU9iamVjdDo6Y3VzdG9tRGF0YSgpIGNvbnN0Cit7CisgICAgSGFzaE1hcDxTdHJpbmcsIFN0
cmluZz4gZGF0YTsKKyAgICBSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bT4gbGlz
dCA9IGl0ZW1zKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0LT5sZW5ndGgoKTsg
KytpKSB7CisgICAgICAgIGlmIChsaXN0LT5pdGVtKGkpLT5raW5kKCkgIT0gRGF0YVRyYW5zZmVy
SXRlbTo6a2luZFN0cmluZykKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAvLyBTa2lw
IGtub3duIE1JTUUgdHlwZXMgYXMgdGhleSBhcmVuJ3QgJ2N1c3RvbScuCisgICAgICAgIGNvbnN0
IFN0cmluZyYgdHlwZSA9IGxpc3QtPml0ZW0oaSktPnR5cGUoKTsKKyAgICAgICAgaWYgKHR5cGUg
PT0gbWltZVR5cGVUZXh0UGxhaW4gfHwgdHlwZSA9PSBtaW1lVHlwZVRleHRVUklMaXN0IHx8IHR5
cGUgPT0gbWltZVR5cGVUZXh0SFRNTCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBk
YXRhLnNldChsaXN0LT5pdGVtKGkpLT50eXBlKCksIGxpc3QtPml0ZW0oaSktPmxlZ2FjeUdldEFz
U3RyaW5nKCkpOwogICAgIH0KKyAgICByZXR1cm4gZGF0YTsKK30KIAotICAgIHN1Y2Nlc3MgPSBm
YWxzZTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Cit2b2lkIENocm9taXVtRGF0YU9iamVjdDo6c2V0
Q3VzdG9tRGF0YShjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYgZGF0YSkKK3sKKyAgICBm
b3IgKEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGRhdGEuYmVn
aW4oKTsgaXQgIT0gZGF0YS5lbmQoKTsgKytpdCkKKyAgICAgICAgc2V0RGF0YShpdC0+Zmlyc3Qs
IGl0LT5zZWNvbmQpOwogfQogCi1ib29sIENocm9taXVtRGF0YU9iamVjdDo6c2V0RGF0YShjb25z
dCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSkKK2Jvb2wgQ2hyb21pdW1EYXRhT2Jq
ZWN0Ojpjb250YWluc0ZpbGVuYW1lcygpIGNvbnN0CiB7Ci0gICAgaWYgKHR5cGUgPT0gbWltZVR5
cGVUZXh0UGxhaW4pIHsKLSAgICAgICAgbV9wbGFpblRleHQgPSBkYXRhOwotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQogCi0gICAgaWYgKHR5cGUgPT0g
bWltZVR5cGVVUkwgfHwgdHlwZSA9PSBtaW1lVHlwZVRleHRVUklMaXN0KSB7Ci0gICAgICAgIG1f
dXJsID0gS1VSTCgpOwotICAgICAgICBWZWN0b3I8U3RyaW5nPiB1cmlMaXN0OwotICAgICAgICAv
LyBMaW5lIHNlcGFyYXRvciBpcyBcclxuIHBlciBSRkMgMjQ4MyAtIGhvd2V2ZXIsIGZvciBjb21w
YXRpYmlsaXR5Ci0gICAgICAgIC8vIHJlYXNvbnMgd2UgYWxzbyBhbGxvdyBqdXN0IFxuIGhlcmUu
Ci0gICAgICAgIGRhdGEuc3BsaXQoJ1xuJywgdXJpTGlzdCk7Ci0gICAgICAgIC8vIFByb2Nlc3Mg
dGhlIGlucHV0IGFuZCBjb3B5IHRoZSBmaXJzdCB2YWxpZCBVUkwgaW50byB0aGUgdXJsIG1lbWJl
ci4KLSAgICAgICAgLy8gSW4gY2FzZSBubyBVUkxzIGNhbiBiZSBmb3VuZCwgc3Vic2VxdWVudCBj
YWxscyB0byBnZXREYXRhKCJVUkwiKQotICAgICAgICAvLyB3aWxsIGdldCBhbiBlbXB0eSBzdHJp
bmcuIFRoaXMgaXMgaW4gbGluZSB3aXRoIHRoZSBIVE1MNSBzcGVjIChzZWUKLSAgICAgICAgLy8g
IlRoZSBEcmFnRXZlbnQgYW5kIERhdGFUcmFuc2ZlciBpbnRlcmZhY2VzIikuCi0gICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgdXJpTGlzdC5zaXplKCk7ICsraSkgewotICAgICAgICAgICAg
U3RyaW5nJiBsaW5lID0gdXJpTGlzdFtpXTsKLSAgICAgICAgICAgIGxpbmUgPSBsaW5lLnN0cmlw
V2hpdGVTcGFjZSgpOwotICAgICAgICAgICAgaWYgKGxpbmUuaXNFbXB0eSgpKSB7Ci0gICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobGluZVsw
XSA9PSAnIycpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBLVVJMIHVy
bCA9IEtVUkwoUGFyc2VkVVJMU3RyaW5nLCBsaW5lKTsKLSAgICAgICAgICAgIGlmICh1cmwuaXNW
YWxpZCgpKSB7Ci0gICAgICAgICAgICAgICAgbV91cmwgPSB1cmw7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgbV91cmlMaXN0ID0gZGF0
YTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQorVmVjdG9yPFN0cmluZz4gQ2hyb21pdW1E
YXRhT2JqZWN0OjpmaWxlbmFtZXMoKSBjb25zdAoreworICAgIHJldHVybiBWZWN0b3I8U3RyaW5n
PigpOworfQogCi0gICAgaWYgKHR5cGUgPT0gbWltZVR5cGVUZXh0SFRNTCkgewotICAgICAgICBt
X3RleHRIdG1sID0gZGF0YTsKLSAgICAgICAgbV9odG1sQmFzZVVybCA9IEtVUkwoKTsKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQordm9pZCBDaHJvbWl1bURhdGFPYmplY3Q6OnNldEZpbGVu
YW1lcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVzKQoreworfQogCi0gICAgaWYgKHR5
cGUgPT0gbWltZVR5cGVEb3dubG9hZFVSTCkgewotICAgICAgICBtX2Rvd25sb2FkTWV0YWRhdGEg
PSBkYXRhOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9CitTdHJpbmcgQ2hyb21pdW1EYXRh
T2JqZWN0OjpmaWxlRXh0ZW5zaW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9
CiAKLSAgICBpZiAodHlwZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKK3ZvaWQg
Q2hyb21pdW1EYXRhT2JqZWN0OjpzZXRGaWxlRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgZmlsZUV4
dGVuc2lvbikKK3sKK30KIAotICAgIG1fY3VzdG9tRGF0YS5zZXQodHlwZSwgZGF0YSk7Ci0gICAg
cmV0dXJuIHRydWU7CitTdHJpbmcgQ2hyb21pdW1EYXRhT2JqZWN0OjpmaWxlQ29udGVudEZpbGVu
YW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKLWJvb2wgQ2hyb21pdW1E
YXRhT2JqZWN0Ojpjb250YWluc0ZpbGVuYW1lcygpIGNvbnN0Cit2b2lkIENocm9taXVtRGF0YU9i
amVjdDo6c2V0RmlsZUNvbnRlbnRGaWxlbmFtZShjb25zdCBTdHJpbmcmIGZpbGVDb250ZW50Rmls
ZW5hbWUpCit7Cit9CisKK1Bhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBDaHJvbWl1bURhdGFPYmpl
Y3Q6OmZpbGVDb250ZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBDaHJv
bWl1bURhdGFPYmplY3Q6OnNldEZpbGVDb250ZW50KFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBm
aWxlQ29udGVudCkKIHsKLSAgICBib29sIGNvbnRhaW5zRmlsZW5hbWVzOwotICAgIGlmIChtX3N0
b3JhZ2VNb2RlID09IFBhc3RlYm9hcmQpIHsKLSAgICAgICAgSGFzaFNldDxTdHJpbmc+IGlnbm9y
ZWRSZXN1bHRzID0KLSAgICAgICAgICAgIFBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJvYXJkUmVhZEF2
YWlsYWJsZVR5cGVzKGN1cnJlbnRQYXN0ZWJvYXJkQnVmZmVyKCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29udGFpbnNGaWxlbmFt
ZXMpOwotICAgIH0gZWxzZQotICAgICAgICBjb250YWluc0ZpbGVuYW1lcyA9ICFtX2ZpbGVuYW1l
cy5pc0VtcHR5KCk7Ci0gICAgcmV0dXJuIGNvbnRhaW5zRmlsZW5hbWVzOwogfQogCiBDaHJvbWl1
bURhdGFPYmplY3Q6OkNocm9taXVtRGF0YU9iamVjdChTdG9yYWdlTW9kZSBzdG9yYWdlTW9kZSkK
QEAgLTI1OSwyMSArMjcwLDkgQEAgQ2hyb21pdW1EYXRhT2JqZWN0OjpDaHJvbWl1bURhdGFPYmpl
Y3QoU3RvcmFnZU1vZGUgc3RvcmFnZU1vZGUpCiB9CiAKIENocm9taXVtRGF0YU9iamVjdDo6Q2hy
b21pdW1EYXRhT2JqZWN0KGNvbnN0IENocm9taXVtRGF0YU9iamVjdCYgb3RoZXIpCi0gICAgOiBS
ZWZDb3VudGVkPENocm9taXVtRGF0YU9iamVjdD4oKQotICAgICwgbV9zdG9yYWdlTW9kZShvdGhl
ci5tX3N0b3JhZ2VNb2RlKQotICAgICwgbV91cmxUaXRsZShvdGhlci5tX3VybFRpdGxlKQotICAg
ICwgbV9kb3dubG9hZE1ldGFkYXRhKG90aGVyLm1fZG93bmxvYWRNZXRhZGF0YSkKLSAgICAsIG1f
ZmlsZUV4dGVuc2lvbihvdGhlci5tX2ZpbGVFeHRlbnNpb24pCi0gICAgLCBtX2ZpbGVuYW1lcyhv
dGhlci5tX2ZpbGVuYW1lcykKLSAgICAsIG1fcGxhaW5UZXh0KG90aGVyLm1fcGxhaW5UZXh0KQot
ICAgICwgbV90ZXh0SHRtbChvdGhlci5tX3RleHRIdG1sKQotICAgICwgbV9odG1sQmFzZVVybChv
dGhlci5tX2h0bWxCYXNlVXJsKQotICAgICwgbV9maWxlQ29udGVudEZpbGVuYW1lKG90aGVyLm1f
ZmlsZUNvbnRlbnRGaWxlbmFtZSkKLSAgICAsIG1fdXJsKG90aGVyLm1fdXJsKQotICAgICwgbV91
cmlMaXN0KG90aGVyLm1fdXJpTGlzdCkKKyAgICA6IG1fc3RvcmFnZU1vZGUob3RoZXIuc3RvcmFn
ZU1vZGUoKSkKKyAgICAsIG1faXRlbXMob3RoZXIuaXRlbXMoKSkKIHsKLSAgICBpZiAob3RoZXIu
bV9maWxlQ29udGVudC5nZXQoKSkKLSAgICAgICAgbV9maWxlQ29udGVudCA9IG90aGVyLm1fZmls
ZUNvbnRlbnQtPmNvcHkoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuaApp
bmRleCA5ZGRmYjBiOTM2NDUxMTEzYjJjODAyMGU4NmZjNzI4NzAyZjhhZWQ5Li40MjBjZmRhOTdj
YmQ4NTk3M2ZmZmNiNzQzYTE3MTY2Nzc4ZmIyNGI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuaApAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgsIDIwMDksIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgsIDIwMDksIDIwMTIsIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQpAQCAtMzEsNiArMzEsOCBAQAogI2lmbmRlZiBDaHJvbWl1bURhdGFPYmplY3RfaAogI2Rl
ZmluZSBDaHJvbWl1bURhdGFPYmplY3RfaAogCisjaW5jbHVkZSAiQ2xpcGJvYXJkQ2hyb21pdW0u
aCIKKyNpbmNsdWRlICJEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtLmgiCiAjaW5jbHVkZSAi
S1VSTC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVm
ZmVyLmgiCkBAIC00Miw2ICs0NCw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3Mg
Q2xpcGJvYXJkQ2hyb21pdW07CisKIC8vIEEgZGF0YSBvYmplY3QgZm9yIGhvbGRpbmcgZGF0YSB0
aGF0IHdvdWxkIGJlIGluIGEgY2xpcGJvYXJkIG9yIG1vdmVkCiAvLyBkdXJpbmcgYSBkcmFnLW4t
ZHJvcCBvcGVyYXRpb24uICBUaGlzIGlzIHRoZSBkYXRhIHRoYXQgV2ViQ29yZSBpcyBhd2FyZQog
Ly8gb2YgYW5kIGlzIG5vdCBzcGVjaWZpYyB0byBhIHBsYXRmb3JtLgpAQCAtNjksMzYgKzczLDQ1
IEBAIHB1YmxpYzoKIAogICAgIFN0b3JhZ2VNb2RlIHN0b3JhZ2VNb2RlKCkgY29uc3QgeyByZXR1
cm4gbV9zdG9yYWdlTW9kZTsgfQogCisgICAgUGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtTGlz
dENocm9taXVtPiBpdGVtcygpIGNvbnN0OworCiAgICAgdm9pZCBjbGVhckRhdGEoY29uc3QgU3Ry
aW5nJiB0eXBlKTsKICAgICB2b2lkIGNsZWFyQWxsKCk7CiAgICAgdm9pZCBjbGVhckFsbEV4Y2Vw
dEZpbGVzKCk7CiAKLSAgICBib29sIGhhc0RhdGEoKSBjb25zdDsKLQogICAgIEhhc2hTZXQ8U3Ry
aW5nPiB0eXBlcygpIGNvbnN0OwogICAgIFN0cmluZyBnZXREYXRhKGNvbnN0IFN0cmluZyYgdHlw
ZSwgYm9vbCYgc3VjY2VzcykgY29uc3Q7CiAgICAgYm9vbCBzZXREYXRhKGNvbnN0IFN0cmluZyYg
dHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKTsKIAotICAgIC8vIFNwZWNpYWwgaGFuZGxlcnMgZm9y
IFVSTC9IVE1MIG1ldGFkYXRhLgotICAgIFN0cmluZyB1cmxUaXRsZSgpIGNvbnN0IHsgcmV0dXJu
IG1fdXJsVGl0bGU7IH0KLSAgICB2b2lkIHNldFVybFRpdGxlKGNvbnN0IFN0cmluZyYgdXJsVGl0
bGUpIHsgbV91cmxUaXRsZSA9IHVybFRpdGxlOyB9Ci0gICAgS1VSTCBodG1sQmFzZVVybCgpIGNv
bnN0IHsgcmV0dXJuIG1faHRtbEJhc2VVcmw7IH0KLSAgICB2b2lkIHNldEh0bWxCYXNlVXJsKGNv
bnN0IEtVUkwmIHVybCkgeyBtX2h0bWxCYXNlVXJsID0gdXJsOyB9CisgICAgLy8gU3BlY2lhbCBo
YW5kbGVycyBmb3IgZGF0YSB0eXBlcyB3aXRoIG1ldGFkYXRhLgorICAgIHZvaWQgZ2V0VVJMKFN0
cmluZyYgdXJsLCBTdHJpbmcqIHRpdGxlKSBjb25zdDsKKyAgICB2b2lkIHNldFVSTChjb25zdCBT
dHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiB0aXRsZSk7CisgICAgdm9pZCBnZXRIVE1MKFN0cmlu
ZyYgaHRtbCwgS1VSTCYgYmFzZVVSTCkgY29uc3Q7CisgICAgdm9pZCBzZXRIVE1MKGNvbnN0IFN0
cmluZyYgaHRtbCwgY29uc3QgS1VSTCYgYmFzZVVSTCk7CisKKyAgICAvLyBWYXJpb3VzIGxlZ2Fj
eSBoZWxwZXJzLiBUaGVzZSB3aWxsIGJlIHJlbW92ZWQgd2hlbiB0aGV5IGFyZSBubyBsb25nZXIg
bmVlZGVkLgorICAgIC8vIGluIG9uZSBmdW5jdGlvbiBjYWxsLgorICAgIFN0cmluZyB1cmxUaXRs
ZSgpIGNvbnN0OworICAgIHZvaWQgc2V0VXJsVGl0bGUoY29uc3QgU3RyaW5nJik7CisgICAgS1VS
TCBodG1sQmFzZVVybCgpIGNvbnN0OworICAgIHZvaWQgc2V0SHRtbEJhc2VVcmwoY29uc3QgS1VS
TCYpOworICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGN1c3RvbURhdGEoKSBjb25zdDsKKyAg
ICB2b2lkIHNldEN1c3RvbURhdGEoY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mKTsKIAog
ICAgIC8vIFVzZWQgdG8gaGFuZGxlIGZpbGVzIGJlaW5nIGRyYWdnZWQgaW4uCiAgICAgYm9vbCBj
b250YWluc0ZpbGVuYW1lcygpIGNvbnN0OwotICAgIFZlY3RvcjxTdHJpbmc+IGZpbGVuYW1lcygp
IGNvbnN0IHsgcmV0dXJuIG1fZmlsZW5hbWVzOyB9Ci0gICAgdm9pZCBzZXRGaWxlbmFtZXMoY29u
c3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcykgeyBtX2ZpbGVuYW1lcyA9IGZpbGVuYW1lczsg
fQorICAgIFZlY3RvcjxTdHJpbmc+IGZpbGVuYW1lcygpIGNvbnN0OworICAgIHZvaWQgc2V0Rmls
ZW5hbWVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+Jik7CiAKICAgICAvLyBVc2VkIHRvIGhhbmRsZSBm
aWxlcyAoaW1hZ2VzKSBiZWluZyBkcmFnZ2VkIG91dC4KLSAgICBTdHJpbmcgZmlsZUV4dGVuc2lv
bigpIGNvbnN0IHsgcmV0dXJuIG1fZmlsZUV4dGVuc2lvbjsgfQotICAgIHZvaWQgc2V0RmlsZUV4
dGVuc2lvbihjb25zdCBTdHJpbmcmIGZpbGVFeHRlbnNpb24pIHsgbV9maWxlRXh0ZW5zaW9uID0g
ZmlsZUV4dGVuc2lvbjsgfQotICAgIFN0cmluZyBmaWxlQ29udGVudEZpbGVuYW1lKCkgY29uc3Qg
eyByZXR1cm4gbV9maWxlQ29udGVudEZpbGVuYW1lOyB9Ci0gICAgdm9pZCBzZXRGaWxlQ29udGVu
dEZpbGVuYW1lKGNvbnN0IFN0cmluZyYgZmlsZUNvbnRlbnRGaWxlbmFtZSkgeyBtX2ZpbGVDb250
ZW50RmlsZW5hbWUgPSBmaWxlQ29udGVudEZpbGVuYW1lOyB9Ci0gICAgUGFzc1JlZlB0cjxTaGFy
ZWRCdWZmZXI+IGZpbGVDb250ZW50KCkgY29uc3QgeyByZXR1cm4gbV9maWxlQ29udGVudDsgfQot
ICAgIHZvaWQgc2V0RmlsZUNvbnRlbnQoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGZpbGVDb250
ZW50KSB7IG1fZmlsZUNvbnRlbnQgPSBmaWxlQ29udGVudDsgfQotICAgIGNvbnN0IEhhc2hNYXA8
U3RyaW5nLCBTdHJpbmc+JiBjdXN0b21EYXRhKCkgY29uc3QgeyByZXR1cm4gbV9jdXN0b21EYXRh
OyB9Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIGN1c3RvbURhdGEoKSB7IHJldHVybiBt
X2N1c3RvbURhdGE7IH0KKyAgICAvLyBMZWdhY3kgaGVscGVycyB0byBiZSByZW1vdmVkIHdoZW4g
dGhleSBhcmUgbm8gbG9uZ2VyIG5lZWRlZC4gVGhleSB3aWxsIGJlIHJlcGxhY2VkIHdpdGgKKyAg
ICAvLyB2ZXJzaW9ucyB0aGF0IGdldC9zZXQgYWxsIHRoZSBkYXRhIGluIG9uZSBmdW5jdGlvbiBj
YWxsLgorICAgIFN0cmluZyBmaWxlRXh0ZW5zaW9uKCkgY29uc3Q7CisgICAgdm9pZCBzZXRGaWxl
RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYpOworICAgIFN0cmluZyBmaWxlQ29udGVudEZpbGVuYW1l
KCkgY29uc3Q7CisgICAgdm9pZCBzZXRGaWxlQ29udGVudEZpbGVuYW1lKGNvbnN0IFN0cmluZyYp
OworICAgIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBmaWxlQ29udGVudCgpIGNvbnN0OworICAg
IHZvaWQgc2V0RmlsZUNvbnRlbnQoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+KTsKIAogcHJpdmF0
ZToKICAgICBleHBsaWNpdCBDaHJvbWl1bURhdGFPYmplY3QoU3RvcmFnZU1vZGUpOwpAQCAtMTA2
LDI4ICsxMTksOCBAQCBwcml2YXRlOgogCiAgICAgU3RvcmFnZU1vZGUgbV9zdG9yYWdlTW9kZTsK
IAotICAgIFN0cmluZyBtX3VybFRpdGxlOwotCi0gICAgU3RyaW5nIG1fZG93bmxvYWRNZXRhZGF0
YTsKLQotICAgIFN0cmluZyBtX2ZpbGVFeHRlbnNpb247Ci0gICAgVmVjdG9yPFN0cmluZz4gbV9m
aWxlbmFtZXM7Ci0KLSAgICBTdHJpbmcgbV9wbGFpblRleHQ7Ci0KLSAgICBTdHJpbmcgbV90ZXh0
SHRtbDsKLSAgICBLVVJMIG1faHRtbEJhc2VVcmw7Ci0KLSAgICBTdHJpbmcgbV9maWxlQ29udGVu
dEZpbGVuYW1lOwotICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1fZmlsZUNvbnRlbnQ7Ci0KLSAg
ICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBtX2N1c3RvbURhdGE7Ci0KLSAgICAvLyBUaGVzZSB0
d28gYXJlIGxpbmtlZC4gU2V0dGluZyBtX3VybCB3aWxsIHNldCBtX3VyaUxpc3QgdG8gdGhlIHNh
bWUKLSAgICAvLyBzdHJpbmcgdmFsdWU7IHNldHRpbmcgbV91cmlMaXN0IHdpbGwgY2F1c2UgaXRz
IGNvbnRlbnRzIHRvIGJlIHBhcnNlZAotICAgIC8vIGFjY29yZGluZyB0byBSRkMgMjQ4MyBhbmQg
dGhlIGZpcnN0IFVSTCBmb3VuZCB3aWxsIGJlIHNldCBpbiBtX3VybC4KLSAgICBLVVJMIG1fdXJs
OwotICAgIFN0cmluZyBtX3VyaUxpc3Q7CisgICAgLy8gRklYTUU6IFJlbmFtZSB0byBtX2xpc3QK
KyAgICBSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bT4gbV9pdGVtczsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmNwcAppbmRleCBjZDBiZjc4Y2ZmZmJjMjMz
YTBkMWZhZWE0YWMzZDc2MjAxNTBiNzM1Li5mZmU1YzA4ZjBmZDBkZDdhNjE3ZDk0ZWY4M2Q2MDI0
NDNjZGJhODBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9D
bGlwYm9hcmRDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vQ2xpcGJvYXJkQ2hyb21pdW0uY3BwCkBAIC0zMSwxMCArMzEsMTMgQEAKICNpbmNsdWRlICJD
aHJvbWl1bURhdGFPYmplY3QuaCIKICNpbmNsdWRlICJDbGlwYm9hcmRNaW1lVHlwZXMuaCIKICNp
bmNsdWRlICJDbGlwYm9hcmRVdGlsaXRpZXNDaHJvbWl1bS5oIgorI2luY2x1ZGUgIkRhdGFUcmFu
c2Zlckl0ZW1DaHJvbWl1bS5oIgorI2luY2x1ZGUgIkRhdGFUcmFuc2Zlckl0ZW1MaXN0LmgiCiAj
aW5jbHVkZSAiRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCiAjaW5jbHVkZSAiRHJhZ0RhdGEuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5j
bHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkZpbGVMaXN0LmgiCiAjaW5jbHVkZSAi
RnJhbWUuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKQEAgLTQ1LDcgKzQ4LDcgQEAKICNpbmNs
dWRlICJQbGF0Zm9ybVN1cHBvcnQuaCIKICNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlJl
bmRlckltYWdlLmgiCi0jaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1
ZGUgIlN0cmluZ0NhbGxiYWNrLmgiCiAjaW5jbHVkZSAibWFya3VwLmgiCiAKICNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CkBAIC01Myw2ICs1NiwxNDQgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCituYW1lc3BhY2UgeworCisvLyBUaGVzZSB3cmFwcGVyIGNsYXNzZXMgaGVs
cCB1cyB0byBwcm9wZXJseSBzY29wZSBEYXRhVHJhbnNmZXJJdGVtL0RhdGFUcmFuc2Zlckl0ZW1M
aXN0IHNvIHRoZXkgYXJlCisvLyBub3QgYXZhaWxhYmxlIG91dHNpZGUgdGhlIGNvbnRleHQgdGhh
dCBhIENsaXBib2FyZCBvYmplY3QgaXMgdmFsaWQgZm9yLgorY2xhc3MgRGF0YVRyYW5zZmVySXRl
bUxpc3RXcmFwcGVyIDogcHVibGljIERhdGFUcmFuc2Zlckl0ZW1MaXN0IHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtTGlzdFdyYXBwZXI+IGNyZWF0ZSgK
KyAgICAgICAgUGFzc1JlZlB0cjxDbGlwYm9hcmRDaHJvbWl1bT4sIFBhc3NSZWZQdHI8RGF0YVRy
YW5zZmVySXRlbUxpc3RDaHJvbWl1bT4pOworCisgICAgdmlydHVhbCBzaXplX3QgbGVuZ3RoKCkg
Y29uc3Q7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW0+IGl0ZW0odW5z
aWduZWQgbG9uZyBpbmRleCk7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUl0ZW0odW5zaWduZWQg
bG9uZyBpbmRleCwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZpcnR1YWwgdm9pZCBjbGVhcigpOwor
ICAgIHZpcnR1YWwgdm9pZCBhZGQoY29uc3QgU3RyaW5nJiBkYXRhLCBjb25zdCBTdHJpbmcmIHR5
cGUsIEV4Y2VwdGlvbkNvZGUmKTsKKworcHJpdmF0ZToKKyAgICBEYXRhVHJhbnNmZXJJdGVtTGlz
dFdyYXBwZXIoUGFzc1JlZlB0cjxDbGlwYm9hcmRDaHJvbWl1bT4sIFBhc3NSZWZQdHI8RGF0YVRy
YW5zZmVySXRlbUxpc3RDaHJvbWl1bT4pOworICAKKyAgICBSZWZQdHI8Q2xpcGJvYXJkQ2hyb21p
dW0+IG1fY2xpcGJvYXJkOworICAgIFJlZlB0cjxEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVt
PiBtX2xpc3Q7Cit9OworCitjbGFzcyBEYXRhVHJhbnNmZXJJdGVtV3JhcHBlciA6IHB1YmxpYyBE
YXRhVHJhbnNmZXJJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRhVHJh
bnNmZXJJdGVtV3JhcHBlcj4gY3JlYXRlKAorICAgICAgICBQYXNzUmVmUHRyPENsaXBib2FyZENo
cm9taXVtPiwgUGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0+KTsKKworICAgIHZp
cnR1YWwgU3RyaW5nIGtpbmQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0cmluZyB0eXBlKCkgY29u
c3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0QXNTdHJpbmcoUGFzc1JlZlB0cjxTdHJpbmdDYWxs
YmFjaz4pOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxCbG9iPiBnZXRBc0ZpbGUoKTsKKworcHJp
dmF0ZToKKyAgICBEYXRhVHJhbnNmZXJJdGVtV3JhcHBlcihQYXNzUmVmUHRyPENsaXBib2FyZENo
cm9taXVtPiwgUGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0+KTsKKworICAgIFJl
ZlB0cjxDbGlwYm9hcmRDaHJvbWl1bT4gbV9jbGlwYm9hcmQ7CisgICAgUmVmUHRyPERhdGFUcmFu
c2Zlckl0ZW1DaHJvbWl1bT4gbV9pdGVtOworfTsKKworUGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJ
dGVtTGlzdFdyYXBwZXI+IERhdGFUcmFuc2Zlckl0ZW1MaXN0V3JhcHBlcjo6Y3JlYXRlKAorICAg
IFBhc3NSZWZQdHI8Q2xpcGJvYXJkQ2hyb21pdW0+IGNsaXBib2FyZCwgUGFzc1JlZlB0cjxEYXRh
VHJhbnNmZXJJdGVtTGlzdENocm9taXVtPiBsaXN0KQoreworICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgRGF0YVRyYW5zZmVySXRlbUxpc3RXcmFwcGVyKGNsaXBib2FyZCwgbGlzdCkpOworfQorCitz
aXplX3QgRGF0YVRyYW5zZmVySXRlbUxpc3RXcmFwcGVyOjpsZW5ndGgoKSBjb25zdAoreworICAg
IGlmIChtX2NsaXBib2FyZC0+cG9saWN5KCkgPT0gQ2xpcGJvYXJkTnVtYikKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgcmV0dXJuIG1fbGlzdC0+bGVuZ3RoKCk7Cit9CisKK1Bhc3NSZWZQdHI8RGF0
YVRyYW5zZmVySXRlbT4gRGF0YVRyYW5zZmVySXRlbUxpc3RXcmFwcGVyOjppdGVtKHVuc2lnbmVk
IGxvbmcgaW5kZXgpCit7CisgICAgaWYgKG1fY2xpcGJvYXJkLT5wb2xpY3koKSA9PSBDbGlwYm9h
cmROdW1iKQorICAgICAgICByZXR1cm4gMDsKKyAgICBSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUNo
cm9taXVtPiBpdGVtID0gbV9saXN0LT5pdGVtKGluZGV4KTsKKyAgICBpZiAoIWl0ZW0pCisgICAg
ICAgIHJldHVybiAwOworICAgIHJldHVybiBEYXRhVHJhbnNmZXJJdGVtV3JhcHBlcjo6Y3JlYXRl
KG1fY2xpcGJvYXJkLCBpdGVtKTsKK30KKwordm9pZCBEYXRhVHJhbnNmZXJJdGVtTGlzdFdyYXBw
ZXI6OmRlbGV0ZUl0ZW0odW5zaWduZWQgbG9uZyBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7
CisgICAgaWYgKG1fY2xpcGJvYXJkLT5wb2xpY3koKSAhPSBDbGlwYm9hcmRXcml0YWJsZSkgewor
ICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOyAvLyBGSVhNRTogV3JvbmcgZXhjZXB0aW9u
IGNvZGUgSSB0aGluaworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fbGlzdC0+ZGVsZXRl
SXRlbShpbmRleCk7Cit9CisKK3ZvaWQgRGF0YVRyYW5zZmVySXRlbUxpc3RXcmFwcGVyOjpjbGVh
cigpCit7CisgICAgaWYgKG1fY2xpcGJvYXJkLT5wb2xpY3koKSAhPSBDbGlwYm9hcmRXcml0YWJs
ZSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fbGlzdC0+Y2xlYXIoKTsKK30KKwordm9pZCBEYXRh
VHJhbnNmZXJJdGVtTGlzdFdyYXBwZXI6OmFkZChjb25zdCBTdHJpbmcmIGRhdGEsIGNvbnN0IFN0
cmluZyYgdHlwZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKG1fY2xpcGJvYXJkLT5w
b2xpY3koKSAhPSBDbGlwYm9hcmRXcml0YWJsZSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fbGlz
dC0+YWRkKGRhdGEsIHR5cGUsIGVjKTsKK30KKworRGF0YVRyYW5zZmVySXRlbUxpc3RXcmFwcGVy
OjpEYXRhVHJhbnNmZXJJdGVtTGlzdFdyYXBwZXIoCisgICAgUGFzc1JlZlB0cjxDbGlwYm9hcmRD
aHJvbWl1bT4gY2xpcGJvYXJkLCBQYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21p
dW0+IGxpc3QpCisgICAgOiBtX2NsaXBib2FyZChjbGlwYm9hcmQpCisgICAgLCBtX2xpc3QobGlz
dCkKK3sKK30KKworUGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtV3JhcHBlcj4gRGF0YVRyYW5z
ZmVySXRlbVdyYXBwZXI6OmNyZWF0ZSgKKyAgICBQYXNzUmVmUHRyPENsaXBib2FyZENocm9taXVt
PiBjbGlwYm9hcmQsIFBhc3NSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUNocm9taXVtPiBpdGVtKQor
eworICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGF0YVRyYW5zZmVySXRlbVdyYXBwZXIoY2xpcGJv
YXJkLCBpdGVtKSk7Cit9CisKK1N0cmluZyBEYXRhVHJhbnNmZXJJdGVtV3JhcHBlcjo6a2luZCgp
IGNvbnN0Cit7CisgICAgaWYgKG1fY2xpcGJvYXJkLT5wb2xpY3koKSA9PSBDbGlwYm9hcmROdW1i
KQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0dXJuIG1faXRlbS0+a2luZCgpOwor
fQorCitTdHJpbmcgRGF0YVRyYW5zZmVySXRlbVdyYXBwZXI6OnR5cGUoKSBjb25zdAoreworICAg
IGlmIChtX2NsaXBib2FyZC0+cG9saWN5KCkgPT0gQ2xpcGJvYXJkTnVtYikKKyAgICAgICAgcmV0
dXJuIFN0cmluZygpOworICAgIHJldHVybiBtX2l0ZW0tPnR5cGUoKTsKK30KKwordm9pZCBEYXRh
VHJhbnNmZXJJdGVtV3JhcHBlcjo6Z2V0QXNTdHJpbmcoUGFzc1JlZlB0cjxTdHJpbmdDYWxsYmFj
az4gY2FsbGJhY2spCit7CisgICAgaWYgKG1fY2xpcGJvYXJkLT5wb2xpY3koKSAhPSBDbGlwYm9h
cmRSZWFkYWJsZSAmJiBtX2NsaXBib2FyZC0+cG9saWN5KCkgIT0gQ2xpcGJvYXJkV3JpdGFibGUp
CisgICAgICAgIHJldHVybjsKKyAgICAgICAKKyAgICBtX2l0ZW0tPmdldEFzU3RyaW5nKGNhbGxi
YWNrLCBtX2NsaXBib2FyZC0+ZnJhbWUoKS0+ZG9jdW1lbnQoKS0+c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpKTsKK30KKworUGFzc1JlZlB0cjxCbG9iPiBEYXRhVHJhbnNmZXJJdGVtV3JhcHBlcjo6
Z2V0QXNGaWxlKCkKK3sKKyAgICBpZiAobV9jbGlwYm9hcmQtPnBvbGljeSgpICE9IENsaXBib2Fy
ZFJlYWRhYmxlICYmIG1fY2xpcGJvYXJkLT5wb2xpY3koKSAhPSBDbGlwYm9hcmRXcml0YWJsZSkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gbV9pdGVtLT5nZXRBc0ZpbGUoKTsKK30K
KworRGF0YVRyYW5zZmVySXRlbVdyYXBwZXI6OkRhdGFUcmFuc2Zlckl0ZW1XcmFwcGVyKAorICAg
IFBhc3NSZWZQdHI8Q2xpcGJvYXJkQ2hyb21pdW0+IGNsaXBib2FyZCwgUGFzc1JlZlB0cjxEYXRh
VHJhbnNmZXJJdGVtQ2hyb21pdW0+IGl0ZW0pCisgICAgOiBtX2NsaXBib2FyZChjbGlwYm9hcmQp
CisgICAgLCBtX2l0ZW0oaXRlbSkKK3sKK30KKworfSAvLyBuYW1lc3BhY2UKKwogdXNpbmcgbmFt
ZXNwYWNlIEhUTUxOYW1lczsKIAogLy8gV2UgcHJvdmlkZSB0aGUgSUUgY2xpcGJvYXJkIHR5cGVz
IChVUkwgYW5kIFRleHQpLCBhbmQgdGhlIGNsaXBib2FyZCB0eXBlcyBzcGVjaWZpZWQgaW4gdGhl
IFdIQVRXRyBXZWIgQXBwbGljYXRpb25zIDEuMCBkcmFmdApAQCAtOTAsMTIgKzIzMSwxMCBAQCBQ
YXNzUmVmUHRyPENsaXBib2FyZENocm9taXVtPiBDbGlwYm9hcmRDaHJvbWl1bTo6Y3JlYXRlKENs
aXBib2FyZFR5cGUgY2xpcGJvYXJkVAogCiB2b2lkIENsaXBib2FyZENocm9taXVtOjpjbGVhckRh
dGEoY29uc3QgU3RyaW5nJiB0eXBlKQogewotICAgIGlmIChwb2xpY3koKSAhPSBDbGlwYm9hcmRX
cml0YWJsZSB8fCAhbV9kYXRhT2JqZWN0KQorICAgIGlmIChwb2xpY3koKSAhPSBDbGlwYm9hcmRX
cml0YWJsZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9kYXRhT2JqZWN0LT5jbGVhckRhdGEo
bm9ybWFsaXplVHlwZSh0eXBlKSk7Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAog
dm9pZCBDbGlwYm9hcmRDaHJvbWl1bTo6Y2xlYXJBbGxEYXRhKCkKQEAgLTEwOSwxMyArMjQ4LDEy
IEBAIHZvaWQgQ2xpcGJvYXJkQ2hyb21pdW06OmNsZWFyQWxsRGF0YSgpCiBTdHJpbmcgQ2xpcGJv
YXJkQ2hyb21pdW06OmdldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBib29sJiBzdWNjZXNzKSBj
b25zdAogewogICAgIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICBpZiAocG9saWN5KCkgIT0gQ2xpcGJv
YXJkUmVhZGFibGUgfHwgIW1fZGF0YU9iamVjdCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwot
Ci0gICAgaWYgKGlzRm9yQ29weUFuZFBhc3RlKCkgJiYgcGxhdGZvcm1DbGlwYm9hcmRDaGFuZ2Vk
KCkpCisgICAgaWYgKHBvbGljeSgpICE9IENsaXBib2FyZFJlYWRhYmxlKQogICAgICAgICByZXR1
cm4gU3RyaW5nKCk7CiAKLSAgICByZXR1cm4gbV9kYXRhT2JqZWN0LT5nZXREYXRhKG5vcm1hbGl6
ZVR5cGUodHlwZSksIHN1Y2Nlc3MpOworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgY29udmVydC10
by1VUkwuCisgICAgU3RyaW5nIG5vcm1hbGl6ZWRUeXBlID0gbm9ybWFsaXplVHlwZSh0eXBlKTsK
KyAgICByZXR1cm4gbV9kYXRhT2JqZWN0LT5nZXREYXRhKG5vcm1hbGl6ZWRUeXBlLCBzdWNjZXNz
KTsKIH0KIAogYm9vbCBDbGlwYm9hcmRDaHJvbWl1bTo6c2V0RGF0YShjb25zdCBTdHJpbmcmIHR5
cGUsIGNvbnN0IFN0cmluZyYgZGF0YSkKQEAgLTEyMyw0NiArMjYxLDQzIEBAIGJvb2wgQ2xpcGJv
YXJkQ2hyb21pdW06OnNldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRh
dGEpCiAgICAgaWYgKHBvbGljeSgpICE9IENsaXBib2FyZFdyaXRhYmxlKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gbV9kYXRhT2JqZWN0LT5zZXREYXRhKG5vcm1hbGl6ZVR5
cGUodHlwZSksIGRhdGEpOworICAgIC8vIEZJWE1FOiBOZWVkIHRvIG1hcCBVUkwgdG8gdGV4dC91
cmktbGlzdCBoZXJlLgorICAgIFN0cmluZyBub3JtYWxpemVkVHlwZSA9IG5vcm1hbGl6ZVR5cGUo
dHlwZSk7CisgICAgcmV0dXJuIG1fZGF0YU9iamVjdC0+c2V0RGF0YShub3JtYWxpemVkVHlwZSwg
ZGF0YSk7CiB9CiAKIGJvb2wgQ2xpcGJvYXJkQ2hyb21pdW06OnBsYXRmb3JtQ2xpcGJvYXJkQ2hh
bmdlZCgpIGNvbnN0CiB7CisgICAgLy8gRklYTUU6IE1vdmUgdGhpcyBzb21ld2hlcmUgZWxzZS0t
d2Ugc2hvdWxkIGJlIGFibGUgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIGZyb20gb3RoZXIgcGxhY2Vz
IGFzCisgICAgLy8gd2VsbC4gSWRlYWxseSwgQ2xpcGJvYXJkQ2hyb21pdW0gc2hvdWxkbid0IGV2
ZW4gaGF2ZSB0byBrbm93IGFib3V0IGl0LgogICAgIHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6OmNs
aXBib2FyZFNlcXVlbmNlTnVtYmVyKGN1cnJlbnRQYXN0ZWJvYXJkQnVmZmVyKCkpICE9IG1fb3Jp
Z2luYWxTZXF1ZW5jZU51bWJlcjsKIH0KIAogLy8gZXh0ZW5zaW9ucyBiZXlvbmQgSUUncyBBUEkK
IEhhc2hTZXQ8U3RyaW5nPiBDbGlwYm9hcmRDaHJvbWl1bTo6dHlwZXMoKSBjb25zdAogewotICAg
IEhhc2hTZXQ8U3RyaW5nPiByZXN1bHRzOwogICAgIGlmIChwb2xpY3koKSAhPSBDbGlwYm9hcmRS
ZWFkYWJsZSAmJiBwb2xpY3koKSAhPSBDbGlwYm9hcmRUeXBlc1JlYWRhYmxlKQotICAgICAgICBy
ZXR1cm4gcmVzdWx0czsKLQotICAgIGlmICghbV9kYXRhT2JqZWN0KQotICAgICAgICByZXR1cm4g
cmVzdWx0czsKLQotICAgIHJlc3VsdHMgPSBtX2RhdGFPYmplY3QtPnR5cGVzKCk7Ci0KLSAgICBp
ZiAobV9kYXRhT2JqZWN0LT5jb250YWluc0ZpbGVuYW1lcygpKQotICAgICAgICByZXN1bHRzLmFk
ZChtaW1lVHlwZUZpbGVzKTsKKyAgICAgICAgcmV0dXJuIEhhc2hTZXQ8U3RyaW5nPigpOwogCi0g
ICAgcmV0dXJuIHJlc3VsdHM7CisgICAgcmV0dXJuIG1fZGF0YU9iamVjdC0+dHlwZXMoKTsKIH0K
IAogUGFzc1JlZlB0cjxGaWxlTGlzdD4gQ2xpcGJvYXJkQ2hyb21pdW06OmZpbGVzKCkgY29uc3QK
IHsKKyAgICAvLyBGSVhNRTogQWNjb3JkaW5nIHRvIHRoZSBzcGVjLCB3ZSBhcmUgc3VwcG9zZWQg
dG8gcmV0dXJuIHRoZSBzYW1lIEZpbGVMaXN0IGVhY2ggdGltZS4KKyAgICBSZWZQdHI8RmlsZUxp
c3Q+IGZpbGVzID0gRmlsZUxpc3Q6OmNyZWF0ZSgpOwogICAgIGlmIChwb2xpY3koKSAhPSBDbGlw
Ym9hcmRSZWFkYWJsZSkKLSAgICAgICAgcmV0dXJuIEZpbGVMaXN0OjpjcmVhdGUoKTsKLQotICAg
IGlmICghbV9kYXRhT2JqZWN0KQotICAgICAgICByZXR1cm4gRmlsZUxpc3Q6OmNyZWF0ZSgpOwot
Ci0gICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcyA9IG1fZGF0YU9iamVjdC0+Zmls
ZW5hbWVzKCk7Ci0gICAgUmVmUHRyPEZpbGVMaXN0PiBmaWxlTGlzdCA9IEZpbGVMaXN0OjpjcmVh
dGUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZpbGVuYW1lcy5zaXplKCk7ICsraSkK
LSAgICAgICAgZmlsZUxpc3QtPmFwcGVuZChGaWxlOjpjcmVhdGUoZmlsZW5hbWVzLmF0KGkpKSk7
Ci0KLSAgICByZXR1cm4gZmlsZUxpc3QucmVsZWFzZSgpOworICAgICAgICByZXR1cm4gZmlsZXM7
CisKKyAgICBSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bT4gbGlzdCA9IG1fZGF0
YU9iamVjdC0+aXRlbXMoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpc3QtPmxlbmd0
aCgpOyArK2kpIHsKKyAgICAgICAgaWYgKGxpc3QtPml0ZW0oaSktPmtpbmQoKSA9PSBEYXRhVHJh
bnNmZXJJdGVtOjpraW5kRmlsZSkgeworICAgICAgICAgICAgUmVmUHRyPEJsb2I+IGJsb2IgPSBs
aXN0LT5pdGVtKGkpLT5nZXRBc0ZpbGUoKTsKKyAgICAgICAgICAgIGlmIChibG9iLT5pc0ZpbGUo
KSkKKyAgICAgICAgICAgICAgICBmaWxlcy0+YXBwZW5kKHN0YXRpY19jYXN0PEZpbGUqPihibG9i
LmdldCgpKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZpbGVzOwogfQogCiB2b2lk
IENsaXBib2FyZENocm9taXVtOjpzZXREcmFnSW1hZ2UoQ2FjaGVkSW1hZ2UqIGltYWdlLCBOb2Rl
KiBub2RlLCBjb25zdCBJbnRQb2ludCYgbG9jKQpAQCAtMzE5LDI3ICs0NTQsMTUgQEAgdm9pZCBD
bGlwYm9hcmRDaHJvbWl1bTo6d3JpdGVQbGFpblRleHQoY29uc3QgU3RyaW5nJiB0ZXh0KQogYm9v
bCBDbGlwYm9hcmRDaHJvbWl1bTo6aGFzRGF0YSgpCiB7CiAgICAgQVNTRVJUKGlzRm9yRHJhZ0Fu
ZERyb3AoKSk7Ci0gICAgaWYgKCFtX2RhdGFPYmplY3QpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIHJldHVybiBtX2RhdGFPYmplY3QtPmhhc0RhdGEoKTsKKyAgICAvLyBGSVhNRTogUGVy
aGFwcyB0aGlzIGlzIHRoZSByZWFzb24gd2UgY2FuJ3QgZHJhZyBhbmQgZHJvcCB3aXRoIG5vIGRh
dGEgc2V0PworICAgIHJldHVybiBtX2RhdGFPYmplY3QtPml0ZW1zKCktPmxlbmd0aCgpID4gMDsK
IH0KIAogI2lmIEVOQUJMRShEQVRBX1RSQU5TRkVSX0lURU1TKQogUGFzc1JlZlB0cjxEYXRhVHJh
bnNmZXJJdGVtTGlzdD4gQ2xpcGJvYXJkQ2hyb21pdW06Oml0ZW1zKCkKIHsKLSAgICBSZWZQdHI8
RGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bT4gaXRlbXMgPSBEYXRhVHJhbnNmZXJJdGVtTGlz
dENocm9taXVtOjpjcmVhdGUodGhpcywgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+c2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpKTsKLQotICAgIGlmICghbV9kYXRhT2JqZWN0KQotICAgICAgICByZXR1cm4g
aXRlbXM7Ci0KLSAgICBpZiAoaXNGb3JDb3B5QW5kUGFzdGUoKSAmJiBwb2xpY3koKSA9PSBDbGlw
Ym9hcmRSZWFkYWJsZSkgewotICAgICAgICAvLyBJdGVyYXRlIHRocm91Z2ggdGhlIHR5cGVzIGFu
ZCBhZGQgdGhlbS4KLSAgICAgICAgSGFzaFNldDxTdHJpbmc+IHR5cGVzID0gbV9kYXRhT2JqZWN0
LT50eXBlcygpOwotICAgICAgICBmb3IgKEhhc2hTZXQ8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSB0eXBlcy5iZWdpbigpOyBpdCAhPSB0eXBlcy5lbmQoKTsgKytpdCkKLSAgICAgICAgICAg
IGl0ZW1zLT5hZGRQYXN0ZWJvYXJkSXRlbSgqaXQpOwotICAgIH0KLSAgICByZXR1cm4gaXRlbXM7
CisgICAgcmV0dXJuIERhdGFUcmFuc2Zlckl0ZW1MaXN0V3JhcHBlcjo6Y3JlYXRlKHRoaXMsIG1f
ZGF0YU9iamVjdC0+aXRlbXMoKSk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmgKaW5kZXggOGIxNzQ1Mjdh
MGNjZGYxNzM2MzIwNDgzNzUxYWI3ZmY5ZjZmZGFlNC4uZTBhNmVkOThiYWFmOGIyY2Q1ZmMzYmM4
ZmJlNmI3ZGJmZjc0YmYzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
aHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5oCkBAIC04NCw2ICs4NCw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICNpZiBFTkFCTEUoREFUQV9UUkFOU0ZFUl9JVEVNUykKICAgICAgICAgdmlydHVh
bCBQYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1MaXN0PiBpdGVtcygpOwogI2VuZGlmCisgICAg
ICAgIEZyYW1lKiBmcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWU7IH0KIAogICAgIHByaXZh
dGU6CiAgICAgICAgIENsaXBib2FyZENocm9taXVtKENsaXBib2FyZFR5cGUsIFBhc3NSZWZQdHI8
Q2hyb21pdW1EYXRhT2JqZWN0PiwgQ2xpcGJvYXJkQWNjZXNzUG9saWN5LCBGcmFtZSopOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRGF0YVRyYW5zZmVySXRl
bUNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RhdGFUcmFu
c2Zlckl0ZW1DaHJvbWl1bS5jcHAKaW5kZXggYTc5YWU4NWViYzMzY2FmZDYxZTYyMWEwYWQ3NjEx
ZWY3NzAwOWRjNS4uNzY4MzQ0MzhjYWM0ZjEwMTVmMjg4MGUxOTc0MDQ5Y2M2YzcyODQzZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRGF0YVRyYW5zZmVySXRl
bUNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EYXRh
VHJhbnNmZXJJdGVtQ2hyb21pdW0uY3BwCkBAIC0zNCw2NSArMzQsMTYxIEBACiAjaWYgRU5BQkxF
KERBVEFfVFJBTlNGRVJfSVRFTVMpCiAKICNpbmNsdWRlICJCbG9iLmgiCi0jaW5jbHVkZSAiQ2xp
cGJvYXJkLmgiCi0jaW5jbHVkZSAiQ2xpcGJvYXJkQ2hyb21pdW0uaCIKICNpbmNsdWRlICJDbGlw
Ym9hcmRNaW1lVHlwZXMuaCIKICNpbmNsdWRlICJDbGlwYm9hcmRVdGlsaXRpZXNDaHJvbWl1bS5o
IgorI2luY2x1ZGUgIkRhdGFUcmFuc2Zlckl0ZW0uaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN1cHBv
cnQuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKICNpbmNsdWRlICJTdHJpbmdDYWxsYmFj
ay5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NSZWZQdHI8RGF0YVRyYW5zZmVySXRl
bUNocm9taXVtPiBEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW06OmNyZWF0ZUZyb21QYXN0ZWJvYXJk
KFBhc3NSZWZQdHI8Q2xpcGJvYXJkPiBvd25lciwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCwgY29uc3QgU3RyaW5nJiB0eXBlKQorRGF0YVRyYW5zZmVySXRlbUNocm9taXVtOjp+RGF0
YVRyYW5zZmVySXRlbUNocm9taXVtKCkKIHsKLSAgICBpZiAodHlwZSA9PSBtaW1lVHlwZVRleHRQ
bGFpbiB8fCB0eXBlID09IG1pbWVUeXBlVGV4dEhUTUwpCi0gICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgRGF0YVRyYW5zZmVySXRlbUNocm9taXVtKG93bmVyLCBjb250ZXh0LCBQYXN0ZWJvYXJk
U291cmNlLCBEYXRhVHJhbnNmZXJJdGVtOjpraW5kU3RyaW5nLCB0eXBlLCAiIikpOwotICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgRGF0YVRyYW5zZmVySXRlbUNocm9taXVtKG93bmVyLCBjb250ZXh0
LCBQYXN0ZWJvYXJkU291cmNlLCBEYXRhVHJhbnNmZXJJdGVtOjpraW5kRmlsZSwgdHlwZSwgIiIp
KTsKIH0KIAotUGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0+IERhdGFUcmFuc2Zl
ckl0ZW1DaHJvbWl1bTo6Y3JlYXRlKFBhc3NSZWZQdHI8Q2xpcGJvYXJkPiBvd25lciwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFN0cmluZyYgZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHR5cGUpCit2b2lk
IERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bTo6Z2V0QXNTdHJpbmcoUGFzc1JlZlB0cjxTdHJpbmdD
YWxsYmFjaz4sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKSBjb25zdAogewotICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgRGF0YVRyYW5zZmVySXRlbUNocm9taXVtKG93bmVyLCBjb250ZXh0LCBJbnRl
cm5hbFNvdXJjZSwgRGF0YVRyYW5zZmVySXRlbTo6a2luZFN0cmluZywgdHlwZSwgZGF0YSkpOwog
fQogCi1QYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW0+IERhdGFUcmFuc2Zlckl0ZW06OmNyZWF0
ZShQYXNzUmVmUHRyPENsaXBib2FyZD4gb3duZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgU3RyaW5nJiBkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiB0eXBlKQorUGFzc1JlZlB0cjxCbG9i
PiBEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW06OmdldEFzRmlsZSgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bTo6Y3JlYXRlKG93bmVyLCBjb250ZXh0LCBkYXRh
LCB0eXBlKTsKKyAgICByZXR1cm4gMDsKK30KKworU3RyaW5nIERhdGFUcmFuc2Zlckl0ZW1DaHJv
bWl1bTo6bGVnYWN5R2V0QXNTdHJpbmcoKSBjb25zdAoreworICAgIHJldHVybiBTdHJpbmcoKTsK
K30KKworU3RyaW5nIERhdGFUcmFuc2ZlclVSSUxpc3RJdGVtOjpraW5kKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gRGF0YVRyYW5zZmVySXRlbTo6a2luZFN0cmluZzsKK30KKworU3RyaW5nIERhdGFU
cmFuc2ZlclVSSUxpc3RJdGVtOjp0eXBlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbWltZVR5cGVU
ZXh0VVJJTGlzdDsKK30KKworU3RyaW5nIERhdGFUcmFuc2ZlckhUTUxJdGVtOjpraW5kKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gRGF0YVRyYW5zZmVySXRlbTo6a2luZFN0cmluZzsKK30KKworU3Ry
aW5nIERhdGFUcmFuc2ZlckhUTUxJdGVtOjp0eXBlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbWlt
ZVR5cGVUZXh0SFRNTDsKK30KKworUGFzc1JlZlB0cjxCdWZmZXJlZERhdGFUcmFuc2ZlclN0cmlu
Z0l0ZW0+IEJ1ZmZlcmVkRGF0YVRyYW5zZmVyU3RyaW5nSXRlbTo6Y3JlYXRlKGNvbnN0IFN0cmlu
ZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcg
QnVmZmVyZWREYXRhVHJhbnNmZXJTdHJpbmdJdGVtKHR5cGUsIGRhdGEpKTsKIH0KIAotRGF0YVRy
YW5zZmVySXRlbUNocm9taXVtOjpEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0oUGFzc1JlZlB0cjxD
bGlwYm9hcmQ+IG93bmVyLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBEYXRhU291
cmNlIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBraW5kLCBjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0
IFN0cmluZyYgZGF0YSkKLSAgICA6IERhdGFUcmFuc2Zlckl0ZW0ob3duZXIsIGtpbmQsIHR5cGUp
Ci0gICAgLCBtX2NvbnRleHQoY29udGV4dCkKLSAgICAsIG1fc291cmNlKHNvdXJjZSkKK1N0cmlu
ZyBCdWZmZXJlZERhdGFUcmFuc2ZlclN0cmluZ0l0ZW06OmtpbmQoKSBjb25zdAoreworICAgIHJl
dHVybiBEYXRhVHJhbnNmZXJJdGVtOjpraW5kU3RyaW5nOworfQorCitTdHJpbmcgQnVmZmVyZWRE
YXRhVHJhbnNmZXJTdHJpbmdJdGVtOjp0eXBlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90eXBl
OworfQorCit2b2lkIEJ1ZmZlcmVkRGF0YVRyYW5zZmVyU3RyaW5nSXRlbTo6Z2V0QXNTdHJpbmco
UGFzc1JlZlB0cjxTdHJpbmdDYWxsYmFjaz4gY2FsbGJhY2ssIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAgY2FsbGJhY2stPnNjaGVkdWxlQ2FsbGJhY2soY29u
dGV4dCwgbV9kYXRhKTsKK30KKworU3RyaW5nIEJ1ZmZlcmVkRGF0YVRyYW5zZmVyU3RyaW5nSXRl
bTo6bGVnYWN5R2V0QXNTdHJpbmcoKSBjb25zdAoreworICAgIHJldHVybiBtX2RhdGE7Cit9CisK
K0J1ZmZlcmVkRGF0YVRyYW5zZmVyU3RyaW5nSXRlbTo6QnVmZmVyZWREYXRhVHJhbnNmZXJTdHJp
bmdJdGVtKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKQorICAgIDogbV90
eXBlKHR5cGUpCiAgICAgLCBtX2RhdGEoZGF0YSkKIHsKIH0KIAotdm9pZCBEYXRhVHJhbnNmZXJJ
dGVtQ2hyb21pdW06OmdldEFzU3RyaW5nKFBhc3NSZWZQdHI8U3RyaW5nQ2FsbGJhY2s+IGNhbGxi
YWNrKQorUGFzc1JlZlB0cjxCdWZmZXJlZERhdGFUcmFuc2ZlclVSSUxpc3RJdGVtPiBCdWZmZXJl
ZERhdGFUcmFuc2ZlclVSSUxpc3RJdGVtOjpjcmVhdGUoY29uc3QgU3RyaW5nJiBkYXRhLCBjb25z
dCBTdHJpbmcmIHRpdGxlKQogewotICAgIGlmICgob3duZXIoKS0+cG9saWN5KCkgIT0gQ2xpcGJv
YXJkUmVhZGFibGUgJiYgb3duZXIoKS0+cG9saWN5KCkgIT0gQ2xpcGJvYXJkV3JpdGFibGUpCi0g
ICAgICAgIHx8IGtpbmQoKSAhPSBraW5kU3RyaW5nKQotICAgICAgICByZXR1cm47CisgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBCdWZmZXJlZERhdGFUcmFuc2ZlclVSSUxpc3RJdGVtKGRhdGEsIHRp
dGxlKSk7Cit9CiAKLSAgICBpZiAobV9zb3VyY2UgPT0gSW50ZXJuYWxTb3VyY2UpIHsKLSAgICAg
ICAgY2FsbGJhY2stPnNjaGVkdWxlQ2FsbGJhY2sobV9jb250ZXh0LCBtX2RhdGEpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQordm9pZCBCdWZmZXJlZERhdGFUcmFuc2ZlclVSSUxpc3RJdGVtOjpn
ZXRBc1N0cmluZyhQYXNzUmVmUHRyPFN0cmluZ0NhbGxiYWNrPiBjYWxsYmFjaywgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCkgY29uc3QKK3sKKyAgICBjYWxsYmFjay0+c2NoZWR1bGVD
YWxsYmFjayhjb250ZXh0LCBtX2RhdGEpOworfQogCi0gICAgQVNTRVJUKG1fc291cmNlID09IFBh
c3RlYm9hcmRTb3VyY2UpOwotICAgIGlmIChzdGF0aWNfY2FzdDxDbGlwYm9hcmRDaHJvbWl1bSo+
KG93bmVyKCkpLT5wbGF0Zm9ybUNsaXBib2FyZENoYW5nZWQoKSkKLSAgICAgICAgcmV0dXJuOwor
U3RyaW5nIEJ1ZmZlcmVkRGF0YVRyYW5zZmVyVVJJTGlzdEl0ZW06OmxlZ2FjeUdldEFzU3RyaW5n
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kYXRhOworfQorCitTdHJpbmcgQnVmZmVyZWREYXRh
VHJhbnNmZXJVUklMaXN0SXRlbTo6dGl0bGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3RpdGxl
OworfQogCit2b2lkIEJ1ZmZlcmVkRGF0YVRyYW5zZmVyVVJJTGlzdEl0ZW06OnNldFRpdGxlKGNv
bnN0IFN0cmluZyYgdGl0bGUpCit7CisgICAgbV90aXRsZSA9IHRpdGxlOworfQorCitCdWZmZXJl
ZERhdGFUcmFuc2ZlclVSSUxpc3RJdGVtOjpCdWZmZXJlZERhdGFUcmFuc2ZlclVSSUxpc3RJdGVt
KGNvbnN0IFN0cmluZyYgZGF0YSwgY29uc3QgU3RyaW5nJiB0aXRsZSkKKyAgICA6IG1fZGF0YShk
YXRhKQorICAgICwgbV90aXRsZSh0aXRsZSkKK3sKK30KKworUGFzc1JlZlB0cjxCdWZmZXJlZERh
dGFUcmFuc2ZlckhUTUxJdGVtPiBCdWZmZXJlZERhdGFUcmFuc2ZlckhUTUxJdGVtOjpjcmVhdGUo
Y29uc3QgU3RyaW5nJiBkYXRhLCBjb25zdCBLVVJMJiBiYXNlVVJMKQoreworICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgQnVmZmVyZWREYXRhVHJhbnNmZXJIVE1MSXRlbShkYXRhLCBiYXNlVVJMKSk7
Cit9CisKK3ZvaWQgQnVmZmVyZWREYXRhVHJhbnNmZXJIVE1MSXRlbTo6Z2V0QXNTdHJpbmcoUGFz
c1JlZlB0cjxTdHJpbmdDYWxsYmFjaz4gY2FsbGJhY2ssIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQpIGNvbnN0Cit7CisgICAgY2FsbGJhY2stPnNjaGVkdWxlQ2FsbGJhY2soY29udGV4
dCwgbV9kYXRhKTsKK30KKworU3RyaW5nIEJ1ZmZlcmVkRGF0YVRyYW5zZmVySFRNTEl0ZW06Omxl
Z2FjeUdldEFzU3RyaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kYXRhOworfQorCitLVVJM
IEJ1ZmZlcmVkRGF0YVRyYW5zZmVySFRNTEl0ZW06OmJhc2VVUkwoKSBjb25zdAoreworICAgIHJl
dHVybiBtX2Jhc2VVUkw7Cit9CisKK3ZvaWQgQnVmZmVyZWREYXRhVHJhbnNmZXJIVE1MSXRlbTo6
c2V0QmFzZVVSTChjb25zdCBLVVJMJiBiYXNlVVJMKQoreworICAgIG1fYmFzZVVSTCA9IGJhc2VV
Ukw7Cit9CisKK0J1ZmZlcmVkRGF0YVRyYW5zZmVySFRNTEl0ZW06OkJ1ZmZlcmVkRGF0YVRyYW5z
ZmVySFRNTEl0ZW0oY29uc3QgU3RyaW5nJiBkYXRhLCBjb25zdCBLVVJMJiBiYXNlVVJMKQorICAg
IDogbV9kYXRhKGRhdGEpCisgICAgLCBtX2Jhc2VVUkwoYmFzZVVSTCkKK3sKK30KKworU3RyaW5n
IERhdGFUcmFuc2ZlckZpbGVJdGVtOjpraW5kKCkgY29uc3QKK3sKKyAgICByZXR1cm4gRGF0YVRy
YW5zZmVySXRlbTo6a2luZEZpbGU7Cit9CisKK1N0cmluZyBEYXRhVHJhbnNmZXJGaWxlSXRlbTo6
dHlwZSgpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudC4KKyAgICByZXR1cm4gU3Ry
aW5nKCk7Cit9CisKKyNpZiAwCiAgICAgLy8gVGhpcyBpcyB1Z2x5IGJ1dCB0aGVyZSdzIG5vIHJl
YWwgYWx0ZXJuYXRpdmUuCiAgICAgaWYgKHR5cGUoKSA9PSBtaW1lVHlwZVRleHRQbGFpbikgewot
ICAgICAgICBjYWxsYmFjay0+c2NoZWR1bGVDYWxsYmFjayhtX2NvbnRleHQsIFBsYXRmb3JtU3Vw
cG9ydDo6Y2xpcGJvYXJkUmVhZFBsYWluVGV4dChjdXJyZW50UGFzdGVib2FyZEJ1ZmZlcigpKSk7
CisgICAgICAgIGNhbGxiYWNrLT5zY2hlZHVsZUNhbGxiYWNrKGNvbnRleHQsIFBsYXRmb3JtU3Vw
cG9ydDo6Y2xpcGJvYXJkUmVhZFBsYWluVGV4dChjdXJyZW50UGFzdGVib2FyZEJ1ZmZlcigpKSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKHR5cGUoKSA9PSBtaW1lVHlwZVRleHRI
VE1MKSB7CkBAIC0xMDAsNyArMTk2LDcgQEAgdm9pZCBEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW06
OmdldEFzU3RyaW5nKFBhc3NSZWZQdHI8U3RyaW5nQ2FsbGJhY2s+IGNhbGxiYWNrKQogICAgICAg
ICBLVVJMIGlnbm9yZWRTb3VyY2VVUkw7CiAgICAgICAgIHVuc2lnbmVkIGlnbm9yZWQ7CiAgICAg
ICAgIFBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJvYXJkUmVhZEhUTUwoY3VycmVudFBhc3RlYm9hcmRC
dWZmZXIoKSwgJmh0bWwsICZpZ25vcmVkU291cmNlVVJMLCAmaWdub3JlZCwgJmlnbm9yZWQpOwot
ICAgICAgICBjYWxsYmFjay0+c2NoZWR1bGVDYWxsYmFjayhtX2NvbnRleHQsIGh0bWwpOworICAg
ICAgICBjYWxsYmFjay0+c2NoZWR1bGVDYWxsYmFjayhjb250ZXh0LCBodG1sKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTExMSw4ICsyMDcs
NyBAQCBQYXNzUmVmUHRyPEJsb2I+IERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bTo6Z2V0QXNGaWxl
KCkKICAgICBpZiAobV9zb3VyY2UgPT0gSW50ZXJuYWxTb3VyY2UpCiAgICAgICAgIHJldHVybiAw
OwogCi0gICAgaWYgKHN0YXRpY19jYXN0PENsaXBib2FyZENocm9taXVtKj4ob3duZXIoKSktPnBs
YXRmb3JtQ2xpcGJvYXJkQ2hhbmdlZCgpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAvLyBGSVhN
RTogTmVlZCB0byByZS1hZGQgdGhlIGNsaXBib2FyZCBjaGFuZ2VkIGNoZWNrLgogCiAgICAgQVNT
RVJUKG1fc291cmNlID09IFBhc3RlYm9hcmRTb3VyY2UpOwogICAgIGlmICh0eXBlKCkgPT0gbWlt
ZVR5cGVJbWFnZVBuZykgewpAQCAtMTM1LDYgKzIzMCw3IEBAIFBhc3NSZWZQdHI8QmxvYj4gRGF0
YVRyYW5zZmVySXRlbUNocm9taXVtOjpnZXRBc0ZpbGUoKQogICAgIH0KICAgICByZXR1cm4gMDsK
IH0KKyNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRGF0YVRyYW5zZmVySXRlbUNocm9taXVt
LmgKaW5kZXggMTQ0ZTQwZjdjZmM2NzJmM2ZlOGE0NzFmMzRlOTg5ZDQxNDhiZTg2Ny4uNDdlNDk2
MDE0OWMwMmUxNTYwY2E4ZmU4ODVjMWI0NDM5NTdmOTM3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRGF0YVRyYW5zZmVySXRlbUNocm9taXVtLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRGF0YVRyYW5zZmVySXRlbUNocm9taXVt
LmgKQEAgLTMzLDM0ICszMywxOTggQEAKIAogI2lmIEVOQUJMRShEQVRBX1RSQU5TRkVSX0lURU1T
KQogCi0jaW5jbHVkZSAiRGF0YVRyYW5zZmVySXRlbS5oIgorI2luY2x1ZGUgIktVUkwuaCIKKyNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFz
cyBDbGlwYm9hcmQ7CitjbGFzcyBCbG9iOworY2xhc3MgRmlsZTsKIGNsYXNzIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQ7CitjbGFzcyBTaGFyZWRCdWZmZXI7CitjbGFzcyBTdHJpbmdDYWxsYmFjazsK
IAotY2xhc3MgRGF0YVRyYW5zZmVySXRlbUNocm9taXVtIDogcHVibGljIERhdGFUcmFuc2Zlckl0
ZW0geworLy8gVGhpcyBpbnRlcmZhY2UgaXMgc2ltaWxhciB0byBidXQgbm90IHF1aXRlIHRoZSBz
YW1lIGFzIHRoZSBJREwgaW50ZXJmYWNlIHNpbmNlIHdlIGRvbid0IHJlcXVpcmUKKy8vIHRoZSBl
eGFjdCBzYW1lIHBhcmFtZXRlcnMgZm9yIGFsbCB0aGUgZnVuY3Rpb25zLCBhbmQgYWxzbyByZXF1
aXJlIGFkZGl0aW9uYWwgbWV0aG9kcyBmb3IKKy8vIHN1cHBvcnRpbmcgbGVnYWN5IG9wZXJhdGlv
bnMuCitjbGFzcyBEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0gOiBwdWJsaWMgUmVmQ291bnRlZDxE
YXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0
cjxEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0+IGNyZWF0ZUZyb21QYXN0ZWJvYXJkKFBhc3NSZWZQ
dHI8Q2xpcGJvYXJkPiBvd25lciwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmlu
ZyYgdHlwZSk7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUNocm9taXVt
PiBjcmVhdGUoUGFzc1JlZlB0cjxDbGlwYm9hcmQ+IG93bmVyLCBTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgY29uc3QgU3RyaW5nJiBkYXRhLCBjb25zdCBTdHJpbmcmIHR5cGUpOworICAgIHZpcnR1
YWwgfkRhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bSgpOwogCi0gICAgdmlydHVhbCB2b2lkIGdldEFz
U3RyaW5nKFBhc3NSZWZQdHI8U3RyaW5nQ2FsbGJhY2s+KTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8QmxvYj4gZ2V0QXNGaWxlKCk7CisgICAgLy8gRklYTUU6IEJlZm9yZSBsYW5kaW5nIHRoaXMg
Y2hhbmdlLCB3ZSBwcm9iYWJseSB3YW50IHRvIHJlLXZpcnR1YWxpemUgZG9tL0RhdGFUcmFuc2Zl
ckl0ZW0KKyAgICAvLyBmaXJzdC4gSXQgd2lsbCBtYWtlIHRoaXMgcGF0Y2ggYSBiaXQgc21hbGxl
ci4KKyAgICB2aXJ0dWFsIFN0cmluZyBraW5kKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgU3Ry
aW5nIHR5cGUoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0QXNTdHJpbmcoUGFz
c1JlZlB0cjxTdHJpbmdDYWxsYmFjaz4sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKSBjb25zdDsK
KyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8QmxvYj4gZ2V0QXNGaWxlKCkgY29uc3Q7CisgICAgLy8g
VXNlZCB0byBpbXBsZW1lbnQgQ2xpcGJvYXJkQ2hyb21pdW06OmdldERhdGEoKSBhbmQgc2VyaWFs
aXphdGlvbiBmb3IgdGhlIFdlYktpdCBsYXllci4KKyAgICB2aXJ0dWFsIFN0cmluZyBsZWdhY3lH
ZXRBc1N0cmluZygpIGNvbnN0OworfTsKKworLy8gU3BlY2lhbGl6YXRpb25zIGZvciBkYXRhIGZs
YXZvcnMgd2l0aCBhc3NvY2lhdGVkIG1ldGFkYXRhLgorY2xhc3MgRGF0YVRyYW5zZmVyVVJJTGlz
dEl0ZW0gOiBwdWJsaWMgRGF0YVRyYW5zZmVySXRlbUNocm9taXVtIHsKK3B1YmxpYzoKKyAgICB2
aXJ0dWFsIFN0cmluZyBraW5kKCkgY29uc3Q7CisgICAgdmlydHVhbCBTdHJpbmcgdHlwZSgpIGNv
bnN0OworCisgICAgdmlydHVhbCBTdHJpbmcgdGl0bGUoKSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCB2b2lkIHNldFRpdGxlKGNvbnN0IFN0cmluZyYpID0gMDsKK307CisKK2NsYXNzIERhdGFUcmFu
c2ZlckhUTUxJdGVtIDogcHVibGljIERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bSB7CitwdWJsaWM6
CisgICAgdmlydHVhbCBTdHJpbmcga2luZCgpIGNvbnN0OworICAgIHZpcnR1YWwgU3RyaW5nIHR5
cGUoKSBjb25zdDsKKworICAgIHZpcnR1YWwgS1VSTCBiYXNlVVJMKCkgY29uc3QgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBzZXRCYXNlVVJMKGNvbnN0IEtVUkwmKSA9IDA7Cit9OworCisvLyBNZW1v
cnktYmFja2VkIHNwZWNpYWxpemF0aW9ucy4gVXNlZCBmb3IgaGFuZGxpbmcgZHJhZ3MsIGRyb3Bz
LCBhbmQgd3JpdGluZyB0byB0aGUgcGFzdGVib2FyZC4KK2NsYXNzIEJ1ZmZlcmVkRGF0YVRyYW5z
ZmVyU3RyaW5nSXRlbSA6IHB1YmxpYyBEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0geworcHVibGlj
OgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJ1ZmZlcmVkRGF0YVRyYW5zZmVyU3RyaW5nSXRlbT4g
Y3JlYXRlKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKTsKKworICAgIHZp
cnR1YWwgU3RyaW5nIGtpbmQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0cmluZyB0eXBlKCkgY29u
c3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0QXNTdHJpbmcoUGFzc1JlZlB0cjxTdHJpbmdDYWxs
YmFjaz4sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0cmlu
ZyBsZWdhY3lHZXRBc1N0cmluZygpIGNvbnN0OworCitwcml2YXRlOgorICAgIEJ1ZmZlcmVkRGF0
YVRyYW5zZmVyU3RyaW5nSXRlbShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0
YSk7CisKKyAgICBTdHJpbmcgbV90eXBlOworICAgIFN0cmluZyBtX2RhdGE7Cit9OworCisvLyBG
SVhNRTogVGhpcyByZXN1bHRzIGluIGEgbG90IG9mIGR1cGxpY2F0aW9uLiBNYXliZSB3ZSBjYW4g
dXNlIHZpcnR1YWwgaW5oZXJpdGFuY2UgYW5kIG91ciBvd24KKy8vIHJlZigpL2RlcmVmKCkgbWV0
aG9kcyBzbyB3ZSBjYW4gcmV1c2UgRGF0YVRyYW5zZmVyU3RyaW5nSXRlbS4KKy8vIC4uLiBhbHRl
cm5hdGVseSwgc2luY2UgdGhpcyBpcyBvbmx5IHVzZWQgYnkgdGhlIGRyYWdnaW5nIGNvZGUsIGp1
c3QgaW1wbGVtZW50IHRoZSBzcGVjaWFsaXphdGlvbnMKKy8vIGZvciBkcmFnZ2luZy4KK2NsYXNz
IEJ1ZmZlcmVkRGF0YVRyYW5zZmVyVVJJTGlzdEl0ZW0gOiBwdWJsaWMgRGF0YVRyYW5zZmVyVVJJ
TGlzdEl0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJ1ZmZlcmVkRGF0YVRy
YW5zZmVyVVJJTGlzdEl0ZW0+IGNyZWF0ZShjb25zdCBTdHJpbmcmIGRhdGEsIGNvbnN0IFN0cmlu
ZyYgdGl0bGUpOworCisgICAgdmlydHVhbCB2b2lkIGdldEFzU3RyaW5nKFBhc3NSZWZQdHI8U3Ry
aW5nQ2FsbGJhY2s+LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KikgY29uc3Q7CisgICAgdmlydHVh
bCBTdHJpbmcgbGVnYWN5R2V0QXNTdHJpbmcoKSBjb25zdDsKKworICAgIHZpcnR1YWwgU3RyaW5n
IHRpdGxlKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFRpdGxlKGNvbnN0IFN0cmluZyYp
OworCitwcml2YXRlOgorICAgIEJ1ZmZlcmVkRGF0YVRyYW5zZmVyVVJJTGlzdEl0ZW0oY29uc3Qg
U3RyaW5nJiBkYXRhLCBjb25zdCBTdHJpbmcmIHRpdGxlKTsKKworICAgIFN0cmluZyBtX2RhdGE7
CisgICAgU3RyaW5nIG1fdGl0bGU7Cit9OworCitjbGFzcyBCdWZmZXJlZERhdGFUcmFuc2ZlckhU
TUxJdGVtIDogcHVibGljIERhdGFUcmFuc2ZlckhUTUxJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxCdWZmZXJlZERhdGFUcmFuc2ZlckhUTUxJdGVtPiBjcmVhdGUoY29uc3Qg
U3RyaW5nJiBkYXRhLCBjb25zdCBLVVJMJiBiYXNlVVJMKTsKKworICAgIHZpcnR1YWwgdm9pZCBn
ZXRBc1N0cmluZyhQYXNzUmVmUHRyPFN0cmluZ0NhbGxiYWNrPiwgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCopIGNvbnN0OworICAgIHZpcnR1YWwgU3RyaW5nIGxlZ2FjeUdldEFzU3RyaW5nKCkgY29u
c3Q7CisKKyAgICB2aXJ0dWFsIEtVUkwgYmFzZVVSTCgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9p
ZCBzZXRCYXNlVVJMKGNvbnN0IEtVUkwmKTsKIAogcHJpdmF0ZToKLSAgICBlbnVtIERhdGFTb3Vy
Y2UgewotICAgICAgICBQYXN0ZWJvYXJkU291cmNlLAotICAgICAgICBJbnRlcm5hbFNvdXJjZSwK
KyAgICBCdWZmZXJlZERhdGFUcmFuc2ZlckhUTUxJdGVtKGNvbnN0IFN0cmluZyYgZGF0YSwgY29u
c3QgS1VSTCYgYmFzZVVSTCk7CisKKyAgICBTdHJpbmcgbV9kYXRhOworICAgIEtVUkwgbV9iYXNl
VVJMOworfTsKKworY2xhc3MgRGF0YVRyYW5zZmVyRmlsZUl0ZW0gOiBwdWJsaWMgRGF0YVRyYW5z
ZmVySXRlbUNocm9taXVtIHsKK3B1YmxpYzoKKyAgICBlbnVtIFN0b3JhZ2VUeXBlIHsKKyAgICAg
ICAgRmlsZW5hbWVUeXBlLAorICAgICAgICBTaGFyZWRCdWZmZXJUeXBlLAogICAgIH07CiAKLSAg
ICBEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0oUGFzc1JlZlB0cjxDbGlwYm9hcmQ+IG93bmVyLCBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRGF0YVNvdXJjZSwgY29uc3QgU3RyaW5nJiBraW5kLCBj
b25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSk7CisgICAgdmlydHVhbCBTdHJp
bmcga2luZCgpIGNvbnN0OworICAgIHZpcnR1YWwgU3RyaW5nIHR5cGUoKSBjb25zdDsKKworICAg
IC8vIEZha2UgUlRUSS4KKyAgICB2aXJ0dWFsIFN0b3JhZ2VUeXBlIHN0b3JhZ2VUeXBlKCkgPSAw
OworfTsKIAotICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIG1fY29udGV4dDsKLSAgICBjb25z
dCBEYXRhU291cmNlIG1fc291cmNlOwotICAgIGNvbnN0IFN0cmluZyBtX2RhdGE7CitjbGFzcyBE
YXRhVHJhbnNmZXJGaWxlbmFtZUl0ZW0gOiBwdWJsaWMgRGF0YVRyYW5zZmVyRmlsZUl0ZW0gewor
cHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFUcmFuc2ZlckZpbGVuYW1lSXRlbT4g
Y3JlYXRlKGNvbnN0IFN0cmluZyYpOworCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEJsb2I+IGdl
dEFzRmlsZSgpIGNvbnN0OworCisgICAgdmlydHVhbCBTdG9yYWdlVHlwZSBzdG9yYWdlVHlwZSgp
ID0gMDsKKworcHJpdmF0ZToKKyAgICBEYXRhVHJhbnNmZXJGaWxlbmFtZUl0ZW0oY29uc3QgU3Ry
aW5nJik7CisKKyAgICBTdHJpbmcgbV9maWxlbmFtZTsKK307CisKK2NsYXNzIERhdGFUcmFuc2Zl
clNoYXJlZEJ1ZmZlckl0ZW0gOiBwdWJsaWMgRGF0YVRyYW5zZmVyRmlsZUl0ZW0geworcHVibGlj
OgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFUcmFuc2ZlclNoYXJlZEJ1ZmZlckl0ZW0+IGNy
ZWF0ZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9uLCBQYXNzUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4pOworCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEJsb2I+IGdldEFz
RmlsZSgpIGNvbnN0OworCisgICAgdmlydHVhbCBTdG9yYWdlVHlwZSBzdG9yYWdlVHlwZSgpID0g
MDsKKworcHJpdmF0ZToKKyAgICBEYXRhVHJhbnNmZXJTaGFyZWRCdWZmZXJJdGVtKGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHRlbnNpb24sIFBhc3NSZWZQdHI8U2hhcmVkQnVm
ZmVyPik7CisKKyAgICBTdHJpbmcgbV9uYW1lOworICAgIFN0cmluZyBtX2V4dGVuc2lvbjsKKyAg
ICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBtX2J1ZmZlcjsKK307CisKKy8vIFBhc3RlYm9hcmQgc3Bl
Y2lhbGl6YXRpb25zIHVzZWQgd2hlbiByZWFkaW5nIGZyb20gdGhlIHBhc3RlYm9hcmQuCisvLyBG
SVhNRTogV2UgcHJvYmFibHkgbmVlZCB0byByZW1lbWJlciB0aGUgYWN0aXZlIHBhc3RlYm9hcmQu
IE90aGVyd2lzZSwgaXQncyBwb3NzaWJsZSB3ZSBjb3VsZCBlbmQKKy8vIHVwIGluIGEgc2l0dWF0
aW9uIHdoZXJlIHNvbWVvbmUgbWFuYWdlcyB0byByZWFkIGEgYnVmZmVyIHRoZXkncmUgbm90IHN1
cHBvc2VkIHRvIGhhdmUgYWNjZXNzIHRvLgorY2xhc3MgUGFzdGVib2FyZERhdGFUcmFuc2ZlclN0
cmluZ0l0ZW0gOiBwdWJsaWMgRGF0YVRyYW5zZmVySXRlbUNocm9taXVtIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxQYXN0ZWJvYXJkRGF0YVRyYW5zZmVyU3RyaW5nSXRlbT4gY3Jl
YXRlKCk7CisKKyAgICB2aXJ0dWFsIFN0cmluZyBraW5kKCkgY29uc3Q7CisgICAgdmlydHVhbCBT
dHJpbmcgdHlwZSgpIGNvbnN0OworCisgICAgdmlydHVhbCB2b2lkIGdldEFzU3RyaW5nKFBhc3NS
ZWZQdHI8U3RyaW5nQ2FsbGJhY2s+LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KikgY29uc3Q7Cisg
ICAgdmlydHVhbCBTdHJpbmcgbGVnYWN5R2V0QXNTdHJpbmcoKSBjb25zdDsKKworcHJpdmF0ZToK
KyAgICBQYXN0ZWJvYXJkRGF0YVRyYW5zZmVyU3RyaW5nSXRlbSgpOworfTsKKworY2xhc3MgUGFz
dGVib2FyZERhdGFUcmFuc2ZlckhUTUxJdGVtIDogcHVibGljIERhdGFUcmFuc2ZlckhUTUxJdGVt
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxQYXN0ZWJvYXJkRGF0YVRyYW5zZmVy
SFRNTEl0ZW0+IGNyZWF0ZSgpOworCisgICAgdmlydHVhbCBTdHJpbmcga2luZCgpIGNvbnN0Owor
ICAgIHZpcnR1YWwgU3RyaW5nIHR5cGUoKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBnZXRB
c1N0cmluZyhQYXNzUmVmUHRyPFN0cmluZ0NhbGxiYWNrPiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCopIGNvbnN0OworICAgIHZpcnR1YWwgU3RyaW5nIGxlZ2FjeUdldEFzU3RyaW5nKCkgY29uc3Q7
CisKK3ByaXZhdGU6CisgICAgUGFzdGVib2FyZERhdGFUcmFuc2ZlckhUTUxJdGVtKCk7Cit9Owor
CitjbGFzcyBQYXN0ZWJvYXJkRGF0YVRyYW5zZmVySW1hZ2VJdGVtIDogcHVibGljIERhdGFUcmFu
c2Zlckl0ZW1DaHJvbWl1bSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8UGFzdGVi
b2FyZERhdGFUcmFuc2ZlckltYWdlSXRlbT4gY3JlYXRlKCk7CisKKyAgICB2aXJ0dWFsIFN0cmlu
ZyBraW5kKCkgY29uc3Q7CisgICAgdmlydHVhbCBTdHJpbmcgdHlwZSgpIGNvbnN0OworCisgICAg
dmlydHVhbCBQYXNzUmVmUHRyPEJsb2I+IGdldEFzRmlsZSgpIGNvbnN0OworCitwcml2YXRlOgor
ICAgIFBhc3RlYm9hcmREYXRhVHJhbnNmZXJJbWFnZUl0ZW0oKTsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVt
L0RhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bS5jcHAKaW5kZXggMzIwZTc0
OTE0NDY1MWJmMTE0ZjViMTZlMWExNmE3YzViOTg0ZmZlMy4uNzRmYmExOTBlMThhZDJmNGZiMjA0
YzllMTI2MDBmMTU1MjcxNzY2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y2hyb21pdW0vRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bS5jcHAK
QEAgLTMzLDI1ICszMywxOTUgQEAKIAogI2lmIEVOQUJMRShEQVRBX1RSQU5TRkVSX0lURU1TKQog
Ci0jaW5jbHVkZSAiQ2xpcGJvYXJkLmgiCisjaW5jbHVkZSAiQ2xpcGJvYXJkTWltZVR5cGVzLmgi
CisjaW5jbHVkZSAiRGF0YVRyYW5zZmVySXRlbS5oIgogI2luY2x1ZGUgIkRhdGFUcmFuc2Zlckl0
ZW1DaHJvbWl1bS5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc1JlZlB0cjxEYXRhVHJhbnNm
ZXJJdGVtTGlzdENocm9taXVtPiBEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtOjpjcmVhdGUo
UGFzc1JlZlB0cjxDbGlwYm9hcmQ+IG93bmVyLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0KQorbmFtZXNwYWNlIHsKKworY2xhc3MgQnVmZmVyZWREYXRhVHJhbnNmZXJJdGVtTGlzdCA6
IHB1YmxpYyBEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtIHsKK3B1YmxpYzoKKyAgICBCdWZm
ZXJlZERhdGFUcmFuc2Zlckl0ZW1MaXN0KCk7CisKKyAgICB2aXJ0dWFsIHNpemVfdCBsZW5ndGgo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUNocm9taXVt
PiBpdGVtKHVuc2lnbmVkIGxvbmcgaW5kZXgpOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVJdGVt
KHVuc2lnbmVkIGxvbmcgaW5kZXgpOworICAgIHZpcnR1YWwgdm9pZCBjbGVhcigpOworICAgIHZp
cnR1YWwgdm9pZCBhZGQoY29uc3QgU3RyaW5nJiBkYXRhLCBjb25zdCBTdHJpbmcmIHR5cGUsIEV4
Y2VwdGlvbkNvZGUmKTsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQgaW50ZXJuYWxBZGRT
dHJpbmcoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpOworICAgIHZpcnR1
YWwgdm9pZCBpbnRlcm5hbEFkZFVSTChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiB0
aXRsZSk7CisgICAgdmlydHVhbCB2b2lkIGludGVybmFsQWRkSFRNTChjb25zdCBTdHJpbmcmIG1h
cmt1cCwgY29uc3QgS1VSTCYgYmFzZVVSTCk7CisKKyAgICBWZWN0b3I8UmVmUHRyPERhdGFUcmFu
c2Zlckl0ZW1DaHJvbWl1bT4gPiBtX2l0ZW1zOworfTsKKworY2xhc3MgUGFzdGVib2FyZERhdGFU
cmFuc2Zlckl0ZW1MaXN0IDogcHVibGljIERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0gewor
cHVibGljOgorICAgIFBhc3RlYm9hcmREYXRhVHJhbnNmZXJJdGVtTGlzdCgpOworCisgICAgdmly
dHVhbCBzaXplX3QgbGVuZ3RoKCkgY29uc3Q7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPERhdGFU
cmFuc2Zlckl0ZW1DaHJvbWl1bT4gaXRlbSh1bnNpZ25lZCBsb25nIGluZGV4KTsKKyAgICB2aXJ0
dWFsIHZvaWQgZGVsZXRlSXRlbSh1bnNpZ25lZCBsb25nIGluZGV4KTsKKyAgICB2aXJ0dWFsIHZv
aWQgY2xlYXIoKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkKGNvbnN0IFN0cmluZyYgZGF0YSwgY29u
c3QgU3RyaW5nJiB0eXBlLCBFeGNlcHRpb25Db2RlJik7CisKK3ByaXZhdGU6CisgICAgdmlydHVh
bCB2b2lkIGludGVybmFsQWRkU3RyaW5nKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5n
JiBkYXRhKTsKKyAgICB2aXJ0dWFsIHZvaWQgaW50ZXJuYWxBZGRVUkwoY29uc3QgU3RyaW5nJiB1
cmwsIGNvbnN0IFN0cmluZyYgdGl0bGUpOworICAgIHZpcnR1YWwgdm9pZCBpbnRlcm5hbEFkZEhU
TUwoY29uc3QgU3RyaW5nJiBtYXJrdXAsIGNvbnN0IEtVUkwmIGJhc2VVUkwpOworCisgICAgLy8g
RklYTUU6IFRoaXMgaXMgYSBoYWNrIHRvIGFsbG93IHVzIHRvIGxhemlseSBpbml0aWFsaXplIG1f
aXRlbXMgZXZlbiB3aGVuIGNhbGxlZCB0aHJvdWdoCisgICAgLy8gY29uc3QgbWV0aG9kcy4gTWF5
YmUgdGhlcmUncyBhIGJldHRlciB3YXkgdG8gZG8gdGhpcyAoY2FzdCBhd2F5IGNvbnN0LW5lc3Mg
b24gdGhpcz8pCisgICAgdm9pZCBlbnN1cmVJdGVtc0luaXRpYWxpemVkKCkgY29uc3Q7CisKKyAg
ICBtdXRhYmxlIGJvb2wgbV9pbml0aWFsaXplZDsKKyAgICBtdXRhYmxlIFZlY3RvcjxSZWZQdHI8
RGF0YVRyYW5zZmVySXRlbUNocm9taXVtPiA+IG1faXRlbXM7Cit9OworCitCdWZmZXJlZERhdGFU
cmFuc2Zlckl0ZW1MaXN0OjpCdWZmZXJlZERhdGFUcmFuc2Zlckl0ZW1MaXN0KCkKK3sKK30KKwor
c2l6ZV90IEJ1ZmZlcmVkRGF0YVRyYW5zZmVySXRlbUxpc3Q6Omxlbmd0aCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1faXRlbXMuc2l6ZSgpOworfQorCitQYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0
ZW1DaHJvbWl1bT4gQnVmZmVyZWREYXRhVHJhbnNmZXJJdGVtTGlzdDo6aXRlbSh1bnNpZ25lZCBs
b25nIGluZGV4KQoreworICAgIGlmIChpbmRleCA+PSBsZW5ndGgoKSkKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgcmV0dXJuIG1faXRlbXNbaW5kZXhdOworfQorCit2b2lkIEJ1ZmZlcmVkRGF0YVRy
YW5zZmVySXRlbUxpc3Q6OmRlbGV0ZUl0ZW0odW5zaWduZWQgbG9uZyBpbmRleCkKK3sKKyAgICBp
ZiAoaW5kZXggPj0gbGVuZ3RoKCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2l0ZW1zLnJlbW92
ZShpbmRleCk7Cit9CisKK3ZvaWQgQnVmZmVyZWREYXRhVHJhbnNmZXJJdGVtTGlzdDo6Y2xlYXIo
KQoreworICAgIG1faXRlbXMuY2xlYXIoKTsKK30KKwordm9pZCBCdWZmZXJlZERhdGFUcmFuc2Zl
ckl0ZW1MaXN0OjphZGQoY29uc3QgU3RyaW5nJiBkYXRhLCBjb25zdCBTdHJpbmcmIHR5cGUsIEV4
Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIC8vIE9ubHkgb25lICdzdHJpbmcnIGl0ZW0gd2l0aCBh
IGdpdmVuIHR5cGUgaXMgYWxsb3dlZCBpbiB0aGUgY29sbGVjdGlvbi4KKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1faXRlbXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1faXRlbXNb
aV0tPnR5cGUoKSA9PSB0eXBlICYmIG1faXRlbXNbaV0tPmtpbmQoKSA9PSBEYXRhVHJhbnNmZXJJ
dGVtOjpraW5kU3RyaW5nKSB7CisgICAgICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOyAv
LyBGSVhNRTogSXMgdGhpcyB0aGUgcmlnaHQgZXhjZXB0aW9uIGNvZGU/CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAodHlwZSA9PSBtaW1lVHlwZVRleHRV
UklMaXN0KQorICAgICAgICBpbnRlcm5hbEFkZFN0cmluZyhkYXRhLCBTdHJpbmcoKSk7CisgICAg
ZWxzZSBpZiAodHlwZSA9PSBtaW1lVHlwZVRleHRIVE1MKQorICAgICAgICBpbnRlcm5hbEFkZEhU
TUwoZGF0YSwgS1VSTCgpKTsKKyAgICBlbHNlCisgICAgICAgIGludGVybmFsQWRkU3RyaW5nKHR5
cGUsIGRhdGEpOworfQorCit2b2lkIEJ1ZmZlcmVkRGF0YVRyYW5zZmVySXRlbUxpc3Q6OmludGVy
bmFsQWRkU3RyaW5nKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKQorewor
ICAgIG1faXRlbXMuYXBwZW5kKEJ1ZmZlcmVkRGF0YVRyYW5zZmVyU3RyaW5nSXRlbTo6Y3JlYXRl
KHR5cGUsIGRhdGEpKTsKK30KKwordm9pZCBCdWZmZXJlZERhdGFUcmFuc2Zlckl0ZW1MaXN0Ojpp
bnRlcm5hbEFkZFVSTChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiB0aXRsZSkKK3sK
KyAgICBtX2l0ZW1zLmFwcGVuZChCdWZmZXJlZERhdGFUcmFuc2ZlclVSSUxpc3RJdGVtOjpjcmVh
dGUodXJsLCB0aXRsZSkpOworfQorCit2b2lkIEJ1ZmZlcmVkRGF0YVRyYW5zZmVySXRlbUxpc3Q6
OmludGVybmFsQWRkSFRNTChjb25zdCBTdHJpbmcmIG1hcmt1cCwgY29uc3QgS1VSTCYgYmFzZVVS
TCkKK3sKKyAgICBtX2l0ZW1zLmFwcGVuZChCdWZmZXJlZERhdGFUcmFuc2ZlckhUTUxJdGVtOjpj
cmVhdGUobWFya3VwLCBiYXNlVVJMKSk7Cit9CisKK1Bhc3RlYm9hcmREYXRhVHJhbnNmZXJJdGVt
TGlzdDo6UGFzdGVib2FyZERhdGFUcmFuc2Zlckl0ZW1MaXN0KCkKKyAgICA6IG1faW5pdGlhbGl6
ZWQoZmFsc2UpCit7Cit9CisKK3NpemVfdCBQYXN0ZWJvYXJkRGF0YVRyYW5zZmVySXRlbUxpc3Q6
Omxlbmd0aCgpIGNvbnN0Cit7CisgICAgZW5zdXJlSXRlbXNJbml0aWFsaXplZCgpOworICAgIHJl
dHVybiBtX2l0ZW1zLnNpemUoKTsKK30KKworUGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtQ2hy
b21pdW0+IFBhc3RlYm9hcmREYXRhVHJhbnNmZXJJdGVtTGlzdDo6aXRlbSh1bnNpZ25lZCBsb25n
IGluZGV4KQoreworICAgIGVuc3VyZUl0ZW1zSW5pdGlhbGl6ZWQoKTsKKyAgICBpZiAoaW5kZXgg
Pj0gbGVuZ3RoKCkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBtX2l0ZW1zW2luZGV4
XTsKK30KKwordm9pZCBQYXN0ZWJvYXJkRGF0YVRyYW5zZmVySXRlbUxpc3Q6OmRlbGV0ZUl0ZW0o
dW5zaWduZWQgbG9uZyBpbmRleCkKK3sKKyAgICAvLyBUaGlzIGlzIGEgcmVhZC1vbmx5IGNvbGxl
Y3Rpb24sIHdlIHNob3VsZCBuZXZlciB0cnkgdG8gbXV0YXRlIGl0LgorICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworfQorCit2b2lkIFBhc3RlYm9hcmREYXRhVHJhbnNmZXJJdGVtTGlzdDo6Y2xl
YXIoKQoreworICAgIC8vIFRoaXMgaXMgYSByZWFkLW9ubHkgY29sbGVjdGlvbiwgd2Ugc2hvdWxk
IG5ldmVyIHRyeSB0byBtdXRhdGUgaXQuCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
bV9pdGVtcy5jbGVhcigpOworfQorCit2b2lkIFBhc3RlYm9hcmREYXRhVHJhbnNmZXJJdGVtTGlz
dDo6YWRkKGNvbnN0IFN0cmluZyYgZGF0YSwgY29uc3QgU3RyaW5nJiB0eXBlLCBFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyAgICAvLyBUaGlzIGlzIGEgcmVhZC1vbmx5IGNvbGxlY3Rpb24sIHdlIHNo
b3VsZCBuZXZlciB0cnkgdG8gbXV0YXRlIGl0LgorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
fQorCit2b2lkIFBhc3RlYm9hcmREYXRhVHJhbnNmZXJJdGVtTGlzdDo6aW50ZXJuYWxBZGRTdHJp
bmcoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpCit7CisgICAgLy8gVGhp
cyBpcyBhIHJlYWQtb25seSBjb2xsZWN0aW9uLCB3ZSBzaG91bGQgbmV2ZXIgdHJ5IHRvIG11dGF0
ZSBpdC4KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBQYXN0ZWJvYXJkRGF0
YVRyYW5zZmVySXRlbUxpc3Q6OmludGVybmFsQWRkVVJMKGNvbnN0IFN0cmluZyYgdXJsLCBjb25z
dCBTdHJpbmcmIHRpdGxlKQoreworICAgIC8vIFRoaXMgaXMgYSByZWFkLW9ubHkgY29sbGVjdGlv
biwgd2Ugc2hvdWxkIG5ldmVyIHRyeSB0byBtdXRhdGUgaXQuCisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Cit9CisKK3ZvaWQgUGFzdGVib2FyZERhdGFUcmFuc2Zlckl0ZW1MaXN0OjppbnRlcm5h
bEFkZEhUTUwoY29uc3QgU3RyaW5nJiBtYXJrdXAsIGNvbnN0IEtVUkwmIGJhc2VVUkwpCit7Cisg
ICAgLy8gVGhpcyBpcyBhIHJlYWQtb25seSBjb2xsZWN0aW9uLCB3ZSBzaG91bGQgbmV2ZXIgdHJ5
IHRvIG11dGF0ZSBpdC4KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBQYXN0
ZWJvYXJkRGF0YVRyYW5zZmVySXRlbUxpc3Q6OmVuc3VyZUl0ZW1zSW5pdGlhbGl6ZWQoKSBjb25z
dAoreworICAgIGlmIChtX2luaXRpYWxpemVkKQorICAgICAgICByZXR1cm47CisgICAgbV9pbml0
aWFsaXplZCA9IHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlCisKK1Bhc3NSZWZQdHI8RGF0YVRy
YW5zZmVySXRlbUxpc3RDaHJvbWl1bT4gRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bTo6Y3Jl
YXRlKCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hy
b21pdW0ob3duZXIsIGNvbnRleHQpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJ1ZmZlcmVk
RGF0YVRyYW5zZmVySXRlbUxpc3QoKSk7CiB9CiAKLURhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21p
dW06OkRhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0oUGFzc1JlZlB0cjxDbGlwYm9hcmQ+IG93
bmVyLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQotICAgIDogRGF0YVRyYW5zZmVy
SXRlbUxpc3Qob3duZXIsIGNvbnRleHQpCitQYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1MaXN0
Q2hyb21pdW0+IERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW06OmNyZWF0ZUZyb21QYXN0ZWJv
YXJkKCkKIHsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFBhc3RlYm9hcmREYXRhVHJhbnNmZXJJ
dGVtTGlzdCgpKTsKIH0KIAotdm9pZCBEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtOjphZGRQ
YXN0ZWJvYXJkSXRlbShjb25zdCBTdHJpbmcmIHR5cGUpCitEYXRhVHJhbnNmZXJJdGVtTGlzdENo
cm9taXVtOjp+RGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bSgpCiB7Ci0gICAgbV9pdGVtcy5h
cHBlbmQoRGF0YVRyYW5zZmVySXRlbUNocm9taXVtOjpjcmVhdGVGcm9tUGFzdGVib2FyZChtX293
bmVyLCBtX2NvbnRleHQsIHR5cGUpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRGF0YVRyYW5zZmVySXRl
bUxpc3RDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRGF0YVRy
YW5zZmVySXRlbUxpc3RDaHJvbWl1bS5oCmluZGV4IGEzMzIxYjVhZDM5ZDQ1ZmI0NmRlNGVjZThh
YmMxYmRkMzYyZjNhMGUuLmFlNGEzODA5ODU5NDA2MzgyMjgzYjA4ZTBjMTRiZTliMTJjNTQ5MzQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RhdGFUcmFuc2Zl
ckl0ZW1MaXN0Q2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9EYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtLmgKQEAgLTMzLDI4ICszMywzMyBAQAogCiAj
aWYgRU5BQkxFKERBVEFfVFJBTlNGRVJfSVRFTVMpCiAKLSNpbmNsdWRlICJEYXRhVHJhbnNmZXJJ
dGVtTGlzdC5oIgorI2luY2x1ZGUgIkRhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bS5oIgorI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBDbGlwYm9hcmQ7
Ci1jbGFzcyBEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW07Ci1jbGFzcyBTY3JpcHRFeGVjdXRpb25D
b250ZXh0OwotCitjbGFzcyBLVVJMOwogdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKIAotY2xh
c3MgRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bSA6IHB1YmxpYyBEYXRhVHJhbnNmZXJJdGVt
TGlzdCB7CitjbGFzcyBEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtIDogcHVibGljIFJlZkNv
dW50ZWQ8RGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bT4gewogcHVibGljOgotICAgIHN0YXRp
YyBQYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0+IGNyZWF0ZShQYXNzUmVm
UHRyPENsaXBib2FyZD4sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtPiBjcmVhdGUoKTsKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtPiBjcmVhdGVGcm9tUGFz
dGVib2FyZCgpOwogCi1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBDbGlwYm9hcmRDaHJvbWl1
bTsKKyAgICB2aXJ0dWFsIH5EYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtKCk7CiAKLSAgICBE
YXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtKFBhc3NSZWZQdHI8Q2xpcGJvYXJkPiwgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCopOworICAgIHZpcnR1YWwgc2l6ZV90IGxlbmd0aCgpIGNvbnN0ID0g
MDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUNocm9taXVtPiBpdGVt
KHVuc2lnbmVkIGxvbmcgaW5kZXgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSXRlbSh1
bnNpZ25lZCBsb25nIGluZGV4KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyKCkgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBhZGQoY29uc3QgU3RyaW5nJiBkYXRhLCBjb25zdCBTdHJpbmcmIHR5
cGUsIEV4Y2VwdGlvbkNvZGUmKSA9IDA7Citwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDaHJv
bWl1bURhdGFPYmplY3Q7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRkUGFzdGVib2FyZEl0ZW0oY29u
c3QgU3RyaW5nJiB0eXBlKTsKKyAgICB2aXJ0dWFsIHZvaWQgaW50ZXJuYWxBZGRTdHJpbmcoY29u
c3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgaW50ZXJuYWxBZGRVUkwoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgdGl0bGUp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgaW50ZXJuYWxBZGRIVE1MKGNvbnN0IFN0cmluZyYgbWFy
a3VwLCBjb25zdCBLVVJMJiBiYXNlVVJMKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EcmFnRGF0
YUNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RyYWdEYXRh
Q2hyb21pdW0uY3BwCmluZGV4IDljMzgzODYwMjUxYzc0NzAwOTJmOTY1MzdhNjE3NzkyODg4YmRi
YmIuLjY2NTEzNTkyNTdjYmY0YWE2ZGM3MGQxYmIwNGNhM2FlYjdlYTU2MTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RyYWdEYXRhQ2hyb21pdW0uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RyYWdEYXRhQ2hyb21pdW0uY3Bw
CkBAIC01NywxMiArNTcsOCBAQCBib29sIERyYWdEYXRhOjpjb250YWluc1VSTChGcmFtZSosIEZp
bGVuYW1lQ29udmVyc2lvblBvbGljeSBmaWxlbmFtZVBvbGljeSkgY29ucwogU3RyaW5nIERyYWdE
YXRhOjphc1VSTChGcmFtZSosIEZpbGVuYW1lQ29udmVyc2lvblBvbGljeSBmaWxlbmFtZVBvbGlj
eSwgU3RyaW5nKiB0aXRsZSkgY29uc3QKIHsKICAgICBTdHJpbmcgdXJsOwotICAgIGlmIChtX3Bs
YXRmb3JtRHJhZ0RhdGEtPnR5cGVzKCkuY29udGFpbnMobWltZVR5cGVVUkwpKSB7Ci0gICAgICAg
IGJvb2wgaWdub3JlZFN1Y2Nlc3M7Ci0gICAgICAgIHVybCA9IG1fcGxhdGZvcm1EcmFnRGF0YS0+
Z2V0RGF0YShtaW1lVHlwZVVSTCwgaWdub3JlZFN1Y2Nlc3MpOwotICAgICAgICBpZiAodGl0bGUp
Ci0gICAgICAgICAgICAqdGl0bGUgPSBtX3BsYXRmb3JtRHJhZ0RhdGEtPnVybFRpdGxlKCk7Ci0g
ICAgfSBlbHNlIGlmIChmaWxlbmFtZVBvbGljeSA9PSBDb252ZXJ0RmlsZW5hbWVzICYmIGNvbnRh
aW5zRmlsZXMoKSkgeworICAgIG1fcGxhdGZvcm1EcmFnRGF0YS0+Z2V0VVJMKHVybCwgdGl0bGUp
OworICAgIGlmICh1cmwuaXNFbXB0eSgpICYmIGZpbGVuYW1lUG9saWN5ID09IENvbnZlcnRGaWxl
bmFtZXMgJiYgY29udGFpbnNGaWxlcygpKSB7CiAgICAgICAgIHVybCA9IFBsYXRmb3JtU3VwcG9y
dDo6ZmlsZVBhdGhUb1VSTChQbGF0Zm9ybVN1cHBvcnQ6OmdldEFic29sdXRlUGF0aChtX3BsYXRm
b3JtRHJhZ0RhdGEtPmZpbGVuYW1lcygpWzBdKSk7CiAgICAgfQogICAgIHJldHVybiB1cmw7CkBA
IC0xNDEsMTAgKzEzNywxMSBAQCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IERyYWdEYXRh
Ojphc0ZyYWdtZW50KEZyYW1lKiBmcmFtZSwgUGFzc1JlZlB0cjxSYW5nZQogICAgICAgICAvLyAg
ICByZXR1cm4gZnJhZ21lbnQ7CiAgICAgfQogCi0gICAgaWYgKG1fcGxhdGZvcm1EcmFnRGF0YS0+
dHlwZXMoKS5jb250YWlucyhtaW1lVHlwZVRleHRIVE1MKSkgewotICAgICAgICBib29sIGlnbm9y
ZWRTdWNjZXNzOwotICAgICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBj
cmVhdGVGcmFnbWVudEZyb21NYXJrdXAoZnJhbWUtPmRvY3VtZW50KCksCi0gICAgICAgICAgICBt
X3BsYXRmb3JtRHJhZ0RhdGEtPmdldERhdGEobWltZVR5cGVUZXh0SFRNTCwgaWdub3JlZFN1Y2Nl
c3MpLCBtX3BsYXRmb3JtRHJhZ0RhdGEtPmh0bWxCYXNlVXJsKCksIEZyYWdtZW50U2NyaXB0aW5n
Tm90QWxsb3dlZCk7CisgICAgU3RyaW5nIG1hcmt1cDsKKyAgICBLVVJMIGJhc2VVUkw7CisgICAg
bV9wbGF0Zm9ybURyYWdEYXRhLT5nZXRIVE1MKG1hcmt1cCwgYmFzZVVSTCk7CisgICAgaWYgKCFt
YXJrdXAuaXNFbXB0eSgpKSB7CisgICAgICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFn
bWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChmcmFtZS0+ZG9jdW1lbnQoKSwgbWFya3Vw
LCBiYXNlVVJMLCBGcmFnbWVudFNjcmlwdGluZ05vdEFsbG93ZWQpOwogICAgICAgICByZXR1cm4g
ZnJhZ21lbnQucmVsZWFzZSgpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViRHJhZ0RhdGEuaCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vcHVibGljL3BsYXRmb3JtL1dlYkRyYWdEYXRhLmgKaW5kZXggMTcxMjMxZWNhMzRiYTQ3
NzdkNmFiZWE0MjM2M2M0ZGM5NmQzOTY2Ny4uMjQwZjUyOGM2OTlhMTlmNzFhOWE2YTBhOTg3Nzcy
NGZkNDYzYzg5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxh
dGZvcm0vV2ViRHJhZ0RhdGEuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9w
bGF0Zm9ybS9XZWJEcmFnRGF0YS5oCkBAIC0zMiw2ICszMiw3IEBACiAjZGVmaW5lIFdlYkRyYWdE
YXRhX2gKIAogI2luY2x1ZGUgIldlYkNvbW1vbi5oIgorI2luY2x1ZGUgIldlYkRhdGEuaCIKICNp
bmNsdWRlICJXZWJTdHJpbmcuaCIKIAogI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgpAQCAtNDEs
NyArNDIsNiBAQCBuYW1lc3BhY2UgV1RGIHsgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFBh
c3NSZWZQdHI7IH0KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIFdlYkRhdGE7CiBjbGFz
cyBXZWJEcmFnRGF0YVByaXZhdGU7CiBjbGFzcyBXZWJVUkw7CiB0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4gY2xhc3MgV2ViVmVjdG9yOwpAQCAtNjYsNiArNjYsMjMgQEAgcHVibGljOgogCiAgICAgYm9v
bCBpc051bGwoKSBjb25zdCB7IHJldHVybiAhbV9wcml2YXRlOyB9CiAKKyAgICBzdHJ1Y3QgRHJh
Z0RhdGFJdGVtIHsKKyAgICAgICAgZW51bSBLaW5kIHsKKyAgICAgICAgICAgIFNUUklORywKKyAg
ICAgICAgICAgIEZJTEVOQU1FLAorICAgICAgICAgICAgRklMRUNPTlRFTlQsCisgICAgICAgIH07
CisgICAgICAgIEtpbmQga2luZDsKKyAgICAgICAgV2ViU3RyaW5nIHR5cGU7CisgICAgICAgIFdl
YlN0cmluZyBzdHJpbmdEYXRhOworICAgICAgICBXZWJTdHJpbmcgbWV0YWRhdGE7CisgICAgICAg
IFdlYkRhdGEgYmxvYkRhdGE7CisgICAgfTsKKworICAgIFdFQktJVF9FWFBPUlQgV2ViVmVjdG9y
PERyYWdEYXRhSXRlbT4gaXRlbXMoKSBjb25zdDsKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0
SXRlbXMoY29uc3QgV2ViVmVjdG9yPERyYWdEYXRhSXRlbT4mKTsKKworICAgIC8vIExlZ2FjeSBp
bnRlcmZhY2UuIFRvIGJlIHJlbW92ZWQgb25jZSBDaHJvbWl1bSBubyBsb25nZXIgY2FsbHMgdGhl
bS4KICAgICBXRUJLSVRfRVhQT1JUIFdlYlN0cmluZyB1cmwoKSBjb25zdDsKICAgICBXRUJLSVRf
RVhQT1JUIHZvaWQgc2V0VVJMKGNvbnN0IFdlYlVSTCYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEcmFnRGF0YS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJEcmFnRGF0YS5jcHAKaW5kZXggNWMzMTIzOTE4YWY2M2ZlODE1NDMzMGZkZmYy
NTJhZTcxY2MxZTk0YS4uOTU5NjMzNjkyN2VkMDJmYTJjYmUwOGYyODVhNjNhOWM5N2JjNTAxYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRHJhZ0RhdGEuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRyYWdEYXRhLmNwcApAQCAtMzMsNiAr
MzMsOSBAQAogCiAjaW5jbHVkZSAiQ2hyb21pdW1EYXRhT2JqZWN0LmgiCiAjaW5jbHVkZSAiQ2xp
cGJvYXJkTWltZVR5cGVzLmgiCisjaW5jbHVkZSAiRGF0YVRyYW5zZmVySXRlbS5oIgorI2luY2x1
ZGUgIkRhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bS5oIgorI2luY2x1ZGUgIkRhdGFUcmFuc2Zlckl0
ZW1MaXN0Q2hyb21pdW0uaCIKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJEYXRhLmgiCiAjaW5jbHVk
ZSAicGxhdGZvcm0vV2ViU3RyaW5nLmgiCiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViVVJMLmgiCkBA
IC02Niw2ICs2OSw0NiBAQCB2b2lkIFdlYkRyYWdEYXRhOjphc3NpZ24oY29uc3QgV2ViRHJhZ0Rh
dGEmIG90aGVyKQogICAgIGFzc2lnbihwKTsKIH0KIAorV2ViVmVjdG9yPFdlYkRyYWdEYXRhOjpE
cmFnRGF0YUl0ZW0+IFdlYkRyYWdEYXRhOjppdGVtcygpIGNvbnN0Cit7CisgICAgUmVmUHRyPERh
dGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0+IGxpc3QgPSBtX3ByaXZhdGUtPml0ZW1zKCk7Cisg
ICAgV2ViVmVjdG9yPERyYWdEYXRhSXRlbT4gZGF0YShsaXN0LT5sZW5ndGgoKSk7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBkYXRhLnNpemUoKTsgKytpKSB7CisgICAgICAgIFJlZlB0cjxE
YXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0+IGRhdGFJdGVtID0gbGlzdC0+aXRlbShpKTsKKyAgICAg
ICAgRHJhZ0RhdGFJdGVtIGl0ZW07CisgICAgICAgIGlmIChkYXRhSXRlbS0+a2luZCgpID09IERh
dGFUcmFuc2Zlckl0ZW06OmtpbmRTdHJpbmcpIHsKKyAgICAgICAgICAgIGl0ZW0ua2luZCA9IERy
YWdEYXRhSXRlbTo6U1RSSU5HOworICAgICAgICAgICAgaXRlbS50eXBlID0gbGlzdC0+aXRlbShp
KS0+dHlwZSgpOworICAgICAgICAgICAgaXRlbS5zdHJpbmdEYXRhID0gZGF0YUl0ZW0tPmxlZ2Fj
eUdldEFzU3RyaW5nKCk7CisgICAgICAgICAgICBpZiAoZGF0YUl0ZW0tPnR5cGUoKSA9PSBtaW1l
VHlwZVRleHRVUklMaXN0KQorICAgICAgICAgICAgICAgIGl0ZW0ubWV0YWRhdGEgPSBzdGF0aWNf
Y2FzdDxEYXRhVHJhbnNmZXJVUklMaXN0SXRlbSo+KGRhdGFJdGVtLmdldCgpKS0+dGl0bGUoKTsK
KyAgICAgICAgICAgIGVsc2UgaWYgKGRhdGFJdGVtLT50eXBlKCkgPT0gbWltZVR5cGVUZXh0SFRN
TCkKKyAgICAgICAgICAgICAgICBpdGVtLm1ldGFkYXRhID0gc3RhdGljX2Nhc3Q8RGF0YVRyYW5z
ZmVySFRNTEl0ZW0qPihkYXRhSXRlbS5nZXQoKSktPmJhc2VVUkwoKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBTdXBwb3J0IGZpbGVzLgorICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIH0KKyAgICAgICAgZGF0YVtpXSA9IGl0ZW07CisgICAgfQorICAgIHJl
dHVybiBkYXRhOworfQorCit2b2lkIFdlYkRyYWdEYXRhOjpzZXRJdGVtcyhjb25zdCBXZWJWZWN0
b3I8RHJhZ0RhdGFJdGVtPiYgaXRlbXMpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBp
dGVtcy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoaXRlbXNbaV0ua2luZCA9PSBEcmFnRGF0
YUl0ZW06OlNUUklORykgeworICAgICAgICAgICAgLy8gRklYTUU6IElzIHRoZXJlIGEgY2xlYW5l
ciB3YXkgdG8gZG8gdGhpcz8KKyAgICAgICAgICAgIGlmIChpdGVtc1tpXS50eXBlID09IFdlYlN0
cmluZyhTdHJpbmcobWltZVR5cGVUZXh0VVJJTGlzdCkpKQorICAgICAgICAgICAgICAgIG1fcHJp
dmF0ZS0+c2V0VVJMKGl0ZW1zW2ldLnN0cmluZ0RhdGEsIGl0ZW1zW2ldLm1ldGFkYXRhKTsKKyAg
ICAgICAgICAgIGVsc2UgaWYgKGl0ZW1zW2ldLnR5cGUgPT0gV2ViU3RyaW5nKFN0cmluZyhtaW1l
VHlwZVRleHRIVE1MKSkpCisgICAgICAgICAgICAgICAgbV9wcml2YXRlLT5zZXRIVE1MKGl0ZW1z
W2ldLnN0cmluZ0RhdGEsIEtVUkwoS1VSTCgpLCBpdGVtc1tpXS5tZXRhZGF0YSkpOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fcHJpdmF0ZS0+c2V0RGF0YShpdGVtc1tpXS50
eXBlLCBpdGVtc1tpXS5zdHJpbmdEYXRhKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAv
LyBGSVhNRTogSGFuZGxlIGZpbGVuYW1lcy4KKyAgICB9Cit9CisKIFdlYlN0cmluZyBXZWJEcmFn
RGF0YTo6dXJsKCkgY29uc3QKIHsKICAgICBBU1NFUlQoIWlzTnVsbCgpKTsKQEAgLTIyMyw5ICsy
NjYsMTAgQEAgV2ViVmVjdG9yPFdlYkRyYWdEYXRhOjpDdXN0b21EYXRhPiBXZWJEcmFnRGF0YTo6
Y3VzdG9tRGF0YSgpIGNvbnN0CiB2b2lkIFdlYkRyYWdEYXRhOjpzZXRDdXN0b21EYXRhKGNvbnN0
IFdlYlZlY3RvcjxXZWJEcmFnRGF0YTo6Q3VzdG9tRGF0YT4mIGN1c3RvbURhdGEpCiB7CiAgICAg
ZW5zdXJlTXV0YWJsZSgpOwotICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBjdXN0b21EYXRh
TWFwID0gbV9wcml2YXRlLT5jdXN0b21EYXRhKCk7CisgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmlu
Zz4gY3VzdG9tRGF0YU1hcDsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGN1c3RvbURhdGEu
c2l6ZSgpOyArK2kpCiAgICAgICAgIGN1c3RvbURhdGFNYXAuc2V0KGN1c3RvbURhdGFbaV0udHlw
ZSwgY3VzdG9tRGF0YVtpXS5kYXRhKTsKKyAgICBtX3ByaXZhdGUtPnNldEN1c3RvbURhdGEoY3Vz
dG9tRGF0YU1hcCk7CiB9CiAKIFdlYkRyYWdEYXRhOjpXZWJEcmFnRGF0YShjb25zdCBXVEY6OlBh
c3NSZWZQdHI8V2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0PiYgZGF0YSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123698</attachid>
            <date>2012-01-23 22:06:02 -0800</date>
            <delta_ts>2012-01-24 10:27:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76598-20120123220601.patch</filename>
            <type>text/plain</type>
            <size>109370</size>
            <attacher name="Daniel Cheng">dcheng</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1NjQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWU5NzNiZjJmMjdlZTVm
ZDU4MjhhZTY0OTE2YmVmZWI3Mjk5YmZhMC4uNzI4MWQ5NmQyYjIyZGY0NGE4NzlhOTlmYTVhMGIx
ZTE5YjVkYWE5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE1OSBAQAogMjAxMi0wMS0yMyAgRGFu
aWVsIENoZW5nICA8ZGNoZW5nQGNocm9taXVtLm9yZz4KIAorICAgICAgICBbY2hyb21pdW1dIFJl
ZmFjdG9yIENsaXBib2FyZENocm9taXVtIGFuZCBEYXRhVHJhbnNmZXJJdGVtTGlzdC9EYXRhVHJh
bnNmZXJJdGVtIHRvIHN1cHBvcnQgSFRNTCBzcGVjCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NjU5OAorCisgICAgICAgIFRoaXMgY2hhbmdlIHJlZmFj
dG9ycyBDaHJvbWl1bURhdGFPYmplY3QsIENsaXBib2FyZENocm9taXVtLCBEYXRhVHJhbnNmZXJJ
dGVtQ2hyb21pdW0sIGFuZAorICAgICAgICBEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtLiBJ
bnRlcm5hbGx5LCB3ZSByZXByZXNlbnQgYWxsIGRhdGEgZm9yIGEgRGF0YVRyYW5zZmVyIGFzIGEg
bGlzdAorICAgICAgICBvZiAoa2luZCwgdHlwZSwgdmFsdWUpIHR1cGxlcy4gU2luY2UgdGhpcyBt
aXJyb3JzIHRoZSBkcmFnIGRhdGEgbGlzdCB0aGF0IHRoZSBIVE1MIHNwZWMgdXNlcworICAgICAg
ICB3aGVuIGRlZmluaW5nIHZhcmlvdXMgZHJhZyBldmVudHMsIGl0IGxldHMgdXMgaW1wbGVtZW50
IHRoZSBzcGVjIGluIGEgbmF0dXJhbCBtYW5uZXIuIEl0CisgICAgICAgIGFsc28gcmVtb3ZlcyB0
aGUgbmVlZCBmb3IgYSAnZGlydHknIGJpdCBpbiBDbGlwYm9hcmRDaHJvbWl1bSwgc2luY2Ugd2Ug
bm8gbG9uZ2VyIG1haW50YWluCisgICAgICAgIHR3byBzZXBhcmF0ZSByZXByZXNlbnRhdGlvbnMg
b2YgdGhlIHNhbWUgZGF0YS0tdGhleSdyZSBiYXNlZCBvbiB0aGUgc2FtZSB0aGluZyBub3cuCisK
KyAgICAgICAgV2UgYWxzbyBhZGQgYSBsYXllciBvZiBhYnN0cmFjdGlvbiB0byB0aGUgZGF0YSBs
aXN0IHR1cGxlcy0taW5zdGVhZCBvZiB1c2luZyBhIGxvdCBvZiBuZXN0ZWQKKyAgICAgICAgaWYn
cyB0byBkZXRlcm1pbmUgaG93IHRvIGhhbmRsZSB2YXJpb3VzIGNvbWJpbmF0aW9ucyBvZiAoY2xp
cGJvYXJkLCBkcmFnKSArIE1JTUUgdHlwZXMsIHdlCisgICAgICAgIHVzZSBhIHNpbXBsZSB2aXJ0
dWFsIGludGVyZmFjZSB0aGF0IGNsb3NlbHkgbWlycm9ycyB0aGUgRGF0YVRyYW5zZmVySXRlbSBk
ZWZpbml0aW9uLiBUaGlzCisgICAgICAgIHJlbW92ZXMgYSBsb3Qgb2YgdGhlIGNvbXBsZXhpdHkg
dGhhdCB1c2VkIHRvIGJlIGZvdW5kIGluIGdldERhdGEoKS9zZXREYXRhKCksIGV0Yy4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4
aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogZG9tL0RhdGFUcmFuc2Zlckl0ZW1MaXN0Lmg6Cisg
ICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6aXRlbXMpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpjbGVhckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2hy
b21pdW1EYXRhT2JqZWN0OjpjbGVhckFsbCk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURh
dGFPYmplY3Q6OmNsZWFyQWxsRXhjZXB0RmlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21p
dW1EYXRhT2JqZWN0Ojp0eXBlcyk6IFJlaW1wbGVtZW50ZWQgdG8gb3BlcmF0ZSBvbiB0aGUgZGF0
YSBsaXN0LgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpnZXREYXRhKTog
UmVpbXBsZW1lbnRlZCB0byBvcGVyYXRlIG9uIHRoZSBkYXRhIGxpc3QuCisgICAgICAgIChXZWJD
b3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OnNldERhdGEpOiBSZWltcGxlbWVudGVkIHRvIG9wZXJh
dGUgb24gdGhlIGRhdGEgbGlzdC4KKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVj
dDo6Z2V0VVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6c2V0VVJM
KToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6Z2V0SFRNTCk6CisgICAg
ICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OnNldEhUTUwpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0Ojp1cmxUaXRsZSk6IERlcHJlY2F0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OnNldFVybFRpdGxlKTogRGVwcmVjYXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6aHRtbEJhc2VVcmwpOiBEZXBy
ZWNhdGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpzZXRIdG1sQmFz
ZVVybCk6IERlcHJlY2F0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6
OmN1c3RvbURhdGEpOiBEZXByZWNhdGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRh
T2JqZWN0OjpzZXRDdXN0b21EYXRhKTogRGVwcmVjYXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNo
cm9taXVtRGF0YU9iamVjdDo6Y29udGFpbnNGaWxlbmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6
Q2hyb21pdW1EYXRhT2JqZWN0OjpmaWxlbmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21p
dW1EYXRhT2JqZWN0OjphZGRGaWxlbmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURh
dGFPYmplY3Q6OnNldEZpbGVuYW1lcyk6IERlcHJlY2F0ZWQuCisgICAgICAgIChXZWJDb3JlOjpD
aHJvbWl1bURhdGFPYmplY3Q6OmFkZFNoYXJlZEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpm
aW5kU2hhcmVkQnVmZmVySXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmpl
Y3Q6OmZpbGVFeHRlbnNpb24pOiBEZXByZWNhdGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21p
dW1EYXRhT2JqZWN0OjpmaWxlQ29udGVudEZpbGVuYW1lKTogRGVwcmVjYXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6ZmlsZUNvbnRlbnQpOiBEZXByZWNhdGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpDaHJvbWl1bURhdGFPYmplY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpmaW5kSXRlbSk6CisgICAg
ICAgICogcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0Lmg6CisgICAgICAgIChX
ZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OmNyZWF0ZUZyb21QYXN0ZWJvYXJkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpu
b3JtYWxpemVUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENocm9taXVtOjpDbGlw
Ym9hcmRDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRDaHJvbWl1bTo6Y2xl
YXJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENocm9taXVtOjpjbGVhckFsbERh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkQ2hyb21pdW06OmdldERhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkQ2hyb21pdW06OnNldERhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2xpcGJvYXJkQ2hyb21pdW06OnR5cGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBi
b2FyZENocm9taXVtOjpmaWxlcyk6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZUltYWdlVG9EYXRh
T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENocm9taXVtOjpkZWNsYXJlQW5k
V3JpdGVEcmFnSW1hZ2UpOiBGaXggc28gdGhhdCB2YWxpZGF0ZUZpbGVOYW1lIGlzbid0CisgICAg
ICAgICAgICBhbHdheXMgY2FsbGVkIG9uIGFuIGVtcHR5IGV4dGVuc2lvbi4KKyAgICAgICAgKFdl
YkNvcmU6OkNsaXBib2FyZENocm9taXVtOjp3cml0ZVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpD
bGlwYm9hcmRDaHJvbWl1bTo6d3JpdGVSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9h
cmRDaHJvbWl1bTo6d3JpdGVQbGFpblRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJk
Q2hyb21pdW06Omhhc0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkQ2hyb21pdW06
Oml0ZW1zKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5o
OgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkQ2hyb21pdW06OmZyYW1lKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bUxpbnV4LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNsaXBib2FyZENocm9taXVtOjp2YWxpZGF0ZUZpbGVuYW1lKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bU1hYy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDbGlwYm9hcmRDaHJvbWl1bTo6dmFsaWRhdGVGaWxlbmFtZSk6CisgICAgICAgICog
cGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW1XaW4uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q2xpcGJvYXJkQ2hyb21pdW06OnZhbGlkYXRlRmlsZW5hbWUpOgorICAgICAgICAqIHBs
YXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZFV0aWxpdGllc0Nocm9taXVtLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OnBhc3RlYm9hcmRIYXNDaGFuZ2VkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJv
bWl1bS9DbGlwYm9hcmRVdGlsaXRpZXNDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2No
cm9taXVtL0RhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpE
YXRhVHJhbnNmZXJJdGVtQ2hyb21pdW06On5EYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0pOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0YVRyYW5zZmVySXRlbUNocm9taXVtOjpnZXRBc1N0cmluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW06OmdldEFzRmlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW06OmxlZ2FjeUdldEFzU3Ry
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFUcmFuc2ZlclVSSUxpc3RJdGVtOjpraW5kKToK
KyAgICAgICAgKFdlYkNvcmU6OkRhdGFUcmFuc2ZlclVSSUxpc3RJdGVtOjp0eXBlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGFUcmFuc2ZlckhUTUxJdGVtOjpraW5kKToKKyAgICAgICAgKFdlYkNv
cmU6OkRhdGFUcmFuc2ZlckhUTUxJdGVtOjp0eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkJ1ZmZl
cmVkRGF0YVRyYW5zZmVyU3RyaW5nSXRlbTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkJ1
ZmZlcmVkRGF0YVRyYW5zZmVyU3RyaW5nSXRlbTo6a2luZCk6CisgICAgICAgIChXZWJDb3JlOjpC
dWZmZXJlZERhdGFUcmFuc2ZlclN0cmluZ0l0ZW06OnR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6
QnVmZmVyZWREYXRhVHJhbnNmZXJTdHJpbmdJdGVtOjpnZXRBc1N0cmluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpCdWZmZXJlZERhdGFUcmFuc2ZlclN0cmluZ0l0ZW06OmxlZ2FjeUdldEFzU3RyaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OkJ1ZmZlcmVkRGF0YVRyYW5zZmVyU3RyaW5nSXRlbTo6QnVm
ZmVyZWREYXRhVHJhbnNmZXJTdHJpbmdJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkJ1ZmZlcmVk
RGF0YVRyYW5zZmVyVVJJTGlzdEl0ZW06OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpCdWZm
ZXJlZERhdGFUcmFuc2ZlclVSSUxpc3RJdGVtOjpnZXRBc1N0cmluZyk6CisgICAgICAgIChXZWJD
b3JlOjpCdWZmZXJlZERhdGFUcmFuc2ZlclVSSUxpc3RJdGVtOjpsZWdhY3lHZXRBc1N0cmluZyk6
CisgICAgICAgIChXZWJDb3JlOjpCdWZmZXJlZERhdGFUcmFuc2ZlclVSSUxpc3RJdGVtOjp0aXRs
ZSk6CisgICAgICAgIChXZWJDb3JlOjpCdWZmZXJlZERhdGFUcmFuc2ZlclVSSUxpc3RJdGVtOjpz
ZXRUaXRsZSk6CisgICAgICAgIChXZWJDb3JlOjpCdWZmZXJlZERhdGFUcmFuc2ZlclVSSUxpc3RJ
dGVtOjpCdWZmZXJlZERhdGFUcmFuc2ZlclVSSUxpc3RJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6
OkJ1ZmZlcmVkRGF0YVRyYW5zZmVySFRNTEl0ZW06OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpCdWZmZXJlZERhdGFUcmFuc2ZlckhUTUxJdGVtOjpnZXRBc1N0cmluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpCdWZmZXJlZERhdGFUcmFuc2ZlckhUTUxJdGVtOjpsZWdhY3lHZXRBc1N0cmluZyk6
CisgICAgICAgIChXZWJDb3JlOjpCdWZmZXJlZERhdGFUcmFuc2ZlckhUTUxJdGVtOjpiYXNlVVJM
KToKKyAgICAgICAgKFdlYkNvcmU6OkJ1ZmZlcmVkRGF0YVRyYW5zZmVySFRNTEl0ZW06OnNldEJh
c2VVUkwpOgorICAgICAgICAoV2ViQ29yZTo6QnVmZmVyZWREYXRhVHJhbnNmZXJIVE1MSXRlbTo6
QnVmZmVyZWREYXRhVHJhbnNmZXJIVE1MSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhVHJh
bnNmZXJGaWxlSXRlbTo6a2luZCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhVHJhbnNmZXJGaWxl
SXRlbTo6dHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpCdWZmZXJlZERhdGFUcmFuc2ZlckZpbGVu
YW1lSXRlbTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkJ1ZmZlcmVkRGF0YVRyYW5zZmVy
RmlsZW5hbWVJdGVtOjpnZXRBc0ZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6QnVmZmVyZWREYXRh
VHJhbnNmZXJGaWxlbmFtZUl0ZW06OnN0b3JhZ2VUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkJ1
ZmZlcmVkRGF0YVRyYW5zZmVyRmlsZW5hbWVJdGVtOjpCdWZmZXJlZERhdGFUcmFuc2ZlckZpbGVu
YW1lSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpCdWZmZXJlZERhdGFUcmFuc2ZlclNoYXJlZEJ1
ZmZlckl0ZW06OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpCdWZmZXJlZERhdGFUcmFuc2Zl
clNoYXJlZEJ1ZmZlckl0ZW06OmdldEFzRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpCdWZmZXJl
ZERhdGFUcmFuc2ZlclNoYXJlZEJ1ZmZlckl0ZW06OnN0b3JhZ2VUeXBlKToKKyAgICAgICAgKFdl
YkNvcmU6OkJ1ZmZlcmVkRGF0YVRyYW5zZmVyU2hhcmVkQnVmZmVySXRlbTo6QnVmZmVyZWREYXRh
VHJhbnNmZXJTaGFyZWRCdWZmZXJJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmRE
YXRhVHJhbnNmZXJTdHJpbmdJdGVtOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVi
b2FyZERhdGFUcmFuc2ZlclN0cmluZ0l0ZW06OmtpbmQpOgorICAgICAgICAoV2ViQ29yZTo6UGFz
dGVib2FyZERhdGFUcmFuc2ZlclN0cmluZ0l0ZW06OnR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6
UGFzdGVib2FyZERhdGFUcmFuc2ZlclN0cmluZ0l0ZW06OmdldEFzU3RyaW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OlBhc3RlYm9hcmREYXRhVHJhbnNmZXJTdHJpbmdJdGVtOjpsZWdhY3lHZXRBc1N0
cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkRGF0YVRyYW5zZmVyU3RyaW5nSXRl
bTo6UGFzdGVib2FyZERhdGFUcmFuc2ZlclN0cmluZ0l0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6
UGFzdGVib2FyZERhdGFUcmFuc2ZlckhUTUxJdGVtOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6UGFzdGVib2FyZERhdGFUcmFuc2ZlckhUTUxJdGVtOjpnZXRBc1N0cmluZyk6CisgICAgICAg
IChXZWJDb3JlOjpQYXN0ZWJvYXJkRGF0YVRyYW5zZmVySFRNTEl0ZW06OmxlZ2FjeUdldEFzU3Ry
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmREYXRhVHJhbnNmZXJIVE1MSXRlbTo6
YmFzZVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkRGF0YVRyYW5zZmVySFRNTEl0
ZW06OnNldEJhc2VVUkwpOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZERhdGFUcmFuc2Zl
ckhUTUxJdGVtOjpQYXN0ZWJvYXJkRGF0YVRyYW5zZmVySFRNTEl0ZW0pOgorICAgICAgICAoV2Vi
Q29yZTo6UGFzdGVib2FyZERhdGFUcmFuc2ZlckltYWdlSXRlbTo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlBhc3RlYm9hcmREYXRhVHJhbnNmZXJJbWFnZUl0ZW06OmtpbmQpOgorICAgICAg
ICAoV2ViQ29yZTo6UGFzdGVib2FyZERhdGFUcmFuc2ZlckltYWdlSXRlbTo6dHlwZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkRGF0YVRyYW5zZmVySW1hZ2VJdGVtOjpnZXRBc0ZpbGUp
OgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZERhdGFUcmFuc2ZlckltYWdlSXRlbTo6UGFz
dGVib2FyZERhdGFUcmFuc2ZlckltYWdlSXRlbSk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21p
dW0vRGF0YVRyYW5zZmVySXRlbUNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlOjpCdWZmZXJl
ZERhdGFUcmFuc2ZlckZpbGVuYW1lSXRlbTo6ZmlsZW5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6
QnVmZmVyZWREYXRhVHJhbnNmZXJTaGFyZWRCdWZmZXJJdGVtOjpuYW1lKToKKyAgICAgICAgKFdl
YkNvcmU6OkJ1ZmZlcmVkRGF0YVRyYW5zZmVyU2hhcmVkQnVmZmVySXRlbTo6ZXh0ZW5zaW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkJ1ZmZlcmVkRGF0YVRyYW5zZmVyU2hhcmVkQnVmZmVySXRlbTo6
YnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9EYXRhVHJhbnNmZXJJdGVtTGlz
dENocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hy
b21pdW06OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhVHJhbnNmZXJJdGVtTGlzdENo
cm9taXVtOjpjcmVhdGVGcm9tUGFzdGVib2FyZCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhVHJh
bnNmZXJJdGVtTGlzdENocm9taXVtOjp+RGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bSk6Cisg
ICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bS5o
OgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0RyYWdEYXRhQ2hyb21pdW0uY3BwOiBVcGRh
dGUgdG8gdXNlIHRoZSBuZXcgYWNjZXNzb3JzIHdoaWNoIHJldHJpZXZlCisgICAgICAgICAgICB0
aGUgYXNzb2NpYXRlZCBkYXRhICsgbWV0YWRhdGEgaW4gb25lIGNhbGwuCisgICAgICAgIChXZWJD
b3JlOjpEcmFnRGF0YTo6YXNVUkwpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmFzRnJh
Z21lbnQpOgorICAgICAgICAqIHBsYXRmb3JtL3F0L0RhdGFUcmFuc2Zlckl0ZW1MaXN0UXQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RGF0YVRyYW5zZmVySXRlbUxpc3RRdDo6bGVuZ3RoKTogTWFr
ZSBjb25zdC4KKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9EYXRhVHJhbnNmZXJJdGVtTGlzdFF0Lmg6
CisKKzIwMTItMDEtMjMgIERhbmllbCBDaGVuZyAgPGRjaGVuZ0BjaHJvbWl1bS5vcmc+CisKICAg
ICAgICAgQ29udmVydCBEYXRhVHJhbnNmZXJJdGVtL0RhdGFUcmFuc2Zlckl0ZW1MaXN0IGJhY2sg
aW50byBhbiBpbnRlcmZhY2UgY2xhc3MKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTc2ODU2CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggMjk4
NTJjZDU3Y2U4NWI5ODFhZGU3N2I2MWZmZmU0MGYxZWUzMDBhYi4uODBmODg2YzRlMmM0M2ZkMzYx
ZWYwODFmYjNhNThjNDRkN2VkNDhhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMyBAQAorMjAxMi0wMS0yMyAgRGFuaWVsIENoZW5nICA8ZGNoZW5nQGNocm9taXVtLm9y
Zz4KKworICAgICAgICBbY2hyb21pdW1dIFJlZmFjdG9yIENsaXBib2FyZENocm9taXVtIGFuZCBE
YXRhVHJhbnNmZXJJdGVtTGlzdC9EYXRhVHJhbnNmZXJJdGVtIHRvIHN1cHBvcnQgSFRNTCBzcGVj
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NjU5OAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcHVibGlj
L3BsYXRmb3JtL1dlYkRyYWdEYXRhLmg6CisgICAgICAgICogc3JjL1dlYkRyYWdEYXRhLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0RhdGE6Oml0ZW1zKToKKyAgICAgICAgKFdlYktpdDo6
V2ViRHJhZ0RhdGE6OnNldEl0ZW1zKToKKyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0RhdGE6OnNl
dEZpbGVFeHRlbnNpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFnRGF0YTo6c2V0RmlsZW5h
bWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0RhdGE6OmFwcGVuZFRvRmlsZW5hbWVzKToK
KyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0RhdGE6OnNldEZpbGVDb250ZW50RmlsZW5hbWUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJEcmFnRGF0YTo6c2V0RmlsZUNvbnRlbnQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJEcmFnRGF0YTo6Y3VzdG9tRGF0YSk6CisgICAgICAgIChXZWJLaXQ6OldlYkRy
YWdEYXRhOjpzZXRDdXN0b21EYXRhKToKKyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0RhdGE6OmFz
c2lnbik6CisKIDIwMTItMDEtMjMgIFN0ZXBoZW4gV2hpdGUgIDxzZW5vcmJsYW5jb0BjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjEwNTY0MC4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9EYXRhVHJhbnNmZXJJdGVtTGlzdC5oIGIvU291cmNl
L1dlYkNvcmUvZG9tL0RhdGFUcmFuc2Zlckl0ZW1MaXN0LmgKaW5kZXggYjg3YTE4M2FkNTVjNGI2
NTcyM2E5ZDVmZTRkM2MwYmIwNGMzNDUxZS4uNThkYjA2MzcwYWZkNWNjYjAyNDEzNTg4M2JhYjc0
NDE1ZGZiOWRiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RhdGFUcmFuc2Zlckl0
ZW1MaXN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RhdGFUcmFuc2Zlckl0ZW1MaXN0LmgK
QEAgLTQ4LDcgKzQ4LDcgQEAgY2xhc3MgRGF0YVRyYW5zZmVySXRlbUxpc3QgOiBwdWJsaWMgUmVm
Q291bnRlZDxEYXRhVHJhbnNmZXJJdGVtTGlzdD4gewogcHVibGljOgogICAgIHZpcnR1YWwgfkRh
dGFUcmFuc2Zlckl0ZW1MaXN0KCkgeyB9CiAKLSAgICB2aXJ0dWFsIHNpemVfdCBsZW5ndGgoKSA9
IDA7CisgICAgdmlydHVhbCBzaXplX3QgbGVuZ3RoKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtPiBpdGVtKHVuc2lnbmVkIGxvbmcgaW5kZXgpID0g
MDsKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSXRlbSh1bnNpZ25lZCBsb25nIGluZGV4LCBFeGNl
cHRpb25Db2RlJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBjbGVhcigpID0gMDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3Qu
Y3BwCmluZGV4IGNjNDJmYTg1YjUxNzg5MTdhODE1YjU1YjE3YmI4MjVjNTYwMzU3NWQuLjI0OTc0
NTFkNDY4YTkxMzgyZDUwYWUyMzU5ZWIxZDM4YWEzMGE5ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmNwcApAQCAt
MzMsNyArMzMsOCBAQAogCiAjaW5jbHVkZSAiQ2xpcGJvYXJkTWltZVR5cGVzLmgiCiAjaW5jbHVk
ZSAiQ2xpcGJvYXJkVXRpbGl0aWVzQ2hyb21pdW0uaCIKLSNpbmNsdWRlICJEYXRhVHJhbnNmZXJJ
dGVtTGlzdENocm9taXVtLmgiCisjaW5jbHVkZSAiRGF0YVRyYW5zZmVySXRlbS5oIgorI2luY2x1
ZGUgIkV4Y2VwdGlvbkNvZGVQbGFjZWhvbGRlci5oIgogI2luY2x1ZGUgIlBhc3RlYm9hcmQuaCIK
ICNpbmNsdWRlICJQbGF0Zm9ybVN1cHBvcnQuaCIKIApAQCAtNDIsMjM5ICs0MywyNDkgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogLy8gUGVyIFJGQyAyNDgzLCB0aGUgbGluZSBzZXBhcmF0b3IgZm9y
ICJ0ZXh0Ly4uLiIgTUlNRSB0eXBlcyBpcyBDUi1MRi4KIHN0YXRpYyBjaGFyIGNvbnN0KiBjb25z
dCB0ZXh0TUlNRVR5cGVMaW5lU2VwYXJhdG9yID0gIlxyXG4iOwogCi12b2lkIENocm9taXVtRGF0
YU9iamVjdDo6Y2xlYXJEYXRhKGNvbnN0IFN0cmluZyYgdHlwZSkKK1Bhc3NSZWZQdHI8RGF0YVRy
YW5zZmVySXRlbUxpc3RDaHJvbWl1bT4gQ2hyb21pdW1EYXRhT2JqZWN0OjppdGVtcygpIGNvbnN0
CiB7Ci0gICAgaWYgKHR5cGUgPT0gbWltZVR5cGVUZXh0UGxhaW4pIHsKLSAgICAgICAgbV9wbGFp
blRleHQgPSAiIjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICh0eXBlID09IG1p
bWVUeXBlVVJMIHx8IHR5cGUgPT0gbWltZVR5cGVUZXh0VVJJTGlzdCkgewotICAgICAgICBtX3Vy
aUxpc3QgPSAiIjsKLSAgICAgICAgbV91cmwgPSBLVVJMKCk7Ci0gICAgICAgIG1fdXJsVGl0bGUg
PSAiIjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICh0eXBlID09IG1pbWVUeXBl
VGV4dEhUTUwpIHsKLSAgICAgICAgbV90ZXh0SHRtbCA9ICIiOwotICAgICAgICBtX2h0bWxCYXNl
VXJsID0gS1VSTCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIHJldHVybiBtX2l0ZW1z
OworfQogCi0gICAgaWYgKHR5cGUgPT0gbWltZVR5cGVEb3dubG9hZFVSTCkgewotICAgICAgICBt
X2Rvd25sb2FkTWV0YWRhdGEgPSAiIjsKLSAgICAgICAgcmV0dXJuOwordm9pZCBDaHJvbWl1bURh
dGFPYmplY3Q6OmNsZWFyRGF0YShjb25zdCBTdHJpbmcmIHR5cGUpCit7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX2l0ZW1zLT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgIGlmIChtX2l0
ZW1zLT5pdGVtKGkpLT5raW5kKCkgPT0gRGF0YVRyYW5zZmVySXRlbTo6a2luZFN0cmluZyAmJiBt
X2l0ZW1zLT5pdGVtKGkpLT50eXBlKCkgPT0gdHlwZSkgeworICAgICAgICAgICAgLy8gQWNjb3Jk
aW5nIHRvIHRoZSBzcGVjLCB0eXBlIG11c3QgYmUgdW5pcXVlIGFtb25nIGFsbCBpdGVtcyBvZiBr
aW5kICdzdHJpbmcnLCBzbyB3ZQorICAgICAgICAgICAgLy8gY2FuIHJldHVybiBhcyBzb29uIGFz
IHdlIGZpbmQgYW4gaXRlbSB0aGF0IG1hdGNoZXMuCisgICAgICAgICAgICBtX2l0ZW1zLT5kZWxl
dGVJdGVtKGkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgfQogfQogCiB2
b2lkIENocm9taXVtRGF0YU9iamVjdDo6Y2xlYXJBbGwoKQogewotICAgIGNsZWFyQWxsRXhjZXB0
RmlsZXMoKTsKLSAgICBtX2ZpbGVuYW1lcy5jbGVhcigpOworICAgIG1faXRlbXMtPmNsZWFyKCk7
CiB9CiAKIHZvaWQgQ2hyb21pdW1EYXRhT2JqZWN0OjpjbGVhckFsbEV4Y2VwdEZpbGVzKCkKIHsK
LSAgICBtX3VybFRpdGxlID0gIiI7Ci0gICAgbV91cmwgPSBLVVJMKCk7Ci0gICAgbV91cmlMaXN0
ID0gIiI7Ci0gICAgbV9kb3dubG9hZE1ldGFkYXRhID0gIiI7Ci0gICAgbV9maWxlRXh0ZW5zaW9u
ID0gIiI7Ci0gICAgbV9wbGFpblRleHQgPSAiIjsKLSAgICBtX3RleHRIdG1sID0gIiI7Ci0gICAg
bV9odG1sQmFzZVVybCA9IEtVUkwoKTsKLSAgICBtX2ZpbGVDb250ZW50RmlsZW5hbWUgPSAiIjsK
LSAgICBpZiAobV9maWxlQ29udGVudCkKLSAgICAgICAgbV9maWxlQ29udGVudC0+Y2xlYXIoKTsK
LX0KLQotYm9vbCBDaHJvbWl1bURhdGFPYmplY3Q6Omhhc0RhdGEoKSBjb25zdAotewotICAgIHJl
dHVybiAhbV91cmwuaXNFbXB0eSgpCi0gICAgICAgIHx8ICFtX3VyaUxpc3QuaXNFbXB0eSgpCi0g
ICAgICAgIHx8ICFtX2Rvd25sb2FkTWV0YWRhdGEuaXNFbXB0eSgpCi0gICAgICAgIHx8ICFtX2Zp
bGVFeHRlbnNpb24uaXNFbXB0eSgpCi0gICAgICAgIHx8ICFtX2ZpbGVuYW1lcy5pc0VtcHR5KCkK
LSAgICAgICAgfHwgIW1fcGxhaW5UZXh0LmlzRW1wdHkoKQotICAgICAgICB8fCAhbV90ZXh0SHRt
bC5pc0VtcHR5KCkKLSAgICAgICAgfHwgbV9maWxlQ29udGVudDsKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1faXRlbXMtPmxlbmd0aCgpOyApIHsKKyAgICAgICAgaWYgKG1faXRlbXMtPml0
ZW0oaSktPmtpbmQoKSA9PSBEYXRhVHJhbnNmZXJJdGVtOjpraW5kU3RyaW5nKSB7CisgICAgICAg
ICAgICBtX2l0ZW1zLT5kZWxldGVJdGVtKGkpOworICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIH0KKyAgICAgICAgKytpOworICAgIH0KIH0KIAogSGFzaFNldDxTdHJpbmc+IENocm9taXVt
RGF0YU9iamVjdDo6dHlwZXMoKSBjb25zdAogewotICAgIGlmIChtX3N0b3JhZ2VNb2RlID09IFBh
c3RlYm9hcmQpIHsKLSAgICAgICAgYm9vbCBpZ25vcmVkQ29udGFpbnNGaWxlbmFtZXM7Ci0gICAg
ICAgIHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6OmNsaXBib2FyZFJlYWRBdmFpbGFibGVUeXBlcyhj
dXJyZW50UGFzdGVib2FyZEJ1ZmZlcigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmlnbm9yZWRDb250YWluc0ZpbGVuYW1lcyk7
CisgICAgSGFzaFNldDxTdHJpbmc+IHJlc3VsdHM7CisgICAgYm9vbCBjb250YWluc0ZpbGVzID0g
ZmFsc2U7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2l0ZW1zLT5sZW5ndGgoKTsgKytp
KSB7CisgICAgICAgIGlmIChtX2l0ZW1zLT5pdGVtKGkpLT5raW5kKCkgPT0gRGF0YVRyYW5zZmVy
SXRlbTo6a2luZFN0cmluZykKKyAgICAgICAgICAgIHJlc3VsdHMuYWRkKG1faXRlbXMtPml0ZW0o
aSktPnR5cGUoKSk7CisgICAgICAgIGVsc2UgaWYgKG1faXRlbXMtPml0ZW0oaSktPmtpbmQoKSA9
PSBEYXRhVHJhbnNmZXJJdGVtOjpraW5kRmlsZSkKKyAgICAgICAgICAgIGNvbnRhaW5zRmlsZXMg
PSB0cnVlOwogICAgIH0KKyAgICBpZiAoY29udGFpbnNGaWxlcykKKyAgICAgICAgcmVzdWx0cy5h
ZGQobWltZVR5cGVGaWxlcyk7CiAKLSAgICBIYXNoU2V0PFN0cmluZz4gcmVzdWx0czsKKyAgICBy
ZXR1cm4gcmVzdWx0czsKK30KIAotICAgIGlmICghbV9wbGFpblRleHQuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgIHJlc3VsdHMuYWRkKG1pbWVUeXBlVGV4dCk7Ci0gICAgICAgIHJlc3VsdHMuYWRkKG1p
bWVUeXBlVGV4dFBsYWluKTsKK1N0cmluZyBDaHJvbWl1bURhdGFPYmplY3Q6OmdldERhdGEoY29u
c3QgU3RyaW5nJiB0eXBlLCBib29sJiBzdWNjZXNzKSBjb25zdAoreworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV9pdGVtcy0+bGVuZ3RoKCk7ICsraSkgeworICAgICAgICBpZiAobV9pdGVt
cy0+aXRlbShpKS0+a2luZCgpID09IERhdGFUcmFuc2Zlckl0ZW06OmtpbmRTdHJpbmcKKyAgICAg
ICAgICAgICYmIG1faXRlbXMtPml0ZW0oaSktPnR5cGUoKSA9PSB0eXBlKSB7CisgICAgICAgICAg
ICBzdWNjZXNzID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBtX2l0ZW1zLT5pdGVtKGkpLT5s
ZWdhY3lHZXRBc1N0cmluZygpOworICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKG1fdXJsLmlz
VmFsaWQoKSkKLSAgICAgICAgcmVzdWx0cy5hZGQobWltZVR5cGVVUkwpOwotCi0gICAgaWYgKCFt
X3VyaUxpc3QuaXNFbXB0eSgpKQotICAgICAgICByZXN1bHRzLmFkZChtaW1lVHlwZVRleHRVUklM
aXN0KTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CiAKLSAgICBpZiAoIW1fdGV4dEh0bWwuaXNF
bXB0eSgpKQotICAgICAgICByZXN1bHRzLmFkZChtaW1lVHlwZVRleHRIVE1MKTsKK2Jvb2wgQ2hy
b21pdW1EYXRhT2JqZWN0OjpzZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5n
JiBkYXRhKQoreworICAgIGNsZWFyRGF0YSh0eXBlKTsKKyAgICAvLyBXZSByZW1vdmVkIHRoZSBv
bmx5IGl0ZW0gd2hlcmUga2luZCA9PSAnc3RyaW5nJyBhbmQgbWF0Y2hpbmcgdHlwZSwgc28gaXQg
c2hvdWxkIGJlIGltcG9zc2libGUKKyAgICAvLyB0byBnZXQgYW4gZXhjZXB0aW9uLgorICAgIG1f
aXRlbXMtPmFkZChkYXRhLCB0eXBlLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KIAotICAgIGZvciAoSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJh
dG9yOjpLZXlzIGl0ID0gbV9jdXN0b21EYXRhLmJlZ2luKCkua2V5cygpOwotICAgICAgICAgaXQg
IT0gbV9jdXN0b21EYXRhLmVuZCgpLmtleXMoKTsgKytpdCkgewotICAgICAgICByZXN1bHRzLmFk
ZCgqaXQpOwordm9pZCBDaHJvbWl1bURhdGFPYmplY3Q6OmdldFVSTChTdHJpbmcmIHVybCwgU3Ry
aW5nKiB0aXRsZSkgY29uc3QKK3sKKyAgICBSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUNocm9taXVt
PiBpdGVtID0gZmluZEl0ZW0oRGF0YVRyYW5zZmVySXRlbTo6a2luZFN0cmluZywgbWltZVR5cGVU
ZXh0VVJJTGlzdCk7CisgICAgaWYgKGl0ZW0pIHsKKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3Vs
ZCBwcm9iYWJseSBpbXBsZW1lbnQgY29udmVydC10by1VUkwgbG9naWMgaGVyZS4KKyAgICAgICAg
dXJsID0gaXRlbS0+bGVnYWN5R2V0QXNTdHJpbmcoKTsKKyAgICAgICAgaWYgKHRpdGxlKQorICAg
ICAgICAgICAgKnRpdGxlID0gc3RhdGljX2Nhc3Q8RGF0YVRyYW5zZmVyVVJJTGlzdEl0ZW0qPihp
dGVtLmdldCgpKS0+dGl0bGUoKTsKICAgICB9Cit9CiAKLSAgICByZXR1cm4gcmVzdWx0czsKK3Zv
aWQgQ2hyb21pdW1EYXRhT2JqZWN0OjpzZXRVUkwoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0
cmluZyYgdGl0bGUpCit7CisgICAgY2xlYXJEYXRhKG1pbWVUeXBlVGV4dFVSSUxpc3QpOworICAg
IG1faXRlbXMtPmludGVybmFsQWRkVVJMKHVybCwgdGl0bGUpOwogfQogCi1TdHJpbmcgQ2hyb21p
dW1EYXRhT2JqZWN0OjpnZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgYm9vbCYgc3VjY2Vzcykg
Y29uc3QKK3ZvaWQgQ2hyb21pdW1EYXRhT2JqZWN0OjpnZXRIVE1MKFN0cmluZyYgbWFya3VwLCBL
VVJMJiBiYXNlVVJMKSBjb25zdAogewotICAgIGlmICh0eXBlID09IG1pbWVUeXBlVGV4dFBsYWlu
KSB7Ci0gICAgICAgIGlmIChtX3N0b3JhZ2VNb2RlID09IFBhc3RlYm9hcmQpIHsKLSAgICAgICAg
ICAgIFN0cmluZyB0ZXh0ID0gUGxhdGZvcm1TdXBwb3J0OjpjbGlwYm9hcmRSZWFkUGxhaW5UZXh0
KGN1cnJlbnRQYXN0ZWJvYXJkQnVmZmVyKCkpOwotICAgICAgICAgICAgc3VjY2VzcyA9ICF0ZXh0
LmlzRW1wdHkoKTsKLSAgICAgICAgICAgIHJldHVybiB0ZXh0OwotICAgICAgICB9Ci0gICAgICAg
IHN1Y2Nlc3MgPSAhbV9wbGFpblRleHQuaXNFbXB0eSgpOwotICAgICAgICByZXR1cm4gbV9wbGFp
blRleHQ7CisgICAgUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bT4gaXRlbSA9IGZpbmRJ
dGVtKERhdGFUcmFuc2Zlckl0ZW06OmtpbmRTdHJpbmcsIG1pbWVUeXBlVGV4dEhUTUwpOworICAg
IGlmIChpdGVtKSB7CisgICAgICAgIG1hcmt1cCA9IGl0ZW0tPmxlZ2FjeUdldEFzU3RyaW5nKCk7
CisgICAgICAgIGJhc2VVUkwgPSBzdGF0aWNfY2FzdDxEYXRhVHJhbnNmZXJIVE1MSXRlbSo+KGl0
ZW0uZ2V0KCkpLT5iYXNlVVJMKCk7CiAgICAgfQorfQogCi0gICAgaWYgKHR5cGUgPT0gbWltZVR5
cGVVUkwpIHsKLSAgICAgICAgc3VjY2VzcyA9ICFtX3VybC5pc0VtcHR5KCk7Ci0gICAgICAgIHJl
dHVybiBtX3VybC5zdHJpbmcoKTsKLSAgICB9Cit2b2lkIENocm9taXVtRGF0YU9iamVjdDo6c2V0
SFRNTChjb25zdCBTdHJpbmcmIG1hcmt1cCwgY29uc3QgS1VSTCYgYmFzZVVSTCkKK3sKKyAgICBj
bGVhckRhdGEobWltZVR5cGVUZXh0SFRNTCk7CisgICAgbV9pdGVtcy0+aW50ZXJuYWxBZGRIVE1M
KG1hcmt1cCwgYmFzZVVSTCk7Cit9CiAKLSAgICBpZiAodHlwZSA9PSBtaW1lVHlwZVRleHRVUklM
aXN0KSB7Ci0gICAgICAgIHN1Y2Nlc3MgPSAhbV91cmlMaXN0LmlzRW1wdHkoKTsKLSAgICAgICAg
cmV0dXJuIG1fdXJpTGlzdDsKLSAgICB9CitTdHJpbmcgQ2hyb21pdW1EYXRhT2JqZWN0Ojp1cmxU
aXRsZSgpIGNvbnN0Cit7CisgICAgUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bT4gaXRl
bSA9IGZpbmRJdGVtKERhdGFUcmFuc2Zlckl0ZW06OmtpbmRTdHJpbmcsIG1pbWVUeXBlVGV4dFVS
SUxpc3QpOworICAgIGlmICghaXRlbSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxEYXRhVHJhbnNmZXJVUklMaXN0SXRlbSo+KGl0ZW0uZ2V0KCkpLT50
aXRsZSgpOworfQogCi0gICAgaWYgKHR5cGUgPT0gbWltZVR5cGVUZXh0SFRNTCkgewotICAgICAg
ICBpZiAobV9zdG9yYWdlTW9kZSA9PSBQYXN0ZWJvYXJkKSB7Ci0gICAgICAgICAgICBTdHJpbmcg
aHRtbFRleHQ7Ci0gICAgICAgICAgICBLVVJMIHNvdXJjZVVSTDsKLSAgICAgICAgICAgIHVuc2ln
bmVkIGlnbm9yZWQ7Ci0gICAgICAgICAgICBQbGF0Zm9ybVN1cHBvcnQ6OmNsaXBib2FyZFJlYWRI
VE1MKGN1cnJlbnRQYXN0ZWJvYXJkQnVmZmVyKCksICZodG1sVGV4dCwgJnNvdXJjZVVSTCwgJmln
bm9yZWQsICZpZ25vcmVkKTsKLSAgICAgICAgICAgIHN1Y2Nlc3MgPSAhaHRtbFRleHQuaXNFbXB0
eSgpOwotICAgICAgICAgICAgcmV0dXJuIGh0bWxUZXh0OwotICAgICAgICB9Ci0gICAgICAgIHN1
Y2Nlc3MgPSAhbV90ZXh0SHRtbC5pc0VtcHR5KCk7Ci0gICAgICAgIHJldHVybiBtX3RleHRIdG1s
Owordm9pZCBDaHJvbWl1bURhdGFPYmplY3Q6OnNldFVybFRpdGxlKGNvbnN0IFN0cmluZyYgdXJs
VGl0bGUpCit7CisgICAgUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bT4gaXRlbSA9IGZp
bmRJdGVtKERhdGFUcmFuc2Zlckl0ZW06OmtpbmRTdHJpbmcsIG1pbWVUeXBlVGV4dFVSSUxpc3Qp
OworICAgIGlmICghaXRlbSkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gVGhl
IGxlZ2FjeSBBUEkgbm93IGhhcyB0byBlbmZvcmNlIGFuIG9yZGVyaW5nLiBVZ2guCisgICAgICAg
IHJldHVybjsKICAgICB9CisgICAgc3RhdGljX2Nhc3Q8RGF0YVRyYW5zZmVyVVJJTGlzdEl0ZW0q
PihpdGVtLmdldCgpKS0+c2V0VGl0bGUodXJsVGl0bGUpOworfQogCi0gICAgaWYgKHR5cGUgPT0g
bWltZVR5cGVEb3dubG9hZFVSTCkgewotICAgICAgICBzdWNjZXNzID0gIW1fZG93bmxvYWRNZXRh
ZGF0YS5pc0VtcHR5KCk7Ci0gICAgICAgIHJldHVybiBtX2Rvd25sb2FkTWV0YWRhdGE7Ci0gICAg
fQorS1VSTCBDaHJvbWl1bURhdGFPYmplY3Q6Omh0bWxCYXNlVXJsKCkgY29uc3QKK3sKKyAgICBS
ZWZQdHI8RGF0YVRyYW5zZmVySXRlbUNocm9taXVtPiBpdGVtID0gZmluZEl0ZW0oRGF0YVRyYW5z
ZmVySXRlbTo6a2luZFN0cmluZywgbWltZVR5cGVUZXh0SFRNTCk7CisgICAgaWYgKCFpdGVtKQor
ICAgICAgICByZXR1cm4gS1VSTCgpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxEYXRhVHJhbnNm
ZXJIVE1MSXRlbSo+KGl0ZW0uZ2V0KCkpLT5iYXNlVVJMKCk7Cit9CiAKLSAgICBpZiAobV9zdG9y
YWdlTW9kZSA9PSBQYXN0ZWJvYXJkKSB7Ci0gICAgICAgIFN0cmluZyBkYXRhID0gUGxhdGZvcm1T
dXBwb3J0OjpjbGlwYm9hcmRSZWFkQ3VzdG9tRGF0YShjdXJyZW50UGFzdGVib2FyZEJ1ZmZlcigp
LCB0eXBlKTsKLSAgICAgICAgc3VjY2VzcyA9ICFkYXRhLmlzRW1wdHkoKTsKLSAgICAgICAgcmV0
dXJuIGRhdGE7Cit2b2lkIENocm9taXVtRGF0YU9iamVjdDo6c2V0SHRtbEJhc2VVcmwoY29uc3Qg
S1VSTCYgdXJsKQoreworICAgIFJlZlB0cjxEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0+IGl0ZW0g
PSBmaW5kSXRlbShEYXRhVHJhbnNmZXJJdGVtOjpraW5kU3RyaW5nLCBtaW1lVHlwZVRleHRIVE1M
KTsKKyAgICBpZiAoIWl0ZW0pIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIFRo
ZSBsZWdhY3kgQVBJIG5vdyBoYXMgdG8gZW5mb3JjZSBhbiBvcmRlcmluZy4gVWdoLgorICAgICAg
ICByZXR1cm47CiAgICAgfQorICAgIHN0YXRpY19jYXN0PERhdGFUcmFuc2ZlckhUTUxJdGVtKj4o
aXRlbS5nZXQoKSktPnNldEJhc2VVUkwodXJsKTsKK30KIAotICAgIEhhc2hNYXA8U3RyaW5nLCBT
dHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fY3VzdG9tRGF0YS5maW5kKHR5cGUpOwotICAg
IGlmIChpdCAhPSBtX2N1c3RvbURhdGEuZW5kKCkpIHsKLSAgICAgICAgc3VjY2VzcyA9IHRydWU7
Ci0gICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gQ2hy
b21pdW1EYXRhT2JqZWN0OjpjdXN0b21EYXRhKCkgY29uc3QKK3sKKyAgICBIYXNoTWFwPFN0cmlu
ZywgU3RyaW5nPiBkYXRhOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9pdGVtcy0+bGVu
Z3RoKCk7ICsraSkgeworICAgICAgICBpZiAobV9pdGVtcy0+aXRlbShpKS0+a2luZCgpICE9IERh
dGFUcmFuc2Zlckl0ZW06OmtpbmRTdHJpbmcpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgLy8gU2tpcCBrbm93biBNSU1FIHR5cGVzIGFzIHRoZXkgYXJlbid0ICdjdXN0b20nLgorICAg
ICAgICBjb25zdCBTdHJpbmcmIHR5cGUgPSBtX2l0ZW1zLT5pdGVtKGkpLT50eXBlKCk7CisgICAg
ICAgIGlmICh0eXBlID09IG1pbWVUeXBlVGV4dFBsYWluIHx8IHR5cGUgPT0gbWltZVR5cGVUZXh0
VVJJTGlzdCB8fCB0eXBlID09IG1pbWVUeXBlVGV4dEhUTUwpCisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgZGF0YS5zZXQobV9pdGVtcy0+aXRlbShpKS0+dHlwZSgpLCBtX2l0ZW1zLT5p
dGVtKGkpLT5sZWdhY3lHZXRBc1N0cmluZygpKTsKICAgICB9CisgICAgcmV0dXJuIGRhdGE7Cit9
CiAKLSAgICBzdWNjZXNzID0gZmFsc2U7Ci0gICAgcmV0dXJuIFN0cmluZygpOwordm9pZCBDaHJv
bWl1bURhdGFPYmplY3Q6OnNldEN1c3RvbURhdGEoY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmlu
Zz4mIGRhdGEpCit7CisgICAgZm9yIChIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBkYXRhLmJlZ2luKCk7IGl0ICE9IGRhdGEuZW5kKCk7ICsraXQpCisgICAgICAg
IHNldERhdGEoaXQtPmZpcnN0LCBpdC0+c2Vjb25kKTsKIH0KIAotYm9vbCBDaHJvbWl1bURhdGFP
YmplY3Q6OnNldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpCiti
b29sIENocm9taXVtRGF0YU9iamVjdDo6Y29udGFpbnNGaWxlbmFtZXMoKSBjb25zdAogewotICAg
IGlmICh0eXBlID09IG1pbWVUeXBlVGV4dFBsYWluKSB7Ci0gICAgICAgIG1fcGxhaW5UZXh0ID0g
ZGF0YTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X2l0ZW1zLT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgIGlmIChtX2l0ZW1zLT5pdGVtKGkpLT5r
aW5kKCkgPT0gRGF0YVRyYW5zZmVySXRlbTo6a2luZEZpbGUKKyAgICAgICAgICAgICYmIHN0YXRp
Y19jYXN0PERhdGFUcmFuc2ZlckZpbGVJdGVtKj4obV9pdGVtcy0+aXRlbShpKS5nZXQoKSktPnN0
b3JhZ2VUeXBlKCkgPT0gRGF0YVRyYW5zZmVyRmlsZUl0ZW06OkZpbGVuYW1lVHlwZSkKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CiAKLSAgICBp
ZiAodHlwZSA9PSBtaW1lVHlwZVVSTCB8fCB0eXBlID09IG1pbWVUeXBlVGV4dFVSSUxpc3QpIHsK
LSAgICAgICAgbV91cmwgPSBLVVJMKCk7Ci0gICAgICAgIFZlY3RvcjxTdHJpbmc+IHVyaUxpc3Q7
Ci0gICAgICAgIC8vIExpbmUgc2VwYXJhdG9yIGlzIFxyXG4gcGVyIFJGQyAyNDgzIC0gaG93ZXZl
ciwgZm9yIGNvbXBhdGliaWxpdHkKLSAgICAgICAgLy8gcmVhc29ucyB3ZSBhbHNvIGFsbG93IGp1
c3QgXG4gaGVyZS4KLSAgICAgICAgZGF0YS5zcGxpdCgnXG4nLCB1cmlMaXN0KTsKLSAgICAgICAg
Ly8gUHJvY2VzcyB0aGUgaW5wdXQgYW5kIGNvcHkgdGhlIGZpcnN0IHZhbGlkIFVSTCBpbnRvIHRo
ZSB1cmwgbWVtYmVyLgotICAgICAgICAvLyBJbiBjYXNlIG5vIFVSTHMgY2FuIGJlIGZvdW5kLCBz
dWJzZXF1ZW50IGNhbGxzIHRvIGdldERhdGEoIlVSTCIpCi0gICAgICAgIC8vIHdpbGwgZ2V0IGFu
IGVtcHR5IHN0cmluZy4gVGhpcyBpcyBpbiBsaW5lIHdpdGggdGhlIEhUTUw1IHNwZWMgKHNlZQot
ICAgICAgICAvLyAiVGhlIERyYWdFdmVudCBhbmQgRGF0YVRyYW5zZmVyIGludGVyZmFjZXMiKS4K
LSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB1cmlMaXN0LnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgICAgICBTdHJpbmcmIGxpbmUgPSB1cmlMaXN0W2ldOwotICAgICAgICAgICAgbGluZSA9
IGxpbmUuc3RyaXBXaGl0ZVNwYWNlKCk7Ci0gICAgICAgICAgICBpZiAobGluZS5pc0VtcHR5KCkp
IHsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGlmIChsaW5lWzBdID09ICcjJykKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgIEtVUkwgdXJsID0gS1VSTChQYXJzZWRVUkxTdHJpbmcsIGxpbmUpOwotICAgICAgICAgICAg
aWYgKHVybC5pc1ZhbGlkKCkpIHsKLSAgICAgICAgICAgICAgICBtX3VybCA9IHVybDsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBtX3Vy
aUxpc3QgPSBkYXRhOwotICAgICAgICByZXR1cm4gdHJ1ZTsKK1ZlY3RvcjxTdHJpbmc+IENocm9t
aXVtRGF0YU9iamVjdDo6ZmlsZW5hbWVzKCkgY29uc3QKK3sKKyAgICBWZWN0b3I8U3RyaW5nPiBm
aWxlbmFtZXM7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2l0ZW1zLT5sZW5ndGgoKTsg
KytpKSB7CisgICAgICAgIGlmIChtX2l0ZW1zLT5pdGVtKGkpLT5raW5kKCkgPT0gRGF0YVRyYW5z
ZmVySXRlbTo6a2luZEZpbGUKKyAgICAgICAgICAgICYmIHN0YXRpY19jYXN0PERhdGFUcmFuc2Zl
ckZpbGVJdGVtKj4obV9pdGVtcy0+aXRlbShpKS5nZXQoKSktPnN0b3JhZ2VUeXBlKCkgPT0gRGF0
YVRyYW5zZmVyRmlsZUl0ZW06OkZpbGVuYW1lVHlwZSkKKyAgICAgICAgICAgIGZpbGVuYW1lcy5h
cHBlbmQoc3RhdGljX2Nhc3Q8QnVmZmVyZWREYXRhVHJhbnNmZXJGaWxlbmFtZUl0ZW0qPihtX2l0
ZW1zLT5pdGVtKGkpLmdldCgpKS0+ZmlsZW5hbWUoKSk7CiAgICAgfQorICAgIHJldHVybiBmaWxl
bmFtZXM7Cit9CisKK3ZvaWQgQ2hyb21pdW1EYXRhT2JqZWN0OjphZGRGaWxlbmFtZShjb25zdCBT
dHJpbmcmIGZpbGVuYW1lKQoreworICAgIG1faXRlbXMtPmludGVybmFsQWRkRmlsZW5hbWUoZmls
ZW5hbWUpOworfQogCi0gICAgaWYgKHR5cGUgPT0gbWltZVR5cGVUZXh0SFRNTCkgewotICAgICAg
ICBtX3RleHRIdG1sID0gZGF0YTsKLSAgICAgICAgbV9odG1sQmFzZVVybCA9IEtVUkwoKTsKLSAg
ICAgICAgcmV0dXJuIHRydWU7Cit2b2lkIENocm9taXVtRGF0YU9iamVjdDo6c2V0RmlsZW5hbWVz
KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMpCit7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBmaWxlbmFtZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgYWRkRmlsZW5hbWUoZmls
ZW5hbWVzW2ldKTsKICAgICB9Cit9CisKK3ZvaWQgQ2hyb21pdW1EYXRhT2JqZWN0OjphZGRTaGFy
ZWRCdWZmZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4dGVuc2lvbiwgUGFz
c1JlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlcikKK3sKKyAgICBtX2l0ZW1zLT5pbnRlcm5hbEFk
ZFNoYXJlZEJ1ZmZlcihuYW1lLCBleHRlbnNpb24sIGJ1ZmZlcik7Cit9CiAKLSAgICBpZiAodHlw
ZSA9PSBtaW1lVHlwZURvd25sb2FkVVJMKSB7Ci0gICAgICAgIG1fZG93bmxvYWRNZXRhZGF0YSA9
IGRhdGE7Ci0gICAgICAgIHJldHVybiB0cnVlOworLy8gU2ltcGxlIGhlbHBlciB0byBzdXBwb3J0
IGRlcHJlY2F0ZWQgZnVuY3Rpb25zCitzdGF0aWMgUGFzc1JlZlB0cjxCdWZmZXJlZERhdGFUcmFu
c2ZlclNoYXJlZEJ1ZmZlckl0ZW0+IGZpbmRTaGFyZWRCdWZmZXJJdGVtKFBhc3NSZWZQdHI8RGF0
YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bT4gaXRlbXMpCit7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBpdGVtcy0+bGVuZ3RoKCk7ICsraSkgeworICAgICAgICBpZiAoaXRlbXMtPml0ZW0o
aSktPmtpbmQoKSA9PSBEYXRhVHJhbnNmZXJJdGVtOjpraW5kRmlsZQorICAgICAgICAgICAgJiYg
c3RhdGljX2Nhc3Q8RGF0YVRyYW5zZmVyRmlsZUl0ZW0qPihpdGVtcy0+aXRlbShpKS5nZXQoKSkt
PnN0b3JhZ2VUeXBlKCkgPT0gRGF0YVRyYW5zZmVyRmlsZUl0ZW06OlNoYXJlZEJ1ZmZlclR5cGUp
CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QnVmZmVyZWREYXRhVHJhbnNmZXJTaGFy
ZWRCdWZmZXJJdGVtKj4oaXRlbXMtPml0ZW0oaSkuZ2V0KCkpOwogICAgIH0KKyAgICByZXR1cm4g
MDsKK30KIAotICAgIGlmICh0eXBlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwor
U3RyaW5nIENocm9taXVtRGF0YU9iamVjdDo6ZmlsZUV4dGVuc2lvbigpIGNvbnN0Cit7CisgICAg
UmVmUHRyPEJ1ZmZlcmVkRGF0YVRyYW5zZmVyU2hhcmVkQnVmZmVySXRlbT4gaXRlbSA9IGZpbmRT
aGFyZWRCdWZmZXJJdGVtKG1faXRlbXMpOworICAgIHJldHVybiBpdGVtID8gaXRlbS0+ZXh0ZW5z
aW9uKCkgOiBTdHJpbmcoKTsKK30KIAotICAgIG1fY3VzdG9tRGF0YS5zZXQodHlwZSwgZGF0YSk7
Ci0gICAgcmV0dXJuIHRydWU7CitTdHJpbmcgQ2hyb21pdW1EYXRhT2JqZWN0OjpmaWxlQ29udGVu
dEZpbGVuYW1lKCkgY29uc3QKK3sKKyAgICBSZWZQdHI8QnVmZmVyZWREYXRhVHJhbnNmZXJTaGFy
ZWRCdWZmZXJJdGVtPiBpdGVtID0gZmluZFNoYXJlZEJ1ZmZlckl0ZW0obV9pdGVtcyk7CisgICAg
cmV0dXJuIGl0ZW0gPyBpdGVtLT5uYW1lKCkgOiBTdHJpbmcoKTsKIH0KIAotYm9vbCBDaHJvbWl1
bURhdGFPYmplY3Q6OmNvbnRhaW5zRmlsZW5hbWVzKCkgY29uc3QKK1Bhc3NSZWZQdHI8U2hhcmVk
QnVmZmVyPiBDaHJvbWl1bURhdGFPYmplY3Q6OmZpbGVDb250ZW50KCkgY29uc3QKIHsKLSAgICBi
b29sIGNvbnRhaW5zRmlsZW5hbWVzOwotICAgIGlmIChtX3N0b3JhZ2VNb2RlID09IFBhc3RlYm9h
cmQpIHsKLSAgICAgICAgSGFzaFNldDxTdHJpbmc+IGlnbm9yZWRSZXN1bHRzID0KLSAgICAgICAg
ICAgIFBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJvYXJkUmVhZEF2YWlsYWJsZVR5cGVzKGN1cnJlbnRQ
YXN0ZWJvYXJkQnVmZmVyKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAmY29udGFpbnNGaWxlbmFtZXMpOwotICAgIH0gZWxzZQotICAg
ICAgICBjb250YWluc0ZpbGVuYW1lcyA9ICFtX2ZpbGVuYW1lcy5pc0VtcHR5KCk7Ci0gICAgcmV0
dXJuIGNvbnRhaW5zRmlsZW5hbWVzOworICAgIFJlZlB0cjxCdWZmZXJlZERhdGFUcmFuc2ZlclNo
YXJlZEJ1ZmZlckl0ZW0+IGl0ZW0gPSBmaW5kU2hhcmVkQnVmZmVySXRlbShtX2l0ZW1zKTsKKyAg
ICByZXR1cm4gaXRlbSA/IGl0ZW0tPmJ1ZmZlcigpIDogMDsKIH0KIAotQ2hyb21pdW1EYXRhT2Jq
ZWN0OjpDaHJvbWl1bURhdGFPYmplY3QoU3RvcmFnZU1vZGUgc3RvcmFnZU1vZGUpCi0gICAgOiBt
X3N0b3JhZ2VNb2RlKHN0b3JhZ2VNb2RlKQorQ2hyb21pdW1EYXRhT2JqZWN0OjpDaHJvbWl1bURh
dGFPYmplY3QoUGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtPiBpdGVtcykK
KyAgICA6IG1faXRlbXMoaXRlbXMpCiB7CiB9CiAKIENocm9taXVtRGF0YU9iamVjdDo6Q2hyb21p
dW1EYXRhT2JqZWN0KGNvbnN0IENocm9taXVtRGF0YU9iamVjdCYgb3RoZXIpCi0gICAgOiBSZWZD
b3VudGVkPENocm9taXVtRGF0YU9iamVjdD4oKQotICAgICwgbV9zdG9yYWdlTW9kZShvdGhlci5t
X3N0b3JhZ2VNb2RlKQotICAgICwgbV91cmxUaXRsZShvdGhlci5tX3VybFRpdGxlKQotICAgICwg
bV9kb3dubG9hZE1ldGFkYXRhKG90aGVyLm1fZG93bmxvYWRNZXRhZGF0YSkKLSAgICAsIG1fZmls
ZUV4dGVuc2lvbihvdGhlci5tX2ZpbGVFeHRlbnNpb24pCi0gICAgLCBtX2ZpbGVuYW1lcyhvdGhl
ci5tX2ZpbGVuYW1lcykKLSAgICAsIG1fcGxhaW5UZXh0KG90aGVyLm1fcGxhaW5UZXh0KQotICAg
ICwgbV90ZXh0SHRtbChvdGhlci5tX3RleHRIdG1sKQotICAgICwgbV9odG1sQmFzZVVybChvdGhl
ci5tX2h0bWxCYXNlVXJsKQotICAgICwgbV9maWxlQ29udGVudEZpbGVuYW1lKG90aGVyLm1fZmls
ZUNvbnRlbnRGaWxlbmFtZSkKLSAgICAsIG1fdXJsKG90aGVyLm1fdXJsKQotICAgICwgbV91cmlM
aXN0KG90aGVyLm1fdXJpTGlzdCkKKyAgICA6IG1faXRlbXMob3RoZXIubV9pdGVtcykKK3sKK30K
KworUGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0+IENocm9taXVtRGF0YU9iamVj
dDo6ZmluZEl0ZW0oY29uc3QgU3RyaW5nJiBraW5kLCBjb25zdCBTdHJpbmcmIHR5cGUpIGNvbnN0
CiB7Ci0gICAgaWYgKG90aGVyLm1fZmlsZUNvbnRlbnQuZ2V0KCkpCi0gICAgICAgIG1fZmlsZUNv
bnRlbnQgPSBvdGhlci5tX2ZpbGVDb250ZW50LT5jb3B5KCk7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBtX2l0ZW1zLT5sZW5ndGgoKTsgKytpKQorICAgICAgICBpZiAobV9pdGVtcy0+aXRl
bShpKS0+a2luZCgpID09IGtpbmQgJiYgbV9pdGVtcy0+aXRlbShpKS0+dHlwZSgpID09IHR5cGUp
CisgICAgICAgICAgICByZXR1cm4gbV9pdGVtcy0+aXRlbShpKTsKKyAgICByZXR1cm4gMDsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuaAppbmRleCA3ZTY3NWJmOTM5OTUwYmZl
ODg1MjM0YjA3MWU5YTg0MmQxNGYxYjE4Li44YjU2ZDEyMDhlNmFiZTFiNmYzMjdhM2U1ZDhhMGUx
MzkxOGQ4ZWIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9D
aHJvbWl1bURhdGFPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9DaHJvbWl1bURhdGFPYmplY3QuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KGMpIDIwMDgsIDIwMDksIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKGMpIDIwMDgsIDIwMDksIDIwMTIsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKiAKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtMzEsNiArMzEsNyBA
QAogI2lmbmRlZiBDaHJvbWl1bURhdGFPYmplY3RfaAogI2RlZmluZSBDaHJvbWl1bURhdGFPYmpl
Y3RfaAogCisjaW5jbHVkZSAiRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bS5oIgogI2luY2x1
ZGUgIktVUkwuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlNoYXJl
ZEJ1ZmZlci5oIgpAQCAtNDcsMTkgKzQ4LDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIC8vIG9m
IGFuZCBpcyBub3Qgc3BlY2lmaWMgdG8gYSBwbGF0Zm9ybS4KIGNsYXNzIENocm9taXVtRGF0YU9i
amVjdCA6IHB1YmxpYyBSZWZDb3VudGVkPENocm9taXVtRGF0YU9iamVjdD4gewogcHVibGljOgot
ICAgIGVudW0gU3RvcmFnZU1vZGUgewotICAgICAgICBCdWZmZXJlZCwKLSAgICAgICAgUGFzdGVi
b2FyZCwKLSAgICB9OwotCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2hyb21pdW1EYXRhT2JqZWN0
PiBjcmVhdGVGcm9tUGFzdGVib2FyZCgpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IENocm9taXVtRGF0YU9iamVjdChQYXN0ZWJvYXJkKSk7CisgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgQ2hyb21pdW1EYXRhT2JqZWN0KERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW06
OmNyZWF0ZUZyb21QYXN0ZWJvYXJkKCkpKTsKICAgICB9CiAKICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxDaHJvbWl1bURhdGFPYmplY3Q+IGNyZWF0ZSgpCiAgICAgewotICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IENocm9taXVtRGF0YU9iamVjdChCdWZmZXJlZCkpOworICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IENocm9taXVtRGF0YU9iamVjdChEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9t
aXVtOjpjcmVhdGUoKSkpOwogICAgIH0KIAogICAgIFBhc3NSZWZQdHI8Q2hyb21pdW1EYXRhT2Jq
ZWN0PiBjb3B5KCkgY29uc3QKQEAgLTY3LDcwICs2Myw1MSBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgQ2hyb21pdW1EYXRhT2JqZWN0KCp0aGlzKSk7CiAgICAgfQogCi0g
ICAgU3RvcmFnZU1vZGUgc3RvcmFnZU1vZGUoKSBjb25zdCB7IHJldHVybiBtX3N0b3JhZ2VNb2Rl
OyB9CisgICAgUGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtPiBpdGVtcygp
IGNvbnN0OwogCiAgICAgdm9pZCBjbGVhckRhdGEoY29uc3QgU3RyaW5nJiB0eXBlKTsKICAgICB2
b2lkIGNsZWFyQWxsKCk7CiAgICAgdm9pZCBjbGVhckFsbEV4Y2VwdEZpbGVzKCk7CiAKLSAgICBi
b29sIGhhc0RhdGEoKSBjb25zdDsKLQogICAgIEhhc2hTZXQ8U3RyaW5nPiB0eXBlcygpIGNvbnN0
OwogICAgIFN0cmluZyBnZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgYm9vbCYgc3VjY2Vzcykg
Y29uc3Q7CiAgICAgYm9vbCBzZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5n
JiBkYXRhKTsKIAotICAgIC8vIFNwZWNpYWwgaGFuZGxlcnMgZm9yIFVSTC9IVE1MIG1ldGFkYXRh
LgotICAgIFN0cmluZyB1cmxUaXRsZSgpIGNvbnN0IHsgcmV0dXJuIG1fdXJsVGl0bGU7IH0KLSAg
ICB2b2lkIHNldFVybFRpdGxlKGNvbnN0IFN0cmluZyYgdXJsVGl0bGUpIHsgbV91cmxUaXRsZSA9
IHVybFRpdGxlOyB9Ci0gICAgS1VSTCBodG1sQmFzZVVybCgpIGNvbnN0IHsgcmV0dXJuIG1faHRt
bEJhc2VVcmw7IH0KLSAgICB2b2lkIHNldEh0bWxCYXNlVXJsKGNvbnN0IEtVUkwmIHVybCkgeyBt
X2h0bWxCYXNlVXJsID0gdXJsOyB9CisgICAgLy8gU3BlY2lhbCBoYW5kbGVycyBmb3IgZGF0YSB0
eXBlcyB3aXRoIG1ldGFkYXRhLgorICAgIHZvaWQgZ2V0VVJMKFN0cmluZyYgdXJsLCBTdHJpbmcq
IHRpdGxlKSBjb25zdDsKKyAgICB2b2lkIHNldFVSTChjb25zdCBTdHJpbmcmIHVybCwgY29uc3Qg
U3RyaW5nJiB0aXRsZSk7CisgICAgdm9pZCBnZXRIVE1MKFN0cmluZyYgaHRtbCwgS1VSTCYgYmFz
ZVVSTCkgY29uc3Q7CisgICAgdm9pZCBzZXRIVE1MKGNvbnN0IFN0cmluZyYgaHRtbCwgY29uc3Qg
S1VSTCYgYmFzZVVSTCk7CisgICAgLy8gRklYTUU6IFJlbW92ZSB3aGVuIG5vIGxvbmdlciB1c2Vk
LgorICAgIFN0cmluZyB1cmxUaXRsZSgpIGNvbnN0OworICAgIHZvaWQgc2V0VXJsVGl0bGUoY29u
c3QgU3RyaW5nJik7CisgICAgS1VSTCBodG1sQmFzZVVybCgpIGNvbnN0OworICAgIHZvaWQgc2V0
SHRtbEJhc2VVcmwoY29uc3QgS1VSTCYpOworICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGN1
c3RvbURhdGEoKSBjb25zdDsKKyAgICB2b2lkIHNldEN1c3RvbURhdGEoY29uc3QgSGFzaE1hcDxT
dHJpbmcsIFN0cmluZz4mKTsKIAogICAgIC8vIFVzZWQgdG8gaGFuZGxlIGZpbGVzIGJlaW5nIGRy
YWdnZWQgaW4gYW5kIG91dC4KICAgICBib29sIGNvbnRhaW5zRmlsZW5hbWVzKCkgY29uc3Q7Ci0g
ICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcygpIGNvbnN0IHsgcmV0dXJuIG1fZmls
ZW5hbWVzOyB9Ci0gICAgdm9pZCBzZXRGaWxlbmFtZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGZp
bGVuYW1lcykgeyBtX2ZpbGVuYW1lcyA9IGZpbGVuYW1lczsgfQotCi0gICAgLy8gVXNlZCB0byBo
YW5kbGUgZmlsZXMgYmVpbmcgZHJhZ2dlZCBvdXQuCi0gICAgdm9pZCBhZGRGaWxlbmFtZShjb25z
dCBTdHJpbmcmIGZpbGVuYW1lKSB7IG1fZmlsZW5hbWVzLmFwcGVuZChmaWxlbmFtZSk7IH0KKyAg
ICBWZWN0b3I8U3RyaW5nPiBmaWxlbmFtZXMoKSBjb25zdDsKKyAgICB2b2lkIGFkZEZpbGVuYW1l
KGNvbnN0IFN0cmluZyYpOworICAgIC8vIEZJWE1FOiBSZW1vdmUgd2hlbiBubyBsb25nZXIgdXNl
ZC4KKyAgICB2b2lkIHNldEZpbGVuYW1lcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYpOwogCiAgICAg
Ly8gVXNlZCB0byBoYW5kbGUgZmlsZXMgKGltYWdlcykgYmVpbmcgZHJhZ2dlZCBvdXQuCi0gICAg
U3RyaW5nIGZpbGVFeHRlbnNpb24oKSBjb25zdCB7IHJldHVybiBtX2ZpbGVFeHRlbnNpb247IH0K
LSAgICB2b2lkIHNldEZpbGVFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBmaWxlRXh0ZW5zaW9uKSB7
IG1fZmlsZUV4dGVuc2lvbiA9IGZpbGVFeHRlbnNpb247IH0KLSAgICBTdHJpbmcgZmlsZUNvbnRl
bnRGaWxlbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsZUNvbnRlbnRGaWxlbmFtZTsgfQotICAg
IHZvaWQgc2V0RmlsZUNvbnRlbnRGaWxlbmFtZShjb25zdCBTdHJpbmcmIGZpbGVDb250ZW50Rmls
ZW5hbWUpIHsgbV9maWxlQ29udGVudEZpbGVuYW1lID0gZmlsZUNvbnRlbnRGaWxlbmFtZTsgfQot
ICAgIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBmaWxlQ29udGVudCgpIGNvbnN0IHsgcmV0dXJu
IG1fZmlsZUNvbnRlbnQ7IH0KLSAgICB2b2lkIHNldEZpbGVDb250ZW50KFBhc3NSZWZQdHI8U2hh
cmVkQnVmZmVyPiBmaWxlQ29udGVudCkgeyBtX2ZpbGVDb250ZW50ID0gZmlsZUNvbnRlbnQ7IH0K
LSAgICBjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYgY3VzdG9tRGF0YSgpIGNvbnN0IHsg
cmV0dXJuIG1fY3VzdG9tRGF0YTsgfQotICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBjdXN0
b21EYXRhKCkgeyByZXR1cm4gbV9jdXN0b21EYXRhOyB9CisgICAgdm9pZCBhZGRTaGFyZWRCdWZm
ZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4dGVuc2lvbiwgUGFzc1JlZlB0
cjxTaGFyZWRCdWZmZXI+KTsKKyAgICAvLyBGSVhNRTogUmVtb3ZlIHdoZW4gbm8gbG9uZ2VyIHVz
ZWQuCisgICAgU3RyaW5nIGZpbGVFeHRlbnNpb24oKSBjb25zdDsKKyAgICBTdHJpbmcgZmlsZUNv
bnRlbnRGaWxlbmFtZSgpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBmaWxl
Q29udGVudCgpIGNvbnN0OwogCiBwcml2YXRlOgotICAgIGV4cGxpY2l0IENocm9taXVtRGF0YU9i
amVjdChTdG9yYWdlTW9kZSk7CisgICAgZXhwbGljaXQgQ2hyb21pdW1EYXRhT2JqZWN0KFBhc3NS
ZWZQdHI8RGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bT4gaXRlbXMpOwogICAgIGV4cGxpY2l0
IENocm9taXVtRGF0YU9iamVjdChjb25zdCBDaHJvbWl1bURhdGFPYmplY3QmKTsKIAotICAgIFN0
b3JhZ2VNb2RlIG1fc3RvcmFnZU1vZGU7Ci0KLSAgICBTdHJpbmcgbV91cmxUaXRsZTsKLQotICAg
IFN0cmluZyBtX2Rvd25sb2FkTWV0YWRhdGE7Ci0KLSAgICBTdHJpbmcgbV9maWxlRXh0ZW5zaW9u
OwotICAgIFZlY3RvcjxTdHJpbmc+IG1fZmlsZW5hbWVzOwotCi0gICAgU3RyaW5nIG1fcGxhaW5U
ZXh0OwotCi0gICAgU3RyaW5nIG1fdGV4dEh0bWw7Ci0gICAgS1VSTCBtX2h0bWxCYXNlVXJsOwot
Ci0gICAgU3RyaW5nIG1fZmlsZUNvbnRlbnRGaWxlbmFtZTsKLSAgICBSZWZQdHI8U2hhcmVkQnVm
ZmVyPiBtX2ZpbGVDb250ZW50OwotCi0gICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gbV9jdXN0
b21EYXRhOworICAgIFBhc3NSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUNocm9taXVtPiBmaW5kSXRl
bShjb25zdCBTdHJpbmcmIGtpbmQsIGNvbnN0IFN0cmluZyYgdHlwZSkgY29uc3Q7CiAKLSAgICAv
LyBUaGVzZSB0d28gYXJlIGxpbmtlZC4gU2V0dGluZyBtX3VybCB3aWxsIHNldCBtX3VyaUxpc3Qg
dG8gdGhlIHNhbWUKLSAgICAvLyBzdHJpbmcgdmFsdWU7IHNldHRpbmcgbV91cmlMaXN0IHdpbGwg
Y2F1c2UgaXRzIGNvbnRlbnRzIHRvIGJlIHBhcnNlZAotICAgIC8vIGFjY29yZGluZyB0byBSRkMg
MjQ4MyBhbmQgdGhlIGZpcnN0IFVSTCBmb3VuZCB3aWxsIGJlIHNldCBpbiBtX3VybC4KLSAgICBL
VVJMIG1fdXJsOwotICAgIFN0cmluZyBtX3VyaUxpc3Q7CisgICAgLy8gRklYTUU6IFJlbmFtZSB0
byBtX2xpc3QKKyAgICBSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bT4gbV9pdGVt
czsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmNwcAppbmRleCA5YTI2ODc2
MDU3YTgwZGZhNDgxMjllOGQwNTE0MGIzMTBkYTM4MTVkLi5lNjAxNWM3ZWEzNWI4ZmQ2NDIwNzEy
MTFhNzEyMmY2NWQ1NTllMmYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
aHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uY3BwCkBAIC0zMiwxMSArMzIsMTIgQEAKICNp
bmNsdWRlICJDbGlwYm9hcmRNaW1lVHlwZXMuaCIKICNpbmNsdWRlICJDbGlwYm9hcmRVdGlsaXRp
ZXNDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkRhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bS5oIgorI2lu
Y2x1ZGUgIkRhdGFUcmFuc2Zlckl0ZW1MaXN0LmgiCiAjaW5jbHVkZSAiRGF0YVRyYW5zZmVySXRl
bUxpc3RDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRHJhZ0Rh
dGEuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCi0jaW5jbHVkZSAiRmlsZS5oIgorI2luY2x1ZGUg
IkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJGaWxlTGlzdC5oIgogI2luY2x1ZGUgIkZyYW1l
LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCkBAIC00NywyMyArNDgsMTY2IEBACiAjaW5jbHVk
ZSAiUGxhdGZvcm1TdXBwb3J0LmgiCiAjaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJSZW5k
ZXJJbWFnZS5oIgotI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRl
ICJTdHJpbmdDYWxsYmFjay5oIgogI2luY2x1ZGUgIm1hcmt1cC5oIgogCiAjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorbmFtZXNwYWNlIHsK
KworLy8gVGhlc2Ugd3JhcHBlciBjbGFzc2VzIGhlbHAgdXMgdG8gcHJvcGVybHkgc2NvcGUgRGF0
YVRyYW5zZmVySXRlbS9EYXRhVHJhbnNmZXJJdGVtTGlzdCBzbyB0aGV5IGFyZQorLy8gbm90IGF2
YWlsYWJsZSBvdXRzaWRlIHRoZSBjb250ZXh0IHRoYXQgYSBDbGlwYm9hcmQgb2JqZWN0IGlzIHZh
bGlkIGZvci4KK2NsYXNzIERhdGFUcmFuc2Zlckl0ZW1MaXN0V3JhcHBlciA6IHB1YmxpYyBEYXRh
VHJhbnNmZXJJdGVtTGlzdCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YVRy
YW5zZmVySXRlbUxpc3RXcmFwcGVyPiBjcmVhdGUoCisgICAgICAgIFBhc3NSZWZQdHI8Q2xpcGJv
YXJkQ2hyb21pdW0+LCBQYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0+KTsK
KworICAgIHZpcnR1YWwgc2l6ZV90IGxlbmd0aCgpIGNvbnN0OworICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxEYXRhVHJhbnNmZXJJdGVtPiBpdGVtKHVuc2lnbmVkIGxvbmcgaW5kZXgpOworICAgIHZp
cnR1YWwgdm9pZCBkZWxldGVJdGVtKHVuc2lnbmVkIGxvbmcgaW5kZXgsIEV4Y2VwdGlvbkNvZGUm
KTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkKGNvbnN0
IFN0cmluZyYgZGF0YSwgY29uc3QgU3RyaW5nJiB0eXBlLCBFeGNlcHRpb25Db2RlJik7CisgICAg
dmlydHVhbCB2b2lkIGFkZChQYXNzUmVmUHRyPEZpbGU+KSB7IC8qIEZJWE1FOiBJbXBsZW1lbnQg
Ki8gfQorCitwcml2YXRlOgorICAgIERhdGFUcmFuc2Zlckl0ZW1MaXN0V3JhcHBlcihQYXNzUmVm
UHRyPENsaXBib2FyZENocm9taXVtPiwgUGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtTGlzdENo
cm9taXVtPik7CisgIAorICAgIFJlZlB0cjxDbGlwYm9hcmRDaHJvbWl1bT4gbV9jbGlwYm9hcmQ7
CisgICAgUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0+IG1fbGlzdDsKK307CisK
K2NsYXNzIERhdGFUcmFuc2Zlckl0ZW1XcmFwcGVyIDogcHVibGljIERhdGFUcmFuc2Zlckl0ZW0g
eworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1XcmFwcGVy
PiBjcmVhdGUoCisgICAgICAgIFBhc3NSZWZQdHI8Q2xpcGJvYXJkQ2hyb21pdW0+LCBQYXNzUmVm
UHRyPERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bT4pOworCisgICAgdmlydHVhbCBTdHJpbmcga2lu
ZCgpIGNvbnN0OworICAgIHZpcnR1YWwgU3RyaW5nIHR5cGUoKSBjb25zdDsKKworICAgIHZpcnR1
YWwgdm9pZCBnZXRBc1N0cmluZyhQYXNzUmVmUHRyPFN0cmluZ0NhbGxiYWNrPikgY29uc3Q7Cisg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPEJsb2I+IGdldEFzRmlsZSgpIGNvbnN0OworCitwcml2YXRl
OgorICAgIERhdGFUcmFuc2Zlckl0ZW1XcmFwcGVyKFBhc3NSZWZQdHI8Q2xpcGJvYXJkQ2hyb21p
dW0+LCBQYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bT4pOworCisgICAgUmVmUHRy
PENsaXBib2FyZENocm9taXVtPiBtX2NsaXBib2FyZDsKKyAgICBSZWZQdHI8RGF0YVRyYW5zZmVy
SXRlbUNocm9taXVtPiBtX2l0ZW07Cit9OworCitQYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1M
aXN0V3JhcHBlcj4gRGF0YVRyYW5zZmVySXRlbUxpc3RXcmFwcGVyOjpjcmVhdGUoCisgICAgUGFz
c1JlZlB0cjxDbGlwYm9hcmRDaHJvbWl1bT4gY2xpcGJvYXJkLCBQYXNzUmVmUHRyPERhdGFUcmFu
c2Zlckl0ZW1MaXN0Q2hyb21pdW0+IGxpc3QpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBE
YXRhVHJhbnNmZXJJdGVtTGlzdFdyYXBwZXIoY2xpcGJvYXJkLCBsaXN0KSk7Cit9CisKK3NpemVf
dCBEYXRhVHJhbnNmZXJJdGVtTGlzdFdyYXBwZXI6Omxlbmd0aCgpIGNvbnN0Cit7CisgICAgaWYg
KG1fY2xpcGJvYXJkLT5wb2xpY3koKSA9PSBDbGlwYm9hcmROdW1iKQorICAgICAgICByZXR1cm4g
MDsKKyAgICByZXR1cm4gbV9saXN0LT5sZW5ndGgoKTsKK30KKworUGFzc1JlZlB0cjxEYXRhVHJh
bnNmZXJJdGVtPiBEYXRhVHJhbnNmZXJJdGVtTGlzdFdyYXBwZXI6Oml0ZW0odW5zaWduZWQgbG9u
ZyBpbmRleCkKK3sKKyAgICBpZiAobV9jbGlwYm9hcmQtPnBvbGljeSgpID09IENsaXBib2FyZE51
bWIpCisgICAgICAgIHJldHVybiAwOworICAgIFJlZlB0cjxEYXRhVHJhbnNmZXJJdGVtQ2hyb21p
dW0+IGl0ZW0gPSBtX2xpc3QtPml0ZW0oaW5kZXgpOworICAgIGlmICghaXRlbSkKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgcmV0dXJuIERhdGFUcmFuc2Zlckl0ZW1XcmFwcGVyOjpjcmVhdGUobV9j
bGlwYm9hcmQsIGl0ZW0pOworfQorCit2b2lkIERhdGFUcmFuc2Zlckl0ZW1MaXN0V3JhcHBlcjo6
ZGVsZXRlSXRlbSh1bnNpZ25lZCBsb25nIGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAg
ICBpZiAobV9jbGlwYm9hcmQtPnBvbGljeSgpICE9IENsaXBib2FyZFdyaXRhYmxlKSB7CisgICAg
ICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
bV9saXN0LT5kZWxldGVJdGVtKGluZGV4KTsKK30KKwordm9pZCBEYXRhVHJhbnNmZXJJdGVtTGlz
dFdyYXBwZXI6OmNsZWFyKCkKK3sKKyAgICBpZiAobV9jbGlwYm9hcmQtPnBvbGljeSgpICE9IENs
aXBib2FyZFdyaXRhYmxlKQorICAgICAgICByZXR1cm47CisgICAgbV9saXN0LT5jbGVhcigpOwor
fQorCit2b2lkIERhdGFUcmFuc2Zlckl0ZW1MaXN0V3JhcHBlcjo6YWRkKGNvbnN0IFN0cmluZyYg
ZGF0YSwgY29uc3QgU3RyaW5nJiB0eXBlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAo
bV9jbGlwYm9hcmQtPnBvbGljeSgpICE9IENsaXBib2FyZFdyaXRhYmxlKQorICAgICAgICByZXR1
cm47CisgICAgbV9saXN0LT5hZGQoZGF0YSwgdHlwZSwgZWMpOworfQorCitEYXRhVHJhbnNmZXJJ
dGVtTGlzdFdyYXBwZXI6OkRhdGFUcmFuc2Zlckl0ZW1MaXN0V3JhcHBlcigKKyAgICBQYXNzUmVm
UHRyPENsaXBib2FyZENocm9taXVtPiBjbGlwYm9hcmQsIFBhc3NSZWZQdHI8RGF0YVRyYW5zZmVy
SXRlbUxpc3RDaHJvbWl1bT4gbGlzdCkKKyAgICA6IG1fY2xpcGJvYXJkKGNsaXBib2FyZCkKKyAg
ICAsIG1fbGlzdChsaXN0KQoreworfQorCitQYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1XcmFw
cGVyPiBEYXRhVHJhbnNmZXJJdGVtV3JhcHBlcjo6Y3JlYXRlKAorICAgIFBhc3NSZWZQdHI8Q2xp
cGJvYXJkQ2hyb21pdW0+IGNsaXBib2FyZCwgUGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtQ2hy
b21pdW0+IGl0ZW0pCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEYXRhVHJhbnNmZXJJdGVt
V3JhcHBlcihjbGlwYm9hcmQsIGl0ZW0pKTsKK30KKworU3RyaW5nIERhdGFUcmFuc2Zlckl0ZW1X
cmFwcGVyOjpraW5kKCkgY29uc3QKK3sKKyAgICBpZiAobV9jbGlwYm9hcmQtPnBvbGljeSgpID09
IENsaXBib2FyZE51bWIpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICByZXR1cm4gbV9p
dGVtLT5raW5kKCk7Cit9CisKK1N0cmluZyBEYXRhVHJhbnNmZXJJdGVtV3JhcHBlcjo6dHlwZSgp
IGNvbnN0Cit7CisgICAgaWYgKG1fY2xpcGJvYXJkLT5wb2xpY3koKSA9PSBDbGlwYm9hcmROdW1i
KQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0dXJuIG1faXRlbS0+dHlwZSgpOwor
fQorCit2b2lkIERhdGFUcmFuc2Zlckl0ZW1XcmFwcGVyOjpnZXRBc1N0cmluZyhQYXNzUmVmUHRy
PFN0cmluZ0NhbGxiYWNrPiBjYWxsYmFjaykgY29uc3QKK3sKKyAgICBpZiAobV9jbGlwYm9hcmQt
PnBvbGljeSgpICE9IENsaXBib2FyZFJlYWRhYmxlICYmIG1fY2xpcGJvYXJkLT5wb2xpY3koKSAh
PSBDbGlwYm9hcmRXcml0YWJsZSkKKyAgICAgICAgcmV0dXJuOworICAgICAgIAorICAgIG1faXRl
bS0+Z2V0QXNTdHJpbmcoY2FsbGJhY2ssIG1fY2xpcGJvYXJkLT5mcmFtZSgpLT5kb2N1bWVudCgp
LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOworfQorCitQYXNzUmVmUHRyPEJsb2I+IERhdGFU
cmFuc2Zlckl0ZW1XcmFwcGVyOjpnZXRBc0ZpbGUoKSBjb25zdAoreworICAgIGlmIChtX2NsaXBi
b2FyZC0+cG9saWN5KCkgIT0gQ2xpcGJvYXJkUmVhZGFibGUgJiYgbV9jbGlwYm9hcmQtPnBvbGlj
eSgpICE9IENsaXBib2FyZFdyaXRhYmxlKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVy
biBtX2l0ZW0tPmdldEFzRmlsZSgpOworfQorCitEYXRhVHJhbnNmZXJJdGVtV3JhcHBlcjo6RGF0
YVRyYW5zZmVySXRlbVdyYXBwZXIoCisgICAgUGFzc1JlZlB0cjxDbGlwYm9hcmRDaHJvbWl1bT4g
Y2xpcGJvYXJkLCBQYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bT4gaXRlbSkKKyAg
ICA6IG1fY2xpcGJvYXJkKGNsaXBib2FyZCkKKyAgICAsIG1faXRlbShpdGVtKQoreworfQorCit9
IC8vIG5hbWVzcGFjZQorCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiAvLyBXZSBwcm92
aWRlIHRoZSBJRSBjbGlwYm9hcmQgdHlwZXMgKFVSTCBhbmQgVGV4dCksIGFuZCB0aGUgY2xpcGJv
YXJkIHR5cGVzIHNwZWNpZmllZCBpbiB0aGUgV0hBVFdHIFdlYiBBcHBsaWNhdGlvbnMgMS4wIGRy
YWZ0CiAvLyBzZWUgaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQt
d29yay8gU2VjdGlvbiA2LjMuNS4zCiAKLXN0YXRpYyBTdHJpbmcgbm9ybWFsaXplVHlwZShjb25z
dCBTdHJpbmcmIHR5cGUpCitzdGF0aWMgU3RyaW5nIG5vcm1hbGl6ZVR5cGUoY29uc3QgU3RyaW5n
JiB0eXBlLCBib29sJiBjb252ZXJ0VG9VUkwpCiB7CiAgICAgU3RyaW5nIGNsZWFuVHlwZSA9IHR5
cGUuc3RyaXBXaGl0ZVNwYWNlKCkubG93ZXIoKTsKICAgICBpZiAoY2xlYW5UeXBlID09IG1pbWVU
eXBlVGV4dCB8fCBjbGVhblR5cGUuc3RhcnRzV2l0aChtaW1lVHlwZVRleHRQbGFpbkV0YykpCiAg
ICAgICAgIHJldHVybiBtaW1lVHlwZVRleHRQbGFpbjsKKyAgICBpZiAoY2xlYW5UeXBlID09IG1p
bWVUeXBlVVJMKSB7CisgICAgICAgIGNvbnZlcnRUb1VSTCA9IHRydWU7CisgICAgICAgIHJldHVy
biBtaW1lVHlwZVRleHRVUklMaXN0OworICAgIH0KICAgICByZXR1cm4gY2xlYW5UeXBlOwogfQog
CkBAIC03OSw4ICsyMjMsNiBAQCBDbGlwYm9hcmRDaHJvbWl1bTo6Q2xpcGJvYXJkQ2hyb21pdW0o
Q2xpcGJvYXJkVHlwZSBjbGlwYm9hcmRUeXBlLAogICAgIDogQ2xpcGJvYXJkKHBvbGljeSwgY2xp
cGJvYXJkVHlwZSkKICAgICAsIG1fZGF0YU9iamVjdChkYXRhT2JqZWN0KQogICAgICwgbV9mcmFt
ZShmcmFtZSkKLSAgICAsIG1fb3JpZ2luYWxTZXF1ZW5jZU51bWJlcihQbGF0Zm9ybVN1cHBvcnQ6
OmNsaXBib2FyZFNlcXVlbmNlTnVtYmVyKGN1cnJlbnRQYXN0ZWJvYXJkQnVmZmVyKCkpKQotICAg
ICwgbV9kcmFnU3RvcmFnZVVwZGF0ZWQodHJ1ZSkKIHsKIH0KIApAQCAtOTYsMTMgKzIzOCwxMSBA
QCBQYXNzUmVmUHRyPENsaXBib2FyZENocm9taXVtPiBDbGlwYm9hcmRDaHJvbWl1bTo6Y3JlYXRl
KENsaXBib2FyZFR5cGUgY2xpcGJvYXJkVAogCiB2b2lkIENsaXBib2FyZENocm9taXVtOjpjbGVh
ckRhdGEoY29uc3QgU3RyaW5nJiB0eXBlKQogewotICAgIGlmIChwb2xpY3koKSAhPSBDbGlwYm9h
cmRXcml0YWJsZSB8fCAhbV9kYXRhT2JqZWN0KQorICAgIGlmIChwb2xpY3koKSAhPSBDbGlwYm9h
cmRXcml0YWJsZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9kcmFnU3RvcmFnZVVwZGF0ZWQg
PSB0cnVlOwotICAgIG1fZGF0YU9iamVjdC0+Y2xlYXJEYXRhKG5vcm1hbGl6ZVR5cGUodHlwZSkp
OwotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgYm9vbCBpZ25vcmVkOworICAgIG1f
ZGF0YU9iamVjdC0+Y2xlYXJEYXRhKG5vcm1hbGl6ZVR5cGUodHlwZSwgaWdub3JlZCkpOwogfQog
CiB2b2lkIENsaXBib2FyZENocm9taXVtOjpjbGVhckFsbERhdGEoKQpAQCAtMTEwLDIwICsyNTAs
MzkgQEAgdm9pZCBDbGlwYm9hcmRDaHJvbWl1bTo6Y2xlYXJBbGxEYXRhKCkKICAgICBpZiAocG9s
aWN5KCkgIT0gQ2xpcGJvYXJkV3JpdGFibGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZHJh
Z1N0b3JhZ2VVcGRhdGVkID0gdHJ1ZTsKICAgICBtX2RhdGFPYmplY3QtPmNsZWFyQWxsKCk7CiB9
CiAKIFN0cmluZyBDbGlwYm9hcmRDaHJvbWl1bTo6Z2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUs
IGJvb2wmIHN1Y2Nlc3MpIGNvbnN0CiB7CiAgICAgc3VjY2VzcyA9IGZhbHNlOwotICAgIGlmIChw
b2xpY3koKSAhPSBDbGlwYm9hcmRSZWFkYWJsZSB8fCAhbV9kYXRhT2JqZWN0KQorICAgIGlmIChw
b2xpY3koKSAhPSBDbGlwYm9hcmRSZWFkYWJsZSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwog
Ci0gICAgaWYgKGlzRm9yQ29weUFuZFBhc3RlKCkgJiYgcGxhdGZvcm1DbGlwYm9hcmRDaGFuZ2Vk
KCkpCisgICAgYm9vbCBjb252ZXJ0VG9VUkwgPSBmYWxzZTsKKyAgICBTdHJpbmcgZGF0YSA9IG1f
ZGF0YU9iamVjdC0+Z2V0RGF0YShub3JtYWxpemVUeXBlKHR5cGUsIGNvbnZlcnRUb1VSTCksIHN1
Y2Nlc3MpOworICAgIGlmIChzdWNjZXNzICYmIGNvbnZlcnRUb1VSTCkgeworICAgICAgICBWZWN0
b3I8U3RyaW5nPiB1cmlMaXN0OworICAgICAgICAvLyBMaW5lIHNlcGFyYXRvciBpcyBcclxuIHBl
ciBSRkMgMjQ4MyAtIGhvd2V2ZXIsIGZvciBjb21wYXRpYmlsaXR5CisgICAgICAgIC8vIHJlYXNv
bnMgd2UgYWxzbyBhbGxvdyBqdXN0IFxuIGhlcmUuCisgICAgICAgIGRhdGEuc3BsaXQoJ1xuJywg
dXJpTGlzdCk7CisgICAgICAgIC8vIFByb2Nlc3MgdGhlIGlucHV0IGFuZCBjb3B5IHRoZSBmaXJz
dCB2YWxpZCBVUkwgaW50byB0aGUgdXJsIG1lbWJlci4gSW4gY2FzZSBubyBVUkxzIGNhbgorICAg
ICAgICAvLyBiZSBmb3VuZCwgcmV0dXJuIGFuIGVtcHR5IHN0cmluZy5pbGwgZ2V0IGFuIGVtcHR5
IHN0cmluZy4gVGhpcyBpcyBpbiBsaW5lIHdpdGggdGhlIEhUTUw1CisgICAgICAgIC8vIHNwZWMg
KHNlZSAiVGhlIERyYWdFdmVudCBhbmQgRGF0YVRyYW5zZmVyIGludGVyZmFjZXMiKS4KKyAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB1cmlMaXN0LnNpemUoKTsgKytpKSB7CisgICAgICAg
ICAgICBTdHJpbmcmIGxpbmUgPSB1cmlMaXN0W2ldOworICAgICAgICAgICAgbGluZSA9IGxpbmUu
c3RyaXBXaGl0ZVNwYWNlKCk7CisgICAgICAgICAgICBpZiAobGluZS5pc0VtcHR5KCkpCisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAobGluZVswXSA9PSAnIycpCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBLVVJMIHVybCA9IEtVUkwoUGFy
c2VkVVJMU3RyaW5nLCBsaW5lKTsKKyAgICAgICAgICAgIGlmICh1cmwuaXNWYWxpZCgpKQorICAg
ICAgICAgICAgICAgIHJldHVybiB1cmw7CisgICAgICAgIH0KICAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOwotCi0gICAgcmV0dXJuIG1fZGF0YU9iamVjdC0+Z2V0RGF0YShub3JtYWxpemVUeXBlKHR5
cGUpLCBzdWNjZXNzKTsKKyAgICB9CisgICAgcmV0dXJuIGRhdGE7CiB9CiAKIGJvb2wgQ2xpcGJv
YXJkQ2hyb21pdW06OnNldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRh
dGEpCkBAIC0xMzEsNDcgKzI5MCwzNSBAQCBib29sIENsaXBib2FyZENocm9taXVtOjpzZXREYXRh
KGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKQogICAgIGlmIChwb2xpY3ko
KSAhPSBDbGlwYm9hcmRXcml0YWJsZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgbV9k
cmFnU3RvcmFnZVVwZGF0ZWQgPSB0cnVlOwotICAgIHJldHVybiBtX2RhdGFPYmplY3QtPnNldERh
dGEobm9ybWFsaXplVHlwZSh0eXBlKSwgZGF0YSk7Ci19Ci0KLWJvb2wgQ2xpcGJvYXJkQ2hyb21p
dW06OnBsYXRmb3JtQ2xpcGJvYXJkQ2hhbmdlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFBsYXRm
b3JtU3VwcG9ydDo6Y2xpcGJvYXJkU2VxdWVuY2VOdW1iZXIoY3VycmVudFBhc3RlYm9hcmRCdWZm
ZXIoKSkgIT0gbV9vcmlnaW5hbFNlcXVlbmNlTnVtYmVyOworICAgIGJvb2wgaWdub3JlZDsKKyAg
ICByZXR1cm4gbV9kYXRhT2JqZWN0LT5zZXREYXRhKG5vcm1hbGl6ZVR5cGUodHlwZSwgaWdub3Jl
ZCksIGRhdGEpOwogfQogCiAvLyBleHRlbnNpb25zIGJleW9uZCBJRSdzIEFQSQogSGFzaFNldDxT
dHJpbmc+IENsaXBib2FyZENocm9taXVtOjp0eXBlcygpIGNvbnN0CiB7Ci0gICAgSGFzaFNldDxT
dHJpbmc+IHJlc3VsdHM7CiAgICAgaWYgKHBvbGljeSgpICE9IENsaXBib2FyZFJlYWRhYmxlICYm
IHBvbGljeSgpICE9IENsaXBib2FyZFR5cGVzUmVhZGFibGUpCi0gICAgICAgIHJldHVybiByZXN1
bHRzOwotCi0gICAgaWYgKCFtX2RhdGFPYmplY3QpCi0gICAgICAgIHJldHVybiByZXN1bHRzOwot
Ci0gICAgcmVzdWx0cyA9IG1fZGF0YU9iamVjdC0+dHlwZXMoKTsKLQotICAgIGlmIChtX2RhdGFP
YmplY3QtPmNvbnRhaW5zRmlsZW5hbWVzKCkpCi0gICAgICAgIHJlc3VsdHMuYWRkKG1pbWVUeXBl
RmlsZXMpOworICAgICAgICByZXR1cm4gSGFzaFNldDxTdHJpbmc+KCk7CiAKLSAgICByZXR1cm4g
cmVzdWx0czsKKyAgICByZXR1cm4gbV9kYXRhT2JqZWN0LT50eXBlcygpOwogfQogCiBQYXNzUmVm
UHRyPEZpbGVMaXN0PiBDbGlwYm9hcmRDaHJvbWl1bTo6ZmlsZXMoKSBjb25zdAogeworICAgIC8v
IEZJWE1FOiBBY2NvcmRpbmcgdG8gdGhlIHNwZWMsIHdlIGFyZSBzdXBwb3NlZCB0byByZXR1cm4g
dGhlIHNhbWUgRmlsZUxpc3QgZWFjaCB0aW1lLgorICAgIFJlZlB0cjxGaWxlTGlzdD4gZmlsZXMg
PSBGaWxlTGlzdDo6Y3JlYXRlKCk7CiAgICAgaWYgKHBvbGljeSgpICE9IENsaXBib2FyZFJlYWRh
YmxlKQotICAgICAgICByZXR1cm4gRmlsZUxpc3Q6OmNyZWF0ZSgpOwotCi0gICAgaWYgKCFtX2Rh
dGFPYmplY3QpCi0gICAgICAgIHJldHVybiBGaWxlTGlzdDo6Y3JlYXRlKCk7Ci0KLSAgICBjb25z
dCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVzID0gbV9kYXRhT2JqZWN0LT5maWxlbmFtZXMoKTsK
LSAgICBSZWZQdHI8RmlsZUxpc3Q+IGZpbGVMaXN0ID0gRmlsZUxpc3Q6OmNyZWF0ZSgpOwotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmlsZW5hbWVzLnNpemUoKTsgKytpKQotICAgICAgICBm
aWxlTGlzdC0+YXBwZW5kKEZpbGU6OmNyZWF0ZShmaWxlbmFtZXMuYXQoaSkpKTsKLQotICAgIHJl
dHVybiBmaWxlTGlzdC5yZWxlYXNlKCk7CisgICAgICAgIHJldHVybiBmaWxlczsKKworICAgIFJl
ZlB0cjxEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtPiBsaXN0ID0gbV9kYXRhT2JqZWN0LT5p
dGVtcygpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdC0+bGVuZ3RoKCk7ICsraSkg
eworICAgICAgICBpZiAobGlzdC0+aXRlbShpKS0+a2luZCgpID09IERhdGFUcmFuc2Zlckl0ZW06
OmtpbmRGaWxlKSB7CisgICAgICAgICAgICBSZWZQdHI8QmxvYj4gYmxvYiA9IGxpc3QtPml0ZW0o
aSktPmdldEFzRmlsZSgpOworICAgICAgICAgICAgaWYgKGJsb2ItPmlzRmlsZSgpKQorICAgICAg
ICAgICAgICAgIGZpbGVzLT5hcHBlbmQoc3RhdGljX2Nhc3Q8RmlsZSo+KGJsb2IuZ2V0KCkpKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZmlsZXM7CiB9CiAKIHZvaWQgQ2xpcGJvYXJk
Q2hyb21pdW06OnNldERyYWdJbWFnZShDYWNoZWRJbWFnZSogaW1hZ2UsIE5vZGUqIG5vZGUsIGNv
bnN0IEludFBvaW50JiBsb2MpCkBAIC0yNDEsOCArMzg4LDYgQEAgc3RhdGljIHZvaWQgd3JpdGVJ
bWFnZVRvRGF0YU9iamVjdChDaHJvbWl1bURhdGFPYmplY3QqIGRhdGFPYmplY3QsIEVsZW1lbnQq
IGVsZW0KICAgICBpZiAoIWltYWdlQnVmZmVyIHx8ICFpbWFnZUJ1ZmZlci0+c2l6ZSgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBkYXRhT2JqZWN0LT5zZXRGaWxlQ29udGVudChpbWFnZUJ1ZmZl
cik7Ci0KICAgICAvLyBEZXRlcm1pbmUgdGhlIGZpbGVuYW1lIGZvciB0aGUgZmlsZSBjb250ZW50
cyBvZiB0aGUgaW1hZ2UuCiAgICAgU3RyaW5nIGZpbGVuYW1lID0gY2FjaGVkSW1hZ2UtPnJlc3Bv
bnNlKCkuc3VnZ2VzdGVkRmlsZW5hbWUoKTsKICAgICBpZiAoZmlsZW5hbWUuaXNFbXB0eSgpKQpA
QCAtMjU1LDEzICs0MDAsMTQgQEAgc3RhdGljIHZvaWQgd3JpdGVJbWFnZVRvRGF0YU9iamVjdChD
aHJvbWl1bURhdGFPYmplY3QqIGRhdGFPYmplY3QsIEVsZW1lbnQqIGVsZW0KICAgICAgICAgaWYg
KGV4dGVuc2lvbkluZGV4ICE9IC0xKQogICAgICAgICAgICAgZmlsZW5hbWUudHJ1bmNhdGUoZXh0
ZW5zaW9uSW5kZXgpOwogICAgIH0KLSAgICBmaWxlbmFtZSA9IENsaXBib2FyZENocm9taXVtOjp2
YWxpZGF0ZUZpbGVOYW1lKGZpbGVuYW1lLCBkYXRhT2JqZWN0KTsKIAogICAgIFN0cmluZyBleHRl
bnNpb24gPSBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRQcmVmZXJyZWRFeHRlbnNpb25Gb3JNSU1FVHlw
ZSgKICAgICAgICAgY2FjaGVkSW1hZ2UtPnJlc3BvbnNlKCkubWltZVR5cGUoKSk7Ci0gICAgZGF0
YU9iamVjdC0+c2V0RmlsZUV4dGVuc2lvbihleHRlbnNpb24uaXNFbXB0eSgpID8gZW1wdHlTdHJp
bmcoKSA6ICIuIiArIGV4dGVuc2lvbik7CisgICAgZXh0ZW5zaW9uID0gZXh0ZW5zaW9uLmlzRW1w
dHkoKSA/IGVtcHR5U3RyaW5nKCkgOiAiLiIgKyBleHRlbnNpb247CisKKyAgICBDbGlwYm9hcmRD
aHJvbWl1bTo6dmFsaWRhdGVGaWxlbmFtZShmaWxlbmFtZSwgZXh0ZW5zaW9uKTsKIAotICAgIGRh
dGFPYmplY3QtPnNldEZpbGVDb250ZW50RmlsZW5hbWUoZmlsZW5hbWUgKyBkYXRhT2JqZWN0LT5m
aWxlRXh0ZW5zaW9uKCkpOworICAgIGRhdGFPYmplY3QtPmFkZFNoYXJlZEJ1ZmZlcihmaWxlbmFt
ZSArIGV4dGVuc2lvbiwgZXh0ZW5zaW9uLCBpbWFnZUJ1ZmZlcik7CiB9CiAKIHZvaWQgQ2xpcGJv
YXJkQ2hyb21pdW06OmRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZShFbGVtZW50KiBlbGVtZW50LCBj
b25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdGl0bGUsIEZyYW1lKiBmcmFtZSkKQEAgLTI2
OSwxNSArNDE1LDEzIEBAIHZvaWQgQ2xpcGJvYXJkQ2hyb21pdW06OmRlY2xhcmVBbmRXcml0ZURy
YWdJbWFnZShFbGVtZW50KiBlbGVtZW50LCBjb25zdCBLVVJMJiB1CiAgICAgaWYgKCFtX2RhdGFP
YmplY3QpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZHJhZ1N0b3JhZ2VVcGRhdGVkID0gdHJ1
ZTsKLSAgICBtX2RhdGFPYmplY3QtPnNldERhdGEobWltZVR5cGVVUkwsIHVybCk7Ci0gICAgbV9k
YXRhT2JqZWN0LT5zZXRVcmxUaXRsZSh0aXRsZSk7CisgICAgbV9kYXRhT2JqZWN0LT5zZXRVUkwo
dXJsLCB0aXRsZSk7CiAKICAgICAvLyBXcml0ZSB0aGUgYnl0ZXMgaW4gdGhlIGltYWdlIHRvIHRo
ZSBmaWxlIGZvcm1hdC4KICAgICB3cml0ZUltYWdlVG9EYXRhT2JqZWN0KG1fZGF0YU9iamVjdC5n
ZXQoKSwgZWxlbWVudCwgdXJsKTsKIAogICAgIC8vIFB1dCBpbWcgdGFnIG9uIHRoZSBjbGlwYm9h
cmQgcmVmZXJlbmNpbmcgdGhlIGltYWdlCi0gICAgbV9kYXRhT2JqZWN0LT5zZXREYXRhKG1pbWVU
eXBlVGV4dEhUTUwsIGNyZWF0ZU1hcmt1cChlbGVtZW50LCBJbmNsdWRlTm9kZSwgMCwgUmVzb2x2
ZUFsbFVSTHMpKTsKKyAgICBtX2RhdGFPYmplY3QtPnNldEhUTUwoY3JlYXRlTWFya3VwKGVsZW1l
bnQsIEluY2x1ZGVOb2RlLCAwLCBSZXNvbHZlQWxsVVJMcyksIEtVUkwoKSk7CiB9CiAKIHZvaWQg
Q2xpcGJvYXJkQ2hyb21pdW06OndyaXRlVVJMKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5n
JiB0aXRsZSwgRnJhbWUqKQpAQCAtMjg2LDE2ICs0MzAsMTMgQEAgdm9pZCBDbGlwYm9hcmRDaHJv
bWl1bTo6d3JpdGVVUkwoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBGcmFt
ZSopCiAgICAgICAgIHJldHVybjsKICAgICBBU1NFUlQoIXVybC5pc0VtcHR5KCkpOwogCi0gICAg
bV9kcmFnU3RvcmFnZVVwZGF0ZWQgPSB0cnVlOwotICAgIG1fZGF0YU9iamVjdC0+c2V0RGF0YSht
aW1lVHlwZVVSTCwgdXJsKTsKLSAgICBtX2RhdGFPYmplY3QtPnNldFVybFRpdGxlKHRpdGxlKTsK
KyAgICBtX2RhdGFPYmplY3QtPnNldFVSTCh1cmwsIHRpdGxlKTsKIAogICAgIC8vIFRoZSBVUkwg
Y2FuIGFsc28gYmUgdXNlZCBhcyBwbGFpbiB0ZXh0LgogICAgIG1fZGF0YU9iamVjdC0+c2V0RGF0
YShtaW1lVHlwZVRleHRQbGFpbiwgdXJsLnN0cmluZygpKTsKIAogICAgIC8vIFRoZSBVUkwgY2Fu
IGFsc28gYmUgdXNlZCBhcyBhbiBIVE1MIGZyYWdtZW50LgotICAgIG1fZGF0YU9iamVjdC0+c2V0
RGF0YShtaW1lVHlwZVRleHRIVE1MLCB1cmxUb01hcmt1cCh1cmwsIHRpdGxlKSk7Ci0gICAgbV9k
YXRhT2JqZWN0LT5zZXRIdG1sQmFzZVVybCh1cmwpOworICAgIG1fZGF0YU9iamVjdC0+c2V0SFRN
TCh1cmxUb01hcmt1cCh1cmwsIHRpdGxlKSwgdXJsKTsKIH0KIAogdm9pZCBDbGlwYm9hcmRDaHJv
bWl1bTo6d3JpdGVSYW5nZShSYW5nZSogc2VsZWN0ZWRSYW5nZSwgRnJhbWUqIGZyYW1lKQpAQCAt
MzA0LDkgKzQ0NSw5IEBAIHZvaWQgQ2xpcGJvYXJkQ2hyb21pdW06OndyaXRlUmFuZ2UoUmFuZ2Uq
IHNlbGVjdGVkUmFuZ2UsIEZyYW1lKiBmcmFtZSkKICAgICBpZiAoIW1fZGF0YU9iamVjdCkKICAg
ICAgICAgIHJldHVybjsKIAotICAgIG1fZHJhZ1N0b3JhZ2VVcGRhdGVkID0gdHJ1ZTsKLSAgICBt
X2RhdGFPYmplY3QtPnNldERhdGEobWltZVR5cGVUZXh0SFRNTCwgY3JlYXRlTWFya3VwKHNlbGVj
dGVkUmFuZ2UsIDAsIEFubm90YXRlRm9ySW50ZXJjaGFuZ2UsIGZhbHNlLCBSZXNvbHZlTm9uTG9j
YWxVUkxzKSk7Ci0gICAgbV9kYXRhT2JqZWN0LT5zZXRIdG1sQmFzZVVybChmcmFtZS0+ZG9jdW1l
bnQoKS0+dXJsKCkpOworICAgIG1fZGF0YU9iamVjdC0+c2V0SFRNTCgKKyAgICAgICAgY3JlYXRl
TWFya3VwKHNlbGVjdGVkUmFuZ2UsIDAsIEFubm90YXRlRm9ySW50ZXJjaGFuZ2UsIGZhbHNlLCBS
ZXNvbHZlTm9uTG9jYWxVUkxzKSwKKyAgICAgICAgZnJhbWUtPmRvY3VtZW50KCktPnVybCgpKTsK
IAogICAgIFN0cmluZyBzdHIgPSBmcmFtZS0+ZWRpdG9yKCktPnNlbGVjdGVkVGV4dCgpOwogI2lm
IE9TKFdJTkRPV1MpCkBAIC0zMjcsNzIgKzQ2OCwyMSBAQCB2b2lkIENsaXBib2FyZENocm9taXVt
Ojp3cml0ZVBsYWluVGV4dChjb25zdCBTdHJpbmcmIHRleHQpCiAjZW5kaWYKICAgICByZXBsYWNl
TkJTUFdpdGhTcGFjZShzdHIpOwogCi0gICAgbV9kcmFnU3RvcmFnZVVwZGF0ZWQgPSB0cnVlOwog
ICAgIG1fZGF0YU9iamVjdC0+c2V0RGF0YShtaW1lVHlwZVRleHRQbGFpbiwgc3RyKTsKIH0KIAog
Ym9vbCBDbGlwYm9hcmRDaHJvbWl1bTo6aGFzRGF0YSgpCiB7CiAgICAgQVNTRVJUKGlzRm9yRHJh
Z0FuZERyb3AoKSk7Ci0gICAgaWYgKCFtX2RhdGFPYmplY3QpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIHJldHVybiBtX2RhdGFPYmplY3QtPmhhc0RhdGEoKTsKKyAgICAvLyBGSVhNRTog
UGVyaGFwcyB0aGlzIGlzIHRoZSByZWFzb24gd2UgY2FuJ3QgZHJhZyBhbmQgZHJvcCB3aXRoIG5v
IGRhdGEgc2V0PworICAgIHJldHVybiBtX2RhdGFPYmplY3QtPml0ZW1zKCktPmxlbmd0aCgpID4g
MDsKIH0KIAogI2lmIEVOQUJMRShEQVRBX1RSQU5TRkVSX0lURU1TKQogUGFzc1JlZlB0cjxEYXRh
VHJhbnNmZXJJdGVtTGlzdD4gQ2xpcGJvYXJkQ2hyb21pdW06Oml0ZW1zKCkKIHsKLSAgICBpZiAo
IW1fZGF0YU9iamVjdCB8fCAocG9saWN5KCkgIT0gQ2xpcGJvYXJkUmVhZGFibGUgJiYgcG9saWN5
KCkgIT0gQ2xpcGJvYXJkV3JpdGFibGUpKSB7Ci0gICAgICAgIC8vIFJldHVybiBhbiB1bmFzc29j
aWF0ZWQgZW1wdHkgbGlzdC4KLSAgICAgICAgcmV0dXJuIERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hy
b21pdW06OmNyZWF0ZSh0aGlzLCBtX2ZyYW1lLT5kb2N1bWVudCgpLT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCkpOwotICAgIH0KLQotICAgIGlmICghbV9pdGVtTGlzdCkKLSAgICAgICAgbV9pdGVt
TGlzdCA9IERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW06OmNyZWF0ZSh0aGlzLCBtX2ZyYW1l
LT5kb2N1bWVudCgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwotCi0gICAgcmV0dXJuIG1f
aXRlbUxpc3Q7Ci19Ci0KLS8vIEZJWE1FOiBpbnRlZ3JhdGUgQ2hyb21pdW1EYXRhT2JqZWN0IGFu
ZCBEYXRhVHJhbnNmZXJJdGVtTGlzdCByYXRoZXIgdGhhbiBob2xkaW5nIHRoZW0gc2VwYXJhdGVs
eSBhbmQga2VlcGluZyB0aGVtIHN5bmNlZC4KLXZvaWQgQ2xpcGJvYXJkQ2hyb21pdW06Om1heVVw
ZGF0ZUl0ZW1zKFZlY3RvcjxSZWZQdHI8RGF0YVRyYW5zZmVySXRlbT4gPiYgaXRlbXMpCi17Ci0g
ICAgaWYgKCFpdGVtcy5pc0VtcHR5KCkgJiYgIXN0b3JhZ2VIYXNVcGRhdGVkKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGl0ZW1zLmNsZWFyKCk7Ci0KLSAgICBTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpOwotCi0gICAgaWYgKGlzRm9yQ29weUFuZFBhc3RlKCkgJiYgcG9s
aWN5KCkgPT0gQ2xpcGJvYXJkUmVhZGFibGUpIHsKLSAgICAgICAgLy8gSXRlcmF0ZSB0aHJvdWdo
IHRoZSB0eXBlcyBhbmQgYWRkIHRoZW0uCi0gICAgICAgIEhhc2hTZXQ8U3RyaW5nPiB0eXBlcyA9
IG1fZGF0YU9iamVjdC0+dHlwZXMoKTsKLSAgICAgICAgZm9yIChIYXNoU2V0PFN0cmluZz46OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gdHlwZXMuYmVnaW4oKTsgaXQgIT0gdHlwZXMuZW5kKCk7ICsraXQp
Ci0gICAgICAgICAgICBpdGVtcy5hcHBlbmQoRGF0YVRyYW5zZmVySXRlbUNocm9taXVtOjpjcmVh
dGVGcm9tUGFzdGVib2FyZCh0aGlzLCBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCAqaXQpKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwotICAgIFN0
cmluZyBwbGFpblRleHQgPSBtX2RhdGFPYmplY3QtPmdldERhdGEobWltZVR5cGVUZXh0UGxhaW4s
IHN1Y2Nlc3MpOwotICAgIGlmIChzdWNjZXNzKQotICAgICAgICBpdGVtcy5hcHBlbmQoRGF0YVRy
YW5zZmVySXRlbUNocm9taXVtOjpjcmVhdGUodGhpcywgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwg
cGxhaW5UZXh0LCBtaW1lVHlwZVRleHRQbGFpbikpOwotCi0gICAgc3VjY2VzcyA9IGZhbHNlOwot
ICAgIFN0cmluZyBodG1sVGV4dCA9IG1fZGF0YU9iamVjdC0+Z2V0RGF0YShtaW1lVHlwZVRleHRI
VE1MLCBzdWNjZXNzKTsKLSAgICBpZiAoc3VjY2VzcykKLSAgICAgICAgaXRlbXMuYXBwZW5kKERh
dGFUcmFuc2Zlckl0ZW1DaHJvbWl1bTo6Y3JlYXRlKHRoaXMsIHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQsIGh0bWxUZXh0LCBtaW1lVHlwZVRleHRIVE1MKSk7Ci0KLSAgICBpZiAobV9kYXRhT2JqZWN0
LT5jb250YWluc0ZpbGVuYW1lcygpKSB7Ci0gICAgICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBm
aWxlbmFtZXMgPSBtX2RhdGFPYmplY3QtPmZpbGVuYW1lcygpOwotICAgICAgICBmb3IgKFZlY3Rv
cjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGZpbGVuYW1lcy5iZWdpbigpOyBpdCAhPSBm
aWxlbmFtZXMuZW5kKCk7ICsraXQpCi0gICAgICAgICAgICBpdGVtcy5hcHBlbmQoRGF0YVRyYW5z
ZmVySXRlbUNocm9taXVtOjpjcmVhdGUodGhpcywgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgRmls
ZTo6Y3JlYXRlKCppdCkpKTsKLSAgICB9Ci0gICAgbV9kcmFnU3RvcmFnZVVwZGF0ZWQgPSBmYWxz
ZTsKLX0KLQotYm9vbCBDbGlwYm9hcmRDaHJvbWl1bTo6c3RvcmFnZUhhc1VwZGF0ZWQoKSBjb25z
dAotewotICAgIHJldHVybiAoaXNGb3JDb3B5QW5kUGFzdGUoKSAmJiBwbGF0Zm9ybUNsaXBib2Fy
ZENoYW5nZWQoKSkgfHwgKGlzRm9yRHJhZ0FuZERyb3AoKSAmJiBtX2RyYWdTdG9yYWdlVXBkYXRl
ZCk7CisgICAgcmV0dXJuIERhdGFUcmFuc2Zlckl0ZW1MaXN0V3JhcHBlcjo6Y3JlYXRlKHRoaXMs
IG1fZGF0YU9iamVjdC0+aXRlbXMoKSk7CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmgKaW5kZXggMzBlODcz
OWEyMzg3NzMzZGIxN2Y5NDU4NmNmNzcwMjMzNzJlMzQ1ZC4uODkwMTgyMGQzYWNlOTMxMGE0Y2Vh
MGNhYTFiZjBmODdiMjM5ZjQ3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5oCkBAIC01MSwxNyArNTEsMTUgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDbGlwYm9hcmRDaHJvbWl1
bT4gY3JlYXRlKAogICAgICAgICAgICAgQ2xpcGJvYXJkVHlwZSwgUGFzc1JlZlB0cjxDaHJvbWl1
bURhdGFPYmplY3Q+LCBDbGlwYm9hcmRBY2Nlc3NQb2xpY3ksIEZyYW1lKik7CiAKLSAgICAgICAg
Ly8gUmV0dXJucyB0aGUgZmlsZSBuYW1lIChub3QgaW5jbHVkaW5nIHRoZSBleHRlbnNpb24pLiBU
aGlzIHJlbW92ZXMgYW55Ci0gICAgICAgIC8vIGludmFsaWQgZmlsZSBzeXN0ZW0gY2hhcmFjdGVy
cyBhcyB3ZWxsIGFzIG1ha2luZyBzdXJlIHRoZQotICAgICAgICAvLyBwYXRoICsgZXh0ZW5zaW9u
IGlzIG5vdCBiaWdnZXIgdGhhbiBhbGxvd2VkIGJ5IHRoZSBmaWxlIHN5c3RlbS4KLSAgICAgICAg
Ly8gVGhpcyBtYXkgY2hhbmdlIHRoZSBmaWxlIGV4dGVuc2lvbiBpbiBkYXRhT2JqZWN0LgotICAg
ICAgICBzdGF0aWMgU3RyaW5nIHZhbGlkYXRlRmlsZU5hbWUoY29uc3QgU3RyaW5nJiB0aXRsZSwg
Q2hyb21pdW1EYXRhT2JqZWN0KiBkYXRhT2JqZWN0KTsKKyAgICAgICAgLy8gVmFsaWRhdGVzIGEg
ZmlsZW5hbWUgKHdpdGhvdXQgdGhlIGV4dGVuc2lvbikgYW5kIHRoZSBleHRlbnNpb24uIFRoaXMg
cmVtb3ZlcyBhbnkgaW52YWxpZAorICAgICAgICAvLyBmaWxlIHN5c3RlbSBjaGFyYWN0ZXJzIGFz
IHdlbGwgYXMgbWFraW5nIHN1cmUgdGhlIHBhdGggKyBleHRlbnNpb24gaXMgbm90IGJpZ2dlciB0
aGFuCisgICAgICAgIC8vIGFsbG93ZWQgYnkgdGhlIGZpbGUgc3lzdGVtLgorICAgICAgICBzdGF0
aWMgdm9pZCB2YWxpZGF0ZUZpbGVuYW1lKFN0cmluZyYgbmFtZSwgU3RyaW5nJiBleHRlbnNpb24p
OwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBjbGVhckRhdGEoY29uc3QgU3RyaW5nJiB0eXBlKTsK
ICAgICAgICAgdm9pZCBjbGVhckFsbERhdGEoKTsKICAgICAgICAgU3RyaW5nIGdldERhdGEoY29u
c3QgU3RyaW5nJiB0eXBlLCBib29sJiBzdWNjZXNzKSBjb25zdDsKICAgICAgICAgYm9vbCBzZXRE
YXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKTsKLSAgICAgICAgYm9v
bCBwbGF0Zm9ybUNsaXBib2FyZENoYW5nZWQoKSBjb25zdDsKIAogICAgICAgICAvLyBleHRlbnNp
b25zIGJleW9uZCBJRSdzIEFQSQogICAgICAgICB2aXJ0dWFsIEhhc2hTZXQ8U3RyaW5nPiB0eXBl
cygpIGNvbnN0OwpAQCAtODUsMjYgKzgzLDE1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogI2lm
IEVOQUJMRShEQVRBX1RSQU5TRkVSX0lURU1TKQogICAgICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
RGF0YVRyYW5zZmVySXRlbUxpc3Q+IGl0ZW1zKCk7Ci0KLSAgICAgICAgLy8gSW50ZXJuYWwgcm91
dGluZXMgdG8ga2VlcCB0aGUgbGlzdCByZXR1cm5lZCBieSBpdGVtcygpIChpLmUuIG1faXRlbUxp
c3QpIHN5bmNocm9uaXplZCB3aXRoIHRoZSBjb250ZW50IG9mIHRoZSBjbGlwYm9hcmQgZGF0YS4K
LSAgICAgICAgdm9pZCBtYXlVcGRhdGVJdGVtcyhWZWN0b3I8UmVmUHRyPERhdGFUcmFuc2Zlckl0
ZW0+ID4mIGl0ZW1zKTsKLSAgICAgICAgYm9vbCBzdG9yYWdlSGFzVXBkYXRlZCgpIGNvbnN0Owog
I2VuZGlmCisgICAgICAgIEZyYW1lKiBmcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWU7IH0K
IAogICAgIHByaXZhdGU6CiAgICAgICAgIENsaXBib2FyZENocm9taXVtKENsaXBib2FyZFR5cGUs
IFBhc3NSZWZQdHI8Q2hyb21pdW1EYXRhT2JqZWN0PiwgQ2xpcGJvYXJkQWNjZXNzUG9saWN5LCBG
cmFtZSopOwogCi0gICAgICAgIHZvaWQgcmVzZXRGcm9tQ2xpcGJvYXJkKCk7CiAgICAgICAgIHZv
aWQgc2V0RHJhZ0ltYWdlKENhY2hlZEltYWdlKiwgTm9kZSosIGNvbnN0IEludFBvaW50Jik7CiAg
ICAgICAgIFJlZlB0cjxDaHJvbWl1bURhdGFPYmplY3Q+IG1fZGF0YU9iamVjdDsKICAgICAgICAg
RnJhbWUqIG1fZnJhbWU7Ci0KLSNpZiBFTkFCTEUoREFUQV9UUkFOU0ZFUl9JVEVNUykKLSAgICAg
ICAgUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0+IG1faXRlbUxpc3Q7Ci0jZW5k
aWYKLQotICAgICAgICB1aW50NjRfdCBtX29yaWdpbmFsU2VxdWVuY2VOdW1iZXI7Ci0gICAgICAg
IGJvb2wgbV9kcmFnU3RvcmFnZVVwZGF0ZWQ7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJv
YXJkQ2hyb21pdW1MaW51eC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9D
bGlwYm9hcmRDaHJvbWl1bUxpbnV4LmNwcAppbmRleCAyYzg5ZjZlOGVlOTk5MjAyOTEyYjNkOGRi
OWJmNWJiNzcyNTc3YTk3Li45NTliMzY2NTJmZTM5NTYwMTdmN2Q2NDUwMTBjNTIzODUzYzNiMzhk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRD
aHJvbWl1bUxpbnV4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9D
bGlwYm9hcmRDaHJvbWl1bUxpbnV4LmNwcApAQCAtMjcsMTUgKzI3LDEzIEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiQ2xpcGJvYXJkQ2hyb21pdW0uaCIKIAotI2luY2x1ZGUgIkNo
cm9taXVtRGF0YU9iamVjdC5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotU3RyaW5nIENsaXBib2FyZENocm9taXVtOjp2YWxpZGF0ZUZpbGVO
YW1lKGNvbnN0IFN0cmluZyYgdGl0bGUsIENocm9taXVtRGF0YU9iamVjdCogZGF0YU9iamVjdCkK
K3ZvaWQgQ2xpcGJvYXJkQ2hyb21pdW06OnZhbGlkYXRlRmlsZW5hbWUoU3RyaW5nJiBuYW1lLCBT
dHJpbmcmIGV4dGVuc2lvbikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiB0
aXRsZTsKIH0KIAogfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtTWFjLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtTWFjLmNwcAppbmRl
eCAzODAyMTQwMmViOTI5ZTNjYzZlMjUxZDIyM2YwMDc0NjZhZGYyZjI3Li5iY2VhY2ViZGE4NzA2
ZjM5ZjQwOGRmZGM1NzY0NGNhYjI3MzY1MDE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bU1hYy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW1NYWMuY3BwCkBAIC0yNywx
MSArMjcsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNsaXBib2FyZENocm9t
aXVtLmgiCiAKLSNpbmNsdWRlICJDaHJvbWl1bURhdGFPYmplY3QuaCIKLQogbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgIAotCiAvLyBGaWxlbmFtZSBsZW5ndGggYW5kIGNoYXJhY3Rlci1zZXQgbGlt
aXRzIHZhcnkgYnkgZmlsZXN5c3RlbSwgYW5kIHRoZXJlJ3Mgbm8KIC8vIHJlYWwgd2F5IHRvIHRl
bGwgd2hhdCBmaWxlc3lzdGVtIGlzIGluIHVzZS4gU2luY2UgSEZTKyBpcyBieSBmYXIgdGhlIG1v
c3QKIC8vIGNvbW1vbiwgd2UnbGwgYWJpZGUgYnkgaXRzIGxpbWl0cywgd2hpY2ggYXJlIDI1NSBV
bmljb2RlIGNoYXJhY3RlcnMgKHNsaWdodGx5CkBAIC0zOSw3ICszNiw2IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIC8vIHJlYWxseSB3b3J0aCBkZWFsaW5nIHdpdGggaGVyZS4pCiBzdGF0aWMgY29u
c3QgdW5zaWduZWQgTWF4SEZTRmlsZW5hbWVMZW5ndGggPSAyNTU7CiAKLQogc3RhdGljIGJvb2wg
aXNJbnZhbGlkRmlsZUNoYXJhY3RlcihVQ2hhciBjKQogewogICAgIC8vIEhGUysgYmFzaWNhbGx5
IGFsbG93cyBhbnl0aGluZyBidXQgJy8nLiBGb3Igc2FuaXR5J3Mgc2FrZSB3ZSdsbCBkaXNhbGxv
dwpAQCAtNDcsMjMgKzQzLDE4IEBAIHN0YXRpYyBib29sIGlzSW52YWxpZEZpbGVDaGFyYWN0ZXIo
VUNoYXIgYykKICAgICByZXR1cm4gYyA8ICcgJyB8fCBjID09IDB4N0YgfHwgYyA9PSAnLyc7CiB9
CiAKLVN0cmluZyBDbGlwYm9hcmRDaHJvbWl1bTo6dmFsaWRhdGVGaWxlTmFtZShjb25zdCBTdHJp
bmcmIHRpdGxlLCBDaHJvbWl1bURhdGFPYmplY3QqIGRhdGFPYmplY3QpCit2b2lkIENsaXBib2Fy
ZENocm9taXVtOjp2YWxpZGF0ZUZpbGVuYW1lKFN0cmluZyYgbmFtZSwgU3RyaW5nJiBleHRlbnNp
b24pCiB7CiAgICAgLy8gUmVtb3ZlIGFueSBpbnZhbGlkIGZpbGUgc3lzdGVtIGNoYXJhY3RlcnMs
IGVzcGVjaWFsbHkgIi8iLgotICAgIFN0cmluZyByZXN1bHQgPSB0aXRsZS5yZW1vdmVDaGFyYWN0
ZXJzKGlzSW52YWxpZEZpbGVDaGFyYWN0ZXIpOwotICAgIFN0cmluZyBleHRlbnNpb24gPSBkYXRh
T2JqZWN0LT5maWxlRXh0ZW5zaW9uKCkucmVtb3ZlQ2hhcmFjdGVycygmaXNJbnZhbGlkRmlsZUNo
YXJhY3Rlcik7CisgICAgbmFtZSA9IG5hbWUucmVtb3ZlQ2hhcmFjdGVycygmaXNJbnZhbGlkRmls
ZUNoYXJhY3Rlcik7CisgICAgZXh0ZW5zaW9uID0gZXh0ZW5zaW9uLnJlbW92ZUNoYXJhY3RlcnMo
JmlzSW52YWxpZEZpbGVDaGFyYWN0ZXIpOwogCiAgICAgLy8gUmVtb3ZlIGEgcmlkaWN1bG91c2x5
LWxvbmcgZXh0ZW5zaW9uLgogICAgIGlmIChleHRlbnNpb24ubGVuZ3RoKCkgPj0gTWF4SEZTRmls
ZW5hbWVMZW5ndGgpCi0gICAgICAgIGV4dGVuc2lvbiA9ICIiOworICAgICAgICBleHRlbnNpb24g
PSBTdHJpbmcoKTsKICAgICAKICAgICAvLyBUcnVuY2F0ZSBhbiBvdmVybHktbG9uZyBmaWxlbmFt
ZS4KLSAgICBpbnQgb3ZlcmZsb3cgPSByZXN1bHQubGVuZ3RoKCkgKyBleHRlbnNpb24ubGVuZ3Ro
KCkgLSBNYXhIRlNGaWxlbmFtZUxlbmd0aDsKLSAgICBpZiAob3ZlcmZsb3cgPiAwKSAKLSAgICAg
ICAgcmVzdWx0LnJlbW92ZShyZXN1bHQubGVuZ3RoKCkgLSBvdmVyZmxvdywgb3ZlcmZsb3cpOwot
ICAgIAotICAgIGRhdGFPYmplY3QtPnNldEZpbGVFeHRlbnNpb24oZXh0ZW5zaW9uKTsKLSAgICBy
ZXR1cm4gcmVzdWx0OworICAgIG5hbWUudHJ1bmNhdGUoTWF4SEZTRmlsZW5hbWVMZW5ndGggLSBl
eHRlbnNpb24ubGVuZ3RoKCkpOwogfQogCiB9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW1X
aW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21p
dW1XaW4uY3BwCmluZGV4IGQ5YmJlYjVkZDNkMzdhMjU0ODkxNGFhYmNlZjAzZWQ5YWZjMGJjZDcu
LmI4YWY2NWQ2OTkzMzVjZTkxYzJhNWE2NmY4NTdhNWZjOWE0ZmY5N2MgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtV2luLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bVdp
bi5jcHAKQEAgLTI3LDggKzI3LDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJD
bGlwYm9hcmRDaHJvbWl1bS5oIgogCi0jaW5jbHVkZSAiQ2hyb21pdW1EYXRhT2JqZWN0LmgiCi0K
ICNpbmNsdWRlIDxzaGx3YXBpLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQwLDE3ICsz
OCwxNiBAQCBzdGF0aWMgYm9vbCBpc0ludmFsaWRGaWxlQ2hhcmFjdGVyKFVDaGFyIGMpCiAgICAg
cmV0dXJuIChQYXRoR2V0Q2hhclR5cGUoYykgJiAoR0NUX0xGTkNIQVIgfCBHQ1RfU0hPUlRDSEFS
KSkgPT0gMDsKIH0KIAotU3RyaW5nIENsaXBib2FyZENocm9taXVtOjp2YWxpZGF0ZUZpbGVOYW1l
KGNvbnN0IFN0cmluZyYgdGl0bGUsIENocm9taXVtRGF0YU9iamVjdCogZGF0YU9iamVjdCkKK3Zv
aWQgQ2xpcGJvYXJkQ2hyb21pdW06OnZhbGlkYXRlRmlsZW5hbWUoU3RyaW5nJiBuYW1lLCBTdHJp
bmcmIGV4dGVuc2lvbikKIHsKICAgICAvLyBSZW1vdmUgYW55IGludmFsaWQgZmlsZSBzeXN0ZW0g
Y2hhcmFjdGVycy4KLSAgICBTdHJpbmcgcmVzdWx0ID0gdGl0bGUucmVtb3ZlQ2hhcmFjdGVycygm
aXNJbnZhbGlkRmlsZUNoYXJhY3Rlcik7Ci0gICAgaWYgKHJlc3VsdC5sZW5ndGgoKSArIGRhdGFP
YmplY3QtPmZpbGVFeHRlbnNpb24oKS5sZW5ndGgoKSArIDEgPj0gTUFYX1BBVEgpIHsKLSAgICAg
ICAgaWYgKGRhdGFPYmplY3QtPmZpbGVFeHRlbnNpb24oKS5sZW5ndGgoKSArIDEgPj0gTUFYX1BB
VEgpCi0gICAgICAgICAgICBkYXRhT2JqZWN0LT5zZXRGaWxlRXh0ZW5zaW9uKCIiKTsKLSAgICAg
ICAgaWYgKHJlc3VsdC5sZW5ndGgoKSArIGRhdGFPYmplY3QtPmZpbGVFeHRlbnNpb24oKS5sZW5n
dGgoKSArIDEgPj0gTUFYX1BBVEgpCi0gICAgICAgICAgICByZXN1bHQgPSByZXN1bHQuc3Vic3Ry
aW5nKDAsIE1BWF9QQVRIIC0gZGF0YU9iamVjdC0+ZmlsZUV4dGVuc2lvbigpLmxlbmd0aCgpIC0g
MSk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7CisgICAgbmFtZSA9IG5hbWUucmVtb3ZlQ2hh
cmFjdGVycygmaXNJbnZhbGlkRmlsZUNoYXJhY3Rlcik7CisgICAgZXh0ZW5zaW9uID0gZXh0ZW5z
aW9uLnJlbW92ZUNoYXJhY3RlcnMoJmlzSW52YWxpZEZpbGVDaGFyYWN0ZXIpOworCisgICAgaWYg
KGV4dGVuc2lvbi5sZW5ndGgoKSArIDEgPj0gTUFYX1BBVEgpCisgICAgICAgIGV4dGVuc2lvbiA9
IFN0cmluZygpOworCisgICAgbmFtZS50cnVuY2F0ZShNQVhfUEFUSCAtIGV4dGVuc2lvbi5sZW5n
dGgoKSAtIDEpOwogfQogCiB9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkVXRpbGl0aWVzQ2hyb21pdW0u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkVXRpbGl0aWVz
Q2hyb21pdW0uY3BwCmluZGV4IDQ3NTcyYzViODhjMzA0YTNmNGI3YjEzMmQyNDMzNzVlMDZlMGNi
Y2QuLjYwNDA5ODgxNzk0ZTQxZmJmZTkxMWQ4YTI0MGI2YzUwZGZiOGZkOWQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZFV0aWxpdGllc0Nocm9t
aXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRV
dGlsaXRpZXNDaHJvbWl1bS5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJLVVJMLmgi
CiAjaW5jbHVkZSAiUGFzdGVib2FyZC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisj
aW5jbHVkZSAiUGxhdGZvcm1TdXBwb3J0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
NDQsNiArNDUsMTEgQEAgUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlciBjdXJyZW50
UGFzdGVib2FyZEJ1ZmZlcigpCiAgICAgICAgIFBhc3RlYm9hcmRQcml2YXRlOjpTdGFuZGFyZEJ1
ZmZlcjsKIH0KIAorYm9vbCBwYXN0ZWJvYXJkSGFzQ2hhbmdlZChQYXN0ZWJvYXJkUHJpdmF0ZTo6
Q2xpcGJvYXJkQnVmZmVyIGJ1ZmZlciwgdWludDY0X3Qgb3JpZ2luYWxTZXF1ZW5jZU51bWJlcikK
K3sKKyAgICByZXR1cm4gb3JpZ2luYWxTZXF1ZW5jZU51bWJlciAhPSBQbGF0Zm9ybVN1cHBvcnQ6
OmNsaXBib2FyZFNlcXVlbmNlTnVtYmVyKGJ1ZmZlcik7Cit9CisKICNpZiBPUyhXSU5ET1dTKQog
dm9pZCByZXBsYWNlTmV3bGluZXNXaXRoV2luZG93c1N0eWxlTmV3bGluZXMoU3RyaW5nJiBzdHIp
CiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9h
cmRVdGlsaXRpZXNDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0v
Q2xpcGJvYXJkVXRpbGl0aWVzQ2hyb21pdW0uaAppbmRleCA3YWU1MDA0M2ExNmI5NmIzMjE5MjY5
N2Q0MDhiMjM4YjU4YzBhNWU5Li43ZmM1NmZkNWY3NmViNzUyMzQ5M2E4OGNjMDU0NWNjNDhiMDQ1
NDE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9h
cmRVdGlsaXRpZXNDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9t
aXVtL0NsaXBib2FyZFV0aWxpdGllc0Nocm9taXVtLmgKQEAgLTQwLDYgKzQwLDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogY2xhc3MgS1VSTDsKIAogUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2Fy
ZEJ1ZmZlciBjdXJyZW50UGFzdGVib2FyZEJ1ZmZlcigpOworYm9vbCBwYXN0ZWJvYXJkSGFzQ2hh
bmdlZChQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyLCB1aW50NjRfdCk7CiAjaWYg
T1MoV0lORE9XUykKIHZvaWQgcmVwbGFjZU5ld2xpbmVzV2l0aFdpbmRvd3NTdHlsZU5ld2xpbmVz
KFN0cmluZyYpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
aHJvbWl1bS9EYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vRGF0YVRyYW5zZmVySXRlbUNocm9taXVtLmNwcAppbmRleCA3YTExMzI0
ODlkNmNmNTNjZjIyZjkyYzk0OGZkMDkyYzI0MjQyMTA5Li43YzU1YTAxNzAyZjgyMWMxMzIwNTBh
Y2YzN2VjNzNjOTgzNWNjMDY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
aHJvbWl1bS9EYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2Nocm9taXVtL0RhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bS5jcHAKQEAgLTM0LDEy
NSArMzQsMzIzIEBACiAjaWYgRU5BQkxFKERBVEFfVFJBTlNGRVJfSVRFTVMpCiAKICNpbmNsdWRl
ICJCbG9iLmgiCi0jaW5jbHVkZSAiQ2xpcGJvYXJkLmgiCi0jaW5jbHVkZSAiQ2xpcGJvYXJkQ2hy
b21pdW0uaCIKICNpbmNsdWRlICJDbGlwYm9hcmRNaW1lVHlwZXMuaCIKICNpbmNsdWRlICJDbGlw
Ym9hcmRVdGlsaXRpZXNDaHJvbWl1bS5oIgotI2luY2x1ZGUgIkRhdGFUcmFuc2Zlckl0ZW1MaXN0
Q2hyb21pdW0uaCIKLSNpbmNsdWRlICJGaWxlLmgiCisjaW5jbHVkZSAiRGF0YVRyYW5zZmVySXRl
bS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3VwcG9ydC5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZl
ci5oIgogI2luY2x1ZGUgIlN0cmluZ0NhbGxiYWNrLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotUGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0+IERhdGFUcmFuc2Zlckl0ZW1D
aHJvbWl1bTo6Y3JlYXRlRnJvbVBhc3RlYm9hcmQoUGFzc1JlZlB0cjxDbGlwYm9hcmQ+IG93bmVy
LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIHR5cGUpCitE
YXRhVHJhbnNmZXJJdGVtQ2hyb21pdW06On5EYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0oKQogewot
ICAgIGlmICh0eXBlID09IG1pbWVUeXBlVGV4dFBsYWluIHx8IHR5cGUgPT0gbWltZVR5cGVUZXh0
SFRNTCkKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEYXRhVHJhbnNmZXJJdGVtQ2hyb21p
dW0ob3duZXIsIGNvbnRleHQsIFBhc3RlYm9hcmRTb3VyY2UsIERhdGFUcmFuc2Zlckl0ZW06Omtp
bmRTdHJpbmcsIHR5cGUsIFN0cmluZygpKSk7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEYXRh
VHJhbnNmZXJJdGVtQ2hyb21pdW0ob3duZXIsIGNvbnRleHQsIFBhc3RlYm9hcmRTb3VyY2UsIERh
dGFUcmFuc2Zlckl0ZW06OmtpbmRGaWxlLCB0eXBlLCAiIikpOwogfQogCi1QYXNzUmVmUHRyPERh
dGFUcmFuc2Zlckl0ZW1DaHJvbWl1bT4gRGF0YVRyYW5zZmVySXRlbUNocm9taXVtOjpjcmVhdGUo
UGFzc1JlZlB0cjxDbGlwYm9hcmQ+IG93bmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBkYXRhLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFN0cmluZyYgdHlwZSkKK3ZvaWQgRGF0YVRyYW5zZmVySXRlbUNocm9t
aXVtOjpnZXRBc1N0cmluZyhQYXNzUmVmUHRyPFN0cmluZ0NhbGxiYWNrPiwgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCopIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEYXRhVHJhbnNm
ZXJJdGVtQ2hyb21pdW0ob3duZXIsIGNvbnRleHQsIERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bTo6
SW50ZXJuYWxTb3VyY2UsIGtpbmRTdHJpbmcsIHR5cGUsIGRhdGEpKTsKIH0KIAotUGFzc1JlZlB0
cjxEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0+IERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bTo6Y3Jl
YXRlKFBhc3NSZWZQdHI8Q2xpcGJvYXJkPiBvd25lciwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8RmlsZT4gZmls
ZSkKK1Bhc3NSZWZQdHI8QmxvYj4gRGF0YVRyYW5zZmVySXRlbUNocm9taXVtOjpnZXRBc0ZpbGUo
KSBjb25zdAogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGF0YVRyYW5zZmVySXRlbUNocm9t
aXVtKG93bmVyLCBjb250ZXh0LCBEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW06OkludGVybmFsU291
cmNlLCBmaWxlKSk7CisgICAgcmV0dXJuIDA7CiB9CiAKLURhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1
bTo6RGF0YVRyYW5zZmVySXRlbUNocm9taXVtKFBhc3NSZWZQdHI8Q2xpcGJvYXJkPiBvd25lciwg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRGF0YVNvdXJjZSBzb3VyY2UsIGNvbnN0
IFN0cmluZyYga2luZCwgY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpCi0g
ICAgOiBtX2NvbnRleHQoY29udGV4dCkKLSAgICAsIG1fb3duZXIob3duZXIpCi0gICAgLCBtX2tp
bmQoa2luZCkKLSAgICAsIG1fdHlwZSh0eXBlKQotICAgICwgbV9zb3VyY2Uoc291cmNlKQorU3Ry
aW5nIERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bTo6bGVnYWN5R2V0QXNTdHJpbmcoKSBjb25zdAor
eworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworU3RyaW5nIERhdGFUcmFuc2ZlclVSSUxpc3RJ
dGVtOjpraW5kKCkgY29uc3QKK3sKKyAgICByZXR1cm4gRGF0YVRyYW5zZmVySXRlbTo6a2luZFN0
cmluZzsKK30KKworU3RyaW5nIERhdGFUcmFuc2ZlclVSSUxpc3RJdGVtOjp0eXBlKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbWltZVR5cGVUZXh0VVJJTGlzdDsKK30KKworU3RyaW5nIERhdGFUcmFu
c2ZlckhUTUxJdGVtOjpraW5kKCkgY29uc3QKK3sKKyAgICByZXR1cm4gRGF0YVRyYW5zZmVySXRl
bTo6a2luZFN0cmluZzsKK30KKworU3RyaW5nIERhdGFUcmFuc2ZlckhUTUxJdGVtOjp0eXBlKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbWltZVR5cGVUZXh0SFRNTDsKK30KKworUGFzc1JlZlB0cjxC
dWZmZXJlZERhdGFUcmFuc2ZlclN0cmluZ0l0ZW0+IEJ1ZmZlcmVkRGF0YVRyYW5zZmVyU3RyaW5n
SXRlbTo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKQorewor
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgQnVmZmVyZWREYXRhVHJhbnNmZXJTdHJpbmdJdGVtKHR5
cGUsIGRhdGEpKTsKK30KKworU3RyaW5nIEJ1ZmZlcmVkRGF0YVRyYW5zZmVyU3RyaW5nSXRlbTo6
a2luZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIERhdGFUcmFuc2Zlckl0ZW06OmtpbmRTdHJpbmc7
Cit9CisKK1N0cmluZyBCdWZmZXJlZERhdGFUcmFuc2ZlclN0cmluZ0l0ZW06OnR5cGUoKSBjb25z
dAoreworICAgIHJldHVybiBtX3R5cGU7Cit9CisKK3ZvaWQgQnVmZmVyZWREYXRhVHJhbnNmZXJT
dHJpbmdJdGVtOjpnZXRBc1N0cmluZyhQYXNzUmVmUHRyPFN0cmluZ0NhbGxiYWNrPiBjYWxsYmFj
aywgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkgY29uc3QKK3sKKyAgICBjYWxsYmFj
ay0+c2NoZWR1bGVDYWxsYmFjayhjb250ZXh0LCBtX2RhdGEpOworfQorCitTdHJpbmcgQnVmZmVy
ZWREYXRhVHJhbnNmZXJTdHJpbmdJdGVtOjpsZWdhY3lHZXRBc1N0cmluZygpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fZGF0YTsKK30KKworQnVmZmVyZWREYXRhVHJhbnNmZXJTdHJpbmdJdGVtOjpC
dWZmZXJlZERhdGFUcmFuc2ZlclN0cmluZ0l0ZW0oY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBT
dHJpbmcmIGRhdGEpCisgICAgOiBtX3R5cGUodHlwZSkKICAgICAsIG1fZGF0YShkYXRhKQogewog
fQogCi1EYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW06OkRhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bShQ
YXNzUmVmUHRyPENsaXBib2FyZD4gb3duZXIsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQsIERhdGFTb3VyY2Ugc291cmNlLCBQYXNzUmVmUHRyPEZpbGU+IGZpbGUpCi0gICAgOiBtX2Nv
bnRleHQoY29udGV4dCkKLSAgICAsIG1fb3duZXIob3duZXIpCi0gICAgLCBtX2tpbmQoa2luZEZp
bGUpCi0gICAgLCBtX3R5cGUoZmlsZS5nZXQoKSA/IGZpbGUtPnR5cGUoKSA6IFN0cmluZygpKQot
ICAgICwgbV9zb3VyY2Uoc291cmNlKQotICAgICwgbV9maWxlKGZpbGUpCitQYXNzUmVmUHRyPEJ1
ZmZlcmVkRGF0YVRyYW5zZmVyVVJJTGlzdEl0ZW0+IEJ1ZmZlcmVkRGF0YVRyYW5zZmVyVVJJTGlz
dEl0ZW06OmNyZWF0ZShjb25zdCBTdHJpbmcmIGRhdGEsIGNvbnN0IFN0cmluZyYgdGl0bGUpCit7
CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBCdWZmZXJlZERhdGFUcmFuc2ZlclVSSUxpc3RJdGVt
KGRhdGEsIHRpdGxlKSk7Cit9CisKK3ZvaWQgQnVmZmVyZWREYXRhVHJhbnNmZXJVUklMaXN0SXRl
bTo6Z2V0QXNTdHJpbmcoUGFzc1JlZlB0cjxTdHJpbmdDYWxsYmFjaz4gY2FsbGJhY2ssIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpIGNvbnN0CiB7CisgICAgY2FsbGJhY2stPnNjaGVk
dWxlQ2FsbGJhY2soY29udGV4dCwgbV9kYXRhKTsKIH0KIAotdm9pZCBEYXRhVHJhbnNmZXJJdGVt
Q2hyb21pdW06OmdldEFzU3RyaW5nKFBhc3NSZWZQdHI8U3RyaW5nQ2FsbGJhY2s+IGNhbGxiYWNr
KSBjb25zdAorU3RyaW5nIEJ1ZmZlcmVkRGF0YVRyYW5zZmVyVVJJTGlzdEl0ZW06OmxlZ2FjeUdl
dEFzU3RyaW5nKCkgY29uc3QKIHsKLSAgICBpZiAoKG1fb3duZXItPnBvbGljeSgpICE9IENsaXBi
b2FyZFJlYWRhYmxlICYmIG1fb3duZXItPnBvbGljeSgpICE9IENsaXBib2FyZFdyaXRhYmxlKQot
ICAgICAgICB8fCBraW5kKCkgIT0ga2luZFN0cmluZykKLSAgICAgICAgcmV0dXJuOworICAgIHJl
dHVybiBtX2RhdGE7Cit9CiAKLSAgICBpZiAoY2xpcGJvYXJkQ2hyb21pdW0oKS0+c3RvcmFnZUhh
c1VwZGF0ZWQoKSkKLSAgICAgICAgcmV0dXJuOworU3RyaW5nIEJ1ZmZlcmVkRGF0YVRyYW5zZmVy
VVJJTGlzdEl0ZW06OnRpdGxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90aXRsZTsKK30KIAot
ICAgIGlmIChtX3NvdXJjZSA9PSBJbnRlcm5hbFNvdXJjZSkgewotICAgICAgICBjYWxsYmFjay0+
c2NoZWR1bGVDYWxsYmFjayhtX2NvbnRleHQsIG1fZGF0YSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Cit2b2lkIEJ1ZmZlcmVkRGF0YVRyYW5zZmVyVVJJTGlzdEl0ZW06OnNldFRpdGxlKGNvbnN0
IFN0cmluZyYgdGl0bGUpCit7CisgICAgbV90aXRsZSA9IHRpdGxlOworfQogCi0gICAgQVNTRVJU
KG1fc291cmNlID09IFBhc3RlYm9hcmRTb3VyY2UpOworQnVmZmVyZWREYXRhVHJhbnNmZXJVUklM
aXN0SXRlbTo6QnVmZmVyZWREYXRhVHJhbnNmZXJVUklMaXN0SXRlbShjb25zdCBTdHJpbmcmIGRh
dGEsIGNvbnN0IFN0cmluZyYgdGl0bGUpCisgICAgOiBtX2RhdGEoZGF0YSkKKyAgICAsIG1fdGl0
bGUodGl0bGUpCit7Cit9CiAKLSAgICAvLyBUaGlzIGlzIHVnbHkgYnV0IHRoZXJlJ3Mgbm8gcmVh
bCBhbHRlcm5hdGl2ZS4KLSAgICBpZiAodHlwZSgpID09IG1pbWVUeXBlVGV4dFBsYWluKSB7Ci0g
ICAgICAgIGNhbGxiYWNrLT5zY2hlZHVsZUNhbGxiYWNrKG1fY29udGV4dCwgUGxhdGZvcm1TdXBw
b3J0OjpjbGlwYm9hcmRSZWFkUGxhaW5UZXh0KGN1cnJlbnRQYXN0ZWJvYXJkQnVmZmVyKCkpKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAodHlwZSgpID09IG1pbWVUeXBlVGV4dEhU
TUwpIHsKLSAgICAgICAgU3RyaW5nIGh0bWw7Ci0gICAgICAgIEtVUkwgaWdub3JlZFNvdXJjZVVS
TDsKLSAgICAgICAgdW5zaWduZWQgaWdub3JlZDsKLSAgICAgICAgUGxhdGZvcm1TdXBwb3J0Ojpj
bGlwYm9hcmRSZWFkSFRNTChjdXJyZW50UGFzdGVib2FyZEJ1ZmZlcigpLCAmaHRtbCwgJmlnbm9y
ZWRTb3VyY2VVUkwsICZpZ25vcmVkLCAmaWdub3JlZCk7Ci0gICAgICAgIGNhbGxiYWNrLT5zY2hl
ZHVsZUNhbGxiYWNrKG1fY29udGV4dCwgaHRtbCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CitQYXNzUmVmUHRyPEJ1ZmZlcmVkRGF0YVRyYW5zZmVy
SFRNTEl0ZW0+IEJ1ZmZlcmVkRGF0YVRyYW5zZmVySFRNTEl0ZW06OmNyZWF0ZShjb25zdCBTdHJp
bmcmIGRhdGEsIGNvbnN0IEtVUkwmIGJhc2VVUkwpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBCdWZmZXJlZERhdGFUcmFuc2ZlckhUTUxJdGVtKGRhdGEsIGJhc2VVUkwpKTsKIH0KIAotUGFz
c1JlZlB0cjxCbG9iPiBEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW06OmdldEFzRmlsZSgpIGNvbnN0
Cit2b2lkIEJ1ZmZlcmVkRGF0YVRyYW5zZmVySFRNTEl0ZW06OmdldEFzU3RyaW5nKFBhc3NSZWZQ
dHI8U3RyaW5nQ2FsbGJhY2s+IGNhbGxiYWNrLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0KSBjb25zdAogewotICAgIGlmIChraW5kKCkgIT0ga2luZEZpbGUgfHwgY2xpcGJvYXJkQ2hy
b21pdW0oKS0+c3RvcmFnZUhhc1VwZGF0ZWQoKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgY2Fs
bGJhY2stPnNjaGVkdWxlQ2FsbGJhY2soY29udGV4dCwgbV9kYXRhKTsKK30KKworU3RyaW5nIEJ1
ZmZlcmVkRGF0YVRyYW5zZmVySFRNTEl0ZW06OmxlZ2FjeUdldEFzU3RyaW5nKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9kYXRhOworfQorCitLVVJMIEJ1ZmZlcmVkRGF0YVRyYW5zZmVySFRNTEl0
ZW06OmJhc2VVUkwoKSBjb25zdAoreworICAgIHJldHVybiBtX2Jhc2VVUkw7Cit9CisKK3ZvaWQg
QnVmZmVyZWREYXRhVHJhbnNmZXJIVE1MSXRlbTo6c2V0QmFzZVVSTChjb25zdCBLVVJMJiBiYXNl
VVJMKQoreworICAgIG1fYmFzZVVSTCA9IGJhc2VVUkw7Cit9CisKK0J1ZmZlcmVkRGF0YVRyYW5z
ZmVySFRNTEl0ZW06OkJ1ZmZlcmVkRGF0YVRyYW5zZmVySFRNTEl0ZW0oY29uc3QgU3RyaW5nJiBk
YXRhLCBjb25zdCBLVVJMJiBiYXNlVVJMKQorICAgIDogbV9kYXRhKGRhdGEpCisgICAgLCBtX2Jh
c2VVUkwoYmFzZVVSTCkKK3sKK30KKworU3RyaW5nIERhdGFUcmFuc2ZlckZpbGVJdGVtOjpraW5k
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gRGF0YVRyYW5zZmVySXRlbTo6a2luZEZpbGU7Cit9CisK
K1N0cmluZyBEYXRhVHJhbnNmZXJGaWxlSXRlbTo6dHlwZSgpIGNvbnN0Cit7CisgICAgLy8gTm90
IGFsbCBmaWxlLWxpa2UgaW1wbGVtZW50YXRpb25zIGN1cnJlbnRseSByZXR1cm4gYW4gb2JqZWN0
IHNvIHdlIGhhdmUgdG8gaGFuZGxlIHRoZSBudWxsIGNhc2UgYXMgd2VsbC4KKyAgICBSZWZQdHI8
QmxvYj4gYmxvYiA9IGdldEFzRmlsZSgpOworICAgIHJldHVybiBibG9iID8gYmxvYi0+dHlwZSgp
IDogU3RyaW5nKCk7Cit9CisKK1Bhc3NSZWZQdHI8QnVmZmVyZWREYXRhVHJhbnNmZXJGaWxlbmFt
ZUl0ZW0+IEJ1ZmZlcmVkRGF0YVRyYW5zZmVyRmlsZW5hbWVJdGVtOjpjcmVhdGUoY29uc3QgU3Ry
aW5nJiBmaWxlbmFtZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJ1ZmZlcmVkRGF0YVRy
YW5zZmVyRmlsZW5hbWVJdGVtKGZpbGVuYW1lKSk7Cit9CisKK1Bhc3NSZWZQdHI8QmxvYj4gQnVm
ZmVyZWREYXRhVHJhbnNmZXJGaWxlbmFtZUl0ZW06OmdldEFzRmlsZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIEZpbGU6OmNyZWF0ZShtX2ZpbGVuYW1lKTsKK30KKworRGF0YVRyYW5zZmVyRmlsZUl0
ZW06OlN0b3JhZ2VUeXBlIEJ1ZmZlcmVkRGF0YVRyYW5zZmVyRmlsZW5hbWVJdGVtOjpzdG9yYWdl
VHlwZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEZpbGVuYW1lVHlwZTsKK30KKworQnVmZmVyZWRE
YXRhVHJhbnNmZXJGaWxlbmFtZUl0ZW06OkJ1ZmZlcmVkRGF0YVRyYW5zZmVyRmlsZW5hbWVJdGVt
KGNvbnN0IFN0cmluZyYgZmlsZW5hbWUpCisgICAgOiBtX2ZpbGVuYW1lKGZpbGVuYW1lKQorewor
fQorCitQYXNzUmVmUHRyPEJ1ZmZlcmVkRGF0YVRyYW5zZmVyU2hhcmVkQnVmZmVySXRlbT4gQnVm
ZmVyZWREYXRhVHJhbnNmZXJTaGFyZWRCdWZmZXJJdGVtOjpjcmVhdGUoY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBTdHJpbmcmIGV4dGVuc2lvbiwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1
ZmZlcikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJ1ZmZlcmVkRGF0YVRyYW5zZmVyU2hh
cmVkQnVmZmVySXRlbShuYW1lLCBleHRlbnNpb24sIGJ1ZmZlcikpOworfQogCi0gICAgaWYgKG1f
c291cmNlID09IEludGVybmFsU291cmNlKQotICAgICAgICByZXR1cm4gbV9maWxlOwotCi0gICAg
QVNTRVJUKG1fc291cmNlID09IFBhc3RlYm9hcmRTb3VyY2UpOwotICAgIGlmICh0eXBlKCkgPT0g
bWltZVR5cGVJbWFnZVBuZykgewotICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBwcmV0dHkgaW5l
ZmZpY2llbnQuIFdlIGNvcHkgdGhlIGRhdGEgZnJvbSB0aGUgYnJvd3NlcgotICAgICAgICAvLyB0
byB0aGUgcmVuZGVyZXIuIFdlIHRoZW4gcGxhY2UgaXQgaW4gYSBibG9iIGluIFdlYktpdCwgd2hp
Y2gKLSAgICAgICAgLy8gcmVnaXN0ZXJzIGl0IGFuZCBjb3BpZXMgaXQgKmJhY2sqIHRvIHRoZSBi
cm93c2VyLiBXaGVuIGEgY29uc3VtZXIKLSAgICAgICAgLy8gd2FudHMgdG8gcmVhZCB0aGUgZGF0
YSwgd2UgdGhlbiBjb3B5IHRoZSBkYXRhIGJhY2sgaW50byB0aGUgcmVuZGVyZXIuCi0gICAgICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01ODEwNyBoYXMgYmVl
biBmaWxlZCB0byB0cmFjawotICAgICAgICAvLyBpbXByb3ZlbWVudHMgdG8gdGhpcyBjb2RlIChp
biBwYXJ0aWN1bGFyLCBhZGQgYSByZWdpc3RlckNsaXBib2FyZEJsb2IKLSAgICAgICAgLy8gbWV0
aG9kIHRvIHRoZSBibG9iIHJlZ2lzdHJ5OyB0aGF0IHdheSB0aGUgZGF0YSBpcyBvbmx5IGNvcGll
ZCBvdmVyCi0gICAgICAgIC8vIGludG8gdGhlIHJlbmRlcmVyIHdoZW4gaXQncyBhY3R1YWxseSBy
ZWFkLCBub3Qgd2hlbiB0aGUgYmxvYiBpcwotICAgICAgICAvLyBpbml0aWFsbHkgY29uc3RydWN0
ZWQpLgotICAgICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhID0gUGxhdGZvcm1TdXBwb3J0
OjpjbGlwYm9hcmRSZWFkSW1hZ2UoUGFzdGVib2FyZFByaXZhdGU6OlN0YW5kYXJkQnVmZmVyKTsK
LSAgICAgICAgUmVmUHRyPFJhd0RhdGE+IHJhd0RhdGEgPSBSYXdEYXRhOjpjcmVhdGUoKTsKLSAg
ICAgICAgcmF3RGF0YS0+bXV0YWJsZURhdGEoKS0+YXBwZW5kKGRhdGEtPmRhdGEoKSwgZGF0YS0+
c2l6ZSgpKTsKLSAgICAgICAgT3duUHRyPEJsb2JEYXRhPiBibG9iRGF0YSA9IEJsb2JEYXRhOjpj
cmVhdGUoKTsKLSAgICAgICAgYmxvYkRhdGEtPmFwcGVuZERhdGEocmF3RGF0YSwgMCwgLTEpOwot
ICAgICAgICBibG9iRGF0YS0+c2V0Q29udGVudFR5cGUobWltZVR5cGVJbWFnZVBuZyk7Ci0gICAg
ICAgIHJldHVybiBCbG9iOjpjcmVhdGUoYmxvYkRhdGEucmVsZWFzZSgpLCBkYXRhLT5zaXplKCkp
OwotICAgIH0KK1Bhc3NSZWZQdHI8QmxvYj4gQnVmZmVyZWREYXRhVHJhbnNmZXJTaGFyZWRCdWZm
ZXJJdGVtOjpnZXRBc0ZpbGUoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBPbmx5IHVzZWQgZm9y
IGRlZmF1bHQgZHJhZyBwcm9jZXNzaW5nIHdoZW4gZHJhZ2dpbmcgb3V0LCBzbyBub3QgbmVlZGVk
Li4uIHlldC4KICAgICByZXR1cm4gMDsKIH0KIAotQ2xpcGJvYXJkQ2hyb21pdW0qIERhdGFUcmFu
c2Zlckl0ZW1DaHJvbWl1bTo6Y2xpcGJvYXJkQ2hyb21pdW0oKSBjb25zdAorRGF0YVRyYW5zZmVy
RmlsZUl0ZW06OlN0b3JhZ2VUeXBlIEJ1ZmZlcmVkRGF0YVRyYW5zZmVyU2hhcmVkQnVmZmVySXRl
bTo6c3RvcmFnZVR5cGUoKSBjb25zdAoreworICAgIHJldHVybiBTaGFyZWRCdWZmZXJUeXBlOwor
fQorCitCdWZmZXJlZERhdGFUcmFuc2ZlclNoYXJlZEJ1ZmZlckl0ZW06OkJ1ZmZlcmVkRGF0YVRy
YW5zZmVyU2hhcmVkQnVmZmVySXRlbShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYg
ZXh0ZW5zaW9uLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyKQorICAgIDogbV9uYW1l
KG5hbWUpCisgICAgLCBtX2V4dGVuc2lvbihleHRlbnNpb24pCisgICAgLCBtX2J1ZmZlcihidWZm
ZXIpCit7Cit9CisKK1Bhc3NSZWZQdHI8UGFzdGVib2FyZERhdGFUcmFuc2ZlclN0cmluZ0l0ZW0+
IFBhc3RlYm9hcmREYXRhVHJhbnNmZXJTdHJpbmdJdGVtOjpjcmVhdGUoCisgICAgUGFzdGVib2Fy
ZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlciBidWZmZXIsIHVpbnQ2NF90IHNlcXVlbmNlTnVtYmVy
LCBjb25zdCBTdHJpbmcmIHR5cGUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQYXN0ZWJv
YXJkRGF0YVRyYW5zZmVyU3RyaW5nSXRlbShidWZmZXIsIHNlcXVlbmNlTnVtYmVyLCB0eXBlKSk7
Cit9CisKK1N0cmluZyBQYXN0ZWJvYXJkRGF0YVRyYW5zZmVyU3RyaW5nSXRlbTo6a2luZCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIERhdGFUcmFuc2Zlckl0ZW06OmtpbmRTdHJpbmc7Cit9CisKK1N0
cmluZyBQYXN0ZWJvYXJkRGF0YVRyYW5zZmVyU3RyaW5nSXRlbTo6dHlwZSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fdHlwZTsKK30KKwordm9pZCBQYXN0ZWJvYXJkRGF0YVRyYW5zZmVyU3RyaW5n
SXRlbTo6Z2V0QXNTdHJpbmcoUGFzc1JlZlB0cjxTdHJpbmdDYWxsYmFjaz4gY2FsbGJhY2ssIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAgY2FsbGJhY2stPnNj
aGVkdWxlQ2FsbGJhY2soY29udGV4dCwgbGVnYWN5R2V0QXNTdHJpbmcoKSk7Cit9CisKK1N0cmlu
ZyBQYXN0ZWJvYXJkRGF0YVRyYW5zZmVyU3RyaW5nSXRlbTo6bGVnYWN5R2V0QXNTdHJpbmcoKSBj
b25zdAoreworICAgIGlmIChwYXN0ZWJvYXJkSGFzQ2hhbmdlZChtX2J1ZmZlciwgbV9zZXF1ZW5j
ZU51bWJlcikpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICBpZiAobV90eXBlID09IG1p
bWVUeXBlVGV4dFBsYWluKQorICAgICAgICByZXR1cm4gUGxhdGZvcm1TdXBwb3J0OjpjbGlwYm9h
cmRSZWFkUGxhaW5UZXh0KG1fYnVmZmVyKTsKKyAgICByZXR1cm4gUGxhdGZvcm1TdXBwb3J0Ojpj
bGlwYm9hcmRSZWFkQ3VzdG9tRGF0YShtX2J1ZmZlciwgbV90eXBlKTsKK30KKworUGFzdGVib2Fy
ZERhdGFUcmFuc2ZlclN0cmluZ0l0ZW06OlBhc3RlYm9hcmREYXRhVHJhbnNmZXJTdHJpbmdJdGVt
KAorICAgIFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIgYnVmZmVyLCB1aW50NjRf
dCBzZXF1ZW5jZU51bWJlciwgY29uc3QgU3RyaW5nJiB0eXBlKQorICAgIDogbV9idWZmZXIoYnVm
ZmVyKQorICAgICwgbV9zZXF1ZW5jZU51bWJlcihzZXF1ZW5jZU51bWJlcikKKyAgICAsIG1fdHlw
ZSh0eXBlKQoreworfQorCitQYXNzUmVmUHRyPFBhc3RlYm9hcmREYXRhVHJhbnNmZXJIVE1MSXRl
bT4gUGFzdGVib2FyZERhdGFUcmFuc2ZlckhUTUxJdGVtOjpjcmVhdGUoCisgICAgUGFzdGVib2Fy
ZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlciBidWZmZXIsIHVpbnQ2NF90IHNlcXVlbmNlTnVtYmVy
KQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgUGFzdGVib2FyZERhdGFUcmFuc2ZlckhUTUxJ
dGVtKGJ1ZmZlciwgc2VxdWVuY2VOdW1iZXIpKTsKK30KKwordm9pZCBQYXN0ZWJvYXJkRGF0YVRy
YW5zZmVySFRNTEl0ZW06OmdldEFzU3RyaW5nKFBhc3NSZWZQdHI8U3RyaW5nQ2FsbGJhY2s+IGNh
bGxiYWNrLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KSBjb25zdAoreworICAgIGNh
bGxiYWNrLT5zY2hlZHVsZUNhbGxiYWNrKGNvbnRleHQsIGxlZ2FjeUdldEFzU3RyaW5nKCkpOwor
fQorCitTdHJpbmcgUGFzdGVib2FyZERhdGFUcmFuc2ZlckhUTUxJdGVtOjpsZWdhY3lHZXRBc1N0
cmluZygpIGNvbnN0Cit7CisgICAgaWYgKHBhc3RlYm9hcmRIYXNDaGFuZ2VkKG1fYnVmZmVyLCBt
X3NlcXVlbmNlTnVtYmVyKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIFN0cmluZyBo
dG1sOworICAgIEtVUkwgaWdub3JlZFNvdXJjZVVSTDsKKyAgICB1bnNpZ25lZCBpZ25vcmVkOwor
ICAgIFBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJvYXJkUmVhZEhUTUwoY3VycmVudFBhc3RlYm9hcmRC
dWZmZXIoKSwgJmh0bWwsICZpZ25vcmVkU291cmNlVVJMLCAmaWdub3JlZCwgJmlnbm9yZWQpOwor
ICAgIHJldHVybiBodG1sOworfQorCisvLyBXZSBkb24ndCBjdXJyZW50bHkgdXNlIG9yIHN1cHBv
cnQgdGhlc2Ugb3BlcmF0aW9ucyBmb3IgSFRNTCBvbiB0aGUgcGFzdGVib2FyZC4KK0tVUkwgUGFz
dGVib2FyZERhdGFUcmFuc2ZlckhUTUxJdGVtOjpiYXNlVVJMKCkgY29uc3QKK3sKKyAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gS1VSTCgpOworfQorCit2b2lkIFBhc3RlYm9h
cmREYXRhVHJhbnNmZXJIVE1MSXRlbTo6c2V0QmFzZVVSTChjb25zdCBLVVJMJikKK3sKKyAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworUGFzdGVib2FyZERhdGFUcmFuc2ZlckhUTUxJdGVt
OjpQYXN0ZWJvYXJkRGF0YVRyYW5zZmVySFRNTEl0ZW0oCisgICAgUGFzdGVib2FyZFByaXZhdGU6
OkNsaXBib2FyZEJ1ZmZlciBidWZmZXIsIHVpbnQ2NF90IHNlcXVlbmNlTnVtYmVyKQorICAgIDog
bV9idWZmZXIoYnVmZmVyKQorICAgICwgbV9zZXF1ZW5jZU51bWJlcihzZXF1ZW5jZU51bWJlcikK
K3sKK30KKworUGFzc1JlZlB0cjxQYXN0ZWJvYXJkRGF0YVRyYW5zZmVySW1hZ2VJdGVtPiBQYXN0
ZWJvYXJkRGF0YVRyYW5zZmVySW1hZ2VJdGVtOjpjcmVhdGUoCisgICAgUGFzdGVib2FyZFByaXZh
dGU6OkNsaXBib2FyZEJ1ZmZlciBidWZmZXIsIHVpbnQ2NF90IHNlcXVlbmNlTnVtYmVyKQorewor
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgUGFzdGVib2FyZERhdGFUcmFuc2ZlckltYWdlSXRlbShi
dWZmZXIsIHNlcXVlbmNlTnVtYmVyKSk7Cit9CisKK1N0cmluZyBQYXN0ZWJvYXJkRGF0YVRyYW5z
ZmVySW1hZ2VJdGVtOjpraW5kKCkgY29uc3QKK3sKKyAgICByZXR1cm4gRGF0YVRyYW5zZmVySXRl
bTo6a2luZEZpbGU7Cit9CisKK1N0cmluZyBQYXN0ZWJvYXJkRGF0YVRyYW5zZmVySW1hZ2VJdGVt
Ojp0eXBlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbWltZVR5cGVJbWFnZVBuZzsKK30KKworUGFz
c1JlZlB0cjxCbG9iPiBQYXN0ZWJvYXJkRGF0YVRyYW5zZmVySW1hZ2VJdGVtOjpnZXRBc0ZpbGUo
KSBjb25zdAoreworICAgIGlmIChwYXN0ZWJvYXJkSGFzQ2hhbmdlZChtX2J1ZmZlciwgbV9zZXF1
ZW5jZU51bWJlcikpCisgICAgICAgIHJldHVybiAwOworICAgIC8vIEZJWE1FOiBUaGlzIGlzIHBy
ZXR0eSBpbmVmZmljaWVudC4gV2UgY29weSB0aGUgZGF0YSBmcm9tIHRoZSBicm93c2VyCisgICAg
Ly8gdG8gdGhlIHJlbmRlcmVyLiBXZSB0aGVuIHBsYWNlIGl0IGluIGEgYmxvYiBpbiBXZWJLaXQs
IHdoaWNoCisgICAgLy8gcmVnaXN0ZXJzIGl0IGFuZCBjb3BpZXMgaXQgKmJhY2sqIHRvIHRoZSBi
cm93c2VyLiBXaGVuIGEgY29uc3VtZXIKKyAgICAvLyB3YW50cyB0byByZWFkIHRoZSBkYXRhLCB3
ZSB0aGVuIGNvcHkgdGhlIGRhdGEgYmFjayBpbnRvIHRoZSByZW5kZXJlci4KKyAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTgxMDcgaGFzIGJlZW4gZmlsZWQg
dG8gdHJhY2sKKyAgICAvLyBpbXByb3ZlbWVudHMgdG8gdGhpcyBjb2RlIChpbiBwYXJ0aWN1bGFy
LCBhZGQgYSByZWdpc3RlckNsaXBib2FyZEJsb2IKKyAgICAvLyBtZXRob2QgdG8gdGhlIGJsb2Ig
cmVnaXN0cnk7IHRoYXQgd2F5IHRoZSBkYXRhIGlzIG9ubHkgY29waWVkIG92ZXIKKyAgICAvLyBp
bnRvIHRoZSByZW5kZXJlciB3aGVuIGl0J3MgYWN0dWFsbHkgcmVhZCwgbm90IHdoZW4gdGhlIGJs
b2IgaXMKKyAgICAvLyBpbml0aWFsbHkgY29uc3RydWN0ZWQpLgorICAgIFJlZlB0cjxTaGFyZWRC
dWZmZXI+IGRhdGEgPSBQbGF0Zm9ybVN1cHBvcnQ6OmNsaXBib2FyZFJlYWRJbWFnZShtX2J1ZmZl
cik7CisgICAgUmVmUHRyPFJhd0RhdGE+IHJhd0RhdGEgPSBSYXdEYXRhOjpjcmVhdGUoKTsKKyAg
ICByYXdEYXRhLT5tdXRhYmxlRGF0YSgpLT5hcHBlbmQoZGF0YS0+ZGF0YSgpLCBkYXRhLT5zaXpl
KCkpOworICAgIE93blB0cjxCbG9iRGF0YT4gYmxvYkRhdGEgPSBCbG9iRGF0YTo6Y3JlYXRlKCk7
CisgICAgYmxvYkRhdGEtPmFwcGVuZERhdGEocmF3RGF0YSwgMCwgLTEpOworICAgIGJsb2JEYXRh
LT5zZXRDb250ZW50VHlwZShtaW1lVHlwZUltYWdlUG5nKTsKKyAgICByZXR1cm4gQmxvYjo6Y3Jl
YXRlKGJsb2JEYXRhLnJlbGVhc2UoKSwgZGF0YS0+c2l6ZSgpKTsKK30KKworUGFzdGVib2FyZERh
dGFUcmFuc2ZlckltYWdlSXRlbTo6UGFzdGVib2FyZERhdGFUcmFuc2ZlckltYWdlSXRlbSgKKyAg
ICBQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyIGJ1ZmZlciwgdWludDY0X3Qgc2Vx
dWVuY2VOdW1iZXIpCisgICAgOiBtX2J1ZmZlcihidWZmZXIpCisgICAgLCBtX3NlcXVlbmNlTnVt
YmVyKHNlcXVlbmNlTnVtYmVyKQogewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxDbGlwYm9hcmRD
aHJvbWl1bSo+KG1fb3duZXIuZ2V0KCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EYXRhVHJhbnNmZXJJ
dGVtQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RhdGFUcmFu
c2Zlckl0ZW1DaHJvbWl1bS5oCmluZGV4IDJhOTE5MDA2YmY5YTQwY2M3OTNiOTJjZjg2OGFhOGQz
ZDVhNTk3YTUuLjU2YWNiMTY1YjQ0ODIxMWFkMThiZThmMDg4ZTYzODM0ZDg5MTlhYTkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RhdGFUcmFuc2Zlckl0ZW1D
aHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RhdGFUcmFu
c2Zlckl0ZW1DaHJvbWl1bS5oCkBAIC0zMyw0OCArMzMsMjE0IEBACiAKICNpZiBFTkFCTEUoREFU
QV9UUkFOU0ZFUl9JVEVNUykKIAotI2luY2x1ZGUgIkRhdGFUcmFuc2Zlckl0ZW0uaCIKKyNpbmNs
dWRlICJLVVJMLmgiCisjaW5jbHVkZSAiUGFzdGVib2FyZFByaXZhdGUuaCIKKyNpbmNsdWRlICJT
aGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1jbGFzcyBDbGlwYm9hcmQ7Ci1jbGFzcyBDbGlwYm9hcmRDaHJvbWl1bTsK
K2NsYXNzIEJsb2I7CiBjbGFzcyBGaWxlOwogY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsK
K2NsYXNzIFN0cmluZ0NhbGxiYWNrOwogCi1jbGFzcyBEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0g
OiBwdWJsaWMgRGF0YVRyYW5zZmVySXRlbSB7CisvLyBUaGlzIGludGVyZmFjZSBpcyBzaW1pbGFy
IHRvIGJ1dCBub3QgcXVpdGUgdGhlIHNhbWUgYXMgdGhlIElETCBpbnRlcmZhY2Ugc2luY2Ugd2Ug
ZG9uJ3QgcmVxdWlyZQorLy8gdGhlIGV4YWN0IHNhbWUgcGFyYW1ldGVycyBmb3IgYWxsIHRoZSBm
dW5jdGlvbnMsIGFuZCBhbHNvIHJlcXVpcmUgYWRkaXRpb25hbCBtZXRob2RzIGZvcgorLy8gc3Vw
cG9ydGluZyBsZWdhY3kgb3BlcmF0aW9ucy4KK2NsYXNzIERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1
bSA6IHB1YmxpYyBSZWZDb3VudGVkPERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bT4gewogcHVibGlj
OgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bT4gY3JlYXRl
KFBhc3NSZWZQdHI8Q2xpcGJvYXJkPiBvd25lciwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNv
bnN0IFN0cmluZyYgZGF0YSwgY29uc3QgU3RyaW5nJiB0eXBlKTsKLSAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0+IGNyZWF0ZShQYXNzUmVmUHRyPENsaXBib2Fy
ZD4gb3duZXIsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPEZpbGU+KTsKLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0+IGNyZWF0ZUZyb21Q
YXN0ZWJvYXJkKFBhc3NSZWZQdHI8Q2xpcGJvYXJkPiBvd25lciwgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIGNvbnN0IFN0cmluZyYgdHlwZSk7CisgICAgdmlydHVhbCB+RGF0YVRyYW5zZmVySXRl
bUNocm9taXVtKCk7CiAKLSAgICB2aXJ0dWFsIFN0cmluZyBraW5kKCkgY29uc3QgeyByZXR1cm4g
bV9raW5kOyB9Ci0gICAgdmlydHVhbCBTdHJpbmcgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlw
ZTsgfQotICAgIHZpcnR1YWwgdm9pZCBnZXRBc1N0cmluZyhQYXNzUmVmUHRyPFN0cmluZ0NhbGxi
YWNrPikgY29uc3Q7CisgICAgdmlydHVhbCBTdHJpbmcga2luZCgpIGNvbnN0ID0gMDsKKyAgICB2
aXJ0dWFsIFN0cmluZyB0eXBlKCkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGdldEFz
U3RyaW5nKFBhc3NSZWZQdHI8U3RyaW5nQ2FsbGJhY2s+LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0
KikgY29uc3Q7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEJsb2I+IGdldEFzRmlsZSgpIGNvbnN0
OworICAgIC8vIFVzZWQgdG8gaW1wbGVtZW50IENsaXBib2FyZENocm9taXVtOjpnZXREYXRhKCkg
YW5kIHNlcmlhbGl6YXRpb24gZm9yIHRoZSBXZWJLaXQgbGF5ZXIuCisgICAgdmlydHVhbCBTdHJp
bmcgbGVnYWN5R2V0QXNTdHJpbmcoKSBjb25zdDsKK307CiAKLXByaXZhdGU6Ci0gICAgZnJpZW5k
IGNsYXNzIERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW07CisvLyBTcGVjaWFsaXphdGlvbnMg
Zm9yIGRhdGEgZmxhdm9ycyB3aXRoIGFzc29jaWF0ZWQgbWV0YWRhdGEuCitjbGFzcyBEYXRhVHJh
bnNmZXJVUklMaXN0SXRlbSA6IHB1YmxpYyBEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0geworcHVi
bGljOgorICAgIHZpcnR1YWwgU3RyaW5nIGtpbmQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0cmlu
ZyB0eXBlKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIFN0cmluZyB0aXRsZSgpIGNvbnN0ID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0VGl0bGUoY29uc3QgU3RyaW5nJikgPSAwOworfTsKIAotICAg
IGVudW0gRGF0YVNvdXJjZSB7Ci0gICAgICAgIFBhc3RlYm9hcmRTb3VyY2UsCi0gICAgICAgIElu
dGVybmFsU291cmNlLAorY2xhc3MgRGF0YVRyYW5zZmVySFRNTEl0ZW0gOiBwdWJsaWMgRGF0YVRy
YW5zZmVySXRlbUNocm9taXVtIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIFN0cmluZyBraW5kKCkg
Y29uc3Q7CisgICAgdmlydHVhbCBTdHJpbmcgdHlwZSgpIGNvbnN0OworCisgICAgdmlydHVhbCBL
VVJMIGJhc2VVUkwoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldEJhc2VVUkwoY29u
c3QgS1VSTCYpID0gMDsKK307CisKK2NsYXNzIERhdGFUcmFuc2ZlckZpbGVJdGVtIDogcHVibGlj
IERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bSB7CitwdWJsaWM6CisgICAgZW51bSBTdG9yYWdlVHlw
ZSB7CisgICAgICAgIEZpbGVuYW1lVHlwZSwKKyAgICAgICAgU2hhcmVkQnVmZmVyVHlwZSwKICAg
ICB9OwogCi0gICAgRGF0YVRyYW5zZmVySXRlbUNocm9taXVtKFBhc3NSZWZQdHI8Q2xpcGJvYXJk
PiBvd25lciwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIERhdGFTb3VyY2UsIGNvbnN0IFN0cmlu
ZyYga2luZCwgY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpOwotICAgIERh
dGFUcmFuc2Zlckl0ZW1DaHJvbWl1bShQYXNzUmVmUHRyPENsaXBib2FyZD4gb3duZXIsIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBEYXRhU291cmNlLCBQYXNzUmVmUHRyPEZpbGU+KTsKKyAgICB2
aXJ0dWFsIFN0cmluZyBraW5kKCkgY29uc3Q7CisgICAgdmlydHVhbCBTdHJpbmcgdHlwZSgpIGNv
bnN0OwogCi0gICAgQ2xpcGJvYXJkQ2hyb21pdW0qIGNsaXBib2FyZENocm9taXVtKCkgY29uc3Q7
CisgICAgLy8gRmFrZSBSVFRJLgorICAgIHZpcnR1YWwgU3RvcmFnZVR5cGUgc3RvcmFnZVR5cGUo
KSBjb25zdCA9IDA7Cit9OworCisvLyBNZW1vcnktYmFja2VkIHNwZWNpYWxpemF0aW9ucy4gVXNl
ZCBmb3IgaGFuZGxpbmcgZHJhZ3MsIGRyb3BzLCBhbmQgd3JpdGluZyB0byB0aGUgcGFzdGVib2Fy
ZC4KK2NsYXNzIEJ1ZmZlcmVkRGF0YVRyYW5zZmVyU3RyaW5nSXRlbSA6IHB1YmxpYyBEYXRhVHJh
bnNmZXJJdGVtQ2hyb21pdW0geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJ1ZmZl
cmVkRGF0YVRyYW5zZmVyU3RyaW5nSXRlbT4gY3JlYXRlKGNvbnN0IFN0cmluZyYgdHlwZSwgY29u
c3QgU3RyaW5nJiBkYXRhKTsKKworICAgIHZpcnR1YWwgU3RyaW5nIGtpbmQoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIFN0cmluZyB0eXBlKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0QXNT
dHJpbmcoUGFzc1JlZlB0cjxTdHJpbmdDYWxsYmFjaz4sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
KSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0cmluZyBsZWdhY3lHZXRBc1N0cmluZygpIGNvbnN0Owor
Citwcml2YXRlOgorICAgIEJ1ZmZlcmVkRGF0YVRyYW5zZmVyU3RyaW5nSXRlbShjb25zdCBTdHJp
bmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSk7CiAKLSAgICBTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBtX2NvbnRleHQ7Ci0gICAgY29uc3QgUmVmUHRyPENsaXBib2FyZD4gbV9vd25lcjsKLSAg
ICBjb25zdCBTdHJpbmcgbV9raW5kOwogICAgIGNvbnN0IFN0cmluZyBtX3R5cGU7Ci0gICAgY29u
c3QgRGF0YVNvdXJjZSBtX3NvdXJjZTsKICAgICBjb25zdCBTdHJpbmcgbV9kYXRhOwotICAgIFJl
ZlB0cjxGaWxlPiBtX2ZpbGU7Cit9OworCisvLyBGSVhNRTogVGhpcyByZXN1bHRzIGluIGEgbG90
IG9mIGR1cGxpY2F0aW9uLiBNYXliZSB3ZSBjYW4gdXNlIHZpcnR1YWwgaW5oZXJpdGFuY2UgYW5k
IG91ciBvd24KKy8vIHJlZigpL2RlcmVmKCkgbWV0aG9kcyBzbyB3ZSBjYW4gcmV1c2UgRGF0YVRy
YW5zZmVyU3RyaW5nSXRlbS4KKy8vIC4uLiBhbHRlcm5hdGVseSwgc2luY2UgdGhpcyBpcyBvbmx5
IHVzZWQgYnkgdGhlIGRyYWdnaW5nIGNvZGUsIGp1c3QgaW1wbGVtZW50IHRoZSBzcGVjaWFsaXph
dGlvbnMKKy8vIGZvciBkcmFnZ2luZy4KK2NsYXNzIEJ1ZmZlcmVkRGF0YVRyYW5zZmVyVVJJTGlz
dEl0ZW0gOiBwdWJsaWMgRGF0YVRyYW5zZmVyVVJJTGlzdEl0ZW0geworcHVibGljOgorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEJ1ZmZlcmVkRGF0YVRyYW5zZmVyVVJJTGlzdEl0ZW0+IGNyZWF0ZShj
b25zdCBTdHJpbmcmIGRhdGEsIGNvbnN0IFN0cmluZyYgdGl0bGUpOworCisgICAgdmlydHVhbCB2
b2lkIGdldEFzU3RyaW5nKFBhc3NSZWZQdHI8U3RyaW5nQ2FsbGJhY2s+LCBTY3JpcHRFeGVjdXRp
b25Db250ZXh0KikgY29uc3Q7CisgICAgdmlydHVhbCBTdHJpbmcgbGVnYWN5R2V0QXNTdHJpbmco
KSBjb25zdDsKKworICAgIHZpcnR1YWwgU3RyaW5nIHRpdGxlKCkgY29uc3Q7CisgICAgdmlydHVh
bCB2b2lkIHNldFRpdGxlKGNvbnN0IFN0cmluZyYpOworCitwcml2YXRlOgorICAgIEJ1ZmZlcmVk
RGF0YVRyYW5zZmVyVVJJTGlzdEl0ZW0oY29uc3QgU3RyaW5nJiBkYXRhLCBjb25zdCBTdHJpbmcm
IHRpdGxlKTsKKworICAgIGNvbnN0IFN0cmluZyBtX2RhdGE7CisgICAgU3RyaW5nIG1fdGl0bGU7
Cit9OworCitjbGFzcyBCdWZmZXJlZERhdGFUcmFuc2ZlckhUTUxJdGVtIDogcHVibGljIERhdGFU
cmFuc2ZlckhUTUxJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCdWZmZXJl
ZERhdGFUcmFuc2ZlckhUTUxJdGVtPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBkYXRhLCBjb25zdCBL
VVJMJiBiYXNlVVJMKTsKKworICAgIHZpcnR1YWwgdm9pZCBnZXRBc1N0cmluZyhQYXNzUmVmUHRy
PFN0cmluZ0NhbGxiYWNrPiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopIGNvbnN0OworICAgIHZp
cnR1YWwgU3RyaW5nIGxlZ2FjeUdldEFzU3RyaW5nKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIEtV
UkwgYmFzZVVSTCgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRCYXNlVVJMKGNvbnN0IEtV
UkwmKTsKKworcHJpdmF0ZToKKyAgICBCdWZmZXJlZERhdGFUcmFuc2ZlckhUTUxJdGVtKGNvbnN0
IFN0cmluZyYgZGF0YSwgY29uc3QgS1VSTCYgYmFzZVVSTCk7CisKKyAgICBjb25zdCBTdHJpbmcg
bV9kYXRhOworICAgIEtVUkwgbV9iYXNlVVJMOworfTsKKworY2xhc3MgQnVmZmVyZWREYXRhVHJh
bnNmZXJGaWxlbmFtZUl0ZW0gOiBwdWJsaWMgRGF0YVRyYW5zZmVyRmlsZUl0ZW0geworcHVibGlj
OgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJ1ZmZlcmVkRGF0YVRyYW5zZmVyRmlsZW5hbWVJdGVt
PiBjcmVhdGUoY29uc3QgU3RyaW5nJik7CisKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8QmxvYj4g
Z2V0QXNGaWxlKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIFN0b3JhZ2VUeXBlIHN0b3JhZ2VUeXBl
KCkgY29uc3Q7CisKKyAgICBTdHJpbmcgZmlsZW5hbWUoKSBjb25zdCB7IHJldHVybiBtX2ZpbGVu
YW1lOyB9CisKK3ByaXZhdGU6CisgICAgQnVmZmVyZWREYXRhVHJhbnNmZXJGaWxlbmFtZUl0ZW0o
Y29uc3QgU3RyaW5nJik7CisKKyAgICBjb25zdCBTdHJpbmcgbV9maWxlbmFtZTsKK307CisKK2Ns
YXNzIEJ1ZmZlcmVkRGF0YVRyYW5zZmVyU2hhcmVkQnVmZmVySXRlbSA6IHB1YmxpYyBEYXRhVHJh
bnNmZXJGaWxlSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QnVmZmVyZWRE
YXRhVHJhbnNmZXJTaGFyZWRCdWZmZXJJdGVtPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBTdHJpbmcmIGV4dGVuc2lvbiwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+KTsKKworICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxCbG9iPiBnZXRBc0ZpbGUoKSBjb25zdDsKKworICAgIHZpcnR1
YWwgU3RvcmFnZVR5cGUgc3RvcmFnZVR5cGUoKSBjb25zdDsKKworICAgIFN0cmluZyBuYW1lKCkg
Y29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CisgICAgU3RyaW5nIGV4dGVuc2lvbigpIGNvbnN0IHsg
cmV0dXJuIG1fZXh0ZW5zaW9uOyB9CisgICAgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZl
cigpIGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVyOyB9CisKK3ByaXZhdGU6CisgICAgQnVmZmVyZWRE
YXRhVHJhbnNmZXJTaGFyZWRCdWZmZXJJdGVtKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3Ry
aW5nJiBleHRlbnNpb24sIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPik7CisKKyAgICBTdHJpbmcg
bV9uYW1lOworICAgIFN0cmluZyBtX2V4dGVuc2lvbjsKKyAgICBSZWZQdHI8U2hhcmVkQnVmZmVy
PiBtX2J1ZmZlcjsKK307CisKKy8vIFBhc3RlYm9hcmQgc3BlY2lhbGl6YXRpb25zIHVzZWQgd2hl
biByZWFkaW5nIGZyb20gdGhlIHBhc3RlYm9hcmQuCitjbGFzcyBQYXN0ZWJvYXJkRGF0YVRyYW5z
ZmVyU3RyaW5nSXRlbSA6IHB1YmxpYyBEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0geworcHVibGlj
OgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBhc3RlYm9hcmREYXRhVHJhbnNmZXJTdHJpbmdJdGVt
PiBjcmVhdGUoCisgICAgICAgIFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIsIHVp
bnQ2NF90IHNlcXVlbmNlTnVtYmVyLCBjb25zdCBTdHJpbmcmIHR5cGUpOworCisgICAgdmlydHVh
bCBTdHJpbmcga2luZCgpIGNvbnN0OworICAgIHZpcnR1YWwgU3RyaW5nIHR5cGUoKSBjb25zdDsK
KworICAgIHZpcnR1YWwgdm9pZCBnZXRBc1N0cmluZyhQYXNzUmVmUHRyPFN0cmluZ0NhbGxiYWNr
PiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopIGNvbnN0OworICAgIHZpcnR1YWwgU3RyaW5nIGxl
Z2FjeUdldEFzU3RyaW5nKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgUGFzdGVib2FyZERhdGFU
cmFuc2ZlclN0cmluZ0l0ZW0oUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlciwgdWlu
dDY0X3Qgc2VxdWVuY2VOdW1iZXIsIGNvbnN0IFN0cmluZyYgdHlwZSk7CisKKyAgICBjb25zdCBQ
YXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyIG1fYnVmZmVyOworICAgIGNvbnN0IHVp
bnQ2NF90IG1fc2VxdWVuY2VOdW1iZXI7CisgICAgY29uc3QgU3RyaW5nIG1fdHlwZTsKK307CisK
K2NsYXNzIFBhc3RlYm9hcmREYXRhVHJhbnNmZXJIVE1MSXRlbSA6IHB1YmxpYyBEYXRhVHJhbnNm
ZXJIVE1MSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8UGFzdGVib2FyZERh
dGFUcmFuc2ZlckhUTUxJdGVtPiBjcmVhdGUoCisgICAgICAgIFBhc3RlYm9hcmRQcml2YXRlOjpD
bGlwYm9hcmRCdWZmZXIsIHVpbnQ2NF90IHNlcXVlbmNlTnVtYmVyKTsKKworICAgIHZpcnR1YWwg
dm9pZCBnZXRBc1N0cmluZyhQYXNzUmVmUHRyPFN0cmluZ0NhbGxiYWNrPiwgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCopIGNvbnN0OworICAgIHZpcnR1YWwgU3RyaW5nIGxlZ2FjeUdldEFzU3RyaW5n
KCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIEtVUkwgYmFzZVVSTCgpIGNvbnN0OworICAgIHZpcnR1
YWwgdm9pZCBzZXRCYXNlVVJMKGNvbnN0IEtVUkwmKTsKKworcHJpdmF0ZToKKyAgICBQYXN0ZWJv
YXJkRGF0YVRyYW5zZmVySFRNTEl0ZW0oUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZl
ciwgdWludDY0X3Qgc2VxdWVuY2VOdW1iZXIpOworCisgICAgY29uc3QgUGFzdGVib2FyZFByaXZh
dGU6OkNsaXBib2FyZEJ1ZmZlciBtX2J1ZmZlcjsKKyAgICBjb25zdCB1aW50NjRfdCBtX3NlcXVl
bmNlTnVtYmVyOworfTsKKworY2xhc3MgUGFzdGVib2FyZERhdGFUcmFuc2ZlckltYWdlSXRlbSA6
IHB1YmxpYyBEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0geworcHVibGljOgorICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFBhc3RlYm9hcmREYXRhVHJhbnNmZXJJbWFnZUl0ZW0+IGNyZWF0ZSgKKyAgICAg
ICAgUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlciwgdWludDY0X3Qgc2VxdWVuY2VO
dW1iZXIpOworCisgICAgdmlydHVhbCBTdHJpbmcga2luZCgpIGNvbnN0OworICAgIHZpcnR1YWwg
U3RyaW5nIHR5cGUoKSBjb25zdDsKKworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxCbG9iPiBnZXRB
c0ZpbGUoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBQYXN0ZWJvYXJkRGF0YVRyYW5zZmVySW1h
Z2VJdGVtKFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIsIHVpbnQ2NF90IHNlcXVl
bmNlTnVtYmVyKTsKKworICAgIGNvbnN0IFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZm
ZXIgbV9idWZmZXI7CisgICAgY29uc3QgdWludDY0X3QgbV9zZXF1ZW5jZU51bWJlcjsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2Nocm9taXVtL0RhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0uY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bS5jcHAK
aW5kZXggMDllNmMzYTljNWEyOGI0OGNjYzAxYmFhM2Y1MTEzZDQ4YjBhNjMxYS4uNjk5MjIyMzBk
NDNiOGM2NmUyODE4MzkwODM4MTEzNzg3NzYzZWQwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRGF0YVRyYW5zZmVySXRlbUxpc3RD
aHJvbWl1bS5jcHAKQEAgLTMzLDE1MiArMzMsMjIwIEBACiAKICNpZiBFTkFCTEUoREFUQV9UUkFO
U0ZFUl9JVEVNUykKIAotI2luY2x1ZGUgIkJsb2JVUkwuaCIKLSNpbmNsdWRlICJDaHJvbWl1bURh
dGFPYmplY3QuaCIKLSNpbmNsdWRlICJDbGlwYm9hcmRDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkNs
aXBib2FyZE1pbWVUeXBlcy5oIgorI2luY2x1ZGUgIkNsaXBib2FyZFV0aWxpdGllc0Nocm9taXVt
LmgiCisjaW5jbHVkZSAiRGF0YVRyYW5zZmVySXRlbS5oIgogI2luY2x1ZGUgIkRhdGFUcmFuc2Zl
ckl0ZW1DaHJvbWl1bS5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJG
aWxlLmgiCi0jaW5jbHVkZSAiS1VSTC5oIgotI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQuaCIKLSNpbmNsdWRlICJUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5LmgiCi0jaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nQnVpbGRlci5oPgorI2luY2x1ZGUgIlBhc3RlYm9hcmRQcml2YXRlLmgiCisj
aW5jbHVkZSAiUGxhdGZvcm1TdXBwb3J0LmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUxpc3RDaHJv
bWl1bT4gRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bTo6Y3JlYXRlKFBhc3NSZWZQdHI8Q2xp
cGJvYXJkPiBvd25lciwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKK25hbWVzcGFj
ZSB7CisKK2NsYXNzIEJ1ZmZlcmVkRGF0YVRyYW5zZmVySXRlbUxpc3QgOiBwdWJsaWMgRGF0YVRy
YW5zZmVySXRlbUxpc3RDaHJvbWl1bSB7CitwdWJsaWM6CisgICAgQnVmZmVyZWREYXRhVHJhbnNm
ZXJJdGVtTGlzdCgpOworCisgICAgdmlydHVhbCBzaXplX3QgbGVuZ3RoKCkgY29uc3Q7CisgICAg
dmlydHVhbCBQYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bT4gaXRlbSh1bnNpZ25l
ZCBsb25nIGluZGV4KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSXRlbSh1bnNpZ25lZCBsb25n
IGluZGV4KTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRk
KGNvbnN0IFN0cmluZyYgZGF0YSwgY29uc3QgU3RyaW5nJiB0eXBlLCBFeGNlcHRpb25Db2RlJik7
CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCB2b2lkIGludGVybmFsQWRkU3RyaW5nKGNvbnN0IFN0
cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKTsKKyAgICB2aXJ0dWFsIHZvaWQgaW50ZXJu
YWxBZGRVUkwoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgdGl0bGUpOworICAgIHZp
cnR1YWwgdm9pZCBpbnRlcm5hbEFkZEhUTUwoY29uc3QgU3RyaW5nJiBtYXJrdXAsIGNvbnN0IEtV
UkwmIGJhc2VVUkwpOworICAgIHZpcnR1YWwgdm9pZCBpbnRlcm5hbEFkZEZpbGVuYW1lKGNvbnN0
IFN0cmluZyYpOworICAgIHZpcnR1YWwgdm9pZCBpbnRlcm5hbEFkZFNoYXJlZEJ1ZmZlcihjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9uLCBQYXNzUmVmUHRyPFNoYXJl
ZEJ1ZmZlcj4pOworCisgICAgVmVjdG9yPFJlZlB0cjxEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0+
ID4gbV9pdGVtczsKK307CisKK2NsYXNzIFBhc3RlYm9hcmREYXRhVHJhbnNmZXJJdGVtTGlzdCA6
IHB1YmxpYyBEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtIHsKK3B1YmxpYzoKKyAgICBQYXN0
ZWJvYXJkRGF0YVRyYW5zZmVySXRlbUxpc3QoKTsKKworICAgIHZpcnR1YWwgc2l6ZV90IGxlbmd0
aCgpIGNvbnN0OworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtQ2hyb21p
dW0+IGl0ZW0odW5zaWduZWQgbG9uZyBpbmRleCk7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUl0
ZW0odW5zaWduZWQgbG9uZyBpbmRleCk7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyKCk7CisgICAg
dmlydHVhbCB2b2lkIGFkZChjb25zdCBTdHJpbmcmIGRhdGEsIGNvbnN0IFN0cmluZyYgdHlwZSwg
RXhjZXB0aW9uQ29kZSYpOworCitwcml2YXRlOgorICAgIHZpcnR1YWwgdm9pZCBpbnRlcm5hbEFk
ZFN0cmluZyhjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSk7CisgICAgdmly
dHVhbCB2b2lkIGludGVybmFsQWRkVVJMKGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcm
IHRpdGxlKTsKKyAgICB2aXJ0dWFsIHZvaWQgaW50ZXJuYWxBZGRIVE1MKGNvbnN0IFN0cmluZyYg
bWFya3VwLCBjb25zdCBLVVJMJiBiYXNlVVJMKTsKKyAgICB2aXJ0dWFsIHZvaWQgaW50ZXJuYWxB
ZGRGaWxlbmFtZShjb25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgaW50ZXJuYWxBZGRT
aGFyZWRCdWZmZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4dGVuc2lvbiwg
UGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+KTsKKworICAgIGNvbnN0IFBhc3RlYm9hcmRQcml2YXRl
OjpDbGlwYm9hcmRCdWZmZXIgbV9idWZmZXI7CisgICAgY29uc3QgdWludDY0X3QgbV9zZXF1ZW5j
ZU51bWJlcjsKKyAgICBWZWN0b3I8UmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bT4gPiBt
X2l0ZW1zOworfTsKKworQnVmZmVyZWREYXRhVHJhbnNmZXJJdGVtTGlzdDo6QnVmZmVyZWREYXRh
VHJhbnNmZXJJdGVtTGlzdCgpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEYXRhVHJhbnNm
ZXJJdGVtTGlzdENocm9taXVtKG93bmVyLCBjb250ZXh0KSk7CiB9CiAKLURhdGFUcmFuc2Zlckl0
ZW1MaXN0Q2hyb21pdW06OkRhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0oUGFzc1JlZlB0cjxD
bGlwYm9hcmQ+IG93bmVyLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQotICAgIDog
bV9vd25lcihvd25lcikKLSAgICAsIG1fY29udGV4dChjb250ZXh0KQorc2l6ZV90IEJ1ZmZlcmVk
RGF0YVRyYW5zZmVySXRlbUxpc3Q6Omxlbmd0aCgpIGNvbnN0CiB7Ci19Ci0KLXNpemVfdCBEYXRh
VHJhbnNmZXJJdGVtTGlzdENocm9taXVtOjpsZW5ndGgoKQotewotICAgIGlmIChtX293bmVyLT5w
b2xpY3koKSA9PSBDbGlwYm9hcmROdW1iKQotICAgICAgICByZXR1cm4gMDsKLSAgICBjbGlwYm9h
cmRDaHJvbWl1bSgpLT5tYXlVcGRhdGVJdGVtcyhtX2l0ZW1zKTsKICAgICByZXR1cm4gbV9pdGVt
cy5zaXplKCk7CiB9CiAKLVBhc3NSZWZQdHI8RGF0YVRyYW5zZmVySXRlbT4gRGF0YVRyYW5zZmVy
SXRlbUxpc3RDaHJvbWl1bTo6aXRlbSh1bnNpZ25lZCBsb25nIGluZGV4KQorUGFzc1JlZlB0cjxE
YXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0+IEJ1ZmZlcmVkRGF0YVRyYW5zZmVySXRlbUxpc3Q6Oml0
ZW0odW5zaWduZWQgbG9uZyBpbmRleCkKIHsKLSAgICBpZiAobV9vd25lci0+cG9saWN5KCkgPT0g
Q2xpcGJvYXJkTnVtYikKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBjbGlwYm9hcmRDaHJvbWl1
bSgpLT5tYXlVcGRhdGVJdGVtcyhtX2l0ZW1zKTsKICAgICBpZiAoaW5kZXggPj0gbGVuZ3RoKCkp
CiAgICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBtX2l0ZW1zW2luZGV4XTsKIH0KIAotdm9p
ZCBEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtOjpkZWxldGVJdGVtKHVuc2lnbmVkIGxvbmcg
aW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBCdWZmZXJlZERhdGFUcmFuc2Zlckl0ZW1M
aXN0OjpkZWxldGVJdGVtKHVuc2lnbmVkIGxvbmcgaW5kZXgpCiB7Ci0gICAgaWYgKG1fb3duZXIt
PnBvbGljeSgpICE9IENsaXBib2FyZFdyaXRhYmxlKSB7Ci0gICAgICAgIGVjID0gSU5WQUxJRF9T
VEFURV9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBjbGlwYm9hcmRDaHJvbWl1
bSgpLT5tYXlVcGRhdGVJdGVtcyhtX2l0ZW1zKTsKICAgICBpZiAoaW5kZXggPj0gbGVuZ3RoKCkp
CiAgICAgICAgIHJldHVybjsKLSAgICBSZWZQdHI8RGF0YVRyYW5zZmVySXRlbT4gaXRlbSA9IG1f
aXRlbXNbaW5kZXhdOworICAgIG1faXRlbXMucmVtb3ZlKGluZGV4KTsKK30KIAotICAgIFJlZlB0
cjxDaHJvbWl1bURhdGFPYmplY3Q+IGRhdGFPYmplY3QgPSBjbGlwYm9hcmRDaHJvbWl1bSgpLT5k
YXRhT2JqZWN0KCk7Ci0gICAgaWYgKCFkYXRhT2JqZWN0KQotICAgICAgICByZXR1cm47Cit2b2lk
IEJ1ZmZlcmVkRGF0YVRyYW5zZmVySXRlbUxpc3Q6OmNsZWFyKCkKK3sKKyAgICBtX2l0ZW1zLmNs
ZWFyKCk7Cit9CiAKLSAgICBpZiAoaXRlbS0+a2luZCgpID09IERhdGFUcmFuc2Zlckl0ZW06Omtp
bmRTdHJpbmcpIHsKLSAgICAgICAgbV9pdGVtcy5yZW1vdmUoaW5kZXgpOwotICAgICAgICBkYXRh
T2JqZWN0LT5jbGVhckRhdGEoaXRlbS0+dHlwZSgpKTsKLSAgICAgICAgcmV0dXJuOwordm9pZCBC
dWZmZXJlZERhdGFUcmFuc2Zlckl0ZW1MaXN0OjphZGQoY29uc3QgU3RyaW5nJiBkYXRhLCBjb25z
dCBTdHJpbmcmIHR5cGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIC8vIE9ubHkgb25lICdz
dHJpbmcnIGl0ZW0gd2l0aCBhIGdpdmVuIHR5cGUgaXMgYWxsb3dlZCBpbiB0aGUgY29sbGVjdGlv
bi4KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1faXRlbXMuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgaWYgKG1faXRlbXNbaV0tPnR5cGUoKSA9PSB0eXBlICYmIG1faXRlbXNbaV0tPmtpbmQo
KSA9PSBEYXRhVHJhbnNmZXJJdGVtOjpraW5kU3RyaW5nKSB7CisgICAgICAgICAgICBlYyA9IE5P
VF9TVVBQT1JURURfRVJSOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgfQog
Ci0gICAgQVNTRVJUKGl0ZW0tPmtpbmQoKSA9PSBEYXRhVHJhbnNmZXJJdGVtOjpraW5kRmlsZSk7
Ci0gICAgUmVmUHRyPEJsb2I+IGJsb2IgPSBpdGVtLT5nZXRBc0ZpbGUoKTsKLSAgICBpZiAoIWJs
b2IgfHwgIWJsb2ItPmlzRmlsZSgpKQotICAgICAgICByZXR1cm47CisgICAgaWYgKHR5cGUgPT0g
bWltZVR5cGVUZXh0VVJJTGlzdCkKKyAgICAgICAgaW50ZXJuYWxBZGRVUkwoZGF0YSwgU3RyaW5n
KCkpOworICAgIGVsc2UgaWYgKHR5cGUgPT0gbWltZVR5cGVUZXh0SFRNTCkKKyAgICAgICAgaW50
ZXJuYWxBZGRIVE1MKGRhdGEsIEtVUkwoKSk7CisgICAgZWxzZQorICAgICAgICBpbnRlcm5hbEFk
ZFN0cmluZyh0eXBlLCBkYXRhKTsKK30KIAotICAgIG1faXRlbXMuY2xlYXIoKTsKLSAgICBjb25z
dCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVzID0gZGF0YU9iamVjdC0+ZmlsZW5hbWVzKCk7Ci0g
ICAgVmVjdG9yPFN0cmluZz4gY29waWVkRmlsZW5hbWVzOwotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgZmlsZW5hbWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChmaWxlbmFtZXNbaV0g
IT0gc3RhdGljX2Nhc3Q8RmlsZSo+KGJsb2IuZ2V0KCkpLT5wYXRoKCkpCi0gICAgICAgICAgICBj
b3BpZWRGaWxlbmFtZXMuYXBwZW5kKHN0YXRpY19jYXN0PEZpbGUqPihibG9iLmdldCgpKS0+cGF0
aCgpKTsKLSAgICB9Ci0gICAgZGF0YU9iamVjdC0+c2V0RmlsZW5hbWVzKGNvcGllZEZpbGVuYW1l
cyk7Cit2b2lkIEJ1ZmZlcmVkRGF0YVRyYW5zZmVySXRlbUxpc3Q6OmludGVybmFsQWRkU3RyaW5n
KGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKQoreworICAgIG1faXRlbXMu
YXBwZW5kKEJ1ZmZlcmVkRGF0YVRyYW5zZmVyU3RyaW5nSXRlbTo6Y3JlYXRlKHR5cGUsIGRhdGEp
KTsKIH0KIAotdm9pZCBEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtOjpjbGVhcigpCit2b2lk
IEJ1ZmZlcmVkRGF0YVRyYW5zZmVySXRlbUxpc3Q6OmludGVybmFsQWRkVVJMKGNvbnN0IFN0cmlu
ZyYgdXJsLCBjb25zdCBTdHJpbmcmIHRpdGxlKQogewotICAgIGlmIChtX293bmVyLT5wb2xpY3ko
KSAhPSBDbGlwYm9hcmRXcml0YWJsZSkKLSAgICAgICAgcmV0dXJuOworICAgIG1faXRlbXMuYXBw
ZW5kKEJ1ZmZlcmVkRGF0YVRyYW5zZmVyVVJJTGlzdEl0ZW06OmNyZWF0ZSh1cmwsIHRpdGxlKSk7
Cit9CiAKLSAgICBtX2l0ZW1zLmNsZWFyKCk7Ci0gICAgY2xpcGJvYXJkQ2hyb21pdW0oKS0+Y2xl
YXJBbGxEYXRhKCk7Cit2b2lkIEJ1ZmZlcmVkRGF0YVRyYW5zZmVySXRlbUxpc3Q6OmludGVybmFs
QWRkSFRNTChjb25zdCBTdHJpbmcmIG1hcmt1cCwgY29uc3QgS1VSTCYgYmFzZVVSTCkKK3sKKyAg
ICBtX2l0ZW1zLmFwcGVuZChCdWZmZXJlZERhdGFUcmFuc2ZlckhUTUxJdGVtOjpjcmVhdGUobWFy
a3VwLCBiYXNlVVJMKSk7CiB9CiAKLXZvaWQgRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bTo6
YWRkKGNvbnN0IFN0cmluZyYgZGF0YSwgY29uc3QgU3RyaW5nJiB0eXBlLCBFeGNlcHRpb25Db2Rl
JiBlYykKK3ZvaWQgQnVmZmVyZWREYXRhVHJhbnNmZXJJdGVtTGlzdDo6aW50ZXJuYWxBZGRGaWxl
bmFtZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lKQogewotICAgIGlmIChtX293bmVyLT5wb2xpY3ko
KSAhPSBDbGlwYm9hcmRXcml0YWJsZSkKLSAgICAgICAgcmV0dXJuOworICAgIG1faXRlbXMuYXBw
ZW5kKEJ1ZmZlcmVkRGF0YVRyYW5zZmVyRmlsZW5hbWVJdGVtOjpjcmVhdGUoZmlsZW5hbWUpKTsK
K30KIAotICAgIFJlZlB0cjxDaHJvbWl1bURhdGFPYmplY3Q+IGRhdGFPYmplY3QgPSBjbGlwYm9h
cmRDaHJvbWl1bSgpLT5kYXRhT2JqZWN0KCk7Ci0gICAgaWYgKCFkYXRhT2JqZWN0KQotICAgICAg
ICByZXR1cm47Cit2b2lkIEJ1ZmZlcmVkRGF0YVRyYW5zZmVySXRlbUxpc3Q6OmludGVybmFsQWRk
U2hhcmVkQnVmZmVyKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHRlbnNpb24s
IFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIpCit7CisgICAgbV9pdGVtcy5hcHBlbmQo
QnVmZmVyZWREYXRhVHJhbnNmZXJTaGFyZWRCdWZmZXJJdGVtOjpjcmVhdGUobmFtZSwgZXh0ZW5z
aW9uLCBidWZmZXIpKTsKK30KIAotICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwotICAgIGRhdGFP
YmplY3QtPmdldERhdGEodHlwZSwgc3VjY2Vzcyk7Ci0gICAgaWYgKHN1Y2Nlc3MpIHsKLSAgICAg
ICAgLy8gQWRkaW5nIGRhdGEgd2l0aCB0aGUgc2FtZSB0eXBlIHNob3VsZCBmYWlsIHdpdGggTk9U
X1NVUFBPUlRFRF9FUlIuCi0gICAgICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7Ci0gICAgICAg
IHJldHVybjsKK1Bhc3RlYm9hcmREYXRhVHJhbnNmZXJJdGVtTGlzdDo6UGFzdGVib2FyZERhdGFU
cmFuc2Zlckl0ZW1MaXN0KCkKKyAgICA6IG1fYnVmZmVyKGN1cnJlbnRQYXN0ZWJvYXJkQnVmZmVy
KCkpCisgICAgLCBtX3NlcXVlbmNlTnVtYmVyKFBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJvYXJkU2Vx
dWVuY2VOdW1iZXIobV9idWZmZXIpKQoreworICAgIGJvb2wgaWdub3JlZDsKKyAgICBIYXNoU2V0
PFN0cmluZz4gdHlwZXMgPSBQbGF0Zm9ybVN1cHBvcnQ6OmNsaXBib2FyZFJlYWRBdmFpbGFibGVU
eXBlcyhtX2J1ZmZlciwgJmlnbm9yZWQpOworICAgIGZvciAoSGFzaFNldDxTdHJpbmc+Ojpjb25z
dF9pdGVyYXRvciBpdCA9IHR5cGVzLmJlZ2luKCk7IGl0ICE9IHR5cGVzLmVuZCgpOyArK2l0KSB7
CisgICAgICAgIGlmICgqaXQgPT0gbWltZVR5cGVUZXh0SFRNTCkKKyAgICAgICAgICAgIG1faXRl
bXMuYXBwZW5kKFBhc3RlYm9hcmREYXRhVHJhbnNmZXJIVE1MSXRlbTo6Y3JlYXRlKG1fYnVmZmVy
LCBtX3NlcXVlbmNlTnVtYmVyKSk7CisgICAgICAgIGVsc2UgaWYgKCppdCA9PSBtaW1lVHlwZUlt
YWdlUG5nKQorICAgICAgICAgICAgbV9pdGVtcy5hcHBlbmQoUGFzdGVib2FyZERhdGFUcmFuc2Zl
ckltYWdlSXRlbTo6Y3JlYXRlKG1fYnVmZmVyLCBtX3NlcXVlbmNlTnVtYmVyKSk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIG1faXRlbXMuYXBwZW5kKFBhc3RlYm9hcmREYXRhVHJhbnNmZXJT
dHJpbmdJdGVtOjpjcmVhdGUobV9idWZmZXIsIG1fc2VxdWVuY2VOdW1iZXIsICppdCkpOwogICAg
IH0KK30KIAotICAgIG1faXRlbXMuY2xlYXIoKTsKLSAgICBkYXRhT2JqZWN0LT5zZXREYXRhKHR5
cGUsIGRhdGEpOworc2l6ZV90IFBhc3RlYm9hcmREYXRhVHJhbnNmZXJJdGVtTGlzdDo6bGVuZ3Ro
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gcGFzdGVib2FyZEhhc0NoYW5nZWQobV9idWZmZXIsIG1f
c2VxdWVuY2VOdW1iZXIpID8gMCA6IG1faXRlbXMuc2l6ZSgpOwogfQogCi12b2lkIERhdGFUcmFu
c2Zlckl0ZW1MaXN0Q2hyb21pdW06OmFkZChQYXNzUmVmUHRyPEZpbGU+IGZpbGUpCitQYXNzUmVm
UHRyPERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bT4gUGFzdGVib2FyZERhdGFUcmFuc2Zlckl0ZW1M
aXN0OjppdGVtKHVuc2lnbmVkIGxvbmcgaW5kZXgpCiB7Ci0gICAgaWYgKG1fb3duZXItPnBvbGlj
eSgpICE9IENsaXBib2FyZFdyaXRhYmxlIHx8ICFmaWxlKQotICAgICAgICByZXR1cm47CisgICAg
cmV0dXJuIChpbmRleCA+PSBsZW5ndGgoKSB8fCBwYXN0ZWJvYXJkSGFzQ2hhbmdlZChtX2J1ZmZl
ciwgbV9zZXF1ZW5jZU51bWJlcikpID8gMCA6IG1faXRlbXNbaW5kZXhdOworfQogCi0gICAgUmVm
UHRyPENocm9taXVtRGF0YU9iamVjdD4gZGF0YU9iamVjdCA9IGNsaXBib2FyZENocm9taXVtKCkt
PmRhdGFPYmplY3QoKTsKLSAgICBpZiAoIWRhdGFPYmplY3QpCi0gICAgICAgIHJldHVybjsKK3Zv
aWQgUGFzdGVib2FyZERhdGFUcmFuc2Zlckl0ZW1MaXN0OjpkZWxldGVJdGVtKHVuc2lnbmVkIGxv
bmcgaW5kZXgpCit7CisgICAgLy8gVGhpcyBpcyBhIHJlYWQtb25seSBjb2xsZWN0aW9uLCB3ZSBz
aG91bGQgbmV2ZXIgdHJ5IHRvIG11dGF0ZSBpdC4KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
K30KIAotICAgIG1faXRlbXMuY2xlYXIoKTsKK3ZvaWQgUGFzdGVib2FyZERhdGFUcmFuc2Zlckl0
ZW1MaXN0OjpjbGVhcigpCit7CisgICAgLy8gVGhpcyBpcyBhIHJlYWQtb25seSBjb2xsZWN0aW9u
LCB3ZSBzaG91bGQgbmV2ZXIgdHJ5IHRvIG11dGF0ZSBpdC4KKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKK30KIAotICAgIC8vIFVwZGF0aW5nIGRhdGFPYmplY3QncyBmaWxlc2V0IHNvIHRoYXQg
d2Ugd2lsbCBiZSBzZWVpbmcgdGhlIGNvbnNpc3RlbnQgbGlzdCBldmVuIGlmIHdlIHJlY29uc3Ry
dWN0IHRoZSBpdGVtcyBsYXRlci4KLSAgICBkYXRhT2JqZWN0LT5hZGRGaWxlbmFtZShmaWxlLT5w
YXRoKCkpOwordm9pZCBQYXN0ZWJvYXJkRGF0YVRyYW5zZmVySXRlbUxpc3Q6OmFkZChjb25zdCBT
dHJpbmcmIGRhdGEsIGNvbnN0IFN0cmluZyYgdHlwZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7Cisg
ICAgLy8gVGhpcyBpcyBhIHJlYWQtb25seSBjb2xsZWN0aW9uLCB3ZSBzaG91bGQgbmV2ZXIgdHJ5
IHRvIG11dGF0ZSBpdC4KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KIAotICAgIC8vIEZJ
WE1FOiBBbGxvdyBtdWx0aXBsZSBmaWxlcyB0byBiZSBkcmFnZ2VkIG91dCBhdCBvbmNlIGlmIG1v
cmUgdGhhbiBvbmUgZmlsZSBpcyBhZGRlZCB0byB0aGUgc3RvcmFnZS4gRm9yIG5vdyB3ZSBtYW51
YWxseSBzZXQgdXAgZHJhZy1vdXQgZG93bmxvYWQgVVJMIG9ubHkgaWYgaXQgaGFzIG5vdCBiZWVu
IHNldCB5ZXQuCi0gICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0gICAgZGF0YU9iamVjdC0+Z2V0
RGF0YShtaW1lVHlwZURvd25sb2FkVVJMLCBzdWNjZXNzKTsKLSAgICBpZiAoc3VjY2VzcykKLSAg
ICAgICAgcmV0dXJuOwordm9pZCBQYXN0ZWJvYXJkRGF0YVRyYW5zZmVySXRlbUxpc3Q6OmludGVy
bmFsQWRkU3RyaW5nKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKQorewor
ICAgIC8vIFRoaXMgaXMgYSByZWFkLW9ubHkgY29sbGVjdGlvbiwgd2Ugc2hvdWxkIG5ldmVyIHRy
eSB0byBtdXRhdGUgaXQuCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CiAKLSAgICBLVVJM
IHVybEZvckRvd25sb2FkID0gQmxvYlVSTDo6Y3JlYXRlUHVibGljVVJMKG1fY29udGV4dC0+c2Vj
dXJpdHlPcmlnaW4oKSk7Ci0gICAgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6cmVnaXN0ZXJCbG9i
VVJMKHVybEZvckRvd25sb2FkLCBmaWxlLT51cmwoKSk7Cit2b2lkIFBhc3RlYm9hcmREYXRhVHJh
bnNmZXJJdGVtTGlzdDo6aW50ZXJuYWxBZGRVUkwoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0
cmluZyYgdGl0bGUpCit7CisgICAgLy8gVGhpcyBpcyBhIHJlYWQtb25seSBjb2xsZWN0aW9uLCB3
ZSBzaG91bGQgbmV2ZXIgdHJ5IHRvIG11dGF0ZSBpdC4KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKK30KKwordm9pZCBQYXN0ZWJvYXJkRGF0YVRyYW5zZmVySXRlbUxpc3Q6OmludGVybmFsQWRk
SFRNTChjb25zdCBTdHJpbmcmIG1hcmt1cCwgY29uc3QgS1VSTCYgYmFzZVVSTCkKK3sKKyAgICAv
LyBUaGlzIGlzIGEgcmVhZC1vbmx5IGNvbGxlY3Rpb24sIHdlIHNob3VsZCBuZXZlciB0cnkgdG8g
bXV0YXRlIGl0LgorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIFBhc3RlYm9h
cmREYXRhVHJhbnNmZXJJdGVtTGlzdDo6aW50ZXJuYWxBZGRGaWxlbmFtZShjb25zdCBTdHJpbmcm
KQoreworICAgIC8vIFRoaXMgaXMgYSByZWFkLW9ubHkgY29sbGVjdGlvbiwgd2Ugc2hvdWxkIG5l
dmVyIHRyeSB0byBtdXRhdGUgaXQuCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CiAKLSAg
ICBTdHJpbmdCdWlsZGVyIGRvd25sb2FkVXJsOwotICAgIGRvd25sb2FkVXJsLmFwcGVuZChmaWxl
LT50eXBlKCkpOwotICAgIGRvd25sb2FkVXJsLmFwcGVuZCgiOiIpOwotICAgIGRvd25sb2FkVXJs
LmFwcGVuZChlbmNvZGVXaXRoVVJMRXNjYXBlU2VxdWVuY2VzKGZpbGUtPm5hbWUoKSkpOwotICAg
IGRvd25sb2FkVXJsLmFwcGVuZCgiOiIpOwotICAgIGRvd25sb2FkVXJsLmFwcGVuZCh1cmxGb3JE
b3dubG9hZC5zdHJpbmcoKSk7Ci0gICAgZGF0YU9iamVjdC0+c2V0RGF0YShtaW1lVHlwZURvd25s
b2FkVVJMLCBkb3dubG9hZFVybC50b1N0cmluZygpKTsKK3ZvaWQgUGFzdGVib2FyZERhdGFUcmFu
c2Zlckl0ZW1MaXN0OjppbnRlcm5hbEFkZFNoYXJlZEJ1ZmZlcihjb25zdCBTdHJpbmcmLCBjb25z
dCBTdHJpbmcmLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4pCit7CisgICAgLy8gVGhpcyBpcyBh
IHJlYWQtb25seSBjb2xsZWN0aW9uLCB3ZSBzaG91bGQgbmV2ZXIgdHJ5IHRvIG11dGF0ZSBpdC4K
KyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UKKworUGFzc1Jl
ZlB0cjxEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtPiBEYXRhVHJhbnNmZXJJdGVtTGlzdENo
cm9taXVtOjpjcmVhdGUoKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQnVmZmVyZWREYXRh
VHJhbnNmZXJJdGVtTGlzdCgpKTsKK30KKworUGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtTGlz
dENocm9taXVtPiBEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtOjpjcmVhdGVGcm9tUGFzdGVi
b2FyZCgpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQYXN0ZWJvYXJkRGF0YVRyYW5zZmVy
SXRlbUxpc3QoKSk7CiB9CiAKLUNsaXBib2FyZENocm9taXVtKiBEYXRhVHJhbnNmZXJJdGVtTGlz
dENocm9taXVtOjpjbGlwYm9hcmRDaHJvbWl1bSgpIGNvbnN0CitEYXRhVHJhbnNmZXJJdGVtTGlz
dENocm9taXVtOjp+RGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bSgpCiB7Ci0gICAgcmV0dXJu
IHN0YXRpY19jYXN0PENsaXBib2FyZENocm9taXVtKj4obV9vd25lci5nZXQoKSk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2Nocm9taXVtL0RhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2Nocm9taXVtL0RhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0uaAppbmRleCA5
MmNkMGJkZGYwNTg1ODRlNGQ0MmQ0OTE2Y2U3ZTg2YmYxYzAzYjkxLi5jZWQ1MzNkYjQ1ZmZhYmNj
NDIxMmRhNzMzMjMxYmFmNjE5ODA3ZjRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9EYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bS5o
CkBAIC0zMywzOSArMzMsMzYgQEAKIAogI2lmIEVOQUJMRShEQVRBX1RSQU5TRkVSX0lURU1TKQog
Ci0jaW5jbHVkZSAiRGF0YVRyYW5zZmVySXRlbUxpc3QuaCIKKyNpbmNsdWRlICJEYXRhVHJhbnNm
ZXJJdGVtQ2hyb21pdW0uaCIKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotY2xhc3MgQ2xpcGJvYXJkOwotY2xhc3MgQ2xpcGJvYXJkQ2hyb21pdW07Ci1jbGFz
cyBGaWxlOwotY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKLQorY2xhc3MgS1VSTDsKK2Ns
YXNzIFNoYXJlZEJ1ZmZlcjsKIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CiAKLWNsYXNzIERh
dGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0gOiBwdWJsaWMgRGF0YVRyYW5zZmVySXRlbUxpc3Qg
eworY2xhc3MgRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bSA6IHB1YmxpYyBSZWZDb3VudGVk
PERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFz
c1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtPiBjcmVhdGUoUGFzc1JlZlB0cjxD
bGlwYm9hcmQ+LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8RGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bT4gY3JlYXRlKCk7CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bT4gY3JlYXRlRnJvbVBhc3RlYm9h
cmQoKTsKIAotICAgIHZpcnR1YWwgc2l6ZV90IGxlbmd0aCgpOwotICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxEYXRhVHJhbnNmZXJJdGVtPiBpdGVtKHVuc2lnbmVkIGxvbmcgaW5kZXgpOwotICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgVjhEYXRhVHJhbnNmZXJJdGVtTGlzdDo6aW5kZXhlZFByb3BlcnR5
RGVsZXRlciB0byBnZXQgdGhpcyBjYWxsZWQuCi0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZUl0ZW0o
dW5zaWduZWQgbG9uZyBpbmRleCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1YWwgdm9pZCBj
bGVhcigpOwotICAgIHZpcnR1YWwgdm9pZCBhZGQoY29uc3QgU3RyaW5nJiBkYXRhLCBjb25zdCBT
dHJpbmcmIHR5cGUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRkKFBhc3NS
ZWZQdHI8RmlsZT4pOworICAgIHZpcnR1YWwgfkRhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0o
KTsKIAorICAgIHZpcnR1YWwgc2l6ZV90IGxlbmd0aCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUNocm9taXVtPiBpdGVtKHVuc2lnbmVkIGxvbmcg
aW5kZXgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSXRlbSh1bnNpZ25lZCBsb25nIGlu
ZGV4KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyKCkgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBhZGQoY29uc3QgU3RyaW5nJiBkYXRhLCBjb25zdCBTdHJpbmcmIHR5cGUsIEV4Y2VwdGlvbkNv
ZGUmKSA9IDA7CiBwcml2YXRlOgotICAgIERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0oUGFz
c1JlZlB0cjxDbGlwYm9hcmQ+LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7Ci0gICAgQ2xpcGJv
YXJkQ2hyb21pdW0qIGNsaXBib2FyZENocm9taXVtKCkgY29uc3Q7CisgICAgZnJpZW5kIGNsYXNz
IENocm9taXVtRGF0YU9iamVjdDsKIAotICAgIFJlZlB0cjxDbGlwYm9hcmQ+IG1fb3duZXI7Ci0g
ICAgLy8gSW5kaXJlY3RseSBvd25lZCBieSBvdXIgcGFyZW50LgotICAgIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIG1fY29udGV4dDsKLSAgICBWZWN0b3I8UmVmUHRyPERhdGFUcmFuc2Zlckl0ZW0+
ID4gbV9pdGVtczsKKyAgICB2aXJ0dWFsIHZvaWQgaW50ZXJuYWxBZGRTdHJpbmcoY29uc3QgU3Ry
aW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgaW50
ZXJuYWxBZGRVUkwoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgdGl0bGUpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgaW50ZXJuYWxBZGRIVE1MKGNvbnN0IFN0cmluZyYgbWFya3VwLCBj
b25zdCBLVVJMJiBiYXNlVVJMKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGludGVybmFsQWRkRmls
ZW5hbWUoY29uc3QgU3RyaW5nJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBpbnRlcm5hbEFkZFNo
YXJlZEJ1ZmZlcihjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9uLCBQ
YXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4pID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RyYWdEYXRh
Q2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRHJhZ0RhdGFD
aHJvbWl1bS5jcHAKaW5kZXggOWMzODM4NjAyNTFjNzQ3MDA5MmY5NjUzN2E2MTc3OTI4ODhiZGJi
Yi4uNjY1MTM1OTI1N2NiZjRhYTZkYzcwZDFiYjA0Y2EzYWViN2VhNTYxNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRHJhZ0RhdGFDaHJvbWl1bS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRHJhZ0RhdGFDaHJvbWl1bS5jcHAK
QEAgLTU3LDEyICs1Nyw4IEBAIGJvb2wgRHJhZ0RhdGE6OmNvbnRhaW5zVVJMKEZyYW1lKiwgRmls
ZW5hbWVDb252ZXJzaW9uUG9saWN5IGZpbGVuYW1lUG9saWN5KSBjb25zCiBTdHJpbmcgRHJhZ0Rh
dGE6OmFzVVJMKEZyYW1lKiwgRmlsZW5hbWVDb252ZXJzaW9uUG9saWN5IGZpbGVuYW1lUG9saWN5
LCBTdHJpbmcqIHRpdGxlKSBjb25zdAogewogICAgIFN0cmluZyB1cmw7Ci0gICAgaWYgKG1fcGxh
dGZvcm1EcmFnRGF0YS0+dHlwZXMoKS5jb250YWlucyhtaW1lVHlwZVVSTCkpIHsKLSAgICAgICAg
Ym9vbCBpZ25vcmVkU3VjY2VzczsKLSAgICAgICAgdXJsID0gbV9wbGF0Zm9ybURyYWdEYXRhLT5n
ZXREYXRhKG1pbWVUeXBlVVJMLCBpZ25vcmVkU3VjY2Vzcyk7Ci0gICAgICAgIGlmICh0aXRsZSkK
LSAgICAgICAgICAgICp0aXRsZSA9IG1fcGxhdGZvcm1EcmFnRGF0YS0+dXJsVGl0bGUoKTsKLSAg
ICB9IGVsc2UgaWYgKGZpbGVuYW1lUG9saWN5ID09IENvbnZlcnRGaWxlbmFtZXMgJiYgY29udGFp
bnNGaWxlcygpKSB7CisgICAgbV9wbGF0Zm9ybURyYWdEYXRhLT5nZXRVUkwodXJsLCB0aXRsZSk7
CisgICAgaWYgKHVybC5pc0VtcHR5KCkgJiYgZmlsZW5hbWVQb2xpY3kgPT0gQ29udmVydEZpbGVu
YW1lcyAmJiBjb250YWluc0ZpbGVzKCkpIHsKICAgICAgICAgdXJsID0gUGxhdGZvcm1TdXBwb3J0
OjpmaWxlUGF0aFRvVVJMKFBsYXRmb3JtU3VwcG9ydDo6Z2V0QWJzb2x1dGVQYXRoKG1fcGxhdGZv
cm1EcmFnRGF0YS0+ZmlsZW5hbWVzKClbMF0pKTsKICAgICB9CiAgICAgcmV0dXJuIHVybDsKQEAg
LTE0MSwxMCArMTM3LDExIEBAIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gRHJhZ0RhdGE6
OmFzRnJhZ21lbnQoRnJhbWUqIGZyYW1lLCBQYXNzUmVmUHRyPFJhbmdlCiAgICAgICAgIC8vICAg
IHJldHVybiBmcmFnbWVudDsKICAgICB9CiAKLSAgICBpZiAobV9wbGF0Zm9ybURyYWdEYXRhLT50
eXBlcygpLmNvbnRhaW5zKG1pbWVUeXBlVGV4dEhUTUwpKSB7Ci0gICAgICAgIGJvb2wgaWdub3Jl
ZFN1Y2Nlc3M7Ci0gICAgICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGNy
ZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChmcmFtZS0+ZG9jdW1lbnQoKSwKLSAgICAgICAgICAgIG1f
cGxhdGZvcm1EcmFnRGF0YS0+Z2V0RGF0YShtaW1lVHlwZVRleHRIVE1MLCBpZ25vcmVkU3VjY2Vz
cyksIG1fcGxhdGZvcm1EcmFnRGF0YS0+aHRtbEJhc2VVcmwoKSwgRnJhZ21lbnRTY3JpcHRpbmdO
b3RBbGxvd2VkKTsKKyAgICBTdHJpbmcgbWFya3VwOworICAgIEtVUkwgYmFzZVVSTDsKKyAgICBt
X3BsYXRmb3JtRHJhZ0RhdGEtPmdldEhUTUwobWFya3VwLCBiYXNlVVJMKTsKKyAgICBpZiAoIW1h
cmt1cC5pc0VtcHR5KCkpIHsKKyAgICAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdt
ZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKGZyYW1lLT5kb2N1bWVudCgpLCBtYXJrdXAs
IGJhc2VVUkwsIEZyYWdtZW50U2NyaXB0aW5nTm90QWxsb3dlZCk7CiAgICAgICAgIHJldHVybiBm
cmFnbWVudC5yZWxlYXNlKCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9xdC9EYXRhVHJhbnNmZXJJdGVtTGlzdFF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3F0L0RhdGFUcmFuc2Zlckl0ZW1MaXN0UXQuY3BwCmluZGV4IDA2ODE5ODI4MzQ5NDI3
NWVjM2ExOWExYjNhNGVhZTM3NGY2ZjQ5MmMuLjE4MDZhN2Y2ZjVjYzQwZDVhNDU5NTIyOWQ3NmVi
ZWE2ZmU3M2VjNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0RhdGFU
cmFuc2Zlckl0ZW1MaXN0UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0Rh
dGFUcmFuc2Zlckl0ZW1MaXN0UXQuY3BwCkBAIC00NSw3ICs0NSw3IEBAIERhdGFUcmFuc2Zlckl0
ZW1MaXN0UXQ6OkRhdGFUcmFuc2Zlckl0ZW1MaXN0UXQoUGFzc1JlZlB0cjxDbGlwYm9hcmQ+IG93
bmVyLCBTY3JpCiB7CiB9CiAKLXNpemVfdCBEYXRhVHJhbnNmZXJJdGVtTGlzdFF0OjpsZW5ndGgo
KQorc2l6ZV90IERhdGFUcmFuc2Zlckl0ZW1MaXN0UXQ6Omxlbmd0aCgpIGNvbnN0CiB7CiAgICAg
aWYgKG1fb3duZXItPnBvbGljeSgpID09IENsaXBib2FyZE51bWIpCiAgICAgICAgIHJldHVybiAw
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvRGF0YVRyYW5zZmVySXRl
bUxpc3RRdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvRGF0YVRyYW5zZmVySXRlbUxp
c3RRdC5oCmluZGV4IGM4YThkYmM5MjVmMzMzMzI0YmM1NzVhZjZhZTg0ZGZhMjllZjk0YTEuLmQ1
YzM5YTRhNTg0NGQ3NTM0M2E3YzIzMWZhNWNiODJiYWEzNTNjMDMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0RhdGFUcmFuc2Zlckl0ZW1MaXN0UXQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9EYXRhVHJhbnNmZXJJdGVtTGlzdFF0LmgKQEAgLTQyLDcg
KzQyLDcgQEAgY2xhc3MgRGF0YVRyYW5zZmVySXRlbUxpc3RRdCA6IHB1YmxpYyBEYXRhVHJhbnNm
ZXJJdGVtTGlzdCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YVRyYW5zZmVy
SXRlbUxpc3RRdD4gY3JlYXRlKFBhc3NSZWZQdHI8Q2xpcGJvYXJkPiwgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCopOwogCi0gICAgdmlydHVhbCBzaXplX3QgbGVuZ3RoKCk7CisgICAgdmlydHVhbCBz
aXplX3QgbGVuZ3RoKCkgY29uc3Q7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPERhdGFUcmFuc2Zl
ckl0ZW0+IGl0ZW0odW5zaWduZWQgbG9uZyBpbmRleCk7CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0
ZUl0ZW0odW5zaWduZWQgbG9uZyBpbmRleCwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwg
dm9pZCBjbGVhcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
cGxhdGZvcm0vV2ViRHJhZ0RhdGEuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3Bs
YXRmb3JtL1dlYkRyYWdEYXRhLmgKaW5kZXggMTcxMjMxZWNhMzRiYTQ3NzdkNmFiZWE0MjM2M2M0
ZGM5NmQzOTY2Ny4uNzQ2OTk3Y2VkYTI4YjM5OTg0MzllNDU3YjJjYzdjNmZlNzNmOWJiYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViRHJhZ0Rh
dGEuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJEcmFn
RGF0YS5oCkBAIC0zMiw2ICszMiw3IEBACiAjZGVmaW5lIFdlYkRyYWdEYXRhX2gKIAogI2luY2x1
ZGUgIldlYkNvbW1vbi5oIgorI2luY2x1ZGUgIldlYkRhdGEuaCIKICNpbmNsdWRlICJXZWJTdHJp
bmcuaCIKIAogI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgpAQCAtNDEsNyArNDIsNiBAQCBuYW1l
c3BhY2UgV1RGIHsgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFBhc3NSZWZQdHI7IH0KIAog
bmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIFdlYkRhdGE7CiBjbGFzcyBXZWJEcmFnRGF0YVBy
aXZhdGU7CiBjbGFzcyBXZWJVUkw7CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgV2ViVmVj
dG9yOwpAQCAtNjYsNiArNjYsMjMgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc051bGwoKSBjb25z
dCB7IHJldHVybiAhbV9wcml2YXRlOyB9CiAKKyAgICBzdHJ1Y3QgRHJhZ0RhdGFJdGVtIHsKKyAg
ICAgICAgZW51bSBLaW5kIHsKKyAgICAgICAgICAgIFNUUklORywKKyAgICAgICAgICAgIEZJTEVO
QU1FLAorICAgICAgICAgICAgU0hBUkVEX0JVRkZFUiwKKyAgICAgICAgfTsKKyAgICAgICAgS2lu
ZCBraW5kOworICAgICAgICBXZWJTdHJpbmcgdHlwZTsKKyAgICAgICAgV2ViU3RyaW5nIHN0cmlu
Z0RhdGE7CisgICAgICAgIFdlYlN0cmluZyBtZXRhZGF0YTsKKyAgICAgICAgV2ViRGF0YSBiaW5h
cnlEYXRhOworICAgIH07CisKKyAgICBXRUJLSVRfRVhQT1JUIFdlYlZlY3RvcjxEcmFnRGF0YUl0
ZW0+IGl0ZW1zKCkgY29uc3Q7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldEl0ZW1zKGNvbnN0
IFdlYlZlY3RvcjxEcmFnRGF0YUl0ZW0+Jik7CisKKyAgICAvLyBMZWdhY3kgaW50ZXJmYWNlLiBU
byBiZSByZW1vdmVkIG9uY2UgQ2hyb21pdW0gbm8gbG9uZ2VyIGNhbGxzIHRoZW0uCiAgICAgV0VC
S0lUX0VYUE9SVCBXZWJTdHJpbmcgdXJsKCkgY29uc3Q7CiAgICAgV0VCS0lUX0VYUE9SVCB2b2lk
IHNldFVSTChjb25zdCBXZWJVUkwmKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViRHJhZ0RhdGEuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
RHJhZ0RhdGEuY3BwCmluZGV4IDVjMzEyMzkxOGFmNjNmZTgxNTQzMzBmZGZmMjUyYWU3MWNjMWU5
NGEuLmMwYzIwYzU0Y2Q1OGU0ZTM0YWQ1ZWM2ZTUxZTIzMzY3MGVkMjcxNWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRyYWdEYXRhLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEcmFnRGF0YS5jcHAKQEAgLTMzLDYgKzMzLDkgQEAKIAog
I2luY2x1ZGUgIkNocm9taXVtRGF0YU9iamVjdC5oIgogI2luY2x1ZGUgIkNsaXBib2FyZE1pbWVU
eXBlcy5oIgorI2luY2x1ZGUgIkRhdGFUcmFuc2Zlckl0ZW0uaCIKKyNpbmNsdWRlICJEYXRhVHJh
bnNmZXJJdGVtQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9t
aXVtLmgiCiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViRGF0YS5oIgogI2luY2x1ZGUgInBsYXRmb3Jt
L1dlYlN0cmluZy5oIgogI2luY2x1ZGUgInBsYXRmb3JtL1dlYlVSTC5oIgpAQCAtNjYsNiArNjks
NTMgQEAgdm9pZCBXZWJEcmFnRGF0YTo6YXNzaWduKGNvbnN0IFdlYkRyYWdEYXRhJiBvdGhlcikK
ICAgICBhc3NpZ24ocCk7CiB9CiAKK1dlYlZlY3RvcjxXZWJEcmFnRGF0YTo6RHJhZ0RhdGFJdGVt
PiBXZWJEcmFnRGF0YTo6aXRlbXMoKSBjb25zdAoreworICAgIFJlZlB0cjxEYXRhVHJhbnNmZXJJ
dGVtTGlzdENocm9taXVtPiBsaXN0ID0gbV9wcml2YXRlLT5pdGVtcygpOworICAgIFdlYlZlY3Rv
cjxEcmFnRGF0YUl0ZW0+IGRhdGEobGlzdC0+bGVuZ3RoKCkpOworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgZGF0YS5zaXplKCk7ICsraSkgeworICAgICAgICBSZWZQdHI8RGF0YVRyYW5zZmVy
SXRlbUNocm9taXVtPiBpdGVtID0gbGlzdC0+aXRlbShpKTsKKyAgICAgICAgRHJhZ0RhdGFJdGVt
JiBkcmFnSXRlbSA9IGRhdGFbaV07CisKKyAgICAgICAgaWYgKGl0ZW0tPmtpbmQoKSA9PSBEYXRh
VHJhbnNmZXJJdGVtOjpraW5kU3RyaW5nKSB7CisgICAgICAgICAgICBkcmFnSXRlbS5raW5kID0g
RHJhZ0RhdGFJdGVtOjpTVFJJTkc7CisgICAgICAgICAgICBkcmFnSXRlbS50eXBlID0gaXRlbS0+
dHlwZSgpOworICAgICAgICAgICAgZHJhZ0l0ZW0uc3RyaW5nRGF0YSA9IGl0ZW0tPmxlZ2FjeUdl
dEFzU3RyaW5nKCk7CisgICAgICAgICAgICBpZiAoaXRlbS0+dHlwZSgpID09IG1pbWVUeXBlVGV4
dFVSSUxpc3QpCisgICAgICAgICAgICAgICAgZHJhZ0l0ZW0ubWV0YWRhdGEgPSBzdGF0aWNfY2Fz
dDxEYXRhVHJhbnNmZXJVUklMaXN0SXRlbSo+KGl0ZW0uZ2V0KCkpLT50aXRsZSgpOworICAgICAg
ICAgICAgZWxzZSBpZiAoaXRlbS0+dHlwZSgpID09IG1pbWVUeXBlVGV4dEhUTUwpCisgICAgICAg
ICAgICAgICAgZHJhZ0l0ZW0ubWV0YWRhdGEgPSBzdGF0aWNfY2FzdDxEYXRhVHJhbnNmZXJIVE1M
SXRlbSo+KGl0ZW0uZ2V0KCkpLT5iYXNlVVJMKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBEYXRhVHJhbnNmZXJGaWxlSXRlbSogZmlsZUl0ZW0gPSBzdGF0aWNfY2FzdDxEYXRhVHJh
bnNmZXJGaWxlSXRlbSo+KGl0ZW0uZ2V0KCkpOworICAgICAgICAgICAgaWYgKGZpbGVJdGVtLT5z
dG9yYWdlVHlwZSgpID09IERhdGFUcmFuc2ZlckZpbGVJdGVtOjpTaGFyZWRCdWZmZXJUeXBlKSB7
CisgICAgICAgICAgICAgICAgQnVmZmVyZWREYXRhVHJhbnNmZXJTaGFyZWRCdWZmZXJJdGVtKiBi
dWZmZXJJdGVtID0gc3RhdGljX2Nhc3Q8QnVmZmVyZWREYXRhVHJhbnNmZXJTaGFyZWRCdWZmZXJJ
dGVtKj4oZmlsZUl0ZW0pOworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIGFuIGFi
dXNlIG9mIHRoZXNlIGZpZWxkcy4KKyAgICAgICAgICAgICAgICBkcmFnSXRlbS5zdHJpbmdEYXRh
ID0gYnVmZmVySXRlbS0+bmFtZSgpOworICAgICAgICAgICAgICAgIGRyYWdJdGVtLm1ldGFkYXRh
ID0gYnVmZmVySXRlbS0+ZXh0ZW5zaW9uKCk7CisgICAgICAgICAgICAgICAgZHJhZ0l0ZW0uYmlu
YXJ5RGF0YSA9IGJ1ZmZlckl0ZW0tPmJ1ZmZlcigpOworICAgICAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICAgICAgY29udGludWU7IC8vIE90aGVyIHR5cGVzIGFyZW4ndCB5ZXQgc3VwcG9ydGVk
IGZvciBkcmFnIG91dC4KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZGF0YTsKK30KKwor
dm9pZCBXZWJEcmFnRGF0YTo6c2V0SXRlbXMoY29uc3QgV2ViVmVjdG9yPERyYWdEYXRhSXRlbT4m
IGl0ZW1zKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgaWYgKGl0ZW1zW2ldLmtpbmQgPT0gRHJhZ0RhdGFJdGVtOjpTVFJJTkcpIHsK
KyAgICAgICAgICAgIC8vIEZJWE1FOiBJcyB0aGVyZSBhIGNsZWFuZXIgd2F5IHRvIGRvIHRoaXM/
CisgICAgICAgICAgICBpZiAoaXRlbXNbaV0udHlwZSA9PSBXZWJTdHJpbmcoU3RyaW5nKG1pbWVU
eXBlVGV4dFVSSUxpc3QpKSkKKyAgICAgICAgICAgICAgICBtX3ByaXZhdGUtPnNldFVSTChpdGVt
c1tpXS5zdHJpbmdEYXRhLCBpdGVtc1tpXS5tZXRhZGF0YSk7CisgICAgICAgICAgICBlbHNlIGlm
IChpdGVtc1tpXS50eXBlID09IFdlYlN0cmluZyhTdHJpbmcobWltZVR5cGVUZXh0SFRNTCkpKQor
ICAgICAgICAgICAgICAgIG1fcHJpdmF0ZS0+c2V0SFRNTChpdGVtc1tpXS5zdHJpbmdEYXRhLCBL
VVJMKEtVUkwoKSwgaXRlbXNbaV0ubWV0YWRhdGEpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBtX3ByaXZhdGUtPnNldERhdGEoaXRlbXNbaV0udHlwZSwgaXRlbXNbaV0uc3Ry
aW5nRGF0YSk7CisgICAgICAgIH0gZWxzZSBpZiAoaXRlbXNbaV0ua2luZCA9PSBEcmFnRGF0YUl0
ZW06OkZJTEVOQU1FKQorICAgICAgICAgICAgbV9wcml2YXRlLT5hZGRGaWxlbmFtZShpdGVtc1tp
XS5zdHJpbmdEYXRhKTsKKyAgICB9Cit9CisKIFdlYlN0cmluZyBXZWJEcmFnRGF0YTo6dXJsKCkg
Y29uc3QKIHsKICAgICBBU1NFUlQoIWlzTnVsbCgpKTsKQEAgLTExMyw3ICsxNjMsNyBAQCBXZWJT
dHJpbmcgV2ViRHJhZ0RhdGE6OmZpbGVFeHRlbnNpb24oKSBjb25zdAogdm9pZCBXZWJEcmFnRGF0
YTo6c2V0RmlsZUV4dGVuc2lvbihjb25zdCBXZWJTdHJpbmcmIGZpbGVFeHRlbnNpb24pCiB7CiAg
ICAgZW5zdXJlTXV0YWJsZSgpOwotICAgIG1fcHJpdmF0ZS0+c2V0RmlsZUV4dGVuc2lvbihmaWxl
RXh0ZW5zaW9uKTsKKyAgICAvLyBSZW1haW5zIGZvciBjb21wYXRpYmlsaXR5LiBDaHJvbWl1bSBu
ZXZlciBzZXRzIHRoZXNlIGZpZWxkcyB0byBhIG5vbi1lbXB0eSB2YWx1ZS4KIH0KIAogYm9vbCBX
ZWJEcmFnRGF0YTo6Y29udGFpbnNGaWxlbmFtZXMoKSBjb25zdApAQCAtMTMxLDYgKzE4MSw4IEBA
IHZvaWQgV2ViRHJhZ0RhdGE6OmZpbGVuYW1lcyhXZWJWZWN0b3I8V2ViU3RyaW5nPiYgZmlsZW5h
bWVzKSBjb25zdAogdm9pZCBXZWJEcmFnRGF0YTo6c2V0RmlsZW5hbWVzKGNvbnN0IFdlYlZlY3Rv
cjxXZWJTdHJpbmc+JiBmaWxlbmFtZXMpCiB7CiAgICAgZW5zdXJlTXV0YWJsZSgpOworICAgIC8v
IEZJWE1FOiBUaGlzIGlzbid0IHJlYWxseSBhICJzZXQiIHNvIG11Y2ggYXMgYW4gImFkZCIuIFNp
bmNlIHRoaXMgbWV0aG9kIGlzIGdvaW5nIGF3YXksIGpzdXQKKyAgICAvLyBsZWF2aW5nIGl0IGFz
IGl0IGlzLi4uCiAgICAgVmVjdG9yPFN0cmluZz4gZmlsZW5hbWVzQ29weTsKICAgICBmaWxlbmFt
ZXNDb3B5LmFwcGVuZChmaWxlbmFtZXMuZGF0YSgpLCBmaWxlbmFtZXMuc2l6ZSgpKTsKICAgICBt
X3ByaXZhdGUtPnNldEZpbGVuYW1lcyhmaWxlbmFtZXNDb3B5KTsKQEAgLTEzOSw5ICsxOTEsNyBA
QCB2b2lkIFdlYkRyYWdEYXRhOjpzZXRGaWxlbmFtZXMoY29uc3QgV2ViVmVjdG9yPFdlYlN0cmlu
Zz4mIGZpbGVuYW1lcykKIHZvaWQgV2ViRHJhZ0RhdGE6OmFwcGVuZFRvRmlsZW5hbWVzKGNvbnN0
IFdlYlN0cmluZyYgZmlsZW5hbWUpCiB7CiAgICAgZW5zdXJlTXV0YWJsZSgpOwotICAgIFZlY3Rv
cjxTdHJpbmc+IGZpbGVuYW1lcyA9IG1fcHJpdmF0ZS0+ZmlsZW5hbWVzKCk7Ci0gICAgZmlsZW5h
bWVzLmFwcGVuZChmaWxlbmFtZSk7Ci0gICAgbV9wcml2YXRlLT5zZXRGaWxlbmFtZXMoZmlsZW5h
bWVzKTsKKyAgICBtX3ByaXZhdGUtPmFkZEZpbGVuYW1lKGZpbGVuYW1lKTsKIH0KIAogV2ViU3Ry
aW5nIFdlYkRyYWdEYXRhOjpwbGFpblRleHQoKSBjb25zdApAQCAtMTkxLDcgKzI0MSw3IEBAIFdl
YlN0cmluZyBXZWJEcmFnRGF0YTo6ZmlsZUNvbnRlbnRGaWxlbmFtZSgpIGNvbnN0CiB2b2lkIFdl
YkRyYWdEYXRhOjpzZXRGaWxlQ29udGVudEZpbGVuYW1lKGNvbnN0IFdlYlN0cmluZyYgZmlsZW5h
bWUpCiB7CiAgICAgZW5zdXJlTXV0YWJsZSgpOwotICAgIG1fcHJpdmF0ZS0+c2V0RmlsZUNvbnRl
bnRGaWxlbmFtZShmaWxlbmFtZSk7CisgICAgLy8gUmVtYWlucyBmb3IgY29tcGF0aWJpbGl0eS4g
Q2hyb21pdW0gbmV2ZXIgc2V0cyB0aGVzZSBmaWVsZHMgdG8gYSBub24tZW1wdHkgdmFsdWUuCiB9
CiAKIFdlYkRhdGEgV2ViRHJhZ0RhdGE6OmZpbGVDb250ZW50KCkgY29uc3QKQEAgLTIwMywxNyAr
MjUzLDE2IEBAIFdlYkRhdGEgV2ViRHJhZ0RhdGE6OmZpbGVDb250ZW50KCkgY29uc3QKIHZvaWQg
V2ViRHJhZ0RhdGE6OnNldEZpbGVDb250ZW50KGNvbnN0IFdlYkRhdGEmIGZpbGVDb250ZW50KQog
ewogICAgIGVuc3VyZU11dGFibGUoKTsKLSAgICBtX3ByaXZhdGUtPnNldEZpbGVDb250ZW50KGZp
bGVDb250ZW50KTsKKyAgICAvLyBSZW1haW5zIGZvciBjb21wYXRpYmlsaXR5LiBDaHJvbWl1bSBu
ZXZlciBzZXRzIHRoZXNlIGZpZWxkcyB0byBhIG5vbi1lbXB0eSB2YWx1ZS4KIH0KIAogV2ViVmVj
dG9yPFdlYkRyYWdEYXRhOjpDdXN0b21EYXRhPiBXZWJEcmFnRGF0YTo6Y3VzdG9tRGF0YSgpIGNv
bnN0CiB7CiAgICAgQVNTRVJUKCFpc051bGwoKSk7CiAgICAgV2ViVmVjdG9yPEN1c3RvbURhdGE+
IGN1c3RvbURhdGEoc3RhdGljX2Nhc3Q8c2l6ZV90PihtX3ByaXZhdGUtPmN1c3RvbURhdGEoKS5z
aXplKCkpKTsKLSAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgYmVn
aW4gPSBtX3ByaXZhdGUtPmN1c3RvbURhdGEoKS5iZWdpbigpOwotICAgIEhhc2hNYXA8U3RyaW5n
LCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3ByaXZhdGUtPmN1c3RvbURhdGEoKS5l
bmQoKTsKKyAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBkYXRhID0gbV9wcml2YXRlLT5jdXN0
b21EYXRhKCk7CiAgICAgc2l6ZV90IGkgPSAwOwotICAgIGZvciAoSGFzaE1hcDxTdHJpbmcsIFN0
cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYmVnaW47IGl0ICE9IGVuZDsgKytpdCkgeworICAg
IGZvciAoSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZGF0YS5i
ZWdpbigpOyBpdCAhPSBkYXRhLmVuZCgpOyArK2l0KSB7CiAgICAgICAgIEN1c3RvbURhdGEgZGF0
YSA9IHtpdC0+Zmlyc3QsIGl0LT5zZWNvbmR9OwogICAgICAgICBjdXN0b21EYXRhW2krK10gPSBk
YXRhOwogICAgIH0KQEAgLTIyMyw5ICsyNzIsMTAgQEAgV2ViVmVjdG9yPFdlYkRyYWdEYXRhOjpD
dXN0b21EYXRhPiBXZWJEcmFnRGF0YTo6Y3VzdG9tRGF0YSgpIGNvbnN0CiB2b2lkIFdlYkRyYWdE
YXRhOjpzZXRDdXN0b21EYXRhKGNvbnN0IFdlYlZlY3RvcjxXZWJEcmFnRGF0YTo6Q3VzdG9tRGF0
YT4mIGN1c3RvbURhdGEpCiB7CiAgICAgZW5zdXJlTXV0YWJsZSgpOwotICAgIEhhc2hNYXA8U3Ry
aW5nLCBTdHJpbmc+JiBjdXN0b21EYXRhTWFwID0gbV9wcml2YXRlLT5jdXN0b21EYXRhKCk7Cisg
ICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gY3VzdG9tRGF0YU1hcDsKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGN1c3RvbURhdGEuc2l6ZSgpOyArK2kpCiAgICAgICAgIGN1c3RvbURhdGFN
YXAuc2V0KGN1c3RvbURhdGFbaV0udHlwZSwgY3VzdG9tRGF0YVtpXS5kYXRhKTsKKyAgICBtX3By
aXZhdGUtPnNldEN1c3RvbURhdGEoY3VzdG9tRGF0YU1hcCk7CiB9CiAKIFdlYkRyYWdEYXRhOjpX
ZWJEcmFnRGF0YShjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6Q2hyb21pdW1EYXRhT2Jq
ZWN0PiYgZGF0YSkKQEAgLTI0Niw3ICsyOTYsNiBAQCBXZWJEcmFnRGF0YTo6b3BlcmF0b3IgV1RG
OjpQYXNzUmVmUHRyPFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdD4oKSBjb25zdAogCiB2b2lk
IFdlYkRyYWdEYXRhOjphc3NpZ24oV2ViRHJhZ0RhdGFQcml2YXRlKiBwKQogewotICAgIEFTU0VS
VCghcCB8fCBwLT5zdG9yYWdlTW9kZSgpID09IENocm9taXVtRGF0YU9iamVjdDo6QnVmZmVyZWQp
OwogICAgIC8vIHAgaXMgYWxyZWFkeSByZWYnZCBmb3IgdXMgYnkgdGhlIGNhbGxlcgogICAgIGlm
IChtX3ByaXZhdGUpCiAgICAgICAgIG1fcHJpdmF0ZS0+ZGVyZWYoKTsKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA0MTVhNDFl
ZWJkYWIzZmIzNzZiODI1ZThhNjY1MzU1Yzc5MGIyZDRjLi5hZmRiMmY0MjE3NWI1MzNkNDQyN2E1
OWQ1ZDYyMTBkZTM3MWE5MjY0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysr
IGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTItMDEtMjMgIERh
bmllbCBDaGVuZyAgPGRjaGVuZ0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmVmYWN0b3IgQ2hy
b21pdW1EYXRhT2JqZWN0IGFuZCBEYXRhVHJhbnNmZXJJdGVtTGlzdC9EYXRhVHJhbnNmZXJJdGVt
IHRvIHJlbW92ZSBkdXBsaWNhdGlvbi4KKworICAgICAgICBbY2hyb21pdW1dIFJlZmFjdG9yIENs
aXBib2FyZENocm9taXVtIGFuZCBEYXRhVHJhbnNmZXJJdGVtTGlzdC9EYXRhVHJhbnNmZXJJdGVt
IHRvIHN1cHBvcnQgSFRNTCBzcGVjCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD03NjU5OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogZWRpdGluZy9wYXN0ZWJvYXJkL2RhdGFUcmFuc2Zlci1zZXREYXRhLWdl
dERhdGEtZXhwZWN0ZWQudHh0OiBVcGRhdGUgZXhwZWN0ZWQgcmVzdWx0IHNpbmNlCisgICAgICAg
ICAgICB3ZSBpbXBsZW1lbnQgdGhpcyBjb3JyZWN0bHkgbm93LgorCiAyMDEyLTAxLTIzICBNaWtl
IExhd3RoZXIgIDxtaWtlbGF3dGhlckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgZ2V0Q29tcHV0
ZWRTdHlsZSBtYXJnaW4gcGVyY2VudGFnZSB0ZXN0IGZvciBDU1MgY2FsYwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkL2RhdGFUcmFuc2Zlci1zZXREYXRhLWdldERh
dGEtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkL2RhdGFUcmFu
c2Zlci1zZXREYXRhLWdldERhdGEtZXhwZWN0ZWQudHh0CmluZGV4IDE2NzIxNjY4ZjU1YTFiOTAz
ZTQzODlhOGZlYjRjOGNkYTNiZDgyOGEuLjZkN2YxNzIxOGRmNzcyZjI3YzE4MzIyZDhjODQzYmMx
YWY4OGY4NzEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9kYXRh
VHJhbnNmZXItc2V0RGF0YS1nZXREYXRhLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9l
ZGl0aW5nL3Bhc3RlYm9hcmQvZGF0YVRyYW5zZmVyLXNldERhdGEtZ2V0RGF0YS1leHBlY3RlZC50
eHQKQEAgLTMxLDggKzMxLDggQEAgUEFTUyBnZXREYXRhUmVzdWx0IGlzICIjIGNvbW1lbnRcclxu
aHR0cDovL3Rlc3QuY29tXHJcbmh0dHA6Ly9jaGVjay5jb20iCiBQQVNTIGdldERhdGFSZXN1bHRU
eXBlIGlzICJzdHJpbmciCiBQQVNTIGdldERhdGFSZXN1bHQgaXMgImh0dHA6Ly90ZXN0LmNvbS8i
CiAtLS0gVGVzdCBzZXQgJ3RleHQvdXJpLWxpc3QnLCBnZXQgJ1VSTCcgd2l0aCBvbmx5IGNvbW1l
bnRzOgotRkFJTCBnZXREYXRhUmVzdWx0VHlwZSBzaG91bGQgYmUgc3RyaW5nLiBXYXMgdW5kZWZp
bmVkLgotRkFJTCBnZXREYXRhUmVzdWx0IHNob3VsZCBiZSAgKG9mIHR5cGUgc3RyaW5nKS4gV2Fz
IHVuZGVmaW5lZCAob2YgdHlwZSB1bmRlZmluZWQpLgorUEFTUyBnZXREYXRhUmVzdWx0VHlwZSBp
cyAic3RyaW5nIgorUEFTUyBnZXREYXRhUmVzdWx0IGlzICIiCiAtLS0gVGVzdCBzZXQvZ2V0ICd0
ZXh0L3BsYWluJzoKIFBBU1MgZ2V0RGF0YVJlc3VsdFR5cGUgaXMgInN0cmluZyIKIFBBU1MgZ2V0
RGF0YVJlc3VsdCBpcyAiTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123763</attachid>
            <date>2012-01-24 10:28:03 -0800</date>
            <delta_ts>2012-01-24 16:28:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76598-20120124102802.patch</filename>
            <type>text/plain</type>
            <size>110051</size>
            <attacher name="Daniel Cheng">dcheng</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1NjYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWQzYzVkZDRlNTBkYjkx
NjRiYTExOTEyYTUxMjc0NDRmNWFhMGUyNC4uMGQyOTA0NjZmZWRmMzkyOThjZjY5NWE1MjU2MTM5
ZWVmMzBmYzllNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1NyBAQAorMjAxMi0wMS0yMyAgRGFu
aWVsIENoZW5nICA8ZGNoZW5nQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIFJl
ZmFjdG9yIENsaXBib2FyZENocm9taXVtIGFuZCBEYXRhVHJhbnNmZXJJdGVtTGlzdC9EYXRhVHJh
bnNmZXJJdGVtIHRvIHN1cHBvcnQgSFRNTCBzcGVjCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NjU5OAorCisgICAgICAgIFRoaXMgY2hhbmdlIHJlZmFj
dG9ycyBDaHJvbWl1bURhdGFPYmplY3QsIENsaXBib2FyZENocm9taXVtLCBEYXRhVHJhbnNmZXJJ
dGVtQ2hyb21pdW0sIGFuZAorICAgICAgICBEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtLiBJ
bnRlcm5hbGx5LCB3ZSByZXByZXNlbnQgYWxsIGRhdGEgZm9yIGEgRGF0YVRyYW5zZmVyIGFzIGEg
bGlzdAorICAgICAgICBvZiAoa2luZCwgdHlwZSwgdmFsdWUpIHR1cGxlcy4gU2luY2UgdGhpcyBt
aXJyb3JzIHRoZSBkcmFnIGRhdGEgbGlzdCB0aGF0IHRoZSBIVE1MIHNwZWMgdXNlcworICAgICAg
ICB3aGVuIGRlZmluaW5nIHZhcmlvdXMgZHJhZyBldmVudHMsIGl0IGxldHMgdXMgaW1wbGVtZW50
IHRoZSBzcGVjIGluIGEgbmF0dXJhbCBtYW5uZXIuIEl0CisgICAgICAgIGFsc28gcmVtb3ZlcyB0
aGUgbmVlZCBmb3IgYSAnZGlydHknIGJpdCBpbiBDbGlwYm9hcmRDaHJvbWl1bSwgc2luY2Ugd2Ug
bm8gbG9uZ2VyIG1haW50YWluCisgICAgICAgIHR3byBzZXBhcmF0ZSByZXByZXNlbnRhdGlvbnMg
b2YgdGhlIHNhbWUgZGF0YS0tdGhleSdyZSBiYXNlZCBvbiB0aGUgc2FtZSB0aGluZyBub3cuCisK
KyAgICAgICAgV2UgYWxzbyBhZGQgYSBsYXllciBvZiBhYnN0cmFjdGlvbiB0byB0aGUgZGF0YSBs
aXN0IHR1cGxlcy0taW5zdGVhZCBvZiB1c2luZyBhIGxvdCBvZiBuZXN0ZWQKKyAgICAgICAgaWYn
cyB0byBkZXRlcm1pbmUgaG93IHRvIGhhbmRsZSB2YXJpb3VzIGNvbWJpbmF0aW9ucyBvZiAoY2xp
cGJvYXJkLCBkcmFnKSArIE1JTUUgdHlwZXMsIHdlCisgICAgICAgIHVzZSBhIHNpbXBsZSB2aXJ0
dWFsIGludGVyZmFjZSB0aGF0IGNsb3NlbHkgbWlycm9ycyB0aGUgRGF0YVRyYW5zZmVySXRlbSBk
ZWZpbml0aW9uLiBUaGlzCisgICAgICAgIHJlbW92ZXMgYSBsb3Qgb2YgdGhlIGNvbXBsZXhpdHkg
dGhhdCB1c2VkIHRvIGJlIGZvdW5kIGluIGdldERhdGEoKS9zZXREYXRhKCksIGV0Yy4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4
aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogZG9tL0RhdGFUcmFuc2Zlckl0ZW1MaXN0Lmg6Cisg
ICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6aXRlbXMpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpjbGVhckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2hy
b21pdW1EYXRhT2JqZWN0OjpjbGVhckFsbCk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURh
dGFPYmplY3Q6OmNsZWFyQWxsRXhjZXB0RmlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21p
dW1EYXRhT2JqZWN0Ojp0eXBlcyk6IFJlaW1wbGVtZW50ZWQgdG8gb3BlcmF0ZSBvbiB0aGUgZGF0
YSBsaXN0LgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpnZXREYXRhKTog
UmVpbXBsZW1lbnRlZCB0byBvcGVyYXRlIG9uIHRoZSBkYXRhIGxpc3QuCisgICAgICAgIChXZWJD
b3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OnNldERhdGEpOiBSZWltcGxlbWVudGVkIHRvIG9wZXJh
dGUgb24gdGhlIGRhdGEgbGlzdC4KKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVj
dDo6Z2V0VVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6c2V0VVJM
KToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6Z2V0SFRNTCk6CisgICAg
ICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OnNldEhUTUwpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0Ojp1cmxUaXRsZSk6IERlcHJlY2F0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OnNldFVybFRpdGxlKTogRGVwcmVjYXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6aHRtbEJhc2VVcmwpOiBEZXBy
ZWNhdGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpzZXRIdG1sQmFz
ZVVybCk6IERlcHJlY2F0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6
OmN1c3RvbURhdGEpOiBEZXByZWNhdGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRh
T2JqZWN0OjpzZXRDdXN0b21EYXRhKTogRGVwcmVjYXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNo
cm9taXVtRGF0YU9iamVjdDo6Y29udGFpbnNGaWxlbmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6
Q2hyb21pdW1EYXRhT2JqZWN0OjpmaWxlbmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21p
dW1EYXRhT2JqZWN0OjphZGRGaWxlbmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURh
dGFPYmplY3Q6OnNldEZpbGVuYW1lcyk6IERlcHJlY2F0ZWQuCisgICAgICAgIChXZWJDb3JlOjpD
aHJvbWl1bURhdGFPYmplY3Q6OmFkZFNoYXJlZEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpm
aW5kU2hhcmVkQnVmZmVySXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmpl
Y3Q6OmZpbGVFeHRlbnNpb24pOiBEZXByZWNhdGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21p
dW1EYXRhT2JqZWN0OjpmaWxlQ29udGVudEZpbGVuYW1lKTogRGVwcmVjYXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6ZmlsZUNvbnRlbnQpOiBEZXByZWNhdGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpDaHJvbWl1bURhdGFPYmplY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpmaW5kSXRlbSk6CisgICAg
ICAgICogcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0Lmg6CisgICAgICAgIChX
ZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OmNyZWF0ZUZyb21QYXN0ZWJvYXJkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpu
b3JtYWxpemVUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENocm9taXVtOjpDbGlw
Ym9hcmRDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRDaHJvbWl1bTo6Y2xl
YXJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENocm9taXVtOjpjbGVhckFsbERh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkQ2hyb21pdW06OmdldERhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkQ2hyb21pdW06OnNldERhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2xpcGJvYXJkQ2hyb21pdW06OnR5cGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBi
b2FyZENocm9taXVtOjpmaWxlcyk6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZUltYWdlVG9EYXRh
T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENocm9taXVtOjpkZWNsYXJlQW5k
V3JpdGVEcmFnSW1hZ2UpOiBGaXggc28gdGhhdCB2YWxpZGF0ZUZpbGVOYW1lIGlzbid0CisgICAg
ICAgICAgICBhbHdheXMgY2FsbGVkIG9uIGFuIGVtcHR5IGV4dGVuc2lvbi4KKyAgICAgICAgKFdl
YkNvcmU6OkNsaXBib2FyZENocm9taXVtOjp3cml0ZVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpD
bGlwYm9hcmRDaHJvbWl1bTo6d3JpdGVSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9h
cmRDaHJvbWl1bTo6d3JpdGVQbGFpblRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJk
Q2hyb21pdW06Omhhc0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkQ2hyb21pdW06
Oml0ZW1zKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5o
OgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkQ2hyb21pdW06OmZyYW1lKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bUxpbnV4LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNsaXBib2FyZENocm9taXVtOjp2YWxpZGF0ZUZpbGVuYW1lKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bU1hYy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDbGlwYm9hcmRDaHJvbWl1bTo6dmFsaWRhdGVGaWxlbmFtZSk6CisgICAgICAgICog
cGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW1XaW4uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q2xpcGJvYXJkQ2hyb21pdW06OnZhbGlkYXRlRmlsZW5hbWUpOgorICAgICAgICAqIHBs
YXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZFV0aWxpdGllc0Nocm9taXVtLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OnBhc3RlYm9hcmRIYXNDaGFuZ2VkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJv
bWl1bS9DbGlwYm9hcmRVdGlsaXRpZXNDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2No
cm9taXVtL0RhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpE
YXRhVHJhbnNmZXJJdGVtQ2hyb21pdW06On5EYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0pOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0YVRyYW5zZmVySXRlbUNocm9taXVtOjpnZXRBc1N0cmluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW06OmdldEFzRmlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW06OmxlZ2FjeUdldEFzU3Ry
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFUcmFuc2ZlclVSSUxpc3RJdGVtOjpraW5kKToK
KyAgICAgICAgKFdlYkNvcmU6OkRhdGFUcmFuc2ZlclVSSUxpc3RJdGVtOjp0eXBlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGFUcmFuc2ZlckhUTUxJdGVtOjpraW5kKToKKyAgICAgICAgKFdlYkNv
cmU6OkRhdGFUcmFuc2ZlckhUTUxJdGVtOjp0eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkJ1ZmZl
cmVkRGF0YVRyYW5zZmVyU3RyaW5nSXRlbTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkJ1
ZmZlcmVkRGF0YVRyYW5zZmVyU3RyaW5nSXRlbTo6a2luZCk6CisgICAgICAgIChXZWJDb3JlOjpC
dWZmZXJlZERhdGFUcmFuc2ZlclN0cmluZ0l0ZW06OnR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6
QnVmZmVyZWREYXRhVHJhbnNmZXJTdHJpbmdJdGVtOjpnZXRBc1N0cmluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpCdWZmZXJlZERhdGFUcmFuc2ZlclN0cmluZ0l0ZW06OmxlZ2FjeUdldEFzU3RyaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OkJ1ZmZlcmVkRGF0YVRyYW5zZmVyU3RyaW5nSXRlbTo6QnVm
ZmVyZWREYXRhVHJhbnNmZXJTdHJpbmdJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkJ1ZmZlcmVk
RGF0YVRyYW5zZmVyVVJJTGlzdEl0ZW06OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpCdWZm
ZXJlZERhdGFUcmFuc2ZlclVSSUxpc3RJdGVtOjpnZXRBc1N0cmluZyk6CisgICAgICAgIChXZWJD
b3JlOjpCdWZmZXJlZERhdGFUcmFuc2ZlclVSSUxpc3RJdGVtOjpsZWdhY3lHZXRBc1N0cmluZyk6
CisgICAgICAgIChXZWJDb3JlOjpCdWZmZXJlZERhdGFUcmFuc2ZlclVSSUxpc3RJdGVtOjp0aXRs
ZSk6CisgICAgICAgIChXZWJDb3JlOjpCdWZmZXJlZERhdGFUcmFuc2ZlclVSSUxpc3RJdGVtOjpz
ZXRUaXRsZSk6CisgICAgICAgIChXZWJDb3JlOjpCdWZmZXJlZERhdGFUcmFuc2ZlclVSSUxpc3RJ
dGVtOjpCdWZmZXJlZERhdGFUcmFuc2ZlclVSSUxpc3RJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6
OkJ1ZmZlcmVkRGF0YVRyYW5zZmVySFRNTEl0ZW06OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpCdWZmZXJlZERhdGFUcmFuc2ZlckhUTUxJdGVtOjpnZXRBc1N0cmluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpCdWZmZXJlZERhdGFUcmFuc2ZlckhUTUxJdGVtOjpsZWdhY3lHZXRBc1N0cmluZyk6
CisgICAgICAgIChXZWJDb3JlOjpCdWZmZXJlZERhdGFUcmFuc2ZlckhUTUxJdGVtOjpiYXNlVVJM
KToKKyAgICAgICAgKFdlYkNvcmU6OkJ1ZmZlcmVkRGF0YVRyYW5zZmVySFRNTEl0ZW06OnNldEJh
c2VVUkwpOgorICAgICAgICAoV2ViQ29yZTo6QnVmZmVyZWREYXRhVHJhbnNmZXJIVE1MSXRlbTo6
QnVmZmVyZWREYXRhVHJhbnNmZXJIVE1MSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhVHJh
bnNmZXJGaWxlSXRlbTo6a2luZCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhVHJhbnNmZXJGaWxl
SXRlbTo6dHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpCdWZmZXJlZERhdGFUcmFuc2ZlckZpbGVu
YW1lSXRlbTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkJ1ZmZlcmVkRGF0YVRyYW5zZmVy
RmlsZW5hbWVJdGVtOjpnZXRBc0ZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6QnVmZmVyZWREYXRh
VHJhbnNmZXJGaWxlbmFtZUl0ZW06OnN0b3JhZ2VUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkJ1
ZmZlcmVkRGF0YVRyYW5zZmVyRmlsZW5hbWVJdGVtOjpCdWZmZXJlZERhdGFUcmFuc2ZlckZpbGVu
YW1lSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpCdWZmZXJlZERhdGFUcmFuc2ZlclNoYXJlZEJ1
ZmZlckl0ZW06OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpCdWZmZXJlZERhdGFUcmFuc2Zl
clNoYXJlZEJ1ZmZlckl0ZW06OmdldEFzRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpCdWZmZXJl
ZERhdGFUcmFuc2ZlclNoYXJlZEJ1ZmZlckl0ZW06OnN0b3JhZ2VUeXBlKToKKyAgICAgICAgKFdl
YkNvcmU6OkJ1ZmZlcmVkRGF0YVRyYW5zZmVyU2hhcmVkQnVmZmVySXRlbTo6QnVmZmVyZWREYXRh
VHJhbnNmZXJTaGFyZWRCdWZmZXJJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmRE
YXRhVHJhbnNmZXJTdHJpbmdJdGVtOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVi
b2FyZERhdGFUcmFuc2ZlclN0cmluZ0l0ZW06OmtpbmQpOgorICAgICAgICAoV2ViQ29yZTo6UGFz
dGVib2FyZERhdGFUcmFuc2ZlclN0cmluZ0l0ZW06OnR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6
UGFzdGVib2FyZERhdGFUcmFuc2ZlclN0cmluZ0l0ZW06OmdldEFzU3RyaW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OlBhc3RlYm9hcmREYXRhVHJhbnNmZXJTdHJpbmdJdGVtOjpsZWdhY3lHZXRBc1N0
cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkRGF0YVRyYW5zZmVyU3RyaW5nSXRl
bTo6UGFzdGVib2FyZERhdGFUcmFuc2ZlclN0cmluZ0l0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6
UGFzdGVib2FyZERhdGFUcmFuc2ZlckhUTUxJdGVtOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6UGFzdGVib2FyZERhdGFUcmFuc2ZlckhUTUxJdGVtOjpnZXRBc1N0cmluZyk6CisgICAgICAg
IChXZWJDb3JlOjpQYXN0ZWJvYXJkRGF0YVRyYW5zZmVySFRNTEl0ZW06OmxlZ2FjeUdldEFzU3Ry
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmREYXRhVHJhbnNmZXJIVE1MSXRlbTo6
YmFzZVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkRGF0YVRyYW5zZmVySFRNTEl0
ZW06OnNldEJhc2VVUkwpOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZERhdGFUcmFuc2Zl
ckhUTUxJdGVtOjpQYXN0ZWJvYXJkRGF0YVRyYW5zZmVySFRNTEl0ZW0pOgorICAgICAgICAoV2Vi
Q29yZTo6UGFzdGVib2FyZERhdGFUcmFuc2ZlckltYWdlSXRlbTo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlBhc3RlYm9hcmREYXRhVHJhbnNmZXJJbWFnZUl0ZW06OmtpbmQpOgorICAgICAg
ICAoV2ViQ29yZTo6UGFzdGVib2FyZERhdGFUcmFuc2ZlckltYWdlSXRlbTo6dHlwZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkRGF0YVRyYW5zZmVySW1hZ2VJdGVtOjpnZXRBc0ZpbGUp
OgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZERhdGFUcmFuc2ZlckltYWdlSXRlbTo6UGFz
dGVib2FyZERhdGFUcmFuc2ZlckltYWdlSXRlbSk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21p
dW0vRGF0YVRyYW5zZmVySXRlbUNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlOjpCdWZmZXJl
ZERhdGFUcmFuc2ZlckZpbGVuYW1lSXRlbTo6ZmlsZW5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6
QnVmZmVyZWREYXRhVHJhbnNmZXJTaGFyZWRCdWZmZXJJdGVtOjpuYW1lKToKKyAgICAgICAgKFdl
YkNvcmU6OkJ1ZmZlcmVkRGF0YVRyYW5zZmVyU2hhcmVkQnVmZmVySXRlbTo6ZXh0ZW5zaW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkJ1ZmZlcmVkRGF0YVRyYW5zZmVyU2hhcmVkQnVmZmVySXRlbTo6
YnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9EYXRhVHJhbnNmZXJJdGVtTGlz
dENocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hy
b21pdW06OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhVHJhbnNmZXJJdGVtTGlzdENo
cm9taXVtOjpjcmVhdGVGcm9tUGFzdGVib2FyZCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhVHJh
bnNmZXJJdGVtTGlzdENocm9taXVtOjp+RGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bSk6Cisg
ICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bS5o
OgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0RyYWdEYXRhQ2hyb21pdW0uY3BwOiBVcGRh
dGUgdG8gdXNlIHRoZSBuZXcgYWNjZXNzb3JzIHdoaWNoIHJldHJpZXZlCisgICAgICAgICAgICB0
aGUgYXNzb2NpYXRlZCBkYXRhICsgbWV0YWRhdGEgaW4gb25lIGNhbGwuCisgICAgICAgIChXZWJD
b3JlOjpEcmFnRGF0YTo6YXNVUkwpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmFzRnJh
Z21lbnQpOgorICAgICAgICAqIHBsYXRmb3JtL3F0L0RhdGFUcmFuc2Zlckl0ZW1MaXN0UXQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RGF0YVRyYW5zZmVySXRlbUxpc3RRdDo6bGVuZ3RoKTogTWFr
ZSBjb25zdC4KKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9EYXRhVHJhbnNmZXJJdGVtTGlzdFF0Lmg6
CisKIDIwMTItMDEtMjMgIERhdmlkIExldmluICA8bGV2aW5AY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFt3aW5kb3dzXSBDb252ZXJ0IHVzYWdlcyBvZiBHZXREQyB0byBIV25kREMgUGFydCAxLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAzNjM4NDVkOGIzMDM3OTE4ZThiMmE3ZDZiNDJk
Njk3YjdmYzA1YzYxLi44NjY0NTI4NWNkMzgzNDBmNDZiNjVkZTYzODNkM2Q3OTg5ZDNhMmI0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDEyLTAxLTIzICBE
YW5pZWwgQ2hlbmcgIDxkY2hlbmdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
UmVmYWN0b3IgQ2xpcGJvYXJkQ2hyb21pdW0gYW5kIERhdGFUcmFuc2Zlckl0ZW1MaXN0L0RhdGFU
cmFuc2Zlckl0ZW0gdG8gc3VwcG9ydCBIVE1MIHNwZWMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2NTk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwdWJsaWMvcGxhdGZvcm0vV2ViRHJhZ0RhdGEuaDoK
KyAgICAgICAgKiBzcmMvV2ViRHJhZ0RhdGEuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFn
RGF0YTo6aXRlbXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFnRGF0YTo6c2V0SXRlbXMpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJEcmFnRGF0YTo6dXJsKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
RHJhZ0RhdGE6OnNldFVSTCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRyYWdEYXRhOjpzZXRGaWxl
RXh0ZW5zaW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0RhdGE6OnNldEZpbGVuYW1lcyk6
CisgICAgICAgIChXZWJLaXQ6OldlYkRyYWdEYXRhOjphcHBlbmRUb0ZpbGVuYW1lcyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkRyYWdEYXRhOjpzZXRGaWxlQ29udGVudEZpbGVuYW1lKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViRHJhZ0RhdGE6OnNldEZpbGVDb250ZW50KToKKyAgICAgICAgKFdlYktp
dDo6V2ViRHJhZ0RhdGE6OmN1c3RvbURhdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFnRGF0
YTo6c2V0Q3VzdG9tRGF0YSk6CisgICAgICAgIChXZWJLaXQ6OldlYkRyYWdEYXRhOjphc3NpZ24p
OgorCiAyMDEyLTAxLTIzICBKYW1lcyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgW2Nocm9taXVtXSBBZGQgPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvd2Via2l0
IHRvIGluY2x1ZGUgcGF0aCBvZiB0YXJnZXRzIHRoYXQgZGVwZW5kIG9uIFdlYktpdCBBUEkgc28g
dGhleSBwaWNrIHVwIHRoZSBjb3BpZWQgaGVhZGVycyBpbiBhbiBvbmlvbiBidWlsZApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RhdGFUcmFuc2Zlckl0ZW1MaXN0LmggYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRGF0YVRyYW5zZmVySXRlbUxpc3QuaAppbmRleCBiODdhMTgzYWQ1NWM0YjY1
NzIzYTlkNWZlNGQzYzBiYjA0YzM0NTFlLi41OGRiMDYzNzBhZmQ1Y2NiMDI0MTM1ODgzYmFiNzQ0
MTVkZmI5ZGI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRGF0YVRyYW5zZmVySXRl
bUxpc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRGF0YVRyYW5zZmVySXRlbUxpc3QuaApA
QCAtNDgsNyArNDgsNyBAQCBjbGFzcyBEYXRhVHJhbnNmZXJJdGVtTGlzdCA6IHB1YmxpYyBSZWZD
b3VudGVkPERhdGFUcmFuc2Zlckl0ZW1MaXN0PiB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+RGF0
YVRyYW5zZmVySXRlbUxpc3QoKSB7IH0KIAotICAgIHZpcnR1YWwgc2l6ZV90IGxlbmd0aCgpID0g
MDsKKyAgICB2aXJ0dWFsIHNpemVfdCBsZW5ndGgoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBQ
YXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW0+IGl0ZW0odW5zaWduZWQgbG9uZyBpbmRleCkgPSAw
OwogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVJdGVtKHVuc2lnbmVkIGxvbmcgaW5kZXgsIEV4Y2Vw
dGlvbkNvZGUmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGNsZWFyKCkgPSAwOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5j
cHAKaW5kZXggY2M0MmZhODViNTE3ODkxN2E4MTViNTViMTdiYjgyNWM1NjAzNTc1ZC4uMjQ5NzQ1
MWQ0NjhhOTEzODJkNTBhZTIzNTllYjFkMzhhYTMwYTlkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuY3BwCkBAIC0z
Myw3ICszMyw4IEBACiAKICNpbmNsdWRlICJDbGlwYm9hcmRNaW1lVHlwZXMuaCIKICNpbmNsdWRl
ICJDbGlwYm9hcmRVdGlsaXRpZXNDaHJvbWl1bS5oIgotI2luY2x1ZGUgIkRhdGFUcmFuc2Zlckl0
ZW1MaXN0Q2hyb21pdW0uaCIKKyNpbmNsdWRlICJEYXRhVHJhbnNmZXJJdGVtLmgiCisjaW5jbHVk
ZSAiRXhjZXB0aW9uQ29kZVBsYWNlaG9sZGVyLmgiCiAjaW5jbHVkZSAiUGFzdGVib2FyZC5oIgog
I2luY2x1ZGUgIlBsYXRmb3JtU3VwcG9ydC5oIgogCkBAIC00MiwyMzkgKzQzLDI0OSBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAvLyBQZXIgUkZDIDI0ODMsIHRoZSBsaW5lIHNlcGFyYXRvciBmb3Ig
InRleHQvLi4uIiBNSU1FIHR5cGVzIGlzIENSLUxGLgogc3RhdGljIGNoYXIgY29uc3QqIGNvbnN0
IHRleHRNSU1FVHlwZUxpbmVTZXBhcmF0b3IgPSAiXHJcbiI7CiAKLXZvaWQgQ2hyb21pdW1EYXRh
T2JqZWN0OjpjbGVhckRhdGEoY29uc3QgU3RyaW5nJiB0eXBlKQorUGFzc1JlZlB0cjxEYXRhVHJh
bnNmZXJJdGVtTGlzdENocm9taXVtPiBDaHJvbWl1bURhdGFPYmplY3Q6Oml0ZW1zKCkgY29uc3QK
IHsKLSAgICBpZiAodHlwZSA9PSBtaW1lVHlwZVRleHRQbGFpbikgewotICAgICAgICBtX3BsYWlu
VGV4dCA9ICIiOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHR5cGUgPT0gbWlt
ZVR5cGVVUkwgfHwgdHlwZSA9PSBtaW1lVHlwZVRleHRVUklMaXN0KSB7Ci0gICAgICAgIG1fdXJp
TGlzdCA9ICIiOwotICAgICAgICBtX3VybCA9IEtVUkwoKTsKLSAgICAgICAgbV91cmxUaXRsZSA9
ICIiOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHR5cGUgPT0gbWltZVR5cGVU
ZXh0SFRNTCkgewotICAgICAgICBtX3RleHRIdG1sID0gIiI7Ci0gICAgICAgIG1faHRtbEJhc2VV
cmwgPSBLVVJMKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgcmV0dXJuIG1faXRlbXM7
Cit9CiAKLSAgICBpZiAodHlwZSA9PSBtaW1lVHlwZURvd25sb2FkVVJMKSB7Ci0gICAgICAgIG1f
ZG93bmxvYWRNZXRhZGF0YSA9ICIiOwotICAgICAgICByZXR1cm47Cit2b2lkIENocm9taXVtRGF0
YU9iamVjdDo6Y2xlYXJEYXRhKGNvbnN0IFN0cmluZyYgdHlwZSkKK3sKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1faXRlbXMtPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1faXRl
bXMtPml0ZW0oaSktPmtpbmQoKSA9PSBEYXRhVHJhbnNmZXJJdGVtOjpraW5kU3RyaW5nICYmIG1f
aXRlbXMtPml0ZW0oaSktPnR5cGUoKSA9PSB0eXBlKSB7CisgICAgICAgICAgICAvLyBBY2NvcmRp
bmcgdG8gdGhlIHNwZWMsIHR5cGUgbXVzdCBiZSB1bmlxdWUgYW1vbmcgYWxsIGl0ZW1zIG9mIGtp
bmQgJ3N0cmluZycsIHNvIHdlCisgICAgICAgICAgICAvLyBjYW4gcmV0dXJuIGFzIHNvb24gYXMg
d2UgZmluZCBhbiBpdGVtIHRoYXQgbWF0Y2hlcy4KKyAgICAgICAgICAgIG1faXRlbXMtPmRlbGV0
ZUl0ZW0oaSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICB9CiB9CiAKIHZv
aWQgQ2hyb21pdW1EYXRhT2JqZWN0OjpjbGVhckFsbCgpCiB7Ci0gICAgY2xlYXJBbGxFeGNlcHRG
aWxlcygpOwotICAgIG1fZmlsZW5hbWVzLmNsZWFyKCk7CisgICAgbV9pdGVtcy0+Y2xlYXIoKTsK
IH0KIAogdm9pZCBDaHJvbWl1bURhdGFPYmplY3Q6OmNsZWFyQWxsRXhjZXB0RmlsZXMoKQogewot
ICAgIG1fdXJsVGl0bGUgPSAiIjsKLSAgICBtX3VybCA9IEtVUkwoKTsKLSAgICBtX3VyaUxpc3Qg
PSAiIjsKLSAgICBtX2Rvd25sb2FkTWV0YWRhdGEgPSAiIjsKLSAgICBtX2ZpbGVFeHRlbnNpb24g
PSAiIjsKLSAgICBtX3BsYWluVGV4dCA9ICIiOwotICAgIG1fdGV4dEh0bWwgPSAiIjsKLSAgICBt
X2h0bWxCYXNlVXJsID0gS1VSTCgpOwotICAgIG1fZmlsZUNvbnRlbnRGaWxlbmFtZSA9ICIiOwot
ICAgIGlmIChtX2ZpbGVDb250ZW50KQotICAgICAgICBtX2ZpbGVDb250ZW50LT5jbGVhcigpOwot
fQotCi1ib29sIENocm9taXVtRGF0YU9iamVjdDo6aGFzRGF0YSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuICFtX3VybC5pc0VtcHR5KCkKLSAgICAgICAgfHwgIW1fdXJpTGlzdC5pc0VtcHR5KCkKLSAg
ICAgICAgfHwgIW1fZG93bmxvYWRNZXRhZGF0YS5pc0VtcHR5KCkKLSAgICAgICAgfHwgIW1fZmls
ZUV4dGVuc2lvbi5pc0VtcHR5KCkKLSAgICAgICAgfHwgIW1fZmlsZW5hbWVzLmlzRW1wdHkoKQot
ICAgICAgICB8fCAhbV9wbGFpblRleHQuaXNFbXB0eSgpCi0gICAgICAgIHx8ICFtX3RleHRIdG1s
LmlzRW1wdHkoKQotICAgICAgICB8fCBtX2ZpbGVDb250ZW50OworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV9pdGVtcy0+bGVuZ3RoKCk7ICkgeworICAgICAgICBpZiAobV9pdGVtcy0+aXRl
bShpKS0+a2luZCgpID09IERhdGFUcmFuc2Zlckl0ZW06OmtpbmRTdHJpbmcpIHsKKyAgICAgICAg
ICAgIG1faXRlbXMtPmRlbGV0ZUl0ZW0oaSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgfQorICAgICAgICArK2k7CisgICAgfQogfQogCiBIYXNoU2V0PFN0cmluZz4gQ2hyb21pdW1E
YXRhT2JqZWN0Ojp0eXBlcygpIGNvbnN0CiB7Ci0gICAgaWYgKG1fc3RvcmFnZU1vZGUgPT0gUGFz
dGVib2FyZCkgewotICAgICAgICBib29sIGlnbm9yZWRDb250YWluc0ZpbGVuYW1lczsKLSAgICAg
ICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJvYXJkUmVhZEF2YWlsYWJsZVR5cGVzKGN1
cnJlbnRQYXN0ZWJvYXJkQnVmZmVyKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaWdub3JlZENvbnRhaW5zRmlsZW5hbWVzKTsK
KyAgICBIYXNoU2V0PFN0cmluZz4gcmVzdWx0czsKKyAgICBib29sIGNvbnRhaW5zRmlsZXMgPSBm
YWxzZTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1faXRlbXMtPmxlbmd0aCgpOyArK2kp
IHsKKyAgICAgICAgaWYgKG1faXRlbXMtPml0ZW0oaSktPmtpbmQoKSA9PSBEYXRhVHJhbnNmZXJJ
dGVtOjpraW5kU3RyaW5nKQorICAgICAgICAgICAgcmVzdWx0cy5hZGQobV9pdGVtcy0+aXRlbShp
KS0+dHlwZSgpKTsKKyAgICAgICAgZWxzZSBpZiAobV9pdGVtcy0+aXRlbShpKS0+a2luZCgpID09
IERhdGFUcmFuc2Zlckl0ZW06OmtpbmRGaWxlKQorICAgICAgICAgICAgY29udGFpbnNGaWxlcyA9
IHRydWU7CiAgICAgfQorICAgIGlmIChjb250YWluc0ZpbGVzKQorICAgICAgICByZXN1bHRzLmFk
ZChtaW1lVHlwZUZpbGVzKTsKIAotICAgIEhhc2hTZXQ8U3RyaW5nPiByZXN1bHRzOworICAgIHJl
dHVybiByZXN1bHRzOworfQogCi0gICAgaWYgKCFtX3BsYWluVGV4dC5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgcmVzdWx0cy5hZGQobWltZVR5cGVUZXh0KTsKLSAgICAgICAgcmVzdWx0cy5hZGQobWlt
ZVR5cGVUZXh0UGxhaW4pOworU3RyaW5nIENocm9taXVtRGF0YU9iamVjdDo6Z2V0RGF0YShjb25z
dCBTdHJpbmcmIHR5cGUsIGJvb2wmIHN1Y2Nlc3MpIGNvbnN0Cit7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtX2l0ZW1zLT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgIGlmIChtX2l0ZW1z
LT5pdGVtKGkpLT5raW5kKCkgPT0gRGF0YVRyYW5zZmVySXRlbTo6a2luZFN0cmluZworICAgICAg
ICAgICAgJiYgbV9pdGVtcy0+aXRlbShpKS0+dHlwZSgpID09IHR5cGUpIHsKKyAgICAgICAgICAg
IHN1Y2Nlc3MgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIG1faXRlbXMtPml0ZW0oaSktPmxl
Z2FjeUdldEFzU3RyaW5nKCk7CisgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAobV91cmwuaXNW
YWxpZCgpKQotICAgICAgICByZXN1bHRzLmFkZChtaW1lVHlwZVVSTCk7Ci0KLSAgICBpZiAoIW1f
dXJpTGlzdC5pc0VtcHR5KCkpCi0gICAgICAgIHJlc3VsdHMuYWRkKG1pbWVUeXBlVGV4dFVSSUxp
c3QpOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KIAotICAgIGlmICghbV90ZXh0SHRtbC5pc0Vt
cHR5KCkpCi0gICAgICAgIHJlc3VsdHMuYWRkKG1pbWVUeXBlVGV4dEhUTUwpOworYm9vbCBDaHJv
bWl1bURhdGFPYmplY3Q6OnNldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcm
IGRhdGEpCit7CisgICAgY2xlYXJEYXRhKHR5cGUpOworICAgIC8vIFdlIHJlbW92ZWQgdGhlIG9u
bHkgaXRlbSB3aGVyZSBraW5kID09ICdzdHJpbmcnIGFuZCBtYXRjaGluZyB0eXBlLCBzbyBpdCBz
aG91bGQgYmUgaW1wb3NzaWJsZQorICAgIC8vIHRvIGdldCBhbiBleGNlcHRpb24uCisgICAgbV9p
dGVtcy0+YWRkKGRhdGEsIHR5cGUsIEFTU0VSVF9OT19FWENFUFRJT04pOworICAgIHJldHVybiB0
cnVlOworfQogCi0gICAgZm9yIChIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0
b3I6OktleXMgaXQgPSBtX2N1c3RvbURhdGEuYmVnaW4oKS5rZXlzKCk7Ci0gICAgICAgICBpdCAh
PSBtX2N1c3RvbURhdGEuZW5kKCkua2V5cygpOyArK2l0KSB7Ci0gICAgICAgIHJlc3VsdHMuYWRk
KCppdCk7Cit2b2lkIENocm9taXVtRGF0YU9iamVjdDo6Z2V0VVJMKFN0cmluZyYgdXJsLCBTdHJp
bmcqIHRpdGxlKSBjb25zdAoreworICAgIFJlZlB0cjxEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0+
IGl0ZW0gPSBmaW5kSXRlbShEYXRhVHJhbnNmZXJJdGVtOjpraW5kU3RyaW5nLCBtaW1lVHlwZVRl
eHRVUklMaXN0KTsKKyAgICBpZiAoaXRlbSkgeworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IHByb2JhYmx5IGltcGxlbWVudCBjb252ZXJ0LXRvLVVSTCBsb2dpYyBoZXJlLgorICAgICAgICB1
cmwgPSBpdGVtLT5sZWdhY3lHZXRBc1N0cmluZygpOworICAgICAgICBpZiAodGl0bGUpCisgICAg
ICAgICAgICAqdGl0bGUgPSBzdGF0aWNfY2FzdDxEYXRhVHJhbnNmZXJVUklMaXN0SXRlbSo+KGl0
ZW0uZ2V0KCkpLT50aXRsZSgpOwogICAgIH0KK30KIAotICAgIHJldHVybiByZXN1bHRzOwordm9p
ZCBDaHJvbWl1bURhdGFPYmplY3Q6OnNldFVSTChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3Ry
aW5nJiB0aXRsZSkKK3sKKyAgICBjbGVhckRhdGEobWltZVR5cGVUZXh0VVJJTGlzdCk7CisgICAg
bV9pdGVtcy0+aW50ZXJuYWxBZGRVUkwodXJsLCB0aXRsZSk7CiB9CiAKLVN0cmluZyBDaHJvbWl1
bURhdGFPYmplY3Q6OmdldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBib29sJiBzdWNjZXNzKSBj
b25zdAordm9pZCBDaHJvbWl1bURhdGFPYmplY3Q6OmdldEhUTUwoU3RyaW5nJiBtYXJrdXAsIEtV
UkwmIGJhc2VVUkwpIGNvbnN0CiB7Ci0gICAgaWYgKHR5cGUgPT0gbWltZVR5cGVUZXh0UGxhaW4p
IHsKLSAgICAgICAgaWYgKG1fc3RvcmFnZU1vZGUgPT0gUGFzdGVib2FyZCkgewotICAgICAgICAg
ICAgU3RyaW5nIHRleHQgPSBQbGF0Zm9ybVN1cHBvcnQ6OmNsaXBib2FyZFJlYWRQbGFpblRleHQo
Y3VycmVudFBhc3RlYm9hcmRCdWZmZXIoKSk7Ci0gICAgICAgICAgICBzdWNjZXNzID0gIXRleHQu
aXNFbXB0eSgpOwotICAgICAgICAgICAgcmV0dXJuIHRleHQ7Ci0gICAgICAgIH0KLSAgICAgICAg
c3VjY2VzcyA9ICFtX3BsYWluVGV4dC5pc0VtcHR5KCk7Ci0gICAgICAgIHJldHVybiBtX3BsYWlu
VGV4dDsKKyAgICBSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUNocm9taXVtPiBpdGVtID0gZmluZEl0
ZW0oRGF0YVRyYW5zZmVySXRlbTo6a2luZFN0cmluZywgbWltZVR5cGVUZXh0SFRNTCk7CisgICAg
aWYgKGl0ZW0pIHsKKyAgICAgICAgbWFya3VwID0gaXRlbS0+bGVnYWN5R2V0QXNTdHJpbmcoKTsK
KyAgICAgICAgYmFzZVVSTCA9IHN0YXRpY19jYXN0PERhdGFUcmFuc2ZlckhUTUxJdGVtKj4oaXRl
bS5nZXQoKSktPmJhc2VVUkwoKTsKICAgICB9Cit9CiAKLSAgICBpZiAodHlwZSA9PSBtaW1lVHlw
ZVVSTCkgewotICAgICAgICBzdWNjZXNzID0gIW1fdXJsLmlzRW1wdHkoKTsKLSAgICAgICAgcmV0
dXJuIG1fdXJsLnN0cmluZygpOwotICAgIH0KK3ZvaWQgQ2hyb21pdW1EYXRhT2JqZWN0OjpzZXRI
VE1MKGNvbnN0IFN0cmluZyYgbWFya3VwLCBjb25zdCBLVVJMJiBiYXNlVVJMKQoreworICAgIGNs
ZWFyRGF0YShtaW1lVHlwZVRleHRIVE1MKTsKKyAgICBtX2l0ZW1zLT5pbnRlcm5hbEFkZEhUTUwo
bWFya3VwLCBiYXNlVVJMKTsKK30KIAotICAgIGlmICh0eXBlID09IG1pbWVUeXBlVGV4dFVSSUxp
c3QpIHsKLSAgICAgICAgc3VjY2VzcyA9ICFtX3VyaUxpc3QuaXNFbXB0eSgpOwotICAgICAgICBy
ZXR1cm4gbV91cmlMaXN0OwotICAgIH0KK1N0cmluZyBDaHJvbWl1bURhdGFPYmplY3Q6OnVybFRp
dGxlKCkgY29uc3QKK3sKKyAgICBSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUNocm9taXVtPiBpdGVt
ID0gZmluZEl0ZW0oRGF0YVRyYW5zZmVySXRlbTo6a2luZFN0cmluZywgbWltZVR5cGVUZXh0VVJJ
TGlzdCk7CisgICAgaWYgKCFpdGVtKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0
dXJuIHN0YXRpY19jYXN0PERhdGFUcmFuc2ZlclVSSUxpc3RJdGVtKj4oaXRlbS5nZXQoKSktPnRp
dGxlKCk7Cit9CiAKLSAgICBpZiAodHlwZSA9PSBtaW1lVHlwZVRleHRIVE1MKSB7Ci0gICAgICAg
IGlmIChtX3N0b3JhZ2VNb2RlID09IFBhc3RlYm9hcmQpIHsKLSAgICAgICAgICAgIFN0cmluZyBo
dG1sVGV4dDsKLSAgICAgICAgICAgIEtVUkwgc291cmNlVVJMOwotICAgICAgICAgICAgdW5zaWdu
ZWQgaWdub3JlZDsKLSAgICAgICAgICAgIFBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJvYXJkUmVhZEhU
TUwoY3VycmVudFBhc3RlYm9hcmRCdWZmZXIoKSwgJmh0bWxUZXh0LCAmc291cmNlVVJMLCAmaWdu
b3JlZCwgJmlnbm9yZWQpOwotICAgICAgICAgICAgc3VjY2VzcyA9ICFodG1sVGV4dC5pc0VtcHR5
KCk7Ci0gICAgICAgICAgICByZXR1cm4gaHRtbFRleHQ7Ci0gICAgICAgIH0KLSAgICAgICAgc3Vj
Y2VzcyA9ICFtX3RleHRIdG1sLmlzRW1wdHkoKTsKLSAgICAgICAgcmV0dXJuIG1fdGV4dEh0bWw7
Cit2b2lkIENocm9taXVtRGF0YU9iamVjdDo6c2V0VXJsVGl0bGUoY29uc3QgU3RyaW5nJiB1cmxU
aXRsZSkKK3sKKyAgICBSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUNocm9taXVtPiBpdGVtID0gZmlu
ZEl0ZW0oRGF0YVRyYW5zZmVySXRlbTo6a2luZFN0cmluZywgbWltZVR5cGVUZXh0VVJJTGlzdCk7
CisgICAgaWYgKCFpdGVtKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBUaGUg
bGVnYWN5IEFQSSBub3cgaGFzIHRvIGVuZm9yY2UgYW4gb3JkZXJpbmcuIFVnaC4KKyAgICAgICAg
cmV0dXJuOwogICAgIH0KKyAgICBzdGF0aWNfY2FzdDxEYXRhVHJhbnNmZXJVUklMaXN0SXRlbSo+
KGl0ZW0uZ2V0KCkpLT5zZXRUaXRsZSh1cmxUaXRsZSk7Cit9CiAKLSAgICBpZiAodHlwZSA9PSBt
aW1lVHlwZURvd25sb2FkVVJMKSB7Ci0gICAgICAgIHN1Y2Nlc3MgPSAhbV9kb3dubG9hZE1ldGFk
YXRhLmlzRW1wdHkoKTsKLSAgICAgICAgcmV0dXJuIG1fZG93bmxvYWRNZXRhZGF0YTsKLSAgICB9
CitLVVJMIENocm9taXVtRGF0YU9iamVjdDo6aHRtbEJhc2VVcmwoKSBjb25zdAoreworICAgIFJl
ZlB0cjxEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0+IGl0ZW0gPSBmaW5kSXRlbShEYXRhVHJhbnNm
ZXJJdGVtOjpraW5kU3RyaW5nLCBtaW1lVHlwZVRleHRIVE1MKTsKKyAgICBpZiAoIWl0ZW0pCisg
ICAgICAgIHJldHVybiBLVVJMKCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PERhdGFUcmFuc2Zl
ckhUTUxJdGVtKj4oaXRlbS5nZXQoKSktPmJhc2VVUkwoKTsKK30KIAotICAgIGlmIChtX3N0b3Jh
Z2VNb2RlID09IFBhc3RlYm9hcmQpIHsKLSAgICAgICAgU3RyaW5nIGRhdGEgPSBQbGF0Zm9ybVN1
cHBvcnQ6OmNsaXBib2FyZFJlYWRDdXN0b21EYXRhKGN1cnJlbnRQYXN0ZWJvYXJkQnVmZmVyKCks
IHR5cGUpOwotICAgICAgICBzdWNjZXNzID0gIWRhdGEuaXNFbXB0eSgpOwotICAgICAgICByZXR1
cm4gZGF0YTsKK3ZvaWQgQ2hyb21pdW1EYXRhT2JqZWN0OjpzZXRIdG1sQmFzZVVybChjb25zdCBL
VVJMJiB1cmwpCit7CisgICAgUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bT4gaXRlbSA9
IGZpbmRJdGVtKERhdGFUcmFuc2Zlckl0ZW06OmtpbmRTdHJpbmcsIG1pbWVUeXBlVGV4dEhUTUwp
OworICAgIGlmICghaXRlbSkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gVGhl
IGxlZ2FjeSBBUEkgbm93IGhhcyB0byBlbmZvcmNlIGFuIG9yZGVyaW5nLiBVZ2guCisgICAgICAg
IHJldHVybjsKICAgICB9CisgICAgc3RhdGljX2Nhc3Q8RGF0YVRyYW5zZmVySFRNTEl0ZW0qPihp
dGVtLmdldCgpKS0+c2V0QmFzZVVSTCh1cmwpOworfQogCi0gICAgSGFzaE1hcDxTdHJpbmcsIFN0
cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9jdXN0b21EYXRhLmZpbmQodHlwZSk7Ci0gICAg
aWYgKGl0ICE9IG1fY3VzdG9tRGF0YS5lbmQoKSkgewotICAgICAgICBzdWNjZXNzID0gdHJ1ZTsK
LSAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CitIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBDaHJv
bWl1bURhdGFPYmplY3Q6OmN1c3RvbURhdGEoKSBjb25zdAoreworICAgIEhhc2hNYXA8U3RyaW5n
LCBTdHJpbmc+IGRhdGE7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2l0ZW1zLT5sZW5n
dGgoKTsgKytpKSB7CisgICAgICAgIGlmIChtX2l0ZW1zLT5pdGVtKGkpLT5raW5kKCkgIT0gRGF0
YVRyYW5zZmVySXRlbTo6a2luZFN0cmluZykKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAvLyBTa2lwIGtub3duIE1JTUUgdHlwZXMgYXMgdGhleSBhcmVuJ3QgJ2N1c3RvbScuCisgICAg
ICAgIGNvbnN0IFN0cmluZyYgdHlwZSA9IG1faXRlbXMtPml0ZW0oaSktPnR5cGUoKTsKKyAgICAg
ICAgaWYgKHR5cGUgPT0gbWltZVR5cGVUZXh0UGxhaW4gfHwgdHlwZSA9PSBtaW1lVHlwZVRleHRV
UklMaXN0IHx8IHR5cGUgPT0gbWltZVR5cGVUZXh0SFRNTCkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICBkYXRhLnNldChtX2l0ZW1zLT5pdGVtKGkpLT50eXBlKCksIG1faXRlbXMtPml0
ZW0oaSktPmxlZ2FjeUdldEFzU3RyaW5nKCkpOwogICAgIH0KKyAgICByZXR1cm4gZGF0YTsKK30K
IAotICAgIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Cit2b2lkIENocm9t
aXVtRGF0YU9iamVjdDo6c2V0Q3VzdG9tRGF0YShjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5n
PiYgZGF0YSkKK3sKKyAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVy
YXRvciBpdCA9IGRhdGEuYmVnaW4oKTsgaXQgIT0gZGF0YS5lbmQoKTsgKytpdCkKKyAgICAgICAg
c2V0RGF0YShpdC0+Zmlyc3QsIGl0LT5zZWNvbmQpOwogfQogCi1ib29sIENocm9taXVtRGF0YU9i
amVjdDo6c2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSkKK2Jv
b2wgQ2hyb21pdW1EYXRhT2JqZWN0Ojpjb250YWluc0ZpbGVuYW1lcygpIGNvbnN0CiB7Ci0gICAg
aWYgKHR5cGUgPT0gbWltZVR5cGVUZXh0UGxhaW4pIHsKLSAgICAgICAgbV9wbGFpblRleHQgPSBk
YXRhOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
aXRlbXMtPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1faXRlbXMtPml0ZW0oaSktPmtp
bmQoKSA9PSBEYXRhVHJhbnNmZXJJdGVtOjpraW5kRmlsZQorICAgICAgICAgICAgJiYgc3RhdGlj
X2Nhc3Q8RGF0YVRyYW5zZmVyRmlsZUl0ZW0qPihtX2l0ZW1zLT5pdGVtKGkpLmdldCgpKS0+c3Rv
cmFnZVR5cGUoKSA9PSBEYXRhVHJhbnNmZXJGaWxlSXRlbTo6RmlsZW5hbWVUeXBlKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KIAotICAgIGlm
ICh0eXBlID09IG1pbWVUeXBlVVJMIHx8IHR5cGUgPT0gbWltZVR5cGVUZXh0VVJJTGlzdCkgewot
ICAgICAgICBtX3VybCA9IEtVUkwoKTsKLSAgICAgICAgVmVjdG9yPFN0cmluZz4gdXJpTGlzdDsK
LSAgICAgICAgLy8gTGluZSBzZXBhcmF0b3IgaXMgXHJcbiBwZXIgUkZDIDI0ODMgLSBob3dldmVy
LCBmb3IgY29tcGF0aWJpbGl0eQotICAgICAgICAvLyByZWFzb25zIHdlIGFsc28gYWxsb3cganVz
dCBcbiBoZXJlLgotICAgICAgICBkYXRhLnNwbGl0KCdcbicsIHVyaUxpc3QpOwotICAgICAgICAv
LyBQcm9jZXNzIHRoZSBpbnB1dCBhbmQgY29weSB0aGUgZmlyc3QgdmFsaWQgVVJMIGludG8gdGhl
IHVybCBtZW1iZXIuCi0gICAgICAgIC8vIEluIGNhc2Ugbm8gVVJMcyBjYW4gYmUgZm91bmQsIHN1
YnNlcXVlbnQgY2FsbHMgdG8gZ2V0RGF0YSgiVVJMIikKLSAgICAgICAgLy8gd2lsbCBnZXQgYW4g
ZW1wdHkgc3RyaW5nLiBUaGlzIGlzIGluIGxpbmUgd2l0aCB0aGUgSFRNTDUgc3BlYyAoc2VlCi0g
ICAgICAgIC8vICJUaGUgRHJhZ0V2ZW50IGFuZCBEYXRhVHJhbnNmZXIgaW50ZXJmYWNlcyIpLgot
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHVyaUxpc3Quc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgICAgIFN0cmluZyYgbGluZSA9IHVyaUxpc3RbaV07Ci0gICAgICAgICAgICBsaW5lID0g
bGluZS5zdHJpcFdoaXRlU3BhY2UoKTsKLSAgICAgICAgICAgIGlmIChsaW5lLmlzRW1wdHkoKSkg
ewotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
aWYgKGxpbmVbMF0gPT0gJyMnKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgS1VSTCB1cmwgPSBLVVJMKFBhcnNlZFVSTFN0cmluZywgbGluZSk7Ci0gICAgICAgICAgICBp
ZiAodXJsLmlzVmFsaWQoKSkgewotICAgICAgICAgICAgICAgIG1fdXJsID0gdXJsOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIG1fdXJp
TGlzdCA9IGRhdGE7Ci0gICAgICAgIHJldHVybiB0cnVlOworVmVjdG9yPFN0cmluZz4gQ2hyb21p
dW1EYXRhT2JqZWN0OjpmaWxlbmFtZXMoKSBjb25zdAoreworICAgIFZlY3RvcjxTdHJpbmc+IGZp
bGVuYW1lczsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1faXRlbXMtPmxlbmd0aCgpOyAr
K2kpIHsKKyAgICAgICAgaWYgKG1faXRlbXMtPml0ZW0oaSktPmtpbmQoKSA9PSBEYXRhVHJhbnNm
ZXJJdGVtOjpraW5kRmlsZQorICAgICAgICAgICAgJiYgc3RhdGljX2Nhc3Q8RGF0YVRyYW5zZmVy
RmlsZUl0ZW0qPihtX2l0ZW1zLT5pdGVtKGkpLmdldCgpKS0+c3RvcmFnZVR5cGUoKSA9PSBEYXRh
VHJhbnNmZXJGaWxlSXRlbTo6RmlsZW5hbWVUeXBlKQorICAgICAgICAgICAgZmlsZW5hbWVzLmFw
cGVuZChzdGF0aWNfY2FzdDxCdWZmZXJlZERhdGFUcmFuc2ZlckZpbGVuYW1lSXRlbSo+KG1faXRl
bXMtPml0ZW0oaSkuZ2V0KCkpLT5maWxlbmFtZSgpKTsKICAgICB9CisgICAgcmV0dXJuIGZpbGVu
YW1lczsKK30KKwordm9pZCBDaHJvbWl1bURhdGFPYmplY3Q6OmFkZEZpbGVuYW1lKGNvbnN0IFN0
cmluZyYgZmlsZW5hbWUpCit7CisgICAgbV9pdGVtcy0+aW50ZXJuYWxBZGRGaWxlbmFtZShmaWxl
bmFtZSk7Cit9CiAKLSAgICBpZiAodHlwZSA9PSBtaW1lVHlwZVRleHRIVE1MKSB7Ci0gICAgICAg
IG1fdGV4dEh0bWwgPSBkYXRhOwotICAgICAgICBtX2h0bWxCYXNlVXJsID0gS1VSTCgpOwotICAg
ICAgICByZXR1cm4gdHJ1ZTsKK3ZvaWQgQ2hyb21pdW1EYXRhT2JqZWN0OjpzZXRGaWxlbmFtZXMo
Y29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcykKK3sKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGZpbGVuYW1lcy5zaXplKCk7ICsraSkgeworICAgICAgICBhZGRGaWxlbmFtZShmaWxl
bmFtZXNbaV0pOwogICAgIH0KK30KKwordm9pZCBDaHJvbWl1bURhdGFPYmplY3Q6OmFkZFNoYXJl
ZEJ1ZmZlcihjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9uLCBQYXNz
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyKQoreworICAgIG1faXRlbXMtPmludGVybmFsQWRk
U2hhcmVkQnVmZmVyKG5hbWUsIGV4dGVuc2lvbiwgYnVmZmVyKTsKK30KIAotICAgIGlmICh0eXBl
ID09IG1pbWVUeXBlRG93bmxvYWRVUkwpIHsKLSAgICAgICAgbV9kb3dubG9hZE1ldGFkYXRhID0g
ZGF0YTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisvLyBTaW1wbGUgaGVscGVyIHRvIHN1cHBvcnQg
ZGVwcmVjYXRlZCBmdW5jdGlvbnMKK3N0YXRpYyBQYXNzUmVmUHRyPEJ1ZmZlcmVkRGF0YVRyYW5z
ZmVyU2hhcmVkQnVmZmVySXRlbT4gZmluZFNoYXJlZEJ1ZmZlckl0ZW0oUGFzc1JlZlB0cjxEYXRh
VHJhbnNmZXJJdGVtTGlzdENocm9taXVtPiBpdGVtcykKK3sKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGl0ZW1zLT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgIGlmIChpdGVtcy0+aXRlbShp
KS0+a2luZCgpID09IERhdGFUcmFuc2Zlckl0ZW06OmtpbmRGaWxlCisgICAgICAgICAgICAmJiBz
dGF0aWNfY2FzdDxEYXRhVHJhbnNmZXJGaWxlSXRlbSo+KGl0ZW1zLT5pdGVtKGkpLmdldCgpKS0+
c3RvcmFnZVR5cGUoKSA9PSBEYXRhVHJhbnNmZXJGaWxlSXRlbTo6U2hhcmVkQnVmZmVyVHlwZSkK
KyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxCdWZmZXJlZERhdGFUcmFuc2ZlclNoYXJl
ZEJ1ZmZlckl0ZW0qPihpdGVtcy0+aXRlbShpKS5nZXQoKSk7CiAgICAgfQorICAgIHJldHVybiAw
OworfQogCi0gICAgaWYgKHR5cGUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CitT
dHJpbmcgQ2hyb21pdW1EYXRhT2JqZWN0OjpmaWxlRXh0ZW5zaW9uKCkgY29uc3QKK3sKKyAgICBS
ZWZQdHI8QnVmZmVyZWREYXRhVHJhbnNmZXJTaGFyZWRCdWZmZXJJdGVtPiBpdGVtID0gZmluZFNo
YXJlZEJ1ZmZlckl0ZW0obV9pdGVtcyk7CisgICAgcmV0dXJuIGl0ZW0gPyBpdGVtLT5leHRlbnNp
b24oKSA6IFN0cmluZygpOworfQogCi0gICAgbV9jdXN0b21EYXRhLnNldCh0eXBlLCBkYXRhKTsK
LSAgICByZXR1cm4gdHJ1ZTsKK1N0cmluZyBDaHJvbWl1bURhdGFPYmplY3Q6OmZpbGVDb250ZW50
RmlsZW5hbWUoKSBjb25zdAoreworICAgIFJlZlB0cjxCdWZmZXJlZERhdGFUcmFuc2ZlclNoYXJl
ZEJ1ZmZlckl0ZW0+IGl0ZW0gPSBmaW5kU2hhcmVkQnVmZmVySXRlbShtX2l0ZW1zKTsKKyAgICBy
ZXR1cm4gaXRlbSA/IGl0ZW0tPm5hbWUoKSA6IFN0cmluZygpOwogfQogCi1ib29sIENocm9taXVt
RGF0YU9iamVjdDo6Y29udGFpbnNGaWxlbmFtZXMoKSBjb25zdAorUGFzc1JlZlB0cjxTaGFyZWRC
dWZmZXI+IENocm9taXVtRGF0YU9iamVjdDo6ZmlsZUNvbnRlbnQoKSBjb25zdAogewotICAgIGJv
b2wgY29udGFpbnNGaWxlbmFtZXM7Ci0gICAgaWYgKG1fc3RvcmFnZU1vZGUgPT0gUGFzdGVib2Fy
ZCkgewotICAgICAgICBIYXNoU2V0PFN0cmluZz4gaWdub3JlZFJlc3VsdHMgPQotICAgICAgICAg
ICAgUGxhdGZvcm1TdXBwb3J0OjpjbGlwYm9hcmRSZWFkQXZhaWxhYmxlVHlwZXMoY3VycmVudFBh
c3RlYm9hcmRCdWZmZXIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICZjb250YWluc0ZpbGVuYW1lcyk7Ci0gICAgfSBlbHNlCi0gICAg
ICAgIGNvbnRhaW5zRmlsZW5hbWVzID0gIW1fZmlsZW5hbWVzLmlzRW1wdHkoKTsKLSAgICByZXR1
cm4gY29udGFpbnNGaWxlbmFtZXM7CisgICAgUmVmUHRyPEJ1ZmZlcmVkRGF0YVRyYW5zZmVyU2hh
cmVkQnVmZmVySXRlbT4gaXRlbSA9IGZpbmRTaGFyZWRCdWZmZXJJdGVtKG1faXRlbXMpOworICAg
IHJldHVybiBpdGVtID8gaXRlbS0+YnVmZmVyKCkgOiAwOwogfQogCi1DaHJvbWl1bURhdGFPYmpl
Y3Q6OkNocm9taXVtRGF0YU9iamVjdChTdG9yYWdlTW9kZSBzdG9yYWdlTW9kZSkKLSAgICA6IG1f
c3RvcmFnZU1vZGUoc3RvcmFnZU1vZGUpCitDaHJvbWl1bURhdGFPYmplY3Q6OkNocm9taXVtRGF0
YU9iamVjdChQYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0+IGl0ZW1zKQor
ICAgIDogbV9pdGVtcyhpdGVtcykKIHsKIH0KIAogQ2hyb21pdW1EYXRhT2JqZWN0OjpDaHJvbWl1
bURhdGFPYmplY3QoY29uc3QgQ2hyb21pdW1EYXRhT2JqZWN0JiBvdGhlcikKLSAgICA6IFJlZkNv
dW50ZWQ8Q2hyb21pdW1EYXRhT2JqZWN0PigpCi0gICAgLCBtX3N0b3JhZ2VNb2RlKG90aGVyLm1f
c3RvcmFnZU1vZGUpCi0gICAgLCBtX3VybFRpdGxlKG90aGVyLm1fdXJsVGl0bGUpCi0gICAgLCBt
X2Rvd25sb2FkTWV0YWRhdGEob3RoZXIubV9kb3dubG9hZE1ldGFkYXRhKQotICAgICwgbV9maWxl
RXh0ZW5zaW9uKG90aGVyLm1fZmlsZUV4dGVuc2lvbikKLSAgICAsIG1fZmlsZW5hbWVzKG90aGVy
Lm1fZmlsZW5hbWVzKQotICAgICwgbV9wbGFpblRleHQob3RoZXIubV9wbGFpblRleHQpCi0gICAg
LCBtX3RleHRIdG1sKG90aGVyLm1fdGV4dEh0bWwpCi0gICAgLCBtX2h0bWxCYXNlVXJsKG90aGVy
Lm1faHRtbEJhc2VVcmwpCi0gICAgLCBtX2ZpbGVDb250ZW50RmlsZW5hbWUob3RoZXIubV9maWxl
Q29udGVudEZpbGVuYW1lKQotICAgICwgbV91cmwob3RoZXIubV91cmwpCi0gICAgLCBtX3VyaUxp
c3Qob3RoZXIubV91cmlMaXN0KQorICAgIDogbV9pdGVtcyhvdGhlci5tX2l0ZW1zKQoreworfQor
CitQYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bT4gQ2hyb21pdW1EYXRhT2JqZWN0
OjpmaW5kSXRlbShjb25zdCBTdHJpbmcmIGtpbmQsIGNvbnN0IFN0cmluZyYgdHlwZSkgY29uc3QK
IHsKLSAgICBpZiAob3RoZXIubV9maWxlQ29udGVudC5nZXQoKSkKLSAgICAgICAgbV9maWxlQ29u
dGVudCA9IG90aGVyLm1fZmlsZUNvbnRlbnQtPmNvcHkoKTsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1faXRlbXMtPmxlbmd0aCgpOyArK2kpCisgICAgICAgIGlmIChtX2l0ZW1zLT5pdGVt
KGkpLT5raW5kKCkgPT0ga2luZCAmJiBtX2l0ZW1zLT5pdGVtKGkpLT50eXBlKCkgPT0gdHlwZSkK
KyAgICAgICAgICAgIHJldHVybiBtX2l0ZW1zLT5pdGVtKGkpOworICAgIHJldHVybiAwOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5oCmluZGV4IDdlNjc1YmY5Mzk5NTBiZmU4
ODUyMzRiMDcxZTlhODQyZDE0ZjFiMTguLjhiNTZkMTIwOGU2YWJlMWI2ZjMyN2EzZTVkOGEwZTEz
OTE4ZDhlYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0No
cm9taXVtRGF0YU9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVt
L0Nocm9taXVtRGF0YU9iamVjdC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
YykgMjAwOCwgMjAwOSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoYykgMjAwOCwgMjAwOSwgMjAxMiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqIAogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC0zMSw2ICszMSw3IEBA
CiAjaWZuZGVmIENocm9taXVtRGF0YU9iamVjdF9oCiAjZGVmaW5lIENocm9taXVtRGF0YU9iamVj
dF9oCiAKKyNpbmNsdWRlICJEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtLmgiCiAjaW5jbHVk
ZSAiS1VSTC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiU2hhcmVk
QnVmZmVyLmgiCkBAIC00NywxOSArNDgsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogLy8gb2Yg
YW5kIGlzIG5vdCBzcGVjaWZpYyB0byBhIHBsYXRmb3JtLgogY2xhc3MgQ2hyb21pdW1EYXRhT2Jq
ZWN0IDogcHVibGljIFJlZkNvdW50ZWQ8Q2hyb21pdW1EYXRhT2JqZWN0PiB7CiBwdWJsaWM6Ci0g
ICAgZW51bSBTdG9yYWdlTW9kZSB7Ci0gICAgICAgIEJ1ZmZlcmVkLAotICAgICAgICBQYXN0ZWJv
YXJkLAotICAgIH07Ci0KICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDaHJvbWl1bURhdGFPYmplY3Q+
IGNyZWF0ZUZyb21QYXN0ZWJvYXJkKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgQ2hyb21pdW1EYXRhT2JqZWN0KFBhc3RlYm9hcmQpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBDaHJvbWl1bURhdGFPYmplY3QoRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bTo6
Y3JlYXRlRnJvbVBhc3RlYm9hcmQoKSkpOwogICAgIH0KIAogICAgIHN0YXRpYyBQYXNzUmVmUHRy
PENocm9taXVtRGF0YU9iamVjdD4gY3JlYXRlKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgQ2hyb21pdW1EYXRhT2JqZWN0KEJ1ZmZlcmVkKSk7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgQ2hyb21pdW1EYXRhT2JqZWN0KERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21p
dW06OmNyZWF0ZSgpKSk7CiAgICAgfQogCiAgICAgUGFzc1JlZlB0cjxDaHJvbWl1bURhdGFPYmpl
Y3Q+IGNvcHkoKSBjb25zdApAQCAtNjcsNzAgKzYzLDUxIEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBDaHJvbWl1bURhdGFPYmplY3QoKnRoaXMpKTsKICAgICB9CiAKLSAg
ICBTdG9yYWdlTW9kZSBzdG9yYWdlTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcmFnZU1vZGU7
IH0KKyAgICBQYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0+IGl0ZW1zKCkg
Y29uc3Q7CiAKICAgICB2b2lkIGNsZWFyRGF0YShjb25zdCBTdHJpbmcmIHR5cGUpOwogICAgIHZv
aWQgY2xlYXJBbGwoKTsKICAgICB2b2lkIGNsZWFyQWxsRXhjZXB0RmlsZXMoKTsKIAotICAgIGJv
b2wgaGFzRGF0YSgpIGNvbnN0OwotCiAgICAgSGFzaFNldDxTdHJpbmc+IHR5cGVzKCkgY29uc3Q7
CiAgICAgU3RyaW5nIGdldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBib29sJiBzdWNjZXNzKSBj
b25zdDsKICAgICBib29sIHNldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcm
IGRhdGEpOwogCi0gICAgLy8gU3BlY2lhbCBoYW5kbGVycyBmb3IgVVJML0hUTUwgbWV0YWRhdGEu
Ci0gICAgU3RyaW5nIHVybFRpdGxlKCkgY29uc3QgeyByZXR1cm4gbV91cmxUaXRsZTsgfQotICAg
IHZvaWQgc2V0VXJsVGl0bGUoY29uc3QgU3RyaW5nJiB1cmxUaXRsZSkgeyBtX3VybFRpdGxlID0g
dXJsVGl0bGU7IH0KLSAgICBLVVJMIGh0bWxCYXNlVXJsKCkgY29uc3QgeyByZXR1cm4gbV9odG1s
QmFzZVVybDsgfQotICAgIHZvaWQgc2V0SHRtbEJhc2VVcmwoY29uc3QgS1VSTCYgdXJsKSB7IG1f
aHRtbEJhc2VVcmwgPSB1cmw7IH0KKyAgICAvLyBTcGVjaWFsIGhhbmRsZXJzIGZvciBkYXRhIHR5
cGVzIHdpdGggbWV0YWRhdGEuCisgICAgdm9pZCBnZXRVUkwoU3RyaW5nJiB1cmwsIFN0cmluZyog
dGl0bGUpIGNvbnN0OworICAgIHZvaWQgc2V0VVJMKGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBT
dHJpbmcmIHRpdGxlKTsKKyAgICB2b2lkIGdldEhUTUwoU3RyaW5nJiBodG1sLCBLVVJMJiBiYXNl
VVJMKSBjb25zdDsKKyAgICB2b2lkIHNldEhUTUwoY29uc3QgU3RyaW5nJiBodG1sLCBjb25zdCBL
VVJMJiBiYXNlVVJMKTsKKyAgICAvLyBGSVhNRTogUmVtb3ZlIHdoZW4gbm8gbG9uZ2VyIHVzZWQu
CisgICAgU3RyaW5nIHVybFRpdGxlKCkgY29uc3Q7CisgICAgdm9pZCBzZXRVcmxUaXRsZShjb25z
dCBTdHJpbmcmKTsKKyAgICBLVVJMIGh0bWxCYXNlVXJsKCkgY29uc3Q7CisgICAgdm9pZCBzZXRI
dG1sQmFzZVVybChjb25zdCBLVVJMJik7CisgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gY3Vz
dG9tRGF0YSgpIGNvbnN0OworICAgIHZvaWQgc2V0Q3VzdG9tRGF0YShjb25zdCBIYXNoTWFwPFN0
cmluZywgU3RyaW5nPiYpOwogCiAgICAgLy8gVXNlZCB0byBoYW5kbGUgZmlsZXMgYmVpbmcgZHJh
Z2dlZCBpbiBhbmQgb3V0LgogICAgIGJvb2wgY29udGFpbnNGaWxlbmFtZXMoKSBjb25zdDsKLSAg
ICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVzKCkgY29uc3QgeyByZXR1cm4gbV9maWxl
bmFtZXM7IH0KLSAgICB2b2lkIHNldEZpbGVuYW1lcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmls
ZW5hbWVzKSB7IG1fZmlsZW5hbWVzID0gZmlsZW5hbWVzOyB9Ci0KLSAgICAvLyBVc2VkIHRvIGhh
bmRsZSBmaWxlcyBiZWluZyBkcmFnZ2VkIG91dC4KLSAgICB2b2lkIGFkZEZpbGVuYW1lKGNvbnN0
IFN0cmluZyYgZmlsZW5hbWUpIHsgbV9maWxlbmFtZXMuYXBwZW5kKGZpbGVuYW1lKTsgfQorICAg
IFZlY3RvcjxTdHJpbmc+IGZpbGVuYW1lcygpIGNvbnN0OworICAgIHZvaWQgYWRkRmlsZW5hbWUo
Y29uc3QgU3RyaW5nJik7CisgICAgLy8gRklYTUU6IFJlbW92ZSB3aGVuIG5vIGxvbmdlciB1c2Vk
LgorICAgIHZvaWQgc2V0RmlsZW5hbWVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+Jik7CiAKICAgICAv
LyBVc2VkIHRvIGhhbmRsZSBmaWxlcyAoaW1hZ2VzKSBiZWluZyBkcmFnZ2VkIG91dC4KLSAgICBT
dHJpbmcgZmlsZUV4dGVuc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fZmlsZUV4dGVuc2lvbjsgfQot
ICAgIHZvaWQgc2V0RmlsZUV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGZpbGVFeHRlbnNpb24pIHsg
bV9maWxlRXh0ZW5zaW9uID0gZmlsZUV4dGVuc2lvbjsgfQotICAgIFN0cmluZyBmaWxlQ29udGVu
dEZpbGVuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9maWxlQ29udGVudEZpbGVuYW1lOyB9Ci0gICAg
dm9pZCBzZXRGaWxlQ29udGVudEZpbGVuYW1lKGNvbnN0IFN0cmluZyYgZmlsZUNvbnRlbnRGaWxl
bmFtZSkgeyBtX2ZpbGVDb250ZW50RmlsZW5hbWUgPSBmaWxlQ29udGVudEZpbGVuYW1lOyB9Ci0g
ICAgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGZpbGVDb250ZW50KCkgY29uc3QgeyByZXR1cm4g
bV9maWxlQ29udGVudDsgfQotICAgIHZvaWQgc2V0RmlsZUNvbnRlbnQoUGFzc1JlZlB0cjxTaGFy
ZWRCdWZmZXI+IGZpbGVDb250ZW50KSB7IG1fZmlsZUNvbnRlbnQgPSBmaWxlQ29udGVudDsgfQot
ICAgIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBjdXN0b21EYXRhKCkgY29uc3QgeyBy
ZXR1cm4gbV9jdXN0b21EYXRhOyB9Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIGN1c3Rv
bURhdGEoKSB7IHJldHVybiBtX2N1c3RvbURhdGE7IH0KKyAgICB2b2lkIGFkZFNoYXJlZEJ1ZmZl
cihjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9uLCBQYXNzUmVmUHRy
PFNoYXJlZEJ1ZmZlcj4pOworICAgIC8vIEZJWE1FOiBSZW1vdmUgd2hlbiBubyBsb25nZXIgdXNl
ZC4KKyAgICBTdHJpbmcgZmlsZUV4dGVuc2lvbigpIGNvbnN0OworICAgIFN0cmluZyBmaWxlQ29u
dGVudEZpbGVuYW1lKCkgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGZpbGVD
b250ZW50KCkgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgQ2hyb21pdW1EYXRhT2Jq
ZWN0KFN0b3JhZ2VNb2RlKTsKKyAgICBleHBsaWNpdCBDaHJvbWl1bURhdGFPYmplY3QoUGFzc1Jl
ZlB0cjxEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtPiBpdGVtcyk7CiAgICAgZXhwbGljaXQg
Q2hyb21pdW1EYXRhT2JqZWN0KGNvbnN0IENocm9taXVtRGF0YU9iamVjdCYpOwogCi0gICAgU3Rv
cmFnZU1vZGUgbV9zdG9yYWdlTW9kZTsKLQotICAgIFN0cmluZyBtX3VybFRpdGxlOwotCi0gICAg
U3RyaW5nIG1fZG93bmxvYWRNZXRhZGF0YTsKLQotICAgIFN0cmluZyBtX2ZpbGVFeHRlbnNpb247
Ci0gICAgVmVjdG9yPFN0cmluZz4gbV9maWxlbmFtZXM7Ci0KLSAgICBTdHJpbmcgbV9wbGFpblRl
eHQ7Ci0KLSAgICBTdHJpbmcgbV90ZXh0SHRtbDsKLSAgICBLVVJMIG1faHRtbEJhc2VVcmw7Ci0K
LSAgICBTdHJpbmcgbV9maWxlQ29udGVudEZpbGVuYW1lOwotICAgIFJlZlB0cjxTaGFyZWRCdWZm
ZXI+IG1fZmlsZUNvbnRlbnQ7Ci0KLSAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBtX2N1c3Rv
bURhdGE7CisgICAgUGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0+IGZpbmRJdGVt
KGNvbnN0IFN0cmluZyYga2luZCwgY29uc3QgU3RyaW5nJiB0eXBlKSBjb25zdDsKIAotICAgIC8v
IFRoZXNlIHR3byBhcmUgbGlua2VkLiBTZXR0aW5nIG1fdXJsIHdpbGwgc2V0IG1fdXJpTGlzdCB0
byB0aGUgc2FtZQotICAgIC8vIHN0cmluZyB2YWx1ZTsgc2V0dGluZyBtX3VyaUxpc3Qgd2lsbCBj
YXVzZSBpdHMgY29udGVudHMgdG8gYmUgcGFyc2VkCi0gICAgLy8gYWNjb3JkaW5nIHRvIFJGQyAy
NDgzIGFuZCB0aGUgZmlyc3QgVVJMIGZvdW5kIHdpbGwgYmUgc2V0IGluIG1fdXJsLgotICAgIEtV
UkwgbV91cmw7Ci0gICAgU3RyaW5nIG1fdXJpTGlzdDsKKyAgICAvLyBGSVhNRTogUmVuYW1lIHRv
IG1fbGlzdAorICAgIFJlZlB0cjxEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtPiBtX2l0ZW1z
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uY3BwCmluZGV4IDlhMjY4NzYw
NTdhODBkZmE0ODEyOWU4ZDA1MTQwYjMxMGRhMzgxNWQuLjA5YmNjOGJlYzExNDRkOTBhMWI1OTc3
ZTRmNDc0MGZkOGQ1NmZmYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2No
cm9taXVtL0NsaXBib2FyZENocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5jcHAKQEAgLTMyLDExICszMiwxMiBAQAogI2lu
Y2x1ZGUgIkNsaXBib2FyZE1pbWVUeXBlcy5oIgogI2luY2x1ZGUgIkNsaXBib2FyZFV0aWxpdGll
c0Nocm9taXVtLmgiCiAjaW5jbHVkZSAiRGF0YVRyYW5zZmVySXRlbUNocm9taXVtLmgiCisjaW5j
bHVkZSAiRGF0YVRyYW5zZmVySXRlbUxpc3QuaCIKICNpbmNsdWRlICJEYXRhVHJhbnNmZXJJdGVt
TGlzdENocm9taXVtLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJEcmFnRGF0
YS5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKLSNpbmNsdWRlICJGaWxlLmgiCisjaW5jbHVkZSAi
RXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkZpbGVMaXN0LmgiCiAjaW5jbHVkZSAiRnJhbWUu
aCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKQEAgLTQ3LDIzICs0OCwxNjYgQEAKICNpbmNsdWRl
ICJQbGF0Zm9ybVN1cHBvcnQuaCIKICNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlJlbmRl
ckltYWdlLmgiCi0jaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUg
IlN0cmluZ0NhbGxiYWNrLmgiCiAjaW5jbHVkZSAibWFya3VwLmgiCiAKICNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCituYW1lc3BhY2Ugewor
CisvLyBUaGVzZSB3cmFwcGVyIGNsYXNzZXMgaGVscCB1cyB0byBwcm9wZXJseSBzY29wZSBEYXRh
VHJhbnNmZXJJdGVtL0RhdGFUcmFuc2Zlckl0ZW1MaXN0IHNvIHRoZXkgYXJlCisvLyBub3QgYXZh
aWxhYmxlIG91dHNpZGUgdGhlIGNvbnRleHQgdGhhdCBhIENsaXBib2FyZCBvYmplY3QgaXMgdmFs
aWQgZm9yLgorY2xhc3MgRGF0YVRyYW5zZmVySXRlbUxpc3RXcmFwcGVyIDogcHVibGljIERhdGFU
cmFuc2Zlckl0ZW1MaXN0IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRhVHJh
bnNmZXJJdGVtTGlzdFdyYXBwZXI+IGNyZWF0ZSgKKyAgICAgICAgUGFzc1JlZlB0cjxDbGlwYm9h
cmRDaHJvbWl1bT4sIFBhc3NSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bT4pOwor
CisgICAgdmlydHVhbCBzaXplX3QgbGVuZ3RoKCkgY29uc3Q7CisgICAgdmlydHVhbCBQYXNzUmVm
UHRyPERhdGFUcmFuc2Zlckl0ZW0+IGl0ZW0odW5zaWduZWQgbG9uZyBpbmRleCk7CisgICAgdmly
dHVhbCB2b2lkIGRlbGV0ZUl0ZW0odW5zaWduZWQgbG9uZyBpbmRleCwgRXhjZXB0aW9uQ29kZSYp
OworICAgIHZpcnR1YWwgdm9pZCBjbGVhcigpOworICAgIHZpcnR1YWwgdm9pZCBhZGQoY29uc3Qg
U3RyaW5nJiBkYXRhLCBjb25zdCBTdHJpbmcmIHR5cGUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2
aXJ0dWFsIHZvaWQgYWRkKFBhc3NSZWZQdHI8RmlsZT4pIHsgLyogRklYTUU6IEltcGxlbWVudCAq
LyB9CisKK3ByaXZhdGU6CisgICAgRGF0YVRyYW5zZmVySXRlbUxpc3RXcmFwcGVyKFBhc3NSZWZQ
dHI8Q2xpcGJvYXJkQ2hyb21pdW0+LCBQYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hy
b21pdW0+KTsKKyAgCisgICAgUmVmUHRyPENsaXBib2FyZENocm9taXVtPiBtX2NsaXBib2FyZDsK
KyAgICBSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bT4gbV9saXN0OworfTsKKwor
Y2xhc3MgRGF0YVRyYW5zZmVySXRlbVdyYXBwZXIgOiBwdWJsaWMgRGF0YVRyYW5zZmVySXRlbSB7
CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YVRyYW5zZmVySXRlbVdyYXBwZXI+
IGNyZWF0ZSgKKyAgICAgICAgUGFzc1JlZlB0cjxDbGlwYm9hcmRDaHJvbWl1bT4sIFBhc3NSZWZQ
dHI8RGF0YVRyYW5zZmVySXRlbUNocm9taXVtPik7CisKKyAgICB2aXJ0dWFsIFN0cmluZyBraW5k
KCkgY29uc3Q7CisgICAgdmlydHVhbCBTdHJpbmcgdHlwZSgpIGNvbnN0OworCisgICAgdmlydHVh
bCB2b2lkIGdldEFzU3RyaW5nKFBhc3NSZWZQdHI8U3RyaW5nQ2FsbGJhY2s+KSBjb25zdDsKKyAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8QmxvYj4gZ2V0QXNGaWxlKCkgY29uc3Q7CisKK3ByaXZhdGU6
CisgICAgRGF0YVRyYW5zZmVySXRlbVdyYXBwZXIoUGFzc1JlZlB0cjxDbGlwYm9hcmRDaHJvbWl1
bT4sIFBhc3NSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUNocm9taXVtPik7CisKKyAgICBSZWZQdHI8
Q2xpcGJvYXJkQ2hyb21pdW0+IG1fY2xpcGJvYXJkOworICAgIFJlZlB0cjxEYXRhVHJhbnNmZXJJ
dGVtQ2hyb21pdW0+IG1faXRlbTsKK307CisKK1Bhc3NSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUxp
c3RXcmFwcGVyPiBEYXRhVHJhbnNmZXJJdGVtTGlzdFdyYXBwZXI6OmNyZWF0ZSgKKyAgICBQYXNz
UmVmUHRyPENsaXBib2FyZENocm9taXVtPiBjbGlwYm9hcmQsIFBhc3NSZWZQdHI8RGF0YVRyYW5z
ZmVySXRlbUxpc3RDaHJvbWl1bT4gbGlzdCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IERh
dGFUcmFuc2Zlckl0ZW1MaXN0V3JhcHBlcihjbGlwYm9hcmQsIGxpc3QpKTsKK30KKworc2l6ZV90
IERhdGFUcmFuc2Zlckl0ZW1MaXN0V3JhcHBlcjo6bGVuZ3RoKCkgY29uc3QKK3sKKyAgICBpZiAo
bV9jbGlwYm9hcmQtPnBvbGljeSgpID09IENsaXBib2FyZE51bWIpCisgICAgICAgIHJldHVybiAw
OworICAgIHJldHVybiBtX2xpc3QtPmxlbmd0aCgpOworfQorCitQYXNzUmVmUHRyPERhdGFUcmFu
c2Zlckl0ZW0+IERhdGFUcmFuc2Zlckl0ZW1MaXN0V3JhcHBlcjo6aXRlbSh1bnNpZ25lZCBsb25n
IGluZGV4KQoreworICAgIGlmIChtX2NsaXBib2FyZC0+cG9saWN5KCkgPT0gQ2xpcGJvYXJkTnVt
YikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1
bT4gaXRlbSA9IG1fbGlzdC0+aXRlbShpbmRleCk7CisgICAgaWYgKCFpdGVtKQorICAgICAgICBy
ZXR1cm4gMDsKKyAgICByZXR1cm4gRGF0YVRyYW5zZmVySXRlbVdyYXBwZXI6OmNyZWF0ZShtX2Ns
aXBib2FyZCwgaXRlbSk7Cit9CisKK3ZvaWQgRGF0YVRyYW5zZmVySXRlbUxpc3RXcmFwcGVyOjpk
ZWxldGVJdGVtKHVuc2lnbmVkIGxvbmcgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAg
IGlmIChtX2NsaXBib2FyZC0+cG9saWN5KCkgIT0gQ2xpcGJvYXJkV3JpdGFibGUpIHsKKyAgICAg
ICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBt
X2xpc3QtPmRlbGV0ZUl0ZW0oaW5kZXgpOworfQorCit2b2lkIERhdGFUcmFuc2Zlckl0ZW1MaXN0
V3JhcHBlcjo6Y2xlYXIoKQoreworICAgIGlmIChtX2NsaXBib2FyZC0+cG9saWN5KCkgIT0gQ2xp
cGJvYXJkV3JpdGFibGUpCisgICAgICAgIHJldHVybjsKKyAgICBtX2xpc3QtPmNsZWFyKCk7Cit9
CisKK3ZvaWQgRGF0YVRyYW5zZmVySXRlbUxpc3RXcmFwcGVyOjphZGQoY29uc3QgU3RyaW5nJiBk
YXRhLCBjb25zdCBTdHJpbmcmIHR5cGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmICht
X2NsaXBib2FyZC0+cG9saWN5KCkgIT0gQ2xpcGJvYXJkV3JpdGFibGUpCisgICAgICAgIHJldHVy
bjsKKyAgICBtX2xpc3QtPmFkZChkYXRhLCB0eXBlLCBlYyk7Cit9CisKK0RhdGFUcmFuc2Zlckl0
ZW1MaXN0V3JhcHBlcjo6RGF0YVRyYW5zZmVySXRlbUxpc3RXcmFwcGVyKAorICAgIFBhc3NSZWZQ
dHI8Q2xpcGJvYXJkQ2hyb21pdW0+IGNsaXBib2FyZCwgUGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJ
dGVtTGlzdENocm9taXVtPiBsaXN0KQorICAgIDogbV9jbGlwYm9hcmQoY2xpcGJvYXJkKQorICAg
ICwgbV9saXN0KGxpc3QpCit7Cit9CisKK1Bhc3NSZWZQdHI8RGF0YVRyYW5zZmVySXRlbVdyYXBw
ZXI+IERhdGFUcmFuc2Zlckl0ZW1XcmFwcGVyOjpjcmVhdGUoCisgICAgUGFzc1JlZlB0cjxDbGlw
Ym9hcmRDaHJvbWl1bT4gY2xpcGJvYXJkLCBQYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1DaHJv
bWl1bT4gaXRlbSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IERhdGFUcmFuc2Zlckl0ZW1X
cmFwcGVyKGNsaXBib2FyZCwgaXRlbSkpOworfQorCitTdHJpbmcgRGF0YVRyYW5zZmVySXRlbVdy
YXBwZXI6OmtpbmQoKSBjb25zdAoreworICAgIGlmIChtX2NsaXBib2FyZC0+cG9saWN5KCkgPT0g
Q2xpcGJvYXJkTnVtYikKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIHJldHVybiBtX2l0
ZW0tPmtpbmQoKTsKK30KKworU3RyaW5nIERhdGFUcmFuc2Zlckl0ZW1XcmFwcGVyOjp0eXBlKCkg
Y29uc3QKK3sKKyAgICBpZiAobV9jbGlwYm9hcmQtPnBvbGljeSgpID09IENsaXBib2FyZE51bWIp
CisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICByZXR1cm4gbV9pdGVtLT50eXBlKCk7Cit9
CisKK3ZvaWQgRGF0YVRyYW5zZmVySXRlbVdyYXBwZXI6OmdldEFzU3RyaW5nKFBhc3NSZWZQdHI8
U3RyaW5nQ2FsbGJhY2s+IGNhbGxiYWNrKSBjb25zdAoreworICAgIGlmIChtX2NsaXBib2FyZC0+
cG9saWN5KCkgIT0gQ2xpcGJvYXJkUmVhZGFibGUgJiYgbV9jbGlwYm9hcmQtPnBvbGljeSgpICE9
IENsaXBib2FyZFdyaXRhYmxlKQorICAgICAgICByZXR1cm47CisgICAgICAgCisgICAgbV9pdGVt
LT5nZXRBc1N0cmluZyhjYWxsYmFjaywgbV9jbGlwYm9hcmQtPmZyYW1lKCktPmRvY3VtZW50KCkt
PnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7Cit9CisKK1Bhc3NSZWZQdHI8QmxvYj4gRGF0YVRy
YW5zZmVySXRlbVdyYXBwZXI6OmdldEFzRmlsZSgpIGNvbnN0Cit7CisgICAgaWYgKG1fY2xpcGJv
YXJkLT5wb2xpY3koKSAhPSBDbGlwYm9hcmRSZWFkYWJsZSAmJiBtX2NsaXBib2FyZC0+cG9saWN5
KCkgIT0gQ2xpcGJvYXJkV3JpdGFibGUpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJu
IG1faXRlbS0+Z2V0QXNGaWxlKCk7Cit9CisKK0RhdGFUcmFuc2Zlckl0ZW1XcmFwcGVyOjpEYXRh
VHJhbnNmZXJJdGVtV3JhcHBlcigKKyAgICBQYXNzUmVmUHRyPENsaXBib2FyZENocm9taXVtPiBj
bGlwYm9hcmQsIFBhc3NSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUNocm9taXVtPiBpdGVtKQorICAg
IDogbV9jbGlwYm9hcmQoY2xpcGJvYXJkKQorICAgICwgbV9pdGVtKGl0ZW0pCit7Cit9CisKK30g
Ly8gbmFtZXNwYWNlCisKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIC8vIFdlIHByb3Zp
ZGUgdGhlIElFIGNsaXBib2FyZCB0eXBlcyAoVVJMIGFuZCBUZXh0KSwgYW5kIHRoZSBjbGlwYm9h
cmQgdHlwZXMgc3BlY2lmaWVkIGluIHRoZSBXSEFUV0cgV2ViIEFwcGxpY2F0aW9ucyAxLjAgZHJh
ZnQKIC8vIHNlZSBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13
b3JrLyBTZWN0aW9uIDYuMy41LjMKIAotc3RhdGljIFN0cmluZyBub3JtYWxpemVUeXBlKGNvbnN0
IFN0cmluZyYgdHlwZSkKK3N0YXRpYyBTdHJpbmcgbm9ybWFsaXplVHlwZShjb25zdCBTdHJpbmcm
IHR5cGUsIGJvb2wmIGNvbnZlcnRUb1VSTCkKIHsKICAgICBTdHJpbmcgY2xlYW5UeXBlID0gdHlw
ZS5zdHJpcFdoaXRlU3BhY2UoKS5sb3dlcigpOwogICAgIGlmIChjbGVhblR5cGUgPT0gbWltZVR5
cGVUZXh0IHx8IGNsZWFuVHlwZS5zdGFydHNXaXRoKG1pbWVUeXBlVGV4dFBsYWluRXRjKSkKICAg
ICAgICAgcmV0dXJuIG1pbWVUeXBlVGV4dFBsYWluOworICAgIGlmIChjbGVhblR5cGUgPT0gbWlt
ZVR5cGVVUkwpIHsKKyAgICAgICAgY29udmVydFRvVVJMID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJu
IG1pbWVUeXBlVGV4dFVSSUxpc3Q7CisgICAgfQogICAgIHJldHVybiBjbGVhblR5cGU7CiB9CiAK
QEAgLTc5LDggKzIyMyw2IEBAIENsaXBib2FyZENocm9taXVtOjpDbGlwYm9hcmRDaHJvbWl1bShD
bGlwYm9hcmRUeXBlIGNsaXBib2FyZFR5cGUsCiAgICAgOiBDbGlwYm9hcmQocG9saWN5LCBjbGlw
Ym9hcmRUeXBlKQogICAgICwgbV9kYXRhT2JqZWN0KGRhdGFPYmplY3QpCiAgICAgLCBtX2ZyYW1l
KGZyYW1lKQotICAgICwgbV9vcmlnaW5hbFNlcXVlbmNlTnVtYmVyKFBsYXRmb3JtU3VwcG9ydDo6
Y2xpcGJvYXJkU2VxdWVuY2VOdW1iZXIoY3VycmVudFBhc3RlYm9hcmRCdWZmZXIoKSkpCi0gICAg
LCBtX2RyYWdTdG9yYWdlVXBkYXRlZCh0cnVlKQogewogfQogCkBAIC05NiwxMyArMjM4LDExIEBA
IFBhc3NSZWZQdHI8Q2xpcGJvYXJkQ2hyb21pdW0+IENsaXBib2FyZENocm9taXVtOjpjcmVhdGUo
Q2xpcGJvYXJkVHlwZSBjbGlwYm9hcmRUCiAKIHZvaWQgQ2xpcGJvYXJkQ2hyb21pdW06OmNsZWFy
RGF0YShjb25zdCBTdHJpbmcmIHR5cGUpCiB7Ci0gICAgaWYgKHBvbGljeSgpICE9IENsaXBib2Fy
ZFdyaXRhYmxlIHx8ICFtX2RhdGFPYmplY3QpCisgICAgaWYgKHBvbGljeSgpICE9IENsaXBib2Fy
ZFdyaXRhYmxlKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2RyYWdTdG9yYWdlVXBkYXRlZCA9
IHRydWU7Ci0gICAgbV9kYXRhT2JqZWN0LT5jbGVhckRhdGEobm9ybWFsaXplVHlwZSh0eXBlKSk7
Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBib29sIGlnbm9yZWQ7CisgICAgbV9k
YXRhT2JqZWN0LT5jbGVhckRhdGEobm9ybWFsaXplVHlwZSh0eXBlLCBpZ25vcmVkKSk7CiB9CiAK
IHZvaWQgQ2xpcGJvYXJkQ2hyb21pdW06OmNsZWFyQWxsRGF0YSgpCkBAIC0xMTAsMjAgKzI1MCwz
OSBAQCB2b2lkIENsaXBib2FyZENocm9taXVtOjpjbGVhckFsbERhdGEoKQogICAgIGlmIChwb2xp
Y3koKSAhPSBDbGlwYm9hcmRXcml0YWJsZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9kcmFn
U3RvcmFnZVVwZGF0ZWQgPSB0cnVlOwogICAgIG1fZGF0YU9iamVjdC0+Y2xlYXJBbGwoKTsKIH0K
IAogU3RyaW5nIENsaXBib2FyZENocm9taXVtOjpnZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwg
Ym9vbCYgc3VjY2VzcykgY29uc3QKIHsKICAgICBzdWNjZXNzID0gZmFsc2U7Ci0gICAgaWYgKHBv
bGljeSgpICE9IENsaXBib2FyZFJlYWRhYmxlIHx8ICFtX2RhdGFPYmplY3QpCisgICAgaWYgKHBv
bGljeSgpICE9IENsaXBib2FyZFJlYWRhYmxlKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAK
LSAgICBpZiAoaXNGb3JDb3B5QW5kUGFzdGUoKSAmJiBwbGF0Zm9ybUNsaXBib2FyZENoYW5nZWQo
KSkKKyAgICBib29sIGNvbnZlcnRUb1VSTCA9IGZhbHNlOworICAgIFN0cmluZyBkYXRhID0gbV9k
YXRhT2JqZWN0LT5nZXREYXRhKG5vcm1hbGl6ZVR5cGUodHlwZSwgY29udmVydFRvVVJMKSwgc3Vj
Y2Vzcyk7CisgICAgaWYgKHN1Y2Nlc3MgJiYgY29udmVydFRvVVJMKSB7CisgICAgICAgIFZlY3Rv
cjxTdHJpbmc+IHVyaUxpc3Q7CisgICAgICAgIC8vIExpbmUgc2VwYXJhdG9yIGlzIFxyXG4gcGVy
IFJGQyAyNDgzIC0gaG93ZXZlciwgZm9yIGNvbXBhdGliaWxpdHkKKyAgICAgICAgLy8gcmVhc29u
cyB3ZSBhbHNvIGFsbG93IGp1c3QgXG4gaGVyZS4KKyAgICAgICAgZGF0YS5zcGxpdCgnXG4nLCB1
cmlMaXN0KTsKKyAgICAgICAgLy8gUHJvY2VzcyB0aGUgaW5wdXQgYW5kIGNvcHkgdGhlIGZpcnN0
IHZhbGlkIFVSTCBpbnRvIHRoZSB1cmwgbWVtYmVyLiBJbiBjYXNlIG5vIFVSTHMgY2FuCisgICAg
ICAgIC8vIGJlIGZvdW5kLCByZXR1cm4gYW4gZW1wdHkgc3RyaW5nLmlsbCBnZXQgYW4gZW1wdHkg
c3RyaW5nLiBUaGlzIGlzIGluIGxpbmUgd2l0aCB0aGUgSFRNTDUKKyAgICAgICAgLy8gc3BlYyAo
c2VlICJUaGUgRHJhZ0V2ZW50IGFuZCBEYXRhVHJhbnNmZXIgaW50ZXJmYWNlcyIpLgorICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHVyaUxpc3Quc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
ICAgIFN0cmluZyYgbGluZSA9IHVyaUxpc3RbaV07CisgICAgICAgICAgICBsaW5lID0gbGluZS5z
dHJpcFdoaXRlU3BhY2UoKTsKKyAgICAgICAgICAgIGlmIChsaW5lLmlzRW1wdHkoKSkKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChsaW5lWzBdID09ICcjJykKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIEtVUkwgdXJsID0gS1VSTChQYXJz
ZWRVUkxTdHJpbmcsIGxpbmUpOworICAgICAgICAgICAgaWYgKHVybC5pc1ZhbGlkKCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIHVybDsKKyAgICAgICAgfQogICAgICAgICByZXR1cm4gU3RyaW5n
KCk7Ci0KLSAgICByZXR1cm4gbV9kYXRhT2JqZWN0LT5nZXREYXRhKG5vcm1hbGl6ZVR5cGUodHlw
ZSksIHN1Y2Nlc3MpOworICAgIH0KKyAgICByZXR1cm4gZGF0YTsKIH0KIAogYm9vbCBDbGlwYm9h
cmRDaHJvbWl1bTo6c2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0
YSkKQEAgLTEzMSw0NyArMjkwLDM3IEBAIGJvb2wgQ2xpcGJvYXJkQ2hyb21pdW06OnNldERhdGEo
Y29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpCiAgICAgaWYgKHBvbGljeSgp
ICE9IENsaXBib2FyZFdyaXRhYmxlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBtX2Ry
YWdTdG9yYWdlVXBkYXRlZCA9IHRydWU7Ci0gICAgcmV0dXJuIG1fZGF0YU9iamVjdC0+c2V0RGF0
YShub3JtYWxpemVUeXBlKHR5cGUpLCBkYXRhKTsKLX0KLQotYm9vbCBDbGlwYm9hcmRDaHJvbWl1
bTo6cGxhdGZvcm1DbGlwYm9hcmRDaGFuZ2VkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gUGxhdGZv
cm1TdXBwb3J0OjpjbGlwYm9hcmRTZXF1ZW5jZU51bWJlcihjdXJyZW50UGFzdGVib2FyZEJ1ZmZl
cigpKSAhPSBtX29yaWdpbmFsU2VxdWVuY2VOdW1iZXI7CisgICAgYm9vbCBpZ25vcmVkOworICAg
IHJldHVybiBtX2RhdGFPYmplY3QtPnNldERhdGEobm9ybWFsaXplVHlwZSh0eXBlLCBpZ25vcmVk
KSwgZGF0YSk7CiB9CiAKIC8vIGV4dGVuc2lvbnMgYmV5b25kIElFJ3MgQVBJCiBIYXNoU2V0PFN0
cmluZz4gQ2xpcGJvYXJkQ2hyb21pdW06OnR5cGVzKCkgY29uc3QKIHsKLSAgICBIYXNoU2V0PFN0
cmluZz4gcmVzdWx0czsKICAgICBpZiAocG9saWN5KCkgIT0gQ2xpcGJvYXJkUmVhZGFibGUgJiYg
cG9saWN5KCkgIT0gQ2xpcGJvYXJkVHlwZXNSZWFkYWJsZSkKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dHM7Ci0KLSAgICBpZiAoIW1fZGF0YU9iamVjdCkKLSAgICAgICAgcmV0dXJuIHJlc3VsdHM7Ci0K
LSAgICByZXN1bHRzID0gbV9kYXRhT2JqZWN0LT50eXBlcygpOwotCi0gICAgaWYgKG1fZGF0YU9i
amVjdC0+Y29udGFpbnNGaWxlbmFtZXMoKSkKLSAgICAgICAgcmVzdWx0cy5hZGQobWltZVR5cGVG
aWxlcyk7CisgICAgICAgIHJldHVybiBIYXNoU2V0PFN0cmluZz4oKTsKIAotICAgIHJldHVybiBy
ZXN1bHRzOworICAgIHJldHVybiBtX2RhdGFPYmplY3QtPnR5cGVzKCk7CiB9CiAKIFBhc3NSZWZQ
dHI8RmlsZUxpc3Q+IENsaXBib2FyZENocm9taXVtOjpmaWxlcygpIGNvbnN0CiB7CisgICAgLy8g
RklYTUU6IEFjY29yZGluZyB0byB0aGUgc3BlYywgd2UgYXJlIHN1cHBvc2VkIHRvIHJldHVybiB0
aGUgc2FtZSBGaWxlTGlzdCBlYWNoIHRpbWUuCisgICAgUmVmUHRyPEZpbGVMaXN0PiBmaWxlcyA9
IEZpbGVMaXN0OjpjcmVhdGUoKTsKICAgICBpZiAocG9saWN5KCkgIT0gQ2xpcGJvYXJkUmVhZGFi
bGUpCi0gICAgICAgIHJldHVybiBGaWxlTGlzdDo6Y3JlYXRlKCk7Ci0KLSAgICBpZiAoIW1fZGF0
YU9iamVjdCkKLSAgICAgICAgcmV0dXJuIEZpbGVMaXN0OjpjcmVhdGUoKTsKLQotICAgIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMgPSBtX2RhdGFPYmplY3QtPmZpbGVuYW1lcygpOwot
ICAgIFJlZlB0cjxGaWxlTGlzdD4gZmlsZUxpc3QgPSBGaWxlTGlzdDo6Y3JlYXRlKCk7Ci0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWxlbmFtZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIGZp
bGVMaXN0LT5hcHBlbmQoRmlsZTo6Y3JlYXRlKGZpbGVuYW1lcy5hdChpKSkpOwotCi0gICAgcmV0
dXJuIGZpbGVMaXN0LnJlbGVhc2UoKTsKKyAgICAgICAgcmV0dXJuIGZpbGVzOworCisgICAgUmVm
UHRyPERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0+IGxpc3QgPSBtX2RhdGFPYmplY3QtPml0
ZW1zKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0LT5sZW5ndGgoKTsgKytpKSB7
CisgICAgICAgIGlmIChsaXN0LT5pdGVtKGkpLT5raW5kKCkgPT0gRGF0YVRyYW5zZmVySXRlbTo6
a2luZEZpbGUpIHsKKyAgICAgICAgICAgIC8vIEluIGxheW91dCB0ZXN0cywgaXQncyBwb3NzaWJs
ZSBmb3IgdGhpcyB0byByZXR1cm4gMCBzaW5jZSB3ZSBpbWdodCBoYXZlIGl0ZW1zIG9mIHR5cGUK
KyAgICAgICAgICAgIC8vIEJ1ZmZlcmVkRGF0YVRyYW5zZmVyU2hhcmVkQnVmZmVySXRlbS4KKyAg
ICAgICAgICAgIFJlZlB0cjxCbG9iPiBibG9iID0gbGlzdC0+aXRlbShpKS0+Z2V0QXNGaWxlKCk7
CisgICAgICAgICAgICBpZiAoYmxvYiAmJiBibG9iLT5pc0ZpbGUoKSkKKyAgICAgICAgICAgICAg
ICBmaWxlcy0+YXBwZW5kKHN0YXRpY19jYXN0PEZpbGUqPihibG9iLmdldCgpKSk7CisgICAgICAg
IH0KKyAgICB9CisgICAgcmV0dXJuIGZpbGVzOwogfQogCiB2b2lkIENsaXBib2FyZENocm9taXVt
OjpzZXREcmFnSW1hZ2UoQ2FjaGVkSW1hZ2UqIGltYWdlLCBOb2RlKiBub2RlLCBjb25zdCBJbnRQ
b2ludCYgbG9jKQpAQCAtMjQxLDggKzM5MCw2IEBAIHN0YXRpYyB2b2lkIHdyaXRlSW1hZ2VUb0Rh
dGFPYmplY3QoQ2hyb21pdW1EYXRhT2JqZWN0KiBkYXRhT2JqZWN0LCBFbGVtZW50KiBlbGVtCiAg
ICAgaWYgKCFpbWFnZUJ1ZmZlciB8fCAhaW1hZ2VCdWZmZXItPnNpemUoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgZGF0YU9iamVjdC0+c2V0RmlsZUNvbnRlbnQoaW1hZ2VCdWZmZXIpOwotCiAg
ICAgLy8gRGV0ZXJtaW5lIHRoZSBmaWxlbmFtZSBmb3IgdGhlIGZpbGUgY29udGVudHMgb2YgdGhl
IGltYWdlLgogICAgIFN0cmluZyBmaWxlbmFtZSA9IGNhY2hlZEltYWdlLT5yZXNwb25zZSgpLnN1
Z2dlc3RlZEZpbGVuYW1lKCk7CiAgICAgaWYgKGZpbGVuYW1lLmlzRW1wdHkoKSkKQEAgLTI1NSwx
MyArNDAyLDE0IEBAIHN0YXRpYyB2b2lkIHdyaXRlSW1hZ2VUb0RhdGFPYmplY3QoQ2hyb21pdW1E
YXRhT2JqZWN0KiBkYXRhT2JqZWN0LCBFbGVtZW50KiBlbGVtCiAgICAgICAgIGlmIChleHRlbnNp
b25JbmRleCAhPSAtMSkKICAgICAgICAgICAgIGZpbGVuYW1lLnRydW5jYXRlKGV4dGVuc2lvbklu
ZGV4KTsKICAgICB9Ci0gICAgZmlsZW5hbWUgPSBDbGlwYm9hcmRDaHJvbWl1bTo6dmFsaWRhdGVG
aWxlTmFtZShmaWxlbmFtZSwgZGF0YU9iamVjdCk7CiAKICAgICBTdHJpbmcgZXh0ZW5zaW9uID0g
TUlNRVR5cGVSZWdpc3RyeTo6Z2V0UHJlZmVycmVkRXh0ZW5zaW9uRm9yTUlNRVR5cGUoCiAgICAg
ICAgIGNhY2hlZEltYWdlLT5yZXNwb25zZSgpLm1pbWVUeXBlKCkpOwotICAgIGRhdGFPYmplY3Qt
PnNldEZpbGVFeHRlbnNpb24oZXh0ZW5zaW9uLmlzRW1wdHkoKSA/IGVtcHR5U3RyaW5nKCkgOiAi
LiIgKyBleHRlbnNpb24pOworICAgIGV4dGVuc2lvbiA9IGV4dGVuc2lvbi5pc0VtcHR5KCkgPyBl
bXB0eVN0cmluZygpIDogIi4iICsgZXh0ZW5zaW9uOworCisgICAgQ2xpcGJvYXJkQ2hyb21pdW06
OnZhbGlkYXRlRmlsZW5hbWUoZmlsZW5hbWUsIGV4dGVuc2lvbik7CiAKLSAgICBkYXRhT2JqZWN0
LT5zZXRGaWxlQ29udGVudEZpbGVuYW1lKGZpbGVuYW1lICsgZGF0YU9iamVjdC0+ZmlsZUV4dGVu
c2lvbigpKTsKKyAgICBkYXRhT2JqZWN0LT5hZGRTaGFyZWRCdWZmZXIoZmlsZW5hbWUgKyBleHRl
bnNpb24sIGV4dGVuc2lvbiwgaW1hZ2VCdWZmZXIpOwogfQogCiB2b2lkIENsaXBib2FyZENocm9t
aXVtOjpkZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2UoRWxlbWVudCogZWxlbWVudCwgY29uc3QgS1VS
TCYgdXJsLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBGcmFtZSogZnJhbWUpCkBAIC0yNjksMTUgKzQx
NywxMyBAQCB2b2lkIENsaXBib2FyZENocm9taXVtOjpkZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2Uo
RWxlbWVudCogZWxlbWVudCwgY29uc3QgS1VSTCYgdQogICAgIGlmICghbV9kYXRhT2JqZWN0KQog
ICAgICAgICByZXR1cm47CiAKLSAgICBtX2RyYWdTdG9yYWdlVXBkYXRlZCA9IHRydWU7Ci0gICAg
bV9kYXRhT2JqZWN0LT5zZXREYXRhKG1pbWVUeXBlVVJMLCB1cmwpOwotICAgIG1fZGF0YU9iamVj
dC0+c2V0VXJsVGl0bGUodGl0bGUpOworICAgIG1fZGF0YU9iamVjdC0+c2V0VVJMKHVybCwgdGl0
bGUpOwogCiAgICAgLy8gV3JpdGUgdGhlIGJ5dGVzIGluIHRoZSBpbWFnZSB0byB0aGUgZmlsZSBm
b3JtYXQuCiAgICAgd3JpdGVJbWFnZVRvRGF0YU9iamVjdChtX2RhdGFPYmplY3QuZ2V0KCksIGVs
ZW1lbnQsIHVybCk7CiAKICAgICAvLyBQdXQgaW1nIHRhZyBvbiB0aGUgY2xpcGJvYXJkIHJlZmVy
ZW5jaW5nIHRoZSBpbWFnZQotICAgIG1fZGF0YU9iamVjdC0+c2V0RGF0YShtaW1lVHlwZVRleHRI
VE1MLCBjcmVhdGVNYXJrdXAoZWxlbWVudCwgSW5jbHVkZU5vZGUsIDAsIFJlc29sdmVBbGxVUkxz
KSk7CisgICAgbV9kYXRhT2JqZWN0LT5zZXRIVE1MKGNyZWF0ZU1hcmt1cChlbGVtZW50LCBJbmNs
dWRlTm9kZSwgMCwgUmVzb2x2ZUFsbFVSTHMpLCBLVVJMKCkpOwogfQogCiB2b2lkIENsaXBib2Fy
ZENocm9taXVtOjp3cml0ZVVSTChjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdGl0bGUs
IEZyYW1lKikKQEAgLTI4NiwxNiArNDMyLDEzIEBAIHZvaWQgQ2xpcGJvYXJkQ2hyb21pdW06Ondy
aXRlVVJMKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB0aXRsZSwgRnJhbWUqKQogICAg
ICAgICByZXR1cm47CiAgICAgQVNTRVJUKCF1cmwuaXNFbXB0eSgpKTsKIAotICAgIG1fZHJhZ1N0
b3JhZ2VVcGRhdGVkID0gdHJ1ZTsKLSAgICBtX2RhdGFPYmplY3QtPnNldERhdGEobWltZVR5cGVV
UkwsIHVybCk7Ci0gICAgbV9kYXRhT2JqZWN0LT5zZXRVcmxUaXRsZSh0aXRsZSk7CisgICAgbV9k
YXRhT2JqZWN0LT5zZXRVUkwodXJsLCB0aXRsZSk7CiAKICAgICAvLyBUaGUgVVJMIGNhbiBhbHNv
IGJlIHVzZWQgYXMgcGxhaW4gdGV4dC4KICAgICBtX2RhdGFPYmplY3QtPnNldERhdGEobWltZVR5
cGVUZXh0UGxhaW4sIHVybC5zdHJpbmcoKSk7CiAKICAgICAvLyBUaGUgVVJMIGNhbiBhbHNvIGJl
IHVzZWQgYXMgYW4gSFRNTCBmcmFnbWVudC4KLSAgICBtX2RhdGFPYmplY3QtPnNldERhdGEobWlt
ZVR5cGVUZXh0SFRNTCwgdXJsVG9NYXJrdXAodXJsLCB0aXRsZSkpOwotICAgIG1fZGF0YU9iamVj
dC0+c2V0SHRtbEJhc2VVcmwodXJsKTsKKyAgICBtX2RhdGFPYmplY3QtPnNldEhUTUwodXJsVG9N
YXJrdXAodXJsLCB0aXRsZSksIHVybCk7CiB9CiAKIHZvaWQgQ2xpcGJvYXJkQ2hyb21pdW06Ondy
aXRlUmFuZ2UoUmFuZ2UqIHNlbGVjdGVkUmFuZ2UsIEZyYW1lKiBmcmFtZSkKQEAgLTMwNCw5ICs0
NDcsOSBAQCB2b2lkIENsaXBib2FyZENocm9taXVtOjp3cml0ZVJhbmdlKFJhbmdlKiBzZWxlY3Rl
ZFJhbmdlLCBGcmFtZSogZnJhbWUpCiAgICAgaWYgKCFtX2RhdGFPYmplY3QpCiAgICAgICAgICBy
ZXR1cm47CiAKLSAgICBtX2RyYWdTdG9yYWdlVXBkYXRlZCA9IHRydWU7Ci0gICAgbV9kYXRhT2Jq
ZWN0LT5zZXREYXRhKG1pbWVUeXBlVGV4dEhUTUwsIGNyZWF0ZU1hcmt1cChzZWxlY3RlZFJhbmdl
LCAwLCBBbm5vdGF0ZUZvckludGVyY2hhbmdlLCBmYWxzZSwgUmVzb2x2ZU5vbkxvY2FsVVJMcykp
OwotICAgIG1fZGF0YU9iamVjdC0+c2V0SHRtbEJhc2VVcmwoZnJhbWUtPmRvY3VtZW50KCktPnVy
bCgpKTsKKyAgICBtX2RhdGFPYmplY3QtPnNldEhUTUwoCisgICAgICAgIGNyZWF0ZU1hcmt1cChz
ZWxlY3RlZFJhbmdlLCAwLCBBbm5vdGF0ZUZvckludGVyY2hhbmdlLCBmYWxzZSwgUmVzb2x2ZU5v
bkxvY2FsVVJMcyksCisgICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT51cmwoKSk7CiAKICAgICBT
dHJpbmcgc3RyID0gZnJhbWUtPmVkaXRvcigpLT5zZWxlY3RlZFRleHQoKTsKICNpZiBPUyhXSU5E
T1dTKQpAQCAtMzI3LDcyICs0NzAsMjEgQEAgdm9pZCBDbGlwYm9hcmRDaHJvbWl1bTo6d3JpdGVQ
bGFpblRleHQoY29uc3QgU3RyaW5nJiB0ZXh0KQogI2VuZGlmCiAgICAgcmVwbGFjZU5CU1BXaXRo
U3BhY2Uoc3RyKTsKIAotICAgIG1fZHJhZ1N0b3JhZ2VVcGRhdGVkID0gdHJ1ZTsKICAgICBtX2Rh
dGFPYmplY3QtPnNldERhdGEobWltZVR5cGVUZXh0UGxhaW4sIHN0cik7CiB9CiAKIGJvb2wgQ2xp
cGJvYXJkQ2hyb21pdW06Omhhc0RhdGEoKQogewogICAgIEFTU0VSVChpc0ZvckRyYWdBbmREcm9w
KCkpOwotICAgIGlmICghbV9kYXRhT2JqZWN0KQotICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICByZXR1cm4gbV9kYXRhT2JqZWN0LT5oYXNEYXRhKCk7CisgICAgLy8gRklYTUU6IFBlcmhhcHMg
dGhpcyBpcyB0aGUgcmVhc29uIHdlIGNhbid0IGRyYWcgYW5kIGRyb3Agd2l0aCBubyBkYXRhIHNl
dD8KKyAgICByZXR1cm4gbV9kYXRhT2JqZWN0LT5pdGVtcygpLT5sZW5ndGgoKSA+IDA7CiB9CiAK
ICNpZiBFTkFCTEUoREFUQV9UUkFOU0ZFUl9JVEVNUykKIFBhc3NSZWZQdHI8RGF0YVRyYW5zZmVy
SXRlbUxpc3Q+IENsaXBib2FyZENocm9taXVtOjppdGVtcygpCiB7Ci0gICAgaWYgKCFtX2RhdGFP
YmplY3QgfHwgKHBvbGljeSgpICE9IENsaXBib2FyZFJlYWRhYmxlICYmIHBvbGljeSgpICE9IENs
aXBib2FyZFdyaXRhYmxlKSkgewotICAgICAgICAvLyBSZXR1cm4gYW4gdW5hc3NvY2lhdGVkIGVt
cHR5IGxpc3QuCi0gICAgICAgIHJldHVybiBEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtOjpj
cmVhdGUodGhpcywgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
KTsKLSAgICB9Ci0KLSAgICBpZiAoIW1faXRlbUxpc3QpCi0gICAgICAgIG1faXRlbUxpc3QgPSBE
YXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtOjpjcmVhdGUodGhpcywgbV9mcmFtZS0+ZG9jdW1l
bnQoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKLQotICAgIHJldHVybiBtX2l0ZW1MaXN0
OwotfQotCi0vLyBGSVhNRTogaW50ZWdyYXRlIENocm9taXVtRGF0YU9iamVjdCBhbmQgRGF0YVRy
YW5zZmVySXRlbUxpc3QgcmF0aGVyIHRoYW4gaG9sZGluZyB0aGVtIHNlcGFyYXRlbHkgYW5kIGtl
ZXBpbmcgdGhlbSBzeW5jZWQuCi12b2lkIENsaXBib2FyZENocm9taXVtOjptYXlVcGRhdGVJdGVt
cyhWZWN0b3I8UmVmUHRyPERhdGFUcmFuc2Zlckl0ZW0+ID4mIGl0ZW1zKQotewotICAgIGlmICgh
aXRlbXMuaXNFbXB0eSgpICYmICFzdG9yYWdlSGFzVXBkYXRlZCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpdGVtcy5jbGVhcigpOwotCi0gICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCA9IG1fZnJhbWUtPmRvY3VtZW50KCktPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKTsKLQotICAgIGlmIChpc0ZvckNvcHlBbmRQYXN0ZSgpICYmIHBvbGljeSgpID09
IENsaXBib2FyZFJlYWRhYmxlKSB7Ci0gICAgICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCB0aGUgdHlw
ZXMgYW5kIGFkZCB0aGVtLgotICAgICAgICBIYXNoU2V0PFN0cmluZz4gdHlwZXMgPSBtX2RhdGFP
YmplY3QtPnR5cGVzKCk7Ci0gICAgICAgIGZvciAoSGFzaFNldDxTdHJpbmc+Ojpjb25zdF9pdGVy
YXRvciBpdCA9IHR5cGVzLmJlZ2luKCk7IGl0ICE9IHR5cGVzLmVuZCgpOyArK2l0KQotICAgICAg
ICAgICAgaXRlbXMuYXBwZW5kKERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bTo6Y3JlYXRlRnJvbVBh
c3RlYm9hcmQodGhpcywgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgKml0KSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICBTdHJpbmcgcGxh
aW5UZXh0ID0gbV9kYXRhT2JqZWN0LT5nZXREYXRhKG1pbWVUeXBlVGV4dFBsYWluLCBzdWNjZXNz
KTsKLSAgICBpZiAoc3VjY2VzcykKLSAgICAgICAgaXRlbXMuYXBwZW5kKERhdGFUcmFuc2Zlckl0
ZW1DaHJvbWl1bTo6Y3JlYXRlKHRoaXMsIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIHBsYWluVGV4
dCwgbWltZVR5cGVUZXh0UGxhaW4pKTsKLQotICAgIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICBTdHJp
bmcgaHRtbFRleHQgPSBtX2RhdGFPYmplY3QtPmdldERhdGEobWltZVR5cGVUZXh0SFRNTCwgc3Vj
Y2Vzcyk7Ci0gICAgaWYgKHN1Y2Nlc3MpCi0gICAgICAgIGl0ZW1zLmFwcGVuZChEYXRhVHJhbnNm
ZXJJdGVtQ2hyb21pdW06OmNyZWF0ZSh0aGlzLCBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBodG1s
VGV4dCwgbWltZVR5cGVUZXh0SFRNTCkpOwotCi0gICAgaWYgKG1fZGF0YU9iamVjdC0+Y29udGFp
bnNGaWxlbmFtZXMoKSkgewotICAgICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVz
ID0gbV9kYXRhT2JqZWN0LT5maWxlbmFtZXMoKTsKLSAgICAgICAgZm9yIChWZWN0b3I8U3RyaW5n
Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBmaWxlbmFtZXMuYmVnaW4oKTsgaXQgIT0gZmlsZW5hbWVz
LmVuZCgpOyArK2l0KQotICAgICAgICAgICAgaXRlbXMuYXBwZW5kKERhdGFUcmFuc2Zlckl0ZW1D
aHJvbWl1bTo6Y3JlYXRlKHRoaXMsIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIEZpbGU6OmNyZWF0
ZSgqaXQpKSk7Ci0gICAgfQotICAgIG1fZHJhZ1N0b3JhZ2VVcGRhdGVkID0gZmFsc2U7Ci19Ci0K
LWJvb2wgQ2xpcGJvYXJkQ2hyb21pdW06OnN0b3JhZ2VIYXNVcGRhdGVkKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gKGlzRm9yQ29weUFuZFBhc3RlKCkgJiYgcGxhdGZvcm1DbGlwYm9hcmRDaGFuZ2Vk
KCkpIHx8IChpc0ZvckRyYWdBbmREcm9wKCkgJiYgbV9kcmFnU3RvcmFnZVVwZGF0ZWQpOworICAg
IHJldHVybiBEYXRhVHJhbnNmZXJJdGVtTGlzdFdyYXBwZXI6OmNyZWF0ZSh0aGlzLCBtX2RhdGFP
YmplY3QtPml0ZW1zKCkpOwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5oCmluZGV4IDMwZTg3MzlhMjM4Nzcz
M2RiMTdmOTQ1ODZjZjc3MDIzMzcyZTM0NWQuLjg5MDE4MjBkM2FjZTkzMTBhNGNlYTBjYWExYmYw
Zjg3YjIzOWY0N2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVt
L0NsaXBib2FyZENocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vQ2xpcGJvYXJkQ2hyb21pdW0uaApAQCAtNTEsMTcgKzUxLDE1IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2xpcGJvYXJkQ2hyb21pdW0+IGNyZWF0
ZSgKICAgICAgICAgICAgIENsaXBib2FyZFR5cGUsIFBhc3NSZWZQdHI8Q2hyb21pdW1EYXRhT2Jq
ZWN0PiwgQ2xpcGJvYXJkQWNjZXNzUG9saWN5LCBGcmFtZSopOwogCi0gICAgICAgIC8vIFJldHVy
bnMgdGhlIGZpbGUgbmFtZSAobm90IGluY2x1ZGluZyB0aGUgZXh0ZW5zaW9uKS4gVGhpcyByZW1v
dmVzIGFueQotICAgICAgICAvLyBpbnZhbGlkIGZpbGUgc3lzdGVtIGNoYXJhY3RlcnMgYXMgd2Vs
bCBhcyBtYWtpbmcgc3VyZSB0aGUKLSAgICAgICAgLy8gcGF0aCArIGV4dGVuc2lvbiBpcyBub3Qg
YmlnZ2VyIHRoYW4gYWxsb3dlZCBieSB0aGUgZmlsZSBzeXN0ZW0uCi0gICAgICAgIC8vIFRoaXMg
bWF5IGNoYW5nZSB0aGUgZmlsZSBleHRlbnNpb24gaW4gZGF0YU9iamVjdC4KLSAgICAgICAgc3Rh
dGljIFN0cmluZyB2YWxpZGF0ZUZpbGVOYW1lKGNvbnN0IFN0cmluZyYgdGl0bGUsIENocm9taXVt
RGF0YU9iamVjdCogZGF0YU9iamVjdCk7CisgICAgICAgIC8vIFZhbGlkYXRlcyBhIGZpbGVuYW1l
ICh3aXRob3V0IHRoZSBleHRlbnNpb24pIGFuZCB0aGUgZXh0ZW5zaW9uLiBUaGlzIHJlbW92ZXMg
YW55IGludmFsaWQKKyAgICAgICAgLy8gZmlsZSBzeXN0ZW0gY2hhcmFjdGVycyBhcyB3ZWxsIGFz
IG1ha2luZyBzdXJlIHRoZSBwYXRoICsgZXh0ZW5zaW9uIGlzIG5vdCBiaWdnZXIgdGhhbgorICAg
ICAgICAvLyBhbGxvd2VkIGJ5IHRoZSBmaWxlIHN5c3RlbS4KKyAgICAgICAgc3RhdGljIHZvaWQg
dmFsaWRhdGVGaWxlbmFtZShTdHJpbmcmIG5hbWUsIFN0cmluZyYgZXh0ZW5zaW9uKTsKIAogICAg
ICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJEYXRhKGNvbnN0IFN0cmluZyYgdHlwZSk7CiAgICAgICAg
IHZvaWQgY2xlYXJBbGxEYXRhKCk7CiAgICAgICAgIFN0cmluZyBnZXREYXRhKGNvbnN0IFN0cmlu
ZyYgdHlwZSwgYm9vbCYgc3VjY2VzcykgY29uc3Q7CiAgICAgICAgIGJvb2wgc2V0RGF0YShjb25z
dCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSk7Ci0gICAgICAgIGJvb2wgcGxhdGZv
cm1DbGlwYm9hcmRDaGFuZ2VkKCkgY29uc3Q7CiAKICAgICAgICAgLy8gZXh0ZW5zaW9ucyBiZXlv
bmQgSUUncyBBUEkKICAgICAgICAgdmlydHVhbCBIYXNoU2V0PFN0cmluZz4gdHlwZXMoKSBjb25z
dDsKQEAgLTg1LDI2ICs4MywxNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNpZiBFTkFCTEUo
REFUQV9UUkFOU0ZFUl9JVEVNUykKICAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPERhdGFUcmFu
c2Zlckl0ZW1MaXN0PiBpdGVtcygpOwotCi0gICAgICAgIC8vIEludGVybmFsIHJvdXRpbmVzIHRv
IGtlZXAgdGhlIGxpc3QgcmV0dXJuZWQgYnkgaXRlbXMoKSAoaS5lLiBtX2l0ZW1MaXN0KSBzeW5j
aHJvbml6ZWQgd2l0aCB0aGUgY29udGVudCBvZiB0aGUgY2xpcGJvYXJkIGRhdGEuCi0gICAgICAg
IHZvaWQgbWF5VXBkYXRlSXRlbXMoVmVjdG9yPFJlZlB0cjxEYXRhVHJhbnNmZXJJdGVtPiA+JiBp
dGVtcyk7Ci0gICAgICAgIGJvb2wgc3RvcmFnZUhhc1VwZGF0ZWQoKSBjb25zdDsKICNlbmRpZgor
ICAgICAgICBGcmFtZSogZnJhbWUoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lOyB9CiAKICAgICBw
cml2YXRlOgogICAgICAgICBDbGlwYm9hcmRDaHJvbWl1bShDbGlwYm9hcmRUeXBlLCBQYXNzUmVm
UHRyPENocm9taXVtRGF0YU9iamVjdD4sIENsaXBib2FyZEFjY2Vzc1BvbGljeSwgRnJhbWUqKTsK
IAotICAgICAgICB2b2lkIHJlc2V0RnJvbUNsaXBib2FyZCgpOwogICAgICAgICB2b2lkIHNldERy
YWdJbWFnZShDYWNoZWRJbWFnZSosIE5vZGUqLCBjb25zdCBJbnRQb2ludCYpOwogICAgICAgICBS
ZWZQdHI8Q2hyb21pdW1EYXRhT2JqZWN0PiBtX2RhdGFPYmplY3Q7CiAgICAgICAgIEZyYW1lKiBt
X2ZyYW1lOwotCi0jaWYgRU5BQkxFKERBVEFfVFJBTlNGRVJfSVRFTVMpCi0gICAgICAgIFJlZlB0
cjxEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtPiBtX2l0ZW1MaXN0OwotI2VuZGlmCi0KLSAg
ICAgICAgdWludDY0X3QgbV9vcmlnaW5hbFNlcXVlbmNlTnVtYmVyOwotICAgICAgICBib29sIG1f
ZHJhZ1N0b3JhZ2VVcGRhdGVkOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9t
aXVtTGludXguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJk
Q2hyb21pdW1MaW51eC5jcHAKaW5kZXggMmM4OWY2ZThlZTk5OTIwMjkxMmIzZDhkYjliZjViYjc3
MjU3N2E5Ny4uOTU5YjM2NjUyZmUzOTU2MDE3ZjdkNjQ1MDEwYzUyMzg1M2MzYjM4ZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW1M
aW51eC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJk
Q2hyb21pdW1MaW51eC5jcHAKQEAgLTI3LDE1ICsyNywxMyBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIkNsaXBib2FyZENocm9taXVtLmgiCiAKLSNpbmNsdWRlICJDaHJvbWl1bURh
dGFPYmplY3QuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLVN0cmluZyBDbGlwYm9hcmRDaHJvbWl1bTo6dmFsaWRhdGVGaWxlTmFtZShjb25z
dCBTdHJpbmcmIHRpdGxlLCBDaHJvbWl1bURhdGFPYmplY3QqIGRhdGFPYmplY3QpCit2b2lkIENs
aXBib2FyZENocm9taXVtOjp2YWxpZGF0ZUZpbGVuYW1lKFN0cmluZyYgbmFtZSwgU3RyaW5nJiBl
eHRlbnNpb24pCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gdGl0bGU7CiB9
CiAKIH0gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bU1hYy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bU1hYy5jcHAKaW5kZXggMzgwMjE0
MDJlYjkyOWUzY2M2ZTI1MWQyMjNmMDA3NDY2YWRmMmYyNy4uYmNlYWNlYmRhODcwNmYzOWY0MDhk
ZmRjNTc2NDRjYWIyNzM2NTAxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW1NYWMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtTWFjLmNwcApAQCAtMjcsMTEgKzI3LDgg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDbGlwYm9hcmRDaHJvbWl1bS5oIgog
Ci0jaW5jbHVkZSAiQ2hyb21pdW1EYXRhT2JqZWN0LmgiCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAKLQogLy8gRmlsZW5hbWUgbGVuZ3RoIGFuZCBjaGFyYWN0ZXItc2V0IGxpbWl0cyB2YXJ5
IGJ5IGZpbGVzeXN0ZW0sIGFuZCB0aGVyZSdzIG5vCiAvLyByZWFsIHdheSB0byB0ZWxsIHdoYXQg
ZmlsZXN5c3RlbSBpcyBpbiB1c2UuIFNpbmNlIEhGUysgaXMgYnkgZmFyIHRoZSBtb3N0CiAvLyBj
b21tb24sIHdlJ2xsIGFiaWRlIGJ5IGl0cyBsaW1pdHMsIHdoaWNoIGFyZSAyNTUgVW5pY29kZSBj
aGFyYWN0ZXJzIChzbGlnaHRseQpAQCAtMzksNyArMzYsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAvLyByZWFsbHkgd29ydGggZGVhbGluZyB3aXRoIGhlcmUuKQogc3RhdGljIGNvbnN0IHVuc2ln
bmVkIE1heEhGU0ZpbGVuYW1lTGVuZ3RoID0gMjU1OwogCi0KIHN0YXRpYyBib29sIGlzSW52YWxp
ZEZpbGVDaGFyYWN0ZXIoVUNoYXIgYykKIHsKICAgICAvLyBIRlMrIGJhc2ljYWxseSBhbGxvd3Mg
YW55dGhpbmcgYnV0ICcvJy4gRm9yIHNhbml0eSdzIHNha2Ugd2UnbGwgZGlzYWxsb3cKQEAgLTQ3
LDIzICs0MywxOCBAQCBzdGF0aWMgYm9vbCBpc0ludmFsaWRGaWxlQ2hhcmFjdGVyKFVDaGFyIGMp
CiAgICAgcmV0dXJuIGMgPCAnICcgfHwgYyA9PSAweDdGIHx8IGMgPT0gJy8nOwogfQogCi1TdHJp
bmcgQ2xpcGJvYXJkQ2hyb21pdW06OnZhbGlkYXRlRmlsZU5hbWUoY29uc3QgU3RyaW5nJiB0aXRs
ZSwgQ2hyb21pdW1EYXRhT2JqZWN0KiBkYXRhT2JqZWN0KQordm9pZCBDbGlwYm9hcmRDaHJvbWl1
bTo6dmFsaWRhdGVGaWxlbmFtZShTdHJpbmcmIG5hbWUsIFN0cmluZyYgZXh0ZW5zaW9uKQogewog
ICAgIC8vIFJlbW92ZSBhbnkgaW52YWxpZCBmaWxlIHN5c3RlbSBjaGFyYWN0ZXJzLCBlc3BlY2lh
bGx5ICIvIi4KLSAgICBTdHJpbmcgcmVzdWx0ID0gdGl0bGUucmVtb3ZlQ2hhcmFjdGVycyhpc0lu
dmFsaWRGaWxlQ2hhcmFjdGVyKTsKLSAgICBTdHJpbmcgZXh0ZW5zaW9uID0gZGF0YU9iamVjdC0+
ZmlsZUV4dGVuc2lvbigpLnJlbW92ZUNoYXJhY3RlcnMoJmlzSW52YWxpZEZpbGVDaGFyYWN0ZXIp
OworICAgIG5hbWUgPSBuYW1lLnJlbW92ZUNoYXJhY3RlcnMoJmlzSW52YWxpZEZpbGVDaGFyYWN0
ZXIpOworICAgIGV4dGVuc2lvbiA9IGV4dGVuc2lvbi5yZW1vdmVDaGFyYWN0ZXJzKCZpc0ludmFs
aWRGaWxlQ2hhcmFjdGVyKTsKIAogICAgIC8vIFJlbW92ZSBhIHJpZGljdWxvdXNseS1sb25nIGV4
dGVuc2lvbi4KICAgICBpZiAoZXh0ZW5zaW9uLmxlbmd0aCgpID49IE1heEhGU0ZpbGVuYW1lTGVu
Z3RoKQotICAgICAgICBleHRlbnNpb24gPSAiIjsKKyAgICAgICAgZXh0ZW5zaW9uID0gU3RyaW5n
KCk7CiAgICAgCiAgICAgLy8gVHJ1bmNhdGUgYW4gb3Zlcmx5LWxvbmcgZmlsZW5hbWUuCi0gICAg
aW50IG92ZXJmbG93ID0gcmVzdWx0Lmxlbmd0aCgpICsgZXh0ZW5zaW9uLmxlbmd0aCgpIC0gTWF4
SEZTRmlsZW5hbWVMZW5ndGg7Ci0gICAgaWYgKG92ZXJmbG93ID4gMCkgCi0gICAgICAgIHJlc3Vs
dC5yZW1vdmUocmVzdWx0Lmxlbmd0aCgpIC0gb3ZlcmZsb3csIG92ZXJmbG93KTsKLSAgICAKLSAg
ICBkYXRhT2JqZWN0LT5zZXRGaWxlRXh0ZW5zaW9uKGV4dGVuc2lvbik7Ci0gICAgcmV0dXJuIHJl
c3VsdDsKKyAgICBuYW1lLnRydW5jYXRlKE1heEhGU0ZpbGVuYW1lTGVuZ3RoIC0gZXh0ZW5zaW9u
Lmxlbmd0aCgpKTsKIH0KIAogfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtV2luLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtV2luLmNw
cAppbmRleCBkOWJiZWI1ZGQzZDM3YTI1NDg5MTRhYWJjZWYwM2VkOWFmYzBiY2Q3Li5iOGFmNjVk
Njk5MzM1Y2U5MWMyYTVhNjZmODU3YTVmYzlhNGZmOTdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bVdpbi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW1XaW4uY3BwCkBA
IC0yNyw4ICsyNyw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ2xpcGJvYXJk
Q2hyb21pdW0uaCIKIAotI2luY2x1ZGUgIkNocm9taXVtRGF0YU9iamVjdC5oIgotCiAjaW5jbHVk
ZSA8c2hsd2FwaS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00MCwxNyArMzgsMTYgQEAg
c3RhdGljIGJvb2wgaXNJbnZhbGlkRmlsZUNoYXJhY3RlcihVQ2hhciBjKQogICAgIHJldHVybiAo
UGF0aEdldENoYXJUeXBlKGMpICYgKEdDVF9MRk5DSEFSIHwgR0NUX1NIT1JUQ0hBUikpID09IDA7
CiB9CiAKLVN0cmluZyBDbGlwYm9hcmRDaHJvbWl1bTo6dmFsaWRhdGVGaWxlTmFtZShjb25zdCBT
dHJpbmcmIHRpdGxlLCBDaHJvbWl1bURhdGFPYmplY3QqIGRhdGFPYmplY3QpCit2b2lkIENsaXBi
b2FyZENocm9taXVtOjp2YWxpZGF0ZUZpbGVuYW1lKFN0cmluZyYgbmFtZSwgU3RyaW5nJiBleHRl
bnNpb24pCiB7CiAgICAgLy8gUmVtb3ZlIGFueSBpbnZhbGlkIGZpbGUgc3lzdGVtIGNoYXJhY3Rl
cnMuCi0gICAgU3RyaW5nIHJlc3VsdCA9IHRpdGxlLnJlbW92ZUNoYXJhY3RlcnMoJmlzSW52YWxp
ZEZpbGVDaGFyYWN0ZXIpOwotICAgIGlmIChyZXN1bHQubGVuZ3RoKCkgKyBkYXRhT2JqZWN0LT5m
aWxlRXh0ZW5zaW9uKCkubGVuZ3RoKCkgKyAxID49IE1BWF9QQVRIKSB7Ci0gICAgICAgIGlmIChk
YXRhT2JqZWN0LT5maWxlRXh0ZW5zaW9uKCkubGVuZ3RoKCkgKyAxID49IE1BWF9QQVRIKQotICAg
ICAgICAgICAgZGF0YU9iamVjdC0+c2V0RmlsZUV4dGVuc2lvbigiIik7Ci0gICAgICAgIGlmIChy
ZXN1bHQubGVuZ3RoKCkgKyBkYXRhT2JqZWN0LT5maWxlRXh0ZW5zaW9uKCkubGVuZ3RoKCkgKyAx
ID49IE1BWF9QQVRIKQotICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnN1YnN0cmluZygwLCBN
QVhfUEFUSCAtIGRhdGFPYmplY3QtPmZpbGVFeHRlbnNpb24oKS5sZW5ndGgoKSAtIDEpOwotICAg
IH0KLSAgICByZXR1cm4gcmVzdWx0OworICAgIG5hbWUgPSBuYW1lLnJlbW92ZUNoYXJhY3RlcnMo
JmlzSW52YWxpZEZpbGVDaGFyYWN0ZXIpOworICAgIGV4dGVuc2lvbiA9IGV4dGVuc2lvbi5yZW1v
dmVDaGFyYWN0ZXJzKCZpc0ludmFsaWRGaWxlQ2hhcmFjdGVyKTsKKworICAgIGlmIChleHRlbnNp
b24ubGVuZ3RoKCkgKyAxID49IE1BWF9QQVRIKQorICAgICAgICBleHRlbnNpb24gPSBTdHJpbmco
KTsKKworICAgIG5hbWUudHJ1bmNhdGUoTUFYX1BBVEggLSBleHRlbnNpb24ubGVuZ3RoKCkgLSAx
KTsKIH0KIAogfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZFV0aWxpdGllc0Nocm9taXVtLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZFV0aWxpdGllc0Nocm9taXVt
LmNwcAppbmRleCA0NzU3MmM1Yjg4YzMwNGEzZjRiN2IxMzJkMjQzMzc1ZTA2ZTBjYmNkLi42MDQw
OTg4MTc5NGU0MWZiZmU5MTFkOGEyNDBiNmM1MGRmYjhmZDlkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRVdGlsaXRpZXNDaHJvbWl1bS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkVXRpbGl0aWVz
Q2hyb21pdW0uY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1
ZGUgIlBhc3RlYm9hcmQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUg
IlBsYXRmb3JtU3VwcG9ydC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ0LDYgKzQ1
LDExIEBAIFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIgY3VycmVudFBhc3RlYm9h
cmRCdWZmZXIoKQogICAgICAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6U3RhbmRhcmRCdWZmZXI7CiB9
CiAKK2Jvb2wgcGFzdGVib2FyZEhhc0NoYW5nZWQoUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2Fy
ZEJ1ZmZlciBidWZmZXIsIHVpbnQ2NF90IG9yaWdpbmFsU2VxdWVuY2VOdW1iZXIpCit7CisgICAg
cmV0dXJuIG9yaWdpbmFsU2VxdWVuY2VOdW1iZXIgIT0gUGxhdGZvcm1TdXBwb3J0OjpjbGlwYm9h
cmRTZXF1ZW5jZU51bWJlcihidWZmZXIpOworfQorCiAjaWYgT1MoV0lORE9XUykKIHZvaWQgcmVw
bGFjZU5ld2xpbmVzV2l0aFdpbmRvd3NTdHlsZU5ld2xpbmVzKFN0cmluZyYgc3RyKQogewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkVXRpbGl0
aWVzQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2Fy
ZFV0aWxpdGllc0Nocm9taXVtLmgKaW5kZXggN2FlNTAwNDNhMTZiOTZiMzIxOTI2OTdkNDA4YjIz
OGI1OGMwYTVlOS4uN2ZjNTZmZDVmNzZlYjc1MjM0OTNhODhjYzA1NDVjYzQ4YjA0NTQxNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkVXRpbGl0
aWVzQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlw
Ym9hcmRVdGlsaXRpZXNDaHJvbWl1bS5oCkBAIC00MCw2ICs0MCw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIGNsYXNzIEtVUkw7CiAKIFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIg
Y3VycmVudFBhc3RlYm9hcmRCdWZmZXIoKTsKK2Jvb2wgcGFzdGVib2FyZEhhc0NoYW5nZWQoUGFz
dGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlciwgdWludDY0X3QpOwogI2lmIE9TKFdJTkRP
V1MpCiB2b2lkIHJlcGxhY2VOZXdsaW5lc1dpdGhXaW5kb3dzU3R5bGVOZXdsaW5lcyhTdHJpbmcm
KTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0v
RGF0YVRyYW5zZmVySXRlbUNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2No
cm9taXVtL0RhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bS5jcHAKaW5kZXggN2ExMTMyNDg5ZDZjZjUz
Y2YyMmY5MmM5NDhmZDA5MmMyNDI0MjEwOS4uN2M1NWEwMTcwMmY4MjFjMTMyMDUwYWNmMzdlYzcz
Yzk4MzVjYzA2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0v
RGF0YVRyYW5zZmVySXRlbUNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jaHJvbWl1bS9EYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0uY3BwCkBAIC0zNCwxMjUgKzM0LDMy
MyBAQAogI2lmIEVOQUJMRShEQVRBX1RSQU5TRkVSX0lURU1TKQogCiAjaW5jbHVkZSAiQmxvYi5o
IgotI2luY2x1ZGUgIkNsaXBib2FyZC5oIgotI2luY2x1ZGUgIkNsaXBib2FyZENocm9taXVtLmgi
CiAjaW5jbHVkZSAiQ2xpcGJvYXJkTWltZVR5cGVzLmgiCiAjaW5jbHVkZSAiQ2xpcGJvYXJkVXRp
bGl0aWVzQ2hyb21pdW0uaCIKLSNpbmNsdWRlICJEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVt
LmgiCi0jaW5jbHVkZSAiRmlsZS5oIgorI2luY2x1ZGUgIkRhdGFUcmFuc2Zlckl0ZW0uaCIKICNp
bmNsdWRlICJQbGF0Zm9ybVN1cHBvcnQuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKICNp
bmNsdWRlICJTdHJpbmdDYWxsYmFjay5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NS
ZWZQdHI8RGF0YVRyYW5zZmVySXRlbUNocm9taXVtPiBEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW06
OmNyZWF0ZUZyb21QYXN0ZWJvYXJkKFBhc3NSZWZQdHI8Q2xpcGJvYXJkPiBvd25lciwgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiB0eXBlKQorRGF0YVRyYW5z
ZmVySXRlbUNocm9taXVtOjp+RGF0YVRyYW5zZmVySXRlbUNocm9taXVtKCkKIHsKLSAgICBpZiAo
dHlwZSA9PSBtaW1lVHlwZVRleHRQbGFpbiB8fCB0eXBlID09IG1pbWVUeXBlVGV4dEhUTUwpCi0g
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGF0YVRyYW5zZmVySXRlbUNocm9taXVtKG93bmVy
LCBjb250ZXh0LCBQYXN0ZWJvYXJkU291cmNlLCBEYXRhVHJhbnNmZXJJdGVtOjpraW5kU3RyaW5n
LCB0eXBlLCBTdHJpbmcoKSkpOwotICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGF0YVRyYW5zZmVy
SXRlbUNocm9taXVtKG93bmVyLCBjb250ZXh0LCBQYXN0ZWJvYXJkU291cmNlLCBEYXRhVHJhbnNm
ZXJJdGVtOjpraW5kRmlsZSwgdHlwZSwgIiIpKTsKIH0KIAotUGFzc1JlZlB0cjxEYXRhVHJhbnNm
ZXJJdGVtQ2hyb21pdW0+IERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bTo6Y3JlYXRlKFBhc3NSZWZQ
dHI8Q2xpcGJvYXJkPiBvd25lciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgZGF0YSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBTdHJpbmcmIHR5cGUpCit2b2lkIERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bTo6Z2V0
QXNTdHJpbmcoUGFzc1JlZlB0cjxTdHJpbmdDYWxsYmFjaz4sIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqKSBjb25zdAogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGF0YVRyYW5zZmVySXRlbUNo
cm9taXVtKG93bmVyLCBjb250ZXh0LCBEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW06OkludGVybmFs
U291cmNlLCBraW5kU3RyaW5nLCB0eXBlLCBkYXRhKSk7CiB9CiAKLVBhc3NSZWZQdHI8RGF0YVRy
YW5zZmVySXRlbUNocm9taXVtPiBEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW06OmNyZWF0ZShQYXNz
UmVmUHRyPENsaXBib2FyZD4gb3duZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPEZpbGU+IGZpbGUpCitQYXNz
UmVmUHRyPEJsb2I+IERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bTo6Z2V0QXNGaWxlKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bShvd25l
ciwgY29udGV4dCwgRGF0YVRyYW5zZmVySXRlbUNocm9taXVtOjpJbnRlcm5hbFNvdXJjZSwgZmls
ZSkpOworICAgIHJldHVybiAwOwogfQogCi1EYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW06OkRhdGFU
cmFuc2Zlckl0ZW1DaHJvbWl1bShQYXNzUmVmUHRyPENsaXBib2FyZD4gb3duZXIsIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIERhdGFTb3VyY2Ugc291cmNlLCBjb25zdCBTdHJpbmcm
IGtpbmQsIGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKQotICAgIDogbV9j
b250ZXh0KGNvbnRleHQpCi0gICAgLCBtX293bmVyKG93bmVyKQotICAgICwgbV9raW5kKGtpbmQp
Ci0gICAgLCBtX3R5cGUodHlwZSkKLSAgICAsIG1fc291cmNlKHNvdXJjZSkKK1N0cmluZyBEYXRh
VHJhbnNmZXJJdGVtQ2hyb21pdW06OmxlZ2FjeUdldEFzU3RyaW5nKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gU3RyaW5nKCk7Cit9CisKK1N0cmluZyBEYXRhVHJhbnNmZXJVUklMaXN0SXRlbTo6a2lu
ZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIERhdGFUcmFuc2Zlckl0ZW06OmtpbmRTdHJpbmc7Cit9
CisKK1N0cmluZyBEYXRhVHJhbnNmZXJVUklMaXN0SXRlbTo6dHlwZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1pbWVUeXBlVGV4dFVSSUxpc3Q7Cit9CisKK1N0cmluZyBEYXRhVHJhbnNmZXJIVE1M
SXRlbTo6a2luZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIERhdGFUcmFuc2Zlckl0ZW06OmtpbmRT
dHJpbmc7Cit9CisKK1N0cmluZyBEYXRhVHJhbnNmZXJIVE1MSXRlbTo6dHlwZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1pbWVUeXBlVGV4dEhUTUw7Cit9CisKK1Bhc3NSZWZQdHI8QnVmZmVyZWRE
YXRhVHJhbnNmZXJTdHJpbmdJdGVtPiBCdWZmZXJlZERhdGFUcmFuc2ZlclN0cmluZ0l0ZW06OmNy
ZWF0ZShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSkKK3sKKyAgICByZXR1
cm4gYWRvcHRSZWYobmV3IEJ1ZmZlcmVkRGF0YVRyYW5zZmVyU3RyaW5nSXRlbSh0eXBlLCBkYXRh
KSk7Cit9CisKK1N0cmluZyBCdWZmZXJlZERhdGFUcmFuc2ZlclN0cmluZ0l0ZW06OmtpbmQoKSBj
b25zdAoreworICAgIHJldHVybiBEYXRhVHJhbnNmZXJJdGVtOjpraW5kU3RyaW5nOworfQorCitT
dHJpbmcgQnVmZmVyZWREYXRhVHJhbnNmZXJTdHJpbmdJdGVtOjp0eXBlKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV90eXBlOworfQorCit2b2lkIEJ1ZmZlcmVkRGF0YVRyYW5zZmVyU3RyaW5nSXRl
bTo6Z2V0QXNTdHJpbmcoUGFzc1JlZlB0cjxTdHJpbmdDYWxsYmFjaz4gY2FsbGJhY2ssIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAgY2FsbGJhY2stPnNjaGVk
dWxlQ2FsbGJhY2soY29udGV4dCwgbV9kYXRhKTsKK30KKworU3RyaW5nIEJ1ZmZlcmVkRGF0YVRy
YW5zZmVyU3RyaW5nSXRlbTo6bGVnYWN5R2V0QXNTdHJpbmcoKSBjb25zdAoreworICAgIHJldHVy
biBtX2RhdGE7Cit9CisKK0J1ZmZlcmVkRGF0YVRyYW5zZmVyU3RyaW5nSXRlbTo6QnVmZmVyZWRE
YXRhVHJhbnNmZXJTdHJpbmdJdGVtKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBk
YXRhKQorICAgIDogbV90eXBlKHR5cGUpCiAgICAgLCBtX2RhdGEoZGF0YSkKIHsKIH0KIAotRGF0
YVRyYW5zZmVySXRlbUNocm9taXVtOjpEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0oUGFzc1JlZlB0
cjxDbGlwYm9hcmQ+IG93bmVyLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBEYXRh
U291cmNlIHNvdXJjZSwgUGFzc1JlZlB0cjxGaWxlPiBmaWxlKQotICAgIDogbV9jb250ZXh0KGNv
bnRleHQpCi0gICAgLCBtX293bmVyKG93bmVyKQotICAgICwgbV9raW5kKGtpbmRGaWxlKQotICAg
ICwgbV90eXBlKGZpbGUuZ2V0KCkgPyBmaWxlLT50eXBlKCkgOiBTdHJpbmcoKSkKLSAgICAsIG1f
c291cmNlKHNvdXJjZSkKLSAgICAsIG1fZmlsZShmaWxlKQorUGFzc1JlZlB0cjxCdWZmZXJlZERh
dGFUcmFuc2ZlclVSSUxpc3RJdGVtPiBCdWZmZXJlZERhdGFUcmFuc2ZlclVSSUxpc3RJdGVtOjpj
cmVhdGUoY29uc3QgU3RyaW5nJiBkYXRhLCBjb25zdCBTdHJpbmcmIHRpdGxlKQoreworICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgQnVmZmVyZWREYXRhVHJhbnNmZXJVUklMaXN0SXRlbShkYXRhLCB0
aXRsZSkpOworfQorCit2b2lkIEJ1ZmZlcmVkRGF0YVRyYW5zZmVyVVJJTGlzdEl0ZW06OmdldEFz
U3RyaW5nKFBhc3NSZWZQdHI8U3RyaW5nQ2FsbGJhY2s+IGNhbGxiYWNrLCBTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0KSBjb25zdAogeworICAgIGNhbGxiYWNrLT5zY2hlZHVsZUNhbGxi
YWNrKGNvbnRleHQsIG1fZGF0YSk7CiB9CiAKLXZvaWQgRGF0YVRyYW5zZmVySXRlbUNocm9taXVt
OjpnZXRBc1N0cmluZyhQYXNzUmVmUHRyPFN0cmluZ0NhbGxiYWNrPiBjYWxsYmFjaykgY29uc3QK
K1N0cmluZyBCdWZmZXJlZERhdGFUcmFuc2ZlclVSSUxpc3RJdGVtOjpsZWdhY3lHZXRBc1N0cmlu
ZygpIGNvbnN0CiB7Ci0gICAgaWYgKChtX293bmVyLT5wb2xpY3koKSAhPSBDbGlwYm9hcmRSZWFk
YWJsZSAmJiBtX293bmVyLT5wb2xpY3koKSAhPSBDbGlwYm9hcmRXcml0YWJsZSkKLSAgICAgICAg
fHwga2luZCgpICE9IGtpbmRTdHJpbmcpCi0gICAgICAgIHJldHVybjsKKyAgICByZXR1cm4gbV9k
YXRhOworfQogCi0gICAgaWYgKGNsaXBib2FyZENocm9taXVtKCktPnN0b3JhZ2VIYXNVcGRhdGVk
KCkpCi0gICAgICAgIHJldHVybjsKK1N0cmluZyBCdWZmZXJlZERhdGFUcmFuc2ZlclVSSUxpc3RJ
dGVtOjp0aXRsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdGl0bGU7Cit9CiAKLSAgICBpZiAo
bV9zb3VyY2UgPT0gSW50ZXJuYWxTb3VyY2UpIHsKLSAgICAgICAgY2FsbGJhY2stPnNjaGVkdWxl
Q2FsbGJhY2sobV9jb250ZXh0LCBtX2RhdGEpOwotICAgICAgICByZXR1cm47Ci0gICAgfQordm9p
ZCBCdWZmZXJlZERhdGFUcmFuc2ZlclVSSUxpc3RJdGVtOjpzZXRUaXRsZShjb25zdCBTdHJpbmcm
IHRpdGxlKQoreworICAgIG1fdGl0bGUgPSB0aXRsZTsKK30KIAotICAgIEFTU0VSVChtX3NvdXJj
ZSA9PSBQYXN0ZWJvYXJkU291cmNlKTsKK0J1ZmZlcmVkRGF0YVRyYW5zZmVyVVJJTGlzdEl0ZW06
OkJ1ZmZlcmVkRGF0YVRyYW5zZmVyVVJJTGlzdEl0ZW0oY29uc3QgU3RyaW5nJiBkYXRhLCBjb25z
dCBTdHJpbmcmIHRpdGxlKQorICAgIDogbV9kYXRhKGRhdGEpCisgICAgLCBtX3RpdGxlKHRpdGxl
KQoreworfQogCi0gICAgLy8gVGhpcyBpcyB1Z2x5IGJ1dCB0aGVyZSdzIG5vIHJlYWwgYWx0ZXJu
YXRpdmUuCi0gICAgaWYgKHR5cGUoKSA9PSBtaW1lVHlwZVRleHRQbGFpbikgewotICAgICAgICBj
YWxsYmFjay0+c2NoZWR1bGVDYWxsYmFjayhtX2NvbnRleHQsIFBsYXRmb3JtU3VwcG9ydDo6Y2xp
cGJvYXJkUmVhZFBsYWluVGV4dChjdXJyZW50UGFzdGVib2FyZEJ1ZmZlcigpKSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHR5cGUoKSA9PSBtaW1lVHlwZVRleHRIVE1MKSB7Ci0g
ICAgICAgIFN0cmluZyBodG1sOwotICAgICAgICBLVVJMIGlnbm9yZWRTb3VyY2VVUkw7Ci0gICAg
ICAgIHVuc2lnbmVkIGlnbm9yZWQ7Ci0gICAgICAgIFBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJvYXJk
UmVhZEhUTUwoY3VycmVudFBhc3RlYm9hcmRCdWZmZXIoKSwgJmh0bWwsICZpZ25vcmVkU291cmNl
VVJMLCAmaWdub3JlZCwgJmlnbm9yZWQpOwotICAgICAgICBjYWxsYmFjay0+c2NoZWR1bGVDYWxs
YmFjayhtX2NvbnRleHQsIGh0bWwpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworUGFzc1JlZlB0cjxCdWZmZXJlZERhdGFUcmFuc2ZlckhUTUxJdGVt
PiBCdWZmZXJlZERhdGFUcmFuc2ZlckhUTUxJdGVtOjpjcmVhdGUoY29uc3QgU3RyaW5nJiBkYXRh
LCBjb25zdCBLVVJMJiBiYXNlVVJMKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQnVmZmVy
ZWREYXRhVHJhbnNmZXJIVE1MSXRlbShkYXRhLCBiYXNlVVJMKSk7CiB9CiAKLVBhc3NSZWZQdHI8
QmxvYj4gRGF0YVRyYW5zZmVySXRlbUNocm9taXVtOjpnZXRBc0ZpbGUoKSBjb25zdAordm9pZCBC
dWZmZXJlZERhdGFUcmFuc2ZlckhUTUxJdGVtOjpnZXRBc1N0cmluZyhQYXNzUmVmUHRyPFN0cmlu
Z0NhbGxiYWNrPiBjYWxsYmFjaywgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkgY29u
c3QKIHsKLSAgICBpZiAoa2luZCgpICE9IGtpbmRGaWxlIHx8IGNsaXBib2FyZENocm9taXVtKCkt
PnN0b3JhZ2VIYXNVcGRhdGVkKCkpCi0gICAgICAgIHJldHVybiAwOworICAgIGNhbGxiYWNrLT5z
Y2hlZHVsZUNhbGxiYWNrKGNvbnRleHQsIG1fZGF0YSk7Cit9CisKK1N0cmluZyBCdWZmZXJlZERh
dGFUcmFuc2ZlckhUTUxJdGVtOjpsZWdhY3lHZXRBc1N0cmluZygpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fZGF0YTsKK30KKworS1VSTCBCdWZmZXJlZERhdGFUcmFuc2ZlckhUTUxJdGVtOjpiYXNl
VVJMKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9iYXNlVVJMOworfQorCit2b2lkIEJ1ZmZlcmVk
RGF0YVRyYW5zZmVySFRNTEl0ZW06OnNldEJhc2VVUkwoY29uc3QgS1VSTCYgYmFzZVVSTCkKK3sK
KyAgICBtX2Jhc2VVUkwgPSBiYXNlVVJMOworfQorCitCdWZmZXJlZERhdGFUcmFuc2ZlckhUTUxJ
dGVtOjpCdWZmZXJlZERhdGFUcmFuc2ZlckhUTUxJdGVtKGNvbnN0IFN0cmluZyYgZGF0YSwgY29u
c3QgS1VSTCYgYmFzZVVSTCkKKyAgICA6IG1fZGF0YShkYXRhKQorICAgICwgbV9iYXNlVVJMKGJh
c2VVUkwpCit7Cit9CisKK1N0cmluZyBEYXRhVHJhbnNmZXJGaWxlSXRlbTo6a2luZCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIERhdGFUcmFuc2Zlckl0ZW06OmtpbmRGaWxlOworfQorCitTdHJpbmcg
RGF0YVRyYW5zZmVyRmlsZUl0ZW06OnR5cGUoKSBjb25zdAoreworICAgIC8vIE5vdCBhbGwgZmls
ZS1saWtlIGltcGxlbWVudGF0aW9ucyBjdXJyZW50bHkgcmV0dXJuIGFuIG9iamVjdCBzbyB3ZSBo
YXZlIHRvIGhhbmRsZSB0aGUgbnVsbCBjYXNlIGFzIHdlbGwuCisgICAgUmVmUHRyPEJsb2I+IGJs
b2IgPSBnZXRBc0ZpbGUoKTsKKyAgICByZXR1cm4gYmxvYiA/IGJsb2ItPnR5cGUoKSA6IFN0cmlu
ZygpOworfQorCitQYXNzUmVmUHRyPEJ1ZmZlcmVkRGF0YVRyYW5zZmVyRmlsZW5hbWVJdGVtPiBC
dWZmZXJlZERhdGFUcmFuc2ZlckZpbGVuYW1lSXRlbTo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgZmls
ZW5hbWUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBCdWZmZXJlZERhdGFUcmFuc2ZlckZp
bGVuYW1lSXRlbShmaWxlbmFtZSkpOworfQorCitQYXNzUmVmUHRyPEJsb2I+IEJ1ZmZlcmVkRGF0
YVRyYW5zZmVyRmlsZW5hbWVJdGVtOjpnZXRBc0ZpbGUoKSBjb25zdAoreworICAgIHJldHVybiBG
aWxlOjpjcmVhdGUobV9maWxlbmFtZSk7Cit9CisKK0RhdGFUcmFuc2ZlckZpbGVJdGVtOjpTdG9y
YWdlVHlwZSBCdWZmZXJlZERhdGFUcmFuc2ZlckZpbGVuYW1lSXRlbTo6c3RvcmFnZVR5cGUoKSBj
b25zdAoreworICAgIHJldHVybiBGaWxlbmFtZVR5cGU7Cit9CisKK0J1ZmZlcmVkRGF0YVRyYW5z
ZmVyRmlsZW5hbWVJdGVtOjpCdWZmZXJlZERhdGFUcmFuc2ZlckZpbGVuYW1lSXRlbShjb25zdCBT
dHJpbmcmIGZpbGVuYW1lKQorICAgIDogbV9maWxlbmFtZShmaWxlbmFtZSkKK3sKK30KKworUGFz
c1JlZlB0cjxCdWZmZXJlZERhdGFUcmFuc2ZlclNoYXJlZEJ1ZmZlckl0ZW0+IEJ1ZmZlcmVkRGF0
YVRyYW5zZmVyU2hhcmVkQnVmZmVySXRlbTo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgU3RyaW5nJiBleHRlbnNpb24sIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIpCit7
CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBCdWZmZXJlZERhdGFUcmFuc2ZlclNoYXJlZEJ1ZmZl
ckl0ZW0obmFtZSwgZXh0ZW5zaW9uLCBidWZmZXIpKTsKK30KIAotICAgIGlmIChtX3NvdXJjZSA9
PSBJbnRlcm5hbFNvdXJjZSkKLSAgICAgICAgcmV0dXJuIG1fZmlsZTsKLQotICAgIEFTU0VSVCht
X3NvdXJjZSA9PSBQYXN0ZWJvYXJkU291cmNlKTsKLSAgICBpZiAodHlwZSgpID09IG1pbWVUeXBl
SW1hZ2VQbmcpIHsKLSAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgcHJldHR5IGluZWZmaWNpZW50
LiBXZSBjb3B5IHRoZSBkYXRhIGZyb20gdGhlIGJyb3dzZXIKLSAgICAgICAgLy8gdG8gdGhlIHJl
bmRlcmVyLiBXZSB0aGVuIHBsYWNlIGl0IGluIGEgYmxvYiBpbiBXZWJLaXQsIHdoaWNoCi0gICAg
ICAgIC8vIHJlZ2lzdGVycyBpdCBhbmQgY29waWVzIGl0ICpiYWNrKiB0byB0aGUgYnJvd3Nlci4g
V2hlbiBhIGNvbnN1bWVyCi0gICAgICAgIC8vIHdhbnRzIHRvIHJlYWQgdGhlIGRhdGEsIHdlIHRo
ZW4gY29weSB0aGUgZGF0YSBiYWNrIGludG8gdGhlIHJlbmRlcmVyLgotICAgICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTgxMDcgaGFzIGJlZW4gZmlsZWQg
dG8gdHJhY2sKLSAgICAgICAgLy8gaW1wcm92ZW1lbnRzIHRvIHRoaXMgY29kZSAoaW4gcGFydGlj
dWxhciwgYWRkIGEgcmVnaXN0ZXJDbGlwYm9hcmRCbG9iCi0gICAgICAgIC8vIG1ldGhvZCB0byB0
aGUgYmxvYiByZWdpc3RyeTsgdGhhdCB3YXkgdGhlIGRhdGEgaXMgb25seSBjb3BpZWQgb3Zlcgot
ICAgICAgICAvLyBpbnRvIHRoZSByZW5kZXJlciB3aGVuIGl0J3MgYWN0dWFsbHkgcmVhZCwgbm90
IHdoZW4gdGhlIGJsb2IgaXMKLSAgICAgICAgLy8gaW5pdGlhbGx5IGNvbnN0cnVjdGVkKS4KLSAg
ICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSA9IFBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJv
YXJkUmVhZEltYWdlKFBhc3RlYm9hcmRQcml2YXRlOjpTdGFuZGFyZEJ1ZmZlcik7Ci0gICAgICAg
IFJlZlB0cjxSYXdEYXRhPiByYXdEYXRhID0gUmF3RGF0YTo6Y3JlYXRlKCk7Ci0gICAgICAgIHJh
d0RhdGEtPm11dGFibGVEYXRhKCktPmFwcGVuZChkYXRhLT5kYXRhKCksIGRhdGEtPnNpemUoKSk7
Ci0gICAgICAgIE93blB0cjxCbG9iRGF0YT4gYmxvYkRhdGEgPSBCbG9iRGF0YTo6Y3JlYXRlKCk7
Ci0gICAgICAgIGJsb2JEYXRhLT5hcHBlbmREYXRhKHJhd0RhdGEsIDAsIC0xKTsKLSAgICAgICAg
YmxvYkRhdGEtPnNldENvbnRlbnRUeXBlKG1pbWVUeXBlSW1hZ2VQbmcpOwotICAgICAgICByZXR1
cm4gQmxvYjo6Y3JlYXRlKGJsb2JEYXRhLnJlbGVhc2UoKSwgZGF0YS0+c2l6ZSgpKTsKLSAgICB9
CitQYXNzUmVmUHRyPEJsb2I+IEJ1ZmZlcmVkRGF0YVRyYW5zZmVyU2hhcmVkQnVmZmVySXRlbTo6
Z2V0QXNGaWxlKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogT25seSB1c2VkIGZvciBkZWZhdWx0
IGRyYWcgcHJvY2Vzc2luZyB3aGVuIGRyYWdnaW5nIG91dCwgc28gbm90IG5lZWRlZC4uLiB5ZXQu
CiAgICAgcmV0dXJuIDA7CiB9CiAKLUNsaXBib2FyZENocm9taXVtKiBEYXRhVHJhbnNmZXJJdGVt
Q2hyb21pdW06OmNsaXBib2FyZENocm9taXVtKCkgY29uc3QKK0RhdGFUcmFuc2ZlckZpbGVJdGVt
OjpTdG9yYWdlVHlwZSBCdWZmZXJlZERhdGFUcmFuc2ZlclNoYXJlZEJ1ZmZlckl0ZW06OnN0b3Jh
Z2VUeXBlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gU2hhcmVkQnVmZmVyVHlwZTsKK30KKworQnVm
ZmVyZWREYXRhVHJhbnNmZXJTaGFyZWRCdWZmZXJJdGVtOjpCdWZmZXJlZERhdGFUcmFuc2ZlclNo
YXJlZEJ1ZmZlckl0ZW0oY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4dGVuc2lv
biwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlcikKKyAgICA6IG1fbmFtZShuYW1lKQor
ICAgICwgbV9leHRlbnNpb24oZXh0ZW5zaW9uKQorICAgICwgbV9idWZmZXIoYnVmZmVyKQorewor
fQorCitQYXNzUmVmUHRyPFBhc3RlYm9hcmREYXRhVHJhbnNmZXJTdHJpbmdJdGVtPiBQYXN0ZWJv
YXJkRGF0YVRyYW5zZmVyU3RyaW5nSXRlbTo6Y3JlYXRlKAorICAgIFBhc3RlYm9hcmRQcml2YXRl
OjpDbGlwYm9hcmRCdWZmZXIgYnVmZmVyLCB1aW50NjRfdCBzZXF1ZW5jZU51bWJlciwgY29uc3Qg
U3RyaW5nJiB0eXBlKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgUGFzdGVib2FyZERhdGFU
cmFuc2ZlclN0cmluZ0l0ZW0oYnVmZmVyLCBzZXF1ZW5jZU51bWJlciwgdHlwZSkpOworfQorCitT
dHJpbmcgUGFzdGVib2FyZERhdGFUcmFuc2ZlclN0cmluZ0l0ZW06OmtpbmQoKSBjb25zdAorewor
ICAgIHJldHVybiBEYXRhVHJhbnNmZXJJdGVtOjpraW5kU3RyaW5nOworfQorCitTdHJpbmcgUGFz
dGVib2FyZERhdGFUcmFuc2ZlclN0cmluZ0l0ZW06OnR5cGUoKSBjb25zdAoreworICAgIHJldHVy
biBtX3R5cGU7Cit9CisKK3ZvaWQgUGFzdGVib2FyZERhdGFUcmFuc2ZlclN0cmluZ0l0ZW06Omdl
dEFzU3RyaW5nKFBhc3NSZWZQdHI8U3RyaW5nQ2FsbGJhY2s+IGNhbGxiYWNrLCBTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0KSBjb25zdAoreworICAgIGNhbGxiYWNrLT5zY2hlZHVsZUNh
bGxiYWNrKGNvbnRleHQsIGxlZ2FjeUdldEFzU3RyaW5nKCkpOworfQorCitTdHJpbmcgUGFzdGVi
b2FyZERhdGFUcmFuc2ZlclN0cmluZ0l0ZW06OmxlZ2FjeUdldEFzU3RyaW5nKCkgY29uc3QKK3sK
KyAgICBpZiAocGFzdGVib2FyZEhhc0NoYW5nZWQobV9idWZmZXIsIG1fc2VxdWVuY2VOdW1iZXIp
KQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgaWYgKG1fdHlwZSA9PSBtaW1lVHlwZVRl
eHRQbGFpbikKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJvYXJkUmVhZFBs
YWluVGV4dChtX2J1ZmZlcik7CisgICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJvYXJk
UmVhZEN1c3RvbURhdGEobV9idWZmZXIsIG1fdHlwZSk7Cit9CisKK1Bhc3RlYm9hcmREYXRhVHJh
bnNmZXJTdHJpbmdJdGVtOjpQYXN0ZWJvYXJkRGF0YVRyYW5zZmVyU3RyaW5nSXRlbSgKKyAgICBQ
YXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyIGJ1ZmZlciwgdWludDY0X3Qgc2VxdWVu
Y2VOdW1iZXIsIGNvbnN0IFN0cmluZyYgdHlwZSkKKyAgICA6IG1fYnVmZmVyKGJ1ZmZlcikKKyAg
ICAsIG1fc2VxdWVuY2VOdW1iZXIoc2VxdWVuY2VOdW1iZXIpCisgICAgLCBtX3R5cGUodHlwZSkK
K3sKK30KKworUGFzc1JlZlB0cjxQYXN0ZWJvYXJkRGF0YVRyYW5zZmVySFRNTEl0ZW0+IFBhc3Rl
Ym9hcmREYXRhVHJhbnNmZXJIVE1MSXRlbTo6Y3JlYXRlKAorICAgIFBhc3RlYm9hcmRQcml2YXRl
OjpDbGlwYm9hcmRCdWZmZXIgYnVmZmVyLCB1aW50NjRfdCBzZXF1ZW5jZU51bWJlcikKK3sKKyAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFBhc3RlYm9hcmREYXRhVHJhbnNmZXJIVE1MSXRlbShidWZm
ZXIsIHNlcXVlbmNlTnVtYmVyKSk7Cit9CisKK3ZvaWQgUGFzdGVib2FyZERhdGFUcmFuc2ZlckhU
TUxJdGVtOjpnZXRBc1N0cmluZyhQYXNzUmVmUHRyPFN0cmluZ0NhbGxiYWNrPiBjYWxsYmFjaywg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkgY29uc3QKK3sKKyAgICBjYWxsYmFjay0+
c2NoZWR1bGVDYWxsYmFjayhjb250ZXh0LCBsZWdhY3lHZXRBc1N0cmluZygpKTsKK30KKworU3Ry
aW5nIFBhc3RlYm9hcmREYXRhVHJhbnNmZXJIVE1MSXRlbTo6bGVnYWN5R2V0QXNTdHJpbmcoKSBj
b25zdAoreworICAgIGlmIChwYXN0ZWJvYXJkSGFzQ2hhbmdlZChtX2J1ZmZlciwgbV9zZXF1ZW5j
ZU51bWJlcikpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICBTdHJpbmcgaHRtbDsKKyAg
ICBLVVJMIGlnbm9yZWRTb3VyY2VVUkw7CisgICAgdW5zaWduZWQgaWdub3JlZDsKKyAgICBQbGF0
Zm9ybVN1cHBvcnQ6OmNsaXBib2FyZFJlYWRIVE1MKGN1cnJlbnRQYXN0ZWJvYXJkQnVmZmVyKCks
ICZodG1sLCAmaWdub3JlZFNvdXJjZVVSTCwgJmlnbm9yZWQsICZpZ25vcmVkKTsKKyAgICByZXR1
cm4gaHRtbDsKK30KKworLy8gV2UgZG9uJ3QgY3VycmVudGx5IHVzZSBvciBzdXBwb3J0IHRoZXNl
IG9wZXJhdGlvbnMgZm9yIEhUTUwgb24gdGhlIHBhc3RlYm9hcmQuCitLVVJMIFBhc3RlYm9hcmRE
YXRhVHJhbnNmZXJIVE1MSXRlbTo6YmFzZVVSTCgpIGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgcmV0dXJuIEtVUkwoKTsKK30KKwordm9pZCBQYXN0ZWJvYXJkRGF0YVRy
YW5zZmVySFRNTEl0ZW06OnNldEJhc2VVUkwoY29uc3QgS1VSTCYpCit7CisgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Cit9CisKK1Bhc3RlYm9hcmREYXRhVHJhbnNmZXJIVE1MSXRlbTo6UGFzdGVi
b2FyZERhdGFUcmFuc2ZlckhUTUxJdGVtKAorICAgIFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9h
cmRCdWZmZXIgYnVmZmVyLCB1aW50NjRfdCBzZXF1ZW5jZU51bWJlcikKKyAgICA6IG1fYnVmZmVy
KGJ1ZmZlcikKKyAgICAsIG1fc2VxdWVuY2VOdW1iZXIoc2VxdWVuY2VOdW1iZXIpCit7Cit9CisK
K1Bhc3NSZWZQdHI8UGFzdGVib2FyZERhdGFUcmFuc2ZlckltYWdlSXRlbT4gUGFzdGVib2FyZERh
dGFUcmFuc2ZlckltYWdlSXRlbTo6Y3JlYXRlKAorICAgIFBhc3RlYm9hcmRQcml2YXRlOjpDbGlw
Ym9hcmRCdWZmZXIgYnVmZmVyLCB1aW50NjRfdCBzZXF1ZW5jZU51bWJlcikKK3sKKyAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFBhc3RlYm9hcmREYXRhVHJhbnNmZXJJbWFnZUl0ZW0oYnVmZmVyLCBz
ZXF1ZW5jZU51bWJlcikpOworfQorCitTdHJpbmcgUGFzdGVib2FyZERhdGFUcmFuc2ZlckltYWdl
SXRlbTo6a2luZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIERhdGFUcmFuc2Zlckl0ZW06OmtpbmRG
aWxlOworfQorCitTdHJpbmcgUGFzdGVib2FyZERhdGFUcmFuc2ZlckltYWdlSXRlbTo6dHlwZSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1pbWVUeXBlSW1hZ2VQbmc7Cit9CisKK1Bhc3NSZWZQdHI8
QmxvYj4gUGFzdGVib2FyZERhdGFUcmFuc2ZlckltYWdlSXRlbTo6Z2V0QXNGaWxlKCkgY29uc3QK
K3sKKyAgICBpZiAocGFzdGVib2FyZEhhc0NoYW5nZWQobV9idWZmZXIsIG1fc2VxdWVuY2VOdW1i
ZXIpKQorICAgICAgICByZXR1cm4gMDsKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBwcmV0dHkgaW5l
ZmZpY2llbnQuIFdlIGNvcHkgdGhlIGRhdGEgZnJvbSB0aGUgYnJvd3NlcgorICAgIC8vIHRvIHRo
ZSByZW5kZXJlci4gV2UgdGhlbiBwbGFjZSBpdCBpbiBhIGJsb2IgaW4gV2ViS2l0LCB3aGljaAor
ICAgIC8vIHJlZ2lzdGVycyBpdCBhbmQgY29waWVzIGl0ICpiYWNrKiB0byB0aGUgYnJvd3Nlci4g
V2hlbiBhIGNvbnN1bWVyCisgICAgLy8gd2FudHMgdG8gcmVhZCB0aGUgZGF0YSwgd2UgdGhlbiBj
b3B5IHRoZSBkYXRhIGJhY2sgaW50byB0aGUgcmVuZGVyZXIuCisgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU4MTA3IGhhcyBiZWVuIGZpbGVkIHRvIHRyYWNr
CisgICAgLy8gaW1wcm92ZW1lbnRzIHRvIHRoaXMgY29kZSAoaW4gcGFydGljdWxhciwgYWRkIGEg
cmVnaXN0ZXJDbGlwYm9hcmRCbG9iCisgICAgLy8gbWV0aG9kIHRvIHRoZSBibG9iIHJlZ2lzdHJ5
OyB0aGF0IHdheSB0aGUgZGF0YSBpcyBvbmx5IGNvcGllZCBvdmVyCisgICAgLy8gaW50byB0aGUg
cmVuZGVyZXIgd2hlbiBpdCdzIGFjdHVhbGx5IHJlYWQsIG5vdCB3aGVuIHRoZSBibG9iIGlzCisg
ICAgLy8gaW5pdGlhbGx5IGNvbnN0cnVjdGVkKS4KKyAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBk
YXRhID0gUGxhdGZvcm1TdXBwb3J0OjpjbGlwYm9hcmRSZWFkSW1hZ2UobV9idWZmZXIpOworICAg
IFJlZlB0cjxSYXdEYXRhPiByYXdEYXRhID0gUmF3RGF0YTo6Y3JlYXRlKCk7CisgICAgcmF3RGF0
YS0+bXV0YWJsZURhdGEoKS0+YXBwZW5kKGRhdGEtPmRhdGEoKSwgZGF0YS0+c2l6ZSgpKTsKKyAg
ICBPd25QdHI8QmxvYkRhdGE+IGJsb2JEYXRhID0gQmxvYkRhdGE6OmNyZWF0ZSgpOworICAgIGJs
b2JEYXRhLT5hcHBlbmREYXRhKHJhd0RhdGEsIDAsIC0xKTsKKyAgICBibG9iRGF0YS0+c2V0Q29u
dGVudFR5cGUobWltZVR5cGVJbWFnZVBuZyk7CisgICAgcmV0dXJuIEJsb2I6OmNyZWF0ZShibG9i
RGF0YS5yZWxlYXNlKCksIGRhdGEtPnNpemUoKSk7Cit9CisKK1Bhc3RlYm9hcmREYXRhVHJhbnNm
ZXJJbWFnZUl0ZW06OlBhc3RlYm9hcmREYXRhVHJhbnNmZXJJbWFnZUl0ZW0oCisgICAgUGFzdGVi
b2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlciBidWZmZXIsIHVpbnQ2NF90IHNlcXVlbmNlTnVt
YmVyKQorICAgIDogbV9idWZmZXIoYnVmZmVyKQorICAgICwgbV9zZXF1ZW5jZU51bWJlcihzZXF1
ZW5jZU51bWJlcikKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q2xpcGJvYXJkQ2hyb21pdW0q
PihtX293bmVyLmdldCgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRGF0YVRyYW5zZmVySXRlbUNocm9t
aXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EYXRhVHJhbnNmZXJJdGVt
Q2hyb21pdW0uaAppbmRleCAyYTkxOTAwNmJmOWE0MGNjNzkzYjkyY2Y4NjhhYThkM2Q1YTU5N2E1
Li41NmFjYjE2NWI0NDgyMTFhZDE4YmU4ZjA4OGU2MzgzNGQ4OTE5YWE5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EYXRhVHJhbnNmZXJJdGVt
Q2hyb21pdW0uaApAQCAtMzMsNDggKzMzLDIxNCBAQAogCiAjaWYgRU5BQkxFKERBVEFfVFJBTlNG
RVJfSVRFTVMpCiAKLSNpbmNsdWRlICJEYXRhVHJhbnNmZXJJdGVtLmgiCisjaW5jbHVkZSAiS1VS
TC5oIgorI2luY2x1ZGUgIlBhc3RlYm9hcmRQcml2YXRlLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVm
ZmVyLmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotY2xhc3MgQ2xpcGJvYXJkOwotY2xhc3MgQ2xpcGJvYXJkQ2hyb21pdW07CitjbGFzcyBC
bG9iOwogY2xhc3MgRmlsZTsKIGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CitjbGFzcyBT
dHJpbmdDYWxsYmFjazsKIAotY2xhc3MgRGF0YVRyYW5zZmVySXRlbUNocm9taXVtIDogcHVibGlj
IERhdGFUcmFuc2Zlckl0ZW0geworLy8gVGhpcyBpbnRlcmZhY2UgaXMgc2ltaWxhciB0byBidXQg
bm90IHF1aXRlIHRoZSBzYW1lIGFzIHRoZSBJREwgaW50ZXJmYWNlIHNpbmNlIHdlIGRvbid0IHJl
cXVpcmUKKy8vIHRoZSBleGFjdCBzYW1lIHBhcmFtZXRlcnMgZm9yIGFsbCB0aGUgZnVuY3Rpb25z
LCBhbmQgYWxzbyByZXF1aXJlIGFkZGl0aW9uYWwgbWV0aG9kcyBmb3IKKy8vIHN1cHBvcnRpbmcg
bGVnYWN5IG9wZXJhdGlvbnMuCitjbGFzcyBEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0gOiBwdWJs
aWMgUmVmQ291bnRlZDxEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0+IHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0+IGNyZWF0ZShQYXNzUmVm
UHRyPENsaXBib2FyZD4gb3duZXIsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJp
bmcmIGRhdGEsIGNvbnN0IFN0cmluZyYgdHlwZSk7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0
YVRyYW5zZmVySXRlbUNocm9taXVtPiBjcmVhdGUoUGFzc1JlZlB0cjxDbGlwYm9hcmQ+IG93bmVy
LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxGaWxlPik7Ci0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUNocm9taXVtPiBjcmVhdGVGcm9tUGFzdGVib2Fy
ZChQYXNzUmVmUHRyPENsaXBib2FyZD4gb3duZXIsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBj
b25zdCBTdHJpbmcmIHR5cGUpOworICAgIHZpcnR1YWwgfkRhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1
bSgpOwogCi0gICAgdmlydHVhbCBTdHJpbmcga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsg
fQotICAgIHZpcnR1YWwgU3RyaW5nIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgZ2V0QXNTdHJpbmcoUGFzc1JlZlB0cjxTdHJpbmdDYWxsYmFjaz4pIGNv
bnN0OworICAgIHZpcnR1YWwgU3RyaW5nIGtpbmQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBT
dHJpbmcgdHlwZSgpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBnZXRBc1N0cmluZyhQ
YXNzUmVmUHRyPFN0cmluZ0NhbGxiYWNrPiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopIGNvbnN0
OwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxCbG9iPiBnZXRBc0ZpbGUoKSBjb25zdDsKKyAgICAv
LyBVc2VkIHRvIGltcGxlbWVudCBDbGlwYm9hcmRDaHJvbWl1bTo6Z2V0RGF0YSgpIGFuZCBzZXJp
YWxpemF0aW9uIGZvciB0aGUgV2ViS2l0IGxheWVyLgorICAgIHZpcnR1YWwgU3RyaW5nIGxlZ2Fj
eUdldEFzU3RyaW5nKCkgY29uc3Q7Cit9OwogCi1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBE
YXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtOworLy8gU3BlY2lhbGl6YXRpb25zIGZvciBkYXRh
IGZsYXZvcnMgd2l0aCBhc3NvY2lhdGVkIG1ldGFkYXRhLgorY2xhc3MgRGF0YVRyYW5zZmVyVVJJ
TGlzdEl0ZW0gOiBwdWJsaWMgRGF0YVRyYW5zZmVySXRlbUNocm9taXVtIHsKK3B1YmxpYzoKKyAg
ICB2aXJ0dWFsIFN0cmluZyBraW5kKCkgY29uc3Q7CisgICAgdmlydHVhbCBTdHJpbmcgdHlwZSgp
IGNvbnN0OworCisgICAgdmlydHVhbCBTdHJpbmcgdGl0bGUoKSBjb25zdCA9IDA7CisgICAgdmly
dHVhbCB2b2lkIHNldFRpdGxlKGNvbnN0IFN0cmluZyYpID0gMDsKK307CiAKLSAgICBlbnVtIERh
dGFTb3VyY2UgewotICAgICAgICBQYXN0ZWJvYXJkU291cmNlLAotICAgICAgICBJbnRlcm5hbFNv
dXJjZSwKK2NsYXNzIERhdGFUcmFuc2ZlckhUTUxJdGVtIDogcHVibGljIERhdGFUcmFuc2Zlckl0
ZW1DaHJvbWl1bSB7CitwdWJsaWM6CisgICAgdmlydHVhbCBTdHJpbmcga2luZCgpIGNvbnN0Owor
ICAgIHZpcnR1YWwgU3RyaW5nIHR5cGUoKSBjb25zdDsKKworICAgIHZpcnR1YWwgS1VSTCBiYXNl
VVJMKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRCYXNlVVJMKGNvbnN0IEtVUkwm
KSA9IDA7Cit9OworCitjbGFzcyBEYXRhVHJhbnNmZXJGaWxlSXRlbSA6IHB1YmxpYyBEYXRhVHJh
bnNmZXJJdGVtQ2hyb21pdW0geworcHVibGljOgorICAgIGVudW0gU3RvcmFnZVR5cGUgeworICAg
ICAgICBGaWxlbmFtZVR5cGUsCisgICAgICAgIFNoYXJlZEJ1ZmZlclR5cGUsCiAgICAgfTsKIAot
ICAgIERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bShQYXNzUmVmUHRyPENsaXBib2FyZD4gb3duZXIs
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBEYXRhU291cmNlLCBjb25zdCBTdHJpbmcmIGtpbmQs
IGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKTsKLSAgICBEYXRhVHJhbnNm
ZXJJdGVtQ2hyb21pdW0oUGFzc1JlZlB0cjxDbGlwYm9hcmQ+IG93bmVyLCBTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgRGF0YVNvdXJjZSwgUGFzc1JlZlB0cjxGaWxlPik7CisgICAgdmlydHVhbCBT
dHJpbmcga2luZCgpIGNvbnN0OworICAgIHZpcnR1YWwgU3RyaW5nIHR5cGUoKSBjb25zdDsKIAot
ICAgIENsaXBib2FyZENocm9taXVtKiBjbGlwYm9hcmRDaHJvbWl1bSgpIGNvbnN0OworICAgIC8v
IEZha2UgUlRUSS4KKyAgICB2aXJ0dWFsIFN0b3JhZ2VUeXBlIHN0b3JhZ2VUeXBlKCkgY29uc3Qg
PSAwOworfTsKKworLy8gTWVtb3J5LWJhY2tlZCBzcGVjaWFsaXphdGlvbnMuIFVzZWQgZm9yIGhh
bmRsaW5nIGRyYWdzLCBkcm9wcywgYW5kIHdyaXRpbmcgdG8gdGhlIHBhc3RlYm9hcmQuCitjbGFz
cyBCdWZmZXJlZERhdGFUcmFuc2ZlclN0cmluZ0l0ZW0gOiBwdWJsaWMgRGF0YVRyYW5zZmVySXRl
bUNocm9taXVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCdWZmZXJlZERhdGFU
cmFuc2ZlclN0cmluZ0l0ZW0+IGNyZWF0ZShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmlu
ZyYgZGF0YSk7CisKKyAgICB2aXJ0dWFsIFN0cmluZyBraW5kKCkgY29uc3Q7CisgICAgdmlydHVh
bCBTdHJpbmcgdHlwZSgpIGNvbnN0OworCisgICAgdmlydHVhbCB2b2lkIGdldEFzU3RyaW5nKFBh
c3NSZWZQdHI8U3RyaW5nQ2FsbGJhY2s+LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KikgY29uc3Q7
CisgICAgdmlydHVhbCBTdHJpbmcgbGVnYWN5R2V0QXNTdHJpbmcoKSBjb25zdDsKKworcHJpdmF0
ZToKKyAgICBCdWZmZXJlZERhdGFUcmFuc2ZlclN0cmluZ0l0ZW0oY29uc3QgU3RyaW5nJiB0eXBl
LCBjb25zdCBTdHJpbmcmIGRhdGEpOwogCi0gICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogbV9j
b250ZXh0OwotICAgIGNvbnN0IFJlZlB0cjxDbGlwYm9hcmQ+IG1fb3duZXI7Ci0gICAgY29uc3Qg
U3RyaW5nIG1fa2luZDsKICAgICBjb25zdCBTdHJpbmcgbV90eXBlOwotICAgIGNvbnN0IERhdGFT
b3VyY2UgbV9zb3VyY2U7CiAgICAgY29uc3QgU3RyaW5nIG1fZGF0YTsKLSAgICBSZWZQdHI8Rmls
ZT4gbV9maWxlOworfTsKKworLy8gRklYTUU6IFRoaXMgcmVzdWx0cyBpbiBhIGxvdCBvZiBkdXBs
aWNhdGlvbi4gTWF5YmUgd2UgY2FuIHVzZSB2aXJ0dWFsIGluaGVyaXRhbmNlIGFuZCBvdXIgb3du
CisvLyByZWYoKS9kZXJlZigpIG1ldGhvZHMgc28gd2UgY2FuIHJldXNlIERhdGFUcmFuc2ZlclN0
cmluZ0l0ZW0uCisvLyAuLi4gYWx0ZXJuYXRlbHksIHNpbmNlIHRoaXMgaXMgb25seSB1c2VkIGJ5
IHRoZSBkcmFnZ2luZyBjb2RlLCBqdXN0IGltcGxlbWVudCB0aGUgc3BlY2lhbGl6YXRpb25zCisv
LyBmb3IgZHJhZ2dpbmcuCitjbGFzcyBCdWZmZXJlZERhdGFUcmFuc2ZlclVSSUxpc3RJdGVtIDog
cHVibGljIERhdGFUcmFuc2ZlclVSSUxpc3RJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxCdWZmZXJlZERhdGFUcmFuc2ZlclVSSUxpc3RJdGVtPiBjcmVhdGUoY29uc3QgU3Ry
aW5nJiBkYXRhLCBjb25zdCBTdHJpbmcmIHRpdGxlKTsKKworICAgIHZpcnR1YWwgdm9pZCBnZXRB
c1N0cmluZyhQYXNzUmVmUHRyPFN0cmluZ0NhbGxiYWNrPiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCopIGNvbnN0OworICAgIHZpcnR1YWwgU3RyaW5nIGxlZ2FjeUdldEFzU3RyaW5nKCkgY29uc3Q7
CisKKyAgICB2aXJ0dWFsIFN0cmluZyB0aXRsZSgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBz
ZXRUaXRsZShjb25zdCBTdHJpbmcmKTsKKworcHJpdmF0ZToKKyAgICBCdWZmZXJlZERhdGFUcmFu
c2ZlclVSSUxpc3RJdGVtKGNvbnN0IFN0cmluZyYgZGF0YSwgY29uc3QgU3RyaW5nJiB0aXRsZSk7
CisKKyAgICBjb25zdCBTdHJpbmcgbV9kYXRhOworICAgIFN0cmluZyBtX3RpdGxlOworfTsKKwor
Y2xhc3MgQnVmZmVyZWREYXRhVHJhbnNmZXJIVE1MSXRlbSA6IHB1YmxpYyBEYXRhVHJhbnNmZXJI
VE1MSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QnVmZmVyZWREYXRhVHJh
bnNmZXJIVE1MSXRlbT4gY3JlYXRlKGNvbnN0IFN0cmluZyYgZGF0YSwgY29uc3QgS1VSTCYgYmFz
ZVVSTCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0QXNTdHJpbmcoUGFzc1JlZlB0cjxTdHJpbmdD
YWxsYmFjaz4sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0
cmluZyBsZWdhY3lHZXRBc1N0cmluZygpIGNvbnN0OworCisgICAgdmlydHVhbCBLVVJMIGJhc2VV
UkwoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QmFzZVVSTChjb25zdCBLVVJMJik7CisK
K3ByaXZhdGU6CisgICAgQnVmZmVyZWREYXRhVHJhbnNmZXJIVE1MSXRlbShjb25zdCBTdHJpbmcm
IGRhdGEsIGNvbnN0IEtVUkwmIGJhc2VVUkwpOworCisgICAgY29uc3QgU3RyaW5nIG1fZGF0YTsK
KyAgICBLVVJMIG1fYmFzZVVSTDsKK307CisKK2NsYXNzIEJ1ZmZlcmVkRGF0YVRyYW5zZmVyRmls
ZW5hbWVJdGVtIDogcHVibGljIERhdGFUcmFuc2ZlckZpbGVJdGVtIHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxCdWZmZXJlZERhdGFUcmFuc2ZlckZpbGVuYW1lSXRlbT4gY3JlYXRl
KGNvbnN0IFN0cmluZyYpOworCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEJsb2I+IGdldEFzRmls
ZSgpIGNvbnN0OworCisgICAgdmlydHVhbCBTdG9yYWdlVHlwZSBzdG9yYWdlVHlwZSgpIGNvbnN0
OworCisgICAgU3RyaW5nIGZpbGVuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9maWxlbmFtZTsgfQor
Citwcml2YXRlOgorICAgIEJ1ZmZlcmVkRGF0YVRyYW5zZmVyRmlsZW5hbWVJdGVtKGNvbnN0IFN0
cmluZyYpOworCisgICAgY29uc3QgU3RyaW5nIG1fZmlsZW5hbWU7Cit9OworCitjbGFzcyBCdWZm
ZXJlZERhdGFUcmFuc2ZlclNoYXJlZEJ1ZmZlckl0ZW0gOiBwdWJsaWMgRGF0YVRyYW5zZmVyRmls
ZUl0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJ1ZmZlcmVkRGF0YVRyYW5z
ZmVyU2hhcmVkQnVmZmVySXRlbT4gY3JlYXRlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3Ry
aW5nJiBleHRlbnNpb24sIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPik7CisKKyAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8QmxvYj4gZ2V0QXNGaWxlKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIFN0b3Jh
Z2VUeXBlIHN0b3JhZ2VUeXBlKCkgY29uc3Q7CisKKyAgICBTdHJpbmcgbmFtZSgpIGNvbnN0IHsg
cmV0dXJuIG1fbmFtZTsgfQorICAgIFN0cmluZyBleHRlbnNpb24oKSBjb25zdCB7IHJldHVybiBt
X2V4dGVuc2lvbjsgfQorICAgIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIoKSBjb25z
dCB7IHJldHVybiBtX2J1ZmZlcjsgfQorCitwcml2YXRlOgorICAgIEJ1ZmZlcmVkRGF0YVRyYW5z
ZmVyU2hhcmVkQnVmZmVySXRlbShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXh0
ZW5zaW9uLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4pOworCisgICAgU3RyaW5nIG1fbmFtZTsK
KyAgICBTdHJpbmcgbV9leHRlbnNpb247CisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV9idWZm
ZXI7Cit9OworCisvLyBQYXN0ZWJvYXJkIHNwZWNpYWxpemF0aW9ucyB1c2VkIHdoZW4gcmVhZGlu
ZyBmcm9tIHRoZSBwYXN0ZWJvYXJkLgorY2xhc3MgUGFzdGVib2FyZERhdGFUcmFuc2ZlclN0cmlu
Z0l0ZW0gOiBwdWJsaWMgRGF0YVRyYW5zZmVySXRlbUNocm9taXVtIHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxQYXN0ZWJvYXJkRGF0YVRyYW5zZmVyU3RyaW5nSXRlbT4gY3JlYXRl
KAorICAgICAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyLCB1aW50NjRfdCBz
ZXF1ZW5jZU51bWJlciwgY29uc3QgU3RyaW5nJiB0eXBlKTsKKworICAgIHZpcnR1YWwgU3RyaW5n
IGtpbmQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0cmluZyB0eXBlKCkgY29uc3Q7CisKKyAgICB2
aXJ0dWFsIHZvaWQgZ2V0QXNTdHJpbmcoUGFzc1JlZlB0cjxTdHJpbmdDYWxsYmFjaz4sIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0cmluZyBsZWdhY3lHZXRB
c1N0cmluZygpIGNvbnN0OworCitwcml2YXRlOgorICAgIFBhc3RlYm9hcmREYXRhVHJhbnNmZXJT
dHJpbmdJdGVtKFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIsIHVpbnQ2NF90IHNl
cXVlbmNlTnVtYmVyLCBjb25zdCBTdHJpbmcmIHR5cGUpOworCisgICAgY29uc3QgUGFzdGVib2Fy
ZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlciBtX2J1ZmZlcjsKKyAgICBjb25zdCB1aW50NjRfdCBt
X3NlcXVlbmNlTnVtYmVyOworICAgIGNvbnN0IFN0cmluZyBtX3R5cGU7Cit9OworCitjbGFzcyBQ
YXN0ZWJvYXJkRGF0YVRyYW5zZmVySFRNTEl0ZW0gOiBwdWJsaWMgRGF0YVRyYW5zZmVySFRNTEl0
ZW0geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBhc3RlYm9hcmREYXRhVHJhbnNm
ZXJIVE1MSXRlbT4gY3JlYXRlKAorICAgICAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJk
QnVmZmVyLCB1aW50NjRfdCBzZXF1ZW5jZU51bWJlcik7CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0
QXNTdHJpbmcoUGFzc1JlZlB0cjxTdHJpbmdDYWxsYmFjaz4sIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0cmluZyBsZWdhY3lHZXRBc1N0cmluZygpIGNvbnN0
OworCisgICAgdmlydHVhbCBLVVJMIGJhc2VVUkwoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0QmFzZVVSTChjb25zdCBLVVJMJik7CisKK3ByaXZhdGU6CisgICAgUGFzdGVib2FyZERhdGFU
cmFuc2ZlckhUTUxJdGVtKFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIsIHVpbnQ2
NF90IHNlcXVlbmNlTnVtYmVyKTsKKworICAgIGNvbnN0IFBhc3RlYm9hcmRQcml2YXRlOjpDbGlw
Ym9hcmRCdWZmZXIgbV9idWZmZXI7CisgICAgY29uc3QgdWludDY0X3QgbV9zZXF1ZW5jZU51bWJl
cjsKK307CisKK2NsYXNzIFBhc3RlYm9hcmREYXRhVHJhbnNmZXJJbWFnZUl0ZW0gOiBwdWJsaWMg
RGF0YVRyYW5zZmVySXRlbUNocm9taXVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxQYXN0ZWJvYXJkRGF0YVRyYW5zZmVySW1hZ2VJdGVtPiBjcmVhdGUoCisgICAgICAgIFBhc3Rl
Ym9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIsIHVpbnQ2NF90IHNlcXVlbmNlTnVtYmVyKTsK
KworICAgIHZpcnR1YWwgU3RyaW5nIGtpbmQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0cmluZyB0
eXBlKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8QmxvYj4gZ2V0QXNGaWxlKCkg
Y29uc3Q7CisKK3ByaXZhdGU6CisgICAgUGFzdGVib2FyZERhdGFUcmFuc2ZlckltYWdlSXRlbShQ
YXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyLCB1aW50NjRfdCBzZXF1ZW5jZU51bWJl
cik7CisKKyAgICBjb25zdCBQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyIG1fYnVm
ZmVyOworICAgIGNvbnN0IHVpbnQ2NF90IG1fc2VxdWVuY2VOdW1iZXI7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9EYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2Nocm9taXVtL0RhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0uY3BwCmluZGV4IDA5
ZTZjM2E5YzVhMjhiNDhjY2MwMWJhYTNmNTExM2Q0OGIwYTYzMWEuLjY5OTIyMjMwZDQzYjhjNjZl
MjgxODM5MDgzODExMzc4Nzc2M2VkMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2Nocm9taXVtL0RhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0u
Y3BwCkBAIC0zMywxNTIgKzMzLDIyMCBAQAogCiAjaWYgRU5BQkxFKERBVEFfVFJBTlNGRVJfSVRF
TVMpCiAKLSNpbmNsdWRlICJCbG9iVVJMLmgiCi0jaW5jbHVkZSAiQ2hyb21pdW1EYXRhT2JqZWN0
LmgiCi0jaW5jbHVkZSAiQ2xpcGJvYXJkQ2hyb21pdW0uaCIKICNpbmNsdWRlICJDbGlwYm9hcmRN
aW1lVHlwZXMuaCIKKyNpbmNsdWRlICJDbGlwYm9hcmRVdGlsaXRpZXNDaHJvbWl1bS5oIgorI2lu
Y2x1ZGUgIkRhdGFUcmFuc2Zlckl0ZW0uaCIKICNpbmNsdWRlICJEYXRhVHJhbnNmZXJJdGVtQ2hy
b21pdW0uaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiRmlsZS5oIgot
I2luY2x1ZGUgIktVUkwuaCIKLSNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCi0j
aW5jbHVkZSAiVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0J1aWxkZXIuaD4KKyNpbmNsdWRlICJQYXN0ZWJvYXJkUHJpdmF0ZS5oIgorI2luY2x1ZGUg
IlBsYXRmb3JtU3VwcG9ydC5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1QYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0+IERh
dGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW06OmNyZWF0ZShQYXNzUmVmUHRyPENsaXBib2FyZD4g
b3duZXIsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCituYW1lc3BhY2UgeworCitj
bGFzcyBCdWZmZXJlZERhdGFUcmFuc2Zlckl0ZW1MaXN0IDogcHVibGljIERhdGFUcmFuc2Zlckl0
ZW1MaXN0Q2hyb21pdW0geworcHVibGljOgorICAgIEJ1ZmZlcmVkRGF0YVRyYW5zZmVySXRlbUxp
c3QoKTsKKworICAgIHZpcnR1YWwgc2l6ZV90IGxlbmd0aCgpIGNvbnN0OworICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0+IGl0ZW0odW5zaWduZWQgbG9uZyBp
bmRleCk7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUl0ZW0odW5zaWduZWQgbG9uZyBpbmRleCk7
CisgICAgdmlydHVhbCB2b2lkIGNsZWFyKCk7CisgICAgdmlydHVhbCB2b2lkIGFkZChjb25zdCBT
dHJpbmcmIGRhdGEsIGNvbnN0IFN0cmluZyYgdHlwZSwgRXhjZXB0aW9uQ29kZSYpOworCitwcml2
YXRlOgorICAgIHZpcnR1YWwgdm9pZCBpbnRlcm5hbEFkZFN0cmluZyhjb25zdCBTdHJpbmcmIHR5
cGUsIGNvbnN0IFN0cmluZyYgZGF0YSk7CisgICAgdmlydHVhbCB2b2lkIGludGVybmFsQWRkVVJM
KGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHRpdGxlKTsKKyAgICB2aXJ0dWFsIHZv
aWQgaW50ZXJuYWxBZGRIVE1MKGNvbnN0IFN0cmluZyYgbWFya3VwLCBjb25zdCBLVVJMJiBiYXNl
VVJMKTsKKyAgICB2aXJ0dWFsIHZvaWQgaW50ZXJuYWxBZGRGaWxlbmFtZShjb25zdCBTdHJpbmcm
KTsKKyAgICB2aXJ0dWFsIHZvaWQgaW50ZXJuYWxBZGRTaGFyZWRCdWZmZXIoY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4dGVuc2lvbiwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+
KTsKKworICAgIFZlY3RvcjxSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUNocm9taXVtPiA+IG1faXRl
bXM7Cit9OworCitjbGFzcyBQYXN0ZWJvYXJkRGF0YVRyYW5zZmVySXRlbUxpc3QgOiBwdWJsaWMg
RGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bSB7CitwdWJsaWM6CisgICAgUGFzdGVib2FyZERh
dGFUcmFuc2Zlckl0ZW1MaXN0KCk7CisKKyAgICB2aXJ0dWFsIHNpemVfdCBsZW5ndGgoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUNocm9taXVtPiBpdGVt
KHVuc2lnbmVkIGxvbmcgaW5kZXgpOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVJdGVtKHVuc2ln
bmVkIGxvbmcgaW5kZXgpOworICAgIHZpcnR1YWwgdm9pZCBjbGVhcigpOworICAgIHZpcnR1YWwg
dm9pZCBhZGQoY29uc3QgU3RyaW5nJiBkYXRhLCBjb25zdCBTdHJpbmcmIHR5cGUsIEV4Y2VwdGlv
bkNvZGUmKTsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQgaW50ZXJuYWxBZGRTdHJpbmco
Y29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpOworICAgIHZpcnR1YWwgdm9p
ZCBpbnRlcm5hbEFkZFVSTChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiB0aXRsZSk7
CisgICAgdmlydHVhbCB2b2lkIGludGVybmFsQWRkSFRNTChjb25zdCBTdHJpbmcmIG1hcmt1cCwg
Y29uc3QgS1VSTCYgYmFzZVVSTCk7CisgICAgdmlydHVhbCB2b2lkIGludGVybmFsQWRkRmlsZW5h
bWUoY29uc3QgU3RyaW5nJik7CisgICAgdmlydHVhbCB2b2lkIGludGVybmFsQWRkU2hhcmVkQnVm
ZmVyKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHRlbnNpb24sIFBhc3NSZWZQ
dHI8U2hhcmVkQnVmZmVyPik7CisKKyAgICBjb25zdCBQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJv
YXJkQnVmZmVyIG1fYnVmZmVyOworICAgIGNvbnN0IHVpbnQ2NF90IG1fc2VxdWVuY2VOdW1iZXI7
CisgICAgVmVjdG9yPFJlZlB0cjxEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0+ID4gbV9pdGVtczsK
K307CisKK0J1ZmZlcmVkRGF0YVRyYW5zZmVySXRlbUxpc3Q6OkJ1ZmZlcmVkRGF0YVRyYW5zZmVy
SXRlbUxpc3QoKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGF0YVRyYW5zZmVySXRlbUxp
c3RDaHJvbWl1bShvd25lciwgY29udGV4dCkpOwogfQogCi1EYXRhVHJhbnNmZXJJdGVtTGlzdENo
cm9taXVtOjpEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtKFBhc3NSZWZQdHI8Q2xpcGJvYXJk
PiBvd25lciwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKLSAgICA6IG1fb3duZXIo
b3duZXIpCi0gICAgLCBtX2NvbnRleHQoY29udGV4dCkKK3NpemVfdCBCdWZmZXJlZERhdGFUcmFu
c2Zlckl0ZW1MaXN0OjpsZW5ndGgoKSBjb25zdAogewotfQotCi1zaXplX3QgRGF0YVRyYW5zZmVy
SXRlbUxpc3RDaHJvbWl1bTo6bGVuZ3RoKCkKLXsKLSAgICBpZiAobV9vd25lci0+cG9saWN5KCkg
PT0gQ2xpcGJvYXJkTnVtYikKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgY2xpcGJvYXJkQ2hyb21p
dW0oKS0+bWF5VXBkYXRlSXRlbXMobV9pdGVtcyk7CiAgICAgcmV0dXJuIG1faXRlbXMuc2l6ZSgp
OwogfQogCi1QYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW0+IERhdGFUcmFuc2Zlckl0ZW1MaXN0
Q2hyb21pdW06Oml0ZW0odW5zaWduZWQgbG9uZyBpbmRleCkKK1Bhc3NSZWZQdHI8RGF0YVRyYW5z
ZmVySXRlbUNocm9taXVtPiBCdWZmZXJlZERhdGFUcmFuc2Zlckl0ZW1MaXN0OjppdGVtKHVuc2ln
bmVkIGxvbmcgaW5kZXgpCiB7Ci0gICAgaWYgKG1fb3duZXItPnBvbGljeSgpID09IENsaXBib2Fy
ZE51bWIpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgY2xpcGJvYXJkQ2hyb21pdW0oKS0+bWF5
VXBkYXRlSXRlbXMobV9pdGVtcyk7CiAgICAgaWYgKGluZGV4ID49IGxlbmd0aCgpKQogICAgICAg
ICByZXR1cm4gMDsKICAgICByZXR1cm4gbV9pdGVtc1tpbmRleF07CiB9CiAKLXZvaWQgRGF0YVRy
YW5zZmVySXRlbUxpc3RDaHJvbWl1bTo6ZGVsZXRlSXRlbSh1bnNpZ25lZCBsb25nIGluZGV4LCBF
eGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgQnVmZmVyZWREYXRhVHJhbnNmZXJJdGVtTGlzdDo6ZGVs
ZXRlSXRlbSh1bnNpZ25lZCBsb25nIGluZGV4KQogewotICAgIGlmIChtX293bmVyLT5wb2xpY3ko
KSAhPSBDbGlwYm9hcmRXcml0YWJsZSkgewotICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJS
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgY2xpcGJvYXJkQ2hyb21pdW0oKS0+bWF5
VXBkYXRlSXRlbXMobV9pdGVtcyk7CiAgICAgaWYgKGluZGV4ID49IGxlbmd0aCgpKQogICAgICAg
ICByZXR1cm47Ci0gICAgUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW0+IGl0ZW0gPSBtX2l0ZW1zW2lu
ZGV4XTsKKyAgICBtX2l0ZW1zLnJlbW92ZShpbmRleCk7Cit9CiAKLSAgICBSZWZQdHI8Q2hyb21p
dW1EYXRhT2JqZWN0PiBkYXRhT2JqZWN0ID0gY2xpcGJvYXJkQ2hyb21pdW0oKS0+ZGF0YU9iamVj
dCgpOwotICAgIGlmICghZGF0YU9iamVjdCkKLSAgICAgICAgcmV0dXJuOwordm9pZCBCdWZmZXJl
ZERhdGFUcmFuc2Zlckl0ZW1MaXN0OjpjbGVhcigpCit7CisgICAgbV9pdGVtcy5jbGVhcigpOwor
fQogCi0gICAgaWYgKGl0ZW0tPmtpbmQoKSA9PSBEYXRhVHJhbnNmZXJJdGVtOjpraW5kU3RyaW5n
KSB7Ci0gICAgICAgIG1faXRlbXMucmVtb3ZlKGluZGV4KTsKLSAgICAgICAgZGF0YU9iamVjdC0+
Y2xlYXJEYXRhKGl0ZW0tPnR5cGUoKSk7Ci0gICAgICAgIHJldHVybjsKK3ZvaWQgQnVmZmVyZWRE
YXRhVHJhbnNmZXJJdGVtTGlzdDo6YWRkKGNvbnN0IFN0cmluZyYgZGF0YSwgY29uc3QgU3RyaW5n
JiB0eXBlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICAvLyBPbmx5IG9uZSAnc3RyaW5nJyBp
dGVtIHdpdGggYSBnaXZlbiB0eXBlIGlzIGFsbG93ZWQgaW4gdGhlIGNvbGxlY3Rpb24uCisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2l0ZW1zLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlm
IChtX2l0ZW1zW2ldLT50eXBlKCkgPT0gdHlwZSAmJiBtX2l0ZW1zW2ldLT5raW5kKCkgPT0gRGF0
YVRyYW5zZmVySXRlbTo6a2luZFN0cmluZykgeworICAgICAgICAgICAgZWMgPSBOT1RfU1VQUE9S
VEVEX0VSUjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgIH0KIAotICAgIEFT
U0VSVChpdGVtLT5raW5kKCkgPT0gRGF0YVRyYW5zZmVySXRlbTo6a2luZEZpbGUpOwotICAgIFJl
ZlB0cjxCbG9iPiBibG9iID0gaXRlbS0+Z2V0QXNGaWxlKCk7Ci0gICAgaWYgKCFibG9iIHx8ICFi
bG9iLT5pc0ZpbGUoKSkKLSAgICAgICAgcmV0dXJuOworICAgIGlmICh0eXBlID09IG1pbWVUeXBl
VGV4dFVSSUxpc3QpCisgICAgICAgIGludGVybmFsQWRkVVJMKGRhdGEsIFN0cmluZygpKTsKKyAg
ICBlbHNlIGlmICh0eXBlID09IG1pbWVUeXBlVGV4dEhUTUwpCisgICAgICAgIGludGVybmFsQWRk
SFRNTChkYXRhLCBLVVJMKCkpOworICAgIGVsc2UKKyAgICAgICAgaW50ZXJuYWxBZGRTdHJpbmco
dHlwZSwgZGF0YSk7Cit9CiAKLSAgICBtX2l0ZW1zLmNsZWFyKCk7Ci0gICAgY29uc3QgVmVjdG9y
PFN0cmluZz4mIGZpbGVuYW1lcyA9IGRhdGFPYmplY3QtPmZpbGVuYW1lcygpOwotICAgIFZlY3Rv
cjxTdHJpbmc+IGNvcGllZEZpbGVuYW1lczsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZp
bGVuYW1lcy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoZmlsZW5hbWVzW2ldICE9IHN0YXRp
Y19jYXN0PEZpbGUqPihibG9iLmdldCgpKS0+cGF0aCgpKQotICAgICAgICAgICAgY29waWVkRmls
ZW5hbWVzLmFwcGVuZChzdGF0aWNfY2FzdDxGaWxlKj4oYmxvYi5nZXQoKSktPnBhdGgoKSk7Ci0g
ICAgfQotICAgIGRhdGFPYmplY3QtPnNldEZpbGVuYW1lcyhjb3BpZWRGaWxlbmFtZXMpOwordm9p
ZCBCdWZmZXJlZERhdGFUcmFuc2Zlckl0ZW1MaXN0OjppbnRlcm5hbEFkZFN0cmluZyhjb25zdCBT
dHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSkKK3sKKyAgICBtX2l0ZW1zLmFwcGVuZChC
dWZmZXJlZERhdGFUcmFuc2ZlclN0cmluZ0l0ZW06OmNyZWF0ZSh0eXBlLCBkYXRhKSk7CiB9CiAK
LXZvaWQgRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bTo6Y2xlYXIoKQordm9pZCBCdWZmZXJl
ZERhdGFUcmFuc2Zlckl0ZW1MaXN0OjppbnRlcm5hbEFkZFVSTChjb25zdCBTdHJpbmcmIHVybCwg
Y29uc3QgU3RyaW5nJiB0aXRsZSkKIHsKLSAgICBpZiAobV9vd25lci0+cG9saWN5KCkgIT0gQ2xp
cGJvYXJkV3JpdGFibGUpCi0gICAgICAgIHJldHVybjsKKyAgICBtX2l0ZW1zLmFwcGVuZChCdWZm
ZXJlZERhdGFUcmFuc2ZlclVSSUxpc3RJdGVtOjpjcmVhdGUodXJsLCB0aXRsZSkpOworfQogCi0g
ICAgbV9pdGVtcy5jbGVhcigpOwotICAgIGNsaXBib2FyZENocm9taXVtKCktPmNsZWFyQWxsRGF0
YSgpOwordm9pZCBCdWZmZXJlZERhdGFUcmFuc2Zlckl0ZW1MaXN0OjppbnRlcm5hbEFkZEhUTUwo
Y29uc3QgU3RyaW5nJiBtYXJrdXAsIGNvbnN0IEtVUkwmIGJhc2VVUkwpCit7CisgICAgbV9pdGVt
cy5hcHBlbmQoQnVmZmVyZWREYXRhVHJhbnNmZXJIVE1MSXRlbTo6Y3JlYXRlKG1hcmt1cCwgYmFz
ZVVSTCkpOwogfQogCi12b2lkIERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW06OmFkZChjb25z
dCBTdHJpbmcmIGRhdGEsIGNvbnN0IFN0cmluZyYgdHlwZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit2
b2lkIEJ1ZmZlcmVkRGF0YVRyYW5zZmVySXRlbUxpc3Q6OmludGVybmFsQWRkRmlsZW5hbWUoY29u
c3QgU3RyaW5nJiBmaWxlbmFtZSkKIHsKLSAgICBpZiAobV9vd25lci0+cG9saWN5KCkgIT0gQ2xp
cGJvYXJkV3JpdGFibGUpCi0gICAgICAgIHJldHVybjsKKyAgICBtX2l0ZW1zLmFwcGVuZChCdWZm
ZXJlZERhdGFUcmFuc2ZlckZpbGVuYW1lSXRlbTo6Y3JlYXRlKGZpbGVuYW1lKSk7Cit9CiAKLSAg
ICBSZWZQdHI8Q2hyb21pdW1EYXRhT2JqZWN0PiBkYXRhT2JqZWN0ID0gY2xpcGJvYXJkQ2hyb21p
dW0oKS0+ZGF0YU9iamVjdCgpOwotICAgIGlmICghZGF0YU9iamVjdCkKLSAgICAgICAgcmV0dXJu
Owordm9pZCBCdWZmZXJlZERhdGFUcmFuc2Zlckl0ZW1MaXN0OjppbnRlcm5hbEFkZFNoYXJlZEJ1
ZmZlcihjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9uLCBQYXNzUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyKQoreworICAgIG1faXRlbXMuYXBwZW5kKEJ1ZmZlcmVk
RGF0YVRyYW5zZmVyU2hhcmVkQnVmZmVySXRlbTo6Y3JlYXRlKG5hbWUsIGV4dGVuc2lvbiwgYnVm
ZmVyKSk7Cit9CiAKLSAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICBkYXRhT2JqZWN0LT5n
ZXREYXRhKHR5cGUsIHN1Y2Nlc3MpOwotICAgIGlmIChzdWNjZXNzKSB7Ci0gICAgICAgIC8vIEFk
ZGluZyBkYXRhIHdpdGggdGhlIHNhbWUgdHlwZSBzaG91bGQgZmFpbCB3aXRoIE5PVF9TVVBQT1JU
RURfRVJSLgotICAgICAgICBlYyA9IE5PVF9TVVBQT1JURURfRVJSOwotICAgICAgICByZXR1cm47
CitQYXN0ZWJvYXJkRGF0YVRyYW5zZmVySXRlbUxpc3Q6OlBhc3RlYm9hcmREYXRhVHJhbnNmZXJJ
dGVtTGlzdCgpCisgICAgOiBtX2J1ZmZlcihjdXJyZW50UGFzdGVib2FyZEJ1ZmZlcigpKQorICAg
ICwgbV9zZXF1ZW5jZU51bWJlcihQbGF0Zm9ybVN1cHBvcnQ6OmNsaXBib2FyZFNlcXVlbmNlTnVt
YmVyKG1fYnVmZmVyKSkKK3sKKyAgICBib29sIGlnbm9yZWQ7CisgICAgSGFzaFNldDxTdHJpbmc+
IHR5cGVzID0gUGxhdGZvcm1TdXBwb3J0OjpjbGlwYm9hcmRSZWFkQXZhaWxhYmxlVHlwZXMobV9i
dWZmZXIsICZpZ25vcmVkKTsKKyAgICBmb3IgKEhhc2hTZXQ8U3RyaW5nPjo6Y29uc3RfaXRlcmF0
b3IgaXQgPSB0eXBlcy5iZWdpbigpOyBpdCAhPSB0eXBlcy5lbmQoKTsgKytpdCkgeworICAgICAg
ICBpZiAoKml0ID09IG1pbWVUeXBlVGV4dEhUTUwpCisgICAgICAgICAgICBtX2l0ZW1zLmFwcGVu
ZChQYXN0ZWJvYXJkRGF0YVRyYW5zZmVySFRNTEl0ZW06OmNyZWF0ZShtX2J1ZmZlciwgbV9zZXF1
ZW5jZU51bWJlcikpOworICAgICAgICBlbHNlIGlmICgqaXQgPT0gbWltZVR5cGVJbWFnZVBuZykK
KyAgICAgICAgICAgIG1faXRlbXMuYXBwZW5kKFBhc3RlYm9hcmREYXRhVHJhbnNmZXJJbWFnZUl0
ZW06OmNyZWF0ZShtX2J1ZmZlciwgbV9zZXF1ZW5jZU51bWJlcikpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBtX2l0ZW1zLmFwcGVuZChQYXN0ZWJvYXJkRGF0YVRyYW5zZmVyU3RyaW5nSXRl
bTo6Y3JlYXRlKG1fYnVmZmVyLCBtX3NlcXVlbmNlTnVtYmVyLCAqaXQpKTsKICAgICB9Cit9CiAK
LSAgICBtX2l0ZW1zLmNsZWFyKCk7Ci0gICAgZGF0YU9iamVjdC0+c2V0RGF0YSh0eXBlLCBkYXRh
KTsKK3NpemVfdCBQYXN0ZWJvYXJkRGF0YVRyYW5zZmVySXRlbUxpc3Q6Omxlbmd0aCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIHBhc3RlYm9hcmRIYXNDaGFuZ2VkKG1fYnVmZmVyLCBtX3NlcXVlbmNl
TnVtYmVyKSA/IDAgOiBtX2l0ZW1zLnNpemUoKTsKIH0KIAotdm9pZCBEYXRhVHJhbnNmZXJJdGVt
TGlzdENocm9taXVtOjphZGQoUGFzc1JlZlB0cjxGaWxlPiBmaWxlKQorUGFzc1JlZlB0cjxEYXRh
VHJhbnNmZXJJdGVtQ2hyb21pdW0+IFBhc3RlYm9hcmREYXRhVHJhbnNmZXJJdGVtTGlzdDo6aXRl
bSh1bnNpZ25lZCBsb25nIGluZGV4KQogewotICAgIGlmIChtX293bmVyLT5wb2xpY3koKSAhPSBD
bGlwYm9hcmRXcml0YWJsZSB8fCAhZmlsZSkKLSAgICAgICAgcmV0dXJuOworICAgIHJldHVybiAo
aW5kZXggPj0gbGVuZ3RoKCkgfHwgcGFzdGVib2FyZEhhc0NoYW5nZWQobV9idWZmZXIsIG1fc2Vx
dWVuY2VOdW1iZXIpKSA/IDAgOiBtX2l0ZW1zW2luZGV4XTsKK30KIAotICAgIFJlZlB0cjxDaHJv
bWl1bURhdGFPYmplY3Q+IGRhdGFPYmplY3QgPSBjbGlwYm9hcmRDaHJvbWl1bSgpLT5kYXRhT2Jq
ZWN0KCk7Ci0gICAgaWYgKCFkYXRhT2JqZWN0KQotICAgICAgICByZXR1cm47Cit2b2lkIFBhc3Rl
Ym9hcmREYXRhVHJhbnNmZXJJdGVtTGlzdDo6ZGVsZXRlSXRlbSh1bnNpZ25lZCBsb25nIGluZGV4
KQoreworICAgIC8vIFRoaXMgaXMgYSByZWFkLW9ubHkgY29sbGVjdGlvbiwgd2Ugc2hvdWxkIG5l
dmVyIHRyeSB0byBtdXRhdGUgaXQuCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CiAKLSAg
ICBtX2l0ZW1zLmNsZWFyKCk7Cit2b2lkIFBhc3RlYm9hcmREYXRhVHJhbnNmZXJJdGVtTGlzdDo6
Y2xlYXIoKQoreworICAgIC8vIFRoaXMgaXMgYSByZWFkLW9ubHkgY29sbGVjdGlvbiwgd2Ugc2hv
dWxkIG5ldmVyIHRyeSB0byBtdXRhdGUgaXQuCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9
CiAKLSAgICAvLyBVcGRhdGluZyBkYXRhT2JqZWN0J3MgZmlsZXNldCBzbyB0aGF0IHdlIHdpbGwg
YmUgc2VlaW5nIHRoZSBjb25zaXN0ZW50IGxpc3QgZXZlbiBpZiB3ZSByZWNvbnN0cnVjdCB0aGUg
aXRlbXMgbGF0ZXIuCi0gICAgZGF0YU9iamVjdC0+YWRkRmlsZW5hbWUoZmlsZS0+cGF0aCgpKTsK
K3ZvaWQgUGFzdGVib2FyZERhdGFUcmFuc2Zlckl0ZW1MaXN0OjphZGQoY29uc3QgU3RyaW5nJiBk
YXRhLCBjb25zdCBTdHJpbmcmIHR5cGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIC8vIFRo
aXMgaXMgYSByZWFkLW9ubHkgY29sbGVjdGlvbiwgd2Ugc2hvdWxkIG5ldmVyIHRyeSB0byBtdXRh
dGUgaXQuCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CiAKLSAgICAvLyBGSVhNRTogQWxs
b3cgbXVsdGlwbGUgZmlsZXMgdG8gYmUgZHJhZ2dlZCBvdXQgYXQgb25jZSBpZiBtb3JlIHRoYW4g
b25lIGZpbGUgaXMgYWRkZWQgdG8gdGhlIHN0b3JhZ2UuIEZvciBub3cgd2UgbWFudWFsbHkgc2V0
IHVwIGRyYWctb3V0IGRvd25sb2FkIFVSTCBvbmx5IGlmIGl0IGhhcyBub3QgYmVlbiBzZXQgeWV0
LgotICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwotICAgIGRhdGFPYmplY3QtPmdldERhdGEobWlt
ZVR5cGVEb3dubG9hZFVSTCwgc3VjY2Vzcyk7Ci0gICAgaWYgKHN1Y2Nlc3MpCi0gICAgICAgIHJl
dHVybjsKK3ZvaWQgUGFzdGVib2FyZERhdGFUcmFuc2Zlckl0ZW1MaXN0OjppbnRlcm5hbEFkZFN0
cmluZyhjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSkKK3sKKyAgICAvLyBU
aGlzIGlzIGEgcmVhZC1vbmx5IGNvbGxlY3Rpb24sIHdlIHNob3VsZCBuZXZlciB0cnkgdG8gbXV0
YXRlIGl0LgorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQogCi0gICAgS1VSTCB1cmxGb3JE
b3dubG9hZCA9IEJsb2JVUkw6OmNyZWF0ZVB1YmxpY1VSTChtX2NvbnRleHQtPnNlY3VyaXR5T3Jp
Z2luKCkpOwotICAgIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnJlZ2lzdGVyQmxvYlVSTCh1cmxG
b3JEb3dubG9hZCwgZmlsZS0+dXJsKCkpOwordm9pZCBQYXN0ZWJvYXJkRGF0YVRyYW5zZmVySXRl
bUxpc3Q6OmludGVybmFsQWRkVVJMKGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHRp
dGxlKQoreworICAgIC8vIFRoaXMgaXMgYSByZWFkLW9ubHkgY29sbGVjdGlvbiwgd2Ugc2hvdWxk
IG5ldmVyIHRyeSB0byBtdXRhdGUgaXQuCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisK
K3ZvaWQgUGFzdGVib2FyZERhdGFUcmFuc2Zlckl0ZW1MaXN0OjppbnRlcm5hbEFkZEhUTUwoY29u
c3QgU3RyaW5nJiBtYXJrdXAsIGNvbnN0IEtVUkwmIGJhc2VVUkwpCit7CisgICAgLy8gVGhpcyBp
cyBhIHJlYWQtb25seSBjb2xsZWN0aW9uLCB3ZSBzaG91bGQgbmV2ZXIgdHJ5IHRvIG11dGF0ZSBp
dC4KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBQYXN0ZWJvYXJkRGF0YVRy
YW5zZmVySXRlbUxpc3Q6OmludGVybmFsQWRkRmlsZW5hbWUoY29uc3QgU3RyaW5nJikKK3sKKyAg
ICAvLyBUaGlzIGlzIGEgcmVhZC1vbmx5IGNvbGxlY3Rpb24sIHdlIHNob3VsZCBuZXZlciB0cnkg
dG8gbXV0YXRlIGl0LgorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQogCi0gICAgU3RyaW5n
QnVpbGRlciBkb3dubG9hZFVybDsKLSAgICBkb3dubG9hZFVybC5hcHBlbmQoZmlsZS0+dHlwZSgp
KTsKLSAgICBkb3dubG9hZFVybC5hcHBlbmQoIjoiKTsKLSAgICBkb3dubG9hZFVybC5hcHBlbmQo
ZW5jb2RlV2l0aFVSTEVzY2FwZVNlcXVlbmNlcyhmaWxlLT5uYW1lKCkpKTsKLSAgICBkb3dubG9h
ZFVybC5hcHBlbmQoIjoiKTsKLSAgICBkb3dubG9hZFVybC5hcHBlbmQodXJsRm9yRG93bmxvYWQu
c3RyaW5nKCkpOwotICAgIGRhdGFPYmplY3QtPnNldERhdGEobWltZVR5cGVEb3dubG9hZFVSTCwg
ZG93bmxvYWRVcmwudG9TdHJpbmcoKSk7Cit2b2lkIFBhc3RlYm9hcmREYXRhVHJhbnNmZXJJdGVt
TGlzdDo6aW50ZXJuYWxBZGRTaGFyZWRCdWZmZXIoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5n
JiwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+KQoreworICAgIC8vIFRoaXMgaXMgYSByZWFkLW9u
bHkgY29sbGVjdGlvbiwgd2Ugc2hvdWxkIG5ldmVyIHRyeSB0byBtdXRhdGUgaXQuCisgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlCisKK1Bhc3NSZWZQdHI8RGF0
YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bT4gRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bTo6
Y3JlYXRlKCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJ1ZmZlcmVkRGF0YVRyYW5zZmVy
SXRlbUxpc3QoKSk7Cit9CisKK1Bhc3NSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1
bT4gRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bTo6Y3JlYXRlRnJvbVBhc3RlYm9hcmQoKQor
eworICAgIHJldHVybiBhZG9wdFJlZihuZXcgUGFzdGVib2FyZERhdGFUcmFuc2Zlckl0ZW1MaXN0
KCkpOwogfQogCi1DbGlwYm9hcmRDaHJvbWl1bSogRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1
bTo6Y2xpcGJvYXJkQ2hyb21pdW0oKSBjb25zdAorRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1
bTo6fkRhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0oKQogewotICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxDbGlwYm9hcmRDaHJvbWl1bSo+KG1fb3duZXIuZ2V0KCkpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9EYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jaHJvbWl1bS9EYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtLmgKaW5kZXggOTJjZDBiZGRm
MDU4NTg0ZTRkNDJkNDkxNmNlN2U4NmJmMWMwM2I5MS4uY2VkNTMzZGI0NWZmYWJjYzQyMTJkYTcz
MzIzMWJhZjYxOTgwN2Y0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2Nocm9taXVtL0RhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0uaApAQCAtMzMs
MzkgKzMzLDM2IEBACiAKICNpZiBFTkFCTEUoREFUQV9UUkFOU0ZFUl9JVEVNUykKIAotI2luY2x1
ZGUgIkRhdGFUcmFuc2Zlckl0ZW1MaXN0LmgiCisjaW5jbHVkZSAiRGF0YVRyYW5zZmVySXRlbUNo
cm9taXVtLmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LWNsYXNzIENsaXBib2FyZDsKLWNsYXNzIENsaXBib2FyZENocm9taXVtOwotY2xhc3MgRmlsZTsK
LWNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7Ci0KK2NsYXNzIEtVUkw7CitjbGFzcyBTaGFy
ZWRCdWZmZXI7CiB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwogCi1jbGFzcyBEYXRhVHJhbnNm
ZXJJdGVtTGlzdENocm9taXVtIDogcHVibGljIERhdGFUcmFuc2Zlckl0ZW1MaXN0IHsKK2NsYXNz
IERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0gOiBwdWJsaWMgUmVmQ291bnRlZDxEYXRhVHJh
bnNmZXJJdGVtTGlzdENocm9taXVtPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8
RGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bT4gY3JlYXRlKFBhc3NSZWZQdHI8Q2xpcGJvYXJk
PiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFU
cmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0+IGNyZWF0ZSgpOworICAgIHN0YXRpYyBQYXNzUmVmUHRy
PERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0+IGNyZWF0ZUZyb21QYXN0ZWJvYXJkKCk7CiAK
LSAgICB2aXJ0dWFsIHNpemVfdCBsZW5ndGgoKTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RGF0
YVRyYW5zZmVySXRlbT4gaXRlbSh1bnNpZ25lZCBsb25nIGluZGV4KTsKLSAgICAvLyBGSVhNRTog
SW1wbGVtZW50IFY4RGF0YVRyYW5zZmVySXRlbUxpc3Q6OmluZGV4ZWRQcm9wZXJ0eURlbGV0ZXIg
dG8gZ2V0IHRoaXMgY2FsbGVkLgotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVJdGVtKHVuc2lnbmVk
IGxvbmcgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoKTsK
LSAgICB2aXJ0dWFsIHZvaWQgYWRkKGNvbnN0IFN0cmluZyYgZGF0YSwgY29uc3QgU3RyaW5nJiB0
eXBlLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdmlydHVhbCB2b2lkIGFkZChQYXNzUmVmUHRyPEZp
bGU+KTsKKyAgICB2aXJ0dWFsIH5EYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtKCk7CiAKKyAg
ICB2aXJ0dWFsIHNpemVfdCBsZW5ndGgoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVm
UHRyPERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bT4gaXRlbSh1bnNpZ25lZCBsb25nIGluZGV4KSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUl0ZW0odW5zaWduZWQgbG9uZyBpbmRleCkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBjbGVhcigpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkKGNv
bnN0IFN0cmluZyYgZGF0YSwgY29uc3QgU3RyaW5nJiB0eXBlLCBFeGNlcHRpb25Db2RlJikgPSAw
OwogcHJpdmF0ZToKLSAgICBEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtKFBhc3NSZWZQdHI8
Q2xpcGJvYXJkPiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwotICAgIENsaXBib2FyZENocm9t
aXVtKiBjbGlwYm9hcmRDaHJvbWl1bSgpIGNvbnN0OworICAgIGZyaWVuZCBjbGFzcyBDaHJvbWl1
bURhdGFPYmplY3Q7CiAKLSAgICBSZWZQdHI8Q2xpcGJvYXJkPiBtX293bmVyOwotICAgIC8vIElu
ZGlyZWN0bHkgb3duZWQgYnkgb3VyIHBhcmVudC4KLSAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBtX2NvbnRleHQ7Ci0gICAgVmVjdG9yPFJlZlB0cjxEYXRhVHJhbnNmZXJJdGVtPiA+IG1faXRl
bXM7CisgICAgdmlydHVhbCB2b2lkIGludGVybmFsQWRkU3RyaW5nKGNvbnN0IFN0cmluZyYgdHlw
ZSwgY29uc3QgU3RyaW5nJiBkYXRhKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGludGVybmFsQWRk
VVJMKGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHRpdGxlKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGludGVybmFsQWRkSFRNTChjb25zdCBTdHJpbmcmIG1hcmt1cCwgY29uc3QgS1VS
TCYgYmFzZVVSTCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBpbnRlcm5hbEFkZEZpbGVuYW1lKGNv
bnN0IFN0cmluZyYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgaW50ZXJuYWxBZGRTaGFyZWRCdWZm
ZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4dGVuc2lvbiwgUGFzc1JlZlB0
cjxTaGFyZWRCdWZmZXI+KSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EcmFnRGF0YUNocm9taXVt
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RyYWdEYXRhQ2hyb21pdW0u
Y3BwCmluZGV4IDljMzgzODYwMjUxYzc0NzAwOTJmOTY1MzdhNjE3NzkyODg4YmRiYmIuLjY2NTEz
NTkyNTdjYmY0YWE2ZGM3MGQxYmIwNGNhM2FlYjdlYTU2MTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RyYWdEYXRhQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RyYWdEYXRhQ2hyb21pdW0uY3BwCkBAIC01Nywx
MiArNTcsOCBAQCBib29sIERyYWdEYXRhOjpjb250YWluc1VSTChGcmFtZSosIEZpbGVuYW1lQ29u
dmVyc2lvblBvbGljeSBmaWxlbmFtZVBvbGljeSkgY29ucwogU3RyaW5nIERyYWdEYXRhOjphc1VS
TChGcmFtZSosIEZpbGVuYW1lQ29udmVyc2lvblBvbGljeSBmaWxlbmFtZVBvbGljeSwgU3RyaW5n
KiB0aXRsZSkgY29uc3QKIHsKICAgICBTdHJpbmcgdXJsOwotICAgIGlmIChtX3BsYXRmb3JtRHJh
Z0RhdGEtPnR5cGVzKCkuY29udGFpbnMobWltZVR5cGVVUkwpKSB7Ci0gICAgICAgIGJvb2wgaWdu
b3JlZFN1Y2Nlc3M7Ci0gICAgICAgIHVybCA9IG1fcGxhdGZvcm1EcmFnRGF0YS0+Z2V0RGF0YSht
aW1lVHlwZVVSTCwgaWdub3JlZFN1Y2Nlc3MpOwotICAgICAgICBpZiAodGl0bGUpCi0gICAgICAg
ICAgICAqdGl0bGUgPSBtX3BsYXRmb3JtRHJhZ0RhdGEtPnVybFRpdGxlKCk7Ci0gICAgfSBlbHNl
IGlmIChmaWxlbmFtZVBvbGljeSA9PSBDb252ZXJ0RmlsZW5hbWVzICYmIGNvbnRhaW5zRmlsZXMo
KSkgeworICAgIG1fcGxhdGZvcm1EcmFnRGF0YS0+Z2V0VVJMKHVybCwgdGl0bGUpOworICAgIGlm
ICh1cmwuaXNFbXB0eSgpICYmIGZpbGVuYW1lUG9saWN5ID09IENvbnZlcnRGaWxlbmFtZXMgJiYg
Y29udGFpbnNGaWxlcygpKSB7CiAgICAgICAgIHVybCA9IFBsYXRmb3JtU3VwcG9ydDo6ZmlsZVBh
dGhUb1VSTChQbGF0Zm9ybVN1cHBvcnQ6OmdldEFic29sdXRlUGF0aChtX3BsYXRmb3JtRHJhZ0Rh
dGEtPmZpbGVuYW1lcygpWzBdKSk7CiAgICAgfQogICAgIHJldHVybiB1cmw7CkBAIC0xNDEsMTAg
KzEzNywxMSBAQCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IERyYWdEYXRhOjphc0ZyYWdt
ZW50KEZyYW1lKiBmcmFtZSwgUGFzc1JlZlB0cjxSYW5nZQogICAgICAgICAvLyAgICByZXR1cm4g
ZnJhZ21lbnQ7CiAgICAgfQogCi0gICAgaWYgKG1fcGxhdGZvcm1EcmFnRGF0YS0+dHlwZXMoKS5j
b250YWlucyhtaW1lVHlwZVRleHRIVE1MKSkgewotICAgICAgICBib29sIGlnbm9yZWRTdWNjZXNz
OwotICAgICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBjcmVhdGVGcmFn
bWVudEZyb21NYXJrdXAoZnJhbWUtPmRvY3VtZW50KCksCi0gICAgICAgICAgICBtX3BsYXRmb3Jt
RHJhZ0RhdGEtPmdldERhdGEobWltZVR5cGVUZXh0SFRNTCwgaWdub3JlZFN1Y2Nlc3MpLCBtX3Bs
YXRmb3JtRHJhZ0RhdGEtPmh0bWxCYXNlVXJsKCksIEZyYWdtZW50U2NyaXB0aW5nTm90QWxsb3dl
ZCk7CisgICAgU3RyaW5nIG1hcmt1cDsKKyAgICBLVVJMIGJhc2VVUkw7CisgICAgbV9wbGF0Zm9y
bURyYWdEYXRhLT5nZXRIVE1MKG1hcmt1cCwgYmFzZVVSTCk7CisgICAgaWYgKCFtYXJrdXAuaXNF
bXB0eSgpKSB7CisgICAgICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGNy
ZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChmcmFtZS0+ZG9jdW1lbnQoKSwgbWFya3VwLCBiYXNlVVJM
LCBGcmFnbWVudFNjcmlwdGluZ05vdEFsbG93ZWQpOwogICAgICAgICByZXR1cm4gZnJhZ21lbnQu
cmVsZWFzZSgpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
cXQvRGF0YVRyYW5zZmVySXRlbUxpc3RRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9x
dC9EYXRhVHJhbnNmZXJJdGVtTGlzdFF0LmNwcAppbmRleCAwNjgxOTgyODM0OTQyNzVlYzNhMTlh
MWIzYTRlYWUzNzRmNmY0OTJjLi4xODA2YTdmNmY1Y2M0MGQ1YTQ1OTUyMjlkNzZlYmVhNmZlNzNl
YzRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9EYXRhVHJhbnNmZXJJ
dGVtTGlzdFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9EYXRhVHJhbnNm
ZXJJdGVtTGlzdFF0LmNwcApAQCAtNDUsNyArNDUsNyBAQCBEYXRhVHJhbnNmZXJJdGVtTGlzdFF0
OjpEYXRhVHJhbnNmZXJJdGVtTGlzdFF0KFBhc3NSZWZQdHI8Q2xpcGJvYXJkPiBvd25lciwgU2Ny
aQogewogfQogCi1zaXplX3QgRGF0YVRyYW5zZmVySXRlbUxpc3RRdDo6bGVuZ3RoKCkKK3NpemVf
dCBEYXRhVHJhbnNmZXJJdGVtTGlzdFF0OjpsZW5ndGgoKSBjb25zdAogewogICAgIGlmIChtX293
bmVyLT5wb2xpY3koKSA9PSBDbGlwYm9hcmROdW1iKQogICAgICAgICByZXR1cm4gMDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0RhdGFUcmFuc2Zlckl0ZW1MaXN0UXQu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0RhdGFUcmFuc2Zlckl0ZW1MaXN0UXQuaApp
bmRleCBjOGE4ZGJjOTI1ZjMzMzMyNGJjNTc1YWY2YWU4NGRmYTI5ZWY5NGExLi5kNWMzOWE0YTU4
NDRkNzUzNDNhN2MyMzFmYTVjYjgyYmFhMzUzYzAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9xdC9EYXRhVHJhbnNmZXJJdGVtTGlzdFF0LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vcXQvRGF0YVRyYW5zZmVySXRlbUxpc3RRdC5oCkBAIC00Miw3ICs0Miw3IEBA
IGNsYXNzIERhdGFUcmFuc2Zlckl0ZW1MaXN0UXQgOiBwdWJsaWMgRGF0YVRyYW5zZmVySXRlbUxp
c3QgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1MaXN0
UXQ+IGNyZWF0ZShQYXNzUmVmUHRyPENsaXBib2FyZD4sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
KTsKIAotICAgIHZpcnR1YWwgc2l6ZV90IGxlbmd0aCgpOworICAgIHZpcnR1YWwgc2l6ZV90IGxl
bmd0aCgpIGNvbnN0OwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtPiBp
dGVtKHVuc2lnbmVkIGxvbmcgaW5kZXgpOwogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVJdGVtKHVu
c2lnbmVkIGxvbmcgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQgY2xl
YXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3Jt
L1dlYkRyYWdEYXRhLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9X
ZWJEcmFnRGF0YS5oCmluZGV4IDE3MTIzMWVjYTM0YmE0Nzc3ZDZhYmVhNDIzNjNjNGRjOTZkMzk2
NjcuLjc0Njk5N2NlZGEyOGIzOTk4NDM5ZTQ1N2IyY2M3YzZmZTczZjliYmMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYkRyYWdEYXRhLmgKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViRHJhZ0RhdGEuaApA
QCAtMzIsNiArMzIsNyBAQAogI2RlZmluZSBXZWJEcmFnRGF0YV9oCiAKICNpbmNsdWRlICJXZWJD
b21tb24uaCIKKyNpbmNsdWRlICJXZWJEYXRhLmgiCiAjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCiAK
ICNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KQEAgLTQxLDcgKzQyLDYgQEAgbmFtZXNwYWNlIFdU
RiB7IHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBQYXNzUmVmUHRyOyB9CiAKIG5hbWVzcGFj
ZSBXZWJLaXQgewogCi1jbGFzcyBXZWJEYXRhOwogY2xhc3MgV2ViRHJhZ0RhdGFQcml2YXRlOwog
Y2xhc3MgV2ViVVJMOwogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFdlYlZlY3RvcjsKQEAg
LTY2LDYgKzY2LDIzIEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1
cm4gIW1fcHJpdmF0ZTsgfQogCisgICAgc3RydWN0IERyYWdEYXRhSXRlbSB7CisgICAgICAgIGVu
dW0gS2luZCB7CisgICAgICAgICAgICBTVFJJTkcsCisgICAgICAgICAgICBGSUxFTkFNRSwKKyAg
ICAgICAgICAgIFNIQVJFRF9CVUZGRVIsCisgICAgICAgIH07CisgICAgICAgIEtpbmQga2luZDsK
KyAgICAgICAgV2ViU3RyaW5nIHR5cGU7CisgICAgICAgIFdlYlN0cmluZyBzdHJpbmdEYXRhOwor
ICAgICAgICBXZWJTdHJpbmcgbWV0YWRhdGE7CisgICAgICAgIFdlYkRhdGEgYmluYXJ5RGF0YTsK
KyAgICB9OworCisgICAgV0VCS0lUX0VYUE9SVCBXZWJWZWN0b3I8RHJhZ0RhdGFJdGVtPiBpdGVt
cygpIGNvbnN0OworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzZXRJdGVtcyhjb25zdCBXZWJWZWN0
b3I8RHJhZ0RhdGFJdGVtPiYpOworCisgICAgLy8gTGVnYWN5IGludGVyZmFjZS4gVG8gYmUgcmVt
b3ZlZCBvbmNlIENocm9taXVtIG5vIGxvbmdlciBjYWxscyB0aGVtLgogICAgIFdFQktJVF9FWFBP
UlQgV2ViU3RyaW5nIHVybCgpIGNvbnN0OwogICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzZXRVUkwo
Y29uc3QgV2ViVVJMJik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkRyYWdEYXRhLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRyYWdEYXRh
LmNwcAppbmRleCA1YzMxMjM5MThhZjYzZmU4MTU0MzMwZmRmZjI1MmFlNzFjYzFlOTRhLi5iYjM2
ZjhiOWZjOWVhMTJkNmU1MTAwMzljMjA1MzhkNGUzZjIxMjE1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEcmFnRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViRHJhZ0RhdGEuY3BwCkBAIC0zMyw2ICszMyw5IEBACiAKICNpbmNsdWRl
ICJDaHJvbWl1bURhdGFPYmplY3QuaCIKICNpbmNsdWRlICJDbGlwYm9hcmRNaW1lVHlwZXMuaCIK
KyNpbmNsdWRlICJEYXRhVHJhbnNmZXJJdGVtLmgiCisjaW5jbHVkZSAiRGF0YVRyYW5zZmVySXRl
bUNocm9taXVtLmgiCisjaW5jbHVkZSAiRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bS5oIgog
I2luY2x1ZGUgInBsYXRmb3JtL1dlYkRhdGEuaCIKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJTdHJp
bmcuaCIKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJVUkwuaCIKQEAgLTY2LDE3ICs2OSw2NCBAQCB2
b2lkIFdlYkRyYWdEYXRhOjphc3NpZ24oY29uc3QgV2ViRHJhZ0RhdGEmIG90aGVyKQogICAgIGFz
c2lnbihwKTsKIH0KIAorV2ViVmVjdG9yPFdlYkRyYWdEYXRhOjpEcmFnRGF0YUl0ZW0+IFdlYkRy
YWdEYXRhOjppdGVtcygpIGNvbnN0Cit7CisgICAgUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1MaXN0
Q2hyb21pdW0+IGxpc3QgPSBtX3ByaXZhdGUtPml0ZW1zKCk7CisgICAgV2ViVmVjdG9yPERyYWdE
YXRhSXRlbT4gZGF0YShsaXN0LT5sZW5ndGgoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBkYXRhLnNpemUoKTsgKytpKSB7CisgICAgICAgIFJlZlB0cjxEYXRhVHJhbnNmZXJJdGVtQ2hy
b21pdW0+IGl0ZW0gPSBsaXN0LT5pdGVtKGkpOworICAgICAgICBEcmFnRGF0YUl0ZW0mIGRyYWdJ
dGVtID0gZGF0YVtpXTsKKworICAgICAgICBpZiAoaXRlbS0+a2luZCgpID09IERhdGFUcmFuc2Zl
ckl0ZW06OmtpbmRTdHJpbmcpIHsKKyAgICAgICAgICAgIGRyYWdJdGVtLmtpbmQgPSBEcmFnRGF0
YUl0ZW06OlNUUklORzsKKyAgICAgICAgICAgIGRyYWdJdGVtLnR5cGUgPSBpdGVtLT50eXBlKCk7
CisgICAgICAgICAgICBkcmFnSXRlbS5zdHJpbmdEYXRhID0gaXRlbS0+bGVnYWN5R2V0QXNTdHJp
bmcoKTsKKyAgICAgICAgICAgIGlmIChpdGVtLT50eXBlKCkgPT0gbWltZVR5cGVUZXh0VVJJTGlz
dCkKKyAgICAgICAgICAgICAgICBkcmFnSXRlbS5tZXRhZGF0YSA9IHN0YXRpY19jYXN0PERhdGFU
cmFuc2ZlclVSSUxpc3RJdGVtKj4oaXRlbS5nZXQoKSktPnRpdGxlKCk7CisgICAgICAgICAgICBl
bHNlIGlmIChpdGVtLT50eXBlKCkgPT0gbWltZVR5cGVUZXh0SFRNTCkKKyAgICAgICAgICAgICAg
ICBkcmFnSXRlbS5tZXRhZGF0YSA9IHN0YXRpY19jYXN0PERhdGFUcmFuc2ZlckhUTUxJdGVtKj4o
aXRlbS5nZXQoKSktPmJhc2VVUkwoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIERh
dGFUcmFuc2ZlckZpbGVJdGVtKiBmaWxlSXRlbSA9IHN0YXRpY19jYXN0PERhdGFUcmFuc2ZlckZp
bGVJdGVtKj4oaXRlbS5nZXQoKSk7CisgICAgICAgICAgICBpZiAoZmlsZUl0ZW0tPnN0b3JhZ2VU
eXBlKCkgPT0gRGF0YVRyYW5zZmVyRmlsZUl0ZW06OlNoYXJlZEJ1ZmZlclR5cGUpIHsKKyAgICAg
ICAgICAgICAgICBCdWZmZXJlZERhdGFUcmFuc2ZlclNoYXJlZEJ1ZmZlckl0ZW0qIGJ1ZmZlckl0
ZW0gPSBzdGF0aWNfY2FzdDxCdWZmZXJlZERhdGFUcmFuc2ZlclNoYXJlZEJ1ZmZlckl0ZW0qPihm
aWxlSXRlbSk7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgYW4gYWJ1c2Ugb2Yg
dGhlc2UgZmllbGRzLgorICAgICAgICAgICAgICAgIGRyYWdJdGVtLnN0cmluZ0RhdGEgPSBidWZm
ZXJJdGVtLT5uYW1lKCk7CisgICAgICAgICAgICAgICAgZHJhZ0l0ZW0ubWV0YWRhdGEgPSBidWZm
ZXJJdGVtLT5leHRlbnNpb24oKTsKKyAgICAgICAgICAgICAgICBkcmFnSXRlbS5iaW5hcnlEYXRh
ID0gYnVmZmVySXRlbS0+YnVmZmVyKCk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsgLy8gT3RoZXIgdHlwZXMgYXJlbid0IHlldCBzdXBwb3J0ZWQgZm9yIGRy
YWcgb3V0LgorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBkYXRhOworfQorCit2b2lkIFdl
YkRyYWdEYXRhOjpzZXRJdGVtcyhjb25zdCBXZWJWZWN0b3I8RHJhZ0RhdGFJdGVtPiYgaXRlbXMp
Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpdGVtcy5zaXplKCk7ICsraSkgeworICAg
ICAgICBpZiAoaXRlbXNbaV0ua2luZCA9PSBEcmFnRGF0YUl0ZW06OlNUUklORykgeworICAgICAg
ICAgICAgLy8gRklYTUU6IElzIHRoZXJlIGEgY2xlYW5lciB3YXkgdG8gZG8gdGhpcz8KKyAgICAg
ICAgICAgIGlmIChpdGVtc1tpXS50eXBlID09IFdlYlN0cmluZyhTdHJpbmcobWltZVR5cGVUZXh0
VVJJTGlzdCkpKQorICAgICAgICAgICAgICAgIG1fcHJpdmF0ZS0+c2V0VVJMKGl0ZW1zW2ldLnN0
cmluZ0RhdGEsIGl0ZW1zW2ldLm1ldGFkYXRhKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGl0ZW1z
W2ldLnR5cGUgPT0gV2ViU3RyaW5nKFN0cmluZyhtaW1lVHlwZVRleHRIVE1MKSkpCisgICAgICAg
ICAgICAgICAgbV9wcml2YXRlLT5zZXRIVE1MKGl0ZW1zW2ldLnN0cmluZ0RhdGEsIEtVUkwoS1VS
TCgpLCBpdGVtc1tpXS5tZXRhZGF0YSkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIG1fcHJpdmF0ZS0+c2V0RGF0YShpdGVtc1tpXS50eXBlLCBpdGVtc1tpXS5zdHJpbmdEYXRh
KTsKKyAgICAgICAgfSBlbHNlIGlmIChpdGVtc1tpXS5raW5kID09IERyYWdEYXRhSXRlbTo6RklM
RU5BTUUpCisgICAgICAgICAgICBtX3ByaXZhdGUtPmFkZEZpbGVuYW1lKGl0ZW1zW2ldLnN0cmlu
Z0RhdGEpOworICAgIH0KK30KKwogV2ViU3RyaW5nIFdlYkRyYWdEYXRhOjp1cmwoKSBjb25zdAog
ewogICAgIEFTU0VSVCghaXNOdWxsKCkpOwogICAgIGJvb2wgaWdub3JlZFN1Y2Nlc3M7Ci0gICAg
cmV0dXJuIG1fcHJpdmF0ZS0+Z2V0RGF0YShtaW1lVHlwZVVSTCwgaWdub3JlZFN1Y2Nlc3MpOwor
ICAgIHJldHVybiBtX3ByaXZhdGUtPmdldERhdGEobWltZVR5cGVUZXh0VVJJTGlzdCwgaWdub3Jl
ZFN1Y2Nlc3MpOwogfQogCiB2b2lkIFdlYkRyYWdEYXRhOjpzZXRVUkwoY29uc3QgV2ViVVJMJiB1
cmwpCiB7CiAgICAgZW5zdXJlTXV0YWJsZSgpOwotICAgIG1fcHJpdmF0ZS0+c2V0RGF0YShtaW1l
VHlwZVVSTCwgS1VSTCh1cmwpLnN0cmluZygpKTsKKyAgICBtX3ByaXZhdGUtPnNldERhdGEobWlt
ZVR5cGVUZXh0VVJJTGlzdCwgS1VSTCh1cmwpLnN0cmluZygpKTsKIH0KIAogV2ViU3RyaW5nIFdl
YkRyYWdEYXRhOjp1cmxUaXRsZSgpIGNvbnN0CkBAIC0xMTMsNyArMTYzLDcgQEAgV2ViU3RyaW5n
IFdlYkRyYWdEYXRhOjpmaWxlRXh0ZW5zaW9uKCkgY29uc3QKIHZvaWQgV2ViRHJhZ0RhdGE6OnNl
dEZpbGVFeHRlbnNpb24oY29uc3QgV2ViU3RyaW5nJiBmaWxlRXh0ZW5zaW9uKQogewogICAgIGVu
c3VyZU11dGFibGUoKTsKLSAgICBtX3ByaXZhdGUtPnNldEZpbGVFeHRlbnNpb24oZmlsZUV4dGVu
c2lvbik7CisgICAgLy8gUmVtYWlucyBmb3IgY29tcGF0aWJpbGl0eS4gQ2hyb21pdW0gbmV2ZXIg
c2V0cyB0aGVzZSBmaWVsZHMgdG8gYSBub24tZW1wdHkgdmFsdWUuCiB9CiAKIGJvb2wgV2ViRHJh
Z0RhdGE6OmNvbnRhaW5zRmlsZW5hbWVzKCkgY29uc3QKQEAgLTEzMSw2ICsxODEsOCBAQCB2b2lk
IFdlYkRyYWdEYXRhOjpmaWxlbmFtZXMoV2ViVmVjdG9yPFdlYlN0cmluZz4mIGZpbGVuYW1lcykg
Y29uc3QKIHZvaWQgV2ViRHJhZ0RhdGE6OnNldEZpbGVuYW1lcyhjb25zdCBXZWJWZWN0b3I8V2Vi
U3RyaW5nPiYgZmlsZW5hbWVzKQogewogICAgIGVuc3VyZU11dGFibGUoKTsKKyAgICAvLyBGSVhN
RTogVGhpcyBpc24ndCByZWFsbHkgYSAic2V0IiBzbyBtdWNoIGFzIGFuICJhZGQiLiBTaW5jZSB0
aGlzIG1ldGhvZCBpcyBnb2luZyBhd2F5LCBqc3V0CisgICAgLy8gbGVhdmluZyBpdCBhcyBpdCBp
cy4uLgogICAgIFZlY3RvcjxTdHJpbmc+IGZpbGVuYW1lc0NvcHk7CiAgICAgZmlsZW5hbWVzQ29w
eS5hcHBlbmQoZmlsZW5hbWVzLmRhdGEoKSwgZmlsZW5hbWVzLnNpemUoKSk7CiAgICAgbV9wcml2
YXRlLT5zZXRGaWxlbmFtZXMoZmlsZW5hbWVzQ29weSk7CkBAIC0xMzksOSArMTkxLDcgQEAgdm9p
ZCBXZWJEcmFnRGF0YTo6c2V0RmlsZW5hbWVzKGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiBm
aWxlbmFtZXMpCiB2b2lkIFdlYkRyYWdEYXRhOjphcHBlbmRUb0ZpbGVuYW1lcyhjb25zdCBXZWJT
dHJpbmcmIGZpbGVuYW1lKQogewogICAgIGVuc3VyZU11dGFibGUoKTsKLSAgICBWZWN0b3I8U3Ry
aW5nPiBmaWxlbmFtZXMgPSBtX3ByaXZhdGUtPmZpbGVuYW1lcygpOwotICAgIGZpbGVuYW1lcy5h
cHBlbmQoZmlsZW5hbWUpOwotICAgIG1fcHJpdmF0ZS0+c2V0RmlsZW5hbWVzKGZpbGVuYW1lcyk7
CisgICAgbV9wcml2YXRlLT5hZGRGaWxlbmFtZShmaWxlbmFtZSk7CiB9CiAKIFdlYlN0cmluZyBX
ZWJEcmFnRGF0YTo6cGxhaW5UZXh0KCkgY29uc3QKQEAgLTE5MSw3ICsyNDEsNyBAQCBXZWJTdHJp
bmcgV2ViRHJhZ0RhdGE6OmZpbGVDb250ZW50RmlsZW5hbWUoKSBjb25zdAogdm9pZCBXZWJEcmFn
RGF0YTo6c2V0RmlsZUNvbnRlbnRGaWxlbmFtZShjb25zdCBXZWJTdHJpbmcmIGZpbGVuYW1lKQog
ewogICAgIGVuc3VyZU11dGFibGUoKTsKLSAgICBtX3ByaXZhdGUtPnNldEZpbGVDb250ZW50Rmls
ZW5hbWUoZmlsZW5hbWUpOworICAgIC8vIFJlbWFpbnMgZm9yIGNvbXBhdGliaWxpdHkuIENocm9t
aXVtIG5ldmVyIHNldHMgdGhlc2UgZmllbGRzIHRvIGEgbm9uLWVtcHR5IHZhbHVlLgogfQogCiBX
ZWJEYXRhIFdlYkRyYWdEYXRhOjpmaWxlQ29udGVudCgpIGNvbnN0CkBAIC0yMDMsMTcgKzI1Mywx
NiBAQCBXZWJEYXRhIFdlYkRyYWdEYXRhOjpmaWxlQ29udGVudCgpIGNvbnN0CiB2b2lkIFdlYkRy
YWdEYXRhOjpzZXRGaWxlQ29udGVudChjb25zdCBXZWJEYXRhJiBmaWxlQ29udGVudCkKIHsKICAg
ICBlbnN1cmVNdXRhYmxlKCk7Ci0gICAgbV9wcml2YXRlLT5zZXRGaWxlQ29udGVudChmaWxlQ29u
dGVudCk7CisgICAgLy8gUmVtYWlucyBmb3IgY29tcGF0aWJpbGl0eS4gQ2hyb21pdW0gbmV2ZXIg
c2V0cyB0aGVzZSBmaWVsZHMgdG8gYSBub24tZW1wdHkgdmFsdWUuCiB9CiAKIFdlYlZlY3RvcjxX
ZWJEcmFnRGF0YTo6Q3VzdG9tRGF0YT4gV2ViRHJhZ0RhdGE6OmN1c3RvbURhdGEoKSBjb25zdAog
ewogICAgIEFTU0VSVCghaXNOdWxsKCkpOwogICAgIFdlYlZlY3RvcjxDdXN0b21EYXRhPiBjdXN0
b21EYXRhKHN0YXRpY19jYXN0PHNpemVfdD4obV9wcml2YXRlLT5jdXN0b21EYXRhKCkuc2l6ZSgp
KSk7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGJlZ2luID0g
bV9wcml2YXRlLT5jdXN0b21EYXRhKCkuYmVnaW4oKTsKLSAgICBIYXNoTWFwPFN0cmluZywgU3Ry
aW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wcml2YXRlLT5jdXN0b21EYXRhKCkuZW5kKCk7
CisgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gZGF0YSA9IG1fcHJpdmF0ZS0+Y3VzdG9tRGF0
YSgpOwogICAgIHNpemVfdCBpID0gMDsKLSAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+
Ojpjb25zdF9pdGVyYXRvciBpdCA9IGJlZ2luOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICBmb3Ig
KEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGRhdGEuYmVnaW4o
KTsgaXQgIT0gZGF0YS5lbmQoKTsgKytpdCkgewogICAgICAgICBDdXN0b21EYXRhIGRhdGEgPSB7
aXQtPmZpcnN0LCBpdC0+c2Vjb25kfTsKICAgICAgICAgY3VzdG9tRGF0YVtpKytdID0gZGF0YTsK
ICAgICB9CkBAIC0yMjMsOSArMjcyLDEwIEBAIFdlYlZlY3RvcjxXZWJEcmFnRGF0YTo6Q3VzdG9t
RGF0YT4gV2ViRHJhZ0RhdGE6OmN1c3RvbURhdGEoKSBjb25zdAogdm9pZCBXZWJEcmFnRGF0YTo6
c2V0Q3VzdG9tRGF0YShjb25zdCBXZWJWZWN0b3I8V2ViRHJhZ0RhdGE6OkN1c3RvbURhdGE+JiBj
dXN0b21EYXRhKQogewogICAgIGVuc3VyZU11dGFibGUoKTsKLSAgICBIYXNoTWFwPFN0cmluZywg
U3RyaW5nPiYgY3VzdG9tRGF0YU1hcCA9IG1fcHJpdmF0ZS0+Y3VzdG9tRGF0YSgpOworICAgIEhh
c2hNYXA8U3RyaW5nLCBTdHJpbmc+IGN1c3RvbURhdGFNYXA7CiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBjdXN0b21EYXRhLnNpemUoKTsgKytpKQogICAgICAgICBjdXN0b21EYXRhTWFwLnNl
dChjdXN0b21EYXRhW2ldLnR5cGUsIGN1c3RvbURhdGFbaV0uZGF0YSk7CisgICAgbV9wcml2YXRl
LT5zZXRDdXN0b21EYXRhKGN1c3RvbURhdGFNYXApOwogfQogCiBXZWJEcmFnRGF0YTo6V2ViRHJh
Z0RhdGEoY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdD4m
IGRhdGEpCkBAIC0yNDYsNyArMjk2LDYgQEAgV2ViRHJhZ0RhdGE6Om9wZXJhdG9yIFdURjo6UGFz
c1JlZlB0cjxXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q+KCkgY29uc3QKIAogdm9pZCBXZWJE
cmFnRGF0YTo6YXNzaWduKFdlYkRyYWdEYXRhUHJpdmF0ZSogcCkKIHsKLSAgICBBU1NFUlQoIXAg
fHwgcC0+c3RvcmFnZU1vZGUoKSA9PSBDaHJvbWl1bURhdGFPYmplY3Q6OkJ1ZmZlcmVkKTsKICAg
ICAvLyBwIGlzIGFscmVhZHkgcmVmJ2QgZm9yIHVzIGJ5IHRoZSBjYWxsZXIKICAgICBpZiAobV9w
cml2YXRlKQogICAgICAgICBtX3ByaXZhdGUtPmRlcmVmKCk7CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYmY2YTE2OWJjN2M4
NDE1MjU4ZGVkZTlmOGI2OGNjYWIyZjQ3ODgwNC4uYzVlZTdhNWUyN2YzYzEwZDdkZGUyMmNhZTU2
NjVlYmU2N2VkYTVlYiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xh
eW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEyLTAxLTIzICBEYW5pZWwg
Q2hlbmcgIDxkY2hlbmdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJlZmFjdG9yIENocm9taXVt
RGF0YU9iamVjdCBhbmQgRGF0YVRyYW5zZmVySXRlbUxpc3QvRGF0YVRyYW5zZmVySXRlbSB0byBy
ZW1vdmUgZHVwbGljYXRpb24uCisKKyAgICAgICAgW2Nocm9taXVtXSBSZWZhY3RvciBDbGlwYm9h
cmRDaHJvbWl1bSBhbmQgRGF0YVRyYW5zZmVySXRlbUxpc3QvRGF0YVRyYW5zZmVySXRlbSB0byBz
dXBwb3J0IEhUTUwgc3BlYworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NzY1OTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIGVkaXRpbmcvcGFzdGVib2FyZC9kYXRhVHJhbnNmZXItc2V0RGF0YS1nZXREYXRh
LWV4cGVjdGVkLnR4dDogVXBkYXRlIGV4cGVjdGVkIHJlc3VsdCBzaW5jZQorICAgICAgICAgICAg
d2UgaW1wbGVtZW50IHRoaXMgY29ycmVjdGx5IG5vdy4KKwogMjAxMi0wMS0yMyAgUnlvc3VrZSBO
aXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBSRUdSRVNTSU9OKHIxMDUzOTYpOiBk
cmFnIHN0YXRlIGlzIG5vdCBjbGVhcmVkIGFmdGVyIGVhY2ggZHJhZwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkL2RhdGFUcmFuc2Zlci1zZXREYXRhLWdldERhdGEt
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkL2RhdGFUcmFuc2Zl
ci1zZXREYXRhLWdldERhdGEtZXhwZWN0ZWQudHh0CmluZGV4IDE2NzIxNjY4ZjU1YTFiOTAzZTQz
ODlhOGZlYjRjOGNkYTNiZDgyOGEuLjZkN2YxNzIxOGRmNzcyZjI3YzE4MzIyZDhjODQzYmMxYWY4
OGY4NzEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9kYXRhVHJh
bnNmZXItc2V0RGF0YS1nZXREYXRhLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9lZGl0
aW5nL3Bhc3RlYm9hcmQvZGF0YVRyYW5zZmVyLXNldERhdGEtZ2V0RGF0YS1leHBlY3RlZC50eHQK
QEAgLTMxLDggKzMxLDggQEAgUEFTUyBnZXREYXRhUmVzdWx0IGlzICIjIGNvbW1lbnRcclxuaHR0
cDovL3Rlc3QuY29tXHJcbmh0dHA6Ly9jaGVjay5jb20iCiBQQVNTIGdldERhdGFSZXN1bHRUeXBl
IGlzICJzdHJpbmciCiBQQVNTIGdldERhdGFSZXN1bHQgaXMgImh0dHA6Ly90ZXN0LmNvbS8iCiAt
LS0gVGVzdCBzZXQgJ3RleHQvdXJpLWxpc3QnLCBnZXQgJ1VSTCcgd2l0aCBvbmx5IGNvbW1lbnRz
OgotRkFJTCBnZXREYXRhUmVzdWx0VHlwZSBzaG91bGQgYmUgc3RyaW5nLiBXYXMgdW5kZWZpbmVk
LgotRkFJTCBnZXREYXRhUmVzdWx0IHNob3VsZCBiZSAgKG9mIHR5cGUgc3RyaW5nKS4gV2FzIHVu
ZGVmaW5lZCAob2YgdHlwZSB1bmRlZmluZWQpLgorUEFTUyBnZXREYXRhUmVzdWx0VHlwZSBpcyAi
c3RyaW5nIgorUEFTUyBnZXREYXRhUmVzdWx0IGlzICIiCiAtLS0gVGVzdCBzZXQvZ2V0ICd0ZXh0
L3BsYWluJzoKIFBBU1MgZ2V0RGF0YVJlc3VsdFR5cGUgaXMgInN0cmluZyIKIFBBU1MgZ2V0RGF0
YVJlc3VsdCBpcyAiTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123837</attachid>
            <date>2012-01-24 16:28:16 -0800</date>
            <delta_ts>2012-03-13 15:34:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76598-20120124162815.patch</filename>
            <type>text/plain</type>
            <size>106319</size>
            <attacher name="Daniel Cheng">dcheng</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1ODI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGEwN2ZmMjQxMWRlNDI5
YmVkNjI4YTYwNzcxYTA3YTA4Mjc5MDYxZi4uOTI1ZTgwYzRjY2ZhMGU2OGU5OWUxMWI1YTQyNmY4
MzQ5ZTczNTM2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE3NyBAQAogMjAxMi0wMS0yNCAgRGFu
aWVsIENoZW5nICA8ZGNoZW5nQGNocm9taXVtLm9yZz4KIAorICAgICAgICBbY2hyb21pdW1dIFJl
ZmFjdG9yIENsaXBib2FyZENocm9taXVtIGFuZCBEYXRhVHJhbnNmZXJJdGVtTGlzdC9EYXRhVHJh
bnNmZXJJdGVtIHRvIHN1cHBvcnQgSFRNTCBzcGVjCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NjU5OAorCisgICAgICAgIFRoaXMgZml4ZXMgQ2xpcGJv
YXJkQ2hyb21pdW0gYW5kIERhdGFUcmFuc2Zlckl0ZW0vRGF0YVRyYW5zZmVySXRlbUxpc3Qgc28g
dGhleSBhcmUgZnVsbHkKKyAgICAgICAgZXF1aXZhbGVudCB3aXRoIGVhY2ggb3RoZXIgYnkgdW5p
ZnlpbmcgdGhlIGRhdGEgc3RvcmFnZS4gV2hlbiBkcmFnZ2luZyBvdXQgb3IgY29weWluZyBkYXRh
LAorICAgICAgICB0eXBlcyBjYW4gYmUgc2V0IGJ5IG11dGF0aW5nIERhdGFUcmFuc2Zlckl0ZW1M
aXN0IG9yIENsaXBib2FyZENocm9taXVtLiBXaGVuIGRyYWdnaW5nIGluLAorICAgICAgICB0aGUg
dHlwZXMgd2lsbCBiZSBhdmFpbGFibGUgdmlhIGVpdGhlciBhcyB3ZWxsLgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENvdmVyZWQgYnkgZXhpc3Rpbmcg
dGVzdHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3Qu
Y3BwOiBSZWZhY3RvcmVkIHRvIGltcGxlbWVudCBpbnRlcmZhY2UgaW4gdGVybXMgb2YKKyAgICAg
ICAgb3BlcmF0aW9ucyBvbiBkYXRhIHN0b3JlIGxpc3QuCisgICAgICAgIChXZWJDb3JlOjpDaHJv
bWl1bURhdGFPYmplY3Q6Oml0ZW1zKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9i
amVjdDo6Y2xlYXJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6
Y2xlYXJBbGwpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpjbGVhckFs
bEV4Y2VwdEZpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6dHlw
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpnZXREYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6c2V0RGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OmdldFVSTCk6CisgICAgICAgIChXZWJDb3JlOjpD
aHJvbWl1bURhdGFPYmplY3Q6OnNldFVSTCk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURh
dGFPYmplY3Q6OmdldEhUTUwpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0
OjpzZXRIVE1MKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6dXJsVGl0
bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpzZXRVcmxUaXRsZSk6
CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6Omh0bWxCYXNlVXJsKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6c2V0SHRtbEJhc2VVcmwpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpjdXN0b21EYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6c2V0Q3VzdG9tRGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OmNvbnRhaW5zRmlsZW5hbWVzKToKKyAgICAgICAg
KFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6ZmlsZW5hbWVzKToKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjphZGRGaWxlbmFtZSk6
CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OnNldEZpbGVuYW1lcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OmFkZFNoYXJlZEJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpmaW5kU2hhcmVkQnVmZmVySXRlbSk6CisgICAgICAgIChXZWJDb3Jl
OjpDaHJvbWl1bURhdGFPYmplY3Q6OmZpbGVFeHRlbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6
Q2hyb21pdW1EYXRhT2JqZWN0OjpmaWxlQ29udGVudEZpbGVuYW1lKToKKyAgICAgICAgKFdlYkNv
cmU6OkNocm9taXVtRGF0YU9iamVjdDo6ZmlsZUNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
Q2hyb21pdW1EYXRhT2JqZWN0OjpDaHJvbWl1bURhdGFPYmplY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpmaW5kSXRlbSk6CisgICAgICAgICogcGxhdGZvcm0vY2hy
b21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURh
dGFPYmplY3Q6OmNyZWF0ZUZyb21QYXN0ZWJvYXJkKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9t
aXVtRGF0YU9iamVjdDo6Y3JlYXRlKToKKyAgICAgICAgKENocm9taXVtRGF0YU9iamVjdCk6Cisg
ICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uY3BwOiBJbXBsZW1l
bnQgd3JhcHBlciBmb3Igc2NvcGluZworICAgICAgICBEYXRhVHJhbnNmZXJJdGVtL0RhdGFUcmFu
c2Zlckl0ZW1MaXN0IGxpZmV0aW1lIGFwcHJvcHJpYXRlbHkuICBXZSBoYXZlIHRvIGRvIGl0IHNl
cGFyYXRlbHkKKyAgICAgICAgZnJvbSBDaHJvbWl1bURhdGFPYmplY3Qgc2luY2UgdGhlIHNhbWUg
Q2hyb21pdW1EYXRhT2JqZWN0IGlzIHVzZWQgZm9yIGRyYWdlbnRlciwgZHJhZ292ZXIsCisgICAg
ICAgIGFuZCBkcm9wLgorICAgICAgICAoKToKKyAgICAgICAgKFdlYkNvcmU6Om5vcm1hbGl6ZVR5
cGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkQ2hyb21pdW06OkNsaXBib2FyZENocm9t
aXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENocm9taXVtOjpjbGVhckRhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkQ2hyb21pdW06OmNsZWFyQWxsRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpDbGlwYm9hcmRDaHJvbWl1bTo6Z2V0RGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpDbGlwYm9hcmRDaHJvbWl1bTo6c2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDbGlw
Ym9hcmRDaHJvbWl1bTo6dHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkQ2hyb21p
dW06OmZpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OndyaXRlSW1hZ2VUb0RhdGFPYmplY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkQ2hyb21pdW06OmRlY2xhcmVBbmRXcml0ZURyYWdJ
bWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRDaHJvbWl1bTo6d3JpdGVVUkwpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkQ2hyb21pdW06OndyaXRlUmFuZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6Q2xpcGJvYXJkQ2hyb21pdW06OndyaXRlUGxhaW5UZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNsaXBib2FyZENocm9taXVtOjpoYXNEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OkNsaXBib2FyZENocm9taXVtOjppdGVtcyk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0v
Q2xpcGJvYXJkQ2hyb21pdW0uaDoKKyAgICAgICAgKENsaXBib2FyZENocm9taXVtKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNsaXBib2FyZENocm9taXVtOjpmcmFtZSk6CisgICAgICAgICogcGxhdGZv
cm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW1MaW51eC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDbGlwYm9hcmRDaHJvbWl1bTo6dmFsaWRhdGVGaWxlbmFtZSk6CisgICAgICAgICogcGxhdGZv
cm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW1NYWMuY3BwOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRDaHJvbWl1bTo6dmFsaWRhdGVGaWxlbmFtZSk6
CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW1XaW4uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkQ2hyb21pdW06OnZhbGlkYXRlRmlsZW5hbWUpOgor
ICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZFV0aWxpdGllc0Nocm9taXVtLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OnBhc3RlYm9hcmRIYXNDaGFuZ2VkKToKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZFV0aWxpdGllc0No
cm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1
bS9EYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0uY3BwOiBSZWZhY3RvciBjb21wbGV4IGJyYW5jaGlu
ZyBpbnRvIGEgc21hbGwKKyAgICAgICAgc2V0IG9mIGNsYXNzZXMgaW1wbGVtZW50aW5nIGEgdmly
dHVhbCBpbnRlcmZhY2UuCisgICAgICAgIChXZWJDb3JlOjpEYXRhVHJhbnNmZXJJdGVtQ2hyb21p
dW06On5EYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6RGF0YVRy
YW5zZmVySXRlbUNocm9taXVtOjpnZXRBc1N0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpEYXRh
VHJhbnNmZXJJdGVtQ2hyb21pdW06OmdldEFzRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRh
VHJhbnNmZXJJdGVtQ2hyb21pdW06OmxlZ2FjeUdldEFzU3RyaW5nKToKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YVRyYW5zZmVyVVJJTGlzdEl0ZW06OmtpbmQpOgor
ICAgICAgICAoV2ViQ29yZTo6RGF0YVRyYW5zZmVyVVJJTGlzdEl0ZW06OnR5cGUpOgorICAgICAg
ICAoV2ViQ29yZTo6RGF0YVRyYW5zZmVySFRNTEl0ZW06OmtpbmQpOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0YVRyYW5zZmVySFRNTEl0ZW06OnR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6QnVmZmVy
ZWREYXRhVHJhbnNmZXJTdHJpbmdJdGVtOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QnVm
ZmVyZWREYXRhVHJhbnNmZXJTdHJpbmdJdGVtOjpraW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkJ1
ZmZlcmVkRGF0YVRyYW5zZmVyU3RyaW5nSXRlbTo6dHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpC
dWZmZXJlZERhdGFUcmFuc2ZlclN0cmluZ0l0ZW06OmdldEFzU3RyaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OkJ1ZmZlcmVkRGF0YVRyYW5zZmVyU3RyaW5nSXRlbTo6bGVnYWN5R2V0QXNTdHJpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6QnVmZmVyZWREYXRhVHJhbnNmZXJTdHJpbmdJdGVtOjpCdWZm
ZXJlZERhdGFUcmFuc2ZlclN0cmluZ0l0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6QnVmZmVyZWRE
YXRhVHJhbnNmZXJVUklMaXN0SXRlbTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkJ1ZmZl
cmVkRGF0YVRyYW5zZmVyVVJJTGlzdEl0ZW06OmdldEFzU3RyaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OkJ1ZmZlcmVkRGF0YVRyYW5zZmVyVVJJTGlzdEl0ZW06OmxlZ2FjeUdldEFzU3RyaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OkJ1ZmZlcmVkRGF0YVRyYW5zZmVyVVJJTGlzdEl0ZW06OnRpdGxl
KToKKyAgICAgICAgKFdlYkNvcmU6OkJ1ZmZlcmVkRGF0YVRyYW5zZmVyVVJJTGlzdEl0ZW06OnNl
dFRpdGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkJ1ZmZlcmVkRGF0YVRyYW5zZmVyVVJJTGlzdEl0
ZW06OkJ1ZmZlcmVkRGF0YVRyYW5zZmVyVVJJTGlzdEl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6
QnVmZmVyZWREYXRhVHJhbnNmZXJIVE1MSXRlbTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkJ1ZmZlcmVkRGF0YVRyYW5zZmVySFRNTEl0ZW06OmdldEFzU3RyaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OkJ1ZmZlcmVkRGF0YVRyYW5zZmVySFRNTEl0ZW06OmxlZ2FjeUdldEFzU3RyaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OkJ1ZmZlcmVkRGF0YVRyYW5zZmVySFRNTEl0ZW06OmJhc2VVUkwp
OgorICAgICAgICAoV2ViQ29yZTo6QnVmZmVyZWREYXRhVHJhbnNmZXJIVE1MSXRlbTo6c2V0QmFz
ZVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpCdWZmZXJlZERhdGFUcmFuc2ZlckhUTUxJdGVtOjpC
dWZmZXJlZERhdGFUcmFuc2ZlckhUTUxJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFUcmFu
c2ZlckZpbGVJdGVtOjpraW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFUcmFuc2ZlckZpbGVJ
dGVtOjp0eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkJ1ZmZlcmVkRGF0YVRyYW5zZmVyRmlsZW5h
bWVJdGVtOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QnVmZmVyZWREYXRhVHJhbnNmZXJG
aWxlbmFtZUl0ZW06OmdldEFzRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpCdWZmZXJlZERhdGFU
cmFuc2ZlckZpbGVuYW1lSXRlbTo6c3RvcmFnZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6QnVm
ZmVyZWREYXRhVHJhbnNmZXJGaWxlbmFtZUl0ZW06OkJ1ZmZlcmVkRGF0YVRyYW5zZmVyRmlsZW5h
bWVJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkJ1ZmZlcmVkRGF0YVRyYW5zZmVyU2hhcmVkQnVm
ZmVySXRlbTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkJ1ZmZlcmVkRGF0YVRyYW5zZmVy
U2hhcmVkQnVmZmVySXRlbTo6Z2V0QXNGaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkJ1ZmZlcmVk
RGF0YVRyYW5zZmVyU2hhcmVkQnVmZmVySXRlbTo6c3RvcmFnZVR5cGUpOgorICAgICAgICAoV2Vi
Q29yZTo6QnVmZmVyZWREYXRhVHJhbnNmZXJTaGFyZWRCdWZmZXJJdGVtOjpCdWZmZXJlZERhdGFU
cmFuc2ZlclNoYXJlZEJ1ZmZlckl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZERh
dGFUcmFuc2ZlclN0cmluZ0l0ZW06OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJv
YXJkRGF0YVRyYW5zZmVyU3RyaW5nSXRlbTo6a2luZCk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0
ZWJvYXJkRGF0YVRyYW5zZmVyU3RyaW5nSXRlbTo6dHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpQ
YXN0ZWJvYXJkRGF0YVRyYW5zZmVyU3RyaW5nSXRlbTo6Z2V0QXNTdHJpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6UGFzdGVib2FyZERhdGFUcmFuc2ZlclN0cmluZ0l0ZW06OmxlZ2FjeUdldEFzU3Ry
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmREYXRhVHJhbnNmZXJTdHJpbmdJdGVt
OjpQYXN0ZWJvYXJkRGF0YVRyYW5zZmVyU3RyaW5nSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpQ
YXN0ZWJvYXJkRGF0YVRyYW5zZmVySFRNTEl0ZW06OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpQYXN0ZWJvYXJkRGF0YVRyYW5zZmVySFRNTEl0ZW06OmdldEFzU3RyaW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OlBhc3RlYm9hcmREYXRhVHJhbnNmZXJIVE1MSXRlbTo6bGVnYWN5R2V0QXNTdHJp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZERhdGFUcmFuc2ZlckhUTUxJdGVtOjpi
YXNlVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmREYXRhVHJhbnNmZXJIVE1MSXRl
bTo6c2V0QmFzZVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkRGF0YVRyYW5zZmVy
SFRNTEl0ZW06OlBhc3RlYm9hcmREYXRhVHJhbnNmZXJIVE1MSXRlbSk6CisgICAgICAgIChXZWJD
b3JlOjpQYXN0ZWJvYXJkRGF0YVRyYW5zZmVySW1hZ2VJdGVtOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6UGFzdGVib2FyZERhdGFUcmFuc2ZlckltYWdlSXRlbTo6a2luZCk6CisgICAgICAg
IChXZWJDb3JlOjpQYXN0ZWJvYXJkRGF0YVRyYW5zZmVySW1hZ2VJdGVtOjp0eXBlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBhc3RlYm9hcmREYXRhVHJhbnNmZXJJbWFnZUl0ZW06OmdldEFzRmlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkRGF0YVRyYW5zZmVySW1hZ2VJdGVtOjpQYXN0
ZWJvYXJkRGF0YVRyYW5zZmVySW1hZ2VJdGVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1
bS9EYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoRGF0YVRyYW5zZmVySXRlbUNocm9taXVtKToKKyAgICAgICAgKERhdGFUcmFuc2ZlclVSSUxp
c3RJdGVtKToKKyAgICAgICAgKERhdGFUcmFuc2ZlckhUTUxJdGVtKToKKyAgICAgICAgKERhdGFU
cmFuc2ZlckZpbGVJdGVtKToKKyAgICAgICAgKCk6CisgICAgICAgIChCdWZmZXJlZERhdGFUcmFu
c2ZlclN0cmluZ0l0ZW0pOgorICAgICAgICAoQnVmZmVyZWREYXRhVHJhbnNmZXJVUklMaXN0SXRl
bSk6CisgICAgICAgIChCdWZmZXJlZERhdGFUcmFuc2ZlckhUTUxJdGVtKToKKyAgICAgICAgKEJ1
ZmZlcmVkRGF0YVRyYW5zZmVyRmlsZW5hbWVJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkJ1ZmZl
cmVkRGF0YVRyYW5zZmVyRmlsZW5hbWVJdGVtOjpmaWxlbmFtZSk6CisgICAgICAgIChCdWZmZXJl
ZERhdGFUcmFuc2ZlclNoYXJlZEJ1ZmZlckl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6QnVmZmVy
ZWREYXRhVHJhbnNmZXJTaGFyZWRCdWZmZXJJdGVtOjpuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6
OkJ1ZmZlcmVkRGF0YVRyYW5zZmVyU2hhcmVkQnVmZmVySXRlbTo6ZXh0ZW5zaW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkJ1ZmZlcmVkRGF0YVRyYW5zZmVyU2hhcmVkQnVmZmVySXRlbTo6YnVmZmVy
KToKKyAgICAgICAgKFBhc3RlYm9hcmREYXRhVHJhbnNmZXJTdHJpbmdJdGVtKToKKyAgICAgICAg
KFBhc3RlYm9hcmREYXRhVHJhbnNmZXJIVE1MSXRlbSk6CisgICAgICAgIChQYXN0ZWJvYXJkRGF0
YVRyYW5zZmVySW1hZ2VJdGVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9EYXRhVHJh
bnNmZXJJdGVtTGlzdENocm9taXVtLmNwcDoKKyAgICAgICAgKCk6CisgICAgICAgIChXZWJDb3Jl
OjpEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtOjpjcmVh
dGVGcm9tUGFzdGVib2FyZCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhVHJhbnNmZXJJdGVtTGlz
dENocm9taXVtOjp+RGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bSk6CisgICAgICAgICogcGxh
dGZvcm0vY2hyb21pdW0vRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bS5oOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9EcmFnRGF0YUNocm9taXVtLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkRyYWdEYXRhOjphc1VSTCk6CisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0YTo6YXNG
cmFnbWVudCk6CisKKzIwMTItMDEtMjQgIERhbmllbCBDaGVuZyAgPGRjaGVuZ0BjaHJvbWl1bS5v
cmc+CisKICAgICAgICAgW2Nocm9taXVtXSBldmVudC5kYXRhVHJhbnNmZXIudHlwZXMgc2hvdWxk
IG5vdCByZXR1cm4gIlRleHQiIG9yICJVUkwiCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD03NjIxOAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IDExZGQ0Nzg4NmY3NWZkNjdkODcwMzBmNjk1ODExNTUzYmUyZGNkYzMuLmVhYjBhYjI0ZDk3MmIy
MGM5OGNiZDcyNDI3OTQ2ZmFjMTdmZDNmNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjggQEAKKzIwMTItMDEtMjQgIERhbmllbCBDaGVuZyAgPGRjaGVuZ0BjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBSZWZhY3RvciBDbGlwYm9hcmRDaHJvbWl1bSBh
bmQgRGF0YVRyYW5zZmVySXRlbUxpc3QvRGF0YVRyYW5zZmVySXRlbSB0byBzdXBwb3J0IEhUTUwg
c3BlYworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY1
OTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHB1
YmxpYy9wbGF0Zm9ybS9XZWJEcmFnRGF0YS5oOgorICAgICAgICAoKToKKyAgICAgICAgKFdlYkRy
YWdEYXRhKToKKyAgICAgICAgKiBzcmMvV2ViRHJhZ0RhdGEuY3BwOiBJbXBsZW1lbnQgdGhlIG5l
dyBnZXR0ZXIvc2V0dGVyLCBhcyB3ZWxsIGFzIHVwZGF0ZSBsZWdhY3kgbWV0aG9kcy4KKyAgICAg
ICAgKFdlYktpdDo6V2ViRHJhZ0RhdGE6Oml0ZW1zKToKKyAgICAgICAgKFdlYktpdCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkRyYWdEYXRhOjpzZXRJdGVtcyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkRyYWdEYXRhOjp1cmwpOgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFnRGF0YTo6c2V0VVJMKToK
KyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0RhdGE6OnNldEZpbGVFeHRlbnNpb24pOgorICAgICAg
ICAoV2ViS2l0OjpXZWJEcmFnRGF0YTo6c2V0RmlsZW5hbWVzKToKKyAgICAgICAgKFdlYktpdDo6
V2ViRHJhZ0RhdGE6OmFwcGVuZFRvRmlsZW5hbWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViRHJh
Z0RhdGE6OnNldEZpbGVDb250ZW50RmlsZW5hbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFn
RGF0YTo6c2V0RmlsZUNvbnRlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFnRGF0YTo6Y3Vz
dG9tRGF0YSk6CisgICAgICAgIChXZWJLaXQ6OldlYkRyYWdEYXRhOjpzZXRDdXN0b21EYXRhKToK
KyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0RhdGE6OmFzc2lnbik6CisKIDIwMTItMDEtMjQgIERt
aXRyeSBMb21vdiAgPGRzbG9tb3ZAZ29vZ2xlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkOiBy
ZW1vdmluZyBXZWJXb3JrZXIuaCBhZ2FpbiBhZnRlciByMTA1Njg0LgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5jcHAKaW5k
ZXggNmFkMTBjN2RhMzRhYzdkNWE3YjgwNmMzZDc3MTE5MjhmZDdkNDQ3MS4uMjQ5NzQ1MWQ0Njhh
OTEzODJkNTBhZTIzNTllYjFkMzhhYTMwYTlkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuY3BwCkBAIC0zMyw3ICsz
Myw4IEBACiAKICNpbmNsdWRlICJDbGlwYm9hcmRNaW1lVHlwZXMuaCIKICNpbmNsdWRlICJDbGlw
Ym9hcmRVdGlsaXRpZXNDaHJvbWl1bS5oIgotI2luY2x1ZGUgIkRhdGFUcmFuc2Zlckl0ZW1MaXN0
Q2hyb21pdW0uaCIKKyNpbmNsdWRlICJEYXRhVHJhbnNmZXJJdGVtLmgiCisjaW5jbHVkZSAiRXhj
ZXB0aW9uQ29kZVBsYWNlaG9sZGVyLmgiCiAjaW5jbHVkZSAiUGFzdGVib2FyZC5oIgogI2luY2x1
ZGUgIlBsYXRmb3JtU3VwcG9ydC5oIgogCkBAIC00MiwyMzYgKzQzLDI0OSBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAvLyBQZXIgUkZDIDI0ODMsIHRoZSBsaW5lIHNlcGFyYXRvciBmb3IgInRleHQv
Li4uIiBNSU1FIHR5cGVzIGlzIENSLUxGLgogc3RhdGljIGNoYXIgY29uc3QqIGNvbnN0IHRleHRN
SU1FVHlwZUxpbmVTZXBhcmF0b3IgPSAiXHJcbiI7CiAKLXZvaWQgQ2hyb21pdW1EYXRhT2JqZWN0
OjpjbGVhckRhdGEoY29uc3QgU3RyaW5nJiB0eXBlKQorUGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJ
dGVtTGlzdENocm9taXVtPiBDaHJvbWl1bURhdGFPYmplY3Q6Oml0ZW1zKCkgY29uc3QKIHsKLSAg
ICBpZiAodHlwZSA9PSBtaW1lVHlwZVRleHRQbGFpbikgewotICAgICAgICBtX3BsYWluVGV4dCA9
ICIiOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHR5cGUgPT0gbWltZVR5cGVV
UkwgfHwgdHlwZSA9PSBtaW1lVHlwZVRleHRVUklMaXN0KSB7Ci0gICAgICAgIG1fdXJpTGlzdCA9
ICIiOwotICAgICAgICBtX3VybCA9IEtVUkwoKTsKLSAgICAgICAgbV91cmxUaXRsZSA9ICIiOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHR5cGUgPT0gbWltZVR5cGVUZXh0SFRN
TCkgewotICAgICAgICBtX3RleHRIdG1sID0gIiI7Ci0gICAgICAgIG1faHRtbEJhc2VVcmwgPSBL
VVJMKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgcmV0dXJuIG1faXRlbXM7Cit9CiAK
LSAgICBpZiAodHlwZSA9PSBtaW1lVHlwZURvd25sb2FkVVJMKSB7Ci0gICAgICAgIG1fZG93bmxv
YWRNZXRhZGF0YSA9ICIiOwotICAgICAgICByZXR1cm47Cit2b2lkIENocm9taXVtRGF0YU9iamVj
dDo6Y2xlYXJEYXRhKGNvbnN0IFN0cmluZyYgdHlwZSkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1faXRlbXMtPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1faXRlbXMtPml0
ZW0oaSktPmtpbmQoKSA9PSBEYXRhVHJhbnNmZXJJdGVtOjpraW5kU3RyaW5nICYmIG1faXRlbXMt
Pml0ZW0oaSktPnR5cGUoKSA9PSB0eXBlKSB7CisgICAgICAgICAgICAvLyBBY2NvcmRpbmcgdG8g
dGhlIHNwZWMsIHR5cGUgbXVzdCBiZSB1bmlxdWUgYW1vbmcgYWxsIGl0ZW1zIG9mIGtpbmQgJ3N0
cmluZycsIHNvIHdlCisgICAgICAgICAgICAvLyBjYW4gcmV0dXJuIGFzIHNvb24gYXMgd2UgZmlu
ZCBhbiBpdGVtIHRoYXQgbWF0Y2hlcy4KKyAgICAgICAgICAgIG1faXRlbXMtPmRlbGV0ZUl0ZW0o
aSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICB9CiB9CiAKIHZvaWQgQ2hy
b21pdW1EYXRhT2JqZWN0OjpjbGVhckFsbCgpCiB7Ci0gICAgY2xlYXJBbGxFeGNlcHRGaWxlcygp
OwotICAgIG1fZmlsZW5hbWVzLmNsZWFyKCk7CisgICAgbV9pdGVtcy0+Y2xlYXIoKTsKIH0KIAog
dm9pZCBDaHJvbWl1bURhdGFPYmplY3Q6OmNsZWFyQWxsRXhjZXB0RmlsZXMoKQogewotICAgIG1f
dXJsVGl0bGUgPSAiIjsKLSAgICBtX3VybCA9IEtVUkwoKTsKLSAgICBtX3VyaUxpc3QgPSAiIjsK
LSAgICBtX2Rvd25sb2FkTWV0YWRhdGEgPSAiIjsKLSAgICBtX2ZpbGVFeHRlbnNpb24gPSAiIjsK
LSAgICBtX3BsYWluVGV4dCA9ICIiOwotICAgIG1fdGV4dEh0bWwgPSAiIjsKLSAgICBtX2h0bWxC
YXNlVXJsID0gS1VSTCgpOwotICAgIG1fZmlsZUNvbnRlbnRGaWxlbmFtZSA9ICIiOwotICAgIGlm
IChtX2ZpbGVDb250ZW50KQotICAgICAgICBtX2ZpbGVDb250ZW50LT5jbGVhcigpOwotfQotCi1i
b29sIENocm9taXVtRGF0YU9iamVjdDo6aGFzRGF0YSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFt
X3VybC5pc0VtcHR5KCkKLSAgICAgICAgfHwgIW1fdXJpTGlzdC5pc0VtcHR5KCkKLSAgICAgICAg
fHwgIW1fZG93bmxvYWRNZXRhZGF0YS5pc0VtcHR5KCkKLSAgICAgICAgfHwgIW1fZmlsZUV4dGVu
c2lvbi5pc0VtcHR5KCkKLSAgICAgICAgfHwgIW1fZmlsZW5hbWVzLmlzRW1wdHkoKQotICAgICAg
ICB8fCAhbV9wbGFpblRleHQuaXNFbXB0eSgpCi0gICAgICAgIHx8ICFtX3RleHRIdG1sLmlzRW1w
dHkoKQotICAgICAgICB8fCBtX2ZpbGVDb250ZW50OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9pdGVtcy0+bGVuZ3RoKCk7ICkgeworICAgICAgICBpZiAobV9pdGVtcy0+aXRlbShpKS0+
a2luZCgpID09IERhdGFUcmFuc2Zlckl0ZW06OmtpbmRTdHJpbmcpIHsKKyAgICAgICAgICAgIG1f
aXRlbXMtPmRlbGV0ZUl0ZW0oaSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQor
ICAgICAgICArK2k7CisgICAgfQogfQogCiBIYXNoU2V0PFN0cmluZz4gQ2hyb21pdW1EYXRhT2Jq
ZWN0Ojp0eXBlcygpIGNvbnN0CiB7Ci0gICAgaWYgKG1fc3RvcmFnZU1vZGUgPT0gUGFzdGVib2Fy
ZCkgewotICAgICAgICBib29sIGlnbm9yZWRDb250YWluc0ZpbGVuYW1lczsKLSAgICAgICAgcmV0
dXJuIFBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJvYXJkUmVhZEF2YWlsYWJsZVR5cGVzKGN1cnJlbnRQ
YXN0ZWJvYXJkQnVmZmVyKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAmaWdub3JlZENvbnRhaW5zRmlsZW5hbWVzKTsKKyAgICBI
YXNoU2V0PFN0cmluZz4gcmVzdWx0czsKKyAgICBib29sIGNvbnRhaW5zRmlsZXMgPSBmYWxzZTsK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1faXRlbXMtPmxlbmd0aCgpOyArK2kpIHsKKyAg
ICAgICAgaWYgKG1faXRlbXMtPml0ZW0oaSktPmtpbmQoKSA9PSBEYXRhVHJhbnNmZXJJdGVtOjpr
aW5kU3RyaW5nKQorICAgICAgICAgICAgcmVzdWx0cy5hZGQobV9pdGVtcy0+aXRlbShpKS0+dHlw
ZSgpKTsKKyAgICAgICAgZWxzZSBpZiAobV9pdGVtcy0+aXRlbShpKS0+a2luZCgpID09IERhdGFU
cmFuc2Zlckl0ZW06OmtpbmRGaWxlKQorICAgICAgICAgICAgY29udGFpbnNGaWxlcyA9IHRydWU7
CiAgICAgfQorICAgIGlmIChjb250YWluc0ZpbGVzKQorICAgICAgICByZXN1bHRzLmFkZChtaW1l
VHlwZUZpbGVzKTsKIAotICAgIEhhc2hTZXQ8U3RyaW5nPiByZXN1bHRzOworICAgIHJldHVybiBy
ZXN1bHRzOworfQogCi0gICAgaWYgKCFtX3BsYWluVGV4dC5pc0VtcHR5KCkpIHsKLSAgICAgICAg
cmVzdWx0cy5hZGQobWltZVR5cGVUZXh0KTsKLSAgICAgICAgcmVzdWx0cy5hZGQobWltZVR5cGVU
ZXh0UGxhaW4pOworU3RyaW5nIENocm9taXVtRGF0YU9iamVjdDo6Z2V0RGF0YShjb25zdCBTdHJp
bmcmIHR5cGUsIGJvb2wmIHN1Y2Nlc3MpIGNvbnN0Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX2l0ZW1zLT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgIGlmIChtX2l0ZW1zLT5pdGVt
KGkpLT5raW5kKCkgPT0gRGF0YVRyYW5zZmVySXRlbTo6a2luZFN0cmluZworICAgICAgICAgICAg
JiYgbV9pdGVtcy0+aXRlbShpKS0+dHlwZSgpID09IHR5cGUpIHsKKyAgICAgICAgICAgIHN1Y2Nl
c3MgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIG1faXRlbXMtPml0ZW0oaSktPmxlZ2FjeUdl
dEFzU3RyaW5nKCk7CisgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoIW1fdXJpTGlzdC5pc0Vt
cHR5KCkpCi0gICAgICAgIHJlc3VsdHMuYWRkKG1pbWVUeXBlVGV4dFVSSUxpc3QpOworICAgIHJl
dHVybiBTdHJpbmcoKTsKK30KIAotICAgIGlmICghbV90ZXh0SHRtbC5pc0VtcHR5KCkpCi0gICAg
ICAgIHJlc3VsdHMuYWRkKG1pbWVUeXBlVGV4dEhUTUwpOworYm9vbCBDaHJvbWl1bURhdGFPYmpl
Y3Q6OnNldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpCit7Cisg
ICAgY2xlYXJEYXRhKHR5cGUpOworICAgIC8vIFdlIHJlbW92ZWQgdGhlIG9ubHkgaXRlbSB3aGVy
ZSBraW5kID09ICdzdHJpbmcnIGFuZCBtYXRjaGluZyB0eXBlLCBzbyBpdCBzaG91bGQgYmUgaW1w
b3NzaWJsZQorICAgIC8vIHRvIGdldCBhbiBleGNlcHRpb24uCisgICAgbV9pdGVtcy0+YWRkKGRh
dGEsIHR5cGUsIEFTU0VSVF9OT19FWENFUFRJT04pOworICAgIHJldHVybiB0cnVlOworfQogCi0g
ICAgZm9yIChIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3I6OktleXMgaXQg
PSBtX2N1c3RvbURhdGEuYmVnaW4oKS5rZXlzKCk7Ci0gICAgICAgICBpdCAhPSBtX2N1c3RvbURh
dGEuZW5kKCkua2V5cygpOyArK2l0KSB7Ci0gICAgICAgIHJlc3VsdHMuYWRkKCppdCk7Cit2b2lk
IENocm9taXVtRGF0YU9iamVjdDo6Z2V0VVJMKFN0cmluZyYgdXJsLCBTdHJpbmcqIHRpdGxlKSBj
b25zdAoreworICAgIFJlZlB0cjxEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0+IGl0ZW0gPSBmaW5k
SXRlbShEYXRhVHJhbnNmZXJJdGVtOjpraW5kU3RyaW5nLCBtaW1lVHlwZVRleHRVUklMaXN0KTsK
KyAgICBpZiAoaXRlbSkgeworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHByb2JhYmx5IGlt
cGxlbWVudCBjb252ZXJ0LXRvLVVSTCBsb2dpYyBoZXJlLgorICAgICAgICB1cmwgPSBpdGVtLT5s
ZWdhY3lHZXRBc1N0cmluZygpOworICAgICAgICBpZiAodGl0bGUpCisgICAgICAgICAgICAqdGl0
bGUgPSBzdGF0aWNfY2FzdDxEYXRhVHJhbnNmZXJVUklMaXN0SXRlbSo+KGl0ZW0uZ2V0KCkpLT50
aXRsZSgpOwogICAgIH0KK30KIAotICAgIHJldHVybiByZXN1bHRzOwordm9pZCBDaHJvbWl1bURh
dGFPYmplY3Q6OnNldFVSTChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiB0aXRsZSkK
K3sKKyAgICBjbGVhckRhdGEobWltZVR5cGVUZXh0VVJJTGlzdCk7CisgICAgbV9pdGVtcy0+aW50
ZXJuYWxBZGRVUkwodXJsLCB0aXRsZSk7CiB9CiAKLVN0cmluZyBDaHJvbWl1bURhdGFPYmplY3Q6
OmdldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBib29sJiBzdWNjZXNzKSBjb25zdAordm9pZCBD
aHJvbWl1bURhdGFPYmplY3Q6OmdldEhUTUwoU3RyaW5nJiBtYXJrdXAsIEtVUkwmIGJhc2VVUkwp
IGNvbnN0CiB7Ci0gICAgaWYgKHR5cGUgPT0gbWltZVR5cGVUZXh0UGxhaW4pIHsKLSAgICAgICAg
aWYgKG1fc3RvcmFnZU1vZGUgPT0gUGFzdGVib2FyZCkgewotICAgICAgICAgICAgU3RyaW5nIHRl
eHQgPSBQbGF0Zm9ybVN1cHBvcnQ6OmNsaXBib2FyZFJlYWRQbGFpblRleHQoY3VycmVudFBhc3Rl
Ym9hcmRCdWZmZXIoKSk7Ci0gICAgICAgICAgICBzdWNjZXNzID0gIXRleHQuaXNFbXB0eSgpOwot
ICAgICAgICAgICAgcmV0dXJuIHRleHQ7Ci0gICAgICAgIH0KLSAgICAgICAgc3VjY2VzcyA9ICFt
X3BsYWluVGV4dC5pc0VtcHR5KCk7Ci0gICAgICAgIHJldHVybiBtX3BsYWluVGV4dDsKKyAgICBS
ZWZQdHI8RGF0YVRyYW5zZmVySXRlbUNocm9taXVtPiBpdGVtID0gZmluZEl0ZW0oRGF0YVRyYW5z
ZmVySXRlbTo6a2luZFN0cmluZywgbWltZVR5cGVUZXh0SFRNTCk7CisgICAgaWYgKGl0ZW0pIHsK
KyAgICAgICAgbWFya3VwID0gaXRlbS0+bGVnYWN5R2V0QXNTdHJpbmcoKTsKKyAgICAgICAgYmFz
ZVVSTCA9IHN0YXRpY19jYXN0PERhdGFUcmFuc2ZlckhUTUxJdGVtKj4oaXRlbS5nZXQoKSktPmJh
c2VVUkwoKTsKICAgICB9Cit9CiAKLSAgICBpZiAodHlwZSA9PSBtaW1lVHlwZVVSTCkgewotICAg
ICAgICBzdWNjZXNzID0gIW1fdXJpTGlzdC5pc0VtcHR5KCk7Ci0gICAgICAgIHJldHVybiBtX3Vy
bC5zdHJpbmcoKTsKLSAgICB9Cit2b2lkIENocm9taXVtRGF0YU9iamVjdDo6c2V0SFRNTChjb25z
dCBTdHJpbmcmIG1hcmt1cCwgY29uc3QgS1VSTCYgYmFzZVVSTCkKK3sKKyAgICBjbGVhckRhdGEo
bWltZVR5cGVUZXh0SFRNTCk7CisgICAgbV9pdGVtcy0+aW50ZXJuYWxBZGRIVE1MKG1hcmt1cCwg
YmFzZVVSTCk7Cit9CiAKLSAgICBpZiAodHlwZSA9PSBtaW1lVHlwZVRleHRVUklMaXN0KSB7Ci0g
ICAgICAgIHN1Y2Nlc3MgPSAhbV91cmlMaXN0LmlzRW1wdHkoKTsKLSAgICAgICAgcmV0dXJuIG1f
dXJpTGlzdDsKLSAgICB9CitTdHJpbmcgQ2hyb21pdW1EYXRhT2JqZWN0Ojp1cmxUaXRsZSgpIGNv
bnN0Cit7CisgICAgUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bT4gaXRlbSA9IGZpbmRJ
dGVtKERhdGFUcmFuc2Zlckl0ZW06OmtpbmRTdHJpbmcsIG1pbWVUeXBlVGV4dFVSSUxpc3QpOwor
ICAgIGlmICghaXRlbSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIHJldHVybiBzdGF0
aWNfY2FzdDxEYXRhVHJhbnNmZXJVUklMaXN0SXRlbSo+KGl0ZW0uZ2V0KCkpLT50aXRsZSgpOwor
fQogCi0gICAgaWYgKHR5cGUgPT0gbWltZVR5cGVUZXh0SFRNTCkgewotICAgICAgICBpZiAobV9z
dG9yYWdlTW9kZSA9PSBQYXN0ZWJvYXJkKSB7Ci0gICAgICAgICAgICBTdHJpbmcgaHRtbFRleHQ7
Ci0gICAgICAgICAgICBLVVJMIHNvdXJjZVVSTDsKLSAgICAgICAgICAgIHVuc2lnbmVkIGlnbm9y
ZWQ7Ci0gICAgICAgICAgICBQbGF0Zm9ybVN1cHBvcnQ6OmNsaXBib2FyZFJlYWRIVE1MKGN1cnJl
bnRQYXN0ZWJvYXJkQnVmZmVyKCksICZodG1sVGV4dCwgJnNvdXJjZVVSTCwgJmlnbm9yZWQsICZp
Z25vcmVkKTsKLSAgICAgICAgICAgIHN1Y2Nlc3MgPSAhaHRtbFRleHQuaXNFbXB0eSgpOwotICAg
ICAgICAgICAgcmV0dXJuIGh0bWxUZXh0OwotICAgICAgICB9Ci0gICAgICAgIHN1Y2Nlc3MgPSAh
bV90ZXh0SHRtbC5pc0VtcHR5KCk7Ci0gICAgICAgIHJldHVybiBtX3RleHRIdG1sOwordm9pZCBD
aHJvbWl1bURhdGFPYmplY3Q6OnNldFVybFRpdGxlKGNvbnN0IFN0cmluZyYgdXJsVGl0bGUpCit7
CisgICAgUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bT4gaXRlbSA9IGZpbmRJdGVtKERh
dGFUcmFuc2Zlckl0ZW06OmtpbmRTdHJpbmcsIG1pbWVUeXBlVGV4dFVSSUxpc3QpOworICAgIGlm
ICghaXRlbSkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gVGhlIGxlZ2FjeSBB
UEkgbm93IGhhcyB0byBlbmZvcmNlIGFuIG9yZGVyaW5nLiBVZ2guCisgICAgICAgIHJldHVybjsK
ICAgICB9CisgICAgc3RhdGljX2Nhc3Q8RGF0YVRyYW5zZmVyVVJJTGlzdEl0ZW0qPihpdGVtLmdl
dCgpKS0+c2V0VGl0bGUodXJsVGl0bGUpOworfQogCi0gICAgaWYgKHR5cGUgPT0gbWltZVR5cGVE
b3dubG9hZFVSTCkgewotICAgICAgICBzdWNjZXNzID0gIW1fZG93bmxvYWRNZXRhZGF0YS5pc0Vt
cHR5KCk7Ci0gICAgICAgIHJldHVybiBtX2Rvd25sb2FkTWV0YWRhdGE7Ci0gICAgfQorS1VSTCBD
aHJvbWl1bURhdGFPYmplY3Q6Omh0bWxCYXNlVXJsKCkgY29uc3QKK3sKKyAgICBSZWZQdHI8RGF0
YVRyYW5zZmVySXRlbUNocm9taXVtPiBpdGVtID0gZmluZEl0ZW0oRGF0YVRyYW5zZmVySXRlbTo6
a2luZFN0cmluZywgbWltZVR5cGVUZXh0SFRNTCk7CisgICAgaWYgKCFpdGVtKQorICAgICAgICBy
ZXR1cm4gS1VSTCgpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxEYXRhVHJhbnNmZXJIVE1MSXRl
bSo+KGl0ZW0uZ2V0KCkpLT5iYXNlVVJMKCk7Cit9CiAKLSAgICBpZiAobV9zdG9yYWdlTW9kZSA9
PSBQYXN0ZWJvYXJkKSB7Ci0gICAgICAgIFN0cmluZyBkYXRhID0gUGxhdGZvcm1TdXBwb3J0Ojpj
bGlwYm9hcmRSZWFkQ3VzdG9tRGF0YShjdXJyZW50UGFzdGVib2FyZEJ1ZmZlcigpLCB0eXBlKTsK
LSAgICAgICAgc3VjY2VzcyA9ICFkYXRhLmlzRW1wdHkoKTsKLSAgICAgICAgcmV0dXJuIGRhdGE7
Cit2b2lkIENocm9taXVtRGF0YU9iamVjdDo6c2V0SHRtbEJhc2VVcmwoY29uc3QgS1VSTCYgdXJs
KQoreworICAgIFJlZlB0cjxEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0+IGl0ZW0gPSBmaW5kSXRl
bShEYXRhVHJhbnNmZXJJdGVtOjpraW5kU3RyaW5nLCBtaW1lVHlwZVRleHRIVE1MKTsKKyAgICBp
ZiAoIWl0ZW0pIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIFRoZSBsZWdhY3kg
QVBJIG5vdyBoYXMgdG8gZW5mb3JjZSBhbiBvcmRlcmluZy4gVWdoLgorICAgICAgICByZXR1cm47
CiAgICAgfQorICAgIHN0YXRpY19jYXN0PERhdGFUcmFuc2ZlckhUTUxJdGVtKj4oaXRlbS5nZXQo
KSktPnNldEJhc2VVUkwodXJsKTsKK30KIAotICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpj
b25zdF9pdGVyYXRvciBpdCA9IG1fY3VzdG9tRGF0YS5maW5kKHR5cGUpOwotICAgIGlmIChpdCAh
PSBtX2N1c3RvbURhdGEuZW5kKCkpIHsKLSAgICAgICAgc3VjY2VzcyA9IHRydWU7Ci0gICAgICAg
IHJldHVybiBpdC0+c2Vjb25kOworSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gQ2hyb21pdW1EYXRh
T2JqZWN0OjpjdXN0b21EYXRhKCkgY29uc3QKK3sKKyAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5n
PiBkYXRhOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9pdGVtcy0+bGVuZ3RoKCk7ICsr
aSkgeworICAgICAgICBpZiAobV9pdGVtcy0+aXRlbShpKS0+a2luZCgpICE9IERhdGFUcmFuc2Zl
ckl0ZW06OmtpbmRTdHJpbmcpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgLy8gU2tp
cCBrbm93biBNSU1FIHR5cGVzIGFzIHRoZXkgYXJlbid0ICdjdXN0b20nLgorICAgICAgICBjb25z
dCBTdHJpbmcmIHR5cGUgPSBtX2l0ZW1zLT5pdGVtKGkpLT50eXBlKCk7CisgICAgICAgIGlmICh0
eXBlID09IG1pbWVUeXBlVGV4dFBsYWluIHx8IHR5cGUgPT0gbWltZVR5cGVUZXh0VVJJTGlzdCB8
fCB0eXBlID09IG1pbWVUeXBlVGV4dEhUTUwpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgZGF0YS5zZXQobV9pdGVtcy0+aXRlbShpKS0+dHlwZSgpLCBtX2l0ZW1zLT5pdGVtKGkpLT5s
ZWdhY3lHZXRBc1N0cmluZygpKTsKICAgICB9CisgICAgcmV0dXJuIGRhdGE7Cit9CiAKLSAgICBz
dWNjZXNzID0gZmFsc2U7Ci0gICAgcmV0dXJuIFN0cmluZygpOwordm9pZCBDaHJvbWl1bURhdGFP
YmplY3Q6OnNldEN1c3RvbURhdGEoY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIGRhdGEp
Cit7CisgICAgZm9yIChIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBkYXRhLmJlZ2luKCk7IGl0ICE9IGRhdGEuZW5kKCk7ICsraXQpCisgICAgICAgIHNldERhdGEo
aXQtPmZpcnN0LCBpdC0+c2Vjb25kKTsKIH0KIAotYm9vbCBDaHJvbWl1bURhdGFPYmplY3Q6OnNl
dERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpCitib29sIENocm9t
aXVtRGF0YU9iamVjdDo6Y29udGFpbnNGaWxlbmFtZXMoKSBjb25zdAogewotICAgIGlmICh0eXBl
ID09IG1pbWVUeXBlVGV4dFBsYWluKSB7Ci0gICAgICAgIG1fcGxhaW5UZXh0ID0gZGF0YTsKLSAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2l0ZW1zLT5s
ZW5ndGgoKTsgKytpKSB7CisgICAgICAgIGlmIChtX2l0ZW1zLT5pdGVtKGkpLT5raW5kKCkgPT0g
RGF0YVRyYW5zZmVySXRlbTo6a2luZEZpbGUKKyAgICAgICAgICAgICYmIHN0YXRpY19jYXN0PERh
dGFUcmFuc2ZlckZpbGVJdGVtKj4obV9pdGVtcy0+aXRlbShpKS5nZXQoKSktPnN0b3JhZ2VUeXBl
KCkgPT0gRGF0YVRyYW5zZmVyRmlsZUl0ZW06OkZpbGVuYW1lVHlwZSkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CiAKLSAgICBpZiAodHlwZSA9
PSBtaW1lVHlwZVVSTCB8fCB0eXBlID09IG1pbWVUeXBlVGV4dFVSSUxpc3QpIHsKLSAgICAgICAg
bV91cmwgPSBLVVJMKCk7Ci0gICAgICAgIFZlY3RvcjxTdHJpbmc+IHVyaUxpc3Q7Ci0gICAgICAg
IC8vIExpbmUgc2VwYXJhdG9yIGlzIFxyXG4gcGVyIFJGQyAyNDgzIC0gaG93ZXZlciwgZm9yIGNv
bXBhdGliaWxpdHkKLSAgICAgICAgLy8gcmVhc29ucyB3ZSBhbHNvIGFsbG93IGp1c3QgXG4gaGVy
ZS4KLSAgICAgICAgZGF0YS5zcGxpdCgnXG4nLCB1cmlMaXN0KTsKLSAgICAgICAgLy8gUHJvY2Vz
cyB0aGUgaW5wdXQgYW5kIGNvcHkgdGhlIGZpcnN0IHZhbGlkIFVSTCBpbnRvIHRoZSB1cmwgbWVt
YmVyLgotICAgICAgICAvLyBJbiBjYXNlIG5vIFVSTHMgY2FuIGJlIGZvdW5kLCBzdWJzZXF1ZW50
IGNhbGxzIHRvIGdldERhdGEoIlVSTCIpCi0gICAgICAgIC8vIHdpbGwgZ2V0IGFuIGVtcHR5IHN0
cmluZy4gVGhpcyBpcyBpbiBsaW5lIHdpdGggdGhlIEhUTUw1IHNwZWMgKHNlZQotICAgICAgICAv
LyAiVGhlIERyYWdFdmVudCBhbmQgRGF0YVRyYW5zZmVyIGludGVyZmFjZXMiKS4KLSAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCB1cmlMaXN0LnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAg
ICBTdHJpbmcmIGxpbmUgPSB1cmlMaXN0W2ldOwotICAgICAgICAgICAgbGluZSA9IGxpbmUuc3Ry
aXBXaGl0ZVNwYWNlKCk7Ci0gICAgICAgICAgICBpZiAobGluZS5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChsaW5l
WzBdID09ICcjJykKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIEtVUkwg
dXJsID0gS1VSTChQYXJzZWRVUkxTdHJpbmcsIGxpbmUpOwotICAgICAgICAgICAgaWYgKHVybC5p
c1ZhbGlkKCkpIHsKLSAgICAgICAgICAgICAgICBtX3VybCA9IHVybDsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBtX3VyaUxpc3QgPSBk
YXRhOwotICAgICAgICByZXR1cm4gdHJ1ZTsKK1ZlY3RvcjxTdHJpbmc+IENocm9taXVtRGF0YU9i
amVjdDo6ZmlsZW5hbWVzKCkgY29uc3QKK3sKKyAgICBWZWN0b3I8U3RyaW5nPiBmaWxlbmFtZXM7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2l0ZW1zLT5sZW5ndGgoKTsgKytpKSB7Cisg
ICAgICAgIGlmIChtX2l0ZW1zLT5pdGVtKGkpLT5raW5kKCkgPT0gRGF0YVRyYW5zZmVySXRlbTo6
a2luZEZpbGUKKyAgICAgICAgICAgICYmIHN0YXRpY19jYXN0PERhdGFUcmFuc2ZlckZpbGVJdGVt
Kj4obV9pdGVtcy0+aXRlbShpKS5nZXQoKSktPnN0b3JhZ2VUeXBlKCkgPT0gRGF0YVRyYW5zZmVy
RmlsZUl0ZW06OkZpbGVuYW1lVHlwZSkKKyAgICAgICAgICAgIGZpbGVuYW1lcy5hcHBlbmQoc3Rh
dGljX2Nhc3Q8QnVmZmVyZWREYXRhVHJhbnNmZXJGaWxlbmFtZUl0ZW0qPihtX2l0ZW1zLT5pdGVt
KGkpLmdldCgpKS0+ZmlsZW5hbWUoKSk7CiAgICAgfQorICAgIHJldHVybiBmaWxlbmFtZXM7Cit9
CisKK3ZvaWQgQ2hyb21pdW1EYXRhT2JqZWN0OjphZGRGaWxlbmFtZShjb25zdCBTdHJpbmcmIGZp
bGVuYW1lKQoreworICAgIG1faXRlbXMtPmludGVybmFsQWRkRmlsZW5hbWUoZmlsZW5hbWUpOwor
fQogCi0gICAgaWYgKHR5cGUgPT0gbWltZVR5cGVUZXh0SFRNTCkgewotICAgICAgICBtX3RleHRI
dG1sID0gZGF0YTsKLSAgICAgICAgbV9odG1sQmFzZVVybCA9IEtVUkwoKTsKLSAgICAgICAgcmV0
dXJuIHRydWU7Cit2b2lkIENocm9taXVtRGF0YU9iamVjdDo6c2V0RmlsZW5hbWVzKGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBm
aWxlbmFtZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgYWRkRmlsZW5hbWUoZmlsZW5hbWVzW2ld
KTsKICAgICB9Cit9CisKK3ZvaWQgQ2hyb21pdW1EYXRhT2JqZWN0OjphZGRTaGFyZWRCdWZmZXIo
Y29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4dGVuc2lvbiwgUGFzc1JlZlB0cjxT
aGFyZWRCdWZmZXI+IGJ1ZmZlcikKK3sKKyAgICBtX2l0ZW1zLT5pbnRlcm5hbEFkZFNoYXJlZEJ1
ZmZlcihuYW1lLCBleHRlbnNpb24sIGJ1ZmZlcik7Cit9CiAKLSAgICBpZiAodHlwZSA9PSBtaW1l
VHlwZURvd25sb2FkVVJMKSB7Ci0gICAgICAgIG1fZG93bmxvYWRNZXRhZGF0YSA9IGRhdGE7Ci0g
ICAgICAgIHJldHVybiB0cnVlOworLy8gU2ltcGxlIGhlbHBlciB0byBzdXBwb3J0IGRlcHJlY2F0
ZWQgZnVuY3Rpb25zCitzdGF0aWMgUGFzc1JlZlB0cjxCdWZmZXJlZERhdGFUcmFuc2ZlclNoYXJl
ZEJ1ZmZlckl0ZW0+IGZpbmRTaGFyZWRCdWZmZXJJdGVtKFBhc3NSZWZQdHI8RGF0YVRyYW5zZmVy
SXRlbUxpc3RDaHJvbWl1bT4gaXRlbXMpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBp
dGVtcy0+bGVuZ3RoKCk7ICsraSkgeworICAgICAgICBpZiAoaXRlbXMtPml0ZW0oaSktPmtpbmQo
KSA9PSBEYXRhVHJhbnNmZXJJdGVtOjpraW5kRmlsZQorICAgICAgICAgICAgJiYgc3RhdGljX2Nh
c3Q8RGF0YVRyYW5zZmVyRmlsZUl0ZW0qPihpdGVtcy0+aXRlbShpKS5nZXQoKSktPnN0b3JhZ2VU
eXBlKCkgPT0gRGF0YVRyYW5zZmVyRmlsZUl0ZW06OlNoYXJlZEJ1ZmZlclR5cGUpCisgICAgICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QnVmZmVyZWREYXRhVHJhbnNmZXJTaGFyZWRCdWZmZXJJ
dGVtKj4oaXRlbXMtPml0ZW0oaSkuZ2V0KCkpOwogICAgIH0KKyAgICByZXR1cm4gMDsKK30KIAot
ICAgIGlmICh0eXBlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworU3RyaW5nIENo
cm9taXVtRGF0YU9iamVjdDo6ZmlsZUV4dGVuc2lvbigpIGNvbnN0Cit7CisgICAgUmVmUHRyPEJ1
ZmZlcmVkRGF0YVRyYW5zZmVyU2hhcmVkQnVmZmVySXRlbT4gaXRlbSA9IGZpbmRTaGFyZWRCdWZm
ZXJJdGVtKG1faXRlbXMpOworICAgIHJldHVybiBpdGVtID8gaXRlbS0+ZXh0ZW5zaW9uKCkgOiBT
dHJpbmcoKTsKK30KIAotICAgIG1fY3VzdG9tRGF0YS5zZXQodHlwZSwgZGF0YSk7Ci0gICAgcmV0
dXJuIHRydWU7CitTdHJpbmcgQ2hyb21pdW1EYXRhT2JqZWN0OjpmaWxlQ29udGVudEZpbGVuYW1l
KCkgY29uc3QKK3sKKyAgICBSZWZQdHI8QnVmZmVyZWREYXRhVHJhbnNmZXJTaGFyZWRCdWZmZXJJ
dGVtPiBpdGVtID0gZmluZFNoYXJlZEJ1ZmZlckl0ZW0obV9pdGVtcyk7CisgICAgcmV0dXJuIGl0
ZW0gPyBpdGVtLT5uYW1lKCkgOiBTdHJpbmcoKTsKIH0KIAotYm9vbCBDaHJvbWl1bURhdGFPYmpl
Y3Q6OmNvbnRhaW5zRmlsZW5hbWVzKCkgY29uc3QKK1Bhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBD
aHJvbWl1bURhdGFPYmplY3Q6OmZpbGVDb250ZW50KCkgY29uc3QKIHsKLSAgICBib29sIGNvbnRh
aW5zRmlsZW5hbWVzOwotICAgIGlmIChtX3N0b3JhZ2VNb2RlID09IFBhc3RlYm9hcmQpIHsKLSAg
ICAgICAgSGFzaFNldDxTdHJpbmc+IGlnbm9yZWRSZXN1bHRzID0KLSAgICAgICAgICAgIFBsYXRm
b3JtU3VwcG9ydDo6Y2xpcGJvYXJkUmVhZEF2YWlsYWJsZVR5cGVzKGN1cnJlbnRQYXN0ZWJvYXJk
QnVmZmVyKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAmY29udGFpbnNGaWxlbmFtZXMpOwotICAgIH0gZWxzZQotICAgICAgICBjb250
YWluc0ZpbGVuYW1lcyA9ICFtX2ZpbGVuYW1lcy5pc0VtcHR5KCk7Ci0gICAgcmV0dXJuIGNvbnRh
aW5zRmlsZW5hbWVzOworICAgIFJlZlB0cjxCdWZmZXJlZERhdGFUcmFuc2ZlclNoYXJlZEJ1ZmZl
ckl0ZW0+IGl0ZW0gPSBmaW5kU2hhcmVkQnVmZmVySXRlbShtX2l0ZW1zKTsKKyAgICByZXR1cm4g
aXRlbSA/IGl0ZW0tPmJ1ZmZlcigpIDogMDsKIH0KIAotQ2hyb21pdW1EYXRhT2JqZWN0OjpDaHJv
bWl1bURhdGFPYmplY3QoU3RvcmFnZU1vZGUgc3RvcmFnZU1vZGUpCi0gICAgOiBtX3N0b3JhZ2VN
b2RlKHN0b3JhZ2VNb2RlKQorQ2hyb21pdW1EYXRhT2JqZWN0OjpDaHJvbWl1bURhdGFPYmplY3Qo
UGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtPiBpdGVtcykKKyAgICA6IG1f
aXRlbXMoaXRlbXMpCiB7CiB9CiAKIENocm9taXVtRGF0YU9iamVjdDo6Q2hyb21pdW1EYXRhT2Jq
ZWN0KGNvbnN0IENocm9taXVtRGF0YU9iamVjdCYgb3RoZXIpCi0gICAgOiBSZWZDb3VudGVkPENo
cm9taXVtRGF0YU9iamVjdD4oKQotICAgICwgbV9zdG9yYWdlTW9kZShvdGhlci5tX3N0b3JhZ2VN
b2RlKQotICAgICwgbV91cmxUaXRsZShvdGhlci5tX3VybFRpdGxlKQotICAgICwgbV9kb3dubG9h
ZE1ldGFkYXRhKG90aGVyLm1fZG93bmxvYWRNZXRhZGF0YSkKLSAgICAsIG1fZmlsZUV4dGVuc2lv
bihvdGhlci5tX2ZpbGVFeHRlbnNpb24pCi0gICAgLCBtX2ZpbGVuYW1lcyhvdGhlci5tX2ZpbGVu
YW1lcykKLSAgICAsIG1fcGxhaW5UZXh0KG90aGVyLm1fcGxhaW5UZXh0KQotICAgICwgbV90ZXh0
SHRtbChvdGhlci5tX3RleHRIdG1sKQotICAgICwgbV9odG1sQmFzZVVybChvdGhlci5tX2h0bWxC
YXNlVXJsKQotICAgICwgbV9maWxlQ29udGVudEZpbGVuYW1lKG90aGVyLm1fZmlsZUNvbnRlbnRG
aWxlbmFtZSkKLSAgICAsIG1fdXJsKG90aGVyLm1fdXJsKQotICAgICwgbV91cmlMaXN0KG90aGVy
Lm1fdXJpTGlzdCkKKyAgICA6IG1faXRlbXMob3RoZXIubV9pdGVtcykKK3sKK30KKworUGFzc1Jl
ZlB0cjxEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0+IENocm9taXVtRGF0YU9iamVjdDo6ZmluZEl0
ZW0oY29uc3QgU3RyaW5nJiBraW5kLCBjb25zdCBTdHJpbmcmIHR5cGUpIGNvbnN0CiB7Ci0gICAg
aWYgKG90aGVyLm1fZmlsZUNvbnRlbnQuZ2V0KCkpCi0gICAgICAgIG1fZmlsZUNvbnRlbnQgPSBv
dGhlci5tX2ZpbGVDb250ZW50LT5jb3B5KCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X2l0ZW1zLT5sZW5ndGgoKTsgKytpKQorICAgICAgICBpZiAobV9pdGVtcy0+aXRlbShpKS0+a2lu
ZCgpID09IGtpbmQgJiYgbV9pdGVtcy0+aXRlbShpKS0+dHlwZSgpID09IHR5cGUpCisgICAgICAg
ICAgICByZXR1cm4gbV9pdGVtcy0+aXRlbShpKTsKKyAgICByZXR1cm4gMDsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9DaHJvbWl1bURhdGFPYmplY3QuaAppbmRleCA3ZTY3NWJmOTM5OTUwYmZlODg1MjM0YjA3
MWU5YTg0MmQxNGYxYjE4Li44YjU2ZDEyMDhlNmFiZTFiNmYzMjdhM2U1ZDhhMGUxMzkxOGQ4ZWIx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURh
dGFPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1
bURhdGFPYmplY3QuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgs
IDIwMDksIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMp
IDIwMDgsIDIwMDksIDIwMTIsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtMzEsNiArMzEsNyBAQAogI2lmbmRl
ZiBDaHJvbWl1bURhdGFPYmplY3RfaAogI2RlZmluZSBDaHJvbWl1bURhdGFPYmplY3RfaAogCisj
aW5jbHVkZSAiRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bS5oIgogI2luY2x1ZGUgIktVUkwu
aCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5o
IgpAQCAtNDcsMTkgKzQ4LDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIC8vIG9mIGFuZCBpcyBu
b3Qgc3BlY2lmaWMgdG8gYSBwbGF0Zm9ybS4KIGNsYXNzIENocm9taXVtRGF0YU9iamVjdCA6IHB1
YmxpYyBSZWZDb3VudGVkPENocm9taXVtRGF0YU9iamVjdD4gewogcHVibGljOgotICAgIGVudW0g
U3RvcmFnZU1vZGUgewotICAgICAgICBCdWZmZXJlZCwKLSAgICAgICAgUGFzdGVib2FyZCwKLSAg
ICB9OwotCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2hyb21pdW1EYXRhT2JqZWN0PiBjcmVhdGVG
cm9tUGFzdGVib2FyZCgpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENocm9t
aXVtRGF0YU9iamVjdChQYXN0ZWJvYXJkKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
Q2hyb21pdW1EYXRhT2JqZWN0KERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW06OmNyZWF0ZUZy
b21QYXN0ZWJvYXJkKCkpKTsKICAgICB9CiAKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDaHJvbWl1
bURhdGFPYmplY3Q+IGNyZWF0ZSgpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IENocm9taXVtRGF0YU9iamVjdChCdWZmZXJlZCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IENocm9taXVtRGF0YU9iamVjdChEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtOjpjcmVh
dGUoKSkpOwogICAgIH0KIAogICAgIFBhc3NSZWZQdHI8Q2hyb21pdW1EYXRhT2JqZWN0PiBjb3B5
KCkgY29uc3QKQEAgLTY3LDcwICs2Myw1MSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgQ2hyb21pdW1EYXRhT2JqZWN0KCp0aGlzKSk7CiAgICAgfQogCi0gICAgU3RvcmFn
ZU1vZGUgc3RvcmFnZU1vZGUoKSBjb25zdCB7IHJldHVybiBtX3N0b3JhZ2VNb2RlOyB9CisgICAg
UGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtPiBpdGVtcygpIGNvbnN0Owog
CiAgICAgdm9pZCBjbGVhckRhdGEoY29uc3QgU3RyaW5nJiB0eXBlKTsKICAgICB2b2lkIGNsZWFy
QWxsKCk7CiAgICAgdm9pZCBjbGVhckFsbEV4Y2VwdEZpbGVzKCk7CiAKLSAgICBib29sIGhhc0Rh
dGEoKSBjb25zdDsKLQogICAgIEhhc2hTZXQ8U3RyaW5nPiB0eXBlcygpIGNvbnN0OwogICAgIFN0
cmluZyBnZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgYm9vbCYgc3VjY2VzcykgY29uc3Q7CiAg
ICAgYm9vbCBzZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKTsK
IAotICAgIC8vIFNwZWNpYWwgaGFuZGxlcnMgZm9yIFVSTC9IVE1MIG1ldGFkYXRhLgotICAgIFN0
cmluZyB1cmxUaXRsZSgpIGNvbnN0IHsgcmV0dXJuIG1fdXJsVGl0bGU7IH0KLSAgICB2b2lkIHNl
dFVybFRpdGxlKGNvbnN0IFN0cmluZyYgdXJsVGl0bGUpIHsgbV91cmxUaXRsZSA9IHVybFRpdGxl
OyB9Ci0gICAgS1VSTCBodG1sQmFzZVVybCgpIGNvbnN0IHsgcmV0dXJuIG1faHRtbEJhc2VVcmw7
IH0KLSAgICB2b2lkIHNldEh0bWxCYXNlVXJsKGNvbnN0IEtVUkwmIHVybCkgeyBtX2h0bWxCYXNl
VXJsID0gdXJsOyB9CisgICAgLy8gU3BlY2lhbCBoYW5kbGVycyBmb3IgZGF0YSB0eXBlcyB3aXRo
IG1ldGFkYXRhLgorICAgIHZvaWQgZ2V0VVJMKFN0cmluZyYgdXJsLCBTdHJpbmcqIHRpdGxlKSBj
b25zdDsKKyAgICB2b2lkIHNldFVSTChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiB0
aXRsZSk7CisgICAgdm9pZCBnZXRIVE1MKFN0cmluZyYgaHRtbCwgS1VSTCYgYmFzZVVSTCkgY29u
c3Q7CisgICAgdm9pZCBzZXRIVE1MKGNvbnN0IFN0cmluZyYgaHRtbCwgY29uc3QgS1VSTCYgYmFz
ZVVSTCk7CisgICAgLy8gRklYTUU6IFJlbW92ZSB3aGVuIG5vIGxvbmdlciB1c2VkLgorICAgIFN0
cmluZyB1cmxUaXRsZSgpIGNvbnN0OworICAgIHZvaWQgc2V0VXJsVGl0bGUoY29uc3QgU3RyaW5n
Jik7CisgICAgS1VSTCBodG1sQmFzZVVybCgpIGNvbnN0OworICAgIHZvaWQgc2V0SHRtbEJhc2VV
cmwoY29uc3QgS1VSTCYpOworICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGN1c3RvbURhdGEo
KSBjb25zdDsKKyAgICB2b2lkIHNldEN1c3RvbURhdGEoY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0
cmluZz4mKTsKIAogICAgIC8vIFVzZWQgdG8gaGFuZGxlIGZpbGVzIGJlaW5nIGRyYWdnZWQgaW4g
YW5kIG91dC4KICAgICBib29sIGNvbnRhaW5zRmlsZW5hbWVzKCkgY29uc3Q7Ci0gICAgY29uc3Qg
VmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcygpIGNvbnN0IHsgcmV0dXJuIG1fZmlsZW5hbWVzOyB9
Ci0gICAgdm9pZCBzZXRGaWxlbmFtZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcykg
eyBtX2ZpbGVuYW1lcyA9IGZpbGVuYW1lczsgfQotCi0gICAgLy8gVXNlZCB0byBoYW5kbGUgZmls
ZXMgYmVpbmcgZHJhZ2dlZCBvdXQuCi0gICAgdm9pZCBhZGRGaWxlbmFtZShjb25zdCBTdHJpbmcm
IGZpbGVuYW1lKSB7IG1fZmlsZW5hbWVzLmFwcGVuZChmaWxlbmFtZSk7IH0KKyAgICBWZWN0b3I8
U3RyaW5nPiBmaWxlbmFtZXMoKSBjb25zdDsKKyAgICB2b2lkIGFkZEZpbGVuYW1lKGNvbnN0IFN0
cmluZyYpOworICAgIC8vIEZJWE1FOiBSZW1vdmUgd2hlbiBubyBsb25nZXIgdXNlZC4KKyAgICB2
b2lkIHNldEZpbGVuYW1lcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYpOwogCiAgICAgLy8gVXNlZCB0
byBoYW5kbGUgZmlsZXMgKGltYWdlcykgYmVpbmcgZHJhZ2dlZCBvdXQuCi0gICAgU3RyaW5nIGZp
bGVFeHRlbnNpb24oKSBjb25zdCB7IHJldHVybiBtX2ZpbGVFeHRlbnNpb247IH0KLSAgICB2b2lk
IHNldEZpbGVFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBmaWxlRXh0ZW5zaW9uKSB7IG1fZmlsZUV4
dGVuc2lvbiA9IGZpbGVFeHRlbnNpb247IH0KLSAgICBTdHJpbmcgZmlsZUNvbnRlbnRGaWxlbmFt
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsZUNvbnRlbnRGaWxlbmFtZTsgfQotICAgIHZvaWQgc2V0
RmlsZUNvbnRlbnRGaWxlbmFtZShjb25zdCBTdHJpbmcmIGZpbGVDb250ZW50RmlsZW5hbWUpIHsg
bV9maWxlQ29udGVudEZpbGVuYW1lID0gZmlsZUNvbnRlbnRGaWxlbmFtZTsgfQotICAgIFBhc3NS
ZWZQdHI8U2hhcmVkQnVmZmVyPiBmaWxlQ29udGVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsZUNv
bnRlbnQ7IH0KLSAgICB2b2lkIHNldEZpbGVDb250ZW50KFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVy
PiBmaWxlQ29udGVudCkgeyBtX2ZpbGVDb250ZW50ID0gZmlsZUNvbnRlbnQ7IH0KLSAgICBjb25z
dCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYgY3VzdG9tRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1f
Y3VzdG9tRGF0YTsgfQotICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBjdXN0b21EYXRhKCkg
eyByZXR1cm4gbV9jdXN0b21EYXRhOyB9CisgICAgdm9pZCBhZGRTaGFyZWRCdWZmZXIoY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4dGVuc2lvbiwgUGFzc1JlZlB0cjxTaGFyZWRC
dWZmZXI+KTsKKyAgICAvLyBGSVhNRTogUmVtb3ZlIHdoZW4gbm8gbG9uZ2VyIHVzZWQuCisgICAg
U3RyaW5nIGZpbGVFeHRlbnNpb24oKSBjb25zdDsKKyAgICBTdHJpbmcgZmlsZUNvbnRlbnRGaWxl
bmFtZSgpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBmaWxlQ29udGVudCgp
IGNvbnN0OwogCiBwcml2YXRlOgotICAgIGV4cGxpY2l0IENocm9taXVtRGF0YU9iamVjdChTdG9y
YWdlTW9kZSk7CisgICAgZXhwbGljaXQgQ2hyb21pdW1EYXRhT2JqZWN0KFBhc3NSZWZQdHI8RGF0
YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bT4gaXRlbXMpOwogICAgIGV4cGxpY2l0IENocm9taXVt
RGF0YU9iamVjdChjb25zdCBDaHJvbWl1bURhdGFPYmplY3QmKTsKIAotICAgIFN0b3JhZ2VNb2Rl
IG1fc3RvcmFnZU1vZGU7Ci0KLSAgICBTdHJpbmcgbV91cmxUaXRsZTsKLQotICAgIFN0cmluZyBt
X2Rvd25sb2FkTWV0YWRhdGE7Ci0KLSAgICBTdHJpbmcgbV9maWxlRXh0ZW5zaW9uOwotICAgIFZl
Y3RvcjxTdHJpbmc+IG1fZmlsZW5hbWVzOwotCi0gICAgU3RyaW5nIG1fcGxhaW5UZXh0OwotCi0g
ICAgU3RyaW5nIG1fdGV4dEh0bWw7Ci0gICAgS1VSTCBtX2h0bWxCYXNlVXJsOwotCi0gICAgU3Ry
aW5nIG1fZmlsZUNvbnRlbnRGaWxlbmFtZTsKLSAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBtX2Zp
bGVDb250ZW50OwotCi0gICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gbV9jdXN0b21EYXRhOwor
ICAgIFBhc3NSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUNocm9taXVtPiBmaW5kSXRlbShjb25zdCBT
dHJpbmcmIGtpbmQsIGNvbnN0IFN0cmluZyYgdHlwZSkgY29uc3Q7CiAKLSAgICAvLyBUaGVzZSB0
d28gYXJlIGxpbmtlZC4gU2V0dGluZyBtX3VybCB3aWxsIHNldCBtX3VyaUxpc3QgdG8gdGhlIHNh
bWUKLSAgICAvLyBzdHJpbmcgdmFsdWU7IHNldHRpbmcgbV91cmlMaXN0IHdpbGwgY2F1c2UgaXRz
IGNvbnRlbnRzIHRvIGJlIHBhcnNlZAotICAgIC8vIGFjY29yZGluZyB0byBSRkMgMjQ4MyBhbmQg
dGhlIGZpcnN0IFVSTCBmb3VuZCB3aWxsIGJlIHNldCBpbiBtX3VybC4KLSAgICBLVVJMIG1fdXJs
OwotICAgIFN0cmluZyBtX3VyaUxpc3Q7CisgICAgLy8gRklYTUU6IFJlbmFtZSB0byBtX2xpc3QK
KyAgICBSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bT4gbV9pdGVtczsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmNwcAppbmRleCA5YTI2ODc2MDU3YTgwZGZh
NDgxMjllOGQwNTE0MGIzMTBkYTM4MTVkLi4wOWJjYzhiZWMxMTQ0ZDkwYTFiNTk3N2U0ZjQ3NDBm
ZDhkNTZmZmEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9D
bGlwYm9hcmRDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vQ2xpcGJvYXJkQ2hyb21pdW0uY3BwCkBAIC0zMiwxMSArMzIsMTIgQEAKICNpbmNsdWRlICJD
bGlwYm9hcmRNaW1lVHlwZXMuaCIKICNpbmNsdWRlICJDbGlwYm9hcmRVdGlsaXRpZXNDaHJvbWl1
bS5oIgogI2luY2x1ZGUgIkRhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bS5oIgorI2luY2x1ZGUgIkRh
dGFUcmFuc2Zlckl0ZW1MaXN0LmgiCiAjaW5jbHVkZSAiRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJv
bWl1bS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRHJhZ0RhdGEuaCIKICNp
bmNsdWRlICJFbGVtZW50LmgiCi0jaW5jbHVkZSAiRmlsZS5oIgorI2luY2x1ZGUgIkV4Y2VwdGlv
bkNvZGUuaCIKICNpbmNsdWRlICJGaWxlTGlzdC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5j
bHVkZSAiSFRNTE5hbWVzLmgiCkBAIC00NywyMyArNDgsMTY2IEBACiAjaW5jbHVkZSAiUGxhdGZv
cm1TdXBwb3J0LmgiCiAjaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJJbWFnZS5o
IgotI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJTdHJpbmdD
YWxsYmFjay5oIgogI2luY2x1ZGUgIm1hcmt1cC5oIgogCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorbmFtZXNwYWNlIHsKKworLy8gVGhl
c2Ugd3JhcHBlciBjbGFzc2VzIGhlbHAgdXMgdG8gcHJvcGVybHkgc2NvcGUgRGF0YVRyYW5zZmVy
SXRlbS9EYXRhVHJhbnNmZXJJdGVtTGlzdCBzbyB0aGV5IGFyZQorLy8gbm90IGF2YWlsYWJsZSBv
dXRzaWRlIHRoZSBjb250ZXh0IHRoYXQgYSBDbGlwYm9hcmQgb2JqZWN0IGlzIHZhbGlkIGZvci4K
K2NsYXNzIERhdGFUcmFuc2Zlckl0ZW1MaXN0V3JhcHBlciA6IHB1YmxpYyBEYXRhVHJhbnNmZXJJ
dGVtTGlzdCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YVRyYW5zZmVySXRl
bUxpc3RXcmFwcGVyPiBjcmVhdGUoCisgICAgICAgIFBhc3NSZWZQdHI8Q2xpcGJvYXJkQ2hyb21p
dW0+LCBQYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0+KTsKKworICAgIHZp
cnR1YWwgc2l6ZV90IGxlbmd0aCgpIGNvbnN0OworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxEYXRh
VHJhbnNmZXJJdGVtPiBpdGVtKHVuc2lnbmVkIGxvbmcgaW5kZXgpOworICAgIHZpcnR1YWwgdm9p
ZCBkZWxldGVJdGVtKHVuc2lnbmVkIGxvbmcgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2
aXJ0dWFsIHZvaWQgY2xlYXIoKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkKGNvbnN0IFN0cmluZyYg
ZGF0YSwgY29uc3QgU3RyaW5nJiB0eXBlLCBFeGNlcHRpb25Db2RlJik7CisgICAgdmlydHVhbCB2
b2lkIGFkZChQYXNzUmVmUHRyPEZpbGU+KSB7IC8qIEZJWE1FOiBJbXBsZW1lbnQgKi8gfQorCitw
cml2YXRlOgorICAgIERhdGFUcmFuc2Zlckl0ZW1MaXN0V3JhcHBlcihQYXNzUmVmUHRyPENsaXBi
b2FyZENocm9taXVtPiwgUGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtPik7
CisgIAorICAgIFJlZlB0cjxDbGlwYm9hcmRDaHJvbWl1bT4gbV9jbGlwYm9hcmQ7CisgICAgUmVm
UHRyPERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0+IG1fbGlzdDsKK307CisKK2NsYXNzIERh
dGFUcmFuc2Zlckl0ZW1XcmFwcGVyIDogcHVibGljIERhdGFUcmFuc2Zlckl0ZW0geworcHVibGlj
OgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1XcmFwcGVyPiBjcmVhdGUo
CisgICAgICAgIFBhc3NSZWZQdHI8Q2xpcGJvYXJkQ2hyb21pdW0+LCBQYXNzUmVmUHRyPERhdGFU
cmFuc2Zlckl0ZW1DaHJvbWl1bT4pOworCisgICAgdmlydHVhbCBTdHJpbmcga2luZCgpIGNvbnN0
OworICAgIHZpcnR1YWwgU3RyaW5nIHR5cGUoKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBn
ZXRBc1N0cmluZyhQYXNzUmVmUHRyPFN0cmluZ0NhbGxiYWNrPikgY29uc3Q7CisgICAgdmlydHVh
bCBQYXNzUmVmUHRyPEJsb2I+IGdldEFzRmlsZSgpIGNvbnN0OworCitwcml2YXRlOgorICAgIERh
dGFUcmFuc2Zlckl0ZW1XcmFwcGVyKFBhc3NSZWZQdHI8Q2xpcGJvYXJkQ2hyb21pdW0+LCBQYXNz
UmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bT4pOworCisgICAgUmVmUHRyPENsaXBib2Fy
ZENocm9taXVtPiBtX2NsaXBib2FyZDsKKyAgICBSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUNocm9t
aXVtPiBtX2l0ZW07Cit9OworCitQYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1MaXN0V3JhcHBl
cj4gRGF0YVRyYW5zZmVySXRlbUxpc3RXcmFwcGVyOjpjcmVhdGUoCisgICAgUGFzc1JlZlB0cjxD
bGlwYm9hcmRDaHJvbWl1bT4gY2xpcGJvYXJkLCBQYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1M
aXN0Q2hyb21pdW0+IGxpc3QpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEYXRhVHJhbnNm
ZXJJdGVtTGlzdFdyYXBwZXIoY2xpcGJvYXJkLCBsaXN0KSk7Cit9CisKK3NpemVfdCBEYXRhVHJh
bnNmZXJJdGVtTGlzdFdyYXBwZXI6Omxlbmd0aCgpIGNvbnN0Cit7CisgICAgaWYgKG1fY2xpcGJv
YXJkLT5wb2xpY3koKSA9PSBDbGlwYm9hcmROdW1iKQorICAgICAgICByZXR1cm4gMDsKKyAgICBy
ZXR1cm4gbV9saXN0LT5sZW5ndGgoKTsKK30KKworUGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVt
PiBEYXRhVHJhbnNmZXJJdGVtTGlzdFdyYXBwZXI6Oml0ZW0odW5zaWduZWQgbG9uZyBpbmRleCkK
K3sKKyAgICBpZiAobV9jbGlwYm9hcmQtPnBvbGljeSgpID09IENsaXBib2FyZE51bWIpCisgICAg
ICAgIHJldHVybiAwOworICAgIFJlZlB0cjxEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0+IGl0ZW0g
PSBtX2xpc3QtPml0ZW0oaW5kZXgpOworICAgIGlmICghaXRlbSkKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgcmV0dXJuIERhdGFUcmFuc2Zlckl0ZW1XcmFwcGVyOjpjcmVhdGUobV9jbGlwYm9hcmQs
IGl0ZW0pOworfQorCit2b2lkIERhdGFUcmFuc2Zlckl0ZW1MaXN0V3JhcHBlcjo6ZGVsZXRlSXRl
bSh1bnNpZ25lZCBsb25nIGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAobV9j
bGlwYm9hcmQtPnBvbGljeSgpICE9IENsaXBib2FyZFdyaXRhYmxlKSB7CisgICAgICAgIGVjID0g
SU5WQUxJRF9TVEFURV9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9saXN0LT5k
ZWxldGVJdGVtKGluZGV4KTsKK30KKwordm9pZCBEYXRhVHJhbnNmZXJJdGVtTGlzdFdyYXBwZXI6
OmNsZWFyKCkKK3sKKyAgICBpZiAobV9jbGlwYm9hcmQtPnBvbGljeSgpICE9IENsaXBib2FyZFdy
aXRhYmxlKQorICAgICAgICByZXR1cm47CisgICAgbV9saXN0LT5jbGVhcigpOworfQorCit2b2lk
IERhdGFUcmFuc2Zlckl0ZW1MaXN0V3JhcHBlcjo6YWRkKGNvbnN0IFN0cmluZyYgZGF0YSwgY29u
c3QgU3RyaW5nJiB0eXBlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAobV9jbGlwYm9h
cmQtPnBvbGljeSgpICE9IENsaXBib2FyZFdyaXRhYmxlKQorICAgICAgICByZXR1cm47CisgICAg
bV9saXN0LT5hZGQoZGF0YSwgdHlwZSwgZWMpOworfQorCitEYXRhVHJhbnNmZXJJdGVtTGlzdFdy
YXBwZXI6OkRhdGFUcmFuc2Zlckl0ZW1MaXN0V3JhcHBlcigKKyAgICBQYXNzUmVmUHRyPENsaXBi
b2FyZENocm9taXVtPiBjbGlwYm9hcmQsIFBhc3NSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUxpc3RD
aHJvbWl1bT4gbGlzdCkKKyAgICA6IG1fY2xpcGJvYXJkKGNsaXBib2FyZCkKKyAgICAsIG1fbGlz
dChsaXN0KQoreworfQorCitQYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1XcmFwcGVyPiBEYXRh
VHJhbnNmZXJJdGVtV3JhcHBlcjo6Y3JlYXRlKAorICAgIFBhc3NSZWZQdHI8Q2xpcGJvYXJkQ2hy
b21pdW0+IGNsaXBib2FyZCwgUGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0+IGl0
ZW0pCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEYXRhVHJhbnNmZXJJdGVtV3JhcHBlcihj
bGlwYm9hcmQsIGl0ZW0pKTsKK30KKworU3RyaW5nIERhdGFUcmFuc2Zlckl0ZW1XcmFwcGVyOjpr
aW5kKCkgY29uc3QKK3sKKyAgICBpZiAobV9jbGlwYm9hcmQtPnBvbGljeSgpID09IENsaXBib2Fy
ZE51bWIpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICByZXR1cm4gbV9pdGVtLT5raW5k
KCk7Cit9CisKK1N0cmluZyBEYXRhVHJhbnNmZXJJdGVtV3JhcHBlcjo6dHlwZSgpIGNvbnN0Cit7
CisgICAgaWYgKG1fY2xpcGJvYXJkLT5wb2xpY3koKSA9PSBDbGlwYm9hcmROdW1iKQorICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0dXJuIG1faXRlbS0+dHlwZSgpOworfQorCit2b2lk
IERhdGFUcmFuc2Zlckl0ZW1XcmFwcGVyOjpnZXRBc1N0cmluZyhQYXNzUmVmUHRyPFN0cmluZ0Nh
bGxiYWNrPiBjYWxsYmFjaykgY29uc3QKK3sKKyAgICBpZiAobV9jbGlwYm9hcmQtPnBvbGljeSgp
ICE9IENsaXBib2FyZFJlYWRhYmxlICYmIG1fY2xpcGJvYXJkLT5wb2xpY3koKSAhPSBDbGlwYm9h
cmRXcml0YWJsZSkKKyAgICAgICAgcmV0dXJuOworICAgICAgIAorICAgIG1faXRlbS0+Z2V0QXNT
dHJpbmcoY2FsbGJhY2ssIG1fY2xpcGJvYXJkLT5mcmFtZSgpLT5kb2N1bWVudCgpLT5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCkpOworfQorCitQYXNzUmVmUHRyPEJsb2I+IERhdGFUcmFuc2Zlckl0
ZW1XcmFwcGVyOjpnZXRBc0ZpbGUoKSBjb25zdAoreworICAgIGlmIChtX2NsaXBib2FyZC0+cG9s
aWN5KCkgIT0gQ2xpcGJvYXJkUmVhZGFibGUgJiYgbV9jbGlwYm9hcmQtPnBvbGljeSgpICE9IENs
aXBib2FyZFdyaXRhYmxlKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBtX2l0ZW0t
PmdldEFzRmlsZSgpOworfQorCitEYXRhVHJhbnNmZXJJdGVtV3JhcHBlcjo6RGF0YVRyYW5zZmVy
SXRlbVdyYXBwZXIoCisgICAgUGFzc1JlZlB0cjxDbGlwYm9hcmRDaHJvbWl1bT4gY2xpcGJvYXJk
LCBQYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bT4gaXRlbSkKKyAgICA6IG1fY2xp
cGJvYXJkKGNsaXBib2FyZCkKKyAgICAsIG1faXRlbShpdGVtKQoreworfQorCit9IC8vIG5hbWVz
cGFjZQorCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiAvLyBXZSBwcm92aWRlIHRoZSBJ
RSBjbGlwYm9hcmQgdHlwZXMgKFVSTCBhbmQgVGV4dCksIGFuZCB0aGUgY2xpcGJvYXJkIHR5cGVz
IHNwZWNpZmllZCBpbiB0aGUgV0hBVFdHIFdlYiBBcHBsaWNhdGlvbnMgMS4wIGRyYWZ0CiAvLyBz
ZWUgaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay8gU2Vj
dGlvbiA2LjMuNS4zCiAKLXN0YXRpYyBTdHJpbmcgbm9ybWFsaXplVHlwZShjb25zdCBTdHJpbmcm
IHR5cGUpCitzdGF0aWMgU3RyaW5nIG5vcm1hbGl6ZVR5cGUoY29uc3QgU3RyaW5nJiB0eXBlLCBi
b29sJiBjb252ZXJ0VG9VUkwpCiB7CiAgICAgU3RyaW5nIGNsZWFuVHlwZSA9IHR5cGUuc3RyaXBX
aGl0ZVNwYWNlKCkubG93ZXIoKTsKICAgICBpZiAoY2xlYW5UeXBlID09IG1pbWVUeXBlVGV4dCB8
fCBjbGVhblR5cGUuc3RhcnRzV2l0aChtaW1lVHlwZVRleHRQbGFpbkV0YykpCiAgICAgICAgIHJl
dHVybiBtaW1lVHlwZVRleHRQbGFpbjsKKyAgICBpZiAoY2xlYW5UeXBlID09IG1pbWVUeXBlVVJM
KSB7CisgICAgICAgIGNvbnZlcnRUb1VSTCA9IHRydWU7CisgICAgICAgIHJldHVybiBtaW1lVHlw
ZVRleHRVUklMaXN0OworICAgIH0KICAgICByZXR1cm4gY2xlYW5UeXBlOwogfQogCkBAIC03OSw4
ICsyMjMsNiBAQCBDbGlwYm9hcmRDaHJvbWl1bTo6Q2xpcGJvYXJkQ2hyb21pdW0oQ2xpcGJvYXJk
VHlwZSBjbGlwYm9hcmRUeXBlLAogICAgIDogQ2xpcGJvYXJkKHBvbGljeSwgY2xpcGJvYXJkVHlw
ZSkKICAgICAsIG1fZGF0YU9iamVjdChkYXRhT2JqZWN0KQogICAgICwgbV9mcmFtZShmcmFtZSkK
LSAgICAsIG1fb3JpZ2luYWxTZXF1ZW5jZU51bWJlcihQbGF0Zm9ybVN1cHBvcnQ6OmNsaXBib2Fy
ZFNlcXVlbmNlTnVtYmVyKGN1cnJlbnRQYXN0ZWJvYXJkQnVmZmVyKCkpKQotICAgICwgbV9kcmFn
U3RvcmFnZVVwZGF0ZWQodHJ1ZSkKIHsKIH0KIApAQCAtOTYsMTMgKzIzOCwxMSBAQCBQYXNzUmVm
UHRyPENsaXBib2FyZENocm9taXVtPiBDbGlwYm9hcmRDaHJvbWl1bTo6Y3JlYXRlKENsaXBib2Fy
ZFR5cGUgY2xpcGJvYXJkVAogCiB2b2lkIENsaXBib2FyZENocm9taXVtOjpjbGVhckRhdGEoY29u
c3QgU3RyaW5nJiB0eXBlKQogewotICAgIGlmIChwb2xpY3koKSAhPSBDbGlwYm9hcmRXcml0YWJs
ZSB8fCAhbV9kYXRhT2JqZWN0KQorICAgIGlmIChwb2xpY3koKSAhPSBDbGlwYm9hcmRXcml0YWJs
ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9kcmFnU3RvcmFnZVVwZGF0ZWQgPSB0cnVlOwot
ICAgIG1fZGF0YU9iamVjdC0+Y2xlYXJEYXRhKG5vcm1hbGl6ZVR5cGUodHlwZSkpOwotCi0gICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgYm9vbCBpZ25vcmVkOworICAgIG1fZGF0YU9iamVj
dC0+Y2xlYXJEYXRhKG5vcm1hbGl6ZVR5cGUodHlwZSwgaWdub3JlZCkpOwogfQogCiB2b2lkIENs
aXBib2FyZENocm9taXVtOjpjbGVhckFsbERhdGEoKQpAQCAtMTEwLDIwICsyNTAsMzkgQEAgdm9p
ZCBDbGlwYm9hcmRDaHJvbWl1bTo6Y2xlYXJBbGxEYXRhKCkKICAgICBpZiAocG9saWN5KCkgIT0g
Q2xpcGJvYXJkV3JpdGFibGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZHJhZ1N0b3JhZ2VV
cGRhdGVkID0gdHJ1ZTsKICAgICBtX2RhdGFPYmplY3QtPmNsZWFyQWxsKCk7CiB9CiAKIFN0cmlu
ZyBDbGlwYm9hcmRDaHJvbWl1bTo6Z2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGJvb2wmIHN1
Y2Nlc3MpIGNvbnN0CiB7CiAgICAgc3VjY2VzcyA9IGZhbHNlOwotICAgIGlmIChwb2xpY3koKSAh
PSBDbGlwYm9hcmRSZWFkYWJsZSB8fCAhbV9kYXRhT2JqZWN0KQorICAgIGlmIChwb2xpY3koKSAh
PSBDbGlwYm9hcmRSZWFkYWJsZSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgaWYg
KGlzRm9yQ29weUFuZFBhc3RlKCkgJiYgcGxhdGZvcm1DbGlwYm9hcmRDaGFuZ2VkKCkpCisgICAg
Ym9vbCBjb252ZXJ0VG9VUkwgPSBmYWxzZTsKKyAgICBTdHJpbmcgZGF0YSA9IG1fZGF0YU9iamVj
dC0+Z2V0RGF0YShub3JtYWxpemVUeXBlKHR5cGUsIGNvbnZlcnRUb1VSTCksIHN1Y2Nlc3MpOwor
ICAgIGlmIChzdWNjZXNzICYmIGNvbnZlcnRUb1VSTCkgeworICAgICAgICBWZWN0b3I8U3RyaW5n
PiB1cmlMaXN0OworICAgICAgICAvLyBMaW5lIHNlcGFyYXRvciBpcyBcclxuIHBlciBSRkMgMjQ4
MyAtIGhvd2V2ZXIsIGZvciBjb21wYXRpYmlsaXR5CisgICAgICAgIC8vIHJlYXNvbnMgd2UgYWxz
byBhbGxvdyBqdXN0IFxuIGhlcmUuCisgICAgICAgIGRhdGEuc3BsaXQoJ1xuJywgdXJpTGlzdCk7
CisgICAgICAgIC8vIFByb2Nlc3MgdGhlIGlucHV0IGFuZCBjb3B5IHRoZSBmaXJzdCB2YWxpZCBV
UkwgaW50byB0aGUgdXJsIG1lbWJlci4gSW4gY2FzZSBubyBVUkxzIGNhbgorICAgICAgICAvLyBi
ZSBmb3VuZCwgcmV0dXJuIGFuIGVtcHR5IHN0cmluZy5pbGwgZ2V0IGFuIGVtcHR5IHN0cmluZy4g
VGhpcyBpcyBpbiBsaW5lIHdpdGggdGhlIEhUTUw1CisgICAgICAgIC8vIHNwZWMgKHNlZSAiVGhl
IERyYWdFdmVudCBhbmQgRGF0YVRyYW5zZmVyIGludGVyZmFjZXMiKS4KKyAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCB1cmlMaXN0LnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBTdHJp
bmcmIGxpbmUgPSB1cmlMaXN0W2ldOworICAgICAgICAgICAgbGluZSA9IGxpbmUuc3RyaXBXaGl0
ZVNwYWNlKCk7CisgICAgICAgICAgICBpZiAobGluZS5pc0VtcHR5KCkpCisgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICBpZiAobGluZVswXSA9PSAnIycpCisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICBLVVJMIHVybCA9IEtVUkwoUGFyc2VkVVJMU3Ry
aW5nLCBsaW5lKTsKKyAgICAgICAgICAgIGlmICh1cmwuaXNWYWxpZCgpKQorICAgICAgICAgICAg
ICAgIHJldHVybiB1cmw7CisgICAgICAgIH0KICAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0g
ICAgcmV0dXJuIG1fZGF0YU9iamVjdC0+Z2V0RGF0YShub3JtYWxpemVUeXBlKHR5cGUpLCBzdWNj
ZXNzKTsKKyAgICB9CisgICAgcmV0dXJuIGRhdGE7CiB9CiAKIGJvb2wgQ2xpcGJvYXJkQ2hyb21p
dW06OnNldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpCkBAIC0x
MzEsNDcgKzI5MCwzNyBAQCBib29sIENsaXBib2FyZENocm9taXVtOjpzZXREYXRhKGNvbnN0IFN0
cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKQogICAgIGlmIChwb2xpY3koKSAhPSBDbGlw
Ym9hcmRXcml0YWJsZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgbV9kcmFnU3RvcmFn
ZVVwZGF0ZWQgPSB0cnVlOwotICAgIHJldHVybiBtX2RhdGFPYmplY3QtPnNldERhdGEobm9ybWFs
aXplVHlwZSh0eXBlKSwgZGF0YSk7Ci19Ci0KLWJvb2wgQ2xpcGJvYXJkQ2hyb21pdW06OnBsYXRm
b3JtQ2xpcGJvYXJkQ2hhbmdlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9y
dDo6Y2xpcGJvYXJkU2VxdWVuY2VOdW1iZXIoY3VycmVudFBhc3RlYm9hcmRCdWZmZXIoKSkgIT0g
bV9vcmlnaW5hbFNlcXVlbmNlTnVtYmVyOworICAgIGJvb2wgaWdub3JlZDsKKyAgICByZXR1cm4g
bV9kYXRhT2JqZWN0LT5zZXREYXRhKG5vcm1hbGl6ZVR5cGUodHlwZSwgaWdub3JlZCksIGRhdGEp
OwogfQogCiAvLyBleHRlbnNpb25zIGJleW9uZCBJRSdzIEFQSQogSGFzaFNldDxTdHJpbmc+IENs
aXBib2FyZENocm9taXVtOjp0eXBlcygpIGNvbnN0CiB7Ci0gICAgSGFzaFNldDxTdHJpbmc+IHJl
c3VsdHM7CiAgICAgaWYgKHBvbGljeSgpICE9IENsaXBib2FyZFJlYWRhYmxlICYmIHBvbGljeSgp
ICE9IENsaXBib2FyZFR5cGVzUmVhZGFibGUpCi0gICAgICAgIHJldHVybiByZXN1bHRzOwotCi0g
ICAgaWYgKCFtX2RhdGFPYmplY3QpCi0gICAgICAgIHJldHVybiByZXN1bHRzOwotCi0gICAgcmVz
dWx0cyA9IG1fZGF0YU9iamVjdC0+dHlwZXMoKTsKLQotICAgIGlmIChtX2RhdGFPYmplY3QtPmNv
bnRhaW5zRmlsZW5hbWVzKCkpCi0gICAgICAgIHJlc3VsdHMuYWRkKG1pbWVUeXBlRmlsZXMpOwor
ICAgICAgICByZXR1cm4gSGFzaFNldDxTdHJpbmc+KCk7CiAKLSAgICByZXR1cm4gcmVzdWx0czsK
KyAgICByZXR1cm4gbV9kYXRhT2JqZWN0LT50eXBlcygpOwogfQogCiBQYXNzUmVmUHRyPEZpbGVM
aXN0PiBDbGlwYm9hcmRDaHJvbWl1bTo6ZmlsZXMoKSBjb25zdAogeworICAgIC8vIEZJWE1FOiBB
Y2NvcmRpbmcgdG8gdGhlIHNwZWMsIHdlIGFyZSBzdXBwb3NlZCB0byByZXR1cm4gdGhlIHNhbWUg
RmlsZUxpc3QgZWFjaCB0aW1lLgorICAgIFJlZlB0cjxGaWxlTGlzdD4gZmlsZXMgPSBGaWxlTGlz
dDo6Y3JlYXRlKCk7CiAgICAgaWYgKHBvbGljeSgpICE9IENsaXBib2FyZFJlYWRhYmxlKQotICAg
ICAgICByZXR1cm4gRmlsZUxpc3Q6OmNyZWF0ZSgpOwotCi0gICAgaWYgKCFtX2RhdGFPYmplY3Qp
Ci0gICAgICAgIHJldHVybiBGaWxlTGlzdDo6Y3JlYXRlKCk7Ci0KLSAgICBjb25zdCBWZWN0b3I8
U3RyaW5nPiYgZmlsZW5hbWVzID0gbV9kYXRhT2JqZWN0LT5maWxlbmFtZXMoKTsKLSAgICBSZWZQ
dHI8RmlsZUxpc3Q+IGZpbGVMaXN0ID0gRmlsZUxpc3Q6OmNyZWF0ZSgpOwotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgZmlsZW5hbWVzLnNpemUoKTsgKytpKQotICAgICAgICBmaWxlTGlzdC0+
YXBwZW5kKEZpbGU6OmNyZWF0ZShmaWxlbmFtZXMuYXQoaSkpKTsKLQotICAgIHJldHVybiBmaWxl
TGlzdC5yZWxlYXNlKCk7CisgICAgICAgIHJldHVybiBmaWxlczsKKworICAgIFJlZlB0cjxEYXRh
VHJhbnNmZXJJdGVtTGlzdENocm9taXVtPiBsaXN0ID0gbV9kYXRhT2JqZWN0LT5pdGVtcygpOwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdC0+bGVuZ3RoKCk7ICsraSkgeworICAgICAg
ICBpZiAobGlzdC0+aXRlbShpKS0+a2luZCgpID09IERhdGFUcmFuc2Zlckl0ZW06OmtpbmRGaWxl
KSB7CisgICAgICAgICAgICAvLyBJbiBsYXlvdXQgdGVzdHMsIGl0J3MgcG9zc2libGUgZm9yIHRo
aXMgdG8gcmV0dXJuIDAgc2luY2Ugd2UgaW1naHQgaGF2ZSBpdGVtcyBvZiB0eXBlCisgICAgICAg
ICAgICAvLyBCdWZmZXJlZERhdGFUcmFuc2ZlclNoYXJlZEJ1ZmZlckl0ZW0uCisgICAgICAgICAg
ICBSZWZQdHI8QmxvYj4gYmxvYiA9IGxpc3QtPml0ZW0oaSktPmdldEFzRmlsZSgpOworICAgICAg
ICAgICAgaWYgKGJsb2IgJiYgYmxvYi0+aXNGaWxlKCkpCisgICAgICAgICAgICAgICAgZmlsZXMt
PmFwcGVuZChzdGF0aWNfY2FzdDxGaWxlKj4oYmxvYi5nZXQoKSkpOworICAgICAgICB9CisgICAg
fQorICAgIHJldHVybiBmaWxlczsKIH0KIAogdm9pZCBDbGlwYm9hcmRDaHJvbWl1bTo6c2V0RHJh
Z0ltYWdlKENhY2hlZEltYWdlKiBpbWFnZSwgTm9kZSogbm9kZSwgY29uc3QgSW50UG9pbnQmIGxv
YykKQEAgLTI0MSw4ICszOTAsNiBAQCBzdGF0aWMgdm9pZCB3cml0ZUltYWdlVG9EYXRhT2JqZWN0
KENocm9taXVtRGF0YU9iamVjdCogZGF0YU9iamVjdCwgRWxlbWVudCogZWxlbQogICAgIGlmICgh
aW1hZ2VCdWZmZXIgfHwgIWltYWdlQnVmZmVyLT5zaXplKCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGRhdGFPYmplY3QtPnNldEZpbGVDb250ZW50KGltYWdlQnVmZmVyKTsKLQogICAgIC8vIERl
dGVybWluZSB0aGUgZmlsZW5hbWUgZm9yIHRoZSBmaWxlIGNvbnRlbnRzIG9mIHRoZSBpbWFnZS4K
ICAgICBTdHJpbmcgZmlsZW5hbWUgPSBjYWNoZWRJbWFnZS0+cmVzcG9uc2UoKS5zdWdnZXN0ZWRG
aWxlbmFtZSgpOwogICAgIGlmIChmaWxlbmFtZS5pc0VtcHR5KCkpCkBAIC0yNTUsMTMgKzQwMiwx
NCBAQCBzdGF0aWMgdm9pZCB3cml0ZUltYWdlVG9EYXRhT2JqZWN0KENocm9taXVtRGF0YU9iamVj
dCogZGF0YU9iamVjdCwgRWxlbWVudCogZWxlbQogICAgICAgICBpZiAoZXh0ZW5zaW9uSW5kZXgg
IT0gLTEpCiAgICAgICAgICAgICBmaWxlbmFtZS50cnVuY2F0ZShleHRlbnNpb25JbmRleCk7CiAg
ICAgfQotICAgIGZpbGVuYW1lID0gQ2xpcGJvYXJkQ2hyb21pdW06OnZhbGlkYXRlRmlsZU5hbWUo
ZmlsZW5hbWUsIGRhdGFPYmplY3QpOwogCiAgICAgU3RyaW5nIGV4dGVuc2lvbiA9IE1JTUVUeXBl
UmVnaXN0cnk6OmdldFByZWZlcnJlZEV4dGVuc2lvbkZvck1JTUVUeXBlKAogICAgICAgICBjYWNo
ZWRJbWFnZS0+cmVzcG9uc2UoKS5taW1lVHlwZSgpKTsKLSAgICBkYXRhT2JqZWN0LT5zZXRGaWxl
RXh0ZW5zaW9uKGV4dGVuc2lvbi5pc0VtcHR5KCkgPyBlbXB0eVN0cmluZygpIDogIi4iICsgZXh0
ZW5zaW9uKTsKKyAgICBleHRlbnNpb24gPSBleHRlbnNpb24uaXNFbXB0eSgpID8gZW1wdHlTdHJp
bmcoKSA6ICIuIiArIGV4dGVuc2lvbjsKKworICAgIENsaXBib2FyZENocm9taXVtOjp2YWxpZGF0
ZUZpbGVuYW1lKGZpbGVuYW1lLCBleHRlbnNpb24pOwogCi0gICAgZGF0YU9iamVjdC0+c2V0Rmls
ZUNvbnRlbnRGaWxlbmFtZShmaWxlbmFtZSArIGRhdGFPYmplY3QtPmZpbGVFeHRlbnNpb24oKSk7
CisgICAgZGF0YU9iamVjdC0+YWRkU2hhcmVkQnVmZmVyKGZpbGVuYW1lICsgZXh0ZW5zaW9uLCBl
eHRlbnNpb24sIGltYWdlQnVmZmVyKTsKIH0KIAogdm9pZCBDbGlwYm9hcmRDaHJvbWl1bTo6ZGVj
bGFyZUFuZFdyaXRlRHJhZ0ltYWdlKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEtVUkwmIHVybCwg
Y29uc3QgU3RyaW5nJiB0aXRsZSwgRnJhbWUqIGZyYW1lKQpAQCAtMjY5LDE1ICs0MTcsMTMgQEAg
dm9pZCBDbGlwYm9hcmRDaHJvbWl1bTo6ZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKEVsZW1lbnQq
IGVsZW1lbnQsIGNvbnN0IEtVUkwmIHUKICAgICBpZiAoIW1fZGF0YU9iamVjdCkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgbV9kcmFnU3RvcmFnZVVwZGF0ZWQgPSB0cnVlOwotICAgIG1fZGF0YU9i
amVjdC0+c2V0RGF0YShtaW1lVHlwZVVSTCwgdXJsKTsKLSAgICBtX2RhdGFPYmplY3QtPnNldFVy
bFRpdGxlKHRpdGxlKTsKKyAgICBtX2RhdGFPYmplY3QtPnNldFVSTCh1cmwsIHRpdGxlKTsKIAog
ICAgIC8vIFdyaXRlIHRoZSBieXRlcyBpbiB0aGUgaW1hZ2UgdG8gdGhlIGZpbGUgZm9ybWF0Lgog
ICAgIHdyaXRlSW1hZ2VUb0RhdGFPYmplY3QobV9kYXRhT2JqZWN0LmdldCgpLCBlbGVtZW50LCB1
cmwpOwogCiAgICAgLy8gUHV0IGltZyB0YWcgb24gdGhlIGNsaXBib2FyZCByZWZlcmVuY2luZyB0
aGUgaW1hZ2UKLSAgICBtX2RhdGFPYmplY3QtPnNldERhdGEobWltZVR5cGVUZXh0SFRNTCwgY3Jl
YXRlTWFya3VwKGVsZW1lbnQsIEluY2x1ZGVOb2RlLCAwLCBSZXNvbHZlQWxsVVJMcykpOworICAg
IG1fZGF0YU9iamVjdC0+c2V0SFRNTChjcmVhdGVNYXJrdXAoZWxlbWVudCwgSW5jbHVkZU5vZGUs
IDAsIFJlc29sdmVBbGxVUkxzKSwgS1VSTCgpKTsKIH0KIAogdm9pZCBDbGlwYm9hcmRDaHJvbWl1
bTo6d3JpdGVVUkwoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBGcmFtZSop
CkBAIC0yODYsMTYgKzQzMiwxMyBAQCB2b2lkIENsaXBib2FyZENocm9taXVtOjp3cml0ZVVSTChj
b25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdGl0bGUsIEZyYW1lKikKICAgICAgICAgcmV0
dXJuOwogICAgIEFTU0VSVCghdXJsLmlzRW1wdHkoKSk7CiAKLSAgICBtX2RyYWdTdG9yYWdlVXBk
YXRlZCA9IHRydWU7Ci0gICAgbV9kYXRhT2JqZWN0LT5zZXREYXRhKG1pbWVUeXBlVVJMLCB1cmwp
OwotICAgIG1fZGF0YU9iamVjdC0+c2V0VXJsVGl0bGUodGl0bGUpOworICAgIG1fZGF0YU9iamVj
dC0+c2V0VVJMKHVybCwgdGl0bGUpOwogCiAgICAgLy8gVGhlIFVSTCBjYW4gYWxzbyBiZSB1c2Vk
IGFzIHBsYWluIHRleHQuCiAgICAgbV9kYXRhT2JqZWN0LT5zZXREYXRhKG1pbWVUeXBlVGV4dFBs
YWluLCB1cmwuc3RyaW5nKCkpOwogCiAgICAgLy8gVGhlIFVSTCBjYW4gYWxzbyBiZSB1c2VkIGFz
IGFuIEhUTUwgZnJhZ21lbnQuCi0gICAgbV9kYXRhT2JqZWN0LT5zZXREYXRhKG1pbWVUeXBlVGV4
dEhUTUwsIHVybFRvTWFya3VwKHVybCwgdGl0bGUpKTsKLSAgICBtX2RhdGFPYmplY3QtPnNldEh0
bWxCYXNlVXJsKHVybCk7CisgICAgbV9kYXRhT2JqZWN0LT5zZXRIVE1MKHVybFRvTWFya3VwKHVy
bCwgdGl0bGUpLCB1cmwpOwogfQogCiB2b2lkIENsaXBib2FyZENocm9taXVtOjp3cml0ZVJhbmdl
KFJhbmdlKiBzZWxlY3RlZFJhbmdlLCBGcmFtZSogZnJhbWUpCkBAIC0zMDQsOSArNDQ3LDkgQEAg
dm9pZCBDbGlwYm9hcmRDaHJvbWl1bTo6d3JpdGVSYW5nZShSYW5nZSogc2VsZWN0ZWRSYW5nZSwg
RnJhbWUqIGZyYW1lKQogICAgIGlmICghbV9kYXRhT2JqZWN0KQogICAgICAgICAgcmV0dXJuOwog
Ci0gICAgbV9kcmFnU3RvcmFnZVVwZGF0ZWQgPSB0cnVlOwotICAgIG1fZGF0YU9iamVjdC0+c2V0
RGF0YShtaW1lVHlwZVRleHRIVE1MLCBjcmVhdGVNYXJrdXAoc2VsZWN0ZWRSYW5nZSwgMCwgQW5u
b3RhdGVGb3JJbnRlcmNoYW5nZSwgZmFsc2UsIFJlc29sdmVOb25Mb2NhbFVSTHMpKTsKLSAgICBt
X2RhdGFPYmplY3QtPnNldEh0bWxCYXNlVXJsKGZyYW1lLT5kb2N1bWVudCgpLT51cmwoKSk7Cisg
ICAgbV9kYXRhT2JqZWN0LT5zZXRIVE1MKAorICAgICAgICBjcmVhdGVNYXJrdXAoc2VsZWN0ZWRS
YW5nZSwgMCwgQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSwgZmFsc2UsIFJlc29sdmVOb25Mb2NhbFVS
THMpLAorICAgICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkpOwogCiAgICAgU3RyaW5nIHN0
ciA9IGZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0ZWRUZXh0KCk7CiAjaWYgT1MoV0lORE9XUykKQEAg
LTMyNyw3MiArNDcwLDIxIEBAIHZvaWQgQ2xpcGJvYXJkQ2hyb21pdW06OndyaXRlUGxhaW5UZXh0
KGNvbnN0IFN0cmluZyYgdGV4dCkKICNlbmRpZgogICAgIHJlcGxhY2VOQlNQV2l0aFNwYWNlKHN0
cik7CiAKLSAgICBtX2RyYWdTdG9yYWdlVXBkYXRlZCA9IHRydWU7CiAgICAgbV9kYXRhT2JqZWN0
LT5zZXREYXRhKG1pbWVUeXBlVGV4dFBsYWluLCBzdHIpOwogfQogCiBib29sIENsaXBib2FyZENo
cm9taXVtOjpoYXNEYXRhKCkKIHsKICAgICBBU1NFUlQoaXNGb3JEcmFnQW5kRHJvcCgpKTsKLSAg
ICBpZiAoIW1fZGF0YU9iamVjdCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJu
IG1fZGF0YU9iamVjdC0+aGFzRGF0YSgpOworICAgIC8vIEZJWE1FOiBQZXJoYXBzIHRoaXMgaXMg
dGhlIHJlYXNvbiB3ZSBjYW4ndCBkcmFnIGFuZCBkcm9wIHdpdGggbm8gZGF0YSBzZXQ/CisgICAg
cmV0dXJuIG1fZGF0YU9iamVjdC0+aXRlbXMoKS0+bGVuZ3RoKCkgPiAwOwogfQogCiAjaWYgRU5B
QkxFKERBVEFfVFJBTlNGRVJfSVRFTVMpCiBQYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1MaXN0
PiBDbGlwYm9hcmRDaHJvbWl1bTo6aXRlbXMoKQogewotICAgIGlmICghbV9kYXRhT2JqZWN0IHx8
IChwb2xpY3koKSAhPSBDbGlwYm9hcmRSZWFkYWJsZSAmJiBwb2xpY3koKSAhPSBDbGlwYm9hcmRX
cml0YWJsZSkpIHsKLSAgICAgICAgLy8gUmV0dXJuIGFuIHVuYXNzb2NpYXRlZCBlbXB0eSBsaXN0
LgotICAgICAgICByZXR1cm4gRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bTo6Y3JlYXRlKHRo
aXMsIG1fZnJhbWUtPmRvY3VtZW50KCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7Ci0gICAg
fQotCi0gICAgaWYgKCFtX2l0ZW1MaXN0KQotICAgICAgICBtX2l0ZW1MaXN0ID0gRGF0YVRyYW5z
ZmVySXRlbUxpc3RDaHJvbWl1bTo6Y3JlYXRlKHRoaXMsIG1fZnJhbWUtPmRvY3VtZW50KCktPnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7Ci0KLSAgICByZXR1cm4gbV9pdGVtTGlzdDsKLX0KLQot
Ly8gRklYTUU6IGludGVncmF0ZSBDaHJvbWl1bURhdGFPYmplY3QgYW5kIERhdGFUcmFuc2Zlckl0
ZW1MaXN0IHJhdGhlciB0aGFuIGhvbGRpbmcgdGhlbSBzZXBhcmF0ZWx5IGFuZCBrZWVwaW5nIHRo
ZW0gc3luY2VkLgotdm9pZCBDbGlwYm9hcmRDaHJvbWl1bTo6bWF5VXBkYXRlSXRlbXMoVmVjdG9y
PFJlZlB0cjxEYXRhVHJhbnNmZXJJdGVtPiA+JiBpdGVtcykKLXsKLSAgICBpZiAoIWl0ZW1zLmlz
RW1wdHkoKSAmJiAhc3RvcmFnZUhhc1VwZGF0ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aXRlbXMuY2xlYXIoKTsKLQotICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCk7Ci0KLSAgICBpZiAoaXNGb3JDb3B5QW5kUGFzdGUoKSAmJiBwb2xpY3koKSA9PSBDbGlwYm9h
cmRSZWFkYWJsZSkgewotICAgICAgICAvLyBJdGVyYXRlIHRocm91Z2ggdGhlIHR5cGVzIGFuZCBh
ZGQgdGhlbS4KLSAgICAgICAgSGFzaFNldDxTdHJpbmc+IHR5cGVzID0gbV9kYXRhT2JqZWN0LT50
eXBlcygpOwotICAgICAgICBmb3IgKEhhc2hTZXQ8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQg
PSB0eXBlcy5iZWdpbigpOyBpdCAhPSB0eXBlcy5lbmQoKTsgKytpdCkKLSAgICAgICAgICAgIGl0
ZW1zLmFwcGVuZChEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW06OmNyZWF0ZUZyb21QYXN0ZWJvYXJk
KHRoaXMsIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsICppdCkpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0gICAgU3RyaW5nIHBsYWluVGV4dCA9
IG1fZGF0YU9iamVjdC0+Z2V0RGF0YShtaW1lVHlwZVRleHRQbGFpbiwgc3VjY2Vzcyk7Ci0gICAg
aWYgKHN1Y2Nlc3MpCi0gICAgICAgIGl0ZW1zLmFwcGVuZChEYXRhVHJhbnNmZXJJdGVtQ2hyb21p
dW06OmNyZWF0ZSh0aGlzLCBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBwbGFpblRleHQsIG1pbWVU
eXBlVGV4dFBsYWluKSk7Ci0KLSAgICBzdWNjZXNzID0gZmFsc2U7Ci0gICAgU3RyaW5nIGh0bWxU
ZXh0ID0gbV9kYXRhT2JqZWN0LT5nZXREYXRhKG1pbWVUeXBlVGV4dEhUTUwsIHN1Y2Nlc3MpOwot
ICAgIGlmIChzdWNjZXNzKQotICAgICAgICBpdGVtcy5hcHBlbmQoRGF0YVRyYW5zZmVySXRlbUNo
cm9taXVtOjpjcmVhdGUodGhpcywgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgaHRtbFRleHQsIG1p
bWVUeXBlVGV4dEhUTUwpKTsKLQotICAgIGlmIChtX2RhdGFPYmplY3QtPmNvbnRhaW5zRmlsZW5h
bWVzKCkpIHsKLSAgICAgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcyA9IG1fZGF0
YU9iamVjdC0+ZmlsZW5hbWVzKCk7Ci0gICAgICAgIGZvciAoVmVjdG9yPFN0cmluZz46OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gZmlsZW5hbWVzLmJlZ2luKCk7IGl0ICE9IGZpbGVuYW1lcy5lbmQoKTsg
KytpdCkKLSAgICAgICAgICAgIGl0ZW1zLmFwcGVuZChEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW06
OmNyZWF0ZSh0aGlzLCBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBGaWxlOjpjcmVhdGUoKml0KSkp
OwotICAgIH0KLSAgICBtX2RyYWdTdG9yYWdlVXBkYXRlZCA9IGZhbHNlOwotfQotCi1ib29sIENs
aXBib2FyZENocm9taXVtOjpzdG9yYWdlSGFzVXBkYXRlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IChpc0ZvckNvcHlBbmRQYXN0ZSgpICYmIHBsYXRmb3JtQ2xpcGJvYXJkQ2hhbmdlZCgpKSB8fCAo
aXNGb3JEcmFnQW5kRHJvcCgpICYmIG1fZHJhZ1N0b3JhZ2VVcGRhdGVkKTsKKyAgICByZXR1cm4g
RGF0YVRyYW5zZmVySXRlbUxpc3RXcmFwcGVyOjpjcmVhdGUodGhpcywgbV9kYXRhT2JqZWN0LT5p
dGVtcygpKTsKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uaAppbmRleCAzMGU4NzM5YTIzODc3MzNkYjE3Zjk0
NTg2Y2Y3NzAyMzM3MmUzNDVkLi44OTAxODIwZDNhY2U5MzEwYTRjZWEwY2FhMWJmMGY4N2IyMzlm
NDdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9h
cmRDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBi
b2FyZENocm9taXVtLmgKQEAgLTUxLDE3ICs1MSwxNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENsaXBib2FyZENocm9taXVtPiBjcmVhdGUoCiAgICAg
ICAgICAgICBDbGlwYm9hcmRUeXBlLCBQYXNzUmVmUHRyPENocm9taXVtRGF0YU9iamVjdD4sIENs
aXBib2FyZEFjY2Vzc1BvbGljeSwgRnJhbWUqKTsKIAotICAgICAgICAvLyBSZXR1cm5zIHRoZSBm
aWxlIG5hbWUgKG5vdCBpbmNsdWRpbmcgdGhlIGV4dGVuc2lvbikuIFRoaXMgcmVtb3ZlcyBhbnkK
LSAgICAgICAgLy8gaW52YWxpZCBmaWxlIHN5c3RlbSBjaGFyYWN0ZXJzIGFzIHdlbGwgYXMgbWFr
aW5nIHN1cmUgdGhlCi0gICAgICAgIC8vIHBhdGggKyBleHRlbnNpb24gaXMgbm90IGJpZ2dlciB0
aGFuIGFsbG93ZWQgYnkgdGhlIGZpbGUgc3lzdGVtLgotICAgICAgICAvLyBUaGlzIG1heSBjaGFu
Z2UgdGhlIGZpbGUgZXh0ZW5zaW9uIGluIGRhdGFPYmplY3QuCi0gICAgICAgIHN0YXRpYyBTdHJp
bmcgdmFsaWRhdGVGaWxlTmFtZShjb25zdCBTdHJpbmcmIHRpdGxlLCBDaHJvbWl1bURhdGFPYmpl
Y3QqIGRhdGFPYmplY3QpOworICAgICAgICAvLyBWYWxpZGF0ZXMgYSBmaWxlbmFtZSAod2l0aG91
dCB0aGUgZXh0ZW5zaW9uKSBhbmQgdGhlIGV4dGVuc2lvbi4gVGhpcyByZW1vdmVzIGFueSBpbnZh
bGlkCisgICAgICAgIC8vIGZpbGUgc3lzdGVtIGNoYXJhY3RlcnMgYXMgd2VsbCBhcyBtYWtpbmcg
c3VyZSB0aGUgcGF0aCArIGV4dGVuc2lvbiBpcyBub3QgYmlnZ2VyIHRoYW4KKyAgICAgICAgLy8g
YWxsb3dlZCBieSB0aGUgZmlsZSBzeXN0ZW0uCisgICAgICAgIHN0YXRpYyB2b2lkIHZhbGlkYXRl
RmlsZW5hbWUoU3RyaW5nJiBuYW1lLCBTdHJpbmcmIGV4dGVuc2lvbik7CiAKICAgICAgICAgdmly
dHVhbCB2b2lkIGNsZWFyRGF0YShjb25zdCBTdHJpbmcmIHR5cGUpOwogICAgICAgICB2b2lkIGNs
ZWFyQWxsRGF0YSgpOwogICAgICAgICBTdHJpbmcgZ2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUs
IGJvb2wmIHN1Y2Nlc3MpIGNvbnN0OwogICAgICAgICBib29sIHNldERhdGEoY29uc3QgU3RyaW5n
JiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpOwotICAgICAgICBib29sIHBsYXRmb3JtQ2xpcGJv
YXJkQ2hhbmdlZCgpIGNvbnN0OwogCiAgICAgICAgIC8vIGV4dGVuc2lvbnMgYmV5b25kIElFJ3Mg
QVBJCiAgICAgICAgIHZpcnR1YWwgSGFzaFNldDxTdHJpbmc+IHR5cGVzKCkgY29uc3Q7CkBAIC04
NSwyNiArODMsMTUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgRU5BQkxFKERBVEFfVFJB
TlNGRVJfSVRFTVMpCiAgICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVt
TGlzdD4gaXRlbXMoKTsKLQotICAgICAgICAvLyBJbnRlcm5hbCByb3V0aW5lcyB0byBrZWVwIHRo
ZSBsaXN0IHJldHVybmVkIGJ5IGl0ZW1zKCkgKGkuZS4gbV9pdGVtTGlzdCkgc3luY2hyb25pemVk
IHdpdGggdGhlIGNvbnRlbnQgb2YgdGhlIGNsaXBib2FyZCBkYXRhLgotICAgICAgICB2b2lkIG1h
eVVwZGF0ZUl0ZW1zKFZlY3RvcjxSZWZQdHI8RGF0YVRyYW5zZmVySXRlbT4gPiYgaXRlbXMpOwot
ICAgICAgICBib29sIHN0b3JhZ2VIYXNVcGRhdGVkKCkgY29uc3Q7CiAjZW5kaWYKKyAgICAgICAg
RnJhbWUqIGZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZTsgfQogCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgQ2xpcGJvYXJkQ2hyb21pdW0oQ2xpcGJvYXJkVHlwZSwgUGFzc1JlZlB0cjxDaHJv
bWl1bURhdGFPYmplY3Q+LCBDbGlwYm9hcmRBY2Nlc3NQb2xpY3ksIEZyYW1lKik7CiAKLSAgICAg
ICAgdm9pZCByZXNldEZyb21DbGlwYm9hcmQoKTsKICAgICAgICAgdm9pZCBzZXREcmFnSW1hZ2Uo
Q2FjaGVkSW1hZ2UqLCBOb2RlKiwgY29uc3QgSW50UG9pbnQmKTsKICAgICAgICAgUmVmUHRyPENo
cm9taXVtRGF0YU9iamVjdD4gbV9kYXRhT2JqZWN0OwogICAgICAgICBGcmFtZSogbV9mcmFtZTsK
LQotI2lmIEVOQUJMRShEQVRBX1RSQU5TRkVSX0lURU1TKQotICAgICAgICBSZWZQdHI8RGF0YVRy
YW5zZmVySXRlbUxpc3RDaHJvbWl1bT4gbV9pdGVtTGlzdDsKLSNlbmRpZgotCi0gICAgICAgIHVp
bnQ2NF90IG1fb3JpZ2luYWxTZXF1ZW5jZU51bWJlcjsKLSAgICAgICAgYm9vbCBtX2RyYWdTdG9y
YWdlVXBkYXRlZDsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bUxpbnV4
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVt
TGludXguY3BwCmluZGV4IDJjODlmNmU4ZWU5OTkyMDI5MTJiM2Q4ZGI5YmY1YmI3NzI1NzdhOTcu
Ljk1OWIzNjY1MmZlMzk1NjAxN2Y3ZDY0NTAxMGM1MjM4NTNjM2IzOGQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtTGludXguY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVt
TGludXguY3BwCkBAIC0yNywxNSArMjcsMTMgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJDbGlwYm9hcmRDaHJvbWl1bS5oIgogCi0jaW5jbHVkZSAiQ2hyb21pdW1EYXRhT2JqZWN0
LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1TdHJpbmcgQ2xpcGJvYXJkQ2hyb21pdW06OnZhbGlkYXRlRmlsZU5hbWUoY29uc3QgU3RyaW5n
JiB0aXRsZSwgQ2hyb21pdW1EYXRhT2JqZWN0KiBkYXRhT2JqZWN0KQordm9pZCBDbGlwYm9hcmRD
aHJvbWl1bTo6dmFsaWRhdGVGaWxlbmFtZShTdHJpbmcmIG5hbWUsIFN0cmluZyYgZXh0ZW5zaW9u
KQogewogICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHRpdGxlOwogfQogCiB9ICAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW1NYWMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW1NYWMuY3BwCmluZGV4IDM4MDIxNDAyZWI5Mjll
M2NjNmUyNTFkMjIzZjAwNzQ2NmFkZjJmMjcuLmJjZWFjZWJkYTg3MDZmMzlmNDA4ZGZkYzU3NjQ0
Y2FiMjczNjUwMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVt
L0NsaXBib2FyZENocm9taXVtTWFjLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
aHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bU1hYy5jcHAKQEAgLTI3LDExICsyNyw4IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ2xpcGJvYXJkQ2hyb21pdW0uaCIKIAotI2luY2x1
ZGUgIkNocm9taXVtRGF0YU9iamVjdC5oIgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCi0K
IC8vIEZpbGVuYW1lIGxlbmd0aCBhbmQgY2hhcmFjdGVyLXNldCBsaW1pdHMgdmFyeSBieSBmaWxl
c3lzdGVtLCBhbmQgdGhlcmUncyBubwogLy8gcmVhbCB3YXkgdG8gdGVsbCB3aGF0IGZpbGVzeXN0
ZW0gaXMgaW4gdXNlLiBTaW5jZSBIRlMrIGlzIGJ5IGZhciB0aGUgbW9zdAogLy8gY29tbW9uLCB3
ZSdsbCBhYmlkZSBieSBpdHMgbGltaXRzLCB3aGljaCBhcmUgMjU1IFVuaWNvZGUgY2hhcmFjdGVy
cyAoc2xpZ2h0bHkKQEAgLTM5LDcgKzM2LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogLy8gcmVh
bGx5IHdvcnRoIGRlYWxpbmcgd2l0aCBoZXJlLikKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBNYXhI
RlNGaWxlbmFtZUxlbmd0aCA9IDI1NTsKIAotCiBzdGF0aWMgYm9vbCBpc0ludmFsaWRGaWxlQ2hh
cmFjdGVyKFVDaGFyIGMpCiB7CiAgICAgLy8gSEZTKyBiYXNpY2FsbHkgYWxsb3dzIGFueXRoaW5n
IGJ1dCAnLycuIEZvciBzYW5pdHkncyBzYWtlIHdlJ2xsIGRpc2FsbG93CkBAIC00NywyMyArNDMs
MTggQEAgc3RhdGljIGJvb2wgaXNJbnZhbGlkRmlsZUNoYXJhY3RlcihVQ2hhciBjKQogICAgIHJl
dHVybiBjIDwgJyAnIHx8IGMgPT0gMHg3RiB8fCBjID09ICcvJzsKIH0KIAotU3RyaW5nIENsaXBi
b2FyZENocm9taXVtOjp2YWxpZGF0ZUZpbGVOYW1lKGNvbnN0IFN0cmluZyYgdGl0bGUsIENocm9t
aXVtRGF0YU9iamVjdCogZGF0YU9iamVjdCkKK3ZvaWQgQ2xpcGJvYXJkQ2hyb21pdW06OnZhbGlk
YXRlRmlsZW5hbWUoU3RyaW5nJiBuYW1lLCBTdHJpbmcmIGV4dGVuc2lvbikKIHsKICAgICAvLyBS
ZW1vdmUgYW55IGludmFsaWQgZmlsZSBzeXN0ZW0gY2hhcmFjdGVycywgZXNwZWNpYWxseSAiLyIu
Ci0gICAgU3RyaW5nIHJlc3VsdCA9IHRpdGxlLnJlbW92ZUNoYXJhY3RlcnMoaXNJbnZhbGlkRmls
ZUNoYXJhY3Rlcik7Ci0gICAgU3RyaW5nIGV4dGVuc2lvbiA9IGRhdGFPYmplY3QtPmZpbGVFeHRl
bnNpb24oKS5yZW1vdmVDaGFyYWN0ZXJzKCZpc0ludmFsaWRGaWxlQ2hhcmFjdGVyKTsKKyAgICBu
YW1lID0gbmFtZS5yZW1vdmVDaGFyYWN0ZXJzKCZpc0ludmFsaWRGaWxlQ2hhcmFjdGVyKTsKKyAg
ICBleHRlbnNpb24gPSBleHRlbnNpb24ucmVtb3ZlQ2hhcmFjdGVycygmaXNJbnZhbGlkRmlsZUNo
YXJhY3Rlcik7CiAKICAgICAvLyBSZW1vdmUgYSByaWRpY3Vsb3VzbHktbG9uZyBleHRlbnNpb24u
CiAgICAgaWYgKGV4dGVuc2lvbi5sZW5ndGgoKSA+PSBNYXhIRlNGaWxlbmFtZUxlbmd0aCkKLSAg
ICAgICAgZXh0ZW5zaW9uID0gIiI7CisgICAgICAgIGV4dGVuc2lvbiA9IFN0cmluZygpOwogICAg
IAogICAgIC8vIFRydW5jYXRlIGFuIG92ZXJseS1sb25nIGZpbGVuYW1lLgotICAgIGludCBvdmVy
ZmxvdyA9IHJlc3VsdC5sZW5ndGgoKSArIGV4dGVuc2lvbi5sZW5ndGgoKSAtIE1heEhGU0ZpbGVu
YW1lTGVuZ3RoOwotICAgIGlmIChvdmVyZmxvdyA+IDApIAotICAgICAgICByZXN1bHQucmVtb3Zl
KHJlc3VsdC5sZW5ndGgoKSAtIG92ZXJmbG93LCBvdmVyZmxvdyk7Ci0gICAgCi0gICAgZGF0YU9i
amVjdC0+c2V0RmlsZUV4dGVuc2lvbihleHRlbnNpb24pOwotICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgbmFtZS50cnVuY2F0ZShNYXhIRlNGaWxlbmFtZUxlbmd0aCAtIGV4dGVuc2lvbi5sZW5ndGgo
KSk7CiB9CiAKIH0gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bVdpbi5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bVdpbi5jcHAKaW5kZXgg
ZDliYmViNWRkM2QzN2EyNTQ4OTE0YWFiY2VmMDNlZDlhZmMwYmNkNy4uYjhhZjY1ZDY5OTMzNWNl
OTFjMmE1YTY2Zjg1N2E1ZmM5YTRmZjk3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW1XaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtV2luLmNwcApAQCAtMjcsOCAr
MjcsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNsaXBib2FyZENocm9taXVt
LmgiCiAKLSNpbmNsdWRlICJDaHJvbWl1bURhdGFPYmplY3QuaCIKLQogI2luY2x1ZGUgPHNobHdh
cGkuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDAsMTcgKzM4LDE2IEBAIHN0YXRpYyBi
b29sIGlzSW52YWxpZEZpbGVDaGFyYWN0ZXIoVUNoYXIgYykKICAgICByZXR1cm4gKFBhdGhHZXRD
aGFyVHlwZShjKSAmIChHQ1RfTEZOQ0hBUiB8IEdDVF9TSE9SVENIQVIpKSA9PSAwOwogfQogCi1T
dHJpbmcgQ2xpcGJvYXJkQ2hyb21pdW06OnZhbGlkYXRlRmlsZU5hbWUoY29uc3QgU3RyaW5nJiB0
aXRsZSwgQ2hyb21pdW1EYXRhT2JqZWN0KiBkYXRhT2JqZWN0KQordm9pZCBDbGlwYm9hcmRDaHJv
bWl1bTo6dmFsaWRhdGVGaWxlbmFtZShTdHJpbmcmIG5hbWUsIFN0cmluZyYgZXh0ZW5zaW9uKQog
ewogICAgIC8vIFJlbW92ZSBhbnkgaW52YWxpZCBmaWxlIHN5c3RlbSBjaGFyYWN0ZXJzLgotICAg
IFN0cmluZyByZXN1bHQgPSB0aXRsZS5yZW1vdmVDaGFyYWN0ZXJzKCZpc0ludmFsaWRGaWxlQ2hh
cmFjdGVyKTsKLSAgICBpZiAocmVzdWx0Lmxlbmd0aCgpICsgZGF0YU9iamVjdC0+ZmlsZUV4dGVu
c2lvbigpLmxlbmd0aCgpICsgMSA+PSBNQVhfUEFUSCkgewotICAgICAgICBpZiAoZGF0YU9iamVj
dC0+ZmlsZUV4dGVuc2lvbigpLmxlbmd0aCgpICsgMSA+PSBNQVhfUEFUSCkKLSAgICAgICAgICAg
IGRhdGFPYmplY3QtPnNldEZpbGVFeHRlbnNpb24oIiIpOwotICAgICAgICBpZiAocmVzdWx0Lmxl
bmd0aCgpICsgZGF0YU9iamVjdC0+ZmlsZUV4dGVuc2lvbigpLmxlbmd0aCgpICsgMSA+PSBNQVhf
UEFUSCkKLSAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5zdWJzdHJpbmcoMCwgTUFYX1BBVEgg
LSBkYXRhT2JqZWN0LT5maWxlRXh0ZW5zaW9uKCkubGVuZ3RoKCkgLSAxKTsKLSAgICB9Ci0gICAg
cmV0dXJuIHJlc3VsdDsKKyAgICBuYW1lID0gbmFtZS5yZW1vdmVDaGFyYWN0ZXJzKCZpc0ludmFs
aWRGaWxlQ2hhcmFjdGVyKTsKKyAgICBleHRlbnNpb24gPSBleHRlbnNpb24ucmVtb3ZlQ2hhcmFj
dGVycygmaXNJbnZhbGlkRmlsZUNoYXJhY3Rlcik7CisKKyAgICBpZiAoZXh0ZW5zaW9uLmxlbmd0
aCgpICsgMSA+PSBNQVhfUEFUSCkKKyAgICAgICAgZXh0ZW5zaW9uID0gU3RyaW5nKCk7CisKKyAg
ICBuYW1lLnRydW5jYXRlKE1BWF9QQVRIIC0gZXh0ZW5zaW9uLmxlbmd0aCgpIC0gMSk7CiB9CiAK
IH0gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRVdGlsaXRpZXNDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRVdGlsaXRpZXNDaHJvbWl1bS5jcHAKaW5k
ZXggNDc1NzJjNWI4OGMzMDRhM2Y0YjdiMTMyZDI0MzM3NWUwNmUwY2JjZC4uNjA0MDk4ODE3OTRl
NDFmYmZlOTExZDhhMjQwYjZjNTBkZmI4ZmQ5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkVXRpbGl0aWVzQ2hyb21pdW0uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZFV0aWxpdGllc0Nocm9taXVt
LmNwcApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJQYXN0
ZWJvYXJkLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJQbGF0Zm9y
bVN1cHBvcnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00NCw2ICs0NSwxMSBAQCBQ
YXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyIGN1cnJlbnRQYXN0ZWJvYXJkQnVmZmVy
KCkKICAgICAgICAgUGFzdGVib2FyZFByaXZhdGU6OlN0YW5kYXJkQnVmZmVyOwogfQogCitib29s
IHBhc3RlYm9hcmRIYXNDaGFuZ2VkKFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIg
YnVmZmVyLCB1aW50NjRfdCBvcmlnaW5hbFNlcXVlbmNlTnVtYmVyKQoreworICAgIHJldHVybiBv
cmlnaW5hbFNlcXVlbmNlTnVtYmVyICE9IFBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJvYXJkU2VxdWVu
Y2VOdW1iZXIoYnVmZmVyKTsKK30KKwogI2lmIE9TKFdJTkRPV1MpCiB2b2lkIHJlcGxhY2VOZXds
aW5lc1dpdGhXaW5kb3dzU3R5bGVOZXdsaW5lcyhTdHJpbmcmIHN0cikKIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZFV0aWxpdGllc0Nocm9t
aXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRVdGlsaXRp
ZXNDaHJvbWl1bS5oCmluZGV4IDdhZTUwMDQzYTE2Yjk2YjMyMTkyNjk3ZDQwOGIyMzhiNThjMGE1
ZTkuLjdmYzU2ZmQ1Zjc2ZWI3NTIzNDkzYTg4Y2MwNTQ1Y2M0OGIwNDU0MTQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZFV0aWxpdGllc0Nocm9t
aXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkVXRp
bGl0aWVzQ2hyb21pdW0uaApAQCAtNDAsNiArNDAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBj
bGFzcyBLVVJMOwogCiBQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyIGN1cnJlbnRQ
YXN0ZWJvYXJkQnVmZmVyKCk7Citib29sIHBhc3RlYm9hcmRIYXNDaGFuZ2VkKFBhc3RlYm9hcmRQ
cml2YXRlOjpDbGlwYm9hcmRCdWZmZXIsIHVpbnQ2NF90KTsKICNpZiBPUyhXSU5ET1dTKQogdm9p
ZCByZXBsYWNlTmV3bGluZXNXaXRoV2luZG93c1N0eWxlTmV3bGluZXMoU3RyaW5nJik7CiAjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RhdGFUcmFu
c2Zlckl0ZW1DaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9E
YXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0uY3BwCmluZGV4IDdhMTEzMjQ4OWQ2Y2Y1M2NmMjJmOTJj
OTQ4ZmQwOTJjMjQyNDIxMDkuLjdjNTVhMDE3MDJmODIxYzEzMjA1MGFjZjM3ZWM3M2M5ODM1Y2Mw
NjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RhdGFUcmFu
c2Zlckl0ZW1DaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vRGF0YVRyYW5zZmVySXRlbUNocm9taXVtLmNwcApAQCAtMzQsMTI1ICszNCwzMjMgQEAKICNp
ZiBFTkFCTEUoREFUQV9UUkFOU0ZFUl9JVEVNUykKIAogI2luY2x1ZGUgIkJsb2IuaCIKLSNpbmNs
dWRlICJDbGlwYm9hcmQuaCIKLSNpbmNsdWRlICJDbGlwYm9hcmRDaHJvbWl1bS5oIgogI2luY2x1
ZGUgIkNsaXBib2FyZE1pbWVUeXBlcy5oIgogI2luY2x1ZGUgIkNsaXBib2FyZFV0aWxpdGllc0No
cm9taXVtLmgiCi0jaW5jbHVkZSAiRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bS5oIgotI2lu
Y2x1ZGUgIkZpbGUuaCIKKyNpbmNsdWRlICJEYXRhVHJhbnNmZXJJdGVtLmgiCiAjaW5jbHVkZSAi
UGxhdGZvcm1TdXBwb3J0LmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5jbHVkZSAi
U3RyaW5nQ2FsbGJhY2suaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzUmVmUHRyPERh
dGFUcmFuc2Zlckl0ZW1DaHJvbWl1bT4gRGF0YVRyYW5zZmVySXRlbUNocm9taXVtOjpjcmVhdGVG
cm9tUGFzdGVib2FyZChQYXNzUmVmUHRyPENsaXBib2FyZD4gb3duZXIsIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgdHlwZSkKK0RhdGFUcmFuc2Zlckl0ZW1D
aHJvbWl1bTo6fkRhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bSgpCiB7Ci0gICAgaWYgKHR5cGUgPT0g
bWltZVR5cGVUZXh0UGxhaW4gfHwgdHlwZSA9PSBtaW1lVHlwZVRleHRIVE1MKQotICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bShvd25lciwgY29udGV4
dCwgUGFzdGVib2FyZFNvdXJjZSwgRGF0YVRyYW5zZmVySXRlbTo6a2luZFN0cmluZywgdHlwZSwg
U3RyaW5nKCkpKTsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IERhdGFUcmFuc2Zlckl0ZW1DaHJv
bWl1bShvd25lciwgY29udGV4dCwgUGFzdGVib2FyZFNvdXJjZSwgRGF0YVRyYW5zZmVySXRlbTo6
a2luZEZpbGUsIHR5cGUsICIiKSk7CiB9CiAKLVBhc3NSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUNo
cm9taXVtPiBEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW06OmNyZWF0ZShQYXNzUmVmUHRyPENsaXBi
b2FyZD4gb3duZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGRhdGEsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
U3RyaW5nJiB0eXBlKQordm9pZCBEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW06OmdldEFzU3RyaW5n
KFBhc3NSZWZQdHI8U3RyaW5nQ2FsbGJhY2s+LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KikgY29u
c3QKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bShv
d25lciwgY29udGV4dCwgRGF0YVRyYW5zZmVySXRlbUNocm9taXVtOjpJbnRlcm5hbFNvdXJjZSwg
a2luZFN0cmluZywgdHlwZSwgZGF0YSkpOwogfQogCi1QYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0
ZW1DaHJvbWl1bT4gRGF0YVRyYW5zZmVySXRlbUNocm9taXVtOjpjcmVhdGUoUGFzc1JlZlB0cjxD
bGlwYm9hcmQ+IG93bmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxGaWxlPiBmaWxlKQorUGFzc1JlZlB0cjxC
bG9iPiBEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW06OmdldEFzRmlsZSgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0ob3duZXIsIGNvbnRl
eHQsIERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bTo6SW50ZXJuYWxTb3VyY2UsIGZpbGUpKTsKKyAg
ICByZXR1cm4gMDsKIH0KIAotRGF0YVRyYW5zZmVySXRlbUNocm9taXVtOjpEYXRhVHJhbnNmZXJJ
dGVtQ2hyb21pdW0oUGFzc1JlZlB0cjxDbGlwYm9hcmQ+IG93bmVyLCBTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0LCBEYXRhU291cmNlIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBraW5kLCBj
b25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSkKLSAgICA6IG1fY29udGV4dChj
b250ZXh0KQotICAgICwgbV9vd25lcihvd25lcikKLSAgICAsIG1fa2luZChraW5kKQotICAgICwg
bV90eXBlKHR5cGUpCi0gICAgLCBtX3NvdXJjZShzb3VyY2UpCitTdHJpbmcgRGF0YVRyYW5zZmVy
SXRlbUNocm9taXVtOjpsZWdhY3lHZXRBc1N0cmluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIFN0
cmluZygpOworfQorCitTdHJpbmcgRGF0YVRyYW5zZmVyVVJJTGlzdEl0ZW06OmtpbmQoKSBjb25z
dAoreworICAgIHJldHVybiBEYXRhVHJhbnNmZXJJdGVtOjpraW5kU3RyaW5nOworfQorCitTdHJp
bmcgRGF0YVRyYW5zZmVyVVJJTGlzdEl0ZW06OnR5cGUoKSBjb25zdAoreworICAgIHJldHVybiBt
aW1lVHlwZVRleHRVUklMaXN0OworfQorCitTdHJpbmcgRGF0YVRyYW5zZmVySFRNTEl0ZW06Omtp
bmQoKSBjb25zdAoreworICAgIHJldHVybiBEYXRhVHJhbnNmZXJJdGVtOjpraW5kU3RyaW5nOwor
fQorCitTdHJpbmcgRGF0YVRyYW5zZmVySFRNTEl0ZW06OnR5cGUoKSBjb25zdAoreworICAgIHJl
dHVybiBtaW1lVHlwZVRleHRIVE1MOworfQorCitQYXNzUmVmUHRyPEJ1ZmZlcmVkRGF0YVRyYW5z
ZmVyU3RyaW5nSXRlbT4gQnVmZmVyZWREYXRhVHJhbnNmZXJTdHJpbmdJdGVtOjpjcmVhdGUoY29u
c3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpCit7CisgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBCdWZmZXJlZERhdGFUcmFuc2ZlclN0cmluZ0l0ZW0odHlwZSwgZGF0YSkpOworfQor
CitTdHJpbmcgQnVmZmVyZWREYXRhVHJhbnNmZXJTdHJpbmdJdGVtOjpraW5kKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gRGF0YVRyYW5zZmVySXRlbTo6a2luZFN0cmluZzsKK30KKworU3RyaW5nIEJ1
ZmZlcmVkRGF0YVRyYW5zZmVyU3RyaW5nSXRlbTo6dHlwZSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fdHlwZTsKK30KKwordm9pZCBCdWZmZXJlZERhdGFUcmFuc2ZlclN0cmluZ0l0ZW06OmdldEFz
U3RyaW5nKFBhc3NSZWZQdHI8U3RyaW5nQ2FsbGJhY2s+IGNhbGxiYWNrLCBTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0KSBjb25zdAoreworICAgIGNhbGxiYWNrLT5zY2hlZHVsZUNhbGxi
YWNrKGNvbnRleHQsIG1fZGF0YSk7Cit9CisKK1N0cmluZyBCdWZmZXJlZERhdGFUcmFuc2ZlclN0
cmluZ0l0ZW06OmxlZ2FjeUdldEFzU3RyaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kYXRh
OworfQorCitCdWZmZXJlZERhdGFUcmFuc2ZlclN0cmluZ0l0ZW06OkJ1ZmZlcmVkRGF0YVRyYW5z
ZmVyU3RyaW5nSXRlbShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSkKKyAg
ICA6IG1fdHlwZSh0eXBlKQogICAgICwgbV9kYXRhKGRhdGEpCiB7CiB9CiAKLURhdGFUcmFuc2Zl
ckl0ZW1DaHJvbWl1bTo6RGF0YVRyYW5zZmVySXRlbUNocm9taXVtKFBhc3NSZWZQdHI8Q2xpcGJv
YXJkPiBvd25lciwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRGF0YVNvdXJjZSBz
b3VyY2UsIFBhc3NSZWZQdHI8RmlsZT4gZmlsZSkKLSAgICA6IG1fY29udGV4dChjb250ZXh0KQot
ICAgICwgbV9vd25lcihvd25lcikKLSAgICAsIG1fa2luZChraW5kRmlsZSkKLSAgICAsIG1fdHlw
ZShmaWxlLmdldCgpID8gZmlsZS0+dHlwZSgpIDogU3RyaW5nKCkpCi0gICAgLCBtX3NvdXJjZShz
b3VyY2UpCi0gICAgLCBtX2ZpbGUoZmlsZSkKK1Bhc3NSZWZQdHI8QnVmZmVyZWREYXRhVHJhbnNm
ZXJVUklMaXN0SXRlbT4gQnVmZmVyZWREYXRhVHJhbnNmZXJVUklMaXN0SXRlbTo6Y3JlYXRlKGNv
bnN0IFN0cmluZyYgZGF0YSwgY29uc3QgU3RyaW5nJiB0aXRsZSkKK3sKKyAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEJ1ZmZlcmVkRGF0YVRyYW5zZmVyVVJJTGlzdEl0ZW0oZGF0YSwgdGl0bGUpKTsK
K30KKwordm9pZCBCdWZmZXJlZERhdGFUcmFuc2ZlclVSSUxpc3RJdGVtOjpnZXRBc1N0cmluZyhQ
YXNzUmVmUHRyPFN0cmluZ0NhbGxiYWNrPiBjYWxsYmFjaywgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCkgY29uc3QKIHsKKyAgICBjYWxsYmFjay0+c2NoZWR1bGVDYWxsYmFjayhjb250
ZXh0LCBtX2RhdGEpOwogfQogCi12b2lkIERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bTo6Z2V0QXNT
dHJpbmcoUGFzc1JlZlB0cjxTdHJpbmdDYWxsYmFjaz4gY2FsbGJhY2spIGNvbnN0CitTdHJpbmcg
QnVmZmVyZWREYXRhVHJhbnNmZXJVUklMaXN0SXRlbTo6bGVnYWN5R2V0QXNTdHJpbmcoKSBjb25z
dAogewotICAgIGlmICgobV9vd25lci0+cG9saWN5KCkgIT0gQ2xpcGJvYXJkUmVhZGFibGUgJiYg
bV9vd25lci0+cG9saWN5KCkgIT0gQ2xpcGJvYXJkV3JpdGFibGUpCi0gICAgICAgIHx8IGtpbmQo
KSAhPSBraW5kU3RyaW5nKQotICAgICAgICByZXR1cm47CisgICAgcmV0dXJuIG1fZGF0YTsKK30K
IAotICAgIGlmIChjbGlwYm9hcmRDaHJvbWl1bSgpLT5zdG9yYWdlSGFzVXBkYXRlZCgpKQotICAg
ICAgICByZXR1cm47CitTdHJpbmcgQnVmZmVyZWREYXRhVHJhbnNmZXJVUklMaXN0SXRlbTo6dGl0
bGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3RpdGxlOworfQogCi0gICAgaWYgKG1fc291cmNl
ID09IEludGVybmFsU291cmNlKSB7Ci0gICAgICAgIGNhbGxiYWNrLT5zY2hlZHVsZUNhbGxiYWNr
KG1fY29udGV4dCwgbV9kYXRhKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KK3ZvaWQgQnVmZmVy
ZWREYXRhVHJhbnNmZXJVUklMaXN0SXRlbTo6c2V0VGl0bGUoY29uc3QgU3RyaW5nJiB0aXRsZSkK
K3sKKyAgICBtX3RpdGxlID0gdGl0bGU7Cit9CiAKLSAgICBBU1NFUlQobV9zb3VyY2UgPT0gUGFz
dGVib2FyZFNvdXJjZSk7CitCdWZmZXJlZERhdGFUcmFuc2ZlclVSSUxpc3RJdGVtOjpCdWZmZXJl
ZERhdGFUcmFuc2ZlclVSSUxpc3RJdGVtKGNvbnN0IFN0cmluZyYgZGF0YSwgY29uc3QgU3RyaW5n
JiB0aXRsZSkKKyAgICA6IG1fZGF0YShkYXRhKQorICAgICwgbV90aXRsZSh0aXRsZSkKK3sKK30K
IAotICAgIC8vIFRoaXMgaXMgdWdseSBidXQgdGhlcmUncyBubyByZWFsIGFsdGVybmF0aXZlLgot
ICAgIGlmICh0eXBlKCkgPT0gbWltZVR5cGVUZXh0UGxhaW4pIHsKLSAgICAgICAgY2FsbGJhY2st
PnNjaGVkdWxlQ2FsbGJhY2sobV9jb250ZXh0LCBQbGF0Zm9ybVN1cHBvcnQ6OmNsaXBib2FyZFJl
YWRQbGFpblRleHQoY3VycmVudFBhc3RlYm9hcmRCdWZmZXIoKSkpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIGlmICh0eXBlKCkgPT0gbWltZVR5cGVUZXh0SFRNTCkgewotICAgICAgICBT
dHJpbmcgaHRtbDsKLSAgICAgICAgS1VSTCBpZ25vcmVkU291cmNlVVJMOwotICAgICAgICB1bnNp
Z25lZCBpZ25vcmVkOwotICAgICAgICBQbGF0Zm9ybVN1cHBvcnQ6OmNsaXBib2FyZFJlYWRIVE1M
KGN1cnJlbnRQYXN0ZWJvYXJkQnVmZmVyKCksICZodG1sLCAmaWdub3JlZFNvdXJjZVVSTCwgJmln
bm9yZWQsICZpZ25vcmVkKTsKLSAgICAgICAgY2FsbGJhY2stPnNjaGVkdWxlQ2FsbGJhY2sobV9j
b250ZXh0LCBodG1sKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKK1Bhc3NSZWZQdHI8QnVmZmVyZWREYXRhVHJhbnNmZXJIVE1MSXRlbT4gQnVmZmVy
ZWREYXRhVHJhbnNmZXJIVE1MSXRlbTo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgZGF0YSwgY29uc3Qg
S1VSTCYgYmFzZVVSTCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJ1ZmZlcmVkRGF0YVRy
YW5zZmVySFRNTEl0ZW0oZGF0YSwgYmFzZVVSTCkpOwogfQogCi1QYXNzUmVmUHRyPEJsb2I+IERh
dGFUcmFuc2Zlckl0ZW1DaHJvbWl1bTo6Z2V0QXNGaWxlKCkgY29uc3QKK3ZvaWQgQnVmZmVyZWRE
YXRhVHJhbnNmZXJIVE1MSXRlbTo6Z2V0QXNTdHJpbmcoUGFzc1JlZlB0cjxTdHJpbmdDYWxsYmFj
az4gY2FsbGJhY2ssIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpIGNvbnN0CiB7Ci0g
ICAgaWYgKGtpbmQoKSAhPSBraW5kRmlsZSB8fCBjbGlwYm9hcmRDaHJvbWl1bSgpLT5zdG9yYWdl
SGFzVXBkYXRlZCgpKQotICAgICAgICByZXR1cm4gMDsKKyAgICBjYWxsYmFjay0+c2NoZWR1bGVD
YWxsYmFjayhjb250ZXh0LCBtX2RhdGEpOworfQorCitTdHJpbmcgQnVmZmVyZWREYXRhVHJhbnNm
ZXJIVE1MSXRlbTo6bGVnYWN5R2V0QXNTdHJpbmcoKSBjb25zdAoreworICAgIHJldHVybiBtX2Rh
dGE7Cit9CisKK0tVUkwgQnVmZmVyZWREYXRhVHJhbnNmZXJIVE1MSXRlbTo6YmFzZVVSTCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fYmFzZVVSTDsKK30KKwordm9pZCBCdWZmZXJlZERhdGFUcmFu
c2ZlckhUTUxJdGVtOjpzZXRCYXNlVVJMKGNvbnN0IEtVUkwmIGJhc2VVUkwpCit7CisgICAgbV9i
YXNlVVJMID0gYmFzZVVSTDsKK30KKworQnVmZmVyZWREYXRhVHJhbnNmZXJIVE1MSXRlbTo6QnVm
ZmVyZWREYXRhVHJhbnNmZXJIVE1MSXRlbShjb25zdCBTdHJpbmcmIGRhdGEsIGNvbnN0IEtVUkwm
IGJhc2VVUkwpCisgICAgOiBtX2RhdGEoZGF0YSkKKyAgICAsIG1fYmFzZVVSTChiYXNlVVJMKQor
eworfQorCitTdHJpbmcgRGF0YVRyYW5zZmVyRmlsZUl0ZW06OmtpbmQoKSBjb25zdAoreworICAg
IHJldHVybiBEYXRhVHJhbnNmZXJJdGVtOjpraW5kRmlsZTsKK30KKworU3RyaW5nIERhdGFUcmFu
c2ZlckZpbGVJdGVtOjp0eXBlKCkgY29uc3QKK3sKKyAgICAvLyBOb3QgYWxsIGZpbGUtbGlrZSBp
bXBsZW1lbnRhdGlvbnMgY3VycmVudGx5IHJldHVybiBhbiBvYmplY3Qgc28gd2UgaGF2ZSB0byBo
YW5kbGUgdGhlIG51bGwgY2FzZSBhcyB3ZWxsLgorICAgIFJlZlB0cjxCbG9iPiBibG9iID0gZ2V0
QXNGaWxlKCk7CisgICAgcmV0dXJuIGJsb2IgPyBibG9iLT50eXBlKCkgOiBTdHJpbmcoKTsKK30K
KworUGFzc1JlZlB0cjxCdWZmZXJlZERhdGFUcmFuc2ZlckZpbGVuYW1lSXRlbT4gQnVmZmVyZWRE
YXRhVHJhbnNmZXJGaWxlbmFtZUl0ZW06OmNyZWF0ZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lKQor
eworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQnVmZmVyZWREYXRhVHJhbnNmZXJGaWxlbmFtZUl0
ZW0oZmlsZW5hbWUpKTsKK30KKworUGFzc1JlZlB0cjxCbG9iPiBCdWZmZXJlZERhdGFUcmFuc2Zl
ckZpbGVuYW1lSXRlbTo6Z2V0QXNGaWxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gRmlsZTo6Y3Jl
YXRlKG1fZmlsZW5hbWUpOworfQorCitEYXRhVHJhbnNmZXJGaWxlSXRlbTo6U3RvcmFnZVR5cGUg
QnVmZmVyZWREYXRhVHJhbnNmZXJGaWxlbmFtZUl0ZW06OnN0b3JhZ2VUeXBlKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gRmlsZW5hbWVUeXBlOworfQorCitCdWZmZXJlZERhdGFUcmFuc2ZlckZpbGVu
YW1lSXRlbTo6QnVmZmVyZWREYXRhVHJhbnNmZXJGaWxlbmFtZUl0ZW0oY29uc3QgU3RyaW5nJiBm
aWxlbmFtZSkKKyAgICA6IG1fZmlsZW5hbWUoZmlsZW5hbWUpCit7Cit9CisKK1Bhc3NSZWZQdHI8
QnVmZmVyZWREYXRhVHJhbnNmZXJTaGFyZWRCdWZmZXJJdGVtPiBCdWZmZXJlZERhdGFUcmFuc2Zl
clNoYXJlZEJ1ZmZlckl0ZW06OmNyZWF0ZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
ZyYgZXh0ZW5zaW9uLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyKQoreworICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgQnVmZmVyZWREYXRhVHJhbnNmZXJTaGFyZWRCdWZmZXJJdGVtKG5h
bWUsIGV4dGVuc2lvbiwgYnVmZmVyKSk7Cit9CiAKLSAgICBpZiAobV9zb3VyY2UgPT0gSW50ZXJu
YWxTb3VyY2UpCi0gICAgICAgIHJldHVybiBtX2ZpbGU7Ci0KLSAgICBBU1NFUlQobV9zb3VyY2Ug
PT0gUGFzdGVib2FyZFNvdXJjZSk7Ci0gICAgaWYgKHR5cGUoKSA9PSBtaW1lVHlwZUltYWdlUG5n
KSB7Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIHByZXR0eSBpbmVmZmljaWVudC4gV2UgY29w
eSB0aGUgZGF0YSBmcm9tIHRoZSBicm93c2VyCi0gICAgICAgIC8vIHRvIHRoZSByZW5kZXJlci4g
V2UgdGhlbiBwbGFjZSBpdCBpbiBhIGJsb2IgaW4gV2ViS2l0LCB3aGljaAotICAgICAgICAvLyBy
ZWdpc3RlcnMgaXQgYW5kIGNvcGllcyBpdCAqYmFjayogdG8gdGhlIGJyb3dzZXIuIFdoZW4gYSBj
b25zdW1lcgotICAgICAgICAvLyB3YW50cyB0byByZWFkIHRoZSBkYXRhLCB3ZSB0aGVuIGNvcHkg
dGhlIGRhdGEgYmFjayBpbnRvIHRoZSByZW5kZXJlci4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU4MTA3IGhhcyBiZWVuIGZpbGVkIHRvIHRyYWNr
Ci0gICAgICAgIC8vIGltcHJvdmVtZW50cyB0byB0aGlzIGNvZGUgKGluIHBhcnRpY3VsYXIsIGFk
ZCBhIHJlZ2lzdGVyQ2xpcGJvYXJkQmxvYgotICAgICAgICAvLyBtZXRob2QgdG8gdGhlIGJsb2Ig
cmVnaXN0cnk7IHRoYXQgd2F5IHRoZSBkYXRhIGlzIG9ubHkgY29waWVkIG92ZXIKLSAgICAgICAg
Ly8gaW50byB0aGUgcmVuZGVyZXIgd2hlbiBpdCdzIGFjdHVhbGx5IHJlYWQsIG5vdCB3aGVuIHRo
ZSBibG9iIGlzCi0gICAgICAgIC8vIGluaXRpYWxseSBjb25zdHJ1Y3RlZCkuCi0gICAgICAgIFJl
ZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEgPSBQbGF0Zm9ybVN1cHBvcnQ6OmNsaXBib2FyZFJlYWRJ
bWFnZShQYXN0ZWJvYXJkUHJpdmF0ZTo6U3RhbmRhcmRCdWZmZXIpOwotICAgICAgICBSZWZQdHI8
UmF3RGF0YT4gcmF3RGF0YSA9IFJhd0RhdGE6OmNyZWF0ZSgpOwotICAgICAgICByYXdEYXRhLT5t
dXRhYmxlRGF0YSgpLT5hcHBlbmQoZGF0YS0+ZGF0YSgpLCBkYXRhLT5zaXplKCkpOwotICAgICAg
ICBPd25QdHI8QmxvYkRhdGE+IGJsb2JEYXRhID0gQmxvYkRhdGE6OmNyZWF0ZSgpOwotICAgICAg
ICBibG9iRGF0YS0+YXBwZW5kRGF0YShyYXdEYXRhLCAwLCAtMSk7Ci0gICAgICAgIGJsb2JEYXRh
LT5zZXRDb250ZW50VHlwZShtaW1lVHlwZUltYWdlUG5nKTsKLSAgICAgICAgcmV0dXJuIEJsb2I6
OmNyZWF0ZShibG9iRGF0YS5yZWxlYXNlKCksIGRhdGEtPnNpemUoKSk7Ci0gICAgfQorUGFzc1Jl
ZlB0cjxCbG9iPiBCdWZmZXJlZERhdGFUcmFuc2ZlclNoYXJlZEJ1ZmZlckl0ZW06OmdldEFzRmls
ZSgpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IE9ubHkgdXNlZCBmb3IgZGVmYXVsdCBkcmFnIHBy
b2Nlc3Npbmcgd2hlbiBkcmFnZ2luZyBvdXQsIHNvIG5vdCBuZWVkZWQuLi4geWV0LgogICAgIHJl
dHVybiAwOwogfQogCi1DbGlwYm9hcmRDaHJvbWl1bSogRGF0YVRyYW5zZmVySXRlbUNocm9taXVt
OjpjbGlwYm9hcmRDaHJvbWl1bSgpIGNvbnN0CitEYXRhVHJhbnNmZXJGaWxlSXRlbTo6U3RvcmFn
ZVR5cGUgQnVmZmVyZWREYXRhVHJhbnNmZXJTaGFyZWRCdWZmZXJJdGVtOjpzdG9yYWdlVHlwZSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlclR5cGU7Cit9CisKK0J1ZmZlcmVkRGF0
YVRyYW5zZmVyU2hhcmVkQnVmZmVySXRlbTo6QnVmZmVyZWREYXRhVHJhbnNmZXJTaGFyZWRCdWZm
ZXJJdGVtKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHRlbnNpb24sIFBhc3NS
ZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIpCisgICAgOiBtX25hbWUobmFtZSkKKyAgICAsIG1f
ZXh0ZW5zaW9uKGV4dGVuc2lvbikKKyAgICAsIG1fYnVmZmVyKGJ1ZmZlcikKK3sKK30KKworUGFz
c1JlZlB0cjxQYXN0ZWJvYXJkRGF0YVRyYW5zZmVyU3RyaW5nSXRlbT4gUGFzdGVib2FyZERhdGFU
cmFuc2ZlclN0cmluZ0l0ZW06OmNyZWF0ZSgKKyAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJv
YXJkQnVmZmVyIGJ1ZmZlciwgdWludDY0X3Qgc2VxdWVuY2VOdW1iZXIsIGNvbnN0IFN0cmluZyYg
dHlwZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFBhc3RlYm9hcmREYXRhVHJhbnNmZXJT
dHJpbmdJdGVtKGJ1ZmZlciwgc2VxdWVuY2VOdW1iZXIsIHR5cGUpKTsKK30KKworU3RyaW5nIFBh
c3RlYm9hcmREYXRhVHJhbnNmZXJTdHJpbmdJdGVtOjpraW5kKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gRGF0YVRyYW5zZmVySXRlbTo6a2luZFN0cmluZzsKK30KKworU3RyaW5nIFBhc3RlYm9hcmRE
YXRhVHJhbnNmZXJTdHJpbmdJdGVtOjp0eXBlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90eXBl
OworfQorCit2b2lkIFBhc3RlYm9hcmREYXRhVHJhbnNmZXJTdHJpbmdJdGVtOjpnZXRBc1N0cmlu
ZyhQYXNzUmVmUHRyPFN0cmluZ0NhbGxiYWNrPiBjYWxsYmFjaywgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCkgY29uc3QKK3sKKyAgICBjYWxsYmFjay0+c2NoZWR1bGVDYWxsYmFjayhj
b250ZXh0LCBsZWdhY3lHZXRBc1N0cmluZygpKTsKK30KKworU3RyaW5nIFBhc3RlYm9hcmREYXRh
VHJhbnNmZXJTdHJpbmdJdGVtOjpsZWdhY3lHZXRBc1N0cmluZygpIGNvbnN0Cit7CisgICAgaWYg
KHBhc3RlYm9hcmRIYXNDaGFuZ2VkKG1fYnVmZmVyLCBtX3NlcXVlbmNlTnVtYmVyKSkKKyAgICAg
ICAgcmV0dXJuIFN0cmluZygpOworICAgIGlmIChtX3R5cGUgPT0gbWltZVR5cGVUZXh0UGxhaW4p
CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6OmNsaXBib2FyZFJlYWRQbGFpblRleHQo
bV9idWZmZXIpOworICAgIHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6OmNsaXBib2FyZFJlYWRDdXN0
b21EYXRhKG1fYnVmZmVyLCBtX3R5cGUpOworfQorCitQYXN0ZWJvYXJkRGF0YVRyYW5zZmVyU3Ry
aW5nSXRlbTo6UGFzdGVib2FyZERhdGFUcmFuc2ZlclN0cmluZ0l0ZW0oCisgICAgUGFzdGVib2Fy
ZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlciBidWZmZXIsIHVpbnQ2NF90IHNlcXVlbmNlTnVtYmVy
LCBjb25zdCBTdHJpbmcmIHR5cGUpCisgICAgOiBtX2J1ZmZlcihidWZmZXIpCisgICAgLCBtX3Nl
cXVlbmNlTnVtYmVyKHNlcXVlbmNlTnVtYmVyKQorICAgICwgbV90eXBlKHR5cGUpCit7Cit9CisK
K1Bhc3NSZWZQdHI8UGFzdGVib2FyZERhdGFUcmFuc2ZlckhUTUxJdGVtPiBQYXN0ZWJvYXJkRGF0
YVRyYW5zZmVySFRNTEl0ZW06OmNyZWF0ZSgKKyAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJv
YXJkQnVmZmVyIGJ1ZmZlciwgdWludDY0X3Qgc2VxdWVuY2VOdW1iZXIpCit7CisgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBQYXN0ZWJvYXJkRGF0YVRyYW5zZmVySFRNTEl0ZW0oYnVmZmVyLCBzZXF1
ZW5jZU51bWJlcikpOworfQorCit2b2lkIFBhc3RlYm9hcmREYXRhVHJhbnNmZXJIVE1MSXRlbTo6
Z2V0QXNTdHJpbmcoUGFzc1JlZlB0cjxTdHJpbmdDYWxsYmFjaz4gY2FsbGJhY2ssIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAgY2FsbGJhY2stPnNjaGVkdWxl
Q2FsbGJhY2soY29udGV4dCwgbGVnYWN5R2V0QXNTdHJpbmcoKSk7Cit9CisKK1N0cmluZyBQYXN0
ZWJvYXJkRGF0YVRyYW5zZmVySFRNTEl0ZW06OmxlZ2FjeUdldEFzU3RyaW5nKCkgY29uc3QKK3sK
KyAgICBpZiAocGFzdGVib2FyZEhhc0NoYW5nZWQobV9idWZmZXIsIG1fc2VxdWVuY2VOdW1iZXIp
KQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgU3RyaW5nIGh0bWw7CisgICAgS1VSTCBp
Z25vcmVkU291cmNlVVJMOworICAgIHVuc2lnbmVkIGlnbm9yZWQ7CisgICAgUGxhdGZvcm1TdXBw
b3J0OjpjbGlwYm9hcmRSZWFkSFRNTChjdXJyZW50UGFzdGVib2FyZEJ1ZmZlcigpLCAmaHRtbCwg
Jmlnbm9yZWRTb3VyY2VVUkwsICZpZ25vcmVkLCAmaWdub3JlZCk7CisgICAgcmV0dXJuIGh0bWw7
Cit9CisKKy8vIFdlIGRvbid0IGN1cnJlbnRseSB1c2Ugb3Igc3VwcG9ydCB0aGVzZSBvcGVyYXRp
b25zIGZvciBIVE1MIG9uIHRoZSBwYXN0ZWJvYXJkLgorS1VSTCBQYXN0ZWJvYXJkRGF0YVRyYW5z
ZmVySFRNTEl0ZW06OmJhc2VVUkwoKSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIHJldHVybiBLVVJMKCk7Cit9CisKK3ZvaWQgUGFzdGVib2FyZERhdGFUcmFuc2ZlckhU
TUxJdGVtOjpzZXRCYXNlVVJMKGNvbnN0IEtVUkwmKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworfQorCitQYXN0ZWJvYXJkRGF0YVRyYW5zZmVySFRNTEl0ZW06OlBhc3RlYm9hcmREYXRh
VHJhbnNmZXJIVE1MSXRlbSgKKyAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVy
IGJ1ZmZlciwgdWludDY0X3Qgc2VxdWVuY2VOdW1iZXIpCisgICAgOiBtX2J1ZmZlcihidWZmZXIp
CisgICAgLCBtX3NlcXVlbmNlTnVtYmVyKHNlcXVlbmNlTnVtYmVyKQoreworfQorCitQYXNzUmVm
UHRyPFBhc3RlYm9hcmREYXRhVHJhbnNmZXJJbWFnZUl0ZW0+IFBhc3RlYm9hcmREYXRhVHJhbnNm
ZXJJbWFnZUl0ZW06OmNyZWF0ZSgKKyAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVm
ZmVyIGJ1ZmZlciwgdWludDY0X3Qgc2VxdWVuY2VOdW1iZXIpCit7CisgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBQYXN0ZWJvYXJkRGF0YVRyYW5zZmVySW1hZ2VJdGVtKGJ1ZmZlciwgc2VxdWVuY2VO
dW1iZXIpKTsKK30KKworU3RyaW5nIFBhc3RlYm9hcmREYXRhVHJhbnNmZXJJbWFnZUl0ZW06Omtp
bmQoKSBjb25zdAoreworICAgIHJldHVybiBEYXRhVHJhbnNmZXJJdGVtOjpraW5kRmlsZTsKK30K
KworU3RyaW5nIFBhc3RlYm9hcmREYXRhVHJhbnNmZXJJbWFnZUl0ZW06OnR5cGUoKSBjb25zdAor
eworICAgIHJldHVybiBtaW1lVHlwZUltYWdlUG5nOworfQorCitQYXNzUmVmUHRyPEJsb2I+IFBh
c3RlYm9hcmREYXRhVHJhbnNmZXJJbWFnZUl0ZW06OmdldEFzRmlsZSgpIGNvbnN0Cit7CisgICAg
aWYgKHBhc3RlYm9hcmRIYXNDaGFuZ2VkKG1fYnVmZmVyLCBtX3NlcXVlbmNlTnVtYmVyKSkKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgLy8gRklYTUU6IFRoaXMgaXMgcHJldHR5IGluZWZmaWNpZW50
LiBXZSBjb3B5IHRoZSBkYXRhIGZyb20gdGhlIGJyb3dzZXIKKyAgICAvLyB0byB0aGUgcmVuZGVy
ZXIuIFdlIHRoZW4gcGxhY2UgaXQgaW4gYSBibG9iIGluIFdlYktpdCwgd2hpY2gKKyAgICAvLyBy
ZWdpc3RlcnMgaXQgYW5kIGNvcGllcyBpdCAqYmFjayogdG8gdGhlIGJyb3dzZXIuIFdoZW4gYSBj
b25zdW1lcgorICAgIC8vIHdhbnRzIHRvIHJlYWQgdGhlIGRhdGEsIHdlIHRoZW4gY29weSB0aGUg
ZGF0YSBiYWNrIGludG8gdGhlIHJlbmRlcmVyLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD01ODEwNyBoYXMgYmVlbiBmaWxlZCB0byB0cmFjaworICAgIC8v
IGltcHJvdmVtZW50cyB0byB0aGlzIGNvZGUgKGluIHBhcnRpY3VsYXIsIGFkZCBhIHJlZ2lzdGVy
Q2xpcGJvYXJkQmxvYgorICAgIC8vIG1ldGhvZCB0byB0aGUgYmxvYiByZWdpc3RyeTsgdGhhdCB3
YXkgdGhlIGRhdGEgaXMgb25seSBjb3BpZWQgb3ZlcgorICAgIC8vIGludG8gdGhlIHJlbmRlcmVy
IHdoZW4gaXQncyBhY3R1YWxseSByZWFkLCBub3Qgd2hlbiB0aGUgYmxvYiBpcworICAgIC8vIGlu
aXRpYWxseSBjb25zdHJ1Y3RlZCkuCisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSA9IFBs
YXRmb3JtU3VwcG9ydDo6Y2xpcGJvYXJkUmVhZEltYWdlKG1fYnVmZmVyKTsKKyAgICBSZWZQdHI8
UmF3RGF0YT4gcmF3RGF0YSA9IFJhd0RhdGE6OmNyZWF0ZSgpOworICAgIHJhd0RhdGEtPm11dGFi
bGVEYXRhKCktPmFwcGVuZChkYXRhLT5kYXRhKCksIGRhdGEtPnNpemUoKSk7CisgICAgT3duUHRy
PEJsb2JEYXRhPiBibG9iRGF0YSA9IEJsb2JEYXRhOjpjcmVhdGUoKTsKKyAgICBibG9iRGF0YS0+
YXBwZW5kRGF0YShyYXdEYXRhLCAwLCAtMSk7CisgICAgYmxvYkRhdGEtPnNldENvbnRlbnRUeXBl
KG1pbWVUeXBlSW1hZ2VQbmcpOworICAgIHJldHVybiBCbG9iOjpjcmVhdGUoYmxvYkRhdGEucmVs
ZWFzZSgpLCBkYXRhLT5zaXplKCkpOworfQorCitQYXN0ZWJvYXJkRGF0YVRyYW5zZmVySW1hZ2VJ
dGVtOjpQYXN0ZWJvYXJkRGF0YVRyYW5zZmVySW1hZ2VJdGVtKAorICAgIFBhc3RlYm9hcmRQcml2
YXRlOjpDbGlwYm9hcmRCdWZmZXIgYnVmZmVyLCB1aW50NjRfdCBzZXF1ZW5jZU51bWJlcikKKyAg
ICA6IG1fYnVmZmVyKGJ1ZmZlcikKKyAgICAsIG1fc2VxdWVuY2VOdW1iZXIoc2VxdWVuY2VOdW1i
ZXIpCiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PENsaXBib2FyZENocm9taXVtKj4obV9vd25l
ci5nZXQoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRGF0YVRyYW5zZmVySXRlbUNocm9taXVt
LmgKaW5kZXggMmE5MTkwMDZiZjlhNDBjYzc5M2I5MmNmODY4YWE4ZDNkNWE1OTdhNS4uNTZhY2Ix
NjViNDQ4MjExYWQxOGJlOGYwODhlNjM4MzRkODkxOWFhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRGF0YVRyYW5zZmVySXRlbUNocm9taXVtLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRGF0YVRyYW5zZmVySXRlbUNocm9taXVt
LmgKQEAgLTMzLDQ4ICszMywyMTQgQEAKIAogI2lmIEVOQUJMRShEQVRBX1RSQU5TRkVSX0lURU1T
KQogCi0jaW5jbHVkZSAiRGF0YVRyYW5zZmVySXRlbS5oIgorI2luY2x1ZGUgIktVUkwuaCIKKyNp
bmNsdWRlICJQYXN0ZWJvYXJkUHJpdmF0ZS5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgor
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNs
YXNzIENsaXBib2FyZDsKLWNsYXNzIENsaXBib2FyZENocm9taXVtOworY2xhc3MgQmxvYjsKIGNs
YXNzIEZpbGU7CiBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OworY2xhc3MgU3RyaW5nQ2Fs
bGJhY2s7CiAKLWNsYXNzIERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bSA6IHB1YmxpYyBEYXRhVHJh
bnNmZXJJdGVtIHsKKy8vIFRoaXMgaW50ZXJmYWNlIGlzIHNpbWlsYXIgdG8gYnV0IG5vdCBxdWl0
ZSB0aGUgc2FtZSBhcyB0aGUgSURMIGludGVyZmFjZSBzaW5jZSB3ZSBkb24ndCByZXF1aXJlCisv
LyB0aGUgZXhhY3Qgc2FtZSBwYXJhbWV0ZXJzIGZvciBhbGwgdGhlIGZ1bmN0aW9ucywgYW5kIGFs
c28gcmVxdWlyZSBhZGRpdGlvbmFsIG1ldGhvZHMgZm9yCisvLyBzdXBwb3J0aW5nIGxlZ2FjeSBv
cGVyYXRpb25zLgorY2xhc3MgRGF0YVRyYW5zZmVySXRlbUNocm9taXVtIDogcHVibGljIFJlZkNv
dW50ZWQ8RGF0YVRyYW5zZmVySXRlbUNocm9taXVtPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBh
c3NSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUNocm9taXVtPiBjcmVhdGUoUGFzc1JlZlB0cjxDbGlw
Ym9hcmQ+IG93bmVyLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBkYXRh
LCBjb25zdCBTdHJpbmcmIHR5cGUpOwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFUcmFuc2Zl
ckl0ZW1DaHJvbWl1bT4gY3JlYXRlKFBhc3NSZWZQdHI8Q2xpcGJvYXJkPiBvd25lciwgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8RmlsZT4pOwotICAgIHN0YXRpYyBQYXNzUmVm
UHRyPERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bT4gY3JlYXRlRnJvbVBhc3RlYm9hcmQoUGFzc1Jl
ZlB0cjxDbGlwYm9hcmQ+IG93bmVyLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3Ry
aW5nJiB0eXBlKTsKKyAgICB2aXJ0dWFsIH5EYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0oKTsKIAot
ICAgIHZpcnR1YWwgU3RyaW5nIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KLSAgICB2
aXJ0dWFsIFN0cmluZyB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0gICAgdmlydHVh
bCB2b2lkIGdldEFzU3RyaW5nKFBhc3NSZWZQdHI8U3RyaW5nQ2FsbGJhY2s+KSBjb25zdDsKKyAg
ICB2aXJ0dWFsIFN0cmluZyBraW5kKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgU3RyaW5nIHR5
cGUoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0QXNTdHJpbmcoUGFzc1JlZlB0
cjxTdHJpbmdDYWxsYmFjaz4sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKSBjb25zdDsKICAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8QmxvYj4gZ2V0QXNGaWxlKCkgY29uc3Q7CisgICAgLy8gVXNlZCB0
byBpbXBsZW1lbnQgQ2xpcGJvYXJkQ2hyb21pdW06OmdldERhdGEoKSBhbmQgc2VyaWFsaXphdGlv
biBmb3IgdGhlIFdlYktpdCBsYXllci4KKyAgICB2aXJ0dWFsIFN0cmluZyBsZWdhY3lHZXRBc1N0
cmluZygpIGNvbnN0OworfTsKIAotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgRGF0YVRyYW5z
ZmVySXRlbUxpc3RDaHJvbWl1bTsKKy8vIFNwZWNpYWxpemF0aW9ucyBmb3IgZGF0YSBmbGF2b3Jz
IHdpdGggYXNzb2NpYXRlZCBtZXRhZGF0YS4KK2NsYXNzIERhdGFUcmFuc2ZlclVSSUxpc3RJdGVt
IDogcHVibGljIERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bSB7CitwdWJsaWM6CisgICAgdmlydHVh
bCBTdHJpbmcga2luZCgpIGNvbnN0OworICAgIHZpcnR1YWwgU3RyaW5nIHR5cGUoKSBjb25zdDsK
KworICAgIHZpcnR1YWwgU3RyaW5nIHRpdGxlKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBzZXRUaXRsZShjb25zdCBTdHJpbmcmKSA9IDA7Cit9OwogCi0gICAgZW51bSBEYXRhU291cmNl
IHsKLSAgICAgICAgUGFzdGVib2FyZFNvdXJjZSwKLSAgICAgICAgSW50ZXJuYWxTb3VyY2UsCitj
bGFzcyBEYXRhVHJhbnNmZXJIVE1MSXRlbSA6IHB1YmxpYyBEYXRhVHJhbnNmZXJJdGVtQ2hyb21p
dW0geworcHVibGljOgorICAgIHZpcnR1YWwgU3RyaW5nIGtpbmQoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIFN0cmluZyB0eXBlKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIEtVUkwgYmFzZVVSTCgpIGNv
bnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QmFzZVVSTChjb25zdCBLVVJMJikgPSAwOwor
fTsKKworY2xhc3MgRGF0YVRyYW5zZmVyRmlsZUl0ZW0gOiBwdWJsaWMgRGF0YVRyYW5zZmVySXRl
bUNocm9taXVtIHsKK3B1YmxpYzoKKyAgICBlbnVtIFN0b3JhZ2VUeXBlIHsKKyAgICAgICAgRmls
ZW5hbWVUeXBlLAorICAgICAgICBTaGFyZWRCdWZmZXJUeXBlLAogICAgIH07CiAKLSAgICBEYXRh
VHJhbnNmZXJJdGVtQ2hyb21pdW0oUGFzc1JlZlB0cjxDbGlwYm9hcmQ+IG93bmVyLCBTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgRGF0YVNvdXJjZSwgY29uc3QgU3RyaW5nJiBraW5kLCBjb25zdCBT
dHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSk7Ci0gICAgRGF0YVRyYW5zZmVySXRlbUNo
cm9taXVtKFBhc3NSZWZQdHI8Q2xpcGJvYXJkPiBvd25lciwgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIERhdGFTb3VyY2UsIFBhc3NSZWZQdHI8RmlsZT4pOworICAgIHZpcnR1YWwgU3RyaW5nIGtp
bmQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0cmluZyB0eXBlKCkgY29uc3Q7CiAKLSAgICBDbGlw
Ym9hcmRDaHJvbWl1bSogY2xpcGJvYXJkQ2hyb21pdW0oKSBjb25zdDsKKyAgICAvLyBGYWtlIFJU
VEkuCisgICAgdmlydHVhbCBTdG9yYWdlVHlwZSBzdG9yYWdlVHlwZSgpIGNvbnN0ID0gMDsKK307
CisKKy8vIE1lbW9yeS1iYWNrZWQgc3BlY2lhbGl6YXRpb25zLiBVc2VkIGZvciBoYW5kbGluZyBk
cmFncywgZHJvcHMsIGFuZCB3cml0aW5nIHRvIHRoZSBwYXN0ZWJvYXJkLgorY2xhc3MgQnVmZmVy
ZWREYXRhVHJhbnNmZXJTdHJpbmdJdGVtIDogcHVibGljIERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1
bSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QnVmZmVyZWREYXRhVHJhbnNmZXJT
dHJpbmdJdGVtPiBjcmVhdGUoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEp
OworCisgICAgdmlydHVhbCBTdHJpbmcga2luZCgpIGNvbnN0OworICAgIHZpcnR1YWwgU3RyaW5n
IHR5cGUoKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBnZXRBc1N0cmluZyhQYXNzUmVmUHRy
PFN0cmluZ0NhbGxiYWNrPiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopIGNvbnN0OworICAgIHZp
cnR1YWwgU3RyaW5nIGxlZ2FjeUdldEFzU3RyaW5nKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAg
QnVmZmVyZWREYXRhVHJhbnNmZXJTdHJpbmdJdGVtKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3Qg
U3RyaW5nJiBkYXRhKTsKIAotICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIG1fY29udGV4dDsK
LSAgICBjb25zdCBSZWZQdHI8Q2xpcGJvYXJkPiBtX293bmVyOwotICAgIGNvbnN0IFN0cmluZyBt
X2tpbmQ7CiAgICAgY29uc3QgU3RyaW5nIG1fdHlwZTsKLSAgICBjb25zdCBEYXRhU291cmNlIG1f
c291cmNlOwogICAgIGNvbnN0IFN0cmluZyBtX2RhdGE7Ci0gICAgUmVmUHRyPEZpbGU+IG1fZmls
ZTsKK307CisKKy8vIEZJWE1FOiBUaGlzIHJlc3VsdHMgaW4gYSBsb3Qgb2YgZHVwbGljYXRpb24u
IE1heWJlIHdlIGNhbiB1c2UgdmlydHVhbCBpbmhlcml0YW5jZSBhbmQgb3VyIG93bgorLy8gcmVm
KCkvZGVyZWYoKSBtZXRob2RzIHNvIHdlIGNhbiByZXVzZSBEYXRhVHJhbnNmZXJTdHJpbmdJdGVt
LgorLy8gLi4uIGFsdGVybmF0ZWx5LCBzaW5jZSB0aGlzIGlzIG9ubHkgdXNlZCBieSB0aGUgZHJh
Z2dpbmcgY29kZSwganVzdCBpbXBsZW1lbnQgdGhlIHNwZWNpYWxpemF0aW9ucworLy8gZm9yIGRy
YWdnaW5nLgorY2xhc3MgQnVmZmVyZWREYXRhVHJhbnNmZXJVUklMaXN0SXRlbSA6IHB1YmxpYyBE
YXRhVHJhbnNmZXJVUklMaXN0SXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8
QnVmZmVyZWREYXRhVHJhbnNmZXJVUklMaXN0SXRlbT4gY3JlYXRlKGNvbnN0IFN0cmluZyYgZGF0
YSwgY29uc3QgU3RyaW5nJiB0aXRsZSk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0QXNTdHJpbmco
UGFzc1JlZlB0cjxTdHJpbmdDYWxsYmFjaz4sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKSBjb25z
dDsKKyAgICB2aXJ0dWFsIFN0cmluZyBsZWdhY3lHZXRBc1N0cmluZygpIGNvbnN0OworCisgICAg
dmlydHVhbCBTdHJpbmcgdGl0bGUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VGl0bGUo
Y29uc3QgU3RyaW5nJik7CisKK3ByaXZhdGU6CisgICAgQnVmZmVyZWREYXRhVHJhbnNmZXJVUklM
aXN0SXRlbShjb25zdCBTdHJpbmcmIGRhdGEsIGNvbnN0IFN0cmluZyYgdGl0bGUpOworCisgICAg
Y29uc3QgU3RyaW5nIG1fZGF0YTsKKyAgICBTdHJpbmcgbV90aXRsZTsKK307CisKK2NsYXNzIEJ1
ZmZlcmVkRGF0YVRyYW5zZmVySFRNTEl0ZW0gOiBwdWJsaWMgRGF0YVRyYW5zZmVySFRNTEl0ZW0g
eworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJ1ZmZlcmVkRGF0YVRyYW5zZmVySFRN
TEl0ZW0+IGNyZWF0ZShjb25zdCBTdHJpbmcmIGRhdGEsIGNvbnN0IEtVUkwmIGJhc2VVUkwpOwor
CisgICAgdmlydHVhbCB2b2lkIGdldEFzU3RyaW5nKFBhc3NSZWZQdHI8U3RyaW5nQ2FsbGJhY2s+
LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KikgY29uc3Q7CisgICAgdmlydHVhbCBTdHJpbmcgbGVn
YWN5R2V0QXNTdHJpbmcoKSBjb25zdDsKKworICAgIHZpcnR1YWwgS1VSTCBiYXNlVVJMKCkgY29u
c3Q7CisgICAgdmlydHVhbCB2b2lkIHNldEJhc2VVUkwoY29uc3QgS1VSTCYpOworCitwcml2YXRl
OgorICAgIEJ1ZmZlcmVkRGF0YVRyYW5zZmVySFRNTEl0ZW0oY29uc3QgU3RyaW5nJiBkYXRhLCBj
b25zdCBLVVJMJiBiYXNlVVJMKTsKKworICAgIGNvbnN0IFN0cmluZyBtX2RhdGE7CisgICAgS1VS
TCBtX2Jhc2VVUkw7Cit9OworCitjbGFzcyBCdWZmZXJlZERhdGFUcmFuc2ZlckZpbGVuYW1lSXRl
bSA6IHB1YmxpYyBEYXRhVHJhbnNmZXJGaWxlSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8QnVmZmVyZWREYXRhVHJhbnNmZXJGaWxlbmFtZUl0ZW0+IGNyZWF0ZShjb25zdCBT
dHJpbmcmKTsKKworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxCbG9iPiBnZXRBc0ZpbGUoKSBjb25z
dDsKKworICAgIHZpcnR1YWwgU3RvcmFnZVR5cGUgc3RvcmFnZVR5cGUoKSBjb25zdDsKKworICAg
IFN0cmluZyBmaWxlbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsZW5hbWU7IH0KKworcHJpdmF0
ZToKKyAgICBCdWZmZXJlZERhdGFUcmFuc2ZlckZpbGVuYW1lSXRlbShjb25zdCBTdHJpbmcmKTsK
KworICAgIGNvbnN0IFN0cmluZyBtX2ZpbGVuYW1lOworfTsKKworY2xhc3MgQnVmZmVyZWREYXRh
VHJhbnNmZXJTaGFyZWRCdWZmZXJJdGVtIDogcHVibGljIERhdGFUcmFuc2ZlckZpbGVJdGVtIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCdWZmZXJlZERhdGFUcmFuc2ZlclNoYXJl
ZEJ1ZmZlckl0ZW0+IGNyZWF0ZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXh0
ZW5zaW9uLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4pOworCisgICAgdmlydHVhbCBQYXNzUmVm
UHRyPEJsb2I+IGdldEFzRmlsZSgpIGNvbnN0OworCisgICAgdmlydHVhbCBTdG9yYWdlVHlwZSBz
dG9yYWdlVHlwZSgpIGNvbnN0OworCisgICAgU3RyaW5nIG5hbWUoKSBjb25zdCB7IHJldHVybiBt
X25hbWU7IH0KKyAgICBTdHJpbmcgZXh0ZW5zaW9uKCkgY29uc3QgeyByZXR1cm4gbV9leHRlbnNp
b247IH0KKyAgICBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyKCkgY29uc3QgeyByZXR1
cm4gbV9idWZmZXI7IH0KKworcHJpdmF0ZToKKyAgICBCdWZmZXJlZERhdGFUcmFuc2ZlclNoYXJl
ZEJ1ZmZlckl0ZW0oY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4dGVuc2lvbiwg
UGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+KTsKKworICAgIFN0cmluZyBtX25hbWU7CisgICAgU3Ry
aW5nIG1fZXh0ZW5zaW9uOworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1fYnVmZmVyOworfTsK
KworLy8gUGFzdGVib2FyZCBzcGVjaWFsaXphdGlvbnMgdXNlZCB3aGVuIHJlYWRpbmcgZnJvbSB0
aGUgcGFzdGVib2FyZC4KK2NsYXNzIFBhc3RlYm9hcmREYXRhVHJhbnNmZXJTdHJpbmdJdGVtIDog
cHVibGljIERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8UGFzdGVib2FyZERhdGFUcmFuc2ZlclN0cmluZ0l0ZW0+IGNyZWF0ZSgKKyAgICAg
ICAgUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlciwgdWludDY0X3Qgc2VxdWVuY2VO
dW1iZXIsIGNvbnN0IFN0cmluZyYgdHlwZSk7CisKKyAgICB2aXJ0dWFsIFN0cmluZyBraW5kKCkg
Y29uc3Q7CisgICAgdmlydHVhbCBTdHJpbmcgdHlwZSgpIGNvbnN0OworCisgICAgdmlydHVhbCB2
b2lkIGdldEFzU3RyaW5nKFBhc3NSZWZQdHI8U3RyaW5nQ2FsbGJhY2s+LCBTY3JpcHRFeGVjdXRp
b25Db250ZXh0KikgY29uc3Q7CisgICAgdmlydHVhbCBTdHJpbmcgbGVnYWN5R2V0QXNTdHJpbmco
KSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBQYXN0ZWJvYXJkRGF0YVRyYW5zZmVyU3RyaW5nSXRl
bShQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyLCB1aW50NjRfdCBzZXF1ZW5jZU51
bWJlciwgY29uc3QgU3RyaW5nJiB0eXBlKTsKKworICAgIGNvbnN0IFBhc3RlYm9hcmRQcml2YXRl
OjpDbGlwYm9hcmRCdWZmZXIgbV9idWZmZXI7CisgICAgY29uc3QgdWludDY0X3QgbV9zZXF1ZW5j
ZU51bWJlcjsKKyAgICBjb25zdCBTdHJpbmcgbV90eXBlOworfTsKKworY2xhc3MgUGFzdGVib2Fy
ZERhdGFUcmFuc2ZlckhUTUxJdGVtIDogcHVibGljIERhdGFUcmFuc2ZlckhUTUxJdGVtIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxQYXN0ZWJvYXJkRGF0YVRyYW5zZmVySFRNTEl0
ZW0+IGNyZWF0ZSgKKyAgICAgICAgUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlciwg
dWludDY0X3Qgc2VxdWVuY2VOdW1iZXIpOworCisgICAgdmlydHVhbCB2b2lkIGdldEFzU3RyaW5n
KFBhc3NSZWZQdHI8U3RyaW5nQ2FsbGJhY2s+LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KikgY29u
c3Q7CisgICAgdmlydHVhbCBTdHJpbmcgbGVnYWN5R2V0QXNTdHJpbmcoKSBjb25zdDsKKworICAg
IHZpcnR1YWwgS1VSTCBiYXNlVVJMKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldEJhc2VV
UkwoY29uc3QgS1VSTCYpOworCitwcml2YXRlOgorICAgIFBhc3RlYm9hcmREYXRhVHJhbnNmZXJI
VE1MSXRlbShQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyLCB1aW50NjRfdCBzZXF1
ZW5jZU51bWJlcik7CisKKyAgICBjb25zdCBQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVm
ZmVyIG1fYnVmZmVyOworICAgIGNvbnN0IHVpbnQ2NF90IG1fc2VxdWVuY2VOdW1iZXI7Cit9Owor
CitjbGFzcyBQYXN0ZWJvYXJkRGF0YVRyYW5zZmVySW1hZ2VJdGVtIDogcHVibGljIERhdGFUcmFu
c2Zlckl0ZW1DaHJvbWl1bSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8UGFzdGVi
b2FyZERhdGFUcmFuc2ZlckltYWdlSXRlbT4gY3JlYXRlKAorICAgICAgICBQYXN0ZWJvYXJkUHJp
dmF0ZTo6Q2xpcGJvYXJkQnVmZmVyLCB1aW50NjRfdCBzZXF1ZW5jZU51bWJlcik7CisKKyAgICB2
aXJ0dWFsIFN0cmluZyBraW5kKCkgY29uc3Q7CisgICAgdmlydHVhbCBTdHJpbmcgdHlwZSgpIGNv
bnN0OworCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEJsb2I+IGdldEFzRmlsZSgpIGNvbnN0Owor
Citwcml2YXRlOgorICAgIFBhc3RlYm9hcmREYXRhVHJhbnNmZXJJbWFnZUl0ZW0oUGFzdGVib2Fy
ZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlciwgdWludDY0X3Qgc2VxdWVuY2VOdW1iZXIpOworCisg
ICAgY29uc3QgUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlciBtX2J1ZmZlcjsKKyAg
ICBjb25zdCB1aW50NjRfdCBtX3NlcXVlbmNlTnVtYmVyOwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRGF0
YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
aHJvbWl1bS9EYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtLmNwcAppbmRleCA1NmYwYWYwYmQx
OThhYzlkOWM0OGY4MjI0ZmRhNmZiM2ZlNjU0ODVlLi42OTkyMjIzMGQ0M2I4YzY2ZTI4MTgzOTA4
MzgxMTM3ODc3NjNlZDA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9EYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jaHJvbWl1bS9EYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtLmNwcApAQCAt
MzMsMTUyICszMywyMjAgQEAKIAogI2lmIEVOQUJMRShEQVRBX1RSQU5TRkVSX0lURU1TKQogCi0j
aW5jbHVkZSAiQmxvYlVSTC5oIgotI2luY2x1ZGUgIkNocm9taXVtRGF0YU9iamVjdC5oIgotI2lu
Y2x1ZGUgIkNsaXBib2FyZENocm9taXVtLmgiCiAjaW5jbHVkZSAiQ2xpcGJvYXJkTWltZVR5cGVz
LmgiCisjaW5jbHVkZSAiQ2xpcGJvYXJkVXRpbGl0aWVzQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJE
YXRhVHJhbnNmZXJJdGVtLmgiCiAjaW5jbHVkZSAiRGF0YVRyYW5zZmVySXRlbUNocm9taXVtLmgi
CiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkZpbGUuaCIKLSNpbmNsdWRl
ICJLVVJMLmgiCi0jaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgotI2luY2x1ZGUg
IlRocmVhZGFibGVCbG9iUmVnaXN0cnkuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWls
ZGVyLmg+CisjaW5jbHVkZSAiUGFzdGVib2FyZFByaXZhdGUuaCIKKyNpbmNsdWRlICJQbGF0Zm9y
bVN1cHBvcnQuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotUGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtPiBEYXRhVHJhbnNm
ZXJJdGVtTGlzdENocm9taXVtOjpjcmVhdGUoUGFzc1JlZlB0cjxDbGlwYm9hcmQ+IG93bmVyLCBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQorbmFtZXNwYWNlIHsKKworY2xhc3MgQnVm
ZmVyZWREYXRhVHJhbnNmZXJJdGVtTGlzdCA6IHB1YmxpYyBEYXRhVHJhbnNmZXJJdGVtTGlzdENo
cm9taXVtIHsKK3B1YmxpYzoKKyAgICBCdWZmZXJlZERhdGFUcmFuc2Zlckl0ZW1MaXN0KCk7CisK
KyAgICB2aXJ0dWFsIHNpemVfdCBsZW5ndGgoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8RGF0YVRyYW5zZmVySXRlbUNocm9taXVtPiBpdGVtKHVuc2lnbmVkIGxvbmcgaW5kZXgpOwor
ICAgIHZpcnR1YWwgdm9pZCBkZWxldGVJdGVtKHVuc2lnbmVkIGxvbmcgaW5kZXgpOworICAgIHZp
cnR1YWwgdm9pZCBjbGVhcigpOworICAgIHZpcnR1YWwgdm9pZCBhZGQoY29uc3QgU3RyaW5nJiBk
YXRhLCBjb25zdCBTdHJpbmcmIHR5cGUsIEV4Y2VwdGlvbkNvZGUmKTsKKworcHJpdmF0ZToKKyAg
ICB2aXJ0dWFsIHZvaWQgaW50ZXJuYWxBZGRTdHJpbmcoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25z
dCBTdHJpbmcmIGRhdGEpOworICAgIHZpcnR1YWwgdm9pZCBpbnRlcm5hbEFkZFVSTChjb25zdCBT
dHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiB0aXRsZSk7CisgICAgdmlydHVhbCB2b2lkIGludGVy
bmFsQWRkSFRNTChjb25zdCBTdHJpbmcmIG1hcmt1cCwgY29uc3QgS1VSTCYgYmFzZVVSTCk7Cisg
ICAgdmlydHVhbCB2b2lkIGludGVybmFsQWRkRmlsZW5hbWUoY29uc3QgU3RyaW5nJik7CisgICAg
dmlydHVhbCB2b2lkIGludGVybmFsQWRkU2hhcmVkQnVmZmVyKGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgU3RyaW5nJiBleHRlbnNpb24sIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPik7CisKKyAg
ICBWZWN0b3I8UmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bT4gPiBtX2l0ZW1zOworfTsK
KworY2xhc3MgUGFzdGVib2FyZERhdGFUcmFuc2Zlckl0ZW1MaXN0IDogcHVibGljIERhdGFUcmFu
c2Zlckl0ZW1MaXN0Q2hyb21pdW0geworcHVibGljOgorICAgIFBhc3RlYm9hcmREYXRhVHJhbnNm
ZXJJdGVtTGlzdCgpOworCisgICAgdmlydHVhbCBzaXplX3QgbGVuZ3RoKCkgY29uc3Q7CisgICAg
dmlydHVhbCBQYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bT4gaXRlbSh1bnNpZ25l
ZCBsb25nIGluZGV4KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSXRlbSh1bnNpZ25lZCBsb25n
IGluZGV4KTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRk
KGNvbnN0IFN0cmluZyYgZGF0YSwgY29uc3QgU3RyaW5nJiB0eXBlLCBFeGNlcHRpb25Db2RlJik7
CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCB2b2lkIGludGVybmFsQWRkU3RyaW5nKGNvbnN0IFN0
cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKTsKKyAgICB2aXJ0dWFsIHZvaWQgaW50ZXJu
YWxBZGRVUkwoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgdGl0bGUpOworICAgIHZp
cnR1YWwgdm9pZCBpbnRlcm5hbEFkZEhUTUwoY29uc3QgU3RyaW5nJiBtYXJrdXAsIGNvbnN0IEtV
UkwmIGJhc2VVUkwpOworICAgIHZpcnR1YWwgdm9pZCBpbnRlcm5hbEFkZEZpbGVuYW1lKGNvbnN0
IFN0cmluZyYpOworICAgIHZpcnR1YWwgdm9pZCBpbnRlcm5hbEFkZFNoYXJlZEJ1ZmZlcihjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9uLCBQYXNzUmVmUHRyPFNoYXJl
ZEJ1ZmZlcj4pOworCisgICAgY29uc3QgUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZl
ciBtX2J1ZmZlcjsKKyAgICBjb25zdCB1aW50NjRfdCBtX3NlcXVlbmNlTnVtYmVyOworICAgIFZl
Y3RvcjxSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUNocm9taXVtPiA+IG1faXRlbXM7Cit9OworCitC
dWZmZXJlZERhdGFUcmFuc2Zlckl0ZW1MaXN0OjpCdWZmZXJlZERhdGFUcmFuc2Zlckl0ZW1MaXN0
KCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21p
dW0ob3duZXIsIGNvbnRleHQpKTsKIH0KIAotRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bTo6
RGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bShQYXNzUmVmUHRyPENsaXBib2FyZD4gb3duZXIs
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCi0gICAgOiBtX293bmVyKG93bmVyKQot
ICAgICwgbV9jb250ZXh0KGNvbnRleHQpCitzaXplX3QgQnVmZmVyZWREYXRhVHJhbnNmZXJJdGVt
TGlzdDo6bGVuZ3RoKCkgY29uc3QKIHsKLX0KLQotc2l6ZV90IERhdGFUcmFuc2Zlckl0ZW1MaXN0
Q2hyb21pdW06Omxlbmd0aCgpIGNvbnN0Ci17Ci0gICAgaWYgKG1fb3duZXItPnBvbGljeSgpID09
IENsaXBib2FyZE51bWIpCi0gICAgICAgIHJldHVybiAwOwotICAgIGNsaXBib2FyZENocm9taXVt
KCktPm1heVVwZGF0ZUl0ZW1zKG1faXRlbXMpOwogICAgIHJldHVybiBtX2l0ZW1zLnNpemUoKTsK
IH0KIAotUGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtPiBEYXRhVHJhbnNmZXJJdGVtTGlzdENo
cm9taXVtOjppdGVtKHVuc2lnbmVkIGxvbmcgaW5kZXgpCitQYXNzUmVmUHRyPERhdGFUcmFuc2Zl
ckl0ZW1DaHJvbWl1bT4gQnVmZmVyZWREYXRhVHJhbnNmZXJJdGVtTGlzdDo6aXRlbSh1bnNpZ25l
ZCBsb25nIGluZGV4KQogewotICAgIGlmIChtX293bmVyLT5wb2xpY3koKSA9PSBDbGlwYm9hcmRO
dW1iKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGNsaXBib2FyZENocm9taXVtKCktPm1heVVw
ZGF0ZUl0ZW1zKG1faXRlbXMpOwogICAgIGlmIChpbmRleCA+PSBsZW5ndGgoKSkKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgcmV0dXJuIG1faXRlbXNbaW5kZXhdOwogfQogCi12b2lkIERhdGFUcmFu
c2Zlckl0ZW1MaXN0Q2hyb21pdW06OmRlbGV0ZUl0ZW0odW5zaWduZWQgbG9uZyBpbmRleCwgRXhj
ZXB0aW9uQ29kZSYgZWMpCit2b2lkIEJ1ZmZlcmVkRGF0YVRyYW5zZmVySXRlbUxpc3Q6OmRlbGV0
ZUl0ZW0odW5zaWduZWQgbG9uZyBpbmRleCkKIHsKLSAgICBpZiAobV9vd25lci0+cG9saWN5KCkg
IT0gQ2xpcGJvYXJkV3JpdGFibGUpIHsKLSAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNsaXBib2FyZENocm9taXVtKCktPm1heVVw
ZGF0ZUl0ZW1zKG1faXRlbXMpOwogICAgIGlmIChpbmRleCA+PSBsZW5ndGgoKSkKICAgICAgICAg
cmV0dXJuOwotICAgIFJlZlB0cjxEYXRhVHJhbnNmZXJJdGVtPiBpdGVtID0gbV9pdGVtc1tpbmRl
eF07CisgICAgbV9pdGVtcy5yZW1vdmUoaW5kZXgpOworfQogCi0gICAgUmVmUHRyPENocm9taXVt
RGF0YU9iamVjdD4gZGF0YU9iamVjdCA9IGNsaXBib2FyZENocm9taXVtKCktPmRhdGFPYmplY3Qo
KTsKLSAgICBpZiAoIWRhdGFPYmplY3QpCi0gICAgICAgIHJldHVybjsKK3ZvaWQgQnVmZmVyZWRE
YXRhVHJhbnNmZXJJdGVtTGlzdDo6Y2xlYXIoKQoreworICAgIG1faXRlbXMuY2xlYXIoKTsKK30K
IAotICAgIGlmIChpdGVtLT5raW5kKCkgPT0gRGF0YVRyYW5zZmVySXRlbTo6a2luZFN0cmluZykg
ewotICAgICAgICBtX2l0ZW1zLnJlbW92ZShpbmRleCk7Ci0gICAgICAgIGRhdGFPYmplY3QtPmNs
ZWFyRGF0YShpdGVtLT50eXBlKCkpOwotICAgICAgICByZXR1cm47Cit2b2lkIEJ1ZmZlcmVkRGF0
YVRyYW5zZmVySXRlbUxpc3Q6OmFkZChjb25zdCBTdHJpbmcmIGRhdGEsIGNvbnN0IFN0cmluZyYg
dHlwZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgLy8gT25seSBvbmUgJ3N0cmluZycgaXRl
bSB3aXRoIGEgZ2l2ZW4gdHlwZSBpcyBhbGxvd2VkIGluIHRoZSBjb2xsZWN0aW9uLgorICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9pdGVtcy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAo
bV9pdGVtc1tpXS0+dHlwZSgpID09IHR5cGUgJiYgbV9pdGVtc1tpXS0+a2luZCgpID09IERhdGFU
cmFuc2Zlckl0ZW06OmtpbmRTdHJpbmcpIHsKKyAgICAgICAgICAgIGVjID0gTk9UX1NVUFBPUlRF
RF9FUlI7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICB9CiAKLSAgICBBU1NF
UlQoaXRlbS0+a2luZCgpID09IERhdGFUcmFuc2Zlckl0ZW06OmtpbmRGaWxlKTsKLSAgICBSZWZQ
dHI8QmxvYj4gYmxvYiA9IGl0ZW0tPmdldEFzRmlsZSgpOwotICAgIGlmICghYmxvYiB8fCAhYmxv
Yi0+aXNGaWxlKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAodHlwZSA9PSBtaW1lVHlwZVRl
eHRVUklMaXN0KQorICAgICAgICBpbnRlcm5hbEFkZFVSTChkYXRhLCBTdHJpbmcoKSk7CisgICAg
ZWxzZSBpZiAodHlwZSA9PSBtaW1lVHlwZVRleHRIVE1MKQorICAgICAgICBpbnRlcm5hbEFkZEhU
TUwoZGF0YSwgS1VSTCgpKTsKKyAgICBlbHNlCisgICAgICAgIGludGVybmFsQWRkU3RyaW5nKHR5
cGUsIGRhdGEpOworfQogCi0gICAgbV9pdGVtcy5jbGVhcigpOwotICAgIGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBmaWxlbmFtZXMgPSBkYXRhT2JqZWN0LT5maWxlbmFtZXMoKTsKLSAgICBWZWN0b3I8
U3RyaW5nPiBjb3BpZWRGaWxlbmFtZXM7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWxl
bmFtZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKGZpbGVuYW1lc1tpXSAhPSBzdGF0aWNf
Y2FzdDxGaWxlKj4oYmxvYi5nZXQoKSktPnBhdGgoKSkKLSAgICAgICAgICAgIGNvcGllZEZpbGVu
YW1lcy5hcHBlbmQoc3RhdGljX2Nhc3Q8RmlsZSo+KGJsb2IuZ2V0KCkpLT5wYXRoKCkpOwotICAg
IH0KLSAgICBkYXRhT2JqZWN0LT5zZXRGaWxlbmFtZXMoY29waWVkRmlsZW5hbWVzKTsKK3ZvaWQg
QnVmZmVyZWREYXRhVHJhbnNmZXJJdGVtTGlzdDo6aW50ZXJuYWxBZGRTdHJpbmcoY29uc3QgU3Ry
aW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpCit7CisgICAgbV9pdGVtcy5hcHBlbmQoQnVm
ZmVyZWREYXRhVHJhbnNmZXJTdHJpbmdJdGVtOjpjcmVhdGUodHlwZSwgZGF0YSkpOwogfQogCi12
b2lkIERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW06OmNsZWFyKCkKK3ZvaWQgQnVmZmVyZWRE
YXRhVHJhbnNmZXJJdGVtTGlzdDo6aW50ZXJuYWxBZGRVUkwoY29uc3QgU3RyaW5nJiB1cmwsIGNv
bnN0IFN0cmluZyYgdGl0bGUpCiB7Ci0gICAgaWYgKG1fb3duZXItPnBvbGljeSgpICE9IENsaXBi
b2FyZFdyaXRhYmxlKQotICAgICAgICByZXR1cm47CisgICAgbV9pdGVtcy5hcHBlbmQoQnVmZmVy
ZWREYXRhVHJhbnNmZXJVUklMaXN0SXRlbTo6Y3JlYXRlKHVybCwgdGl0bGUpKTsKK30KIAotICAg
IG1faXRlbXMuY2xlYXIoKTsKLSAgICBjbGlwYm9hcmRDaHJvbWl1bSgpLT5jbGVhckFsbERhdGEo
KTsKK3ZvaWQgQnVmZmVyZWREYXRhVHJhbnNmZXJJdGVtTGlzdDo6aW50ZXJuYWxBZGRIVE1MKGNv
bnN0IFN0cmluZyYgbWFya3VwLCBjb25zdCBLVVJMJiBiYXNlVVJMKQoreworICAgIG1faXRlbXMu
YXBwZW5kKEJ1ZmZlcmVkRGF0YVRyYW5zZmVySFRNTEl0ZW06OmNyZWF0ZShtYXJrdXAsIGJhc2VV
UkwpKTsKIH0KIAotdm9pZCBEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtOjphZGQoY29uc3Qg
U3RyaW5nJiBkYXRhLCBjb25zdCBTdHJpbmcmIHR5cGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9p
ZCBCdWZmZXJlZERhdGFUcmFuc2Zlckl0ZW1MaXN0OjppbnRlcm5hbEFkZEZpbGVuYW1lKGNvbnN0
IFN0cmluZyYgZmlsZW5hbWUpCiB7Ci0gICAgaWYgKG1fb3duZXItPnBvbGljeSgpICE9IENsaXBi
b2FyZFdyaXRhYmxlKQotICAgICAgICByZXR1cm47CisgICAgbV9pdGVtcy5hcHBlbmQoQnVmZmVy
ZWREYXRhVHJhbnNmZXJGaWxlbmFtZUl0ZW06OmNyZWF0ZShmaWxlbmFtZSkpOworfQogCi0gICAg
UmVmUHRyPENocm9taXVtRGF0YU9iamVjdD4gZGF0YU9iamVjdCA9IGNsaXBib2FyZENocm9taXVt
KCktPmRhdGFPYmplY3QoKTsKLSAgICBpZiAoIWRhdGFPYmplY3QpCi0gICAgICAgIHJldHVybjsK
K3ZvaWQgQnVmZmVyZWREYXRhVHJhbnNmZXJJdGVtTGlzdDo6aW50ZXJuYWxBZGRTaGFyZWRCdWZm
ZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4dGVuc2lvbiwgUGFzc1JlZlB0
cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlcikKK3sKKyAgICBtX2l0ZW1zLmFwcGVuZChCdWZmZXJlZERh
dGFUcmFuc2ZlclNoYXJlZEJ1ZmZlckl0ZW06OmNyZWF0ZShuYW1lLCBleHRlbnNpb24sIGJ1ZmZl
cikpOworfQogCi0gICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0gICAgZGF0YU9iamVjdC0+Z2V0
RGF0YSh0eXBlLCBzdWNjZXNzKTsKLSAgICBpZiAoc3VjY2VzcykgewotICAgICAgICAvLyBBZGRp
bmcgZGF0YSB3aXRoIHRoZSBzYW1lIHR5cGUgc2hvdWxkIGZhaWwgd2l0aCBOT1RfU1VQUE9SVEVE
X0VSUi4KLSAgICAgICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKLSAgICAgICAgcmV0dXJuOwor
UGFzdGVib2FyZERhdGFUcmFuc2Zlckl0ZW1MaXN0OjpQYXN0ZWJvYXJkRGF0YVRyYW5zZmVySXRl
bUxpc3QoKQorICAgIDogbV9idWZmZXIoY3VycmVudFBhc3RlYm9hcmRCdWZmZXIoKSkKKyAgICAs
IG1fc2VxdWVuY2VOdW1iZXIoUGxhdGZvcm1TdXBwb3J0OjpjbGlwYm9hcmRTZXF1ZW5jZU51bWJl
cihtX2J1ZmZlcikpCit7CisgICAgYm9vbCBpZ25vcmVkOworICAgIEhhc2hTZXQ8U3RyaW5nPiB0
eXBlcyA9IFBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJvYXJkUmVhZEF2YWlsYWJsZVR5cGVzKG1fYnVm
ZmVyLCAmaWdub3JlZCk7CisgICAgZm9yIChIYXNoU2V0PFN0cmluZz46OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gdHlwZXMuYmVnaW4oKTsgaXQgIT0gdHlwZXMuZW5kKCk7ICsraXQpIHsKKyAgICAgICAg
aWYgKCppdCA9PSBtaW1lVHlwZVRleHRIVE1MKQorICAgICAgICAgICAgbV9pdGVtcy5hcHBlbmQo
UGFzdGVib2FyZERhdGFUcmFuc2ZlckhUTUxJdGVtOjpjcmVhdGUobV9idWZmZXIsIG1fc2VxdWVu
Y2VOdW1iZXIpKTsKKyAgICAgICAgZWxzZSBpZiAoKml0ID09IG1pbWVUeXBlSW1hZ2VQbmcpCisg
ICAgICAgICAgICBtX2l0ZW1zLmFwcGVuZChQYXN0ZWJvYXJkRGF0YVRyYW5zZmVySW1hZ2VJdGVt
OjpjcmVhdGUobV9idWZmZXIsIG1fc2VxdWVuY2VOdW1iZXIpKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgbV9pdGVtcy5hcHBlbmQoUGFzdGVib2FyZERhdGFUcmFuc2ZlclN0cmluZ0l0ZW06
OmNyZWF0ZShtX2J1ZmZlciwgbV9zZXF1ZW5jZU51bWJlciwgKml0KSk7CiAgICAgfQorfQogCi0g
ICAgbV9pdGVtcy5jbGVhcigpOwotICAgIGRhdGFPYmplY3QtPnNldERhdGEodHlwZSwgZGF0YSk7
CitzaXplX3QgUGFzdGVib2FyZERhdGFUcmFuc2Zlckl0ZW1MaXN0OjpsZW5ndGgoKSBjb25zdAor
eworICAgIHJldHVybiBwYXN0ZWJvYXJkSGFzQ2hhbmdlZChtX2J1ZmZlciwgbV9zZXF1ZW5jZU51
bWJlcikgPyAwIDogbV9pdGVtcy5zaXplKCk7CiB9CiAKLXZvaWQgRGF0YVRyYW5zZmVySXRlbUxp
c3RDaHJvbWl1bTo6YWRkKFBhc3NSZWZQdHI8RmlsZT4gZmlsZSkKK1Bhc3NSZWZQdHI8RGF0YVRy
YW5zZmVySXRlbUNocm9taXVtPiBQYXN0ZWJvYXJkRGF0YVRyYW5zZmVySXRlbUxpc3Q6Oml0ZW0o
dW5zaWduZWQgbG9uZyBpbmRleCkKIHsKLSAgICBpZiAobV9vd25lci0+cG9saWN5KCkgIT0gQ2xp
cGJvYXJkV3JpdGFibGUgfHwgIWZpbGUpCi0gICAgICAgIHJldHVybjsKKyAgICByZXR1cm4gKGlu
ZGV4ID49IGxlbmd0aCgpIHx8IHBhc3RlYm9hcmRIYXNDaGFuZ2VkKG1fYnVmZmVyLCBtX3NlcXVl
bmNlTnVtYmVyKSkgPyAwIDogbV9pdGVtc1tpbmRleF07Cit9CiAKLSAgICBSZWZQdHI8Q2hyb21p
dW1EYXRhT2JqZWN0PiBkYXRhT2JqZWN0ID0gY2xpcGJvYXJkQ2hyb21pdW0oKS0+ZGF0YU9iamVj
dCgpOwotICAgIGlmICghZGF0YU9iamVjdCkKLSAgICAgICAgcmV0dXJuOwordm9pZCBQYXN0ZWJv
YXJkRGF0YVRyYW5zZmVySXRlbUxpc3Q6OmRlbGV0ZUl0ZW0odW5zaWduZWQgbG9uZyBpbmRleCkK
K3sKKyAgICAvLyBUaGlzIGlzIGEgcmVhZC1vbmx5IGNvbGxlY3Rpb24sIHdlIHNob3VsZCBuZXZl
ciB0cnkgdG8gbXV0YXRlIGl0LgorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQogCi0gICAg
bV9pdGVtcy5jbGVhcigpOwordm9pZCBQYXN0ZWJvYXJkRGF0YVRyYW5zZmVySXRlbUxpc3Q6OmNs
ZWFyKCkKK3sKKyAgICAvLyBUaGlzIGlzIGEgcmVhZC1vbmx5IGNvbGxlY3Rpb24sIHdlIHNob3Vs
ZCBuZXZlciB0cnkgdG8gbXV0YXRlIGl0LgorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQog
Ci0gICAgLy8gVXBkYXRpbmcgZGF0YU9iamVjdCdzIGZpbGVzZXQgc28gdGhhdCB3ZSB3aWxsIGJl
IHNlZWluZyB0aGUgY29uc2lzdGVudCBsaXN0IGV2ZW4gaWYgd2UgcmVjb25zdHJ1Y3QgdGhlIGl0
ZW1zIGxhdGVyLgotICAgIGRhdGFPYmplY3QtPmFkZEZpbGVuYW1lKGZpbGUtPnBhdGgoKSk7Cit2
b2lkIFBhc3RlYm9hcmREYXRhVHJhbnNmZXJJdGVtTGlzdDo6YWRkKGNvbnN0IFN0cmluZyYgZGF0
YSwgY29uc3QgU3RyaW5nJiB0eXBlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICAvLyBUaGlz
IGlzIGEgcmVhZC1vbmx5IGNvbGxlY3Rpb24sIHdlIHNob3VsZCBuZXZlciB0cnkgdG8gbXV0YXRl
IGl0LgorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQogCi0gICAgLy8gRklYTUU6IEFsbG93
IG11bHRpcGxlIGZpbGVzIHRvIGJlIGRyYWdnZWQgb3V0IGF0IG9uY2UgaWYgbW9yZSB0aGFuIG9u
ZSBmaWxlIGlzIGFkZGVkIHRvIHRoZSBzdG9yYWdlLiBGb3Igbm93IHdlIG1hbnVhbGx5IHNldCB1
cCBkcmFnLW91dCBkb3dubG9hZCBVUkwgb25seSBpZiBpdCBoYXMgbm90IGJlZW4gc2V0IHlldC4K
LSAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICBkYXRhT2JqZWN0LT5nZXREYXRhKG1pbWVU
eXBlRG93bmxvYWRVUkwsIHN1Y2Nlc3MpOwotICAgIGlmIChzdWNjZXNzKQotICAgICAgICByZXR1
cm47Cit2b2lkIFBhc3RlYm9hcmREYXRhVHJhbnNmZXJJdGVtTGlzdDo6aW50ZXJuYWxBZGRTdHJp
bmcoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpCit7CisgICAgLy8gVGhp
cyBpcyBhIHJlYWQtb25seSBjb2xsZWN0aW9uLCB3ZSBzaG91bGQgbmV2ZXIgdHJ5IHRvIG11dGF0
ZSBpdC4KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KIAotICAgIEtVUkwgdXJsRm9yRG93
bmxvYWQgPSBCbG9iVVJMOjpjcmVhdGVQdWJsaWNVUkwobV9jb250ZXh0LT5zZWN1cml0eU9yaWdp
bigpKTsKLSAgICBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5OjpyZWdpc3RlckJsb2JVUkwodXJsRm9y
RG93bmxvYWQsIGZpbGUtPnVybCgpKTsKK3ZvaWQgUGFzdGVib2FyZERhdGFUcmFuc2Zlckl0ZW1M
aXN0OjppbnRlcm5hbEFkZFVSTChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiB0aXRs
ZSkKK3sKKyAgICAvLyBUaGlzIGlzIGEgcmVhZC1vbmx5IGNvbGxlY3Rpb24sIHdlIHNob3VsZCBu
ZXZlciB0cnkgdG8gbXV0YXRlIGl0LgorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2
b2lkIFBhc3RlYm9hcmREYXRhVHJhbnNmZXJJdGVtTGlzdDo6aW50ZXJuYWxBZGRIVE1MKGNvbnN0
IFN0cmluZyYgbWFya3VwLCBjb25zdCBLVVJMJiBiYXNlVVJMKQoreworICAgIC8vIFRoaXMgaXMg
YSByZWFkLW9ubHkgY29sbGVjdGlvbiwgd2Ugc2hvdWxkIG5ldmVyIHRyeSB0byBtdXRhdGUgaXQu
CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgUGFzdGVib2FyZERhdGFUcmFu
c2Zlckl0ZW1MaXN0OjppbnRlcm5hbEFkZEZpbGVuYW1lKGNvbnN0IFN0cmluZyYpCit7CisgICAg
Ly8gVGhpcyBpcyBhIHJlYWQtb25seSBjb2xsZWN0aW9uLCB3ZSBzaG91bGQgbmV2ZXIgdHJ5IHRv
IG11dGF0ZSBpdC4KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KIAotICAgIFN0cmluZ0J1
aWxkZXIgZG93bmxvYWRVcmw7Ci0gICAgZG93bmxvYWRVcmwuYXBwZW5kKGZpbGUtPnR5cGUoKSk7
Ci0gICAgZG93bmxvYWRVcmwuYXBwZW5kKCI6Iik7Ci0gICAgZG93bmxvYWRVcmwuYXBwZW5kKGVu
Y29kZVdpdGhVUkxFc2NhcGVTZXF1ZW5jZXMoZmlsZS0+bmFtZSgpKSk7Ci0gICAgZG93bmxvYWRV
cmwuYXBwZW5kKCI6Iik7Ci0gICAgZG93bmxvYWRVcmwuYXBwZW5kKHVybEZvckRvd25sb2FkLnN0
cmluZygpKTsKLSAgICBkYXRhT2JqZWN0LT5zZXREYXRhKG1pbWVUeXBlRG93bmxvYWRVUkwsIGRv
d25sb2FkVXJsLnRvU3RyaW5nKCkpOwordm9pZCBQYXN0ZWJvYXJkRGF0YVRyYW5zZmVySXRlbUxp
c3Q6OmludGVybmFsQWRkU2hhcmVkQnVmZmVyKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYs
IFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPikKK3sKKyAgICAvLyBUaGlzIGlzIGEgcmVhZC1vbmx5
IGNvbGxlY3Rpb24sIHdlIHNob3VsZCBuZXZlciB0cnkgdG8gbXV0YXRlIGl0LgorICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZQorCitQYXNzUmVmUHRyPERhdGFU
cmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0+IERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW06OmNy
ZWF0ZSgpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBCdWZmZXJlZERhdGFUcmFuc2Zlckl0
ZW1MaXN0KCkpOworfQorCitQYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0+
IERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW06OmNyZWF0ZUZyb21QYXN0ZWJvYXJkKCkKK3sK
KyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFBhc3RlYm9hcmREYXRhVHJhbnNmZXJJdGVtTGlzdCgp
KTsKIH0KIAotQ2xpcGJvYXJkQ2hyb21pdW0qIERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW06
OmNsaXBib2FyZENocm9taXVtKCkgY29uc3QKK0RhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW06
On5EYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtKCkKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Q2xpcGJvYXJkQ2hyb21pdW0qPihtX293bmVyLmdldCgpKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0v
RGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y2hyb21pdW0vRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bS5oCmluZGV4IDYxYmQxNjdjNzIz
MjRlNWU1ZTE4Y2U1N2FmZTNhM2EyMDUzNmUyZWQuLmNlZDUzM2RiNDVmZmFiY2M0MjEyZGE3MzMy
MzFiYWY2MTk4MDdmNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9t
aXVtL0RhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jaHJvbWl1bS9EYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtLmgKQEAgLTMzLDQw
ICszMywzNiBAQAogCiAjaWYgRU5BQkxFKERBVEFfVFJBTlNGRVJfSVRFTVMpCiAKLSNpbmNsdWRl
ICJEYXRhVHJhbnNmZXJJdGVtTGlzdC5oIgorI2luY2x1ZGUgIkRhdGFUcmFuc2Zlckl0ZW1DaHJv
bWl1bS5oIgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1j
bGFzcyBDbGlwYm9hcmQ7Ci1jbGFzcyBDbGlwYm9hcmRDaHJvbWl1bTsKLWNsYXNzIEZpbGU7Ci1j
bGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwotCitjbGFzcyBLVVJMOworY2xhc3MgU2hhcmVk
QnVmZmVyOwogdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKIAotY2xhc3MgRGF0YVRyYW5zZmVy
SXRlbUxpc3RDaHJvbWl1bSA6IHB1YmxpYyBEYXRhVHJhbnNmZXJJdGVtTGlzdCB7CitjbGFzcyBE
YXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtIDogcHVibGljIFJlZkNvdW50ZWQ8RGF0YVRyYW5z
ZmVySXRlbUxpc3RDaHJvbWl1bT4gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPERh
dGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0+IGNyZWF0ZShQYXNzUmVmUHRyPENsaXBib2FyZD4s
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRhVHJh
bnNmZXJJdGVtTGlzdENocm9taXVtPiBjcmVhdGUoKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxE
YXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtPiBjcmVhdGVGcm9tUGFzdGVib2FyZCgpOwogCi0g
ICAgdmlydHVhbCBzaXplX3QgbGVuZ3RoKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRy
PERhdGFUcmFuc2Zlckl0ZW0+IGl0ZW0odW5zaWduZWQgbG9uZyBpbmRleCk7Ci0gICAgLy8gRklY
TUU6IEltcGxlbWVudCBWOERhdGFUcmFuc2Zlckl0ZW1MaXN0OjppbmRleGVkUHJvcGVydHlEZWxl
dGVyIHRvIGdldCB0aGlzIGNhbGxlZC4KLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSXRlbSh1bnNp
Z25lZCBsb25nIGluZGV4LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFy
KCk7Ci0gICAgdmlydHVhbCB2b2lkIGFkZChjb25zdCBTdHJpbmcmIGRhdGEsIGNvbnN0IFN0cmlu
ZyYgdHlwZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1YWwgdm9pZCBhZGQoUGFzc1JlZlB0
cjxGaWxlPik7CisgICAgdmlydHVhbCB+RGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bSgpOwog
CisgICAgdmlydHVhbCBzaXplX3QgbGVuZ3RoKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0+IGl0ZW0odW5zaWduZWQgbG9uZyBpbmRl
eCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVJdGVtKHVuc2lnbmVkIGxvbmcgaW5kZXgp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGFk
ZChjb25zdCBTdHJpbmcmIGRhdGEsIGNvbnN0IFN0cmluZyYgdHlwZSwgRXhjZXB0aW9uQ29kZSYp
ID0gMDsKIHByaXZhdGU6Ci0gICAgRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bShQYXNzUmVm
UHRyPENsaXBib2FyZD4sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKLSAgICBDbGlwYm9hcmRD
aHJvbWl1bSogY2xpcGJvYXJkQ2hyb21pdW0oKSBjb25zdDsKKyAgICBmcmllbmQgY2xhc3MgQ2hy
b21pdW1EYXRhT2JqZWN0OwogCi0gICAgUmVmUHRyPENsaXBib2FyZD4gbV9vd25lcjsKLSAgICAv
LyBJbmRpcmVjdGx5IG93bmVkIGJ5IG91ciBwYXJlbnQuCi0gICAgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogbV9jb250ZXh0OwotICAgIC8vIEZJWE1FOiBtX2l0ZW1zIHNob3VsZCBub3QgYmUgbXV0
YWJsZS4gVGhpcyB3aWxsIGJlIGZpeGVkIGJ5IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD03NjU5OAotICAgIG11dGFibGUgVmVjdG9yPFJlZlB0cjxEYXRhVHJhbnNmZXJJ
dGVtPiA+IG1faXRlbXM7CisgICAgdmlydHVhbCB2b2lkIGludGVybmFsQWRkU3RyaW5nKGNvbnN0
IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGludGVybmFsQWRkVVJMKGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHRpdGxlKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGludGVybmFsQWRkSFRNTChjb25zdCBTdHJpbmcmIG1hcmt1
cCwgY29uc3QgS1VSTCYgYmFzZVVSTCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBpbnRlcm5hbEFk
ZEZpbGVuYW1lKGNvbnN0IFN0cmluZyYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgaW50ZXJuYWxB
ZGRTaGFyZWRCdWZmZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4dGVuc2lv
biwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+KSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EcmFn
RGF0YUNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RyYWdE
YXRhQ2hyb21pdW0uY3BwCmluZGV4IDNkOTRhMTliMjViODY4YjBmMGJlMWUwMmU2ZTA5Njk5MWU0
M2I5NGMuLmFjMmNiYmFiMThiNWMyY2MwMzUwZGNjZDlhOTgwMTY0YzViYTU3OTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RyYWdEYXRhQ2hyb21pdW0uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RyYWdEYXRhQ2hyb21pdW0u
Y3BwCkBAIC01NywxMiArNTcsOCBAQCBib29sIERyYWdEYXRhOjpjb250YWluc1VSTChGcmFtZSos
IEZpbGVuYW1lQ29udmVyc2lvblBvbGljeSBmaWxlbmFtZVBvbGljeSkgY29ucwogU3RyaW5nIERy
YWdEYXRhOjphc1VSTChGcmFtZSosIEZpbGVuYW1lQ29udmVyc2lvblBvbGljeSBmaWxlbmFtZVBv
bGljeSwgU3RyaW5nKiB0aXRsZSkgY29uc3QKIHsKICAgICBTdHJpbmcgdXJsOwotICAgIGlmICht
X3BsYXRmb3JtRHJhZ0RhdGEtPnR5cGVzKCkuY29udGFpbnMobWltZVR5cGVUZXh0VVJJTGlzdCkp
IHsKLSAgICAgICAgYm9vbCBpZ25vcmVkU3VjY2VzczsKLSAgICAgICAgdXJsID0gbV9wbGF0Zm9y
bURyYWdEYXRhLT5nZXREYXRhKG1pbWVUeXBlVVJMLCBpZ25vcmVkU3VjY2Vzcyk7Ci0gICAgICAg
IGlmICh0aXRsZSkKLSAgICAgICAgICAgICp0aXRsZSA9IG1fcGxhdGZvcm1EcmFnRGF0YS0+dXJs
VGl0bGUoKTsKLSAgICB9IGVsc2UgaWYgKGZpbGVuYW1lUG9saWN5ID09IENvbnZlcnRGaWxlbmFt
ZXMgJiYgY29udGFpbnNGaWxlcygpKSB7CisgICAgbV9wbGF0Zm9ybURyYWdEYXRhLT5nZXRVUkwo
dXJsLCB0aXRsZSk7CisgICAgaWYgKHVybC5pc0VtcHR5KCkgJiYgZmlsZW5hbWVQb2xpY3kgPT0g
Q29udmVydEZpbGVuYW1lcyAmJiBjb250YWluc0ZpbGVzKCkpIHsKICAgICAgICAgdXJsID0gUGxh
dGZvcm1TdXBwb3J0OjpmaWxlUGF0aFRvVVJMKFBsYXRmb3JtU3VwcG9ydDo6Z2V0QWJzb2x1dGVQ
YXRoKG1fcGxhdGZvcm1EcmFnRGF0YS0+ZmlsZW5hbWVzKClbMF0pKTsKICAgICB9CiAgICAgcmV0
dXJuIHVybDsKQEAgLTE0MSwxMCArMTM3LDExIEBAIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVu
dD4gRHJhZ0RhdGE6OmFzRnJhZ21lbnQoRnJhbWUqIGZyYW1lLCBQYXNzUmVmUHRyPFJhbmdlCiAg
ICAgICAgIC8vICAgIHJldHVybiBmcmFnbWVudDsKICAgICB9CiAKLSAgICBpZiAobV9wbGF0Zm9y
bURyYWdEYXRhLT50eXBlcygpLmNvbnRhaW5zKG1pbWVUeXBlVGV4dEhUTUwpKSB7Ci0gICAgICAg
IGJvb2wgaWdub3JlZFN1Y2Nlc3M7Ci0gICAgICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBm
cmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChmcmFtZS0+ZG9jdW1lbnQoKSwKLSAg
ICAgICAgICAgIG1fcGxhdGZvcm1EcmFnRGF0YS0+Z2V0RGF0YShtaW1lVHlwZVRleHRIVE1MLCBp
Z25vcmVkU3VjY2VzcyksIG1fcGxhdGZvcm1EcmFnRGF0YS0+aHRtbEJhc2VVcmwoKSwgRnJhZ21l
bnRTY3JpcHRpbmdOb3RBbGxvd2VkKTsKKyAgICBTdHJpbmcgbWFya3VwOworICAgIEtVUkwgYmFz
ZVVSTDsKKyAgICBtX3BsYXRmb3JtRHJhZ0RhdGEtPmdldEhUTUwobWFya3VwLCBiYXNlVVJMKTsK
KyAgICBpZiAoIW1hcmt1cC5pc0VtcHR5KCkpIHsKKyAgICAgICAgUmVmUHRyPERvY3VtZW50RnJh
Z21lbnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKGZyYW1lLT5kb2N1bWVu
dCgpLCBtYXJrdXAsIGJhc2VVUkwsIEZyYWdtZW50U2NyaXB0aW5nTm90QWxsb3dlZCk7CiAgICAg
ICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNlKCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJEcmFnRGF0YS5oIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViRHJhZ0RhdGEuaAppbmRleCAxNzEy
MzFlY2EzNGJhNDc3N2Q2YWJlYTQyMzYzYzRkYzk2ZDM5NjY3Li43NDY5OTdjZWRhMjhiMzk5ODQz
OWU0NTdiMmNjN2M2ZmU3M2Y5YmJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9wbGF0Zm9ybS9XZWJEcmFnRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL3BsYXRmb3JtL1dlYkRyYWdEYXRhLmgKQEAgLTMyLDYgKzMyLDcgQEAKICNkZWZp
bmUgV2ViRHJhZ0RhdGFfaAogCiAjaW5jbHVkZSAiV2ViQ29tbW9uLmgiCisjaW5jbHVkZSAiV2Vi
RGF0YS5oIgogI2luY2x1ZGUgIldlYlN0cmluZy5oIgogCiAjaWYgV0VCS0lUX0lNUExFTUVOVEFU
SU9OCkBAIC00MSw3ICs0Miw2IEBAIG5hbWVzcGFjZSBXVEYgeyB0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4gY2xhc3MgUGFzc1JlZlB0cjsgfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotY2xhc3MgV2Vi
RGF0YTsKIGNsYXNzIFdlYkRyYWdEYXRhUHJpdmF0ZTsKIGNsYXNzIFdlYlVSTDsKIHRlbXBsYXRl
IDx0eXBlbmFtZSBUPiBjbGFzcyBXZWJWZWN0b3I7CkBAIC02Niw2ICs2NiwyMyBAQCBwdWJsaWM6
CiAKICAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuICFtX3ByaXZhdGU7IH0KIAorICAg
IHN0cnVjdCBEcmFnRGF0YUl0ZW0geworICAgICAgICBlbnVtIEtpbmQgeworICAgICAgICAgICAg
U1RSSU5HLAorICAgICAgICAgICAgRklMRU5BTUUsCisgICAgICAgICAgICBTSEFSRURfQlVGRkVS
LAorICAgICAgICB9OworICAgICAgICBLaW5kIGtpbmQ7CisgICAgICAgIFdlYlN0cmluZyB0eXBl
OworICAgICAgICBXZWJTdHJpbmcgc3RyaW5nRGF0YTsKKyAgICAgICAgV2ViU3RyaW5nIG1ldGFk
YXRhOworICAgICAgICBXZWJEYXRhIGJpbmFyeURhdGE7CisgICAgfTsKKworICAgIFdFQktJVF9F
WFBPUlQgV2ViVmVjdG9yPERyYWdEYXRhSXRlbT4gaXRlbXMoKSBjb25zdDsKKyAgICBXRUJLSVRf
RVhQT1JUIHZvaWQgc2V0SXRlbXMoY29uc3QgV2ViVmVjdG9yPERyYWdEYXRhSXRlbT4mKTsKKwor
ICAgIC8vIExlZ2FjeSBpbnRlcmZhY2UuIFRvIGJlIHJlbW92ZWQgb25jZSBDaHJvbWl1bSBubyBs
b25nZXIgY2FsbHMgdGhlbS4KICAgICBXRUJLSVRfRVhQT1JUIFdlYlN0cmluZyB1cmwoKSBjb25z
dDsKICAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0VVJMKGNvbnN0IFdlYlVSTCYpOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEcmFnRGF0YS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEcmFnRGF0YS5jcHAKaW5kZXggNWMzMTIzOTE4YWY2
M2ZlODE1NDMzMGZkZmYyNTJhZTcxY2MxZTk0YS4uYmIzNmY4YjlmYzllYTEyZDZlNTEwMDM5YzIw
NTM4ZDRlM2YyMTIxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
RHJhZ0RhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRyYWdEYXRh
LmNwcApAQCAtMzMsNiArMzMsOSBAQAogCiAjaW5jbHVkZSAiQ2hyb21pdW1EYXRhT2JqZWN0Lmgi
CiAjaW5jbHVkZSAiQ2xpcGJvYXJkTWltZVR5cGVzLmgiCisjaW5jbHVkZSAiRGF0YVRyYW5zZmVy
SXRlbS5oIgorI2luY2x1ZGUgIkRhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bS5oIgorI2luY2x1ZGUg
IkRhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0uaCIKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJE
YXRhLmgiCiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViU3RyaW5nLmgiCiAjaW5jbHVkZSAicGxhdGZv
cm0vV2ViVVJMLmgiCkBAIC02NiwxNyArNjksNjQgQEAgdm9pZCBXZWJEcmFnRGF0YTo6YXNzaWdu
KGNvbnN0IFdlYkRyYWdEYXRhJiBvdGhlcikKICAgICBhc3NpZ24ocCk7CiB9CiAKK1dlYlZlY3Rv
cjxXZWJEcmFnRGF0YTo6RHJhZ0RhdGFJdGVtPiBXZWJEcmFnRGF0YTo6aXRlbXMoKSBjb25zdAor
eworICAgIFJlZlB0cjxEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtPiBsaXN0ID0gbV9wcml2
YXRlLT5pdGVtcygpOworICAgIFdlYlZlY3RvcjxEcmFnRGF0YUl0ZW0+IGRhdGEobGlzdC0+bGVu
Z3RoKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGF0YS5zaXplKCk7ICsraSkgewor
ICAgICAgICBSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUNocm9taXVtPiBpdGVtID0gbGlzdC0+aXRl
bShpKTsKKyAgICAgICAgRHJhZ0RhdGFJdGVtJiBkcmFnSXRlbSA9IGRhdGFbaV07CisKKyAgICAg
ICAgaWYgKGl0ZW0tPmtpbmQoKSA9PSBEYXRhVHJhbnNmZXJJdGVtOjpraW5kU3RyaW5nKSB7Cisg
ICAgICAgICAgICBkcmFnSXRlbS5raW5kID0gRHJhZ0RhdGFJdGVtOjpTVFJJTkc7CisgICAgICAg
ICAgICBkcmFnSXRlbS50eXBlID0gaXRlbS0+dHlwZSgpOworICAgICAgICAgICAgZHJhZ0l0ZW0u
c3RyaW5nRGF0YSA9IGl0ZW0tPmxlZ2FjeUdldEFzU3RyaW5nKCk7CisgICAgICAgICAgICBpZiAo
aXRlbS0+dHlwZSgpID09IG1pbWVUeXBlVGV4dFVSSUxpc3QpCisgICAgICAgICAgICAgICAgZHJh
Z0l0ZW0ubWV0YWRhdGEgPSBzdGF0aWNfY2FzdDxEYXRhVHJhbnNmZXJVUklMaXN0SXRlbSo+KGl0
ZW0uZ2V0KCkpLT50aXRsZSgpOworICAgICAgICAgICAgZWxzZSBpZiAoaXRlbS0+dHlwZSgpID09
IG1pbWVUeXBlVGV4dEhUTUwpCisgICAgICAgICAgICAgICAgZHJhZ0l0ZW0ubWV0YWRhdGEgPSBz
dGF0aWNfY2FzdDxEYXRhVHJhbnNmZXJIVE1MSXRlbSo+KGl0ZW0uZ2V0KCkpLT5iYXNlVVJMKCk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBEYXRhVHJhbnNmZXJGaWxlSXRlbSogZmls
ZUl0ZW0gPSBzdGF0aWNfY2FzdDxEYXRhVHJhbnNmZXJGaWxlSXRlbSo+KGl0ZW0uZ2V0KCkpOwor
ICAgICAgICAgICAgaWYgKGZpbGVJdGVtLT5zdG9yYWdlVHlwZSgpID09IERhdGFUcmFuc2ZlckZp
bGVJdGVtOjpTaGFyZWRCdWZmZXJUeXBlKSB7CisgICAgICAgICAgICAgICAgQnVmZmVyZWREYXRh
VHJhbnNmZXJTaGFyZWRCdWZmZXJJdGVtKiBidWZmZXJJdGVtID0gc3RhdGljX2Nhc3Q8QnVmZmVy
ZWREYXRhVHJhbnNmZXJTaGFyZWRCdWZmZXJJdGVtKj4oZmlsZUl0ZW0pOworICAgICAgICAgICAg
ICAgIC8vIEZJWE1FOiBUaGlzIGlzIGFuIGFidXNlIG9mIHRoZXNlIGZpZWxkcy4KKyAgICAgICAg
ICAgICAgICBkcmFnSXRlbS5zdHJpbmdEYXRhID0gYnVmZmVySXRlbS0+bmFtZSgpOworICAgICAg
ICAgICAgICAgIGRyYWdJdGVtLm1ldGFkYXRhID0gYnVmZmVySXRlbS0+ZXh0ZW5zaW9uKCk7Cisg
ICAgICAgICAgICAgICAgZHJhZ0l0ZW0uYmluYXJ5RGF0YSA9IGJ1ZmZlckl0ZW0tPmJ1ZmZlcigp
OworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgY29udGludWU7IC8vIE90aGVy
IHR5cGVzIGFyZW4ndCB5ZXQgc3VwcG9ydGVkIGZvciBkcmFnIG91dC4KKyAgICAgICAgfQorICAg
IH0KKyAgICByZXR1cm4gZGF0YTsKK30KKwordm9pZCBXZWJEcmFnRGF0YTo6c2V0SXRlbXMoY29u
c3QgV2ViVmVjdG9yPERyYWdEYXRhSXRlbT4mIGl0ZW1zKQoreworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKGl0ZW1zW2ldLmtpbmQg
PT0gRHJhZ0RhdGFJdGVtOjpTVFJJTkcpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJcyB0aGVy
ZSBhIGNsZWFuZXIgd2F5IHRvIGRvIHRoaXM/CisgICAgICAgICAgICBpZiAoaXRlbXNbaV0udHlw
ZSA9PSBXZWJTdHJpbmcoU3RyaW5nKG1pbWVUeXBlVGV4dFVSSUxpc3QpKSkKKyAgICAgICAgICAg
ICAgICBtX3ByaXZhdGUtPnNldFVSTChpdGVtc1tpXS5zdHJpbmdEYXRhLCBpdGVtc1tpXS5tZXRh
ZGF0YSk7CisgICAgICAgICAgICBlbHNlIGlmIChpdGVtc1tpXS50eXBlID09IFdlYlN0cmluZyhT
dHJpbmcobWltZVR5cGVUZXh0SFRNTCkpKQorICAgICAgICAgICAgICAgIG1fcHJpdmF0ZS0+c2V0
SFRNTChpdGVtc1tpXS5zdHJpbmdEYXRhLCBLVVJMKEtVUkwoKSwgaXRlbXNbaV0ubWV0YWRhdGEp
KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3ByaXZhdGUtPnNldERhdGEo
aXRlbXNbaV0udHlwZSwgaXRlbXNbaV0uc3RyaW5nRGF0YSk7CisgICAgICAgIH0gZWxzZSBpZiAo
aXRlbXNbaV0ua2luZCA9PSBEcmFnRGF0YUl0ZW06OkZJTEVOQU1FKQorICAgICAgICAgICAgbV9w
cml2YXRlLT5hZGRGaWxlbmFtZShpdGVtc1tpXS5zdHJpbmdEYXRhKTsKKyAgICB9Cit9CisKIFdl
YlN0cmluZyBXZWJEcmFnRGF0YTo6dXJsKCkgY29uc3QKIHsKICAgICBBU1NFUlQoIWlzTnVsbCgp
KTsKICAgICBib29sIGlnbm9yZWRTdWNjZXNzOwotICAgIHJldHVybiBtX3ByaXZhdGUtPmdldERh
dGEobWltZVR5cGVVUkwsIGlnbm9yZWRTdWNjZXNzKTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5n
ZXREYXRhKG1pbWVUeXBlVGV4dFVSSUxpc3QsIGlnbm9yZWRTdWNjZXNzKTsKIH0KIAogdm9pZCBX
ZWJEcmFnRGF0YTo6c2V0VVJMKGNvbnN0IFdlYlVSTCYgdXJsKQogewogICAgIGVuc3VyZU11dGFi
bGUoKTsKLSAgICBtX3ByaXZhdGUtPnNldERhdGEobWltZVR5cGVVUkwsIEtVUkwodXJsKS5zdHJp
bmcoKSk7CisgICAgbV9wcml2YXRlLT5zZXREYXRhKG1pbWVUeXBlVGV4dFVSSUxpc3QsIEtVUkwo
dXJsKS5zdHJpbmcoKSk7CiB9CiAKIFdlYlN0cmluZyBXZWJEcmFnRGF0YTo6dXJsVGl0bGUoKSBj
b25zdApAQCAtMTEzLDcgKzE2Myw3IEBAIFdlYlN0cmluZyBXZWJEcmFnRGF0YTo6ZmlsZUV4dGVu
c2lvbigpIGNvbnN0CiB2b2lkIFdlYkRyYWdEYXRhOjpzZXRGaWxlRXh0ZW5zaW9uKGNvbnN0IFdl
YlN0cmluZyYgZmlsZUV4dGVuc2lvbikKIHsKICAgICBlbnN1cmVNdXRhYmxlKCk7Ci0gICAgbV9w
cml2YXRlLT5zZXRGaWxlRXh0ZW5zaW9uKGZpbGVFeHRlbnNpb24pOworICAgIC8vIFJlbWFpbnMg
Zm9yIGNvbXBhdGliaWxpdHkuIENocm9taXVtIG5ldmVyIHNldHMgdGhlc2UgZmllbGRzIHRvIGEg
bm9uLWVtcHR5IHZhbHVlLgogfQogCiBib29sIFdlYkRyYWdEYXRhOjpjb250YWluc0ZpbGVuYW1l
cygpIGNvbnN0CkBAIC0xMzEsNiArMTgxLDggQEAgdm9pZCBXZWJEcmFnRGF0YTo6ZmlsZW5hbWVz
KFdlYlZlY3RvcjxXZWJTdHJpbmc+JiBmaWxlbmFtZXMpIGNvbnN0CiB2b2lkIFdlYkRyYWdEYXRh
OjpzZXRGaWxlbmFtZXMoY29uc3QgV2ViVmVjdG9yPFdlYlN0cmluZz4mIGZpbGVuYW1lcykKIHsK
ICAgICBlbnN1cmVNdXRhYmxlKCk7CisgICAgLy8gRklYTUU6IFRoaXMgaXNuJ3QgcmVhbGx5IGEg
InNldCIgc28gbXVjaCBhcyBhbiAiYWRkIi4gU2luY2UgdGhpcyBtZXRob2QgaXMgZ29pbmcgYXdh
eSwganN1dAorICAgIC8vIGxlYXZpbmcgaXQgYXMgaXQgaXMuLi4KICAgICBWZWN0b3I8U3RyaW5n
PiBmaWxlbmFtZXNDb3B5OwogICAgIGZpbGVuYW1lc0NvcHkuYXBwZW5kKGZpbGVuYW1lcy5kYXRh
KCksIGZpbGVuYW1lcy5zaXplKCkpOwogICAgIG1fcHJpdmF0ZS0+c2V0RmlsZW5hbWVzKGZpbGVu
YW1lc0NvcHkpOwpAQCAtMTM5LDkgKzE5MSw3IEBAIHZvaWQgV2ViRHJhZ0RhdGE6OnNldEZpbGVu
YW1lcyhjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYgZmlsZW5hbWVzKQogdm9pZCBXZWJEcmFn
RGF0YTo6YXBwZW5kVG9GaWxlbmFtZXMoY29uc3QgV2ViU3RyaW5nJiBmaWxlbmFtZSkKIHsKICAg
ICBlbnN1cmVNdXRhYmxlKCk7Ci0gICAgVmVjdG9yPFN0cmluZz4gZmlsZW5hbWVzID0gbV9wcml2
YXRlLT5maWxlbmFtZXMoKTsKLSAgICBmaWxlbmFtZXMuYXBwZW5kKGZpbGVuYW1lKTsKLSAgICBt
X3ByaXZhdGUtPnNldEZpbGVuYW1lcyhmaWxlbmFtZXMpOworICAgIG1fcHJpdmF0ZS0+YWRkRmls
ZW5hbWUoZmlsZW5hbWUpOwogfQogCiBXZWJTdHJpbmcgV2ViRHJhZ0RhdGE6OnBsYWluVGV4dCgp
IGNvbnN0CkBAIC0xOTEsNyArMjQxLDcgQEAgV2ViU3RyaW5nIFdlYkRyYWdEYXRhOjpmaWxlQ29u
dGVudEZpbGVuYW1lKCkgY29uc3QKIHZvaWQgV2ViRHJhZ0RhdGE6OnNldEZpbGVDb250ZW50Rmls
ZW5hbWUoY29uc3QgV2ViU3RyaW5nJiBmaWxlbmFtZSkKIHsKICAgICBlbnN1cmVNdXRhYmxlKCk7
Ci0gICAgbV9wcml2YXRlLT5zZXRGaWxlQ29udGVudEZpbGVuYW1lKGZpbGVuYW1lKTsKKyAgICAv
LyBSZW1haW5zIGZvciBjb21wYXRpYmlsaXR5LiBDaHJvbWl1bSBuZXZlciBzZXRzIHRoZXNlIGZp
ZWxkcyB0byBhIG5vbi1lbXB0eSB2YWx1ZS4KIH0KIAogV2ViRGF0YSBXZWJEcmFnRGF0YTo6Zmls
ZUNvbnRlbnQoKSBjb25zdApAQCAtMjAzLDE3ICsyNTMsMTYgQEAgV2ViRGF0YSBXZWJEcmFnRGF0
YTo6ZmlsZUNvbnRlbnQoKSBjb25zdAogdm9pZCBXZWJEcmFnRGF0YTo6c2V0RmlsZUNvbnRlbnQo
Y29uc3QgV2ViRGF0YSYgZmlsZUNvbnRlbnQpCiB7CiAgICAgZW5zdXJlTXV0YWJsZSgpOwotICAg
IG1fcHJpdmF0ZS0+c2V0RmlsZUNvbnRlbnQoZmlsZUNvbnRlbnQpOworICAgIC8vIFJlbWFpbnMg
Zm9yIGNvbXBhdGliaWxpdHkuIENocm9taXVtIG5ldmVyIHNldHMgdGhlc2UgZmllbGRzIHRvIGEg
bm9uLWVtcHR5IHZhbHVlLgogfQogCiBXZWJWZWN0b3I8V2ViRHJhZ0RhdGE6OkN1c3RvbURhdGE+
IFdlYkRyYWdEYXRhOjpjdXN0b21EYXRhKCkgY29uc3QKIHsKICAgICBBU1NFUlQoIWlzTnVsbCgp
KTsKICAgICBXZWJWZWN0b3I8Q3VzdG9tRGF0YT4gY3VzdG9tRGF0YShzdGF0aWNfY2FzdDxzaXpl
X3Q+KG1fcHJpdmF0ZS0+Y3VzdG9tRGF0YSgpLnNpemUoKSkpOwotICAgIEhhc2hNYXA8U3RyaW5n
LCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBiZWdpbiA9IG1fcHJpdmF0ZS0+Y3VzdG9tRGF0YSgp
LmJlZ2luKCk7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IG1fcHJpdmF0ZS0+Y3VzdG9tRGF0YSgpLmVuZCgpOworICAgIEhhc2hNYXA8U3RyaW5nLCBT
dHJpbmc+IGRhdGEgPSBtX3ByaXZhdGUtPmN1c3RvbURhdGEoKTsKICAgICBzaXplX3QgaSA9IDA7
Ci0gICAgZm9yIChIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBi
ZWdpbjsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgZm9yIChIYXNoTWFwPFN0cmluZywgU3RyaW5n
Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBkYXRhLmJlZ2luKCk7IGl0ICE9IGRhdGEuZW5kKCk7ICsr
aXQpIHsKICAgICAgICAgQ3VzdG9tRGF0YSBkYXRhID0ge2l0LT5maXJzdCwgaXQtPnNlY29uZH07
CiAgICAgICAgIGN1c3RvbURhdGFbaSsrXSA9IGRhdGE7CiAgICAgfQpAQCAtMjIzLDkgKzI3Miwx
MCBAQCBXZWJWZWN0b3I8V2ViRHJhZ0RhdGE6OkN1c3RvbURhdGE+IFdlYkRyYWdEYXRhOjpjdXN0
b21EYXRhKCkgY29uc3QKIHZvaWQgV2ViRHJhZ0RhdGE6OnNldEN1c3RvbURhdGEoY29uc3QgV2Vi
VmVjdG9yPFdlYkRyYWdEYXRhOjpDdXN0b21EYXRhPiYgY3VzdG9tRGF0YSkKIHsKICAgICBlbnN1
cmVNdXRhYmxlKCk7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIGN1c3RvbURhdGFNYXAg
PSBtX3ByaXZhdGUtPmN1c3RvbURhdGEoKTsKKyAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBj
dXN0b21EYXRhTWFwOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY3VzdG9tRGF0YS5zaXpl
KCk7ICsraSkKICAgICAgICAgY3VzdG9tRGF0YU1hcC5zZXQoY3VzdG9tRGF0YVtpXS50eXBlLCBj
dXN0b21EYXRhW2ldLmRhdGEpOworICAgIG1fcHJpdmF0ZS0+c2V0Q3VzdG9tRGF0YShjdXN0b21E
YXRhTWFwKTsKIH0KIAogV2ViRHJhZ0RhdGE6OldlYkRyYWdEYXRhKGNvbnN0IFdURjo6UGFzc1Jl
ZlB0cjxXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q+JiBkYXRhKQpAQCAtMjQ2LDcgKzI5Niw2
IEBAIFdlYkRyYWdEYXRhOjpvcGVyYXRvciBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6Q2hyb21p
dW1EYXRhT2JqZWN0PigpIGNvbnN0CiAKIHZvaWQgV2ViRHJhZ0RhdGE6OmFzc2lnbihXZWJEcmFn
RGF0YVByaXZhdGUqIHApCiB7Ci0gICAgQVNTRVJUKCFwIHx8IHAtPnN0b3JhZ2VNb2RlKCkgPT0g
Q2hyb21pdW1EYXRhT2JqZWN0OjpCdWZmZXJlZCk7CiAgICAgLy8gcCBpcyBhbHJlYWR5IHJlZidk
IGZvciB1cyBieSB0aGUgY2FsbGVyCiAgICAgaWYgKG1fcHJpdmF0ZSkKICAgICAgICAgbV9wcml2
YXRlLT5kZXJlZigpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>131729</attachid>
            <date>2012-03-13 15:35:04 -0700</date>
            <delta_ts>2012-03-15 16:12:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76598-20120313153503.patch</filename>
            <type>text/plain</type>
            <size>84864</size>
            <attacher name="Daniel Cheng">dcheng</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEwNDk5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmIwODgwNmQ4MTU0N2Uz
ZmQzMDIwZjhiY2RmODFiOGJlM2FhNGUwNi4uZTQ0Yjg5YTlkY2FjN2MzZjllNWFmY2I1ZTRlZGYx
NTI4MGEyMDkzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwOCBAQAorMjAxMi0wMy0xMyAgRGFu
aWVsIENoZW5nICA8ZGNoZW5nQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIFJl
ZmFjdG9yIENsaXBib2FyZENocm9taXVtIGFuZCBEYXRhVHJhbnNmZXJJdGVtTGlzdC9EYXRhVHJh
bnNmZXJJdGVtIHRvIHN1cHBvcnQgSFRNTCBzcGVjCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NjU5OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFdlIG5vIGxvbmdlciBzdG9yZSBkcmFnL2NsaXBib2FyZCBk
YXRhIGluIG5hbWVkIGZpZWxkcy4gV2UgdXNlZCB0byBtYWludGFpbiB0aGUgZGF0YSBzdG9yZQor
ICAgICAgICBsaXN0IHNlcGFyYXRlbHksIHdoaWNoIHJlc3VsdGVkIGluIGEgbG90IG9mIGNvbXBs
aWNhdGVkIGNvZGUgdG8gdHJ5IHRvIG1ha2Ugc3VyZSB0aGF0CisgICAgICAgIENocm9taXVtRGF0
YU9iamVjdCBhbmQgdGhpcyBsaXN0IHN0YXllZCBpbiBzeW5jLiBXZSBub3cganVzdCBzdG9yZSB3
aGF0IGlzIGVzc2VudGlhbGx5IGEKKyAgICAgICAgbGlzdCBNSU1FIHR5cGUvZGF0YSBwYWlycyBk
aXJlY3RseSBpbiBDaHJvbWl1bURhdGFPYmplY3QuIFRoaXMgaGFzIHRoZSBiZW5lZml0IG9mIGxl
dHRpbmcgdXMKKyAgICAgICAgZWFzaWx5IGFkZCB3cml0ZSBzdXBwb3J0IGR1cmluZyBkcmFnc3Rh
cnQvY29weSBvcGVyYXRpb25zIHVzaW5nIERhdGFUcmFuc2Zlckl0ZW1MaXN0LgorCisgICAgICAg
IFRlc3RzOiBmYXN0L2V2ZW50cy9jbGlwYm9hcmQtZGF0YVRyYW5zZmVySXRlbUxpc3QuaHRtbAor
ICAgICAgICAgICAgICAgZmFzdC9ldmVudHMvZHJhZy1kYXRhVHJhbnNmZXJJdGVtTGlzdC5odG1s
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6ZmluZEl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1E
YXRhT2JqZWN0OjpjcmVhdGVGcm9tUGFzdGVib2FyZCk6CisgICAgICAgIChXZWJDb3JlOjpDaHJv
bWl1bURhdGFPYmplY3Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFP
YmplY3Q6OmNvcHkpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjppdGVt
cyk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OmNsZWFyRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OmNsZWFyQWxsKToKKyAgICAgICAg
KFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6Y2xlYXJBbGxFeGNlcHRGaWxlcyk6CisgICAg
ICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OnR5cGVzKToKKyAgICAgICAgKFdlYkNv
cmU6OkNocm9taXVtRGF0YU9iamVjdDo6Z2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDaHJv
bWl1bURhdGFPYmplY3Q6OnNldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRh
T2JqZWN0OjpnZXRVUkwpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0Ojpz
ZXRVUkwpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpnZXRIVE1MKToK
KyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6c2V0SFRNTCk6CisgICAgICAg
IChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OmNvbnRhaW5zRmlsZW5hbWVzKToKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpmaWxl
bmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjphZGRGaWxlbmFt
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OmFkZFNoYXJlZEJ1ZmZl
cik6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OkNocm9taXVtRGF0YU9i
amVjdCk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0Lmg6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENocm9taXVtRGF0YU9iamVjdCk6CisgICAg
ICAgICogcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6bm9ybWFsaXplVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRDaHJv
bWl1bTo6Q2xpcGJvYXJkQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkQ2hy
b21pdW06OmNsZWFyRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRDaHJvbWl1bTo6
Y2xlYXJBbGxEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENocm9taXVtOjpnZXRE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENocm9taXVtOjpzZXREYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENocm9taXVtOjp0eXBlcyk6CisgICAgICAgIChXZWJD
b3JlOjpDbGlwYm9hcmRDaHJvbWl1bTo6ZmlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVJ
bWFnZVRvRGF0YU9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRDaHJvbWl1bTo6
ZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENo
cm9taXVtOjp3cml0ZVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRDaHJvbWl1bTo6
d3JpdGVSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRDaHJvbWl1bTo6d3JpdGVQ
bGFpblRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkQ2hyb21pdW06Omhhc0RhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkQ2hyb21pdW06Oml0ZW1zKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChDbGlwYm9hcmRDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpDbGlw
Ym9hcmRDaHJvbWl1bTo6ZnJhbWUpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0NsaXBi
b2FyZFV0aWxpdGllc0Nocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRVUklM
aXN0VG9VUkwpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21p
dW0vQ2xpcGJvYXJkVXRpbGl0aWVzQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0RhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW06OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW06OmNyZWF0ZUZyb21VUkwpOgor
ICAgICAgICAoV2ViQ29yZTo6RGF0YVRyYW5zZmVySXRlbUNocm9taXVtOjpjcmVhdGVGcm9tSFRN
TCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFUcmFuc2Zlckl0
ZW1DaHJvbWl1bTo6Y3JlYXRlRnJvbVBhc3RlYm9hcmQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0
YVRyYW5zZmVySXRlbUNocm9taXVtOjpEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0pOgorICAgICAg
ICAoV2ViQ29yZTo6RGF0YVRyYW5zZmVySXRlbUNocm9taXVtOjpnZXRBc1N0cmluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW06OmdldEFzRmlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW06OmludGVybmFsR2V0QXNTdHJp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YVRyYW5zZmVySXRlbUNocm9taXVtOjppc0ZpbGVu
YW1lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9EYXRhVHJhbnNmZXJJdGVtQ2hyb21p
dW0uaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoRGF0YVRyYW5zZmVySXRlbUNocm9t
aXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bTo6a2luZCk6
CisgICAgICAgIChXZWJDb3JlOjpEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW06OnR5cGUpOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0YVRyYW5zZmVySXRlbUNocm9taXVtOjpzaGFyZWRCdWZmZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6RGF0YVRyYW5zZmVySXRlbUNocm9taXVtOjp0aXRsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW06OmJhc2VVUkwpOgorICAgICAg
ICAqIHBsYXRmb3JtL2Nocm9taXVtL0RhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bTo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkRhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW06OmNyZWF0ZUZy
b21QYXN0ZWJvYXJkKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0
YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bTo6RGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bSk6
CisgICAgICAgIChXZWJDb3JlOjpEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtOjpsZW5ndGgp
OgorICAgICAgICAoV2ViQ29yZTo6RGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bTo6aXRlbSk6
CisgICAgICAgIChXZWJDb3JlOjpEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtOjpkZWxldGVJ
dGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW06OmNs
ZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW06OmFk
ZCk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtOjppbnRl
cm5hbEFkZFN0cmluZ0l0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6RGF0YVRyYW5zZmVySXRlbUxp
c3RDaHJvbWl1bTo6aW50ZXJuYWxBZGRGaWxlSXRlbSk6CisgICAgICAgICogcGxhdGZvcm0vY2hy
b21pdW0vRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9jaHJvbWl1bS9EcmFnRGF0YUNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRy
YWdEYXRhOjphc1VSTCk6CisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0YTo6YXNQbGFpblRleHQp
OgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmFzRnJhZ21lbnQpOgorCiAyMDEyLTAzLTEy
ICBCcmlhbiBTYWxvbW9uICA8YnNhbG9tb25AZ29vZ2xlLmNvbT4KIAogICAgICAgICBbU2tpYV0g
UmVsZWFzZSBDR0ltYWdlIHVzZWQgdG8gYXBwbHkgY29sb3Igc3BhY2UgY29udmVyc2lvbiB0byBT
a0JpdG1hcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBlOTgxMTFmMzZkYmViMGFlMzkx
ZjNjMmM1NGE0ZDBmNTI2MWE3MWMzLi44MmU3MjAyNzFiM2IwZDMwODU0N2JkYzI0NmI2MGE2N2Zk
YmEwNGU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEy
LTAzLTEzICBEYW5pZWwgQ2hlbmcgIDxkY2hlbmdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtj
aHJvbWl1bV0gUmVmYWN0b3IgQ2xpcGJvYXJkQ2hyb21pdW0gYW5kIERhdGFUcmFuc2Zlckl0ZW1M
aXN0L0RhdGFUcmFuc2Zlckl0ZW0gdG8gc3VwcG9ydCBIVE1MIHNwZWMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2NTk4CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBzcmMvV2ViRHJhZ0RhdGEuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJEcmFnRGF0YTo6aXRlbXMpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJEcmFnRGF0YTo6YWRkSXRlbSk6CisgICAgICAgIChXZWJLaXQ6OldlYkRyYWdEYXRhOjphc3Np
Z24pOgorCiAyMDEyLTAzLTEyICBEYW5hIEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFtjaHJvbWl1bV0gRml4IGNsYW5nIGJ1aWxkIGZvciBDQ09jY2x1c2lvblRyYWNr
ZXIgdGVzdHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0No
cm9taXVtRGF0YU9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9D
aHJvbWl1bURhdGFPYmplY3QuY3BwCmluZGV4IGMxYjdhYTI4MWY5ZGUyMmRmMWIwY2M2OGM1OWEw
OWNkZjc2YjUxYzguLmM1ZDYxNjc4MWUzN2EwZTJlNWQ0OWI0YzkyMzI3ZjZhYTZjMGMyMDEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9i
amVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1E
YXRhT2JqZWN0LmNwcApAQCAtMzMsMjQ4ICszMywxNjggQEAKIAogI2luY2x1ZGUgIkNsaXBib2Fy
ZE1pbWVUeXBlcy5oIgogI2luY2x1ZGUgIkNsaXBib2FyZFV0aWxpdGllc0Nocm9taXVtLmgiCisj
aW5jbHVkZSAiRGF0YVRyYW5zZmVySXRlbS5oIgogI2luY2x1ZGUgIkRhdGFUcmFuc2Zlckl0ZW1M
aXN0Q2hyb21pdW0uaCIKLSNpbmNsdWRlICJQYXN0ZWJvYXJkLmgiCi0jaW5jbHVkZSAiUGxhdGZv
cm1TdXBwb3J0LmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZVBsYWNlaG9sZGVyLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotLy8gUGVyIFJGQyAyNDgzLCB0aGUgbGluZSBzZXBhcmF0b3Ig
Zm9yICJ0ZXh0Ly4uLiIgTUlNRSB0eXBlcyBpcyBDUi1MRi4KLXN0YXRpYyBjaGFyIGNvbnN0KiBj
b25zdCB0ZXh0TUlNRVR5cGVMaW5lU2VwYXJhdG9yID0gIlxyXG4iOwotCi12b2lkIENocm9taXVt
RGF0YU9iamVjdDo6Y2xlYXJEYXRhKGNvbnN0IFN0cmluZyYgdHlwZSkKK3N0YXRpYyBQYXNzUmVm
UHRyPERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bT4gZmluZEl0ZW0oUGFzc1JlZlB0cjxEYXRhVHJh
bnNmZXJJdGVtTGlzdENocm9taXVtPiBpdGVtTGlzdCwgY29uc3QgU3RyaW5nJiB0eXBlKQogewot
ICAgIGlmICh0eXBlID09IG1pbWVUeXBlVGV4dFBsYWluKSB7Ci0gICAgICAgIG1fcGxhaW5UZXh0
ID0gIiI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAodHlwZSA9PSBtaW1lVHlw
ZVVSTCB8fCB0eXBlID09IG1pbWVUeXBlVGV4dFVSSUxpc3QpIHsKLSAgICAgICAgbV91cmlMaXN0
ID0gIiI7Ci0gICAgICAgIG1fdXJsID0gS1VSTCgpOwotICAgICAgICBtX3VybFRpdGxlID0gIiI7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAodHlwZSA9PSBtaW1lVHlwZVRleHRI
VE1MKSB7Ci0gICAgICAgIG1fdGV4dEh0bWwgPSAiIjsKLSAgICAgICAgbV9odG1sQmFzZVVybCA9
IEtVUkwoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICh0eXBlID09IG1pbWVU
eXBlRG93bmxvYWRVUkwpIHsKLSAgICAgICAgbV9kb3dubG9hZE1ldGFkYXRhID0gIiI7Ci0gICAg
ICAgIHJldHVybjsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGl0ZW1MaXN0LT5sZW5ndGgo
KTsgKytpKSB7CisgICAgICAgIGlmIChpdGVtTGlzdC0+aXRlbShpKS0+a2luZCgpID09IERhdGFU
cmFuc2Zlckl0ZW06OmtpbmRTdHJpbmcgJiYgaXRlbUxpc3QtPml0ZW0oaSktPnR5cGUoKSA9PSB0
eXBlKQorICAgICAgICAgICAgcmV0dXJuIGl0ZW1MaXN0LT5pdGVtKGkpOwogICAgIH0KKyAgICBy
ZXR1cm4gMDsKIH0KIAotdm9pZCBDaHJvbWl1bURhdGFPYmplY3Q6OmNsZWFyQWxsKCkKK1Bhc3NS
ZWZQdHI8Q2hyb21pdW1EYXRhT2JqZWN0PiBDaHJvbWl1bURhdGFPYmplY3Q6OmNyZWF0ZUZyb21Q
YXN0ZWJvYXJkKCkKIHsKLSAgICBjbGVhckFsbEV4Y2VwdEZpbGVzKCk7Ci0gICAgbV9maWxlbmFt
ZXMuY2xlYXIoKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IENocm9taXVtRGF0YU9iamVjdChE
YXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtOjpjcmVhdGVGcm9tUGFzdGVib2FyZCgpKSk7CiB9
CiAKLXZvaWQgQ2hyb21pdW1EYXRhT2JqZWN0OjpjbGVhckFsbEV4Y2VwdEZpbGVzKCkKK1Bhc3NS
ZWZQdHI8Q2hyb21pdW1EYXRhT2JqZWN0PiBDaHJvbWl1bURhdGFPYmplY3Q6OmNyZWF0ZSgpCiB7
Ci0gICAgbV91cmxUaXRsZSA9ICIiOwotICAgIG1fdXJsID0gS1VSTCgpOwotICAgIG1fdXJpTGlz
dCA9ICIiOwotICAgIG1fZG93bmxvYWRNZXRhZGF0YSA9ICIiOwotICAgIG1fZmlsZUV4dGVuc2lv
biA9ICIiOwotICAgIG1fcGxhaW5UZXh0ID0gIiI7Ci0gICAgbV90ZXh0SHRtbCA9ICIiOwotICAg
IG1faHRtbEJhc2VVcmwgPSBLVVJMKCk7Ci0gICAgbV9maWxlQ29udGVudEZpbGVuYW1lID0gIiI7
Ci0gICAgaWYgKG1fZmlsZUNvbnRlbnQpCi0gICAgICAgIG1fZmlsZUNvbnRlbnQtPmNsZWFyKCk7
CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDaHJvbWl1bURhdGFPYmplY3QoRGF0YVRyYW5zZmVy
SXRlbUxpc3RDaHJvbWl1bTo6Y3JlYXRlKCkpKTsKIH0KIAotYm9vbCBDaHJvbWl1bURhdGFPYmpl
Y3Q6Omhhc0RhdGEoKSBjb25zdAorUGFzc1JlZlB0cjxDaHJvbWl1bURhdGFPYmplY3Q+IENocm9t
aXVtRGF0YU9iamVjdDo6Y29weSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICFtX3VybC5pc0VtcHR5
KCkKLSAgICAgICAgfHwgIW1fdXJpTGlzdC5pc0VtcHR5KCkKLSAgICAgICAgfHwgIW1fZG93bmxv
YWRNZXRhZGF0YS5pc0VtcHR5KCkKLSAgICAgICAgfHwgIW1fZmlsZUV4dGVuc2lvbi5pc0VtcHR5
KCkKLSAgICAgICAgfHwgIW1fZmlsZW5hbWVzLmlzRW1wdHkoKQotICAgICAgICB8fCAhbV9wbGFp
blRleHQuaXNFbXB0eSgpCi0gICAgICAgIHx8ICFtX3RleHRIdG1sLmlzRW1wdHkoKQotICAgICAg
ICB8fCBtX2ZpbGVDb250ZW50OworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2hyb21pdW1EYXRh
T2JqZWN0KCp0aGlzKSk7CiB9CiAKLUhhc2hTZXQ8U3RyaW5nPiBDaHJvbWl1bURhdGFPYmplY3Q6
OnR5cGVzKCkgY29uc3QKK1Bhc3NSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bT4g
Q2hyb21pdW1EYXRhT2JqZWN0OjppdGVtcygpIGNvbnN0CiB7Ci0gICAgaWYgKG1fc3RvcmFnZU1v
ZGUgPT0gUGFzdGVib2FyZCkgewotICAgICAgICBib29sIGlnbm9yZWRDb250YWluc0ZpbGVuYW1l
czsKLSAgICAgICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJvYXJkUmVhZEF2YWlsYWJs
ZVR5cGVzKGN1cnJlbnRQYXN0ZWJvYXJkQnVmZmVyKCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaWdub3JlZENvbnRhaW5zRmls
ZW5hbWVzKTsKLSAgICB9Ci0KLSAgICBIYXNoU2V0PFN0cmluZz4gcmVzdWx0czsKLQotICAgIGlm
ICghbV9wbGFpblRleHQuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHJlc3VsdHMuYWRkKG1pbWVUeXBl
VGV4dCk7Ci0gICAgICAgIHJlc3VsdHMuYWRkKG1pbWVUeXBlVGV4dFBsYWluKTsKLSAgICB9Ci0K
LSAgICBpZiAoIW1fdXJpTGlzdC5pc0VtcHR5KCkpCi0gICAgICAgIHJlc3VsdHMuYWRkKG1pbWVU
eXBlVGV4dFVSSUxpc3QpOwotCi0gICAgaWYgKCFtX3RleHRIdG1sLmlzRW1wdHkoKSkKLSAgICAg
ICAgcmVzdWx0cy5hZGQobWltZVR5cGVUZXh0SFRNTCk7Ci0KLSAgICBpZiAoIW1fZG93bmxvYWRN
ZXRhZGF0YS5pc0VtcHR5KCkpCi0gICAgICAgIHJlc3VsdHMuYWRkKG1pbWVUeXBlRG93bmxvYWRV
UkwpOwotCi0gICAgZm9yIChIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3I6
OktleXMgaXQgPSBtX2N1c3RvbURhdGEuYmVnaW4oKS5rZXlzKCk7Ci0gICAgICAgICBpdCAhPSBt
X2N1c3RvbURhdGEuZW5kKCkua2V5cygpOyArK2l0KSB7Ci0gICAgICAgIHJlc3VsdHMuYWRkKCpp
dCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdHM7CisgICAgcmV0dXJuIG1faXRlbUxpc3Q7
CiB9CiAKLVN0cmluZyBDaHJvbWl1bURhdGFPYmplY3Q6OmdldERhdGEoY29uc3QgU3RyaW5nJiB0
eXBlLCBib29sJiBzdWNjZXNzKSBjb25zdAordm9pZCBDaHJvbWl1bURhdGFPYmplY3Q6OmNsZWFy
RGF0YShjb25zdCBTdHJpbmcmIHR5cGUpCiB7Ci0gICAgaWYgKHR5cGUgPT0gbWltZVR5cGVUZXh0
UGxhaW4pIHsKLSAgICAgICAgaWYgKG1fc3RvcmFnZU1vZGUgPT0gUGFzdGVib2FyZCkgewotICAg
ICAgICAgICAgU3RyaW5nIHRleHQgPSBQbGF0Zm9ybVN1cHBvcnQ6OmNsaXBib2FyZFJlYWRQbGFp
blRleHQoY3VycmVudFBhc3RlYm9hcmRCdWZmZXIoKSk7Ci0gICAgICAgICAgICBzdWNjZXNzID0g
IXRleHQuaXNFbXB0eSgpOwotICAgICAgICAgICAgcmV0dXJuIHRleHQ7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX2l0ZW1MaXN0LT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgIGlmICht
X2l0ZW1MaXN0LT5pdGVtKGkpLT5raW5kKCkgPT0gRGF0YVRyYW5zZmVySXRlbTo6a2luZFN0cmlu
ZyAmJiBtX2l0ZW1MaXN0LT5pdGVtKGkpLT50eXBlKCkgPT0gdHlwZSkgeworICAgICAgICAgICAg
Ly8gUGVyIHRoZSBzcGVjLCB0eXBlIG11c3QgYmUgdW5pcXVlIGFtb25nIGFsbCBpdGVtcyBvZiBr
aW5kICdzdHJpbmcnLgorICAgICAgICAgICAgbV9pdGVtTGlzdC0+ZGVsZXRlSXRlbShpLCBBU1NF
UlRfTk9fRVhDRVBUSU9OKTsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAg
ICBzdWNjZXNzID0gIW1fcGxhaW5UZXh0LmlzRW1wdHkoKTsKLSAgICAgICAgcmV0dXJuIG1fcGxh
aW5UZXh0OwotICAgIH0KLQotICAgIGlmICh0eXBlID09IG1pbWVUeXBlVVJMKSB7Ci0gICAgICAg
IHN1Y2Nlc3MgPSAhbV91cmlMaXN0LmlzRW1wdHkoKTsKLSAgICAgICAgcmV0dXJuIG1fdXJsLnN0
cmluZygpOwogICAgIH0KK30KIAotICAgIGlmICh0eXBlID09IG1pbWVUeXBlVGV4dFVSSUxpc3Qp
IHsKLSAgICAgICAgc3VjY2VzcyA9ICFtX3VyaUxpc3QuaXNFbXB0eSgpOwotICAgICAgICByZXR1
cm4gbV91cmlMaXN0OwotICAgIH0KK3ZvaWQgQ2hyb21pdW1EYXRhT2JqZWN0OjpjbGVhckFsbCgp
Cit7CisgICAgbV9pdGVtTGlzdC0+Y2xlYXIoKTsKK30KIAotICAgIGlmICh0eXBlID09IG1pbWVU
eXBlVGV4dEhUTUwpIHsKLSAgICAgICAgaWYgKG1fc3RvcmFnZU1vZGUgPT0gUGFzdGVib2FyZCkg
ewotICAgICAgICAgICAgU3RyaW5nIGh0bWxUZXh0OwotICAgICAgICAgICAgS1VSTCBzb3VyY2VV
Ukw7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpZ25vcmVkOwotICAgICAgICAgICAgUGxhdGZvcm1T
dXBwb3J0OjpjbGlwYm9hcmRSZWFkSFRNTChjdXJyZW50UGFzdGVib2FyZEJ1ZmZlcigpLCAmaHRt
bFRleHQsICZzb3VyY2VVUkwsICZpZ25vcmVkLCAmaWdub3JlZCk7Ci0gICAgICAgICAgICBzdWNj
ZXNzID0gIWh0bWxUZXh0LmlzRW1wdHkoKTsKLSAgICAgICAgICAgIHJldHVybiBodG1sVGV4dDsK
K3ZvaWQgQ2hyb21pdW1EYXRhT2JqZWN0OjpjbGVhckFsbEV4Y2VwdEZpbGVzKCkKK3sKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1faXRlbUxpc3QtPmxlbmd0aCgpOyApIHsKKyAgICAgICAg
aWYgKG1faXRlbUxpc3QtPml0ZW0oaSktPmtpbmQoKSA9PSBEYXRhVHJhbnNmZXJJdGVtOjpraW5k
U3RyaW5nKSB7CisgICAgICAgICAgICBtX2l0ZW1MaXN0LT5kZWxldGVJdGVtKGksIEFTU0VSVF9O
T19FWENFUFRJT04pOworICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAg
c3VjY2VzcyA9ICFtX3RleHRIdG1sLmlzRW1wdHkoKTsKLSAgICAgICAgcmV0dXJuIG1fdGV4dEh0
bWw7Ci0gICAgfQotCi0gICAgaWYgKHR5cGUgPT0gbWltZVR5cGVEb3dubG9hZFVSTCkgewotICAg
ICAgICBzdWNjZXNzID0gIW1fZG93bmxvYWRNZXRhZGF0YS5pc0VtcHR5KCk7Ci0gICAgICAgIHJl
dHVybiBtX2Rvd25sb2FkTWV0YWRhdGE7CisgICAgICAgICsraTsKICAgICB9Cit9CiAKLSAgICBp
ZiAobV9zdG9yYWdlTW9kZSA9PSBQYXN0ZWJvYXJkKSB7Ci0gICAgICAgIFN0cmluZyBkYXRhID0g
UGxhdGZvcm1TdXBwb3J0OjpjbGlwYm9hcmRSZWFkQ3VzdG9tRGF0YShjdXJyZW50UGFzdGVib2Fy
ZEJ1ZmZlcigpLCB0eXBlKTsKLSAgICAgICAgc3VjY2VzcyA9ICFkYXRhLmlzRW1wdHkoKTsKLSAg
ICAgICAgcmV0dXJuIGRhdGE7Ci0gICAgfQorSGFzaFNldDxTdHJpbmc+IENocm9taXVtRGF0YU9i
amVjdDo6dHlwZXMoKSBjb25zdAoreworICAgIEhhc2hTZXQ8U3RyaW5nPiByZXN1bHRzOworICAg
IGJvb2wgY29udGFpbnNGaWxlcyA9IGZhbHNlOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV9pdGVtTGlzdC0+bGVuZ3RoKCk7ICsraSkgeworICAgICAgICBpZiAobV9pdGVtTGlzdC0+aXRl
bShpKS0+a2luZCgpID09IERhdGFUcmFuc2Zlckl0ZW06OmtpbmRTdHJpbmcpCisgICAgICAgICAg
ICByZXN1bHRzLmFkZChtX2l0ZW1MaXN0LT5pdGVtKGkpLT50eXBlKCkpOworICAgICAgICBlbHNl
IGlmIChtX2l0ZW1MaXN0LT5pdGVtKGkpLT5raW5kKCkgPT0gRGF0YVRyYW5zZmVySXRlbTo6a2lu
ZEZpbGUpCisgICAgICAgICAgICBjb250YWluc0ZpbGVzID0gdHJ1ZTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIGlmIChjb250YWlu
c0ZpbGVzKQorICAgICAgICByZXN1bHRzLmFkZChtaW1lVHlwZUZpbGVzKTsKKyAgICByZXR1cm4g
cmVzdWx0czsKK30KIAotICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fY3VzdG9tRGF0YS5maW5kKHR5cGUpOwotICAgIGlmIChpdCAhPSBtX2N1c3RvbURh
dGEuZW5kKCkpIHsKLSAgICAgICAgc3VjY2VzcyA9IHRydWU7Ci0gICAgICAgIHJldHVybiBpdC0+
c2Vjb25kOworU3RyaW5nIENocm9taXVtRGF0YU9iamVjdDo6Z2V0RGF0YShjb25zdCBTdHJpbmcm
IHR5cGUpIGNvbnN0Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2l0ZW1MaXN0LT5s
ZW5ndGgoKTsgKytpKSAgeworICAgICAgICBpZiAobV9pdGVtTGlzdC0+aXRlbShpKS0+a2luZCgp
ID09IERhdGFUcmFuc2Zlckl0ZW06OmtpbmRTdHJpbmcgJiYgbV9pdGVtTGlzdC0+aXRlbShpKS0+
dHlwZSgpID09IHR5cGUpCisgICAgICAgICAgICByZXR1cm4gbV9pdGVtTGlzdC0+aXRlbShpKS0+
aW50ZXJuYWxHZXRBc1N0cmluZygpOwogICAgIH0KLQotICAgIHN1Y2Nlc3MgPSBmYWxzZTsKICAg
ICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKIGJvb2wgQ2hyb21pdW1EYXRhT2JqZWN0OjpzZXREYXRh
KGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKQogewotICAgIGlmICh0eXBl
ID09IG1pbWVUeXBlVGV4dFBsYWluKSB7Ci0gICAgICAgIG1fcGxhaW5UZXh0ID0gZGF0YTsKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKHR5cGUgPT0gbWltZVR5cGVVUkwg
fHwgdHlwZSA9PSBtaW1lVHlwZVRleHRVUklMaXN0KSB7Ci0gICAgICAgIG1fdXJsID0gS1VSTCgp
OwotICAgICAgICBWZWN0b3I8U3RyaW5nPiB1cmlMaXN0OwotICAgICAgICAvLyBMaW5lIHNlcGFy
YXRvciBpcyBcclxuIHBlciBSRkMgMjQ4MyAtIGhvd2V2ZXIsIGZvciBjb21wYXRpYmlsaXR5Ci0g
ICAgICAgIC8vIHJlYXNvbnMgd2UgYWxzbyBhbGxvdyBqdXN0IFxuIGhlcmUuCi0gICAgICAgIGRh
dGEuc3BsaXQoJ1xuJywgdXJpTGlzdCk7Ci0gICAgICAgIC8vIFByb2Nlc3MgdGhlIGlucHV0IGFu
ZCBjb3B5IHRoZSBmaXJzdCB2YWxpZCBVUkwgaW50byB0aGUgdXJsIG1lbWJlci4KLSAgICAgICAg
Ly8gSW4gY2FzZSBubyBVUkxzIGNhbiBiZSBmb3VuZCwgc3Vic2VxdWVudCBjYWxscyB0byBnZXRE
YXRhKCJVUkwiKQotICAgICAgICAvLyB3aWxsIGdldCBhbiBlbXB0eSBzdHJpbmcuIFRoaXMgaXMg
aW4gbGluZSB3aXRoIHRoZSBIVE1MNSBzcGVjIChzZWUKLSAgICAgICAgLy8gIlRoZSBEcmFnRXZl
bnQgYW5kIERhdGFUcmFuc2ZlciBpbnRlcmZhY2VzIikuCi0gICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgdXJpTGlzdC5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgU3RyaW5nJiBsaW5l
ID0gdXJpTGlzdFtpXTsKLSAgICAgICAgICAgIGxpbmUgPSBsaW5lLnN0cmlwV2hpdGVTcGFjZSgp
OwotICAgICAgICAgICAgaWYgKGxpbmUuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobGluZVswXSA9PSAnIycpCi0g
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBLVVJMIHVybCA9IEtVUkwoUGFy
c2VkVVJMU3RyaW5nLCBsaW5lKTsKLSAgICAgICAgICAgIGlmICh1cmwuaXNWYWxpZCgpKSB7Ci0g
ICAgICAgICAgICAgICAgbV91cmwgPSB1cmw7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgbV91cmlMaXN0ID0gZGF0YTsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQorICAgIGNsZWFyRGF0YSh0eXBlKTsKKyAgICBtX2l0ZW1MaXN0
LT5hZGQoZGF0YSwgdHlwZSwgQVNTRVJUX05PX0VYQ0VQVElPTik7CisgICAgcmV0dXJuIHRydWU7
Cit9CiAKLSAgICBpZiAodHlwZSA9PSBtaW1lVHlwZVRleHRIVE1MKSB7Ci0gICAgICAgIG1fdGV4
dEh0bWwgPSBkYXRhOwotICAgICAgICBtX2h0bWxCYXNlVXJsID0gS1VSTCgpOwotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Cit2b2lkIENocm9taXVtRGF0YU9iamVjdDo6Z2V0VVJMKFN0cmlu
ZyYgdXJsLCBTdHJpbmcqIHRpdGxlKSBjb25zdAoreworICAgIFJlZlB0cjxEYXRhVHJhbnNmZXJJ
dGVtQ2hyb21pdW0+IGl0ZW0gPSBmaW5kSXRlbShtX2l0ZW1MaXN0LCBtaW1lVHlwZVRleHRVUklM
aXN0KTsKKyAgICBpZiAoIWl0ZW0pCisgICAgICAgIHJldHVybjsKKyAgICB1cmwgPSBjb252ZXJ0
VVJJTGlzdFRvVVJMKGl0ZW0tPmludGVybmFsR2V0QXNTdHJpbmcoKSk7CisgICAgaWYgKHRpdGxl
KQorICAgICAgICAqdGl0bGUgPSBpdGVtLT50aXRsZSgpOworfQogCi0gICAgaWYgKHR5cGUgPT0g
bWltZVR5cGVEb3dubG9hZFVSTCkgewotICAgICAgICBtX2Rvd25sb2FkTWV0YWRhdGEgPSBkYXRh
OwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Cit2b2lkIENocm9taXVtRGF0YU9iamVjdDo6
c2V0VVJMKGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHRpdGxlKQoreworICAgIGNs
ZWFyRGF0YShtaW1lVHlwZVRleHRVUklMaXN0KTsKKyAgICBtX2l0ZW1MaXN0LT5pbnRlcm5hbEFk
ZFN0cmluZ0l0ZW0oRGF0YVRyYW5zZmVySXRlbUNocm9taXVtOjpjcmVhdGVGcm9tVVJMKHVybCwg
dGl0bGUpKTsKK30KIAotICAgIGlmICh0eXBlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwordm9pZCBDaHJvbWl1bURhdGFPYmplY3Q6OmdldEhUTUwoU3RyaW5nJiBodG1sLCBLVVJM
JiBiYXNlVVJMKSBjb25zdAoreworICAgIFJlZlB0cjxEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0+
IGl0ZW0gPSBmaW5kSXRlbShtX2l0ZW1MaXN0LCBtaW1lVHlwZVRleHRIVE1MKTsKKyAgICBpZiAo
IWl0ZW0pCisgICAgICAgIHJldHVybjsKKyAgICBodG1sID0gaXRlbS0+aW50ZXJuYWxHZXRBc1N0
cmluZygpOworICAgIGJhc2VVUkwgPSBpdGVtLT5iYXNlVVJMKCk7Cit9CiAKLSAgICBtX2N1c3Rv
bURhdGEuc2V0KHR5cGUsIGRhdGEpOwotICAgIHJldHVybiB0cnVlOwordm9pZCBDaHJvbWl1bURh
dGFPYmplY3Q6OnNldEhUTUwoY29uc3QgU3RyaW5nJiBodG1sLCBjb25zdCBLVVJMJiBiYXNlVVJM
KQoreworICAgIGNsZWFyRGF0YShtaW1lVHlwZVRleHRIVE1MKTsKKyAgICBtX2l0ZW1MaXN0LT5p
bnRlcm5hbEFkZFN0cmluZ0l0ZW0oRGF0YVRyYW5zZmVySXRlbUNocm9taXVtOjpjcmVhdGVGcm9t
SFRNTChodG1sLCBiYXNlVVJMKSk7CiB9CiAKIGJvb2wgQ2hyb21pdW1EYXRhT2JqZWN0Ojpjb250
YWluc0ZpbGVuYW1lcygpIGNvbnN0CiB7Ci0gICAgYm9vbCBjb250YWluc0ZpbGVuYW1lczsKLSAg
ICBpZiAobV9zdG9yYWdlTW9kZSA9PSBQYXN0ZWJvYXJkKSB7Ci0gICAgICAgIEhhc2hTZXQ8U3Ry
aW5nPiBpZ25vcmVkUmVzdWx0cyA9Ci0gICAgICAgICAgICBQbGF0Zm9ybVN1cHBvcnQ6OmNsaXBi
b2FyZFJlYWRBdmFpbGFibGVUeXBlcyhjdXJyZW50UGFzdGVib2FyZEJ1ZmZlcigpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvbnRh
aW5zRmlsZW5hbWVzKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY29udGFpbnNGaWxlbmFtZXMgPSAh
bV9maWxlbmFtZXMuaXNFbXB0eSgpOwotICAgIHJldHVybiBjb250YWluc0ZpbGVuYW1lczsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1faXRlbUxpc3QtPmxlbmd0aCgpOyArK2kpCisgICAg
ICAgIGlmIChtX2l0ZW1MaXN0LT5pdGVtKGkpLT5pc0ZpbGVuYW1lKCkpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1ZlY3RvcjxTdHJpbmc+IENocm9t
aXVtRGF0YU9iamVjdDo6ZmlsZW5hbWVzKCkgY29uc3QKK3sKKyAgICBWZWN0b3I8U3RyaW5nPiBy
ZXN1bHRzOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9pdGVtTGlzdC0+bGVuZ3RoKCk7
ICsraSkKKyAgICAgICAgaWYgKG1faXRlbUxpc3QtPml0ZW0oaSktPmlzRmlsZW5hbWUoKSkKKyAg
ICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHN0YXRpY19jYXN0PEZpbGUqPihtX2l0ZW1MaXN0LT5p
dGVtKGkpLT5nZXRBc0ZpbGUoKS5nZXQoKSktPnBhdGgoKSk7CisgICAgcmV0dXJuIHJlc3VsdHM7
Cit9CisKK3ZvaWQgQ2hyb21pdW1EYXRhT2JqZWN0OjphZGRGaWxlbmFtZShjb25zdCBTdHJpbmcm
IGZpbGVuYW1lKQoreworICAgIG1faXRlbUxpc3QtPmludGVybmFsQWRkRmlsZUl0ZW0oRGF0YVRy
YW5zZmVySXRlbUNocm9taXVtOjpjcmVhdGUoRmlsZTo6Y3JlYXRlKGZpbGVuYW1lKSkpOworfQor
Cit2b2lkIENocm9taXVtRGF0YU9iamVjdDo6YWRkU2hhcmVkQnVmZmVyKGNvbnN0IFN0cmluZyYg
bmFtZSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlcikKK3sKKyAgICBtX2l0ZW1MaXN0
LT5pbnRlcm5hbEFkZEZpbGVJdGVtKERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bTo6Y3JlYXRlKG5h
bWUsIGJ1ZmZlcikpOwogfQogCi1DaHJvbWl1bURhdGFPYmplY3Q6OkNocm9taXVtRGF0YU9iamVj
dChTdG9yYWdlTW9kZSBzdG9yYWdlTW9kZSkKLSAgICA6IG1fc3RvcmFnZU1vZGUoc3RvcmFnZU1v
ZGUpCitDaHJvbWl1bURhdGFPYmplY3Q6OkNocm9taXVtRGF0YU9iamVjdChQYXNzUmVmUHRyPERh
dGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0+IGl0ZW1MaXN0KQorICAgIDogbV9pdGVtTGlzdChp
dGVtTGlzdCkKIHsKIH0KIAogQ2hyb21pdW1EYXRhT2JqZWN0OjpDaHJvbWl1bURhdGFPYmplY3Qo
Y29uc3QgQ2hyb21pdW1EYXRhT2JqZWN0JiBvdGhlcikKICAgICA6IFJlZkNvdW50ZWQ8Q2hyb21p
dW1EYXRhT2JqZWN0PigpCi0gICAgLCBtX3N0b3JhZ2VNb2RlKG90aGVyLm1fc3RvcmFnZU1vZGUp
Ci0gICAgLCBtX3VybFRpdGxlKG90aGVyLm1fdXJsVGl0bGUpCi0gICAgLCBtX2Rvd25sb2FkTWV0
YWRhdGEob3RoZXIubV9kb3dubG9hZE1ldGFkYXRhKQotICAgICwgbV9maWxlRXh0ZW5zaW9uKG90
aGVyLm1fZmlsZUV4dGVuc2lvbikKLSAgICAsIG1fZmlsZW5hbWVzKG90aGVyLm1fZmlsZW5hbWVz
KQotICAgICwgbV9wbGFpblRleHQob3RoZXIubV9wbGFpblRleHQpCi0gICAgLCBtX3RleHRIdG1s
KG90aGVyLm1fdGV4dEh0bWwpCi0gICAgLCBtX2h0bWxCYXNlVXJsKG90aGVyLm1faHRtbEJhc2VV
cmwpCi0gICAgLCBtX2ZpbGVDb250ZW50RmlsZW5hbWUob3RoZXIubV9maWxlQ29udGVudEZpbGVu
YW1lKQotICAgICwgbV91cmwob3RoZXIubV91cmwpCi0gICAgLCBtX3VyaUxpc3Qob3RoZXIubV91
cmlMaXN0KQorICAgICwgbV9pdGVtTGlzdChvdGhlci5tX2l0ZW1MaXN0KQogewotICAgIGlmIChv
dGhlci5tX2ZpbGVDb250ZW50LmdldCgpKQotICAgICAgICBtX2ZpbGVDb250ZW50ID0gb3RoZXIu
bV9maWxlQ29udGVudC0+Y29weSgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmpl
Y3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVj
dC5oCmluZGV4IDdlNjc1YmY5Mzk5NTBiZmU4ODUyMzRiMDcxZTlhODQyZDE0ZjFiMTguLmI2NmMw
Zjk1YTM0NDMzNTMzM2E1MmVmYjdmMGRlYjcwOGM0MmJkMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5oCkBAIC0zMSwx
MCArMzEsOCBAQAogI2lmbmRlZiBDaHJvbWl1bURhdGFPYmplY3RfaAogI2RlZmluZSBDaHJvbWl1
bURhdGFPYmplY3RfaAogCi0jaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIkRhdGFUcmFuc2Zl
ckl0ZW1MaXN0Q2hyb21pdW0uaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1
ZGUgIlNoYXJlZEJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8
d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgpAQCAtNDIsOTUgKzQwLDQ3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xh
c3MgS1VSTDsKK2NsYXNzIFNoYXJlZEJ1ZmZlcjsKKwogLy8gQSBkYXRhIG9iamVjdCBmb3IgaG9s
ZGluZyBkYXRhIHRoYXQgd291bGQgYmUgaW4gYSBjbGlwYm9hcmQgb3IgbW92ZWQKIC8vIGR1cmlu
ZyBhIGRyYWctbi1kcm9wIG9wZXJhdGlvbi4gIFRoaXMgaXMgdGhlIGRhdGEgdGhhdCBXZWJDb3Jl
IGlzIGF3YXJlCiAvLyBvZiBhbmQgaXMgbm90IHNwZWNpZmljIHRvIGEgcGxhdGZvcm0uCiBjbGFz
cyBDaHJvbWl1bURhdGFPYmplY3QgOiBwdWJsaWMgUmVmQ291bnRlZDxDaHJvbWl1bURhdGFPYmpl
Y3Q+IHsKIHB1YmxpYzoKLSAgICBlbnVtIFN0b3JhZ2VNb2RlIHsKLSAgICAgICAgQnVmZmVyZWQs
Ci0gICAgICAgIFBhc3RlYm9hcmQsCi0gICAgfTsKLQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPENo
cm9taXVtRGF0YU9iamVjdD4gY3JlYXRlRnJvbVBhc3RlYm9hcmQoKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBDaHJvbWl1bURhdGFPYmplY3QoUGFzdGVib2FyZCkpOwotICAg
IH0KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDaHJvbWl1bURhdGFPYmplY3Q+IGNyZWF0ZUZyb21Q
YXN0ZWJvYXJkKCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2hyb21pdW1EYXRhT2JqZWN0PiBj
cmVhdGUoKTsKIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPENocm9taXVtRGF0YU9iamVjdD4gY3Jl
YXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2hyb21pdW1EYXRhT2Jq
ZWN0KEJ1ZmZlcmVkKSk7Ci0gICAgfQorICAgIFBhc3NSZWZQdHI8Q2hyb21pdW1EYXRhT2JqZWN0
PiBjb3B5KCkgY29uc3Q7CiAKLSAgICBQYXNzUmVmUHRyPENocm9taXVtRGF0YU9iamVjdD4gY29w
eSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENocm9taXVtRGF0
YU9iamVjdCgqdGhpcykpOwotICAgIH0KLQotICAgIFN0b3JhZ2VNb2RlIHN0b3JhZ2VNb2RlKCkg
Y29uc3QgeyByZXR1cm4gbV9zdG9yYWdlTW9kZTsgfQorICAgIFBhc3NSZWZQdHI8RGF0YVRyYW5z
ZmVySXRlbUxpc3RDaHJvbWl1bT4gaXRlbXMoKSBjb25zdDsKIAogICAgIHZvaWQgY2xlYXJEYXRh
KGNvbnN0IFN0cmluZyYgdHlwZSk7CiAgICAgdm9pZCBjbGVhckFsbCgpOwogICAgIHZvaWQgY2xl
YXJBbGxFeGNlcHRGaWxlcygpOwogCi0gICAgYm9vbCBoYXNEYXRhKCkgY29uc3Q7Ci0KICAgICBI
YXNoU2V0PFN0cmluZz4gdHlwZXMoKSBjb25zdDsKLSAgICBTdHJpbmcgZ2V0RGF0YShjb25zdCBT
dHJpbmcmIHR5cGUsIGJvb2wmIHN1Y2Nlc3MpIGNvbnN0OworICAgIFN0cmluZyBnZXREYXRhKGNv
bnN0IFN0cmluZyYgdHlwZSkgY29uc3Q7CiAgICAgYm9vbCBzZXREYXRhKGNvbnN0IFN0cmluZyYg
dHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKTsKIAotICAgIC8vIFNwZWNpYWwgaGFuZGxlcnMgZm9y
IFVSTC9IVE1MIG1ldGFkYXRhLgotICAgIFN0cmluZyB1cmxUaXRsZSgpIGNvbnN0IHsgcmV0dXJu
IG1fdXJsVGl0bGU7IH0KLSAgICB2b2lkIHNldFVybFRpdGxlKGNvbnN0IFN0cmluZyYgdXJsVGl0
bGUpIHsgbV91cmxUaXRsZSA9IHVybFRpdGxlOyB9Ci0gICAgS1VSTCBodG1sQmFzZVVybCgpIGNv
bnN0IHsgcmV0dXJuIG1faHRtbEJhc2VVcmw7IH0KLSAgICB2b2lkIHNldEh0bWxCYXNlVXJsKGNv
bnN0IEtVUkwmIHVybCkgeyBtX2h0bWxCYXNlVXJsID0gdXJsOyB9CisgICAgdm9pZCBnZXRVUkwo
U3RyaW5nJiB1cmwsIFN0cmluZyogdGl0bGUpIGNvbnN0OworICAgIHZvaWQgc2V0VVJMKGNvbnN0
IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHRpdGxlKTsKKyAgICB2b2lkIGdldEhUTUwoU3Ry
aW5nJiBodG1sLCBLVVJMJiBiYXNlVVJMKSBjb25zdDsKKyAgICB2b2lkIHNldEhUTUwoY29uc3Qg
U3RyaW5nJiBodG1sLCBjb25zdCBLVVJMJiBiYXNlVVJMKTsKIAotICAgIC8vIFVzZWQgdG8gaGFu
ZGxlIGZpbGVzIGJlaW5nIGRyYWdnZWQgaW4gYW5kIG91dC4KKyAgICAvLyBVc2VkIGZvciBkcmFn
Z2luZyBpbiBmaWxlcyBmcm9tIHRoZSBkZXNrdG9wLgogICAgIGJvb2wgY29udGFpbnNGaWxlbmFt
ZXMoKSBjb25zdDsKLSAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVzKCkgY29uc3Qg
eyByZXR1cm4gbV9maWxlbmFtZXM7IH0KLSAgICB2b2lkIHNldEZpbGVuYW1lcyhjb25zdCBWZWN0
b3I8U3RyaW5nPiYgZmlsZW5hbWVzKSB7IG1fZmlsZW5hbWVzID0gZmlsZW5hbWVzOyB9Ci0KLSAg
ICAvLyBVc2VkIHRvIGhhbmRsZSBmaWxlcyBiZWluZyBkcmFnZ2VkIG91dC4KLSAgICB2b2lkIGFk
ZEZpbGVuYW1lKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUpIHsgbV9maWxlbmFtZXMuYXBwZW5kKGZp
bGVuYW1lKTsgfQorICAgIFZlY3RvcjxTdHJpbmc+IGZpbGVuYW1lcygpIGNvbnN0OworICAgIHZv
aWQgYWRkRmlsZW5hbWUoY29uc3QgU3RyaW5nJik7CiAKICAgICAvLyBVc2VkIHRvIGhhbmRsZSBm
aWxlcyAoaW1hZ2VzKSBiZWluZyBkcmFnZ2VkIG91dC4KLSAgICBTdHJpbmcgZmlsZUV4dGVuc2lv
bigpIGNvbnN0IHsgcmV0dXJuIG1fZmlsZUV4dGVuc2lvbjsgfQotICAgIHZvaWQgc2V0RmlsZUV4
dGVuc2lvbihjb25zdCBTdHJpbmcmIGZpbGVFeHRlbnNpb24pIHsgbV9maWxlRXh0ZW5zaW9uID0g
ZmlsZUV4dGVuc2lvbjsgfQotICAgIFN0cmluZyBmaWxlQ29udGVudEZpbGVuYW1lKCkgY29uc3Qg
eyByZXR1cm4gbV9maWxlQ29udGVudEZpbGVuYW1lOyB9Ci0gICAgdm9pZCBzZXRGaWxlQ29udGVu
dEZpbGVuYW1lKGNvbnN0IFN0cmluZyYgZmlsZUNvbnRlbnRGaWxlbmFtZSkgeyBtX2ZpbGVDb250
ZW50RmlsZW5hbWUgPSBmaWxlQ29udGVudEZpbGVuYW1lOyB9Ci0gICAgUGFzc1JlZlB0cjxTaGFy
ZWRCdWZmZXI+IGZpbGVDb250ZW50KCkgY29uc3QgeyByZXR1cm4gbV9maWxlQ29udGVudDsgfQot
ICAgIHZvaWQgc2V0RmlsZUNvbnRlbnQoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGZpbGVDb250
ZW50KSB7IG1fZmlsZUNvbnRlbnQgPSBmaWxlQ29udGVudDsgfQotICAgIGNvbnN0IEhhc2hNYXA8
U3RyaW5nLCBTdHJpbmc+JiBjdXN0b21EYXRhKCkgY29uc3QgeyByZXR1cm4gbV9jdXN0b21EYXRh
OyB9Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIGN1c3RvbURhdGEoKSB7IHJldHVybiBt
X2N1c3RvbURhdGE7IH0KKyAgICB2b2lkIGFkZFNoYXJlZEJ1ZmZlcihjb25zdCBTdHJpbmcmIG5h
bWUsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPik7CiAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQg
Q2hyb21pdW1EYXRhT2JqZWN0KFN0b3JhZ2VNb2RlKTsKKyAgICBleHBsaWNpdCBDaHJvbWl1bURh
dGFPYmplY3QoUGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtPik7CiAgICAg
ZXhwbGljaXQgQ2hyb21pdW1EYXRhT2JqZWN0KGNvbnN0IENocm9taXVtRGF0YU9iamVjdCYpOwog
Ci0gICAgU3RvcmFnZU1vZGUgbV9zdG9yYWdlTW9kZTsKLQotICAgIFN0cmluZyBtX3VybFRpdGxl
OwotCi0gICAgU3RyaW5nIG1fZG93bmxvYWRNZXRhZGF0YTsKLQotICAgIFN0cmluZyBtX2ZpbGVF
eHRlbnNpb247Ci0gICAgVmVjdG9yPFN0cmluZz4gbV9maWxlbmFtZXM7Ci0KLSAgICBTdHJpbmcg
bV9wbGFpblRleHQ7Ci0KLSAgICBTdHJpbmcgbV90ZXh0SHRtbDsKLSAgICBLVVJMIG1faHRtbEJh
c2VVcmw7Ci0KLSAgICBTdHJpbmcgbV9maWxlQ29udGVudEZpbGVuYW1lOwotICAgIFJlZlB0cjxT
aGFyZWRCdWZmZXI+IG1fZmlsZUNvbnRlbnQ7Ci0KLSAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5n
PiBtX2N1c3RvbURhdGE7Ci0KLSAgICAvLyBUaGVzZSB0d28gYXJlIGxpbmtlZC4gU2V0dGluZyBt
X3VybCB3aWxsIHNldCBtX3VyaUxpc3QgdG8gdGhlIHNhbWUKLSAgICAvLyBzdHJpbmcgdmFsdWU7
IHNldHRpbmcgbV91cmlMaXN0IHdpbGwgY2F1c2UgaXRzIGNvbnRlbnRzIHRvIGJlIHBhcnNlZAot
ICAgIC8vIGFjY29yZGluZyB0byBSRkMgMjQ4MyBhbmQgdGhlIGZpcnN0IFVSTCBmb3VuZCB3aWxs
IGJlIHNldCBpbiBtX3VybC4KLSAgICBLVVJMIG1fdXJsOwotICAgIFN0cmluZyBtX3VyaUxpc3Q7
CisgICAgUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0+IG1faXRlbUxpc3Q7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5jcHAKaW5kZXggZTIzOGIyZGZkNzdj
NjZlZTIxNDNhY2VhODU0Nzc3ZTkyOWRhZDkxZC4uMTNkZDY4MTFlM2M3ZTExZjRhZTMwOTBkNDNl
MDU3ZGM5ODQ4ZTcwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vQ2xpcGJvYXJkQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2No
cm9taXVtL0NsaXBib2FyZENocm9taXVtLmNwcApAQCAtMzEsNyArMzEsOSBAQAogI2luY2x1ZGUg
IkNocm9taXVtRGF0YU9iamVjdC5oIgogI2luY2x1ZGUgIkNsaXBib2FyZE1pbWVUeXBlcy5oIgog
I2luY2x1ZGUgIkNsaXBib2FyZFV0aWxpdGllc0Nocm9taXVtLmgiCisjaW5jbHVkZSAiRGF0YVRy
YW5zZmVySXRlbS5oIgogI2luY2x1ZGUgIkRhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bS5oIgorI2lu
Y2x1ZGUgIkRhdGFUcmFuc2Zlckl0ZW1MaXN0LmgiCiAjaW5jbHVkZSAiRGF0YVRyYW5zZmVySXRl
bUxpc3RDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRHJhZ0Rh
dGEuaCIKQEAgLTgxLDcgKzgzLDcgQEAgcHJpdmF0ZToKIGNsYXNzIERhdGFUcmFuc2Zlckl0ZW1Q
b2xpY3lXcmFwcGVyIDogcHVibGljIERhdGFUcmFuc2Zlckl0ZW0gewogcHVibGljOgogICAgIHN0
YXRpYyBQYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1Qb2xpY3lXcmFwcGVyPiBjcmVhdGUoCi0g
ICAgICAgIFBhc3NSZWZQdHI8Q2xpcGJvYXJkQ2hyb21pdW0+LCBQYXNzUmVmUHRyPERhdGFUcmFu
c2Zlckl0ZW0+KTsKKyAgICAgICAgUGFzc1JlZlB0cjxDbGlwYm9hcmRDaHJvbWl1bT4sIFBhc3NS
ZWZQdHI8RGF0YVRyYW5zZmVySXRlbUNocm9taXVtPik7CiAKICAgICB2aXJ0dWFsIFN0cmluZyBr
aW5kKCkgY29uc3Q7CiAgICAgdmlydHVhbCBTdHJpbmcgdHlwZSgpIGNvbnN0OwpAQCAtOTAsMTAg
KzkyLDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8QmxvYj4gZ2V0QXNGaWxl
KCkgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgRGF0YVRyYW5zZmVySXRlbVBvbGljeVdyYXBwZXIo
UGFzc1JlZlB0cjxDbGlwYm9hcmRDaHJvbWl1bT4sIFBhc3NSZWZQdHI8RGF0YVRyYW5zZmVySXRl
bT4pOworICAgIERhdGFUcmFuc2Zlckl0ZW1Qb2xpY3lXcmFwcGVyKFBhc3NSZWZQdHI8Q2xpcGJv
YXJkQ2hyb21pdW0+LCBQYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bT4pOwogCiAg
ICAgUmVmUHRyPENsaXBib2FyZENocm9taXVtPiBtX2NsaXBib2FyZDsKLSAgICBSZWZQdHI8RGF0
YVRyYW5zZmVySXRlbT4gbV9pdGVtOworICAgIFJlZlB0cjxEYXRhVHJhbnNmZXJJdGVtQ2hyb21p
dW0+IG1faXRlbTsKIH07CiAKIFBhc3NSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUxpc3RQb2xpY3lX
cmFwcGVyPiBEYXRhVHJhbnNmZXJJdGVtTGlzdFBvbGljeVdyYXBwZXI6OmNyZWF0ZSgKQEAgLTEx
Myw3ICsxMTUsNyBAQCBQYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW0+IERhdGFUcmFuc2Zlckl0
ZW1MaXN0UG9saWN5V3JhcHBlcjo6aXRlbSh1bnNpZ25lZCBsbwogewogICAgIGlmIChtX2NsaXBi
b2FyZC0+cG9saWN5KCkgPT0gQ2xpcGJvYXJkTnVtYikKICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
UmVmUHRyPERhdGFUcmFuc2Zlckl0ZW0+IGl0ZW0gPSBtX2xpc3QtPml0ZW0oaW5kZXgpOworICAg
IFJlZlB0cjxEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0+IGl0ZW0gPSBtX2xpc3QtPml0ZW0oaW5k
ZXgpOwogICAgIGlmICghaXRlbSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIERhdGFU
cmFuc2Zlckl0ZW1Qb2xpY3lXcmFwcGVyOjpjcmVhdGUobV9jbGlwYm9hcmQsIGl0ZW0pOwpAQCAt
MTQ3LDcgKzE0OSw3IEBAIHZvaWQgRGF0YVRyYW5zZmVySXRlbUxpc3RQb2xpY3lXcmFwcGVyOjph
ZGQoUGFzc1JlZlB0cjxGaWxlPiBmaWxlKQogewogICAgIGlmIChtX2NsaXBib2FyZC0+cG9saWN5
KCkgIT0gQ2xpcGJvYXJkV3JpdGFibGUpCiAgICAgICAgIHJldHVybjsKLSAgICBtX2xpc3QtPmFk
ZChmaWxlKTsKKyAgICBtX2xpc3QtPmFkZChmaWxlLCBtX2NsaXBib2FyZC0+ZnJhbWUoKS0+ZG9j
dW1lbnQoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKIH0KIAogRGF0YVRyYW5zZmVySXRl
bUxpc3RQb2xpY3lXcmFwcGVyOjpEYXRhVHJhbnNmZXJJdGVtTGlzdFBvbGljeVdyYXBwZXIoCkBA
IC0xNTgsNyArMTYwLDcgQEAgRGF0YVRyYW5zZmVySXRlbUxpc3RQb2xpY3lXcmFwcGVyOjpEYXRh
VHJhbnNmZXJJdGVtTGlzdFBvbGljeVdyYXBwZXIoCiB9CiAKIFBhc3NSZWZQdHI8RGF0YVRyYW5z
ZmVySXRlbVBvbGljeVdyYXBwZXI+IERhdGFUcmFuc2Zlckl0ZW1Qb2xpY3lXcmFwcGVyOjpjcmVh
dGUoCi0gICAgUGFzc1JlZlB0cjxDbGlwYm9hcmRDaHJvbWl1bT4gY2xpcGJvYXJkLCBQYXNzUmVm
UHRyPERhdGFUcmFuc2Zlckl0ZW0+IGl0ZW0pCisgICAgUGFzc1JlZlB0cjxDbGlwYm9hcmRDaHJv
bWl1bT4gY2xpcGJvYXJkLCBQYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bT4gaXRl
bSkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IERhdGFUcmFuc2Zlckl0ZW1Qb2xpY3lXcmFw
cGVyKGNsaXBib2FyZCwgaXRlbSkpOwogfQpAQCAtMTgyLDcgKzE4NCw3IEBAIHZvaWQgRGF0YVRy
YW5zZmVySXRlbVBvbGljeVdyYXBwZXI6OmdldEFzU3RyaW5nKFBhc3NSZWZQdHI8U3RyaW5nQ2Fs
bGJhY2s+IGNhbGxiCiAgICAgaWYgKG1fY2xpcGJvYXJkLT5wb2xpY3koKSAhPSBDbGlwYm9hcmRS
ZWFkYWJsZSAmJiBtX2NsaXBib2FyZC0+cG9saWN5KCkgIT0gQ2xpcGJvYXJkV3JpdGFibGUpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIG1faXRlbS0+Z2V0QXNTdHJpbmcoY2FsbGJhY2spOworICAg
IG1faXRlbS0+Z2V0QXNTdHJpbmcoY2FsbGJhY2ssIG1fY2xpcGJvYXJkLT5mcmFtZSgpLT5kb2N1
bWVudCgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwogfQogCiBQYXNzUmVmUHRyPEJsb2I+
IERhdGFUcmFuc2Zlckl0ZW1Qb2xpY3lXcmFwcGVyOjpnZXRBc0ZpbGUoKSBjb25zdApAQCAtMTk0
LDcgKzE5Niw3IEBAIFBhc3NSZWZQdHI8QmxvYj4gRGF0YVRyYW5zZmVySXRlbVBvbGljeVdyYXBw
ZXI6OmdldEFzRmlsZSgpIGNvbnN0CiB9CiAKIERhdGFUcmFuc2Zlckl0ZW1Qb2xpY3lXcmFwcGVy
OjpEYXRhVHJhbnNmZXJJdGVtUG9saWN5V3JhcHBlcigKLSAgICBQYXNzUmVmUHRyPENsaXBib2Fy
ZENocm9taXVtPiBjbGlwYm9hcmQsIFBhc3NSZWZQdHI8RGF0YVRyYW5zZmVySXRlbT4gaXRlbSkK
KyAgICBQYXNzUmVmUHRyPENsaXBib2FyZENocm9taXVtPiBjbGlwYm9hcmQsIFBhc3NSZWZQdHI8
RGF0YVRyYW5zZmVySXRlbUNocm9taXVtPiBpdGVtKQogICAgIDogbV9jbGlwYm9hcmQoY2xpcGJv
YXJkKQogICAgICwgbV9pdGVtKGl0ZW0pCiB7CkBAIC0yMDcsMTEgKzIwOSwxNSBAQCB1c2luZyBu
YW1lc3BhY2UgSFRNTE5hbWVzOwogLy8gV2UgcHJvdmlkZSB0aGUgSUUgY2xpcGJvYXJkIHR5cGVz
IChVUkwgYW5kIFRleHQpLCBhbmQgdGhlIGNsaXBib2FyZCB0eXBlcyBzcGVjaWZpZWQgaW4gdGhl
IFdIQVRXRyBXZWIgQXBwbGljYXRpb25zIDEuMCBkcmFmdAogLy8gc2VlIGh0dHA6Ly93d3cud2hh
dHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvIFNlY3Rpb24gNi4zLjUuMwogCi1z
dGF0aWMgU3RyaW5nIG5vcm1hbGl6ZVR5cGUoY29uc3QgU3RyaW5nJiB0eXBlKQorc3RhdGljIFN0
cmluZyBub3JtYWxpemVUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSwgYm9vbCYgY29udmVydFRvVVJM
KQogewogICAgIFN0cmluZyBjbGVhblR5cGUgPSB0eXBlLnN0cmlwV2hpdGVTcGFjZSgpLmxvd2Vy
KCk7CiAgICAgaWYgKGNsZWFuVHlwZSA9PSBtaW1lVHlwZVRleHQgfHwgY2xlYW5UeXBlLnN0YXJ0
c1dpdGgobWltZVR5cGVUZXh0UGxhaW5FdGMpKQogICAgICAgICByZXR1cm4gbWltZVR5cGVUZXh0
UGxhaW47CisgICAgaWYgKGNsZWFuVHlwZSA9PSBtaW1lVHlwZVVSTCkgeworICAgICAgICBjb252
ZXJ0VG9VUkwgPSB0cnVlOworICAgICAgICByZXR1cm4gbWltZVR5cGVUZXh0VVJJTGlzdDsKKyAg
ICB9CiAgICAgcmV0dXJuIGNsZWFuVHlwZTsKIH0KIApAQCAtMjI3LDggKzIzMyw2IEBAIENsaXBi
b2FyZENocm9taXVtOjpDbGlwYm9hcmRDaHJvbWl1bShDbGlwYm9hcmRUeXBlIGNsaXBib2FyZFR5
cGUsCiAgICAgOiBDbGlwYm9hcmQocG9saWN5LCBjbGlwYm9hcmRUeXBlKQogICAgICwgbV9kYXRh
T2JqZWN0KGRhdGFPYmplY3QpCiAgICAgLCBtX2ZyYW1lKGZyYW1lKQotICAgICwgbV9vcmlnaW5h
bFNlcXVlbmNlTnVtYmVyKFBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJvYXJkU2VxdWVuY2VOdW1iZXIo
Y3VycmVudFBhc3RlYm9hcmRCdWZmZXIoKSkpCi0gICAgLCBtX2RyYWdTdG9yYWdlVXBkYXRlZCh0
cnVlKQogewogfQogCkBAIC0yNDQsMTEgKzI0OCwxMSBAQCBQYXNzUmVmUHRyPENsaXBib2FyZENo
cm9taXVtPiBDbGlwYm9hcmRDaHJvbWl1bTo6Y3JlYXRlKENsaXBib2FyZFR5cGUgY2xpcGJvYXJk
VAogCiB2b2lkIENsaXBib2FyZENocm9taXVtOjpjbGVhckRhdGEoY29uc3QgU3RyaW5nJiB0eXBl
KQogewotICAgIGlmIChwb2xpY3koKSAhPSBDbGlwYm9hcmRXcml0YWJsZSB8fCAhbV9kYXRhT2Jq
ZWN0KQorICAgIGlmIChwb2xpY3koKSAhPSBDbGlwYm9hcmRXcml0YWJsZSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgbV9kcmFnU3RvcmFnZVVwZGF0ZWQgPSB0cnVlOwotICAgIG1fZGF0YU9iamVj
dC0+Y2xlYXJEYXRhKG5vcm1hbGl6ZVR5cGUodHlwZSkpOworICAgIGJvb2wgaWdub3JlZDsKKyAg
ICBtX2RhdGFPYmplY3QtPmNsZWFyRGF0YShub3JtYWxpemVUeXBlKHR5cGUsIGlnbm9yZWQpKTsK
IAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQpAQCAtMjU4LDIwICsyNjIsNDAgQEAgdm9p
ZCBDbGlwYm9hcmRDaHJvbWl1bTo6Y2xlYXJBbGxEYXRhKCkKICAgICBpZiAocG9saWN5KCkgIT0g
Q2xpcGJvYXJkV3JpdGFibGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZHJhZ1N0b3JhZ2VV
cGRhdGVkID0gdHJ1ZTsKICAgICBtX2RhdGFPYmplY3QtPmNsZWFyQWxsKCk7CiB9CiAKIFN0cmlu
ZyBDbGlwYm9hcmRDaHJvbWl1bTo6Z2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUpIGNvbnN0CiB7
Ci0gICAgYm9vbCBpZ25vcmVkU3VjY2VzcyA9IGZhbHNlOwotICAgIGlmIChwb2xpY3koKSAhPSBD
bGlwYm9hcmRSZWFkYWJsZSB8fCAhbV9kYXRhT2JqZWN0KQorICAgIGlmIChwb2xpY3koKSAhPSBD
bGlwYm9hcmRSZWFkYWJsZSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgaWYgKGlz
Rm9yQ29weUFuZFBhc3RlKCkgJiYgcGxhdGZvcm1DbGlwYm9hcmRDaGFuZ2VkKCkpCi0gICAgICAg
IHJldHVybiBTdHJpbmcoKTsKKyAgICBib29sIGNvbnZlcnRUb1VSTCA9IGZhbHNlOworICAgIFN0
cmluZyBkYXRhID0gbV9kYXRhT2JqZWN0LT5nZXREYXRhKG5vcm1hbGl6ZVR5cGUodHlwZSwgY29u
dmVydFRvVVJMKSk7CisgICAgaWYgKCFjb252ZXJ0VG9VUkwpCisgICAgICAgIHJldHVybiBkYXRh
OworICAgIHJldHVybiBjb252ZXJ0VVJJTGlzdFRvVVJMKGRhdGEpOworCisgICAgVmVjdG9yPFN0
cmluZz4gdXJpTGlzdDsKKyAgICAvLyBMaW5lIHNlcGFyYXRvciBpcyBcclxuIHBlciBSRkMgMjQ4
MyAtIGhvd3ZlciwgZm9yIGNvbXBhdGlibGl0eQorICAgIC8vIHJlYXNvbnMgd2UgYWxzbyBhbGxv
dyBqdXN0IFxuIGhlcmUuCisgICAgZGF0YS5zcGxpdCgnXG4nLCB1cmlMaXN0KTsKKyAgICAvLyBQ
cm9jZXNzIHRoZSBpbnB1dCBhbmQgcmV0dXJuIHRoZSBmaXJzdCB2YWxpZCBSVUwuIEluIGNhc2Ug
bm8gVVJMcyBjYW4KKyAgICAvLyBiZSBmb3VuZCwgcmV0dXJuIGFuIGVtcHR5IHN0cmluZy4gVGhp
cyBpcyBpbiBsaW5lIHdpdGggdGhlIEhUTUw1CisgICAgLy8gc3BlYyAoc2VlICJUaGUgRHJhZ0V2
ZW50IGFuZCBEYXRhVHJhbnNmZXIgaW50ZXJmYWNlcyIpLgorICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgdXJpTGlzdC5zaXplKCk7ICsraSkgeworICAgICAgICBTdHJpbmcmIGxpbmUgPSB1cmlM
aXN0W2ldOworICAgICAgICBsaW5lID0gbGluZS5zdHJpcFdoaXRlU3BhY2UoKTsKKyAgICAgICAg
aWYgKGxpbmUuaXNFbXB0eSgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChs
aW5lWzBdID09ICcjJykKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBLVVJMIHVybCA9
IEtVUkwoUGFyc2VkVVJMU3RyaW5nLCBsaW5lKTsKKyAgICAgICAgaWYgKHVybC5pc1ZhbGlkKCkp
CisgICAgICAgICAgICByZXR1cm4gdXJsOworICAgIH0KIAotICAgIHJldHVybiBtX2RhdGFPYmpl
Y3QtPmdldERhdGEobm9ybWFsaXplVHlwZSh0eXBlKSwgaWdub3JlZFN1Y2Nlc3MpOworICAgIHJl
dHVybiBTdHJpbmcoKTsKIH0KIAogYm9vbCBDbGlwYm9hcmRDaHJvbWl1bTo6c2V0RGF0YShjb25z
dCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSkKQEAgLTI3OSw0NyArMzAzLDM1IEBA
IGJvb2wgQ2xpcGJvYXJkQ2hyb21pdW06OnNldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25z
dCBTdHJpbmcmIGRhdGEpCiAgICAgaWYgKHBvbGljeSgpICE9IENsaXBib2FyZFdyaXRhYmxlKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBtX2RyYWdTdG9yYWdlVXBkYXRlZCA9IHRydWU7
Ci0gICAgcmV0dXJuIG1fZGF0YU9iamVjdC0+c2V0RGF0YShub3JtYWxpemVUeXBlKHR5cGUpLCBk
YXRhKTsKLX0KLQotYm9vbCBDbGlwYm9hcmRDaHJvbWl1bTo6cGxhdGZvcm1DbGlwYm9hcmRDaGFu
Z2VkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gUGxhdGZvcm1TdXBwb3J0OjpjbGlwYm9hcmRTZXF1
ZW5jZU51bWJlcihjdXJyZW50UGFzdGVib2FyZEJ1ZmZlcigpKSAhPSBtX29yaWdpbmFsU2VxdWVu
Y2VOdW1iZXI7CisgICAgYm9vbCBpZ25vcmVkOworICAgIHJldHVybiBtX2RhdGFPYmplY3QtPnNl
dERhdGEobm9ybWFsaXplVHlwZSh0eXBlLCBpZ25vcmVkKSwgZGF0YSk7CiB9CiAKIC8vIGV4dGVu
c2lvbnMgYmV5b25kIElFJ3MgQVBJCiBIYXNoU2V0PFN0cmluZz4gQ2xpcGJvYXJkQ2hyb21pdW06
OnR5cGVzKCkgY29uc3QKIHsKLSAgICBIYXNoU2V0PFN0cmluZz4gcmVzdWx0czsKICAgICBpZiAo
cG9saWN5KCkgIT0gQ2xpcGJvYXJkUmVhZGFibGUgJiYgcG9saWN5KCkgIT0gQ2xpcGJvYXJkVHlw
ZXNSZWFkYWJsZSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdHM7Ci0KLSAgICBpZiAoIW1fZGF0YU9i
amVjdCkKLSAgICAgICAgcmV0dXJuIHJlc3VsdHM7CisgICAgICAgIHJldHVybiBIYXNoU2V0PFN0
cmluZz4oKTsKIAotICAgIHJlc3VsdHMgPSBtX2RhdGFPYmplY3QtPnR5cGVzKCk7Ci0KLSAgICBp
ZiAobV9kYXRhT2JqZWN0LT5jb250YWluc0ZpbGVuYW1lcygpKQotICAgICAgICByZXN1bHRzLmFk
ZChtaW1lVHlwZUZpbGVzKTsKLQotICAgIHJldHVybiByZXN1bHRzOworICAgIHJldHVybiBtX2Rh
dGFPYmplY3QtPnR5cGVzKCk7CiB9CiAKIFBhc3NSZWZQdHI8RmlsZUxpc3Q+IENsaXBib2FyZENo
cm9taXVtOjpmaWxlcygpIGNvbnN0CiB7CisgICAgUmVmUHRyPEZpbGVMaXN0PiBmaWxlcyA9IEZp
bGVMaXN0OjpjcmVhdGUoKTsKICAgICBpZiAocG9saWN5KCkgIT0gQ2xpcGJvYXJkUmVhZGFibGUp
Ci0gICAgICAgIHJldHVybiBGaWxlTGlzdDo6Y3JlYXRlKCk7Ci0KLSAgICBpZiAoIW1fZGF0YU9i
amVjdCkKLSAgICAgICAgcmV0dXJuIEZpbGVMaXN0OjpjcmVhdGUoKTsKLQotICAgIGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMgPSBtX2RhdGFPYmplY3QtPmZpbGVuYW1lcygpOwotICAg
IFJlZlB0cjxGaWxlTGlzdD4gZmlsZUxpc3QgPSBGaWxlTGlzdDo6Y3JlYXRlKCk7Ci0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBmaWxlbmFtZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIGZpbGVM
aXN0LT5hcHBlbmQoRmlsZTo6Y3JlYXRlKGZpbGVuYW1lcy5hdChpKSkpOworICAgICAgICByZXR1
cm4gZmlsZXMucmVsZWFzZSgpOworCisgICAgUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hy
b21pdW0+IGxpc3QgPSBtX2RhdGFPYmplY3QtPml0ZW1zKCk7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBsaXN0LT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgIGlmIChsaXN0LT5pdGVtKGkp
LT5raW5kKCkgPT0gRGF0YVRyYW5zZmVySXRlbTo6a2luZEZpbGUpIHsKKyAgICAgICAgICAgIFJl
ZlB0cjxCbG9iPiBibG9iID0gbGlzdC0+aXRlbShpKS0+Z2V0QXNGaWxlKCk7CisgICAgICAgICAg
ICBpZiAoYmxvYiAmJiBibG9iLT5pc0ZpbGUoKSkKKyAgICAgICAgICAgICAgICBmaWxlcy0+YXBw
ZW5kKHN0YXRpY19jYXN0PEZpbGUqPihibG9iLmdldCgpKSk7CisgICAgICAgIH0KKyAgICB9CiAK
LSAgICByZXR1cm4gZmlsZUxpc3QucmVsZWFzZSgpOworICAgIHJldHVybiBmaWxlcy5yZWxlYXNl
KCk7CiB9CiAKIHZvaWQgQ2xpcGJvYXJkQ2hyb21pdW06OnNldERyYWdJbWFnZShDYWNoZWRJbWFn
ZSogaW1hZ2UsIE5vZGUqIG5vZGUsIGNvbnN0IEludFBvaW50JiBsb2MpCkBAIC0zODksOCArNDAx
LDYgQEAgc3RhdGljIHZvaWQgd3JpdGVJbWFnZVRvRGF0YU9iamVjdChDaHJvbWl1bURhdGFPYmpl
Y3QqIGRhdGFPYmplY3QsIEVsZW1lbnQqIGVsZW0KICAgICBpZiAoIWltYWdlQnVmZmVyIHx8ICFp
bWFnZUJ1ZmZlci0+c2l6ZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBkYXRhT2JqZWN0LT5z
ZXRGaWxlQ29udGVudChpbWFnZUJ1ZmZlcik7Ci0KICAgICAvLyBEZXRlcm1pbmUgdGhlIGZpbGVu
YW1lIGZvciB0aGUgZmlsZSBjb250ZW50cyBvZiB0aGUgaW1hZ2UuCiAgICAgU3RyaW5nIGZpbGVu
YW1lID0gY2FjaGVkSW1hZ2UtPnJlc3BvbnNlKCkuc3VnZ2VzdGVkRmlsZW5hbWUoKTsKICAgICBp
ZiAoZmlsZW5hbWUuaXNFbXB0eSgpKQpAQCAtNDEwLDggKzQyMCw3IEBAIHN0YXRpYyB2b2lkIHdy
aXRlSW1hZ2VUb0RhdGFPYmplY3QoQ2hyb21pdW1EYXRhT2JqZWN0KiBkYXRhT2JqZWN0LCBFbGVt
ZW50KiBlbGVtCiAKICAgICBDbGlwYm9hcmRDaHJvbWl1bTo6dmFsaWRhdGVGaWxlbmFtZShmaWxl
bmFtZSwgZXh0ZW5zaW9uKTsKIAotICAgIGRhdGFPYmplY3QtPnNldEZpbGVDb250ZW50RmlsZW5h
bWUoZmlsZW5hbWUgKyBleHRlbnNpb24pOwotICAgIGRhdGFPYmplY3QtPnNldEZpbGVFeHRlbnNp
b24oZXh0ZW5zaW9uKTsKKyAgICBkYXRhT2JqZWN0LT5hZGRTaGFyZWRCdWZmZXIoZmlsZW5hbWUg
KyBleHRlbnNpb24sIGltYWdlQnVmZmVyKTsKIH0KIAogdm9pZCBDbGlwYm9hcmRDaHJvbWl1bTo6
ZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEtVUkwmIHVy
bCwgY29uc3QgU3RyaW5nJiB0aXRsZSwgRnJhbWUqIGZyYW1lKQpAQCAtNDE5LDkgKzQyOCw3IEBA
IHZvaWQgQ2xpcGJvYXJkQ2hyb21pdW06OmRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZShFbGVtZW50
KiBlbGVtZW50LCBjb25zdCBLVVJMJiB1CiAgICAgaWYgKCFtX2RhdGFPYmplY3QpCiAgICAgICAg
IHJldHVybjsKIAotICAgIG1fZHJhZ1N0b3JhZ2VVcGRhdGVkID0gdHJ1ZTsKLSAgICBtX2RhdGFP
YmplY3QtPnNldERhdGEobWltZVR5cGVVUkwsIHVybCk7Ci0gICAgbV9kYXRhT2JqZWN0LT5zZXRV
cmxUaXRsZSh0aXRsZSk7CisgICAgbV9kYXRhT2JqZWN0LT5zZXRVUkwodXJsLCB0aXRsZSk7CiAK
ICAgICAvLyBXcml0ZSB0aGUgYnl0ZXMgaW4gdGhlIGltYWdlIHRvIHRoZSBmaWxlIGZvcm1hdC4K
ICAgICB3cml0ZUltYWdlVG9EYXRhT2JqZWN0KG1fZGF0YU9iamVjdC5nZXQoKSwgZWxlbWVudCwg
dXJsKTsKQEAgLTQzNiwxNiArNDQzLDEzIEBAIHZvaWQgQ2xpcGJvYXJkQ2hyb21pdW06OndyaXRl
VVJMKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB0aXRsZSwgRnJhbWUqKQogICAgICAg
ICByZXR1cm47CiAgICAgQVNTRVJUKCF1cmwuaXNFbXB0eSgpKTsKIAotICAgIG1fZHJhZ1N0b3Jh
Z2VVcGRhdGVkID0gdHJ1ZTsKLSAgICBtX2RhdGFPYmplY3QtPnNldERhdGEobWltZVR5cGVVUkws
IHVybCk7Ci0gICAgbV9kYXRhT2JqZWN0LT5zZXRVcmxUaXRsZSh0aXRsZSk7CisgICAgbV9kYXRh
T2JqZWN0LT5zZXRVUkwodXJsLCB0aXRsZSk7CiAKICAgICAvLyBUaGUgVVJMIGNhbiBhbHNvIGJl
IHVzZWQgYXMgcGxhaW4gdGV4dC4KICAgICBtX2RhdGFPYmplY3QtPnNldERhdGEobWltZVR5cGVU
ZXh0UGxhaW4sIHVybC5zdHJpbmcoKSk7CiAKICAgICAvLyBUaGUgVVJMIGNhbiBhbHNvIGJlIHVz
ZWQgYXMgYW4gSFRNTCBmcmFnbWVudC4KLSAgICBtX2RhdGFPYmplY3QtPnNldERhdGEobWltZVR5
cGVUZXh0SFRNTCwgdXJsVG9NYXJrdXAodXJsLCB0aXRsZSkpOwotICAgIG1fZGF0YU9iamVjdC0+
c2V0SHRtbEJhc2VVcmwodXJsKTsKKyAgICBtX2RhdGFPYmplY3QtPnNldEhUTUwodXJsVG9NYXJr
dXAodXJsLCB0aXRsZSksIHVybCk7CiB9CiAKIHZvaWQgQ2xpcGJvYXJkQ2hyb21pdW06OndyaXRl
UmFuZ2UoUmFuZ2UqIHNlbGVjdGVkUmFuZ2UsIEZyYW1lKiBmcmFtZSkKQEAgLTQ1NCw5ICs0NTgs
NyBAQCB2b2lkIENsaXBib2FyZENocm9taXVtOjp3cml0ZVJhbmdlKFJhbmdlKiBzZWxlY3RlZFJh
bmdlLCBGcmFtZSogZnJhbWUpCiAgICAgaWYgKCFtX2RhdGFPYmplY3QpCiAgICAgICAgICByZXR1
cm47CiAKLSAgICBtX2RyYWdTdG9yYWdlVXBkYXRlZCA9IHRydWU7Ci0gICAgbV9kYXRhT2JqZWN0
LT5zZXREYXRhKG1pbWVUeXBlVGV4dEhUTUwsIGNyZWF0ZU1hcmt1cChzZWxlY3RlZFJhbmdlLCAw
LCBBbm5vdGF0ZUZvckludGVyY2hhbmdlLCBmYWxzZSwgUmVzb2x2ZU5vbkxvY2FsVVJMcykpOwot
ICAgIG1fZGF0YU9iamVjdC0+c2V0SHRtbEJhc2VVcmwoZnJhbWUtPmRvY3VtZW50KCktPnVybCgp
KTsKKyAgICBtX2RhdGFPYmplY3QtPnNldEhUTUwoY3JlYXRlTWFya3VwKHNlbGVjdGVkUmFuZ2Us
IDAsIEFubm90YXRlRm9ySW50ZXJjaGFuZ2UsIGZhbHNlLCBSZXNvbHZlTm9uTG9jYWxVUkxzKSwg
ZnJhbWUtPmRvY3VtZW50KCktPnVybCgpKTsKIAogICAgIFN0cmluZyBzdHIgPSBmcmFtZS0+ZWRp
dG9yKCktPnNlbGVjdGVkVGV4dCgpOwogI2lmIE9TKFdJTkRPV1MpCkBAIC00NzcsNzYgKzQ3OSwy
NCBAQCB2b2lkIENsaXBib2FyZENocm9taXVtOjp3cml0ZVBsYWluVGV4dChjb25zdCBTdHJpbmcm
IHRleHQpCiAjZW5kaWYKICAgICByZXBsYWNlTkJTUFdpdGhTcGFjZShzdHIpOwogCi0gICAgbV9k
cmFnU3RvcmFnZVVwZGF0ZWQgPSB0cnVlOwogICAgIG1fZGF0YU9iamVjdC0+c2V0RGF0YShtaW1l
VHlwZVRleHRQbGFpbiwgc3RyKTsKIH0KIAogYm9vbCBDbGlwYm9hcmRDaHJvbWl1bTo6aGFzRGF0
YSgpCiB7CiAgICAgQVNTRVJUKGlzRm9yRHJhZ0FuZERyb3AoKSk7Ci0gICAgaWYgKCFtX2RhdGFP
YmplY3QpCi0gICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBtX2RhdGFPYmplY3Qt
Pmhhc0RhdGEoKTsKKyAgICByZXR1cm4gbV9kYXRhT2JqZWN0LT5pdGVtcygpLT5sZW5ndGgoKSA+
IDA7CiB9CiAKICNpZiBFTkFCTEUoREFUQV9UUkFOU0ZFUl9JVEVNUykKIFBhc3NSZWZQdHI8RGF0
YVRyYW5zZmVySXRlbUxpc3Q+IENsaXBib2FyZENocm9taXVtOjppdGVtcygpCiB7Ci0gICAgaWYg
KCFtX2RhdGFPYmplY3QpCi0gICAgICAgIC8vIFJldHVybiBhbiB1bmFzc29jaWF0ZWQgZW1wdHkg
bGlzdC4KLSAgICAgICAgcmV0dXJuIERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW06OmNyZWF0
ZSh0aGlzLCBtX2ZyYW1lLT5kb2N1bWVudCgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwot
Ci0gICAgaWYgKCFtX2l0ZW1MaXN0KQotICAgICAgICBtX2l0ZW1MaXN0ID0gRGF0YVRyYW5zZmVy
SXRlbUxpc3RDaHJvbWl1bTo6Y3JlYXRlKHRoaXMsIG1fZnJhbWUtPmRvY3VtZW50KCktPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKSk7Ci0KICAgICAvLyBGSVhNRTogQWNjb3JkaW5nIHRvIHRoZSBz
cGVjLCB3ZSBhcmUgc3VwcG9zZWQgdG8gcmV0dXJuIHRoZSBzYW1lIGNvbGxlY3Rpb24gb2YgaXRl
bXMgZWFjaAogICAgIC8vIHRpbWUuIFdlIG5vdyByZXR1cm4gYSB3cmFwcGVyIHRoYXQgYWx3YXlz
IHdyYXBzIHRoZSAqc2FtZSogc2V0IG9mIGl0ZW1zLCBzbyBKUyBzaG91bGRuJ3QgYmUKICAgICAv
LyBhYmxlIHRvIHRlbGwsIGJ1dCB3ZSBwcm9iYWJseSBzdGlsbCB3YW50IHRvIGZpeCB0aGlzLgot
ICAgIHJldHVybiBEYXRhVHJhbnNmZXJJdGVtTGlzdFBvbGljeVdyYXBwZXI6OmNyZWF0ZSh0aGlz
LCBtX2l0ZW1MaXN0KTsKLX0KLQotLy8gRklYTUU6IGludGVncmF0ZSBDaHJvbWl1bURhdGFPYmpl
Y3QgYW5kIERhdGFUcmFuc2Zlckl0ZW1MaXN0IHJhdGhlciB0aGFuIGhvbGRpbmcgdGhlbSBzZXBh
cmF0ZWx5IGFuZCBrZWVwaW5nIHRoZW0gc3luY2VkLgotdm9pZCBDbGlwYm9hcmRDaHJvbWl1bTo6
bWF5VXBkYXRlSXRlbXMoVmVjdG9yPFJlZlB0cjxEYXRhVHJhbnNmZXJJdGVtPiA+JiBpdGVtcykK
LXsKLSAgICBpZiAoIWl0ZW1zLmlzRW1wdHkoKSAmJiAhc3RvcmFnZUhhc1VwZGF0ZWQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaXRlbXMuY2xlYXIoKTsKLQotICAgIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Ci0KLSAgICBpZiAoaXNGb3JDb3B5QW5kUGFzdGUoKSAm
JiBwb2xpY3koKSA9PSBDbGlwYm9hcmRSZWFkYWJsZSkgewotICAgICAgICAvLyBJdGVyYXRlIHRo
cm91Z2ggdGhlIHR5cGVzIGFuZCBhZGQgdGhlbS4KLSAgICAgICAgSGFzaFNldDxTdHJpbmc+IHR5
cGVzID0gbV9kYXRhT2JqZWN0LT50eXBlcygpOwotICAgICAgICBmb3IgKEhhc2hTZXQ8U3RyaW5n
Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSB0eXBlcy5iZWdpbigpOyBpdCAhPSB0eXBlcy5lbmQoKTsg
KytpdCkKLSAgICAgICAgICAgIGl0ZW1zLmFwcGVuZChEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW06
OmNyZWF0ZUZyb21QYXN0ZWJvYXJkKHRoaXMsIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsICppdCkp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0g
ICAgU3RyaW5nIHBsYWluVGV4dCA9IG1fZGF0YU9iamVjdC0+Z2V0RGF0YShtaW1lVHlwZVRleHRQ
bGFpbiwgc3VjY2Vzcyk7Ci0gICAgaWYgKHN1Y2Nlc3MpCi0gICAgICAgIGl0ZW1zLmFwcGVuZChE
YXRhVHJhbnNmZXJJdGVtQ2hyb21pdW06OmNyZWF0ZSh0aGlzLCBzY3JpcHRFeGVjdXRpb25Db250
ZXh0LCBwbGFpblRleHQsIG1pbWVUeXBlVGV4dFBsYWluKSk7Ci0KLSAgICBzdWNjZXNzID0gZmFs
c2U7Ci0gICAgU3RyaW5nIGh0bWxUZXh0ID0gbV9kYXRhT2JqZWN0LT5nZXREYXRhKG1pbWVUeXBl
VGV4dEhUTUwsIHN1Y2Nlc3MpOwotICAgIGlmIChzdWNjZXNzKQotICAgICAgICBpdGVtcy5hcHBl
bmQoRGF0YVRyYW5zZmVySXRlbUNocm9taXVtOjpjcmVhdGUodGhpcywgc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCwgaHRtbFRleHQsIG1pbWVUeXBlVGV4dEhUTUwpKTsKLQotICAgIGlmIChtX2RhdGFP
YmplY3QtPmNvbnRhaW5zRmlsZW5hbWVzKCkpIHsKLSAgICAgICAgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIGZpbGVuYW1lcyA9IG1fZGF0YU9iamVjdC0+ZmlsZW5hbWVzKCk7Ci0gICAgICAgIGZvciAo
VmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZmlsZW5hbWVzLmJlZ2luKCk7IGl0
ICE9IGZpbGVuYW1lcy5lbmQoKTsgKytpdCkKLSAgICAgICAgICAgIGl0ZW1zLmFwcGVuZChEYXRh
VHJhbnNmZXJJdGVtQ2hyb21pdW06OmNyZWF0ZSh0aGlzLCBzY3JpcHRFeGVjdXRpb25Db250ZXh0
LCBGaWxlOjpjcmVhdGUoKml0KSkpOwotICAgIH0KLSAgICBtX2RyYWdTdG9yYWdlVXBkYXRlZCA9
IGZhbHNlOworICAgIHJldHVybiBEYXRhVHJhbnNmZXJJdGVtTGlzdFBvbGljeVdyYXBwZXI6OmNy
ZWF0ZSh0aGlzLCBtX2RhdGFPYmplY3QtPml0ZW1zKCkpOwogfQotCi1ib29sIENsaXBib2FyZENo
cm9taXVtOjpzdG9yYWdlSGFzVXBkYXRlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIChpc0ZvckNv
cHlBbmRQYXN0ZSgpICYmIHBsYXRmb3JtQ2xpcGJvYXJkQ2hhbmdlZCgpKSB8fCAoaXNGb3JEcmFn
QW5kRHJvcCgpICYmIG1fZHJhZ1N0b3JhZ2VVcGRhdGVkKTsKLX0KLQogI2VuZGlmCiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2No
cm9taXVtL0NsaXBib2FyZENocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5oCmluZGV4IDM3NzdhZDVjOTZmNmZlMTVjMTNlZjVlODhl
ODgxYmMwZDhhNTZiMDcuLmIxNTcxY2JmMWFhYTg3YWUxNjllZTQxMTIzNmQ2MWQ4YWZjNWNhNzcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENo
cm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJk
Q2hyb21pdW0uaApAQCAtMzcsOSArMzcsNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAg
Y2xhc3MgQ2FjaGVkSW1hZ2U7Ci0gICAgY2xhc3MgQ2hyb21pdW1EYXRhT2JqZWN0OwotICAgIGNs
YXNzIERhdGFUcmFuc2Zlckl0ZW07Ci0gICAgY2xhc3MgRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJv
bWl1bTsKICAgICBjbGFzcyBGcmFtZTsKICAgICBjbGFzcyBJbnRQb2ludDsKIApAQCAtODQsMTEg
KzgxLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgRU5BQkxFKERBVEFfVFJBTlNGRVJf
SVRFTVMpCiAgICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtTGlzdD4g
aXRlbXMoKTsKLQotICAgICAgICAvLyBJbnRlcm5hbCByb3V0aW5lcyB0byBrZWVwIHRoZSBsaXN0
IHJldHVybmVkIGJ5IGl0ZW1zKCkgKGkuZS4gbV9pdGVtTGlzdCkgc3luY2hyb25pemVkIHdpdGgg
dGhlIGNvbnRlbnQgb2YgdGhlIGNsaXBib2FyZCBkYXRhLgotICAgICAgICB2b2lkIG1heVVwZGF0
ZUl0ZW1zKFZlY3RvcjxSZWZQdHI8RGF0YVRyYW5zZmVySXRlbT4gPiYgaXRlbXMpOwotICAgICAg
ICBib29sIHN0b3JhZ2VIYXNVcGRhdGVkKCkgY29uc3Q7CiAjZW5kaWYKKyAgICAgICAgRnJhbWUq
IGZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZTsgfQogCiAgICAgcHJpdmF0ZToKICAgICAg
ICAgQ2xpcGJvYXJkQ2hyb21pdW0oQ2xpcGJvYXJkVHlwZSwgUGFzc1JlZlB0cjxDaHJvbWl1bURh
dGFPYmplY3Q+LCBDbGlwYm9hcmRBY2Nlc3NQb2xpY3ksIEZyYW1lKik7CkBAIC05NywxMyArOTEs
NiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgc2V0RHJhZ0ltYWdlKENhY2hl
ZEltYWdlKiwgTm9kZSosIGNvbnN0IEludFBvaW50Jik7CiAgICAgICAgIFJlZlB0cjxDaHJvbWl1
bURhdGFPYmplY3Q+IG1fZGF0YU9iamVjdDsKICAgICAgICAgRnJhbWUqIG1fZnJhbWU7Ci0KLSNp
ZiBFTkFCTEUoREFUQV9UUkFOU0ZFUl9JVEVNUykKLSAgICAgICAgUmVmUHRyPERhdGFUcmFuc2Zl
ckl0ZW1MaXN0Q2hyb21pdW0+IG1faXRlbUxpc3Q7Ci0jZW5kaWYKLQotICAgICAgICB1aW50NjRf
dCBtX29yaWdpbmFsU2VxdWVuY2VOdW1iZXI7Ci0gICAgICAgIGJvb2wgbV9kcmFnU3RvcmFnZVVw
ZGF0ZWQ7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkVXRpbGl0aWVzQ2hyb21pdW0u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkVXRpbGl0aWVz
Q2hyb21pdW0uY3BwCmluZGV4IDQ3NTcyYzViODhjMzA0YTNmNGI3YjEzMmQyNDMzNzVlMDZlMGNi
Y2QuLjYyY2Y5OWNlMGQ0NmU2YjMzZGZhNTU5Y2UxMTEwMDQ2ZDI2ZjNkOTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZFV0aWxpdGllc0Nocm9t
aXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRV
dGlsaXRpZXNDaHJvbWl1bS5jcHAKQEAgLTYwLDQgKzYwLDI2IEBAIHZvaWQgcmVwbGFjZU5CU1BX
aXRoU3BhY2UoU3RyaW5nJiBzdHIpCiAgICAgc3RyLnJlcGxhY2UoTm9uQnJlYWtpbmdTcGFjZUNo
YXJhY3RlciwgU3BhY2VDaGFyYWN0ZXIpOwogfQogCitTdHJpbmcgY29udmVydFVSSUxpc3RUb1VS
TChjb25zdCBTdHJpbmcmIHVyaUxpc3QpCit7CisgICAgVmVjdG9yPFN0cmluZz4gaXRlbXM7Cisg
ICAgLy8gTGluZSBzZXBhcmF0b3IgaXMgXHJcbiBwZXIgUkZDIDI0ODMgLSBob3dldmVyLCBmb3Ig
Y29tcGF0aWJpbGl0eQorICAgIC8vIHJlYXNvbnMgd2UgYWxsb3cganVzdCBcbiBoZXJlLgorICAg
IHVyaUxpc3Quc3BsaXQoJ1xuJywgaXRlbXMpOworICAgIC8vIFByb2Nlc3MgdGhlIGlucHV0IGFu
ZCByZXR1cm4gdGhlIGZpcnN0IHZhbGlkIFVSTC4gSW4gY2FzZSBubyBVUkxzIGNhbgorICAgIC8v
IGJlIGZvdW5kLCByZXR1cm4gYW4gZW1wdHkgc3RyaW5nLiBUaGlzIGlzIGluIGxpbmUgd2l0aCB0
aGUgSFRNTDUgc3BlYy4KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsg
KytpKSB7CisgICAgICAgIFN0cmluZyYgbGluZSA9IGl0ZW1zW2ldOworICAgICAgICBsaW5lID0g
bGluZS5zdHJpcFdoaXRlU3BhY2UoKTsKKyAgICAgICAgaWYgKGxpbmUuaXNFbXB0eSgpKQorICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChsaW5lWzBdID09ICcjJykKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICBLVVJMIHVybCA9IEtVUkwoUGFyc2VkVVJMU3RyaW5nLCBs
aW5lKTsKKyAgICAgICAgaWYgKHVybC5pc1ZhbGlkKCkpCisgICAgICAgICAgICByZXR1cm4gdXJs
OworICAgIH0KKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2Fy
ZFV0aWxpdGllc0Nocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9D
bGlwYm9hcmRVdGlsaXRpZXNDaHJvbWl1bS5oCmluZGV4IDdhZTUwMDQzYTE2Yjk2YjMyMTkyNjk3
ZDQwOGIyMzhiNThjMGE1ZTkuLjQ5YTQ4Mzg3MDQ2NzAxMzRhNjNmOWY4MGIzMmYxNjE5ZWJhYjdh
NWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2Fy
ZFV0aWxpdGllc0Nocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vQ2xpcGJvYXJkVXRpbGl0aWVzQ2hyb21pdW0uaApAQCAtNDQsNiArNDQsNyBAQCBQYXN0ZWJv
YXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyIGN1cnJlbnRQYXN0ZWJvYXJkQnVmZmVyKCk7CiB2
b2lkIHJlcGxhY2VOZXdsaW5lc1dpdGhXaW5kb3dzU3R5bGVOZXdsaW5lcyhTdHJpbmcmKTsKICNl
bmRpZgogdm9pZCByZXBsYWNlTkJTUFdpdGhTcGFjZShTdHJpbmcmKTsKK1N0cmluZyBjb252ZXJ0
VVJJTGlzdFRvVVJMKGNvbnN0IFN0cmluZyYgdXJpTGlzdCk7CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRGF0
YVRyYW5zZmVySXRlbUNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9t
aXVtL0RhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bS5jcHAKaW5kZXggNjk2ZWU2NTNlYWE2N2RjOTMy
NWJlMjY0ZDIzMjA5MjMwNjQ0ZGU5Zi4uYzIyNTA0MjhlYTljNTEwNGYzODJmOThmNzg2ZjEwOTlh
NGVlNjc4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRGF0
YVRyYW5zZmVySXRlbUNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
aHJvbWl1bS9EYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0uY3BwCkBAIC0zOCw3ICszOCw3IEBACiAj
aW5jbHVkZSAiQ2xpcGJvYXJkQ2hyb21pdW0uaCIKICNpbmNsdWRlICJDbGlwYm9hcmRNaW1lVHlw
ZXMuaCIKICNpbmNsdWRlICJDbGlwYm9hcmRVdGlsaXRpZXNDaHJvbWl1bS5oIgotI2luY2x1ZGUg
IkRhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0uaCIKKyNpbmNsdWRlICJEYXRhVHJhbnNmZXJJ
dGVtLmgiCiAjaW5jbHVkZSAiRmlsZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3VwcG9ydC5oIgog
I2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgpAQCAtNDYsODYgKzQ2LDc4IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotUGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0+IERhdGFU
cmFuc2Zlckl0ZW1DaHJvbWl1bTo6Y3JlYXRlRnJvbVBhc3RlYm9hcmQoUGFzc1JlZlB0cjxDbGlw
Ym9hcmQ+IG93bmVyLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJp
bmcmIHR5cGUpCitQYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bT4gRGF0YVRyYW5z
ZmVySXRlbUNocm9taXVtOjpjcmVhdGUoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcm
IGRhdGEpCiB7Ci0gICAgaWYgKHR5cGUgPT0gbWltZVR5cGVUZXh0UGxhaW4gfHwgdHlwZSA9PSBt
aW1lVHlwZVRleHRIVE1MKQotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IERhdGFUcmFuc2Zl
ckl0ZW1DaHJvbWl1bShvd25lciwgY29udGV4dCwgUGFzdGVib2FyZFNvdXJjZSwgRGF0YVRyYW5z
ZmVySXRlbTo6a2luZFN0cmluZywgdHlwZSwgU3RyaW5nKCkpKTsKLSAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bShvd25lciwgY29udGV4dCwgUGFzdGVib2Fy
ZFNvdXJjZSwgRGF0YVRyYW5zZmVySXRlbTo6a2luZEZpbGUsIHR5cGUsICIiKSk7CisgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0oRGF0YVRyYW5zZmVySXRl
bTo6a2luZFN0cmluZywgdHlwZSwgZGF0YSwgMCwgMCwgU3RyaW5nKCksIEtVUkwoKSkpOwogfQog
Ci1QYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bT4gRGF0YVRyYW5zZmVySXRlbUNo
cm9taXVtOjpjcmVhdGUoUGFzc1JlZlB0cjxDbGlwYm9hcmQ+IG93bmVyLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3Ry
aW5nJiBkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgdHlwZSkKK1Bhc3NSZWZQdHI8
RGF0YVRyYW5zZmVySXRlbUNocm9taXVtPiBEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW06OmNyZWF0
ZShQYXNzUmVmUHRyPEZpbGU+IGZpbGUpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEYXRh
VHJhbnNmZXJJdGVtQ2hyb21pdW0ob3duZXIsIGNvbnRleHQsIERhdGFUcmFuc2Zlckl0ZW1DaHJv
bWl1bTo6SW50ZXJuYWxTb3VyY2UsIGtpbmRTdHJpbmcsIHR5cGUsIGRhdGEpKTsKKyAgICByZXR1
cm4gYWRvcHRSZWYobmV3IERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bShEYXRhVHJhbnNmZXJJdGVt
OjpraW5kRmlsZSwgZmlsZS0+dHlwZSgpLCBTdHJpbmcoKSwgZmlsZSwgMCwgU3RyaW5nKCksIEtV
UkwoKSkpOwogfQogCi1QYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bT4gRGF0YVRy
YW5zZmVySXRlbUNocm9taXVtOjpjcmVhdGUoUGFzc1JlZlB0cjxDbGlwYm9hcmQ+IG93bmVyLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUGFzc1JlZlB0cjxGaWxlPiBmaWxlKQorUGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtQ2hy
b21pdW0+IERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bTo6Y3JlYXRlRnJvbVVSTChjb25zdCBTdHJp
bmcmIHVybCwgY29uc3QgU3RyaW5nJiB0aXRsZSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3
IERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bShvd25lciwgY29udGV4dCwgRGF0YVRyYW5zZmVySXRl
bUNocm9taXVtOjpJbnRlcm5hbFNvdXJjZSwgZmlsZSkpOworICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgRGF0YVRyYW5zZmVySXRlbUNocm9taXVtKERhdGFUcmFuc2Zlckl0ZW06OmtpbmRTdHJpbmcs
IG1pbWVUeXBlVGV4dFVSSUxpc3QsIHVybCwgMCwgMCwgdGl0bGUsIEtVUkwoKSkpOwogfQogCi1E
YXRhVHJhbnNmZXJJdGVtQ2hyb21pdW06OkRhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bShQYXNzUmVm
UHRyPENsaXBib2FyZD4gb3duZXIsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIERh
dGFTb3VyY2Ugc291cmNlLCBjb25zdCBTdHJpbmcmIGtpbmQsIGNvbnN0IFN0cmluZyYgdHlwZSwg
Y29uc3QgU3RyaW5nJiBkYXRhKQotICAgIDogbV9jb250ZXh0KGNvbnRleHQpCi0gICAgLCBtX293
bmVyKG93bmVyKQorUGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0+IERhdGFUcmFu
c2Zlckl0ZW1DaHJvbWl1bTo6Y3JlYXRlRnJvbUhUTUwoY29uc3QgU3RyaW5nJiBodG1sLCBjb25z
dCBLVVJMJiBiYXNlVVJMKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGF0YVRyYW5zZmVy
SXRlbUNocm9taXVtKERhdGFUcmFuc2Zlckl0ZW06OmtpbmRTdHJpbmcsIG1pbWVUeXBlVGV4dEhU
TUwsIGh0bWwsIDAsIDAsIFN0cmluZygpLCBiYXNlVVJMKSk7Cit9CisKK1Bhc3NSZWZQdHI8RGF0
YVRyYW5zZmVySXRlbUNocm9taXVtPiBEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW06OmNyZWF0ZShj
b25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIpCit7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0oRGF0YVRyYW5z
ZmVySXRlbTo6a2luZEZpbGUsIFN0cmluZygpLCBTdHJpbmcoKSwgMCwgYnVmZmVyLCBuYW1lLCBL
VVJMKCkpKTsKK30KKworUGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0+IERhdGFU
cmFuc2Zlckl0ZW1DaHJvbWl1bTo6Y3JlYXRlRnJvbVBhc3RlYm9hcmQoY29uc3QgU3RyaW5nJiB0
eXBlLCB1aW50NjRfdCBzZXF1ZW5jZU51bWJlcikKK3sKKyAgICBpZiAodHlwZSA9PSBtaW1lVHlw
ZUltYWdlUG5nKQorICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IERhdGFUcmFuc2Zlckl0ZW1D
aHJvbWl1bShEYXRhVHJhbnNmZXJJdGVtOjpraW5kRmlsZSwgdHlwZSwgc2VxdWVuY2VOdW1iZXIp
KTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bShEYXRh
VHJhbnNmZXJJdGVtOjpraW5kU3RyaW5nLCB0eXBlLCBzZXF1ZW5jZU51bWJlcikpOworfQorCitE
YXRhVHJhbnNmZXJJdGVtQ2hyb21pdW06OkRhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bShjb25zdCBT
dHJpbmcmIGtpbmQsIGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhLAorICAg
IFBhc3NSZWZQdHI8RmlsZT4gZmlsZSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IHNoYXJlZEJ1
ZmZlciwgY29uc3QgU3RyaW5nJiB0aXRsZSwgY29uc3QgS1VSTCYgYmFzZVVSTCkKKyAgICA6IG1f
c291cmNlKEludGVybmFsU291cmNlKQogICAgICwgbV9raW5kKGtpbmQpCiAgICAgLCBtX3R5cGUo
dHlwZSkKLSAgICAsIG1fc291cmNlKHNvdXJjZSkKICAgICAsIG1fZGF0YShkYXRhKQorICAgICwg
bV9maWxlKGZpbGUpCisgICAgLCBtX3NoYXJlZEJ1ZmZlcihzaGFyZWRCdWZmZXIpCisgICAgLCBt
X3RpdGxlKHRpdGxlKQorICAgICwgbV9iYXNlVVJMKGJhc2VVUkwpCiB7CiB9CiAKLURhdGFUcmFu
c2Zlckl0ZW1DaHJvbWl1bTo6RGF0YVRyYW5zZmVySXRlbUNocm9taXVtKFBhc3NSZWZQdHI8Q2xp
cGJvYXJkPiBvd25lciwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRGF0YVNvdXJj
ZSBzb3VyY2UsIFBhc3NSZWZQdHI8RmlsZT4gZmlsZSkKLSAgICA6IG1fY29udGV4dChjb250ZXh0
KQotICAgICwgbV9vd25lcihvd25lcikKLSAgICAsIG1fa2luZChraW5kRmlsZSkKLSAgICAsIG1f
dHlwZShmaWxlLmdldCgpID8gZmlsZS0+dHlwZSgpIDogU3RyaW5nKCkpCi0gICAgLCBtX3NvdXJj
ZShzb3VyY2UpCi0gICAgLCBtX2ZpbGUoZmlsZSkKK0RhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bTo6
RGF0YVRyYW5zZmVySXRlbUNocm9taXVtKGNvbnN0IFN0cmluZyYga2luZCwgY29uc3QgU3RyaW5n
JiB0eXBlLCB1aW50NjRfdCBzZXF1ZW5jZU51bWJlcikKKyAgICA6IG1fc291cmNlKFBhc3RlYm9h
cmRTb3VyY2UpCisgICAgLCBtX2tpbmQoa2luZCkKKyAgICAsIG1fdHlwZSh0eXBlKQorICAgICwg
bV9zZXF1ZW5jZU51bWJlcihzZXF1ZW5jZU51bWJlcikKIHsKIH0KIAotdm9pZCBEYXRhVHJhbnNm
ZXJJdGVtQ2hyb21pdW06OmdldEFzU3RyaW5nKFBhc3NSZWZQdHI8U3RyaW5nQ2FsbGJhY2s+IGNh
bGxiYWNrKSBjb25zdAordm9pZCBEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW06OmdldEFzU3RyaW5n
KFBhc3NSZWZQdHI8U3RyaW5nQ2FsbGJhY2s+IGNhbGxiYWNrLCBTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0KSBjb25zdAogewotICAgIGlmIChraW5kKCkgIT0ga2luZFN0cmluZykKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGNsaXBib2FyZENocm9taXVtKCktPnN0b3JhZ2VIYXNV
cGRhdGVkKCkpCisgICAgaWYgKCFjYWxsYmFjayB8fCBraW5kKCkgIT0gRGF0YVRyYW5zZmVySXRl
bTo6a2luZFN0cmluZykKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fc291cmNlID09IElu
dGVybmFsU291cmNlKSB7Ci0gICAgICAgIGNhbGxiYWNrLT5zY2hlZHVsZUNhbGxiYWNrKG1fY29u
dGV4dCwgbV9kYXRhKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChtX3Nv
dXJjZSA9PSBQYXN0ZWJvYXJkU291cmNlKTsKLQotICAgIC8vIFRoaXMgaXMgdWdseSBidXQgdGhl
cmUncyBubyByZWFsIGFsdGVybmF0aXZlLgotICAgIGlmICh0eXBlKCkgPT0gbWltZVR5cGVUZXh0
UGxhaW4pIHsKLSAgICAgICAgY2FsbGJhY2stPnNjaGVkdWxlQ2FsbGJhY2sobV9jb250ZXh0LCBQ
bGF0Zm9ybVN1cHBvcnQ6OmNsaXBib2FyZFJlYWRQbGFpblRleHQoY3VycmVudFBhc3RlYm9hcmRC
dWZmZXIoKSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICh0eXBlKCkgPT0gbWlt
ZVR5cGVUZXh0SFRNTCkgewotICAgICAgICBTdHJpbmcgaHRtbDsKLSAgICAgICAgS1VSTCBpZ25v
cmVkU291cmNlVVJMOwotICAgICAgICB1bnNpZ25lZCBpZ25vcmVkOwotICAgICAgICBQbGF0Zm9y
bVN1cHBvcnQ6OmNsaXBib2FyZFJlYWRIVE1MKGN1cnJlbnRQYXN0ZWJvYXJkQnVmZmVyKCksICZo
dG1sLCAmaWdub3JlZFNvdXJjZVVSTCwgJmlnbm9yZWQsICZpZ25vcmVkKTsKLSAgICAgICAgY2Fs
bGJhY2stPnNjaGVkdWxlQ2FsbGJhY2sobV9jb250ZXh0LCBodG1sKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBjYWxsYmFjay0+c2NoZWR1
bGVDYWxsYmFjayhjb250ZXh0LCBpbnRlcm5hbEdldEFzU3RyaW5nKCkpOwogfQogCiBQYXNzUmVm
UHRyPEJsb2I+IERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bTo6Z2V0QXNGaWxlKCkgY29uc3QKIHsK
LSAgICBpZiAoa2luZCgpICE9IGtpbmRGaWxlIHx8IGNsaXBib2FyZENocm9taXVtKCktPnN0b3Jh
Z2VIYXNVcGRhdGVkKCkpCisgICAgaWYgKGtpbmQoKSAhPSBEYXRhVHJhbnNmZXJJdGVtOjpraW5k
RmlsZSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBpZiAobV9zb3VyY2UgPT0gSW50ZXJuYWxT
b3VyY2UpCi0gICAgICAgIHJldHVybiBtX2ZpbGU7CisgICAgaWYgKG1fc291cmNlID09IEludGVy
bmFsU291cmNlKSB7CisgICAgICAgIGlmIChtX2ZpbGUpCisgICAgICAgICAgICByZXR1cm4gbV9m
aWxlOworICAgICAgICBBU1NFUlQobV9zaGFyZWRCdWZmZXIpOworICAgICAgICByZXR1cm4gMDsg
Ly8gRklYTUU6IFN1cHBvcnQgdGhpcz8KKyAgICB9CiAKICAgICBBU1NFUlQobV9zb3VyY2UgPT0g
UGFzdGVib2FyZFNvdXJjZSk7CiAgICAgaWYgKHR5cGUoKSA9PSBtaW1lVHlwZUltYWdlUG5nKSB7
CkBAIC0xNDYsMTIgKzEzOCw0MCBAQCBQYXNzUmVmUHRyPEJsb2I+IERhdGFUcmFuc2Zlckl0ZW1D
aHJvbWl1bTo6Z2V0QXNGaWxlKCkgY29uc3QKICAgICAgICAgYmxvYkRhdGEtPnNldENvbnRlbnRU
eXBlKG1pbWVUeXBlSW1hZ2VQbmcpOwogICAgICAgICByZXR1cm4gQmxvYjo6Y3JlYXRlKGJsb2JE
YXRhLnJlbGVhc2UoKSwgZGF0YS0+c2l6ZSgpKTsKICAgICB9CisKICAgICByZXR1cm4gMDsKIH0K
IAotQ2xpcGJvYXJkQ2hyb21pdW0qIERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bTo6Y2xpcGJvYXJk
Q2hyb21pdW0oKSBjb25zdAorU3RyaW5nIERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bTo6aW50ZXJu
YWxHZXRBc1N0cmluZygpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fa2luZCA9PSBEYXRhVHJhbnNm
ZXJJdGVtOjpraW5kU3RyaW5nKTsKKworICAgIGlmIChtX3NvdXJjZSA9PSBJbnRlcm5hbFNvdXJj
ZSkKKyAgICAgICAgcmV0dXJuIG1fZGF0YTsKKworICAgIEFTU0VSVChtX3NvdXJjZSA9PSBQYXN0
ZWJvYXJkU291cmNlKTsKKworICAgIFN0cmluZyBkYXRhOworICAgIC8vIFRoaXMgaXMgdWdseSBi
dXQgdGhlcmUncyBubyByZWFsIGFsdGVybmF0aXZlLgorICAgIGlmIChtX3R5cGUgPT0gbWltZVR5
cGVUZXh0UGxhaW4pCisgICAgICAgIGRhdGEgPSBQbGF0Zm9ybVN1cHBvcnQ6OmNsaXBib2FyZFJl
YWRQbGFpblRleHQoY3VycmVudFBhc3RlYm9hcmRCdWZmZXIoKSk7CisgICAgZWxzZSBpZiAobV90
eXBlID09IG1pbWVUeXBlVGV4dEhUTUwpIHsKKyAgICAgICAgS1VSTCBpZ25vcmVkU291cmNlVVJM
OworICAgICAgICB1bnNpZ25lZCBpZ25vcmVkOworICAgICAgICBQbGF0Zm9ybVN1cHBvcnQ6OmNs
aXBib2FyZFJlYWRIVE1MKGN1cnJlbnRQYXN0ZWJvYXJkQnVmZmVyKCksICZkYXRhLCAmaWdub3Jl
ZFNvdXJjZVVSTCwgJmlnbm9yZWQsICZpZ25vcmVkKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZGF0
YSA9IFBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJvYXJkUmVhZEN1c3RvbURhdGEoY3VycmVudFBhc3Rl
Ym9hcmRCdWZmZXIoKSwgbV90eXBlKTsKKworICAgIHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6OmNs
aXBib2FyZFNlcXVlbmNlTnVtYmVyKGN1cnJlbnRQYXN0ZWJvYXJkQnVmZmVyKCkpID09IG1fc2Vx
dWVuY2VOdW1iZXIKKyAgICAgICAgPyBkYXRhCisgICAgICAgIDogU3RyaW5nKCk7Cit9CisKK2Jv
b2wgRGF0YVRyYW5zZmVySXRlbUNocm9taXVtOjppc0ZpbGVuYW1lKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Q2xpcGJvYXJkQ2hyb21pdW0qPihtX293bmVyLmdldCgpKTsKKyAg
ICAvLyBGSVhNRTogV2hlbiB3ZSBwcm9wZXJseSBzdXBwb3J0IEZpbGUgZHJhZ291dCwgd2UnbGwg
bmVlZCB0byBtYWtlIHN1cmUKKyAgICAvLyB0aGlzIHdvcmtzIGFzIGV4cGVjdGVkIGZvciBEcmFn
RGF0YUNocm9taXVtLgorICAgIHJldHVybiBtX2tpbmQgPT0gRGF0YVRyYW5zZmVySXRlbTo6a2lu
ZEZpbGUgJiYgbV9maWxlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EYXRhVHJhbnNmZXJJdGVtQ2hyb21p
dW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RhdGFUcmFuc2Zlckl0ZW1D
aHJvbWl1bS5oCmluZGV4IDJhOTE5MDA2YmY5YTQwY2M3OTNiOTJjZjg2OGFhOGQzZDVhNTk3YTUu
Ljk2MDFlOTNhZTU1Mjk3Yzg5MGYyMjk5OGZiZGViYTI4MTFhMWI1ZWMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RhdGFUcmFuc2Zlckl0ZW1D
aHJvbWl1bS5oCkBAIC0zMyw0OCArMzMsNjIgQEAKIAogI2lmIEVOQUJMRShEQVRBX1RSQU5TRkVS
X0lURU1TKQogCi0jaW5jbHVkZSAiRGF0YVRyYW5zZmVySXRlbS5oIgorI2luY2x1ZGUgIkZpbGUu
aCIKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ2xp
cGJvYXJkOwotY2xhc3MgQ2xpcGJvYXJkQ2hyb21pdW07Ci1jbGFzcyBGaWxlOworY2xhc3MgQmxv
YjsKIGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CitjbGFzcyBTdHJpbmdDYWxsYmFjazsK
IAotY2xhc3MgRGF0YVRyYW5zZmVySXRlbUNocm9taXVtIDogcHVibGljIERhdGFUcmFuc2Zlckl0
ZW0geworY2xhc3MgRGF0YVRyYW5zZmVySXRlbUNocm9taXVtIDogcHVibGljIFJlZkNvdW50ZWQ8
RGF0YVRyYW5zZmVySXRlbUNocm9taXVtPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQ
dHI8RGF0YVRyYW5zZmVySXRlbUNocm9taXVtPiBjcmVhdGUoUGFzc1JlZlB0cjxDbGlwYm9hcmQ+
IG93bmVyLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBkYXRhLCBjb25z
dCBTdHJpbmcmIHR5cGUpOwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1D
aHJvbWl1bT4gY3JlYXRlKFBhc3NSZWZQdHI8Q2xpcGJvYXJkPiBvd25lciwgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8RmlsZT4pOwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPERh
dGFUcmFuc2Zlckl0ZW1DaHJvbWl1bT4gY3JlYXRlRnJvbVBhc3RlYm9hcmQoUGFzc1JlZlB0cjxD
bGlwYm9hcmQ+IG93bmVyLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiB0
eXBlKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0+IGNy
ZWF0ZShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSk7CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUNocm9taXVtPiBjcmVhdGUoUGFzc1JlZlB0cjxG
aWxlPik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUNocm9taXVtPiBj
cmVhdGVGcm9tVVJMKGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHRpdGxlKTsKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0+IGNyZWF0ZUZyb21I
VE1MKGNvbnN0IFN0cmluZyYgaHRtbCwgY29uc3QgS1VSTCYgYmFzZVVSTCk7CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUNocm9taXVtPiBjcmVhdGUoY29uc3QgU3RyaW5n
JiBmaWxlbmFtZSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+KTsKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0+IGNyZWF0ZUZyb21QYXN0ZWJvYXJkKGNvbnN0
IFN0cmluZyYgdHlwZSwgdWludDY0X3Qgc2VxdWVuY2VOdW1iZXIpOwogCi0gICAgdmlydHVhbCBT
dHJpbmcga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQotICAgIHZpcnR1YWwgU3RyaW5n
IHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZ2V0QXNT
dHJpbmcoUGFzc1JlZlB0cjxTdHJpbmdDYWxsYmFjaz4pIGNvbnN0OwotICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxCbG9iPiBnZXRBc0ZpbGUoKSBjb25zdDsKKyAgICBTdHJpbmcga2luZCgpIGNvbnN0
IHsgcmV0dXJuIG1fa2luZDsgfQorICAgIFN0cmluZyB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90
eXBlOyB9CisgICAgdm9pZCBnZXRBc1N0cmluZyhQYXNzUmVmUHRyPFN0cmluZ0NhbGxiYWNrPiwg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCopIGNvbnN0OworICAgIFBhc3NSZWZQdHI8QmxvYj4gZ2V0
QXNGaWxlKCkgY29uc3Q7CiAKLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIERhdGFUcmFuc2Zl
ckl0ZW1MaXN0Q2hyb21pdW07CisgICAgLy8gVXNlZCB0byBzdXBwb3J0IGxlZ2FjeSBEYXRhVHJh
bnNmZXIgQVBJcyBhbmQgcmVuZGVyZXItPmJyb3dzZXIgc2VyaWFsaXphdGlvbi4KKyAgICBTdHJp
bmcgaW50ZXJuYWxHZXRBc1N0cmluZygpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8U2hhcmVkQnVm
ZmVyPiBzaGFyZWRCdWZmZXIoKSBjb25zdCB7IHJldHVybiBtX3NoYXJlZEJ1ZmZlcjsgfQorICAg
IFN0cmluZyB0aXRsZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGl0bGU7IH0KKyAgICBLVVJMIGJhc2VV
UkwoKSBjb25zdCB7IHJldHVybiBtX2Jhc2VVUkw7IH0KKyAgICBib29sIGlzRmlsZW5hbWUoKSBj
b25zdDsKIAorcHJpdmF0ZToKICAgICBlbnVtIERhdGFTb3VyY2UgewogICAgICAgICBQYXN0ZWJv
YXJkU291cmNlLAogICAgICAgICBJbnRlcm5hbFNvdXJjZSwKICAgICB9OwogCi0gICAgRGF0YVRy
YW5zZmVySXRlbUNocm9taXVtKFBhc3NSZWZQdHI8Q2xpcGJvYXJkPiBvd25lciwgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIERhdGFTb3VyY2UsIGNvbnN0IFN0cmluZyYga2luZCwgY29uc3QgU3Ry
aW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpOwotICAgIERhdGFUcmFuc2Zlckl0ZW1DaHJv
bWl1bShQYXNzUmVmUHRyPENsaXBib2FyZD4gb3duZXIsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBEYXRhU291cmNlLCBQYXNzUmVmUHRyPEZpbGU+KTsKKyAgICBEYXRhVHJhbnNmZXJJdGVtQ2hy
b21pdW0oY29uc3QgU3RyaW5nJiBraW5kLCBjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmlu
ZyYgZGF0YSwKKyAgICAgICAgUGFzc1JlZlB0cjxGaWxlPiwgUGFzc1JlZlB0cjxTaGFyZWRCdWZm
ZXI+LCBjb25zdCBTdHJpbmcmIHRpdGxlLCBjb25zdCBLVVJMJiBiYXNlVVJMKTsKKyAgICBEYXRh
VHJhbnNmZXJJdGVtQ2hyb21pdW0oY29uc3QgU3RyaW5nJiBraW5kLCBjb25zdCBTdHJpbmcmIHR5
cGUsIHVpbnQ2NF90IHNlcXVlbmNlTnVtYmVyKTsKIAotICAgIENsaXBib2FyZENocm9taXVtKiBj
bGlwYm9hcmRDaHJvbWl1bSgpIGNvbnN0OwotCi0gICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
bV9jb250ZXh0OwotICAgIGNvbnN0IFJlZlB0cjxDbGlwYm9hcmQ+IG1fb3duZXI7CisgICAgY29u
c3QgRGF0YVNvdXJjZSBtX3NvdXJjZTsKICAgICBjb25zdCBTdHJpbmcgbV9raW5kOwogICAgIGNv
bnN0IFN0cmluZyBtX3R5cGU7Ci0gICAgY29uc3QgRGF0YVNvdXJjZSBtX3NvdXJjZTsKKwogICAg
IGNvbnN0IFN0cmluZyBtX2RhdGE7CiAgICAgUmVmUHRyPEZpbGU+IG1fZmlsZTsKKyAgICBSZWZQ
dHI8U2hhcmVkQnVmZmVyPiBtX3NoYXJlZEJ1ZmZlcjsKKyAgICAvLyBPcHRpb25hbCBtZXRhZGF0
YS4gQ3VycmVudGx5IHVzZWQgZm9yIFVSTCwgSFRNTCwgYW5kIGRyYWdnaW5nIGZpbGVzIGluLgor
ICAgIGNvbnN0IFN0cmluZyBtX3RpdGxlOworICAgIGNvbnN0IEtVUkwgbV9iYXNlVVJMOworCisg
ICAgdWludDY0X3QgbV9zZXF1ZW5jZU51bWJlcjsgLy8gT25seSB2YWxpZCB3aGVuIG1fc291cmNl
ID09IFBhc3RlYm9hcmRTb3VyY2UKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RhdGFUcmFuc2Zlckl0ZW1M
aXN0Q2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRGF0YVRy
YW5zZmVySXRlbUxpc3RDaHJvbWl1bS5jcHAKaW5kZXggM2EyODBmZTNiNTQwZDJlYzhmY2Y3Yjlj
YTkxOThkMjYzMDE4NmY3Ny4uOGMwOWYzMjJhODVkYzk5ZDU4Yjc1ZTgzYjM2ZDEzYWEwYmQyZTM4
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRGF0YVRyYW5z
ZmVySXRlbUxpc3RDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bS5jcHAKQEAgLTM3LDExOCArMzcsNzgg
QEAKICNpbmNsdWRlICJDaHJvbWl1bURhdGFPYmplY3QuaCIKICNpbmNsdWRlICJDbGlwYm9hcmRD
aHJvbWl1bS5oIgogI2luY2x1ZGUgIkNsaXBib2FyZE1pbWVUeXBlcy5oIgorI2luY2x1ZGUgIkNs
aXBib2FyZFV0aWxpdGllc0Nocm9taXVtLmgiCisjaW5jbHVkZSAiRGF0YVRyYW5zZmVySXRlbS5o
IgogI2luY2x1ZGUgIkRhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bS5oIgogI2luY2x1ZGUgIkV4Y2Vw
dGlvbkNvZGUuaCIKICNpbmNsdWRlICJGaWxlLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1
ZGUgIlBsYXRmb3JtU3VwcG9ydC5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQu
aCIKICNpbmNsdWRlICJUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NSZWZQdHI8
RGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bT4gRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1
bTo6Y3JlYXRlKFBhc3NSZWZQdHI8Q2xpcGJvYXJkPiBvd25lciwgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCkKK1Bhc3NSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bT4g
RGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bTo6Y3JlYXRlKCkKIHsKLSAgICByZXR1cm4gYWRv
cHRSZWYobmV3IERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0ob3duZXIsIGNvbnRleHQpKTsK
KyAgICByZXR1cm4gYWRvcHRSZWYobmV3IERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0oKSk7
CiB9CiAKLURhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW06OkRhdGFUcmFuc2Zlckl0ZW1MaXN0
Q2hyb21pdW0oUGFzc1JlZlB0cjxDbGlwYm9hcmQ+IG93bmVyLCBTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0KQotICAgIDogbV9vd25lcihvd25lcikKLSAgICAsIG1fY29udGV4dChjb250
ZXh0KQorUGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtPiBEYXRhVHJhbnNm
ZXJJdGVtTGlzdENocm9taXVtOjpjcmVhdGVGcm9tUGFzdGVib2FyZCgpCit7CisgICAgUmVmUHRy
PERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0+IGxpc3QgPSBjcmVhdGUoKTsKKyAgICB1aW50
NjQgc2VxdWVuY2VOdW1iZXIgPSBQbGF0Zm9ybVN1cHBvcnQ6OmNsaXBib2FyZFNlcXVlbmNlTnVt
YmVyKGN1cnJlbnRQYXN0ZWJvYXJkQnVmZmVyKCkpOworICAgIGJvb2wgaWdub3JlZDsKKyAgICBI
YXNoU2V0PFN0cmluZz4gdHlwZXMgPSBQbGF0Zm9ybVN1cHBvcnQ6OmNsaXBib2FyZFJlYWRBdmFp
bGFibGVUeXBlcyhjdXJyZW50UGFzdGVib2FyZEJ1ZmZlcigpLCAmaWdub3JlZCk7CisgICAgZm9y
IChIYXNoU2V0PFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdHlwZXMuYmVnaW4oKTsgaXQg
IT0gdHlwZXMuZW5kKCk7ICsraXQpCisgICAgICAgIGxpc3QtPm1faXRlbUxpc3QuYXBwZW5kKERh
dGFUcmFuc2Zlckl0ZW1DaHJvbWl1bTo6Y3JlYXRlRnJvbVBhc3RlYm9hcmQoKml0LCBzZXF1ZW5j
ZU51bWJlcikpOworICAgIHJldHVybiBsaXN0LnJlbGVhc2UoKTsKK30KKworRGF0YVRyYW5zZmVy
SXRlbUxpc3RDaHJvbWl1bTo6RGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bSgpCiB7CiB9CiAK
IHNpemVfdCBEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtOjpsZW5ndGgoKSBjb25zdAogewot
ICAgIGNsaXBib2FyZENocm9taXVtKCktPm1heVVwZGF0ZUl0ZW1zKG1faXRlbXMpOwotICAgIHJl
dHVybiBtX2l0ZW1zLnNpemUoKTsKKyAgICByZXR1cm4gbV9pdGVtTGlzdC5zaXplKCk7CiB9CiAK
LVBhc3NSZWZQdHI8RGF0YVRyYW5zZmVySXRlbT4gRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1
bTo6aXRlbSh1bnNpZ25lZCBsb25nIGluZGV4KQorUGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVt
Q2hyb21pdW0+IERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW06Oml0ZW0odW5zaWduZWQgbG9u
ZyBpbmRleCkKIHsKLSAgICBjbGlwYm9hcmRDaHJvbWl1bSgpLT5tYXlVcGRhdGVJdGVtcyhtX2l0
ZW1zKTsKICAgICBpZiAoaW5kZXggPj0gbGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiAwOwotICAg
IHJldHVybiBtX2l0ZW1zW2luZGV4XTsKKyAgICByZXR1cm4gbV9pdGVtTGlzdFtpbmRleF07CiB9
CiAKIHZvaWQgRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bTo6ZGVsZXRlSXRlbSh1bnNpZ25l
ZCBsb25nIGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBjbGlwYm9hcmRDaHJvbWl1
bSgpLT5tYXlVcGRhdGVJdGVtcyhtX2l0ZW1zKTsKICAgICBpZiAoaW5kZXggPj0gbGVuZ3RoKCkp
CiAgICAgICAgIHJldHVybjsKLSAgICBSZWZQdHI8RGF0YVRyYW5zZmVySXRlbT4gaXRlbSA9IG1f
aXRlbXNbaW5kZXhdOwotCi0gICAgUmVmUHRyPENocm9taXVtRGF0YU9iamVjdD4gZGF0YU9iamVj
dCA9IGNsaXBib2FyZENocm9taXVtKCktPmRhdGFPYmplY3QoKTsKLSAgICBpZiAoIWRhdGFPYmpl
Y3QpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChpdGVtLT5raW5kKCkgPT0gRGF0YVRyYW5z
ZmVySXRlbTo6a2luZFN0cmluZykgewotICAgICAgICBtX2l0ZW1zLnJlbW92ZShpbmRleCk7Ci0g
ICAgICAgIGRhdGFPYmplY3QtPmNsZWFyRGF0YShpdGVtLT50eXBlKCkpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGl0ZW0tPmtpbmQoKSA9PSBEYXRhVHJhbnNmZXJJdGVt
OjpraW5kRmlsZSk7Ci0gICAgUmVmUHRyPEJsb2I+IGJsb2IgPSBpdGVtLT5nZXRBc0ZpbGUoKTsK
LSAgICBpZiAoIWJsb2IgfHwgIWJsb2ItPmlzRmlsZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtX2l0ZW1zLmNsZWFyKCk7Ci0gICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcyA9
IGRhdGFPYmplY3QtPmZpbGVuYW1lcygpOwotICAgIFZlY3RvcjxTdHJpbmc+IGNvcGllZEZpbGVu
YW1lczsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZpbGVuYW1lcy5zaXplKCk7ICsraSkg
ewotICAgICAgICBpZiAoZmlsZW5hbWVzW2ldICE9IHN0YXRpY19jYXN0PEZpbGUqPihibG9iLmdl
dCgpKS0+cGF0aCgpKQotICAgICAgICAgICAgY29waWVkRmlsZW5hbWVzLmFwcGVuZChzdGF0aWNf
Y2FzdDxGaWxlKj4oYmxvYi5nZXQoKSktPnBhdGgoKSk7Ci0gICAgfQotICAgIGRhdGFPYmplY3Qt
PnNldEZpbGVuYW1lcyhjb3BpZWRGaWxlbmFtZXMpOworICAgIG1faXRlbUxpc3QucmVtb3ZlKGlu
ZGV4KTsKIH0KIAogdm9pZCBEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtOjpjbGVhcigpCiB7
Ci0gICAgbV9pdGVtcy5jbGVhcigpOwotICAgIGNsaXBib2FyZENocm9taXVtKCktPmNsZWFyQWxs
RGF0YSgpOworICAgIG1faXRlbUxpc3QuY2xlYXIoKTsKIH0KIAogdm9pZCBEYXRhVHJhbnNmZXJJ
dGVtTGlzdENocm9taXVtOjphZGQoY29uc3QgU3RyaW5nJiBkYXRhLCBjb25zdCBTdHJpbmcmIHR5
cGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIFJlZlB0cjxDaHJvbWl1bURhdGFPYmplY3Q+
IGRhdGFPYmplY3QgPSBjbGlwYm9hcmRDaHJvbWl1bSgpLT5kYXRhT2JqZWN0KCk7Ci0gICAgaWYg
KCFkYXRhT2JqZWN0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBib29sIHN1Y2Nlc3MgPSBmYWxz
ZTsKLSAgICBkYXRhT2JqZWN0LT5nZXREYXRhKHR5cGUsIHN1Y2Nlc3MpOwotICAgIGlmIChzdWNj
ZXNzKSB7Ci0gICAgICAgIC8vIEFkZGluZyBkYXRhIHdpdGggdGhlIHNhbWUgdHlwZSBzaG91bGQg
ZmFpbCB3aXRoIE5PVF9TVVBQT1JURURfRVJSLgorICAgIGlmICghaW50ZXJuYWxBZGRTdHJpbmdJ
dGVtKERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bTo6Y3JlYXRlKHR5cGUsIGRhdGEpKSkKICAgICAg
ICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IG1faXRlbXMuY2xlYXIoKTsKLSAgICBkYXRhT2JqZWN0LT5zZXREYXRhKHR5cGUsIGRhdGEpOwog
fQogCi12b2lkIERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW06OmFkZChQYXNzUmVmUHRyPEZp
bGU+IGZpbGUpCit2b2lkIERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW06OmFkZChQYXNzUmVm
UHRyPEZpbGU+IGZpbGUsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCiB7CiAgICAg
aWYgKCFmaWxlKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8Q2hyb21pdW1EYXRhT2Jq
ZWN0PiBkYXRhT2JqZWN0ID0gY2xpcGJvYXJkQ2hyb21pdW0oKS0+ZGF0YU9iamVjdCgpOwotICAg
IGlmICghZGF0YU9iamVjdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9pdGVtcy5jbGVhcigp
OwotCi0gICAgLy8gVXBkYXRpbmcgZGF0YU9iamVjdCdzIGZpbGVzZXQgc28gdGhhdCB3ZSB3aWxs
IGJlIHNlZWluZyB0aGUgY29uc2lzdGVudCBsaXN0IGV2ZW4gaWYgd2UgcmVjb25zdHJ1Y3QgdGhl
IGl0ZW1zIGxhdGVyLgotICAgIGRhdGFPYmplY3QtPmFkZEZpbGVuYW1lKGZpbGUtPnBhdGgoKSk7
Ci0KLSAgICAvLyBGSVhNRTogQWxsb3cgbXVsdGlwbGUgZmlsZXMgdG8gYmUgZHJhZ2dlZCBvdXQg
YXQgb25jZSBpZiBtb3JlIHRoYW4gb25lIGZpbGUgaXMgYWRkZWQgdG8gdGhlIHN0b3JhZ2UuIEZv
ciBub3cgd2UgbWFudWFsbHkgc2V0IHVwIGRyYWctb3V0IGRvd25sb2FkIFVSTCBvbmx5IGlmIGl0
IGhhcyBub3QgYmVlbiBzZXQgeWV0LgotICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwotICAgIGRh
dGFPYmplY3QtPmdldERhdGEobWltZVR5cGVEb3dubG9hZFVSTCwgc3VjY2Vzcyk7Ci0gICAgaWYg
KHN1Y2Nlc3MpCi0gICAgICAgIHJldHVybjsKKyAgICBtX2l0ZW1MaXN0LmFwcGVuZChEYXRhVHJh
bnNmZXJJdGVtQ2hyb21pdW06OmNyZWF0ZShmaWxlKSk7CiAKLSAgICBLVVJMIHVybEZvckRvd25s
b2FkID0gQmxvYlVSTDo6Y3JlYXRlUHVibGljVVJMKG1fY29udGV4dC0+c2VjdXJpdHlPcmlnaW4o
KSk7CisgICAgLy8gRklYTUU6IEFsbG93IG11bHRpcGxlIGZpbGVzIHRvIGJlIGRyYWdnZWQgb3V0
IGF0IG9uY2UgaWYgbW9yZSB0aGFuIG9uZSBmaWxlIGlzIGFkZGVkIHRvIHRoZSBzdG9yYWdlLgor
ICAgIEtVUkwgdXJsRm9yRG93bmxvYWQgPSBCbG9iVVJMOjpjcmVhdGVQdWJsaWNVUkwoY29udGV4
dC0+c2VjdXJpdHlPcmlnaW4oKSk7CiAgICAgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6cmVnaXN0
ZXJCbG9iVVJMKHVybEZvckRvd25sb2FkLCBmaWxlLT51cmwoKSk7CiAKICAgICBTdHJpbmdCdWls
ZGVyIGRvd25sb2FkVXJsOwpAQCAtMTU3LDEyICsxMTcsMjYgQEAgdm9pZCBEYXRhVHJhbnNmZXJJ
dGVtTGlzdENocm9taXVtOjphZGQoUGFzc1JlZlB0cjxGaWxlPiBmaWxlKQogICAgIGRvd25sb2Fk
VXJsLmFwcGVuZChlbmNvZGVXaXRoVVJMRXNjYXBlU2VxdWVuY2VzKGZpbGUtPm5hbWUoKSkpOwog
ICAgIGRvd25sb2FkVXJsLmFwcGVuZCgiOiIpOwogICAgIGRvd25sb2FkVXJsLmFwcGVuZCh1cmxG
b3JEb3dubG9hZC5zdHJpbmcoKSk7Ci0gICAgZGF0YU9iamVjdC0+c2V0RGF0YShtaW1lVHlwZURv
d25sb2FkVVJMLCBkb3dubG9hZFVybC50b1N0cmluZygpKTsKKworICAgIGludGVybmFsQWRkU3Ry
aW5nSXRlbShEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW06OmNyZWF0ZShtaW1lVHlwZURvd25sb2Fk
VVJMLCBkb3dubG9hZFVybC50b1N0cmluZygpKSk7Cit9CisKKy8vIEZJWE1FOiBNYWtlIHN1cmUg
aXRlbSBpcyByZWxlYXNlZCBjb3JyZWN0bHkgaW4gY2FzZSBvZiBmYWlsdXJlLgorYm9vbCBEYXRh
VHJhbnNmZXJJdGVtTGlzdENocm9taXVtOjppbnRlcm5hbEFkZFN0cmluZ0l0ZW0oUGFzc1JlZlB0
cjxEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0+IGl0ZW0pCit7CisgICAgQVNTRVJUKGl0ZW0tPmtp
bmQoKSA9PSBEYXRhVHJhbnNmZXJJdGVtOjpraW5kU3RyaW5nKTsKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1faXRlbUxpc3Quc2l6ZSgpOyArK2kpCisgICAgICAgIGlmIChtX2l0ZW1MaXN0
W2ldLT5raW5kKCkgPT0gRGF0YVRyYW5zZmVySXRlbTo6a2luZFN0cmluZyAmJiBtX2l0ZW1MaXN0
W2ldLT50eXBlKCkgPT0gaXRlbS0+dHlwZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgbV9pdGVtTGlzdC5hcHBlbmQoaXRlbSk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLUNs
aXBib2FyZENocm9taXVtKiBEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtOjpjbGlwYm9hcmRD
aHJvbWl1bSgpIGNvbnN0Cit2b2lkIERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW06OmludGVy
bmFsQWRkRmlsZUl0ZW0oUGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0+IGl0ZW0p
CiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PENsaXBib2FyZENocm9taXVtKj4obV9vd25lci5n
ZXQoKSk7CisgICAgQVNTRVJUKGl0ZW0tPmtpbmQoKSA9PSBEYXRhVHJhbnNmZXJJdGVtOjpraW5k
RmlsZSk7CisgICAgbV9pdGVtTGlzdC5hcHBlbmQoaXRlbSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Rh
dGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2No
cm9taXVtL0RhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0uaAppbmRleCA2MWJkMTY3YzcyMzI0
ZTVlNWUxOGNlNTdhZmUzYTNhMjA1MzZlMmVkLi4wMmNkM2ZkNDEwYWI2YmE3ZWFmODE1N2EyN2Zk
ZmRkZDMyMTI3MTEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9EYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bS5oCkBAIC0zMyw0MCAr
MzMsNDMgQEAKIAogI2lmIEVOQUJMRShEQVRBX1RSQU5TRkVSX0lURU1TKQogCi0jaW5jbHVkZSAi
RGF0YVRyYW5zZmVySXRlbUxpc3QuaCIKKyNpbmNsdWRlICJEYXRhVHJhbnNmZXJJdGVtQ2hyb21p
dW0uaCIKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xh
c3MgQ2xpcGJvYXJkOwotY2xhc3MgQ2xpcGJvYXJkQ2hyb21pdW07CitjbGFzcyBDaHJvbWl1bURh
dGFPYmplY3Q7CiBjbGFzcyBGaWxlOworY2xhc3MgS1VSTDsKIGNsYXNzIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQ7CiAKIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CiAKLWNsYXNzIERhdGFUcmFu
c2Zlckl0ZW1MaXN0Q2hyb21pdW0gOiBwdWJsaWMgRGF0YVRyYW5zZmVySXRlbUxpc3QgeworY2xh
c3MgRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bSA6IHB1YmxpYyBSZWZDb3VudGVkPERhdGFU
cmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0
cjxEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtPiBjcmVhdGUoUGFzc1JlZlB0cjxDbGlwYm9h
cmQ+LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0
YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bT4gY3JlYXRlKCk7CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8RGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bT4gY3JlYXRlRnJvbVBhc3RlYm9hcmQoKTsK
IAotICAgIHZpcnR1YWwgc2l6ZV90IGxlbmd0aCgpIGNvbnN0OwotICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxEYXRhVHJhbnNmZXJJdGVtPiBpdGVtKHVuc2lnbmVkIGxvbmcgaW5kZXgpOworICAgIHNp
emVfdCBsZW5ndGgoKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1DaHJv
bWl1bT4gaXRlbSh1bnNpZ25lZCBsb25nIGluZGV4KTsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50
IFY4RGF0YVRyYW5zZmVySXRlbUxpc3Q6OmluZGV4ZWRQcm9wZXJ0eURlbGV0ZXIgdG8gZ2V0IHRo
aXMgY2FsbGVkLgotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVJdGVtKHVuc2lnbmVkIGxvbmcgaW5k
ZXgsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoKTsKLSAgICB2aXJ0
dWFsIHZvaWQgYWRkKGNvbnN0IFN0cmluZyYgZGF0YSwgY29uc3QgU3RyaW5nJiB0eXBlLCBFeGNl
cHRpb25Db2RlJik7Ci0gICAgdmlydHVhbCB2b2lkIGFkZChQYXNzUmVmUHRyPEZpbGU+KTsKKyAg
ICB2b2lkIGRlbGV0ZUl0ZW0odW5zaWduZWQgbG9uZyBpbmRleCwgRXhjZXB0aW9uQ29kZSYpOwor
ICAgIHZvaWQgY2xlYXIoKTsKKyAgICB2b2lkIGFkZChjb25zdCBTdHJpbmcmIGRhdGEsIGNvbnN0
IFN0cmluZyYgdHlwZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgYWRkKFBhc3NSZWZQdHI8
RmlsZT4sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKIAogcHJpdmF0ZToKLSAgICBEYXRhVHJh
bnNmZXJJdGVtTGlzdENocm9taXVtKFBhc3NSZWZQdHI8Q2xpcGJvYXJkPiwgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCopOwotICAgIENsaXBib2FyZENocm9taXVtKiBjbGlwYm9hcmRDaHJvbWl1bSgp
IGNvbnN0OworICAgIGZyaWVuZCBjbGFzcyBDaHJvbWl1bURhdGFPYmplY3Q7CiAKLSAgICBSZWZQ
dHI8Q2xpcGJvYXJkPiBtX293bmVyOwotICAgIC8vIEluZGlyZWN0bHkgb3duZWQgYnkgb3VyIHBh
cmVudC4KLSAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBtX2NvbnRleHQ7Ci0gICAgLy8gRklY
TUU6IG1faXRlbXMgc2hvdWxkIG5vdCBiZSBtdXRhYmxlLiBUaGlzIHdpbGwgYmUgZml4ZWQgYnkg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2NTk4Ci0gICAgbXV0YWJs
ZSBWZWN0b3I8UmVmUHRyPERhdGFUcmFuc2Zlckl0ZW0+ID4gbV9pdGVtczsKKyAgICBEYXRhVHJh
bnNmZXJJdGVtTGlzdENocm9taXVtKCk7CisKKyAgICAvLyBGSVhNRTogQ29tYmluZSB3aXRoIENo
cm9taXVtRGF0YU9iamVjdCB0byBlbGltaW5hdGUgdGhlIG5lZWQgZm9yIHRoZXNlIG1ldGhvZHMu
CisgICAgYm9vbCBpbnRlcm5hbEFkZFN0cmluZ0l0ZW0oUGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJ
dGVtQ2hyb21pdW0+KTsKKyAgICB2b2lkIGludGVybmFsQWRkRmlsZUl0ZW0oUGFzc1JlZlB0cjxE
YXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0+KTsKKworICAgIFZlY3RvcjxSZWZQdHI8RGF0YVRyYW5z
ZmVySXRlbUNocm9taXVtPiA+IG1faXRlbUxpc3Q7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EcmFnRGF0
YUNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RyYWdEYXRh
Q2hyb21pdW0uY3BwCmluZGV4IDNkOTRhMTliMjViODY4YjBmMGJlMWUwMmU2ZTA5Njk5MWU0M2I5
NGMuLmIxZWU5MjE3NzM0ZTVkM2Y1ZDAzNjdiNzhhOTBlMTA3M2JmZjNhMmUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RyYWdEYXRhQ2hyb21pdW0uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RyYWdEYXRhQ2hyb21pdW0uY3Bw
CkBAIC01NywxMiArNTcsOSBAQCBib29sIERyYWdEYXRhOjpjb250YWluc1VSTChGcmFtZSosIEZp
bGVuYW1lQ29udmVyc2lvblBvbGljeSBmaWxlbmFtZVBvbGljeSkgY29ucwogU3RyaW5nIERyYWdE
YXRhOjphc1VSTChGcmFtZSosIEZpbGVuYW1lQ29udmVyc2lvblBvbGljeSBmaWxlbmFtZVBvbGlj
eSwgU3RyaW5nKiB0aXRsZSkgY29uc3QKIHsKICAgICBTdHJpbmcgdXJsOwotICAgIGlmIChtX3Bs
YXRmb3JtRHJhZ0RhdGEtPnR5cGVzKCkuY29udGFpbnMobWltZVR5cGVUZXh0VVJJTGlzdCkpIHsK
LSAgICAgICAgYm9vbCBpZ25vcmVkU3VjY2VzczsKLSAgICAgICAgdXJsID0gbV9wbGF0Zm9ybURy
YWdEYXRhLT5nZXREYXRhKG1pbWVUeXBlVVJMLCBpZ25vcmVkU3VjY2Vzcyk7Ci0gICAgICAgIGlm
ICh0aXRsZSkKLSAgICAgICAgICAgICp0aXRsZSA9IG1fcGxhdGZvcm1EcmFnRGF0YS0+dXJsVGl0
bGUoKTsKLSAgICB9IGVsc2UgaWYgKGZpbGVuYW1lUG9saWN5ID09IENvbnZlcnRGaWxlbmFtZXMg
JiYgY29udGFpbnNGaWxlcygpKSB7CisgICAgaWYgKG1fcGxhdGZvcm1EcmFnRGF0YS0+dHlwZXMo
KS5jb250YWlucyhtaW1lVHlwZVRleHRVUklMaXN0KSkKKyAgICAgICAgbV9wbGF0Zm9ybURyYWdE
YXRhLT5nZXRVUkwodXJsLCB0aXRsZSk7CisgICAgZWxzZSBpZiAoZmlsZW5hbWVQb2xpY3kgPT0g
Q29udmVydEZpbGVuYW1lcyAmJiBjb250YWluc0ZpbGVzKCkpIHsKICAgICAgICAgdXJsID0gUGxh
dGZvcm1TdXBwb3J0OjpmaWxlUGF0aFRvVVJMKFBsYXRmb3JtU3VwcG9ydDo6Z2V0QWJzb2x1dGVQ
YXRoKG1fcGxhdGZvcm1EcmFnRGF0YS0+ZmlsZW5hbWVzKClbMF0pKTsKICAgICB9CiAgICAgcmV0
dXJuIHVybDsKQEAgLTkyLDggKzg5LDcgQEAgYm9vbCBEcmFnRGF0YTo6Y29udGFpbnNQbGFpblRl
eHQoKSBjb25zdAogCiBTdHJpbmcgRHJhZ0RhdGE6OmFzUGxhaW5UZXh0KEZyYW1lKikgY29uc3QK
IHsKLSAgICBib29sIGlnbm9yZWRTdWNjZXNzOwotICAgIHJldHVybiBtX3BsYXRmb3JtRHJhZ0Rh
dGEtPmdldERhdGEobWltZVR5cGVUZXh0UGxhaW4sIGlnbm9yZWRTdWNjZXNzKTsKKyAgICByZXR1
cm4gbV9wbGF0Zm9ybURyYWdEYXRhLT5nZXREYXRhKG1pbWVUeXBlVGV4dFBsYWluKTsKIH0KIAog
Ym9vbCBEcmFnRGF0YTo6Y29udGFpbnNDb2xvcigpIGNvbnN0CkBAIC0xNDIsOSArMTM4LDEwIEBA
IFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gRHJhZ0RhdGE6OmFzRnJhZ21lbnQoRnJhbWUq
IGZyYW1lLCBQYXNzUmVmUHRyPFJhbmdlCiAgICAgfQogCiAgICAgaWYgKG1fcGxhdGZvcm1EcmFn
RGF0YS0+dHlwZXMoKS5jb250YWlucyhtaW1lVHlwZVRleHRIVE1MKSkgewotICAgICAgICBib29s
IGlnbm9yZWRTdWNjZXNzOwotICAgICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21l
bnQgPSBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoZnJhbWUtPmRvY3VtZW50KCksCi0gICAgICAg
ICAgICBtX3BsYXRmb3JtRHJhZ0RhdGEtPmdldERhdGEobWltZVR5cGVUZXh0SFRNTCwgaWdub3Jl
ZFN1Y2Nlc3MpLCBtX3BsYXRmb3JtRHJhZ0RhdGEtPmh0bWxCYXNlVXJsKCksIEZyYWdtZW50U2Ny
aXB0aW5nTm90QWxsb3dlZCk7CisgICAgICAgIFN0cmluZyBodG1sOworICAgICAgICBLVVJMIGJh
c2VVUkw7CisgICAgICAgIG1fcGxhdGZvcm1EcmFnRGF0YS0+Z2V0SFRNTChodG1sLCBiYXNlVVJM
KTsKKyAgICAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJh
Z21lbnRGcm9tTWFya3VwKGZyYW1lLT5kb2N1bWVudCgpLCBodG1sLCBiYXNlVVJMLCBGcmFnbWVu
dFNjcmlwdGluZ05vdEFsbG93ZWQpOwogICAgICAgICByZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgp
OwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRHJh
Z0RhdGEuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRHJhZ0RhdGEuY3BwCmlu
ZGV4IDMyMmRmYmFlYmE0NWUyZDlmMzg5YzQyMmFjMThiZWYwNTFmODAyYmIuLjBjZjUyMGU0NWM1
YTFiMzI2YTViNWExNzliMGI0NjM2YjkxZmE5OGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkRyYWdEYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJEcmFnRGF0YS5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKIAogI2luY2x1ZGUgIkNocm9t
aXVtRGF0YU9iamVjdC5oIgogI2luY2x1ZGUgIkNsaXBib2FyZE1pbWVUeXBlcy5oIgorI2luY2x1
ZGUgIkRhdGFUcmFuc2Zlckl0ZW0uaCIKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJEYXRhLmgiCiAj
aW5jbHVkZSAicGxhdGZvcm0vV2ViU3RyaW5nLmgiCiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViVVJM
LmgiCkBAIC02OSw1NyArNzAsMjcgQEAgdm9pZCBXZWJEcmFnRGF0YTo6YXNzaWduKGNvbnN0IFdl
YkRyYWdEYXRhJiBvdGhlcikKIFdlYlZlY3RvcjxXZWJEcmFnRGF0YTo6SXRlbT4gV2ViRHJhZ0Rh
dGE6Oml0ZW1zKCkgY29uc3QKIHsKICAgICBWZWN0b3I8SXRlbT4gaXRlbUxpc3Q7Ci0gICAgY29u
c3QgSGFzaFNldDxTdHJpbmc+JiB0eXBlcyA9IG1fcHJpdmF0ZS0+dHlwZXMoKTsKLSAgICBpZiAo
dHlwZXMuY29udGFpbnMobWltZVR5cGVUZXh0UGxhaW4pKSB7Ci0gICAgICAgIEl0ZW0gaXRlbTsK
LSAgICAgICAgaXRlbS5zdG9yYWdlVHlwZSA9IEl0ZW06OlN0b3JhZ2VUeXBlU3RyaW5nOwotICAg
ICAgICBpdGVtLnN0cmluZ1R5cGUgPSBTdHJpbmcobWltZVR5cGVUZXh0UGxhaW4pOwotICAgICAg
ICBib29sIGlnbm9yZWQ7Ci0gICAgICAgIGl0ZW0uc3RyaW5nRGF0YSA9IG1fcHJpdmF0ZS0+Z2V0
RGF0YShtaW1lVHlwZVRleHRQbGFpbiwgaWdub3JlZCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX3ByaXZhdGUtPml0ZW1zKCktPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgRGF0YVRy
YW5zZmVySXRlbUNocm9taXVtKiBvcmlnaW5hbEl0ZW0gPSBtX3ByaXZhdGUtPml0ZW1zKCktPml0
ZW0oaSkuZ2V0KCk7CisgICAgICAgIC8vIFdlIGRvbid0IGhhbmRsZSBmaWxlbmFtZXMgaGVyZSwg
c2luY2UgdGhleSBhcmUgbmV2ZXIgdXNlZCBmb3IgZHJhZ2dpbmcgb3V0LgorICAgICAgICBBU1NF
UlQoIW9yaWdpbmFsSXRlbS0+aXNGaWxlbmFtZSgpKTsKKyAgICAgICAgV2ViRHJhZ0RhdGE6Okl0
ZW0gaXRlbTsKKyAgICAgICAgaWYgKG9yaWdpbmFsSXRlbS0+a2luZCgpID09IERhdGFUcmFuc2Zl
ckl0ZW06OmtpbmRTdHJpbmcpIHsKKyAgICAgICAgICAgIGl0ZW0uc3RvcmFnZVR5cGUgPSBJdGVt
OjpTdG9yYWdlVHlwZVN0cmluZzsKKyAgICAgICAgICAgIGl0ZW0uc3RyaW5nVHlwZSA9IG9yaWdp
bmFsSXRlbS0+dHlwZSgpOworICAgICAgICAgICAgaXRlbS5zdHJpbmdEYXRhID0gb3JpZ2luYWxJ
dGVtLT5pbnRlcm5hbEdldEFzU3RyaW5nKCk7CisgICAgICAgIH0gZWxzZSBpZiAob3JpZ2luYWxJ
dGVtLT5raW5kKCkgPT0gRGF0YVRyYW5zZmVySXRlbTo6a2luZEZpbGUpIHsKKyAgICAgICAgICAg
IGlmIChvcmlnaW5hbEl0ZW0tPnNoYXJlZEJ1ZmZlcigpKSB7CisgICAgICAgICAgICAgICAgaXRl
bS5zdG9yYWdlVHlwZSA9IEl0ZW06OlN0b3JhZ2VUeXBlQmluYXJ5RGF0YTsKKyAgICAgICAgICAg
ICAgICBpdGVtLmJpbmFyeURhdGEgPSBvcmlnaW5hbEl0ZW0tPnNoYXJlZEJ1ZmZlcigpOworICAg
ICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgY29udGludWU7IC8vIEZJWE1FOiBTdXBw
b3J0IEZpbGUgcHJvcGVybHkuCisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIGl0ZW0udGl0bGUgPSBvcmlnaW5hbEl0ZW0tPnRpdGxlKCk7
CisgICAgICAgIGl0ZW0uYmFzZVVSTCA9IG9yaWdpbmFsSXRlbS0+YmFzZVVSTCgpOwogICAgICAg
ICBpdGVtTGlzdC5hcHBlbmQoaXRlbSk7CiAgICAgfQotICAgIGlmICh0eXBlcy5jb250YWlucyht
aW1lVHlwZVRleHRVUklMaXN0KSkgewotICAgICAgICBJdGVtIGl0ZW07Ci0gICAgICAgIGl0ZW0u
c3RvcmFnZVR5cGUgPSBJdGVtOjpTdG9yYWdlVHlwZVN0cmluZzsKLSAgICAgICAgaXRlbS5zdHJp
bmdUeXBlID0gU3RyaW5nKG1pbWVUeXBlVGV4dFVSSUxpc3QpOwotICAgICAgICBib29sIGlnbm9y
ZWQ7Ci0gICAgICAgIGl0ZW0uc3RyaW5nRGF0YSA9IG1fcHJpdmF0ZS0+Z2V0RGF0YShtaW1lVHlw
ZVVSTCwgaWdub3JlZCk7Ci0gICAgICAgIGl0ZW0udGl0bGUgPSBtX3ByaXZhdGUtPnVybFRpdGxl
KCk7Ci0gICAgICAgIGl0ZW1MaXN0LmFwcGVuZChpdGVtKTsKLSAgICB9Ci0gICAgaWYgKHR5cGVz
LmNvbnRhaW5zKG1pbWVUeXBlVGV4dEhUTUwpKSB7Ci0gICAgICAgIEl0ZW0gaXRlbTsKLSAgICAg
ICAgaXRlbS5zdG9yYWdlVHlwZSA9IEl0ZW06OlN0b3JhZ2VUeXBlU3RyaW5nOwotICAgICAgICBp
dGVtLnN0cmluZ1R5cGUgPSBTdHJpbmcobWltZVR5cGVUZXh0SFRNTCk7Ci0gICAgICAgIGJvb2wg
aWdub3JlZDsKLSAgICAgICAgaXRlbS5zdHJpbmdEYXRhID0gbV9wcml2YXRlLT5nZXREYXRhKG1p
bWVUeXBlVGV4dEhUTUwsIGlnbm9yZWQpOwotICAgICAgICBpdGVtLmJhc2VVUkwgPSBtX3ByaXZh
dGUtPmh0bWxCYXNlVXJsKCk7Ci0gICAgICAgIGl0ZW1MaXN0LmFwcGVuZChpdGVtKTsKLSAgICB9
Ci0gICAgaWYgKHR5cGVzLmNvbnRhaW5zKG1pbWVUeXBlRG93bmxvYWRVUkwpKSB7Ci0gICAgICAg
IEl0ZW0gaXRlbTsKLSAgICAgICAgaXRlbS5zdG9yYWdlVHlwZSA9IEl0ZW06OlN0b3JhZ2VUeXBl
U3RyaW5nOwotICAgICAgICBpdGVtLnN0cmluZ1R5cGUgPSBTdHJpbmcobWltZVR5cGVEb3dubG9h
ZFVSTCk7Ci0gICAgICAgIGJvb2wgaWdub3JlZDsKLSAgICAgICAgaXRlbS5zdHJpbmdEYXRhID0g
bV9wcml2YXRlLT5nZXREYXRhKG1pbWVUeXBlRG93bmxvYWRVUkwsIGlnbm9yZWQpOwotICAgICAg
ICBpdGVtTGlzdC5hcHBlbmQoaXRlbSk7Ci0gICAgfQotICAgIGNvbnN0IEhhc2hNYXA8U3RyaW5n
LCBTdHJpbmc+JiBjdXN0b21EYXRhID0gbV9wcml2YXRlLT5jdXN0b21EYXRhKCk7Ci0gICAgZm9y
IChIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjdXN0b21EYXRh
LmJlZ2luKCk7IGl0ICE9IGN1c3RvbURhdGEuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgSXRlbSBp
dGVtOwotICAgICAgICBpdGVtLnN0b3JhZ2VUeXBlID0gSXRlbTo6U3RvcmFnZVR5cGVTdHJpbmc7
Ci0gICAgICAgIGl0ZW0uc3RyaW5nVHlwZSA9IGl0LT5maXJzdDsKLSAgICAgICAgaXRlbS5zdHJp
bmdEYXRhID0gaXQtPnNlY29uZDsKLSAgICAgICAgaXRlbUxpc3QuYXBwZW5kKGl0ZW0pOwotICAg
IH0KLSAgICBpZiAobV9wcml2YXRlLT5maWxlQ29udGVudCgpKSB7Ci0gICAgICAgIEl0ZW0gaXRl
bTsKLSAgICAgICAgaXRlbS5zdG9yYWdlVHlwZSA9IEl0ZW06OlN0b3JhZ2VUeXBlQmluYXJ5RGF0
YTsKLSAgICAgICAgaXRlbS5iaW5hcnlEYXRhID0gbV9wcml2YXRlLT5maWxlQ29udGVudCgpOwot
ICAgICAgICBpdGVtLnRpdGxlID0gbV9wcml2YXRlLT5maWxlQ29udGVudEZpbGVuYW1lKCk7Ci0g
ICAgICAgIGl0ZW1MaXN0LmFwcGVuZChpdGVtKTsKLSAgICB9Ci0gICAgLy8gV2UgZG9uJ3QgaGFu
ZGxlIGZpbGVuYW1lcyBoZXJlLCBzaW5jZSB0aGV5IGFyZSBuZXZlciB1c2VkIGZvciBkcmFnZ2lu
ZyBvdXQuCiAgICAgcmV0dXJuIGl0ZW1MaXN0OwogfQogCkBAIC0xMzUsMTEgKzEwNiwxMiBAQCB2
b2lkIFdlYkRyYWdEYXRhOjphZGRJdGVtKGNvbnN0IEl0ZW0mIGl0ZW0pCiAgICAgZW5zdXJlTXV0
YWJsZSgpOwogICAgIHN3aXRjaCAoaXRlbS5zdG9yYWdlVHlwZSkgewogICAgIGNhc2UgSXRlbTo6
U3RvcmFnZVR5cGVTdHJpbmc6Ci0gICAgICAgIG1fcHJpdmF0ZS0+c2V0RGF0YShpdGVtLnN0cmlu
Z1R5cGUsIGl0ZW0uc3RyaW5nRGF0YSk7CiAgICAgICAgIGlmIChTdHJpbmcoaXRlbS5zdHJpbmdU
eXBlKSA9PSBtaW1lVHlwZVRleHRVUklMaXN0KQotICAgICAgICAgICAgbV9wcml2YXRlLT5zZXRV
cmxUaXRsZShpdGVtLnRpdGxlKTsKKyAgICAgICAgICAgIG1fcHJpdmF0ZS0+c2V0VVJMKGl0ZW0u
c3RyaW5nRGF0YSwgaXRlbS50aXRsZSk7CiAgICAgICAgIGVsc2UgaWYgKFN0cmluZyhpdGVtLnN0
cmluZ1R5cGUpID09IG1pbWVUeXBlVGV4dEhUTUwpCi0gICAgICAgICAgICBtX3ByaXZhdGUtPnNl
dEh0bWxCYXNlVXJsKGl0ZW0uYmFzZVVSTCk7CisgICAgICAgICAgICBtX3ByaXZhdGUtPnNldEhU
TUwoaXRlbS5zdHJpbmdEYXRhLCBpdGVtLmJhc2VVUkwpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBtX3ByaXZhdGUtPnNldERhdGEoaXRlbS5zdHJpbmdUeXBlLCBpdGVtLnN0cmluZ0RhdGEp
OwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBJdGVtOjpTdG9yYWdlVHlwZUZpbGVuYW1lOgog
ICAgICAgICBtX3ByaXZhdGUtPmFkZEZpbGVuYW1lKGl0ZW0uZmlsZW5hbWVEYXRhKTsKQEAgLTE2
OCw3ICsxNDAsNiBAQCBXZWJEcmFnRGF0YTo6b3BlcmF0b3IgV1RGOjpQYXNzUmVmUHRyPFdlYkNv
cmU6OkNocm9taXVtRGF0YU9iamVjdD4oKSBjb25zdAogCiB2b2lkIFdlYkRyYWdEYXRhOjphc3Np
Z24oV2ViRHJhZ0RhdGFQcml2YXRlKiBwKQogewotICAgIEFTU0VSVCghcCB8fCBwLT5zdG9yYWdl
TW9kZSgpID09IENocm9taXVtRGF0YU9iamVjdDo6QnVmZmVyZWQpOwogICAgIC8vIHAgaXMgYWxy
ZWFkeSByZWYnZCBmb3IgdXMgYnkgdGhlIGNhbGxlcgogICAgIGlmIChtX3ByaXZhdGUpCiAgICAg
ICAgIG1fcHJpdmF0ZS0+ZGVyZWYoKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxv
ZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA2YjJiNThmN2YzM2I1ODkxZDljMGE2Mzgw
M2RmZTIwM2Y5YzcxZGEyLi4yNTcwNThiNzU1OTNkMzllMzQwOGUyODE5MTJlMjVmOWJlM2Q5NWJi
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTItMDMtMTMgIERhbmllbCBDaGVuZyAgPGRjaGVu
Z0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBSZWZhY3RvciBDbGlwYm9hcmRD
aHJvbWl1bSBhbmQgRGF0YVRyYW5zZmVySXRlbUxpc3QvRGF0YVRyYW5zZmVySXRlbSB0byBzdXBw
b3J0IEhUTUwgc3BlYworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzY1OTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIGZhc3QvZXZlbnRzL2NsaXBib2FyZC1kYXRhVHJhbnNmZXJJdGVtTGlzdC1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL2NsaXBib2FyZC1kYXRhVHJhbnNm
ZXJJdGVtTGlzdC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy9kcmFnLWRhdGFU
cmFuc2Zlckl0ZW1MaXN0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9ldmVu
dHMvZHJhZy1kYXRhVHJhbnNmZXJJdGVtTGlzdC5odG1sOiBBZGRlZC4KKwogMjAxMi0wMy0xMiAg
QWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFVwZGF0ZSBleHBlY3Rl
ZCByZXN1bHRzIGFmdGVyIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzExMDQ4MC4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2NsaXBib2FyZC1kYXRhVHJhbnNm
ZXJJdGVtTGlzdC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9jbGlwYm9h
cmQtZGF0YVRyYW5zZmVySXRlbUxpc3QtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY4ZTcwNzZi
Mjk5YmRhNTU3YjYxOWU0NzQ4ZDZkOTczN2VhNzU4MzcKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9mYXN0L2V2ZW50cy9jbGlwYm9hcmQtZGF0YVRyYW5zZmVySXRlbUxpc3QtZXhwZWN0
ZWQudHh0CkBAIC0wLDAgKzEsMjMgQEAKK1RvIG1hbnVhbGx5IHRlc3QsIHByZXNzIHlvdXIgYnJv
d3NlciBzaG9ydGN1dCBmb3IgY29weSBhbmQgdGhlbiBmb3IgcGFzdGUuIFNldmVyYWwgbGluZXMg
dGhhdCBzYXkgJ1BBU1MnIHNob3VsZCBhcHBlYXIgYmVsb3cuCisKK0NvcHkgaGFuZGxlcjogCitQ
YXN0ZSBoYW5kbGVyOiAKK1J1bm5pbmcgdGVzdCB3aXRoIExlZ2FjeSBjb3B5IGhhbmRsZXIgYW5k
IExlZ2FjeSBwYXN0ZSBoYW5kbGVyCitQQVNTOiAyID09PSAyCitQQVNTOiBzYW1wbGUgPT09IHNh
bXBsZQorUEFTUzogaGVsbG8gd29ybGQgPT09IGhlbGxvIHdvcmxkCitSdW5uaW5nIHRlc3Qgd2l0
aCBMZWdhY3kgY29weSBoYW5kbGVyIGFuZCBEYXRhVHJhbnNmZXJJdGVtTGlzdCBwYXN0ZSBoYW5k
bGVyCitQQVNTOiAyID09PSAyCitQQVNTOiBbeyJraW5kIjoic3RyaW5nIiwidHlwZSI6ImN1c3Rv
bS1kYXRhIn0seyJraW5kIjoic3RyaW5nIiwidHlwZSI6InRleHQvcGxhaW4ifV0gPT09IFt7Imtp
bmQiOiJzdHJpbmciLCJ0eXBlIjoiY3VzdG9tLWRhdGEifSx7ImtpbmQiOiJzdHJpbmciLCJ0eXBl
IjoidGV4dC9wbGFpbiJ9XQorUEFTUzogaGVsbG8gd29ybGQgPT09IGhlbGxvIHdvcmxkCitQQVNT
OiBzYW1wbGUgPT09IHNhbXBsZQorUnVubmluZyB0ZXN0IHdpdGggRGF0YVRyYW5zZmVySXRlbUxp
c3QgY29weSBoYW5kbGVyIGFuZCBMZWdhY3kgcGFzdGUgaGFuZGxlcgorUEFTUzogMiA9PT0gMgor
UEFTUzogc2FtcGxlID09PSBzYW1wbGUKK1BBU1M6IGhlbGxvIHdvcmxkID09PSBoZWxsbyB3b3Js
ZAorUnVubmluZyB0ZXN0IHdpdGggRGF0YVRyYW5zZmVySXRlbUxpc3QgY29weSBoYW5kbGVyIGFu
ZCBEYXRhVHJhbnNmZXJJdGVtTGlzdCBwYXN0ZSBoYW5kbGVyCitQQVNTOiAyID09PSAyCitQQVNT
OiBbeyJraW5kIjoic3RyaW5nIiwidHlwZSI6ImN1c3RvbS1kYXRhIn0seyJraW5kIjoic3RyaW5n
IiwidHlwZSI6InRleHQvcGxhaW4ifV0gPT09IFt7ImtpbmQiOiJzdHJpbmciLCJ0eXBlIjoiY3Vz
dG9tLWRhdGEifSx7ImtpbmQiOiJzdHJpbmciLCJ0eXBlIjoidGV4dC9wbGFpbiJ9XQorUEFTUzog
aGVsbG8gd29ybGQgPT09IGhlbGxvIHdvcmxkCitQQVNTOiBzYW1wbGUgPT09IHNhbXBsZQorCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9jbGlwYm9hcmQtZGF0YVRyYW5zZmVy
SXRlbUxpc3QuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2NsaXBib2FyZC1kYXRhVHJh
bnNmZXJJdGVtTGlzdC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI3MWE4NTA4ZThlNmQ5ZjlkZGM0NDZiN2Uw
YjZjNDM3NjQ2OTQyNTkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50
cy9jbGlwYm9hcmQtZGF0YVRyYW5zZmVySXRlbUxpc3QuaHRtbApAQCAtMCwwICsxLDE0NyBAQAor
PCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4KK2Z1bmN0aW9uIGFzc2Vy
dEVxKGxlZnQsIHJpZ2h0KQoreworICAgIGlmIChsZWZ0ID09PSByaWdodCkKKyAgICAgICAgbG9n
KCdQQVNTOiAnICsgbGVmdCArICIgPT09ICIgKyByaWdodCk7CisgICAgZWxzZQorICAgICAgICBs
b2coJ0ZBSUw6ICcgKyBsZWZ0ICsgIihvZiB0eXBlICIgKyAodHlwZW9mIGxlZnQpICsgIikgIT09
ICIgKyByaWdodCArICIob2YgdHlwZSAiICsgKHR5cGVvZiByaWdodCkgKyAiKSIpOworfQorZnVu
Y3Rpb24gbG9nKHN0cikKK3sKKyAgICB2YXIgcmVzdWx0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoJ3Jlc3VsdCcpOworICAgIHJlc3VsdC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0
Tm9kZShzdHIpKTsKKyAgICByZXN1bHQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgnYnInKSk7Cit9CisKK2Z1bmN0aW9uIGxlZ2FjeUNvcHlTdGFydChkYXRhVHJhbnNmZXIpCit7
CisgICAgZGF0YVRyYW5zZmVyLnNldERhdGEoJ3RleHQnLCAnc2FtcGxlJyk7CisgICAgZGF0YVRy
YW5zZmVyLnNldERhdGEoJ2N1c3RvbS1kYXRhJywgJ2hlbGxvIHdvcmxkJyk7Cit9CisKK2Z1bmN0
aW9uIGl0ZW1MaXN0Q29weVN0YXJ0KGRhdGFUcmFuc2ZlcikKK3sKKyAgICBkYXRhVHJhbnNmZXIu
aXRlbXMuYWRkKCdzYW1wbGUnLCAndGV4dC9wbGFpbicpOworICAgIGRhdGFUcmFuc2Zlci5pdGVt
cy5hZGQoJ2hlbGxvIHdvcmxkJywgJ2N1c3RvbS1kYXRhJyk7Cit9CisKK2Z1bmN0aW9uIGNvcHko
ZXZlbnQpCit7CisgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKKyAgICB2YXIgY29weU1ldGhv
ZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb3B5TWV0aG9kJyk7CisgICAgaWYgKGNvcHlN
ZXRob2Quc2VsZWN0ZWRJbmRleCA9PSAwKQorICAgICAgICBsZWdhY3lDb3B5U3RhcnQoZXZlbnQu
Y2xpcGJvYXJkRGF0YSk7CisgICAgZWxzZSBpZiAoY29weU1ldGhvZC5zZWxlY3RlZEluZGV4ID09
IDEpCisgICAgICAgIGl0ZW1MaXN0Q29weVN0YXJ0KGV2ZW50LmNsaXBib2FyZERhdGEpOworfQor
CitmdW5jdGlvbiBsZWdhY3lQYXN0ZShkYXRhVHJhbnNmZXIpCit7CisgICAgYXNzZXJ0RXEoMiwg
ZGF0YVRyYW5zZmVyLnR5cGVzLmxlbmd0aCk7CisgICAgaWYgKGRhdGFUcmFuc2Zlci50eXBlcy5p
bmRleE9mKCd0ZXh0L3BsYWluJykgPCAwKQorICAgICAgICBsb2coJ3R5cGVzIGFycmF5IGRpZCBu
b3QgY29udGFpbiAidGV4dCInKTsKKyAgICBpZiAoZGF0YVRyYW5zZmVyLnR5cGVzLmluZGV4T2Yo
J2N1c3RvbS1kYXRhJykgPCAwKQorICAgICAgICBsb2coJ3R5cGVzIGFycmF5IGRpZCBub3QgY29u
dGFpbiAiY3VzdG9tLWRhdGEiJyk7CisgICAgYXNzZXJ0RXEoJ3NhbXBsZScsIGRhdGFUcmFuc2Zl
ci5nZXREYXRhKCd0ZXh0JykpOworICAgIGFzc2VydEVxKCdoZWxsbyB3b3JsZCcsIGRhdGFUcmFu
c2Zlci5nZXREYXRhKCdjdXN0b20tZGF0YScpKTsKKyAgICBydW5OZXh0KCk7Cit9CisKK3ZhciBv
dXRzdGFuZGluZ1JlcXVlc3RzOworZnVuY3Rpb24gaXRlbUxpc3RQYXN0ZShkYXRhVHJhbnNmZXIp
Cit7CisgICAgb3V0c3RhbmRpbmdSZXF1ZXN0cyA9IDA7CisgICAgYXNzZXJ0RXEoMiwgZGF0YVRy
YW5zZmVyLml0ZW1zLmxlbmd0aCk7CisgICAgdmFyIHR5cGVzID0gW107CisgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBkYXRhVHJhbnNmZXIuaXRlbXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgdHlw
ZXMucHVzaCh7a2luZDogZGF0YVRyYW5zZmVyLml0ZW1zW2ldLmtpbmQsIHR5cGU6IGRhdGFUcmFu
c2Zlci5pdGVtc1tpXS50eXBlfSk7CisgICAgfQorICAgIHR5cGVzLnNvcnQoZnVuY3Rpb24gKGEs
IGIpIHsgcmV0dXJuIGEudHlwZS5sb2NhbGVDb21wYXJlKGIudHlwZSk7IH0pOworICAgIHZhciBl
eHBlY3RlZFR5cGVzID0gWworICAgICAgICB7IGtpbmQ6ICdzdHJpbmcnLCB0eXBlOiAnY3VzdG9t
LWRhdGEnfSwKKyAgICAgICAgeyBraW5kOiAnc3RyaW5nJywgdHlwZTogJ3RleHQvcGxhaW4nfSwK
KyAgICBdOworICAgIGFzc2VydEVxKEpTT04uc3RyaW5naWZ5KGV4cGVjdGVkVHlwZXMpLCBKU09O
LnN0cmluZ2lmeSh0eXBlcykpOworICAgIHZhciBleHBlY3RlZFJlc3VsdHMgPSB7CisgICAgICAg
ICdjdXN0b20tZGF0YSc6ICdoZWxsbyB3b3JsZCcsCisgICAgICAgICd0ZXh0L3BsYWluJzogJ3Nh
bXBsZScsCisgICAgfQorICAgIGZ1bmN0aW9uIG1ha2VDbG9zdXJlKGV4cGVjdGVkRGF0YSkKKyAg
ICB7CisgICAgICAgICsrb3V0c3RhbmRpbmdSZXF1ZXN0czsKKyAgICAgICAgcmV0dXJuIGZ1bmN0
aW9uIChkYXRhKSB7CisgICAgICAgICAgICBhc3NlcnRFcShleHBlY3RlZERhdGEsIGRhdGEpOwor
ICAgICAgICAgICAgaWYgKC0tb3V0c3RhbmRpbmdSZXF1ZXN0cyA9PSAwKQorICAgICAgICAgICAg
ICAgIHdpbmRvdy5zZXRUaW1lb3V0KHJ1bk5leHQsIDApOworICAgICAgICB9CisgICAgfQorICAg
IC8vIFdlIHVzZSB0aGlzIGZ1bmt5IGxvb3AgdG8gbWFrZSBzdXJlIHdlIGFsd2F5cyBwcmludCBv
dXQgcmVzdWx0cyBpbiB0aGUgc2FtZSBvcmRlci4KKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHR5
cGVzLmxlbmd0aDsgKytpKSB7CisgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZGF0YVRyYW5z
ZmVyLml0ZW1zLmxlbmd0aDsgKytqKSB7CisgICAgICAgICAgICBpZiAodHlwZXNbaV0udHlwZSA9
PSBkYXRhVHJhbnNmZXIuaXRlbXNbal0udHlwZSkgeworICAgICAgICAgICAgICAgIGRhdGFUcmFu
c2Zlci5pdGVtc1tqXS5nZXRBc1N0cmluZyhtYWtlQ2xvc3VyZShleHBlY3RlZFJlc3VsdHNbdHlw
ZXNbaV0udHlwZV0pKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KK30KKworZnVuY3Rpb24gcGFzdGUoZXZlbnQpCit7CisgICAgdmFyIHBh
c3RlTWV0aG9kPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGFzdGVNZXRob2QnKTsKKyAgICBp
ZiAocGFzdGVNZXRob2Quc2VsZWN0ZWRJbmRleCA9PSAwKQorICAgICAgICBsZWdhY3lQYXN0ZShl
dmVudC5jbGlwYm9hcmREYXRhKTsKKyAgICBlbHNlIGlmIChwYXN0ZU1ldGhvZC5zZWxlY3RlZElu
ZGV4ID09IDEpCisgICAgICAgIGl0ZW1MaXN0UGFzdGUoZXZlbnQuY2xpcGJvYXJkRGF0YSk7Cit9
CisKK2Z1bmN0aW9uIHJ1blRlc3QoY29weU1ldGhvZEluZGV4LCBwYXN0ZU1ldGhvZEluZGV4KQor
eworICAgIHZhciBjb3B5TWV0aG9kID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvcHlNZXRo
b2QnKTsKKyAgICB2YXIgcGFzdGVNZXRob2QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGFz
dGVNZXRob2QnKTsKKyAgICBjb3B5TWV0aG9kLnNlbGVjdGVkSW5kZXggPSBjb3B5TWV0aG9kSW5k
ZXg7CisgICAgcGFzdGVNZXRob2Quc2VsZWN0ZWRJbmRleCA9IHBhc3RlTWV0aG9kSW5kZXg7Cisg
ICAgbG9nKCdSdW5uaW5nIHRlc3Qgd2l0aCAnICsgY29weU1ldGhvZC52YWx1ZSArICcgY29weSBo
YW5kbGVyIGFuZCAnICsgcGFzdGVNZXRob2QudmFsdWUgKyAnIHBhc3RlIGhhbmRsZXInKTsKKwor
ICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5Jyk7CisgICAgZG9jdW1lbnQuZXhlY0NvbW1h
bmQoJ3Bhc3RlJyk7Cit9CisKK3ZhciB0ZXN0Q2FzZXMgPSBbCisgICAgW3J1blRlc3QsIFswLCAw
XV0sCisgICAgW3J1blRlc3QsIFswLCAxXV0sCisgICAgW3J1blRlc3QsIFsxLCAwXV0sCisgICAg
W3J1blRlc3QsIFsxLCAxXV0sCitdOworZnVuY3Rpb24gcnVuTmV4dCgpCit7CisgICAgaWYgKCF3
aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIHJldHVybjsKKyAgICB2YXIgdGVz
dENhc2UgPSB0ZXN0Q2FzZXMuc2hpZnQoKTsKKyAgICBpZiAodGVzdENhc2UpCisgICAgICAgIHRl
c3RDYXNlWzBdLmFwcGx5KG51bGwsIHRlc3RDYXNlWzFdKTsKKyAgICBlbHNlCisgICAgICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKword2luZG93Lm9ubG9hZCA9IGZ1
bmN0aW9uKCkKK3sKKyAgICBpZiAoIXdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAg
ICAgcmV0dXJuOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisKKyAgICBydW5OZXh0KCk7Cit9
Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9uY29weT0iY29weShldmVudCkiIG9ucGFzdGU9
InBhc3RlKGV2ZW50KSI+Cis8cD5UbyBtYW51YWxseSB0ZXN0LCBwcmVzcyB5b3VyIGJyb3dzZXIg
c2hvcnRjdXQgZm9yIGNvcHkgYW5kIHRoZW4gZm9yIHBhc3RlLiAgU2V2ZXJhbCBsaW5lcyB0aGF0
IHNheSAnUEFTUycgc2hvdWxkIGFwcGVhciBiZWxvdy4KKzxkaXY+Q29weSBoYW5kbGVyOiA8c2Vs
ZWN0IGlkPSJjb3B5TWV0aG9kIj48b3B0aW9uPkxlZ2FjeTwvb3B0aW9uPjxvcHRpb24+RGF0YVRy
YW5zZmVySXRlbUxpc3Q8L29wdGlvbj48L3NlbGVjdD48L2Rpdj4KKzxkaXY+UGFzdGUgaGFuZGxl
cjogPHNlbGVjdCBpZD0icGFzdGVNZXRob2QiPjxvcHRpb24+TGVnYWN5PC9vcHRpb24+PG9wdGlv
bj5EYXRhVHJhbnNmZXJJdGVtTGlzdDwvb3B0aW9uPjwvc2VsZWN0PjwvZGl2PgorPGRpdiBpZD0i
cmVzdWx0Ij48L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2Zhc3QvZXZlbnRzL2RyYWctZGF0YVRyYW5zZmVySXRlbUxpc3QtZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvZmFzdC9ldmVudHMvZHJhZy1kYXRhVHJhbnNmZXJJdGVtTGlzdC1leHBlY3RlZC50
eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMmI0ZmZlZWRjNWNkNzhhODI4MGQ2NGQ2ZjhmNTFlYTc0MTgzZjA4Ygot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2RyYWctZGF0YVRyYW5z
ZmVySXRlbUxpc3QtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjUgQEAKK1RvIG1hbnVhbGx5IHRl
c3QsIGRyYWcgJ0RyYWcgTWUnIHRvICdEcm9wIEhlcmUnIGFuZCBkcm9wLiBTZXZlcmFsIGxpbmVz
IHRoYXQgc2F5ICdQQVNTJyBzaG91bGQgYXBwZWFyIGJlbG93LgorCitEcmFnIE1lCitEcm9wIEhl
cmUKK0RyYWcgaGFuZGxlcjogCitEcm9wIGhhbmRsZXI6IAorUnVubmluZyB0ZXN0IHdpdGggTGVn
YWN5IGRyYWcgaGFuZGxlciBhbmQgTGVnYWN5IGRyb3AgaGFuZGxlcgorUEFTUzogMiA9PT0gMgor
UEFTUzogc2FtcGxlID09PSBzYW1wbGUKK1BBU1M6IGhlbGxvIHdvcmxkID09PSBoZWxsbyB3b3Js
ZAorUnVubmluZyB0ZXN0IHdpdGggTGVnYWN5IGRyYWcgaGFuZGxlciBhbmQgRGF0YVRyYW5zZmVy
SXRlbUxpc3QgZHJvcCBoYW5kbGVyCitQQVNTOiAyID09PSAyCitQQVNTOiBbeyJraW5kIjoic3Ry
aW5nIiwidHlwZSI6ImN1c3RvbS1kYXRhIn0seyJraW5kIjoic3RyaW5nIiwidHlwZSI6InRleHQv
cGxhaW4ifV0gPT09IFt7ImtpbmQiOiJzdHJpbmciLCJ0eXBlIjoiY3VzdG9tLWRhdGEifSx7Imtp
bmQiOiJzdHJpbmciLCJ0eXBlIjoidGV4dC9wbGFpbiJ9XQorUEFTUzogaGVsbG8gd29ybGQgPT09
IGhlbGxvIHdvcmxkCitQQVNTOiBzYW1wbGUgPT09IHNhbXBsZQorUnVubmluZyB0ZXN0IHdpdGgg
RGF0YVRyYW5zZmVySXRlbUxpc3QgZHJhZyBoYW5kbGVyIGFuZCBMZWdhY3kgZHJvcCBoYW5kbGVy
CitQQVNTOiAyID09PSAyCitQQVNTOiBzYW1wbGUgPT09IHNhbXBsZQorUEFTUzogaGVsbG8gd29y
bGQgPT09IGhlbGxvIHdvcmxkCitSdW5uaW5nIHRlc3Qgd2l0aCBEYXRhVHJhbnNmZXJJdGVtTGlz
dCBkcmFnIGhhbmRsZXIgYW5kIERhdGFUcmFuc2Zlckl0ZW1MaXN0IGRyb3AgaGFuZGxlcgorUEFT
UzogMiA9PT0gMgorUEFTUzogW3sia2luZCI6InN0cmluZyIsInR5cGUiOiJjdXN0b20tZGF0YSJ9
LHsia2luZCI6InN0cmluZyIsInR5cGUiOiJ0ZXh0L3BsYWluIn1dID09PSBbeyJraW5kIjoic3Ry
aW5nIiwidHlwZSI6ImN1c3RvbS1kYXRhIn0seyJraW5kIjoic3RyaW5nIiwidHlwZSI6InRleHQv
cGxhaW4ifV0KK1BBU1M6IGhlbGxvIHdvcmxkID09PSBoZWxsbyB3b3JsZAorUEFTUzogc2FtcGxl
ID09PSBzYW1wbGUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvZHJhZy1k
YXRhVHJhbnNmZXJJdGVtTGlzdC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvZHJhZy1k
YXRhVHJhbnNmZXJJdGVtTGlzdC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkxMGE3NzE5YzhkNjM1ZGFhODA2
NGYxYzE3NTI1ZjdjMzVjMjBiODcKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0
L2V2ZW50cy9kcmFnLWRhdGFUcmFuc2Zlckl0ZW1MaXN0Lmh0bWwKQEAgLTAsMCArMSwxNzggQEAK
KzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzdHlsZT4KKyNkcmFnIHsKKyAgICBi
b3JkZXI6IDFweCBzb2xpZCBibGFjazsKKyAgICBoZWlnaHQ6IDIwMHB4OworICAgIHdpZHRoOiAy
MDBweDsKK30KKyNkcm9wIHsKKyAgICBib3JkZXI6IDFweCBzb2xpZCBibGFjazsKKyAgICBoZWln
aHQ6IDIwMHB4OworICAgIHdpZHRoOiAyMDBweDsKK30KKzwvc3R5bGU+Cis8c2NyaXB0PgorZnVu
Y3Rpb24gYXNzZXJ0RXEobGVmdCwgcmlnaHQpCit7CisgICAgaWYgKGxlZnQgPT09IHJpZ2h0KQor
ICAgICAgICBsb2coJ1BBU1M6ICcgKyBsZWZ0ICsgIiA9PT0gIiArIHJpZ2h0KTsKKyAgICBlbHNl
CisgICAgICAgIGxvZygnRkFJTDogJyArIGxlZnQgKyAiKG9mIHR5cGUgIiArICh0eXBlb2YgbGVm
dCkgKyAiKSAhPT0gIiArIHJpZ2h0ICsgIihvZiB0eXBlICIgKyAodHlwZW9mIHJpZ2h0KSArICIp
Iik7Cit9CitmdW5jdGlvbiBsb2coc3RyKQoreworICAgIHZhciByZXN1bHQgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgncmVzdWx0Jyk7CisgICAgcmVzdWx0LmFwcGVuZENoaWxkKGRvY3VtZW50
LmNyZWF0ZVRleHROb2RlKHN0cikpOworICAgIHJlc3VsdC5hcHBlbmRDaGlsZChkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCdicicpKTsKK30KKworZnVuY3Rpb24gbGVnYWN5RHJhZ1N0YXJ0KGRhdGFU
cmFuc2ZlcikKK3sKKyAgICBkYXRhVHJhbnNmZXIuc2V0RGF0YSgndGV4dCcsICdzYW1wbGUnKTsK
KyAgICBkYXRhVHJhbnNmZXIuc2V0RGF0YSgnY3VzdG9tLWRhdGEnLCAnaGVsbG8gd29ybGQnKTsK
K30KKworZnVuY3Rpb24gaXRlbUxpc3REcmFnU3RhcnQoZGF0YVRyYW5zZmVyKQoreworICAgIGRh
dGFUcmFuc2Zlci5pdGVtcy5hZGQoJ3NhbXBsZScsICd0ZXh0L3BsYWluJyk7CisgICAgZGF0YVRy
YW5zZmVyLml0ZW1zLmFkZCgnaGVsbG8gd29ybGQnLCAnY3VzdG9tLWRhdGEnKTsKK30KKworZnVu
Y3Rpb24gZHJhZ3N0YXJ0KGV2ZW50KQoreworICAgIHZhciBkcmFnTWV0aG9kID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ2RyYWdNZXRob2QnKTsKKyAgICBpZiAoZHJhZ01ldGhvZC5zZWxlY3Rl
ZEluZGV4ID09IDApCisgICAgICAgIGxlZ2FjeURyYWdTdGFydChldmVudC5kYXRhVHJhbnNmZXIp
OworICAgIGVsc2UgaWYgKGRyYWdNZXRob2Quc2VsZWN0ZWRJbmRleCA9PSAxKQorICAgICAgICBp
dGVtTGlzdERyYWdTdGFydChldmVudC5kYXRhVHJhbnNmZXIpOworfQorCitmdW5jdGlvbiBkcmFn
ZW50ZXIoZXZlbnQpCit7CisgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKK30KKworZnVuY3Rp
b24gZHJhZ292ZXIoZXZlbnQpCit7CisgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKK30KKwor
ZnVuY3Rpb24gbGVnYWN5RHJvcChkYXRhVHJhbnNmZXIpCit7CisgICAgYXNzZXJ0RXEoMiwgZGF0
YVRyYW5zZmVyLnR5cGVzLmxlbmd0aCk7CisgICAgaWYgKGRhdGFUcmFuc2Zlci50eXBlcy5pbmRl
eE9mKCd0ZXh0L3BsYWluJykgPCAwKQorICAgICAgICBsb2coJ3R5cGVzIGFycmF5IGRpZCBub3Qg
Y29udGFpbiAidGV4dCInKTsKKyAgICBpZiAoZGF0YVRyYW5zZmVyLnR5cGVzLmluZGV4T2YoJ2N1
c3RvbS1kYXRhJykgPCAwKQorICAgICAgICBsb2coJ3R5cGVzIGFycmF5IGRpZCBub3QgY29udGFp
biAiY3VzdG9tLWRhdGEiJyk7CisgICAgYXNzZXJ0RXEoJ3NhbXBsZScsIGRhdGFUcmFuc2Zlci5n
ZXREYXRhKCd0ZXh0JykpOworICAgIGFzc2VydEVxKCdoZWxsbyB3b3JsZCcsIGRhdGFUcmFuc2Zl
ci5nZXREYXRhKCdjdXN0b20tZGF0YScpKTsKKyAgICBydW5OZXh0KCk7Cit9CisKK3ZhciBvdXRz
dGFuZGluZ1JlcXVlc3RzOworZnVuY3Rpb24gaXRlbUxpc3REcm9wKGRhdGFUcmFuc2ZlcikKK3sK
KyAgICBvdXRzdGFuZGluZ1JlcXVlc3RzID0gMDsKKyAgICBhc3NlcnRFcSgyLCBkYXRhVHJhbnNm
ZXIuaXRlbXMubGVuZ3RoKTsKKyAgICB2YXIgdHlwZXMgPSBbXTsKKyAgICBmb3IgKHZhciBpID0g
MDsgaSA8IGRhdGFUcmFuc2Zlci5pdGVtcy5sZW5ndGg7ICsraSkgeworICAgICAgICB0eXBlcy5w
dXNoKHtraW5kOiBkYXRhVHJhbnNmZXIuaXRlbXNbaV0ua2luZCwgdHlwZTogZGF0YVRyYW5zZmVy
Lml0ZW1zW2ldLnR5cGV9KTsKKyAgICB9CisgICAgdHlwZXMuc29ydChmdW5jdGlvbiAoYSwgYikg
eyByZXR1cm4gYS50eXBlLmxvY2FsZUNvbXBhcmUoYi50eXBlKTsgfSk7CisgICAgdmFyIGV4cGVj
dGVkVHlwZXMgPSBbCisgICAgICAgIHsga2luZDogJ3N0cmluZycsIHR5cGU6ICdjdXN0b20tZGF0
YSd9LAorICAgICAgICB7IGtpbmQ6ICdzdHJpbmcnLCB0eXBlOiAndGV4dC9wbGFpbid9LAorICAg
IF07CisgICAgYXNzZXJ0RXEoSlNPTi5zdHJpbmdpZnkoZXhwZWN0ZWRUeXBlcyksIEpTT04uc3Ry
aW5naWZ5KHR5cGVzKSk7CisgICAgdmFyIGV4cGVjdGVkUmVzdWx0cyA9IHsKKyAgICAgICAgJ2N1
c3RvbS1kYXRhJzogJ2hlbGxvIHdvcmxkJywKKyAgICAgICAgJ3RleHQvcGxhaW4nOiAnc2FtcGxl
JywKKyAgICB9CisgICAgZnVuY3Rpb24gbWFrZUNsb3N1cmUoZXhwZWN0ZWREYXRhKQorICAgIHsK
KyAgICAgICAgKytvdXRzdGFuZGluZ1JlcXVlc3RzOworICAgICAgICByZXR1cm4gZnVuY3Rpb24g
KGRhdGEpIHsKKyAgICAgICAgICAgIGFzc2VydEVxKGV4cGVjdGVkRGF0YSwgZGF0YSk7CisgICAg
ICAgICAgICBpZiAoLS1vdXRzdGFuZGluZ1JlcXVlc3RzID09IDApCisgICAgICAgICAgICAgICAg
d2luZG93LnNldFRpbWVvdXQocnVuTmV4dCwgMCk7CisgICAgICAgIH0KKyAgICB9CisgICAgLy8g
V2UgdXNlIHRoaXMgZnVua3kgbG9vcCB0byBtYWtlIHN1cmUgd2UgYWx3YXlzIHByaW50IG91dCBy
ZXN1bHRzIGluIHRoZSBzYW1lIG9yZGVyLgorICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHlwZXMu
bGVuZ3RoOyArK2kpIHsKKyAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBkYXRhVHJhbnNmZXIu
aXRlbXMubGVuZ3RoOyArK2opIHsKKyAgICAgICAgICAgIGlmICh0eXBlc1tpXS50eXBlID09IGRh
dGFUcmFuc2Zlci5pdGVtc1tqXS50eXBlKSB7CisgICAgICAgICAgICAgICAgZGF0YVRyYW5zZmVy
Lml0ZW1zW2pdLmdldEFzU3RyaW5nKG1ha2VDbG9zdXJlKGV4cGVjdGVkUmVzdWx0c1t0eXBlc1tp
XS50eXBlXSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorfQorCitmdW5jdGlvbiBkcm9wKGV2ZW50KQoreworICAgIHZhciBkcm9wTWV0
aG9kID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Ryb3BNZXRob2QnKTsKKyAgICBpZiAoZHJv
cE1ldGhvZC5zZWxlY3RlZEluZGV4ID09IDApCisgICAgICAgIGxlZ2FjeURyb3AoZXZlbnQuZGF0
YVRyYW5zZmVyKTsKKyAgICBlbHNlIGlmIChkcm9wTWV0aG9kLnNlbGVjdGVkSW5kZXggPT0gMSkK
KyAgICAgICAgaXRlbUxpc3REcm9wKGV2ZW50LmRhdGFUcmFuc2Zlcik7Cit9CisKK2Z1bmN0aW9u
IHJ1blRlc3QoZHJhZ01ldGhvZEluZGV4LCBkcm9wTWV0aG9kSW5kZXgpCit7CisgICAgdmFyIGRy
YWdNZXRob2QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHJhZ01ldGhvZCcpOworICAgIHZh
ciBkcm9wTWV0aG9kID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Ryb3BNZXRob2QnKTsKKyAg
ICBkcmFnTWV0aG9kLnNlbGVjdGVkSW5kZXggPSBkcmFnTWV0aG9kSW5kZXg7CisgICAgZHJvcE1l
dGhvZC5zZWxlY3RlZEluZGV4ID0gZHJvcE1ldGhvZEluZGV4OworICAgIGxvZygnUnVubmluZyB0
ZXN0IHdpdGggJyArIGRyYWdNZXRob2QudmFsdWUgKyAnIGRyYWcgaGFuZGxlciBhbmQgJyArIGRy
b3BNZXRob2QudmFsdWUgKyAnIGRyb3AgaGFuZGxlcicpOworCisgICAgdmFyIGRyYWdFbGVtZW50
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RyYWcnKTsKKyAgICBldmVudFNlbmRlci5tb3Vz
ZU1vdmVUbyhkcmFnRWxlbWVudC5vZmZzZXRMZWZ0ICsgZHJhZ0VsZW1lbnQub2Zmc2V0V2lkdGgg
LyAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyYWdFbGVtZW50Lm9mZnNldFRvcCAr
IGRyYWdFbGVtZW50Lm9mZnNldEhlaWdodCAvIDIpOworICAgIGV2ZW50U2VuZGVyLm1vdXNlRG93
bigpOworICAgIGV2ZW50U2VuZGVyLmxlYXBGb3J3YXJkKDEwMCk7CisgICAgdmFyIGRyb3BFbGVt
ZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Ryb3AnKTsKKyAgICBldmVudFNlbmRlci5t
b3VzZU1vdmVUbyhkcm9wRWxlbWVudC5vZmZzZXRMZWZ0ICsgZHJvcEVsZW1lbnQub2Zmc2V0V2lk
dGggLyAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyb3BFbGVtZW50Lm9mZnNldFRv
cCArIGRyb3BFbGVtZW50Lm9mZnNldEhlaWdodCAvIDIpOworICAgIGV2ZW50U2VuZGVyLm1vdXNl
VXAoKTsKK30KKwordmFyIHRlc3RDYXNlcyA9IFsKKyAgICBbcnVuVGVzdCwgWzAsIDBdXSwKKyAg
ICBbcnVuVGVzdCwgWzAsIDFdXSwKKyAgICBbcnVuVGVzdCwgWzEsIDBdXSwKKyAgICBbcnVuVGVz
dCwgWzEsIDFdXSwKK107CitmdW5jdGlvbiBydW5OZXh0KCkKK3sKKyAgICBpZiAoIXdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgcmV0dXJuOworICAgIHZhciB0ZXN0Q2FzZSA9
IHRlc3RDYXNlcy5zaGlmdCgpOworICAgIGlmICh0ZXN0Q2FzZSkKKyAgICAgICAgdGVzdENhc2Vb
MF0uYXBwbHkobnVsbCwgdGVzdENhc2VbMV0pOworICAgIGVsc2UKKyAgICAgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCit3aW5kb3cub25sb2FkID0gZnVuY3Rpb24o
KQoreworICAgIGlmICghd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICByZXR1
cm47CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgIGxheW91dFRl
c3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKworICAgIHJ1bk5leHQoKTsKK30KKzwvc2Ny
aXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cD5UbyBtYW51YWxseSB0ZXN0LCBkcmFnICdEcmFnIE1l
JyB0byAnRHJvcCBIZXJlJyBhbmQgZHJvcC4gIFNldmVyYWwgbGluZXMgdGhhdCBzYXkgJ1BBU1Mn
IHNob3VsZCBhcHBlYXIgYmVsb3cuCis8ZGl2IGRyYWdnYWJsZT0idHJ1ZSIgaWQ9ImRyYWciIG9u
ZHJhZ3N0YXJ0PSJkcmFnc3RhcnQoZXZlbnQpIj5EcmFnIE1lPC9kaXY+Cis8ZGl2IGlkPSJkcm9w
IiBvbmRyYWdlbnRlcj0iZHJhZ2VudGVyKGV2ZW50KSIgb25kcmFnb3Zlcj0iZHJhZ292ZXIoZXZl
bnQpIiBvbmRyb3A9ImRyb3AoZXZlbnQpIj5Ecm9wIEhlcmU8L2Rpdj4KKzwvZGl2PgorPGRpdj5E
cmFnIGhhbmRsZXI6IDxzZWxlY3QgaWQ9ImRyYWdNZXRob2QiPjxvcHRpb24+TGVnYWN5PC9vcHRp
b24+PG9wdGlvbj5EYXRhVHJhbnNmZXJJdGVtTGlzdDwvb3B0aW9uPjwvc2VsZWN0PjwvZGl2Pgor
PGRpdj5Ecm9wIGhhbmRsZXI6IDxzZWxlY3QgaWQ9ImRyb3BNZXRob2QiPjxvcHRpb24+TGVnYWN5
PC9vcHRpb24+PG9wdGlvbj5EYXRhVHJhbnNmZXJJdGVtTGlzdDwvb3B0aW9uPjwvc2VsZWN0Pjwv
ZGl2PgorPGRpdiBpZD0icmVzdWx0Ij48L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132139</attachid>
            <date>2012-03-15 16:11:50 -0700</date>
            <delta_ts>2012-03-15 17:10:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76598-20120315161149.patch</filename>
            <type>text/plain</type>
            <size>85515</size>
            <attacher name="Daniel Cheng">dcheng</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEwODI1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjlhOTZiNDg5MDYxNGRk
NzNkODExNzU0MDBmZjY5MGIwNmExZmU3NC4uOTc3NzgwMmNlYjdlOGVjNDMxMzIyYmYzZWE0YmFh
YTI2MmFhM2Y4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExMCBAQAorMjAxMi0wMy0xNSAgRGFu
aWVsIENoZW5nICA8ZGNoZW5nQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIFJl
ZmFjdG9yIENsaXBib2FyZENocm9taXVtIGFuZCBEYXRhVHJhbnNmZXJJdGVtTGlzdC9EYXRhVHJh
bnNmZXJJdGVtIHRvIHN1cHBvcnQgSFRNTCBzcGVjCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NjU5OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFdlIG5vIGxvbmdlciBzdG9yZSBkcmFnL2NsaXBib2FyZCBk
YXRhIGluIG5hbWVkIGZpZWxkcy4gV2UgdXNlZCB0byBtYWludGFpbiB0aGUgZGF0YSBzdG9yZQor
ICAgICAgICBsaXN0IHNlcGFyYXRlbHksIHdoaWNoIHJlc3VsdGVkIGluIGEgbG90IG9mIGNvbXBs
aWNhdGVkIGNvZGUgdG8gdHJ5IHRvIG1ha2Ugc3VyZSB0aGF0CisgICAgICAgIENocm9taXVtRGF0
YU9iamVjdCBhbmQgdGhpcyBsaXN0IHN0YXllZCBpbiBzeW5jLiBXZSBub3cganVzdCBzdG9yZSB3
aGF0IGlzIGVzc2VudGlhbGx5IGEKKyAgICAgICAgbGlzdCBNSU1FIHR5cGUvZGF0YSBwYWlycyBk
aXJlY3RseSBpbiBDaHJvbWl1bURhdGFPYmplY3QuIFRoaXMgaGFzIHRoZSBiZW5lZml0IG9mIGxl
dHRpbmcgdXMKKyAgICAgICAgZWFzaWx5IGFkZCB3cml0ZSBzdXBwb3J0IGR1cmluZyBkcmFnc3Rh
cnQvY29weSBvcGVyYXRpb25zIHVzaW5nIERhdGFUcmFuc2Zlckl0ZW1MaXN0LgorCisgICAgICAg
IFRlc3RzOiBmYXN0L2V2ZW50cy9jbGlwYm9hcmQtZGF0YVRyYW5zZmVySXRlbUxpc3QuaHRtbAor
ICAgICAgICAgICAgICAgZmFzdC9ldmVudHMvZHJhZy1kYXRhVHJhbnNmZXJJdGVtTGlzdC5odG1s
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6ZmluZEl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1E
YXRhT2JqZWN0OjpjcmVhdGVGcm9tUGFzdGVib2FyZCk6CisgICAgICAgIChXZWJDb3JlOjpDaHJv
bWl1bURhdGFPYmplY3Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFP
YmplY3Q6OmNvcHkpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjppdGVt
cyk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OmNsZWFyRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OmNsZWFyQWxsKToKKyAgICAgICAg
KFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6Y2xlYXJBbGxFeGNlcHRGaWxlcyk6CisgICAg
ICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OnR5cGVzKToKKyAgICAgICAgKFdlYkNv
cmU6OkNocm9taXVtRGF0YU9iamVjdDo6Z2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDaHJv
bWl1bURhdGFPYmplY3Q6OnNldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRh
T2JqZWN0Ojp1cmxBbmRUaXRsZSk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmpl
Y3Q6OnNldFVSTEFuZFRpdGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVj
dDo6aHRtbEFuZEJhc2VVUkwpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0
OjpzZXRIVE1MQW5kQmFzZVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmpl
Y3Q6OmNvbnRhaW5zRmlsZW5hbWVzKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpmaWxlbmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6
Q2hyb21pdW1EYXRhT2JqZWN0OjphZGRGaWxlbmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDaHJv
bWl1bURhdGFPYmplY3Q6OmFkZFNoYXJlZEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpDaHJv
bWl1bURhdGFPYmplY3Q6OkNocm9taXVtRGF0YU9iamVjdCk6CisgICAgICAgICogcGxhdGZvcm0v
Y2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKENocm9taXVtRGF0YU9iamVjdCk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vQ2xp
cGJvYXJkQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6bm9ybWFsaXplVHlwZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRDaHJvbWl1bTo6Q2xpcGJvYXJkQ2hyb21pdW0pOgor
ICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkQ2hyb21pdW06OmNsZWFyRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpDbGlwYm9hcmRDaHJvbWl1bTo6Y2xlYXJBbGxEYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OkNsaXBib2FyZENocm9taXVtOjpnZXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNs
aXBib2FyZENocm9taXVtOjpzZXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENo
cm9taXVtOjp0eXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRDaHJvbWl1bTo6Zmls
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVJbWFnZVRvRGF0YU9iamVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpDbGlwYm9hcmRDaHJvbWl1bTo6ZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENocm9taXVtOjp3cml0ZVVSTCk6CisgICAgICAg
IChXZWJDb3JlOjpDbGlwYm9hcmRDaHJvbWl1bTo6d3JpdGVSYW5nZSk6CisgICAgICAgIChXZWJD
b3JlOjpDbGlwYm9hcmRDaHJvbWl1bTo6d3JpdGVQbGFpblRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2xpcGJvYXJkQ2hyb21pdW06Omhhc0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJv
YXJkQ2hyb21pdW06Oml0ZW1zKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9h
cmRDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChDbGlwYm9hcmRDaHJv
bWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRDaHJvbWl1bTo6ZnJhbWUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZFV0aWxpdGllc0Nocm9taXVtLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRVUklMaXN0VG9VUkwpOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkVXRpbGl0aWVzQ2hyb21p
dW0uaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0Rh
dGFUcmFuc2Zlckl0ZW1DaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhVHJhbnNm
ZXJJdGVtQ2hyb21pdW06OmNyZWF0ZUZyb21TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RGF0
YVRyYW5zZmVySXRlbUNocm9taXVtOjpjcmVhdGVGcm9tRmlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW06OmNyZWF0ZUZyb21VUkwpOgorICAgICAgICAoV2Vi
Q29yZTo6RGF0YVRyYW5zZmVySXRlbUNocm9taXVtOjpjcmVhdGVGcm9tSFRNTCk6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bTo6
Y3JlYXRlRnJvbVNoYXJlZEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhVHJhbnNmZXJJ
dGVtQ2hyb21pdW06OmNyZWF0ZUZyb21QYXN0ZWJvYXJkKToKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGFUcmFuc2Zlckl0ZW1DaHJvbWl1bTo6RGF0YVRyYW5zZmVySXRlbUNocm9taXVtKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bTo6Z2V0QXNTdHJpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0YVRyYW5zZmVySXRlbUNocm9taXVtOjpnZXRBc0ZpbGUpOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0YVRyYW5zZmVySXRlbUNocm9taXVtOjppbnRlcm5hbEdldEFzU3Ry
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bTo6aXNGaWxl
bmFtZSk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vRGF0YVRyYW5zZmVySXRlbUNocm9t
aXVtLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKERhdGFUcmFuc2Zlckl0ZW1DaHJv
bWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW06OmtpbmQp
OgorICAgICAgICAoV2ViQ29yZTo6RGF0YVRyYW5zZmVySXRlbUNocm9taXVtOjp0eXBlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bTo6c2hhcmVkQnVmZmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkRhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bTo6dGl0bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0YVRyYW5zZmVySXRlbUNocm9taXVtOjpiYXNlVVJMKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9EYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkRhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW06OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtOjpjcmVhdGVG
cm9tUGFzdGVib2FyZCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW06OkRhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0p
OgorICAgICAgICAoV2ViQ29yZTo6RGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bTo6bGVuZ3Ro
KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW06Oml0ZW0p
OgorICAgICAgICAoV2ViQ29yZTo6RGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bTo6ZGVsZXRl
SXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtOjpj
bGVhcik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtOjph
ZGQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bTo6aW50
ZXJuYWxBZGRTdHJpbmdJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFUcmFuc2Zlckl0ZW1M
aXN0Q2hyb21pdW06OmludGVybmFsQWRkRmlsZUl0ZW0pOgorICAgICAgICAqIHBsYXRmb3JtL2No
cm9taXVtL0RhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bSk6CisgICAgICAgICogcGxh
dGZvcm0vY2hyb21pdW0vRHJhZ0RhdGFDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpE
cmFnRGF0YTo6YXNVUkwpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmFzUGxhaW5UZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjphc0ZyYWdtZW50KToKKwogMjAxMi0wMy0x
NCAgQ2hyaXMgRmxlaXphY2ggIDxjZmxlaXphY2hAYXBwbGUuY29tPgogCiAgICAgICAgIEFYRGVz
Y3JpcHRpb24gZm9yIEFSSUEgcm9sZSBjb250ZW50aW5mbyBpbmNvcnJlY3QKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKaW5kZXggNWQ0N2ZlODhlMDA2Mjg4YmVjMDg0YmE1NDIyMTIxNzlmZmQ1YWZj
My4uNThhNmM5NmQwOTJiMDNmMTNlN2VkZjFjNjEzNzY2M2ZkMjE3MzY1MiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMi0wMy0xNSAgRGFuaWVsIENoZW5n
ICA8ZGNoZW5nQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIFJlZmFjdG9yIENs
aXBib2FyZENocm9taXVtIGFuZCBEYXRhVHJhbnNmZXJJdGVtTGlzdC9EYXRhVHJhbnNmZXJJdGVt
IHRvIHN1cHBvcnQgSFRNTCBzcGVjCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD03NjU5OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogc3JjL1dlYkRyYWdEYXRhLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
RHJhZ0RhdGE6Oml0ZW1zKToKKyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0RhdGE6OmFkZEl0ZW0p
OgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFnRGF0YTo6YXNzaWduKToKKwogMjAxMi0wMy0xMyAg
Sm9uIExlZSAgPGpvbmxlZUBhcHBsZS5jb20+CiAKICAgICAgICAgU2VwYXJhdGUgTk9USUZJQ0FU
SU9OUyBhbmQgTEVHQUNZX05PVElGSUNBVElPTlMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuY3BwCmluZGV4IGMxYjdhYTI4
MWY5ZGUyMmRmMWIwY2M2OGM1OWEwOWNkZjc2YjUxYzguLjY3OWY0MmQzZjZkYTEwZTA3NmUxMGJl
NDhlMDVlNWJhYjAxMDQ2NjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2No
cm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmNwcApAQCAtMzMsMjQ4ICszMywxNjggQEAK
IAogI2luY2x1ZGUgIkNsaXBib2FyZE1pbWVUeXBlcy5oIgogI2luY2x1ZGUgIkNsaXBib2FyZFV0
aWxpdGllc0Nocm9taXVtLmgiCisjaW5jbHVkZSAiRGF0YVRyYW5zZmVySXRlbS5oIgogI2luY2x1
ZGUgIkRhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0uaCIKLSNpbmNsdWRlICJQYXN0ZWJvYXJk
LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TdXBwb3J0LmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29k
ZVBsYWNlaG9sZGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotLy8gUGVyIFJGQyAyNDgz
LCB0aGUgbGluZSBzZXBhcmF0b3IgZm9yICJ0ZXh0Ly4uLiIgTUlNRSB0eXBlcyBpcyBDUi1MRi4K
LXN0YXRpYyBjaGFyIGNvbnN0KiBjb25zdCB0ZXh0TUlNRVR5cGVMaW5lU2VwYXJhdG9yID0gIlxy
XG4iOwotCi12b2lkIENocm9taXVtRGF0YU9iamVjdDo6Y2xlYXJEYXRhKGNvbnN0IFN0cmluZyYg
dHlwZSkKK3N0YXRpYyBQYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bT4gZmluZEl0
ZW0oUGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtPiBpdGVtTGlzdCwgY29u
c3QgU3RyaW5nJiB0eXBlKQogewotICAgIGlmICh0eXBlID09IG1pbWVUeXBlVGV4dFBsYWluKSB7
Ci0gICAgICAgIG1fcGxhaW5UZXh0ID0gIiI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBpZiAodHlwZSA9PSBtaW1lVHlwZVVSTCB8fCB0eXBlID09IG1pbWVUeXBlVGV4dFVSSUxpc3Qp
IHsKLSAgICAgICAgbV91cmlMaXN0ID0gIiI7Ci0gICAgICAgIG1fdXJsID0gS1VSTCgpOwotICAg
ICAgICBtX3VybFRpdGxlID0gIiI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAo
dHlwZSA9PSBtaW1lVHlwZVRleHRIVE1MKSB7Ci0gICAgICAgIG1fdGV4dEh0bWwgPSAiIjsKLSAg
ICAgICAgbV9odG1sQmFzZVVybCA9IEtVUkwoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIGlmICh0eXBlID09IG1pbWVUeXBlRG93bmxvYWRVUkwpIHsKLSAgICAgICAgbV9kb3dubG9h
ZE1ldGFkYXRhID0gIiI7Ci0gICAgICAgIHJldHVybjsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGl0ZW1MaXN0LT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgIGlmIChpdGVtTGlzdC0+aXRl
bShpKS0+a2luZCgpID09IERhdGFUcmFuc2Zlckl0ZW06OmtpbmRTdHJpbmcgJiYgaXRlbUxpc3Qt
Pml0ZW0oaSktPnR5cGUoKSA9PSB0eXBlKQorICAgICAgICAgICAgcmV0dXJuIGl0ZW1MaXN0LT5p
dGVtKGkpOwogICAgIH0KKyAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBDaHJvbWl1bURhdGFPYmpl
Y3Q6OmNsZWFyQWxsKCkKK1Bhc3NSZWZQdHI8Q2hyb21pdW1EYXRhT2JqZWN0PiBDaHJvbWl1bURh
dGFPYmplY3Q6OmNyZWF0ZUZyb21QYXN0ZWJvYXJkKCkKIHsKLSAgICBjbGVhckFsbEV4Y2VwdEZp
bGVzKCk7Ci0gICAgbV9maWxlbmFtZXMuY2xlYXIoKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3
IENocm9taXVtRGF0YU9iamVjdChEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtOjpjcmVhdGVG
cm9tUGFzdGVib2FyZCgpKSk7CiB9CiAKLXZvaWQgQ2hyb21pdW1EYXRhT2JqZWN0OjpjbGVhckFs
bEV4Y2VwdEZpbGVzKCkKK1Bhc3NSZWZQdHI8Q2hyb21pdW1EYXRhT2JqZWN0PiBDaHJvbWl1bURh
dGFPYmplY3Q6OmNyZWF0ZSgpCiB7Ci0gICAgbV91cmxUaXRsZSA9ICIiOwotICAgIG1fdXJsID0g
S1VSTCgpOwotICAgIG1fdXJpTGlzdCA9ICIiOwotICAgIG1fZG93bmxvYWRNZXRhZGF0YSA9ICIi
OwotICAgIG1fZmlsZUV4dGVuc2lvbiA9ICIiOwotICAgIG1fcGxhaW5UZXh0ID0gIiI7Ci0gICAg
bV90ZXh0SHRtbCA9ICIiOwotICAgIG1faHRtbEJhc2VVcmwgPSBLVVJMKCk7Ci0gICAgbV9maWxl
Q29udGVudEZpbGVuYW1lID0gIiI7Ci0gICAgaWYgKG1fZmlsZUNvbnRlbnQpCi0gICAgICAgIG1f
ZmlsZUNvbnRlbnQtPmNsZWFyKCk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDaHJvbWl1bURh
dGFPYmplY3QoRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bTo6Y3JlYXRlKCkpKTsKIH0KIAot
Ym9vbCBDaHJvbWl1bURhdGFPYmplY3Q6Omhhc0RhdGEoKSBjb25zdAorUGFzc1JlZlB0cjxDaHJv
bWl1bURhdGFPYmplY3Q+IENocm9taXVtRGF0YU9iamVjdDo6Y29weSgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuICFtX3VybC5pc0VtcHR5KCkKLSAgICAgICAgfHwgIW1fdXJpTGlzdC5pc0VtcHR5KCkK
LSAgICAgICAgfHwgIW1fZG93bmxvYWRNZXRhZGF0YS5pc0VtcHR5KCkKLSAgICAgICAgfHwgIW1f
ZmlsZUV4dGVuc2lvbi5pc0VtcHR5KCkKLSAgICAgICAgfHwgIW1fZmlsZW5hbWVzLmlzRW1wdHko
KQotICAgICAgICB8fCAhbV9wbGFpblRleHQuaXNFbXB0eSgpCi0gICAgICAgIHx8ICFtX3RleHRI
dG1sLmlzRW1wdHkoKQotICAgICAgICB8fCBtX2ZpbGVDb250ZW50OworICAgIHJldHVybiBhZG9w
dFJlZihuZXcgQ2hyb21pdW1EYXRhT2JqZWN0KCp0aGlzKSk7CiB9CiAKLUhhc2hTZXQ8U3RyaW5n
PiBDaHJvbWl1bURhdGFPYmplY3Q6OnR5cGVzKCkgY29uc3QKK1Bhc3NSZWZQdHI8RGF0YVRyYW5z
ZmVySXRlbUxpc3RDaHJvbWl1bT4gQ2hyb21pdW1EYXRhT2JqZWN0OjppdGVtcygpIGNvbnN0CiB7
Ci0gICAgaWYgKG1fc3RvcmFnZU1vZGUgPT0gUGFzdGVib2FyZCkgewotICAgICAgICBib29sIGln
bm9yZWRDb250YWluc0ZpbGVuYW1lczsKLSAgICAgICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9ydDo6
Y2xpcGJvYXJkUmVhZEF2YWlsYWJsZVR5cGVzKGN1cnJlbnRQYXN0ZWJvYXJkQnVmZmVyKCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAmaWdub3JlZENvbnRhaW5zRmlsZW5hbWVzKTsKLSAgICB9Ci0KLSAgICBIYXNoU2V0PFN0cmlu
Zz4gcmVzdWx0czsKLQotICAgIGlmICghbV9wbGFpblRleHQuaXNFbXB0eSgpKSB7Ci0gICAgICAg
IHJlc3VsdHMuYWRkKG1pbWVUeXBlVGV4dCk7Ci0gICAgICAgIHJlc3VsdHMuYWRkKG1pbWVUeXBl
VGV4dFBsYWluKTsKLSAgICB9Ci0KLSAgICBpZiAoIW1fdXJpTGlzdC5pc0VtcHR5KCkpCi0gICAg
ICAgIHJlc3VsdHMuYWRkKG1pbWVUeXBlVGV4dFVSSUxpc3QpOwotCi0gICAgaWYgKCFtX3RleHRI
dG1sLmlzRW1wdHkoKSkKLSAgICAgICAgcmVzdWx0cy5hZGQobWltZVR5cGVUZXh0SFRNTCk7Ci0K
LSAgICBpZiAoIW1fZG93bmxvYWRNZXRhZGF0YS5pc0VtcHR5KCkpCi0gICAgICAgIHJlc3VsdHMu
YWRkKG1pbWVUeXBlRG93bmxvYWRVUkwpOwotCi0gICAgZm9yIChIYXNoTWFwPFN0cmluZywgU3Ry
aW5nPjo6Y29uc3RfaXRlcmF0b3I6OktleXMgaXQgPSBtX2N1c3RvbURhdGEuYmVnaW4oKS5rZXlz
KCk7Ci0gICAgICAgICBpdCAhPSBtX2N1c3RvbURhdGEuZW5kKCkua2V5cygpOyArK2l0KSB7Ci0g
ICAgICAgIHJlc3VsdHMuYWRkKCppdCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdHM7Cisg
ICAgcmV0dXJuIG1faXRlbUxpc3Q7CiB9CiAKLVN0cmluZyBDaHJvbWl1bURhdGFPYmplY3Q6Omdl
dERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBib29sJiBzdWNjZXNzKSBjb25zdAordm9pZCBDaHJv
bWl1bURhdGFPYmplY3Q6OmNsZWFyRGF0YShjb25zdCBTdHJpbmcmIHR5cGUpCiB7Ci0gICAgaWYg
KHR5cGUgPT0gbWltZVR5cGVUZXh0UGxhaW4pIHsKLSAgICAgICAgaWYgKG1fc3RvcmFnZU1vZGUg
PT0gUGFzdGVib2FyZCkgewotICAgICAgICAgICAgU3RyaW5nIHRleHQgPSBQbGF0Zm9ybVN1cHBv
cnQ6OmNsaXBib2FyZFJlYWRQbGFpblRleHQoY3VycmVudFBhc3RlYm9hcmRCdWZmZXIoKSk7Ci0g
ICAgICAgICAgICBzdWNjZXNzID0gIXRleHQuaXNFbXB0eSgpOwotICAgICAgICAgICAgcmV0dXJu
IHRleHQ7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2l0ZW1MaXN0LT5sZW5ndGgoKTsg
KytpKSB7CisgICAgICAgIGlmIChtX2l0ZW1MaXN0LT5pdGVtKGkpLT5raW5kKCkgPT0gRGF0YVRy
YW5zZmVySXRlbTo6a2luZFN0cmluZyAmJiBtX2l0ZW1MaXN0LT5pdGVtKGkpLT50eXBlKCkgPT0g
dHlwZSkgeworICAgICAgICAgICAgLy8gUGVyIHRoZSBzcGVjLCB0eXBlIG11c3QgYmUgdW5pcXVl
IGFtb25nIGFsbCBpdGVtcyBvZiBraW5kICdzdHJpbmcnLgorICAgICAgICAgICAgbV9pdGVtTGlz
dC0+ZGVsZXRlSXRlbShpKTsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAg
ICBzdWNjZXNzID0gIW1fcGxhaW5UZXh0LmlzRW1wdHkoKTsKLSAgICAgICAgcmV0dXJuIG1fcGxh
aW5UZXh0OwotICAgIH0KLQotICAgIGlmICh0eXBlID09IG1pbWVUeXBlVVJMKSB7Ci0gICAgICAg
IHN1Y2Nlc3MgPSAhbV91cmlMaXN0LmlzRW1wdHkoKTsKLSAgICAgICAgcmV0dXJuIG1fdXJsLnN0
cmluZygpOwogICAgIH0KK30KIAotICAgIGlmICh0eXBlID09IG1pbWVUeXBlVGV4dFVSSUxpc3Qp
IHsKLSAgICAgICAgc3VjY2VzcyA9ICFtX3VyaUxpc3QuaXNFbXB0eSgpOwotICAgICAgICByZXR1
cm4gbV91cmlMaXN0OwotICAgIH0KK3ZvaWQgQ2hyb21pdW1EYXRhT2JqZWN0OjpjbGVhckFsbCgp
Cit7CisgICAgbV9pdGVtTGlzdC0+Y2xlYXIoKTsKK30KIAotICAgIGlmICh0eXBlID09IG1pbWVU
eXBlVGV4dEhUTUwpIHsKLSAgICAgICAgaWYgKG1fc3RvcmFnZU1vZGUgPT0gUGFzdGVib2FyZCkg
ewotICAgICAgICAgICAgU3RyaW5nIGh0bWxUZXh0OwotICAgICAgICAgICAgS1VSTCBzb3VyY2VV
Ukw7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpZ25vcmVkOwotICAgICAgICAgICAgUGxhdGZvcm1T
dXBwb3J0OjpjbGlwYm9hcmRSZWFkSFRNTChjdXJyZW50UGFzdGVib2FyZEJ1ZmZlcigpLCAmaHRt
bFRleHQsICZzb3VyY2VVUkwsICZpZ25vcmVkLCAmaWdub3JlZCk7Ci0gICAgICAgICAgICBzdWNj
ZXNzID0gIWh0bWxUZXh0LmlzRW1wdHkoKTsKLSAgICAgICAgICAgIHJldHVybiBodG1sVGV4dDsK
K3ZvaWQgQ2hyb21pdW1EYXRhT2JqZWN0OjpjbGVhckFsbEV4Y2VwdEZpbGVzKCkKK3sKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1faXRlbUxpc3QtPmxlbmd0aCgpOyApIHsKKyAgICAgICAg
aWYgKG1faXRlbUxpc3QtPml0ZW0oaSktPmtpbmQoKSAhPSBEYXRhVHJhbnNmZXJJdGVtOjpraW5k
RmlsZSkgeworICAgICAgICAgICAgbV9pdGVtTGlzdC0+ZGVsZXRlSXRlbShpKTsKKyAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIHN1Y2Nlc3MgPSAhbV90ZXh0SHRtbC5p
c0VtcHR5KCk7Ci0gICAgICAgIHJldHVybiBtX3RleHRIdG1sOwotICAgIH0KLQotICAgIGlmICh0
eXBlID09IG1pbWVUeXBlRG93bmxvYWRVUkwpIHsKLSAgICAgICAgc3VjY2VzcyA9ICFtX2Rvd25s
b2FkTWV0YWRhdGEuaXNFbXB0eSgpOwotICAgICAgICByZXR1cm4gbV9kb3dubG9hZE1ldGFkYXRh
OworICAgICAgICArK2k7CiAgICAgfQorfQogCi0gICAgaWYgKG1fc3RvcmFnZU1vZGUgPT0gUGFz
dGVib2FyZCkgewotICAgICAgICBTdHJpbmcgZGF0YSA9IFBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJv
YXJkUmVhZEN1c3RvbURhdGEoY3VycmVudFBhc3RlYm9hcmRCdWZmZXIoKSwgdHlwZSk7Ci0gICAg
ICAgIHN1Y2Nlc3MgPSAhZGF0YS5pc0VtcHR5KCk7Ci0gICAgICAgIHJldHVybiBkYXRhOwotICAg
IH0KK0hhc2hTZXQ8U3RyaW5nPiBDaHJvbWl1bURhdGFPYmplY3Q6OnR5cGVzKCkgY29uc3QKK3sK
KyAgICBIYXNoU2V0PFN0cmluZz4gcmVzdWx0czsKKyAgICBib29sIGNvbnRhaW5zRmlsZXMgPSBm
YWxzZTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1faXRlbUxpc3QtPmxlbmd0aCgpOyAr
K2kpIHsKKyAgICAgICAgaWYgKG1faXRlbUxpc3QtPml0ZW0oaSktPmtpbmQoKSA9PSBEYXRhVHJh
bnNmZXJJdGVtOjpraW5kU3RyaW5nKQorICAgICAgICAgICAgcmVzdWx0cy5hZGQobV9pdGVtTGlz
dC0+aXRlbShpKS0+dHlwZSgpKTsKKyAgICAgICAgZWxzZSBpZiAobV9pdGVtTGlzdC0+aXRlbShp
KS0+a2luZCgpID09IERhdGFUcmFuc2Zlckl0ZW06OmtpbmRGaWxlKQorICAgICAgICAgICAgY29u
dGFpbnNGaWxlcyA9IHRydWU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIH0KKyAgICBpZiAoY29udGFpbnNGaWxlcykKKyAgICAgICAgcmVzdWx0
cy5hZGQobWltZVR5cGVGaWxlcyk7CisgICAgcmV0dXJuIHJlc3VsdHM7Cit9CiAKLSAgICBIYXNo
TWFwPFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2N1c3RvbURhdGEuZmlu
ZCh0eXBlKTsKLSAgICBpZiAoaXQgIT0gbV9jdXN0b21EYXRhLmVuZCgpKSB7Ci0gICAgICAgIHN1
Y2Nlc3MgPSB0cnVlOwotICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKK1N0cmluZyBDaHJvbWl1
bURhdGFPYmplY3Q6OmdldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlKSBjb25zdAoreworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9pdGVtTGlzdC0+bGVuZ3RoKCk7ICsraSkgIHsKKyAgICAg
ICAgaWYgKG1faXRlbUxpc3QtPml0ZW0oaSktPmtpbmQoKSA9PSBEYXRhVHJhbnNmZXJJdGVtOjpr
aW5kU3RyaW5nICYmIG1faXRlbUxpc3QtPml0ZW0oaSktPnR5cGUoKSA9PSB0eXBlKQorICAgICAg
ICAgICAgcmV0dXJuIG1faXRlbUxpc3QtPml0ZW0oaSktPmludGVybmFsR2V0QXNTdHJpbmcoKTsK
ICAgICB9Ci0KLSAgICBzdWNjZXNzID0gZmFsc2U7CiAgICAgcmV0dXJuIFN0cmluZygpOwogfQog
CiBib29sIENocm9taXVtRGF0YU9iamVjdDo6c2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGNv
bnN0IFN0cmluZyYgZGF0YSkKIHsKLSAgICBpZiAodHlwZSA9PSBtaW1lVHlwZVRleHRQbGFpbikg
ewotICAgICAgICBtX3BsYWluVGV4dCA9IGRhdGE7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IH0KLQotICAgIGlmICh0eXBlID09IG1pbWVUeXBlVVJMIHx8IHR5cGUgPT0gbWltZVR5cGVUZXh0
VVJJTGlzdCkgewotICAgICAgICBtX3VybCA9IEtVUkwoKTsKLSAgICAgICAgVmVjdG9yPFN0cmlu
Zz4gdXJpTGlzdDsKLSAgICAgICAgLy8gTGluZSBzZXBhcmF0b3IgaXMgXHJcbiBwZXIgUkZDIDI0
ODMgLSBob3dldmVyLCBmb3IgY29tcGF0aWJpbGl0eQotICAgICAgICAvLyByZWFzb25zIHdlIGFs
c28gYWxsb3cganVzdCBcbiBoZXJlLgotICAgICAgICBkYXRhLnNwbGl0KCdcbicsIHVyaUxpc3Qp
OwotICAgICAgICAvLyBQcm9jZXNzIHRoZSBpbnB1dCBhbmQgY29weSB0aGUgZmlyc3QgdmFsaWQg
VVJMIGludG8gdGhlIHVybCBtZW1iZXIuCi0gICAgICAgIC8vIEluIGNhc2Ugbm8gVVJMcyBjYW4g
YmUgZm91bmQsIHN1YnNlcXVlbnQgY2FsbHMgdG8gZ2V0RGF0YSgiVVJMIikKLSAgICAgICAgLy8g
d2lsbCBnZXQgYW4gZW1wdHkgc3RyaW5nLiBUaGlzIGlzIGluIGxpbmUgd2l0aCB0aGUgSFRNTDUg
c3BlYyAoc2VlCi0gICAgICAgIC8vICJUaGUgRHJhZ0V2ZW50IGFuZCBEYXRhVHJhbnNmZXIgaW50
ZXJmYWNlcyIpLgotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHVyaUxpc3Quc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgICAgIFN0cmluZyYgbGluZSA9IHVyaUxpc3RbaV07Ci0gICAgICAg
ICAgICBsaW5lID0gbGluZS5zdHJpcFdoaXRlU3BhY2UoKTsKLSAgICAgICAgICAgIGlmIChsaW5l
LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgaWYgKGxpbmVbMF0gPT0gJyMnKQotICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgS1VSTCB1cmwgPSBLVVJMKFBhcnNlZFVSTFN0cmluZywgbGluZSk7Ci0g
ICAgICAgICAgICBpZiAodXJsLmlzVmFsaWQoKSkgewotICAgICAgICAgICAgICAgIG1fdXJsID0g
dXJsOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgICAgIG1fdXJpTGlzdCA9IGRhdGE7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KKyAg
ICBjbGVhckRhdGEodHlwZSk7CisgICAgbV9pdGVtTGlzdC0+YWRkKGRhdGEsIHR5cGUsIEFTU0VS
VF9OT19FWENFUFRJT04pOworICAgIHJldHVybiB0cnVlOworfQogCi0gICAgaWYgKHR5cGUgPT0g
bWltZVR5cGVUZXh0SFRNTCkgewotICAgICAgICBtX3RleHRIdG1sID0gZGF0YTsKLSAgICAgICAg
bV9odG1sQmFzZVVybCA9IEtVUkwoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQordm9p
ZCBDaHJvbWl1bURhdGFPYmplY3Q6OnVybEFuZFRpdGxlKFN0cmluZyYgdXJsLCBTdHJpbmcqIHRp
dGxlKSBjb25zdAoreworICAgIFJlZlB0cjxEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0+IGl0ZW0g
PSBmaW5kSXRlbShtX2l0ZW1MaXN0LCBtaW1lVHlwZVRleHRVUklMaXN0KTsKKyAgICBpZiAoIWl0
ZW0pCisgICAgICAgIHJldHVybjsKKyAgICB1cmwgPSBjb252ZXJ0VVJJTGlzdFRvVVJMKGl0ZW0t
PmludGVybmFsR2V0QXNTdHJpbmcoKSk7CisgICAgaWYgKHRpdGxlKQorICAgICAgICAqdGl0bGUg
PSBpdGVtLT50aXRsZSgpOworfQogCi0gICAgaWYgKHR5cGUgPT0gbWltZVR5cGVEb3dubG9hZFVS
TCkgewotICAgICAgICBtX2Rvd25sb2FkTWV0YWRhdGEgPSBkYXRhOwotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Cit2b2lkIENocm9taXVtRGF0YU9iamVjdDo6c2V0VVJMQW5kVGl0bGUoY29u
c3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgdGl0bGUpCit7CisgICAgY2xlYXJEYXRhKG1p
bWVUeXBlVGV4dFVSSUxpc3QpOworICAgIG1faXRlbUxpc3QtPmludGVybmFsQWRkU3RyaW5nSXRl
bShEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW06OmNyZWF0ZUZyb21VUkwodXJsLCB0aXRsZSkpOwor
fQogCi0gICAgaWYgKHR5cGUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Cit2b2lk
IENocm9taXVtRGF0YU9iamVjdDo6aHRtbEFuZEJhc2VVUkwoU3RyaW5nJiBodG1sLCBLVVJMJiBi
YXNlVVJMKSBjb25zdAoreworICAgIFJlZlB0cjxEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0+IGl0
ZW0gPSBmaW5kSXRlbShtX2l0ZW1MaXN0LCBtaW1lVHlwZVRleHRIVE1MKTsKKyAgICBpZiAoIWl0
ZW0pCisgICAgICAgIHJldHVybjsKKyAgICBodG1sID0gaXRlbS0+aW50ZXJuYWxHZXRBc1N0cmlu
ZygpOworICAgIGJhc2VVUkwgPSBpdGVtLT5iYXNlVVJMKCk7Cit9CiAKLSAgICBtX2N1c3RvbURh
dGEuc2V0KHR5cGUsIGRhdGEpOwotICAgIHJldHVybiB0cnVlOwordm9pZCBDaHJvbWl1bURhdGFP
YmplY3Q6OnNldEhUTUxBbmRCYXNlVVJMKGNvbnN0IFN0cmluZyYgaHRtbCwgY29uc3QgS1VSTCYg
YmFzZVVSTCkKK3sKKyAgICBjbGVhckRhdGEobWltZVR5cGVUZXh0SFRNTCk7CisgICAgbV9pdGVt
TGlzdC0+aW50ZXJuYWxBZGRTdHJpbmdJdGVtKERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bTo6Y3Jl
YXRlRnJvbUhUTUwoaHRtbCwgYmFzZVVSTCkpOwogfQogCiBib29sIENocm9taXVtRGF0YU9iamVj
dDo6Y29udGFpbnNGaWxlbmFtZXMoKSBjb25zdAogewotICAgIGJvb2wgY29udGFpbnNGaWxlbmFt
ZXM7Ci0gICAgaWYgKG1fc3RvcmFnZU1vZGUgPT0gUGFzdGVib2FyZCkgewotICAgICAgICBIYXNo
U2V0PFN0cmluZz4gaWdub3JlZFJlc3VsdHMgPQotICAgICAgICAgICAgUGxhdGZvcm1TdXBwb3J0
OjpjbGlwYm9hcmRSZWFkQXZhaWxhYmxlVHlwZXMoY3VycmVudFBhc3RlYm9hcmRCdWZmZXIoKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICZjb250YWluc0ZpbGVuYW1lcyk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGNvbnRhaW5zRmlsZW5h
bWVzID0gIW1fZmlsZW5hbWVzLmlzRW1wdHkoKTsKLSAgICByZXR1cm4gY29udGFpbnNGaWxlbmFt
ZXM7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2l0ZW1MaXN0LT5sZW5ndGgoKTsgKytp
KQorICAgICAgICBpZiAobV9pdGVtTGlzdC0+aXRlbShpKS0+aXNGaWxlbmFtZSgpKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitWZWN0b3I8U3RyaW5n
PiBDaHJvbWl1bURhdGFPYmplY3Q6OmZpbGVuYW1lcygpIGNvbnN0Cit7CisgICAgVmVjdG9yPFN0
cmluZz4gcmVzdWx0czsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1faXRlbUxpc3QtPmxl
bmd0aCgpOyArK2kpCisgICAgICAgIGlmIChtX2l0ZW1MaXN0LT5pdGVtKGkpLT5pc0ZpbGVuYW1l
KCkpCisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChzdGF0aWNfY2FzdDxGaWxlKj4obV9pdGVt
TGlzdC0+aXRlbShpKS0+Z2V0QXNGaWxlKCkuZ2V0KCkpLT5wYXRoKCkpOworICAgIHJldHVybiBy
ZXN1bHRzOworfQorCit2b2lkIENocm9taXVtRGF0YU9iamVjdDo6YWRkRmlsZW5hbWUoY29uc3Qg
U3RyaW5nJiBmaWxlbmFtZSkKK3sKKyAgICBtX2l0ZW1MaXN0LT5pbnRlcm5hbEFkZEZpbGVJdGVt
KERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bTo6Y3JlYXRlRnJvbUZpbGUoRmlsZTo6Y3JlYXRlKGZp
bGVuYW1lKSkpOworfQorCit2b2lkIENocm9taXVtRGF0YU9iamVjdDo6YWRkU2hhcmVkQnVmZmVy
KGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlcikKK3sK
KyAgICBtX2l0ZW1MaXN0LT5pbnRlcm5hbEFkZEZpbGVJdGVtKERhdGFUcmFuc2Zlckl0ZW1DaHJv
bWl1bTo6Y3JlYXRlRnJvbVNoYXJlZEJ1ZmZlcihuYW1lLCBidWZmZXIpKTsKIH0KIAotQ2hyb21p
dW1EYXRhT2JqZWN0OjpDaHJvbWl1bURhdGFPYmplY3QoU3RvcmFnZU1vZGUgc3RvcmFnZU1vZGUp
Ci0gICAgOiBtX3N0b3JhZ2VNb2RlKHN0b3JhZ2VNb2RlKQorQ2hyb21pdW1EYXRhT2JqZWN0OjpD
aHJvbWl1bURhdGFPYmplY3QoUGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVt
PiBpdGVtTGlzdCkKKyAgICA6IG1faXRlbUxpc3QoaXRlbUxpc3QpCiB7CiB9CiAKIENocm9taXVt
RGF0YU9iamVjdDo6Q2hyb21pdW1EYXRhT2JqZWN0KGNvbnN0IENocm9taXVtRGF0YU9iamVjdCYg
b3RoZXIpCiAgICAgOiBSZWZDb3VudGVkPENocm9taXVtRGF0YU9iamVjdD4oKQotICAgICwgbV9z
dG9yYWdlTW9kZShvdGhlci5tX3N0b3JhZ2VNb2RlKQotICAgICwgbV91cmxUaXRsZShvdGhlci5t
X3VybFRpdGxlKQotICAgICwgbV9kb3dubG9hZE1ldGFkYXRhKG90aGVyLm1fZG93bmxvYWRNZXRh
ZGF0YSkKLSAgICAsIG1fZmlsZUV4dGVuc2lvbihvdGhlci5tX2ZpbGVFeHRlbnNpb24pCi0gICAg
LCBtX2ZpbGVuYW1lcyhvdGhlci5tX2ZpbGVuYW1lcykKLSAgICAsIG1fcGxhaW5UZXh0KG90aGVy
Lm1fcGxhaW5UZXh0KQotICAgICwgbV90ZXh0SHRtbChvdGhlci5tX3RleHRIdG1sKQotICAgICwg
bV9odG1sQmFzZVVybChvdGhlci5tX2h0bWxCYXNlVXJsKQotICAgICwgbV9maWxlQ29udGVudEZp
bGVuYW1lKG90aGVyLm1fZmlsZUNvbnRlbnRGaWxlbmFtZSkKLSAgICAsIG1fdXJsKG90aGVyLm1f
dXJsKQotICAgICwgbV91cmlMaXN0KG90aGVyLm1fdXJpTGlzdCkKKyAgICAsIG1faXRlbUxpc3Qo
b3RoZXIubV9pdGVtTGlzdCkKIHsKLSAgICBpZiAob3RoZXIubV9maWxlQ29udGVudC5nZXQoKSkK
LSAgICAgICAgbV9maWxlQ29udGVudCA9IG90aGVyLm1fZmlsZUNvbnRlbnQtPmNvcHkoKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuaAppbmRleCA3ZTY3NWJmOTM5OTUwYmZl
ODg1MjM0YjA3MWU5YTg0MmQxNGYxYjE4Li41YTFjNDJlNDBhMjBhNGUzMTRmZTllNjU3NjE1MmY0
Mzg0ZjY3ZWNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9D
aHJvbWl1bURhdGFPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9DaHJvbWl1bURhdGFPYmplY3QuaApAQCAtMzEsMTAgKzMxLDggQEAKICNpZm5kZWYgQ2hyb21p
dW1EYXRhT2JqZWN0X2gKICNkZWZpbmUgQ2hyb21pdW1EYXRhT2JqZWN0X2gKIAotI2luY2x1ZGUg
IktVUkwuaCIKKyNpbmNsdWRlICJEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtLmgiCiAjaW5j
bHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKLSNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTQyLDk1ICs0MCw0NyBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEtVUkw7CitjbGFzcyBTaGFyZWRCdWZm
ZXI7CisKIC8vIEEgZGF0YSBvYmplY3QgZm9yIGhvbGRpbmcgZGF0YSB0aGF0IHdvdWxkIGJlIGlu
IGEgY2xpcGJvYXJkIG9yIG1vdmVkCiAvLyBkdXJpbmcgYSBkcmFnLW4tZHJvcCBvcGVyYXRpb24u
ICBUaGlzIGlzIHRoZSBkYXRhIHRoYXQgV2ViQ29yZSBpcyBhd2FyZQogLy8gb2YgYW5kIGlzIG5v
dCBzcGVjaWZpYyB0byBhIHBsYXRmb3JtLgogY2xhc3MgQ2hyb21pdW1EYXRhT2JqZWN0IDogcHVi
bGljIFJlZkNvdW50ZWQ8Q2hyb21pdW1EYXRhT2JqZWN0PiB7CiBwdWJsaWM6Ci0gICAgZW51bSBT
dG9yYWdlTW9kZSB7Ci0gICAgICAgIEJ1ZmZlcmVkLAotICAgICAgICBQYXN0ZWJvYXJkLAotICAg
IH07Ci0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxDaHJvbWl1bURhdGFPYmplY3Q+IGNyZWF0ZUZy
b21QYXN0ZWJvYXJkKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2hyb21p
dW1EYXRhT2JqZWN0KFBhc3RlYm9hcmQpKTsKLSAgICB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8
Q2hyb21pdW1EYXRhT2JqZWN0PiBjcmVhdGVGcm9tUGFzdGVib2FyZCgpOworICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPENocm9taXVtRGF0YU9iamVjdD4gY3JlYXRlKCk7CiAKLSAgICBzdGF0aWMgUGFz
c1JlZlB0cjxDaHJvbWl1bURhdGFPYmplY3Q+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IENocm9taXVtRGF0YU9iamVjdChCdWZmZXJlZCkpOwotICAgIH0KKyAg
ICBQYXNzUmVmUHRyPENocm9taXVtRGF0YU9iamVjdD4gY29weSgpIGNvbnN0OwogCi0gICAgUGFz
c1JlZlB0cjxDaHJvbWl1bURhdGFPYmplY3Q+IGNvcHkoKSBjb25zdAotICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBDaHJvbWl1bURhdGFPYmplY3QoKnRoaXMpKTsKLSAgICB9Ci0K
LSAgICBTdG9yYWdlTW9kZSBzdG9yYWdlTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcmFnZU1v
ZGU7IH0KKyAgICBQYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0+IGl0ZW1z
KCkgY29uc3Q7CiAKICAgICB2b2lkIGNsZWFyRGF0YShjb25zdCBTdHJpbmcmIHR5cGUpOwogICAg
IHZvaWQgY2xlYXJBbGwoKTsKICAgICB2b2lkIGNsZWFyQWxsRXhjZXB0RmlsZXMoKTsKIAotICAg
IGJvb2wgaGFzRGF0YSgpIGNvbnN0OwotCiAgICAgSGFzaFNldDxTdHJpbmc+IHR5cGVzKCkgY29u
c3Q7Ci0gICAgU3RyaW5nIGdldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBib29sJiBzdWNjZXNz
KSBjb25zdDsKKyAgICBTdHJpbmcgZ2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUpIGNvbnN0Owog
ICAgIGJvb2wgc2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSk7
CiAKLSAgICAvLyBTcGVjaWFsIGhhbmRsZXJzIGZvciBVUkwvSFRNTCBtZXRhZGF0YS4KLSAgICBT
dHJpbmcgdXJsVGl0bGUoKSBjb25zdCB7IHJldHVybiBtX3VybFRpdGxlOyB9Ci0gICAgdm9pZCBz
ZXRVcmxUaXRsZShjb25zdCBTdHJpbmcmIHVybFRpdGxlKSB7IG1fdXJsVGl0bGUgPSB1cmxUaXRs
ZTsgfQotICAgIEtVUkwgaHRtbEJhc2VVcmwoKSBjb25zdCB7IHJldHVybiBtX2h0bWxCYXNlVXJs
OyB9Ci0gICAgdm9pZCBzZXRIdG1sQmFzZVVybChjb25zdCBLVVJMJiB1cmwpIHsgbV9odG1sQmFz
ZVVybCA9IHVybDsgfQorICAgIHZvaWQgdXJsQW5kVGl0bGUoU3RyaW5nJiB1cmwsIFN0cmluZyog
dGl0bGUgPSAwKSBjb25zdDsKKyAgICB2b2lkIHNldFVSTEFuZFRpdGxlKGNvbnN0IFN0cmluZyYg
dXJsLCBjb25zdCBTdHJpbmcmIHRpdGxlKTsKKyAgICB2b2lkIGh0bWxBbmRCYXNlVVJMKFN0cmlu
ZyYgaHRtbCwgS1VSTCYgYmFzZVVSTCkgY29uc3Q7CisgICAgdm9pZCBzZXRIVE1MQW5kQmFzZVVS
TChjb25zdCBTdHJpbmcmIGh0bWwsIGNvbnN0IEtVUkwmIGJhc2VVUkwpOwogCi0gICAgLy8gVXNl
ZCB0byBoYW5kbGUgZmlsZXMgYmVpbmcgZHJhZ2dlZCBpbiBhbmQgb3V0LgorICAgIC8vIFVzZWQg
Zm9yIGRyYWdnaW5nIGluIGZpbGVzIGZyb20gdGhlIGRlc2t0b3AuCiAgICAgYm9vbCBjb250YWlu
c0ZpbGVuYW1lcygpIGNvbnN0OwotICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMo
KSBjb25zdCB7IHJldHVybiBtX2ZpbGVuYW1lczsgfQotICAgIHZvaWQgc2V0RmlsZW5hbWVzKGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMpIHsgbV9maWxlbmFtZXMgPSBmaWxlbmFtZXM7
IH0KLQotICAgIC8vIFVzZWQgdG8gaGFuZGxlIGZpbGVzIGJlaW5nIGRyYWdnZWQgb3V0LgotICAg
IHZvaWQgYWRkRmlsZW5hbWUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSkgeyBtX2ZpbGVuYW1lcy5h
cHBlbmQoZmlsZW5hbWUpOyB9CisgICAgVmVjdG9yPFN0cmluZz4gZmlsZW5hbWVzKCkgY29uc3Q7
CisgICAgdm9pZCBhZGRGaWxlbmFtZShjb25zdCBTdHJpbmcmKTsKIAogICAgIC8vIFVzZWQgdG8g
aGFuZGxlIGZpbGVzIChpbWFnZXMpIGJlaW5nIGRyYWdnZWQgb3V0LgotICAgIFN0cmluZyBmaWxl
RXh0ZW5zaW9uKCkgY29uc3QgeyByZXR1cm4gbV9maWxlRXh0ZW5zaW9uOyB9Ci0gICAgdm9pZCBz
ZXRGaWxlRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgZmlsZUV4dGVuc2lvbikgeyBtX2ZpbGVFeHRl
bnNpb24gPSBmaWxlRXh0ZW5zaW9uOyB9Ci0gICAgU3RyaW5nIGZpbGVDb250ZW50RmlsZW5hbWUo
KSBjb25zdCB7IHJldHVybiBtX2ZpbGVDb250ZW50RmlsZW5hbWU7IH0KLSAgICB2b2lkIHNldEZp
bGVDb250ZW50RmlsZW5hbWUoY29uc3QgU3RyaW5nJiBmaWxlQ29udGVudEZpbGVuYW1lKSB7IG1f
ZmlsZUNvbnRlbnRGaWxlbmFtZSA9IGZpbGVDb250ZW50RmlsZW5hbWU7IH0KLSAgICBQYXNzUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4gZmlsZUNvbnRlbnQoKSBjb25zdCB7IHJldHVybiBtX2ZpbGVDb250
ZW50OyB9Ci0gICAgdm9pZCBzZXRGaWxlQ29udGVudChQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4g
ZmlsZUNvbnRlbnQpIHsgbV9maWxlQ29udGVudCA9IGZpbGVDb250ZW50OyB9Ci0gICAgY29uc3Qg
SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIGN1c3RvbURhdGEoKSBjb25zdCB7IHJldHVybiBtX2N1
c3RvbURhdGE7IH0KLSAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYgY3VzdG9tRGF0YSgpIHsg
cmV0dXJuIG1fY3VzdG9tRGF0YTsgfQorICAgIHZvaWQgYWRkU2hhcmVkQnVmZmVyKGNvbnN0IFN0
cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+KTsKIAogcHJpdmF0ZToKLSAgICBl
eHBsaWNpdCBDaHJvbWl1bURhdGFPYmplY3QoU3RvcmFnZU1vZGUpOworICAgIGV4cGxpY2l0IENo
cm9taXVtRGF0YU9iamVjdChQYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0+
KTsKICAgICBleHBsaWNpdCBDaHJvbWl1bURhdGFPYmplY3QoY29uc3QgQ2hyb21pdW1EYXRhT2Jq
ZWN0Jik7CiAKLSAgICBTdG9yYWdlTW9kZSBtX3N0b3JhZ2VNb2RlOwotCi0gICAgU3RyaW5nIG1f
dXJsVGl0bGU7Ci0KLSAgICBTdHJpbmcgbV9kb3dubG9hZE1ldGFkYXRhOwotCi0gICAgU3RyaW5n
IG1fZmlsZUV4dGVuc2lvbjsKLSAgICBWZWN0b3I8U3RyaW5nPiBtX2ZpbGVuYW1lczsKLQotICAg
IFN0cmluZyBtX3BsYWluVGV4dDsKLQotICAgIFN0cmluZyBtX3RleHRIdG1sOwotICAgIEtVUkwg
bV9odG1sQmFzZVVybDsKLQotICAgIFN0cmluZyBtX2ZpbGVDb250ZW50RmlsZW5hbWU7Ci0gICAg
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV9maWxlQ29udGVudDsKLQotICAgIEhhc2hNYXA8U3RyaW5n
LCBTdHJpbmc+IG1fY3VzdG9tRGF0YTsKLQotICAgIC8vIFRoZXNlIHR3byBhcmUgbGlua2VkLiBT
ZXR0aW5nIG1fdXJsIHdpbGwgc2V0IG1fdXJpTGlzdCB0byB0aGUgc2FtZQotICAgIC8vIHN0cmlu
ZyB2YWx1ZTsgc2V0dGluZyBtX3VyaUxpc3Qgd2lsbCBjYXVzZSBpdHMgY29udGVudHMgdG8gYmUg
cGFyc2VkCi0gICAgLy8gYWNjb3JkaW5nIHRvIFJGQyAyNDgzIGFuZCB0aGUgZmlyc3QgVVJMIGZv
dW5kIHdpbGwgYmUgc2V0IGluIG1fdXJsLgotICAgIEtVUkwgbV91cmw7Ci0gICAgU3RyaW5nIG1f
dXJpTGlzdDsKKyAgICBSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bT4gbV9pdGVt
TGlzdDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmNwcAppbmRleCBlMjM4
YjJkZmQ3N2M2NmVlMjE0M2FjZWE4NTQ3NzdlOTI5ZGFkOTFkLi4zMTIxZWE4MDkxNmY0YjZkMzQ1
NDg4ZGQ0NWYzOWMwMGVjZDQxODExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uY3BwCkBAIC0zMSw3ICszMSw5IEBACiAj
aW5jbHVkZSAiQ2hyb21pdW1EYXRhT2JqZWN0LmgiCiAjaW5jbHVkZSAiQ2xpcGJvYXJkTWltZVR5
cGVzLmgiCiAjaW5jbHVkZSAiQ2xpcGJvYXJkVXRpbGl0aWVzQ2hyb21pdW0uaCIKKyNpbmNsdWRl
ICJEYXRhVHJhbnNmZXJJdGVtLmgiCiAjaW5jbHVkZSAiRGF0YVRyYW5zZmVySXRlbUNocm9taXVt
LmgiCisjaW5jbHVkZSAiRGF0YVRyYW5zZmVySXRlbUxpc3QuaCIKICNpbmNsdWRlICJEYXRhVHJh
bnNmZXJJdGVtTGlzdENocm9taXVtLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRl
ICJEcmFnRGF0YS5oIgpAQCAtODEsNyArODMsNyBAQCBwcml2YXRlOgogY2xhc3MgRGF0YVRyYW5z
ZmVySXRlbVBvbGljeVdyYXBwZXIgOiBwdWJsaWMgRGF0YVRyYW5zZmVySXRlbSB7CiBwdWJsaWM6
CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YVRyYW5zZmVySXRlbVBvbGljeVdyYXBwZXI+IGNy
ZWF0ZSgKLSAgICAgICAgUGFzc1JlZlB0cjxDbGlwYm9hcmRDaHJvbWl1bT4sIFBhc3NSZWZQdHI8
RGF0YVRyYW5zZmVySXRlbT4pOworICAgICAgICBQYXNzUmVmUHRyPENsaXBib2FyZENocm9taXVt
PiwgUGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0+KTsKIAogICAgIHZpcnR1YWwg
U3RyaW5nIGtpbmQoKSBjb25zdDsKICAgICB2aXJ0dWFsIFN0cmluZyB0eXBlKCkgY29uc3Q7CkBA
IC05MCwxMCArOTIsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxCbG9iPiBn
ZXRBc0ZpbGUoKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBEYXRhVHJhbnNmZXJJdGVtUG9saWN5
V3JhcHBlcihQYXNzUmVmUHRyPENsaXBib2FyZENocm9taXVtPiwgUGFzc1JlZlB0cjxEYXRhVHJh
bnNmZXJJdGVtPik7CisgICAgRGF0YVRyYW5zZmVySXRlbVBvbGljeVdyYXBwZXIoUGFzc1JlZlB0
cjxDbGlwYm9hcmRDaHJvbWl1bT4sIFBhc3NSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUNocm9taXVt
Pik7CiAKICAgICBSZWZQdHI8Q2xpcGJvYXJkQ2hyb21pdW0+IG1fY2xpcGJvYXJkOwotICAgIFJl
ZlB0cjxEYXRhVHJhbnNmZXJJdGVtPiBtX2l0ZW07CisgICAgUmVmUHRyPERhdGFUcmFuc2Zlckl0
ZW1DaHJvbWl1bT4gbV9pdGVtOwogfTsKIAogUGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtTGlz
dFBvbGljeVdyYXBwZXI+IERhdGFUcmFuc2Zlckl0ZW1MaXN0UG9saWN5V3JhcHBlcjo6Y3JlYXRl
KApAQCAtMTEzLDcgKzExNSw3IEBAIFBhc3NSZWZQdHI8RGF0YVRyYW5zZmVySXRlbT4gRGF0YVRy
YW5zZmVySXRlbUxpc3RQb2xpY3lXcmFwcGVyOjppdGVtKHVuc2lnbmVkIGxvCiB7CiAgICAgaWYg
KG1fY2xpcGJvYXJkLT5wb2xpY3koKSA9PSBDbGlwYm9hcmROdW1iKQogICAgICAgICByZXR1cm4g
MDsKLSAgICBSZWZQdHI8RGF0YVRyYW5zZmVySXRlbT4gaXRlbSA9IG1fbGlzdC0+aXRlbShpbmRl
eCk7CisgICAgUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bT4gaXRlbSA9IG1fbGlzdC0+
aXRlbShpbmRleCk7CiAgICAgaWYgKCFpdGVtKQogICAgICAgICByZXR1cm4gMDsKICAgICByZXR1
cm4gRGF0YVRyYW5zZmVySXRlbVBvbGljeVdyYXBwZXI6OmNyZWF0ZShtX2NsaXBib2FyZCwgaXRl
bSk7CkBAIC0xMjUsOCArMTI3LDcgQEAgdm9pZCBEYXRhVHJhbnNmZXJJdGVtTGlzdFBvbGljeVdy
YXBwZXI6OmRlbGV0ZUl0ZW0odW5zaWduZWQgbG9uZyBpbmRleCwgRXhjZXB0aW8KICAgICAgICAg
ZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAvLyBG
SVhNRTogV2UgaGFuZGxlIGFsbCB0aGUgZXhjZXB0aW9ucyBoZXJlLCBzbyB3ZSBkb24ndCBuZWVk
IHRvIHByb3BvZ2F0ZSBlYy4KLSAgICBtX2xpc3QtPmRlbGV0ZUl0ZW0oaW5kZXgsIGVjKTsKKyAg
ICBtX2xpc3QtPmRlbGV0ZUl0ZW0oaW5kZXgpOwogfQogCiB2b2lkIERhdGFUcmFuc2Zlckl0ZW1M
aXN0UG9saWN5V3JhcHBlcjo6Y2xlYXIoKQpAQCAtMTQ3LDcgKzE0OCw3IEBAIHZvaWQgRGF0YVRy
YW5zZmVySXRlbUxpc3RQb2xpY3lXcmFwcGVyOjphZGQoUGFzc1JlZlB0cjxGaWxlPiBmaWxlKQog
ewogICAgIGlmIChtX2NsaXBib2FyZC0+cG9saWN5KCkgIT0gQ2xpcGJvYXJkV3JpdGFibGUpCiAg
ICAgICAgIHJldHVybjsKLSAgICBtX2xpc3QtPmFkZChmaWxlKTsKKyAgICBtX2xpc3QtPmFkZChm
aWxlLCBtX2NsaXBib2FyZC0+ZnJhbWUoKS0+ZG9jdW1lbnQoKS0+c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpKTsKIH0KIAogRGF0YVRyYW5zZmVySXRlbUxpc3RQb2xpY3lXcmFwcGVyOjpEYXRhVHJh
bnNmZXJJdGVtTGlzdFBvbGljeVdyYXBwZXIoCkBAIC0xNTgsNyArMTU5LDcgQEAgRGF0YVRyYW5z
ZmVySXRlbUxpc3RQb2xpY3lXcmFwcGVyOjpEYXRhVHJhbnNmZXJJdGVtTGlzdFBvbGljeVdyYXBw
ZXIoCiB9CiAKIFBhc3NSZWZQdHI8RGF0YVRyYW5zZmVySXRlbVBvbGljeVdyYXBwZXI+IERhdGFU
cmFuc2Zlckl0ZW1Qb2xpY3lXcmFwcGVyOjpjcmVhdGUoCi0gICAgUGFzc1JlZlB0cjxDbGlwYm9h
cmRDaHJvbWl1bT4gY2xpcGJvYXJkLCBQYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW0+IGl0ZW0p
CisgICAgUGFzc1JlZlB0cjxDbGlwYm9hcmRDaHJvbWl1bT4gY2xpcGJvYXJkLCBQYXNzUmVmUHRy
PERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bT4gaXRlbSkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IERhdGFUcmFuc2Zlckl0ZW1Qb2xpY3lXcmFwcGVyKGNsaXBib2FyZCwgaXRlbSkpOwogfQpA
QCAtMTgyLDcgKzE4Myw3IEBAIHZvaWQgRGF0YVRyYW5zZmVySXRlbVBvbGljeVdyYXBwZXI6Omdl
dEFzU3RyaW5nKFBhc3NSZWZQdHI8U3RyaW5nQ2FsbGJhY2s+IGNhbGxiCiAgICAgaWYgKG1fY2xp
cGJvYXJkLT5wb2xpY3koKSAhPSBDbGlwYm9hcmRSZWFkYWJsZSAmJiBtX2NsaXBib2FyZC0+cG9s
aWN5KCkgIT0gQ2xpcGJvYXJkV3JpdGFibGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1faXRl
bS0+Z2V0QXNTdHJpbmcoY2FsbGJhY2spOworICAgIG1faXRlbS0+Z2V0QXNTdHJpbmcoY2FsbGJh
Y2ssIG1fY2xpcGJvYXJkLT5mcmFtZSgpLT5kb2N1bWVudCgpLT5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCkpOwogfQogCiBQYXNzUmVmUHRyPEJsb2I+IERhdGFUcmFuc2Zlckl0ZW1Qb2xpY3lXcmFw
cGVyOjpnZXRBc0ZpbGUoKSBjb25zdApAQCAtMTk0LDcgKzE5NSw3IEBAIFBhc3NSZWZQdHI8Qmxv
Yj4gRGF0YVRyYW5zZmVySXRlbVBvbGljeVdyYXBwZXI6OmdldEFzRmlsZSgpIGNvbnN0CiB9CiAK
IERhdGFUcmFuc2Zlckl0ZW1Qb2xpY3lXcmFwcGVyOjpEYXRhVHJhbnNmZXJJdGVtUG9saWN5V3Jh
cHBlcigKLSAgICBQYXNzUmVmUHRyPENsaXBib2FyZENocm9taXVtPiBjbGlwYm9hcmQsIFBhc3NS
ZWZQdHI8RGF0YVRyYW5zZmVySXRlbT4gaXRlbSkKKyAgICBQYXNzUmVmUHRyPENsaXBib2FyZENo
cm9taXVtPiBjbGlwYm9hcmQsIFBhc3NSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUNocm9taXVtPiBp
dGVtKQogICAgIDogbV9jbGlwYm9hcmQoY2xpcGJvYXJkKQogICAgICwgbV9pdGVtKGl0ZW0pCiB7
CkBAIC0yMDcsMTEgKzIwOCwxNiBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogLy8gV2Ug
cHJvdmlkZSB0aGUgSUUgY2xpcGJvYXJkIHR5cGVzIChVUkwgYW5kIFRleHQpLCBhbmQgdGhlIGNs
aXBib2FyZCB0eXBlcyBzcGVjaWZpZWQgaW4gdGhlIFdIQVRXRyBXZWIgQXBwbGljYXRpb25zIDEu
MCBkcmFmdAogLy8gc2VlIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJy
ZW50LXdvcmsvIFNlY3Rpb24gNi4zLjUuMwogCi1zdGF0aWMgU3RyaW5nIG5vcm1hbGl6ZVR5cGUo
Y29uc3QgU3RyaW5nJiB0eXBlKQorc3RhdGljIFN0cmluZyBub3JtYWxpemVUeXBlKGNvbnN0IFN0
cmluZyYgdHlwZSwgYm9vbCogY29udmVydFRvVVJMID0gMCkKIHsKICAgICBTdHJpbmcgY2xlYW5U
eXBlID0gdHlwZS5zdHJpcFdoaXRlU3BhY2UoKS5sb3dlcigpOwogICAgIGlmIChjbGVhblR5cGUg
PT0gbWltZVR5cGVUZXh0IHx8IGNsZWFuVHlwZS5zdGFydHNXaXRoKG1pbWVUeXBlVGV4dFBsYWlu
RXRjKSkKICAgICAgICAgcmV0dXJuIG1pbWVUeXBlVGV4dFBsYWluOworICAgIGlmIChjbGVhblR5
cGUgPT0gbWltZVR5cGVVUkwpIHsKKyAgICAgICAgaWYgKGNvbnZlcnRUb1VSTCkKKyAgICAgICAg
ICAqY29udmVydFRvVVJMID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIG1pbWVUeXBlVGV4dFVSSUxp
c3Q7CisgICAgfQogICAgIHJldHVybiBjbGVhblR5cGU7CiB9CiAKQEAgLTIyNyw4ICsyMzMsNiBA
QCBDbGlwYm9hcmRDaHJvbWl1bTo6Q2xpcGJvYXJkQ2hyb21pdW0oQ2xpcGJvYXJkVHlwZSBjbGlw
Ym9hcmRUeXBlLAogICAgIDogQ2xpcGJvYXJkKHBvbGljeSwgY2xpcGJvYXJkVHlwZSkKICAgICAs
IG1fZGF0YU9iamVjdChkYXRhT2JqZWN0KQogICAgICwgbV9mcmFtZShmcmFtZSkKLSAgICAsIG1f
b3JpZ2luYWxTZXF1ZW5jZU51bWJlcihQbGF0Zm9ybVN1cHBvcnQ6OmNsaXBib2FyZFNlcXVlbmNl
TnVtYmVyKGN1cnJlbnRQYXN0ZWJvYXJkQnVmZmVyKCkpKQotICAgICwgbV9kcmFnU3RvcmFnZVVw
ZGF0ZWQodHJ1ZSkKIHsKIH0KIApAQCAtMjQ0LDEwICsyNDgsOSBAQCBQYXNzUmVmUHRyPENsaXBi
b2FyZENocm9taXVtPiBDbGlwYm9hcmRDaHJvbWl1bTo6Y3JlYXRlKENsaXBib2FyZFR5cGUgY2xp
cGJvYXJkVAogCiB2b2lkIENsaXBib2FyZENocm9taXVtOjpjbGVhckRhdGEoY29uc3QgU3RyaW5n
JiB0eXBlKQogewotICAgIGlmIChwb2xpY3koKSAhPSBDbGlwYm9hcmRXcml0YWJsZSB8fCAhbV9k
YXRhT2JqZWN0KQorICAgIGlmIChwb2xpY3koKSAhPSBDbGlwYm9hcmRXcml0YWJsZSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgbV9kcmFnU3RvcmFnZVVwZGF0ZWQgPSB0cnVlOwogICAgIG1fZGF0
YU9iamVjdC0+Y2xlYXJEYXRhKG5vcm1hbGl6ZVR5cGUodHlwZSkpOwogCiAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CkBAIC0yNTgsMjAgKzI2MSw0MCBAQCB2b2lkIENsaXBib2FyZENocm9taXVt
OjpjbGVhckFsbERhdGEoKQogICAgIGlmIChwb2xpY3koKSAhPSBDbGlwYm9hcmRXcml0YWJsZSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9kcmFnU3RvcmFnZVVwZGF0ZWQgPSB0cnVlOwogICAg
IG1fZGF0YU9iamVjdC0+Y2xlYXJBbGwoKTsKIH0KIAogU3RyaW5nIENsaXBib2FyZENocm9taXVt
OjpnZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSkgY29uc3QKIHsKLSAgICBib29sIGlnbm9yZWRT
dWNjZXNzID0gZmFsc2U7Ci0gICAgaWYgKHBvbGljeSgpICE9IENsaXBib2FyZFJlYWRhYmxlIHx8
ICFtX2RhdGFPYmplY3QpCisgICAgaWYgKHBvbGljeSgpICE9IENsaXBib2FyZFJlYWRhYmxlKQog
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKLSAgICBpZiAoaXNGb3JDb3B5QW5kUGFzdGUoKSAm
JiBwbGF0Zm9ybUNsaXBib2FyZENoYW5nZWQoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwor
ICAgIGJvb2wgY29udmVydFRvVVJMID0gZmFsc2U7CisgICAgU3RyaW5nIGRhdGEgPSBtX2RhdGFP
YmplY3QtPmdldERhdGEobm9ybWFsaXplVHlwZSh0eXBlLCAmY29udmVydFRvVVJMKSk7CisgICAg
aWYgKCFjb252ZXJ0VG9VUkwpCisgICAgICAgIHJldHVybiBkYXRhOworICAgIHJldHVybiBjb252
ZXJ0VVJJTGlzdFRvVVJMKGRhdGEpOworCisgICAgVmVjdG9yPFN0cmluZz4gdXJpTGlzdDsKKyAg
ICAvLyBMaW5lIHNlcGFyYXRvciBpcyBcclxuIHBlciBSRkMgMjQ4MyAtIGhvd3ZlciwgZm9yIGNv
bXBhdGlibGl0eQorICAgIC8vIHJlYXNvbnMgd2UgYWxzbyBhbGxvdyBqdXN0IFxuIGhlcmUuCisg
ICAgZGF0YS5zcGxpdCgnXG4nLCB1cmlMaXN0KTsKKyAgICAvLyBQcm9jZXNzIHRoZSBpbnB1dCBh
bmQgcmV0dXJuIHRoZSBmaXJzdCB2YWxpZCBSVUwuIEluIGNhc2Ugbm8gVVJMcyBjYW4KKyAgICAv
LyBiZSBmb3VuZCwgcmV0dXJuIGFuIGVtcHR5IHN0cmluZy4gVGhpcyBpcyBpbiBsaW5lIHdpdGgg
dGhlIEhUTUw1CisgICAgLy8gc3BlYyAoc2VlICJUaGUgRHJhZ0V2ZW50IGFuZCBEYXRhVHJhbnNm
ZXIgaW50ZXJmYWNlcyIpLgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdXJpTGlzdC5zaXpl
KCk7ICsraSkgeworICAgICAgICBTdHJpbmcmIGxpbmUgPSB1cmlMaXN0W2ldOworICAgICAgICBs
aW5lID0gbGluZS5zdHJpcFdoaXRlU3BhY2UoKTsKKyAgICAgICAgaWYgKGxpbmUuaXNFbXB0eSgp
KQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChsaW5lWzBdID09ICcjJykKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBLVVJMIHVybCA9IEtVUkwoUGFyc2VkVVJMU3Ry
aW5nLCBsaW5lKTsKKyAgICAgICAgaWYgKHVybC5pc1ZhbGlkKCkpCisgICAgICAgICAgICByZXR1
cm4gdXJsOworICAgIH0KIAotICAgIHJldHVybiBtX2RhdGFPYmplY3QtPmdldERhdGEobm9ybWFs
aXplVHlwZSh0eXBlKSwgaWdub3JlZFN1Y2Nlc3MpOworICAgIHJldHVybiBTdHJpbmcoKTsKIH0K
IAogYm9vbCBDbGlwYm9hcmRDaHJvbWl1bTo6c2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGNv
bnN0IFN0cmluZyYgZGF0YSkKQEAgLTI3OSw0NyArMzAyLDM0IEBAIGJvb2wgQ2xpcGJvYXJkQ2hy
b21pdW06OnNldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpCiAg
ICAgaWYgKHBvbGljeSgpICE9IENsaXBib2FyZFdyaXRhYmxlKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBtX2RyYWdTdG9yYWdlVXBkYXRlZCA9IHRydWU7CiAgICAgcmV0dXJuIG1fZGF0
YU9iamVjdC0+c2V0RGF0YShub3JtYWxpemVUeXBlKHR5cGUpLCBkYXRhKTsKIH0KIAotYm9vbCBD
bGlwYm9hcmRDaHJvbWl1bTo6cGxhdGZvcm1DbGlwYm9hcmRDaGFuZ2VkKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gUGxhdGZvcm1TdXBwb3J0OjpjbGlwYm9hcmRTZXF1ZW5jZU51bWJlcihjdXJyZW50
UGFzdGVib2FyZEJ1ZmZlcigpKSAhPSBtX29yaWdpbmFsU2VxdWVuY2VOdW1iZXI7Ci19Ci0KIC8v
IGV4dGVuc2lvbnMgYmV5b25kIElFJ3MgQVBJCiBIYXNoU2V0PFN0cmluZz4gQ2xpcGJvYXJkQ2hy
b21pdW06OnR5cGVzKCkgY29uc3QKIHsKLSAgICBIYXNoU2V0PFN0cmluZz4gcmVzdWx0czsKICAg
ICBpZiAocG9saWN5KCkgIT0gQ2xpcGJvYXJkUmVhZGFibGUgJiYgcG9saWN5KCkgIT0gQ2xpcGJv
YXJkVHlwZXNSZWFkYWJsZSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdHM7Ci0KLSAgICBpZiAoIW1f
ZGF0YU9iamVjdCkKLSAgICAgICAgcmV0dXJuIHJlc3VsdHM7CisgICAgICAgIHJldHVybiBIYXNo
U2V0PFN0cmluZz4oKTsKIAotICAgIHJlc3VsdHMgPSBtX2RhdGFPYmplY3QtPnR5cGVzKCk7Ci0K
LSAgICBpZiAobV9kYXRhT2JqZWN0LT5jb250YWluc0ZpbGVuYW1lcygpKQotICAgICAgICByZXN1
bHRzLmFkZChtaW1lVHlwZUZpbGVzKTsKLQotICAgIHJldHVybiByZXN1bHRzOworICAgIHJldHVy
biBtX2RhdGFPYmplY3QtPnR5cGVzKCk7CiB9CiAKIFBhc3NSZWZQdHI8RmlsZUxpc3Q+IENsaXBi
b2FyZENocm9taXVtOjpmaWxlcygpIGNvbnN0CiB7CisgICAgUmVmUHRyPEZpbGVMaXN0PiBmaWxl
cyA9IEZpbGVMaXN0OjpjcmVhdGUoKTsKICAgICBpZiAocG9saWN5KCkgIT0gQ2xpcGJvYXJkUmVh
ZGFibGUpCi0gICAgICAgIHJldHVybiBGaWxlTGlzdDo6Y3JlYXRlKCk7Ci0KLSAgICBpZiAoIW1f
ZGF0YU9iamVjdCkKLSAgICAgICAgcmV0dXJuIEZpbGVMaXN0OjpjcmVhdGUoKTsKLQotICAgIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMgPSBtX2RhdGFPYmplY3QtPmZpbGVuYW1lcygp
OwotICAgIFJlZlB0cjxGaWxlTGlzdD4gZmlsZUxpc3QgPSBGaWxlTGlzdDo6Y3JlYXRlKCk7Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWxlbmFtZXMuc2l6ZSgpOyArK2kpCi0gICAgICAg
IGZpbGVMaXN0LT5hcHBlbmQoRmlsZTo6Y3JlYXRlKGZpbGVuYW1lcy5hdChpKSkpOworICAgICAg
ICByZXR1cm4gZmlsZXMucmVsZWFzZSgpOworCisgICAgUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1M
aXN0Q2hyb21pdW0+IGxpc3QgPSBtX2RhdGFPYmplY3QtPml0ZW1zKCk7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBsaXN0LT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgIGlmIChsaXN0LT5p
dGVtKGkpLT5raW5kKCkgPT0gRGF0YVRyYW5zZmVySXRlbTo6a2luZEZpbGUpIHsKKyAgICAgICAg
ICAgIFJlZlB0cjxCbG9iPiBibG9iID0gbGlzdC0+aXRlbShpKS0+Z2V0QXNGaWxlKCk7CisgICAg
ICAgICAgICBpZiAoYmxvYiAmJiBibG9iLT5pc0ZpbGUoKSkKKyAgICAgICAgICAgICAgICBmaWxl
cy0+YXBwZW5kKHN0YXRpY19jYXN0PEZpbGUqPihibG9iLmdldCgpKSk7CisgICAgICAgIH0KKyAg
ICB9CiAKLSAgICByZXR1cm4gZmlsZUxpc3QucmVsZWFzZSgpOworICAgIHJldHVybiBmaWxlcy5y
ZWxlYXNlKCk7CiB9CiAKIHZvaWQgQ2xpcGJvYXJkQ2hyb21pdW06OnNldERyYWdJbWFnZShDYWNo
ZWRJbWFnZSogaW1hZ2UsIE5vZGUqIG5vZGUsIGNvbnN0IEludFBvaW50JiBsb2MpCkBAIC0zODks
OCArMzk5LDYgQEAgc3RhdGljIHZvaWQgd3JpdGVJbWFnZVRvRGF0YU9iamVjdChDaHJvbWl1bURh
dGFPYmplY3QqIGRhdGFPYmplY3QsIEVsZW1lbnQqIGVsZW0KICAgICBpZiAoIWltYWdlQnVmZmVy
IHx8ICFpbWFnZUJ1ZmZlci0+c2l6ZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBkYXRhT2Jq
ZWN0LT5zZXRGaWxlQ29udGVudChpbWFnZUJ1ZmZlcik7Ci0KICAgICAvLyBEZXRlcm1pbmUgdGhl
IGZpbGVuYW1lIGZvciB0aGUgZmlsZSBjb250ZW50cyBvZiB0aGUgaW1hZ2UuCiAgICAgU3RyaW5n
IGZpbGVuYW1lID0gY2FjaGVkSW1hZ2UtPnJlc3BvbnNlKCkuc3VnZ2VzdGVkRmlsZW5hbWUoKTsK
ICAgICBpZiAoZmlsZW5hbWUuaXNFbXB0eSgpKQpAQCAtNDEwLDggKzQxOCw3IEBAIHN0YXRpYyB2
b2lkIHdyaXRlSW1hZ2VUb0RhdGFPYmplY3QoQ2hyb21pdW1EYXRhT2JqZWN0KiBkYXRhT2JqZWN0
LCBFbGVtZW50KiBlbGVtCiAKICAgICBDbGlwYm9hcmRDaHJvbWl1bTo6dmFsaWRhdGVGaWxlbmFt
ZShmaWxlbmFtZSwgZXh0ZW5zaW9uKTsKIAotICAgIGRhdGFPYmplY3QtPnNldEZpbGVDb250ZW50
RmlsZW5hbWUoZmlsZW5hbWUgKyBleHRlbnNpb24pOwotICAgIGRhdGFPYmplY3QtPnNldEZpbGVF
eHRlbnNpb24oZXh0ZW5zaW9uKTsKKyAgICBkYXRhT2JqZWN0LT5hZGRTaGFyZWRCdWZmZXIoZmls
ZW5hbWUgKyBleHRlbnNpb24sIGltYWdlQnVmZmVyKTsKIH0KIAogdm9pZCBDbGlwYm9hcmRDaHJv
bWl1bTo6ZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEtV
UkwmIHVybCwgY29uc3QgU3RyaW5nJiB0aXRsZSwgRnJhbWUqIGZyYW1lKQpAQCAtNDE5LDkgKzQy
Niw3IEBAIHZvaWQgQ2xpcGJvYXJkQ2hyb21pdW06OmRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZShF
bGVtZW50KiBlbGVtZW50LCBjb25zdCBLVVJMJiB1CiAgICAgaWYgKCFtX2RhdGFPYmplY3QpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIG1fZHJhZ1N0b3JhZ2VVcGRhdGVkID0gdHJ1ZTsKLSAgICBt
X2RhdGFPYmplY3QtPnNldERhdGEobWltZVR5cGVVUkwsIHVybCk7Ci0gICAgbV9kYXRhT2JqZWN0
LT5zZXRVcmxUaXRsZSh0aXRsZSk7CisgICAgbV9kYXRhT2JqZWN0LT5zZXRVUkxBbmRUaXRsZSh1
cmwsIHRpdGxlKTsKIAogICAgIC8vIFdyaXRlIHRoZSBieXRlcyBpbiB0aGUgaW1hZ2UgdG8gdGhl
IGZpbGUgZm9ybWF0LgogICAgIHdyaXRlSW1hZ2VUb0RhdGFPYmplY3QobV9kYXRhT2JqZWN0Lmdl
dCgpLCBlbGVtZW50LCB1cmwpOwpAQCAtNDM2LDE2ICs0NDEsMTMgQEAgdm9pZCBDbGlwYm9hcmRD
aHJvbWl1bTo6d3JpdGVVUkwoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBG
cmFtZSopCiAgICAgICAgIHJldHVybjsKICAgICBBU1NFUlQoIXVybC5pc0VtcHR5KCkpOwogCi0g
ICAgbV9kcmFnU3RvcmFnZVVwZGF0ZWQgPSB0cnVlOwotICAgIG1fZGF0YU9iamVjdC0+c2V0RGF0
YShtaW1lVHlwZVVSTCwgdXJsKTsKLSAgICBtX2RhdGFPYmplY3QtPnNldFVybFRpdGxlKHRpdGxl
KTsKKyAgICBtX2RhdGFPYmplY3QtPnNldFVSTEFuZFRpdGxlKHVybCwgdGl0bGUpOwogCiAgICAg
Ly8gVGhlIFVSTCBjYW4gYWxzbyBiZSB1c2VkIGFzIHBsYWluIHRleHQuCiAgICAgbV9kYXRhT2Jq
ZWN0LT5zZXREYXRhKG1pbWVUeXBlVGV4dFBsYWluLCB1cmwuc3RyaW5nKCkpOwogCiAgICAgLy8g
VGhlIFVSTCBjYW4gYWxzbyBiZSB1c2VkIGFzIGFuIEhUTUwgZnJhZ21lbnQuCi0gICAgbV9kYXRh
T2JqZWN0LT5zZXREYXRhKG1pbWVUeXBlVGV4dEhUTUwsIHVybFRvTWFya3VwKHVybCwgdGl0bGUp
KTsKLSAgICBtX2RhdGFPYmplY3QtPnNldEh0bWxCYXNlVXJsKHVybCk7CisgICAgbV9kYXRhT2Jq
ZWN0LT5zZXRIVE1MQW5kQmFzZVVSTCh1cmxUb01hcmt1cCh1cmwsIHRpdGxlKSwgdXJsKTsKIH0K
IAogdm9pZCBDbGlwYm9hcmRDaHJvbWl1bTo6d3JpdGVSYW5nZShSYW5nZSogc2VsZWN0ZWRSYW5n
ZSwgRnJhbWUqIGZyYW1lKQpAQCAtNDU0LDkgKzQ1Niw3IEBAIHZvaWQgQ2xpcGJvYXJkQ2hyb21p
dW06OndyaXRlUmFuZ2UoUmFuZ2UqIHNlbGVjdGVkUmFuZ2UsIEZyYW1lKiBmcmFtZSkKICAgICBp
ZiAoIW1fZGF0YU9iamVjdCkKICAgICAgICAgIHJldHVybjsKIAotICAgIG1fZHJhZ1N0b3JhZ2VV
cGRhdGVkID0gdHJ1ZTsKLSAgICBtX2RhdGFPYmplY3QtPnNldERhdGEobWltZVR5cGVUZXh0SFRN
TCwgY3JlYXRlTWFya3VwKHNlbGVjdGVkUmFuZ2UsIDAsIEFubm90YXRlRm9ySW50ZXJjaGFuZ2Us
IGZhbHNlLCBSZXNvbHZlTm9uTG9jYWxVUkxzKSk7Ci0gICAgbV9kYXRhT2JqZWN0LT5zZXRIdG1s
QmFzZVVybChmcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkpOworICAgIG1fZGF0YU9iamVjdC0+c2V0
SFRNTEFuZEJhc2VVUkwoY3JlYXRlTWFya3VwKHNlbGVjdGVkUmFuZ2UsIDAsIEFubm90YXRlRm9y
SW50ZXJjaGFuZ2UsIGZhbHNlLCBSZXNvbHZlTm9uTG9jYWxVUkxzKSwgZnJhbWUtPmRvY3VtZW50
KCktPnVybCgpKTsKIAogICAgIFN0cmluZyBzdHIgPSBmcmFtZS0+ZWRpdG9yKCktPnNlbGVjdGVk
VGV4dCgpOwogI2lmIE9TKFdJTkRPV1MpCkBAIC00NzcsNzYgKzQ3NywyNCBAQCB2b2lkIENsaXBi
b2FyZENocm9taXVtOjp3cml0ZVBsYWluVGV4dChjb25zdCBTdHJpbmcmIHRleHQpCiAjZW5kaWYK
ICAgICByZXBsYWNlTkJTUFdpdGhTcGFjZShzdHIpOwogCi0gICAgbV9kcmFnU3RvcmFnZVVwZGF0
ZWQgPSB0cnVlOwogICAgIG1fZGF0YU9iamVjdC0+c2V0RGF0YShtaW1lVHlwZVRleHRQbGFpbiwg
c3RyKTsKIH0KIAogYm9vbCBDbGlwYm9hcmRDaHJvbWl1bTo6aGFzRGF0YSgpCiB7CiAgICAgQVNT
RVJUKGlzRm9yRHJhZ0FuZERyb3AoKSk7Ci0gICAgaWYgKCFtX2RhdGFPYmplY3QpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBtX2RhdGFPYmplY3QtPmhhc0RhdGEoKTsKKyAg
ICByZXR1cm4gbV9kYXRhT2JqZWN0LT5pdGVtcygpLT5sZW5ndGgoKSA+IDA7CiB9CiAKICNpZiBF
TkFCTEUoREFUQV9UUkFOU0ZFUl9JVEVNUykKIFBhc3NSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUxp
c3Q+IENsaXBib2FyZENocm9taXVtOjppdGVtcygpCiB7Ci0gICAgaWYgKCFtX2RhdGFPYmplY3Qp
Ci0gICAgICAgIC8vIFJldHVybiBhbiB1bmFzc29jaWF0ZWQgZW1wdHkgbGlzdC4KLSAgICAgICAg
cmV0dXJuIERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW06OmNyZWF0ZSh0aGlzLCBtX2ZyYW1l
LT5kb2N1bWVudCgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwotCi0gICAgaWYgKCFtX2l0
ZW1MaXN0KQotICAgICAgICBtX2l0ZW1MaXN0ID0gRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1
bTo6Y3JlYXRlKHRoaXMsIG1fZnJhbWUtPmRvY3VtZW50KCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKSk7Ci0KICAgICAvLyBGSVhNRTogQWNjb3JkaW5nIHRvIHRoZSBzcGVjLCB3ZSBhcmUgc3Vw
cG9zZWQgdG8gcmV0dXJuIHRoZSBzYW1lIGNvbGxlY3Rpb24gb2YgaXRlbXMgZWFjaAogICAgIC8v
IHRpbWUuIFdlIG5vdyByZXR1cm4gYSB3cmFwcGVyIHRoYXQgYWx3YXlzIHdyYXBzIHRoZSAqc2Ft
ZSogc2V0IG9mIGl0ZW1zLCBzbyBKUyBzaG91bGRuJ3QgYmUKICAgICAvLyBhYmxlIHRvIHRlbGws
IGJ1dCB3ZSBwcm9iYWJseSBzdGlsbCB3YW50IHRvIGZpeCB0aGlzLgotICAgIHJldHVybiBEYXRh
VHJhbnNmZXJJdGVtTGlzdFBvbGljeVdyYXBwZXI6OmNyZWF0ZSh0aGlzLCBtX2l0ZW1MaXN0KTsK
LX0KLQotLy8gRklYTUU6IGludGVncmF0ZSBDaHJvbWl1bURhdGFPYmplY3QgYW5kIERhdGFUcmFu
c2Zlckl0ZW1MaXN0IHJhdGhlciB0aGFuIGhvbGRpbmcgdGhlbSBzZXBhcmF0ZWx5IGFuZCBrZWVw
aW5nIHRoZW0gc3luY2VkLgotdm9pZCBDbGlwYm9hcmRDaHJvbWl1bTo6bWF5VXBkYXRlSXRlbXMo
VmVjdG9yPFJlZlB0cjxEYXRhVHJhbnNmZXJJdGVtPiA+JiBpdGVtcykKLXsKLSAgICBpZiAoIWl0
ZW1zLmlzRW1wdHkoKSAmJiAhc3RvcmFnZUhhc1VwZGF0ZWQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaXRlbXMuY2xlYXIoKTsKLQotICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCk7Ci0KLSAgICBpZiAoaXNGb3JDb3B5QW5kUGFzdGUoKSAmJiBwb2xpY3koKSA9PSBD
bGlwYm9hcmRSZWFkYWJsZSkgewotICAgICAgICAvLyBJdGVyYXRlIHRocm91Z2ggdGhlIHR5cGVz
IGFuZCBhZGQgdGhlbS4KLSAgICAgICAgSGFzaFNldDxTdHJpbmc+IHR5cGVzID0gbV9kYXRhT2Jq
ZWN0LT50eXBlcygpOwotICAgICAgICBmb3IgKEhhc2hTZXQ8U3RyaW5nPjo6Y29uc3RfaXRlcmF0
b3IgaXQgPSB0eXBlcy5iZWdpbigpOyBpdCAhPSB0eXBlcy5lbmQoKTsgKytpdCkKLSAgICAgICAg
ICAgIGl0ZW1zLmFwcGVuZChEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW06OmNyZWF0ZUZyb21QYXN0
ZWJvYXJkKHRoaXMsIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsICppdCkpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0gICAgU3RyaW5nIHBsYWlu
VGV4dCA9IG1fZGF0YU9iamVjdC0+Z2V0RGF0YShtaW1lVHlwZVRleHRQbGFpbiwgc3VjY2Vzcyk7
Ci0gICAgaWYgKHN1Y2Nlc3MpCi0gICAgICAgIGl0ZW1zLmFwcGVuZChEYXRhVHJhbnNmZXJJdGVt
Q2hyb21pdW06OmNyZWF0ZSh0aGlzLCBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBwbGFpblRleHQs
IG1pbWVUeXBlVGV4dFBsYWluKSk7Ci0KLSAgICBzdWNjZXNzID0gZmFsc2U7Ci0gICAgU3RyaW5n
IGh0bWxUZXh0ID0gbV9kYXRhT2JqZWN0LT5nZXREYXRhKG1pbWVUeXBlVGV4dEhUTUwsIHN1Y2Nl
c3MpOwotICAgIGlmIChzdWNjZXNzKQotICAgICAgICBpdGVtcy5hcHBlbmQoRGF0YVRyYW5zZmVy
SXRlbUNocm9taXVtOjpjcmVhdGUodGhpcywgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgaHRtbFRl
eHQsIG1pbWVUeXBlVGV4dEhUTUwpKTsKLQotICAgIGlmIChtX2RhdGFPYmplY3QtPmNvbnRhaW5z
RmlsZW5hbWVzKCkpIHsKLSAgICAgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcyA9
IG1fZGF0YU9iamVjdC0+ZmlsZW5hbWVzKCk7Ci0gICAgICAgIGZvciAoVmVjdG9yPFN0cmluZz46
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZmlsZW5hbWVzLmJlZ2luKCk7IGl0ICE9IGZpbGVuYW1lcy5l
bmQoKTsgKytpdCkKLSAgICAgICAgICAgIGl0ZW1zLmFwcGVuZChEYXRhVHJhbnNmZXJJdGVtQ2hy
b21pdW06OmNyZWF0ZSh0aGlzLCBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBGaWxlOjpjcmVhdGUo
Kml0KSkpOwotICAgIH0KLSAgICBtX2RyYWdTdG9yYWdlVXBkYXRlZCA9IGZhbHNlOworICAgIHJl
dHVybiBEYXRhVHJhbnNmZXJJdGVtTGlzdFBvbGljeVdyYXBwZXI6OmNyZWF0ZSh0aGlzLCBtX2Rh
dGFPYmplY3QtPml0ZW1zKCkpOwogfQotCi1ib29sIENsaXBib2FyZENocm9taXVtOjpzdG9yYWdl
SGFzVXBkYXRlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIChpc0ZvckNvcHlBbmRQYXN0ZSgpICYm
IHBsYXRmb3JtQ2xpcGJvYXJkQ2hhbmdlZCgpKSB8fCAoaXNGb3JEcmFnQW5kRHJvcCgpICYmIG1f
ZHJhZ1N0b3JhZ2VVcGRhdGVkKTsKLX0KLQogI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2Fy
ZENocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRD
aHJvbWl1bS5oCmluZGV4IDM3NzdhZDVjOTZmNmZlMTVjMTNlZjVlODhlODgxYmMwZDhhNTZiMDcu
LmIxNTcxY2JmMWFhYTg3YWUxNjllZTQxMTIzNmQ2MWQ4YWZjNWNhNzcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uaApAQCAt
MzcsOSArMzcsNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgQ2FjaGVkSW1h
Z2U7Ci0gICAgY2xhc3MgQ2hyb21pdW1EYXRhT2JqZWN0OwotICAgIGNsYXNzIERhdGFUcmFuc2Zl
ckl0ZW07Ci0gICAgY2xhc3MgRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bTsKICAgICBjbGFz
cyBGcmFtZTsKICAgICBjbGFzcyBJbnRQb2ludDsKIApAQCAtODQsMTEgKzgxLDggQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiAjaWYgRU5BQkxFKERBVEFfVFJBTlNGRVJfSVRFTVMpCiAgICAgICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtTGlzdD4gaXRlbXMoKTsKLQotICAg
ICAgICAvLyBJbnRlcm5hbCByb3V0aW5lcyB0byBrZWVwIHRoZSBsaXN0IHJldHVybmVkIGJ5IGl0
ZW1zKCkgKGkuZS4gbV9pdGVtTGlzdCkgc3luY2hyb25pemVkIHdpdGggdGhlIGNvbnRlbnQgb2Yg
dGhlIGNsaXBib2FyZCBkYXRhLgotICAgICAgICB2b2lkIG1heVVwZGF0ZUl0ZW1zKFZlY3RvcjxS
ZWZQdHI8RGF0YVRyYW5zZmVySXRlbT4gPiYgaXRlbXMpOwotICAgICAgICBib29sIHN0b3JhZ2VI
YXNVcGRhdGVkKCkgY29uc3Q7CiAjZW5kaWYKKyAgICAgICAgRnJhbWUqIGZyYW1lKCkgY29uc3Qg
eyByZXR1cm4gbV9mcmFtZTsgfQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgQ2xpcGJvYXJkQ2hy
b21pdW0oQ2xpcGJvYXJkVHlwZSwgUGFzc1JlZlB0cjxDaHJvbWl1bURhdGFPYmplY3Q+LCBDbGlw
Ym9hcmRBY2Nlc3NQb2xpY3ksIEZyYW1lKik7CkBAIC05NywxMyArOTEsNiBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIHZvaWQgc2V0RHJhZ0ltYWdlKENhY2hlZEltYWdlKiwgTm9kZSos
IGNvbnN0IEludFBvaW50Jik7CiAgICAgICAgIFJlZlB0cjxDaHJvbWl1bURhdGFPYmplY3Q+IG1f
ZGF0YU9iamVjdDsKICAgICAgICAgRnJhbWUqIG1fZnJhbWU7Ci0KLSNpZiBFTkFCTEUoREFUQV9U
UkFOU0ZFUl9JVEVNUykKLSAgICAgICAgUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21p
dW0+IG1faXRlbUxpc3Q7Ci0jZW5kaWYKLQotICAgICAgICB1aW50NjRfdCBtX29yaWdpbmFsU2Vx
dWVuY2VOdW1iZXI7Ci0gICAgICAgIGJvb2wgbV9kcmFnU3RvcmFnZVVwZGF0ZWQ7CiAgICAgfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkVXRpbGl0aWVzQ2hyb21pdW0uY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkVXRpbGl0aWVzQ2hyb21pdW0uY3BwCmlu
ZGV4IDQ3NTcyYzViODhjMzA0YTNmNGI3YjEzMmQyNDMzNzVlMDZlMGNiY2QuLjYyY2Y5OWNlMGQ0
NmU2YjMzZGZhNTU5Y2UxMTEwMDQ2ZDI2ZjNkOTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZFV0aWxpdGllc0Nocm9taXVtLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRVdGlsaXRpZXNDaHJvbWl1
bS5jcHAKQEAgLTYwLDQgKzYwLDI2IEBAIHZvaWQgcmVwbGFjZU5CU1BXaXRoU3BhY2UoU3RyaW5n
JiBzdHIpCiAgICAgc3RyLnJlcGxhY2UoTm9uQnJlYWtpbmdTcGFjZUNoYXJhY3RlciwgU3BhY2VD
aGFyYWN0ZXIpOwogfQogCitTdHJpbmcgY29udmVydFVSSUxpc3RUb1VSTChjb25zdCBTdHJpbmcm
IHVyaUxpc3QpCit7CisgICAgVmVjdG9yPFN0cmluZz4gaXRlbXM7CisgICAgLy8gTGluZSBzZXBh
cmF0b3IgaXMgXHJcbiBwZXIgUkZDIDI0ODMgLSBob3dldmVyLCBmb3IgY29tcGF0aWJpbGl0eQor
ICAgIC8vIHJlYXNvbnMgd2UgYWxsb3cganVzdCBcbiBoZXJlLgorICAgIHVyaUxpc3Quc3BsaXQo
J1xuJywgaXRlbXMpOworICAgIC8vIFByb2Nlc3MgdGhlIGlucHV0IGFuZCByZXR1cm4gdGhlIGZp
cnN0IHZhbGlkIFVSTC4gSW4gY2FzZSBubyBVUkxzIGNhbgorICAgIC8vIGJlIGZvdW5kLCByZXR1
cm4gYW4gZW1wdHkgc3RyaW5nLiBUaGlzIGlzIGluIGxpbmUgd2l0aCB0aGUgSFRNTDUgc3BlYy4K
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsgKytpKSB7CisgICAgICAg
IFN0cmluZyYgbGluZSA9IGl0ZW1zW2ldOworICAgICAgICBsaW5lID0gbGluZS5zdHJpcFdoaXRl
U3BhY2UoKTsKKyAgICAgICAgaWYgKGxpbmUuaXNFbXB0eSgpKQorICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIGlmIChsaW5lWzBdID09ICcjJykKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICBLVVJMIHVybCA9IEtVUkwoUGFyc2VkVVJMU3RyaW5nLCBsaW5lKTsKKyAgICAgICAg
aWYgKHVybC5pc1ZhbGlkKCkpCisgICAgICAgICAgICByZXR1cm4gdXJsOworICAgIH0KKyAgICBy
ZXR1cm4gU3RyaW5nKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZFV0aWxpdGllc0Nocm9t
aXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRVdGlsaXRp
ZXNDaHJvbWl1bS5oCmluZGV4IDdhZTUwMDQzYTE2Yjk2YjMyMTkyNjk3ZDQwOGIyMzhiNThjMGE1
ZTkuLjQ5YTQ4Mzg3MDQ2NzAxMzRhNjNmOWY4MGIzMmYxNjE5ZWJhYjdhNWEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZFV0aWxpdGllc0Nocm9t
aXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkVXRp
bGl0aWVzQ2hyb21pdW0uaApAQCAtNDQsNiArNDQsNyBAQCBQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xp
cGJvYXJkQnVmZmVyIGN1cnJlbnRQYXN0ZWJvYXJkQnVmZmVyKCk7CiB2b2lkIHJlcGxhY2VOZXds
aW5lc1dpdGhXaW5kb3dzU3R5bGVOZXdsaW5lcyhTdHJpbmcmKTsKICNlbmRpZgogdm9pZCByZXBs
YWNlTkJTUFdpdGhTcGFjZShTdHJpbmcmKTsKK1N0cmluZyBjb252ZXJ0VVJJTGlzdFRvVVJMKGNv
bnN0IFN0cmluZyYgdXJpTGlzdCk7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRGF0YVRyYW5zZmVySXRlbUNo
cm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RhdGFUcmFuc2Zl
ckl0ZW1DaHJvbWl1bS5jcHAKaW5kZXggNjk2ZWU2NTNlYWE2N2RjOTMyNWJlMjY0ZDIzMjA5MjMw
NjQ0ZGU5Zi4uYzRiYzBkM2NlYjE1ZGE1NDEwMDk0MmY2MGZhZmI2M2VkNTQ1YThjNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRGF0YVRyYW5zZmVySXRlbUNo
cm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EYXRhVHJh
bnNmZXJJdGVtQ2hyb21pdW0uY3BwCkBAIC0zOCw3ICszOCw3IEBACiAjaW5jbHVkZSAiQ2xpcGJv
YXJkQ2hyb21pdW0uaCIKICNpbmNsdWRlICJDbGlwYm9hcmRNaW1lVHlwZXMuaCIKICNpbmNsdWRl
ICJDbGlwYm9hcmRVdGlsaXRpZXNDaHJvbWl1bS5oIgotI2luY2x1ZGUgIkRhdGFUcmFuc2Zlckl0
ZW1MaXN0Q2hyb21pdW0uaCIKKyNpbmNsdWRlICJEYXRhVHJhbnNmZXJJdGVtLmgiCiAjaW5jbHVk
ZSAiRmlsZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3VwcG9ydC5oIgogI2luY2x1ZGUgIlNoYXJl
ZEJ1ZmZlci5oIgpAQCAtNDYsODYgKzQ2LDc4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
UGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0+IERhdGFUcmFuc2Zlckl0ZW1DaHJv
bWl1bTo6Y3JlYXRlRnJvbVBhc3RlYm9hcmQoUGFzc1JlZlB0cjxDbGlwYm9hcmQ+IG93bmVyLCBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIHR5cGUpCitQYXNz
UmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bT4gRGF0YVRyYW5zZmVySXRlbUNocm9taXVt
OjpjcmVhdGVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRh
KQogewotICAgIGlmICh0eXBlID09IG1pbWVUeXBlVGV4dFBsYWluIHx8IHR5cGUgPT0gbWltZVR5
cGVUZXh0SFRNTCkKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEYXRhVHJhbnNmZXJJdGVt
Q2hyb21pdW0ob3duZXIsIGNvbnRleHQsIFBhc3RlYm9hcmRTb3VyY2UsIERhdGFUcmFuc2Zlckl0
ZW06OmtpbmRTdHJpbmcsIHR5cGUsIFN0cmluZygpKSk7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0ob3duZXIsIGNvbnRleHQsIFBhc3RlYm9hcmRTb3Vy
Y2UsIERhdGFUcmFuc2Zlckl0ZW06OmtpbmRGaWxlLCB0eXBlLCAiIikpOworICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgRGF0YVRyYW5zZmVySXRlbUNocm9taXVtKERhdGFUcmFuc2Zlckl0ZW06Omtp
bmRTdHJpbmcsIHR5cGUsIGRhdGEsIDAsIDAsIFN0cmluZygpLCBLVVJMKCkpKTsKIH0KIAotUGFz
c1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0+IERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1
bTo6Y3JlYXRlKFBhc3NSZWZQdHI8Q2xpcGJvYXJkPiBvd25lciwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYg
ZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHR5cGUpCitQYXNzUmVmUHRyPERhdGFU
cmFuc2Zlckl0ZW1DaHJvbWl1bT4gRGF0YVRyYW5zZmVySXRlbUNocm9taXVtOjpjcmVhdGVGcm9t
RmlsZShQYXNzUmVmUHRyPEZpbGU+IGZpbGUpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBE
YXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0ob3duZXIsIGNvbnRleHQsIERhdGFUcmFuc2Zlckl0ZW1D
aHJvbWl1bTo6SW50ZXJuYWxTb3VyY2UsIGtpbmRTdHJpbmcsIHR5cGUsIGRhdGEpKTsKKyAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bShEYXRhVHJhbnNmZXJJ
dGVtOjpraW5kRmlsZSwgZmlsZS0+dHlwZSgpLCBTdHJpbmcoKSwgZmlsZSwgMCwgU3RyaW5nKCks
IEtVUkwoKSkpOwogfQogCi1QYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bT4gRGF0
YVRyYW5zZmVySXRlbUNocm9taXVtOjpjcmVhdGUoUGFzc1JlZlB0cjxDbGlwYm9hcmQ+IG93bmVy
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUGFzc1JlZlB0cjxGaWxlPiBmaWxlKQorUGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVt
Q2hyb21pdW0+IERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bTo6Y3JlYXRlRnJvbVVSTChjb25zdCBT
dHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiB0aXRsZSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bShvd25lciwgY29udGV4dCwgRGF0YVRyYW5zZmVy
SXRlbUNocm9taXVtOjpJbnRlcm5hbFNvdXJjZSwgZmlsZSkpOworICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgRGF0YVRyYW5zZmVySXRlbUNocm9taXVtKERhdGFUcmFuc2Zlckl0ZW06OmtpbmRTdHJp
bmcsIG1pbWVUeXBlVGV4dFVSSUxpc3QsIHVybCwgMCwgMCwgdGl0bGUsIEtVUkwoKSkpOwogfQog
Ci1EYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW06OkRhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bShQYXNz
UmVmUHRyPENsaXBib2FyZD4gb3duZXIsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQs
IERhdGFTb3VyY2Ugc291cmNlLCBjb25zdCBTdHJpbmcmIGtpbmQsIGNvbnN0IFN0cmluZyYgdHlw
ZSwgY29uc3QgU3RyaW5nJiBkYXRhKQotICAgIDogbV9jb250ZXh0KGNvbnRleHQpCi0gICAgLCBt
X293bmVyKG93bmVyKQorUGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0+IERhdGFU
cmFuc2Zlckl0ZW1DaHJvbWl1bTo6Y3JlYXRlRnJvbUhUTUwoY29uc3QgU3RyaW5nJiBodG1sLCBj
b25zdCBLVVJMJiBiYXNlVVJMKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGF0YVRyYW5z
ZmVySXRlbUNocm9taXVtKERhdGFUcmFuc2Zlckl0ZW06OmtpbmRTdHJpbmcsIG1pbWVUeXBlVGV4
dEhUTUwsIGh0bWwsIDAsIDAsIFN0cmluZygpLCBiYXNlVVJMKSk7Cit9CisKK1Bhc3NSZWZQdHI8
RGF0YVRyYW5zZmVySXRlbUNocm9taXVtPiBEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW06OmNyZWF0
ZUZyb21TaGFyZWRCdWZmZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPFNoYXJlZEJ1
ZmZlcj4gYnVmZmVyKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGF0YVRyYW5zZmVySXRl
bUNocm9taXVtKERhdGFUcmFuc2Zlckl0ZW06OmtpbmRGaWxlLCBTdHJpbmcoKSwgU3RyaW5nKCks
IDAsIGJ1ZmZlciwgbmFtZSwgS1VSTCgpKSk7Cit9CisKK1Bhc3NSZWZQdHI8RGF0YVRyYW5zZmVy
SXRlbUNocm9taXVtPiBEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW06OmNyZWF0ZUZyb21QYXN0ZWJv
YXJkKGNvbnN0IFN0cmluZyYgdHlwZSwgdWludDY0X3Qgc2VxdWVuY2VOdW1iZXIpCit7CisgICAg
aWYgKHR5cGUgPT0gbWltZVR5cGVJbWFnZVBuZykKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0oRGF0YVRyYW5zZmVySXRlbTo6a2luZEZpbGUsIHR5
cGUsIHNlcXVlbmNlTnVtYmVyKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEYXRhVHJhbnNm
ZXJJdGVtQ2hyb21pdW0oRGF0YVRyYW5zZmVySXRlbTo6a2luZFN0cmluZywgdHlwZSwgc2VxdWVu
Y2VOdW1iZXIpKTsKK30KKworRGF0YVRyYW5zZmVySXRlbUNocm9taXVtOjpEYXRhVHJhbnNmZXJJ
dGVtQ2hyb21pdW0oY29uc3QgU3RyaW5nJiBraW5kLCBjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0
IFN0cmluZyYgZGF0YSwKKyAgICBQYXNzUmVmUHRyPEZpbGU+IGZpbGUsIFBhc3NSZWZQdHI8U2hh
cmVkQnVmZmVyPiBzaGFyZWRCdWZmZXIsIGNvbnN0IFN0cmluZyYgdGl0bGUsIGNvbnN0IEtVUkwm
IGJhc2VVUkwpCisgICAgOiBtX3NvdXJjZShJbnRlcm5hbFNvdXJjZSkKICAgICAsIG1fa2luZChr
aW5kKQogICAgICwgbV90eXBlKHR5cGUpCi0gICAgLCBtX3NvdXJjZShzb3VyY2UpCiAgICAgLCBt
X2RhdGEoZGF0YSkKKyAgICAsIG1fZmlsZShmaWxlKQorICAgICwgbV9zaGFyZWRCdWZmZXIoc2hh
cmVkQnVmZmVyKQorICAgICwgbV90aXRsZSh0aXRsZSkKKyAgICAsIG1fYmFzZVVSTChiYXNlVVJM
KQogewogfQogCi1EYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW06OkRhdGFUcmFuc2Zlckl0ZW1DaHJv
bWl1bShQYXNzUmVmUHRyPENsaXBib2FyZD4gb3duZXIsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQsIERhdGFTb3VyY2Ugc291cmNlLCBQYXNzUmVmUHRyPEZpbGU+IGZpbGUpCi0gICAg
OiBtX2NvbnRleHQoY29udGV4dCkKLSAgICAsIG1fb3duZXIob3duZXIpCi0gICAgLCBtX2tpbmQo
a2luZEZpbGUpCi0gICAgLCBtX3R5cGUoZmlsZS5nZXQoKSA/IGZpbGUtPnR5cGUoKSA6IFN0cmlu
ZygpKQotICAgICwgbV9zb3VyY2Uoc291cmNlKQotICAgICwgbV9maWxlKGZpbGUpCitEYXRhVHJh
bnNmZXJJdGVtQ2hyb21pdW06OkRhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bShjb25zdCBTdHJpbmcm
IGtpbmQsIGNvbnN0IFN0cmluZyYgdHlwZSwgdWludDY0X3Qgc2VxdWVuY2VOdW1iZXIpCisgICAg
OiBtX3NvdXJjZShQYXN0ZWJvYXJkU291cmNlKQorICAgICwgbV9raW5kKGtpbmQpCisgICAgLCBt
X3R5cGUodHlwZSkKKyAgICAsIG1fc2VxdWVuY2VOdW1iZXIoc2VxdWVuY2VOdW1iZXIpCiB7CiB9
CiAKLXZvaWQgRGF0YVRyYW5zZmVySXRlbUNocm9taXVtOjpnZXRBc1N0cmluZyhQYXNzUmVmUHRy
PFN0cmluZ0NhbGxiYWNrPiBjYWxsYmFjaykgY29uc3QKK3ZvaWQgRGF0YVRyYW5zZmVySXRlbUNo
cm9taXVtOjpnZXRBc1N0cmluZyhQYXNzUmVmUHRyPFN0cmluZ0NhbGxiYWNrPiBjYWxsYmFjaywg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkgY29uc3QKIHsKLSAgICBpZiAoa2luZCgp
ICE9IGtpbmRTdHJpbmcpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChjbGlwYm9hcmRDaHJv
bWl1bSgpLT5zdG9yYWdlSGFzVXBkYXRlZCgpKQorICAgIGlmICghY2FsbGJhY2sgfHwga2luZCgp
ICE9IERhdGFUcmFuc2Zlckl0ZW06OmtpbmRTdHJpbmcpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGlmIChtX3NvdXJjZSA9PSBJbnRlcm5hbFNvdXJjZSkgewotICAgICAgICBjYWxsYmFjay0+c2No
ZWR1bGVDYWxsYmFjayhtX2NvbnRleHQsIG1fZGF0YSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBBU1NFUlQobV9zb3VyY2UgPT0gUGFzdGVib2FyZFNvdXJjZSk7Ci0KLSAgICAvLyBU
aGlzIGlzIHVnbHkgYnV0IHRoZXJlJ3Mgbm8gcmVhbCBhbHRlcm5hdGl2ZS4KLSAgICBpZiAodHlw
ZSgpID09IG1pbWVUeXBlVGV4dFBsYWluKSB7Ci0gICAgICAgIGNhbGxiYWNrLT5zY2hlZHVsZUNh
bGxiYWNrKG1fY29udGV4dCwgUGxhdGZvcm1TdXBwb3J0OjpjbGlwYm9hcmRSZWFkUGxhaW5UZXh0
KGN1cnJlbnRQYXN0ZWJvYXJkQnVmZmVyKCkpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICBpZiAodHlwZSgpID09IG1pbWVUeXBlVGV4dEhUTUwpIHsKLSAgICAgICAgU3RyaW5nIGh0bWw7
Ci0gICAgICAgIEtVUkwgaWdub3JlZFNvdXJjZVVSTDsKLSAgICAgICAgdW5zaWduZWQgaWdub3Jl
ZDsKLSAgICAgICAgUGxhdGZvcm1TdXBwb3J0OjpjbGlwYm9hcmRSZWFkSFRNTChjdXJyZW50UGFz
dGVib2FyZEJ1ZmZlcigpLCAmaHRtbCwgJmlnbm9yZWRTb3VyY2VVUkwsICZpZ25vcmVkLCAmaWdu
b3JlZCk7Ci0gICAgICAgIGNhbGxiYWNrLT5zY2hlZHVsZUNhbGxiYWNrKG1fY29udGV4dCwgaHRt
bCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgY2FsbGJhY2stPnNjaGVkdWxlQ2FsbGJhY2soY29udGV4dCwgaW50ZXJuYWxHZXRBc1N0cmlu
ZygpKTsKIH0KIAogUGFzc1JlZlB0cjxCbG9iPiBEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW06Omdl
dEFzRmlsZSgpIGNvbnN0CiB7Ci0gICAgaWYgKGtpbmQoKSAhPSBraW5kRmlsZSB8fCBjbGlwYm9h
cmRDaHJvbWl1bSgpLT5zdG9yYWdlSGFzVXBkYXRlZCgpKQorICAgIGlmIChraW5kKCkgIT0gRGF0
YVRyYW5zZmVySXRlbTo6a2luZEZpbGUpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgaWYgKG1f
c291cmNlID09IEludGVybmFsU291cmNlKQotICAgICAgICByZXR1cm4gbV9maWxlOworICAgIGlm
IChtX3NvdXJjZSA9PSBJbnRlcm5hbFNvdXJjZSkgeworICAgICAgICBpZiAobV9maWxlKQorICAg
ICAgICAgICAgcmV0dXJuIG1fZmlsZTsKKyAgICAgICAgQVNTRVJUKG1fc2hhcmVkQnVmZmVyKTsK
KyAgICAgICAgcmV0dXJuIDA7IC8vIEZJWE1FOiBTdXBwb3J0IHRoaXM/CisgICAgfQogCiAgICAg
QVNTRVJUKG1fc291cmNlID09IFBhc3RlYm9hcmRTb3VyY2UpOwogICAgIGlmICh0eXBlKCkgPT0g
bWltZVR5cGVJbWFnZVBuZykgewpAQCAtMTQ2LDEyICsxMzgsMzggQEAgUGFzc1JlZlB0cjxCbG9i
PiBEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW06OmdldEFzRmlsZSgpIGNvbnN0CiAgICAgICAgIGJs
b2JEYXRhLT5zZXRDb250ZW50VHlwZShtaW1lVHlwZUltYWdlUG5nKTsKICAgICAgICAgcmV0dXJu
IEJsb2I6OmNyZWF0ZShibG9iRGF0YS5yZWxlYXNlKCksIGRhdGEtPnNpemUoKSk7CiAgICAgfQor
CiAgICAgcmV0dXJuIDA7CiB9CiAKLUNsaXBib2FyZENocm9taXVtKiBEYXRhVHJhbnNmZXJJdGVt
Q2hyb21pdW06OmNsaXBib2FyZENocm9taXVtKCkgY29uc3QKK1N0cmluZyBEYXRhVHJhbnNmZXJJ
dGVtQ2hyb21pdW06OmludGVybmFsR2V0QXNTdHJpbmcoKSBjb25zdAoreworICAgIEFTU0VSVCht
X2tpbmQgPT0gRGF0YVRyYW5zZmVySXRlbTo6a2luZFN0cmluZyk7CisKKyAgICBpZiAobV9zb3Vy
Y2UgPT0gSW50ZXJuYWxTb3VyY2UpCisgICAgICAgIHJldHVybiBtX2RhdGE7CisKKyAgICBBU1NF
UlQobV9zb3VyY2UgPT0gUGFzdGVib2FyZFNvdXJjZSk7CisKKyAgICBTdHJpbmcgZGF0YTsKKyAg
ICAvLyBUaGlzIGlzIHVnbHkgYnV0IHRoZXJlJ3Mgbm8gcmVhbCBhbHRlcm5hdGl2ZS4KKyAgICBp
ZiAobV90eXBlID09IG1pbWVUeXBlVGV4dFBsYWluKQorICAgICAgICBkYXRhID0gUGxhdGZvcm1T
dXBwb3J0OjpjbGlwYm9hcmRSZWFkUGxhaW5UZXh0KGN1cnJlbnRQYXN0ZWJvYXJkQnVmZmVyKCkp
OworICAgIGVsc2UgaWYgKG1fdHlwZSA9PSBtaW1lVHlwZVRleHRIVE1MKSB7CisgICAgICAgIEtV
UkwgaWdub3JlZFNvdXJjZVVSTDsKKyAgICAgICAgdW5zaWduZWQgaWdub3JlZDsKKyAgICAgICAg
UGxhdGZvcm1TdXBwb3J0OjpjbGlwYm9hcmRSZWFkSFRNTChjdXJyZW50UGFzdGVib2FyZEJ1ZmZl
cigpLCAmZGF0YSwgJmlnbm9yZWRTb3VyY2VVUkwsICZpZ25vcmVkLCAmaWdub3JlZCk7CisgICAg
fSBlbHNlCisgICAgICAgIGRhdGEgPSBQbGF0Zm9ybVN1cHBvcnQ6OmNsaXBib2FyZFJlYWRDdXN0
b21EYXRhKGN1cnJlbnRQYXN0ZWJvYXJkQnVmZmVyKCksIG1fdHlwZSk7CisKKyAgICByZXR1cm4g
UGxhdGZvcm1TdXBwb3J0OjpjbGlwYm9hcmRTZXF1ZW5jZU51bWJlcihjdXJyZW50UGFzdGVib2Fy
ZEJ1ZmZlcigpKSA9PSBtX3NlcXVlbmNlTnVtYmVyID8gZGF0YSA6IFN0cmluZygpOworfQorCiti
b29sIERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bTo6aXNGaWxlbmFtZSgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIHN0YXRpY19jYXN0PENsaXBib2FyZENocm9taXVtKj4obV9vd25lci5nZXQoKSk7Cisg
ICAgLy8gRklYTUU6IFdoZW4gd2UgcHJvcGVybHkgc3VwcG9ydCBGaWxlIGRyYWdvdXQsIHdlJ2xs
IG5lZWQgdG8gbWFrZSBzdXJlCisgICAgLy8gdGhpcyB3b3JrcyBhcyBleHBlY3RlZCBmb3IgRHJh
Z0RhdGFDaHJvbWl1bS4KKyAgICByZXR1cm4gbV9raW5kID09IERhdGFUcmFuc2Zlckl0ZW06Omtp
bmRGaWxlICYmIG1fZmlsZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRGF0YVRyYW5zZmVySXRlbUNocm9t
aXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EYXRhVHJhbnNmZXJJdGVt
Q2hyb21pdW0uaAppbmRleCAyYTkxOTAwNmJmOWE0MGNjNzkzYjkyY2Y4NjhhYThkM2Q1YTU5N2E1
Li4zYzgwOTIwNWQzYzQ0YTE4YWIwOWVhYTFmZDM2YjBkOWM1ZmY5NWRjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EYXRhVHJhbnNmZXJJdGVt
Q2hyb21pdW0uaApAQCAtMzMsNDggKzMzLDYyIEBACiAKICNpZiBFTkFCTEUoREFUQV9UUkFOU0ZF
Ul9JVEVNUykKIAotI2luY2x1ZGUgIkRhdGFUcmFuc2Zlckl0ZW0uaCIKKyNpbmNsdWRlICJGaWxl
LmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIENs
aXBib2FyZDsKLWNsYXNzIENsaXBib2FyZENocm9taXVtOwotY2xhc3MgRmlsZTsKK2NsYXNzIEJs
b2I7CiBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OworY2xhc3MgU3RyaW5nQ2FsbGJhY2s7
CiAKLWNsYXNzIERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bSA6IHB1YmxpYyBEYXRhVHJhbnNmZXJJ
dGVtIHsKK2NsYXNzIERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bSA6IHB1YmxpYyBSZWZDb3VudGVk
PERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bT4gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVm
UHRyPERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bT4gY3JlYXRlKFBhc3NSZWZQdHI8Q2xpcGJvYXJk
PiBvd25lciwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgZGF0YSwgY29u
c3QgU3RyaW5nJiB0eXBlKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVt
Q2hyb21pdW0+IGNyZWF0ZShQYXNzUmVmUHRyPENsaXBib2FyZD4gb3duZXIsIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPEZpbGU+KTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxE
YXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0+IGNyZWF0ZUZyb21QYXN0ZWJvYXJkKFBhc3NSZWZQdHI8
Q2xpcGJvYXJkPiBvd25lciwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYg
dHlwZSk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUNocm9taXVtPiBj
cmVhdGVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKTsK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0+IGNyZWF0ZUZy
b21GaWxlKFBhc3NSZWZQdHI8RmlsZT4pOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFUcmFu
c2Zlckl0ZW1DaHJvbWl1bT4gY3JlYXRlRnJvbVVSTChjb25zdCBTdHJpbmcmIHVybCwgY29uc3Qg
U3RyaW5nJiB0aXRsZSk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUNo
cm9taXVtPiBjcmVhdGVGcm9tSFRNTChjb25zdCBTdHJpbmcmIGh0bWwsIGNvbnN0IEtVUkwmIGJh
c2VVUkwpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bT4g
Y3JlYXRlRnJvbVNoYXJlZEJ1ZmZlcihjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBQYXNzUmVmUHRy
PFNoYXJlZEJ1ZmZlcj4pOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1D
aHJvbWl1bT4gY3JlYXRlRnJvbVBhc3RlYm9hcmQoY29uc3QgU3RyaW5nJiB0eXBlLCB1aW50NjRf
dCBzZXF1ZW5jZU51bWJlcik7CiAKLSAgICB2aXJ0dWFsIFN0cmluZyBraW5kKCkgY29uc3QgeyBy
ZXR1cm4gbV9raW5kOyB9Ci0gICAgdmlydHVhbCBTdHJpbmcgdHlwZSgpIGNvbnN0IHsgcmV0dXJu
IG1fdHlwZTsgfQotICAgIHZpcnR1YWwgdm9pZCBnZXRBc1N0cmluZyhQYXNzUmVmUHRyPFN0cmlu
Z0NhbGxiYWNrPikgY29uc3Q7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEJsb2I+IGdldEFzRmls
ZSgpIGNvbnN0OworICAgIFN0cmluZyBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9Cisg
ICAgU3RyaW5nIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKyAgICB2b2lkIGdldEFz
U3RyaW5nKFBhc3NSZWZQdHI8U3RyaW5nQ2FsbGJhY2s+LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0
KikgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxCbG9iPiBnZXRBc0ZpbGUoKSBjb25zdDsKIAotcHJp
dmF0ZToKLSAgICBmcmllbmQgY2xhc3MgRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bTsKKyAg
ICAvLyBVc2VkIHRvIHN1cHBvcnQgbGVnYWN5IERhdGFUcmFuc2ZlciBBUElzIGFuZCByZW5kZXJl
ci0+YnJvd3NlciBzZXJpYWxpemF0aW9uLgorICAgIFN0cmluZyBpbnRlcm5hbEdldEFzU3RyaW5n
KCkgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IHNoYXJlZEJ1ZmZlcigpIGNv
bnN0IHsgcmV0dXJuIG1fc2hhcmVkQnVmZmVyOyB9CisgICAgU3RyaW5nIHRpdGxlKCkgY29uc3Qg
eyByZXR1cm4gbV90aXRsZTsgfQorICAgIEtVUkwgYmFzZVVSTCgpIGNvbnN0IHsgcmV0dXJuIG1f
YmFzZVVSTDsgfQorICAgIGJvb2wgaXNGaWxlbmFtZSgpIGNvbnN0OwogCitwcml2YXRlOgogICAg
IGVudW0gRGF0YVNvdXJjZSB7CiAgICAgICAgIFBhc3RlYm9hcmRTb3VyY2UsCiAgICAgICAgIElu
dGVybmFsU291cmNlLAogICAgIH07CiAKLSAgICBEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0oUGFz
c1JlZlB0cjxDbGlwYm9hcmQ+IG93bmVyLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRGF0YVNv
dXJjZSwgY29uc3QgU3RyaW5nJiBraW5kLCBjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmlu
ZyYgZGF0YSk7Ci0gICAgRGF0YVRyYW5zZmVySXRlbUNocm9taXVtKFBhc3NSZWZQdHI8Q2xpcGJv
YXJkPiBvd25lciwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIERhdGFTb3VyY2UsIFBhc3NSZWZQ
dHI8RmlsZT4pOworICAgIERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bShjb25zdCBTdHJpbmcmIGtp
bmQsIGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhLAorICAgICAgICBQYXNz
UmVmUHRyPEZpbGU+LCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4sIGNvbnN0IFN0cmluZyYgdGl0
bGUsIGNvbnN0IEtVUkwmIGJhc2VVUkwpOworICAgIERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bShj
b25zdCBTdHJpbmcmIGtpbmQsIGNvbnN0IFN0cmluZyYgdHlwZSwgdWludDY0X3Qgc2VxdWVuY2VO
dW1iZXIpOwogCi0gICAgQ2xpcGJvYXJkQ2hyb21pdW0qIGNsaXBib2FyZENocm9taXVtKCkgY29u
c3Q7Ci0KLSAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBtX2NvbnRleHQ7Ci0gICAgY29uc3Qg
UmVmUHRyPENsaXBib2FyZD4gbV9vd25lcjsKKyAgICBjb25zdCBEYXRhU291cmNlIG1fc291cmNl
OwogICAgIGNvbnN0IFN0cmluZyBtX2tpbmQ7CiAgICAgY29uc3QgU3RyaW5nIG1fdHlwZTsKLSAg
ICBjb25zdCBEYXRhU291cmNlIG1fc291cmNlOworCiAgICAgY29uc3QgU3RyaW5nIG1fZGF0YTsK
ICAgICBSZWZQdHI8RmlsZT4gbV9maWxlOworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1fc2hh
cmVkQnVmZmVyOworICAgIC8vIE9wdGlvbmFsIG1ldGFkYXRhLiBDdXJyZW50bHkgdXNlZCBmb3Ig
VVJMLCBIVE1MLCBhbmQgZHJhZ2dpbmcgZmlsZXMgaW4uCisgICAgY29uc3QgU3RyaW5nIG1fdGl0
bGU7CisgICAgY29uc3QgS1VSTCBtX2Jhc2VVUkw7CisKKyAgICB1aW50NjRfdCBtX3NlcXVlbmNl
TnVtYmVyOyAvLyBPbmx5IHZhbGlkIHdoZW4gbV9zb3VyY2UgPT0gUGFzdGVib2FyZFNvdXJjZQog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY2hyb21pdW0vRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVt
LmNwcAppbmRleCAzYTI4MGZlM2I1NDBkMmVjOGZjZjdiOWNhOTE5OGQyNjMwMTg2Zjc3Li43YmVm
YjgwNTc0MmEwOGNhODhlZTc5NTNhMWJmZDY5M2JhZTJmZWMzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EYXRhVHJhbnNmZXJJdGVt
TGlzdENocm9taXVtLmNwcApAQCAtMzcsMTE4ICszNyw3OCBAQAogI2luY2x1ZGUgIkNocm9taXVt
RGF0YU9iamVjdC5oIgogI2luY2x1ZGUgIkNsaXBib2FyZENocm9taXVtLmgiCiAjaW5jbHVkZSAi
Q2xpcGJvYXJkTWltZVR5cGVzLmgiCisjaW5jbHVkZSAiQ2xpcGJvYXJkVXRpbGl0aWVzQ2hyb21p
dW0uaCIKKyNpbmNsdWRlICJEYXRhVHJhbnNmZXJJdGVtLmgiCiAjaW5jbHVkZSAiRGF0YVRyYW5z
ZmVySXRlbUNocm9taXVtLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUg
IkZpbGUuaCIKICNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdXBwb3J0Lmgi
CiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIlRocmVhZGFi
bGVCbG9iUmVnaXN0cnkuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtTGlzdENo
cm9taXVtPiBEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtOjpjcmVhdGUoUGFzc1JlZlB0cjxD
bGlwYm9hcmQ+IG93bmVyLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQorUGFzc1Jl
ZlB0cjxEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtPiBEYXRhVHJhbnNmZXJJdGVtTGlzdENo
cm9taXVtOjpjcmVhdGUoKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGF0YVRyYW5zZmVy
SXRlbUxpc3RDaHJvbWl1bShvd25lciwgY29udGV4dCkpOworICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bSgpKTsKIH0KIAotRGF0YVRyYW5zZmVySXRl
bUxpc3RDaHJvbWl1bTo6RGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bShQYXNzUmVmUHRyPENs
aXBib2FyZD4gb3duZXIsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCi0gICAgOiBt
X293bmVyKG93bmVyKQotICAgICwgbV9jb250ZXh0KGNvbnRleHQpCitQYXNzUmVmUHRyPERhdGFU
cmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0+IERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW06OmNy
ZWF0ZUZyb21QYXN0ZWJvYXJkKCkKK3sKKyAgICBSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUxpc3RD
aHJvbWl1bT4gbGlzdCA9IGNyZWF0ZSgpOworICAgIHVpbnQ2NF90IHNlcXVlbmNlTnVtYmVyID0g
UGxhdGZvcm1TdXBwb3J0OjpjbGlwYm9hcmRTZXF1ZW5jZU51bWJlcihjdXJyZW50UGFzdGVib2Fy
ZEJ1ZmZlcigpKTsKKyAgICBib29sIGlnbm9yZWQ7CisgICAgSGFzaFNldDxTdHJpbmc+IHR5cGVz
ID0gUGxhdGZvcm1TdXBwb3J0OjpjbGlwYm9hcmRSZWFkQXZhaWxhYmxlVHlwZXMoY3VycmVudFBh
c3RlYm9hcmRCdWZmZXIoKSwgJmlnbm9yZWQpOworICAgIGZvciAoSGFzaFNldDxTdHJpbmc+Ojpj
b25zdF9pdGVyYXRvciBpdCA9IHR5cGVzLmJlZ2luKCk7IGl0ICE9IHR5cGVzLmVuZCgpOyArK2l0
KQorICAgICAgICBsaXN0LT5tX2l0ZW1MaXN0LmFwcGVuZChEYXRhVHJhbnNmZXJJdGVtQ2hyb21p
dW06OmNyZWF0ZUZyb21QYXN0ZWJvYXJkKCppdCwgc2VxdWVuY2VOdW1iZXIpKTsKKyAgICByZXR1
cm4gbGlzdC5yZWxlYXNlKCk7Cit9CisKK0RhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW06OkRh
dGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0oKQogewogfQogCiBzaXplX3QgRGF0YVRyYW5zZmVy
SXRlbUxpc3RDaHJvbWl1bTo6bGVuZ3RoKCkgY29uc3QKIHsKLSAgICBjbGlwYm9hcmRDaHJvbWl1
bSgpLT5tYXlVcGRhdGVJdGVtcyhtX2l0ZW1zKTsKLSAgICByZXR1cm4gbV9pdGVtcy5zaXplKCk7
CisgICAgcmV0dXJuIG1faXRlbUxpc3Quc2l6ZSgpOwogfQogCi1QYXNzUmVmUHRyPERhdGFUcmFu
c2Zlckl0ZW0+IERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW06Oml0ZW0odW5zaWduZWQgbG9u
ZyBpbmRleCkKK1Bhc3NSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUNocm9taXVtPiBEYXRhVHJhbnNm
ZXJJdGVtTGlzdENocm9taXVtOjppdGVtKHVuc2lnbmVkIGxvbmcgaW5kZXgpCiB7Ci0gICAgY2xp
cGJvYXJkQ2hyb21pdW0oKS0+bWF5VXBkYXRlSXRlbXMobV9pdGVtcyk7CiAgICAgaWYgKGluZGV4
ID49IGxlbmd0aCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gbV9pdGVtc1tpbmRl
eF07CisgICAgcmV0dXJuIG1faXRlbUxpc3RbaW5kZXhdOwogfQogCi12b2lkIERhdGFUcmFuc2Zl
ckl0ZW1MaXN0Q2hyb21pdW06OmRlbGV0ZUl0ZW0odW5zaWduZWQgbG9uZyBpbmRleCwgRXhjZXB0
aW9uQ29kZSYgZWMpCit2b2lkIERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW06OmRlbGV0ZUl0
ZW0odW5zaWduZWQgbG9uZyBpbmRleCkKIHsKLSAgICBjbGlwYm9hcmRDaHJvbWl1bSgpLT5tYXlV
cGRhdGVJdGVtcyhtX2l0ZW1zKTsKICAgICBpZiAoaW5kZXggPj0gbGVuZ3RoKCkpCiAgICAgICAg
IHJldHVybjsKLSAgICBSZWZQdHI8RGF0YVRyYW5zZmVySXRlbT4gaXRlbSA9IG1faXRlbXNbaW5k
ZXhdOwotCi0gICAgUmVmUHRyPENocm9taXVtRGF0YU9iamVjdD4gZGF0YU9iamVjdCA9IGNsaXBi
b2FyZENocm9taXVtKCktPmRhdGFPYmplY3QoKTsKLSAgICBpZiAoIWRhdGFPYmplY3QpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmIChpdGVtLT5raW5kKCkgPT0gRGF0YVRyYW5zZmVySXRlbTo6
a2luZFN0cmluZykgewotICAgICAgICBtX2l0ZW1zLnJlbW92ZShpbmRleCk7Ci0gICAgICAgIGRh
dGFPYmplY3QtPmNsZWFyRGF0YShpdGVtLT50eXBlKCkpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgQVNTRVJUKGl0ZW0tPmtpbmQoKSA9PSBEYXRhVHJhbnNmZXJJdGVtOjpraW5kRmls
ZSk7Ci0gICAgUmVmUHRyPEJsb2I+IGJsb2IgPSBpdGVtLT5nZXRBc0ZpbGUoKTsKLSAgICBpZiAo
IWJsb2IgfHwgIWJsb2ItPmlzRmlsZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2l0ZW1z
LmNsZWFyKCk7Ci0gICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcyA9IGRhdGFPYmpl
Y3QtPmZpbGVuYW1lcygpOwotICAgIFZlY3RvcjxTdHJpbmc+IGNvcGllZEZpbGVuYW1lczsKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZpbGVuYW1lcy5zaXplKCk7ICsraSkgewotICAgICAg
ICBpZiAoZmlsZW5hbWVzW2ldICE9IHN0YXRpY19jYXN0PEZpbGUqPihibG9iLmdldCgpKS0+cGF0
aCgpKQotICAgICAgICAgICAgY29waWVkRmlsZW5hbWVzLmFwcGVuZChzdGF0aWNfY2FzdDxGaWxl
Kj4oYmxvYi5nZXQoKSktPnBhdGgoKSk7Ci0gICAgfQotICAgIGRhdGFPYmplY3QtPnNldEZpbGVu
YW1lcyhjb3BpZWRGaWxlbmFtZXMpOworICAgIG1faXRlbUxpc3QucmVtb3ZlKGluZGV4KTsKIH0K
IAogdm9pZCBEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtOjpjbGVhcigpCiB7Ci0gICAgbV9p
dGVtcy5jbGVhcigpOwotICAgIGNsaXBib2FyZENocm9taXVtKCktPmNsZWFyQWxsRGF0YSgpOwor
ICAgIG1faXRlbUxpc3QuY2xlYXIoKTsKIH0KIAogdm9pZCBEYXRhVHJhbnNmZXJJdGVtTGlzdENo
cm9taXVtOjphZGQoY29uc3QgU3RyaW5nJiBkYXRhLCBjb25zdCBTdHJpbmcmIHR5cGUsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQogewotICAgIFJlZlB0cjxDaHJvbWl1bURhdGFPYmplY3Q+IGRhdGFPYmpl
Y3QgPSBjbGlwYm9hcmRDaHJvbWl1bSgpLT5kYXRhT2JqZWN0KCk7Ci0gICAgaWYgKCFkYXRhT2Jq
ZWN0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICBk
YXRhT2JqZWN0LT5nZXREYXRhKHR5cGUsIHN1Y2Nlc3MpOwotICAgIGlmIChzdWNjZXNzKSB7Ci0g
ICAgICAgIC8vIEFkZGluZyBkYXRhIHdpdGggdGhlIHNhbWUgdHlwZSBzaG91bGQgZmFpbCB3aXRo
IE5PVF9TVVBQT1JURURfRVJSLgorICAgIGlmICghaW50ZXJuYWxBZGRTdHJpbmdJdGVtKERhdGFU
cmFuc2Zlckl0ZW1DaHJvbWl1bTo6Y3JlYXRlRnJvbVN0cmluZyh0eXBlLCBkYXRhKSkpCiAgICAg
ICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBtX2l0ZW1zLmNsZWFyKCk7Ci0gICAgZGF0YU9iamVjdC0+c2V0RGF0YSh0eXBlLCBkYXRhKTsK
IH0KIAotdm9pZCBEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtOjphZGQoUGFzc1JlZlB0cjxG
aWxlPiBmaWxlKQordm9pZCBEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtOjphZGQoUGFzc1Jl
ZlB0cjxGaWxlPiBmaWxlLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogewogICAg
IGlmICghZmlsZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPENocm9taXVtRGF0YU9i
amVjdD4gZGF0YU9iamVjdCA9IGNsaXBib2FyZENocm9taXVtKCktPmRhdGFPYmplY3QoKTsKLSAg
ICBpZiAoIWRhdGFPYmplY3QpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1faXRlbXMuY2xlYXIo
KTsKLQotICAgIC8vIFVwZGF0aW5nIGRhdGFPYmplY3QncyBmaWxlc2V0IHNvIHRoYXQgd2Ugd2ls
bCBiZSBzZWVpbmcgdGhlIGNvbnNpc3RlbnQgbGlzdCBldmVuIGlmIHdlIHJlY29uc3RydWN0IHRo
ZSBpdGVtcyBsYXRlci4KLSAgICBkYXRhT2JqZWN0LT5hZGRGaWxlbmFtZShmaWxlLT5wYXRoKCkp
OwotCi0gICAgLy8gRklYTUU6IEFsbG93IG11bHRpcGxlIGZpbGVzIHRvIGJlIGRyYWdnZWQgb3V0
IGF0IG9uY2UgaWYgbW9yZSB0aGFuIG9uZSBmaWxlIGlzIGFkZGVkIHRvIHRoZSBzdG9yYWdlLiBG
b3Igbm93IHdlIG1hbnVhbGx5IHNldCB1cCBkcmFnLW91dCBkb3dubG9hZCBVUkwgb25seSBpZiBp
dCBoYXMgbm90IGJlZW4gc2V0IHlldC4KLSAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICBk
YXRhT2JqZWN0LT5nZXREYXRhKG1pbWVUeXBlRG93bmxvYWRVUkwsIHN1Y2Nlc3MpOwotICAgIGlm
IChzdWNjZXNzKQotICAgICAgICByZXR1cm47CisgICAgbV9pdGVtTGlzdC5hcHBlbmQoRGF0YVRy
YW5zZmVySXRlbUNocm9taXVtOjpjcmVhdGVGcm9tRmlsZShmaWxlKSk7CiAKLSAgICBLVVJMIHVy
bEZvckRvd25sb2FkID0gQmxvYlVSTDo6Y3JlYXRlUHVibGljVVJMKG1fY29udGV4dC0+c2VjdXJp
dHlPcmlnaW4oKSk7CisgICAgLy8gRklYTUU6IEFsbG93IG11bHRpcGxlIGZpbGVzIHRvIGJlIGRy
YWdnZWQgb3V0IGF0IG9uY2UgaWYgbW9yZSB0aGFuIG9uZSBmaWxlIGlzIGFkZGVkIHRvIHRoZSBz
dG9yYWdlLgorICAgIEtVUkwgdXJsRm9yRG93bmxvYWQgPSBCbG9iVVJMOjpjcmVhdGVQdWJsaWNV
UkwoY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKSk7CiAgICAgVGhyZWFkYWJsZUJsb2JSZWdpc3Ry
eTo6cmVnaXN0ZXJCbG9iVVJMKHVybEZvckRvd25sb2FkLCBmaWxlLT51cmwoKSk7CiAKICAgICBT
dHJpbmdCdWlsZGVyIGRvd25sb2FkVXJsOwpAQCAtMTU3LDEyICsxMTcsMjYgQEAgdm9pZCBEYXRh
VHJhbnNmZXJJdGVtTGlzdENocm9taXVtOjphZGQoUGFzc1JlZlB0cjxGaWxlPiBmaWxlKQogICAg
IGRvd25sb2FkVXJsLmFwcGVuZChlbmNvZGVXaXRoVVJMRXNjYXBlU2VxdWVuY2VzKGZpbGUtPm5h
bWUoKSkpOwogICAgIGRvd25sb2FkVXJsLmFwcGVuZCgiOiIpOwogICAgIGRvd25sb2FkVXJsLmFw
cGVuZCh1cmxGb3JEb3dubG9hZC5zdHJpbmcoKSk7Ci0gICAgZGF0YU9iamVjdC0+c2V0RGF0YSht
aW1lVHlwZURvd25sb2FkVVJMLCBkb3dubG9hZFVybC50b1N0cmluZygpKTsKKworICAgIGludGVy
bmFsQWRkU3RyaW5nSXRlbShEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW06OmNyZWF0ZUZyb21TdHJp
bmcobWltZVR5cGVEb3dubG9hZFVSTCwgZG93bmxvYWRVcmwudG9TdHJpbmcoKSkpOworfQorCisv
LyBGSVhNRTogTWFrZSBzdXJlIGl0ZW0gaXMgcmVsZWFzZWQgY29ycmVjdGx5IGluIGNhc2Ugb2Yg
ZmFpbHVyZS4KK2Jvb2wgRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bTo6aW50ZXJuYWxBZGRT
dHJpbmdJdGVtKFBhc3NSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUNocm9taXVtPiBpdGVtKQorewor
ICAgIEFTU0VSVChpdGVtLT5raW5kKCkgPT0gRGF0YVRyYW5zZmVySXRlbTo6a2luZFN0cmluZyk7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2l0ZW1MaXN0LnNpemUoKTsgKytpKQorICAg
ICAgICBpZiAobV9pdGVtTGlzdFtpXS0+a2luZCgpID09IERhdGFUcmFuc2Zlckl0ZW06OmtpbmRT
dHJpbmcgJiYgbV9pdGVtTGlzdFtpXS0+dHlwZSgpID09IGl0ZW0tPnR5cGUoKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIG1faXRlbUxpc3QuYXBwZW5kKGl0ZW0pOworICAgIHJl
dHVybiB0cnVlOwogfQogCi1DbGlwYm9hcmRDaHJvbWl1bSogRGF0YVRyYW5zZmVySXRlbUxpc3RD
aHJvbWl1bTo6Y2xpcGJvYXJkQ2hyb21pdW0oKSBjb25zdAordm9pZCBEYXRhVHJhbnNmZXJJdGVt
TGlzdENocm9taXVtOjppbnRlcm5hbEFkZEZpbGVJdGVtKFBhc3NSZWZQdHI8RGF0YVRyYW5zZmVy
SXRlbUNocm9taXVtPiBpdGVtKQogewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxDbGlwYm9hcmRD
aHJvbWl1bSo+KG1fb3duZXIuZ2V0KCkpOworICAgIEFTU0VSVChpdGVtLT5raW5kKCkgPT0gRGF0
YVRyYW5zZmVySXRlbTo6a2luZEZpbGUpOworICAgIG1faXRlbUxpc3QuYXBwZW5kKGl0ZW0pOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jaHJvbWl1bS9EYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtLmgK
aW5kZXggNjFiZDE2N2M3MjMyNGU1ZTVlMThjZTU3YWZlM2EzYTIwNTM2ZTJlZC4uZGE0M2FhNWJh
OWRjN2U2ZDIxZTg5YzA0OTllY2MxNWU4ZTU5NWVmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vRGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hy
b21pdW0uaApAQCAtMzMsNDAgKzMzLDQzIEBACiAKICNpZiBFTkFCTEUoREFUQV9UUkFOU0ZFUl9J
VEVNUykKIAotI2luY2x1ZGUgIkRhdGFUcmFuc2Zlckl0ZW1MaXN0LmgiCisjaW5jbHVkZSAiRGF0
YVRyYW5zZmVySXRlbUNocm9taXVtLmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLWNsYXNzIENsaXBib2FyZDsKLWNsYXNzIENsaXBib2FyZENocm9taXVt
OworY2xhc3MgQ2hyb21pdW1EYXRhT2JqZWN0OwogY2xhc3MgRmlsZTsKK2NsYXNzIEtVUkw7CiBj
bGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogCiB0eXBlZGVmIGludCBFeGNlcHRpb25Db2Rl
OwogCi1jbGFzcyBEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtIDogcHVibGljIERhdGFUcmFu
c2Zlckl0ZW1MaXN0IHsKK2NsYXNzIERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0gOiBwdWJs
aWMgUmVmQ291bnRlZDxEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtPiB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bT4gY3JlYXRl
KFBhc3NSZWZQdHI8Q2xpcGJvYXJkPiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOworICAgIHN0
YXRpYyBQYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0+IGNyZWF0ZSgpOwor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1MaXN0Q2hyb21pdW0+IGNyZWF0
ZUZyb21QYXN0ZWJvYXJkKCk7CiAKLSAgICB2aXJ0dWFsIHNpemVfdCBsZW5ndGgoKSBjb25zdDsK
LSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RGF0YVRyYW5zZmVySXRlbT4gaXRlbSh1bnNpZ25lZCBs
b25nIGluZGV4KTsKKyAgICBzaXplX3QgbGVuZ3RoKCkgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxE
YXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0+IGl0ZW0odW5zaWduZWQgbG9uZyBpbmRleCk7CiAgICAg
Ly8gRklYTUU6IEltcGxlbWVudCBWOERhdGFUcmFuc2Zlckl0ZW1MaXN0OjppbmRleGVkUHJvcGVy
dHlEZWxldGVyIHRvIGdldCB0aGlzIGNhbGxlZC4KLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSXRl
bSh1bnNpZ25lZCBsb25nIGluZGV4LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdmlydHVhbCB2b2lk
IGNsZWFyKCk7Ci0gICAgdmlydHVhbCB2b2lkIGFkZChjb25zdCBTdHJpbmcmIGRhdGEsIGNvbnN0
IFN0cmluZyYgdHlwZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1YWwgdm9pZCBhZGQoUGFz
c1JlZlB0cjxGaWxlPik7CisgICAgdm9pZCBkZWxldGVJdGVtKHVuc2lnbmVkIGxvbmcgaW5kZXgp
OworICAgIHZvaWQgY2xlYXIoKTsKKyAgICB2b2lkIGFkZChjb25zdCBTdHJpbmcmIGRhdGEsIGNv
bnN0IFN0cmluZyYgdHlwZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgYWRkKFBhc3NSZWZQ
dHI8RmlsZT4sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKIAogcHJpdmF0ZToKLSAgICBEYXRh
VHJhbnNmZXJJdGVtTGlzdENocm9taXVtKFBhc3NSZWZQdHI8Q2xpcGJvYXJkPiwgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCopOwotICAgIENsaXBib2FyZENocm9taXVtKiBjbGlwYm9hcmRDaHJvbWl1
bSgpIGNvbnN0OworICAgIGZyaWVuZCBjbGFzcyBDaHJvbWl1bURhdGFPYmplY3Q7CiAKLSAgICBS
ZWZQdHI8Q2xpcGJvYXJkPiBtX293bmVyOwotICAgIC8vIEluZGlyZWN0bHkgb3duZWQgYnkgb3Vy
IHBhcmVudC4KLSAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBtX2NvbnRleHQ7Ci0gICAgLy8g
RklYTUU6IG1faXRlbXMgc2hvdWxkIG5vdCBiZSBtdXRhYmxlLiBUaGlzIHdpbGwgYmUgZml4ZWQg
YnkgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2NTk4Ci0gICAgbXV0
YWJsZSBWZWN0b3I8UmVmUHRyPERhdGFUcmFuc2Zlckl0ZW0+ID4gbV9pdGVtczsKKyAgICBEYXRh
VHJhbnNmZXJJdGVtTGlzdENocm9taXVtKCk7CisKKyAgICAvLyBGSVhNRTogQ29tYmluZSB3aXRo
IENocm9taXVtRGF0YU9iamVjdCB0byBlbGltaW5hdGUgdGhlIG5lZWQgZm9yIHRoZXNlIG1ldGhv
ZHMuCisgICAgYm9vbCBpbnRlcm5hbEFkZFN0cmluZ0l0ZW0oUGFzc1JlZlB0cjxEYXRhVHJhbnNm
ZXJJdGVtQ2hyb21pdW0+KTsKKyAgICB2b2lkIGludGVybmFsQWRkRmlsZUl0ZW0oUGFzc1JlZlB0
cjxEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0+KTsKKworICAgIFZlY3RvcjxSZWZQdHI8RGF0YVRy
YW5zZmVySXRlbUNocm9taXVtPiA+IG1faXRlbUxpc3Q7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EcmFn
RGF0YUNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RyYWdE
YXRhQ2hyb21pdW0uY3BwCmluZGV4IDNkOTRhMTliMjViODY4YjBmMGJlMWUwMmU2ZTA5Njk5MWU0
M2I5NGMuLjAwOWEzYTA4YWNjMGU5MmNiOTcwM2FhZmU4ZmRkOTFiOTA1ZDZkYmEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RyYWdEYXRhQ2hyb21pdW0uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RyYWdEYXRhQ2hyb21pdW0u
Y3BwCkBAIC01NywxMiArNTcsOSBAQCBib29sIERyYWdEYXRhOjpjb250YWluc1VSTChGcmFtZSos
IEZpbGVuYW1lQ29udmVyc2lvblBvbGljeSBmaWxlbmFtZVBvbGljeSkgY29ucwogU3RyaW5nIERy
YWdEYXRhOjphc1VSTChGcmFtZSosIEZpbGVuYW1lQ29udmVyc2lvblBvbGljeSBmaWxlbmFtZVBv
bGljeSwgU3RyaW5nKiB0aXRsZSkgY29uc3QKIHsKICAgICBTdHJpbmcgdXJsOwotICAgIGlmICht
X3BsYXRmb3JtRHJhZ0RhdGEtPnR5cGVzKCkuY29udGFpbnMobWltZVR5cGVUZXh0VVJJTGlzdCkp
IHsKLSAgICAgICAgYm9vbCBpZ25vcmVkU3VjY2VzczsKLSAgICAgICAgdXJsID0gbV9wbGF0Zm9y
bURyYWdEYXRhLT5nZXREYXRhKG1pbWVUeXBlVVJMLCBpZ25vcmVkU3VjY2Vzcyk7Ci0gICAgICAg
IGlmICh0aXRsZSkKLSAgICAgICAgICAgICp0aXRsZSA9IG1fcGxhdGZvcm1EcmFnRGF0YS0+dXJs
VGl0bGUoKTsKLSAgICB9IGVsc2UgaWYgKGZpbGVuYW1lUG9saWN5ID09IENvbnZlcnRGaWxlbmFt
ZXMgJiYgY29udGFpbnNGaWxlcygpKSB7CisgICAgaWYgKG1fcGxhdGZvcm1EcmFnRGF0YS0+dHlw
ZXMoKS5jb250YWlucyhtaW1lVHlwZVRleHRVUklMaXN0KSkKKyAgICAgICAgbV9wbGF0Zm9ybURy
YWdEYXRhLT51cmxBbmRUaXRsZSh1cmwsIHRpdGxlKTsKKyAgICBlbHNlIGlmIChmaWxlbmFtZVBv
bGljeSA9PSBDb252ZXJ0RmlsZW5hbWVzICYmIGNvbnRhaW5zRmlsZXMoKSkgewogICAgICAgICB1
cmwgPSBQbGF0Zm9ybVN1cHBvcnQ6OmZpbGVQYXRoVG9VUkwoUGxhdGZvcm1TdXBwb3J0OjpnZXRB
YnNvbHV0ZVBhdGgobV9wbGF0Zm9ybURyYWdEYXRhLT5maWxlbmFtZXMoKVswXSkpOwogICAgIH0K
ICAgICByZXR1cm4gdXJsOwpAQCAtOTIsOCArODksNyBAQCBib29sIERyYWdEYXRhOjpjb250YWlu
c1BsYWluVGV4dCgpIGNvbnN0CiAKIFN0cmluZyBEcmFnRGF0YTo6YXNQbGFpblRleHQoRnJhbWUq
KSBjb25zdAogewotICAgIGJvb2wgaWdub3JlZFN1Y2Nlc3M7Ci0gICAgcmV0dXJuIG1fcGxhdGZv
cm1EcmFnRGF0YS0+Z2V0RGF0YShtaW1lVHlwZVRleHRQbGFpbiwgaWdub3JlZFN1Y2Nlc3MpOwor
ICAgIHJldHVybiBtX3BsYXRmb3JtRHJhZ0RhdGEtPmdldERhdGEobWltZVR5cGVUZXh0UGxhaW4p
OwogfQogCiBib29sIERyYWdEYXRhOjpjb250YWluc0NvbG9yKCkgY29uc3QKQEAgLTE0Miw5ICsx
MzgsMTAgQEAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBEcmFnRGF0YTo6YXNGcmFnbWVu
dChGcmFtZSogZnJhbWUsIFBhc3NSZWZQdHI8UmFuZ2UKICAgICB9CiAKICAgICBpZiAobV9wbGF0
Zm9ybURyYWdEYXRhLT50eXBlcygpLmNvbnRhaW5zKG1pbWVUeXBlVGV4dEhUTUwpKSB7Ci0gICAg
ICAgIGJvb2wgaWdub3JlZFN1Y2Nlc3M7Ci0gICAgICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50
PiBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChmcmFtZS0+ZG9jdW1lbnQoKSwK
LSAgICAgICAgICAgIG1fcGxhdGZvcm1EcmFnRGF0YS0+Z2V0RGF0YShtaW1lVHlwZVRleHRIVE1M
LCBpZ25vcmVkU3VjY2VzcyksIG1fcGxhdGZvcm1EcmFnRGF0YS0+aHRtbEJhc2VVcmwoKSwgRnJh
Z21lbnRTY3JpcHRpbmdOb3RBbGxvd2VkKTsKKyAgICAgICAgU3RyaW5nIGh0bWw7CisgICAgICAg
IEtVUkwgYmFzZVVSTDsKKyAgICAgICAgbV9wbGF0Zm9ybURyYWdEYXRhLT5odG1sQW5kQmFzZVVS
TChodG1sLCBiYXNlVVJMKTsKKyAgICAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdt
ZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKGZyYW1lLT5kb2N1bWVudCgpLCBodG1sLCBi
YXNlVVJMLCBGcmFnbWVudFNjcmlwdGluZ05vdEFsbG93ZWQpOwogICAgICAgICByZXR1cm4gZnJh
Z21lbnQucmVsZWFzZSgpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViRHJhZ0RhdGEuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
RHJhZ0RhdGEuY3BwCmluZGV4IDMyMmRmYmFlYmE0NWUyZDlmMzg5YzQyMmFjMThiZWYwNTFmODAy
YmIuLmZiZjVkYTdiZDNmNzQ0ZWE4Yjg0OThmMmEwYTgyZDQ1YjRmN2RmYTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRyYWdEYXRhLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEcmFnRGF0YS5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKIAog
I2luY2x1ZGUgIkNocm9taXVtRGF0YU9iamVjdC5oIgogI2luY2x1ZGUgIkNsaXBib2FyZE1pbWVU
eXBlcy5oIgorI2luY2x1ZGUgIkRhdGFUcmFuc2Zlckl0ZW0uaCIKICNpbmNsdWRlICJwbGF0Zm9y
bS9XZWJEYXRhLmgiCiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViU3RyaW5nLmgiCiAjaW5jbHVkZSAi
cGxhdGZvcm0vV2ViVVJMLmgiCkBAIC02OSw1NyArNzAsMjkgQEAgdm9pZCBXZWJEcmFnRGF0YTo6
YXNzaWduKGNvbnN0IFdlYkRyYWdEYXRhJiBvdGhlcikKIFdlYlZlY3RvcjxXZWJEcmFnRGF0YTo6
SXRlbT4gV2ViRHJhZ0RhdGE6Oml0ZW1zKCkgY29uc3QKIHsKICAgICBWZWN0b3I8SXRlbT4gaXRl
bUxpc3Q7Ci0gICAgY29uc3QgSGFzaFNldDxTdHJpbmc+JiB0eXBlcyA9IG1fcHJpdmF0ZS0+dHlw
ZXMoKTsKLSAgICBpZiAodHlwZXMuY29udGFpbnMobWltZVR5cGVUZXh0UGxhaW4pKSB7Ci0gICAg
ICAgIEl0ZW0gaXRlbTsKLSAgICAgICAgaXRlbS5zdG9yYWdlVHlwZSA9IEl0ZW06OlN0b3JhZ2VU
eXBlU3RyaW5nOwotICAgICAgICBpdGVtLnN0cmluZ1R5cGUgPSBTdHJpbmcobWltZVR5cGVUZXh0
UGxhaW4pOwotICAgICAgICBib29sIGlnbm9yZWQ7Ci0gICAgICAgIGl0ZW0uc3RyaW5nRGF0YSA9
IG1fcHJpdmF0ZS0+Z2V0RGF0YShtaW1lVHlwZVRleHRQbGFpbiwgaWdub3JlZCk7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtX3ByaXZhdGUtPml0ZW1zKCktPmxlbmd0aCgpOyArK2kpIHsK
KyAgICAgICAgRGF0YVRyYW5zZmVySXRlbUNocm9taXVtKiBvcmlnaW5hbEl0ZW0gPSBtX3ByaXZh
dGUtPml0ZW1zKCktPml0ZW0oaSkuZ2V0KCk7CisgICAgICAgIC8vIFdlIGRvbid0IGhhbmRsZSBm
aWxlbmFtZXMgaGVyZSwgc2luY2UgdGhleSBhcmUgbmV2ZXIgdXNlZCBmb3IgZHJhZ2dpbmcgb3V0
LgorICAgICAgICBBU1NFUlQoIW9yaWdpbmFsSXRlbS0+aXNGaWxlbmFtZSgpKTsKKyAgICAgICAg
V2ViRHJhZ0RhdGE6Okl0ZW0gaXRlbTsKKyAgICAgICAgaWYgKG9yaWdpbmFsSXRlbS0+a2luZCgp
ID09IERhdGFUcmFuc2Zlckl0ZW06OmtpbmRTdHJpbmcpIHsKKyAgICAgICAgICAgIGl0ZW0uc3Rv
cmFnZVR5cGUgPSBJdGVtOjpTdG9yYWdlVHlwZVN0cmluZzsKKyAgICAgICAgICAgIGl0ZW0uc3Ry
aW5nVHlwZSA9IG9yaWdpbmFsSXRlbS0+dHlwZSgpOworICAgICAgICAgICAgaXRlbS5zdHJpbmdE
YXRhID0gb3JpZ2luYWxJdGVtLT5pbnRlcm5hbEdldEFzU3RyaW5nKCk7CisgICAgICAgIH0gZWxz
ZSBpZiAob3JpZ2luYWxJdGVtLT5raW5kKCkgPT0gRGF0YVRyYW5zZmVySXRlbTo6a2luZEZpbGUp
IHsKKyAgICAgICAgICAgIGlmIChvcmlnaW5hbEl0ZW0tPnNoYXJlZEJ1ZmZlcigpKSB7CisgICAg
ICAgICAgICAgICAgaXRlbS5zdG9yYWdlVHlwZSA9IEl0ZW06OlN0b3JhZ2VUeXBlQmluYXJ5RGF0
YTsKKyAgICAgICAgICAgICAgICBpdGVtLmJpbmFyeURhdGEgPSBvcmlnaW5hbEl0ZW0tPnNoYXJl
ZEJ1ZmZlcigpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgLy8gRklYTUU6
IEN1cnJlbnRseSB3ZSBvbmx5IGhhbmRsZSBpbWFnZSBkcmFnb3V0cyB1c2luZyB0aGUgZGVmYXVs
dCBkcmFnIGhhbmRsaW5nLgorICAgICAgICAgICAgICAgIC8vIElmIHdlIHdhbnQgdG8gcGx1bWIg
RGF0YVRyYW5zZmVySXRlbUxpc3Q6OmFkZChGaWxlKSwgd2UnbGwgbmVlZCB0byBhZGQgbG9naWMu
CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGl0ZW0udGl0bGUgPSBvcmlnaW5hbEl0ZW0t
PnRpdGxlKCk7CisgICAgICAgIGl0ZW0uYmFzZVVSTCA9IG9yaWdpbmFsSXRlbS0+YmFzZVVSTCgp
OwogICAgICAgICBpdGVtTGlzdC5hcHBlbmQoaXRlbSk7CiAgICAgfQotICAgIGlmICh0eXBlcy5j
b250YWlucyhtaW1lVHlwZVRleHRVUklMaXN0KSkgewotICAgICAgICBJdGVtIGl0ZW07Ci0gICAg
ICAgIGl0ZW0uc3RvcmFnZVR5cGUgPSBJdGVtOjpTdG9yYWdlVHlwZVN0cmluZzsKLSAgICAgICAg
aXRlbS5zdHJpbmdUeXBlID0gU3RyaW5nKG1pbWVUeXBlVGV4dFVSSUxpc3QpOwotICAgICAgICBi
b29sIGlnbm9yZWQ7Ci0gICAgICAgIGl0ZW0uc3RyaW5nRGF0YSA9IG1fcHJpdmF0ZS0+Z2V0RGF0
YShtaW1lVHlwZVVSTCwgaWdub3JlZCk7Ci0gICAgICAgIGl0ZW0udGl0bGUgPSBtX3ByaXZhdGUt
PnVybFRpdGxlKCk7Ci0gICAgICAgIGl0ZW1MaXN0LmFwcGVuZChpdGVtKTsKLSAgICB9Ci0gICAg
aWYgKHR5cGVzLmNvbnRhaW5zKG1pbWVUeXBlVGV4dEhUTUwpKSB7Ci0gICAgICAgIEl0ZW0gaXRl
bTsKLSAgICAgICAgaXRlbS5zdG9yYWdlVHlwZSA9IEl0ZW06OlN0b3JhZ2VUeXBlU3RyaW5nOwot
ICAgICAgICBpdGVtLnN0cmluZ1R5cGUgPSBTdHJpbmcobWltZVR5cGVUZXh0SFRNTCk7Ci0gICAg
ICAgIGJvb2wgaWdub3JlZDsKLSAgICAgICAgaXRlbS5zdHJpbmdEYXRhID0gbV9wcml2YXRlLT5n
ZXREYXRhKG1pbWVUeXBlVGV4dEhUTUwsIGlnbm9yZWQpOwotICAgICAgICBpdGVtLmJhc2VVUkwg
PSBtX3ByaXZhdGUtPmh0bWxCYXNlVXJsKCk7Ci0gICAgICAgIGl0ZW1MaXN0LmFwcGVuZChpdGVt
KTsKLSAgICB9Ci0gICAgaWYgKHR5cGVzLmNvbnRhaW5zKG1pbWVUeXBlRG93bmxvYWRVUkwpKSB7
Ci0gICAgICAgIEl0ZW0gaXRlbTsKLSAgICAgICAgaXRlbS5zdG9yYWdlVHlwZSA9IEl0ZW06OlN0
b3JhZ2VUeXBlU3RyaW5nOwotICAgICAgICBpdGVtLnN0cmluZ1R5cGUgPSBTdHJpbmcobWltZVR5
cGVEb3dubG9hZFVSTCk7Ci0gICAgICAgIGJvb2wgaWdub3JlZDsKLSAgICAgICAgaXRlbS5zdHJp
bmdEYXRhID0gbV9wcml2YXRlLT5nZXREYXRhKG1pbWVUeXBlRG93bmxvYWRVUkwsIGlnbm9yZWQp
OwotICAgICAgICBpdGVtTGlzdC5hcHBlbmQoaXRlbSk7Ci0gICAgfQotICAgIGNvbnN0IEhhc2hN
YXA8U3RyaW5nLCBTdHJpbmc+JiBjdXN0b21EYXRhID0gbV9wcml2YXRlLT5jdXN0b21EYXRhKCk7
Ci0gICAgZm9yIChIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBj
dXN0b21EYXRhLmJlZ2luKCk7IGl0ICE9IGN1c3RvbURhdGEuZW5kKCk7ICsraXQpIHsKLSAgICAg
ICAgSXRlbSBpdGVtOwotICAgICAgICBpdGVtLnN0b3JhZ2VUeXBlID0gSXRlbTo6U3RvcmFnZVR5
cGVTdHJpbmc7Ci0gICAgICAgIGl0ZW0uc3RyaW5nVHlwZSA9IGl0LT5maXJzdDsKLSAgICAgICAg
aXRlbS5zdHJpbmdEYXRhID0gaXQtPnNlY29uZDsKLSAgICAgICAgaXRlbUxpc3QuYXBwZW5kKGl0
ZW0pOwotICAgIH0KLSAgICBpZiAobV9wcml2YXRlLT5maWxlQ29udGVudCgpKSB7Ci0gICAgICAg
IEl0ZW0gaXRlbTsKLSAgICAgICAgaXRlbS5zdG9yYWdlVHlwZSA9IEl0ZW06OlN0b3JhZ2VUeXBl
QmluYXJ5RGF0YTsKLSAgICAgICAgaXRlbS5iaW5hcnlEYXRhID0gbV9wcml2YXRlLT5maWxlQ29u
dGVudCgpOwotICAgICAgICBpdGVtLnRpdGxlID0gbV9wcml2YXRlLT5maWxlQ29udGVudEZpbGVu
YW1lKCk7Ci0gICAgICAgIGl0ZW1MaXN0LmFwcGVuZChpdGVtKTsKLSAgICB9Ci0gICAgLy8gV2Ug
ZG9uJ3QgaGFuZGxlIGZpbGVuYW1lcyBoZXJlLCBzaW5jZSB0aGV5IGFyZSBuZXZlciB1c2VkIGZv
ciBkcmFnZ2luZyBvdXQuCiAgICAgcmV0dXJuIGl0ZW1MaXN0OwogfQogCkBAIC0xMzUsMTEgKzEw
OCwxMiBAQCB2b2lkIFdlYkRyYWdEYXRhOjphZGRJdGVtKGNvbnN0IEl0ZW0mIGl0ZW0pCiAgICAg
ZW5zdXJlTXV0YWJsZSgpOwogICAgIHN3aXRjaCAoaXRlbS5zdG9yYWdlVHlwZSkgewogICAgIGNh
c2UgSXRlbTo6U3RvcmFnZVR5cGVTdHJpbmc6Ci0gICAgICAgIG1fcHJpdmF0ZS0+c2V0RGF0YShp
dGVtLnN0cmluZ1R5cGUsIGl0ZW0uc3RyaW5nRGF0YSk7CiAgICAgICAgIGlmIChTdHJpbmcoaXRl
bS5zdHJpbmdUeXBlKSA9PSBtaW1lVHlwZVRleHRVUklMaXN0KQotICAgICAgICAgICAgbV9wcml2
YXRlLT5zZXRVcmxUaXRsZShpdGVtLnRpdGxlKTsKKyAgICAgICAgICAgIG1fcHJpdmF0ZS0+c2V0
VVJMQW5kVGl0bGUoaXRlbS5zdHJpbmdEYXRhLCBpdGVtLnRpdGxlKTsKICAgICAgICAgZWxzZSBp
ZiAoU3RyaW5nKGl0ZW0uc3RyaW5nVHlwZSkgPT0gbWltZVR5cGVUZXh0SFRNTCkKLSAgICAgICAg
ICAgIG1fcHJpdmF0ZS0+c2V0SHRtbEJhc2VVcmwoaXRlbS5iYXNlVVJMKTsKKyAgICAgICAgICAg
IG1fcHJpdmF0ZS0+c2V0SFRNTEFuZEJhc2VVUkwoaXRlbS5zdHJpbmdEYXRhLCBpdGVtLmJhc2VV
UkwpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX3ByaXZhdGUtPnNldERhdGEoaXRlbS5z
dHJpbmdUeXBlLCBpdGVtLnN0cmluZ0RhdGEpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBJ
dGVtOjpTdG9yYWdlVHlwZUZpbGVuYW1lOgogICAgICAgICBtX3ByaXZhdGUtPmFkZEZpbGVuYW1l
KGl0ZW0uZmlsZW5hbWVEYXRhKTsKQEAgLTE2OCw3ICsxNDIsNiBAQCBXZWJEcmFnRGF0YTo6b3Bl
cmF0b3IgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdD4oKSBjb25z
dAogCiB2b2lkIFdlYkRyYWdEYXRhOjphc3NpZ24oV2ViRHJhZ0RhdGFQcml2YXRlKiBwKQogewot
ICAgIEFTU0VSVCghcCB8fCBwLT5zdG9yYWdlTW9kZSgpID09IENocm9taXVtRGF0YU9iamVjdDo6
QnVmZmVyZWQpOwogICAgIC8vIHAgaXMgYWxyZWFkeSByZWYnZCBmb3IgdXMgYnkgdGhlIGNhbGxl
cgogICAgIGlmIChtX3ByaXZhdGUpCiAgICAgICAgIG1fcHJpdmF0ZS0+ZGVyZWYoKTsKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRl
eCAzY2VlYTczY2YyYjA2NjU2OGQ4ZDk0NmZmMDNjMzFhODc0YWU3YTU4Li5iZjAxNzIzYzc0YmM1
NDkxNTM5YzI2MTVlZDk2NjRmZjIwMDgwMjEzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTIt
MDMtMTUgIERhbmllbCBDaGVuZyAgPGRjaGVuZ0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2No
cm9taXVtXSBSZWZhY3RvciBDbGlwYm9hcmRDaHJvbWl1bSBhbmQgRGF0YVRyYW5zZmVySXRlbUxp
c3QvRGF0YVRyYW5zZmVySXRlbSB0byBzdXBwb3J0IEhUTUwgc3BlYworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY1OTgKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZhc3QvZXZlbnRzL2NsaXBib2FyZC1k
YXRhVHJhbnNmZXJJdGVtTGlzdC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3Qv
ZXZlbnRzL2NsaXBib2FyZC1kYXRhVHJhbnNmZXJJdGVtTGlzdC5odG1sOiBBZGRlZC4KKyAgICAg
ICAgKiBmYXN0L2V2ZW50cy9kcmFnLWRhdGFUcmFuc2Zlckl0ZW1MaXN0LWV4cGVjdGVkLnR4dDog
QWRkZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvZHJhZy1kYXRhVHJhbnNmZXJJdGVtTGlzdC5o
dG1sOiBBZGRlZC4KKwogMjAxMi0wMy0xNCAgQ2hyaXMgRmxlaXphY2ggIDxjZmxlaXphY2hAYXBw
bGUuY29tPgogCiAgICAgICAgIEFYRGVzY3JpcHRpb24gZm9yIEFSSUEgcm9sZSBjb250ZW50aW5m
byBpbmNvcnJlY3QKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2NsaXBib2Fy
ZC1kYXRhVHJhbnNmZXJJdGVtTGlzdC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2V2
ZW50cy9jbGlwYm9hcmQtZGF0YVRyYW5zZmVySXRlbUxpc3QtZXhwZWN0ZWQudHh0Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjY4ZTcwNzZiMjk5YmRhNTU3YjYxOWU0NzQ4ZDZkOTczN2VhNzU4MzcKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9jbGlwYm9hcmQtZGF0YVRyYW5zZmVySXRl
bUxpc3QtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjMgQEAKK1RvIG1hbnVhbGx5IHRlc3QsIHBy
ZXNzIHlvdXIgYnJvd3NlciBzaG9ydGN1dCBmb3IgY29weSBhbmQgdGhlbiBmb3IgcGFzdGUuIFNl
dmVyYWwgbGluZXMgdGhhdCBzYXkgJ1BBU1MnIHNob3VsZCBhcHBlYXIgYmVsb3cuCisKK0NvcHkg
aGFuZGxlcjogCitQYXN0ZSBoYW5kbGVyOiAKK1J1bm5pbmcgdGVzdCB3aXRoIExlZ2FjeSBjb3B5
IGhhbmRsZXIgYW5kIExlZ2FjeSBwYXN0ZSBoYW5kbGVyCitQQVNTOiAyID09PSAyCitQQVNTOiBz
YW1wbGUgPT09IHNhbXBsZQorUEFTUzogaGVsbG8gd29ybGQgPT09IGhlbGxvIHdvcmxkCitSdW5u
aW5nIHRlc3Qgd2l0aCBMZWdhY3kgY29weSBoYW5kbGVyIGFuZCBEYXRhVHJhbnNmZXJJdGVtTGlz
dCBwYXN0ZSBoYW5kbGVyCitQQVNTOiAyID09PSAyCitQQVNTOiBbeyJraW5kIjoic3RyaW5nIiwi
dHlwZSI6ImN1c3RvbS1kYXRhIn0seyJraW5kIjoic3RyaW5nIiwidHlwZSI6InRleHQvcGxhaW4i
fV0gPT09IFt7ImtpbmQiOiJzdHJpbmciLCJ0eXBlIjoiY3VzdG9tLWRhdGEifSx7ImtpbmQiOiJz
dHJpbmciLCJ0eXBlIjoidGV4dC9wbGFpbiJ9XQorUEFTUzogaGVsbG8gd29ybGQgPT09IGhlbGxv
IHdvcmxkCitQQVNTOiBzYW1wbGUgPT09IHNhbXBsZQorUnVubmluZyB0ZXN0IHdpdGggRGF0YVRy
YW5zZmVySXRlbUxpc3QgY29weSBoYW5kbGVyIGFuZCBMZWdhY3kgcGFzdGUgaGFuZGxlcgorUEFT
UzogMiA9PT0gMgorUEFTUzogc2FtcGxlID09PSBzYW1wbGUKK1BBU1M6IGhlbGxvIHdvcmxkID09
PSBoZWxsbyB3b3JsZAorUnVubmluZyB0ZXN0IHdpdGggRGF0YVRyYW5zZmVySXRlbUxpc3QgY29w
eSBoYW5kbGVyIGFuZCBEYXRhVHJhbnNmZXJJdGVtTGlzdCBwYXN0ZSBoYW5kbGVyCitQQVNTOiAy
ID09PSAyCitQQVNTOiBbeyJraW5kIjoic3RyaW5nIiwidHlwZSI6ImN1c3RvbS1kYXRhIn0seyJr
aW5kIjoic3RyaW5nIiwidHlwZSI6InRleHQvcGxhaW4ifV0gPT09IFt7ImtpbmQiOiJzdHJpbmci
LCJ0eXBlIjoiY3VzdG9tLWRhdGEifSx7ImtpbmQiOiJzdHJpbmciLCJ0eXBlIjoidGV4dC9wbGFp
biJ9XQorUEFTUzogaGVsbG8gd29ybGQgPT09IGhlbGxvIHdvcmxkCitQQVNTOiBzYW1wbGUgPT09
IHNhbXBsZQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9jbGlwYm9hcmQt
ZGF0YVRyYW5zZmVySXRlbUxpc3QuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2NsaXBi
b2FyZC1kYXRhVHJhbnNmZXJJdGVtTGlzdC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFiZDA5MzIwMDdmMWQ3
N2I3ZmZiZTc3YzZmMGQ3YWY4MWQ3ODk2MTMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9mYXN0L2V2ZW50cy9jbGlwYm9hcmQtZGF0YVRyYW5zZmVySXRlbUxpc3QuaHRtbApAQCAtMCww
ICsxLDE0NyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4KK2Z1
bmN0aW9uIGFzc2VydEVxKGxlZnQsIHJpZ2h0KQoreworICAgIGlmIChsZWZ0ID09PSByaWdodCkK
KyAgICAgICAgbG9nKCdQQVNTOiAnICsgbGVmdCArICIgPT09ICIgKyByaWdodCk7CisgICAgZWxz
ZQorICAgICAgICBsb2coJ0ZBSUw6ICcgKyBsZWZ0ICsgIihvZiB0eXBlICIgKyAodHlwZW9mIGxl
ZnQpICsgIikgIT09ICIgKyByaWdodCArICIob2YgdHlwZSAiICsgKHR5cGVvZiByaWdodCkgKyAi
KSIpOworfQorZnVuY3Rpb24gbG9nKHN0cikKK3sKKyAgICB2YXIgcmVzdWx0ID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ3Jlc3VsdCcpOworICAgIHJlc3VsdC5hcHBlbmRDaGlsZChkb2N1bWVu
dC5jcmVhdGVUZXh0Tm9kZShzdHIpKTsKKyAgICByZXN1bHQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgnYnInKSk7Cit9CisKK2Z1bmN0aW9uIGxlZ2FjeUNvcHlTdGFydChkYXRh
VHJhbnNmZXIpCit7CisgICAgZGF0YVRyYW5zZmVyLnNldERhdGEoJ3RleHQnLCAnc2FtcGxlJyk7
CisgICAgZGF0YVRyYW5zZmVyLnNldERhdGEoJ2N1c3RvbS1kYXRhJywgJ2hlbGxvIHdvcmxkJyk7
Cit9CisKK2Z1bmN0aW9uIGl0ZW1MaXN0Q29weVN0YXJ0KGRhdGFUcmFuc2ZlcikKK3sKKyAgICBk
YXRhVHJhbnNmZXIuaXRlbXMuYWRkKCdzYW1wbGUnLCAndGV4dC9wbGFpbicpOworICAgIGRhdGFU
cmFuc2Zlci5pdGVtcy5hZGQoJ2hlbGxvIHdvcmxkJywgJ2N1c3RvbS1kYXRhJyk7Cit9CisKK2Z1
bmN0aW9uIGNvcHkoZXZlbnQpCit7CisgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKKyAgICB2
YXIgY29weU1ldGhvZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb3B5TWV0aG9kJyk7Cisg
ICAgaWYgKGNvcHlNZXRob2Quc2VsZWN0ZWRJbmRleCA9PSAwKQorICAgICAgICBsZWdhY3lDb3B5
U3RhcnQoZXZlbnQuY2xpcGJvYXJkRGF0YSk7CisgICAgZWxzZSBpZiAoY29weU1ldGhvZC5zZWxl
Y3RlZEluZGV4ID09IDEpCisgICAgICAgIGl0ZW1MaXN0Q29weVN0YXJ0KGV2ZW50LmNsaXBib2Fy
ZERhdGEpOworfQorCitmdW5jdGlvbiBsZWdhY3lQYXN0ZShkYXRhVHJhbnNmZXIpCit7CisgICAg
YXNzZXJ0RXEoMiwgZGF0YVRyYW5zZmVyLnR5cGVzLmxlbmd0aCk7CisgICAgaWYgKGRhdGFUcmFu
c2Zlci50eXBlcy5pbmRleE9mKCd0ZXh0L3BsYWluJykgPCAwKQorICAgICAgICBsb2coJ3R5cGVz
IGFycmF5IGRpZCBub3QgY29udGFpbiAidGV4dCInKTsKKyAgICBpZiAoZGF0YVRyYW5zZmVyLnR5
cGVzLmluZGV4T2YoJ2N1c3RvbS1kYXRhJykgPCAwKQorICAgICAgICBsb2coJ3R5cGVzIGFycmF5
IGRpZCBub3QgY29udGFpbiAiY3VzdG9tLWRhdGEiJyk7CisgICAgYXNzZXJ0RXEoJ3NhbXBsZScs
IGRhdGFUcmFuc2Zlci5nZXREYXRhKCd0ZXh0JykpOworICAgIGFzc2VydEVxKCdoZWxsbyB3b3Js
ZCcsIGRhdGFUcmFuc2Zlci5nZXREYXRhKCdjdXN0b20tZGF0YScpKTsKKyAgICBydW5OZXh0KCk7
Cit9CisKK3ZhciBvdXRzdGFuZGluZ1JlcXVlc3RzOworZnVuY3Rpb24gaXRlbUxpc3RQYXN0ZShk
YXRhVHJhbnNmZXIpCit7CisgICAgb3V0c3RhbmRpbmdSZXF1ZXN0cyA9IDA7CisgICAgYXNzZXJ0
RXEoMiwgZGF0YVRyYW5zZmVyLml0ZW1zLmxlbmd0aCk7CisgICAgdmFyIHR5cGVzID0gW107Cisg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkYXRhVHJhbnNmZXIuaXRlbXMubGVuZ3RoOyArK2kpIHsK
KyAgICAgICAgdHlwZXMucHVzaCh7a2luZDogZGF0YVRyYW5zZmVyLml0ZW1zW2ldLmtpbmQsIHR5
cGU6IGRhdGFUcmFuc2Zlci5pdGVtc1tpXS50eXBlfSk7CisgICAgfQorICAgIHR5cGVzLnNvcnQo
ZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGEudHlwZS5sb2NhbGVDb21wYXJlKGIudHlwZSk7IH0p
OworICAgIHZhciBleHBlY3RlZFR5cGVzID0gWworICAgICAgICB7IGtpbmQ6ICdzdHJpbmcnLCB0
eXBlOiAnY3VzdG9tLWRhdGEnfSwKKyAgICAgICAgeyBraW5kOiAnc3RyaW5nJywgdHlwZTogJ3Rl
eHQvcGxhaW4nfSwKKyAgICBdOworICAgIGFzc2VydEVxKEpTT04uc3RyaW5naWZ5KGV4cGVjdGVk
VHlwZXMpLCBKU09OLnN0cmluZ2lmeSh0eXBlcykpOworICAgIHZhciBleHBlY3RlZFJlc3VsdHMg
PSB7CisgICAgICAgICdjdXN0b20tZGF0YSc6ICdoZWxsbyB3b3JsZCcsCisgICAgICAgICd0ZXh0
L3BsYWluJzogJ3NhbXBsZScsCisgICAgfQorICAgIGZ1bmN0aW9uIG1ha2VDbG9zdXJlKGV4cGVj
dGVkRGF0YSkKKyAgICB7CisgICAgICAgICsrb3V0c3RhbmRpbmdSZXF1ZXN0czsKKyAgICAgICAg
cmV0dXJuIGZ1bmN0aW9uIChkYXRhKSB7CisgICAgICAgICAgICBhc3NlcnRFcShleHBlY3RlZERh
dGEsIGRhdGEpOworICAgICAgICAgICAgaWYgKC0tb3V0c3RhbmRpbmdSZXF1ZXN0cyA9PSAwKQor
ICAgICAgICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KHJ1bk5leHQsIDApOworICAgICAgICB9
CisgICAgfQorICAgIC8vIFdlIHVzZSB0aGlzIGZ1bmt5IGxvb3AgdG8gbWFrZSBzdXJlIHdlIGFs
d2F5cyBwcmludCBvdXQgcmVzdWx0cyBpbiB0aGUgc2FtZSBvcmRlci4KKyAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHR5cGVzLmxlbmd0aDsgKytpKSB7CisgICAgICAgIGZvciAodmFyIGogPSAwOyBq
IDwgZGF0YVRyYW5zZmVyLml0ZW1zLmxlbmd0aDsgKytqKSB7CisgICAgICAgICAgICBpZiAodHlw
ZXNbaV0udHlwZSA9PSBkYXRhVHJhbnNmZXIuaXRlbXNbal0udHlwZSkgeworICAgICAgICAgICAg
ICAgIGRhdGFUcmFuc2Zlci5pdGVtc1tqXS5nZXRBc1N0cmluZyhtYWtlQ2xvc3VyZShleHBlY3Rl
ZFJlc3VsdHNbdHlwZXNbaV0udHlwZV0pKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworZnVuY3Rpb24gcGFzdGUoZXZlbnQpCit7
CisgICAgdmFyIHBhc3RlTWV0aG9kPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGFzdGVNZXRo
b2QnKTsKKyAgICBpZiAocGFzdGVNZXRob2Quc2VsZWN0ZWRJbmRleCA9PSAwKQorICAgICAgICBs
ZWdhY3lQYXN0ZShldmVudC5jbGlwYm9hcmREYXRhKTsKKyAgICBlbHNlIGlmIChwYXN0ZU1ldGhv
ZC5zZWxlY3RlZEluZGV4ID09IDEpCisgICAgICAgIGl0ZW1MaXN0UGFzdGUoZXZlbnQuY2xpcGJv
YXJkRGF0YSk7Cit9CisKK2Z1bmN0aW9uIHJ1blRlc3QoY29weU1ldGhvZEluZGV4LCBwYXN0ZU1l
dGhvZEluZGV4KQoreworICAgIHZhciBjb3B5TWV0aG9kID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoJ2NvcHlNZXRob2QnKTsKKyAgICB2YXIgcGFzdGVNZXRob2QgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgncGFzdGVNZXRob2QnKTsKKyAgICBjb3B5TWV0aG9kLnNlbGVjdGVkSW5kZXggPSBj
b3B5TWV0aG9kSW5kZXg7CisgICAgcGFzdGVNZXRob2Quc2VsZWN0ZWRJbmRleCA9IHBhc3RlTWV0
aG9kSW5kZXg7CisgICAgbG9nKCdSdW5uaW5nIHRlc3Qgd2l0aCAnICsgY29weU1ldGhvZC52YWx1
ZSArICcgY29weSBoYW5kbGVyIGFuZCAnICsgcGFzdGVNZXRob2QudmFsdWUgKyAnIHBhc3RlIGhh
bmRsZXInKTsKKworICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5Jyk7CisgICAgZG9jdW1l
bnQuZXhlY0NvbW1hbmQoJ3Bhc3RlJyk7Cit9CisKK3ZhciB0ZXN0Q2FzZXMgPSBbCisgICAgWzAs
IDBdLAorICAgIFswLCAxXSwKKyAgICBbMSwgMF0sCisgICAgWzEsIDFdLAorXTsKK2Z1bmN0aW9u
IHJ1bk5leHQoKQoreworICAgIGlmICghd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAg
ICAgICByZXR1cm47CisgICAgdmFyIHRlc3RDYXNlID0gdGVzdENhc2VzLnNoaWZ0KCk7CisgICAg
aWYgKHRlc3RDYXNlKQorICAgICAgICBydW5UZXN0LmFwcGx5KG51bGwsIHRlc3RDYXNlKTsKKyAg
ICBlbHNlCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKwor
d2luZG93Lm9ubG9hZCA9IGZ1bmN0aW9uKCkKK3sKKyAgICBpZiAoIXdpbmRvdy5sYXlvdXRUZXN0
Q29udHJvbGxlcikKKyAgICAgICAgcmV0dXJuOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1
bXBBc1RleHQoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisK
KyAgICBydW5OZXh0KCk7Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9uY29weT0iY29w
eShldmVudCkiIG9ucGFzdGU9InBhc3RlKGV2ZW50KSI+Cis8cD5UbyBtYW51YWxseSB0ZXN0LCBw
cmVzcyB5b3VyIGJyb3dzZXIgc2hvcnRjdXQgZm9yIGNvcHkgYW5kIHRoZW4gZm9yIHBhc3RlLiAg
U2V2ZXJhbCBsaW5lcyB0aGF0IHNheSAnUEFTUycgc2hvdWxkIGFwcGVhciBiZWxvdy4KKzxkaXY+
Q29weSBoYW5kbGVyOiA8c2VsZWN0IGlkPSJjb3B5TWV0aG9kIj48b3B0aW9uPkxlZ2FjeTwvb3B0
aW9uPjxvcHRpb24+RGF0YVRyYW5zZmVySXRlbUxpc3Q8L29wdGlvbj48L3NlbGVjdD48L2Rpdj4K
KzxkaXY+UGFzdGUgaGFuZGxlcjogPHNlbGVjdCBpZD0icGFzdGVNZXRob2QiPjxvcHRpb24+TGVn
YWN5PC9vcHRpb24+PG9wdGlvbj5EYXRhVHJhbnNmZXJJdGVtTGlzdDwvb3B0aW9uPjwvc2VsZWN0
PjwvZGl2PgorPGRpdiBpZD0icmVzdWx0Ij48L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2RyYWctZGF0YVRyYW5zZmVySXRlbUxpc3Qt
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvZHJhZy1kYXRhVHJhbnNmZXJJ
dGVtTGlzdC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmI0ZmZlZWRjNWNkNzhhODI4MGQ2NGQ2
ZjhmNTFlYTc0MTgzZjA4YgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZl
bnRzL2RyYWctZGF0YVRyYW5zZmVySXRlbUxpc3QtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjUg
QEAKK1RvIG1hbnVhbGx5IHRlc3QsIGRyYWcgJ0RyYWcgTWUnIHRvICdEcm9wIEhlcmUnIGFuZCBk
cm9wLiBTZXZlcmFsIGxpbmVzIHRoYXQgc2F5ICdQQVNTJyBzaG91bGQgYXBwZWFyIGJlbG93Lgor
CitEcmFnIE1lCitEcm9wIEhlcmUKK0RyYWcgaGFuZGxlcjogCitEcm9wIGhhbmRsZXI6IAorUnVu
bmluZyB0ZXN0IHdpdGggTGVnYWN5IGRyYWcgaGFuZGxlciBhbmQgTGVnYWN5IGRyb3AgaGFuZGxl
cgorUEFTUzogMiA9PT0gMgorUEFTUzogc2FtcGxlID09PSBzYW1wbGUKK1BBU1M6IGhlbGxvIHdv
cmxkID09PSBoZWxsbyB3b3JsZAorUnVubmluZyB0ZXN0IHdpdGggTGVnYWN5IGRyYWcgaGFuZGxl
ciBhbmQgRGF0YVRyYW5zZmVySXRlbUxpc3QgZHJvcCBoYW5kbGVyCitQQVNTOiAyID09PSAyCitQ
QVNTOiBbeyJraW5kIjoic3RyaW5nIiwidHlwZSI6ImN1c3RvbS1kYXRhIn0seyJraW5kIjoic3Ry
aW5nIiwidHlwZSI6InRleHQvcGxhaW4ifV0gPT09IFt7ImtpbmQiOiJzdHJpbmciLCJ0eXBlIjoi
Y3VzdG9tLWRhdGEifSx7ImtpbmQiOiJzdHJpbmciLCJ0eXBlIjoidGV4dC9wbGFpbiJ9XQorUEFT
UzogaGVsbG8gd29ybGQgPT09IGhlbGxvIHdvcmxkCitQQVNTOiBzYW1wbGUgPT09IHNhbXBsZQor
UnVubmluZyB0ZXN0IHdpdGggRGF0YVRyYW5zZmVySXRlbUxpc3QgZHJhZyBoYW5kbGVyIGFuZCBM
ZWdhY3kgZHJvcCBoYW5kbGVyCitQQVNTOiAyID09PSAyCitQQVNTOiBzYW1wbGUgPT09IHNhbXBs
ZQorUEFTUzogaGVsbG8gd29ybGQgPT09IGhlbGxvIHdvcmxkCitSdW5uaW5nIHRlc3Qgd2l0aCBE
YXRhVHJhbnNmZXJJdGVtTGlzdCBkcmFnIGhhbmRsZXIgYW5kIERhdGFUcmFuc2Zlckl0ZW1MaXN0
IGRyb3AgaGFuZGxlcgorUEFTUzogMiA9PT0gMgorUEFTUzogW3sia2luZCI6InN0cmluZyIsInR5
cGUiOiJjdXN0b20tZGF0YSJ9LHsia2luZCI6InN0cmluZyIsInR5cGUiOiJ0ZXh0L3BsYWluIn1d
ID09PSBbeyJraW5kIjoic3RyaW5nIiwidHlwZSI6ImN1c3RvbS1kYXRhIn0seyJraW5kIjoic3Ry
aW5nIiwidHlwZSI6InRleHQvcGxhaW4ifV0KK1BBU1M6IGhlbGxvIHdvcmxkID09PSBoZWxsbyB3
b3JsZAorUEFTUzogc2FtcGxlID09PSBzYW1wbGUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
ZmFzdC9ldmVudHMvZHJhZy1kYXRhVHJhbnNmZXJJdGVtTGlzdC5odG1sIGIvTGF5b3V0VGVzdHMv
ZmFzdC9ldmVudHMvZHJhZy1kYXRhVHJhbnNmZXJJdGVtTGlzdC5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRl
NjJkNzRiOGI5ZWRjZDViZmU4YjU2NWMwYmRkYmZhZmRkYjMzZTQKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9kcmFnLWRhdGFUcmFuc2Zlckl0ZW1MaXN0Lmh0bWwK
QEAgLTAsMCArMSwxNzggQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzdHls
ZT4KKyNkcmFnIHsKKyAgICBib3JkZXI6IDFweCBzb2xpZCBibGFjazsKKyAgICBoZWlnaHQ6IDIw
MHB4OworICAgIHdpZHRoOiAyMDBweDsKK30KKyNkcm9wIHsKKyAgICBib3JkZXI6IDFweCBzb2xp
ZCBibGFjazsKKyAgICBoZWlnaHQ6IDIwMHB4OworICAgIHdpZHRoOiAyMDBweDsKK30KKzwvc3R5
bGU+Cis8c2NyaXB0PgorZnVuY3Rpb24gYXNzZXJ0RXEobGVmdCwgcmlnaHQpCit7CisgICAgaWYg
KGxlZnQgPT09IHJpZ2h0KQorICAgICAgICBsb2coJ1BBU1M6ICcgKyBsZWZ0ICsgIiA9PT0gIiAr
IHJpZ2h0KTsKKyAgICBlbHNlCisgICAgICAgIGxvZygnRkFJTDogJyArIGxlZnQgKyAiKG9mIHR5
cGUgIiArICh0eXBlb2YgbGVmdCkgKyAiKSAhPT0gIiArIHJpZ2h0ICsgIihvZiB0eXBlICIgKyAo
dHlwZW9mIHJpZ2h0KSArICIpIik7Cit9CitmdW5jdGlvbiBsb2coc3RyKQoreworICAgIHZhciBy
ZXN1bHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVzdWx0Jyk7CisgICAgcmVzdWx0LmFw
cGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHN0cikpOworICAgIHJlc3VsdC5hcHBl
bmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdicicpKTsKK30KKworZnVuY3Rpb24gbGVn
YWN5RHJhZ1N0YXJ0KGRhdGFUcmFuc2ZlcikKK3sKKyAgICBkYXRhVHJhbnNmZXIuc2V0RGF0YSgn
dGV4dCcsICdzYW1wbGUnKTsKKyAgICBkYXRhVHJhbnNmZXIuc2V0RGF0YSgnY3VzdG9tLWRhdGEn
LCAnaGVsbG8gd29ybGQnKTsKK30KKworZnVuY3Rpb24gaXRlbUxpc3REcmFnU3RhcnQoZGF0YVRy
YW5zZmVyKQoreworICAgIGRhdGFUcmFuc2Zlci5pdGVtcy5hZGQoJ3NhbXBsZScsICd0ZXh0L3Bs
YWluJyk7CisgICAgZGF0YVRyYW5zZmVyLml0ZW1zLmFkZCgnaGVsbG8gd29ybGQnLCAnY3VzdG9t
LWRhdGEnKTsKK30KKworZnVuY3Rpb24gZHJhZ3N0YXJ0KGV2ZW50KQoreworICAgIHZhciBkcmFn
TWV0aG9kID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RyYWdNZXRob2QnKTsKKyAgICBpZiAo
ZHJhZ01ldGhvZC5zZWxlY3RlZEluZGV4ID09IDApCisgICAgICAgIGxlZ2FjeURyYWdTdGFydChl
dmVudC5kYXRhVHJhbnNmZXIpOworICAgIGVsc2UgaWYgKGRyYWdNZXRob2Quc2VsZWN0ZWRJbmRl
eCA9PSAxKQorICAgICAgICBpdGVtTGlzdERyYWdTdGFydChldmVudC5kYXRhVHJhbnNmZXIpOwor
fQorCitmdW5jdGlvbiBkcmFnZW50ZXIoZXZlbnQpCit7CisgICAgZXZlbnQucHJldmVudERlZmF1
bHQoKTsKK30KKworZnVuY3Rpb24gZHJhZ292ZXIoZXZlbnQpCit7CisgICAgZXZlbnQucHJldmVu
dERlZmF1bHQoKTsKK30KKworZnVuY3Rpb24gbGVnYWN5RHJvcChkYXRhVHJhbnNmZXIpCit7Cisg
ICAgYXNzZXJ0RXEoMiwgZGF0YVRyYW5zZmVyLnR5cGVzLmxlbmd0aCk7CisgICAgaWYgKGRhdGFU
cmFuc2Zlci50eXBlcy5pbmRleE9mKCd0ZXh0L3BsYWluJykgPCAwKQorICAgICAgICBsb2coJ3R5
cGVzIGFycmF5IGRpZCBub3QgY29udGFpbiAidGV4dCInKTsKKyAgICBpZiAoZGF0YVRyYW5zZmVy
LnR5cGVzLmluZGV4T2YoJ2N1c3RvbS1kYXRhJykgPCAwKQorICAgICAgICBsb2coJ3R5cGVzIGFy
cmF5IGRpZCBub3QgY29udGFpbiAiY3VzdG9tLWRhdGEiJyk7CisgICAgYXNzZXJ0RXEoJ3NhbXBs
ZScsIGRhdGFUcmFuc2Zlci5nZXREYXRhKCd0ZXh0JykpOworICAgIGFzc2VydEVxKCdoZWxsbyB3
b3JsZCcsIGRhdGFUcmFuc2Zlci5nZXREYXRhKCdjdXN0b20tZGF0YScpKTsKKyAgICBydW5OZXh0
KCk7Cit9CisKK3ZhciBvdXRzdGFuZGluZ1JlcXVlc3RzOworZnVuY3Rpb24gaXRlbUxpc3REcm9w
KGRhdGFUcmFuc2ZlcikKK3sKKyAgICBvdXRzdGFuZGluZ1JlcXVlc3RzID0gMDsKKyAgICBhc3Nl
cnRFcSgyLCBkYXRhVHJhbnNmZXIuaXRlbXMubGVuZ3RoKTsKKyAgICB2YXIgdHlwZXMgPSBbXTsK
KyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGFUcmFuc2Zlci5pdGVtcy5sZW5ndGg7ICsraSkg
eworICAgICAgICB0eXBlcy5wdXNoKHtraW5kOiBkYXRhVHJhbnNmZXIuaXRlbXNbaV0ua2luZCwg
dHlwZTogZGF0YVRyYW5zZmVyLml0ZW1zW2ldLnR5cGV9KTsKKyAgICB9CisgICAgdHlwZXMuc29y
dChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYS50eXBlLmxvY2FsZUNvbXBhcmUoYi50eXBlKTsg
fSk7CisgICAgdmFyIGV4cGVjdGVkVHlwZXMgPSBbCisgICAgICAgIHsga2luZDogJ3N0cmluZycs
IHR5cGU6ICdjdXN0b20tZGF0YSd9LAorICAgICAgICB7IGtpbmQ6ICdzdHJpbmcnLCB0eXBlOiAn
dGV4dC9wbGFpbid9LAorICAgIF07CisgICAgYXNzZXJ0RXEoSlNPTi5zdHJpbmdpZnkoZXhwZWN0
ZWRUeXBlcyksIEpTT04uc3RyaW5naWZ5KHR5cGVzKSk7CisgICAgdmFyIGV4cGVjdGVkUmVzdWx0
cyA9IHsKKyAgICAgICAgJ2N1c3RvbS1kYXRhJzogJ2hlbGxvIHdvcmxkJywKKyAgICAgICAgJ3Rl
eHQvcGxhaW4nOiAnc2FtcGxlJywKKyAgICB9CisgICAgZnVuY3Rpb24gbWFrZUNsb3N1cmUoZXhw
ZWN0ZWREYXRhKQorICAgIHsKKyAgICAgICAgKytvdXRzdGFuZGluZ1JlcXVlc3RzOworICAgICAg
ICByZXR1cm4gZnVuY3Rpb24gKGRhdGEpIHsKKyAgICAgICAgICAgIGFzc2VydEVxKGV4cGVjdGVk
RGF0YSwgZGF0YSk7CisgICAgICAgICAgICBpZiAoLS1vdXRzdGFuZGluZ1JlcXVlc3RzID09IDAp
CisgICAgICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQocnVuTmV4dCwgMCk7CisgICAgICAg
IH0KKyAgICB9CisgICAgLy8gV2UgdXNlIHRoaXMgZnVua3kgbG9vcCB0byBtYWtlIHN1cmUgd2Ug
YWx3YXlzIHByaW50IG91dCByZXN1bHRzIGluIHRoZSBzYW1lIG9yZGVyLgorICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgdHlwZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgZm9yICh2YXIgaiA9IDA7
IGogPCBkYXRhVHJhbnNmZXIuaXRlbXMubGVuZ3RoOyArK2opIHsKKyAgICAgICAgICAgIGlmICh0
eXBlc1tpXS50eXBlID09IGRhdGFUcmFuc2Zlci5pdGVtc1tqXS50eXBlKSB7CisgICAgICAgICAg
ICAgICAgZGF0YVRyYW5zZmVyLml0ZW1zW2pdLmdldEFzU3RyaW5nKG1ha2VDbG9zdXJlKGV4cGVj
dGVkUmVzdWx0c1t0eXBlc1tpXS50eXBlXSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCitmdW5jdGlvbiBkcm9wKGV2ZW50KQor
eworICAgIHZhciBkcm9wTWV0aG9kID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Ryb3BNZXRo
b2QnKTsKKyAgICBpZiAoZHJvcE1ldGhvZC5zZWxlY3RlZEluZGV4ID09IDApCisgICAgICAgIGxl
Z2FjeURyb3AoZXZlbnQuZGF0YVRyYW5zZmVyKTsKKyAgICBlbHNlIGlmIChkcm9wTWV0aG9kLnNl
bGVjdGVkSW5kZXggPT0gMSkKKyAgICAgICAgaXRlbUxpc3REcm9wKGV2ZW50LmRhdGFUcmFuc2Zl
cik7Cit9CisKK2Z1bmN0aW9uIHJ1blRlc3QoZHJhZ01ldGhvZEluZGV4LCBkcm9wTWV0aG9kSW5k
ZXgpCit7CisgICAgdmFyIGRyYWdNZXRob2QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHJh
Z01ldGhvZCcpOworICAgIHZhciBkcm9wTWV0aG9kID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
J2Ryb3BNZXRob2QnKTsKKyAgICBkcmFnTWV0aG9kLnNlbGVjdGVkSW5kZXggPSBkcmFnTWV0aG9k
SW5kZXg7CisgICAgZHJvcE1ldGhvZC5zZWxlY3RlZEluZGV4ID0gZHJvcE1ldGhvZEluZGV4Owor
ICAgIGxvZygnUnVubmluZyB0ZXN0IHdpdGggJyArIGRyYWdNZXRob2QudmFsdWUgKyAnIGRyYWcg
aGFuZGxlciBhbmQgJyArIGRyb3BNZXRob2QudmFsdWUgKyAnIGRyb3AgaGFuZGxlcicpOworCisg
ICAgdmFyIGRyYWdFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RyYWcnKTsKKyAg
ICBldmVudFNlbmRlci5tb3VzZU1vdmVUbyhkcmFnRWxlbWVudC5vZmZzZXRMZWZ0ICsgZHJhZ0Vs
ZW1lbnQub2Zmc2V0V2lkdGggLyAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyYWdF
bGVtZW50Lm9mZnNldFRvcCArIGRyYWdFbGVtZW50Lm9mZnNldEhlaWdodCAvIDIpOworICAgIGV2
ZW50U2VuZGVyLm1vdXNlRG93bigpOworICAgIGV2ZW50U2VuZGVyLmxlYXBGb3J3YXJkKDEwMCk7
CisgICAgdmFyIGRyb3BFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Ryb3AnKTsK
KyAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbyhkcm9wRWxlbWVudC5vZmZzZXRMZWZ0ICsgZHJv
cEVsZW1lbnQub2Zmc2V0V2lkdGggLyAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRy
b3BFbGVtZW50Lm9mZnNldFRvcCArIGRyb3BFbGVtZW50Lm9mZnNldEhlaWdodCAvIDIpOworICAg
IGV2ZW50U2VuZGVyLm1vdXNlVXAoKTsKK30KKwordmFyIHRlc3RDYXNlcyA9IFsKKyAgICBbMCwg
MF0sCisgICAgWzAsIDFdLAorICAgIFsxLCAwXSwKKyAgICBbMSwgMV0sCitdOworZnVuY3Rpb24g
cnVuTmV4dCgpCit7CisgICAgaWYgKCF3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAg
ICAgIHJldHVybjsKKyAgICB2YXIgdGVzdENhc2UgPSB0ZXN0Q2FzZXMuc2hpZnQoKTsKKyAgICBp
ZiAodGVzdENhc2UpCisgICAgICAgIHJ1blRlc3QuYXBwbHkobnVsbCwgdGVzdENhc2UpOworICAg
IGVsc2UKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCit3
aW5kb3cub25sb2FkID0gZnVuY3Rpb24oKQoreworICAgIGlmICghd2luZG93LmxheW91dFRlc3RD
b250cm9sbGVyKQorICAgICAgICByZXR1cm47CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVt
cEFzVGV4dCgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKwor
ICAgIHJ1bk5leHQoKTsKK30KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cD5UbyBtYW51
YWxseSB0ZXN0LCBkcmFnICdEcmFnIE1lJyB0byAnRHJvcCBIZXJlJyBhbmQgZHJvcC4gIFNldmVy
YWwgbGluZXMgdGhhdCBzYXkgJ1BBU1MnIHNob3VsZCBhcHBlYXIgYmVsb3cuCis8ZGl2IGRyYWdn
YWJsZT0idHJ1ZSIgaWQ9ImRyYWciIG9uZHJhZ3N0YXJ0PSJkcmFnc3RhcnQoZXZlbnQpIj5EcmFn
IE1lPC9kaXY+Cis8ZGl2IGlkPSJkcm9wIiBvbmRyYWdlbnRlcj0iZHJhZ2VudGVyKGV2ZW50KSIg
b25kcmFnb3Zlcj0iZHJhZ292ZXIoZXZlbnQpIiBvbmRyb3A9ImRyb3AoZXZlbnQpIj5Ecm9wIEhl
cmU8L2Rpdj4KKzwvZGl2PgorPGRpdj5EcmFnIGhhbmRsZXI6IDxzZWxlY3QgaWQ9ImRyYWdNZXRo
b2QiPjxvcHRpb24+TGVnYWN5PC9vcHRpb24+PG9wdGlvbj5EYXRhVHJhbnNmZXJJdGVtTGlzdDwv
b3B0aW9uPjwvc2VsZWN0PjwvZGl2PgorPGRpdj5Ecm9wIGhhbmRsZXI6IDxzZWxlY3QgaWQ9ImRy
b3BNZXRob2QiPjxvcHRpb24+TGVnYWN5PC9vcHRpb24+PG9wdGlvbj5EYXRhVHJhbnNmZXJJdGVt
TGlzdDwvb3B0aW9uPjwvc2VsZWN0PjwvZGl2PgorPGRpdiBpZD0icmVzdWx0Ij48L2Rpdj4KKzwv
Ym9keT4KKzwvaHRtbD4K
</data>
<flag name="review"
          id="135690"
          type_id="1"
          status="+"
          setter="tony"
    />
          </attachment>
      

    </bug>

</bugzilla>