<?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>44992</bug_id>
          
          <creation_ts>2010-08-31 14:48:00 -0700</creation_ts>
          <short_desc>[chromium] Prepare Clipboard/DragData for transition to new drag-and-drop interface.</short_desc>
          <delta_ts>2010-10-11 18:53:12 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>44727</blocked>
    
    <blocked>44917</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Daniel Cheng">dcheng</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dglazkov</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>272395</commentid>
    <comment_count>0</comment_count>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2010-08-31 14:48:00 -0700</bug_when>
    <thetext>This change targets dragging files over a web drop target. Starting a drag in WebKit is not affected by this patch (that will be a separate patch, once the appropriate Chromium-side changes for it land).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272401</commentid>
    <comment_count>1</comment_count>
      <attachid>66111</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2010-08-31 14:51:04 -0700</bug_when>
    <thetext>Created attachment 66111
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272402</commentid>
    <comment_count>2</comment_count>
      <attachid>66112</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2010-08-31 14:51:39 -0700</bug_when>
    <thetext>Created attachment 66112
Patch

Attach the right patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272406</commentid>
    <comment_count>3</comment_count>
      <attachid>66115</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2010-08-31 14:54:03 -0700</bug_when>
    <thetext>Created attachment 66115
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272412</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-31 14:57:03 -0700</bug_when>
    <thetext>Attachment 66115 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/platform/chromium/DragDataChromium.cpp:71:  Use 0 instead of NULL.  [readability/null] [4]
Total errors found: 1 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272418</commentid>
    <comment_count>5</comment_count>
      <attachid>66120</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2010-08-31 15:02:07 -0700</bug_when>
    <thetext>Created attachment 66120
Patch

Futzed around to fix the ChangeLog diff.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272421</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-31 15:04:12 -0700</bug_when>
    <thetext>Attachment 66120 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/platform/chromium/DragDataChromium.cpp:71:  Use 0 instead of NULL.  [readability/null] [4]
Total errors found: 1 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272502</commentid>
    <comment_count>7</comment_count>
      <attachid>66140</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2010-08-31 16:50:45 -0700</bug_when>
    <thetext>Created attachment 66140
Patch

Forgot to include WebView.h in this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272505</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-31 16:52:34 -0700</bug_when>
    <thetext>Attachment 66140 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/platform/chromium/DragDataChromium.cpp:71:  Use 0 instead of NULL.  [readability/null] [4]
Total errors found: 1 in 9 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272575</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-31 19:15:53 -0700</bug_when>
    <thetext>Attachment 66140 did not build on chromium:
Build output: http://queues.webkit.org/results/3936003</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273006</commentid>
    <comment_count>10</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-09-01 14:12:28 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Attachment 66140 [details] did not build on chromium:
&gt; Build output: http://queues.webkit.org/results/3936003

Can you reupload with a style fix?  Now that issue 44917 is fixed, this should compile on cr-linux too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273016</commentid>
    <comment_count>11</comment_count>
      <attachid>66140</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2010-09-01 14:22:45 -0700</bug_when>
    <thetext>Comment on attachment 66140
Patch

(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; Attachment 66140 [details] [details] did not build on chromium:
&gt; &gt; Build output: http://queues.webkit.org/results/3936003
&gt; 
&gt; Can you reupload with a style fix?  Now that issue 44917 is fixed, this should compile on cr-linux too.

The style error seems to be a false positive (it&apos;s warning on the keyword &apos;NULL&apos; in a comment).

I also made a small fix in DragDataRef, but I&apos;m currently trying to figure out the regression on my local box--after I split up the drag and drop patches, it&apos;s not working anymore using the &quot;new&quot; way. I want to verify it&apos;s not a problem in the WebKit code before I put the patch up for review again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273047</commentid>
    <comment_count>12</comment_count>
      <attachid>66282</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2010-09-01 15:06:49 -0700</bug_when>
    <thetext>Created attachment 66282
Patch

Fixes incomplete initialization in DragDataRef and minor fixes to ClipboardChromium to make it work as intended.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273054</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-01 15:10:58 -0700</bug_when>
    <thetext>Attachment 66282 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/platform/chromium/DragDataChromium.cpp:71:  Use 0 instead of NULL.  [readability/null] [4]
WebCore/platform/chromium/ClipboardChromium.cpp:97:  One or more unexpected \r (^M) found; better to use only a \n  [whitespace/carriage_return] [1]
Suppressing further [whitespace/carriage_return] reports for this file.
Total errors found: 8 in 9 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273058</commentid>
    <comment_count>14</comment_count>
      <attachid>66287</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2010-09-01 15:16:50 -0700</bug_when>
    <thetext>Created attachment 66287
Patch

Fix Windows style line endings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273059</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-01 15:17:54 -0700</bug_when>
    <thetext>Attachment 66287 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/platform/chromium/DragDataChromium.cpp:71:  Use 0 instead of NULL.  [readability/null] [4]
Total errors found: 1 in 9 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273615</commentid>
    <comment_count>16</comment_count>
      <attachid>66287</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-09-02 15:27:48 -0700</bug_when>
    <thetext>Comment on attachment 66287
Patch

&gt; +        // |title| can be NULL
&gt; +        if (title)

I realize this is a comment and just moving code, but this should still be 0 instead of NULL.

&gt; diff --git a/WebCore/platform/chromium/DragDataRef.h b/WebCore/platform/chromium/DragDataRef.h
&gt; -    typedef ChromiumDataObject* DragDataRef;
&gt; +struct DragDataRef {
&gt; +    // FIXME: These are deliberately non-explicit for the moment. Once Chromium
&gt; +    // is switched over to the new way of handling drags, revert this change.
&gt; +    DragDataRef(ChromiumDataObject* data) : oldWay(data), newWay(0) {}
&gt; +    DragDataRef(ReadableDataObject* data) : oldWay(0), newWay(data) {}
&gt; +    ChromiumDataObject* oldWay;
&gt; +    ReadableDataObject* newWay;
&gt; +};

Hmm, I think we can do better here.  Here&apos;s an idea:
CDO has a member variable for an RDO (maybe an OwnPtr).  We expose an API on CDO that matches the API on RDO and convert DragDataChromium.cpp to use this API.  If we&apos;re doing things the &quot;old way&quot;, it just uses CDO data.  If we&apos;re doing it the new way, it delegates to RDO.  This would just put the ugliness in CDO rather than DragDataChromium.cpp, but would allow us to migrate DragDataChromium.cpp to the new calling conventions.  Later, after we&apos;ve fully switched to the &quot;new way&quot;, we would remove CDO and put RDO in its place.

Does that sound possible?

&gt; diff --git a/WebKit/chromium/src/WebViewImpl.cpp b/WebKit/chromium/src/WebViewImpl.cpp
&gt;  void WebViewImpl::dragTargetDragLeave()
&gt;  {
&gt; +    // FIXME: This is temporary while until Chromium side is transitioned to use
&gt; +    // the new dragging interface.
&gt; +    if (m_currentDragData.get()) {
&gt; +        DragData dragData(
&gt; +            m_currentDragData.get(),
&gt; +            IntPoint(),
&gt; +            IntPoint(),
&gt; +            static_cast&lt;DragOperation&gt;(m_operationsAllowed));
&gt; +
&gt; +        m_dragTargetDispatch = true;
&gt; +        m_page-&gt;dragController()-&gt;dragExited(&amp;dragData);
&gt; +        m_dragTargetDispatch = false;
&gt; +    } else if (m_currentDragDataNew.get()) {
&gt; +        DragData dragData(
&gt; +            m_currentDragDataNew.get(),
&gt; +            IntPoint(),
&gt; +            IntPoint(),
&gt; +            static_cast&lt;DragOperation&gt;(m_operationsAllowed));

Is it possible to do something like:
DragData dragData(m_currentDragData.get() ? m_currentDragData.get() : m_currentDragDataNew.get(), ...)?

If so, you don&apos;t need the huge if statements and duplicate code.  Same for the other methods below.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273619</commentid>
    <comment_count>17</comment_count>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2010-09-02 15:34:13 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (From update of attachment 66287 [details])
&gt; &gt; +        // |title| can be NULL
&gt; &gt; +        if (title)
&gt; 
&gt; I realize this is a comment and just moving code, but this should still be 0 instead of NULL.
&gt; 
&gt; &gt; diff --git a/WebCore/platform/chromium/DragDataRef.h b/WebCore/platform/chromium/DragDataRef.h
&gt; &gt; -    typedef ChromiumDataObject* DragDataRef;
&gt; &gt; +struct DragDataRef {
&gt; &gt; +    // FIXME: These are deliberately non-explicit for the moment. Once Chromium
&gt; &gt; +    // is switched over to the new way of handling drags, revert this change.
&gt; &gt; +    DragDataRef(ChromiumDataObject* data) : oldWay(data), newWay(0) {}
&gt; &gt; +    DragDataRef(ReadableDataObject* data) : oldWay(0), newWay(data) {}
&gt; &gt; +    ChromiumDataObject* oldWay;
&gt; &gt; +    ReadableDataObject* newWay;
&gt; &gt; +};
&gt; 
&gt; Hmm, I think we can do better here.  Here&apos;s an idea:
&gt; CDO has a member variable for an RDO (maybe an OwnPtr).  We expose an API on CDO that matches the API on RDO and convert DragDataChromium.cpp to use this API.  If we&apos;re doing things the &quot;old way&quot;, it just uses CDO data.  If we&apos;re doing it the new way, it delegates to RDO.  This would just put the ugliness in CDO rather than DragDataChromium.cpp, but would allow us to migrate DragDataChromium.cpp to the new calling conventions.  Later, after we&apos;ve fully switched to the &quot;new way&quot;, we would remove CDO and put RDO in its place.
&gt; 
&gt; Does that sound possible?

This would be very difficult, since CDO is really just a struct and consumers just access the members they want directly.

&gt; 
&gt; &gt; diff --git a/WebKit/chromium/src/WebViewImpl.cpp b/WebKit/chromium/src/WebViewImpl.cpp
&gt; &gt;  void WebViewImpl::dragTargetDragLeave()
&gt; &gt;  {
&gt; &gt; +    // FIXME: This is temporary while until Chromium side is transitioned to use
&gt; &gt; +    // the new dragging interface.
&gt; &gt; +    if (m_currentDragData.get()) {
&gt; &gt; +        DragData dragData(
&gt; &gt; +            m_currentDragData.get(),
&gt; &gt; +            IntPoint(),
&gt; &gt; +            IntPoint(),
&gt; &gt; +            static_cast&lt;DragOperation&gt;(m_operationsAllowed));
&gt; &gt; +
&gt; &gt; +        m_dragTargetDispatch = true;
&gt; &gt; +        m_page-&gt;dragController()-&gt;dragExited(&amp;dragData);
&gt; &gt; +        m_dragTargetDispatch = false;
&gt; &gt; +    } else if (m_currentDragDataNew.get()) {
&gt; &gt; +        DragData dragData(
&gt; &gt; +            m_currentDragDataNew.get(),
&gt; &gt; +            IntPoint(),
&gt; &gt; +            IntPoint(),
&gt; &gt; +            static_cast&lt;DragOperation&gt;(m_operationsAllowed));
&gt; 
&gt; Is it possible to do something like:
&gt; DragData dragData(m_currentDragData.get() ? m_currentDragData.get() : m_currentDragDataNew.get(), ...)?
&gt; 
&gt; If so, you don&apos;t need the huge if statements and duplicate code.  Same for the other methods below.

A simple if won&apos;t work, since the types of the two branches are not compatible. I could call new DragData and use OwnPtr? I&apos;m not sure if that&apos;s really better though. Let me know what you think before I upload a new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276148</commentid>
    <comment_count>18</comment_count>
      <attachid>66955</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2010-09-08 16:05:57 -0700</bug_when>
    <thetext>Created attachment 66955
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276201</commentid>
    <comment_count>19</comment_count>
      <attachid>66955</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-09-08 17:25:36 -0700</bug_when>
    <thetext>Comment on attachment 66955
Patch

&gt; diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
&gt; +        In order to avoid breaking Chromium, we have the renderer side implement
&gt; +        both the old and new dragging interface and gate the behavior based off
&gt; +        of which DataObject pointer is set.

It&apos;s now the same interface defined by CDO, right?

&gt; diff --git a/WebCore/platform/chromium/ChromiumDataObject.h b/WebCore/platform/chromium/ChromiumDataObject.h
&gt;  
&gt; -        ChromiumDataObject() {}
&gt; +        ChromiumDataObject(bool isForDragging);

explicit and this should take an enum that you define rather than a bool.

&gt; diff --git a/WebCore/platform/chromium/ChromiumDataObject.cpp b/WebCore/platform/chromium/ChromiumDataObject.cpp
&gt; +// FIXME: Utilities temporarily copied from ClipboardChromium.
&gt; +enum ClipboardDataType {
&gt; +    ClipboardDataTypeNone,
&gt; +
&gt; +    ClipboardDataTypeURL,
&gt; +    ClipboardDataTypeURIList,
&gt; +    ClipboardDataTypeDownloadURL,
&gt; +    ClipboardDataTypePlainText,
&gt; +    ClipboardDataTypeHTML,
&gt; +
&gt; +    ClipboardDataTypeOther,
&gt; +};

Can we put this enum in ClipboardChromium.h?

&gt; +// Per RFC 2483, the line separator for &quot;text/...&quot; MIME types is CR-LF.
&gt; +static char const* const textMIMETypeLineSeparator = &quot;\r\n&quot;;

Is char const* const the same as const char* const?  This could also be a static member of ClipboardChromium.  Maybe do this in a separate change?

&gt; +static ClipboardDataType clipboardTypeFromMIMEType(const String&amp; type)
&gt; +{
&gt; +    String cleanType = type.stripWhiteSpace().lower();
&gt; +    if (cleanType.isEmpty())
&gt; +        return ClipboardDataTypeNone;
&gt; +
&gt; +    // Includes two special cases for IE compatibility.
&gt; +    if (cleanType == &quot;text&quot; || cleanType == &quot;text/plain&quot; || cleanType.startsWith(&quot;text/plain;&quot;))
&gt; +        return ClipboardDataTypePlainText;
&gt; +    if (cleanType == &quot;url&quot;)
&gt; +        return ClipboardDataTypeURL;
&gt; +    if (cleanType == &quot;text/uri-list&quot;)
&gt; +        return ClipboardDataTypeURIList;
&gt; +    if (cleanType == &quot;downloadurl&quot;)
&gt; +        return ClipboardDataTypeDownloadURL;
&gt; +    if (cleanType == &quot;text/html&quot;)
&gt; +        return ClipboardDataTypeHTML;
&gt; +
&gt; +    return ClipboardDataTypeOther;
&gt; +}

Should this be a static method in ClipboardChromium?

&gt; +
&gt; +
&gt; +String ChromiumDataObject::getURL(String* title) const

Nit: too many blank lines.

&gt; +
&gt; +
&gt; +ChromiumDataObject::ChromiumDataObject(bool isForDragging)
&gt; +    : m_isForDragging(isForDragging)

Nit: extra blank line.

&gt; diff --git a/WebCore/platform/chromium/ChromiumDataObject.h b/WebCore/platform/chromium/ChromiumDataObject.h
&gt; +        ~ChromiumDataObject() {}

Nit: Body of the method should be in the .cpp file.  See related work by the faster build task force.

&gt; +        // FIXME: Temporary virtual interface for ReadableDataObject
&gt; +        // compatibility.
&gt; +        virtual bool hasData() const;

The other option is for CDO to have a pointer to RDO and if the pointer is not-null, delegate the call to RDO, but this is OK too.

&gt; -        String urlTitle;
&gt; +        String m_urlTitle;

I think it would be nice to complete turning this into a real class and add getters and setters for all the member variables.  If you do, then I would probably prefer one patch that is just turning CDO into a class (no support for using RDO) and a separate patch for making RDO usage possible.

&gt; +        friend class ClipboardChromium;
&gt; +        friend class ReadableDataObject;

Do we need these friend declarations if we add the appropriate getters and setters?

&gt; +        KURL m_url;
&gt; +        Vector&lt;String&gt; m_uriList;
&gt; +
&gt;      };

Nit: remove blank line.

&gt; diff --git a/WebKit/chromium/src/WebViewImpl.cpp b/WebKit/chromium/src/WebViewImpl.cpp
&gt;      DragData dragData(
&gt; -        m_currentDragData.get(),
&gt; +        m_currentDragData.get() ? m_currentDragData.get() : m_currentDragDataNew.get(),

I&apos;m glad the ternary operator worked.


My overall recommendation is to split this like so:
- A patch that turns CDO into a class (adds m_ to the member variables, makes them private, adds getters and setters, update all the callers).
- A patch that adds the virtual methods to CDO and moves the code from ClipboardChromium to CDO.
- A patch that adds dragTargetDragEnterNew and the necessary code changes for dragTargetDragEnterNew to work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291313</commentid>
    <comment_count>20</comment_count>
      <attachid>70167</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2010-10-07 16:24:00 -0700</bug_when>
    <thetext>Created attachment 70167
Hypothetical patch

Just so I can look at this in a differ that doesn&apos;t make my head hurt.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291315</commentid>
    <comment_count>21</comment_count>
      <attachid>70167</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2010-10-07 16:24:25 -0700</bug_when>
    <thetext>Comment on attachment 70167
Hypothetical patch

Sorry, didn&apos;t mean to flag it for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291340</commentid>
    <comment_count>22</comment_count>
      <attachid>70176</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2010-10-07 17:17:08 -0700</bug_when>
    <thetext>Created attachment 70176
Almost the real patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291962</commentid>
    <comment_count>23</comment_count>
      <attachid>70318</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2010-10-08 16:52:55 -0700</bug_when>
    <thetext>Created attachment 70318
Patch

This converts CDO into a wrapper for 3 potential backing classes -- CDOLegacy, RDO, or WDO. RDO/WDO are the only classes that will be needed in the new model; since we haven&apos;t transitioned fully yet, we keep all 3 around.

I&apos;ve submitted try jobs for these as well--the test runs I did yesterday succeeded, but I made a couple followup changes today and I&apos;d like to verify that it still works.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292023</commentid>
    <comment_count>24</comment_count>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2010-10-08 19:27:22 -0700</bug_when>
    <thetext>I&apos;m not sure why, but the try job keeps timing out when it&apos;s syncing/applying the patch. Any thoughts?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292560</commentid>
    <comment_count>25</comment_count>
      <attachid>70318</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-10-11 11:07:24 -0700</bug_when>
    <thetext>Comment on attachment 70318
Patch

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

&gt; WebCore/platform/chromium/ClipboardChromium.cpp:93
&gt; +        policy == ClipboardWritable
&gt; +        ? ChromiumDataObject::createWritable(clipboardType)
&gt; +        : ChromiumDataObject::createReadable(clipboardType);

In RDO.cpp, you put the ternary operator at the end of lines.  Can you be consistent?  I&apos;m not sure there&apos;s an actual style rule. In practice, most people just put the whole expression on a single line (which also seems fine to me).

&gt; WebCore/platform/chromium/ReadableDataObject.cpp:82
&gt; +                Pasteboard::generalPasteboard()-&gt;isSelectionMode() ?
&gt; +                PasteboardPrivate::SelectionBuffer :
&gt; +                PasteboardPrivate::StandardBuffer;

This is where you use the opposite style.

&gt; WebKit/chromium/public/WebView.h:228
&gt; +    virtual WebDragOperation dragTargetDragEnter2(
&gt; +        int identity, const WebPoint&amp; clientPoint, const WebPoint&amp; screenPoint,
&gt; +        WebDragOperationsMask operationsAllowed) = 0;

I have a slight preference to using dragTargetDragEnterNew rather than 2, but either is ok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292578</commentid>
    <comment_count>26</comment_count>
      <attachid>70457</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2010-10-11 11:28:23 -0700</bug_when>
    <thetext>Created attachment 70457
Patch

(In reply to comment #25)
&gt; (From update of attachment 70318 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=70318&amp;action=review
&gt; 
&gt; &gt; WebCore/platform/chromium/ClipboardChromium.cpp:93
&gt; &gt; +        policy == ClipboardWritable
&gt; &gt; +        ? ChromiumDataObject::createWritable(clipboardType)
&gt; &gt; +        : ChromiumDataObject::createReadable(clipboardType);
&gt; 
&gt; In RDO.cpp, you put the ternary operator at the end of lines.  Can you be consistent?  I&apos;m not sure there&apos;s an actual style rule. In practice, most people just put the whole expression on a single line (which also seems fine to me).

Changed to use RDO style, since that was taken from existing code.

&gt; 
&gt; &gt; WebCore/platform/chromium/ReadableDataObject.cpp:82
&gt; &gt; +                Pasteboard::generalPasteboard()-&gt;isSelectionMode() ?
&gt; &gt; +                PasteboardPrivate::SelectionBuffer :
&gt; &gt; +                PasteboardPrivate::StandardBuffer;
&gt; 
&gt; This is where you use the opposite style.
&gt; 
&gt; &gt; WebKit/chromium/public/WebView.h:228
&gt; &gt; +    virtual WebDragOperation dragTargetDragEnter2(
&gt; &gt; +        int identity, const WebPoint&amp; clientPoint, const WebPoint&amp; screenPoint,
&gt; &gt; +        WebDragOperationsMask operationsAllowed) = 0;
&gt; 
&gt; I have a slight preference to using dragTargetDragEnterNew rather than 2, but either is ok.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292582</commentid>
    <comment_count>27</comment_count>
      <attachid>70458</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2010-10-11 11:29:36 -0700</bug_when>
    <thetext>Created attachment 70458
Patch

Fix ChangeLog entry.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292598</commentid>
    <comment_count>28</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-10-11 12:03:12 -0700</bug_when>
    <thetext>LGTM.  I&apos;ll let the ews bots cycle before r+ &amp; cq+&apos;ing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292823</commentid>
    <comment_count>29</comment_count>
      <attachid>70458</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-10-11 18:53:04 -0700</bug_when>
    <thetext>Comment on attachment 70458
Patch

Clearing flags on attachment: 70458

Committed r69551: &lt;http://trac.webkit.org/changeset/69551&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292824</commentid>
    <comment_count>30</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-10-11 18:53:12 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66111</attachid>
            <date>2010-08-31 14:51:04 -0700</date>
            <delta_ts>2010-08-31 14:51:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>foo.patch</filename>
            <type>text/plain</type>
            <size>27058</size>
            <attacher name="Daniel Cheng">dcheng</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZjFiODAwNi4uOTc2ZDQwNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1OCBAQAorMjAxMC0wOC0zMSAgRGFuaWVsIENoZW5n
ICA8ZGNoZW5nQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBbY2hyb21pdW1dIEltcGxlbWVudCBSZWFkYWJsZS9Xcml0YWJsZSB2
ZXJzaW9ucyBvZiBDaHJvbWl1bURhdGFPYmplY3ROZXcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0OTE3CisKKyAgICAgICAgVGhpcyBpcyB0aGUgc2Vj
b25kIG9mIHNldmVyYWwgcGF0Y2hlcyB0byB1cGRhdGUgQ2hyb21pdW0gdG8gc3VwcG9ydAorICAg
ICAgICBhcmJpdHJhcnkgZGF0YSB0eXBlcyBpbiBldmVudC5kYXRhVHJhbnNmZXIuCisgICAgICAg
IFJlYWRhYmxlRGF0YU9iamVjdCBzaW1wbHkgY2FsbHMgdGhyb3VnaCB0byBzZXZlcmFsIENocm9t
aXVtIElQQ3MgdG8KKyAgICAgICAgcmV0cmlldmUgdGhlIGFwcHJvcHJpYXRlIGRhdGEuCisgICAg
ICAgIFdyaXRhYmxlRGF0YU9iamVjdCBvc3RlbnNpYmx5IGJ1ZmZlcnMgYXJiaXRyYXJ5IGRhdGEg
aW50ZXJuYWxseSB1bnRpbAorICAgICAgICBhIGNhbGwgaXMgbWFkZSB0byBmbHVzaCB0aGUgZGF0
YSB0byB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgYWJzdHJhY3Rpb247CisgICAgICAgIHVuZm9ydHVu
YXRlbHksIGEgc3BlY2lhbCBleGNlcHRpb24gaXMgY3VycmVudGx5IG1hZGUgZm9yIHBhc3RlYm9h
cmQKKyAgICAgICAgaGFuZGxpbmcgZHVlIHRvIGhvdyBpdCBpcyBoYW5kbGVkIGluIFdlYkNvcmUu
CisKKyAgICAgICAgTm8gbmV3IHRlc3RzLgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAg
ICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdE5ldy5oOiBSZW1vdmVk
LgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmNwcDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRNaW1lVHlwZXMuaDogQWRkZWQuCisg
ICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vUmVhZGFibGVEYXRhT2JqZWN0LmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpjbGlwYm9hcmRCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6
UmVhZGFibGVEYXRhT2JqZWN0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVhZGFibGVE
YXRhT2JqZWN0OjpSZWFkYWJsZURhdGFPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVhZGFi
bGVEYXRhT2JqZWN0OjpoYXNEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWRhYmxlRGF0YU9i
amVjdDo6dHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVhZGFibGVEYXRhT2JqZWN0OjpnZXRE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWRhYmxlRGF0YU9iamVjdDo6Z2V0VVJMKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlYWRhYmxlRGF0YU9iamVjdDo6Z2V0SFRNTCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZWFkYWJsZURhdGFPYmplY3Q6Omhhc0ZpbGVuYW1lcyk6CisgICAgICAgIChXZWJD
b3JlOjpSZWFkYWJsZURhdGFPYmplY3Q6OmZpbGVuYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZWFkYWJsZURhdGFPYmplY3Q6OmVuc3VyZVR5cGVDYWNoZUluaXRpYWxpemVkKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9jaHJvbWl1bS9SZWFkYWJsZURhdGFPYmplY3QuaDogQWRkZWQuCisgICAgICAg
ICogcGxhdGZvcm0vY2hyb21pdW0vV3JpdGFibGVEYXRhT2JqZWN0LmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpXcml0YWJsZURhdGFPYmplY3Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpXcml0YWJsZURhdGFPYmplY3Q6OldyaXRhYmxlRGF0YU9iamVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpXcml0YWJsZURhdGFPYmplY3Q6OmNsZWFyRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpXcml0YWJsZURhdGFPYmplY3Q6OmNsZWFyQWxsRXhjZXB0RmlsZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6V3JpdGFibGVEYXRhT2JqZWN0OjpjbGVhckFsbCk6CisgICAgICAgIChXZWJDb3JlOjpX
cml0YWJsZURhdGFPYmplY3Q6OnNldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6V3JpdGFibGVE
YXRhT2JqZWN0OjpzZXRVUkwpOgorICAgICAgICAoV2ViQ29yZTo6V3JpdGFibGVEYXRhT2JqZWN0
OjpzZXRIVE1MKToKKyAgICAgICAgKFdlYkNvcmU6OldyaXRhYmxlRGF0YU9iamVjdDo6ZGF0YU1h
cCk6CisgICAgICAgIChXZWJDb3JlOjpXcml0YWJsZURhdGFPYmplY3Q6OnVybFRpdGxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OldyaXRhYmxlRGF0YU9iamVjdDo6aHRtbEJhc2VVUkwpOgorICAgICAg
ICAoV2ViQ29yZTo6V3JpdGFibGVEYXRhT2JqZWN0OjpmaWxlRXh0ZW5zaW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OldyaXRhYmxlRGF0YU9iamVjdDo6ZmlsZUNvbnRlbnRGaWxlbmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpXcml0YWJsZURhdGFPYmplY3Q6OmZpbGVDb250ZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OldyaXRhYmxlRGF0YU9iamVjdDo6c2V0RmlsZUV4dGVuc2lvbik6CisgICAgICAg
IChXZWJDb3JlOjpXcml0YWJsZURhdGFPYmplY3Q6OnNldEZpbGVDb250ZW50RmlsZW5hbWUpOgor
ICAgICAgICAoV2ViQ29yZTo6V3JpdGFibGVEYXRhT2JqZWN0OjpzZXRGaWxlQ29udGVudCk6Cisg
ICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vV3JpdGFibGVEYXRhT2JqZWN0Lmg6IEFkZGVkLgor
CiAyMDEwLTA4LTMwICBEYW5pZWwgQ2hlbmcgIDxkY2hlbmdAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJD
b3JlLmd5cGkgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA1NTgzMDk4Li5lNjMzOWFjIDEw
MDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQpAQCAtMjE0MCwxMiArMjE0MCwxMiBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVt
L0Nocm9taXVtQnJpZGdlLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL0Nocm9t
aXVtRGF0YU9iamVjdC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL0Nocm9t
aXVtRGF0YU9iamVjdC5oJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1
bURhdGFPYmplY3ROZXcuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJv
YXJkQ2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9h
cmRDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRD
aHJvbWl1bUxpbnV4LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJv
YXJkQ2hyb21pdW1NYWMuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9DbGlw
Ym9hcmRDaHJvbWl1bVdpbi5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL0Ns
aXBib2FyZE1pbWVUeXBlcy5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9DbGlw
Ym9hcmRVdGlsaXRpZXNDaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9t
aXVtL0NsaXBib2FyZFV0aWxpdGllc0Nocm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2Nocm9taXVtL0NvbnRleHRNZW51Q2hyb21pdW0uY3BwJywKQEAgLTIxODMsNiArMjE4Myw4IEBA
CiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vUG9wdXBNZW51Q2hyb21pdW0uY3BwJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9Qb3B1cE1lbnVDaHJvbWl1bS5oJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9Qb3B1cE1lbnVQcml2YXRlLmgnLAorICAgICAg
ICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1JlYWRhYmxlRGF0YU9iamVjdC5jcHAnLAorICAgICAg
ICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1JlYWRhYmxlRGF0YU9iamVjdC5oJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9TU0xLZXlHZW5lcmF0b3JDaHJvbWl1bS5jcHAnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW0uY3BwJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtLmgn
LApAQCAtMjIwMyw2ICsyMjA1LDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9X
aWRnZXRDaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1dpbmRv
d3NWZXJzaW9uLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vV2luZG93c1Zl
cnNpb24uaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vV3JpdGFibGVEYXRhT2Jq
ZWN0LmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vV3JpdGFibGVEYXRhT2Jq
ZWN0LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvUGF0aC5o
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3BwJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcCcs
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVj
dE5ldy5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3ROZXcu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTNhYzljYi4uMDAwMDAwMAotLS0gYS9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdE5ldy5oCisrKyAvZGV2
L251bGwKQEAgLTEsODUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAwOCwgMjAwOSwg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKiAKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0g
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAot
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIENocm9taXVtRGF0YU9iamVj
dE5ld19oCi0jZGVmaW5lIENocm9taXVtRGF0YU9iamVjdE5ld19oCi0KLSNpbmNsdWRlICJLVVJM
LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlICJTaGFyZWRCdWZmZXIu
aCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0j
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gQSBk
YXRhIG9iamVjdCBmb3IgaG9sZGluZyBkYXRhIHRoYXQgd291bGQgYmUgaW4gYSBjbGlwYm9hcmQg
b3IgbW92ZWQKLS8vIGR1cmluZyBhIGRyYWctbi1kcm9wIG9wZXJhdGlvbi4gIFRoaXMgaXMgdGhl
IGRhdGEgdGhhdCBXZWJDb3JlIGlzIGF3YXJlCi0vLyBvZiBhbmQgaXMgbm90IHNwZWNpZmljIHRv
IGEgcGxhdGZvcm0uCi1jbGFzcyBDaHJvbWl1bURhdGFPYmplY3ROZXcgOiBwdWJsaWMgUmVmQ291
bnRlZDxDaHJvbWl1bURhdGFPYmplY3ROZXc+IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQg
Y2xlYXJEYXRhKGNvbnN0IFN0cmluZyYgdHlwZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbGVh
ckFsbEV4Y2VwdEZpbGVzKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhcigpID0gMDsKLSAg
ICB2aXJ0dWFsIGJvb2wgaGFzRGF0YSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIEhhc2hTZXQ8
U3RyaW5nPiB0eXBlcygpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFN0cmluZyBnZXREYXRhKGNv
bnN0IFN0cmluZyYgdHlwZSwgYm9vbCYgc3VjY2VlZGVkKSBjb25zdCA9IDA7Ci0gICAgdmlydHVh
bCBib29sIHNldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpID0g
MDsKLQotICAgIC8vIFNwZWNpYWwgYWNjZXNzb3JzIGZvciBVUkwgYW5kIEhUTUwgc2luY2UgdGhl
eSBjYXJyeSBhZGRpdGlvbmFsCi0gICAgLy8gbWV0YWRhdGEuCi0gICAgdmlydHVhbCBTdHJpbmcg
Z2V0VVJMKFN0cmluZyogdGl0bGUpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VVJM
KGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHRpdGxlKSA9IDA7Ci0gICAgdmlydHVh
bCBTdHJpbmcgZ2V0SFRNTChTdHJpbmcqIGJhc2VVUkwpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgc2V0SFRNTChjb25zdCBTdHJpbmcmIGh0bWwsIGNvbnN0IEtVUkwmIGJhc2VVUkwpID0g
MDsKLQotICAgIHZpcnR1YWwgYm9vbCBoYXNGaWxlbmFtZXMoKSBjb25zdCA9IDA7Ci0gICAgdmly
dHVhbCBWZWN0b3I8U3RyaW5nPiBmaWxlbmFtZXMoKSBjb25zdCA9IDA7Ci0KLSAgICAvLyBBY2Nl
c3NvcnMgdXNlZCB3aGVuIHRyYW5zZmVycmluZyBkcmFnIGRhdGEgZnJvbSB0aGUgcmVuZGVyZXIg
dG8gdGhlCi0gICAgLy8gYnJvd3Nlci4KLSAgICB2aXJ0dWFsIEhhc2hNYXA8U3RyaW5nLCBTdHJp
bmc+IGRhdGFNYXAoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBTdHJpbmcgdXJsVGl0bGUoKSBj
b25zdCA9IDA7Ci0gICAgdmlydHVhbCBLVVJMIGh0bWxCYXNlVVJMKCkgY29uc3QgPSAwOwotCi0g
ICAgLy8gVXNlZCBmb3IgdHJhbnNmZXJyaW5nIGZpbGUgZGF0YSBmcm9tIHRoZSByZW5kZXJlciB0
byB0aGUgYnJvd3Nlci4KLSAgICB2aXJ0dWFsIFN0cmluZyBmaWxlRXh0ZW5zaW9uKCkgY29uc3Qg
PSAwOwotICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVDb250ZW50RmlsZW5hbWUoKSBjb25zdCA9IDA7
Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZmlsZUNvbnRlbnQoKSBjb25z
dCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldEZpbGVFeHRlbnNpb24oY29uc3QgU3RyaW5nJikg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRGaWxlQ29udGVudEZpbGVuYW1lKGNvbnN0IFN0cmlu
ZyYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0RmlsZUNvbnRlbnQoUGFzc1JlZlB0cjxTaGFy
ZWRCdWZmZXI+KSA9IDA7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5j
cHAgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmNwcAppbmRl
eCAyNTkyNGUyLi4yMzUwOGE2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVt
L0NsaXBib2FyZENocm9taXVtLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Ns
aXBib2FyZENocm9taXVtLmNwcApAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgIkNhY2hlZElt
YWdlLmgiCiAjaW5jbHVkZSAiQ2hyb21pdW1CcmlkZ2UuaCIKICNpbmNsdWRlICJDaHJvbWl1bURh
dGFPYmplY3QuaCIKLSNpbmNsdWRlICJDaHJvbWl1bURhdGFPYmplY3ROZXcuaCIKICNpbmNsdWRl
ICJDbGlwYm9hcmRVdGlsaXRpZXNDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAj
aW5jbHVkZSAiRHJhZ0RhdGEuaCIKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vQ2xpcGJvYXJkTWltZVR5cGVzLmggYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBi
b2FyZE1pbWVUeXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0ZTg2
Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2Fy
ZE1pbWVUeXBlcy5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENsaXBib2FyZE1pbWVUeXBlc19o
CisjZGVmaW5lIENsaXBib2FyZE1pbWVUeXBlc19oCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y29uc3QgY2hhciogY29uc3QgdGV4dFBsYWluVHlwZSA9ICJ0ZXh0L3BsYWluIjsKK2NvbnN0IGNo
YXIqIGNvbnN0IHRleHRIdG1sVHlwZSA9ICJ0ZXh0L2h0bWwiOworY29uc3QgY2hhciogY29uc3Qg
dGV4dFVyaUxpc3RUeXBlID0gInRleHQvdXJpLWxpc3QiOworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9SZWFk
YWJsZURhdGFPYmplY3QuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9SZWFkYWJsZURh
dGFPYmplY3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhMzMzYmIK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1JlYWRhYmxlRGF0
YU9iamVjdC5jcHAKQEAgLTAsMCArMSwxMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiUmVhZGFibGVEYXRhT2JqZWN0LmgiCisKKyNpbmNsdWRlICJDaHJvbWl1bUJyaWRnZS5oIgor
I2luY2x1ZGUgIkNsaXBib2FyZE1pbWVUeXBlcy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K3N0YXRpYyBQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyIGNsaXBib2FyZEJ1ZmZl
cihib29sIGlzRm9yRHJhZ2dpbmcpCit7CisgICAgcmV0dXJuIGlzRm9yRHJhZ2dpbmcgPyBQYXN0
ZWJvYXJkUHJpdmF0ZTo6RHJhZ0J1ZmZlciA6IFBhc3RlYm9hcmRQcml2YXRlOjpTdGFuZGFyZEJ1
ZmZlcjsKK30KKworUGFzc1JlZlB0cjxSZWFkYWJsZURhdGFPYmplY3Q+IFJlYWRhYmxlRGF0YU9i
amVjdDo6Y3JlYXRlKGJvb2wgaXNGb3JEcmFnZ2luZykKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFJlYWRhYmxlRGF0YU9iamVjdChpc0ZvckRyYWdnaW5nKSk7Cit9CisKK1JlYWRhYmxlRGF0
YU9iamVjdDo6UmVhZGFibGVEYXRhT2JqZWN0KGJvb2wgaXNGb3JEcmFnZ2luZykKKyAgICA6IG1f
aXNGb3JEcmFnZ2luZyhpc0ZvckRyYWdnaW5nKQorICAgICwgbV9jb250YWluc0ZpbGVuYW1lcyhm
YWxzZSkKKyAgICAsIG1faXNUeXBlQ2FjaGVJbml0aWFsaXplZChmYWxzZSkKK3sKK30KKworYm9v
bCBSZWFkYWJsZURhdGFPYmplY3Q6Omhhc0RhdGEoKSBjb25zdAoreworICAgIGVuc3VyZVR5cGVD
YWNoZUluaXRpYWxpemVkKCk7CisgICAgcmV0dXJuICFtX3R5cGVzLmlzRW1wdHkoKSB8fCBtX2Nv
bnRhaW5zRmlsZW5hbWVzOworfQorCitIYXNoU2V0PFN0cmluZz4gUmVhZGFibGVEYXRhT2JqZWN0
Ojp0eXBlcygpIGNvbnN0Cit7CisgICAgZW5zdXJlVHlwZUNhY2hlSW5pdGlhbGl6ZWQoKTsKKyAg
ICByZXR1cm4gbV90eXBlczsKK30KKworU3RyaW5nIFJlYWRhYmxlRGF0YU9iamVjdDo6Z2V0RGF0
YShjb25zdCBTdHJpbmcmIHR5cGUsIGJvb2wmIHN1Y2NlZWRlZCkgY29uc3QKK3sKKyAgICBTdHJp
bmcgZGF0YTsKKyAgICBTdHJpbmcgaWdub3JlZE1ldGFkYXRhOworICAgIHN1Y2NlZWRlZCA9IENo
cm9taXVtQnJpZGdlOjpjbGlwYm9hcmRSZWFkRGF0YSgKKyAgICAgICAgY2xpcGJvYXJkQnVmZmVy
KG1faXNGb3JEcmFnZ2luZyksIHR5cGUsIGRhdGEsIGlnbm9yZWRNZXRhZGF0YSk7CisgICAgcmV0
dXJuIGRhdGE7Cit9CisKK1N0cmluZyBSZWFkYWJsZURhdGFPYmplY3Q6OmdldFVSTChTdHJpbmcq
IHRpdGxlKSBjb25zdAoreworICAgIFN0cmluZyB1cmw7CisgICAgU3RyaW5nIGlnbm9yZWRUaXRs
ZTsKKyAgICBpZiAoIXRpdGxlKQorICAgICAgICB0aXRsZSA9ICZpZ25vcmVkVGl0bGU7CisgICAg
Q2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFJlYWREYXRhKAorICAgICAgICBjbGlwYm9hcmRCdWZm
ZXIobV9pc0ZvckRyYWdnaW5nKSwgdGV4dFVyaUxpc3RUeXBlLCB1cmwsICp0aXRsZSk7CisgICAg
cmV0dXJuIHVybDsKK30KKworU3RyaW5nIFJlYWRhYmxlRGF0YU9iamVjdDo6Z2V0SFRNTChTdHJp
bmcqIGJhc2VVUkwpIGNvbnN0Cit7CisgICAgU3RyaW5nIGh0bWw7CisgICAgU3RyaW5nIGlnbm9y
ZWRCYXNlVVJMOworICAgIGlmICghYmFzZVVSTCkKKyAgICAgICAgYmFzZVVSTCA9ICZpZ25vcmVk
QmFzZVVSTDsKKyAgICBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkUmVhZERhdGEoCisgICAgICAg
IGNsaXBib2FyZEJ1ZmZlcihtX2lzRm9yRHJhZ2dpbmcpLCB0ZXh0SHRtbFR5cGUsIGh0bWwsICpi
YXNlVVJMKTsKKyAgICByZXR1cm4gaHRtbDsKK30KKworYm9vbCBSZWFkYWJsZURhdGFPYmplY3Q6
Omhhc0ZpbGVuYW1lcygpIGNvbnN0Cit7CisgICAgZW5zdXJlVHlwZUNhY2hlSW5pdGlhbGl6ZWQo
KTsKKyAgICByZXR1cm4gbV9jb250YWluc0ZpbGVuYW1lczsKK30KKworVmVjdG9yPFN0cmluZz4g
UmVhZGFibGVEYXRhT2JqZWN0OjpmaWxlbmFtZXMoKSBjb25zdAoreworICAgIHJldHVybiBDaHJv
bWl1bUJyaWRnZTo6Y2xpcGJvYXJkUmVhZEZpbGVuYW1lcyhjbGlwYm9hcmRCdWZmZXIobV9pc0Zv
ckRyYWdnaW5nKSk7Cit9CisKK3ZvaWQgUmVhZGFibGVEYXRhT2JqZWN0OjplbnN1cmVUeXBlQ2Fj
aGVJbml0aWFsaXplZCgpIGNvbnN0Cit7CisgICAgaWYgKG1faXNUeXBlQ2FjaGVJbml0aWFsaXpl
ZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV90eXBlcyA9IENocm9taXVtQnJpZGdlOjpjbGlw
Ym9hcmRSZWFkQXZhaWxhYmxlVHlwZXMoCisgICAgICAgIGNsaXBib2FyZEJ1ZmZlcihtX2lzRm9y
RHJhZ2dpbmcpLCAmbV9jb250YWluc0ZpbGVuYW1lcyk7CisgICAgbV9pc1R5cGVDYWNoZUluaXRp
YWxpemVkID0gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9SZWFkYWJsZURhdGFPYmplY3QuaCBiL1dlYkNvcmUv
cGxhdGZvcm0vY2hyb21pdW0vUmVhZGFibGVEYXRhT2JqZWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uNjBmNmQ0NQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vUmVhZGFibGVEYXRhT2JqZWN0LmgKQEAgLTAsMCArMSw3NiBAQAorLyoK
KyAqIENvcHlyaWdodCAoYykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBk
aXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgUmVhZGFibGVEYXRhT2JqZWN0X2gKKyNkZWZpbmUgUmVhZGFibGVEYXRhT2JqZWN0X2gKKwor
I2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8g
VXNlZCBmb3Igb25lIHdheSBjb21tdW5pY2F0aW9uIG9mIGRyYWcvZHJvcCBhbmQgY29weS9wYXN0
ZSBkYXRhIGZyb20gdGhlCisvLyBicm93c2VyIHRvIHRoZSByZW5kZXJlci4KK2NsYXNzIFJlYWRh
YmxlRGF0YU9iamVjdCA6IHB1YmxpYyBSZWZDb3VudGVkPFJlYWRhYmxlRGF0YU9iamVjdD4gewor
cHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlYWRhYmxlRGF0YU9iamVjdD4gY3JlYXRl
KGJvb2wgaXNGb3JEcmFnZ2luZyk7CisKKyAgICB2aXJ0dWFsIGJvb2wgaGFzRGF0YSgpIGNvbnN0
OworICAgIHZpcnR1YWwgSGFzaFNldDxTdHJpbmc+IHR5cGVzKCkgY29uc3Q7CisgICAgdmlydHVh
bCBTdHJpbmcgZ2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGJvb2wmIHN1Y2NlZWRlZCkgY29u
c3Q7CisKKyAgICB2aXJ0dWFsIFN0cmluZyBnZXRVUkwoU3RyaW5nKiB0aXRsZSkgY29uc3Q7Cisg
ICAgdmlydHVhbCBTdHJpbmcgZ2V0SFRNTChTdHJpbmcqIGJhc2VVUkwpIGNvbnN0OworCisgICAg
dmlydHVhbCBib29sIGhhc0ZpbGVuYW1lcygpIGNvbnN0OworICAgIHZpcnR1YWwgVmVjdG9yPFN0
cmluZz4gZmlsZW5hbWVzKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgUmVhZGFi
bGVEYXRhT2JqZWN0KGJvb2wgaXNGb3JEcmFnZ2luZyk7CisKKyAgICAvLyBUaGlzIGlzbid0IGFs
d2F5cyBjb25zdC4uLiBidXQgbW9zdCBvZiB0aGUgdGltZSBpdCBpcy4KKyAgICB2b2lkIGVuc3Vy
ZVR5cGVDYWNoZUluaXRpYWxpemVkKCkgY29uc3Q7CisKKworICAgIGJvb2wgbV9pc0ZvckRyYWdn
aW5nOworCisgICAgLy8gVG8gYXZvaWQgbWFraW5nIGEgbG90IG9mIElQQyBjYWxscyBmb3IgZWFj
aCBkcmFnIGV2ZW50LCB3ZSBjYWNoZSBzb21lCisgICAgLy8gdmFsdWVzIGluIHRoZSByZW5kZXJl
ci4KKyAgICBtdXRhYmxlIEhhc2hTZXQ8U3RyaW5nPiBtX3R5cGVzOworICAgIG11dGFibGUgYm9v
bCBtX2NvbnRhaW5zRmlsZW5hbWVzOworICAgIG11dGFibGUgYm9vbCBtX2lzVHlwZUNhY2hlSW5p
dGlhbGl6ZWQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9Xcml0YWJsZURhdGFPYmplY3QuY3BwIGIv
V2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9Xcml0YWJsZURhdGFPYmplY3QuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlN2MyODMKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1dyaXRhYmxlRGF0YU9iamVjdC5jcHAKQEAgLTAsMCAr
MSwxNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoK
KyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV3JpdGFibGVEYXRhT2JqZWN0
LmgiCisKKyNpbmNsdWRlICJDaHJvbWl1bUJyaWRnZS5oIgorI2luY2x1ZGUgIkNsaXBib2FyZE1p
bWVUeXBlcy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8V3JpdGFibGVE
YXRhT2JqZWN0PiBXcml0YWJsZURhdGFPYmplY3Q6OmNyZWF0ZShib29sIGlzRm9yRHJhZ2dpbmcp
Cit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXcml0YWJsZURhdGFPYmplY3QoaXNGb3JEcmFn
Z2luZykpOworfQorCitXcml0YWJsZURhdGFPYmplY3Q6OldyaXRhYmxlRGF0YU9iamVjdChib29s
IGlzRm9yRHJhZ2dpbmcpCisgICAgOiBtX2lzRm9yRHJhZ2dpbmcoaXNGb3JEcmFnZ2luZykKK3sK
K30KKwordm9pZCBXcml0YWJsZURhdGFPYmplY3Q6OmNsZWFyRGF0YShjb25zdCBTdHJpbmcmIHR5
cGUpCit7CisgICAgbV9kYXRhTWFwLnJlbW92ZSh0eXBlKTsKKyAgICBpZiAodHlwZSA9PSB0ZXh0
VXJpTGlzdFR5cGUpCisgICAgICAgIG1fdXJsVGl0bGUgPSAiIjsKKyAgICBlbHNlIGlmICh0eXBl
ID09IHRleHRIdG1sVHlwZSkKKyAgICAgICAgbV9odG1sQmFzZVVSTCA9IEtVUkwoKTsKK30KKwor
dm9pZCBXcml0YWJsZURhdGFPYmplY3Q6OmNsZWFyQWxsRXhjZXB0RmlsZXMoKQoreworICAgIC8v
IEZJWE1FOiBUaGUgc3BlYyBkb2VzIG5vdCBwcm92aWRlIGEgd2F5IHRvIHBvcHVsYXRlIEZpbGVM
aXN0IGN1cnJlbnRseS4gSW4KKyAgICAvLyBmYWN0LCB0aGUgc3BlYyBleHBsaWNpdGx5IHN0YXRl
cyB0aGF0IGRyYWdnaW5nIGZpbGVzIGNhbiBvbmx5IGhhcHBlbiBmcm9tCisgICAgLy8gb3V0c2lk
ZSBhIGJyb3dzaW5nIGNvbnRleHQuCisgICAgY2xlYXJBbGwoKTsKK30KKwordm9pZCBXcml0YWJs
ZURhdGFPYmplY3Q6OmNsZWFyQWxsKCkKK3sKKyAgICBtX2RhdGFNYXAuY2xlYXIoKTsKKyAgICBt
X3VybFRpdGxlID0gIiI7CisgICAgbV9odG1sQmFzZVVSTCA9IEtVUkwoKTsKKyAgICBtX2ZpbGVD
b250ZW50RmlsZW5hbWUgPSAiIjsKKyAgICBpZiAobV9maWxlQ29udGVudCkKKyAgICAgICAgbV9m
aWxlQ29udGVudC0+Y2xlYXIoKTsKKyAgICBtX2ZpbGVFeHRlbnNpb24gPSAiIjsKK30KKworYm9v
bCBXcml0YWJsZURhdGFPYmplY3Q6OnNldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBT
dHJpbmcmIGRhdGEpCit7CisgICAgaWYgKCFtX2lzRm9yRHJhZ2dpbmcpIHsKKyAgICAgICAgQ2hy
b21pdW1CcmlkZ2U6OmNsaXBib2FyZFdyaXRlRGF0YSh0eXBlLCBkYXRhLCAiIik7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICBtX2RhdGFNYXAuc2V0KHR5cGUsIGRhdGEpOworICAg
IGlmICh0eXBlID09IHRleHRVcmlMaXN0VHlwZSkKKyAgICAgICAgbV91cmxUaXRsZSA9ICIiOwor
ICAgIGVsc2UgaWYgKHR5cGUgPT0gdGV4dEh0bWxUeXBlKQorICAgICAgICBtX2h0bWxCYXNlVVJM
ID0gS1VSTCgpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFdyaXRhYmxlRGF0YU9iamVj
dDo6c2V0VVJMKGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHRpdGxlKQoreworICAg
IHNldERhdGEodGV4dFVyaUxpc3RUeXBlLCB1cmwpOworICAgIG1fdXJsVGl0bGUgPSB0aXRsZTsK
K30KKwordm9pZCBXcml0YWJsZURhdGFPYmplY3Q6OnNldEhUTUwoY29uc3QgU3RyaW5nJiBodG1s
LCBjb25zdCBLVVJMJiBiYXNlVVJMKQoreworICAgIHNldERhdGEodGV4dEh0bWxUeXBlLCBodG1s
KTsKKyAgICBtX2h0bWxCYXNlVVJMID0gYmFzZVVSTDsKK30KKworLy8gQWNjZXNzb3JzIHVzZWQg
d2hlbiB0cmFuc2ZlcnJpbmcgZHJhZyBkYXRhIGZyb20gdGhlIHJlbmRlcmVyIHRvIHRoZQorLy8g
YnJvd3Nlci4KK0hhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IFdyaXRhYmxlRGF0YU9iamVjdDo6ZGF0
YU1hcCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZGF0YU1hcDsKK30KKworU3RyaW5nIFdyaXRh
YmxlRGF0YU9iamVjdDo6dXJsVGl0bGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3VybFRpdGxl
OworfQorCitLVVJMIFdyaXRhYmxlRGF0YU9iamVjdDo6aHRtbEJhc2VVUkwoKSBjb25zdAorewor
ICAgIHJldHVybiBtX2h0bWxCYXNlVVJMOworfQorCisvLyBVc2VkIGZvciB0cmFuc2ZlcnJpbmcg
ZmlsZSBkYXRhIGZyb20gdGhlIHJlbmRlcmVyIHRvIHRoZSBicm93c2VyLgorU3RyaW5nIFdyaXRh
YmxlRGF0YU9iamVjdDo6ZmlsZUV4dGVuc2lvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZmls
ZUV4dGVuc2lvbjsKK30KKworU3RyaW5nIFdyaXRhYmxlRGF0YU9iamVjdDo6ZmlsZUNvbnRlbnRG
aWxlbmFtZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZmlsZUNvbnRlbnRGaWxlbmFtZTsKK30K
KworUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IFdyaXRhYmxlRGF0YU9iamVjdDo6ZmlsZUNvbnRl
bnQoKSBjb25zdAoreworICAgIHJldHVybiBtX2ZpbGVDb250ZW50OworfQorCit2b2lkIFdyaXRh
YmxlRGF0YU9iamVjdDo6c2V0RmlsZUV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGZpbGVFeHRlbnNp
b24pCit7CisgICAgbV9maWxlRXh0ZW5zaW9uID0gZmlsZUV4dGVuc2lvbjsKK30KKwordm9pZCBX
cml0YWJsZURhdGFPYmplY3Q6OnNldEZpbGVDb250ZW50RmlsZW5hbWUoY29uc3QgU3RyaW5nJiBm
aWxlQ29udGVudEZpbGVuYW1lKQoreworICAgIG1fZmlsZUNvbnRlbnRGaWxlbmFtZSA9IGZpbGVD
b250ZW50RmlsZW5hbWU7Cit9CisKK3ZvaWQgV3JpdGFibGVEYXRhT2JqZWN0OjpzZXRGaWxlQ29u
dGVudChQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZmlsZUNvbnRlbnQpCit7CisgICAgbV9maWxl
Q29udGVudCA9IGZpbGVDb250ZW50OworfQorCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vV3JpdGFibGVEYXRhT2JqZWN0Lmgg
Yi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1dyaXRhYmxlRGF0YU9iamVjdC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxZTJlMjYKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1dyaXRhYmxlRGF0YU9iamVjdC5oCkBAIC0wLDAgKzEs
ODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAq
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIFdyaXRhYmxlRGF0YU9iamVjdF9oCisjZGVmaW5lIFdyaXRhYmxlRGF0YU9i
amVjdF9oCisKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIK
KyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBV
c2VkIGZvciBvbmUgd2F5IGNvbW11bmljYXRpb24gb2YgZHJhZy9kcm9wIGFuZCBjb3B5L3Bhc3Rl
IGRhdGEgZnJvbSB0aGUKKy8vIHJlbmRlcmVyIHRvIHRoZSBicm93c2VyLiBUaGlzIGlzIGludGVu
dGVkZWQgdG8gYmUgdXNlZCBpbiBkcmFnc3RhcnQvY29weS9jdXQKKy8vIGV2ZW50cy4gRHVlIHRv
IHNob3J0Y29taW5ncywgd3JpdGVzIHRvIHRoZSBwYXN0ZWJvYXJkIGNhbm5vdCBiZSBwZXJmb3Jt
ZWQKKy8vIGF0b21pY2FsbHkuCitjbGFzcyBXcml0YWJsZURhdGFPYmplY3QgOiBwdWJsaWMgUmVm
Q291bnRlZDxXcml0YWJsZURhdGFPYmplY3Q+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxXcml0YWJsZURhdGFPYmplY3Q+IGNyZWF0ZShib29sIGlzRm9yRHJhZ2dpbmcpOworCisg
ICAgdmlydHVhbCB2b2lkIGNsZWFyRGF0YShjb25zdCBTdHJpbmcmIHR5cGUpOworICAgIHZpcnR1
YWwgdm9pZCBjbGVhckFsbEV4Y2VwdEZpbGVzKCk7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyQWxs
KCk7CisgICAgdmlydHVhbCBib29sIHNldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBT
dHJpbmcmIGRhdGEpOworCisgICAgdmlydHVhbCB2b2lkIHNldFVSTChjb25zdCBTdHJpbmcmIHVy
bCwgY29uc3QgU3RyaW5nJiB0aXRsZSk7CisgICAgdmlydHVhbCB2b2lkIHNldEhUTUwoY29uc3Qg
U3RyaW5nJiBodG1sLCBjb25zdCBLVVJMJiBiYXNlVVJMKTsKKworICAgIC8vIFVzZWQgZm9yIHRy
YW5zZmVycmluZyBkcmFnIGRhdGEgZnJvbSB0aGUgcmVuZGVyZXIgdG8gdGhlIGJyb3dzZXIuCisg
ICAgdmlydHVhbCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBkYXRhTWFwKCkgY29uc3Q7CisgICAg
dmlydHVhbCBTdHJpbmcgdXJsVGl0bGUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEtVUkwgaHRtbEJh
c2VVUkwoKSBjb25zdDsKKworICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVFeHRlbnNpb24oKSBjb25z
dDsKKyAgICB2aXJ0dWFsIFN0cmluZyBmaWxlQ29udGVudEZpbGVuYW1lKCkgY29uc3Q7CisgICAg
dmlydHVhbCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZmlsZUNvbnRlbnQoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0RmlsZUV4dGVuc2lvbihjb25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0RmlsZUNvbnRlbnRGaWxlbmFtZShjb25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0RmlsZUNvbnRlbnQoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+KTsKKworcHJp
dmF0ZToKKyAgICBleHBsaWNpdCBXcml0YWJsZURhdGFPYmplY3QoYm9vbCBpc0ZvckRyYWdnaW5n
KTsKKworICAgIGJvb2wgbV9pc0ZvckRyYWdnaW5nOworCisgICAgSGFzaE1hcDxTdHJpbmcsIFN0
cmluZz4gbV9kYXRhTWFwOworICAgIFN0cmluZyBtX3VybFRpdGxlOworICAgIEtVUkwgbV9odG1s
QmFzZVVSTDsKKyAgICBTdHJpbmcgbV9maWxlRXh0ZW5zaW9uOworICAgIFN0cmluZyBtX2ZpbGVD
b250ZW50RmlsZW5hbWU7CisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV9maWxlQ29udGVudDsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66112</attachid>
            <date>2010-08-31 14:51:39 -0700</date>
            <delta_ts>2010-08-31 14:54:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>foo.patch</filename>
            <type>text/plain</type>
            <size>24827</size>
            <attacher name="Daniel Cheng">dcheng</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OTc2ZDQwNy4uNjE2YjRjMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTIsNiArMiw0NSBAQAogCiAgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgogCisgICAgICAgIFtjaHJvbWl1bV0gUHJlcGFyZSBDbGlwYm9hcmQvRHJh
Z0RhdGEgZm9yIHRyYW5zaXRpb24gdG8gbmV3IGRyYWctYW5kLWRyb3AgaW50ZXJmYWNlLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQ5OTIKKworICAg
ICAgICBJbiBvcmRlciB0byBhdm9pZCBicmVha2luZyBDaHJvbWl1bSwgd2UgaGF2ZSB0aGUgcmVu
ZGVyZXIgc2lkZSBpbXBsZW1lbnQKKyAgICAgICAgYm90aCB0aGUgb2xkIGFuZCBuZXcgZHJhZ2dp
bmcgaW50ZXJmYWNlIGFuZCBnYXRlIHRoZSBiZWhhdmlvciBiYXNlZCBvZmYKKyAgICAgICAgb2Yg
d2hpY2ggRGF0YU9iamVjdCBwb2ludGVyIGlzIHNldC4gVGhpcyBjaGFuZ2Ugb25seSBhZmZlY3Rz
IGRyYWdnaW5nCisgICAgICAgIGludG8vb3ZlciB0aGUgcmVuZGVyZXI7IGl0IGRvZXMgbm90IGFm
ZmVjdCBzdGFydGluZyBhIGRyYWcgb3IgY29weSBhbmQKKyAgICAgICAgcGFzdGUuIE9uY2UgdGhl
IGFwcHJvcHJpYXRlIENocm9taXVtIGNoYW5nZXMgbGFuZCwgdGhlIHRlbXBvcmFyeQorICAgICAg
ICBjb25kaXRpb25hbCBicmFuY2hlcyB3aWxsIGJlIHJlbW92ZWQuCisKKyAgICAgICAgTm8gbmV3
IHRlc3RzLgorCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2xpcGJvYXJkQ2hyb21pdW06OkNsaXBib2FyZENocm9taXVtKToKKyAgICAgICAgKFdl
YkNvcmU6OkNsaXBib2FyZENocm9taXVtOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2xp
cGJvYXJkQ2hyb21pdW06OmdldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkQ2hy
b21pdW06OnR5cGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENocm9taXVtOjpmaWxl
cyk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRDaHJvbWl1bTo6aGFzRGF0YSk6CisgICAg
ICAgICogcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9jaHJvbWl1bS9EcmFnRGF0YUNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmNvbnRhaW5zSFRNTCk6CisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0YTo6Y29udGFpbnNVUkwp
OgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmFzVVJMKToKKyAgICAgICAgKFdlYkNvcmU6
OkRyYWdEYXRhOjpjb250YWluc0ZpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjph
c0ZpbGVuYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0YTo6Y29udGFpbnNQbGFpblRl
eHQpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmFzUGxhaW5UZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRyYWdEYXRhOjpjYW5TbWFydFJlcGxhY2UpOgorICAgICAgICAoV2ViQ29yZTo6
RHJhZ0RhdGE6OmNvbnRhaW5zQ29tcGF0aWJsZUNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
RHJhZ0RhdGE6OmFzRnJhZ21lbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0RyYWdE
YXRhUmVmLmg6CisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0YVJlZjo6RHJhZ0RhdGFSZWYpOgor
CisyMDEwLTA4LTMxICBEYW5pZWwgQ2hlbmcgIDxkY2hlbmdAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCiAgICAgICAgIFtjaHJvbWl1bV0gSW1w
bGVtZW50IFJlYWRhYmxlL1dyaXRhYmxlIHZlcnNpb25zIG9mIENocm9taXVtRGF0YU9iamVjdE5l
dwogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQ5MTcK
IApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1
bS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmNwcApp
bmRleCAyMzUwOGE2Li41M2RjYjU3IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9t
aXVtL0NsaXBib2FyZENocm9taXVtLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVt
L0NsaXBib2FyZENocm9taXVtLmNwcApAQCAtNDgsNiArNDgsOSBAQAogI2luY2x1ZGUgIlN0cmlu
Z0J1aWxkZXIuaCIKICNpbmNsdWRlICJtYXJrdXAuaCIKIAorLy8gRklYTUU6IFRoaXMgY2xhc3Mg
Y3VycmVudGx5IGhhcyBhIGxvdCBvZiBkdXBsaWNhdGlvbiBpbiBwcmVwYXJhdGlvbiBmb3IgYQor
Ly8gdHJhbnNpdGlvbiB0byB0aGUgbmV3IGRyYWcgYW5kIGRyb3AgbW9kZWwuIENsZWFuIGl0IHVw
IG9uY2UgdGhlIHRyYW5zaXRpb24gaXMKKy8vIGRvbmUgb24gdGhlIENocm9tZSBzaWRlLgogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwpAQCAtOTMsNyAr
OTYsOSBAQCBzdGF0aWMgQ2xpcGJvYXJkRGF0YVR5cGUgY2xpcGJvYXJkVHlwZUZyb21NSU1FVHlw
ZShjb25zdCBTdHJpbmcmIHR5cGUpCiAKIFBhc3NSZWZQdHI8Q2xpcGJvYXJkPiBDbGlwYm9hcmQ6
OmNyZWF0ZShDbGlwYm9hcmRBY2Nlc3NQb2xpY3kgcG9saWN5LCBEcmFnRGF0YSogZHJhZ0RhdGEs
IEZyYW1lKiBmcmFtZSkKIHsKLSAgICByZXR1cm4gQ2xpcGJvYXJkQ2hyb21pdW06OmNyZWF0ZSh0
cnVlLCBkcmFnRGF0YS0+cGxhdGZvcm1EYXRhKCksIHBvbGljeSwgZnJhbWUpOworICAgIGlmIChk
cmFnRGF0YS0+cGxhdGZvcm1EYXRhKCkub2xkV2F5KQorICAgICAgICByZXR1cm4gQ2xpcGJvYXJk
Q2hyb21pdW06OmNyZWF0ZSh0cnVlLCBkcmFnRGF0YS0+cGxhdGZvcm1EYXRhKCkub2xkV2F5LCBw
b2xpY3ksIGZyYW1lKTsKKyAgICByZXR1cm4gQ2xpcGJvYXJkQ2hyb21pdW06OmNyZWF0ZSh0cnVl
LCBkcmFnRGF0YS0+cGxhdGZvcm1EYXRhKCkubmV3V2F5LCBwb2xpY3ksIGZyYW1lKTsKIH0KIAog
Q2xpcGJvYXJkQ2hyb21pdW06OkNsaXBib2FyZENocm9taXVtKGJvb2wgaXNGb3JEcmFnZ2luZywK
QEAgLTEwNiwxMiArMTExLDI4IEBAIENsaXBib2FyZENocm9taXVtOjpDbGlwYm9hcmRDaHJvbWl1
bShib29sIGlzRm9yRHJhZ2dpbmcsCiB7CiB9CiAKK0NsaXBib2FyZENocm9taXVtOjpDbGlwYm9h
cmRDaHJvbWl1bShib29sIGlzRm9yRHJhZ2dpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUGFzc1JlZlB0cjxSZWFkYWJsZURhdGFPYmplY3Q+IGRhdGFPYmplY3QsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xpcGJvYXJkQWNjZXNzUG9saWN5
IHBvbGljeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcmFtZSogZnJh
bWUpCisgICAgOiBDbGlwYm9hcmQocG9saWN5LCBpc0ZvckRyYWdnaW5nKQorICAgICwgbV9yZWFk
YWJsZURhdGFPYmplY3QoZGF0YU9iamVjdCkKKyAgICAsIG1fZnJhbWUoZnJhbWUpCit7Cit9CisK
IFBhc3NSZWZQdHI8Q2xpcGJvYXJkQ2hyb21pdW0+IENsaXBib2FyZENocm9taXVtOjpjcmVhdGUo
Ym9vbCBpc0ZvckRyYWdnaW5nLAogICAgIFBhc3NSZWZQdHI8Q2hyb21pdW1EYXRhT2JqZWN0PiBk
YXRhT2JqZWN0LCBDbGlwYm9hcmRBY2Nlc3NQb2xpY3kgcG9saWN5LCBGcmFtZSogZnJhbWUpCiB7
CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDbGlwYm9hcmRDaHJvbWl1bShpc0ZvckRyYWdnaW5n
LCBkYXRhT2JqZWN0LCBwb2xpY3ksIGZyYW1lKSk7CiB9CiAKK1Bhc3NSZWZQdHI8Q2xpcGJvYXJk
Q2hyb21pdW0+IENsaXBib2FyZENocm9taXVtOjpjcmVhdGUoYm9vbCBpc0ZvckRyYWdnaW5nLAor
ICAgIFBhc3NSZWZQdHI8UmVhZGFibGVEYXRhT2JqZWN0PiBkYXRhT2JqZWN0LCBDbGlwYm9hcmRB
Y2Nlc3NQb2xpY3kgcG9saWN5LCBGcmFtZSogZnJhbWUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBDbGlwYm9hcmRDaHJvbWl1bShpc0ZvckRyYWdnaW5nLCBkYXRhT2JqZWN0LCBwb2xpY3ks
IGZyYW1lKSk7Cit9CisKIHZvaWQgQ2xpcGJvYXJkQ2hyb21pdW06OmNsZWFyRGF0YShjb25zdCBT
dHJpbmcmIHR5cGUpCiB7CiAgICAgaWYgKHBvbGljeSgpICE9IENsaXBib2FyZFdyaXRhYmxlIHx8
ICFtX2RhdGFPYmplY3QpCkBAIC0xNjIsNyArMTgzLDEzIEBAIHZvaWQgQ2xpcGJvYXJkQ2hyb21p
dW06OmNsZWFyQWxsRGF0YSgpCiBTdHJpbmcgQ2xpcGJvYXJkQ2hyb21pdW06OmdldERhdGEoY29u
c3QgU3RyaW5nJiB0eXBlLCBib29sJiBzdWNjZXNzKSBjb25zdAogewogICAgIHN1Y2Nlc3MgPSBm
YWxzZTsKLSAgICBpZiAocG9saWN5KCkgIT0gQ2xpcGJvYXJkUmVhZGFibGUgfHwgIW1fZGF0YU9i
amVjdCkKKyAgICBpZiAocG9saWN5KCkgIT0gQ2xpcGJvYXJkUmVhZGFibGUpCisgICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKKworICAgIGlmIChtX3JlYWRhYmxlRGF0YU9iamVjdCkKKyAgICAgICAg
cmV0dXJuIG1fcmVhZGFibGVEYXRhT2JqZWN0LT5nZXREYXRhKHR5cGUsIHN1Y2Nlc3MpOworICAg
ICAgCisgICAgaWYgKCFtX2RhdGFPYmplY3QpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAog
ICAgIENsaXBib2FyZERhdGFUeXBlIGRhdGFUeXBlID0gY2xpcGJvYXJkVHlwZUZyb21NSU1FVHlw
ZSh0eXBlKTsKQEAgLTMyMiw2ICszNDksOSBAQCBIYXNoU2V0PFN0cmluZz4gQ2xpcGJvYXJkQ2hy
b21pdW06OnR5cGVzKCkgY29uc3QKICAgICBpZiAocG9saWN5KCkgIT0gQ2xpcGJvYXJkUmVhZGFi
bGUgJiYgcG9saWN5KCkgIT0gQ2xpcGJvYXJkVHlwZXNSZWFkYWJsZSkKICAgICAgICAgcmV0dXJu
IHJlc3VsdHM7CiAKKyAgICBpZiAobV9yZWFkYWJsZURhdGFPYmplY3QpCisgICAgICAgIHJldHVy
biBtX3JlYWRhYmxlRGF0YU9iamVjdC0+dHlwZXMoKTsKKwogICAgIGlmICghbV9kYXRhT2JqZWN0
KQogICAgICAgICByZXR1cm4gcmVzdWx0czsKIApAQCAtMzYxLDYgKzM5MSwxNCBAQCBQYXNzUmVm
UHRyPEZpbGVMaXN0PiBDbGlwYm9hcmRDaHJvbWl1bTo6ZmlsZXMoKSBjb25zdAogICAgIGlmIChw
b2xpY3koKSAhPSBDbGlwYm9hcmRSZWFkYWJsZSkKICAgICAgICAgcmV0dXJuIEZpbGVMaXN0Ojpj
cmVhdGUoKTsKIAorICAgIGlmIChtX3JlYWRhYmxlRGF0YU9iamVjdCkgeworICAgICAgICBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0ID0gbV9mcmFtZS0+ZG9j
dW1lbnQoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBSZWZQdHI8RmlsZUxp
c3Q+IGZpbGVMaXN0ID0gRmlsZUxpc3Q6OmNyZWF0ZSgpOworICAgICAgICBjb25zdCBWZWN0b3I8
U3RyaW5nPiYgZmlsZW5hbWVzID0gbV9yZWFkYWJsZURhdGFPYmplY3QtPmZpbGVuYW1lcygpOwor
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZpbGVuYW1lcy5zaXplKCk7ICsraSkKKyAg
ICAgICAgICAgIGZpbGVMaXN0LT5hcHBlbmQoRmlsZTo6Y3JlYXRlKHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQsIGZpbGVuYW1lcy5hdChpKSkpOworICAgIH0KKwogICAgIGlmICghbV9kYXRhT2JqZWN0
IHx8IG1fZGF0YU9iamVjdC0+ZmlsZW5hbWVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIEZp
bGVMaXN0OjpjcmVhdGUoKTsKIApAQCAtNTU2LDYgKzU5NCw5IEBAIHZvaWQgQ2xpcGJvYXJkQ2hy
b21pdW06OndyaXRlUGxhaW5UZXh0KGNvbnN0IFN0cmluZyYgdGV4dCkKIAogYm9vbCBDbGlwYm9h
cmRDaHJvbWl1bTo6aGFzRGF0YSgpCiB7CisgICAgaWYgKG1fcmVhZGFibGVEYXRhT2JqZWN0KQor
ICAgICAgICByZXR1cm4gbV9yZWFkYWJsZURhdGFPYmplY3QtPmhhc0RhdGEoKTsKKwogICAgIGlm
ICghbV9kYXRhT2JqZWN0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uaCBiL1dlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uaAppbmRleCBhNDE1MGQwLi44OWU4MDY5
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVt
LmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5oCkBA
IC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiQ2xpcGJvYXJkLmgiCiAKICNpbmNsdWRlICJDYWNo
ZWRSZXNvdXJjZUNsaWVudC5oIgorI2luY2x1ZGUgIkRyYWdEYXRhUmVmLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIApAQCAtNDAsNiArNDEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
Y2xhc3MgQ2hyb21pdW1EYXRhT2JqZWN0OwogICAgIGNsYXNzIEZyYW1lOwogICAgIGNsYXNzIElu
dFBvaW50OworICAgIGNsYXNzIFJlYWRhYmxlRGF0YU9iamVjdDsKIAogICAgIGNsYXNzIENsaXBi
b2FyZENocm9taXVtIDogcHVibGljIENsaXBib2FyZCwgcHVibGljIENhY2hlZFJlc291cmNlQ2xp
ZW50IHsKICAgICBwdWJsaWM6CkBAIC00Nyw2ICs0OSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDbGlwYm9hcmRDaHJvbWl1bT4gY3JlYXRlKAog
ICAgICAgICAgICAgYm9vbCBpc0ZvckRyYWdnaW5nLCBQYXNzUmVmUHRyPENocm9taXVtRGF0YU9i
amVjdD4sIENsaXBib2FyZEFjY2Vzc1BvbGljeSwgRnJhbWUqKTsKKyAgICAgICAgc3RhdGljIFBh
c3NSZWZQdHI8Q2xpcGJvYXJkQ2hyb21pdW0+IGNyZWF0ZSgKKyAgICAgICAgICAgIGJvb2wgaXNG
b3JEcmFnZ2luZywgUGFzc1JlZlB0cjxSZWFkYWJsZURhdGFPYmplY3Q+LCBDbGlwYm9hcmRBY2Nl
c3NQb2xpY3ksIEZyYW1lKik7CiAKICAgICAgICAgLy8gUmV0dXJucyB0aGUgZmlsZSBuYW1lIChu
b3QgaW5jbHVkaW5nIHRoZSBleHRlbnNpb24pLiBUaGlzIHJlbW92ZXMgYW55CiAgICAgICAgIC8v
IGludmFsaWQgZmlsZSBzeXN0ZW0gY2hhcmFjdGVycyBhcyB3ZWxsIGFzIG1ha2luZyBzdXJlIHRo
ZQpAQCAtODEsMTAgKzg1LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIHByaXZhdGU6
CiAgICAgICAgIENsaXBib2FyZENocm9taXVtKGJvb2wsIFBhc3NSZWZQdHI8Q2hyb21pdW1EYXRh
T2JqZWN0PiwgQ2xpcGJvYXJkQWNjZXNzUG9saWN5LCBGcmFtZSopOworICAgICAgICBDbGlwYm9h
cmRDaHJvbWl1bShib29sLCBQYXNzUmVmUHRyPFJlYWRhYmxlRGF0YU9iamVjdD4sIENsaXBib2Fy
ZEFjY2Vzc1BvbGljeSwgRnJhbWUqKTsKIAogICAgICAgICB2b2lkIHJlc2V0RnJvbUNsaXBib2Fy
ZCgpOwogICAgICAgICB2b2lkIHNldERyYWdJbWFnZShDYWNoZWRJbWFnZSosIE5vZGUqLCBjb25z
dCBJbnRQb2ludCYpOwogICAgICAgICBSZWZQdHI8Q2hyb21pdW1EYXRhT2JqZWN0PiBtX2RhdGFP
YmplY3Q7CisgICAgICAgIFJlZlB0cjxSZWFkYWJsZURhdGFPYmplY3Q+IG1fcmVhZGFibGVEYXRh
T2JqZWN0OwogICAgICAgICBGcmFtZSogbV9mcmFtZTsKICAgICB9OwogCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RyYWdEYXRhQ2hyb21pdW0uY3BwIGIvV2ViQ29yZS9w
bGF0Zm9ybS9jaHJvbWl1bS9EcmFnRGF0YUNocm9taXVtLmNwcAppbmRleCA2NzRkMzRkLi5jMzc1
ZTdhIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RyYWdEYXRhQ2hyb21p
dW0uY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRHJhZ0RhdGFDaHJvbWl1bS5j
cHAKQEAgLTQxLDUyICs0MSw4NCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBi
b29sIGNvbnRhaW5zSFRNTChjb25zdCBDaHJvbWl1bURhdGFPYmplY3QqIGRyb3BEYXRhKQorc3Rh
dGljIGJvb2wgY29udGFpbnNIVE1MKGNvbnN0IERyYWdEYXRhUmVmKiBkcm9wRGF0YSkKIHsKLSAg
ICByZXR1cm4gZHJvcERhdGEtPnRleHRIdG1sLmxlbmd0aCgpID4gMDsKKyAgICBpZiAoZHJvcERh
dGEtPm9sZFdheSkKKyAgICAgICAgcmV0dXJuIGRyb3BEYXRhLT5vbGRXYXktPnRleHRIdG1sLmxl
bmd0aCgpID4gMDsKKyAgICByZXR1cm4gZHJvcERhdGEtPm5ld1dheS0+dHlwZXMoKS5jb250YWlu
cygidGV4dC9odG1sIik7CiB9CiAKIGJvb2wgRHJhZ0RhdGE6OmNvbnRhaW5zVVJMKEZpbGVuYW1l
Q29udmVyc2lvblBvbGljeSBmaWxlbmFtZVBvbGljeSkgY29uc3QKIHsKLSAgICByZXR1cm4gIWFz
VVJMKGZpbGVuYW1lUG9saWN5KS5pc0VtcHR5KCk7CisgICAgaWYgKG1fcGxhdGZvcm1EcmFnRGF0
YS5vbGRXYXkpCisgICAgICAgIHJldHVybiAhYXNVUkwoZmlsZW5hbWVQb2xpY3kpLmlzRW1wdHko
KTsKKyAgICByZXR1cm4gbV9wbGF0Zm9ybURyYWdEYXRhLm5ld1dheS0+dHlwZXMoKS5jb250YWlu
cygidGV4dC91cmktbGlzdCIpCisgICAgICAgIHx8IChmaWxlbmFtZVBvbGljeSA9PSBDb252ZXJ0
RmlsZW5hbWVzICYmIG1fcGxhdGZvcm1EcmFnRGF0YS5uZXdXYXktPmhhc0ZpbGVuYW1lcygpKTsK
IH0KIAogU3RyaW5nIERyYWdEYXRhOjphc1VSTChGaWxlbmFtZUNvbnZlcnNpb25Qb2xpY3kgZmls
ZW5hbWVQb2xpY3ksIFN0cmluZyogdGl0bGUpIGNvbnN0CiB7Ci0gICAgU3RyaW5nIHVybDsKLSAg
ICBpZiAobV9wbGF0Zm9ybURyYWdEYXRhLT5oYXNWYWxpZFVSTCgpKQotICAgICAgICB1cmwgPSBt
X3BsYXRmb3JtRHJhZ0RhdGEtPmdldFVSTCgpLnN0cmluZygpOwotICAgIGVsc2UgaWYgKGZpbGVu
YW1lUG9saWN5ID09IENvbnZlcnRGaWxlbmFtZXMgJiYgIW1fcGxhdGZvcm1EcmFnRGF0YS0+Zmls
ZW5hbWVzLmlzRW1wdHkoKSkgewotICAgICAgICBTdHJpbmcgZmlsZU5hbWUgPSBtX3BsYXRmb3Jt
RHJhZ0RhdGEtPmZpbGVuYW1lc1swXTsKKyAgICBpZiAobV9wbGF0Zm9ybURyYWdEYXRhLm9sZFdh
eSkgeworICAgICAgICBTdHJpbmcgdXJsOworICAgICAgICBpZiAobV9wbGF0Zm9ybURyYWdEYXRh
Lm9sZFdheS0+aGFzVmFsaWRVUkwoKSkKKyAgICAgICAgICAgIHVybCA9IG1fcGxhdGZvcm1EcmFn
RGF0YS5vbGRXYXktPmdldFVSTCgpLnN0cmluZygpOworICAgICAgICBlbHNlIGlmIChmaWxlbmFt
ZVBvbGljeSA9PSBDb252ZXJ0RmlsZW5hbWVzICYmICFtX3BsYXRmb3JtRHJhZ0RhdGEub2xkV2F5
LT5maWxlbmFtZXMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBTdHJpbmcgZmlsZU5hbWUgPSBt
X3BsYXRmb3JtRHJhZ0RhdGEub2xkV2F5LT5maWxlbmFtZXNbMF07CisgICAgICAgICAgICBmaWxl
TmFtZSA9IENocm9taXVtQnJpZGdlOjpnZXRBYnNvbHV0ZVBhdGgoZmlsZU5hbWUpOworICAgICAg
ICAgICAgdXJsID0gQ2hyb21pdW1CcmlkZ2U6OmZpbGVQYXRoVG9VUkwoZmlsZU5hbWUpLnN0cmlu
ZygpOworICAgICAgICB9CisgICAgIAorICAgICAgICAvLyB8dGl0bGV8IGNhbiBiZSBOVUxMCisg
ICAgICAgIGlmICh0aXRsZSkKKyAgICAgICAgICAgICp0aXRsZSA9IG1fcGxhdGZvcm1EcmFnRGF0
YS5vbGRXYXktPnVybFRpdGxlOworICAgICAgICByZXR1cm4gdXJsOworICAgIH0KKworICAgIFN0
cmluZyB1cmwgPSBtX3BsYXRmb3JtRHJhZ0RhdGEubmV3V2F5LT5nZXRVUkwodGl0bGUpOworICAg
IGlmICghS1VSTChLVVJMKCksIHVybCkuaXNWYWxpZCgpCisgICAgICAgICYmIGZpbGVuYW1lUG9s
aWN5ID09IENvbnZlcnRGaWxlbmFtZXMKKyAgICAgICAgJiYgbV9wbGF0Zm9ybURyYWdEYXRhLm5l
d1dheS0+aGFzRmlsZW5hbWVzKCkpIHsKKyAgICAgICAgU3RyaW5nIGZpbGVOYW1lID0gbV9wbGF0
Zm9ybURyYWdEYXRhLm5ld1dheS0+ZmlsZW5hbWVzKClbMF07CiAgICAgICAgIGZpbGVOYW1lID0g
Q2hyb21pdW1CcmlkZ2U6OmdldEFic29sdXRlUGF0aChmaWxlTmFtZSk7CiAgICAgICAgIHVybCA9
IENocm9taXVtQnJpZGdlOjpmaWxlUGF0aFRvVVJMKGZpbGVOYW1lKS5zdHJpbmcoKTsKKyAgICAg
ICAgaWYgKHRpdGxlKQorICAgICAgICAgICAgKnRpdGxlID0gIiI7CiAgICAgfQotIAotICAgIC8v
IHx0aXRsZXwgY2FuIGJlIE5VTEwKLSAgICBpZiAodGl0bGUpCi0gICAgICAgICp0aXRsZSA9IG1f
cGxhdGZvcm1EcmFnRGF0YS0+dXJsVGl0bGU7CiAgICAgcmV0dXJuIHVybDsKIH0KIAogYm9vbCBE
cmFnRGF0YTo6Y29udGFpbnNGaWxlcygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICFtX3BsYXRmb3Jt
RHJhZ0RhdGEtPmZpbGVuYW1lcy5pc0VtcHR5KCk7CisgICAgaWYgKG1fcGxhdGZvcm1EcmFnRGF0
YS5vbGRXYXkpCisgICAgICAgIHJldHVybiAhbV9wbGF0Zm9ybURyYWdEYXRhLm9sZFdheS0+Zmls
ZW5hbWVzLmlzRW1wdHkoKTsKKyAgICByZXR1cm4gbV9wbGF0Zm9ybURyYWdEYXRhLm5ld1dheS0+
aGFzRmlsZW5hbWVzKCk7CiB9CiAKIHZvaWQgRHJhZ0RhdGE6OmFzRmlsZW5hbWVzKFZlY3RvcjxT
dHJpbmc+JiByZXN1bHQpIGNvbnN0CiB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3Bs
YXRmb3JtRHJhZ0RhdGEtPmZpbGVuYW1lcy5zaXplKCk7ICsraSkKLSAgICAgICAgcmVzdWx0LmFw
cGVuZChtX3BsYXRmb3JtRHJhZ0RhdGEtPmZpbGVuYW1lc1tpXSk7CisgICAgaWYgKG1fcGxhdGZv
cm1EcmFnRGF0YS5vbGRXYXkpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3Bs
YXRmb3JtRHJhZ0RhdGEub2xkV2F5LT5maWxlbmFtZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAg
ICByZXN1bHQuYXBwZW5kKG1fcGxhdGZvcm1EcmFnRGF0YS5vbGRXYXktPmZpbGVuYW1lc1tpXSk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcyA9
IG1fcGxhdGZvcm1EcmFnRGF0YS5uZXdXYXktPmZpbGVuYW1lcygpOworICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGZpbGVuYW1lcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIHJlc3Vs
dC5hcHBlbmQoZmlsZW5hbWVzW2ldKTsKKyAgICB9CiB9CiAKIGJvb2wgRHJhZ0RhdGE6OmNvbnRh
aW5zUGxhaW5UZXh0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gIW1fcGxhdGZvcm1EcmFnRGF0YS0+
cGxhaW5UZXh0LmlzRW1wdHkoKTsKKyAgICBpZiAobV9wbGF0Zm9ybURyYWdEYXRhLm9sZFdheSkK
KyAgICAgICAgcmV0dXJuICFtX3BsYXRmb3JtRHJhZ0RhdGEub2xkV2F5LT5wbGFpblRleHQuaXNF
bXB0eSgpOworICAgIHJldHVybiBtX3BsYXRmb3JtRHJhZ0RhdGEubmV3V2F5LT50eXBlcygpLmNv
bnRhaW5zKCJ0ZXh0L3BsYWluIik7CiB9CiAKIFN0cmluZyBEcmFnRGF0YTo6YXNQbGFpblRleHQo
KSBjb25zdAogewotICAgIHJldHVybiBtX3BsYXRmb3JtRHJhZ0RhdGEtPnBsYWluVGV4dDsKKyAg
ICBpZiAobV9wbGF0Zm9ybURyYWdEYXRhLm9sZFdheSkKKyAgICAgICAgcmV0dXJuIG1fcGxhdGZv
cm1EcmFnRGF0YS5vbGRXYXktPnBsYWluVGV4dDsKKyAgICBib29sIGlnbm9yZWRTdWNjZXNzOwor
ICAgIHJldHVybiBtX3BsYXRmb3JtRHJhZ0RhdGEubmV3V2F5LT5nZXREYXRhKCJ0ZXh0L3BsYWlu
IiwgaWdub3JlZFN1Y2Nlc3MpOwogfQogCiBib29sIERyYWdEYXRhOjpjb250YWluc0NvbG9yKCkg
Y29uc3QKQEAgLTEwMSwxNSArMTMzLDE5IEBAIGJvb2wgRHJhZ0RhdGE6OmNhblNtYXJ0UmVwbGFj
ZSgpIGNvbnN0CiAgICAgLy8gVGhpcyBpcyBhbGxvd2VkIHdoZW5ldmVyIHRoZSBkcmFnIGRhdGEg
Y29udGFpbnMgYSAncmFuZ2UnIChpZS4sCiAgICAgLy8gQ2xpcGJvYXJkV2luOjp3cml0ZVJhbmdl
IGlzIGNhbGxlZCkuICBGb3IgZXhhbXBsZSwgZHJhZ2dpbmcgYSBsaW5rCiAgICAgLy8gc2hvdWxk
IG5vdCByZXN1bHQgaW4gYSBzcGFjZSBiZWluZyBhZGRlZC4KLSAgICByZXR1cm4gIW1fcGxhdGZv
cm1EcmFnRGF0YS0+cGxhaW5UZXh0LmlzRW1wdHkoKQotICAgICAgICAmJiAhbV9wbGF0Zm9ybURy
YWdEYXRhLT5oYXNWYWxpZFVSTCgpOworICAgIGlmIChtX3BsYXRmb3JtRHJhZ0RhdGEub2xkV2F5
KQorICAgICAgICByZXR1cm4gIW1fcGxhdGZvcm1EcmFnRGF0YS5vbGRXYXktPnBsYWluVGV4dC5p
c0VtcHR5KCkKKyAgICAgICAgICAgICYmICFtX3BsYXRmb3JtRHJhZ0RhdGEub2xkV2F5LT5oYXNW
YWxpZFVSTCgpOworICAgIHJldHVybiBtX3BsYXRmb3JtRHJhZ0RhdGEubmV3V2F5LT50eXBlcygp
LmNvbnRhaW5zKCJ0ZXh0L3BsYWluIikKKyAgICAgICAgLy8gRklYTUU6IERvIHdlIG5lZWQgdG8g
Y2hlY2sgVVJMIHZhbGlkaXR5PworICAgICAgICAmJiAhbV9wbGF0Zm9ybURyYWdEYXRhLm5ld1dh
eS0+dHlwZXMoKS5jb250YWlucygidGV4dC91cmktbGlzdCIpOwogfQogCiBib29sIERyYWdEYXRh
Ojpjb250YWluc0NvbXBhdGlibGVDb250ZW50KCkgY29uc3QKIHsKICAgICByZXR1cm4gY29udGFp
bnNQbGFpblRleHQoKQogICAgICAgICB8fCBjb250YWluc1VSTCgpCi0gICAgICAgIHx8IGNvbnRh
aW5zSFRNTChtX3BsYXRmb3JtRHJhZ0RhdGEpCisgICAgICAgIHx8IGNvbnRhaW5zSFRNTCgmbV9w
bGF0Zm9ybURyYWdEYXRhKQogICAgICAgICB8fCBjb250YWluc0NvbG9yKCkKICAgICAgICAgfHwg
Y29udGFpbnNGaWxlcygpOwogfQpAQCAtMTM0LDEwICsxNzAsMjAgQEAgUGFzc1JlZlB0cjxEb2N1
bWVudEZyYWdtZW50PiBEcmFnRGF0YTo6YXNGcmFnbWVudChEb2N1bWVudCogZG9jKSBjb25zdAog
ICAgICAgICAvLyAgICByZXR1cm4gZnJhZ21lbnQ7CiAgICAgfQogCi0gICAgaWYgKCFtX3BsYXRm
b3JtRHJhZ0RhdGEtPnRleHRIdG1sLmlzRW1wdHkoKSkgewotICAgICAgICBSZWZQdHI8RG9jdW1l
bnRGcmFnbWVudD4gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoZG9jLAotICAg
ICAgICAgICAgbV9wbGF0Zm9ybURyYWdEYXRhLT50ZXh0SHRtbCwgbV9wbGF0Zm9ybURyYWdEYXRh
LT5odG1sQmFzZVVybCwgRnJhZ21lbnRTY3JpcHRpbmdOb3RBbGxvd2VkKTsKLSAgICAgICAgcmV0
dXJuIGZyYWdtZW50LnJlbGVhc2UoKTsKKyAgICBpZiAobV9wbGF0Zm9ybURyYWdEYXRhLm9sZFdh
eSkgeworICAgICAgICBpZiAoIW1fcGxhdGZvcm1EcmFnRGF0YS5vbGRXYXktPnRleHRIdG1sLmlz
RW1wdHkoKSkgeworICAgICAgICAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50
ID0gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKGRvYywKKyAgICAgICAgICAgICAgICBtX3BsYXRm
b3JtRHJhZ0RhdGEub2xkV2F5LT50ZXh0SHRtbCwgbV9wbGF0Zm9ybURyYWdEYXRhLm9sZFdheS0+
aHRtbEJhc2VVcmwsIEZyYWdtZW50U2NyaXB0aW5nTm90QWxsb3dlZCk7CisgICAgICAgICAgICBy
ZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgaWYgKGNvbnRhaW5zSFRNTCgmbV9wbGF0Zm9ybURyYWdEYXRhKSkgeworICAgICAgICAgICAg
U3RyaW5nIGJhc2VVUkw7CisgICAgICAgICAgICBTdHJpbmcgaHRtbCA9IG1fcGxhdGZvcm1EcmFn
RGF0YS5uZXdXYXktPmdldEhUTUwoJmJhc2VVUkwpOworICAgICAgICAgICAgUmVmUHRyPERvY3Vt
ZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKGRvYywKKyAg
ICAgICAgICAgICAgICBodG1sLCBiYXNlVVJMLCBGcmFnbWVudFNjcmlwdGluZ05vdEFsbG93ZWQp
OworICAgICAgICAgICAgcmV0dXJuIGZyYWdtZW50LnJlbGVhc2UoKTsKKyAgICAgICAgfQogICAg
IH0KIAogICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9EcmFnRGF0YVJlZi5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EcmFnRGF0YVJlZi5o
CmluZGV4IGRlMWZhMWMuLmJhZGM5MzUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vRHJhZ0RhdGFSZWYuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RyYWdE
YXRhUmVmLmgKQEAgLTMyLDEwICszMiwxOCBAQAogI2RlZmluZSBEcmFnRGF0YVJlZl9oCiAKICNp
bmNsdWRlICJDaHJvbWl1bURhdGFPYmplY3QuaCIKKyNpbmNsdWRlICJSZWFkYWJsZURhdGFPYmpl
Y3QuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgdHlwZWRlZiBDaHJvbWl1bURhdGFP
YmplY3QqIERyYWdEYXRhUmVmOworc3RydWN0IERyYWdEYXRhUmVmIHsKKyAgICAvLyBGSVhNRTog
VGhlc2UgYXJlIGRlbGliZXJhdGVseSBub24tZXhwbGljaXQgZm9yIHRoZSBtb21lbnQuIE9uY2Ug
Q2hyb21pdW0KKyAgICAvLyBpcyBzd2l0Y2hlZCBvdmVyIHRvIHRoZSBuZXcgd2F5IG9mIGhhbmRs
aW5nIGRyYWdzLCByZXZlcnQgdGhpcyBjaGFuZ2UuCisgICAgRHJhZ0RhdGFSZWYoQ2hyb21pdW1E
YXRhT2JqZWN0KiBkYXRhKSA6IG9sZFdheShkYXRhKSB7fQorICAgIERyYWdEYXRhUmVmKFJlYWRh
YmxlRGF0YU9iamVjdCogZGF0YSkgOiBuZXdXYXkoZGF0YSkge30KKyAgICBDaHJvbWl1bURhdGFP
YmplY3QqIG9sZFdheTsKKyAgICBSZWFkYWJsZURhdGFPYmplY3QqIG5ld1dheTsKK307CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggOTBkOTQ2MC4uYjk2ZmJlOCAx
MDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTAtMDgtMzEgIERhbmllbCBDaGVuZyAg
PGRjaGVuZ0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgRm9vLgorCisgICAgICAgIE1lcmdlIGJyYW5jaCAncmRvLXdkbycgaW50
byBkdGRlLW5ldworCisgICAgICAgIFNuYXBzaG90IG9mIGN1cnJlbnQgd29yay4KKworICAgICAg
ICBOZWVkIGEgc2hvcnQgZGVzY3JpcHRpb24gYW5kIGJ1ZyBVUkwgKE9PUFMhKQorCisgICAgICAg
ICogc3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmRy
YWdUYXJnZXREcmFnRW50ZXJOZXcpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6ZHJh
Z1RhcmdldERyYWdMZWF2ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpkcmFnVGFy
Z2V0RHJvcCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpkcmFnVGFyZ2V0RHJhZ0Vu
dGVyT3JPdmVyKToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuaDoKKwogMjAxMC0wOC0zMCAg
U2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5y
ZXZpZXdlZCwgcm9sbGluZyBvdXQgcjY2MTk4LgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJWaWV3SW1wbC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNw
cAppbmRleCA1MDY1ZjVlLi45NWRhY2EwIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYlZpZXdJbXBsLmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNw
cApAQCAtODEsNiArODEsNyBAQAogI2luY2x1ZGUgIlBvcHVwTWVudUNocm9taXVtLmgiCiAjaW5j
bHVkZSAiUG9wdXBNZW51Q2xpZW50LmgiCiAjaW5jbHVkZSAiUHJvZ3Jlc3NUcmFja2VyLmgiCisj
aW5jbHVkZSAiUmVhZGFibGVEYXRhT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgog
I2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIK
QEAgLTE1ODMsNiArMTU4NCwyMSBAQCBXZWJEcmFnT3BlcmF0aW9uIFdlYlZpZXdJbXBsOjpkcmFn
VGFyZ2V0RHJhZ0VudGVyKAogICAgIHJldHVybiBkcmFnVGFyZ2V0RHJhZ0VudGVyT3JPdmVyKGNs
aWVudFBvaW50LCBzY3JlZW5Qb2ludCwgRHJhZ0VudGVyKTsKIH0KIAorV2ViRHJhZ09wZXJhdGlv
biBXZWJWaWV3SW1wbDo6ZHJhZ1RhcmdldERyYWdFbnRlck5ldygKKyAgICBpbnQgaWRlbnRpdHks
CisgICAgY29uc3QgV2ViUG9pbnQmIGNsaWVudFBvaW50LAorICAgIGNvbnN0IFdlYlBvaW50JiBz
Y3JlZW5Qb2ludCwKKyAgICBXZWJEcmFnT3BlcmF0aW9uc01hc2sgb3BlcmF0aW9uc0FsbG93ZWQp
Cit7CisgICAgQVNTRVJUKCFtX2N1cnJlbnREcmFnRGF0YU5ldy5nZXQoKSk7CisKKyAgICBtX2N1
cnJlbnREcmFnRGF0YU5ldyA9IFJlYWRhYmxlRGF0YU9iamVjdDo6Y3JlYXRlKHRydWUpOworICAg
IG1fZHJhZ0lkZW50aXR5ID0gaWRlbnRpdHk7CisgICAgbV9vcGVyYXRpb25zQWxsb3dlZCA9IG9w
ZXJhdGlvbnNBbGxvd2VkOworCisgICAgcmV0dXJuIGRyYWdUYXJnZXREcmFnRW50ZXJPck92ZXIo
Y2xpZW50UG9pbnQsIHNjcmVlblBvaW50LCBEcmFnRW50ZXIpOworfQorCiBXZWJEcmFnT3BlcmF0
aW9uIFdlYlZpZXdJbXBsOjpkcmFnVGFyZ2V0RHJhZ092ZXIoCiAgICAgY29uc3QgV2ViUG9pbnQm
IGNsaWVudFBvaW50LAogICAgIGNvbnN0IFdlYlBvaW50JiBzY3JlZW5Qb2ludCwKQEAgLTE1OTUs
MTkgKzE2MTEsMzQgQEAgV2ViRHJhZ09wZXJhdGlvbiBXZWJWaWV3SW1wbDo6ZHJhZ1RhcmdldERy
YWdPdmVyKAogCiB2b2lkIFdlYlZpZXdJbXBsOjpkcmFnVGFyZ2V0RHJhZ0xlYXZlKCkKIHsKLSAg
ICBBU1NFUlQobV9jdXJyZW50RHJhZ0RhdGEuZ2V0KCkpOwotCi0gICAgRHJhZ0RhdGEgZHJhZ0Rh
dGEoCi0gICAgICAgIG1fY3VycmVudERyYWdEYXRhLmdldCgpLAotICAgICAgICBJbnRQb2ludCgp
LAotICAgICAgICBJbnRQb2ludCgpLAotICAgICAgICBzdGF0aWNfY2FzdDxEcmFnT3BlcmF0aW9u
PihtX29wZXJhdGlvbnNBbGxvd2VkKSk7Ci0KLSAgICBtX2RyYWdUYXJnZXREaXNwYXRjaCA9IHRy
dWU7Ci0gICAgbV9wYWdlLT5kcmFnQ29udHJvbGxlcigpLT5kcmFnRXhpdGVkKCZkcmFnRGF0YSk7
Ci0gICAgbV9kcmFnVGFyZ2V0RGlzcGF0Y2ggPSBmYWxzZTsKKyAgICAvLyBGSVhNRTogVGhpcyBp
cyB0ZW1wb3Jhcnkgd2hpbGUgdW50aWwgQ2hyb21pdW0gc2lkZSBpcyB0cmFuc2l0aW9uZWQgdG8g
dXNlCisgICAgLy8gdGhlIG5ldyBkcmFnZ2luZyBpbnRlcmZhY2UuCisgICAgaWYgKG1fY3VycmVu
dERyYWdEYXRhLmdldCgpKSB7CisgICAgICAgIERyYWdEYXRhIGRyYWdEYXRhKAorICAgICAgICAg
ICAgbV9jdXJyZW50RHJhZ0RhdGEuZ2V0KCksCisgICAgICAgICAgICBJbnRQb2ludCgpLAorICAg
ICAgICAgICAgSW50UG9pbnQoKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PERyYWdPcGVyYXRp
b24+KG1fb3BlcmF0aW9uc0FsbG93ZWQpKTsKKworICAgICAgICBtX2RyYWdUYXJnZXREaXNwYXRj
aCA9IHRydWU7CisgICAgICAgIG1fcGFnZS0+ZHJhZ0NvbnRyb2xsZXIoKS0+ZHJhZ0V4aXRlZCgm
ZHJhZ0RhdGEpOworICAgICAgICBtX2RyYWdUYXJnZXREaXNwYXRjaCA9IGZhbHNlOworICAgIH0g
ZWxzZSBpZiAobV9jdXJyZW50RHJhZ0RhdGFOZXcuZ2V0KCkpIHsKKyAgICAgICAgRHJhZ0RhdGEg
ZHJhZ0RhdGEoCisgICAgICAgICAgICBtX2N1cnJlbnREcmFnRGF0YU5ldy5nZXQoKSwKKyAgICAg
ICAgICAgIEludFBvaW50KCksCisgICAgICAgICAgICBJbnRQb2ludCgpLAorICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8RHJhZ09wZXJhdGlvbj4obV9vcGVyYXRpb25zQWxsb3dlZCkpOworCisgICAg
ICAgIG1fZHJhZ1RhcmdldERpc3BhdGNoID0gdHJ1ZTsKKyAgICAgICAgbV9wYWdlLT5kcmFnQ29u
dHJvbGxlcigpLT5kcmFnRXhpdGVkKCZkcmFnRGF0YSk7CisgICAgICAgIG1fZHJhZ1RhcmdldERp
c3BhdGNoID0gZmFsc2U7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKGZhbHNlKTsKKyAg
ICB9CiAKICAgICBtX2N1cnJlbnREcmFnRGF0YSA9IDA7CisgICAgbV9jdXJyZW50RHJhZ0RhdGFO
ZXcgPSAwOwogICAgIG1fZHJvcEVmZmVjdCA9IERyb3BFZmZlY3REZWZhdWx0OwogICAgIG1fZHJh
Z09wZXJhdGlvbiA9IFdlYkRyYWdPcGVyYXRpb25Ob25lOwogICAgIG1fZHJhZ0lkZW50aXR5ID0g
MDsKQEAgLTE2MTYsOCArMTY0Nyw2IEBAIHZvaWQgV2ViVmlld0ltcGw6OmRyYWdUYXJnZXREcmFn
TGVhdmUoKQogdm9pZCBXZWJWaWV3SW1wbDo6ZHJhZ1RhcmdldERyb3AoY29uc3QgV2ViUG9pbnQm
IGNsaWVudFBvaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2Vi
UG9pbnQmIHNjcmVlblBvaW50KQogewotICAgIEFTU0VSVChtX2N1cnJlbnREcmFnRGF0YS5nZXQo
KSk7Ci0KICAgICAvLyBJZiB0aGlzIHdlYnZpZXcgdHJhbnNpdGlvbnMgZnJvbSB0aGUgImRyb3Ag
YWNjZXB0aW5nIiBzdGF0ZSB0byB0aGUgIm5vdAogICAgIC8vIGFjY2VwdGluZyIgc3RhdGUsIHRo
ZW4gb3VyIElQQyBtZXNzYWdlIHJlcGx5IGluZGljYXRpbmcgdGhhdCBtYXkgYmUgaW4tCiAgICAg
Ly8gZmxpZ2h0LCBvciBlbHNlIGRlbGF5ZWQgYnkgamF2YXNjcmlwdCBwcm9jZXNzaW5nIGluIHRo
aXMgd2Vidmlldy4gIElmIGEKQEAgLTE2MzAsMTcgKzE2NTksMzQgQEAgdm9pZCBXZWJWaWV3SW1w
bDo6ZHJhZ1RhcmdldERyb3AoY29uc3QgV2ViUG9pbnQmIGNsaWVudFBvaW50LAogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgRHJhZ0RhdGEgZHJhZ0RhdGEoCi0gICAgICAgIG1fY3VycmVu
dERyYWdEYXRhLmdldCgpLAotICAgICAgICBjbGllbnRQb2ludCwKLSAgICAgICAgc2NyZWVuUG9p
bnQsCi0gICAgICAgIHN0YXRpY19jYXN0PERyYWdPcGVyYXRpb24+KG1fb3BlcmF0aW9uc0FsbG93
ZWQpKTsKLQotICAgIG1fZHJhZ1RhcmdldERpc3BhdGNoID0gdHJ1ZTsKLSAgICBtX3BhZ2UtPmRy
YWdDb250cm9sbGVyKCktPnBlcmZvcm1EcmFnKCZkcmFnRGF0YSk7Ci0gICAgbV9kcmFnVGFyZ2V0
RGlzcGF0Y2ggPSBmYWxzZTsKKyAgICAvLyBGSVhNRTogVGhpcyBpcyB0ZW1wb3Jhcnkgd2hpbGUg
dW50aWwgQ2hyb21pdW0gc2lkZSBpcyB0cmFuc2l0aW9uZWQgdG8gdXNlCisgICAgLy8gdGhlIG5l
dyBkcmFnZ2luZyBpbnRlcmZhY2UuCisgICAgaWYgKG1fY3VycmVudERyYWdEYXRhLmdldCgpKSB7
CisgICAgICAgIERyYWdEYXRhIGRyYWdEYXRhKAorICAgICAgICAgICAgbV9jdXJyZW50RHJhZ0Rh
dGEuZ2V0KCksCisgICAgICAgICAgICBjbGllbnRQb2ludCwKKyAgICAgICAgICAgIHNjcmVlblBv
aW50LAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8RHJhZ09wZXJhdGlvbj4obV9vcGVyYXRpb25z
QWxsb3dlZCkpOworCisgICAgICAgIG1fZHJhZ1RhcmdldERpc3BhdGNoID0gdHJ1ZTsKKyAgICAg
ICAgbV9wYWdlLT5kcmFnQ29udHJvbGxlcigpLT5wZXJmb3JtRHJhZygmZHJhZ0RhdGEpOworICAg
ICAgICBtX2RyYWdUYXJnZXREaXNwYXRjaCA9IGZhbHNlOworICAgIH0gZWxzZSBpZiAobV9jdXJy
ZW50RHJhZ0RhdGFOZXcuZ2V0KCkpIHsKKyAgICAgICAgRHJhZ0RhdGEgZHJhZ0RhdGEoCisgICAg
ICAgICAgICBtX2N1cnJlbnREcmFnRGF0YU5ldy5nZXQoKSwKKyAgICAgICAgICAgIGNsaWVudFBv
aW50LAorICAgICAgICAgICAgc2NyZWVuUG9pbnQsCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxE
cmFnT3BlcmF0aW9uPihtX29wZXJhdGlvbnNBbGxvd2VkKSk7CisKKyAgICAgICAgbV9kcmFnVGFy
Z2V0RGlzcGF0Y2ggPSB0cnVlOworICAgICAgICBtX3BhZ2UtPmRyYWdDb250cm9sbGVyKCktPnBl
cmZvcm1EcmFnKCZkcmFnRGF0YSk7CisgICAgICAgIG1fZHJhZ1RhcmdldERpc3BhdGNoID0gZmFs
c2U7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKGZhbHNlKTsKKyAgICB9CiAKICAgICBt
X2N1cnJlbnREcmFnRGF0YSA9IDA7CisgICAgbV9jdXJyZW50RHJhZ0RhdGFOZXcgPSAwOwogICAg
IG1fZHJvcEVmZmVjdCA9IERyb3BFZmZlY3REZWZhdWx0OwogICAgIG1fZHJhZ09wZXJhdGlvbiA9
IFdlYkRyYWdPcGVyYXRpb25Ob25lOwogICAgIG1fZHJhZ0lkZW50aXR5ID0gMDsKQEAgLTE2NTYs
MjggKzE3MDIsNTMgQEAgaW50IFdlYlZpZXdJbXBsOjpkcmFnSWRlbnRpdHkoKQogCiBXZWJEcmFn
T3BlcmF0aW9uIFdlYlZpZXdJbXBsOjpkcmFnVGFyZ2V0RHJhZ0VudGVyT3JPdmVyKGNvbnN0IFdl
YlBvaW50JiBjbGllbnRQb2ludCwgY29uc3QgV2ViUG9pbnQmIHNjcmVlblBvaW50LCBEcmFnQWN0
aW9uIGRyYWdBY3Rpb24pCiB7Ci0gICAgQVNTRVJUKG1fY3VycmVudERyYWdEYXRhLmdldCgpKTsK
LQotICAgIERyYWdEYXRhIGRyYWdEYXRhKAotICAgICAgICBtX2N1cnJlbnREcmFnRGF0YS5nZXQo
KSwKLSAgICAgICAgY2xpZW50UG9pbnQsCi0gICAgICAgIHNjcmVlblBvaW50LAotICAgICAgICBz
dGF0aWNfY2FzdDxEcmFnT3BlcmF0aW9uPihtX29wZXJhdGlvbnNBbGxvd2VkKSk7Ci0KLSAgICBt
X2Ryb3BFZmZlY3QgPSBEcm9wRWZmZWN0RGVmYXVsdDsKLSAgICBtX2RyYWdUYXJnZXREaXNwYXRj
aCA9IHRydWU7Ci0gICAgRHJhZ09wZXJhdGlvbiBlZmZlY3QgPSBkcmFnQWN0aW9uID09IERyYWdF
bnRlciA/IG1fcGFnZS0+ZHJhZ0NvbnRyb2xsZXIoKS0+ZHJhZ0VudGVyZWQoJmRyYWdEYXRhKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBtX3Bh
Z2UtPmRyYWdDb250cm9sbGVyKCktPmRyYWdVcGRhdGVkKCZkcmFnRGF0YSk7Ci0gICAgLy8gTWFz
ayB0aGUgb3BlcmF0aW9uIGFnYWluc3QgdGhlIGRyYWcgc291cmNlJ3MgYWxsb3dlZCBvcGVyYXRp
b25zLgotICAgIGlmICghKGVmZmVjdCAmIGRyYWdEYXRhLmRyYWdnaW5nU291cmNlT3BlcmF0aW9u
TWFzaygpKSkKLSAgICAgICAgZWZmZWN0ID0gRHJhZ09wZXJhdGlvbk5vbmU7Ci0gICAgbV9kcmFn
VGFyZ2V0RGlzcGF0Y2ggPSBmYWxzZTsKLQotICAgIGlmIChtX2Ryb3BFZmZlY3QgIT0gRHJvcEVm
ZmVjdERlZmF1bHQpIHsKLSAgICAgICAgbV9kcmFnT3BlcmF0aW9uID0gKG1fZHJvcEVmZmVjdCAh
PSBEcm9wRWZmZWN0Tm9uZSkgPyBXZWJEcmFnT3BlcmF0aW9uQ29weQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFdlYkRyYWdPcGVy
YXRpb25Ob25lOwotICAgIH0gZWxzZQotICAgICAgICBtX2RyYWdPcGVyYXRpb24gPSBzdGF0aWNf
Y2FzdDxXZWJEcmFnT3BlcmF0aW9uPihlZmZlY3QpOworICAgIC8vIEZJWE1FOiBUaGlzIGlzIHRl
bXBvcmFyeSB3aGlsZSB1bnRpbCBDaHJvbWl1bSBzaWRlIGlzIHRyYW5zaXRpb25lZCB0byB1c2UK
KyAgICAvLyB0aGUgbmV3IGRyYWdnaW5nIGludGVyZmFjZS4KKyAgICBpZiAobV9jdXJyZW50RHJh
Z0RhdGEuZ2V0KCkpIHsKKyAgICAgICAgRHJhZ0RhdGEgZHJhZ0RhdGEoCisgICAgICAgICAgICBt
X2N1cnJlbnREcmFnRGF0YS5nZXQoKSwKKyAgICAgICAgICAgIGNsaWVudFBvaW50LAorICAgICAg
ICAgICAgc2NyZWVuUG9pbnQsCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxEcmFnT3BlcmF0aW9u
PihtX29wZXJhdGlvbnNBbGxvd2VkKSk7CisKKyAgICAgICAgbV9kcm9wRWZmZWN0ID0gRHJvcEVm
ZmVjdERlZmF1bHQ7CisgICAgICAgIG1fZHJhZ1RhcmdldERpc3BhdGNoID0gdHJ1ZTsKKyAgICAg
ICAgRHJhZ09wZXJhdGlvbiBlZmZlY3QgPSBkcmFnQWN0aW9uID09IERyYWdFbnRlciA/IG1fcGFn
ZS0+ZHJhZ0NvbnRyb2xsZXIoKS0+ZHJhZ0VudGVyZWQoJmRyYWdEYXRhKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbV9wYWdlLT5kcmFn
Q29udHJvbGxlcigpLT5kcmFnVXBkYXRlZCgmZHJhZ0RhdGEpOworICAgICAgICAvLyBNYXNrIHRo
ZSBvcGVyYXRpb24gYWdhaW5zdCB0aGUgZHJhZyBzb3VyY2UncyBhbGxvd2VkIG9wZXJhdGlvbnMu
CisgICAgICAgIGlmICghKGVmZmVjdCAmIGRyYWdEYXRhLmRyYWdnaW5nU291cmNlT3BlcmF0aW9u
TWFzaygpKSkKKyAgICAgICAgICAgIGVmZmVjdCA9IERyYWdPcGVyYXRpb25Ob25lOworICAgICAg
ICBtX2RyYWdUYXJnZXREaXNwYXRjaCA9IGZhbHNlOworCisgICAgICAgIGlmIChtX2Ryb3BFZmZl
Y3QgIT0gRHJvcEVmZmVjdERlZmF1bHQpIHsKKyAgICAgICAgICAgIG1fZHJhZ09wZXJhdGlvbiA9
IChtX2Ryb3BFZmZlY3QgIT0gRHJvcEVmZmVjdE5vbmUpID8gV2ViRHJhZ09wZXJhdGlvbkNvcHkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDogV2ViRHJhZ09wZXJhdGlvbk5vbmU7CisgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgbV9kcmFnT3BlcmF0aW9uID0gc3RhdGljX2Nhc3Q8V2ViRHJhZ09wZXJhdGlvbj4oZWZmZWN0
KTsKKyAgICB9IGVsc2UgaWYgKG1fY3VycmVudERyYWdEYXRhTmV3LmdldCgpKSB7CisgICAgICAg
IERyYWdEYXRhIGRyYWdEYXRhKAorICAgICAgICAgICAgbV9jdXJyZW50RHJhZ0RhdGFOZXcuZ2V0
KCksCisgICAgICAgICAgICBjbGllbnRQb2ludCwKKyAgICAgICAgICAgIHNjcmVlblBvaW50LAor
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8RHJhZ09wZXJhdGlvbj4obV9vcGVyYXRpb25zQWxsb3dl
ZCkpOworCisgICAgICAgIG1fZHJvcEVmZmVjdCA9IERyb3BFZmZlY3REZWZhdWx0OworICAgICAg
ICBtX2RyYWdUYXJnZXREaXNwYXRjaCA9IHRydWU7CisgICAgICAgIERyYWdPcGVyYXRpb24gZWZm
ZWN0ID0gZHJhZ0FjdGlvbiA9PSBEcmFnRW50ZXIgPyBtX3BhZ2UtPmRyYWdDb250cm9sbGVyKCkt
PmRyYWdFbnRlcmVkKCZkcmFnRGF0YSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA6IG1fcGFnZS0+ZHJhZ0NvbnRyb2xsZXIoKS0+ZHJhZ1Vw
ZGF0ZWQoJmRyYWdEYXRhKTsKKyAgICAgICAgLy8gTWFzayB0aGUgb3BlcmF0aW9uIGFnYWluc3Qg
dGhlIGRyYWcgc291cmNlJ3MgYWxsb3dlZCBvcGVyYXRpb25zLgorICAgICAgICBpZiAoIShlZmZl
Y3QgJiBkcmFnRGF0YS5kcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2soKSkpCisgICAgICAgICAg
ICBlZmZlY3QgPSBEcmFnT3BlcmF0aW9uTm9uZTsKKyAgICAgICAgbV9kcmFnVGFyZ2V0RGlzcGF0
Y2ggPSBmYWxzZTsKKworICAgICAgICBpZiAobV9kcm9wRWZmZWN0ICE9IERyb3BFZmZlY3REZWZh
dWx0KSB7CisgICAgICAgICAgICBtX2RyYWdPcGVyYXRpb24gPSAobV9kcm9wRWZmZWN0ICE9IERy
b3BFZmZlY3ROb25lKSA/IFdlYkRyYWdPcGVyYXRpb25Db3B5CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFdlYkRyYWdPcGVy
YXRpb25Ob25lOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1fZHJhZ09wZXJhdGlvbiA9
IHN0YXRpY19jYXN0PFdlYkRyYWdPcGVyYXRpb24+KGVmZmVjdCk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgQVNTRVJUKGZhbHNlKTsKKyAgICB9CiAKICAgICBpZiAoZHJhZ0FjdGlvbiA9PSBEcmFn
T3ZlcikKICAgICAgICAgbV9kcmFnU2Nyb2xsVGltZXItPnRyaWdnZXJTY3JvbGwobWFpbkZyYW1l
SW1wbCgpLT5mcmFtZVZpZXcoKSwgY2xpZW50UG9pbnQpOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1w
bC5oCmluZGV4IGMyOTYxMjEuLmYxZjBiZmQgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViVmlld0ltcGwuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgK
QEAgLTYzLDYgKzYzLDcgQEAgY2xhc3MgUGxhdGZvcm1LZXlib2FyZEV2ZW50OwogY2xhc3MgUG9w
dXBDb250YWluZXI7CiBjbGFzcyBQb3B1cE1lbnVDbGllbnQ7CiBjbGFzcyBSYW5nZTsKK2NsYXNz
IFJlYWRhYmxlRGF0YU9iamVjdDsKIGNsYXNzIFJlbmRlclRoZW1lOwogY2xhc3MgV2lkZ2V0Owog
fQpAQCAtMTQ4LDYgKzE0OSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIGNvbnN0IFdlYlBvaW50JiBj
bGllbnRQb2ludCwKICAgICAgICAgY29uc3QgV2ViUG9pbnQmIHNjcmVlblBvaW50LAogICAgICAg
ICBXZWJEcmFnT3BlcmF0aW9uc01hc2sgb3BlcmF0aW9uc0FsbG93ZWQpOworICAgIHZpcnR1YWwg
V2ViRHJhZ09wZXJhdGlvbiBkcmFnVGFyZ2V0RHJhZ0VudGVyTmV3KAorICAgICAgICBpbnQgaWRl
bnRpdHksCisgICAgICAgIGNvbnN0IFdlYlBvaW50JiBjbGllbnRQb2ludCwKKyAgICAgICAgY29u
c3QgV2ViUG9pbnQmIHNjcmVlblBvaW50LAorICAgICAgICBXZWJEcmFnT3BlcmF0aW9uc01hc2sg
b3BlcmF0aW9uc0FsbG93ZWQpOwogICAgIHZpcnR1YWwgV2ViRHJhZ09wZXJhdGlvbiBkcmFnVGFy
Z2V0RHJhZ092ZXIoCiAgICAgICAgIGNvbnN0IFdlYlBvaW50JiBjbGllbnRQb2ludCwKICAgICAg
ICAgY29uc3QgV2ViUG9pbnQmIHNjcmVlblBvaW50LApAQCAtNDE4LDYgKzQyNCw4IEBAIHByaXZh
dGU6CiAKICAgICAvLyBBIGNvcHkgb2YgdGhlIHdlYiBkcm9wIGRhdGEgb2JqZWN0IHdlIHJlY2Vp
dmVkIGZyb20gdGhlIGJyb3dzZXIuCiAgICAgUmVmUHRyPFdlYkNvcmU6OkNocm9taXVtRGF0YU9i
amVjdD4gbV9jdXJyZW50RHJhZ0RhdGE7CisgICAgLy8gRklYTUU6IFJlbW92ZSB0aGUgZHVwbGlj
YXRpb24gb25jZSBDaHJvbWl1bSBpcyBzd2l0Y2hlZCBvdmVyLgorICAgIFJlZlB0cjxXZWJDb3Jl
OjpSZWFkYWJsZURhdGFPYmplY3Q+IG1fY3VycmVudERyYWdEYXRhTmV3OwogCiAgICAgLy8gVGhl
IHBvaW50IHJlbGF0aXZlIHRvIHRoZSBjbGllbnQgYXJlYSB3aGVyZSB0aGUgbW91c2Ugd2FzIGxh
c3QgcHJlc3NlZAogICAgIC8vIGRvd24uIFRoaXMgaXMgdXNlZCBieSB0aGUgZHJhZyBjbGllbnQg
dG8gZGV0ZXJtaW5lIHdoYXQgd2FzIHVuZGVyIHRoZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66115</attachid>
            <date>2010-08-31 14:54:03 -0700</date>
            <delta_ts>2010-08-31 15:02:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>foo.patch</filename>
            <type>text/plain</type>
            <size>25266</size>
            <attacher name="Daniel Cheng">dcheng</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OTc2ZDQwNy4uNjE2YjRjMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTIsNiArMiw0NSBAQAogCiAgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgogCisgICAgICAgIFtjaHJvbWl1bV0gUHJlcGFyZSBDbGlwYm9hcmQvRHJh
Z0RhdGEgZm9yIHRyYW5zaXRpb24gdG8gbmV3IGRyYWctYW5kLWRyb3AgaW50ZXJmYWNlLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQ5OTIKKworICAg
ICAgICBJbiBvcmRlciB0byBhdm9pZCBicmVha2luZyBDaHJvbWl1bSwgd2UgaGF2ZSB0aGUgcmVu
ZGVyZXIgc2lkZSBpbXBsZW1lbnQKKyAgICAgICAgYm90aCB0aGUgb2xkIGFuZCBuZXcgZHJhZ2dp
bmcgaW50ZXJmYWNlIGFuZCBnYXRlIHRoZSBiZWhhdmlvciBiYXNlZCBvZmYKKyAgICAgICAgb2Yg
d2hpY2ggRGF0YU9iamVjdCBwb2ludGVyIGlzIHNldC4gVGhpcyBjaGFuZ2Ugb25seSBhZmZlY3Rz
IGRyYWdnaW5nCisgICAgICAgIGludG8vb3ZlciB0aGUgcmVuZGVyZXI7IGl0IGRvZXMgbm90IGFm
ZmVjdCBzdGFydGluZyBhIGRyYWcgb3IgY29weSBhbmQKKyAgICAgICAgcGFzdGUuIE9uY2UgdGhl
IGFwcHJvcHJpYXRlIENocm9taXVtIGNoYW5nZXMgbGFuZCwgdGhlIHRlbXBvcmFyeQorICAgICAg
ICBjb25kaXRpb25hbCBicmFuY2hlcyB3aWxsIGJlIHJlbW92ZWQuCisKKyAgICAgICAgTm8gbmV3
IHRlc3RzLgorCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2xpcGJvYXJkQ2hyb21pdW06OkNsaXBib2FyZENocm9taXVtKToKKyAgICAgICAgKFdl
YkNvcmU6OkNsaXBib2FyZENocm9taXVtOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2xp
cGJvYXJkQ2hyb21pdW06OmdldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkQ2hy
b21pdW06OnR5cGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENocm9taXVtOjpmaWxl
cyk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRDaHJvbWl1bTo6aGFzRGF0YSk6CisgICAg
ICAgICogcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9jaHJvbWl1bS9EcmFnRGF0YUNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmNvbnRhaW5zSFRNTCk6CisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0YTo6Y29udGFpbnNVUkwp
OgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmFzVVJMKToKKyAgICAgICAgKFdlYkNvcmU6
OkRyYWdEYXRhOjpjb250YWluc0ZpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjph
c0ZpbGVuYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0YTo6Y29udGFpbnNQbGFpblRl
eHQpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmFzUGxhaW5UZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRyYWdEYXRhOjpjYW5TbWFydFJlcGxhY2UpOgorICAgICAgICAoV2ViQ29yZTo6
RHJhZ0RhdGE6OmNvbnRhaW5zQ29tcGF0aWJsZUNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
RHJhZ0RhdGE6OmFzRnJhZ21lbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0RyYWdE
YXRhUmVmLmg6CisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0YVJlZjo6RHJhZ0RhdGFSZWYpOgor
CisyMDEwLTA4LTMxICBEYW5pZWwgQ2hlbmcgIDxkY2hlbmdAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCiAgICAgICAgIFtjaHJvbWl1bV0gSW1w
bGVtZW50IFJlYWRhYmxlL1dyaXRhYmxlIHZlcnNpb25zIG9mIENocm9taXVtRGF0YU9iamVjdE5l
dwogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQ5MTcK
IApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1
bS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmNwcApp
bmRleCAyMzUwOGE2Li41M2RjYjU3IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9t
aXVtL0NsaXBib2FyZENocm9taXVtLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVt
L0NsaXBib2FyZENocm9taXVtLmNwcApAQCAtNDgsNiArNDgsOSBAQAogI2luY2x1ZGUgIlN0cmlu
Z0J1aWxkZXIuaCIKICNpbmNsdWRlICJtYXJrdXAuaCIKIAorLy8gRklYTUU6IFRoaXMgY2xhc3Mg
Y3VycmVudGx5IGhhcyBhIGxvdCBvZiBkdXBsaWNhdGlvbiBpbiBwcmVwYXJhdGlvbiBmb3IgYQor
Ly8gdHJhbnNpdGlvbiB0byB0aGUgbmV3IGRyYWcgYW5kIGRyb3AgbW9kZWwuIENsZWFuIGl0IHVw
IG9uY2UgdGhlIHRyYW5zaXRpb24gaXMKKy8vIGRvbmUgb24gdGhlIENocm9tZSBzaWRlLgogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwpAQCAtOTMsNyAr
OTYsOSBAQCBzdGF0aWMgQ2xpcGJvYXJkRGF0YVR5cGUgY2xpcGJvYXJkVHlwZUZyb21NSU1FVHlw
ZShjb25zdCBTdHJpbmcmIHR5cGUpCiAKIFBhc3NSZWZQdHI8Q2xpcGJvYXJkPiBDbGlwYm9hcmQ6
OmNyZWF0ZShDbGlwYm9hcmRBY2Nlc3NQb2xpY3kgcG9saWN5LCBEcmFnRGF0YSogZHJhZ0RhdGEs
IEZyYW1lKiBmcmFtZSkKIHsKLSAgICByZXR1cm4gQ2xpcGJvYXJkQ2hyb21pdW06OmNyZWF0ZSh0
cnVlLCBkcmFnRGF0YS0+cGxhdGZvcm1EYXRhKCksIHBvbGljeSwgZnJhbWUpOworICAgIGlmIChk
cmFnRGF0YS0+cGxhdGZvcm1EYXRhKCkub2xkV2F5KQorICAgICAgICByZXR1cm4gQ2xpcGJvYXJk
Q2hyb21pdW06OmNyZWF0ZSh0cnVlLCBkcmFnRGF0YS0+cGxhdGZvcm1EYXRhKCkub2xkV2F5LCBw
b2xpY3ksIGZyYW1lKTsKKyAgICByZXR1cm4gQ2xpcGJvYXJkQ2hyb21pdW06OmNyZWF0ZSh0cnVl
LCBkcmFnRGF0YS0+cGxhdGZvcm1EYXRhKCkubmV3V2F5LCBwb2xpY3ksIGZyYW1lKTsKIH0KIAog
Q2xpcGJvYXJkQ2hyb21pdW06OkNsaXBib2FyZENocm9taXVtKGJvb2wgaXNGb3JEcmFnZ2luZywK
QEAgLTEwNiwxMiArMTExLDI4IEBAIENsaXBib2FyZENocm9taXVtOjpDbGlwYm9hcmRDaHJvbWl1
bShib29sIGlzRm9yRHJhZ2dpbmcsCiB7CiB9CiAKK0NsaXBib2FyZENocm9taXVtOjpDbGlwYm9h
cmRDaHJvbWl1bShib29sIGlzRm9yRHJhZ2dpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUGFzc1JlZlB0cjxSZWFkYWJsZURhdGFPYmplY3Q+IGRhdGFPYmplY3QsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xpcGJvYXJkQWNjZXNzUG9saWN5
IHBvbGljeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcmFtZSogZnJh
bWUpCisgICAgOiBDbGlwYm9hcmQocG9saWN5LCBpc0ZvckRyYWdnaW5nKQorICAgICwgbV9yZWFk
YWJsZURhdGFPYmplY3QoZGF0YU9iamVjdCkKKyAgICAsIG1fZnJhbWUoZnJhbWUpCit7Cit9CisK
IFBhc3NSZWZQdHI8Q2xpcGJvYXJkQ2hyb21pdW0+IENsaXBib2FyZENocm9taXVtOjpjcmVhdGUo
Ym9vbCBpc0ZvckRyYWdnaW5nLAogICAgIFBhc3NSZWZQdHI8Q2hyb21pdW1EYXRhT2JqZWN0PiBk
YXRhT2JqZWN0LCBDbGlwYm9hcmRBY2Nlc3NQb2xpY3kgcG9saWN5LCBGcmFtZSogZnJhbWUpCiB7
CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDbGlwYm9hcmRDaHJvbWl1bShpc0ZvckRyYWdnaW5n
LCBkYXRhT2JqZWN0LCBwb2xpY3ksIGZyYW1lKSk7CiB9CiAKK1Bhc3NSZWZQdHI8Q2xpcGJvYXJk
Q2hyb21pdW0+IENsaXBib2FyZENocm9taXVtOjpjcmVhdGUoYm9vbCBpc0ZvckRyYWdnaW5nLAor
ICAgIFBhc3NSZWZQdHI8UmVhZGFibGVEYXRhT2JqZWN0PiBkYXRhT2JqZWN0LCBDbGlwYm9hcmRB
Y2Nlc3NQb2xpY3kgcG9saWN5LCBGcmFtZSogZnJhbWUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBDbGlwYm9hcmRDaHJvbWl1bShpc0ZvckRyYWdnaW5nLCBkYXRhT2JqZWN0LCBwb2xpY3ks
IGZyYW1lKSk7Cit9CisKIHZvaWQgQ2xpcGJvYXJkQ2hyb21pdW06OmNsZWFyRGF0YShjb25zdCBT
dHJpbmcmIHR5cGUpCiB7CiAgICAgaWYgKHBvbGljeSgpICE9IENsaXBib2FyZFdyaXRhYmxlIHx8
ICFtX2RhdGFPYmplY3QpCkBAIC0xNjIsNyArMTgzLDEzIEBAIHZvaWQgQ2xpcGJvYXJkQ2hyb21p
dW06OmNsZWFyQWxsRGF0YSgpCiBTdHJpbmcgQ2xpcGJvYXJkQ2hyb21pdW06OmdldERhdGEoY29u
c3QgU3RyaW5nJiB0eXBlLCBib29sJiBzdWNjZXNzKSBjb25zdAogewogICAgIHN1Y2Nlc3MgPSBm
YWxzZTsKLSAgICBpZiAocG9saWN5KCkgIT0gQ2xpcGJvYXJkUmVhZGFibGUgfHwgIW1fZGF0YU9i
amVjdCkKKyAgICBpZiAocG9saWN5KCkgIT0gQ2xpcGJvYXJkUmVhZGFibGUpCisgICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKKworICAgIGlmIChtX3JlYWRhYmxlRGF0YU9iamVjdCkKKyAgICAgICAg
cmV0dXJuIG1fcmVhZGFibGVEYXRhT2JqZWN0LT5nZXREYXRhKHR5cGUsIHN1Y2Nlc3MpOworICAg
ICAgCisgICAgaWYgKCFtX2RhdGFPYmplY3QpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAog
ICAgIENsaXBib2FyZERhdGFUeXBlIGRhdGFUeXBlID0gY2xpcGJvYXJkVHlwZUZyb21NSU1FVHlw
ZSh0eXBlKTsKQEAgLTMyMiw2ICszNDksOSBAQCBIYXNoU2V0PFN0cmluZz4gQ2xpcGJvYXJkQ2hy
b21pdW06OnR5cGVzKCkgY29uc3QKICAgICBpZiAocG9saWN5KCkgIT0gQ2xpcGJvYXJkUmVhZGFi
bGUgJiYgcG9saWN5KCkgIT0gQ2xpcGJvYXJkVHlwZXNSZWFkYWJsZSkKICAgICAgICAgcmV0dXJu
IHJlc3VsdHM7CiAKKyAgICBpZiAobV9yZWFkYWJsZURhdGFPYmplY3QpCisgICAgICAgIHJldHVy
biBtX3JlYWRhYmxlRGF0YU9iamVjdC0+dHlwZXMoKTsKKwogICAgIGlmICghbV9kYXRhT2JqZWN0
KQogICAgICAgICByZXR1cm4gcmVzdWx0czsKIApAQCAtMzYxLDYgKzM5MSwxNCBAQCBQYXNzUmVm
UHRyPEZpbGVMaXN0PiBDbGlwYm9hcmRDaHJvbWl1bTo6ZmlsZXMoKSBjb25zdAogICAgIGlmIChw
b2xpY3koKSAhPSBDbGlwYm9hcmRSZWFkYWJsZSkKICAgICAgICAgcmV0dXJuIEZpbGVMaXN0Ojpj
cmVhdGUoKTsKIAorICAgIGlmIChtX3JlYWRhYmxlRGF0YU9iamVjdCkgeworICAgICAgICBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0ID0gbV9mcmFtZS0+ZG9j
dW1lbnQoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBSZWZQdHI8RmlsZUxp
c3Q+IGZpbGVMaXN0ID0gRmlsZUxpc3Q6OmNyZWF0ZSgpOworICAgICAgICBjb25zdCBWZWN0b3I8
U3RyaW5nPiYgZmlsZW5hbWVzID0gbV9yZWFkYWJsZURhdGFPYmplY3QtPmZpbGVuYW1lcygpOwor
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZpbGVuYW1lcy5zaXplKCk7ICsraSkKKyAg
ICAgICAgICAgIGZpbGVMaXN0LT5hcHBlbmQoRmlsZTo6Y3JlYXRlKHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQsIGZpbGVuYW1lcy5hdChpKSkpOworICAgIH0KKwogICAgIGlmICghbV9kYXRhT2JqZWN0
IHx8IG1fZGF0YU9iamVjdC0+ZmlsZW5hbWVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIEZp
bGVMaXN0OjpjcmVhdGUoKTsKIApAQCAtNTU2LDYgKzU5NCw5IEBAIHZvaWQgQ2xpcGJvYXJkQ2hy
b21pdW06OndyaXRlUGxhaW5UZXh0KGNvbnN0IFN0cmluZyYgdGV4dCkKIAogYm9vbCBDbGlwYm9h
cmRDaHJvbWl1bTo6aGFzRGF0YSgpCiB7CisgICAgaWYgKG1fcmVhZGFibGVEYXRhT2JqZWN0KQor
ICAgICAgICByZXR1cm4gbV9yZWFkYWJsZURhdGFPYmplY3QtPmhhc0RhdGEoKTsKKwogICAgIGlm
ICghbV9kYXRhT2JqZWN0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uaCBiL1dlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uaAppbmRleCBhNDE1MGQwLi44OWU4MDY5
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVt
LmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5oCkBA
IC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiQ2xpcGJvYXJkLmgiCiAKICNpbmNsdWRlICJDYWNo
ZWRSZXNvdXJjZUNsaWVudC5oIgorI2luY2x1ZGUgIkRyYWdEYXRhUmVmLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIApAQCAtNDAsNiArNDEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
Y2xhc3MgQ2hyb21pdW1EYXRhT2JqZWN0OwogICAgIGNsYXNzIEZyYW1lOwogICAgIGNsYXNzIElu
dFBvaW50OworICAgIGNsYXNzIFJlYWRhYmxlRGF0YU9iamVjdDsKIAogICAgIGNsYXNzIENsaXBi
b2FyZENocm9taXVtIDogcHVibGljIENsaXBib2FyZCwgcHVibGljIENhY2hlZFJlc291cmNlQ2xp
ZW50IHsKICAgICBwdWJsaWM6CkBAIC00Nyw2ICs0OSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDbGlwYm9hcmRDaHJvbWl1bT4gY3JlYXRlKAog
ICAgICAgICAgICAgYm9vbCBpc0ZvckRyYWdnaW5nLCBQYXNzUmVmUHRyPENocm9taXVtRGF0YU9i
amVjdD4sIENsaXBib2FyZEFjY2Vzc1BvbGljeSwgRnJhbWUqKTsKKyAgICAgICAgc3RhdGljIFBh
c3NSZWZQdHI8Q2xpcGJvYXJkQ2hyb21pdW0+IGNyZWF0ZSgKKyAgICAgICAgICAgIGJvb2wgaXNG
b3JEcmFnZ2luZywgUGFzc1JlZlB0cjxSZWFkYWJsZURhdGFPYmplY3Q+LCBDbGlwYm9hcmRBY2Nl
c3NQb2xpY3ksIEZyYW1lKik7CiAKICAgICAgICAgLy8gUmV0dXJucyB0aGUgZmlsZSBuYW1lIChu
b3QgaW5jbHVkaW5nIHRoZSBleHRlbnNpb24pLiBUaGlzIHJlbW92ZXMgYW55CiAgICAgICAgIC8v
IGludmFsaWQgZmlsZSBzeXN0ZW0gY2hhcmFjdGVycyBhcyB3ZWxsIGFzIG1ha2luZyBzdXJlIHRo
ZQpAQCAtODEsMTAgKzg1LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIHByaXZhdGU6
CiAgICAgICAgIENsaXBib2FyZENocm9taXVtKGJvb2wsIFBhc3NSZWZQdHI8Q2hyb21pdW1EYXRh
T2JqZWN0PiwgQ2xpcGJvYXJkQWNjZXNzUG9saWN5LCBGcmFtZSopOworICAgICAgICBDbGlwYm9h
cmRDaHJvbWl1bShib29sLCBQYXNzUmVmUHRyPFJlYWRhYmxlRGF0YU9iamVjdD4sIENsaXBib2Fy
ZEFjY2Vzc1BvbGljeSwgRnJhbWUqKTsKIAogICAgICAgICB2b2lkIHJlc2V0RnJvbUNsaXBib2Fy
ZCgpOwogICAgICAgICB2b2lkIHNldERyYWdJbWFnZShDYWNoZWRJbWFnZSosIE5vZGUqLCBjb25z
dCBJbnRQb2ludCYpOwogICAgICAgICBSZWZQdHI8Q2hyb21pdW1EYXRhT2JqZWN0PiBtX2RhdGFP
YmplY3Q7CisgICAgICAgIFJlZlB0cjxSZWFkYWJsZURhdGFPYmplY3Q+IG1fcmVhZGFibGVEYXRh
T2JqZWN0OwogICAgICAgICBGcmFtZSogbV9mcmFtZTsKICAgICB9OwogCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RyYWdEYXRhQ2hyb21pdW0uY3BwIGIvV2ViQ29yZS9w
bGF0Zm9ybS9jaHJvbWl1bS9EcmFnRGF0YUNocm9taXVtLmNwcAppbmRleCA2NzRkMzRkLi5jMzc1
ZTdhIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RyYWdEYXRhQ2hyb21p
dW0uY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRHJhZ0RhdGFDaHJvbWl1bS5j
cHAKQEAgLTQxLDUyICs0MSw4NCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBi
b29sIGNvbnRhaW5zSFRNTChjb25zdCBDaHJvbWl1bURhdGFPYmplY3QqIGRyb3BEYXRhKQorc3Rh
dGljIGJvb2wgY29udGFpbnNIVE1MKGNvbnN0IERyYWdEYXRhUmVmKiBkcm9wRGF0YSkKIHsKLSAg
ICByZXR1cm4gZHJvcERhdGEtPnRleHRIdG1sLmxlbmd0aCgpID4gMDsKKyAgICBpZiAoZHJvcERh
dGEtPm9sZFdheSkKKyAgICAgICAgcmV0dXJuIGRyb3BEYXRhLT5vbGRXYXktPnRleHRIdG1sLmxl
bmd0aCgpID4gMDsKKyAgICByZXR1cm4gZHJvcERhdGEtPm5ld1dheS0+dHlwZXMoKS5jb250YWlu
cygidGV4dC9odG1sIik7CiB9CiAKIGJvb2wgRHJhZ0RhdGE6OmNvbnRhaW5zVVJMKEZpbGVuYW1l
Q29udmVyc2lvblBvbGljeSBmaWxlbmFtZVBvbGljeSkgY29uc3QKIHsKLSAgICByZXR1cm4gIWFz
VVJMKGZpbGVuYW1lUG9saWN5KS5pc0VtcHR5KCk7CisgICAgaWYgKG1fcGxhdGZvcm1EcmFnRGF0
YS5vbGRXYXkpCisgICAgICAgIHJldHVybiAhYXNVUkwoZmlsZW5hbWVQb2xpY3kpLmlzRW1wdHko
KTsKKyAgICByZXR1cm4gbV9wbGF0Zm9ybURyYWdEYXRhLm5ld1dheS0+dHlwZXMoKS5jb250YWlu
cygidGV4dC91cmktbGlzdCIpCisgICAgICAgIHx8IChmaWxlbmFtZVBvbGljeSA9PSBDb252ZXJ0
RmlsZW5hbWVzICYmIG1fcGxhdGZvcm1EcmFnRGF0YS5uZXdXYXktPmhhc0ZpbGVuYW1lcygpKTsK
IH0KIAogU3RyaW5nIERyYWdEYXRhOjphc1VSTChGaWxlbmFtZUNvbnZlcnNpb25Qb2xpY3kgZmls
ZW5hbWVQb2xpY3ksIFN0cmluZyogdGl0bGUpIGNvbnN0CiB7Ci0gICAgU3RyaW5nIHVybDsKLSAg
ICBpZiAobV9wbGF0Zm9ybURyYWdEYXRhLT5oYXNWYWxpZFVSTCgpKQotICAgICAgICB1cmwgPSBt
X3BsYXRmb3JtRHJhZ0RhdGEtPmdldFVSTCgpLnN0cmluZygpOwotICAgIGVsc2UgaWYgKGZpbGVu
YW1lUG9saWN5ID09IENvbnZlcnRGaWxlbmFtZXMgJiYgIW1fcGxhdGZvcm1EcmFnRGF0YS0+Zmls
ZW5hbWVzLmlzRW1wdHkoKSkgewotICAgICAgICBTdHJpbmcgZmlsZU5hbWUgPSBtX3BsYXRmb3Jt
RHJhZ0RhdGEtPmZpbGVuYW1lc1swXTsKKyAgICBpZiAobV9wbGF0Zm9ybURyYWdEYXRhLm9sZFdh
eSkgeworICAgICAgICBTdHJpbmcgdXJsOworICAgICAgICBpZiAobV9wbGF0Zm9ybURyYWdEYXRh
Lm9sZFdheS0+aGFzVmFsaWRVUkwoKSkKKyAgICAgICAgICAgIHVybCA9IG1fcGxhdGZvcm1EcmFn
RGF0YS5vbGRXYXktPmdldFVSTCgpLnN0cmluZygpOworICAgICAgICBlbHNlIGlmIChmaWxlbmFt
ZVBvbGljeSA9PSBDb252ZXJ0RmlsZW5hbWVzICYmICFtX3BsYXRmb3JtRHJhZ0RhdGEub2xkV2F5
LT5maWxlbmFtZXMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBTdHJpbmcgZmlsZU5hbWUgPSBt
X3BsYXRmb3JtRHJhZ0RhdGEub2xkV2F5LT5maWxlbmFtZXNbMF07CisgICAgICAgICAgICBmaWxl
TmFtZSA9IENocm9taXVtQnJpZGdlOjpnZXRBYnNvbHV0ZVBhdGgoZmlsZU5hbWUpOworICAgICAg
ICAgICAgdXJsID0gQ2hyb21pdW1CcmlkZ2U6OmZpbGVQYXRoVG9VUkwoZmlsZU5hbWUpLnN0cmlu
ZygpOworICAgICAgICB9CisgICAgIAorICAgICAgICAvLyB8dGl0bGV8IGNhbiBiZSBOVUxMCisg
ICAgICAgIGlmICh0aXRsZSkKKyAgICAgICAgICAgICp0aXRsZSA9IG1fcGxhdGZvcm1EcmFnRGF0
YS5vbGRXYXktPnVybFRpdGxlOworICAgICAgICByZXR1cm4gdXJsOworICAgIH0KKworICAgIFN0
cmluZyB1cmwgPSBtX3BsYXRmb3JtRHJhZ0RhdGEubmV3V2F5LT5nZXRVUkwodGl0bGUpOworICAg
IGlmICghS1VSTChLVVJMKCksIHVybCkuaXNWYWxpZCgpCisgICAgICAgICYmIGZpbGVuYW1lUG9s
aWN5ID09IENvbnZlcnRGaWxlbmFtZXMKKyAgICAgICAgJiYgbV9wbGF0Zm9ybURyYWdEYXRhLm5l
d1dheS0+aGFzRmlsZW5hbWVzKCkpIHsKKyAgICAgICAgU3RyaW5nIGZpbGVOYW1lID0gbV9wbGF0
Zm9ybURyYWdEYXRhLm5ld1dheS0+ZmlsZW5hbWVzKClbMF07CiAgICAgICAgIGZpbGVOYW1lID0g
Q2hyb21pdW1CcmlkZ2U6OmdldEFic29sdXRlUGF0aChmaWxlTmFtZSk7CiAgICAgICAgIHVybCA9
IENocm9taXVtQnJpZGdlOjpmaWxlUGF0aFRvVVJMKGZpbGVOYW1lKS5zdHJpbmcoKTsKKyAgICAg
ICAgaWYgKHRpdGxlKQorICAgICAgICAgICAgKnRpdGxlID0gIiI7CiAgICAgfQotIAotICAgIC8v
IHx0aXRsZXwgY2FuIGJlIE5VTEwKLSAgICBpZiAodGl0bGUpCi0gICAgICAgICp0aXRsZSA9IG1f
cGxhdGZvcm1EcmFnRGF0YS0+dXJsVGl0bGU7CiAgICAgcmV0dXJuIHVybDsKIH0KIAogYm9vbCBE
cmFnRGF0YTo6Y29udGFpbnNGaWxlcygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICFtX3BsYXRmb3Jt
RHJhZ0RhdGEtPmZpbGVuYW1lcy5pc0VtcHR5KCk7CisgICAgaWYgKG1fcGxhdGZvcm1EcmFnRGF0
YS5vbGRXYXkpCisgICAgICAgIHJldHVybiAhbV9wbGF0Zm9ybURyYWdEYXRhLm9sZFdheS0+Zmls
ZW5hbWVzLmlzRW1wdHkoKTsKKyAgICByZXR1cm4gbV9wbGF0Zm9ybURyYWdEYXRhLm5ld1dheS0+
aGFzRmlsZW5hbWVzKCk7CiB9CiAKIHZvaWQgRHJhZ0RhdGE6OmFzRmlsZW5hbWVzKFZlY3RvcjxT
dHJpbmc+JiByZXN1bHQpIGNvbnN0CiB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3Bs
YXRmb3JtRHJhZ0RhdGEtPmZpbGVuYW1lcy5zaXplKCk7ICsraSkKLSAgICAgICAgcmVzdWx0LmFw
cGVuZChtX3BsYXRmb3JtRHJhZ0RhdGEtPmZpbGVuYW1lc1tpXSk7CisgICAgaWYgKG1fcGxhdGZv
cm1EcmFnRGF0YS5vbGRXYXkpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3Bs
YXRmb3JtRHJhZ0RhdGEub2xkV2F5LT5maWxlbmFtZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAg
ICByZXN1bHQuYXBwZW5kKG1fcGxhdGZvcm1EcmFnRGF0YS5vbGRXYXktPmZpbGVuYW1lc1tpXSk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcyA9
IG1fcGxhdGZvcm1EcmFnRGF0YS5uZXdXYXktPmZpbGVuYW1lcygpOworICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGZpbGVuYW1lcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIHJlc3Vs
dC5hcHBlbmQoZmlsZW5hbWVzW2ldKTsKKyAgICB9CiB9CiAKIGJvb2wgRHJhZ0RhdGE6OmNvbnRh
aW5zUGxhaW5UZXh0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gIW1fcGxhdGZvcm1EcmFnRGF0YS0+
cGxhaW5UZXh0LmlzRW1wdHkoKTsKKyAgICBpZiAobV9wbGF0Zm9ybURyYWdEYXRhLm9sZFdheSkK
KyAgICAgICAgcmV0dXJuICFtX3BsYXRmb3JtRHJhZ0RhdGEub2xkV2F5LT5wbGFpblRleHQuaXNF
bXB0eSgpOworICAgIHJldHVybiBtX3BsYXRmb3JtRHJhZ0RhdGEubmV3V2F5LT50eXBlcygpLmNv
bnRhaW5zKCJ0ZXh0L3BsYWluIik7CiB9CiAKIFN0cmluZyBEcmFnRGF0YTo6YXNQbGFpblRleHQo
KSBjb25zdAogewotICAgIHJldHVybiBtX3BsYXRmb3JtRHJhZ0RhdGEtPnBsYWluVGV4dDsKKyAg
ICBpZiAobV9wbGF0Zm9ybURyYWdEYXRhLm9sZFdheSkKKyAgICAgICAgcmV0dXJuIG1fcGxhdGZv
cm1EcmFnRGF0YS5vbGRXYXktPnBsYWluVGV4dDsKKyAgICBib29sIGlnbm9yZWRTdWNjZXNzOwor
ICAgIHJldHVybiBtX3BsYXRmb3JtRHJhZ0RhdGEubmV3V2F5LT5nZXREYXRhKCJ0ZXh0L3BsYWlu
IiwgaWdub3JlZFN1Y2Nlc3MpOwogfQogCiBib29sIERyYWdEYXRhOjpjb250YWluc0NvbG9yKCkg
Y29uc3QKQEAgLTEwMSwxNSArMTMzLDE5IEBAIGJvb2wgRHJhZ0RhdGE6OmNhblNtYXJ0UmVwbGFj
ZSgpIGNvbnN0CiAgICAgLy8gVGhpcyBpcyBhbGxvd2VkIHdoZW5ldmVyIHRoZSBkcmFnIGRhdGEg
Y29udGFpbnMgYSAncmFuZ2UnIChpZS4sCiAgICAgLy8gQ2xpcGJvYXJkV2luOjp3cml0ZVJhbmdl
IGlzIGNhbGxlZCkuICBGb3IgZXhhbXBsZSwgZHJhZ2dpbmcgYSBsaW5rCiAgICAgLy8gc2hvdWxk
IG5vdCByZXN1bHQgaW4gYSBzcGFjZSBiZWluZyBhZGRlZC4KLSAgICByZXR1cm4gIW1fcGxhdGZv
cm1EcmFnRGF0YS0+cGxhaW5UZXh0LmlzRW1wdHkoKQotICAgICAgICAmJiAhbV9wbGF0Zm9ybURy
YWdEYXRhLT5oYXNWYWxpZFVSTCgpOworICAgIGlmIChtX3BsYXRmb3JtRHJhZ0RhdGEub2xkV2F5
KQorICAgICAgICByZXR1cm4gIW1fcGxhdGZvcm1EcmFnRGF0YS5vbGRXYXktPnBsYWluVGV4dC5p
c0VtcHR5KCkKKyAgICAgICAgICAgICYmICFtX3BsYXRmb3JtRHJhZ0RhdGEub2xkV2F5LT5oYXNW
YWxpZFVSTCgpOworICAgIHJldHVybiBtX3BsYXRmb3JtRHJhZ0RhdGEubmV3V2F5LT50eXBlcygp
LmNvbnRhaW5zKCJ0ZXh0L3BsYWluIikKKyAgICAgICAgLy8gRklYTUU6IERvIHdlIG5lZWQgdG8g
Y2hlY2sgVVJMIHZhbGlkaXR5PworICAgICAgICAmJiAhbV9wbGF0Zm9ybURyYWdEYXRhLm5ld1dh
eS0+dHlwZXMoKS5jb250YWlucygidGV4dC91cmktbGlzdCIpOwogfQogCiBib29sIERyYWdEYXRh
Ojpjb250YWluc0NvbXBhdGlibGVDb250ZW50KCkgY29uc3QKIHsKICAgICByZXR1cm4gY29udGFp
bnNQbGFpblRleHQoKQogICAgICAgICB8fCBjb250YWluc1VSTCgpCi0gICAgICAgIHx8IGNvbnRh
aW5zSFRNTChtX3BsYXRmb3JtRHJhZ0RhdGEpCisgICAgICAgIHx8IGNvbnRhaW5zSFRNTCgmbV9w
bGF0Zm9ybURyYWdEYXRhKQogICAgICAgICB8fCBjb250YWluc0NvbG9yKCkKICAgICAgICAgfHwg
Y29udGFpbnNGaWxlcygpOwogfQpAQCAtMTM0LDEwICsxNzAsMjAgQEAgUGFzc1JlZlB0cjxEb2N1
bWVudEZyYWdtZW50PiBEcmFnRGF0YTo6YXNGcmFnbWVudChEb2N1bWVudCogZG9jKSBjb25zdAog
ICAgICAgICAvLyAgICByZXR1cm4gZnJhZ21lbnQ7CiAgICAgfQogCi0gICAgaWYgKCFtX3BsYXRm
b3JtRHJhZ0RhdGEtPnRleHRIdG1sLmlzRW1wdHkoKSkgewotICAgICAgICBSZWZQdHI8RG9jdW1l
bnRGcmFnbWVudD4gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoZG9jLAotICAg
ICAgICAgICAgbV9wbGF0Zm9ybURyYWdEYXRhLT50ZXh0SHRtbCwgbV9wbGF0Zm9ybURyYWdEYXRh
LT5odG1sQmFzZVVybCwgRnJhZ21lbnRTY3JpcHRpbmdOb3RBbGxvd2VkKTsKLSAgICAgICAgcmV0
dXJuIGZyYWdtZW50LnJlbGVhc2UoKTsKKyAgICBpZiAobV9wbGF0Zm9ybURyYWdEYXRhLm9sZFdh
eSkgeworICAgICAgICBpZiAoIW1fcGxhdGZvcm1EcmFnRGF0YS5vbGRXYXktPnRleHRIdG1sLmlz
RW1wdHkoKSkgeworICAgICAgICAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50
ID0gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKGRvYywKKyAgICAgICAgICAgICAgICBtX3BsYXRm
b3JtRHJhZ0RhdGEub2xkV2F5LT50ZXh0SHRtbCwgbV9wbGF0Zm9ybURyYWdEYXRhLm9sZFdheS0+
aHRtbEJhc2VVcmwsIEZyYWdtZW50U2NyaXB0aW5nTm90QWxsb3dlZCk7CisgICAgICAgICAgICBy
ZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgaWYgKGNvbnRhaW5zSFRNTCgmbV9wbGF0Zm9ybURyYWdEYXRhKSkgeworICAgICAgICAgICAg
U3RyaW5nIGJhc2VVUkw7CisgICAgICAgICAgICBTdHJpbmcgaHRtbCA9IG1fcGxhdGZvcm1EcmFn
RGF0YS5uZXdXYXktPmdldEhUTUwoJmJhc2VVUkwpOworICAgICAgICAgICAgUmVmUHRyPERvY3Vt
ZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKGRvYywKKyAg
ICAgICAgICAgICAgICBodG1sLCBiYXNlVVJMLCBGcmFnbWVudFNjcmlwdGluZ05vdEFsbG93ZWQp
OworICAgICAgICAgICAgcmV0dXJuIGZyYWdtZW50LnJlbGVhc2UoKTsKKyAgICAgICAgfQogICAg
IH0KIAogICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9EcmFnRGF0YVJlZi5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EcmFnRGF0YVJlZi5o
CmluZGV4IGRlMWZhMWMuLmJhZGM5MzUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vRHJhZ0RhdGFSZWYuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RyYWdE
YXRhUmVmLmgKQEAgLTMyLDEwICszMiwxOCBAQAogI2RlZmluZSBEcmFnRGF0YVJlZl9oCiAKICNp
bmNsdWRlICJDaHJvbWl1bURhdGFPYmplY3QuaCIKKyNpbmNsdWRlICJSZWFkYWJsZURhdGFPYmpl
Y3QuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgdHlwZWRlZiBDaHJvbWl1bURhdGFP
YmplY3QqIERyYWdEYXRhUmVmOworc3RydWN0IERyYWdEYXRhUmVmIHsKKyAgICAvLyBGSVhNRTog
VGhlc2UgYXJlIGRlbGliZXJhdGVseSBub24tZXhwbGljaXQgZm9yIHRoZSBtb21lbnQuIE9uY2Ug
Q2hyb21pdW0KKyAgICAvLyBpcyBzd2l0Y2hlZCBvdmVyIHRvIHRoZSBuZXcgd2F5IG9mIGhhbmRs
aW5nIGRyYWdzLCByZXZlcnQgdGhpcyBjaGFuZ2UuCisgICAgRHJhZ0RhdGFSZWYoQ2hyb21pdW1E
YXRhT2JqZWN0KiBkYXRhKSA6IG9sZFdheShkYXRhKSB7fQorICAgIERyYWdEYXRhUmVmKFJlYWRh
YmxlRGF0YU9iamVjdCogZGF0YSkgOiBuZXdXYXkoZGF0YSkge30KKyAgICBDaHJvbWl1bURhdGFP
YmplY3QqIG9sZFdheTsKKyAgICBSZWFkYWJsZURhdGFPYmplY3QqIG5ld1dheTsKK307CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggOTBkOTQ2MC4uZDExMjk0NCAx
MDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTAtMDgtMzEgIERhbmllbCBDaGVuZyAg
PGRjaGVuZ0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgW2Nocm9taXVtXSBQcmVwYXJlIENsaXBib2FyZC9EcmFnRGF0YSBmb3Ig
dHJhbnNpdGlvbiB0byBuZXcgZHJhZy1hbmQtZHJvcCBpbnRlcmZhY2UuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDk5MgorCisgICAgICAgIEluIG9y
ZGVyIHRvIGF2b2lkIGJyZWFraW5nIENocm9taXVtLCB3ZSBoYXZlIHRoZSByZW5kZXJlciBzaWRl
IGltcGxlbWVudAorICAgICAgICBib3RoIHRoZSBvbGQgYW5kIG5ldyBkcmFnZ2luZyBpbnRlcmZh
Y2UgYW5kIGdhdGUgdGhlIGJlaGF2aW9yIGJhc2VkIG9mZgorICAgICAgICBvZiB3aGljaCBEYXRh
T2JqZWN0IHBvaW50ZXIgaXMgc2V0LiBUaGlzIGNoYW5nZSBvbmx5IGFmZmVjdHMgZHJhZ2dpbmcK
KyAgICAgICAgaW50by9vdmVyIHRoZSByZW5kZXJlcjsgaXQgZG9lcyBub3QgYWZmZWN0IHN0YXJ0
aW5nIGEgZHJhZyBvciBjb3B5IGFuZAorICAgICAgICBwYXN0ZS4gT25jZSB0aGUgYXBwcm9wcmlh
dGUgQ2hyb21pdW0gY2hhbmdlcyBsYW5kLCB0aGUgdGVtcG9yYXJ5CisgICAgICAgIGNvbmRpdGlv
bmFsIGJyYW5jaGVzIHdpbGwgYmUgcmVtb3ZlZC4KKworICAgICAgICAqIHNyYy9XZWJWaWV3SW1w
bC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpkcmFnVGFyZ2V0RHJhZ0VudGVy
TmV3KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmRyYWdUYXJnZXREcmFnTGVhdmUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6ZHJhZ1RhcmdldERyb3ApOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6ZHJhZ1RhcmdldERyYWdFbnRlck9yT3Zlcik6CisgICAg
ICAgICogc3JjL1dlYlZpZXdJbXBsLmg6CisKIDIwMTAtMDgtMzAgIFNoZXJpZmYgQm90ICA8d2Vi
a2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcg
b3V0IHI2NjE5OC4KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwu
Y3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKaW5kZXggNTA2NWY1ZS4u
OTVkYWNhMCAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAK
KysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKQEAgLTgxLDYgKzgxLDcg
QEAKICNpbmNsdWRlICJQb3B1cE1lbnVDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlBvcHVwTWVudUNs
aWVudC5oIgogI2luY2x1ZGUgIlByb2dyZXNzVHJhY2tlci5oIgorI2luY2x1ZGUgIlJlYWRhYmxl
RGF0YU9iamVjdC5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJSZXNvdXJj
ZUhhbmRsZS5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCkBAIC0xNTgzLDYgKzE1ODQs
MjEgQEAgV2ViRHJhZ09wZXJhdGlvbiBXZWJWaWV3SW1wbDo6ZHJhZ1RhcmdldERyYWdFbnRlcigK
ICAgICByZXR1cm4gZHJhZ1RhcmdldERyYWdFbnRlck9yT3ZlcihjbGllbnRQb2ludCwgc2NyZWVu
UG9pbnQsIERyYWdFbnRlcik7CiB9CiAKK1dlYkRyYWdPcGVyYXRpb24gV2ViVmlld0ltcGw6OmRy
YWdUYXJnZXREcmFnRW50ZXJOZXcoCisgICAgaW50IGlkZW50aXR5LAorICAgIGNvbnN0IFdlYlBv
aW50JiBjbGllbnRQb2ludCwKKyAgICBjb25zdCBXZWJQb2ludCYgc2NyZWVuUG9pbnQsCisgICAg
V2ViRHJhZ09wZXJhdGlvbnNNYXNrIG9wZXJhdGlvbnNBbGxvd2VkKQoreworICAgIEFTU0VSVCgh
bV9jdXJyZW50RHJhZ0RhdGFOZXcuZ2V0KCkpOworCisgICAgbV9jdXJyZW50RHJhZ0RhdGFOZXcg
PSBSZWFkYWJsZURhdGFPYmplY3Q6OmNyZWF0ZSh0cnVlKTsKKyAgICBtX2RyYWdJZGVudGl0eSA9
IGlkZW50aXR5OworICAgIG1fb3BlcmF0aW9uc0FsbG93ZWQgPSBvcGVyYXRpb25zQWxsb3dlZDsK
KworICAgIHJldHVybiBkcmFnVGFyZ2V0RHJhZ0VudGVyT3JPdmVyKGNsaWVudFBvaW50LCBzY3Jl
ZW5Qb2ludCwgRHJhZ0VudGVyKTsKK30KKwogV2ViRHJhZ09wZXJhdGlvbiBXZWJWaWV3SW1wbDo6
ZHJhZ1RhcmdldERyYWdPdmVyKAogICAgIGNvbnN0IFdlYlBvaW50JiBjbGllbnRQb2ludCwKICAg
ICBjb25zdCBXZWJQb2ludCYgc2NyZWVuUG9pbnQsCkBAIC0xNTk1LDE5ICsxNjExLDM0IEBAIFdl
YkRyYWdPcGVyYXRpb24gV2ViVmlld0ltcGw6OmRyYWdUYXJnZXREcmFnT3ZlcigKIAogdm9pZCBX
ZWJWaWV3SW1wbDo6ZHJhZ1RhcmdldERyYWdMZWF2ZSgpCiB7Ci0gICAgQVNTRVJUKG1fY3VycmVu
dERyYWdEYXRhLmdldCgpKTsKLQotICAgIERyYWdEYXRhIGRyYWdEYXRhKAotICAgICAgICBtX2N1
cnJlbnREcmFnRGF0YS5nZXQoKSwKLSAgICAgICAgSW50UG9pbnQoKSwKLSAgICAgICAgSW50UG9p
bnQoKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8RHJhZ09wZXJhdGlvbj4obV9vcGVyYXRpb25zQWxs
b3dlZCkpOwotCi0gICAgbV9kcmFnVGFyZ2V0RGlzcGF0Y2ggPSB0cnVlOwotICAgIG1fcGFnZS0+
ZHJhZ0NvbnRyb2xsZXIoKS0+ZHJhZ0V4aXRlZCgmZHJhZ0RhdGEpOwotICAgIG1fZHJhZ1Rhcmdl
dERpc3BhdGNoID0gZmFsc2U7CisgICAgLy8gRklYTUU6IFRoaXMgaXMgdGVtcG9yYXJ5IHdoaWxl
IHVudGlsIENocm9taXVtIHNpZGUgaXMgdHJhbnNpdGlvbmVkIHRvIHVzZQorICAgIC8vIHRoZSBu
ZXcgZHJhZ2dpbmcgaW50ZXJmYWNlLgorICAgIGlmIChtX2N1cnJlbnREcmFnRGF0YS5nZXQoKSkg
eworICAgICAgICBEcmFnRGF0YSBkcmFnRGF0YSgKKyAgICAgICAgICAgIG1fY3VycmVudERyYWdE
YXRhLmdldCgpLAorICAgICAgICAgICAgSW50UG9pbnQoKSwKKyAgICAgICAgICAgIEludFBvaW50
KCksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxEcmFnT3BlcmF0aW9uPihtX29wZXJhdGlvbnNB
bGxvd2VkKSk7CisKKyAgICAgICAgbV9kcmFnVGFyZ2V0RGlzcGF0Y2ggPSB0cnVlOworICAgICAg
ICBtX3BhZ2UtPmRyYWdDb250cm9sbGVyKCktPmRyYWdFeGl0ZWQoJmRyYWdEYXRhKTsKKyAgICAg
ICAgbV9kcmFnVGFyZ2V0RGlzcGF0Y2ggPSBmYWxzZTsKKyAgICB9IGVsc2UgaWYgKG1fY3VycmVu
dERyYWdEYXRhTmV3LmdldCgpKSB7CisgICAgICAgIERyYWdEYXRhIGRyYWdEYXRhKAorICAgICAg
ICAgICAgbV9jdXJyZW50RHJhZ0RhdGFOZXcuZ2V0KCksCisgICAgICAgICAgICBJbnRQb2ludCgp
LAorICAgICAgICAgICAgSW50UG9pbnQoKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PERyYWdP
cGVyYXRpb24+KG1fb3BlcmF0aW9uc0FsbG93ZWQpKTsKKworICAgICAgICBtX2RyYWdUYXJnZXRE
aXNwYXRjaCA9IHRydWU7CisgICAgICAgIG1fcGFnZS0+ZHJhZ0NvbnRyb2xsZXIoKS0+ZHJhZ0V4
aXRlZCgmZHJhZ0RhdGEpOworICAgICAgICBtX2RyYWdUYXJnZXREaXNwYXRjaCA9IGZhbHNlOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVChmYWxzZSk7CisgICAgfQogCiAgICAgbV9jdXJy
ZW50RHJhZ0RhdGEgPSAwOworICAgIG1fY3VycmVudERyYWdEYXRhTmV3ID0gMDsKICAgICBtX2Ry
b3BFZmZlY3QgPSBEcm9wRWZmZWN0RGVmYXVsdDsKICAgICBtX2RyYWdPcGVyYXRpb24gPSBXZWJE
cmFnT3BlcmF0aW9uTm9uZTsKICAgICBtX2RyYWdJZGVudGl0eSA9IDA7CkBAIC0xNjE2LDggKzE2
NDcsNiBAQCB2b2lkIFdlYlZpZXdJbXBsOjpkcmFnVGFyZ2V0RHJhZ0xlYXZlKCkKIHZvaWQgV2Vi
Vmlld0ltcGw6OmRyYWdUYXJnZXREcm9wKGNvbnN0IFdlYlBvaW50JiBjbGllbnRQb2ludCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlBvaW50JiBzY3JlZW5Qb2lu
dCkKIHsKLSAgICBBU1NFUlQobV9jdXJyZW50RHJhZ0RhdGEuZ2V0KCkpOwotCiAgICAgLy8gSWYg
dGhpcyB3ZWJ2aWV3IHRyYW5zaXRpb25zIGZyb20gdGhlICJkcm9wIGFjY2VwdGluZyIgc3RhdGUg
dG8gdGhlICJub3QKICAgICAvLyBhY2NlcHRpbmciIHN0YXRlLCB0aGVuIG91ciBJUEMgbWVzc2Fn
ZSByZXBseSBpbmRpY2F0aW5nIHRoYXQgbWF5IGJlIGluLQogICAgIC8vIGZsaWdodCwgb3IgZWxz
ZSBkZWxheWVkIGJ5IGphdmFzY3JpcHQgcHJvY2Vzc2luZyBpbiB0aGlzIHdlYnZpZXcuICBJZiBh
CkBAIC0xNjMwLDE3ICsxNjU5LDM0IEBAIHZvaWQgV2ViVmlld0ltcGw6OmRyYWdUYXJnZXREcm9w
KGNvbnN0IFdlYlBvaW50JiBjbGllbnRQb2ludCwKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIERyYWdEYXRhIGRyYWdEYXRhKAotICAgICAgICBtX2N1cnJlbnREcmFnRGF0YS5nZXQoKSwK
LSAgICAgICAgY2xpZW50UG9pbnQsCi0gICAgICAgIHNjcmVlblBvaW50LAotICAgICAgICBzdGF0
aWNfY2FzdDxEcmFnT3BlcmF0aW9uPihtX29wZXJhdGlvbnNBbGxvd2VkKSk7Ci0KLSAgICBtX2Ry
YWdUYXJnZXREaXNwYXRjaCA9IHRydWU7Ci0gICAgbV9wYWdlLT5kcmFnQ29udHJvbGxlcigpLT5w
ZXJmb3JtRHJhZygmZHJhZ0RhdGEpOwotICAgIG1fZHJhZ1RhcmdldERpc3BhdGNoID0gZmFsc2U7
CisgICAgLy8gRklYTUU6IFRoaXMgaXMgdGVtcG9yYXJ5IHdoaWxlIHVudGlsIENocm9taXVtIHNp
ZGUgaXMgdHJhbnNpdGlvbmVkIHRvIHVzZQorICAgIC8vIHRoZSBuZXcgZHJhZ2dpbmcgaW50ZXJm
YWNlLgorICAgIGlmIChtX2N1cnJlbnREcmFnRGF0YS5nZXQoKSkgeworICAgICAgICBEcmFnRGF0
YSBkcmFnRGF0YSgKKyAgICAgICAgICAgIG1fY3VycmVudERyYWdEYXRhLmdldCgpLAorICAgICAg
ICAgICAgY2xpZW50UG9pbnQsCisgICAgICAgICAgICBzY3JlZW5Qb2ludCwKKyAgICAgICAgICAg
IHN0YXRpY19jYXN0PERyYWdPcGVyYXRpb24+KG1fb3BlcmF0aW9uc0FsbG93ZWQpKTsKKworICAg
ICAgICBtX2RyYWdUYXJnZXREaXNwYXRjaCA9IHRydWU7CisgICAgICAgIG1fcGFnZS0+ZHJhZ0Nv
bnRyb2xsZXIoKS0+cGVyZm9ybURyYWcoJmRyYWdEYXRhKTsKKyAgICAgICAgbV9kcmFnVGFyZ2V0
RGlzcGF0Y2ggPSBmYWxzZTsKKyAgICB9IGVsc2UgaWYgKG1fY3VycmVudERyYWdEYXRhTmV3Lmdl
dCgpKSB7CisgICAgICAgIERyYWdEYXRhIGRyYWdEYXRhKAorICAgICAgICAgICAgbV9jdXJyZW50
RHJhZ0RhdGFOZXcuZ2V0KCksCisgICAgICAgICAgICBjbGllbnRQb2ludCwKKyAgICAgICAgICAg
IHNjcmVlblBvaW50LAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8RHJhZ09wZXJhdGlvbj4obV9v
cGVyYXRpb25zQWxsb3dlZCkpOworCisgICAgICAgIG1fZHJhZ1RhcmdldERpc3BhdGNoID0gdHJ1
ZTsKKyAgICAgICAgbV9wYWdlLT5kcmFnQ29udHJvbGxlcigpLT5wZXJmb3JtRHJhZygmZHJhZ0Rh
dGEpOworICAgICAgICBtX2RyYWdUYXJnZXREaXNwYXRjaCA9IGZhbHNlOworICAgIH0gZWxzZSB7
CisgICAgICAgIEFTU0VSVChmYWxzZSk7CisgICAgfQogCiAgICAgbV9jdXJyZW50RHJhZ0RhdGEg
PSAwOworICAgIG1fY3VycmVudERyYWdEYXRhTmV3ID0gMDsKICAgICBtX2Ryb3BFZmZlY3QgPSBE
cm9wRWZmZWN0RGVmYXVsdDsKICAgICBtX2RyYWdPcGVyYXRpb24gPSBXZWJEcmFnT3BlcmF0aW9u
Tm9uZTsKICAgICBtX2RyYWdJZGVudGl0eSA9IDA7CkBAIC0xNjU2LDI4ICsxNzAyLDUzIEBAIGlu
dCBXZWJWaWV3SW1wbDo6ZHJhZ0lkZW50aXR5KCkKIAogV2ViRHJhZ09wZXJhdGlvbiBXZWJWaWV3
SW1wbDo6ZHJhZ1RhcmdldERyYWdFbnRlck9yT3Zlcihjb25zdCBXZWJQb2ludCYgY2xpZW50UG9p
bnQsIGNvbnN0IFdlYlBvaW50JiBzY3JlZW5Qb2ludCwgRHJhZ0FjdGlvbiBkcmFnQWN0aW9uKQog
ewotICAgIEFTU0VSVChtX2N1cnJlbnREcmFnRGF0YS5nZXQoKSk7Ci0KLSAgICBEcmFnRGF0YSBk
cmFnRGF0YSgKLSAgICAgICAgbV9jdXJyZW50RHJhZ0RhdGEuZ2V0KCksCi0gICAgICAgIGNsaWVu
dFBvaW50LAotICAgICAgICBzY3JlZW5Qb2ludCwKLSAgICAgICAgc3RhdGljX2Nhc3Q8RHJhZ09w
ZXJhdGlvbj4obV9vcGVyYXRpb25zQWxsb3dlZCkpOwotCi0gICAgbV9kcm9wRWZmZWN0ID0gRHJv
cEVmZmVjdERlZmF1bHQ7Ci0gICAgbV9kcmFnVGFyZ2V0RGlzcGF0Y2ggPSB0cnVlOwotICAgIERy
YWdPcGVyYXRpb24gZWZmZWN0ID0gZHJhZ0FjdGlvbiA9PSBEcmFnRW50ZXIgPyBtX3BhZ2UtPmRy
YWdDb250cm9sbGVyKCktPmRyYWdFbnRlcmVkKCZkcmFnRGF0YSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbV9wYWdlLT5kcmFnQ29udHJvbGxl
cigpLT5kcmFnVXBkYXRlZCgmZHJhZ0RhdGEpOwotICAgIC8vIE1hc2sgdGhlIG9wZXJhdGlvbiBh
Z2FpbnN0IHRoZSBkcmFnIHNvdXJjZSdzIGFsbG93ZWQgb3BlcmF0aW9ucy4KLSAgICBpZiAoIShl
ZmZlY3QgJiBkcmFnRGF0YS5kcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2soKSkpCi0gICAgICAg
IGVmZmVjdCA9IERyYWdPcGVyYXRpb25Ob25lOwotICAgIG1fZHJhZ1RhcmdldERpc3BhdGNoID0g
ZmFsc2U7Ci0KLSAgICBpZiAobV9kcm9wRWZmZWN0ICE9IERyb3BFZmZlY3REZWZhdWx0KSB7Ci0g
ICAgICAgIG1fZHJhZ09wZXJhdGlvbiA9IChtX2Ryb3BFZmZlY3QgIT0gRHJvcEVmZmVjdE5vbmUp
ID8gV2ViRHJhZ09wZXJhdGlvbkNvcHkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBXZWJEcmFnT3BlcmF0aW9uTm9uZTsKLSAgICB9
IGVsc2UKLSAgICAgICAgbV9kcmFnT3BlcmF0aW9uID0gc3RhdGljX2Nhc3Q8V2ViRHJhZ09wZXJh
dGlvbj4oZWZmZWN0KTsKKyAgICAvLyBGSVhNRTogVGhpcyBpcyB0ZW1wb3Jhcnkgd2hpbGUgdW50
aWwgQ2hyb21pdW0gc2lkZSBpcyB0cmFuc2l0aW9uZWQgdG8gdXNlCisgICAgLy8gdGhlIG5ldyBk
cmFnZ2luZyBpbnRlcmZhY2UuCisgICAgaWYgKG1fY3VycmVudERyYWdEYXRhLmdldCgpKSB7Cisg
ICAgICAgIERyYWdEYXRhIGRyYWdEYXRhKAorICAgICAgICAgICAgbV9jdXJyZW50RHJhZ0RhdGEu
Z2V0KCksCisgICAgICAgICAgICBjbGllbnRQb2ludCwKKyAgICAgICAgICAgIHNjcmVlblBvaW50
LAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8RHJhZ09wZXJhdGlvbj4obV9vcGVyYXRpb25zQWxs
b3dlZCkpOworCisgICAgICAgIG1fZHJvcEVmZmVjdCA9IERyb3BFZmZlY3REZWZhdWx0OworICAg
ICAgICBtX2RyYWdUYXJnZXREaXNwYXRjaCA9IHRydWU7CisgICAgICAgIERyYWdPcGVyYXRpb24g
ZWZmZWN0ID0gZHJhZ0FjdGlvbiA9PSBEcmFnRW50ZXIgPyBtX3BhZ2UtPmRyYWdDb250cm9sbGVy
KCktPmRyYWdFbnRlcmVkKCZkcmFnRGF0YSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA6IG1fcGFnZS0+ZHJhZ0NvbnRyb2xsZXIoKS0+ZHJh
Z1VwZGF0ZWQoJmRyYWdEYXRhKTsKKyAgICAgICAgLy8gTWFzayB0aGUgb3BlcmF0aW9uIGFnYWlu
c3QgdGhlIGRyYWcgc291cmNlJ3MgYWxsb3dlZCBvcGVyYXRpb25zLgorICAgICAgICBpZiAoIShl
ZmZlY3QgJiBkcmFnRGF0YS5kcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2soKSkpCisgICAgICAg
ICAgICBlZmZlY3QgPSBEcmFnT3BlcmF0aW9uTm9uZTsKKyAgICAgICAgbV9kcmFnVGFyZ2V0RGlz
cGF0Y2ggPSBmYWxzZTsKKworICAgICAgICBpZiAobV9kcm9wRWZmZWN0ICE9IERyb3BFZmZlY3RE
ZWZhdWx0KSB7CisgICAgICAgICAgICBtX2RyYWdPcGVyYXRpb24gPSAobV9kcm9wRWZmZWN0ICE9
IERyb3BFZmZlY3ROb25lKSA/IFdlYkRyYWdPcGVyYXRpb25Db3B5CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFdlYkRyYWdP
cGVyYXRpb25Ob25lOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1fZHJhZ09wZXJhdGlv
biA9IHN0YXRpY19jYXN0PFdlYkRyYWdPcGVyYXRpb24+KGVmZmVjdCk7CisgICAgfSBlbHNlIGlm
IChtX2N1cnJlbnREcmFnRGF0YU5ldy5nZXQoKSkgeworICAgICAgICBEcmFnRGF0YSBkcmFnRGF0
YSgKKyAgICAgICAgICAgIG1fY3VycmVudERyYWdEYXRhTmV3LmdldCgpLAorICAgICAgICAgICAg
Y2xpZW50UG9pbnQsCisgICAgICAgICAgICBzY3JlZW5Qb2ludCwKKyAgICAgICAgICAgIHN0YXRp
Y19jYXN0PERyYWdPcGVyYXRpb24+KG1fb3BlcmF0aW9uc0FsbG93ZWQpKTsKKworICAgICAgICBt
X2Ryb3BFZmZlY3QgPSBEcm9wRWZmZWN0RGVmYXVsdDsKKyAgICAgICAgbV9kcmFnVGFyZ2V0RGlz
cGF0Y2ggPSB0cnVlOworICAgICAgICBEcmFnT3BlcmF0aW9uIGVmZmVjdCA9IGRyYWdBY3Rpb24g
PT0gRHJhZ0VudGVyID8gbV9wYWdlLT5kcmFnQ29udHJvbGxlcigpLT5kcmFnRW50ZXJlZCgmZHJh
Z0RhdGEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOiBtX3BhZ2UtPmRyYWdDb250cm9sbGVyKCktPmRyYWdVcGRhdGVkKCZkcmFnRGF0YSk7
CisgICAgICAgIC8vIE1hc2sgdGhlIG9wZXJhdGlvbiBhZ2FpbnN0IHRoZSBkcmFnIHNvdXJjZSdz
IGFsbG93ZWQgb3BlcmF0aW9ucy4KKyAgICAgICAgaWYgKCEoZWZmZWN0ICYgZHJhZ0RhdGEuZHJh
Z2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrKCkpKQorICAgICAgICAgICAgZWZmZWN0ID0gRHJhZ09w
ZXJhdGlvbk5vbmU7CisgICAgICAgIG1fZHJhZ1RhcmdldERpc3BhdGNoID0gZmFsc2U7CisKKyAg
ICAgICAgaWYgKG1fZHJvcEVmZmVjdCAhPSBEcm9wRWZmZWN0RGVmYXVsdCkgeworICAgICAgICAg
ICAgbV9kcmFnT3BlcmF0aW9uID0gKG1fZHJvcEVmZmVjdCAhPSBEcm9wRWZmZWN0Tm9uZSkgPyBX
ZWJEcmFnT3BlcmF0aW9uQ29weQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBXZWJEcmFnT3BlcmF0aW9uTm9uZTsKKyAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICBtX2RyYWdPcGVyYXRpb24gPSBzdGF0aWNfY2FzdDxXZWJE
cmFnT3BlcmF0aW9uPihlZmZlY3QpOworICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVChmYWxz
ZSk7CisgICAgfQogCiAgICAgaWYgKGRyYWdBY3Rpb24gPT0gRHJhZ092ZXIpCiAgICAgICAgIG1f
ZHJhZ1Njcm9sbFRpbWVyLT50cmlnZ2VyU2Nyb2xsKG1haW5GcmFtZUltcGwoKS0+ZnJhbWVWaWV3
KCksIGNsaWVudFBvaW50KTsKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmll
d0ltcGwuaCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAppbmRleCBjMjk2MTIx
Li5mMWYwYmZkIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgK
KysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCkBAIC02Myw2ICs2Myw3IEBA
IGNsYXNzIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDsKIGNsYXNzIFBvcHVwQ29udGFpbmVyOwogY2xh
c3MgUG9wdXBNZW51Q2xpZW50OwogY2xhc3MgUmFuZ2U7CitjbGFzcyBSZWFkYWJsZURhdGFPYmpl
Y3Q7CiBjbGFzcyBSZW5kZXJUaGVtZTsKIGNsYXNzIFdpZGdldDsKIH0KQEAgLTE0OCw2ICsxNDks
MTEgQEAgcHVibGljOgogICAgICAgICBjb25zdCBXZWJQb2ludCYgY2xpZW50UG9pbnQsCiAgICAg
ICAgIGNvbnN0IFdlYlBvaW50JiBzY3JlZW5Qb2ludCwKICAgICAgICAgV2ViRHJhZ09wZXJhdGlv
bnNNYXNrIG9wZXJhdGlvbnNBbGxvd2VkKTsKKyAgICB2aXJ0dWFsIFdlYkRyYWdPcGVyYXRpb24g
ZHJhZ1RhcmdldERyYWdFbnRlck5ldygKKyAgICAgICAgaW50IGlkZW50aXR5LAorICAgICAgICBj
b25zdCBXZWJQb2ludCYgY2xpZW50UG9pbnQsCisgICAgICAgIGNvbnN0IFdlYlBvaW50JiBzY3Jl
ZW5Qb2ludCwKKyAgICAgICAgV2ViRHJhZ09wZXJhdGlvbnNNYXNrIG9wZXJhdGlvbnNBbGxvd2Vk
KTsKICAgICB2aXJ0dWFsIFdlYkRyYWdPcGVyYXRpb24gZHJhZ1RhcmdldERyYWdPdmVyKAogICAg
ICAgICBjb25zdCBXZWJQb2ludCYgY2xpZW50UG9pbnQsCiAgICAgICAgIGNvbnN0IFdlYlBvaW50
JiBzY3JlZW5Qb2ludCwKQEAgLTQxOCw2ICs0MjQsOCBAQCBwcml2YXRlOgogCiAgICAgLy8gQSBj
b3B5IG9mIHRoZSB3ZWIgZHJvcCBkYXRhIG9iamVjdCB3ZSByZWNlaXZlZCBmcm9tIHRoZSBicm93
c2VyLgogICAgIFJlZlB0cjxXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q+IG1fY3VycmVudERy
YWdEYXRhOworICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhlIGR1cGxpY2F0aW9uIG9uY2UgQ2hyb21p
dW0gaXMgc3dpdGNoZWQgb3Zlci4KKyAgICBSZWZQdHI8V2ViQ29yZTo6UmVhZGFibGVEYXRhT2Jq
ZWN0PiBtX2N1cnJlbnREcmFnRGF0YU5ldzsKIAogICAgIC8vIFRoZSBwb2ludCByZWxhdGl2ZSB0
byB0aGUgY2xpZW50IGFyZWEgd2hlcmUgdGhlIG1vdXNlIHdhcyBsYXN0IHByZXNzZWQKICAgICAv
LyBkb3duLiBUaGlzIGlzIHVzZWQgYnkgdGhlIGRyYWcgY2xpZW50IHRvIGRldGVybWluZSB3aGF0
IHdhcyB1bmRlciB0aGUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66120</attachid>
            <date>2010-08-31 15:02:07 -0700</date>
            <delta_ts>2010-08-31 16:50:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>foo.patch</filename>
            <type>text/plain</type>
            <size>25174</size>
            <attacher name="Daniel Cheng">dcheng</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OWJhNzBjYi4uZmJmYjFmZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MiBAQAorMjAxMC0wOC0zMSAgRGFuaWVsIENoZW5n
ICA8ZGNoZW5nQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBbY2hyb21pdW1dIFByZXBhcmUgQ2xpcGJvYXJkL0RyYWdEYXRhIGZv
ciB0cmFuc2l0aW9uIHRvIG5ldyBkcmFnLWFuZC1kcm9wIGludGVyZmFjZS4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0OTkyCisKKyAgICAgICAgSW4g
b3JkZXIgdG8gYXZvaWQgYnJlYWtpbmcgQ2hyb21pdW0sIHdlIGhhdmUgdGhlIHJlbmRlcmVyIHNp
ZGUgaW1wbGVtZW50CisgICAgICAgIGJvdGggdGhlIG9sZCBhbmQgbmV3IGRyYWdnaW5nIGludGVy
ZmFjZSBhbmQgZ2F0ZSB0aGUgYmVoYXZpb3IgYmFzZWQgb2ZmCisgICAgICAgIG9mIHdoaWNoIERh
dGFPYmplY3QgcG9pbnRlciBpcyBzZXQuIFRoaXMgY2hhbmdlIG9ubHkgYWZmZWN0cyBkcmFnZ2lu
ZworICAgICAgICBpbnRvL292ZXIgdGhlIHJlbmRlcmVyOyBpdCBkb2VzIG5vdCBhZmZlY3Qgc3Rh
cnRpbmcgYSBkcmFnIG9yIGNvcHkgYW5kCisgICAgICAgIHBhc3RlLiBPbmNlIHRoZSBhcHByb3By
aWF0ZSBDaHJvbWl1bSBjaGFuZ2VzIGxhbmQsIHRoZSB0ZW1wb3JhcnkKKyAgICAgICAgY29uZGl0
aW9uYWwgYnJhbmNoZXMgd2lsbCBiZSByZW1vdmVkLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4K
KworICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNs
aXBib2FyZENocm9taXVtOjpDbGlwYm9hcmRDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpD
bGlwYm9hcmRDaHJvbWl1bTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENo
cm9taXVtOjpnZXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENocm9taXVtOjp0
eXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRDaHJvbWl1bTo6ZmlsZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkQ2hyb21pdW06Omhhc0RhdGEpOgorICAgICAgICAqIHBs
YXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmg6CisgICAgICAgICogcGxhdGZvcm0v
Y2hyb21pdW0vRHJhZ0RhdGFDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb250YWlu
c0hUTUwpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmNvbnRhaW5zVVJMKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRyYWdEYXRhOjphc1VSTCk6CisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0
YTo6Y29udGFpbnNGaWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0YTo6YXNGaWxlbmFt
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmNvbnRhaW5zUGxhaW5UZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjphc1BsYWluVGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpEcmFnRGF0YTo6Y2FuU21hcnRSZXBsYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRh
Ojpjb250YWluc0NvbXBhdGlibGVDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRh
Ojphc0ZyYWdtZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9EcmFnRGF0YVJlZi5o
OgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGFSZWY6OkRyYWdEYXRhUmVmKToKKwogMjAxMC0w
OC0zMCAgRGFuaWVsIENoZW5nICA8ZGNoZW5nQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9D
bGlwYm9hcmRDaHJvbWl1bS5jcHAKaW5kZXggMjM1MDhhNi4uNTNkY2I1NyAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5jcHAKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5jcHAKQEAgLTQ4LDYgKzQ4
LDkgQEAKICNpbmNsdWRlICJTdHJpbmdCdWlsZGVyLmgiCiAjaW5jbHVkZSAibWFya3VwLmgiCiAK
Ky8vIEZJWE1FOiBUaGlzIGNsYXNzIGN1cnJlbnRseSBoYXMgYSBsb3Qgb2YgZHVwbGljYXRpb24g
aW4gcHJlcGFyYXRpb24gZm9yIGEKKy8vIHRyYW5zaXRpb24gdG8gdGhlIG5ldyBkcmFnIGFuZCBk
cm9wIG1vZGVsLiBDbGVhbiBpdCB1cCBvbmNlIHRoZSB0cmFuc2l0aW9uIGlzCisvLyBkb25lIG9u
IHRoZSBDaHJvbWUgc2lkZS4KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNl
IEhUTUxOYW1lczsKQEAgLTkzLDcgKzk2LDkgQEAgc3RhdGljIENsaXBib2FyZERhdGFUeXBlIGNs
aXBib2FyZFR5cGVGcm9tTUlNRVR5cGUoY29uc3QgU3RyaW5nJiB0eXBlKQogCiBQYXNzUmVmUHRy
PENsaXBib2FyZD4gQ2xpcGJvYXJkOjpjcmVhdGUoQ2xpcGJvYXJkQWNjZXNzUG9saWN5IHBvbGlj
eSwgRHJhZ0RhdGEqIGRyYWdEYXRhLCBGcmFtZSogZnJhbWUpCiB7Ci0gICAgcmV0dXJuIENsaXBi
b2FyZENocm9taXVtOjpjcmVhdGUodHJ1ZSwgZHJhZ0RhdGEtPnBsYXRmb3JtRGF0YSgpLCBwb2xp
Y3ksIGZyYW1lKTsKKyAgICBpZiAoZHJhZ0RhdGEtPnBsYXRmb3JtRGF0YSgpLm9sZFdheSkKKyAg
ICAgICAgcmV0dXJuIENsaXBib2FyZENocm9taXVtOjpjcmVhdGUodHJ1ZSwgZHJhZ0RhdGEtPnBs
YXRmb3JtRGF0YSgpLm9sZFdheSwgcG9saWN5LCBmcmFtZSk7CisgICAgcmV0dXJuIENsaXBib2Fy
ZENocm9taXVtOjpjcmVhdGUodHJ1ZSwgZHJhZ0RhdGEtPnBsYXRmb3JtRGF0YSgpLm5ld1dheSwg
cG9saWN5LCBmcmFtZSk7CiB9CiAKIENsaXBib2FyZENocm9taXVtOjpDbGlwYm9hcmRDaHJvbWl1
bShib29sIGlzRm9yRHJhZ2dpbmcsCkBAIC0xMDYsMTIgKzExMSwyOCBAQCBDbGlwYm9hcmRDaHJv
bWl1bTo6Q2xpcGJvYXJkQ2hyb21pdW0oYm9vbCBpc0ZvckRyYWdnaW5nLAogewogfQogCitDbGlw
Ym9hcmRDaHJvbWl1bTo6Q2xpcGJvYXJkQ2hyb21pdW0oYm9vbCBpc0ZvckRyYWdnaW5nLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8UmVhZGFibGVEYXRh
T2JqZWN0PiBkYXRhT2JqZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IENsaXBib2FyZEFjY2Vzc1BvbGljeSBwb2xpY3ksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRnJhbWUqIGZyYW1lKQorICAgIDogQ2xpcGJvYXJkKHBvbGljeSwgaXNGb3JE
cmFnZ2luZykKKyAgICAsIG1fcmVhZGFibGVEYXRhT2JqZWN0KGRhdGFPYmplY3QpCisgICAgLCBt
X2ZyYW1lKGZyYW1lKQoreworfQorCiBQYXNzUmVmUHRyPENsaXBib2FyZENocm9taXVtPiBDbGlw
Ym9hcmRDaHJvbWl1bTo6Y3JlYXRlKGJvb2wgaXNGb3JEcmFnZ2luZywKICAgICBQYXNzUmVmUHRy
PENocm9taXVtRGF0YU9iamVjdD4gZGF0YU9iamVjdCwgQ2xpcGJvYXJkQWNjZXNzUG9saWN5IHBv
bGljeSwgRnJhbWUqIGZyYW1lKQogewogICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2xpcGJvYXJk
Q2hyb21pdW0oaXNGb3JEcmFnZ2luZywgZGF0YU9iamVjdCwgcG9saWN5LCBmcmFtZSkpOwogfQog
CitQYXNzUmVmUHRyPENsaXBib2FyZENocm9taXVtPiBDbGlwYm9hcmRDaHJvbWl1bTo6Y3JlYXRl
KGJvb2wgaXNGb3JEcmFnZ2luZywKKyAgICBQYXNzUmVmUHRyPFJlYWRhYmxlRGF0YU9iamVjdD4g
ZGF0YU9iamVjdCwgQ2xpcGJvYXJkQWNjZXNzUG9saWN5IHBvbGljeSwgRnJhbWUqIGZyYW1lKQor
eworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2xpcGJvYXJkQ2hyb21pdW0oaXNGb3JEcmFnZ2lu
ZywgZGF0YU9iamVjdCwgcG9saWN5LCBmcmFtZSkpOworfQorCiB2b2lkIENsaXBib2FyZENocm9t
aXVtOjpjbGVhckRhdGEoY29uc3QgU3RyaW5nJiB0eXBlKQogewogICAgIGlmIChwb2xpY3koKSAh
PSBDbGlwYm9hcmRXcml0YWJsZSB8fCAhbV9kYXRhT2JqZWN0KQpAQCAtMTYyLDcgKzE4MywxMyBA
QCB2b2lkIENsaXBib2FyZENocm9taXVtOjpjbGVhckFsbERhdGEoKQogU3RyaW5nIENsaXBib2Fy
ZENocm9taXVtOjpnZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgYm9vbCYgc3VjY2VzcykgY29u
c3QKIHsKICAgICBzdWNjZXNzID0gZmFsc2U7Ci0gICAgaWYgKHBvbGljeSgpICE9IENsaXBib2Fy
ZFJlYWRhYmxlIHx8ICFtX2RhdGFPYmplY3QpCisgICAgaWYgKHBvbGljeSgpICE9IENsaXBib2Fy
ZFJlYWRhYmxlKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBpZiAobV9yZWFkYWJs
ZURhdGFPYmplY3QpCisgICAgICAgIHJldHVybiBtX3JlYWRhYmxlRGF0YU9iamVjdC0+Z2V0RGF0
YSh0eXBlLCBzdWNjZXNzKTsKKyAgICAgIAorICAgIGlmICghbV9kYXRhT2JqZWN0KQogICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7CiAKICAgICBDbGlwYm9hcmREYXRhVHlwZSBkYXRhVHlwZSA9IGNs
aXBib2FyZFR5cGVGcm9tTUlNRVR5cGUodHlwZSk7CkBAIC0zMjIsNiArMzQ5LDkgQEAgSGFzaFNl
dDxTdHJpbmc+IENsaXBib2FyZENocm9taXVtOjp0eXBlcygpIGNvbnN0CiAgICAgaWYgKHBvbGlj
eSgpICE9IENsaXBib2FyZFJlYWRhYmxlICYmIHBvbGljeSgpICE9IENsaXBib2FyZFR5cGVzUmVh
ZGFibGUpCiAgICAgICAgIHJldHVybiByZXN1bHRzOwogCisgICAgaWYgKG1fcmVhZGFibGVEYXRh
T2JqZWN0KQorICAgICAgICByZXR1cm4gbV9yZWFkYWJsZURhdGFPYmplY3QtPnR5cGVzKCk7CisK
ICAgICBpZiAoIW1fZGF0YU9iamVjdCkKICAgICAgICAgcmV0dXJuIHJlc3VsdHM7CiAKQEAgLTM2
MSw2ICszOTEsMTQgQEAgUGFzc1JlZlB0cjxGaWxlTGlzdD4gQ2xpcGJvYXJkQ2hyb21pdW06OmZp
bGVzKCkgY29uc3QKICAgICBpZiAocG9saWN5KCkgIT0gQ2xpcGJvYXJkUmVhZGFibGUpCiAgICAg
ICAgIHJldHVybiBGaWxlTGlzdDo6Y3JlYXRlKCk7CiAKKyAgICBpZiAobV9yZWFkYWJsZURhdGFP
YmplY3QpIHsKKyAgICAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCA9IG1fZnJhbWUtPmRvY3VtZW50KCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsK
KyAgICAgICAgUmVmUHRyPEZpbGVMaXN0PiBmaWxlTGlzdCA9IEZpbGVMaXN0OjpjcmVhdGUoKTsK
KyAgICAgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcyA9IG1fcmVhZGFibGVEYXRh
T2JqZWN0LT5maWxlbmFtZXMoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWxl
bmFtZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBmaWxlTGlzdC0+YXBwZW5kKEZpbGU6OmNy
ZWF0ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBmaWxlbmFtZXMuYXQoaSkpKTsKKyAgICB9CisK
ICAgICBpZiAoIW1fZGF0YU9iamVjdCB8fCBtX2RhdGFPYmplY3QtPmZpbGVuYW1lcy5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybiBGaWxlTGlzdDo6Y3JlYXRlKCk7CiAKQEAgLTU1Niw2ICs1OTQs
OSBAQCB2b2lkIENsaXBib2FyZENocm9taXVtOjp3cml0ZVBsYWluVGV4dChjb25zdCBTdHJpbmcm
IHRleHQpCiAKIGJvb2wgQ2xpcGJvYXJkQ2hyb21pdW06Omhhc0RhdGEoKQogeworICAgIGlmICht
X3JlYWRhYmxlRGF0YU9iamVjdCkKKyAgICAgICAgcmV0dXJuIG1fcmVhZGFibGVEYXRhT2JqZWN0
LT5oYXNEYXRhKCk7CisKICAgICBpZiAoIW1fZGF0YU9iamVjdCkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENo
cm9taXVtLmggYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmgK
aW5kZXggYTQxNTBkMC4uODllODA2OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0v
Q2xpcGJvYXJkQ2hyb21pdW0uaApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkNsaXBib2Fy
ZC5oIgogCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnQuaCIKKyNpbmNsdWRlICJEcmFn
RGF0YVJlZi5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQwLDYgKzQxLDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIENocm9taXVtRGF0YU9iamVjdDsKICAgICBjbGFz
cyBGcmFtZTsKICAgICBjbGFzcyBJbnRQb2ludDsKKyAgICBjbGFzcyBSZWFkYWJsZURhdGFPYmpl
Y3Q7CiAKICAgICBjbGFzcyBDbGlwYm9hcmRDaHJvbWl1bSA6IHB1YmxpYyBDbGlwYm9hcmQsIHB1
YmxpYyBDYWNoZWRSZXNvdXJjZUNsaWVudCB7CiAgICAgcHVibGljOgpAQCAtNDcsNiArNDksOCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2xpcGJv
YXJkQ2hyb21pdW0+IGNyZWF0ZSgKICAgICAgICAgICAgIGJvb2wgaXNGb3JEcmFnZ2luZywgUGFz
c1JlZlB0cjxDaHJvbWl1bURhdGFPYmplY3Q+LCBDbGlwYm9hcmRBY2Nlc3NQb2xpY3ksIEZyYW1l
Kik7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENsaXBib2FyZENocm9taXVtPiBjcmVhdGUo
CisgICAgICAgICAgICBib29sIGlzRm9yRHJhZ2dpbmcsIFBhc3NSZWZQdHI8UmVhZGFibGVEYXRh
T2JqZWN0PiwgQ2xpcGJvYXJkQWNjZXNzUG9saWN5LCBGcmFtZSopOwogCiAgICAgICAgIC8vIFJl
dHVybnMgdGhlIGZpbGUgbmFtZSAobm90IGluY2x1ZGluZyB0aGUgZXh0ZW5zaW9uKS4gVGhpcyBy
ZW1vdmVzIGFueQogICAgICAgICAvLyBpbnZhbGlkIGZpbGUgc3lzdGVtIGNoYXJhY3RlcnMgYXMg
d2VsbCBhcyBtYWtpbmcgc3VyZSB0aGUKQEAgLTgxLDEwICs4NSwxMiBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKICAgICBwcml2YXRlOgogICAgICAgICBDbGlwYm9hcmRDaHJvbWl1bShib29sLCBQ
YXNzUmVmUHRyPENocm9taXVtRGF0YU9iamVjdD4sIENsaXBib2FyZEFjY2Vzc1BvbGljeSwgRnJh
bWUqKTsKKyAgICAgICAgQ2xpcGJvYXJkQ2hyb21pdW0oYm9vbCwgUGFzc1JlZlB0cjxSZWFkYWJs
ZURhdGFPYmplY3Q+LCBDbGlwYm9hcmRBY2Nlc3NQb2xpY3ksIEZyYW1lKik7CiAKICAgICAgICAg
dm9pZCByZXNldEZyb21DbGlwYm9hcmQoKTsKICAgICAgICAgdm9pZCBzZXREcmFnSW1hZ2UoQ2Fj
aGVkSW1hZ2UqLCBOb2RlKiwgY29uc3QgSW50UG9pbnQmKTsKICAgICAgICAgUmVmUHRyPENocm9t
aXVtRGF0YU9iamVjdD4gbV9kYXRhT2JqZWN0OworICAgICAgICBSZWZQdHI8UmVhZGFibGVEYXRh
T2JqZWN0PiBtX3JlYWRhYmxlRGF0YU9iamVjdDsKICAgICAgICAgRnJhbWUqIG1fZnJhbWU7CiAg
ICAgfTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EcmFnRGF0YUNo
cm9taXVtLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRHJhZ0RhdGFDaHJvbWl1bS5j
cHAKaW5kZXggNjc0ZDM0ZC4uYzM3NWU3YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9j
aHJvbWl1bS9EcmFnRGF0YUNocm9taXVtLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9t
aXVtL0RyYWdEYXRhQ2hyb21pdW0uY3BwCkBAIC00MSw1MiArNDEsODQgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1zdGF0aWMgYm9vbCBjb250YWluc0hUTUwoY29uc3QgQ2hyb21pdW1EYXRh
T2JqZWN0KiBkcm9wRGF0YSkKK3N0YXRpYyBib29sIGNvbnRhaW5zSFRNTChjb25zdCBEcmFnRGF0
YVJlZiogZHJvcERhdGEpCiB7Ci0gICAgcmV0dXJuIGRyb3BEYXRhLT50ZXh0SHRtbC5sZW5ndGgo
KSA+IDA7CisgICAgaWYgKGRyb3BEYXRhLT5vbGRXYXkpCisgICAgICAgIHJldHVybiBkcm9wRGF0
YS0+b2xkV2F5LT50ZXh0SHRtbC5sZW5ndGgoKSA+IDA7CisgICAgcmV0dXJuIGRyb3BEYXRhLT5u
ZXdXYXktPnR5cGVzKCkuY29udGFpbnMoInRleHQvaHRtbCIpOwogfQogCiBib29sIERyYWdEYXRh
Ojpjb250YWluc1VSTChGaWxlbmFtZUNvbnZlcnNpb25Qb2xpY3kgZmlsZW5hbWVQb2xpY3kpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuICFhc1VSTChmaWxlbmFtZVBvbGljeSkuaXNFbXB0eSgpOworICAg
IGlmIChtX3BsYXRmb3JtRHJhZ0RhdGEub2xkV2F5KQorICAgICAgICByZXR1cm4gIWFzVVJMKGZp
bGVuYW1lUG9saWN5KS5pc0VtcHR5KCk7CisgICAgcmV0dXJuIG1fcGxhdGZvcm1EcmFnRGF0YS5u
ZXdXYXktPnR5cGVzKCkuY29udGFpbnMoInRleHQvdXJpLWxpc3QiKQorICAgICAgICB8fCAoZmls
ZW5hbWVQb2xpY3kgPT0gQ29udmVydEZpbGVuYW1lcyAmJiBtX3BsYXRmb3JtRHJhZ0RhdGEubmV3
V2F5LT5oYXNGaWxlbmFtZXMoKSk7CiB9CiAKIFN0cmluZyBEcmFnRGF0YTo6YXNVUkwoRmlsZW5h
bWVDb252ZXJzaW9uUG9saWN5IGZpbGVuYW1lUG9saWN5LCBTdHJpbmcqIHRpdGxlKSBjb25zdAog
ewotICAgIFN0cmluZyB1cmw7Ci0gICAgaWYgKG1fcGxhdGZvcm1EcmFnRGF0YS0+aGFzVmFsaWRV
UkwoKSkKLSAgICAgICAgdXJsID0gbV9wbGF0Zm9ybURyYWdEYXRhLT5nZXRVUkwoKS5zdHJpbmco
KTsKLSAgICBlbHNlIGlmIChmaWxlbmFtZVBvbGljeSA9PSBDb252ZXJ0RmlsZW5hbWVzICYmICFt
X3BsYXRmb3JtRHJhZ0RhdGEtPmZpbGVuYW1lcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgU3RyaW5n
IGZpbGVOYW1lID0gbV9wbGF0Zm9ybURyYWdEYXRhLT5maWxlbmFtZXNbMF07CisgICAgaWYgKG1f
cGxhdGZvcm1EcmFnRGF0YS5vbGRXYXkpIHsKKyAgICAgICAgU3RyaW5nIHVybDsKKyAgICAgICAg
aWYgKG1fcGxhdGZvcm1EcmFnRGF0YS5vbGRXYXktPmhhc1ZhbGlkVVJMKCkpCisgICAgICAgICAg
ICB1cmwgPSBtX3BsYXRmb3JtRHJhZ0RhdGEub2xkV2F5LT5nZXRVUkwoKS5zdHJpbmcoKTsKKyAg
ICAgICAgZWxzZSBpZiAoZmlsZW5hbWVQb2xpY3kgPT0gQ29udmVydEZpbGVuYW1lcyAmJiAhbV9w
bGF0Zm9ybURyYWdEYXRhLm9sZFdheS0+ZmlsZW5hbWVzLmlzRW1wdHkoKSkgeworICAgICAgICAg
ICAgU3RyaW5nIGZpbGVOYW1lID0gbV9wbGF0Zm9ybURyYWdEYXRhLm9sZFdheS0+ZmlsZW5hbWVz
WzBdOworICAgICAgICAgICAgZmlsZU5hbWUgPSBDaHJvbWl1bUJyaWRnZTo6Z2V0QWJzb2x1dGVQ
YXRoKGZpbGVOYW1lKTsKKyAgICAgICAgICAgIHVybCA9IENocm9taXVtQnJpZGdlOjpmaWxlUGF0
aFRvVVJMKGZpbGVOYW1lKS5zdHJpbmcoKTsKKyAgICAgICAgfQorICAgICAKKyAgICAgICAgLy8g
fHRpdGxlfCBjYW4gYmUgTlVMTAorICAgICAgICBpZiAodGl0bGUpCisgICAgICAgICAgICAqdGl0
bGUgPSBtX3BsYXRmb3JtRHJhZ0RhdGEub2xkV2F5LT51cmxUaXRsZTsKKyAgICAgICAgcmV0dXJu
IHVybDsKKyAgICB9CisKKyAgICBTdHJpbmcgdXJsID0gbV9wbGF0Zm9ybURyYWdEYXRhLm5ld1dh
eS0+Z2V0VVJMKHRpdGxlKTsKKyAgICBpZiAoIUtVUkwoS1VSTCgpLCB1cmwpLmlzVmFsaWQoKQor
ICAgICAgICAmJiBmaWxlbmFtZVBvbGljeSA9PSBDb252ZXJ0RmlsZW5hbWVzCisgICAgICAgICYm
IG1fcGxhdGZvcm1EcmFnRGF0YS5uZXdXYXktPmhhc0ZpbGVuYW1lcygpKSB7CisgICAgICAgIFN0
cmluZyBmaWxlTmFtZSA9IG1fcGxhdGZvcm1EcmFnRGF0YS5uZXdXYXktPmZpbGVuYW1lcygpWzBd
OwogICAgICAgICBmaWxlTmFtZSA9IENocm9taXVtQnJpZGdlOjpnZXRBYnNvbHV0ZVBhdGgoZmls
ZU5hbWUpOwogICAgICAgICB1cmwgPSBDaHJvbWl1bUJyaWRnZTo6ZmlsZVBhdGhUb1VSTChmaWxl
TmFtZSkuc3RyaW5nKCk7CisgICAgICAgIGlmICh0aXRsZSkKKyAgICAgICAgICAgICp0aXRsZSA9
ICIiOwogICAgIH0KLSAKLSAgICAvLyB8dGl0bGV8IGNhbiBiZSBOVUxMCi0gICAgaWYgKHRpdGxl
KQotICAgICAgICAqdGl0bGUgPSBtX3BsYXRmb3JtRHJhZ0RhdGEtPnVybFRpdGxlOwogICAgIHJl
dHVybiB1cmw7CiB9CiAKIGJvb2wgRHJhZ0RhdGE6OmNvbnRhaW5zRmlsZXMoKSBjb25zdAogewot
ICAgIHJldHVybiAhbV9wbGF0Zm9ybURyYWdEYXRhLT5maWxlbmFtZXMuaXNFbXB0eSgpOworICAg
IGlmIChtX3BsYXRmb3JtRHJhZ0RhdGEub2xkV2F5KQorICAgICAgICByZXR1cm4gIW1fcGxhdGZv
cm1EcmFnRGF0YS5vbGRXYXktPmZpbGVuYW1lcy5pc0VtcHR5KCk7CisgICAgcmV0dXJuIG1fcGxh
dGZvcm1EcmFnRGF0YS5uZXdXYXktPmhhc0ZpbGVuYW1lcygpOwogfQogCiB2b2lkIERyYWdEYXRh
Ojphc0ZpbGVuYW1lcyhWZWN0b3I8U3RyaW5nPiYgcmVzdWx0KSBjb25zdAogewotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV9wbGF0Zm9ybURyYWdEYXRhLT5maWxlbmFtZXMuc2l6ZSgpOyAr
K2kpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQobV9wbGF0Zm9ybURyYWdEYXRhLT5maWxlbmFtZXNb
aV0pOworICAgIGlmIChtX3BsYXRmb3JtRHJhZ0RhdGEub2xkV2F5KSB7CisgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV9wbGF0Zm9ybURyYWdEYXRhLm9sZFdheS0+ZmlsZW5hbWVzLnNp
emUoKTsgKytpKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChtX3BsYXRmb3JtRHJhZ0RhdGEu
b2xkV2F5LT5maWxlbmFtZXNbaV0pOworICAgIH0gZWxzZSB7CisgICAgICAgIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBmaWxlbmFtZXMgPSBtX3BsYXRmb3JtRHJhZ0RhdGEubmV3V2F5LT5maWxlbmFt
ZXMoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWxlbmFtZXMuc2l6ZSgpOyAr
K2kpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGZpbGVuYW1lc1tpXSk7CisgICAgfQogfQog
CiBib29sIERyYWdEYXRhOjpjb250YWluc1BsYWluVGV4dCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
ICFtX3BsYXRmb3JtRHJhZ0RhdGEtPnBsYWluVGV4dC5pc0VtcHR5KCk7CisgICAgaWYgKG1fcGxh
dGZvcm1EcmFnRGF0YS5vbGRXYXkpCisgICAgICAgIHJldHVybiAhbV9wbGF0Zm9ybURyYWdEYXRh
Lm9sZFdheS0+cGxhaW5UZXh0LmlzRW1wdHkoKTsKKyAgICByZXR1cm4gbV9wbGF0Zm9ybURyYWdE
YXRhLm5ld1dheS0+dHlwZXMoKS5jb250YWlucygidGV4dC9wbGFpbiIpOwogfQogCiBTdHJpbmcg
RHJhZ0RhdGE6OmFzUGxhaW5UZXh0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9wbGF0Zm9ybURy
YWdEYXRhLT5wbGFpblRleHQ7CisgICAgaWYgKG1fcGxhdGZvcm1EcmFnRGF0YS5vbGRXYXkpCisg
ICAgICAgIHJldHVybiBtX3BsYXRmb3JtRHJhZ0RhdGEub2xkV2F5LT5wbGFpblRleHQ7CisgICAg
Ym9vbCBpZ25vcmVkU3VjY2VzczsKKyAgICByZXR1cm4gbV9wbGF0Zm9ybURyYWdEYXRhLm5ld1dh
eS0+Z2V0RGF0YSgidGV4dC9wbGFpbiIsIGlnbm9yZWRTdWNjZXNzKTsKIH0KIAogYm9vbCBEcmFn
RGF0YTo6Y29udGFpbnNDb2xvcigpIGNvbnN0CkBAIC0xMDEsMTUgKzEzMywxOSBAQCBib29sIERy
YWdEYXRhOjpjYW5TbWFydFJlcGxhY2UoKSBjb25zdAogICAgIC8vIFRoaXMgaXMgYWxsb3dlZCB3
aGVuZXZlciB0aGUgZHJhZyBkYXRhIGNvbnRhaW5zIGEgJ3JhbmdlJyAoaWUuLAogICAgIC8vIENs
aXBib2FyZFdpbjo6d3JpdGVSYW5nZSBpcyBjYWxsZWQpLiAgRm9yIGV4YW1wbGUsIGRyYWdnaW5n
IGEgbGluawogICAgIC8vIHNob3VsZCBub3QgcmVzdWx0IGluIGEgc3BhY2UgYmVpbmcgYWRkZWQu
Ci0gICAgcmV0dXJuICFtX3BsYXRmb3JtRHJhZ0RhdGEtPnBsYWluVGV4dC5pc0VtcHR5KCkKLSAg
ICAgICAgJiYgIW1fcGxhdGZvcm1EcmFnRGF0YS0+aGFzVmFsaWRVUkwoKTsKKyAgICBpZiAobV9w
bGF0Zm9ybURyYWdEYXRhLm9sZFdheSkKKyAgICAgICAgcmV0dXJuICFtX3BsYXRmb3JtRHJhZ0Rh
dGEub2xkV2F5LT5wbGFpblRleHQuaXNFbXB0eSgpCisgICAgICAgICAgICAmJiAhbV9wbGF0Zm9y
bURyYWdEYXRhLm9sZFdheS0+aGFzVmFsaWRVUkwoKTsKKyAgICByZXR1cm4gbV9wbGF0Zm9ybURy
YWdEYXRhLm5ld1dheS0+dHlwZXMoKS5jb250YWlucygidGV4dC9wbGFpbiIpCisgICAgICAgIC8v
IEZJWE1FOiBEbyB3ZSBuZWVkIHRvIGNoZWNrIFVSTCB2YWxpZGl0eT8KKyAgICAgICAgJiYgIW1f
cGxhdGZvcm1EcmFnRGF0YS5uZXdXYXktPnR5cGVzKCkuY29udGFpbnMoInRleHQvdXJpLWxpc3Qi
KTsKIH0KIAogYm9vbCBEcmFnRGF0YTo6Y29udGFpbnNDb21wYXRpYmxlQ29udGVudCgpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIGNvbnRhaW5zUGxhaW5UZXh0KCkKICAgICAgICAgfHwgY29udGFpbnNV
UkwoKQotICAgICAgICB8fCBjb250YWluc0hUTUwobV9wbGF0Zm9ybURyYWdEYXRhKQorICAgICAg
ICB8fCBjb250YWluc0hUTUwoJm1fcGxhdGZvcm1EcmFnRGF0YSkKICAgICAgICAgfHwgY29udGFp
bnNDb2xvcigpCiAgICAgICAgIHx8IGNvbnRhaW5zRmlsZXMoKTsKIH0KQEAgLTEzNCwxMCArMTcw
LDIwIEBAIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gRHJhZ0RhdGE6OmFzRnJhZ21lbnQo
RG9jdW1lbnQqIGRvYykgY29uc3QKICAgICAgICAgLy8gICAgcmV0dXJuIGZyYWdtZW50OwogICAg
IH0KIAotICAgIGlmICghbV9wbGF0Zm9ybURyYWdEYXRhLT50ZXh0SHRtbC5pc0VtcHR5KCkpIHsK
LSAgICAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21l
bnRGcm9tTWFya3VwKGRvYywKLSAgICAgICAgICAgIG1fcGxhdGZvcm1EcmFnRGF0YS0+dGV4dEh0
bWwsIG1fcGxhdGZvcm1EcmFnRGF0YS0+aHRtbEJhc2VVcmwsIEZyYWdtZW50U2NyaXB0aW5nTm90
QWxsb3dlZCk7Ci0gICAgICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNlKCk7CisgICAgaWYgKG1f
cGxhdGZvcm1EcmFnRGF0YS5vbGRXYXkpIHsKKyAgICAgICAgaWYgKCFtX3BsYXRmb3JtRHJhZ0Rh
dGEub2xkV2F5LT50ZXh0SHRtbC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIFJlZlB0cjxEb2N1
bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChkb2MsCisg
ICAgICAgICAgICAgICAgbV9wbGF0Zm9ybURyYWdEYXRhLm9sZFdheS0+dGV4dEh0bWwsIG1fcGxh
dGZvcm1EcmFnRGF0YS5vbGRXYXktPmh0bWxCYXNlVXJsLCBGcmFnbWVudFNjcmlwdGluZ05vdEFs
bG93ZWQpOworICAgICAgICAgICAgcmV0dXJuIGZyYWdtZW50LnJlbGVhc2UoKTsKKyAgICAgICAg
fQorICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChjb250YWluc0hUTUwoJm1fcGxhdGZvcm1EcmFn
RGF0YSkpIHsKKyAgICAgICAgICAgIFN0cmluZyBiYXNlVVJMOworICAgICAgICAgICAgU3RyaW5n
IGh0bWwgPSBtX3BsYXRmb3JtRHJhZ0RhdGEubmV3V2F5LT5nZXRIVE1MKCZiYXNlVVJMKTsKKyAg
ICAgICAgICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGNyZWF0ZUZyYWdt
ZW50RnJvbU1hcmt1cChkb2MsCisgICAgICAgICAgICAgICAgaHRtbCwgYmFzZVVSTCwgRnJhZ21l
bnRTY3JpcHRpbmdOb3RBbGxvd2VkKTsKKyAgICAgICAgICAgIHJldHVybiBmcmFnbWVudC5yZWxl
YXNlKCk7CisgICAgICAgIH0KICAgICB9CiAKICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRHJhZ0RhdGFSZWYuaCBiL1dlYkNvcmUvcGxhdGZvcm0v
Y2hyb21pdW0vRHJhZ0RhdGFSZWYuaAppbmRleCBkZTFmYTFjLi5iYWRjOTM1IDEwMDY0NAotLS0g
YS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RyYWdEYXRhUmVmLmgKKysrIGIvV2ViQ29yZS9w
bGF0Zm9ybS9jaHJvbWl1bS9EcmFnRGF0YVJlZi5oCkBAIC0zMiwxMCArMzIsMTggQEAKICNkZWZp
bmUgRHJhZ0RhdGFSZWZfaAogCiAjaW5jbHVkZSAiQ2hyb21pdW1EYXRhT2JqZWN0LmgiCisjaW5j
bHVkZSAiUmVhZGFibGVEYXRhT2JqZWN0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAg
IHR5cGVkZWYgQ2hyb21pdW1EYXRhT2JqZWN0KiBEcmFnRGF0YVJlZjsKK3N0cnVjdCBEcmFnRGF0
YVJlZiB7CisgICAgLy8gRklYTUU6IFRoZXNlIGFyZSBkZWxpYmVyYXRlbHkgbm9uLWV4cGxpY2l0
IGZvciB0aGUgbW9tZW50LiBPbmNlIENocm9taXVtCisgICAgLy8gaXMgc3dpdGNoZWQgb3ZlciB0
byB0aGUgbmV3IHdheSBvZiBoYW5kbGluZyBkcmFncywgcmV2ZXJ0IHRoaXMgY2hhbmdlLgorICAg
IERyYWdEYXRhUmVmKENocm9taXVtRGF0YU9iamVjdCogZGF0YSkgOiBvbGRXYXkoZGF0YSkge30K
KyAgICBEcmFnRGF0YVJlZihSZWFkYWJsZURhdGFPYmplY3QqIGRhdGEpIDogbmV3V2F5KGRhdGEp
IHt9CisgICAgQ2hyb21pdW1EYXRhT2JqZWN0KiBvbGRXYXk7CisgICAgUmVhZGFibGVEYXRhT2Jq
ZWN0KiBuZXdXYXk7Cit9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBh
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmlu
ZGV4IDkwZDk0NjAuLmQxMTI5NDQgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDEw
LTA4LTMxICBEYW5pZWwgQ2hlbmcgIDxkY2hlbmdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gUHJlcGFyZSBD
bGlwYm9hcmQvRHJhZ0RhdGEgZm9yIHRyYW5zaXRpb24gdG8gbmV3IGRyYWctYW5kLWRyb3AgaW50
ZXJmYWNlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NDQ5OTIKKworICAgICAgICBJbiBvcmRlciB0byBhdm9pZCBicmVha2luZyBDaHJvbWl1bSwgd2Ug
aGF2ZSB0aGUgcmVuZGVyZXIgc2lkZSBpbXBsZW1lbnQKKyAgICAgICAgYm90aCB0aGUgb2xkIGFu
ZCBuZXcgZHJhZ2dpbmcgaW50ZXJmYWNlIGFuZCBnYXRlIHRoZSBiZWhhdmlvciBiYXNlZCBvZmYK
KyAgICAgICAgb2Ygd2hpY2ggRGF0YU9iamVjdCBwb2ludGVyIGlzIHNldC4gVGhpcyBjaGFuZ2Ug
b25seSBhZmZlY3RzIGRyYWdnaW5nCisgICAgICAgIGludG8vb3ZlciB0aGUgcmVuZGVyZXI7IGl0
IGRvZXMgbm90IGFmZmVjdCBzdGFydGluZyBhIGRyYWcgb3IgY29weSBhbmQKKyAgICAgICAgcGFz
dGUuIE9uY2UgdGhlIGFwcHJvcHJpYXRlIENocm9taXVtIGNoYW5nZXMgbGFuZCwgdGhlIHRlbXBv
cmFyeQorICAgICAgICBjb25kaXRpb25hbCBicmFuY2hlcyB3aWxsIGJlIHJlbW92ZWQuCisKKyAg
ICAgICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1w
bDo6ZHJhZ1RhcmdldERyYWdFbnRlck5ldyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBs
OjpkcmFnVGFyZ2V0RHJhZ0xlYXZlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmRy
YWdUYXJnZXREcm9wKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmRyYWdUYXJnZXRE
cmFnRW50ZXJPck92ZXIpOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5oOgorCiAyMDEwLTA4
LTMwICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAg
ICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByNjYxOTguCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0lt
cGwuY3BwCmluZGV4IDUwNjVmNWUuLjk1ZGFjYTAgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViVmlld0ltcGwuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0lt
cGwuY3BwCkBAIC04MSw2ICs4MSw3IEBACiAjaW5jbHVkZSAiUG9wdXBNZW51Q2hyb21pdW0uaCIK
ICNpbmNsdWRlICJQb3B1cE1lbnVDbGllbnQuaCIKICNpbmNsdWRlICJQcm9ncmVzc1RyYWNrZXIu
aCIKKyNpbmNsdWRlICJSZWFkYWJsZURhdGFPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3
LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdp
bi5oIgpAQCAtMTU4Myw2ICsxNTg0LDIxIEBAIFdlYkRyYWdPcGVyYXRpb24gV2ViVmlld0ltcGw6
OmRyYWdUYXJnZXREcmFnRW50ZXIoCiAgICAgcmV0dXJuIGRyYWdUYXJnZXREcmFnRW50ZXJPck92
ZXIoY2xpZW50UG9pbnQsIHNjcmVlblBvaW50LCBEcmFnRW50ZXIpOwogfQogCitXZWJEcmFnT3Bl
cmF0aW9uIFdlYlZpZXdJbXBsOjpkcmFnVGFyZ2V0RHJhZ0VudGVyTmV3KAorICAgIGludCBpZGVu
dGl0eSwKKyAgICBjb25zdCBXZWJQb2ludCYgY2xpZW50UG9pbnQsCisgICAgY29uc3QgV2ViUG9p
bnQmIHNjcmVlblBvaW50LAorICAgIFdlYkRyYWdPcGVyYXRpb25zTWFzayBvcGVyYXRpb25zQWxs
b3dlZCkKK3sKKyAgICBBU1NFUlQoIW1fY3VycmVudERyYWdEYXRhTmV3LmdldCgpKTsKKworICAg
IG1fY3VycmVudERyYWdEYXRhTmV3ID0gUmVhZGFibGVEYXRhT2JqZWN0OjpjcmVhdGUodHJ1ZSk7
CisgICAgbV9kcmFnSWRlbnRpdHkgPSBpZGVudGl0eTsKKyAgICBtX29wZXJhdGlvbnNBbGxvd2Vk
ID0gb3BlcmF0aW9uc0FsbG93ZWQ7CisKKyAgICByZXR1cm4gZHJhZ1RhcmdldERyYWdFbnRlck9y
T3ZlcihjbGllbnRQb2ludCwgc2NyZWVuUG9pbnQsIERyYWdFbnRlcik7Cit9CisKIFdlYkRyYWdP
cGVyYXRpb24gV2ViVmlld0ltcGw6OmRyYWdUYXJnZXREcmFnT3ZlcigKICAgICBjb25zdCBXZWJQ
b2ludCYgY2xpZW50UG9pbnQsCiAgICAgY29uc3QgV2ViUG9pbnQmIHNjcmVlblBvaW50LApAQCAt
MTU5NSwxOSArMTYxMSwzNCBAQCBXZWJEcmFnT3BlcmF0aW9uIFdlYlZpZXdJbXBsOjpkcmFnVGFy
Z2V0RHJhZ092ZXIoCiAKIHZvaWQgV2ViVmlld0ltcGw6OmRyYWdUYXJnZXREcmFnTGVhdmUoKQog
ewotICAgIEFTU0VSVChtX2N1cnJlbnREcmFnRGF0YS5nZXQoKSk7Ci0KLSAgICBEcmFnRGF0YSBk
cmFnRGF0YSgKLSAgICAgICAgbV9jdXJyZW50RHJhZ0RhdGEuZ2V0KCksCi0gICAgICAgIEludFBv
aW50KCksCi0gICAgICAgIEludFBvaW50KCksCi0gICAgICAgIHN0YXRpY19jYXN0PERyYWdPcGVy
YXRpb24+KG1fb3BlcmF0aW9uc0FsbG93ZWQpKTsKLQotICAgIG1fZHJhZ1RhcmdldERpc3BhdGNo
ID0gdHJ1ZTsKLSAgICBtX3BhZ2UtPmRyYWdDb250cm9sbGVyKCktPmRyYWdFeGl0ZWQoJmRyYWdE
YXRhKTsKLSAgICBtX2RyYWdUYXJnZXREaXNwYXRjaCA9IGZhbHNlOworICAgIC8vIEZJWE1FOiBU
aGlzIGlzIHRlbXBvcmFyeSB3aGlsZSB1bnRpbCBDaHJvbWl1bSBzaWRlIGlzIHRyYW5zaXRpb25l
ZCB0byB1c2UKKyAgICAvLyB0aGUgbmV3IGRyYWdnaW5nIGludGVyZmFjZS4KKyAgICBpZiAobV9j
dXJyZW50RHJhZ0RhdGEuZ2V0KCkpIHsKKyAgICAgICAgRHJhZ0RhdGEgZHJhZ0RhdGEoCisgICAg
ICAgICAgICBtX2N1cnJlbnREcmFnRGF0YS5nZXQoKSwKKyAgICAgICAgICAgIEludFBvaW50KCks
CisgICAgICAgICAgICBJbnRQb2ludCgpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8RHJhZ09w
ZXJhdGlvbj4obV9vcGVyYXRpb25zQWxsb3dlZCkpOworCisgICAgICAgIG1fZHJhZ1RhcmdldERp
c3BhdGNoID0gdHJ1ZTsKKyAgICAgICAgbV9wYWdlLT5kcmFnQ29udHJvbGxlcigpLT5kcmFnRXhp
dGVkKCZkcmFnRGF0YSk7CisgICAgICAgIG1fZHJhZ1RhcmdldERpc3BhdGNoID0gZmFsc2U7Cisg
ICAgfSBlbHNlIGlmIChtX2N1cnJlbnREcmFnRGF0YU5ldy5nZXQoKSkgeworICAgICAgICBEcmFn
RGF0YSBkcmFnRGF0YSgKKyAgICAgICAgICAgIG1fY3VycmVudERyYWdEYXRhTmV3LmdldCgpLAor
ICAgICAgICAgICAgSW50UG9pbnQoKSwKKyAgICAgICAgICAgIEludFBvaW50KCksCisgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxEcmFnT3BlcmF0aW9uPihtX29wZXJhdGlvbnNBbGxvd2VkKSk7CisK
KyAgICAgICAgbV9kcmFnVGFyZ2V0RGlzcGF0Y2ggPSB0cnVlOworICAgICAgICBtX3BhZ2UtPmRy
YWdDb250cm9sbGVyKCktPmRyYWdFeGl0ZWQoJmRyYWdEYXRhKTsKKyAgICAgICAgbV9kcmFnVGFy
Z2V0RGlzcGF0Y2ggPSBmYWxzZTsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQoZmFsc2Up
OworICAgIH0KIAogICAgIG1fY3VycmVudERyYWdEYXRhID0gMDsKKyAgICBtX2N1cnJlbnREcmFn
RGF0YU5ldyA9IDA7CiAgICAgbV9kcm9wRWZmZWN0ID0gRHJvcEVmZmVjdERlZmF1bHQ7CiAgICAg
bV9kcmFnT3BlcmF0aW9uID0gV2ViRHJhZ09wZXJhdGlvbk5vbmU7CiAgICAgbV9kcmFnSWRlbnRp
dHkgPSAwOwpAQCAtMTYxNiw4ICsxNjQ3LDYgQEAgdm9pZCBXZWJWaWV3SW1wbDo6ZHJhZ1Rhcmdl
dERyYWdMZWF2ZSgpCiB2b2lkIFdlYlZpZXdJbXBsOjpkcmFnVGFyZ2V0RHJvcChjb25zdCBXZWJQ
b2ludCYgY2xpZW50UG9pbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBXZWJQb2ludCYgc2NyZWVuUG9pbnQpCiB7Ci0gICAgQVNTRVJUKG1fY3VycmVudERyYWdEYXRh
LmdldCgpKTsKLQogICAgIC8vIElmIHRoaXMgd2VidmlldyB0cmFuc2l0aW9ucyBmcm9tIHRoZSAi
ZHJvcCBhY2NlcHRpbmciIHN0YXRlIHRvIHRoZSAibm90CiAgICAgLy8gYWNjZXB0aW5nIiBzdGF0
ZSwgdGhlbiBvdXIgSVBDIG1lc3NhZ2UgcmVwbHkgaW5kaWNhdGluZyB0aGF0IG1heSBiZSBpbi0K
ICAgICAvLyBmbGlnaHQsIG9yIGVsc2UgZGVsYXllZCBieSBqYXZhc2NyaXB0IHByb2Nlc3Npbmcg
aW4gdGhpcyB3ZWJ2aWV3LiAgSWYgYQpAQCAtMTYzMCwxNyArMTY1OSwzNCBAQCB2b2lkIFdlYlZp
ZXdJbXBsOjpkcmFnVGFyZ2V0RHJvcChjb25zdCBXZWJQb2ludCYgY2xpZW50UG9pbnQsCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBEcmFnRGF0YSBkcmFnRGF0YSgKLSAgICAgICAgbV9j
dXJyZW50RHJhZ0RhdGEuZ2V0KCksCi0gICAgICAgIGNsaWVudFBvaW50LAotICAgICAgICBzY3Jl
ZW5Qb2ludCwKLSAgICAgICAgc3RhdGljX2Nhc3Q8RHJhZ09wZXJhdGlvbj4obV9vcGVyYXRpb25z
QWxsb3dlZCkpOwotCi0gICAgbV9kcmFnVGFyZ2V0RGlzcGF0Y2ggPSB0cnVlOwotICAgIG1fcGFn
ZS0+ZHJhZ0NvbnRyb2xsZXIoKS0+cGVyZm9ybURyYWcoJmRyYWdEYXRhKTsKLSAgICBtX2RyYWdU
YXJnZXREaXNwYXRjaCA9IGZhbHNlOworICAgIC8vIEZJWE1FOiBUaGlzIGlzIHRlbXBvcmFyeSB3
aGlsZSB1bnRpbCBDaHJvbWl1bSBzaWRlIGlzIHRyYW5zaXRpb25lZCB0byB1c2UKKyAgICAvLyB0
aGUgbmV3IGRyYWdnaW5nIGludGVyZmFjZS4KKyAgICBpZiAobV9jdXJyZW50RHJhZ0RhdGEuZ2V0
KCkpIHsKKyAgICAgICAgRHJhZ0RhdGEgZHJhZ0RhdGEoCisgICAgICAgICAgICBtX2N1cnJlbnRE
cmFnRGF0YS5nZXQoKSwKKyAgICAgICAgICAgIGNsaWVudFBvaW50LAorICAgICAgICAgICAgc2Ny
ZWVuUG9pbnQsCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxEcmFnT3BlcmF0aW9uPihtX29wZXJh
dGlvbnNBbGxvd2VkKSk7CisKKyAgICAgICAgbV9kcmFnVGFyZ2V0RGlzcGF0Y2ggPSB0cnVlOwor
ICAgICAgICBtX3BhZ2UtPmRyYWdDb250cm9sbGVyKCktPnBlcmZvcm1EcmFnKCZkcmFnRGF0YSk7
CisgICAgICAgIG1fZHJhZ1RhcmdldERpc3BhdGNoID0gZmFsc2U7CisgICAgfSBlbHNlIGlmICht
X2N1cnJlbnREcmFnRGF0YU5ldy5nZXQoKSkgeworICAgICAgICBEcmFnRGF0YSBkcmFnRGF0YSgK
KyAgICAgICAgICAgIG1fY3VycmVudERyYWdEYXRhTmV3LmdldCgpLAorICAgICAgICAgICAgY2xp
ZW50UG9pbnQsCisgICAgICAgICAgICBzY3JlZW5Qb2ludCwKKyAgICAgICAgICAgIHN0YXRpY19j
YXN0PERyYWdPcGVyYXRpb24+KG1fb3BlcmF0aW9uc0FsbG93ZWQpKTsKKworICAgICAgICBtX2Ry
YWdUYXJnZXREaXNwYXRjaCA9IHRydWU7CisgICAgICAgIG1fcGFnZS0+ZHJhZ0NvbnRyb2xsZXIo
KS0+cGVyZm9ybURyYWcoJmRyYWdEYXRhKTsKKyAgICAgICAgbV9kcmFnVGFyZ2V0RGlzcGF0Y2gg
PSBmYWxzZTsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQoZmFsc2UpOworICAgIH0KIAog
ICAgIG1fY3VycmVudERyYWdEYXRhID0gMDsKKyAgICBtX2N1cnJlbnREcmFnRGF0YU5ldyA9IDA7
CiAgICAgbV9kcm9wRWZmZWN0ID0gRHJvcEVmZmVjdERlZmF1bHQ7CiAgICAgbV9kcmFnT3BlcmF0
aW9uID0gV2ViRHJhZ09wZXJhdGlvbk5vbmU7CiAgICAgbV9kcmFnSWRlbnRpdHkgPSAwOwpAQCAt
MTY1NiwyOCArMTcwMiw1MyBAQCBpbnQgV2ViVmlld0ltcGw6OmRyYWdJZGVudGl0eSgpCiAKIFdl
YkRyYWdPcGVyYXRpb24gV2ViVmlld0ltcGw6OmRyYWdUYXJnZXREcmFnRW50ZXJPck92ZXIoY29u
c3QgV2ViUG9pbnQmIGNsaWVudFBvaW50LCBjb25zdCBXZWJQb2ludCYgc2NyZWVuUG9pbnQsIERy
YWdBY3Rpb24gZHJhZ0FjdGlvbikKIHsKLSAgICBBU1NFUlQobV9jdXJyZW50RHJhZ0RhdGEuZ2V0
KCkpOwotCi0gICAgRHJhZ0RhdGEgZHJhZ0RhdGEoCi0gICAgICAgIG1fY3VycmVudERyYWdEYXRh
LmdldCgpLAotICAgICAgICBjbGllbnRQb2ludCwKLSAgICAgICAgc2NyZWVuUG9pbnQsCi0gICAg
ICAgIHN0YXRpY19jYXN0PERyYWdPcGVyYXRpb24+KG1fb3BlcmF0aW9uc0FsbG93ZWQpKTsKLQot
ICAgIG1fZHJvcEVmZmVjdCA9IERyb3BFZmZlY3REZWZhdWx0OwotICAgIG1fZHJhZ1RhcmdldERp
c3BhdGNoID0gdHJ1ZTsKLSAgICBEcmFnT3BlcmF0aW9uIGVmZmVjdCA9IGRyYWdBY3Rpb24gPT0g
RHJhZ0VudGVyID8gbV9wYWdlLT5kcmFnQ29udHJvbGxlcigpLT5kcmFnRW50ZXJlZCgmZHJhZ0Rh
dGEpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6
IG1fcGFnZS0+ZHJhZ0NvbnRyb2xsZXIoKS0+ZHJhZ1VwZGF0ZWQoJmRyYWdEYXRhKTsKLSAgICAv
LyBNYXNrIHRoZSBvcGVyYXRpb24gYWdhaW5zdCB0aGUgZHJhZyBzb3VyY2UncyBhbGxvd2VkIG9w
ZXJhdGlvbnMuCi0gICAgaWYgKCEoZWZmZWN0ICYgZHJhZ0RhdGEuZHJhZ2dpbmdTb3VyY2VPcGVy
YXRpb25NYXNrKCkpKQotICAgICAgICBlZmZlY3QgPSBEcmFnT3BlcmF0aW9uTm9uZTsKLSAgICBt
X2RyYWdUYXJnZXREaXNwYXRjaCA9IGZhbHNlOwotCi0gICAgaWYgKG1fZHJvcEVmZmVjdCAhPSBE
cm9wRWZmZWN0RGVmYXVsdCkgewotICAgICAgICBtX2RyYWdPcGVyYXRpb24gPSAobV9kcm9wRWZm
ZWN0ICE9IERyb3BFZmZlY3ROb25lKSA/IFdlYkRyYWdPcGVyYXRpb25Db3B5Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogV2ViRHJh
Z09wZXJhdGlvbk5vbmU7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fZHJhZ09wZXJhdGlvbiA9IHN0
YXRpY19jYXN0PFdlYkRyYWdPcGVyYXRpb24+KGVmZmVjdCk7CisgICAgLy8gRklYTUU6IFRoaXMg
aXMgdGVtcG9yYXJ5IHdoaWxlIHVudGlsIENocm9taXVtIHNpZGUgaXMgdHJhbnNpdGlvbmVkIHRv
IHVzZQorICAgIC8vIHRoZSBuZXcgZHJhZ2dpbmcgaW50ZXJmYWNlLgorICAgIGlmIChtX2N1cnJl
bnREcmFnRGF0YS5nZXQoKSkgeworICAgICAgICBEcmFnRGF0YSBkcmFnRGF0YSgKKyAgICAgICAg
ICAgIG1fY3VycmVudERyYWdEYXRhLmdldCgpLAorICAgICAgICAgICAgY2xpZW50UG9pbnQsCisg
ICAgICAgICAgICBzY3JlZW5Qb2ludCwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PERyYWdPcGVy
YXRpb24+KG1fb3BlcmF0aW9uc0FsbG93ZWQpKTsKKworICAgICAgICBtX2Ryb3BFZmZlY3QgPSBE
cm9wRWZmZWN0RGVmYXVsdDsKKyAgICAgICAgbV9kcmFnVGFyZ2V0RGlzcGF0Y2ggPSB0cnVlOwor
ICAgICAgICBEcmFnT3BlcmF0aW9uIGVmZmVjdCA9IGRyYWdBY3Rpb24gPT0gRHJhZ0VudGVyID8g
bV9wYWdlLT5kcmFnQ29udHJvbGxlcigpLT5kcmFnRW50ZXJlZCgmZHJhZ0RhdGEpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBtX3BhZ2Ut
PmRyYWdDb250cm9sbGVyKCktPmRyYWdVcGRhdGVkKCZkcmFnRGF0YSk7CisgICAgICAgIC8vIE1h
c2sgdGhlIG9wZXJhdGlvbiBhZ2FpbnN0IHRoZSBkcmFnIHNvdXJjZSdzIGFsbG93ZWQgb3BlcmF0
aW9ucy4KKyAgICAgICAgaWYgKCEoZWZmZWN0ICYgZHJhZ0RhdGEuZHJhZ2dpbmdTb3VyY2VPcGVy
YXRpb25NYXNrKCkpKQorICAgICAgICAgICAgZWZmZWN0ID0gRHJhZ09wZXJhdGlvbk5vbmU7Cisg
ICAgICAgIG1fZHJhZ1RhcmdldERpc3BhdGNoID0gZmFsc2U7CisKKyAgICAgICAgaWYgKG1fZHJv
cEVmZmVjdCAhPSBEcm9wRWZmZWN0RGVmYXVsdCkgeworICAgICAgICAgICAgbV9kcmFnT3BlcmF0
aW9uID0gKG1fZHJvcEVmZmVjdCAhPSBEcm9wRWZmZWN0Tm9uZSkgPyBXZWJEcmFnT3BlcmF0aW9u
Q29weQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOiBXZWJEcmFnT3BlcmF0aW9uTm9uZTsKKyAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICBtX2RyYWdPcGVyYXRpb24gPSBzdGF0aWNfY2FzdDxXZWJEcmFnT3BlcmF0aW9uPihl
ZmZlY3QpOworICAgIH0gZWxzZSBpZiAobV9jdXJyZW50RHJhZ0RhdGFOZXcuZ2V0KCkpIHsKKyAg
ICAgICAgRHJhZ0RhdGEgZHJhZ0RhdGEoCisgICAgICAgICAgICBtX2N1cnJlbnREcmFnRGF0YU5l
dy5nZXQoKSwKKyAgICAgICAgICAgIGNsaWVudFBvaW50LAorICAgICAgICAgICAgc2NyZWVuUG9p
bnQsCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxEcmFnT3BlcmF0aW9uPihtX29wZXJhdGlvbnNB
bGxvd2VkKSk7CisKKyAgICAgICAgbV9kcm9wRWZmZWN0ID0gRHJvcEVmZmVjdERlZmF1bHQ7Cisg
ICAgICAgIG1fZHJhZ1RhcmdldERpc3BhdGNoID0gdHJ1ZTsKKyAgICAgICAgRHJhZ09wZXJhdGlv
biBlZmZlY3QgPSBkcmFnQWN0aW9uID09IERyYWdFbnRlciA/IG1fcGFnZS0+ZHJhZ0NvbnRyb2xs
ZXIoKS0+ZHJhZ0VudGVyZWQoJmRyYWdEYXRhKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbV9wYWdlLT5kcmFnQ29udHJvbGxlcigpLT5k
cmFnVXBkYXRlZCgmZHJhZ0RhdGEpOworICAgICAgICAvLyBNYXNrIHRoZSBvcGVyYXRpb24gYWdh
aW5zdCB0aGUgZHJhZyBzb3VyY2UncyBhbGxvd2VkIG9wZXJhdGlvbnMuCisgICAgICAgIGlmICgh
KGVmZmVjdCAmIGRyYWdEYXRhLmRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFzaygpKSkKKyAgICAg
ICAgICAgIGVmZmVjdCA9IERyYWdPcGVyYXRpb25Ob25lOworICAgICAgICBtX2RyYWdUYXJnZXRE
aXNwYXRjaCA9IGZhbHNlOworCisgICAgICAgIGlmIChtX2Ryb3BFZmZlY3QgIT0gRHJvcEVmZmVj
dERlZmF1bHQpIHsKKyAgICAgICAgICAgIG1fZHJhZ09wZXJhdGlvbiA9IChtX2Ryb3BFZmZlY3Qg
IT0gRHJvcEVmZmVjdE5vbmUpID8gV2ViRHJhZ09wZXJhdGlvbkNvcHkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogV2ViRHJh
Z09wZXJhdGlvbk5vbmU7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV9kcmFnT3BlcmF0
aW9uID0gc3RhdGljX2Nhc3Q8V2ViRHJhZ09wZXJhdGlvbj4oZWZmZWN0KTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBBU1NFUlQoZmFsc2UpOworICAgIH0KIAogICAgIGlmIChkcmFnQWN0aW9uID09
IERyYWdPdmVyKQogICAgICAgICBtX2RyYWdTY3JvbGxUaW1lci0+dHJpZ2dlclNjcm9sbChtYWlu
RnJhbWVJbXBsKCktPmZyYW1lVmlldygpLCBjbGllbnRQb2ludCk7CmRpZmYgLS1naXQgYS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmggYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZp
ZXdJbXBsLmgKaW5kZXggYzI5NjEyMS4uZjFmMGJmZCAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJWaWV3SW1wbC5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0lt
cGwuaApAQCAtNjMsNiArNjMsNyBAQCBjbGFzcyBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ7CiBjbGFz
cyBQb3B1cENvbnRhaW5lcjsKIGNsYXNzIFBvcHVwTWVudUNsaWVudDsKIGNsYXNzIFJhbmdlOwor
Y2xhc3MgUmVhZGFibGVEYXRhT2JqZWN0OwogY2xhc3MgUmVuZGVyVGhlbWU7CiBjbGFzcyBXaWRn
ZXQ7CiB9CkBAIC0xNDgsNiArMTQ5LDExIEBAIHB1YmxpYzoKICAgICAgICAgY29uc3QgV2ViUG9p
bnQmIGNsaWVudFBvaW50LAogICAgICAgICBjb25zdCBXZWJQb2ludCYgc2NyZWVuUG9pbnQsCiAg
ICAgICAgIFdlYkRyYWdPcGVyYXRpb25zTWFzayBvcGVyYXRpb25zQWxsb3dlZCk7CisgICAgdmly
dHVhbCBXZWJEcmFnT3BlcmF0aW9uIGRyYWdUYXJnZXREcmFnRW50ZXJOZXcoCisgICAgICAgIGlu
dCBpZGVudGl0eSwKKyAgICAgICAgY29uc3QgV2ViUG9pbnQmIGNsaWVudFBvaW50LAorICAgICAg
ICBjb25zdCBXZWJQb2ludCYgc2NyZWVuUG9pbnQsCisgICAgICAgIFdlYkRyYWdPcGVyYXRpb25z
TWFzayBvcGVyYXRpb25zQWxsb3dlZCk7CiAgICAgdmlydHVhbCBXZWJEcmFnT3BlcmF0aW9uIGRy
YWdUYXJnZXREcmFnT3ZlcigKICAgICAgICAgY29uc3QgV2ViUG9pbnQmIGNsaWVudFBvaW50LAog
ICAgICAgICBjb25zdCBXZWJQb2ludCYgc2NyZWVuUG9pbnQsCkBAIC00MTgsNiArNDI0LDggQEAg
cHJpdmF0ZToKIAogICAgIC8vIEEgY29weSBvZiB0aGUgd2ViIGRyb3AgZGF0YSBvYmplY3Qgd2Ug
cmVjZWl2ZWQgZnJvbSB0aGUgYnJvd3Nlci4KICAgICBSZWZQdHI8V2ViQ29yZTo6Q2hyb21pdW1E
YXRhT2JqZWN0PiBtX2N1cnJlbnREcmFnRGF0YTsKKyAgICAvLyBGSVhNRTogUmVtb3ZlIHRoZSBk
dXBsaWNhdGlvbiBvbmNlIENocm9taXVtIGlzIHN3aXRjaGVkIG92ZXIuCisgICAgUmVmUHRyPFdl
YkNvcmU6OlJlYWRhYmxlRGF0YU9iamVjdD4gbV9jdXJyZW50RHJhZ0RhdGFOZXc7CiAKICAgICAv
LyBUaGUgcG9pbnQgcmVsYXRpdmUgdG8gdGhlIGNsaWVudCBhcmVhIHdoZXJlIHRoZSBtb3VzZSB3
YXMgbGFzdCBwcmVzc2VkCiAgICAgLy8gZG93bi4gVGhpcyBpcyB1c2VkIGJ5IHRoZSBkcmFnIGNs
aWVudCB0byBkZXRlcm1pbmUgd2hhdCB3YXMgdW5kZXIgdGhlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66140</attachid>
            <date>2010-08-31 16:50:45 -0700</date>
            <delta_ts>2010-09-01 15:06:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>foo.patch</filename>
            <type>text/plain</type>
            <size>25947</size>
            <attacher name="Daniel Cheng">dcheng</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MDQ3MGExMS4uMjE1YzEwYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MiBAQAorMjAxMC0wOC0zMSAgRGFuaWVsIENoZW5n
ICA8ZGNoZW5nQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBbY2hyb21pdW1dIFByZXBhcmUgQ2xpcGJvYXJkL0RyYWdEYXRhIGZv
ciB0cmFuc2l0aW9uIHRvIG5ldyBkcmFnLWFuZC1kcm9wIGludGVyZmFjZS4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0OTkyCisKKyAgICAgICAgSW4g
b3JkZXIgdG8gYXZvaWQgYnJlYWtpbmcgQ2hyb21pdW0sIHdlIGhhdmUgdGhlIHJlbmRlcmVyIHNp
ZGUgaW1wbGVtZW50CisgICAgICAgIGJvdGggdGhlIG9sZCBhbmQgbmV3IGRyYWdnaW5nIGludGVy
ZmFjZSBhbmQgZ2F0ZSB0aGUgYmVoYXZpb3IgYmFzZWQgb2ZmCisgICAgICAgIG9mIHdoaWNoIERh
dGFPYmplY3QgcG9pbnRlciBpcyBzZXQuIFRoaXMgY2hhbmdlIG9ubHkgYWZmZWN0cyBkcmFnZ2lu
ZworICAgICAgICBpbnRvL292ZXIgdGhlIHJlbmRlcmVyOyBpdCBkb2VzIG5vdCBhZmZlY3Qgc3Rh
cnRpbmcgYSBkcmFnIG9yIGNvcHkgYW5kCisgICAgICAgIHBhc3RlLiBPbmNlIHRoZSBhcHByb3By
aWF0ZSBDaHJvbWl1bSBjaGFuZ2VzIGxhbmQsIHRoZSB0ZW1wb3JhcnkKKyAgICAgICAgY29uZGl0
aW9uYWwgYnJhbmNoZXMgd2lsbCBiZSByZW1vdmVkLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4K
KworICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNs
aXBib2FyZENocm9taXVtOjpDbGlwYm9hcmRDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpD
bGlwYm9hcmRDaHJvbWl1bTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENo
cm9taXVtOjpnZXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENocm9taXVtOjp0
eXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRDaHJvbWl1bTo6ZmlsZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkQ2hyb21pdW06Omhhc0RhdGEpOgorICAgICAgICAqIHBs
YXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmg6CisgICAgICAgICogcGxhdGZvcm0v
Y2hyb21pdW0vRHJhZ0RhdGFDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb250YWlu
c0hUTUwpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmNvbnRhaW5zVVJMKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRyYWdEYXRhOjphc1VSTCk6CisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0
YTo6Y29udGFpbnNGaWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0YTo6YXNGaWxlbmFt
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmNvbnRhaW5zUGxhaW5UZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjphc1BsYWluVGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpEcmFnRGF0YTo6Y2FuU21hcnRSZXBsYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRh
Ojpjb250YWluc0NvbXBhdGlibGVDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRh
Ojphc0ZyYWdtZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9EcmFnRGF0YVJlZi5o
OgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGFSZWY6OkRyYWdEYXRhUmVmKToKKwogMjAxMC0w
OC0zMCAgRGFuaWVsIENoZW5nICA8ZGNoZW5nQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9D
bGlwYm9hcmRDaHJvbWl1bS5jcHAKaW5kZXggMjM1MDhhNi4uNTNkY2I1NyAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5jcHAKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5jcHAKQEAgLTQ4LDYgKzQ4
LDkgQEAKICNpbmNsdWRlICJTdHJpbmdCdWlsZGVyLmgiCiAjaW5jbHVkZSAibWFya3VwLmgiCiAK
Ky8vIEZJWE1FOiBUaGlzIGNsYXNzIGN1cnJlbnRseSBoYXMgYSBsb3Qgb2YgZHVwbGljYXRpb24g
aW4gcHJlcGFyYXRpb24gZm9yIGEKKy8vIHRyYW5zaXRpb24gdG8gdGhlIG5ldyBkcmFnIGFuZCBk
cm9wIG1vZGVsLiBDbGVhbiBpdCB1cCBvbmNlIHRoZSB0cmFuc2l0aW9uIGlzCisvLyBkb25lIG9u
IHRoZSBDaHJvbWUgc2lkZS4KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNl
IEhUTUxOYW1lczsKQEAgLTkzLDcgKzk2LDkgQEAgc3RhdGljIENsaXBib2FyZERhdGFUeXBlIGNs
aXBib2FyZFR5cGVGcm9tTUlNRVR5cGUoY29uc3QgU3RyaW5nJiB0eXBlKQogCiBQYXNzUmVmUHRy
PENsaXBib2FyZD4gQ2xpcGJvYXJkOjpjcmVhdGUoQ2xpcGJvYXJkQWNjZXNzUG9saWN5IHBvbGlj
eSwgRHJhZ0RhdGEqIGRyYWdEYXRhLCBGcmFtZSogZnJhbWUpCiB7Ci0gICAgcmV0dXJuIENsaXBi
b2FyZENocm9taXVtOjpjcmVhdGUodHJ1ZSwgZHJhZ0RhdGEtPnBsYXRmb3JtRGF0YSgpLCBwb2xp
Y3ksIGZyYW1lKTsKKyAgICBpZiAoZHJhZ0RhdGEtPnBsYXRmb3JtRGF0YSgpLm9sZFdheSkKKyAg
ICAgICAgcmV0dXJuIENsaXBib2FyZENocm9taXVtOjpjcmVhdGUodHJ1ZSwgZHJhZ0RhdGEtPnBs
YXRmb3JtRGF0YSgpLm9sZFdheSwgcG9saWN5LCBmcmFtZSk7CisgICAgcmV0dXJuIENsaXBib2Fy
ZENocm9taXVtOjpjcmVhdGUodHJ1ZSwgZHJhZ0RhdGEtPnBsYXRmb3JtRGF0YSgpLm5ld1dheSwg
cG9saWN5LCBmcmFtZSk7CiB9CiAKIENsaXBib2FyZENocm9taXVtOjpDbGlwYm9hcmRDaHJvbWl1
bShib29sIGlzRm9yRHJhZ2dpbmcsCkBAIC0xMDYsMTIgKzExMSwyOCBAQCBDbGlwYm9hcmRDaHJv
bWl1bTo6Q2xpcGJvYXJkQ2hyb21pdW0oYm9vbCBpc0ZvckRyYWdnaW5nLAogewogfQogCitDbGlw
Ym9hcmRDaHJvbWl1bTo6Q2xpcGJvYXJkQ2hyb21pdW0oYm9vbCBpc0ZvckRyYWdnaW5nLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8UmVhZGFibGVEYXRh
T2JqZWN0PiBkYXRhT2JqZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IENsaXBib2FyZEFjY2Vzc1BvbGljeSBwb2xpY3ksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRnJhbWUqIGZyYW1lKQorICAgIDogQ2xpcGJvYXJkKHBvbGljeSwgaXNGb3JE
cmFnZ2luZykKKyAgICAsIG1fcmVhZGFibGVEYXRhT2JqZWN0KGRhdGFPYmplY3QpCisgICAgLCBt
X2ZyYW1lKGZyYW1lKQoreworfQorCiBQYXNzUmVmUHRyPENsaXBib2FyZENocm9taXVtPiBDbGlw
Ym9hcmRDaHJvbWl1bTo6Y3JlYXRlKGJvb2wgaXNGb3JEcmFnZ2luZywKICAgICBQYXNzUmVmUHRy
PENocm9taXVtRGF0YU9iamVjdD4gZGF0YU9iamVjdCwgQ2xpcGJvYXJkQWNjZXNzUG9saWN5IHBv
bGljeSwgRnJhbWUqIGZyYW1lKQogewogICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2xpcGJvYXJk
Q2hyb21pdW0oaXNGb3JEcmFnZ2luZywgZGF0YU9iamVjdCwgcG9saWN5LCBmcmFtZSkpOwogfQog
CitQYXNzUmVmUHRyPENsaXBib2FyZENocm9taXVtPiBDbGlwYm9hcmRDaHJvbWl1bTo6Y3JlYXRl
KGJvb2wgaXNGb3JEcmFnZ2luZywKKyAgICBQYXNzUmVmUHRyPFJlYWRhYmxlRGF0YU9iamVjdD4g
ZGF0YU9iamVjdCwgQ2xpcGJvYXJkQWNjZXNzUG9saWN5IHBvbGljeSwgRnJhbWUqIGZyYW1lKQor
eworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2xpcGJvYXJkQ2hyb21pdW0oaXNGb3JEcmFnZ2lu
ZywgZGF0YU9iamVjdCwgcG9saWN5LCBmcmFtZSkpOworfQorCiB2b2lkIENsaXBib2FyZENocm9t
aXVtOjpjbGVhckRhdGEoY29uc3QgU3RyaW5nJiB0eXBlKQogewogICAgIGlmIChwb2xpY3koKSAh
PSBDbGlwYm9hcmRXcml0YWJsZSB8fCAhbV9kYXRhT2JqZWN0KQpAQCAtMTYyLDcgKzE4MywxMyBA
QCB2b2lkIENsaXBib2FyZENocm9taXVtOjpjbGVhckFsbERhdGEoKQogU3RyaW5nIENsaXBib2Fy
ZENocm9taXVtOjpnZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgYm9vbCYgc3VjY2VzcykgY29u
c3QKIHsKICAgICBzdWNjZXNzID0gZmFsc2U7Ci0gICAgaWYgKHBvbGljeSgpICE9IENsaXBib2Fy
ZFJlYWRhYmxlIHx8ICFtX2RhdGFPYmplY3QpCisgICAgaWYgKHBvbGljeSgpICE9IENsaXBib2Fy
ZFJlYWRhYmxlKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBpZiAobV9yZWFkYWJs
ZURhdGFPYmplY3QpCisgICAgICAgIHJldHVybiBtX3JlYWRhYmxlRGF0YU9iamVjdC0+Z2V0RGF0
YSh0eXBlLCBzdWNjZXNzKTsKKyAgICAgIAorICAgIGlmICghbV9kYXRhT2JqZWN0KQogICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7CiAKICAgICBDbGlwYm9hcmREYXRhVHlwZSBkYXRhVHlwZSA9IGNs
aXBib2FyZFR5cGVGcm9tTUlNRVR5cGUodHlwZSk7CkBAIC0zMjIsNiArMzQ5LDkgQEAgSGFzaFNl
dDxTdHJpbmc+IENsaXBib2FyZENocm9taXVtOjp0eXBlcygpIGNvbnN0CiAgICAgaWYgKHBvbGlj
eSgpICE9IENsaXBib2FyZFJlYWRhYmxlICYmIHBvbGljeSgpICE9IENsaXBib2FyZFR5cGVzUmVh
ZGFibGUpCiAgICAgICAgIHJldHVybiByZXN1bHRzOwogCisgICAgaWYgKG1fcmVhZGFibGVEYXRh
T2JqZWN0KQorICAgICAgICByZXR1cm4gbV9yZWFkYWJsZURhdGFPYmplY3QtPnR5cGVzKCk7CisK
ICAgICBpZiAoIW1fZGF0YU9iamVjdCkKICAgICAgICAgcmV0dXJuIHJlc3VsdHM7CiAKQEAgLTM2
MSw2ICszOTEsMTQgQEAgUGFzc1JlZlB0cjxGaWxlTGlzdD4gQ2xpcGJvYXJkQ2hyb21pdW06OmZp
bGVzKCkgY29uc3QKICAgICBpZiAocG9saWN5KCkgIT0gQ2xpcGJvYXJkUmVhZGFibGUpCiAgICAg
ICAgIHJldHVybiBGaWxlTGlzdDo6Y3JlYXRlKCk7CiAKKyAgICBpZiAobV9yZWFkYWJsZURhdGFP
YmplY3QpIHsKKyAgICAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCA9IG1fZnJhbWUtPmRvY3VtZW50KCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsK
KyAgICAgICAgUmVmUHRyPEZpbGVMaXN0PiBmaWxlTGlzdCA9IEZpbGVMaXN0OjpjcmVhdGUoKTsK
KyAgICAgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcyA9IG1fcmVhZGFibGVEYXRh
T2JqZWN0LT5maWxlbmFtZXMoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWxl
bmFtZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBmaWxlTGlzdC0+YXBwZW5kKEZpbGU6OmNy
ZWF0ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBmaWxlbmFtZXMuYXQoaSkpKTsKKyAgICB9CisK
ICAgICBpZiAoIW1fZGF0YU9iamVjdCB8fCBtX2RhdGFPYmplY3QtPmZpbGVuYW1lcy5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybiBGaWxlTGlzdDo6Y3JlYXRlKCk7CiAKQEAgLTU1Niw2ICs1OTQs
OSBAQCB2b2lkIENsaXBib2FyZENocm9taXVtOjp3cml0ZVBsYWluVGV4dChjb25zdCBTdHJpbmcm
IHRleHQpCiAKIGJvb2wgQ2xpcGJvYXJkQ2hyb21pdW06Omhhc0RhdGEoKQogeworICAgIGlmICht
X3JlYWRhYmxlRGF0YU9iamVjdCkKKyAgICAgICAgcmV0dXJuIG1fcmVhZGFibGVEYXRhT2JqZWN0
LT5oYXNEYXRhKCk7CisKICAgICBpZiAoIW1fZGF0YU9iamVjdCkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENo
cm9taXVtLmggYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmgK
aW5kZXggYTQxNTBkMC4uODllODA2OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0v
Q2xpcGJvYXJkQ2hyb21pdW0uaApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkNsaXBib2Fy
ZC5oIgogCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnQuaCIKKyNpbmNsdWRlICJEcmFn
RGF0YVJlZi5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQwLDYgKzQxLDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIENocm9taXVtRGF0YU9iamVjdDsKICAgICBjbGFz
cyBGcmFtZTsKICAgICBjbGFzcyBJbnRQb2ludDsKKyAgICBjbGFzcyBSZWFkYWJsZURhdGFPYmpl
Y3Q7CiAKICAgICBjbGFzcyBDbGlwYm9hcmRDaHJvbWl1bSA6IHB1YmxpYyBDbGlwYm9hcmQsIHB1
YmxpYyBDYWNoZWRSZXNvdXJjZUNsaWVudCB7CiAgICAgcHVibGljOgpAQCAtNDcsNiArNDksOCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2xpcGJv
YXJkQ2hyb21pdW0+IGNyZWF0ZSgKICAgICAgICAgICAgIGJvb2wgaXNGb3JEcmFnZ2luZywgUGFz
c1JlZlB0cjxDaHJvbWl1bURhdGFPYmplY3Q+LCBDbGlwYm9hcmRBY2Nlc3NQb2xpY3ksIEZyYW1l
Kik7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENsaXBib2FyZENocm9taXVtPiBjcmVhdGUo
CisgICAgICAgICAgICBib29sIGlzRm9yRHJhZ2dpbmcsIFBhc3NSZWZQdHI8UmVhZGFibGVEYXRh
T2JqZWN0PiwgQ2xpcGJvYXJkQWNjZXNzUG9saWN5LCBGcmFtZSopOwogCiAgICAgICAgIC8vIFJl
dHVybnMgdGhlIGZpbGUgbmFtZSAobm90IGluY2x1ZGluZyB0aGUgZXh0ZW5zaW9uKS4gVGhpcyBy
ZW1vdmVzIGFueQogICAgICAgICAvLyBpbnZhbGlkIGZpbGUgc3lzdGVtIGNoYXJhY3RlcnMgYXMg
d2VsbCBhcyBtYWtpbmcgc3VyZSB0aGUKQEAgLTgxLDEwICs4NSwxMiBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKICAgICBwcml2YXRlOgogICAgICAgICBDbGlwYm9hcmRDaHJvbWl1bShib29sLCBQ
YXNzUmVmUHRyPENocm9taXVtRGF0YU9iamVjdD4sIENsaXBib2FyZEFjY2Vzc1BvbGljeSwgRnJh
bWUqKTsKKyAgICAgICAgQ2xpcGJvYXJkQ2hyb21pdW0oYm9vbCwgUGFzc1JlZlB0cjxSZWFkYWJs
ZURhdGFPYmplY3Q+LCBDbGlwYm9hcmRBY2Nlc3NQb2xpY3ksIEZyYW1lKik7CiAKICAgICAgICAg
dm9pZCByZXNldEZyb21DbGlwYm9hcmQoKTsKICAgICAgICAgdm9pZCBzZXREcmFnSW1hZ2UoQ2Fj
aGVkSW1hZ2UqLCBOb2RlKiwgY29uc3QgSW50UG9pbnQmKTsKICAgICAgICAgUmVmUHRyPENocm9t
aXVtRGF0YU9iamVjdD4gbV9kYXRhT2JqZWN0OworICAgICAgICBSZWZQdHI8UmVhZGFibGVEYXRh
T2JqZWN0PiBtX3JlYWRhYmxlRGF0YU9iamVjdDsKICAgICAgICAgRnJhbWUqIG1fZnJhbWU7CiAg
ICAgfTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EcmFnRGF0YUNo
cm9taXVtLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRHJhZ0RhdGFDaHJvbWl1bS5j
cHAKaW5kZXggNjc0ZDM0ZC4uYzM3NWU3YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9j
aHJvbWl1bS9EcmFnRGF0YUNocm9taXVtLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9t
aXVtL0RyYWdEYXRhQ2hyb21pdW0uY3BwCkBAIC00MSw1MiArNDEsODQgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1zdGF0aWMgYm9vbCBjb250YWluc0hUTUwoY29uc3QgQ2hyb21pdW1EYXRh
T2JqZWN0KiBkcm9wRGF0YSkKK3N0YXRpYyBib29sIGNvbnRhaW5zSFRNTChjb25zdCBEcmFnRGF0
YVJlZiogZHJvcERhdGEpCiB7Ci0gICAgcmV0dXJuIGRyb3BEYXRhLT50ZXh0SHRtbC5sZW5ndGgo
KSA+IDA7CisgICAgaWYgKGRyb3BEYXRhLT5vbGRXYXkpCisgICAgICAgIHJldHVybiBkcm9wRGF0
YS0+b2xkV2F5LT50ZXh0SHRtbC5sZW5ndGgoKSA+IDA7CisgICAgcmV0dXJuIGRyb3BEYXRhLT5u
ZXdXYXktPnR5cGVzKCkuY29udGFpbnMoInRleHQvaHRtbCIpOwogfQogCiBib29sIERyYWdEYXRh
Ojpjb250YWluc1VSTChGaWxlbmFtZUNvbnZlcnNpb25Qb2xpY3kgZmlsZW5hbWVQb2xpY3kpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuICFhc1VSTChmaWxlbmFtZVBvbGljeSkuaXNFbXB0eSgpOworICAg
IGlmIChtX3BsYXRmb3JtRHJhZ0RhdGEub2xkV2F5KQorICAgICAgICByZXR1cm4gIWFzVVJMKGZp
bGVuYW1lUG9saWN5KS5pc0VtcHR5KCk7CisgICAgcmV0dXJuIG1fcGxhdGZvcm1EcmFnRGF0YS5u
ZXdXYXktPnR5cGVzKCkuY29udGFpbnMoInRleHQvdXJpLWxpc3QiKQorICAgICAgICB8fCAoZmls
ZW5hbWVQb2xpY3kgPT0gQ29udmVydEZpbGVuYW1lcyAmJiBtX3BsYXRmb3JtRHJhZ0RhdGEubmV3
V2F5LT5oYXNGaWxlbmFtZXMoKSk7CiB9CiAKIFN0cmluZyBEcmFnRGF0YTo6YXNVUkwoRmlsZW5h
bWVDb252ZXJzaW9uUG9saWN5IGZpbGVuYW1lUG9saWN5LCBTdHJpbmcqIHRpdGxlKSBjb25zdAog
ewotICAgIFN0cmluZyB1cmw7Ci0gICAgaWYgKG1fcGxhdGZvcm1EcmFnRGF0YS0+aGFzVmFsaWRV
UkwoKSkKLSAgICAgICAgdXJsID0gbV9wbGF0Zm9ybURyYWdEYXRhLT5nZXRVUkwoKS5zdHJpbmco
KTsKLSAgICBlbHNlIGlmIChmaWxlbmFtZVBvbGljeSA9PSBDb252ZXJ0RmlsZW5hbWVzICYmICFt
X3BsYXRmb3JtRHJhZ0RhdGEtPmZpbGVuYW1lcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgU3RyaW5n
IGZpbGVOYW1lID0gbV9wbGF0Zm9ybURyYWdEYXRhLT5maWxlbmFtZXNbMF07CisgICAgaWYgKG1f
cGxhdGZvcm1EcmFnRGF0YS5vbGRXYXkpIHsKKyAgICAgICAgU3RyaW5nIHVybDsKKyAgICAgICAg
aWYgKG1fcGxhdGZvcm1EcmFnRGF0YS5vbGRXYXktPmhhc1ZhbGlkVVJMKCkpCisgICAgICAgICAg
ICB1cmwgPSBtX3BsYXRmb3JtRHJhZ0RhdGEub2xkV2F5LT5nZXRVUkwoKS5zdHJpbmcoKTsKKyAg
ICAgICAgZWxzZSBpZiAoZmlsZW5hbWVQb2xpY3kgPT0gQ29udmVydEZpbGVuYW1lcyAmJiAhbV9w
bGF0Zm9ybURyYWdEYXRhLm9sZFdheS0+ZmlsZW5hbWVzLmlzRW1wdHkoKSkgeworICAgICAgICAg
ICAgU3RyaW5nIGZpbGVOYW1lID0gbV9wbGF0Zm9ybURyYWdEYXRhLm9sZFdheS0+ZmlsZW5hbWVz
WzBdOworICAgICAgICAgICAgZmlsZU5hbWUgPSBDaHJvbWl1bUJyaWRnZTo6Z2V0QWJzb2x1dGVQ
YXRoKGZpbGVOYW1lKTsKKyAgICAgICAgICAgIHVybCA9IENocm9taXVtQnJpZGdlOjpmaWxlUGF0
aFRvVVJMKGZpbGVOYW1lKS5zdHJpbmcoKTsKKyAgICAgICAgfQorICAgICAKKyAgICAgICAgLy8g
fHRpdGxlfCBjYW4gYmUgTlVMTAorICAgICAgICBpZiAodGl0bGUpCisgICAgICAgICAgICAqdGl0
bGUgPSBtX3BsYXRmb3JtRHJhZ0RhdGEub2xkV2F5LT51cmxUaXRsZTsKKyAgICAgICAgcmV0dXJu
IHVybDsKKyAgICB9CisKKyAgICBTdHJpbmcgdXJsID0gbV9wbGF0Zm9ybURyYWdEYXRhLm5ld1dh
eS0+Z2V0VVJMKHRpdGxlKTsKKyAgICBpZiAoIUtVUkwoS1VSTCgpLCB1cmwpLmlzVmFsaWQoKQor
ICAgICAgICAmJiBmaWxlbmFtZVBvbGljeSA9PSBDb252ZXJ0RmlsZW5hbWVzCisgICAgICAgICYm
IG1fcGxhdGZvcm1EcmFnRGF0YS5uZXdXYXktPmhhc0ZpbGVuYW1lcygpKSB7CisgICAgICAgIFN0
cmluZyBmaWxlTmFtZSA9IG1fcGxhdGZvcm1EcmFnRGF0YS5uZXdXYXktPmZpbGVuYW1lcygpWzBd
OwogICAgICAgICBmaWxlTmFtZSA9IENocm9taXVtQnJpZGdlOjpnZXRBYnNvbHV0ZVBhdGgoZmls
ZU5hbWUpOwogICAgICAgICB1cmwgPSBDaHJvbWl1bUJyaWRnZTo6ZmlsZVBhdGhUb1VSTChmaWxl
TmFtZSkuc3RyaW5nKCk7CisgICAgICAgIGlmICh0aXRsZSkKKyAgICAgICAgICAgICp0aXRsZSA9
ICIiOwogICAgIH0KLSAKLSAgICAvLyB8dGl0bGV8IGNhbiBiZSBOVUxMCi0gICAgaWYgKHRpdGxl
KQotICAgICAgICAqdGl0bGUgPSBtX3BsYXRmb3JtRHJhZ0RhdGEtPnVybFRpdGxlOwogICAgIHJl
dHVybiB1cmw7CiB9CiAKIGJvb2wgRHJhZ0RhdGE6OmNvbnRhaW5zRmlsZXMoKSBjb25zdAogewot
ICAgIHJldHVybiAhbV9wbGF0Zm9ybURyYWdEYXRhLT5maWxlbmFtZXMuaXNFbXB0eSgpOworICAg
IGlmIChtX3BsYXRmb3JtRHJhZ0RhdGEub2xkV2F5KQorICAgICAgICByZXR1cm4gIW1fcGxhdGZv
cm1EcmFnRGF0YS5vbGRXYXktPmZpbGVuYW1lcy5pc0VtcHR5KCk7CisgICAgcmV0dXJuIG1fcGxh
dGZvcm1EcmFnRGF0YS5uZXdXYXktPmhhc0ZpbGVuYW1lcygpOwogfQogCiB2b2lkIERyYWdEYXRh
Ojphc0ZpbGVuYW1lcyhWZWN0b3I8U3RyaW5nPiYgcmVzdWx0KSBjb25zdAogewotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV9wbGF0Zm9ybURyYWdEYXRhLT5maWxlbmFtZXMuc2l6ZSgpOyAr
K2kpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQobV9wbGF0Zm9ybURyYWdEYXRhLT5maWxlbmFtZXNb
aV0pOworICAgIGlmIChtX3BsYXRmb3JtRHJhZ0RhdGEub2xkV2F5KSB7CisgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV9wbGF0Zm9ybURyYWdEYXRhLm9sZFdheS0+ZmlsZW5hbWVzLnNp
emUoKTsgKytpKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChtX3BsYXRmb3JtRHJhZ0RhdGEu
b2xkV2F5LT5maWxlbmFtZXNbaV0pOworICAgIH0gZWxzZSB7CisgICAgICAgIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBmaWxlbmFtZXMgPSBtX3BsYXRmb3JtRHJhZ0RhdGEubmV3V2F5LT5maWxlbmFt
ZXMoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWxlbmFtZXMuc2l6ZSgpOyAr
K2kpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGZpbGVuYW1lc1tpXSk7CisgICAgfQogfQog
CiBib29sIERyYWdEYXRhOjpjb250YWluc1BsYWluVGV4dCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
ICFtX3BsYXRmb3JtRHJhZ0RhdGEtPnBsYWluVGV4dC5pc0VtcHR5KCk7CisgICAgaWYgKG1fcGxh
dGZvcm1EcmFnRGF0YS5vbGRXYXkpCisgICAgICAgIHJldHVybiAhbV9wbGF0Zm9ybURyYWdEYXRh
Lm9sZFdheS0+cGxhaW5UZXh0LmlzRW1wdHkoKTsKKyAgICByZXR1cm4gbV9wbGF0Zm9ybURyYWdE
YXRhLm5ld1dheS0+dHlwZXMoKS5jb250YWlucygidGV4dC9wbGFpbiIpOwogfQogCiBTdHJpbmcg
RHJhZ0RhdGE6OmFzUGxhaW5UZXh0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9wbGF0Zm9ybURy
YWdEYXRhLT5wbGFpblRleHQ7CisgICAgaWYgKG1fcGxhdGZvcm1EcmFnRGF0YS5vbGRXYXkpCisg
ICAgICAgIHJldHVybiBtX3BsYXRmb3JtRHJhZ0RhdGEub2xkV2F5LT5wbGFpblRleHQ7CisgICAg
Ym9vbCBpZ25vcmVkU3VjY2VzczsKKyAgICByZXR1cm4gbV9wbGF0Zm9ybURyYWdEYXRhLm5ld1dh
eS0+Z2V0RGF0YSgidGV4dC9wbGFpbiIsIGlnbm9yZWRTdWNjZXNzKTsKIH0KIAogYm9vbCBEcmFn
RGF0YTo6Y29udGFpbnNDb2xvcigpIGNvbnN0CkBAIC0xMDEsMTUgKzEzMywxOSBAQCBib29sIERy
YWdEYXRhOjpjYW5TbWFydFJlcGxhY2UoKSBjb25zdAogICAgIC8vIFRoaXMgaXMgYWxsb3dlZCB3
aGVuZXZlciB0aGUgZHJhZyBkYXRhIGNvbnRhaW5zIGEgJ3JhbmdlJyAoaWUuLAogICAgIC8vIENs
aXBib2FyZFdpbjo6d3JpdGVSYW5nZSBpcyBjYWxsZWQpLiAgRm9yIGV4YW1wbGUsIGRyYWdnaW5n
IGEgbGluawogICAgIC8vIHNob3VsZCBub3QgcmVzdWx0IGluIGEgc3BhY2UgYmVpbmcgYWRkZWQu
Ci0gICAgcmV0dXJuICFtX3BsYXRmb3JtRHJhZ0RhdGEtPnBsYWluVGV4dC5pc0VtcHR5KCkKLSAg
ICAgICAgJiYgIW1fcGxhdGZvcm1EcmFnRGF0YS0+aGFzVmFsaWRVUkwoKTsKKyAgICBpZiAobV9w
bGF0Zm9ybURyYWdEYXRhLm9sZFdheSkKKyAgICAgICAgcmV0dXJuICFtX3BsYXRmb3JtRHJhZ0Rh
dGEub2xkV2F5LT5wbGFpblRleHQuaXNFbXB0eSgpCisgICAgICAgICAgICAmJiAhbV9wbGF0Zm9y
bURyYWdEYXRhLm9sZFdheS0+aGFzVmFsaWRVUkwoKTsKKyAgICByZXR1cm4gbV9wbGF0Zm9ybURy
YWdEYXRhLm5ld1dheS0+dHlwZXMoKS5jb250YWlucygidGV4dC9wbGFpbiIpCisgICAgICAgIC8v
IEZJWE1FOiBEbyB3ZSBuZWVkIHRvIGNoZWNrIFVSTCB2YWxpZGl0eT8KKyAgICAgICAgJiYgIW1f
cGxhdGZvcm1EcmFnRGF0YS5uZXdXYXktPnR5cGVzKCkuY29udGFpbnMoInRleHQvdXJpLWxpc3Qi
KTsKIH0KIAogYm9vbCBEcmFnRGF0YTo6Y29udGFpbnNDb21wYXRpYmxlQ29udGVudCgpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIGNvbnRhaW5zUGxhaW5UZXh0KCkKICAgICAgICAgfHwgY29udGFpbnNV
UkwoKQotICAgICAgICB8fCBjb250YWluc0hUTUwobV9wbGF0Zm9ybURyYWdEYXRhKQorICAgICAg
ICB8fCBjb250YWluc0hUTUwoJm1fcGxhdGZvcm1EcmFnRGF0YSkKICAgICAgICAgfHwgY29udGFp
bnNDb2xvcigpCiAgICAgICAgIHx8IGNvbnRhaW5zRmlsZXMoKTsKIH0KQEAgLTEzNCwxMCArMTcw
LDIwIEBAIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gRHJhZ0RhdGE6OmFzRnJhZ21lbnQo
RG9jdW1lbnQqIGRvYykgY29uc3QKICAgICAgICAgLy8gICAgcmV0dXJuIGZyYWdtZW50OwogICAg
IH0KIAotICAgIGlmICghbV9wbGF0Zm9ybURyYWdEYXRhLT50ZXh0SHRtbC5pc0VtcHR5KCkpIHsK
LSAgICAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21l
bnRGcm9tTWFya3VwKGRvYywKLSAgICAgICAgICAgIG1fcGxhdGZvcm1EcmFnRGF0YS0+dGV4dEh0
bWwsIG1fcGxhdGZvcm1EcmFnRGF0YS0+aHRtbEJhc2VVcmwsIEZyYWdtZW50U2NyaXB0aW5nTm90
QWxsb3dlZCk7Ci0gICAgICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNlKCk7CisgICAgaWYgKG1f
cGxhdGZvcm1EcmFnRGF0YS5vbGRXYXkpIHsKKyAgICAgICAgaWYgKCFtX3BsYXRmb3JtRHJhZ0Rh
dGEub2xkV2F5LT50ZXh0SHRtbC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIFJlZlB0cjxEb2N1
bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChkb2MsCisg
ICAgICAgICAgICAgICAgbV9wbGF0Zm9ybURyYWdEYXRhLm9sZFdheS0+dGV4dEh0bWwsIG1fcGxh
dGZvcm1EcmFnRGF0YS5vbGRXYXktPmh0bWxCYXNlVXJsLCBGcmFnbWVudFNjcmlwdGluZ05vdEFs
bG93ZWQpOworICAgICAgICAgICAgcmV0dXJuIGZyYWdtZW50LnJlbGVhc2UoKTsKKyAgICAgICAg
fQorICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChjb250YWluc0hUTUwoJm1fcGxhdGZvcm1EcmFn
RGF0YSkpIHsKKyAgICAgICAgICAgIFN0cmluZyBiYXNlVVJMOworICAgICAgICAgICAgU3RyaW5n
IGh0bWwgPSBtX3BsYXRmb3JtRHJhZ0RhdGEubmV3V2F5LT5nZXRIVE1MKCZiYXNlVVJMKTsKKyAg
ICAgICAgICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGNyZWF0ZUZyYWdt
ZW50RnJvbU1hcmt1cChkb2MsCisgICAgICAgICAgICAgICAgaHRtbCwgYmFzZVVSTCwgRnJhZ21l
bnRTY3JpcHRpbmdOb3RBbGxvd2VkKTsKKyAgICAgICAgICAgIHJldHVybiBmcmFnbWVudC5yZWxl
YXNlKCk7CisgICAgICAgIH0KICAgICB9CiAKICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRHJhZ0RhdGFSZWYuaCBiL1dlYkNvcmUvcGxhdGZvcm0v
Y2hyb21pdW0vRHJhZ0RhdGFSZWYuaAppbmRleCBkZTFmYTFjLi5iYWRjOTM1IDEwMDY0NAotLS0g
YS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RyYWdEYXRhUmVmLmgKKysrIGIvV2ViQ29yZS9w
bGF0Zm9ybS9jaHJvbWl1bS9EcmFnRGF0YVJlZi5oCkBAIC0zMiwxMCArMzIsMTggQEAKICNkZWZp
bmUgRHJhZ0RhdGFSZWZfaAogCiAjaW5jbHVkZSAiQ2hyb21pdW1EYXRhT2JqZWN0LmgiCisjaW5j
bHVkZSAiUmVhZGFibGVEYXRhT2JqZWN0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAg
IHR5cGVkZWYgQ2hyb21pdW1EYXRhT2JqZWN0KiBEcmFnRGF0YVJlZjsKK3N0cnVjdCBEcmFnRGF0
YVJlZiB7CisgICAgLy8gRklYTUU6IFRoZXNlIGFyZSBkZWxpYmVyYXRlbHkgbm9uLWV4cGxpY2l0
IGZvciB0aGUgbW9tZW50LiBPbmNlIENocm9taXVtCisgICAgLy8gaXMgc3dpdGNoZWQgb3ZlciB0
byB0aGUgbmV3IHdheSBvZiBoYW5kbGluZyBkcmFncywgcmV2ZXJ0IHRoaXMgY2hhbmdlLgorICAg
IERyYWdEYXRhUmVmKENocm9taXVtRGF0YU9iamVjdCogZGF0YSkgOiBvbGRXYXkoZGF0YSkge30K
KyAgICBEcmFnRGF0YVJlZihSZWFkYWJsZURhdGFPYmplY3QqIGRhdGEpIDogbmV3V2F5KGRhdGEp
IHt9CisgICAgQ2hyb21pdW1EYXRhT2JqZWN0KiBvbGRXYXk7CisgICAgUmVhZGFibGVEYXRhT2Jq
ZWN0KiBuZXdXYXk7Cit9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBh
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmlu
ZGV4IDkwZDk0NjAuLjAzNDZjODkgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDEw
LTA4LTMxICBEYW5pZWwgQ2hlbmcgIDxkY2hlbmdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gUHJlcGFyZSBD
bGlwYm9hcmQvRHJhZ0RhdGEgZm9yIHRyYW5zaXRpb24gdG8gbmV3IGRyYWctYW5kLWRyb3AgaW50
ZXJmYWNlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NDQ5OTIKKworICAgICAgICBJbiBvcmRlciB0byBhdm9pZCBicmVha2luZyBDaHJvbWl1bSwgd2Ug
aGF2ZSB0aGUgcmVuZGVyZXIgc2lkZSBpbXBsZW1lbnQKKyAgICAgICAgYm90aCB0aGUgb2xkIGFu
ZCBuZXcgZHJhZ2dpbmcgaW50ZXJmYWNlIGFuZCBnYXRlIHRoZSBiZWhhdmlvciBiYXNlZCBvZmYK
KyAgICAgICAgb2Ygd2hpY2ggRGF0YU9iamVjdCBwb2ludGVyIGlzIHNldC4gVGhpcyBjaGFuZ2Ug
b25seSBhZmZlY3RzIGRyYWdnaW5nCisgICAgICAgIGludG8vb3ZlciB0aGUgcmVuZGVyZXI7IGl0
IGRvZXMgbm90IGFmZmVjdCBzdGFydGluZyBhIGRyYWcgb3IgY29weSBhbmQKKyAgICAgICAgcGFz
dGUuIE9uY2UgdGhlIGFwcHJvcHJpYXRlIENocm9taXVtIGNoYW5nZXMgbGFuZCwgdGhlIHRlbXBv
cmFyeQorICAgICAgICBjb25kaXRpb25hbCBicmFuY2hlcyB3aWxsIGJlIHJlbW92ZWQuCisKKyAg
ICAgICAgKiBwdWJsaWMvV2ViVmlldy5oOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpkcmFnVGFyZ2V0RHJhZ0VudGVyTmV3KToK
KyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmRyYWdUYXJnZXREcmFnTGVhdmUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6ZHJhZ1RhcmdldERyb3ApOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWV3SW1wbDo6ZHJhZ1RhcmdldERyYWdFbnRlck9yT3Zlcik6CisgICAgICAgICog
c3JjL1dlYlZpZXdJbXBsLmg6CisKIDIwMTAtMDgtMzAgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJl
dmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHI2
NjE5OC4KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVmlldy5oIGIvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3LmgKaW5kZXggMWI5NGRhMi4uODcwMGQwMyAxMDA2
NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3LmgKKysrIGIvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJWaWV3LmgKQEAgLTE5OCw2ICsxOTgsOSBAQCBwdWJsaWM6CiAgICAg
ICAgIGNvbnN0IFdlYkRyYWdEYXRhJiwgaW50IGlkZW50aXR5LAogICAgICAgICBjb25zdCBXZWJQ
b2ludCYgY2xpZW50UG9pbnQsIGNvbnN0IFdlYlBvaW50JiBzY3JlZW5Qb2ludCwKICAgICAgICAg
V2ViRHJhZ09wZXJhdGlvbnNNYXNrIG9wZXJhdGlvbnNBbGxvd2VkKSA9IDA7CisgICAgdmlydHVh
bCBXZWJEcmFnT3BlcmF0aW9uIGRyYWdUYXJnZXREcmFnRW50ZXJOZXcoCisgICAgICAgIGludCBp
ZGVudGl0eSwgY29uc3QgV2ViUG9pbnQmIGNsaWVudFBvaW50LCBjb25zdCBXZWJQb2ludCYgc2Ny
ZWVuUG9pbnQsCisgICAgICAgIFdlYkRyYWdPcGVyYXRpb25zTWFzayBvcGVyYXRpb25zQWxsb3dl
ZCkgPSAwOwogICAgIHZpcnR1YWwgV2ViRHJhZ09wZXJhdGlvbiBkcmFnVGFyZ2V0RHJhZ092ZXIo
CiAgICAgICAgIGNvbnN0IFdlYlBvaW50JiBjbGllbnRQb2ludCwgY29uc3QgV2ViUG9pbnQmIHNj
cmVlblBvaW50LAogICAgICAgICBXZWJEcmFnT3BlcmF0aW9uc01hc2sgb3BlcmF0aW9uc0FsbG93
ZWQpID0gMDsKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3Bw
IGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKaW5kZXggNTA2NWY1ZS4uOTVk
YWNhMCAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKKysr
IGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKQEAgLTgxLDYgKzgxLDcgQEAK
ICNpbmNsdWRlICJQb3B1cE1lbnVDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlBvcHVwTWVudUNsaWVu
dC5oIgogI2luY2x1ZGUgIlByb2dyZXNzVHJhY2tlci5oIgorI2luY2x1ZGUgIlJlYWRhYmxlRGF0
YU9iamVjdC5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJSZXNvdXJjZUhh
bmRsZS5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCkBAIC0xNTgzLDYgKzE1ODQsMjEg
QEAgV2ViRHJhZ09wZXJhdGlvbiBXZWJWaWV3SW1wbDo6ZHJhZ1RhcmdldERyYWdFbnRlcigKICAg
ICByZXR1cm4gZHJhZ1RhcmdldERyYWdFbnRlck9yT3ZlcihjbGllbnRQb2ludCwgc2NyZWVuUG9p
bnQsIERyYWdFbnRlcik7CiB9CiAKK1dlYkRyYWdPcGVyYXRpb24gV2ViVmlld0ltcGw6OmRyYWdU
YXJnZXREcmFnRW50ZXJOZXcoCisgICAgaW50IGlkZW50aXR5LAorICAgIGNvbnN0IFdlYlBvaW50
JiBjbGllbnRQb2ludCwKKyAgICBjb25zdCBXZWJQb2ludCYgc2NyZWVuUG9pbnQsCisgICAgV2Vi
RHJhZ09wZXJhdGlvbnNNYXNrIG9wZXJhdGlvbnNBbGxvd2VkKQoreworICAgIEFTU0VSVCghbV9j
dXJyZW50RHJhZ0RhdGFOZXcuZ2V0KCkpOworCisgICAgbV9jdXJyZW50RHJhZ0RhdGFOZXcgPSBS
ZWFkYWJsZURhdGFPYmplY3Q6OmNyZWF0ZSh0cnVlKTsKKyAgICBtX2RyYWdJZGVudGl0eSA9IGlk
ZW50aXR5OworICAgIG1fb3BlcmF0aW9uc0FsbG93ZWQgPSBvcGVyYXRpb25zQWxsb3dlZDsKKwor
ICAgIHJldHVybiBkcmFnVGFyZ2V0RHJhZ0VudGVyT3JPdmVyKGNsaWVudFBvaW50LCBzY3JlZW5Q
b2ludCwgRHJhZ0VudGVyKTsKK30KKwogV2ViRHJhZ09wZXJhdGlvbiBXZWJWaWV3SW1wbDo6ZHJh
Z1RhcmdldERyYWdPdmVyKAogICAgIGNvbnN0IFdlYlBvaW50JiBjbGllbnRQb2ludCwKICAgICBj
b25zdCBXZWJQb2ludCYgc2NyZWVuUG9pbnQsCkBAIC0xNTk1LDE5ICsxNjExLDM0IEBAIFdlYkRy
YWdPcGVyYXRpb24gV2ViVmlld0ltcGw6OmRyYWdUYXJnZXREcmFnT3ZlcigKIAogdm9pZCBXZWJW
aWV3SW1wbDo6ZHJhZ1RhcmdldERyYWdMZWF2ZSgpCiB7Ci0gICAgQVNTRVJUKG1fY3VycmVudERy
YWdEYXRhLmdldCgpKTsKLQotICAgIERyYWdEYXRhIGRyYWdEYXRhKAotICAgICAgICBtX2N1cnJl
bnREcmFnRGF0YS5nZXQoKSwKLSAgICAgICAgSW50UG9pbnQoKSwKLSAgICAgICAgSW50UG9pbnQo
KSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8RHJhZ09wZXJhdGlvbj4obV9vcGVyYXRpb25zQWxsb3dl
ZCkpOwotCi0gICAgbV9kcmFnVGFyZ2V0RGlzcGF0Y2ggPSB0cnVlOwotICAgIG1fcGFnZS0+ZHJh
Z0NvbnRyb2xsZXIoKS0+ZHJhZ0V4aXRlZCgmZHJhZ0RhdGEpOwotICAgIG1fZHJhZ1RhcmdldERp
c3BhdGNoID0gZmFsc2U7CisgICAgLy8gRklYTUU6IFRoaXMgaXMgdGVtcG9yYXJ5IHdoaWxlIHVu
dGlsIENocm9taXVtIHNpZGUgaXMgdHJhbnNpdGlvbmVkIHRvIHVzZQorICAgIC8vIHRoZSBuZXcg
ZHJhZ2dpbmcgaW50ZXJmYWNlLgorICAgIGlmIChtX2N1cnJlbnREcmFnRGF0YS5nZXQoKSkgewor
ICAgICAgICBEcmFnRGF0YSBkcmFnRGF0YSgKKyAgICAgICAgICAgIG1fY3VycmVudERyYWdEYXRh
LmdldCgpLAorICAgICAgICAgICAgSW50UG9pbnQoKSwKKyAgICAgICAgICAgIEludFBvaW50KCks
CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxEcmFnT3BlcmF0aW9uPihtX29wZXJhdGlvbnNBbGxv
d2VkKSk7CisKKyAgICAgICAgbV9kcmFnVGFyZ2V0RGlzcGF0Y2ggPSB0cnVlOworICAgICAgICBt
X3BhZ2UtPmRyYWdDb250cm9sbGVyKCktPmRyYWdFeGl0ZWQoJmRyYWdEYXRhKTsKKyAgICAgICAg
bV9kcmFnVGFyZ2V0RGlzcGF0Y2ggPSBmYWxzZTsKKyAgICB9IGVsc2UgaWYgKG1fY3VycmVudERy
YWdEYXRhTmV3LmdldCgpKSB7CisgICAgICAgIERyYWdEYXRhIGRyYWdEYXRhKAorICAgICAgICAg
ICAgbV9jdXJyZW50RHJhZ0RhdGFOZXcuZ2V0KCksCisgICAgICAgICAgICBJbnRQb2ludCgpLAor
ICAgICAgICAgICAgSW50UG9pbnQoKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PERyYWdPcGVy
YXRpb24+KG1fb3BlcmF0aW9uc0FsbG93ZWQpKTsKKworICAgICAgICBtX2RyYWdUYXJnZXREaXNw
YXRjaCA9IHRydWU7CisgICAgICAgIG1fcGFnZS0+ZHJhZ0NvbnRyb2xsZXIoKS0+ZHJhZ0V4aXRl
ZCgmZHJhZ0RhdGEpOworICAgICAgICBtX2RyYWdUYXJnZXREaXNwYXRjaCA9IGZhbHNlOworICAg
IH0gZWxzZSB7CisgICAgICAgIEFTU0VSVChmYWxzZSk7CisgICAgfQogCiAgICAgbV9jdXJyZW50
RHJhZ0RhdGEgPSAwOworICAgIG1fY3VycmVudERyYWdEYXRhTmV3ID0gMDsKICAgICBtX2Ryb3BF
ZmZlY3QgPSBEcm9wRWZmZWN0RGVmYXVsdDsKICAgICBtX2RyYWdPcGVyYXRpb24gPSBXZWJEcmFn
T3BlcmF0aW9uTm9uZTsKICAgICBtX2RyYWdJZGVudGl0eSA9IDA7CkBAIC0xNjE2LDggKzE2NDcs
NiBAQCB2b2lkIFdlYlZpZXdJbXBsOjpkcmFnVGFyZ2V0RHJhZ0xlYXZlKCkKIHZvaWQgV2ViVmll
d0ltcGw6OmRyYWdUYXJnZXREcm9wKGNvbnN0IFdlYlBvaW50JiBjbGllbnRQb2ludCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlBvaW50JiBzY3JlZW5Qb2ludCkK
IHsKLSAgICBBU1NFUlQobV9jdXJyZW50RHJhZ0RhdGEuZ2V0KCkpOwotCiAgICAgLy8gSWYgdGhp
cyB3ZWJ2aWV3IHRyYW5zaXRpb25zIGZyb20gdGhlICJkcm9wIGFjY2VwdGluZyIgc3RhdGUgdG8g
dGhlICJub3QKICAgICAvLyBhY2NlcHRpbmciIHN0YXRlLCB0aGVuIG91ciBJUEMgbWVzc2FnZSBy
ZXBseSBpbmRpY2F0aW5nIHRoYXQgbWF5IGJlIGluLQogICAgIC8vIGZsaWdodCwgb3IgZWxzZSBk
ZWxheWVkIGJ5IGphdmFzY3JpcHQgcHJvY2Vzc2luZyBpbiB0aGlzIHdlYnZpZXcuICBJZiBhCkBA
IC0xNjMwLDE3ICsxNjU5LDM0IEBAIHZvaWQgV2ViVmlld0ltcGw6OmRyYWdUYXJnZXREcm9wKGNv
bnN0IFdlYlBvaW50JiBjbGllbnRQb2ludCwKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IERyYWdEYXRhIGRyYWdEYXRhKAotICAgICAgICBtX2N1cnJlbnREcmFnRGF0YS5nZXQoKSwKLSAg
ICAgICAgY2xpZW50UG9pbnQsCi0gICAgICAgIHNjcmVlblBvaW50LAotICAgICAgICBzdGF0aWNf
Y2FzdDxEcmFnT3BlcmF0aW9uPihtX29wZXJhdGlvbnNBbGxvd2VkKSk7Ci0KLSAgICBtX2RyYWdU
YXJnZXREaXNwYXRjaCA9IHRydWU7Ci0gICAgbV9wYWdlLT5kcmFnQ29udHJvbGxlcigpLT5wZXJm
b3JtRHJhZygmZHJhZ0RhdGEpOwotICAgIG1fZHJhZ1RhcmdldERpc3BhdGNoID0gZmFsc2U7Cisg
ICAgLy8gRklYTUU6IFRoaXMgaXMgdGVtcG9yYXJ5IHdoaWxlIHVudGlsIENocm9taXVtIHNpZGUg
aXMgdHJhbnNpdGlvbmVkIHRvIHVzZQorICAgIC8vIHRoZSBuZXcgZHJhZ2dpbmcgaW50ZXJmYWNl
LgorICAgIGlmIChtX2N1cnJlbnREcmFnRGF0YS5nZXQoKSkgeworICAgICAgICBEcmFnRGF0YSBk
cmFnRGF0YSgKKyAgICAgICAgICAgIG1fY3VycmVudERyYWdEYXRhLmdldCgpLAorICAgICAgICAg
ICAgY2xpZW50UG9pbnQsCisgICAgICAgICAgICBzY3JlZW5Qb2ludCwKKyAgICAgICAgICAgIHN0
YXRpY19jYXN0PERyYWdPcGVyYXRpb24+KG1fb3BlcmF0aW9uc0FsbG93ZWQpKTsKKworICAgICAg
ICBtX2RyYWdUYXJnZXREaXNwYXRjaCA9IHRydWU7CisgICAgICAgIG1fcGFnZS0+ZHJhZ0NvbnRy
b2xsZXIoKS0+cGVyZm9ybURyYWcoJmRyYWdEYXRhKTsKKyAgICAgICAgbV9kcmFnVGFyZ2V0RGlz
cGF0Y2ggPSBmYWxzZTsKKyAgICB9IGVsc2UgaWYgKG1fY3VycmVudERyYWdEYXRhTmV3LmdldCgp
KSB7CisgICAgICAgIERyYWdEYXRhIGRyYWdEYXRhKAorICAgICAgICAgICAgbV9jdXJyZW50RHJh
Z0RhdGFOZXcuZ2V0KCksCisgICAgICAgICAgICBjbGllbnRQb2ludCwKKyAgICAgICAgICAgIHNj
cmVlblBvaW50LAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8RHJhZ09wZXJhdGlvbj4obV9vcGVy
YXRpb25zQWxsb3dlZCkpOworCisgICAgICAgIG1fZHJhZ1RhcmdldERpc3BhdGNoID0gdHJ1ZTsK
KyAgICAgICAgbV9wYWdlLT5kcmFnQ29udHJvbGxlcigpLT5wZXJmb3JtRHJhZygmZHJhZ0RhdGEp
OworICAgICAgICBtX2RyYWdUYXJnZXREaXNwYXRjaCA9IGZhbHNlOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIEFTU0VSVChmYWxzZSk7CisgICAgfQogCiAgICAgbV9jdXJyZW50RHJhZ0RhdGEgPSAw
OworICAgIG1fY3VycmVudERyYWdEYXRhTmV3ID0gMDsKICAgICBtX2Ryb3BFZmZlY3QgPSBEcm9w
RWZmZWN0RGVmYXVsdDsKICAgICBtX2RyYWdPcGVyYXRpb24gPSBXZWJEcmFnT3BlcmF0aW9uTm9u
ZTsKICAgICBtX2RyYWdJZGVudGl0eSA9IDA7CkBAIC0xNjU2LDI4ICsxNzAyLDUzIEBAIGludCBX
ZWJWaWV3SW1wbDo6ZHJhZ0lkZW50aXR5KCkKIAogV2ViRHJhZ09wZXJhdGlvbiBXZWJWaWV3SW1w
bDo6ZHJhZ1RhcmdldERyYWdFbnRlck9yT3Zlcihjb25zdCBXZWJQb2ludCYgY2xpZW50UG9pbnQs
IGNvbnN0IFdlYlBvaW50JiBzY3JlZW5Qb2ludCwgRHJhZ0FjdGlvbiBkcmFnQWN0aW9uKQogewot
ICAgIEFTU0VSVChtX2N1cnJlbnREcmFnRGF0YS5nZXQoKSk7Ci0KLSAgICBEcmFnRGF0YSBkcmFn
RGF0YSgKLSAgICAgICAgbV9jdXJyZW50RHJhZ0RhdGEuZ2V0KCksCi0gICAgICAgIGNsaWVudFBv
aW50LAotICAgICAgICBzY3JlZW5Qb2ludCwKLSAgICAgICAgc3RhdGljX2Nhc3Q8RHJhZ09wZXJh
dGlvbj4obV9vcGVyYXRpb25zQWxsb3dlZCkpOwotCi0gICAgbV9kcm9wRWZmZWN0ID0gRHJvcEVm
ZmVjdERlZmF1bHQ7Ci0gICAgbV9kcmFnVGFyZ2V0RGlzcGF0Y2ggPSB0cnVlOwotICAgIERyYWdP
cGVyYXRpb24gZWZmZWN0ID0gZHJhZ0FjdGlvbiA9PSBEcmFnRW50ZXIgPyBtX3BhZ2UtPmRyYWdD
b250cm9sbGVyKCktPmRyYWdFbnRlcmVkKCZkcmFnRGF0YSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbV9wYWdlLT5kcmFnQ29udHJvbGxlcigp
LT5kcmFnVXBkYXRlZCgmZHJhZ0RhdGEpOwotICAgIC8vIE1hc2sgdGhlIG9wZXJhdGlvbiBhZ2Fp
bnN0IHRoZSBkcmFnIHNvdXJjZSdzIGFsbG93ZWQgb3BlcmF0aW9ucy4KLSAgICBpZiAoIShlZmZl
Y3QgJiBkcmFnRGF0YS5kcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2soKSkpCi0gICAgICAgIGVm
ZmVjdCA9IERyYWdPcGVyYXRpb25Ob25lOwotICAgIG1fZHJhZ1RhcmdldERpc3BhdGNoID0gZmFs
c2U7Ci0KLSAgICBpZiAobV9kcm9wRWZmZWN0ICE9IERyb3BFZmZlY3REZWZhdWx0KSB7Ci0gICAg
ICAgIG1fZHJhZ09wZXJhdGlvbiA9IChtX2Ryb3BFZmZlY3QgIT0gRHJvcEVmZmVjdE5vbmUpID8g
V2ViRHJhZ09wZXJhdGlvbkNvcHkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOiBXZWJEcmFnT3BlcmF0aW9uTm9uZTsKLSAgICB9IGVs
c2UKLSAgICAgICAgbV9kcmFnT3BlcmF0aW9uID0gc3RhdGljX2Nhc3Q8V2ViRHJhZ09wZXJhdGlv
bj4oZWZmZWN0KTsKKyAgICAvLyBGSVhNRTogVGhpcyBpcyB0ZW1wb3Jhcnkgd2hpbGUgdW50aWwg
Q2hyb21pdW0gc2lkZSBpcyB0cmFuc2l0aW9uZWQgdG8gdXNlCisgICAgLy8gdGhlIG5ldyBkcmFn
Z2luZyBpbnRlcmZhY2UuCisgICAgaWYgKG1fY3VycmVudERyYWdEYXRhLmdldCgpKSB7CisgICAg
ICAgIERyYWdEYXRhIGRyYWdEYXRhKAorICAgICAgICAgICAgbV9jdXJyZW50RHJhZ0RhdGEuZ2V0
KCksCisgICAgICAgICAgICBjbGllbnRQb2ludCwKKyAgICAgICAgICAgIHNjcmVlblBvaW50LAor
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8RHJhZ09wZXJhdGlvbj4obV9vcGVyYXRpb25zQWxsb3dl
ZCkpOworCisgICAgICAgIG1fZHJvcEVmZmVjdCA9IERyb3BFZmZlY3REZWZhdWx0OworICAgICAg
ICBtX2RyYWdUYXJnZXREaXNwYXRjaCA9IHRydWU7CisgICAgICAgIERyYWdPcGVyYXRpb24gZWZm
ZWN0ID0gZHJhZ0FjdGlvbiA9PSBEcmFnRW50ZXIgPyBtX3BhZ2UtPmRyYWdDb250cm9sbGVyKCkt
PmRyYWdFbnRlcmVkKCZkcmFnRGF0YSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA6IG1fcGFnZS0+ZHJhZ0NvbnRyb2xsZXIoKS0+ZHJhZ1Vw
ZGF0ZWQoJmRyYWdEYXRhKTsKKyAgICAgICAgLy8gTWFzayB0aGUgb3BlcmF0aW9uIGFnYWluc3Qg
dGhlIGRyYWcgc291cmNlJ3MgYWxsb3dlZCBvcGVyYXRpb25zLgorICAgICAgICBpZiAoIShlZmZl
Y3QgJiBkcmFnRGF0YS5kcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2soKSkpCisgICAgICAgICAg
ICBlZmZlY3QgPSBEcmFnT3BlcmF0aW9uTm9uZTsKKyAgICAgICAgbV9kcmFnVGFyZ2V0RGlzcGF0
Y2ggPSBmYWxzZTsKKworICAgICAgICBpZiAobV9kcm9wRWZmZWN0ICE9IERyb3BFZmZlY3REZWZh
dWx0KSB7CisgICAgICAgICAgICBtX2RyYWdPcGVyYXRpb24gPSAobV9kcm9wRWZmZWN0ICE9IERy
b3BFZmZlY3ROb25lKSA/IFdlYkRyYWdPcGVyYXRpb25Db3B5CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFdlYkRyYWdPcGVy
YXRpb25Ob25lOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1fZHJhZ09wZXJhdGlvbiA9
IHN0YXRpY19jYXN0PFdlYkRyYWdPcGVyYXRpb24+KGVmZmVjdCk7CisgICAgfSBlbHNlIGlmICht
X2N1cnJlbnREcmFnRGF0YU5ldy5nZXQoKSkgeworICAgICAgICBEcmFnRGF0YSBkcmFnRGF0YSgK
KyAgICAgICAgICAgIG1fY3VycmVudERyYWdEYXRhTmV3LmdldCgpLAorICAgICAgICAgICAgY2xp
ZW50UG9pbnQsCisgICAgICAgICAgICBzY3JlZW5Qb2ludCwKKyAgICAgICAgICAgIHN0YXRpY19j
YXN0PERyYWdPcGVyYXRpb24+KG1fb3BlcmF0aW9uc0FsbG93ZWQpKTsKKworICAgICAgICBtX2Ry
b3BFZmZlY3QgPSBEcm9wRWZmZWN0RGVmYXVsdDsKKyAgICAgICAgbV9kcmFnVGFyZ2V0RGlzcGF0
Y2ggPSB0cnVlOworICAgICAgICBEcmFnT3BlcmF0aW9uIGVmZmVjdCA9IGRyYWdBY3Rpb24gPT0g
RHJhZ0VudGVyID8gbV9wYWdlLT5kcmFnQ29udHJvbGxlcigpLT5kcmFnRW50ZXJlZCgmZHJhZ0Rh
dGEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOiBtX3BhZ2UtPmRyYWdDb250cm9sbGVyKCktPmRyYWdVcGRhdGVkKCZkcmFnRGF0YSk7Cisg
ICAgICAgIC8vIE1hc2sgdGhlIG9wZXJhdGlvbiBhZ2FpbnN0IHRoZSBkcmFnIHNvdXJjZSdzIGFs
bG93ZWQgb3BlcmF0aW9ucy4KKyAgICAgICAgaWYgKCEoZWZmZWN0ICYgZHJhZ0RhdGEuZHJhZ2dp
bmdTb3VyY2VPcGVyYXRpb25NYXNrKCkpKQorICAgICAgICAgICAgZWZmZWN0ID0gRHJhZ09wZXJh
dGlvbk5vbmU7CisgICAgICAgIG1fZHJhZ1RhcmdldERpc3BhdGNoID0gZmFsc2U7CisKKyAgICAg
ICAgaWYgKG1fZHJvcEVmZmVjdCAhPSBEcm9wRWZmZWN0RGVmYXVsdCkgeworICAgICAgICAgICAg
bV9kcmFnT3BlcmF0aW9uID0gKG1fZHJvcEVmZmVjdCAhPSBEcm9wRWZmZWN0Tm9uZSkgPyBXZWJE
cmFnT3BlcmF0aW9uQ29weQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOiBXZWJEcmFnT3BlcmF0aW9uTm9uZTsKKyAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICBtX2RyYWdPcGVyYXRpb24gPSBzdGF0aWNfY2FzdDxXZWJEcmFn
T3BlcmF0aW9uPihlZmZlY3QpOworICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVChmYWxzZSk7
CisgICAgfQogCiAgICAgaWYgKGRyYWdBY3Rpb24gPT0gRHJhZ092ZXIpCiAgICAgICAgIG1fZHJh
Z1Njcm9sbFRpbWVyLT50cmlnZ2VyU2Nyb2xsKG1haW5GcmFtZUltcGwoKS0+ZnJhbWVWaWV3KCks
IGNsaWVudFBvaW50KTsKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0lt
cGwuaCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAppbmRleCBjMjk2MTIxLi5m
MWYwYmZkIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKKysr
IGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCkBAIC02Myw2ICs2Myw3IEBAIGNs
YXNzIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDsKIGNsYXNzIFBvcHVwQ29udGFpbmVyOwogY2xhc3Mg
UG9wdXBNZW51Q2xpZW50OwogY2xhc3MgUmFuZ2U7CitjbGFzcyBSZWFkYWJsZURhdGFPYmplY3Q7
CiBjbGFzcyBSZW5kZXJUaGVtZTsKIGNsYXNzIFdpZGdldDsKIH0KQEAgLTE0OCw2ICsxNDksMTEg
QEAgcHVibGljOgogICAgICAgICBjb25zdCBXZWJQb2ludCYgY2xpZW50UG9pbnQsCiAgICAgICAg
IGNvbnN0IFdlYlBvaW50JiBzY3JlZW5Qb2ludCwKICAgICAgICAgV2ViRHJhZ09wZXJhdGlvbnNN
YXNrIG9wZXJhdGlvbnNBbGxvd2VkKTsKKyAgICB2aXJ0dWFsIFdlYkRyYWdPcGVyYXRpb24gZHJh
Z1RhcmdldERyYWdFbnRlck5ldygKKyAgICAgICAgaW50IGlkZW50aXR5LAorICAgICAgICBjb25z
dCBXZWJQb2ludCYgY2xpZW50UG9pbnQsCisgICAgICAgIGNvbnN0IFdlYlBvaW50JiBzY3JlZW5Q
b2ludCwKKyAgICAgICAgV2ViRHJhZ09wZXJhdGlvbnNNYXNrIG9wZXJhdGlvbnNBbGxvd2VkKTsK
ICAgICB2aXJ0dWFsIFdlYkRyYWdPcGVyYXRpb24gZHJhZ1RhcmdldERyYWdPdmVyKAogICAgICAg
ICBjb25zdCBXZWJQb2ludCYgY2xpZW50UG9pbnQsCiAgICAgICAgIGNvbnN0IFdlYlBvaW50JiBz
Y3JlZW5Qb2ludCwKQEAgLTQxOCw2ICs0MjQsOCBAQCBwcml2YXRlOgogCiAgICAgLy8gQSBjb3B5
IG9mIHRoZSB3ZWIgZHJvcCBkYXRhIG9iamVjdCB3ZSByZWNlaXZlZCBmcm9tIHRoZSBicm93c2Vy
LgogICAgIFJlZlB0cjxXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q+IG1fY3VycmVudERyYWdE
YXRhOworICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhlIGR1cGxpY2F0aW9uIG9uY2UgQ2hyb21pdW0g
aXMgc3dpdGNoZWQgb3Zlci4KKyAgICBSZWZQdHI8V2ViQ29yZTo6UmVhZGFibGVEYXRhT2JqZWN0
PiBtX2N1cnJlbnREcmFnRGF0YU5ldzsKIAogICAgIC8vIFRoZSBwb2ludCByZWxhdGl2ZSB0byB0
aGUgY2xpZW50IGFyZWEgd2hlcmUgdGhlIG1vdXNlIHdhcyBsYXN0IHByZXNzZWQKICAgICAvLyBk
b3duLiBUaGlzIGlzIHVzZWQgYnkgdGhlIGRyYWcgY2xpZW50IHRvIGRldGVybWluZSB3aGF0IHdh
cyB1bmRlciB0aGUK
</data>
<flag name="review"
          id="55065"
          type_id="1"
          status="-"
          setter="dcheng"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66282</attachid>
            <date>2010-09-01 15:06:49 -0700</date>
            <delta_ts>2010-09-01 15:16:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>foo.patch</filename>
            <type>text/plain</type>
            <size>26315</size>
            <attacher name="Daniel Cheng">dcheng</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MDQ3MGExMS4uMjE1YzEwYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MiBAQAorMjAxMC0wOC0zMSAgRGFuaWVsIENoZW5n
ICA8ZGNoZW5nQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBbY2hyb21pdW1dIFByZXBhcmUgQ2xpcGJvYXJkL0RyYWdEYXRhIGZv
ciB0cmFuc2l0aW9uIHRvIG5ldyBkcmFnLWFuZC1kcm9wIGludGVyZmFjZS4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0OTkyCisKKyAgICAgICAgSW4g
b3JkZXIgdG8gYXZvaWQgYnJlYWtpbmcgQ2hyb21pdW0sIHdlIGhhdmUgdGhlIHJlbmRlcmVyIHNp
ZGUgaW1wbGVtZW50CisgICAgICAgIGJvdGggdGhlIG9sZCBhbmQgbmV3IGRyYWdnaW5nIGludGVy
ZmFjZSBhbmQgZ2F0ZSB0aGUgYmVoYXZpb3IgYmFzZWQgb2ZmCisgICAgICAgIG9mIHdoaWNoIERh
dGFPYmplY3QgcG9pbnRlciBpcyBzZXQuIFRoaXMgY2hhbmdlIG9ubHkgYWZmZWN0cyBkcmFnZ2lu
ZworICAgICAgICBpbnRvL292ZXIgdGhlIHJlbmRlcmVyOyBpdCBkb2VzIG5vdCBhZmZlY3Qgc3Rh
cnRpbmcgYSBkcmFnIG9yIGNvcHkgYW5kCisgICAgICAgIHBhc3RlLiBPbmNlIHRoZSBhcHByb3By
aWF0ZSBDaHJvbWl1bSBjaGFuZ2VzIGxhbmQsIHRoZSB0ZW1wb3JhcnkKKyAgICAgICAgY29uZGl0
aW9uYWwgYnJhbmNoZXMgd2lsbCBiZSByZW1vdmVkLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4K
KworICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNs
aXBib2FyZENocm9taXVtOjpDbGlwYm9hcmRDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpD
bGlwYm9hcmRDaHJvbWl1bTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENo
cm9taXVtOjpnZXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENocm9taXVtOjp0
eXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRDaHJvbWl1bTo6ZmlsZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkQ2hyb21pdW06Omhhc0RhdGEpOgorICAgICAgICAqIHBs
YXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmg6CisgICAgICAgICogcGxhdGZvcm0v
Y2hyb21pdW0vRHJhZ0RhdGFDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb250YWlu
c0hUTUwpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmNvbnRhaW5zVVJMKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRyYWdEYXRhOjphc1VSTCk6CisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0
YTo6Y29udGFpbnNGaWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0YTo6YXNGaWxlbmFt
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmNvbnRhaW5zUGxhaW5UZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjphc1BsYWluVGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpEcmFnRGF0YTo6Y2FuU21hcnRSZXBsYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRh
Ojpjb250YWluc0NvbXBhdGlibGVDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRh
Ojphc0ZyYWdtZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9EcmFnRGF0YVJlZi5o
OgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGFSZWY6OkRyYWdEYXRhUmVmKToKKwogMjAxMC0w
OC0zMCAgRGFuaWVsIENoZW5nICA8ZGNoZW5nQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9D
bGlwYm9hcmRDaHJvbWl1bS5jcHAKaW5kZXggMjM1MDhhNi4uZWM2M2Q2MCAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5jcHAKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5jcHAKQEAgLTQ4LDYgKzQ4
LDkgQEAKICNpbmNsdWRlICJTdHJpbmdCdWlsZGVyLmgiCiAjaW5jbHVkZSAibWFya3VwLmgiCiAK
Ky8vIEZJWE1FOiBUaGlzIGNsYXNzIGN1cnJlbnRseSBoYXMgYSBsb3Qgb2YgZHVwbGljYXRpb24g
aW4gcHJlcGFyYXRpb24gZm9yIGEKKy8vIHRyYW5zaXRpb24gdG8gdGhlIG5ldyBkcmFnIGFuZCBk
cm9wIG1vZGVsLiBDbGVhbiBpdCB1cCBvbmNlIHRoZSB0cmFuc2l0aW9uIGlzCisvLyBkb25lIG9u
IHRoZSBDaHJvbWUgc2lkZS4KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNl
IEhUTUxOYW1lczsKQEAgLTkxLDkgKzk0LDIxIEBAIHN0YXRpYyBDbGlwYm9hcmREYXRhVHlwZSBj
bGlwYm9hcmRUeXBlRnJvbU1JTUVUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSkKICAgICByZXR1cm4g
Q2xpcGJvYXJkRGF0YVR5cGVPdGhlcjsKIH0KIAorc3RhdGljIFN0cmluZyBub3JtYWxpemVUeXBl
KGNvbnN0IFN0cmluZyYgdHlwZSkNCit7CisgICAgY29uc3QgU3RyaW5nIG5vcm1hbGl6ZWRUeXBl
ID0gdHlwZS5zdHJpcFdoaXRlU3BhY2UoKS5sb3dlcigpOw0KKyAgICBpZiAobm9ybWFsaXplZFR5
cGUgPT0gInRleHQiKQ0KKyAgICAgICAgcmV0dXJuICJ0ZXh0L3BsYWluIjsNCisgICAgaWYgKG5v
cm1hbGl6ZWRUeXBlID09ICJ1cmwiKQ0KKyAgICAgICAgcmV0dXJuICJ0ZXh0L3VyaS1saXN0IjsN
CisgICAgcmV0dXJuIG5vcm1hbGl6ZWRUeXBlOw0KK30KKwogUGFzc1JlZlB0cjxDbGlwYm9hcmQ+
IENsaXBib2FyZDo6Y3JlYXRlKENsaXBib2FyZEFjY2Vzc1BvbGljeSBwb2xpY3ksIERyYWdEYXRh
KiBkcmFnRGF0YSwgRnJhbWUqIGZyYW1lKQogewotICAgIHJldHVybiBDbGlwYm9hcmRDaHJvbWl1
bTo6Y3JlYXRlKHRydWUsIGRyYWdEYXRhLT5wbGF0Zm9ybURhdGEoKSwgcG9saWN5LCBmcmFtZSk7
CisgICAgaWYgKGRyYWdEYXRhLT5wbGF0Zm9ybURhdGEoKS5vbGRXYXkpCisgICAgICAgIHJldHVy
biBDbGlwYm9hcmRDaHJvbWl1bTo6Y3JlYXRlKHRydWUsIGRyYWdEYXRhLT5wbGF0Zm9ybURhdGEo
KS5vbGRXYXksIHBvbGljeSwgZnJhbWUpOworICAgIHJldHVybiBDbGlwYm9hcmRDaHJvbWl1bTo6
Y3JlYXRlKHRydWUsIGRyYWdEYXRhLT5wbGF0Zm9ybURhdGEoKS5uZXdXYXksIHBvbGljeSwgZnJh
bWUpOwogfQogCiBDbGlwYm9hcmRDaHJvbWl1bTo6Q2xpcGJvYXJkQ2hyb21pdW0oYm9vbCBpc0Zv
ckRyYWdnaW5nLApAQCAtMTA2LDEyICsxMjEsMjggQEAgQ2xpcGJvYXJkQ2hyb21pdW06OkNsaXBi
b2FyZENocm9taXVtKGJvb2wgaXNGb3JEcmFnZ2luZywKIHsKIH0KIAorQ2xpcGJvYXJkQ2hyb21p
dW06OkNsaXBib2FyZENocm9taXVtKGJvb2wgaXNGb3JEcmFnZ2luZywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPFJlYWRhYmxlRGF0YU9iamVjdD4gZGF0
YU9iamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGlwYm9hcmRB
Y2Nlc3NQb2xpY3kgcG9saWN5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEZyYW1lKiBmcmFtZSkKKyAgICA6IENsaXBib2FyZChwb2xpY3ksIGlzRm9yRHJhZ2dpbmcpCisg
ICAgLCBtX3JlYWRhYmxlRGF0YU9iamVjdChkYXRhT2JqZWN0KQorICAgICwgbV9mcmFtZShmcmFt
ZSkKK3sKK30KKwogUGFzc1JlZlB0cjxDbGlwYm9hcmRDaHJvbWl1bT4gQ2xpcGJvYXJkQ2hyb21p
dW06OmNyZWF0ZShib29sIGlzRm9yRHJhZ2dpbmcsCiAgICAgUGFzc1JlZlB0cjxDaHJvbWl1bURh
dGFPYmplY3Q+IGRhdGFPYmplY3QsIENsaXBib2FyZEFjY2Vzc1BvbGljeSBwb2xpY3ksIEZyYW1l
KiBmcmFtZSkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENsaXBib2FyZENocm9taXVtKGlz
Rm9yRHJhZ2dpbmcsIGRhdGFPYmplY3QsIHBvbGljeSwgZnJhbWUpKTsKIH0KIAorUGFzc1JlZlB0
cjxDbGlwYm9hcmRDaHJvbWl1bT4gQ2xpcGJvYXJkQ2hyb21pdW06OmNyZWF0ZShib29sIGlzRm9y
RHJhZ2dpbmcsCisgICAgUGFzc1JlZlB0cjxSZWFkYWJsZURhdGFPYmplY3Q+IGRhdGFPYmplY3Qs
IENsaXBib2FyZEFjY2Vzc1BvbGljeSBwb2xpY3ksIEZyYW1lKiBmcmFtZSkKK3sKKyAgICByZXR1
cm4gYWRvcHRSZWYobmV3IENsaXBib2FyZENocm9taXVtKGlzRm9yRHJhZ2dpbmcsIGRhdGFPYmpl
Y3QsIHBvbGljeSwgZnJhbWUpKTsKK30KKwogdm9pZCBDbGlwYm9hcmRDaHJvbWl1bTo6Y2xlYXJE
YXRhKGNvbnN0IFN0cmluZyYgdHlwZSkKIHsKICAgICBpZiAocG9saWN5KCkgIT0gQ2xpcGJvYXJk
V3JpdGFibGUgfHwgIW1fZGF0YU9iamVjdCkKQEAgLTE2Miw3ICsxOTMsMTMgQEAgdm9pZCBDbGlw
Ym9hcmRDaHJvbWl1bTo6Y2xlYXJBbGxEYXRhKCkKIFN0cmluZyBDbGlwYm9hcmRDaHJvbWl1bTo6
Z2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGJvb2wmIHN1Y2Nlc3MpIGNvbnN0CiB7CiAgICAg
c3VjY2VzcyA9IGZhbHNlOwotICAgIGlmIChwb2xpY3koKSAhPSBDbGlwYm9hcmRSZWFkYWJsZSB8
fCAhbV9kYXRhT2JqZWN0KQorICAgIGlmIChwb2xpY3koKSAhPSBDbGlwYm9hcmRSZWFkYWJsZSkK
KyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgaWYgKG1fcmVhZGFibGVEYXRhT2JqZWN0
KQorICAgICAgICByZXR1cm4gbV9yZWFkYWJsZURhdGFPYmplY3QtPmdldERhdGEobm9ybWFsaXpl
VHlwZSh0eXBlKSwgc3VjY2Vzcyk7CisgICAgICAKKyAgICBpZiAoIW1fZGF0YU9iamVjdCkKICAg
ICAgICAgcmV0dXJuIFN0cmluZygpOwogCiAgICAgQ2xpcGJvYXJkRGF0YVR5cGUgZGF0YVR5cGUg
PSBjbGlwYm9hcmRUeXBlRnJvbU1JTUVUeXBlKHR5cGUpOwpAQCAtMzIyLDYgKzM1OSw5IEBAIEhh
c2hTZXQ8U3RyaW5nPiBDbGlwYm9hcmRDaHJvbWl1bTo6dHlwZXMoKSBjb25zdAogICAgIGlmIChw
b2xpY3koKSAhPSBDbGlwYm9hcmRSZWFkYWJsZSAmJiBwb2xpY3koKSAhPSBDbGlwYm9hcmRUeXBl
c1JlYWRhYmxlKQogICAgICAgICByZXR1cm4gcmVzdWx0czsKIAorICAgIGlmIChtX3JlYWRhYmxl
RGF0YU9iamVjdCkKKyAgICAgICAgcmV0dXJuIG1fcmVhZGFibGVEYXRhT2JqZWN0LT50eXBlcygp
OworCiAgICAgaWYgKCFtX2RhdGFPYmplY3QpCiAgICAgICAgIHJldHVybiByZXN1bHRzOwogCkBA
IC0zNjEsNiArNDAxLDE0IEBAIFBhc3NSZWZQdHI8RmlsZUxpc3Q+IENsaXBib2FyZENocm9taXVt
OjpmaWxlcygpIGNvbnN0CiAgICAgaWYgKHBvbGljeSgpICE9IENsaXBib2FyZFJlYWRhYmxlKQog
ICAgICAgICByZXR1cm4gRmlsZUxpc3Q6OmNyZWF0ZSgpOwogCisgICAgaWYgKG1fcmVhZGFibGVE
YXRhT2JqZWN0KSB7CisgICAgICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCk7CisgICAgICAgIFJlZlB0cjxGaWxlTGlzdD4gZmlsZUxpc3QgPSBGaWxlTGlzdDo6Y3JlYXRl
KCk7CisgICAgICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMgPSBtX3JlYWRhYmxl
RGF0YU9iamVjdC0+ZmlsZW5hbWVzKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
ZmlsZW5hbWVzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgZmlsZUxpc3QtPmFwcGVuZChGaWxl
OjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgZmlsZW5hbWVzLmF0KGkpKSk7CisgICAg
fQorCiAgICAgaWYgKCFtX2RhdGFPYmplY3QgfHwgbV9kYXRhT2JqZWN0LT5maWxlbmFtZXMuaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm4gRmlsZUxpc3Q6OmNyZWF0ZSgpOwogCkBAIC01NTYsNiAr
NjA0LDkgQEAgdm9pZCBDbGlwYm9hcmRDaHJvbWl1bTo6d3JpdGVQbGFpblRleHQoY29uc3QgU3Ry
aW5nJiB0ZXh0KQogCiBib29sIENsaXBib2FyZENocm9taXVtOjpoYXNEYXRhKCkKIHsKKyAgICBp
ZiAobV9yZWFkYWJsZURhdGFPYmplY3QpCisgICAgICAgIHJldHVybiBtX3JlYWRhYmxlRGF0YU9i
amVjdC0+aGFzRGF0YSgpOworCiAgICAgaWYgKCFtX2RhdGFPYmplY3QpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9h
cmRDaHJvbWl1bS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1
bS5oCmluZGV4IGE0MTUwZDAuLjg5ZTgwNjkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0v
Y2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9t
aXVtL0NsaXBib2FyZENocm9taXVtLmgKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJDbGlw
Ym9hcmQuaCIKIAogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCisjaW5jbHVkZSAi
RHJhZ0RhdGFSZWYuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00MCw2ICs0MSw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBDaHJvbWl1bURhdGFPYmplY3Q7CiAgICAg
Y2xhc3MgRnJhbWU7CiAgICAgY2xhc3MgSW50UG9pbnQ7CisgICAgY2xhc3MgUmVhZGFibGVEYXRh
T2JqZWN0OwogCiAgICAgY2xhc3MgQ2xpcGJvYXJkQ2hyb21pdW0gOiBwdWJsaWMgQ2xpcGJvYXJk
LCBwdWJsaWMgQ2FjaGVkUmVzb3VyY2VDbGllbnQgewogICAgIHB1YmxpYzoKQEAgLTQ3LDYgKzQ5
LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENs
aXBib2FyZENocm9taXVtPiBjcmVhdGUoCiAgICAgICAgICAgICBib29sIGlzRm9yRHJhZ2dpbmcs
IFBhc3NSZWZQdHI8Q2hyb21pdW1EYXRhT2JqZWN0PiwgQ2xpcGJvYXJkQWNjZXNzUG9saWN5LCBG
cmFtZSopOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDbGlwYm9hcmRDaHJvbWl1bT4gY3Jl
YXRlKAorICAgICAgICAgICAgYm9vbCBpc0ZvckRyYWdnaW5nLCBQYXNzUmVmUHRyPFJlYWRhYmxl
RGF0YU9iamVjdD4sIENsaXBib2FyZEFjY2Vzc1BvbGljeSwgRnJhbWUqKTsKIAogICAgICAgICAv
LyBSZXR1cm5zIHRoZSBmaWxlIG5hbWUgKG5vdCBpbmNsdWRpbmcgdGhlIGV4dGVuc2lvbikuIFRo
aXMgcmVtb3ZlcyBhbnkKICAgICAgICAgLy8gaW52YWxpZCBmaWxlIHN5c3RlbSBjaGFyYWN0ZXJz
IGFzIHdlbGwgYXMgbWFraW5nIHN1cmUgdGhlCkBAIC04MSwxMCArODUsMTIgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiAgICAgcHJpdmF0ZToKICAgICAgICAgQ2xpcGJvYXJkQ2hyb21pdW0oYm9v
bCwgUGFzc1JlZlB0cjxDaHJvbWl1bURhdGFPYmplY3Q+LCBDbGlwYm9hcmRBY2Nlc3NQb2xpY3ks
IEZyYW1lKik7CisgICAgICAgIENsaXBib2FyZENocm9taXVtKGJvb2wsIFBhc3NSZWZQdHI8UmVh
ZGFibGVEYXRhT2JqZWN0PiwgQ2xpcGJvYXJkQWNjZXNzUG9saWN5LCBGcmFtZSopOwogCiAgICAg
ICAgIHZvaWQgcmVzZXRGcm9tQ2xpcGJvYXJkKCk7CiAgICAgICAgIHZvaWQgc2V0RHJhZ0ltYWdl
KENhY2hlZEltYWdlKiwgTm9kZSosIGNvbnN0IEludFBvaW50Jik7CiAgICAgICAgIFJlZlB0cjxD
aHJvbWl1bURhdGFPYmplY3Q+IG1fZGF0YU9iamVjdDsKKyAgICAgICAgUmVmUHRyPFJlYWRhYmxl
RGF0YU9iamVjdD4gbV9yZWFkYWJsZURhdGFPYmplY3Q7CiAgICAgICAgIEZyYW1lKiBtX2ZyYW1l
OwogICAgIH07CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRHJhZ0Rh
dGFDaHJvbWl1bS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RyYWdEYXRhQ2hyb21p
dW0uY3BwCmluZGV4IDY3NGQzNGQuLmMzNzVlN2EgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vRHJhZ0RhdGFDaHJvbWl1bS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9j
aHJvbWl1bS9EcmFnRGF0YUNocm9taXVtLmNwcApAQCAtNDEsNTIgKzQxLDg0IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGJvb2wgY29udGFpbnNIVE1MKGNvbnN0IENocm9taXVt
RGF0YU9iamVjdCogZHJvcERhdGEpCitzdGF0aWMgYm9vbCBjb250YWluc0hUTUwoY29uc3QgRHJh
Z0RhdGFSZWYqIGRyb3BEYXRhKQogewotICAgIHJldHVybiBkcm9wRGF0YS0+dGV4dEh0bWwubGVu
Z3RoKCkgPiAwOworICAgIGlmIChkcm9wRGF0YS0+b2xkV2F5KQorICAgICAgICByZXR1cm4gZHJv
cERhdGEtPm9sZFdheS0+dGV4dEh0bWwubGVuZ3RoKCkgPiAwOworICAgIHJldHVybiBkcm9wRGF0
YS0+bmV3V2F5LT50eXBlcygpLmNvbnRhaW5zKCJ0ZXh0L2h0bWwiKTsKIH0KIAogYm9vbCBEcmFn
RGF0YTo6Y29udGFpbnNVUkwoRmlsZW5hbWVDb252ZXJzaW9uUG9saWN5IGZpbGVuYW1lUG9saWN5
KSBjb25zdAogewotICAgIHJldHVybiAhYXNVUkwoZmlsZW5hbWVQb2xpY3kpLmlzRW1wdHkoKTsK
KyAgICBpZiAobV9wbGF0Zm9ybURyYWdEYXRhLm9sZFdheSkKKyAgICAgICAgcmV0dXJuICFhc1VS
TChmaWxlbmFtZVBvbGljeSkuaXNFbXB0eSgpOworICAgIHJldHVybiBtX3BsYXRmb3JtRHJhZ0Rh
dGEubmV3V2F5LT50eXBlcygpLmNvbnRhaW5zKCJ0ZXh0L3VyaS1saXN0IikKKyAgICAgICAgfHwg
KGZpbGVuYW1lUG9saWN5ID09IENvbnZlcnRGaWxlbmFtZXMgJiYgbV9wbGF0Zm9ybURyYWdEYXRh
Lm5ld1dheS0+aGFzRmlsZW5hbWVzKCkpOwogfQogCiBTdHJpbmcgRHJhZ0RhdGE6OmFzVVJMKEZp
bGVuYW1lQ29udmVyc2lvblBvbGljeSBmaWxlbmFtZVBvbGljeSwgU3RyaW5nKiB0aXRsZSkgY29u
c3QKIHsKLSAgICBTdHJpbmcgdXJsOwotICAgIGlmIChtX3BsYXRmb3JtRHJhZ0RhdGEtPmhhc1Zh
bGlkVVJMKCkpCi0gICAgICAgIHVybCA9IG1fcGxhdGZvcm1EcmFnRGF0YS0+Z2V0VVJMKCkuc3Ry
aW5nKCk7Ci0gICAgZWxzZSBpZiAoZmlsZW5hbWVQb2xpY3kgPT0gQ29udmVydEZpbGVuYW1lcyAm
JiAhbV9wbGF0Zm9ybURyYWdEYXRhLT5maWxlbmFtZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFN0
cmluZyBmaWxlTmFtZSA9IG1fcGxhdGZvcm1EcmFnRGF0YS0+ZmlsZW5hbWVzWzBdOworICAgIGlm
IChtX3BsYXRmb3JtRHJhZ0RhdGEub2xkV2F5KSB7CisgICAgICAgIFN0cmluZyB1cmw7CisgICAg
ICAgIGlmIChtX3BsYXRmb3JtRHJhZ0RhdGEub2xkV2F5LT5oYXNWYWxpZFVSTCgpKQorICAgICAg
ICAgICAgdXJsID0gbV9wbGF0Zm9ybURyYWdEYXRhLm9sZFdheS0+Z2V0VVJMKCkuc3RyaW5nKCk7
CisgICAgICAgIGVsc2UgaWYgKGZpbGVuYW1lUG9saWN5ID09IENvbnZlcnRGaWxlbmFtZXMgJiYg
IW1fcGxhdGZvcm1EcmFnRGF0YS5vbGRXYXktPmZpbGVuYW1lcy5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgICAgIFN0cmluZyBmaWxlTmFtZSA9IG1fcGxhdGZvcm1EcmFnRGF0YS5vbGRXYXktPmZpbGVu
YW1lc1swXTsKKyAgICAgICAgICAgIGZpbGVOYW1lID0gQ2hyb21pdW1CcmlkZ2U6OmdldEFic29s
dXRlUGF0aChmaWxlTmFtZSk7CisgICAgICAgICAgICB1cmwgPSBDaHJvbWl1bUJyaWRnZTo6Zmls
ZVBhdGhUb1VSTChmaWxlTmFtZSkuc3RyaW5nKCk7CisgICAgICAgIH0KKyAgICAgCisgICAgICAg
IC8vIHx0aXRsZXwgY2FuIGJlIE5VTEwKKyAgICAgICAgaWYgKHRpdGxlKQorICAgICAgICAgICAg
KnRpdGxlID0gbV9wbGF0Zm9ybURyYWdEYXRhLm9sZFdheS0+dXJsVGl0bGU7CisgICAgICAgIHJl
dHVybiB1cmw7CisgICAgfQorCisgICAgU3RyaW5nIHVybCA9IG1fcGxhdGZvcm1EcmFnRGF0YS5u
ZXdXYXktPmdldFVSTCh0aXRsZSk7CisgICAgaWYgKCFLVVJMKEtVUkwoKSwgdXJsKS5pc1ZhbGlk
KCkKKyAgICAgICAgJiYgZmlsZW5hbWVQb2xpY3kgPT0gQ29udmVydEZpbGVuYW1lcworICAgICAg
ICAmJiBtX3BsYXRmb3JtRHJhZ0RhdGEubmV3V2F5LT5oYXNGaWxlbmFtZXMoKSkgeworICAgICAg
ICBTdHJpbmcgZmlsZU5hbWUgPSBtX3BsYXRmb3JtRHJhZ0RhdGEubmV3V2F5LT5maWxlbmFtZXMo
KVswXTsKICAgICAgICAgZmlsZU5hbWUgPSBDaHJvbWl1bUJyaWRnZTo6Z2V0QWJzb2x1dGVQYXRo
KGZpbGVOYW1lKTsKICAgICAgICAgdXJsID0gQ2hyb21pdW1CcmlkZ2U6OmZpbGVQYXRoVG9VUkwo
ZmlsZU5hbWUpLnN0cmluZygpOworICAgICAgICBpZiAodGl0bGUpCisgICAgICAgICAgICAqdGl0
bGUgPSAiIjsKICAgICB9Ci0gCi0gICAgLy8gfHRpdGxlfCBjYW4gYmUgTlVMTAotICAgIGlmICh0
aXRsZSkKLSAgICAgICAgKnRpdGxlID0gbV9wbGF0Zm9ybURyYWdEYXRhLT51cmxUaXRsZTsKICAg
ICByZXR1cm4gdXJsOwogfQogCiBib29sIERyYWdEYXRhOjpjb250YWluc0ZpbGVzKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gIW1fcGxhdGZvcm1EcmFnRGF0YS0+ZmlsZW5hbWVzLmlzRW1wdHkoKTsK
KyAgICBpZiAobV9wbGF0Zm9ybURyYWdEYXRhLm9sZFdheSkKKyAgICAgICAgcmV0dXJuICFtX3Bs
YXRmb3JtRHJhZ0RhdGEub2xkV2F5LT5maWxlbmFtZXMuaXNFbXB0eSgpOworICAgIHJldHVybiBt
X3BsYXRmb3JtRHJhZ0RhdGEubmV3V2F5LT5oYXNGaWxlbmFtZXMoKTsKIH0KIAogdm9pZCBEcmFn
RGF0YTo6YXNGaWxlbmFtZXMoVmVjdG9yPFN0cmluZz4mIHJlc3VsdCkgY29uc3QKIHsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcGxhdGZvcm1EcmFnRGF0YS0+ZmlsZW5hbWVzLnNpemUo
KTsgKytpKQotICAgICAgICByZXN1bHQuYXBwZW5kKG1fcGxhdGZvcm1EcmFnRGF0YS0+ZmlsZW5h
bWVzW2ldKTsKKyAgICBpZiAobV9wbGF0Zm9ybURyYWdEYXRhLm9sZFdheSkgeworICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcGxhdGZvcm1EcmFnRGF0YS5vbGRXYXktPmZpbGVuYW1l
cy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobV9wbGF0Zm9ybURyYWdE
YXRhLm9sZFdheS0+ZmlsZW5hbWVzW2ldKTsKKyAgICB9IGVsc2UgeworICAgICAgICBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVzID0gbV9wbGF0Zm9ybURyYWdEYXRhLm5ld1dheS0+Zmls
ZW5hbWVzKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmlsZW5hbWVzLnNpemUo
KTsgKytpKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChmaWxlbmFtZXNbaV0pOworICAgIH0K
IH0KIAogYm9vbCBEcmFnRGF0YTo6Y29udGFpbnNQbGFpblRleHQoKSBjb25zdAogewotICAgIHJl
dHVybiAhbV9wbGF0Zm9ybURyYWdEYXRhLT5wbGFpblRleHQuaXNFbXB0eSgpOworICAgIGlmICht
X3BsYXRmb3JtRHJhZ0RhdGEub2xkV2F5KQorICAgICAgICByZXR1cm4gIW1fcGxhdGZvcm1EcmFn
RGF0YS5vbGRXYXktPnBsYWluVGV4dC5pc0VtcHR5KCk7CisgICAgcmV0dXJuIG1fcGxhdGZvcm1E
cmFnRGF0YS5uZXdXYXktPnR5cGVzKCkuY29udGFpbnMoInRleHQvcGxhaW4iKTsKIH0KIAogU3Ry
aW5nIERyYWdEYXRhOjphc1BsYWluVGV4dCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fcGxhdGZv
cm1EcmFnRGF0YS0+cGxhaW5UZXh0OworICAgIGlmIChtX3BsYXRmb3JtRHJhZ0RhdGEub2xkV2F5
KQorICAgICAgICByZXR1cm4gbV9wbGF0Zm9ybURyYWdEYXRhLm9sZFdheS0+cGxhaW5UZXh0Owor
ICAgIGJvb2wgaWdub3JlZFN1Y2Nlc3M7CisgICAgcmV0dXJuIG1fcGxhdGZvcm1EcmFnRGF0YS5u
ZXdXYXktPmdldERhdGEoInRleHQvcGxhaW4iLCBpZ25vcmVkU3VjY2Vzcyk7CiB9CiAKIGJvb2wg
RHJhZ0RhdGE6OmNvbnRhaW5zQ29sb3IoKSBjb25zdApAQCAtMTAxLDE1ICsxMzMsMTkgQEAgYm9v
bCBEcmFnRGF0YTo6Y2FuU21hcnRSZXBsYWNlKCkgY29uc3QKICAgICAvLyBUaGlzIGlzIGFsbG93
ZWQgd2hlbmV2ZXIgdGhlIGRyYWcgZGF0YSBjb250YWlucyBhICdyYW5nZScgKGllLiwKICAgICAv
LyBDbGlwYm9hcmRXaW46OndyaXRlUmFuZ2UgaXMgY2FsbGVkKS4gIEZvciBleGFtcGxlLCBkcmFn
Z2luZyBhIGxpbmsKICAgICAvLyBzaG91bGQgbm90IHJlc3VsdCBpbiBhIHNwYWNlIGJlaW5nIGFk
ZGVkLgotICAgIHJldHVybiAhbV9wbGF0Zm9ybURyYWdEYXRhLT5wbGFpblRleHQuaXNFbXB0eSgp
Ci0gICAgICAgICYmICFtX3BsYXRmb3JtRHJhZ0RhdGEtPmhhc1ZhbGlkVVJMKCk7CisgICAgaWYg
KG1fcGxhdGZvcm1EcmFnRGF0YS5vbGRXYXkpCisgICAgICAgIHJldHVybiAhbV9wbGF0Zm9ybURy
YWdEYXRhLm9sZFdheS0+cGxhaW5UZXh0LmlzRW1wdHkoKQorICAgICAgICAgICAgJiYgIW1fcGxh
dGZvcm1EcmFnRGF0YS5vbGRXYXktPmhhc1ZhbGlkVVJMKCk7CisgICAgcmV0dXJuIG1fcGxhdGZv
cm1EcmFnRGF0YS5uZXdXYXktPnR5cGVzKCkuY29udGFpbnMoInRleHQvcGxhaW4iKQorICAgICAg
ICAvLyBGSVhNRTogRG8gd2UgbmVlZCB0byBjaGVjayBVUkwgdmFsaWRpdHk/CisgICAgICAgICYm
ICFtX3BsYXRmb3JtRHJhZ0RhdGEubmV3V2F5LT50eXBlcygpLmNvbnRhaW5zKCJ0ZXh0L3VyaS1s
aXN0Iik7CiB9CiAKIGJvb2wgRHJhZ0RhdGE6OmNvbnRhaW5zQ29tcGF0aWJsZUNvbnRlbnQoKSBj
b25zdAogewogICAgIHJldHVybiBjb250YWluc1BsYWluVGV4dCgpCiAgICAgICAgIHx8IGNvbnRh
aW5zVVJMKCkKLSAgICAgICAgfHwgY29udGFpbnNIVE1MKG1fcGxhdGZvcm1EcmFnRGF0YSkKKyAg
ICAgICAgfHwgY29udGFpbnNIVE1MKCZtX3BsYXRmb3JtRHJhZ0RhdGEpCiAgICAgICAgIHx8IGNv
bnRhaW5zQ29sb3IoKQogICAgICAgICB8fCBjb250YWluc0ZpbGVzKCk7CiB9CkBAIC0xMzQsMTAg
KzE3MCwyMCBAQCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IERyYWdEYXRhOjphc0ZyYWdt
ZW50KERvY3VtZW50KiBkb2MpIGNvbnN0CiAgICAgICAgIC8vICAgIHJldHVybiBmcmFnbWVudDsK
ICAgICB9CiAKLSAgICBpZiAoIW1fcGxhdGZvcm1EcmFnRGF0YS0+dGV4dEh0bWwuaXNFbXB0eSgp
KSB7Ci0gICAgICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGNyZWF0ZUZy
YWdtZW50RnJvbU1hcmt1cChkb2MsCi0gICAgICAgICAgICBtX3BsYXRmb3JtRHJhZ0RhdGEtPnRl
eHRIdG1sLCBtX3BsYXRmb3JtRHJhZ0RhdGEtPmh0bWxCYXNlVXJsLCBGcmFnbWVudFNjcmlwdGlu
Z05vdEFsbG93ZWQpOwotICAgICAgICByZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgpOworICAgIGlm
IChtX3BsYXRmb3JtRHJhZ0RhdGEub2xkV2F5KSB7CisgICAgICAgIGlmICghbV9wbGF0Zm9ybURy
YWdEYXRhLm9sZFdheS0+dGV4dEh0bWwuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBSZWZQdHI8
RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoZG9j
LAorICAgICAgICAgICAgICAgIG1fcGxhdGZvcm1EcmFnRGF0YS5vbGRXYXktPnRleHRIdG1sLCBt
X3BsYXRmb3JtRHJhZ0RhdGEub2xkV2F5LT5odG1sQmFzZVVybCwgRnJhZ21lbnRTY3JpcHRpbmdO
b3RBbGxvd2VkKTsKKyAgICAgICAgICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNlKCk7CisgICAg
ICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoY29udGFpbnNIVE1MKCZtX3BsYXRmb3Jt
RHJhZ0RhdGEpKSB7CisgICAgICAgICAgICBTdHJpbmcgYmFzZVVSTDsKKyAgICAgICAgICAgIFN0
cmluZyBodG1sID0gbV9wbGF0Zm9ybURyYWdEYXRhLm5ld1dheS0+Z2V0SFRNTCgmYmFzZVVSTCk7
CisgICAgICAgICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBjcmVhdGVG
cmFnbWVudEZyb21NYXJrdXAoZG9jLAorICAgICAgICAgICAgICAgIGh0bWwsIGJhc2VVUkwsIEZy
YWdtZW50U2NyaXB0aW5nTm90QWxsb3dlZCk7CisgICAgICAgICAgICByZXR1cm4gZnJhZ21lbnQu
cmVsZWFzZSgpOworICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RyYWdEYXRhUmVmLmggYi9XZWJDb3JlL3BsYXRm
b3JtL2Nocm9taXVtL0RyYWdEYXRhUmVmLmgKaW5kZXggZGUxZmExYy4uMDEwNWRjZiAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EcmFnRGF0YVJlZi5oCisrKyBiL1dlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vRHJhZ0RhdGFSZWYuaApAQCAtMzIsMTAgKzMyLDE4IEBACiAj
ZGVmaW5lIERyYWdEYXRhUmVmX2gKIAogI2luY2x1ZGUgIkNocm9taXVtRGF0YU9iamVjdC5oIgor
I2luY2x1ZGUgIlJlYWRhYmxlRGF0YU9iamVjdC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LSAgICB0eXBlZGVmIENocm9taXVtRGF0YU9iamVjdCogRHJhZ0RhdGFSZWY7CitzdHJ1Y3QgRHJh
Z0RhdGFSZWYgeworICAgIC8vIEZJWE1FOiBUaGVzZSBhcmUgZGVsaWJlcmF0ZWx5IG5vbi1leHBs
aWNpdCBmb3IgdGhlIG1vbWVudC4gT25jZSBDaHJvbWl1bQorICAgIC8vIGlzIHN3aXRjaGVkIG92
ZXIgdG8gdGhlIG5ldyB3YXkgb2YgaGFuZGxpbmcgZHJhZ3MsIHJldmVydCB0aGlzIGNoYW5nZS4K
KyAgICBEcmFnRGF0YVJlZihDaHJvbWl1bURhdGFPYmplY3QqIGRhdGEpIDogb2xkV2F5KGRhdGEp
LCBuZXdXYXkoMCkge30KKyAgICBEcmFnRGF0YVJlZihSZWFkYWJsZURhdGFPYmplY3QqIGRhdGEp
IDogb2xkV2F5KDApLCBuZXdXYXkoZGF0YSkge30KKyAgICBDaHJvbWl1bURhdGFPYmplY3QqIG9s
ZFdheTsKKyAgICBSZWFkYWJsZURhdGFPYmplY3QqIG5ld1dheTsKK307CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggOTBkOTQ2MC4uMDM0NmM4OSAxMDA2NDQKLS0t
IGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTAtMDgtMzEgIERhbmllbCBDaGVuZyAgPGRjaGVuZ0Bj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgW2Nocm9taXVtXSBQcmVwYXJlIENsaXBib2FyZC9EcmFnRGF0YSBmb3IgdHJhbnNpdGlv
biB0byBuZXcgZHJhZy1hbmQtZHJvcCBpbnRlcmZhY2UuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDk5MgorCisgICAgICAgIEluIG9yZGVyIHRvIGF2
b2lkIGJyZWFraW5nIENocm9taXVtLCB3ZSBoYXZlIHRoZSByZW5kZXJlciBzaWRlIGltcGxlbWVu
dAorICAgICAgICBib3RoIHRoZSBvbGQgYW5kIG5ldyBkcmFnZ2luZyBpbnRlcmZhY2UgYW5kIGdh
dGUgdGhlIGJlaGF2aW9yIGJhc2VkIG9mZgorICAgICAgICBvZiB3aGljaCBEYXRhT2JqZWN0IHBv
aW50ZXIgaXMgc2V0LiBUaGlzIGNoYW5nZSBvbmx5IGFmZmVjdHMgZHJhZ2dpbmcKKyAgICAgICAg
aW50by9vdmVyIHRoZSByZW5kZXJlcjsgaXQgZG9lcyBub3QgYWZmZWN0IHN0YXJ0aW5nIGEgZHJh
ZyBvciBjb3B5IGFuZAorICAgICAgICBwYXN0ZS4gT25jZSB0aGUgYXBwcm9wcmlhdGUgQ2hyb21p
dW0gY2hhbmdlcyBsYW5kLCB0aGUgdGVtcG9yYXJ5CisgICAgICAgIGNvbmRpdGlvbmFsIGJyYW5j
aGVzIHdpbGwgYmUgcmVtb3ZlZC4KKworICAgICAgICAqIHB1YmxpYy9XZWJWaWV3Lmg6CisgICAg
ICAgICogc3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6
OmRyYWdUYXJnZXREcmFnRW50ZXJOZXcpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6
ZHJhZ1RhcmdldERyYWdMZWF2ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpkcmFn
VGFyZ2V0RHJvcCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpkcmFnVGFyZ2V0RHJh
Z0VudGVyT3JPdmVyKToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuaDoKKwogMjAxMC0wOC0z
MCAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAg
VW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjY2MTk4LgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJWaWV3LmggYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZpZXcuaApp
bmRleCAxYjk0ZGEyLi44NzAwZDAzIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYlZpZXcuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZpZXcuaApAQCAtMTk4
LDYgKzE5OCw5IEBAIHB1YmxpYzoKICAgICAgICAgY29uc3QgV2ViRHJhZ0RhdGEmLCBpbnQgaWRl
bnRpdHksCiAgICAgICAgIGNvbnN0IFdlYlBvaW50JiBjbGllbnRQb2ludCwgY29uc3QgV2ViUG9p
bnQmIHNjcmVlblBvaW50LAogICAgICAgICBXZWJEcmFnT3BlcmF0aW9uc01hc2sgb3BlcmF0aW9u
c0FsbG93ZWQpID0gMDsKKyAgICB2aXJ0dWFsIFdlYkRyYWdPcGVyYXRpb24gZHJhZ1RhcmdldERy
YWdFbnRlck5ldygKKyAgICAgICAgaW50IGlkZW50aXR5LCBjb25zdCBXZWJQb2ludCYgY2xpZW50
UG9pbnQsIGNvbnN0IFdlYlBvaW50JiBzY3JlZW5Qb2ludCwKKyAgICAgICAgV2ViRHJhZ09wZXJh
dGlvbnNNYXNrIG9wZXJhdGlvbnNBbGxvd2VkKSA9IDA7CiAgICAgdmlydHVhbCBXZWJEcmFnT3Bl
cmF0aW9uIGRyYWdUYXJnZXREcmFnT3ZlcigKICAgICAgICAgY29uc3QgV2ViUG9pbnQmIGNsaWVu
dFBvaW50LCBjb25zdCBXZWJQb2ludCYgc2NyZWVuUG9pbnQsCiAgICAgICAgIFdlYkRyYWdPcGVy
YXRpb25zTWFzayBvcGVyYXRpb25zQWxsb3dlZCkgPSAwOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJ
bXBsLmNwcAppbmRleCA1MDY1ZjVlLi45NWRhY2EwIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlZpZXdJbXBsLmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJ
bXBsLmNwcApAQCAtODEsNiArODEsNyBAQAogI2luY2x1ZGUgIlBvcHVwTWVudUNocm9taXVtLmgi
CiAjaW5jbHVkZSAiUG9wdXBNZW51Q2xpZW50LmgiCiAjaW5jbHVkZSAiUHJvZ3Jlc3NUcmFja2Vy
LmgiCisjaW5jbHVkZSAiUmVhZGFibGVEYXRhT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyVmll
dy5oIgogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmln
aW4uaCIKQEAgLTE1ODMsNiArMTU4NCwyMSBAQCBXZWJEcmFnT3BlcmF0aW9uIFdlYlZpZXdJbXBs
OjpkcmFnVGFyZ2V0RHJhZ0VudGVyKAogICAgIHJldHVybiBkcmFnVGFyZ2V0RHJhZ0VudGVyT3JP
dmVyKGNsaWVudFBvaW50LCBzY3JlZW5Qb2ludCwgRHJhZ0VudGVyKTsKIH0KIAorV2ViRHJhZ09w
ZXJhdGlvbiBXZWJWaWV3SW1wbDo6ZHJhZ1RhcmdldERyYWdFbnRlck5ldygKKyAgICBpbnQgaWRl
bnRpdHksCisgICAgY29uc3QgV2ViUG9pbnQmIGNsaWVudFBvaW50LAorICAgIGNvbnN0IFdlYlBv
aW50JiBzY3JlZW5Qb2ludCwKKyAgICBXZWJEcmFnT3BlcmF0aW9uc01hc2sgb3BlcmF0aW9uc0Fs
bG93ZWQpCit7CisgICAgQVNTRVJUKCFtX2N1cnJlbnREcmFnRGF0YU5ldy5nZXQoKSk7CisKKyAg
ICBtX2N1cnJlbnREcmFnRGF0YU5ldyA9IFJlYWRhYmxlRGF0YU9iamVjdDo6Y3JlYXRlKHRydWUp
OworICAgIG1fZHJhZ0lkZW50aXR5ID0gaWRlbnRpdHk7CisgICAgbV9vcGVyYXRpb25zQWxsb3dl
ZCA9IG9wZXJhdGlvbnNBbGxvd2VkOworCisgICAgcmV0dXJuIGRyYWdUYXJnZXREcmFnRW50ZXJP
ck92ZXIoY2xpZW50UG9pbnQsIHNjcmVlblBvaW50LCBEcmFnRW50ZXIpOworfQorCiBXZWJEcmFn
T3BlcmF0aW9uIFdlYlZpZXdJbXBsOjpkcmFnVGFyZ2V0RHJhZ092ZXIoCiAgICAgY29uc3QgV2Vi
UG9pbnQmIGNsaWVudFBvaW50LAogICAgIGNvbnN0IFdlYlBvaW50JiBzY3JlZW5Qb2ludCwKQEAg
LTE1OTUsMTkgKzE2MTEsMzQgQEAgV2ViRHJhZ09wZXJhdGlvbiBXZWJWaWV3SW1wbDo6ZHJhZ1Rh
cmdldERyYWdPdmVyKAogCiB2b2lkIFdlYlZpZXdJbXBsOjpkcmFnVGFyZ2V0RHJhZ0xlYXZlKCkK
IHsKLSAgICBBU1NFUlQobV9jdXJyZW50RHJhZ0RhdGEuZ2V0KCkpOwotCi0gICAgRHJhZ0RhdGEg
ZHJhZ0RhdGEoCi0gICAgICAgIG1fY3VycmVudERyYWdEYXRhLmdldCgpLAotICAgICAgICBJbnRQ
b2ludCgpLAotICAgICAgICBJbnRQb2ludCgpLAotICAgICAgICBzdGF0aWNfY2FzdDxEcmFnT3Bl
cmF0aW9uPihtX29wZXJhdGlvbnNBbGxvd2VkKSk7Ci0KLSAgICBtX2RyYWdUYXJnZXREaXNwYXRj
aCA9IHRydWU7Ci0gICAgbV9wYWdlLT5kcmFnQ29udHJvbGxlcigpLT5kcmFnRXhpdGVkKCZkcmFn
RGF0YSk7Ci0gICAgbV9kcmFnVGFyZ2V0RGlzcGF0Y2ggPSBmYWxzZTsKKyAgICAvLyBGSVhNRTog
VGhpcyBpcyB0ZW1wb3Jhcnkgd2hpbGUgdW50aWwgQ2hyb21pdW0gc2lkZSBpcyB0cmFuc2l0aW9u
ZWQgdG8gdXNlCisgICAgLy8gdGhlIG5ldyBkcmFnZ2luZyBpbnRlcmZhY2UuCisgICAgaWYgKG1f
Y3VycmVudERyYWdEYXRhLmdldCgpKSB7CisgICAgICAgIERyYWdEYXRhIGRyYWdEYXRhKAorICAg
ICAgICAgICAgbV9jdXJyZW50RHJhZ0RhdGEuZ2V0KCksCisgICAgICAgICAgICBJbnRQb2ludCgp
LAorICAgICAgICAgICAgSW50UG9pbnQoKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PERyYWdP
cGVyYXRpb24+KG1fb3BlcmF0aW9uc0FsbG93ZWQpKTsKKworICAgICAgICBtX2RyYWdUYXJnZXRE
aXNwYXRjaCA9IHRydWU7CisgICAgICAgIG1fcGFnZS0+ZHJhZ0NvbnRyb2xsZXIoKS0+ZHJhZ0V4
aXRlZCgmZHJhZ0RhdGEpOworICAgICAgICBtX2RyYWdUYXJnZXREaXNwYXRjaCA9IGZhbHNlOwor
ICAgIH0gZWxzZSBpZiAobV9jdXJyZW50RHJhZ0RhdGFOZXcuZ2V0KCkpIHsKKyAgICAgICAgRHJh
Z0RhdGEgZHJhZ0RhdGEoCisgICAgICAgICAgICBtX2N1cnJlbnREcmFnRGF0YU5ldy5nZXQoKSwK
KyAgICAgICAgICAgIEludFBvaW50KCksCisgICAgICAgICAgICBJbnRQb2ludCgpLAorICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8RHJhZ09wZXJhdGlvbj4obV9vcGVyYXRpb25zQWxsb3dlZCkpOwor
CisgICAgICAgIG1fZHJhZ1RhcmdldERpc3BhdGNoID0gdHJ1ZTsKKyAgICAgICAgbV9wYWdlLT5k
cmFnQ29udHJvbGxlcigpLT5kcmFnRXhpdGVkKCZkcmFnRGF0YSk7CisgICAgICAgIG1fZHJhZ1Rh
cmdldERpc3BhdGNoID0gZmFsc2U7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKGZhbHNl
KTsKKyAgICB9CiAKICAgICBtX2N1cnJlbnREcmFnRGF0YSA9IDA7CisgICAgbV9jdXJyZW50RHJh
Z0RhdGFOZXcgPSAwOwogICAgIG1fZHJvcEVmZmVjdCA9IERyb3BFZmZlY3REZWZhdWx0OwogICAg
IG1fZHJhZ09wZXJhdGlvbiA9IFdlYkRyYWdPcGVyYXRpb25Ob25lOwogICAgIG1fZHJhZ0lkZW50
aXR5ID0gMDsKQEAgLTE2MTYsOCArMTY0Nyw2IEBAIHZvaWQgV2ViVmlld0ltcGw6OmRyYWdUYXJn
ZXREcmFnTGVhdmUoKQogdm9pZCBXZWJWaWV3SW1wbDo6ZHJhZ1RhcmdldERyb3AoY29uc3QgV2Vi
UG9pbnQmIGNsaWVudFBvaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgV2ViUG9pbnQmIHNjcmVlblBvaW50KQogewotICAgIEFTU0VSVChtX2N1cnJlbnREcmFnRGF0
YS5nZXQoKSk7Ci0KICAgICAvLyBJZiB0aGlzIHdlYnZpZXcgdHJhbnNpdGlvbnMgZnJvbSB0aGUg
ImRyb3AgYWNjZXB0aW5nIiBzdGF0ZSB0byB0aGUgIm5vdAogICAgIC8vIGFjY2VwdGluZyIgc3Rh
dGUsIHRoZW4gb3VyIElQQyBtZXNzYWdlIHJlcGx5IGluZGljYXRpbmcgdGhhdCBtYXkgYmUgaW4t
CiAgICAgLy8gZmxpZ2h0LCBvciBlbHNlIGRlbGF5ZWQgYnkgamF2YXNjcmlwdCBwcm9jZXNzaW5n
IGluIHRoaXMgd2Vidmlldy4gIElmIGEKQEAgLTE2MzAsMTcgKzE2NTksMzQgQEAgdm9pZCBXZWJW
aWV3SW1wbDo6ZHJhZ1RhcmdldERyb3AoY29uc3QgV2ViUG9pbnQmIGNsaWVudFBvaW50LAogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgRHJhZ0RhdGEgZHJhZ0RhdGEoCi0gICAgICAgIG1f
Y3VycmVudERyYWdEYXRhLmdldCgpLAotICAgICAgICBjbGllbnRQb2ludCwKLSAgICAgICAgc2Ny
ZWVuUG9pbnQsCi0gICAgICAgIHN0YXRpY19jYXN0PERyYWdPcGVyYXRpb24+KG1fb3BlcmF0aW9u
c0FsbG93ZWQpKTsKLQotICAgIG1fZHJhZ1RhcmdldERpc3BhdGNoID0gdHJ1ZTsKLSAgICBtX3Bh
Z2UtPmRyYWdDb250cm9sbGVyKCktPnBlcmZvcm1EcmFnKCZkcmFnRGF0YSk7Ci0gICAgbV9kcmFn
VGFyZ2V0RGlzcGF0Y2ggPSBmYWxzZTsKKyAgICAvLyBGSVhNRTogVGhpcyBpcyB0ZW1wb3Jhcnkg
d2hpbGUgdW50aWwgQ2hyb21pdW0gc2lkZSBpcyB0cmFuc2l0aW9uZWQgdG8gdXNlCisgICAgLy8g
dGhlIG5ldyBkcmFnZ2luZyBpbnRlcmZhY2UuCisgICAgaWYgKG1fY3VycmVudERyYWdEYXRhLmdl
dCgpKSB7CisgICAgICAgIERyYWdEYXRhIGRyYWdEYXRhKAorICAgICAgICAgICAgbV9jdXJyZW50
RHJhZ0RhdGEuZ2V0KCksCisgICAgICAgICAgICBjbGllbnRQb2ludCwKKyAgICAgICAgICAgIHNj
cmVlblBvaW50LAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8RHJhZ09wZXJhdGlvbj4obV9vcGVy
YXRpb25zQWxsb3dlZCkpOworCisgICAgICAgIG1fZHJhZ1RhcmdldERpc3BhdGNoID0gdHJ1ZTsK
KyAgICAgICAgbV9wYWdlLT5kcmFnQ29udHJvbGxlcigpLT5wZXJmb3JtRHJhZygmZHJhZ0RhdGEp
OworICAgICAgICBtX2RyYWdUYXJnZXREaXNwYXRjaCA9IGZhbHNlOworICAgIH0gZWxzZSBpZiAo
bV9jdXJyZW50RHJhZ0RhdGFOZXcuZ2V0KCkpIHsKKyAgICAgICAgRHJhZ0RhdGEgZHJhZ0RhdGEo
CisgICAgICAgICAgICBtX2N1cnJlbnREcmFnRGF0YU5ldy5nZXQoKSwKKyAgICAgICAgICAgIGNs
aWVudFBvaW50LAorICAgICAgICAgICAgc2NyZWVuUG9pbnQsCisgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxEcmFnT3BlcmF0aW9uPihtX29wZXJhdGlvbnNBbGxvd2VkKSk7CisKKyAgICAgICAgbV9k
cmFnVGFyZ2V0RGlzcGF0Y2ggPSB0cnVlOworICAgICAgICBtX3BhZ2UtPmRyYWdDb250cm9sbGVy
KCktPnBlcmZvcm1EcmFnKCZkcmFnRGF0YSk7CisgICAgICAgIG1fZHJhZ1RhcmdldERpc3BhdGNo
ID0gZmFsc2U7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKGZhbHNlKTsKKyAgICB9CiAK
ICAgICBtX2N1cnJlbnREcmFnRGF0YSA9IDA7CisgICAgbV9jdXJyZW50RHJhZ0RhdGFOZXcgPSAw
OwogICAgIG1fZHJvcEVmZmVjdCA9IERyb3BFZmZlY3REZWZhdWx0OwogICAgIG1fZHJhZ09wZXJh
dGlvbiA9IFdlYkRyYWdPcGVyYXRpb25Ob25lOwogICAgIG1fZHJhZ0lkZW50aXR5ID0gMDsKQEAg
LTE2NTYsMjggKzE3MDIsNTMgQEAgaW50IFdlYlZpZXdJbXBsOjpkcmFnSWRlbnRpdHkoKQogCiBX
ZWJEcmFnT3BlcmF0aW9uIFdlYlZpZXdJbXBsOjpkcmFnVGFyZ2V0RHJhZ0VudGVyT3JPdmVyKGNv
bnN0IFdlYlBvaW50JiBjbGllbnRQb2ludCwgY29uc3QgV2ViUG9pbnQmIHNjcmVlblBvaW50LCBE
cmFnQWN0aW9uIGRyYWdBY3Rpb24pCiB7Ci0gICAgQVNTRVJUKG1fY3VycmVudERyYWdEYXRhLmdl
dCgpKTsKLQotICAgIERyYWdEYXRhIGRyYWdEYXRhKAotICAgICAgICBtX2N1cnJlbnREcmFnRGF0
YS5nZXQoKSwKLSAgICAgICAgY2xpZW50UG9pbnQsCi0gICAgICAgIHNjcmVlblBvaW50LAotICAg
ICAgICBzdGF0aWNfY2FzdDxEcmFnT3BlcmF0aW9uPihtX29wZXJhdGlvbnNBbGxvd2VkKSk7Ci0K
LSAgICBtX2Ryb3BFZmZlY3QgPSBEcm9wRWZmZWN0RGVmYXVsdDsKLSAgICBtX2RyYWdUYXJnZXRE
aXNwYXRjaCA9IHRydWU7Ci0gICAgRHJhZ09wZXJhdGlvbiBlZmZlY3QgPSBkcmFnQWN0aW9uID09
IERyYWdFbnRlciA/IG1fcGFnZS0+ZHJhZ0NvbnRyb2xsZXIoKS0+ZHJhZ0VudGVyZWQoJmRyYWdE
YXRhKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OiBtX3BhZ2UtPmRyYWdDb250cm9sbGVyKCktPmRyYWdVcGRhdGVkKCZkcmFnRGF0YSk7Ci0gICAg
Ly8gTWFzayB0aGUgb3BlcmF0aW9uIGFnYWluc3QgdGhlIGRyYWcgc291cmNlJ3MgYWxsb3dlZCBv
cGVyYXRpb25zLgotICAgIGlmICghKGVmZmVjdCAmIGRyYWdEYXRhLmRyYWdnaW5nU291cmNlT3Bl
cmF0aW9uTWFzaygpKSkKLSAgICAgICAgZWZmZWN0ID0gRHJhZ09wZXJhdGlvbk5vbmU7Ci0gICAg
bV9kcmFnVGFyZ2V0RGlzcGF0Y2ggPSBmYWxzZTsKLQotICAgIGlmIChtX2Ryb3BFZmZlY3QgIT0g
RHJvcEVmZmVjdERlZmF1bHQpIHsKLSAgICAgICAgbV9kcmFnT3BlcmF0aW9uID0gKG1fZHJvcEVm
ZmVjdCAhPSBEcm9wRWZmZWN0Tm9uZSkgPyBXZWJEcmFnT3BlcmF0aW9uQ29weQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFdlYkRy
YWdPcGVyYXRpb25Ob25lOwotICAgIH0gZWxzZQotICAgICAgICBtX2RyYWdPcGVyYXRpb24gPSBz
dGF0aWNfY2FzdDxXZWJEcmFnT3BlcmF0aW9uPihlZmZlY3QpOworICAgIC8vIEZJWE1FOiBUaGlz
IGlzIHRlbXBvcmFyeSB3aGlsZSB1bnRpbCBDaHJvbWl1bSBzaWRlIGlzIHRyYW5zaXRpb25lZCB0
byB1c2UKKyAgICAvLyB0aGUgbmV3IGRyYWdnaW5nIGludGVyZmFjZS4KKyAgICBpZiAobV9jdXJy
ZW50RHJhZ0RhdGEuZ2V0KCkpIHsKKyAgICAgICAgRHJhZ0RhdGEgZHJhZ0RhdGEoCisgICAgICAg
ICAgICBtX2N1cnJlbnREcmFnRGF0YS5nZXQoKSwKKyAgICAgICAgICAgIGNsaWVudFBvaW50LAor
ICAgICAgICAgICAgc2NyZWVuUG9pbnQsCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxEcmFnT3Bl
cmF0aW9uPihtX29wZXJhdGlvbnNBbGxvd2VkKSk7CisKKyAgICAgICAgbV9kcm9wRWZmZWN0ID0g
RHJvcEVmZmVjdERlZmF1bHQ7CisgICAgICAgIG1fZHJhZ1RhcmdldERpc3BhdGNoID0gdHJ1ZTsK
KyAgICAgICAgRHJhZ09wZXJhdGlvbiBlZmZlY3QgPSBkcmFnQWN0aW9uID09IERyYWdFbnRlciA/
IG1fcGFnZS0+ZHJhZ0NvbnRyb2xsZXIoKS0+ZHJhZ0VudGVyZWQoJmRyYWdEYXRhKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbV9wYWdl
LT5kcmFnQ29udHJvbGxlcigpLT5kcmFnVXBkYXRlZCgmZHJhZ0RhdGEpOworICAgICAgICAvLyBN
YXNrIHRoZSBvcGVyYXRpb24gYWdhaW5zdCB0aGUgZHJhZyBzb3VyY2UncyBhbGxvd2VkIG9wZXJh
dGlvbnMuCisgICAgICAgIGlmICghKGVmZmVjdCAmIGRyYWdEYXRhLmRyYWdnaW5nU291cmNlT3Bl
cmF0aW9uTWFzaygpKSkKKyAgICAgICAgICAgIGVmZmVjdCA9IERyYWdPcGVyYXRpb25Ob25lOwor
ICAgICAgICBtX2RyYWdUYXJnZXREaXNwYXRjaCA9IGZhbHNlOworCisgICAgICAgIGlmIChtX2Ry
b3BFZmZlY3QgIT0gRHJvcEVmZmVjdERlZmF1bHQpIHsKKyAgICAgICAgICAgIG1fZHJhZ09wZXJh
dGlvbiA9IChtX2Ryb3BFZmZlY3QgIT0gRHJvcEVmZmVjdE5vbmUpID8gV2ViRHJhZ09wZXJhdGlv
bkNvcHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDogV2ViRHJhZ09wZXJhdGlvbk5vbmU7CisgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgbV9kcmFnT3BlcmF0aW9uID0gc3RhdGljX2Nhc3Q8V2ViRHJhZ09wZXJhdGlvbj4o
ZWZmZWN0KTsKKyAgICB9IGVsc2UgaWYgKG1fY3VycmVudERyYWdEYXRhTmV3LmdldCgpKSB7Cisg
ICAgICAgIERyYWdEYXRhIGRyYWdEYXRhKAorICAgICAgICAgICAgbV9jdXJyZW50RHJhZ0RhdGFO
ZXcuZ2V0KCksCisgICAgICAgICAgICBjbGllbnRQb2ludCwKKyAgICAgICAgICAgIHNjcmVlblBv
aW50LAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8RHJhZ09wZXJhdGlvbj4obV9vcGVyYXRpb25z
QWxsb3dlZCkpOworCisgICAgICAgIG1fZHJvcEVmZmVjdCA9IERyb3BFZmZlY3REZWZhdWx0Owor
ICAgICAgICBtX2RyYWdUYXJnZXREaXNwYXRjaCA9IHRydWU7CisgICAgICAgIERyYWdPcGVyYXRp
b24gZWZmZWN0ID0gZHJhZ0FjdGlvbiA9PSBEcmFnRW50ZXIgPyBtX3BhZ2UtPmRyYWdDb250cm9s
bGVyKCktPmRyYWdFbnRlcmVkKCZkcmFnRGF0YSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG1fcGFnZS0+ZHJhZ0NvbnRyb2xsZXIoKS0+
ZHJhZ1VwZGF0ZWQoJmRyYWdEYXRhKTsKKyAgICAgICAgLy8gTWFzayB0aGUgb3BlcmF0aW9uIGFn
YWluc3QgdGhlIGRyYWcgc291cmNlJ3MgYWxsb3dlZCBvcGVyYXRpb25zLgorICAgICAgICBpZiAo
IShlZmZlY3QgJiBkcmFnRGF0YS5kcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2soKSkpCisgICAg
ICAgICAgICBlZmZlY3QgPSBEcmFnT3BlcmF0aW9uTm9uZTsKKyAgICAgICAgbV9kcmFnVGFyZ2V0
RGlzcGF0Y2ggPSBmYWxzZTsKKworICAgICAgICBpZiAobV9kcm9wRWZmZWN0ICE9IERyb3BFZmZl
Y3REZWZhdWx0KSB7CisgICAgICAgICAgICBtX2RyYWdPcGVyYXRpb24gPSAobV9kcm9wRWZmZWN0
ICE9IERyb3BFZmZlY3ROb25lKSA/IFdlYkRyYWdPcGVyYXRpb25Db3B5CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFdlYkRy
YWdPcGVyYXRpb25Ob25lOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1fZHJhZ09wZXJh
dGlvbiA9IHN0YXRpY19jYXN0PFdlYkRyYWdPcGVyYXRpb24+KGVmZmVjdCk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgQVNTRVJUKGZhbHNlKTsKKyAgICB9CiAKICAgICBpZiAoZHJhZ0FjdGlvbiA9
PSBEcmFnT3ZlcikKICAgICAgICAgbV9kcmFnU2Nyb2xsVGltZXItPnRyaWdnZXJTY3JvbGwobWFp
bkZyYW1lSW1wbCgpLT5mcmFtZVZpZXcoKSwgY2xpZW50UG9pbnQpOwpkaWZmIC0tZ2l0IGEvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJW
aWV3SW1wbC5oCmluZGV4IGMyOTYxMjEuLmYxZjBiZmQgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViVmlld0ltcGwuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJ
bXBsLmgKQEAgLTYzLDYgKzYzLDcgQEAgY2xhc3MgUGxhdGZvcm1LZXlib2FyZEV2ZW50OwogY2xh
c3MgUG9wdXBDb250YWluZXI7CiBjbGFzcyBQb3B1cE1lbnVDbGllbnQ7CiBjbGFzcyBSYW5nZTsK
K2NsYXNzIFJlYWRhYmxlRGF0YU9iamVjdDsKIGNsYXNzIFJlbmRlclRoZW1lOwogY2xhc3MgV2lk
Z2V0OwogfQpAQCAtMTQ4LDYgKzE0OSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIGNvbnN0IFdlYlBv
aW50JiBjbGllbnRQb2ludCwKICAgICAgICAgY29uc3QgV2ViUG9pbnQmIHNjcmVlblBvaW50LAog
ICAgICAgICBXZWJEcmFnT3BlcmF0aW9uc01hc2sgb3BlcmF0aW9uc0FsbG93ZWQpOworICAgIHZp
cnR1YWwgV2ViRHJhZ09wZXJhdGlvbiBkcmFnVGFyZ2V0RHJhZ0VudGVyTmV3KAorICAgICAgICBp
bnQgaWRlbnRpdHksCisgICAgICAgIGNvbnN0IFdlYlBvaW50JiBjbGllbnRQb2ludCwKKyAgICAg
ICAgY29uc3QgV2ViUG9pbnQmIHNjcmVlblBvaW50LAorICAgICAgICBXZWJEcmFnT3BlcmF0aW9u
c01hc2sgb3BlcmF0aW9uc0FsbG93ZWQpOwogICAgIHZpcnR1YWwgV2ViRHJhZ09wZXJhdGlvbiBk
cmFnVGFyZ2V0RHJhZ092ZXIoCiAgICAgICAgIGNvbnN0IFdlYlBvaW50JiBjbGllbnRQb2ludCwK
ICAgICAgICAgY29uc3QgV2ViUG9pbnQmIHNjcmVlblBvaW50LApAQCAtNDE4LDYgKzQyNCw4IEBA
IHByaXZhdGU6CiAKICAgICAvLyBBIGNvcHkgb2YgdGhlIHdlYiBkcm9wIGRhdGEgb2JqZWN0IHdl
IHJlY2VpdmVkIGZyb20gdGhlIGJyb3dzZXIuCiAgICAgUmVmUHRyPFdlYkNvcmU6OkNocm9taXVt
RGF0YU9iamVjdD4gbV9jdXJyZW50RHJhZ0RhdGE7CisgICAgLy8gRklYTUU6IFJlbW92ZSB0aGUg
ZHVwbGljYXRpb24gb25jZSBDaHJvbWl1bSBpcyBzd2l0Y2hlZCBvdmVyLgorICAgIFJlZlB0cjxX
ZWJDb3JlOjpSZWFkYWJsZURhdGFPYmplY3Q+IG1fY3VycmVudERyYWdEYXRhTmV3OwogCiAgICAg
Ly8gVGhlIHBvaW50IHJlbGF0aXZlIHRvIHRoZSBjbGllbnQgYXJlYSB3aGVyZSB0aGUgbW91c2Ug
d2FzIGxhc3QgcHJlc3NlZAogICAgIC8vIGRvd24uIFRoaXMgaXMgdXNlZCBieSB0aGUgZHJhZyBj
bGllbnQgdG8gZGV0ZXJtaW5lIHdoYXQgd2FzIHVuZGVyIHRoZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66287</attachid>
            <date>2010-09-01 15:16:50 -0700</date>
            <delta_ts>2010-09-08 16:05:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>foo.patch</filename>
            <type>text/plain</type>
            <size>26308</size>
            <attacher name="Daniel Cheng">dcheng</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MDQ3MGExMS4uMjE1YzEwYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MiBAQAorMjAxMC0wOC0zMSAgRGFuaWVsIENoZW5n
ICA8ZGNoZW5nQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBbY2hyb21pdW1dIFByZXBhcmUgQ2xpcGJvYXJkL0RyYWdEYXRhIGZv
ciB0cmFuc2l0aW9uIHRvIG5ldyBkcmFnLWFuZC1kcm9wIGludGVyZmFjZS4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0OTkyCisKKyAgICAgICAgSW4g
b3JkZXIgdG8gYXZvaWQgYnJlYWtpbmcgQ2hyb21pdW0sIHdlIGhhdmUgdGhlIHJlbmRlcmVyIHNp
ZGUgaW1wbGVtZW50CisgICAgICAgIGJvdGggdGhlIG9sZCBhbmQgbmV3IGRyYWdnaW5nIGludGVy
ZmFjZSBhbmQgZ2F0ZSB0aGUgYmVoYXZpb3IgYmFzZWQgb2ZmCisgICAgICAgIG9mIHdoaWNoIERh
dGFPYmplY3QgcG9pbnRlciBpcyBzZXQuIFRoaXMgY2hhbmdlIG9ubHkgYWZmZWN0cyBkcmFnZ2lu
ZworICAgICAgICBpbnRvL292ZXIgdGhlIHJlbmRlcmVyOyBpdCBkb2VzIG5vdCBhZmZlY3Qgc3Rh
cnRpbmcgYSBkcmFnIG9yIGNvcHkgYW5kCisgICAgICAgIHBhc3RlLiBPbmNlIHRoZSBhcHByb3By
aWF0ZSBDaHJvbWl1bSBjaGFuZ2VzIGxhbmQsIHRoZSB0ZW1wb3JhcnkKKyAgICAgICAgY29uZGl0
aW9uYWwgYnJhbmNoZXMgd2lsbCBiZSByZW1vdmVkLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4K
KworICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNs
aXBib2FyZENocm9taXVtOjpDbGlwYm9hcmRDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpD
bGlwYm9hcmRDaHJvbWl1bTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENo
cm9taXVtOjpnZXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENocm9taXVtOjp0
eXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRDaHJvbWl1bTo6ZmlsZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkQ2hyb21pdW06Omhhc0RhdGEpOgorICAgICAgICAqIHBs
YXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmg6CisgICAgICAgICogcGxhdGZvcm0v
Y2hyb21pdW0vRHJhZ0RhdGFDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb250YWlu
c0hUTUwpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmNvbnRhaW5zVVJMKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRyYWdEYXRhOjphc1VSTCk6CisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0
YTo6Y29udGFpbnNGaWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0YTo6YXNGaWxlbmFt
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmNvbnRhaW5zUGxhaW5UZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjphc1BsYWluVGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpEcmFnRGF0YTo6Y2FuU21hcnRSZXBsYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRh
Ojpjb250YWluc0NvbXBhdGlibGVDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRh
Ojphc0ZyYWdtZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9EcmFnRGF0YVJlZi5o
OgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGFSZWY6OkRyYWdEYXRhUmVmKToKKwogMjAxMC0w
OC0zMCAgRGFuaWVsIENoZW5nICA8ZGNoZW5nQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9D
bGlwYm9hcmRDaHJvbWl1bS5jcHAKaW5kZXggMjM1MDhhNi4uMDBlZWQ3ZSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5jcHAKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5jcHAKQEAgLTQ4LDYgKzQ4
LDkgQEAKICNpbmNsdWRlICJTdHJpbmdCdWlsZGVyLmgiCiAjaW5jbHVkZSAibWFya3VwLmgiCiAK
Ky8vIEZJWE1FOiBUaGlzIGNsYXNzIGN1cnJlbnRseSBoYXMgYSBsb3Qgb2YgZHVwbGljYXRpb24g
aW4gcHJlcGFyYXRpb24gZm9yIGEKKy8vIHRyYW5zaXRpb24gdG8gdGhlIG5ldyBkcmFnIGFuZCBk
cm9wIG1vZGVsLiBDbGVhbiBpdCB1cCBvbmNlIHRoZSB0cmFuc2l0aW9uIGlzCisvLyBkb25lIG9u
IHRoZSBDaHJvbWUgc2lkZS4KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNl
IEhUTUxOYW1lczsKQEAgLTkxLDkgKzk0LDIxIEBAIHN0YXRpYyBDbGlwYm9hcmREYXRhVHlwZSBj
bGlwYm9hcmRUeXBlRnJvbU1JTUVUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSkKICAgICByZXR1cm4g
Q2xpcGJvYXJkRGF0YVR5cGVPdGhlcjsKIH0KIAorc3RhdGljIFN0cmluZyBub3JtYWxpemVUeXBl
KGNvbnN0IFN0cmluZyYgdHlwZSkKK3sKKyAgICBjb25zdCBTdHJpbmcgbm9ybWFsaXplZFR5cGUg
PSB0eXBlLnN0cmlwV2hpdGVTcGFjZSgpLmxvd2VyKCk7CisgICAgaWYgKG5vcm1hbGl6ZWRUeXBl
ID09ICJ0ZXh0IikKKyAgICAgICAgcmV0dXJuICJ0ZXh0L3BsYWluIjsKKyAgICBpZiAobm9ybWFs
aXplZFR5cGUgPT0gInVybCIpCisgICAgICAgIHJldHVybiAidGV4dC91cmktbGlzdCI7CisgICAg
cmV0dXJuIG5vcm1hbGl6ZWRUeXBlOworfQorCiBQYXNzUmVmUHRyPENsaXBib2FyZD4gQ2xpcGJv
YXJkOjpjcmVhdGUoQ2xpcGJvYXJkQWNjZXNzUG9saWN5IHBvbGljeSwgRHJhZ0RhdGEqIGRyYWdE
YXRhLCBGcmFtZSogZnJhbWUpCiB7Ci0gICAgcmV0dXJuIENsaXBib2FyZENocm9taXVtOjpjcmVh
dGUodHJ1ZSwgZHJhZ0RhdGEtPnBsYXRmb3JtRGF0YSgpLCBwb2xpY3ksIGZyYW1lKTsKKyAgICBp
ZiAoZHJhZ0RhdGEtPnBsYXRmb3JtRGF0YSgpLm9sZFdheSkKKyAgICAgICAgcmV0dXJuIENsaXBi
b2FyZENocm9taXVtOjpjcmVhdGUodHJ1ZSwgZHJhZ0RhdGEtPnBsYXRmb3JtRGF0YSgpLm9sZFdh
eSwgcG9saWN5LCBmcmFtZSk7CisgICAgcmV0dXJuIENsaXBib2FyZENocm9taXVtOjpjcmVhdGUo
dHJ1ZSwgZHJhZ0RhdGEtPnBsYXRmb3JtRGF0YSgpLm5ld1dheSwgcG9saWN5LCBmcmFtZSk7CiB9
CiAKIENsaXBib2FyZENocm9taXVtOjpDbGlwYm9hcmRDaHJvbWl1bShib29sIGlzRm9yRHJhZ2dp
bmcsCkBAIC0xMDYsMTIgKzEyMSwyOCBAQCBDbGlwYm9hcmRDaHJvbWl1bTo6Q2xpcGJvYXJkQ2hy
b21pdW0oYm9vbCBpc0ZvckRyYWdnaW5nLAogewogfQogCitDbGlwYm9hcmRDaHJvbWl1bTo6Q2xp
cGJvYXJkQ2hyb21pdW0oYm9vbCBpc0ZvckRyYWdnaW5nLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8UmVhZGFibGVEYXRhT2JqZWN0PiBkYXRhT2JqZWN0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsaXBib2FyZEFjY2Vzc1Bv
bGljeSBwb2xpY3ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJhbWUq
IGZyYW1lKQorICAgIDogQ2xpcGJvYXJkKHBvbGljeSwgaXNGb3JEcmFnZ2luZykKKyAgICAsIG1f
cmVhZGFibGVEYXRhT2JqZWN0KGRhdGFPYmplY3QpCisgICAgLCBtX2ZyYW1lKGZyYW1lKQorewor
fQorCiBQYXNzUmVmUHRyPENsaXBib2FyZENocm9taXVtPiBDbGlwYm9hcmRDaHJvbWl1bTo6Y3Jl
YXRlKGJvb2wgaXNGb3JEcmFnZ2luZywKICAgICBQYXNzUmVmUHRyPENocm9taXVtRGF0YU9iamVj
dD4gZGF0YU9iamVjdCwgQ2xpcGJvYXJkQWNjZXNzUG9saWN5IHBvbGljeSwgRnJhbWUqIGZyYW1l
KQogewogICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2xpcGJvYXJkQ2hyb21pdW0oaXNGb3JEcmFn
Z2luZywgZGF0YU9iamVjdCwgcG9saWN5LCBmcmFtZSkpOwogfQogCitQYXNzUmVmUHRyPENsaXBi
b2FyZENocm9taXVtPiBDbGlwYm9hcmRDaHJvbWl1bTo6Y3JlYXRlKGJvb2wgaXNGb3JEcmFnZ2lu
ZywKKyAgICBQYXNzUmVmUHRyPFJlYWRhYmxlRGF0YU9iamVjdD4gZGF0YU9iamVjdCwgQ2xpcGJv
YXJkQWNjZXNzUG9saWN5IHBvbGljeSwgRnJhbWUqIGZyYW1lKQoreworICAgIHJldHVybiBhZG9w
dFJlZihuZXcgQ2xpcGJvYXJkQ2hyb21pdW0oaXNGb3JEcmFnZ2luZywgZGF0YU9iamVjdCwgcG9s
aWN5LCBmcmFtZSkpOworfQorCiB2b2lkIENsaXBib2FyZENocm9taXVtOjpjbGVhckRhdGEoY29u
c3QgU3RyaW5nJiB0eXBlKQogewogICAgIGlmIChwb2xpY3koKSAhPSBDbGlwYm9hcmRXcml0YWJs
ZSB8fCAhbV9kYXRhT2JqZWN0KQpAQCAtMTYyLDcgKzE5MywxMyBAQCB2b2lkIENsaXBib2FyZENo
cm9taXVtOjpjbGVhckFsbERhdGEoKQogU3RyaW5nIENsaXBib2FyZENocm9taXVtOjpnZXREYXRh
KGNvbnN0IFN0cmluZyYgdHlwZSwgYm9vbCYgc3VjY2VzcykgY29uc3QKIHsKICAgICBzdWNjZXNz
ID0gZmFsc2U7Ci0gICAgaWYgKHBvbGljeSgpICE9IENsaXBib2FyZFJlYWRhYmxlIHx8ICFtX2Rh
dGFPYmplY3QpCisgICAgaWYgKHBvbGljeSgpICE9IENsaXBib2FyZFJlYWRhYmxlKQorICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBpZiAobV9yZWFkYWJsZURhdGFPYmplY3QpCisgICAg
ICAgIHJldHVybiBtX3JlYWRhYmxlRGF0YU9iamVjdC0+Z2V0RGF0YShub3JtYWxpemVUeXBlKHR5
cGUpLCBzdWNjZXNzKTsKKyAgICAgIAorICAgIGlmICghbV9kYXRhT2JqZWN0KQogICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7CiAKICAgICBDbGlwYm9hcmREYXRhVHlwZSBkYXRhVHlwZSA9IGNsaXBi
b2FyZFR5cGVGcm9tTUlNRVR5cGUodHlwZSk7CkBAIC0zMjIsNiArMzU5LDkgQEAgSGFzaFNldDxT
dHJpbmc+IENsaXBib2FyZENocm9taXVtOjp0eXBlcygpIGNvbnN0CiAgICAgaWYgKHBvbGljeSgp
ICE9IENsaXBib2FyZFJlYWRhYmxlICYmIHBvbGljeSgpICE9IENsaXBib2FyZFR5cGVzUmVhZGFi
bGUpCiAgICAgICAgIHJldHVybiByZXN1bHRzOwogCisgICAgaWYgKG1fcmVhZGFibGVEYXRhT2Jq
ZWN0KQorICAgICAgICByZXR1cm4gbV9yZWFkYWJsZURhdGFPYmplY3QtPnR5cGVzKCk7CisKICAg
ICBpZiAoIW1fZGF0YU9iamVjdCkKICAgICAgICAgcmV0dXJuIHJlc3VsdHM7CiAKQEAgLTM2MSw2
ICs0MDEsMTQgQEAgUGFzc1JlZlB0cjxGaWxlTGlzdD4gQ2xpcGJvYXJkQ2hyb21pdW06OmZpbGVz
KCkgY29uc3QKICAgICBpZiAocG9saWN5KCkgIT0gQ2xpcGJvYXJkUmVhZGFibGUpCiAgICAgICAg
IHJldHVybiBGaWxlTGlzdDo6Y3JlYXRlKCk7CiAKKyAgICBpZiAobV9yZWFkYWJsZURhdGFPYmpl
Y3QpIHsKKyAgICAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCA9IG1fZnJhbWUtPmRvY3VtZW50KCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAg
ICAgICAgUmVmUHRyPEZpbGVMaXN0PiBmaWxlTGlzdCA9IEZpbGVMaXN0OjpjcmVhdGUoKTsKKyAg
ICAgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcyA9IG1fcmVhZGFibGVEYXRhT2Jq
ZWN0LT5maWxlbmFtZXMoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWxlbmFt
ZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBmaWxlTGlzdC0+YXBwZW5kKEZpbGU6OmNyZWF0
ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBmaWxlbmFtZXMuYXQoaSkpKTsKKyAgICB9CisKICAg
ICBpZiAoIW1fZGF0YU9iamVjdCB8fCBtX2RhdGFPYmplY3QtPmZpbGVuYW1lcy5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybiBGaWxlTGlzdDo6Y3JlYXRlKCk7CiAKQEAgLTU1Niw2ICs2MDQsOSBA
QCB2b2lkIENsaXBib2FyZENocm9taXVtOjp3cml0ZVBsYWluVGV4dChjb25zdCBTdHJpbmcmIHRl
eHQpCiAKIGJvb2wgQ2xpcGJvYXJkQ2hyb21pdW06Omhhc0RhdGEoKQogeworICAgIGlmIChtX3Jl
YWRhYmxlRGF0YU9iamVjdCkKKyAgICAgICAgcmV0dXJuIG1fcmVhZGFibGVEYXRhT2JqZWN0LT5o
YXNEYXRhKCk7CisKICAgICBpZiAoIW1fZGF0YU9iamVjdCkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9t
aXVtLmggYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmgKaW5k
ZXggYTQxNTBkMC4uODllODA2OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9DbGlwYm9hcmRDaHJvbWl1bS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xp
cGJvYXJkQ2hyb21pdW0uaApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkNsaXBib2FyZC5o
IgogCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnQuaCIKKyNpbmNsdWRlICJEcmFnRGF0
YVJlZi5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQwLDYgKzQxLDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgIGNsYXNzIENocm9taXVtRGF0YU9iamVjdDsKICAgICBjbGFzcyBG
cmFtZTsKICAgICBjbGFzcyBJbnRQb2ludDsKKyAgICBjbGFzcyBSZWFkYWJsZURhdGFPYmplY3Q7
CiAKICAgICBjbGFzcyBDbGlwYm9hcmRDaHJvbWl1bSA6IHB1YmxpYyBDbGlwYm9hcmQsIHB1Ymxp
YyBDYWNoZWRSZXNvdXJjZUNsaWVudCB7CiAgICAgcHVibGljOgpAQCAtNDcsNiArNDksOCBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2xpcGJvYXJk
Q2hyb21pdW0+IGNyZWF0ZSgKICAgICAgICAgICAgIGJvb2wgaXNGb3JEcmFnZ2luZywgUGFzc1Jl
ZlB0cjxDaHJvbWl1bURhdGFPYmplY3Q+LCBDbGlwYm9hcmRBY2Nlc3NQb2xpY3ksIEZyYW1lKik7
CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENsaXBib2FyZENocm9taXVtPiBjcmVhdGUoCisg
ICAgICAgICAgICBib29sIGlzRm9yRHJhZ2dpbmcsIFBhc3NSZWZQdHI8UmVhZGFibGVEYXRhT2Jq
ZWN0PiwgQ2xpcGJvYXJkQWNjZXNzUG9saWN5LCBGcmFtZSopOwogCiAgICAgICAgIC8vIFJldHVy
bnMgdGhlIGZpbGUgbmFtZSAobm90IGluY2x1ZGluZyB0aGUgZXh0ZW5zaW9uKS4gVGhpcyByZW1v
dmVzIGFueQogICAgICAgICAvLyBpbnZhbGlkIGZpbGUgc3lzdGVtIGNoYXJhY3RlcnMgYXMgd2Vs
bCBhcyBtYWtpbmcgc3VyZSB0aGUKQEAgLTgxLDEwICs4NSwxMiBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKICAgICBwcml2YXRlOgogICAgICAgICBDbGlwYm9hcmRDaHJvbWl1bShib29sLCBQYXNz
UmVmUHRyPENocm9taXVtRGF0YU9iamVjdD4sIENsaXBib2FyZEFjY2Vzc1BvbGljeSwgRnJhbWUq
KTsKKyAgICAgICAgQ2xpcGJvYXJkQ2hyb21pdW0oYm9vbCwgUGFzc1JlZlB0cjxSZWFkYWJsZURh
dGFPYmplY3Q+LCBDbGlwYm9hcmRBY2Nlc3NQb2xpY3ksIEZyYW1lKik7CiAKICAgICAgICAgdm9p
ZCByZXNldEZyb21DbGlwYm9hcmQoKTsKICAgICAgICAgdm9pZCBzZXREcmFnSW1hZ2UoQ2FjaGVk
SW1hZ2UqLCBOb2RlKiwgY29uc3QgSW50UG9pbnQmKTsKICAgICAgICAgUmVmUHRyPENocm9taXVt
RGF0YU9iamVjdD4gbV9kYXRhT2JqZWN0OworICAgICAgICBSZWZQdHI8UmVhZGFibGVEYXRhT2Jq
ZWN0PiBtX3JlYWRhYmxlRGF0YU9iamVjdDsKICAgICAgICAgRnJhbWUqIG1fZnJhbWU7CiAgICAg
fTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EcmFnRGF0YUNocm9t
aXVtLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRHJhZ0RhdGFDaHJvbWl1bS5jcHAK
aW5kZXggNjc0ZDM0ZC4uYzM3NWU3YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9EcmFnRGF0YUNocm9taXVtLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVt
L0RyYWdEYXRhQ2hyb21pdW0uY3BwCkBAIC00MSw1MiArNDEsODQgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1zdGF0aWMgYm9vbCBjb250YWluc0hUTUwoY29uc3QgQ2hyb21pdW1EYXRhT2Jq
ZWN0KiBkcm9wRGF0YSkKK3N0YXRpYyBib29sIGNvbnRhaW5zSFRNTChjb25zdCBEcmFnRGF0YVJl
ZiogZHJvcERhdGEpCiB7Ci0gICAgcmV0dXJuIGRyb3BEYXRhLT50ZXh0SHRtbC5sZW5ndGgoKSA+
IDA7CisgICAgaWYgKGRyb3BEYXRhLT5vbGRXYXkpCisgICAgICAgIHJldHVybiBkcm9wRGF0YS0+
b2xkV2F5LT50ZXh0SHRtbC5sZW5ndGgoKSA+IDA7CisgICAgcmV0dXJuIGRyb3BEYXRhLT5uZXdX
YXktPnR5cGVzKCkuY29udGFpbnMoInRleHQvaHRtbCIpOwogfQogCiBib29sIERyYWdEYXRhOjpj
b250YWluc1VSTChGaWxlbmFtZUNvbnZlcnNpb25Qb2xpY3kgZmlsZW5hbWVQb2xpY3kpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuICFhc1VSTChmaWxlbmFtZVBvbGljeSkuaXNFbXB0eSgpOworICAgIGlm
IChtX3BsYXRmb3JtRHJhZ0RhdGEub2xkV2F5KQorICAgICAgICByZXR1cm4gIWFzVVJMKGZpbGVu
YW1lUG9saWN5KS5pc0VtcHR5KCk7CisgICAgcmV0dXJuIG1fcGxhdGZvcm1EcmFnRGF0YS5uZXdX
YXktPnR5cGVzKCkuY29udGFpbnMoInRleHQvdXJpLWxpc3QiKQorICAgICAgICB8fCAoZmlsZW5h
bWVQb2xpY3kgPT0gQ29udmVydEZpbGVuYW1lcyAmJiBtX3BsYXRmb3JtRHJhZ0RhdGEubmV3V2F5
LT5oYXNGaWxlbmFtZXMoKSk7CiB9CiAKIFN0cmluZyBEcmFnRGF0YTo6YXNVUkwoRmlsZW5hbWVD
b252ZXJzaW9uUG9saWN5IGZpbGVuYW1lUG9saWN5LCBTdHJpbmcqIHRpdGxlKSBjb25zdAogewot
ICAgIFN0cmluZyB1cmw7Ci0gICAgaWYgKG1fcGxhdGZvcm1EcmFnRGF0YS0+aGFzVmFsaWRVUkwo
KSkKLSAgICAgICAgdXJsID0gbV9wbGF0Zm9ybURyYWdEYXRhLT5nZXRVUkwoKS5zdHJpbmcoKTsK
LSAgICBlbHNlIGlmIChmaWxlbmFtZVBvbGljeSA9PSBDb252ZXJ0RmlsZW5hbWVzICYmICFtX3Bs
YXRmb3JtRHJhZ0RhdGEtPmZpbGVuYW1lcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgU3RyaW5nIGZp
bGVOYW1lID0gbV9wbGF0Zm9ybURyYWdEYXRhLT5maWxlbmFtZXNbMF07CisgICAgaWYgKG1fcGxh
dGZvcm1EcmFnRGF0YS5vbGRXYXkpIHsKKyAgICAgICAgU3RyaW5nIHVybDsKKyAgICAgICAgaWYg
KG1fcGxhdGZvcm1EcmFnRGF0YS5vbGRXYXktPmhhc1ZhbGlkVVJMKCkpCisgICAgICAgICAgICB1
cmwgPSBtX3BsYXRmb3JtRHJhZ0RhdGEub2xkV2F5LT5nZXRVUkwoKS5zdHJpbmcoKTsKKyAgICAg
ICAgZWxzZSBpZiAoZmlsZW5hbWVQb2xpY3kgPT0gQ29udmVydEZpbGVuYW1lcyAmJiAhbV9wbGF0
Zm9ybURyYWdEYXRhLm9sZFdheS0+ZmlsZW5hbWVzLmlzRW1wdHkoKSkgeworICAgICAgICAgICAg
U3RyaW5nIGZpbGVOYW1lID0gbV9wbGF0Zm9ybURyYWdEYXRhLm9sZFdheS0+ZmlsZW5hbWVzWzBd
OworICAgICAgICAgICAgZmlsZU5hbWUgPSBDaHJvbWl1bUJyaWRnZTo6Z2V0QWJzb2x1dGVQYXRo
KGZpbGVOYW1lKTsKKyAgICAgICAgICAgIHVybCA9IENocm9taXVtQnJpZGdlOjpmaWxlUGF0aFRv
VVJMKGZpbGVOYW1lKS5zdHJpbmcoKTsKKyAgICAgICAgfQorICAgICAKKyAgICAgICAgLy8gfHRp
dGxlfCBjYW4gYmUgTlVMTAorICAgICAgICBpZiAodGl0bGUpCisgICAgICAgICAgICAqdGl0bGUg
PSBtX3BsYXRmb3JtRHJhZ0RhdGEub2xkV2F5LT51cmxUaXRsZTsKKyAgICAgICAgcmV0dXJuIHVy
bDsKKyAgICB9CisKKyAgICBTdHJpbmcgdXJsID0gbV9wbGF0Zm9ybURyYWdEYXRhLm5ld1dheS0+
Z2V0VVJMKHRpdGxlKTsKKyAgICBpZiAoIUtVUkwoS1VSTCgpLCB1cmwpLmlzVmFsaWQoKQorICAg
ICAgICAmJiBmaWxlbmFtZVBvbGljeSA9PSBDb252ZXJ0RmlsZW5hbWVzCisgICAgICAgICYmIG1f
cGxhdGZvcm1EcmFnRGF0YS5uZXdXYXktPmhhc0ZpbGVuYW1lcygpKSB7CisgICAgICAgIFN0cmlu
ZyBmaWxlTmFtZSA9IG1fcGxhdGZvcm1EcmFnRGF0YS5uZXdXYXktPmZpbGVuYW1lcygpWzBdOwog
ICAgICAgICBmaWxlTmFtZSA9IENocm9taXVtQnJpZGdlOjpnZXRBYnNvbHV0ZVBhdGgoZmlsZU5h
bWUpOwogICAgICAgICB1cmwgPSBDaHJvbWl1bUJyaWRnZTo6ZmlsZVBhdGhUb1VSTChmaWxlTmFt
ZSkuc3RyaW5nKCk7CisgICAgICAgIGlmICh0aXRsZSkKKyAgICAgICAgICAgICp0aXRsZSA9ICIi
OwogICAgIH0KLSAKLSAgICAvLyB8dGl0bGV8IGNhbiBiZSBOVUxMCi0gICAgaWYgKHRpdGxlKQot
ICAgICAgICAqdGl0bGUgPSBtX3BsYXRmb3JtRHJhZ0RhdGEtPnVybFRpdGxlOwogICAgIHJldHVy
biB1cmw7CiB9CiAKIGJvb2wgRHJhZ0RhdGE6OmNvbnRhaW5zRmlsZXMoKSBjb25zdAogewotICAg
IHJldHVybiAhbV9wbGF0Zm9ybURyYWdEYXRhLT5maWxlbmFtZXMuaXNFbXB0eSgpOworICAgIGlm
IChtX3BsYXRmb3JtRHJhZ0RhdGEub2xkV2F5KQorICAgICAgICByZXR1cm4gIW1fcGxhdGZvcm1E
cmFnRGF0YS5vbGRXYXktPmZpbGVuYW1lcy5pc0VtcHR5KCk7CisgICAgcmV0dXJuIG1fcGxhdGZv
cm1EcmFnRGF0YS5uZXdXYXktPmhhc0ZpbGVuYW1lcygpOwogfQogCiB2b2lkIERyYWdEYXRhOjph
c0ZpbGVuYW1lcyhWZWN0b3I8U3RyaW5nPiYgcmVzdWx0KSBjb25zdAogewotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9wbGF0Zm9ybURyYWdEYXRhLT5maWxlbmFtZXMuc2l6ZSgpOyArK2kp
Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQobV9wbGF0Zm9ybURyYWdEYXRhLT5maWxlbmFtZXNbaV0p
OworICAgIGlmIChtX3BsYXRmb3JtRHJhZ0RhdGEub2xkV2F5KSB7CisgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9wbGF0Zm9ybURyYWdEYXRhLm9sZFdheS0+ZmlsZW5hbWVzLnNpemUo
KTsgKytpKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChtX3BsYXRmb3JtRHJhZ0RhdGEub2xk
V2F5LT5maWxlbmFtZXNbaV0pOworICAgIH0gZWxzZSB7CisgICAgICAgIGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBmaWxlbmFtZXMgPSBtX3BsYXRmb3JtRHJhZ0RhdGEubmV3V2F5LT5maWxlbmFtZXMo
KTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWxlbmFtZXMuc2l6ZSgpOyArK2kp
CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGZpbGVuYW1lc1tpXSk7CisgICAgfQogfQogCiBi
b29sIERyYWdEYXRhOjpjb250YWluc1BsYWluVGV4dCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICFt
X3BsYXRmb3JtRHJhZ0RhdGEtPnBsYWluVGV4dC5pc0VtcHR5KCk7CisgICAgaWYgKG1fcGxhdGZv
cm1EcmFnRGF0YS5vbGRXYXkpCisgICAgICAgIHJldHVybiAhbV9wbGF0Zm9ybURyYWdEYXRhLm9s
ZFdheS0+cGxhaW5UZXh0LmlzRW1wdHkoKTsKKyAgICByZXR1cm4gbV9wbGF0Zm9ybURyYWdEYXRh
Lm5ld1dheS0+dHlwZXMoKS5jb250YWlucygidGV4dC9wbGFpbiIpOwogfQogCiBTdHJpbmcgRHJh
Z0RhdGE6OmFzUGxhaW5UZXh0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9wbGF0Zm9ybURyYWdE
YXRhLT5wbGFpblRleHQ7CisgICAgaWYgKG1fcGxhdGZvcm1EcmFnRGF0YS5vbGRXYXkpCisgICAg
ICAgIHJldHVybiBtX3BsYXRmb3JtRHJhZ0RhdGEub2xkV2F5LT5wbGFpblRleHQ7CisgICAgYm9v
bCBpZ25vcmVkU3VjY2VzczsKKyAgICByZXR1cm4gbV9wbGF0Zm9ybURyYWdEYXRhLm5ld1dheS0+
Z2V0RGF0YSgidGV4dC9wbGFpbiIsIGlnbm9yZWRTdWNjZXNzKTsKIH0KIAogYm9vbCBEcmFnRGF0
YTo6Y29udGFpbnNDb2xvcigpIGNvbnN0CkBAIC0xMDEsMTUgKzEzMywxOSBAQCBib29sIERyYWdE
YXRhOjpjYW5TbWFydFJlcGxhY2UoKSBjb25zdAogICAgIC8vIFRoaXMgaXMgYWxsb3dlZCB3aGVu
ZXZlciB0aGUgZHJhZyBkYXRhIGNvbnRhaW5zIGEgJ3JhbmdlJyAoaWUuLAogICAgIC8vIENsaXBi
b2FyZFdpbjo6d3JpdGVSYW5nZSBpcyBjYWxsZWQpLiAgRm9yIGV4YW1wbGUsIGRyYWdnaW5nIGEg
bGluawogICAgIC8vIHNob3VsZCBub3QgcmVzdWx0IGluIGEgc3BhY2UgYmVpbmcgYWRkZWQuCi0g
ICAgcmV0dXJuICFtX3BsYXRmb3JtRHJhZ0RhdGEtPnBsYWluVGV4dC5pc0VtcHR5KCkKLSAgICAg
ICAgJiYgIW1fcGxhdGZvcm1EcmFnRGF0YS0+aGFzVmFsaWRVUkwoKTsKKyAgICBpZiAobV9wbGF0
Zm9ybURyYWdEYXRhLm9sZFdheSkKKyAgICAgICAgcmV0dXJuICFtX3BsYXRmb3JtRHJhZ0RhdGEu
b2xkV2F5LT5wbGFpblRleHQuaXNFbXB0eSgpCisgICAgICAgICAgICAmJiAhbV9wbGF0Zm9ybURy
YWdEYXRhLm9sZFdheS0+aGFzVmFsaWRVUkwoKTsKKyAgICByZXR1cm4gbV9wbGF0Zm9ybURyYWdE
YXRhLm5ld1dheS0+dHlwZXMoKS5jb250YWlucygidGV4dC9wbGFpbiIpCisgICAgICAgIC8vIEZJ
WE1FOiBEbyB3ZSBuZWVkIHRvIGNoZWNrIFVSTCB2YWxpZGl0eT8KKyAgICAgICAgJiYgIW1fcGxh
dGZvcm1EcmFnRGF0YS5uZXdXYXktPnR5cGVzKCkuY29udGFpbnMoInRleHQvdXJpLWxpc3QiKTsK
IH0KIAogYm9vbCBEcmFnRGF0YTo6Y29udGFpbnNDb21wYXRpYmxlQ29udGVudCgpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIGNvbnRhaW5zUGxhaW5UZXh0KCkKICAgICAgICAgfHwgY29udGFpbnNVUkwo
KQotICAgICAgICB8fCBjb250YWluc0hUTUwobV9wbGF0Zm9ybURyYWdEYXRhKQorICAgICAgICB8
fCBjb250YWluc0hUTUwoJm1fcGxhdGZvcm1EcmFnRGF0YSkKICAgICAgICAgfHwgY29udGFpbnND
b2xvcigpCiAgICAgICAgIHx8IGNvbnRhaW5zRmlsZXMoKTsKIH0KQEAgLTEzNCwxMCArMTcwLDIw
IEBAIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gRHJhZ0RhdGE6OmFzRnJhZ21lbnQoRG9j
dW1lbnQqIGRvYykgY29uc3QKICAgICAgICAgLy8gICAgcmV0dXJuIGZyYWdtZW50OwogICAgIH0K
IAotICAgIGlmICghbV9wbGF0Zm9ybURyYWdEYXRhLT50ZXh0SHRtbC5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRG
cm9tTWFya3VwKGRvYywKLSAgICAgICAgICAgIG1fcGxhdGZvcm1EcmFnRGF0YS0+dGV4dEh0bWws
IG1fcGxhdGZvcm1EcmFnRGF0YS0+aHRtbEJhc2VVcmwsIEZyYWdtZW50U2NyaXB0aW5nTm90QWxs
b3dlZCk7Ci0gICAgICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNlKCk7CisgICAgaWYgKG1fcGxh
dGZvcm1EcmFnRGF0YS5vbGRXYXkpIHsKKyAgICAgICAgaWYgKCFtX3BsYXRmb3JtRHJhZ0RhdGEu
b2xkV2F5LT50ZXh0SHRtbC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIFJlZlB0cjxEb2N1bWVu
dEZyYWdtZW50PiBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChkb2MsCisgICAg
ICAgICAgICAgICAgbV9wbGF0Zm9ybURyYWdEYXRhLm9sZFdheS0+dGV4dEh0bWwsIG1fcGxhdGZv
cm1EcmFnRGF0YS5vbGRXYXktPmh0bWxCYXNlVXJsLCBGcmFnbWVudFNjcmlwdGluZ05vdEFsbG93
ZWQpOworICAgICAgICAgICAgcmV0dXJuIGZyYWdtZW50LnJlbGVhc2UoKTsKKyAgICAgICAgfQor
ICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChjb250YWluc0hUTUwoJm1fcGxhdGZvcm1EcmFnRGF0
YSkpIHsKKyAgICAgICAgICAgIFN0cmluZyBiYXNlVVJMOworICAgICAgICAgICAgU3RyaW5nIGh0
bWwgPSBtX3BsYXRmb3JtRHJhZ0RhdGEubmV3V2F5LT5nZXRIVE1MKCZiYXNlVVJMKTsKKyAgICAg
ICAgICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50
RnJvbU1hcmt1cChkb2MsCisgICAgICAgICAgICAgICAgaHRtbCwgYmFzZVVSTCwgRnJhZ21lbnRT
Y3JpcHRpbmdOb3RBbGxvd2VkKTsKKyAgICAgICAgICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNl
KCk7CisgICAgICAgIH0KICAgICB9CiAKICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vRHJhZ0RhdGFSZWYuaCBiL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vRHJhZ0RhdGFSZWYuaAppbmRleCBkZTFmYTFjLi4wMTA1ZGNmIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RyYWdEYXRhUmVmLmgKKysrIGIvV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9EcmFnRGF0YVJlZi5oCkBAIC0zMiwxMCArMzIsMTggQEAKICNkZWZpbmUg
RHJhZ0RhdGFSZWZfaAogCiAjaW5jbHVkZSAiQ2hyb21pdW1EYXRhT2JqZWN0LmgiCisjaW5jbHVk
ZSAiUmVhZGFibGVEYXRhT2JqZWN0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIHR5
cGVkZWYgQ2hyb21pdW1EYXRhT2JqZWN0KiBEcmFnRGF0YVJlZjsKK3N0cnVjdCBEcmFnRGF0YVJl
ZiB7CisgICAgLy8gRklYTUU6IFRoZXNlIGFyZSBkZWxpYmVyYXRlbHkgbm9uLWV4cGxpY2l0IGZv
ciB0aGUgbW9tZW50LiBPbmNlIENocm9taXVtCisgICAgLy8gaXMgc3dpdGNoZWQgb3ZlciB0byB0
aGUgbmV3IHdheSBvZiBoYW5kbGluZyBkcmFncywgcmV2ZXJ0IHRoaXMgY2hhbmdlLgorICAgIERy
YWdEYXRhUmVmKENocm9taXVtRGF0YU9iamVjdCogZGF0YSkgOiBvbGRXYXkoZGF0YSksIG5ld1dh
eSgwKSB7fQorICAgIERyYWdEYXRhUmVmKFJlYWRhYmxlRGF0YU9iamVjdCogZGF0YSkgOiBvbGRX
YXkoMCksIG5ld1dheShkYXRhKSB7fQorICAgIENocm9taXVtRGF0YU9iamVjdCogb2xkV2F5Owor
ICAgIFJlYWRhYmxlRGF0YU9iamVjdCogbmV3V2F5OworfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwppbmRleCA5MGQ5NDYwLi4wMzQ2Yzg5IDEwMDY0NAotLS0gYS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwyNSBAQAorMjAxMC0wOC0zMSAgRGFuaWVsIENoZW5nICA8ZGNoZW5nQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBb
Y2hyb21pdW1dIFByZXBhcmUgQ2xpcGJvYXJkL0RyYWdEYXRhIGZvciB0cmFuc2l0aW9uIHRvIG5l
dyBkcmFnLWFuZC1kcm9wIGludGVyZmFjZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTQ0OTkyCisKKyAgICAgICAgSW4gb3JkZXIgdG8gYXZvaWQgYnJl
YWtpbmcgQ2hyb21pdW0sIHdlIGhhdmUgdGhlIHJlbmRlcmVyIHNpZGUgaW1wbGVtZW50CisgICAg
ICAgIGJvdGggdGhlIG9sZCBhbmQgbmV3IGRyYWdnaW5nIGludGVyZmFjZSBhbmQgZ2F0ZSB0aGUg
YmVoYXZpb3IgYmFzZWQgb2ZmCisgICAgICAgIG9mIHdoaWNoIERhdGFPYmplY3QgcG9pbnRlciBp
cyBzZXQuIFRoaXMgY2hhbmdlIG9ubHkgYWZmZWN0cyBkcmFnZ2luZworICAgICAgICBpbnRvL292
ZXIgdGhlIHJlbmRlcmVyOyBpdCBkb2VzIG5vdCBhZmZlY3Qgc3RhcnRpbmcgYSBkcmFnIG9yIGNv
cHkgYW5kCisgICAgICAgIHBhc3RlLiBPbmNlIHRoZSBhcHByb3ByaWF0ZSBDaHJvbWl1bSBjaGFu
Z2VzIGxhbmQsIHRoZSB0ZW1wb3JhcnkKKyAgICAgICAgY29uZGl0aW9uYWwgYnJhbmNoZXMgd2ls
bCBiZSByZW1vdmVkLgorCisgICAgICAgICogcHVibGljL1dlYlZpZXcuaDoKKyAgICAgICAgKiBz
cmMvV2ViVmlld0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6ZHJhZ1Rh
cmdldERyYWdFbnRlck5ldyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpkcmFnVGFy
Z2V0RHJhZ0xlYXZlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmRyYWdUYXJnZXRE
cm9wKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmRyYWdUYXJnZXREcmFnRW50ZXJP
ck92ZXIpOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5oOgorCiAyMDEwLTA4LTMwICBTaGVy
aWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmll
d2VkLCByb2xsaW5nIG91dCByNjYxOTguCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYlZpZXcuaCBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVmlldy5oCmluZGV4IDFi
OTRkYTIuLjg3MDBkMDMgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVmll
dy5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVmlldy5oCkBAIC0xOTgsNiArMTk4
LDkgQEAgcHVibGljOgogICAgICAgICBjb25zdCBXZWJEcmFnRGF0YSYsIGludCBpZGVudGl0eSwK
ICAgICAgICAgY29uc3QgV2ViUG9pbnQmIGNsaWVudFBvaW50LCBjb25zdCBXZWJQb2ludCYgc2Ny
ZWVuUG9pbnQsCiAgICAgICAgIFdlYkRyYWdPcGVyYXRpb25zTWFzayBvcGVyYXRpb25zQWxsb3dl
ZCkgPSAwOworICAgIHZpcnR1YWwgV2ViRHJhZ09wZXJhdGlvbiBkcmFnVGFyZ2V0RHJhZ0VudGVy
TmV3KAorICAgICAgICBpbnQgaWRlbnRpdHksIGNvbnN0IFdlYlBvaW50JiBjbGllbnRQb2ludCwg
Y29uc3QgV2ViUG9pbnQmIHNjcmVlblBvaW50LAorICAgICAgICBXZWJEcmFnT3BlcmF0aW9uc01h
c2sgb3BlcmF0aW9uc0FsbG93ZWQpID0gMDsKICAgICB2aXJ0dWFsIFdlYkRyYWdPcGVyYXRpb24g
ZHJhZ1RhcmdldERyYWdPdmVyKAogICAgICAgICBjb25zdCBXZWJQb2ludCYgY2xpZW50UG9pbnQs
IGNvbnN0IFdlYlBvaW50JiBzY3JlZW5Qb2ludCwKICAgICAgICAgV2ViRHJhZ09wZXJhdGlvbnNN
YXNrIG9wZXJhdGlvbnNBbGxvd2VkKSA9IDA7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlZpZXdJbXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3Bw
CmluZGV4IDUwNjVmNWUuLjk1ZGFjYTAgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViVmlld0ltcGwuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3Bw
CkBAIC04MSw2ICs4MSw3IEBACiAjaW5jbHVkZSAiUG9wdXBNZW51Q2hyb21pdW0uaCIKICNpbmNs
dWRlICJQb3B1cE1lbnVDbGllbnQuaCIKICNpbmNsdWRlICJQcm9ncmVzc1RyYWNrZXIuaCIKKyNp
bmNsdWRlICJSZWFkYWJsZURhdGFPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAj
aW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgpA
QCAtMTU4Myw2ICsxNTg0LDIxIEBAIFdlYkRyYWdPcGVyYXRpb24gV2ViVmlld0ltcGw6OmRyYWdU
YXJnZXREcmFnRW50ZXIoCiAgICAgcmV0dXJuIGRyYWdUYXJnZXREcmFnRW50ZXJPck92ZXIoY2xp
ZW50UG9pbnQsIHNjcmVlblBvaW50LCBEcmFnRW50ZXIpOwogfQogCitXZWJEcmFnT3BlcmF0aW9u
IFdlYlZpZXdJbXBsOjpkcmFnVGFyZ2V0RHJhZ0VudGVyTmV3KAorICAgIGludCBpZGVudGl0eSwK
KyAgICBjb25zdCBXZWJQb2ludCYgY2xpZW50UG9pbnQsCisgICAgY29uc3QgV2ViUG9pbnQmIHNj
cmVlblBvaW50LAorICAgIFdlYkRyYWdPcGVyYXRpb25zTWFzayBvcGVyYXRpb25zQWxsb3dlZCkK
K3sKKyAgICBBU1NFUlQoIW1fY3VycmVudERyYWdEYXRhTmV3LmdldCgpKTsKKworICAgIG1fY3Vy
cmVudERyYWdEYXRhTmV3ID0gUmVhZGFibGVEYXRhT2JqZWN0OjpjcmVhdGUodHJ1ZSk7CisgICAg
bV9kcmFnSWRlbnRpdHkgPSBpZGVudGl0eTsKKyAgICBtX29wZXJhdGlvbnNBbGxvd2VkID0gb3Bl
cmF0aW9uc0FsbG93ZWQ7CisKKyAgICByZXR1cm4gZHJhZ1RhcmdldERyYWdFbnRlck9yT3Zlcihj
bGllbnRQb2ludCwgc2NyZWVuUG9pbnQsIERyYWdFbnRlcik7Cit9CisKIFdlYkRyYWdPcGVyYXRp
b24gV2ViVmlld0ltcGw6OmRyYWdUYXJnZXREcmFnT3ZlcigKICAgICBjb25zdCBXZWJQb2ludCYg
Y2xpZW50UG9pbnQsCiAgICAgY29uc3QgV2ViUG9pbnQmIHNjcmVlblBvaW50LApAQCAtMTU5NSwx
OSArMTYxMSwzNCBAQCBXZWJEcmFnT3BlcmF0aW9uIFdlYlZpZXdJbXBsOjpkcmFnVGFyZ2V0RHJh
Z092ZXIoCiAKIHZvaWQgV2ViVmlld0ltcGw6OmRyYWdUYXJnZXREcmFnTGVhdmUoKQogewotICAg
IEFTU0VSVChtX2N1cnJlbnREcmFnRGF0YS5nZXQoKSk7Ci0KLSAgICBEcmFnRGF0YSBkcmFnRGF0
YSgKLSAgICAgICAgbV9jdXJyZW50RHJhZ0RhdGEuZ2V0KCksCi0gICAgICAgIEludFBvaW50KCks
Ci0gICAgICAgIEludFBvaW50KCksCi0gICAgICAgIHN0YXRpY19jYXN0PERyYWdPcGVyYXRpb24+
KG1fb3BlcmF0aW9uc0FsbG93ZWQpKTsKLQotICAgIG1fZHJhZ1RhcmdldERpc3BhdGNoID0gdHJ1
ZTsKLSAgICBtX3BhZ2UtPmRyYWdDb250cm9sbGVyKCktPmRyYWdFeGl0ZWQoJmRyYWdEYXRhKTsK
LSAgICBtX2RyYWdUYXJnZXREaXNwYXRjaCA9IGZhbHNlOworICAgIC8vIEZJWE1FOiBUaGlzIGlz
IHRlbXBvcmFyeSB3aGlsZSB1bnRpbCBDaHJvbWl1bSBzaWRlIGlzIHRyYW5zaXRpb25lZCB0byB1
c2UKKyAgICAvLyB0aGUgbmV3IGRyYWdnaW5nIGludGVyZmFjZS4KKyAgICBpZiAobV9jdXJyZW50
RHJhZ0RhdGEuZ2V0KCkpIHsKKyAgICAgICAgRHJhZ0RhdGEgZHJhZ0RhdGEoCisgICAgICAgICAg
ICBtX2N1cnJlbnREcmFnRGF0YS5nZXQoKSwKKyAgICAgICAgICAgIEludFBvaW50KCksCisgICAg
ICAgICAgICBJbnRQb2ludCgpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8RHJhZ09wZXJhdGlv
bj4obV9vcGVyYXRpb25zQWxsb3dlZCkpOworCisgICAgICAgIG1fZHJhZ1RhcmdldERpc3BhdGNo
ID0gdHJ1ZTsKKyAgICAgICAgbV9wYWdlLT5kcmFnQ29udHJvbGxlcigpLT5kcmFnRXhpdGVkKCZk
cmFnRGF0YSk7CisgICAgICAgIG1fZHJhZ1RhcmdldERpc3BhdGNoID0gZmFsc2U7CisgICAgfSBl
bHNlIGlmIChtX2N1cnJlbnREcmFnRGF0YU5ldy5nZXQoKSkgeworICAgICAgICBEcmFnRGF0YSBk
cmFnRGF0YSgKKyAgICAgICAgICAgIG1fY3VycmVudERyYWdEYXRhTmV3LmdldCgpLAorICAgICAg
ICAgICAgSW50UG9pbnQoKSwKKyAgICAgICAgICAgIEludFBvaW50KCksCisgICAgICAgICAgICBz
dGF0aWNfY2FzdDxEcmFnT3BlcmF0aW9uPihtX29wZXJhdGlvbnNBbGxvd2VkKSk7CisKKyAgICAg
ICAgbV9kcmFnVGFyZ2V0RGlzcGF0Y2ggPSB0cnVlOworICAgICAgICBtX3BhZ2UtPmRyYWdDb250
cm9sbGVyKCktPmRyYWdFeGl0ZWQoJmRyYWdEYXRhKTsKKyAgICAgICAgbV9kcmFnVGFyZ2V0RGlz
cGF0Y2ggPSBmYWxzZTsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQoZmFsc2UpOworICAg
IH0KIAogICAgIG1fY3VycmVudERyYWdEYXRhID0gMDsKKyAgICBtX2N1cnJlbnREcmFnRGF0YU5l
dyA9IDA7CiAgICAgbV9kcm9wRWZmZWN0ID0gRHJvcEVmZmVjdERlZmF1bHQ7CiAgICAgbV9kcmFn
T3BlcmF0aW9uID0gV2ViRHJhZ09wZXJhdGlvbk5vbmU7CiAgICAgbV9kcmFnSWRlbnRpdHkgPSAw
OwpAQCAtMTYxNiw4ICsxNjQ3LDYgQEAgdm9pZCBXZWJWaWV3SW1wbDo6ZHJhZ1RhcmdldERyYWdM
ZWF2ZSgpCiB2b2lkIFdlYlZpZXdJbXBsOjpkcmFnVGFyZ2V0RHJvcChjb25zdCBXZWJQb2ludCYg
Y2xpZW50UG9pbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJQ
b2ludCYgc2NyZWVuUG9pbnQpCiB7Ci0gICAgQVNTRVJUKG1fY3VycmVudERyYWdEYXRhLmdldCgp
KTsKLQogICAgIC8vIElmIHRoaXMgd2VidmlldyB0cmFuc2l0aW9ucyBmcm9tIHRoZSAiZHJvcCBh
Y2NlcHRpbmciIHN0YXRlIHRvIHRoZSAibm90CiAgICAgLy8gYWNjZXB0aW5nIiBzdGF0ZSwgdGhl
biBvdXIgSVBDIG1lc3NhZ2UgcmVwbHkgaW5kaWNhdGluZyB0aGF0IG1heSBiZSBpbi0KICAgICAv
LyBmbGlnaHQsIG9yIGVsc2UgZGVsYXllZCBieSBqYXZhc2NyaXB0IHByb2Nlc3NpbmcgaW4gdGhp
cyB3ZWJ2aWV3LiAgSWYgYQpAQCAtMTYzMCwxNyArMTY1OSwzNCBAQCB2b2lkIFdlYlZpZXdJbXBs
OjpkcmFnVGFyZ2V0RHJvcChjb25zdCBXZWJQb2ludCYgY2xpZW50UG9pbnQsCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBEcmFnRGF0YSBkcmFnRGF0YSgKLSAgICAgICAgbV9jdXJyZW50
RHJhZ0RhdGEuZ2V0KCksCi0gICAgICAgIGNsaWVudFBvaW50LAotICAgICAgICBzY3JlZW5Qb2lu
dCwKLSAgICAgICAgc3RhdGljX2Nhc3Q8RHJhZ09wZXJhdGlvbj4obV9vcGVyYXRpb25zQWxsb3dl
ZCkpOwotCi0gICAgbV9kcmFnVGFyZ2V0RGlzcGF0Y2ggPSB0cnVlOwotICAgIG1fcGFnZS0+ZHJh
Z0NvbnRyb2xsZXIoKS0+cGVyZm9ybURyYWcoJmRyYWdEYXRhKTsKLSAgICBtX2RyYWdUYXJnZXRE
aXNwYXRjaCA9IGZhbHNlOworICAgIC8vIEZJWE1FOiBUaGlzIGlzIHRlbXBvcmFyeSB3aGlsZSB1
bnRpbCBDaHJvbWl1bSBzaWRlIGlzIHRyYW5zaXRpb25lZCB0byB1c2UKKyAgICAvLyB0aGUgbmV3
IGRyYWdnaW5nIGludGVyZmFjZS4KKyAgICBpZiAobV9jdXJyZW50RHJhZ0RhdGEuZ2V0KCkpIHsK
KyAgICAgICAgRHJhZ0RhdGEgZHJhZ0RhdGEoCisgICAgICAgICAgICBtX2N1cnJlbnREcmFnRGF0
YS5nZXQoKSwKKyAgICAgICAgICAgIGNsaWVudFBvaW50LAorICAgICAgICAgICAgc2NyZWVuUG9p
bnQsCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxEcmFnT3BlcmF0aW9uPihtX29wZXJhdGlvbnNB
bGxvd2VkKSk7CisKKyAgICAgICAgbV9kcmFnVGFyZ2V0RGlzcGF0Y2ggPSB0cnVlOworICAgICAg
ICBtX3BhZ2UtPmRyYWdDb250cm9sbGVyKCktPnBlcmZvcm1EcmFnKCZkcmFnRGF0YSk7CisgICAg
ICAgIG1fZHJhZ1RhcmdldERpc3BhdGNoID0gZmFsc2U7CisgICAgfSBlbHNlIGlmIChtX2N1cnJl
bnREcmFnRGF0YU5ldy5nZXQoKSkgeworICAgICAgICBEcmFnRGF0YSBkcmFnRGF0YSgKKyAgICAg
ICAgICAgIG1fY3VycmVudERyYWdEYXRhTmV3LmdldCgpLAorICAgICAgICAgICAgY2xpZW50UG9p
bnQsCisgICAgICAgICAgICBzY3JlZW5Qb2ludCwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PERy
YWdPcGVyYXRpb24+KG1fb3BlcmF0aW9uc0FsbG93ZWQpKTsKKworICAgICAgICBtX2RyYWdUYXJn
ZXREaXNwYXRjaCA9IHRydWU7CisgICAgICAgIG1fcGFnZS0+ZHJhZ0NvbnRyb2xsZXIoKS0+cGVy
Zm9ybURyYWcoJmRyYWdEYXRhKTsKKyAgICAgICAgbV9kcmFnVGFyZ2V0RGlzcGF0Y2ggPSBmYWxz
ZTsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQoZmFsc2UpOworICAgIH0KIAogICAgIG1f
Y3VycmVudERyYWdEYXRhID0gMDsKKyAgICBtX2N1cnJlbnREcmFnRGF0YU5ldyA9IDA7CiAgICAg
bV9kcm9wRWZmZWN0ID0gRHJvcEVmZmVjdERlZmF1bHQ7CiAgICAgbV9kcmFnT3BlcmF0aW9uID0g
V2ViRHJhZ09wZXJhdGlvbk5vbmU7CiAgICAgbV9kcmFnSWRlbnRpdHkgPSAwOwpAQCAtMTY1Niwy
OCArMTcwMiw1MyBAQCBpbnQgV2ViVmlld0ltcGw6OmRyYWdJZGVudGl0eSgpCiAKIFdlYkRyYWdP
cGVyYXRpb24gV2ViVmlld0ltcGw6OmRyYWdUYXJnZXREcmFnRW50ZXJPck92ZXIoY29uc3QgV2Vi
UG9pbnQmIGNsaWVudFBvaW50LCBjb25zdCBXZWJQb2ludCYgc2NyZWVuUG9pbnQsIERyYWdBY3Rp
b24gZHJhZ0FjdGlvbikKIHsKLSAgICBBU1NFUlQobV9jdXJyZW50RHJhZ0RhdGEuZ2V0KCkpOwot
Ci0gICAgRHJhZ0RhdGEgZHJhZ0RhdGEoCi0gICAgICAgIG1fY3VycmVudERyYWdEYXRhLmdldCgp
LAotICAgICAgICBjbGllbnRQb2ludCwKLSAgICAgICAgc2NyZWVuUG9pbnQsCi0gICAgICAgIHN0
YXRpY19jYXN0PERyYWdPcGVyYXRpb24+KG1fb3BlcmF0aW9uc0FsbG93ZWQpKTsKLQotICAgIG1f
ZHJvcEVmZmVjdCA9IERyb3BFZmZlY3REZWZhdWx0OwotICAgIG1fZHJhZ1RhcmdldERpc3BhdGNo
ID0gdHJ1ZTsKLSAgICBEcmFnT3BlcmF0aW9uIGVmZmVjdCA9IGRyYWdBY3Rpb24gPT0gRHJhZ0Vu
dGVyID8gbV9wYWdlLT5kcmFnQ29udHJvbGxlcigpLT5kcmFnRW50ZXJlZCgmZHJhZ0RhdGEpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG1fcGFn
ZS0+ZHJhZ0NvbnRyb2xsZXIoKS0+ZHJhZ1VwZGF0ZWQoJmRyYWdEYXRhKTsKLSAgICAvLyBNYXNr
IHRoZSBvcGVyYXRpb24gYWdhaW5zdCB0aGUgZHJhZyBzb3VyY2UncyBhbGxvd2VkIG9wZXJhdGlv
bnMuCi0gICAgaWYgKCEoZWZmZWN0ICYgZHJhZ0RhdGEuZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25N
YXNrKCkpKQotICAgICAgICBlZmZlY3QgPSBEcmFnT3BlcmF0aW9uTm9uZTsKLSAgICBtX2RyYWdU
YXJnZXREaXNwYXRjaCA9IGZhbHNlOwotCi0gICAgaWYgKG1fZHJvcEVmZmVjdCAhPSBEcm9wRWZm
ZWN0RGVmYXVsdCkgewotICAgICAgICBtX2RyYWdPcGVyYXRpb24gPSAobV9kcm9wRWZmZWN0ICE9
IERyb3BFZmZlY3ROb25lKSA/IFdlYkRyYWdPcGVyYXRpb25Db3B5Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogV2ViRHJhZ09wZXJh
dGlvbk5vbmU7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fZHJhZ09wZXJhdGlvbiA9IHN0YXRpY19j
YXN0PFdlYkRyYWdPcGVyYXRpb24+KGVmZmVjdCk7CisgICAgLy8gRklYTUU6IFRoaXMgaXMgdGVt
cG9yYXJ5IHdoaWxlIHVudGlsIENocm9taXVtIHNpZGUgaXMgdHJhbnNpdGlvbmVkIHRvIHVzZQor
ICAgIC8vIHRoZSBuZXcgZHJhZ2dpbmcgaW50ZXJmYWNlLgorICAgIGlmIChtX2N1cnJlbnREcmFn
RGF0YS5nZXQoKSkgeworICAgICAgICBEcmFnRGF0YSBkcmFnRGF0YSgKKyAgICAgICAgICAgIG1f
Y3VycmVudERyYWdEYXRhLmdldCgpLAorICAgICAgICAgICAgY2xpZW50UG9pbnQsCisgICAgICAg
ICAgICBzY3JlZW5Qb2ludCwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PERyYWdPcGVyYXRpb24+
KG1fb3BlcmF0aW9uc0FsbG93ZWQpKTsKKworICAgICAgICBtX2Ryb3BFZmZlY3QgPSBEcm9wRWZm
ZWN0RGVmYXVsdDsKKyAgICAgICAgbV9kcmFnVGFyZ2V0RGlzcGF0Y2ggPSB0cnVlOworICAgICAg
ICBEcmFnT3BlcmF0aW9uIGVmZmVjdCA9IGRyYWdBY3Rpb24gPT0gRHJhZ0VudGVyID8gbV9wYWdl
LT5kcmFnQ29udHJvbGxlcigpLT5kcmFnRW50ZXJlZCgmZHJhZ0RhdGEpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBtX3BhZ2UtPmRyYWdD
b250cm9sbGVyKCktPmRyYWdVcGRhdGVkKCZkcmFnRGF0YSk7CisgICAgICAgIC8vIE1hc2sgdGhl
IG9wZXJhdGlvbiBhZ2FpbnN0IHRoZSBkcmFnIHNvdXJjZSdzIGFsbG93ZWQgb3BlcmF0aW9ucy4K
KyAgICAgICAgaWYgKCEoZWZmZWN0ICYgZHJhZ0RhdGEuZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25N
YXNrKCkpKQorICAgICAgICAgICAgZWZmZWN0ID0gRHJhZ09wZXJhdGlvbk5vbmU7CisgICAgICAg
IG1fZHJhZ1RhcmdldERpc3BhdGNoID0gZmFsc2U7CisKKyAgICAgICAgaWYgKG1fZHJvcEVmZmVj
dCAhPSBEcm9wRWZmZWN0RGVmYXVsdCkgeworICAgICAgICAgICAgbV9kcmFnT3BlcmF0aW9uID0g
KG1fZHJvcEVmZmVjdCAhPSBEcm9wRWZmZWN0Tm9uZSkgPyBXZWJEcmFnT3BlcmF0aW9uQ29weQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOiBXZWJEcmFnT3BlcmF0aW9uTm9uZTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICBtX2RyYWdPcGVyYXRpb24gPSBzdGF0aWNfY2FzdDxXZWJEcmFnT3BlcmF0aW9uPihlZmZlY3Qp
OworICAgIH0gZWxzZSBpZiAobV9jdXJyZW50RHJhZ0RhdGFOZXcuZ2V0KCkpIHsKKyAgICAgICAg
RHJhZ0RhdGEgZHJhZ0RhdGEoCisgICAgICAgICAgICBtX2N1cnJlbnREcmFnRGF0YU5ldy5nZXQo
KSwKKyAgICAgICAgICAgIGNsaWVudFBvaW50LAorICAgICAgICAgICAgc2NyZWVuUG9pbnQsCisg
ICAgICAgICAgICBzdGF0aWNfY2FzdDxEcmFnT3BlcmF0aW9uPihtX29wZXJhdGlvbnNBbGxvd2Vk
KSk7CisKKyAgICAgICAgbV9kcm9wRWZmZWN0ID0gRHJvcEVmZmVjdERlZmF1bHQ7CisgICAgICAg
IG1fZHJhZ1RhcmdldERpc3BhdGNoID0gdHJ1ZTsKKyAgICAgICAgRHJhZ09wZXJhdGlvbiBlZmZl
Y3QgPSBkcmFnQWN0aW9uID09IERyYWdFbnRlciA/IG1fcGFnZS0+ZHJhZ0NvbnRyb2xsZXIoKS0+
ZHJhZ0VudGVyZWQoJmRyYWdEYXRhKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDogbV9wYWdlLT5kcmFnQ29udHJvbGxlcigpLT5kcmFnVXBk
YXRlZCgmZHJhZ0RhdGEpOworICAgICAgICAvLyBNYXNrIHRoZSBvcGVyYXRpb24gYWdhaW5zdCB0
aGUgZHJhZyBzb3VyY2UncyBhbGxvd2VkIG9wZXJhdGlvbnMuCisgICAgICAgIGlmICghKGVmZmVj
dCAmIGRyYWdEYXRhLmRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFzaygpKSkKKyAgICAgICAgICAg
IGVmZmVjdCA9IERyYWdPcGVyYXRpb25Ob25lOworICAgICAgICBtX2RyYWdUYXJnZXREaXNwYXRj
aCA9IGZhbHNlOworCisgICAgICAgIGlmIChtX2Ryb3BFZmZlY3QgIT0gRHJvcEVmZmVjdERlZmF1
bHQpIHsKKyAgICAgICAgICAgIG1fZHJhZ09wZXJhdGlvbiA9IChtX2Ryb3BFZmZlY3QgIT0gRHJv
cEVmZmVjdE5vbmUpID8gV2ViRHJhZ09wZXJhdGlvbkNvcHkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogV2ViRHJhZ09wZXJh
dGlvbk5vbmU7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV9kcmFnT3BlcmF0aW9uID0g
c3RhdGljX2Nhc3Q8V2ViRHJhZ09wZXJhdGlvbj4oZWZmZWN0KTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBBU1NFUlQoZmFsc2UpOworICAgIH0KIAogICAgIGlmIChkcmFnQWN0aW9uID09IERyYWdP
dmVyKQogICAgICAgICBtX2RyYWdTY3JvbGxUaW1lci0+dHJpZ2dlclNjcm9sbChtYWluRnJhbWVJ
bXBsKCktPmZyYW1lVmlldygpLCBjbGllbnRQb2ludCk7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYlZpZXdJbXBsLmggYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBs
LmgKaW5kZXggYzI5NjEyMS4uZjFmMGJmZCAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJWaWV3SW1wbC5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaApA
QCAtNjMsNiArNjMsNyBAQCBjbGFzcyBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ7CiBjbGFzcyBQb3B1
cENvbnRhaW5lcjsKIGNsYXNzIFBvcHVwTWVudUNsaWVudDsKIGNsYXNzIFJhbmdlOworY2xhc3Mg
UmVhZGFibGVEYXRhT2JqZWN0OwogY2xhc3MgUmVuZGVyVGhlbWU7CiBjbGFzcyBXaWRnZXQ7CiB9
CkBAIC0xNDgsNiArMTQ5LDExIEBAIHB1YmxpYzoKICAgICAgICAgY29uc3QgV2ViUG9pbnQmIGNs
aWVudFBvaW50LAogICAgICAgICBjb25zdCBXZWJQb2ludCYgc2NyZWVuUG9pbnQsCiAgICAgICAg
IFdlYkRyYWdPcGVyYXRpb25zTWFzayBvcGVyYXRpb25zQWxsb3dlZCk7CisgICAgdmlydHVhbCBX
ZWJEcmFnT3BlcmF0aW9uIGRyYWdUYXJnZXREcmFnRW50ZXJOZXcoCisgICAgICAgIGludCBpZGVu
dGl0eSwKKyAgICAgICAgY29uc3QgV2ViUG9pbnQmIGNsaWVudFBvaW50LAorICAgICAgICBjb25z
dCBXZWJQb2ludCYgc2NyZWVuUG9pbnQsCisgICAgICAgIFdlYkRyYWdPcGVyYXRpb25zTWFzayBv
cGVyYXRpb25zQWxsb3dlZCk7CiAgICAgdmlydHVhbCBXZWJEcmFnT3BlcmF0aW9uIGRyYWdUYXJn
ZXREcmFnT3ZlcigKICAgICAgICAgY29uc3QgV2ViUG9pbnQmIGNsaWVudFBvaW50LAogICAgICAg
ICBjb25zdCBXZWJQb2ludCYgc2NyZWVuUG9pbnQsCkBAIC00MTgsNiArNDI0LDggQEAgcHJpdmF0
ZToKIAogICAgIC8vIEEgY29weSBvZiB0aGUgd2ViIGRyb3AgZGF0YSBvYmplY3Qgd2UgcmVjZWl2
ZWQgZnJvbSB0aGUgYnJvd3Nlci4KICAgICBSZWZQdHI8V2ViQ29yZTo6Q2hyb21pdW1EYXRhT2Jq
ZWN0PiBtX2N1cnJlbnREcmFnRGF0YTsKKyAgICAvLyBGSVhNRTogUmVtb3ZlIHRoZSBkdXBsaWNh
dGlvbiBvbmNlIENocm9taXVtIGlzIHN3aXRjaGVkIG92ZXIuCisgICAgUmVmUHRyPFdlYkNvcmU6
OlJlYWRhYmxlRGF0YU9iamVjdD4gbV9jdXJyZW50RHJhZ0RhdGFOZXc7CiAKICAgICAvLyBUaGUg
cG9pbnQgcmVsYXRpdmUgdG8gdGhlIGNsaWVudCBhcmVhIHdoZXJlIHRoZSBtb3VzZSB3YXMgbGFz
dCBwcmVzc2VkCiAgICAgLy8gZG93bi4gVGhpcyBpcyB1c2VkIGJ5IHRoZSBkcmFnIGNsaWVudCB0
byBkZXRlcm1pbmUgd2hhdCB3YXMgdW5kZXIgdGhlCg==
</data>
<flag name="review"
          id="55258"
          type_id="1"
          status="-"
          setter="tony"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66955</attachid>
            <date>2010-09-08 16:05:57 -0700</date>
            <delta_ts>2010-10-07 16:24:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>foo.patch</filename>
            <type>text/plain</type>
            <size>51752</size>
            <attacher name="Daniel Cheng">dcheng</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MTQ3NTYzNC4uZDQ5ODNiZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3MSBAQAorMjAxMC0wOS0wOCAgRGFuaWVsIENoZW5n
ICA8ZGNoZW5nQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBbY2hyb21pdW1dIFByZXBhcmUgQ2xpcGJvYXJkL0RyYWdEYXRhIGZv
ciB0cmFuc2l0aW9uIHRvIG5ldyBkcmFnLWFuZC1kcm9wIGludGVyZmFjZS4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0OTkyCisKKyAgICAgICAgSW4g
b3JkZXIgdG8gYXZvaWQgYnJlYWtpbmcgQ2hyb21pdW0sIHdlIGhhdmUgdGhlIHJlbmRlcmVyIHNp
ZGUgaW1wbGVtZW50CisgICAgICAgIGJvdGggdGhlIG9sZCBhbmQgbmV3IGRyYWdnaW5nIGludGVy
ZmFjZSBhbmQgZ2F0ZSB0aGUgYmVoYXZpb3IgYmFzZWQgb2ZmCisgICAgICAgIG9mIHdoaWNoIERh
dGFPYmplY3QgcG9pbnRlciBpcyBzZXQuIFRoaXMgY2hhbmdlIG9ubHkgYWZmZWN0cyBkcmFnZ2lu
ZworICAgICAgICBpbnRvL292ZXIgdGhlIHJlbmRlcmVyOyBpdCBkb2VzIG5vdCBhZmZlY3Qgc3Rh
cnRpbmcgYSBkcmFnIG9yIGNvcHkgYW5kCisgICAgICAgIHBhc3RlLiBPbmNlIHRoZSBhcHByb3By
aWF0ZSBDaHJvbWl1bSBjaGFuZ2VzIGxhbmQsIHRoZSB0ZW1wb3JhcnkKKyAgICAgICAgY29uZGl0
aW9uYWwgYnJhbmNoZXMgd2lsbCBiZSByZW1vdmVkLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4K
KworICAgICAgICAqIGVkaXRpbmcvY2hyb21pdW0vRWRpdG9yQ2hyb21pdW0uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjpuZXdHZW5lcmFsQ2xpcGJvYXJkKToKKyAgICAgICAgKiBwYWdl
L2Nocm9taXVtL0V2ZW50SGFuZGxlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2
ZW50SGFuZGxlcjo6Y3JlYXRlRHJhZ2dpbmdDbGlwYm9hcmQpOgorICAgICAgICAqIHBsYXRmb3Jt
L2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjbGlw
Ym9hcmRUeXBlRnJvbU1JTUVUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9i
amVjdDo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpjbGVh
ckFsbEV4Y2VwdEZpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6
aGFzRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OnR5cGVzKToK
KyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6Z2V0RGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OmdldFVSTCk6CisgICAgICAgIChXZWJDb3Jl
OjpDaHJvbWl1bURhdGFPYmplY3Q6OmdldEhUTUwpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21p
dW1EYXRhT2JqZWN0OjpoYXNGaWxlbmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1E
YXRhT2JqZWN0OjpmaWxlbmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2Jq
ZWN0OjpDaHJvbWl1bURhdGFPYmplY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0No
cm9taXVtRGF0YU9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0Ojp+Q2hyb21p
dW1EYXRhT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6Y2xl
YXJVUkwpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpoYXNWYWxpZFVS
TCk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OmdldFVSTCk6CisgICAg
ICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OnNldFVSTCk6CisgICAgICAgICogcGxh
dGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
bm9ybWFsaXplVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRDaHJvbWl1bTo6Y2xl
YXJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENocm9taXVtOjpnZXREYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENocm9taXVtOjpzZXREYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OkNsaXBib2FyZENocm9taXVtOjp0eXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpD
bGlwYm9hcmRDaHJvbWl1bTo6ZmlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVJbWFnZVRv
RGF0YU9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRDaHJvbWl1bTo6ZGVjbGFy
ZUFuZFdyaXRlRHJhZ0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENocm9taXVt
Ojp3cml0ZVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRDaHJvbWl1bTo6d3JpdGVS
YW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRDaHJvbWl1bTo6d3JpdGVQbGFpblRl
eHQpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtV2luLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENocm9taXVtOjp2YWxpZGF0ZUZpbGVOYW1l
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9EcmFnRGF0YUNocm9taXVtLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmNvbnRhaW5zSFRNTCk6CisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0
YTo6Y29udGFpbnNVUkwpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmFzVVJMKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjpjb250YWluc0ZpbGVzKToKKyAgICAgICAgKFdlYkNv
cmU6OkRyYWdEYXRhOjphc0ZpbGVuYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0YTo6
Y29udGFpbnNQbGFpblRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmFzUGxhaW5U
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjpjYW5TbWFydFJlcGxhY2UpOgorICAg
ICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmFzRnJhZ21lbnQpOgorICAgICAgICAqIHBsYXRmb3Jt
L2Nocm9taXVtL0RyYWdEYXRhUmVmLmg6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vUmVh
ZGFibGVEYXRhT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlYWRhYmxlRGF0YU9iamVj
dDo6UmVhZGFibGVEYXRhT2JqZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9SZWFk
YWJsZURhdGFPYmplY3QuaDoKKwogMjAxMC0wOS0wNyAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBw
bGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmUgSHlhdHQuCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2VkaXRpbmcvY2hyb21pdW0vRWRpdG9yQ2hyb21pdW0uY3BwIGIvV2ViQ29yZS9lZGl0
aW5nL2Nocm9taXVtL0VkaXRvckNocm9taXVtLmNwcAppbmRleCA3YTEzYjEyLi5hOTU2ZmYwIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvY2hyb21pdW0vRWRpdG9yQ2hyb21pdW0uY3BwCisr
KyBiL1dlYkNvcmUvZWRpdGluZy9jaHJvbWl1bS9FZGl0b3JDaHJvbWl1bS5jcHAKQEAgLTM5LDcg
KzM5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBQYXNzUmVmUHRyPENsaXBib2FyZD4gRWRp
dG9yOjpuZXdHZW5lcmFsQ2xpcGJvYXJkKENsaXBib2FyZEFjY2Vzc1BvbGljeSBwb2xpY3ksIEZy
YW1lKiBmcmFtZSkKIHsKLSAgICByZXR1cm4gQ2xpcGJvYXJkQ2hyb21pdW06OmNyZWF0ZShmYWxz
ZSwgQ2hyb21pdW1EYXRhT2JqZWN0OjpjcmVhdGUoKSwgcG9saWN5LCBmcmFtZSk7CisgICAgcmV0
dXJuIENsaXBib2FyZENocm9taXVtOjpjcmVhdGUoZmFsc2UsIENocm9taXVtRGF0YU9iamVjdDo6
Y3JlYXRlKGZhbHNlKSwgcG9saWN5LCBmcmFtZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9jaHJvbWl1bS9FdmVudEhhbmRsZXJDaHJvbWl1
bS5jcHAgYi9XZWJDb3JlL3BhZ2UvY2hyb21pdW0vRXZlbnRIYW5kbGVyQ2hyb21pdW0uY3BwCmlu
ZGV4IDcxOTE2M2YuLjMyNTEwZTIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9jaHJvbWl1bS9F
dmVudEhhbmRsZXJDaHJvbWl1bS5jcHAKKysrIGIvV2ViQ29yZS9wYWdlL2Nocm9taXVtL0V2ZW50
SGFuZGxlckNocm9taXVtLmNwcApAQCAtMTI4LDcgKzEyOCw3IEBAIGJvb2wgRXZlbnRIYW5kbGVy
OjpldmVudEFjdGl2YXRlZFZpZXcoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldmVudCkgY29u
c3QKIAogUGFzc1JlZlB0cjxDbGlwYm9hcmQ+IEV2ZW50SGFuZGxlcjo6Y3JlYXRlRHJhZ2dpbmdD
bGlwYm9hcmQoKSBjb25zdAogewotICAgIFJlZlB0cjxDaHJvbWl1bURhdGFPYmplY3Q+IGRhdGFP
YmplY3QgPSBDaHJvbWl1bURhdGFPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxDaHJvbWl1
bURhdGFPYmplY3Q+IGRhdGFPYmplY3QgPSBDaHJvbWl1bURhdGFPYmplY3Q6OmNyZWF0ZSh0cnVl
KTsKICAgICByZXR1cm4gQ2xpcGJvYXJkQ2hyb21pdW06OmNyZWF0ZSh0cnVlLCBkYXRhT2JqZWN0
LmdldCgpLCBDbGlwYm9hcmRXcml0YWJsZSwgbV9mcmFtZSk7CiB9CiAKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmNwcCBiL1dlYkNvcmUv
cGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmNwcAppbmRleCA4MzUyNjY5Li43
ZGJmMjEwIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0
YU9iamVjdC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFP
YmplY3QuY3BwCkBAIC0zMSw1NiArMzEsMjQ5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiQ2hyb21pdW1EYXRhT2JqZWN0LmgiCiAKKyNpbmNsdWRlICJDaHJvbWl1bUJyaWRnZS5o
IgorI2luY2x1ZGUgIlBhc3RlYm9hcmQuaCIKKyNpbmNsdWRlICJQYXN0ZWJvYXJkUHJpdmF0ZS5o
IgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKy8vIEZJWE1FOiBVdGlsaXRpZXMgdGVtcG9yYXJp
bHkgY29waWVkIGZyb20gQ2xpcGJvYXJkQ2hyb21pdW0uCitlbnVtIENsaXBib2FyZERhdGFUeXBl
IHsKKyAgICBDbGlwYm9hcmREYXRhVHlwZU5vbmUsCisKKyAgICBDbGlwYm9hcmREYXRhVHlwZVVS
TCwKKyAgICBDbGlwYm9hcmREYXRhVHlwZVVSSUxpc3QsCisgICAgQ2xpcGJvYXJkRGF0YVR5cGVE
b3dubG9hZFVSTCwKKyAgICBDbGlwYm9hcmREYXRhVHlwZVBsYWluVGV4dCwKKyAgICBDbGlwYm9h
cmREYXRhVHlwZUhUTUwsCisKKyAgICBDbGlwYm9hcmREYXRhVHlwZU90aGVyLAorfTsKKworLy8g
UGVyIFJGQyAyNDgzLCB0aGUgbGluZSBzZXBhcmF0b3IgZm9yICJ0ZXh0Ly4uLiIgTUlNRSB0eXBl
cyBpcyBDUi1MRi4KK3N0YXRpYyBjaGFyIGNvbnN0KiBjb25zdCB0ZXh0TUlNRVR5cGVMaW5lU2Vw
YXJhdG9yID0gIlxyXG4iOworCitzdGF0aWMgQ2xpcGJvYXJkRGF0YVR5cGUgY2xpcGJvYXJkVHlw
ZUZyb21NSU1FVHlwZShjb25zdCBTdHJpbmcmIHR5cGUpCit7CisgICAgU3RyaW5nIGNsZWFuVHlw
ZSA9IHR5cGUuc3RyaXBXaGl0ZVNwYWNlKCkubG93ZXIoKTsKKyAgICBpZiAoY2xlYW5UeXBlLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIENsaXBib2FyZERhdGFUeXBlTm9uZTsKKworICAgIC8v
IEluY2x1ZGVzIHR3byBzcGVjaWFsIGNhc2VzIGZvciBJRSBjb21wYXRpYmlsaXR5LgorICAgIGlm
IChjbGVhblR5cGUgPT0gInRleHQiIHx8IGNsZWFuVHlwZSA9PSAidGV4dC9wbGFpbiIgfHwgY2xl
YW5UeXBlLnN0YXJ0c1dpdGgoInRleHQvcGxhaW47IikpCisgICAgICAgIHJldHVybiBDbGlwYm9h
cmREYXRhVHlwZVBsYWluVGV4dDsKKyAgICBpZiAoY2xlYW5UeXBlID09ICJ1cmwiKQorICAgICAg
ICByZXR1cm4gQ2xpcGJvYXJkRGF0YVR5cGVVUkw7CisgICAgaWYgKGNsZWFuVHlwZSA9PSAidGV4
dC91cmktbGlzdCIpCisgICAgICAgIHJldHVybiBDbGlwYm9hcmREYXRhVHlwZVVSSUxpc3Q7Cisg
ICAgaWYgKGNsZWFuVHlwZSA9PSAiZG93bmxvYWR1cmwiKQorICAgICAgICByZXR1cm4gQ2xpcGJv
YXJkRGF0YVR5cGVEb3dubG9hZFVSTDsKKyAgICBpZiAoY2xlYW5UeXBlID09ICJ0ZXh0L2h0bWwi
KQorICAgICAgICByZXR1cm4gQ2xpcGJvYXJkRGF0YVR5cGVIVE1MOworCisgICAgcmV0dXJuIENs
aXBib2FyZERhdGFUeXBlT3RoZXI7Cit9CisKIHZvaWQgQ2hyb21pdW1EYXRhT2JqZWN0OjpjbGVh
cigpCiB7CiAgICAgY2xlYXJBbGxFeGNlcHRGaWxlcygpOwotICAgIGZpbGVuYW1lcy5jbGVhcigp
OworICAgIG1fZmlsZW5hbWVzLmNsZWFyKCk7CiB9CiAKIHZvaWQgQ2hyb21pdW1EYXRhT2JqZWN0
OjpjbGVhckFsbEV4Y2VwdEZpbGVzKCkKIHsKLSAgICB1cmwgPSBLVVJMKCk7Ci0gICAgdXJsVGl0
bGUgPSAiIjsKLSAgICB1cmlMaXN0LmNsZWFyKCk7Ci0gICAgZG93bmxvYWRNZXRhZGF0YSA9ICIi
OwotICAgIGZpbGVFeHRlbnNpb24gPSAiIjsKLSAgICBwbGFpblRleHQgPSAiIjsKLSAgICB0ZXh0
SHRtbCA9ICIiOwotICAgIGh0bWxCYXNlVXJsID0gS1VSTCgpOwotICAgIGZpbGVDb250ZW50Rmls
ZW5hbWUgPSAiIjsKLSAgICBpZiAoZmlsZUNvbnRlbnQpCi0gICAgICAgIGZpbGVDb250ZW50LT5j
bGVhcigpOworICAgIG1fdXJsID0gS1VSTCgpOworICAgIG1fdXJsVGl0bGUgPSAiIjsKKyAgICBt
X3VyaUxpc3QuY2xlYXIoKTsKKyAgICBtX2Rvd25sb2FkTWV0YWRhdGEgPSAiIjsKKyAgICBtX2Zp
bGVFeHRlbnNpb24gPSAiIjsKKyAgICBtX3BsYWluVGV4dCA9ICIiOworICAgIG1fdGV4dEh0bWwg
PSAiIjsKKyAgICBtX2h0bWxCYXNlVXJsID0gS1VSTCgpOworICAgIG1fZmlsZUNvbnRlbnRGaWxl
bmFtZSA9ICIiOworICAgIGlmIChtX2ZpbGVDb250ZW50KQorICAgICAgICBtX2ZpbGVDb250ZW50
LT5jbGVhcigpOwogfQogCiBib29sIENocm9taXVtRGF0YU9iamVjdDo6aGFzRGF0YSgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuICF1cmwuaXNFbXB0eSgpCi0gICAgICAgIHx8ICF1cmlMaXN0LmlzRW1w
dHkoKQotICAgICAgICB8fCAhZG93bmxvYWRNZXRhZGF0YS5pc0VtcHR5KCkKLSAgICAgICAgfHwg
IWZpbGVFeHRlbnNpb24uaXNFbXB0eSgpCi0gICAgICAgIHx8ICFmaWxlbmFtZXMuaXNFbXB0eSgp
Ci0gICAgICAgIHx8ICFwbGFpblRleHQuaXNFbXB0eSgpCi0gICAgICAgIHx8ICF0ZXh0SHRtbC5p
c0VtcHR5KCkKLSAgICAgICAgfHwgZmlsZUNvbnRlbnQ7CisgICAgcmV0dXJuICFtX3VybC5pc0Vt
cHR5KCkKKyAgICAgICAgfHwgIW1fdXJpTGlzdC5pc0VtcHR5KCkKKyAgICAgICAgfHwgIW1fZG93
bmxvYWRNZXRhZGF0YS5pc0VtcHR5KCkKKyAgICAgICAgfHwgIW1fZmlsZUV4dGVuc2lvbi5pc0Vt
cHR5KCkKKyAgICAgICAgfHwgIW1fZmlsZW5hbWVzLmlzRW1wdHkoKQorICAgICAgICB8fCAhbV9w
bGFpblRleHQuaXNFbXB0eSgpCisgICAgICAgIHx8ICFtX3RleHRIdG1sLmlzRW1wdHkoKQorICAg
ICAgICB8fCBtX2ZpbGVDb250ZW50OworfQorCitIYXNoU2V0PFN0cmluZz4gQ2hyb21pdW1EYXRh
T2JqZWN0Ojp0eXBlcygpIGNvbnN0Cit7CisgICAgSGFzaFNldDxTdHJpbmc+IHJlc3VsdHM7Cisg
ICAgaWYgKCFtX2ZpbGVuYW1lcy5pc0VtcHR5KCkpCisgICAgICAgIHJlc3VsdHMuYWRkKCJGaWxl
cyIpOworCisgICAgLy8gSGFjayBmb3IgVVJMcy4gZmlsZSBVUkxzIGFyZSB1c2VkIGludGVybmFs
bHkgZm9yIGRyb3AncyBkZWZhdWx0IGFjdGlvbiwgYnV0IHdlIGRvbid0IHdhbnQKKyAgICAvLyB0
byBleHBvc2UgdGhlbSB0byB0aGUgcGFnZSwgc28gd2UgZmlsdGVyIHRoZW0gb3V0IGhlcmUuCisg
ICAgaWYgKG1fdXJsLmlzVmFsaWQoKSAmJiAhbV91cmwuaXNMb2NhbEZpbGUoKSkgeworICAgICAg
ICBBU1NFUlQoIW1fdXJpTGlzdC5pc0VtcHR5KCkpOworICAgICAgICByZXN1bHRzLmFkZCgiVVJM
Iik7CisgICAgfQorCisgICAgaWYgKCFtX3VyaUxpc3QuaXNFbXB0eSgpKSB7CisgICAgICAgIC8v
IFZlcmlmeSB0aGF0IHRoZSBVUkkgbGlzdCBjb250YWlucyBhdCBsZWFzdCBvbmUgbm9uLWZpbGUg
VVJMLgorICAgICAgICBmb3IgKFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1f
dXJpTGlzdC5iZWdpbigpOworICAgICAgICAgICAgIGl0ICE9IG1fdXJpTGlzdC5lbmQoKTsgKytp
dCkgeworICAgICAgICAgICAgaWYgKCFwcm90b2NvbElzKCppdCwgImZpbGUiKSkgeworICAgICAg
ICAgICAgICAgIC8vIE5vdGUgdGhhdCBldmVuIGlmIHRoZSBVUkkgbGlzdCBpcyBub3QgZW1wdHks
IGl0IG1heSBub3QgYWN0dWFsbHkKKyAgICAgICAgICAgICAgICAvLyBjb250YWluIGEgdmFsaWQg
VVJMLCBzbyB3ZSBjYW4ndCByZXR1cm4gIlVSTCIgaGVyZS4KKyAgICAgICAgICAgICAgICByZXN1
bHRzLmFkZCgidGV4dC91cmktbGlzdCIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFtX3BsYWluVGV4dC5pc0VtcHR5
KCkpIHsKKyAgICAgICAgcmVzdWx0cy5hZGQoIlRleHQiKTsKKyAgICAgICAgcmVzdWx0cy5hZGQo
InRleHQvcGxhaW4iKTsKKyAgICB9CisKKyAgICBpZiAoIW1fdGV4dEh0bWwuaXNFbXB0eSgpKQor
ICAgICAgICByZXN1bHRzLmFkZCgidGV4dC9odG1sIik7CisKKyAgICByZXR1cm4gcmVzdWx0czsK
K30KKworU3RyaW5nIENocm9taXVtRGF0YU9iamVjdDo6Z2V0RGF0YShjb25zdCBTdHJpbmcmIHR5
cGUsIGJvb2wmIHN1Y2NlZWRlZCkgY29uc3QKK3sKKyAgICBDbGlwYm9hcmREYXRhVHlwZSBkYXRh
VHlwZSA9IGNsaXBib2FyZFR5cGVGcm9tTUlNRVR5cGUodHlwZSk7CisgICAgc3dpdGNoIChkYXRh
VHlwZSkgeworICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVOb25lOgorICAgICAgICByZXR1cm4g
U3RyaW5nKCk7CisKKyAgICAvLyBIYWNrIGZvciBVUkxzLiBmaWxlIFVSTHMgYXJlIHVzZWQgaW50
ZXJuYWxseSBmb3IgZHJvcCdzIGRlZmF1bHQgYWN0aW9uLCBidXQgd2UgZG9uJ3Qgd2FudAorICAg
IC8vIHRvIGV4cG9zZSB0aGVtIHRvIHRoZSBwYWdlLCBzbyB3ZSBmaWx0ZXIgdGhlbSBvdXQgaGVy
ZS4KKyAgICBjYXNlIENsaXBib2FyZERhdGFUeXBlVVJJTGlzdDoKKyAgICAgICAgeworICAgICAg
ICAgICAgU3RyaW5nIHRleHQ7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
dXJpTGlzdC5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgdXJp
ID0gbV91cmlMaXN0W2ldOworICAgICAgICAgICAgICAgIGlmIChwcm90b2NvbElzKHVyaSwgImZp
bGUiKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgQVNT
RVJUKCF1cmkuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgICAgICBpZiAoIXRleHQuaXNFbXB0eSgp
KQorICAgICAgICAgICAgICAgICAgICB0ZXh0LmFwcGVuZCh0ZXh0TUlNRVR5cGVMaW5lU2VwYXJh
dG9yKTsKKyAgICAgICAgICAgICAgICAvLyBVUklzIGhhdmUgYWxyZWFkeSBiZWVuIGNhbm9uaWNh
bGl6ZWQsIHNvIGNvcHkgZXZlcnl0aGluZyB2ZXJiYXRpbS4KKyAgICAgICAgICAgICAgICB0ZXh0
LmFwcGVuZCh1cmkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3VjY2VlZGVkID0gIXRl
eHQuaXNFbXB0eSgpOworICAgICAgICAgICAgcmV0dXJuIHRleHQ7CisgICAgICAgIH0KKworICAg
IGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVVUkw6CisgICAgICAgIC8vIEluIGNhc2Ugb2YgYSBwcmV2
aW91cyBzZXREYXRhKCd0ZXh0L3VyaS1saXN0JyksIHNldERhdGEoKSBoYXMgYWxyZWFkeQorICAg
ICAgICAvLyBwcmVwYXJlZCB0aGUgJ3VybCcgbWVtYmVyLCBzbyB3ZSBjYW4ganVzdCByZXRyaWV2
ZSBpdCBoZXJlLgorICAgICAgICBpZiAoIW1fdXJsLmlzRW1wdHkoKSAmJiAhbV91cmwuaXNMb2Nh
bEZpbGUoKSkgeworICAgICAgICAgICAgc3VjY2VlZGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJl
dHVybiBtX3VybC5zdHJpbmcoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7
CisKKyAgICBjYXNlIENsaXBib2FyZERhdGFUeXBlRG93bmxvYWRVUkw6CisgICAgICAgIHN1Y2Nl
ZWRlZCA9ICFtX2Rvd25sb2FkTWV0YWRhdGEuaXNFbXB0eSgpOworICAgICAgICByZXR1cm4gbV9k
b3dubG9hZE1ldGFkYXRhOworICAgIAorICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVQbGFpblRl
eHQ6CisgICAgICAgIGlmICghbV9pc0ZvckRyYWdnaW5nKSB7CisgICAgICAgICAgICAvLyBJZiB0
aGlzIGlzbid0IGZvciBhIGRyYWcsIGl0J3MgZm9yIGEgY3V0L3Bhc3RlIGV2ZW50IGhhbmRsZXIu
CisgICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIHdlIG5lZWQgdG8gY2hlY2sgdGhlIGNsaXBi
b2FyZC4KKyAgICAgICAgICAgIFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIgYnVm
ZmVyID0gCisgICAgICAgICAgICAgICAgUGFzdGVib2FyZDo6Z2VuZXJhbFBhc3RlYm9hcmQoKS0+
aXNTZWxlY3Rpb25Nb2RlKCkgPworICAgICAgICAgICAgICAgIFBhc3RlYm9hcmRQcml2YXRlOjpT
ZWxlY3Rpb25CdWZmZXIgOiAKKyAgICAgICAgICAgICAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6U3Rh
bmRhcmRCdWZmZXI7CisgICAgICAgICAgICBTdHJpbmcgdGV4dCA9IENocm9taXVtQnJpZGdlOjpj
bGlwYm9hcmRSZWFkUGxhaW5UZXh0KGJ1ZmZlcik7CisgICAgICAgICAgICBzdWNjZWVkZWQgPSAh
dGV4dC5pc0VtcHR5KCk7CisgICAgICAgICAgICByZXR1cm4gdGV4dDsKKyAgICAgICAgfQorICAg
ICAgICAvLyBPdGhlcndpc2UgcmV0dXJuIHdoYXRldmVyIGlzIHN0b3JlZCBpbiBwbGFpblRleHQu
CisgICAgICAgIHN1Y2NlZWRlZCA9ICFtX3BsYWluVGV4dC5pc0VtcHR5KCk7CisgICAgICAgIHJl
dHVybiBtX3BsYWluVGV4dDsKKworICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVIVE1MOgorICAg
ICAgICBpZiAoIW1faXNGb3JEcmFnZ2luZykgeworICAgICAgICAgICAgLy8gSWYgdGhpcyBpc24n
dCBmb3IgYSBkcmFnLCBpdCdzIGZvciBhIGN1dC9wYXN0ZSBldmVudCBoYW5kbGVyLgorICAgICAg
ICAgICAgLy8gSW4gdGhpcyBjYXNlLCB3ZSBuZWVkIHRvIGNoZWNrIHRoZSBjbGlwYm9hcmQuCisg
ICAgICAgICAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyIGJ1ZmZlciA9IAor
ICAgICAgICAgICAgICAgIFBhc3RlYm9hcmQ6OmdlbmVyYWxQYXN0ZWJvYXJkKCktPmlzU2VsZWN0
aW9uTW9kZSgpID8KKyAgICAgICAgICAgICAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6U2VsZWN0aW9u
QnVmZmVyIDogCisgICAgICAgICAgICAgICAgUGFzdGVib2FyZFByaXZhdGU6OlN0YW5kYXJkQnVm
ZmVyOworICAgICAgICAgICAgU3RyaW5nIGh0bWxUZXh0OworICAgICAgICAgICAgS1VSTCBzb3Vy
Y2VVUkw7CisgICAgICAgICAgICBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkUmVhZEhUTUwoYnVm
ZmVyLCAmaHRtbFRleHQsICZzb3VyY2VVUkwpOworICAgICAgICAgICAgc3VjY2VlZGVkID0gIWh0
bWxUZXh0LmlzRW1wdHkoKTsKKyAgICAgICAgICAgIHJldHVybiBodG1sVGV4dDsKKyAgICAgICAg
fQorICAgICAgICAvLyBPdGhlcndpc2UgcmV0dXJuIHdoYXRldmVyIGlzIHN0b3JlZCBpbiB0ZXh0
SHRtbC4KKyAgICAgICAgc3VjY2VlZGVkID0gIW1fdGV4dEh0bWwuaXNFbXB0eSgpOworICAgICAg
ICByZXR1cm4gbV90ZXh0SHRtbDsKKworICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVPdGhlcjoK
KyAgICAgICAgLy8gbm90IHlldCBpbXBsZW1lbnRlZCwgc2VlIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0zNDQxMAorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAg
fQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFN0cmluZygpOworfQor
CisKK1N0cmluZyBDaHJvbWl1bURhdGFPYmplY3Q6OmdldFVSTChTdHJpbmcqIHRpdGxlKSBjb25z
dAoreworICAgIGlmICh0aXRsZSkKKyAgICAgICAgKnRpdGxlID0gbV91cmxUaXRsZTsKKyAgICBy
ZXR1cm4gbV91cmw7Cit9CisKK1N0cmluZyBDaHJvbWl1bURhdGFPYmplY3Q6OmdldEhUTUwoU3Ry
aW5nKiBiYXNlVVJMKSBjb25zdAoreworICAgIGlmIChiYXNlVVJMKQorICAgICAgICAqYmFzZVVS
TCA9IG1faHRtbEJhc2VVcmw7CisKKyAgICByZXR1cm4gbV90ZXh0SHRtbDsKK30KKworYm9vbCBD
aHJvbWl1bURhdGFPYmplY3Q6Omhhc0ZpbGVuYW1lcygpIGNvbnN0Cit7CisgICAgcmV0dXJuICFt
X2ZpbGVuYW1lcy5pc0VtcHR5KCk7Cit9CisKK1ZlY3RvcjxTdHJpbmc+IENocm9taXVtRGF0YU9i
amVjdDo6ZmlsZW5hbWVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9maWxlbmFtZXM7Cit9CisK
KworQ2hyb21pdW1EYXRhT2JqZWN0OjpDaHJvbWl1bURhdGFPYmplY3QoYm9vbCBpc0ZvckRyYWdn
aW5nKQorICAgIDogbV9pc0ZvckRyYWdnaW5nKGlzRm9yRHJhZ2dpbmcpCit7CiB9CiAKIENocm9t
aXVtRGF0YU9iamVjdDo6Q2hyb21pdW1EYXRhT2JqZWN0KGNvbnN0IENocm9taXVtRGF0YU9iamVj
dCYgb3RoZXIpCiAgICAgOiBSZWZDb3VudGVkPENocm9taXVtRGF0YU9iamVjdD4oKQotICAgICwg
dXJsVGl0bGUob3RoZXIudXJsVGl0bGUpCi0gICAgLCBkb3dubG9hZE1ldGFkYXRhKG90aGVyLmRv
d25sb2FkTWV0YWRhdGEpCi0gICAgLCBmaWxlRXh0ZW5zaW9uKG90aGVyLmZpbGVFeHRlbnNpb24p
Ci0gICAgLCBmaWxlbmFtZXMob3RoZXIuZmlsZW5hbWVzKQotICAgICwgcGxhaW5UZXh0KG90aGVy
LnBsYWluVGV4dCkKLSAgICAsIHRleHRIdG1sKG90aGVyLnRleHRIdG1sKQotICAgICwgaHRtbEJh
c2VVcmwob3RoZXIuaHRtbEJhc2VVcmwpCi0gICAgLCBmaWxlQ29udGVudEZpbGVuYW1lKG90aGVy
LmZpbGVDb250ZW50RmlsZW5hbWUpCi0gICAgLCB1cmwob3RoZXIudXJsKQotICAgICwgdXJpTGlz
dChvdGhlci51cmlMaXN0KQorICAgICwgbV9pc0ZvckRyYWdnaW5nKG90aGVyLm1faXNGb3JEcmFn
Z2luZykKKyAgICAsIG1fdXJsVGl0bGUob3RoZXIubV91cmxUaXRsZSkKKyAgICAsIG1fZG93bmxv
YWRNZXRhZGF0YShvdGhlci5tX2Rvd25sb2FkTWV0YWRhdGEpCisgICAgLCBtX2ZpbGVFeHRlbnNp
b24ob3RoZXIubV9maWxlRXh0ZW5zaW9uKQorICAgICwgbV9maWxlbmFtZXMob3RoZXIubV9maWxl
bmFtZXMpCisgICAgLCBtX3BsYWluVGV4dChvdGhlci5tX3BsYWluVGV4dCkKKyAgICAsIG1fdGV4
dEh0bWwob3RoZXIubV90ZXh0SHRtbCkKKyAgICAsIG1faHRtbEJhc2VVcmwob3RoZXIubV9odG1s
QmFzZVVybCkKKyAgICAsIG1fZmlsZUNvbnRlbnRGaWxlbmFtZShvdGhlci5tX2ZpbGVDb250ZW50
RmlsZW5hbWUpCisgICAgLCBtX3VybChvdGhlci5tX3VybCkKKyAgICAsIG1fdXJpTGlzdChvdGhl
ci5tX3VyaUxpc3QpCiB7Ci0gICAgaWYgKG90aGVyLmZpbGVDb250ZW50LmdldCgpKQotICAgICAg
ICBmaWxlQ29udGVudCA9IG90aGVyLmZpbGVDb250ZW50LT5jb3B5KCk7CisgICAgaWYgKG90aGVy
Lm1fZmlsZUNvbnRlbnQuZ2V0KCkpCisgICAgICAgIG1fZmlsZUNvbnRlbnQgPSBvdGhlci5tX2Zp
bGVDb250ZW50LT5jb3B5KCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmggYi9XZWJD
b3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5oCmluZGV4IGFmMGEzZmEu
LjYyODgxYWMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1E
YXRhT2JqZWN0LmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFP
YmplY3QuaApAQCAtMzQsMTkgKzM0LDIxIEBACiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUg
IlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSA8
d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewotCisgICAKICAgICAvLyBBIGRhdGEgb2JqZWN0IGZvciBob2xkaW5nIGRhdGEgdGhh
dCB3b3VsZCBiZSBpbiBhIGNsaXBib2FyZCBvciBtb3ZlZAogICAgIC8vIGR1cmluZyBhIGRyYWct
bi1kcm9wIG9wZXJhdGlvbi4gIFRoaXMgaXMgdGhlIGRhdGEgdGhhdCBXZWJDb3JlIGlzIGF3YXJl
CiAgICAgLy8gb2YgYW5kIGlzIG5vdCBzcGVjaWZpYyB0byBhIHBsYXRmb3JtLgogICAgIGNsYXNz
IENocm9taXVtRGF0YU9iamVjdCA6IHB1YmxpYyBSZWZDb3VudGVkPENocm9taXVtRGF0YU9iamVj
dD4gewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2hyb21pdW1EYXRh
T2JqZWN0PiBjcmVhdGUoKQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDaHJvbWl1bURhdGFP
YmplY3Q+IGNyZWF0ZShib29sIGlzRm9yRHJhZ2dpbmcpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgQ2hyb21pdW1EYXRhT2JqZWN0KTsKKyAgICAgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgQ2hyb21pdW1EYXRhT2JqZWN0KGlzRm9yRHJhZ2dpbmcpKTsKICAg
ICAgICAgfQogCiAgICAgICAgIFBhc3NSZWZQdHI8Q2hyb21pdW1EYXRhT2JqZWN0PiBjb3B5KCkg
Y29uc3QKQEAgLTU0LDYwICs1Niw3NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IENocm9taXVtRGF0YU9iamVjdCgqdGhpcykpOwogICAgICAg
ICB9CiAKKyAgICAgICAgfkNocm9taXVtRGF0YU9iamVjdCgpIHt9CisKICAgICAgICAgdm9pZCBj
bGVhcigpOwogICAgICAgICB2b2lkIGNsZWFyQWxsRXhjZXB0RmlsZXMoKTsKLSAgICAgICAgYm9v
bCBoYXNEYXRhKCkgY29uc3Q7CisKKyAgICAgICAgLy8gRklYTUU6IFRlbXBvcmFyeSB2aXJ0dWFs
IGludGVyZmFjZSBmb3IgUmVhZGFibGVEYXRhT2JqZWN0CisgICAgICAgIC8vIGNvbXBhdGliaWxp
dHkuCisgICAgICAgIHZpcnR1YWwgYm9vbCBoYXNEYXRhKCkgY29uc3Q7CisgICAgICAgIHZpcnR1
YWwgSGFzaFNldDxTdHJpbmc+IHR5cGVzKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgU3RyaW5n
IGdldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBib29sJiBzdWNjZWVkZWQpIGNvbnN0OworCisg
ICAgICAgIHZpcnR1YWwgU3RyaW5nIGdldFVSTChTdHJpbmcqIHRpdGxlKSBjb25zdDsKKyAgICAg
ICAgdmlydHVhbCBTdHJpbmcgZ2V0SFRNTChTdHJpbmcqIGJhc2VVUkwpIGNvbnN0OworCisgICAg
ICAgIHZpcnR1YWwgYm9vbCBoYXNGaWxlbmFtZXMoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBW
ZWN0b3I8U3RyaW5nPiBmaWxlbmFtZXMoKSBjb25zdDsKIAogICAgICAgICB2b2lkIGNsZWFyVVJM
KCkKICAgICAgICAgewotICAgICAgICAgICAgdXJsID0gS1VSTCgpOwotICAgICAgICAgICAgdXJp
TGlzdC5jbGVhcigpOwotICAgICAgICAgICAgdXJsVGl0bGUgPSAiIjsKKyAgICAgICAgICAgIG1f
dXJsID0gS1VSTCgpOworICAgICAgICAgICAgbV91cmlMaXN0LmNsZWFyKCk7CisgICAgICAgICAg
ICBtX3VybFRpdGxlID0gIiI7CiAgICAgICAgIH0KIAogICAgICAgICBib29sIGhhc1ZhbGlkVVJM
KCkgY29uc3QKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHVybC5pc1ZhbGlkKCk7Cisg
ICAgICAgICAgICByZXR1cm4gbV91cmwuaXNWYWxpZCgpOwogICAgICAgICB9CiAKICAgICAgICAg
S1VSTCBnZXRVUkwoKSBjb25zdAogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gdXJsOwor
ICAgICAgICAgICAgcmV0dXJuIG1fdXJsOwogICAgICAgICB9CiAKICAgICAgICAgdm9pZCBzZXRV
UkwoY29uc3QgS1VSTCYgbmV3VVJMKQogICAgICAgICB7Ci0gICAgICAgICAgICB1cmwgPSBuZXdV
Ukw7Ci0gICAgICAgICAgICB1cmlMaXN0LmNsZWFyKCk7CisgICAgICAgICAgICBtX3VybCA9IG5l
d1VSTDsKKyAgICAgICAgICAgIG1fdXJpTGlzdC5jbGVhcigpOwogICAgICAgICAgICAgaWYgKG5l
d1VSTC5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgdXJp
TGlzdC5hcHBlbmQobmV3VVJMLnN0cmluZygpKTsKKyAgICAgICAgICAgIG1fdXJpTGlzdC5hcHBl
bmQobmV3VVJMLnN0cmluZygpKTsKICAgICAgICAgfQogCi0gICAgICAgIFN0cmluZyB1cmxUaXRs
ZTsKKyAgICAgICAgU3RyaW5nIG1fdXJsVGl0bGU7CiAKLSAgICAgICAgU3RyaW5nIGRvd25sb2Fk
TWV0YWRhdGE7CisgICAgICAgIFN0cmluZyBtX2Rvd25sb2FkTWV0YWRhdGE7CiAKLSAgICAgICAg
U3RyaW5nIGZpbGVFeHRlbnNpb247Ci0gICAgICAgIFZlY3RvcjxTdHJpbmc+IGZpbGVuYW1lczsK
KyAgICAgICAgU3RyaW5nIG1fZmlsZUV4dGVuc2lvbjsKKyAgICAgICAgVmVjdG9yPFN0cmluZz4g
bV9maWxlbmFtZXM7CiAKLSAgICAgICAgU3RyaW5nIHBsYWluVGV4dDsKKyAgICAgICAgU3RyaW5n
IG1fcGxhaW5UZXh0OwogCi0gICAgICAgIFN0cmluZyB0ZXh0SHRtbDsKLSAgICAgICAgS1VSTCBo
dG1sQmFzZVVybDsKKyAgICAgICAgU3RyaW5nIG1fdGV4dEh0bWw7CisgICAgICAgIEtVUkwgbV9o
dG1sQmFzZVVybDsKIAotICAgICAgICBTdHJpbmcgZmlsZUNvbnRlbnRGaWxlbmFtZTsKLSAgICAg
ICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZmlsZUNvbnRlbnQ7CisgICAgICAgIFN0cmluZyBtX2Zp
bGVDb250ZW50RmlsZW5hbWU7CisgICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1fZmlsZUNv
bnRlbnQ7CiAKICAgICBwcml2YXRlOgotICAgICAgICAvLyBVUkwgYW5kIHVyaS1saXN0IGFyZSBs
aW5rZWQsIHNvIHRoZXkgc2hvdWxkIG5vdCBiZSBhY2Nlc3NlZCBpbmRpdmlkdWFsbHkuCi0gICAg
ICAgIEtVUkwgdXJsOwotICAgICAgICBWZWN0b3I8U3RyaW5nPiB1cmlMaXN0OworICAgICAgICBm
cmllbmQgY2xhc3MgQ2xpcGJvYXJkQ2hyb21pdW07CisgICAgICAgIGZyaWVuZCBjbGFzcyBSZWFk
YWJsZURhdGFPYmplY3Q7CiAKLSAgICAgICAgQ2hyb21pdW1EYXRhT2JqZWN0KCkge30KKyAgICAg
ICAgQ2hyb21pdW1EYXRhT2JqZWN0KGJvb2wgaXNGb3JEcmFnZ2luZyk7CiAgICAgICAgIENocm9t
aXVtRGF0YU9iamVjdChjb25zdCBDaHJvbWl1bURhdGFPYmplY3QmKTsKIAotICAgICAgICBmcmll
bmQgY2xhc3MgQ2xpcGJvYXJkQ2hyb21pdW07CisgICAgICAgIGJvb2wgbV9pc0ZvckRyYWdnaW5n
OworCisgICAgICAgIC8vIFVSTCBhbmQgdXJpLWxpc3QgYXJlIGxpbmtlZCwgc28gdGhleSBzaG91
bGQgbm90IGJlIGFjY2Vzc2VkIGluZGl2aWR1YWxseS4KKyAgICAgICAgS1VSTCBtX3VybDsKKyAg
ICAgICAgVmVjdG9yPFN0cmluZz4gbV91cmlMaXN0OworCiAgICAgfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9h
cmRDaHJvbWl1bS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9t
aXVtLmNwcAppbmRleCAyMzUwOGE2Li42NDZmMTAwIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRm
b3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmNwcApAQCAtNDgsNiArNDgsOSBAQAogI2luY2x1
ZGUgIlN0cmluZ0J1aWxkZXIuaCIKICNpbmNsdWRlICJtYXJrdXAuaCIKIAorLy8gRklYTUU6IFRo
aXMgY2xhc3MgY3VycmVudGx5IGhhcyBhIGxvdCBvZiBkdXBsaWNhdGlvbiBpbiBwcmVwYXJhdGlv
biBmb3IgYQorLy8gdHJhbnNpdGlvbiB0byB0aGUgbmV3IGRyYWcgYW5kIGRyb3AgbW9kZWwuIENs
ZWFuIGl0IHVwIG9uY2UgdGhlIHRyYW5zaXRpb24gaXMKKy8vIGRvbmUgb24gdGhlIENocm9tZSBz
aWRlLgogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwpA
QCAtOTEsNiArOTQsMTYgQEAgc3RhdGljIENsaXBib2FyZERhdGFUeXBlIGNsaXBib2FyZFR5cGVG
cm9tTUlNRVR5cGUoY29uc3QgU3RyaW5nJiB0eXBlKQogICAgIHJldHVybiBDbGlwYm9hcmREYXRh
VHlwZU90aGVyOwogfQogCitzdGF0aWMgU3RyaW5nIG5vcm1hbGl6ZVR5cGUoY29uc3QgU3RyaW5n
JiB0eXBlKQoreworICAgIGNvbnN0IFN0cmluZyBub3JtYWxpemVkVHlwZSA9IHR5cGUuc3RyaXBX
aGl0ZVNwYWNlKCkubG93ZXIoKTsKKyAgICBpZiAobm9ybWFsaXplZFR5cGUgPT0gInRleHQiKQor
ICAgICAgICByZXR1cm4gInRleHQvcGxhaW4iOworICAgIGlmIChub3JtYWxpemVkVHlwZSA9PSAi
dXJsIikKKyAgICAgICAgcmV0dXJuICJ0ZXh0L3VyaS1saXN0IjsKKyAgICByZXR1cm4gbm9ybWFs
aXplZFR5cGU7Cit9CisKIFBhc3NSZWZQdHI8Q2xpcGJvYXJkPiBDbGlwYm9hcmQ6OmNyZWF0ZShD
bGlwYm9hcmRBY2Nlc3NQb2xpY3kgcG9saWN5LCBEcmFnRGF0YSogZHJhZ0RhdGEsIEZyYW1lKiBm
cmFtZSkKIHsKICAgICByZXR1cm4gQ2xpcGJvYXJkQ2hyb21pdW06OmNyZWF0ZSh0cnVlLCBkcmFn
RGF0YS0+cGxhdGZvcm1EYXRhKCksIHBvbGljeSwgZnJhbWUpOwpAQCAtMTMxLDE2ICsxNDQsMTYg
QEAgdm9pZCBDbGlwYm9hcmRDaHJvbWl1bTo6Y2xlYXJEYXRhKGNvbnN0IFN0cmluZyYgdHlwZSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZURvd25sb2FkVVJM
OgotICAgICAgICBtX2RhdGFPYmplY3QtPmRvd25sb2FkTWV0YWRhdGEgPSAiIjsKKyAgICAgICAg
bV9kYXRhT2JqZWN0LT5tX2Rvd25sb2FkTWV0YWRhdGEgPSAiIjsKICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAKICAgICBjYXNlIENsaXBib2FyZERhdGFUeXBlUGxhaW5UZXh0OgotICAgICAgICBt
X2RhdGFPYmplY3QtPnBsYWluVGV4dCA9ICIiOworICAgICAgICBtX2RhdGFPYmplY3QtPm1fcGxh
aW5UZXh0ID0gIiI7CiAgICAgICAgIHJldHVybjsKIAogICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5
cGVIVE1MOgotICAgICAgICBtX2RhdGFPYmplY3QtPnRleHRIdG1sID0gIiI7Ci0gICAgICAgIG1f
ZGF0YU9iamVjdC0+aHRtbEJhc2VVcmwgPSBLVVJMKCk7CisgICAgICAgIG1fZGF0YU9iamVjdC0+
bV90ZXh0SHRtbCA9ICIiOworICAgICAgICBtX2RhdGFPYmplY3QtPm1faHRtbEJhc2VVcmwgPSBL
VVJMKCk7CiAgICAgICAgIHJldHVybjsKIAogICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVPdGhl
cjoKQEAgLTE2NSw4NCArMTc4LDcgQEAgU3RyaW5nIENsaXBib2FyZENocm9taXVtOjpnZXREYXRh
KGNvbnN0IFN0cmluZyYgdHlwZSwgYm9vbCYgc3VjY2VzcykgY29uc3QKICAgICBpZiAocG9saWN5
KCkgIT0gQ2xpcGJvYXJkUmVhZGFibGUgfHwgIW1fZGF0YU9iamVjdCkKICAgICAgICAgcmV0dXJu
IFN0cmluZygpOwogCi0gICAgQ2xpcGJvYXJkRGF0YVR5cGUgZGF0YVR5cGUgPSBjbGlwYm9hcmRU
eXBlRnJvbU1JTUVUeXBlKHR5cGUpOwotICAgIHN3aXRjaCAoZGF0YVR5cGUpIHsKLSAgICBjYXNl
IENsaXBib2FyZERhdGFUeXBlTm9uZToKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAg
Ly8gSGFjayBmb3IgVVJMcy4gZmlsZSBVUkxzIGFyZSB1c2VkIGludGVybmFsbHkgZm9yIGRyb3An
cyBkZWZhdWx0IGFjdGlvbiwgYnV0IHdlIGRvbid0IHdhbnQKLSAgICAvLyB0byBleHBvc2UgdGhl
bSB0byB0aGUgcGFnZSwgc28gd2UgZmlsdGVyIHRoZW0gb3V0IGhlcmUuCi0gICAgY2FzZSBDbGlw
Ym9hcmREYXRhVHlwZVVSSUxpc3Q6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyB0ZXh0
OwotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2RhdGFPYmplY3QtPnVyaUxp
c3Quc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHVyaSA9IG1f
ZGF0YU9iamVjdC0+dXJpTGlzdFtpXTsKLSAgICAgICAgICAgICAgICBpZiAocHJvdG9jb2xJcyh1
cmksICJmaWxlIikpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
ICAgIEFTU0VSVCghdXJpLmlzRW1wdHkoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCF0ZXh0Lmlz
RW1wdHkoKSkKLSAgICAgICAgICAgICAgICAgICAgdGV4dC5hcHBlbmQodGV4dE1JTUVUeXBlTGlu
ZVNlcGFyYXRvcik7Ci0gICAgICAgICAgICAgICAgLy8gVVJJcyBoYXZlIGFscmVhZHkgYmVlbiBj
YW5vbmljYWxpemVkLCBzbyBjb3B5IGV2ZXJ5dGhpbmcgdmVyYmF0aW0uCi0gICAgICAgICAgICAg
ICAgdGV4dC5hcHBlbmQodXJpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHN1Y2Nlc3Mg
PSAhdGV4dC5pc0VtcHR5KCk7Ci0gICAgICAgICAgICByZXR1cm4gdGV4dDsKLSAgICAgICAgfQot
Ci0gICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZVVSTDoKLSAgICAgICAgLy8gSW4gY2FzZSBvZiBh
IHByZXZpb3VzIHNldERhdGEoJ3RleHQvdXJpLWxpc3QnKSwgc2V0RGF0YSgpIGhhcyBhbHJlYWR5
Ci0gICAgICAgIC8vIHByZXBhcmVkIHRoZSAndXJsJyBtZW1iZXIsIHNvIHdlIGNhbiBqdXN0IHJl
dHJpZXZlIGl0IGhlcmUuCi0gICAgICAgIGlmICghbV9kYXRhT2JqZWN0LT51cmwuaXNFbXB0eSgp
ICYmICFtX2RhdGFPYmplY3QtPnVybC5pc0xvY2FsRmlsZSgpKSB7Ci0gICAgICAgICAgICBzdWNj
ZXNzID0gdHJ1ZTsKLSAgICAgICAgICAgIHJldHVybiBtX2RhdGFPYmplY3QtPnVybC5zdHJpbmco
KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBjYXNlIENsaXBi
b2FyZERhdGFUeXBlRG93bmxvYWRVUkw6Ci0gICAgICAgIHN1Y2Nlc3MgPSAhbV9kYXRhT2JqZWN0
LT5kb3dubG9hZE1ldGFkYXRhLmlzRW1wdHkoKTsKLSAgICAgICAgcmV0dXJuIG1fZGF0YU9iamVj
dC0+ZG93bmxvYWRNZXRhZGF0YTsKLSAgICAKLSAgICBjYXNlIENsaXBib2FyZERhdGFUeXBlUGxh
aW5UZXh0OgotICAgICAgICBpZiAoIWlzRm9yRHJhZ2dpbmcoKSkgewotICAgICAgICAgICAgLy8g
SWYgdGhpcyBpc24ndCBmb3IgYSBkcmFnLCBpdCdzIGZvciBhIGN1dC9wYXN0ZSBldmVudCBoYW5k
bGVyLgotICAgICAgICAgICAgLy8gSW4gdGhpcyBjYXNlLCB3ZSBuZWVkIHRvIGNoZWNrIHRoZSBj
bGlwYm9hcmQuCi0gICAgICAgICAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVy
IGJ1ZmZlciA9IAotICAgICAgICAgICAgICAgIFBhc3RlYm9hcmQ6OmdlbmVyYWxQYXN0ZWJvYXJk
KCktPmlzU2VsZWN0aW9uTW9kZSgpID8KLSAgICAgICAgICAgICAgICBQYXN0ZWJvYXJkUHJpdmF0
ZTo6U2VsZWN0aW9uQnVmZmVyIDogCi0gICAgICAgICAgICAgICAgUGFzdGVib2FyZFByaXZhdGU6
OlN0YW5kYXJkQnVmZmVyOwotICAgICAgICAgICAgU3RyaW5nIHRleHQgPSBDaHJvbWl1bUJyaWRn
ZTo6Y2xpcGJvYXJkUmVhZFBsYWluVGV4dChidWZmZXIpOwotICAgICAgICAgICAgc3VjY2VzcyA9
ICF0ZXh0LmlzRW1wdHkoKTsKLSAgICAgICAgICAgIHJldHVybiB0ZXh0OwotICAgICAgICB9Ci0g
ICAgICAgIC8vIE90aGVyd2lzZSByZXR1cm4gd2hhdGV2ZXIgaXMgc3RvcmVkIGluIHBsYWluVGV4
dC4KLSAgICAgICAgc3VjY2VzcyA9ICFtX2RhdGFPYmplY3QtPnBsYWluVGV4dC5pc0VtcHR5KCk7
Ci0gICAgICAgIHJldHVybiBtX2RhdGFPYmplY3QtPnBsYWluVGV4dDsKLQotICAgIGNhc2UgQ2xp
cGJvYXJkRGF0YVR5cGVIVE1MOgotICAgICAgICBpZiAoIWlzRm9yRHJhZ2dpbmcoKSkgewotICAg
ICAgICAgICAgLy8gSWYgdGhpcyBpc24ndCBmb3IgYSBkcmFnLCBpdCdzIGZvciBhIGN1dC9wYXN0
ZSBldmVudCBoYW5kbGVyLgotICAgICAgICAgICAgLy8gSW4gdGhpcyBjYXNlLCB3ZSBuZWVkIHRv
IGNoZWNrIHRoZSBjbGlwYm9hcmQuCi0gICAgICAgICAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xp
cGJvYXJkQnVmZmVyIGJ1ZmZlciA9IAotICAgICAgICAgICAgICAgIFBhc3RlYm9hcmQ6OmdlbmVy
YWxQYXN0ZWJvYXJkKCktPmlzU2VsZWN0aW9uTW9kZSgpID8KLSAgICAgICAgICAgICAgICBQYXN0
ZWJvYXJkUHJpdmF0ZTo6U2VsZWN0aW9uQnVmZmVyIDogCi0gICAgICAgICAgICAgICAgUGFzdGVi
b2FyZFByaXZhdGU6OlN0YW5kYXJkQnVmZmVyOwotICAgICAgICAgICAgU3RyaW5nIGh0bWxUZXh0
OwotICAgICAgICAgICAgS1VSTCBzb3VyY2VVUkw7Ci0gICAgICAgICAgICBDaHJvbWl1bUJyaWRn
ZTo6Y2xpcGJvYXJkUmVhZEhUTUwoYnVmZmVyLCAmaHRtbFRleHQsICZzb3VyY2VVUkwpOwotICAg
ICAgICAgICAgc3VjY2VzcyA9ICFodG1sVGV4dC5pc0VtcHR5KCk7Ci0gICAgICAgICAgICByZXR1
cm4gaHRtbFRleHQ7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gT3RoZXJ3aXNlIHJldHVybiB3aGF0
ZXZlciBpcyBzdG9yZWQgaW4gdGV4dEh0bWwuCi0gICAgICAgIHN1Y2Nlc3MgPSAhbV9kYXRhT2Jq
ZWN0LT50ZXh0SHRtbC5pc0VtcHR5KCk7Ci0gICAgICAgIHJldHVybiBtX2RhdGFPYmplY3QtPnRl
eHRIdG1sOwotCi0gICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZU90aGVyOgotICAgICAgICAvLyBu
b3QgeWV0IGltcGxlbWVudGVkLCBzZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTM0NDEwCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICB9Ci0KLSAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0dXJuIG1fZGF0
YU9iamVjdC0+Z2V0RGF0YShub3JtYWxpemVUeXBlKHR5cGUpLCBzdWNjZXNzKTsKIH0KIAogYm9v
bCBDbGlwYm9hcmRDaHJvbWl1bTo6c2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0
cmluZyYgZGF0YSkKQEAgLTI1OSwxMCArMTk1LDEwIEBAIGJvb2wgQ2xpcGJvYXJkQ2hyb21pdW06
OnNldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpCiAgICAgICAg
IC8vIEZvciBzZXREYXRhKCksICJVUkwiIG11c3QgYmUgdHJlYXRlZCBhcyAidGV4dC91cmktbGlz
dCIuCiAgICAgICAgIC8vIChTZWUgSFRNTDUgc3BlYywgIlRoZSBEcmFnRXZlbnQgYW5kIERhdGFU
cmFuc2ZlciBpbnRlcmZhY2VzIikKICAgICBjYXNlIENsaXBib2FyZERhdGFUeXBlVVJJTGlzdDoK
LSAgICAgICAgbV9kYXRhT2JqZWN0LT51cmwgPSBLVVJMKCk7CisgICAgICAgIG1fZGF0YU9iamVj
dC0+bV91cmwgPSBLVVJMKCk7CiAgICAgICAgIC8vIExpbmUgc2VwYXJhdG9yIGlzIFxyXG4gcGVy
IFJGQyAyNDgzIC0gaG93ZXZlciwgZm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucwogICAgICAgICAv
LyB3ZSBhbHNvIGFsbG93IGp1c3QgXG4gaGVyZS4gCi0gICAgICAgIGRhdGEuc3BsaXQoJ1xuJywg
bV9kYXRhT2JqZWN0LT51cmlMaXN0KTsKKyAgICAgICAgZGF0YS5zcGxpdCgnXG4nLCBtX2RhdGFP
YmplY3QtPm1fdXJpTGlzdCk7CiAgICAgICAgIC8vIFN0cmlwIHdoaXRlIHNwYWNlIG9uIGFsbCBs
aW5lcywgaW5jbHVkaW5nIHRyYWlsaW5nIFxyIGZyb20gYWJvdmUgc3BsaXQuCiAgICAgICAgIC8v
IElmIHRoaXMgbGVhdmVzIGEgbGluZSBlbXB0eSwgcmVtb3ZlIGl0IGNvbXBsZXRlbHkuCiAgICAg
ICAgIC8vCkBAIC0yNzAsNDAgKzIwNiw0MCBAQCBib29sIENsaXBib2FyZENocm9taXVtOjpzZXRE
YXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKQogICAgICAgICAvLyBJ
biBjYXNlIG5vIGVudHJ5IGlzIGEgdmFsaWQgVVJMIChpLmUuLCByZW1hcmtzIG9ubHkpLCB0aGVu
IHdlIGxlYXZlICd1cmwnIGVtcHR5LgogICAgICAgICAvLyBJLmUuLCBpbiB0aGF0IGNhc2Ugc3Vi
c2VxdWVudCBjYWxscyB0byBnZXREYXRhKCJVUkwiKSB3aWxsIGdldCBhbiBlbXB0eSBzdHJpbmcu
CiAgICAgICAgIC8vIFRoaXMgaXMgaW4gbGluZSB3aXRoIHRoZSBIVE1MNSBzcGVjIChzZWUgIlRo
ZSBEcmFnRXZlbnQgYW5kIERhdGFUcmFuc2ZlciBpbnRlcmZhY2VzIikuCi0gICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV9kYXRhT2JqZWN0LT51cmlMaXN0LnNpemUoKTsgLyoqLykgewot
ICAgICAgICAgICAgU3RyaW5nJiBsaW5lID0gbV9kYXRhT2JqZWN0LT51cmlMaXN0W2ldOworICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZGF0YU9iamVjdC0+bV91cmlMaXN0LnNpemUo
KTsgLyoqLykgeworICAgICAgICAgICAgU3RyaW5nJiBsaW5lID0gbV9kYXRhT2JqZWN0LT5tX3Vy
aUxpc3RbaV07CiAgICAgICAgICAgICBsaW5lID0gbGluZS5zdHJpcFdoaXRlU3BhY2UoKTsKICAg
ICAgICAgICAgIGlmIChsaW5lLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIG1fZGF0YU9i
amVjdC0+dXJpTGlzdC5yZW1vdmUoaSk7CisgICAgICAgICAgICAgICAgbV9kYXRhT2JqZWN0LT5t
X3VyaUxpc3QucmVtb3ZlKGkpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgKytpOwogICAgICAgICAgICAgLy8gT25seSBjb3B5IHRoZSBmaXJz
dCB2YWxpZCBVUkwuCi0gICAgICAgICAgICBpZiAobV9kYXRhT2JqZWN0LT51cmwuaXNWYWxpZCgp
KQorICAgICAgICAgICAgaWYgKG1fZGF0YU9iamVjdC0+bV91cmwuaXNWYWxpZCgpKQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgLy8gU2tpcCByZW1hcmtzLgogICAgICAg
ICAgICAgaWYgKGxpbmVbMF0gPT0gJyMnKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgS1VSTCB1cmwgPSBLVVJMKFBhcnNlZFVSTFN0cmluZywgbGluZSk7CiAgICAgICAg
ICAgICBpZiAodXJsLmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICBtX2RhdGFPYmplY3QtPnVy
bCA9IHVybDsKKyAgICAgICAgICAgICAgICBtX2RhdGFPYmplY3QtPm1fdXJsID0gdXJsOwogICAg
ICAgICB9Ci0gICAgICAgIGlmIChtX2RhdGFPYmplY3QtPnVyaUxpc3QuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgICAgICBBU1NFUlQobV9kYXRhT2JqZWN0LT51cmwuaXNFbXB0eSgpKTsKKyAgICAgICAg
aWYgKG1fZGF0YU9iamVjdC0+bV91cmlMaXN0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgQVNT
RVJUKG1fZGF0YU9iamVjdC0+bV91cmwuaXNFbXB0eSgpKTsKICAgICAgICAgICAgIHJldHVybiBk
YXRhLmlzRW1wdHkoKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGNh
c2UgQ2xpcGJvYXJkRGF0YVR5cGVEb3dubG9hZFVSTDoKLSAgICAgICAgbV9kYXRhT2JqZWN0LT5k
b3dubG9hZE1ldGFkYXRhID0gZGF0YTsKKyAgICAgICAgbV9kYXRhT2JqZWN0LT5tX2Rvd25sb2Fk
TWV0YWRhdGEgPSBkYXRhOwogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGNhc2UgQ2xpcGJv
YXJkRGF0YVR5cGVQbGFpblRleHQ6Ci0gICAgICAgIG1fZGF0YU9iamVjdC0+cGxhaW5UZXh0ID0g
ZGF0YTsKKyAgICAgICAgbV9kYXRhT2JqZWN0LT5tX3BsYWluVGV4dCA9IGRhdGE7CiAgICAgICAg
IHJldHVybiB0cnVlOwogCiAgICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZUhUTUw6Ci0gICAgICAg
IG1fZGF0YU9iamVjdC0+dGV4dEh0bWwgPSBkYXRhOworICAgICAgICBtX2RhdGFPYmplY3QtPm1f
dGV4dEh0bWwgPSBkYXRhOwogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGNhc2UgQ2xpcGJv
YXJkRGF0YVR5cGVPdGhlcjoKQEAgLTMxOCw0MiArMjU0LDExIEBAIGJvb2wgQ2xpcGJvYXJkQ2hy
b21pdW06OnNldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpCiAv
LyBleHRlbnNpb25zIGJleW9uZCBJRSdzIEFQSQogSGFzaFNldDxTdHJpbmc+IENsaXBib2FyZENo
cm9taXVtOjp0eXBlcygpIGNvbnN0CiB7Ci0gICAgSGFzaFNldDxTdHJpbmc+IHJlc3VsdHM7Ci0g
ICAgaWYgKHBvbGljeSgpICE9IENsaXBib2FyZFJlYWRhYmxlICYmIHBvbGljeSgpICE9IENsaXBi
b2FyZFR5cGVzUmVhZGFibGUpCi0gICAgICAgIHJldHVybiByZXN1bHRzOwotCi0gICAgaWYgKCFt
X2RhdGFPYmplY3QpCi0gICAgICAgIHJldHVybiByZXN1bHRzOwotCi0gICAgaWYgKCFtX2RhdGFP
YmplY3QtPmZpbGVuYW1lcy5pc0VtcHR5KCkpCi0gICAgICAgIHJlc3VsdHMuYWRkKCJGaWxlcyIp
OworICAgIGlmIChwb2xpY3koKSAhPSBDbGlwYm9hcmRSZWFkYWJsZSAmJiBwb2xpY3koKSAhPSBD
bGlwYm9hcmRUeXBlc1JlYWRhYmxlCisgICAgICAgIHx8ICFtX2RhdGFPYmplY3QpCisgICAgICAg
IHJldHVybiBIYXNoU2V0PFN0cmluZz4oKTsKIAotICAgIC8vIEhhY2sgZm9yIFVSTHMuIGZpbGUg
VVJMcyBhcmUgdXNlZCBpbnRlcm5hbGx5IGZvciBkcm9wJ3MgZGVmYXVsdCBhY3Rpb24sIGJ1dCB3
ZSBkb24ndCB3YW50Ci0gICAgLy8gdG8gZXhwb3NlIHRoZW0gdG8gdGhlIHBhZ2UsIHNvIHdlIGZp
bHRlciB0aGVtIG91dCBoZXJlLgotICAgIGlmIChtX2RhdGFPYmplY3QtPnVybC5pc1ZhbGlkKCkg
JiYgIW1fZGF0YU9iamVjdC0+dXJsLmlzTG9jYWxGaWxlKCkpIHsKLSAgICAgICAgQVNTRVJUKCFt
X2RhdGFPYmplY3QtPnVyaUxpc3QuaXNFbXB0eSgpKTsKLSAgICAgICAgcmVzdWx0cy5hZGQoIlVS
TCIpOwotICAgIH0KLQotICAgIGlmICghbV9kYXRhT2JqZWN0LT51cmlMaXN0LmlzRW1wdHkoKSkg
ewotICAgICAgICAvLyBWZXJpZnkgdGhhdCB0aGUgVVJJIGxpc3QgY29udGFpbnMgYXQgbGVhc3Qg
b25lIG5vbi1maWxlIFVSTC4KLSAgICAgICAgZm9yIChWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtX2RhdGFPYmplY3QtPnVyaUxpc3QuYmVnaW4oKTsKLSAgICAgICAgICAgICBp
dCAhPSBtX2RhdGFPYmplY3QtPnVyaUxpc3QuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgICAgIGlm
ICghcHJvdG9jb2xJcygqaXQsICJmaWxlIikpIHsKLSAgICAgICAgICAgICAgICAvLyBOb3RlIHRo
YXQgZXZlbiBpZiB0aGUgVVJJIGxpc3QgaXMgbm90IGVtcHR5LCBpdCBtYXkgbm90IGFjdHVhbGx5
Ci0gICAgICAgICAgICAgICAgLy8gY29udGFpbiBhIHZhbGlkIFVSTCwgc28gd2UgY2FuJ3QgcmV0
dXJuICJVUkwiIGhlcmUuCi0gICAgICAgICAgICAgICAgcmVzdWx0cy5hZGQoInRleHQvdXJpLWxp
c3QiKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KLQotICAgIGlmICghbV9kYXRhT2JqZWN0LT5wbGFpblRleHQuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgIHJlc3VsdHMuYWRkKCJUZXh0Iik7Ci0gICAgICAgIHJlc3VsdHMuYWRkKCJ0ZXh0L3Bs
YWluIik7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdHM7CisgICAgcmV0dXJuIG1fZGF0YU9i
amVjdC0+dHlwZXMoKTsKIH0KIAogUGFzc1JlZlB0cjxGaWxlTGlzdD4gQ2xpcGJvYXJkQ2hyb21p
dW06OmZpbGVzKCkgY29uc3QKQEAgLTM2MSwxMyArMjY2LDExIEBAIFBhc3NSZWZQdHI8RmlsZUxp
c3Q+IENsaXBib2FyZENocm9taXVtOjpmaWxlcygpIGNvbnN0CiAgICAgaWYgKHBvbGljeSgpICE9
IENsaXBib2FyZFJlYWRhYmxlKQogICAgICAgICByZXR1cm4gRmlsZUxpc3Q6OmNyZWF0ZSgpOwog
Ci0gICAgaWYgKCFtX2RhdGFPYmplY3QgfHwgbV9kYXRhT2JqZWN0LT5maWxlbmFtZXMuaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm4gRmlsZUxpc3Q6OmNyZWF0ZSgpOwotCiAgICAgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IG1fZnJhbWUtPmRvY3VtZW50
KCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBSZWZQdHI8RmlsZUxpc3Q+IGZpbGVM
aXN0ID0gRmlsZUxpc3Q6OmNyZWF0ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9k
YXRhT2JqZWN0LT5maWxlbmFtZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIGZpbGVMaXN0LT5hcHBl
bmQoRmlsZTo6Y3JlYXRlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIG1fZGF0YU9iamVjdC0+Zmls
ZW5hbWVzLmF0KGkpKSk7CisgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcyA9IG1f
ZGF0YU9iamVjdC0+ZmlsZW5hbWVzKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWxl
bmFtZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIGZpbGVMaXN0LT5hcHBlbmQoRmlsZTo6Y3JlYXRl
KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGZpbGVuYW1lcy5hdChpKSkpOwogCiAgICAgcmV0dXJu
IGZpbGVMaXN0LnJlbGVhc2UoKTsKIH0KQEAgLTQ2Niw3ICszNjksNyBAQCBzdGF0aWMgdm9pZCB3
cml0ZUltYWdlVG9EYXRhT2JqZWN0KENocm9taXVtRGF0YU9iamVjdCogZGF0YU9iamVjdCwgRWxl
bWVudCogZWxlbQogICAgIGlmICghaW1hZ2VCdWZmZXIgfHwgIWltYWdlQnVmZmVyLT5zaXplKCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGRhdGFPYmplY3QtPmZpbGVDb250ZW50ID0gaW1hZ2VC
dWZmZXI7CisgICAgZGF0YU9iamVjdC0+bV9maWxlQ29udGVudCA9IGltYWdlQnVmZmVyOwogCiAg
ICAgLy8gRGV0ZXJtaW5lIHRoZSBmaWxlbmFtZSBmb3IgdGhlIGZpbGUgY29udGVudHMgb2YgdGhl
IGltYWdlLiAgV2UgdHJ5IHRvCiAgICAgLy8gdXNlIHRoZSBhbHQgdGFnIGlmIG9uZSBleGlzdHMs
IG90aGVyd2lzZSB3ZSBmYWxsIGJhY2sgb24gdGhlIHN1Z2dlc3RlZApAQCAtNDc0LDEzICszNzcs
MTMgQEAgc3RhdGljIHZvaWQgd3JpdGVJbWFnZVRvRGF0YU9iamVjdChDaHJvbWl1bURhdGFPYmpl
Y3QqIGRhdGFPYmplY3QsIEVsZW1lbnQqIGVsZW0KICAgICAvLyBpbiB0aGUgVVJMLgogICAgIFN0
cmluZyBleHRlbnNpb24gPSBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRQcmVmZXJyZWRFeHRlbnNpb25G
b3JNSU1FVHlwZSgKICAgICAgICAgY2FjaGVkSW1hZ2UtPnJlc3BvbnNlKCkubWltZVR5cGUoKSk7
Ci0gICAgZGF0YU9iamVjdC0+ZmlsZUV4dGVuc2lvbiA9IGV4dGVuc2lvbi5pc0VtcHR5KCkgPyAi
IiA6ICIuIiArIGV4dGVuc2lvbjsKKyAgICBkYXRhT2JqZWN0LT5tX2ZpbGVFeHRlbnNpb24gPSBl
eHRlbnNpb24uaXNFbXB0eSgpID8gIiIgOiAiLiIgKyBleHRlbnNpb247CiAgICAgU3RyaW5nIHRp
dGxlID0gZWxlbWVudC0+Z2V0QXR0cmlidXRlKGFsdEF0dHIpOwogICAgIGlmICh0aXRsZS5pc0Vt
cHR5KCkpCiAgICAgICAgIHRpdGxlID0gY2FjaGVkSW1hZ2UtPnJlc3BvbnNlKCkuc3VnZ2VzdGVk
RmlsZW5hbWUoKTsKIAogICAgIHRpdGxlID0gQ2xpcGJvYXJkQ2hyb21pdW06OnZhbGlkYXRlRmls
ZU5hbWUodGl0bGUsIGRhdGFPYmplY3QpOwotICAgIGRhdGFPYmplY3QtPmZpbGVDb250ZW50Rmls
ZW5hbWUgPSB0aXRsZSArIGRhdGFPYmplY3QtPmZpbGVFeHRlbnNpb247CisgICAgZGF0YU9iamVj
dC0+bV9maWxlQ29udGVudEZpbGVuYW1lID0gdGl0bGUgKyBkYXRhT2JqZWN0LT5tX2ZpbGVFeHRl
bnNpb247CiB9CiAKIHZvaWQgQ2xpcGJvYXJkQ2hyb21pdW06OmRlY2xhcmVBbmRXcml0ZURyYWdJ
bWFnZShFbGVtZW50KiBlbGVtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdGl0
bGUsIEZyYW1lKiBmcmFtZSkKQEAgLTQ4OCw4ICszOTEsOCBAQCB2b2lkIENsaXBib2FyZENocm9t
aXVtOjpkZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2UoRWxlbWVudCogZWxlbWVudCwgY29uc3QgS1VS
TCYgdQogICAgIGlmICghbV9kYXRhT2JqZWN0KQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2Rh
dGFPYmplY3QtPnVybCA9IHVybDsKLSAgICBtX2RhdGFPYmplY3QtPnVybFRpdGxlID0gdGl0bGU7
CisgICAgbV9kYXRhT2JqZWN0LT5tX3VybCA9IHVybDsKKyAgICBtX2RhdGFPYmplY3QtPm1fdXJs
VGl0bGUgPSB0aXRsZTsKIAogICAgIC8vIFdyaXRlIHRoZSBieXRlcyBpbiB0aGUgaW1hZ2UgdG8g
dGhlIGZpbGUgZm9ybWF0LgogICAgIHdyaXRlSW1hZ2VUb0RhdGFPYmplY3QobV9kYXRhT2JqZWN0
LmdldCgpLCBlbGVtZW50LCB1cmwpOwpAQCAtNTAzLDcgKzQwNiw3IEBAIHZvaWQgQ2xpcGJvYXJk
Q2hyb21pdW06OmRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZShFbGVtZW50KiBlbGVtZW50LCBjb25z
dCBLVVJMJiB1CiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFB1dCBpbWcgdGFnIG9uIHRoZSBj
bGlwYm9hcmQgcmVmZXJlbmNpbmcgdGhlIGltYWdlCi0gICAgbV9kYXRhT2JqZWN0LT50ZXh0SHRt
bCA9IGltYWdlVG9NYXJrdXAoZnVsbFVSTCwgZWxlbWVudCk7CisgICAgbV9kYXRhT2JqZWN0LT5t
X3RleHRIdG1sID0gaW1hZ2VUb01hcmt1cChmdWxsVVJMLCBlbGVtZW50KTsKIH0KIAogdm9pZCBD
bGlwYm9hcmRDaHJvbWl1bTo6d3JpdGVVUkwoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcm
IHRpdGxlLCBGcmFtZSopCkBAIC01MTEsMTcgKzQxNCwxNyBAQCB2b2lkIENsaXBib2FyZENocm9t
aXVtOjp3cml0ZVVSTChjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdGl0bGUsIEZyYW1l
KikKICAgICBpZiAoIW1fZGF0YU9iamVjdCkKICAgICAgICAgcmV0dXJuOwogICAgIEFTU0VSVCgh
dXJsLmlzRW1wdHkoKSk7Ci0gICAgbV9kYXRhT2JqZWN0LT51cmwgPSB1cmw7Ci0gICAgbV9kYXRh
T2JqZWN0LT51cmxUaXRsZSA9IHRpdGxlOwotICAgIG1fZGF0YU9iamVjdC0+dXJpTGlzdC5jbGVh
cigpOwotICAgIG1fZGF0YU9iamVjdC0+dXJpTGlzdC5hcHBlbmQodXJsKTsKKyAgICBtX2RhdGFP
YmplY3QtPm1fdXJsID0gdXJsOworICAgIG1fZGF0YU9iamVjdC0+bV91cmxUaXRsZSA9IHRpdGxl
OworICAgIG1fZGF0YU9iamVjdC0+bV91cmlMaXN0LmNsZWFyKCk7CisgICAgbV9kYXRhT2JqZWN0
LT5tX3VyaUxpc3QuYXBwZW5kKHVybCk7CiAKICAgICAvLyBUaGUgVVJMIGNhbiBhbHNvIGJlIHVz
ZWQgYXMgcGxhaW4gdGV4dC4KLSAgICBtX2RhdGFPYmplY3QtPnBsYWluVGV4dCA9IHVybC5zdHJp
bmcoKTsKKyAgICBtX2RhdGFPYmplY3QtPm1fcGxhaW5UZXh0ID0gdXJsLnN0cmluZygpOwogCiAg
ICAgLy8gVGhlIFVSTCBjYW4gYWxzbyBiZSB1c2VkIGFzIGFuIEhUTUwgZnJhZ21lbnQuCi0gICAg
bV9kYXRhT2JqZWN0LT50ZXh0SHRtbCA9IHVybFRvTWFya3VwKHVybCwgdGl0bGUpOwotICAgIG1f
ZGF0YU9iamVjdC0+aHRtbEJhc2VVcmwgPSB1cmw7CisgICAgbV9kYXRhT2JqZWN0LT5tX3RleHRI
dG1sID0gdXJsVG9NYXJrdXAodXJsLCB0aXRsZSk7CisgICAgbV9kYXRhT2JqZWN0LT5tX2h0bWxC
YXNlVXJsID0gdXJsOwogfQogCiB2b2lkIENsaXBib2FyZENocm9taXVtOjp3cml0ZVJhbmdlKFJh
bmdlKiBzZWxlY3RlZFJhbmdlLCBGcmFtZSogZnJhbWUpCkBAIC01MzAsMTUgKzQzMywxNSBAQCB2
b2lkIENsaXBib2FyZENocm9taXVtOjp3cml0ZVJhbmdlKFJhbmdlKiBzZWxlY3RlZFJhbmdlLCBG
cmFtZSogZnJhbWUpCiAgICAgaWYgKCFtX2RhdGFPYmplY3QpCiAgICAgICAgICByZXR1cm47CiAK
LSAgICBtX2RhdGFPYmplY3QtPnRleHRIdG1sID0gY3JlYXRlTWFya3VwKHNlbGVjdGVkUmFuZ2Us
IDAsIEFubm90YXRlRm9ySW50ZXJjaGFuZ2UsIGZhbHNlLCBBYnNvbHV0ZVVSTHMpOwotICAgIG1f
ZGF0YU9iamVjdC0+aHRtbEJhc2VVcmwgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCk7CisgICAg
bV9kYXRhT2JqZWN0LT5tX3RleHRIdG1sID0gY3JlYXRlTWFya3VwKHNlbGVjdGVkUmFuZ2UsIDAs
IEFubm90YXRlRm9ySW50ZXJjaGFuZ2UsIGZhbHNlLCBBYnNvbHV0ZVVSTHMpOworICAgIG1fZGF0
YU9iamVjdC0+bV9odG1sQmFzZVVybCA9IGZyYW1lLT5kb2N1bWVudCgpLT51cmwoKTsKIAogICAg
IFN0cmluZyBzdHIgPSBmcmFtZS0+c2VsZWN0ZWRUZXh0KCk7CiAjaWYgT1MoV0lORE9XUykKICAg
ICByZXBsYWNlTmV3bGluZXNXaXRoV2luZG93c1N0eWxlTmV3bGluZXMoc3RyKTsKICNlbmRpZgog
ICAgIHJlcGxhY2VOQlNQV2l0aFNwYWNlKHN0cik7Ci0gICAgbV9kYXRhT2JqZWN0LT5wbGFpblRl
eHQgPSBzdHI7CisgICAgbV9kYXRhT2JqZWN0LT5tX3BsYWluVGV4dCA9IHN0cjsKIH0KIAogdm9p
ZCBDbGlwYm9hcmRDaHJvbWl1bTo6d3JpdGVQbGFpblRleHQoY29uc3QgU3RyaW5nJiB0ZXh0KQpA
QCAtNTUxLDcgKzQ1NCw3IEBAIHZvaWQgQ2xpcGJvYXJkQ2hyb21pdW06OndyaXRlUGxhaW5UZXh0
KGNvbnN0IFN0cmluZyYgdGV4dCkKICAgICByZXBsYWNlTmV3bGluZXNXaXRoV2luZG93c1N0eWxl
TmV3bGluZXMoc3RyKTsKICNlbmRpZgogICAgIHJlcGxhY2VOQlNQV2l0aFNwYWNlKHN0cik7Ci0g
ICAgbV9kYXRhT2JqZWN0LT5wbGFpblRleHQgPSBzdHI7CisgICAgbV9kYXRhT2JqZWN0LT5tX3Bs
YWluVGV4dCA9IHN0cjsKIH0KIAogYm9vbCBDbGlwYm9hcmRDaHJvbWl1bTo6aGFzRGF0YSgpCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtV2lu
LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW1XaW4uY3Bw
CmluZGV4IGI0YTJjMjEuLjU0ZWM0YTcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vQ2xpcGJvYXJkQ2hyb21pdW1XaW4uY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vQ2xpcGJvYXJkQ2hyb21pdW1XaW4uY3BwCkBAIC00NCwxMSArNDQsMTEgQEAgU3RyaW5n
IENsaXBib2FyZENocm9taXVtOjp2YWxpZGF0ZUZpbGVOYW1lKGNvbnN0IFN0cmluZyYgdGl0bGUs
IENocm9taXVtRGF0YU9iamUKIHsKICAgICAvLyBSZW1vdmUgYW55IGludmFsaWQgZmlsZSBzeXN0
ZW0gY2hhcmFjdGVycy4KICAgICBTdHJpbmcgcmVzdWx0ID0gdGl0bGUucmVtb3ZlQ2hhcmFjdGVy
cygmaXNJbnZhbGlkRmlsZUNoYXJhY3Rlcik7Ci0gICAgaWYgKHJlc3VsdC5sZW5ndGgoKSArIGRh
dGFPYmplY3QtPmZpbGVFeHRlbnNpb24ubGVuZ3RoKCkgKyAxID49IE1BWF9QQVRIKSB7Ci0gICAg
ICAgIGlmIChkYXRhT2JqZWN0LT5maWxlRXh0ZW5zaW9uLmxlbmd0aCgpICsgMSA+PSBNQVhfUEFU
SCkKLSAgICAgICAgICAgIGRhdGFPYmplY3QtPmZpbGVFeHRlbnNpb24gPSAiIjsKLSAgICAgICAg
aWYgKHJlc3VsdC5sZW5ndGgoKSArIGRhdGFPYmplY3QtPmZpbGVFeHRlbnNpb24ubGVuZ3RoKCkg
KyAxID49IE1BWF9QQVRIKQotICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnN1YnN0cmluZygw
LCBNQVhfUEFUSCAtIGRhdGFPYmplY3QtPmZpbGVFeHRlbnNpb24ubGVuZ3RoKCkgLSAxKTsKKyAg
ICBpZiAocmVzdWx0Lmxlbmd0aCgpICsgZGF0YU9iamVjdC0+bV9maWxlRXh0ZW5zaW9uLmxlbmd0
aCgpICsgMSA+PSBNQVhfUEFUSCkgeworICAgICAgICBpZiAoZGF0YU9iamVjdC0+bV9maWxlRXh0
ZW5zaW9uLmxlbmd0aCgpICsgMSA+PSBNQVhfUEFUSCkKKyAgICAgICAgICAgIGRhdGFPYmplY3Qt
Pm1fZmlsZUV4dGVuc2lvbiA9ICIiOworICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCgpICsgZGF0
YU9iamVjdC0+bV9maWxlRXh0ZW5zaW9uLmxlbmd0aCgpICsgMSA+PSBNQVhfUEFUSCkKKyAgICAg
ICAgICAgIHJlc3VsdCA9IHJlc3VsdC5zdWJzdHJpbmcoMCwgTUFYX1BBVEggLSBkYXRhT2JqZWN0
LT5tX2ZpbGVFeHRlbnNpb24ubGVuZ3RoKCkgLSAxKTsKICAgICB9CiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRHJhZ0RhdGFDaHJv
bWl1bS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RyYWdEYXRhQ2hyb21pdW0uY3Bw
CmluZGV4IDY3NGQzNGQuLmNhNGMyNmUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vRHJhZ0RhdGFDaHJvbWl1bS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9EcmFnRGF0YUNocm9taXVtLmNwcApAQCAtNDMsNTAgKzQzLDUxIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogc3RhdGljIGJvb2wgY29udGFpbnNIVE1MKGNvbnN0IENocm9taXVtRGF0YU9iamVj
dCogZHJvcERhdGEpCiB7Ci0gICAgcmV0dXJuIGRyb3BEYXRhLT50ZXh0SHRtbC5sZW5ndGgoKSA+
IDA7CisgICAgcmV0dXJuIGRyb3BEYXRhLT50eXBlcygpLmNvbnRhaW5zKCJ0ZXh0L2h0bWwiKTsK
IH0KIAogYm9vbCBEcmFnRGF0YTo6Y29udGFpbnNVUkwoRmlsZW5hbWVDb252ZXJzaW9uUG9saWN5
IGZpbGVuYW1lUG9saWN5KSBjb25zdAogewotICAgIHJldHVybiAhYXNVUkwoZmlsZW5hbWVQb2xp
Y3kpLmlzRW1wdHkoKTsKKyAgICByZXR1cm4gbV9wbGF0Zm9ybURyYWdEYXRhLT50eXBlcygpLmNv
bnRhaW5zKCJ0ZXh0L3VyaS1saXN0IikKKyAgICAgICAgfHwgKGZpbGVuYW1lUG9saWN5ID09IENv
bnZlcnRGaWxlbmFtZXMgJiYgbV9wbGF0Zm9ybURyYWdEYXRhLT5oYXNGaWxlbmFtZXMoKSk7CiB9
CiAKIFN0cmluZyBEcmFnRGF0YTo6YXNVUkwoRmlsZW5hbWVDb252ZXJzaW9uUG9saWN5IGZpbGVu
YW1lUG9saWN5LCBTdHJpbmcqIHRpdGxlKSBjb25zdAogewotICAgIFN0cmluZyB1cmw7Ci0gICAg
aWYgKG1fcGxhdGZvcm1EcmFnRGF0YS0+aGFzVmFsaWRVUkwoKSkKLSAgICAgICAgdXJsID0gbV9w
bGF0Zm9ybURyYWdEYXRhLT5nZXRVUkwoKS5zdHJpbmcoKTsKLSAgICBlbHNlIGlmIChmaWxlbmFt
ZVBvbGljeSA9PSBDb252ZXJ0RmlsZW5hbWVzICYmICFtX3BsYXRmb3JtRHJhZ0RhdGEtPmZpbGVu
YW1lcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgU3RyaW5nIGZpbGVOYW1lID0gbV9wbGF0Zm9ybURy
YWdEYXRhLT5maWxlbmFtZXNbMF07CisgICAgU3RyaW5nIHVybCA9IG1fcGxhdGZvcm1EcmFnRGF0
YS0+Z2V0VVJMKHRpdGxlKTsKKyAgICBpZiAoIUtVUkwoS1VSTCgpLCB1cmwpLmlzVmFsaWQoKQor
ICAgICAgICAmJiBmaWxlbmFtZVBvbGljeSA9PSBDb252ZXJ0RmlsZW5hbWVzCisgICAgICAgICYm
IG1fcGxhdGZvcm1EcmFnRGF0YS0+aGFzRmlsZW5hbWVzKCkpIHsKKyAgICAgICAgU3RyaW5nIGZp
bGVOYW1lID0gbV9wbGF0Zm9ybURyYWdEYXRhLT5maWxlbmFtZXMoKVswXTsKICAgICAgICAgZmls
ZU5hbWUgPSBDaHJvbWl1bUJyaWRnZTo6Z2V0QWJzb2x1dGVQYXRoKGZpbGVOYW1lKTsKICAgICAg
ICAgdXJsID0gQ2hyb21pdW1CcmlkZ2U6OmZpbGVQYXRoVG9VUkwoZmlsZU5hbWUpLnN0cmluZygp
OworICAgICAgICBpZiAodGl0bGUpCisgICAgICAgICAgICAqdGl0bGUgPSAiIjsKICAgICB9Ci0g
Ci0gICAgLy8gfHRpdGxlfCBjYW4gYmUgTlVMTAotICAgIGlmICh0aXRsZSkKLSAgICAgICAgKnRp
dGxlID0gbV9wbGF0Zm9ybURyYWdEYXRhLT51cmxUaXRsZTsKICAgICByZXR1cm4gdXJsOwogfQog
CiBib29sIERyYWdEYXRhOjpjb250YWluc0ZpbGVzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gIW1f
cGxhdGZvcm1EcmFnRGF0YS0+ZmlsZW5hbWVzLmlzRW1wdHkoKTsKKyAgICByZXR1cm4gbV9wbGF0
Zm9ybURyYWdEYXRhLT5oYXNGaWxlbmFtZXMoKTsKIH0KIAogdm9pZCBEcmFnRGF0YTo6YXNGaWxl
bmFtZXMoVmVjdG9yPFN0cmluZz4mIHJlc3VsdCkgY29uc3QKIHsKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fcGxhdGZvcm1EcmFnRGF0YS0+ZmlsZW5hbWVzLnNpemUoKTsgKytpKQotICAg
ICAgICByZXN1bHQuYXBwZW5kKG1fcGxhdGZvcm1EcmFnRGF0YS0+ZmlsZW5hbWVzW2ldKTsKKyAg
ICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVzID0gbV9wbGF0Zm9ybURyYWdEYXRhLT5m
aWxlbmFtZXMoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZpbGVuYW1lcy5zaXplKCk7
ICsraSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZChmaWxlbmFtZXNbaV0pOwogfQogCiBib29sIERy
YWdEYXRhOjpjb250YWluc1BsYWluVGV4dCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICFtX3BsYXRm
b3JtRHJhZ0RhdGEtPnBsYWluVGV4dC5pc0VtcHR5KCk7CisgICAgcmV0dXJuIG1fcGxhdGZvcm1E
cmFnRGF0YS0+dHlwZXMoKS5jb250YWlucygidGV4dC9wbGFpbiIpOwogfQogCiBTdHJpbmcgRHJh
Z0RhdGE6OmFzUGxhaW5UZXh0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9wbGF0Zm9ybURyYWdE
YXRhLT5wbGFpblRleHQ7CisgICAgYm9vbCBpZ25vcmVkU3VjY2VzczsKKyAgICByZXR1cm4gbV9w
bGF0Zm9ybURyYWdEYXRhLT5nZXREYXRhKCJ0ZXh0L3BsYWluIiwgaWdub3JlZFN1Y2Nlc3MpOwog
fQogCiBib29sIERyYWdEYXRhOjpjb250YWluc0NvbG9yKCkgY29uc3QKQEAgLTEwMSw4ICsxMDIs
OSBAQCBib29sIERyYWdEYXRhOjpjYW5TbWFydFJlcGxhY2UoKSBjb25zdAogICAgIC8vIFRoaXMg
aXMgYWxsb3dlZCB3aGVuZXZlciB0aGUgZHJhZyBkYXRhIGNvbnRhaW5zIGEgJ3JhbmdlJyAoaWUu
LAogICAgIC8vIENsaXBib2FyZFdpbjo6d3JpdGVSYW5nZSBpcyBjYWxsZWQpLiAgRm9yIGV4YW1w
bGUsIGRyYWdnaW5nIGEgbGluawogICAgIC8vIHNob3VsZCBub3QgcmVzdWx0IGluIGEgc3BhY2Ug
YmVpbmcgYWRkZWQuCi0gICAgcmV0dXJuICFtX3BsYXRmb3JtRHJhZ0RhdGEtPnBsYWluVGV4dC5p
c0VtcHR5KCkKLSAgICAgICAgJiYgIW1fcGxhdGZvcm1EcmFnRGF0YS0+aGFzVmFsaWRVUkwoKTsK
KyAgICByZXR1cm4gbV9wbGF0Zm9ybURyYWdEYXRhLT50eXBlcygpLmNvbnRhaW5zKCJ0ZXh0L3Bs
YWluIikKKyAgICAgICAgLy8gRklYTUU6IERvIHdlIG5lZWQgdG8gY2hlY2sgVVJMIHZhbGlkaXR5
PworICAgICAgICAmJiAhbV9wbGF0Zm9ybURyYWdEYXRhLT50eXBlcygpLmNvbnRhaW5zKCJ0ZXh0
L3VyaS1saXN0Iik7CiB9CiAKIGJvb2wgRHJhZ0RhdGE6OmNvbnRhaW5zQ29tcGF0aWJsZUNvbnRl
bnQoKSBjb25zdApAQCAtMTM0LDkgKzEzNiwxMSBAQCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21l
bnQ+IERyYWdEYXRhOjphc0ZyYWdtZW50KERvY3VtZW50KiBkb2MpIGNvbnN0CiAgICAgICAgIC8v
ICAgIHJldHVybiBmcmFnbWVudDsKICAgICB9CiAKLSAgICBpZiAoIW1fcGxhdGZvcm1EcmFnRGF0
YS0+dGV4dEh0bWwuaXNFbXB0eSgpKSB7CisgICAgaWYgKGNvbnRhaW5zSFRNTChtX3BsYXRmb3Jt
RHJhZ0RhdGEpKSB7CisgICAgICAgIFN0cmluZyBiYXNlVVJMOworICAgICAgICBTdHJpbmcgaHRt
bCA9IG1fcGxhdGZvcm1EcmFnRGF0YS0+Z2V0SFRNTCgmYmFzZVVSTCk7CiAgICAgICAgIFJlZlB0
cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChk
b2MsCi0gICAgICAgICAgICBtX3BsYXRmb3JtRHJhZ0RhdGEtPnRleHRIdG1sLCBtX3BsYXRmb3Jt
RHJhZ0RhdGEtPmh0bWxCYXNlVXJsLCBGcmFnbWVudFNjcmlwdGluZ05vdEFsbG93ZWQpOworICAg
ICAgICAgICAgaHRtbCwgYmFzZVVSTCwgRnJhZ21lbnRTY3JpcHRpbmdOb3RBbGxvd2VkKTsKICAg
ICAgICAgcmV0dXJuIGZyYWdtZW50LnJlbGVhc2UoKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRHJhZ0RhdGFSZWYuaCBiL1dlYkNvcmUvcGxhdGZvcm0v
Y2hyb21pdW0vRHJhZ0RhdGFSZWYuaAppbmRleCBkZTFmYTFjLi4zNDQ3ZmE2IDEwMDY0NAotLS0g
YS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RyYWdEYXRhUmVmLmgKKysrIGIvV2ViQ29yZS9w
bGF0Zm9ybS9jaHJvbWl1bS9EcmFnRGF0YVJlZi5oCkBAIC0zNSw3ICszNSw3IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotICAgIHR5cGVkZWYgQ2hyb21pdW1EYXRhT2JqZWN0KiBEcmFnRGF0
YVJlZjsKK3R5cGVkZWYgQ2hyb21pdW1EYXRhT2JqZWN0KiBEcmFnRGF0YVJlZjsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVt
L1JlYWRhYmxlRGF0YU9iamVjdC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1JlYWRh
YmxlRGF0YU9iamVjdC5jcHAKaW5kZXggMWEzMzNiYi4uZDRhMTM2MSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9SZWFkYWJsZURhdGFPYmplY3QuY3BwCisrKyBiL1dlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vUmVhZGFibGVEYXRhT2JqZWN0LmNwcApAQCAtNDcsNyArNDcs
OCBAQCBQYXNzUmVmUHRyPFJlYWRhYmxlRGF0YU9iamVjdD4gUmVhZGFibGVEYXRhT2JqZWN0Ojpj
cmVhdGUoYm9vbCBpc0ZvckRyYWdnaW5nKQogfQogCiBSZWFkYWJsZURhdGFPYmplY3Q6OlJlYWRh
YmxlRGF0YU9iamVjdChib29sIGlzRm9yRHJhZ2dpbmcpCi0gICAgOiBtX2lzRm9yRHJhZ2dpbmco
aXNGb3JEcmFnZ2luZykKKyAgICA6IENocm9taXVtRGF0YU9iamVjdChpc0ZvckRyYWdnaW5nKQor
ICAgICwgbV9pc0ZvckRyYWdnaW5nKGlzRm9yRHJhZ2dpbmcpCiAgICAgLCBtX2NvbnRhaW5zRmls
ZW5hbWVzKGZhbHNlKQogICAgICwgbV9pc1R5cGVDYWNoZUluaXRpYWxpemVkKGZhbHNlKQogewpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9SZWFkYWJsZURhdGFPYmplY3Qu
aCBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUmVhZGFibGVEYXRhT2JqZWN0LmgKaW5kZXgg
NjBmNmQ0NS4uNDEzYzZhYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9S
ZWFkYWJsZURhdGFPYmplY3QuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1JlYWRh
YmxlRGF0YU9iamVjdC5oCkBAIC0zMSw2ICszMSw3IEBACiAjaWZuZGVmIFJlYWRhYmxlRGF0YU9i
amVjdF9oCiAjZGVmaW5lIFJlYWRhYmxlRGF0YU9iamVjdF9oCiAKKyNpbmNsdWRlICJDaHJvbWl1
bURhdGFPYmplY3QuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgPHd0
Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KQEAgLTQxLDcgKzQyLDEw
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gVXNlZCBmb3Igb25lIHdheSBjb21tdW5pY2F0
aW9uIG9mIGRyYWcvZHJvcCBhbmQgY29weS9wYXN0ZSBkYXRhIGZyb20gdGhlCiAvLyBicm93c2Vy
IHRvIHRoZSByZW5kZXJlci4KLWNsYXNzIFJlYWRhYmxlRGF0YU9iamVjdCA6IHB1YmxpYyBSZWZD
b3VudGVkPFJlYWRhYmxlRGF0YU9iamVjdD4geworLy8gRklYTUU6IERldmlydHVhbGl6ZSB0aGlz
IGNsYXNzIG9uY2UgdGhlIHRyYW5zaXRpb24gaXMgY29tcGxldGUuIE5vdGUgdGhhdAorLy8gd2Ug
ZG9uJ3QgYWN0dWFsbHkgdXNlIGFueSBvZiB0aGUgZmVhdHVyZXMgb2YgQ2hyb21pdW1EYXRhT2Jq
ZWN0OyBpdCdzIHB1cmVseQorLy8gc28gd2UgY2FuIHBhc3MgaW4gYSBSZWFkYWJsZURhdGFPYmpl
Y3QgdG8gRHJhZ0RhdGEsIGV0Yy4KK2NsYXNzIFJlYWRhYmxlRGF0YU9iamVjdCA6IHB1YmxpYyBD
aHJvbWl1bURhdGFPYmplY3QgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlYWRh
YmxlRGF0YU9iamVjdD4gY3JlYXRlKGJvb2wgaXNGb3JEcmFnZ2luZyk7CiAKZGlmZiAtLWdpdCBh
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmlu
ZGV4IDAyM2UxZDcuLmFhZTNhOTQgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDEw
LTA5LTA4ICBEYW5pZWwgQ2hlbmcgIDxkY2hlbmdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gUHJlcGFyZSBD
bGlwYm9hcmQvRHJhZ0RhdGEgZm9yIHRyYW5zaXRpb24gdG8gbmV3IGRyYWctYW5kLWRyb3AgaW50
ZXJmYWNlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NDQ5OTIKKworICAgICAgICBJbiBvcmRlciB0byBhdm9pZCBicmVha2luZyBDaHJvbWl1bSwgd2Ug
aGF2ZSB0aGUgcmVuZGVyZXIgc2lkZSBpbXBsZW1lbnQKKyAgICAgICAgYm90aCB0aGUgb2xkIGFu
ZCBuZXcgZHJhZ2dpbmcgaW50ZXJmYWNlIGFuZCBnYXRlIHRoZSBiZWhhdmlvciBiYXNlZCBvZmYK
KyAgICAgICAgb2Ygd2hpY2ggRGF0YU9iamVjdCBwb2ludGVyIGlzIHNldC4gVGhpcyBjaGFuZ2Ug
b25seSBhZmZlY3RzIGRyYWdnaW5nCisgICAgICAgIGludG8vb3ZlciB0aGUgcmVuZGVyZXI7IGl0
IGRvZXMgbm90IGFmZmVjdCBzdGFydGluZyBhIGRyYWcgb3IgY29weSBhbmQKKyAgICAgICAgcGFz
dGUuIE9uY2UgdGhlIGFwcHJvcHJpYXRlIENocm9taXVtIGNoYW5nZXMgbGFuZCwgdGhlIHRlbXBv
cmFyeQorICAgICAgICBjb25kaXRpb25hbCBicmFuY2hlcyB3aWxsIGJlIHJlbW92ZWQuCisKKyAg
ICAgICAgKiBwdWJsaWMvV2ViVmlldy5oOgorICAgICAgICAqIHNyYy9XZWJEcmFnRGF0YS5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYkRyYWdEYXRhOjppbml0aWFsaXplKToKKyAgICAgICAgKFdl
YktpdDo6V2ViRHJhZ0RhdGE6OnVybFRpdGxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0Rh
dGE6OnNldFVSTFRpdGxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0RhdGE6OmRvd25sb2Fk
TWV0YWRhdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFnRGF0YTo6c2V0RG93bmxvYWRNZXRh
ZGF0YSk6CisgICAgICAgIChXZWJLaXQ6OldlYkRyYWdEYXRhOjpmaWxlRXh0ZW5zaW9uKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViRHJhZ0RhdGE6OnNldEZpbGVFeHRlbnNpb24pOgorICAgICAgICAo
V2ViS2l0OjpXZWJEcmFnRGF0YTo6aGFzRmlsZU5hbWVzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
RHJhZ0RhdGE6OmZpbGVOYW1lcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkRyYWdEYXRhOjpzZXRG
aWxlTmFtZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFnRGF0YTo6YXBwZW5kVG9GaWxlTmFt
ZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFnRGF0YTo6cGxhaW5UZXh0KToKKyAgICAgICAg
KFdlYktpdDo6V2ViRHJhZ0RhdGE6OnNldFBsYWluVGV4dCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkRyYWdEYXRhOjpodG1sVGV4dCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRyYWdEYXRhOjpzZXRI
VE1MVGV4dCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRyYWdEYXRhOjpodG1sQmFzZVVSTCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkRyYWdEYXRhOjpzZXRIVE1MQmFzZVVSTCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkRyYWdEYXRhOjpmaWxlQ29udGVudEZpbGVOYW1lKToKKyAgICAgICAgKFdlYktp
dDo6V2ViRHJhZ0RhdGE6OnNldEZpbGVDb250ZW50RmlsZU5hbWUpOgorICAgICAgICAoV2ViS2l0
OjpXZWJEcmFnRGF0YTo6ZmlsZUNvbnRlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFnRGF0
YTo6c2V0RmlsZUNvbnRlbnQpOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpkcmFnVGFyZ2V0RHJhZ0VudGVyTmV3KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmRyYWdUYXJnZXREcmFnTGVhdmUpOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWV3SW1wbDo6ZHJhZ1RhcmdldERyb3ApOgorICAgICAgICAoV2ViS2l0OjpX
ZWJWaWV3SW1wbDo6ZHJhZ1RhcmdldERyYWdFbnRlck9yT3Zlcik6CisgICAgICAgICogc3JjL1dl
YlZpZXdJbXBsLmg6CisKIDIwMTAtMDktMDcgIERpbWl0cmkgR2xhemtvdiAgPGRnbGF6a292QGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByNjY4ODYuCmRp
ZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZpZXcuaCBiL1dlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViVmlldy5oCmluZGV4IDFiOTRkYTIuLjg3MDBkMDMgMTAwNjQ0Ci0tLSBh
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVmlldy5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViVmlldy5oCkBAIC0xOTgsNiArMTk4LDkgQEAgcHVibGljOgogICAgICAgICBjb25z
dCBXZWJEcmFnRGF0YSYsIGludCBpZGVudGl0eSwKICAgICAgICAgY29uc3QgV2ViUG9pbnQmIGNs
aWVudFBvaW50LCBjb25zdCBXZWJQb2ludCYgc2NyZWVuUG9pbnQsCiAgICAgICAgIFdlYkRyYWdP
cGVyYXRpb25zTWFzayBvcGVyYXRpb25zQWxsb3dlZCkgPSAwOworICAgIHZpcnR1YWwgV2ViRHJh
Z09wZXJhdGlvbiBkcmFnVGFyZ2V0RHJhZ0VudGVyTmV3KAorICAgICAgICBpbnQgaWRlbnRpdHks
IGNvbnN0IFdlYlBvaW50JiBjbGllbnRQb2ludCwgY29uc3QgV2ViUG9pbnQmIHNjcmVlblBvaW50
LAorICAgICAgICBXZWJEcmFnT3BlcmF0aW9uc01hc2sgb3BlcmF0aW9uc0FsbG93ZWQpID0gMDsK
ICAgICB2aXJ0dWFsIFdlYkRyYWdPcGVyYXRpb24gZHJhZ1RhcmdldERyYWdPdmVyKAogICAgICAg
ICBjb25zdCBXZWJQb2ludCYgY2xpZW50UG9pbnQsIGNvbnN0IFdlYlBvaW50JiBzY3JlZW5Qb2lu
dCwKICAgICAgICAgV2ViRHJhZ09wZXJhdGlvbnNNYXNrIG9wZXJhdGlvbnNBbGxvd2VkKSA9IDA7
CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRyYWdEYXRhLmNwcCBiL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViRHJhZ0RhdGEuY3BwCmluZGV4IDY0M2MzNWQuLjBkYWNjMmMgMTAw
NjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRHJhZ0RhdGEuY3BwCisrKyBiL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViRHJhZ0RhdGEuY3BwCkBAIC00OCw3ICs0OCw3IEBAIGNsYXNzIFdl
YkRyYWdEYXRhUHJpdmF0ZSA6IHB1YmxpYyBDaHJvbWl1bURhdGFPYmplY3QgewogCiB2b2lkIFdl
YkRyYWdEYXRhOjppbml0aWFsaXplKCkKIHsKLSAgICBhc3NpZ24oc3RhdGljX2Nhc3Q8V2ViRHJh
Z0RhdGFQcml2YXRlKj4oQ2hyb21pdW1EYXRhT2JqZWN0OjpjcmVhdGUoKS5yZWxlYXNlUmVmKCkp
KTsKKyAgICBhc3NpZ24oc3RhdGljX2Nhc3Q8V2ViRHJhZ0RhdGFQcml2YXRlKj4oQ2hyb21pdW1E
YXRhT2JqZWN0OjpjcmVhdGUodHJ1ZSkucmVsZWFzZVJlZigpKSk7CiB9CiAKIHZvaWQgV2ViRHJh
Z0RhdGE6OnJlc2V0KCkKQEAgLTc5LDEyMiArNzksMTIyIEBAIHZvaWQgV2ViRHJhZ0RhdGE6OnNl
dFVSTChjb25zdCBXZWJVUkwmIHVybCkKIFdlYlN0cmluZyBXZWJEcmFnRGF0YTo6dXJsVGl0bGUo
KSBjb25zdAogewogICAgIEFTU0VSVCghaXNOdWxsKCkpOwotICAgIHJldHVybiBtX3ByaXZhdGUt
PnVybFRpdGxlOworICAgIHJldHVybiBtX3ByaXZhdGUtPm1fdXJsVGl0bGU7CiB9CiAKIHZvaWQg
V2ViRHJhZ0RhdGE6OnNldFVSTFRpdGxlKGNvbnN0IFdlYlN0cmluZyYgdXJsVGl0bGUpCiB7CiAg
ICAgZW5zdXJlTXV0YWJsZSgpOwotICAgIG1fcHJpdmF0ZS0+dXJsVGl0bGUgPSB1cmxUaXRsZTsK
KyAgICBtX3ByaXZhdGUtPm1fdXJsVGl0bGUgPSB1cmxUaXRsZTsKIH0KIAogV2ViU3RyaW5nIFdl
YkRyYWdEYXRhOjpkb3dubG9hZE1ldGFkYXRhKCkgY29uc3QKIHsKICAgICBBU1NFUlQoIWlzTnVs
bCgpKTsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5kb3dubG9hZE1ldGFkYXRhOworICAgIHJldHVy
biBtX3ByaXZhdGUtPm1fZG93bmxvYWRNZXRhZGF0YTsKIH0KIAogdm9pZCBXZWJEcmFnRGF0YTo6
c2V0RG93bmxvYWRNZXRhZGF0YShjb25zdCBXZWJTdHJpbmcmIGRvd25sb2FkTWV0YWRhdGEpCiB7
CiAgICAgZW5zdXJlTXV0YWJsZSgpOwotICAgIG1fcHJpdmF0ZS0+ZG93bmxvYWRNZXRhZGF0YSA9
IGRvd25sb2FkTWV0YWRhdGE7CisgICAgbV9wcml2YXRlLT5tX2Rvd25sb2FkTWV0YWRhdGEgPSBk
b3dubG9hZE1ldGFkYXRhOwogfQogCiBXZWJTdHJpbmcgV2ViRHJhZ0RhdGE6OmZpbGVFeHRlbnNp
b24oKSBjb25zdAogewogICAgIEFTU0VSVCghaXNOdWxsKCkpOwotICAgIHJldHVybiBtX3ByaXZh
dGUtPmZpbGVFeHRlbnNpb247CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+bV9maWxlRXh0ZW5zaW9u
OwogfQogCiB2b2lkIFdlYkRyYWdEYXRhOjpzZXRGaWxlRXh0ZW5zaW9uKGNvbnN0IFdlYlN0cmlu
ZyYgZmlsZUV4dGVuc2lvbikKIHsKICAgICBlbnN1cmVNdXRhYmxlKCk7Ci0gICAgbV9wcml2YXRl
LT5maWxlRXh0ZW5zaW9uID0gZmlsZUV4dGVuc2lvbjsKKyAgICBtX3ByaXZhdGUtPm1fZmlsZUV4
dGVuc2lvbiA9IGZpbGVFeHRlbnNpb247CiB9CiAKIGJvb2wgV2ViRHJhZ0RhdGE6Omhhc0ZpbGVO
YW1lcygpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFpc051bGwoKSk7Ci0gICAgcmV0dXJuICFtX3By
aXZhdGUtPmZpbGVuYW1lcy5pc0VtcHR5KCk7CisgICAgcmV0dXJuICFtX3ByaXZhdGUtPm1fZmls
ZW5hbWVzLmlzRW1wdHkoKTsKIH0KIAogdm9pZCBXZWJEcmFnRGF0YTo6ZmlsZU5hbWVzKFdlYlZl
Y3RvcjxXZWJTdHJpbmc+JiBmaWxlTmFtZXMpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFpc051bGwo
KSk7Ci0gICAgZmlsZU5hbWVzID0gbV9wcml2YXRlLT5maWxlbmFtZXM7CisgICAgZmlsZU5hbWVz
ID0gbV9wcml2YXRlLT5tX2ZpbGVuYW1lczsKIH0KIAogdm9pZCBXZWJEcmFnRGF0YTo6c2V0Rmls
ZU5hbWVzKGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiBmaWxlTmFtZXMpCiB7CiAgICAgZW5z
dXJlTXV0YWJsZSgpOwotICAgIG1fcHJpdmF0ZS0+ZmlsZW5hbWVzLmNsZWFyKCk7Ci0gICAgbV9w
cml2YXRlLT5maWxlbmFtZXMuYXBwZW5kKGZpbGVOYW1lcy5kYXRhKCksIGZpbGVOYW1lcy5zaXpl
KCkpOworICAgIG1fcHJpdmF0ZS0+bV9maWxlbmFtZXMuY2xlYXIoKTsKKyAgICBtX3ByaXZhdGUt
Pm1fZmlsZW5hbWVzLmFwcGVuZChmaWxlTmFtZXMuZGF0YSgpLCBmaWxlTmFtZXMuc2l6ZSgpKTsK
IH0KIAogdm9pZCBXZWJEcmFnRGF0YTo6YXBwZW5kVG9GaWxlTmFtZXMoY29uc3QgV2ViU3RyaW5n
JiBmaWxlTmFtZSkKIHsKICAgICBlbnN1cmVNdXRhYmxlKCk7Ci0gICAgbV9wcml2YXRlLT5maWxl
bmFtZXMuYXBwZW5kKGZpbGVOYW1lKTsKKyAgICBtX3ByaXZhdGUtPm1fZmlsZW5hbWVzLmFwcGVu
ZChmaWxlTmFtZSk7CiB9CiAKIFdlYlN0cmluZyBXZWJEcmFnRGF0YTo6cGxhaW5UZXh0KCkgY29u
c3QKIHsKICAgICBBU1NFUlQoIWlzTnVsbCgpKTsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5wbGFp
blRleHQ7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+bV9wbGFpblRleHQ7CiB9CiAKIHZvaWQgV2Vi
RHJhZ0RhdGE6OnNldFBsYWluVGV4dChjb25zdCBXZWJTdHJpbmcmIHBsYWluVGV4dCkKIHsKICAg
ICBlbnN1cmVNdXRhYmxlKCk7Ci0gICAgbV9wcml2YXRlLT5wbGFpblRleHQgPSBwbGFpblRleHQ7
CisgICAgbV9wcml2YXRlLT5tX3BsYWluVGV4dCA9IHBsYWluVGV4dDsKIH0KIAogV2ViU3RyaW5n
IFdlYkRyYWdEYXRhOjpodG1sVGV4dCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFpc051bGwoKSk7
Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+dGV4dEh0bWw7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+
bV90ZXh0SHRtbDsKIH0KIAogdm9pZCBXZWJEcmFnRGF0YTo6c2V0SFRNTFRleHQoY29uc3QgV2Vi
U3RyaW5nJiBodG1sVGV4dCkKIHsKICAgICBlbnN1cmVNdXRhYmxlKCk7Ci0gICAgbV9wcml2YXRl
LT50ZXh0SHRtbCA9IGh0bWxUZXh0OworICAgIG1fcHJpdmF0ZS0+bV90ZXh0SHRtbCA9IGh0bWxU
ZXh0OwogfQogCiBXZWJVUkwgV2ViRHJhZ0RhdGE6Omh0bWxCYXNlVVJMKCkgY29uc3QKIHsKICAg
ICBBU1NFUlQoIWlzTnVsbCgpKTsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5odG1sQmFzZVVybDsK
KyAgICByZXR1cm4gbV9wcml2YXRlLT5tX2h0bWxCYXNlVXJsOwogfQogCiB2b2lkIFdlYkRyYWdE
YXRhOjpzZXRIVE1MQmFzZVVSTChjb25zdCBXZWJVUkwmIGh0bWxCYXNlVVJMKQogewogICAgIGVu
c3VyZU11dGFibGUoKTsKLSAgICBtX3ByaXZhdGUtPmh0bWxCYXNlVXJsID0gaHRtbEJhc2VVUkw7
CisgICAgbV9wcml2YXRlLT5tX2h0bWxCYXNlVXJsID0gaHRtbEJhc2VVUkw7CiB9CiAKIFdlYlN0
cmluZyBXZWJEcmFnRGF0YTo6ZmlsZUNvbnRlbnRGaWxlTmFtZSgpIGNvbnN0CiB7CiAgICAgQVNT
RVJUKCFpc051bGwoKSk7Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+ZmlsZUNvbnRlbnRGaWxlbmFt
ZTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5tX2ZpbGVDb250ZW50RmlsZW5hbWU7CiB9CiAKIHZv
aWQgV2ViRHJhZ0RhdGE6OnNldEZpbGVDb250ZW50RmlsZU5hbWUoY29uc3QgV2ViU3RyaW5nJiBm
aWxlTmFtZSkKIHsKICAgICBlbnN1cmVNdXRhYmxlKCk7Ci0gICAgbV9wcml2YXRlLT5maWxlQ29u
dGVudEZpbGVuYW1lID0gZmlsZU5hbWU7CisgICAgbV9wcml2YXRlLT5tX2ZpbGVDb250ZW50Rmls
ZW5hbWUgPSBmaWxlTmFtZTsKIH0KIAogV2ViRGF0YSBXZWJEcmFnRGF0YTo6ZmlsZUNvbnRlbnQo
KSBjb25zdAogewogICAgIEFTU0VSVCghaXNOdWxsKCkpOwotICAgIHJldHVybiBXZWJEYXRhKG1f
cHJpdmF0ZS0+ZmlsZUNvbnRlbnQpOworICAgIHJldHVybiBXZWJEYXRhKG1fcHJpdmF0ZS0+bV9m
aWxlQ29udGVudCk7CiB9CiAKIHZvaWQgV2ViRHJhZ0RhdGE6OnNldEZpbGVDb250ZW50KGNvbnN0
IFdlYkRhdGEmIGZpbGVDb250ZW50KQogewogICAgIGVuc3VyZU11dGFibGUoKTsKLSAgICBtX3By
aXZhdGUtPmZpbGVDb250ZW50ID0gZmlsZUNvbnRlbnQ7CisgICAgbV9wcml2YXRlLT5tX2ZpbGVD
b250ZW50ID0gZmlsZUNvbnRlbnQ7CiB9CiAKIFdlYkRyYWdEYXRhOjpXZWJEcmFnRGF0YShjb25z
dCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0PiYgZGF0YSkKZGlm
ZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwIGIvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKaW5kZXggZjYzYzkwOC4uYmQyZWQ4YiAxMDA2NDQK
LS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKKysrIGIvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKQEAgLTgyLDYgKzgyLDcgQEAKICNpbmNsdWRlICJQ
b3B1cE1lbnVDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlBvcHVwTWVudUNsaWVudC5oIgogI2luY2x1
ZGUgIlByb2dyZXNzVHJhY2tlci5oIgorI2luY2x1ZGUgIlJlYWRhYmxlRGF0YU9iamVjdC5oIgog
I2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgogI2lu
Y2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCkBAIC0xNTg3LDYgKzE1ODgsMjEgQEAgV2ViRHJhZ09w
ZXJhdGlvbiBXZWJWaWV3SW1wbDo6ZHJhZ1RhcmdldERyYWdFbnRlcigKICAgICByZXR1cm4gZHJh
Z1RhcmdldERyYWdFbnRlck9yT3ZlcihjbGllbnRQb2ludCwgc2NyZWVuUG9pbnQsIERyYWdFbnRl
cik7CiB9CiAKK1dlYkRyYWdPcGVyYXRpb24gV2ViVmlld0ltcGw6OmRyYWdUYXJnZXREcmFnRW50
ZXJOZXcoCisgICAgaW50IGlkZW50aXR5LAorICAgIGNvbnN0IFdlYlBvaW50JiBjbGllbnRQb2lu
dCwKKyAgICBjb25zdCBXZWJQb2ludCYgc2NyZWVuUG9pbnQsCisgICAgV2ViRHJhZ09wZXJhdGlv
bnNNYXNrIG9wZXJhdGlvbnNBbGxvd2VkKQoreworICAgIEFTU0VSVCghbV9jdXJyZW50RHJhZ0Rh
dGFOZXcuZ2V0KCkpOworCisgICAgbV9jdXJyZW50RHJhZ0RhdGFOZXcgPSBSZWFkYWJsZURhdGFP
YmplY3Q6OmNyZWF0ZSh0cnVlKTsKKyAgICBtX2RyYWdJZGVudGl0eSA9IGlkZW50aXR5OworICAg
IG1fb3BlcmF0aW9uc0FsbG93ZWQgPSBvcGVyYXRpb25zQWxsb3dlZDsKKworICAgIHJldHVybiBk
cmFnVGFyZ2V0RHJhZ0VudGVyT3JPdmVyKGNsaWVudFBvaW50LCBzY3JlZW5Qb2ludCwgRHJhZ0Vu
dGVyKTsKK30KKwogV2ViRHJhZ09wZXJhdGlvbiBXZWJWaWV3SW1wbDo6ZHJhZ1RhcmdldERyYWdP
dmVyKAogICAgIGNvbnN0IFdlYlBvaW50JiBjbGllbnRQb2ludCwKICAgICBjb25zdCBXZWJQb2lu
dCYgc2NyZWVuUG9pbnQsCkBAIC0xNTk5LDEwICsxNjE1LDExIEBAIFdlYkRyYWdPcGVyYXRpb24g
V2ViVmlld0ltcGw6OmRyYWdUYXJnZXREcmFnT3ZlcigKIAogdm9pZCBXZWJWaWV3SW1wbDo6ZHJh
Z1RhcmdldERyYWdMZWF2ZSgpCiB7Ci0gICAgQVNTRVJUKG1fY3VycmVudERyYWdEYXRhLmdldCgp
KTsKLQorICAgIC8vIEZJWE1FOiBUaGlzIGlzIHRlbXBvcmFyeSB3aGlsZSB1bnRpbCBDaHJvbWl1
bSBzaWRlIGlzIHRyYW5zaXRpb25lZCB0byB1c2UKKyAgICAvLyB0aGUgbmV3IGRyYWdnaW5nIGlu
dGVyZmFjZS4KKyAgICBBU1NFUlQobV9jdXJyZW50RHJhZ0RhdGEuZ2V0KCkgfHwgbV9jdXJyZW50
RHJhZ0RhdGFOZXcuZ2V0KCkpOwogICAgIERyYWdEYXRhIGRyYWdEYXRhKAotICAgICAgICBtX2N1
cnJlbnREcmFnRGF0YS5nZXQoKSwKKyAgICAgICAgbV9jdXJyZW50RHJhZ0RhdGEuZ2V0KCkgPyBt
X2N1cnJlbnREcmFnRGF0YS5nZXQoKSA6IG1fY3VycmVudERyYWdEYXRhTmV3LmdldCgpLAogICAg
ICAgICBJbnRQb2ludCgpLAogICAgICAgICBJbnRQb2ludCgpLAogICAgICAgICBzdGF0aWNfY2Fz
dDxEcmFnT3BlcmF0aW9uPihtX29wZXJhdGlvbnNBbGxvd2VkKSk7CkBAIC0xNjEyLDYgKzE2Mjks
NyBAQCB2b2lkIFdlYlZpZXdJbXBsOjpkcmFnVGFyZ2V0RHJhZ0xlYXZlKCkKICAgICBtX2RyYWdU
YXJnZXREaXNwYXRjaCA9IGZhbHNlOwogCiAgICAgbV9jdXJyZW50RHJhZ0RhdGEgPSAwOworICAg
IG1fY3VycmVudERyYWdEYXRhTmV3ID0gMDsKICAgICBtX2Ryb3BFZmZlY3QgPSBEcm9wRWZmZWN0
RGVmYXVsdDsKICAgICBtX2RyYWdPcGVyYXRpb24gPSBXZWJEcmFnT3BlcmF0aW9uTm9uZTsKICAg
ICBtX2RyYWdJZGVudGl0eSA9IDA7CkBAIC0xNjIwLDggKzE2MzgsNiBAQCB2b2lkIFdlYlZpZXdJ
bXBsOjpkcmFnVGFyZ2V0RHJhZ0xlYXZlKCkKIHZvaWQgV2ViVmlld0ltcGw6OmRyYWdUYXJnZXRE
cm9wKGNvbnN0IFdlYlBvaW50JiBjbGllbnRQb2ludCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFdlYlBvaW50JiBzY3JlZW5Qb2ludCkKIHsKLSAgICBBU1NFUlQobV9j
dXJyZW50RHJhZ0RhdGEuZ2V0KCkpOwotCiAgICAgLy8gSWYgdGhpcyB3ZWJ2aWV3IHRyYW5zaXRp
b25zIGZyb20gdGhlICJkcm9wIGFjY2VwdGluZyIgc3RhdGUgdG8gdGhlICJub3QKICAgICAvLyBh
Y2NlcHRpbmciIHN0YXRlLCB0aGVuIG91ciBJUEMgbWVzc2FnZSByZXBseSBpbmRpY2F0aW5nIHRo
YXQgbWF5IGJlIGluLQogICAgIC8vIGZsaWdodCwgb3IgZWxzZSBkZWxheWVkIGJ5IGphdmFzY3Jp
cHQgcHJvY2Vzc2luZyBpbiB0aGlzIHdlYnZpZXcuICBJZiBhCkBAIC0xNjM0LDggKzE2NTAsOSBA
QCB2b2lkIFdlYlZpZXdJbXBsOjpkcmFnVGFyZ2V0RHJvcChjb25zdCBXZWJQb2ludCYgY2xpZW50
UG9pbnQsCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBBU1NFUlQobV9jdXJyZW50RHJh
Z0RhdGEuZ2V0KCkgfHwgbV9jdXJyZW50RHJhZ0RhdGFOZXcuZ2V0KCkpOwogICAgIERyYWdEYXRh
IGRyYWdEYXRhKAotICAgICAgICBtX2N1cnJlbnREcmFnRGF0YS5nZXQoKSwKKyAgICAgICAgbV9j
dXJyZW50RHJhZ0RhdGEuZ2V0KCkgPyBtX2N1cnJlbnREcmFnRGF0YS5nZXQoKSA6IG1fY3VycmVu
dERyYWdEYXRhTmV3LmdldCgpLAogICAgICAgICBjbGllbnRQb2ludCwKICAgICAgICAgc2NyZWVu
UG9pbnQsCiAgICAgICAgIHN0YXRpY19jYXN0PERyYWdPcGVyYXRpb24+KG1fb3BlcmF0aW9uc0Fs
bG93ZWQpKTsKQEAgLTE2NDUsNiArMTY2Miw3IEBAIHZvaWQgV2ViVmlld0ltcGw6OmRyYWdUYXJn
ZXREcm9wKGNvbnN0IFdlYlBvaW50JiBjbGllbnRQb2ludCwKICAgICBtX2RyYWdUYXJnZXREaXNw
YXRjaCA9IGZhbHNlOwogCiAgICAgbV9jdXJyZW50RHJhZ0RhdGEgPSAwOworICAgIG1fY3VycmVu
dERyYWdEYXRhTmV3ID0gMDsKICAgICBtX2Ryb3BFZmZlY3QgPSBEcm9wRWZmZWN0RGVmYXVsdDsK
ICAgICBtX2RyYWdPcGVyYXRpb24gPSBXZWJEcmFnT3BlcmF0aW9uTm9uZTsKICAgICBtX2RyYWdJ
ZGVudGl0eSA9IDA7CkBAIC0xNjYwLDEwICsxNjc4LDkgQEAgaW50IFdlYlZpZXdJbXBsOjpkcmFn
SWRlbnRpdHkoKQogCiBXZWJEcmFnT3BlcmF0aW9uIFdlYlZpZXdJbXBsOjpkcmFnVGFyZ2V0RHJh
Z0VudGVyT3JPdmVyKGNvbnN0IFdlYlBvaW50JiBjbGllbnRQb2ludCwgY29uc3QgV2ViUG9pbnQm
IHNjcmVlblBvaW50LCBEcmFnQWN0aW9uIGRyYWdBY3Rpb24pCiB7Ci0gICAgQVNTRVJUKG1fY3Vy
cmVudERyYWdEYXRhLmdldCgpKTsKLQorICAgIEFTU0VSVChtX2N1cnJlbnREcmFnRGF0YS5nZXQo
KSB8fCBtX2N1cnJlbnREcmFnRGF0YU5ldy5nZXQoKSk7CiAgICAgRHJhZ0RhdGEgZHJhZ0RhdGEo
Ci0gICAgICAgIG1fY3VycmVudERyYWdEYXRhLmdldCgpLAorICAgICAgICBtX2N1cnJlbnREcmFn
RGF0YS5nZXQoKSA/IG1fY3VycmVudERyYWdEYXRhLmdldCgpIDogbV9jdXJyZW50RHJhZ0RhdGFO
ZXcuZ2V0KCksCiAgICAgICAgIGNsaWVudFBvaW50LAogICAgICAgICBzY3JlZW5Qb2ludCwKICAg
ICAgICAgc3RhdGljX2Nhc3Q8RHJhZ09wZXJhdGlvbj4obV9vcGVyYXRpb25zQWxsb3dlZCkpOwpk
aWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oIGIvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCmluZGV4IGE0MjA5OWMuLjJlNWVhMTkgMTAwNjQ0Ci0t
LSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAorKysgYi9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlZpZXdJbXBsLmgKQEAgLTYzLDYgKzYzLDcgQEAgY2xhc3MgUGxhdGZvcm1LZXli
b2FyZEV2ZW50OwogY2xhc3MgUG9wdXBDb250YWluZXI7CiBjbGFzcyBQb3B1cE1lbnVDbGllbnQ7
CiBjbGFzcyBSYW5nZTsKK2NsYXNzIFJlYWRhYmxlRGF0YU9iamVjdDsKIGNsYXNzIFJlbmRlclRo
ZW1lOwogY2xhc3MgV2lkZ2V0OwogfQpAQCAtMTQ4LDYgKzE0OSwxMSBAQCBwdWJsaWM6CiAgICAg
ICAgIGNvbnN0IFdlYlBvaW50JiBjbGllbnRQb2ludCwKICAgICAgICAgY29uc3QgV2ViUG9pbnQm
IHNjcmVlblBvaW50LAogICAgICAgICBXZWJEcmFnT3BlcmF0aW9uc01hc2sgb3BlcmF0aW9uc0Fs
bG93ZWQpOworICAgIHZpcnR1YWwgV2ViRHJhZ09wZXJhdGlvbiBkcmFnVGFyZ2V0RHJhZ0VudGVy
TmV3KAorICAgICAgICBpbnQgaWRlbnRpdHksCisgICAgICAgIGNvbnN0IFdlYlBvaW50JiBjbGll
bnRQb2ludCwKKyAgICAgICAgY29uc3QgV2ViUG9pbnQmIHNjcmVlblBvaW50LAorICAgICAgICBX
ZWJEcmFnT3BlcmF0aW9uc01hc2sgb3BlcmF0aW9uc0FsbG93ZWQpOwogICAgIHZpcnR1YWwgV2Vi
RHJhZ09wZXJhdGlvbiBkcmFnVGFyZ2V0RHJhZ092ZXIoCiAgICAgICAgIGNvbnN0IFdlYlBvaW50
JiBjbGllbnRQb2ludCwKICAgICAgICAgY29uc3QgV2ViUG9pbnQmIHNjcmVlblBvaW50LApAQCAt
NDE5LDYgKzQyNSw4IEBAIHByaXZhdGU6CiAKICAgICAvLyBBIGNvcHkgb2YgdGhlIHdlYiBkcm9w
IGRhdGEgb2JqZWN0IHdlIHJlY2VpdmVkIGZyb20gdGhlIGJyb3dzZXIuCiAgICAgUmVmUHRyPFdl
YkNvcmU6OkNocm9taXVtRGF0YU9iamVjdD4gbV9jdXJyZW50RHJhZ0RhdGE7CisgICAgLy8gRklY
TUU6IFJlbW92ZSB0aGUgZHVwbGljYXRpb24gb25jZSBDaHJvbWl1bSBpcyBzd2l0Y2hlZCBvdmVy
LgorICAgIFJlZlB0cjxXZWJDb3JlOjpSZWFkYWJsZURhdGFPYmplY3Q+IG1fY3VycmVudERyYWdE
YXRhTmV3OwogCiAgICAgLy8gVGhlIHBvaW50IHJlbGF0aXZlIHRvIHRoZSBjbGllbnQgYXJlYSB3
aGVyZSB0aGUgbW91c2Ugd2FzIGxhc3QgcHJlc3NlZAogICAgIC8vIGRvd24uIFRoaXMgaXMgdXNl
ZCBieSB0aGUgZHJhZyBjbGllbnQgdG8gZGV0ZXJtaW5lIHdoYXQgd2FzIHVuZGVyIHRoZQo=
</data>
<flag name="review"
          id="56114"
          type_id="1"
          status="-"
          setter="tony"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70167</attachid>
            <date>2010-10-07 16:24:00 -0700</date>
            <delta_ts>2010-10-07 17:17:08 -0700</delta_ts>
            <desc>Hypothetical patch</desc>
            <filename>foo.patch</filename>
            <type>text/plain</type>
            <size>53571</size>
            <attacher name="Daniel Cheng">dcheng</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
aW5kZXggMzM2N2NlZS4uNjkxNzRjZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
KysrIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTIyOTIsNiArMjI5Miw4IEBACiAgICAgICAg
ICAgICAncGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1CcmlkZ2UuaCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmNwcCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmgnLAorICAgICAgICAgICAgJ3Bs
YXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdExlZ2FjeS5jcHAnLAorICAgICAgICAg
ICAgJ3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdExlZ2FjeS5oJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5jcHAnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmgnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtTGludXguY3BwJywKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvZWRpdGluZy9jaHJvbWl1bS9FZGl0b3JDaHJvbWl1bS5jcHAgYi9XZWJD
b3JlL2VkaXRpbmcvY2hyb21pdW0vRWRpdG9yQ2hyb21pdW0uY3BwCmluZGV4IDJiZmI1YWYuLmNh
N2Y0MWEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9jaHJvbWl1bS9FZGl0b3JDaHJvbWl1
bS5jcHAKKysrIGIvV2ViQ29yZS9lZGl0aW5nL2Nocm9taXVtL0VkaXRvckNocm9taXVtLmNwcApA
QCAtMzksNyArMzksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFBhc3NSZWZQdHI8Q2xpcGJv
YXJkPiBFZGl0b3I6Om5ld0dlbmVyYWxDbGlwYm9hcmQoQ2xpcGJvYXJkQWNjZXNzUG9saWN5IHBv
bGljeSwgRnJhbWUqIGZyYW1lKQogewotICAgIHJldHVybiBDbGlwYm9hcmRDaHJvbWl1bTo6Y3Jl
YXRlKENsaXBib2FyZDo6Q29weUFuZFBhc3RlLCBDaHJvbWl1bURhdGFPYmplY3Q6OmNyZWF0ZShD
bGlwYm9hcmQ6OkNvcHlBbmRQYXN0ZSksIHBvbGljeSwgZnJhbWUpOworICAgIHJldHVybiBDbGlw
Ym9hcmRDaHJvbWl1bTo6Y3JlYXRlKENsaXBib2FyZDo6Q29weUFuZFBhc3RlLCBwb2xpY3ksIGZy
YW1lKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
YWdlL2Nocm9taXVtL0V2ZW50SGFuZGxlckNocm9taXVtLmNwcCBiL1dlYkNvcmUvcGFnZS9jaHJv
bWl1bS9FdmVudEhhbmRsZXJDaHJvbWl1bS5jcHAKaW5kZXggOTEzOGI4ZC4uOWI0MGZiMyAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9wYWdlL2Nocm9taXVtL0V2ZW50SGFuZGxlckNocm9taXVtLmNwcAor
KysgYi9XZWJDb3JlL3BhZ2UvY2hyb21pdW0vRXZlbnRIYW5kbGVyQ2hyb21pdW0uY3BwCkBAIC0x
MjgsOCArMTI4LDggQEAgYm9vbCBFdmVudEhhbmRsZXI6OmV2ZW50QWN0aXZhdGVkVmlldyhjb25z
dCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2ZW50KSBjb25zdAogCiBQYXNzUmVmUHRyPENsaXBib2Fy
ZD4gRXZlbnRIYW5kbGVyOjpjcmVhdGVEcmFnZ2luZ0NsaXBib2FyZCgpIGNvbnN0CiB7Ci0gICAg
UmVmUHRyPENocm9taXVtRGF0YU9iamVjdD4gZGF0YU9iamVjdCA9IENocm9taXVtRGF0YU9iamVj
dDo6Y3JlYXRlKENsaXBib2FyZDo6RHJhZ0FuZERyb3ApOwotICAgIHJldHVybiBDbGlwYm9hcmRD
aHJvbWl1bTo6Y3JlYXRlKENsaXBib2FyZDo6RHJhZ0FuZERyb3AsIGRhdGFPYmplY3QuZ2V0KCks
IENsaXBib2FyZFdyaXRhYmxlLCBtX2ZyYW1lKTsKKyAgICBSZWZQdHI8Q2hyb21pdW1EYXRhT2Jq
ZWN0TGVnYWN5PiBkYXRhT2JqZWN0ID0gQ2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5OjpjcmVhdGUo
Q2xpcGJvYXJkOjpEcmFnQW5kRHJvcCk7CisgICAgcmV0dXJuIENsaXBib2FyZENocm9taXVtOjpj
cmVhdGUoQ2xpcGJvYXJkOjpEcmFnQW5kRHJvcCwgQ2hyb21pdW1EYXRhT2JqZWN0OjpjcmVhdGUo
ZGF0YU9iamVjdCksIENsaXBib2FyZFdyaXRhYmxlLCBtX2ZyYW1lKTsKIH0KIAogdm9pZCBFdmVu
dEhhbmRsZXI6OmZvY3VzRG9jdW1lbnRWaWV3KCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmNwcAppbmRleCA3M2U2ZjQ4Li5hM2NkMzAxIDEwMDY0
NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5jcHAK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuY3BwCkBA
IC0xLDI1MCArMSwyMzAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgsIDIwMDksIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQotICogbWV0OgotICogCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQot
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IkNocm9taXVtRGF0YU9iamVjdC5oIgotCi0jaW5jbHVkZSAiQ2hyb21pdW1CcmlkZ2UuaCIKLSNp
bmNsdWRlICJDbGlwYm9hcmRNaW1lVHlwZXMuaCIKLSNpbmNsdWRlICJQYXN0ZWJvYXJkLmgiCi0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gUGVyIFJGQyAyNDgzLCB0aGUgbGluZSBzZXBhcmF0
b3IgZm9yICJ0ZXh0Ly4uLiIgTUlNRSB0eXBlcyBpcyBDUi1MRi4KLXN0YXRpYyBjaGFyIGNvbnN0
KiBjb25zdCB0ZXh0TUlNRVR5cGVMaW5lU2VwYXJhdG9yID0gIlxyXG4iOwotCi12b2lkIENocm9t
aXVtRGF0YU9iamVjdDo6Y2xlYXJEYXRhKGNvbnN0IFN0cmluZyYgdHlwZSkKLXsKLSAgICBpZiAo
dHlwZSA9PSBtaW1lVHlwZVRleHRQbGFpbikgewotICAgICAgICBtX3BsYWluVGV4dCA9ICIiOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHR5cGUgPT0gbWltZVR5cGVVUkwgfHwg
dHlwZSA9PSBtaW1lVHlwZVRleHRVUklMaXN0KSB7Ci0gICAgICAgIG1fdXJpTGlzdCA9ICIiOwot
ICAgICAgICBtX3VybCA9IEtVUkwoKTsKLSAgICAgICAgbV91cmxUaXRsZSA9ICIiOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHR5cGUgPT0gbWltZVR5cGVUZXh0SFRNTCkgewot
ICAgICAgICBtX3RleHRIdG1sID0gIiI7Ci0gICAgICAgIG1faHRtbEJhc2VVcmwgPSBLVVJMKCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAodHlwZSA9PSBtaW1lVHlwZURvd25s
b2FkVVJMKSB7Ci0gICAgICAgIG1fZG93bmxvYWRNZXRhZGF0YSA9ICIiOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotfQotCi12b2lkIENocm9taXVtRGF0YU9iamVjdDo6Y2xlYXJBbGwoKQotewot
ICAgIGNsZWFyQWxsRXhjZXB0RmlsZXMoKTsKLSAgICBtX2ZpbGVuYW1lcy5jbGVhcigpOwotfQot
Ci12b2lkIENocm9taXVtRGF0YU9iamVjdDo6Y2xlYXJBbGxFeGNlcHRGaWxlcygpCi17Ci0gICAg
bV91cmxUaXRsZSA9ICIiOwotICAgIG1fdXJsID0gS1VSTCgpOwotICAgIG1fdXJpTGlzdCA9ICIi
OwotICAgIG1fZG93bmxvYWRNZXRhZGF0YSA9ICIiOwotICAgIG1fZmlsZUV4dGVuc2lvbiA9ICIi
OwotICAgIG1fcGxhaW5UZXh0ID0gIiI7Ci0gICAgbV90ZXh0SHRtbCA9ICIiOwotICAgIG1faHRt
bEJhc2VVcmwgPSBLVVJMKCk7Ci0gICAgbV9maWxlQ29udGVudEZpbGVuYW1lID0gIiI7Ci0gICAg
aWYgKG1fZmlsZUNvbnRlbnQpCi0gICAgICAgIG1fZmlsZUNvbnRlbnQtPmNsZWFyKCk7Ci19Ci0K
LWJvb2wgQ2hyb21pdW1EYXRhT2JqZWN0OjpoYXNEYXRhKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
IW1fdXJsLmlzRW1wdHkoKQotICAgICAgICB8fCAhbV91cmlMaXN0LmlzRW1wdHkoKQotICAgICAg
ICB8fCAhbV9kb3dubG9hZE1ldGFkYXRhLmlzRW1wdHkoKQotICAgICAgICB8fCAhbV9maWxlRXh0
ZW5zaW9uLmlzRW1wdHkoKQotICAgICAgICB8fCAhbV9maWxlbmFtZXMuaXNFbXB0eSgpCi0gICAg
ICAgIHx8ICFtX3BsYWluVGV4dC5pc0VtcHR5KCkKLSAgICAgICAgfHwgIW1fdGV4dEh0bWwuaXNF
bXB0eSgpCi0gICAgICAgIHx8IG1fZmlsZUNvbnRlbnQ7Ci19Ci0KLUhhc2hTZXQ8U3RyaW5nPiBD
aHJvbWl1bURhdGFPYmplY3Q6OnR5cGVzKCkgY29uc3QKLXsKLSAgICAvLyBUaGlzIGlzIGN1cnJl
bnRseSBicm9rZW4gZm9yIHBhc3RlYm9hcmQgZXZlbnRzLCBhbmQgYWx3YXlzIGhhcyBiZWVuLgot
ICAgIEhhc2hTZXQ8U3RyaW5nPiByZXN1bHRzOwotCi0gICAgaWYgKCFtX3BsYWluVGV4dC5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgcmVzdWx0cy5hZGQobWltZVR5cGVUZXh0KTsKLSAgICAgICAgcmVz
dWx0cy5hZGQobWltZVR5cGVUZXh0UGxhaW4pOwotICAgIH0KLQotICAgIGlmIChtX3VybC5pc1Zh
bGlkKCkpCi0gICAgICAgIHJlc3VsdHMuYWRkKG1pbWVUeXBlVVJMKTsKLQotICAgIGlmICghbV91
cmlMaXN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmVzdWx0cy5hZGQobWltZVR5cGVUZXh0VVJJTGlz
dCk7Ci0KLSAgICBpZiAoIW1fdGV4dEh0bWwuaXNFbXB0eSgpKQotICAgICAgICByZXN1bHRzLmFk
ZChtaW1lVHlwZVRleHRIVE1MKTsKLQotICAgIGlmICghbV9maWxlbmFtZXMuaXNFbXB0eSgpKQot
ICAgICAgICByZXN1bHRzLmFkZCgiRmlsZXMiKTsKLQotICAgIHJldHVybiByZXN1bHRzOwotfQot
Ci1TdHJpbmcgQ2hyb21pdW1EYXRhT2JqZWN0OjpnZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwg
Ym9vbCYgc3VjY2VzcykKLXsKLSAgICBpZiAodHlwZSA9PSBtaW1lVHlwZVRleHRQbGFpbikgewot
ICAgICAgICBpZiAobV9jbGlwYm9hcmRUeXBlID09IENsaXBib2FyZDo6Q29weUFuZFBhc3RlKSB7
Ci0gICAgICAgICAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyIGJ1ZmZlciA9
Ci0gICAgICAgICAgICAgICAgUGFzdGVib2FyZDo6Z2VuZXJhbFBhc3RlYm9hcmQoKS0+aXNTZWxl
Y3Rpb25Nb2RlKCkgPwotICAgICAgICAgICAgICAgIFBhc3RlYm9hcmRQcml2YXRlOjpTZWxlY3Rp
b25CdWZmZXIgOgotICAgICAgICAgICAgICAgIFBhc3RlYm9hcmRQcml2YXRlOjpTdGFuZGFyZEJ1
ZmZlcjsKLSAgICAgICAgICAgIFN0cmluZyB0ZXh0ID0gQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2Fy
ZFJlYWRQbGFpblRleHQoYnVmZmVyKTsKLSAgICAgICAgICAgIHN1Y2Nlc3MgPSAhdGV4dC5pc0Vt
cHR5KCk7Ci0gICAgICAgICAgICByZXR1cm4gdGV4dDsKLSAgICAgICAgfQotICAgICAgICBzdWNj
ZXNzID0gIW1fcGxhaW5UZXh0LmlzRW1wdHkoKTsKLSAgICAgICAgcmV0dXJuIG1fcGxhaW5UZXh0
OwotICAgIH0KLQotICAgIGlmICh0eXBlID09IG1pbWVUeXBlVVJMKSB7Ci0gICAgICAgIHN1Y2Nl
c3MgPSAhbV91cmwuaXNFbXB0eSgpOwotICAgICAgICByZXR1cm4gbV91cmwuc3RyaW5nKCk7Ci0g
ICAgfQotCi0gICAgaWYgKHR5cGUgPT0gbWltZVR5cGVUZXh0VVJJTGlzdCkgewotICAgICAgICBz
dWNjZXNzID0gIW1fdXJpTGlzdC5pc0VtcHR5KCk7Ci0gICAgICAgIHJldHVybiBtX3VyaUxpc3Q7
Ci0gICAgfQotCi0gICAgaWYgKHR5cGUgPT0gbWltZVR5cGVUZXh0SFRNTCkgewotICAgICAgICBp
ZiAobV9jbGlwYm9hcmRUeXBlID09IENsaXBib2FyZDo6Q29weUFuZFBhc3RlKSB7Ci0gICAgICAg
ICAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyIGJ1ZmZlciA9Ci0gICAgICAg
ICAgICAgICAgUGFzdGVib2FyZDo6Z2VuZXJhbFBhc3RlYm9hcmQoKS0+aXNTZWxlY3Rpb25Nb2Rl
KCkgPwotICAgICAgICAgICAgICAgIFBhc3RlYm9hcmRQcml2YXRlOjpTZWxlY3Rpb25CdWZmZXIg
OgotICAgICAgICAgICAgICAgIFBhc3RlYm9hcmRQcml2YXRlOjpTdGFuZGFyZEJ1ZmZlcjsKLSAg
ICAgICAgICAgIFN0cmluZyBodG1sVGV4dDsKLSAgICAgICAgICAgIEtVUkwgc291cmNlVVJMOwot
ICAgICAgICAgICAgQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFJlYWRIVE1MKGJ1ZmZlciwgJmh0
bWxUZXh0LCAmc291cmNlVVJMKTsKLSAgICAgICAgICAgIHN1Y2Nlc3MgPSAhaHRtbFRleHQuaXNF
bXB0eSgpOwotICAgICAgICAgICAgcmV0dXJuIGh0bWxUZXh0OwotICAgICAgICB9Ci0gICAgICAg
IHN1Y2Nlc3MgPSAhbV90ZXh0SHRtbC5pc0VtcHR5KCk7Ci0gICAgICAgIHJldHVybiBtX3RleHRI
dG1sOwotICAgIH0KLQotICAgIGlmICh0eXBlID09IG1pbWVUeXBlRG93bmxvYWRVUkwpIHsKLSAg
ICAgICAgc3VjY2VzcyA9ICFtX2Rvd25sb2FkTWV0YWRhdGEuaXNFbXB0eSgpOwotICAgICAgICBy
ZXR1cm4gbV9kb3dubG9hZE1ldGFkYXRhOwotICAgIH0KLQotICAgIHN1Y2Nlc3MgPSBmYWxzZTsK
LSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLWJvb2wgQ2hyb21pdW1EYXRhT2JqZWN0OjpzZXRE
YXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKQotewotICAgIGlmICh0
eXBlID09IG1pbWVUeXBlVGV4dFBsYWluKSB7Ci0gICAgICAgIG1fcGxhaW5UZXh0ID0gZGF0YTsK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKHR5cGUgPT0gbWltZVR5cGVV
UkwgfHwgdHlwZSA9PSBtaW1lVHlwZVRleHRVUklMaXN0KSB7Ci0gICAgICAgIG1fdXJsID0gS1VS
TCgpOwotICAgICAgICBWZWN0b3I8U3RyaW5nPiB1cmlMaXN0OwotICAgICAgICAvLyBMaW5lIHNl
cGFyYXRvciBpcyBcclxuIHBlciBSRkMgMjQ4MyAtIGhvd2V2ZXIsIGZvciBjb21wYXRpYmlsaXR5
Ci0gICAgICAgIC8vIHJlYXNvbnMgd2UgYWxzbyBhbGxvdyBqdXN0IFxuIGhlcmUuCi0gICAgICAg
IGRhdGEuc3BsaXQoJ1xuJywgdXJpTGlzdCk7Ci0gICAgICAgIC8vIFByb2Nlc3MgdGhlIGlucHV0
IGFuZCBjb3B5IHRoZSBmaXJzdCB2YWxpZCBVUkwgaW50byB0aGUgdXJsIG1lbWJlci4KLSAgICAg
ICAgLy8gSW4gY2FzZSBubyBVUkxzIGNhbiBiZSBmb3VuZCwgc3Vic2VxdWVudCBjYWxscyB0byBn
ZXREYXRhKCJVUkwiKQotICAgICAgICAvLyB3aWxsIGdldCBhbiBlbXB0eSBzdHJpbmcuIFRoaXMg
aXMgaW4gbGluZSB3aXRoIHRoZSBIVE1MNSBzcGVjIChzZWUKLSAgICAgICAgLy8gIlRoZSBEcmFn
RXZlbnQgYW5kIERhdGFUcmFuc2ZlciBpbnRlcmZhY2VzIikuCi0gICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgdXJpTGlzdC5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgU3RyaW5nJiBs
aW5lID0gdXJpTGlzdFtpXTsKLSAgICAgICAgICAgIGxpbmUgPSBsaW5lLnN0cmlwV2hpdGVTcGFj
ZSgpOwotICAgICAgICAgICAgaWYgKGxpbmUuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobGluZVswXSA9PSAnIycp
Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBLVVJMIHVybCA9IEtVUkwo
UGFyc2VkVVJMU3RyaW5nLCBsaW5lKTsKLSAgICAgICAgICAgIGlmICh1cmwuaXNWYWxpZCgpKSB7
Ci0gICAgICAgICAgICAgICAgbV91cmwgPSB1cmw7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgbV91cmlMaXN0ID0gZGF0YTsKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKHR5cGUgPT0gbWltZVR5cGVUZXh0SFRN
TCkgewotICAgICAgICBtX3RleHRIdG1sID0gZGF0YTsKLSAgICAgICAgbV9odG1sQmFzZVVybCA9
IEtVUkwoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKHR5cGUgPT0g
bWltZVR5cGVEb3dubG9hZFVSTCkgewotICAgICAgICBtX2Rvd25sb2FkTWV0YWRhdGEgPSBkYXRh
OwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LUNocm9taXVtRGF0YU9iamVjdDo6Q2hyb21pdW1EYXRhT2JqZWN0KENsaXBib2FyZDo6Q2xpcGJv
YXJkVHlwZSBjbGlwYm9hcmRUeXBlKQotICAgIDogbV9jbGlwYm9hcmRUeXBlKGNsaXBib2FyZFR5
cGUpCi17Ci19Ci0KLUNocm9taXVtRGF0YU9iamVjdDo6Q2hyb21pdW1EYXRhT2JqZWN0KGNvbnN0
IENocm9taXVtRGF0YU9iamVjdCYgb3RoZXIpCi0gICAgOiBSZWZDb3VudGVkPENocm9taXVtRGF0
YU9iamVjdD4oKQotICAgICwgbV9jbGlwYm9hcmRUeXBlKG90aGVyLm1fY2xpcGJvYXJkVHlwZSkK
LSAgICAsIG1fdXJsVGl0bGUob3RoZXIubV91cmxUaXRsZSkKLSAgICAsIG1fZG93bmxvYWRNZXRh
ZGF0YShvdGhlci5tX2Rvd25sb2FkTWV0YWRhdGEpCi0gICAgLCBtX2ZpbGVFeHRlbnNpb24ob3Ro
ZXIubV9maWxlRXh0ZW5zaW9uKQotICAgICwgbV9maWxlbmFtZXMob3RoZXIubV9maWxlbmFtZXMp
Ci0gICAgLCBtX3BsYWluVGV4dChvdGhlci5tX3BsYWluVGV4dCkKLSAgICAsIG1fdGV4dEh0bWwo
b3RoZXIubV90ZXh0SHRtbCkKLSAgICAsIG1faHRtbEJhc2VVcmwob3RoZXIubV9odG1sQmFzZVVy
bCkKLSAgICAsIG1fZmlsZUNvbnRlbnRGaWxlbmFtZShvdGhlci5tX2ZpbGVDb250ZW50RmlsZW5h
bWUpCi0gICAgLCBtX3VybChvdGhlci5tX3VybCkKLSAgICAsIG1fdXJpTGlzdChvdGhlci5tX3Vy
aUxpc3QpCi17Ci0gICAgaWYgKG90aGVyLm1fZmlsZUNvbnRlbnQuZ2V0KCkpCi0gICAgICAgIG1f
ZmlsZUNvbnRlbnQgPSBvdGhlci5tX2ZpbGVDb250ZW50LT5jb3B5KCk7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKy8qDQorICogQ29weXJpZ2h0IChjKSAyMDEwLCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLg0KKyAqIA0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dA0KKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUNCisgKiBtZXQ6DQorICogDQorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQNCisgKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQ0K
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXINCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlDQorICogZGlzdHJpYnV0aW9uLg0KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMNCisg
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQ0KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uDQorICogDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUw0KKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UDQor
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SDQorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQNCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwNCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UDQorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsDQorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZDQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VA0KKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQ0KKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICovDQorDQorI2luY2x1ZGUg
ImNvbmZpZy5oIg0KKyNpbmNsdWRlICJDaHJvbWl1bURhdGFPYmplY3QuaCINCisNCituYW1lc3Bh
Y2UgV2ViQ29yZSB7DQorDQorQ2hyb21pdW1EYXRhT2JqZWN0OjpDaHJvbWl1bURhdGFPYmplY3Qo
UGFzc1JlZlB0cjxDaHJvbWl1bURhdGFPYmplY3RMZWdhY3k+IGRhdGEpDQorICAgIDogUmVmQ291
bnRlZDxDaHJvbWl1bURhdGFPYmplY3Q+KCkNCisgICAgLCBtX2xlZ2FjeURhdGEoZGF0YSkNCit7
DQorfQ0KKw0KK0Nocm9taXVtRGF0YU9iamVjdDo6Q2hyb21pdW1EYXRhT2JqZWN0KFBhc3NSZWZQ
dHI8UmVhZGFibGVEYXRhT2JqZWN0PiBkYXRhKQ0KKyAgICA6IFJlZkNvdW50ZWQ8Q2hyb21pdW1E
YXRhT2JqZWN0PigpDQorICAgICwgbV9yZWFkYWJsZURhdGEoZGF0YSkNCit7DQorfQ0KKw0KK0No
cm9taXVtRGF0YU9iamVjdDo6Q2hyb21pdW1EYXRhT2JqZWN0KFBhc3NSZWZQdHI8V3JpdGFibGVE
YXRhT2JqZWN0PiBkYXRhKQ0KKyAgICA6IFJlZkNvdW50ZWQ8Q2hyb21pdW1EYXRhT2JqZWN0Pigp
DQorICAgICwgbV93cml0YWJsZURhdGEoZGF0YSkNCit7DQorfQ0KKw0KK1Bhc3NSZWZQdHI8Q2hy
b21pdW1EYXRhT2JqZWN0PiBDaHJvbWl1bURhdGFPYmplY3Q6OmNyZWF0ZShQYXNzUmVmUHRyPENo
cm9taXVtRGF0YU9iamVjdExlZ2FjeT4gZGF0YSkNCit7DQorICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgQ2hyb21pdW1EYXRhT2JqZWN0KGRhdGEpKTsNCit9DQorDQorUGFzc1JlZlB0cjxDaHJvbWl1
bURhdGFPYmplY3Q+IENocm9taXVtRGF0YU9iamVjdDo6Y3JlYXRlUmVhZGFibGUoQ2xpcGJvYXJk
OjpDbGlwYm9hcmRUeXBlIGNsaXBib2FyZFR5cGUpDQorew0KKyAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IENocm9taXVtRGF0YU9iamVjdChSZWFkYWJsZURhdGFPYmplY3Q6OmNyZWF0ZShjbGlwYm9h
cmRUeXBlKSkpOw0KK30NCisNCitQYXNzUmVmUHRyPENocm9taXVtRGF0YU9iamVjdD4gQ2hyb21p
dW1EYXRhT2JqZWN0OjpjcmVhdGVXcml0YWJsZShDbGlwYm9hcmQ6OkNsaXBib2FyZFR5cGUgY2xp
cGJvYXJkVHlwZSkNCit7DQorICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2hyb21pdW1EYXRhT2Jq
ZWN0KFdyaXRhYmxlRGF0YU9iamVjdDo6Y3JlYXRlKGNsaXBib2FyZFR5cGUpKSk7DQorfQ0KKw0K
K3ZvaWQgQ2hyb21pdW1EYXRhT2JqZWN0OjpjbGVhckRhdGEoY29uc3QgU3RyaW5nJiB0eXBlKQ0K
K3sNCisgICAgaWYgKG1fbGVnYWN5RGF0YSkNCisgICAgICAgICAgbV9sZWdhY3lEYXRhLT5jbGVh
ckRhdGEodHlwZSk7DQorICAgIGVsc2UNCisgICAgICAgICAgbV93cml0YWJsZURhdGEtPmNsZWFy
RGF0YSh0eXBlKTsNCit9DQorDQordm9pZCBDaHJvbWl1bURhdGFPYmplY3Q6OmNsZWFyQWxsKCkN
Cit7DQorICAgIGlmIChtX2xlZ2FjeURhdGEpDQorICAgICAgICAgIG1fbGVnYWN5RGF0YS0+Y2xl
YXJBbGwoKTsNCisgICAgZWxzZQ0KKyAgICAgICAgICBtX3dyaXRhYmxlRGF0YS0+Y2xlYXJBbGwo
KTsNCit9DQorDQordm9pZCBDaHJvbWl1bURhdGFPYmplY3Q6OmNsZWFyQWxsRXhjZXB0RmlsZXMo
KQ0KK3sNCisgICAgaWYgKG1fbGVnYWN5RGF0YSkNCisgICAgICAgICAgbV9sZWdhY3lEYXRhLT5j
bGVhckFsbEV4Y2VwdEZpbGVzKCk7DQorICAgIGVsc2UNCisgICAgICAgICAgbV93cml0YWJsZURh
dGEtPmNsZWFyQWxsRXhjZXB0RmlsZXMoKTsNCit9DQorDQorYm9vbCBDaHJvbWl1bURhdGFPYmpl
Y3Q6Omhhc0RhdGEoKSBjb25zdA0KK3sNCisgICAgaWYgKG1fbGVnYWN5RGF0YSkNCisgICAgICAg
IHJldHVybiBtX2xlZ2FjeURhdGEtPmhhc0RhdGEoKTsNCisgICAgZWxzZQ0KKyAgICAgICAgcmV0
dXJuIG1fcmVhZGFibGVEYXRhLT5oYXNEYXRhKCk7DQorfQ0KKw0KK0hhc2hTZXQ8U3RyaW5nPiBD
aHJvbWl1bURhdGFPYmplY3Q6OnR5cGVzKCkgY29uc3QNCit7DQorICAgIGlmIChtX2xlZ2FjeURh
dGEpDQorICAgICAgICByZXR1cm4gbV9sZWdhY3lEYXRhLT50eXBlcygpOw0KKyAgICBlbHNlDQor
ICAgICAgICByZXR1cm4gbV9yZWFkYWJsZURhdGEtPnR5cGVzKCk7DQorfQ0KKw0KK1N0cmluZyBD
aHJvbWl1bURhdGFPYmplY3Q6OmdldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBib29sJiBzdWNj
ZXNzKQ0KK3sNCisgICAgaWYgKG1fbGVnYWN5RGF0YSkNCisgICAgICAgIHJldHVybiBtX2xlZ2Fj
eURhdGEtPmdldERhdGEodHlwZSwgc3VjY2Vzcyk7DQorICAgIGVsc2UNCisgICAgICAgIHJldHVy
biBtX3JlYWRhYmxlRGF0YS0+Z2V0RGF0YSh0eXBlLCBzdWNjZXNzKTsNCit9DQorDQorYm9vbCBD
aHJvbWl1bURhdGFPYmplY3Q6OnNldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJp
bmcmIGRhdGEpDQorew0KKyAgICBpZiAobV9sZWdhY3lEYXRhKQ0KKyAgICAgICAgcmV0dXJuIG1f
bGVnYWN5RGF0YS0+c2V0RGF0YSh0eXBlLCBkYXRhKTsNCisgICAgZWxzZQ0KKyAgICAgICAgcmV0
dXJuIG1fd3JpdGFibGVEYXRhLT5zZXREYXRhKHR5cGUsIGRhdGEpOw0KK30NCisNCitTdHJpbmcg
Q2hyb21pdW1EYXRhT2JqZWN0Ojp1cmxUaXRsZSgpIGNvbnN0DQorew0KKyAgICBpZiAobV9sZWdh
Y3lEYXRhKQ0KKyAgICAgICAgcmV0dXJuIG1fbGVnYWN5RGF0YS0+dXJsVGl0bGUoKTsNCisgICAg
ZWxzZQ0KKyAgICAgICAgcmV0dXJuIG1fcmVhZGFibGVEYXRhLT51cmxUaXRsZSgpOw0KK30NCisN
Cit2b2lkIENocm9taXVtRGF0YU9iamVjdDo6c2V0VXJsVGl0bGUoY29uc3QgU3RyaW5nJiB1cmxU
aXRsZSkNCit7DQorICAgIGlmIChtX2xlZ2FjeURhdGEpDQorICAgICAgICBtX2xlZ2FjeURhdGEt
PnNldFVybFRpdGxlKHVybFRpdGxlKTsNCisgICAgZWxzZQ0KKyAgICAgICAgbV93cml0YWJsZURh
dGEtPnNldFVybFRpdGxlKHVybFRpdGxlKTsNCit9DQorDQorS1VSTCBDaHJvbWl1bURhdGFPYmpl
Y3Q6Omh0bWxCYXNlVXJsKCkgY29uc3QNCit7DQorICAgIGlmIChtX2xlZ2FjeURhdGEpDQorICAg
ICAgICByZXR1cm4gbV9sZWdhY3lEYXRhLT5odG1sQmFzZVVybCgpOw0KKyAgICBlbHNlDQorICAg
ICAgICByZXR1cm4gbV9yZWFkYWJsZURhdGEtPmh0bWxCYXNlVXJsKCk7DQorfQ0KKw0KK3ZvaWQg
Q2hyb21pdW1EYXRhT2JqZWN0OjpzZXRIdG1sQmFzZVVybChjb25zdCBLVVJMJiB1cmwpDQorew0K
KyAgICBpZiAobV9sZWdhY3lEYXRhKQ0KKyAgICAgICAgbV9sZWdhY3lEYXRhLT5zZXRIdG1sQmFz
ZVVybCh1cmwpOw0KKyAgICBlbHNlDQorICAgICAgICBtX3dyaXRhYmxlRGF0YS0+c2V0SHRtbEJh
c2VVcmwodXJsKTsNCit9DQorDQorYm9vbCBDaHJvbWl1bURhdGFPYmplY3Q6OmNvbnRhaW5zRmls
ZW5hbWVzKCkgY29uc3QNCit7DQorICAgIGlmIChtX2xlZ2FjeURhdGEpDQorICAgICAgICByZXR1
cm4gbV9sZWdhY3lEYXRhLT5jb250YWluc0ZpbGVuYW1lcygpOw0KKyAgICBlbHNlDQorICAgICAg
ICByZXR1cm4gbV9yZWFkYWJsZURhdGEtPmNvbnRhaW5zRmlsZW5hbWVzKCk7DQorfQ0KKw0KK1Zl
Y3RvcjxTdHJpbmc+IENocm9taXVtRGF0YU9iamVjdDo6ZmlsZW5hbWVzKCkgY29uc3QNCit7DQor
ICAgIGlmIChtX2xlZ2FjeURhdGEpDQorICAgICAgICByZXR1cm4gbV9sZWdhY3lEYXRhLT5maWxl
bmFtZXMoKTsNCisgICAgZWxzZQ0KKyAgICAgICAgcmV0dXJuIG1fcmVhZGFibGVEYXRhLT5maWxl
bmFtZXMoKTsNCit9DQorDQordm9pZCBDaHJvbWl1bURhdGFPYmplY3Q6OnNldEZpbGVuYW1lcyhj
b25zdCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVzKQ0KK3sNCisgICAgaWYgKG1fbGVnYWN5RGF0
YSkNCisgICAgICAgIG1fbGVnYWN5RGF0YS0+c2V0RmlsZW5hbWVzKGZpbGVuYW1lcyk7DQorICAg
IGVsc2UNCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOw0KK30NCisNCitTdHJpbmcgQ2hy
b21pdW1EYXRhT2JqZWN0OjpmaWxlRXh0ZW5zaW9uKCkgY29uc3QNCit7DQorICAgIGlmIChtX2xl
Z2FjeURhdGEpDQorICAgICAgICByZXR1cm4gbV9sZWdhY3lEYXRhLT5maWxlRXh0ZW5zaW9uKCk7
DQorICAgIGVsc2UNCisgICAgICAgIHJldHVybiBtX3dyaXRhYmxlRGF0YS0+ZmlsZUV4dGVuc2lv
bigpOw0KK30NCisNCit2b2lkIENocm9taXVtRGF0YU9iamVjdDo6c2V0RmlsZUV4dGVuc2lvbihj
b25zdCBTdHJpbmcmIGZpbGVFeHRlbnNpb24pDQorew0KKyAgICBpZiAobV9sZWdhY3lEYXRhKQ0K
KyAgICAgICAgbV9sZWdhY3lEYXRhLT5zZXRGaWxlRXh0ZW5zaW9uKGZpbGVFeHRlbnNpb24pOw0K
KyAgICBlbHNlDQorICAgICAgICBtX3dyaXRhYmxlRGF0YS0+c2V0RmlsZUV4dGVuc2lvbihmaWxl
RXh0ZW5zaW9uKTsNCit9DQorDQorU3RyaW5nIENocm9taXVtRGF0YU9iamVjdDo6ZmlsZUNvbnRl
bnRGaWxlbmFtZSgpIGNvbnN0DQorew0KKyAgICBpZiAobV9sZWdhY3lEYXRhKQ0KKyAgICAgICAg
cmV0dXJuIG1fbGVnYWN5RGF0YS0+ZmlsZUNvbnRlbnRGaWxlbmFtZSgpOw0KKyAgICBlbHNlDQor
ICAgICAgICByZXR1cm4gbV93cml0YWJsZURhdGEtPmZpbGVDb250ZW50RmlsZW5hbWUoKTsNCit9
DQorDQordm9pZCBDaHJvbWl1bURhdGFPYmplY3Q6OnNldEZpbGVDb250ZW50RmlsZW5hbWUoY29u
c3QgU3RyaW5nJiBmaWxlQ29udGVudEZpbGVuYW1lKQ0KK3sNCisgICAgaWYgKG1fbGVnYWN5RGF0
YSkNCisgICAgICAgICAgbV9sZWdhY3lEYXRhLT5zZXRGaWxlQ29udGVudEZpbGVuYW1lKGZpbGVD
b250ZW50RmlsZW5hbWUpOw0KKyAgICBlbHNlDQorICAgICAgICAgIG1fd3JpdGFibGVEYXRhLT5z
ZXRGaWxlQ29udGVudEZpbGVuYW1lKGZpbGVDb250ZW50RmlsZW5hbWUpOw0KK30NCisNCitQYXNz
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4gQ2hyb21pdW1EYXRhT2JqZWN0OjpmaWxlQ29udGVudCgpIGNv
bnN0DQorew0KKyAgICBpZiAobV9sZWdhY3lEYXRhKQ0KKyAgICAgICAgcmV0dXJuIG1fbGVnYWN5
RGF0YS0+ZmlsZUNvbnRlbnQoKTsNCisgICAgZWxzZQ0KKyAgICAgICAgcmV0dXJuIG1fd3JpdGFi
bGVEYXRhLT5maWxlQ29udGVudCgpOw0KK30NCisNCit2b2lkIENocm9taXVtRGF0YU9iamVjdDo6
c2V0RmlsZUNvbnRlbnQoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGZpbGVDb250ZW50KQ0KK3sN
CisgICAgaWYgKG1fbGVnYWN5RGF0YSkNCisgICAgICAgIHJldHVybiBtX2xlZ2FjeURhdGEtPnNl
dEZpbGVDb250ZW50KGZpbGVDb250ZW50KTsNCisgICAgZWxzZQ0KKyAgICAgICAgcmV0dXJuIG1f
d3JpdGFibGVEYXRhLT5zZXRGaWxlQ29udGVudChmaWxlQ29udGVudCk7DQorfQ0KKw0KK30NCisN
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVj
dC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuaAppbmRl
eCBjZDU4ZWNiLi41ODVjNDUzIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVt
L0Nocm9taXVtRGF0YU9iamVjdC5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hy
b21pdW1EYXRhT2JqZWN0LmgKQEAgLTEsMTE5ICsxLDg4IEBACi0vKgotICogQ29weXJpZ2h0IChj
KSAyMDA4LCAyMDA5LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqIAotICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1
dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
Ci0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgQ2hy
b21pdW1EYXRhT2JqZWN0X2gKLSNkZWZpbmUgQ2hyb21pdW1EYXRhT2JqZWN0X2gKLQotI2luY2x1
ZGUgIkNsaXBib2FyZC5oIgotI2luY2x1ZGUgIktVUkwuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVN0
cmluZy5oIgotI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0
Lmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
ICAgIC8vIEEgZGF0YSBvYmplY3QgZm9yIGhvbGRpbmcgZGF0YSB0aGF0IHdvdWxkIGJlIGluIGEg
Y2xpcGJvYXJkIG9yIG1vdmVkCi0gICAgLy8gZHVyaW5nIGEgZHJhZy1uLWRyb3Agb3BlcmF0aW9u
LiAgVGhpcyBpcyB0aGUgZGF0YSB0aGF0IFdlYkNvcmUgaXMgYXdhcmUKLSAgICAvLyBvZiBhbmQg
aXMgbm90IHNwZWNpZmljIHRvIGEgcGxhdGZvcm0uCi0gICAgY2xhc3MgQ2hyb21pdW1EYXRhT2Jq
ZWN0IDogcHVibGljIFJlZkNvdW50ZWQ8Q2hyb21pdW1EYXRhT2JqZWN0PiB7Ci0gICAgcHVibGlj
OgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDaHJvbWl1bURhdGFPYmplY3Q+IGNyZWF0ZShD
bGlwYm9hcmQ6OkNsaXBib2FyZFR5cGUgY2xpcGJvYXJkVHlwZSkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDaHJvbWl1bURhdGFPYmplY3QoY2xpcGJvYXJkVHlw
ZSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgUGFzc1JlZlB0cjxDaHJvbWl1bURhdGFPYmplY3Q+
IGNvcHkoKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IENocm9taXVtRGF0YU9iamVjdCgqdGhpcykpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBj
bGVhckRhdGEoY29uc3QgU3RyaW5nJiB0eXBlKTsKLSAgICAgICAgdm9pZCBjbGVhckFsbCgpOwot
ICAgICAgICB2b2lkIGNsZWFyQWxsRXhjZXB0RmlsZXMoKTsKLQotICAgICAgICBib29sIGhhc0Rh
dGEoKSBjb25zdDsKLQotICAgICAgICBIYXNoU2V0PFN0cmluZz4gdHlwZXMoKSBjb25zdDsKLSAg
ICAgICAgU3RyaW5nIGdldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBib29sJiBzdWNjZXNzKTsK
LSAgICAgICAgYm9vbCBzZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBk
YXRhKTsKLQotICAgICAgICAvLyBTcGVjaWFsIGhhbmRsZXJzIGZvciBVUkwvSFRNTCBtZXRhZGF0
YS4KLSAgICAgICAgU3RyaW5nIHVybFRpdGxlKCkgY29uc3QgeyByZXR1cm4gbV91cmxUaXRsZTsg
fQotICAgICAgICB2b2lkIHNldFVybFRpdGxlKGNvbnN0IFN0cmluZyYgdXJsVGl0bGUpIHsgbV91
cmxUaXRsZSA9IHVybFRpdGxlOyB9Ci0gICAgICAgIEtVUkwgaHRtbEJhc2VVcmwoKSBjb25zdCB7
IHJldHVybiBtX2h0bWxCYXNlVXJsOyB9Ci0gICAgICAgIHZvaWQgc2V0SHRtbEJhc2VVcmwoY29u
c3QgS1VSTCYgdXJsKSB7IG1faHRtbEJhc2VVcmwgPSB1cmw7IH0KLQotICAgICAgICAvLyBVc2Vk
IHRvIGhhbmRsZSBmaWxlcyBiZWluZyBkcmFnZ2VkIGluLgotICAgICAgICBib29sIGNvbnRhaW5z
RmlsZW5hbWVzKCkgY29uc3QgeyByZXR1cm4gIW1fZmlsZW5hbWVzLmlzRW1wdHkoKTsgfQotICAg
ICAgICBWZWN0b3I8U3RyaW5nPiBmaWxlbmFtZXMoKSBjb25zdCB7IHJldHVybiBtX2ZpbGVuYW1l
czsgfQotICAgICAgICB2b2lkIHNldEZpbGVuYW1lcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmls
ZW5hbWVzKSB7IG1fZmlsZW5hbWVzID0gZmlsZW5hbWVzOyB9Ci0KLSAgICAgICAgLy8gVXNlZCB0
byBoYW5kbGUgZmlsZXMgKGltYWdlcykgYmVpbmcgZHJhZ2dlZCBvdXQuCi0gICAgICAgIFN0cmlu
ZyBmaWxlRXh0ZW5zaW9uKCkgY29uc3QgeyByZXR1cm4gbV9maWxlRXh0ZW5zaW9uOyB9Ci0gICAg
ICAgIHZvaWQgc2V0RmlsZUV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGZpbGVFeHRlbnNpb24pIHsg
bV9maWxlRXh0ZW5zaW9uID0gZmlsZUV4dGVuc2lvbjsgfQotICAgICAgICBTdHJpbmcgZmlsZUNv
bnRlbnRGaWxlbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsZUNvbnRlbnRGaWxlbmFtZTsgfQot
ICAgICAgICB2b2lkIHNldEZpbGVDb250ZW50RmlsZW5hbWUoY29uc3QgU3RyaW5nJiBmaWxlQ29u
dGVudEZpbGVuYW1lKSB7IG1fZmlsZUNvbnRlbnRGaWxlbmFtZSA9IGZpbGVDb250ZW50RmlsZW5h
bWU7IH0KLSAgICAgICAgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGZpbGVDb250ZW50KCkgY29u
c3QgeyByZXR1cm4gbV9maWxlQ29udGVudDsgfQotICAgICAgICB2b2lkIHNldEZpbGVDb250ZW50
KFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBmaWxlQ29udGVudCkgeyBtX2ZpbGVDb250ZW50ID0g
ZmlsZUNvbnRlbnQ7IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIENocm9taXVtRGF0YU9iamVj
dChDbGlwYm9hcmQ6OkNsaXBib2FyZFR5cGUpOwotICAgICAgICBDaHJvbWl1bURhdGFPYmplY3Qo
Y29uc3QgQ2hyb21pdW1EYXRhT2JqZWN0Jik7Ci0KLSAgICAgICAgQ2xpcGJvYXJkOjpDbGlwYm9h
cmRUeXBlIG1fY2xpcGJvYXJkVHlwZTsKLQotICAgICAgICBTdHJpbmcgbV91cmxUaXRsZTsKLQot
ICAgICAgICBTdHJpbmcgbV9kb3dubG9hZE1ldGFkYXRhOwotCi0gICAgICAgIFN0cmluZyBtX2Zp
bGVFeHRlbnNpb247Ci0gICAgICAgIFZlY3RvcjxTdHJpbmc+IG1fZmlsZW5hbWVzOwotCi0gICAg
ICAgIFN0cmluZyBtX3BsYWluVGV4dDsKLQotICAgICAgICBTdHJpbmcgbV90ZXh0SHRtbDsKLSAg
ICAgICAgS1VSTCBtX2h0bWxCYXNlVXJsOwotCi0gICAgICAgIFN0cmluZyBtX2ZpbGVDb250ZW50
RmlsZW5hbWU7Ci0gICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1fZmlsZUNvbnRlbnQ7Ci0K
LSAgICAgICAgLy8gVGhlc2UgdHdvIGFyZSBsaW5rZWQuIFNldHRpbmcgbV91cmwgd2lsbCBzZXQg
bV91cmlMaXN0IHRvIHRoZSBzYW1lCi0gICAgICAgIC8vIHN0cmluZyB2YWx1ZTsgc2V0dGluZyBt
X3VyaUxpc3Qgd2lsbCBjYXVzZSBpdHMgY29udGVudHMgdG8gYmUgcGFyc2VkCi0gICAgICAgIC8v
IGFjY29yZGluZyB0byBSRkMgMjQ4MyBhbmQgdGhlIGZpcnN0IFVSTCBmb3VuZCB3aWxsIGJlIHNl
dCBpbiBtX3VybC4KLSAgICAgICAgS1VSTCBtX3VybDsKLSAgICAgICAgU3RyaW5nIG1fdXJpTGlz
dDsKLSAgICB9OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgorLyoNCisgKiBD
b3B5cmlnaHQgKGMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorICog
DQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0DQorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQ0KKyAqIG1ldDoNCisgKiANCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodA0KKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4NCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlDQorICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcg0KKyAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUNCisgKiBkaXN0cmlidXRpb24uDQorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cw0KKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tDQorICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisgKiAN
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTDQorICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QNCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1INCisgKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVA0KKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLA0KKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QNCisgKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwN
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkNCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFDQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4NCisgKi8NCisNCisjaWZuZGVmIENocm9taXVtRGF0YU9iamVjdF9oDQorI2Rl
ZmluZSBDaHJvbWl1bURhdGFPYmplY3RfaA0KKw0KKyNpbmNsdWRlICJDaHJvbWl1bURhdGFPYmpl
Y3RMZWdhY3kuaCINCisjaW5jbHVkZSAiUmVhZGFibGVEYXRhT2JqZWN0LmgiDQorI2luY2x1ZGUg
IldyaXRhYmxlRGF0YU9iamVjdC5oIg0KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+DQorDQorbmFt
ZXNwYWNlIFdlYkNvcmUgew0KKw0KK2NsYXNzIENocm9taXVtRGF0YU9iamVjdCA6IHB1YmxpYyBS
ZWZDb3VudGVkPENocm9taXVtRGF0YU9iamVjdD4gew0KK3B1YmxpYzoNCisgICAgc3RhdGljIFBh
c3NSZWZQdHI8Q2hyb21pdW1EYXRhT2JqZWN0PiBjcmVhdGUoUGFzc1JlZlB0cjxDaHJvbWl1bURh
dGFPYmplY3RMZWdhY3k+IGRhdGEpOw0KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDaHJvbWl1bURh
dGFPYmplY3Q+IGNyZWF0ZVJlYWRhYmxlKENsaXBib2FyZDo6Q2xpcGJvYXJkVHlwZSk7DQorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPENocm9taXVtRGF0YU9iamVjdD4gY3JlYXRlV3JpdGFibGUoQ2xp
cGJvYXJkOjpDbGlwYm9hcmRUeXBlKTsNCisNCisgICAgdm9pZCBjbGVhckRhdGEoY29uc3QgU3Ry
aW5nJiB0eXBlKTsNCisgICAgdm9pZCBjbGVhckFsbCgpOw0KKyAgICB2b2lkIGNsZWFyQWxsRXhj
ZXB0RmlsZXMoKTsNCisNCisgICAgYm9vbCBoYXNEYXRhKCkgY29uc3Q7DQorDQorICAgIEhhc2hT
ZXQ8U3RyaW5nPiB0eXBlcygpIGNvbnN0Ow0KKyAgICBTdHJpbmcgZ2V0RGF0YShjb25zdCBTdHJp
bmcmIHR5cGUsIGJvb2wmIHN1Y2Nlc3MpOw0KKyAgICBib29sIHNldERhdGEoY29uc3QgU3RyaW5n
JiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpOw0KKw0KKyAgICAvLyBTcGVjaWFsIGhhbmRsZXJz
IGZvciBVUkwvSFRNTCBtZXRhZGF0YS4NCisgICAgU3RyaW5nIHVybFRpdGxlKCkgY29uc3Q7DQor
ICAgIHZvaWQgc2V0VXJsVGl0bGUoY29uc3QgU3RyaW5nJiB1cmxUaXRsZSk7DQorICAgIEtVUkwg
aHRtbEJhc2VVcmwoKSBjb25zdDsNCisgICAgdm9pZCBzZXRIdG1sQmFzZVVybChjb25zdCBLVVJM
JiB1cmwpOw0KKw0KKyAgICAvLyBVc2VkIHRvIGhhbmRsZSBmaWxlcyBiZWluZyBkcmFnZ2VkIGlu
Lg0KKyAgICBib29sIGNvbnRhaW5zRmlsZW5hbWVzKCkgY29uc3Q7DQorICAgIFZlY3RvcjxTdHJp
bmc+IGZpbGVuYW1lcygpIGNvbnN0Ow0KKyAgICB2b2lkIHNldEZpbGVuYW1lcyhjb25zdCBWZWN0
b3I8U3RyaW5nPiYgZmlsZW5hbWVzKTsNCisNCisgICAgLy8gVXNlZCB0byBoYW5kbGUgZmlsZXMg
KGltYWdlcykgYmVpbmcgZHJhZ2dlZCBvdXQuDQorICAgIFN0cmluZyBmaWxlRXh0ZW5zaW9uKCkg
Y29uc3Q7DQorICAgIHZvaWQgc2V0RmlsZUV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGZpbGVFeHRl
bnNpb24pOw0KKyAgICBTdHJpbmcgZmlsZUNvbnRlbnRGaWxlbmFtZSgpIGNvbnN0Ow0KKyAgICB2
b2lkIHNldEZpbGVDb250ZW50RmlsZW5hbWUoY29uc3QgU3RyaW5nJiBmaWxlQ29udGVudEZpbGVu
YW1lKTsNCisgICAgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGZpbGVDb250ZW50KCkgY29uc3Q7
DQorICAgIHZvaWQgc2V0RmlsZUNvbnRlbnQoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGZpbGVD
b250ZW50KTsNCisNCitwcml2YXRlOg0KKyAgICBDaHJvbWl1bURhdGFPYmplY3QoUGFzc1JlZlB0
cjxDaHJvbWl1bURhdGFPYmplY3RMZWdhY3k+KTsNCisgICAgQ2hyb21pdW1EYXRhT2JqZWN0KFBh
c3NSZWZQdHI8UmVhZGFibGVEYXRhT2JqZWN0Pik7DQorICAgIENocm9taXVtRGF0YU9iamVjdChQ
YXNzUmVmUHRyPFdyaXRhYmxlRGF0YU9iamVjdD4pOw0KKw0KKyAgICBSZWZQdHI8Q2hyb21pdW1E
YXRhT2JqZWN0TGVnYWN5PiBtX2xlZ2FjeURhdGE7DQorICAgIFJlZlB0cjxSZWFkYWJsZURhdGFP
YmplY3Q+IG1fcmVhZGFibGVEYXRhOw0KKyAgICBSZWZQdHI8V3JpdGFibGVEYXRhT2JqZWN0PiBt
X3dyaXRhYmxlRGF0YTsNCit9Ow0KKw0KK30NCisNCisjZW5kaWYNCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdExlZ2FjeS5jcHAgYi9XZWJD
b3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdExlZ2FjeS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk2NmY3OQotLS0gL2Rldi9udWxsCisrKyBi
L1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5LmNwcApA
QCAtMCwwICsxLDI1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOCwgMjAwOSwgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisg
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
Q2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5LmgiCisKKyNpbmNsdWRlICJDaHJvbWl1bUJyaWRnZS5o
IgorI2luY2x1ZGUgIkNsaXBib2FyZE1pbWVUeXBlcy5oIgorI2luY2x1ZGUgIlBhc3RlYm9hcmQu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBQZXIgUkZDIDI0ODMsIHRoZSBsaW5lIHNl
cGFyYXRvciBmb3IgInRleHQvLi4uIiBNSU1FIHR5cGVzIGlzIENSLUxGLgorc3RhdGljIGNoYXIg
Y29uc3QqIGNvbnN0IHRleHRNSU1FVHlwZUxpbmVTZXBhcmF0b3IgPSAiXHJcbiI7CisKK3ZvaWQg
Q2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5OjpjbGVhckRhdGEoY29uc3QgU3RyaW5nJiB0eXBlKQor
eworICAgIGlmICh0eXBlID09IG1pbWVUeXBlVGV4dFBsYWluKSB7CisgICAgICAgIG1fcGxhaW5U
ZXh0ID0gIiI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAodHlwZSA9PSBtaW1l
VHlwZVVSTCB8fCB0eXBlID09IG1pbWVUeXBlVGV4dFVSSUxpc3QpIHsKKyAgICAgICAgbV91cmlM
aXN0ID0gIiI7CisgICAgICAgIG1fdXJsID0gS1VSTCgpOworICAgICAgICBtX3VybFRpdGxlID0g
IiI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAodHlwZSA9PSBtaW1lVHlwZVRl
eHRIVE1MKSB7CisgICAgICAgIG1fdGV4dEh0bWwgPSAiIjsKKyAgICAgICAgbV9odG1sQmFzZVVy
bCA9IEtVUkwoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICh0eXBlID09IG1p
bWVUeXBlRG93bmxvYWRVUkwpIHsKKyAgICAgICAgbV9kb3dubG9hZE1ldGFkYXRhID0gIiI7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK3ZvaWQgQ2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5
OjpjbGVhckFsbCgpCit7CisgICAgY2xlYXJBbGxFeGNlcHRGaWxlcygpOworICAgIG1fZmlsZW5h
bWVzLmNsZWFyKCk7Cit9CisKK3ZvaWQgQ2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5OjpjbGVhckFs
bEV4Y2VwdEZpbGVzKCkKK3sKKyAgICBtX3VybFRpdGxlID0gIiI7CisgICAgbV91cmwgPSBLVVJM
KCk7CisgICAgbV91cmlMaXN0ID0gIiI7CisgICAgbV9kb3dubG9hZE1ldGFkYXRhID0gIiI7Cisg
ICAgbV9maWxlRXh0ZW5zaW9uID0gIiI7CisgICAgbV9wbGFpblRleHQgPSAiIjsKKyAgICBtX3Rl
eHRIdG1sID0gIiI7CisgICAgbV9odG1sQmFzZVVybCA9IEtVUkwoKTsKKyAgICBtX2ZpbGVDb250
ZW50RmlsZW5hbWUgPSAiIjsKKyAgICBpZiAobV9maWxlQ29udGVudCkKKyAgICAgICAgbV9maWxl
Q29udGVudC0+Y2xlYXIoKTsKK30KKworYm9vbCBDaHJvbWl1bURhdGFPYmplY3RMZWdhY3k6Omhh
c0RhdGEoKSBjb25zdAoreworICAgIHJldHVybiAhbV91cmwuaXNFbXB0eSgpCisgICAgICAgIHx8
ICFtX3VyaUxpc3QuaXNFbXB0eSgpCisgICAgICAgIHx8ICFtX2Rvd25sb2FkTWV0YWRhdGEuaXNF
bXB0eSgpCisgICAgICAgIHx8ICFtX2ZpbGVFeHRlbnNpb24uaXNFbXB0eSgpCisgICAgICAgIHx8
ICFtX2ZpbGVuYW1lcy5pc0VtcHR5KCkKKyAgICAgICAgfHwgIW1fcGxhaW5UZXh0LmlzRW1wdHko
KQorICAgICAgICB8fCAhbV90ZXh0SHRtbC5pc0VtcHR5KCkKKyAgICAgICAgfHwgbV9maWxlQ29u
dGVudDsKK30KKworSGFzaFNldDxTdHJpbmc+IENocm9taXVtRGF0YU9iamVjdExlZ2FjeTo6dHlw
ZXMoKSBjb25zdAoreworICAgIC8vIFRoaXMgaXMgY3VycmVudGx5IGJyb2tlbiBmb3IgcGFzdGVi
b2FyZCBldmVudHMsIGFuZCBhbHdheXMgaGFzIGJlZW4uCisgICAgSGFzaFNldDxTdHJpbmc+IHJl
c3VsdHM7CisKKyAgICBpZiAoIW1fcGxhaW5UZXh0LmlzRW1wdHkoKSkgeworICAgICAgICByZXN1
bHRzLmFkZChtaW1lVHlwZVRleHQpOworICAgICAgICByZXN1bHRzLmFkZChtaW1lVHlwZVRleHRQ
bGFpbik7CisgICAgfQorCisgICAgaWYgKG1fdXJsLmlzVmFsaWQoKSkKKyAgICAgICAgcmVzdWx0
cy5hZGQobWltZVR5cGVVUkwpOworCisgICAgaWYgKCFtX3VyaUxpc3QuaXNFbXB0eSgpKQorICAg
ICAgICByZXN1bHRzLmFkZChtaW1lVHlwZVRleHRVUklMaXN0KTsKKworICAgIGlmICghbV90ZXh0
SHRtbC5pc0VtcHR5KCkpCisgICAgICAgIHJlc3VsdHMuYWRkKG1pbWVUeXBlVGV4dEhUTUwpOwor
CisgICAgaWYgKCFtX2ZpbGVuYW1lcy5pc0VtcHR5KCkpCisgICAgICAgIHJlc3VsdHMuYWRkKCJG
aWxlcyIpOworCisgICAgcmV0dXJuIHJlc3VsdHM7Cit9CisKK1N0cmluZyBDaHJvbWl1bURhdGFP
YmplY3RMZWdhY3k6OmdldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBib29sJiBzdWNjZXNzKQor
eworICAgIGlmICh0eXBlID09IG1pbWVUeXBlVGV4dFBsYWluKSB7CisgICAgICAgIGlmIChtX2Ns
aXBib2FyZFR5cGUgPT0gQ2xpcGJvYXJkOjpDb3B5QW5kUGFzdGUpIHsKKyAgICAgICAgICAgIFBh
c3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIgYnVmZmVyID0KKyAgICAgICAgICAgICAg
ICBQYXN0ZWJvYXJkOjpnZW5lcmFsUGFzdGVib2FyZCgpLT5pc1NlbGVjdGlvbk1vZGUoKSA/Cisg
ICAgICAgICAgICAgICAgUGFzdGVib2FyZFByaXZhdGU6OlNlbGVjdGlvbkJ1ZmZlciA6CisgICAg
ICAgICAgICAgICAgUGFzdGVib2FyZFByaXZhdGU6OlN0YW5kYXJkQnVmZmVyOworICAgICAgICAg
ICAgU3RyaW5nIHRleHQgPSBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkUmVhZFBsYWluVGV4dChi
dWZmZXIpOworICAgICAgICAgICAgc3VjY2VzcyA9ICF0ZXh0LmlzRW1wdHkoKTsKKyAgICAgICAg
ICAgIHJldHVybiB0ZXh0OworICAgICAgICB9CisgICAgICAgIHN1Y2Nlc3MgPSAhbV9wbGFpblRl
eHQuaXNFbXB0eSgpOworICAgICAgICByZXR1cm4gbV9wbGFpblRleHQ7CisgICAgfQorCisgICAg
aWYgKHR5cGUgPT0gbWltZVR5cGVVUkwpIHsKKyAgICAgICAgc3VjY2VzcyA9ICFtX3VybC5pc0Vt
cHR5KCk7CisgICAgICAgIHJldHVybiBtX3VybC5zdHJpbmcoKTsKKyAgICB9CisKKyAgICBpZiAo
dHlwZSA9PSBtaW1lVHlwZVRleHRVUklMaXN0KSB7CisgICAgICAgIHN1Y2Nlc3MgPSAhbV91cmlM
aXN0LmlzRW1wdHkoKTsKKyAgICAgICAgcmV0dXJuIG1fdXJpTGlzdDsKKyAgICB9CisKKyAgICBp
ZiAodHlwZSA9PSBtaW1lVHlwZVRleHRIVE1MKSB7CisgICAgICAgIGlmIChtX2NsaXBib2FyZFR5
cGUgPT0gQ2xpcGJvYXJkOjpDb3B5QW5kUGFzdGUpIHsKKyAgICAgICAgICAgIFBhc3RlYm9hcmRQ
cml2YXRlOjpDbGlwYm9hcmRCdWZmZXIgYnVmZmVyID0KKyAgICAgICAgICAgICAgICBQYXN0ZWJv
YXJkOjpnZW5lcmFsUGFzdGVib2FyZCgpLT5pc1NlbGVjdGlvbk1vZGUoKSA/CisgICAgICAgICAg
ICAgICAgUGFzdGVib2FyZFByaXZhdGU6OlNlbGVjdGlvbkJ1ZmZlciA6CisgICAgICAgICAgICAg
ICAgUGFzdGVib2FyZFByaXZhdGU6OlN0YW5kYXJkQnVmZmVyOworICAgICAgICAgICAgU3RyaW5n
IGh0bWxUZXh0OworICAgICAgICAgICAgS1VSTCBzb3VyY2VVUkw7CisgICAgICAgICAgICBDaHJv
bWl1bUJyaWRnZTo6Y2xpcGJvYXJkUmVhZEhUTUwoYnVmZmVyLCAmaHRtbFRleHQsICZzb3VyY2VV
UkwpOworICAgICAgICAgICAgc3VjY2VzcyA9ICFodG1sVGV4dC5pc0VtcHR5KCk7CisgICAgICAg
ICAgICByZXR1cm4gaHRtbFRleHQ7CisgICAgICAgIH0KKyAgICAgICAgc3VjY2VzcyA9ICFtX3Rl
eHRIdG1sLmlzRW1wdHkoKTsKKyAgICAgICAgcmV0dXJuIG1fdGV4dEh0bWw7CisgICAgfQorCisg
ICAgaWYgKHR5cGUgPT0gbWltZVR5cGVEb3dubG9hZFVSTCkgeworICAgICAgICBzdWNjZXNzID0g
IW1fZG93bmxvYWRNZXRhZGF0YS5pc0VtcHR5KCk7CisgICAgICAgIHJldHVybiBtX2Rvd25sb2Fk
TWV0YWRhdGE7CisgICAgfQorCisgICAgc3VjY2VzcyA9IGZhbHNlOworICAgIHJldHVybiBTdHJp
bmcoKTsKK30KKworYm9vbCBDaHJvbWl1bURhdGFPYmplY3RMZWdhY3k6OnNldERhdGEoY29uc3Qg
U3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpCit7CisgICAgaWYgKHR5cGUgPT0gbWlt
ZVR5cGVUZXh0UGxhaW4pIHsKKyAgICAgICAgbV9wbGFpblRleHQgPSBkYXRhOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAodHlwZSA9PSBtaW1lVHlwZVVSTCB8fCB0eXBl
ID09IG1pbWVUeXBlVGV4dFVSSUxpc3QpIHsKKyAgICAgICAgbV91cmwgPSBLVVJMKCk7CisgICAg
ICAgIFZlY3RvcjxTdHJpbmc+IHVyaUxpc3Q7CisgICAgICAgIC8vIExpbmUgc2VwYXJhdG9yIGlz
IFxyXG4gcGVyIFJGQyAyNDgzIC0gaG93ZXZlciwgZm9yIGNvbXBhdGliaWxpdHkKKyAgICAgICAg
Ly8gcmVhc29ucyB3ZSBhbHNvIGFsbG93IGp1c3QgXG4gaGVyZS4KKyAgICAgICAgZGF0YS5zcGxp
dCgnXG4nLCB1cmlMaXN0KTsKKyAgICAgICAgLy8gUHJvY2VzcyB0aGUgaW5wdXQgYW5kIGNvcHkg
dGhlIGZpcnN0IHZhbGlkIFVSTCBpbnRvIHRoZSB1cmwgbWVtYmVyLgorICAgICAgICAvLyBJbiBj
YXNlIG5vIFVSTHMgY2FuIGJlIGZvdW5kLCBzdWJzZXF1ZW50IGNhbGxzIHRvIGdldERhdGEoIlVS
TCIpCisgICAgICAgIC8vIHdpbGwgZ2V0IGFuIGVtcHR5IHN0cmluZy4gVGhpcyBpcyBpbiBsaW5l
IHdpdGggdGhlIEhUTUw1IHNwZWMgKHNlZQorICAgICAgICAvLyAiVGhlIERyYWdFdmVudCBhbmQg
RGF0YVRyYW5zZmVyIGludGVyZmFjZXMiKS4KKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCB1cmlMaXN0LnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBTdHJpbmcmIGxpbmUgPSB1cmlM
aXN0W2ldOworICAgICAgICAgICAgbGluZSA9IGxpbmUuc3RyaXBXaGl0ZVNwYWNlKCk7CisgICAg
ICAgICAgICBpZiAobGluZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChsaW5lWzBdID09ICcjJykKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIEtVUkwgdXJsID0gS1VSTChQYXJzZWRVUkxT
dHJpbmcsIGxpbmUpOworICAgICAgICAgICAgaWYgKHVybC5pc1ZhbGlkKCkpIHsKKyAgICAgICAg
ICAgICAgICBtX3VybCA9IHVybDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBtX3VyaUxpc3QgPSBkYXRhOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICBpZiAodHlwZSA9PSBtaW1lVHlwZVRleHRIVE1MKSB7CisgICAg
ICAgIG1fdGV4dEh0bWwgPSBkYXRhOworICAgICAgICBtX2h0bWxCYXNlVXJsID0gS1VSTCgpOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAodHlwZSA9PSBtaW1lVHlwZURv
d25sb2FkVVJMKSB7CisgICAgICAgIG1fZG93bmxvYWRNZXRhZGF0YSA9IGRhdGE7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworQ2hyb21pdW1E
YXRhT2JqZWN0TGVnYWN5OjpDaHJvbWl1bURhdGFPYmplY3RMZWdhY3koQ2xpcGJvYXJkOjpDbGlw
Ym9hcmRUeXBlIGNsaXBib2FyZFR5cGUpCisgICAgOiBtX2NsaXBib2FyZFR5cGUoY2xpcGJvYXJk
VHlwZSkKK3sKK30KKworQ2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5OjpDaHJvbWl1bURhdGFPYmpl
Y3RMZWdhY3koY29uc3QgQ2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5JiBvdGhlcikKKyAgICA6IFJl
ZkNvdW50ZWQ8Q2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5PigpCisgICAgLCBtX2NsaXBib2FyZFR5
cGUob3RoZXIubV9jbGlwYm9hcmRUeXBlKQorICAgICwgbV91cmxUaXRsZShvdGhlci5tX3VybFRp
dGxlKQorICAgICwgbV9kb3dubG9hZE1ldGFkYXRhKG90aGVyLm1fZG93bmxvYWRNZXRhZGF0YSkK
KyAgICAsIG1fZmlsZUV4dGVuc2lvbihvdGhlci5tX2ZpbGVFeHRlbnNpb24pCisgICAgLCBtX2Zp
bGVuYW1lcyhvdGhlci5tX2ZpbGVuYW1lcykKKyAgICAsIG1fcGxhaW5UZXh0KG90aGVyLm1fcGxh
aW5UZXh0KQorICAgICwgbV90ZXh0SHRtbChvdGhlci5tX3RleHRIdG1sKQorICAgICwgbV9odG1s
QmFzZVVybChvdGhlci5tX2h0bWxCYXNlVXJsKQorICAgICwgbV9maWxlQ29udGVudEZpbGVuYW1l
KG90aGVyLm1fZmlsZUNvbnRlbnRGaWxlbmFtZSkKKyAgICAsIG1fdXJsKG90aGVyLm1fdXJsKQor
ICAgICwgbV91cmlMaXN0KG90aGVyLm1fdXJpTGlzdCkKK3sKKyAgICBpZiAob3RoZXIubV9maWxl
Q29udGVudC5nZXQoKSkKKyAgICAgICAgbV9maWxlQ29udGVudCA9IG90aGVyLm1fZmlsZUNvbnRl
bnQtPmNvcHkoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3RMZWdhY3kuaCBiL1dlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5LmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q0NWRmNAotLS0gL2Rldi9udWxsCisrKyBiL1dl
YkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5LmgKQEAgLTAs
MCArMSwxMTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgsIDIwMDksIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorICogbWV0OgorICogCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDaHJvbWl1bURhdGFPYmplY3RMZWdhY3lfaAor
I2RlZmluZSBDaHJvbWl1bURhdGFPYmplY3RMZWdhY3lfaAorCisjaW5jbHVkZSAiQ2xpcGJvYXJk
LmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5j
bHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0hhc2guaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgLy8gQSBkYXRh
IG9iamVjdCBmb3IgaG9sZGluZyBkYXRhIHRoYXQgd291bGQgYmUgaW4gYSBjbGlwYm9hcmQgb3Ig
bW92ZWQKKyAgICAvLyBkdXJpbmcgYSBkcmFnLW4tZHJvcCBvcGVyYXRpb24uICBUaGlzIGlzIHRo
ZSBkYXRhIHRoYXQgV2ViQ29yZSBpcyBhd2FyZQorICAgIC8vIG9mIGFuZCBpcyBub3Qgc3BlY2lm
aWMgdG8gYSBwbGF0Zm9ybS4KKyAgICBjbGFzcyBDaHJvbWl1bURhdGFPYmplY3RMZWdhY3kgOiBw
dWJsaWMgUmVmQ291bnRlZDxDaHJvbWl1bURhdGFPYmplY3RMZWdhY3k+IHsKKyAgICBwdWJsaWM6
CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENocm9taXVtRGF0YU9iamVjdExlZ2FjeT4gY3Jl
YXRlKENsaXBib2FyZDo6Q2xpcGJvYXJkVHlwZSBjbGlwYm9hcmRUeXBlKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENocm9taXVtRGF0YU9iamVjdExlZ2FjeShj
bGlwYm9hcmRUeXBlKSk7CisgICAgICAgIH0KKworICAgICAgICBQYXNzUmVmUHRyPENocm9taXVt
RGF0YU9iamVjdExlZ2FjeT4gY29weSgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgQ2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5KCp0aGlzKSk7CisgICAg
ICAgIH0KKworICAgICAgICB2b2lkIGNsZWFyRGF0YShjb25zdCBTdHJpbmcmIHR5cGUpOworICAg
ICAgICB2b2lkIGNsZWFyQWxsKCk7CisgICAgICAgIHZvaWQgY2xlYXJBbGxFeGNlcHRGaWxlcygp
OworCisgICAgICAgIGJvb2wgaGFzRGF0YSgpIGNvbnN0OworCisgICAgICAgIEhhc2hTZXQ8U3Ry
aW5nPiB0eXBlcygpIGNvbnN0OworICAgICAgICBTdHJpbmcgZ2V0RGF0YShjb25zdCBTdHJpbmcm
IHR5cGUsIGJvb2wmIHN1Y2Nlc3MpOworICAgICAgICBib29sIHNldERhdGEoY29uc3QgU3RyaW5n
JiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpOworCisgICAgICAgIC8vIFNwZWNpYWwgaGFuZGxl
cnMgZm9yIFVSTC9IVE1MIG1ldGFkYXRhLgorICAgICAgICBTdHJpbmcgdXJsVGl0bGUoKSBjb25z
dCB7IHJldHVybiBtX3VybFRpdGxlOyB9CisgICAgICAgIHZvaWQgc2V0VXJsVGl0bGUoY29uc3Qg
U3RyaW5nJiB1cmxUaXRsZSkgeyBtX3VybFRpdGxlID0gdXJsVGl0bGU7IH0KKyAgICAgICAgS1VS
TCBodG1sQmFzZVVybCgpIGNvbnN0IHsgcmV0dXJuIG1faHRtbEJhc2VVcmw7IH0KKyAgICAgICAg
dm9pZCBzZXRIdG1sQmFzZVVybChjb25zdCBLVVJMJiB1cmwpIHsgbV9odG1sQmFzZVVybCA9IHVy
bDsgfQorCisgICAgICAgIC8vIFVzZWQgdG8gaGFuZGxlIGZpbGVzIGJlaW5nIGRyYWdnZWQgaW4u
CisgICAgICAgIGJvb2wgY29udGFpbnNGaWxlbmFtZXMoKSBjb25zdCB7IHJldHVybiAhbV9maWxl
bmFtZXMuaXNFbXB0eSgpOyB9CisgICAgICAgIFZlY3RvcjxTdHJpbmc+IGZpbGVuYW1lcygpIGNv
bnN0IHsgcmV0dXJuIG1fZmlsZW5hbWVzOyB9CisgICAgICAgIHZvaWQgc2V0RmlsZW5hbWVzKGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMpIHsgbV9maWxlbmFtZXMgPSBmaWxlbmFtZXM7
IH0KKworICAgICAgICAvLyBVc2VkIHRvIGhhbmRsZSBmaWxlcyAoaW1hZ2VzKSBiZWluZyBkcmFn
Z2VkIG91dC4KKyAgICAgICAgU3RyaW5nIGZpbGVFeHRlbnNpb24oKSBjb25zdCB7IHJldHVybiBt
X2ZpbGVFeHRlbnNpb247IH0KKyAgICAgICAgdm9pZCBzZXRGaWxlRXh0ZW5zaW9uKGNvbnN0IFN0
cmluZyYgZmlsZUV4dGVuc2lvbikgeyBtX2ZpbGVFeHRlbnNpb24gPSBmaWxlRXh0ZW5zaW9uOyB9
CisgICAgICAgIFN0cmluZyBmaWxlQ29udGVudEZpbGVuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9m
aWxlQ29udGVudEZpbGVuYW1lOyB9CisgICAgICAgIHZvaWQgc2V0RmlsZUNvbnRlbnRGaWxlbmFt
ZShjb25zdCBTdHJpbmcmIGZpbGVDb250ZW50RmlsZW5hbWUpIHsgbV9maWxlQ29udGVudEZpbGVu
YW1lID0gZmlsZUNvbnRlbnRGaWxlbmFtZTsgfQorICAgICAgICBQYXNzUmVmUHRyPFNoYXJlZEJ1
ZmZlcj4gZmlsZUNvbnRlbnQoKSBjb25zdCB7IHJldHVybiBtX2ZpbGVDb250ZW50OyB9CisgICAg
ICAgIHZvaWQgc2V0RmlsZUNvbnRlbnQoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGZpbGVDb250
ZW50KSB7IG1fZmlsZUNvbnRlbnQgPSBmaWxlQ29udGVudDsgfQorCisgICAgcHJpdmF0ZToKKyAg
ICAgICAgQ2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5KENsaXBib2FyZDo6Q2xpcGJvYXJkVHlwZSk7
CisgICAgICAgIENocm9taXVtRGF0YU9iamVjdExlZ2FjeShjb25zdCBDaHJvbWl1bURhdGFPYmpl
Y3RMZWdhY3kmKTsKKworICAgICAgICBDbGlwYm9hcmQ6OkNsaXBib2FyZFR5cGUgbV9jbGlwYm9h
cmRUeXBlOworCisgICAgICAgIFN0cmluZyBtX3VybFRpdGxlOworCisgICAgICAgIFN0cmluZyBt
X2Rvd25sb2FkTWV0YWRhdGE7CisKKyAgICAgICAgU3RyaW5nIG1fZmlsZUV4dGVuc2lvbjsKKyAg
ICAgICAgVmVjdG9yPFN0cmluZz4gbV9maWxlbmFtZXM7CisKKyAgICAgICAgU3RyaW5nIG1fcGxh
aW5UZXh0OworCisgICAgICAgIFN0cmluZyBtX3RleHRIdG1sOworICAgICAgICBLVVJMIG1faHRt
bEJhc2VVcmw7CisKKyAgICAgICAgU3RyaW5nIG1fZmlsZUNvbnRlbnRGaWxlbmFtZTsKKyAgICAg
ICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV9maWxlQ29udGVudDsKKworICAgICAgICAvLyBUaGVz
ZSB0d28gYXJlIGxpbmtlZC4gU2V0dGluZyBtX3VybCB3aWxsIHNldCBtX3VyaUxpc3QgdG8gdGhl
IHNhbWUKKyAgICAgICAgLy8gc3RyaW5nIHZhbHVlOyBzZXR0aW5nIG1fdXJpTGlzdCB3aWxsIGNh
dXNlIGl0cyBjb250ZW50cyB0byBiZSBwYXJzZWQKKyAgICAgICAgLy8gYWNjb3JkaW5nIHRvIFJG
QyAyNDgzIGFuZCB0aGUgZmlyc3QgVVJMIGZvdW5kIHdpbGwgYmUgc2V0IGluIG1fdXJsLgorICAg
ICAgICBLVVJMIG1fdXJsOworICAgICAgICBTdHJpbmcgbV91cmlMaXN0OworICAgIH07CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRm
b3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uY3BwCmluZGV4IGMxYjM0ZGEuLjE3NzkxNTMgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uY3BwCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uY3BwCkBAIC04
NCw2ICs4NCwxNiBAQCBQYXNzUmVmUHRyPENsaXBib2FyZENocm9taXVtPiBDbGlwYm9hcmRDaHJv
bWl1bTo6Y3JlYXRlKENsaXBib2FyZFR5cGUgY2xpcGJvYXJkVAogICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgQ2xpcGJvYXJkQ2hyb21pdW0oY2xpcGJvYXJkVHlwZSwgZGF0YU9iamVjdCwgcG9saWN5
LCBmcmFtZSkpOwogfQogCitQYXNzUmVmUHRyPENsaXBib2FyZENocm9taXVtPiBDbGlwYm9hcmRD
aHJvbWl1bTo6Y3JlYXRlKENsaXBib2FyZFR5cGUgY2xpcGJvYXJkVHlwZSwKKyAgICBDbGlwYm9h
cmRBY2Nlc3NQb2xpY3kgcG9saWN5LCBGcmFtZSogZnJhbWUpCit7CisgICAgUmVmUHRyPENocm9t
aXVtRGF0YU9iamVjdD4gZGF0YU9iamVjdCA9CisgICAgICAgIHBvbGljeSA9PSBDbGlwYm9hcmRX
cml0YWJsZQorICAgICAgICA/IENocm9taXVtRGF0YU9iamVjdDo6Y3JlYXRlV3JpdGFibGUoY2xp
cGJvYXJkVHlwZSkKKyAgICAgICAgOiBDaHJvbWl1bURhdGFPYmplY3Q6OmNyZWF0ZVJlYWRhYmxl
KGNsaXBib2FyZFR5cGUpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2xpcGJvYXJkQ2hyb21p
dW0oY2xpcGJvYXJkVHlwZSwgZGF0YU9iamVjdCwgcG9saWN5LCBmcmFtZSkpOworfQorCiB2b2lk
IENsaXBib2FyZENocm9taXVtOjpjbGVhckRhdGEoY29uc3QgU3RyaW5nJiB0eXBlKQogewogICAg
IGlmIChwb2xpY3koKSAhPSBDbGlwYm9hcmRXcml0YWJsZSB8fCAhbV9kYXRhT2JqZWN0KQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5oIGIv
V2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5oCmluZGV4IDE0ZjU5
ZTkuLjFkNjk5MjEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJv
YXJkQ2hyb21pdW0uaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENo
cm9taXVtLmgKQEAgLTQ4LDYgKzQ4LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxDbGlwYm9hcmRDaHJvbWl1bT4gY3JlYXRlKAogICAgICAgICAgICAg
Q2xpcGJvYXJkVHlwZSwgUGFzc1JlZlB0cjxDaHJvbWl1bURhdGFPYmplY3Q+LCBDbGlwYm9hcmRB
Y2Nlc3NQb2xpY3ksIEZyYW1lKik7CiAKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2xpcGJv
YXJkQ2hyb21pdW0+IGNyZWF0ZSgKKyAgICAgICAgICAgIENsaXBib2FyZFR5cGUsIENsaXBib2Fy
ZEFjY2Vzc1BvbGljeSwgRnJhbWUqKTsKKwogICAgICAgICAvLyBSZXR1cm5zIHRoZSBmaWxlIG5h
bWUgKG5vdCBpbmNsdWRpbmcgdGhlIGV4dGVuc2lvbikuIFRoaXMgcmVtb3ZlcyBhbnkKICAgICAg
ICAgLy8gaW52YWxpZCBmaWxlIHN5c3RlbSBjaGFyYWN0ZXJzIGFzIHdlbGwgYXMgbWFraW5nIHN1
cmUgdGhlCiAgICAgICAgIC8vIHBhdGggKyBleHRlbnNpb24gaXMgbm90IGJpZ2dlciB0aGFuIGFs
bG93ZWQgYnkgdGhlIGZpbGUgc3lzdGVtLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9j
aHJvbWl1bS9SZWFkYWJsZURhdGFPYmplY3QuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9SZWFkYWJsZURhdGFPYmplY3QuY3BwCmluZGV4IDA4ODY3M2YuLjQ0ZDMzMzggMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUmVhZGFibGVEYXRhT2JqZWN0LmNwcAorKysg
Yi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1JlYWRhYmxlRGF0YU9iamVjdC5jcHAKQEAgLTM2
LDE4ICszNiwxOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBQYXN0ZWJvYXJk
UHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyIGNsaXBib2FyZEJ1ZmZlcihib29sIGlzRm9yRHJhZ2dp
bmcpCitzdGF0aWMgUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlciBjbGlwYm9hcmRC
dWZmZXIoQ2xpcGJvYXJkOjpDbGlwYm9hcmRUeXBlIGNsaXBib2FyZFR5cGUpCiB7Ci0gICAgcmV0
dXJuIGlzRm9yRHJhZ2dpbmcgPyBQYXN0ZWJvYXJkUHJpdmF0ZTo6RHJhZ0J1ZmZlciA6IFBhc3Rl
Ym9hcmRQcml2YXRlOjpTdGFuZGFyZEJ1ZmZlcjsKKyAgICByZXR1cm4gY2xpcGJvYXJkVHlwZSA9
PSBDbGlwYm9hcmQ6OkRyYWdBbmREcm9wID8gUGFzdGVib2FyZFByaXZhdGU6OkRyYWdCdWZmZXIg
OiBQYXN0ZWJvYXJkUHJpdmF0ZTo6U3RhbmRhcmRCdWZmZXI7CiB9CiAKLVBhc3NSZWZQdHI8UmVh
ZGFibGVEYXRhT2JqZWN0PiBSZWFkYWJsZURhdGFPYmplY3Q6OmNyZWF0ZShib29sIGlzRm9yRHJh
Z2dpbmcpCitQYXNzUmVmUHRyPFJlYWRhYmxlRGF0YU9iamVjdD4gUmVhZGFibGVEYXRhT2JqZWN0
OjpjcmVhdGUoQ2xpcGJvYXJkOjpDbGlwYm9hcmRUeXBlIGNsaXBib2FyZFR5cGUpCiB7Ci0gICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBSZWFkYWJsZURhdGFPYmplY3QoaXNGb3JEcmFnZ2luZykpOwor
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgUmVhZGFibGVEYXRhT2JqZWN0KGNsaXBib2FyZFR5cGUp
KTsKIH0KIAotUmVhZGFibGVEYXRhT2JqZWN0OjpSZWFkYWJsZURhdGFPYmplY3QoYm9vbCBpc0Zv
ckRyYWdnaW5nKQotICAgIDogbV9pc0ZvckRyYWdnaW5nKGlzRm9yRHJhZ2dpbmcpCitSZWFkYWJs
ZURhdGFPYmplY3Q6OlJlYWRhYmxlRGF0YU9iamVjdChDbGlwYm9hcmQ6OkNsaXBib2FyZFR5cGUg
Y2xpcGJvYXJkVHlwZSkKKyAgICA6IG1fY2xpcGJvYXJkVHlwZShjbGlwYm9hcmRUeXBlKQogICAg
ICwgbV9jb250YWluc0ZpbGVuYW1lcyhmYWxzZSkKICAgICAsIG1faXNUeXBlQ2FjaGVJbml0aWFs
aXplZChmYWxzZSkKIHsKQEAgLTcwLDMzICs3MCwyMSBAQCBTdHJpbmcgUmVhZGFibGVEYXRhT2Jq
ZWN0OjpnZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgYm9vbCYgc3VjY2VlZGVkKSBjb25zdAog
ICAgIFN0cmluZyBkYXRhOwogICAgIFN0cmluZyBpZ25vcmVkTWV0YWRhdGE7CiAgICAgc3VjY2Vl
ZGVkID0gQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFJlYWREYXRhKAotICAgICAgICBjbGlwYm9h
cmRCdWZmZXIobV9pc0ZvckRyYWdnaW5nKSwgdHlwZSwgZGF0YSwgaWdub3JlZE1ldGFkYXRhKTsK
KyAgICAgICAgY2xpcGJvYXJkQnVmZmVyKG1fY2xpcGJvYXJkVHlwZSksIHR5cGUsIGRhdGEsIGln
bm9yZWRNZXRhZGF0YSk7CiAgICAgcmV0dXJuIGRhdGE7CiB9CiAKLVN0cmluZyBSZWFkYWJsZURh
dGFPYmplY3Q6OmdldFVSTChTdHJpbmcqIHRpdGxlKSBjb25zdAotewotICAgIFN0cmluZyB1cmw7
Ci0gICAgU3RyaW5nIGlnbm9yZWRUaXRsZTsKLSAgICBpZiAoIXRpdGxlKQotICAgICAgICB0aXRs
ZSA9ICZpZ25vcmVkVGl0bGU7Ci0gICAgQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFJlYWREYXRh
KAotICAgICAgICBjbGlwYm9hcmRCdWZmZXIobV9pc0ZvckRyYWdnaW5nKSwgbWltZVR5cGVUZXh0
VVJJTGlzdCwgdXJsLCAqdGl0bGUpOwotICAgIHJldHVybiB1cmw7CitTdHJpbmcgUmVhZGFibGVE
YXRhT2JqZWN0Ojp1cmxUaXRsZSgpIGNvbnN0IHsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKLVN0cmluZyBSZWFkYWJsZURhdGFPYmplY3Q6Omdl
dEhUTUwoU3RyaW5nKiBiYXNlVVJMKSBjb25zdAotewotICAgIFN0cmluZyBodG1sOwotICAgIFN0
cmluZyBpZ25vcmVkQmFzZVVSTDsKLSAgICBpZiAoIWJhc2VVUkwpCi0gICAgICAgIGJhc2VVUkwg
PSAmaWdub3JlZEJhc2VVUkw7Ci0gICAgQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFJlYWREYXRh
KAotICAgICAgICBjbGlwYm9hcmRCdWZmZXIobV9pc0ZvckRyYWdnaW5nKSwgbWltZVR5cGVUZXh0
SFRNTCwgaHRtbCwgKmJhc2VVUkwpOwotICAgIHJldHVybiBodG1sOworS1VSTCBSZWFkYWJsZURh
dGFPYmplY3Q6Omh0bWxCYXNlVXJsKCkgY29uc3QgeworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIHJldHVybiBLVVJMKCk7CiB9CiAKLWJvb2wgUmVhZGFibGVEYXRhT2JqZWN0OjpoYXNG
aWxlbmFtZXMoKSBjb25zdAorYm9vbCBSZWFkYWJsZURhdGFPYmplY3Q6OmNvbnRhaW5zRmlsZW5h
bWVzKCkgY29uc3QKIHsKICAgICBlbnN1cmVUeXBlQ2FjaGVJbml0aWFsaXplZCgpOwogICAgIHJl
dHVybiBtX2NvbnRhaW5zRmlsZW5hbWVzOwpAQCAtMTA0LDcgKzkyLDcgQEAgYm9vbCBSZWFkYWJs
ZURhdGFPYmplY3Q6Omhhc0ZpbGVuYW1lcygpIGNvbnN0CiAKIFZlY3RvcjxTdHJpbmc+IFJlYWRh
YmxlRGF0YU9iamVjdDo6ZmlsZW5hbWVzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gQ2hyb21pdW1C
cmlkZ2U6OmNsaXBib2FyZFJlYWRGaWxlbmFtZXMoY2xpcGJvYXJkQnVmZmVyKG1faXNGb3JEcmFn
Z2luZykpOworICAgIHJldHVybiBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkUmVhZEZpbGVuYW1l
cyhjbGlwYm9hcmRCdWZmZXIobV9jbGlwYm9hcmRUeXBlKSk7CiB9CiAKIHZvaWQgUmVhZGFibGVE
YXRhT2JqZWN0OjplbnN1cmVUeXBlQ2FjaGVJbml0aWFsaXplZCgpIGNvbnN0CkBAIC0xMTMsNyAr
MTAxLDcgQEAgdm9pZCBSZWFkYWJsZURhdGFPYmplY3Q6OmVuc3VyZVR5cGVDYWNoZUluaXRpYWxp
emVkKCkgY29uc3QKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV90eXBlcyA9IENocm9taXVtQnJp
ZGdlOjpjbGlwYm9hcmRSZWFkQXZhaWxhYmxlVHlwZXMoCi0gICAgICAgIGNsaXBib2FyZEJ1ZmZl
cihtX2lzRm9yRHJhZ2dpbmcpLCAmbV9jb250YWluc0ZpbGVuYW1lcyk7CisgICAgICAgIGNsaXBi
b2FyZEJ1ZmZlcihtX2NsaXBib2FyZFR5cGUpLCAmbV9jb250YWluc0ZpbGVuYW1lcyk7CiAgICAg
bV9pc1R5cGVDYWNoZUluaXRpYWxpemVkID0gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbGF0Zm9ybS9jaHJvbWl1bS9SZWFkYWJsZURhdGFPYmplY3QuaCBiL1dlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vUmVhZGFibGVEYXRhT2JqZWN0LmgKaW5kZXggNjBmNmQ0NS4uMTIxZjUwNyAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9SZWFkYWJsZURhdGFPYmplY3Qu
aAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1JlYWRhYmxlRGF0YU9iamVjdC5oCkBA
IC0zMSw2ICszMSw3IEBACiAjaWZuZGVmIFJlYWRhYmxlRGF0YU9iamVjdF9oCiAjZGVmaW5lIFJl
YWRhYmxlRGF0YU9iamVjdF9oCiAKKyNpbmNsdWRlICJDbGlwYm9hcmQuaCIKICNpbmNsdWRlICJQ
bGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KQEAgLTQzLDI2ICs0NCwyNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAv
LyBicm93c2VyIHRvIHRoZSByZW5kZXJlci4KIGNsYXNzIFJlYWRhYmxlRGF0YU9iamVjdCA6IHB1
YmxpYyBSZWZDb3VudGVkPFJlYWRhYmxlRGF0YU9iamVjdD4gewogcHVibGljOgotICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFJlYWRhYmxlRGF0YU9iamVjdD4gY3JlYXRlKGJvb2wgaXNGb3JEcmFnZ2lu
Zyk7CisgIHN0YXRpYyBQYXNzUmVmUHRyPFJlYWRhYmxlRGF0YU9iamVjdD4gY3JlYXRlKENsaXBi
b2FyZDo6Q2xpcGJvYXJkVHlwZSk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgaGFzRGF0YSgpIGNvbnN0
OwotICAgIHZpcnR1YWwgSGFzaFNldDxTdHJpbmc+IHR5cGVzKCkgY29uc3Q7Ci0gICAgdmlydHVh
bCBTdHJpbmcgZ2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGJvb2wmIHN1Y2NlZWRlZCkgY29u
c3Q7CisgICAgYm9vbCBoYXNEYXRhKCkgY29uc3Q7CisgICAgSGFzaFNldDxTdHJpbmc+IHR5cGVz
KCkgY29uc3Q7CisgICAgU3RyaW5nIGdldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBib29sJiBz
dWNjZWVkZWQpIGNvbnN0OwogCi0gICAgdmlydHVhbCBTdHJpbmcgZ2V0VVJMKFN0cmluZyogdGl0
bGUpIGNvbnN0OwotICAgIHZpcnR1YWwgU3RyaW5nIGdldEhUTUwoU3RyaW5nKiBiYXNlVVJMKSBj
b25zdDsKKyAgICBTdHJpbmcgdXJsVGl0bGUoKSBjb25zdDsKKyAgICBLVVJMIGh0bWxCYXNlVXJs
KCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIGJvb2wgaGFzRmlsZW5hbWVzKCkgY29uc3Q7Ci0gICAg
dmlydHVhbCBWZWN0b3I8U3RyaW5nPiBmaWxlbmFtZXMoKSBjb25zdDsKKyAgICBib29sIGNvbnRh
aW5zRmlsZW5hbWVzKCkgY29uc3Q7CisgICAgVmVjdG9yPFN0cmluZz4gZmlsZW5hbWVzKCkgY29u
c3Q7CiAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgUmVhZGFibGVEYXRhT2JqZWN0KGJvb2wgaXNG
b3JEcmFnZ2luZyk7CisgICAgZXhwbGljaXQgUmVhZGFibGVEYXRhT2JqZWN0KENsaXBib2FyZDo6
Q2xpcGJvYXJkVHlwZSk7CiAKICAgICAvLyBUaGlzIGlzbid0IGFsd2F5cyBjb25zdC4uLiBidXQg
bW9zdCBvZiB0aGUgdGltZSBpdCBpcy4KICAgICB2b2lkIGVuc3VyZVR5cGVDYWNoZUluaXRpYWxp
emVkKCkgY29uc3Q7CiAKLQotICAgIGJvb2wgbV9pc0ZvckRyYWdnaW5nOworICAgIENsaXBib2Fy
ZDo6Q2xpcGJvYXJkVHlwZSBtX2NsaXBib2FyZFR5cGU7CiAKICAgICAvLyBUbyBhdm9pZCBtYWtp
bmcgYSBsb3Qgb2YgSVBDIGNhbGxzIGZvciBlYWNoIGRyYWcgZXZlbnQsIHdlIGNhY2hlIHNvbWUK
ICAgICAvLyB2YWx1ZXMgaW4gdGhlIHJlbmRlcmVyLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9Xcml0YWJsZURhdGFPYmplY3QuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9j
aHJvbWl1bS9Xcml0YWJsZURhdGFPYmplY3QuY3BwCmluZGV4IGFlZTdiZmMuLjFlZjE5ZTkgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vV3JpdGFibGVEYXRhT2JqZWN0LmNw
cAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1dyaXRhYmxlRGF0YU9iamVjdC5jcHAK
QEAgLTM2LDEzICszNiwxMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NSZWZQdHI8
V3JpdGFibGVEYXRhT2JqZWN0PiBXcml0YWJsZURhdGFPYmplY3Q6OmNyZWF0ZShib29sIGlzRm9y
RHJhZ2dpbmcpCisgIFBhc3NSZWZQdHI8V3JpdGFibGVEYXRhT2JqZWN0PiBXcml0YWJsZURhdGFP
YmplY3Q6OmNyZWF0ZShDbGlwYm9hcmQ6OkNsaXBib2FyZFR5cGUgY2xpcGJvYXJkVHlwZSkKIHsK
LSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdyaXRhYmxlRGF0YU9iamVjdChpc0ZvckRyYWdnaW5n
KSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXcml0YWJsZURhdGFPYmplY3QoY2xpcGJvYXJk
VHlwZSkpOwogfQogCi1Xcml0YWJsZURhdGFPYmplY3Q6OldyaXRhYmxlRGF0YU9iamVjdChib29s
IGlzRm9yRHJhZ2dpbmcpCi0gICAgOiBtX2lzRm9yRHJhZ2dpbmcoaXNGb3JEcmFnZ2luZykKK1dy
aXRhYmxlRGF0YU9iamVjdDo6V3JpdGFibGVEYXRhT2JqZWN0KENsaXBib2FyZDo6Q2xpcGJvYXJk
VHlwZSBjbGlwYm9hcmRUeXBlKQorICAgIDogbV9jbGlwYm9hcmRUeXBlKGNsaXBib2FyZFR5cGUp
CiB7CiB9CiAKQEAgLTc2LDcgKzc2LDcgQEAgdm9pZCBXcml0YWJsZURhdGFPYmplY3Q6OmNsZWFy
QWxsKCkKIAogYm9vbCBXcml0YWJsZURhdGFPYmplY3Q6OnNldERhdGEoY29uc3QgU3RyaW5nJiB0
eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpCiB7Ci0gICAgaWYgKCFtX2lzRm9yRHJhZ2dpbmcpIHsK
KyAgICBpZiAobV9jbGlwYm9hcmRUeXBlID09IENsaXBib2FyZDo6Q29weUFuZFBhc3RlKSB7CiAg
ICAgICAgIENocm9taXVtQnJpZGdlOjpjbGlwYm9hcmRXcml0ZURhdGEodHlwZSwgZGF0YSwgIiIp
OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC04OCwxNSArODgsMTMgQEAgYm9vbCBX
cml0YWJsZURhdGFPYmplY3Q6OnNldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJp
bmcmIGRhdGEpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgV3JpdGFibGVEYXRhT2JqZWN0
OjpzZXRVUkwoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgdGl0bGUpCit2b2lkIFdy
aXRhYmxlRGF0YU9iamVjdDo6c2V0VXJsVGl0bGUoY29uc3QgU3RyaW5nJiB0aXRsZSkKIHsKLSAg
ICBzZXREYXRhKG1pbWVUeXBlVGV4dFVSSUxpc3QsIHVybCk7CiAgICAgbV91cmxUaXRsZSA9IHRp
dGxlOwogfQogCi12b2lkIFdyaXRhYmxlRGF0YU9iamVjdDo6c2V0SFRNTChjb25zdCBTdHJpbmcm
IGh0bWwsIGNvbnN0IEtVUkwmIGJhc2VVUkwpCit2b2lkIFdyaXRhYmxlRGF0YU9iamVjdDo6c2V0
SHRtbEJhc2VVcmwoY29uc3QgS1VSTCYgYmFzZVVSTCkKIHsKLSAgICBzZXREYXRhKG1pbWVUeXBl
VGV4dEhUTUwsIGh0bWwpOwogICAgIG1faHRtbEJhc2VVUkwgPSBiYXNlVVJMOwogfQogCmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1dyaXRhYmxlRGF0YU9iamVjdC5oIGIv
V2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9Xcml0YWJsZURhdGFPYmplY3QuaAppbmRleCA3MWUy
ZTI2Li45OGZhZGIyIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1dyaXRh
YmxlRGF0YU9iamVjdC5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vV3JpdGFibGVE
YXRhT2JqZWN0LmgKQEAgLTMxLDYgKzMxLDcgQEAKICNpZm5kZWYgV3JpdGFibGVEYXRhT2JqZWN0
X2gKICNkZWZpbmUgV3JpdGFibGVEYXRhT2JqZWN0X2gKIAorI2luY2x1ZGUgIkNsaXBib2FyZC5o
IgogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1
ZGUgIlNoYXJlZEJ1ZmZlci5oIgpAQCAtNDcsMzIgKzQ4LDMyIEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIC8vIGF0b21pY2FsbHkuCiBjbGFzcyBXcml0YWJsZURhdGFPYmplY3QgOiBwdWJsaWMgUmVm
Q291bnRlZDxXcml0YWJsZURhdGFPYmplY3Q+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxXcml0YWJsZURhdGFPYmplY3Q+IGNyZWF0ZShib29sIGlzRm9yRHJhZ2dpbmcpOworICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFdyaXRhYmxlRGF0YU9iamVjdD4gY3JlYXRlKENsaXBib2FyZDo6
Q2xpcGJvYXJkVHlwZSk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJEYXRhKGNvbnN0IFN0cmlu
ZyYgdHlwZSk7Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyQWxsRXhjZXB0RmlsZXMoKTsKLSAgICB2
aXJ0dWFsIHZvaWQgY2xlYXJBbGwoKTsKLSAgICB2aXJ0dWFsIGJvb2wgc2V0RGF0YShjb25zdCBT
dHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSk7CisgICAgdm9pZCBjbGVhckRhdGEoY29u
c3QgU3RyaW5nJiB0eXBlKTsKKyAgICB2b2lkIGNsZWFyQWxsRXhjZXB0RmlsZXMoKTsKKyAgICB2
b2lkIGNsZWFyQWxsKCk7CisgICAgYm9vbCBzZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29u
c3QgU3RyaW5nJiBkYXRhKTsKIAotICAgIHZpcnR1YWwgdm9pZCBzZXRVUkwoY29uc3QgU3RyaW5n
JiB1cmwsIGNvbnN0IFN0cmluZyYgdGl0bGUpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRIVE1MKGNv
bnN0IFN0cmluZyYgaHRtbCwgY29uc3QgS1VSTCYgYmFzZVVSTCk7CisgICAgdm9pZCBzZXRVcmxU
aXRsZShjb25zdCBTdHJpbmcmIHRpdGxlKTsKKyAgICB2b2lkIHNldEh0bWxCYXNlVXJsKGNvbnN0
IEtVUkwmIGJhc2VVUkwpOwogCiAgICAgLy8gVXNlZCBmb3IgdHJhbnNmZXJyaW5nIGRyYWcgZGF0
YSBmcm9tIHRoZSByZW5kZXJlciB0byB0aGUgYnJvd3Nlci4KLSAgICB2aXJ0dWFsIEhhc2hNYXA8
U3RyaW5nLCBTdHJpbmc+IGRhdGFNYXAoKSBjb25zdDsKKyAgICBIYXNoTWFwPFN0cmluZywgU3Ry
aW5nPiBkYXRhTWFwKCkgY29uc3Q7CiAgICAgdmlydHVhbCBTdHJpbmcgdXJsVGl0bGUoKSBjb25z
dDsKICAgICB2aXJ0dWFsIEtVUkwgaHRtbEJhc2VVUkwoKSBjb25zdDsKIAotICAgIHZpcnR1YWwg
U3RyaW5nIGZpbGVFeHRlbnNpb24oKSBjb25zdDsKLSAgICB2aXJ0dWFsIFN0cmluZyBmaWxlQ29u
dGVudEZpbGVuYW1lKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZl
cj4gZmlsZUNvbnRlbnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0RmlsZUV4dGVuc2lv
bihjb25zdCBTdHJpbmcmKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0RmlsZUNvbnRlbnRGaWxlbmFt
ZShjb25zdCBTdHJpbmcmKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0RmlsZUNvbnRlbnQoUGFzc1Jl
ZlB0cjxTaGFyZWRCdWZmZXI+KTsKKyAgICBTdHJpbmcgZmlsZUV4dGVuc2lvbigpIGNvbnN0Owor
ICAgIFN0cmluZyBmaWxlQ29udGVudEZpbGVuYW1lKCkgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxT
aGFyZWRCdWZmZXI+IGZpbGVDb250ZW50KCkgY29uc3Q7CisgICAgdm9pZCBzZXRGaWxlRXh0ZW5z
aW9uKGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgc2V0RmlsZUNvbnRlbnRGaWxlbmFtZShjb25z
dCBTdHJpbmcmKTsKKyAgICB2b2lkIHNldEZpbGVDb250ZW50KFBhc3NSZWZQdHI8U2hhcmVkQnVm
ZmVyPik7CiAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgV3JpdGFibGVEYXRhT2JqZWN0KGJvb2wg
aXNGb3JEcmFnZ2luZyk7CisgIGV4cGxpY2l0IFdyaXRhYmxlRGF0YU9iamVjdChDbGlwYm9hcmQ6
OkNsaXBib2FyZFR5cGUpOwogCi0gICAgYm9vbCBtX2lzRm9yRHJhZ2dpbmc7CisgICAgQ2xpcGJv
YXJkOjpDbGlwYm9hcmRUeXBlIG1fY2xpcGJvYXJkVHlwZTsKIAogICAgIEhhc2hNYXA8U3RyaW5n
LCBTdHJpbmc+IG1fZGF0YU1hcDsKICAgICBTdHJpbmcgbV91cmxUaXRsZTsKZGlmZiAtLWdpdCBh
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVmlldy5oIGIvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJWaWV3LmgKaW5kZXggZmRkNDcyOS4uOTI1MzA3ZSAxMDA2NDQKLS0tIGEvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJWaWV3LmgKKysrIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJW
aWV3LmgKQEAgLTIyMyw2ICsyMjMsOSBAQCBwdWJsaWM6CiAgICAgICAgIGNvbnN0IFdlYkRyYWdE
YXRhJiwgaW50IGlkZW50aXR5LAogICAgICAgICBjb25zdCBXZWJQb2ludCYgY2xpZW50UG9pbnQs
IGNvbnN0IFdlYlBvaW50JiBzY3JlZW5Qb2ludCwKICAgICAgICAgV2ViRHJhZ09wZXJhdGlvbnNN
YXNrIG9wZXJhdGlvbnNBbGxvd2VkKSA9IDA7CisgICAgdmlydHVhbCBXZWJEcmFnT3BlcmF0aW9u
IGRyYWdUYXJnZXREcmFnRW50ZXIyKAorICAgICAgICBpbnQgaWRlbnRpdHksIGNvbnN0IFdlYlBv
aW50JiBjbGllbnRQb2ludCwgY29uc3QgV2ViUG9pbnQmIHNjcmVlblBvaW50LAorICAgICAgICBX
ZWJEcmFnT3BlcmF0aW9uc01hc2sgb3BlcmF0aW9uc0FsbG93ZWQpID0gMDsKICAgICB2aXJ0dWFs
IFdlYkRyYWdPcGVyYXRpb24gZHJhZ1RhcmdldERyYWdPdmVyKAogICAgICAgICBjb25zdCBXZWJQ
b2ludCYgY2xpZW50UG9pbnQsIGNvbnN0IFdlYlBvaW50JiBzY3JlZW5Qb2ludCwKICAgICAgICAg
V2ViRHJhZ09wZXJhdGlvbnNNYXNrIG9wZXJhdGlvbnNBbGxvd2VkKSA9IDA7CmRpZmYgLS1naXQg
YS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRyYWdEYXRhLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViRHJhZ0RhdGEuY3BwCmluZGV4IGYyNjQzNjkuLjkxNjdjNjkgMTAwNjQ0Ci0tLSBhL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViRHJhZ0RhdGEuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViRHJhZ0RhdGEuY3BwCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiV2ViRHJhZ0Rh
dGEuaCIKIAogI2luY2x1ZGUgIkNocm9taXVtRGF0YU9iamVjdC5oIgorI2luY2x1ZGUgIkNocm9t
aXVtRGF0YU9iamVjdExlZ2FjeS5oIgogI2luY2x1ZGUgIkNsaXBib2FyZE1pbWVUeXBlcy5oIgog
I2luY2x1ZGUgIldlYkRhdGEuaCIKICNpbmNsdWRlICJXZWJTdHJpbmcuaCIKQEAgLTQ5LDcgKzUw
LDcgQEAgY2xhc3MgV2ViRHJhZ0RhdGFQcml2YXRlIDogcHVibGljIENocm9taXVtRGF0YU9iamVj
dCB7CiAKIHZvaWQgV2ViRHJhZ0RhdGE6OmluaXRpYWxpemUoKQogewotICAgIGFzc2lnbihzdGF0
aWNfY2FzdDxXZWJEcmFnRGF0YVByaXZhdGUqPihDaHJvbWl1bURhdGFPYmplY3Q6OmNyZWF0ZShD
bGlwYm9hcmQ6OkRyYWdBbmREcm9wKS5yZWxlYXNlUmVmKCkpKTsKKyAgICBhc3NpZ24oc3RhdGlj
X2Nhc3Q8V2ViRHJhZ0RhdGFQcml2YXRlKj4oQ2hyb21pdW1EYXRhT2JqZWN0OjpjcmVhdGUoQ2hy
b21pdW1EYXRhT2JqZWN0TGVnYWN5OjpjcmVhdGUoQ2xpcGJvYXJkOjpEcmFnQW5kRHJvcCkpLnJl
bGVhc2VSZWYoKSkpOwogfQogCiB2b2lkIFdlYkRyYWdEYXRhOjpyZXNldCgpCkBAIC0yMzIsOCAr
MjMzLDcgQEAgdm9pZCBXZWJEcmFnRGF0YTo6YXNzaWduKFdlYkRyYWdEYXRhUHJpdmF0ZSogcCkK
IHZvaWQgV2ViRHJhZ0RhdGE6OmVuc3VyZU11dGFibGUoKQogewogICAgIEFTU0VSVCghaXNOdWxs
KCkpOwotICAgIGlmICghbV9wcml2YXRlLT5oYXNPbmVSZWYoKSkKLSAgICAgICAgYXNzaWduKHN0
YXRpY19jYXN0PFdlYkRyYWdEYXRhUHJpdmF0ZSo+KG1fcHJpdmF0ZS0+Y29weSgpLnJlbGVhc2VS
ZWYoKSkpOworICAgIEFTU0VSVChtX3ByaXZhdGUtPmhhc09uZVJlZigpKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJ
bXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCmluZGV4IDU5OWM2
NWUuLjc1YzY1YTMgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwu
Y3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCkBAIC0xNjgxLDYg
KzE2ODEsMjEgQEAgV2ViRHJhZ09wZXJhdGlvbiBXZWJWaWV3SW1wbDo6ZHJhZ1RhcmdldERyYWdF
bnRlcigKICAgICByZXR1cm4gZHJhZ1RhcmdldERyYWdFbnRlck9yT3ZlcihjbGllbnRQb2ludCwg
c2NyZWVuUG9pbnQsIERyYWdFbnRlcik7CiB9CiAKK1dlYkRyYWdPcGVyYXRpb24gV2ViVmlld0lt
cGw6OmRyYWdUYXJnZXREcmFnRW50ZXIyKAorICAgIGludCBpZGVudGl0eSwKKyAgICBjb25zdCBX
ZWJQb2ludCYgY2xpZW50UG9pbnQsCisgICAgY29uc3QgV2ViUG9pbnQmIHNjcmVlblBvaW50LAor
ICAgIFdlYkRyYWdPcGVyYXRpb25zTWFzayBvcGVyYXRpb25zQWxsb3dlZCkKK3sKKyAgICBBU1NF
UlQoIW1fY3VycmVudERyYWdEYXRhLmdldCgpKTsKKworICAgIG1fY3VycmVudERyYWdEYXRhID0g
Q2hyb21pdW1EYXRhT2JqZWN0OjpjcmVhdGVSZWFkYWJsZShDbGlwYm9hcmQ6OkRyYWdBbmREcm9w
KTsKKyAgICBtX2RyYWdJZGVudGl0eSA9IGlkZW50aXR5OworICAgIG1fb3BlcmF0aW9uc0FsbG93
ZWQgPSBvcGVyYXRpb25zQWxsb3dlZDsKKworICAgIHJldHVybiBkcmFnVGFyZ2V0RHJhZ0VudGVy
T3JPdmVyKGNsaWVudFBvaW50LCBzY3JlZW5Qb2ludCwgRHJhZ0VudGVyKTsKK30KKwogV2ViRHJh
Z09wZXJhdGlvbiBXZWJWaWV3SW1wbDo6ZHJhZ1RhcmdldERyYWdPdmVyKAogICAgIGNvbnN0IFdl
YlBvaW50JiBjbGllbnRQb2ludCwKICAgICBjb25zdCBXZWJQb2ludCYgc2NyZWVuUG9pbnQsCmRp
ZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmggYi9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKaW5kZXggZTUxZGY0ZC4uMGE0NmU1ZSAxMDA2NDQKLS0t
IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCisrKyBiL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViVmlld0ltcGwuaApAQCAtMTU0LDYgKzE1NCwxMSBAQCBwdWJsaWM6CiAgICAgICAg
IGNvbnN0IFdlYlBvaW50JiBjbGllbnRQb2ludCwKICAgICAgICAgY29uc3QgV2ViUG9pbnQmIHNj
cmVlblBvaW50LAogICAgICAgICBXZWJEcmFnT3BlcmF0aW9uc01hc2sgb3BlcmF0aW9uc0FsbG93
ZWQpOworICAgIHZpcnR1YWwgV2ViRHJhZ09wZXJhdGlvbiBkcmFnVGFyZ2V0RHJhZ0VudGVyMigK
KyAgICAgICAgaW50IGlkZW50aXR5LAorICAgICAgICBjb25zdCBXZWJQb2ludCYgY2xpZW50UG9p
bnQsCisgICAgICAgIGNvbnN0IFdlYlBvaW50JiBzY3JlZW5Qb2ludCwKKyAgICAgICAgV2ViRHJh
Z09wZXJhdGlvbnNNYXNrIG9wZXJhdGlvbnNBbGxvd2VkKTsKICAgICB2aXJ0dWFsIFdlYkRyYWdP
cGVyYXRpb24gZHJhZ1RhcmdldERyYWdPdmVyKAogICAgICAgICBjb25zdCBXZWJQb2ludCYgY2xp
ZW50UG9pbnQsCiAgICAgICAgIGNvbnN0IFdlYlBvaW50JiBzY3JlZW5Qb2ludCwK
</data>
<flag name="review"
          id="59960"
          type_id="1"
          status="-"
          setter="dcheng"
    />
    <flag name="commit-queue"
          id="59961"
          type_id="3"
          status="-"
          setter="dcheng"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70176</attachid>
            <date>2010-10-07 17:17:08 -0700</date>
            <delta_ts>2010-10-08 16:52:55 -0700</delta_ts>
            <desc>Almost the real patch</desc>
            <filename>foo.patch</filename>
            <type>text/plain</type>
            <size>47037</size>
            <attacher name="Daniel Cheng">dcheng</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
aW5kZXggMzM2N2NlZS4uNjkxNzRjZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
KysrIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTIyOTIsNiArMjI5Miw4IEBACiAgICAgICAg
ICAgICAncGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1CcmlkZ2UuaCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmNwcCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmgnLAorICAgICAgICAgICAgJ3Bs
YXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdExlZ2FjeS5jcHAnLAorICAgICAgICAg
ICAgJ3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdExlZ2FjeS5oJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5jcHAnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmgnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtTGludXguY3BwJywKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvZWRpdGluZy9jaHJvbWl1bS9FZGl0b3JDaHJvbWl1bS5jcHAgYi9XZWJD
b3JlL2VkaXRpbmcvY2hyb21pdW0vRWRpdG9yQ2hyb21pdW0uY3BwCmluZGV4IDJiZmI1YWYuLmNh
N2Y0MWEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9jaHJvbWl1bS9FZGl0b3JDaHJvbWl1
bS5jcHAKKysrIGIvV2ViQ29yZS9lZGl0aW5nL2Nocm9taXVtL0VkaXRvckNocm9taXVtLmNwcApA
QCAtMzksNyArMzksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFBhc3NSZWZQdHI8Q2xpcGJv
YXJkPiBFZGl0b3I6Om5ld0dlbmVyYWxDbGlwYm9hcmQoQ2xpcGJvYXJkQWNjZXNzUG9saWN5IHBv
bGljeSwgRnJhbWUqIGZyYW1lKQogewotICAgIHJldHVybiBDbGlwYm9hcmRDaHJvbWl1bTo6Y3Jl
YXRlKENsaXBib2FyZDo6Q29weUFuZFBhc3RlLCBDaHJvbWl1bURhdGFPYmplY3Q6OmNyZWF0ZShD
bGlwYm9hcmQ6OkNvcHlBbmRQYXN0ZSksIHBvbGljeSwgZnJhbWUpOworICAgIHJldHVybiBDbGlw
Ym9hcmRDaHJvbWl1bTo6Y3JlYXRlKENsaXBib2FyZDo6Q29weUFuZFBhc3RlLCBwb2xpY3ksIGZy
YW1lKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
YWdlL2Nocm9taXVtL0V2ZW50SGFuZGxlckNocm9taXVtLmNwcCBiL1dlYkNvcmUvcGFnZS9jaHJv
bWl1bS9FdmVudEhhbmRsZXJDaHJvbWl1bS5jcHAKaW5kZXggOTEzOGI4ZC4uOWI0MGZiMyAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9wYWdlL2Nocm9taXVtL0V2ZW50SGFuZGxlckNocm9taXVtLmNwcAor
KysgYi9XZWJDb3JlL3BhZ2UvY2hyb21pdW0vRXZlbnRIYW5kbGVyQ2hyb21pdW0uY3BwCkBAIC0x
MjgsOCArMTI4LDggQEAgYm9vbCBFdmVudEhhbmRsZXI6OmV2ZW50QWN0aXZhdGVkVmlldyhjb25z
dCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2ZW50KSBjb25zdAogCiBQYXNzUmVmUHRyPENsaXBib2Fy
ZD4gRXZlbnRIYW5kbGVyOjpjcmVhdGVEcmFnZ2luZ0NsaXBib2FyZCgpIGNvbnN0CiB7Ci0gICAg
UmVmUHRyPENocm9taXVtRGF0YU9iamVjdD4gZGF0YU9iamVjdCA9IENocm9taXVtRGF0YU9iamVj
dDo6Y3JlYXRlKENsaXBib2FyZDo6RHJhZ0FuZERyb3ApOwotICAgIHJldHVybiBDbGlwYm9hcmRD
aHJvbWl1bTo6Y3JlYXRlKENsaXBib2FyZDo6RHJhZ0FuZERyb3AsIGRhdGFPYmplY3QuZ2V0KCks
IENsaXBib2FyZFdyaXRhYmxlLCBtX2ZyYW1lKTsKKyAgICBSZWZQdHI8Q2hyb21pdW1EYXRhT2Jq
ZWN0TGVnYWN5PiBkYXRhT2JqZWN0ID0gQ2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5OjpjcmVhdGUo
Q2xpcGJvYXJkOjpEcmFnQW5kRHJvcCk7CisgICAgcmV0dXJuIENsaXBib2FyZENocm9taXVtOjpj
cmVhdGUoQ2xpcGJvYXJkOjpEcmFnQW5kRHJvcCwgQ2hyb21pdW1EYXRhT2JqZWN0OjpjcmVhdGUo
ZGF0YU9iamVjdCksIENsaXBib2FyZFdyaXRhYmxlLCBtX2ZyYW1lKTsKIH0KIAogdm9pZCBFdmVu
dEhhbmRsZXI6OmZvY3VzRG9jdW1lbnRWaWV3KCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmNwcAppbmRleCA3M2U2ZjQ4Li5lNDg0YTc0IDEwMDY0
NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5jcHAK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuY3BwCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAwOCwgMjAwOSwgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAxMCwgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIAogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCkBAIC0zMSwyMjAgKzMxLDE4OSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IkNocm9taXVtRGF0YU9iamVjdC5oIgogCi0jaW5jbHVkZSAiQ2hyb21pdW1CcmlkZ2UuaCIKLSNp
bmNsdWRlICJDbGlwYm9hcmRNaW1lVHlwZXMuaCIKLSNpbmNsdWRlICJQYXN0ZWJvYXJkLmgiCi0K
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotLy8gUGVyIFJGQyAyNDgzLCB0aGUgbGluZSBzZXBhcmF0
b3IgZm9yICJ0ZXh0Ly4uLiIgTUlNRSB0eXBlcyBpcyBDUi1MRi4KLXN0YXRpYyBjaGFyIGNvbnN0
KiBjb25zdCB0ZXh0TUlNRVR5cGVMaW5lU2VwYXJhdG9yID0gIlxyXG4iOworQ2hyb21pdW1EYXRh
T2JqZWN0OjpDaHJvbWl1bURhdGFPYmplY3QoUGFzc1JlZlB0cjxDaHJvbWl1bURhdGFPYmplY3RM
ZWdhY3k+IGRhdGEpCisgICAgOiBSZWZDb3VudGVkPENocm9taXVtRGF0YU9iamVjdD4oKQorICAg
ICwgbV9sZWdhY3lEYXRhKGRhdGEpCit7Cit9CiAKLXZvaWQgQ2hyb21pdW1EYXRhT2JqZWN0Ojpj
bGVhckRhdGEoY29uc3QgU3RyaW5nJiB0eXBlKQorQ2hyb21pdW1EYXRhT2JqZWN0OjpDaHJvbWl1
bURhdGFPYmplY3QoUGFzc1JlZlB0cjxSZWFkYWJsZURhdGFPYmplY3Q+IGRhdGEpCisgICAgOiBS
ZWZDb3VudGVkPENocm9taXVtRGF0YU9iamVjdD4oKQorICAgICwgbV9yZWFkYWJsZURhdGEoZGF0
YSkKK3sKK30KKworQ2hyb21pdW1EYXRhT2JqZWN0OjpDaHJvbWl1bURhdGFPYmplY3QoUGFzc1Jl
ZlB0cjxXcml0YWJsZURhdGFPYmplY3Q+IGRhdGEpCisgICAgOiBSZWZDb3VudGVkPENocm9taXVt
RGF0YU9iamVjdD4oKQorICAgICwgbV93cml0YWJsZURhdGEoZGF0YSkKIHsKLSAgICBpZiAodHlw
ZSA9PSBtaW1lVHlwZVRleHRQbGFpbikgewotICAgICAgICBtX3BsYWluVGV4dCA9ICIiOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQorfQogCi0gICAgaWYgKHR5cGUgPT0gbWltZVR5cGVVUkwgfHwg
dHlwZSA9PSBtaW1lVHlwZVRleHRVUklMaXN0KSB7Ci0gICAgICAgIG1fdXJpTGlzdCA9ICIiOwot
ICAgICAgICBtX3VybCA9IEtVUkwoKTsKLSAgICAgICAgbV91cmxUaXRsZSA9ICIiOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQorUGFzc1JlZlB0cjxDaHJvbWl1bURhdGFPYmplY3Q+IENocm9taXVt
RGF0YU9iamVjdDo6Y3JlYXRlKFBhc3NSZWZQdHI8Q2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5PiBk
YXRhKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2hyb21pdW1EYXRhT2JqZWN0KGRhdGEp
KTsKK30KIAotICAgIGlmICh0eXBlID09IG1pbWVUeXBlVGV4dEhUTUwpIHsKLSAgICAgICAgbV90
ZXh0SHRtbCA9ICIiOwotICAgICAgICBtX2h0bWxCYXNlVXJsID0gS1VSTCgpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQorUGFzc1JlZlB0cjxDaHJvbWl1bURhdGFPYmplY3Q+IENocm9taXVtRGF0
YU9iamVjdDo6Y3JlYXRlUmVhZGFibGUoQ2xpcGJvYXJkOjpDbGlwYm9hcmRUeXBlIGNsaXBib2Fy
ZFR5cGUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDaHJvbWl1bURhdGFPYmplY3QoUmVh
ZGFibGVEYXRhT2JqZWN0OjpjcmVhdGUoY2xpcGJvYXJkVHlwZSkpKTsKK30KIAotICAgIGlmICh0
eXBlID09IG1pbWVUeXBlRG93bmxvYWRVUkwpIHsKLSAgICAgICAgbV9kb3dubG9hZE1ldGFkYXRh
ID0gIiI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CitQYXNzUmVmUHRyPENocm9taXVtRGF0YU9i
amVjdD4gQ2hyb21pdW1EYXRhT2JqZWN0OjpjcmVhdGVXcml0YWJsZShDbGlwYm9hcmQ6OkNsaXBi
b2FyZFR5cGUgY2xpcGJvYXJkVHlwZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IENocm9t
aXVtRGF0YU9iamVjdChXcml0YWJsZURhdGFPYmplY3Q6OmNyZWF0ZShjbGlwYm9hcmRUeXBlKSkp
OworfQorCit2b2lkIENocm9taXVtRGF0YU9iamVjdDo6Y2xlYXJEYXRhKGNvbnN0IFN0cmluZyYg
dHlwZSkKK3sKKyAgICBpZiAobV9sZWdhY3lEYXRhKQorICAgICAgICAgIG1fbGVnYWN5RGF0YS0+
Y2xlYXJEYXRhKHR5cGUpOworICAgIGVsc2UKKyAgICAgICAgICBtX3dyaXRhYmxlRGF0YS0+Y2xl
YXJEYXRhKHR5cGUpOwogfQogCiB2b2lkIENocm9taXVtRGF0YU9iamVjdDo6Y2xlYXJBbGwoKQog
ewotICAgIGNsZWFyQWxsRXhjZXB0RmlsZXMoKTsKLSAgICBtX2ZpbGVuYW1lcy5jbGVhcigpOwor
ICAgIGlmIChtX2xlZ2FjeURhdGEpCisgICAgICAgIG1fbGVnYWN5RGF0YS0+Y2xlYXJBbGwoKTsK
KyAgICBlbHNlCisgICAgICAgIG1fd3JpdGFibGVEYXRhLT5jbGVhckFsbCgpOwogfQogCiB2b2lk
IENocm9taXVtRGF0YU9iamVjdDo6Y2xlYXJBbGxFeGNlcHRGaWxlcygpCiB7Ci0gICAgbV91cmxU
aXRsZSA9ICIiOwotICAgIG1fdXJsID0gS1VSTCgpOwotICAgIG1fdXJpTGlzdCA9ICIiOwotICAg
IG1fZG93bmxvYWRNZXRhZGF0YSA9ICIiOwotICAgIG1fZmlsZUV4dGVuc2lvbiA9ICIiOwotICAg
IG1fcGxhaW5UZXh0ID0gIiI7Ci0gICAgbV90ZXh0SHRtbCA9ICIiOwotICAgIG1faHRtbEJhc2VV
cmwgPSBLVVJMKCk7Ci0gICAgbV9maWxlQ29udGVudEZpbGVuYW1lID0gIiI7Ci0gICAgaWYgKG1f
ZmlsZUNvbnRlbnQpCi0gICAgICAgIG1fZmlsZUNvbnRlbnQtPmNsZWFyKCk7CisgICAgaWYgKG1f
bGVnYWN5RGF0YSkKKyAgICAgICAgbV9sZWdhY3lEYXRhLT5jbGVhckFsbEV4Y2VwdEZpbGVzKCk7
CisgICAgZWxzZQorICAgICAgICBtX3dyaXRhYmxlRGF0YS0+Y2xlYXJBbGxFeGNlcHRGaWxlcygp
OwogfQogCiBib29sIENocm9taXVtRGF0YU9iamVjdDo6aGFzRGF0YSgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuICFtX3VybC5pc0VtcHR5KCkKLSAgICAgICAgfHwgIW1fdXJpTGlzdC5pc0VtcHR5KCkK
LSAgICAgICAgfHwgIW1fZG93bmxvYWRNZXRhZGF0YS5pc0VtcHR5KCkKLSAgICAgICAgfHwgIW1f
ZmlsZUV4dGVuc2lvbi5pc0VtcHR5KCkKLSAgICAgICAgfHwgIW1fZmlsZW5hbWVzLmlzRW1wdHko
KQotICAgICAgICB8fCAhbV9wbGFpblRleHQuaXNFbXB0eSgpCi0gICAgICAgIHx8ICFtX3RleHRI
dG1sLmlzRW1wdHkoKQotICAgICAgICB8fCBtX2ZpbGVDb250ZW50OworICAgIGlmIChtX2xlZ2Fj
eURhdGEpCisgICAgICAgIHJldHVybiBtX2xlZ2FjeURhdGEtPmhhc0RhdGEoKTsKKyAgICByZXR1
cm4gbV9yZWFkYWJsZURhdGEtPmhhc0RhdGEoKTsKIH0KIAogSGFzaFNldDxTdHJpbmc+IENocm9t
aXVtRGF0YU9iamVjdDo6dHlwZXMoKSBjb25zdAogewotICAgIC8vIFRoaXMgaXMgY3VycmVudGx5
IGJyb2tlbiBmb3IgcGFzdGVib2FyZCBldmVudHMsIGFuZCBhbHdheXMgaGFzIGJlZW4uCi0gICAg
SGFzaFNldDxTdHJpbmc+IHJlc3VsdHM7CisgICAgaWYgKG1fbGVnYWN5RGF0YSkKKyAgICAgICAg
cmV0dXJuIG1fbGVnYWN5RGF0YS0+dHlwZXMoKTsKKyAgICByZXR1cm4gbV9yZWFkYWJsZURhdGEt
PnR5cGVzKCk7Cit9CisKK1N0cmluZyBDaHJvbWl1bURhdGFPYmplY3Q6OmdldERhdGEoY29uc3Qg
U3RyaW5nJiB0eXBlLCBib29sJiBzdWNjZXNzKQoreworICAgIGlmIChtX2xlZ2FjeURhdGEpCisg
ICAgICAgIHJldHVybiBtX2xlZ2FjeURhdGEtPmdldERhdGEodHlwZSwgc3VjY2Vzcyk7CisgICAg
cmV0dXJuIG1fcmVhZGFibGVEYXRhLT5nZXREYXRhKHR5cGUsIHN1Y2Nlc3MpOworfQorCitib29s
IENocm9taXVtRGF0YU9iamVjdDo6c2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0
cmluZyYgZGF0YSkKK3sKKyAgICBpZiAobV9sZWdhY3lEYXRhKQorICAgICAgICByZXR1cm4gbV9s
ZWdhY3lEYXRhLT5zZXREYXRhKHR5cGUsIGRhdGEpOworICAgIHJldHVybiBtX3dyaXRhYmxlRGF0
YS0+c2V0RGF0YSh0eXBlLCBkYXRhKTsKK30KKworU3RyaW5nIENocm9taXVtRGF0YU9iamVjdDo6
dXJsVGl0bGUoKSBjb25zdAoreworICAgIGlmIChtX2xlZ2FjeURhdGEpCisgICAgICAgIHJldHVy
biBtX2xlZ2FjeURhdGEtPnVybFRpdGxlKCk7CisgICAgcmV0dXJuIG1fcmVhZGFibGVEYXRhLT51
cmxUaXRsZSgpOworfQogCi0gICAgaWYgKCFtX3BsYWluVGV4dC5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgcmVzdWx0cy5hZGQobWltZVR5cGVUZXh0KTsKLSAgICAgICAgcmVzdWx0cy5hZGQobWltZVR5
cGVUZXh0UGxhaW4pOwotICAgIH0KK3ZvaWQgQ2hyb21pdW1EYXRhT2JqZWN0OjpzZXRVcmxUaXRs
ZShjb25zdCBTdHJpbmcmIHVybFRpdGxlKQoreworICAgIGlmIChtX2xlZ2FjeURhdGEpCisgICAg
ICAgIG1fbGVnYWN5RGF0YS0+c2V0VXJsVGl0bGUodXJsVGl0bGUpOworICAgIGVsc2UKKyAgICAg
ICAgbV93cml0YWJsZURhdGEtPnNldFVybFRpdGxlKHVybFRpdGxlKTsKK30KIAotICAgIGlmICht
X3VybC5pc1ZhbGlkKCkpCi0gICAgICAgIHJlc3VsdHMuYWRkKG1pbWVUeXBlVVJMKTsKK0tVUkwg
Q2hyb21pdW1EYXRhT2JqZWN0OjpodG1sQmFzZVVybCgpIGNvbnN0Cit7CisgICAgaWYgKG1fbGVn
YWN5RGF0YSkKKyAgICAgICAgcmV0dXJuIG1fbGVnYWN5RGF0YS0+aHRtbEJhc2VVcmwoKTsKKyAg
ICByZXR1cm4gbV9yZWFkYWJsZURhdGEtPmh0bWxCYXNlVXJsKCk7Cit9CiAKLSAgICBpZiAoIW1f
dXJpTGlzdC5pc0VtcHR5KCkpCi0gICAgICAgIHJlc3VsdHMuYWRkKG1pbWVUeXBlVGV4dFVSSUxp
c3QpOwordm9pZCBDaHJvbWl1bURhdGFPYmplY3Q6OnNldEh0bWxCYXNlVXJsKGNvbnN0IEtVUkwm
IHVybCkKK3sKKyAgICBpZiAobV9sZWdhY3lEYXRhKQorICAgICAgICBtX2xlZ2FjeURhdGEtPnNl
dEh0bWxCYXNlVXJsKHVybCk7CisgICAgZWxzZQorICAgICAgICBtX3dyaXRhYmxlRGF0YS0+c2V0
SHRtbEJhc2VVcmwodXJsKTsKK30KIAotICAgIGlmICghbV90ZXh0SHRtbC5pc0VtcHR5KCkpCi0g
ICAgICAgIHJlc3VsdHMuYWRkKG1pbWVUeXBlVGV4dEhUTUwpOworYm9vbCBDaHJvbWl1bURhdGFP
YmplY3Q6OmNvbnRhaW5zRmlsZW5hbWVzKCkgY29uc3QKK3sKKyAgICBpZiAobV9sZWdhY3lEYXRh
KQorICAgICAgICByZXR1cm4gbV9sZWdhY3lEYXRhLT5jb250YWluc0ZpbGVuYW1lcygpOworICAg
IHJldHVybiBtX3JlYWRhYmxlRGF0YS0+Y29udGFpbnNGaWxlbmFtZXMoKTsKK30KIAotICAgIGlm
ICghbV9maWxlbmFtZXMuaXNFbXB0eSgpKQotICAgICAgICByZXN1bHRzLmFkZCgiRmlsZXMiKTsK
K1ZlY3RvcjxTdHJpbmc+IENocm9taXVtRGF0YU9iamVjdDo6ZmlsZW5hbWVzKCkgY29uc3QKK3sK
KyAgICBpZiAobV9sZWdhY3lEYXRhKQorICAgICAgICByZXR1cm4gbV9sZWdhY3lEYXRhLT5maWxl
bmFtZXMoKTsKKyAgICByZXR1cm4gbV9yZWFkYWJsZURhdGEtPmZpbGVuYW1lcygpOworfQogCi0g
ICAgcmV0dXJuIHJlc3VsdHM7Cit2b2lkIENocm9taXVtRGF0YU9iamVjdDo6c2V0RmlsZW5hbWVz
KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMpCit7CisgICAgaWYgKG1fbGVnYWN5RGF0
YSkKKyAgICAgICAgbV9sZWdhY3lEYXRhLT5zZXRGaWxlbmFtZXMoZmlsZW5hbWVzKTsKKyAgICBl
bHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi1TdHJpbmcgQ2hyb21pdW1E
YXRhT2JqZWN0OjpnZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgYm9vbCYgc3VjY2VzcykKK1N0
cmluZyBDaHJvbWl1bURhdGFPYmplY3Q6OmZpbGVFeHRlbnNpb24oKSBjb25zdAogewotICAgIGlm
ICh0eXBlID09IG1pbWVUeXBlVGV4dFBsYWluKSB7Ci0gICAgICAgIGlmIChtX2NsaXBib2FyZFR5
cGUgPT0gQ2xpcGJvYXJkOjpDb3B5QW5kUGFzdGUpIHsKLSAgICAgICAgICAgIFBhc3RlYm9hcmRQ
cml2YXRlOjpDbGlwYm9hcmRCdWZmZXIgYnVmZmVyID0KLSAgICAgICAgICAgICAgICBQYXN0ZWJv
YXJkOjpnZW5lcmFsUGFzdGVib2FyZCgpLT5pc1NlbGVjdGlvbk1vZGUoKSA/Ci0gICAgICAgICAg
ICAgICAgUGFzdGVib2FyZFByaXZhdGU6OlNlbGVjdGlvbkJ1ZmZlciA6Ci0gICAgICAgICAgICAg
ICAgUGFzdGVib2FyZFByaXZhdGU6OlN0YW5kYXJkQnVmZmVyOwotICAgICAgICAgICAgU3RyaW5n
IHRleHQgPSBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkUmVhZFBsYWluVGV4dChidWZmZXIpOwot
ICAgICAgICAgICAgc3VjY2VzcyA9ICF0ZXh0LmlzRW1wdHkoKTsKLSAgICAgICAgICAgIHJldHVy
biB0ZXh0OwotICAgICAgICB9Ci0gICAgICAgIHN1Y2Nlc3MgPSAhbV9wbGFpblRleHQuaXNFbXB0
eSgpOwotICAgICAgICByZXR1cm4gbV9wbGFpblRleHQ7Ci0gICAgfQotCi0gICAgaWYgKHR5cGUg
PT0gbWltZVR5cGVVUkwpIHsKLSAgICAgICAgc3VjY2VzcyA9ICFtX3VybC5pc0VtcHR5KCk7Ci0g
ICAgICAgIHJldHVybiBtX3VybC5zdHJpbmcoKTsKLSAgICB9Ci0KLSAgICBpZiAodHlwZSA9PSBt
aW1lVHlwZVRleHRVUklMaXN0KSB7Ci0gICAgICAgIHN1Y2Nlc3MgPSAhbV91cmlMaXN0LmlzRW1w
dHkoKTsKLSAgICAgICAgcmV0dXJuIG1fdXJpTGlzdDsKLSAgICB9Ci0KLSAgICBpZiAodHlwZSA9
PSBtaW1lVHlwZVRleHRIVE1MKSB7Ci0gICAgICAgIGlmIChtX2NsaXBib2FyZFR5cGUgPT0gQ2xp
cGJvYXJkOjpDb3B5QW5kUGFzdGUpIHsKLSAgICAgICAgICAgIFBhc3RlYm9hcmRQcml2YXRlOjpD
bGlwYm9hcmRCdWZmZXIgYnVmZmVyID0KLSAgICAgICAgICAgICAgICBQYXN0ZWJvYXJkOjpnZW5l
cmFsUGFzdGVib2FyZCgpLT5pc1NlbGVjdGlvbk1vZGUoKSA/Ci0gICAgICAgICAgICAgICAgUGFz
dGVib2FyZFByaXZhdGU6OlNlbGVjdGlvbkJ1ZmZlciA6Ci0gICAgICAgICAgICAgICAgUGFzdGVi
b2FyZFByaXZhdGU6OlN0YW5kYXJkQnVmZmVyOwotICAgICAgICAgICAgU3RyaW5nIGh0bWxUZXh0
OwotICAgICAgICAgICAgS1VSTCBzb3VyY2VVUkw7Ci0gICAgICAgICAgICBDaHJvbWl1bUJyaWRn
ZTo6Y2xpcGJvYXJkUmVhZEhUTUwoYnVmZmVyLCAmaHRtbFRleHQsICZzb3VyY2VVUkwpOwotICAg
ICAgICAgICAgc3VjY2VzcyA9ICFodG1sVGV4dC5pc0VtcHR5KCk7Ci0gICAgICAgICAgICByZXR1
cm4gaHRtbFRleHQ7Ci0gICAgICAgIH0KLSAgICAgICAgc3VjY2VzcyA9ICFtX3RleHRIdG1sLmlz
RW1wdHkoKTsKLSAgICAgICAgcmV0dXJuIG1fdGV4dEh0bWw7Ci0gICAgfQotCi0gICAgaWYgKHR5
cGUgPT0gbWltZVR5cGVEb3dubG9hZFVSTCkgewotICAgICAgICBzdWNjZXNzID0gIW1fZG93bmxv
YWRNZXRhZGF0YS5pc0VtcHR5KCk7Ci0gICAgICAgIHJldHVybiBtX2Rvd25sb2FkTWV0YWRhdGE7
Ci0gICAgfQotCi0gICAgc3VjY2VzcyA9IGZhbHNlOwotICAgIHJldHVybiBTdHJpbmcoKTsKKyAg
ICBpZiAobV9sZWdhY3lEYXRhKQorICAgICAgICByZXR1cm4gbV9sZWdhY3lEYXRhLT5maWxlRXh0
ZW5zaW9uKCk7CisgICAgcmV0dXJuIG1fd3JpdGFibGVEYXRhLT5maWxlRXh0ZW5zaW9uKCk7CiB9
CiAKLWJvb2wgQ2hyb21pdW1EYXRhT2JqZWN0OjpzZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwg
Y29uc3QgU3RyaW5nJiBkYXRhKQordm9pZCBDaHJvbWl1bURhdGFPYmplY3Q6OnNldEZpbGVFeHRl
bnNpb24oY29uc3QgU3RyaW5nJiBmaWxlRXh0ZW5zaW9uKQogewotICAgIGlmICh0eXBlID09IG1p
bWVUeXBlVGV4dFBsYWluKSB7Ci0gICAgICAgIG1fcGxhaW5UZXh0ID0gZGF0YTsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKHR5cGUgPT0gbWltZVR5cGVVUkwgfHwgdHlw
ZSA9PSBtaW1lVHlwZVRleHRVUklMaXN0KSB7Ci0gICAgICAgIG1fdXJsID0gS1VSTCgpOwotICAg
ICAgICBWZWN0b3I8U3RyaW5nPiB1cmlMaXN0OwotICAgICAgICAvLyBMaW5lIHNlcGFyYXRvciBp
cyBcclxuIHBlciBSRkMgMjQ4MyAtIGhvd2V2ZXIsIGZvciBjb21wYXRpYmlsaXR5Ci0gICAgICAg
IC8vIHJlYXNvbnMgd2UgYWxzbyBhbGxvdyBqdXN0IFxuIGhlcmUuCi0gICAgICAgIGRhdGEuc3Bs
aXQoJ1xuJywgdXJpTGlzdCk7Ci0gICAgICAgIC8vIFByb2Nlc3MgdGhlIGlucHV0IGFuZCBjb3B5
IHRoZSBmaXJzdCB2YWxpZCBVUkwgaW50byB0aGUgdXJsIG1lbWJlci4KLSAgICAgICAgLy8gSW4g
Y2FzZSBubyBVUkxzIGNhbiBiZSBmb3VuZCwgc3Vic2VxdWVudCBjYWxscyB0byBnZXREYXRhKCJV
UkwiKQotICAgICAgICAvLyB3aWxsIGdldCBhbiBlbXB0eSBzdHJpbmcuIFRoaXMgaXMgaW4gbGlu
ZSB3aXRoIHRoZSBIVE1MNSBzcGVjIChzZWUKLSAgICAgICAgLy8gIlRoZSBEcmFnRXZlbnQgYW5k
IERhdGFUcmFuc2ZlciBpbnRlcmZhY2VzIikuCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgdXJpTGlzdC5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgU3RyaW5nJiBsaW5lID0gdXJp
TGlzdFtpXTsKLSAgICAgICAgICAgIGxpbmUgPSBsaW5lLnN0cmlwV2hpdGVTcGFjZSgpOwotICAg
ICAgICAgICAgaWYgKGxpbmUuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobGluZVswXSA9PSAnIycpCi0gICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBLVVJMIHVybCA9IEtVUkwoUGFyc2VkVVJM
U3RyaW5nLCBsaW5lKTsKLSAgICAgICAgICAgIGlmICh1cmwuaXNWYWxpZCgpKSB7Ci0gICAgICAg
ICAgICAgICAgbV91cmwgPSB1cmw7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICAgICAgbV91cmlMaXN0ID0gZGF0YTsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKHR5cGUgPT0gbWltZVR5cGVUZXh0SFRNTCkgewotICAg
ICAgICBtX3RleHRIdG1sID0gZGF0YTsKLSAgICAgICAgbV9odG1sQmFzZVVybCA9IEtVUkwoKTsK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKHR5cGUgPT0gbWltZVR5cGVE
b3dubG9hZFVSTCkgewotICAgICAgICBtX2Rvd25sb2FkTWV0YWRhdGEgPSBkYXRhOwotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLUNocm9taXVt
RGF0YU9iamVjdDo6Q2hyb21pdW1EYXRhT2JqZWN0KENsaXBib2FyZDo6Q2xpcGJvYXJkVHlwZSBj
bGlwYm9hcmRUeXBlKQotICAgIDogbV9jbGlwYm9hcmRUeXBlKGNsaXBib2FyZFR5cGUpCi17Ci19
Ci0KLUNocm9taXVtRGF0YU9iamVjdDo6Q2hyb21pdW1EYXRhT2JqZWN0KGNvbnN0IENocm9taXVt
RGF0YU9iamVjdCYgb3RoZXIpCi0gICAgOiBSZWZDb3VudGVkPENocm9taXVtRGF0YU9iamVjdD4o
KQotICAgICwgbV9jbGlwYm9hcmRUeXBlKG90aGVyLm1fY2xpcGJvYXJkVHlwZSkKLSAgICAsIG1f
dXJsVGl0bGUob3RoZXIubV91cmxUaXRsZSkKLSAgICAsIG1fZG93bmxvYWRNZXRhZGF0YShvdGhl
ci5tX2Rvd25sb2FkTWV0YWRhdGEpCi0gICAgLCBtX2ZpbGVFeHRlbnNpb24ob3RoZXIubV9maWxl
RXh0ZW5zaW9uKQotICAgICwgbV9maWxlbmFtZXMob3RoZXIubV9maWxlbmFtZXMpCi0gICAgLCBt
X3BsYWluVGV4dChvdGhlci5tX3BsYWluVGV4dCkKLSAgICAsIG1fdGV4dEh0bWwob3RoZXIubV90
ZXh0SHRtbCkKLSAgICAsIG1faHRtbEJhc2VVcmwob3RoZXIubV9odG1sQmFzZVVybCkKLSAgICAs
IG1fZmlsZUNvbnRlbnRGaWxlbmFtZShvdGhlci5tX2ZpbGVDb250ZW50RmlsZW5hbWUpCi0gICAg
LCBtX3VybChvdGhlci5tX3VybCkKLSAgICAsIG1fdXJpTGlzdChvdGhlci5tX3VyaUxpc3QpCi17
Ci0gICAgaWYgKG90aGVyLm1fZmlsZUNvbnRlbnQuZ2V0KCkpCi0gICAgICAgIG1fZmlsZUNvbnRl
bnQgPSBvdGhlci5tX2ZpbGVDb250ZW50LT5jb3B5KCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKyAgICBpZiAobV9sZWdhY3lEYXRhKQorICAgICAgICBtX2xlZ2FjeURhdGEtPnNldEZp
bGVFeHRlbnNpb24oZmlsZUV4dGVuc2lvbik7CisgICAgZWxzZQorICAgICAgICBtX3dyaXRhYmxl
RGF0YS0+c2V0RmlsZUV4dGVuc2lvbihmaWxlRXh0ZW5zaW9uKTsKK30KKworU3RyaW5nIENocm9t
aXVtRGF0YU9iamVjdDo6ZmlsZUNvbnRlbnRGaWxlbmFtZSgpIGNvbnN0Cit7CisgICAgaWYgKG1f
bGVnYWN5RGF0YSkKKyAgICAgICAgcmV0dXJuIG1fbGVnYWN5RGF0YS0+ZmlsZUNvbnRlbnRGaWxl
bmFtZSgpOworICAgIHJldHVybiBtX3dyaXRhYmxlRGF0YS0+ZmlsZUNvbnRlbnRGaWxlbmFtZSgp
OworfQorCit2b2lkIENocm9taXVtRGF0YU9iamVjdDo6c2V0RmlsZUNvbnRlbnRGaWxlbmFtZShj
b25zdCBTdHJpbmcmIGZpbGVDb250ZW50RmlsZW5hbWUpCit7CisgICAgaWYgKG1fbGVnYWN5RGF0
YSkKKyAgICAgICAgICBtX2xlZ2FjeURhdGEtPnNldEZpbGVDb250ZW50RmlsZW5hbWUoZmlsZUNv
bnRlbnRGaWxlbmFtZSk7CisgICAgZWxzZQorICAgICAgICAgIG1fd3JpdGFibGVEYXRhLT5zZXRG
aWxlQ29udGVudEZpbGVuYW1lKGZpbGVDb250ZW50RmlsZW5hbWUpOworfQorCitQYXNzUmVmUHRy
PFNoYXJlZEJ1ZmZlcj4gQ2hyb21pdW1EYXRhT2JqZWN0OjpmaWxlQ29udGVudCgpIGNvbnN0Cit7
CisgICAgaWYgKG1fbGVnYWN5RGF0YSkKKyAgICAgICAgcmV0dXJuIG1fbGVnYWN5RGF0YS0+Zmls
ZUNvbnRlbnQoKTsKKyAgICByZXR1cm4gbV93cml0YWJsZURhdGEtPmZpbGVDb250ZW50KCk7Cit9
CisKK3ZvaWQgQ2hyb21pdW1EYXRhT2JqZWN0OjpzZXRGaWxlQ29udGVudChQYXNzUmVmUHRyPFNo
YXJlZEJ1ZmZlcj4gZmlsZUNvbnRlbnQpCit7CisgICAgaWYgKG1fbGVnYWN5RGF0YSkKKyAgICAg
ICAgbV9sZWdhY3lEYXRhLT5zZXRGaWxlQ29udGVudChmaWxlQ29udGVudCk7CisgICAgZWxzZQor
ICAgICAgICBtX3dyaXRhYmxlRGF0YS0+c2V0RmlsZUNvbnRlbnQoZmlsZUNvbnRlbnQpOworfQor
Cit9CisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRh
T2JqZWN0LmggYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5o
CmluZGV4IGNkNThlY2IuLjRhYWM1YzkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9DaHJvbWl1bURhdGFPYmplY3QuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KGMpIDIwMDgsIDIwMDksIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKGMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtMzEsODkgKzMxLDU4IEBACiAjaWZuZGVm
IENocm9taXVtRGF0YU9iamVjdF9oCiAjZGVmaW5lIENocm9taXVtRGF0YU9iamVjdF9oCiAKLSNp
bmNsdWRlICJDbGlwYm9hcmQuaCIKLSNpbmNsdWRlICJLVVJMLmgiCi0jaW5jbHVkZSAiUGxhdGZv
cm1TdHJpbmcuaCIKLSNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKLSNpbmNsdWRlIDx3dGYvSGFz
aFNldC5oPgorI2luY2x1ZGUgIkNocm9taXVtRGF0YU9iamVjdExlZ2FjeS5oIgorI2luY2x1ZGUg
IlJlYWRhYmxlRGF0YU9iamVjdC5oIgorI2luY2x1ZGUgIldyaXRhYmxlRGF0YU9iamVjdC5oIgog
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICAv
LyBBIGRhdGEgb2JqZWN0IGZvciBob2xkaW5nIGRhdGEgdGhhdCB3b3VsZCBiZSBpbiBhIGNsaXBi
b2FyZCBvciBtb3ZlZAotICAgIC8vIGR1cmluZyBhIGRyYWctbi1kcm9wIG9wZXJhdGlvbi4gIFRo
aXMgaXMgdGhlIGRhdGEgdGhhdCBXZWJDb3JlIGlzIGF3YXJlCi0gICAgLy8gb2YgYW5kIGlzIG5v
dCBzcGVjaWZpYyB0byBhIHBsYXRmb3JtLgotICAgIGNsYXNzIENocm9taXVtRGF0YU9iamVjdCA6
IHB1YmxpYyBSZWZDb3VudGVkPENocm9taXVtRGF0YU9iamVjdD4gewotICAgIHB1YmxpYzoKLSAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2hyb21pdW1EYXRhT2JqZWN0PiBjcmVhdGUoQ2xpcGJv
YXJkOjpDbGlwYm9hcmRUeXBlIGNsaXBib2FyZFR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgQ2hyb21pdW1EYXRhT2JqZWN0KGNsaXBib2FyZFR5cGUpKTsK
LSAgICAgICAgfQotCi0gICAgICAgIFBhc3NSZWZQdHI8Q2hyb21pdW1EYXRhT2JqZWN0PiBjb3B5
KCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDaHJv
bWl1bURhdGFPYmplY3QoKnRoaXMpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgY2xlYXJE
YXRhKGNvbnN0IFN0cmluZyYgdHlwZSk7Ci0gICAgICAgIHZvaWQgY2xlYXJBbGwoKTsKLSAgICAg
ICAgdm9pZCBjbGVhckFsbEV4Y2VwdEZpbGVzKCk7Ci0KLSAgICAgICAgYm9vbCBoYXNEYXRhKCkg
Y29uc3Q7Ci0KLSAgICAgICAgSGFzaFNldDxTdHJpbmc+IHR5cGVzKCkgY29uc3Q7Ci0gICAgICAg
IFN0cmluZyBnZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgYm9vbCYgc3VjY2Vzcyk7Ci0gICAg
ICAgIGJvb2wgc2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSk7
Ci0KLSAgICAgICAgLy8gU3BlY2lhbCBoYW5kbGVycyBmb3IgVVJML0hUTUwgbWV0YWRhdGEuCi0g
ICAgICAgIFN0cmluZyB1cmxUaXRsZSgpIGNvbnN0IHsgcmV0dXJuIG1fdXJsVGl0bGU7IH0KLSAg
ICAgICAgdm9pZCBzZXRVcmxUaXRsZShjb25zdCBTdHJpbmcmIHVybFRpdGxlKSB7IG1fdXJsVGl0
bGUgPSB1cmxUaXRsZTsgfQotICAgICAgICBLVVJMIGh0bWxCYXNlVXJsKCkgY29uc3QgeyByZXR1
cm4gbV9odG1sQmFzZVVybDsgfQotICAgICAgICB2b2lkIHNldEh0bWxCYXNlVXJsKGNvbnN0IEtV
UkwmIHVybCkgeyBtX2h0bWxCYXNlVXJsID0gdXJsOyB9Ci0KLSAgICAgICAgLy8gVXNlZCB0byBo
YW5kbGUgZmlsZXMgYmVpbmcgZHJhZ2dlZCBpbi4KLSAgICAgICAgYm9vbCBjb250YWluc0ZpbGVu
YW1lcygpIGNvbnN0IHsgcmV0dXJuICFtX2ZpbGVuYW1lcy5pc0VtcHR5KCk7IH0KLSAgICAgICAg
VmVjdG9yPFN0cmluZz4gZmlsZW5hbWVzKCkgY29uc3QgeyByZXR1cm4gbV9maWxlbmFtZXM7IH0K
LSAgICAgICAgdm9pZCBzZXRGaWxlbmFtZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1l
cykgeyBtX2ZpbGVuYW1lcyA9IGZpbGVuYW1lczsgfQotCi0gICAgICAgIC8vIFVzZWQgdG8gaGFu
ZGxlIGZpbGVzIChpbWFnZXMpIGJlaW5nIGRyYWdnZWQgb3V0LgotICAgICAgICBTdHJpbmcgZmls
ZUV4dGVuc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fZmlsZUV4dGVuc2lvbjsgfQotICAgICAgICB2
b2lkIHNldEZpbGVFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBmaWxlRXh0ZW5zaW9uKSB7IG1fZmls
ZUV4dGVuc2lvbiA9IGZpbGVFeHRlbnNpb247IH0KLSAgICAgICAgU3RyaW5nIGZpbGVDb250ZW50
RmlsZW5hbWUoKSBjb25zdCB7IHJldHVybiBtX2ZpbGVDb250ZW50RmlsZW5hbWU7IH0KLSAgICAg
ICAgdm9pZCBzZXRGaWxlQ29udGVudEZpbGVuYW1lKGNvbnN0IFN0cmluZyYgZmlsZUNvbnRlbnRG
aWxlbmFtZSkgeyBtX2ZpbGVDb250ZW50RmlsZW5hbWUgPSBmaWxlQ29udGVudEZpbGVuYW1lOyB9
Ci0gICAgICAgIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBmaWxlQ29udGVudCgpIGNvbnN0IHsg
cmV0dXJuIG1fZmlsZUNvbnRlbnQ7IH0KLSAgICAgICAgdm9pZCBzZXRGaWxlQ29udGVudChQYXNz
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZmlsZUNvbnRlbnQpIHsgbV9maWxlQ29udGVudCA9IGZpbGVD
b250ZW50OyB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBDaHJvbWl1bURhdGFPYmplY3QoQ2xp
cGJvYXJkOjpDbGlwYm9hcmRUeXBlKTsKLSAgICAgICAgQ2hyb21pdW1EYXRhT2JqZWN0KGNvbnN0
IENocm9taXVtRGF0YU9iamVjdCYpOwotCi0gICAgICAgIENsaXBib2FyZDo6Q2xpcGJvYXJkVHlw
ZSBtX2NsaXBib2FyZFR5cGU7Ci0KLSAgICAgICAgU3RyaW5nIG1fdXJsVGl0bGU7Ci0KLSAgICAg
ICAgU3RyaW5nIG1fZG93bmxvYWRNZXRhZGF0YTsKLQotICAgICAgICBTdHJpbmcgbV9maWxlRXh0
ZW5zaW9uOwotICAgICAgICBWZWN0b3I8U3RyaW5nPiBtX2ZpbGVuYW1lczsKLQotICAgICAgICBT
dHJpbmcgbV9wbGFpblRleHQ7Ci0KLSAgICAgICAgU3RyaW5nIG1fdGV4dEh0bWw7Ci0gICAgICAg
IEtVUkwgbV9odG1sQmFzZVVybDsKLQotICAgICAgICBTdHJpbmcgbV9maWxlQ29udGVudEZpbGVu
YW1lOwotICAgICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBtX2ZpbGVDb250ZW50OwotCi0gICAg
ICAgIC8vIFRoZXNlIHR3byBhcmUgbGlua2VkLiBTZXR0aW5nIG1fdXJsIHdpbGwgc2V0IG1fdXJp
TGlzdCB0byB0aGUgc2FtZQotICAgICAgICAvLyBzdHJpbmcgdmFsdWU7IHNldHRpbmcgbV91cmlM
aXN0IHdpbGwgY2F1c2UgaXRzIGNvbnRlbnRzIHRvIGJlIHBhcnNlZAotICAgICAgICAvLyBhY2Nv
cmRpbmcgdG8gUkZDIDI0ODMgYW5kIHRoZSBmaXJzdCBVUkwgZm91bmQgd2lsbCBiZSBzZXQgaW4g
bV91cmwuCi0gICAgICAgIEtVUkwgbV91cmw7Ci0gICAgICAgIFN0cmluZyBtX3VyaUxpc3Q7Ci0g
ICAgfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorY2xhc3MgQ2hyb21pdW1EYXRhT2JqZWN0
IDogcHVibGljIFJlZkNvdW50ZWQ8Q2hyb21pdW1EYXRhT2JqZWN0PiB7CitwdWJsaWM6CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8Q2hyb21pdW1EYXRhT2JqZWN0PiBjcmVhdGUoUGFzc1JlZlB0cjxD
aHJvbWl1bURhdGFPYmplY3RMZWdhY3k+IGRhdGEpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPENo
cm9taXVtRGF0YU9iamVjdD4gY3JlYXRlUmVhZGFibGUoQ2xpcGJvYXJkOjpDbGlwYm9hcmRUeXBl
KTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDaHJvbWl1bURhdGFPYmplY3Q+IGNyZWF0ZVdyaXRh
YmxlKENsaXBib2FyZDo6Q2xpcGJvYXJkVHlwZSk7CisKKyAgICB2b2lkIGNsZWFyRGF0YShjb25z
dCBTdHJpbmcmIHR5cGUpOworICAgIHZvaWQgY2xlYXJBbGwoKTsKKyAgICB2b2lkIGNsZWFyQWxs
RXhjZXB0RmlsZXMoKTsKKworICAgIGJvb2wgaGFzRGF0YSgpIGNvbnN0OworCisgICAgSGFzaFNl
dDxTdHJpbmc+IHR5cGVzKCkgY29uc3Q7CisgICAgU3RyaW5nIGdldERhdGEoY29uc3QgU3RyaW5n
JiB0eXBlLCBib29sJiBzdWNjZXNzKTsKKyAgICBib29sIHNldERhdGEoY29uc3QgU3RyaW5nJiB0
eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpOworCisgICAgLy8gU3BlY2lhbCBoYW5kbGVycyBmb3Ig
VVJML0hUTUwgbWV0YWRhdGEuCisgICAgU3RyaW5nIHVybFRpdGxlKCkgY29uc3Q7CisgICAgdm9p
ZCBzZXRVcmxUaXRsZShjb25zdCBTdHJpbmcmIHVybFRpdGxlKTsKKyAgICBLVVJMIGh0bWxCYXNl
VXJsKCkgY29uc3Q7CisgICAgdm9pZCBzZXRIdG1sQmFzZVVybChjb25zdCBLVVJMJiB1cmwpOwor
CisgICAgLy8gVXNlZCB0byBoYW5kbGUgZmlsZXMgYmVpbmcgZHJhZ2dlZCBpbi4KKyAgICBib29s
IGNvbnRhaW5zRmlsZW5hbWVzKCkgY29uc3Q7CisgICAgVmVjdG9yPFN0cmluZz4gZmlsZW5hbWVz
KCkgY29uc3Q7CisgICAgdm9pZCBzZXRGaWxlbmFtZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGZp
bGVuYW1lcyk7CisKKyAgICAvLyBVc2VkIHRvIGhhbmRsZSBmaWxlcyAoaW1hZ2VzKSBiZWluZyBk
cmFnZ2VkIG91dC4KKyAgICBTdHJpbmcgZmlsZUV4dGVuc2lvbigpIGNvbnN0OworICAgIHZvaWQg
c2V0RmlsZUV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGZpbGVFeHRlbnNpb24pOworICAgIFN0cmlu
ZyBmaWxlQ29udGVudEZpbGVuYW1lKCkgY29uc3Q7CisgICAgdm9pZCBzZXRGaWxlQ29udGVudEZp
bGVuYW1lKGNvbnN0IFN0cmluZyYgZmlsZUNvbnRlbnRGaWxlbmFtZSk7CisgICAgUGFzc1JlZlB0
cjxTaGFyZWRCdWZmZXI+IGZpbGVDb250ZW50KCkgY29uc3Q7CisgICAgdm9pZCBzZXRGaWxlQ29u
dGVudChQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZmlsZUNvbnRlbnQpOworCitwcml2YXRlOgor
ICAgIENocm9taXVtRGF0YU9iamVjdChQYXNzUmVmUHRyPENocm9taXVtRGF0YU9iamVjdExlZ2Fj
eT4pOworICAgIENocm9taXVtRGF0YU9iamVjdChQYXNzUmVmUHRyPFJlYWRhYmxlRGF0YU9iamVj
dD4pOworICAgIENocm9taXVtRGF0YU9iamVjdChQYXNzUmVmUHRyPFdyaXRhYmxlRGF0YU9iamVj
dD4pOworCisgICAgUmVmUHRyPENocm9taXVtRGF0YU9iamVjdExlZ2FjeT4gbV9sZWdhY3lEYXRh
OworICAgIFJlZlB0cjxSZWFkYWJsZURhdGFPYmplY3Q+IG1fcmVhZGFibGVEYXRhOworICAgIFJl
ZlB0cjxXcml0YWJsZURhdGFPYmplY3Q+IG1fd3JpdGFibGVEYXRhOworfTsKKworfQogCiAjZW5k
aWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2Jq
ZWN0TGVnYWN5LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2Jq
ZWN0TGVnYWN5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjk1MmMw
Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURh
dGFPYmplY3RMZWdhY3kuY3BwCkBAIC0wLDAgKzEsMjQ5IEBACisvKgorICogQ29weXJpZ2h0IChj
KSAyMDA4LCAyMDA5LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJDaHJvbWl1bURhdGFPYmplY3RMZWdhY3kuaCIKKworI2luY2x1
ZGUgIkNocm9taXVtQnJpZGdlLmgiCisjaW5jbHVkZSAiQ2xpcGJvYXJkTWltZVR5cGVzLmgiCisj
aW5jbHVkZSAiUGFzdGVib2FyZC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFBlciBS
RkMgMjQ4MywgdGhlIGxpbmUgc2VwYXJhdG9yIGZvciAidGV4dC8uLi4iIE1JTUUgdHlwZXMgaXMg
Q1ItTEYuCitzdGF0aWMgY2hhciBjb25zdCogY29uc3QgdGV4dE1JTUVUeXBlTGluZVNlcGFyYXRv
ciA9ICJcclxuIjsKKwordm9pZCBDaHJvbWl1bURhdGFPYmplY3RMZWdhY3k6OmNsZWFyRGF0YShj
b25zdCBTdHJpbmcmIHR5cGUpCit7CisgICAgaWYgKHR5cGUgPT0gbWltZVR5cGVUZXh0UGxhaW4p
IHsKKyAgICAgICAgbV9wbGFpblRleHQgPSAiIjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmICh0eXBlID09IG1pbWVUeXBlVVJMIHx8IHR5cGUgPT0gbWltZVR5cGVUZXh0VVJJTGlz
dCkgeworICAgICAgICBtX3VyaUxpc3QgPSAiIjsKKyAgICAgICAgbV91cmwgPSBLVVJMKCk7Cisg
ICAgICAgIG1fdXJsVGl0bGUgPSAiIjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
ICh0eXBlID09IG1pbWVUeXBlVGV4dEhUTUwpIHsKKyAgICAgICAgbV90ZXh0SHRtbCA9ICIiOwor
ICAgICAgICBtX2h0bWxCYXNlVXJsID0gS1VSTCgpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKHR5cGUgPT0gbWltZVR5cGVEb3dubG9hZFVSTCkgeworICAgICAgICBtX2Rvd25s
b2FkTWV0YWRhdGEgPSAiIjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwordm9pZCBDaHJv
bWl1bURhdGFPYmplY3RMZWdhY3k6OmNsZWFyQWxsKCkKK3sKKyAgICBjbGVhckFsbEV4Y2VwdEZp
bGVzKCk7CisgICAgbV9maWxlbmFtZXMuY2xlYXIoKTsKK30KKwordm9pZCBDaHJvbWl1bURhdGFP
YmplY3RMZWdhY3k6OmNsZWFyQWxsRXhjZXB0RmlsZXMoKQoreworICAgIG1fdXJsVGl0bGUgPSAi
IjsKKyAgICBtX3VybCA9IEtVUkwoKTsKKyAgICBtX3VyaUxpc3QgPSAiIjsKKyAgICBtX2Rvd25s
b2FkTWV0YWRhdGEgPSAiIjsKKyAgICBtX2ZpbGVFeHRlbnNpb24gPSAiIjsKKyAgICBtX3BsYWlu
VGV4dCA9ICIiOworICAgIG1fdGV4dEh0bWwgPSAiIjsKKyAgICBtX2h0bWxCYXNlVXJsID0gS1VS
TCgpOworICAgIG1fZmlsZUNvbnRlbnRGaWxlbmFtZSA9ICIiOworICAgIGlmIChtX2ZpbGVDb250
ZW50KQorICAgICAgICBtX2ZpbGVDb250ZW50LT5jbGVhcigpOworfQorCitib29sIENocm9taXVt
RGF0YU9iamVjdExlZ2FjeTo6aGFzRGF0YSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICFtX3VybC5p
c0VtcHR5KCkKKyAgICAgICAgfHwgIW1fdXJpTGlzdC5pc0VtcHR5KCkKKyAgICAgICAgfHwgIW1f
ZG93bmxvYWRNZXRhZGF0YS5pc0VtcHR5KCkKKyAgICAgICAgfHwgIW1fZmlsZUV4dGVuc2lvbi5p
c0VtcHR5KCkKKyAgICAgICAgfHwgIW1fZmlsZW5hbWVzLmlzRW1wdHkoKQorICAgICAgICB8fCAh
bV9wbGFpblRleHQuaXNFbXB0eSgpCisgICAgICAgIHx8ICFtX3RleHRIdG1sLmlzRW1wdHkoKQor
ICAgICAgICB8fCBtX2ZpbGVDb250ZW50OworfQorCitIYXNoU2V0PFN0cmluZz4gQ2hyb21pdW1E
YXRhT2JqZWN0TGVnYWN5Ojp0eXBlcygpIGNvbnN0Cit7CisgICAgLy8gVGhpcyBpcyBjdXJyZW50
bHkgYnJva2VuIGZvciBwYXN0ZWJvYXJkIGV2ZW50cywgYW5kIGFsd2F5cyBoYXMgYmVlbi4KKyAg
ICBIYXNoU2V0PFN0cmluZz4gcmVzdWx0czsKKworICAgIGlmICghbV9wbGFpblRleHQuaXNFbXB0
eSgpKSB7CisgICAgICAgIHJlc3VsdHMuYWRkKG1pbWVUeXBlVGV4dCk7CisgICAgICAgIHJlc3Vs
dHMuYWRkKG1pbWVUeXBlVGV4dFBsYWluKTsKKyAgICB9CisKKyAgICBpZiAobV91cmwuaXNWYWxp
ZCgpKQorICAgICAgICByZXN1bHRzLmFkZChtaW1lVHlwZVVSTCk7CisKKyAgICBpZiAoIW1fdXJp
TGlzdC5pc0VtcHR5KCkpCisgICAgICAgIHJlc3VsdHMuYWRkKG1pbWVUeXBlVGV4dFVSSUxpc3Qp
OworCisgICAgaWYgKCFtX3RleHRIdG1sLmlzRW1wdHkoKSkKKyAgICAgICAgcmVzdWx0cy5hZGQo
bWltZVR5cGVUZXh0SFRNTCk7CisKKyAgICBpZiAoIW1fZmlsZW5hbWVzLmlzRW1wdHkoKSkKKyAg
ICAgICAgcmVzdWx0cy5hZGQoIkZpbGVzIik7CisKKyAgICByZXR1cm4gcmVzdWx0czsKK30KKwor
U3RyaW5nIENocm9taXVtRGF0YU9iamVjdExlZ2FjeTo6Z2V0RGF0YShjb25zdCBTdHJpbmcmIHR5
cGUsIGJvb2wmIHN1Y2Nlc3MpCit7CisgICAgaWYgKHR5cGUgPT0gbWltZVR5cGVUZXh0UGxhaW4p
IHsKKyAgICAgICAgaWYgKG1fY2xpcGJvYXJkVHlwZSA9PSBDbGlwYm9hcmQ6OkNvcHlBbmRQYXN0
ZSkgeworICAgICAgICAgICAgUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlciBidWZm
ZXIgPQorICAgICAgICAgICAgICAgIFBhc3RlYm9hcmQ6OmdlbmVyYWxQYXN0ZWJvYXJkKCktPmlz
U2VsZWN0aW9uTW9kZSgpID8KKyAgICAgICAgICAgICAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6U2Vs
ZWN0aW9uQnVmZmVyIDoKKyAgICAgICAgICAgICAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6U3RhbmRh
cmRCdWZmZXI7CisgICAgICAgICAgICBTdHJpbmcgdGV4dCA9IENocm9taXVtQnJpZGdlOjpjbGlw
Ym9hcmRSZWFkUGxhaW5UZXh0KGJ1ZmZlcik7CisgICAgICAgICAgICBzdWNjZXNzID0gIXRleHQu
aXNFbXB0eSgpOworICAgICAgICAgICAgcmV0dXJuIHRleHQ7CisgICAgICAgIH0KKyAgICAgICAg
c3VjY2VzcyA9ICFtX3BsYWluVGV4dC5pc0VtcHR5KCk7CisgICAgICAgIHJldHVybiBtX3BsYWlu
VGV4dDsKKyAgICB9CisKKyAgICBpZiAodHlwZSA9PSBtaW1lVHlwZVVSTCkgeworICAgICAgICBz
dWNjZXNzID0gIW1fdXJsLmlzRW1wdHkoKTsKKyAgICAgICAgcmV0dXJuIG1fdXJsLnN0cmluZygp
OworICAgIH0KKworICAgIGlmICh0eXBlID09IG1pbWVUeXBlVGV4dFVSSUxpc3QpIHsKKyAgICAg
ICAgc3VjY2VzcyA9ICFtX3VyaUxpc3QuaXNFbXB0eSgpOworICAgICAgICByZXR1cm4gbV91cmlM
aXN0OworICAgIH0KKworICAgIGlmICh0eXBlID09IG1pbWVUeXBlVGV4dEhUTUwpIHsKKyAgICAg
ICAgaWYgKG1fY2xpcGJvYXJkVHlwZSA9PSBDbGlwYm9hcmQ6OkNvcHlBbmRQYXN0ZSkgeworICAg
ICAgICAgICAgUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlciBidWZmZXIgPQorICAg
ICAgICAgICAgICAgIFBhc3RlYm9hcmQ6OmdlbmVyYWxQYXN0ZWJvYXJkKCktPmlzU2VsZWN0aW9u
TW9kZSgpID8KKyAgICAgICAgICAgICAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6U2VsZWN0aW9uQnVm
ZmVyIDoKKyAgICAgICAgICAgICAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6U3RhbmRhcmRCdWZmZXI7
CisgICAgICAgICAgICBTdHJpbmcgaHRtbFRleHQ7CisgICAgICAgICAgICBLVVJMIHNvdXJjZVVS
TDsKKyAgICAgICAgICAgIENocm9taXVtQnJpZGdlOjpjbGlwYm9hcmRSZWFkSFRNTChidWZmZXIs
ICZodG1sVGV4dCwgJnNvdXJjZVVSTCk7CisgICAgICAgICAgICBzdWNjZXNzID0gIWh0bWxUZXh0
LmlzRW1wdHkoKTsKKyAgICAgICAgICAgIHJldHVybiBodG1sVGV4dDsKKyAgICAgICAgfQorICAg
ICAgICBzdWNjZXNzID0gIW1fdGV4dEh0bWwuaXNFbXB0eSgpOworICAgICAgICByZXR1cm4gbV90
ZXh0SHRtbDsKKyAgICB9CisKKyAgICBpZiAodHlwZSA9PSBtaW1lVHlwZURvd25sb2FkVVJMKSB7
CisgICAgICAgIHN1Y2Nlc3MgPSAhbV9kb3dubG9hZE1ldGFkYXRhLmlzRW1wdHkoKTsKKyAgICAg
ICAgcmV0dXJuIG1fZG93bmxvYWRNZXRhZGF0YTsKKyAgICB9CisKKyAgICBzdWNjZXNzID0gZmFs
c2U7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitib29sIENocm9taXVtRGF0YU9iamVjdExl
Z2FjeTo6c2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSkKK3sK
KyAgICBpZiAodHlwZSA9PSBtaW1lVHlwZVRleHRQbGFpbikgeworICAgICAgICBtX3BsYWluVGV4
dCA9IGRhdGE7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmICh0eXBlID09
IG1pbWVUeXBlVVJMIHx8IHR5cGUgPT0gbWltZVR5cGVUZXh0VVJJTGlzdCkgeworICAgICAgICBt
X3VybCA9IEtVUkwoKTsKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gdXJpTGlzdDsKKyAgICAgICAg
Ly8gTGluZSBzZXBhcmF0b3IgaXMgXHJcbiBwZXIgUkZDIDI0ODMgLSBob3dldmVyLCBmb3IgY29t
cGF0aWJpbGl0eQorICAgICAgICAvLyByZWFzb25zIHdlIGFsc28gYWxsb3cganVzdCBcbiBoZXJl
LgorICAgICAgICBkYXRhLnNwbGl0KCdcbicsIHVyaUxpc3QpOworICAgICAgICAvLyBQcm9jZXNz
IHRoZSBpbnB1dCBhbmQgY29weSB0aGUgZmlyc3QgdmFsaWQgVVJMIGludG8gdGhlIHVybCBtZW1i
ZXIuCisgICAgICAgIC8vIEluIGNhc2Ugbm8gVVJMcyBjYW4gYmUgZm91bmQsIHN1YnNlcXVlbnQg
Y2FsbHMgdG8gZ2V0RGF0YSgiVVJMIikKKyAgICAgICAgLy8gd2lsbCBnZXQgYW4gZW1wdHkgc3Ry
aW5nLiBUaGlzIGlzIGluIGxpbmUgd2l0aCB0aGUgSFRNTDUgc3BlYyAoc2VlCisgICAgICAgIC8v
ICJUaGUgRHJhZ0V2ZW50IGFuZCBEYXRhVHJhbnNmZXIgaW50ZXJmYWNlcyIpLgorICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHVyaUxpc3Quc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAg
IFN0cmluZyYgbGluZSA9IHVyaUxpc3RbaV07CisgICAgICAgICAgICBsaW5lID0gbGluZS5zdHJp
cFdoaXRlU3BhY2UoKTsKKyAgICAgICAgICAgIGlmIChsaW5lLmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChsaW5lWzBdID09ICcjJykKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIEtVUkwgdXJsID0gS1VSTChQYXJzZWRV
UkxTdHJpbmcsIGxpbmUpOworICAgICAgICAgICAgaWYgKHVybC5pc1ZhbGlkKCkpIHsKKyAgICAg
ICAgICAgICAgICBtX3VybCA9IHVybDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICBtX3VyaUxpc3QgPSBkYXRhOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAodHlwZSA9PSBtaW1lVHlwZVRleHRIVE1MKSB7Cisg
ICAgICAgIG1fdGV4dEh0bWwgPSBkYXRhOworICAgICAgICBtX2h0bWxCYXNlVXJsID0gS1VSTCgp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAodHlwZSA9PSBtaW1lVHlw
ZURvd25sb2FkVVJMKSB7CisgICAgICAgIG1fZG93bmxvYWRNZXRhZGF0YSA9IGRhdGE7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworQ2hyb21p
dW1EYXRhT2JqZWN0TGVnYWN5OjpDaHJvbWl1bURhdGFPYmplY3RMZWdhY3koQ2xpcGJvYXJkOjpD
bGlwYm9hcmRUeXBlIGNsaXBib2FyZFR5cGUpCisgICAgOiBtX2NsaXBib2FyZFR5cGUoY2xpcGJv
YXJkVHlwZSkKK3sKK30KKworQ2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5OjpDaHJvbWl1bURhdGFP
YmplY3RMZWdhY3koY29uc3QgQ2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5JiBvdGhlcikKKyAgICA6
IFJlZkNvdW50ZWQ8Q2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5PigpCisgICAgLCBtX2NsaXBib2Fy
ZFR5cGUob3RoZXIubV9jbGlwYm9hcmRUeXBlKQorICAgICwgbV91cmxUaXRsZShvdGhlci5tX3Vy
bFRpdGxlKQorICAgICwgbV9kb3dubG9hZE1ldGFkYXRhKG90aGVyLm1fZG93bmxvYWRNZXRhZGF0
YSkKKyAgICAsIG1fZmlsZUV4dGVuc2lvbihvdGhlci5tX2ZpbGVFeHRlbnNpb24pCisgICAgLCBt
X2ZpbGVuYW1lcyhvdGhlci5tX2ZpbGVuYW1lcykKKyAgICAsIG1fcGxhaW5UZXh0KG90aGVyLm1f
cGxhaW5UZXh0KQorICAgICwgbV90ZXh0SHRtbChvdGhlci5tX3RleHRIdG1sKQorICAgICwgbV9o
dG1sQmFzZVVybChvdGhlci5tX2h0bWxCYXNlVXJsKQorICAgICwgbV9maWxlQ29udGVudEZpbGVu
YW1lKG90aGVyLm1fZmlsZUNvbnRlbnRGaWxlbmFtZSkKKyAgICAsIG1fdXJsKG90aGVyLm1fdXJs
KQorICAgICwgbV91cmlMaXN0KG90aGVyLm1fdXJpTGlzdCkKK3sKKyAgICBpZiAob3RoZXIubV9m
aWxlQ29udGVudC5nZXQoKSkKKyAgICAgICAgbV9maWxlQ29udGVudCA9IG90aGVyLm1fZmlsZUNv
bnRlbnQtPmNvcHkoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3RMZWdhY3kuaCBiL1dl
YkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5LmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q0NWRmNAotLS0gL2Rldi9udWxsCisrKyBi
L1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5LmgKQEAg
LTAsMCArMSwxMTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgsIDIwMDksIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorICogbWV0OgorICogCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDaHJvbWl1bURhdGFPYmplY3RMZWdhY3lf
aAorI2RlZmluZSBDaHJvbWl1bURhdGFPYmplY3RMZWdhY3lfaAorCisjaW5jbHVkZSAiQ2xpcGJv
YXJkLmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisj
aW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0hhc2guaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgLy8gQSBk
YXRhIG9iamVjdCBmb3IgaG9sZGluZyBkYXRhIHRoYXQgd291bGQgYmUgaW4gYSBjbGlwYm9hcmQg
b3IgbW92ZWQKKyAgICAvLyBkdXJpbmcgYSBkcmFnLW4tZHJvcCBvcGVyYXRpb24uICBUaGlzIGlz
IHRoZSBkYXRhIHRoYXQgV2ViQ29yZSBpcyBhd2FyZQorICAgIC8vIG9mIGFuZCBpcyBub3Qgc3Bl
Y2lmaWMgdG8gYSBwbGF0Zm9ybS4KKyAgICBjbGFzcyBDaHJvbWl1bURhdGFPYmplY3RMZWdhY3kg
OiBwdWJsaWMgUmVmQ291bnRlZDxDaHJvbWl1bURhdGFPYmplY3RMZWdhY3k+IHsKKyAgICBwdWJs
aWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENocm9taXVtRGF0YU9iamVjdExlZ2FjeT4g
Y3JlYXRlKENsaXBib2FyZDo6Q2xpcGJvYXJkVHlwZSBjbGlwYm9hcmRUeXBlKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENocm9taXVtRGF0YU9iamVjdExlZ2Fj
eShjbGlwYm9hcmRUeXBlKSk7CisgICAgICAgIH0KKworICAgICAgICBQYXNzUmVmUHRyPENocm9t
aXVtRGF0YU9iamVjdExlZ2FjeT4gY29weSgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgQ2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5KCp0aGlzKSk7Cisg
ICAgICAgIH0KKworICAgICAgICB2b2lkIGNsZWFyRGF0YShjb25zdCBTdHJpbmcmIHR5cGUpOwor
ICAgICAgICB2b2lkIGNsZWFyQWxsKCk7CisgICAgICAgIHZvaWQgY2xlYXJBbGxFeGNlcHRGaWxl
cygpOworCisgICAgICAgIGJvb2wgaGFzRGF0YSgpIGNvbnN0OworCisgICAgICAgIEhhc2hTZXQ8
U3RyaW5nPiB0eXBlcygpIGNvbnN0OworICAgICAgICBTdHJpbmcgZ2V0RGF0YShjb25zdCBTdHJp
bmcmIHR5cGUsIGJvb2wmIHN1Y2Nlc3MpOworICAgICAgICBib29sIHNldERhdGEoY29uc3QgU3Ry
aW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpOworCisgICAgICAgIC8vIFNwZWNpYWwgaGFu
ZGxlcnMgZm9yIFVSTC9IVE1MIG1ldGFkYXRhLgorICAgICAgICBTdHJpbmcgdXJsVGl0bGUoKSBj
b25zdCB7IHJldHVybiBtX3VybFRpdGxlOyB9CisgICAgICAgIHZvaWQgc2V0VXJsVGl0bGUoY29u
c3QgU3RyaW5nJiB1cmxUaXRsZSkgeyBtX3VybFRpdGxlID0gdXJsVGl0bGU7IH0KKyAgICAgICAg
S1VSTCBodG1sQmFzZVVybCgpIGNvbnN0IHsgcmV0dXJuIG1faHRtbEJhc2VVcmw7IH0KKyAgICAg
ICAgdm9pZCBzZXRIdG1sQmFzZVVybChjb25zdCBLVVJMJiB1cmwpIHsgbV9odG1sQmFzZVVybCA9
IHVybDsgfQorCisgICAgICAgIC8vIFVzZWQgdG8gaGFuZGxlIGZpbGVzIGJlaW5nIGRyYWdnZWQg
aW4uCisgICAgICAgIGJvb2wgY29udGFpbnNGaWxlbmFtZXMoKSBjb25zdCB7IHJldHVybiAhbV9m
aWxlbmFtZXMuaXNFbXB0eSgpOyB9CisgICAgICAgIFZlY3RvcjxTdHJpbmc+IGZpbGVuYW1lcygp
IGNvbnN0IHsgcmV0dXJuIG1fZmlsZW5hbWVzOyB9CisgICAgICAgIHZvaWQgc2V0RmlsZW5hbWVz
KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMpIHsgbV9maWxlbmFtZXMgPSBmaWxlbmFt
ZXM7IH0KKworICAgICAgICAvLyBVc2VkIHRvIGhhbmRsZSBmaWxlcyAoaW1hZ2VzKSBiZWluZyBk
cmFnZ2VkIG91dC4KKyAgICAgICAgU3RyaW5nIGZpbGVFeHRlbnNpb24oKSBjb25zdCB7IHJldHVy
biBtX2ZpbGVFeHRlbnNpb247IH0KKyAgICAgICAgdm9pZCBzZXRGaWxlRXh0ZW5zaW9uKGNvbnN0
IFN0cmluZyYgZmlsZUV4dGVuc2lvbikgeyBtX2ZpbGVFeHRlbnNpb24gPSBmaWxlRXh0ZW5zaW9u
OyB9CisgICAgICAgIFN0cmluZyBmaWxlQ29udGVudEZpbGVuYW1lKCkgY29uc3QgeyByZXR1cm4g
bV9maWxlQ29udGVudEZpbGVuYW1lOyB9CisgICAgICAgIHZvaWQgc2V0RmlsZUNvbnRlbnRGaWxl
bmFtZShjb25zdCBTdHJpbmcmIGZpbGVDb250ZW50RmlsZW5hbWUpIHsgbV9maWxlQ29udGVudEZp
bGVuYW1lID0gZmlsZUNvbnRlbnRGaWxlbmFtZTsgfQorICAgICAgICBQYXNzUmVmUHRyPFNoYXJl
ZEJ1ZmZlcj4gZmlsZUNvbnRlbnQoKSBjb25zdCB7IHJldHVybiBtX2ZpbGVDb250ZW50OyB9Cisg
ICAgICAgIHZvaWQgc2V0RmlsZUNvbnRlbnQoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGZpbGVD
b250ZW50KSB7IG1fZmlsZUNvbnRlbnQgPSBmaWxlQ29udGVudDsgfQorCisgICAgcHJpdmF0ZToK
KyAgICAgICAgQ2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5KENsaXBib2FyZDo6Q2xpcGJvYXJkVHlw
ZSk7CisgICAgICAgIENocm9taXVtRGF0YU9iamVjdExlZ2FjeShjb25zdCBDaHJvbWl1bURhdGFP
YmplY3RMZWdhY3kmKTsKKworICAgICAgICBDbGlwYm9hcmQ6OkNsaXBib2FyZFR5cGUgbV9jbGlw
Ym9hcmRUeXBlOworCisgICAgICAgIFN0cmluZyBtX3VybFRpdGxlOworCisgICAgICAgIFN0cmlu
ZyBtX2Rvd25sb2FkTWV0YWRhdGE7CisKKyAgICAgICAgU3RyaW5nIG1fZmlsZUV4dGVuc2lvbjsK
KyAgICAgICAgVmVjdG9yPFN0cmluZz4gbV9maWxlbmFtZXM7CisKKyAgICAgICAgU3RyaW5nIG1f
cGxhaW5UZXh0OworCisgICAgICAgIFN0cmluZyBtX3RleHRIdG1sOworICAgICAgICBLVVJMIG1f
aHRtbEJhc2VVcmw7CisKKyAgICAgICAgU3RyaW5nIG1fZmlsZUNvbnRlbnRGaWxlbmFtZTsKKyAg
ICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV9maWxlQ29udGVudDsKKworICAgICAgICAvLyBU
aGVzZSB0d28gYXJlIGxpbmtlZC4gU2V0dGluZyBtX3VybCB3aWxsIHNldCBtX3VyaUxpc3QgdG8g
dGhlIHNhbWUKKyAgICAgICAgLy8gc3RyaW5nIHZhbHVlOyBzZXR0aW5nIG1fdXJpTGlzdCB3aWxs
IGNhdXNlIGl0cyBjb250ZW50cyB0byBiZSBwYXJzZWQKKyAgICAgICAgLy8gYWNjb3JkaW5nIHRv
IFJGQyAyNDgzIGFuZCB0aGUgZmlyc3QgVVJMIGZvdW5kIHdpbGwgYmUgc2V0IGluIG1fdXJsLgor
ICAgICAgICBLVVJMIG1fdXJsOworICAgICAgICBTdHJpbmcgbV91cmlMaXN0OworICAgIH07CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0v
Y2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uY3BwCmluZGV4IGMxYjM0ZGEuLjE3NzkxNTMgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uY3Bw
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uY3BwCkBA
IC04NCw2ICs4NCwxNiBAQCBQYXNzUmVmUHRyPENsaXBib2FyZENocm9taXVtPiBDbGlwYm9hcmRD
aHJvbWl1bTo6Y3JlYXRlKENsaXBib2FyZFR5cGUgY2xpcGJvYXJkVAogICAgIHJldHVybiBhZG9w
dFJlZihuZXcgQ2xpcGJvYXJkQ2hyb21pdW0oY2xpcGJvYXJkVHlwZSwgZGF0YU9iamVjdCwgcG9s
aWN5LCBmcmFtZSkpOwogfQogCitQYXNzUmVmUHRyPENsaXBib2FyZENocm9taXVtPiBDbGlwYm9h
cmRDaHJvbWl1bTo6Y3JlYXRlKENsaXBib2FyZFR5cGUgY2xpcGJvYXJkVHlwZSwKKyAgICBDbGlw
Ym9hcmRBY2Nlc3NQb2xpY3kgcG9saWN5LCBGcmFtZSogZnJhbWUpCit7CisgICAgUmVmUHRyPENo
cm9taXVtRGF0YU9iamVjdD4gZGF0YU9iamVjdCA9CisgICAgICAgIHBvbGljeSA9PSBDbGlwYm9h
cmRXcml0YWJsZQorICAgICAgICA/IENocm9taXVtRGF0YU9iamVjdDo6Y3JlYXRlV3JpdGFibGUo
Y2xpcGJvYXJkVHlwZSkKKyAgICAgICAgOiBDaHJvbWl1bURhdGFPYmplY3Q6OmNyZWF0ZVJlYWRh
YmxlKGNsaXBib2FyZFR5cGUpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2xpcGJvYXJkQ2hy
b21pdW0oY2xpcGJvYXJkVHlwZSwgZGF0YU9iamVjdCwgcG9saWN5LCBmcmFtZSkpOworfQorCiB2
b2lkIENsaXBib2FyZENocm9taXVtOjpjbGVhckRhdGEoY29uc3QgU3RyaW5nJiB0eXBlKQogewog
ICAgIGlmIChwb2xpY3koKSAhPSBDbGlwYm9hcmRXcml0YWJsZSB8fCAhbV9kYXRhT2JqZWN0KQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5o
IGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5oCmluZGV4IDE0
ZjU5ZTkuLjFkNjk5MjEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xp
cGJvYXJkQ2hyb21pdW0uaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2Fy
ZENocm9taXVtLmgKQEAgLTQ4LDYgKzQ4LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxDbGlwYm9hcmRDaHJvbWl1bT4gY3JlYXRlKAogICAgICAgICAg
ICAgQ2xpcGJvYXJkVHlwZSwgUGFzc1JlZlB0cjxDaHJvbWl1bURhdGFPYmplY3Q+LCBDbGlwYm9h
cmRBY2Nlc3NQb2xpY3ksIEZyYW1lKik7CiAKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2xp
cGJvYXJkQ2hyb21pdW0+IGNyZWF0ZSgKKyAgICAgICAgICAgIENsaXBib2FyZFR5cGUsIENsaXBi
b2FyZEFjY2Vzc1BvbGljeSwgRnJhbWUqKTsKKwogICAgICAgICAvLyBSZXR1cm5zIHRoZSBmaWxl
IG5hbWUgKG5vdCBpbmNsdWRpbmcgdGhlIGV4dGVuc2lvbikuIFRoaXMgcmVtb3ZlcyBhbnkKICAg
ICAgICAgLy8gaW52YWxpZCBmaWxlIHN5c3RlbSBjaGFyYWN0ZXJzIGFzIHdlbGwgYXMgbWFraW5n
IHN1cmUgdGhlCiAgICAgICAgIC8vIHBhdGggKyBleHRlbnNpb24gaXMgbm90IGJpZ2dlciB0aGFu
IGFsbG93ZWQgYnkgdGhlIGZpbGUgc3lzdGVtLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9y
bS9jaHJvbWl1bS9SZWFkYWJsZURhdGFPYmplY3QuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9SZWFkYWJsZURhdGFPYmplY3QuY3BwCmluZGV4IDA4ODY3M2YuLmYwZmRkMTkgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUmVhZGFibGVEYXRhT2JqZWN0LmNwcAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1JlYWRhYmxlRGF0YU9iamVjdC5jcHAKQEAg
LTM2LDE4ICszNiwxOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBQYXN0ZWJv
YXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyIGNsaXBib2FyZEJ1ZmZlcihib29sIGlzRm9yRHJh
Z2dpbmcpCitzdGF0aWMgUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlciBjbGlwYm9h
cmRCdWZmZXIoQ2xpcGJvYXJkOjpDbGlwYm9hcmRUeXBlIGNsaXBib2FyZFR5cGUpCiB7Ci0gICAg
cmV0dXJuIGlzRm9yRHJhZ2dpbmcgPyBQYXN0ZWJvYXJkUHJpdmF0ZTo6RHJhZ0J1ZmZlciA6IFBh
c3RlYm9hcmRQcml2YXRlOjpTdGFuZGFyZEJ1ZmZlcjsKKyAgICByZXR1cm4gY2xpcGJvYXJkVHlw
ZSA9PSBDbGlwYm9hcmQ6OkRyYWdBbmREcm9wID8gUGFzdGVib2FyZFByaXZhdGU6OkRyYWdCdWZm
ZXIgOiBQYXN0ZWJvYXJkUHJpdmF0ZTo6U3RhbmRhcmRCdWZmZXI7CiB9CiAKLVBhc3NSZWZQdHI8
UmVhZGFibGVEYXRhT2JqZWN0PiBSZWFkYWJsZURhdGFPYmplY3Q6OmNyZWF0ZShib29sIGlzRm9y
RHJhZ2dpbmcpCitQYXNzUmVmUHRyPFJlYWRhYmxlRGF0YU9iamVjdD4gUmVhZGFibGVEYXRhT2Jq
ZWN0OjpjcmVhdGUoQ2xpcGJvYXJkOjpDbGlwYm9hcmRUeXBlIGNsaXBib2FyZFR5cGUpCiB7Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSZWFkYWJsZURhdGFPYmplY3QoaXNGb3JEcmFnZ2luZykp
OworICAgIHJldHVybiBhZG9wdFJlZihuZXcgUmVhZGFibGVEYXRhT2JqZWN0KGNsaXBib2FyZFR5
cGUpKTsKIH0KIAotUmVhZGFibGVEYXRhT2JqZWN0OjpSZWFkYWJsZURhdGFPYmplY3QoYm9vbCBp
c0ZvckRyYWdnaW5nKQotICAgIDogbV9pc0ZvckRyYWdnaW5nKGlzRm9yRHJhZ2dpbmcpCitSZWFk
YWJsZURhdGFPYmplY3Q6OlJlYWRhYmxlRGF0YU9iamVjdChDbGlwYm9hcmQ6OkNsaXBib2FyZFR5
cGUgY2xpcGJvYXJkVHlwZSkKKyAgICA6IG1fY2xpcGJvYXJkVHlwZShjbGlwYm9hcmRUeXBlKQog
ICAgICwgbV9jb250YWluc0ZpbGVuYW1lcyhmYWxzZSkKICAgICAsIG1faXNUeXBlQ2FjaGVJbml0
aWFsaXplZChmYWxzZSkKIHsKQEAgLTcwLDMzICs3MCwyOSBAQCBTdHJpbmcgUmVhZGFibGVEYXRh
T2JqZWN0OjpnZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgYm9vbCYgc3VjY2VlZGVkKSBjb25z
dAogICAgIFN0cmluZyBkYXRhOwogICAgIFN0cmluZyBpZ25vcmVkTWV0YWRhdGE7CiAgICAgc3Vj
Y2VlZGVkID0gQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFJlYWREYXRhKAotICAgICAgICBjbGlw
Ym9hcmRCdWZmZXIobV9pc0ZvckRyYWdnaW5nKSwgdHlwZSwgZGF0YSwgaWdub3JlZE1ldGFkYXRh
KTsKKyAgICAgICAgY2xpcGJvYXJkQnVmZmVyKG1fY2xpcGJvYXJkVHlwZSksIHR5cGUsIGRhdGEs
IGlnbm9yZWRNZXRhZGF0YSk7CiAgICAgcmV0dXJuIGRhdGE7CiB9CiAKLVN0cmluZyBSZWFkYWJs
ZURhdGFPYmplY3Q6OmdldFVSTChTdHJpbmcqIHRpdGxlKSBjb25zdAorU3RyaW5nIFJlYWRhYmxl
RGF0YU9iamVjdDo6dXJsVGl0bGUoKSBjb25zdAogewotICAgIFN0cmluZyB1cmw7Ci0gICAgU3Ry
aW5nIGlnbm9yZWRUaXRsZTsKLSAgICBpZiAoIXRpdGxlKQotICAgICAgICB0aXRsZSA9ICZpZ25v
cmVkVGl0bGU7CisgICAgU3RyaW5nIGlnbm9yZWREYXRhOworICAgIFN0cmluZyB1cmxUaXRsZTsK
ICAgICBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkUmVhZERhdGEoCi0gICAgICAgIGNsaXBib2Fy
ZEJ1ZmZlcihtX2lzRm9yRHJhZ2dpbmcpLCBtaW1lVHlwZVRleHRVUklMaXN0LCB1cmwsICp0aXRs
ZSk7Ci0gICAgcmV0dXJuIHVybDsKKyAgICAgICAgY2xpcGJvYXJkQnVmZmVyKG1fY2xpcGJvYXJk
VHlwZSksIG1pbWVUeXBlVGV4dFVSSUxpc3QsIGlnbm9yZWREYXRhLCB1cmxUaXRsZSk7CisgICAg
cmV0dXJuIHVybFRpdGxlOwogfQogCi1TdHJpbmcgUmVhZGFibGVEYXRhT2JqZWN0OjpnZXRIVE1M
KFN0cmluZyogYmFzZVVSTCkgY29uc3QKK0tVUkwgUmVhZGFibGVEYXRhT2JqZWN0OjpodG1sQmFz
ZVVybCgpIGNvbnN0CiB7Ci0gICAgU3RyaW5nIGh0bWw7Ci0gICAgU3RyaW5nIGlnbm9yZWRCYXNl
VVJMOwotICAgIGlmICghYmFzZVVSTCkKLSAgICAgICAgYmFzZVVSTCA9ICZpZ25vcmVkQmFzZVVS
TDsKKyAgICBTdHJpbmcgaWdub3JlZERhdGE7CisgICAgU3RyaW5nIGh0bWxCYXNlVXJsOwogICAg
IENocm9taXVtQnJpZGdlOjpjbGlwYm9hcmRSZWFkRGF0YSgKLSAgICAgICAgY2xpcGJvYXJkQnVm
ZmVyKG1faXNGb3JEcmFnZ2luZyksIG1pbWVUeXBlVGV4dEhUTUwsIGh0bWwsICpiYXNlVVJMKTsK
LSAgICByZXR1cm4gaHRtbDsKKyAgICAgICAgY2xpcGJvYXJkQnVmZmVyKG1fY2xpcGJvYXJkVHlw
ZSksIG1pbWVUeXBlVGV4dEhUTUwsIGlnbm9yZWREYXRhLCBodG1sQmFzZVVybCk7CisgICAgcmV0
dXJuIEtVUkwoUGFyc2VkVVJMU3RyaW5nLCBodG1sQmFzZVVybCk7CiB9CiAKLWJvb2wgUmVhZGFi
bGVEYXRhT2JqZWN0OjpoYXNGaWxlbmFtZXMoKSBjb25zdAorYm9vbCBSZWFkYWJsZURhdGFPYmpl
Y3Q6OmNvbnRhaW5zRmlsZW5hbWVzKCkgY29uc3QKIHsKICAgICBlbnN1cmVUeXBlQ2FjaGVJbml0
aWFsaXplZCgpOwogICAgIHJldHVybiBtX2NvbnRhaW5zRmlsZW5hbWVzOwpAQCAtMTA0LDcgKzEw
MCw3IEBAIGJvb2wgUmVhZGFibGVEYXRhT2JqZWN0OjpoYXNGaWxlbmFtZXMoKSBjb25zdAogCiBW
ZWN0b3I8U3RyaW5nPiBSZWFkYWJsZURhdGFPYmplY3Q6OmZpbGVuYW1lcygpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIENocm9taXVtQnJpZGdlOjpjbGlwYm9hcmRSZWFkRmlsZW5hbWVzKGNsaXBib2Fy
ZEJ1ZmZlcihtX2lzRm9yRHJhZ2dpbmcpKTsKKyAgICByZXR1cm4gQ2hyb21pdW1CcmlkZ2U6OmNs
aXBib2FyZFJlYWRGaWxlbmFtZXMoY2xpcGJvYXJkQnVmZmVyKG1fY2xpcGJvYXJkVHlwZSkpOwog
fQogCiB2b2lkIFJlYWRhYmxlRGF0YU9iamVjdDo6ZW5zdXJlVHlwZUNhY2hlSW5pdGlhbGl6ZWQo
KSBjb25zdApAQCAtMTEzLDcgKzEwOSw3IEBAIHZvaWQgUmVhZGFibGVEYXRhT2JqZWN0OjplbnN1
cmVUeXBlQ2FjaGVJbml0aWFsaXplZCgpIGNvbnN0CiAgICAgICAgIHJldHVybjsKIAogICAgIG1f
dHlwZXMgPSBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkUmVhZEF2YWlsYWJsZVR5cGVzKAotICAg
ICAgICBjbGlwYm9hcmRCdWZmZXIobV9pc0ZvckRyYWdnaW5nKSwgJm1fY29udGFpbnNGaWxlbmFt
ZXMpOworICAgICAgICBjbGlwYm9hcmRCdWZmZXIobV9jbGlwYm9hcmRUeXBlKSwgJm1fY29udGFp
bnNGaWxlbmFtZXMpOwogICAgIG1faXNUeXBlQ2FjaGVJbml0aWFsaXplZCA9IHRydWU7CiB9CiAK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUmVhZGFibGVEYXRhT2JqZWN0
LmggYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1JlYWRhYmxlRGF0YU9iamVjdC5oCmluZGV4
IDYwZjZkNDUuLjAyN2UwZWQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0v
UmVhZGFibGVEYXRhT2JqZWN0LmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9SZWFk
YWJsZURhdGFPYmplY3QuaApAQCAtMzEsNiArMzEsNyBAQAogI2lmbmRlZiBSZWFkYWJsZURhdGFP
YmplY3RfaAogI2RlZmluZSBSZWFkYWJsZURhdGFPYmplY3RfaAogCisjaW5jbHVkZSAiQ2xpcGJv
YXJkLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlIDx3dGYvSGFzaFNl
dC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CkBAIC00MywyNiArNDQsMjUgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogLy8gYnJvd3NlciB0byB0aGUgcmVuZGVyZXIuCiBjbGFzcyBSZWFk
YWJsZURhdGFPYmplY3QgOiBwdWJsaWMgUmVmQ291bnRlZDxSZWFkYWJsZURhdGFPYmplY3Q+IHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZWFkYWJsZURhdGFPYmplY3Q+IGNyZWF0
ZShib29sIGlzRm9yRHJhZ2dpbmcpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlYWRhYmxlRGF0
YU9iamVjdD4gY3JlYXRlKENsaXBib2FyZDo6Q2xpcGJvYXJkVHlwZSk7CiAKLSAgICB2aXJ0dWFs
IGJvb2wgaGFzRGF0YSgpIGNvbnN0OwotICAgIHZpcnR1YWwgSGFzaFNldDxTdHJpbmc+IHR5cGVz
KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBTdHJpbmcgZ2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUs
IGJvb2wmIHN1Y2NlZWRlZCkgY29uc3Q7CisgICAgYm9vbCBoYXNEYXRhKCkgY29uc3Q7CisgICAg
SGFzaFNldDxTdHJpbmc+IHR5cGVzKCkgY29uc3Q7CisgICAgU3RyaW5nIGdldERhdGEoY29uc3Qg
U3RyaW5nJiB0eXBlLCBib29sJiBzdWNjZWVkZWQpIGNvbnN0OwogCi0gICAgdmlydHVhbCBTdHJp
bmcgZ2V0VVJMKFN0cmluZyogdGl0bGUpIGNvbnN0OwotICAgIHZpcnR1YWwgU3RyaW5nIGdldEhU
TUwoU3RyaW5nKiBiYXNlVVJMKSBjb25zdDsKKyAgICBTdHJpbmcgdXJsVGl0bGUoKSBjb25zdDsK
KyAgICBLVVJMIGh0bWxCYXNlVXJsKCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIGJvb2wgaGFzRmls
ZW5hbWVzKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBWZWN0b3I8U3RyaW5nPiBmaWxlbmFtZXMoKSBj
b25zdDsKKyAgICBib29sIGNvbnRhaW5zRmlsZW5hbWVzKCkgY29uc3Q7CisgICAgVmVjdG9yPFN0
cmluZz4gZmlsZW5hbWVzKCkgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgUmVhZGFi
bGVEYXRhT2JqZWN0KGJvb2wgaXNGb3JEcmFnZ2luZyk7CisgICAgZXhwbGljaXQgUmVhZGFibGVE
YXRhT2JqZWN0KENsaXBib2FyZDo6Q2xpcGJvYXJkVHlwZSk7CiAKICAgICAvLyBUaGlzIGlzbid0
IGFsd2F5cyBjb25zdC4uLiBidXQgbW9zdCBvZiB0aGUgdGltZSBpdCBpcy4KICAgICB2b2lkIGVu
c3VyZVR5cGVDYWNoZUluaXRpYWxpemVkKCkgY29uc3Q7CiAKLQotICAgIGJvb2wgbV9pc0ZvckRy
YWdnaW5nOworICAgIENsaXBib2FyZDo6Q2xpcGJvYXJkVHlwZSBtX2NsaXBib2FyZFR5cGU7CiAK
ICAgICAvLyBUbyBhdm9pZCBtYWtpbmcgYSBsb3Qgb2YgSVBDIGNhbGxzIGZvciBlYWNoIGRyYWcg
ZXZlbnQsIHdlIGNhY2hlIHNvbWUKICAgICAvLyB2YWx1ZXMgaW4gdGhlIHJlbmRlcmVyLgpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9Xcml0YWJsZURhdGFPYmplY3QuY3Bw
IGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9Xcml0YWJsZURhdGFPYmplY3QuY3BwCmluZGV4
IGFlZTdiZmMuLmUwOWEwYmUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0v
V3JpdGFibGVEYXRhT2JqZWN0LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1dy
aXRhYmxlRGF0YU9iamVjdC5jcHAKQEAgLTM2LDEzICszNiwxMyBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLVBhc3NSZWZQdHI8V3JpdGFibGVEYXRhT2JqZWN0PiBXcml0YWJsZURhdGFPYmpl
Y3Q6OmNyZWF0ZShib29sIGlzRm9yRHJhZ2dpbmcpCitQYXNzUmVmUHRyPFdyaXRhYmxlRGF0YU9i
amVjdD4gV3JpdGFibGVEYXRhT2JqZWN0OjpjcmVhdGUoQ2xpcGJvYXJkOjpDbGlwYm9hcmRUeXBl
IGNsaXBib2FyZFR5cGUpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXcml0YWJsZURhdGFP
YmplY3QoaXNGb3JEcmFnZ2luZykpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgV3JpdGFibGVE
YXRhT2JqZWN0KGNsaXBib2FyZFR5cGUpKTsKIH0KIAotV3JpdGFibGVEYXRhT2JqZWN0OjpXcml0
YWJsZURhdGFPYmplY3QoYm9vbCBpc0ZvckRyYWdnaW5nKQotICAgIDogbV9pc0ZvckRyYWdnaW5n
KGlzRm9yRHJhZ2dpbmcpCitXcml0YWJsZURhdGFPYmplY3Q6OldyaXRhYmxlRGF0YU9iamVjdChD
bGlwYm9hcmQ6OkNsaXBib2FyZFR5cGUgY2xpcGJvYXJkVHlwZSkKKyAgICA6IG1fY2xpcGJvYXJk
VHlwZShjbGlwYm9hcmRUeXBlKQogewogfQogCkBAIC03Niw3ICs3Niw3IEBAIHZvaWQgV3JpdGFi
bGVEYXRhT2JqZWN0OjpjbGVhckFsbCgpCiAKIGJvb2wgV3JpdGFibGVEYXRhT2JqZWN0OjpzZXRE
YXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKQogewotICAgIGlmICgh
bV9pc0ZvckRyYWdnaW5nKSB7CisgICAgaWYgKG1fY2xpcGJvYXJkVHlwZSA9PSBDbGlwYm9hcmQ6
OkNvcHlBbmRQYXN0ZSkgewogICAgICAgICBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkV3JpdGVE
YXRhKHR5cGUsIGRhdGEsICIiKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtODgs
MTUgKzg4LDEzIEBAIGJvb2wgV3JpdGFibGVEYXRhT2JqZWN0OjpzZXREYXRhKGNvbnN0IFN0cmlu
ZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lk
IFdyaXRhYmxlRGF0YU9iamVjdDo6c2V0VVJMKGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJp
bmcmIHRpdGxlKQordm9pZCBXcml0YWJsZURhdGFPYmplY3Q6OnNldFVybFRpdGxlKGNvbnN0IFN0
cmluZyYgdGl0bGUpCiB7Ci0gICAgc2V0RGF0YShtaW1lVHlwZVRleHRVUklMaXN0LCB1cmwpOwog
ICAgIG1fdXJsVGl0bGUgPSB0aXRsZTsKIH0KIAotdm9pZCBXcml0YWJsZURhdGFPYmplY3Q6OnNl
dEhUTUwoY29uc3QgU3RyaW5nJiBodG1sLCBjb25zdCBLVVJMJiBiYXNlVVJMKQordm9pZCBXcml0
YWJsZURhdGFPYmplY3Q6OnNldEh0bWxCYXNlVXJsKGNvbnN0IEtVUkwmIGJhc2VVUkwpCiB7Ci0g
ICAgc2V0RGF0YShtaW1lVHlwZVRleHRIVE1MLCBodG1sKTsKICAgICBtX2h0bWxCYXNlVVJMID0g
YmFzZVVSTDsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9Xcml0
YWJsZURhdGFPYmplY3QuaCBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vV3JpdGFibGVEYXRh
T2JqZWN0LmgKaW5kZXggNzFlMmUyNi4uOTE5MjIxNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9Xcml0YWJsZURhdGFPYmplY3QuaAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L2Nocm9taXVtL1dyaXRhYmxlRGF0YU9iamVjdC5oCkBAIC0zMSw2ICszMSw3IEBACiAjaWZuZGVm
IFdyaXRhYmxlRGF0YU9iamVjdF9oCiAjZGVmaW5lIFdyaXRhYmxlRGF0YU9iamVjdF9oCiAKKyNp
bmNsdWRlICJDbGlwYm9hcmQuaCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiUGxhdGZv
cm1TdHJpbmcuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKQEAgLTQ3LDMyICs0OCwzMiBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAvLyBhdG9taWNhbGx5LgogY2xhc3MgV3JpdGFibGVEYXRh
T2JqZWN0IDogcHVibGljIFJlZkNvdW50ZWQ8V3JpdGFibGVEYXRhT2JqZWN0PiB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8V3JpdGFibGVEYXRhT2JqZWN0PiBjcmVhdGUoYm9vbCBp
c0ZvckRyYWdnaW5nKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXcml0YWJsZURhdGFPYmplY3Q+
IGNyZWF0ZShDbGlwYm9hcmQ6OkNsaXBib2FyZFR5cGUpOwogCi0gICAgdmlydHVhbCB2b2lkIGNs
ZWFyRGF0YShjb25zdCBTdHJpbmcmIHR5cGUpOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhckFsbEV4
Y2VwdEZpbGVzKCk7Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyQWxsKCk7Ci0gICAgdmlydHVhbCBi
b29sIHNldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpOworICAg
IHZvaWQgY2xlYXJEYXRhKGNvbnN0IFN0cmluZyYgdHlwZSk7CisgICAgdm9pZCBjbGVhckFsbEV4
Y2VwdEZpbGVzKCk7CisgICAgdm9pZCBjbGVhckFsbCgpOworICAgIGJvb2wgc2V0RGF0YShjb25z
dCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSk7CiAKLSAgICB2aXJ0dWFsIHZvaWQg
c2V0VVJMKGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHRpdGxlKTsKLSAgICB2aXJ0
dWFsIHZvaWQgc2V0SFRNTChjb25zdCBTdHJpbmcmIGh0bWwsIGNvbnN0IEtVUkwmIGJhc2VVUkwp
OworICAgIHZvaWQgc2V0VXJsVGl0bGUoY29uc3QgU3RyaW5nJiB0aXRsZSk7CisgICAgdm9pZCBz
ZXRIdG1sQmFzZVVybChjb25zdCBLVVJMJiBiYXNlVVJMKTsKIAogICAgIC8vIFVzZWQgZm9yIHRy
YW5zZmVycmluZyBkcmFnIGRhdGEgZnJvbSB0aGUgcmVuZGVyZXIgdG8gdGhlIGJyb3dzZXIuCi0g
ICAgdmlydHVhbCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBkYXRhTWFwKCkgY29uc3Q7CisgICAg
SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gZGF0YU1hcCgpIGNvbnN0OwogICAgIHZpcnR1YWwgU3Ry
aW5nIHVybFRpdGxlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBLVVJMIGh0bWxCYXNlVVJMKCkgY29u
c3Q7CiAKLSAgICB2aXJ0dWFsIFN0cmluZyBmaWxlRXh0ZW5zaW9uKCkgY29uc3Q7Ci0gICAgdmly
dHVhbCBTdHJpbmcgZmlsZUNvbnRlbnRGaWxlbmFtZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxTaGFyZWRCdWZmZXI+IGZpbGVDb250ZW50KCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2
b2lkIHNldEZpbGVFeHRlbnNpb24oY29uc3QgU3RyaW5nJik7Ci0gICAgdmlydHVhbCB2b2lkIHNl
dEZpbGVDb250ZW50RmlsZW5hbWUoY29uc3QgU3RyaW5nJik7Ci0gICAgdmlydHVhbCB2b2lkIHNl
dEZpbGVDb250ZW50KFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPik7CisgICAgU3RyaW5nIGZpbGVF
eHRlbnNpb24oKSBjb25zdDsKKyAgICBTdHJpbmcgZmlsZUNvbnRlbnRGaWxlbmFtZSgpIGNvbnN0
OworICAgIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBmaWxlQ29udGVudCgpIGNvbnN0OworICAg
IHZvaWQgc2V0RmlsZUV4dGVuc2lvbihjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIHNldEZpbGVD
b250ZW50RmlsZW5hbWUoY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBzZXRGaWxlQ29udGVudChQ
YXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4pOwogCiBwcml2YXRlOgotICAgIGV4cGxpY2l0IFdyaXRh
YmxlRGF0YU9iamVjdChib29sIGlzRm9yRHJhZ2dpbmcpOworICAgIGV4cGxpY2l0IFdyaXRhYmxl
RGF0YU9iamVjdChDbGlwYm9hcmQ6OkNsaXBib2FyZFR5cGUpOwogCi0gICAgYm9vbCBtX2lzRm9y
RHJhZ2dpbmc7CisgICAgQ2xpcGJvYXJkOjpDbGlwYm9hcmRUeXBlIG1fY2xpcGJvYXJkVHlwZTsK
IAogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IG1fZGF0YU1hcDsKICAgICBTdHJpbmcgbV91
cmxUaXRsZTsKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVmlldy5oIGIv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3LmgKaW5kZXggZmRkNDcyOS4uOTI1MzA3ZSAx
MDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3LmgKKysrIGIvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3LmgKQEAgLTIyMyw2ICsyMjMsOSBAQCBwdWJsaWM6CiAg
ICAgICAgIGNvbnN0IFdlYkRyYWdEYXRhJiwgaW50IGlkZW50aXR5LAogICAgICAgICBjb25zdCBX
ZWJQb2ludCYgY2xpZW50UG9pbnQsIGNvbnN0IFdlYlBvaW50JiBzY3JlZW5Qb2ludCwKICAgICAg
ICAgV2ViRHJhZ09wZXJhdGlvbnNNYXNrIG9wZXJhdGlvbnNBbGxvd2VkKSA9IDA7CisgICAgdmly
dHVhbCBXZWJEcmFnT3BlcmF0aW9uIGRyYWdUYXJnZXREcmFnRW50ZXIyKAorICAgICAgICBpbnQg
aWRlbnRpdHksIGNvbnN0IFdlYlBvaW50JiBjbGllbnRQb2ludCwgY29uc3QgV2ViUG9pbnQmIHNj
cmVlblBvaW50LAorICAgICAgICBXZWJEcmFnT3BlcmF0aW9uc01hc2sgb3BlcmF0aW9uc0FsbG93
ZWQpID0gMDsKICAgICB2aXJ0dWFsIFdlYkRyYWdPcGVyYXRpb24gZHJhZ1RhcmdldERyYWdPdmVy
KAogICAgICAgICBjb25zdCBXZWJQb2ludCYgY2xpZW50UG9pbnQsIGNvbnN0IFdlYlBvaW50JiBz
Y3JlZW5Qb2ludCwKICAgICAgICAgV2ViRHJhZ09wZXJhdGlvbnNNYXNrIG9wZXJhdGlvbnNBbGxv
d2VkKSA9IDA7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRyYWdEYXRhLmNw
cCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRHJhZ0RhdGEuY3BwCmluZGV4IGYyNjQzNjkuLjkx
NjdjNjkgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRHJhZ0RhdGEuY3BwCisr
KyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRHJhZ0RhdGEuY3BwCkBAIC0zMiw2ICszMiw3IEBA
CiAjaW5jbHVkZSAiV2ViRHJhZ0RhdGEuaCIKIAogI2luY2x1ZGUgIkNocm9taXVtRGF0YU9iamVj
dC5oIgorI2luY2x1ZGUgIkNocm9taXVtRGF0YU9iamVjdExlZ2FjeS5oIgogI2luY2x1ZGUgIkNs
aXBib2FyZE1pbWVUeXBlcy5oIgogI2luY2x1ZGUgIldlYkRhdGEuaCIKICNpbmNsdWRlICJXZWJT
dHJpbmcuaCIKQEAgLTQ5LDcgKzUwLDcgQEAgY2xhc3MgV2ViRHJhZ0RhdGFQcml2YXRlIDogcHVi
bGljIENocm9taXVtRGF0YU9iamVjdCB7CiAKIHZvaWQgV2ViRHJhZ0RhdGE6OmluaXRpYWxpemUo
KQogewotICAgIGFzc2lnbihzdGF0aWNfY2FzdDxXZWJEcmFnRGF0YVByaXZhdGUqPihDaHJvbWl1
bURhdGFPYmplY3Q6OmNyZWF0ZShDbGlwYm9hcmQ6OkRyYWdBbmREcm9wKS5yZWxlYXNlUmVmKCkp
KTsKKyAgICBhc3NpZ24oc3RhdGljX2Nhc3Q8V2ViRHJhZ0RhdGFQcml2YXRlKj4oQ2hyb21pdW1E
YXRhT2JqZWN0OjpjcmVhdGUoQ2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5OjpjcmVhdGUoQ2xpcGJv
YXJkOjpEcmFnQW5kRHJvcCkpLnJlbGVhc2VSZWYoKSkpOwogfQogCiB2b2lkIFdlYkRyYWdEYXRh
OjpyZXNldCgpCkBAIC0yMzIsOCArMjMzLDcgQEAgdm9pZCBXZWJEcmFnRGF0YTo6YXNzaWduKFdl
YkRyYWdEYXRhUHJpdmF0ZSogcCkKIHZvaWQgV2ViRHJhZ0RhdGE6OmVuc3VyZU11dGFibGUoKQog
ewogICAgIEFTU0VSVCghaXNOdWxsKCkpOwotICAgIGlmICghbV9wcml2YXRlLT5oYXNPbmVSZWYo
KSkKLSAgICAgICAgYXNzaWduKHN0YXRpY19jYXN0PFdlYkRyYWdEYXRhUHJpdmF0ZSo+KG1fcHJp
dmF0ZS0+Y29weSgpLnJlbGVhc2VSZWYoKSkpOworICAgIEFTU0VSVChtX3ByaXZhdGUtPmhhc09u
ZVJlZigpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmll
d0ltcGwuY3BwCmluZGV4IDU5OWM2NWUuLjc1YzY1YTMgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmll
d0ltcGwuY3BwCkBAIC0xNjgxLDYgKzE2ODEsMjEgQEAgV2ViRHJhZ09wZXJhdGlvbiBXZWJWaWV3
SW1wbDo6ZHJhZ1RhcmdldERyYWdFbnRlcigKICAgICByZXR1cm4gZHJhZ1RhcmdldERyYWdFbnRl
ck9yT3ZlcihjbGllbnRQb2ludCwgc2NyZWVuUG9pbnQsIERyYWdFbnRlcik7CiB9CiAKK1dlYkRy
YWdPcGVyYXRpb24gV2ViVmlld0ltcGw6OmRyYWdUYXJnZXREcmFnRW50ZXIyKAorICAgIGludCBp
ZGVudGl0eSwKKyAgICBjb25zdCBXZWJQb2ludCYgY2xpZW50UG9pbnQsCisgICAgY29uc3QgV2Vi
UG9pbnQmIHNjcmVlblBvaW50LAorICAgIFdlYkRyYWdPcGVyYXRpb25zTWFzayBvcGVyYXRpb25z
QWxsb3dlZCkKK3sKKyAgICBBU1NFUlQoIW1fY3VycmVudERyYWdEYXRhLmdldCgpKTsKKworICAg
IG1fY3VycmVudERyYWdEYXRhID0gQ2hyb21pdW1EYXRhT2JqZWN0OjpjcmVhdGVSZWFkYWJsZShD
bGlwYm9hcmQ6OkRyYWdBbmREcm9wKTsKKyAgICBtX2RyYWdJZGVudGl0eSA9IGlkZW50aXR5Owor
ICAgIG1fb3BlcmF0aW9uc0FsbG93ZWQgPSBvcGVyYXRpb25zQWxsb3dlZDsKKworICAgIHJldHVy
biBkcmFnVGFyZ2V0RHJhZ0VudGVyT3JPdmVyKGNsaWVudFBvaW50LCBzY3JlZW5Qb2ludCwgRHJh
Z0VudGVyKTsKK30KKwogV2ViRHJhZ09wZXJhdGlvbiBXZWJWaWV3SW1wbDo6ZHJhZ1RhcmdldERy
YWdPdmVyKAogICAgIGNvbnN0IFdlYlBvaW50JiBjbGllbnRQb2ludCwKICAgICBjb25zdCBXZWJQ
b2ludCYgc2NyZWVuUG9pbnQsCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZp
ZXdJbXBsLmggYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKaW5kZXggZTUxZGY0
ZC4uMGE0NmU1ZSAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5o
CisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaApAQCAtMTU0LDYgKzE1NCwx
MSBAQCBwdWJsaWM6CiAgICAgICAgIGNvbnN0IFdlYlBvaW50JiBjbGllbnRQb2ludCwKICAgICAg
ICAgY29uc3QgV2ViUG9pbnQmIHNjcmVlblBvaW50LAogICAgICAgICBXZWJEcmFnT3BlcmF0aW9u
c01hc2sgb3BlcmF0aW9uc0FsbG93ZWQpOworICAgIHZpcnR1YWwgV2ViRHJhZ09wZXJhdGlvbiBk
cmFnVGFyZ2V0RHJhZ0VudGVyMigKKyAgICAgICAgaW50IGlkZW50aXR5LAorICAgICAgICBjb25z
dCBXZWJQb2ludCYgY2xpZW50UG9pbnQsCisgICAgICAgIGNvbnN0IFdlYlBvaW50JiBzY3JlZW5Q
b2ludCwKKyAgICAgICAgV2ViRHJhZ09wZXJhdGlvbnNNYXNrIG9wZXJhdGlvbnNBbGxvd2VkKTsK
ICAgICB2aXJ0dWFsIFdlYkRyYWdPcGVyYXRpb24gZHJhZ1RhcmdldERyYWdPdmVyKAogICAgICAg
ICBjb25zdCBXZWJQb2ludCYgY2xpZW50UG9pbnQsCiAgICAgICAgIGNvbnN0IFdlYlBvaW50JiBz
Y3JlZW5Qb2ludCwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70318</attachid>
            <date>2010-10-08 16:52:55 -0700</date>
            <delta_ts>2010-10-11 11:28:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>foo.patch</filename>
            <type>text/plain</type>
            <size>46038</size>
            <attacher name="Daniel Cheng">dcheng</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZWNmNzgwNi4uN2ZjMDVkNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMDAgQEAKKzIwMTAtMTAtMDkgIERhbmllbCBDaGVu
ZyAgPGRjaGVuZ0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgW2Nocm9taXVtXSBQcmVwYXJlIENsaXBib2FyZC9EcmFnRGF0YSBm
b3IgdHJhbnNpdGlvbiB0byBuZXcgZHJhZy1hbmQtZHJvcCBpbnRlcmZhY2UuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDk5MgorCisgICAgICAgIElu
IG9yZGVyIHRvIGFsbG93IGEgZ3JhY2VmdWwgdHJhbnNpdGlvbiwgQ2hyb21pdW1EYXRhT2JqZWN0
IGhhcyBiZWVuCisgICAgICAgIHJlaW1wbGVtZW50ZWQgYXMgYSB3cmFwcGVyIGFyb3VuZCB0aGUg
dGhyZWUgZGlmZmVyZW50IHR5cGVzIG9mIGRhdGEKKyAgICAgICAgb2JqZWN0cyB0aGF0IHRoZSBD
aHJvbWUgcG9ydCB1c2VzOgorICAgICAgICAxLiBDaHJvbWl1bURhdGFPYmplY3RMZWdhY3kgLS0g
dGhpcyBpcyB0aGUgb3JpZ2luYWwgQ2hyb21pdW1EYXRhT2JqZWN0LgorICAgICAgICAgICBBbGwg
dGhlIGRhdGEgdGhhdCBDbGlwYm9hcmRDaHJvbWl1bS9EcmFnRGF0YUNocm9taXVtIGNhbiBwb3Rl
bnRpYWxseQorICAgICAgICAgICB1c2UgaXMgY29waWVkIG92ZXIsIHJlZ2FyZGxlc3Mgb2Ygd2hl
dGhlciBvciBub3QgaXQgaXMgbmVlZGVkLgorICAgICAgICAyLiBSZWFkYWJsZURhdGFPYmplY3Qg
LS0gdXNlZCBmb3IgZHJhZ2dpbmcgaW4gYW5kIHBhc3RpbmcgaW50byBXZWJLaXQuCisgICAgICAg
ICAgIEZvciBlZmZpY2llbmN5LCBpdCBjYWNoZXMgYW4gb3B0aW1pc3RpYyBsaXN0IG9mIHR5cGVz
IGl0IGJlbGlldmVzIGl0CisgICAgICAgICAgIGNhbiBoYW5kbGUuIFdoZW4gZ2V0RGF0YSgpIGlz
IGNhbGxlZCwgYSBicm93c2VyIElQQyBpcyBjYWxsZWQgdG8KKyAgICAgICAgICAgcmV0cmlldmUg
dGhlIGFwcHJvcHJpYXRlIGRhdGEuCisgICAgICAgIDMuIFdyaXRhYmxlRGF0YU9iamVjdCAtLSBz
aW1pbGFyIHRvIENocm9taXVtRGF0YU9iamVjdExlZ2FjeSBpbiB0aGF0IGl0CisgICAgICAgICAg
IGJ1ZmZlcnMgYWxsIGRhdGEgd2hlbiBkcmFnZ2luZyBvdXQgb2YgV2ViS2l0IG9yIGNvcHlpbmcv
Y3V0dGluZy4KKyAgICAgICAgICAgVW5mb3J0dW5hdGVseSwgdGhlcmUgaXMgYSBkaWZmZXJlbmNl
IGJldHdlZW4gZHJhZ2dpbmcgb3V0IGFuZAorICAgICAgICAgICBjb3B5aW5nL2N1dHRpbmctLW9u
IGRyYWcgb3V0cywgdGhlIGRhdGEgaXMgYnVmZmVyZWQgYW5kIGZsdXNoZWQgb3V0CisgICAgICAg
ICAgIHdoZW4gc3RhcnREcmFnKCkgaXMgY2FsbGVkLiBGb3IgY29weS9jdXQsIGFueSBjYWxscyB0
byBzZXREYXRhKCkKKyAgICAgICAgICAgcmVzdWx0IGluIGEgYnJvd3NlciBJUEMgcmlnaHQgYXdh
eSwgc28gY2FsbHMgdG8gc2V0RGF0YSgpIGluIG9uZQorICAgICAgICAgICBjb3B5L2N1dCBldmVu
dCBhcmUgbm90IGF0b21pYy4KKworICAgICAgICBDb3B5IGFuZCBwYXN0ZSBoYXMgYmVlbiBjaGFu
Z2VkIHRvIHVzZSB0aGUgbmV3IGRhdGEgb2JqZWN0cy4gRHJhZ2dpbmcKKyAgICAgICAgb3V0IHVz
ZXMgdGhlIGxlZ2FjeSBkYXRhIG9iamVjdCwgYW5kIGRyYWdnaW5nIGluIG5vdyBoYXMgdHdvIHBv
dGVudGlhbAorICAgICAgICBlbnRyeSBwb2ludHMtLW9uZSB1c2luZyB0aGUgbGVnYWN5IGRhdGEg
b2JqZWN0LCBhbmQgb25lIHVzaW5nCisgICAgICAgIFJlYWRhYmxlRGF0YU9iamVjdC4gT25jZSBD
aHJvbWl1bSB0cmFuc2l0aW9ucyB0byB1c2luZyB0aGUgbmV3IGRyYWctaW4KKyAgICAgICAgaW50
ZXJmYWNlLCB0aGUgb2xkIGludGVyZmFjZSB3aWxsIGJlIHJlbW92ZWQuCisKKyAgICAgICAgVGhp
cyBjaGFuZ2UgaXMgY292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIFdlYkNv
cmUuZ3lwaToKKyAgICAgICAgKiBlZGl0aW5nL2Nocm9taXVtL0VkaXRvckNocm9taXVtLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bmV3R2VuZXJhbENsaXBib2FyZCk6CisgICAgICAg
ICogcGFnZS9jaHJvbWl1bS9FdmVudEhhbmRsZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpFdmVudEhhbmRsZXI6OmNyZWF0ZURyYWdnaW5nQ2xpcGJvYXJkKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpDaHJvbWl1bURhdGFPYmplY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2hy
b21pdW1EYXRhT2JqZWN0OjpjcmVhdGVSZWFkYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpDaHJv
bWl1bURhdGFPYmplY3Q6OmNyZWF0ZVdyaXRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9t
aXVtRGF0YU9iamVjdDo6Y2xlYXJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0
YU9iamVjdDo6Y2xlYXJBbGwpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0
OjpjbGVhckFsbEV4Y2VwdEZpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9i
amVjdDo6aGFzRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OnR5
cGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6Z2V0RGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OnNldERhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0Ojp1cmxUaXRsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDaHJvbWl1bURhdGFPYmplY3Q6OnNldFVybFRpdGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNo
cm9taXVtRGF0YU9iamVjdDo6aHRtbEJhc2VVcmwpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21p
dW1EYXRhT2JqZWN0OjpzZXRIdG1sQmFzZVVybCk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1
bURhdGFPYmplY3Q6OmNvbnRhaW5zRmlsZW5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9t
aXVtRGF0YU9iamVjdDo6ZmlsZW5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0
YU9iamVjdDo6c2V0RmlsZW5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9i
amVjdDo6ZmlsZUV4dGVuc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmpl
Y3Q6OnNldEZpbGVFeHRlbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2Jq
ZWN0OjpmaWxlQ29udGVudEZpbGVuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0
YU9iamVjdDo6c2V0RmlsZUNvbnRlbnRGaWxlbmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDaHJv
bWl1bURhdGFPYmplY3Q6OmZpbGVDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVt
RGF0YU9iamVjdDo6c2V0RmlsZUNvbnRlbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVt
L0Nocm9taXVtRGF0YU9iamVjdC5oOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0Nocm9t
aXVtRGF0YU9iamVjdExlZ2FjeS5jcHA6IENvcGllZCBmcm9tIENocm9taXVtRGF0YU9iamVjdC5j
cHAKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdExlZ2FjeTo6Y2xlYXJEYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdExlZ2FjeTo6Y2xlYXJBbGwp
OgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5OjpjbGVhckFsbEV4
Y2VwdEZpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdExlZ2FjeTo6
aGFzRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3RMZWdhY3k6OnR5
cGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdExlZ2FjeTo6Z2V0RGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3RMZWdhY3k6OnNldERhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5OjpDaHJvbWl1bURh
dGFPYmplY3RMZWdhY3kpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0
YU9iamVjdExlZ2FjeS5oOiBDb3BpZWQgZnJvbSBDaHJvbWl1bURhdGFPYmplY3QuaAorICAgICAg
ICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5OjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5Ojpjb3B5KToKKyAgICAgICAgKFdlYkNv
cmU6OkNocm9taXVtRGF0YU9iamVjdExlZ2FjeTo6dXJsVGl0bGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5OjpzZXRVcmxUaXRsZSk6CisgICAgICAgIChXZWJD
b3JlOjpDaHJvbWl1bURhdGFPYmplY3RMZWdhY3k6Omh0bWxCYXNlVXJsKToKKyAgICAgICAgKFdl
YkNvcmU6OkNocm9taXVtRGF0YU9iamVjdExlZ2FjeTo6c2V0SHRtbEJhc2VVcmwpOgorICAgICAg
ICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5Ojpjb250YWluc0ZpbGVuYW1lcyk6
CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3RMZWdhY3k6OmZpbGVuYW1lcyk6
CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3RMZWdhY3k6OnNldEZpbGVuYW1l
cyk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3RMZWdhY3k6OmZpbGVFeHRl
bnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5OjpzZXRG
aWxlRXh0ZW5zaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdExlZ2Fj
eTo6ZmlsZUNvbnRlbnRGaWxlbmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFP
YmplY3RMZWdhY3k6OnNldEZpbGVDb250ZW50RmlsZW5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6
Q2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5OjpmaWxlQ29udGVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpDaHJvbWl1bURhdGFPYmplY3RMZWdhY3k6OnNldEZpbGVDb250ZW50KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDbGlwYm9hcmRDaHJvbWl1bTo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1
bS9DbGlwYm9hcmRDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1JlYWRh
YmxlRGF0YU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZWFkYWJsZURhdGFPYmplY3Q6
OmdldERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1dyaXRhYmxlRGF0YU9iamVj
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXcml0YWJsZURhdGFPYmplY3Q6OnNldERhdGEpOgor
CiAyMDEwLTEwLTA4ICBEYW5pZWwgQ2hlbmcgIDxkY2hlbmdAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJD
b3JlLmd5cGkgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCAzMzY3Y2VlLi42OTE3NGNlIDEw
MDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQpAQCAtMjI5Miw2ICsyMjkyLDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9D
aHJvbWl1bUJyaWRnZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1
bURhdGFPYmplY3QuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1
bURhdGFPYmplY3QuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1E
YXRhT2JqZWN0TGVnYWN5LmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vQ2hy
b21pdW1EYXRhT2JqZWN0TGVnYWN5LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVt
L0NsaXBib2FyZENocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0v
Q2xpcGJvYXJkQ2hyb21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vQ2xp
cGJvYXJkQ2hyb21pdW1MaW51eC5jcHAnLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5nL2No
cm9taXVtL0VkaXRvckNocm9taXVtLmNwcCBiL1dlYkNvcmUvZWRpdGluZy9jaHJvbWl1bS9FZGl0
b3JDaHJvbWl1bS5jcHAKaW5kZXggMmJmYjVhZi4uY2E3ZjQxYSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9lZGl0aW5nL2Nocm9taXVtL0VkaXRvckNocm9taXVtLmNwcAorKysgYi9XZWJDb3JlL2VkaXRp
bmcvY2hyb21pdW0vRWRpdG9yQ2hyb21pdW0uY3BwCkBAIC0zOSw3ICszOSw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogUGFzc1JlZlB0cjxDbGlwYm9hcmQ+IEVkaXRvcjo6bmV3R2VuZXJhbENs
aXBib2FyZChDbGlwYm9hcmRBY2Nlc3NQb2xpY3kgcG9saWN5LCBGcmFtZSogZnJhbWUpCiB7Ci0g
ICAgcmV0dXJuIENsaXBib2FyZENocm9taXVtOjpjcmVhdGUoQ2xpcGJvYXJkOjpDb3B5QW5kUGFz
dGUsIENocm9taXVtRGF0YU9iamVjdDo6Y3JlYXRlKENsaXBib2FyZDo6Q29weUFuZFBhc3RlKSwg
cG9saWN5LCBmcmFtZSk7CisgICAgcmV0dXJuIENsaXBib2FyZENocm9taXVtOjpjcmVhdGUoQ2xp
cGJvYXJkOjpDb3B5QW5kUGFzdGUsIHBvbGljeSwgZnJhbWUpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvY2hyb21pdW0vRXZlbnRIYW5kbGVy
Q2hyb21pdW0uY3BwIGIvV2ViQ29yZS9wYWdlL2Nocm9taXVtL0V2ZW50SGFuZGxlckNocm9taXVt
LmNwcAppbmRleCA5MTM4YjhkLi45YjQwZmIzIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvY2hy
b21pdW0vRXZlbnRIYW5kbGVyQ2hyb21pdW0uY3BwCisrKyBiL1dlYkNvcmUvcGFnZS9jaHJvbWl1
bS9FdmVudEhhbmRsZXJDaHJvbWl1bS5jcHAKQEAgLTEyOCw4ICsxMjgsOCBAQCBib29sIEV2ZW50
SGFuZGxlcjo6ZXZlbnRBY3RpdmF0ZWRWaWV3KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZl
bnQpIGNvbnN0CiAKIFBhc3NSZWZQdHI8Q2xpcGJvYXJkPiBFdmVudEhhbmRsZXI6OmNyZWF0ZURy
YWdnaW5nQ2xpcGJvYXJkKCkgY29uc3QKIHsKLSAgICBSZWZQdHI8Q2hyb21pdW1EYXRhT2JqZWN0
PiBkYXRhT2JqZWN0ID0gQ2hyb21pdW1EYXRhT2JqZWN0OjpjcmVhdGUoQ2xpcGJvYXJkOjpEcmFn
QW5kRHJvcCk7Ci0gICAgcmV0dXJuIENsaXBib2FyZENocm9taXVtOjpjcmVhdGUoQ2xpcGJvYXJk
OjpEcmFnQW5kRHJvcCwgZGF0YU9iamVjdC5nZXQoKSwgQ2xpcGJvYXJkV3JpdGFibGUsIG1fZnJh
bWUpOworICAgIFJlZlB0cjxDaHJvbWl1bURhdGFPYmplY3RMZWdhY3k+IGRhdGFPYmplY3QgPSBD
aHJvbWl1bURhdGFPYmplY3RMZWdhY3k6OmNyZWF0ZShDbGlwYm9hcmQ6OkRyYWdBbmREcm9wKTsK
KyAgICByZXR1cm4gQ2xpcGJvYXJkQ2hyb21pdW06OmNyZWF0ZShDbGlwYm9hcmQ6OkRyYWdBbmRE
cm9wLCBDaHJvbWl1bURhdGFPYmplY3Q6OmNyZWF0ZShkYXRhT2JqZWN0KSwgQ2xpcGJvYXJkV3Jp
dGFibGUsIG1fZnJhbWUpOwogfQogCiB2b2lkIEV2ZW50SGFuZGxlcjo6Zm9jdXNEb2N1bWVudFZp
ZXcoKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFP
YmplY3QuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3Qu
Y3BwCmluZGV4IDczZTZmNDguLjc4Yjc5NGIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0v
Y2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2No
cm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChjKSAyMDA4LCAyMDA5LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChjKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICogCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTMxLDIyMCArMzEsMTg5IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ2hyb21pdW1EYXRhT2JqZWN0LmgiCiAK
LSNpbmNsdWRlICJDaHJvbWl1bUJyaWRnZS5oIgotI2luY2x1ZGUgIkNsaXBib2FyZE1pbWVUeXBl
cy5oIgotI2luY2x1ZGUgIlBhc3RlYm9hcmQuaCIKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0v
LyBQZXIgUkZDIDI0ODMsIHRoZSBsaW5lIHNlcGFyYXRvciBmb3IgInRleHQvLi4uIiBNSU1FIHR5
cGVzIGlzIENSLUxGLgotc3RhdGljIGNoYXIgY29uc3QqIGNvbnN0IHRleHRNSU1FVHlwZUxpbmVT
ZXBhcmF0b3IgPSAiXHJcbiI7CitDaHJvbWl1bURhdGFPYmplY3Q6OkNocm9taXVtRGF0YU9iamVj
dChQYXNzUmVmUHRyPENocm9taXVtRGF0YU9iamVjdExlZ2FjeT4gZGF0YSkKKyAgICA6IFJlZkNv
dW50ZWQ8Q2hyb21pdW1EYXRhT2JqZWN0PigpCisgICAgLCBtX2xlZ2FjeURhdGEoZGF0YSkKK3sK
K30KIAotdm9pZCBDaHJvbWl1bURhdGFPYmplY3Q6OmNsZWFyRGF0YShjb25zdCBTdHJpbmcmIHR5
cGUpCitDaHJvbWl1bURhdGFPYmplY3Q6OkNocm9taXVtRGF0YU9iamVjdChQYXNzUmVmUHRyPFJl
YWRhYmxlRGF0YU9iamVjdD4gZGF0YSkKKyAgICA6IFJlZkNvdW50ZWQ8Q2hyb21pdW1EYXRhT2Jq
ZWN0PigpCisgICAgLCBtX3JlYWRhYmxlRGF0YShkYXRhKQoreworfQorCitDaHJvbWl1bURhdGFP
YmplY3Q6OkNocm9taXVtRGF0YU9iamVjdChQYXNzUmVmUHRyPFdyaXRhYmxlRGF0YU9iamVjdD4g
ZGF0YSkKKyAgICA6IFJlZkNvdW50ZWQ8Q2hyb21pdW1EYXRhT2JqZWN0PigpCisgICAgLCBtX3dy
aXRhYmxlRGF0YShkYXRhKQogewotICAgIGlmICh0eXBlID09IG1pbWVUeXBlVGV4dFBsYWluKSB7
Ci0gICAgICAgIG1fcGxhaW5UZXh0ID0gIiI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Cit9CiAK
LSAgICBpZiAodHlwZSA9PSBtaW1lVHlwZVVSTCB8fCB0eXBlID09IG1pbWVUeXBlVGV4dFVSSUxp
c3QpIHsKLSAgICAgICAgbV91cmlMaXN0ID0gIiI7Ci0gICAgICAgIG1fdXJsID0gS1VSTCgpOwot
ICAgICAgICBtX3VybFRpdGxlID0gIiI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CitQYXNzUmVm
UHRyPENocm9taXVtRGF0YU9iamVjdD4gQ2hyb21pdW1EYXRhT2JqZWN0OjpjcmVhdGUoUGFzc1Jl
ZlB0cjxDaHJvbWl1bURhdGFPYmplY3RMZWdhY3k+IGRhdGEpCit7CisgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBDaHJvbWl1bURhdGFPYmplY3QoZGF0YSkpOworfQogCi0gICAgaWYgKHR5cGUgPT0g
bWltZVR5cGVUZXh0SFRNTCkgewotICAgICAgICBtX3RleHRIdG1sID0gIiI7Ci0gICAgICAgIG1f
aHRtbEJhc2VVcmwgPSBLVVJMKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CitQYXNzUmVmUHRy
PENocm9taXVtRGF0YU9iamVjdD4gQ2hyb21pdW1EYXRhT2JqZWN0OjpjcmVhdGVSZWFkYWJsZShD
bGlwYm9hcmQ6OkNsaXBib2FyZFR5cGUgY2xpcGJvYXJkVHlwZSkKK3sKKyAgICByZXR1cm4gYWRv
cHRSZWYobmV3IENocm9taXVtRGF0YU9iamVjdChSZWFkYWJsZURhdGFPYmplY3Q6OmNyZWF0ZShj
bGlwYm9hcmRUeXBlKSkpOworfQogCi0gICAgaWYgKHR5cGUgPT0gbWltZVR5cGVEb3dubG9hZFVS
TCkgewotICAgICAgICBtX2Rvd25sb2FkTWV0YWRhdGEgPSAiIjsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KK1Bhc3NSZWZQdHI8Q2hyb21pdW1EYXRhT2JqZWN0PiBDaHJvbWl1bURhdGFPYmplY3Q6
OmNyZWF0ZVdyaXRhYmxlKENsaXBib2FyZDo6Q2xpcGJvYXJkVHlwZSBjbGlwYm9hcmRUeXBlKQor
eworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2hyb21pdW1EYXRhT2JqZWN0KFdyaXRhYmxlRGF0
YU9iamVjdDo6Y3JlYXRlKGNsaXBib2FyZFR5cGUpKSk7Cit9CisKK3ZvaWQgQ2hyb21pdW1EYXRh
T2JqZWN0OjpjbGVhckRhdGEoY29uc3QgU3RyaW5nJiB0eXBlKQoreworICAgIGlmIChtX2xlZ2Fj
eURhdGEpCisgICAgICAgIG1fbGVnYWN5RGF0YS0+Y2xlYXJEYXRhKHR5cGUpOworICAgIGVsc2UK
KyAgICAgICAgbV93cml0YWJsZURhdGEtPmNsZWFyRGF0YSh0eXBlKTsKIH0KIAogdm9pZCBDaHJv
bWl1bURhdGFPYmplY3Q6OmNsZWFyQWxsKCkKIHsKLSAgICBjbGVhckFsbEV4Y2VwdEZpbGVzKCk7
Ci0gICAgbV9maWxlbmFtZXMuY2xlYXIoKTsKKyAgICBpZiAobV9sZWdhY3lEYXRhKQorICAgICAg
ICBtX2xlZ2FjeURhdGEtPmNsZWFyQWxsKCk7CisgICAgZWxzZQorICAgICAgICBtX3dyaXRhYmxl
RGF0YS0+Y2xlYXJBbGwoKTsKIH0KIAogdm9pZCBDaHJvbWl1bURhdGFPYmplY3Q6OmNsZWFyQWxs
RXhjZXB0RmlsZXMoKQogewotICAgIG1fdXJsVGl0bGUgPSAiIjsKLSAgICBtX3VybCA9IEtVUkwo
KTsKLSAgICBtX3VyaUxpc3QgPSAiIjsKLSAgICBtX2Rvd25sb2FkTWV0YWRhdGEgPSAiIjsKLSAg
ICBtX2ZpbGVFeHRlbnNpb24gPSAiIjsKLSAgICBtX3BsYWluVGV4dCA9ICIiOwotICAgIG1fdGV4
dEh0bWwgPSAiIjsKLSAgICBtX2h0bWxCYXNlVXJsID0gS1VSTCgpOwotICAgIG1fZmlsZUNvbnRl
bnRGaWxlbmFtZSA9ICIiOwotICAgIGlmIChtX2ZpbGVDb250ZW50KQotICAgICAgICBtX2ZpbGVD
b250ZW50LT5jbGVhcigpOworICAgIGlmIChtX2xlZ2FjeURhdGEpCisgICAgICAgIG1fbGVnYWN5
RGF0YS0+Y2xlYXJBbGxFeGNlcHRGaWxlcygpOworICAgIGVsc2UKKyAgICAgICAgbV93cml0YWJs
ZURhdGEtPmNsZWFyQWxsRXhjZXB0RmlsZXMoKTsKIH0KIAogYm9vbCBDaHJvbWl1bURhdGFPYmpl
Y3Q6Omhhc0RhdGEoKSBjb25zdAogewotICAgIHJldHVybiAhbV91cmwuaXNFbXB0eSgpCi0gICAg
ICAgIHx8ICFtX3VyaUxpc3QuaXNFbXB0eSgpCi0gICAgICAgIHx8ICFtX2Rvd25sb2FkTWV0YWRh
dGEuaXNFbXB0eSgpCi0gICAgICAgIHx8ICFtX2ZpbGVFeHRlbnNpb24uaXNFbXB0eSgpCi0gICAg
ICAgIHx8ICFtX2ZpbGVuYW1lcy5pc0VtcHR5KCkKLSAgICAgICAgfHwgIW1fcGxhaW5UZXh0Lmlz
RW1wdHkoKQotICAgICAgICB8fCAhbV90ZXh0SHRtbC5pc0VtcHR5KCkKLSAgICAgICAgfHwgbV9m
aWxlQ29udGVudDsKKyAgICBpZiAobV9sZWdhY3lEYXRhKQorICAgICAgICByZXR1cm4gbV9sZWdh
Y3lEYXRhLT5oYXNEYXRhKCk7CisgICAgcmV0dXJuIG1fcmVhZGFibGVEYXRhLT5oYXNEYXRhKCk7
CiB9CiAKIEhhc2hTZXQ8U3RyaW5nPiBDaHJvbWl1bURhdGFPYmplY3Q6OnR5cGVzKCkgY29uc3QK
IHsKLSAgICAvLyBUaGlzIGlzIGN1cnJlbnRseSBicm9rZW4gZm9yIHBhc3RlYm9hcmQgZXZlbnRz
LCBhbmQgYWx3YXlzIGhhcyBiZWVuLgotICAgIEhhc2hTZXQ8U3RyaW5nPiByZXN1bHRzOworICAg
IGlmIChtX2xlZ2FjeURhdGEpCisgICAgICAgIHJldHVybiBtX2xlZ2FjeURhdGEtPnR5cGVzKCk7
CisgICAgcmV0dXJuIG1fcmVhZGFibGVEYXRhLT50eXBlcygpOworfQorCitTdHJpbmcgQ2hyb21p
dW1EYXRhT2JqZWN0OjpnZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgYm9vbCYgc3VjY2VzcykK
K3sKKyAgICBpZiAobV9sZWdhY3lEYXRhKQorICAgICAgICByZXR1cm4gbV9sZWdhY3lEYXRhLT5n
ZXREYXRhKHR5cGUsIHN1Y2Nlc3MpOworICAgIHJldHVybiBtX3JlYWRhYmxlRGF0YS0+Z2V0RGF0
YSh0eXBlLCBzdWNjZXNzKTsKK30KKworYm9vbCBDaHJvbWl1bURhdGFPYmplY3Q6OnNldERhdGEo
Y29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpCit7CisgICAgaWYgKG1fbGVn
YWN5RGF0YSkKKyAgICAgICAgcmV0dXJuIG1fbGVnYWN5RGF0YS0+c2V0RGF0YSh0eXBlLCBkYXRh
KTsKKyAgICByZXR1cm4gbV93cml0YWJsZURhdGEtPnNldERhdGEodHlwZSwgZGF0YSk7Cit9CisK
K1N0cmluZyBDaHJvbWl1bURhdGFPYmplY3Q6OnVybFRpdGxlKCkgY29uc3QKK3sKKyAgICBpZiAo
bV9sZWdhY3lEYXRhKQorICAgICAgICByZXR1cm4gbV9sZWdhY3lEYXRhLT51cmxUaXRsZSgpOwor
ICAgIHJldHVybiBtX3JlYWRhYmxlRGF0YS0+dXJsVGl0bGUoKTsKK30KIAotICAgIGlmICghbV9w
bGFpblRleHQuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHJlc3VsdHMuYWRkKG1pbWVUeXBlVGV4dCk7
Ci0gICAgICAgIHJlc3VsdHMuYWRkKG1pbWVUeXBlVGV4dFBsYWluKTsKLSAgICB9Cit2b2lkIENo
cm9taXVtRGF0YU9iamVjdDo6c2V0VXJsVGl0bGUoY29uc3QgU3RyaW5nJiB1cmxUaXRsZSkKK3sK
KyAgICBpZiAobV9sZWdhY3lEYXRhKQorICAgICAgICBtX2xlZ2FjeURhdGEtPnNldFVybFRpdGxl
KHVybFRpdGxlKTsKKyAgICBlbHNlCisgICAgICAgIG1fd3JpdGFibGVEYXRhLT5zZXRVcmxUaXRs
ZSh1cmxUaXRsZSk7Cit9CiAKLSAgICBpZiAobV91cmwuaXNWYWxpZCgpKQotICAgICAgICByZXN1
bHRzLmFkZChtaW1lVHlwZVVSTCk7CitLVVJMIENocm9taXVtRGF0YU9iamVjdDo6aHRtbEJhc2VV
cmwoKSBjb25zdAoreworICAgIGlmIChtX2xlZ2FjeURhdGEpCisgICAgICAgIHJldHVybiBtX2xl
Z2FjeURhdGEtPmh0bWxCYXNlVXJsKCk7CisgICAgcmV0dXJuIG1fcmVhZGFibGVEYXRhLT5odG1s
QmFzZVVybCgpOworfQogCi0gICAgaWYgKCFtX3VyaUxpc3QuaXNFbXB0eSgpKQotICAgICAgICBy
ZXN1bHRzLmFkZChtaW1lVHlwZVRleHRVUklMaXN0KTsKK3ZvaWQgQ2hyb21pdW1EYXRhT2JqZWN0
OjpzZXRIdG1sQmFzZVVybChjb25zdCBLVVJMJiB1cmwpCit7CisgICAgaWYgKG1fbGVnYWN5RGF0
YSkKKyAgICAgICAgbV9sZWdhY3lEYXRhLT5zZXRIdG1sQmFzZVVybCh1cmwpOworICAgIGVsc2UK
KyAgICAgICAgbV93cml0YWJsZURhdGEtPnNldEh0bWxCYXNlVXJsKHVybCk7Cit9CiAKLSAgICBp
ZiAoIW1fdGV4dEh0bWwuaXNFbXB0eSgpKQotICAgICAgICByZXN1bHRzLmFkZChtaW1lVHlwZVRl
eHRIVE1MKTsKK2Jvb2wgQ2hyb21pdW1EYXRhT2JqZWN0Ojpjb250YWluc0ZpbGVuYW1lcygpIGNv
bnN0Cit7CisgICAgaWYgKG1fbGVnYWN5RGF0YSkKKyAgICAgICAgcmV0dXJuIG1fbGVnYWN5RGF0
YS0+Y29udGFpbnNGaWxlbmFtZXMoKTsKKyAgICByZXR1cm4gbV9yZWFkYWJsZURhdGEtPmNvbnRh
aW5zRmlsZW5hbWVzKCk7Cit9CiAKLSAgICBpZiAoIW1fZmlsZW5hbWVzLmlzRW1wdHkoKSkKLSAg
ICAgICAgcmVzdWx0cy5hZGQoIkZpbGVzIik7CitWZWN0b3I8U3RyaW5nPiBDaHJvbWl1bURhdGFP
YmplY3Q6OmZpbGVuYW1lcygpIGNvbnN0Cit7CisgICAgaWYgKG1fbGVnYWN5RGF0YSkKKyAgICAg
ICAgcmV0dXJuIG1fbGVnYWN5RGF0YS0+ZmlsZW5hbWVzKCk7CisgICAgcmV0dXJuIG1fcmVhZGFi
bGVEYXRhLT5maWxlbmFtZXMoKTsKK30KIAotICAgIHJldHVybiByZXN1bHRzOwordm9pZCBDaHJv
bWl1bURhdGFPYmplY3Q6OnNldEZpbGVuYW1lcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5h
bWVzKQoreworICAgIGlmIChtX2xlZ2FjeURhdGEpCisgICAgICAgIG1fbGVnYWN5RGF0YS0+c2V0
RmlsZW5hbWVzKGZpbGVuYW1lcyk7CisgICAgZWxzZQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKIH0KIAotU3RyaW5nIENocm9taXVtRGF0YU9iamVjdDo6Z2V0RGF0YShjb25zdCBTdHJp
bmcmIHR5cGUsIGJvb2wmIHN1Y2Nlc3MpCitTdHJpbmcgQ2hyb21pdW1EYXRhT2JqZWN0OjpmaWxl
RXh0ZW5zaW9uKCkgY29uc3QKIHsKLSAgICBpZiAodHlwZSA9PSBtaW1lVHlwZVRleHRQbGFpbikg
ewotICAgICAgICBpZiAobV9jbGlwYm9hcmRUeXBlID09IENsaXBib2FyZDo6Q29weUFuZFBhc3Rl
KSB7Ci0gICAgICAgICAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyIGJ1ZmZl
ciA9Ci0gICAgICAgICAgICAgICAgUGFzdGVib2FyZDo6Z2VuZXJhbFBhc3RlYm9hcmQoKS0+aXNT
ZWxlY3Rpb25Nb2RlKCkgPwotICAgICAgICAgICAgICAgIFBhc3RlYm9hcmRQcml2YXRlOjpTZWxl
Y3Rpb25CdWZmZXIgOgotICAgICAgICAgICAgICAgIFBhc3RlYm9hcmRQcml2YXRlOjpTdGFuZGFy
ZEJ1ZmZlcjsKLSAgICAgICAgICAgIFN0cmluZyB0ZXh0ID0gQ2hyb21pdW1CcmlkZ2U6OmNsaXBi
b2FyZFJlYWRQbGFpblRleHQoYnVmZmVyKTsKLSAgICAgICAgICAgIHN1Y2Nlc3MgPSAhdGV4dC5p
c0VtcHR5KCk7Ci0gICAgICAgICAgICByZXR1cm4gdGV4dDsKLSAgICAgICAgfQotICAgICAgICBz
dWNjZXNzID0gIW1fcGxhaW5UZXh0LmlzRW1wdHkoKTsKLSAgICAgICAgcmV0dXJuIG1fcGxhaW5U
ZXh0OwotICAgIH0KLQotICAgIGlmICh0eXBlID09IG1pbWVUeXBlVVJMKSB7Ci0gICAgICAgIHN1
Y2Nlc3MgPSAhbV91cmwuaXNFbXB0eSgpOwotICAgICAgICByZXR1cm4gbV91cmwuc3RyaW5nKCk7
Ci0gICAgfQotCi0gICAgaWYgKHR5cGUgPT0gbWltZVR5cGVUZXh0VVJJTGlzdCkgewotICAgICAg
ICBzdWNjZXNzID0gIW1fdXJpTGlzdC5pc0VtcHR5KCk7Ci0gICAgICAgIHJldHVybiBtX3VyaUxp
c3Q7Ci0gICAgfQotCi0gICAgaWYgKHR5cGUgPT0gbWltZVR5cGVUZXh0SFRNTCkgewotICAgICAg
ICBpZiAobV9jbGlwYm9hcmRUeXBlID09IENsaXBib2FyZDo6Q29weUFuZFBhc3RlKSB7Ci0gICAg
ICAgICAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyIGJ1ZmZlciA9Ci0gICAg
ICAgICAgICAgICAgUGFzdGVib2FyZDo6Z2VuZXJhbFBhc3RlYm9hcmQoKS0+aXNTZWxlY3Rpb25N
b2RlKCkgPwotICAgICAgICAgICAgICAgIFBhc3RlYm9hcmRQcml2YXRlOjpTZWxlY3Rpb25CdWZm
ZXIgOgotICAgICAgICAgICAgICAgIFBhc3RlYm9hcmRQcml2YXRlOjpTdGFuZGFyZEJ1ZmZlcjsK
LSAgICAgICAgICAgIFN0cmluZyBodG1sVGV4dDsKLSAgICAgICAgICAgIEtVUkwgc291cmNlVVJM
OwotICAgICAgICAgICAgQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFJlYWRIVE1MKGJ1ZmZlciwg
Jmh0bWxUZXh0LCAmc291cmNlVVJMKTsKLSAgICAgICAgICAgIHN1Y2Nlc3MgPSAhaHRtbFRleHQu
aXNFbXB0eSgpOwotICAgICAgICAgICAgcmV0dXJuIGh0bWxUZXh0OwotICAgICAgICB9Ci0gICAg
ICAgIHN1Y2Nlc3MgPSAhbV90ZXh0SHRtbC5pc0VtcHR5KCk7Ci0gICAgICAgIHJldHVybiBtX3Rl
eHRIdG1sOwotICAgIH0KLQotICAgIGlmICh0eXBlID09IG1pbWVUeXBlRG93bmxvYWRVUkwpIHsK
LSAgICAgICAgc3VjY2VzcyA9ICFtX2Rvd25sb2FkTWV0YWRhdGEuaXNFbXB0eSgpOwotICAgICAg
ICByZXR1cm4gbV9kb3dubG9hZE1ldGFkYXRhOwotICAgIH0KLQotICAgIHN1Y2Nlc3MgPSBmYWxz
ZTsKLSAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgaWYgKG1fbGVnYWN5RGF0YSkKKyAgICAgICAg
cmV0dXJuIG1fbGVnYWN5RGF0YS0+ZmlsZUV4dGVuc2lvbigpOworICAgIHJldHVybiBtX3dyaXRh
YmxlRGF0YS0+ZmlsZUV4dGVuc2lvbigpOwogfQogCi1ib29sIENocm9taXVtRGF0YU9iamVjdDo6
c2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSkKK3ZvaWQgQ2hy
b21pdW1EYXRhT2JqZWN0OjpzZXRGaWxlRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgZmlsZUV4dGVu
c2lvbikKIHsKLSAgICBpZiAodHlwZSA9PSBtaW1lVHlwZVRleHRQbGFpbikgewotICAgICAgICBt
X3BsYWluVGV4dCA9IGRhdGE7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlm
ICh0eXBlID09IG1pbWVUeXBlVVJMIHx8IHR5cGUgPT0gbWltZVR5cGVUZXh0VVJJTGlzdCkgewot
ICAgICAgICBtX3VybCA9IEtVUkwoKTsKLSAgICAgICAgVmVjdG9yPFN0cmluZz4gdXJpTGlzdDsK
LSAgICAgICAgLy8gTGluZSBzZXBhcmF0b3IgaXMgXHJcbiBwZXIgUkZDIDI0ODMgLSBob3dldmVy
LCBmb3IgY29tcGF0aWJpbGl0eQotICAgICAgICAvLyByZWFzb25zIHdlIGFsc28gYWxsb3cganVz
dCBcbiBoZXJlLgotICAgICAgICBkYXRhLnNwbGl0KCdcbicsIHVyaUxpc3QpOwotICAgICAgICAv
LyBQcm9jZXNzIHRoZSBpbnB1dCBhbmQgY29weSB0aGUgZmlyc3QgdmFsaWQgVVJMIGludG8gdGhl
IHVybCBtZW1iZXIuCi0gICAgICAgIC8vIEluIGNhc2Ugbm8gVVJMcyBjYW4gYmUgZm91bmQsIHN1
YnNlcXVlbnQgY2FsbHMgdG8gZ2V0RGF0YSgiVVJMIikKLSAgICAgICAgLy8gd2lsbCBnZXQgYW4g
ZW1wdHkgc3RyaW5nLiBUaGlzIGlzIGluIGxpbmUgd2l0aCB0aGUgSFRNTDUgc3BlYyAoc2VlCi0g
ICAgICAgIC8vICJUaGUgRHJhZ0V2ZW50IGFuZCBEYXRhVHJhbnNmZXIgaW50ZXJmYWNlcyIpLgot
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHVyaUxpc3Quc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgICAgIFN0cmluZyYgbGluZSA9IHVyaUxpc3RbaV07Ci0gICAgICAgICAgICBsaW5lID0g
bGluZS5zdHJpcFdoaXRlU3BhY2UoKTsKLSAgICAgICAgICAgIGlmIChsaW5lLmlzRW1wdHkoKSkg
ewotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
aWYgKGxpbmVbMF0gPT0gJyMnKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgS1VSTCB1cmwgPSBLVVJMKFBhcnNlZFVSTFN0cmluZywgbGluZSk7Ci0gICAgICAgICAgICBp
ZiAodXJsLmlzVmFsaWQoKSkgewotICAgICAgICAgICAgICAgIG1fdXJsID0gdXJsOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIG1fdXJp
TGlzdCA9IGRhdGE7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmICh0eXBl
ID09IG1pbWVUeXBlVGV4dEhUTUwpIHsKLSAgICAgICAgbV90ZXh0SHRtbCA9IGRhdGE7Ci0gICAg
ICAgIG1faHRtbEJhc2VVcmwgPSBLVVJMKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LQotICAgIGlmICh0eXBlID09IG1pbWVUeXBlRG93bmxvYWRVUkwpIHsKLSAgICAgICAgbV9kb3du
bG9hZE1ldGFkYXRhID0gZGF0YTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAg
cmV0dXJuIGZhbHNlOwotfQotCi1DaHJvbWl1bURhdGFPYmplY3Q6OkNocm9taXVtRGF0YU9iamVj
dChDbGlwYm9hcmQ6OkNsaXBib2FyZFR5cGUgY2xpcGJvYXJkVHlwZSkKLSAgICA6IG1fY2xpcGJv
YXJkVHlwZShjbGlwYm9hcmRUeXBlKQotewotfQotCi1DaHJvbWl1bURhdGFPYmplY3Q6OkNocm9t
aXVtRGF0YU9iamVjdChjb25zdCBDaHJvbWl1bURhdGFPYmplY3QmIG90aGVyKQotICAgIDogUmVm
Q291bnRlZDxDaHJvbWl1bURhdGFPYmplY3Q+KCkKLSAgICAsIG1fY2xpcGJvYXJkVHlwZShvdGhl
ci5tX2NsaXBib2FyZFR5cGUpCi0gICAgLCBtX3VybFRpdGxlKG90aGVyLm1fdXJsVGl0bGUpCi0g
ICAgLCBtX2Rvd25sb2FkTWV0YWRhdGEob3RoZXIubV9kb3dubG9hZE1ldGFkYXRhKQotICAgICwg
bV9maWxlRXh0ZW5zaW9uKG90aGVyLm1fZmlsZUV4dGVuc2lvbikKLSAgICAsIG1fZmlsZW5hbWVz
KG90aGVyLm1fZmlsZW5hbWVzKQotICAgICwgbV9wbGFpblRleHQob3RoZXIubV9wbGFpblRleHQp
Ci0gICAgLCBtX3RleHRIdG1sKG90aGVyLm1fdGV4dEh0bWwpCi0gICAgLCBtX2h0bWxCYXNlVXJs
KG90aGVyLm1faHRtbEJhc2VVcmwpCi0gICAgLCBtX2ZpbGVDb250ZW50RmlsZW5hbWUob3RoZXIu
bV9maWxlQ29udGVudEZpbGVuYW1lKQotICAgICwgbV91cmwob3RoZXIubV91cmwpCi0gICAgLCBt
X3VyaUxpc3Qob3RoZXIubV91cmlMaXN0KQotewotICAgIGlmIChvdGhlci5tX2ZpbGVDb250ZW50
LmdldCgpKQotICAgICAgICBtX2ZpbGVDb250ZW50ID0gb3RoZXIubV9maWxlQ29udGVudC0+Y29w
eSgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisgICAgaWYgKG1fbGVnYWN5RGF0YSkK
KyAgICAgICAgbV9sZWdhY3lEYXRhLT5zZXRGaWxlRXh0ZW5zaW9uKGZpbGVFeHRlbnNpb24pOwor
ICAgIGVsc2UKKyAgICAgICAgbV93cml0YWJsZURhdGEtPnNldEZpbGVFeHRlbnNpb24oZmlsZUV4
dGVuc2lvbik7Cit9CisKK1N0cmluZyBDaHJvbWl1bURhdGFPYmplY3Q6OmZpbGVDb250ZW50Rmls
ZW5hbWUoKSBjb25zdAoreworICAgIGlmIChtX2xlZ2FjeURhdGEpCisgICAgICAgIHJldHVybiBt
X2xlZ2FjeURhdGEtPmZpbGVDb250ZW50RmlsZW5hbWUoKTsKKyAgICByZXR1cm4gbV93cml0YWJs
ZURhdGEtPmZpbGVDb250ZW50RmlsZW5hbWUoKTsKK30KKwordm9pZCBDaHJvbWl1bURhdGFPYmpl
Y3Q6OnNldEZpbGVDb250ZW50RmlsZW5hbWUoY29uc3QgU3RyaW5nJiBmaWxlQ29udGVudEZpbGVu
YW1lKQoreworICAgIGlmIChtX2xlZ2FjeURhdGEpCisgICAgICAgICAgbV9sZWdhY3lEYXRhLT5z
ZXRGaWxlQ29udGVudEZpbGVuYW1lKGZpbGVDb250ZW50RmlsZW5hbWUpOworICAgIGVsc2UKKyAg
ICAgICAgICBtX3dyaXRhYmxlRGF0YS0+c2V0RmlsZUNvbnRlbnRGaWxlbmFtZShmaWxlQ29udGVu
dEZpbGVuYW1lKTsKK30KKworUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IENocm9taXVtRGF0YU9i
amVjdDo6ZmlsZUNvbnRlbnQoKSBjb25zdAoreworICAgIGlmIChtX2xlZ2FjeURhdGEpCisgICAg
ICAgIHJldHVybiBtX2xlZ2FjeURhdGEtPmZpbGVDb250ZW50KCk7CisgICAgcmV0dXJuIG1fd3Jp
dGFibGVEYXRhLT5maWxlQ29udGVudCgpOworfQorCit2b2lkIENocm9taXVtRGF0YU9iamVjdDo6
c2V0RmlsZUNvbnRlbnQoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGZpbGVDb250ZW50KQorewor
ICAgIGlmIChtX2xlZ2FjeURhdGEpCisgICAgICAgIG1fbGVnYWN5RGF0YS0+c2V0RmlsZUNvbnRl
bnQoZmlsZUNvbnRlbnQpOworICAgIGVsc2UKKyAgICAgICAgbV93cml0YWJsZURhdGEtPnNldEZp
bGVDb250ZW50KGZpbGVDb250ZW50KTsKK30KKworfQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9j
aHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuaAppbmRleCBkODY0MjNhLi40YWFjNWM5IDEwMDY0
NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5oCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmgKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA4LCAyMDA5LCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICogCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
QEAgLTMxLDMxICszMSwxOCBAQAogI2lmbmRlZiBDaHJvbWl1bURhdGFPYmplY3RfaAogI2RlZmlu
ZSBDaHJvbWl1bURhdGFPYmplY3RfaAogCi0jaW5jbHVkZSAiQ2xpcGJvYXJkLmgiCi0jaW5jbHVk
ZSAiS1VSTC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSAiU2hhcmVk
QnVmZmVyLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlICJDaHJvbWl1bURh
dGFPYmplY3RMZWdhY3kuaCIKKyNpbmNsdWRlICJSZWFkYWJsZURhdGFPYmplY3QuaCIKKyNpbmNs
dWRlICJXcml0YWJsZURhdGFPYmplY3QuaCIKICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi0vLyBBIGRhdGEgb2JqZWN0IGZvciBob2xkaW5nIGRhdGEg
dGhhdCB3b3VsZCBiZSBpbiBhIGNsaXBib2FyZCBvciBtb3ZlZAotLy8gZHVyaW5nIGEgZHJhZy1u
LWRyb3Agb3BlcmF0aW9uLiAgVGhpcyBpcyB0aGUgZGF0YSB0aGF0IFdlYkNvcmUgaXMgYXdhcmUK
LS8vIG9mIGFuZCBpcyBub3Qgc3BlY2lmaWMgdG8gYSBwbGF0Zm9ybS4KIGNsYXNzIENocm9taXVt
RGF0YU9iamVjdCA6IHB1YmxpYyBSZWZDb3VudGVkPENocm9taXVtRGF0YU9iamVjdD4gewogcHVi
bGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPENocm9taXVtRGF0YU9iamVjdD4gY3JlYXRlKENs
aXBib2FyZDo6Q2xpcGJvYXJkVHlwZSBjbGlwYm9hcmRUeXBlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBDaHJvbWl1bURhdGFPYmplY3QoY2xpcGJvYXJkVHlwZSkpOwotICAg
IH0KLQotICAgIFBhc3NSZWZQdHI8Q2hyb21pdW1EYXRhT2JqZWN0PiBjb3B5KCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2hyb21pdW1EYXRhT2JqZWN0KCp0aGlz
KSk7Ci0gICAgfQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENocm9taXVtRGF0YU9iamVjdD4gY3Jl
YXRlKFBhc3NSZWZQdHI8Q2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5PiBkYXRhKTsKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxDaHJvbWl1bURhdGFPYmplY3Q+IGNyZWF0ZVJlYWRhYmxlKENsaXBib2Fy
ZDo6Q2xpcGJvYXJkVHlwZSk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2hyb21pdW1EYXRhT2Jq
ZWN0PiBjcmVhdGVXcml0YWJsZShDbGlwYm9hcmQ6OkNsaXBib2FyZFR5cGUpOwogCiAgICAgdm9p
ZCBjbGVhckRhdGEoY29uc3QgU3RyaW5nJiB0eXBlKTsKICAgICB2b2lkIGNsZWFyQWxsKCk7CkBA
IC02OCw1MiArNTUsMzQgQEAgcHVibGljOgogICAgIGJvb2wgc2V0RGF0YShjb25zdCBTdHJpbmcm
IHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSk7CiAKICAgICAvLyBTcGVjaWFsIGhhbmRsZXJzIGZv
ciBVUkwvSFRNTCBtZXRhZGF0YS4KLSAgICBTdHJpbmcgdXJsVGl0bGUoKSBjb25zdCB7IHJldHVy
biBtX3VybFRpdGxlOyB9Ci0gICAgdm9pZCBzZXRVcmxUaXRsZShjb25zdCBTdHJpbmcmIHVybFRp
dGxlKSB7IG1fdXJsVGl0bGUgPSB1cmxUaXRsZTsgfQotICAgIEtVUkwgaHRtbEJhc2VVcmwoKSBj
b25zdCB7IHJldHVybiBtX2h0bWxCYXNlVXJsOyB9Ci0gICAgdm9pZCBzZXRIdG1sQmFzZVVybChj
b25zdCBLVVJMJiB1cmwpIHsgbV9odG1sQmFzZVVybCA9IHVybDsgfQorICAgIFN0cmluZyB1cmxU
aXRsZSgpIGNvbnN0OworICAgIHZvaWQgc2V0VXJsVGl0bGUoY29uc3QgU3RyaW5nJiB1cmxUaXRs
ZSk7CisgICAgS1VSTCBodG1sQmFzZVVybCgpIGNvbnN0OworICAgIHZvaWQgc2V0SHRtbEJhc2VV
cmwoY29uc3QgS1VSTCYgdXJsKTsKIAogICAgIC8vIFVzZWQgdG8gaGFuZGxlIGZpbGVzIGJlaW5n
IGRyYWdnZWQgaW4uCi0gICAgYm9vbCBjb250YWluc0ZpbGVuYW1lcygpIGNvbnN0IHsgcmV0dXJu
ICFtX2ZpbGVuYW1lcy5pc0VtcHR5KCk7IH0KLSAgICBWZWN0b3I8U3RyaW5nPiBmaWxlbmFtZXMo
KSBjb25zdCB7IHJldHVybiBtX2ZpbGVuYW1lczsgfQotICAgIHZvaWQgc2V0RmlsZW5hbWVzKGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMpIHsgbV9maWxlbmFtZXMgPSBmaWxlbmFtZXM7
IH0KKyAgICBib29sIGNvbnRhaW5zRmlsZW5hbWVzKCkgY29uc3Q7CisgICAgVmVjdG9yPFN0cmlu
Zz4gZmlsZW5hbWVzKCkgY29uc3Q7CisgICAgdm9pZCBzZXRGaWxlbmFtZXMoY29uc3QgVmVjdG9y
PFN0cmluZz4mIGZpbGVuYW1lcyk7CiAKICAgICAvLyBVc2VkIHRvIGhhbmRsZSBmaWxlcyAoaW1h
Z2VzKSBiZWluZyBkcmFnZ2VkIG91dC4KLSAgICBTdHJpbmcgZmlsZUV4dGVuc2lvbigpIGNvbnN0
IHsgcmV0dXJuIG1fZmlsZUV4dGVuc2lvbjsgfQotICAgIHZvaWQgc2V0RmlsZUV4dGVuc2lvbihj
b25zdCBTdHJpbmcmIGZpbGVFeHRlbnNpb24pIHsgbV9maWxlRXh0ZW5zaW9uID0gZmlsZUV4dGVu
c2lvbjsgfQotICAgIFN0cmluZyBmaWxlQ29udGVudEZpbGVuYW1lKCkgY29uc3QgeyByZXR1cm4g
bV9maWxlQ29udGVudEZpbGVuYW1lOyB9Ci0gICAgdm9pZCBzZXRGaWxlQ29udGVudEZpbGVuYW1l
KGNvbnN0IFN0cmluZyYgZmlsZUNvbnRlbnRGaWxlbmFtZSkgeyBtX2ZpbGVDb250ZW50RmlsZW5h
bWUgPSBmaWxlQ29udGVudEZpbGVuYW1lOyB9Ci0gICAgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+
IGZpbGVDb250ZW50KCkgY29uc3QgeyByZXR1cm4gbV9maWxlQ29udGVudDsgfQotICAgIHZvaWQg
c2V0RmlsZUNvbnRlbnQoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGZpbGVDb250ZW50KSB7IG1f
ZmlsZUNvbnRlbnQgPSBmaWxlQ29udGVudDsgfQorICAgIFN0cmluZyBmaWxlRXh0ZW5zaW9uKCkg
Y29uc3Q7CisgICAgdm9pZCBzZXRGaWxlRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgZmlsZUV4dGVu
c2lvbik7CisgICAgU3RyaW5nIGZpbGVDb250ZW50RmlsZW5hbWUoKSBjb25zdDsKKyAgICB2b2lk
IHNldEZpbGVDb250ZW50RmlsZW5hbWUoY29uc3QgU3RyaW5nJiBmaWxlQ29udGVudEZpbGVuYW1l
KTsKKyAgICBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZmlsZUNvbnRlbnQoKSBjb25zdDsKKyAg
ICB2b2lkIHNldEZpbGVDb250ZW50KFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBmaWxlQ29udGVu
dCk7CiAKIHByaXZhdGU6Ci0gICAgQ2hyb21pdW1EYXRhT2JqZWN0KENsaXBib2FyZDo6Q2xpcGJv
YXJkVHlwZSk7Ci0gICAgQ2hyb21pdW1EYXRhT2JqZWN0KGNvbnN0IENocm9taXVtRGF0YU9iamVj
dCYpOwotCi0gICAgQ2xpcGJvYXJkOjpDbGlwYm9hcmRUeXBlIG1fY2xpcGJvYXJkVHlwZTsKLQot
ICAgIFN0cmluZyBtX3VybFRpdGxlOwotCi0gICAgU3RyaW5nIG1fZG93bmxvYWRNZXRhZGF0YTsK
LQotICAgIFN0cmluZyBtX2ZpbGVFeHRlbnNpb247Ci0gICAgVmVjdG9yPFN0cmluZz4gbV9maWxl
bmFtZXM7Ci0KLSAgICBTdHJpbmcgbV9wbGFpblRleHQ7Ci0KLSAgICBTdHJpbmcgbV90ZXh0SHRt
bDsKLSAgICBLVVJMIG1faHRtbEJhc2VVcmw7Ci0KLSAgICBTdHJpbmcgbV9maWxlQ29udGVudEZp
bGVuYW1lOwotICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1fZmlsZUNvbnRlbnQ7CisgICAgQ2hy
b21pdW1EYXRhT2JqZWN0KFBhc3NSZWZQdHI8Q2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5Pik7Cisg
ICAgQ2hyb21pdW1EYXRhT2JqZWN0KFBhc3NSZWZQdHI8UmVhZGFibGVEYXRhT2JqZWN0Pik7Cisg
ICAgQ2hyb21pdW1EYXRhT2JqZWN0KFBhc3NSZWZQdHI8V3JpdGFibGVEYXRhT2JqZWN0Pik7CiAK
LSAgICAvLyBUaGVzZSB0d28gYXJlIGxpbmtlZC4gU2V0dGluZyBtX3VybCB3aWxsIHNldCBtX3Vy
aUxpc3QgdG8gdGhlIHNhbWUKLSAgICAvLyBzdHJpbmcgdmFsdWU7IHNldHRpbmcgbV91cmlMaXN0
IHdpbGwgY2F1c2UgaXRzIGNvbnRlbnRzIHRvIGJlIHBhcnNlZAotICAgIC8vIGFjY29yZGluZyB0
byBSRkMgMjQ4MyBhbmQgdGhlIGZpcnN0IFVSTCBmb3VuZCB3aWxsIGJlIHNldCBpbiBtX3VybC4K
LSAgICBLVVJMIG1fdXJsOwotICAgIFN0cmluZyBtX3VyaUxpc3Q7CisgICAgUmVmUHRyPENocm9t
aXVtRGF0YU9iamVjdExlZ2FjeT4gbV9sZWdhY3lEYXRhOworICAgIFJlZlB0cjxSZWFkYWJsZURh
dGFPYmplY3Q+IG1fcmVhZGFibGVEYXRhOworICAgIFJlZlB0cjxXcml0YWJsZURhdGFPYmplY3Q+
IG1fd3JpdGFibGVEYXRhOwogfTsKIAotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorfQogCiAjZW5k
aWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2Jq
ZWN0TGVnYWN5LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2Jq
ZWN0TGVnYWN5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjk1MmMw
Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURh
dGFPYmplY3RMZWdhY3kuY3BwCkBAIC0wLDAgKzEsMjQ5IEBACisvKgorICogQ29weXJpZ2h0IChj
KSAyMDA4LCAyMDA5LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJDaHJvbWl1bURhdGFPYmplY3RMZWdhY3kuaCIKKworI2luY2x1
ZGUgIkNocm9taXVtQnJpZGdlLmgiCisjaW5jbHVkZSAiQ2xpcGJvYXJkTWltZVR5cGVzLmgiCisj
aW5jbHVkZSAiUGFzdGVib2FyZC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFBlciBS
RkMgMjQ4MywgdGhlIGxpbmUgc2VwYXJhdG9yIGZvciAidGV4dC8uLi4iIE1JTUUgdHlwZXMgaXMg
Q1ItTEYuCitzdGF0aWMgY2hhciBjb25zdCogY29uc3QgdGV4dE1JTUVUeXBlTGluZVNlcGFyYXRv
ciA9ICJcclxuIjsKKwordm9pZCBDaHJvbWl1bURhdGFPYmplY3RMZWdhY3k6OmNsZWFyRGF0YShj
b25zdCBTdHJpbmcmIHR5cGUpCit7CisgICAgaWYgKHR5cGUgPT0gbWltZVR5cGVUZXh0UGxhaW4p
IHsKKyAgICAgICAgbV9wbGFpblRleHQgPSAiIjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmICh0eXBlID09IG1pbWVUeXBlVVJMIHx8IHR5cGUgPT0gbWltZVR5cGVUZXh0VVJJTGlz
dCkgeworICAgICAgICBtX3VyaUxpc3QgPSAiIjsKKyAgICAgICAgbV91cmwgPSBLVVJMKCk7Cisg
ICAgICAgIG1fdXJsVGl0bGUgPSAiIjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
ICh0eXBlID09IG1pbWVUeXBlVGV4dEhUTUwpIHsKKyAgICAgICAgbV90ZXh0SHRtbCA9ICIiOwor
ICAgICAgICBtX2h0bWxCYXNlVXJsID0gS1VSTCgpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKHR5cGUgPT0gbWltZVR5cGVEb3dubG9hZFVSTCkgeworICAgICAgICBtX2Rvd25s
b2FkTWV0YWRhdGEgPSAiIjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwordm9pZCBDaHJv
bWl1bURhdGFPYmplY3RMZWdhY3k6OmNsZWFyQWxsKCkKK3sKKyAgICBjbGVhckFsbEV4Y2VwdEZp
bGVzKCk7CisgICAgbV9maWxlbmFtZXMuY2xlYXIoKTsKK30KKwordm9pZCBDaHJvbWl1bURhdGFP
YmplY3RMZWdhY3k6OmNsZWFyQWxsRXhjZXB0RmlsZXMoKQoreworICAgIG1fdXJsVGl0bGUgPSAi
IjsKKyAgICBtX3VybCA9IEtVUkwoKTsKKyAgICBtX3VyaUxpc3QgPSAiIjsKKyAgICBtX2Rvd25s
b2FkTWV0YWRhdGEgPSAiIjsKKyAgICBtX2ZpbGVFeHRlbnNpb24gPSAiIjsKKyAgICBtX3BsYWlu
VGV4dCA9ICIiOworICAgIG1fdGV4dEh0bWwgPSAiIjsKKyAgICBtX2h0bWxCYXNlVXJsID0gS1VS
TCgpOworICAgIG1fZmlsZUNvbnRlbnRGaWxlbmFtZSA9ICIiOworICAgIGlmIChtX2ZpbGVDb250
ZW50KQorICAgICAgICBtX2ZpbGVDb250ZW50LT5jbGVhcigpOworfQorCitib29sIENocm9taXVt
RGF0YU9iamVjdExlZ2FjeTo6aGFzRGF0YSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICFtX3VybC5p
c0VtcHR5KCkKKyAgICAgICAgfHwgIW1fdXJpTGlzdC5pc0VtcHR5KCkKKyAgICAgICAgfHwgIW1f
ZG93bmxvYWRNZXRhZGF0YS5pc0VtcHR5KCkKKyAgICAgICAgfHwgIW1fZmlsZUV4dGVuc2lvbi5p
c0VtcHR5KCkKKyAgICAgICAgfHwgIW1fZmlsZW5hbWVzLmlzRW1wdHkoKQorICAgICAgICB8fCAh
bV9wbGFpblRleHQuaXNFbXB0eSgpCisgICAgICAgIHx8ICFtX3RleHRIdG1sLmlzRW1wdHkoKQor
ICAgICAgICB8fCBtX2ZpbGVDb250ZW50OworfQorCitIYXNoU2V0PFN0cmluZz4gQ2hyb21pdW1E
YXRhT2JqZWN0TGVnYWN5Ojp0eXBlcygpIGNvbnN0Cit7CisgICAgLy8gVGhpcyBpcyBjdXJyZW50
bHkgYnJva2VuIGZvciBwYXN0ZWJvYXJkIGV2ZW50cywgYW5kIGFsd2F5cyBoYXMgYmVlbi4KKyAg
ICBIYXNoU2V0PFN0cmluZz4gcmVzdWx0czsKKworICAgIGlmICghbV9wbGFpblRleHQuaXNFbXB0
eSgpKSB7CisgICAgICAgIHJlc3VsdHMuYWRkKG1pbWVUeXBlVGV4dCk7CisgICAgICAgIHJlc3Vs
dHMuYWRkKG1pbWVUeXBlVGV4dFBsYWluKTsKKyAgICB9CisKKyAgICBpZiAobV91cmwuaXNWYWxp
ZCgpKQorICAgICAgICByZXN1bHRzLmFkZChtaW1lVHlwZVVSTCk7CisKKyAgICBpZiAoIW1fdXJp
TGlzdC5pc0VtcHR5KCkpCisgICAgICAgIHJlc3VsdHMuYWRkKG1pbWVUeXBlVGV4dFVSSUxpc3Qp
OworCisgICAgaWYgKCFtX3RleHRIdG1sLmlzRW1wdHkoKSkKKyAgICAgICAgcmVzdWx0cy5hZGQo
bWltZVR5cGVUZXh0SFRNTCk7CisKKyAgICBpZiAoIW1fZmlsZW5hbWVzLmlzRW1wdHkoKSkKKyAg
ICAgICAgcmVzdWx0cy5hZGQoIkZpbGVzIik7CisKKyAgICByZXR1cm4gcmVzdWx0czsKK30KKwor
U3RyaW5nIENocm9taXVtRGF0YU9iamVjdExlZ2FjeTo6Z2V0RGF0YShjb25zdCBTdHJpbmcmIHR5
cGUsIGJvb2wmIHN1Y2Nlc3MpCit7CisgICAgaWYgKHR5cGUgPT0gbWltZVR5cGVUZXh0UGxhaW4p
IHsKKyAgICAgICAgaWYgKG1fY2xpcGJvYXJkVHlwZSA9PSBDbGlwYm9hcmQ6OkNvcHlBbmRQYXN0
ZSkgeworICAgICAgICAgICAgUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlciBidWZm
ZXIgPQorICAgICAgICAgICAgICAgIFBhc3RlYm9hcmQ6OmdlbmVyYWxQYXN0ZWJvYXJkKCktPmlz
U2VsZWN0aW9uTW9kZSgpID8KKyAgICAgICAgICAgICAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6U2Vs
ZWN0aW9uQnVmZmVyIDoKKyAgICAgICAgICAgICAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6U3RhbmRh
cmRCdWZmZXI7CisgICAgICAgICAgICBTdHJpbmcgdGV4dCA9IENocm9taXVtQnJpZGdlOjpjbGlw
Ym9hcmRSZWFkUGxhaW5UZXh0KGJ1ZmZlcik7CisgICAgICAgICAgICBzdWNjZXNzID0gIXRleHQu
aXNFbXB0eSgpOworICAgICAgICAgICAgcmV0dXJuIHRleHQ7CisgICAgICAgIH0KKyAgICAgICAg
c3VjY2VzcyA9ICFtX3BsYWluVGV4dC5pc0VtcHR5KCk7CisgICAgICAgIHJldHVybiBtX3BsYWlu
VGV4dDsKKyAgICB9CisKKyAgICBpZiAodHlwZSA9PSBtaW1lVHlwZVVSTCkgeworICAgICAgICBz
dWNjZXNzID0gIW1fdXJsLmlzRW1wdHkoKTsKKyAgICAgICAgcmV0dXJuIG1fdXJsLnN0cmluZygp
OworICAgIH0KKworICAgIGlmICh0eXBlID09IG1pbWVUeXBlVGV4dFVSSUxpc3QpIHsKKyAgICAg
ICAgc3VjY2VzcyA9ICFtX3VyaUxpc3QuaXNFbXB0eSgpOworICAgICAgICByZXR1cm4gbV91cmlM
aXN0OworICAgIH0KKworICAgIGlmICh0eXBlID09IG1pbWVUeXBlVGV4dEhUTUwpIHsKKyAgICAg
ICAgaWYgKG1fY2xpcGJvYXJkVHlwZSA9PSBDbGlwYm9hcmQ6OkNvcHlBbmRQYXN0ZSkgeworICAg
ICAgICAgICAgUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlciBidWZmZXIgPQorICAg
ICAgICAgICAgICAgIFBhc3RlYm9hcmQ6OmdlbmVyYWxQYXN0ZWJvYXJkKCktPmlzU2VsZWN0aW9u
TW9kZSgpID8KKyAgICAgICAgICAgICAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6U2VsZWN0aW9uQnVm
ZmVyIDoKKyAgICAgICAgICAgICAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6U3RhbmRhcmRCdWZmZXI7
CisgICAgICAgICAgICBTdHJpbmcgaHRtbFRleHQ7CisgICAgICAgICAgICBLVVJMIHNvdXJjZVVS
TDsKKyAgICAgICAgICAgIENocm9taXVtQnJpZGdlOjpjbGlwYm9hcmRSZWFkSFRNTChidWZmZXIs
ICZodG1sVGV4dCwgJnNvdXJjZVVSTCk7CisgICAgICAgICAgICBzdWNjZXNzID0gIWh0bWxUZXh0
LmlzRW1wdHkoKTsKKyAgICAgICAgICAgIHJldHVybiBodG1sVGV4dDsKKyAgICAgICAgfQorICAg
ICAgICBzdWNjZXNzID0gIW1fdGV4dEh0bWwuaXNFbXB0eSgpOworICAgICAgICByZXR1cm4gbV90
ZXh0SHRtbDsKKyAgICB9CisKKyAgICBpZiAodHlwZSA9PSBtaW1lVHlwZURvd25sb2FkVVJMKSB7
CisgICAgICAgIHN1Y2Nlc3MgPSAhbV9kb3dubG9hZE1ldGFkYXRhLmlzRW1wdHkoKTsKKyAgICAg
ICAgcmV0dXJuIG1fZG93bmxvYWRNZXRhZGF0YTsKKyAgICB9CisKKyAgICBzdWNjZXNzID0gZmFs
c2U7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitib29sIENocm9taXVtRGF0YU9iamVjdExl
Z2FjeTo6c2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSkKK3sK
KyAgICBpZiAodHlwZSA9PSBtaW1lVHlwZVRleHRQbGFpbikgeworICAgICAgICBtX3BsYWluVGV4
dCA9IGRhdGE7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmICh0eXBlID09
IG1pbWVUeXBlVVJMIHx8IHR5cGUgPT0gbWltZVR5cGVUZXh0VVJJTGlzdCkgeworICAgICAgICBt
X3VybCA9IEtVUkwoKTsKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gdXJpTGlzdDsKKyAgICAgICAg
Ly8gTGluZSBzZXBhcmF0b3IgaXMgXHJcbiBwZXIgUkZDIDI0ODMgLSBob3dldmVyLCBmb3IgY29t
cGF0aWJpbGl0eQorICAgICAgICAvLyByZWFzb25zIHdlIGFsc28gYWxsb3cganVzdCBcbiBoZXJl
LgorICAgICAgICBkYXRhLnNwbGl0KCdcbicsIHVyaUxpc3QpOworICAgICAgICAvLyBQcm9jZXNz
IHRoZSBpbnB1dCBhbmQgY29weSB0aGUgZmlyc3QgdmFsaWQgVVJMIGludG8gdGhlIHVybCBtZW1i
ZXIuCisgICAgICAgIC8vIEluIGNhc2Ugbm8gVVJMcyBjYW4gYmUgZm91bmQsIHN1YnNlcXVlbnQg
Y2FsbHMgdG8gZ2V0RGF0YSgiVVJMIikKKyAgICAgICAgLy8gd2lsbCBnZXQgYW4gZW1wdHkgc3Ry
aW5nLiBUaGlzIGlzIGluIGxpbmUgd2l0aCB0aGUgSFRNTDUgc3BlYyAoc2VlCisgICAgICAgIC8v
ICJUaGUgRHJhZ0V2ZW50IGFuZCBEYXRhVHJhbnNmZXIgaW50ZXJmYWNlcyIpLgorICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHVyaUxpc3Quc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAg
IFN0cmluZyYgbGluZSA9IHVyaUxpc3RbaV07CisgICAgICAgICAgICBsaW5lID0gbGluZS5zdHJp
cFdoaXRlU3BhY2UoKTsKKyAgICAgICAgICAgIGlmIChsaW5lLmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChsaW5lWzBdID09ICcjJykKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIEtVUkwgdXJsID0gS1VSTChQYXJzZWRV
UkxTdHJpbmcsIGxpbmUpOworICAgICAgICAgICAgaWYgKHVybC5pc1ZhbGlkKCkpIHsKKyAgICAg
ICAgICAgICAgICBtX3VybCA9IHVybDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICBtX3VyaUxpc3QgPSBkYXRhOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAodHlwZSA9PSBtaW1lVHlwZVRleHRIVE1MKSB7Cisg
ICAgICAgIG1fdGV4dEh0bWwgPSBkYXRhOworICAgICAgICBtX2h0bWxCYXNlVXJsID0gS1VSTCgp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAodHlwZSA9PSBtaW1lVHlw
ZURvd25sb2FkVVJMKSB7CisgICAgICAgIG1fZG93bmxvYWRNZXRhZGF0YSA9IGRhdGE7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworQ2hyb21p
dW1EYXRhT2JqZWN0TGVnYWN5OjpDaHJvbWl1bURhdGFPYmplY3RMZWdhY3koQ2xpcGJvYXJkOjpD
bGlwYm9hcmRUeXBlIGNsaXBib2FyZFR5cGUpCisgICAgOiBtX2NsaXBib2FyZFR5cGUoY2xpcGJv
YXJkVHlwZSkKK3sKK30KKworQ2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5OjpDaHJvbWl1bURhdGFP
YmplY3RMZWdhY3koY29uc3QgQ2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5JiBvdGhlcikKKyAgICA6
IFJlZkNvdW50ZWQ8Q2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5PigpCisgICAgLCBtX2NsaXBib2Fy
ZFR5cGUob3RoZXIubV9jbGlwYm9hcmRUeXBlKQorICAgICwgbV91cmxUaXRsZShvdGhlci5tX3Vy
bFRpdGxlKQorICAgICwgbV9kb3dubG9hZE1ldGFkYXRhKG90aGVyLm1fZG93bmxvYWRNZXRhZGF0
YSkKKyAgICAsIG1fZmlsZUV4dGVuc2lvbihvdGhlci5tX2ZpbGVFeHRlbnNpb24pCisgICAgLCBt
X2ZpbGVuYW1lcyhvdGhlci5tX2ZpbGVuYW1lcykKKyAgICAsIG1fcGxhaW5UZXh0KG90aGVyLm1f
cGxhaW5UZXh0KQorICAgICwgbV90ZXh0SHRtbChvdGhlci5tX3RleHRIdG1sKQorICAgICwgbV9o
dG1sQmFzZVVybChvdGhlci5tX2h0bWxCYXNlVXJsKQorICAgICwgbV9maWxlQ29udGVudEZpbGVu
YW1lKG90aGVyLm1fZmlsZUNvbnRlbnRGaWxlbmFtZSkKKyAgICAsIG1fdXJsKG90aGVyLm1fdXJs
KQorICAgICwgbV91cmlMaXN0KG90aGVyLm1fdXJpTGlzdCkKK3sKKyAgICBpZiAob3RoZXIubV9m
aWxlQ29udGVudC5nZXQoKSkKKyAgICAgICAgbV9maWxlQ29udGVudCA9IG90aGVyLm1fZmlsZUNv
bnRlbnQtPmNvcHkoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3RMZWdhY3kuaCBiL1dl
YkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5LmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTViZTdhYQotLS0gL2Rldi9udWxsCisrKyBi
L1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5LmgKQEAg
LTAsMCArMSwxMTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgsIDIwMDksIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorICogbWV0OgorICogCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDaHJvbWl1bURhdGFPYmplY3RMZWdhY3lf
aAorI2RlZmluZSBDaHJvbWl1bURhdGFPYmplY3RMZWdhY3lfaAorCisjaW5jbHVkZSAiQ2xpcGJv
YXJkLmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisj
aW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0hhc2guaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBBIGRhdGEg
b2JqZWN0IGZvciBob2xkaW5nIGRhdGEgdGhhdCB3b3VsZCBiZSBpbiBhIGNsaXBib2FyZCBvciBt
b3ZlZAorLy8gZHVyaW5nIGEgZHJhZy1uLWRyb3Agb3BlcmF0aW9uLiAgVGhpcyBpcyB0aGUgZGF0
YSB0aGF0IFdlYkNvcmUgaXMgYXdhcmUKKy8vIG9mIGFuZCBpcyBub3Qgc3BlY2lmaWMgdG8gYSBw
bGF0Zm9ybS4KK2NsYXNzIENocm9taXVtRGF0YU9iamVjdExlZ2FjeSA6IHB1YmxpYyBSZWZDb3Vu
dGVkPENocm9taXVtRGF0YU9iamVjdExlZ2FjeT4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNz
UmVmUHRyPENocm9taXVtRGF0YU9iamVjdExlZ2FjeT4gY3JlYXRlKENsaXBib2FyZDo6Q2xpcGJv
YXJkVHlwZSBjbGlwYm9hcmRUeXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBDaHJvbWl1bURhdGFPYmplY3RMZWdhY3koY2xpcGJvYXJkVHlwZSkpOworICAgIH0KKworICAg
IFBhc3NSZWZQdHI8Q2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5PiBjb3B5KCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5KCp0
aGlzKSk7CisgICAgfQorCisgICAgdm9pZCBjbGVhckRhdGEoY29uc3QgU3RyaW5nJiB0eXBlKTsK
KyAgICB2b2lkIGNsZWFyQWxsKCk7CisgICAgdm9pZCBjbGVhckFsbEV4Y2VwdEZpbGVzKCk7CisK
KyAgICBib29sIGhhc0RhdGEoKSBjb25zdDsKKworICAgIEhhc2hTZXQ8U3RyaW5nPiB0eXBlcygp
IGNvbnN0OworICAgIFN0cmluZyBnZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgYm9vbCYgc3Vj
Y2Vzcyk7CisgICAgYm9vbCBzZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5n
JiBkYXRhKTsKKworICAgIC8vIFNwZWNpYWwgaGFuZGxlcnMgZm9yIFVSTC9IVE1MIG1ldGFkYXRh
LgorICAgIFN0cmluZyB1cmxUaXRsZSgpIGNvbnN0IHsgcmV0dXJuIG1fdXJsVGl0bGU7IH0KKyAg
ICB2b2lkIHNldFVybFRpdGxlKGNvbnN0IFN0cmluZyYgdXJsVGl0bGUpIHsgbV91cmxUaXRsZSA9
IHVybFRpdGxlOyB9CisgICAgS1VSTCBodG1sQmFzZVVybCgpIGNvbnN0IHsgcmV0dXJuIG1faHRt
bEJhc2VVcmw7IH0KKyAgICB2b2lkIHNldEh0bWxCYXNlVXJsKGNvbnN0IEtVUkwmIHVybCkgeyBt
X2h0bWxCYXNlVXJsID0gdXJsOyB9CisKKyAgICAvLyBVc2VkIHRvIGhhbmRsZSBmaWxlcyBiZWlu
ZyBkcmFnZ2VkIGluLgorICAgIGJvb2wgY29udGFpbnNGaWxlbmFtZXMoKSBjb25zdCB7IHJldHVy
biAhbV9maWxlbmFtZXMuaXNFbXB0eSgpOyB9CisgICAgVmVjdG9yPFN0cmluZz4gZmlsZW5hbWVz
KCkgY29uc3QgeyByZXR1cm4gbV9maWxlbmFtZXM7IH0KKyAgICB2b2lkIHNldEZpbGVuYW1lcyhj
b25zdCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVzKSB7IG1fZmlsZW5hbWVzID0gZmlsZW5hbWVz
OyB9CisKKyAgICAvLyBVc2VkIHRvIGhhbmRsZSBmaWxlcyAoaW1hZ2VzKSBiZWluZyBkcmFnZ2Vk
IG91dC4KKyAgICBTdHJpbmcgZmlsZUV4dGVuc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fZmlsZUV4
dGVuc2lvbjsgfQorICAgIHZvaWQgc2V0RmlsZUV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGZpbGVF
eHRlbnNpb24pIHsgbV9maWxlRXh0ZW5zaW9uID0gZmlsZUV4dGVuc2lvbjsgfQorICAgIFN0cmlu
ZyBmaWxlQ29udGVudEZpbGVuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9maWxlQ29udGVudEZpbGVu
YW1lOyB9CisgICAgdm9pZCBzZXRGaWxlQ29udGVudEZpbGVuYW1lKGNvbnN0IFN0cmluZyYgZmls
ZUNvbnRlbnRGaWxlbmFtZSkgeyBtX2ZpbGVDb250ZW50RmlsZW5hbWUgPSBmaWxlQ29udGVudEZp
bGVuYW1lOyB9CisgICAgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGZpbGVDb250ZW50KCkgY29u
c3QgeyByZXR1cm4gbV9maWxlQ29udGVudDsgfQorICAgIHZvaWQgc2V0RmlsZUNvbnRlbnQoUGFz
c1JlZlB0cjxTaGFyZWRCdWZmZXI+IGZpbGVDb250ZW50KSB7IG1fZmlsZUNvbnRlbnQgPSBmaWxl
Q29udGVudDsgfQorCitwcml2YXRlOgorICAgIENocm9taXVtRGF0YU9iamVjdExlZ2FjeShDbGlw
Ym9hcmQ6OkNsaXBib2FyZFR5cGUpOworICAgIENocm9taXVtRGF0YU9iamVjdExlZ2FjeShjb25z
dCBDaHJvbWl1bURhdGFPYmplY3RMZWdhY3kmKTsKKworICAgIENsaXBib2FyZDo6Q2xpcGJvYXJk
VHlwZSBtX2NsaXBib2FyZFR5cGU7CisKKyAgICBTdHJpbmcgbV91cmxUaXRsZTsKKworICAgIFN0
cmluZyBtX2Rvd25sb2FkTWV0YWRhdGE7CisKKyAgICBTdHJpbmcgbV9maWxlRXh0ZW5zaW9uOwor
ICAgIFZlY3RvcjxTdHJpbmc+IG1fZmlsZW5hbWVzOworCisgICAgU3RyaW5nIG1fcGxhaW5UZXh0
OworCisgICAgU3RyaW5nIG1fdGV4dEh0bWw7CisgICAgS1VSTCBtX2h0bWxCYXNlVXJsOworCisg
ICAgU3RyaW5nIG1fZmlsZUNvbnRlbnRGaWxlbmFtZTsKKyAgICBSZWZQdHI8U2hhcmVkQnVmZmVy
PiBtX2ZpbGVDb250ZW50OworCisgICAgLy8gVGhlc2UgdHdvIGFyZSBsaW5rZWQuIFNldHRpbmcg
bV91cmwgd2lsbCBzZXQgbV91cmlMaXN0IHRvIHRoZSBzYW1lCisgICAgLy8gc3RyaW5nIHZhbHVl
OyBzZXR0aW5nIG1fdXJpTGlzdCB3aWxsIGNhdXNlIGl0cyBjb250ZW50cyB0byBiZSBwYXJzZWQK
KyAgICAvLyBhY2NvcmRpbmcgdG8gUkZDIDI0ODMgYW5kIHRoZSBmaXJzdCBVUkwgZm91bmQgd2ls
bCBiZSBzZXQgaW4gbV91cmwuCisgICAgS1VSTCBtX3VybDsKKyAgICBTdHJpbmcgbV91cmlMaXN0
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uY3BwIGIvV2ViQ29yZS9w
bGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5jcHAKaW5kZXggYzFiMzRkYS4uMTc3
OTE1MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJv
bWl1bS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1
bS5jcHAKQEAgLTg0LDYgKzg0LDE2IEBAIFBhc3NSZWZQdHI8Q2xpcGJvYXJkQ2hyb21pdW0+IENs
aXBib2FyZENocm9taXVtOjpjcmVhdGUoQ2xpcGJvYXJkVHlwZSBjbGlwYm9hcmRUCiAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBDbGlwYm9hcmRDaHJvbWl1bShjbGlwYm9hcmRUeXBlLCBkYXRhT2Jq
ZWN0LCBwb2xpY3ksIGZyYW1lKSk7CiB9CiAKK1Bhc3NSZWZQdHI8Q2xpcGJvYXJkQ2hyb21pdW0+
IENsaXBib2FyZENocm9taXVtOjpjcmVhdGUoQ2xpcGJvYXJkVHlwZSBjbGlwYm9hcmRUeXBlLAor
ICAgIENsaXBib2FyZEFjY2Vzc1BvbGljeSBwb2xpY3ksIEZyYW1lKiBmcmFtZSkKK3sKKyAgICBS
ZWZQdHI8Q2hyb21pdW1EYXRhT2JqZWN0PiBkYXRhT2JqZWN0ID0KKyAgICAgICAgcG9saWN5ID09
IENsaXBib2FyZFdyaXRhYmxlCisgICAgICAgID8gQ2hyb21pdW1EYXRhT2JqZWN0OjpjcmVhdGVX
cml0YWJsZShjbGlwYm9hcmRUeXBlKQorICAgICAgICA6IENocm9taXVtRGF0YU9iamVjdDo6Y3Jl
YXRlUmVhZGFibGUoY2xpcGJvYXJkVHlwZSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDbGlw
Ym9hcmRDaHJvbWl1bShjbGlwYm9hcmRUeXBlLCBkYXRhT2JqZWN0LCBwb2xpY3ksIGZyYW1lKSk7
Cit9CisKIHZvaWQgQ2xpcGJvYXJkQ2hyb21pdW06OmNsZWFyRGF0YShjb25zdCBTdHJpbmcmIHR5
cGUpCiB7CiAgICAgaWYgKHBvbGljeSgpICE9IENsaXBib2FyZFdyaXRhYmxlIHx8ICFtX2RhdGFP
YmplY3QpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENo
cm9taXVtLmggYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmgK
aW5kZXggMTRmNTllOS4uMWQ2OTkyMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0v
Q2xpcGJvYXJkQ2hyb21pdW0uaApAQCAtNDgsNiArNDgsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENsaXBib2FyZENocm9taXVtPiBjcmVhdGUoCiAg
ICAgICAgICAgICBDbGlwYm9hcmRUeXBlLCBQYXNzUmVmUHRyPENocm9taXVtRGF0YU9iamVjdD4s
IENsaXBib2FyZEFjY2Vzc1BvbGljeSwgRnJhbWUqKTsKIAorICAgICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxDbGlwYm9hcmRDaHJvbWl1bT4gY3JlYXRlKAorICAgICAgICAgICAgQ2xpcGJvYXJkVHlw
ZSwgQ2xpcGJvYXJkQWNjZXNzUG9saWN5LCBGcmFtZSopOworCiAgICAgICAgIC8vIFJldHVybnMg
dGhlIGZpbGUgbmFtZSAobm90IGluY2x1ZGluZyB0aGUgZXh0ZW5zaW9uKS4gVGhpcyByZW1vdmVz
IGFueQogICAgICAgICAvLyBpbnZhbGlkIGZpbGUgc3lzdGVtIGNoYXJhY3RlcnMgYXMgd2VsbCBh
cyBtYWtpbmcgc3VyZSB0aGUKICAgICAgICAgLy8gcGF0aCArIGV4dGVuc2lvbiBpcyBub3QgYmln
Z2VyIHRoYW4gYWxsb3dlZCBieSB0aGUgZmlsZSBzeXN0ZW0uCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BsYXRmb3JtL2Nocm9taXVtL1JlYWRhYmxlRGF0YU9iamVjdC5jcHAgYi9XZWJDb3JlL3BsYXRm
b3JtL2Nocm9taXVtL1JlYWRhYmxlRGF0YU9iamVjdC5jcHAKaW5kZXggZjBmZGQxOS4uOTdjNDgx
YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9SZWFkYWJsZURhdGFPYmpl
Y3QuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUmVhZGFibGVEYXRhT2JqZWN0
LmNwcApAQCAtMzMsNiArMzMsOCBAQAogCiAjaW5jbHVkZSAiQ2hyb21pdW1CcmlkZ2UuaCIKICNp
bmNsdWRlICJDbGlwYm9hcmRNaW1lVHlwZXMuaCIKKyNpbmNsdWRlICJQYXN0ZWJvYXJkLmgiCisj
aW5jbHVkZSAiUGFzdGVib2FyZFByaXZhdGUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBA
IC02OSw2ICs3MSwyNyBAQCBTdHJpbmcgUmVhZGFibGVEYXRhT2JqZWN0OjpnZXREYXRhKGNvbnN0
IFN0cmluZyYgdHlwZSwgYm9vbCYgc3VjY2VlZGVkKSBjb25zdAogewogICAgIFN0cmluZyBkYXRh
OwogICAgIFN0cmluZyBpZ25vcmVkTWV0YWRhdGE7CisgICAgLy8gU2luY2UgdGhlIENocm9taXVt
LXNpZGUgYnJpZGdlIGlzbid0IGNvbXBsZXRlIHlldCwgd2Ugc3BlY2lhbCBjYXNlIHRoaXMKKyAg
ICAvLyBmb3IgY29weS1hbmQtcGFzdGUsIHNpbmNlIHRoYXQgY29kZSBwYXRoIG5vIGxvbmdlciB1
c2VzCisgICAgLy8gQ2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5LgorICAgIGlmIChtX2NsaXBib2Fy
ZFR5cGUgPT0gQ2xpcGJvYXJkOjpDb3B5QW5kUGFzdGUpIHsKKyAgICAgICAgaWYgKHR5cGUgPT0g
bWltZVR5cGVUZXh0UGxhaW4pIHsKKyAgICAgICAgICAgIFBhc3RlYm9hcmRQcml2YXRlOjpDbGlw
Ym9hcmRCdWZmZXIgYnVmZmVyID0KKyAgICAgICAgICAgICAgICBQYXN0ZWJvYXJkOjpnZW5lcmFs
UGFzdGVib2FyZCgpLT5pc1NlbGVjdGlvbk1vZGUoKSA/CisgICAgICAgICAgICAgICAgUGFzdGVi
b2FyZFByaXZhdGU6OlNlbGVjdGlvbkJ1ZmZlciA6CisgICAgICAgICAgICAgICAgUGFzdGVib2Fy
ZFByaXZhdGU6OlN0YW5kYXJkQnVmZmVyOworICAgICAgICAgICAgZGF0YSA9IENocm9taXVtQnJp
ZGdlOjpjbGlwYm9hcmRSZWFkUGxhaW5UZXh0KGJ1ZmZlcik7CisgICAgICAgIH0gZWxzZSBpZiAo
dHlwZSA9PSBtaW1lVHlwZVRleHRIVE1MKSB7CisgICAgICAgICAgICBQYXN0ZWJvYXJkUHJpdmF0
ZTo6Q2xpcGJvYXJkQnVmZmVyIGJ1ZmZlciA9CisgICAgICAgICAgICAgICAgUGFzdGVib2FyZDo6
Z2VuZXJhbFBhc3RlYm9hcmQoKS0+aXNTZWxlY3Rpb25Nb2RlKCkgPworICAgICAgICAgICAgICAg
IFBhc3RlYm9hcmRQcml2YXRlOjpTZWxlY3Rpb25CdWZmZXIgOgorICAgICAgICAgICAgICAgIFBh
c3RlYm9hcmRQcml2YXRlOjpTdGFuZGFyZEJ1ZmZlcjsKKyAgICAgICAgICAgIEtVUkwgaWdub3Jl
ZFNvdXJjZVVSTDsKKyAgICAgICAgICAgIENocm9taXVtQnJpZGdlOjpjbGlwYm9hcmRSZWFkSFRN
TChidWZmZXIsICZkYXRhLCAmaWdub3JlZFNvdXJjZVVSTCk7CisgICAgICAgIH0KKyAgICAgICAg
c3VjY2VlZGVkID0gIWRhdGEuaXNFbXB0eSgpOworICAgICAgICByZXR1cm4gZGF0YTsKKyAgICB9
CiAgICAgc3VjY2VlZGVkID0gQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFJlYWREYXRhKAogICAg
ICAgICBjbGlwYm9hcmRCdWZmZXIobV9jbGlwYm9hcmRUeXBlKSwgdHlwZSwgZGF0YSwgaWdub3Jl
ZE1ldGFkYXRhKTsKICAgICByZXR1cm4gZGF0YTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vV3JpdGFibGVEYXRhT2JqZWN0LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vV3JpdGFibGVEYXRhT2JqZWN0LmNwcAppbmRleCBlYzhmZjZlLi43Y2JmNDJjIDEwMDY0
NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1dyaXRhYmxlRGF0YU9iamVjdC5jcHAK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9Xcml0YWJsZURhdGFPYmplY3QuY3BwCkBA
IC03Nyw2ICs3Nyw5IEBAIHZvaWQgV3JpdGFibGVEYXRhT2JqZWN0OjpjbGVhckFsbCgpCiBib29s
IFdyaXRhYmxlRGF0YU9iamVjdDo6c2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0
cmluZyYgZGF0YSkKIHsKICAgICBpZiAobV9jbGlwYm9hcmRUeXBlID09IENsaXBib2FyZDo6Q29w
eUFuZFBhc3RlKSB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIGN1cnJlbnRseSB1bmltcGxl
bWVudGVkIG9uIHRoZSBDaHJvbWl1bS1zaWRlLiBUaGlzIGlzCisgICAgICAgIC8vICJva2F5IiBm
b3Igbm93IHNpbmNlIHRoZSBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbiBkaWRuJ3Qgc3VwcG9ydCBp
dAorICAgICAgICAvLyBhbnl3YXkuIEdvaW5nIGZvcndhcmQsIHRoaXMgaXMgc29tZXRoaW5nIHdl
J2xsIG5lZWQgdG8gZml4IHRob3VnaC4KICAgICAgICAgQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2Fy
ZFdyaXRlRGF0YSh0eXBlLCBkYXRhLCAiIik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCmluZGV4IGZmYTdjMGIuLjcyMTA4YjMgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDI1IEBACisyMDEwLTEwLTA5ICBEYW5pZWwgQ2hlbmcgIDxkY2hlbmdAY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtjaHJvbWl1
bV0gUHJlcGFyZSBDbGlwYm9hcmQvRHJhZ0RhdGEgZm9yIHRyYW5zaXRpb24gdG8gbmV3IGRyYWct
YW5kLWRyb3AgaW50ZXJmYWNlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDQ5OTIKKworICAgICAgICBBZGQgYSBuZXcgZW50cnkgcG9pbnQgZm9yIGRy
YWcgaW4gdG8gYWxsb3cgYSBncmFjZWZ1bCB0cmFuc2l0aW9uCisgICAgICAgIGZyb20gdGhlIGxl
Z2FjeSBkcmFnIGFuZCBkcm9wIG1vZGVsLCB3aGVyZSBhbGwgZGF0YSBpcyBjb3BpZWQgaW4gYXQg
dGhlCisgICAgICAgIGJlZ2lubmluZyBvZiBhIGRyYWcsIHRvIGEgbW9kZWwgd2hlcmUgZGF0YSBp
cyByZXRyaWV2ZWQgb24gZGVtYW5kIHZpYQorICAgICAgICBJUENzLiBUaGUgcmF0aW9uYWxlIGZv
ciB0aGlzIGlzIHdoZW4gd2UgYmVnaW4gc3VwcG9ydGluZyBhcmJpdHJhcnkgTUlNRQorICAgICAg
ICB0eXBlcyBpbiBkYXRhVHJhbnNmZXIsIHdlIGRvbid0IHdhbnQgdG8gYmUgY29weWluZyBhcmli
dHJhcnkgYW1vdW50cyBvZgorICAgICAgICBkYXRhIG92ZXIgZm9yIGVhY2ggc3RhcnQgZHJhZyBJ
UEMuCisKKyAgICAgICAgKiBwdWJsaWMvV2ViVmlldy5oOgorICAgICAgICAqIHNyYy9XZWJEcmFn
RGF0YS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkRyYWdEYXRhOjppbml0aWFsaXplKTogVXNl
IHRoZSBsZWdhY3kgZGF0YSBvYmplY3QuCisgICAgICAgIChXZWJLaXQ6OldlYkRyYWdEYXRhOjpl
bnN1cmVNdXRhYmxlKTogQ2hhbmdlIHRoZSBpZiB0byBhbiBBU1NFUlQuCisgICAgICAgICogc3Jj
L1dlYlZpZXdJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmRyYWdUYXJn
ZXREcmFnRW50ZXIyKTogTmV3IGVudHJ5IHBvaW50LgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1w
bC5oOgorCiAyMDEwLTEwLTA3ICBEYXZlIE1vb3JlICA8ZGF2ZW1vb3JlQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBSZXZpZXdlZCBieSBLZW50IFRhbXVyYS4KZGlmZiAtLWdpdCBhL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvV2ViVmlldy5oIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3
LmgKaW5kZXggZmRkNDcyOS4uOTI1MzA3ZSAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJWaWV3LmgKKysrIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3LmgKQEAg
LTIyMyw2ICsyMjMsOSBAQCBwdWJsaWM6CiAgICAgICAgIGNvbnN0IFdlYkRyYWdEYXRhJiwgaW50
IGlkZW50aXR5LAogICAgICAgICBjb25zdCBXZWJQb2ludCYgY2xpZW50UG9pbnQsIGNvbnN0IFdl
YlBvaW50JiBzY3JlZW5Qb2ludCwKICAgICAgICAgV2ViRHJhZ09wZXJhdGlvbnNNYXNrIG9wZXJh
dGlvbnNBbGxvd2VkKSA9IDA7CisgICAgdmlydHVhbCBXZWJEcmFnT3BlcmF0aW9uIGRyYWdUYXJn
ZXREcmFnRW50ZXIyKAorICAgICAgICBpbnQgaWRlbnRpdHksIGNvbnN0IFdlYlBvaW50JiBjbGll
bnRQb2ludCwgY29uc3QgV2ViUG9pbnQmIHNjcmVlblBvaW50LAorICAgICAgICBXZWJEcmFnT3Bl
cmF0aW9uc01hc2sgb3BlcmF0aW9uc0FsbG93ZWQpID0gMDsKICAgICB2aXJ0dWFsIFdlYkRyYWdP
cGVyYXRpb24gZHJhZ1RhcmdldERyYWdPdmVyKAogICAgICAgICBjb25zdCBXZWJQb2ludCYgY2xp
ZW50UG9pbnQsIGNvbnN0IFdlYlBvaW50JiBzY3JlZW5Qb2ludCwKICAgICAgICAgV2ViRHJhZ09w
ZXJhdGlvbnNNYXNrIG9wZXJhdGlvbnNBbGxvd2VkKSA9IDA7CmRpZmYgLS1naXQgYS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkRyYWdEYXRhLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRHJh
Z0RhdGEuY3BwCmluZGV4IGYyNjQzNjkuLjkxNjdjNjkgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViRHJhZ0RhdGEuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRHJh
Z0RhdGEuY3BwCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiV2ViRHJhZ0RhdGEuaCIKIAog
I2luY2x1ZGUgIkNocm9taXVtRGF0YU9iamVjdC5oIgorI2luY2x1ZGUgIkNocm9taXVtRGF0YU9i
amVjdExlZ2FjeS5oIgogI2luY2x1ZGUgIkNsaXBib2FyZE1pbWVUeXBlcy5oIgogI2luY2x1ZGUg
IldlYkRhdGEuaCIKICNpbmNsdWRlICJXZWJTdHJpbmcuaCIKQEAgLTQ5LDcgKzUwLDcgQEAgY2xh
c3MgV2ViRHJhZ0RhdGFQcml2YXRlIDogcHVibGljIENocm9taXVtRGF0YU9iamVjdCB7CiAKIHZv
aWQgV2ViRHJhZ0RhdGE6OmluaXRpYWxpemUoKQogewotICAgIGFzc2lnbihzdGF0aWNfY2FzdDxX
ZWJEcmFnRGF0YVByaXZhdGUqPihDaHJvbWl1bURhdGFPYmplY3Q6OmNyZWF0ZShDbGlwYm9hcmQ6
OkRyYWdBbmREcm9wKS5yZWxlYXNlUmVmKCkpKTsKKyAgICBhc3NpZ24oc3RhdGljX2Nhc3Q8V2Vi
RHJhZ0RhdGFQcml2YXRlKj4oQ2hyb21pdW1EYXRhT2JqZWN0OjpjcmVhdGUoQ2hyb21pdW1EYXRh
T2JqZWN0TGVnYWN5OjpjcmVhdGUoQ2xpcGJvYXJkOjpEcmFnQW5kRHJvcCkpLnJlbGVhc2VSZWYo
KSkpOwogfQogCiB2b2lkIFdlYkRyYWdEYXRhOjpyZXNldCgpCkBAIC0yMzIsOCArMjMzLDcgQEAg
dm9pZCBXZWJEcmFnRGF0YTo6YXNzaWduKFdlYkRyYWdEYXRhUHJpdmF0ZSogcCkKIHZvaWQgV2Vi
RHJhZ0RhdGE6OmVuc3VyZU11dGFibGUoKQogewogICAgIEFTU0VSVCghaXNOdWxsKCkpOwotICAg
IGlmICghbV9wcml2YXRlLT5oYXNPbmVSZWYoKSkKLSAgICAgICAgYXNzaWduKHN0YXRpY19jYXN0
PFdlYkRyYWdEYXRhUHJpdmF0ZSo+KG1fcHJpdmF0ZS0+Y29weSgpLnJlbGVhc2VSZWYoKSkpOwor
ICAgIEFTU0VSVChtX3ByaXZhdGUtPmhhc09uZVJlZigpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcCBi
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCmluZGV4IDU5OWM2NWUuLjc1YzY1
YTMgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCisrKyBi
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCkBAIC0xNjgxLDYgKzE2ODEsMjEg
QEAgV2ViRHJhZ09wZXJhdGlvbiBXZWJWaWV3SW1wbDo6ZHJhZ1RhcmdldERyYWdFbnRlcigKICAg
ICByZXR1cm4gZHJhZ1RhcmdldERyYWdFbnRlck9yT3ZlcihjbGllbnRQb2ludCwgc2NyZWVuUG9p
bnQsIERyYWdFbnRlcik7CiB9CiAKK1dlYkRyYWdPcGVyYXRpb24gV2ViVmlld0ltcGw6OmRyYWdU
YXJnZXREcmFnRW50ZXIyKAorICAgIGludCBpZGVudGl0eSwKKyAgICBjb25zdCBXZWJQb2ludCYg
Y2xpZW50UG9pbnQsCisgICAgY29uc3QgV2ViUG9pbnQmIHNjcmVlblBvaW50LAorICAgIFdlYkRy
YWdPcGVyYXRpb25zTWFzayBvcGVyYXRpb25zQWxsb3dlZCkKK3sKKyAgICBBU1NFUlQoIW1fY3Vy
cmVudERyYWdEYXRhLmdldCgpKTsKKworICAgIG1fY3VycmVudERyYWdEYXRhID0gQ2hyb21pdW1E
YXRhT2JqZWN0OjpjcmVhdGVSZWFkYWJsZShDbGlwYm9hcmQ6OkRyYWdBbmREcm9wKTsKKyAgICBt
X2RyYWdJZGVudGl0eSA9IGlkZW50aXR5OworICAgIG1fb3BlcmF0aW9uc0FsbG93ZWQgPSBvcGVy
YXRpb25zQWxsb3dlZDsKKworICAgIHJldHVybiBkcmFnVGFyZ2V0RHJhZ0VudGVyT3JPdmVyKGNs
aWVudFBvaW50LCBzY3JlZW5Qb2ludCwgRHJhZ0VudGVyKTsKK30KKwogV2ViRHJhZ09wZXJhdGlv
biBXZWJWaWV3SW1wbDo6ZHJhZ1RhcmdldERyYWdPdmVyKAogICAgIGNvbnN0IFdlYlBvaW50JiBj
bGllbnRQb2ludCwKICAgICBjb25zdCBXZWJQb2ludCYgc2NyZWVuUG9pbnQsCmRpZmYgLS1naXQg
YS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmggYi9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYlZpZXdJbXBsLmgKaW5kZXggZTUxZGY0ZC4uMGE0NmU1ZSAxMDA2NDQKLS0tIGEvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
Vmlld0ltcGwuaApAQCAtMTU0LDYgKzE1NCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIGNvbnN0IFdl
YlBvaW50JiBjbGllbnRQb2ludCwKICAgICAgICAgY29uc3QgV2ViUG9pbnQmIHNjcmVlblBvaW50
LAogICAgICAgICBXZWJEcmFnT3BlcmF0aW9uc01hc2sgb3BlcmF0aW9uc0FsbG93ZWQpOworICAg
IHZpcnR1YWwgV2ViRHJhZ09wZXJhdGlvbiBkcmFnVGFyZ2V0RHJhZ0VudGVyMigKKyAgICAgICAg
aW50IGlkZW50aXR5LAorICAgICAgICBjb25zdCBXZWJQb2ludCYgY2xpZW50UG9pbnQsCisgICAg
ICAgIGNvbnN0IFdlYlBvaW50JiBzY3JlZW5Qb2ludCwKKyAgICAgICAgV2ViRHJhZ09wZXJhdGlv
bnNNYXNrIG9wZXJhdGlvbnNBbGxvd2VkKTsKICAgICB2aXJ0dWFsIFdlYkRyYWdPcGVyYXRpb24g
ZHJhZ1RhcmdldERyYWdPdmVyKAogICAgICAgICBjb25zdCBXZWJQb2ludCYgY2xpZW50UG9pbnQs
CiAgICAgICAgIGNvbnN0IFdlYlBvaW50JiBzY3JlZW5Qb2ludCwK
</data>
<flag name="review"
          id="60146"
          type_id="1"
          status="+"
          setter="tony"
    />
    <flag name="commit-queue"
          id="60147"
          type_id="3"
          status="-"
          setter="tony"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70457</attachid>
            <date>2010-10-11 11:28:23 -0700</date>
            <delta_ts>2010-10-11 11:29:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>foo.patch</filename>
            <type>text/plain</type>
            <size>46044</size>
            <attacher name="Daniel Cheng">dcheng</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NGM0ZjhiOC4uYjZkYWEyNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMDAgQEAKKzIwMTAtMTAtMDkgIERhbmllbCBDaGVu
ZyAgPGRjaGVuZ0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgW2Nocm9taXVtXSBQcmVwYXJlIENsaXBib2FyZC9EcmFnRGF0YSBm
b3IgdHJhbnNpdGlvbiB0byBuZXcgZHJhZy1hbmQtZHJvcCBpbnRlcmZhY2UuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDk5MgorCisgICAgICAgIElu
IG9yZGVyIHRvIGFsbG93IGEgZ3JhY2VmdWwgdHJhbnNpdGlvbiwgQ2hyb21pdW1EYXRhT2JqZWN0
IGhhcyBiZWVuCisgICAgICAgIHJlaW1wbGVtZW50ZWQgYXMgYSB3cmFwcGVyIGFyb3VuZCB0aGUg
dGhyZWUgZGlmZmVyZW50IHR5cGVzIG9mIGRhdGEKKyAgICAgICAgb2JqZWN0cyB0aGF0IHRoZSBD
aHJvbWUgcG9ydCB1c2VzOgorICAgICAgICAxLiBDaHJvbWl1bURhdGFPYmplY3RMZWdhY3kgLS0g
dGhpcyBpcyB0aGUgb3JpZ2luYWwgQ2hyb21pdW1EYXRhT2JqZWN0LgorICAgICAgICAgICBBbGwg
dGhlIGRhdGEgdGhhdCBDbGlwYm9hcmRDaHJvbWl1bS9EcmFnRGF0YUNocm9taXVtIGNhbiBwb3Rl
bnRpYWxseQorICAgICAgICAgICB1c2UgaXMgY29waWVkIG92ZXIsIHJlZ2FyZGxlc3Mgb2Ygd2hl
dGhlciBvciBub3QgaXQgaXMgbmVlZGVkLgorICAgICAgICAyLiBSZWFkYWJsZURhdGFPYmplY3Qg
LS0gdXNlZCBmb3IgZHJhZ2dpbmcgaW4gYW5kIHBhc3RpbmcgaW50byBXZWJLaXQuCisgICAgICAg
ICAgIEZvciBlZmZpY2llbmN5LCBpdCBjYWNoZXMgYW4gb3B0aW1pc3RpYyBsaXN0IG9mIHR5cGVz
IGl0IGJlbGlldmVzIGl0CisgICAgICAgICAgIGNhbiBoYW5kbGUuIFdoZW4gZ2V0RGF0YSgpIGlz
IGNhbGxlZCwgYSBicm93c2VyIElQQyBpcyBjYWxsZWQgdG8KKyAgICAgICAgICAgcmV0cmlldmUg
dGhlIGFwcHJvcHJpYXRlIGRhdGEuCisgICAgICAgIDMuIFdyaXRhYmxlRGF0YU9iamVjdCAtLSBz
aW1pbGFyIHRvIENocm9taXVtRGF0YU9iamVjdExlZ2FjeSBpbiB0aGF0IGl0CisgICAgICAgICAg
IGJ1ZmZlcnMgYWxsIGRhdGEgd2hlbiBkcmFnZ2luZyBvdXQgb2YgV2ViS2l0IG9yIGNvcHlpbmcv
Y3V0dGluZy4KKyAgICAgICAgICAgVW5mb3J0dW5hdGVseSwgdGhlcmUgaXMgYSBkaWZmZXJlbmNl
IGJldHdlZW4gZHJhZ2dpbmcgb3V0IGFuZAorICAgICAgICAgICBjb3B5aW5nL2N1dHRpbmctLW9u
IGRyYWcgb3V0cywgdGhlIGRhdGEgaXMgYnVmZmVyZWQgYW5kIGZsdXNoZWQgb3V0CisgICAgICAg
ICAgIHdoZW4gc3RhcnREcmFnKCkgaXMgY2FsbGVkLiBGb3IgY29weS9jdXQsIGFueSBjYWxscyB0
byBzZXREYXRhKCkKKyAgICAgICAgICAgcmVzdWx0IGluIGEgYnJvd3NlciBJUEMgcmlnaHQgYXdh
eSwgc28gY2FsbHMgdG8gc2V0RGF0YSgpIGluIG9uZQorICAgICAgICAgICBjb3B5L2N1dCBldmVu
dCBhcmUgbm90IGF0b21pYy4KKworICAgICAgICBDb3B5IGFuZCBwYXN0ZSBoYXMgYmVlbiBjaGFu
Z2VkIHRvIHVzZSB0aGUgbmV3IGRhdGEgb2JqZWN0cy4gRHJhZ2dpbmcKKyAgICAgICAgb3V0IHVz
ZXMgdGhlIGxlZ2FjeSBkYXRhIG9iamVjdCwgYW5kIGRyYWdnaW5nIGluIG5vdyBoYXMgdHdvIHBv
dGVudGlhbAorICAgICAgICBlbnRyeSBwb2ludHMtLW9uZSB1c2luZyB0aGUgbGVnYWN5IGRhdGEg
b2JqZWN0LCBhbmQgb25lIHVzaW5nCisgICAgICAgIFJlYWRhYmxlRGF0YU9iamVjdC4gT25jZSBD
aHJvbWl1bSB0cmFuc2l0aW9ucyB0byB1c2luZyB0aGUgbmV3IGRyYWctaW4KKyAgICAgICAgaW50
ZXJmYWNlLCB0aGUgb2xkIGludGVyZmFjZSB3aWxsIGJlIHJlbW92ZWQuCisKKyAgICAgICAgVGhp
cyBjaGFuZ2UgaXMgY292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIFdlYkNv
cmUuZ3lwaToKKyAgICAgICAgKiBlZGl0aW5nL2Nocm9taXVtL0VkaXRvckNocm9taXVtLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bmV3R2VuZXJhbENsaXBib2FyZCk6CisgICAgICAg
ICogcGFnZS9jaHJvbWl1bS9FdmVudEhhbmRsZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpFdmVudEhhbmRsZXI6OmNyZWF0ZURyYWdnaW5nQ2xpcGJvYXJkKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpDaHJvbWl1bURhdGFPYmplY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2hy
b21pdW1EYXRhT2JqZWN0OjpjcmVhdGVSZWFkYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpDaHJv
bWl1bURhdGFPYmplY3Q6OmNyZWF0ZVdyaXRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9t
aXVtRGF0YU9iamVjdDo6Y2xlYXJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0
YU9iamVjdDo6Y2xlYXJBbGwpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0
OjpjbGVhckFsbEV4Y2VwdEZpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9i
amVjdDo6aGFzRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OnR5
cGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6Z2V0RGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OnNldERhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0Ojp1cmxUaXRsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDaHJvbWl1bURhdGFPYmplY3Q6OnNldFVybFRpdGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNo
cm9taXVtRGF0YU9iamVjdDo6aHRtbEJhc2VVcmwpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21p
dW1EYXRhT2JqZWN0OjpzZXRIdG1sQmFzZVVybCk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1
bURhdGFPYmplY3Q6OmNvbnRhaW5zRmlsZW5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9t
aXVtRGF0YU9iamVjdDo6ZmlsZW5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0
YU9iamVjdDo6c2V0RmlsZW5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9i
amVjdDo6ZmlsZUV4dGVuc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmpl
Y3Q6OnNldEZpbGVFeHRlbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2Jq
ZWN0OjpmaWxlQ29udGVudEZpbGVuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0
YU9iamVjdDo6c2V0RmlsZUNvbnRlbnRGaWxlbmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDaHJv
bWl1bURhdGFPYmplY3Q6OmZpbGVDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVt
RGF0YU9iamVjdDo6c2V0RmlsZUNvbnRlbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVt
L0Nocm9taXVtRGF0YU9iamVjdC5oOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0Nocm9t
aXVtRGF0YU9iamVjdExlZ2FjeS5jcHA6IENvcGllZCBmcm9tIENocm9taXVtRGF0YU9iamVjdC5j
cHAKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdExlZ2FjeTo6Y2xlYXJEYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdExlZ2FjeTo6Y2xlYXJBbGwp
OgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5OjpjbGVhckFsbEV4
Y2VwdEZpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdExlZ2FjeTo6
aGFzRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3RMZWdhY3k6OnR5
cGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdExlZ2FjeTo6Z2V0RGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3RMZWdhY3k6OnNldERhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5OjpDaHJvbWl1bURh
dGFPYmplY3RMZWdhY3kpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0
YU9iamVjdExlZ2FjeS5oOiBDb3BpZWQgZnJvbSBDaHJvbWl1bURhdGFPYmplY3QuaAorICAgICAg
ICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5OjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5Ojpjb3B5KToKKyAgICAgICAgKFdlYkNv
cmU6OkNocm9taXVtRGF0YU9iamVjdExlZ2FjeTo6dXJsVGl0bGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5OjpzZXRVcmxUaXRsZSk6CisgICAgICAgIChXZWJD
b3JlOjpDaHJvbWl1bURhdGFPYmplY3RMZWdhY3k6Omh0bWxCYXNlVXJsKToKKyAgICAgICAgKFdl
YkNvcmU6OkNocm9taXVtRGF0YU9iamVjdExlZ2FjeTo6c2V0SHRtbEJhc2VVcmwpOgorICAgICAg
ICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5Ojpjb250YWluc0ZpbGVuYW1lcyk6
CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3RMZWdhY3k6OmZpbGVuYW1lcyk6
CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3RMZWdhY3k6OnNldEZpbGVuYW1l
cyk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3RMZWdhY3k6OmZpbGVFeHRl
bnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5OjpzZXRG
aWxlRXh0ZW5zaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdExlZ2Fj
eTo6ZmlsZUNvbnRlbnRGaWxlbmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFP
YmplY3RMZWdhY3k6OnNldEZpbGVDb250ZW50RmlsZW5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6
Q2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5OjpmaWxlQ29udGVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpDaHJvbWl1bURhdGFPYmplY3RMZWdhY3k6OnNldEZpbGVDb250ZW50KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDbGlwYm9hcmRDaHJvbWl1bTo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1
bS9DbGlwYm9hcmRDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1JlYWRh
YmxlRGF0YU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZWFkYWJsZURhdGFPYmplY3Q6
OmdldERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1dyaXRhYmxlRGF0YU9iamVj
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXcml0YWJsZURhdGFPYmplY3Q6OnNldERhdGEpOgor
CiAyMDEwLTEwLTA4ICBNaWhhaSBQYXJwYXJpdGEgIDxtaWhhaXBAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaSBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDMzNjdjZWUuLjY5MTc0Y2UgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5neXBp
CkBAIC0yMjkyLDYgKzIyOTIsOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL0No
cm9taXVtQnJpZGdlLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVt
RGF0YU9iamVjdC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVt
RGF0YU9iamVjdC5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURh
dGFPYmplY3RMZWdhY3kuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9DaHJv
bWl1bURhdGFPYmplY3RMZWdhY3kuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0v
Q2xpcGJvYXJkQ2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9D
bGlwYm9hcmRDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9DbGlw
Ym9hcmRDaHJvbWl1bUxpbnV4LmNwcCcsCmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvY2hy
b21pdW0vRWRpdG9yQ2hyb21pdW0uY3BwIGIvV2ViQ29yZS9lZGl0aW5nL2Nocm9taXVtL0VkaXRv
ckNocm9taXVtLmNwcAppbmRleCAyYmZiNWFmLi5jYTdmNDFhIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2VkaXRpbmcvY2hyb21pdW0vRWRpdG9yQ2hyb21pdW0uY3BwCisrKyBiL1dlYkNvcmUvZWRpdGlu
Zy9jaHJvbWl1bS9FZGl0b3JDaHJvbWl1bS5jcHAKQEAgLTM5LDcgKzM5LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBQYXNzUmVmUHRyPENsaXBib2FyZD4gRWRpdG9yOjpuZXdHZW5lcmFsQ2xp
cGJvYXJkKENsaXBib2FyZEFjY2Vzc1BvbGljeSBwb2xpY3ksIEZyYW1lKiBmcmFtZSkKIHsKLSAg
ICByZXR1cm4gQ2xpcGJvYXJkQ2hyb21pdW06OmNyZWF0ZShDbGlwYm9hcmQ6OkNvcHlBbmRQYXN0
ZSwgQ2hyb21pdW1EYXRhT2JqZWN0OjpjcmVhdGUoQ2xpcGJvYXJkOjpDb3B5QW5kUGFzdGUpLCBw
b2xpY3ksIGZyYW1lKTsKKyAgICByZXR1cm4gQ2xpcGJvYXJkQ2hyb21pdW06OmNyZWF0ZShDbGlw
Ym9hcmQ6OkNvcHlBbmRQYXN0ZSwgcG9saWN5LCBmcmFtZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9jaHJvbWl1bS9FdmVudEhhbmRsZXJD
aHJvbWl1bS5jcHAgYi9XZWJDb3JlL3BhZ2UvY2hyb21pdW0vRXZlbnRIYW5kbGVyQ2hyb21pdW0u
Y3BwCmluZGV4IDkxMzhiOGQuLjliNDBmYjMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9jaHJv
bWl1bS9FdmVudEhhbmRsZXJDaHJvbWl1bS5jcHAKKysrIGIvV2ViQ29yZS9wYWdlL2Nocm9taXVt
L0V2ZW50SGFuZGxlckNocm9taXVtLmNwcApAQCAtMTI4LDggKzEyOCw4IEBAIGJvb2wgRXZlbnRI
YW5kbGVyOjpldmVudEFjdGl2YXRlZFZpZXcoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldmVu
dCkgY29uc3QKIAogUGFzc1JlZlB0cjxDbGlwYm9hcmQ+IEV2ZW50SGFuZGxlcjo6Y3JlYXRlRHJh
Z2dpbmdDbGlwYm9hcmQoKSBjb25zdAogewotICAgIFJlZlB0cjxDaHJvbWl1bURhdGFPYmplY3Q+
IGRhdGFPYmplY3QgPSBDaHJvbWl1bURhdGFPYmplY3Q6OmNyZWF0ZShDbGlwYm9hcmQ6OkRyYWdB
bmREcm9wKTsKLSAgICByZXR1cm4gQ2xpcGJvYXJkQ2hyb21pdW06OmNyZWF0ZShDbGlwYm9hcmQ6
OkRyYWdBbmREcm9wLCBkYXRhT2JqZWN0LmdldCgpLCBDbGlwYm9hcmRXcml0YWJsZSwgbV9mcmFt
ZSk7CisgICAgUmVmUHRyPENocm9taXVtRGF0YU9iamVjdExlZ2FjeT4gZGF0YU9iamVjdCA9IENo
cm9taXVtRGF0YU9iamVjdExlZ2FjeTo6Y3JlYXRlKENsaXBib2FyZDo6RHJhZ0FuZERyb3ApOwor
ICAgIHJldHVybiBDbGlwYm9hcmRDaHJvbWl1bTo6Y3JlYXRlKENsaXBib2FyZDo6RHJhZ0FuZERy
b3AsIENocm9taXVtRGF0YU9iamVjdDo6Y3JlYXRlKGRhdGFPYmplY3QpLCBDbGlwYm9hcmRXcml0
YWJsZSwgbV9mcmFtZSk7CiB9CiAKIHZvaWQgRXZlbnRIYW5kbGVyOjpmb2N1c0RvY3VtZW50Vmll
dygpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9i
amVjdC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5j
cHAKaW5kZXggNzNlNmY0OC4uNzhiNzk0YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9j
aHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKGMpIDIwMDgsIDIwMDksIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKGMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KiAKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtMzEsMjIwICszMSwxODkgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDaHJvbWl1bURhdGFPYmplY3QuaCIKIAot
I2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiCi0jaW5jbHVkZSAiQ2xpcGJvYXJkTWltZVR5cGVz
LmgiCi0jaW5jbHVkZSAiUGFzdGVib2FyZC5oIgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8v
IFBlciBSRkMgMjQ4MywgdGhlIGxpbmUgc2VwYXJhdG9yIGZvciAidGV4dC8uLi4iIE1JTUUgdHlw
ZXMgaXMgQ1ItTEYuCi1zdGF0aWMgY2hhciBjb25zdCogY29uc3QgdGV4dE1JTUVUeXBlTGluZVNl
cGFyYXRvciA9ICJcclxuIjsKK0Nocm9taXVtRGF0YU9iamVjdDo6Q2hyb21pdW1EYXRhT2JqZWN0
KFBhc3NSZWZQdHI8Q2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5PiBkYXRhKQorICAgIDogUmVmQ291
bnRlZDxDaHJvbWl1bURhdGFPYmplY3Q+KCkKKyAgICAsIG1fbGVnYWN5RGF0YShkYXRhKQorewor
fQogCi12b2lkIENocm9taXVtRGF0YU9iamVjdDo6Y2xlYXJEYXRhKGNvbnN0IFN0cmluZyYgdHlw
ZSkKK0Nocm9taXVtRGF0YU9iamVjdDo6Q2hyb21pdW1EYXRhT2JqZWN0KFBhc3NSZWZQdHI8UmVh
ZGFibGVEYXRhT2JqZWN0PiBkYXRhKQorICAgIDogUmVmQ291bnRlZDxDaHJvbWl1bURhdGFPYmpl
Y3Q+KCkKKyAgICAsIG1fcmVhZGFibGVEYXRhKGRhdGEpCit7Cit9CisKK0Nocm9taXVtRGF0YU9i
amVjdDo6Q2hyb21pdW1EYXRhT2JqZWN0KFBhc3NSZWZQdHI8V3JpdGFibGVEYXRhT2JqZWN0PiBk
YXRhKQorICAgIDogUmVmQ291bnRlZDxDaHJvbWl1bURhdGFPYmplY3Q+KCkKKyAgICAsIG1fd3Jp
dGFibGVEYXRhKGRhdGEpCiB7Ci0gICAgaWYgKHR5cGUgPT0gbWltZVR5cGVUZXh0UGxhaW4pIHsK
LSAgICAgICAgbV9wbGFpblRleHQgPSAiIjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KK30KIAot
ICAgIGlmICh0eXBlID09IG1pbWVUeXBlVVJMIHx8IHR5cGUgPT0gbWltZVR5cGVUZXh0VVJJTGlz
dCkgewotICAgICAgICBtX3VyaUxpc3QgPSAiIjsKLSAgICAgICAgbV91cmwgPSBLVVJMKCk7Ci0g
ICAgICAgIG1fdXJsVGl0bGUgPSAiIjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KK1Bhc3NSZWZQ
dHI8Q2hyb21pdW1EYXRhT2JqZWN0PiBDaHJvbWl1bURhdGFPYmplY3Q6OmNyZWF0ZShQYXNzUmVm
UHRyPENocm9taXVtRGF0YU9iamVjdExlZ2FjeT4gZGF0YSkKK3sKKyAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IENocm9taXVtRGF0YU9iamVjdChkYXRhKSk7Cit9CiAKLSAgICBpZiAodHlwZSA9PSBt
aW1lVHlwZVRleHRIVE1MKSB7Ci0gICAgICAgIG1fdGV4dEh0bWwgPSAiIjsKLSAgICAgICAgbV9o
dG1sQmFzZVVybCA9IEtVUkwoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KK1Bhc3NSZWZQdHI8
Q2hyb21pdW1EYXRhT2JqZWN0PiBDaHJvbWl1bURhdGFPYmplY3Q6OmNyZWF0ZVJlYWRhYmxlKENs
aXBib2FyZDo6Q2xpcGJvYXJkVHlwZSBjbGlwYm9hcmRUeXBlKQoreworICAgIHJldHVybiBhZG9w
dFJlZihuZXcgQ2hyb21pdW1EYXRhT2JqZWN0KFJlYWRhYmxlRGF0YU9iamVjdDo6Y3JlYXRlKGNs
aXBib2FyZFR5cGUpKSk7Cit9CiAKLSAgICBpZiAodHlwZSA9PSBtaW1lVHlwZURvd25sb2FkVVJM
KSB7Ci0gICAgICAgIG1fZG93bmxvYWRNZXRhZGF0YSA9ICIiOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQorUGFzc1JlZlB0cjxDaHJvbWl1bURhdGFPYmplY3Q+IENocm9taXVtRGF0YU9iamVjdDo6
Y3JlYXRlV3JpdGFibGUoQ2xpcGJvYXJkOjpDbGlwYm9hcmRUeXBlIGNsaXBib2FyZFR5cGUpCit7
CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDaHJvbWl1bURhdGFPYmplY3QoV3JpdGFibGVEYXRh
T2JqZWN0OjpjcmVhdGUoY2xpcGJvYXJkVHlwZSkpKTsKK30KKwordm9pZCBDaHJvbWl1bURhdGFP
YmplY3Q6OmNsZWFyRGF0YShjb25zdCBTdHJpbmcmIHR5cGUpCit7CisgICAgaWYgKG1fbGVnYWN5
RGF0YSkKKyAgICAgICAgbV9sZWdhY3lEYXRhLT5jbGVhckRhdGEodHlwZSk7CisgICAgZWxzZQor
ICAgICAgICBtX3dyaXRhYmxlRGF0YS0+Y2xlYXJEYXRhKHR5cGUpOwogfQogCiB2b2lkIENocm9t
aXVtRGF0YU9iamVjdDo6Y2xlYXJBbGwoKQogewotICAgIGNsZWFyQWxsRXhjZXB0RmlsZXMoKTsK
LSAgICBtX2ZpbGVuYW1lcy5jbGVhcigpOworICAgIGlmIChtX2xlZ2FjeURhdGEpCisgICAgICAg
IG1fbGVnYWN5RGF0YS0+Y2xlYXJBbGwoKTsKKyAgICBlbHNlCisgICAgICAgIG1fd3JpdGFibGVE
YXRhLT5jbGVhckFsbCgpOwogfQogCiB2b2lkIENocm9taXVtRGF0YU9iamVjdDo6Y2xlYXJBbGxF
eGNlcHRGaWxlcygpCiB7Ci0gICAgbV91cmxUaXRsZSA9ICIiOwotICAgIG1fdXJsID0gS1VSTCgp
OwotICAgIG1fdXJpTGlzdCA9ICIiOwotICAgIG1fZG93bmxvYWRNZXRhZGF0YSA9ICIiOwotICAg
IG1fZmlsZUV4dGVuc2lvbiA9ICIiOwotICAgIG1fcGxhaW5UZXh0ID0gIiI7Ci0gICAgbV90ZXh0
SHRtbCA9ICIiOwotICAgIG1faHRtbEJhc2VVcmwgPSBLVVJMKCk7Ci0gICAgbV9maWxlQ29udGVu
dEZpbGVuYW1lID0gIiI7Ci0gICAgaWYgKG1fZmlsZUNvbnRlbnQpCi0gICAgICAgIG1fZmlsZUNv
bnRlbnQtPmNsZWFyKCk7CisgICAgaWYgKG1fbGVnYWN5RGF0YSkKKyAgICAgICAgbV9sZWdhY3lE
YXRhLT5jbGVhckFsbEV4Y2VwdEZpbGVzKCk7CisgICAgZWxzZQorICAgICAgICBtX3dyaXRhYmxl
RGF0YS0+Y2xlYXJBbGxFeGNlcHRGaWxlcygpOwogfQogCiBib29sIENocm9taXVtRGF0YU9iamVj
dDo6aGFzRGF0YSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICFtX3VybC5pc0VtcHR5KCkKLSAgICAg
ICAgfHwgIW1fdXJpTGlzdC5pc0VtcHR5KCkKLSAgICAgICAgfHwgIW1fZG93bmxvYWRNZXRhZGF0
YS5pc0VtcHR5KCkKLSAgICAgICAgfHwgIW1fZmlsZUV4dGVuc2lvbi5pc0VtcHR5KCkKLSAgICAg
ICAgfHwgIW1fZmlsZW5hbWVzLmlzRW1wdHkoKQotICAgICAgICB8fCAhbV9wbGFpblRleHQuaXNF
bXB0eSgpCi0gICAgICAgIHx8ICFtX3RleHRIdG1sLmlzRW1wdHkoKQotICAgICAgICB8fCBtX2Zp
bGVDb250ZW50OworICAgIGlmIChtX2xlZ2FjeURhdGEpCisgICAgICAgIHJldHVybiBtX2xlZ2Fj
eURhdGEtPmhhc0RhdGEoKTsKKyAgICByZXR1cm4gbV9yZWFkYWJsZURhdGEtPmhhc0RhdGEoKTsK
IH0KIAogSGFzaFNldDxTdHJpbmc+IENocm9taXVtRGF0YU9iamVjdDo6dHlwZXMoKSBjb25zdAog
ewotICAgIC8vIFRoaXMgaXMgY3VycmVudGx5IGJyb2tlbiBmb3IgcGFzdGVib2FyZCBldmVudHMs
IGFuZCBhbHdheXMgaGFzIGJlZW4uCi0gICAgSGFzaFNldDxTdHJpbmc+IHJlc3VsdHM7CisgICAg
aWYgKG1fbGVnYWN5RGF0YSkKKyAgICAgICAgcmV0dXJuIG1fbGVnYWN5RGF0YS0+dHlwZXMoKTsK
KyAgICByZXR1cm4gbV9yZWFkYWJsZURhdGEtPnR5cGVzKCk7Cit9CisKK1N0cmluZyBDaHJvbWl1
bURhdGFPYmplY3Q6OmdldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBib29sJiBzdWNjZXNzKQor
eworICAgIGlmIChtX2xlZ2FjeURhdGEpCisgICAgICAgIHJldHVybiBtX2xlZ2FjeURhdGEtPmdl
dERhdGEodHlwZSwgc3VjY2Vzcyk7CisgICAgcmV0dXJuIG1fcmVhZGFibGVEYXRhLT5nZXREYXRh
KHR5cGUsIHN1Y2Nlc3MpOworfQorCitib29sIENocm9taXVtRGF0YU9iamVjdDo6c2V0RGF0YShj
b25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSkKK3sKKyAgICBpZiAobV9sZWdh
Y3lEYXRhKQorICAgICAgICByZXR1cm4gbV9sZWdhY3lEYXRhLT5zZXREYXRhKHR5cGUsIGRhdGEp
OworICAgIHJldHVybiBtX3dyaXRhYmxlRGF0YS0+c2V0RGF0YSh0eXBlLCBkYXRhKTsKK30KKwor
U3RyaW5nIENocm9taXVtRGF0YU9iamVjdDo6dXJsVGl0bGUoKSBjb25zdAoreworICAgIGlmICht
X2xlZ2FjeURhdGEpCisgICAgICAgIHJldHVybiBtX2xlZ2FjeURhdGEtPnVybFRpdGxlKCk7Cisg
ICAgcmV0dXJuIG1fcmVhZGFibGVEYXRhLT51cmxUaXRsZSgpOworfQogCi0gICAgaWYgKCFtX3Bs
YWluVGV4dC5pc0VtcHR5KCkpIHsKLSAgICAgICAgcmVzdWx0cy5hZGQobWltZVR5cGVUZXh0KTsK
LSAgICAgICAgcmVzdWx0cy5hZGQobWltZVR5cGVUZXh0UGxhaW4pOwotICAgIH0KK3ZvaWQgQ2hy
b21pdW1EYXRhT2JqZWN0OjpzZXRVcmxUaXRsZShjb25zdCBTdHJpbmcmIHVybFRpdGxlKQorewor
ICAgIGlmIChtX2xlZ2FjeURhdGEpCisgICAgICAgIG1fbGVnYWN5RGF0YS0+c2V0VXJsVGl0bGUo
dXJsVGl0bGUpOworICAgIGVsc2UKKyAgICAgICAgbV93cml0YWJsZURhdGEtPnNldFVybFRpdGxl
KHVybFRpdGxlKTsKK30KIAotICAgIGlmIChtX3VybC5pc1ZhbGlkKCkpCi0gICAgICAgIHJlc3Vs
dHMuYWRkKG1pbWVUeXBlVVJMKTsKK0tVUkwgQ2hyb21pdW1EYXRhT2JqZWN0OjpodG1sQmFzZVVy
bCgpIGNvbnN0Cit7CisgICAgaWYgKG1fbGVnYWN5RGF0YSkKKyAgICAgICAgcmV0dXJuIG1fbGVn
YWN5RGF0YS0+aHRtbEJhc2VVcmwoKTsKKyAgICByZXR1cm4gbV9yZWFkYWJsZURhdGEtPmh0bWxC
YXNlVXJsKCk7Cit9CiAKLSAgICBpZiAoIW1fdXJpTGlzdC5pc0VtcHR5KCkpCi0gICAgICAgIHJl
c3VsdHMuYWRkKG1pbWVUeXBlVGV4dFVSSUxpc3QpOwordm9pZCBDaHJvbWl1bURhdGFPYmplY3Q6
OnNldEh0bWxCYXNlVXJsKGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICBpZiAobV9sZWdhY3lEYXRh
KQorICAgICAgICBtX2xlZ2FjeURhdGEtPnNldEh0bWxCYXNlVXJsKHVybCk7CisgICAgZWxzZQor
ICAgICAgICBtX3dyaXRhYmxlRGF0YS0+c2V0SHRtbEJhc2VVcmwodXJsKTsKK30KIAotICAgIGlm
ICghbV90ZXh0SHRtbC5pc0VtcHR5KCkpCi0gICAgICAgIHJlc3VsdHMuYWRkKG1pbWVUeXBlVGV4
dEhUTUwpOworYm9vbCBDaHJvbWl1bURhdGFPYmplY3Q6OmNvbnRhaW5zRmlsZW5hbWVzKCkgY29u
c3QKK3sKKyAgICBpZiAobV9sZWdhY3lEYXRhKQorICAgICAgICByZXR1cm4gbV9sZWdhY3lEYXRh
LT5jb250YWluc0ZpbGVuYW1lcygpOworICAgIHJldHVybiBtX3JlYWRhYmxlRGF0YS0+Y29udGFp
bnNGaWxlbmFtZXMoKTsKK30KIAotICAgIGlmICghbV9maWxlbmFtZXMuaXNFbXB0eSgpKQotICAg
ICAgICByZXN1bHRzLmFkZCgiRmlsZXMiKTsKK1ZlY3RvcjxTdHJpbmc+IENocm9taXVtRGF0YU9i
amVjdDo6ZmlsZW5hbWVzKCkgY29uc3QKK3sKKyAgICBpZiAobV9sZWdhY3lEYXRhKQorICAgICAg
ICByZXR1cm4gbV9sZWdhY3lEYXRhLT5maWxlbmFtZXMoKTsKKyAgICByZXR1cm4gbV9yZWFkYWJs
ZURhdGEtPmZpbGVuYW1lcygpOworfQogCi0gICAgcmV0dXJuIHJlc3VsdHM7Cit2b2lkIENocm9t
aXVtRGF0YU9iamVjdDo6c2V0RmlsZW5hbWVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFt
ZXMpCit7CisgICAgaWYgKG1fbGVnYWN5RGF0YSkKKyAgICAgICAgbV9sZWdhY3lEYXRhLT5zZXRG
aWxlbmFtZXMoZmlsZW5hbWVzKTsKKyAgICBlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogfQogCi1TdHJpbmcgQ2hyb21pdW1EYXRhT2JqZWN0OjpnZXREYXRhKGNvbnN0IFN0cmlu
ZyYgdHlwZSwgYm9vbCYgc3VjY2VzcykKK1N0cmluZyBDaHJvbWl1bURhdGFPYmplY3Q6OmZpbGVF
eHRlbnNpb24oKSBjb25zdAogewotICAgIGlmICh0eXBlID09IG1pbWVUeXBlVGV4dFBsYWluKSB7
Ci0gICAgICAgIGlmIChtX2NsaXBib2FyZFR5cGUgPT0gQ2xpcGJvYXJkOjpDb3B5QW5kUGFzdGUp
IHsKLSAgICAgICAgICAgIFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIgYnVmZmVy
ID0KLSAgICAgICAgICAgICAgICBQYXN0ZWJvYXJkOjpnZW5lcmFsUGFzdGVib2FyZCgpLT5pc1Nl
bGVjdGlvbk1vZGUoKSA/Ci0gICAgICAgICAgICAgICAgUGFzdGVib2FyZFByaXZhdGU6OlNlbGVj
dGlvbkJ1ZmZlciA6Ci0gICAgICAgICAgICAgICAgUGFzdGVib2FyZFByaXZhdGU6OlN0YW5kYXJk
QnVmZmVyOwotICAgICAgICAgICAgU3RyaW5nIHRleHQgPSBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJv
YXJkUmVhZFBsYWluVGV4dChidWZmZXIpOwotICAgICAgICAgICAgc3VjY2VzcyA9ICF0ZXh0Lmlz
RW1wdHkoKTsKLSAgICAgICAgICAgIHJldHVybiB0ZXh0OwotICAgICAgICB9Ci0gICAgICAgIHN1
Y2Nlc3MgPSAhbV9wbGFpblRleHQuaXNFbXB0eSgpOwotICAgICAgICByZXR1cm4gbV9wbGFpblRl
eHQ7Ci0gICAgfQotCi0gICAgaWYgKHR5cGUgPT0gbWltZVR5cGVVUkwpIHsKLSAgICAgICAgc3Vj
Y2VzcyA9ICFtX3VybC5pc0VtcHR5KCk7Ci0gICAgICAgIHJldHVybiBtX3VybC5zdHJpbmcoKTsK
LSAgICB9Ci0KLSAgICBpZiAodHlwZSA9PSBtaW1lVHlwZVRleHRVUklMaXN0KSB7Ci0gICAgICAg
IHN1Y2Nlc3MgPSAhbV91cmlMaXN0LmlzRW1wdHkoKTsKLSAgICAgICAgcmV0dXJuIG1fdXJpTGlz
dDsKLSAgICB9Ci0KLSAgICBpZiAodHlwZSA9PSBtaW1lVHlwZVRleHRIVE1MKSB7Ci0gICAgICAg
IGlmIChtX2NsaXBib2FyZFR5cGUgPT0gQ2xpcGJvYXJkOjpDb3B5QW5kUGFzdGUpIHsKLSAgICAg
ICAgICAgIFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIgYnVmZmVyID0KLSAgICAg
ICAgICAgICAgICBQYXN0ZWJvYXJkOjpnZW5lcmFsUGFzdGVib2FyZCgpLT5pc1NlbGVjdGlvbk1v
ZGUoKSA/Ci0gICAgICAgICAgICAgICAgUGFzdGVib2FyZFByaXZhdGU6OlNlbGVjdGlvbkJ1ZmZl
ciA6Ci0gICAgICAgICAgICAgICAgUGFzdGVib2FyZFByaXZhdGU6OlN0YW5kYXJkQnVmZmVyOwot
ICAgICAgICAgICAgU3RyaW5nIGh0bWxUZXh0OwotICAgICAgICAgICAgS1VSTCBzb3VyY2VVUkw7
Ci0gICAgICAgICAgICBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkUmVhZEhUTUwoYnVmZmVyLCAm
aHRtbFRleHQsICZzb3VyY2VVUkwpOwotICAgICAgICAgICAgc3VjY2VzcyA9ICFodG1sVGV4dC5p
c0VtcHR5KCk7Ci0gICAgICAgICAgICByZXR1cm4gaHRtbFRleHQ7Ci0gICAgICAgIH0KLSAgICAg
ICAgc3VjY2VzcyA9ICFtX3RleHRIdG1sLmlzRW1wdHkoKTsKLSAgICAgICAgcmV0dXJuIG1fdGV4
dEh0bWw7Ci0gICAgfQotCi0gICAgaWYgKHR5cGUgPT0gbWltZVR5cGVEb3dubG9hZFVSTCkgewot
ICAgICAgICBzdWNjZXNzID0gIW1fZG93bmxvYWRNZXRhZGF0YS5pc0VtcHR5KCk7Ci0gICAgICAg
IHJldHVybiBtX2Rvd25sb2FkTWV0YWRhdGE7Ci0gICAgfQotCi0gICAgc3VjY2VzcyA9IGZhbHNl
OwotICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICBpZiAobV9sZWdhY3lEYXRhKQorICAgICAgICBy
ZXR1cm4gbV9sZWdhY3lEYXRhLT5maWxlRXh0ZW5zaW9uKCk7CisgICAgcmV0dXJuIG1fd3JpdGFi
bGVEYXRhLT5maWxlRXh0ZW5zaW9uKCk7CiB9CiAKLWJvb2wgQ2hyb21pdW1EYXRhT2JqZWN0Ojpz
ZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKQordm9pZCBDaHJv
bWl1bURhdGFPYmplY3Q6OnNldEZpbGVFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBmaWxlRXh0ZW5z
aW9uKQogewotICAgIGlmICh0eXBlID09IG1pbWVUeXBlVGV4dFBsYWluKSB7Ci0gICAgICAgIG1f
cGxhaW5UZXh0ID0gZGF0YTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYg
KHR5cGUgPT0gbWltZVR5cGVVUkwgfHwgdHlwZSA9PSBtaW1lVHlwZVRleHRVUklMaXN0KSB7Ci0g
ICAgICAgIG1fdXJsID0gS1VSTCgpOwotICAgICAgICBWZWN0b3I8U3RyaW5nPiB1cmlMaXN0Owot
ICAgICAgICAvLyBMaW5lIHNlcGFyYXRvciBpcyBcclxuIHBlciBSRkMgMjQ4MyAtIGhvd2V2ZXIs
IGZvciBjb21wYXRpYmlsaXR5Ci0gICAgICAgIC8vIHJlYXNvbnMgd2UgYWxzbyBhbGxvdyBqdXN0
IFxuIGhlcmUuCi0gICAgICAgIGRhdGEuc3BsaXQoJ1xuJywgdXJpTGlzdCk7Ci0gICAgICAgIC8v
IFByb2Nlc3MgdGhlIGlucHV0IGFuZCBjb3B5IHRoZSBmaXJzdCB2YWxpZCBVUkwgaW50byB0aGUg
dXJsIG1lbWJlci4KLSAgICAgICAgLy8gSW4gY2FzZSBubyBVUkxzIGNhbiBiZSBmb3VuZCwgc3Vi
c2VxdWVudCBjYWxscyB0byBnZXREYXRhKCJVUkwiKQotICAgICAgICAvLyB3aWxsIGdldCBhbiBl
bXB0eSBzdHJpbmcuIFRoaXMgaXMgaW4gbGluZSB3aXRoIHRoZSBIVE1MNSBzcGVjIChzZWUKLSAg
ICAgICAgLy8gIlRoZSBEcmFnRXZlbnQgYW5kIERhdGFUcmFuc2ZlciBpbnRlcmZhY2VzIikuCi0g
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdXJpTGlzdC5zaXplKCk7ICsraSkgewotICAg
ICAgICAgICAgU3RyaW5nJiBsaW5lID0gdXJpTGlzdFtpXTsKLSAgICAgICAgICAgIGxpbmUgPSBs
aW5lLnN0cmlwV2hpdGVTcGFjZSgpOwotICAgICAgICAgICAgaWYgKGxpbmUuaXNFbXB0eSgpKSB7
Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBp
ZiAobGluZVswXSA9PSAnIycpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICBLVVJMIHVybCA9IEtVUkwoUGFyc2VkVVJMU3RyaW5nLCBsaW5lKTsKLSAgICAgICAgICAgIGlm
ICh1cmwuaXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICAgICAgbV91cmwgPSB1cmw7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgbV91cmlM
aXN0ID0gZGF0YTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKHR5cGUg
PT0gbWltZVR5cGVUZXh0SFRNTCkgewotICAgICAgICBtX3RleHRIdG1sID0gZGF0YTsKLSAgICAg
ICAgbV9odG1sQmFzZVVybCA9IEtVUkwoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQot
Ci0gICAgaWYgKHR5cGUgPT0gbWltZVR5cGVEb3dubG9hZFVSTCkgewotICAgICAgICBtX2Rvd25s
b2FkTWV0YWRhdGEgPSBkYXRhOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLUNocm9taXVtRGF0YU9iamVjdDo6Q2hyb21pdW1EYXRhT2JqZWN0
KENsaXBib2FyZDo6Q2xpcGJvYXJkVHlwZSBjbGlwYm9hcmRUeXBlKQotICAgIDogbV9jbGlwYm9h
cmRUeXBlKGNsaXBib2FyZFR5cGUpCi17Ci19Ci0KLUNocm9taXVtRGF0YU9iamVjdDo6Q2hyb21p
dW1EYXRhT2JqZWN0KGNvbnN0IENocm9taXVtRGF0YU9iamVjdCYgb3RoZXIpCi0gICAgOiBSZWZD
b3VudGVkPENocm9taXVtRGF0YU9iamVjdD4oKQotICAgICwgbV9jbGlwYm9hcmRUeXBlKG90aGVy
Lm1fY2xpcGJvYXJkVHlwZSkKLSAgICAsIG1fdXJsVGl0bGUob3RoZXIubV91cmxUaXRsZSkKLSAg
ICAsIG1fZG93bmxvYWRNZXRhZGF0YShvdGhlci5tX2Rvd25sb2FkTWV0YWRhdGEpCi0gICAgLCBt
X2ZpbGVFeHRlbnNpb24ob3RoZXIubV9maWxlRXh0ZW5zaW9uKQotICAgICwgbV9maWxlbmFtZXMo
b3RoZXIubV9maWxlbmFtZXMpCi0gICAgLCBtX3BsYWluVGV4dChvdGhlci5tX3BsYWluVGV4dCkK
LSAgICAsIG1fdGV4dEh0bWwob3RoZXIubV90ZXh0SHRtbCkKLSAgICAsIG1faHRtbEJhc2VVcmwo
b3RoZXIubV9odG1sQmFzZVVybCkKLSAgICAsIG1fZmlsZUNvbnRlbnRGaWxlbmFtZShvdGhlci5t
X2ZpbGVDb250ZW50RmlsZW5hbWUpCi0gICAgLCBtX3VybChvdGhlci5tX3VybCkKLSAgICAsIG1f
dXJpTGlzdChvdGhlci5tX3VyaUxpc3QpCi17Ci0gICAgaWYgKG90aGVyLm1fZmlsZUNvbnRlbnQu
Z2V0KCkpCi0gICAgICAgIG1fZmlsZUNvbnRlbnQgPSBvdGhlci5tX2ZpbGVDb250ZW50LT5jb3B5
KCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKyAgICBpZiAobV9sZWdhY3lEYXRhKQor
ICAgICAgICBtX2xlZ2FjeURhdGEtPnNldEZpbGVFeHRlbnNpb24oZmlsZUV4dGVuc2lvbik7Cisg
ICAgZWxzZQorICAgICAgICBtX3dyaXRhYmxlRGF0YS0+c2V0RmlsZUV4dGVuc2lvbihmaWxlRXh0
ZW5zaW9uKTsKK30KKworU3RyaW5nIENocm9taXVtRGF0YU9iamVjdDo6ZmlsZUNvbnRlbnRGaWxl
bmFtZSgpIGNvbnN0Cit7CisgICAgaWYgKG1fbGVnYWN5RGF0YSkKKyAgICAgICAgcmV0dXJuIG1f
bGVnYWN5RGF0YS0+ZmlsZUNvbnRlbnRGaWxlbmFtZSgpOworICAgIHJldHVybiBtX3dyaXRhYmxl
RGF0YS0+ZmlsZUNvbnRlbnRGaWxlbmFtZSgpOworfQorCit2b2lkIENocm9taXVtRGF0YU9iamVj
dDo6c2V0RmlsZUNvbnRlbnRGaWxlbmFtZShjb25zdCBTdHJpbmcmIGZpbGVDb250ZW50RmlsZW5h
bWUpCit7CisgICAgaWYgKG1fbGVnYWN5RGF0YSkKKyAgICAgICAgICBtX2xlZ2FjeURhdGEtPnNl
dEZpbGVDb250ZW50RmlsZW5hbWUoZmlsZUNvbnRlbnRGaWxlbmFtZSk7CisgICAgZWxzZQorICAg
ICAgICAgIG1fd3JpdGFibGVEYXRhLT5zZXRGaWxlQ29udGVudEZpbGVuYW1lKGZpbGVDb250ZW50
RmlsZW5hbWUpOworfQorCitQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gQ2hyb21pdW1EYXRhT2Jq
ZWN0OjpmaWxlQ29udGVudCgpIGNvbnN0Cit7CisgICAgaWYgKG1fbGVnYWN5RGF0YSkKKyAgICAg
ICAgcmV0dXJuIG1fbGVnYWN5RGF0YS0+ZmlsZUNvbnRlbnQoKTsKKyAgICByZXR1cm4gbV93cml0
YWJsZURhdGEtPmZpbGVDb250ZW50KCk7Cit9CisKK3ZvaWQgQ2hyb21pdW1EYXRhT2JqZWN0Ojpz
ZXRGaWxlQ29udGVudChQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZmlsZUNvbnRlbnQpCit7Cisg
ICAgaWYgKG1fbGVnYWN5RGF0YSkKKyAgICAgICAgbV9sZWdhY3lEYXRhLT5zZXRGaWxlQ29udGVu
dChmaWxlQ29udGVudCk7CisgICAgZWxzZQorICAgICAgICBtX3dyaXRhYmxlRGF0YS0+c2V0Rmls
ZUNvbnRlbnQoZmlsZUNvbnRlbnQpOworfQorCit9CisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmggYi9XZWJDb3JlL3BsYXRmb3JtL2No
cm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5oCmluZGV4IGQ4NjQyM2EuLjRhYWM1YzkgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmgKKysr
IGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuaApAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgsIDIwMDksIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpA
QCAtMzEsMzEgKzMxLDE4IEBACiAjaWZuZGVmIENocm9taXVtRGF0YU9iamVjdF9oCiAjZGVmaW5l
IENocm9taXVtRGF0YU9iamVjdF9oCiAKLSNpbmNsdWRlICJDbGlwYm9hcmQuaCIKLSNpbmNsdWRl
ICJLVVJMLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlICJTaGFyZWRC
dWZmZXIuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgIkNocm9taXVtRGF0
YU9iamVjdExlZ2FjeS5oIgorI2luY2x1ZGUgIlJlYWRhYmxlRGF0YU9iamVjdC5oIgorI2luY2x1
ZGUgIldyaXRhYmxlRGF0YU9iamVjdC5oIgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8vIEEgZGF0YSBvYmplY3QgZm9yIGhvbGRpbmcgZGF0YSB0
aGF0IHdvdWxkIGJlIGluIGEgY2xpcGJvYXJkIG9yIG1vdmVkCi0vLyBkdXJpbmcgYSBkcmFnLW4t
ZHJvcCBvcGVyYXRpb24uICBUaGlzIGlzIHRoZSBkYXRhIHRoYXQgV2ViQ29yZSBpcyBhd2FyZQot
Ly8gb2YgYW5kIGlzIG5vdCBzcGVjaWZpYyB0byBhIHBsYXRmb3JtLgogY2xhc3MgQ2hyb21pdW1E
YXRhT2JqZWN0IDogcHVibGljIFJlZkNvdW50ZWQ8Q2hyb21pdW1EYXRhT2JqZWN0PiB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8Q2hyb21pdW1EYXRhT2JqZWN0PiBjcmVhdGUoQ2xp
cGJvYXJkOjpDbGlwYm9hcmRUeXBlIGNsaXBib2FyZFR5cGUpCi0gICAgewotICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IENocm9taXVtRGF0YU9iamVjdChjbGlwYm9hcmRUeXBlKSk7Ci0gICAg
fQotCi0gICAgUGFzc1JlZlB0cjxDaHJvbWl1bURhdGFPYmplY3Q+IGNvcHkoKSBjb25zdAotICAg
IHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDaHJvbWl1bURhdGFPYmplY3QoKnRoaXMp
KTsKLSAgICB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2hyb21pdW1EYXRhT2JqZWN0PiBjcmVh
dGUoUGFzc1JlZlB0cjxDaHJvbWl1bURhdGFPYmplY3RMZWdhY3k+IGRhdGEpOworICAgIHN0YXRp
YyBQYXNzUmVmUHRyPENocm9taXVtRGF0YU9iamVjdD4gY3JlYXRlUmVhZGFibGUoQ2xpcGJvYXJk
OjpDbGlwYm9hcmRUeXBlKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDaHJvbWl1bURhdGFPYmpl
Y3Q+IGNyZWF0ZVdyaXRhYmxlKENsaXBib2FyZDo6Q2xpcGJvYXJkVHlwZSk7CiAKICAgICB2b2lk
IGNsZWFyRGF0YShjb25zdCBTdHJpbmcmIHR5cGUpOwogICAgIHZvaWQgY2xlYXJBbGwoKTsKQEAg
LTY4LDUyICs1NSwzNCBAQCBwdWJsaWM6CiAgICAgYm9vbCBzZXREYXRhKGNvbnN0IFN0cmluZyYg
dHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKTsKIAogICAgIC8vIFNwZWNpYWwgaGFuZGxlcnMgZm9y
IFVSTC9IVE1MIG1ldGFkYXRhLgotICAgIFN0cmluZyB1cmxUaXRsZSgpIGNvbnN0IHsgcmV0dXJu
IG1fdXJsVGl0bGU7IH0KLSAgICB2b2lkIHNldFVybFRpdGxlKGNvbnN0IFN0cmluZyYgdXJsVGl0
bGUpIHsgbV91cmxUaXRsZSA9IHVybFRpdGxlOyB9Ci0gICAgS1VSTCBodG1sQmFzZVVybCgpIGNv
bnN0IHsgcmV0dXJuIG1faHRtbEJhc2VVcmw7IH0KLSAgICB2b2lkIHNldEh0bWxCYXNlVXJsKGNv
bnN0IEtVUkwmIHVybCkgeyBtX2h0bWxCYXNlVXJsID0gdXJsOyB9CisgICAgU3RyaW5nIHVybFRp
dGxlKCkgY29uc3Q7CisgICAgdm9pZCBzZXRVcmxUaXRsZShjb25zdCBTdHJpbmcmIHVybFRpdGxl
KTsKKyAgICBLVVJMIGh0bWxCYXNlVXJsKCkgY29uc3Q7CisgICAgdm9pZCBzZXRIdG1sQmFzZVVy
bChjb25zdCBLVVJMJiB1cmwpOwogCiAgICAgLy8gVXNlZCB0byBoYW5kbGUgZmlsZXMgYmVpbmcg
ZHJhZ2dlZCBpbi4KLSAgICBib29sIGNvbnRhaW5zRmlsZW5hbWVzKCkgY29uc3QgeyByZXR1cm4g
IW1fZmlsZW5hbWVzLmlzRW1wdHkoKTsgfQotICAgIFZlY3RvcjxTdHJpbmc+IGZpbGVuYW1lcygp
IGNvbnN0IHsgcmV0dXJuIG1fZmlsZW5hbWVzOyB9Ci0gICAgdm9pZCBzZXRGaWxlbmFtZXMoY29u
c3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcykgeyBtX2ZpbGVuYW1lcyA9IGZpbGVuYW1lczsg
fQorICAgIGJvb2wgY29udGFpbnNGaWxlbmFtZXMoKSBjb25zdDsKKyAgICBWZWN0b3I8U3RyaW5n
PiBmaWxlbmFtZXMoKSBjb25zdDsKKyAgICB2b2lkIHNldEZpbGVuYW1lcyhjb25zdCBWZWN0b3I8
U3RyaW5nPiYgZmlsZW5hbWVzKTsKIAogICAgIC8vIFVzZWQgdG8gaGFuZGxlIGZpbGVzIChpbWFn
ZXMpIGJlaW5nIGRyYWdnZWQgb3V0LgotICAgIFN0cmluZyBmaWxlRXh0ZW5zaW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9maWxlRXh0ZW5zaW9uOyB9Ci0gICAgdm9pZCBzZXRGaWxlRXh0ZW5zaW9uKGNv
bnN0IFN0cmluZyYgZmlsZUV4dGVuc2lvbikgeyBtX2ZpbGVFeHRlbnNpb24gPSBmaWxlRXh0ZW5z
aW9uOyB9Ci0gICAgU3RyaW5nIGZpbGVDb250ZW50RmlsZW5hbWUoKSBjb25zdCB7IHJldHVybiBt
X2ZpbGVDb250ZW50RmlsZW5hbWU7IH0KLSAgICB2b2lkIHNldEZpbGVDb250ZW50RmlsZW5hbWUo
Y29uc3QgU3RyaW5nJiBmaWxlQ29udGVudEZpbGVuYW1lKSB7IG1fZmlsZUNvbnRlbnRGaWxlbmFt
ZSA9IGZpbGVDb250ZW50RmlsZW5hbWU7IH0KLSAgICBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4g
ZmlsZUNvbnRlbnQoKSBjb25zdCB7IHJldHVybiBtX2ZpbGVDb250ZW50OyB9Ci0gICAgdm9pZCBz
ZXRGaWxlQ29udGVudChQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZmlsZUNvbnRlbnQpIHsgbV9m
aWxlQ29udGVudCA9IGZpbGVDb250ZW50OyB9CisgICAgU3RyaW5nIGZpbGVFeHRlbnNpb24oKSBj
b25zdDsKKyAgICB2b2lkIHNldEZpbGVFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBmaWxlRXh0ZW5z
aW9uKTsKKyAgICBTdHJpbmcgZmlsZUNvbnRlbnRGaWxlbmFtZSgpIGNvbnN0OworICAgIHZvaWQg
c2V0RmlsZUNvbnRlbnRGaWxlbmFtZShjb25zdCBTdHJpbmcmIGZpbGVDb250ZW50RmlsZW5hbWUp
OworICAgIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBmaWxlQ29udGVudCgpIGNvbnN0OworICAg
IHZvaWQgc2V0RmlsZUNvbnRlbnQoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGZpbGVDb250ZW50
KTsKIAogcHJpdmF0ZToKLSAgICBDaHJvbWl1bURhdGFPYmplY3QoQ2xpcGJvYXJkOjpDbGlwYm9h
cmRUeXBlKTsKLSAgICBDaHJvbWl1bURhdGFPYmplY3QoY29uc3QgQ2hyb21pdW1EYXRhT2JqZWN0
Jik7Ci0KLSAgICBDbGlwYm9hcmQ6OkNsaXBib2FyZFR5cGUgbV9jbGlwYm9hcmRUeXBlOwotCi0g
ICAgU3RyaW5nIG1fdXJsVGl0bGU7Ci0KLSAgICBTdHJpbmcgbV9kb3dubG9hZE1ldGFkYXRhOwot
Ci0gICAgU3RyaW5nIG1fZmlsZUV4dGVuc2lvbjsKLSAgICBWZWN0b3I8U3RyaW5nPiBtX2ZpbGVu
YW1lczsKLQotICAgIFN0cmluZyBtX3BsYWluVGV4dDsKLQotICAgIFN0cmluZyBtX3RleHRIdG1s
OwotICAgIEtVUkwgbV9odG1sQmFzZVVybDsKLQotICAgIFN0cmluZyBtX2ZpbGVDb250ZW50Rmls
ZW5hbWU7Ci0gICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV9maWxlQ29udGVudDsKKyAgICBDaHJv
bWl1bURhdGFPYmplY3QoUGFzc1JlZlB0cjxDaHJvbWl1bURhdGFPYmplY3RMZWdhY3k+KTsKKyAg
ICBDaHJvbWl1bURhdGFPYmplY3QoUGFzc1JlZlB0cjxSZWFkYWJsZURhdGFPYmplY3Q+KTsKKyAg
ICBDaHJvbWl1bURhdGFPYmplY3QoUGFzc1JlZlB0cjxXcml0YWJsZURhdGFPYmplY3Q+KTsKIAot
ICAgIC8vIFRoZXNlIHR3byBhcmUgbGlua2VkLiBTZXR0aW5nIG1fdXJsIHdpbGwgc2V0IG1fdXJp
TGlzdCB0byB0aGUgc2FtZQotICAgIC8vIHN0cmluZyB2YWx1ZTsgc2V0dGluZyBtX3VyaUxpc3Qg
d2lsbCBjYXVzZSBpdHMgY29udGVudHMgdG8gYmUgcGFyc2VkCi0gICAgLy8gYWNjb3JkaW5nIHRv
IFJGQyAyNDgzIGFuZCB0aGUgZmlyc3QgVVJMIGZvdW5kIHdpbGwgYmUgc2V0IGluIG1fdXJsLgot
ICAgIEtVUkwgbV91cmw7Ci0gICAgU3RyaW5nIG1fdXJpTGlzdDsKKyAgICBSZWZQdHI8Q2hyb21p
dW1EYXRhT2JqZWN0TGVnYWN5PiBtX2xlZ2FjeURhdGE7CisgICAgUmVmUHRyPFJlYWRhYmxlRGF0
YU9iamVjdD4gbV9yZWFkYWJsZURhdGE7CisgICAgUmVmUHRyPFdyaXRhYmxlRGF0YU9iamVjdD4g
bV93cml0YWJsZURhdGE7CiB9OwogCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCit9CiAKICNlbmRp
ZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmpl
Y3RMZWdhY3kuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmpl
Y3RMZWdhY3kuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyOTUyYzAK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0
YU9iamVjdExlZ2FjeS5jcHAKQEAgLTAsMCArMSwyNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMp
IDIwMDgsIDIwMDksIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICogCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0
aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkNocm9taXVtRGF0YU9iamVjdExlZ2FjeS5oIgorCisjaW5jbHVk
ZSAiQ2hyb21pdW1CcmlkZ2UuaCIKKyNpbmNsdWRlICJDbGlwYm9hcmRNaW1lVHlwZXMuaCIKKyNp
bmNsdWRlICJQYXN0ZWJvYXJkLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gUGVyIFJG
QyAyNDgzLCB0aGUgbGluZSBzZXBhcmF0b3IgZm9yICJ0ZXh0Ly4uLiIgTUlNRSB0eXBlcyBpcyBD
Ui1MRi4KK3N0YXRpYyBjaGFyIGNvbnN0KiBjb25zdCB0ZXh0TUlNRVR5cGVMaW5lU2VwYXJhdG9y
ID0gIlxyXG4iOworCit2b2lkIENocm9taXVtRGF0YU9iamVjdExlZ2FjeTo6Y2xlYXJEYXRhKGNv
bnN0IFN0cmluZyYgdHlwZSkKK3sKKyAgICBpZiAodHlwZSA9PSBtaW1lVHlwZVRleHRQbGFpbikg
eworICAgICAgICBtX3BsYWluVGV4dCA9ICIiOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKHR5cGUgPT0gbWltZVR5cGVVUkwgfHwgdHlwZSA9PSBtaW1lVHlwZVRleHRVUklMaXN0
KSB7CisgICAgICAgIG1fdXJpTGlzdCA9ICIiOworICAgICAgICBtX3VybCA9IEtVUkwoKTsKKyAg
ICAgICAgbV91cmxUaXRsZSA9ICIiOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KHR5cGUgPT0gbWltZVR5cGVUZXh0SFRNTCkgeworICAgICAgICBtX3RleHRIdG1sID0gIiI7Cisg
ICAgICAgIG1faHRtbEJhc2VVcmwgPSBLVVJMKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAodHlwZSA9PSBtaW1lVHlwZURvd25sb2FkVVJMKSB7CisgICAgICAgIG1fZG93bmxv
YWRNZXRhZGF0YSA9ICIiOworICAgICAgICByZXR1cm47CisgICAgfQorfQorCit2b2lkIENocm9t
aXVtRGF0YU9iamVjdExlZ2FjeTo6Y2xlYXJBbGwoKQoreworICAgIGNsZWFyQWxsRXhjZXB0Rmls
ZXMoKTsKKyAgICBtX2ZpbGVuYW1lcy5jbGVhcigpOworfQorCit2b2lkIENocm9taXVtRGF0YU9i
amVjdExlZ2FjeTo6Y2xlYXJBbGxFeGNlcHRGaWxlcygpCit7CisgICAgbV91cmxUaXRsZSA9ICIi
OworICAgIG1fdXJsID0gS1VSTCgpOworICAgIG1fdXJpTGlzdCA9ICIiOworICAgIG1fZG93bmxv
YWRNZXRhZGF0YSA9ICIiOworICAgIG1fZmlsZUV4dGVuc2lvbiA9ICIiOworICAgIG1fcGxhaW5U
ZXh0ID0gIiI7CisgICAgbV90ZXh0SHRtbCA9ICIiOworICAgIG1faHRtbEJhc2VVcmwgPSBLVVJM
KCk7CisgICAgbV9maWxlQ29udGVudEZpbGVuYW1lID0gIiI7CisgICAgaWYgKG1fZmlsZUNvbnRl
bnQpCisgICAgICAgIG1fZmlsZUNvbnRlbnQtPmNsZWFyKCk7Cit9CisKK2Jvb2wgQ2hyb21pdW1E
YXRhT2JqZWN0TGVnYWN5OjpoYXNEYXRhKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIW1fdXJsLmlz
RW1wdHkoKQorICAgICAgICB8fCAhbV91cmlMaXN0LmlzRW1wdHkoKQorICAgICAgICB8fCAhbV9k
b3dubG9hZE1ldGFkYXRhLmlzRW1wdHkoKQorICAgICAgICB8fCAhbV9maWxlRXh0ZW5zaW9uLmlz
RW1wdHkoKQorICAgICAgICB8fCAhbV9maWxlbmFtZXMuaXNFbXB0eSgpCisgICAgICAgIHx8ICFt
X3BsYWluVGV4dC5pc0VtcHR5KCkKKyAgICAgICAgfHwgIW1fdGV4dEh0bWwuaXNFbXB0eSgpCisg
ICAgICAgIHx8IG1fZmlsZUNvbnRlbnQ7Cit9CisKK0hhc2hTZXQ8U3RyaW5nPiBDaHJvbWl1bURh
dGFPYmplY3RMZWdhY3k6OnR5cGVzKCkgY29uc3QKK3sKKyAgICAvLyBUaGlzIGlzIGN1cnJlbnRs
eSBicm9rZW4gZm9yIHBhc3RlYm9hcmQgZXZlbnRzLCBhbmQgYWx3YXlzIGhhcyBiZWVuLgorICAg
IEhhc2hTZXQ8U3RyaW5nPiByZXN1bHRzOworCisgICAgaWYgKCFtX3BsYWluVGV4dC5pc0VtcHR5
KCkpIHsKKyAgICAgICAgcmVzdWx0cy5hZGQobWltZVR5cGVUZXh0KTsKKyAgICAgICAgcmVzdWx0
cy5hZGQobWltZVR5cGVUZXh0UGxhaW4pOworICAgIH0KKworICAgIGlmIChtX3VybC5pc1ZhbGlk
KCkpCisgICAgICAgIHJlc3VsdHMuYWRkKG1pbWVUeXBlVVJMKTsKKworICAgIGlmICghbV91cmlM
aXN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmVzdWx0cy5hZGQobWltZVR5cGVUZXh0VVJJTGlzdCk7
CisKKyAgICBpZiAoIW1fdGV4dEh0bWwuaXNFbXB0eSgpKQorICAgICAgICByZXN1bHRzLmFkZCht
aW1lVHlwZVRleHRIVE1MKTsKKworICAgIGlmICghbV9maWxlbmFtZXMuaXNFbXB0eSgpKQorICAg
ICAgICByZXN1bHRzLmFkZCgiRmlsZXMiKTsKKworICAgIHJldHVybiByZXN1bHRzOworfQorCitT
dHJpbmcgQ2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5OjpnZXREYXRhKGNvbnN0IFN0cmluZyYgdHlw
ZSwgYm9vbCYgc3VjY2VzcykKK3sKKyAgICBpZiAodHlwZSA9PSBtaW1lVHlwZVRleHRQbGFpbikg
eworICAgICAgICBpZiAobV9jbGlwYm9hcmRUeXBlID09IENsaXBib2FyZDo6Q29weUFuZFBhc3Rl
KSB7CisgICAgICAgICAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyIGJ1ZmZl
ciA9CisgICAgICAgICAgICAgICAgUGFzdGVib2FyZDo6Z2VuZXJhbFBhc3RlYm9hcmQoKS0+aXNT
ZWxlY3Rpb25Nb2RlKCkgPworICAgICAgICAgICAgICAgIFBhc3RlYm9hcmRQcml2YXRlOjpTZWxl
Y3Rpb25CdWZmZXIgOgorICAgICAgICAgICAgICAgIFBhc3RlYm9hcmRQcml2YXRlOjpTdGFuZGFy
ZEJ1ZmZlcjsKKyAgICAgICAgICAgIFN0cmluZyB0ZXh0ID0gQ2hyb21pdW1CcmlkZ2U6OmNsaXBi
b2FyZFJlYWRQbGFpblRleHQoYnVmZmVyKTsKKyAgICAgICAgICAgIHN1Y2Nlc3MgPSAhdGV4dC5p
c0VtcHR5KCk7CisgICAgICAgICAgICByZXR1cm4gdGV4dDsKKyAgICAgICAgfQorICAgICAgICBz
dWNjZXNzID0gIW1fcGxhaW5UZXh0LmlzRW1wdHkoKTsKKyAgICAgICAgcmV0dXJuIG1fcGxhaW5U
ZXh0OworICAgIH0KKworICAgIGlmICh0eXBlID09IG1pbWVUeXBlVVJMKSB7CisgICAgICAgIHN1
Y2Nlc3MgPSAhbV91cmwuaXNFbXB0eSgpOworICAgICAgICByZXR1cm4gbV91cmwuc3RyaW5nKCk7
CisgICAgfQorCisgICAgaWYgKHR5cGUgPT0gbWltZVR5cGVUZXh0VVJJTGlzdCkgeworICAgICAg
ICBzdWNjZXNzID0gIW1fdXJpTGlzdC5pc0VtcHR5KCk7CisgICAgICAgIHJldHVybiBtX3VyaUxp
c3Q7CisgICAgfQorCisgICAgaWYgKHR5cGUgPT0gbWltZVR5cGVUZXh0SFRNTCkgeworICAgICAg
ICBpZiAobV9jbGlwYm9hcmRUeXBlID09IENsaXBib2FyZDo6Q29weUFuZFBhc3RlKSB7CisgICAg
ICAgICAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyIGJ1ZmZlciA9CisgICAg
ICAgICAgICAgICAgUGFzdGVib2FyZDo6Z2VuZXJhbFBhc3RlYm9hcmQoKS0+aXNTZWxlY3Rpb25N
b2RlKCkgPworICAgICAgICAgICAgICAgIFBhc3RlYm9hcmRQcml2YXRlOjpTZWxlY3Rpb25CdWZm
ZXIgOgorICAgICAgICAgICAgICAgIFBhc3RlYm9hcmRQcml2YXRlOjpTdGFuZGFyZEJ1ZmZlcjsK
KyAgICAgICAgICAgIFN0cmluZyBodG1sVGV4dDsKKyAgICAgICAgICAgIEtVUkwgc291cmNlVVJM
OworICAgICAgICAgICAgQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFJlYWRIVE1MKGJ1ZmZlciwg
Jmh0bWxUZXh0LCAmc291cmNlVVJMKTsKKyAgICAgICAgICAgIHN1Y2Nlc3MgPSAhaHRtbFRleHQu
aXNFbXB0eSgpOworICAgICAgICAgICAgcmV0dXJuIGh0bWxUZXh0OworICAgICAgICB9CisgICAg
ICAgIHN1Y2Nlc3MgPSAhbV90ZXh0SHRtbC5pc0VtcHR5KCk7CisgICAgICAgIHJldHVybiBtX3Rl
eHRIdG1sOworICAgIH0KKworICAgIGlmICh0eXBlID09IG1pbWVUeXBlRG93bmxvYWRVUkwpIHsK
KyAgICAgICAgc3VjY2VzcyA9ICFtX2Rvd25sb2FkTWV0YWRhdGEuaXNFbXB0eSgpOworICAgICAg
ICByZXR1cm4gbV9kb3dubG9hZE1ldGFkYXRhOworICAgIH0KKworICAgIHN1Y2Nlc3MgPSBmYWxz
ZTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK2Jvb2wgQ2hyb21pdW1EYXRhT2JqZWN0TGVn
YWN5OjpzZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKQorewor
ICAgIGlmICh0eXBlID09IG1pbWVUeXBlVGV4dFBsYWluKSB7CisgICAgICAgIG1fcGxhaW5UZXh0
ID0gZGF0YTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKHR5cGUgPT0g
bWltZVR5cGVVUkwgfHwgdHlwZSA9PSBtaW1lVHlwZVRleHRVUklMaXN0KSB7CisgICAgICAgIG1f
dXJsID0gS1VSTCgpOworICAgICAgICBWZWN0b3I8U3RyaW5nPiB1cmlMaXN0OworICAgICAgICAv
LyBMaW5lIHNlcGFyYXRvciBpcyBcclxuIHBlciBSRkMgMjQ4MyAtIGhvd2V2ZXIsIGZvciBjb21w
YXRpYmlsaXR5CisgICAgICAgIC8vIHJlYXNvbnMgd2UgYWxzbyBhbGxvdyBqdXN0IFxuIGhlcmUu
CisgICAgICAgIGRhdGEuc3BsaXQoJ1xuJywgdXJpTGlzdCk7CisgICAgICAgIC8vIFByb2Nlc3Mg
dGhlIGlucHV0IGFuZCBjb3B5IHRoZSBmaXJzdCB2YWxpZCBVUkwgaW50byB0aGUgdXJsIG1lbWJl
ci4KKyAgICAgICAgLy8gSW4gY2FzZSBubyBVUkxzIGNhbiBiZSBmb3VuZCwgc3Vic2VxdWVudCBj
YWxscyB0byBnZXREYXRhKCJVUkwiKQorICAgICAgICAvLyB3aWxsIGdldCBhbiBlbXB0eSBzdHJp
bmcuIFRoaXMgaXMgaW4gbGluZSB3aXRoIHRoZSBIVE1MNSBzcGVjIChzZWUKKyAgICAgICAgLy8g
IlRoZSBEcmFnRXZlbnQgYW5kIERhdGFUcmFuc2ZlciBpbnRlcmZhY2VzIikuCisgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgdXJpTGlzdC5zaXplKCk7ICsraSkgeworICAgICAgICAgICAg
U3RyaW5nJiBsaW5lID0gdXJpTGlzdFtpXTsKKyAgICAgICAgICAgIGxpbmUgPSBsaW5lLnN0cmlw
V2hpdGVTcGFjZSgpOworICAgICAgICAgICAgaWYgKGxpbmUuaXNFbXB0eSgpKQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKGxpbmVbMF0gPT0gJyMnKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgS1VSTCB1cmwgPSBLVVJMKFBhcnNlZFVS
TFN0cmluZywgbGluZSk7CisgICAgICAgICAgICBpZiAodXJsLmlzVmFsaWQoKSkgeworICAgICAg
ICAgICAgICAgIG1fdXJsID0gdXJsOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIG1fdXJpTGlzdCA9IGRhdGE7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworICAgIGlmICh0eXBlID09IG1pbWVUeXBlVGV4dEhUTUwpIHsKKyAg
ICAgICAgbV90ZXh0SHRtbCA9IGRhdGE7CisgICAgICAgIG1faHRtbEJhc2VVcmwgPSBLVVJMKCk7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmICh0eXBlID09IG1pbWVUeXBl
RG93bmxvYWRVUkwpIHsKKyAgICAgICAgbV9kb3dubG9hZE1ldGFkYXRhID0gZGF0YTsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitDaHJvbWl1
bURhdGFPYmplY3RMZWdhY3k6OkNocm9taXVtRGF0YU9iamVjdExlZ2FjeShDbGlwYm9hcmQ6OkNs
aXBib2FyZFR5cGUgY2xpcGJvYXJkVHlwZSkKKyAgICA6IG1fY2xpcGJvYXJkVHlwZShjbGlwYm9h
cmRUeXBlKQoreworfQorCitDaHJvbWl1bURhdGFPYmplY3RMZWdhY3k6OkNocm9taXVtRGF0YU9i
amVjdExlZ2FjeShjb25zdCBDaHJvbWl1bURhdGFPYmplY3RMZWdhY3kmIG90aGVyKQorICAgIDog
UmVmQ291bnRlZDxDaHJvbWl1bURhdGFPYmplY3RMZWdhY3k+KCkKKyAgICAsIG1fY2xpcGJvYXJk
VHlwZShvdGhlci5tX2NsaXBib2FyZFR5cGUpCisgICAgLCBtX3VybFRpdGxlKG90aGVyLm1fdXJs
VGl0bGUpCisgICAgLCBtX2Rvd25sb2FkTWV0YWRhdGEob3RoZXIubV9kb3dubG9hZE1ldGFkYXRh
KQorICAgICwgbV9maWxlRXh0ZW5zaW9uKG90aGVyLm1fZmlsZUV4dGVuc2lvbikKKyAgICAsIG1f
ZmlsZW5hbWVzKG90aGVyLm1fZmlsZW5hbWVzKQorICAgICwgbV9wbGFpblRleHQob3RoZXIubV9w
bGFpblRleHQpCisgICAgLCBtX3RleHRIdG1sKG90aGVyLm1fdGV4dEh0bWwpCisgICAgLCBtX2h0
bWxCYXNlVXJsKG90aGVyLm1faHRtbEJhc2VVcmwpCisgICAgLCBtX2ZpbGVDb250ZW50RmlsZW5h
bWUob3RoZXIubV9maWxlQ29udGVudEZpbGVuYW1lKQorICAgICwgbV91cmwob3RoZXIubV91cmwp
CisgICAgLCBtX3VyaUxpc3Qob3RoZXIubV91cmlMaXN0KQoreworICAgIGlmIChvdGhlci5tX2Zp
bGVDb250ZW50LmdldCgpKQorICAgICAgICBtX2ZpbGVDb250ZW50ID0gb3RoZXIubV9maWxlQ29u
dGVudC0+Y29weSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdExlZ2FjeS5oIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3RMZWdhY3kuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWJlN2FhCi0tLSAvZGV2L251bGwKKysrIGIv
V2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3RMZWdhY3kuaApAQCAt
MCwwICsxLDExOSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOCwgMjAwOSwgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENocm9taXVtRGF0YU9iamVjdExlZ2FjeV9o
CisjZGVmaW5lIENocm9taXVtRGF0YU9iamVjdExlZ2FjeV9oCisKKyNpbmNsdWRlICJDbGlwYm9h
cmQuaCIKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNp
bmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nSGFzaC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEEgZGF0YSBv
YmplY3QgZm9yIGhvbGRpbmcgZGF0YSB0aGF0IHdvdWxkIGJlIGluIGEgY2xpcGJvYXJkIG9yIG1v
dmVkCisvLyBkdXJpbmcgYSBkcmFnLW4tZHJvcCBvcGVyYXRpb24uICBUaGlzIGlzIHRoZSBkYXRh
IHRoYXQgV2ViQ29yZSBpcyBhd2FyZQorLy8gb2YgYW5kIGlzIG5vdCBzcGVjaWZpYyB0byBhIHBs
YXRmb3JtLgorY2xhc3MgQ2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5IDogcHVibGljIFJlZkNvdW50
ZWQ8Q2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5PiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8Q2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5PiBjcmVhdGUoQ2xpcGJvYXJkOjpDbGlwYm9h
cmRUeXBlIGNsaXBib2FyZFR5cGUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IENocm9taXVtRGF0YU9iamVjdExlZ2FjeShjbGlwYm9hcmRUeXBlKSk7CisgICAgfQorCisgICAg
UGFzc1JlZlB0cjxDaHJvbWl1bURhdGFPYmplY3RMZWdhY3k+IGNvcHkoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDaHJvbWl1bURhdGFPYmplY3RMZWdhY3koKnRo
aXMpKTsKKyAgICB9CisKKyAgICB2b2lkIGNsZWFyRGF0YShjb25zdCBTdHJpbmcmIHR5cGUpOwor
ICAgIHZvaWQgY2xlYXJBbGwoKTsKKyAgICB2b2lkIGNsZWFyQWxsRXhjZXB0RmlsZXMoKTsKKwor
ICAgIGJvb2wgaGFzRGF0YSgpIGNvbnN0OworCisgICAgSGFzaFNldDxTdHJpbmc+IHR5cGVzKCkg
Y29uc3Q7CisgICAgU3RyaW5nIGdldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBib29sJiBzdWNj
ZXNzKTsKKyAgICBib29sIHNldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcm
IGRhdGEpOworCisgICAgLy8gU3BlY2lhbCBoYW5kbGVycyBmb3IgVVJML0hUTUwgbWV0YWRhdGEu
CisgICAgU3RyaW5nIHVybFRpdGxlKCkgY29uc3QgeyByZXR1cm4gbV91cmxUaXRsZTsgfQorICAg
IHZvaWQgc2V0VXJsVGl0bGUoY29uc3QgU3RyaW5nJiB1cmxUaXRsZSkgeyBtX3VybFRpdGxlID0g
dXJsVGl0bGU7IH0KKyAgICBLVVJMIGh0bWxCYXNlVXJsKCkgY29uc3QgeyByZXR1cm4gbV9odG1s
QmFzZVVybDsgfQorICAgIHZvaWQgc2V0SHRtbEJhc2VVcmwoY29uc3QgS1VSTCYgdXJsKSB7IG1f
aHRtbEJhc2VVcmwgPSB1cmw7IH0KKworICAgIC8vIFVzZWQgdG8gaGFuZGxlIGZpbGVzIGJlaW5n
IGRyYWdnZWQgaW4uCisgICAgYm9vbCBjb250YWluc0ZpbGVuYW1lcygpIGNvbnN0IHsgcmV0dXJu
ICFtX2ZpbGVuYW1lcy5pc0VtcHR5KCk7IH0KKyAgICBWZWN0b3I8U3RyaW5nPiBmaWxlbmFtZXMo
KSBjb25zdCB7IHJldHVybiBtX2ZpbGVuYW1lczsgfQorICAgIHZvaWQgc2V0RmlsZW5hbWVzKGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMpIHsgbV9maWxlbmFtZXMgPSBmaWxlbmFtZXM7
IH0KKworICAgIC8vIFVzZWQgdG8gaGFuZGxlIGZpbGVzIChpbWFnZXMpIGJlaW5nIGRyYWdnZWQg
b3V0LgorICAgIFN0cmluZyBmaWxlRXh0ZW5zaW9uKCkgY29uc3QgeyByZXR1cm4gbV9maWxlRXh0
ZW5zaW9uOyB9CisgICAgdm9pZCBzZXRGaWxlRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgZmlsZUV4
dGVuc2lvbikgeyBtX2ZpbGVFeHRlbnNpb24gPSBmaWxlRXh0ZW5zaW9uOyB9CisgICAgU3RyaW5n
IGZpbGVDb250ZW50RmlsZW5hbWUoKSBjb25zdCB7IHJldHVybiBtX2ZpbGVDb250ZW50RmlsZW5h
bWU7IH0KKyAgICB2b2lkIHNldEZpbGVDb250ZW50RmlsZW5hbWUoY29uc3QgU3RyaW5nJiBmaWxl
Q29udGVudEZpbGVuYW1lKSB7IG1fZmlsZUNvbnRlbnRGaWxlbmFtZSA9IGZpbGVDb250ZW50Rmls
ZW5hbWU7IH0KKyAgICBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZmlsZUNvbnRlbnQoKSBjb25z
dCB7IHJldHVybiBtX2ZpbGVDb250ZW50OyB9CisgICAgdm9pZCBzZXRGaWxlQ29udGVudChQYXNz
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZmlsZUNvbnRlbnQpIHsgbV9maWxlQ29udGVudCA9IGZpbGVD
b250ZW50OyB9CisKK3ByaXZhdGU6CisgICAgQ2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5KENsaXBi
b2FyZDo6Q2xpcGJvYXJkVHlwZSk7CisgICAgQ2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5KGNvbnN0
IENocm9taXVtRGF0YU9iamVjdExlZ2FjeSYpOworCisgICAgQ2xpcGJvYXJkOjpDbGlwYm9hcmRU
eXBlIG1fY2xpcGJvYXJkVHlwZTsKKworICAgIFN0cmluZyBtX3VybFRpdGxlOworCisgICAgU3Ry
aW5nIG1fZG93bmxvYWRNZXRhZGF0YTsKKworICAgIFN0cmluZyBtX2ZpbGVFeHRlbnNpb247Cisg
ICAgVmVjdG9yPFN0cmluZz4gbV9maWxlbmFtZXM7CisKKyAgICBTdHJpbmcgbV9wbGFpblRleHQ7
CisKKyAgICBTdHJpbmcgbV90ZXh0SHRtbDsKKyAgICBLVVJMIG1faHRtbEJhc2VVcmw7CisKKyAg
ICBTdHJpbmcgbV9maWxlQ29udGVudEZpbGVuYW1lOworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+
IG1fZmlsZUNvbnRlbnQ7CisKKyAgICAvLyBUaGVzZSB0d28gYXJlIGxpbmtlZC4gU2V0dGluZyBt
X3VybCB3aWxsIHNldCBtX3VyaUxpc3QgdG8gdGhlIHNhbWUKKyAgICAvLyBzdHJpbmcgdmFsdWU7
IHNldHRpbmcgbV91cmlMaXN0IHdpbGwgY2F1c2UgaXRzIGNvbnRlbnRzIHRvIGJlIHBhcnNlZAor
ICAgIC8vIGFjY29yZGluZyB0byBSRkMgMjQ4MyBhbmQgdGhlIGZpcnN0IFVSTCBmb3VuZCB3aWxs
IGJlIHNldCBpbiBtX3VybC4KKyAgICBLVVJMIG1fdXJsOworICAgIFN0cmluZyBtX3VyaUxpc3Q7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5jcHAgYi9XZWJDb3JlL3Bs
YXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmNwcAppbmRleCBjMWIzNGRhLi5lZmZi
YzRhIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9t
aXVtLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVt
LmNwcApAQCAtODQsNiArODQsMTYgQEAgUGFzc1JlZlB0cjxDbGlwYm9hcmRDaHJvbWl1bT4gQ2xp
cGJvYXJkQ2hyb21pdW06OmNyZWF0ZShDbGlwYm9hcmRUeXBlIGNsaXBib2FyZFQKICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IENsaXBib2FyZENocm9taXVtKGNsaXBib2FyZFR5cGUsIGRhdGFPYmpl
Y3QsIHBvbGljeSwgZnJhbWUpKTsKIH0KIAorUGFzc1JlZlB0cjxDbGlwYm9hcmRDaHJvbWl1bT4g
Q2xpcGJvYXJkQ2hyb21pdW06OmNyZWF0ZShDbGlwYm9hcmRUeXBlIGNsaXBib2FyZFR5cGUsCisg
ICAgQ2xpcGJvYXJkQWNjZXNzUG9saWN5IHBvbGljeSwgRnJhbWUqIGZyYW1lKQoreworICAgIFJl
ZlB0cjxDaHJvbWl1bURhdGFPYmplY3Q+IGRhdGFPYmplY3QgPQorICAgICAgICBwb2xpY3kgPT0g
Q2xpcGJvYXJkV3JpdGFibGUgPworICAgICAgICBDaHJvbWl1bURhdGFPYmplY3Q6OmNyZWF0ZVdy
aXRhYmxlKGNsaXBib2FyZFR5cGUpIDoKKyAgICAgICAgQ2hyb21pdW1EYXRhT2JqZWN0OjpjcmVh
dGVSZWFkYWJsZShjbGlwYm9hcmRUeXBlKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IENsaXBi
b2FyZENocm9taXVtKGNsaXBib2FyZFR5cGUsIGRhdGFPYmplY3QsIHBvbGljeSwgZnJhbWUpKTsK
K30KKwogdm9pZCBDbGlwYm9hcmRDaHJvbWl1bTo6Y2xlYXJEYXRhKGNvbnN0IFN0cmluZyYgdHlw
ZSkKIHsKICAgICBpZiAocG9saWN5KCkgIT0gQ2xpcGJvYXJkV3JpdGFibGUgfHwgIW1fZGF0YU9i
amVjdCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hy
b21pdW0uaCBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uaApp
bmRleCAxNGY1OWU5Li4xZDY5OTIxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9t
aXVtL0NsaXBib2FyZENocm9taXVtLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9D
bGlwYm9hcmRDaHJvbWl1bS5oCkBAIC00OCw2ICs0OCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2xpcGJvYXJkQ2hyb21pdW0+IGNyZWF0ZSgKICAg
ICAgICAgICAgIENsaXBib2FyZFR5cGUsIFBhc3NSZWZQdHI8Q2hyb21pdW1EYXRhT2JqZWN0Piwg
Q2xpcGJvYXJkQWNjZXNzUG9saWN5LCBGcmFtZSopOwogCisgICAgICAgIHN0YXRpYyBQYXNzUmVm
UHRyPENsaXBib2FyZENocm9taXVtPiBjcmVhdGUoCisgICAgICAgICAgICBDbGlwYm9hcmRUeXBl
LCBDbGlwYm9hcmRBY2Nlc3NQb2xpY3ksIEZyYW1lKik7CisKICAgICAgICAgLy8gUmV0dXJucyB0
aGUgZmlsZSBuYW1lIChub3QgaW5jbHVkaW5nIHRoZSBleHRlbnNpb24pLiBUaGlzIHJlbW92ZXMg
YW55CiAgICAgICAgIC8vIGludmFsaWQgZmlsZSBzeXN0ZW0gY2hhcmFjdGVycyBhcyB3ZWxsIGFz
IG1ha2luZyBzdXJlIHRoZQogICAgICAgICAvLyBwYXRoICsgZXh0ZW5zaW9uIGlzIG5vdCBiaWdn
ZXIgdGhhbiBhbGxvd2VkIGJ5IHRoZSBmaWxlIHN5c3RlbS4KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vY2hyb21pdW0vUmVhZGFibGVEYXRhT2JqZWN0LmNwcCBiL1dlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vUmVhZGFibGVEYXRhT2JqZWN0LmNwcAppbmRleCBmMGZkZDE5Li45N2M0ODFi
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1JlYWRhYmxlRGF0YU9iamVj
dC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9SZWFkYWJsZURhdGFPYmplY3Qu
Y3BwCkBAIC0zMyw2ICszMyw4IEBACiAKICNpbmNsdWRlICJDaHJvbWl1bUJyaWRnZS5oIgogI2lu
Y2x1ZGUgIkNsaXBib2FyZE1pbWVUeXBlcy5oIgorI2luY2x1ZGUgIlBhc3RlYm9hcmQuaCIKKyNp
bmNsdWRlICJQYXN0ZWJvYXJkUHJpdmF0ZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTY5LDYgKzcxLDI3IEBAIFN0cmluZyBSZWFkYWJsZURhdGFPYmplY3Q6OmdldERhdGEoY29uc3Qg
U3RyaW5nJiB0eXBlLCBib29sJiBzdWNjZWVkZWQpIGNvbnN0CiB7CiAgICAgU3RyaW5nIGRhdGE7
CiAgICAgU3RyaW5nIGlnbm9yZWRNZXRhZGF0YTsKKyAgICAvLyBTaW5jZSB0aGUgQ2hyb21pdW0t
c2lkZSBicmlkZ2UgaXNuJ3QgY29tcGxldGUgeWV0LCB3ZSBzcGVjaWFsIGNhc2UgdGhpcworICAg
IC8vIGZvciBjb3B5LWFuZC1wYXN0ZSwgc2luY2UgdGhhdCBjb2RlIHBhdGggbm8gbG9uZ2VyIHVz
ZXMKKyAgICAvLyBDaHJvbWl1bURhdGFPYmplY3RMZWdhY3kuCisgICAgaWYgKG1fY2xpcGJvYXJk
VHlwZSA9PSBDbGlwYm9hcmQ6OkNvcHlBbmRQYXN0ZSkgeworICAgICAgICBpZiAodHlwZSA9PSBt
aW1lVHlwZVRleHRQbGFpbikgeworICAgICAgICAgICAgUGFzdGVib2FyZFByaXZhdGU6OkNsaXBi
b2FyZEJ1ZmZlciBidWZmZXIgPQorICAgICAgICAgICAgICAgIFBhc3RlYm9hcmQ6OmdlbmVyYWxQ
YXN0ZWJvYXJkKCktPmlzU2VsZWN0aW9uTW9kZSgpID8KKyAgICAgICAgICAgICAgICBQYXN0ZWJv
YXJkUHJpdmF0ZTo6U2VsZWN0aW9uQnVmZmVyIDoKKyAgICAgICAgICAgICAgICBQYXN0ZWJvYXJk
UHJpdmF0ZTo6U3RhbmRhcmRCdWZmZXI7CisgICAgICAgICAgICBkYXRhID0gQ2hyb21pdW1Ccmlk
Z2U6OmNsaXBib2FyZFJlYWRQbGFpblRleHQoYnVmZmVyKTsKKyAgICAgICAgfSBlbHNlIGlmICh0
eXBlID09IG1pbWVUeXBlVGV4dEhUTUwpIHsKKyAgICAgICAgICAgIFBhc3RlYm9hcmRQcml2YXRl
OjpDbGlwYm9hcmRCdWZmZXIgYnVmZmVyID0KKyAgICAgICAgICAgICAgICBQYXN0ZWJvYXJkOjpn
ZW5lcmFsUGFzdGVib2FyZCgpLT5pc1NlbGVjdGlvbk1vZGUoKSA/CisgICAgICAgICAgICAgICAg
UGFzdGVib2FyZFByaXZhdGU6OlNlbGVjdGlvbkJ1ZmZlciA6CisgICAgICAgICAgICAgICAgUGFz
dGVib2FyZFByaXZhdGU6OlN0YW5kYXJkQnVmZmVyOworICAgICAgICAgICAgS1VSTCBpZ25vcmVk
U291cmNlVVJMOworICAgICAgICAgICAgQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFJlYWRIVE1M
KGJ1ZmZlciwgJmRhdGEsICZpZ25vcmVkU291cmNlVVJMKTsKKyAgICAgICAgfQorICAgICAgICBz
dWNjZWVkZWQgPSAhZGF0YS5pc0VtcHR5KCk7CisgICAgICAgIHJldHVybiBkYXRhOworICAgIH0K
ICAgICBzdWNjZWVkZWQgPSBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkUmVhZERhdGEoCiAgICAg
ICAgIGNsaXBib2FyZEJ1ZmZlcihtX2NsaXBib2FyZFR5cGUpLCB0eXBlLCBkYXRhLCBpZ25vcmVk
TWV0YWRhdGEpOwogICAgIHJldHVybiBkYXRhOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9y
bS9jaHJvbWl1bS9Xcml0YWJsZURhdGFPYmplY3QuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9Xcml0YWJsZURhdGFPYmplY3QuY3BwCmluZGV4IGVjOGZmNmUuLjdjYmY0MmMgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vV3JpdGFibGVEYXRhT2JqZWN0LmNwcAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1dyaXRhYmxlRGF0YU9iamVjdC5jcHAKQEAg
LTc3LDYgKzc3LDkgQEAgdm9pZCBXcml0YWJsZURhdGFPYmplY3Q6OmNsZWFyQWxsKCkKIGJvb2wg
V3JpdGFibGVEYXRhT2JqZWN0OjpzZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3Ry
aW5nJiBkYXRhKQogewogICAgIGlmIChtX2NsaXBib2FyZFR5cGUgPT0gQ2xpcGJvYXJkOjpDb3B5
QW5kUGFzdGUpIHsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgY3VycmVudGx5IHVuaW1wbGVt
ZW50ZWQgb24gdGhlIENocm9taXVtLXNpZGUuIFRoaXMgaXMKKyAgICAgICAgLy8gIm9rYXkiIGZv
ciBub3cgc2luY2UgdGhlIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uIGRpZG4ndCBzdXBwb3J0IGl0
CisgICAgICAgIC8vIGFueXdheS4gR29pbmcgZm9yd2FyZCwgdGhpcyBpcyBzb21ldGhpbmcgd2Un
bGwgbmVlZCB0byBmaXggdGhvdWdoLgogICAgICAgICBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJk
V3JpdGVEYXRhKHR5cGUsIGRhdGEsICIiKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpk
aWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKaW5kZXggODVjYjMxMy4uMDA3NDU2NCAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZworKysgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MjUgQEAKKzIwMTAtMTAtMDkgIERhbmllbCBDaGVuZyAgPGRjaGVuZ0BjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW2Nocm9taXVt
XSBQcmVwYXJlIENsaXBib2FyZC9EcmFnRGF0YSBmb3IgdHJhbnNpdGlvbiB0byBuZXcgZHJhZy1h
bmQtZHJvcCBpbnRlcmZhY2UuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD00NDk5MgorCisgICAgICAgIEFkZCBhIG5ldyBlbnRyeSBwb2ludCBmb3IgZHJh
ZyBpbiB0byBhbGxvdyBhIGdyYWNlZnVsIHRyYW5zaXRpb24KKyAgICAgICAgZnJvbSB0aGUgbGVn
YWN5IGRyYWcgYW5kIGRyb3AgbW9kZWwsIHdoZXJlIGFsbCBkYXRhIGlzIGNvcGllZCBpbiBhdCB0
aGUKKyAgICAgICAgYmVnaW5uaW5nIG9mIGEgZHJhZywgdG8gYSBtb2RlbCB3aGVyZSBkYXRhIGlz
IHJldHJpZXZlZCBvbiBkZW1hbmQgdmlhCisgICAgICAgIElQQ3MuIFRoZSByYXRpb25hbGUgZm9y
IHRoaXMgaXMgd2hlbiB3ZSBiZWdpbiBzdXBwb3J0aW5nIGFyYml0cmFyeSBNSU1FCisgICAgICAg
IHR5cGVzIGluIGRhdGFUcmFuc2Zlciwgd2UgZG9uJ3Qgd2FudCB0byBiZSBjb3B5aW5nIGFyaWJ0
cmFyeSBhbW91bnRzIG9mCisgICAgICAgIGRhdGEgb3ZlciBmb3IgZWFjaCBzdGFydCBkcmFnIElQ
Qy4KKworICAgICAgICAqIHB1YmxpYy9XZWJWaWV3Lmg6CisgICAgICAgICogc3JjL1dlYkRyYWdE
YXRhLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0RhdGE6OmluaXRpYWxpemUpOiBVc2Ug
dGhlIGxlZ2FjeSBkYXRhIG9iamVjdC4KKyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0RhdGE6OmVu
c3VyZU11dGFibGUpOiBDaGFuZ2UgdGhlIGlmIHRvIGFuIEFTU0VSVC4KKyAgICAgICAgKiBzcmMv
V2ViVmlld0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6ZHJhZ1Rhcmdl
dERyYWdFbnRlcjIpOiBOZXcgZW50cnkgcG9pbnQuCisgICAgICAgICogc3JjL1dlYlZpZXdJbXBs
Lmg6CisKIDIwMTAtMTAtMDggIEFuZHJlaSBQb3Blc2N1ICA8YW5kcmVpcEBnb29nbGUuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IEplcmVteSBPcmxvdy4KZGlmZiAtLWdpdCBhL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvV2ViVmlldy5oIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3
LmgKaW5kZXggZmRkNDcyOS4uOThjNGNmYiAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJWaWV3LmgKKysrIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3LmgKQEAg
LTIyMyw2ICsyMjMsOSBAQCBwdWJsaWM6CiAgICAgICAgIGNvbnN0IFdlYkRyYWdEYXRhJiwgaW50
IGlkZW50aXR5LAogICAgICAgICBjb25zdCBXZWJQb2ludCYgY2xpZW50UG9pbnQsIGNvbnN0IFdl
YlBvaW50JiBzY3JlZW5Qb2ludCwKICAgICAgICAgV2ViRHJhZ09wZXJhdGlvbnNNYXNrIG9wZXJh
dGlvbnNBbGxvd2VkKSA9IDA7CisgICAgdmlydHVhbCBXZWJEcmFnT3BlcmF0aW9uIGRyYWdUYXJn
ZXREcmFnRW50ZXJOZXcoCisgICAgICAgIGludCBpZGVudGl0eSwgY29uc3QgV2ViUG9pbnQmIGNs
aWVudFBvaW50LCBjb25zdCBXZWJQb2ludCYgc2NyZWVuUG9pbnQsCisgICAgICAgIFdlYkRyYWdP
cGVyYXRpb25zTWFzayBvcGVyYXRpb25zQWxsb3dlZCkgPSAwOwogICAgIHZpcnR1YWwgV2ViRHJh
Z09wZXJhdGlvbiBkcmFnVGFyZ2V0RHJhZ092ZXIoCiAgICAgICAgIGNvbnN0IFdlYlBvaW50JiBj
bGllbnRQb2ludCwgY29uc3QgV2ViUG9pbnQmIHNjcmVlblBvaW50LAogICAgICAgICBXZWJEcmFn
T3BlcmF0aW9uc01hc2sgb3BlcmF0aW9uc0FsbG93ZWQpID0gMDsKZGlmZiAtLWdpdCBhL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViRHJhZ0RhdGEuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJE
cmFnRGF0YS5jcHAKaW5kZXggZjI2NDM2OS4uOTE2N2M2OSAxMDA2NDQKLS0tIGEvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJEcmFnRGF0YS5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJE
cmFnRGF0YS5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJXZWJEcmFnRGF0YS5oIgog
CiAjaW5jbHVkZSAiQ2hyb21pdW1EYXRhT2JqZWN0LmgiCisjaW5jbHVkZSAiQ2hyb21pdW1EYXRh
T2JqZWN0TGVnYWN5LmgiCiAjaW5jbHVkZSAiQ2xpcGJvYXJkTWltZVR5cGVzLmgiCiAjaW5jbHVk
ZSAiV2ViRGF0YS5oIgogI2luY2x1ZGUgIldlYlN0cmluZy5oIgpAQCAtNDksNyArNTAsNyBAQCBj
bGFzcyBXZWJEcmFnRGF0YVByaXZhdGUgOiBwdWJsaWMgQ2hyb21pdW1EYXRhT2JqZWN0IHsKIAog
dm9pZCBXZWJEcmFnRGF0YTo6aW5pdGlhbGl6ZSgpCiB7Ci0gICAgYXNzaWduKHN0YXRpY19jYXN0
PFdlYkRyYWdEYXRhUHJpdmF0ZSo+KENocm9taXVtRGF0YU9iamVjdDo6Y3JlYXRlKENsaXBib2Fy
ZDo6RHJhZ0FuZERyb3ApLnJlbGVhc2VSZWYoKSkpOworICAgIGFzc2lnbihzdGF0aWNfY2FzdDxX
ZWJEcmFnRGF0YVByaXZhdGUqPihDaHJvbWl1bURhdGFPYmplY3Q6OmNyZWF0ZShDaHJvbWl1bURh
dGFPYmplY3RMZWdhY3k6OmNyZWF0ZShDbGlwYm9hcmQ6OkRyYWdBbmREcm9wKSkucmVsZWFzZVJl
ZigpKSk7CiB9CiAKIHZvaWQgV2ViRHJhZ0RhdGE6OnJlc2V0KCkKQEAgLTIzMiw4ICsyMzMsNyBA
QCB2b2lkIFdlYkRyYWdEYXRhOjphc3NpZ24oV2ViRHJhZ0RhdGFQcml2YXRlKiBwKQogdm9pZCBX
ZWJEcmFnRGF0YTo6ZW5zdXJlTXV0YWJsZSgpCiB7CiAgICAgQVNTRVJUKCFpc051bGwoKSk7Ci0g
ICAgaWYgKCFtX3ByaXZhdGUtPmhhc09uZVJlZigpKQotICAgICAgICBhc3NpZ24oc3RhdGljX2Nh
c3Q8V2ViRHJhZ0RhdGFQcml2YXRlKj4obV9wcml2YXRlLT5jb3B5KCkucmVsZWFzZVJlZigpKSk7
CisgICAgQVNTRVJUKG1fcHJpdmF0ZS0+aGFzT25lUmVmKCkpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3Bw
IGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKaW5kZXggNTk5YzY1ZS4uZGRk
MDdjNiAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKKysr
IGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKQEAgLTE2ODEsNiArMTY4MSwy
MSBAQCBXZWJEcmFnT3BlcmF0aW9uIFdlYlZpZXdJbXBsOjpkcmFnVGFyZ2V0RHJhZ0VudGVyKAog
ICAgIHJldHVybiBkcmFnVGFyZ2V0RHJhZ0VudGVyT3JPdmVyKGNsaWVudFBvaW50LCBzY3JlZW5Q
b2ludCwgRHJhZ0VudGVyKTsKIH0KIAorV2ViRHJhZ09wZXJhdGlvbiBXZWJWaWV3SW1wbDo6ZHJh
Z1RhcmdldERyYWdFbnRlck5ldygKKyAgICBpbnQgaWRlbnRpdHksCisgICAgY29uc3QgV2ViUG9p
bnQmIGNsaWVudFBvaW50LAorICAgIGNvbnN0IFdlYlBvaW50JiBzY3JlZW5Qb2ludCwKKyAgICBX
ZWJEcmFnT3BlcmF0aW9uc01hc2sgb3BlcmF0aW9uc0FsbG93ZWQpCit7CisgICAgQVNTRVJUKCFt
X2N1cnJlbnREcmFnRGF0YS5nZXQoKSk7CisKKyAgICBtX2N1cnJlbnREcmFnRGF0YSA9IENocm9t
aXVtRGF0YU9iamVjdDo6Y3JlYXRlUmVhZGFibGUoQ2xpcGJvYXJkOjpEcmFnQW5kRHJvcCk7Cisg
ICAgbV9kcmFnSWRlbnRpdHkgPSBpZGVudGl0eTsKKyAgICBtX29wZXJhdGlvbnNBbGxvd2VkID0g
b3BlcmF0aW9uc0FsbG93ZWQ7CisKKyAgICByZXR1cm4gZHJhZ1RhcmdldERyYWdFbnRlck9yT3Zl
cihjbGllbnRQb2ludCwgc2NyZWVuUG9pbnQsIERyYWdFbnRlcik7Cit9CisKIFdlYkRyYWdPcGVy
YXRpb24gV2ViVmlld0ltcGw6OmRyYWdUYXJnZXREcmFnT3ZlcigKICAgICBjb25zdCBXZWJQb2lu
dCYgY2xpZW50UG9pbnQsCiAgICAgY29uc3QgV2ViUG9pbnQmIHNjcmVlblBvaW50LApkaWZmIC0t
Z2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oIGIvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJWaWV3SW1wbC5oCmluZGV4IGU1MWRmNGQuLjEyYWQyM2EgMTAwNjQ0Ci0tLSBhL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYlZpZXdJbXBsLmgKQEAgLTE1NCw2ICsxNTQsMTEgQEAgcHVibGljOgogICAgICAgICBjb25z
dCBXZWJQb2ludCYgY2xpZW50UG9pbnQsCiAgICAgICAgIGNvbnN0IFdlYlBvaW50JiBzY3JlZW5Q
b2ludCwKICAgICAgICAgV2ViRHJhZ09wZXJhdGlvbnNNYXNrIG9wZXJhdGlvbnNBbGxvd2VkKTsK
KyAgICB2aXJ0dWFsIFdlYkRyYWdPcGVyYXRpb24gZHJhZ1RhcmdldERyYWdFbnRlck5ldygKKyAg
ICAgICAgaW50IGlkZW50aXR5LAorICAgICAgICBjb25zdCBXZWJQb2ludCYgY2xpZW50UG9pbnQs
CisgICAgICAgIGNvbnN0IFdlYlBvaW50JiBzY3JlZW5Qb2ludCwKKyAgICAgICAgV2ViRHJhZ09w
ZXJhdGlvbnNNYXNrIG9wZXJhdGlvbnNBbGxvd2VkKTsKICAgICB2aXJ0dWFsIFdlYkRyYWdPcGVy
YXRpb24gZHJhZ1RhcmdldERyYWdPdmVyKAogICAgICAgICBjb25zdCBXZWJQb2ludCYgY2xpZW50
UG9pbnQsCiAgICAgICAgIGNvbnN0IFdlYlBvaW50JiBzY3JlZW5Qb2ludCwK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70458</attachid>
            <date>2010-10-11 11:29:36 -0700</date>
            <delta_ts>2010-10-11 18:53:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>foo.patch</filename>
            <type>text/plain</type>
            <size>46046</size>
            <attacher name="Daniel Cheng">dcheng</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NGM0ZjhiOC4uYjZkYWEyNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMDAgQEAKKzIwMTAtMTAtMDkgIERhbmllbCBDaGVu
ZyAgPGRjaGVuZ0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgW2Nocm9taXVtXSBQcmVwYXJlIENsaXBib2FyZC9EcmFnRGF0YSBm
b3IgdHJhbnNpdGlvbiB0byBuZXcgZHJhZy1hbmQtZHJvcCBpbnRlcmZhY2UuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDk5MgorCisgICAgICAgIElu
IG9yZGVyIHRvIGFsbG93IGEgZ3JhY2VmdWwgdHJhbnNpdGlvbiwgQ2hyb21pdW1EYXRhT2JqZWN0
IGhhcyBiZWVuCisgICAgICAgIHJlaW1wbGVtZW50ZWQgYXMgYSB3cmFwcGVyIGFyb3VuZCB0aGUg
dGhyZWUgZGlmZmVyZW50IHR5cGVzIG9mIGRhdGEKKyAgICAgICAgb2JqZWN0cyB0aGF0IHRoZSBD
aHJvbWUgcG9ydCB1c2VzOgorICAgICAgICAxLiBDaHJvbWl1bURhdGFPYmplY3RMZWdhY3kgLS0g
dGhpcyBpcyB0aGUgb3JpZ2luYWwgQ2hyb21pdW1EYXRhT2JqZWN0LgorICAgICAgICAgICBBbGwg
dGhlIGRhdGEgdGhhdCBDbGlwYm9hcmRDaHJvbWl1bS9EcmFnRGF0YUNocm9taXVtIGNhbiBwb3Rl
bnRpYWxseQorICAgICAgICAgICB1c2UgaXMgY29waWVkIG92ZXIsIHJlZ2FyZGxlc3Mgb2Ygd2hl
dGhlciBvciBub3QgaXQgaXMgbmVlZGVkLgorICAgICAgICAyLiBSZWFkYWJsZURhdGFPYmplY3Qg
LS0gdXNlZCBmb3IgZHJhZ2dpbmcgaW4gYW5kIHBhc3RpbmcgaW50byBXZWJLaXQuCisgICAgICAg
ICAgIEZvciBlZmZpY2llbmN5LCBpdCBjYWNoZXMgYW4gb3B0aW1pc3RpYyBsaXN0IG9mIHR5cGVz
IGl0IGJlbGlldmVzIGl0CisgICAgICAgICAgIGNhbiBoYW5kbGUuIFdoZW4gZ2V0RGF0YSgpIGlz
IGNhbGxlZCwgYSBicm93c2VyIElQQyBpcyBjYWxsZWQgdG8KKyAgICAgICAgICAgcmV0cmlldmUg
dGhlIGFwcHJvcHJpYXRlIGRhdGEuCisgICAgICAgIDMuIFdyaXRhYmxlRGF0YU9iamVjdCAtLSBz
aW1pbGFyIHRvIENocm9taXVtRGF0YU9iamVjdExlZ2FjeSBpbiB0aGF0IGl0CisgICAgICAgICAg
IGJ1ZmZlcnMgYWxsIGRhdGEgd2hlbiBkcmFnZ2luZyBvdXQgb2YgV2ViS2l0IG9yIGNvcHlpbmcv
Y3V0dGluZy4KKyAgICAgICAgICAgVW5mb3J0dW5hdGVseSwgdGhlcmUgaXMgYSBkaWZmZXJlbmNl
IGJldHdlZW4gZHJhZ2dpbmcgb3V0IGFuZAorICAgICAgICAgICBjb3B5aW5nL2N1dHRpbmctLW9u
IGRyYWcgb3V0cywgdGhlIGRhdGEgaXMgYnVmZmVyZWQgYW5kIGZsdXNoZWQgb3V0CisgICAgICAg
ICAgIHdoZW4gc3RhcnREcmFnKCkgaXMgY2FsbGVkLiBGb3IgY29weS9jdXQsIGFueSBjYWxscyB0
byBzZXREYXRhKCkKKyAgICAgICAgICAgcmVzdWx0IGluIGEgYnJvd3NlciBJUEMgcmlnaHQgYXdh
eSwgc28gY2FsbHMgdG8gc2V0RGF0YSgpIGluIG9uZQorICAgICAgICAgICBjb3B5L2N1dCBldmVu
dCBhcmUgbm90IGF0b21pYy4KKworICAgICAgICBDb3B5IGFuZCBwYXN0ZSBoYXMgYmVlbiBjaGFu
Z2VkIHRvIHVzZSB0aGUgbmV3IGRhdGEgb2JqZWN0cy4gRHJhZ2dpbmcKKyAgICAgICAgb3V0IHVz
ZXMgdGhlIGxlZ2FjeSBkYXRhIG9iamVjdCwgYW5kIGRyYWdnaW5nIGluIG5vdyBoYXMgdHdvIHBv
dGVudGlhbAorICAgICAgICBlbnRyeSBwb2ludHMtLW9uZSB1c2luZyB0aGUgbGVnYWN5IGRhdGEg
b2JqZWN0LCBhbmQgb25lIHVzaW5nCisgICAgICAgIFJlYWRhYmxlRGF0YU9iamVjdC4gT25jZSBD
aHJvbWl1bSB0cmFuc2l0aW9ucyB0byB1c2luZyB0aGUgbmV3IGRyYWctaW4KKyAgICAgICAgaW50
ZXJmYWNlLCB0aGUgb2xkIGludGVyZmFjZSB3aWxsIGJlIHJlbW92ZWQuCisKKyAgICAgICAgVGhp
cyBjaGFuZ2UgaXMgY292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIFdlYkNv
cmUuZ3lwaToKKyAgICAgICAgKiBlZGl0aW5nL2Nocm9taXVtL0VkaXRvckNocm9taXVtLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bmV3R2VuZXJhbENsaXBib2FyZCk6CisgICAgICAg
ICogcGFnZS9jaHJvbWl1bS9FdmVudEhhbmRsZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpFdmVudEhhbmRsZXI6OmNyZWF0ZURyYWdnaW5nQ2xpcGJvYXJkKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpDaHJvbWl1bURhdGFPYmplY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2hy
b21pdW1EYXRhT2JqZWN0OjpjcmVhdGVSZWFkYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpDaHJv
bWl1bURhdGFPYmplY3Q6OmNyZWF0ZVdyaXRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9t
aXVtRGF0YU9iamVjdDo6Y2xlYXJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0
YU9iamVjdDo6Y2xlYXJBbGwpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0
OjpjbGVhckFsbEV4Y2VwdEZpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9i
amVjdDo6aGFzRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OnR5
cGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6Z2V0RGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OnNldERhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0Ojp1cmxUaXRsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDaHJvbWl1bURhdGFPYmplY3Q6OnNldFVybFRpdGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNo
cm9taXVtRGF0YU9iamVjdDo6aHRtbEJhc2VVcmwpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21p
dW1EYXRhT2JqZWN0OjpzZXRIdG1sQmFzZVVybCk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1
bURhdGFPYmplY3Q6OmNvbnRhaW5zRmlsZW5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9t
aXVtRGF0YU9iamVjdDo6ZmlsZW5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0
YU9iamVjdDo6c2V0RmlsZW5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9i
amVjdDo6ZmlsZUV4dGVuc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmpl
Y3Q6OnNldEZpbGVFeHRlbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2Jq
ZWN0OjpmaWxlQ29udGVudEZpbGVuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0
YU9iamVjdDo6c2V0RmlsZUNvbnRlbnRGaWxlbmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDaHJv
bWl1bURhdGFPYmplY3Q6OmZpbGVDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVt
RGF0YU9iamVjdDo6c2V0RmlsZUNvbnRlbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVt
L0Nocm9taXVtRGF0YU9iamVjdC5oOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0Nocm9t
aXVtRGF0YU9iamVjdExlZ2FjeS5jcHA6IENvcGllZCBmcm9tIENocm9taXVtRGF0YU9iamVjdC5j
cHAKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdExlZ2FjeTo6Y2xlYXJEYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdExlZ2FjeTo6Y2xlYXJBbGwp
OgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5OjpjbGVhckFsbEV4
Y2VwdEZpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdExlZ2FjeTo6
aGFzRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3RMZWdhY3k6OnR5
cGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdExlZ2FjeTo6Z2V0RGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3RMZWdhY3k6OnNldERhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5OjpDaHJvbWl1bURh
dGFPYmplY3RMZWdhY3kpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0
YU9iamVjdExlZ2FjeS5oOiBDb3BpZWQgZnJvbSBDaHJvbWl1bURhdGFPYmplY3QuaAorICAgICAg
ICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5OjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5Ojpjb3B5KToKKyAgICAgICAgKFdlYkNv
cmU6OkNocm9taXVtRGF0YU9iamVjdExlZ2FjeTo6dXJsVGl0bGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5OjpzZXRVcmxUaXRsZSk6CisgICAgICAgIChXZWJD
b3JlOjpDaHJvbWl1bURhdGFPYmplY3RMZWdhY3k6Omh0bWxCYXNlVXJsKToKKyAgICAgICAgKFdl
YkNvcmU6OkNocm9taXVtRGF0YU9iamVjdExlZ2FjeTo6c2V0SHRtbEJhc2VVcmwpOgorICAgICAg
ICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5Ojpjb250YWluc0ZpbGVuYW1lcyk6
CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3RMZWdhY3k6OmZpbGVuYW1lcyk6
CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3RMZWdhY3k6OnNldEZpbGVuYW1l
cyk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3RMZWdhY3k6OmZpbGVFeHRl
bnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5OjpzZXRG
aWxlRXh0ZW5zaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdExlZ2Fj
eTo6ZmlsZUNvbnRlbnRGaWxlbmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFP
YmplY3RMZWdhY3k6OnNldEZpbGVDb250ZW50RmlsZW5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6
Q2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5OjpmaWxlQ29udGVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpDaHJvbWl1bURhdGFPYmplY3RMZWdhY3k6OnNldEZpbGVDb250ZW50KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDbGlwYm9hcmRDaHJvbWl1bTo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1
bS9DbGlwYm9hcmRDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1JlYWRh
YmxlRGF0YU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZWFkYWJsZURhdGFPYmplY3Q6
OmdldERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1dyaXRhYmxlRGF0YU9iamVj
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXcml0YWJsZURhdGFPYmplY3Q6OnNldERhdGEpOgor
CiAyMDEwLTEwLTA4ICBNaWhhaSBQYXJwYXJpdGEgIDxtaWhhaXBAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaSBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDMzNjdjZWUuLjY5MTc0Y2UgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5neXBp
CkBAIC0yMjkyLDYgKzIyOTIsOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL0No
cm9taXVtQnJpZGdlLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVt
RGF0YU9iamVjdC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVt
RGF0YU9iamVjdC5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURh
dGFPYmplY3RMZWdhY3kuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9DaHJv
bWl1bURhdGFPYmplY3RMZWdhY3kuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0v
Q2xpcGJvYXJkQ2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9D
bGlwYm9hcmRDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9DbGlw
Ym9hcmRDaHJvbWl1bUxpbnV4LmNwcCcsCmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvY2hy
b21pdW0vRWRpdG9yQ2hyb21pdW0uY3BwIGIvV2ViQ29yZS9lZGl0aW5nL2Nocm9taXVtL0VkaXRv
ckNocm9taXVtLmNwcAppbmRleCAyYmZiNWFmLi5jYTdmNDFhIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2VkaXRpbmcvY2hyb21pdW0vRWRpdG9yQ2hyb21pdW0uY3BwCisrKyBiL1dlYkNvcmUvZWRpdGlu
Zy9jaHJvbWl1bS9FZGl0b3JDaHJvbWl1bS5jcHAKQEAgLTM5LDcgKzM5LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBQYXNzUmVmUHRyPENsaXBib2FyZD4gRWRpdG9yOjpuZXdHZW5lcmFsQ2xp
cGJvYXJkKENsaXBib2FyZEFjY2Vzc1BvbGljeSBwb2xpY3ksIEZyYW1lKiBmcmFtZSkKIHsKLSAg
ICByZXR1cm4gQ2xpcGJvYXJkQ2hyb21pdW06OmNyZWF0ZShDbGlwYm9hcmQ6OkNvcHlBbmRQYXN0
ZSwgQ2hyb21pdW1EYXRhT2JqZWN0OjpjcmVhdGUoQ2xpcGJvYXJkOjpDb3B5QW5kUGFzdGUpLCBw
b2xpY3ksIGZyYW1lKTsKKyAgICByZXR1cm4gQ2xpcGJvYXJkQ2hyb21pdW06OmNyZWF0ZShDbGlw
Ym9hcmQ6OkNvcHlBbmRQYXN0ZSwgcG9saWN5LCBmcmFtZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9jaHJvbWl1bS9FdmVudEhhbmRsZXJD
aHJvbWl1bS5jcHAgYi9XZWJDb3JlL3BhZ2UvY2hyb21pdW0vRXZlbnRIYW5kbGVyQ2hyb21pdW0u
Y3BwCmluZGV4IDkxMzhiOGQuLjliNDBmYjMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9jaHJv
bWl1bS9FdmVudEhhbmRsZXJDaHJvbWl1bS5jcHAKKysrIGIvV2ViQ29yZS9wYWdlL2Nocm9taXVt
L0V2ZW50SGFuZGxlckNocm9taXVtLmNwcApAQCAtMTI4LDggKzEyOCw4IEBAIGJvb2wgRXZlbnRI
YW5kbGVyOjpldmVudEFjdGl2YXRlZFZpZXcoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldmVu
dCkgY29uc3QKIAogUGFzc1JlZlB0cjxDbGlwYm9hcmQ+IEV2ZW50SGFuZGxlcjo6Y3JlYXRlRHJh
Z2dpbmdDbGlwYm9hcmQoKSBjb25zdAogewotICAgIFJlZlB0cjxDaHJvbWl1bURhdGFPYmplY3Q+
IGRhdGFPYmplY3QgPSBDaHJvbWl1bURhdGFPYmplY3Q6OmNyZWF0ZShDbGlwYm9hcmQ6OkRyYWdB
bmREcm9wKTsKLSAgICByZXR1cm4gQ2xpcGJvYXJkQ2hyb21pdW06OmNyZWF0ZShDbGlwYm9hcmQ6
OkRyYWdBbmREcm9wLCBkYXRhT2JqZWN0LmdldCgpLCBDbGlwYm9hcmRXcml0YWJsZSwgbV9mcmFt
ZSk7CisgICAgUmVmUHRyPENocm9taXVtRGF0YU9iamVjdExlZ2FjeT4gZGF0YU9iamVjdCA9IENo
cm9taXVtRGF0YU9iamVjdExlZ2FjeTo6Y3JlYXRlKENsaXBib2FyZDo6RHJhZ0FuZERyb3ApOwor
ICAgIHJldHVybiBDbGlwYm9hcmRDaHJvbWl1bTo6Y3JlYXRlKENsaXBib2FyZDo6RHJhZ0FuZERy
b3AsIENocm9taXVtRGF0YU9iamVjdDo6Y3JlYXRlKGRhdGFPYmplY3QpLCBDbGlwYm9hcmRXcml0
YWJsZSwgbV9mcmFtZSk7CiB9CiAKIHZvaWQgRXZlbnRIYW5kbGVyOjpmb2N1c0RvY3VtZW50Vmll
dygpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9i
amVjdC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5j
cHAKaW5kZXggNzNlNmY0OC4uNzhiNzk0YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9j
aHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKGMpIDIwMDgsIDIwMDksIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKGMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KiAKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtMzEsMjIwICszMSwxODkgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDaHJvbWl1bURhdGFPYmplY3QuaCIKIAot
I2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiCi0jaW5jbHVkZSAiQ2xpcGJvYXJkTWltZVR5cGVz
LmgiCi0jaW5jbHVkZSAiUGFzdGVib2FyZC5oIgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8v
IFBlciBSRkMgMjQ4MywgdGhlIGxpbmUgc2VwYXJhdG9yIGZvciAidGV4dC8uLi4iIE1JTUUgdHlw
ZXMgaXMgQ1ItTEYuCi1zdGF0aWMgY2hhciBjb25zdCogY29uc3QgdGV4dE1JTUVUeXBlTGluZVNl
cGFyYXRvciA9ICJcclxuIjsKK0Nocm9taXVtRGF0YU9iamVjdDo6Q2hyb21pdW1EYXRhT2JqZWN0
KFBhc3NSZWZQdHI8Q2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5PiBkYXRhKQorICAgIDogUmVmQ291
bnRlZDxDaHJvbWl1bURhdGFPYmplY3Q+KCkKKyAgICAsIG1fbGVnYWN5RGF0YShkYXRhKQorewor
fQogCi12b2lkIENocm9taXVtRGF0YU9iamVjdDo6Y2xlYXJEYXRhKGNvbnN0IFN0cmluZyYgdHlw
ZSkKK0Nocm9taXVtRGF0YU9iamVjdDo6Q2hyb21pdW1EYXRhT2JqZWN0KFBhc3NSZWZQdHI8UmVh
ZGFibGVEYXRhT2JqZWN0PiBkYXRhKQorICAgIDogUmVmQ291bnRlZDxDaHJvbWl1bURhdGFPYmpl
Y3Q+KCkKKyAgICAsIG1fcmVhZGFibGVEYXRhKGRhdGEpCit7Cit9CisKK0Nocm9taXVtRGF0YU9i
amVjdDo6Q2hyb21pdW1EYXRhT2JqZWN0KFBhc3NSZWZQdHI8V3JpdGFibGVEYXRhT2JqZWN0PiBk
YXRhKQorICAgIDogUmVmQ291bnRlZDxDaHJvbWl1bURhdGFPYmplY3Q+KCkKKyAgICAsIG1fd3Jp
dGFibGVEYXRhKGRhdGEpCiB7Ci0gICAgaWYgKHR5cGUgPT0gbWltZVR5cGVUZXh0UGxhaW4pIHsK
LSAgICAgICAgbV9wbGFpblRleHQgPSAiIjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KK30KIAot
ICAgIGlmICh0eXBlID09IG1pbWVUeXBlVVJMIHx8IHR5cGUgPT0gbWltZVR5cGVUZXh0VVJJTGlz
dCkgewotICAgICAgICBtX3VyaUxpc3QgPSAiIjsKLSAgICAgICAgbV91cmwgPSBLVVJMKCk7Ci0g
ICAgICAgIG1fdXJsVGl0bGUgPSAiIjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KK1Bhc3NSZWZQ
dHI8Q2hyb21pdW1EYXRhT2JqZWN0PiBDaHJvbWl1bURhdGFPYmplY3Q6OmNyZWF0ZShQYXNzUmVm
UHRyPENocm9taXVtRGF0YU9iamVjdExlZ2FjeT4gZGF0YSkKK3sKKyAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IENocm9taXVtRGF0YU9iamVjdChkYXRhKSk7Cit9CiAKLSAgICBpZiAodHlwZSA9PSBt
aW1lVHlwZVRleHRIVE1MKSB7Ci0gICAgICAgIG1fdGV4dEh0bWwgPSAiIjsKLSAgICAgICAgbV9o
dG1sQmFzZVVybCA9IEtVUkwoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KK1Bhc3NSZWZQdHI8
Q2hyb21pdW1EYXRhT2JqZWN0PiBDaHJvbWl1bURhdGFPYmplY3Q6OmNyZWF0ZVJlYWRhYmxlKENs
aXBib2FyZDo6Q2xpcGJvYXJkVHlwZSBjbGlwYm9hcmRUeXBlKQoreworICAgIHJldHVybiBhZG9w
dFJlZihuZXcgQ2hyb21pdW1EYXRhT2JqZWN0KFJlYWRhYmxlRGF0YU9iamVjdDo6Y3JlYXRlKGNs
aXBib2FyZFR5cGUpKSk7Cit9CiAKLSAgICBpZiAodHlwZSA9PSBtaW1lVHlwZURvd25sb2FkVVJM
KSB7Ci0gICAgICAgIG1fZG93bmxvYWRNZXRhZGF0YSA9ICIiOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQorUGFzc1JlZlB0cjxDaHJvbWl1bURhdGFPYmplY3Q+IENocm9taXVtRGF0YU9iamVjdDo6
Y3JlYXRlV3JpdGFibGUoQ2xpcGJvYXJkOjpDbGlwYm9hcmRUeXBlIGNsaXBib2FyZFR5cGUpCit7
CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDaHJvbWl1bURhdGFPYmplY3QoV3JpdGFibGVEYXRh
T2JqZWN0OjpjcmVhdGUoY2xpcGJvYXJkVHlwZSkpKTsKK30KKwordm9pZCBDaHJvbWl1bURhdGFP
YmplY3Q6OmNsZWFyRGF0YShjb25zdCBTdHJpbmcmIHR5cGUpCit7CisgICAgaWYgKG1fbGVnYWN5
RGF0YSkKKyAgICAgICAgbV9sZWdhY3lEYXRhLT5jbGVhckRhdGEodHlwZSk7CisgICAgZWxzZQor
ICAgICAgICBtX3dyaXRhYmxlRGF0YS0+Y2xlYXJEYXRhKHR5cGUpOwogfQogCiB2b2lkIENocm9t
aXVtRGF0YU9iamVjdDo6Y2xlYXJBbGwoKQogewotICAgIGNsZWFyQWxsRXhjZXB0RmlsZXMoKTsK
LSAgICBtX2ZpbGVuYW1lcy5jbGVhcigpOworICAgIGlmIChtX2xlZ2FjeURhdGEpCisgICAgICAg
IG1fbGVnYWN5RGF0YS0+Y2xlYXJBbGwoKTsKKyAgICBlbHNlCisgICAgICAgIG1fd3JpdGFibGVE
YXRhLT5jbGVhckFsbCgpOwogfQogCiB2b2lkIENocm9taXVtRGF0YU9iamVjdDo6Y2xlYXJBbGxF
eGNlcHRGaWxlcygpCiB7Ci0gICAgbV91cmxUaXRsZSA9ICIiOwotICAgIG1fdXJsID0gS1VSTCgp
OwotICAgIG1fdXJpTGlzdCA9ICIiOwotICAgIG1fZG93bmxvYWRNZXRhZGF0YSA9ICIiOwotICAg
IG1fZmlsZUV4dGVuc2lvbiA9ICIiOwotICAgIG1fcGxhaW5UZXh0ID0gIiI7Ci0gICAgbV90ZXh0
SHRtbCA9ICIiOwotICAgIG1faHRtbEJhc2VVcmwgPSBLVVJMKCk7Ci0gICAgbV9maWxlQ29udGVu
dEZpbGVuYW1lID0gIiI7Ci0gICAgaWYgKG1fZmlsZUNvbnRlbnQpCi0gICAgICAgIG1fZmlsZUNv
bnRlbnQtPmNsZWFyKCk7CisgICAgaWYgKG1fbGVnYWN5RGF0YSkKKyAgICAgICAgbV9sZWdhY3lE
YXRhLT5jbGVhckFsbEV4Y2VwdEZpbGVzKCk7CisgICAgZWxzZQorICAgICAgICBtX3dyaXRhYmxl
RGF0YS0+Y2xlYXJBbGxFeGNlcHRGaWxlcygpOwogfQogCiBib29sIENocm9taXVtRGF0YU9iamVj
dDo6aGFzRGF0YSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICFtX3VybC5pc0VtcHR5KCkKLSAgICAg
ICAgfHwgIW1fdXJpTGlzdC5pc0VtcHR5KCkKLSAgICAgICAgfHwgIW1fZG93bmxvYWRNZXRhZGF0
YS5pc0VtcHR5KCkKLSAgICAgICAgfHwgIW1fZmlsZUV4dGVuc2lvbi5pc0VtcHR5KCkKLSAgICAg
ICAgfHwgIW1fZmlsZW5hbWVzLmlzRW1wdHkoKQotICAgICAgICB8fCAhbV9wbGFpblRleHQuaXNF
bXB0eSgpCi0gICAgICAgIHx8ICFtX3RleHRIdG1sLmlzRW1wdHkoKQotICAgICAgICB8fCBtX2Zp
bGVDb250ZW50OworICAgIGlmIChtX2xlZ2FjeURhdGEpCisgICAgICAgIHJldHVybiBtX2xlZ2Fj
eURhdGEtPmhhc0RhdGEoKTsKKyAgICByZXR1cm4gbV9yZWFkYWJsZURhdGEtPmhhc0RhdGEoKTsK
IH0KIAogSGFzaFNldDxTdHJpbmc+IENocm9taXVtRGF0YU9iamVjdDo6dHlwZXMoKSBjb25zdAog
ewotICAgIC8vIFRoaXMgaXMgY3VycmVudGx5IGJyb2tlbiBmb3IgcGFzdGVib2FyZCBldmVudHMs
IGFuZCBhbHdheXMgaGFzIGJlZW4uCi0gICAgSGFzaFNldDxTdHJpbmc+IHJlc3VsdHM7CisgICAg
aWYgKG1fbGVnYWN5RGF0YSkKKyAgICAgICAgcmV0dXJuIG1fbGVnYWN5RGF0YS0+dHlwZXMoKTsK
KyAgICByZXR1cm4gbV9yZWFkYWJsZURhdGEtPnR5cGVzKCk7Cit9CisKK1N0cmluZyBDaHJvbWl1
bURhdGFPYmplY3Q6OmdldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBib29sJiBzdWNjZXNzKQor
eworICAgIGlmIChtX2xlZ2FjeURhdGEpCisgICAgICAgIHJldHVybiBtX2xlZ2FjeURhdGEtPmdl
dERhdGEodHlwZSwgc3VjY2Vzcyk7CisgICAgcmV0dXJuIG1fcmVhZGFibGVEYXRhLT5nZXREYXRh
KHR5cGUsIHN1Y2Nlc3MpOworfQorCitib29sIENocm9taXVtRGF0YU9iamVjdDo6c2V0RGF0YShj
b25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSkKK3sKKyAgICBpZiAobV9sZWdh
Y3lEYXRhKQorICAgICAgICByZXR1cm4gbV9sZWdhY3lEYXRhLT5zZXREYXRhKHR5cGUsIGRhdGEp
OworICAgIHJldHVybiBtX3dyaXRhYmxlRGF0YS0+c2V0RGF0YSh0eXBlLCBkYXRhKTsKK30KKwor
U3RyaW5nIENocm9taXVtRGF0YU9iamVjdDo6dXJsVGl0bGUoKSBjb25zdAoreworICAgIGlmICht
X2xlZ2FjeURhdGEpCisgICAgICAgIHJldHVybiBtX2xlZ2FjeURhdGEtPnVybFRpdGxlKCk7Cisg
ICAgcmV0dXJuIG1fcmVhZGFibGVEYXRhLT51cmxUaXRsZSgpOworfQogCi0gICAgaWYgKCFtX3Bs
YWluVGV4dC5pc0VtcHR5KCkpIHsKLSAgICAgICAgcmVzdWx0cy5hZGQobWltZVR5cGVUZXh0KTsK
LSAgICAgICAgcmVzdWx0cy5hZGQobWltZVR5cGVUZXh0UGxhaW4pOwotICAgIH0KK3ZvaWQgQ2hy
b21pdW1EYXRhT2JqZWN0OjpzZXRVcmxUaXRsZShjb25zdCBTdHJpbmcmIHVybFRpdGxlKQorewor
ICAgIGlmIChtX2xlZ2FjeURhdGEpCisgICAgICAgIG1fbGVnYWN5RGF0YS0+c2V0VXJsVGl0bGUo
dXJsVGl0bGUpOworICAgIGVsc2UKKyAgICAgICAgbV93cml0YWJsZURhdGEtPnNldFVybFRpdGxl
KHVybFRpdGxlKTsKK30KIAotICAgIGlmIChtX3VybC5pc1ZhbGlkKCkpCi0gICAgICAgIHJlc3Vs
dHMuYWRkKG1pbWVUeXBlVVJMKTsKK0tVUkwgQ2hyb21pdW1EYXRhT2JqZWN0OjpodG1sQmFzZVVy
bCgpIGNvbnN0Cit7CisgICAgaWYgKG1fbGVnYWN5RGF0YSkKKyAgICAgICAgcmV0dXJuIG1fbGVn
YWN5RGF0YS0+aHRtbEJhc2VVcmwoKTsKKyAgICByZXR1cm4gbV9yZWFkYWJsZURhdGEtPmh0bWxC
YXNlVXJsKCk7Cit9CiAKLSAgICBpZiAoIW1fdXJpTGlzdC5pc0VtcHR5KCkpCi0gICAgICAgIHJl
c3VsdHMuYWRkKG1pbWVUeXBlVGV4dFVSSUxpc3QpOwordm9pZCBDaHJvbWl1bURhdGFPYmplY3Q6
OnNldEh0bWxCYXNlVXJsKGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICBpZiAobV9sZWdhY3lEYXRh
KQorICAgICAgICBtX2xlZ2FjeURhdGEtPnNldEh0bWxCYXNlVXJsKHVybCk7CisgICAgZWxzZQor
ICAgICAgICBtX3dyaXRhYmxlRGF0YS0+c2V0SHRtbEJhc2VVcmwodXJsKTsKK30KIAotICAgIGlm
ICghbV90ZXh0SHRtbC5pc0VtcHR5KCkpCi0gICAgICAgIHJlc3VsdHMuYWRkKG1pbWVUeXBlVGV4
dEhUTUwpOworYm9vbCBDaHJvbWl1bURhdGFPYmplY3Q6OmNvbnRhaW5zRmlsZW5hbWVzKCkgY29u
c3QKK3sKKyAgICBpZiAobV9sZWdhY3lEYXRhKQorICAgICAgICByZXR1cm4gbV9sZWdhY3lEYXRh
LT5jb250YWluc0ZpbGVuYW1lcygpOworICAgIHJldHVybiBtX3JlYWRhYmxlRGF0YS0+Y29udGFp
bnNGaWxlbmFtZXMoKTsKK30KIAotICAgIGlmICghbV9maWxlbmFtZXMuaXNFbXB0eSgpKQotICAg
ICAgICByZXN1bHRzLmFkZCgiRmlsZXMiKTsKK1ZlY3RvcjxTdHJpbmc+IENocm9taXVtRGF0YU9i
amVjdDo6ZmlsZW5hbWVzKCkgY29uc3QKK3sKKyAgICBpZiAobV9sZWdhY3lEYXRhKQorICAgICAg
ICByZXR1cm4gbV9sZWdhY3lEYXRhLT5maWxlbmFtZXMoKTsKKyAgICByZXR1cm4gbV9yZWFkYWJs
ZURhdGEtPmZpbGVuYW1lcygpOworfQogCi0gICAgcmV0dXJuIHJlc3VsdHM7Cit2b2lkIENocm9t
aXVtRGF0YU9iamVjdDo6c2V0RmlsZW5hbWVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFt
ZXMpCit7CisgICAgaWYgKG1fbGVnYWN5RGF0YSkKKyAgICAgICAgbV9sZWdhY3lEYXRhLT5zZXRG
aWxlbmFtZXMoZmlsZW5hbWVzKTsKKyAgICBlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogfQogCi1TdHJpbmcgQ2hyb21pdW1EYXRhT2JqZWN0OjpnZXREYXRhKGNvbnN0IFN0cmlu
ZyYgdHlwZSwgYm9vbCYgc3VjY2VzcykKK1N0cmluZyBDaHJvbWl1bURhdGFPYmplY3Q6OmZpbGVF
eHRlbnNpb24oKSBjb25zdAogewotICAgIGlmICh0eXBlID09IG1pbWVUeXBlVGV4dFBsYWluKSB7
Ci0gICAgICAgIGlmIChtX2NsaXBib2FyZFR5cGUgPT0gQ2xpcGJvYXJkOjpDb3B5QW5kUGFzdGUp
IHsKLSAgICAgICAgICAgIFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIgYnVmZmVy
ID0KLSAgICAgICAgICAgICAgICBQYXN0ZWJvYXJkOjpnZW5lcmFsUGFzdGVib2FyZCgpLT5pc1Nl
bGVjdGlvbk1vZGUoKSA/Ci0gICAgICAgICAgICAgICAgUGFzdGVib2FyZFByaXZhdGU6OlNlbGVj
dGlvbkJ1ZmZlciA6Ci0gICAgICAgICAgICAgICAgUGFzdGVib2FyZFByaXZhdGU6OlN0YW5kYXJk
QnVmZmVyOwotICAgICAgICAgICAgU3RyaW5nIHRleHQgPSBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJv
YXJkUmVhZFBsYWluVGV4dChidWZmZXIpOwotICAgICAgICAgICAgc3VjY2VzcyA9ICF0ZXh0Lmlz
RW1wdHkoKTsKLSAgICAgICAgICAgIHJldHVybiB0ZXh0OwotICAgICAgICB9Ci0gICAgICAgIHN1
Y2Nlc3MgPSAhbV9wbGFpblRleHQuaXNFbXB0eSgpOwotICAgICAgICByZXR1cm4gbV9wbGFpblRl
eHQ7Ci0gICAgfQotCi0gICAgaWYgKHR5cGUgPT0gbWltZVR5cGVVUkwpIHsKLSAgICAgICAgc3Vj
Y2VzcyA9ICFtX3VybC5pc0VtcHR5KCk7Ci0gICAgICAgIHJldHVybiBtX3VybC5zdHJpbmcoKTsK
LSAgICB9Ci0KLSAgICBpZiAodHlwZSA9PSBtaW1lVHlwZVRleHRVUklMaXN0KSB7Ci0gICAgICAg
IHN1Y2Nlc3MgPSAhbV91cmlMaXN0LmlzRW1wdHkoKTsKLSAgICAgICAgcmV0dXJuIG1fdXJpTGlz
dDsKLSAgICB9Ci0KLSAgICBpZiAodHlwZSA9PSBtaW1lVHlwZVRleHRIVE1MKSB7Ci0gICAgICAg
IGlmIChtX2NsaXBib2FyZFR5cGUgPT0gQ2xpcGJvYXJkOjpDb3B5QW5kUGFzdGUpIHsKLSAgICAg
ICAgICAgIFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIgYnVmZmVyID0KLSAgICAg
ICAgICAgICAgICBQYXN0ZWJvYXJkOjpnZW5lcmFsUGFzdGVib2FyZCgpLT5pc1NlbGVjdGlvbk1v
ZGUoKSA/Ci0gICAgICAgICAgICAgICAgUGFzdGVib2FyZFByaXZhdGU6OlNlbGVjdGlvbkJ1ZmZl
ciA6Ci0gICAgICAgICAgICAgICAgUGFzdGVib2FyZFByaXZhdGU6OlN0YW5kYXJkQnVmZmVyOwot
ICAgICAgICAgICAgU3RyaW5nIGh0bWxUZXh0OwotICAgICAgICAgICAgS1VSTCBzb3VyY2VVUkw7
Ci0gICAgICAgICAgICBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkUmVhZEhUTUwoYnVmZmVyLCAm
aHRtbFRleHQsICZzb3VyY2VVUkwpOwotICAgICAgICAgICAgc3VjY2VzcyA9ICFodG1sVGV4dC5p
c0VtcHR5KCk7Ci0gICAgICAgICAgICByZXR1cm4gaHRtbFRleHQ7Ci0gICAgICAgIH0KLSAgICAg
ICAgc3VjY2VzcyA9ICFtX3RleHRIdG1sLmlzRW1wdHkoKTsKLSAgICAgICAgcmV0dXJuIG1fdGV4
dEh0bWw7Ci0gICAgfQotCi0gICAgaWYgKHR5cGUgPT0gbWltZVR5cGVEb3dubG9hZFVSTCkgewot
ICAgICAgICBzdWNjZXNzID0gIW1fZG93bmxvYWRNZXRhZGF0YS5pc0VtcHR5KCk7Ci0gICAgICAg
IHJldHVybiBtX2Rvd25sb2FkTWV0YWRhdGE7Ci0gICAgfQotCi0gICAgc3VjY2VzcyA9IGZhbHNl
OwotICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICBpZiAobV9sZWdhY3lEYXRhKQorICAgICAgICBy
ZXR1cm4gbV9sZWdhY3lEYXRhLT5maWxlRXh0ZW5zaW9uKCk7CisgICAgcmV0dXJuIG1fd3JpdGFi
bGVEYXRhLT5maWxlRXh0ZW5zaW9uKCk7CiB9CiAKLWJvb2wgQ2hyb21pdW1EYXRhT2JqZWN0Ojpz
ZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKQordm9pZCBDaHJv
bWl1bURhdGFPYmplY3Q6OnNldEZpbGVFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBmaWxlRXh0ZW5z
aW9uKQogewotICAgIGlmICh0eXBlID09IG1pbWVUeXBlVGV4dFBsYWluKSB7Ci0gICAgICAgIG1f
cGxhaW5UZXh0ID0gZGF0YTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYg
KHR5cGUgPT0gbWltZVR5cGVVUkwgfHwgdHlwZSA9PSBtaW1lVHlwZVRleHRVUklMaXN0KSB7Ci0g
ICAgICAgIG1fdXJsID0gS1VSTCgpOwotICAgICAgICBWZWN0b3I8U3RyaW5nPiB1cmlMaXN0Owot
ICAgICAgICAvLyBMaW5lIHNlcGFyYXRvciBpcyBcclxuIHBlciBSRkMgMjQ4MyAtIGhvd2V2ZXIs
IGZvciBjb21wYXRpYmlsaXR5Ci0gICAgICAgIC8vIHJlYXNvbnMgd2UgYWxzbyBhbGxvdyBqdXN0
IFxuIGhlcmUuCi0gICAgICAgIGRhdGEuc3BsaXQoJ1xuJywgdXJpTGlzdCk7Ci0gICAgICAgIC8v
IFByb2Nlc3MgdGhlIGlucHV0IGFuZCBjb3B5IHRoZSBmaXJzdCB2YWxpZCBVUkwgaW50byB0aGUg
dXJsIG1lbWJlci4KLSAgICAgICAgLy8gSW4gY2FzZSBubyBVUkxzIGNhbiBiZSBmb3VuZCwgc3Vi
c2VxdWVudCBjYWxscyB0byBnZXREYXRhKCJVUkwiKQotICAgICAgICAvLyB3aWxsIGdldCBhbiBl
bXB0eSBzdHJpbmcuIFRoaXMgaXMgaW4gbGluZSB3aXRoIHRoZSBIVE1MNSBzcGVjIChzZWUKLSAg
ICAgICAgLy8gIlRoZSBEcmFnRXZlbnQgYW5kIERhdGFUcmFuc2ZlciBpbnRlcmZhY2VzIikuCi0g
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdXJpTGlzdC5zaXplKCk7ICsraSkgewotICAg
ICAgICAgICAgU3RyaW5nJiBsaW5lID0gdXJpTGlzdFtpXTsKLSAgICAgICAgICAgIGxpbmUgPSBs
aW5lLnN0cmlwV2hpdGVTcGFjZSgpOwotICAgICAgICAgICAgaWYgKGxpbmUuaXNFbXB0eSgpKSB7
Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBp
ZiAobGluZVswXSA9PSAnIycpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICBLVVJMIHVybCA9IEtVUkwoUGFyc2VkVVJMU3RyaW5nLCBsaW5lKTsKLSAgICAgICAgICAgIGlm
ICh1cmwuaXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICAgICAgbV91cmwgPSB1cmw7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgbV91cmlM
aXN0ID0gZGF0YTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKHR5cGUg
PT0gbWltZVR5cGVUZXh0SFRNTCkgewotICAgICAgICBtX3RleHRIdG1sID0gZGF0YTsKLSAgICAg
ICAgbV9odG1sQmFzZVVybCA9IEtVUkwoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQot
Ci0gICAgaWYgKHR5cGUgPT0gbWltZVR5cGVEb3dubG9hZFVSTCkgewotICAgICAgICBtX2Rvd25s
b2FkTWV0YWRhdGEgPSBkYXRhOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLUNocm9taXVtRGF0YU9iamVjdDo6Q2hyb21pdW1EYXRhT2JqZWN0
KENsaXBib2FyZDo6Q2xpcGJvYXJkVHlwZSBjbGlwYm9hcmRUeXBlKQotICAgIDogbV9jbGlwYm9h
cmRUeXBlKGNsaXBib2FyZFR5cGUpCi17Ci19Ci0KLUNocm9taXVtRGF0YU9iamVjdDo6Q2hyb21p
dW1EYXRhT2JqZWN0KGNvbnN0IENocm9taXVtRGF0YU9iamVjdCYgb3RoZXIpCi0gICAgOiBSZWZD
b3VudGVkPENocm9taXVtRGF0YU9iamVjdD4oKQotICAgICwgbV9jbGlwYm9hcmRUeXBlKG90aGVy
Lm1fY2xpcGJvYXJkVHlwZSkKLSAgICAsIG1fdXJsVGl0bGUob3RoZXIubV91cmxUaXRsZSkKLSAg
ICAsIG1fZG93bmxvYWRNZXRhZGF0YShvdGhlci5tX2Rvd25sb2FkTWV0YWRhdGEpCi0gICAgLCBt
X2ZpbGVFeHRlbnNpb24ob3RoZXIubV9maWxlRXh0ZW5zaW9uKQotICAgICwgbV9maWxlbmFtZXMo
b3RoZXIubV9maWxlbmFtZXMpCi0gICAgLCBtX3BsYWluVGV4dChvdGhlci5tX3BsYWluVGV4dCkK
LSAgICAsIG1fdGV4dEh0bWwob3RoZXIubV90ZXh0SHRtbCkKLSAgICAsIG1faHRtbEJhc2VVcmwo
b3RoZXIubV9odG1sQmFzZVVybCkKLSAgICAsIG1fZmlsZUNvbnRlbnRGaWxlbmFtZShvdGhlci5t
X2ZpbGVDb250ZW50RmlsZW5hbWUpCi0gICAgLCBtX3VybChvdGhlci5tX3VybCkKLSAgICAsIG1f
dXJpTGlzdChvdGhlci5tX3VyaUxpc3QpCi17Ci0gICAgaWYgKG90aGVyLm1fZmlsZUNvbnRlbnQu
Z2V0KCkpCi0gICAgICAgIG1fZmlsZUNvbnRlbnQgPSBvdGhlci5tX2ZpbGVDb250ZW50LT5jb3B5
KCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKyAgICBpZiAobV9sZWdhY3lEYXRhKQor
ICAgICAgICBtX2xlZ2FjeURhdGEtPnNldEZpbGVFeHRlbnNpb24oZmlsZUV4dGVuc2lvbik7Cisg
ICAgZWxzZQorICAgICAgICBtX3dyaXRhYmxlRGF0YS0+c2V0RmlsZUV4dGVuc2lvbihmaWxlRXh0
ZW5zaW9uKTsKK30KKworU3RyaW5nIENocm9taXVtRGF0YU9iamVjdDo6ZmlsZUNvbnRlbnRGaWxl
bmFtZSgpIGNvbnN0Cit7CisgICAgaWYgKG1fbGVnYWN5RGF0YSkKKyAgICAgICAgcmV0dXJuIG1f
bGVnYWN5RGF0YS0+ZmlsZUNvbnRlbnRGaWxlbmFtZSgpOworICAgIHJldHVybiBtX3dyaXRhYmxl
RGF0YS0+ZmlsZUNvbnRlbnRGaWxlbmFtZSgpOworfQorCit2b2lkIENocm9taXVtRGF0YU9iamVj
dDo6c2V0RmlsZUNvbnRlbnRGaWxlbmFtZShjb25zdCBTdHJpbmcmIGZpbGVDb250ZW50RmlsZW5h
bWUpCit7CisgICAgaWYgKG1fbGVnYWN5RGF0YSkKKyAgICAgICAgICBtX2xlZ2FjeURhdGEtPnNl
dEZpbGVDb250ZW50RmlsZW5hbWUoZmlsZUNvbnRlbnRGaWxlbmFtZSk7CisgICAgZWxzZQorICAg
ICAgICAgIG1fd3JpdGFibGVEYXRhLT5zZXRGaWxlQ29udGVudEZpbGVuYW1lKGZpbGVDb250ZW50
RmlsZW5hbWUpOworfQorCitQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gQ2hyb21pdW1EYXRhT2Jq
ZWN0OjpmaWxlQ29udGVudCgpIGNvbnN0Cit7CisgICAgaWYgKG1fbGVnYWN5RGF0YSkKKyAgICAg
ICAgcmV0dXJuIG1fbGVnYWN5RGF0YS0+ZmlsZUNvbnRlbnQoKTsKKyAgICByZXR1cm4gbV93cml0
YWJsZURhdGEtPmZpbGVDb250ZW50KCk7Cit9CisKK3ZvaWQgQ2hyb21pdW1EYXRhT2JqZWN0Ojpz
ZXRGaWxlQ29udGVudChQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZmlsZUNvbnRlbnQpCit7Cisg
ICAgaWYgKG1fbGVnYWN5RGF0YSkKKyAgICAgICAgbV9sZWdhY3lEYXRhLT5zZXRGaWxlQ29udGVu
dChmaWxlQ29udGVudCk7CisgICAgZWxzZQorICAgICAgICBtX3dyaXRhYmxlRGF0YS0+c2V0Rmls
ZUNvbnRlbnQoZmlsZUNvbnRlbnQpOworfQorCit9CisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmggYi9XZWJDb3JlL3BsYXRmb3JtL2No
cm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5oCmluZGV4IGQ4NjQyM2EuLjRhYWM1YzkgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmgKKysr
IGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuaApAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgsIDIwMDksIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpA
QCAtMzEsMzEgKzMxLDE4IEBACiAjaWZuZGVmIENocm9taXVtRGF0YU9iamVjdF9oCiAjZGVmaW5l
IENocm9taXVtRGF0YU9iamVjdF9oCiAKLSNpbmNsdWRlICJDbGlwYm9hcmQuaCIKLSNpbmNsdWRl
ICJLVVJMLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlICJTaGFyZWRC
dWZmZXIuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgIkNocm9taXVtRGF0
YU9iamVjdExlZ2FjeS5oIgorI2luY2x1ZGUgIlJlYWRhYmxlRGF0YU9iamVjdC5oIgorI2luY2x1
ZGUgIldyaXRhYmxlRGF0YU9iamVjdC5oIgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8vIEEgZGF0YSBvYmplY3QgZm9yIGhvbGRpbmcgZGF0YSB0
aGF0IHdvdWxkIGJlIGluIGEgY2xpcGJvYXJkIG9yIG1vdmVkCi0vLyBkdXJpbmcgYSBkcmFnLW4t
ZHJvcCBvcGVyYXRpb24uICBUaGlzIGlzIHRoZSBkYXRhIHRoYXQgV2ViQ29yZSBpcyBhd2FyZQot
Ly8gb2YgYW5kIGlzIG5vdCBzcGVjaWZpYyB0byBhIHBsYXRmb3JtLgogY2xhc3MgQ2hyb21pdW1E
YXRhT2JqZWN0IDogcHVibGljIFJlZkNvdW50ZWQ8Q2hyb21pdW1EYXRhT2JqZWN0PiB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8Q2hyb21pdW1EYXRhT2JqZWN0PiBjcmVhdGUoQ2xp
cGJvYXJkOjpDbGlwYm9hcmRUeXBlIGNsaXBib2FyZFR5cGUpCi0gICAgewotICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IENocm9taXVtRGF0YU9iamVjdChjbGlwYm9hcmRUeXBlKSk7Ci0gICAg
fQotCi0gICAgUGFzc1JlZlB0cjxDaHJvbWl1bURhdGFPYmplY3Q+IGNvcHkoKSBjb25zdAotICAg
IHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDaHJvbWl1bURhdGFPYmplY3QoKnRoaXMp
KTsKLSAgICB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2hyb21pdW1EYXRhT2JqZWN0PiBjcmVh
dGUoUGFzc1JlZlB0cjxDaHJvbWl1bURhdGFPYmplY3RMZWdhY3k+IGRhdGEpOworICAgIHN0YXRp
YyBQYXNzUmVmUHRyPENocm9taXVtRGF0YU9iamVjdD4gY3JlYXRlUmVhZGFibGUoQ2xpcGJvYXJk
OjpDbGlwYm9hcmRUeXBlKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDaHJvbWl1bURhdGFPYmpl
Y3Q+IGNyZWF0ZVdyaXRhYmxlKENsaXBib2FyZDo6Q2xpcGJvYXJkVHlwZSk7CiAKICAgICB2b2lk
IGNsZWFyRGF0YShjb25zdCBTdHJpbmcmIHR5cGUpOwogICAgIHZvaWQgY2xlYXJBbGwoKTsKQEAg
LTY4LDUyICs1NSwzNCBAQCBwdWJsaWM6CiAgICAgYm9vbCBzZXREYXRhKGNvbnN0IFN0cmluZyYg
dHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKTsKIAogICAgIC8vIFNwZWNpYWwgaGFuZGxlcnMgZm9y
IFVSTC9IVE1MIG1ldGFkYXRhLgotICAgIFN0cmluZyB1cmxUaXRsZSgpIGNvbnN0IHsgcmV0dXJu
IG1fdXJsVGl0bGU7IH0KLSAgICB2b2lkIHNldFVybFRpdGxlKGNvbnN0IFN0cmluZyYgdXJsVGl0
bGUpIHsgbV91cmxUaXRsZSA9IHVybFRpdGxlOyB9Ci0gICAgS1VSTCBodG1sQmFzZVVybCgpIGNv
bnN0IHsgcmV0dXJuIG1faHRtbEJhc2VVcmw7IH0KLSAgICB2b2lkIHNldEh0bWxCYXNlVXJsKGNv
bnN0IEtVUkwmIHVybCkgeyBtX2h0bWxCYXNlVXJsID0gdXJsOyB9CisgICAgU3RyaW5nIHVybFRp
dGxlKCkgY29uc3Q7CisgICAgdm9pZCBzZXRVcmxUaXRsZShjb25zdCBTdHJpbmcmIHVybFRpdGxl
KTsKKyAgICBLVVJMIGh0bWxCYXNlVXJsKCkgY29uc3Q7CisgICAgdm9pZCBzZXRIdG1sQmFzZVVy
bChjb25zdCBLVVJMJiB1cmwpOwogCiAgICAgLy8gVXNlZCB0byBoYW5kbGUgZmlsZXMgYmVpbmcg
ZHJhZ2dlZCBpbi4KLSAgICBib29sIGNvbnRhaW5zRmlsZW5hbWVzKCkgY29uc3QgeyByZXR1cm4g
IW1fZmlsZW5hbWVzLmlzRW1wdHkoKTsgfQotICAgIFZlY3RvcjxTdHJpbmc+IGZpbGVuYW1lcygp
IGNvbnN0IHsgcmV0dXJuIG1fZmlsZW5hbWVzOyB9Ci0gICAgdm9pZCBzZXRGaWxlbmFtZXMoY29u
c3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcykgeyBtX2ZpbGVuYW1lcyA9IGZpbGVuYW1lczsg
fQorICAgIGJvb2wgY29udGFpbnNGaWxlbmFtZXMoKSBjb25zdDsKKyAgICBWZWN0b3I8U3RyaW5n
PiBmaWxlbmFtZXMoKSBjb25zdDsKKyAgICB2b2lkIHNldEZpbGVuYW1lcyhjb25zdCBWZWN0b3I8
U3RyaW5nPiYgZmlsZW5hbWVzKTsKIAogICAgIC8vIFVzZWQgdG8gaGFuZGxlIGZpbGVzIChpbWFn
ZXMpIGJlaW5nIGRyYWdnZWQgb3V0LgotICAgIFN0cmluZyBmaWxlRXh0ZW5zaW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9maWxlRXh0ZW5zaW9uOyB9Ci0gICAgdm9pZCBzZXRGaWxlRXh0ZW5zaW9uKGNv
bnN0IFN0cmluZyYgZmlsZUV4dGVuc2lvbikgeyBtX2ZpbGVFeHRlbnNpb24gPSBmaWxlRXh0ZW5z
aW9uOyB9Ci0gICAgU3RyaW5nIGZpbGVDb250ZW50RmlsZW5hbWUoKSBjb25zdCB7IHJldHVybiBt
X2ZpbGVDb250ZW50RmlsZW5hbWU7IH0KLSAgICB2b2lkIHNldEZpbGVDb250ZW50RmlsZW5hbWUo
Y29uc3QgU3RyaW5nJiBmaWxlQ29udGVudEZpbGVuYW1lKSB7IG1fZmlsZUNvbnRlbnRGaWxlbmFt
ZSA9IGZpbGVDb250ZW50RmlsZW5hbWU7IH0KLSAgICBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4g
ZmlsZUNvbnRlbnQoKSBjb25zdCB7IHJldHVybiBtX2ZpbGVDb250ZW50OyB9Ci0gICAgdm9pZCBz
ZXRGaWxlQ29udGVudChQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZmlsZUNvbnRlbnQpIHsgbV9m
aWxlQ29udGVudCA9IGZpbGVDb250ZW50OyB9CisgICAgU3RyaW5nIGZpbGVFeHRlbnNpb24oKSBj
b25zdDsKKyAgICB2b2lkIHNldEZpbGVFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBmaWxlRXh0ZW5z
aW9uKTsKKyAgICBTdHJpbmcgZmlsZUNvbnRlbnRGaWxlbmFtZSgpIGNvbnN0OworICAgIHZvaWQg
c2V0RmlsZUNvbnRlbnRGaWxlbmFtZShjb25zdCBTdHJpbmcmIGZpbGVDb250ZW50RmlsZW5hbWUp
OworICAgIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBmaWxlQ29udGVudCgpIGNvbnN0OworICAg
IHZvaWQgc2V0RmlsZUNvbnRlbnQoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGZpbGVDb250ZW50
KTsKIAogcHJpdmF0ZToKLSAgICBDaHJvbWl1bURhdGFPYmplY3QoQ2xpcGJvYXJkOjpDbGlwYm9h
cmRUeXBlKTsKLSAgICBDaHJvbWl1bURhdGFPYmplY3QoY29uc3QgQ2hyb21pdW1EYXRhT2JqZWN0
Jik7Ci0KLSAgICBDbGlwYm9hcmQ6OkNsaXBib2FyZFR5cGUgbV9jbGlwYm9hcmRUeXBlOwotCi0g
ICAgU3RyaW5nIG1fdXJsVGl0bGU7Ci0KLSAgICBTdHJpbmcgbV9kb3dubG9hZE1ldGFkYXRhOwot
Ci0gICAgU3RyaW5nIG1fZmlsZUV4dGVuc2lvbjsKLSAgICBWZWN0b3I8U3RyaW5nPiBtX2ZpbGVu
YW1lczsKLQotICAgIFN0cmluZyBtX3BsYWluVGV4dDsKLQotICAgIFN0cmluZyBtX3RleHRIdG1s
OwotICAgIEtVUkwgbV9odG1sQmFzZVVybDsKLQotICAgIFN0cmluZyBtX2ZpbGVDb250ZW50Rmls
ZW5hbWU7Ci0gICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV9maWxlQ29udGVudDsKKyAgICBDaHJv
bWl1bURhdGFPYmplY3QoUGFzc1JlZlB0cjxDaHJvbWl1bURhdGFPYmplY3RMZWdhY3k+KTsKKyAg
ICBDaHJvbWl1bURhdGFPYmplY3QoUGFzc1JlZlB0cjxSZWFkYWJsZURhdGFPYmplY3Q+KTsKKyAg
ICBDaHJvbWl1bURhdGFPYmplY3QoUGFzc1JlZlB0cjxXcml0YWJsZURhdGFPYmplY3Q+KTsKIAot
ICAgIC8vIFRoZXNlIHR3byBhcmUgbGlua2VkLiBTZXR0aW5nIG1fdXJsIHdpbGwgc2V0IG1fdXJp
TGlzdCB0byB0aGUgc2FtZQotICAgIC8vIHN0cmluZyB2YWx1ZTsgc2V0dGluZyBtX3VyaUxpc3Qg
d2lsbCBjYXVzZSBpdHMgY29udGVudHMgdG8gYmUgcGFyc2VkCi0gICAgLy8gYWNjb3JkaW5nIHRv
IFJGQyAyNDgzIGFuZCB0aGUgZmlyc3QgVVJMIGZvdW5kIHdpbGwgYmUgc2V0IGluIG1fdXJsLgot
ICAgIEtVUkwgbV91cmw7Ci0gICAgU3RyaW5nIG1fdXJpTGlzdDsKKyAgICBSZWZQdHI8Q2hyb21p
dW1EYXRhT2JqZWN0TGVnYWN5PiBtX2xlZ2FjeURhdGE7CisgICAgUmVmUHRyPFJlYWRhYmxlRGF0
YU9iamVjdD4gbV9yZWFkYWJsZURhdGE7CisgICAgUmVmUHRyPFdyaXRhYmxlRGF0YU9iamVjdD4g
bV93cml0YWJsZURhdGE7CiB9OwogCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCit9CiAKICNlbmRp
ZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmpl
Y3RMZWdhY3kuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmpl
Y3RMZWdhY3kuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyOTUyYzAK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0
YU9iamVjdExlZ2FjeS5jcHAKQEAgLTAsMCArMSwyNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMp
IDIwMDgsIDIwMDksIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICogCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0
aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkNocm9taXVtRGF0YU9iamVjdExlZ2FjeS5oIgorCisjaW5jbHVk
ZSAiQ2hyb21pdW1CcmlkZ2UuaCIKKyNpbmNsdWRlICJDbGlwYm9hcmRNaW1lVHlwZXMuaCIKKyNp
bmNsdWRlICJQYXN0ZWJvYXJkLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gUGVyIFJG
QyAyNDgzLCB0aGUgbGluZSBzZXBhcmF0b3IgZm9yICJ0ZXh0Ly4uLiIgTUlNRSB0eXBlcyBpcyBD
Ui1MRi4KK3N0YXRpYyBjaGFyIGNvbnN0KiBjb25zdCB0ZXh0TUlNRVR5cGVMaW5lU2VwYXJhdG9y
ID0gIlxyXG4iOworCit2b2lkIENocm9taXVtRGF0YU9iamVjdExlZ2FjeTo6Y2xlYXJEYXRhKGNv
bnN0IFN0cmluZyYgdHlwZSkKK3sKKyAgICBpZiAodHlwZSA9PSBtaW1lVHlwZVRleHRQbGFpbikg
eworICAgICAgICBtX3BsYWluVGV4dCA9ICIiOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKHR5cGUgPT0gbWltZVR5cGVVUkwgfHwgdHlwZSA9PSBtaW1lVHlwZVRleHRVUklMaXN0
KSB7CisgICAgICAgIG1fdXJpTGlzdCA9ICIiOworICAgICAgICBtX3VybCA9IEtVUkwoKTsKKyAg
ICAgICAgbV91cmxUaXRsZSA9ICIiOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KHR5cGUgPT0gbWltZVR5cGVUZXh0SFRNTCkgeworICAgICAgICBtX3RleHRIdG1sID0gIiI7Cisg
ICAgICAgIG1faHRtbEJhc2VVcmwgPSBLVVJMKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAodHlwZSA9PSBtaW1lVHlwZURvd25sb2FkVVJMKSB7CisgICAgICAgIG1fZG93bmxv
YWRNZXRhZGF0YSA9ICIiOworICAgICAgICByZXR1cm47CisgICAgfQorfQorCit2b2lkIENocm9t
aXVtRGF0YU9iamVjdExlZ2FjeTo6Y2xlYXJBbGwoKQoreworICAgIGNsZWFyQWxsRXhjZXB0Rmls
ZXMoKTsKKyAgICBtX2ZpbGVuYW1lcy5jbGVhcigpOworfQorCit2b2lkIENocm9taXVtRGF0YU9i
amVjdExlZ2FjeTo6Y2xlYXJBbGxFeGNlcHRGaWxlcygpCit7CisgICAgbV91cmxUaXRsZSA9ICIi
OworICAgIG1fdXJsID0gS1VSTCgpOworICAgIG1fdXJpTGlzdCA9ICIiOworICAgIG1fZG93bmxv
YWRNZXRhZGF0YSA9ICIiOworICAgIG1fZmlsZUV4dGVuc2lvbiA9ICIiOworICAgIG1fcGxhaW5U
ZXh0ID0gIiI7CisgICAgbV90ZXh0SHRtbCA9ICIiOworICAgIG1faHRtbEJhc2VVcmwgPSBLVVJM
KCk7CisgICAgbV9maWxlQ29udGVudEZpbGVuYW1lID0gIiI7CisgICAgaWYgKG1fZmlsZUNvbnRl
bnQpCisgICAgICAgIG1fZmlsZUNvbnRlbnQtPmNsZWFyKCk7Cit9CisKK2Jvb2wgQ2hyb21pdW1E
YXRhT2JqZWN0TGVnYWN5OjpoYXNEYXRhKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIW1fdXJsLmlz
RW1wdHkoKQorICAgICAgICB8fCAhbV91cmlMaXN0LmlzRW1wdHkoKQorICAgICAgICB8fCAhbV9k
b3dubG9hZE1ldGFkYXRhLmlzRW1wdHkoKQorICAgICAgICB8fCAhbV9maWxlRXh0ZW5zaW9uLmlz
RW1wdHkoKQorICAgICAgICB8fCAhbV9maWxlbmFtZXMuaXNFbXB0eSgpCisgICAgICAgIHx8ICFt
X3BsYWluVGV4dC5pc0VtcHR5KCkKKyAgICAgICAgfHwgIW1fdGV4dEh0bWwuaXNFbXB0eSgpCisg
ICAgICAgIHx8IG1fZmlsZUNvbnRlbnQ7Cit9CisKK0hhc2hTZXQ8U3RyaW5nPiBDaHJvbWl1bURh
dGFPYmplY3RMZWdhY3k6OnR5cGVzKCkgY29uc3QKK3sKKyAgICAvLyBUaGlzIGlzIGN1cnJlbnRs
eSBicm9rZW4gZm9yIHBhc3RlYm9hcmQgZXZlbnRzLCBhbmQgYWx3YXlzIGhhcyBiZWVuLgorICAg
IEhhc2hTZXQ8U3RyaW5nPiByZXN1bHRzOworCisgICAgaWYgKCFtX3BsYWluVGV4dC5pc0VtcHR5
KCkpIHsKKyAgICAgICAgcmVzdWx0cy5hZGQobWltZVR5cGVUZXh0KTsKKyAgICAgICAgcmVzdWx0
cy5hZGQobWltZVR5cGVUZXh0UGxhaW4pOworICAgIH0KKworICAgIGlmIChtX3VybC5pc1ZhbGlk
KCkpCisgICAgICAgIHJlc3VsdHMuYWRkKG1pbWVUeXBlVVJMKTsKKworICAgIGlmICghbV91cmlM
aXN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmVzdWx0cy5hZGQobWltZVR5cGVUZXh0VVJJTGlzdCk7
CisKKyAgICBpZiAoIW1fdGV4dEh0bWwuaXNFbXB0eSgpKQorICAgICAgICByZXN1bHRzLmFkZCht
aW1lVHlwZVRleHRIVE1MKTsKKworICAgIGlmICghbV9maWxlbmFtZXMuaXNFbXB0eSgpKQorICAg
ICAgICByZXN1bHRzLmFkZCgiRmlsZXMiKTsKKworICAgIHJldHVybiByZXN1bHRzOworfQorCitT
dHJpbmcgQ2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5OjpnZXREYXRhKGNvbnN0IFN0cmluZyYgdHlw
ZSwgYm9vbCYgc3VjY2VzcykKK3sKKyAgICBpZiAodHlwZSA9PSBtaW1lVHlwZVRleHRQbGFpbikg
eworICAgICAgICBpZiAobV9jbGlwYm9hcmRUeXBlID09IENsaXBib2FyZDo6Q29weUFuZFBhc3Rl
KSB7CisgICAgICAgICAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyIGJ1ZmZl
ciA9CisgICAgICAgICAgICAgICAgUGFzdGVib2FyZDo6Z2VuZXJhbFBhc3RlYm9hcmQoKS0+aXNT
ZWxlY3Rpb25Nb2RlKCkgPworICAgICAgICAgICAgICAgIFBhc3RlYm9hcmRQcml2YXRlOjpTZWxl
Y3Rpb25CdWZmZXIgOgorICAgICAgICAgICAgICAgIFBhc3RlYm9hcmRQcml2YXRlOjpTdGFuZGFy
ZEJ1ZmZlcjsKKyAgICAgICAgICAgIFN0cmluZyB0ZXh0ID0gQ2hyb21pdW1CcmlkZ2U6OmNsaXBi
b2FyZFJlYWRQbGFpblRleHQoYnVmZmVyKTsKKyAgICAgICAgICAgIHN1Y2Nlc3MgPSAhdGV4dC5p
c0VtcHR5KCk7CisgICAgICAgICAgICByZXR1cm4gdGV4dDsKKyAgICAgICAgfQorICAgICAgICBz
dWNjZXNzID0gIW1fcGxhaW5UZXh0LmlzRW1wdHkoKTsKKyAgICAgICAgcmV0dXJuIG1fcGxhaW5U
ZXh0OworICAgIH0KKworICAgIGlmICh0eXBlID09IG1pbWVUeXBlVVJMKSB7CisgICAgICAgIHN1
Y2Nlc3MgPSAhbV91cmwuaXNFbXB0eSgpOworICAgICAgICByZXR1cm4gbV91cmwuc3RyaW5nKCk7
CisgICAgfQorCisgICAgaWYgKHR5cGUgPT0gbWltZVR5cGVUZXh0VVJJTGlzdCkgeworICAgICAg
ICBzdWNjZXNzID0gIW1fdXJpTGlzdC5pc0VtcHR5KCk7CisgICAgICAgIHJldHVybiBtX3VyaUxp
c3Q7CisgICAgfQorCisgICAgaWYgKHR5cGUgPT0gbWltZVR5cGVUZXh0SFRNTCkgeworICAgICAg
ICBpZiAobV9jbGlwYm9hcmRUeXBlID09IENsaXBib2FyZDo6Q29weUFuZFBhc3RlKSB7CisgICAg
ICAgICAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyIGJ1ZmZlciA9CisgICAg
ICAgICAgICAgICAgUGFzdGVib2FyZDo6Z2VuZXJhbFBhc3RlYm9hcmQoKS0+aXNTZWxlY3Rpb25N
b2RlKCkgPworICAgICAgICAgICAgICAgIFBhc3RlYm9hcmRQcml2YXRlOjpTZWxlY3Rpb25CdWZm
ZXIgOgorICAgICAgICAgICAgICAgIFBhc3RlYm9hcmRQcml2YXRlOjpTdGFuZGFyZEJ1ZmZlcjsK
KyAgICAgICAgICAgIFN0cmluZyBodG1sVGV4dDsKKyAgICAgICAgICAgIEtVUkwgc291cmNlVVJM
OworICAgICAgICAgICAgQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFJlYWRIVE1MKGJ1ZmZlciwg
Jmh0bWxUZXh0LCAmc291cmNlVVJMKTsKKyAgICAgICAgICAgIHN1Y2Nlc3MgPSAhaHRtbFRleHQu
aXNFbXB0eSgpOworICAgICAgICAgICAgcmV0dXJuIGh0bWxUZXh0OworICAgICAgICB9CisgICAg
ICAgIHN1Y2Nlc3MgPSAhbV90ZXh0SHRtbC5pc0VtcHR5KCk7CisgICAgICAgIHJldHVybiBtX3Rl
eHRIdG1sOworICAgIH0KKworICAgIGlmICh0eXBlID09IG1pbWVUeXBlRG93bmxvYWRVUkwpIHsK
KyAgICAgICAgc3VjY2VzcyA9ICFtX2Rvd25sb2FkTWV0YWRhdGEuaXNFbXB0eSgpOworICAgICAg
ICByZXR1cm4gbV9kb3dubG9hZE1ldGFkYXRhOworICAgIH0KKworICAgIHN1Y2Nlc3MgPSBmYWxz
ZTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK2Jvb2wgQ2hyb21pdW1EYXRhT2JqZWN0TGVn
YWN5OjpzZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKQorewor
ICAgIGlmICh0eXBlID09IG1pbWVUeXBlVGV4dFBsYWluKSB7CisgICAgICAgIG1fcGxhaW5UZXh0
ID0gZGF0YTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKHR5cGUgPT0g
bWltZVR5cGVVUkwgfHwgdHlwZSA9PSBtaW1lVHlwZVRleHRVUklMaXN0KSB7CisgICAgICAgIG1f
dXJsID0gS1VSTCgpOworICAgICAgICBWZWN0b3I8U3RyaW5nPiB1cmlMaXN0OworICAgICAgICAv
LyBMaW5lIHNlcGFyYXRvciBpcyBcclxuIHBlciBSRkMgMjQ4MyAtIGhvd2V2ZXIsIGZvciBjb21w
YXRpYmlsaXR5CisgICAgICAgIC8vIHJlYXNvbnMgd2UgYWxzbyBhbGxvdyBqdXN0IFxuIGhlcmUu
CisgICAgICAgIGRhdGEuc3BsaXQoJ1xuJywgdXJpTGlzdCk7CisgICAgICAgIC8vIFByb2Nlc3Mg
dGhlIGlucHV0IGFuZCBjb3B5IHRoZSBmaXJzdCB2YWxpZCBVUkwgaW50byB0aGUgdXJsIG1lbWJl
ci4KKyAgICAgICAgLy8gSW4gY2FzZSBubyBVUkxzIGNhbiBiZSBmb3VuZCwgc3Vic2VxdWVudCBj
YWxscyB0byBnZXREYXRhKCJVUkwiKQorICAgICAgICAvLyB3aWxsIGdldCBhbiBlbXB0eSBzdHJp
bmcuIFRoaXMgaXMgaW4gbGluZSB3aXRoIHRoZSBIVE1MNSBzcGVjIChzZWUKKyAgICAgICAgLy8g
IlRoZSBEcmFnRXZlbnQgYW5kIERhdGFUcmFuc2ZlciBpbnRlcmZhY2VzIikuCisgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgdXJpTGlzdC5zaXplKCk7ICsraSkgeworICAgICAgICAgICAg
U3RyaW5nJiBsaW5lID0gdXJpTGlzdFtpXTsKKyAgICAgICAgICAgIGxpbmUgPSBsaW5lLnN0cmlw
V2hpdGVTcGFjZSgpOworICAgICAgICAgICAgaWYgKGxpbmUuaXNFbXB0eSgpKQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKGxpbmVbMF0gPT0gJyMnKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgS1VSTCB1cmwgPSBLVVJMKFBhcnNlZFVS
TFN0cmluZywgbGluZSk7CisgICAgICAgICAgICBpZiAodXJsLmlzVmFsaWQoKSkgeworICAgICAg
ICAgICAgICAgIG1fdXJsID0gdXJsOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIG1fdXJpTGlzdCA9IGRhdGE7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworICAgIGlmICh0eXBlID09IG1pbWVUeXBlVGV4dEhUTUwpIHsKKyAg
ICAgICAgbV90ZXh0SHRtbCA9IGRhdGE7CisgICAgICAgIG1faHRtbEJhc2VVcmwgPSBLVVJMKCk7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmICh0eXBlID09IG1pbWVUeXBl
RG93bmxvYWRVUkwpIHsKKyAgICAgICAgbV9kb3dubG9hZE1ldGFkYXRhID0gZGF0YTsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitDaHJvbWl1
bURhdGFPYmplY3RMZWdhY3k6OkNocm9taXVtRGF0YU9iamVjdExlZ2FjeShDbGlwYm9hcmQ6OkNs
aXBib2FyZFR5cGUgY2xpcGJvYXJkVHlwZSkKKyAgICA6IG1fY2xpcGJvYXJkVHlwZShjbGlwYm9h
cmRUeXBlKQoreworfQorCitDaHJvbWl1bURhdGFPYmplY3RMZWdhY3k6OkNocm9taXVtRGF0YU9i
amVjdExlZ2FjeShjb25zdCBDaHJvbWl1bURhdGFPYmplY3RMZWdhY3kmIG90aGVyKQorICAgIDog
UmVmQ291bnRlZDxDaHJvbWl1bURhdGFPYmplY3RMZWdhY3k+KCkKKyAgICAsIG1fY2xpcGJvYXJk
VHlwZShvdGhlci5tX2NsaXBib2FyZFR5cGUpCisgICAgLCBtX3VybFRpdGxlKG90aGVyLm1fdXJs
VGl0bGUpCisgICAgLCBtX2Rvd25sb2FkTWV0YWRhdGEob3RoZXIubV9kb3dubG9hZE1ldGFkYXRh
KQorICAgICwgbV9maWxlRXh0ZW5zaW9uKG90aGVyLm1fZmlsZUV4dGVuc2lvbikKKyAgICAsIG1f
ZmlsZW5hbWVzKG90aGVyLm1fZmlsZW5hbWVzKQorICAgICwgbV9wbGFpblRleHQob3RoZXIubV9w
bGFpblRleHQpCisgICAgLCBtX3RleHRIdG1sKG90aGVyLm1fdGV4dEh0bWwpCisgICAgLCBtX2h0
bWxCYXNlVXJsKG90aGVyLm1faHRtbEJhc2VVcmwpCisgICAgLCBtX2ZpbGVDb250ZW50RmlsZW5h
bWUob3RoZXIubV9maWxlQ29udGVudEZpbGVuYW1lKQorICAgICwgbV91cmwob3RoZXIubV91cmwp
CisgICAgLCBtX3VyaUxpc3Qob3RoZXIubV91cmlMaXN0KQoreworICAgIGlmIChvdGhlci5tX2Zp
bGVDb250ZW50LmdldCgpKQorICAgICAgICBtX2ZpbGVDb250ZW50ID0gb3RoZXIubV9maWxlQ29u
dGVudC0+Y29weSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdExlZ2FjeS5oIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3RMZWdhY3kuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWJlN2FhCi0tLSAvZGV2L251bGwKKysrIGIv
V2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3RMZWdhY3kuaApAQCAt
MCwwICsxLDExOSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOCwgMjAwOSwgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENocm9taXVtRGF0YU9iamVjdExlZ2FjeV9o
CisjZGVmaW5lIENocm9taXVtRGF0YU9iamVjdExlZ2FjeV9oCisKKyNpbmNsdWRlICJDbGlwYm9h
cmQuaCIKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNp
bmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nSGFzaC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEEgZGF0YSBv
YmplY3QgZm9yIGhvbGRpbmcgZGF0YSB0aGF0IHdvdWxkIGJlIGluIGEgY2xpcGJvYXJkIG9yIG1v
dmVkCisvLyBkdXJpbmcgYSBkcmFnLW4tZHJvcCBvcGVyYXRpb24uICBUaGlzIGlzIHRoZSBkYXRh
IHRoYXQgV2ViQ29yZSBpcyBhd2FyZQorLy8gb2YgYW5kIGlzIG5vdCBzcGVjaWZpYyB0byBhIHBs
YXRmb3JtLgorY2xhc3MgQ2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5IDogcHVibGljIFJlZkNvdW50
ZWQ8Q2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5PiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8Q2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5PiBjcmVhdGUoQ2xpcGJvYXJkOjpDbGlwYm9h
cmRUeXBlIGNsaXBib2FyZFR5cGUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IENocm9taXVtRGF0YU9iamVjdExlZ2FjeShjbGlwYm9hcmRUeXBlKSk7CisgICAgfQorCisgICAg
UGFzc1JlZlB0cjxDaHJvbWl1bURhdGFPYmplY3RMZWdhY3k+IGNvcHkoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDaHJvbWl1bURhdGFPYmplY3RMZWdhY3koKnRo
aXMpKTsKKyAgICB9CisKKyAgICB2b2lkIGNsZWFyRGF0YShjb25zdCBTdHJpbmcmIHR5cGUpOwor
ICAgIHZvaWQgY2xlYXJBbGwoKTsKKyAgICB2b2lkIGNsZWFyQWxsRXhjZXB0RmlsZXMoKTsKKwor
ICAgIGJvb2wgaGFzRGF0YSgpIGNvbnN0OworCisgICAgSGFzaFNldDxTdHJpbmc+IHR5cGVzKCkg
Y29uc3Q7CisgICAgU3RyaW5nIGdldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBib29sJiBzdWNj
ZXNzKTsKKyAgICBib29sIHNldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcm
IGRhdGEpOworCisgICAgLy8gU3BlY2lhbCBoYW5kbGVycyBmb3IgVVJML0hUTUwgbWV0YWRhdGEu
CisgICAgU3RyaW5nIHVybFRpdGxlKCkgY29uc3QgeyByZXR1cm4gbV91cmxUaXRsZTsgfQorICAg
IHZvaWQgc2V0VXJsVGl0bGUoY29uc3QgU3RyaW5nJiB1cmxUaXRsZSkgeyBtX3VybFRpdGxlID0g
dXJsVGl0bGU7IH0KKyAgICBLVVJMIGh0bWxCYXNlVXJsKCkgY29uc3QgeyByZXR1cm4gbV9odG1s
QmFzZVVybDsgfQorICAgIHZvaWQgc2V0SHRtbEJhc2VVcmwoY29uc3QgS1VSTCYgdXJsKSB7IG1f
aHRtbEJhc2VVcmwgPSB1cmw7IH0KKworICAgIC8vIFVzZWQgdG8gaGFuZGxlIGZpbGVzIGJlaW5n
IGRyYWdnZWQgaW4uCisgICAgYm9vbCBjb250YWluc0ZpbGVuYW1lcygpIGNvbnN0IHsgcmV0dXJu
ICFtX2ZpbGVuYW1lcy5pc0VtcHR5KCk7IH0KKyAgICBWZWN0b3I8U3RyaW5nPiBmaWxlbmFtZXMo
KSBjb25zdCB7IHJldHVybiBtX2ZpbGVuYW1lczsgfQorICAgIHZvaWQgc2V0RmlsZW5hbWVzKGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMpIHsgbV9maWxlbmFtZXMgPSBmaWxlbmFtZXM7
IH0KKworICAgIC8vIFVzZWQgdG8gaGFuZGxlIGZpbGVzIChpbWFnZXMpIGJlaW5nIGRyYWdnZWQg
b3V0LgorICAgIFN0cmluZyBmaWxlRXh0ZW5zaW9uKCkgY29uc3QgeyByZXR1cm4gbV9maWxlRXh0
ZW5zaW9uOyB9CisgICAgdm9pZCBzZXRGaWxlRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgZmlsZUV4
dGVuc2lvbikgeyBtX2ZpbGVFeHRlbnNpb24gPSBmaWxlRXh0ZW5zaW9uOyB9CisgICAgU3RyaW5n
IGZpbGVDb250ZW50RmlsZW5hbWUoKSBjb25zdCB7IHJldHVybiBtX2ZpbGVDb250ZW50RmlsZW5h
bWU7IH0KKyAgICB2b2lkIHNldEZpbGVDb250ZW50RmlsZW5hbWUoY29uc3QgU3RyaW5nJiBmaWxl
Q29udGVudEZpbGVuYW1lKSB7IG1fZmlsZUNvbnRlbnRGaWxlbmFtZSA9IGZpbGVDb250ZW50Rmls
ZW5hbWU7IH0KKyAgICBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZmlsZUNvbnRlbnQoKSBjb25z
dCB7IHJldHVybiBtX2ZpbGVDb250ZW50OyB9CisgICAgdm9pZCBzZXRGaWxlQ29udGVudChQYXNz
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZmlsZUNvbnRlbnQpIHsgbV9maWxlQ29udGVudCA9IGZpbGVD
b250ZW50OyB9CisKK3ByaXZhdGU6CisgICAgQ2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5KENsaXBi
b2FyZDo6Q2xpcGJvYXJkVHlwZSk7CisgICAgQ2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5KGNvbnN0
IENocm9taXVtRGF0YU9iamVjdExlZ2FjeSYpOworCisgICAgQ2xpcGJvYXJkOjpDbGlwYm9hcmRU
eXBlIG1fY2xpcGJvYXJkVHlwZTsKKworICAgIFN0cmluZyBtX3VybFRpdGxlOworCisgICAgU3Ry
aW5nIG1fZG93bmxvYWRNZXRhZGF0YTsKKworICAgIFN0cmluZyBtX2ZpbGVFeHRlbnNpb247Cisg
ICAgVmVjdG9yPFN0cmluZz4gbV9maWxlbmFtZXM7CisKKyAgICBTdHJpbmcgbV9wbGFpblRleHQ7
CisKKyAgICBTdHJpbmcgbV90ZXh0SHRtbDsKKyAgICBLVVJMIG1faHRtbEJhc2VVcmw7CisKKyAg
ICBTdHJpbmcgbV9maWxlQ29udGVudEZpbGVuYW1lOworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+
IG1fZmlsZUNvbnRlbnQ7CisKKyAgICAvLyBUaGVzZSB0d28gYXJlIGxpbmtlZC4gU2V0dGluZyBt
X3VybCB3aWxsIHNldCBtX3VyaUxpc3QgdG8gdGhlIHNhbWUKKyAgICAvLyBzdHJpbmcgdmFsdWU7
IHNldHRpbmcgbV91cmlMaXN0IHdpbGwgY2F1c2UgaXRzIGNvbnRlbnRzIHRvIGJlIHBhcnNlZAor
ICAgIC8vIGFjY29yZGluZyB0byBSRkMgMjQ4MyBhbmQgdGhlIGZpcnN0IFVSTCBmb3VuZCB3aWxs
IGJlIHNldCBpbiBtX3VybC4KKyAgICBLVVJMIG1fdXJsOworICAgIFN0cmluZyBtX3VyaUxpc3Q7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5jcHAgYi9XZWJDb3JlL3Bs
YXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmNwcAppbmRleCBjMWIzNGRhLi5lZmZi
YzRhIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9t
aXVtLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVt
LmNwcApAQCAtODQsNiArODQsMTYgQEAgUGFzc1JlZlB0cjxDbGlwYm9hcmRDaHJvbWl1bT4gQ2xp
cGJvYXJkQ2hyb21pdW06OmNyZWF0ZShDbGlwYm9hcmRUeXBlIGNsaXBib2FyZFQKICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IENsaXBib2FyZENocm9taXVtKGNsaXBib2FyZFR5cGUsIGRhdGFPYmpl
Y3QsIHBvbGljeSwgZnJhbWUpKTsKIH0KIAorUGFzc1JlZlB0cjxDbGlwYm9hcmRDaHJvbWl1bT4g
Q2xpcGJvYXJkQ2hyb21pdW06OmNyZWF0ZShDbGlwYm9hcmRUeXBlIGNsaXBib2FyZFR5cGUsCisg
ICAgQ2xpcGJvYXJkQWNjZXNzUG9saWN5IHBvbGljeSwgRnJhbWUqIGZyYW1lKQoreworICAgIFJl
ZlB0cjxDaHJvbWl1bURhdGFPYmplY3Q+IGRhdGFPYmplY3QgPQorICAgICAgICBwb2xpY3kgPT0g
Q2xpcGJvYXJkV3JpdGFibGUgPworICAgICAgICBDaHJvbWl1bURhdGFPYmplY3Q6OmNyZWF0ZVdy
aXRhYmxlKGNsaXBib2FyZFR5cGUpIDoKKyAgICAgICAgQ2hyb21pdW1EYXRhT2JqZWN0OjpjcmVh
dGVSZWFkYWJsZShjbGlwYm9hcmRUeXBlKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IENsaXBi
b2FyZENocm9taXVtKGNsaXBib2FyZFR5cGUsIGRhdGFPYmplY3QsIHBvbGljeSwgZnJhbWUpKTsK
K30KKwogdm9pZCBDbGlwYm9hcmRDaHJvbWl1bTo6Y2xlYXJEYXRhKGNvbnN0IFN0cmluZyYgdHlw
ZSkKIHsKICAgICBpZiAocG9saWN5KCkgIT0gQ2xpcGJvYXJkV3JpdGFibGUgfHwgIW1fZGF0YU9i
amVjdCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hy
b21pdW0uaCBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uaApp
bmRleCAxNGY1OWU5Li4xZDY5OTIxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9t
aXVtL0NsaXBib2FyZENocm9taXVtLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9D
bGlwYm9hcmRDaHJvbWl1bS5oCkBAIC00OCw2ICs0OCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2xpcGJvYXJkQ2hyb21pdW0+IGNyZWF0ZSgKICAg
ICAgICAgICAgIENsaXBib2FyZFR5cGUsIFBhc3NSZWZQdHI8Q2hyb21pdW1EYXRhT2JqZWN0Piwg
Q2xpcGJvYXJkQWNjZXNzUG9saWN5LCBGcmFtZSopOwogCisgICAgICAgIHN0YXRpYyBQYXNzUmVm
UHRyPENsaXBib2FyZENocm9taXVtPiBjcmVhdGUoCisgICAgICAgICAgICBDbGlwYm9hcmRUeXBl
LCBDbGlwYm9hcmRBY2Nlc3NQb2xpY3ksIEZyYW1lKik7CisKICAgICAgICAgLy8gUmV0dXJucyB0
aGUgZmlsZSBuYW1lIChub3QgaW5jbHVkaW5nIHRoZSBleHRlbnNpb24pLiBUaGlzIHJlbW92ZXMg
YW55CiAgICAgICAgIC8vIGludmFsaWQgZmlsZSBzeXN0ZW0gY2hhcmFjdGVycyBhcyB3ZWxsIGFz
IG1ha2luZyBzdXJlIHRoZQogICAgICAgICAvLyBwYXRoICsgZXh0ZW5zaW9uIGlzIG5vdCBiaWdn
ZXIgdGhhbiBhbGxvd2VkIGJ5IHRoZSBmaWxlIHN5c3RlbS4KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vY2hyb21pdW0vUmVhZGFibGVEYXRhT2JqZWN0LmNwcCBiL1dlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vUmVhZGFibGVEYXRhT2JqZWN0LmNwcAppbmRleCBmMGZkZDE5Li45N2M0ODFi
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1JlYWRhYmxlRGF0YU9iamVj
dC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9SZWFkYWJsZURhdGFPYmplY3Qu
Y3BwCkBAIC0zMyw2ICszMyw4IEBACiAKICNpbmNsdWRlICJDaHJvbWl1bUJyaWRnZS5oIgogI2lu
Y2x1ZGUgIkNsaXBib2FyZE1pbWVUeXBlcy5oIgorI2luY2x1ZGUgIlBhc3RlYm9hcmQuaCIKKyNp
bmNsdWRlICJQYXN0ZWJvYXJkUHJpdmF0ZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTY5LDYgKzcxLDI3IEBAIFN0cmluZyBSZWFkYWJsZURhdGFPYmplY3Q6OmdldERhdGEoY29uc3Qg
U3RyaW5nJiB0eXBlLCBib29sJiBzdWNjZWVkZWQpIGNvbnN0CiB7CiAgICAgU3RyaW5nIGRhdGE7
CiAgICAgU3RyaW5nIGlnbm9yZWRNZXRhZGF0YTsKKyAgICAvLyBTaW5jZSB0aGUgQ2hyb21pdW0t
c2lkZSBicmlkZ2UgaXNuJ3QgY29tcGxldGUgeWV0LCB3ZSBzcGVjaWFsIGNhc2UgdGhpcworICAg
IC8vIGZvciBjb3B5LWFuZC1wYXN0ZSwgc2luY2UgdGhhdCBjb2RlIHBhdGggbm8gbG9uZ2VyIHVz
ZXMKKyAgICAvLyBDaHJvbWl1bURhdGFPYmplY3RMZWdhY3kuCisgICAgaWYgKG1fY2xpcGJvYXJk
VHlwZSA9PSBDbGlwYm9hcmQ6OkNvcHlBbmRQYXN0ZSkgeworICAgICAgICBpZiAodHlwZSA9PSBt
aW1lVHlwZVRleHRQbGFpbikgeworICAgICAgICAgICAgUGFzdGVib2FyZFByaXZhdGU6OkNsaXBi
b2FyZEJ1ZmZlciBidWZmZXIgPQorICAgICAgICAgICAgICAgIFBhc3RlYm9hcmQ6OmdlbmVyYWxQ
YXN0ZWJvYXJkKCktPmlzU2VsZWN0aW9uTW9kZSgpID8KKyAgICAgICAgICAgICAgICBQYXN0ZWJv
YXJkUHJpdmF0ZTo6U2VsZWN0aW9uQnVmZmVyIDoKKyAgICAgICAgICAgICAgICBQYXN0ZWJvYXJk
UHJpdmF0ZTo6U3RhbmRhcmRCdWZmZXI7CisgICAgICAgICAgICBkYXRhID0gQ2hyb21pdW1Ccmlk
Z2U6OmNsaXBib2FyZFJlYWRQbGFpblRleHQoYnVmZmVyKTsKKyAgICAgICAgfSBlbHNlIGlmICh0
eXBlID09IG1pbWVUeXBlVGV4dEhUTUwpIHsKKyAgICAgICAgICAgIFBhc3RlYm9hcmRQcml2YXRl
OjpDbGlwYm9hcmRCdWZmZXIgYnVmZmVyID0KKyAgICAgICAgICAgICAgICBQYXN0ZWJvYXJkOjpn
ZW5lcmFsUGFzdGVib2FyZCgpLT5pc1NlbGVjdGlvbk1vZGUoKSA/CisgICAgICAgICAgICAgICAg
UGFzdGVib2FyZFByaXZhdGU6OlNlbGVjdGlvbkJ1ZmZlciA6CisgICAgICAgICAgICAgICAgUGFz
dGVib2FyZFByaXZhdGU6OlN0YW5kYXJkQnVmZmVyOworICAgICAgICAgICAgS1VSTCBpZ25vcmVk
U291cmNlVVJMOworICAgICAgICAgICAgQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFJlYWRIVE1M
KGJ1ZmZlciwgJmRhdGEsICZpZ25vcmVkU291cmNlVVJMKTsKKyAgICAgICAgfQorICAgICAgICBz
dWNjZWVkZWQgPSAhZGF0YS5pc0VtcHR5KCk7CisgICAgICAgIHJldHVybiBkYXRhOworICAgIH0K
ICAgICBzdWNjZWVkZWQgPSBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkUmVhZERhdGEoCiAgICAg
ICAgIGNsaXBib2FyZEJ1ZmZlcihtX2NsaXBib2FyZFR5cGUpLCB0eXBlLCBkYXRhLCBpZ25vcmVk
TWV0YWRhdGEpOwogICAgIHJldHVybiBkYXRhOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9y
bS9jaHJvbWl1bS9Xcml0YWJsZURhdGFPYmplY3QuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9Xcml0YWJsZURhdGFPYmplY3QuY3BwCmluZGV4IGVjOGZmNmUuLjdjYmY0MmMgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vV3JpdGFibGVEYXRhT2JqZWN0LmNwcAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1dyaXRhYmxlRGF0YU9iamVjdC5jcHAKQEAg
LTc3LDYgKzc3LDkgQEAgdm9pZCBXcml0YWJsZURhdGFPYmplY3Q6OmNsZWFyQWxsKCkKIGJvb2wg
V3JpdGFibGVEYXRhT2JqZWN0OjpzZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3Ry
aW5nJiBkYXRhKQogewogICAgIGlmIChtX2NsaXBib2FyZFR5cGUgPT0gQ2xpcGJvYXJkOjpDb3B5
QW5kUGFzdGUpIHsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgY3VycmVudGx5IHVuaW1wbGVt
ZW50ZWQgb24gdGhlIENocm9taXVtLXNpZGUuIFRoaXMgaXMKKyAgICAgICAgLy8gIm9rYXkiIGZv
ciBub3cgc2luY2UgdGhlIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uIGRpZG4ndCBzdXBwb3J0IGl0
CisgICAgICAgIC8vIGFueXdheS4gR29pbmcgZm9yd2FyZCwgdGhpcyBpcyBzb21ldGhpbmcgd2Un
bGwgbmVlZCB0byBmaXggdGhvdWdoLgogICAgICAgICBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJk
V3JpdGVEYXRhKHR5cGUsIGRhdGEsICIiKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpk
aWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKaW5kZXggODVjYjMxMy4uOWY2MjI5MCAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZworKysgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MjUgQEAKKzIwMTAtMTAtMDkgIERhbmllbCBDaGVuZyAgPGRjaGVuZ0BjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW2Nocm9taXVt
XSBQcmVwYXJlIENsaXBib2FyZC9EcmFnRGF0YSBmb3IgdHJhbnNpdGlvbiB0byBuZXcgZHJhZy1h
bmQtZHJvcCBpbnRlcmZhY2UuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD00NDk5MgorCisgICAgICAgIEFkZCBhIG5ldyBlbnRyeSBwb2ludCBmb3IgZHJh
ZyBpbiB0byBhbGxvdyBhIGdyYWNlZnVsIHRyYW5zaXRpb24KKyAgICAgICAgZnJvbSB0aGUgbGVn
YWN5IGRyYWcgYW5kIGRyb3AgbW9kZWwsIHdoZXJlIGFsbCBkYXRhIGlzIGNvcGllZCBpbiBhdCB0
aGUKKyAgICAgICAgYmVnaW5uaW5nIG9mIGEgZHJhZywgdG8gYSBtb2RlbCB3aGVyZSBkYXRhIGlz
IHJldHJpZXZlZCBvbiBkZW1hbmQgdmlhCisgICAgICAgIElQQ3MuIFRoZSByYXRpb25hbGUgZm9y
IHRoaXMgaXMgd2hlbiB3ZSBiZWdpbiBzdXBwb3J0aW5nIGFyYml0cmFyeSBNSU1FCisgICAgICAg
IHR5cGVzIGluIGRhdGFUcmFuc2Zlciwgd2UgZG9uJ3Qgd2FudCB0byBiZSBjb3B5aW5nIGFyaWJ0
cmFyeSBhbW91bnRzIG9mCisgICAgICAgIGRhdGEgb3ZlciBmb3IgZWFjaCBzdGFydCBkcmFnIElQ
Qy4KKworICAgICAgICAqIHB1YmxpYy9XZWJWaWV3Lmg6CisgICAgICAgICogc3JjL1dlYkRyYWdE
YXRhLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0RhdGE6OmluaXRpYWxpemUpOiBVc2Ug
dGhlIGxlZ2FjeSBkYXRhIG9iamVjdC4KKyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0RhdGE6OmVu
c3VyZU11dGFibGUpOiBDaGFuZ2UgdGhlIGlmIHRvIGFuIEFTU0VSVC4KKyAgICAgICAgKiBzcmMv
V2ViVmlld0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6ZHJhZ1Rhcmdl
dERyYWdFbnRlck5ldyk6IE5ldyBlbnRyeSBwb2ludC4KKyAgICAgICAgKiBzcmMvV2ViVmlld0lt
cGwuaDoKKwogMjAxMC0xMC0wOCAgQW5kcmVpIFBvcGVzY3UgIDxhbmRyZWlwQGdvb2dsZS5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSmVyZW15IE9ybG93LgpkaWZmIC0tZ2l0IGEvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3LmggYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZp
ZXcuaAppbmRleCBmZGQ0NzI5Li45OGM0Y2ZiIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYlZpZXcuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZpZXcuaApA
QCAtMjIzLDYgKzIyMyw5IEBAIHB1YmxpYzoKICAgICAgICAgY29uc3QgV2ViRHJhZ0RhdGEmLCBp
bnQgaWRlbnRpdHksCiAgICAgICAgIGNvbnN0IFdlYlBvaW50JiBjbGllbnRQb2ludCwgY29uc3Qg
V2ViUG9pbnQmIHNjcmVlblBvaW50LAogICAgICAgICBXZWJEcmFnT3BlcmF0aW9uc01hc2sgb3Bl
cmF0aW9uc0FsbG93ZWQpID0gMDsKKyAgICB2aXJ0dWFsIFdlYkRyYWdPcGVyYXRpb24gZHJhZ1Rh
cmdldERyYWdFbnRlck5ldygKKyAgICAgICAgaW50IGlkZW50aXR5LCBjb25zdCBXZWJQb2ludCYg
Y2xpZW50UG9pbnQsIGNvbnN0IFdlYlBvaW50JiBzY3JlZW5Qb2ludCwKKyAgICAgICAgV2ViRHJh
Z09wZXJhdGlvbnNNYXNrIG9wZXJhdGlvbnNBbGxvd2VkKSA9IDA7CiAgICAgdmlydHVhbCBXZWJE
cmFnT3BlcmF0aW9uIGRyYWdUYXJnZXREcmFnT3ZlcigKICAgICAgICAgY29uc3QgV2ViUG9pbnQm
IGNsaWVudFBvaW50LCBjb25zdCBXZWJQb2ludCYgc2NyZWVuUG9pbnQsCiAgICAgICAgIFdlYkRy
YWdPcGVyYXRpb25zTWFzayBvcGVyYXRpb25zQWxsb3dlZCkgPSAwOwpkaWZmIC0tZ2l0IGEvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJEcmFnRGF0YS5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YkRyYWdEYXRhLmNwcAppbmRleCBmMjY0MzY5Li45MTY3YzY5IDEwMDY0NAotLS0gYS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkRyYWdEYXRhLmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YkRyYWdEYXRhLmNwcApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIldlYkRyYWdEYXRhLmgi
CiAKICNpbmNsdWRlICJDaHJvbWl1bURhdGFPYmplY3QuaCIKKyNpbmNsdWRlICJDaHJvbWl1bURh
dGFPYmplY3RMZWdhY3kuaCIKICNpbmNsdWRlICJDbGlwYm9hcmRNaW1lVHlwZXMuaCIKICNpbmNs
dWRlICJXZWJEYXRhLmgiCiAjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCkBAIC00OSw3ICs1MCw3IEBA
IGNsYXNzIFdlYkRyYWdEYXRhUHJpdmF0ZSA6IHB1YmxpYyBDaHJvbWl1bURhdGFPYmplY3Qgewog
CiB2b2lkIFdlYkRyYWdEYXRhOjppbml0aWFsaXplKCkKIHsKLSAgICBhc3NpZ24oc3RhdGljX2Nh
c3Q8V2ViRHJhZ0RhdGFQcml2YXRlKj4oQ2hyb21pdW1EYXRhT2JqZWN0OjpjcmVhdGUoQ2xpcGJv
YXJkOjpEcmFnQW5kRHJvcCkucmVsZWFzZVJlZigpKSk7CisgICAgYXNzaWduKHN0YXRpY19jYXN0
PFdlYkRyYWdEYXRhUHJpdmF0ZSo+KENocm9taXVtRGF0YU9iamVjdDo6Y3JlYXRlKENocm9taXVt
RGF0YU9iamVjdExlZ2FjeTo6Y3JlYXRlKENsaXBib2FyZDo6RHJhZ0FuZERyb3ApKS5yZWxlYXNl
UmVmKCkpKTsKIH0KIAogdm9pZCBXZWJEcmFnRGF0YTo6cmVzZXQoKQpAQCAtMjMyLDggKzIzMyw3
IEBAIHZvaWQgV2ViRHJhZ0RhdGE6OmFzc2lnbihXZWJEcmFnRGF0YVByaXZhdGUqIHApCiB2b2lk
IFdlYkRyYWdEYXRhOjplbnN1cmVNdXRhYmxlKCkKIHsKICAgICBBU1NFUlQoIWlzTnVsbCgpKTsK
LSAgICBpZiAoIW1fcHJpdmF0ZS0+aGFzT25lUmVmKCkpCi0gICAgICAgIGFzc2lnbihzdGF0aWNf
Y2FzdDxXZWJEcmFnRGF0YVByaXZhdGUqPihtX3ByaXZhdGUtPmNvcHkoKS5yZWxlYXNlUmVmKCkp
KTsKKyAgICBBU1NFUlQobV9wcml2YXRlLT5oYXNPbmVSZWYoKSk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5j
cHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAppbmRleCA1OTljNjVlLi5k
ZGQwN2M2IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAor
KysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcApAQCAtMTY4MSw2ICsxNjgx
LDIxIEBAIFdlYkRyYWdPcGVyYXRpb24gV2ViVmlld0ltcGw6OmRyYWdUYXJnZXREcmFnRW50ZXIo
CiAgICAgcmV0dXJuIGRyYWdUYXJnZXREcmFnRW50ZXJPck92ZXIoY2xpZW50UG9pbnQsIHNjcmVl
blBvaW50LCBEcmFnRW50ZXIpOwogfQogCitXZWJEcmFnT3BlcmF0aW9uIFdlYlZpZXdJbXBsOjpk
cmFnVGFyZ2V0RHJhZ0VudGVyTmV3KAorICAgIGludCBpZGVudGl0eSwKKyAgICBjb25zdCBXZWJQ
b2ludCYgY2xpZW50UG9pbnQsCisgICAgY29uc3QgV2ViUG9pbnQmIHNjcmVlblBvaW50LAorICAg
IFdlYkRyYWdPcGVyYXRpb25zTWFzayBvcGVyYXRpb25zQWxsb3dlZCkKK3sKKyAgICBBU1NFUlQo
IW1fY3VycmVudERyYWdEYXRhLmdldCgpKTsKKworICAgIG1fY3VycmVudERyYWdEYXRhID0gQ2hy
b21pdW1EYXRhT2JqZWN0OjpjcmVhdGVSZWFkYWJsZShDbGlwYm9hcmQ6OkRyYWdBbmREcm9wKTsK
KyAgICBtX2RyYWdJZGVudGl0eSA9IGlkZW50aXR5OworICAgIG1fb3BlcmF0aW9uc0FsbG93ZWQg
PSBvcGVyYXRpb25zQWxsb3dlZDsKKworICAgIHJldHVybiBkcmFnVGFyZ2V0RHJhZ0VudGVyT3JP
dmVyKGNsaWVudFBvaW50LCBzY3JlZW5Qb2ludCwgRHJhZ0VudGVyKTsKK30KKwogV2ViRHJhZ09w
ZXJhdGlvbiBXZWJWaWV3SW1wbDo6ZHJhZ1RhcmdldERyYWdPdmVyKAogICAgIGNvbnN0IFdlYlBv
aW50JiBjbGllbnRQb2ludCwKICAgICBjb25zdCBXZWJQb2ludCYgc2NyZWVuUG9pbnQsCmRpZmYg
LS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmggYi9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlZpZXdJbXBsLmgKaW5kZXggZTUxZGY0ZC4uMTJhZDIzYSAxMDA2NDQKLS0tIGEv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViVmlld0ltcGwuaApAQCAtMTU0LDYgKzE1NCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIGNv
bnN0IFdlYlBvaW50JiBjbGllbnRQb2ludCwKICAgICAgICAgY29uc3QgV2ViUG9pbnQmIHNjcmVl
blBvaW50LAogICAgICAgICBXZWJEcmFnT3BlcmF0aW9uc01hc2sgb3BlcmF0aW9uc0FsbG93ZWQp
OworICAgIHZpcnR1YWwgV2ViRHJhZ09wZXJhdGlvbiBkcmFnVGFyZ2V0RHJhZ0VudGVyTmV3KAor
ICAgICAgICBpbnQgaWRlbnRpdHksCisgICAgICAgIGNvbnN0IFdlYlBvaW50JiBjbGllbnRQb2lu
dCwKKyAgICAgICAgY29uc3QgV2ViUG9pbnQmIHNjcmVlblBvaW50LAorICAgICAgICBXZWJEcmFn
T3BlcmF0aW9uc01hc2sgb3BlcmF0aW9uc0FsbG93ZWQpOwogICAgIHZpcnR1YWwgV2ViRHJhZ09w
ZXJhdGlvbiBkcmFnVGFyZ2V0RHJhZ092ZXIoCiAgICAgICAgIGNvbnN0IFdlYlBvaW50JiBjbGll
bnRQb2ludCwKICAgICAgICAgY29uc3QgV2ViUG9pbnQmIHNjcmVlblBvaW50LAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>