<?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>39083</bug_id>
          
          <creation_ts>2010-05-13 13:30:26 -0700</creation_ts>
          <short_desc>Refactor FormData and Blob for better support of Blobs synthesized by BlobBuilder</short_desc>
          <delta_ts>2010-06-07 13:55:20 -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>WebKit Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</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>36903</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Kinuko Yasuda">kinuko</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>dimich</cc>
    
    <cc>ericu</cc>
    
    <cc>fishd</cc>
    
    <cc>gustavo</cc>
    
    <cc>jeffschiller</cc>
    
    <cc>jianli</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>225472</commentid>
    <comment_count>0</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-05-13 13:30:26 -0700</bug_when>
    <thetext>Refactor FormData and FormDataList for better integration with Blob and FileWriter&apos;s BlobBuilder.

With BlobBuilder [1] one can construct a Blob by combining arbitrary Strings and Blobs, and then send the synthesized Blob via xhr.  This is very similar to what current FormData [2] is doing, and to send such synthesized Blobs we&apos;ll need to utilize the same code as FormData.

To avoid duplicated code and clean up internal structures, it&apos;d be better to have a common internal implementation for FormData, Blob and BlobBuilder.

[1] BlobBuilder http://www.w3.org/TR/file-writer-api/#idl-def-BlobBuilder
[2] FormData http://dev.w3.org/2006/webapi/XMLHttpRequest-2/#the-formdata-interface
Discussions on BlobBuilder vs FormData: http://www.mail-archive.com/public-webapps@w3.org/msg08225.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>225556</commentid>
    <comment_count>1</comment_count>
      <attachid>56030</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-05-13 16:17:35 -0700</bug_when>
    <thetext>Created attachment 56030
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>225559</commentid>
    <comment_count>2</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-05-13 16:22:10 -0700</bug_when>
    <thetext>The 1st patch for refactoring (some of details about the changes are noted in bug 36903).
The patch doesn&apos;t include any interface changes made recently in Blob (e.g. type, slice&apos;s type argument etc).
I&apos;ve tried to make it smaller but this might be still too large.  Once we agree on the general design I think I can split the patch more.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>225563</commentid>
    <comment_count>3</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-05-13 16:27:33 -0700</bug_when>
    <thetext>Attachment 56030 did not build on qt:
Build output: http://webkit-commit-queue.appspot.com/results/2249045</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>225567</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-05-13 16:40:58 -0700</bug_when>
    <thetext>Attachment 56030 did not build on gtk:
Build output: http://webkit-commit-queue.appspot.com/results/2256045</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>225571</commentid>
    <comment_count>5</comment_count>
      <attachid>56034</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-05-13 16:55:38 -0700</bug_when>
    <thetext>Created attachment 56034
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>225595</commentid>
    <comment_count>6</comment_count>
      <attachid>56034</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-05-13 18:02:03 -0700</bug_when>
    <thetext>Comment on attachment 56034
Patch

Note that the line number might be somewhat off since what I put here is based on your first patch.

WebCore/html/Blob.cpp:43
 +      return adoptRef(static_cast&lt;Blob*&gt;(File::create(path).get()));
I do not understand this. When do we invoke File::create from Blob::create?

WebCore/html/Blob.cpp:80
 +      } else if (static_cast&lt;unsigned long long&gt;(start + length) &gt; totalSize)
What if start &lt; 0?

WebCore/html/Blob.h:49
 +      // A special constructor for File blob.
Any one is calling this creator? I do not see any usage for this. Also, this creator is very confused with the protected constructor with type string as argument because the creator has path string as argument.

WebCore/html/Blob.h:59
 +      typedef Vector&lt;RefPtr&lt;BlobItem&gt; &gt; ItemList;
Could you please add include for Vector.h?

WebCore/html/BlobItem.cpp:333
 +      String m_uniqName;
Should it be m_uniqueName?

WebCore/html/BlobItem.h:54
 +      virtual ~BlobItem() { }
Why not making it protected?

WebCore/html/BlobItem.h:66
 +      static PassRefPtr&lt;BlobItem&gt; createFileRangeItem(const String&amp; path, long long start, long long length, double snapshotModificationTime);
Can we merge these two if there&apos;re very similar? If not, it might be better to name RangeBlobItem as DataRangeItem to avoid the confusion since BlobRangeItem sounds more like a super set?

WebCore/html/BlobItem.h:73
 +      virtual const CString cstr() const { return CString(); }
Is it possible to move this method to StringBlobItem so that we have cleaner BlobItem interface? Doing so will make us move all the derived classes to the header file, but I think it will make the readability better?

WebCore/html/BlobItem.h:76
 +      virtual const String filePath() const { return String(); }
ditto.

WebCore/html/BlobItem.h:77
 +      virtual const String fileOrUniqueName() const { return String(); }
ditto. In addition, probably uniqueName() should be enough.

WebCore/html/BlobItem.h:80
 +      bool isFile() const { return !filePath().isEmpty(); }
ditto.

WebCore/html/BlobItem.h:84
 +      virtual bool isRange() const { return false; }
ditto.

WebCore/html/BlobItem.cpp:129
 +  void StringBlobItem::ensureFinalCString() const
What does this function do? Could you please add a comment?

WebCore/html/File.cpp:46
 +      ASSERT(items().size() == 1 &amp;&amp; items().at(0)-&gt;isFile());
Do we need this ASSERT? The above code will unlikely fail.

WebCore/html/File.cpp:51
 +      ASSERT(items().size() == 1 &amp;&amp; items().at(0)-&gt;isFile());
Do we need this ASSERT?

WebCore/html/FileStream.cpp:84
 +      if (!getFileModificationTime(file-&gt;filePath(), currentModificationTime)) {
Why not simply calling blob-&gt;path() since it already contains the same logic? You can cache the path if needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>225850</commentid>
    <comment_count>7</comment_count>
      <attachid>56034</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-05-14 08:44:03 -0700</bug_when>
    <thetext>Comment on attachment 56034
Patch

WebCore/platform/network/FormData.h:23
 +  #include &quot;Blob.h&quot;
stuff in platform/ should not depend on stuff in html/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>225908</commentid>
    <comment_count>8</comment_count>
      <attachid>56085</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-05-14 11:11:35 -0700</bug_when>
    <thetext>Created attachment 56085
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>225947</commentid>
    <comment_count>9</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-05-14 12:40:38 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 56034 [details])
&gt; WebCore/platform/network/FormData.h:23
&gt;  +  #include &quot;Blob.h&quot;
&gt; stuff in platform/ should not depend on stuff in html/

Oh, I see... if that&apos;s true we need a bit more restructuring.

FormData seems to be already including a few html files:
  html/Blob.h
  html/DOMFormData.h&quot;
  html/File.h  (we won&apos;t need this if we do this refactoring)

Where would be the recommended place to put those header files?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226809</commentid>
    <comment_count>10</comment_count>
      <attachid>56085</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-05-17 10:36:08 -0700</bug_when>
    <thetext>Comment on attachment 56085
Patch

I think it might be better to rename BlobItem::createFileItem to BlobItem::createFileBlobItem, and BlobItem::toFileItem to BlobItem::toFileBlobItem, for better understanding. Otherwise, when I see toFileItem, I have to realize that it is to convert to FileBlobItem.
The other fix, while keeping createFileItem and asFileItem, is to move all BlobItem stuffs to stay inside the class Blob and then we can remove all Blob pattern from the class names. But this will increase the complexity of Blob.h.

FormDataList and FormData seem not to be fully refactored. You still try to keep almost all the old data members for backward compatibility. Do you have plan to refactor these codes to make them better abstracted based on the new BlobItem structures?


WebCore/bindings/v8/SerializedScriptValue.cpp:562
 +          m_writer.writeFile(blob-&gt;path());
Why do we need to change this? If we do change it as a temporary hack, please put more detail for FIXME.

WebCore/bindings/v8/SerializedScriptValue.cpp:858
 +          PassRefPtr&lt;File&gt; blob = File::create(path);
ditto.

WebCore/html/Blob.h:58
 +      void appendBlobItem(PassRefPtr&lt;BlobItem&gt; item);
IMO, append or appendItem sounds more natural.

WebCore/html/BlobItem.h:54
 +  class FileRangeBlobItem;
Please sort the above forward declarations.

WebCore/html/BlobItem.h:65
 +      static PassRefPtr&lt;BlobItem&gt; createStringItem(const String&amp; text, EndingType, TextEncoding);
I think we can omit the argument name &quot;text&quot;.

WebCore/html/BlobItem.h:66
 +      static PassRefPtr&lt;BlobItem&gt; createStringItem(const CString&amp; text);
ditto.

WebCore/html/BlobItem.h:94
 +  // BlobItem class for a string.
We probably don&apos;t need comment here since the class name is straightforward. This also applies to other subclasses.

WebCore/html/BlobItem.h:95
 +  class StringBlobItem: public BlobItem {
Please add one space before &apos;:&apos;. This also applies to other subclasses.

WebCore/html/BlobItem.h:97
 +      StringBlobItem(const String&amp; text, EndingType, TextEncoding);
I think we can omit text here.

WebCore/html/BlobItem.h:98
 +      StringBlobItem(const CString&amp; text);
ditto.

WebCore/html/BlobItem.cpp:42
 +      if (size() != b-&gt;size() || data() != b-&gt;data() || isValid() != b-&gt;isValid())
I think we should only check isValid() here. For example, for FileBlobItem, we do not want to get and check the size.

WebCore/html/BlobItem.cpp:88
 +      ASSERT(start &gt;= 0);
Do we also need to ASSERT on length?

WebCore/html/BlobItem.cpp:91
 +      if (item-&gt;toFileItem()) {
Better to say:
    FileBlobItem* fileItem = item-&gt;toFileItem();
    if (fileItem)

WebCore/html/BlobItem.cpp:95
 +              if (static_cast&lt;unsigned long long&gt;(start + length) &gt; item-&gt;size())
 +                  length = item-&gt;size() - start;
Should the above two lines be moved after adjusting start?

WebCore/html/BlobItem.cpp:141
 +      if (m_path != f-&gt;m_path || m_fileName != f-&gt;m_fileName)
I think checking the path should be enough. In addition, it would be simpler to combine the last if check with this if check.

WebCore/html/BlobItem.cpp:157
 +          : (ending == EndingCR) ? &quot;\r&quot; : &quot;\n&quot;;
No need to fold into 2 lines. In addition, please use parentheses to wrap the 2nd conditional express for better readability and safety.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226965</commentid>
    <comment_count>11</comment_count>
      <attachid>56283</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-05-17 16:07:41 -0700</bug_when>
    <thetext>Created attachment 56283
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226973</commentid>
    <comment_count>12</comment_count>
      <attachid>56286</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-05-17 16:16:39 -0700</bug_when>
    <thetext>Created attachment 56286
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226989</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-05-17 16:57:03 -0700</bug_when>
    <thetext>Attachment 56286 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/2256285</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>227047</commentid>
    <comment_count>14</comment_count>
      <attachid>56304</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-05-17 18:52:40 -0700</bug_when>
    <thetext>Created attachment 56304
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>227052</commentid>
    <comment_count>15</comment_count>
      <attachid>56305</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-05-17 19:07:53 -0700</bug_when>
    <thetext>Created attachment 56305
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>227057</commentid>
    <comment_count>16</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-05-17 19:15:29 -0700</bug_when>
    <thetext>Thanks for reviewing.

(In reply to comment #10)
&gt; (From update of attachment 56085 [details])
&gt; I think it might be better to rename BlobItem::createFileItem to BlobItem::createFileBlobItem, and BlobItem::toFileItem to BlobItem::toFileBlobItem, for better understanding. Otherwise, when I see toFileItem, I have to realize that it is to convert to FileBlobItem.
&gt; The other fix, while keeping createFileItem and asFileItem, is to move all BlobItem stuffs to stay inside the class Blob and then we can remove all Blob pattern from the class names. But this will increase the complexity of Blob.h.

Agreed, I took the former option, i.e. changed the method names to {to,create}XxxBlobItem().

&gt; FormDataList and FormData seem not to be fully refactored. You still try to keep almost all the old data members for backward compatibility. Do you have plan to refactor these codes to make them better abstracted based on the new BlobItem structures?

Right.  I&apos;m willing to refactor FormDataList and FormData code further.  I thought changing everything in a patch would be a bit scary.  (Or I can extend this patch if it would be better.)

&gt; WebCore/bindings/v8/SerializedScriptValue.cpp:562
&gt;  +          m_writer.writeFile(blob-&gt;path());
&gt; Why do we need to change this? If we do change it as a temporary hack, please put more detail for FIXME.
&gt;
&gt; WebCore/bindings/v8/SerializedScriptValue.cpp:858
&gt;  +          PassRefPtr&lt;File&gt; blob = File::create(path);
&gt; ditto.

Reverted some changes (calling File methods for read/writeBlob) and added more details to the FIXME comment.
 
&gt; WebCore/html/Blob.h:58
&gt;  +      void appendBlobItem(PassRefPtr&lt;BlobItem&gt; item);
&gt; IMO, append or appendItem sounds more natural.

Fixed.

&gt; WebCore/html/BlobItem.h:54
&gt;  +  class FileRangeBlobItem;
&gt; Please sort the above forward declarations.

Fixed.

&gt; WebCore/html/BlobItem.h:65
&gt;  +      static PassRefPtr&lt;BlobItem&gt; createStringItem(const String&amp; text, EndingType, TextEncoding);
&gt; I think we can omit the argument name &quot;text&quot;.

Fixed.

&gt; WebCore/html/BlobItem.h:66
&gt;  +      static PassRefPtr&lt;BlobItem&gt; createStringItem(const CString&amp; text);
&gt; ditto.

Fixed.

&gt; WebCore/html/BlobItem.h:94
&gt;  +  // BlobItem class for a string.
&gt; We probably don&apos;t need comment here since the class name is straightforward. This also applies to other subclasses.

Fixed.

&gt; WebCore/html/BlobItem.h:95
&gt;  +  class StringBlobItem: public BlobItem {
&gt; Please add one space before &apos;:&apos;. This also applies to other subclasses.

Fixed.

&gt; WebCore/html/BlobItem.h:97
&gt;  +      StringBlobItem(const String&amp; text, EndingType, TextEncoding);
&gt; I think we can omit text here.

Fixed.

&gt; WebCore/html/BlobItem.h:98
&gt;  +      StringBlobItem(const CString&amp; text);
&gt; ditto.

Fixed.

&gt; WebCore/html/BlobItem.cpp:42
&gt;  +      if (size() != b-&gt;size() || data() != b-&gt;data() || isValid() != b-&gt;isValid())
&gt; I think we should only check isValid() here. For example, for FileBlobItem, we do not want to get and check the size.

Right.  Instead removed the BlobItem::equals implementation at all.

&gt; WebCore/html/BlobItem.cpp:88
&gt;  +      ASSERT(start &gt;= 0);
&gt; Do we also need to ASSERT on length?

Added another ASSERT for length.

&gt; WebCore/html/BlobItem.cpp:91
&gt;  +      if (item-&gt;toFileItem()) {
&gt; Better to say:
&gt;     FileBlobItem* fileItem = item-&gt;toFileItem();
&gt;     if (fileItem)

Fixed.

&gt; WebCore/html/BlobItem.cpp:95
&gt;  +              if (static_cast&lt;unsigned long long&gt;(start + length) &gt; item-&gt;size())
&gt;  +                  length = item-&gt;size() - start;
&gt; Should the above two lines be moved after adjusting start?

For FileRangeBlobItem item-&gt;size() returns the length of the sliced range, so it should be ok.

&gt; WebCore/html/BlobItem.cpp:141
&gt;  +      if (m_path != f-&gt;m_path || m_fileName != f-&gt;m_fileName)
&gt; I think checking the path should be enough. In addition, it would be simpler to combine the last if check with this if check.

Fixed.

&gt; WebCore/html/BlobItem.cpp:157
&gt;  +          : (ending == EndingCR) ? &quot;\r&quot; : &quot;\n&quot;;
&gt; No need to fold into 2 lines. In addition, please use parentheses to wrap the 2nd conditional express for better readability and safety.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>227563</commentid>
    <comment_count>17</comment_count>
      <attachid>56305</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-05-18 17:09:57 -0700</bug_when>
    <thetext>Comment on attachment 56305
Patch

I&apos;ll fix the dependency violation issue first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>227581</commentid>
    <comment_count>18</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-05-18 17:35:08 -0700</bug_when>
    <thetext>FYI, here are some comments for your last patch:

You might need to add the new file BlobItem.cpp to the new make file: CMakeLists.txt.

In addition, I think BlobItem could be put under platform directory so that it can be referred to by both html/Blob and platform/network/FormData.

WebCore/bindings/v8/SerializedScriptValue.cpp:562
 +          // for non-file blobs.
No need to fold into 2 lines.

WebCore/html/Blob.h:50
 +      static PassRefPtr&lt;Blob&gt; createFromFile(const String&amp; path, const String type = String())
Should it be &quot;const String type&amp; = ...&quot;?

WebCore/html/BlobItem.cpp:68
 +  static const double invalidModificationTime = -1;
Why do we use -1, instead of 0?

WebCore/html/BlobItem.h:74
 +      static PassRefPtr&lt;BlobItem&gt; createFileRangeBlobItem(const String&amp; path, long long start, long long length, double snapshotModificationTime);
It would be better to return &quot;PassRefPtr&lt;FileRangeBlobItem&gt;&quot;.

WebCore/html/BlobItem.h:61
 +      virtual const char* data() const { return 0; }
data() should only make sense for StringBlobItem, BytesArrayBlobItem and DataRangeBlobItem. It is a little bit wield to put it in the base class. Can we move it to the subclass? Since we do not want to add it for each of these subclasses, how about restructure BlobItem classes like the following:
     BlobItem
        |
        --------&gt; DataBlobItem
        |              |
        |              ----------&gt; StringBlobItem
        |              ----------&gt; ByteArrayBlobItem
        |              ----------&gt; DataRangeBlobItem
        |
        --------&gt; FileBlobItem
        |              |
        |              ----------&gt; FileRangeBlobItem

We can then add data() and releaseBuffer() to DataBlobItem.

WebCore/html/File.cpp: 
 +      // We don&apos;t use MIMETypeRegistry::getMIMETypeForPath() because it returns &quot;application/octet-stream&quot; upon failure.
Can we keep the comment to help people better understand why we call MIMETypeRegistry::getMIMETypeForExtension?

WebCore/platform/network/FormData.h:23
 +  #include &quot;Blob.h&quot;
As Darin pointed out, FormData is under platform/network so it should not depend on other non-platform stuff. We could move BlobItem to platform.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228017</commentid>
    <comment_count>19</comment_count>
      <attachid>56524</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-05-19 15:32:24 -0700</bug_when>
    <thetext>Created attachment 56524
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228025</commentid>
    <comment_count>20</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-05-19 15:58:04 -0700</bug_when>
    <thetext>Thanks, I&apos;ve moved the BlobItem under platform and fixed dependencies.

(In reply to comment #18)
&gt; You might need to add the new file BlobItem.cpp to the new make file: CMakeLists.txt.

Done.

&gt; WebCore/bindings/v8/SerializedScriptValue.cpp:562
&gt; WebCore/html/Blob.h:50
&gt;  +      static PassRefPtr&lt;Blob&gt; createFromFile(const String&amp; path, const String type = String())

In this patch I left it untouched and removed the type parameter from the Blob constructor (as no one is calling Blob::create(type) yet - we&apos;ll need it when we add slice(type) or BlobBuilder).

&gt; WebCore/html/BlobItem.cpp:68
&gt;  +  static const double invalidModificationTime = -1;
&gt; Why do we use -1, instead of 0?

Changed to 0.  Back then I wanted to differentiate uninitialized motd (when the item is not a lice) and invalid one (initialization failure) but now we won&apos;t need it because the base class doesn&apos;t have the field.

&gt; WebCore/html/BlobItem.h:74
&gt;  +      static PassRefPtr&lt;BlobItem&gt; createFileRangeBlobItem(const String&amp; path, long long start, long long length, double snapshotModificationTime);
&gt; It would be better to return &quot;PassRefPtr&lt;FileRangeBlobItem&gt;&quot;.

Hmm, I think it would be easier to return PassRefPtr&lt;BlobItem&gt; for all create methods because in that way we can uniformly assign the return value to RefPtr&lt;BlobItem&gt;.

&gt; WebCore/html/BlobItem.h:61
&gt;  +      virtual const char* data() const { return 0; }
&gt; data() should only make sense for StringBlobItem, BytesArrayBlobItem and DataRangeBlobItem. It is a little bit wield to put it in the base class. Can we move it to the subclass? Since we do not want to add it for each of these subclasses, how about restructure BlobItem classes like the following:

Sounds great.  I made the change.

&gt; WebCore/html/File.cpp: 
&gt;  +      // We don&apos;t use MIMETypeRegistry::getMIMETypeForPath() because it returns &quot;application/octet-stream&quot; upon failure.
&gt; Can we keep the comment to help people better understand why we call MIMETypeRegistry::getMIMETypeForExtension?

Done.

&gt; WebCore/platform/network/FormData.h:23
&gt;  +  #include &quot;Blob.h&quot;
&gt; As Darin pointed out, FormData is under platform/network so it should not depend on other non-platform stuff. We could move BlobItem to platform.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228062</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-05-19 16:47:28 -0700</bug_when>
    <thetext>Attachment 56524 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/2258349</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228128</commentid>
    <comment_count>22</comment_count>
      <attachid>56524</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-05-19 18:22:54 -0700</bug_when>
    <thetext>Comment on attachment 56524
Patch

Looks much better now. Some more comments.

WebCore/platform/BlobItem.h:69
 +  //       |              |
Nice diagram. Probably better to remove the 1st &quot;|&quot;.

WebCore/platform/BlobItem.h:70
 +  //       |              +---------&gt; FileRangeBlobItem
ditto.

WebCore/platform/BlobItem.h:78
 +      static PassRefPtr&lt;BlobItem&gt; createStringBlobItem(const String&amp;, EndingType, TextEncoding);
I am thinking if we really need these factory methods. Can we simply call something like StringBlobItem::create() in order to make the whole logic simpler?
The only different creator is createRangeBlobItem. Can we make it as slice?

WebCore/platform/BlobItem.h:85
 +      static PassRefPtr&lt;BlobItem&gt; createRangeBlobItem(PassRefPtr&lt;BlobItem&gt; item, long long start, long long length);
item can be omitted.

WebCore/platform/BlobItem.h:93
 +      virtual const DataBlobItem* toDataBlobItem() const { return 0; }
Do we need to add const modifier? Would &quot;virtual DataBlobItem* toDataBlobItem() { return 0; }&quot; be more straightforward?

WebCore/platform/BlobItem.h:94
 +      virtual const StringBlobItem* toStringBlobItem() const { return 0; }
Would it be better to move toStringBlobItem to DataBlobItem? Do we want to also add toByteRangeBlobItem?

WebCore/platform/BlobItem.h:115
 +      virtual const DataBlobItem* toDataBlobItem() const { return this; }
Better to add an empty line and a line for &quot;// BlobItem methods.&quot; before this line, like what you do for other subclass.

WebCore/platform/BlobItem.h:122
 +      virtual const String&amp; uniqueName() const { return m_fileName; }
I do not think file name is a unique name. We should either move it to FileRangeBlobItem or leave it in FormData::append.

WebCore/platform/BlobItem.h:158
 +      virtual unsigned long long size() const { return m_bytesArray.size(); }
Better to add an empty line and a line for &quot;// BlobItem methods.&quot; before this line.

WebCore/platform/BlobItem.h:173
 +      DataRangeBlobItem(PassRefPtr&lt;BlobItem&gt; item, long long start, long long length);
item can be omitted.

WebCore/platform/BlobItem.h:185
 +      RefPtr&lt;BlobItem&gt; m_item;
I think m_item should be RefPtr&lt;DataBlobItem&gt;.

WebCore/html/FormDataList.h:25
 +  #include &quot;File.h&quot;
Why changing from including Blob.h to File.h? I do not see any reference to File type.

WebKit/chromium/ChangeLog:8
 +          Replace FileItemList::Item list with BlobItemList to get it compiling
I think you mean &quot;FormDataList::Item&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228465</commentid>
    <comment_count>23</comment_count>
      <attachid>56609</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-05-20 10:55:29 -0700</bug_when>
    <thetext>Created attachment 56609
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228471</commentid>
    <comment_count>24</comment_count>
      <attachid>56610</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-05-20 11:09:21 -0700</bug_when>
    <thetext>Created attachment 56610
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228486</commentid>
    <comment_count>25</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-05-20 11:37:30 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; (From update of attachment 56524 [details])
&gt; WebCore/platform/BlobItem.h:69
&gt;  +  //       |              |
&gt; Nice diagram. Probably better to remove the 1st &quot;|&quot;.

Fixed.

&gt; WebCore/platform/BlobItem.h:78
&gt;  +      static PassRefPtr&lt;BlobItem&gt; createStringBlobItem(const String&amp;, EndingType, TextEncoding);
&gt; I am thinking if we really need these factory methods. Can we simply call something like StringBlobItem::create() in order to make the whole logic simpler?
&gt; The only different creator is createRangeBlobItem. Can we make it as slice?

Done.
I was kind of separated on this since they return BlobItem, but now we have subclass definitions in the header file and probably it would be better to do also for readability.
I changed the createRangeBlob to a member method slice.

&gt; WebCore/platform/BlobItem.h:85
&gt;  +      static PassRefPtr&lt;BlobItem&gt; createRangeBlobItem(PassRefPtr&lt;BlobItem&gt; item, long long start, long long length);
&gt; item can be omitted.

Fixed.

&gt; WebCore/platform/BlobItem.h:93
&gt;  +      virtual const DataBlobItem* toDataBlobItem() const { return 0; }
&gt; Do we need to add const modifier? Would &quot;virtual DataBlobItem* toDataBlobItem() { return 0; }&quot; be more straightforward?

It might be, but almost all of their methods are const, and Blobs are expected to be immutable... so I&apos;d like to keep them const until it becomes a real problem.  Does that make sense to you?

&gt; WebCore/platform/BlobItem.h:94
&gt;  +      virtual const StringBlobItem* toStringBlobItem() const { return 0; }
&gt; Would it be better to move toStringBlobItem to DataBlobItem? Do we want to also add toByteRangeBlobItem?

It ought to be if we want to make the interface really strict, but I&apos;m afraid it may make code a bit too complicated.  If we do that we&apos;d need to call (toDataBlobItem() &amp;&amp; toDataBlobItem()-&gt;toStringBlobItem()) every time to access its string data.  Do you think we want to do that?

&gt; WebCore/platform/BlobItem.h:115
&gt;  +      virtual const DataBlobItem* toDataBlobItem() const { return this; }
&gt; Better to add an empty line and a line for &quot;// BlobItem methods.&quot; before this line, like what you do for other subclass.

Fixed.

&gt; WebCore/platform/BlobItem.h:122
&gt;  +      virtual const String&amp; uniqueName() const { return m_fileName; }
&gt; I do not think file name is a unique name. We should either move it to FileRangeBlobItem or leave it in FormData::append.

That&apos;s true.  Can you help me make a few things clear?
Do we want to use the same name for the same sliced blobs?  If so I think we&apos;d better store it in Blob/BlobItem but otherwise I should rather leave it in FormData::append.
Also: will we have different usages for fileName and UUID-based uniqueName?  If that applies I&apos;ll split into two different methods (e.g. FileBlobItem::fileName(0 and FileRangeBlobItem::uniqueName()) rather than one.

(In this patchset I just changed the method name to name(), but I don&apos;t have strong opinion on it.)

&gt; WebCore/platform/BlobItem.h:158
&gt;  +      virtual unsigned long long size() const { return m_bytesArray.size(); }

Fixed.

&gt; WebCore/platform/BlobItem.h:173
&gt;  +      DataRangeBlobItem(PassRefPtr&lt;BlobItem&gt; item, long long start, long long length);
&gt; item can be omitted.

Fixed.

&gt; WebCore/platform/BlobItem.h:185
&gt;  +      RefPtr&lt;BlobItem&gt; m_item;
&gt; I think m_item should be RefPtr&lt;DataBlobItem&gt;.

Done.

&gt; WebCore/html/FormDataList.h:25
&gt;  +  #include &quot;File.h&quot;
&gt; Why changing from including Blob.h to File.h? I do not see any reference to File type.

Probably by a mistake - thanks for catching it.

&gt; WebKit/chromium/ChangeLog:8
&gt;  +          Replace FileItemList::Item list with BlobItemList to get it compiling
&gt; I think you mean &quot;FormDataList::Item&quot;.

Fixed.  Again thanks for catching it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228654</commentid>
    <comment_count>26</comment_count>
      <attachid>56610</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-05-20 17:35:58 -0700</bug_when>
    <thetext>Comment on attachment 56610
Patch

WebCore/ChangeLog:8
 +          - Introduces a new class BlobItem (platform/BlobData.{h,cpp}) as
Should it be &quot;platform/BlobItem.{h,cpp}&quot;? Perhaps we do not even need to mention the file names.

WebCore/ChangeLog:22
 +          The existing tests should be able to be used for regression:
There&apos;re quite a few more tests to test file and form data. Probably we do not need to mention the test names.

WebCore/html/Blob.h:50
 +      static PassRefPtr&lt;Blob&gt; create(const String&amp; path)
Seems that we do not need this creator any more.

WebCore/html/Blob.h:58
 +      const String&amp; path() const;
Is this still needed now? I do not see any reference to path() now since we access the underlying items directly.

WebCore/html/Blob.h:62
 +      void append(PassRefPtr&lt;BlobItem&gt; item);
item name can be omitted.

WebCore/html/Blob.h:73
 +      BlobItemList m_itemList;
Probably it is simpler to call the name as BlobItems and m_items. Not only for the simpler names, but also consistent with items() getter.

WebCore/html/Blob.cpp:40
 +  Blob::Blob(const String&amp; path)
I think we do not need this constructor. Instead, we can move the append operation to the File constructor.

WebCore/html/FileStream.cpp:93
 +      const FileRangeBlobItem* range = blob-&gt;items().at(0)-&gt;toFileRangeBlobItem();
Please add an assert to ensure the blob has only one item. Also a FIXME about needing to handle multiple items when BlobBuilder is introduced.

WebCore/html/FormDataList.h:49
 +      void appendBlob(const String&amp; key, PassRefPtr&lt;Blob&gt; blob);
blob can be omitted.

WebCore/platform/BlobItem.cpp:63
 +              start += fileRangeItem-&gt;start();
What if the new start value is beyond the old range? It seems that we&apos;re only doing partial checks and clamps in BlobItem::slice, which is quite risky. Why not moving the clamp logic in Blob::slice to here?

WebCore/platform/BlobItem.cpp:82
 +      return v.releaseBuffer();
I think this would incur extra overhead for ByteArrayBlobItem that already uses Vector&lt;char&gt; to hold the data.
Probably it is better to move the implementation of releaseBuffer to each subclass. You might also choose to override releaseBuffer in ByteArrayBlobItem.

WebCore/platform/BlobItem.cpp:122
 +      if (!fileItem || m_path != fileItem-&gt;m_path)
It is simpler to say:
    return fileItem &amp;&amp; m_path == fileItem-&gt;m_path;

WebCore/platform/BlobItem.cpp:140
 +  StringBlobItem::StringBlobItem(const String&amp; text, EndingType ending, TextEncoding encoding)
The constructor body seems to be too cumbersome. Can we move the ending logic to a helper function?

WebCore/platform/BlobItem.cpp:243
 +      : m_item(item)
For better readability, can we move setting m_item and m_start values to be else part of the if check in the constructor body?

WebCore/platform/BlobItem.cpp:248
 +          const DataRangeBlobItem* rangeItem = m_item-&gt;toDataRangeBlobItem();
This line can be moved before the above if statement.

WebCore/platform/BlobItem.cpp:273
 +      if (!m_item-&gt;equals(rangeItem-&gt;m_item.get()))
It would be simpler to combine all 3 if checks to one return.

WebCore/platform/network/FormData.cpp:190
 +  void FormData::appendFormDataItems(const BlobItemList&amp; list, const TextEncoding&amp; encoding, bool isMultiPartForm, Document* document)
The name appendFormDataItems is a bit confusing. How about appendItems?

WebCore/platform/network/FormData.h:133
 +      void appendFormDataItems(const BlobItemList&amp; formDataItems, const TextEncoding&amp;, bool isMultiPartForm, Document* document);
We can omit the names of 1st and last arguments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228901</commentid>
    <comment_count>27</comment_count>
      <attachid>56706</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-05-21 07:39:33 -0700</bug_when>
    <thetext>Created attachment 56706
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228906</commentid>
    <comment_count>28</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-05-21 07:50:05 -0700</bug_when>
    <thetext>Attachment 56706 did not build on qt:
Build output: http://webkit-commit-queue.appspot.com/results/2311386</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228910</commentid>
    <comment_count>29</comment_count>
      <attachid>56709</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-05-21 07:54:31 -0700</bug_when>
    <thetext>Created attachment 56709
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228911</commentid>
    <comment_count>30</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-05-21 07:55:07 -0700</bug_when>
    <thetext>(In reply to comment #26)
&gt; (From update of attachment 56610 [details])
&gt; WebCore/ChangeLog:8
&gt;  +          - Introduces a new class BlobItem (platform/BlobData.{h,cpp}) as
&gt; Should it be &quot;platform/BlobItem.{h,cpp}&quot;? Perhaps we do not even need to mention the file names.

I removed the (wrong) file names.

&gt; WebCore/ChangeLog:22
&gt;  +          The existing tests should be able to be used for regression:
&gt; There&apos;re quite a few more tests to test file and form data. Probably we do not need to mention the test names.

Removed the test names too.
 
&gt; WebCore/html/Blob.h:50
&gt;  +      static PassRefPtr&lt;Blob&gt; create(const String&amp; path)
&gt; Seems that we do not need this creator any more.

Really?  There still seem to be a line calling Blob::create(path) in WebCore/bindings/v8/SerializedScriptValue.cpp.  We&apos;ll need to fix the usage once we introduce BlobBuilderf but I don&apos;t want to put too many changes in this patch.
I added &apos;FIXME: deprecated&apos; comment to the function.
 
&gt; WebCore/html/Blob.h:58
&gt;  +      const String&amp; path() const;
&gt; Is this still needed now? I do not see any reference to path() now since we access the underlying items directly.

This is called in FileStream.cpp and again in v8/SerializedScriptValue.cpp.
I added the &apos;FIXME: deprecated&apos; comment here too.

&gt; WebCore/html/Blob.h:62
&gt;  +      void append(PassRefPtr&lt;BlobItem&gt; item);
&gt; item name can be omitted.

Done.

&gt; WebCore/html/Blob.h:73
&gt;  +      BlobItemList m_itemList;
&gt; Probably it is simpler to call the name as BlobItems and m_items. Not only for the simpler names, but also consistent with items() getter.

I renamed m_itemList (and other similar variable names) to m_items.  As for the type name, doesn&apos;t BlobItems sound too similar to BlobItem?

&gt; WebCore/html/Blob.cpp:40
&gt;  +  Blob::Blob(const String&amp; path)
&gt; I think we do not need this constructor. Instead, we can move the append operation to the File constructor.

Again this is left only for Blob::create(path).  I added a FIXME comment.

&gt; WebCore/html/FileStream.cpp:93
&gt;  +      const FileRangeBlobItem* range = blob-&gt;items().at(0)-&gt;toFileRangeBlobItem();
&gt; Please add an assert to ensure the blob has only one item. Also a FIXME about needing to handle multiple items when BlobBuilder is introduced.

Done.

&gt; WebCore/html/FormDataList.h:49
&gt;  +      void appendBlob(const String&amp; key, PassRefPtr&lt;Blob&gt; blob);
&gt; blob can be omitted.

Done.

&gt; WebCore/platform/BlobItem.cpp:63
&gt;  +              start += fileRangeItem-&gt;start();
&gt; What if the new start value is beyond the old range? It seems that we&apos;re only doing partial checks and clamps in BlobItem::slice, which is quite risky. Why not moving the clamp logic in Blob::slice to here?

Blob::slice() shouldn&apos;t call BlobItem::slice() while start is larger than the item&apos;s size(), that is the item&apos;s valid range.  Also it won&apos;t make sense if BlobItem::slice() is called with the start &gt; size().  We can return an empty BlobItem (say BytesArrayBlobItem) but it&apos;ll only confuse the whole logic assume BlobItem is only used as a collection of items.
 
I added an assert ASSERT(start &lt; size()) in BlobItem::slice(), made BlobItem::slice() private and registered Blob as a friend class of BlobItem.
(Rather I thought we may want to put all the logic in BlobItem::slice() into Blob::slice(), but what BlobItem::slice() is doing is deeply related to other BlobItem code.)

&gt; WebCore/platform/BlobItem.cpp:82
&gt;  +      return v.releaseBuffer();
&gt; I think this would incur extra overhead for ByteArrayBlobItem that already uses Vector&lt;char&gt; to hold the data.

Vector::releaseBuffer makes the vector&apos;s buffer empty by passing its buffer ownership to the caller.  BlobItem is ref-counted and should keep its data as far as its ref is &gt;0, so it needs to make a copy.  I added a comment here.

&gt; WebCore/platform/BlobItem.cpp:122
&gt;  +      if (!fileItem || m_path != fileItem-&gt;m_path)
&gt; It is simpler to say:
&gt;     return fileItem &amp;&amp; m_path == fileItem-&gt;m_path;

Done.
 
&gt; WebCore/platform/BlobItem.cpp:140
&gt;  +  StringBlobItem::StringBlobItem(const String&amp; text, EndingType ending, TextEncoding encoding)
&gt; The constructor body seems to be too cumbersome. Can we move the ending logic to a helper function?
 
Done.

&gt; WebCore/platform/BlobItem.cpp:243
&gt;  +      : m_item(item)
&gt; For better readability, can we move setting m_item and m_start values to be else part of the if check in the constructor body?

Done.
 
&gt; WebCore/platform/BlobItem.cpp:248
&gt;  +          const DataRangeBlobItem* rangeItem = m_item-&gt;toDataRangeBlobItem();
&gt; This line can be moved before the above if statement.

Done.

&gt; WebCore/platform/BlobItem.cpp:273
&gt;  +      if (!m_item-&gt;equals(rangeItem-&gt;m_item.get()))
&gt; It would be simpler to combine all 3 if checks to one return.

Done.

&gt; WebCore/platform/network/FormData.cpp:190
&gt;  +  void FormData::appendFormDataItems(const BlobItemList&amp; list, const TextEncoding&amp; encoding, bool isMultiPartForm, Document* document)
&gt; The name appendFormDataItems is a bit confusing. How about appendItems?

Done.

&gt; WebCore/platform/network/FormData.h:133
&gt;  +      void appendFormDataItems(const BlobItemList&amp; formDataItems, const TextEncoding&amp;, bool isMultiPartForm, Document* document);
&gt; We can omit the names of 1st and last arguments.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228928</commentid>
    <comment_count>31</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-05-21 08:35:38 -0700</bug_when>
    <thetext>Attachment 56706 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/2249445</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228931</commentid>
    <comment_count>32</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-05-21 08:39:04 -0700</bug_when>
    <thetext>Attachment 56709 did not build on qt:
Build output: http://webkit-commit-queue.appspot.com/results/2298396</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228974</commentid>
    <comment_count>33</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-05-21 10:12:53 -0700</bug_when>
    <thetext>Attachment 56709 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/2319389</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228997</commentid>
    <comment_count>34</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-05-21 10:53:17 -0700</bug_when>
    <thetext>Please check compiler errors in cr-linux and qt.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>229652</commentid>
    <comment_count>35</comment_count>
      <attachid>56861</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-05-24 01:33:57 -0700</bug_when>
    <thetext>Created attachment 56861
Patch (fixed cr-linux build)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>229863</commentid>
    <comment_count>36</comment_count>
      <attachid>56861</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-05-24 13:12:21 -0700</bug_when>
    <thetext>Comment on attachment 56861
Patch (fixed cr-linux build)

Some more comments. It is very close.

WebCore/html/Blob.h:36
 +  #include &quot;TextEncoding.h&quot;
This include seems not to be needed.

WebCore/html/Blob.h:50
 +      // FIXME: deprecated method.  This is called only from
Please capitalize the 1st letter &apos;d&apos; after FIXME. Please also change other FIXMEs.

WebCore/html/File.cpp:38
 +      int index = name().reverseFind(&apos;.&apos;);
Might be better to cache name() first, like:
    const String&amp; name = name();

WebCore/html/FileStream.cpp:75
 +      // FIXME: need to handle multiple items that may include non-file ones
No need to fold into 2 lines.

WebCore/html/FileStream.cpp:78
 +      const FileBlobItem* file = blob-&gt;items().at(0)-&gt;toFileBlobItem();
Since it will take some time to fix this to support any blob after BlobBuilder is introduced, I think it will be better to return an error instead of falling through and hitting a crash when the user passes a binary blob.
Also, I think it will be better to name the variable as fileItem, in order not to be confused with file object.
    ASSERT(blob-&gt;items().size() == 1);
    const FileBlobItem* fileItem = blob-&gt;items().at(0)-&gt;toFileBlobItem();
    if (!fileItem) {
        ASSERT(false);
        m_client-&gt;didFail(NOT_READABLE_ERR);
        return;
    }

WebCore/html/FileStream.cpp:98
 +      const FileRangeBlobItem* range = file-&gt;toFileRangeBlobItem();
Better to name it as fileRangItem.

WebCore/html/FormDataList.h:49
 +      void appendBlob(const String&amp; key, PassRefPtr&lt;Blob&gt; blob);
The parameter name &apos;blob&apos; can be omitted.

WebCore/platform/BlobItem.cpp:62
 +              if (static_cast&lt;unsigned long long&gt;(start + length) &gt; size())
I think this check is also needed for non-range file item. How about moving the logic out, like:
        if (static_cast&lt;unsigned long long&gt;(start + length) &gt; size())
            length = size() - start;
        start += fileRangeItem-&gt;start();

        const FileRangeBlobItem* fileRangeItem = toFileRangeBlobItem();
        double modificationTime = fileRangeItem ? fileRangeItem-&gt;snapshotModificationTime() : getFileSnapshotModificationTime(fileItem-&gt;path());

        return FileRangeBlobItem::create(fileItem-&gt;path(), start, length, modificationTime);

WebCore/platform/BlobItem.cpp:79
 +  char* DataBlobItem::releaseBuffer() const
I see what you mean. However, the name &apos;releaseBuffer&apos; suggests to release the internal buffer while the implementation here does not mean this. Please add a FIXME to address this issue later. Probably consider renaming the method?

WebCore/platform/BlobItem.h:97
 +      friend class Blob;
Probably it is not a good idea to add a non-platform class as a friend. You might remove the friend definition and move the slice to public as long as slice does the right check.

WebCore/platform/BlobItem.h:104
 +  // In most cases BlobItem&apos;s are handled as a list (e.g. in Blob, FormData).
This comment is somewhat confusing. Probably we can remove it.

WebCore/platform/network/FormData.cpp:49
 +      const FileRangeBlobItem* range = m_item-&gt;toFileRangeBlobItem();
Better to name range as fileRangeItem.

WebKit/chromium/ChangeLog:8
 +          Replace FormDataList::Item list with BlobItemList to get it compiling
compiling =&gt; compiled?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230259</commentid>
    <comment_count>37</comment_count>
      <attachid>57016</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-05-25 07:31:24 -0700</bug_when>
    <thetext>Created attachment 57016
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230262</commentid>
    <comment_count>38</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-05-25 07:43:49 -0700</bug_when>
    <thetext>Attachment 57016 did not build on qt:
Build output: http://webkit-commit-queue.appspot.com/results/2301604</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230266</commentid>
    <comment_count>39</comment_count>
      <attachid>57018</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-05-25 07:47:33 -0700</bug_when>
    <thetext>Created attachment 57018
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230302</commentid>
    <comment_count>40</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-05-25 09:10:17 -0700</bug_when>
    <thetext>(In reply to comment #36)
&gt; WebCore/html/Blob.h:36
&gt;  +  #include &quot;TextEncoding.h&quot;
&gt; This include seems not to be needed.

Removed.

&gt; WebCore/html/Blob.h:50
&gt;  +      // FIXME: deprecated method.  This is called only from
&gt; Please capitalize the 1st letter &apos;d&apos; after FIXME. Please also change other FIXMEs.

Fixed.

&gt; WebCore/html/File.cpp:38
&gt;  +      int index = name().reverseFind(&apos;.&apos;);
&gt; Might be better to cache name() first, like:
&gt;     const String&amp; name = name();

Fixed.

&gt; WebCore/html/FileStream.cpp:75
&gt;  +      // FIXME: need to handle multiple items that may include non-file ones
&gt; No need to fold into 2 lines.

Fixed.

&gt; WebCore/html/FileStream.cpp:78
&gt;  +      const FileBlobItem* file = blob-&gt;items().at(0)-&gt;toFileBlobItem();
&gt; Since it will take some time to fix this to support any blob after BlobBuilder is introduced, I think it will be better to return an error instead of falling through and hitting a crash when the user passes a binary blob.
&gt; Also, I think it will be better to name the variable as fileItem, in order not to be confused with file object.

Makes sense, fixed.

&gt; WebCore/html/FileStream.cpp:98
&gt;  +      const FileRangeBlobItem* range = file-&gt;toFileRangeBlobItem();
&gt; Better to name it as fileRangItem.

Fixed.

&gt; WebCore/html/FormDataList.h:49
&gt;  +      void appendBlob(const String&amp; key, PassRefPtr&lt;Blob&gt; blob);
&gt; The parameter name &apos;blob&apos; can be omitted.

Fixed.

&gt; WebCore/platform/BlobItem.cpp:62
&gt;  +              if (static_cast&lt;unsigned long long&gt;(start + length) &gt; size())
&gt; I think this check is also needed for non-range file item. How about moving the logic out, like:
&gt;         if (static_cast&lt;unsigned long long&gt;(start + length) &gt; size())
&gt;             length = size() - start;
&gt;         start += fileRangeItem-&gt;start();
&gt; 
&gt;         const FileRangeBlobItem* fileRangeItem = toFileRangeBlobItem();
&gt;         double modificationTime = fileRangeItem ? fileRangeItem-&gt;snapshotModificationTime() : getFileSnapshotModificationTime(fileItem-&gt;path());
&gt; 
&gt;         return FileRangeBlobItem::create(fileItem-&gt;path(), start, length, modificationTime);

Looks better, fixed.

&gt; WebCore/platform/BlobItem.cpp:79
&gt;  +  char* DataBlobItem::releaseBuffer() const
&gt; I see what you mean. However, the name &apos;releaseBuffer&apos; suggests to release the internal buffer while the implementation here does not mean this. Please add a FIXME to address this issue later. Probably consider renaming the method?

Right.  Did both - renamed the method and added FIXME comment.

&gt; WebCore/platform/BlobItem.h:97
&gt;  +      friend class Blob;
&gt; Probably it is not a good idea to add a non-platform class as a friend. You might remove the friend definition and move the slice to public as long as slice does the right check.

Fixed.

&gt; WebCore/platform/BlobItem.h:104
&gt;  +  // In most cases BlobItem&apos;s are handled as a list (e.g. in Blob, FormData).
&gt; This comment is somewhat confusing. Probably we can remove it.

Removed the comment.

&gt; WebCore/platform/network/FormData.cpp:49
&gt;  +      const FileRangeBlobItem* range = m_item-&gt;toFileRangeBlobItem();
&gt; Better to name range as fileRangeItem.

Fixed.

&gt; WebKit/chromium/ChangeLog:8
&gt;  +          Replace FormDataList::Item list with BlobItemList to get it compiling
&gt; compiling =&gt; compiled?

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230437</commentid>
    <comment_count>41</comment_count>
      <attachid>57018</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-05-25 13:59:54 -0700</bug_when>
    <thetext>Comment on attachment 57018
Patch

WebCore/platform/BlobItem.cpp:74
 +  char* DataBlobItem::deepCopyBuffer() const
Probably copyBuffer() sounds simpler.

WebCore/platform/BlobItem.cpp:111
 +  bool FileBlobItem::isValid() const
This validity check is not necessary because the check is done when we open a file to read.
Please also remove isValid() from FileBlobItem class definition.

WebCore/platform/BlobItem.cpp:141
 +  
Please remove the extra empty line.

WebCore/platform/network/FormData.cpp:171
 +  void FormData::appendBlobItemList(const BlobItemList&amp; list)
This method is very confusing with appendItems because both take BlobItemList and the names sound similar while the semantics are very different.
How about naming this method as appendItems (or appendBlobItems) and the other one as appendKeyValuePairItems (or appendBlobItemsInKeyValuePair)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230580</commentid>
    <comment_count>42</comment_count>
      <attachid>57069</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-05-25 22:44:27 -0700</bug_when>
    <thetext>Created attachment 57069
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230582</commentid>
    <comment_count>43</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-05-25 22:57:42 -0700</bug_when>
    <thetext>(In reply to comment #41)
&gt; (From update of attachment 57018 [details])
&gt; WebCore/platform/BlobItem.cpp:74
&gt;  +  char* DataBlobItem::deepCopyBuffer() const
&gt; Probably copyBuffer() sounds simpler.

Renamed.

&gt; WebCore/platform/BlobItem.cpp:111
&gt;  +  bool FileBlobItem::isValid() const
&gt; This validity check is not necessary because the check is done when we open a file to read.
&gt; Please also remove isValid() from FileBlobItem class definition.

Removed FileBlobItem::isValid().

&gt; WebCore/platform/BlobItem.cpp:141
&gt;  +  
&gt; Please remove the extra empty line.

Done.

&gt; WebCore/platform/network/FormData.cpp:171
&gt;  +  void FormData::appendBlobItemList(const BlobItemList&amp; list)
&gt; This method is very confusing with appendItems because both take BlobItemList and the names sound similar while the semantics are very different.
&gt; How about naming this method as appendItems (or appendBlobItems) and the other one as appendKeyValuePairItems (or appendBlobItemsInKeyValuePair)?

Sounds good, renamed the other private method to appendKeyValuePairItems.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230594</commentid>
    <comment_count>44</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-05-25 23:23:13 -0700</bug_when>
    <thetext>Attachment 57069 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/2509010</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230616</commentid>
    <comment_count>45</comment_count>
      <attachid>57080</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-05-26 01:41:47 -0700</bug_when>
    <thetext>Created attachment 57080
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230998</commentid>
    <comment_count>46</comment_count>
      <attachid>57080</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-05-26 16:28:39 -0700</bug_when>
    <thetext>Comment on attachment 57080
Patch

It looks good to me. I&apos;ve asked fishd to take another look, esp on the naming part.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233454</commentid>
    <comment_count>47</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-06-02 14:28:33 -0700</bug_when>
    <thetext>(In reply to comment #46)
&gt; (From update of attachment 57080 [details])
&gt; It looks good to me. I&apos;ve asked fishd to take another look, esp on the naming part.

Thanks for your all of reviews Jian.  Darin will you have time to take another look at this?  Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233460</commentid>
    <comment_count>48</comment_count>
      <attachid>57080</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-06-02 14:49:45 -0700</bug_when>
    <thetext>Comment on attachment 57080
Patch

WebCore/platform/BlobItem.cpp:32
 +  
nit: no new line here.

WebCore/platform/BlobItem.h:52
 +  class BytesArrayBlobItem;
nit: BytesArrayBlobItem -&gt; ByteArrayBlobItem, the term &quot;byte array&quot; is more common.

WebCore/platform/BlobItem.h:45
 +  enum EndingType {
nit: LineEnding might be a more natural name for this enum.

WebCore/platform/network/FormData.h:46
 +          BlobItemWrapper(const BlobItemWrapper&amp; v) : m_item(v.m_item) { }
this copy constructor should be generated by the compiler automatically.

WebCore/platform/network/FormData.h:60
 +          char* releaseBuffer() const
the name &quot;releaseBuffer&quot; typically implies an efficient operation that
does not require the allocation of memory.  it implies that memory is
being released from one owner and passed to the caller to own.  but this
is calling copyBuffer, which is a copy.  i see, however, that this is
just a temporary solution.

WebCore/platform/network/FormData.h:67
 +      } m_data;
nit: it is usually better style to do:
struct BlobItemWrapper {
  ...
};
BlobItemWrapper m_data;

WebCore/platform/BlobItem.cpp:59
 +      if (fileItem) {
it seems like it would be better to define slice for DataBlobItem
and FileBlobItem, and then leave BlobItem::slice pure virtual.
the only code you are sharing is the checks at the top of this
function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233518</commentid>
    <comment_count>49</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-06-02 17:24:38 -0700</bug_when>
    <thetext>How do you think of the naming? With this refactoring, BlobItem is the building block for both FormData and Blob. Probably it will be better to use a more generic name. I do not have a good name in mind. Maybe we can call it DataItem that has both BinaryDataItem and FileDataItem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233614</commentid>
    <comment_count>50</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-06-02 22:28:40 -0700</bug_when>
    <thetext>(In reply to comment #49)
&gt; How do you think of the naming? With this refactoring, BlobItem is the building block for both FormData and Blob. Probably it will be better to use a more generic name. I do not have a good name in mind. Maybe we can call it DataItem that has both BinaryDataItem and FileDataItem.

I&apos;m still somewhat confused by the desire to make FormData share code with Blob.  It seems to me that FormData should just be a list of strings and file paths (plus range and timestamp).  What is the advantage of making the internal representation of a Blob share code with FormData?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233616</commentid>
    <comment_count>51</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-06-02 22:35:13 -0700</bug_when>
    <thetext>(In reply to comment #50)
&gt; I&apos;m still somewhat confused by the desire to make FormData share code with
&gt; Blob.  It seems to me that FormData should just be a list of strings and file 
&gt; paths (plus range and timestamp).  What is the advantage of making the internal 
&gt; representation of a Blob share code with FormData?

I should clarify.  What I really mean is that it seems like the structure used
by the networking stack (which is currently called WebCore::FormData) should 
really just be a list of strings and file paths (plus range and timestamp).  It 
should just be the input parameters to the network stack.  This is why I have
previously recommended renaming that structure to be named HTTPBody.  Another
good name might be ResourceRequestBody.

Also, I agree with the idea of sharing code between the BlobBuilder and FormData 
web platform interfaces.  It makes sense for those to have a common backend.
Perhaps they should not be building on top of WebCore::FormData, but instead we
should generate one of those when it comes time to submit a Blob or a FormData
to the networking stack.

(It is confusing to talk about this since the web platform API named FormData is not the same thing as WebCore::FormData.)

Are you trying to avoid extra copies between a Blob and the network stack?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233628</commentid>
    <comment_count>52</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-06-02 23:18:53 -0700</bug_when>
    <thetext>(In reply to comment #51)
&gt; Are you trying to avoid extra copies between a Blob and the network stack?

I think we&apos;re trying to avoid the similar internal representation and operations that are needed for BlobBuilder and FormData, i.e., append operations. This is what this patch is about.

For copying between FormData/Blob and the network stack, it might be more efficient if we can share the same structure for the element list part, that is, FormDataElement vs. WebHTTPBody::Element. What I mean is that the element list is same and can be shared between these two, while each of them has its own specific members. FormData has &quot;identifier&quot; and Blob has &quot;contentType&quot; and &quot;contentDisposition&quot;. We could have another patch for this purpose.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233981</commentid>
    <comment_count>53</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-06-03 16:30:30 -0700</bug_when>
    <thetext>(In reply to comment #52)
&gt; (In reply to comment #51)
&gt; &gt; Are you trying to avoid extra copies between a Blob and the network stack?
&gt; 
&gt; I think we&apos;re trying to avoid the similar internal representation and operations that are needed for BlobBuilder and FormData, i.e., append operations. This is what this patch is about.

Hmm, I think we can keep the network stack&apos;s FormData as a simple list of data or file (or WebHTTPBody::Element like structure) while utilizing BlobItem as one of the interfaces for passing blob-like data to the network stack.
At some point we need to convert opaque items to simple data at the network layer, and on the second thought making the network stack&apos;s FormData contain BlobItem may not make much sense.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233982</commentid>
    <comment_count>54</comment_count>
      <attachid>57831</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-06-03 16:35:05 -0700</bug_when>
    <thetext>Created attachment 57831
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233986</commentid>
    <comment_count>55</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-06-03 16:38:07 -0700</bug_when>
    <thetext>(In reply to comment #48)
&gt; (From update of attachment 57080 [details])
&gt; WebCore/platform/BlobItem.cpp:32
&gt;  +  
&gt; nit: no new line here.

Fixed.
 
&gt; WebCore/platform/BlobItem.h:52
&gt;  +  class BytesArrayBlobItem;
&gt; nit: BytesArrayBlobItem -&gt; ByteArrayBlobItem, the term &quot;byte array&quot; is more common.

Fixed.

&gt; WebCore/platform/BlobItem.h:45
&gt;  +  enum EndingType {
&gt; nit: LineEnding might be a more natural name for this enum.

Fixed.

&gt; WebCore/platform/network/FormData.h:46
&gt;  +          BlobItemWrapper(const BlobItemWrapper&amp; v) : m_item(v.m_item) { }
&gt; this copy constructor should be generated by the compiler automatically.

Removed.

&gt; WebCore/platform/network/FormData.h:60
&gt;  +          char* releaseBuffer() const
&gt; the name &quot;releaseBuffer&quot; typically implies an efficient operation that
&gt; does not require the allocation of memory.  it implies that memory is
&gt; being released from one owner and passed to the caller to own.  but this
&gt; is calling copyBuffer, which is a copy.  i see, however, that this is
&gt; just a temporary solution.

Added a FIXME comment for now.

&gt; WebCore/platform/network/FormData.h:67
&gt;  +      } m_data;
&gt; nit: it is usually better style to do:
&gt; struct BlobItemWrapper {
&gt;   ...
&gt; };
&gt; BlobItemWrapper m_data;

Fixed.
 
&gt; WebCore/platform/BlobItem.cpp:59
&gt;  +      if (fileItem) {
&gt; it seems like it would be better to define slice for DataBlobItem
&gt; and FileBlobItem, and then leave BlobItem::slice pure virtual.
&gt; the only code you are sharing is the checks at the top of this
&gt; function.

Indeed, fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233989</commentid>
    <comment_count>56</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-06-03 16:40:52 -0700</bug_when>
    <thetext>(In reply to comment #53) 
&gt; Hmm, I think we can keep the network stack&apos;s FormData as a simple list of data or file (or WebHTTPBody::Element like structure) while utilizing BlobItem as one of the interfaces for passing blob-like data to the network stack.

I also uploaded an alternative patch that tries to do this (return back to the simple FormData).

http://codereview.chromium.org/1769002/show</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234405</commentid>
    <comment_count>57</comment_count>
      <attachid>57922</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-06-04 15:32:03 -0700</bug_when>
    <thetext>Created attachment 57922
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234424</commentid>
    <comment_count>58</comment_count>
      <attachid>57922</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-06-04 16:49:47 -0700</bug_when>
    <thetext>Comment on attachment 57922
Patch

Looks generally good. Just several more comments.

WebCore/ChangeLog:9
 +            FormDataList and makes Blob as a collection of BlobItems.
The 2nd part after &quot;and&quot; seems to be redundant.

WebCore/ChangeLog:49
 +          (WebCore::FormDataList::appendString):
Please also mention here that the line ending fix logic has been moved to StringBlobItem::convertToCString.

WebCore/platform/network/FormData.cpp:217
 +          const RefPtr&lt;BlobItem&gt; value = items[i + 1];
Might be better to use &quot;const BlobItem*&quot; in order to be consistent with previous line.

WebCore/platform/network/FormData.h:23
 +  #include &quot;BlobItem.h&quot;
It seems that we do not need to include BlobItem.h. Instead we can add forward reference to BlobItem and BlobItemList.

WebKit/chromium/src/WebSearchableFormData.cpp:201
 +            if (!item)
Is there any case that the current item is not StringBlobItem? I think we rather throw ASSERT here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234439</commentid>
    <comment_count>59</comment_count>
      <attachid>57930</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-06-04 17:40:07 -0700</bug_when>
    <thetext>Created attachment 57930
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234442</commentid>
    <comment_count>60</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-06-04 17:44:22 -0700</bug_when>
    <thetext>(In reply to comment #58)
&gt; (From update of attachment 57922 [details])
&gt; WebCore/ChangeLog:9
&gt;  +            FormDataList and makes Blob as a collection of BlobItems.
&gt; The 2nd part after &quot;and&quot; seems to be redundant.

Removed the part.

&gt; WebCore/ChangeLog:49
&gt;  +          (WebCore::FormDataList::appendString):
&gt; Please also mention here that the line ending fix logic has been moved to StringBlobItem::convertToCString.

Added the comment.

&gt; WebCore/platform/network/FormData.cpp:217
&gt;  +          const RefPtr&lt;BlobItem&gt; value = items[i + 1];
&gt; Might be better to use &quot;const BlobItem*&quot; in order to be consistent with previous line.

Fixed.

&gt; WebCore/platform/network/FormData.h:23
&gt;  +  #include &quot;BlobItem.h&quot;
&gt; It seems that we do not need to include BlobItem.h. Instead we can add forward reference to BlobItem and BlobItemList.

Fixed.

&gt; WebKit/chromium/src/WebSearchableFormData.cpp:201
&gt;  +            if (!item)
&gt; Is there any case that the current item is not StringBlobItem? I think we rather throw ASSERT here.

I suppose there won&apos;t be the case.  Changed the if to ASSERT.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234455</commentid>
    <comment_count>61</comment_count>
      <attachid>57930</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-06-04 18:18:11 -0700</bug_when>
    <thetext>Comment on attachment 57930
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>235029</commentid>
    <comment_count>62</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-06-07 13:55:20 -0700</bug_when>
    <thetext>Committed r60799: &lt;http://trac.webkit.org/changeset/60799&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56030</attachid>
            <date>2010-05-13 16:17:35 -0700</date>
            <delta_ts>2010-05-13 16:55:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-39083-20100513161733.patch</filename>
            <type>text/plain</type>
            <size>69116</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NmYxMjU0ZGYxNDM2YjYxNjNiZDRiYmQzNGRmMmQ1NmVmZGJjOWI4OC4uOGQ2MGE5YWMyZTYwNjU3
MGE4MmZmMTg5ZjJlMzY4ZjYwOTFjYmNhMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4MyBAQAorMjAxMC0wNS0xMyAgS2lu
dWtvIFlhc3VkYSAgPGtpbnVrb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVmYWN0b3IgRm9ybURhdGEgYW5kIEJsb2IgZm9y
IGJldHRlciBzdXBwb3J0IG9mIEJsb2JzIHN5bnRoZXNpemVkIGJ5IEJsb2JCdWlsZGVyLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzkwODMKKworICAg
ICAgICBJbnRyb2R1Y2VzIGEgbmV3IGNsYXNzIEJsb2JJdGVtIGFzIGEgYmFzaWMgY29tcG9uZW50
IG9mIEJsb2IgYW5kIEZvcm1EYXRhLAorICAgICAgICBhbmQgbWFrZXMgQmxvYiBhcyBhIGNvbGxl
Y3Rpb24gb2YgQmxvYkl0ZW1zLgorICAgICAgICBGaWxlIHdvdWxkIGJlY29tZSBhIHNwZWNpYWwg
dHlwZSBvZiBCbG9iIHRoYXQgY29udGFpbnMgb25seSBvbmUgRmlsZUJsb2JJdGVtLgorICAgICAg
ICBGb3JtRGF0YUVsZW1lbnQgYW5kIEZvcm1EYXRhTGlzdDo6SXRlbSB3b3VsZCBiZWNvbWUgYSB3
cmFwcGVyIG9mIEJsb2JJdGVtLgorCisgICAgICAgIFRoZSBwYXRjaCBkb2Vzbid0IHN1cHBvcnQg
dGhlIGxhdGVzdCBGaWxlIEFQSSBjaGFuZ2VzIChlLmcuIHR5cGUsIHVybCBhbmQKKyAgICAgICAg
c2xpY2UncyB0eXBlIHBhcmFtZXRlcnMpIGFuZCBzaG91bGQgbm90IGNoYW5nZSBhbnkgb2YgaXRz
IGV4aXN0aW5nIGJlaGF2aW9ycy4KKworICAgICAgICBUaGUgZXhpc3RpbmcgdGVzdHMgc2hvdWxk
IGJlIGFibGUgdG8gYmUgdXNlZCBmb3IgcmVncmVzc2lvbjoKKyAgICAgICAgLSBodHRwL3Rlc3Rz
L2xvY2FsL2Zvcm1kYXRhL3NlbmQtZm9ybS1kYXRhLXdpdGgtc2xpY2VkLWZpbGUuaHRtbAorICAg
ICAgICAtIGh0dHAvdGVzdHMvbG9jYWwvc2VuZC1zbGljZWQtZHJhZ2dlZC1maWxlLmh0bWwKKwor
ICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAg
ICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
ajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogaHRtbC9CbG9iLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpCbG9iOjpCbG9iKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OnNpemUp
OgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6cGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpCbG9i
OjphcHBlbmRCbG9iSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjpzbGljZSk6CisgICAg
ICAgICogaHRtbC9CbG9iLmg6CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjpjcmVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6QmxvYjo6dHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjppdGVt
cyk6CisgICAgICAgICogaHRtbC9CbG9iSXRlbS5jcHA6IEFkZGVkLgorICAgICAgICAqIGh0bWwv
QmxvYkl0ZW0uaDogQWRkZWQuCisgICAgICAgICogaHRtbC9GaWxlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmdldEZpbGVUeXBlRnJvbVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZTo6Rmls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlOjpuYW1lKToKKyAgICAgICAgKiBodG1sL0ZpbGUu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGU6OmZpbGVOYW1lKToKKyAgICAgICAgKiBodG1sL0Zp
bGVTdHJlYW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVN0cmVhbTo6b3BlbkZvclJlYWQp
OgorICAgICAgICAqIGh0bWwvRm9ybURhdGFMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZv
cm1EYXRhTGlzdDo6YXBwZW5kU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhTGlz
dDo6YXBwZW5kQmxvYik6CisgICAgICAgICogaHRtbC9Gb3JtRGF0YUxpc3QuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkZvcm1EYXRhTGlzdDo6SXRlbTo6SXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpG
b3JtRGF0YUxpc3Q6Okl0ZW06OmRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGFMaXN0
OjpJdGVtOjppdGVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhRWxlbWVudDo6Rm9ybURhdGFFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9y
bURhdGE6OmRlZXBDb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjphcHBlbmREYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjphcHBlbmRTdHJpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9ybURhdGE6OmFwcGVuZEZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURh
dGE6OmFwcGVuZEJsb2IpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6OmFwcGVuZEZpbGVS
YW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YTo6YXBwZW5kRE9NRm9ybURhdGEpOgor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkZvcm1EYXRhRWxlbWVudDo6Rm9ybURhdGFFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZv
cm1EYXRhRWxlbWVudDo6aXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YUVsZW1lbnQ6
OkJsb2JJdGVtV3JhcHBlcjo6QmxvYkl0ZW1XcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZv
cm1EYXRhRWxlbWVudDo6QmxvYkl0ZW1XcmFwcGVyOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OkZvcm1EYXRhRWxlbWVudDo6QmxvYkl0ZW1XcmFwcGVyOjpkYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkZvcm1EYXRhRWxlbWVudDo6QmxvYkl0ZW1XcmFwcGVyOjpyZWxlYXNlQnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3Ih
PSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9tYWMvRm9ybURhdGFTdHJlYW1NYWMubW06
CisgICAgICAgIChXZWJDb3JlOjpjbG9zZUN1cnJlbnRTdHJlYW0pOgorICAgICAgICAoV2ViQ29y
ZTo6YWR2YW5jZUN1cnJlbnRTdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6Zm9ybUNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpmb3JtUmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpzZXRIVFRQ
Qm9keSk6CisgICAgICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlhNTEh0dHBSZXF1ZXN0OjpzZW5kKToKKwogMjAxMC0wNS0xMSAgSmlhbiBMaSAgPGppYW5s
aUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gRml4IGNvbXBpbGluZyBlcnJv
biBvbiBzbm93IGxlb3BhcmQuCmRpZmYgLS1naXQgYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIv
V2ViQ29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCBhNmUyMzAyYzUxMDM2NjU2YmYwODVhMGVhYWQx
ZDBhMjAxY2FmYmFhLi42YzNlZGY0YThkNjk0ZTg0M2ZiMzI5YzU2NTg0MmNkM2M0YmI0YTUyIDEw
MDY0NAotLS0gYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCisrKyBiL1dlYkNvcmUvR05VbWFrZWZp
bGUuYW0KQEAgLTEwMjIsNiArMTAyMiw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29y
ZS9oaXN0b3J5L1BhZ2VDYWNoZS5oIFwKIAlXZWJDb3JlL2h0bWwvQmxvYi5jcHAgXAogCVdlYkNv
cmUvaHRtbC9CbG9iLmggXAorCVdlYkNvcmUvaHRtbC9CbG9iSXRlbS5jcHAgXAorCVdlYkNvcmUv
aHRtbC9CbG9iSXRlbS5oIFwKIAlXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0NvbnRleHRBdHRy
aWJ1dGVzLmggXAogCVdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzR3JhZGllbnQuY3BwIFwKIAlX
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0dyYWRpZW50LmggXApkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCAxNGVmNGY3YzFhNWI5
ZTI5YTE4MzU1ZGUxNTkxMjc3MDY2ODVmM2E3Li5iNDU3YWE5YzEyZmM4YmMyMjBkYTg3ZTVlYzk1
ZTNhOTViZmY3NzM5IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQpAQCAtMTM3MCw2ICsxMzcwLDggQEAKICAgICAgICAgICAgICdoaXN0
b3J5L1BhZ2VDYWNoZS5oJywKICAgICAgICAgICAgICdodG1sL0Jsb2IuY3BwJywKICAgICAgICAg
ICAgICdodG1sL0Jsb2IuaCcsCisgICAgICAgICAgICAnaHRtbC9CbG9iSXRlbS5jcHAnLAorICAg
ICAgICAgICAgJ2h0bWwvQmxvYkl0ZW0uaCcsCiAgICAgICAgICAgICAnaHRtbC9jYW52YXMvV2Vi
R0xBcnJheS5jcHAnLAogICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMQXJyYXkuaCcsCiAg
ICAgICAgICAgICAnaHRtbC9jYW52YXMvV2ViR0xBcnJheUJ1ZmZlci5jcHAnLApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggNGFlMmEw
ZjdiNzdhMzFiNDNlZTFiMDIzNDc5YTg0ZjBkZGZlMTdhYS4uNTgwZDVlMjg0MGEyZDEyZWRhMDQx
MmM3NTcyMGVkZTU1NDQ3ZTU3NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnBybworKysg
Yi9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC01ODUsNiArNTg1LDcgQEAgU09VUkNFUyArPSBcCiAg
ICAgaGlzdG9yeS9xdC9IaXN0b3J5SXRlbVF0LmNwcCBcCiAgICAgaGlzdG9yeS9QYWdlQ2FjaGUu
Y3BwIFwKICAgICBodG1sL0Jsb2IuY3BwIFwKKyAgICBodG1sL0Jsb2JJdGVtLmNwcCBcCiAgICAg
aHRtbC9jYW52YXMvQ2FudmFzR3JhZGllbnQuY3BwIFwKICAgICBodG1sL2NhbnZhcy9DYW52YXNQ
YXR0ZXJuLmNwcCBcCiAgICAgaHRtbC9jYW52YXMvQ2FudmFzUGl4ZWxBcnJheS5jcHAgXApAQCAt
MTMwMiw2ICsxMzAzLDcgQEAgSEVBREVSUyArPSBcCiAgICAgaGlzdG9yeS9IaXN0b3J5SXRlbS5o
IFwKICAgICBoaXN0b3J5L1BhZ2VDYWNoZS5oIFwKICAgICBodG1sL0Jsb2IuaCBcCisgICAgaHRt
bC9CbG9iSXRlbS5oIFwKICAgICBodG1sL2NhbnZhcy9DYW52YXNHcmFkaWVudC5oIFwKICAgICBo
dG1sL2NhbnZhcy9DYW52YXNQYXR0ZXJuLmggXAogICAgIGh0bWwvY2FudmFzL0NhbnZhc1BpeGVs
QXJyYXkuaCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCBhZmU0YmI5
ZWIwOGMxZWRjYmMxNzIxZjU4ZjczYjcwNGMzOWJmMDZkLi5kNWJiMTJkZjA3MmM1Y2VjODhjMDhm
YTQ4YjI2ZWQxOWY2OTkxNmYwIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oK
QEAgLTMwNTA5LDYgKzMwNTA5LDE0IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0K
KwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcQmxvYkl0ZW0uY3BwIg0KKwkJCQk+DQorCQkJPC9G
aWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxCbG9iSXRlbS5oIg0K
KwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRt
bFxjYW52YXNcQ2FudmFzR3JhZGllbnQuY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KZGlmZiAt
LWdpdCBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYzkzODMxZDY0NzIzYTJl
ZjgzMzc5ZjAxZTUyNDMxYjE0ZTM3MTM1OS4uNWFlOTc3NGM4ZDIxYjk3ZmExNjUyMjQzOTAyNjE1
ZDhmZmQyY2QzMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
QEAgLTY2NSw3ICs2NjUsNyBAQAogCQkyRTk0RjQ1MTExOTIwOTZBMDBCN0Y3NUQgLyogRmlsZVJl
YWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU5
NEYzQ0MxMThCOTA4RTAwQjdGNzVEIC8qIEZpbGVSZWFkZXIuaCAqLzsgfTsKIAkJMkVBNzY4MDQw
RkU3MTI2NDAwQUI5QzhBIC8qIFdvcmtlclNjcmlwdExvYWRlckNsaWVudC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkVBNzY4MDMwRkU3MTI2NDAwQUI5
QzhBIC8qIFdvcmtlclNjcmlwdExvYWRlckNsaWVudC5oICovOyB9OwogCQkyRUFGQUYwRTEwRTJB
RjJEMDA3RUQzRDYgLyogQmxvYi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyRUFGQUYwQjEwRTJBRjJEMDA3RUQzRDYgLyogQmxvYi5jcHAgKi87IH07
Ci0JCTJFQUZBRjBGMTBFMkFGMkQwMDdFRDNENiAvKiBCbG9iLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRUFGQUYwQzEwRTJBRjJEMDA3RUQzRDYgLyog
QmxvYi5oICovOyB9OworCQkyRUFGQUYwRjEwRTJBRjJEMDA3RUQzRDYgLyogQmxvYi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkVBRkFGMEMxMEUyQUYy
RDAwN0VEM0Q2IC8qIEJsb2IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkyRUNGN0FEQzEwMTYyQjM4MDA0MjdERTcgLyogSlNFcnJvckV2ZW50LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFQ0Y3QURB
MTAxNjJCMzgwMDQyN0RFNyAvKiBKU0Vycm9yRXZlbnQuY3BwICovOyB9OwogCQkyRUNGN0FERDEw
MTYyQjM4MDA0MjdERTcgLyogSlNFcnJvckV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRUNGN0FEQjEwMTYyQjM4MDA0MjdERTcgLyogSlNFcnJv
ckV2ZW50LmggKi87IH07CiAJCTJFQ0Y3QUUxMTAxNjJCNTgwMDQyN0RFNyAvKiBFcnJvckV2ZW50
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFQ0Y3
QURFMTAxNjJCNTgwMDQyN0RFNyAvKiBFcnJvckV2ZW50LmNwcCAqLzsgfTsKQEAgLTIyNTYsNiAr
MjI1Niw4IEBACiAJCTg1Rjc0RTBBMEFBOERGOEMwMDBEQzI4NCAvKiBET01DU1NVbmtub3duUnVs
ZS5oIGluIENvcHkgR2VuZXJhdGVkIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gODUwMzJERDUwQUE4QzlCRTAwN0QzQjdEIC8qIERPTUNTU1Vua25vd25SdWxlLmgg
Ki87IH07CiAJCTg1RkYzMTVBMEFBRkJGQ0IwMDM3NEYzOCAvKiBET01LZXlib2FyZEV2ZW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NUZGMzE1ODBB
QUZCRkNCMDAzNzRGMzggLyogRE9NS2V5Ym9hcmRFdmVudC5oICovOyB9OwogCQk4NUZGMzE1QjBB
QUZCRkNCMDAzNzRGMzggLyogRE9NS2V5Ym9hcmRFdmVudC5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg1RkYzMTU5MEFBRkJGQ0IwMDM3NEYzOCAvKiBE
T01LZXlib2FyZEV2ZW50Lm1tICovOyB9OworCQk4OTE4MTQzMDExODdDNEI0MDBCRjY5OEEgLyog
QmxvYkl0ZW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gODkxODE0MkIxMTg3QzRCNDAwQkY2OThBIC8qIEJsb2JJdGVtLmNwcCAqLzsgfTsKKwkJODkx
ODE0MzExMTg3QzRCNDAwQkY2OThBIC8qIEJsb2JJdGVtLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4OTE4MTQyQzExODdDNEI0MDBCRjY5OEEgLyogQmxv
Ykl0ZW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk4OTUyNTM1MjExNjQxQjM0MDBDQUJGMDAgLyogRmlsZVRocmVhZC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4OTUyNTM1MDExNjQxQjM0MDBDQUJG
MDAgLyogRmlsZVRocmVhZC5jcHAgKi87IH07CiAJCTg5NTI1MzUzMTE2NDFCMzQwMENBQkYwMCAv
KiBGaWxlVGhyZWFkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA4OTUyNTM1MTExNjQxQjM0MDBDQUJGMDAgLyogRmlsZVRocmVhZC5oICovOyB9OwogCQk4
OTUyNTNENzExNkM0QzY4MDBDQUJGMDAgLyogRmlsZVN0cmVhbS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4OTUyNTNENDExNkM0QzY4MDBDQUJGMDAg
LyogRmlsZVN0cmVhbS5jcHAgKi87IH07CkBAIC03Nzk1LDYgKzc3OTcsOCBAQAogCQk4NUY1NkE3
OTBBOThDRTM3MDBBREI2MEEgLyogRE9NUHJvY2Vzc2luZ0luc3RydWN0aW9uLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IERPTVByb2Nlc3NpbmdJbnN0cnVjdGlv
bi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODVGRjMxNTgwQUFGQkZDQjAwMzc0
RjM4IC8qIERPTUtleWJvYXJkRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IERPTUtleWJvYXJkRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODVG
RjMxNTkwQUFGQkZDQjAwMzc0RjM4IC8qIERPTUtleWJvYXJkRXZlbnQubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRE9NS2V5Ym9hcmRFdmVudC5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODkxODE0MkIxMTg3QzRCNDAwQkY2OThBIC8qIEJsb2JJ
dGVtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJsb2JJdGVtLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODkxODE0MkMxMTg3QzRCNDAwQkY2OThB
IC8qIEJsb2JJdGVtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJsb2JJdGVt
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg5NTI1MzUwMTE2NDFCMzQwMENBQkYw
MCAvKiBGaWxlVGhyZWFkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEZpbGVUaHJlYWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4OTUyNTM1MTEx
NjQxQjM0MDBDQUJGMDAgLyogRmlsZVRocmVhZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBGaWxlVGhyZWFkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg5NTI1
M0Q0MTE2QzRDNjgwMENBQkYwMCAvKiBGaWxlU3RyZWFtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEZpbGVTdHJlYW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMTMxOTUsNiArMTMxOTksOCBAQAogCQkJCTJFQUZBRjBCMTBFMkFGMkQwMDdFRDNE
NiAvKiBCbG9iLmNwcCAqLywKIAkJCQkyRUFGQUYwQzEwRTJBRjJEMDA3RUQzRDYgLyogQmxvYi5o
ICovLAogCQkJCTJFQUZBRjBEMTBFMkFGMkQwMDdFRDNENiAvKiBCbG9iLmlkbCAqLywKKwkJCQk4
OTE4MTQyQjExODdDNEI0MDBCRjY5OEEgLyogQmxvYkl0ZW0uY3BwICovLAorCQkJCTg5MTgxNDJD
MTE4N0M0QjQwMEJGNjk4QSAvKiBCbG9iSXRlbS5oICovLAogCQkJCTkzQzQ0MUVEMEY4MTNBMUEw
MEMxQTYzNCAvKiBDb2xsZWN0aW9uQ2FjaGUuY3BwICovLAogCQkJCTkzQzQ0MUVFMEY4MTNBMUEw
MEMxQTYzNCAvKiBDb2xsZWN0aW9uQ2FjaGUuaCAqLywKIAkJCQk5M0M0NDFGRjBGODEzQUUxMDBD
MUE2MzQgLyogQ29sbGVjdGlvblR5cGUuaCAqLywKQEAgLTE2NjY1LDYgKzE2NjcxLDcgQEAKIAkJ
CQlCQzVFQjkyMDBFODIwNDA4MDBCMjU5NjUgLyogQmluZGluZ1VSSS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTg5OTQzMjgwQjQyMzM4ODAwRDdDODAyIC8qIEJpdG1hcEltYWdlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkyRUFGQUYwRjEwRTJBRjJEMDA3RUQzRDYgLyogQmxvYi5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJODkxODE0MzExMTg3QzRCNDAwQkY2OThBIC8qIEJsb2JJdGVtLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk5M0YxOTlCRTA4MjQ1RTU5MDAxRTlBQkMgLyogQmxvY2tFeGNlcHRpb25zLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQzVFQjVFMTBFODFCRTg3MDBCMjU5NjUgLyogQm9yZGVyRGF0
YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1RUI1REIwRTgxQjdFQTAwQjI1OTY1IC8qIEJvcmRl
clZhbHVlLmggaW4gSGVhZGVycyAqLywKQEAgLTE3OTEzLDYgKzE3OTIwLDcgQEAKIAkJCQlGRTgw
RDdBQTBFOUMxRUQyMDAwRDZGNzUgLyogSlNDdXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJhY2suaCBp
biBIZWFkZXJzICovLAogCQkJCTFBMzQxN0M5MENFQ0ZGMjUwMDQ5Q0JERSAvKiBKU0N1c3RvbVZv
aWRDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTEwQjkzN0MwQjczQzAwQTAwM0VEODkw
IC8qIEpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlCNTlERDY5
OTExOTAyOUU1MDA3RTk2ODQgLyogSlNEYXRhYmFzZUNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywK
IAkJCQkxQUU4MkY5MDBDQUFGQTlEMDAyMjM3QUUgLyogSlNEYXRhYmFzZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkM3N0QxNkEwRkYxOUY1NjAwNzA4ODdCIC8qIEpTRGF0YUdyaWRDb2x1bW4uaCBp
biBIZWFkZXJzICovLAogCQkJCUJDNzdEMTZDMEZGMTlGNTYwMDcwODg3QiAvKiBKU0RhdGFHcmlk
Q29sdW1uTGlzdC5oIGluIEhlYWRlcnMgKi8sCkBAIC0xODA3Nyw3ICsxODA4NSwxMSBAQAogCQkJ
CUJDODI0MzI5MEQwQ0U4QTIwMDQ2MEM4RiAvKiBKU1NRTEVycm9yLmggaW4gSGVhZGVycyAqLywK
IAkJCQkxQUU4MkZFRDBDQUIwN0VFMDAyMjM3QUUgLyogSlNTUUxSZXN1bHRTZXQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTFBRkUxMTlBMENCRkZDQzQwMDMwMTdGQSAvKiBKU1NRTFJlc3VsdFNldFJv
d0xpc3QuaCBpbiBIZWFkZXJzICovLAorCQkJCUI1OURENkE1MTE5MDJBNjIwMDdFOTY4NCAvKiBK
U1NRTFN0YXRlbWVudENhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKKwkJCQlCNTlERDZBOTExOTAy
QTcxMDA3RTk2ODQgLyogSlNTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzgyNDMyQTBEMENFOEEyMDA0NjBDOEYgLyogSlNTUUxUcmFuc2FjdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJQjU5REQ2OUQxMTkwMkE0MjAwN0U5Njg0IC8qIEpTU1FMVHJhbnNh
Y3Rpb25DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCisJCQkJQjU5REQ2QTExMTkwMkE1MjAwN0U5
Njg0IC8qIEpTU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk1MUUwQkFFQjBEQTU1RDRBMDBBOUU0MTcgLyogSlNTdG9yYWdlRXZlbnQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRjUwMjZBMTAyQkE5NDMwMDY2RjM5QSAvKiBKU1N0eWxlTWVkaWEuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDRTAxMzlCMEMwQkVGMTgwMDQzODYwQSAvKiBKU1N0eWxlU2hlZXQu
aCBpbiBIZWFkZXJzICovLApAQCAtMTkxMjUsMTEgKzE5MTM3LDYgQEAKIAkJCQlFMUJFNTEyRTBD
RjZDNTEyMDAyRUE5NTkgLyogWFNMVFVuaWNvZGVTb3J0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5
N0RENEQ4NzBGREY0RDZFMDBFQ0Y5QTQgLyogWFNTQXVkaXRvci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQ0UxNzJFMDExMTM2RThDRTAwNjJBNTMzIC8qIFpvb21Nb2RlLmggaW4gSGVhZGVycyAqLywK
LQkJCQlCNTlERDY5OTExOTAyOUU1MDA3RTk2ODQgLyogSlNEYXRhYmFzZUNhbGxiYWNrLmggaW4g
SGVhZGVycyAqLywKLQkJCQlCNTlERDY5RDExOTAyQTQyMDA3RTk2ODQgLyogSlNTUUxUcmFuc2Fj
dGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKLQkJCQlCNTlERDZBMTExOTAyQTUyMDA3RTk2
ODQgLyogSlNTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAotCQkJ
CUI1OURENkE1MTE5MDJBNjIwMDdFOTY4NCAvKiBKU1NRTFN0YXRlbWVudENhbGxiYWNrLmggaW4g
SGVhZGVycyAqLywKLQkJCQlCNTlERDZBOTExOTAyQTcxMDA3RTk2ODQgLyogSlNTUUxTdGF0ZW1l
bnRFcnJvckNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQlCNTVENUFBNDExOTEzMUZDMDBC
Q0MzMTUgLyogSlNTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQjU4Q0VCNjkxMTkxMzYwNzAwMkE2NzkwIC8qIEpTRGF0YWJhc2VTeW5jLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCNThDRUI2RDExOTEzNjFDMDAyQTY3OTAgLyogSlNTUUxUcmFuc2FjdGlvblN5
bmMuaCBpbiBIZWFkZXJzICovLApAQCAtMTk0NjMsNiArMTk0NzAsNyBAQAogCQkJCUJDNUVCOTFG
MEU4MjA0MDgwMEIyNTk2NSAvKiBCaW5kaW5nVVJJLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4
OTk0MzI5MEI0MjMzODgwMEQ3QzgwMiAvKiBCaXRtYXBJbWFnZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkyRUFGQUYwRTEwRTJBRjJEMDA3RUQzRDYgLyogQmxvYi5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQk4OTE4MTQzMDExODdDNEI0MDBCRjY5OEEgLyogQmxvYkl0ZW0uY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJOTNGMTlBRTEwODI0NUU1OTAwMUU5QUJDIC8qIEJsb2NrRXhjZXB0aW9ucy5tbSBp
biBTb3VyY2VzICovLAogCQkJCUJDRUE0ODU0MDk3RDkzMDIwMDk0QzlFNCAvKiBicmVha19saW5l
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzMwOUREQTA5OUU2NDkyMDA1NkU1ODEgLyogQnJl
YWtCbG9ja3F1b3RlQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTIwMjExLDggKzIwMjE5
LDkgQEAKIAkJCQk1MUVDOTI2NTBDRTkwREQ0MDBGOTAzMDggLyogSlNDdXN0b21TUUxTdGF0ZW1l
bnRFcnJvckNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBMzQxN0NBMENFQ0ZGMjUw
MDQ5Q0JERSAvKiBKU0N1c3RvbVZvaWRDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlF
MTBCOTNDMzBCNzNDMjkxMDAzRUQ4OTAgLyogSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJMUFFODJGOEYwQ0FBRkE5RDAwMjIzN0FFIC8qIEpTRGF0YWJhc2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQjU5REQ2OUExMTkwMjlFNTAwN0U5Njg0IC8qIEpTRGF0
YWJhc2VDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0NFNThBQzEwNjFFOENGMDA4
RkIzNUEgLyogSlNEYXRhYmFzZUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkxQUU4MkY4
RjBDQUFGQTlEMDAyMjM3QUUgLyogSlNEYXRhYmFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
Qzc3RDE2OTBGRjE5RjU2MDA3MDg4N0IgLyogSlNEYXRhR3JpZENvbHVtbi5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCQzc3RDE2QjBGRjE5RjU2MDA3MDg4N0IgLyogSlNEYXRhR3JpZENvbHVtbkxp
c3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM3N0QxNTIwRkYxOUM3MzAwNzA4ODdCIC8qIEpT
RGF0YUdyaWRDb2x1bW5MaXN0Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjA0MjIsOCAr
MjA0MzEsMTIgQEAKIAkJCQkxQUU4MkZFQzBDQUIwN0VFMDAyMjM3QUUgLyogSlNTUUxSZXN1bHRT
ZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFGRTExOTkwQ0JGRkNDNDAwMzAxN0ZBIC8qIEpT
U1FMUmVzdWx0U2V0Um93TGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MURDRTgwMjBDQUM5
RjFDMDA0ODgzNTggLyogSlNTUUxSZXN1bHRTZXRSb3dMaXN0Q3VzdG9tLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCUI1OURENkE2MTE5MDJBNjIwMDdFOTY4NCAvKiBKU1NRTFN0YXRlbWVudENhbGxi
YWNrLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUI1OURENkFBMTE5MDJBNzEwMDdFOTY4NCAvKiBK
U1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE0Qzc2
MzgwQ0U5MjI1RTAwN0VGM0NEIC8qIEpTU1FMVHJhbnNhY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJQjU5REQ2OUUxMTkwMkE0MjAwN0U5Njg0IC8qIEpTU1FMVHJhbnNhY3Rpb25DYWxsYmFj
ay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUQyMzE2RTBDRDI2OUU3MDBDMUYxOTQgLyogSlNT
UUxUcmFuc2FjdGlvbkN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCNTlERDZBMjExOTAy
QTUyMDA3RTk2ODQgLyogSlNTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNTFFM0Y5RDYwREEwNUUxRDAwMjUwOTExIC8qIEpTU3RvcmFnZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk1MUQwQzUxNjBEQUE5MEI3MDAzQjM4MzEgLyogSlNTdG9yYWdlQ3Vz
dG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxRTBCQUVBMERBNTVENEEwMEE5RTQxNyAvKiBK
U1N0b3JhZ2VFdmVudC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTIxMzk0LDExICsyMTQwNyw2IEBA
CiAJCQkJOTNGMTlCMDUwODI0NUU1OTAwMUU5QUJDIC8qIFhTTFRQcm9jZXNzb3JMaWJ4c2x0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUUxQkU1MTJEMENGNkM1MTIwMDJFQTk1OSAvKiBYU0xUVW5p
Y29kZVNvcnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTdERDREODYwRkRGNEQ2RTAwRUNGOUE0
IC8qIFhTU0F1ZGl0b3IuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQjU5REQ2OUExMTkwMjlFNTAw
N0U5Njg0IC8qIEpTRGF0YWJhc2VDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlCNTlE
RDY5RTExOTAyQTQyMDA3RTk2ODQgLyogSlNTUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmNwcCBpbiBT
b3VyY2VzICovLAotCQkJCUI1OURENkEyMTE5MDJBNTIwMDdFOTY4NCAvKiBKU1NRTFRyYW5zYWN0
aW9uRXJyb3JDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlCNTlERDZBNjExOTAyQTYy
MDA3RTk2ODQgLyogSlNTUUxTdGF0ZW1lbnRDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKLQkJ
CQlCNTlERDZBQTExOTAyQTcxMDA3RTk2ODQgLyogSlNTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNr
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUI1NUQ1QUE1MTE5MTMxRkMwMEJDQzMxNSAvKiBKU1NR
TFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUI1NUQ1QUE4
MTE5MTMyNTAwMEJDQzMxNSAvKiBKU0RhdGFiYXNlU3luY0N1c3RvbS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlCNTVENUFBOTExOTEzMjUwMDBCQ0MzMTUgLyogSlNTUUxUcmFuc2FjdGlvblN5bmND
dXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvQmxvYi5j
cHAgYi9XZWJDb3JlL2h0bWwvQmxvYi5jcHAKaW5kZXggODNiYmRjMGM1MjY0ODQ1NDI2ODgxOTI2
MjE2ODRiNjI4MjAyNGJmNC4uZGY4OWZlMmEwOTRjZDI4MGU5MjQwZTlhY2JlYTdiNjdiNGMwYzFm
OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0Jsb2IuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9C
bG9iLmNwcApAQCAtMjksOTAgKzI5LDczIEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgor
CiAjaW5jbHVkZSAiQmxvYi5oIgogCisjaW5jbHVkZSAiQmxvYkl0ZW0uaCIKKyNpbmNsdWRlICJG
aWxlLmgiCiAjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LSNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLWNvbnN0IGludCBCbG9iOjp0b0VuZE9mRmlsZSA9IC0x
OwotY29uc3QgZG91YmxlIEJsb2I6OmRvTm90Q2hlY2tGaWxlQ2hhbmdlID0gMDsKLSNlbmRpZgot
Ci1CbG9iOjpCbG9iKGNvbnN0IFN0cmluZyYgcGF0aCkKLSAgICA6IG1fcGF0aChwYXRoKQotI2lm
IEVOQUJMRShCTE9CX1NMSUNFKQotICAgICwgbV9zdGFydCgwKQotICAgICwgbV9sZW5ndGgodG9F
bmRPZkZpbGUpCi0gICAgLCBtX3NuYXBzaG90Q2FwdHVyZWQoZmFsc2UpCi0gICAgLCBtX3NuYXBz
aG90U2l6ZSgwKQotICAgICwgbV9zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUoZG9Ob3RDaGVja0Zp
bGVDaGFuZ2UpCi0jZW5kaWYKK1Bhc3NSZWZQdHI8QmxvYj4gQmxvYjo6Y3JlYXRlKGNvbnN0IFN0
cmluZyYgcGF0aCkKIHsKKyAgICByZXR1cm4gYWRvcHRSZWYoc3RhdGljX2Nhc3Q8QmxvYio+KEZp
bGU6OmNyZWF0ZShwYXRoKS5nZXQoKSkpOwogfQogCi0jaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi1C
bG9iOjpCbG9iKGNvbnN0IFN0cmluZyYgcGF0aCwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcg
bGVuZ3RoLCBsb25nIGxvbmcgc25hcHNob3RTaXplLCBkb3VibGUgc25hcHNob3RNb2RpZmljYXRp
b25UaW1lKQotICAgIDogbV9wYXRoKHBhdGgpCi0gICAgLCBtX3N0YXJ0KHN0YXJ0KQotICAgICwg
bV9sZW5ndGgobGVuZ3RoKQotICAgICwgbV9zbmFwc2hvdENhcHR1cmVkKHRydWUpCi0gICAgLCBt
X3NuYXBzaG90U2l6ZShzbmFwc2hvdFNpemUpCi0gICAgLCBtX3NuYXBzaG90TW9kaWZpY2F0aW9u
VGltZShzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUpCitCbG9iOjpCbG9iKGNvbnN0IFN0cmluZyYg
dHlwZSkKKyAgICA6IG1fdHlwZSh0eXBlKQogewotICAgIEFTU0VSVChzdGFydCA+PSAwICYmIGxl
bmd0aCA+PSAwICYmIHN0YXJ0ICsgbGVuZ3RoIDw9IHNuYXBzaG90U2l6ZSAmJiBzbmFwc2hvdE1v
ZGlmaWNhdGlvblRpbWUpOwogfQotI2VuZGlmCiAKIHVuc2lnbmVkIGxvbmcgbG9uZyBCbG9iOjpz
aXplKCkgY29uc3QKIHsKICAgICAvLyBGSVhNRTogSmF2YVNjcmlwdCBjYW5ub3QgcmVwcmVzZW50
IHNpemVzIGFzIGxhcmdlIGFzIHVuc2lnbmVkIGxvbmcgbG9uZywgd2UgbmVlZCB0bwogICAgIC8v
IGNvbWUgdXAgd2l0aCBhbiBleGNlcHRpb24gdG8gdGhyb3cgaWYgZmlsZSBzaXplIGlzIG5vdCBy
ZXByZXNldGFibGUuCi0jaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgaWYgKG1fc25hcHNob3RD
YXB0dXJlZCkKLSAgICAgICAgcmV0dXJuIG1fbGVuZ3RoOwotI2VuZGlmCi0gICAgbG9uZyBsb25n
IHNpemU7Ci0gICAgaWYgKCFnZXRGaWxlU2l6ZShtX3BhdGgsIHNpemUpKQotICAgICAgICByZXR1
cm4gMDsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihzaXplKTsK
KyAgICB1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSA9IDA7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX2l0ZW1MaXN0LnNpemUoKTsgKytpKQorICAgICAgICBzaXplICs9IG1faXRlbUxpc3Rb
aV0tPnNpemUoKTsKKyAgICByZXR1cm4gc2l6ZTsKK30KKworY29uc3QgU3RyaW5nIEJsb2I6OnBh
dGgoKSBjb25zdAoreworICAgIEFTU0VSVChtX2l0ZW1MaXN0LnNpemUoKSA9PSAxICYmIG1faXRl
bUxpc3RbMF0tPmlzRmlsZSgpKTsKKyAgICByZXR1cm4gbV9pdGVtTGlzdFswXS0+ZmlsZVBhdGgo
KTsKK30KKwordm9pZCBCbG9iOjphcHBlbmRCbG9iSXRlbShQYXNzUmVmUHRyPEJsb2JJdGVtPiBp
dGVtKQoreworICAgIG1faXRlbUxpc3QuYXBwZW5kKGl0ZW0pOwogfQogCiAjaWYgRU5BQkxFKEJM
T0JfU0xJQ0UpCiBQYXNzUmVmUHRyPEJsb2I+IEJsb2I6OnNsaWNlKGxvbmcgbG9uZyBzdGFydCwg
bG9uZyBsb25nIGxlbmd0aCkgY29uc3QKIHsKLSAgICAvLyBXaGVuIHdlIHNsaWNlIGEgZmlsZSBm
b3IgdGhlIGZpcnN0IHRpbWUsIHdlIG9idGFpbiBhIHNuYXBzaG90IG9mIHRoZSBmaWxlIGJ5IGNh
cHR1cmluZyBpdHMgY3VycmVudCBzaXplIGFuZCBtb2RpZmljYXRpb24gdGltZS4KLSAgICAvLyBU
aGUgbW9kaWZpY2F0aW9uIHRpbWUgd2lsbCBiZSB1c2VkIHRvIHZlcmlmeSBpZiB0aGUgZmlsZSBo
YXMgYmVlbiBjaGFuZ2VkIG9yIG5vdCwgd2hlbiB0aGUgdW5kZXJseWluZyBkYXRhIGFyZSBhY2Nl
c3NlZC4KLSAgICBsb25nIGxvbmcgc25hcHNob3RTaXplOwotICAgIGRvdWJsZSBzbmFwc2hvdE1v
ZGlmaWNhdGlvblRpbWU7Ci0gICAgaWYgKG1fc25hcHNob3RDYXB0dXJlZCkgewotICAgICAgICBz
bmFwc2hvdFNpemUgPSBtX3NuYXBzaG90U2l6ZTsKLSAgICAgICAgc25hcHNob3RNb2RpZmljYXRp
b25UaW1lID0gbV9zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWU7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgLy8gSWYgd2UgZmFpbCB0byByZXRyaWV2ZSB0aGUgc2l6ZSBvciBtb2RpZmljYXRpb24gdGlt
ZSwgcHJvYmFibHkgZHVlIHRvIHRoYXQgdGhlIGZpbGUgaGFzIGJlZW4gZGVsZXRlZCwgYW4gZW1w
dHkgYmxvYiB3aWxsIGJlIHJldHVybmVkLgotICAgICAgICB0aW1lX3QgbW9kaWZpY2F0aW9uVGlt
ZTsKLSAgICAgICAgaWYgKCFnZXRGaWxlU2l6ZShtX3BhdGgsIHNuYXBzaG90U2l6ZSkgfHwgIWdl
dEZpbGVNb2RpZmljYXRpb25UaW1lKG1fcGF0aCwgbW9kaWZpY2F0aW9uVGltZSkpIHsKLSAgICAg
ICAgICAgIHNuYXBzaG90U2l6ZSA9IDA7Ci0gICAgICAgICAgICBzbmFwc2hvdE1vZGlmaWNhdGlv
blRpbWUgPSAwOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHNuYXBzaG90TW9kaWZpY2F0
aW9uVGltZSA9IG1vZGlmaWNhdGlvblRpbWU7Ci0gICAgfQotCiAgICAgLy8gQ2xhbXAgdGhlIHJh
bmdlIGlmIGl0IGV4Y2VlZHMgdGhlIHNpemUgbGltaXQuCi0gICAgaWYgKHN0YXJ0IDwgMCkKKyAg
ICB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxTaXplID0gc2l6ZSgpOworICAgIGlmIChzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KHN0YXJ0KSA+IHRvdGFsU2l6ZSkgewogICAgICAgICBz
dGFydCA9IDA7Ci0gICAgaWYgKGxlbmd0aCA8IDApCiAgICAgICAgIGxlbmd0aCA9IDA7CisgICAg
fSBlbHNlIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KHN0YXJ0ICsgbGVuZ3Ro
KSA+IHRvdGFsU2l6ZSkKKyAgICAgICAgbGVuZ3RoID0gdG90YWxTaXplIC0gc3RhcnQ7CiAKLSAg
ICBpZiAoc3RhcnQgPiBzbmFwc2hvdFNpemUpIHsKKyAgICBpZiAoc3RhcnQgPCAwKQogICAgICAg
ICBzdGFydCA9IDA7CisgICAgaWYgKGxlbmd0aCA8IDApCiAgICAgICAgIGxlbmd0aCA9IDA7Ci0g
ICAgfSBlbHNlIGlmIChzdGFydCArIGxlbmd0aCA+IHNuYXBzaG90U2l6ZSkKLSAgICAgICAgbGVu
Z3RoID0gc25hcHNob3RTaXplIC0gc3RhcnQ7CiAKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJs
b2IobV9wYXRoLCBtX3N0YXJ0ICsgc3RhcnQsIGxlbmd0aCwgc25hcHNob3RTaXplLCBzbmFwc2hv
dE1vZGlmaWNhdGlvblRpbWUpKTsKKyAgICBzaXplX3QgaSA9IDA7CisgICAgUmVmUHRyPEJsb2I+
IGJsb2IgPSBCbG9iOjpjcmVhdGUoKTsKKyAgICBmb3IgKDsgaSA8IG1faXRlbUxpc3Quc2l6ZSgp
ICYmIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oc3RhcnQpID49IG1faXRlbUxpc3Rb
aV0tPnNpemUoKTsgKytpKQorICAgICAgICBzdGFydCAtPSBtX2l0ZW1MaXN0W2ldLT5zaXplKCk7
CisgICAgZm9yICg7IGxlbmd0aCA+IDAgJiYgaSA8IG1faXRlbUxpc3Quc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgYmxvYi0+bV9pdGVtTGlzdC5hcHBlbmQoQmxvYkl0ZW06OmNyZWF0ZVJhbmdlSXRl
bShtX2l0ZW1MaXN0W2ldLCBzdGFydCwgbGVuZ3RoKSk7CisgICAgICAgIGxlbmd0aCAtPSBibG9i
LT5tX2l0ZW1MaXN0Lmxhc3QoKS0+c2l6ZSgpOworICAgICAgICBzdGFydCA9IDA7CisgICAgfQor
ICAgIHJldHVybiBibG9iLnJlbGVhc2UoKTsKIH0KLSNlbmRpZgorI2VuZGlmIC8vIEVOQUJMRShC
TE9CX1NMSUNFKQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2h0bWwvQmxvYi5oIGIvV2ViQ29yZS9odG1sL0Jsb2IuaAppbmRleCBlOGI1ZjNmZGYwNjlhMmI0
ODc2ZWQxNmFiODFiMjJmMGZmMDM4OTcwLi5kMzJlYmUzNDJiZjc5N2E1ODcwZGVlY2M1MzRiMmU0
YmU5NjRkYTBjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvQmxvYi5oCisrKyBiL1dlYkNvcmUv
aHRtbC9CbG9iLmgKQEAgLTMxLDkgKzMxLDkgQEAKICNpZm5kZWYgQmxvYl9oCiAjZGVmaW5lIEJs
b2JfaAogCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkJsb2JJdGVtLmgi
CiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVk
ZSAiVGV4dEVuY29kaW5nLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgogCkBAIC00MSw1OSArNDEsMzQgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBCbG9iIDogcHVibGljIFJlZkNvdW50ZWQ8QmxvYj4gewogcHVibGljOgot
I2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgIHN0YXRpYyBjb25zdCBpbnQgdG9FbmRPZkZpbGU7
Ci0gICAgc3RhdGljIGNvbnN0IGRvdWJsZSBkb05vdENoZWNrRmlsZUNoYW5nZTsKLSNlbmRpZgot
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8QmxvYj4gY3JlYXRlKGNvbnN0IFN0cmluZyYgcGF0aCkK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCbG9iPiBjcmVhdGUoKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBCbG9iKHBhdGgpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBCbG9iKFN0cmluZygpKSk7CiAgICAgfQogCisgICAgLy8gQSBzcGVjaWFsIGNvbnN0cnVjdG9y
IGZvciBGaWxlIGJsb2IuCisgICAgc3RhdGljIFBhc3NSZWZQdHI8QmxvYj4gY3JlYXRlKGNvbnN0
IFN0cmluZyYgcGF0aCk7CisKICAgICB2aXJ0dWFsIH5CbG9iKCkgeyB9CiAKKyAgICB1bnNpZ25l
ZCBsb25nIGxvbmcgc2l6ZSgpIGNvbnN0OworICAgIGNvbnN0IFN0cmluZyBwYXRoKCkgY29uc3Q7
CisgICAgY29uc3QgU3RyaW5nJiB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CiAgICAg
dmlydHVhbCBib29sIGlzRmlsZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKLSNpZiBFTkFC
TEUoQkxPQl9TTElDRSkKLSAgICBQYXNzUmVmUHRyPEJsb2I+IHNsaWNlKGxvbmcgbG9uZyBzdGFy
dCwgbG9uZyBsb25nIGxlbmd0aCkgY29uc3Q7Ci0jZW5kaWYKKyAgICB0eXBlZGVmIFZlY3RvcjxS
ZWZQdHI8QmxvYkl0ZW0+ID4gSXRlbUxpc3Q7CisgICAgdm9pZCBhcHBlbmRCbG9iSXRlbShQYXNz
UmVmUHRyPEJsb2JJdGVtPiBpdGVtKTsKKyAgICBjb25zdCBJdGVtTGlzdCYgaXRlbXMoKSBjb25z
dCB7IHJldHVybiBtX2l0ZW1MaXN0OyB9CiAKLSAgICBjb25zdCBTdHJpbmcmIHBhdGgoKSBjb25z
dCB7IHJldHVybiBtX3BhdGg7IH0KLSAgICB1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSgpIGNvbnN0
OwogI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgIGxvbmcgbG9uZyBzdGFydCgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RhcnQ7IH0KLSAgICBsb25nIGxvbmcgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4g
bV9sZW5ndGg7IH0KLSAgICBkb3VibGUgbW9kaWZpY2F0aW9uVGltZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc25hcHNob3RNb2RpZmljYXRpb25UaW1lOyB9CisgICAgUGFzc1JlZlB0cjxCbG9iPiBzbGlj
ZShsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgpIGNvbnN0OwogI2VuZGlmCiAKIHBy
b3RlY3RlZDoKLSAgICBCbG9iKGNvbnN0IFN0cmluZyYgcGF0aCk7CisgICAgQmxvYihjb25zdCBT
dHJpbmcmIHR5cGUpOwogCi1wcml2YXRlOgotI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgIEJs
b2IoY29uc3QgU3RyaW5nJiBwYXRoLCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgs
IGxvbmcgbG9uZyBzbmFwc2hvdFNpemUsIGRvdWJsZSBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUp
OwotI2VuZGlmCi0KLSAgICAvLyBUaGUgdW5kZXJseWluZyBwYXRoIG9mIHRoZSBmaWxlLWJhc2Vk
IGJsb2IuIAotICAgIFN0cmluZyBtX3BhdGg7Ci0KLSNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAg
ICAvLyBUaGUgc3RhcnRpbmcgcG9zaXRpb24gb2YgdGhlIGZpbGUtYmFzZWQgYmxvYi4KLSAgICBs
b25nIGxvbmcgbV9zdGFydDsKLQotICAgIC8vIFRoZSBsZW5ndGggb2YgdGhlIGZpbGUtYmFzZWQg
YmxvYi4gVGhlIHZhbHVlIG9mIC0xIG1lYW5zIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUuCi0gICAg
bG9uZyBsb25nIG1fbGVuZ3RoOwotCi0gICAgLy8gQSBmbGFnIHRvIHRlbGwgaWYgYSBzbmFwc2hv
dCBoYXMgYmVlbiBjYXB0dXJlZC4KLSAgICBib29sIG1fc25hcHNob3RDYXB0dXJlZDsKLQotICAg
IC8vIFRoZSBzaXplIG9mIHRoZSBmaWxlIHdoZW4gYSBzbmFwc2hvdCBpcyBjYXB0dXJlZC4gSXQg
Y2FuIGJlIDAgaWYgdGhlIGZpbGUgaXMgZW1wdHkuCi0gICAgbG9uZyBsb25nIG1fc25hcHNob3RT
aXplOwotCi0gICAgLy8gVGhlIGxhc3QgbW9kaWZpY2F0aW9uIHRpbWUgb2YgdGhlIGZpbGUgd2hl
biBhIHNuYXBzaG90IGlzIGNhcHR1cmVkLiBUaGUgdmFsdWUgb2YgMCBhbHNvIG1lYW5zIHRoYXQg
dGhlIHNuYXBzaG90IGlzIG5vdCBjYXB0dXJlZC4KLSAgICBkb3VibGUgbV9zbmFwc2hvdE1vZGlm
aWNhdGlvblRpbWU7Ci0jZW5kaWYKKyAgICBWZWN0b3I8UmVmUHRyPEJsb2JJdGVtPiA+IG1faXRl
bUxpc3Q7CisgICAgY29uc3QgU3RyaW5nIG1fdHlwZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9CbG9iSXRlbS5jcHAgYi9XZWJDb3JlL2h0
bWwvQmxvYkl0ZW0uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEyNDQ1M2I3MzA5ZTJiMDM1MTE3YThmNjIxMDQx
NWFiNWM3N2Y2MmIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2h0bWwvQmxvYkl0ZW0uY3Bw
CkBAIC0wLDAgKzEsNDIzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiQmxvYkl0
ZW0uaCIKKworI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKKyNpbmNsdWRlICJVVUlELmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworI2lmIEVOQUJMRShCTE9CX1NMSUNFKQorY29uc3QgZG91Ymxl
IEJsb2JJdGVtOjpkb05vdENoZWNrRmlsZUNoYW5nZSA9IDA7CisjZW5kaWYKKworYm9vbCBCbG9i
SXRlbTo6ZXF1YWxzKGNvbnN0IEJsb2JJdGVtKiBiKSBjb25zdAoreworICAgIGlmIChpc0ZpbGUo
KSAhPSBiLT5pc0ZpbGUoKSB8fCBpc1JhbmdlKCkgIT0gYi0+aXNSYW5nZSgpIHx8IGlzVmFsaWQo
KSAhPSBiLT5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoc2l6ZSgp
ICE9IGItPnNpemUoKSB8fCBkYXRhKCkgIT0gYi0+ZGF0YSgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgaWYgKGZpbGVPclVuaXF1ZU5hbWUoKSAhPSBiLT5maWxlT3JVbmlxdWVOYW1lKCkg
fHwgZmlsZVBhdGgoKSAhPSBiLT5maWxlUGF0aCgpIHx8IGZpbGVTdGFydCgpICE9IGItPmZpbGVT
dGFydCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2No
YXIqIEJsb2JJdGVtOjpyZWxlYXNlQnVmZmVyKCkgY29uc3QKK3sKKyAgICBWZWN0b3I8Y2hhcj4g
djsKKyAgICB2LmFwcGVuZChkYXRhKCksIHN0YXRpY19jYXN0PHNpemVfdD4oc2l6ZSgpKSk7Cisg
ICAgcmV0dXJuIHYucmVsZWFzZUJ1ZmZlcigpOworfQorCisvLyBGaWxlQmxvYkl0ZW0gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorCitjbGFzcyBGaWxlQmxvYkl0ZW06IHB1YmxpYyBCbG9iSXRlbSB7CitwdWJsaWM6CisgICAg
RmlsZUJsb2JJdGVtKGNvbnN0IFN0cmluZyYgcGF0aCk7CisgICAgdmlydHVhbCB1bnNpZ25lZCBs
b25nIGxvbmcgc2l6ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpc0ZpbGUoKSBjb25zdCB7
IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBjb25zdCBTdHJpbmcgZmlsZU9yVW5pcXVlTmFt
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsZU5hbWU7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IFN0cmlu
ZyBmaWxlUGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aDsgfQorICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxCbG9iSXRlbT4gZGVlcENvcHkoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBTdHJpbmcg
bV9wYXRoOworICAgIFN0cmluZyBtX2ZpbGVOYW1lOworfTsKKworRmlsZUJsb2JJdGVtOjpGaWxl
QmxvYkl0ZW0oY29uc3QgU3RyaW5nJiBwYXRoKQorICAgIDogbV9wYXRoKHBhdGgpCisgICAgLCBt
X2ZpbGVOYW1lKHBhdGhHZXRGaWxlTmFtZShtX3BhdGgpKQoreworfQorCit1bnNpZ25lZCBsb25n
IGxvbmcgRmlsZUJsb2JJdGVtOjpzaXplKCkgY29uc3QKK3sKKyAgICBsb25nIGxvbmcgc2l6ZTsK
KyAgICBpZiAoIWdldEZpbGVTaXplKG1fcGF0aCwgc2l6ZSkpCisgICAgICAgIHJldHVybiAwOwor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KHNpemUpOworfQorCitQ
YXNzUmVmUHRyPEJsb2JJdGVtPiBGaWxlQmxvYkl0ZW06OmRlZXBDb3B5KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gQmxvYkl0ZW06OmNyZWF0ZUZpbGVJdGVtKG1fcGF0aCk7Cit9CisKKy8vIFN0cmlu
Z0Jsb2JJdGVtIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIFN0cmluZ0Jsb2JJdGVtOiBwdWJsaWMgQmxvYkl0ZW0g
eworcHVibGljOgorICAgIFN0cmluZ0Jsb2JJdGVtKGNvbnN0IFN0cmluZyYgdGV4dCwgRW5kaW5n
VHlwZSwgVGV4dEVuY29kaW5nKTsKKyAgICBTdHJpbmdCbG9iSXRlbShjb25zdCBDU3RyaW5nJiB0
ZXh0KTsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplKCkgY29uc3Q7CisgICAg
dmlydHVhbCBjb25zdCBjaGFyKiBkYXRhKCkgY29uc3Q7CisgICAgdmlydHVhbCBjb25zdCBDU3Ry
aW5nIGNzdHIoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8QmxvYkl0ZW0+IGRlZXBD
b3B5KCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgdm9pZCBlbnN1cmVGaW5hbENTdHJpbmcoKSBj
b25zdDsKKyAgICBjb25zdCBTdHJpbmcgbV90ZXh0OworICAgIG11dGFibGUgQ1N0cmluZyBtX2Rh
dGE7CisgICAgY29uc3QgRW5kaW5nVHlwZSBtX2VuZGluZzsKKyAgICBjb25zdCBUZXh0RW5jb2Rp
bmcgbV9lbmNvZGluZzsKK307CisKK1N0cmluZ0Jsb2JJdGVtOjpTdHJpbmdCbG9iSXRlbShjb25z
dCBTdHJpbmcmIHRleHQsIEVuZGluZ1R5cGUgZW5kaW5nLCBUZXh0RW5jb2RpbmcgZW5jb2Rpbmcp
CisgICAgOiBtX3RleHQodGV4dCkKKyAgICAsIG1fZW5kaW5nKGVuZGluZykKKyAgICAsIG1fZW5j
b2RpbmcoZW5jb2RpbmcpCit7Cit9CisKK1N0cmluZ0Jsb2JJdGVtOjpTdHJpbmdCbG9iSXRlbShj
b25zdCBDU3RyaW5nJiB0ZXh0KQorICAgIDogbV9kYXRhKHRleHQpCisgICAgLCBtX2VuZGluZyhF
bmRpbmdUcmFuc3BhcmVudCkKK3sKK30KKwordm9pZCBTdHJpbmdCbG9iSXRlbTo6ZW5zdXJlRmlu
YWxDU3RyaW5nKCkgY29uc3QKK3sKKyAgICBpZiAobV90ZXh0LmlzRW1wdHkoKSB8fCAhbV9kYXRh
LmlzTnVsbCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBDU3RyaW5nIGZyb20gPSBtX2VuY29k
aW5nLmVuY29kZShtX3RleHQuY2hhcmFjdGVycygpLCBtX3RleHQubGVuZ3RoKCksIEVudGl0aWVz
Rm9yVW5lbmNvZGFibGVzKTsKKyAgICBtX2RhdGEgPSBmcm9tOworCisgICAgaWYgKG1fZW5kaW5n
ID09IEVuZGluZ1RyYW5zcGFyZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBjaGFy
KiBlbmRpbmdDaGFycyA9IChtX2VuZGluZyA9PSBFbmRpbmdDUkxGKSA/ICJcclxuIgorICAgICAg
ICA6IChtX2VuZGluZyA9PSBFbmRpbmdDUikgPyAiXHIiIDogIlxuIjsKKworICAgIGludCBlbmRp
bmdMZW5ndGggPSAobV9lbmRpbmcgPT0gRW5kaW5nQ1JMRikgPyAyIDogMTsKKyAgICBpbnQgbmVl
ZEZpeCA9IDA7CisKKyAgICAvLyBDYWxjdWxhdGUgdGhlIGZpbmFsIGxlbmd0aC4KKyAgICBpbnQg
Y2FsY3VsYXRlZExlbmd0aCA9IGZyb20ubGVuZ3RoKCk7CisgICAgY29uc3QgY2hhciogcCA9IGZy
b20uZGF0YSgpOworICAgIHdoaWxlIChjaGFyIGMgPSAqcCsrKSB7CisgICAgICAgIGlmIChjID09
ICdccicpIHsKKyAgICAgICAgICAgIC8vIFNhZmUgdG8gbG9vayBhaGVhZCBiZWNhdXNlIG9mIHRy
YWlsaW5nICdcMCcuCisgICAgICAgICAgICBpZiAoKnAgPT0gJ1xuJyAmJiBtX2VuZGluZyAhPSBF
bmRpbmdDUkxGKSB7CisgICAgICAgICAgICAgICAgY2FsY3VsYXRlZExlbmd0aCArPSAoZW5kaW5n
TGVuZ3RoIC0gMik7CisgICAgICAgICAgICAgICAgKytuZWVkRml4OworICAgICAgICAgICAgfSBl
bHNlIGlmIChtX2VuZGluZyAhPSBFbmRpbmdDUikgeworICAgICAgICAgICAgICAgIGNhbGN1bGF0
ZWRMZW5ndGggKz0gKGVuZGluZ0xlbmd0aCAtIDEpOworICAgICAgICAgICAgICAgICsrbmVlZEZp
eDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChjID09ICdcbicgJiYgbV9lbmRp
bmcgIT0gRW5kaW5nTEYpIHsKKyAgICAgICAgICAgIGNhbGN1bGF0ZWRMZW5ndGggKz0gKGVuZGlu
Z0xlbmd0aCAtIDEpOworICAgICAgICAgICAgKytuZWVkRml4OworICAgICAgICB9CisgICAgfQor
CisgICAgaWYgKCFuZWVkRml4KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBDb252ZXJ0IHRo
ZSBlbmRpbmdzIGFuZCBjcmVhdGUgYSBkYXRhIGJ1ZmZlci4KKyAgICBwID0gZnJvbS5kYXRhKCk7
CisgICAgY2hhciogcTsKKyAgICBtX2RhdGEgPSBDU3RyaW5nOjpuZXdVbmluaXRpYWxpemVkKGNh
bGN1bGF0ZWRMZW5ndGgsIHEpOworICAgIHdoaWxlIChjaGFyIGMgPSAqcCsrKSB7CisgICAgICAg
IGlmIChjID09ICdccicpIHsKKyAgICAgICAgICAgIGlmICgqcCA9PSAnXG4nICYmIG1fZW5kaW5n
ICE9IEVuZGluZ0NSTEYpIHsKKyAgICAgICAgICAgICAgICBtZW1jcHkocSwgZW5kaW5nQ2hhcnMs
IGVuZGluZ0xlbmd0aCk7CisgICAgICAgICAgICAgICAgcSArPSBlbmRpbmdMZW5ndGg7CisgICAg
ICAgICAgICB9IGVsc2UgaWYgKCpwICE9ICdcbicgJiYgbV9lbmRpbmcgIT0gRW5kaW5nQ1IpIHsK
KyAgICAgICAgICAgICAgICBtZW1jcHkocSwgZW5kaW5nQ2hhcnMsIGVuZGluZ0xlbmd0aCk7Cisg
ICAgICAgICAgICAgICAgcSArPSBlbmRpbmdMZW5ndGg7CisgICAgICAgICAgICB9CisgICAgICAg
IH0gZWxzZSBpZiAoYyA9PSAnXG4nICYmIG1fZW5kaW5nICE9IEVuZGluZ0xGKSB7CisgICAgICAg
ICAgICBtZW1jcHkocSwgZW5kaW5nQ2hhcnMsIGVuZGluZ0xlbmd0aCk7CisgICAgICAgICAgICBx
ICs9IGVuZGluZ0xlbmd0aDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIExlYXZl
IG90aGVyIGNoYXJhY3RlcnMgYWxvbmUuCisgICAgICAgICAgICAqcSsrID0gYzsKKyAgICAgICAg
fQorICAgIH0KK30KKwordW5zaWduZWQgbG9uZyBsb25nIFN0cmluZ0Jsb2JJdGVtOjpzaXplKCkg
Y29uc3QKK3sKKyAgICBlbnN1cmVGaW5hbENTdHJpbmcoKTsKKyAgICByZXR1cm4gbV9kYXRhLmxl
bmd0aCgpOworfQorCitjb25zdCBjaGFyKiBTdHJpbmdCbG9iSXRlbTo6ZGF0YSgpIGNvbnN0Cit7
CisgICAgZW5zdXJlRmluYWxDU3RyaW5nKCk7CisgICAgcmV0dXJuIG1fZGF0YS5kYXRhKCk7Cit9
CisKK2NvbnN0IENTdHJpbmcgU3RyaW5nQmxvYkl0ZW06OmNzdHIoKSBjb25zdAoreworICAgIGVu
c3VyZUZpbmFsQ1N0cmluZygpOworICAgIHJldHVybiBtX2RhdGE7Cit9CisKK1Bhc3NSZWZQdHI8
QmxvYkl0ZW0+IFN0cmluZ0Jsb2JJdGVtOjpkZWVwQ29weSgpIGNvbnN0Cit7CisgICAgZW5zdXJl
RmluYWxDU3RyaW5nKCk7CisgICAgcmV0dXJuIEJsb2JJdGVtOjpjcmVhdGVTdHJpbmdJdGVtKENT
dHJpbmcobV9kYXRhLmRhdGEoKSwgbV9kYXRhLmxlbmd0aCgpKSk7Cit9CisKKy8vIEJ5dGVzQXJy
YXlCbG9iSXRlbSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisKK2NsYXNzIEJ5dGVzQXJyYXlCbG9iSXRlbTogcHVibGljIEJsb2JJdGVt
IHsKK3B1YmxpYzoKKyAgICBCeXRlc0FycmF5QmxvYkl0ZW0oY29uc3QgY2hhciogZGF0YSwgc2l6
ZV90IHNpemUpOworICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBsb25nIHNpemUoKSBjb25zdCB7
IHJldHVybiBtX2J5dGVzQXJyYXkuc2l6ZSgpOyB9CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiBk
YXRhKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlc0FycmF5LmRhdGEoKTsgfQorICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxCbG9iSXRlbT4gZGVlcENvcHkoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBW
ZWN0b3I8Y2hhcj4gbV9ieXRlc0FycmF5OworfTsKKworQnl0ZXNBcnJheUJsb2JJdGVtOjpCeXRl
c0FycmF5QmxvYkl0ZW0oY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IHNpemUpCit7CisgICAgbV9i
eXRlc0FycmF5LmFwcGVuZChkYXRhLCBzaXplKTsKK30KKworUGFzc1JlZlB0cjxCbG9iSXRlbT4g
Qnl0ZXNBcnJheUJsb2JJdGVtOjpkZWVwQ29weSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEJsb2JJ
dGVtOjpjcmVhdGVCeXRlQXJyYXlJdGVtKG1fYnl0ZXNBcnJheS5kYXRhKCksIG1fYnl0ZXNBcnJh
eS5zaXplKCkpOworfQorCisjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCisKKy8vIFJhbmdlQmxvYkl0
ZW0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisKK2NsYXNzIFJhbmdlQmxvYkl0ZW0gOiBwdWJsaWMgQmxvYkl0ZW0geworcHVi
bGljOgorICAgIFJhbmdlQmxvYkl0ZW0oUGFzc1JlZlB0cjxCbG9iSXRlbT4gaXRlbSwgbG9uZyBs
b25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoKTsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcg
bG9uZyBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KKyAgICB2aXJ0dWFsIGJvb2wg
aXNSYW5nZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIq
IGRhdGEoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZXF1YWxzKGNvbnN0IEJsb2JJdGVtKikg
Y29uc3Q7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEJsb2JJdGVtPiBkZWVwQ29weSgpIGNvbnN0
OworCitwcml2YXRlOgorICAgIFJlZlB0cjxCbG9iSXRlbT4gbV9pdGVtOworICAgIGxvbmcgbG9u
ZyBtX3N0YXJ0OworICAgIGxvbmcgbG9uZyBtX2xlbmd0aDsKK307CisKK1JhbmdlQmxvYkl0ZW06
OlJhbmdlQmxvYkl0ZW0oUGFzc1JlZlB0cjxCbG9iSXRlbT4gaXRlbSwgbG9uZyBsb25nIHN0YXJ0
LCBsb25nIGxvbmcgbGVuZ3RoKQorICAgIDogbV9pdGVtKGl0ZW0pCisgICAgLCBtX3N0YXJ0KHN0
YXJ0KQorICAgICwgbV9sZW5ndGgobGVuZ3RoKQoreworICAgIEFTU0VSVCghbV9pdGVtLT5pc0Zp
bGUoKSk7CisgICAgaWYgKG1faXRlbS0+aXNSYW5nZSgpKSB7CisgICAgICAgIFJhbmdlQmxvYkl0
ZW0qIHIgPSBzdGF0aWNfY2FzdDxSYW5nZUJsb2JJdGVtKj4obV9pdGVtLmdldCgpKTsKKyAgICAg
ICAgbV9zdGFydCArPSByLT5tX3N0YXJ0OworICAgICAgICBtX2l0ZW0gPSByLT5tX2l0ZW07Cisg
ICAgICAgIEFTU0VSVCghbV9pdGVtLT5pc1JhbmdlKCkpOworICAgICAgICBBU1NFUlQoc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihtX3N0YXJ0ICsgbV9sZW5ndGgpIDw9IG1faXRlbS0+
c2l6ZSgpKTsKKyAgICB9Cit9CisKK2NvbnN0IGNoYXIqIFJhbmdlQmxvYkl0ZW06OmRhdGEoKSBj
b25zdAoreworICAgIHJldHVybiBtX2l0ZW0tPmRhdGEoKSArIG1fc3RhcnQ7Cit9CisKK1Bhc3NS
ZWZQdHI8QmxvYkl0ZW0+IFJhbmdlQmxvYkl0ZW06OmRlZXBDb3B5KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gQmxvYkl0ZW06OmNyZWF0ZVJhbmdlSXRlbShtX2l0ZW0tPmRlZXBDb3B5KCksIG1fc3Rh
cnQsIG1fbGVuZ3RoKTsKK30KKworYm9vbCBSYW5nZUJsb2JJdGVtOjplcXVhbHMoY29uc3QgQmxv
Ykl0ZW0qIGIpIGNvbnN0Cit7CisgICAgaWYgKCFCbG9iSXRlbTo6ZXF1YWxzKGIpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgQVNTRVJUKGItPmlzUmFuZ2UoKSk7CisgICAgY29uc3QgUmFu
Z2VCbG9iSXRlbSogciA9IHN0YXRpY19jYXN0PGNvbnN0IFJhbmdlQmxvYkl0ZW0qPihiKTsKKyAg
ICBpZiAobV9zdGFydCAhPSByLT5tX3N0YXJ0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
aWYgKCFtX2l0ZW0tPmVxdWFscyhyLT5tX2l0ZW0uZ2V0KCkpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vIEZpbGVSYW5nZUJsb2JJdGVtIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3N0
YXRpYyBjb25zdCBkb3VibGUgaW52YWxpZE1vZGlmaWNhdGlvblRpbWUgPSAtMTsKKworYm9vbCBp
c1ZhbGlkU25hcHNob3RNb2RpZmljYXRpb25UaW1lKGRvdWJsZSB0aW1lKQoreworICAgIHJldHVy
biAhKHRpbWUgPCAwKTsKK30KKworZG91YmxlIGdldEZpbGVTbmFwc2hvdE1vZGlmaWNhdGlvblRp
bWUoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIHRpbWVfdCBtb2RpZmljYXRpb25UaW1lOwor
ICAgIGlmIChnZXRGaWxlTW9kaWZpY2F0aW9uVGltZShwYXRoLCBtb2RpZmljYXRpb25UaW1lKSkK
KyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4obW9kaWZpY2F0aW9uVGltZSk7Cisg
ICAgcmV0dXJuIGludmFsaWRNb2RpZmljYXRpb25UaW1lOworfQorCitjbGFzcyBGaWxlUmFuZ2VC
bG9iSXRlbSA6IHB1YmxpYyBCbG9iSXRlbSB7CitwdWJsaWM6CisgICAgRmlsZVJhbmdlQmxvYkl0
ZW0oY29uc3QgU3RyaW5nJiBwYXRoLCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgs
IGRvdWJsZSBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUpOworCisgICAgdmlydHVhbCB1bnNpZ25l
ZCBsb25nIGxvbmcgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9CisKKyAgICB2aXJ0
dWFsIGJvb2wgaXNSYW5nZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJv
b2wgaXNWYWxpZCgpIGNvbnN0OworCisgICAgdmlydHVhbCBjb25zdCBTdHJpbmcgZmlsZU9yVW5p
cXVlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fdW5pcU5hbWU7IH0KKyAgICB2aXJ0dWFsIGNvbnN0
IFN0cmluZyBmaWxlUGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aDsgfQorICAgIHZpcnR1YWwg
bG9uZyBsb25nIGZpbGVTdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsZVN0YXJ0OyB9CisgICAg
dmlydHVhbCBkb3VibGUgZmlsZVNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc25hcHNob3RNb2RpZmljYXRpb25UaW1lOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgZXF1
YWxzKGNvbnN0IEJsb2JJdGVtKikgY29uc3Q7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEJsb2JJ
dGVtPiBkZWVwQ29weSgpIGNvbnN0OworCitwcml2YXRlOgorICAgIFN0cmluZyBtX3BhdGg7Cisg
ICAgbG9uZyBsb25nIG1fZmlsZVN0YXJ0OworICAgIGxvbmcgbG9uZyBtX2xlbmd0aDsKKyAgICBT
dHJpbmcgbV91bmlxTmFtZTsKKworICAgIGRvdWJsZSBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGlt
ZTsKK307CisKK0ZpbGVSYW5nZUJsb2JJdGVtOjpGaWxlUmFuZ2VCbG9iSXRlbShjb25zdCBTdHJp
bmcmIHBhdGgsIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCwgZG91YmxlIG1vZGlm
aWNhdGlvblRpbWUpCisgICAgOiBtX3BhdGgocGF0aCkKKyAgICAsIG1fZmlsZVN0YXJ0KHN0YXJ0
KQorICAgICwgbV9sZW5ndGgobGVuZ3RoKQorICAgICwgbV9zbmFwc2hvdE1vZGlmaWNhdGlvblRp
bWUobW9kaWZpY2F0aW9uVGltZSkKK3sKKyAgICBtX3VuaXFOYW1lID0gIkJsb2IiICsgY3JlYXRl
Q2Fub25pY2FsVVVJRFN0cmluZygpOworICAgIG1fdW5pcU5hbWUucmVwbGFjZSgiLSIsICIiKTsg
Ly8gRm9yIHNhZnR5LCByZW1vdmUgJy0nIGZyb20gdGhlIGZpbGVuYW1lIHNuY2Ugc29tZSBzZXJ2
ZXJzIG1heSBub3QgbGlrZSBpdC4KK30KKworUGFzc1JlZlB0cjxCbG9iSXRlbT4gRmlsZVJhbmdl
QmxvYkl0ZW06OmRlZXBDb3B5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gQmxvYkl0ZW06OmNyZWF0
ZUZpbGVSYW5nZUl0ZW0obV9wYXRoLCBtX2ZpbGVTdGFydCwgbV9sZW5ndGgsIG1fc25hcHNob3RN
b2RpZmljYXRpb25UaW1lKTsKK30KKworYm9vbCBGaWxlUmFuZ2VCbG9iSXRlbTo6ZXF1YWxzKGNv
bnN0IEJsb2JJdGVtKiBiKSBjb25zdAoreworICAgIGlmICghQmxvYkl0ZW06OmVxdWFscyhiKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEFTU0VSVChiLT5pc0ZpbGUoKSAmJiBiLT5pc1Jh
bmdlKCkpOworICAgIGNvbnN0IEZpbGVSYW5nZUJsb2JJdGVtKiByID0gc3RhdGljX2Nhc3Q8Y29u
c3QgRmlsZVJhbmdlQmxvYkl0ZW0qPihiKTsKKyAgICBpZiAobV9zbmFwc2hvdE1vZGlmaWNhdGlv
blRpbWUgIT0gci0+bV9zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBGaWxlUmFuZ2VCbG9iSXRlbTo6aXNW
YWxpZCgpIGNvbnN0Cit7CisgICAgaWYgKG1fc25hcHNob3RNb2RpZmljYXRpb25UaW1lID09IEJs
b2JJdGVtOjpkb05vdENoZWNrRmlsZUNoYW5nZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
aWYgKCFpc1ZhbGlkU25hcHNob3RNb2RpZmljYXRpb25UaW1lKG1fc25hcHNob3RNb2RpZmljYXRp
b25UaW1lKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHRpbWVfdCBtb2RpZmljYXRpb25U
aW1lOworICAgIGlmIChtX3BhdGguaXNFbXB0eSgpIHx8ICFnZXRGaWxlTW9kaWZpY2F0aW9uVGlt
ZShtX3BhdGgsIG1vZGlmaWNhdGlvblRpbWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
cmV0dXJuIChtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZSA9PSBtb2RpZmljYXRpb25UaW1lKTsK
K30KKworI2VuZGlmIC8vIEVOQUJMRShCTE9CX1NMSUNFKQorCisvLyBDcmVhdGUgbWV0aG9kcyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorCitQYXNzUmVmUHRyPEJsb2JJdGVtPiBCbG9iSXRlbTo6Y3JlYXRlRmlsZUl0ZW0oY29u
c3QgU3RyaW5nJiBwYXRoKQoreworICAgIHJldHVybiBhZG9wdFJlZihzdGF0aWNfY2FzdDxCbG9i
SXRlbSo+KG5ldyBGaWxlQmxvYkl0ZW0ocGF0aCkpKTsKK30KKworUGFzc1JlZlB0cjxCbG9iSXRl
bT4gQmxvYkl0ZW06OmNyZWF0ZVN0cmluZ0l0ZW0oY29uc3QgU3RyaW5nJiB0ZXh0LCBFbmRpbmdU
eXBlIGVuZGluZywgVGV4dEVuY29kaW5nIGVuY29kaW5nKQoreworICAgIHJldHVybiBhZG9wdFJl
ZihzdGF0aWNfY2FzdDxCbG9iSXRlbSo+KG5ldyBTdHJpbmdCbG9iSXRlbSh0ZXh0LCBlbmRpbmcs
IGVuY29kaW5nKSkpOworfQorCitQYXNzUmVmUHRyPEJsb2JJdGVtPiBCbG9iSXRlbTo6Y3JlYXRl
U3RyaW5nSXRlbShjb25zdCBDU3RyaW5nJiB0ZXh0KQoreworICAgIHJldHVybiBhZG9wdFJlZihz
dGF0aWNfY2FzdDxCbG9iSXRlbSo+KG5ldyBTdHJpbmdCbG9iSXRlbSh0ZXh0KSkpOworfQorCitQ
YXNzUmVmUHRyPEJsb2JJdGVtPiBCbG9iSXRlbTo6Y3JlYXRlQnl0ZUFycmF5SXRlbShjb25zdCBj
aGFyKiBkYXRhLCBzaXplX3Qgc2l6ZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoc3RhdGljX2Nh
c3Q8QmxvYkl0ZW0qPihuZXcgQnl0ZXNBcnJheUJsb2JJdGVtKGRhdGEsIHNpemUpKSk7Cit9CisK
K1Bhc3NSZWZQdHI8QmxvYkl0ZW0+IEJsb2JJdGVtOjpjcmVhdGVSYW5nZUl0ZW0oUGFzc1JlZlB0
cjxCbG9iSXRlbT4gaXRlbSwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoKQorewor
ICAgIGlmICghc3RhcnQgJiYgaXRlbS0+c2l6ZSgpIDw9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxv
bmcgbG9uZz4obGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIGl0ZW07CisgICAgaWYgKGl0ZW0tPmlz
RmlsZSgpKSB7CisgICAgICAgIGlmIChpdGVtLT5pc1JhbmdlKCkpIHsKKyAgICAgICAgICAgIGlm
IChzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KHN0YXJ0ICsgbGVuZ3RoKSA+IGl0ZW0t
PnNpemUoKSkKKyAgICAgICAgICAgICAgICBsZW5ndGggPSBpdGVtLT5zaXplKCkgLSBzdGFydDsK
KyAgICAgICAgICAgIHN0YXJ0ICs9IGl0ZW0tPmZpbGVTdGFydCgpOworICAgICAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKHN0YXRpY19jYXN0PEJsb2JJdGVtKj4obmV3IEZpbGVSYW5nZUJsb2JJdGVt
KGl0ZW0tPmZpbGVQYXRoKCksIHN0YXJ0LCBsZW5ndGgsIGl0ZW0tPmZpbGVTbmFwc2hvdE1vZGlm
aWNhdGlvblRpbWUoKSkpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYWRvcHRSZWYoc3Rh
dGljX2Nhc3Q8QmxvYkl0ZW0qPihuZXcgRmlsZVJhbmdlQmxvYkl0ZW0oaXRlbS0+ZmlsZVBhdGgo
KSwgc3RhcnQsIGxlbmd0aCwgZ2V0RmlsZVNuYXBzaG90TW9kaWZpY2F0aW9uVGltZShpdGVtLT5m
aWxlUGF0aCgpKSkpKTsKKyAgICB9CisgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcg
bG9uZz4oc3RhcnQgKyBsZW5ndGgpID4gaXRlbS0+c2l6ZSgpKQorICAgICAgICBsZW5ndGggPSBp
dGVtLT5zaXplKCkgLSBzdGFydDsKKyAgICByZXR1cm4gYWRvcHRSZWYoc3RhdGljX2Nhc3Q8Qmxv
Ykl0ZW0qPihuZXcgUmFuZ2VCbG9iSXRlbShpdGVtLCBzdGFydCwgbGVuZ3RoKSkpOworfQorCitQ
YXNzUmVmUHRyPEJsb2JJdGVtPiBCbG9iSXRlbTo6Y3JlYXRlRmlsZVJhbmdlSXRlbShjb25zdCBT
dHJpbmcmIHBhdGgsIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCwgZG91YmxlIHNu
YXBzaG90TW9kaWZpY2F0aW9uVGltZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoc3RhdGljX2Nh
c3Q8QmxvYkl0ZW0qPihuZXcgRmlsZVJhbmdlQmxvYkl0ZW0ocGF0aCwgc3RhcnQsIGxlbmd0aCwg
c25hcHNob3RNb2RpZmljYXRpb25UaW1lKSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvQmxvYkl0ZW0uaCBiL1dlYkNvcmUvaHRtbC9CbG9i
SXRlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjllYmJjNDdmNDE3YjdmOGFmOGVmMDMyOWM4ZjIxOGFhZGNjOGFl
ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2h0bWwvQmxvYkl0ZW0uaApAQCAtMCwwICsx
LDEwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0
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
KyAqLworCisjaWZuZGVmIEJsb2JJdGVtX2gKKyNkZWZpbmUgQmxvYkl0ZW1faAorCisjaW5jbHVk
ZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKKyNpbmNsdWRl
IDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCisvLyBTdHJpbmcgZW5kaW5nIHR5cGVzLgorZW51bSBFbmRpbmdUeXBl
IHsKKyAgICBFbmRpbmdUcmFuc3BhcmVudCA9IDAsCisgICAgRW5kaW5nTEYsCisgICAgRW5kaW5n
Q1IsCisgICAgRW5kaW5nQ1JMRiwKK307CisKKy8vIEEgYmFzZSBpbnRlcmZhY2UgZm9yIGFsbCAn
YmxvYicgaXRlbXMgKGZpbGUsIHN0cmluZyBvciBieXRlcyBhcnJheSkuCitjbGFzcyBCbG9iSXRl
bSA6IHB1YmxpYyBSZWZDb3VudGVkPEJsb2JJdGVtPiB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+
QmxvYkl0ZW0oKSB7IH0KKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplKCkgY29u
c3QgPSAwOworICAgIHZpcnR1YWwgY29uc3QgY2hhciogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIDA7
IH0KKyAgICBjaGFyKiByZWxlYXNlQnVmZmVyKCkgY29uc3Q7CisKKyAgICAvLyBGYWN0b3J5IG1l
dGhvZHMuCisgICAgc3RhdGljIFBhc3NSZWZQdHI8QmxvYkl0ZW0+IGNyZWF0ZUZpbGVJdGVtKGNv
bnN0IFN0cmluZyYgcGF0aCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QmxvYkl0ZW0+IGNyZWF0
ZVN0cmluZ0l0ZW0oY29uc3QgU3RyaW5nJiB0ZXh0LCBFbmRpbmdUeXBlLCBUZXh0RW5jb2Rpbmcp
OworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJsb2JJdGVtPiBjcmVhdGVTdHJpbmdJdGVtKGNvbnN0
IENTdHJpbmcmIHRleHQpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJsb2JJdGVtPiBjcmVhdGVC
eXRlQXJyYXlJdGVtKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBzaXplKTsKKyNpZiBFTkFCTEUo
QkxPQl9TTElDRSkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCbG9iSXRlbT4gY3JlYXRlUmFuZ2VJ
dGVtKFBhc3NSZWZQdHI8QmxvYkl0ZW0+IGl0ZW0sIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25n
IGxlbmd0aCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QmxvYkl0ZW0+IGNyZWF0ZUZpbGVSYW5n
ZUl0ZW0oY29uc3QgU3RyaW5nJiBwYXRoLCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5n
dGgsIGRvdWJsZSBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUpOworI2VuZGlmIC8vIEVOQUJMRShC
TE9CX1NMSUNFKQorCisgICAgLy8gUmV0dXJucyBmYWxzZSBpZiB0aGUgZGF0YSBoYXMgYmVjb21l
IHN0YWxlIG9yIGludmFsaWQuCisgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJl
dHVybiB0cnVlOyB9CisKKyAgICAvLyBGb3Igc3RyaW5nIGl0ZW1zLgorICAgIHZpcnR1YWwgY29u
c3QgQ1N0cmluZyBjc3RyKCkgY29uc3QgeyByZXR1cm4gQ1N0cmluZygpOyB9CisKKyAgICAvLyBG
b3IgZmlsZS1iYXNlZCBpdGVtcy4KKyAgICB2aXJ0dWFsIGNvbnN0IFN0cmluZyBmaWxlUGF0aCgp
IGNvbnN0IHsgcmV0dXJuIFN0cmluZygpOyB9CisgICAgdmlydHVhbCBjb25zdCBTdHJpbmcgZmls
ZU9yVW5pcXVlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIFN0cmluZygpOyB9CisKKyAgICAvLyBSZXR1
cm5zIHRydWUgZm9yIGZpbGUtYmFzZWQgaXRlbXMuCisgICAgYm9vbCBpc0ZpbGUoKSBjb25zdCB7
IHJldHVybiAhZmlsZVBhdGgoKS5pc0VtcHR5KCk7IH0KKworI2lmIEVOQUJMRShCTE9CX1NMSUNF
KQorICAgIC8vIFJldHVybnMgdHJ1ZSBmb3Igc2xpY2VkIGl0ZW1zLgorICAgIHZpcnR1YWwgYm9v
bCBpc1JhbmdlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIC8vIEZvciBmaWxlLWJh
c2VkIHNsaWNlZCBpdGVtcy4KKyAgICBzdGF0aWMgY29uc3QgZG91YmxlIGRvTm90Q2hlY2tGaWxl
Q2hhbmdlOworICAgIHZpcnR1YWwgbG9uZyBsb25nIGZpbGVTdGFydCgpIGNvbnN0IHsgcmV0dXJu
IDA7IH0KKyAgICB2aXJ0dWFsIGRvdWJsZSBmaWxlU25hcHNob3RNb2RpZmljYXRpb25UaW1lKCkg
Y29uc3QgeyByZXR1cm4gZG9Ob3RDaGVja0ZpbGVDaGFuZ2U7IH0KKyNlbmRpZiAvLyBFTkFCTEUo
QkxPQl9TTElDRSkKKworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxCbG9iSXRlbT4gZGVlcENvcHko
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGVxdWFscyhjb25zdCBCbG9iSXRlbSopIGNv
bnN0OworCitwcm90ZWN0ZWQ6CisgICAgQmxvYkl0ZW0oKSB7IH0KK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEJsb2JJdGVtX2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
aHRtbC9GaWxlLmNwcCBiL1dlYkNvcmUvaHRtbC9GaWxlLmNwcAppbmRleCA5N2ZkYzQ1NzhkNzRi
MjI1ZTU5NDZmNGQ2YWVmMjU2NTI1NDQzYWU0Li4wMGIxNjNmYmM2NTQ1ODA5ODc2YTBhZWY3MWRh
ODVjMDI3MWI2NTk2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvRmlsZS5jcHAKKysrIGIvV2Vi
Q29yZS9odG1sL0ZpbGUuY3BwCkBAIC0zMSwxNCArMzEsMjUgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1GaWxlOjpGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkKLSAgICA6IEJsb2IocGF0aCkK
LSAgICAsIG1fbmFtZShwYXRoR2V0RmlsZU5hbWUocGF0aCkpCitzdGF0aWMgU3RyaW5nIGdldEZp
bGVUeXBlRnJvbVBhdGgoY29uc3QgU3RyaW5nJiBwYXRoKQogewotICAgIC8vIFdlIGRvbid0IHVz
ZSBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZvclBhdGgoKSBiZWNhdXNlIGl0IHJldHVy
bnMgImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIgdXBvbiBmYWlsdXJlLgotICAgIGludCBpbmRl
eCA9IG1fbmFtZS5yZXZlcnNlRmluZCgnLicpOworICAgIGludCBpbmRleCA9IHBhdGgucmV2ZXJz
ZUZpbmQoJy4nKTsKICAgICBpZiAoaW5kZXggIT0gLTEpCi0gICAgICAgIG1fdHlwZSA9IE1JTUVU
eXBlUmVnaXN0cnk6OmdldE1JTUVUeXBlRm9yRXh0ZW5zaW9uKG1fbmFtZS5zdWJzdHJpbmcoaW5k
ZXggKyAxKSk7CisgICAgICAgIHJldHVybiBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZv
ckV4dGVuc2lvbihwYXRoLnN1YnN0cmluZyhpbmRleCArIDEpKTsKKyAgICByZXR1cm4gU3RyaW5n
KCk7Cit9CisKK0ZpbGU6OkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKQorICAgIDogQmxvYihnZXRG
aWxlVHlwZUZyb21QYXRoKHBhdGgpKQoreworICAgIGFwcGVuZEJsb2JJdGVtKEJsb2JJdGVtOjpj
cmVhdGVGaWxlSXRlbShwYXRoKSk7CisgICAgQVNTRVJUKGl0ZW1zKCkuc2l6ZSgpID09IDEgJiYg
aXRlbXMoKS5hdCgwKS0+aXNGaWxlKCkpOworfQorCitjb25zdCBTdHJpbmcgRmlsZTo6bmFtZSgp
IGNvbnN0Cit7CisgICAgQVNTRVJUKGl0ZW1zKCkuc2l6ZSgpID09IDEgJiYgaXRlbXMoKS5hdCgw
KS0+aXNGaWxlKCkpOworICAgIHJldHVybiBpdGVtcygpLmF0KDApLT5maWxlT3JVbmlxdWVOYW1l
KCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRt
bC9GaWxlLmggYi9XZWJDb3JlL2h0bWwvRmlsZS5oCmluZGV4IDA2NWRkODZhN2IxZWJmNzdmYjQw
NjQ2ZjljNmU4NzA0NjlkN2ViMDkuLjRjZWNhNjU1OTk2MGNiZTNiMDI1NjcyMWViNDc4ZWZkNzhm
OTRlMGYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9GaWxlLmgKKysrIGIvV2ViQ29yZS9odG1s
L0ZpbGUuaApAQCAtNDEsMTggKzQxLDE0IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBp
c0ZpbGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKLSAgICBjb25zdCBTdHJpbmcmIG5hbWUo
KSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KLSAgICBjb25zdCBTdHJpbmcmIHR5cGUoKSBjb25z
dCB7IHJldHVybiBtX3R5cGU7IH0KKyAgICBjb25zdCBTdHJpbmcgbmFtZSgpIGNvbnN0OwogCiAg
ICAgLy8gRklYTUU6IG9ic29sZXRlIGF0dHJpYnV0ZXMuIFRvIGJlIHJlbW92ZWQuCi0gICAgY29u
c3QgU3RyaW5nJiBmaWxlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQorICAgIGNvbnN0
IFN0cmluZyBmaWxlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG5hbWUoKTsgfQogICAgIHVuc2lnbmVk
IGxvbmcgbG9uZyBmaWxlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemUoKTsgfQogCiBwcml2YXRl
OgogICAgIEZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKTsKLQotICAgIFN0cmluZyBtX25hbWU7Ci0g
ICAgU3RyaW5nIG1fdHlwZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaHRtbC9GaWxlU3RyZWFtLmNwcCBiL1dlYkNvcmUvaHRtbC9GaWxlU3RyZWFt
LmNwcAppbmRleCA3MDg5ZjYxNjE1NGU0YjEwYTMyNzczZTAzMzU2YTc5MzY0NThmOTdmLi4xMGZm
NWRmMmFhMDkyY2NkNTI2MmU3ZjU1NzhiMTExODdlOTEzNjdiIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2h0bWwvRmlsZVN0cmVhbS5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0ZpbGVTdHJlYW0uY3BwCkBA
IC03MiwxOCArNzIsMjIgQEAgdm9pZCBGaWxlU3RyZWFtOjpvcGVuRm9yUmVhZChCbG9iKiBibG9i
KQogICAgIGlmIChpc0hhbmRsZVZhbGlkKG1faGFuZGxlKSkKICAgICAgICAgcmV0dXJuOwogCisg
ICAgQVNTRVJUKGJsb2ItPml0ZW1zKCkuc2l6ZSgpID4gMCk7CisgICAgUmVmUHRyPEJsb2JJdGVt
PiBmaWxlID0gYmxvYi0+aXRlbXMoKS5hdCgwKTsKKyAgICBBU1NFUlQoZmlsZS0+aXNGaWxlKCkp
OworCiAgICAgLy8gQ2hlY2sgaWYgdGhlIGZpbGUgZXhpc3RzIGJ5IHF1ZXJ5aW5nIGl0cyBtb2Rp
ZmljYXRpb24gdGltZS4gV2UgY2hvb3NlIG5vdCB0byBjYWxsIGZpbGVFeGlzdHMoKSBpbiBvcmRl
ciB0byBzYXZlIGFuCiAgICAgLy8gZXh0cmEgZmlsZSBzeXN0ZW0gY2FsbCB3aGVuIHRoZSBtb2Rp
ZmljYXRpb24gdGltZSBpcyBuZWVkZWQgdG8gY2hlY2sgdGhlIHZhbGlkaXR5IG9mIHRoZSBzbGlj
ZWQgZmlsZSBibG9iLgogICAgIC8vIFBlciB0aGUgc3BlYywgd2UgbmVlZCB0byByZXR1cm4gZGlm
ZmVyZW50IGVycm9yIGNvZGVzIHRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBub24tZXhpc3RlbnQg
ZmlsZSBhbmQgcGVybWlzc2lvbiBlcnJvci4KICAgICAvLyBvcGVuRmlsZSgpIGNvdWxkIG5vdCB0
ZWxsIHVzZSB0aGUgZmFpbHVyZSByZWFzb24uCiAgICAgdGltZV90IGN1cnJlbnRNb2RpZmljYXRp
b25UaW1lOwotICAgIGlmICghZ2V0RmlsZU1vZGlmaWNhdGlvblRpbWUoYmxvYi0+cGF0aCgpLCBj
dXJyZW50TW9kaWZpY2F0aW9uVGltZSkpIHsKKyAgICBpZiAoIWdldEZpbGVNb2RpZmljYXRpb25U
aW1lKGZpbGUtPmZpbGVQYXRoKCksIGN1cnJlbnRNb2RpZmljYXRpb25UaW1lKSkgewogICAgICAg
ICBtX2NsaWVudC0+ZGlkRmFpbChOT1RfRk9VTkRfRVJSKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAogICAgIC8vIE9wZW4gdGhlIGZpbGUgYmxvYi4KLSAgICBtX2hhbmRsZSA9IG9wZW5GaWxl
KGJsb2ItPnBhdGgoKSwgT3BlbkZvclJlYWQpOworICAgIG1faGFuZGxlID0gb3BlbkZpbGUoZmls
ZS0+ZmlsZVBhdGgoKSwgT3BlbkZvclJlYWQpOwogICAgIGlmICghaXNIYW5kbGVWYWxpZChtX2hh
bmRsZSkpIHsKICAgICAgICAgbV9jbGllbnQtPmRpZEZhaWwoTk9UX1JFQURBQkxFX0VSUik7CiAg
ICAgICAgIHJldHVybjsKQEAgLTkxLDE0ICs5NSwxNCBAQCB2b2lkIEZpbGVTdHJlYW06Om9wZW5G
b3JSZWFkKEJsb2IqIGJsb2IpCiAKICNpZiBFTkFCTEUoQkxPQl9TTElDRSkKICAgICAvLyBDaGVj
ayB0aGUgbW9kaWZpY2F0aW9udCB0aW1lIGZvciB0aGUgcG9zc2libGUgZmlsZSBjaGFuZ2UuCi0g
ICAgaWYgKGJsb2ItPm1vZGlmaWNhdGlvblRpbWUoKSAhPSBCbG9iOjpkb05vdENoZWNrRmlsZUNo
YW5nZSAmJiBzdGF0aWNfY2FzdDx0aW1lX3Q+KGJsb2ItPm1vZGlmaWNhdGlvblRpbWUoKSkgIT0g
Y3VycmVudE1vZGlmaWNhdGlvblRpbWUpIHsKKyAgICBpZiAoZmlsZS0+ZmlsZVNuYXBzaG90TW9k
aWZpY2F0aW9uVGltZSgpICE9IEJsb2JJdGVtOjpkb05vdENoZWNrRmlsZUNoYW5nZSAmJiBzdGF0
aWNfY2FzdDx0aW1lX3Q+KGZpbGUtPmZpbGVTbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUoKSkgIT0g
Y3VycmVudE1vZGlmaWNhdGlvblRpbWUpIHsKICAgICAgICAgbV9jbGllbnQtPmRpZEZhaWwoTk9U
X1JFQURBQkxFX0VSUik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICAvLyBKdW1wIHRv
IHRoZSBiZWdpbm5pbmcgcG9zaXRpb24gaWYgdGhlIGZpbGUgaGFzIGJlZW4gc2xpY2VkLgotICAg
IGlmIChibG9iLT5zdGFydCgpID4gMCkgewotICAgICAgICBpZiAoIXNlZWtGaWxlKG1faGFuZGxl
LCBibG9iLT5zdGFydCgpLCBTZWVrRnJvbUJlZ2lubmluZykpIHsKKyAgICBpZiAoZmlsZS0+Zmls
ZVN0YXJ0KCkgPiAwKSB7CisgICAgICAgIGlmIChzZWVrRmlsZShtX2hhbmRsZSwgZmlsZS0+Zmls
ZVN0YXJ0KCksIFNlZWtGcm9tQmVnaW5uaW5nKSA8IDApIHsKICAgICAgICAgICAgIG1fY2xpZW50
LT5kaWRGYWlsKE5PVF9SRUFEQUJMRV9FUlIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CkBAIC0xMDYsMTQgKzExMCw3IEBAIHZvaWQgRmlsZVN0cmVhbTo6b3BlbkZvclJlYWQoQmxv
YiogYmxvYikKICNlbmRpZgogCiAgICAgLy8gR2V0IHRoZSBzaXplLgotI2lmIEVOQUJMRShCTE9C
X1NMSUNFKQotICAgIG1fdG90YWxCeXRlc1RvUmVhZCA9IGJsb2ItPmxlbmd0aCgpOwotICAgIGlm
IChtX3RvdGFsQnl0ZXNUb1JlYWQgPT0gQmxvYjo6dG9FbmRPZkZpbGUpCi0gICAgICAgIG1fdG90
YWxCeXRlc1RvUmVhZCA9IGJsb2ItPnNpemUoKSAtIGJsb2ItPnN0YXJ0KCk7Ci0jZWxzZQotICAg
IG1fdG90YWwgPSBibG9iLT5zaXplKCk7Ci0jZW5kaWYKLQorICAgIG1fdG90YWxCeXRlc1RvUmVh
ZCA9IGZpbGUtPnNpemUoKTsKICAgICBtX2NsaWVudC0+ZGlkR2V0U2l6ZShtX3RvdGFsQnl0ZXNU
b1JlYWQpOwogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvRm9ybURhdGFMaXN0LmNwcCBi
L1dlYkNvcmUvaHRtbC9Gb3JtRGF0YUxpc3QuY3BwCmluZGV4IDI4MWM5ZmU0MThlMWM0ODMzYmI4
N2Y4MmY3NGYxY2M0ZDcyMmQ1N2MuLjNkYmE5MzdhOGY2OWRkNzY5YWI0YWEyMWQwOGQzZTE1YWQ0
ZmU0MzYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9Gb3JtRGF0YUxpc3QuY3BwCisrKyBiL1dl
YkNvcmUvaHRtbC9Gb3JtRGF0YUxpc3QuY3BwCkBAIC0yOCw2NCArMjgsMjIgQEAgRm9ybURhdGFM
aXN0OjpGb3JtRGF0YUxpc3QoY29uc3QgVGV4dEVuY29kaW5nJiBjKQogewogfQogCi12b2lkIEZv
cm1EYXRhTGlzdDo6YXBwZW5kU3RyaW5nKGNvbnN0IENTdHJpbmcmIHMpCit2b2lkIEZvcm1EYXRh
TGlzdDo6YXBwZW5kU3RyaW5nKGNvbnN0IFN0cmluZyYgcykKIHsKLSAgICBtX2xpc3QuYXBwZW5k
KHMpOworICAgIG1fbGlzdC5hcHBlbmQoQmxvYkl0ZW06OmNyZWF0ZVN0cmluZ0l0ZW0ocywgRW5k
aW5nQ1JMRiwgbV9lbmNvZGluZykpOwogfQogCi0vLyBDaGFuZ2UgcGxhaW4gQ1IgYW5kIHBsYWlu
IExGIHRvIENSTEYgcGFpcnMuCi1zdGF0aWMgQ1N0cmluZyBmaXhMaW5lQnJlYWtzKGNvbnN0IENT
dHJpbmcmIHMpCit2b2lkIEZvcm1EYXRhTGlzdDo6YXBwZW5kU3RyaW5nKGNvbnN0IENTdHJpbmcm
IHMpCiB7Ci0gICAgLy8gQ29tcHV0ZSB0aGUgbGVuZ3RoLgotICAgIHVuc2lnbmVkIG5ld0xlbiA9
IDA7Ci0gICAgY29uc3QgY2hhciogcCA9IHMuZGF0YSgpOwotICAgIHdoaWxlIChjaGFyIGMgPSAq
cCsrKSB7Ci0gICAgICAgIGlmIChjID09ICdccicpIHsKLSAgICAgICAgICAgIC8vIFNhZmUgdG8g
bG9vayBhaGVhZCBiZWNhdXNlIG9mIHRyYWlsaW5nICdcMCcuCi0gICAgICAgICAgICBpZiAoKnAg
IT0gJ1xuJykgewotICAgICAgICAgICAgICAgIC8vIFR1cm4gQ1IgaW50byBDUkxGLgotICAgICAg
ICAgICAgICAgIG5ld0xlbiArPSAyOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYg
KGMgPT0gJ1xuJykgewotICAgICAgICAgICAgLy8gVHVybiBMRiBpbnRvIENSTEYuCi0gICAgICAg
ICAgICBuZXdMZW4gKz0gMjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIExlYXZl
IG90aGVyIGNoYXJhY3RlcnMgYWxvbmUuCi0gICAgICAgICAgICBuZXdMZW4gKz0gMTsKLSAgICAg
ICAgfQotICAgIH0KLSAgICBpZiAobmV3TGVuID09IHMubGVuZ3RoKCkpIHsKLSAgICAgICAgcmV0
dXJuIHM7Ci0gICAgfQotICAgIAotICAgIC8vIE1ha2UgYSBjb3B5IG9mIHRoZSBzdHJpbmcuCi0g
ICAgcCA9IHMuZGF0YSgpOwotICAgIGNoYXIqIHE7Ci0gICAgQ1N0cmluZyByZXN1bHQgPSBDU3Ry
aW5nOjpuZXdVbmluaXRpYWxpemVkKG5ld0xlbiwgcSk7Ci0gICAgd2hpbGUgKGNoYXIgYyA9ICpw
KyspIHsKLSAgICAgICAgaWYgKGMgPT0gJ1xyJykgewotICAgICAgICAgICAgLy8gU2FmZSB0byBs
b29rIGFoZWFkIGJlY2F1c2Ugb2YgdHJhaWxpbmcgJ1wwJy4KLSAgICAgICAgICAgIGlmICgqcCAh
PSAnXG4nKSB7Ci0gICAgICAgICAgICAgICAgLy8gVHVybiBDUiBpbnRvIENSTEYuCi0gICAgICAg
ICAgICAgICAgKnErKyA9ICdccic7Ci0gICAgICAgICAgICAgICAgKnErKyA9ICdcbic7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoYyA9PSAnXG4nKSB7Ci0gICAgICAgICAgICAv
LyBUdXJuIExGIGludG8gQ1JMRi4KLSAgICAgICAgICAgICpxKysgPSAnXHInOwotICAgICAgICAg
ICAgKnErKyA9ICdcbic7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBMZWF2ZSBv
dGhlciBjaGFyYWN0ZXJzIGFsb25lLgotICAgICAgICAgICAgKnErKyA9IGM7Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBtX2xpc3QuYXBwZW5kKEJsb2JJdGVtOjpj
cmVhdGVTdHJpbmdJdGVtKHMpKTsKIH0KIAotdm9pZCBGb3JtRGF0YUxpc3Q6OmFwcGVuZFN0cmlu
Zyhjb25zdCBTdHJpbmcmIHMpCit2b2lkIEZvcm1EYXRhTGlzdDo6YXBwZW5kQmxvYihjb25zdCBT
dHJpbmcmIGtleSwgUGFzc1JlZlB0cjxCbG9iPiBibG9iKQogewotICAgIENTdHJpbmcgY3N0ciA9
IGZpeExpbmVCcmVha3MobV9lbmNvZGluZy5lbmNvZGUocy5jaGFyYWN0ZXJzKCksIHMubGVuZ3Ro
KCksIEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKSk7Ci0gICAgbV9saXN0LmFwcGVuZChjc3RyKTsK
KyAgICBhcHBlbmRTdHJpbmcoa2V5KTsKKyAgICBjb25zdCBCbG9iOjpJdGVtTGlzdCYgbGlzdCA9
IGJsb2ItPml0ZW1zKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0LnNpemUoKTsg
KytpKQorICAgICAgICBtX2xpc3QuYXBwZW5kKGxpc3QuYXQoaSkpOwogfQogCiB9IC8vIG5hbWVz
cGFjZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0Zvcm1EYXRhTGlzdC5oIGIvV2ViQ29yZS9o
dG1sL0Zvcm1EYXRhTGlzdC5oCmluZGV4IDhlY2Y2NGVlOTNhZDUyNGY0NzkyMWYxZDgyMmY5YTA4
YmEwMTNkN2MuLmYxZGNjYzMzOTgyM2U3Y2MxYzU4Yjk1MWUwMzcxMzVlYmNkYjMwNzYgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvaHRtbC9Gb3JtRGF0YUxpc3QuaAorKysgYi9XZWJDb3JlL2h0bWwvRm9y
bURhdGFMaXN0LmgKQEAgLTIxLDcgKzIxLDggQEAKICNpZm5kZWYgRm9ybURhdGFMaXN0X2gKICNk
ZWZpbmUgRm9ybURhdGFMaXN0X2gKIAotI2luY2x1ZGUgIkJsb2IuaCIKKyNpbmNsdWRlICJFeGNl
cHRpb25Db2RlLmgiCisjaW5jbHVkZSAiRmlsZS5oIgogI2luY2x1ZGUgIlRleHRFbmNvZGluZy5o
IgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIApAQCAtNDYsMjQgKzQ3LDE4IEBAIHB1
YmxpYzoKICAgICAgICAgYXBwZW5kU3RyaW5nKGtleSk7CiAgICAgICAgIGFwcGVuZFN0cmluZyhT
dHJpbmc6Om51bWJlcih2YWx1ZSkpOwogICAgIH0KLSAgICB2b2lkIGFwcGVuZEJsb2IoY29uc3Qg
U3RyaW5nJiBrZXksIFBhc3NSZWZQdHI8QmxvYj4gYmxvYikKLSAgICB7Ci0gICAgICAgIGFwcGVu
ZFN0cmluZyhrZXkpOwotICAgICAgICBtX2xpc3QuYXBwZW5kKGJsb2IpOwotICAgIH0KKyAgICB2
b2lkIGFwcGVuZEJsb2IoY29uc3QgU3RyaW5nJiBrZXksIFBhc3NSZWZQdHI8QmxvYj4gYmxvYik7
CiAKKyAgICAvLyBBIHNpbXBsZSB3cmFwcGVyIGZvciBCbG9iSXRlbS4KICAgICBjbGFzcyBJdGVt
IHsKICAgICBwdWJsaWM6CiAgICAgICAgIEl0ZW0oKSB7IH0KLSAgICAgICAgSXRlbShjb25zdCBX
VEY6OkNTdHJpbmcmIGRhdGEpIDogbV9kYXRhKGRhdGEpIHsgfQotICAgICAgICBJdGVtKFBhc3NS
ZWZQdHI8QmxvYj4gYmxvYikgOiBtX2Jsb2IoYmxvYikgeyB9Ci0KLSAgICAgICAgY29uc3QgV1RG
OjpDU3RyaW5nJiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9Ci0gICAgICAgIEJsb2Iq
IGJsb2IoKSBjb25zdCB7IHJldHVybiBtX2Jsb2IuZ2V0KCk7IH0KKyAgICAgICAgSXRlbShQYXNz
UmVmUHRyPEJsb2JJdGVtPiBpdGVtKSA6IG1faXRlbShpdGVtKSB7IH0KKyAgICAgICAgY29uc3Qg
V1RGOjpDU3RyaW5nIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2l0ZW0tPmNzdHIoKTsgfQorICAg
ICAgICBjb25zdCBQYXNzUmVmUHRyPEJsb2JJdGVtPiBpdGVtKCkgY29uc3QgeyByZXR1cm4gbV9p
dGVtOyB9CiAKICAgICBwcml2YXRlOgotICAgICAgICBXVEY6OkNTdHJpbmcgbV9kYXRhOwotICAg
ICAgICBSZWZQdHI8QmxvYj4gbV9ibG9iOworICAgICAgICBSZWZQdHI8QmxvYkl0ZW0+IG1faXRl
bTsKICAgICB9OwogCiAgICAgY29uc3QgVmVjdG9yPEl0ZW0+JiBsaXN0KCkgY29uc3QgeyByZXR1
cm4gbV9saXN0OyB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURh
dGEuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcAppbmRleCA5MTgw
MDJhZWZkODFhNjg5MWY5ZjE5YmFmNDRkNzU1OTFmZGZhNDg0Li44NWFhZGM1ZGU5OGM2MmRiYTA4
MmY0YmNhNTk5MjJiMWIyYzNkZThhIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvRm9ybURhdGEuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5j
cHAKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJGb3JtRGF0YS5oIgogCiAjaW5jbHVkZSAi
QmxvYi5oIgorI2luY2x1ZGUgIkJsb2JJdGVtLmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5j
bHVkZSAiQ2hyb21lQ2xpZW50LmgiCiAjaW5jbHVkZSAiRE9NRm9ybURhdGEuaCIKQEAgLTMyLDEw
ICszMywzNCBAQAogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKICNpbmNsdWRlICJQYWdl
LmgiCiAjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCi0jaW5jbHVkZSAiVVVJRC5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKKyNpZiBFTkFCTEUoQkxPQl9TTElDRSkKK2NvbnN0IGxvbmcgbG9u
ZyBGb3JtRGF0YUVsZW1lbnQ6OnRvRW5kT2ZGaWxlID0gLTE7CisjZW5kaWYKKworRm9ybURhdGFF
bGVtZW50OjpGb3JtRGF0YUVsZW1lbnQoUGFzc1JlZlB0cjxCbG9iSXRlbT4gYmxvYkl0ZW0sIGJv
b2wgc2hvdWxkR2VuZXJhdGVGaWxlKQorICAgIDogbV9pdGVtKGJsb2JJdGVtKQorICAgICwgbV90
eXBlKG1faXRlbS0+aXNGaWxlKCkgPyBlbmNvZGVkRmlsZSA6IGRhdGEpCisgICAgLCBtX2RhdGEo
bV9pdGVtLmdldCgpKQorICAgICwgbV9maWxlbmFtZShtX2l0ZW0tPmZpbGVQYXRoKCkpCisjaWYg
RU5BQkxFKEJMT0JfU0xJQ0UpCisgICAgLCBtX2ZpbGVTdGFydCgwKQorICAgICwgbV9maWxlTGVu
Z3RoKHRvRW5kT2ZGaWxlKQorICAgICwgbV9leHBlY3RlZEZpbGVNb2RpZmljYXRpb25UaW1lKDAp
CisjZW5kaWYKKyAgICAsIG1fc2hvdWxkR2VuZXJhdGVGaWxlKHNob3VsZEdlbmVyYXRlRmlsZSkK
K3sKKyNpZiBFTkFCTEUoQkxPQl9TTElDRSkKKyAgICBpZiAobV9pdGVtLT5pc1JhbmdlKCkgJiYg
bV9pdGVtLT5pc0ZpbGUoKSkgeworICAgICAgICBtX2ZpbGVTdGFydCA9IG1faXRlbS0+ZmlsZVN0
YXJ0KCk7CisgICAgICAgIG1fZmlsZUxlbmd0aCA9IG1faXRlbS0+c2l6ZSgpOworICAgICAgICBt
X2V4cGVjdGVkRmlsZU1vZGlmaWNhdGlvblRpbWUgPSBtX2l0ZW0tPmZpbGVTbmFwc2hvdE1vZGlm
aWNhdGlvblRpbWUoKTsKKyAgICB9CisjZW5kaWYKK30KKwogaW5saW5lIEZvcm1EYXRhOjpGb3Jt
RGF0YSgpCiAgICAgOiBtX2lkZW50aWZpZXIoMCkKICAgICAsIG1faGFzR2VuZXJhdGVkRmlsZXMo
ZmFsc2UpCkBAIC04NSw3ICsxMTAsNyBAQCBQYXNzUmVmUHRyPEZvcm1EYXRhPiBGb3JtRGF0YTo6
Y3JlYXRlKGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBzaXplKQogUGFzc1JlZlB0cjxGb3JtRGF0
YT4gRm9ybURhdGE6OmNyZWF0ZShjb25zdCBDU3RyaW5nJiBzdHJpbmcpCiB7CiAgICAgUmVmUHRy
PEZvcm1EYXRhPiByZXN1bHQgPSBjcmVhdGUoKTsKLSAgICByZXN1bHQtPmFwcGVuZERhdGEoc3Ry
aW5nLmRhdGEoKSwgc3RyaW5nLmxlbmd0aCgpKTsKKyAgICByZXN1bHQtPmFwcGVuZFN0cmluZyhz
dHJpbmcpOwogICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwogfQogCkBAIC0xMjUsNDUgKzE1
MCw0MiBAQCBQYXNzUmVmUHRyPEZvcm1EYXRhPiBGb3JtRGF0YTo6ZGVlcENvcHkoKSBjb25zdAog
ICAgIGZvcm1EYXRhLT5tX2VsZW1lbnRzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobik7CiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBuOyArK2kpIHsKICAgICAgICAgY29uc3QgRm9ybURhdGFF
bGVtZW50JiBlID0gbV9lbGVtZW50c1tpXTsKLSAgICAgICAgc3dpdGNoIChlLm1fdHlwZSkgewot
ICAgICAgICBjYXNlIEZvcm1EYXRhRWxlbWVudDo6ZGF0YToKLSAgICAgICAgICAgIGZvcm1EYXRh
LT5tX2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVsZW1lbnQoZS5tX2RhdGEpKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEZvcm1EYXRhRWxlbWVudDo6ZW5jb2RlZEZpbGU6Ci0j
aWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgICAgICAgICBmb3JtRGF0YS0+bV9lbGVtZW50cy5h
cHBlbmQoRm9ybURhdGFFbGVtZW50KGUubV9maWxlbmFtZSwgZS5tX2ZpbGVTdGFydCwgZS5tX2Zp
bGVMZW5ndGgsIGUubV9leHBlY3RlZEZpbGVNb2RpZmljYXRpb25UaW1lLCBlLm1fc2hvdWxkR2Vu
ZXJhdGVGaWxlKSk7Ci0jZWxzZQotICAgICAgICAgICAgZm9ybURhdGEtPm1fZWxlbWVudHMuYXBw
ZW5kKEZvcm1EYXRhRWxlbWVudChlLm1fZmlsZW5hbWUsIGUubV9zaG91bGRHZW5lcmF0ZUZpbGUp
KTsKLSNlbmRpZgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAgICAgICAgZm9ybURh
dGEtPm1fZWxlbWVudHMuYXBwZW5kKEZvcm1EYXRhRWxlbWVudChlLml0ZW0oKS0+ZGVlcENvcHko
KSwgZS5tX3Nob3VsZEdlbmVyYXRlRmlsZSkpOwogICAgIH0KICAgICByZXR1cm4gZm9ybURhdGEu
cmVsZWFzZSgpOwogfQogCiB2b2lkIEZvcm1EYXRhOjphcHBlbmREYXRhKGNvbnN0IHZvaWQqIGRh
dGEsIHNpemVfdCBzaXplKQogewotICAgIGlmIChtX2VsZW1lbnRzLmlzRW1wdHkoKSB8fCBtX2Vs
ZW1lbnRzLmxhc3QoKS5tX3R5cGUgIT0gRm9ybURhdGFFbGVtZW50OjpkYXRhKQotICAgICAgICBt
X2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVsZW1lbnQoKSk7Ci0gICAgRm9ybURhdGFFbGVtZW50
JiBlID0gbV9lbGVtZW50cy5sYXN0KCk7Ci0gICAgc2l6ZV90IG9sZFNpemUgPSBlLm1fZGF0YS5z
aXplKCk7Ci0gICAgZS5tX2RhdGEuZ3JvdyhvbGRTaXplICsgc2l6ZSk7Ci0gICAgbWVtY3B5KGUu
bV9kYXRhLmRhdGEoKSArIG9sZFNpemUsIGRhdGEsIHNpemUpOworICAgIG1fZWxlbWVudHMuYXBw
ZW5kKEZvcm1EYXRhRWxlbWVudChCbG9iSXRlbTo6Y3JlYXRlQnl0ZUFycmF5SXRlbShzdGF0aWNf
Y2FzdDxjb25zdCBjaGFyKj4oZGF0YSksIHNpemUpKSk7Cit9CisKK3ZvaWQgRm9ybURhdGE6OmFw
cGVuZFN0cmluZyhjb25zdCBDU3RyaW5nJiBzdHJpbmcpCit7CisgICAgbV9lbGVtZW50cy5hcHBl
bmQoRm9ybURhdGFFbGVtZW50KEJsb2JJdGVtOjpjcmVhdGVTdHJpbmdJdGVtKHN0cmluZykpKTsK
IH0KIAogdm9pZCBGb3JtRGF0YTo6YXBwZW5kRmlsZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBi
b29sIHNob3VsZEdlbmVyYXRlRmlsZSkKIHsKLSNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAgICBt
X2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVsZW1lbnQoZmlsZW5hbWUsIDAsIEJsb2I6OnRvRW5k
T2ZGaWxlLCBCbG9iOjpkb05vdENoZWNrRmlsZUNoYW5nZSwgc2hvdWxkR2VuZXJhdGVGaWxlKSk7
Ci0jZWxzZQotICAgIG1fZWxlbWVudHMuYXBwZW5kKEZvcm1EYXRhRWxlbWVudChmaWxlbmFtZSwg
c2hvdWxkR2VuZXJhdGVGaWxlKSk7Ci0jZW5kaWYKKyAgICBtX2VsZW1lbnRzLmFwcGVuZChGb3Jt
RGF0YUVsZW1lbnQoQmxvYkl0ZW06OmNyZWF0ZUZpbGVJdGVtKGZpbGVuYW1lKSwgc2hvdWxkR2Vu
ZXJhdGVGaWxlKSk7Cit9CisKK3ZvaWQgRm9ybURhdGE6OmFwcGVuZEJsb2IoQmxvYiogYikKK3sK
KyAgICBSZWZQdHI8QmxvYj4gYmxvYiA9IGI7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBi
bG9iLT5pdGVtcygpLnNpemUoKTsgKytpKQorICAgICAgICBtX2VsZW1lbnRzLmFwcGVuZChibG9i
LT5pdGVtcygpLmF0KGkpKTsKIH0KIAogI2lmIEVOQUJMRShCTE9CX1NMSUNFKQogdm9pZCBGb3Jt
RGF0YTo6YXBwZW5kRmlsZVJhbmdlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGxvbmcgbG9uZyBz
dGFydCwgbG9uZyBsb25nIGxlbmd0aCwgZG91YmxlIGV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZSwg
Ym9vbCBzaG91bGRHZW5lcmF0ZUZpbGUpCiB7Ci0gICAgbV9lbGVtZW50cy5hcHBlbmQoRm9ybURh
dGFFbGVtZW50KGZpbGVuYW1lLCBzdGFydCwgbGVuZ3RoLCBleHBlY3RlZE1vZGlmaWNhdGlvblRp
bWUsIHNob3VsZEdlbmVyYXRlRmlsZSkpOworICAgIGlmIChsZW5ndGggPT0gRm9ybURhdGFFbGVt
ZW50Ojp0b0VuZE9mRmlsZSkgeworICAgICAgICBBU1NFUlQoIXN0YXJ0KTsKKyAgICAgICAgQVNT
RVJUKCFleHBlY3RlZE1vZGlmaWNhdGlvblRpbWUpOworICAgICAgICBtX2VsZW1lbnRzLmFwcGVu
ZChGb3JtRGF0YUVsZW1lbnQoQmxvYkl0ZW06OmNyZWF0ZUZpbGVJdGVtKGZpbGVuYW1lKSwgc2hv
dWxkR2VuZXJhdGVGaWxlKSk7CisgICAgfSBlbHNlCisgICAgICAgIG1fZWxlbWVudHMuYXBwZW5k
KEZvcm1EYXRhRWxlbWVudChCbG9iSXRlbTo6Y3JlYXRlRmlsZVJhbmdlSXRlbShmaWxlbmFtZSwg
c3RhcnQsIGxlbmd0aCwgZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lKSwgc2hvdWxkR2VuZXJhdGVG
aWxlKSk7CiB9CiAjZW5kaWYKIApAQCAtMTg2LDIzICsyMDgsMTIgQEAgdm9pZCBGb3JtRGF0YTo6
YXBwZW5kRE9NRm9ybURhdGEoY29uc3QgRE9NRm9ybURhdGEmIGRvbUZvcm1EYXRhLCBib29sIGlz
TXVsdGlQYXIKICAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBoZWFkZXI7CiAgICAgICAgICAgICBm
b3JtRGF0YUJ1aWxkZXIuYmVnaW5NdWx0aVBhcnRIZWFkZXIoaGVhZGVyLCBtX2JvdW5kYXJ5LmRh
dGEoKSwga2V5LmRhdGEoKSk7CiAKKyAgICAgICAgICAgIGNvbnN0IFJlZlB0cjxCbG9iSXRlbT4g
aXRlbSA9IHZhbHVlLml0ZW0oKTsKICAgICAgICAgICAgIGJvb2wgc2hvdWxkR2VuZXJhdGVGaWxl
ID0gZmFsc2U7CiAgICAgICAgICAgICAvLyBJZiB0aGUgY3VycmVudCB0eXBlIGlzIEZJTEUsIHRo
ZW4gd2UgYWxzbyBuZWVkIHRvIGluY2x1ZGUgdGhlIGZpbGVuYW1lCi0gICAgICAgICAgICBpZiAo
dmFsdWUuYmxvYigpKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBwYXRoID0gdmFs
dWUuYmxvYigpLT5wYXRoKCk7Ci0jaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgICAgICAgICAg
ICAgU3RyaW5nIGZpbGVOYW1lOwotICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5ibG9iKCktPmlz
RmlsZSgpKQotICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZSA9IHN0YXRpY19jYXN0PEZpbGUq
Pih2YWx1ZS5ibG9iKCkpLT5maWxlTmFtZSgpOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICAvLyBJZiBhIGJsb2IgaXMgc2xpY2VkIGZyb20gYSBmaWxlLCBpdCBk
b2VzIG5vdCBoYXZlIHRoZSBmaWxlbmFtZS4gSW4gdGhpcyBjYXNlLCBsZXQncyBwcm9kdWNlIGEg
dW5pcXVlIGZpbGVuYW1lLgotICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZSA9ICJCbG9iIiAr
IGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgZmlsZU5h
bWUucmVwbGFjZSgiLSIsICIiKTsgLy8gRm9yIHNhZnR5LCByZW1vdmUgJy0nIGZyb20gdGhlIGZp
bGVuYW1lIHNuY2Ugc29tZSBzZXJ2ZXJzIG1heSBub3QgbGlrZSBpdC4KLSAgICAgICAgICAgICAg
ICB9Ci0jZWxzZQotICAgICAgICAgICAgICAgIEFTU0VSVCh2YWx1ZS5ibG9iKCktPmlzRmlsZSgp
KTsKLSAgICAgICAgICAgICAgICBTdHJpbmcgZmlsZU5hbWUgPSBzdGF0aWNfY2FzdDxGaWxlKj4o
dmFsdWUuYmxvYigpKS0+ZmlsZU5hbWUoKTsKLSNlbmRpZgorICAgICAgICAgICAgaWYgKGl0ZW0t
PmlzRmlsZSgpKSB7CisgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBwYXRoID0gaXRlbS0+
ZmlsZVBhdGgoKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgZmlsZU5hbWUgPSBpdGVtLT5maWxl
T3JVbmlxdWVOYW1lKCk7CiAKICAgICAgICAgICAgICAgICAvLyBMZXQgdGhlIGFwcGxpY2F0aW9u
IHNwZWNpZnkgYSBmaWxlbmFtZSBpZiBpdCdzIGdvaW5nIHRvIGdlbmVyYXRlIGEgcmVwbGFjZW1l
bnQgZmlsZSBmb3IgdGhlIHVwbG9hZC4KICAgICAgICAgICAgICAgICBpZiAoIXBhdGguaXNFbXB0
eSgpKSB7CkBAIC0yMTcsOSArMjI4LDkgQEAgdm9pZCBGb3JtRGF0YTo6YXBwZW5kRE9NRm9ybURh
dGEoY29uc3QgRE9NRm9ybURhdGEmIGRvbUZvcm1EYXRhLCBib29sIGlzTXVsdGlQYXIKICAgICAg
ICAgICAgICAgICAvLyBXZSBoYXZlIHRvIGluY2x1ZGUgdGhlIGZpbGVuYW1lPSIuLiIgcGFydCBp
biB0aGUgaGVhZGVyLCBldmVuIGlmIHRoZSBmaWxlbmFtZSBpcyBlbXB0eQogICAgICAgICAgICAg
ICAgIGZvcm1EYXRhQnVpbGRlci5hZGRGaWxlbmFtZVRvTXVsdGlQYXJ0SGVhZGVyKGhlYWRlciwg
ZW5jb2RpbmcsIGZpbGVOYW1lKTsKIAotICAgICAgICAgICAgICAgIC8vIElmIGEgYmxvYiBpcyBz
bGljZWQgZnJvbSBhIGZpbGUsIGRvIG5vdCBhZGQgdGhlIGNvbnRlbnQgdHlwZS4gCisgICAgICAg
ICAgICAgICAgLy8gSWYgdGhlIGl0ZW0gaXMgc2xpY2VkIGZyb20gYSBmaWxlLCBkbyBub3QgYWRk
IHRoZSBjb250ZW50IHR5cGUuCiAjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgICAgICAgICAg
ICAgaWYgKCFmaWxlTmFtZS5pc0VtcHR5KCkgJiYgdmFsdWUuYmxvYigpLT5pc0ZpbGUoKSkgewor
ICAgICAgICAgICAgICAgIGlmICghZmlsZU5hbWUuaXNFbXB0eSgpICYmIGl0ZW0tPmlzRmlsZSgp
ICYmICFpdGVtLT5pc1JhbmdlKCkpIHsKICNlbHNlCiAgICAgICAgICAgICAgICAgaWYgKCFmaWxl
TmFtZS5pc0VtcHR5KCkpIHsKICNlbmRpZgpAQCAtMjM3LDE1ICsyNDgsNyBAQCB2b2lkIEZvcm1E
YXRhOjphcHBlbmRET01Gb3JtRGF0YShjb25zdCBET01Gb3JtRGF0YSYgZG9tRm9ybURhdGEsIGJv
b2wgaXNNdWx0aVBhcgogCiAgICAgICAgICAgICAvLyBBcHBlbmQgYm9keQogICAgICAgICAgICAg
YXBwZW5kRGF0YShoZWFkZXIuZGF0YSgpLCBoZWFkZXIuc2l6ZSgpKTsKLSAgICAgICAgICAgIGlm
IChzaXplX3QgZGF0YVNpemUgPSB2YWx1ZS5kYXRhKCkubGVuZ3RoKCkpCi0gICAgICAgICAgICAg
ICAgYXBwZW5kRGF0YSh2YWx1ZS5kYXRhKCkuZGF0YSgpLCBkYXRhU2l6ZSk7Ci0gICAgICAgICAg
ICBlbHNlIGlmICh2YWx1ZS5ibG9iKCkgJiYgIXZhbHVlLmJsb2IoKS0+cGF0aCgpLmlzRW1wdHko
KSkKLSNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAgICAgICAgICAgICAgICBhcHBlbmRGaWxlUmFu
Z2UodmFsdWUuYmxvYigpLT5wYXRoKCksIHZhbHVlLmJsb2IoKS0+c3RhcnQoKSwgdmFsdWUuYmxv
YigpLT5sZW5ndGgoKSwgdmFsdWUuYmxvYigpLT5tb2RpZmljYXRpb25UaW1lKCksIHNob3VsZEdl
bmVyYXRlRmlsZSk7Ci0jZWxzZQotICAgICAgICAgICAgICAgIGFwcGVuZEZpbGUodmFsdWUuYmxv
YigpLT5wYXRoKCksIHNob3VsZEdlbmVyYXRlRmlsZSk7Ci0jZW5kaWYKLQorICAgICAgICAgICAg
bV9lbGVtZW50cy5hcHBlbmQoRm9ybURhdGFFbGVtZW50KGl0ZW0sIHNob3VsZEdlbmVyYXRlRmls
ZSkpOwogICAgICAgICAgICAgYXBwZW5kRGF0YSgiXHJcbiIsIDIpOwogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgLy8gT21pdCB0aGUgbmFtZSAiaXNpbmRleCIgaWYgaXQncyB0aGUgZmly
c3QgZm9ybSBkYXRhIGVsZW1lbnQuCkBAIC0yNTUsNyArMjU4LDcgQEAgdm9pZCBGb3JtRGF0YTo6
YXBwZW5kRE9NRm9ybURhdGEoY29uc3QgRE9NRm9ybURhdGEmIGRvbUZvcm1EYXRhLCBib29sIGlz
TXVsdGlQYXIKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBmb3JtRGF0YUJ1aWxk
ZXIuYWRkS2V5VmFsdWVQYWlyQXNGb3JtRGF0YShlbmNvZGVkRGF0YSwga2V5LmRhdGEoKSwgdmFs
dWUuZGF0YSgpKTsKICAgICAgICAgfQotICAgIH0gCisgICAgfQogCiAgICAgaWYgKGlzTXVsdGlQ
YXJ0Rm9ybSkKICAgICAgICAgZm9ybURhdGFCdWlsZGVyLmFkZEJvdW5kYXJ5VG9NdWx0aVBhcnRI
ZWFkZXIoZW5jb2RlZERhdGEsIG1fYm91bmRhcnkuZGF0YSgpLCB0cnVlKTsKQEAgLTI3MCwxMiAr
MjczLDggQEAgdm9pZCBGb3JtRGF0YTo6ZmxhdHRlbihWZWN0b3I8Y2hhcj4mIGRhdGEpIGNvbnN0
CiAgICAgc2l6ZV90IG4gPSBtX2VsZW1lbnRzLnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG47ICsraSkgewogICAgICAgICBjb25zdCBGb3JtRGF0YUVsZW1lbnQmIGUgPSBtX2Vs
ZW1lbnRzW2ldOwotICAgICAgICBpZiAoZS5tX3R5cGUgPT0gRm9ybURhdGFFbGVtZW50OjpkYXRh
KSB7Ci0gICAgICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IGRhdGEuc2l6ZSgpOwotICAgICAgICAg
ICAgc2l6ZV90IGRlbHRhID0gZS5tX2RhdGEuc2l6ZSgpOwotICAgICAgICAgICAgZGF0YS5ncm93
KG9sZFNpemUgKyBkZWx0YSk7Ci0gICAgICAgICAgICBtZW1jcHkoZGF0YS5kYXRhKCkgKyBvbGRT
aXplLCBlLm1fZGF0YS5kYXRhKCksIGRlbHRhKTsKLSAgICAgICAgfQorICAgICAgICBpZiAoIWUu
aXRlbSgpLT5pc0ZpbGUoKSkKKyAgICAgICAgICAgIGRhdGEuYXBwZW5kKGUuaXRlbSgpLT5kYXRh
KCksIHN0YXRpY19jYXN0PHNpemVfdD4oZS5pdGVtKCktPnNpemUoKSkpOwogICAgIH0KIH0KIApA
QCAtMjg5LDEwICsyODgsMTAgQEAgU3RyaW5nIEZvcm1EYXRhOjpmbGF0dGVuVG9TdHJpbmcoKSBj
b25zdAogdm9pZCBGb3JtRGF0YTo6Z2VuZXJhdGVGaWxlcyhEb2N1bWVudCogZG9jdW1lbnQpCiB7
CiAgICAgQVNTRVJUKCFtX2hhc0dlbmVyYXRlZEZpbGVzKTsKLSAgICAKKwogICAgIGlmIChtX2hh
c0dlbmVyYXRlZEZpbGVzKQogICAgICAgICByZXR1cm47Ci0gICAgCisKICAgICBQYWdlKiBwYWdl
ID0gZG9jdW1lbnQtPnBhZ2UoKTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybjsKQEAg
LTMwMSw4ICszMDAsOCBAQCB2b2lkIEZvcm1EYXRhOjpnZW5lcmF0ZUZpbGVzKERvY3VtZW50KiBk
b2N1bWVudCkKICAgICBzaXplX3QgbiA9IG1fZWxlbWVudHMuc2l6ZSgpOwogICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbjsgKytpKSB7CiAgICAgICAgIEZvcm1EYXRhRWxlbWVudCYgZSA9IG1f
ZWxlbWVudHNbaV07Ci0gICAgICAgIGlmIChlLm1fdHlwZSA9PSBGb3JtRGF0YUVsZW1lbnQ6OmVu
Y29kZWRGaWxlICYmIGUubV9zaG91bGRHZW5lcmF0ZUZpbGUpIHsKLSAgICAgICAgICAgIGUubV9n
ZW5lcmF0ZWRGaWxlbmFtZSA9IGNsaWVudC0+Z2VuZXJhdGVSZXBsYWNlbWVudEZpbGUoZS5tX2Zp
bGVuYW1lKTsKKyAgICAgICAgaWYgKGUuaXRlbSgpLT5pc0ZpbGUoKSAmJiBlLm1fc2hvdWxkR2Vu
ZXJhdGVGaWxlKSB7CisgICAgICAgICAgICBlLm1fZ2VuZXJhdGVkRmlsZW5hbWUgPSBjbGllbnQt
PmdlbmVyYXRlUmVwbGFjZW1lbnRGaWxlKGUuaXRlbSgpLT5maWxlUGF0aCgpKTsKICAgICAgICAg
ICAgIG1faGFzR2VuZXJhdGVkRmlsZXMgPSB0cnVlOwogICAgICAgICB9CiAgICAgfQpAQCAtMzEy
LDExICszMTEsMTEgQEAgdm9pZCBGb3JtRGF0YTo6cmVtb3ZlR2VuZXJhdGVkRmlsZXNJZk5lZWRl
ZCgpCiB7CiAgICAgaWYgKCFtX2hhc0dlbmVyYXRlZEZpbGVzKQogICAgICAgICByZXR1cm47Ci0g
ICAgICAgIAorCiAgICAgc2l6ZV90IG4gPSBtX2VsZW1lbnRzLnNpemUoKTsKICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG47ICsraSkgewogICAgICAgICBGb3JtRGF0YUVsZW1lbnQmIGUgPSBt
X2VsZW1lbnRzW2ldOwotICAgICAgICBpZiAoZS5tX3R5cGUgPT0gRm9ybURhdGFFbGVtZW50Ojpl
bmNvZGVkRmlsZSAmJiAhZS5tX2dlbmVyYXRlZEZpbGVuYW1lLmlzRW1wdHkoKSkgeworICAgICAg
ICBpZiAoZS5pdGVtKCktPmlzRmlsZSgpICYmICFlLm1fZ2VuZXJhdGVkRmlsZW5hbWUuaXNFbXB0
eSgpKSB7CiAgICAgICAgICAgICBBU1NFUlQoZS5tX3Nob3VsZEdlbmVyYXRlRmlsZSk7CiAgICAg
ICAgICAgICBTdHJpbmcgZGlyZWN0b3J5ID0gZGlyZWN0b3J5TmFtZShlLm1fZ2VuZXJhdGVkRmls
ZW5hbWUpOwogICAgICAgICAgICAgZGVsZXRlRmlsZShlLm1fZ2VuZXJhdGVkRmlsZW5hbWUpOwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmggYi9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuaAppbmRleCBhNDM5MDIzNDc5NmEwZTJmMTRmNWQz
NDlmNWRkMGVmZmMwYTRiN2NkLi45OWVlN2M1MTIxZDgwYWM3OWVlNTkyMWVkY2JiNTI3YWU3M2Fi
MjQyIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuaAorKysg
Yi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuaApAQCAtMjAsNiArMjAsNyBAQAog
I2lmbmRlZiBGb3JtRGF0YV9oCiAjZGVmaW5lIEZvcm1EYXRhX2gKIAorI2luY2x1ZGUgIkJsb2Iu
aCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtMjksNTIgKzMwLDQ5IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIGNsYXNzIERPTUZvcm1EYXRhOwogY2xhc3MgRG9jdW1lbnQ7CiAKKy8vIEEg
d3JhcHBlciBjbGFzcyBvZiBCbG9iSXRlbSBmb3IgRm9ybURhdGEuCiBjbGFzcyBGb3JtRGF0YUVs
ZW1lbnQgewogcHVibGljOgotICAgIEZvcm1EYXRhRWxlbWVudCgpIDogbV90eXBlKGRhdGEpIHsg
fQotICAgIEZvcm1EYXRhRWxlbWVudChjb25zdCBWZWN0b3I8Y2hhcj4mIGFycmF5KSA6IG1fdHlw
ZShkYXRhKSwgbV9kYXRhKGFycmF5KSB7IH0KLSNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAgICBG
b3JtRGF0YUVsZW1lbnQoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgbG9uZyBsb25nIGZpbGVTdGFy
dCwgbG9uZyBsb25nIGZpbGVMZW5ndGgsIGRvdWJsZSBleHBlY3RlZEZpbGVNb2RpZmljYXRpb25U
aW1lLCBib29sIHNob3VsZEdlbmVyYXRlRmlsZSkgOiBtX3R5cGUoZW5jb2RlZEZpbGUpLCBtX2Zp
bGVuYW1lKGZpbGVuYW1lKSwgbV9maWxlU3RhcnQoZmlsZVN0YXJ0KSwgbV9maWxlTGVuZ3RoKGZp
bGVMZW5ndGgpLCBtX2V4cGVjdGVkRmlsZU1vZGlmaWNhdGlvblRpbWUoZXhwZWN0ZWRGaWxlTW9k
aWZpY2F0aW9uVGltZSksIG1fc2hvdWxkR2VuZXJhdGVGaWxlKHNob3VsZEdlbmVyYXRlRmlsZSkg
eyB9Ci0jZWxzZQotICAgIEZvcm1EYXRhRWxlbWVudChjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBi
b29sIHNob3VsZEdlbmVyYXRlRmlsZSkgOiBtX3R5cGUoZW5jb2RlZEZpbGUpLCBtX2ZpbGVuYW1l
KGZpbGVuYW1lKSwgbV9zaG91bGRHZW5lcmF0ZUZpbGUoc2hvdWxkR2VuZXJhdGVGaWxlKSB7IH0K
LSNlbmRpZgorICAgIEZvcm1EYXRhRWxlbWVudCgpIDogbV9kYXRhKDApIHsgfQorICAgIEZvcm1E
YXRhRWxlbWVudChQYXNzUmVmUHRyPEJsb2JJdGVtPiBibG9iSXRlbSwgYm9vbCBzaG91bGRHZW5l
cmF0ZUZpbGUgPSBmYWxzZSk7CisKKyAgICBjb25zdCBCbG9iSXRlbSogaXRlbSgpIGNvbnN0IHsg
cmV0dXJuIG1faXRlbS5nZXQoKTsgfQorCisgICAgUmVmUHRyPEJsb2JJdGVtPiBtX2l0ZW07CiAK
KyAgICAvLyBGSVhNRTogY2xlYW4gbWUgdXAuICBDb2RlIGJlbG93IGFyZSBtb3N0bHkga2VwdCBm
b3IgY29tcGF0aWJpbGl0eS4KICAgICBlbnVtIHsgZGF0YSwgZW5jb2RlZEZpbGUgfSBtX3R5cGU7
Ci0gICAgVmVjdG9yPGNoYXI+IG1fZGF0YTsKKyAgICBjb25zdCBzdHJ1Y3QgQmxvYkl0ZW1XcmFw
cGVyIHsKKyAgICAgICAgQmxvYkl0ZW1XcmFwcGVyKGNvbnN0IEJsb2JJdGVtV3JhcHBlciYgdikg
OiBtX2l0ZW0odi5tX2l0ZW0pIHsgfQorICAgICAgICBCbG9iSXRlbVdyYXBwZXIoY29uc3QgQmxv
Ykl0ZW0qIGl0ZW0pIDogbV9pdGVtKGl0ZW0pIHsgfQorICAgICAgICBzaXplX3Qgc2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4obV9pdGVtLT5zaXplKCkpOyB9CisgICAg
ICAgIGNvbnN0IGNoYXIqIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2l0ZW0tPmRhdGEoKTsgfQor
ICAgICAgICBjaGFyKiByZWxlYXNlQnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9pdGVtLT5yZWxl
YXNlQnVmZmVyKCk7IH0KKyAgICAgICAgY29uc3QgQmxvYkl0ZW0qIG1faXRlbTsKKyAgICB9IG1f
ZGF0YTsKICAgICBTdHJpbmcgbV9maWxlbmFtZTsKICNpZiBFTkFCTEUoQkxPQl9TTElDRSkKICAg
ICBsb25nIGxvbmcgbV9maWxlU3RhcnQ7CiAgICAgbG9uZyBsb25nIG1fZmlsZUxlbmd0aDsKICAg
ICBkb3VibGUgbV9leHBlY3RlZEZpbGVNb2RpZmljYXRpb25UaW1lOworCisgICAgc3RhdGljIGNv
bnN0IGxvbmcgbG9uZyB0b0VuZE9mRmlsZTsKICNlbmRpZgorCiAgICAgU3RyaW5nIG1fZ2VuZXJh
dGVkRmlsZW5hbWU7CiAgICAgYm9vbCBtX3Nob3VsZEdlbmVyYXRlRmlsZTsKIH07CiAKIGlubGlu
ZSBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9ybURhdGFFbGVtZW50JiBhLCBjb25zdCBGb3JtRGF0
YUVsZW1lbnQmIGIpCiB7Ci0gICAgaWYgKCZhID09ICZiKQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAKLSAgICBpZiAoYS5tX3R5cGUgIT0gYi5tX3R5cGUpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBpZiAoYS5tX2RhdGEgIT0gYi5tX2RhdGEpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAgICBpZiAoYS5tX2ZpbGVuYW1lICE9IGIubV9maWxl
bmFtZSB8fCBhLm1fZmlsZVN0YXJ0ICE9IGIubV9maWxlU3RhcnQgfHwgYS5tX2ZpbGVMZW5ndGgg
IT0gYi5tX2ZpbGVMZW5ndGggfHwgYS5tX2V4cGVjdGVkRmlsZU1vZGlmaWNhdGlvblRpbWUgIT0g
Yi5tX2V4cGVjdGVkRmlsZU1vZGlmaWNhdGlvblRpbWUpCi0jZWxzZQotICAgIGlmIChhLm1fZmls
ZW5hbWUgIT0gYi5tX2ZpbGVuYW1lKQotI2VuZGlmCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBhLml0ZW0oKS0+ZXF1YWxzKGIuaXRlbSgpKTsK
IH0KLSAKKwogaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGb3JtRGF0YUVsZW1lbnQmIGEs
IGNvbnN0IEZvcm1EYXRhRWxlbWVudCYgYikKIHsKICAgICByZXR1cm4gIShhID09IGIpOwogfQot
IAorCiBjbGFzcyBGb3JtRGF0YSA6IHB1YmxpYyBSZWZDb3VudGVkPEZvcm1EYXRhPiB7CiBwdWJs
aWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGNyZWF0ZSgpOwpAQCAtODYsOCAr
ODQsMTAgQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGNvcHkoKSBjb25zdDsK
ICAgICBQYXNzUmVmUHRyPEZvcm1EYXRhPiBkZWVwQ29weSgpIGNvbnN0OwogICAgIH5Gb3JtRGF0
YSgpOwotICAgIAorCiAgICAgdm9pZCBhcHBlbmREYXRhKGNvbnN0IHZvaWQqIGRhdGEsIHNpemVf
dCk7CisgICAgdm9pZCBhcHBlbmRCbG9iKEJsb2IqKTsKKyAgICB2b2lkIGFwcGVuZFN0cmluZyhj
b25zdCBDU3RyaW5nJik7CiAgICAgdm9pZCBhcHBlbmRGaWxlKGNvbnN0IFN0cmluZyYgZmlsZW5h
bWUsIGJvb2wgc2hvdWxkR2VuZXJhdGVGaWxlID0gZmFsc2UpOwogI2lmIEVOQUJMRShCTE9CX1NM
SUNFKQogICAgIHZvaWQgYXBwZW5kRmlsZVJhbmdlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGxv
bmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCwgZG91YmxlIGV4cGVjdGVkTW9kaWZpY2F0
aW9uVGltZSwgYm9vbCBzaG91bGRHZW5lcmF0ZUZpbGUgPSBmYWxzZSk7CkBAIC0xMTgsNiArMTE4
LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGFwcGVuZERPTUZvcm1EYXRhKGNvbnN0IERPTUZvcm1E
YXRhJiBkb21Gb3JtRGF0YSwgYm9vbCBpc011bHRpUGFydEZvcm0sIERvY3VtZW50KiBkb2N1bWVu
dCk7CiAKICAgICBWZWN0b3I8Rm9ybURhdGFFbGVtZW50PiBtX2VsZW1lbnRzOworCiAgICAgaW50
NjRfdCBtX2lkZW50aWZpZXI7CiAgICAgYm9vbCBtX2hhc0dlbmVyYXRlZEZpbGVzOwogICAgIGJv
b2wgbV9hbHdheXNTdHJlYW07CkBAIC0xMzEsNyArMTMyLDcgQEAgaW5saW5lIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBGb3JtRGF0YSYgYSwgY29uc3QgRm9ybURhdGEmIGIpCiAKIGlubGluZSBib29s
IG9wZXJhdG9yIT0oY29uc3QgRm9ybURhdGEmIGEsIGNvbnN0IEZvcm1EYXRhJiBiKQogewotICAg
IHJldHVybiBhLmVsZW1lbnRzKCkgIT0gYi5lbGVtZW50cygpOworICAgIHJldHVybiAhKGEgPT0g
Yik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9tYWMvRm9ybURhdGFTdHJlYW1NYWMubW0gYi9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvbWFjL0Zvcm1EYXRhU3RyZWFtTWFjLm1tCmluZGV4IDI3ZWNmZDA4YWQ1YWFhYjg3
NTZmYTU5NmQ5OTZiZDJmNmVjNWQwM2YuLmUzOTY4ZjI2YmU3NWYzMTY4ZjRjNzQ1NWI1YTVlNDg4
MTAzNDFhYmMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvRm9ybURh
dGFTdHJlYW1NYWMubW0KKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9Gb3JtRGF0
YVN0cmVhbU1hYy5tbQpAQCAtMTQyLDcgKzE0Miw3IEBAIHN0YXRpYyB2b2lkIGNsb3NlQ3VycmVu
dFN0cmVhbShGb3JtU3RyZWFtRmllbGRzICpmb3JtKQogICAgICAgICBDRlJlbGVhc2UoZm9ybS0+
Y3VycmVudFN0cmVhbSk7CiAgICAgICAgIGZvcm0tPmN1cnJlbnRTdHJlYW0gPSBOVUxMOwogI2lm
IEVOQUJMRShCTE9CX1NMSUNFKQotICAgICAgICBmb3JtLT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5n
dGggPSBCbG9iOjp0b0VuZE9mRmlsZTsKKyAgICAgICAgZm9ybS0+Y3VycmVudFN0cmVhbVJhbmdl
TGVuZ3RoID0gRm9ybURhdGFFbGVtZW50Ojp0b0VuZE9mRmlsZTsKICNlbmRpZgogICAgIH0KICAg
ICBpZiAoZm9ybS0+Y3VycmVudERhdGEpIHsKQEAgLTE2MSwyMSArMTYxLDE3IEBAIHN0YXRpYyBi
b29sIGFkdmFuY2VDdXJyZW50U3RyZWFtKEZvcm1TdHJlYW1GaWVsZHMqIGZvcm0pCiAKICAgICAv
LyBDcmVhdGUgdGhlIG5ldyBzdHJlYW0uCiAgICAgRm9ybURhdGFFbGVtZW50JiBuZXh0SW5wdXQg
PSBmb3JtLT5yZW1haW5pbmdFbGVtZW50cy5sYXN0KCk7CisKKyAgICAvLyBDaGVjayBpZiB0aGUg
dW5kZXJseWluZyBkYXRhIGhhcyBiZWNvbWUgc3RhbGUgKGUuZy4gdGhlIGZpbGUgaGFzIGJlZW4g
Y2hhbmdlZCBzaW5jZSBpdHMgc25hcHNob3QgaGFzIGJlZW4gdGFrZW4pIG9yIG5vdC4KKyAgICBp
ZiAoIW5leHRJbnB1dC5tX2l0ZW0tPmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CiAgICAgaWYgKG5leHRJbnB1dC5tX3R5cGUgPT0gRm9ybURhdGFFbGVtZW50OjpkYXRhKSB7CiAg
ICAgICAgIHNpemVfdCBzaXplID0gbmV4dElucHV0Lm1fZGF0YS5zaXplKCk7CiAgICAgICAgIGNo
YXIqIGRhdGEgPSBuZXh0SW5wdXQubV9kYXRhLnJlbGVhc2VCdWZmZXIoKTsKICAgICAgICAgZm9y
bS0+Y3VycmVudFN0cmVhbSA9IENGUmVhZFN0cmVhbUNyZWF0ZVdpdGhCeXRlc05vQ29weSgwLCBy
ZWludGVycHJldF9jYXN0PGNvbnN0IFVJbnQ4Kj4oZGF0YSksIHNpemUsIGtDRkFsbG9jYXRvck51
bGwpOwogICAgICAgICBmb3JtLT5jdXJyZW50RGF0YSA9IGRhdGE7CiAgICAgfSBlbHNlIHsKLSNp
ZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGZpbGUgaGFzIGJl
ZW4gY2hhbmdlZCBvciBub3QgaWYgcmVxdWlyZWQuCi0gICAgICAgIGlmIChuZXh0SW5wdXQubV9l
eHBlY3RlZEZpbGVNb2RpZmljYXRpb25UaW1lICE9IEJsb2I6OmRvTm90Q2hlY2tGaWxlQ2hhbmdl
KSB7Ci0gICAgICAgICAgICB0aW1lX3QgZmlsZU1vZGlmaWNhdGlvblRpbWU7Ci0gICAgICAgICAg
ICBpZiAoIWdldEZpbGVNb2RpZmljYXRpb25UaW1lKG5leHRJbnB1dC5tX2ZpbGVuYW1lLCBmaWxl
TW9kaWZpY2F0aW9uVGltZSkgfHwgZmlsZU1vZGlmaWNhdGlvblRpbWUgIT0gc3RhdGljX2Nhc3Q8
dGltZV90PihuZXh0SW5wdXQubV9leHBlY3RlZEZpbGVNb2RpZmljYXRpb25UaW1lKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSNlbmRpZgotCiAgICAgICAgIGNv
bnN0IFN0cmluZyYgcGF0aCA9IG5leHRJbnB1dC5tX3Nob3VsZEdlbmVyYXRlRmlsZSA/IG5leHRJ
bnB1dC5tX2dlbmVyYXRlZEZpbGVuYW1lIDogbmV4dElucHV0Lm1fZmlsZW5hbWU7CiAgICAgICAg
IFJldGFpblB0cjxDRlN0cmluZ1JlZj4gZmlsZW5hbWUoQWRvcHRDRiwgcGF0aC5jcmVhdGVDRlN0
cmluZygpKTsKICAgICAgICAgUmV0YWluUHRyPENGVVJMUmVmPiBmaWxlVVJMKEFkb3B0Q0YsIENG
VVJMQ3JlYXRlV2l0aEZpbGVTeXN0ZW1QYXRoKDAsIGZpbGVuYW1lLmdldCgpLCBrQ0ZVUkxQT1NJ
WFBhdGhTdHlsZSwgRkFMU0UpKTsKQEAgLTIyMiw3ICsyMTgsNyBAQCBzdGF0aWMgdm9pZCogZm9y
bUNyZWF0ZShDRlJlYWRTdHJlYW1SZWYgc3RyZWFtLCB2b2lkKiBjb250ZXh0KQogICAgIEZvcm1T
dHJlYW1GaWVsZHMqIG5ld0luZm8gPSBuZXcgRm9ybVN0cmVhbUZpZWxkczsKICAgICBuZXdJbmZv
LT5jdXJyZW50U3RyZWFtID0gTlVMTDsKICNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAgICBuZXdJ
bmZvLT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5ndGggPSBCbG9iOjp0b0VuZE9mRmlsZTsKKyAgICBu
ZXdJbmZvLT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5ndGggPSBGb3JtRGF0YUVsZW1lbnQ6OnRvRW5k
T2ZGaWxlOwogI2VuZGlmCiAgICAgbmV3SW5mby0+Y3VycmVudERhdGEgPSAwOwogICAgIG5ld0lu
Zm8tPmZvcm1TdHJlYW0gPSBzdHJlYW07IC8vIERvbid0IHJldGFpbi4gVGhhdCB3b3VsZCBjcmVh
dGUgYSByZWZlcmVuY2UgY3ljbGUuCkBAIC0yNzAsNyArMjY2LDcgQEAgc3RhdGljIENGSW5kZXgg
Zm9ybVJlYWQoQ0ZSZWFkU3RyZWFtUmVmIHN0cmVhbSwgVUludDgqIGJ1ZmZlciwgQ0ZJbmRleCBi
dWZmZXJMZW4KICAgICB3aGlsZSAoZm9ybS0+Y3VycmVudFN0cmVhbSkgewogICAgICAgICBDRklu
ZGV4IGJ5dGVzVG9SZWFkID0gYnVmZmVyTGVuZ3RoOwogI2lmIEVOQUJMRShCTE9CX1NMSUNFKQot
ICAgICAgICBpZiAoZm9ybS0+Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoICE9IEJsb2I6OnRvRW5k
T2ZGaWxlICYmIGZvcm0tPmN1cnJlbnRTdHJlYW1SYW5nZUxlbmd0aCA8IGJ5dGVzVG9SZWFkKQor
ICAgICAgICBpZiAoZm9ybS0+Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoICE9IEZvcm1EYXRhRWxl
bWVudDo6dG9FbmRPZkZpbGUgJiYgZm9ybS0+Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoIDwgYnl0
ZXNUb1JlYWQpCiAgICAgICAgICAgICBieXRlc1RvUmVhZCA9IHN0YXRpY19jYXN0PENGSW5kZXg+
KGZvcm0tPmN1cnJlbnRTdHJlYW1SYW5nZUxlbmd0aCk7CiAjZW5kaWYKICAgICAgICAgQ0ZJbmRl
eCBieXRlc1JlYWQgPSBDRlJlYWRTdHJlYW1SZWFkKGZvcm0tPmN1cnJlbnRTdHJlYW0sIGJ1ZmZl
ciwgYnl0ZXNUb1JlYWQpOwpAQCAtMjgzLDcgKzI3OSw3IEBAIHN0YXRpYyBDRkluZGV4IGZvcm1S
ZWFkKENGUmVhZFN0cmVhbVJlZiBzdHJlYW0sIFVJbnQ4KiBidWZmZXIsIENGSW5kZXggYnVmZmVy
TGVuCiAgICAgICAgICAgICAqYXRFT0YgPSBGQUxTRTsKICAgICAgICAgICAgIGZvcm0tPmJ5dGVz
U2VudCArPSBieXRlc1JlYWQ7CiAjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgICAgICAgICBp
ZiAoZm9ybS0+Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoICE9IEJsb2I6OnRvRW5kT2ZGaWxlKQor
ICAgICAgICAgICAgaWYgKGZvcm0tPmN1cnJlbnRTdHJlYW1SYW5nZUxlbmd0aCAhPSBGb3JtRGF0
YUVsZW1lbnQ6OnRvRW5kT2ZGaWxlKQogICAgICAgICAgICAgICAgIGZvcm0tPmN1cnJlbnRTdHJl
YW1SYW5nZUxlbmd0aCAtPSBieXRlc1JlYWQ7CiAjZW5kaWYKIApAQCAtNDAwLDcgKzM5Niw3IEBA
IHZvaWQgc2V0SFRUUEJvZHkoTlNNdXRhYmxlVVJMUmVxdWVzdCAqcmVxdWVzdCwgUGFzc1JlZlB0
cjxGb3JtRGF0YT4gZm9ybURhdGEpCiAgICAgICAgIGVsc2UgewogI2lmIEVOQUJMRShCTE9CX1NM
SUNFKQogICAgICAgICAgICAgLy8gSWYgd2UncmUgc2VuZGluZyB0aGUgZmlsZSByYW5nZSwgdXNl
IHRoZSBleGlzdGluZyByYW5nZSBsZW5ndGggZm9yIG5vdy4gV2Ugd2lsbCBkZXRlY3QgaWYgdGhl
IGZpbGUgaGFzIGJlZW4gY2hhbmdlZCByaWdodCBiZWZvcmUgd2UgcmVhZCB0aGUgZmlsZSBhbmQg
YWJvcnQgdGhlIG9wZXJhdGlvbiBpZiBuZWNlc3NhcnkuCi0gICAgICAgICAgICBpZiAoZWxlbWVu
dC5tX2ZpbGVMZW5ndGggIT0gQmxvYjo6dG9FbmRPZkZpbGUpIHsKKyAgICAgICAgICAgIGlmIChl
bGVtZW50Lm1fZmlsZUxlbmd0aCAhPSBGb3JtRGF0YUVsZW1lbnQ6OnRvRW5kT2ZGaWxlKSB7CiAg
ICAgICAgICAgICAgICAgbGVuZ3RoICs9IGVsZW1lbnQubV9maWxlTGVuZ3RoOwogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS94bWwv
WE1MSHR0cFJlcXVlc3QuY3BwIGIvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCmluZGV4
IDVjZGUyNGRlMjlkYjQ0MjEwMDAxYTMwMjMyNDRjYTRjY2QyNWNmYmIuLmY2MWQ3MWQyNGU2Mzkz
NWViODVjMGIzNWRiZmNmYjk3YTA1OWMyZGYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUveG1sL1hNTEh0
dHBSZXF1ZXN0LmNwcAorKysgYi9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKQEAgLTQ3
OCwxMSArNDc4LDcgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6c2VuZChCbG9iKiBib2R5LCBFeGNl
cHRpb25Db2RlJiBlYykKICAgICAgICAgLy8gRklYTUU6IFNob3VsZCB3ZSBzZXQgYSBDb250ZW50
LVR5cGUgaWYgb25lIGlzIG5vdCBzZXQuCiAgICAgICAgIC8vIEZJWE1FOiBhZGQgc3VwcG9ydCBm
b3IgdXBsb2FkaW5nIGJ1bmRsZXMuCiAgICAgICAgIG1fcmVxdWVzdEVudGl0eUJvZHkgPSBGb3Jt
RGF0YTo6Y3JlYXRlKCk7Ci0jaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgICAgIG1fcmVxdWVz
dEVudGl0eUJvZHktPmFwcGVuZEZpbGVSYW5nZShib2R5LT5wYXRoKCksIGJvZHktPnN0YXJ0KCks
IGJvZHktPmxlbmd0aCgpLCBib2R5LT5tb2RpZmljYXRpb25UaW1lKCkpOwotI2Vsc2UKLSAgICAg
ICAgbV9yZXF1ZXN0RW50aXR5Qm9keS0+YXBwZW5kRmlsZShib2R5LT5wYXRoKCksIGZhbHNlKTsK
LSNlbmRpZgorICAgICAgICBtX3JlcXVlc3RFbnRpdHlCb2R5LT5hcHBlbmRCbG9iKGJvZHkpOwog
ICAgIH0KIAogICAgIGNyZWF0ZVJlcXVlc3QoZWMpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56034</attachid>
            <date>2010-05-13 16:55:38 -0700</date>
            <delta_ts>2010-05-14 11:11:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-39083-20100513165537.patch</filename>
            <type>text/plain</type>
            <size>69137</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NmYxMjU0ZGYxNDM2YjYxNjNiZDRiYmQzNGRmMmQ1NmVmZGJjOWI4OC4uOGQ2MGE5YWMyZTYwNjU3
MGE4MmZmMTg5ZjJlMzY4ZjYwOTFjYmNhMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4MyBAQAorMjAxMC0wNS0xMyAgS2lu
dWtvIFlhc3VkYSAgPGtpbnVrb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVmYWN0b3IgRm9ybURhdGEgYW5kIEJsb2IgZm9y
IGJldHRlciBzdXBwb3J0IG9mIEJsb2JzIHN5bnRoZXNpemVkIGJ5IEJsb2JCdWlsZGVyLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzkwODMKKworICAg
ICAgICBJbnRyb2R1Y2VzIGEgbmV3IGNsYXNzIEJsb2JJdGVtIGFzIGEgYmFzaWMgY29tcG9uZW50
IG9mIEJsb2IgYW5kIEZvcm1EYXRhLAorICAgICAgICBhbmQgbWFrZXMgQmxvYiBhcyBhIGNvbGxl
Y3Rpb24gb2YgQmxvYkl0ZW1zLgorICAgICAgICBGaWxlIHdvdWxkIGJlY29tZSBhIHNwZWNpYWwg
dHlwZSBvZiBCbG9iIHRoYXQgY29udGFpbnMgb25seSBvbmUgRmlsZUJsb2JJdGVtLgorICAgICAg
ICBGb3JtRGF0YUVsZW1lbnQgYW5kIEZvcm1EYXRhTGlzdDo6SXRlbSB3b3VsZCBiZWNvbWUgYSB3
cmFwcGVyIG9mIEJsb2JJdGVtLgorCisgICAgICAgIFRoZSBwYXRjaCBkb2Vzbid0IHN1cHBvcnQg
dGhlIGxhdGVzdCBGaWxlIEFQSSBjaGFuZ2VzIChlLmcuIHR5cGUsIHVybCBhbmQKKyAgICAgICAg
c2xpY2UncyB0eXBlIHBhcmFtZXRlcnMpIGFuZCBzaG91bGQgbm90IGNoYW5nZSBhbnkgb2YgaXRz
IGV4aXN0aW5nIGJlaGF2aW9ycy4KKworICAgICAgICBUaGUgZXhpc3RpbmcgdGVzdHMgc2hvdWxk
IGJlIGFibGUgdG8gYmUgdXNlZCBmb3IgcmVncmVzc2lvbjoKKyAgICAgICAgLSBodHRwL3Rlc3Rz
L2xvY2FsL2Zvcm1kYXRhL3NlbmQtZm9ybS1kYXRhLXdpdGgtc2xpY2VkLWZpbGUuaHRtbAorICAg
ICAgICAtIGh0dHAvdGVzdHMvbG9jYWwvc2VuZC1zbGljZWQtZHJhZ2dlZC1maWxlLmh0bWwKKwor
ICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAg
ICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
ajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogaHRtbC9CbG9iLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpCbG9iOjpCbG9iKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OnNpemUp
OgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6cGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpCbG9i
OjphcHBlbmRCbG9iSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjpzbGljZSk6CisgICAg
ICAgICogaHRtbC9CbG9iLmg6CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjpjcmVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6QmxvYjo6dHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjppdGVt
cyk6CisgICAgICAgICogaHRtbC9CbG9iSXRlbS5jcHA6IEFkZGVkLgorICAgICAgICAqIGh0bWwv
QmxvYkl0ZW0uaDogQWRkZWQuCisgICAgICAgICogaHRtbC9GaWxlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmdldEZpbGVUeXBlRnJvbVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZTo6Rmls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlOjpuYW1lKToKKyAgICAgICAgKiBodG1sL0ZpbGUu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGU6OmZpbGVOYW1lKToKKyAgICAgICAgKiBodG1sL0Zp
bGVTdHJlYW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVN0cmVhbTo6b3BlbkZvclJlYWQp
OgorICAgICAgICAqIGh0bWwvRm9ybURhdGFMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZv
cm1EYXRhTGlzdDo6YXBwZW5kU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhTGlz
dDo6YXBwZW5kQmxvYik6CisgICAgICAgICogaHRtbC9Gb3JtRGF0YUxpc3QuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkZvcm1EYXRhTGlzdDo6SXRlbTo6SXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpG
b3JtRGF0YUxpc3Q6Okl0ZW06OmRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGFMaXN0
OjpJdGVtOjppdGVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhRWxlbWVudDo6Rm9ybURhdGFFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9y
bURhdGE6OmRlZXBDb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjphcHBlbmREYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjphcHBlbmRTdHJpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9ybURhdGE6OmFwcGVuZEZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURh
dGE6OmFwcGVuZEJsb2IpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6OmFwcGVuZEZpbGVS
YW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YTo6YXBwZW5kRE9NRm9ybURhdGEpOgor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkZvcm1EYXRhRWxlbWVudDo6Rm9ybURhdGFFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZv
cm1EYXRhRWxlbWVudDo6aXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YUVsZW1lbnQ6
OkJsb2JJdGVtV3JhcHBlcjo6QmxvYkl0ZW1XcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZv
cm1EYXRhRWxlbWVudDo6QmxvYkl0ZW1XcmFwcGVyOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OkZvcm1EYXRhRWxlbWVudDo6QmxvYkl0ZW1XcmFwcGVyOjpkYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkZvcm1EYXRhRWxlbWVudDo6QmxvYkl0ZW1XcmFwcGVyOjpyZWxlYXNlQnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3Ih
PSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9tYWMvRm9ybURhdGFTdHJlYW1NYWMubW06
CisgICAgICAgIChXZWJDb3JlOjpjbG9zZUN1cnJlbnRTdHJlYW0pOgorICAgICAgICAoV2ViQ29y
ZTo6YWR2YW5jZUN1cnJlbnRTdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6Zm9ybUNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpmb3JtUmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpzZXRIVFRQ
Qm9keSk6CisgICAgICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlhNTEh0dHBSZXF1ZXN0OjpzZW5kKToKKwogMjAxMC0wNS0xMSAgSmlhbiBMaSAgPGppYW5s
aUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gRml4IGNvbXBpbGluZyBlcnJv
biBvbiBzbm93IGxlb3BhcmQuCmRpZmYgLS1naXQgYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIv
V2ViQ29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCBhNmUyMzAyYzUxMDM2NjU2YmYwODVhMGVhYWQx
ZDBhMjAxY2FmYmFhLi42YzNlZGY0YThkNjk0ZTg0M2ZiMzI5YzU2NTg0MmNkM2M0YmI0YTUyIDEw
MDY0NAotLS0gYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCisrKyBiL1dlYkNvcmUvR05VbWFrZWZp
bGUuYW0KQEAgLTEwMjIsNiArMTAyMiw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29y
ZS9oaXN0b3J5L1BhZ2VDYWNoZS5oIFwKIAlXZWJDb3JlL2h0bWwvQmxvYi5jcHAgXAogCVdlYkNv
cmUvaHRtbC9CbG9iLmggXAorCVdlYkNvcmUvaHRtbC9CbG9iSXRlbS5jcHAgXAorCVdlYkNvcmUv
aHRtbC9CbG9iSXRlbS5oIFwKIAlXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0NvbnRleHRBdHRy
aWJ1dGVzLmggXAogCVdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzR3JhZGllbnQuY3BwIFwKIAlX
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0dyYWRpZW50LmggXApkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCAxNGVmNGY3YzFhNWI5
ZTI5YTE4MzU1ZGUxNTkxMjc3MDY2ODVmM2E3Li5iNDU3YWE5YzEyZmM4YmMyMjBkYTg3ZTVlYzk1
ZTNhOTViZmY3NzM5IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQpAQCAtMTM3MCw2ICsxMzcwLDggQEAKICAgICAgICAgICAgICdoaXN0
b3J5L1BhZ2VDYWNoZS5oJywKICAgICAgICAgICAgICdodG1sL0Jsb2IuY3BwJywKICAgICAgICAg
ICAgICdodG1sL0Jsb2IuaCcsCisgICAgICAgICAgICAnaHRtbC9CbG9iSXRlbS5jcHAnLAorICAg
ICAgICAgICAgJ2h0bWwvQmxvYkl0ZW0uaCcsCiAgICAgICAgICAgICAnaHRtbC9jYW52YXMvV2Vi
R0xBcnJheS5jcHAnLAogICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMQXJyYXkuaCcsCiAg
ICAgICAgICAgICAnaHRtbC9jYW52YXMvV2ViR0xBcnJheUJ1ZmZlci5jcHAnLApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggNGFlMmEw
ZjdiNzdhMzFiNDNlZTFiMDIzNDc5YTg0ZjBkZGZlMTdhYS4uNTgwZDVlMjg0MGEyZDEyZWRhMDQx
MmM3NTcyMGVkZTU1NDQ3ZTU3NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnBybworKysg
Yi9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC01ODUsNiArNTg1LDcgQEAgU09VUkNFUyArPSBcCiAg
ICAgaGlzdG9yeS9xdC9IaXN0b3J5SXRlbVF0LmNwcCBcCiAgICAgaGlzdG9yeS9QYWdlQ2FjaGUu
Y3BwIFwKICAgICBodG1sL0Jsb2IuY3BwIFwKKyAgICBodG1sL0Jsb2JJdGVtLmNwcCBcCiAgICAg
aHRtbC9jYW52YXMvQ2FudmFzR3JhZGllbnQuY3BwIFwKICAgICBodG1sL2NhbnZhcy9DYW52YXNQ
YXR0ZXJuLmNwcCBcCiAgICAgaHRtbC9jYW52YXMvQ2FudmFzUGl4ZWxBcnJheS5jcHAgXApAQCAt
MTMwMiw2ICsxMzAzLDcgQEAgSEVBREVSUyArPSBcCiAgICAgaGlzdG9yeS9IaXN0b3J5SXRlbS5o
IFwKICAgICBoaXN0b3J5L1BhZ2VDYWNoZS5oIFwKICAgICBodG1sL0Jsb2IuaCBcCisgICAgaHRt
bC9CbG9iSXRlbS5oIFwKICAgICBodG1sL2NhbnZhcy9DYW52YXNHcmFkaWVudC5oIFwKICAgICBo
dG1sL2NhbnZhcy9DYW52YXNQYXR0ZXJuLmggXAogICAgIGh0bWwvY2FudmFzL0NhbnZhc1BpeGVs
QXJyYXkuaCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCBhZmU0YmI5
ZWIwOGMxZWRjYmMxNzIxZjU4ZjczYjcwNGMzOWJmMDZkLi5kNWJiMTJkZjA3MmM1Y2VjODhjMDhm
YTQ4YjI2ZWQxOWY2OTkxNmYwIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oK
QEAgLTMwNTA5LDYgKzMwNTA5LDE0IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0K
KwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcQmxvYkl0ZW0uY3BwIg0KKwkJCQk+DQorCQkJPC9G
aWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxCbG9iSXRlbS5oIg0K
KwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRt
bFxjYW52YXNcQ2FudmFzR3JhZGllbnQuY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KZGlmZiAt
LWdpdCBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYzkzODMxZDY0NzIzYTJl
ZjgzMzc5ZjAxZTUyNDMxYjE0ZTM3MTM1OS4uNWFlOTc3NGM4ZDIxYjk3ZmExNjUyMjQzOTAyNjE1
ZDhmZmQyY2QzMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
QEAgLTY2NSw3ICs2NjUsNyBAQAogCQkyRTk0RjQ1MTExOTIwOTZBMDBCN0Y3NUQgLyogRmlsZVJl
YWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU5
NEYzQ0MxMThCOTA4RTAwQjdGNzVEIC8qIEZpbGVSZWFkZXIuaCAqLzsgfTsKIAkJMkVBNzY4MDQw
RkU3MTI2NDAwQUI5QzhBIC8qIFdvcmtlclNjcmlwdExvYWRlckNsaWVudC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkVBNzY4MDMwRkU3MTI2NDAwQUI5
QzhBIC8qIFdvcmtlclNjcmlwdExvYWRlckNsaWVudC5oICovOyB9OwogCQkyRUFGQUYwRTEwRTJB
RjJEMDA3RUQzRDYgLyogQmxvYi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyRUFGQUYwQjEwRTJBRjJEMDA3RUQzRDYgLyogQmxvYi5jcHAgKi87IH07
Ci0JCTJFQUZBRjBGMTBFMkFGMkQwMDdFRDNENiAvKiBCbG9iLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRUFGQUYwQzEwRTJBRjJEMDA3RUQzRDYgLyog
QmxvYi5oICovOyB9OworCQkyRUFGQUYwRjEwRTJBRjJEMDA3RUQzRDYgLyogQmxvYi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkVBRkFGMEMxMEUyQUYy
RDAwN0VEM0Q2IC8qIEJsb2IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkyRUNGN0FEQzEwMTYyQjM4MDA0MjdERTcgLyogSlNFcnJvckV2ZW50LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFQ0Y3QURB
MTAxNjJCMzgwMDQyN0RFNyAvKiBKU0Vycm9yRXZlbnQuY3BwICovOyB9OwogCQkyRUNGN0FERDEw
MTYyQjM4MDA0MjdERTcgLyogSlNFcnJvckV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRUNGN0FEQjEwMTYyQjM4MDA0MjdERTcgLyogSlNFcnJv
ckV2ZW50LmggKi87IH07CiAJCTJFQ0Y3QUUxMTAxNjJCNTgwMDQyN0RFNyAvKiBFcnJvckV2ZW50
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFQ0Y3
QURFMTAxNjJCNTgwMDQyN0RFNyAvKiBFcnJvckV2ZW50LmNwcCAqLzsgfTsKQEAgLTIyNTYsNiAr
MjI1Niw4IEBACiAJCTg1Rjc0RTBBMEFBOERGOEMwMDBEQzI4NCAvKiBET01DU1NVbmtub3duUnVs
ZS5oIGluIENvcHkgR2VuZXJhdGVkIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gODUwMzJERDUwQUE4QzlCRTAwN0QzQjdEIC8qIERPTUNTU1Vua25vd25SdWxlLmgg
Ki87IH07CiAJCTg1RkYzMTVBMEFBRkJGQ0IwMDM3NEYzOCAvKiBET01LZXlib2FyZEV2ZW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NUZGMzE1ODBB
QUZCRkNCMDAzNzRGMzggLyogRE9NS2V5Ym9hcmRFdmVudC5oICovOyB9OwogCQk4NUZGMzE1QjBB
QUZCRkNCMDAzNzRGMzggLyogRE9NS2V5Ym9hcmRFdmVudC5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg1RkYzMTU5MEFBRkJGQ0IwMDM3NEYzOCAvKiBE
T01LZXlib2FyZEV2ZW50Lm1tICovOyB9OworCQk4OTE4MTQzMDExODdDNEI0MDBCRjY5OEEgLyog
QmxvYkl0ZW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gODkxODE0MkIxMTg3QzRCNDAwQkY2OThBIC8qIEJsb2JJdGVtLmNwcCAqLzsgfTsKKwkJODkx
ODE0MzExMTg3QzRCNDAwQkY2OThBIC8qIEJsb2JJdGVtLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4OTE4MTQyQzExODdDNEI0MDBCRjY5OEEgLyogQmxv
Ykl0ZW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk4OTUyNTM1MjExNjQxQjM0MDBDQUJGMDAgLyogRmlsZVRocmVhZC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4OTUyNTM1MDExNjQxQjM0MDBDQUJG
MDAgLyogRmlsZVRocmVhZC5jcHAgKi87IH07CiAJCTg5NTI1MzUzMTE2NDFCMzQwMENBQkYwMCAv
KiBGaWxlVGhyZWFkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA4OTUyNTM1MTExNjQxQjM0MDBDQUJGMDAgLyogRmlsZVRocmVhZC5oICovOyB9OwogCQk4
OTUyNTNENzExNkM0QzY4MDBDQUJGMDAgLyogRmlsZVN0cmVhbS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4OTUyNTNENDExNkM0QzY4MDBDQUJGMDAg
LyogRmlsZVN0cmVhbS5jcHAgKi87IH07CkBAIC03Nzk1LDYgKzc3OTcsOCBAQAogCQk4NUY1NkE3
OTBBOThDRTM3MDBBREI2MEEgLyogRE9NUHJvY2Vzc2luZ0luc3RydWN0aW9uLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IERPTVByb2Nlc3NpbmdJbnN0cnVjdGlv
bi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODVGRjMxNTgwQUFGQkZDQjAwMzc0
RjM4IC8qIERPTUtleWJvYXJkRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IERPTUtleWJvYXJkRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODVG
RjMxNTkwQUFGQkZDQjAwMzc0RjM4IC8qIERPTUtleWJvYXJkRXZlbnQubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRE9NS2V5Ym9hcmRFdmVudC5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODkxODE0MkIxMTg3QzRCNDAwQkY2OThBIC8qIEJsb2JJ
dGVtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJsb2JJdGVtLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODkxODE0MkMxMTg3QzRCNDAwQkY2OThB
IC8qIEJsb2JJdGVtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJsb2JJdGVt
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg5NTI1MzUwMTE2NDFCMzQwMENBQkYw
MCAvKiBGaWxlVGhyZWFkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEZpbGVUaHJlYWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4OTUyNTM1MTEx
NjQxQjM0MDBDQUJGMDAgLyogRmlsZVRocmVhZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBGaWxlVGhyZWFkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg5NTI1
M0Q0MTE2QzRDNjgwMENBQkYwMCAvKiBGaWxlU3RyZWFtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEZpbGVTdHJlYW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMTMxOTUsNiArMTMxOTksOCBAQAogCQkJCTJFQUZBRjBCMTBFMkFGMkQwMDdFRDNE
NiAvKiBCbG9iLmNwcCAqLywKIAkJCQkyRUFGQUYwQzEwRTJBRjJEMDA3RUQzRDYgLyogQmxvYi5o
ICovLAogCQkJCTJFQUZBRjBEMTBFMkFGMkQwMDdFRDNENiAvKiBCbG9iLmlkbCAqLywKKwkJCQk4
OTE4MTQyQjExODdDNEI0MDBCRjY5OEEgLyogQmxvYkl0ZW0uY3BwICovLAorCQkJCTg5MTgxNDJD
MTE4N0M0QjQwMEJGNjk4QSAvKiBCbG9iSXRlbS5oICovLAogCQkJCTkzQzQ0MUVEMEY4MTNBMUEw
MEMxQTYzNCAvKiBDb2xsZWN0aW9uQ2FjaGUuY3BwICovLAogCQkJCTkzQzQ0MUVFMEY4MTNBMUEw
MEMxQTYzNCAvKiBDb2xsZWN0aW9uQ2FjaGUuaCAqLywKIAkJCQk5M0M0NDFGRjBGODEzQUUxMDBD
MUE2MzQgLyogQ29sbGVjdGlvblR5cGUuaCAqLywKQEAgLTE2NjY1LDYgKzE2NjcxLDcgQEAKIAkJ
CQlCQzVFQjkyMDBFODIwNDA4MDBCMjU5NjUgLyogQmluZGluZ1VSSS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTg5OTQzMjgwQjQyMzM4ODAwRDdDODAyIC8qIEJpdG1hcEltYWdlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkyRUFGQUYwRjEwRTJBRjJEMDA3RUQzRDYgLyogQmxvYi5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJODkxODE0MzExMTg3QzRCNDAwQkY2OThBIC8qIEJsb2JJdGVtLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk5M0YxOTlCRTA4MjQ1RTU5MDAxRTlBQkMgLyogQmxvY2tFeGNlcHRpb25zLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQzVFQjVFMTBFODFCRTg3MDBCMjU5NjUgLyogQm9yZGVyRGF0
YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1RUI1REIwRTgxQjdFQTAwQjI1OTY1IC8qIEJvcmRl
clZhbHVlLmggaW4gSGVhZGVycyAqLywKQEAgLTE3OTEzLDYgKzE3OTIwLDcgQEAKIAkJCQlGRTgw
RDdBQTBFOUMxRUQyMDAwRDZGNzUgLyogSlNDdXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJhY2suaCBp
biBIZWFkZXJzICovLAogCQkJCTFBMzQxN0M5MENFQ0ZGMjUwMDQ5Q0JERSAvKiBKU0N1c3RvbVZv
aWRDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTEwQjkzN0MwQjczQzAwQTAwM0VEODkw
IC8qIEpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlCNTlERDY5
OTExOTAyOUU1MDA3RTk2ODQgLyogSlNEYXRhYmFzZUNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywK
IAkJCQkxQUU4MkY5MDBDQUFGQTlEMDAyMjM3QUUgLyogSlNEYXRhYmFzZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkM3N0QxNkEwRkYxOUY1NjAwNzA4ODdCIC8qIEpTRGF0YUdyaWRDb2x1bW4uaCBp
biBIZWFkZXJzICovLAogCQkJCUJDNzdEMTZDMEZGMTlGNTYwMDcwODg3QiAvKiBKU0RhdGFHcmlk
Q29sdW1uTGlzdC5oIGluIEhlYWRlcnMgKi8sCkBAIC0xODA3Nyw3ICsxODA4NSwxMSBAQAogCQkJ
CUJDODI0MzI5MEQwQ0U4QTIwMDQ2MEM4RiAvKiBKU1NRTEVycm9yLmggaW4gSGVhZGVycyAqLywK
IAkJCQkxQUU4MkZFRDBDQUIwN0VFMDAyMjM3QUUgLyogSlNTUUxSZXN1bHRTZXQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTFBRkUxMTlBMENCRkZDQzQwMDMwMTdGQSAvKiBKU1NRTFJlc3VsdFNldFJv
d0xpc3QuaCBpbiBIZWFkZXJzICovLAorCQkJCUI1OURENkE1MTE5MDJBNjIwMDdFOTY4NCAvKiBK
U1NRTFN0YXRlbWVudENhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKKwkJCQlCNTlERDZBOTExOTAy
QTcxMDA3RTk2ODQgLyogSlNTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzgyNDMyQTBEMENFOEEyMDA0NjBDOEYgLyogSlNTUUxUcmFuc2FjdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJQjU5REQ2OUQxMTkwMkE0MjAwN0U5Njg0IC8qIEpTU1FMVHJhbnNh
Y3Rpb25DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCisJCQkJQjU5REQ2QTExMTkwMkE1MjAwN0U5
Njg0IC8qIEpTU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk1MUUwQkFFQjBEQTU1RDRBMDBBOUU0MTcgLyogSlNTdG9yYWdlRXZlbnQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRjUwMjZBMTAyQkE5NDMwMDY2RjM5QSAvKiBKU1N0eWxlTWVkaWEuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDRTAxMzlCMEMwQkVGMTgwMDQzODYwQSAvKiBKU1N0eWxlU2hlZXQu
aCBpbiBIZWFkZXJzICovLApAQCAtMTkxMjUsMTEgKzE5MTM3LDYgQEAKIAkJCQlFMUJFNTEyRTBD
RjZDNTEyMDAyRUE5NTkgLyogWFNMVFVuaWNvZGVTb3J0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5
N0RENEQ4NzBGREY0RDZFMDBFQ0Y5QTQgLyogWFNTQXVkaXRvci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQ0UxNzJFMDExMTM2RThDRTAwNjJBNTMzIC8qIFpvb21Nb2RlLmggaW4gSGVhZGVycyAqLywK
LQkJCQlCNTlERDY5OTExOTAyOUU1MDA3RTk2ODQgLyogSlNEYXRhYmFzZUNhbGxiYWNrLmggaW4g
SGVhZGVycyAqLywKLQkJCQlCNTlERDY5RDExOTAyQTQyMDA3RTk2ODQgLyogSlNTUUxUcmFuc2Fj
dGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKLQkJCQlCNTlERDZBMTExOTAyQTUyMDA3RTk2
ODQgLyogSlNTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAotCQkJ
CUI1OURENkE1MTE5MDJBNjIwMDdFOTY4NCAvKiBKU1NRTFN0YXRlbWVudENhbGxiYWNrLmggaW4g
SGVhZGVycyAqLywKLQkJCQlCNTlERDZBOTExOTAyQTcxMDA3RTk2ODQgLyogSlNTUUxTdGF0ZW1l
bnRFcnJvckNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQlCNTVENUFBNDExOTEzMUZDMDBC
Q0MzMTUgLyogSlNTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQjU4Q0VCNjkxMTkxMzYwNzAwMkE2NzkwIC8qIEpTRGF0YWJhc2VTeW5jLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCNThDRUI2RDExOTEzNjFDMDAyQTY3OTAgLyogSlNTUUxUcmFuc2FjdGlvblN5
bmMuaCBpbiBIZWFkZXJzICovLApAQCAtMTk0NjMsNiArMTk0NzAsNyBAQAogCQkJCUJDNUVCOTFG
MEU4MjA0MDgwMEIyNTk2NSAvKiBCaW5kaW5nVVJJLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4
OTk0MzI5MEI0MjMzODgwMEQ3QzgwMiAvKiBCaXRtYXBJbWFnZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkyRUFGQUYwRTEwRTJBRjJEMDA3RUQzRDYgLyogQmxvYi5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQk4OTE4MTQzMDExODdDNEI0MDBCRjY5OEEgLyogQmxvYkl0ZW0uY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJOTNGMTlBRTEwODI0NUU1OTAwMUU5QUJDIC8qIEJsb2NrRXhjZXB0aW9ucy5tbSBp
biBTb3VyY2VzICovLAogCQkJCUJDRUE0ODU0MDk3RDkzMDIwMDk0QzlFNCAvKiBicmVha19saW5l
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzMwOUREQTA5OUU2NDkyMDA1NkU1ODEgLyogQnJl
YWtCbG9ja3F1b3RlQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTIwMjExLDggKzIwMjE5
LDkgQEAKIAkJCQk1MUVDOTI2NTBDRTkwREQ0MDBGOTAzMDggLyogSlNDdXN0b21TUUxTdGF0ZW1l
bnRFcnJvckNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBMzQxN0NBMENFQ0ZGMjUw
MDQ5Q0JERSAvKiBKU0N1c3RvbVZvaWRDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlF
MTBCOTNDMzBCNzNDMjkxMDAzRUQ4OTAgLyogSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJMUFFODJGOEYwQ0FBRkE5RDAwMjIzN0FFIC8qIEpTRGF0YWJhc2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQjU5REQ2OUExMTkwMjlFNTAwN0U5Njg0IC8qIEpTRGF0
YWJhc2VDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0NFNThBQzEwNjFFOENGMDA4
RkIzNUEgLyogSlNEYXRhYmFzZUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkxQUU4MkY4
RjBDQUFGQTlEMDAyMjM3QUUgLyogSlNEYXRhYmFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
Qzc3RDE2OTBGRjE5RjU2MDA3MDg4N0IgLyogSlNEYXRhR3JpZENvbHVtbi5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCQzc3RDE2QjBGRjE5RjU2MDA3MDg4N0IgLyogSlNEYXRhR3JpZENvbHVtbkxp
c3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM3N0QxNTIwRkYxOUM3MzAwNzA4ODdCIC8qIEpT
RGF0YUdyaWRDb2x1bW5MaXN0Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjA0MjIsOCAr
MjA0MzEsMTIgQEAKIAkJCQkxQUU4MkZFQzBDQUIwN0VFMDAyMjM3QUUgLyogSlNTUUxSZXN1bHRT
ZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFGRTExOTkwQ0JGRkNDNDAwMzAxN0ZBIC8qIEpT
U1FMUmVzdWx0U2V0Um93TGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MURDRTgwMjBDQUM5
RjFDMDA0ODgzNTggLyogSlNTUUxSZXN1bHRTZXRSb3dMaXN0Q3VzdG9tLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCUI1OURENkE2MTE5MDJBNjIwMDdFOTY4NCAvKiBKU1NRTFN0YXRlbWVudENhbGxi
YWNrLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUI1OURENkFBMTE5MDJBNzEwMDdFOTY4NCAvKiBK
U1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE0Qzc2
MzgwQ0U5MjI1RTAwN0VGM0NEIC8qIEpTU1FMVHJhbnNhY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJQjU5REQ2OUUxMTkwMkE0MjAwN0U5Njg0IC8qIEpTU1FMVHJhbnNhY3Rpb25DYWxsYmFj
ay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUQyMzE2RTBDRDI2OUU3MDBDMUYxOTQgLyogSlNT
UUxUcmFuc2FjdGlvbkN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCNTlERDZBMjExOTAy
QTUyMDA3RTk2ODQgLyogSlNTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNTFFM0Y5RDYwREEwNUUxRDAwMjUwOTExIC8qIEpTU3RvcmFnZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk1MUQwQzUxNjBEQUE5MEI3MDAzQjM4MzEgLyogSlNTdG9yYWdlQ3Vz
dG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxRTBCQUVBMERBNTVENEEwMEE5RTQxNyAvKiBK
U1N0b3JhZ2VFdmVudC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTIxMzk0LDExICsyMTQwNyw2IEBA
CiAJCQkJOTNGMTlCMDUwODI0NUU1OTAwMUU5QUJDIC8qIFhTTFRQcm9jZXNzb3JMaWJ4c2x0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUUxQkU1MTJEMENGNkM1MTIwMDJFQTk1OSAvKiBYU0xUVW5p
Y29kZVNvcnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTdERDREODYwRkRGNEQ2RTAwRUNGOUE0
IC8qIFhTU0F1ZGl0b3IuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQjU5REQ2OUExMTkwMjlFNTAw
N0U5Njg0IC8qIEpTRGF0YWJhc2VDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlCNTlE
RDY5RTExOTAyQTQyMDA3RTk2ODQgLyogSlNTUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmNwcCBpbiBT
b3VyY2VzICovLAotCQkJCUI1OURENkEyMTE5MDJBNTIwMDdFOTY4NCAvKiBKU1NRTFRyYW5zYWN0
aW9uRXJyb3JDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlCNTlERDZBNjExOTAyQTYy
MDA3RTk2ODQgLyogSlNTUUxTdGF0ZW1lbnRDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKLQkJ
CQlCNTlERDZBQTExOTAyQTcxMDA3RTk2ODQgLyogSlNTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNr
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUI1NUQ1QUE1MTE5MTMxRkMwMEJDQzMxNSAvKiBKU1NR
TFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUI1NUQ1QUE4
MTE5MTMyNTAwMEJDQzMxNSAvKiBKU0RhdGFiYXNlU3luY0N1c3RvbS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlCNTVENUFBOTExOTEzMjUwMDBCQ0MzMTUgLyogSlNTUUxUcmFuc2FjdGlvblN5bmND
dXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvQmxvYi5j
cHAgYi9XZWJDb3JlL2h0bWwvQmxvYi5jcHAKaW5kZXggODNiYmRjMGM1MjY0ODQ1NDI2ODgxOTI2
MjE2ODRiNjI4MjAyNGJmNC4uZGY4OWZlMmEwOTRjZDI4MGU5MjQwZTlhY2JlYTdiNjdiNGMwYzFm
OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0Jsb2IuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9C
bG9iLmNwcApAQCAtMjksOTAgKzI5LDczIEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgor
CiAjaW5jbHVkZSAiQmxvYi5oIgogCisjaW5jbHVkZSAiQmxvYkl0ZW0uaCIKKyNpbmNsdWRlICJG
aWxlLmgiCiAjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LSNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLWNvbnN0IGludCBCbG9iOjp0b0VuZE9mRmlsZSA9IC0x
OwotY29uc3QgZG91YmxlIEJsb2I6OmRvTm90Q2hlY2tGaWxlQ2hhbmdlID0gMDsKLSNlbmRpZgot
Ci1CbG9iOjpCbG9iKGNvbnN0IFN0cmluZyYgcGF0aCkKLSAgICA6IG1fcGF0aChwYXRoKQotI2lm
IEVOQUJMRShCTE9CX1NMSUNFKQotICAgICwgbV9zdGFydCgwKQotICAgICwgbV9sZW5ndGgodG9F
bmRPZkZpbGUpCi0gICAgLCBtX3NuYXBzaG90Q2FwdHVyZWQoZmFsc2UpCi0gICAgLCBtX3NuYXBz
aG90U2l6ZSgwKQotICAgICwgbV9zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUoZG9Ob3RDaGVja0Zp
bGVDaGFuZ2UpCi0jZW5kaWYKK1Bhc3NSZWZQdHI8QmxvYj4gQmxvYjo6Y3JlYXRlKGNvbnN0IFN0
cmluZyYgcGF0aCkKIHsKKyAgICByZXR1cm4gYWRvcHRSZWYoc3RhdGljX2Nhc3Q8QmxvYio+KEZp
bGU6OmNyZWF0ZShwYXRoKS5nZXQoKSkpOwogfQogCi0jaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi1C
bG9iOjpCbG9iKGNvbnN0IFN0cmluZyYgcGF0aCwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcg
bGVuZ3RoLCBsb25nIGxvbmcgc25hcHNob3RTaXplLCBkb3VibGUgc25hcHNob3RNb2RpZmljYXRp
b25UaW1lKQotICAgIDogbV9wYXRoKHBhdGgpCi0gICAgLCBtX3N0YXJ0KHN0YXJ0KQotICAgICwg
bV9sZW5ndGgobGVuZ3RoKQotICAgICwgbV9zbmFwc2hvdENhcHR1cmVkKHRydWUpCi0gICAgLCBt
X3NuYXBzaG90U2l6ZShzbmFwc2hvdFNpemUpCi0gICAgLCBtX3NuYXBzaG90TW9kaWZpY2F0aW9u
VGltZShzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUpCitCbG9iOjpCbG9iKGNvbnN0IFN0cmluZyYg
dHlwZSkKKyAgICA6IG1fdHlwZSh0eXBlKQogewotICAgIEFTU0VSVChzdGFydCA+PSAwICYmIGxl
bmd0aCA+PSAwICYmIHN0YXJ0ICsgbGVuZ3RoIDw9IHNuYXBzaG90U2l6ZSAmJiBzbmFwc2hvdE1v
ZGlmaWNhdGlvblRpbWUpOwogfQotI2VuZGlmCiAKIHVuc2lnbmVkIGxvbmcgbG9uZyBCbG9iOjpz
aXplKCkgY29uc3QKIHsKICAgICAvLyBGSVhNRTogSmF2YVNjcmlwdCBjYW5ub3QgcmVwcmVzZW50
IHNpemVzIGFzIGxhcmdlIGFzIHVuc2lnbmVkIGxvbmcgbG9uZywgd2UgbmVlZCB0bwogICAgIC8v
IGNvbWUgdXAgd2l0aCBhbiBleGNlcHRpb24gdG8gdGhyb3cgaWYgZmlsZSBzaXplIGlzIG5vdCBy
ZXByZXNldGFibGUuCi0jaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgaWYgKG1fc25hcHNob3RD
YXB0dXJlZCkKLSAgICAgICAgcmV0dXJuIG1fbGVuZ3RoOwotI2VuZGlmCi0gICAgbG9uZyBsb25n
IHNpemU7Ci0gICAgaWYgKCFnZXRGaWxlU2l6ZShtX3BhdGgsIHNpemUpKQotICAgICAgICByZXR1
cm4gMDsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihzaXplKTsK
KyAgICB1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSA9IDA7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX2l0ZW1MaXN0LnNpemUoKTsgKytpKQorICAgICAgICBzaXplICs9IG1faXRlbUxpc3Rb
aV0tPnNpemUoKTsKKyAgICByZXR1cm4gc2l6ZTsKK30KKworY29uc3QgU3RyaW5nIEJsb2I6OnBh
dGgoKSBjb25zdAoreworICAgIEFTU0VSVChtX2l0ZW1MaXN0LnNpemUoKSA9PSAxICYmIG1faXRl
bUxpc3RbMF0tPmlzRmlsZSgpKTsKKyAgICByZXR1cm4gbV9pdGVtTGlzdFswXS0+ZmlsZVBhdGgo
KTsKK30KKwordm9pZCBCbG9iOjphcHBlbmRCbG9iSXRlbShQYXNzUmVmUHRyPEJsb2JJdGVtPiBp
dGVtKQoreworICAgIG1faXRlbUxpc3QuYXBwZW5kKGl0ZW0pOwogfQogCiAjaWYgRU5BQkxFKEJM
T0JfU0xJQ0UpCiBQYXNzUmVmUHRyPEJsb2I+IEJsb2I6OnNsaWNlKGxvbmcgbG9uZyBzdGFydCwg
bG9uZyBsb25nIGxlbmd0aCkgY29uc3QKIHsKLSAgICAvLyBXaGVuIHdlIHNsaWNlIGEgZmlsZSBm
b3IgdGhlIGZpcnN0IHRpbWUsIHdlIG9idGFpbiBhIHNuYXBzaG90IG9mIHRoZSBmaWxlIGJ5IGNh
cHR1cmluZyBpdHMgY3VycmVudCBzaXplIGFuZCBtb2RpZmljYXRpb24gdGltZS4KLSAgICAvLyBU
aGUgbW9kaWZpY2F0aW9uIHRpbWUgd2lsbCBiZSB1c2VkIHRvIHZlcmlmeSBpZiB0aGUgZmlsZSBo
YXMgYmVlbiBjaGFuZ2VkIG9yIG5vdCwgd2hlbiB0aGUgdW5kZXJseWluZyBkYXRhIGFyZSBhY2Nl
c3NlZC4KLSAgICBsb25nIGxvbmcgc25hcHNob3RTaXplOwotICAgIGRvdWJsZSBzbmFwc2hvdE1v
ZGlmaWNhdGlvblRpbWU7Ci0gICAgaWYgKG1fc25hcHNob3RDYXB0dXJlZCkgewotICAgICAgICBz
bmFwc2hvdFNpemUgPSBtX3NuYXBzaG90U2l6ZTsKLSAgICAgICAgc25hcHNob3RNb2RpZmljYXRp
b25UaW1lID0gbV9zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWU7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgLy8gSWYgd2UgZmFpbCB0byByZXRyaWV2ZSB0aGUgc2l6ZSBvciBtb2RpZmljYXRpb24gdGlt
ZSwgcHJvYmFibHkgZHVlIHRvIHRoYXQgdGhlIGZpbGUgaGFzIGJlZW4gZGVsZXRlZCwgYW4gZW1w
dHkgYmxvYiB3aWxsIGJlIHJldHVybmVkLgotICAgICAgICB0aW1lX3QgbW9kaWZpY2F0aW9uVGlt
ZTsKLSAgICAgICAgaWYgKCFnZXRGaWxlU2l6ZShtX3BhdGgsIHNuYXBzaG90U2l6ZSkgfHwgIWdl
dEZpbGVNb2RpZmljYXRpb25UaW1lKG1fcGF0aCwgbW9kaWZpY2F0aW9uVGltZSkpIHsKLSAgICAg
ICAgICAgIHNuYXBzaG90U2l6ZSA9IDA7Ci0gICAgICAgICAgICBzbmFwc2hvdE1vZGlmaWNhdGlv
blRpbWUgPSAwOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHNuYXBzaG90TW9kaWZpY2F0
aW9uVGltZSA9IG1vZGlmaWNhdGlvblRpbWU7Ci0gICAgfQotCiAgICAgLy8gQ2xhbXAgdGhlIHJh
bmdlIGlmIGl0IGV4Y2VlZHMgdGhlIHNpemUgbGltaXQuCi0gICAgaWYgKHN0YXJ0IDwgMCkKKyAg
ICB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxTaXplID0gc2l6ZSgpOworICAgIGlmIChzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KHN0YXJ0KSA+IHRvdGFsU2l6ZSkgewogICAgICAgICBz
dGFydCA9IDA7Ci0gICAgaWYgKGxlbmd0aCA8IDApCiAgICAgICAgIGxlbmd0aCA9IDA7CisgICAg
fSBlbHNlIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KHN0YXJ0ICsgbGVuZ3Ro
KSA+IHRvdGFsU2l6ZSkKKyAgICAgICAgbGVuZ3RoID0gdG90YWxTaXplIC0gc3RhcnQ7CiAKLSAg
ICBpZiAoc3RhcnQgPiBzbmFwc2hvdFNpemUpIHsKKyAgICBpZiAoc3RhcnQgPCAwKQogICAgICAg
ICBzdGFydCA9IDA7CisgICAgaWYgKGxlbmd0aCA8IDApCiAgICAgICAgIGxlbmd0aCA9IDA7Ci0g
ICAgfSBlbHNlIGlmIChzdGFydCArIGxlbmd0aCA+IHNuYXBzaG90U2l6ZSkKLSAgICAgICAgbGVu
Z3RoID0gc25hcHNob3RTaXplIC0gc3RhcnQ7CiAKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJs
b2IobV9wYXRoLCBtX3N0YXJ0ICsgc3RhcnQsIGxlbmd0aCwgc25hcHNob3RTaXplLCBzbmFwc2hv
dE1vZGlmaWNhdGlvblRpbWUpKTsKKyAgICBzaXplX3QgaSA9IDA7CisgICAgUmVmUHRyPEJsb2I+
IGJsb2IgPSBCbG9iOjpjcmVhdGUoKTsKKyAgICBmb3IgKDsgaSA8IG1faXRlbUxpc3Quc2l6ZSgp
ICYmIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oc3RhcnQpID49IG1faXRlbUxpc3Rb
aV0tPnNpemUoKTsgKytpKQorICAgICAgICBzdGFydCAtPSBtX2l0ZW1MaXN0W2ldLT5zaXplKCk7
CisgICAgZm9yICg7IGxlbmd0aCA+IDAgJiYgaSA8IG1faXRlbUxpc3Quc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgYmxvYi0+bV9pdGVtTGlzdC5hcHBlbmQoQmxvYkl0ZW06OmNyZWF0ZVJhbmdlSXRl
bShtX2l0ZW1MaXN0W2ldLCBzdGFydCwgbGVuZ3RoKSk7CisgICAgICAgIGxlbmd0aCAtPSBibG9i
LT5tX2l0ZW1MaXN0Lmxhc3QoKS0+c2l6ZSgpOworICAgICAgICBzdGFydCA9IDA7CisgICAgfQor
ICAgIHJldHVybiBibG9iLnJlbGVhc2UoKTsKIH0KLSNlbmRpZgorI2VuZGlmIC8vIEVOQUJMRShC
TE9CX1NMSUNFKQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2h0bWwvQmxvYi5oIGIvV2ViQ29yZS9odG1sL0Jsb2IuaAppbmRleCBlOGI1ZjNmZGYwNjlhMmI0
ODc2ZWQxNmFiODFiMjJmMGZmMDM4OTcwLi5kMzJlYmUzNDJiZjc5N2E1ODcwZGVlY2M1MzRiMmU0
YmU5NjRkYTBjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvQmxvYi5oCisrKyBiL1dlYkNvcmUv
aHRtbC9CbG9iLmgKQEAgLTMxLDkgKzMxLDkgQEAKICNpZm5kZWYgQmxvYl9oCiAjZGVmaW5lIEJs
b2JfaAogCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkJsb2JJdGVtLmgi
CiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVk
ZSAiVGV4dEVuY29kaW5nLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgogCkBAIC00MSw1OSArNDEsMzQgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBCbG9iIDogcHVibGljIFJlZkNvdW50ZWQ8QmxvYj4gewogcHVibGljOgot
I2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgIHN0YXRpYyBjb25zdCBpbnQgdG9FbmRPZkZpbGU7
Ci0gICAgc3RhdGljIGNvbnN0IGRvdWJsZSBkb05vdENoZWNrRmlsZUNoYW5nZTsKLSNlbmRpZgot
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8QmxvYj4gY3JlYXRlKGNvbnN0IFN0cmluZyYgcGF0aCkK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCbG9iPiBjcmVhdGUoKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBCbG9iKHBhdGgpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBCbG9iKFN0cmluZygpKSk7CiAgICAgfQogCisgICAgLy8gQSBzcGVjaWFsIGNvbnN0cnVjdG9y
IGZvciBGaWxlIGJsb2IuCisgICAgc3RhdGljIFBhc3NSZWZQdHI8QmxvYj4gY3JlYXRlKGNvbnN0
IFN0cmluZyYgcGF0aCk7CisKICAgICB2aXJ0dWFsIH5CbG9iKCkgeyB9CiAKKyAgICB1bnNpZ25l
ZCBsb25nIGxvbmcgc2l6ZSgpIGNvbnN0OworICAgIGNvbnN0IFN0cmluZyBwYXRoKCkgY29uc3Q7
CisgICAgY29uc3QgU3RyaW5nJiB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CiAgICAg
dmlydHVhbCBib29sIGlzRmlsZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKLSNpZiBFTkFC
TEUoQkxPQl9TTElDRSkKLSAgICBQYXNzUmVmUHRyPEJsb2I+IHNsaWNlKGxvbmcgbG9uZyBzdGFy
dCwgbG9uZyBsb25nIGxlbmd0aCkgY29uc3Q7Ci0jZW5kaWYKKyAgICB0eXBlZGVmIFZlY3RvcjxS
ZWZQdHI8QmxvYkl0ZW0+ID4gSXRlbUxpc3Q7CisgICAgdm9pZCBhcHBlbmRCbG9iSXRlbShQYXNz
UmVmUHRyPEJsb2JJdGVtPiBpdGVtKTsKKyAgICBjb25zdCBJdGVtTGlzdCYgaXRlbXMoKSBjb25z
dCB7IHJldHVybiBtX2l0ZW1MaXN0OyB9CiAKLSAgICBjb25zdCBTdHJpbmcmIHBhdGgoKSBjb25z
dCB7IHJldHVybiBtX3BhdGg7IH0KLSAgICB1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSgpIGNvbnN0
OwogI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgIGxvbmcgbG9uZyBzdGFydCgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RhcnQ7IH0KLSAgICBsb25nIGxvbmcgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4g
bV9sZW5ndGg7IH0KLSAgICBkb3VibGUgbW9kaWZpY2F0aW9uVGltZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc25hcHNob3RNb2RpZmljYXRpb25UaW1lOyB9CisgICAgUGFzc1JlZlB0cjxCbG9iPiBzbGlj
ZShsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgpIGNvbnN0OwogI2VuZGlmCiAKIHBy
b3RlY3RlZDoKLSAgICBCbG9iKGNvbnN0IFN0cmluZyYgcGF0aCk7CisgICAgQmxvYihjb25zdCBT
dHJpbmcmIHR5cGUpOwogCi1wcml2YXRlOgotI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgIEJs
b2IoY29uc3QgU3RyaW5nJiBwYXRoLCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgs
IGxvbmcgbG9uZyBzbmFwc2hvdFNpemUsIGRvdWJsZSBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUp
OwotI2VuZGlmCi0KLSAgICAvLyBUaGUgdW5kZXJseWluZyBwYXRoIG9mIHRoZSBmaWxlLWJhc2Vk
IGJsb2IuIAotICAgIFN0cmluZyBtX3BhdGg7Ci0KLSNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAg
ICAvLyBUaGUgc3RhcnRpbmcgcG9zaXRpb24gb2YgdGhlIGZpbGUtYmFzZWQgYmxvYi4KLSAgICBs
b25nIGxvbmcgbV9zdGFydDsKLQotICAgIC8vIFRoZSBsZW5ndGggb2YgdGhlIGZpbGUtYmFzZWQg
YmxvYi4gVGhlIHZhbHVlIG9mIC0xIG1lYW5zIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUuCi0gICAg
bG9uZyBsb25nIG1fbGVuZ3RoOwotCi0gICAgLy8gQSBmbGFnIHRvIHRlbGwgaWYgYSBzbmFwc2hv
dCBoYXMgYmVlbiBjYXB0dXJlZC4KLSAgICBib29sIG1fc25hcHNob3RDYXB0dXJlZDsKLQotICAg
IC8vIFRoZSBzaXplIG9mIHRoZSBmaWxlIHdoZW4gYSBzbmFwc2hvdCBpcyBjYXB0dXJlZC4gSXQg
Y2FuIGJlIDAgaWYgdGhlIGZpbGUgaXMgZW1wdHkuCi0gICAgbG9uZyBsb25nIG1fc25hcHNob3RT
aXplOwotCi0gICAgLy8gVGhlIGxhc3QgbW9kaWZpY2F0aW9uIHRpbWUgb2YgdGhlIGZpbGUgd2hl
biBhIHNuYXBzaG90IGlzIGNhcHR1cmVkLiBUaGUgdmFsdWUgb2YgMCBhbHNvIG1lYW5zIHRoYXQg
dGhlIHNuYXBzaG90IGlzIG5vdCBjYXB0dXJlZC4KLSAgICBkb3VibGUgbV9zbmFwc2hvdE1vZGlm
aWNhdGlvblRpbWU7Ci0jZW5kaWYKKyAgICBWZWN0b3I8UmVmUHRyPEJsb2JJdGVtPiA+IG1faXRl
bUxpc3Q7CisgICAgY29uc3QgU3RyaW5nIG1fdHlwZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9CbG9iSXRlbS5jcHAgYi9XZWJDb3JlL2h0
bWwvQmxvYkl0ZW0uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJiMGJkNGQxNjA5OTBmZTg5YzVmYThjNzE3YWZh
MGIzNjE4NWI4OGEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2h0bWwvQmxvYkl0ZW0uY3Bw
CkBAIC0wLDAgKzEsNDI1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiQmxvYkl0
ZW0uaCIKKworI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKKyNpbmNsdWRlICJVVUlELmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworI2lmIEVOQUJMRShCTE9CX1NMSUNFKQorY29uc3QgZG91Ymxl
IEJsb2JJdGVtOjpkb05vdENoZWNrRmlsZUNoYW5nZSA9IDA7CisjZW5kaWYKKworYm9vbCBCbG9i
SXRlbTo6ZXF1YWxzKGNvbnN0IEJsb2JJdGVtKiBiKSBjb25zdAoreworICAgIGlmIChpc0ZpbGUo
KSAhPSBiLT5pc0ZpbGUoKSB8fCBpc1JhbmdlKCkgIT0gYi0+aXNSYW5nZSgpIHx8IGlzVmFsaWQo
KSAhPSBiLT5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoc2l6ZSgp
ICE9IGItPnNpemUoKSB8fCBkYXRhKCkgIT0gYi0+ZGF0YSgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgaWYgKGZpbGVPclVuaXF1ZU5hbWUoKSAhPSBiLT5maWxlT3JVbmlxdWVOYW1lKCkg
fHwgZmlsZVBhdGgoKSAhPSBiLT5maWxlUGF0aCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2NoYXIqIEJsb2JJdGVtOjpyZWxlYXNlQnVmZmVyKCkgY29u
c3QKK3sKKyAgICBWZWN0b3I8Y2hhcj4gdjsKKyAgICB2LmFwcGVuZChkYXRhKCksIHN0YXRpY19j
YXN0PHNpemVfdD4oc2l6ZSgpKSk7CisgICAgcmV0dXJuIHYucmVsZWFzZUJ1ZmZlcigpOworfQor
CisvLyBGaWxlQmxvYkl0ZW0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBGaWxlQmxvYkl0ZW06IHB1YmxpYyBC
bG9iSXRlbSB7CitwdWJsaWM6CisgICAgRmlsZUJsb2JJdGVtKGNvbnN0IFN0cmluZyYgcGF0aCk7
CisgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSgpIGNvbnN0OworICAgIHZpcnR1
YWwgYm9vbCBpc0ZpbGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBjb25z
dCBTdHJpbmcgZmlsZU9yVW5pcXVlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsZU5hbWU7IH0K
KyAgICB2aXJ0dWFsIGNvbnN0IFN0cmluZyBmaWxlUGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0
aDsgfQorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxCbG9iSXRlbT4gZGVlcENvcHkoKSBjb25zdDsK
KworcHJpdmF0ZToKKyAgICBTdHJpbmcgbV9wYXRoOworICAgIFN0cmluZyBtX2ZpbGVOYW1lOwor
fTsKKworRmlsZUJsb2JJdGVtOjpGaWxlQmxvYkl0ZW0oY29uc3QgU3RyaW5nJiBwYXRoKQorICAg
IDogbV9wYXRoKHBhdGgpCisgICAgLCBtX2ZpbGVOYW1lKHBhdGhHZXRGaWxlTmFtZShtX3BhdGgp
KQoreworfQorCit1bnNpZ25lZCBsb25nIGxvbmcgRmlsZUJsb2JJdGVtOjpzaXplKCkgY29uc3QK
K3sKKyAgICBsb25nIGxvbmcgc2l6ZTsKKyAgICBpZiAoIWdldEZpbGVTaXplKG1fcGF0aCwgc2l6
ZSkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBs
b25nIGxvbmc+KHNpemUpOworfQorCitQYXNzUmVmUHRyPEJsb2JJdGVtPiBGaWxlQmxvYkl0ZW06
OmRlZXBDb3B5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gQmxvYkl0ZW06OmNyZWF0ZUZpbGVJdGVt
KG1fcGF0aCk7Cit9CisKKy8vIFN0cmluZ0Jsb2JJdGVtIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIFN0cmluZ0Js
b2JJdGVtOiBwdWJsaWMgQmxvYkl0ZW0geworcHVibGljOgorICAgIFN0cmluZ0Jsb2JJdGVtKGNv
bnN0IFN0cmluZyYgdGV4dCwgRW5kaW5nVHlwZSwgVGV4dEVuY29kaW5nKTsKKyAgICBTdHJpbmdC
bG9iSXRlbShjb25zdCBDU3RyaW5nJiB0ZXh0KTsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcg
bG9uZyBzaXplKCkgY29uc3Q7CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiBkYXRhKCkgY29uc3Q7
CisgICAgdmlydHVhbCBjb25zdCBDU3RyaW5nIGNzdHIoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8QmxvYkl0ZW0+IGRlZXBDb3B5KCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgdm9p
ZCBlbnN1cmVGaW5hbENTdHJpbmcoKSBjb25zdDsKKyAgICBjb25zdCBTdHJpbmcgbV90ZXh0Owor
ICAgIG11dGFibGUgQ1N0cmluZyBtX2RhdGE7CisgICAgY29uc3QgRW5kaW5nVHlwZSBtX2VuZGlu
ZzsKKyAgICBjb25zdCBUZXh0RW5jb2RpbmcgbV9lbmNvZGluZzsKK307CisKK1N0cmluZ0Jsb2JJ
dGVtOjpTdHJpbmdCbG9iSXRlbShjb25zdCBTdHJpbmcmIHRleHQsIEVuZGluZ1R5cGUgZW5kaW5n
LCBUZXh0RW5jb2RpbmcgZW5jb2RpbmcpCisgICAgOiBtX3RleHQodGV4dCkKKyAgICAsIG1fZW5k
aW5nKGVuZGluZykKKyAgICAsIG1fZW5jb2RpbmcoZW5jb2RpbmcpCit7Cit9CisKK1N0cmluZ0Js
b2JJdGVtOjpTdHJpbmdCbG9iSXRlbShjb25zdCBDU3RyaW5nJiB0ZXh0KQorICAgIDogbV9kYXRh
KHRleHQpCisgICAgLCBtX2VuZGluZyhFbmRpbmdUcmFuc3BhcmVudCkKK3sKK30KKwordm9pZCBT
dHJpbmdCbG9iSXRlbTo6ZW5zdXJlRmluYWxDU3RyaW5nKCkgY29uc3QKK3sKKyAgICBpZiAobV90
ZXh0LmlzRW1wdHkoKSB8fCAhbV9kYXRhLmlzTnVsbCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBDU3RyaW5nIGZyb20gPSBtX2VuY29kaW5nLmVuY29kZShtX3RleHQuY2hhcmFjdGVycygpLCBt
X3RleHQubGVuZ3RoKCksIEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKTsKKyAgICBtX2RhdGEgPSBm
cm9tOworCisgICAgaWYgKG1fZW5kaW5nID09IEVuZGluZ1RyYW5zcGFyZW50KQorICAgICAgICBy
ZXR1cm47CisKKyAgICBjb25zdCBjaGFyKiBlbmRpbmdDaGFycyA9IChtX2VuZGluZyA9PSBFbmRp
bmdDUkxGKSA/ICJcclxuIgorICAgICAgICA6IChtX2VuZGluZyA9PSBFbmRpbmdDUikgPyAiXHIi
IDogIlxuIjsKKworICAgIGludCBlbmRpbmdMZW5ndGggPSAobV9lbmRpbmcgPT0gRW5kaW5nQ1JM
RikgPyAyIDogMTsKKyAgICBpbnQgbmVlZEZpeCA9IDA7CisKKyAgICAvLyBDYWxjdWxhdGUgdGhl
IGZpbmFsIGxlbmd0aC4KKyAgICBpbnQgY2FsY3VsYXRlZExlbmd0aCA9IGZyb20ubGVuZ3RoKCk7
CisgICAgY29uc3QgY2hhciogcCA9IGZyb20uZGF0YSgpOworICAgIHdoaWxlIChjaGFyIGMgPSAq
cCsrKSB7CisgICAgICAgIGlmIChjID09ICdccicpIHsKKyAgICAgICAgICAgIC8vIFNhZmUgdG8g
bG9vayBhaGVhZCBiZWNhdXNlIG9mIHRyYWlsaW5nICdcMCcuCisgICAgICAgICAgICBpZiAoKnAg
PT0gJ1xuJyAmJiBtX2VuZGluZyAhPSBFbmRpbmdDUkxGKSB7CisgICAgICAgICAgICAgICAgY2Fs
Y3VsYXRlZExlbmd0aCArPSAoZW5kaW5nTGVuZ3RoIC0gMik7CisgICAgICAgICAgICAgICAgKytu
ZWVkRml4OworICAgICAgICAgICAgfSBlbHNlIGlmIChtX2VuZGluZyAhPSBFbmRpbmdDUikgewor
ICAgICAgICAgICAgICAgIGNhbGN1bGF0ZWRMZW5ndGggKz0gKGVuZGluZ0xlbmd0aCAtIDEpOwor
ICAgICAgICAgICAgICAgICsrbmVlZEZpeDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNl
IGlmIChjID09ICdcbicgJiYgbV9lbmRpbmcgIT0gRW5kaW5nTEYpIHsKKyAgICAgICAgICAgIGNh
bGN1bGF0ZWRMZW5ndGggKz0gKGVuZGluZ0xlbmd0aCAtIDEpOworICAgICAgICAgICAgKytuZWVk
Rml4OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFuZWVkRml4KQorICAgICAgICByZXR1
cm47CisKKyAgICAvLyBDb252ZXJ0IHRoZSBlbmRpbmdzIGFuZCBjcmVhdGUgYSBkYXRhIGJ1ZmZl
ci4KKyAgICBwID0gZnJvbS5kYXRhKCk7CisgICAgY2hhciogcTsKKyAgICBtX2RhdGEgPSBDU3Ry
aW5nOjpuZXdVbmluaXRpYWxpemVkKGNhbGN1bGF0ZWRMZW5ndGgsIHEpOworICAgIHdoaWxlIChj
aGFyIGMgPSAqcCsrKSB7CisgICAgICAgIGlmIChjID09ICdccicpIHsKKyAgICAgICAgICAgIGlm
ICgqcCA9PSAnXG4nICYmIG1fZW5kaW5nICE9IEVuZGluZ0NSTEYpIHsKKyAgICAgICAgICAgICAg
ICBtZW1jcHkocSwgZW5kaW5nQ2hhcnMsIGVuZGluZ0xlbmd0aCk7CisgICAgICAgICAgICAgICAg
cSArPSBlbmRpbmdMZW5ndGg7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCpwICE9ICdcbicgJiYg
bV9lbmRpbmcgIT0gRW5kaW5nQ1IpIHsKKyAgICAgICAgICAgICAgICBtZW1jcHkocSwgZW5kaW5n
Q2hhcnMsIGVuZGluZ0xlbmd0aCk7CisgICAgICAgICAgICAgICAgcSArPSBlbmRpbmdMZW5ndGg7
CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoYyA9PSAnXG4nICYmIG1fZW5kaW5n
ICE9IEVuZGluZ0xGKSB7CisgICAgICAgICAgICBtZW1jcHkocSwgZW5kaW5nQ2hhcnMsIGVuZGlu
Z0xlbmd0aCk7CisgICAgICAgICAgICBxICs9IGVuZGluZ0xlbmd0aDsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIC8vIExlYXZlIG90aGVyIGNoYXJhY3RlcnMgYWxvbmUuCisgICAgICAg
ICAgICAqcSsrID0gYzsKKyAgICAgICAgfQorICAgIH0KK30KKwordW5zaWduZWQgbG9uZyBsb25n
IFN0cmluZ0Jsb2JJdGVtOjpzaXplKCkgY29uc3QKK3sKKyAgICBlbnN1cmVGaW5hbENTdHJpbmco
KTsKKyAgICByZXR1cm4gbV9kYXRhLmxlbmd0aCgpOworfQorCitjb25zdCBjaGFyKiBTdHJpbmdC
bG9iSXRlbTo6ZGF0YSgpIGNvbnN0Cit7CisgICAgZW5zdXJlRmluYWxDU3RyaW5nKCk7CisgICAg
cmV0dXJuIG1fZGF0YS5kYXRhKCk7Cit9CisKK2NvbnN0IENTdHJpbmcgU3RyaW5nQmxvYkl0ZW06
OmNzdHIoKSBjb25zdAoreworICAgIGVuc3VyZUZpbmFsQ1N0cmluZygpOworICAgIHJldHVybiBt
X2RhdGE7Cit9CisKK1Bhc3NSZWZQdHI8QmxvYkl0ZW0+IFN0cmluZ0Jsb2JJdGVtOjpkZWVwQ29w
eSgpIGNvbnN0Cit7CisgICAgZW5zdXJlRmluYWxDU3RyaW5nKCk7CisgICAgcmV0dXJuIEJsb2JJ
dGVtOjpjcmVhdGVTdHJpbmdJdGVtKENTdHJpbmcobV9kYXRhLmRhdGEoKSwgbV9kYXRhLmxlbmd0
aCgpKSk7Cit9CisKKy8vIEJ5dGVzQXJyYXlCbG9iSXRlbSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIEJ5dGVzQXJyYXlC
bG9iSXRlbTogcHVibGljIEJsb2JJdGVtIHsKK3B1YmxpYzoKKyAgICBCeXRlc0FycmF5QmxvYkl0
ZW0oY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IHNpemUpOworICAgIHZpcnR1YWwgdW5zaWduZWQg
bG9uZyBsb25nIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2J5dGVzQXJyYXkuc2l6ZSgpOyB9Cisg
ICAgdmlydHVhbCBjb25zdCBjaGFyKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlc0FycmF5
LmRhdGEoKTsgfQorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxCbG9iSXRlbT4gZGVlcENvcHkoKSBj
b25zdDsKKworcHJpdmF0ZToKKyAgICBWZWN0b3I8Y2hhcj4gbV9ieXRlc0FycmF5OworfTsKKwor
Qnl0ZXNBcnJheUJsb2JJdGVtOjpCeXRlc0FycmF5QmxvYkl0ZW0oY29uc3QgY2hhciogZGF0YSwg
c2l6ZV90IHNpemUpCit7CisgICAgbV9ieXRlc0FycmF5LmFwcGVuZChkYXRhLCBzaXplKTsKK30K
KworUGFzc1JlZlB0cjxCbG9iSXRlbT4gQnl0ZXNBcnJheUJsb2JJdGVtOjpkZWVwQ29weSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIEJsb2JJdGVtOjpjcmVhdGVCeXRlQXJyYXlJdGVtKG1fYnl0ZXNB
cnJheS5kYXRhKCksIG1fYnl0ZXNBcnJheS5zaXplKCkpOworfQorCisjaWYgRU5BQkxFKEJMT0Jf
U0xJQ0UpCisKKy8vIFJhbmdlQmxvYkl0ZW0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIFJhbmdlQmxvYkl0ZW0g
OiBwdWJsaWMgQmxvYkl0ZW0geworcHVibGljOgorICAgIFJhbmdlQmxvYkl0ZW0oUGFzc1JlZlB0
cjxCbG9iSXRlbT4gaXRlbSwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoKTsKKyAg
ICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9sZW5n
dGg7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNSYW5nZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0K
KyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGRhdGEoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wg
ZXF1YWxzKGNvbnN0IEJsb2JJdGVtKikgY29uc3Q7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEJs
b2JJdGVtPiBkZWVwQ29weSgpIGNvbnN0OworCitwcml2YXRlOgorICAgIFJlZlB0cjxCbG9iSXRl
bT4gbV9pdGVtOworICAgIGxvbmcgbG9uZyBtX3N0YXJ0OworICAgIGxvbmcgbG9uZyBtX2xlbmd0
aDsKK307CisKK1JhbmdlQmxvYkl0ZW06OlJhbmdlQmxvYkl0ZW0oUGFzc1JlZlB0cjxCbG9iSXRl
bT4gaXRlbSwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoKQorICAgIDogbV9pdGVt
KGl0ZW0pCisgICAgLCBtX3N0YXJ0KHN0YXJ0KQorICAgICwgbV9sZW5ndGgobGVuZ3RoKQorewor
ICAgIEFTU0VSVCghbV9pdGVtLT5pc0ZpbGUoKSk7CisgICAgaWYgKG1faXRlbS0+aXNSYW5nZSgp
KSB7CisgICAgICAgIFJhbmdlQmxvYkl0ZW0qIHIgPSBzdGF0aWNfY2FzdDxSYW5nZUJsb2JJdGVt
Kj4obV9pdGVtLmdldCgpKTsKKyAgICAgICAgbV9zdGFydCArPSByLT5tX3N0YXJ0OworICAgICAg
ICBtX2l0ZW0gPSByLT5tX2l0ZW07CisgICAgICAgIEFTU0VSVCghbV9pdGVtLT5pc1JhbmdlKCkp
OworICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihtX3N0YXJ0
ICsgbV9sZW5ndGgpIDw9IG1faXRlbS0+c2l6ZSgpKTsKKyAgICB9Cit9CisKK2NvbnN0IGNoYXIq
IFJhbmdlQmxvYkl0ZW06OmRhdGEoKSBjb25zdAoreworICAgIHJldHVybiBtX2l0ZW0tPmRhdGEo
KSArIG1fc3RhcnQ7Cit9CisKK1Bhc3NSZWZQdHI8QmxvYkl0ZW0+IFJhbmdlQmxvYkl0ZW06OmRl
ZXBDb3B5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gQmxvYkl0ZW06OmNyZWF0ZVJhbmdlSXRlbSht
X2l0ZW0tPmRlZXBDb3B5KCksIG1fc3RhcnQsIG1fbGVuZ3RoKTsKK30KKworYm9vbCBSYW5nZUJs
b2JJdGVtOjplcXVhbHMoY29uc3QgQmxvYkl0ZW0qIGIpIGNvbnN0Cit7CisgICAgaWYgKCFCbG9i
SXRlbTo6ZXF1YWxzKGIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgQVNTRVJUKGItPmlz
UmFuZ2UoKSk7CisgICAgY29uc3QgUmFuZ2VCbG9iSXRlbSogciA9IHN0YXRpY19jYXN0PGNvbnN0
IFJhbmdlQmxvYkl0ZW0qPihiKTsKKyAgICBpZiAobV9zdGFydCAhPSByLT5tX3N0YXJ0KQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFtX2l0ZW0tPmVxdWFscyhyLT5tX2l0ZW0uZ2V0
KCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vIEZp
bGVSYW5nZUJsb2JJdGVtIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisKK3N0YXRpYyBjb25zdCBkb3VibGUgaW52YWxpZE1vZGlmaWNh
dGlvblRpbWUgPSAtMTsKKworYm9vbCBpc1ZhbGlkU25hcHNob3RNb2RpZmljYXRpb25UaW1lKGRv
dWJsZSB0aW1lKQoreworICAgIHJldHVybiAhKHRpbWUgPCAwKTsKK30KKworZG91YmxlIGdldEZp
bGVTbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIHRp
bWVfdCBtb2RpZmljYXRpb25UaW1lOworICAgIGlmIChnZXRGaWxlTW9kaWZpY2F0aW9uVGltZShw
YXRoLCBtb2RpZmljYXRpb25UaW1lKSkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJs
ZT4obW9kaWZpY2F0aW9uVGltZSk7CisgICAgcmV0dXJuIGludmFsaWRNb2RpZmljYXRpb25UaW1l
OworfQorCitjbGFzcyBGaWxlUmFuZ2VCbG9iSXRlbSA6IHB1YmxpYyBCbG9iSXRlbSB7CitwdWJs
aWM6CisgICAgRmlsZVJhbmdlQmxvYkl0ZW0oY29uc3QgU3RyaW5nJiBwYXRoLCBsb25nIGxvbmcg
c3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgsIGRvdWJsZSBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUp
OworCisgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fbGVuZ3RoOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNSYW5nZSgpIGNvbnN0IHsgcmV0dXJu
IHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0OworCisgICAgdmlydHVh
bCBjb25zdCBTdHJpbmcgZmlsZU9yVW5pcXVlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fdW5pcU5h
bWU7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IFN0cmluZyBmaWxlUGF0aCgpIGNvbnN0IHsgcmV0dXJu
IG1fcGF0aDsgfQorICAgIHZpcnR1YWwgbG9uZyBsb25nIGZpbGVTdGFydCgpIGNvbnN0IHsgcmV0
dXJuIG1fZmlsZVN0YXJ0OyB9CisgICAgdmlydHVhbCBkb3VibGUgZmlsZVNuYXBzaG90TW9kaWZp
Y2F0aW9uVGltZSgpIGNvbnN0IHsgcmV0dXJuIG1fc25hcHNob3RNb2RpZmljYXRpb25UaW1lOyB9
CisKKyAgICB2aXJ0dWFsIGJvb2wgZXF1YWxzKGNvbnN0IEJsb2JJdGVtKikgY29uc3Q7CisgICAg
dmlydHVhbCBQYXNzUmVmUHRyPEJsb2JJdGVtPiBkZWVwQ29weSgpIGNvbnN0OworCitwcml2YXRl
OgorICAgIFN0cmluZyBtX3BhdGg7CisgICAgbG9uZyBsb25nIG1fZmlsZVN0YXJ0OworICAgIGxv
bmcgbG9uZyBtX2xlbmd0aDsKKyAgICBTdHJpbmcgbV91bmlxTmFtZTsKKworICAgIGRvdWJsZSBt
X3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZTsKK307CisKK0ZpbGVSYW5nZUJsb2JJdGVtOjpGaWxl
UmFuZ2VCbG9iSXRlbShjb25zdCBTdHJpbmcmIHBhdGgsIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBs
b25nIGxlbmd0aCwgZG91YmxlIG1vZGlmaWNhdGlvblRpbWUpCisgICAgOiBtX3BhdGgocGF0aCkK
KyAgICAsIG1fZmlsZVN0YXJ0KHN0YXJ0KQorICAgICwgbV9sZW5ndGgobGVuZ3RoKQorICAgICwg
bV9zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUobW9kaWZpY2F0aW9uVGltZSkKK3sKKyAgICBtX3Vu
aXFOYW1lID0gIkJsb2IiICsgY3JlYXRlQ2Fub25pY2FsVVVJRFN0cmluZygpOworICAgIG1fdW5p
cU5hbWUucmVwbGFjZSgiLSIsICIiKTsgLy8gRm9yIHNhZnR5LCByZW1vdmUgJy0nIGZyb20gdGhl
IGZpbGVuYW1lIHNuY2Ugc29tZSBzZXJ2ZXJzIG1heSBub3QgbGlrZSBpdC4KK30KKworUGFzc1Jl
ZlB0cjxCbG9iSXRlbT4gRmlsZVJhbmdlQmxvYkl0ZW06OmRlZXBDb3B5KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gQmxvYkl0ZW06OmNyZWF0ZUZpbGVSYW5nZUl0ZW0obV9wYXRoLCBtX2ZpbGVTdGFy
dCwgbV9sZW5ndGgsIG1fc25hcHNob3RNb2RpZmljYXRpb25UaW1lKTsKK30KKworYm9vbCBGaWxl
UmFuZ2VCbG9iSXRlbTo6ZXF1YWxzKGNvbnN0IEJsb2JJdGVtKiBiKSBjb25zdAoreworICAgIGlm
ICghQmxvYkl0ZW06OmVxdWFscyhiKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEFTU0VS
VChiLT5pc0ZpbGUoKSAmJiBiLT5pc1JhbmdlKCkpOworICAgIGNvbnN0IEZpbGVSYW5nZUJsb2JJ
dGVtKiByID0gc3RhdGljX2Nhc3Q8Y29uc3QgRmlsZVJhbmdlQmxvYkl0ZW0qPihiKTsKKyAgICBp
ZiAobV9zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUgIT0gci0+bV9zbmFwc2hvdE1vZGlmaWNhdGlv
blRpbWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBGaWxlUmFuZ2VCbG9iSXRlbTo6aXNWYWxpZCgpIGNvbnN0Cit7CisgICAgaWYgKG1fc25hcHNo
b3RNb2RpZmljYXRpb25UaW1lID09IEJsb2JJdGVtOjpkb05vdENoZWNrRmlsZUNoYW5nZSkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKCFpc1ZhbGlkU25hcHNob3RNb2RpZmljYXRpb25U
aW1lKG1fc25hcHNob3RNb2RpZmljYXRpb25UaW1lKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIHRpbWVfdCBtb2RpZmljYXRpb25UaW1lOworICAgIGlmIChtX3BhdGguaXNFbXB0eSgpIHx8
ICFnZXRGaWxlTW9kaWZpY2F0aW9uVGltZShtX3BhdGgsIG1vZGlmaWNhdGlvblRpbWUpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIChtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGlt
ZSA9PSBtb2RpZmljYXRpb25UaW1lKTsKK30KKworI2VuZGlmIC8vIEVOQUJMRShCTE9CX1NMSUNF
KQorCisvLyBDcmVhdGUgbWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitQYXNzUmVmUHRyPEJsb2JJdGVtPiBCbG9i
SXRlbTo6Y3JlYXRlRmlsZUl0ZW0oY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIHJldHVybiBh
ZG9wdFJlZihzdGF0aWNfY2FzdDxCbG9iSXRlbSo+KG5ldyBGaWxlQmxvYkl0ZW0ocGF0aCkpKTsK
K30KKworUGFzc1JlZlB0cjxCbG9iSXRlbT4gQmxvYkl0ZW06OmNyZWF0ZVN0cmluZ0l0ZW0oY29u
c3QgU3RyaW5nJiB0ZXh0LCBFbmRpbmdUeXBlIGVuZGluZywgVGV4dEVuY29kaW5nIGVuY29kaW5n
KQoreworICAgIHJldHVybiBhZG9wdFJlZihzdGF0aWNfY2FzdDxCbG9iSXRlbSo+KG5ldyBTdHJp
bmdCbG9iSXRlbSh0ZXh0LCBlbmRpbmcsIGVuY29kaW5nKSkpOworfQorCitQYXNzUmVmUHRyPEJs
b2JJdGVtPiBCbG9iSXRlbTo6Y3JlYXRlU3RyaW5nSXRlbShjb25zdCBDU3RyaW5nJiB0ZXh0KQor
eworICAgIHJldHVybiBhZG9wdFJlZihzdGF0aWNfY2FzdDxCbG9iSXRlbSo+KG5ldyBTdHJpbmdC
bG9iSXRlbSh0ZXh0KSkpOworfQorCitQYXNzUmVmUHRyPEJsb2JJdGVtPiBCbG9iSXRlbTo6Y3Jl
YXRlQnl0ZUFycmF5SXRlbShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBy
ZXR1cm4gYWRvcHRSZWYoc3RhdGljX2Nhc3Q8QmxvYkl0ZW0qPihuZXcgQnl0ZXNBcnJheUJsb2JJ
dGVtKGRhdGEsIHNpemUpKSk7Cit9CisKKyNpZiBFTkFCTEUoQkxPQl9TTElDRSkKK1Bhc3NSZWZQ
dHI8QmxvYkl0ZW0+IEJsb2JJdGVtOjpjcmVhdGVSYW5nZUl0ZW0oUGFzc1JlZlB0cjxCbG9iSXRl
bT4gaXRlbSwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoKQoreworICAgIGlmICgh
c3RhcnQgJiYgaXRlbS0+c2l6ZSgpIDw9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4o
bGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIGl0ZW07CisgICAgaWYgKGl0ZW0tPmlzRmlsZSgpKSB7
CisgICAgICAgIGlmIChpdGVtLT5pc1JhbmdlKCkpIHsKKyAgICAgICAgICAgIGlmIChzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KHN0YXJ0ICsgbGVuZ3RoKSA+IGl0ZW0tPnNpemUoKSkK
KyAgICAgICAgICAgICAgICBsZW5ndGggPSBpdGVtLT5zaXplKCkgLSBzdGFydDsKKyAgICAgICAg
ICAgIHN0YXJ0ICs9IGl0ZW0tPmZpbGVTdGFydCgpOworICAgICAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKHN0YXRpY19jYXN0PEJsb2JJdGVtKj4obmV3IEZpbGVSYW5nZUJsb2JJdGVtKGl0ZW0tPmZp
bGVQYXRoKCksIHN0YXJ0LCBsZW5ndGgsIGl0ZW0tPmZpbGVTbmFwc2hvdE1vZGlmaWNhdGlvblRp
bWUoKSkpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYWRvcHRSZWYoc3RhdGljX2Nhc3Q8
QmxvYkl0ZW0qPihuZXcgRmlsZVJhbmdlQmxvYkl0ZW0oaXRlbS0+ZmlsZVBhdGgoKSwgc3RhcnQs
IGxlbmd0aCwgZ2V0RmlsZVNuYXBzaG90TW9kaWZpY2F0aW9uVGltZShpdGVtLT5maWxlUGF0aCgp
KSkpKTsKKyAgICB9CisgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oc3Rh
cnQgKyBsZW5ndGgpID4gaXRlbS0+c2l6ZSgpKQorICAgICAgICBsZW5ndGggPSBpdGVtLT5zaXpl
KCkgLSBzdGFydDsKKyAgICByZXR1cm4gYWRvcHRSZWYoc3RhdGljX2Nhc3Q8QmxvYkl0ZW0qPihu
ZXcgUmFuZ2VCbG9iSXRlbShpdGVtLCBzdGFydCwgbGVuZ3RoKSkpOworfQorCitQYXNzUmVmUHRy
PEJsb2JJdGVtPiBCbG9iSXRlbTo6Y3JlYXRlRmlsZVJhbmdlSXRlbShjb25zdCBTdHJpbmcmIHBh
dGgsIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCwgZG91YmxlIHNuYXBzaG90TW9k
aWZpY2F0aW9uVGltZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoc3RhdGljX2Nhc3Q8QmxvYkl0
ZW0qPihuZXcgRmlsZVJhbmdlQmxvYkl0ZW0ocGF0aCwgc3RhcnQsIGxlbmd0aCwgc25hcHNob3RN
b2RpZmljYXRpb25UaW1lKSkpOworfQorI2VuZGlmIC8vIEVOQUJMRShCTE9CX1NMSUNFKQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvQmxvYkl0ZW0u
aCBiL1dlYkNvcmUvaHRtbC9CbG9iSXRlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJhZmEzNWI3Y2U4MzdhMzVh
YzAzN2QzOGI3NzE0YWUzY2FlZDA3ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2h0bWwv
QmxvYkl0ZW0uaApAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
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
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEJsb2JJdGVtX2gKKyNkZWZpbmUg
QmxvYkl0ZW1faAorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJUZXh0
RW5jb2RpbmcuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBTdHJpbmcgZW5kaW5nIHR5
cGVzLgorZW51bSBFbmRpbmdUeXBlIHsKKyAgICBFbmRpbmdUcmFuc3BhcmVudCA9IDAsCisgICAg
RW5kaW5nTEYsCisgICAgRW5kaW5nQ1IsCisgICAgRW5kaW5nQ1JMRiwKK307CisKKy8vIEEgYmFz
ZSBpbnRlcmZhY2UgZm9yIGFsbCAnYmxvYicgaXRlbXMgKGZpbGUsIHN0cmluZyBvciBieXRlcyBh
cnJheSkuCitjbGFzcyBCbG9iSXRlbSA6IHB1YmxpYyBSZWZDb3VudGVkPEJsb2JJdGVtPiB7Citw
dWJsaWM6CisgICAgdmlydHVhbCB+QmxvYkl0ZW0oKSB7IH0KKyAgICB2aXJ0dWFsIHVuc2lnbmVk
IGxvbmcgbG9uZyBzaXplKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgY29uc3QgY2hhciogZGF0
YSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICBjaGFyKiByZWxlYXNlQnVmZmVyKCkgY29uc3Q7
CisKKyAgICAvLyBGYWN0b3J5IG1ldGhvZHMuCisgICAgc3RhdGljIFBhc3NSZWZQdHI8QmxvYkl0
ZW0+IGNyZWF0ZUZpbGVJdGVtKGNvbnN0IFN0cmluZyYgcGF0aCk7CisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8QmxvYkl0ZW0+IGNyZWF0ZVN0cmluZ0l0ZW0oY29uc3QgU3RyaW5nJiB0ZXh0LCBFbmRp
bmdUeXBlLCBUZXh0RW5jb2RpbmcpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJsb2JJdGVtPiBj
cmVhdGVTdHJpbmdJdGVtKGNvbnN0IENTdHJpbmcmIHRleHQpOworICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEJsb2JJdGVtPiBjcmVhdGVCeXRlQXJyYXlJdGVtKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVf
dCBzaXplKTsKKyNpZiBFTkFCTEUoQkxPQl9TTElDRSkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxC
bG9iSXRlbT4gY3JlYXRlUmFuZ2VJdGVtKFBhc3NSZWZQdHI8QmxvYkl0ZW0+IGl0ZW0sIGxvbmcg
bG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Qmxv
Ykl0ZW0+IGNyZWF0ZUZpbGVSYW5nZUl0ZW0oY29uc3QgU3RyaW5nJiBwYXRoLCBsb25nIGxvbmcg
c3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgsIGRvdWJsZSBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUp
OworI2VuZGlmIC8vIEVOQUJMRShCTE9CX1NMSUNFKQorCisgICAgLy8gUmV0dXJucyBmYWxzZSBp
ZiB0aGUgZGF0YSBoYXMgYmVjb21lIHN0YWxlIG9yIGludmFsaWQuCisgICAgdmlydHVhbCBib29s
IGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAgICAvLyBGb3Igc3RyaW5nIGl0
ZW1zLgorICAgIHZpcnR1YWwgY29uc3QgQ1N0cmluZyBjc3RyKCkgY29uc3QgeyByZXR1cm4gQ1N0
cmluZygpOyB9CisKKyAgICAvLyBGb3IgZmlsZS1iYXNlZCBpdGVtcy4KKyAgICB2aXJ0dWFsIGNv
bnN0IFN0cmluZyBmaWxlUGF0aCgpIGNvbnN0IHsgcmV0dXJuIFN0cmluZygpOyB9CisgICAgdmly
dHVhbCBjb25zdCBTdHJpbmcgZmlsZU9yVW5pcXVlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIFN0cmlu
ZygpOyB9CisKKyAgICAvLyBSZXR1cm5zIHRydWUgZm9yIGZpbGUtYmFzZWQgaXRlbXMuCisgICAg
Ym9vbCBpc0ZpbGUoKSBjb25zdCB7IHJldHVybiAhZmlsZVBhdGgoKS5pc0VtcHR5KCk7IH0KKwor
ICAgIC8vIFJldHVybnMgdHJ1ZSBmb3Igc2xpY2VkIGl0ZW1zLgorICAgIHZpcnR1YWwgYm9vbCBp
c1JhbmdlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworI2lmIEVOQUJMRShCTE9CX1NMSUNF
KQorICAgIC8vIEZvciBmaWxlLWJhc2VkIHNsaWNlZCBpdGVtcy4KKyAgICBzdGF0aWMgY29uc3Qg
ZG91YmxlIGRvTm90Q2hlY2tGaWxlQ2hhbmdlOworICAgIHZpcnR1YWwgbG9uZyBsb25nIGZpbGVT
dGFydCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGRvdWJsZSBmaWxlU25hcHNo
b3RNb2RpZmljYXRpb25UaW1lKCkgY29uc3QgeyByZXR1cm4gZG9Ob3RDaGVja0ZpbGVDaGFuZ2U7
IH0KKyNlbmRpZiAvLyBFTkFCTEUoQkxPQl9TTElDRSkKKworICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxCbG9iSXRlbT4gZGVlcENvcHkoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGVxdWFs
cyhjb25zdCBCbG9iSXRlbSopIGNvbnN0OworCitwcm90ZWN0ZWQ6CisgICAgQmxvYkl0ZW0oKSB7
IH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEJsb2JJdGVtX2gK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9GaWxlLmNwcCBiL1dlYkNvcmUvaHRtbC9GaWxlLmNw
cAppbmRleCA5N2ZkYzQ1NzhkNzRiMjI1ZTU5NDZmNGQ2YWVmMjU2NTI1NDQzYWU0Li4wMGIxNjNm
YmM2NTQ1ODA5ODc2YTBhZWY3MWRhODVjMDI3MWI2NTk2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0
bWwvRmlsZS5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0ZpbGUuY3BwCkBAIC0zMSwxNCArMzEsMjUg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GaWxlOjpGaWxlKGNvbnN0IFN0cmluZyYgcGF0
aCkKLSAgICA6IEJsb2IocGF0aCkKLSAgICAsIG1fbmFtZShwYXRoR2V0RmlsZU5hbWUocGF0aCkp
CitzdGF0aWMgU3RyaW5nIGdldEZpbGVUeXBlRnJvbVBhdGgoY29uc3QgU3RyaW5nJiBwYXRoKQog
ewotICAgIC8vIFdlIGRvbid0IHVzZSBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZvclBh
dGgoKSBiZWNhdXNlIGl0IHJldHVybnMgImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIgdXBvbiBm
YWlsdXJlLgotICAgIGludCBpbmRleCA9IG1fbmFtZS5yZXZlcnNlRmluZCgnLicpOworICAgIGlu
dCBpbmRleCA9IHBhdGgucmV2ZXJzZUZpbmQoJy4nKTsKICAgICBpZiAoaW5kZXggIT0gLTEpCi0g
ICAgICAgIG1fdHlwZSA9IE1JTUVUeXBlUmVnaXN0cnk6OmdldE1JTUVUeXBlRm9yRXh0ZW5zaW9u
KG1fbmFtZS5zdWJzdHJpbmcoaW5kZXggKyAxKSk7CisgICAgICAgIHJldHVybiBNSU1FVHlwZVJl
Z2lzdHJ5OjpnZXRNSU1FVHlwZUZvckV4dGVuc2lvbihwYXRoLnN1YnN0cmluZyhpbmRleCArIDEp
KTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK0ZpbGU6OkZpbGUoY29uc3QgU3RyaW5nJiBw
YXRoKQorICAgIDogQmxvYihnZXRGaWxlVHlwZUZyb21QYXRoKHBhdGgpKQoreworICAgIGFwcGVu
ZEJsb2JJdGVtKEJsb2JJdGVtOjpjcmVhdGVGaWxlSXRlbShwYXRoKSk7CisgICAgQVNTRVJUKGl0
ZW1zKCkuc2l6ZSgpID09IDEgJiYgaXRlbXMoKS5hdCgwKS0+aXNGaWxlKCkpOworfQorCitjb25z
dCBTdHJpbmcgRmlsZTo6bmFtZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKGl0ZW1zKCkuc2l6ZSgp
ID09IDEgJiYgaXRlbXMoKS5hdCgwKS0+aXNGaWxlKCkpOworICAgIHJldHVybiBpdGVtcygpLmF0
KDApLT5maWxlT3JVbmlxdWVOYW1lKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9GaWxlLmggYi9XZWJDb3JlL2h0bWwvRmlsZS5oCmluZGV4
IDA2NWRkODZhN2IxZWJmNzdmYjQwNjQ2ZjljNmU4NzA0NjlkN2ViMDkuLjRjZWNhNjU1OTk2MGNi
ZTNiMDI1NjcyMWViNDc4ZWZkNzhmOTRlMGYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9GaWxl
LmgKKysrIGIvV2ViQ29yZS9odG1sL0ZpbGUuaApAQCAtNDEsMTggKzQxLDE0IEBAIHB1YmxpYzoK
IAogICAgIHZpcnR1YWwgYm9vbCBpc0ZpbGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKLSAg
ICBjb25zdCBTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KLSAgICBjb25z
dCBTdHJpbmcmIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKyAgICBjb25zdCBTdHJp
bmcgbmFtZSgpIGNvbnN0OwogCiAgICAgLy8gRklYTUU6IG9ic29sZXRlIGF0dHJpYnV0ZXMuIFRv
IGJlIHJlbW92ZWQuCi0gICAgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSgpIGNvbnN0IHsgcmV0dXJu
IG1fbmFtZTsgfQorICAgIGNvbnN0IFN0cmluZyBmaWxlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG5h
bWUoKTsgfQogICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBmaWxlU2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IHNpemUoKTsgfQogCiBwcml2YXRlOgogICAgIEZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKTsKLQot
ICAgIFN0cmluZyBtX25hbWU7Ci0gICAgU3RyaW5nIG1fdHlwZTsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9GaWxlU3RyZWFtLmNwcCBiL1dl
YkNvcmUvaHRtbC9GaWxlU3RyZWFtLmNwcAppbmRleCA3MDg5ZjYxNjE1NGU0YjEwYTMyNzczZTAz
MzU2YTc5MzY0NThmOTdmLi4xMGZmNWRmMmFhMDkyY2NkNTI2MmU3ZjU1NzhiMTExODdlOTEzNjdi
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvRmlsZVN0cmVhbS5jcHAKKysrIGIvV2ViQ29yZS9o
dG1sL0ZpbGVTdHJlYW0uY3BwCkBAIC03MiwxOCArNzIsMjIgQEAgdm9pZCBGaWxlU3RyZWFtOjpv
cGVuRm9yUmVhZChCbG9iKiBibG9iKQogICAgIGlmIChpc0hhbmRsZVZhbGlkKG1faGFuZGxlKSkK
ICAgICAgICAgcmV0dXJuOwogCisgICAgQVNTRVJUKGJsb2ItPml0ZW1zKCkuc2l6ZSgpID4gMCk7
CisgICAgUmVmUHRyPEJsb2JJdGVtPiBmaWxlID0gYmxvYi0+aXRlbXMoKS5hdCgwKTsKKyAgICBB
U1NFUlQoZmlsZS0+aXNGaWxlKCkpOworCiAgICAgLy8gQ2hlY2sgaWYgdGhlIGZpbGUgZXhpc3Rz
IGJ5IHF1ZXJ5aW5nIGl0cyBtb2RpZmljYXRpb24gdGltZS4gV2UgY2hvb3NlIG5vdCB0byBjYWxs
IGZpbGVFeGlzdHMoKSBpbiBvcmRlciB0byBzYXZlIGFuCiAgICAgLy8gZXh0cmEgZmlsZSBzeXN0
ZW0gY2FsbCB3aGVuIHRoZSBtb2RpZmljYXRpb24gdGltZSBpcyBuZWVkZWQgdG8gY2hlY2sgdGhl
IHZhbGlkaXR5IG9mIHRoZSBzbGljZWQgZmlsZSBibG9iLgogICAgIC8vIFBlciB0aGUgc3BlYywg
d2UgbmVlZCB0byByZXR1cm4gZGlmZmVyZW50IGVycm9yIGNvZGVzIHRvIGRpZmZlcmVudGlhdGUg
YmV0d2VlbiBub24tZXhpc3RlbnQgZmlsZSBhbmQgcGVybWlzc2lvbiBlcnJvci4KICAgICAvLyBv
cGVuRmlsZSgpIGNvdWxkIG5vdCB0ZWxsIHVzZSB0aGUgZmFpbHVyZSByZWFzb24uCiAgICAgdGlt
ZV90IGN1cnJlbnRNb2RpZmljYXRpb25UaW1lOwotICAgIGlmICghZ2V0RmlsZU1vZGlmaWNhdGlv
blRpbWUoYmxvYi0+cGF0aCgpLCBjdXJyZW50TW9kaWZpY2F0aW9uVGltZSkpIHsKKyAgICBpZiAo
IWdldEZpbGVNb2RpZmljYXRpb25UaW1lKGZpbGUtPmZpbGVQYXRoKCksIGN1cnJlbnRNb2RpZmlj
YXRpb25UaW1lKSkgewogICAgICAgICBtX2NsaWVudC0+ZGlkRmFpbChOT1RfRk9VTkRfRVJSKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIC8vIE9wZW4gdGhlIGZpbGUgYmxvYi4KLSAg
ICBtX2hhbmRsZSA9IG9wZW5GaWxlKGJsb2ItPnBhdGgoKSwgT3BlbkZvclJlYWQpOworICAgIG1f
aGFuZGxlID0gb3BlbkZpbGUoZmlsZS0+ZmlsZVBhdGgoKSwgT3BlbkZvclJlYWQpOwogICAgIGlm
ICghaXNIYW5kbGVWYWxpZChtX2hhbmRsZSkpIHsKICAgICAgICAgbV9jbGllbnQtPmRpZEZhaWwo
Tk9UX1JFQURBQkxFX0VSUik7CiAgICAgICAgIHJldHVybjsKQEAgLTkxLDE0ICs5NSwxNCBAQCB2
b2lkIEZpbGVTdHJlYW06Om9wZW5Gb3JSZWFkKEJsb2IqIGJsb2IpCiAKICNpZiBFTkFCTEUoQkxP
Ql9TTElDRSkKICAgICAvLyBDaGVjayB0aGUgbW9kaWZpY2F0aW9udCB0aW1lIGZvciB0aGUgcG9z
c2libGUgZmlsZSBjaGFuZ2UuCi0gICAgaWYgKGJsb2ItPm1vZGlmaWNhdGlvblRpbWUoKSAhPSBC
bG9iOjpkb05vdENoZWNrRmlsZUNoYW5nZSAmJiBzdGF0aWNfY2FzdDx0aW1lX3Q+KGJsb2ItPm1v
ZGlmaWNhdGlvblRpbWUoKSkgIT0gY3VycmVudE1vZGlmaWNhdGlvblRpbWUpIHsKKyAgICBpZiAo
ZmlsZS0+ZmlsZVNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSgpICE9IEJsb2JJdGVtOjpkb05vdENo
ZWNrRmlsZUNoYW5nZSAmJiBzdGF0aWNfY2FzdDx0aW1lX3Q+KGZpbGUtPmZpbGVTbmFwc2hvdE1v
ZGlmaWNhdGlvblRpbWUoKSkgIT0gY3VycmVudE1vZGlmaWNhdGlvblRpbWUpIHsKICAgICAgICAg
bV9jbGllbnQtPmRpZEZhaWwoTk9UX1JFQURBQkxFX0VSUik7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKICAgICAvLyBKdW1wIHRvIHRoZSBiZWdpbm5pbmcgcG9zaXRpb24gaWYgdGhlIGZpbGUg
aGFzIGJlZW4gc2xpY2VkLgotICAgIGlmIChibG9iLT5zdGFydCgpID4gMCkgewotICAgICAgICBp
ZiAoIXNlZWtGaWxlKG1faGFuZGxlLCBibG9iLT5zdGFydCgpLCBTZWVrRnJvbUJlZ2lubmluZykp
IHsKKyAgICBpZiAoZmlsZS0+ZmlsZVN0YXJ0KCkgPiAwKSB7CisgICAgICAgIGlmIChzZWVrRmls
ZShtX2hhbmRsZSwgZmlsZS0+ZmlsZVN0YXJ0KCksIFNlZWtGcm9tQmVnaW5uaW5nKSA8IDApIHsK
ICAgICAgICAgICAgIG1fY2xpZW50LT5kaWRGYWlsKE5PVF9SRUFEQUJMRV9FUlIpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0xMDYsMTQgKzExMCw3IEBAIHZvaWQgRmlsZVN0
cmVhbTo6b3BlbkZvclJlYWQoQmxvYiogYmxvYikKICNlbmRpZgogCiAgICAgLy8gR2V0IHRoZSBz
aXplLgotI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgIG1fdG90YWxCeXRlc1RvUmVhZCA9IGJs
b2ItPmxlbmd0aCgpOwotICAgIGlmIChtX3RvdGFsQnl0ZXNUb1JlYWQgPT0gQmxvYjo6dG9FbmRP
ZkZpbGUpCi0gICAgICAgIG1fdG90YWxCeXRlc1RvUmVhZCA9IGJsb2ItPnNpemUoKSAtIGJsb2It
PnN0YXJ0KCk7Ci0jZWxzZQotICAgIG1fdG90YWwgPSBibG9iLT5zaXplKCk7Ci0jZW5kaWYKLQor
ICAgIG1fdG90YWxCeXRlc1RvUmVhZCA9IGZpbGUtPnNpemUoKTsKICAgICBtX2NsaWVudC0+ZGlk
R2V0U2l6ZShtX3RvdGFsQnl0ZXNUb1JlYWQpOwogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0
bWwvRm9ybURhdGFMaXN0LmNwcCBiL1dlYkNvcmUvaHRtbC9Gb3JtRGF0YUxpc3QuY3BwCmluZGV4
IDI4MWM5ZmU0MThlMWM0ODMzYmI4N2Y4MmY3NGYxY2M0ZDcyMmQ1N2MuLjNkYmE5MzdhOGY2OWRk
NzY5YWI0YWEyMWQwOGQzZTE1YWQ0ZmU0MzYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9Gb3Jt
RGF0YUxpc3QuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9Gb3JtRGF0YUxpc3QuY3BwCkBAIC0yOCw2
NCArMjgsMjIgQEAgRm9ybURhdGFMaXN0OjpGb3JtRGF0YUxpc3QoY29uc3QgVGV4dEVuY29kaW5n
JiBjKQogewogfQogCi12b2lkIEZvcm1EYXRhTGlzdDo6YXBwZW5kU3RyaW5nKGNvbnN0IENTdHJp
bmcmIHMpCit2b2lkIEZvcm1EYXRhTGlzdDo6YXBwZW5kU3RyaW5nKGNvbnN0IFN0cmluZyYgcykK
IHsKLSAgICBtX2xpc3QuYXBwZW5kKHMpOworICAgIG1fbGlzdC5hcHBlbmQoQmxvYkl0ZW06OmNy
ZWF0ZVN0cmluZ0l0ZW0ocywgRW5kaW5nQ1JMRiwgbV9lbmNvZGluZykpOwogfQogCi0vLyBDaGFu
Z2UgcGxhaW4gQ1IgYW5kIHBsYWluIExGIHRvIENSTEYgcGFpcnMuCi1zdGF0aWMgQ1N0cmluZyBm
aXhMaW5lQnJlYWtzKGNvbnN0IENTdHJpbmcmIHMpCit2b2lkIEZvcm1EYXRhTGlzdDo6YXBwZW5k
U3RyaW5nKGNvbnN0IENTdHJpbmcmIHMpCiB7Ci0gICAgLy8gQ29tcHV0ZSB0aGUgbGVuZ3RoLgot
ICAgIHVuc2lnbmVkIG5ld0xlbiA9IDA7Ci0gICAgY29uc3QgY2hhciogcCA9IHMuZGF0YSgpOwot
ICAgIHdoaWxlIChjaGFyIGMgPSAqcCsrKSB7Ci0gICAgICAgIGlmIChjID09ICdccicpIHsKLSAg
ICAgICAgICAgIC8vIFNhZmUgdG8gbG9vayBhaGVhZCBiZWNhdXNlIG9mIHRyYWlsaW5nICdcMCcu
Ci0gICAgICAgICAgICBpZiAoKnAgIT0gJ1xuJykgewotICAgICAgICAgICAgICAgIC8vIFR1cm4g
Q1IgaW50byBDUkxGLgotICAgICAgICAgICAgICAgIG5ld0xlbiArPSAyOwotICAgICAgICAgICAg
fQotICAgICAgICB9IGVsc2UgaWYgKGMgPT0gJ1xuJykgewotICAgICAgICAgICAgLy8gVHVybiBM
RiBpbnRvIENSTEYuCi0gICAgICAgICAgICBuZXdMZW4gKz0gMjsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIC8vIExlYXZlIG90aGVyIGNoYXJhY3RlcnMgYWxvbmUuCi0gICAgICAgICAg
ICBuZXdMZW4gKz0gMTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAobmV3TGVuID09IHMubGVu
Z3RoKCkpIHsKLSAgICAgICAgcmV0dXJuIHM7Ci0gICAgfQotICAgIAotICAgIC8vIE1ha2UgYSBj
b3B5IG9mIHRoZSBzdHJpbmcuCi0gICAgcCA9IHMuZGF0YSgpOwotICAgIGNoYXIqIHE7Ci0gICAg
Q1N0cmluZyByZXN1bHQgPSBDU3RyaW5nOjpuZXdVbmluaXRpYWxpemVkKG5ld0xlbiwgcSk7Ci0g
ICAgd2hpbGUgKGNoYXIgYyA9ICpwKyspIHsKLSAgICAgICAgaWYgKGMgPT0gJ1xyJykgewotICAg
ICAgICAgICAgLy8gU2FmZSB0byBsb29rIGFoZWFkIGJlY2F1c2Ugb2YgdHJhaWxpbmcgJ1wwJy4K
LSAgICAgICAgICAgIGlmICgqcCAhPSAnXG4nKSB7Ci0gICAgICAgICAgICAgICAgLy8gVHVybiBD
UiBpbnRvIENSTEYuCi0gICAgICAgICAgICAgICAgKnErKyA9ICdccic7Ci0gICAgICAgICAgICAg
ICAgKnErKyA9ICdcbic7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoYyA9PSAn
XG4nKSB7Ci0gICAgICAgICAgICAvLyBUdXJuIExGIGludG8gQ1JMRi4KLSAgICAgICAgICAgICpx
KysgPSAnXHInOwotICAgICAgICAgICAgKnErKyA9ICdcbic7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAvLyBMZWF2ZSBvdGhlciBjaGFyYWN0ZXJzIGFsb25lLgotICAgICAgICAgICAg
KnErKyA9IGM7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBtX2xp
c3QuYXBwZW5kKEJsb2JJdGVtOjpjcmVhdGVTdHJpbmdJdGVtKHMpKTsKIH0KIAotdm9pZCBGb3Jt
RGF0YUxpc3Q6OmFwcGVuZFN0cmluZyhjb25zdCBTdHJpbmcmIHMpCit2b2lkIEZvcm1EYXRhTGlz
dDo6YXBwZW5kQmxvYihjb25zdCBTdHJpbmcmIGtleSwgUGFzc1JlZlB0cjxCbG9iPiBibG9iKQog
ewotICAgIENTdHJpbmcgY3N0ciA9IGZpeExpbmVCcmVha3MobV9lbmNvZGluZy5lbmNvZGUocy5j
aGFyYWN0ZXJzKCksIHMubGVuZ3RoKCksIEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKSk7Ci0gICAg
bV9saXN0LmFwcGVuZChjc3RyKTsKKyAgICBhcHBlbmRTdHJpbmcoa2V5KTsKKyAgICBjb25zdCBC
bG9iOjpJdGVtTGlzdCYgbGlzdCA9IGJsb2ItPml0ZW1zKCk7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBsaXN0LnNpemUoKTsgKytpKQorICAgICAgICBtX2xpc3QuYXBwZW5kKGxpc3QuYXQo
aSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0Zvcm1E
YXRhTGlzdC5oIGIvV2ViQ29yZS9odG1sL0Zvcm1EYXRhTGlzdC5oCmluZGV4IDhlY2Y2NGVlOTNh
ZDUyNGY0NzkyMWYxZDgyMmY5YTA4YmEwMTNkN2MuLmYxZGNjYzMzOTgyM2U3Y2MxYzU4Yjk1MWUw
MzcxMzVlYmNkYjMwNzYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9Gb3JtRGF0YUxpc3QuaAor
KysgYi9XZWJDb3JlL2h0bWwvRm9ybURhdGFMaXN0LmgKQEAgLTIxLDcgKzIxLDggQEAKICNpZm5k
ZWYgRm9ybURhdGFMaXN0X2gKICNkZWZpbmUgRm9ybURhdGFMaXN0X2gKIAotI2luY2x1ZGUgIkJs
b2IuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiRmlsZS5oIgogI2lu
Y2x1ZGUgIlRleHRFbmNvZGluZy5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIApA
QCAtNDYsMjQgKzQ3LDE4IEBAIHB1YmxpYzoKICAgICAgICAgYXBwZW5kU3RyaW5nKGtleSk7CiAg
ICAgICAgIGFwcGVuZFN0cmluZyhTdHJpbmc6Om51bWJlcih2YWx1ZSkpOwogICAgIH0KLSAgICB2
b2lkIGFwcGVuZEJsb2IoY29uc3QgU3RyaW5nJiBrZXksIFBhc3NSZWZQdHI8QmxvYj4gYmxvYikK
LSAgICB7Ci0gICAgICAgIGFwcGVuZFN0cmluZyhrZXkpOwotICAgICAgICBtX2xpc3QuYXBwZW5k
KGJsb2IpOwotICAgIH0KKyAgICB2b2lkIGFwcGVuZEJsb2IoY29uc3QgU3RyaW5nJiBrZXksIFBh
c3NSZWZQdHI8QmxvYj4gYmxvYik7CiAKKyAgICAvLyBBIHNpbXBsZSB3cmFwcGVyIGZvciBCbG9i
SXRlbS4KICAgICBjbGFzcyBJdGVtIHsKICAgICBwdWJsaWM6CiAgICAgICAgIEl0ZW0oKSB7IH0K
LSAgICAgICAgSXRlbShjb25zdCBXVEY6OkNTdHJpbmcmIGRhdGEpIDogbV9kYXRhKGRhdGEpIHsg
fQotICAgICAgICBJdGVtKFBhc3NSZWZQdHI8QmxvYj4gYmxvYikgOiBtX2Jsb2IoYmxvYikgeyB9
Ci0KLSAgICAgICAgY29uc3QgV1RGOjpDU3RyaW5nJiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9k
YXRhOyB9Ci0gICAgICAgIEJsb2IqIGJsb2IoKSBjb25zdCB7IHJldHVybiBtX2Jsb2IuZ2V0KCk7
IH0KKyAgICAgICAgSXRlbShQYXNzUmVmUHRyPEJsb2JJdGVtPiBpdGVtKSA6IG1faXRlbShpdGVt
KSB7IH0KKyAgICAgICAgY29uc3QgV1RGOjpDU3RyaW5nIGRhdGEoKSBjb25zdCB7IHJldHVybiBt
X2l0ZW0tPmNzdHIoKTsgfQorICAgICAgICBjb25zdCBQYXNzUmVmUHRyPEJsb2JJdGVtPiBpdGVt
KCkgY29uc3QgeyByZXR1cm4gbV9pdGVtOyB9CiAKICAgICBwcml2YXRlOgotICAgICAgICBXVEY6
OkNTdHJpbmcgbV9kYXRhOwotICAgICAgICBSZWZQdHI8QmxvYj4gbV9ibG9iOworICAgICAgICBS
ZWZQdHI8QmxvYkl0ZW0+IG1faXRlbTsKICAgICB9OwogCiAgICAgY29uc3QgVmVjdG9yPEl0ZW0+
JiBsaXN0KCkgY29uc3QgeyByZXR1cm4gbV9saXN0OyB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zv
cm1EYXRhLmNwcAppbmRleCA5MTgwMDJhZWZkODFhNjg5MWY5ZjE5YmFmNDRkNzU1OTFmZGZhNDg0
Li44NWFhZGM1ZGU5OGM2MmRiYTA4MmY0YmNhNTk5MjJiMWIyYzNkZThhIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9Gb3JtRGF0YS5jcHAKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJGb3Jt
RGF0YS5oIgogCiAjaW5jbHVkZSAiQmxvYi5oIgorI2luY2x1ZGUgIkJsb2JJdGVtLmgiCiAjaW5j
bHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCiAjaW5jbHVkZSAiRE9N
Rm9ybURhdGEuaCIKQEAgLTMyLDEwICszMywzNCBAQAogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0
cnkuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCi0jaW5j
bHVkZSAiVVVJRC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyNpZiBFTkFCTEUoQkxPQl9T
TElDRSkKK2NvbnN0IGxvbmcgbG9uZyBGb3JtRGF0YUVsZW1lbnQ6OnRvRW5kT2ZGaWxlID0gLTE7
CisjZW5kaWYKKworRm9ybURhdGFFbGVtZW50OjpGb3JtRGF0YUVsZW1lbnQoUGFzc1JlZlB0cjxC
bG9iSXRlbT4gYmxvYkl0ZW0sIGJvb2wgc2hvdWxkR2VuZXJhdGVGaWxlKQorICAgIDogbV9pdGVt
KGJsb2JJdGVtKQorICAgICwgbV90eXBlKG1faXRlbS0+aXNGaWxlKCkgPyBlbmNvZGVkRmlsZSA6
IGRhdGEpCisgICAgLCBtX2RhdGEobV9pdGVtLmdldCgpKQorICAgICwgbV9maWxlbmFtZShtX2l0
ZW0tPmZpbGVQYXRoKCkpCisjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCisgICAgLCBtX2ZpbGVTdGFy
dCgwKQorICAgICwgbV9maWxlTGVuZ3RoKHRvRW5kT2ZGaWxlKQorICAgICwgbV9leHBlY3RlZEZp
bGVNb2RpZmljYXRpb25UaW1lKDApCisjZW5kaWYKKyAgICAsIG1fc2hvdWxkR2VuZXJhdGVGaWxl
KHNob3VsZEdlbmVyYXRlRmlsZSkKK3sKKyNpZiBFTkFCTEUoQkxPQl9TTElDRSkKKyAgICBpZiAo
bV9pdGVtLT5pc1JhbmdlKCkgJiYgbV9pdGVtLT5pc0ZpbGUoKSkgeworICAgICAgICBtX2ZpbGVT
dGFydCA9IG1faXRlbS0+ZmlsZVN0YXJ0KCk7CisgICAgICAgIG1fZmlsZUxlbmd0aCA9IG1faXRl
bS0+c2l6ZSgpOworICAgICAgICBtX2V4cGVjdGVkRmlsZU1vZGlmaWNhdGlvblRpbWUgPSBtX2l0
ZW0tPmZpbGVTbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUoKTsKKyAgICB9CisjZW5kaWYKK30KKwog
aW5saW5lIEZvcm1EYXRhOjpGb3JtRGF0YSgpCiAgICAgOiBtX2lkZW50aWZpZXIoMCkKICAgICAs
IG1faGFzR2VuZXJhdGVkRmlsZXMoZmFsc2UpCkBAIC04NSw3ICsxMTAsNyBAQCBQYXNzUmVmUHRy
PEZvcm1EYXRhPiBGb3JtRGF0YTo6Y3JlYXRlKGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBzaXpl
KQogUGFzc1JlZlB0cjxGb3JtRGF0YT4gRm9ybURhdGE6OmNyZWF0ZShjb25zdCBDU3RyaW5nJiBz
dHJpbmcpCiB7CiAgICAgUmVmUHRyPEZvcm1EYXRhPiByZXN1bHQgPSBjcmVhdGUoKTsKLSAgICBy
ZXN1bHQtPmFwcGVuZERhdGEoc3RyaW5nLmRhdGEoKSwgc3RyaW5nLmxlbmd0aCgpKTsKKyAgICBy
ZXN1bHQtPmFwcGVuZFN0cmluZyhzdHJpbmcpOwogICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgp
OwogfQogCkBAIC0xMjUsNDUgKzE1MCw0MiBAQCBQYXNzUmVmUHRyPEZvcm1EYXRhPiBGb3JtRGF0
YTo6ZGVlcENvcHkoKSBjb25zdAogICAgIGZvcm1EYXRhLT5tX2VsZW1lbnRzLnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkobik7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuOyArK2kpIHsKICAg
ICAgICAgY29uc3QgRm9ybURhdGFFbGVtZW50JiBlID0gbV9lbGVtZW50c1tpXTsKLSAgICAgICAg
c3dpdGNoIChlLm1fdHlwZSkgewotICAgICAgICBjYXNlIEZvcm1EYXRhRWxlbWVudDo6ZGF0YToK
LSAgICAgICAgICAgIGZvcm1EYXRhLT5tX2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVsZW1lbnQo
ZS5tX2RhdGEpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEZvcm1EYXRhRWxl
bWVudDo6ZW5jb2RlZEZpbGU6Ci0jaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgICAgICAgICBm
b3JtRGF0YS0+bV9lbGVtZW50cy5hcHBlbmQoRm9ybURhdGFFbGVtZW50KGUubV9maWxlbmFtZSwg
ZS5tX2ZpbGVTdGFydCwgZS5tX2ZpbGVMZW5ndGgsIGUubV9leHBlY3RlZEZpbGVNb2RpZmljYXRp
b25UaW1lLCBlLm1fc2hvdWxkR2VuZXJhdGVGaWxlKSk7Ci0jZWxzZQotICAgICAgICAgICAgZm9y
bURhdGEtPm1fZWxlbWVudHMuYXBwZW5kKEZvcm1EYXRhRWxlbWVudChlLm1fZmlsZW5hbWUsIGUu
bV9zaG91bGRHZW5lcmF0ZUZpbGUpKTsKLSNlbmRpZgotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KKyAgICAgICAgZm9ybURhdGEtPm1fZWxlbWVudHMuYXBwZW5kKEZvcm1EYXRhRWxlbWVu
dChlLml0ZW0oKS0+ZGVlcENvcHkoKSwgZS5tX3Nob3VsZEdlbmVyYXRlRmlsZSkpOwogICAgIH0K
ICAgICByZXR1cm4gZm9ybURhdGEucmVsZWFzZSgpOwogfQogCiB2b2lkIEZvcm1EYXRhOjphcHBl
bmREYXRhKGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBzaXplKQogewotICAgIGlmIChtX2VsZW1l
bnRzLmlzRW1wdHkoKSB8fCBtX2VsZW1lbnRzLmxhc3QoKS5tX3R5cGUgIT0gRm9ybURhdGFFbGVt
ZW50OjpkYXRhKQotICAgICAgICBtX2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVsZW1lbnQoKSk7
Ci0gICAgRm9ybURhdGFFbGVtZW50JiBlID0gbV9lbGVtZW50cy5sYXN0KCk7Ci0gICAgc2l6ZV90
IG9sZFNpemUgPSBlLm1fZGF0YS5zaXplKCk7Ci0gICAgZS5tX2RhdGEuZ3JvdyhvbGRTaXplICsg
c2l6ZSk7Ci0gICAgbWVtY3B5KGUubV9kYXRhLmRhdGEoKSArIG9sZFNpemUsIGRhdGEsIHNpemUp
OworICAgIG1fZWxlbWVudHMuYXBwZW5kKEZvcm1EYXRhRWxlbWVudChCbG9iSXRlbTo6Y3JlYXRl
Qnl0ZUFycmF5SXRlbShzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZGF0YSksIHNpemUpKSk7Cit9
CisKK3ZvaWQgRm9ybURhdGE6OmFwcGVuZFN0cmluZyhjb25zdCBDU3RyaW5nJiBzdHJpbmcpCit7
CisgICAgbV9lbGVtZW50cy5hcHBlbmQoRm9ybURhdGFFbGVtZW50KEJsb2JJdGVtOjpjcmVhdGVT
dHJpbmdJdGVtKHN0cmluZykpKTsKIH0KIAogdm9pZCBGb3JtRGF0YTo6YXBwZW5kRmlsZShjb25z
dCBTdHJpbmcmIGZpbGVuYW1lLCBib29sIHNob3VsZEdlbmVyYXRlRmlsZSkKIHsKLSNpZiBFTkFC
TEUoQkxPQl9TTElDRSkKLSAgICBtX2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVsZW1lbnQoZmls
ZW5hbWUsIDAsIEJsb2I6OnRvRW5kT2ZGaWxlLCBCbG9iOjpkb05vdENoZWNrRmlsZUNoYW5nZSwg
c2hvdWxkR2VuZXJhdGVGaWxlKSk7Ci0jZWxzZQotICAgIG1fZWxlbWVudHMuYXBwZW5kKEZvcm1E
YXRhRWxlbWVudChmaWxlbmFtZSwgc2hvdWxkR2VuZXJhdGVGaWxlKSk7Ci0jZW5kaWYKKyAgICBt
X2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVsZW1lbnQoQmxvYkl0ZW06OmNyZWF0ZUZpbGVJdGVt
KGZpbGVuYW1lKSwgc2hvdWxkR2VuZXJhdGVGaWxlKSk7Cit9CisKK3ZvaWQgRm9ybURhdGE6OmFw
cGVuZEJsb2IoQmxvYiogYikKK3sKKyAgICBSZWZQdHI8QmxvYj4gYmxvYiA9IGI7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBibG9iLT5pdGVtcygpLnNpemUoKTsgKytpKQorICAgICAgICBt
X2VsZW1lbnRzLmFwcGVuZChibG9iLT5pdGVtcygpLmF0KGkpKTsKIH0KIAogI2lmIEVOQUJMRShC
TE9CX1NMSUNFKQogdm9pZCBGb3JtRGF0YTo6YXBwZW5kRmlsZVJhbmdlKGNvbnN0IFN0cmluZyYg
ZmlsZW5hbWUsIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCwgZG91YmxlIGV4cGVj
dGVkTW9kaWZpY2F0aW9uVGltZSwgYm9vbCBzaG91bGRHZW5lcmF0ZUZpbGUpCiB7Ci0gICAgbV9l
bGVtZW50cy5hcHBlbmQoRm9ybURhdGFFbGVtZW50KGZpbGVuYW1lLCBzdGFydCwgbGVuZ3RoLCBl
eHBlY3RlZE1vZGlmaWNhdGlvblRpbWUsIHNob3VsZEdlbmVyYXRlRmlsZSkpOworICAgIGlmIChs
ZW5ndGggPT0gRm9ybURhdGFFbGVtZW50Ojp0b0VuZE9mRmlsZSkgeworICAgICAgICBBU1NFUlQo
IXN0YXJ0KTsKKyAgICAgICAgQVNTRVJUKCFleHBlY3RlZE1vZGlmaWNhdGlvblRpbWUpOworICAg
ICAgICBtX2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVsZW1lbnQoQmxvYkl0ZW06OmNyZWF0ZUZp
bGVJdGVtKGZpbGVuYW1lKSwgc2hvdWxkR2VuZXJhdGVGaWxlKSk7CisgICAgfSBlbHNlCisgICAg
ICAgIG1fZWxlbWVudHMuYXBwZW5kKEZvcm1EYXRhRWxlbWVudChCbG9iSXRlbTo6Y3JlYXRlRmls
ZVJhbmdlSXRlbShmaWxlbmFtZSwgc3RhcnQsIGxlbmd0aCwgZXhwZWN0ZWRNb2RpZmljYXRpb25U
aW1lKSwgc2hvdWxkR2VuZXJhdGVGaWxlKSk7CiB9CiAjZW5kaWYKIApAQCAtMTg2LDIzICsyMDgs
MTIgQEAgdm9pZCBGb3JtRGF0YTo6YXBwZW5kRE9NRm9ybURhdGEoY29uc3QgRE9NRm9ybURhdGEm
IGRvbUZvcm1EYXRhLCBib29sIGlzTXVsdGlQYXIKICAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBo
ZWFkZXI7CiAgICAgICAgICAgICBmb3JtRGF0YUJ1aWxkZXIuYmVnaW5NdWx0aVBhcnRIZWFkZXIo
aGVhZGVyLCBtX2JvdW5kYXJ5LmRhdGEoKSwga2V5LmRhdGEoKSk7CiAKKyAgICAgICAgICAgIGNv
bnN0IFJlZlB0cjxCbG9iSXRlbT4gaXRlbSA9IHZhbHVlLml0ZW0oKTsKICAgICAgICAgICAgIGJv
b2wgc2hvdWxkR2VuZXJhdGVGaWxlID0gZmFsc2U7CiAgICAgICAgICAgICAvLyBJZiB0aGUgY3Vy
cmVudCB0eXBlIGlzIEZJTEUsIHRoZW4gd2UgYWxzbyBuZWVkIHRvIGluY2x1ZGUgdGhlIGZpbGVu
YW1lCi0gICAgICAgICAgICBpZiAodmFsdWUuYmxvYigpKSB7Ci0gICAgICAgICAgICAgICAgY29u
c3QgU3RyaW5nJiBwYXRoID0gdmFsdWUuYmxvYigpLT5wYXRoKCk7Ci0jaWYgRU5BQkxFKEJMT0Jf
U0xJQ0UpCi0gICAgICAgICAgICAgICAgU3RyaW5nIGZpbGVOYW1lOwotICAgICAgICAgICAgICAg
IGlmICh2YWx1ZS5ibG9iKCktPmlzRmlsZSgpKQotICAgICAgICAgICAgICAgICAgICBmaWxlTmFt
ZSA9IHN0YXRpY19jYXN0PEZpbGUqPih2YWx1ZS5ibG9iKCkpLT5maWxlTmFtZSgpOwotICAgICAg
ICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvLyBJZiBhIGJsb2IgaXMgc2xp
Y2VkIGZyb20gYSBmaWxlLCBpdCBkb2VzIG5vdCBoYXZlIHRoZSBmaWxlbmFtZS4gSW4gdGhpcyBj
YXNlLCBsZXQncyBwcm9kdWNlIGEgdW5pcXVlIGZpbGVuYW1lLgotICAgICAgICAgICAgICAgICAg
ICBmaWxlTmFtZSA9ICJCbG9iIiArIGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKTsKLSAgICAg
ICAgICAgICAgICAgICAgZmlsZU5hbWUucmVwbGFjZSgiLSIsICIiKTsgLy8gRm9yIHNhZnR5LCBy
ZW1vdmUgJy0nIGZyb20gdGhlIGZpbGVuYW1lIHNuY2Ugc29tZSBzZXJ2ZXJzIG1heSBub3QgbGlr
ZSBpdC4KLSAgICAgICAgICAgICAgICB9Ci0jZWxzZQotICAgICAgICAgICAgICAgIEFTU0VSVCh2
YWx1ZS5ibG9iKCktPmlzRmlsZSgpKTsKLSAgICAgICAgICAgICAgICBTdHJpbmcgZmlsZU5hbWUg
PSBzdGF0aWNfY2FzdDxGaWxlKj4odmFsdWUuYmxvYigpKS0+ZmlsZU5hbWUoKTsKLSNlbmRpZgor
ICAgICAgICAgICAgaWYgKGl0ZW0tPmlzRmlsZSgpKSB7CisgICAgICAgICAgICAgICAgY29uc3Qg
U3RyaW5nJiBwYXRoID0gaXRlbS0+ZmlsZVBhdGgoKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcg
ZmlsZU5hbWUgPSBpdGVtLT5maWxlT3JVbmlxdWVOYW1lKCk7CiAKICAgICAgICAgICAgICAgICAv
LyBMZXQgdGhlIGFwcGxpY2F0aW9uIHNwZWNpZnkgYSBmaWxlbmFtZSBpZiBpdCdzIGdvaW5nIHRv
IGdlbmVyYXRlIGEgcmVwbGFjZW1lbnQgZmlsZSBmb3IgdGhlIHVwbG9hZC4KICAgICAgICAgICAg
ICAgICBpZiAoIXBhdGguaXNFbXB0eSgpKSB7CkBAIC0yMTcsOSArMjI4LDkgQEAgdm9pZCBGb3Jt
RGF0YTo6YXBwZW5kRE9NRm9ybURhdGEoY29uc3QgRE9NRm9ybURhdGEmIGRvbUZvcm1EYXRhLCBi
b29sIGlzTXVsdGlQYXIKICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIGluY2x1ZGUgdGhl
IGZpbGVuYW1lPSIuLiIgcGFydCBpbiB0aGUgaGVhZGVyLCBldmVuIGlmIHRoZSBmaWxlbmFtZSBp
cyBlbXB0eQogICAgICAgICAgICAgICAgIGZvcm1EYXRhQnVpbGRlci5hZGRGaWxlbmFtZVRvTXVs
dGlQYXJ0SGVhZGVyKGhlYWRlciwgZW5jb2RpbmcsIGZpbGVOYW1lKTsKIAotICAgICAgICAgICAg
ICAgIC8vIElmIGEgYmxvYiBpcyBzbGljZWQgZnJvbSBhIGZpbGUsIGRvIG5vdCBhZGQgdGhlIGNv
bnRlbnQgdHlwZS4gCisgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGl0ZW0gaXMgc2xpY2VkIGZy
b20gYSBmaWxlLCBkbyBub3QgYWRkIHRoZSBjb250ZW50IHR5cGUuCiAjaWYgRU5BQkxFKEJMT0Jf
U0xJQ0UpCi0gICAgICAgICAgICAgICAgaWYgKCFmaWxlTmFtZS5pc0VtcHR5KCkgJiYgdmFsdWUu
YmxvYigpLT5pc0ZpbGUoKSkgeworICAgICAgICAgICAgICAgIGlmICghZmlsZU5hbWUuaXNFbXB0
eSgpICYmIGl0ZW0tPmlzRmlsZSgpICYmICFpdGVtLT5pc1JhbmdlKCkpIHsKICNlbHNlCiAgICAg
ICAgICAgICAgICAgaWYgKCFmaWxlTmFtZS5pc0VtcHR5KCkpIHsKICNlbmRpZgpAQCAtMjM3LDE1
ICsyNDgsNyBAQCB2b2lkIEZvcm1EYXRhOjphcHBlbmRET01Gb3JtRGF0YShjb25zdCBET01Gb3Jt
RGF0YSYgZG9tRm9ybURhdGEsIGJvb2wgaXNNdWx0aVBhcgogCiAgICAgICAgICAgICAvLyBBcHBl
bmQgYm9keQogICAgICAgICAgICAgYXBwZW5kRGF0YShoZWFkZXIuZGF0YSgpLCBoZWFkZXIuc2l6
ZSgpKTsKLSAgICAgICAgICAgIGlmIChzaXplX3QgZGF0YVNpemUgPSB2YWx1ZS5kYXRhKCkubGVu
Z3RoKCkpCi0gICAgICAgICAgICAgICAgYXBwZW5kRGF0YSh2YWx1ZS5kYXRhKCkuZGF0YSgpLCBk
YXRhU2l6ZSk7Ci0gICAgICAgICAgICBlbHNlIGlmICh2YWx1ZS5ibG9iKCkgJiYgIXZhbHVlLmJs
b2IoKS0+cGF0aCgpLmlzRW1wdHkoKSkKLSNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAgICAgICAg
ICAgICAgICBhcHBlbmRGaWxlUmFuZ2UodmFsdWUuYmxvYigpLT5wYXRoKCksIHZhbHVlLmJsb2Io
KS0+c3RhcnQoKSwgdmFsdWUuYmxvYigpLT5sZW5ndGgoKSwgdmFsdWUuYmxvYigpLT5tb2RpZmlj
YXRpb25UaW1lKCksIHNob3VsZEdlbmVyYXRlRmlsZSk7Ci0jZWxzZQotICAgICAgICAgICAgICAg
IGFwcGVuZEZpbGUodmFsdWUuYmxvYigpLT5wYXRoKCksIHNob3VsZEdlbmVyYXRlRmlsZSk7Ci0j
ZW5kaWYKLQorICAgICAgICAgICAgbV9lbGVtZW50cy5hcHBlbmQoRm9ybURhdGFFbGVtZW50KGl0
ZW0sIHNob3VsZEdlbmVyYXRlRmlsZSkpOwogICAgICAgICAgICAgYXBwZW5kRGF0YSgiXHJcbiIs
IDIpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gT21pdCB0aGUgbmFtZSAiaXNp
bmRleCIgaWYgaXQncyB0aGUgZmlyc3QgZm9ybSBkYXRhIGVsZW1lbnQuCkBAIC0yNTUsNyArMjU4
LDcgQEAgdm9pZCBGb3JtRGF0YTo6YXBwZW5kRE9NRm9ybURhdGEoY29uc3QgRE9NRm9ybURhdGEm
IGRvbUZvcm1EYXRhLCBib29sIGlzTXVsdGlQYXIKICAgICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgICAgICBmb3JtRGF0YUJ1aWxkZXIuYWRkS2V5VmFsdWVQYWlyQXNGb3JtRGF0YShlbmNvZGVk
RGF0YSwga2V5LmRhdGEoKSwgdmFsdWUuZGF0YSgpKTsKICAgICAgICAgfQotICAgIH0gCisgICAg
fQogCiAgICAgaWYgKGlzTXVsdGlQYXJ0Rm9ybSkKICAgICAgICAgZm9ybURhdGFCdWlsZGVyLmFk
ZEJvdW5kYXJ5VG9NdWx0aVBhcnRIZWFkZXIoZW5jb2RlZERhdGEsIG1fYm91bmRhcnkuZGF0YSgp
LCB0cnVlKTsKQEAgLTI3MCwxMiArMjczLDggQEAgdm9pZCBGb3JtRGF0YTo6ZmxhdHRlbihWZWN0
b3I8Y2hhcj4mIGRhdGEpIGNvbnN0CiAgICAgc2l6ZV90IG4gPSBtX2VsZW1lbnRzLnNpemUoKTsK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG47ICsraSkgewogICAgICAgICBjb25zdCBGb3Jt
RGF0YUVsZW1lbnQmIGUgPSBtX2VsZW1lbnRzW2ldOwotICAgICAgICBpZiAoZS5tX3R5cGUgPT0g
Rm9ybURhdGFFbGVtZW50OjpkYXRhKSB7Ci0gICAgICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IGRh
dGEuc2l6ZSgpOwotICAgICAgICAgICAgc2l6ZV90IGRlbHRhID0gZS5tX2RhdGEuc2l6ZSgpOwot
ICAgICAgICAgICAgZGF0YS5ncm93KG9sZFNpemUgKyBkZWx0YSk7Ci0gICAgICAgICAgICBtZW1j
cHkoZGF0YS5kYXRhKCkgKyBvbGRTaXplLCBlLm1fZGF0YS5kYXRhKCksIGRlbHRhKTsKLSAgICAg
ICAgfQorICAgICAgICBpZiAoIWUuaXRlbSgpLT5pc0ZpbGUoKSkKKyAgICAgICAgICAgIGRhdGEu
YXBwZW5kKGUuaXRlbSgpLT5kYXRhKCksIHN0YXRpY19jYXN0PHNpemVfdD4oZS5pdGVtKCktPnNp
emUoKSkpOwogICAgIH0KIH0KIApAQCAtMjg5LDEwICsyODgsMTAgQEAgU3RyaW5nIEZvcm1EYXRh
OjpmbGF0dGVuVG9TdHJpbmcoKSBjb25zdAogdm9pZCBGb3JtRGF0YTo6Z2VuZXJhdGVGaWxlcyhE
b2N1bWVudCogZG9jdW1lbnQpCiB7CiAgICAgQVNTRVJUKCFtX2hhc0dlbmVyYXRlZEZpbGVzKTsK
LSAgICAKKwogICAgIGlmIChtX2hhc0dlbmVyYXRlZEZpbGVzKQogICAgICAgICByZXR1cm47Ci0g
ICAgCisKICAgICBQYWdlKiBwYWdlID0gZG9jdW1lbnQtPnBhZ2UoKTsKICAgICBpZiAoIXBhZ2Up
CiAgICAgICAgIHJldHVybjsKQEAgLTMwMSw4ICszMDAsOCBAQCB2b2lkIEZvcm1EYXRhOjpnZW5l
cmF0ZUZpbGVzKERvY3VtZW50KiBkb2N1bWVudCkKICAgICBzaXplX3QgbiA9IG1fZWxlbWVudHMu
c2l6ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbjsgKytpKSB7CiAgICAgICAgIEZv
cm1EYXRhRWxlbWVudCYgZSA9IG1fZWxlbWVudHNbaV07Ci0gICAgICAgIGlmIChlLm1fdHlwZSA9
PSBGb3JtRGF0YUVsZW1lbnQ6OmVuY29kZWRGaWxlICYmIGUubV9zaG91bGRHZW5lcmF0ZUZpbGUp
IHsKLSAgICAgICAgICAgIGUubV9nZW5lcmF0ZWRGaWxlbmFtZSA9IGNsaWVudC0+Z2VuZXJhdGVS
ZXBsYWNlbWVudEZpbGUoZS5tX2ZpbGVuYW1lKTsKKyAgICAgICAgaWYgKGUuaXRlbSgpLT5pc0Zp
bGUoKSAmJiBlLm1fc2hvdWxkR2VuZXJhdGVGaWxlKSB7CisgICAgICAgICAgICBlLm1fZ2VuZXJh
dGVkRmlsZW5hbWUgPSBjbGllbnQtPmdlbmVyYXRlUmVwbGFjZW1lbnRGaWxlKGUuaXRlbSgpLT5m
aWxlUGF0aCgpKTsKICAgICAgICAgICAgIG1faGFzR2VuZXJhdGVkRmlsZXMgPSB0cnVlOwogICAg
ICAgICB9CiAgICAgfQpAQCAtMzEyLDExICszMTEsMTEgQEAgdm9pZCBGb3JtRGF0YTo6cmVtb3Zl
R2VuZXJhdGVkRmlsZXNJZk5lZWRlZCgpCiB7CiAgICAgaWYgKCFtX2hhc0dlbmVyYXRlZEZpbGVz
KQogICAgICAgICByZXR1cm47Ci0gICAgICAgIAorCiAgICAgc2l6ZV90IG4gPSBtX2VsZW1lbnRz
LnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG47ICsraSkgewogICAgICAgICBG
b3JtRGF0YUVsZW1lbnQmIGUgPSBtX2VsZW1lbnRzW2ldOwotICAgICAgICBpZiAoZS5tX3R5cGUg
PT0gRm9ybURhdGFFbGVtZW50OjplbmNvZGVkRmlsZSAmJiAhZS5tX2dlbmVyYXRlZEZpbGVuYW1l
LmlzRW1wdHkoKSkgeworICAgICAgICBpZiAoZS5pdGVtKCktPmlzRmlsZSgpICYmICFlLm1fZ2Vu
ZXJhdGVkRmlsZW5hbWUuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBBU1NFUlQoZS5tX3Nob3Vs
ZEdlbmVyYXRlRmlsZSk7CiAgICAgICAgICAgICBTdHJpbmcgZGlyZWN0b3J5ID0gZGlyZWN0b3J5
TmFtZShlLm1fZ2VuZXJhdGVkRmlsZW5hbWUpOwogICAgICAgICAgICAgZGVsZXRlRmlsZShlLm1f
Z2VuZXJhdGVkRmlsZW5hbWUpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L0Zvcm1EYXRhLmggYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuaAppbmRleCBh
NDM5MDIzNDc5NmEwZTJmMTRmNWQzNDlmNWRkMGVmZmMwYTRiN2NkLi45OWVlN2M1MTIxZDgwYWM3
OWVlNTkyMWVkY2JiNTI3YWU3M2FiMjQyIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvRm9ybURhdGEuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEu
aApAQCAtMjAsNiArMjAsNyBAQAogI2lmbmRlZiBGb3JtRGF0YV9oCiAjZGVmaW5lIEZvcm1EYXRh
X2gKIAorI2luY2x1ZGUgIkJsb2IuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtMjks
NTIgKzMwLDQ5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIERPTUZvcm1EYXRhOwogY2xh
c3MgRG9jdW1lbnQ7CiAKKy8vIEEgd3JhcHBlciBjbGFzcyBvZiBCbG9iSXRlbSBmb3IgRm9ybURh
dGEuCiBjbGFzcyBGb3JtRGF0YUVsZW1lbnQgewogcHVibGljOgotICAgIEZvcm1EYXRhRWxlbWVu
dCgpIDogbV90eXBlKGRhdGEpIHsgfQotICAgIEZvcm1EYXRhRWxlbWVudChjb25zdCBWZWN0b3I8
Y2hhcj4mIGFycmF5KSA6IG1fdHlwZShkYXRhKSwgbV9kYXRhKGFycmF5KSB7IH0KLSNpZiBFTkFC
TEUoQkxPQl9TTElDRSkKLSAgICBGb3JtRGF0YUVsZW1lbnQoY29uc3QgU3RyaW5nJiBmaWxlbmFt
ZSwgbG9uZyBsb25nIGZpbGVTdGFydCwgbG9uZyBsb25nIGZpbGVMZW5ndGgsIGRvdWJsZSBleHBl
Y3RlZEZpbGVNb2RpZmljYXRpb25UaW1lLCBib29sIHNob3VsZEdlbmVyYXRlRmlsZSkgOiBtX3R5
cGUoZW5jb2RlZEZpbGUpLCBtX2ZpbGVuYW1lKGZpbGVuYW1lKSwgbV9maWxlU3RhcnQoZmlsZVN0
YXJ0KSwgbV9maWxlTGVuZ3RoKGZpbGVMZW5ndGgpLCBtX2V4cGVjdGVkRmlsZU1vZGlmaWNhdGlv
blRpbWUoZXhwZWN0ZWRGaWxlTW9kaWZpY2F0aW9uVGltZSksIG1fc2hvdWxkR2VuZXJhdGVGaWxl
KHNob3VsZEdlbmVyYXRlRmlsZSkgeyB9Ci0jZWxzZQotICAgIEZvcm1EYXRhRWxlbWVudChjb25z
dCBTdHJpbmcmIGZpbGVuYW1lLCBib29sIHNob3VsZEdlbmVyYXRlRmlsZSkgOiBtX3R5cGUoZW5j
b2RlZEZpbGUpLCBtX2ZpbGVuYW1lKGZpbGVuYW1lKSwgbV9zaG91bGRHZW5lcmF0ZUZpbGUoc2hv
dWxkR2VuZXJhdGVGaWxlKSB7IH0KLSNlbmRpZgorICAgIEZvcm1EYXRhRWxlbWVudCgpIDogbV9k
YXRhKDApIHsgfQorICAgIEZvcm1EYXRhRWxlbWVudChQYXNzUmVmUHRyPEJsb2JJdGVtPiBibG9i
SXRlbSwgYm9vbCBzaG91bGRHZW5lcmF0ZUZpbGUgPSBmYWxzZSk7CisKKyAgICBjb25zdCBCbG9i
SXRlbSogaXRlbSgpIGNvbnN0IHsgcmV0dXJuIG1faXRlbS5nZXQoKTsgfQorCisgICAgUmVmUHRy
PEJsb2JJdGVtPiBtX2l0ZW07CiAKKyAgICAvLyBGSVhNRTogY2xlYW4gbWUgdXAuICBDb2RlIGJl
bG93IGFyZSBtb3N0bHkga2VwdCBmb3IgY29tcGF0aWJpbGl0eS4KICAgICBlbnVtIHsgZGF0YSwg
ZW5jb2RlZEZpbGUgfSBtX3R5cGU7Ci0gICAgVmVjdG9yPGNoYXI+IG1fZGF0YTsKKyAgICBjb25z
dCBzdHJ1Y3QgQmxvYkl0ZW1XcmFwcGVyIHsKKyAgICAgICAgQmxvYkl0ZW1XcmFwcGVyKGNvbnN0
IEJsb2JJdGVtV3JhcHBlciYgdikgOiBtX2l0ZW0odi5tX2l0ZW0pIHsgfQorICAgICAgICBCbG9i
SXRlbVdyYXBwZXIoY29uc3QgQmxvYkl0ZW0qIGl0ZW0pIDogbV9pdGVtKGl0ZW0pIHsgfQorICAg
ICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4obV9p
dGVtLT5zaXplKCkpOyB9CisgICAgICAgIGNvbnN0IGNoYXIqIGRhdGEoKSBjb25zdCB7IHJldHVy
biBtX2l0ZW0tPmRhdGEoKTsgfQorICAgICAgICBjaGFyKiByZWxlYXNlQnVmZmVyKCkgY29uc3Qg
eyByZXR1cm4gbV9pdGVtLT5yZWxlYXNlQnVmZmVyKCk7IH0KKyAgICAgICAgY29uc3QgQmxvYkl0
ZW0qIG1faXRlbTsKKyAgICB9IG1fZGF0YTsKICAgICBTdHJpbmcgbV9maWxlbmFtZTsKICNpZiBF
TkFCTEUoQkxPQl9TTElDRSkKICAgICBsb25nIGxvbmcgbV9maWxlU3RhcnQ7CiAgICAgbG9uZyBs
b25nIG1fZmlsZUxlbmd0aDsKICAgICBkb3VibGUgbV9leHBlY3RlZEZpbGVNb2RpZmljYXRpb25U
aW1lOworCisgICAgc3RhdGljIGNvbnN0IGxvbmcgbG9uZyB0b0VuZE9mRmlsZTsKICNlbmRpZgor
CiAgICAgU3RyaW5nIG1fZ2VuZXJhdGVkRmlsZW5hbWU7CiAgICAgYm9vbCBtX3Nob3VsZEdlbmVy
YXRlRmlsZTsKIH07CiAKIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9ybURhdGFFbGVt
ZW50JiBhLCBjb25zdCBGb3JtRGF0YUVsZW1lbnQmIGIpCiB7Ci0gICAgaWYgKCZhID09ICZiKQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICBpZiAoYS5tX3R5cGUgIT0gYi5tX3R5cGUp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoYS5tX2RhdGEgIT0gYi5tX2RhdGEpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAgICBpZiAoYS5t
X2ZpbGVuYW1lICE9IGIubV9maWxlbmFtZSB8fCBhLm1fZmlsZVN0YXJ0ICE9IGIubV9maWxlU3Rh
cnQgfHwgYS5tX2ZpbGVMZW5ndGggIT0gYi5tX2ZpbGVMZW5ndGggfHwgYS5tX2V4cGVjdGVkRmls
ZU1vZGlmaWNhdGlvblRpbWUgIT0gYi5tX2V4cGVjdGVkRmlsZU1vZGlmaWNhdGlvblRpbWUpCi0j
ZWxzZQotICAgIGlmIChhLm1fZmlsZW5hbWUgIT0gYi5tX2ZpbGVuYW1lKQotI2VuZGlmCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBhLml0ZW0o
KS0+ZXF1YWxzKGIuaXRlbSgpKTsKIH0KLSAKKwogaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25z
dCBGb3JtRGF0YUVsZW1lbnQmIGEsIGNvbnN0IEZvcm1EYXRhRWxlbWVudCYgYikKIHsKICAgICBy
ZXR1cm4gIShhID09IGIpOwogfQotIAorCiBjbGFzcyBGb3JtRGF0YSA6IHB1YmxpYyBSZWZDb3Vu
dGVkPEZvcm1EYXRhPiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Rm9ybURhdGE+
IGNyZWF0ZSgpOwpAQCAtODYsOCArODQsMTAgQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8Rm9y
bURhdGE+IGNvcHkoKSBjb25zdDsKICAgICBQYXNzUmVmUHRyPEZvcm1EYXRhPiBkZWVwQ29weSgp
IGNvbnN0OwogICAgIH5Gb3JtRGF0YSgpOwotICAgIAorCiAgICAgdm9pZCBhcHBlbmREYXRhKGNv
bnN0IHZvaWQqIGRhdGEsIHNpemVfdCk7CisgICAgdm9pZCBhcHBlbmRCbG9iKEJsb2IqKTsKKyAg
ICB2b2lkIGFwcGVuZFN0cmluZyhjb25zdCBDU3RyaW5nJik7CiAgICAgdm9pZCBhcHBlbmRGaWxl
KGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGJvb2wgc2hvdWxkR2VuZXJhdGVGaWxlID0gZmFsc2Up
OwogI2lmIEVOQUJMRShCTE9CX1NMSUNFKQogICAgIHZvaWQgYXBwZW5kRmlsZVJhbmdlKGNvbnN0
IFN0cmluZyYgZmlsZW5hbWUsIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCwgZG91
YmxlIGV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZSwgYm9vbCBzaG91bGRHZW5lcmF0ZUZpbGUgPSBm
YWxzZSk7CkBAIC0xMTgsNiArMTE4LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGFwcGVuZERPTUZv
cm1EYXRhKGNvbnN0IERPTUZvcm1EYXRhJiBkb21Gb3JtRGF0YSwgYm9vbCBpc011bHRpUGFydEZv
cm0sIERvY3VtZW50KiBkb2N1bWVudCk7CiAKICAgICBWZWN0b3I8Rm9ybURhdGFFbGVtZW50PiBt
X2VsZW1lbnRzOworCiAgICAgaW50NjRfdCBtX2lkZW50aWZpZXI7CiAgICAgYm9vbCBtX2hhc0dl
bmVyYXRlZEZpbGVzOwogICAgIGJvb2wgbV9hbHdheXNTdHJlYW07CkBAIC0xMzEsNyArMTMyLDcg
QEAgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb3JtRGF0YSYgYSwgY29uc3QgRm9ybURh
dGEmIGIpCiAKIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgRm9ybURhdGEmIGEsIGNvbnN0
IEZvcm1EYXRhJiBiKQogewotICAgIHJldHVybiBhLmVsZW1lbnRzKCkgIT0gYi5lbGVtZW50cygp
OworICAgIHJldHVybiAhKGEgPT0gYik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvRm9ybURhdGFTdHJlYW1NYWMu
bW0gYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL0Zvcm1EYXRhU3RyZWFtTWFjLm1tCmlu
ZGV4IDI3ZWNmZDA4YWQ1YWFhYjg3NTZmYTU5NmQ5OTZiZDJmNmVjNWQwM2YuLmUzOTY4ZjI2YmU3
NWYzMTY4ZjRjNzQ1NWI1YTVlNDg4MTAzNDFhYmMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9tYWMvRm9ybURhdGFTdHJlYW1NYWMubW0KKysrIGIvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL21hYy9Gb3JtRGF0YVN0cmVhbU1hYy5tbQpAQCAtMTQyLDcgKzE0Miw3IEBAIHN0
YXRpYyB2b2lkIGNsb3NlQ3VycmVudFN0cmVhbShGb3JtU3RyZWFtRmllbGRzICpmb3JtKQogICAg
ICAgICBDRlJlbGVhc2UoZm9ybS0+Y3VycmVudFN0cmVhbSk7CiAgICAgICAgIGZvcm0tPmN1cnJl
bnRTdHJlYW0gPSBOVUxMOwogI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgICAgICBmb3JtLT5j
dXJyZW50U3RyZWFtUmFuZ2VMZW5ndGggPSBCbG9iOjp0b0VuZE9mRmlsZTsKKyAgICAgICAgZm9y
bS0+Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoID0gRm9ybURhdGFFbGVtZW50Ojp0b0VuZE9mRmls
ZTsKICNlbmRpZgogICAgIH0KICAgICBpZiAoZm9ybS0+Y3VycmVudERhdGEpIHsKQEAgLTE2MSwy
MSArMTYxLDE3IEBAIHN0YXRpYyBib29sIGFkdmFuY2VDdXJyZW50U3RyZWFtKEZvcm1TdHJlYW1G
aWVsZHMqIGZvcm0pCiAKICAgICAvLyBDcmVhdGUgdGhlIG5ldyBzdHJlYW0uCiAgICAgRm9ybURh
dGFFbGVtZW50JiBuZXh0SW5wdXQgPSBmb3JtLT5yZW1haW5pbmdFbGVtZW50cy5sYXN0KCk7CisK
KyAgICAvLyBDaGVjayBpZiB0aGUgdW5kZXJseWluZyBkYXRhIGhhcyBiZWNvbWUgc3RhbGUgKGUu
Zy4gdGhlIGZpbGUgaGFzIGJlZW4gY2hhbmdlZCBzaW5jZSBpdHMgc25hcHNob3QgaGFzIGJlZW4g
dGFrZW4pIG9yIG5vdC4KKyAgICBpZiAoIW5leHRJbnB1dC5tX2l0ZW0tPmlzVmFsaWQoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgaWYgKG5leHRJbnB1dC5tX3R5cGUgPT0gRm9ybURh
dGFFbGVtZW50OjpkYXRhKSB7CiAgICAgICAgIHNpemVfdCBzaXplID0gbmV4dElucHV0Lm1fZGF0
YS5zaXplKCk7CiAgICAgICAgIGNoYXIqIGRhdGEgPSBuZXh0SW5wdXQubV9kYXRhLnJlbGVhc2VC
dWZmZXIoKTsKICAgICAgICAgZm9ybS0+Y3VycmVudFN0cmVhbSA9IENGUmVhZFN0cmVhbUNyZWF0
ZVdpdGhCeXRlc05vQ29weSgwLCByZWludGVycHJldF9jYXN0PGNvbnN0IFVJbnQ4Kj4oZGF0YSks
IHNpemUsIGtDRkFsbG9jYXRvck51bGwpOwogICAgICAgICBmb3JtLT5jdXJyZW50RGF0YSA9IGRh
dGE7CiAgICAgfSBlbHNlIHsKLSNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAgICAgICAgLy8gQ2hl
Y2sgaWYgdGhlIGZpbGUgaGFzIGJlZW4gY2hhbmdlZCBvciBub3QgaWYgcmVxdWlyZWQuCi0gICAg
ICAgIGlmIChuZXh0SW5wdXQubV9leHBlY3RlZEZpbGVNb2RpZmljYXRpb25UaW1lICE9IEJsb2I6
OmRvTm90Q2hlY2tGaWxlQ2hhbmdlKSB7Ci0gICAgICAgICAgICB0aW1lX3QgZmlsZU1vZGlmaWNh
dGlvblRpbWU7Ci0gICAgICAgICAgICBpZiAoIWdldEZpbGVNb2RpZmljYXRpb25UaW1lKG5leHRJ
bnB1dC5tX2ZpbGVuYW1lLCBmaWxlTW9kaWZpY2F0aW9uVGltZSkgfHwgZmlsZU1vZGlmaWNhdGlv
blRpbWUgIT0gc3RhdGljX2Nhc3Q8dGltZV90PihuZXh0SW5wdXQubV9leHBlY3RlZEZpbGVNb2Rp
ZmljYXRpb25UaW1lKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0K
LSNlbmRpZgotCiAgICAgICAgIGNvbnN0IFN0cmluZyYgcGF0aCA9IG5leHRJbnB1dC5tX3Nob3Vs
ZEdlbmVyYXRlRmlsZSA/IG5leHRJbnB1dC5tX2dlbmVyYXRlZEZpbGVuYW1lIDogbmV4dElucHV0
Lm1fZmlsZW5hbWU7CiAgICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gZmlsZW5hbWUoQWRv
cHRDRiwgcGF0aC5jcmVhdGVDRlN0cmluZygpKTsKICAgICAgICAgUmV0YWluUHRyPENGVVJMUmVm
PiBmaWxlVVJMKEFkb3B0Q0YsIENGVVJMQ3JlYXRlV2l0aEZpbGVTeXN0ZW1QYXRoKDAsIGZpbGVu
YW1lLmdldCgpLCBrQ0ZVUkxQT1NJWFBhdGhTdHlsZSwgRkFMU0UpKTsKQEAgLTIyMiw3ICsyMTgs
NyBAQCBzdGF0aWMgdm9pZCogZm9ybUNyZWF0ZShDRlJlYWRTdHJlYW1SZWYgc3RyZWFtLCB2b2lk
KiBjb250ZXh0KQogICAgIEZvcm1TdHJlYW1GaWVsZHMqIG5ld0luZm8gPSBuZXcgRm9ybVN0cmVh
bUZpZWxkczsKICAgICBuZXdJbmZvLT5jdXJyZW50U3RyZWFtID0gTlVMTDsKICNpZiBFTkFCTEUo
QkxPQl9TTElDRSkKLSAgICBuZXdJbmZvLT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5ndGggPSBCbG9i
Ojp0b0VuZE9mRmlsZTsKKyAgICBuZXdJbmZvLT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5ndGggPSBG
b3JtRGF0YUVsZW1lbnQ6OnRvRW5kT2ZGaWxlOwogI2VuZGlmCiAgICAgbmV3SW5mby0+Y3VycmVu
dERhdGEgPSAwOwogICAgIG5ld0luZm8tPmZvcm1TdHJlYW0gPSBzdHJlYW07IC8vIERvbid0IHJl
dGFpbi4gVGhhdCB3b3VsZCBjcmVhdGUgYSByZWZlcmVuY2UgY3ljbGUuCkBAIC0yNzAsNyArMjY2
LDcgQEAgc3RhdGljIENGSW5kZXggZm9ybVJlYWQoQ0ZSZWFkU3RyZWFtUmVmIHN0cmVhbSwgVUlu
dDgqIGJ1ZmZlciwgQ0ZJbmRleCBidWZmZXJMZW4KICAgICB3aGlsZSAoZm9ybS0+Y3VycmVudFN0
cmVhbSkgewogICAgICAgICBDRkluZGV4IGJ5dGVzVG9SZWFkID0gYnVmZmVyTGVuZ3RoOwogI2lm
IEVOQUJMRShCTE9CX1NMSUNFKQotICAgICAgICBpZiAoZm9ybS0+Y3VycmVudFN0cmVhbVJhbmdl
TGVuZ3RoICE9IEJsb2I6OnRvRW5kT2ZGaWxlICYmIGZvcm0tPmN1cnJlbnRTdHJlYW1SYW5nZUxl
bmd0aCA8IGJ5dGVzVG9SZWFkKQorICAgICAgICBpZiAoZm9ybS0+Y3VycmVudFN0cmVhbVJhbmdl
TGVuZ3RoICE9IEZvcm1EYXRhRWxlbWVudDo6dG9FbmRPZkZpbGUgJiYgZm9ybS0+Y3VycmVudFN0
cmVhbVJhbmdlTGVuZ3RoIDwgYnl0ZXNUb1JlYWQpCiAgICAgICAgICAgICBieXRlc1RvUmVhZCA9
IHN0YXRpY19jYXN0PENGSW5kZXg+KGZvcm0tPmN1cnJlbnRTdHJlYW1SYW5nZUxlbmd0aCk7CiAj
ZW5kaWYKICAgICAgICAgQ0ZJbmRleCBieXRlc1JlYWQgPSBDRlJlYWRTdHJlYW1SZWFkKGZvcm0t
PmN1cnJlbnRTdHJlYW0sIGJ1ZmZlciwgYnl0ZXNUb1JlYWQpOwpAQCAtMjgzLDcgKzI3OSw3IEBA
IHN0YXRpYyBDRkluZGV4IGZvcm1SZWFkKENGUmVhZFN0cmVhbVJlZiBzdHJlYW0sIFVJbnQ4KiBi
dWZmZXIsIENGSW5kZXggYnVmZmVyTGVuCiAgICAgICAgICAgICAqYXRFT0YgPSBGQUxTRTsKICAg
ICAgICAgICAgIGZvcm0tPmJ5dGVzU2VudCArPSBieXRlc1JlYWQ7CiAjaWYgRU5BQkxFKEJMT0Jf
U0xJQ0UpCi0gICAgICAgICAgICBpZiAoZm9ybS0+Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoICE9
IEJsb2I6OnRvRW5kT2ZGaWxlKQorICAgICAgICAgICAgaWYgKGZvcm0tPmN1cnJlbnRTdHJlYW1S
YW5nZUxlbmd0aCAhPSBGb3JtRGF0YUVsZW1lbnQ6OnRvRW5kT2ZGaWxlKQogICAgICAgICAgICAg
ICAgIGZvcm0tPmN1cnJlbnRTdHJlYW1SYW5nZUxlbmd0aCAtPSBieXRlc1JlYWQ7CiAjZW5kaWYK
IApAQCAtNDAwLDcgKzM5Niw3IEBAIHZvaWQgc2V0SFRUUEJvZHkoTlNNdXRhYmxlVVJMUmVxdWVz
dCAqcmVxdWVzdCwgUGFzc1JlZlB0cjxGb3JtRGF0YT4gZm9ybURhdGEpCiAgICAgICAgIGVsc2Ug
ewogI2lmIEVOQUJMRShCTE9CX1NMSUNFKQogICAgICAgICAgICAgLy8gSWYgd2UncmUgc2VuZGlu
ZyB0aGUgZmlsZSByYW5nZSwgdXNlIHRoZSBleGlzdGluZyByYW5nZSBsZW5ndGggZm9yIG5vdy4g
V2Ugd2lsbCBkZXRlY3QgaWYgdGhlIGZpbGUgaGFzIGJlZW4gY2hhbmdlZCByaWdodCBiZWZvcmUg
d2UgcmVhZCB0aGUgZmlsZSBhbmQgYWJvcnQgdGhlIG9wZXJhdGlvbiBpZiBuZWNlc3NhcnkuCi0g
ICAgICAgICAgICBpZiAoZWxlbWVudC5tX2ZpbGVMZW5ndGggIT0gQmxvYjo6dG9FbmRPZkZpbGUp
IHsKKyAgICAgICAgICAgIGlmIChlbGVtZW50Lm1fZmlsZUxlbmd0aCAhPSBGb3JtRGF0YUVsZW1l
bnQ6OnRvRW5kT2ZGaWxlKSB7CiAgICAgICAgICAgICAgICAgbGVuZ3RoICs9IGVsZW1lbnQubV9m
aWxlTGVuZ3RoOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwIGIvV2ViQ29yZS94bWwvWE1M
SHR0cFJlcXVlc3QuY3BwCmluZGV4IDVjZGUyNGRlMjlkYjQ0MjEwMDAxYTMwMjMyNDRjYTRjY2Qy
NWNmYmIuLmY2MWQ3MWQyNGU2MzkzNWViODVjMGIzNWRiZmNmYjk3YTA1OWMyZGYgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAorKysgYi9XZWJDb3JlL3htbC9YTUxI
dHRwUmVxdWVzdC5jcHAKQEAgLTQ3OCwxMSArNDc4LDcgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6
c2VuZChCbG9iKiBib2R5LCBFeGNlcHRpb25Db2RlJiBlYykKICAgICAgICAgLy8gRklYTUU6IFNo
b3VsZCB3ZSBzZXQgYSBDb250ZW50LVR5cGUgaWYgb25lIGlzIG5vdCBzZXQuCiAgICAgICAgIC8v
IEZJWE1FOiBhZGQgc3VwcG9ydCBmb3IgdXBsb2FkaW5nIGJ1bmRsZXMuCiAgICAgICAgIG1fcmVx
dWVzdEVudGl0eUJvZHkgPSBGb3JtRGF0YTo6Y3JlYXRlKCk7Ci0jaWYgRU5BQkxFKEJMT0JfU0xJ
Q0UpCi0gICAgICAgIG1fcmVxdWVzdEVudGl0eUJvZHktPmFwcGVuZEZpbGVSYW5nZShib2R5LT5w
YXRoKCksIGJvZHktPnN0YXJ0KCksIGJvZHktPmxlbmd0aCgpLCBib2R5LT5tb2RpZmljYXRpb25U
aW1lKCkpOwotI2Vsc2UKLSAgICAgICAgbV9yZXF1ZXN0RW50aXR5Qm9keS0+YXBwZW5kRmlsZShi
b2R5LT5wYXRoKCksIGZhbHNlKTsKLSNlbmRpZgorICAgICAgICBtX3JlcXVlc3RFbnRpdHlCb2R5
LT5hcHBlbmRCbG9iKGJvZHkpOwogICAgIH0KIAogICAgIGNyZWF0ZVJlcXVlc3QoZWMpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56085</attachid>
            <date>2010-05-14 11:11:35 -0700</date>
            <delta_ts>2010-05-17 16:07:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-39083-20100514111134.patch</filename>
            <type>text/plain</type>
            <size>68394</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NmYxMjU0ZGYxNDM2YjYxNjNiZDRiYmQzNGRmMmQ1NmVmZGJjOWI4OC4uOGQ2MGE5YWMyZTYwNjU3
MGE4MmZmMTg5ZjJlMzY4ZjYwOTFjYmNhMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4MyBAQAorMjAxMC0wNS0xMyAgS2lu
dWtvIFlhc3VkYSAgPGtpbnVrb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVmYWN0b3IgRm9ybURhdGEgYW5kIEJsb2IgZm9y
IGJldHRlciBzdXBwb3J0IG9mIEJsb2JzIHN5bnRoZXNpemVkIGJ5IEJsb2JCdWlsZGVyLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzkwODMKKworICAg
ICAgICBJbnRyb2R1Y2VzIGEgbmV3IGNsYXNzIEJsb2JJdGVtIGFzIGEgYmFzaWMgY29tcG9uZW50
IG9mIEJsb2IgYW5kIEZvcm1EYXRhLAorICAgICAgICBhbmQgbWFrZXMgQmxvYiBhcyBhIGNvbGxl
Y3Rpb24gb2YgQmxvYkl0ZW1zLgorICAgICAgICBGaWxlIHdvdWxkIGJlY29tZSBhIHNwZWNpYWwg
dHlwZSBvZiBCbG9iIHRoYXQgY29udGFpbnMgb25seSBvbmUgRmlsZUJsb2JJdGVtLgorICAgICAg
ICBGb3JtRGF0YUVsZW1lbnQgYW5kIEZvcm1EYXRhTGlzdDo6SXRlbSB3b3VsZCBiZWNvbWUgYSB3
cmFwcGVyIG9mIEJsb2JJdGVtLgorCisgICAgICAgIFRoZSBwYXRjaCBkb2Vzbid0IHN1cHBvcnQg
dGhlIGxhdGVzdCBGaWxlIEFQSSBjaGFuZ2VzIChlLmcuIHR5cGUsIHVybCBhbmQKKyAgICAgICAg
c2xpY2UncyB0eXBlIHBhcmFtZXRlcnMpIGFuZCBzaG91bGQgbm90IGNoYW5nZSBhbnkgb2YgaXRz
IGV4aXN0aW5nIGJlaGF2aW9ycy4KKworICAgICAgICBUaGUgZXhpc3RpbmcgdGVzdHMgc2hvdWxk
IGJlIGFibGUgdG8gYmUgdXNlZCBmb3IgcmVncmVzc2lvbjoKKyAgICAgICAgLSBodHRwL3Rlc3Rz
L2xvY2FsL2Zvcm1kYXRhL3NlbmQtZm9ybS1kYXRhLXdpdGgtc2xpY2VkLWZpbGUuaHRtbAorICAg
ICAgICAtIGh0dHAvdGVzdHMvbG9jYWwvc2VuZC1zbGljZWQtZHJhZ2dlZC1maWxlLmh0bWwKKwor
ICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAg
ICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
ajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogaHRtbC9CbG9iLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpCbG9iOjpCbG9iKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OnNpemUp
OgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6cGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpCbG9i
OjphcHBlbmRCbG9iSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjpzbGljZSk6CisgICAg
ICAgICogaHRtbC9CbG9iLmg6CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjpjcmVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6QmxvYjo6dHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjppdGVt
cyk6CisgICAgICAgICogaHRtbC9CbG9iSXRlbS5jcHA6IEFkZGVkLgorICAgICAgICAqIGh0bWwv
QmxvYkl0ZW0uaDogQWRkZWQuCisgICAgICAgICogaHRtbC9GaWxlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmdldEZpbGVUeXBlRnJvbVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZTo6Rmls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlOjpuYW1lKToKKyAgICAgICAgKiBodG1sL0ZpbGUu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGU6OmZpbGVOYW1lKToKKyAgICAgICAgKiBodG1sL0Zp
bGVTdHJlYW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVN0cmVhbTo6b3BlbkZvclJlYWQp
OgorICAgICAgICAqIGh0bWwvRm9ybURhdGFMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZv
cm1EYXRhTGlzdDo6YXBwZW5kU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhTGlz
dDo6YXBwZW5kQmxvYik6CisgICAgICAgICogaHRtbC9Gb3JtRGF0YUxpc3QuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkZvcm1EYXRhTGlzdDo6SXRlbTo6SXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpG
b3JtRGF0YUxpc3Q6Okl0ZW06OmRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGFMaXN0
OjpJdGVtOjppdGVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhRWxlbWVudDo6Rm9ybURhdGFFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9y
bURhdGE6OmRlZXBDb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjphcHBlbmREYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjphcHBlbmRTdHJpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9ybURhdGE6OmFwcGVuZEZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURh
dGE6OmFwcGVuZEJsb2IpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6OmFwcGVuZEZpbGVS
YW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YTo6YXBwZW5kRE9NRm9ybURhdGEpOgor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkZvcm1EYXRhRWxlbWVudDo6Rm9ybURhdGFFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZv
cm1EYXRhRWxlbWVudDo6aXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YUVsZW1lbnQ6
OkJsb2JJdGVtV3JhcHBlcjo6QmxvYkl0ZW1XcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZv
cm1EYXRhRWxlbWVudDo6QmxvYkl0ZW1XcmFwcGVyOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OkZvcm1EYXRhRWxlbWVudDo6QmxvYkl0ZW1XcmFwcGVyOjpkYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkZvcm1EYXRhRWxlbWVudDo6QmxvYkl0ZW1XcmFwcGVyOjpyZWxlYXNlQnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3Ih
PSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9tYWMvRm9ybURhdGFTdHJlYW1NYWMubW06
CisgICAgICAgIChXZWJDb3JlOjpjbG9zZUN1cnJlbnRTdHJlYW0pOgorICAgICAgICAoV2ViQ29y
ZTo6YWR2YW5jZUN1cnJlbnRTdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6Zm9ybUNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpmb3JtUmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpzZXRIVFRQ
Qm9keSk6CisgICAgICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlhNTEh0dHBSZXF1ZXN0OjpzZW5kKToKKwogMjAxMC0wNS0xMSAgSmlhbiBMaSAgPGppYW5s
aUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gRml4IGNvbXBpbGluZyBlcnJv
biBvbiBzbm93IGxlb3BhcmQuCmRpZmYgLS1naXQgYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIv
V2ViQ29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCBhNmUyMzAyYzUxMDM2NjU2YmYwODVhMGVhYWQx
ZDBhMjAxY2FmYmFhLi42YzNlZGY0YThkNjk0ZTg0M2ZiMzI5YzU2NTg0MmNkM2M0YmI0YTUyIDEw
MDY0NAotLS0gYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCisrKyBiL1dlYkNvcmUvR05VbWFrZWZp
bGUuYW0KQEAgLTEwMjIsNiArMTAyMiw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29y
ZS9oaXN0b3J5L1BhZ2VDYWNoZS5oIFwKIAlXZWJDb3JlL2h0bWwvQmxvYi5jcHAgXAogCVdlYkNv
cmUvaHRtbC9CbG9iLmggXAorCVdlYkNvcmUvaHRtbC9CbG9iSXRlbS5jcHAgXAorCVdlYkNvcmUv
aHRtbC9CbG9iSXRlbS5oIFwKIAlXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0NvbnRleHRBdHRy
aWJ1dGVzLmggXAogCVdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzR3JhZGllbnQuY3BwIFwKIAlX
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0dyYWRpZW50LmggXApkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCAxNGVmNGY3YzFhNWI5
ZTI5YTE4MzU1ZGUxNTkxMjc3MDY2ODVmM2E3Li5iNDU3YWE5YzEyZmM4YmMyMjBkYTg3ZTVlYzk1
ZTNhOTViZmY3NzM5IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQpAQCAtMTM3MCw2ICsxMzcwLDggQEAKICAgICAgICAgICAgICdoaXN0
b3J5L1BhZ2VDYWNoZS5oJywKICAgICAgICAgICAgICdodG1sL0Jsb2IuY3BwJywKICAgICAgICAg
ICAgICdodG1sL0Jsb2IuaCcsCisgICAgICAgICAgICAnaHRtbC9CbG9iSXRlbS5jcHAnLAorICAg
ICAgICAgICAgJ2h0bWwvQmxvYkl0ZW0uaCcsCiAgICAgICAgICAgICAnaHRtbC9jYW52YXMvV2Vi
R0xBcnJheS5jcHAnLAogICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMQXJyYXkuaCcsCiAg
ICAgICAgICAgICAnaHRtbC9jYW52YXMvV2ViR0xBcnJheUJ1ZmZlci5jcHAnLApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggNGFlMmEw
ZjdiNzdhMzFiNDNlZTFiMDIzNDc5YTg0ZjBkZGZlMTdhYS4uNTgwZDVlMjg0MGEyZDEyZWRhMDQx
MmM3NTcyMGVkZTU1NDQ3ZTU3NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnBybworKysg
Yi9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC01ODUsNiArNTg1LDcgQEAgU09VUkNFUyArPSBcCiAg
ICAgaGlzdG9yeS9xdC9IaXN0b3J5SXRlbVF0LmNwcCBcCiAgICAgaGlzdG9yeS9QYWdlQ2FjaGUu
Y3BwIFwKICAgICBodG1sL0Jsb2IuY3BwIFwKKyAgICBodG1sL0Jsb2JJdGVtLmNwcCBcCiAgICAg
aHRtbC9jYW52YXMvQ2FudmFzR3JhZGllbnQuY3BwIFwKICAgICBodG1sL2NhbnZhcy9DYW52YXNQ
YXR0ZXJuLmNwcCBcCiAgICAgaHRtbC9jYW52YXMvQ2FudmFzUGl4ZWxBcnJheS5jcHAgXApAQCAt
MTMwMiw2ICsxMzAzLDcgQEAgSEVBREVSUyArPSBcCiAgICAgaGlzdG9yeS9IaXN0b3J5SXRlbS5o
IFwKICAgICBoaXN0b3J5L1BhZ2VDYWNoZS5oIFwKICAgICBodG1sL0Jsb2IuaCBcCisgICAgaHRt
bC9CbG9iSXRlbS5oIFwKICAgICBodG1sL2NhbnZhcy9DYW52YXNHcmFkaWVudC5oIFwKICAgICBo
dG1sL2NhbnZhcy9DYW52YXNQYXR0ZXJuLmggXAogICAgIGh0bWwvY2FudmFzL0NhbnZhc1BpeGVs
QXJyYXkuaCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCBhZmU0YmI5
ZWIwOGMxZWRjYmMxNzIxZjU4ZjczYjcwNGMzOWJmMDZkLi5kNWJiMTJkZjA3MmM1Y2VjODhjMDhm
YTQ4YjI2ZWQxOWY2OTkxNmYwIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oK
QEAgLTMwNTA5LDYgKzMwNTA5LDE0IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0K
KwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcQmxvYkl0ZW0uY3BwIg0KKwkJCQk+DQorCQkJPC9G
aWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxCbG9iSXRlbS5oIg0K
KwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRt
bFxjYW52YXNcQ2FudmFzR3JhZGllbnQuY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KZGlmZiAt
LWdpdCBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYzkzODMxZDY0NzIzYTJl
ZjgzMzc5ZjAxZTUyNDMxYjE0ZTM3MTM1OS4uNWFlOTc3NGM4ZDIxYjk3ZmExNjUyMjQzOTAyNjE1
ZDhmZmQyY2QzMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
QEAgLTY2NSw3ICs2NjUsNyBAQAogCQkyRTk0RjQ1MTExOTIwOTZBMDBCN0Y3NUQgLyogRmlsZVJl
YWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU5
NEYzQ0MxMThCOTA4RTAwQjdGNzVEIC8qIEZpbGVSZWFkZXIuaCAqLzsgfTsKIAkJMkVBNzY4MDQw
RkU3MTI2NDAwQUI5QzhBIC8qIFdvcmtlclNjcmlwdExvYWRlckNsaWVudC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkVBNzY4MDMwRkU3MTI2NDAwQUI5
QzhBIC8qIFdvcmtlclNjcmlwdExvYWRlckNsaWVudC5oICovOyB9OwogCQkyRUFGQUYwRTEwRTJB
RjJEMDA3RUQzRDYgLyogQmxvYi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyRUFGQUYwQjEwRTJBRjJEMDA3RUQzRDYgLyogQmxvYi5jcHAgKi87IH07
Ci0JCTJFQUZBRjBGMTBFMkFGMkQwMDdFRDNENiAvKiBCbG9iLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRUFGQUYwQzEwRTJBRjJEMDA3RUQzRDYgLyog
QmxvYi5oICovOyB9OworCQkyRUFGQUYwRjEwRTJBRjJEMDA3RUQzRDYgLyogQmxvYi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkVBRkFGMEMxMEUyQUYy
RDAwN0VEM0Q2IC8qIEJsb2IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkyRUNGN0FEQzEwMTYyQjM4MDA0MjdERTcgLyogSlNFcnJvckV2ZW50LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFQ0Y3QURB
MTAxNjJCMzgwMDQyN0RFNyAvKiBKU0Vycm9yRXZlbnQuY3BwICovOyB9OwogCQkyRUNGN0FERDEw
MTYyQjM4MDA0MjdERTcgLyogSlNFcnJvckV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRUNGN0FEQjEwMTYyQjM4MDA0MjdERTcgLyogSlNFcnJv
ckV2ZW50LmggKi87IH07CiAJCTJFQ0Y3QUUxMTAxNjJCNTgwMDQyN0RFNyAvKiBFcnJvckV2ZW50
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFQ0Y3
QURFMTAxNjJCNTgwMDQyN0RFNyAvKiBFcnJvckV2ZW50LmNwcCAqLzsgfTsKQEAgLTIyNTYsNiAr
MjI1Niw4IEBACiAJCTg1Rjc0RTBBMEFBOERGOEMwMDBEQzI4NCAvKiBET01DU1NVbmtub3duUnVs
ZS5oIGluIENvcHkgR2VuZXJhdGVkIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gODUwMzJERDUwQUE4QzlCRTAwN0QzQjdEIC8qIERPTUNTU1Vua25vd25SdWxlLmgg
Ki87IH07CiAJCTg1RkYzMTVBMEFBRkJGQ0IwMDM3NEYzOCAvKiBET01LZXlib2FyZEV2ZW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NUZGMzE1ODBB
QUZCRkNCMDAzNzRGMzggLyogRE9NS2V5Ym9hcmRFdmVudC5oICovOyB9OwogCQk4NUZGMzE1QjBB
QUZCRkNCMDAzNzRGMzggLyogRE9NS2V5Ym9hcmRFdmVudC5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg1RkYzMTU5MEFBRkJGQ0IwMDM3NEYzOCAvKiBE
T01LZXlib2FyZEV2ZW50Lm1tICovOyB9OworCQk4OTE4MTQzMDExODdDNEI0MDBCRjY5OEEgLyog
QmxvYkl0ZW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gODkxODE0MkIxMTg3QzRCNDAwQkY2OThBIC8qIEJsb2JJdGVtLmNwcCAqLzsgfTsKKwkJODkx
ODE0MzExMTg3QzRCNDAwQkY2OThBIC8qIEJsb2JJdGVtLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4OTE4MTQyQzExODdDNEI0MDBCRjY5OEEgLyogQmxv
Ykl0ZW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk4OTUyNTM1MjExNjQxQjM0MDBDQUJGMDAgLyogRmlsZVRocmVhZC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4OTUyNTM1MDExNjQxQjM0MDBDQUJG
MDAgLyogRmlsZVRocmVhZC5jcHAgKi87IH07CiAJCTg5NTI1MzUzMTE2NDFCMzQwMENBQkYwMCAv
KiBGaWxlVGhyZWFkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA4OTUyNTM1MTExNjQxQjM0MDBDQUJGMDAgLyogRmlsZVRocmVhZC5oICovOyB9OwogCQk4
OTUyNTNENzExNkM0QzY4MDBDQUJGMDAgLyogRmlsZVN0cmVhbS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4OTUyNTNENDExNkM0QzY4MDBDQUJGMDAg
LyogRmlsZVN0cmVhbS5jcHAgKi87IH07CkBAIC03Nzk1LDYgKzc3OTcsOCBAQAogCQk4NUY1NkE3
OTBBOThDRTM3MDBBREI2MEEgLyogRE9NUHJvY2Vzc2luZ0luc3RydWN0aW9uLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IERPTVByb2Nlc3NpbmdJbnN0cnVjdGlv
bi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODVGRjMxNTgwQUFGQkZDQjAwMzc0
RjM4IC8qIERPTUtleWJvYXJkRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IERPTUtleWJvYXJkRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODVG
RjMxNTkwQUFGQkZDQjAwMzc0RjM4IC8qIERPTUtleWJvYXJkRXZlbnQubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRE9NS2V5Ym9hcmRFdmVudC5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODkxODE0MkIxMTg3QzRCNDAwQkY2OThBIC8qIEJsb2JJ
dGVtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJsb2JJdGVtLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODkxODE0MkMxMTg3QzRCNDAwQkY2OThB
IC8qIEJsb2JJdGVtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJsb2JJdGVt
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg5NTI1MzUwMTE2NDFCMzQwMENBQkYw
MCAvKiBGaWxlVGhyZWFkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEZpbGVUaHJlYWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4OTUyNTM1MTEx
NjQxQjM0MDBDQUJGMDAgLyogRmlsZVRocmVhZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBGaWxlVGhyZWFkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg5NTI1
M0Q0MTE2QzRDNjgwMENBQkYwMCAvKiBGaWxlU3RyZWFtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEZpbGVTdHJlYW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMTMxOTUsNiArMTMxOTksOCBAQAogCQkJCTJFQUZBRjBCMTBFMkFGMkQwMDdFRDNE
NiAvKiBCbG9iLmNwcCAqLywKIAkJCQkyRUFGQUYwQzEwRTJBRjJEMDA3RUQzRDYgLyogQmxvYi5o
ICovLAogCQkJCTJFQUZBRjBEMTBFMkFGMkQwMDdFRDNENiAvKiBCbG9iLmlkbCAqLywKKwkJCQk4
OTE4MTQyQjExODdDNEI0MDBCRjY5OEEgLyogQmxvYkl0ZW0uY3BwICovLAorCQkJCTg5MTgxNDJD
MTE4N0M0QjQwMEJGNjk4QSAvKiBCbG9iSXRlbS5oICovLAogCQkJCTkzQzQ0MUVEMEY4MTNBMUEw
MEMxQTYzNCAvKiBDb2xsZWN0aW9uQ2FjaGUuY3BwICovLAogCQkJCTkzQzQ0MUVFMEY4MTNBMUEw
MEMxQTYzNCAvKiBDb2xsZWN0aW9uQ2FjaGUuaCAqLywKIAkJCQk5M0M0NDFGRjBGODEzQUUxMDBD
MUE2MzQgLyogQ29sbGVjdGlvblR5cGUuaCAqLywKQEAgLTE2NjY1LDYgKzE2NjcxLDcgQEAKIAkJ
CQlCQzVFQjkyMDBFODIwNDA4MDBCMjU5NjUgLyogQmluZGluZ1VSSS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTg5OTQzMjgwQjQyMzM4ODAwRDdDODAyIC8qIEJpdG1hcEltYWdlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkyRUFGQUYwRjEwRTJBRjJEMDA3RUQzRDYgLyogQmxvYi5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJODkxODE0MzExMTg3QzRCNDAwQkY2OThBIC8qIEJsb2JJdGVtLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk5M0YxOTlCRTA4MjQ1RTU5MDAxRTlBQkMgLyogQmxvY2tFeGNlcHRpb25zLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQzVFQjVFMTBFODFCRTg3MDBCMjU5NjUgLyogQm9yZGVyRGF0
YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1RUI1REIwRTgxQjdFQTAwQjI1OTY1IC8qIEJvcmRl
clZhbHVlLmggaW4gSGVhZGVycyAqLywKQEAgLTE3OTEzLDYgKzE3OTIwLDcgQEAKIAkJCQlGRTgw
RDdBQTBFOUMxRUQyMDAwRDZGNzUgLyogSlNDdXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJhY2suaCBp
biBIZWFkZXJzICovLAogCQkJCTFBMzQxN0M5MENFQ0ZGMjUwMDQ5Q0JERSAvKiBKU0N1c3RvbVZv
aWRDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTEwQjkzN0MwQjczQzAwQTAwM0VEODkw
IC8qIEpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlCNTlERDY5
OTExOTAyOUU1MDA3RTk2ODQgLyogSlNEYXRhYmFzZUNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywK
IAkJCQkxQUU4MkY5MDBDQUFGQTlEMDAyMjM3QUUgLyogSlNEYXRhYmFzZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkM3N0QxNkEwRkYxOUY1NjAwNzA4ODdCIC8qIEpTRGF0YUdyaWRDb2x1bW4uaCBp
biBIZWFkZXJzICovLAogCQkJCUJDNzdEMTZDMEZGMTlGNTYwMDcwODg3QiAvKiBKU0RhdGFHcmlk
Q29sdW1uTGlzdC5oIGluIEhlYWRlcnMgKi8sCkBAIC0xODA3Nyw3ICsxODA4NSwxMSBAQAogCQkJ
CUJDODI0MzI5MEQwQ0U4QTIwMDQ2MEM4RiAvKiBKU1NRTEVycm9yLmggaW4gSGVhZGVycyAqLywK
IAkJCQkxQUU4MkZFRDBDQUIwN0VFMDAyMjM3QUUgLyogSlNTUUxSZXN1bHRTZXQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTFBRkUxMTlBMENCRkZDQzQwMDMwMTdGQSAvKiBKU1NRTFJlc3VsdFNldFJv
d0xpc3QuaCBpbiBIZWFkZXJzICovLAorCQkJCUI1OURENkE1MTE5MDJBNjIwMDdFOTY4NCAvKiBK
U1NRTFN0YXRlbWVudENhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKKwkJCQlCNTlERDZBOTExOTAy
QTcxMDA3RTk2ODQgLyogSlNTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzgyNDMyQTBEMENFOEEyMDA0NjBDOEYgLyogSlNTUUxUcmFuc2FjdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJQjU5REQ2OUQxMTkwMkE0MjAwN0U5Njg0IC8qIEpTU1FMVHJhbnNh
Y3Rpb25DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCisJCQkJQjU5REQ2QTExMTkwMkE1MjAwN0U5
Njg0IC8qIEpTU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk1MUUwQkFFQjBEQTU1RDRBMDBBOUU0MTcgLyogSlNTdG9yYWdlRXZlbnQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRjUwMjZBMTAyQkE5NDMwMDY2RjM5QSAvKiBKU1N0eWxlTWVkaWEuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDRTAxMzlCMEMwQkVGMTgwMDQzODYwQSAvKiBKU1N0eWxlU2hlZXQu
aCBpbiBIZWFkZXJzICovLApAQCAtMTkxMjUsMTEgKzE5MTM3LDYgQEAKIAkJCQlFMUJFNTEyRTBD
RjZDNTEyMDAyRUE5NTkgLyogWFNMVFVuaWNvZGVTb3J0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5
N0RENEQ4NzBGREY0RDZFMDBFQ0Y5QTQgLyogWFNTQXVkaXRvci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQ0UxNzJFMDExMTM2RThDRTAwNjJBNTMzIC8qIFpvb21Nb2RlLmggaW4gSGVhZGVycyAqLywK
LQkJCQlCNTlERDY5OTExOTAyOUU1MDA3RTk2ODQgLyogSlNEYXRhYmFzZUNhbGxiYWNrLmggaW4g
SGVhZGVycyAqLywKLQkJCQlCNTlERDY5RDExOTAyQTQyMDA3RTk2ODQgLyogSlNTUUxUcmFuc2Fj
dGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKLQkJCQlCNTlERDZBMTExOTAyQTUyMDA3RTk2
ODQgLyogSlNTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAotCQkJ
CUI1OURENkE1MTE5MDJBNjIwMDdFOTY4NCAvKiBKU1NRTFN0YXRlbWVudENhbGxiYWNrLmggaW4g
SGVhZGVycyAqLywKLQkJCQlCNTlERDZBOTExOTAyQTcxMDA3RTk2ODQgLyogSlNTUUxTdGF0ZW1l
bnRFcnJvckNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQlCNTVENUFBNDExOTEzMUZDMDBC
Q0MzMTUgLyogSlNTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQjU4Q0VCNjkxMTkxMzYwNzAwMkE2NzkwIC8qIEpTRGF0YWJhc2VTeW5jLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCNThDRUI2RDExOTEzNjFDMDAyQTY3OTAgLyogSlNTUUxUcmFuc2FjdGlvblN5
bmMuaCBpbiBIZWFkZXJzICovLApAQCAtMTk0NjMsNiArMTk0NzAsNyBAQAogCQkJCUJDNUVCOTFG
MEU4MjA0MDgwMEIyNTk2NSAvKiBCaW5kaW5nVVJJLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4
OTk0MzI5MEI0MjMzODgwMEQ3QzgwMiAvKiBCaXRtYXBJbWFnZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkyRUFGQUYwRTEwRTJBRjJEMDA3RUQzRDYgLyogQmxvYi5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQk4OTE4MTQzMDExODdDNEI0MDBCRjY5OEEgLyogQmxvYkl0ZW0uY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJOTNGMTlBRTEwODI0NUU1OTAwMUU5QUJDIC8qIEJsb2NrRXhjZXB0aW9ucy5tbSBp
biBTb3VyY2VzICovLAogCQkJCUJDRUE0ODU0MDk3RDkzMDIwMDk0QzlFNCAvKiBicmVha19saW5l
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzMwOUREQTA5OUU2NDkyMDA1NkU1ODEgLyogQnJl
YWtCbG9ja3F1b3RlQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTIwMjExLDggKzIwMjE5
LDkgQEAKIAkJCQk1MUVDOTI2NTBDRTkwREQ0MDBGOTAzMDggLyogSlNDdXN0b21TUUxTdGF0ZW1l
bnRFcnJvckNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBMzQxN0NBMENFQ0ZGMjUw
MDQ5Q0JERSAvKiBKU0N1c3RvbVZvaWRDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlF
MTBCOTNDMzBCNzNDMjkxMDAzRUQ4OTAgLyogSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJMUFFODJGOEYwQ0FBRkE5RDAwMjIzN0FFIC8qIEpTRGF0YWJhc2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQjU5REQ2OUExMTkwMjlFNTAwN0U5Njg0IC8qIEpTRGF0
YWJhc2VDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0NFNThBQzEwNjFFOENGMDA4
RkIzNUEgLyogSlNEYXRhYmFzZUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkxQUU4MkY4
RjBDQUFGQTlEMDAyMjM3QUUgLyogSlNEYXRhYmFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
Qzc3RDE2OTBGRjE5RjU2MDA3MDg4N0IgLyogSlNEYXRhR3JpZENvbHVtbi5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCQzc3RDE2QjBGRjE5RjU2MDA3MDg4N0IgLyogSlNEYXRhR3JpZENvbHVtbkxp
c3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM3N0QxNTIwRkYxOUM3MzAwNzA4ODdCIC8qIEpT
RGF0YUdyaWRDb2x1bW5MaXN0Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjA0MjIsOCAr
MjA0MzEsMTIgQEAKIAkJCQkxQUU4MkZFQzBDQUIwN0VFMDAyMjM3QUUgLyogSlNTUUxSZXN1bHRT
ZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFGRTExOTkwQ0JGRkNDNDAwMzAxN0ZBIC8qIEpT
U1FMUmVzdWx0U2V0Um93TGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MURDRTgwMjBDQUM5
RjFDMDA0ODgzNTggLyogSlNTUUxSZXN1bHRTZXRSb3dMaXN0Q3VzdG9tLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCUI1OURENkE2MTE5MDJBNjIwMDdFOTY4NCAvKiBKU1NRTFN0YXRlbWVudENhbGxi
YWNrLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUI1OURENkFBMTE5MDJBNzEwMDdFOTY4NCAvKiBK
U1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE0Qzc2
MzgwQ0U5MjI1RTAwN0VGM0NEIC8qIEpTU1FMVHJhbnNhY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJQjU5REQ2OUUxMTkwMkE0MjAwN0U5Njg0IC8qIEpTU1FMVHJhbnNhY3Rpb25DYWxsYmFj
ay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUQyMzE2RTBDRDI2OUU3MDBDMUYxOTQgLyogSlNT
UUxUcmFuc2FjdGlvbkN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCNTlERDZBMjExOTAy
QTUyMDA3RTk2ODQgLyogSlNTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNTFFM0Y5RDYwREEwNUUxRDAwMjUwOTExIC8qIEpTU3RvcmFnZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk1MUQwQzUxNjBEQUE5MEI3MDAzQjM4MzEgLyogSlNTdG9yYWdlQ3Vz
dG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxRTBCQUVBMERBNTVENEEwMEE5RTQxNyAvKiBK
U1N0b3JhZ2VFdmVudC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTIxMzk0LDExICsyMTQwNyw2IEBA
CiAJCQkJOTNGMTlCMDUwODI0NUU1OTAwMUU5QUJDIC8qIFhTTFRQcm9jZXNzb3JMaWJ4c2x0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUUxQkU1MTJEMENGNkM1MTIwMDJFQTk1OSAvKiBYU0xUVW5p
Y29kZVNvcnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTdERDREODYwRkRGNEQ2RTAwRUNGOUE0
IC8qIFhTU0F1ZGl0b3IuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQjU5REQ2OUExMTkwMjlFNTAw
N0U5Njg0IC8qIEpTRGF0YWJhc2VDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlCNTlE
RDY5RTExOTAyQTQyMDA3RTk2ODQgLyogSlNTUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmNwcCBpbiBT
b3VyY2VzICovLAotCQkJCUI1OURENkEyMTE5MDJBNTIwMDdFOTY4NCAvKiBKU1NRTFRyYW5zYWN0
aW9uRXJyb3JDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlCNTlERDZBNjExOTAyQTYy
MDA3RTk2ODQgLyogSlNTUUxTdGF0ZW1lbnRDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKLQkJ
CQlCNTlERDZBQTExOTAyQTcxMDA3RTk2ODQgLyogSlNTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNr
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUI1NUQ1QUE1MTE5MTMxRkMwMEJDQzMxNSAvKiBKU1NR
TFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUI1NUQ1QUE4
MTE5MTMyNTAwMEJDQzMxNSAvKiBKU0RhdGFiYXNlU3luY0N1c3RvbS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlCNTVENUFBOTExOTEzMjUwMDBCQ0MzMTUgLyogSlNTUUxUcmFuc2FjdGlvblN5bmND
dXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6
ZWRTY3JpcHRWYWx1ZS5jcHAKaW5kZXggNTBhYzg2YmFjZTQxZWM1YzFiMTEyNWRkNDRjNmI2ZjEx
ZTYxODZhOC4uNWY3YTc1ZjViZTM0NjhiODRiMjg3ZmJjMWNiMWUxYWViM2QwNzQyYiAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCisrKyBi
L1dlYkNvcmUvYmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcApAQCAtNTU4LDcg
KzU1OCw4IEBAIHByaXZhdGU6CiAgICAgICAgIEJsb2IqIGJsb2IgPSBWOEJsb2I6OnRvTmF0aXZl
KHZhbHVlLkFzPHY4OjpPYmplY3Q+KCkpOwogICAgICAgICBpZiAoIWJsb2IpCiAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIG1fd3JpdGVyLndyaXRlQmxvYihibG9iLT5wYXRoKCkpOworICAg
ICAgICAvLyBGSVhNRQorICAgICAgICBtX3dyaXRlci53cml0ZUZpbGUoYmxvYi0+cGF0aCgpKTsK
ICAgICB9CiAKICAgICB2b2lkIHdyaXRlRmlsZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUp
CkBAIC04NTMsNyArODU0LDggQEAgcHJpdmF0ZToKICAgICAgICAgU3RyaW5nIHBhdGg7CiAgICAg
ICAgIGlmICghcmVhZFdlYkNvcmVTdHJpbmcoJnBhdGgpKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICBQYXNzUmVmUHRyPEJsb2I+IGJsb2IgPSBCbG9iOjpjcmVhdGUocGF0aCk7
CisgICAgICAgIC8vIEZJWE1FCisgICAgICAgIFBhc3NSZWZQdHI8RmlsZT4gYmxvYiA9IEZpbGU6
OmNyZWF0ZShwYXRoKTsKICAgICAgICAgKnZhbHVlID0gdG9WOChibG9iKTsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0Jsb2IuY3BwIGIvV2Vi
Q29yZS9odG1sL0Jsb2IuY3BwCmluZGV4IDgzYmJkYzBjNTI2NDg0NTQyNjg4MTkyNjIxNjg0YjYy
ODIwMjRiZjQuLjY5ZDgzNDhjMGNkMGU0YzQ2OWIxODI5NzMzZDM3NDg5MGYyNGRkYTUgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvaHRtbC9CbG9iLmNwcAorKysgYi9XZWJDb3JlL2h0bWwvQmxvYi5jcHAK
QEAgLTI5LDkwICsyOSw2NyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKwogI2luY2x1
ZGUgIkJsb2IuaCIKIAorI2luY2x1ZGUgIkJsb2JJdGVtLmgiCiAjaW5jbHVkZSAiRmlsZVN5c3Rl
bS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLWNv
bnN0IGludCBCbG9iOjp0b0VuZE9mRmlsZSA9IC0xOwotY29uc3QgZG91YmxlIEJsb2I6OmRvTm90
Q2hlY2tGaWxlQ2hhbmdlID0gMDsKLSNlbmRpZgorQmxvYjo6QmxvYihjb25zdCBTdHJpbmcmIHR5
cGUpCisgICAgOiBtX3R5cGUodHlwZSkKK3sKK30KIAotQmxvYjo6QmxvYihjb25zdCBTdHJpbmcm
IHBhdGgpCi0gICAgOiBtX3BhdGgocGF0aCkKLSNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAgICAs
IG1fc3RhcnQoMCkKLSAgICAsIG1fbGVuZ3RoKHRvRW5kT2ZGaWxlKQotICAgICwgbV9zbmFwc2hv
dENhcHR1cmVkKGZhbHNlKQotICAgICwgbV9zbmFwc2hvdFNpemUoMCkKLSAgICAsIG1fc25hcHNo
b3RNb2RpZmljYXRpb25UaW1lKGRvTm90Q2hlY2tGaWxlQ2hhbmdlKQotI2VuZGlmCit1bnNpZ25l
ZCBsb25nIGxvbmcgQmxvYjo6c2l6ZSgpIGNvbnN0CiB7CisgICAgLy8gRklYTUU6IEphdmFTY3Jp
cHQgY2Fubm90IHJlcHJlc2VudCBzaXplcyBhcyBsYXJnZSBhcyB1bnNpZ25lZCBsb25nIGxvbmcs
IHdlIG5lZWQgdG8KKyAgICAvLyBjb21lIHVwIHdpdGggYW4gZXhjZXB0aW9uIHRvIHRocm93IGlm
IGZpbGUgc2l6ZSBpcyBub3QgcmVwcmVzZXRhYmxlLgorICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBz
aXplID0gMDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1faXRlbUxpc3Quc2l6ZSgpOyAr
K2kpCisgICAgICAgIHNpemUgKz0gbV9pdGVtTGlzdFtpXS0+c2l6ZSgpOworICAgIHJldHVybiBz
aXplOwogfQogCi0jaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi1CbG9iOjpCbG9iKGNvbnN0IFN0cmlu
ZyYgcGF0aCwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoLCBsb25nIGxvbmcgc25h
cHNob3RTaXplLCBkb3VibGUgc25hcHNob3RNb2RpZmljYXRpb25UaW1lKQotICAgIDogbV9wYXRo
KHBhdGgpCi0gICAgLCBtX3N0YXJ0KHN0YXJ0KQotICAgICwgbV9sZW5ndGgobGVuZ3RoKQotICAg
ICwgbV9zbmFwc2hvdENhcHR1cmVkKHRydWUpCi0gICAgLCBtX3NuYXBzaG90U2l6ZShzbmFwc2hv
dFNpemUpCi0gICAgLCBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZShzbmFwc2hvdE1vZGlmaWNh
dGlvblRpbWUpCitjb25zdCBTdHJpbmcmIEJsb2I6OnBhdGgoKSBjb25zdAogewotICAgIEFTU0VS
VChzdGFydCA+PSAwICYmIGxlbmd0aCA+PSAwICYmIHN0YXJ0ICsgbGVuZ3RoIDw9IHNuYXBzaG90
U2l6ZSAmJiBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUpOworICAgIEFTU0VSVChtX2l0ZW1MaXN0
LnNpemUoKSA9PSAxICYmIG1faXRlbUxpc3RbMF0tPnRvRmlsZUl0ZW0oKSk7CisgICAgcmV0dXJu
IG1faXRlbUxpc3RbMF0tPnRvRmlsZUl0ZW0oKS0+cGF0aCgpOwogfQotI2VuZGlmCiAKLXVuc2ln
bmVkIGxvbmcgbG9uZyBCbG9iOjpzaXplKCkgY29uc3QKK3ZvaWQgQmxvYjo6YXBwZW5kQmxvYkl0
ZW0oUGFzc1JlZlB0cjxCbG9iSXRlbT4gaXRlbSkKIHsKLSAgICAvLyBGSVhNRTogSmF2YVNjcmlw
dCBjYW5ub3QgcmVwcmVzZW50IHNpemVzIGFzIGxhcmdlIGFzIHVuc2lnbmVkIGxvbmcgbG9uZywg
d2UgbmVlZCB0bwotICAgIC8vIGNvbWUgdXAgd2l0aCBhbiBleGNlcHRpb24gdG8gdGhyb3cgaWYg
ZmlsZSBzaXplIGlzIG5vdCByZXByZXNldGFibGUuCi0jaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0g
ICAgaWYgKG1fc25hcHNob3RDYXB0dXJlZCkKLSAgICAgICAgcmV0dXJuIG1fbGVuZ3RoOwotI2Vu
ZGlmCi0gICAgbG9uZyBsb25nIHNpemU7Ci0gICAgaWYgKCFnZXRGaWxlU2l6ZShtX3BhdGgsIHNp
emUpKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQg
bG9uZyBsb25nPihzaXplKTsKKyAgICBtX2l0ZW1MaXN0LmFwcGVuZChpdGVtKTsKIH0KIAogI2lm
IEVOQUJMRShCTE9CX1NMSUNFKQogUGFzc1JlZlB0cjxCbG9iPiBCbG9iOjpzbGljZShsb25nIGxv
bmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgpIGNvbnN0CiB7Ci0gICAgLy8gV2hlbiB3ZSBzbGlj
ZSBhIGZpbGUgZm9yIHRoZSBmaXJzdCB0aW1lLCB3ZSBvYnRhaW4gYSBzbmFwc2hvdCBvZiB0aGUg
ZmlsZSBieSBjYXB0dXJpbmcgaXRzIGN1cnJlbnQgc2l6ZSBhbmQgbW9kaWZpY2F0aW9uIHRpbWUu
Ci0gICAgLy8gVGhlIG1vZGlmaWNhdGlvbiB0aW1lIHdpbGwgYmUgdXNlZCB0byB2ZXJpZnkgaWYg
dGhlIGZpbGUgaGFzIGJlZW4gY2hhbmdlZCBvciBub3QsIHdoZW4gdGhlIHVuZGVybHlpbmcgZGF0
YSBhcmUgYWNjZXNzZWQuCi0gICAgbG9uZyBsb25nIHNuYXBzaG90U2l6ZTsKLSAgICBkb3VibGUg
c25hcHNob3RNb2RpZmljYXRpb25UaW1lOwotICAgIGlmIChtX3NuYXBzaG90Q2FwdHVyZWQpIHsK
LSAgICAgICAgc25hcHNob3RTaXplID0gbV9zbmFwc2hvdFNpemU7Ci0gICAgICAgIHNuYXBzaG90
TW9kaWZpY2F0aW9uVGltZSA9IG1fc25hcHNob3RNb2RpZmljYXRpb25UaW1lOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIC8vIElmIHdlIGZhaWwgdG8gcmV0cmlldmUgdGhlIHNpemUgb3IgbW9kaWZp
Y2F0aW9uIHRpbWUsIHByb2JhYmx5IGR1ZSB0byB0aGF0IHRoZSBmaWxlIGhhcyBiZWVuIGRlbGV0
ZWQsIGFuIGVtcHR5IGJsb2Igd2lsbCBiZSByZXR1cm5lZC4KLSAgICAgICAgdGltZV90IG1vZGlm
aWNhdGlvblRpbWU7Ci0gICAgICAgIGlmICghZ2V0RmlsZVNpemUobV9wYXRoLCBzbmFwc2hvdFNp
emUpIHx8ICFnZXRGaWxlTW9kaWZpY2F0aW9uVGltZShtX3BhdGgsIG1vZGlmaWNhdGlvblRpbWUp
KSB7Ci0gICAgICAgICAgICBzbmFwc2hvdFNpemUgPSAwOwotICAgICAgICAgICAgc25hcHNob3RN
b2RpZmljYXRpb25UaW1lID0gMDsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBzbmFwc2hv
dE1vZGlmaWNhdGlvblRpbWUgPSBtb2RpZmljYXRpb25UaW1lOwotICAgIH0KLQotICAgIC8vIENs
YW1wIHRoZSByYW5nZSBpZiBpdCBleGNlZWRzIHRoZSBzaXplIGxpbWl0LgogICAgIGlmIChzdGFy
dCA8IDApCiAgICAgICAgIHN0YXJ0ID0gMDsKICAgICBpZiAobGVuZ3RoIDwgMCkKICAgICAgICAg
bGVuZ3RoID0gMDsKIAotICAgIGlmIChzdGFydCA+IHNuYXBzaG90U2l6ZSkgeworICAgIC8vIENs
YW1wIHRoZSByYW5nZSBpZiBpdCBleGNlZWRzIHRoZSBzaXplIGxpbWl0LgorICAgIHVuc2lnbmVk
IGxvbmcgbG9uZyB0b3RhbFNpemUgPSBzaXplKCk7CisgICAgaWYgKHN0YXRpY19jYXN0PHVuc2ln
bmVkIGxvbmcgbG9uZz4oc3RhcnQpID4gdG90YWxTaXplKSB7CiAgICAgICAgIHN0YXJ0ID0gMDsK
ICAgICAgICAgbGVuZ3RoID0gMDsKLSAgICB9IGVsc2UgaWYgKHN0YXJ0ICsgbGVuZ3RoID4gc25h
cHNob3RTaXplKQotICAgICAgICBsZW5ndGggPSBzbmFwc2hvdFNpemUgLSBzdGFydDsKKyAgICB9
IGVsc2UgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oc3RhcnQgKyBsZW5ndGgp
ID4gdG90YWxTaXplKQorICAgICAgICBsZW5ndGggPSB0b3RhbFNpemUgLSBzdGFydDsKIAotICAg
IHJldHVybiBhZG9wdFJlZihuZXcgQmxvYihtX3BhdGgsIG1fc3RhcnQgKyBzdGFydCwgbGVuZ3Ro
LCBzbmFwc2hvdFNpemUsIHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSkpOworICAgIHNpemVfdCBp
ID0gMDsKKyAgICBSZWZQdHI8QmxvYj4gYmxvYiA9IEJsb2I6OmNyZWF0ZSgpOworICAgIGZvciAo
OyBpIDwgbV9pdGVtTGlzdC5zaXplKCkgJiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25n
PihzdGFydCkgPj0gbV9pdGVtTGlzdFtpXS0+c2l6ZSgpOyArK2kpCisgICAgICAgIHN0YXJ0IC09
IG1faXRlbUxpc3RbaV0tPnNpemUoKTsKKyAgICBmb3IgKDsgbGVuZ3RoID4gMCAmJiBpIDwgbV9p
dGVtTGlzdC5zaXplKCk7ICsraSkgeworICAgICAgICBibG9iLT5tX2l0ZW1MaXN0LmFwcGVuZChC
bG9iSXRlbTo6Y3JlYXRlUmFuZ2VJdGVtKG1faXRlbUxpc3RbaV0sIHN0YXJ0LCBsZW5ndGgpKTsK
KyAgICAgICAgbGVuZ3RoIC09IGJsb2ItPm1faXRlbUxpc3QubGFzdCgpLT5zaXplKCk7CisgICAg
ICAgIHN0YXJ0ID0gMDsKKyAgICB9CisgICAgcmV0dXJuIGJsb2IucmVsZWFzZSgpOwogfQotI2Vu
ZGlmCisjZW5kaWYgLy8gRU5BQkxFKEJMT0JfU0xJQ0UpCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9CbG9iLmggYi9XZWJDb3JlL2h0bWwvQmxvYi5o
CmluZGV4IGU4YjVmM2ZkZjA2OWEyYjQ4NzZlZDE2YWI4MWIyMmYwZmYwMzg5NzAuLjA0NmQ4YmRj
ZDk0OWFlNmMwODY0YTM3NDk3MTBiNWU1Mzg0NjVhZGMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRt
bC9CbG9iLmgKKysrIGIvV2ViQ29yZS9odG1sL0Jsb2IuaApAQCAtMzEsNjkgKzMxLDQyIEBACiAj
aWZuZGVmIEJsb2JfaAogI2RlZmluZSBCbG9iX2gKIAotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUu
aCIKKyNpbmNsdWRlICJCbG9iSXRlbS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0j
aW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgogI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQmxvYiA6IHB1Ymxp
YyBSZWZDb3VudGVkPEJsb2I+IHsKIHB1YmxpYzoKLSNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAg
ICBzdGF0aWMgY29uc3QgaW50IHRvRW5kT2ZGaWxlOwotICAgIHN0YXRpYyBjb25zdCBkb3VibGUg
ZG9Ob3RDaGVja0ZpbGVDaGFuZ2U7Ci0jZW5kaWYKLQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJs
b2I+IGNyZWF0ZShjb25zdCBTdHJpbmcmIHBhdGgpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8Qmxv
Yj4gY3JlYXRlKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQmxvYihwYXRo
KSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQmxvYihTdHJpbmcoKSkpOwogICAgIH0K
IAogICAgIHZpcnR1YWwgfkJsb2IoKSB7IH0KIAorICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXpl
KCkgY29uc3Q7CisgICAgY29uc3QgU3RyaW5nJiBwYXRoKCkgY29uc3Q7CisgICAgY29uc3QgU3Ry
aW5nJiB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CiAgICAgdmlydHVhbCBib29sIGlz
RmlsZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKLSNpZiBFTkFCTEUoQkxPQl9TTElDRSkK
LSAgICBQYXNzUmVmUHRyPEJsb2I+IHNsaWNlKGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxl
bmd0aCkgY29uc3Q7Ci0jZW5kaWYKKyAgICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8QmxvYkl0ZW0+
ID4gSXRlbUxpc3Q7CisgICAgdm9pZCBhcHBlbmRCbG9iSXRlbShQYXNzUmVmUHRyPEJsb2JJdGVt
PiBpdGVtKTsKKyAgICBjb25zdCBJdGVtTGlzdCYgaXRlbXMoKSBjb25zdCB7IHJldHVybiBtX2l0
ZW1MaXN0OyB9CiAKLSAgICBjb25zdCBTdHJpbmcmIHBhdGgoKSBjb25zdCB7IHJldHVybiBtX3Bh
dGg7IH0KLSAgICB1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSgpIGNvbnN0OwogI2lmIEVOQUJMRShC
TE9CX1NMSUNFKQotICAgIGxvbmcgbG9uZyBzdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnQ7
IH0KLSAgICBsb25nIGxvbmcgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KLSAg
ICBkb3VibGUgbW9kaWZpY2F0aW9uVGltZSgpIGNvbnN0IHsgcmV0dXJuIG1fc25hcHNob3RNb2Rp
ZmljYXRpb25UaW1lOyB9CisgICAgUGFzc1JlZlB0cjxCbG9iPiBzbGljZShsb25nIGxvbmcgc3Rh
cnQsIGxvbmcgbG9uZyBsZW5ndGgpIGNvbnN0OwogI2VuZGlmCiAKIHByb3RlY3RlZDoKLSAgICBC
bG9iKGNvbnN0IFN0cmluZyYgcGF0aCk7CisgICAgQmxvYihjb25zdCBTdHJpbmcmIHR5cGUpOwog
Ci1wcml2YXRlOgotI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgIEJsb2IoY29uc3QgU3RyaW5n
JiBwYXRoLCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgsIGxvbmcgbG9uZyBzbmFw
c2hvdFNpemUsIGRvdWJsZSBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUpOwotI2VuZGlmCi0KLSAg
ICAvLyBUaGUgdW5kZXJseWluZyBwYXRoIG9mIHRoZSBmaWxlLWJhc2VkIGJsb2IuIAotICAgIFN0
cmluZyBtX3BhdGg7Ci0KLSNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAgICAvLyBUaGUgc3RhcnRp
bmcgcG9zaXRpb24gb2YgdGhlIGZpbGUtYmFzZWQgYmxvYi4KLSAgICBsb25nIGxvbmcgbV9zdGFy
dDsKLQotICAgIC8vIFRoZSBsZW5ndGggb2YgdGhlIGZpbGUtYmFzZWQgYmxvYi4gVGhlIHZhbHVl
IG9mIC0xIG1lYW5zIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUuCi0gICAgbG9uZyBsb25nIG1fbGVu
Z3RoOwotCi0gICAgLy8gQSBmbGFnIHRvIHRlbGwgaWYgYSBzbmFwc2hvdCBoYXMgYmVlbiBjYXB0
dXJlZC4KLSAgICBib29sIG1fc25hcHNob3RDYXB0dXJlZDsKLQotICAgIC8vIFRoZSBzaXplIG9m
IHRoZSBmaWxlIHdoZW4gYSBzbmFwc2hvdCBpcyBjYXB0dXJlZC4gSXQgY2FuIGJlIDAgaWYgdGhl
IGZpbGUgaXMgZW1wdHkuCi0gICAgbG9uZyBsb25nIG1fc25hcHNob3RTaXplOwotCi0gICAgLy8g
VGhlIGxhc3QgbW9kaWZpY2F0aW9uIHRpbWUgb2YgdGhlIGZpbGUgd2hlbiBhIHNuYXBzaG90IGlz
IGNhcHR1cmVkLiBUaGUgdmFsdWUgb2YgMCBhbHNvIG1lYW5zIHRoYXQgdGhlIHNuYXBzaG90IGlz
IG5vdCBjYXB0dXJlZC4KLSAgICBkb3VibGUgbV9zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWU7Ci0j
ZW5kaWYKKyAgICBWZWN0b3I8UmVmUHRyPEJsb2JJdGVtPiA+IG1faXRlbUxpc3Q7CisgICAgY29u
c3QgU3RyaW5nIG1fdHlwZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaHRtbC9CbG9iSXRlbS5jcHAgYi9XZWJDb3JlL2h0bWwvQmxvYkl0ZW0uY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjhlNTY4MWNlYTEwNDM4YWYxNzljNGFlMmM5NGNmNTIwZTY3MzE5N2MKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2h0bWwvQmxvYkl0ZW0uY3BwCkBAIC0wLDAgKzEsMzEx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisg
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiQmxvYkl0ZW0uaCIKKworI2luY2x1
ZGUgIkZpbGVTeXN0ZW0uaCIKKyNpbmNsdWRlICJVVUlELmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworYm9vbCBCbG9iSXRlbTo6ZXF1YWxzKGNvbnN0IEJsb2JJdGVtKiBiKSBjb25zdAorewor
ICAgIGlmIChzaXplKCkgIT0gYi0+c2l6ZSgpIHx8IGRhdGEoKSAhPSBiLT5kYXRhKCkgfHwgaXNW
YWxpZCgpICE9IGItPmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVy
biB0cnVlOworfQorCitjaGFyKiBCbG9iSXRlbTo6cmVsZWFzZUJ1ZmZlcigpIGNvbnN0Cit7Cisg
ICAgVmVjdG9yPGNoYXI+IHY7CisgICAgdi5hcHBlbmQoZGF0YSgpLCBzdGF0aWNfY2FzdDxzaXpl
X3Q+KHNpemUoKSkpOworICAgIHJldHVybiB2LnJlbGVhc2VCdWZmZXIoKTsKK30KKworUGFzc1Jl
ZlB0cjxCbG9iSXRlbT4gQmxvYkl0ZW06OmNyZWF0ZUZpbGVJdGVtKGNvbnN0IFN0cmluZyYgcGF0
aCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoc3RhdGljX2Nhc3Q8QmxvYkl0ZW0qPihuZXcgRmls
ZUJsb2JJdGVtKHBhdGgpKSk7Cit9CisKK1Bhc3NSZWZQdHI8QmxvYkl0ZW0+IEJsb2JJdGVtOjpj
cmVhdGVTdHJpbmdJdGVtKGNvbnN0IFN0cmluZyYgdGV4dCwgRW5kaW5nVHlwZSBlbmRpbmcsIFRl
eHRFbmNvZGluZyBlbmNvZGluZykKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoc3RhdGljX2Nhc3Q8
QmxvYkl0ZW0qPihuZXcgU3RyaW5nQmxvYkl0ZW0odGV4dCwgZW5kaW5nLCBlbmNvZGluZykpKTsK
K30KKworUGFzc1JlZlB0cjxCbG9iSXRlbT4gQmxvYkl0ZW06OmNyZWF0ZVN0cmluZ0l0ZW0oY29u
c3QgQ1N0cmluZyYgdGV4dCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoc3RhdGljX2Nhc3Q8Qmxv
Ykl0ZW0qPihuZXcgU3RyaW5nQmxvYkl0ZW0odGV4dCkpKTsKK30KKworUGFzc1JlZlB0cjxCbG9i
SXRlbT4gQmxvYkl0ZW06OmNyZWF0ZUJ5dGVzQXJyYXlJdGVtKGNvbnN0IGNoYXIqIGRhdGEsIHNp
emVfdCBzaXplKQoreworICAgIHJldHVybiBhZG9wdFJlZihzdGF0aWNfY2FzdDxCbG9iSXRlbSo+
KG5ldyBCeXRlc0FycmF5QmxvYkl0ZW0oZGF0YSwgc2l6ZSkpKTsKK30KKworI2lmIEVOQUJMRShC
TE9CX1NMSUNFKQorc3RhdGljIGNvbnN0IGRvdWJsZSBpbnZhbGlkTW9kaWZpY2F0aW9uVGltZSA9
IC0xOworCitkb3VibGUgZ2V0RmlsZVNuYXBzaG90TW9kaWZpY2F0aW9uVGltZShjb25zdCBTdHJp
bmcmIHBhdGgpCit7CisgICAgLy8gRklYTUU6IHN5bmNocm9uaXplZCBmaWxlIGNhbGwKKyAgICB0
aW1lX3QgbW9kaWZpY2F0aW9uVGltZTsKKyAgICBpZiAoZ2V0RmlsZU1vZGlmaWNhdGlvblRpbWUo
cGF0aCwgbW9kaWZpY2F0aW9uVGltZSkpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxkb3Vi
bGU+KG1vZGlmaWNhdGlvblRpbWUpOworICAgIHJldHVybiBpbnZhbGlkTW9kaWZpY2F0aW9uVGlt
ZTsKK30KKworUGFzc1JlZlB0cjxCbG9iSXRlbT4gQmxvYkl0ZW06OmNyZWF0ZVJhbmdlSXRlbShQ
YXNzUmVmUHRyPEJsb2JJdGVtPiBpdGVtLCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5n
dGgpCit7CisgICAgQVNTRVJUKHN0YXJ0ID49IDApOworICAgIGlmICghc3RhcnQgJiYgaXRlbS0+
c2l6ZSgpIDw9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4obGVuZ3RoKSkKKyAgICAg
ICAgcmV0dXJuIGl0ZW07CisgICAgaWYgKGl0ZW0tPnRvRmlsZUl0ZW0oKSkgeworICAgICAgICBj
b25zdCBGaWxlQmxvYkl0ZW0qIGZpbGUgPSBpdGVtLT50b0ZpbGVJdGVtKCk7CisgICAgICAgIGlm
IChpdGVtLT50b0ZpbGVSYW5nZUl0ZW0oKSkgeworICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0
PHVuc2lnbmVkIGxvbmcgbG9uZz4oc3RhcnQgKyBsZW5ndGgpID4gaXRlbS0+c2l6ZSgpKQorICAg
ICAgICAgICAgICAgIGxlbmd0aCA9IGl0ZW0tPnNpemUoKSAtIHN0YXJ0OworICAgICAgICAgICAg
c3RhcnQgKz0gaXRlbS0+dG9GaWxlUmFuZ2VJdGVtKCktPnN0YXJ0KCk7CisgICAgICAgICAgICBy
ZXR1cm4gY3JlYXRlRmlsZVJhbmdlSXRlbShmaWxlLT5wYXRoKCksIHN0YXJ0LCBsZW5ndGgsIGl0
ZW0tPnRvRmlsZVJhbmdlSXRlbSgpLT5zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUoKSk7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIGNyZWF0ZUZpbGVSYW5nZUl0ZW0oZmlsZS0+cGF0aCgpLCBz
dGFydCwgbGVuZ3RoLCBnZXRGaWxlU25hcHNob3RNb2RpZmljYXRpb25UaW1lKGZpbGUtPnBhdGgo
KSkpOworICAgIH0KKyAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihzdGFy
dCArIGxlbmd0aCkgPiBpdGVtLT5zaXplKCkpCisgICAgICAgIGxlbmd0aCA9IGl0ZW0tPnNpemUo
KSAtIHN0YXJ0OworICAgIHJldHVybiBhZG9wdFJlZihzdGF0aWNfY2FzdDxCbG9iSXRlbSo+KG5l
dyBEYXRhUmFuZ2VCbG9iSXRlbShpdGVtLCBzdGFydCwgbGVuZ3RoKSkpOworfQorCitQYXNzUmVm
UHRyPEJsb2JJdGVtPiBCbG9iSXRlbTo6Y3JlYXRlRmlsZVJhbmdlSXRlbShjb25zdCBTdHJpbmcm
IHBhdGgsIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCwgZG91YmxlIHNuYXBzaG90
TW9kaWZpY2F0aW9uVGltZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoc3RhdGljX2Nhc3Q8Qmxv
Ykl0ZW0qPihuZXcgRmlsZVJhbmdlQmxvYkl0ZW0ocGF0aCwgc3RhcnQsIGxlbmd0aCwgc25hcHNo
b3RNb2RpZmljYXRpb25UaW1lKSkpOworfQorI2VuZGlmIC8vIEVOQUJMRShCTE9CX1NMSUNFKQor
CisvLyBGaWxlQmxvYkl0ZW0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitGaWxlQmxvYkl0ZW06OkZpbGVCbG9iSXRlbShj
b25zdCBTdHJpbmcmIHBhdGgpCisgICAgOiBtX3BhdGgocGF0aCkKKyAgICAsIG1fZmlsZU5hbWUo
cGF0aEdldEZpbGVOYW1lKG1fcGF0aCkpCit7Cit9CisKK3Vuc2lnbmVkIGxvbmcgbG9uZyBGaWxl
QmxvYkl0ZW06OnNpemUoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBzeW5jaHJvbml6ZWQgZmls
ZSBjYWxsCisgICAgbG9uZyBsb25nIHNpemU7CisgICAgaWYgKCFnZXRGaWxlU2l6ZShtX3BhdGgs
IHNpemUpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgbG9uZyBsb25nPihzaXplKTsKK30KKworUGFzc1JlZlB0cjxCbG9iSXRlbT4gRmlsZUJsb2JJ
dGVtOjpkZWVwQ29weSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEJsb2JJdGVtOjpjcmVhdGVGaWxl
SXRlbShtX3BhdGgpOworfQorCitib29sIEZpbGVCbG9iSXRlbTo6ZXF1YWxzKGNvbnN0IEJsb2JJ
dGVtKiBiKSBjb25zdAoreworICAgIGlmICghQmxvYkl0ZW06OmVxdWFscyhiKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGNvbnN0IEZpbGVCbG9iSXRlbSogZiA9IGItPnRvRmlsZUl0ZW0o
KTsKKyAgICBpZiAoIWYpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV9wYXRoICE9
IGYtPm1fcGF0aCB8fCBtX2ZpbGVOYW1lICE9IGYtPm1fZmlsZU5hbWUpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8gU3RyaW5nQmxvYkl0ZW0gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
KworU3RyaW5nQmxvYkl0ZW06OlN0cmluZ0Jsb2JJdGVtKGNvbnN0IFN0cmluZyYgdGV4dCwgRW5k
aW5nVHlwZSBlbmRpbmcsIFRleHRFbmNvZGluZyBlbmNvZGluZykKK3sKKyAgICBDU3RyaW5nIGZy
b20gPSBlbmNvZGluZy5lbmNvZGUodGV4dC5jaGFyYWN0ZXJzKCksIHRleHQubGVuZ3RoKCksIEVu
dGl0aWVzRm9yVW5lbmNvZGFibGVzKTsKKyAgICBtX2RhdGEgPSBmcm9tOworCisgICAgaWYgKGVu
ZGluZyA9PSBFbmRpbmdUcmFuc3BhcmVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3Qg
Y2hhciogZW5kaW5nQ2hhcnMgPSAoZW5kaW5nID09IEVuZGluZ0NSTEYpID8gIlxyXG4iCisgICAg
ICAgIDogKGVuZGluZyA9PSBFbmRpbmdDUikgPyAiXHIiIDogIlxuIjsKKworICAgIGludCBlbmRp
bmdMZW5ndGggPSAoZW5kaW5nID09IEVuZGluZ0NSTEYpID8gMiA6IDE7CisgICAgaW50IG5lZWRG
aXggPSAwOworCisgICAgLy8gQ2FsY3VsYXRlIHRoZSBmaW5hbCBsZW5ndGguCisgICAgaW50IGNh
bGN1bGF0ZWRMZW5ndGggPSBmcm9tLmxlbmd0aCgpOworICAgIGNvbnN0IGNoYXIqIHAgPSBmcm9t
LmRhdGEoKTsKKyAgICB3aGlsZSAoY2hhciBjID0gKnArKykgeworICAgICAgICBpZiAoYyA9PSAn
XHInKSB7CisgICAgICAgICAgICAvLyBTYWZlIHRvIGxvb2sgYWhlYWQgYmVjYXVzZSBvZiB0cmFp
bGluZyAnXDAnLgorICAgICAgICAgICAgaWYgKCpwID09ICdcbicgJiYgZW5kaW5nICE9IEVuZGlu
Z0NSTEYpIHsKKyAgICAgICAgICAgICAgICBjYWxjdWxhdGVkTGVuZ3RoICs9IChlbmRpbmdMZW5n
dGggLSAyKTsKKyAgICAgICAgICAgICAgICArK25lZWRGaXg7CisgICAgICAgICAgICB9IGVsc2Ug
aWYgKGVuZGluZyAhPSBFbmRpbmdDUikgeworICAgICAgICAgICAgICAgIGNhbGN1bGF0ZWRMZW5n
dGggKz0gKGVuZGluZ0xlbmd0aCAtIDEpOworICAgICAgICAgICAgICAgICsrbmVlZEZpeDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChjID09ICdcbicgJiYgZW5kaW5nICE9IEVu
ZGluZ0xGKSB7CisgICAgICAgICAgICBjYWxjdWxhdGVkTGVuZ3RoICs9IChlbmRpbmdMZW5ndGgg
LSAxKTsKKyAgICAgICAgICAgICsrbmVlZEZpeDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlm
ICghbmVlZEZpeCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gQ29udmVydCB0aGUgZW5kaW5n
cyBhbmQgY3JlYXRlIGEgZGF0YSBidWZmZXIuCisgICAgcCA9IGZyb20uZGF0YSgpOworICAgIGNo
YXIqIHE7CisgICAgbV9kYXRhID0gQ1N0cmluZzo6bmV3VW5pbml0aWFsaXplZChjYWxjdWxhdGVk
TGVuZ3RoLCBxKTsKKyAgICB3aGlsZSAoY2hhciBjID0gKnArKykgeworICAgICAgICBpZiAoYyA9
PSAnXHInKSB7CisgICAgICAgICAgICBpZiAoKnAgPT0gJ1xuJyAmJiBlbmRpbmcgIT0gRW5kaW5n
Q1JMRikgeworICAgICAgICAgICAgICAgIG1lbWNweShxLCBlbmRpbmdDaGFycywgZW5kaW5nTGVu
Z3RoKTsKKyAgICAgICAgICAgICAgICBxICs9IGVuZGluZ0xlbmd0aDsKKyAgICAgICAgICAgIH0g
ZWxzZSBpZiAoKnAgIT0gJ1xuJyAmJiBlbmRpbmcgIT0gRW5kaW5nQ1IpIHsKKyAgICAgICAgICAg
ICAgICBtZW1jcHkocSwgZW5kaW5nQ2hhcnMsIGVuZGluZ0xlbmd0aCk7CisgICAgICAgICAgICAg
ICAgcSArPSBlbmRpbmdMZW5ndGg7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAo
YyA9PSAnXG4nICYmIGVuZGluZyAhPSBFbmRpbmdMRikgeworICAgICAgICAgICAgbWVtY3B5KHEs
IGVuZGluZ0NoYXJzLCBlbmRpbmdMZW5ndGgpOworICAgICAgICAgICAgcSArPSBlbmRpbmdMZW5n
dGg7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBMZWF2ZSBvdGhlciBjaGFyYWN0
ZXJzIGFsb25lLgorICAgICAgICAgICAgKnErKyA9IGM7CisgICAgICAgIH0KKyAgICB9Cit9CisK
K1N0cmluZ0Jsb2JJdGVtOjpTdHJpbmdCbG9iSXRlbShjb25zdCBDU3RyaW5nJiB0ZXh0KQorICAg
IDogbV9kYXRhKHRleHQpCit7Cit9CisKK1Bhc3NSZWZQdHI8QmxvYkl0ZW0+IFN0cmluZ0Jsb2JJ
dGVtOjpkZWVwQ29weSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEJsb2JJdGVtOjpjcmVhdGVTdHJp
bmdJdGVtKENTdHJpbmcobV9kYXRhLmRhdGEoKSwgbV9kYXRhLmxlbmd0aCgpKSk7Cit9CisKKy8v
IEJ5dGVzQXJyYXlCbG9iSXRlbSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0J5dGVzQXJyYXlCbG9iSXRlbTo6Qnl0ZXNBcnJheUJs
b2JJdGVtKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBzaXplKQoreworICAgIG1fYnl0ZXNBcnJh
eS5hcHBlbmQoZGF0YSwgc2l6ZSk7Cit9CisKK1Bhc3NSZWZQdHI8QmxvYkl0ZW0+IEJ5dGVzQXJy
YXlCbG9iSXRlbTo6ZGVlcENvcHkoKSBjb25zdAoreworICAgIHJldHVybiBCbG9iSXRlbTo6Y3Jl
YXRlQnl0ZXNBcnJheUl0ZW0obV9ieXRlc0FycmF5LmRhdGEoKSwgbV9ieXRlc0FycmF5LnNpemUo
KSk7Cit9CisKKyNpZiBFTkFCTEUoQkxPQl9TTElDRSkKKworLy8gRGF0YVJhbmdlQmxvYkl0ZW0g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKworRGF0YVJhbmdlQmxvYkl0ZW06OkRhdGFSYW5nZUJsb2JJdGVtKFBhc3NSZWZQdHI8Qmxv
Ykl0ZW0+IGl0ZW0sIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCkKKyAgICA6IG1f
aXRlbShpdGVtKQorICAgICwgbV9zdGFydChzdGFydCkKKyAgICAsIG1fbGVuZ3RoKGxlbmd0aCkK
K3sKKyAgICBBU1NFUlQoIW1faXRlbS0+dG9GaWxlSXRlbSgpKTsKKyAgICBpZiAobV9pdGVtLT50
b0RhdGFSYW5nZUl0ZW0oKSkgeworICAgICAgICBjb25zdCBEYXRhUmFuZ2VCbG9iSXRlbSogciA9
IG1faXRlbS0+dG9EYXRhUmFuZ2VJdGVtKCk7CisgICAgICAgIG1fc3RhcnQgKz0gci0+bV9zdGFy
dDsKKyAgICAgICAgbV9pdGVtID0gci0+bV9pdGVtOworICAgICAgICBBU1NFUlQoIW1faXRlbS0+
dG9EYXRhUmFuZ2VJdGVtKCkpOworICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dW5zaWduZWQg
bG9uZyBsb25nPihtX3N0YXJ0ICsgbV9sZW5ndGgpIDw9IG1faXRlbS0+c2l6ZSgpKTsKKyAgICB9
Cit9CisKK2NvbnN0IGNoYXIqIERhdGFSYW5nZUJsb2JJdGVtOjpkYXRhKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9pdGVtLT5kYXRhKCkgKyBtX3N0YXJ0OworfQorCitQYXNzUmVmUHRyPEJsb2JJ
dGVtPiBEYXRhUmFuZ2VCbG9iSXRlbTo6ZGVlcENvcHkoKSBjb25zdAoreworICAgIHJldHVybiBC
bG9iSXRlbTo6Y3JlYXRlUmFuZ2VJdGVtKG1faXRlbS0+ZGVlcENvcHkoKSwgbV9zdGFydCwgbV9s
ZW5ndGgpOworfQorCitib29sIERhdGFSYW5nZUJsb2JJdGVtOjplcXVhbHMoY29uc3QgQmxvYkl0
ZW0qIGIpIGNvbnN0Cit7CisgICAgaWYgKCFCbG9iSXRlbTo6ZXF1YWxzKGIpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgY29uc3QgRGF0YVJhbmdlQmxvYkl0ZW0qIHIgPSBiLT50b0RhdGFS
YW5nZUl0ZW0oKTsKKyAgICBpZiAoIXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAo
bV9zdGFydCAhPSByLT5tX3N0YXJ0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFt
X2l0ZW0tPmVxdWFscyhyLT5tX2l0ZW0uZ2V0KCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKKy8vIEZpbGVSYW5nZUJsb2JJdGVtIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZpbGVSYW5n
ZUJsb2JJdGVtOjpGaWxlUmFuZ2VCbG9iSXRlbShjb25zdCBTdHJpbmcmIHBhdGgsIGxvbmcgbG9u
ZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCwgZG91YmxlIG1vZGlmaWNhdGlvblRpbWUpCisgICAg
OiBGaWxlQmxvYkl0ZW0ocGF0aCkKKyAgICAsIG1fc3RhcnQoc3RhcnQpCisgICAgLCBtX2xlbmd0
aChsZW5ndGgpCisgICAgLCBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZShtb2RpZmljYXRpb25U
aW1lKQoreworICAgIG1fdW5pcXVlTmFtZSA9ICJCbG9iIiArIGNyZWF0ZUNhbm9uaWNhbFVVSURT
dHJpbmcoKTsKKyAgICBtX3VuaXF1ZU5hbWUucmVwbGFjZSgiLSIsICIiKTsgLy8gRm9yIHNhZnR5
LCByZW1vdmUgJy0nIGZyb20gdGhlIGZpbGVuYW1lIHNuY2Ugc29tZSBzZXJ2ZXJzIG1heSBub3Qg
bGlrZSBpdC4KK30KKworUGFzc1JlZlB0cjxCbG9iSXRlbT4gRmlsZVJhbmdlQmxvYkl0ZW06OmRl
ZXBDb3B5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gQmxvYkl0ZW06OmNyZWF0ZUZpbGVSYW5nZUl0
ZW0ocGF0aCgpLCBtX3N0YXJ0LCBtX2xlbmd0aCwgbV9zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUp
OworfQorCitib29sIEZpbGVSYW5nZUJsb2JJdGVtOjplcXVhbHMoY29uc3QgQmxvYkl0ZW0qIGIp
IGNvbnN0Cit7CisgICAgaWYgKCFCbG9iSXRlbTo6ZXF1YWxzKGIpIHx8ICFGaWxlQmxvYkl0ZW06
OmVxdWFscyhiKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNvbnN0IEZpbGVSYW5nZUJs
b2JJdGVtKiByID0gYi0+dG9GaWxlUmFuZ2VJdGVtKCk7CisgICAgaWYgKCFyKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fc3RhcnQgIT0gci0+bV9zdGFydCB8fCBtX3VuaXF1ZU5h
bWUgIT0gci0+bV91bmlxdWVOYW1lIHx8IG1fc25hcHNob3RNb2RpZmljYXRpb25UaW1lICE9IHIt
Pm1fc25hcHNob3RNb2RpZmljYXRpb25UaW1lKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgRmlsZVJhbmdlQmxvYkl0ZW06OmlzVmFsaWQoKSBjb25z
dAoreworICAgIC8vIDwgMCBpbmRpY2F0ZXMgaW52YWxpZE1vZGlmaWNhdGlvblRpbWUgKGkuZS4g
aW5pdGlhbGl6YXRpb24gaGFzIGJlZW4gZmFpbGVkKS4KKyAgICBpZiAobV9zbmFwc2hvdE1vZGlm
aWNhdGlvblRpbWUgPCAwKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG1fc25h
cHNob3RNb2RpZmljYXRpb25UaW1lID09IGdldEZpbGVTbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUo
cGF0aCgpKTsKK30KKworI2VuZGlmIC8vIEVOQUJMRShCTE9CX1NMSUNFKQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvQmxvYkl0ZW0uaCBiL1dlYkNv
cmUvaHRtbC9CbG9iSXRlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFkYWQxOGU0Nzk2NGFjYTBkZDRiMTliMzkz
OWM4ODAyNjIyMGY0NmIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2h0bWwvQmxvYkl0ZW0u
aApAQCAtMCwwICsxLDE5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEJsb2JJdGVtX2gKKyNkZWZpbmUgQmxvYkl0ZW1f
aAorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJUZXh0RW5jb2Rpbmcu
aCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBTdHJpbmcgZW5kaW5nIHR5cGVzLgorZW51
bSBFbmRpbmdUeXBlIHsKKyAgICBFbmRpbmdUcmFuc3BhcmVudCA9IDAsCisgICAgRW5kaW5nTEYs
CisgICAgRW5kaW5nQ1IsCisgICAgRW5kaW5nQ1JMRiwKK307CisKK2NsYXNzIFN0cmluZ0Jsb2JJ
dGVtOworY2xhc3MgRmlsZUJsb2JJdGVtOworY2xhc3MgRGF0YVJhbmdlQmxvYkl0ZW07CitjbGFz
cyBGaWxlUmFuZ2VCbG9iSXRlbTsKKworLy8gQSBiYXNlIGludGVyZmFjZSBmb3IgYWxsICdibG9i
JyBpdGVtcyAoZmlsZSwgc3RyaW5nIG9yIGJ5dGVzIGFycmF5KS4KK2NsYXNzIEJsb2JJdGVtIDog
cHVibGljIFJlZkNvdW50ZWQ8QmxvYkl0ZW0+IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5CbG9i
SXRlbSgpIHsgfQorICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBsb25nIHNpemUoKSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gMDsgfQor
ICAgIGNoYXIqIHJlbGVhc2VCdWZmZXIoKSBjb25zdDsKKworICAgIC8vIEZhY3RvcnkgbWV0aG9k
cy4KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCbG9iSXRlbT4gY3JlYXRlU3RyaW5nSXRlbShjb25z
dCBTdHJpbmcmIHRleHQsIEVuZGluZ1R5cGUsIFRleHRFbmNvZGluZyk7CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8QmxvYkl0ZW0+IGNyZWF0ZVN0cmluZ0l0ZW0oY29uc3QgQ1N0cmluZyYgdGV4dCk7
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QmxvYkl0ZW0+IGNyZWF0ZUJ5dGVzQXJyYXlJdGVtKGNv
bnN0IGNoYXIqIGRhdGEsIHNpemVfdCBzaXplKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCbG9i
SXRlbT4gY3JlYXRlRmlsZUl0ZW0oY29uc3QgU3RyaW5nJiBwYXRoKTsKKworI2lmIEVOQUJMRShC
TE9CX1NMSUNFKQorICAgIC8vIENyZWF0ZXMgRGF0YVJuYWdlQmxvYkl0ZW0gb3IgRmlsZVJhbmdl
QmxvYkl0ZW0uCisgICAgc3RhdGljIFBhc3NSZWZQdHI8QmxvYkl0ZW0+IGNyZWF0ZVJhbmdlSXRl
bShQYXNzUmVmUHRyPEJsb2JJdGVtPiBpdGVtLCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBs
ZW5ndGgpOworICAgIC8vIENyZWF0ZXMgRmlsZVJhbmdlQmxvYkl0ZW0uCisgICAgc3RhdGljIFBh
c3NSZWZQdHI8QmxvYkl0ZW0+IGNyZWF0ZUZpbGVSYW5nZUl0ZW0oY29uc3QgU3RyaW5nJiBwYXRo
LCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgsIGRvdWJsZSBzbmFwc2hvdE1vZGlm
aWNhdGlvblRpbWUpOworI2VuZGlmIC8vIEVOQUJMRShCTE9CX1NMSUNFKQorCisgICAgLy8gUmV0
dXJucyBmYWxzZSBpZiB0aGUgZGF0YSBoYXMgYmVjb21lIHN0YWxlIG9yIGludmFsaWQuCisgICAg
dmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2aXJ0
dWFsIGNvbnN0IFN0cmluZ0Jsb2JJdGVtKiB0b1N0cmluZ0l0ZW0oKSBjb25zdCB7IHJldHVybiAw
OyB9CisgICAgdmlydHVhbCBjb25zdCBGaWxlQmxvYkl0ZW0qIHRvRmlsZUl0ZW0oKSBjb25zdCB7
IHJldHVybiAwOyB9CisjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCisgICAgdmlydHVhbCBjb25zdCBE
YXRhUmFuZ2VCbG9iSXRlbSogdG9EYXRhUmFuZ2VJdGVtKCkgY29uc3QgeyByZXR1cm4gMDsgfQor
ICAgIHZpcnR1YWwgY29uc3QgRmlsZVJhbmdlQmxvYkl0ZW0qIHRvRmlsZVJhbmdlSXRlbSgpIGNv
bnN0IHsgcmV0dXJuIDA7IH0KKyNlbmRpZiAvLyBFTkFCTEUoQkxPQl9TTElDRSkKKworICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxCbG9iSXRlbT4gZGVlcENvcHkoKSBjb25zdCA9IDA7CisgICAgdmly
dHVhbCBib29sIGVxdWFscyhjb25zdCBCbG9iSXRlbSopIGNvbnN0OworCitwcm90ZWN0ZWQ6Cisg
ICAgQmxvYkl0ZW0oKSB7IH0KK307CisKKy8vIEJsb2JJdGVtIGNsYXNzIGZvciBhIHN0cmluZy4K
K2NsYXNzIFN0cmluZ0Jsb2JJdGVtOiBwdWJsaWMgQmxvYkl0ZW0geworcHVibGljOgorICAgIFN0
cmluZ0Jsb2JJdGVtKGNvbnN0IFN0cmluZyYgdGV4dCwgRW5kaW5nVHlwZSwgVGV4dEVuY29kaW5n
KTsKKyAgICBTdHJpbmdCbG9iSXRlbShjb25zdCBDU3RyaW5nJiB0ZXh0KTsKKyAgICBjb25zdCBD
U3RyaW5nJiBjc3RyKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9CisKKyAgICAvLyBCbG9iSXRl
bSBtZXRob2RzLgorICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBsb25nIHNpemUoKSBjb25zdCB7
IHJldHVybiBtX2RhdGEubGVuZ3RoKCk7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGRhdGEo
KSBjb25zdCB7IHJldHVybiBtX2RhdGEuZGF0YSgpOyB9CisgICAgdmlydHVhbCBjb25zdCBTdHJp
bmdCbG9iSXRlbSogdG9TdHJpbmdJdGVtKCkgY29uc3QgeyByZXR1cm4gdGhpczsgfQorICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxCbG9iSXRlbT4gZGVlcENvcHkoKSBjb25zdDsKKworcHJpdmF0ZToK
KyAgICBtdXRhYmxlIENTdHJpbmcgbV9kYXRhOworfTsKKworLy8gQmxvYkl0ZW0gY2xhc3MgZm9y
IGFuIGFycmF5IG9mIGJ5dGVzLgorY2xhc3MgQnl0ZXNBcnJheUJsb2JJdGVtOiBwdWJsaWMgQmxv
Ykl0ZW0geworcHVibGljOgorICAgIEJ5dGVzQXJyYXlCbG9iSXRlbShjb25zdCBjaGFyKiBkYXRh
LCBzaXplX3Qgc2l6ZSk7CisgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fYnl0ZXNBcnJheS5zaXplKCk7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IGNo
YXIqIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2J5dGVzQXJyYXkuZGF0YSgpOyB9CisgICAgdmly
dHVhbCBQYXNzUmVmUHRyPEJsb2JJdGVtPiBkZWVwQ29weSgpIGNvbnN0OworCitwcml2YXRlOgor
ICAgIFZlY3RvcjxjaGFyPiBtX2J5dGVzQXJyYXk7Cit9OworCisvLyBCbG9iSXRlbSBjbGFzcyBm
b3IgYSBmaWxlLgorY2xhc3MgRmlsZUJsb2JJdGVtOiBwdWJsaWMgQmxvYkl0ZW0geworcHVibGlj
OgorICAgIEZpbGVCbG9iSXRlbShjb25zdCBTdHJpbmcmIHBhdGgpOworICAgIHZpcnR1YWwgY29u
c3QgU3RyaW5nJiB1bmlxdWVOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9maWxlTmFtZTsgfQorICAg
IHZpcnR1YWwgY29uc3QgU3RyaW5nJiBwYXRoKCkgY29uc3QgeyByZXR1cm4gbV9wYXRoOyB9CisK
KyAgICAvLyBCbG9iSXRlbSBtZXRob2RzLgorICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBsb25n
IHNpemUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGNvbnN0IEZpbGVCbG9iSXRlbSogdG9GaWxlSXRl
bSgpIGNvbnN0IHsgcmV0dXJuIHRoaXM7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8QmxvYkl0
ZW0+IGRlZXBDb3B5KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGVxdWFscyhjb25zdCBCbG9i
SXRlbSopIGNvbnN0OworCitwcml2YXRlOgorICAgIFN0cmluZyBtX3BhdGg7CisgICAgU3RyaW5n
IG1fZmlsZU5hbWU7Cit9OworCisjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCisKKy8vIEJsb2JJdGVt
IGNsYXNzIGZvciBzbGljZWQgZGF0YSAoc3RyaW5nIG9yIGJ5dGVzLWFycmF5KS4KK2NsYXNzIERh
dGFSYW5nZUJsb2JJdGVtIDogcHVibGljIEJsb2JJdGVtIHsKK3B1YmxpYzoKKyAgICBEYXRhUmFu
Z2VCbG9iSXRlbShQYXNzUmVmUHRyPEJsb2JJdGVtPiBpdGVtLCBsb25nIGxvbmcgc3RhcnQsIGxv
bmcgbG9uZyBsZW5ndGgpOworCisgICAgLy8gQmxvYkl0ZW0gbWV0aG9kcy4KKyAgICB2aXJ0dWFs
IHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KKyAg
ICB2aXJ0dWFsIGNvbnN0IERhdGFSYW5nZUJsb2JJdGVtKiB0b0RhdGFSYW5nZUl0ZW0oKSBjb25z
dCB7IHJldHVybiB0aGlzOyB9CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiBkYXRhKCkgY29uc3Q7
CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEJsb2JJdGVtPiBkZWVwQ29weSgpIGNvbnN0OworICAg
IHZpcnR1YWwgYm9vbCBlcXVhbHMoY29uc3QgQmxvYkl0ZW0qKSBjb25zdDsKKworcHJpdmF0ZToK
KyAgICBSZWZQdHI8QmxvYkl0ZW0+IG1faXRlbTsKKyAgICBsb25nIGxvbmcgbV9zdGFydDsKKyAg
ICBsb25nIGxvbmcgbV9sZW5ndGg7Cit9OworCisvLyBCbG9iSXRlbSBjbGFzcyBmb3IgYSBmaWxl
LgorY2xhc3MgRmlsZVJhbmdlQmxvYkl0ZW0gOiBwdWJsaWMgRmlsZUJsb2JJdGVtIHsKK3B1Ymxp
YzoKKyAgICBGaWxlUmFuZ2VCbG9iSXRlbShjb25zdCBTdHJpbmcmIHBhdGgsIGxvbmcgbG9uZyBz
dGFydCwgbG9uZyBsb25nIGxlbmd0aCwgZG91YmxlIHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSk7
CisgICAgbG9uZyBsb25nIHN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbV9zdGFydDsgfQorICAgIGRv
dWJsZSBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUoKSBjb25zdCB7IHJldHVybiBtX3NuYXBzaG90
TW9kaWZpY2F0aW9uVGltZTsgfQorCisgICAgLy8gQmxvYkl0ZW0gbWV0aG9kcy4KKyAgICB2aXJ0
dWFsIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0K
KyAgICB2aXJ0dWFsIGNvbnN0IEZpbGVSYW5nZUJsb2JJdGVtKiB0b0ZpbGVSYW5nZUl0ZW0oKSBj
b25zdCB7IHJldHVybiB0aGlzOyB9CisgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdDsK
KyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8QmxvYkl0ZW0+IGRlZXBDb3B5KCkgY29uc3Q7CisgICAg
dmlydHVhbCBib29sIGVxdWFscyhjb25zdCBCbG9iSXRlbSopIGNvbnN0OworCisgICAgLy8gRmls
ZUJsb2JJdGVtIG1ldGhvZHMuCisgICAgdmlydHVhbCBjb25zdCBTdHJpbmcmIHVuaXF1ZU5hbWUo
KSBjb25zdCB7IHJldHVybiBtX3VuaXF1ZU5hbWU7IH0KKworcHJpdmF0ZToKKyAgICBsb25nIGxv
bmcgbV9zdGFydDsKKyAgICBsb25nIGxvbmcgbV9sZW5ndGg7CisgICAgU3RyaW5nIG1fdW5pcXVl
TmFtZTsKKworICAgIGRvdWJsZSBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZTsKK307CisKKyNl
bmRpZiAvLyBFTkFCTEUoQkxPQl9TTElDRSkKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gQmxvYkl0ZW1faApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0ZpbGUuY3BwIGIv
V2ViQ29yZS9odG1sL0ZpbGUuY3BwCmluZGV4IDk3ZmRjNDU3OGQ3NGIyMjVlNTk0NmY0ZDZhZWYy
NTY1MjU0NDNhZTQuLjRhNzJjNjU3NTExNjY4ODY1NDMxOGQ0OGMzMmQ5YTc1ZWM0NWM0ZTAgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9GaWxlLmNwcAorKysgYi9XZWJDb3JlL2h0bWwvRmlsZS5j
cHAKQEAgLTMxLDE0ICszMSwyMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZpbGU6OkZp
bGUoY29uc3QgU3RyaW5nJiBwYXRoKQotICAgIDogQmxvYihwYXRoKQotICAgICwgbV9uYW1lKHBh
dGhHZXRGaWxlTmFtZShwYXRoKSkKK3N0YXRpYyBTdHJpbmcgZ2V0RmlsZVR5cGVGcm9tUGF0aChj
b25zdCBTdHJpbmcmIHBhdGgpCiB7Ci0gICAgLy8gV2UgZG9uJ3QgdXNlIE1JTUVUeXBlUmVnaXN0
cnk6OmdldE1JTUVUeXBlRm9yUGF0aCgpIGJlY2F1c2UgaXQgcmV0dXJucyAiYXBwbGljYXRpb24v
b2N0ZXQtc3RyZWFtIiB1cG9uIGZhaWx1cmUuCi0gICAgaW50IGluZGV4ID0gbV9uYW1lLnJldmVy
c2VGaW5kKCcuJyk7CisgICAgaW50IGluZGV4ID0gcGF0aC5yZXZlcnNlRmluZCgnLicpOwogICAg
IGlmIChpbmRleCAhPSAtMSkKLSAgICAgICAgbV90eXBlID0gTUlNRVR5cGVSZWdpc3RyeTo6Z2V0
TUlNRVR5cGVGb3JFeHRlbnNpb24obV9uYW1lLnN1YnN0cmluZyhpbmRleCArIDEpKTsKKyAgICAg
ICAgcmV0dXJuIE1JTUVUeXBlUmVnaXN0cnk6OmdldE1JTUVUeXBlRm9yRXh0ZW5zaW9uKHBhdGgu
c3Vic3RyaW5nKGluZGV4ICsgMSkpOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworRmlsZTo6
RmlsZShjb25zdCBTdHJpbmcmIHBhdGgpCisgICAgOiBCbG9iKGdldEZpbGVUeXBlRnJvbVBhdGgo
cGF0aCkpCit7CisgICAgYXBwZW5kQmxvYkl0ZW0oQmxvYkl0ZW06OmNyZWF0ZUZpbGVJdGVtKHBh
dGgpKTsKK30KKworY29uc3QgU3RyaW5nIEZpbGU6Om5hbWUoKSBjb25zdAoreworICAgIHJldHVy
biBpdGVtcygpLmF0KDApLT50b0ZpbGVJdGVtKCktPnVuaXF1ZU5hbWUoKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0ZpbGUuaCBiL1dlYkNv
cmUvaHRtbC9GaWxlLmgKaW5kZXggMDY1ZGQ4NmE3YjFlYmY3N2ZiNDA2NDZmOWM2ZTg3MDQ2OWQ3
ZWIwOS4uNGNlY2E2NTU5OTYwY2JlM2IwMjU2NzIxZWI0NzhlZmQ3OGY5NGUwZiAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9odG1sL0ZpbGUuaAorKysgYi9XZWJDb3JlL2h0bWwvRmlsZS5oCkBAIC00MSwx
OCArNDEsMTQgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIGlzRmlsZSgpIGNvbnN0IHsg
cmV0dXJuIHRydWU7IH0KIAotICAgIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJu
IG1fbmFtZTsgfQotICAgIGNvbnN0IFN0cmluZyYgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlw
ZTsgfQorICAgIGNvbnN0IFN0cmluZyBuYW1lKCkgY29uc3Q7CiAKICAgICAvLyBGSVhNRTogb2Jz
b2xldGUgYXR0cmlidXRlcy4gVG8gYmUgcmVtb3ZlZC4KLSAgICBjb25zdCBTdHJpbmcmIGZpbGVO
YW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CisgICAgY29uc3QgU3RyaW5nIGZpbGVOYW1l
KCkgY29uc3QgeyByZXR1cm4gbmFtZSgpOyB9CiAgICAgdW5zaWduZWQgbG9uZyBsb25nIGZpbGVT
aXplKCkgY29uc3QgeyByZXR1cm4gc2l6ZSgpOyB9CiAKIHByaXZhdGU6CiAgICAgRmlsZShjb25z
dCBTdHJpbmcmIHBhdGgpOwotCi0gICAgU3RyaW5nIG1fbmFtZTsKLSAgICBTdHJpbmcgbV90eXBl
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1s
L0ZpbGVTdHJlYW0uY3BwIGIvV2ViQ29yZS9odG1sL0ZpbGVTdHJlYW0uY3BwCmluZGV4IDcwODlm
NjE2MTU0ZTRiMTBhMzI3NzNlMDMzNTZhNzkzNjQ1OGY5N2YuLjJjNTA0NjQ1OTA0MDg3YzJiYmRl
ODhjZjc0ZGJkOGQ0MTkwOWFlNzUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9GaWxlU3RyZWFt
LmNwcAorKysgYi9XZWJDb3JlL2h0bWwvRmlsZVN0cmVhbS5jcHAKQEAgLTkwLDMwICs5MCwyNiBA
QCB2b2lkIEZpbGVTdHJlYW06Om9wZW5Gb3JSZWFkKEJsb2IqIGJsb2IpCiAgICAgfQogCiAjaWYg
RU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgLy8gQ2hlY2sgdGhlIG1vZGlmaWNhdGlvbnQgdGltZSBm
b3IgdGhlIHBvc3NpYmxlIGZpbGUgY2hhbmdlLgotICAgIGlmIChibG9iLT5tb2RpZmljYXRpb25U
aW1lKCkgIT0gQmxvYjo6ZG9Ob3RDaGVja0ZpbGVDaGFuZ2UgJiYgc3RhdGljX2Nhc3Q8dGltZV90
PihibG9iLT5tb2RpZmljYXRpb25UaW1lKCkpICE9IGN1cnJlbnRNb2RpZmljYXRpb25UaW1lKSB7
Ci0gICAgICAgIG1fY2xpZW50LT5kaWRGYWlsKE5PVF9SRUFEQUJMRV9FUlIpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgLy8gSnVtcCB0byB0aGUgYmVnaW5uaW5nIHBvc2l0aW9uIGlm
IHRoZSBmaWxlIGhhcyBiZWVuIHNsaWNlZC4KLSAgICBpZiAoYmxvYi0+c3RhcnQoKSA+IDApIHsK
LSAgICAgICAgaWYgKCFzZWVrRmlsZShtX2hhbmRsZSwgYmxvYi0+c3RhcnQoKSwgU2Vla0Zyb21C
ZWdpbm5pbmcpKSB7CisgICAgY29uc3QgRmlsZVJhbmdlQmxvYkl0ZW0qIHJhbmdlID0gYmxvYi0+
aXRlbXMoKS5hdCgwKS0+dG9GaWxlUmFuZ2VJdGVtKCk7CisgICAgaWYgKHJhbmdlKSB7CisgICAg
ICAgIC8vIENoZWNrIHRoZSBtb2RpZmljYXRpb250IHRpbWUgZm9yIHRoZSBwb3NzaWJsZSBmaWxl
IGNoYW5nZS4KKyAgICAgICAgaWYgKHN0YXRpY19jYXN0PHRpbWVfdD4ocmFuZ2UtPnNuYXBzaG90
TW9kaWZpY2F0aW9uVGltZSgpKSAhPSBjdXJyZW50TW9kaWZpY2F0aW9uVGltZSkgewogICAgICAg
ICAgICAgbV9jbGllbnQtPmRpZEZhaWwoTk9UX1JFQURBQkxFX0VSUik7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KKworICAgICAgICAvLyBKdW1wIHRvIHRoZSBiZWdpbm5pbmcgcG9z
aXRpb24gaWYgdGhlIGZpbGUgaGFzIGJlZW4gc2xpY2VkLgorICAgICAgICBpZiAocmFuZ2UtPnN0
YXJ0KCkgPiAwKSB7CisgICAgICAgICAgICBpZiAoc2Vla0ZpbGUobV9oYW5kbGUsIHJhbmdlLT5z
dGFydCgpLCBTZWVrRnJvbUJlZ2lubmluZykgPCAwKSB7CisgICAgICAgICAgICAgICAgbV9jbGll
bnQtPmRpZEZhaWwoTk9UX1JFQURBQkxFX0VSUik7CisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQogI2VuZGlmCiAKICAgICAvLyBHZXQgdGhl
IHNpemUuCi0jaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgbV90b3RhbEJ5dGVzVG9SZWFkID0g
YmxvYi0+bGVuZ3RoKCk7Ci0gICAgaWYgKG1fdG90YWxCeXRlc1RvUmVhZCA9PSBCbG9iOjp0b0Vu
ZE9mRmlsZSkKLSAgICAgICAgbV90b3RhbEJ5dGVzVG9SZWFkID0gYmxvYi0+c2l6ZSgpIC0gYmxv
Yi0+c3RhcnQoKTsKLSNlbHNlCi0gICAgbV90b3RhbCA9IGJsb2ItPnNpemUoKTsKLSNlbmRpZgot
CisgICAgbV90b3RhbEJ5dGVzVG9SZWFkID0gYmxvYi0+c2l6ZSgpOwogICAgIG1fY2xpZW50LT5k
aWRHZXRTaXplKG1fdG90YWxCeXRlc1RvUmVhZCk7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
aHRtbC9Gb3JtRGF0YUxpc3QuY3BwIGIvV2ViQ29yZS9odG1sL0Zvcm1EYXRhTGlzdC5jcHAKaW5k
ZXggMjgxYzlmZTQxOGUxYzQ4MzNiYjg3ZjgyZjc0ZjFjYzRkNzIyZDU3Yy4uM2RiYTkzN2E4ZjY5
ZGQ3NjlhYjRhYTIxZDA4ZDNlMTVhZDRmZTQzNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0Zv
cm1EYXRhTGlzdC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0Zvcm1EYXRhTGlzdC5jcHAKQEAgLTI4
LDY0ICsyOCwyMiBAQCBGb3JtRGF0YUxpc3Q6OkZvcm1EYXRhTGlzdChjb25zdCBUZXh0RW5jb2Rp
bmcmIGMpCiB7CiB9CiAKLXZvaWQgRm9ybURhdGFMaXN0OjphcHBlbmRTdHJpbmcoY29uc3QgQ1N0
cmluZyYgcykKK3ZvaWQgRm9ybURhdGFMaXN0OjphcHBlbmRTdHJpbmcoY29uc3QgU3RyaW5nJiBz
KQogewotICAgIG1fbGlzdC5hcHBlbmQocyk7CisgICAgbV9saXN0LmFwcGVuZChCbG9iSXRlbTo6
Y3JlYXRlU3RyaW5nSXRlbShzLCBFbmRpbmdDUkxGLCBtX2VuY29kaW5nKSk7CiB9CiAKLS8vIENo
YW5nZSBwbGFpbiBDUiBhbmQgcGxhaW4gTEYgdG8gQ1JMRiBwYWlycy4KLXN0YXRpYyBDU3RyaW5n
IGZpeExpbmVCcmVha3MoY29uc3QgQ1N0cmluZyYgcykKK3ZvaWQgRm9ybURhdGFMaXN0OjphcHBl
bmRTdHJpbmcoY29uc3QgQ1N0cmluZyYgcykKIHsKLSAgICAvLyBDb21wdXRlIHRoZSBsZW5ndGgu
Ci0gICAgdW5zaWduZWQgbmV3TGVuID0gMDsKLSAgICBjb25zdCBjaGFyKiBwID0gcy5kYXRhKCk7
Ci0gICAgd2hpbGUgKGNoYXIgYyA9ICpwKyspIHsKLSAgICAgICAgaWYgKGMgPT0gJ1xyJykgewot
ICAgICAgICAgICAgLy8gU2FmZSB0byBsb29rIGFoZWFkIGJlY2F1c2Ugb2YgdHJhaWxpbmcgJ1ww
Jy4KLSAgICAgICAgICAgIGlmICgqcCAhPSAnXG4nKSB7Ci0gICAgICAgICAgICAgICAgLy8gVHVy
biBDUiBpbnRvIENSTEYuCi0gICAgICAgICAgICAgICAgbmV3TGVuICs9IDI7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoYyA9PSAnXG4nKSB7Ci0gICAgICAgICAgICAvLyBUdXJu
IExGIGludG8gQ1JMRi4KLSAgICAgICAgICAgIG5ld0xlbiArPSAyOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgLy8gTGVhdmUgb3RoZXIgY2hhcmFjdGVycyBhbG9uZS4KLSAgICAgICAg
ICAgIG5ld0xlbiArPSAxOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChuZXdMZW4gPT0gcy5s
ZW5ndGgoKSkgewotICAgICAgICByZXR1cm4gczsKLSAgICB9Ci0gICAgCi0gICAgLy8gTWFrZSBh
IGNvcHkgb2YgdGhlIHN0cmluZy4KLSAgICBwID0gcy5kYXRhKCk7Ci0gICAgY2hhciogcTsKLSAg
ICBDU3RyaW5nIHJlc3VsdCA9IENTdHJpbmc6Om5ld1VuaW5pdGlhbGl6ZWQobmV3TGVuLCBxKTsK
LSAgICB3aGlsZSAoY2hhciBjID0gKnArKykgewotICAgICAgICBpZiAoYyA9PSAnXHInKSB7Ci0g
ICAgICAgICAgICAvLyBTYWZlIHRvIGxvb2sgYWhlYWQgYmVjYXVzZSBvZiB0cmFpbGluZyAnXDAn
LgotICAgICAgICAgICAgaWYgKCpwICE9ICdcbicpIHsKLSAgICAgICAgICAgICAgICAvLyBUdXJu
IENSIGludG8gQ1JMRi4KLSAgICAgICAgICAgICAgICAqcSsrID0gJ1xyJzsKLSAgICAgICAgICAg
ICAgICAqcSsrID0gJ1xuJzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChjID09
ICdcbicpIHsKLSAgICAgICAgICAgIC8vIFR1cm4gTEYgaW50byBDUkxGLgotICAgICAgICAgICAg
KnErKyA9ICdccic7Ci0gICAgICAgICAgICAqcSsrID0gJ1xuJzsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIC8vIExlYXZlIG90aGVyIGNoYXJhY3RlcnMgYWxvbmUuCi0gICAgICAgICAg
ICAqcSsrID0gYzsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OworICAgIG1f
bGlzdC5hcHBlbmQoQmxvYkl0ZW06OmNyZWF0ZVN0cmluZ0l0ZW0ocykpOwogfQogCi12b2lkIEZv
cm1EYXRhTGlzdDo6YXBwZW5kU3RyaW5nKGNvbnN0IFN0cmluZyYgcykKK3ZvaWQgRm9ybURhdGFM
aXN0OjphcHBlbmRCbG9iKGNvbnN0IFN0cmluZyYga2V5LCBQYXNzUmVmUHRyPEJsb2I+IGJsb2Ip
CiB7Ci0gICAgQ1N0cmluZyBjc3RyID0gZml4TGluZUJyZWFrcyhtX2VuY29kaW5nLmVuY29kZShz
LmNoYXJhY3RlcnMoKSwgcy5sZW5ndGgoKSwgRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpKTsKLSAg
ICBtX2xpc3QuYXBwZW5kKGNzdHIpOworICAgIGFwcGVuZFN0cmluZyhrZXkpOworICAgIGNvbnN0
IEJsb2I6Okl0ZW1MaXN0JiBsaXN0ID0gYmxvYi0+aXRlbXMoKTsKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGxpc3Quc2l6ZSgpOyArK2kpCisgICAgICAgIG1fbGlzdC5hcHBlbmQobGlzdC5h
dChpKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvRm9y
bURhdGFMaXN0LmggYi9XZWJDb3JlL2h0bWwvRm9ybURhdGFMaXN0LmgKaW5kZXggOGVjZjY0ZWU5
M2FkNTI0ZjQ3OTIxZjFkODIyZjlhMDhiYTAxM2Q3Yy4uMDRlMGIyNTA2MjBmNDhkNmRkOTA2M2E1
NDU4ODNkNzdhOTU3MTQwZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0Zvcm1EYXRhTGlzdC5o
CisrKyBiL1dlYkNvcmUvaHRtbC9Gb3JtRGF0YUxpc3QuaApAQCAtMjEsNyArMjEsOCBAQAogI2lm
bmRlZiBGb3JtRGF0YUxpc3RfaAogI2RlZmluZSBGb3JtRGF0YUxpc3RfaAogCi0jaW5jbHVkZSAi
QmxvYi5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJGaWxlLmgiCiAj
aW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgog
CkBAIC00NiwyNCArNDcsMjMgQEAgcHVibGljOgogICAgICAgICBhcHBlbmRTdHJpbmcoa2V5KTsK
ICAgICAgICAgYXBwZW5kU3RyaW5nKFN0cmluZzo6bnVtYmVyKHZhbHVlKSk7CiAgICAgfQotICAg
IHZvaWQgYXBwZW5kQmxvYihjb25zdCBTdHJpbmcmIGtleSwgUGFzc1JlZlB0cjxCbG9iPiBibG9i
KQotICAgIHsKLSAgICAgICAgYXBwZW5kU3RyaW5nKGtleSk7Ci0gICAgICAgIG1fbGlzdC5hcHBl
bmQoYmxvYik7Ci0gICAgfQorICAgIHZvaWQgYXBwZW5kQmxvYihjb25zdCBTdHJpbmcmIGtleSwg
UGFzc1JlZlB0cjxCbG9iPiBibG9iKTsKIAorICAgIC8vIEEgc2ltcGxlIHdyYXBwZXIgZm9yIEJs
b2JJdGVtLgogICAgIGNsYXNzIEl0ZW0gewogICAgIHB1YmxpYzoKICAgICAgICAgSXRlbSgpIHsg
fQotICAgICAgICBJdGVtKGNvbnN0IFdURjo6Q1N0cmluZyYgZGF0YSkgOiBtX2RhdGEoZGF0YSkg
eyB9Ci0gICAgICAgIEl0ZW0oUGFzc1JlZlB0cjxCbG9iPiBibG9iKSA6IG1fYmxvYihibG9iKSB7
IH0KLQotICAgICAgICBjb25zdCBXVEY6OkNTdHJpbmcmIGRhdGEoKSBjb25zdCB7IHJldHVybiBt
X2RhdGE7IH0KLSAgICAgICAgQmxvYiogYmxvYigpIGNvbnN0IHsgcmV0dXJuIG1fYmxvYi5nZXQo
KTsgfQorICAgICAgICBJdGVtKFBhc3NSZWZQdHI8QmxvYkl0ZW0+IGl0ZW0pIDogbV9pdGVtKGl0
ZW0pCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX2l0ZW0tPnRvU3RyaW5nSXRlbSgpKQor
ICAgICAgICAgICAgICAgIG1fY3N0ciA9IG1faXRlbS0+dG9TdHJpbmdJdGVtKCktPmNzdHIoKTsK
KyAgICAgICAgfQorICAgICAgICBjb25zdCBQYXNzUmVmUHRyPEJsb2JJdGVtPiBpdGVtKCkgY29u
c3QgeyByZXR1cm4gbV9pdGVtOyB9CisgICAgICAgIGNvbnN0IFdURjo6Q1N0cmluZyYgZGF0YSgp
IGNvbnN0IHsgcmV0dXJuIG1fY3N0cjsgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgV1RGOjpD
U3RyaW5nIG1fZGF0YTsKLSAgICAgICAgUmVmUHRyPEJsb2I+IG1fYmxvYjsKKyAgICAgICAgUmVm
UHRyPEJsb2JJdGVtPiBtX2l0ZW07CisgICAgICAgIFdURjo6Q1N0cmluZyBtX2NzdHI7CiAgICAg
fTsKIAogICAgIGNvbnN0IFZlY3RvcjxJdGVtPiYgbGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fbGlz
dDsgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcCBi
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAKaW5kZXggOTE4MDAyYWVmZDgx
YTY4OTFmOWYxOWJhZjQ0ZDc1NTkxZmRmYTQ4NC4uY2Y2MDAyM2IwN2JmYTRlMWI4ZDdiMGM3YmU0
MDgwYjY4MjRmZGY2ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1E
YXRhLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwCkBAIC0y
Miw2ICsyMiw3IEBACiAjaW5jbHVkZSAiRm9ybURhdGEuaCIKIAogI2luY2x1ZGUgIkJsb2IuaCIK
KyNpbmNsdWRlICJCbG9iSXRlbS5oIgogI2luY2x1ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUgIkNo
cm9tZUNsaWVudC5oIgogI2luY2x1ZGUgIkRPTUZvcm1EYXRhLmgiCkBAIC0zMiwxMCArMzMsMzUg
QEAKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2lu
Y2x1ZGUgIlRleHRFbmNvZGluZy5oIgotI2luY2x1ZGUgIlVVSUQuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCisjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCitjb25zdCBsb25nIGxvbmcgRm9ybURh
dGFFbGVtZW50Ojp0b0VuZE9mRmlsZSA9IC0xOworI2VuZGlmCisKK0Zvcm1EYXRhRWxlbWVudDo6
Rm9ybURhdGFFbGVtZW50KFBhc3NSZWZQdHI8QmxvYkl0ZW0+IGJsb2JJdGVtLCBib29sIHNob3Vs
ZEdlbmVyYXRlRmlsZSkKKyAgICA6IG1faXRlbShibG9iSXRlbSkKKyAgICAsIG1fdHlwZShtX2l0
ZW0tPnRvRmlsZUl0ZW0oKSA/IGVuY29kZWRGaWxlIDogZGF0YSkKKyAgICAsIG1fZGF0YShtX2l0
ZW0uZ2V0KCkpCisgICAgLCBtX2ZpbGVuYW1lKG1faXRlbS0+dG9GaWxlSXRlbSgpID8gbV9pdGVt
LT50b0ZpbGVJdGVtKCktPnBhdGgoKSA6IFN0cmluZygpKQorI2lmIEVOQUJMRShCTE9CX1NMSUNF
KQorICAgICwgbV9maWxlU3RhcnQoMCkKKyAgICAsIG1fZmlsZUxlbmd0aCh0b0VuZE9mRmlsZSkK
KyAgICAsIG1fZXhwZWN0ZWRGaWxlTW9kaWZpY2F0aW9uVGltZSgwKQorI2VuZGlmCisgICAgLCBt
X3Nob3VsZEdlbmVyYXRlRmlsZShzaG91bGRHZW5lcmF0ZUZpbGUpCit7CisjaWYgRU5BQkxFKEJM
T0JfU0xJQ0UpCisgICAgaWYgKG1faXRlbS0+dG9GaWxlUmFuZ2VJdGVtKCkpIHsKKyAgICAgICAg
Y29uc3QgRmlsZVJhbmdlQmxvYkl0ZW0qIHJhbmdlID0gbV9pdGVtLT50b0ZpbGVSYW5nZUl0ZW0o
KTsKKyAgICAgICAgbV9maWxlU3RhcnQgPSByYW5nZS0+c3RhcnQoKTsKKyAgICAgICAgbV9maWxl
TGVuZ3RoID0gcmFuZ2UtPnNpemUoKTsKKyAgICAgICAgbV9leHBlY3RlZEZpbGVNb2RpZmljYXRp
b25UaW1lID0gcmFuZ2UtPnNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSgpOworICAgIH0KKyNlbmRp
ZgorfQorCiBpbmxpbmUgRm9ybURhdGE6OkZvcm1EYXRhKCkKICAgICA6IG1faWRlbnRpZmllcigw
KQogICAgICwgbV9oYXNHZW5lcmF0ZWRGaWxlcyhmYWxzZSkKQEAgLTg1LDcgKzExMSw3IEBAIFBh
c3NSZWZQdHI8Rm9ybURhdGE+IEZvcm1EYXRhOjpjcmVhdGUoY29uc3Qgdm9pZCogZGF0YSwgc2l6
ZV90IHNpemUpCiBQYXNzUmVmUHRyPEZvcm1EYXRhPiBGb3JtRGF0YTo6Y3JlYXRlKGNvbnN0IENT
dHJpbmcmIHN0cmluZykKIHsKICAgICBSZWZQdHI8Rm9ybURhdGE+IHJlc3VsdCA9IGNyZWF0ZSgp
OwotICAgIHJlc3VsdC0+YXBwZW5kRGF0YShzdHJpbmcuZGF0YSgpLCBzdHJpbmcubGVuZ3RoKCkp
OworICAgIHJlc3VsdC0+YXBwZW5kU3RyaW5nKHN0cmluZyk7CiAgICAgcmV0dXJuIHJlc3VsdC5y
ZWxlYXNlKCk7CiB9CiAKQEAgLTEyNSw0NSArMTUxLDQyIEBAIFBhc3NSZWZQdHI8Rm9ybURhdGE+
IEZvcm1EYXRhOjpkZWVwQ29weSgpIGNvbnN0CiAgICAgZm9ybURhdGEtPm1fZWxlbWVudHMucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eShuKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG47ICsr
aSkgewogICAgICAgICBjb25zdCBGb3JtRGF0YUVsZW1lbnQmIGUgPSBtX2VsZW1lbnRzW2ldOwot
ICAgICAgICBzd2l0Y2ggKGUubV90eXBlKSB7Ci0gICAgICAgIGNhc2UgRm9ybURhdGFFbGVtZW50
OjpkYXRhOgotICAgICAgICAgICAgZm9ybURhdGEtPm1fZWxlbWVudHMuYXBwZW5kKEZvcm1EYXRh
RWxlbWVudChlLm1fZGF0YSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRm9y
bURhdGFFbGVtZW50OjplbmNvZGVkRmlsZToKLSNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAgICAg
ICAgICAgIGZvcm1EYXRhLT5tX2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVsZW1lbnQoZS5tX2Zp
bGVuYW1lLCBlLm1fZmlsZVN0YXJ0LCBlLm1fZmlsZUxlbmd0aCwgZS5tX2V4cGVjdGVkRmlsZU1v
ZGlmaWNhdGlvblRpbWUsIGUubV9zaG91bGRHZW5lcmF0ZUZpbGUpKTsKLSNlbHNlCi0gICAgICAg
ICAgICBmb3JtRGF0YS0+bV9lbGVtZW50cy5hcHBlbmQoRm9ybURhdGFFbGVtZW50KGUubV9maWxl
bmFtZSwgZS5tX3Nob3VsZEdlbmVyYXRlRmlsZSkpOwotI2VuZGlmCi0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQorICAgICAgICBmb3JtRGF0YS0+bV9lbGVtZW50cy5hcHBlbmQoRm9ybURh
dGFFbGVtZW50KGUuaXRlbSgpLT5kZWVwQ29weSgpLCBlLm1fc2hvdWxkR2VuZXJhdGVGaWxlKSk7
CiAgICAgfQogICAgIHJldHVybiBmb3JtRGF0YS5yZWxlYXNlKCk7CiB9CiAKIHZvaWQgRm9ybURh
dGE6OmFwcGVuZERhdGEoY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IHNpemUpCiB7Ci0gICAgaWYg
KG1fZWxlbWVudHMuaXNFbXB0eSgpIHx8IG1fZWxlbWVudHMubGFzdCgpLm1fdHlwZSAhPSBGb3Jt
RGF0YUVsZW1lbnQ6OmRhdGEpCi0gICAgICAgIG1fZWxlbWVudHMuYXBwZW5kKEZvcm1EYXRhRWxl
bWVudCgpKTsKLSAgICBGb3JtRGF0YUVsZW1lbnQmIGUgPSBtX2VsZW1lbnRzLmxhc3QoKTsKLSAg
ICBzaXplX3Qgb2xkU2l6ZSA9IGUubV9kYXRhLnNpemUoKTsKLSAgICBlLm1fZGF0YS5ncm93KG9s
ZFNpemUgKyBzaXplKTsKLSAgICBtZW1jcHkoZS5tX2RhdGEuZGF0YSgpICsgb2xkU2l6ZSwgZGF0
YSwgc2l6ZSk7CisgICAgbV9lbGVtZW50cy5hcHBlbmQoRm9ybURhdGFFbGVtZW50KEJsb2JJdGVt
OjpjcmVhdGVCeXRlc0FycmF5SXRlbShzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZGF0YSksIHNp
emUpKSk7Cit9CisKK3ZvaWQgRm9ybURhdGE6OmFwcGVuZFN0cmluZyhjb25zdCBDU3RyaW5nJiBz
dHJpbmcpCit7CisgICAgbV9lbGVtZW50cy5hcHBlbmQoRm9ybURhdGFFbGVtZW50KEJsb2JJdGVt
OjpjcmVhdGVTdHJpbmdJdGVtKHN0cmluZykpKTsKIH0KIAogdm9pZCBGb3JtRGF0YTo6YXBwZW5k
RmlsZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBib29sIHNob3VsZEdlbmVyYXRlRmlsZSkKIHsK
LSNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAgICBtX2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVs
ZW1lbnQoZmlsZW5hbWUsIDAsIEJsb2I6OnRvRW5kT2ZGaWxlLCBCbG9iOjpkb05vdENoZWNrRmls
ZUNoYW5nZSwgc2hvdWxkR2VuZXJhdGVGaWxlKSk7Ci0jZWxzZQotICAgIG1fZWxlbWVudHMuYXBw
ZW5kKEZvcm1EYXRhRWxlbWVudChmaWxlbmFtZSwgc2hvdWxkR2VuZXJhdGVGaWxlKSk7Ci0jZW5k
aWYKKyAgICBtX2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVsZW1lbnQoQmxvYkl0ZW06OmNyZWF0
ZUZpbGVJdGVtKGZpbGVuYW1lKSwgc2hvdWxkR2VuZXJhdGVGaWxlKSk7Cit9CisKK3ZvaWQgRm9y
bURhdGE6OmFwcGVuZEJsb2IoQmxvYiogYikKK3sKKyAgICBSZWZQdHI8QmxvYj4gYmxvYiA9IGI7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9iLT5pdGVtcygpLnNpemUoKTsgKytpKQor
ICAgICAgICBtX2VsZW1lbnRzLmFwcGVuZChibG9iLT5pdGVtcygpLmF0KGkpKTsKIH0KIAogI2lm
IEVOQUJMRShCTE9CX1NMSUNFKQogdm9pZCBGb3JtRGF0YTo6YXBwZW5kRmlsZVJhbmdlKGNvbnN0
IFN0cmluZyYgZmlsZW5hbWUsIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCwgZG91
YmxlIGV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZSwgYm9vbCBzaG91bGRHZW5lcmF0ZUZpbGUpCiB7
Ci0gICAgbV9lbGVtZW50cy5hcHBlbmQoRm9ybURhdGFFbGVtZW50KGZpbGVuYW1lLCBzdGFydCwg
bGVuZ3RoLCBleHBlY3RlZE1vZGlmaWNhdGlvblRpbWUsIHNob3VsZEdlbmVyYXRlRmlsZSkpOwor
ICAgIGlmIChsZW5ndGggPT0gRm9ybURhdGFFbGVtZW50Ojp0b0VuZE9mRmlsZSkgeworICAgICAg
ICBBU1NFUlQoIXN0YXJ0KTsKKyAgICAgICAgQVNTRVJUKCFleHBlY3RlZE1vZGlmaWNhdGlvblRp
bWUpOworICAgICAgICBtX2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVsZW1lbnQoQmxvYkl0ZW06
OmNyZWF0ZUZpbGVJdGVtKGZpbGVuYW1lKSwgc2hvdWxkR2VuZXJhdGVGaWxlKSk7CisgICAgfSBl
bHNlCisgICAgICAgIG1fZWxlbWVudHMuYXBwZW5kKEZvcm1EYXRhRWxlbWVudChCbG9iSXRlbTo6
Y3JlYXRlRmlsZVJhbmdlSXRlbShmaWxlbmFtZSwgc3RhcnQsIGxlbmd0aCwgZXhwZWN0ZWRNb2Rp
ZmljYXRpb25UaW1lKSwgc2hvdWxkR2VuZXJhdGVGaWxlKSk7CiB9CiAjZW5kaWYKIApAQCAtMTg2
LDIzICsyMDksMTMgQEAgdm9pZCBGb3JtRGF0YTo6YXBwZW5kRE9NRm9ybURhdGEoY29uc3QgRE9N
Rm9ybURhdGEmIGRvbUZvcm1EYXRhLCBib29sIGlzTXVsdGlQYXIKICAgICAgICAgICAgIFZlY3Rv
cjxjaGFyPiBoZWFkZXI7CiAgICAgICAgICAgICBmb3JtRGF0YUJ1aWxkZXIuYmVnaW5NdWx0aVBh
cnRIZWFkZXIoaGVhZGVyLCBtX2JvdW5kYXJ5LmRhdGEoKSwga2V5LmRhdGEoKSk7CiAKKyAgICAg
ICAgICAgIGNvbnN0IFJlZlB0cjxCbG9iSXRlbT4gaXRlbSA9IHZhbHVlLml0ZW0oKTsKICAgICAg
ICAgICAgIGJvb2wgc2hvdWxkR2VuZXJhdGVGaWxlID0gZmFsc2U7CiAgICAgICAgICAgICAvLyBJ
ZiB0aGUgY3VycmVudCB0eXBlIGlzIEZJTEUsIHRoZW4gd2UgYWxzbyBuZWVkIHRvIGluY2x1ZGUg
dGhlIGZpbGVuYW1lCi0gICAgICAgICAgICBpZiAodmFsdWUuYmxvYigpKSB7Ci0gICAgICAgICAg
ICAgICAgY29uc3QgU3RyaW5nJiBwYXRoID0gdmFsdWUuYmxvYigpLT5wYXRoKCk7Ci0jaWYgRU5B
QkxFKEJMT0JfU0xJQ0UpCi0gICAgICAgICAgICAgICAgU3RyaW5nIGZpbGVOYW1lOwotICAgICAg
ICAgICAgICAgIGlmICh2YWx1ZS5ibG9iKCktPmlzRmlsZSgpKQotICAgICAgICAgICAgICAgICAg
ICBmaWxlTmFtZSA9IHN0YXRpY19jYXN0PEZpbGUqPih2YWx1ZS5ibG9iKCkpLT5maWxlTmFtZSgp
OwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvLyBJZiBhIGJs
b2IgaXMgc2xpY2VkIGZyb20gYSBmaWxlLCBpdCBkb2VzIG5vdCBoYXZlIHRoZSBmaWxlbmFtZS4g
SW4gdGhpcyBjYXNlLCBsZXQncyBwcm9kdWNlIGEgdW5pcXVlIGZpbGVuYW1lLgotICAgICAgICAg
ICAgICAgICAgICBmaWxlTmFtZSA9ICJCbG9iIiArIGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmco
KTsKLSAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWUucmVwbGFjZSgiLSIsICIiKTsgLy8gRm9y
IHNhZnR5LCByZW1vdmUgJy0nIGZyb20gdGhlIGZpbGVuYW1lIHNuY2Ugc29tZSBzZXJ2ZXJzIG1h
eSBub3QgbGlrZSBpdC4KLSAgICAgICAgICAgICAgICB9Ci0jZWxzZQotICAgICAgICAgICAgICAg
IEFTU0VSVCh2YWx1ZS5ibG9iKCktPmlzRmlsZSgpKTsKLSAgICAgICAgICAgICAgICBTdHJpbmcg
ZmlsZU5hbWUgPSBzdGF0aWNfY2FzdDxGaWxlKj4odmFsdWUuYmxvYigpKS0+ZmlsZU5hbWUoKTsK
LSNlbmRpZgorICAgICAgICAgICAgaWYgKGl0ZW0tPnRvRmlsZUl0ZW0oKSkgeworICAgICAgICAg
ICAgICAgIGNvbnN0IEZpbGVCbG9iSXRlbSogZmlsZSA9IGl0ZW0tPnRvRmlsZUl0ZW0oKTsKKyAg
ICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHBhdGggPSBmaWxlLT5wYXRoKCk7CisgICAgICAg
ICAgICAgICAgU3RyaW5nIGZpbGVOYW1lID0gZmlsZS0+dW5pcXVlTmFtZSgpOwogCiAgICAgICAg
ICAgICAgICAgLy8gTGV0IHRoZSBhcHBsaWNhdGlvbiBzcGVjaWZ5IGEgZmlsZW5hbWUgaWYgaXQn
cyBnb2luZyB0byBnZW5lcmF0ZSBhIHJlcGxhY2VtZW50IGZpbGUgZm9yIHRoZSB1cGxvYWQuCiAg
ICAgICAgICAgICAgICAgaWYgKCFwYXRoLmlzRW1wdHkoKSkgewpAQCAtMjE3LDkgKzIzMCw5IEBA
IHZvaWQgRm9ybURhdGE6OmFwcGVuZERPTUZvcm1EYXRhKGNvbnN0IERPTUZvcm1EYXRhJiBkb21G
b3JtRGF0YSwgYm9vbCBpc011bHRpUGFyCiAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBp
bmNsdWRlIHRoZSBmaWxlbmFtZT0iLi4iIHBhcnQgaW4gdGhlIGhlYWRlciwgZXZlbiBpZiB0aGUg
ZmlsZW5hbWUgaXMgZW1wdHkKICAgICAgICAgICAgICAgICBmb3JtRGF0YUJ1aWxkZXIuYWRkRmls
ZW5hbWVUb011bHRpUGFydEhlYWRlcihoZWFkZXIsIGVuY29kaW5nLCBmaWxlTmFtZSk7CiAKLSAg
ICAgICAgICAgICAgICAvLyBJZiBhIGJsb2IgaXMgc2xpY2VkIGZyb20gYSBmaWxlLCBkbyBub3Qg
YWRkIHRoZSBjb250ZW50IHR5cGUuIAorICAgICAgICAgICAgICAgIC8vIElmIHRoZSBpdGVtIGlz
IHNsaWNlZCBmcm9tIGEgZmlsZSwgZG8gbm90IGFkZCB0aGUgY29udGVudCB0eXBlLgogI2lmIEVO
QUJMRShCTE9CX1NMSUNFKQotICAgICAgICAgICAgICAgIGlmICghZmlsZU5hbWUuaXNFbXB0eSgp
ICYmIHZhbHVlLmJsb2IoKS0+aXNGaWxlKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWZpbGVO
YW1lLmlzRW1wdHkoKSAmJiAhaXRlbS0+dG9GaWxlUmFuZ2VJdGVtKCkpIHsKICNlbHNlCiAgICAg
ICAgICAgICAgICAgaWYgKCFmaWxlTmFtZS5pc0VtcHR5KCkpIHsKICNlbmRpZgpAQCAtMjM3LDE1
ICsyNTAsNyBAQCB2b2lkIEZvcm1EYXRhOjphcHBlbmRET01Gb3JtRGF0YShjb25zdCBET01Gb3Jt
RGF0YSYgZG9tRm9ybURhdGEsIGJvb2wgaXNNdWx0aVBhcgogCiAgICAgICAgICAgICAvLyBBcHBl
bmQgYm9keQogICAgICAgICAgICAgYXBwZW5kRGF0YShoZWFkZXIuZGF0YSgpLCBoZWFkZXIuc2l6
ZSgpKTsKLSAgICAgICAgICAgIGlmIChzaXplX3QgZGF0YVNpemUgPSB2YWx1ZS5kYXRhKCkubGVu
Z3RoKCkpCi0gICAgICAgICAgICAgICAgYXBwZW5kRGF0YSh2YWx1ZS5kYXRhKCkuZGF0YSgpLCBk
YXRhU2l6ZSk7Ci0gICAgICAgICAgICBlbHNlIGlmICh2YWx1ZS5ibG9iKCkgJiYgIXZhbHVlLmJs
b2IoKS0+cGF0aCgpLmlzRW1wdHkoKSkKLSNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAgICAgICAg
ICAgICAgICBhcHBlbmRGaWxlUmFuZ2UodmFsdWUuYmxvYigpLT5wYXRoKCksIHZhbHVlLmJsb2Io
KS0+c3RhcnQoKSwgdmFsdWUuYmxvYigpLT5sZW5ndGgoKSwgdmFsdWUuYmxvYigpLT5tb2RpZmlj
YXRpb25UaW1lKCksIHNob3VsZEdlbmVyYXRlRmlsZSk7Ci0jZWxzZQotICAgICAgICAgICAgICAg
IGFwcGVuZEZpbGUodmFsdWUuYmxvYigpLT5wYXRoKCksIHNob3VsZEdlbmVyYXRlRmlsZSk7Ci0j
ZW5kaWYKLQorICAgICAgICAgICAgbV9lbGVtZW50cy5hcHBlbmQoRm9ybURhdGFFbGVtZW50KGl0
ZW0sIHNob3VsZEdlbmVyYXRlRmlsZSkpOwogICAgICAgICAgICAgYXBwZW5kRGF0YSgiXHJcbiIs
IDIpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gT21pdCB0aGUgbmFtZSAiaXNp
bmRleCIgaWYgaXQncyB0aGUgZmlyc3QgZm9ybSBkYXRhIGVsZW1lbnQuCkBAIC0yNTUsNyArMjYw
LDcgQEAgdm9pZCBGb3JtRGF0YTo6YXBwZW5kRE9NRm9ybURhdGEoY29uc3QgRE9NRm9ybURhdGEm
IGRvbUZvcm1EYXRhLCBib29sIGlzTXVsdGlQYXIKICAgICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgICAgICBmb3JtRGF0YUJ1aWxkZXIuYWRkS2V5VmFsdWVQYWlyQXNGb3JtRGF0YShlbmNvZGVk
RGF0YSwga2V5LmRhdGEoKSwgdmFsdWUuZGF0YSgpKTsKICAgICAgICAgfQotICAgIH0gCisgICAg
fQogCiAgICAgaWYgKGlzTXVsdGlQYXJ0Rm9ybSkKICAgICAgICAgZm9ybURhdGFCdWlsZGVyLmFk
ZEJvdW5kYXJ5VG9NdWx0aVBhcnRIZWFkZXIoZW5jb2RlZERhdGEsIG1fYm91bmRhcnkuZGF0YSgp
LCB0cnVlKTsKQEAgLTI3MCwxMiArMjc1LDggQEAgdm9pZCBGb3JtRGF0YTo6ZmxhdHRlbihWZWN0
b3I8Y2hhcj4mIGRhdGEpIGNvbnN0CiAgICAgc2l6ZV90IG4gPSBtX2VsZW1lbnRzLnNpemUoKTsK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG47ICsraSkgewogICAgICAgICBjb25zdCBGb3Jt
RGF0YUVsZW1lbnQmIGUgPSBtX2VsZW1lbnRzW2ldOwotICAgICAgICBpZiAoZS5tX3R5cGUgPT0g
Rm9ybURhdGFFbGVtZW50OjpkYXRhKSB7Ci0gICAgICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IGRh
dGEuc2l6ZSgpOwotICAgICAgICAgICAgc2l6ZV90IGRlbHRhID0gZS5tX2RhdGEuc2l6ZSgpOwot
ICAgICAgICAgICAgZGF0YS5ncm93KG9sZFNpemUgKyBkZWx0YSk7Ci0gICAgICAgICAgICBtZW1j
cHkoZGF0YS5kYXRhKCkgKyBvbGRTaXplLCBlLm1fZGF0YS5kYXRhKCksIGRlbHRhKTsKLSAgICAg
ICAgfQorICAgICAgICBpZiAoZS5tX3R5cGUgPT0gRm9ybURhdGFFbGVtZW50OjpkYXRhKQorICAg
ICAgICAgICAgZGF0YS5hcHBlbmQoZS5pdGVtKCktPmRhdGEoKSwgc3RhdGljX2Nhc3Q8c2l6ZV90
PihlLml0ZW0oKS0+c2l6ZSgpKSk7CiAgICAgfQogfQogCkBAIC0yODksMTAgKzI5MCwxMCBAQCBT
dHJpbmcgRm9ybURhdGE6OmZsYXR0ZW5Ub1N0cmluZygpIGNvbnN0CiB2b2lkIEZvcm1EYXRhOjpn
ZW5lcmF0ZUZpbGVzKERvY3VtZW50KiBkb2N1bWVudCkKIHsKICAgICBBU1NFUlQoIW1faGFzR2Vu
ZXJhdGVkRmlsZXMpOwotICAgIAorCiAgICAgaWYgKG1faGFzR2VuZXJhdGVkRmlsZXMpCiAgICAg
ICAgIHJldHVybjsKLSAgICAKKwogICAgIFBhZ2UqIHBhZ2UgPSBkb2N1bWVudC0+cGFnZSgpOwog
ICAgIGlmICghcGFnZSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzAyLDcgKzMwMyw3IEBAIHZvaWQg
Rm9ybURhdGE6OmdlbmVyYXRlRmlsZXMoRG9jdW1lbnQqIGRvY3VtZW50KQogICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbjsgKytpKSB7CiAgICAgICAgIEZvcm1EYXRhRWxlbWVudCYgZSA9IG1f
ZWxlbWVudHNbaV07CiAgICAgICAgIGlmIChlLm1fdHlwZSA9PSBGb3JtRGF0YUVsZW1lbnQ6OmVu
Y29kZWRGaWxlICYmIGUubV9zaG91bGRHZW5lcmF0ZUZpbGUpIHsKLSAgICAgICAgICAgIGUubV9n
ZW5lcmF0ZWRGaWxlbmFtZSA9IGNsaWVudC0+Z2VuZXJhdGVSZXBsYWNlbWVudEZpbGUoZS5tX2Zp
bGVuYW1lKTsKKyAgICAgICAgICAgIGUubV9nZW5lcmF0ZWRGaWxlbmFtZSA9IGNsaWVudC0+Z2Vu
ZXJhdGVSZXBsYWNlbWVudEZpbGUoZS5pdGVtKCktPnRvRmlsZUl0ZW0oKS0+cGF0aCgpKTsKICAg
ICAgICAgICAgIG1faGFzR2VuZXJhdGVkRmlsZXMgPSB0cnVlOwogICAgICAgICB9CiAgICAgfQpA
QCAtMzEyLDcgKzMxMyw3IEBAIHZvaWQgRm9ybURhdGE6OnJlbW92ZUdlbmVyYXRlZEZpbGVzSWZO
ZWVkZWQoKQogewogICAgIGlmICghbV9oYXNHZW5lcmF0ZWRGaWxlcykKICAgICAgICAgcmV0dXJu
OwotICAgICAgICAKKwogICAgIHNpemVfdCBuID0gbV9lbGVtZW50cy5zaXplKCk7CiAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBuOyArK2kpIHsKICAgICAgICAgRm9ybURhdGFFbGVtZW50JiBl
ID0gbV9lbGVtZW50c1tpXTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9G
b3JtRGF0YS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmgKaW5kZXggYTQz
OTAyMzQ3OTZhMGUyZjE0ZjVkMzQ5ZjVkZDBlZmZjMGE0YjdjZC4uOTllZTdjNTEyMWQ4MGFjNzll
ZTU5MjFlZGNiYjUyN2FlNzNhYjI0MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL0Zvcm1EYXRhLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmgK
QEAgLTIwLDYgKzIwLDcgQEAKICNpZm5kZWYgRm9ybURhdGFfaAogI2RlZmluZSBGb3JtRGF0YV9o
CiAKKyNpbmNsdWRlICJCbG9iLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTI5LDUy
ICszMCw0OSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBET01Gb3JtRGF0YTsKIGNsYXNz
IERvY3VtZW50OwogCisvLyBBIHdyYXBwZXIgY2xhc3Mgb2YgQmxvYkl0ZW0gZm9yIEZvcm1EYXRh
LgogY2xhc3MgRm9ybURhdGFFbGVtZW50IHsKIHB1YmxpYzoKLSAgICBGb3JtRGF0YUVsZW1lbnQo
KSA6IG1fdHlwZShkYXRhKSB7IH0KLSAgICBGb3JtRGF0YUVsZW1lbnQoY29uc3QgVmVjdG9yPGNo
YXI+JiBhcnJheSkgOiBtX3R5cGUoZGF0YSksIG1fZGF0YShhcnJheSkgeyB9Ci0jaWYgRU5BQkxF
KEJMT0JfU0xJQ0UpCi0gICAgRm9ybURhdGFFbGVtZW50KGNvbnN0IFN0cmluZyYgZmlsZW5hbWUs
IGxvbmcgbG9uZyBmaWxlU3RhcnQsIGxvbmcgbG9uZyBmaWxlTGVuZ3RoLCBkb3VibGUgZXhwZWN0
ZWRGaWxlTW9kaWZpY2F0aW9uVGltZSwgYm9vbCBzaG91bGRHZW5lcmF0ZUZpbGUpIDogbV90eXBl
KGVuY29kZWRGaWxlKSwgbV9maWxlbmFtZShmaWxlbmFtZSksIG1fZmlsZVN0YXJ0KGZpbGVTdGFy
dCksIG1fZmlsZUxlbmd0aChmaWxlTGVuZ3RoKSwgbV9leHBlY3RlZEZpbGVNb2RpZmljYXRpb25U
aW1lKGV4cGVjdGVkRmlsZU1vZGlmaWNhdGlvblRpbWUpLCBtX3Nob3VsZEdlbmVyYXRlRmlsZShz
aG91bGRHZW5lcmF0ZUZpbGUpIHsgfQotI2Vsc2UKLSAgICBGb3JtRGF0YUVsZW1lbnQoY29uc3Qg
U3RyaW5nJiBmaWxlbmFtZSwgYm9vbCBzaG91bGRHZW5lcmF0ZUZpbGUpIDogbV90eXBlKGVuY29k
ZWRGaWxlKSwgbV9maWxlbmFtZShmaWxlbmFtZSksIG1fc2hvdWxkR2VuZXJhdGVGaWxlKHNob3Vs
ZEdlbmVyYXRlRmlsZSkgeyB9Ci0jZW5kaWYKKyAgICBGb3JtRGF0YUVsZW1lbnQoKSA6IG1fZGF0
YSgwKSB7IH0KKyAgICBGb3JtRGF0YUVsZW1lbnQoUGFzc1JlZlB0cjxCbG9iSXRlbT4gYmxvYkl0
ZW0sIGJvb2wgc2hvdWxkR2VuZXJhdGVGaWxlID0gZmFsc2UpOworCisgICAgY29uc3QgQmxvYkl0
ZW0qIGl0ZW0oKSBjb25zdCB7IHJldHVybiBtX2l0ZW0uZ2V0KCk7IH0KKworICAgIFJlZlB0cjxC
bG9iSXRlbT4gbV9pdGVtOwogCisgICAgLy8gRklYTUU6IGNsZWFuIG1lIHVwLiAgQ29kZSBiZWxv
dyBhcmUgbW9zdGx5IGtlcHQgZm9yIGNvbXBhdGliaWxpdHkuCiAgICAgZW51bSB7IGRhdGEsIGVu
Y29kZWRGaWxlIH0gbV90eXBlOwotICAgIFZlY3RvcjxjaGFyPiBtX2RhdGE7CisgICAgY29uc3Qg
c3RydWN0IEJsb2JJdGVtV3JhcHBlciB7CisgICAgICAgIEJsb2JJdGVtV3JhcHBlcihjb25zdCBC
bG9iSXRlbVdyYXBwZXImIHYpIDogbV9pdGVtKHYubV9pdGVtKSB7IH0KKyAgICAgICAgQmxvYkl0
ZW1XcmFwcGVyKGNvbnN0IEJsb2JJdGVtKiBpdGVtKSA6IG1faXRlbShpdGVtKSB7IH0KKyAgICAg
ICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG1faXRl
bS0+c2l6ZSgpKTsgfQorICAgICAgICBjb25zdCBjaGFyKiBkYXRhKCkgY29uc3QgeyByZXR1cm4g
bV9pdGVtLT5kYXRhKCk7IH0KKyAgICAgICAgY2hhciogcmVsZWFzZUJ1ZmZlcigpIGNvbnN0IHsg
cmV0dXJuIG1faXRlbS0+cmVsZWFzZUJ1ZmZlcigpOyB9CisgICAgICAgIGNvbnN0IEJsb2JJdGVt
KiBtX2l0ZW07CisgICAgfSBtX2RhdGE7CiAgICAgU3RyaW5nIG1fZmlsZW5hbWU7CiAjaWYgRU5B
QkxFKEJMT0JfU0xJQ0UpCiAgICAgbG9uZyBsb25nIG1fZmlsZVN0YXJ0OwogICAgIGxvbmcgbG9u
ZyBtX2ZpbGVMZW5ndGg7CiAgICAgZG91YmxlIG1fZXhwZWN0ZWRGaWxlTW9kaWZpY2F0aW9uVGlt
ZTsKKworICAgIHN0YXRpYyBjb25zdCBsb25nIGxvbmcgdG9FbmRPZkZpbGU7CiAjZW5kaWYKKwog
ICAgIFN0cmluZyBtX2dlbmVyYXRlZEZpbGVuYW1lOwogICAgIGJvb2wgbV9zaG91bGRHZW5lcmF0
ZUZpbGU7CiB9OwogCiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvcm1EYXRhRWxlbWVu
dCYgYSwgY29uc3QgRm9ybURhdGFFbGVtZW50JiBiKQogewotICAgIGlmICgmYSA9PSAmYikKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgaWYgKGEubV90eXBlICE9IGIubV90eXBlKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGEubV9kYXRhICE9IGIubV9kYXRhKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0jaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgaWYgKGEubV9m
aWxlbmFtZSAhPSBiLm1fZmlsZW5hbWUgfHwgYS5tX2ZpbGVTdGFydCAhPSBiLm1fZmlsZVN0YXJ0
IHx8IGEubV9maWxlTGVuZ3RoICE9IGIubV9maWxlTGVuZ3RoIHx8IGEubV9leHBlY3RlZEZpbGVN
b2RpZmljYXRpb25UaW1lICE9IGIubV9leHBlY3RlZEZpbGVNb2RpZmljYXRpb25UaW1lKQotI2Vs
c2UKLSAgICBpZiAoYS5tX2ZpbGVuYW1lICE9IGIubV9maWxlbmFtZSkKLSNlbmRpZgotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gYS5pdGVtKCkt
PmVxdWFscyhiLml0ZW0oKSk7CiB9Ci0gCisKIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3Qg
Rm9ybURhdGFFbGVtZW50JiBhLCBjb25zdCBGb3JtRGF0YUVsZW1lbnQmIGIpCiB7CiAgICAgcmV0
dXJuICEoYSA9PSBiKTsKIH0KLSAKKwogY2xhc3MgRm9ybURhdGEgOiBwdWJsaWMgUmVmQ291bnRl
ZDxGb3JtRGF0YT4gewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZvcm1EYXRhPiBj
cmVhdGUoKTsKQEAgLTg2LDggKzg0LDEwIEBAIHB1YmxpYzoKICAgICBQYXNzUmVmUHRyPEZvcm1E
YXRhPiBjb3B5KCkgY29uc3Q7CiAgICAgUGFzc1JlZlB0cjxGb3JtRGF0YT4gZGVlcENvcHkoKSBj
b25zdDsKICAgICB+Rm9ybURhdGEoKTsKLSAgICAKKwogICAgIHZvaWQgYXBwZW5kRGF0YShjb25z
dCB2b2lkKiBkYXRhLCBzaXplX3QpOworICAgIHZvaWQgYXBwZW5kQmxvYihCbG9iKik7CisgICAg
dm9pZCBhcHBlbmRTdHJpbmcoY29uc3QgQ1N0cmluZyYpOwogICAgIHZvaWQgYXBwZW5kRmlsZShj
b25zdCBTdHJpbmcmIGZpbGVuYW1lLCBib29sIHNob3VsZEdlbmVyYXRlRmlsZSA9IGZhbHNlKTsK
ICNpZiBFTkFCTEUoQkxPQl9TTElDRSkKICAgICB2b2lkIGFwcGVuZEZpbGVSYW5nZShjb25zdCBT
dHJpbmcmIGZpbGVuYW1lLCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgsIGRvdWJs
ZSBleHBlY3RlZE1vZGlmaWNhdGlvblRpbWUsIGJvb2wgc2hvdWxkR2VuZXJhdGVGaWxlID0gZmFs
c2UpOwpAQCAtMTE4LDYgKzExOCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBhcHBlbmRET01Gb3Jt
RGF0YShjb25zdCBET01Gb3JtRGF0YSYgZG9tRm9ybURhdGEsIGJvb2wgaXNNdWx0aVBhcnRGb3Jt
LCBEb2N1bWVudCogZG9jdW1lbnQpOwogCiAgICAgVmVjdG9yPEZvcm1EYXRhRWxlbWVudD4gbV9l
bGVtZW50czsKKwogICAgIGludDY0X3QgbV9pZGVudGlmaWVyOwogICAgIGJvb2wgbV9oYXNHZW5l
cmF0ZWRGaWxlczsKICAgICBib29sIG1fYWx3YXlzU3RyZWFtOwpAQCAtMTMxLDcgKzEzMiw3IEBA
IGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9ybURhdGEmIGEsIGNvbnN0IEZvcm1EYXRh
JiBiKQogCiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZvcm1EYXRhJiBhLCBjb25zdCBG
b3JtRGF0YSYgYikKIHsKLSAgICByZXR1cm4gYS5lbGVtZW50cygpICE9IGIuZWxlbWVudHMoKTsK
KyAgICByZXR1cm4gIShhID09IGIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL0Zvcm1EYXRhU3RyZWFtTWFjLm1t
IGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9Gb3JtRGF0YVN0cmVhbU1hYy5tbQppbmRl
eCAyN2VjZmQwOGFkNWFhYWI4NzU2ZmE1OTZkOTk2YmQyZjZlYzVkMDNmLi5lMzk2OGYyNmJlNzVm
MzE2OGY0Yzc0NTViNWE1ZTQ4ODEwMzQxYWJjIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvbWFjL0Zvcm1EYXRhU3RyZWFtTWFjLm1tCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9tYWMvRm9ybURhdGFTdHJlYW1NYWMubW0KQEAgLTE0Miw3ICsxNDIsNyBAQCBzdGF0
aWMgdm9pZCBjbG9zZUN1cnJlbnRTdHJlYW0oRm9ybVN0cmVhbUZpZWxkcyAqZm9ybSkKICAgICAg
ICAgQ0ZSZWxlYXNlKGZvcm0tPmN1cnJlbnRTdHJlYW0pOwogICAgICAgICBmb3JtLT5jdXJyZW50
U3RyZWFtID0gTlVMTDsKICNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAgICAgICAgZm9ybS0+Y3Vy
cmVudFN0cmVhbVJhbmdlTGVuZ3RoID0gQmxvYjo6dG9FbmRPZkZpbGU7CisgICAgICAgIGZvcm0t
PmN1cnJlbnRTdHJlYW1SYW5nZUxlbmd0aCA9IEZvcm1EYXRhRWxlbWVudDo6dG9FbmRPZkZpbGU7
CiAjZW5kaWYKICAgICB9CiAgICAgaWYgKGZvcm0tPmN1cnJlbnREYXRhKSB7CkBAIC0xNjEsMjEg
KzE2MSwxNyBAQCBzdGF0aWMgYm9vbCBhZHZhbmNlQ3VycmVudFN0cmVhbShGb3JtU3RyZWFtRmll
bGRzKiBmb3JtKQogCiAgICAgLy8gQ3JlYXRlIHRoZSBuZXcgc3RyZWFtLgogICAgIEZvcm1EYXRh
RWxlbWVudCYgbmV4dElucHV0ID0gZm9ybS0+cmVtYWluaW5nRWxlbWVudHMubGFzdCgpOworCisg
ICAgLy8gQ2hlY2sgaWYgdGhlIHVuZGVybHlpbmcgZGF0YSBoYXMgYmVjb21lIHN0YWxlIChlLmcu
IHRoZSBmaWxlIGhhcyBiZWVuIGNoYW5nZWQgc2luY2UgaXRzIHNuYXBzaG90IGhhcyBiZWVuIHRh
a2VuKSBvciBub3QuCisgICAgaWYgKCFuZXh0SW5wdXQubV9pdGVtLT5pc1ZhbGlkKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKwogICAgIGlmIChuZXh0SW5wdXQubV90eXBlID09IEZvcm1EYXRh
RWxlbWVudDo6ZGF0YSkgewogICAgICAgICBzaXplX3Qgc2l6ZSA9IG5leHRJbnB1dC5tX2RhdGEu
c2l6ZSgpOwogICAgICAgICBjaGFyKiBkYXRhID0gbmV4dElucHV0Lm1fZGF0YS5yZWxlYXNlQnVm
ZmVyKCk7CiAgICAgICAgIGZvcm0tPmN1cnJlbnRTdHJlYW0gPSBDRlJlYWRTdHJlYW1DcmVhdGVX
aXRoQnl0ZXNOb0NvcHkoMCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVSW50OCo+KGRhdGEpLCBz
aXplLCBrQ0ZBbGxvY2F0b3JOdWxsKTsKICAgICAgICAgZm9ybS0+Y3VycmVudERhdGEgPSBkYXRh
OwogICAgIH0gZWxzZSB7Ci0jaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgICAgIC8vIENoZWNr
IGlmIHRoZSBmaWxlIGhhcyBiZWVuIGNoYW5nZWQgb3Igbm90IGlmIHJlcXVpcmVkLgotICAgICAg
ICBpZiAobmV4dElucHV0Lm1fZXhwZWN0ZWRGaWxlTW9kaWZpY2F0aW9uVGltZSAhPSBCbG9iOjpk
b05vdENoZWNrRmlsZUNoYW5nZSkgewotICAgICAgICAgICAgdGltZV90IGZpbGVNb2RpZmljYXRp
b25UaW1lOwotICAgICAgICAgICAgaWYgKCFnZXRGaWxlTW9kaWZpY2F0aW9uVGltZShuZXh0SW5w
dXQubV9maWxlbmFtZSwgZmlsZU1vZGlmaWNhdGlvblRpbWUpIHx8IGZpbGVNb2RpZmljYXRpb25U
aW1lICE9IHN0YXRpY19jYXN0PHRpbWVfdD4obmV4dElucHV0Lm1fZXhwZWN0ZWRGaWxlTW9kaWZp
Y2F0aW9uVGltZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0j
ZW5kaWYKLQogICAgICAgICBjb25zdCBTdHJpbmcmIHBhdGggPSBuZXh0SW5wdXQubV9zaG91bGRH
ZW5lcmF0ZUZpbGUgPyBuZXh0SW5wdXQubV9nZW5lcmF0ZWRGaWxlbmFtZSA6IG5leHRJbnB1dC5t
X2ZpbGVuYW1lOwogICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGZpbGVuYW1lKEFkb3B0
Q0YsIHBhdGguY3JlYXRlQ0ZTdHJpbmcoKSk7CiAgICAgICAgIFJldGFpblB0cjxDRlVSTFJlZj4g
ZmlsZVVSTChBZG9wdENGLCBDRlVSTENyZWF0ZVdpdGhGaWxlU3lzdGVtUGF0aCgwLCBmaWxlbmFt
ZS5nZXQoKSwga0NGVVJMUE9TSVhQYXRoU3R5bGUsIEZBTFNFKSk7CkBAIC0yMjIsNyArMjE4LDcg
QEAgc3RhdGljIHZvaWQqIGZvcm1DcmVhdGUoQ0ZSZWFkU3RyZWFtUmVmIHN0cmVhbSwgdm9pZCog
Y29udGV4dCkKICAgICBGb3JtU3RyZWFtRmllbGRzKiBuZXdJbmZvID0gbmV3IEZvcm1TdHJlYW1G
aWVsZHM7CiAgICAgbmV3SW5mby0+Y3VycmVudFN0cmVhbSA9IE5VTEw7CiAjaWYgRU5BQkxFKEJM
T0JfU0xJQ0UpCi0gICAgbmV3SW5mby0+Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoID0gQmxvYjo6
dG9FbmRPZkZpbGU7CisgICAgbmV3SW5mby0+Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoID0gRm9y
bURhdGFFbGVtZW50Ojp0b0VuZE9mRmlsZTsKICNlbmRpZgogICAgIG5ld0luZm8tPmN1cnJlbnRE
YXRhID0gMDsKICAgICBuZXdJbmZvLT5mb3JtU3RyZWFtID0gc3RyZWFtOyAvLyBEb24ndCByZXRh
aW4uIFRoYXQgd291bGQgY3JlYXRlIGEgcmVmZXJlbmNlIGN5Y2xlLgpAQCAtMjcwLDcgKzI2Niw3
IEBAIHN0YXRpYyBDRkluZGV4IGZvcm1SZWFkKENGUmVhZFN0cmVhbVJlZiBzdHJlYW0sIFVJbnQ4
KiBidWZmZXIsIENGSW5kZXggYnVmZmVyTGVuCiAgICAgd2hpbGUgKGZvcm0tPmN1cnJlbnRTdHJl
YW0pIHsKICAgICAgICAgQ0ZJbmRleCBieXRlc1RvUmVhZCA9IGJ1ZmZlckxlbmd0aDsKICNpZiBF
TkFCTEUoQkxPQl9TTElDRSkKLSAgICAgICAgaWYgKGZvcm0tPmN1cnJlbnRTdHJlYW1SYW5nZUxl
bmd0aCAhPSBCbG9iOjp0b0VuZE9mRmlsZSAmJiBmb3JtLT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5n
dGggPCBieXRlc1RvUmVhZCkKKyAgICAgICAgaWYgKGZvcm0tPmN1cnJlbnRTdHJlYW1SYW5nZUxl
bmd0aCAhPSBGb3JtRGF0YUVsZW1lbnQ6OnRvRW5kT2ZGaWxlICYmIGZvcm0tPmN1cnJlbnRTdHJl
YW1SYW5nZUxlbmd0aCA8IGJ5dGVzVG9SZWFkKQogICAgICAgICAgICAgYnl0ZXNUb1JlYWQgPSBz
dGF0aWNfY2FzdDxDRkluZGV4Pihmb3JtLT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5ndGgpOwogI2Vu
ZGlmCiAgICAgICAgIENGSW5kZXggYnl0ZXNSZWFkID0gQ0ZSZWFkU3RyZWFtUmVhZChmb3JtLT5j
dXJyZW50U3RyZWFtLCBidWZmZXIsIGJ5dGVzVG9SZWFkKTsKQEAgLTI4Myw3ICsyNzksNyBAQCBz
dGF0aWMgQ0ZJbmRleCBmb3JtUmVhZChDRlJlYWRTdHJlYW1SZWYgc3RyZWFtLCBVSW50OCogYnVm
ZmVyLCBDRkluZGV4IGJ1ZmZlckxlbgogICAgICAgICAgICAgKmF0RU9GID0gRkFMU0U7CiAgICAg
ICAgICAgICBmb3JtLT5ieXRlc1NlbnQgKz0gYnl0ZXNSZWFkOwogI2lmIEVOQUJMRShCTE9CX1NM
SUNFKQotICAgICAgICAgICAgaWYgKGZvcm0tPmN1cnJlbnRTdHJlYW1SYW5nZUxlbmd0aCAhPSBC
bG9iOjp0b0VuZE9mRmlsZSkKKyAgICAgICAgICAgIGlmIChmb3JtLT5jdXJyZW50U3RyZWFtUmFu
Z2VMZW5ndGggIT0gRm9ybURhdGFFbGVtZW50Ojp0b0VuZE9mRmlsZSkKICAgICAgICAgICAgICAg
ICBmb3JtLT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5ndGggLT0gYnl0ZXNSZWFkOwogI2VuZGlmCiAK
QEAgLTQwMCw3ICszOTYsNyBAQCB2b2lkIHNldEhUVFBCb2R5KE5TTXV0YWJsZVVSTFJlcXVlc3Qg
KnJlcXVlc3QsIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGZvcm1EYXRhKQogICAgICAgICBlbHNlIHsK
ICNpZiBFTkFCTEUoQkxPQl9TTElDRSkKICAgICAgICAgICAgIC8vIElmIHdlJ3JlIHNlbmRpbmcg
dGhlIGZpbGUgcmFuZ2UsIHVzZSB0aGUgZXhpc3RpbmcgcmFuZ2UgbGVuZ3RoIGZvciBub3cuIFdl
IHdpbGwgZGV0ZWN0IGlmIHRoZSBmaWxlIGhhcyBiZWVuIGNoYW5nZWQgcmlnaHQgYmVmb3JlIHdl
IHJlYWQgdGhlIGZpbGUgYW5kIGFib3J0IHRoZSBvcGVyYXRpb24gaWYgbmVjZXNzYXJ5LgotICAg
ICAgICAgICAgaWYgKGVsZW1lbnQubV9maWxlTGVuZ3RoICE9IEJsb2I6OnRvRW5kT2ZGaWxlKSB7
CisgICAgICAgICAgICBpZiAoZWxlbWVudC5tX2ZpbGVMZW5ndGggIT0gRm9ybURhdGFFbGVtZW50
Ojp0b0VuZE9mRmlsZSkgewogICAgICAgICAgICAgICAgIGxlbmd0aCArPSBlbGVtZW50Lm1fZmls
ZUxlbmd0aDsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KZGlmZiAt
LWdpdCBhL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcCBiL1dlYkNvcmUveG1sL1hNTEh0
dHBSZXF1ZXN0LmNwcAppbmRleCA1Y2RlMjRkZTI5ZGI0NDIxMDAwMWEzMDIzMjQ0Y2E0Y2NkMjVj
ZmJiLi5mNjFkNzFkMjRlNjM5MzVlYjg1YzBiMzVkYmZjZmI5N2EwNTljMmRmIDEwMDY0NAotLS0g
YS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKKysrIGIvV2ViQ29yZS94bWwvWE1MSHR0
cFJlcXVlc3QuY3BwCkBAIC00NzgsMTEgKzQ3OCw3IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OnNl
bmQoQmxvYiogYm9keSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgICAgIC8vIEZJWE1FOiBTaG91
bGQgd2Ugc2V0IGEgQ29udGVudC1UeXBlIGlmIG9uZSBpcyBub3Qgc2V0LgogICAgICAgICAvLyBG
SVhNRTogYWRkIHN1cHBvcnQgZm9yIHVwbG9hZGluZyBidW5kbGVzLgogICAgICAgICBtX3JlcXVl
c3RFbnRpdHlCb2R5ID0gRm9ybURhdGE6OmNyZWF0ZSgpOwotI2lmIEVOQUJMRShCTE9CX1NMSUNF
KQotICAgICAgICBtX3JlcXVlc3RFbnRpdHlCb2R5LT5hcHBlbmRGaWxlUmFuZ2UoYm9keS0+cGF0
aCgpLCBib2R5LT5zdGFydCgpLCBib2R5LT5sZW5ndGgoKSwgYm9keS0+bW9kaWZpY2F0aW9uVGlt
ZSgpKTsKLSNlbHNlCi0gICAgICAgIG1fcmVxdWVzdEVudGl0eUJvZHktPmFwcGVuZEZpbGUoYm9k
eS0+cGF0aCgpLCBmYWxzZSk7Ci0jZW5kaWYKKyAgICAgICAgbV9yZXF1ZXN0RW50aXR5Qm9keS0+
YXBwZW5kQmxvYihib2R5KTsKICAgICB9CiAKICAgICBjcmVhdGVSZXF1ZXN0KGVjKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56283</attachid>
            <date>2010-05-17 16:07:41 -0700</date>
            <delta_ts>2010-05-17 16:16:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-39083-20100517160739.patch</filename>
            <type>text/plain</type>
            <size>69366</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YzE4YmQ4MDk3YjQxYTRhMWVjODBmOWZmZTBlNjdmNDdiMGIxNTZiZS4uNDM1YjNjYjc4NDdhNWNk
MmJlMTAyNzk2OTFkODBlYWZiZGUzMzg4OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4NyBAQAorMjAxMC0wNS0xNyAgS2lu
dWtvIFlhc3VkYSAgPGtpbnVrb0BraW51a28yLW1hY3Byby5tdHYuY29ycC5nb29nbGUuY29tPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlZmFjdG9y
IEZvcm1EYXRhIGFuZCBCbG9iIGZvciBiZXR0ZXIgc3VwcG9ydCBvZiBCbG9icyBzeW50aGVzaXpl
ZCBieSBCbG9iQnVpbGRlci4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTM5MDgzCisKKyAgICAgICAgSW50cm9kdWNlcyBhIG5ldyBjbGFzcyBCbG9iSXRl
bSBhcyBhIGJhc2ljIGNvbXBvbmVudCBvZiBCbG9iIGFuZCBGb3JtRGF0YSwKKyAgICAgICAgYW5k
IG1ha2VzIEJsb2IgYXMgYSBjb2xsZWN0aW9uIG9mIEJsb2JJdGVtcy4KKyAgICAgICAgRmlsZSB3
b3VsZCBiZWNvbWUgYSBzcGVjaWFsIHR5cGUgb2YgQmxvYiB0aGF0IGNvbnRhaW5zIG9ubHkgb25l
IEZpbGVCbG9iSXRlbS4KKyAgICAgICAgRm9ybURhdGFFbGVtZW50IGFuZCBGb3JtRGF0YUxpc3Q6
Okl0ZW0gd291bGQgYmVjb21lIGEgd3JhcHBlciBvZiBCbG9iSXRlbS4KKworICAgICAgICBUaGUg
cGF0Y2ggZG9lc24ndCBzdXBwb3J0IHRoZSBsYXRlc3QgRmlsZSBBUEkgY2hhbmdlcyAoZS5nLiB0
eXBlLCB1cmwgYW5kCisgICAgICAgIHNsaWNlJ3MgdHlwZSBwYXJhbWV0ZXJzKSBhbmQgc2hvdWxk
IG5vdCBjaGFuZ2UgYW55IG9mIGl0cyBleGlzdGluZyBiZWhhdmlvcnMuCisKKyAgICAgICAgVGhl
IGV4aXN0aW5nIHRlc3RzIHNob3VsZCBiZSBhYmxlIHRvIGJlIHVzZWQgZm9yIHJlZ3Jlc3Npb246
CisgICAgICAgIC0gaHR0cC90ZXN0cy9sb2NhbC9mb3JtZGF0YS9zZW5kLWZvcm0tZGF0YS13aXRo
LXNsaWNlZC1maWxlLmh0bWwKKyAgICAgICAgLSBodHRwL3Rlc3RzL2xvY2FsL3NlbmQtc2xpY2Vk
LWRyYWdnZWQtZmlsZS5odG1sCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAg
KiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpaaWdaYWc6OlNlcmlhbGl6ZXI6OndyaXRlQmxvYik6
CisgICAgICAgIChXZWJDb3JlOjpaaWdaYWc6OlJlYWRlcjo6cmVhZEJsb2IpOgorICAgICAgICAq
IGh0bWwvQmxvYi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjpCbG9iKToKKyAgICAgICAg
KFdlYkNvcmU6OkJsb2I6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6cGF0aCk6Cisg
ICAgICAgIChXZWJDb3JlOjpCbG9iOjphcHBlbmQpOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6
c2xpY2UpOgorICAgICAgICAqIGh0bWwvQmxvYi5oOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OmNyZWF0ZUZyb21GaWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkJsb2I6OnR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6aXRlbXMp
OgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6QmxvYik6CisgICAgICAgICogaHRtbC9CbG9iSXRl
bS5jcHA6IEFkZGVkLgorICAgICAgICAqIGh0bWwvQmxvYkl0ZW0uaDogQWRkZWQuCisgICAgICAg
ICogaHRtbC9GaWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldEZpbGVUeXBlRnJvbVBhdGgp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsZTo6RmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWxl
OjpuYW1lKToKKyAgICAgICAgKiBodG1sL0ZpbGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGU6
OmZpbGVOYW1lKToKKyAgICAgICAgKiBodG1sL0ZpbGVTdHJlYW0uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsZVN0cmVhbTo6b3BlbkZvclJlYWQpOgorICAgICAgICAqIGh0bWwvRm9ybURhdGFM
aXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhTGlzdDo6YXBwZW5kU3RyaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhTGlzdDo6YXBwZW5kQmxvYik6CisgICAgICAgICog
aHRtbC9Gb3JtRGF0YUxpc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhTGlzdDo6SXRl
bTo6SXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YUxpc3Q6Okl0ZW06Oml0ZW0pOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGFMaXN0OjpJdGVtOjpkYXRhKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRh
RWxlbWVudDo6Rm9ybURhdGFFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6OmRlZXBDb3B5KToKKyAgICAgICAg
KFdlYkNvcmU6OkZvcm1EYXRhOjphcHBlbmREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1E
YXRhOjphcHBlbmRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6OmFwcGVuZEZp
bGUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6OmFwcGVuZEJsb2IpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9ybURhdGE6OmFwcGVuZEZpbGVSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpG
b3JtRGF0YTo6YXBwZW5kRE9NRm9ybURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsv
Rm9ybURhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhRWxlbWVudDo6Rm9ybURhdGFF
bGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhRWxlbWVudDo6aXRlbSk6CisgICAg
ICAgIChXZWJDb3JlOjpGb3JtRGF0YUVsZW1lbnQ6OkJsb2JJdGVtV3JhcHBlcjo6QmxvYkl0ZW1X
cmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhRWxlbWVudDo6QmxvYkl0ZW1XcmFw
cGVyOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhRWxlbWVudDo6QmxvYkl0ZW1X
cmFwcGVyOjpkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhRWxlbWVudDo6QmxvYkl0
ZW1XcmFwcGVyOjpyZWxlYXNlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0p
OgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3IhPSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0
d29yay9tYWMvRm9ybURhdGFTdHJlYW1NYWMubW06CisgICAgICAgIChXZWJDb3JlOjpjbG9zZUN1
cnJlbnRTdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6YWR2YW5jZUN1cnJlbnRTdHJlYW0pOgor
ICAgICAgICAoV2ViQ29yZTo6Zm9ybUNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpmb3JtUmVh
ZCk6CisgICAgICAgIChXZWJDb3JlOjpzZXRIVFRQQm9keSk6CisgICAgICAgICogeG1sL1hNTEh0
dHBSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjpzZW5kKToK
KwogMjAxMC0wNS0xNyAgQW50dGkgS29pdmlzdG8gIDxrb2l2aXN0b0Bpa2kuZmk+CiAKICAgICAg
ICAgVGhpcyB3YXMgbWlzc2luZyBmcm9tIHByZXZpb3VzIGNvbW1pdC4KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvR05VbWFrZWZpbGUuYW0gYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IDVlMGEx
MjYzYTIxNzU3ZjE1NzE3YTgxYWFkNjI3NmQ0YzVkZjYzYTUuLmU0Y2RiMGE1MTA2ZTBlZjc1NDEy
MzZkMjNjMmQwZjU2NjA5OGU1ZDEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0K
KysrIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtMTAyNSw2ICsxMDI1LDggQEAgd2ViY29y
ZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL2hpc3RvcnkvUGFnZUNhY2hlLmggXAogCVdlYkNvcmUv
aHRtbC9CbG9iLmNwcCBcCiAJV2ViQ29yZS9odG1sL0Jsb2IuaCBcCisJV2ViQ29yZS9odG1sL0Js
b2JJdGVtLmNwcCBcCisJV2ViQ29yZS9odG1sL0Jsb2JJdGVtLmggXAogCVdlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzQ29udGV4dEF0dHJpYnV0ZXMuaCBcCiAJV2ViQ29yZS9odG1sL2NhbnZhcy9D
YW52YXNHcmFkaWVudC5jcHAgXAogCVdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzR3JhZGllbnQu
aCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCmluZGV4IDkxZDdlZGFiNWE1MzA3NDU2N2Y1MDFjMTYyNmY3MzM2NjI5MmZiYjYuLmFkYWYx
OTRkNDQ4MzBmMWZkYmMzZTk4MGYxNTBjYTczYWFkOGE5MDkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
V2ViQ29yZS5neXBpCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0xMzc1LDYgKzEzNzUs
OCBAQAogICAgICAgICAgICAgJ2hpc3RvcnkvUGFnZUNhY2hlLmgnLAogICAgICAgICAgICAgJ2h0
bWwvQmxvYi5jcHAnLAogICAgICAgICAgICAgJ2h0bWwvQmxvYi5oJywKKyAgICAgICAgICAgICdo
dG1sL0Jsb2JJdGVtLmNwcCcsCisgICAgICAgICAgICAnaHRtbC9CbG9iSXRlbS5oJywKICAgICAg
ICAgICAgICdodG1sL2NhbnZhcy9BcnJheUJ1ZmZlclZpZXcuY3BwJywKICAgICAgICAgICAgICdo
dG1sL2NhbnZhcy9BcnJheUJ1ZmZlclZpZXcuaCcsCiAgICAgICAgICAgICAnaHRtbC9jYW52YXMv
QXJyYXlCdWZmZXIuY3BwJywKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9XZWJD
b3JlL1dlYkNvcmUucHJvCmluZGV4IDkzMzA4MWFjMjY5YjYxODlmY2NjZDJhZGU0MmMyNWFkYmJm
ZjcwYmIuLjM3MWQxNjA2MTAzY2RkMzdiOTNlZmRmYjA1YTMzMWViNGVhZTIzNGIgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtNTg2
LDYgKzU4Niw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGhpc3RvcnkvcXQvSGlzdG9yeUl0ZW1RdC5j
cHAgXAogICAgIGhpc3RvcnkvUGFnZUNhY2hlLmNwcCBcCiAgICAgaHRtbC9CbG9iLmNwcCBcCisg
ICAgaHRtbC9CbG9iSXRlbS5jcHAgXAogICAgIGh0bWwvY2FudmFzL0NhbnZhc0dyYWRpZW50LmNw
cCBcCiAgICAgaHRtbC9jYW52YXMvQ2FudmFzUGF0dGVybi5jcHAgXAogICAgIGh0bWwvY2FudmFz
L0NhbnZhc1BpeGVsQXJyYXkuY3BwIFwKQEAgLTEzMDUsNiArMTMwNiw3IEBAIEhFQURFUlMgKz0g
XAogICAgIGhpc3RvcnkvSGlzdG9yeUl0ZW0uaCBcCiAgICAgaGlzdG9yeS9QYWdlQ2FjaGUuaCBc
CiAgICAgaHRtbC9CbG9iLmggXAorICAgIGh0bWwvQmxvYkl0ZW0uaCBcCiAgICAgaHRtbC9jYW52
YXMvQ2FudmFzR3JhZGllbnQuaCBcCiAgICAgaHRtbC9jYW52YXMvQ2FudmFzUGF0dGVybi5oIFwK
ICAgICBodG1sL2NhbnZhcy9DYW52YXNQaXhlbEFycmF5LmggXApkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2oKaW5kZXggZDkzMDJhOTliZTU0ODBlYTYwMzQ5ODRhNDA5NWFjZDA1NDUx
OWVlMC4uYTY2Y2M2YmMyZDZkZDQwODc2MmU1NzMyNTk3ZjQzYzk2ZTM5MjIxYyAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9XZWJDb3JlL1dl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC0zMDU3Myw2ICszMDU3MywxNCBAQAogCQkJ
CT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEJs
b2JJdGVtLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXGh0bWxcQmxvYkl0ZW0uaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8Rmls
ZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcY2FudmFzXENhbnZhc0dyYWRpZW50LmNwcCIN
CiAJCQkJPg0KIAkJCTwvRmlsZT4NCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvaiBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCmluZGV4IGVkYmU5OTVkZGVjMDEwMGVjODliNmQwM2QyOTQzZWI5NWZlM2NhMzcuLjdi
MzU3ODAzZTM4NmUyYmUyNGE4ZTBkYzJlMTM1NmZhZjQ2NDQ5ZmEgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02NjUsNyArNjY1LDcgQEAKIAkJMkU5NEY0
NTExMTkyMDk2QTAwQjdGNzVEIC8qIEZpbGVSZWFkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFOTRGM0NDMTE4QjkwOEUwMEI3Rjc1RCAvKiBGaWxl
UmVhZGVyLmggKi87IH07CiAJCTJFQTc2ODA0MEZFNzEyNjQwMEFCOUM4QSAvKiBXb3JrZXJTY3Jp
cHRMb2FkZXJDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDJFQTc2ODAzMEZFNzEyNjQwMEFCOUM4QSAvKiBXb3JrZXJTY3JpcHRMb2FkZXJDbGll
bnQuaCAqLzsgfTsKIAkJMkVBRkFGMEUxMEUyQUYyRDAwN0VEM0Q2IC8qIEJsb2IuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkVBRkFGMEIxMEUyQUYy
RDAwN0VEM0Q2IC8qIEJsb2IuY3BwICovOyB9OwotCQkyRUFGQUYwRjEwRTJBRjJEMDA3RUQzRDYg
LyogQmxvYi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MkVBRkFGMEMxMEUyQUYyRDAwN0VEM0Q2IC8qIEJsb2IuaCAqLzsgfTsKKwkJMkVBRkFGMEYxMEUy
QUYyRDAwN0VEM0Q2IC8qIEJsb2IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDJFQUZBRjBDMTBFMkFGMkQwMDdFRDNENiAvKiBCbG9iLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkVDRjdBREMxMDE2MkIz
ODAwNDI3REU3IC8qIEpTRXJyb3JFdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyRUNGN0FEQTEwMTYyQjM4MDA0MjdERTcgLyogSlNFcnJvckV2
ZW50LmNwcCAqLzsgfTsKIAkJMkVDRjdBREQxMDE2MkIzODAwNDI3REU3IC8qIEpTRXJyb3JFdmVu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkVDRjdB
REIxMDE2MkIzODAwNDI3REU3IC8qIEpTRXJyb3JFdmVudC5oICovOyB9OwogCQkyRUNGN0FFMTEw
MTYyQjU4MDA0MjdERTcgLyogRXJyb3JFdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRUNGN0FERTEwMTYyQjU4MDA0MjdERTcgLyogRXJyb3JF
dmVudC5jcHAgKi87IH07CkBAIC0yMjU4LDYgKzIyNTgsOCBAQAogCQk4NUY3NEUwQTBBQThERjhD
MDAwREMyODQgLyogRE9NQ1NTVW5rbm93blJ1bGUuaCBpbiBDb3B5IEdlbmVyYXRlZCBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg1MDMyREQ1MEFBOEM5QkUwMDdE
M0I3RCAvKiBET01DU1NVbmtub3duUnVsZS5oICovOyB9OwogCQk4NUZGMzE1QTBBQUZCRkNCMDAz
NzRGMzggLyogRE9NS2V5Ym9hcmRFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gODVGRjMxNTgwQUFGQkZDQjAwMzc0RjM4IC8qIERPTUtleWJvYXJk
RXZlbnQuaCAqLzsgfTsKIAkJODVGRjMxNUIwQUFGQkZDQjAwMzc0RjM4IC8qIERPTUtleWJvYXJk
RXZlbnQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4
NUZGMzE1OTBBQUZCRkNCMDAzNzRGMzggLyogRE9NS2V5Ym9hcmRFdmVudC5tbSAqLzsgfTsKKwkJ
ODkxODE0MzAxMTg3QzRCNDAwQkY2OThBIC8qIEJsb2JJdGVtLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg5MTgxNDJCMTE4N0M0QjQwMEJGNjk4QSAv
KiBCbG9iSXRlbS5jcHAgKi87IH07CisJCTg5MTgxNDMxMTE4N0M0QjQwMEJGNjk4QSAvKiBCbG9i
SXRlbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODkx
ODE0MkMxMTg3QzRCNDAwQkY2OThBIC8qIEJsb2JJdGVtLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJODk1MjUzNTIxMTY0MUIzNDAwQ0FCRjAwIC8q
IEZpbGVUaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODk1MjUzNTAxMTY0MUIzNDAwQ0FCRjAwIC8qIEZpbGVUaHJlYWQuY3BwICovOyB9Owog
CQk4OTUyNTM1MzExNjQxQjM0MDBDQUJGMDAgLyogRmlsZVRocmVhZC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODk1MjUzNTExMTY0MUIzNDAwQ0FCRjAw
IC8qIEZpbGVUaHJlYWQuaCAqLzsgfTsKIAkJODk1MjUzRDcxMTZDNEM2ODAwQ0FCRjAwIC8qIEZp
bGVTdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gODk1MjUzRDQxMTZDNEM2ODAwQ0FCRjAwIC8qIEZpbGVTdHJlYW0uY3BwICovOyB9OwpAQCAt
NzgyMyw2ICs3ODI1LDggQEAKIAkJODVGNTZBNzkwQTk4Q0UzNzAwQURCNjBBIC8qIERPTVByb2Nl
c3NpbmdJbnN0cnVjdGlvbi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBET01Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTg1RkYzMTU4MEFBRkJGQ0IwMDM3NEYzOCAvKiBET01LZXlib2FyZEV2ZW50LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01LZXlib2FyZEV2ZW50Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg1RkYzMTU5MEFBRkJGQ0IwMDM3NEYzOCAvKiBET01L
ZXlib2FyZEV2ZW50Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IERPTUtleWJvYXJkRXZlbnQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg5MTgx
NDJCMTE4N0M0QjQwMEJGNjk4QSAvKiBCbG9iSXRlbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBCbG9iSXRlbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTg5MTgxNDJDMTE4N0M0QjQwMEJGNjk4QSAvKiBCbG9iSXRlbS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBCbG9iSXRlbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk4OTUyNTM1MDExNjQxQjM0MDBDQUJGMDAgLyogRmlsZVRocmVhZC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGaWxlVGhyZWFkLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJODk1MjUzNTExMTY0MUIzNDAwQ0FCRjAwIC8qIEZpbGVUaHJlYWQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsZVRocmVhZC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk4OTUyNTNENDExNkM0QzY4MDBDQUJGMDAgLyogRmlsZVN0
cmVhbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGaWxlU3RyZWFt
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzMjY1LDYgKzEzMjY5LDggQEAK
IAkJCQkyRUFGQUYwQjEwRTJBRjJEMDA3RUQzRDYgLyogQmxvYi5jcHAgKi8sCiAJCQkJMkVBRkFG
MEMxMEUyQUYyRDAwN0VEM0Q2IC8qIEJsb2IuaCAqLywKIAkJCQkyRUFGQUYwRDEwRTJBRjJEMDA3
RUQzRDYgLyogQmxvYi5pZGwgKi8sCisJCQkJODkxODE0MkIxMTg3QzRCNDAwQkY2OThBIC8qIEJs
b2JJdGVtLmNwcCAqLywKKwkJCQk4OTE4MTQyQzExODdDNEI0MDBCRjY5OEEgLyogQmxvYkl0ZW0u
aCAqLywKIAkJCQk5M0M0NDFFRDBGODEzQTFBMDBDMUE2MzQgLyogQ29sbGVjdGlvbkNhY2hlLmNw
cCAqLywKIAkJCQk5M0M0NDFFRTBGODEzQTFBMDBDMUE2MzQgLyogQ29sbGVjdGlvbkNhY2hlLmgg
Ki8sCiAJCQkJOTNDNDQxRkYwRjgxM0FFMTAwQzFBNjM0IC8qIENvbGxlY3Rpb25UeXBlLmggKi8s
CkBAIC0xNjc1MSw2ICsxNjc1Nyw3IEBACiAJCQkJQkM1RUI5MjAwRTgyMDQwODAwQjI1OTY1IC8q
IEJpbmRpbmdVUkkuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4OTk0MzI4MEI0MjMzODgwMEQ3Qzgw
MiAvKiBCaXRtYXBJbWFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkVBRkFGMEYxMEUyQUYyRDAw
N0VEM0Q2IC8qIEJsb2IuaCBpbiBIZWFkZXJzICovLAorCQkJCTg5MTgxNDMxMTE4N0M0QjQwMEJG
Njk4QSAvKiBCbG9iSXRlbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNGMTk5QkUwODI0NUU1OTAw
MUU5QUJDIC8qIEJsb2NrRXhjZXB0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1RUI1RTEw
RTgxQkU4NzAwQjI1OTY1IC8qIEJvcmRlckRhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNUVC
NURCMEU4MUI3RUEwMEIyNTk2NSAvKiBCb3JkZXJWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0x
Nzk5OSw2ICsxODAwNiw3IEBACiAJCQkJRkU4MEQ3QUEwRTlDMUVEMjAwMEQ2Rjc1IC8qIEpTQ3Vz
dG9tUG9zaXRpb25FcnJvckNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTM0MTdDOTBD
RUNGRjI1MDA0OUNCREUgLyogSlNDdXN0b21Wb2lkQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAog
CQkJCUUxMEI5MzdDMEI3M0MwMEEwMDNFRDg5MCAvKiBKU0N1c3RvbVhQYXRoTlNSZXNvbHZlci5o
IGluIEhlYWRlcnMgKi8sCisJCQkJQjU5REQ2OTkxMTkwMjlFNTAwN0U5Njg0IC8qIEpTRGF0YWJh
c2VDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFFODJGOTAwQ0FBRkE5RDAwMjIzN0FF
IC8qIEpTRGF0YWJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNzdEMTZBMEZGMTlGNTYwMDcw
ODg3QiAvKiBKU0RhdGFHcmlkQ29sdW1uLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzc3RDE2QzBG
RjE5RjU2MDA3MDg4N0IgLyogSlNEYXRhR3JpZENvbHVtbkxpc3QuaCBpbiBIZWFkZXJzICovLApA
QCAtMTgxNjMsNyArMTgxNzEsMTEgQEAKIAkJCQlCQzgyNDMyOTBEMENFOEEyMDA0NjBDOEYgLyog
SlNTUUxFcnJvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFFODJGRUQwQ0FCMDdFRTAwMjIzN0FF
IC8qIEpTU1FMUmVzdWx0U2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUZFMTE5QTBDQkZGQ0M0
MDAzMDE3RkEgLyogSlNTUUxSZXN1bHRTZXRSb3dMaXN0LmggaW4gSGVhZGVycyAqLywKKwkJCQlC
NTlERDZBNTExOTAyQTYyMDA3RTk2ODQgLyogSlNTUUxTdGF0ZW1lbnRDYWxsYmFjay5oIGluIEhl
YWRlcnMgKi8sCisJCQkJQjU5REQ2QTkxMTkwMkE3MTAwN0U5Njg0IC8qIEpTU1FMU3RhdGVtZW50
RXJyb3JDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM4MjQzMkEwRDBDRThBMjAwNDYw
QzhGIC8qIEpTU1FMVHJhbnNhY3Rpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCUI1OURENjlEMTE5
MDJBNDIwMDdFOTY4NCAvKiBKU1NRTFRyYW5zYWN0aW9uQ2FsbGJhY2suaCBpbiBIZWFkZXJzICov
LAorCQkJCUI1OURENkExMTE5MDJBNTIwMDdFOTY4NCAvKiBKU1NRTFRyYW5zYWN0aW9uRXJyb3JD
YWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFFMEJBRUIwREE1NUQ0QTAwQTlFNDE3IC8q
IEpTU3RvcmFnZUV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY1MDI2QTEwMkJBOTQzMDA2
NkYzOUEgLyogSlNTdHlsZU1lZGlhLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0UwMTM5QjBDMEJF
RjE4MDA0Mzg2MEEgLyogSlNTdHlsZVNoZWV0LmggaW4gSGVhZGVycyAqLywKQEAgLTE5MjExLDEx
ICsxOTIyMyw2IEBACiAJCQkJRTFCRTUxMkUwQ0Y2QzUxMjAwMkVBOTU5IC8qIFhTTFRVbmljb2Rl
U29ydC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTdERDREODcwRkRGNEQ2RTAwRUNGOUE0IC8qIFhT
U0F1ZGl0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUNFMTcyRTAxMTEzNkU4Q0UwMDYyQTUzMyAv
KiBab29tTW9kZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQjU5REQ2OTkxMTkwMjlFNTAwN0U5Njg0
IC8qIEpTRGF0YWJhc2VDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQjU5REQ2OUQxMTkw
MkE0MjAwN0U5Njg0IC8qIEpTU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJQjU5REQ2QTExMTkwMkE1MjAwN0U5Njg0IC8qIEpTU1FMVHJhbnNhY3Rpb25FcnJvckNh
bGxiYWNrLmggaW4gSGVhZGVycyAqLywKLQkJCQlCNTlERDZBNTExOTAyQTYyMDA3RTk2ODQgLyog
SlNTUUxTdGF0ZW1lbnRDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQjU5REQ2QTkxMTkw
MkE3MTAwN0U5Njg0IC8qIEpTU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQjU1RDVBQTQxMTkxMzFGQzAwQkNDMzE1IC8qIEpTU1FMVHJhbnNhY3Rpb25TeW5j
Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUI1OENFQjY5MTE5MTM2MDcwMDJBNjc5MCAv
KiBKU0RhdGFiYXNlU3luYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjU4Q0VCNkQxMTkxMzYxQzAw
MkE2NzkwIC8qIEpTU1FMVHJhbnNhY3Rpb25TeW5jLmggaW4gSGVhZGVycyAqLywKQEAgLTE5NTYy
LDYgKzE5NTY5LDcgQEAKIAkJCQlCQzVFQjkxRjBFODIwNDA4MDBCMjU5NjUgLyogQmluZGluZ1VS
SS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODk5NDMyOTBCNDIzMzg4MDBEN0M4MDIgLyogQml0
bWFwSW1hZ2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkVBRkFGMEUxMEUyQUYyRDAwN0VEM0Q2
IC8qIEJsb2IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJODkxODE0MzAxMTg3QzRCNDAwQkY2OThB
IC8qIEJsb2JJdGVtLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzRjE5QUUxMDgyNDVFNTkwMDFF
OUFCQyAvKiBCbG9ja0V4Y2VwdGlvbnMubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQ0VBNDg1NDA5
N0Q5MzAyMDA5NEM5RTQgLyogYnJlYWtfbGluZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMz
MDlEREEwOTlFNjQ5MjAwNTZFNTgxIC8qIEJyZWFrQmxvY2txdW90ZUNvbW1hbmQuY3BwIGluIFNv
dXJjZXMgKi8sCkBAIC0yMDMxMCw4ICsyMDMxOCw5IEBACiAJCQkJNTFFQzkyNjUwQ0U5MERENDAw
RjkwMzA4IC8qIEpTQ3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxQTM0MTdDQTBDRUNGRjI1MDA0OUNCREUgLyogSlNDdXN0b21Wb2lkQ2FsbGJh
Y2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTEwQjkzQzMwQjczQzI5MTAwM0VEODkwIC8qIEpT
Q3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTFBRTgyRjhGMENB
QUZBOUQwMDIyMzdBRSAvKiBKU0RhdGFiYXNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUI1OURE
NjlBMTE5MDI5RTUwMDdFOTY4NCAvKiBKU0RhdGFiYXNlQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQkNDRTU4QUMxMDYxRThDRjAwOEZCMzVBIC8qIEpTRGF0YWJhc2VDdXN0b20uY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMUFFODJGOEYwQ0FBRkE5RDAwMjIzN0FFIC8qIEpTRGF0YWJh
c2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM3N0QxNjkwRkYxOUY1NjAwNzA4ODdCIC8qIEpT
RGF0YUdyaWRDb2x1bW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM3N0QxNkIwRkYxOUY1NjAw
NzA4ODdCIC8qIEpTRGF0YUdyaWRDb2x1bW5MaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJD
NzdEMTUyMEZGMTlDNzMwMDcwODg3QiAvKiBKU0RhdGFHcmlkQ29sdW1uTGlzdEN1c3RvbS5jcHAg
aW4gU291cmNlcyAqLywKQEAgLTIwNTIxLDggKzIwNTMwLDEyIEBACiAJCQkJMUFFODJGRUMwQ0FC
MDdFRTAwMjIzN0FFIC8qIEpTU1FMUmVzdWx0U2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFB
RkUxMTk5MENCRkZDQzQwMDMwMTdGQSAvKiBKU1NRTFJlc3VsdFNldFJvd0xpc3QuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNTFEQ0U4MDIwQ0FDOUYxQzAwNDg4MzU4IC8qIEpTU1FMUmVzdWx0U2V0
Um93TGlzdEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCNTlERDZBNjExOTAyQTYyMDA3
RTk2ODQgLyogSlNTUUxTdGF0ZW1lbnRDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlC
NTlERDZBQTExOTAyQTcxMDA3RTk2ODQgLyogSlNTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTUxNEM3NjM4MENFOTIyNUUwMDdFRjNDRCAvKiBKU1NRTFRy
YW5zYWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUI1OURENjlFMTE5MDJBNDIwMDdFOTY4
NCAvKiBKU1NRTFRyYW5zYWN0aW9uQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFE
MjMxNkUwQ0QyNjlFNzAwQzFGMTk0IC8qIEpTU1FMVHJhbnNhY3Rpb25DdXN0b20uY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJQjU5REQ2QTIxMTkwMkE1MjAwN0U5Njg0IC8qIEpTU1FMVHJhbnNhY3Rp
b25FcnJvckNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxRTNGOUQ2MERBMDVFMUQw
MDI1MDkxMSAvKiBKU1N0b3JhZ2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFEMEM1MTYwREFB
OTBCNzAwM0IzODMxIC8qIEpTU3RvcmFnZUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1
MUUwQkFFQTBEQTU1RDRBMDBBOUU0MTcgLyogSlNTdG9yYWdlRXZlbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCkBAIC0yMTQ5MywxMSArMjE1MDYsNiBAQAogCQkJCTkzRjE5QjA1MDgyNDVFNTkwMDFFOUFC
QyAvKiBYU0xUUHJvY2Vzc29yTGlieHNsdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMUJFNTEy
RDBDRjZDNTEyMDAyRUE5NTkgLyogWFNMVFVuaWNvZGVTb3J0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTk3REQ0RDg2MEZERjRENkUwMEVDRjlBNCAvKiBYU1NBdWRpdG9yLmNwcCBpbiBTb3VyY2Vz
ICovLAotCQkJCUI1OURENjlBMTE5MDI5RTUwMDdFOTY4NCAvKiBKU0RhdGFiYXNlQ2FsbGJhY2su
Y3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQjU5REQ2OUUxMTkwMkE0MjAwN0U5Njg0IC8qIEpTU1FM
VHJhbnNhY3Rpb25DYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlCNTlERDZBMjExOTAy
QTUyMDA3RTk2ODQgLyogSlNTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJQjU5REQ2QTYxMTkwMkE2MjAwN0U5Njg0IC8qIEpTU1FMU3RhdGVtZW50Q2Fs
bGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQjU5REQ2QUExMTkwMkE3MTAwN0U5Njg0IC8q
IEpTU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCNTVE
NUFBNTExOTEzMUZDMDBCQ0MzMTUgLyogSlNTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCNTVENUFBODExOTEzMjUwMDBCQ0MzMTUgLyogSlNEYXRhYmFz
ZVN5bmNDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjU1RDVBQTkxMTkxMzI1MDAwQkND
MzE1IC8qIEpTU1FMVHJhbnNhY3Rpb25TeW5jQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwIGIv
V2ViQ29yZS9iaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCmluZGV4IDUwYWM4
NmJhY2U0MWVjNWMxYjExMjVkZDQ0YzZiNmYxMWU2MTg2YTguLjkwOWU4ZWQxNjBlYmQ1NDBiNGRi
OTBhYTdlMDVjNmFmYjAzMWYzZGQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2Vy
aWFsaXplZFNjcmlwdFZhbHVlLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6
ZWRTY3JpcHRWYWx1ZS5jcHAKQEAgLTU1OCw2ICs1NTgsOSBAQCBwcml2YXRlOgogICAgICAgICBC
bG9iKiBibG9iID0gVjhCbG9iOjp0b05hdGl2ZSh2YWx1ZS5Bczx2ODo6T2JqZWN0PigpKTsKICAg
ICAgICAgaWYgKCFibG9iKQogICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAvLyBGSVhNRTog
TmVlZCBhIGZpeCAob3IgYWRkaXRpb25hbCBjb2RlIHRvIGR1bXAgdGhlIGNvbnRlbnRzIHRvIGEg
ZmlsZSkKKyAgICAgICAgLy8gZm9yIG5vbi1maWxlIGJsb2JzLgorICAgICAgICAvLyBGSVhNRTog
TmVlZCB0byBzZXJpYWxpemUgdGhlIHR5cGUgaW5mb3JtYXRpb24gYXMgd2VsbD8KICAgICAgICAg
bV93cml0ZXIud3JpdGVCbG9iKGJsb2ItPnBhdGgoKSk7CiAgICAgfQogCkBAIC04NTMsNyArODU2
LDggQEAgcHJpdmF0ZToKICAgICAgICAgU3RyaW5nIHBhdGg7CiAgICAgICAgIGlmICghcmVhZFdl
YkNvcmVTdHJpbmcoJnBhdGgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBQ
YXNzUmVmUHRyPEJsb2I+IGJsb2IgPSBCbG9iOjpjcmVhdGUocGF0aCk7CisgICAgICAgIC8vIEZJ
WE1FOiBzZWUgdGhlIEZJWE1FIGNvbW1lbnQgaW4gd3JpdGVCbG9iLgorICAgICAgICBQYXNzUmVm
UHRyPEZpbGU+IGJsb2IgPSBCbG9iOjpjcmVhdGVGcm9tRmlsZShwYXRoKTsKICAgICAgICAgKnZh
bHVlID0gdG9WOChibG9iKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9odG1sL0Jsb2IuY3BwIGIvV2ViQ29yZS9odG1sL0Jsb2IuY3BwCmluZGV4IDgz
YmJkYzBjNTI2NDg0NTQyNjg4MTkyNjIxNjg0YjYyODIwMjRiZjQuLjU4ZDIxZGE0Zjc5MmY4MGY0
ZTRmNDQ0MWUxNDExZTllMTcxZDFjMWYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9CbG9iLmNw
cAorKysgYi9XZWJDb3JlL2h0bWwvQmxvYi5jcHAKQEAgLTI5LDkwICsyOSw2OCBAQAogICovCiAK
ICNpbmNsdWRlICJjb25maWcuaCIKKwogI2luY2x1ZGUgIkJsb2IuaCIKIAorI2luY2x1ZGUgIkJs
b2JJdGVtLmgiCiAjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLSNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLWNvbnN0IGludCBCbG9iOjp0b0VuZE9mRmlsZSA9
IC0xOwotY29uc3QgZG91YmxlIEJsb2I6OmRvTm90Q2hlY2tGaWxlQ2hhbmdlID0gMDsKLSNlbmRp
ZgorQmxvYjo6QmxvYihjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyB0eXBlKQorICAg
IDogbV90eXBlKHR5cGUpCit7CisgICAgYXBwZW5kKEJsb2JJdGVtOjpjcmVhdGVGaWxlQmxvYkl0
ZW0ocGF0aCkpOworfQogCi1CbG9iOjpCbG9iKGNvbnN0IFN0cmluZyYgcGF0aCkKLSAgICA6IG1f
cGF0aChwYXRoKQotI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgICwgbV9zdGFydCgwKQotICAg
ICwgbV9sZW5ndGgodG9FbmRPZkZpbGUpCi0gICAgLCBtX3NuYXBzaG90Q2FwdHVyZWQoZmFsc2Up
Ci0gICAgLCBtX3NuYXBzaG90U2l6ZSgwKQotICAgICwgbV9zbmFwc2hvdE1vZGlmaWNhdGlvblRp
bWUoZG9Ob3RDaGVja0ZpbGVDaGFuZ2UpCi0jZW5kaWYKK3Vuc2lnbmVkIGxvbmcgbG9uZyBCbG9i
OjpzaXplKCkgY29uc3QKIHsKKyAgICAvLyBGSVhNRTogSmF2YVNjcmlwdCBjYW5ub3QgcmVwcmVz
ZW50IHNpemVzIGFzIGxhcmdlIGFzIHVuc2lnbmVkIGxvbmcgbG9uZywgd2UgbmVlZCB0bworICAg
IC8vIGNvbWUgdXAgd2l0aCBhbiBleGNlcHRpb24gdG8gdGhyb3cgaWYgZmlsZSBzaXplIGlzIG5v
dCByZXByZXNldGFibGUuCisgICAgdW5zaWduZWQgbG9uZyBsb25nIHNpemUgPSAwOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9pdGVtTGlzdC5zaXplKCk7ICsraSkKKyAgICAgICAgc2l6
ZSArPSBtX2l0ZW1MaXN0W2ldLT5zaXplKCk7CisgICAgcmV0dXJuIHNpemU7CiB9CiAKLSNpZiBF
TkFCTEUoQkxPQl9TTElDRSkKLUJsb2I6OkJsb2IoY29uc3QgU3RyaW5nJiBwYXRoLCBsb25nIGxv
bmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgsIGxvbmcgbG9uZyBzbmFwc2hvdFNpemUsIGRvdWJs
ZSBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUpCi0gICAgOiBtX3BhdGgocGF0aCkKLSAgICAsIG1f
c3RhcnQoc3RhcnQpCi0gICAgLCBtX2xlbmd0aChsZW5ndGgpCi0gICAgLCBtX3NuYXBzaG90Q2Fw
dHVyZWQodHJ1ZSkKLSAgICAsIG1fc25hcHNob3RTaXplKHNuYXBzaG90U2l6ZSkKLSAgICAsIG1f
c25hcHNob3RNb2RpZmljYXRpb25UaW1lKHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSkKK2NvbnN0
IFN0cmluZyYgQmxvYjo6cGF0aCgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKHN0YXJ0ID49IDAgJiYg
bGVuZ3RoID49IDAgJiYgc3RhcnQgKyBsZW5ndGggPD0gc25hcHNob3RTaXplICYmIHNuYXBzaG90
TW9kaWZpY2F0aW9uVGltZSk7CisgICAgQVNTRVJUKG1faXRlbUxpc3Quc2l6ZSgpID09IDEgJiYg
bV9pdGVtTGlzdFswXS0+dG9GaWxlQmxvYkl0ZW0oKSk7CisgICAgcmV0dXJuIG1faXRlbUxpc3Rb
MF0tPnRvRmlsZUJsb2JJdGVtKCktPnBhdGgoKTsKIH0KLSNlbmRpZgogCi11bnNpZ25lZCBsb25n
IGxvbmcgQmxvYjo6c2l6ZSgpIGNvbnN0Cit2b2lkIEJsb2I6OmFwcGVuZChQYXNzUmVmUHRyPEJs
b2JJdGVtPiBpdGVtKQogewotICAgIC8vIEZJWE1FOiBKYXZhU2NyaXB0IGNhbm5vdCByZXByZXNl
bnQgc2l6ZXMgYXMgbGFyZ2UgYXMgdW5zaWduZWQgbG9uZyBsb25nLCB3ZSBuZWVkIHRvCi0gICAg
Ly8gY29tZSB1cCB3aXRoIGFuIGV4Y2VwdGlvbiB0byB0aHJvdyBpZiBmaWxlIHNpemUgaXMgbm90
IHJlcHJlc2V0YWJsZS4KLSNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAgICBpZiAobV9zbmFwc2hv
dENhcHR1cmVkKQotICAgICAgICByZXR1cm4gbV9sZW5ndGg7Ci0jZW5kaWYKLSAgICBsb25nIGxv
bmcgc2l6ZTsKLSAgICBpZiAoIWdldEZpbGVTaXplKG1fcGF0aCwgc2l6ZSkpCi0gICAgICAgIHJl
dHVybiAwOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KHNpemUp
OworICAgIG1faXRlbUxpc3QuYXBwZW5kKGl0ZW0pOwogfQogCiAjaWYgRU5BQkxFKEJMT0JfU0xJ
Q0UpCiBQYXNzUmVmUHRyPEJsb2I+IEJsb2I6OnNsaWNlKGxvbmcgbG9uZyBzdGFydCwgbG9uZyBs
b25nIGxlbmd0aCkgY29uc3QKIHsKLSAgICAvLyBXaGVuIHdlIHNsaWNlIGEgZmlsZSBmb3IgdGhl
IGZpcnN0IHRpbWUsIHdlIG9idGFpbiBhIHNuYXBzaG90IG9mIHRoZSBmaWxlIGJ5IGNhcHR1cmlu
ZyBpdHMgY3VycmVudCBzaXplIGFuZCBtb2RpZmljYXRpb24gdGltZS4KLSAgICAvLyBUaGUgbW9k
aWZpY2F0aW9uIHRpbWUgd2lsbCBiZSB1c2VkIHRvIHZlcmlmeSBpZiB0aGUgZmlsZSBoYXMgYmVl
biBjaGFuZ2VkIG9yIG5vdCwgd2hlbiB0aGUgdW5kZXJseWluZyBkYXRhIGFyZSBhY2Nlc3NlZC4K
LSAgICBsb25nIGxvbmcgc25hcHNob3RTaXplOwotICAgIGRvdWJsZSBzbmFwc2hvdE1vZGlmaWNh
dGlvblRpbWU7Ci0gICAgaWYgKG1fc25hcHNob3RDYXB0dXJlZCkgewotICAgICAgICBzbmFwc2hv
dFNpemUgPSBtX3NuYXBzaG90U2l6ZTsKLSAgICAgICAgc25hcHNob3RNb2RpZmljYXRpb25UaW1l
ID0gbV9zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8g
SWYgd2UgZmFpbCB0byByZXRyaWV2ZSB0aGUgc2l6ZSBvciBtb2RpZmljYXRpb24gdGltZSwgcHJv
YmFibHkgZHVlIHRvIHRoYXQgdGhlIGZpbGUgaGFzIGJlZW4gZGVsZXRlZCwgYW4gZW1wdHkgYmxv
YiB3aWxsIGJlIHJldHVybmVkLgotICAgICAgICB0aW1lX3QgbW9kaWZpY2F0aW9uVGltZTsKLSAg
ICAgICAgaWYgKCFnZXRGaWxlU2l6ZShtX3BhdGgsIHNuYXBzaG90U2l6ZSkgfHwgIWdldEZpbGVN
b2RpZmljYXRpb25UaW1lKG1fcGF0aCwgbW9kaWZpY2F0aW9uVGltZSkpIHsKLSAgICAgICAgICAg
IHNuYXBzaG90U2l6ZSA9IDA7Ci0gICAgICAgICAgICBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUg
PSAwOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHNuYXBzaG90TW9kaWZpY2F0aW9uVGlt
ZSA9IG1vZGlmaWNhdGlvblRpbWU7Ci0gICAgfQotCi0gICAgLy8gQ2xhbXAgdGhlIHJhbmdlIGlm
IGl0IGV4Y2VlZHMgdGhlIHNpemUgbGltaXQuCiAgICAgaWYgKHN0YXJ0IDwgMCkKICAgICAgICAg
c3RhcnQgPSAwOwogICAgIGlmIChsZW5ndGggPCAwKQogICAgICAgICBsZW5ndGggPSAwOwogCi0g
ICAgaWYgKHN0YXJ0ID4gc25hcHNob3RTaXplKSB7CisgICAgLy8gQ2xhbXAgdGhlIHJhbmdlIGlm
IGl0IGV4Y2VlZHMgdGhlIHNpemUgbGltaXQuCisgICAgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFs
U2l6ZSA9IHNpemUoKTsKKyAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihz
dGFydCkgPiB0b3RhbFNpemUpIHsKICAgICAgICAgc3RhcnQgPSAwOwogICAgICAgICBsZW5ndGgg
PSAwOwotICAgIH0gZWxzZSBpZiAoc3RhcnQgKyBsZW5ndGggPiBzbmFwc2hvdFNpemUpCi0gICAg
ICAgIGxlbmd0aCA9IHNuYXBzaG90U2l6ZSAtIHN0YXJ0OworICAgIH0gZWxzZSBpZiAoc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihzdGFydCArIGxlbmd0aCkgPiB0b3RhbFNpemUpCisg
ICAgICAgIGxlbmd0aCA9IHRvdGFsU2l6ZSAtIHN0YXJ0OwogCi0gICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBCbG9iKG1fcGF0aCwgbV9zdGFydCArIHN0YXJ0LCBsZW5ndGgsIHNuYXBzaG90U2l6ZSwg
c25hcHNob3RNb2RpZmljYXRpb25UaW1lKSk7CisgICAgc2l6ZV90IGkgPSAwOworICAgIFJlZlB0
cjxCbG9iPiBibG9iID0gQmxvYjo6Y3JlYXRlKCk7CisgICAgZm9yICg7IGkgPCBtX2l0ZW1MaXN0
LnNpemUoKSAmJiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KHN0YXJ0KSA+PSBtX2l0
ZW1MaXN0W2ldLT5zaXplKCk7ICsraSkKKyAgICAgICAgc3RhcnQgLT0gbV9pdGVtTGlzdFtpXS0+
c2l6ZSgpOworICAgIGZvciAoOyBsZW5ndGggPiAwICYmIGkgPCBtX2l0ZW1MaXN0LnNpemUoKTsg
KytpKSB7CisgICAgICAgIGJsb2ItPm1faXRlbUxpc3QuYXBwZW5kKEJsb2JJdGVtOjpjcmVhdGVS
YW5nZUJsb2JJdGVtKG1faXRlbUxpc3RbaV0sIHN0YXJ0LCBsZW5ndGgpKTsKKyAgICAgICAgbGVu
Z3RoIC09IGJsb2ItPm1faXRlbUxpc3QubGFzdCgpLT5zaXplKCk7CisgICAgICAgIHN0YXJ0ID0g
MDsKKyAgICB9CisgICAgcmV0dXJuIGJsb2IucmVsZWFzZSgpOwogfQotI2VuZGlmCisjZW5kaWYg
Ly8gRU5BQkxFKEJMT0JfU0xJQ0UpCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaHRtbC9CbG9iLmggYi9XZWJDb3JlL2h0bWwvQmxvYi5oCmluZGV4IGU4YjVm
M2ZkZjA2OWEyYjQ4NzZlZDE2YWI4MWIyMmYwZmYwMzg5NzAuLjg5NzAwODg1NGMzZDU2Njk3YmI3
OGZkYmUxY2JmNWIzZDk4Y2QxMDcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9CbG9iLmgKKysr
IGIvV2ViQ29yZS9odG1sL0Jsb2IuaApAQCAtMzEsNjkgKzMxLDQ4IEBACiAjaWZuZGVmIEJsb2Jf
aAogI2RlZmluZSBCbG9iX2gKIAotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRl
ICJCbG9iSXRlbS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSA8dGlt
ZS5oPgorI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQmxvYiA6IHB1YmxpYyBSZWZDb3VudGVk
PEJsb2I+IHsKIHB1YmxpYzoKLSNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAgICBzdGF0aWMgY29u
c3QgaW50IHRvRW5kT2ZGaWxlOwotICAgIHN0YXRpYyBjb25zdCBkb3VibGUgZG9Ob3RDaGVja0Zp
bGVDaGFuZ2U7Ci0jZW5kaWYKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCbG9iPiBjcmVhdGUoY29u
c3QgU3RyaW5nIHR5cGUgPSBTdHJpbmcoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgQmxvYih0eXBlKSk7CisgICAgfQogCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8QmxvYj4g
Y3JlYXRlKGNvbnN0IFN0cmluZyYgcGF0aCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCbG9iPiBj
cmVhdGVGcm9tRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyB0eXBlID0gU3Ry
aW5nKCkpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJsb2IocGF0aCkpOwor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJsb2IocGF0aCwgdHlwZSkpOwogICAgIH0KIAog
ICAgIHZpcnR1YWwgfkJsb2IoKSB7IH0KIAorICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplKCkg
Y29uc3Q7CisgICAgY29uc3QgU3RyaW5nJiBwYXRoKCkgY29uc3Q7CisgICAgY29uc3QgU3RyaW5n
JiB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CiAgICAgdmlydHVhbCBib29sIGlzRmls
ZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKLSNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAg
ICBQYXNzUmVmUHRyPEJsb2I+IHNsaWNlKGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0
aCkgY29uc3Q7Ci0jZW5kaWYKKyAgICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8QmxvYkl0ZW0+ID4g
SXRlbUxpc3Q7CisgICAgdm9pZCBhcHBlbmQoUGFzc1JlZlB0cjxCbG9iSXRlbT4gaXRlbSk7Cisg
ICAgY29uc3QgSXRlbUxpc3QmIGl0ZW1zKCkgY29uc3QgeyByZXR1cm4gbV9pdGVtTGlzdDsgfQog
Ci0gICAgY29uc3QgU3RyaW5nJiBwYXRoKCkgY29uc3QgeyByZXR1cm4gbV9wYXRoOyB9Ci0gICAg
dW5zaWduZWQgbG9uZyBsb25nIHNpemUoKSBjb25zdDsKICNpZiBFTkFCTEUoQkxPQl9TTElDRSkK
LSAgICBsb25nIGxvbmcgc3RhcnQoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0OyB9Ci0gICAgbG9u
ZyBsb25nIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9Ci0gICAgZG91YmxlIG1v
ZGlmaWNhdGlvblRpbWUoKSBjb25zdCB7IHJldHVybiBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGlt
ZTsgfQorICAgIFBhc3NSZWZQdHI8QmxvYj4gc2xpY2UobG9uZyBsb25nIHN0YXJ0LCBsb25nIGxv
bmcgbGVuZ3RoKSBjb25zdDsKICNlbmRpZgogCiBwcm90ZWN0ZWQ6Ci0gICAgQmxvYihjb25zdCBT
dHJpbmcmIHBhdGgpOworICAgIEJsb2IoY29uc3QgU3RyaW5nIHR5cGUpIDogbV90eXBlKHR5cGUp
IHsgfQorICAgIEJsb2IoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcgdHlwZSk7CiAK
LXByaXZhdGU6Ci0jaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgQmxvYihjb25zdCBTdHJpbmcm
IHBhdGgsIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCwgbG9uZyBsb25nIHNuYXBz
aG90U2l6ZSwgZG91YmxlIHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSk7Ci0jZW5kaWYKLQotICAg
IC8vIFRoZSB1bmRlcmx5aW5nIHBhdGggb2YgdGhlIGZpbGUtYmFzZWQgYmxvYi4gCi0gICAgU3Ry
aW5nIG1fcGF0aDsKLQotI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgIC8vIFRoZSBzdGFydGlu
ZyBwb3NpdGlvbiBvZiB0aGUgZmlsZS1iYXNlZCBibG9iLgotICAgIGxvbmcgbG9uZyBtX3N0YXJ0
OwotCi0gICAgLy8gVGhlIGxlbmd0aCBvZiB0aGUgZmlsZS1iYXNlZCBibG9iLiBUaGUgdmFsdWUg
b2YgLTEgbWVhbnMgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZS4KLSAgICBsb25nIGxvbmcgbV9sZW5n
dGg7Ci0KLSAgICAvLyBBIGZsYWcgdG8gdGVsbCBpZiBhIHNuYXBzaG90IGhhcyBiZWVuIGNhcHR1
cmVkLgotICAgIGJvb2wgbV9zbmFwc2hvdENhcHR1cmVkOwotCi0gICAgLy8gVGhlIHNpemUgb2Yg
dGhlIGZpbGUgd2hlbiBhIHNuYXBzaG90IGlzIGNhcHR1cmVkLiBJdCBjYW4gYmUgMCBpZiB0aGUg
ZmlsZSBpcyBlbXB0eS4KLSAgICBsb25nIGxvbmcgbV9zbmFwc2hvdFNpemU7Ci0KLSAgICAvLyBU
aGUgbGFzdCBtb2RpZmljYXRpb24gdGltZSBvZiB0aGUgZmlsZSB3aGVuIGEgc25hcHNob3QgaXMg
Y2FwdHVyZWQuIFRoZSB2YWx1ZSBvZiAwIGFsc28gbWVhbnMgdGhhdCB0aGUgc25hcHNob3QgaXMg
bm90IGNhcHR1cmVkLgotICAgIGRvdWJsZSBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZTsKLSNl
bmRpZgorICAgIFZlY3RvcjxSZWZQdHI8QmxvYkl0ZW0+ID4gbV9pdGVtTGlzdDsKKyAgICBjb25z
dCBTdHJpbmcgbV90eXBlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9odG1sL0Jsb2JJdGVtLmNwcCBiL1dlYkNvcmUvaHRtbC9CbG9iSXRlbS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNjQzYTY2OTZlYzRhMzE0ZDdhNzliYTRhZWM5ZjE1NzVlYjk3ODI3ZQotLS0g
L2Rldi9udWxsCisrKyBiL1dlYkNvcmUvaHRtbC9CbG9iSXRlbS5jcHAKQEAgLTAsMCArMSwzMTEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJCbG9iSXRlbS5oIgorCisjaW5jbHVk
ZSAiRmlsZVN5c3RlbS5oIgorI2luY2x1ZGUgIlVVSUQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjaGFyKiBCbG9iSXRlbTo6cmVsZWFzZUJ1ZmZlcigpIGNvbnN0Cit7CisgICAgVmVjdG9y
PGNoYXI+IHY7CisgICAgdi5hcHBlbmQoZGF0YSgpLCBzdGF0aWNfY2FzdDxzaXplX3Q+KHNpemUo
KSkpOworICAgIHJldHVybiB2LnJlbGVhc2VCdWZmZXIoKTsKK30KKworUGFzc1JlZlB0cjxCbG9i
SXRlbT4gQmxvYkl0ZW06OmNyZWF0ZUZpbGVCbG9iSXRlbShjb25zdCBTdHJpbmcmIHBhdGgpCit7
CisgICAgcmV0dXJuIGFkb3B0UmVmKHN0YXRpY19jYXN0PEJsb2JJdGVtKj4obmV3IEZpbGVCbG9i
SXRlbShwYXRoKSkpOworfQorCitQYXNzUmVmUHRyPEJsb2JJdGVtPiBCbG9iSXRlbTo6Y3JlYXRl
U3RyaW5nQmxvYkl0ZW0oY29uc3QgU3RyaW5nJiB0ZXh0LCBFbmRpbmdUeXBlIGVuZGluZywgVGV4
dEVuY29kaW5nIGVuY29kaW5nKQoreworICAgIHJldHVybiBhZG9wdFJlZihzdGF0aWNfY2FzdDxC
bG9iSXRlbSo+KG5ldyBTdHJpbmdCbG9iSXRlbSh0ZXh0LCBlbmRpbmcsIGVuY29kaW5nKSkpOwor
fQorCitQYXNzUmVmUHRyPEJsb2JJdGVtPiBCbG9iSXRlbTo6Y3JlYXRlU3RyaW5nQmxvYkl0ZW0o
Y29uc3QgQ1N0cmluZyYgdGV4dCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoc3RhdGljX2Nhc3Q8
QmxvYkl0ZW0qPihuZXcgU3RyaW5nQmxvYkl0ZW0odGV4dCkpKTsKK30KKworUGFzc1JlZlB0cjxC
bG9iSXRlbT4gQmxvYkl0ZW06OmNyZWF0ZUJ5dGVzQXJyYXlCbG9iSXRlbShjb25zdCBjaGFyKiBk
YXRhLCBzaXplX3Qgc2l6ZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoc3RhdGljX2Nhc3Q8Qmxv
Ykl0ZW0qPihuZXcgQnl0ZXNBcnJheUJsb2JJdGVtKGRhdGEsIHNpemUpKSk7Cit9CisKKyNpZiBF
TkFCTEUoQkxPQl9TTElDRSkKK3N0YXRpYyBjb25zdCBkb3VibGUgaW52YWxpZE1vZGlmaWNhdGlv
blRpbWUgPSAtMTsKKworZG91YmxlIGdldEZpbGVTbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUoY29u
c3QgU3RyaW5nJiBwYXRoKQoreworICAgIC8vIEZJWE1FOiBzeW5jaHJvbml6ZWQgZmlsZSBjYWxs
CisgICAgdGltZV90IG1vZGlmaWNhdGlvblRpbWU7CisgICAgaWYgKGdldEZpbGVNb2RpZmljYXRp
b25UaW1lKHBhdGgsIG1vZGlmaWNhdGlvblRpbWUpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8ZG91YmxlPihtb2RpZmljYXRpb25UaW1lKTsKKyAgICByZXR1cm4gaW52YWxpZE1vZGlmaWNh
dGlvblRpbWU7Cit9CisKK1Bhc3NSZWZQdHI8QmxvYkl0ZW0+IEJsb2JJdGVtOjpjcmVhdGVSYW5n
ZUJsb2JJdGVtKFBhc3NSZWZQdHI8QmxvYkl0ZW0+IGl0ZW0sIGxvbmcgbG9uZyBzdGFydCwgbG9u
ZyBsb25nIGxlbmd0aCkKK3sKKyAgICBBU1NFUlQoc3RhcnQgPj0gMCAmJiBsZW5ndGggPj0gMCk7
CisgICAgaWYgKCFzdGFydCAmJiBpdGVtLT5zaXplKCkgPD0gc3RhdGljX2Nhc3Q8dW5zaWduZWQg
bG9uZyBsb25nPihsZW5ndGgpKQorICAgICAgICByZXR1cm4gaXRlbTsKKyAgICBjb25zdCBGaWxl
QmxvYkl0ZW0qIGZpbGVJdGVtID0gaXRlbS0+dG9GaWxlQmxvYkl0ZW0oKTsKKyAgICBpZiAoZmls
ZUl0ZW0pIHsKKyAgICAgICAgY29uc3QgRmlsZVJhbmdlQmxvYkl0ZW0qIGZpbGVSYW5nZUl0ZW0g
PSBpdGVtLT50b0ZpbGVSYW5nZUJsb2JJdGVtKCk7CisgICAgICAgIGlmIChmaWxlUmFuZ2VJdGVt
KSB7CisgICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihzdGFy
dCArIGxlbmd0aCkgPiBpdGVtLT5zaXplKCkpCisgICAgICAgICAgICAgICAgbGVuZ3RoID0gaXRl
bS0+c2l6ZSgpIC0gc3RhcnQ7CisgICAgICAgICAgICBzdGFydCArPSBmaWxlUmFuZ2VJdGVtLT5z
dGFydCgpOworICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUZpbGVSYW5nZUJsb2JJdGVtKGZpbGVJ
dGVtLT5wYXRoKCksIHN0YXJ0LCBsZW5ndGgsIGZpbGVSYW5nZUl0ZW0tPnNuYXBzaG90TW9kaWZp
Y2F0aW9uVGltZSgpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gY3JlYXRlRmlsZVJhbmdl
QmxvYkl0ZW0oZmlsZUl0ZW0tPnBhdGgoKSwgc3RhcnQsIGxlbmd0aCwgZ2V0RmlsZVNuYXBzaG90
TW9kaWZpY2F0aW9uVGltZShmaWxlSXRlbS0+cGF0aCgpKSk7CisgICAgfQorICAgIGlmIChzdGF0
aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KHN0YXJ0ICsgbGVuZ3RoKSA+IGl0ZW0tPnNpemUo
KSkKKyAgICAgICAgbGVuZ3RoID0gaXRlbS0+c2l6ZSgpIC0gc3RhcnQ7CisgICAgcmV0dXJuIGFk
b3B0UmVmKHN0YXRpY19jYXN0PEJsb2JJdGVtKj4obmV3IERhdGFSYW5nZUJsb2JJdGVtKGl0ZW0s
IHN0YXJ0LCBsZW5ndGgpKSk7Cit9CisKK1Bhc3NSZWZQdHI8QmxvYkl0ZW0+IEJsb2JJdGVtOjpj
cmVhdGVGaWxlUmFuZ2VCbG9iSXRlbShjb25zdCBTdHJpbmcmIHBhdGgsIGxvbmcgbG9uZyBzdGFy
dCwgbG9uZyBsb25nIGxlbmd0aCwgZG91YmxlIHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSkKK3sK
KyAgICByZXR1cm4gYWRvcHRSZWYoc3RhdGljX2Nhc3Q8QmxvYkl0ZW0qPihuZXcgRmlsZVJhbmdl
QmxvYkl0ZW0ocGF0aCwgc3RhcnQsIGxlbmd0aCwgc25hcHNob3RNb2RpZmljYXRpb25UaW1lKSkp
OworfQorI2VuZGlmIC8vIEVOQUJMRShCTE9CX1NMSUNFKQorCisvLyBGaWxlQmxvYkl0ZW0gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorCitGaWxlQmxvYkl0ZW06OkZpbGVCbG9iSXRlbShjb25zdCBTdHJpbmcmIHBhdGgpCisg
ICAgOiBtX3BhdGgocGF0aCkKKyAgICAsIG1fZmlsZU5hbWUocGF0aEdldEZpbGVOYW1lKG1fcGF0
aCkpCit7Cit9CisKK3Vuc2lnbmVkIGxvbmcgbG9uZyBGaWxlQmxvYkl0ZW06OnNpemUoKSBjb25z
dAoreworICAgIC8vIEZJWE1FOiBzeW5jaHJvbml6ZWQgZmlsZSBjYWxsCisgICAgbG9uZyBsb25n
IHNpemU7CisgICAgaWYgKCFnZXRGaWxlU2l6ZShtX3BhdGgsIHNpemUpKQorICAgICAgICByZXR1
cm4gMDsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihzaXplKTsK
K30KKworUGFzc1JlZlB0cjxCbG9iSXRlbT4gRmlsZUJsb2JJdGVtOjpkZWVwQ29weSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIEJsb2JJdGVtOjpjcmVhdGVGaWxlQmxvYkl0ZW0obV9wYXRoKTsKK30K
KworYm9vbCBGaWxlQmxvYkl0ZW06OmVxdWFscyhjb25zdCBCbG9iSXRlbSogYikgY29uc3QKK3sK
KyAgICBjb25zdCBGaWxlQmxvYkl0ZW0qIGZpbGVJdGVtID0gYi0+dG9GaWxlQmxvYkl0ZW0oKTsK
KyAgICBpZiAoIWZpbGVJdGVtIHx8IG1fcGF0aCAhPSBmaWxlSXRlbS0+bV9wYXRoKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vIFN0cmluZ0Jsb2JJdGVt
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisKK1N0cmluZ0Jsb2JJdGVtOjpTdHJpbmdCbG9iSXRlbShjb25zdCBTdHJpbmcmIHRl
eHQsIEVuZGluZ1R5cGUgZW5kaW5nLCBUZXh0RW5jb2RpbmcgZW5jb2RpbmcpCit7CisgICAgQ1N0
cmluZyBmcm9tID0gZW5jb2RpbmcuZW5jb2RlKHRleHQuY2hhcmFjdGVycygpLCB0ZXh0Lmxlbmd0
aCgpLCBFbnRpdGllc0ZvclVuZW5jb2RhYmxlcyk7CisgICAgbV9kYXRhID0gZnJvbTsKKworICAg
IGlmIChlbmRpbmcgPT0gRW5kaW5nVHJhbnNwYXJlbnQpCisgICAgICAgIHJldHVybjsKKworICAg
IGNvbnN0IGNoYXIqIGVuZGluZ0NoYXJzID0gKGVuZGluZyA9PSBFbmRpbmdDUkxGKSA/ICJcclxu
IiA6ICgoZW5kaW5nID09IEVuZGluZ0NSKSA/ICJcciIgOiAiXG4iKTsKKworICAgIGludCBlbmRp
bmdMZW5ndGggPSAoZW5kaW5nID09IEVuZGluZ0NSTEYpID8gMiA6IDE7CisgICAgaW50IG5lZWRG
aXggPSAwOworCisgICAgLy8gQ2FsY3VsYXRlIHRoZSBmaW5hbCBsZW5ndGguCisgICAgaW50IGNh
bGN1bGF0ZWRMZW5ndGggPSBmcm9tLmxlbmd0aCgpOworICAgIGNvbnN0IGNoYXIqIHAgPSBmcm9t
LmRhdGEoKTsKKyAgICB3aGlsZSAoY2hhciBjID0gKnArKykgeworICAgICAgICBpZiAoYyA9PSAn
XHInKSB7CisgICAgICAgICAgICAvLyBTYWZlIHRvIGxvb2sgYWhlYWQgYmVjYXVzZSBvZiB0cmFp
bGluZyAnXDAnLgorICAgICAgICAgICAgaWYgKCpwID09ICdcbicgJiYgZW5kaW5nICE9IEVuZGlu
Z0NSTEYpIHsKKyAgICAgICAgICAgICAgICBjYWxjdWxhdGVkTGVuZ3RoICs9IChlbmRpbmdMZW5n
dGggLSAyKTsKKyAgICAgICAgICAgICAgICArK25lZWRGaXg7CisgICAgICAgICAgICB9IGVsc2Ug
aWYgKGVuZGluZyAhPSBFbmRpbmdDUikgeworICAgICAgICAgICAgICAgIGNhbGN1bGF0ZWRMZW5n
dGggKz0gKGVuZGluZ0xlbmd0aCAtIDEpOworICAgICAgICAgICAgICAgICsrbmVlZEZpeDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChjID09ICdcbicgJiYgZW5kaW5nICE9IEVu
ZGluZ0xGKSB7CisgICAgICAgICAgICBjYWxjdWxhdGVkTGVuZ3RoICs9IChlbmRpbmdMZW5ndGgg
LSAxKTsKKyAgICAgICAgICAgICsrbmVlZEZpeDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlm
ICghbmVlZEZpeCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gQ29udmVydCB0aGUgZW5kaW5n
cyBhbmQgY3JlYXRlIGEgZGF0YSBidWZmZXIuCisgICAgcCA9IGZyb20uZGF0YSgpOworICAgIGNo
YXIqIHE7CisgICAgbV9kYXRhID0gQ1N0cmluZzo6bmV3VW5pbml0aWFsaXplZChjYWxjdWxhdGVk
TGVuZ3RoLCBxKTsKKyAgICB3aGlsZSAoY2hhciBjID0gKnArKykgeworICAgICAgICBpZiAoYyA9
PSAnXHInKSB7CisgICAgICAgICAgICBpZiAoKnAgPT0gJ1xuJyAmJiBlbmRpbmcgIT0gRW5kaW5n
Q1JMRikgeworICAgICAgICAgICAgICAgIG1lbWNweShxLCBlbmRpbmdDaGFycywgZW5kaW5nTGVu
Z3RoKTsKKyAgICAgICAgICAgICAgICBxICs9IGVuZGluZ0xlbmd0aDsKKyAgICAgICAgICAgIH0g
ZWxzZSBpZiAoKnAgIT0gJ1xuJyAmJiBlbmRpbmcgIT0gRW5kaW5nQ1IpIHsKKyAgICAgICAgICAg
ICAgICBtZW1jcHkocSwgZW5kaW5nQ2hhcnMsIGVuZGluZ0xlbmd0aCk7CisgICAgICAgICAgICAg
ICAgcSArPSBlbmRpbmdMZW5ndGg7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAo
YyA9PSAnXG4nICYmIGVuZGluZyAhPSBFbmRpbmdMRikgeworICAgICAgICAgICAgbWVtY3B5KHEs
IGVuZGluZ0NoYXJzLCBlbmRpbmdMZW5ndGgpOworICAgICAgICAgICAgcSArPSBlbmRpbmdMZW5n
dGg7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBMZWF2ZSBvdGhlciBjaGFyYWN0
ZXJzIGFsb25lLgorICAgICAgICAgICAgKnErKyA9IGM7CisgICAgICAgIH0KKyAgICB9Cit9CisK
K1N0cmluZ0Jsb2JJdGVtOjpTdHJpbmdCbG9iSXRlbShjb25zdCBDU3RyaW5nJiB0ZXh0KQorICAg
IDogbV9kYXRhKHRleHQpCit7Cit9CisKK1Bhc3NSZWZQdHI8QmxvYkl0ZW0+IFN0cmluZ0Jsb2JJ
dGVtOjpkZWVwQ29weSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEJsb2JJdGVtOjpjcmVhdGVTdHJp
bmdCbG9iSXRlbShDU3RyaW5nKG1fZGF0YS5kYXRhKCksIG1fZGF0YS5sZW5ndGgoKSkpOworfQor
Citib29sIFN0cmluZ0Jsb2JJdGVtOjplcXVhbHMoY29uc3QgQmxvYkl0ZW0qIGIpIGNvbnN0Cit7
CisgICAgY29uc3QgU3RyaW5nQmxvYkl0ZW0qIHN0cmluZ0l0ZW0gPSBiLT50b1N0cmluZ0Jsb2JJ
dGVtKCk7CisgICAgaWYgKCFzdHJpbmdJdGVtKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
cmV0dXJuIChzdHJpbmdJdGVtICYmIGRhdGEoKSA9PSBiLT5kYXRhKCkgJiYgc2l6ZSgpID09IGIt
PnNpemUoKSk7Cit9CisKKy8vIEJ5dGVzQXJyYXlCbG9iSXRlbSAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0J5dGVzQXJyYXlCbG9i
SXRlbTo6Qnl0ZXNBcnJheUJsb2JJdGVtKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBzaXplKQor
eworICAgIG1fYnl0ZXNBcnJheS5hcHBlbmQoZGF0YSwgc2l6ZSk7Cit9CisKK1Bhc3NSZWZQdHI8
QmxvYkl0ZW0+IEJ5dGVzQXJyYXlCbG9iSXRlbTo6ZGVlcENvcHkoKSBjb25zdAoreworICAgIHJl
dHVybiBCbG9iSXRlbTo6Y3JlYXRlQnl0ZXNBcnJheUJsb2JJdGVtKG1fYnl0ZXNBcnJheS5kYXRh
KCksIG1fYnl0ZXNBcnJheS5zaXplKCkpOworfQorCitib29sIEJ5dGVzQXJyYXlCbG9iSXRlbTo6
ZXF1YWxzKGNvbnN0IEJsb2JJdGVtKiBiKSBjb25zdAoreworICAgIHJldHVybiAoZGF0YSgpID09
IGItPmRhdGEoKSAmJiBzaXplKCkgPT0gYi0+c2l6ZSgpKTsKK30KKworI2lmIEVOQUJMRShCTE9C
X1NMSUNFKQorCisvLyBEYXRhUmFuZ2VCbG9iSXRlbSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEYXRhUmFuZ2VCbG9iSXRlbTo6
RGF0YVJhbmdlQmxvYkl0ZW0oUGFzc1JlZlB0cjxCbG9iSXRlbT4gaXRlbSwgbG9uZyBsb25nIHN0
YXJ0LCBsb25nIGxvbmcgbGVuZ3RoKQorICAgIDogbV9pdGVtKGl0ZW0pCisgICAgLCBtX3N0YXJ0
KHN0YXJ0KQorICAgICwgbV9sZW5ndGgobGVuZ3RoKQoreworICAgIEFTU0VSVCghbV9pdGVtLT50
b0ZpbGVCbG9iSXRlbSgpKTsKKyAgICBpZiAobV9pdGVtLT50b0RhdGFSYW5nZUJsb2JJdGVtKCkp
IHsKKyAgICAgICAgY29uc3QgRGF0YVJhbmdlQmxvYkl0ZW0qIHIgPSBtX2l0ZW0tPnRvRGF0YVJh
bmdlQmxvYkl0ZW0oKTsKKyAgICAgICAgbV9zdGFydCArPSByLT5tX3N0YXJ0OworICAgICAgICBt
X2l0ZW0gPSByLT5tX2l0ZW07CisgICAgICAgIEFTU0VSVCghbV9pdGVtLT50b0RhdGFSYW5nZUJs
b2JJdGVtKCkpOworICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25n
PihtX3N0YXJ0ICsgbV9sZW5ndGgpIDw9IG1faXRlbS0+c2l6ZSgpKTsKKyAgICB9Cit9CisKK2Nv
bnN0IGNoYXIqIERhdGFSYW5nZUJsb2JJdGVtOjpkYXRhKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9pdGVtLT5kYXRhKCkgKyBtX3N0YXJ0OworfQorCitQYXNzUmVmUHRyPEJsb2JJdGVtPiBEYXRh
UmFuZ2VCbG9iSXRlbTo6ZGVlcENvcHkoKSBjb25zdAoreworICAgIHJldHVybiBCbG9iSXRlbTo6
Y3JlYXRlUmFuZ2VCbG9iSXRlbShtX2l0ZW0tPmRlZXBDb3B5KCksIG1fc3RhcnQsIG1fbGVuZ3Ro
KTsKK30KKworYm9vbCBEYXRhUmFuZ2VCbG9iSXRlbTo6ZXF1YWxzKGNvbnN0IEJsb2JJdGVtKiBi
KSBjb25zdAoreworICAgIGNvbnN0IERhdGFSYW5nZUJsb2JJdGVtKiByYW5nZUl0ZW0gPSBiLT50
b0RhdGFSYW5nZUJsb2JJdGVtKCk7CisgICAgaWYgKCFyYW5nZUl0ZW0pCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBpZiAobV9zdGFydCAhPSByYW5nZUl0ZW0tPm1fc3RhcnQpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAoIW1faXRlbS0+ZXF1YWxzKHJhbmdlSXRlbS0+bV9pdGVt
LmdldCgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCisv
LyBGaWxlUmFuZ2VCbG9iSXRlbSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitGaWxlUmFuZ2VCbG9iSXRlbTo6RmlsZVJhbmdlQmxv
Ykl0ZW0oY29uc3QgU3RyaW5nJiBwYXRoLCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5n
dGgsIGRvdWJsZSBtb2RpZmljYXRpb25UaW1lKQorICAgIDogRmlsZUJsb2JJdGVtKHBhdGgpCisg
ICAgLCBtX3N0YXJ0KHN0YXJ0KQorICAgICwgbV9sZW5ndGgobGVuZ3RoKQorICAgICwgbV9zbmFw
c2hvdE1vZGlmaWNhdGlvblRpbWUobW9kaWZpY2F0aW9uVGltZSkKK3sKKyAgICBtX3VuaXF1ZU5h
bWUgPSAiQmxvYiIgKyBjcmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCk7CisgICAgbV91bmlxdWVO
YW1lLnJlcGxhY2UoIi0iLCAiIik7IC8vIEZvciBzYWZ0eSwgcmVtb3ZlICctJyBmcm9tIHRoZSBm
aWxlbmFtZSBzbmNlIHNvbWUgc2VydmVycyBtYXkgbm90IGxpa2UgaXQuCit9CisKK1Bhc3NSZWZQ
dHI8QmxvYkl0ZW0+IEZpbGVSYW5nZUJsb2JJdGVtOjpkZWVwQ29weSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIEJsb2JJdGVtOjpjcmVhdGVGaWxlUmFuZ2VCbG9iSXRlbShwYXRoKCksIG1fc3RhcnQs
IG1fbGVuZ3RoLCBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZSk7Cit9CisKK2Jvb2wgRmlsZVJh
bmdlQmxvYkl0ZW06OmVxdWFscyhjb25zdCBCbG9iSXRlbSogYikgY29uc3QKK3sKKyAgICBpZiAo
IUZpbGVCbG9iSXRlbTo6ZXF1YWxzKGIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY29u
c3QgRmlsZVJhbmdlQmxvYkl0ZW0qIHJhbmdlSXRlbSA9IGItPnRvRmlsZVJhbmdlQmxvYkl0ZW0o
KTsKKyAgICBpZiAoIXJhbmdlSXRlbSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICht
X3N0YXJ0ICE9IHJhbmdlSXRlbS0+bV9zdGFydCB8fCBtX3VuaXF1ZU5hbWUgIT0gcmFuZ2VJdGVt
LT5tX3VuaXF1ZU5hbWUgfHwgbV9zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUgIT0gcmFuZ2VJdGVt
LT5tX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IHJldHVybiB0cnVlOworfQorCitib29sIEZpbGVSYW5nZUJsb2JJdGVtOjppc1ZhbGlkKCkgY29u
c3QKK3sKKyAgICAvLyA8IDAgaW5kaWNhdGVzIGludmFsaWRNb2RpZmljYXRpb25UaW1lIChpLmUu
IGluaXRpYWxpemF0aW9uIGhhcyBiZWVuIGZhaWxlZCkuCisgICAgaWYgKG1fc25hcHNob3RNb2Rp
ZmljYXRpb25UaW1lIDwgMCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBtX3Nu
YXBzaG90TW9kaWZpY2F0aW9uVGltZSA9PSBnZXRGaWxlU25hcHNob3RNb2RpZmljYXRpb25UaW1l
KHBhdGgoKSk7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoQkxPQl9TTElDRSkKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0Jsb2JJdGVtLmggYi9XZWJD
b3JlL2h0bWwvQmxvYkl0ZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lYjhjMDg4MjMzYzMwNWYxMjNiMDYyMDhh
MGE5Yjc5N2E0ZWNjMjgxCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9odG1sL0Jsb2JJdGVt
LmgKQEAgLTAsMCArMSwxODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBCbG9iSXRlbV9oCisjZGVmaW5lIEJsb2JJdGVt
X2gKKworI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiVGV4dEVuY29kaW5n
LmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gU3RyaW5nIGVuZGluZyB0eXBlcy4KK2Vu
dW0gRW5kaW5nVHlwZSB7CisgICAgRW5kaW5nVHJhbnNwYXJlbnQgPSAwLAorICAgIEVuZGluZ0xG
LAorICAgIEVuZGluZ0NSLAorICAgIEVuZGluZ0NSTEYsCit9OworCitjbGFzcyBEYXRhUmFuZ2VC
bG9iSXRlbTsKK2NsYXNzIEZpbGVCbG9iSXRlbTsKK2NsYXNzIEZpbGVSYW5nZUJsb2JJdGVtOwor
Y2xhc3MgU3RyaW5nQmxvYkl0ZW07CisKKy8vIEEgYmFzZSBpbnRlcmZhY2UgZm9yIGFsbCAnYmxv
YicgaXRlbXMgKGZpbGUsIHN0cmluZyBvciBieXRlcyBhcnJheSkuCitjbGFzcyBCbG9iSXRlbSA6
IHB1YmxpYyBSZWZDb3VudGVkPEJsb2JJdGVtPiB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+Qmxv
Ykl0ZW0oKSB7IH0KKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplKCkgY29uc3Qg
PSAwOworICAgIHZpcnR1YWwgY29uc3QgY2hhciogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0K
KyAgICBjaGFyKiByZWxlYXNlQnVmZmVyKCkgY29uc3Q7CisKKyAgICAvLyBGYWN0b3J5IG1ldGhv
ZHMuCisgICAgc3RhdGljIFBhc3NSZWZQdHI8QmxvYkl0ZW0+IGNyZWF0ZVN0cmluZ0Jsb2JJdGVt
KGNvbnN0IFN0cmluZyYsIEVuZGluZ1R5cGUsIFRleHRFbmNvZGluZyk7CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8QmxvYkl0ZW0+IGNyZWF0ZVN0cmluZ0Jsb2JJdGVtKGNvbnN0IENTdHJpbmcmKTsK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCbG9iSXRlbT4gY3JlYXRlQnl0ZXNBcnJheUJsb2JJdGVt
KGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBzaXplKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxC
bG9iSXRlbT4gY3JlYXRlRmlsZUJsb2JJdGVtKGNvbnN0IFN0cmluZyYgcGF0aCk7CisKKyNpZiBF
TkFCTEUoQkxPQl9TTElDRSkKKyAgICAvLyBDcmVhdGVzIERhdGFSbmFnZUJsb2JJdGVtIG9yIEZp
bGVSYW5nZUJsb2JJdGVtLgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJsb2JJdGVtPiBjcmVhdGVS
YW5nZUJsb2JJdGVtKFBhc3NSZWZQdHI8QmxvYkl0ZW0+IGl0ZW0sIGxvbmcgbG9uZyBzdGFydCwg
bG9uZyBsb25nIGxlbmd0aCk7CisgICAgLy8gQ3JlYXRlcyBGaWxlUmFuZ2VCbG9iSXRlbS4KKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxCbG9iSXRlbT4gY3JlYXRlRmlsZVJhbmdlQmxvYkl0ZW0oY29u
c3QgU3RyaW5nJiBwYXRoLCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgsIGRvdWJs
ZSBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUpOworI2VuZGlmIC8vIEVOQUJMRShCTE9CX1NMSUNF
KQorCisgICAgLy8gUmV0dXJucyBmYWxzZSBpZiB0aGUgZGF0YSBoYXMgYmVjb21lIHN0YWxlIG9y
IGludmFsaWQuCisgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiB0cnVl
OyB9CisKKyAgICB2aXJ0dWFsIGNvbnN0IFN0cmluZ0Jsb2JJdGVtKiB0b1N0cmluZ0Jsb2JJdGVt
KCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgY29uc3QgRmlsZUJsb2JJdGVtKiB0
b0ZpbGVCbG9iSXRlbSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyNpZiBFTkFCTEUoQkxPQl9TTElD
RSkKKyAgICB2aXJ0dWFsIGNvbnN0IERhdGFSYW5nZUJsb2JJdGVtKiB0b0RhdGFSYW5nZUJsb2JJ
dGVtKCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgY29uc3QgRmlsZVJhbmdlQmxv
Ykl0ZW0qIHRvRmlsZVJhbmdlQmxvYkl0ZW0oKSBjb25zdCB7IHJldHVybiAwOyB9CisjZW5kaWYg
Ly8gRU5BQkxFKEJMT0JfU0xJQ0UpCisKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8QmxvYkl0ZW0+
IGRlZXBDb3B5KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBlcXVhbHMoY29uc3QgQmxv
Ykl0ZW0qKSBjb25zdCA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICBCbG9iSXRlbSgpIHsgfQorfTsK
KworY2xhc3MgU3RyaW5nQmxvYkl0ZW0gOiBwdWJsaWMgQmxvYkl0ZW0geworcHVibGljOgorICAg
IFN0cmluZ0Jsb2JJdGVtKGNvbnN0IFN0cmluZyYsIEVuZGluZ1R5cGUsIFRleHRFbmNvZGluZyk7
CisgICAgU3RyaW5nQmxvYkl0ZW0oY29uc3QgQ1N0cmluZyYpOworICAgIGNvbnN0IENTdHJpbmcm
IGNzdHIoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0KKworICAgIC8vIEJsb2JJdGVtIG1ldGhv
ZHMuCisgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fZGF0YS5sZW5ndGgoKTsgfQorICAgIHZpcnR1YWwgY29uc3QgY2hhciogZGF0YSgpIGNvbnN0
IHsgcmV0dXJuIG1fZGF0YS5kYXRhKCk7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IFN0cmluZ0Jsb2JJ
dGVtKiB0b1N0cmluZ0Jsb2JJdGVtKCkgY29uc3QgeyByZXR1cm4gdGhpczsgfQorICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxCbG9iSXRlbT4gZGVlcENvcHkoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJv
b2wgZXF1YWxzKGNvbnN0IEJsb2JJdGVtKikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgbXV0YWJs
ZSBDU3RyaW5nIG1fZGF0YTsKK307CisKK2NsYXNzIEJ5dGVzQXJyYXlCbG9iSXRlbSA6IHB1Ymxp
YyBCbG9iSXRlbSB7CitwdWJsaWM6CisgICAgQnl0ZXNBcnJheUJsb2JJdGVtKGNvbnN0IGNoYXIq
IGRhdGEsIHNpemVfdCBzaXplKTsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9ieXRlc0FycmF5LnNpemUoKTsgfQorICAgIHZpcnR1YWwgY29u
c3QgY2hhciogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZXNBcnJheS5kYXRhKCk7IH0KKyAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8QmxvYkl0ZW0+IGRlZXBDb3B5KCkgY29uc3Q7CisgICAgdmly
dHVhbCBib29sIGVxdWFscyhjb25zdCBCbG9iSXRlbSopIGNvbnN0OworCitwcml2YXRlOgorICAg
IFZlY3RvcjxjaGFyPiBtX2J5dGVzQXJyYXk7Cit9OworCitjbGFzcyBGaWxlQmxvYkl0ZW0gOiBw
dWJsaWMgQmxvYkl0ZW0geworcHVibGljOgorICAgIEZpbGVCbG9iSXRlbShjb25zdCBTdHJpbmcm
IHBhdGgpOworICAgIHZpcnR1YWwgY29uc3QgU3RyaW5nJiB1bmlxdWVOYW1lKCkgY29uc3QgeyBy
ZXR1cm4gbV9maWxlTmFtZTsgfQorICAgIHZpcnR1YWwgY29uc3QgU3RyaW5nJiBwYXRoKCkgY29u
c3QgeyByZXR1cm4gbV9wYXRoOyB9CisKKyAgICAvLyBCbG9iSXRlbSBtZXRob2RzLgorICAgIHZp
cnR1YWwgdW5zaWduZWQgbG9uZyBsb25nIHNpemUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGNvbnN0
IEZpbGVCbG9iSXRlbSogdG9GaWxlQmxvYkl0ZW0oKSBjb25zdCB7IHJldHVybiB0aGlzOyB9Cisg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPEJsb2JJdGVtPiBkZWVwQ29weSgpIGNvbnN0OworICAgIHZp
cnR1YWwgYm9vbCBlcXVhbHMoY29uc3QgQmxvYkl0ZW0qKSBjb25zdDsKKworcHJpdmF0ZToKKyAg
ICBTdHJpbmcgbV9wYXRoOworICAgIFN0cmluZyBtX2ZpbGVOYW1lOworfTsKKworI2lmIEVOQUJM
RShCTE9CX1NMSUNFKQorCisvLyBCbG9iSXRlbSBjbGFzcyBmb3Igc2xpY2VkIGRhdGEgKHN0cmlu
ZyBvciBieXRlcy1hcnJheSkuCitjbGFzcyBEYXRhUmFuZ2VCbG9iSXRlbSA6IHB1YmxpYyBCbG9i
SXRlbSB7CitwdWJsaWM6CisgICAgRGF0YVJhbmdlQmxvYkl0ZW0oUGFzc1JlZlB0cjxCbG9iSXRl
bT4gaXRlbSwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoKTsKKworICAgIC8vIEJs
b2JJdGVtIG1ldGhvZHMuCisgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9CisgICAgdmlydHVhbCBjb25zdCBEYXRhUmFuZ2VCbG9i
SXRlbSogdG9EYXRhUmFuZ2VCbG9iSXRlbSgpIGNvbnN0IHsgcmV0dXJuIHRoaXM7IH0KKyAgICB2
aXJ0dWFsIGNvbnN0IGNoYXIqIGRhdGEoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
QmxvYkl0ZW0+IGRlZXBDb3B5KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGVxdWFscyhjb25z
dCBCbG9iSXRlbSopIGNvbnN0OworCitwcml2YXRlOgorICAgIFJlZlB0cjxCbG9iSXRlbT4gbV9p
dGVtOworICAgIGxvbmcgbG9uZyBtX3N0YXJ0OworICAgIGxvbmcgbG9uZyBtX2xlbmd0aDsKK307
CisKK2NsYXNzIEZpbGVSYW5nZUJsb2JJdGVtIDogcHVibGljIEZpbGVCbG9iSXRlbSB7CitwdWJs
aWM6CisgICAgRmlsZVJhbmdlQmxvYkl0ZW0oY29uc3QgU3RyaW5nJiBwYXRoLCBsb25nIGxvbmcg
c3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgsIGRvdWJsZSBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUp
OworICAgIGxvbmcgbG9uZyBzdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnQ7IH0KKyAgICBk
b3VibGUgc25hcHNob3RNb2RpZmljYXRpb25UaW1lKCkgY29uc3QgeyByZXR1cm4gbV9zbmFwc2hv
dE1vZGlmaWNhdGlvblRpbWU7IH0KKworICAgIC8vIEJsb2JJdGVtIG1ldGhvZHMuCisgICAgdmly
dHVhbCB1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9
CisgICAgdmlydHVhbCBjb25zdCBGaWxlUmFuZ2VCbG9iSXRlbSogdG9GaWxlUmFuZ2VCbG9iSXRl
bSgpIGNvbnN0IHsgcmV0dXJuIHRoaXM7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNv
bnN0OworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxCbG9iSXRlbT4gZGVlcENvcHkoKSBjb25zdDsK
KyAgICB2aXJ0dWFsIGJvb2wgZXF1YWxzKGNvbnN0IEJsb2JJdGVtKikgY29uc3Q7CisKKyAgICAv
LyBGaWxlQmxvYkl0ZW0gbWV0aG9kcy4KKyAgICB2aXJ0dWFsIGNvbnN0IFN0cmluZyYgdW5pcXVl
TmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fdW5pcXVlTmFtZTsgfQorCitwcml2YXRlOgorICAgIGxv
bmcgbG9uZyBtX3N0YXJ0OworICAgIGxvbmcgbG9uZyBtX2xlbmd0aDsKKyAgICBTdHJpbmcgbV91
bmlxdWVOYW1lOworCisgICAgZG91YmxlIG1fc25hcHNob3RNb2RpZmljYXRpb25UaW1lOworfTsK
KworI2VuZGlmIC8vIEVOQUJMRShCTE9CX1NMSUNFKQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBCbG9iSXRlbV9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvRmlsZS5j
cHAgYi9XZWJDb3JlL2h0bWwvRmlsZS5jcHAKaW5kZXggOTdmZGM0NTc4ZDc0YjIyNWU1OTQ2ZjRk
NmFlZjI1NjUyNTQ0M2FlNC4uOTJiN2U1Njk5ZjQxYzMwNDIzZDEzNmQwMzFlOWMzMTU3NjhhOWU1
NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0ZpbGUuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9G
aWxlLmNwcApAQCAtMzEsMTQgKzMxLDIyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRmls
ZTo6RmlsZShjb25zdCBTdHJpbmcmIHBhdGgpCi0gICAgOiBCbG9iKHBhdGgpCi0gICAgLCBtX25h
bWUocGF0aEdldEZpbGVOYW1lKHBhdGgpKQorc3RhdGljIFN0cmluZyBnZXRGaWxlVHlwZUZyb21Q
YXRoKGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKLSAgICAvLyBXZSBkb24ndCB1c2UgTUlNRVR5cGVS
ZWdpc3RyeTo6Z2V0TUlNRVR5cGVGb3JQYXRoKCkgYmVjYXVzZSBpdCByZXR1cm5zICJhcHBsaWNh
dGlvbi9vY3RldC1zdHJlYW0iIHVwb24gZmFpbHVyZS4KLSAgICBpbnQgaW5kZXggPSBtX25hbWUu
cmV2ZXJzZUZpbmQoJy4nKTsKKyAgICBpbnQgaW5kZXggPSBwYXRoLnJldmVyc2VGaW5kKCcuJyk7
CiAgICAgaWYgKGluZGV4ICE9IC0xKQotICAgICAgICBtX3R5cGUgPSBNSU1FVHlwZVJlZ2lzdHJ5
OjpnZXRNSU1FVHlwZUZvckV4dGVuc2lvbihtX25hbWUuc3Vic3RyaW5nKGluZGV4ICsgMSkpOwor
ICAgICAgICByZXR1cm4gTUlNRVR5cGVSZWdpc3RyeTo6Z2V0TUlNRVR5cGVGb3JFeHRlbnNpb24o
cGF0aC5zdWJzdHJpbmcoaW5kZXggKyAxKSk7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitG
aWxlOjpGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkKKyAgICA6IEJsb2IocGF0aCwgZ2V0RmlsZVR5
cGVGcm9tUGF0aChwYXRoKSkKK3sKK30KKworY29uc3QgU3RyaW5nIEZpbGU6Om5hbWUoKSBjb25z
dAoreworICAgIHJldHVybiBpdGVtcygpLmF0KDApLT50b0ZpbGVCbG9iSXRlbSgpLT51bmlxdWVO
YW1lKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
aHRtbC9GaWxlLmggYi9XZWJDb3JlL2h0bWwvRmlsZS5oCmluZGV4IDA2NWRkODZhN2IxZWJmNzdm
YjQwNjQ2ZjljNmU4NzA0NjlkN2ViMDkuLjRjZWNhNjU1OTk2MGNiZTNiMDI1NjcyMWViNDc4ZWZk
NzhmOTRlMGYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9GaWxlLmgKKysrIGIvV2ViQ29yZS9o
dG1sL0ZpbGUuaApAQCAtNDEsMTggKzQxLDE0IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9v
bCBpc0ZpbGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKLSAgICBjb25zdCBTdHJpbmcmIG5h
bWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KLSAgICBjb25zdCBTdHJpbmcmIHR5cGUoKSBj
b25zdCB7IHJldHVybiBtX3R5cGU7IH0KKyAgICBjb25zdCBTdHJpbmcgbmFtZSgpIGNvbnN0Owog
CiAgICAgLy8gRklYTUU6IG9ic29sZXRlIGF0dHJpYnV0ZXMuIFRvIGJlIHJlbW92ZWQuCi0gICAg
Y29uc3QgU3RyaW5nJiBmaWxlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQorICAgIGNv
bnN0IFN0cmluZyBmaWxlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG5hbWUoKTsgfQogICAgIHVuc2ln
bmVkIGxvbmcgbG9uZyBmaWxlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemUoKTsgfQogCiBwcml2
YXRlOgogICAgIEZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKTsKLQotICAgIFN0cmluZyBtX25hbWU7
Ci0gICAgU3RyaW5nIG1fdHlwZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvaHRtbC9GaWxlU3RyZWFtLmNwcCBiL1dlYkNvcmUvaHRtbC9GaWxlU3Ry
ZWFtLmNwcAppbmRleCA3MDg5ZjYxNjE1NGU0YjEwYTMyNzczZTAzMzU2YTc5MzY0NThmOTdmLi4y
ODcyODAyZjk5ZjNlZjIyZWNkNTFmM2RkYTJhOTkxNmU2ZTEyZDg3IDEwMDY0NAotLS0gYS9XZWJD
b3JlL2h0bWwvRmlsZVN0cmVhbS5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0ZpbGVTdHJlYW0uY3Bw
CkBAIC05MCwzMCArOTAsMjYgQEAgdm9pZCBGaWxlU3RyZWFtOjpvcGVuRm9yUmVhZChCbG9iKiBi
bG9iKQogICAgIH0KIAogI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgIC8vIENoZWNrIHRoZSBt
b2RpZmljYXRpb250IHRpbWUgZm9yIHRoZSBwb3NzaWJsZSBmaWxlIGNoYW5nZS4KLSAgICBpZiAo
YmxvYi0+bW9kaWZpY2F0aW9uVGltZSgpICE9IEJsb2I6OmRvTm90Q2hlY2tGaWxlQ2hhbmdlICYm
IHN0YXRpY19jYXN0PHRpbWVfdD4oYmxvYi0+bW9kaWZpY2F0aW9uVGltZSgpKSAhPSBjdXJyZW50
TW9kaWZpY2F0aW9uVGltZSkgewotICAgICAgICBtX2NsaWVudC0+ZGlkRmFpbChOT1RfUkVBREFC
TEVfRVJSKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEp1bXAgdG8gdGhlIGJl
Z2lubmluZyBwb3NpdGlvbiBpZiB0aGUgZmlsZSBoYXMgYmVlbiBzbGljZWQuCi0gICAgaWYgKGJs
b2ItPnN0YXJ0KCkgPiAwKSB7Ci0gICAgICAgIGlmICghc2Vla0ZpbGUobV9oYW5kbGUsIGJsb2It
PnN0YXJ0KCksIFNlZWtGcm9tQmVnaW5uaW5nKSkgeworICAgIGNvbnN0IEZpbGVSYW5nZUJsb2JJ
dGVtKiByYW5nZSA9IGJsb2ItPml0ZW1zKCkuYXQoMCktPnRvRmlsZVJhbmdlQmxvYkl0ZW0oKTsK
KyAgICBpZiAocmFuZ2UpIHsKKyAgICAgICAgLy8gQ2hlY2sgdGhlIG1vZGlmaWNhdGlvbnQgdGlt
ZSBmb3IgdGhlIHBvc3NpYmxlIGZpbGUgY2hhbmdlLgorICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8
dGltZV90PihyYW5nZS0+c25hcHNob3RNb2RpZmljYXRpb25UaW1lKCkpICE9IGN1cnJlbnRNb2Rp
ZmljYXRpb25UaW1lKSB7CiAgICAgICAgICAgICBtX2NsaWVudC0+ZGlkRmFpbChOT1RfUkVBREFC
TEVfRVJSKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorCisgICAgICAgIC8vIEp1
bXAgdG8gdGhlIGJlZ2lubmluZyBwb3NpdGlvbiBpZiB0aGUgZmlsZSBoYXMgYmVlbiBzbGljZWQu
CisgICAgICAgIGlmIChyYW5nZS0+c3RhcnQoKSA+IDApIHsKKyAgICAgICAgICAgIGlmIChzZWVr
RmlsZShtX2hhbmRsZSwgcmFuZ2UtPnN0YXJ0KCksIFNlZWtGcm9tQmVnaW5uaW5nKSA8IDApIHsK
KyAgICAgICAgICAgICAgICBtX2NsaWVudC0+ZGlkRmFpbChOT1RfUkVBREFCTEVfRVJSKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAj
ZW5kaWYKIAogICAgIC8vIEdldCB0aGUgc2l6ZS4KLSNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAg
ICBtX3RvdGFsQnl0ZXNUb1JlYWQgPSBibG9iLT5sZW5ndGgoKTsKLSAgICBpZiAobV90b3RhbEJ5
dGVzVG9SZWFkID09IEJsb2I6OnRvRW5kT2ZGaWxlKQotICAgICAgICBtX3RvdGFsQnl0ZXNUb1Jl
YWQgPSBibG9iLT5zaXplKCkgLSBibG9iLT5zdGFydCgpOwotI2Vsc2UKLSAgICBtX3RvdGFsID0g
YmxvYi0+c2l6ZSgpOwotI2VuZGlmCi0KKyAgICBtX3RvdGFsQnl0ZXNUb1JlYWQgPSBibG9iLT5z
aXplKCk7CiAgICAgbV9jbGllbnQtPmRpZEdldFNpemUobV90b3RhbEJ5dGVzVG9SZWFkKTsKIH0K
IApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0Zvcm1EYXRhTGlzdC5jcHAgYi9XZWJDb3JlL2h0
bWwvRm9ybURhdGFMaXN0LmNwcAppbmRleCAyODFjOWZlNDE4ZTFjNDgzM2JiODdmODJmNzRmMWNj
NGQ3MjJkNTdjLi4yYjRiYTBjODIwMDY0ZWE1ZGY2NjlkOTZiZTk1YTA4MmQ1ZjBkNzdiIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2h0bWwvRm9ybURhdGFMaXN0LmNwcAorKysgYi9XZWJDb3JlL2h0bWwv
Rm9ybURhdGFMaXN0LmNwcApAQCAtMjgsNjQgKzI4LDIyIEBAIEZvcm1EYXRhTGlzdDo6Rm9ybURh
dGFMaXN0KGNvbnN0IFRleHRFbmNvZGluZyYgYykKIHsKIH0KIAotdm9pZCBGb3JtRGF0YUxpc3Q6
OmFwcGVuZFN0cmluZyhjb25zdCBDU3RyaW5nJiBzKQordm9pZCBGb3JtRGF0YUxpc3Q6OmFwcGVu
ZFN0cmluZyhjb25zdCBTdHJpbmcmIHMpCiB7Ci0gICAgbV9saXN0LmFwcGVuZChzKTsKKyAgICBt
X2xpc3QuYXBwZW5kKEJsb2JJdGVtOjpjcmVhdGVTdHJpbmdCbG9iSXRlbShzLCBFbmRpbmdDUkxG
LCBtX2VuY29kaW5nKSk7CiB9CiAKLS8vIENoYW5nZSBwbGFpbiBDUiBhbmQgcGxhaW4gTEYgdG8g
Q1JMRiBwYWlycy4KLXN0YXRpYyBDU3RyaW5nIGZpeExpbmVCcmVha3MoY29uc3QgQ1N0cmluZyYg
cykKK3ZvaWQgRm9ybURhdGFMaXN0OjphcHBlbmRTdHJpbmcoY29uc3QgQ1N0cmluZyYgcykKIHsK
LSAgICAvLyBDb21wdXRlIHRoZSBsZW5ndGguCi0gICAgdW5zaWduZWQgbmV3TGVuID0gMDsKLSAg
ICBjb25zdCBjaGFyKiBwID0gcy5kYXRhKCk7Ci0gICAgd2hpbGUgKGNoYXIgYyA9ICpwKyspIHsK
LSAgICAgICAgaWYgKGMgPT0gJ1xyJykgewotICAgICAgICAgICAgLy8gU2FmZSB0byBsb29rIGFo
ZWFkIGJlY2F1c2Ugb2YgdHJhaWxpbmcgJ1wwJy4KLSAgICAgICAgICAgIGlmICgqcCAhPSAnXG4n
KSB7Ci0gICAgICAgICAgICAgICAgLy8gVHVybiBDUiBpbnRvIENSTEYuCi0gICAgICAgICAgICAg
ICAgbmV3TGVuICs9IDI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoYyA9PSAn
XG4nKSB7Ci0gICAgICAgICAgICAvLyBUdXJuIExGIGludG8gQ1JMRi4KLSAgICAgICAgICAgIG5l
d0xlbiArPSAyOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gTGVhdmUgb3RoZXIg
Y2hhcmFjdGVycyBhbG9uZS4KLSAgICAgICAgICAgIG5ld0xlbiArPSAxOwotICAgICAgICB9Ci0g
ICAgfQotICAgIGlmIChuZXdMZW4gPT0gcy5sZW5ndGgoKSkgewotICAgICAgICByZXR1cm4gczsK
LSAgICB9Ci0gICAgCi0gICAgLy8gTWFrZSBhIGNvcHkgb2YgdGhlIHN0cmluZy4KLSAgICBwID0g
cy5kYXRhKCk7Ci0gICAgY2hhciogcTsKLSAgICBDU3RyaW5nIHJlc3VsdCA9IENTdHJpbmc6Om5l
d1VuaW5pdGlhbGl6ZWQobmV3TGVuLCBxKTsKLSAgICB3aGlsZSAoY2hhciBjID0gKnArKykgewot
ICAgICAgICBpZiAoYyA9PSAnXHInKSB7Ci0gICAgICAgICAgICAvLyBTYWZlIHRvIGxvb2sgYWhl
YWQgYmVjYXVzZSBvZiB0cmFpbGluZyAnXDAnLgotICAgICAgICAgICAgaWYgKCpwICE9ICdcbicp
IHsKLSAgICAgICAgICAgICAgICAvLyBUdXJuIENSIGludG8gQ1JMRi4KLSAgICAgICAgICAgICAg
ICAqcSsrID0gJ1xyJzsKLSAgICAgICAgICAgICAgICAqcSsrID0gJ1xuJzsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfSBlbHNlIGlmIChjID09ICdcbicpIHsKLSAgICAgICAgICAgIC8vIFR1cm4g
TEYgaW50byBDUkxGLgotICAgICAgICAgICAgKnErKyA9ICdccic7Ci0gICAgICAgICAgICAqcSsr
ID0gJ1xuJzsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIExlYXZlIG90aGVyIGNo
YXJhY3RlcnMgYWxvbmUuCi0gICAgICAgICAgICAqcSsrID0gYzsKLSAgICAgICAgfQotICAgIH0K
LSAgICByZXR1cm4gcmVzdWx0OworICAgIG1fbGlzdC5hcHBlbmQoQmxvYkl0ZW06OmNyZWF0ZVN0
cmluZ0Jsb2JJdGVtKHMpKTsKIH0KIAotdm9pZCBGb3JtRGF0YUxpc3Q6OmFwcGVuZFN0cmluZyhj
b25zdCBTdHJpbmcmIHMpCit2b2lkIEZvcm1EYXRhTGlzdDo6YXBwZW5kQmxvYihjb25zdCBTdHJp
bmcmIGtleSwgUGFzc1JlZlB0cjxCbG9iPiBibG9iKQogewotICAgIENTdHJpbmcgY3N0ciA9IGZp
eExpbmVCcmVha3MobV9lbmNvZGluZy5lbmNvZGUocy5jaGFyYWN0ZXJzKCksIHMubGVuZ3RoKCks
IEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKSk7Ci0gICAgbV9saXN0LmFwcGVuZChjc3RyKTsKKyAg
ICBhcHBlbmRTdHJpbmcoa2V5KTsKKyAgICBjb25zdCBCbG9iOjpJdGVtTGlzdCYgbGlzdCA9IGJs
b2ItPml0ZW1zKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0LnNpemUoKTsgKytp
KQorICAgICAgICBtX2xpc3QuYXBwZW5kKGxpc3QuYXQoaSkpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0Zvcm1EYXRhTGlzdC5oIGIvV2ViQ29yZS9odG1s
L0Zvcm1EYXRhTGlzdC5oCmluZGV4IDhlY2Y2NGVlOTNhZDUyNGY0NzkyMWYxZDgyMmY5YTA4YmEw
MTNkN2MuLmQ4NjE0ZDcxMDEwMDMyOGQzM2IxMTRkM2NkZGFlNjExYmNhZTc1YjkgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaHRtbC9Gb3JtRGF0YUxpc3QuaAorKysgYi9XZWJDb3JlL2h0bWwvRm9ybURh
dGFMaXN0LmgKQEAgLTIxLDcgKzIxLDggQEAKICNpZm5kZWYgRm9ybURhdGFMaXN0X2gKICNkZWZp
bmUgRm9ybURhdGFMaXN0X2gKIAotI2luY2x1ZGUgIkJsb2IuaCIKKyNpbmNsdWRlICJFeGNlcHRp
b25Db2RlLmgiCisjaW5jbHVkZSAiRmlsZS5oIgogI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgog
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIApAQCAtNDYsMjQgKzQ3LDIzIEBAIHB1Ymxp
YzoKICAgICAgICAgYXBwZW5kU3RyaW5nKGtleSk7CiAgICAgICAgIGFwcGVuZFN0cmluZyhTdHJp
bmc6Om51bWJlcih2YWx1ZSkpOwogICAgIH0KLSAgICB2b2lkIGFwcGVuZEJsb2IoY29uc3QgU3Ry
aW5nJiBrZXksIFBhc3NSZWZQdHI8QmxvYj4gYmxvYikKLSAgICB7Ci0gICAgICAgIGFwcGVuZFN0
cmluZyhrZXkpOwotICAgICAgICBtX2xpc3QuYXBwZW5kKGJsb2IpOwotICAgIH0KKyAgICB2b2lk
IGFwcGVuZEJsb2IoY29uc3QgU3RyaW5nJiBrZXksIFBhc3NSZWZQdHI8QmxvYj4gYmxvYik7CiAK
KyAgICAvLyBBIHNpbXBsZSB3cmFwcGVyIGZvciBCbG9iSXRlbS4KICAgICBjbGFzcyBJdGVtIHsK
ICAgICBwdWJsaWM6CiAgICAgICAgIEl0ZW0oKSB7IH0KLSAgICAgICAgSXRlbShjb25zdCBXVEY6
OkNTdHJpbmcmIGRhdGEpIDogbV9kYXRhKGRhdGEpIHsgfQotICAgICAgICBJdGVtKFBhc3NSZWZQ
dHI8QmxvYj4gYmxvYikgOiBtX2Jsb2IoYmxvYikgeyB9Ci0KLSAgICAgICAgY29uc3QgV1RGOjpD
U3RyaW5nJiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9Ci0gICAgICAgIEJsb2IqIGJs
b2IoKSBjb25zdCB7IHJldHVybiBtX2Jsb2IuZ2V0KCk7IH0KKyAgICAgICAgSXRlbShQYXNzUmVm
UHRyPEJsb2JJdGVtPiBpdGVtKSA6IG1faXRlbShpdGVtKQorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAobV9pdGVtLT50b1N0cmluZ0Jsb2JJdGVtKCkpCisgICAgICAgICAgICAgICAgbV9jc3Ry
ID0gbV9pdGVtLT50b1N0cmluZ0Jsb2JJdGVtKCktPmNzdHIoKTsKKyAgICAgICAgfQorICAgICAg
ICBjb25zdCBQYXNzUmVmUHRyPEJsb2JJdGVtPiBpdGVtKCkgY29uc3QgeyByZXR1cm4gbV9pdGVt
OyB9CisgICAgICAgIGNvbnN0IFdURjo6Q1N0cmluZyYgZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1f
Y3N0cjsgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgV1RGOjpDU3RyaW5nIG1fZGF0YTsKLSAg
ICAgICAgUmVmUHRyPEJsb2I+IG1fYmxvYjsKKyAgICAgICAgUmVmUHRyPEJsb2JJdGVtPiBtX2l0
ZW07CisgICAgICAgIFdURjo6Q1N0cmluZyBtX2NzdHI7CiAgICAgfTsKIAogICAgIGNvbnN0IFZl
Y3RvcjxJdGVtPiYgbGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdDsgfQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9Gb3JtRGF0YS5jcHAKaW5kZXggOTE4MDAyYWVmZDgxYTY4OTFmOWYxOWJhZjQ0ZDc1
NTkxZmRmYTQ4NC4uZjkzYjgwNmI4NTJkYWZiZTkwYjZkZTYxY2IwM2YwZmZjZjAxZDcyYiAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwCkBAIC0yMiwyMCArMjIsNDUgQEAKICNp
bmNsdWRlICJGb3JtRGF0YS5oIgogCiAjaW5jbHVkZSAiQmxvYi5oIgorI2luY2x1ZGUgIkJsb2JJ
dGVtLmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCiAj
aW5jbHVkZSAiRE9NRm9ybURhdGEuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUg
IkZpbGUuaCIKICNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiRm9ybURhdGFCdWls
ZGVyLmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIK
ICNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKLSNpbmNsdWRlICJVVUlELmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAorI2lmIEVOQUJMRShCTE9CX1NMSUNFKQorY29uc3QgbG9uZyBsb25nIEZv
cm1EYXRhRWxlbWVudDo6dG9FbmRPZkZpbGUgPSAtMTsKKyNlbmRpZgorCitGb3JtRGF0YUVsZW1l
bnQ6OkZvcm1EYXRhRWxlbWVudChQYXNzUmVmUHRyPEJsb2JJdGVtPiBibG9iSXRlbSwgYm9vbCBz
aG91bGRHZW5lcmF0ZUZpbGUpCisgICAgOiBtX2l0ZW0oYmxvYkl0ZW0pCisgICAgLCBtX3R5cGUo
bV9pdGVtLT50b0ZpbGVCbG9iSXRlbSgpID8gZW5jb2RlZEZpbGUgOiBkYXRhKQorICAgICwgbV9k
YXRhKG1faXRlbS5nZXQoKSkKKyAgICAsIG1fZmlsZW5hbWUobV9pdGVtLT50b0ZpbGVCbG9iSXRl
bSgpID8gbV9pdGVtLT50b0ZpbGVCbG9iSXRlbSgpLT5wYXRoKCkgOiBTdHJpbmcoKSkKKyNpZiBF
TkFCTEUoQkxPQl9TTElDRSkKKyAgICAsIG1fZmlsZVN0YXJ0KDApCisgICAgLCBtX2ZpbGVMZW5n
dGgodG9FbmRPZkZpbGUpCisgICAgLCBtX2V4cGVjdGVkRmlsZU1vZGlmaWNhdGlvblRpbWUoMCkK
KyNlbmRpZgorICAgICwgbV9zaG91bGRHZW5lcmF0ZUZpbGUoc2hvdWxkR2VuZXJhdGVGaWxlKQor
eworI2lmIEVOQUJMRShCTE9CX1NMSUNFKQorICAgIGlmIChtX2l0ZW0tPnRvRmlsZVJhbmdlQmxv
Ykl0ZW0oKSkgeworICAgICAgICBjb25zdCBGaWxlUmFuZ2VCbG9iSXRlbSogcmFuZ2UgPSBtX2l0
ZW0tPnRvRmlsZVJhbmdlQmxvYkl0ZW0oKTsKKyAgICAgICAgbV9maWxlU3RhcnQgPSByYW5nZS0+
c3RhcnQoKTsKKyAgICAgICAgbV9maWxlTGVuZ3RoID0gcmFuZ2UtPnNpemUoKTsKKyAgICAgICAg
bV9leHBlY3RlZEZpbGVNb2RpZmljYXRpb25UaW1lID0gcmFuZ2UtPnNuYXBzaG90TW9kaWZpY2F0
aW9uVGltZSgpOworICAgIH0KKyNlbmRpZgorfQorCiBpbmxpbmUgRm9ybURhdGE6OkZvcm1EYXRh
KCkKICAgICA6IG1faWRlbnRpZmllcigwKQogICAgICwgbV9oYXNHZW5lcmF0ZWRGaWxlcyhmYWxz
ZSkKQEAgLTg1LDcgKzExMCw3IEBAIFBhc3NSZWZQdHI8Rm9ybURhdGE+IEZvcm1EYXRhOjpjcmVh
dGUoY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IHNpemUpCiBQYXNzUmVmUHRyPEZvcm1EYXRhPiBG
b3JtRGF0YTo6Y3JlYXRlKGNvbnN0IENTdHJpbmcmIHN0cmluZykKIHsKICAgICBSZWZQdHI8Rm9y
bURhdGE+IHJlc3VsdCA9IGNyZWF0ZSgpOwotICAgIHJlc3VsdC0+YXBwZW5kRGF0YShzdHJpbmcu
ZGF0YSgpLCBzdHJpbmcubGVuZ3RoKCkpOworICAgIHJlc3VsdC0+YXBwZW5kU3RyaW5nKHN0cmlu
Zyk7CiAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiB9CiAKQEAgLTEyNSw0NSArMTUwLDQy
IEBAIFBhc3NSZWZQdHI8Rm9ybURhdGE+IEZvcm1EYXRhOjpkZWVwQ29weSgpIGNvbnN0CiAgICAg
Zm9ybURhdGEtPm1fZWxlbWVudHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShuKTsKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG47ICsraSkgewogICAgICAgICBjb25zdCBGb3JtRGF0YUVsZW1l
bnQmIGUgPSBtX2VsZW1lbnRzW2ldOwotICAgICAgICBzd2l0Y2ggKGUubV90eXBlKSB7Ci0gICAg
ICAgIGNhc2UgRm9ybURhdGFFbGVtZW50OjpkYXRhOgotICAgICAgICAgICAgZm9ybURhdGEtPm1f
ZWxlbWVudHMuYXBwZW5kKEZvcm1EYXRhRWxlbWVudChlLm1fZGF0YSkpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgRm9ybURhdGFFbGVtZW50OjplbmNvZGVkRmlsZToKLSNpZiBF
TkFCTEUoQkxPQl9TTElDRSkKLSAgICAgICAgICAgIGZvcm1EYXRhLT5tX2VsZW1lbnRzLmFwcGVu
ZChGb3JtRGF0YUVsZW1lbnQoZS5tX2ZpbGVuYW1lLCBlLm1fZmlsZVN0YXJ0LCBlLm1fZmlsZUxl
bmd0aCwgZS5tX2V4cGVjdGVkRmlsZU1vZGlmaWNhdGlvblRpbWUsIGUubV9zaG91bGRHZW5lcmF0
ZUZpbGUpKTsKLSNlbHNlCi0gICAgICAgICAgICBmb3JtRGF0YS0+bV9lbGVtZW50cy5hcHBlbmQo
Rm9ybURhdGFFbGVtZW50KGUubV9maWxlbmFtZSwgZS5tX3Nob3VsZEdlbmVyYXRlRmlsZSkpOwot
I2VuZGlmCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorICAgICAgICBmb3JtRGF0YS0+
bV9lbGVtZW50cy5hcHBlbmQoRm9ybURhdGFFbGVtZW50KGUuaXRlbSgpLT5kZWVwQ29weSgpLCBl
Lm1fc2hvdWxkR2VuZXJhdGVGaWxlKSk7CiAgICAgfQogICAgIHJldHVybiBmb3JtRGF0YS5yZWxl
YXNlKCk7CiB9CiAKIHZvaWQgRm9ybURhdGE6OmFwcGVuZERhdGEoY29uc3Qgdm9pZCogZGF0YSwg
c2l6ZV90IHNpemUpCiB7Ci0gICAgaWYgKG1fZWxlbWVudHMuaXNFbXB0eSgpIHx8IG1fZWxlbWVu
dHMubGFzdCgpLm1fdHlwZSAhPSBGb3JtRGF0YUVsZW1lbnQ6OmRhdGEpCi0gICAgICAgIG1fZWxl
bWVudHMuYXBwZW5kKEZvcm1EYXRhRWxlbWVudCgpKTsKLSAgICBGb3JtRGF0YUVsZW1lbnQmIGUg
PSBtX2VsZW1lbnRzLmxhc3QoKTsKLSAgICBzaXplX3Qgb2xkU2l6ZSA9IGUubV9kYXRhLnNpemUo
KTsKLSAgICBlLm1fZGF0YS5ncm93KG9sZFNpemUgKyBzaXplKTsKLSAgICBtZW1jcHkoZS5tX2Rh
dGEuZGF0YSgpICsgb2xkU2l6ZSwgZGF0YSwgc2l6ZSk7CisgICAgbV9lbGVtZW50cy5hcHBlbmQo
Rm9ybURhdGFFbGVtZW50KEJsb2JJdGVtOjpjcmVhdGVCeXRlc0FycmF5QmxvYkl0ZW0oc3RhdGlj
X2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEpLCBzaXplKSkpOworfQorCit2b2lkIEZvcm1EYXRhOjph
cHBlbmRTdHJpbmcoY29uc3QgQ1N0cmluZyYgc3RyaW5nKQoreworICAgIG1fZWxlbWVudHMuYXBw
ZW5kKEZvcm1EYXRhRWxlbWVudChCbG9iSXRlbTo6Y3JlYXRlU3RyaW5nQmxvYkl0ZW0oc3RyaW5n
KSkpOwogfQogCiB2b2lkIEZvcm1EYXRhOjphcHBlbmRGaWxlKGNvbnN0IFN0cmluZyYgZmlsZW5h
bWUsIGJvb2wgc2hvdWxkR2VuZXJhdGVGaWxlKQogewotI2lmIEVOQUJMRShCTE9CX1NMSUNFKQot
ICAgIG1fZWxlbWVudHMuYXBwZW5kKEZvcm1EYXRhRWxlbWVudChmaWxlbmFtZSwgMCwgQmxvYjo6
dG9FbmRPZkZpbGUsIEJsb2I6OmRvTm90Q2hlY2tGaWxlQ2hhbmdlLCBzaG91bGRHZW5lcmF0ZUZp
bGUpKTsKLSNlbHNlCi0gICAgbV9lbGVtZW50cy5hcHBlbmQoRm9ybURhdGFFbGVtZW50KGZpbGVu
YW1lLCBzaG91bGRHZW5lcmF0ZUZpbGUpKTsKLSNlbmRpZgorICAgIG1fZWxlbWVudHMuYXBwZW5k
KEZvcm1EYXRhRWxlbWVudChCbG9iSXRlbTo6Y3JlYXRlRmlsZUJsb2JJdGVtKGZpbGVuYW1lKSwg
c2hvdWxkR2VuZXJhdGVGaWxlKSk7Cit9CisKK3ZvaWQgRm9ybURhdGE6OmFwcGVuZEJsb2IoQmxv
YiogYikKK3sKKyAgICBSZWZQdHI8QmxvYj4gYmxvYiA9IGI7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBibG9iLT5pdGVtcygpLnNpemUoKTsgKytpKQorICAgICAgICBtX2VsZW1lbnRzLmFw
cGVuZChibG9iLT5pdGVtcygpLmF0KGkpKTsKIH0KIAogI2lmIEVOQUJMRShCTE9CX1NMSUNFKQog
dm9pZCBGb3JtRGF0YTo6YXBwZW5kRmlsZVJhbmdlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGxv
bmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCwgZG91YmxlIGV4cGVjdGVkTW9kaWZpY2F0
aW9uVGltZSwgYm9vbCBzaG91bGRHZW5lcmF0ZUZpbGUpCiB7Ci0gICAgbV9lbGVtZW50cy5hcHBl
bmQoRm9ybURhdGFFbGVtZW50KGZpbGVuYW1lLCBzdGFydCwgbGVuZ3RoLCBleHBlY3RlZE1vZGlm
aWNhdGlvblRpbWUsIHNob3VsZEdlbmVyYXRlRmlsZSkpOworICAgIGlmIChsZW5ndGggPT0gRm9y
bURhdGFFbGVtZW50Ojp0b0VuZE9mRmlsZSkgeworICAgICAgICBBU1NFUlQoIXN0YXJ0KTsKKyAg
ICAgICAgQVNTRVJUKCFleHBlY3RlZE1vZGlmaWNhdGlvblRpbWUpOworICAgICAgICBtX2VsZW1l
bnRzLmFwcGVuZChGb3JtRGF0YUVsZW1lbnQoQmxvYkl0ZW06OmNyZWF0ZUZpbGVCbG9iSXRlbShm
aWxlbmFtZSksIHNob3VsZEdlbmVyYXRlRmlsZSkpOworICAgIH0gZWxzZQorICAgICAgICBtX2Vs
ZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVsZW1lbnQoQmxvYkl0ZW06OmNyZWF0ZUZpbGVSYW5nZUJs
b2JJdGVtKGZpbGVuYW1lLCBzdGFydCwgbGVuZ3RoLCBleHBlY3RlZE1vZGlmaWNhdGlvblRpbWUp
LCBzaG91bGRHZW5lcmF0ZUZpbGUpKTsKIH0KICNlbmRpZgogCkBAIC0xODYsMjMgKzIwOCwxMyBA
QCB2b2lkIEZvcm1EYXRhOjphcHBlbmRET01Gb3JtRGF0YShjb25zdCBET01Gb3JtRGF0YSYgZG9t
Rm9ybURhdGEsIGJvb2wgaXNNdWx0aVBhcgogICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGhlYWRl
cjsKICAgICAgICAgICAgIGZvcm1EYXRhQnVpbGRlci5iZWdpbk11bHRpUGFydEhlYWRlcihoZWFk
ZXIsIG1fYm91bmRhcnkuZGF0YSgpLCBrZXkuZGF0YSgpKTsKIAorICAgICAgICAgICAgY29uc3Qg
UmVmUHRyPEJsb2JJdGVtPiBpdGVtID0gdmFsdWUuaXRlbSgpOwogICAgICAgICAgICAgYm9vbCBz
aG91bGRHZW5lcmF0ZUZpbGUgPSBmYWxzZTsKICAgICAgICAgICAgIC8vIElmIHRoZSBjdXJyZW50
IHR5cGUgaXMgRklMRSwgdGhlbiB3ZSBhbHNvIG5lZWQgdG8gaW5jbHVkZSB0aGUgZmlsZW5hbWUK
LSAgICAgICAgICAgIGlmICh2YWx1ZS5ibG9iKCkpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBT
dHJpbmcmIHBhdGggPSB2YWx1ZS5ibG9iKCktPnBhdGgoKTsKLSNpZiBFTkFCTEUoQkxPQl9TTElD
RSkKLSAgICAgICAgICAgICAgICBTdHJpbmcgZmlsZU5hbWU7Ci0gICAgICAgICAgICAgICAgaWYg
KHZhbHVlLmJsb2IoKS0+aXNGaWxlKCkpCi0gICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lID0g
c3RhdGljX2Nhc3Q8RmlsZSo+KHZhbHVlLmJsb2IoKSktPmZpbGVOYW1lKCk7Ci0gICAgICAgICAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIElmIGEgYmxvYiBpcyBzbGljZWQg
ZnJvbSBhIGZpbGUsIGl0IGRvZXMgbm90IGhhdmUgdGhlIGZpbGVuYW1lLiBJbiB0aGlzIGNhc2Us
IGxldCdzIHByb2R1Y2UgYSB1bmlxdWUgZmlsZW5hbWUuCi0gICAgICAgICAgICAgICAgICAgIGZp
bGVOYW1lID0gIkJsb2IiICsgY3JlYXRlQ2Fub25pY2FsVVVJRFN0cmluZygpOwotICAgICAgICAg
ICAgICAgICAgICBmaWxlTmFtZS5yZXBsYWNlKCItIiwgIiIpOyAvLyBGb3Igc2FmdHksIHJlbW92
ZSAnLScgZnJvbSB0aGUgZmlsZW5hbWUgc25jZSBzb21lIHNlcnZlcnMgbWF5IG5vdCBsaWtlIGl0
LgotICAgICAgICAgICAgICAgIH0KLSNlbHNlCi0gICAgICAgICAgICAgICAgQVNTRVJUKHZhbHVl
LmJsb2IoKS0+aXNGaWxlKCkpOwotICAgICAgICAgICAgICAgIFN0cmluZyBmaWxlTmFtZSA9IHN0
YXRpY19jYXN0PEZpbGUqPih2YWx1ZS5ibG9iKCkpLT5maWxlTmFtZSgpOwotI2VuZGlmCisgICAg
ICAgICAgICBpZiAoaXRlbS0+dG9GaWxlQmxvYkl0ZW0oKSkgeworICAgICAgICAgICAgICAgIGNv
bnN0IEZpbGVCbG9iSXRlbSogZmlsZSA9IGl0ZW0tPnRvRmlsZUJsb2JJdGVtKCk7CisgICAgICAg
ICAgICAgICAgY29uc3QgU3RyaW5nJiBwYXRoID0gZmlsZS0+cGF0aCgpOworICAgICAgICAgICAg
ICAgIFN0cmluZyBmaWxlTmFtZSA9IGZpbGUtPnVuaXF1ZU5hbWUoKTsKIAogICAgICAgICAgICAg
ICAgIC8vIExldCB0aGUgYXBwbGljYXRpb24gc3BlY2lmeSBhIGZpbGVuYW1lIGlmIGl0J3MgZ29p
bmcgdG8gZ2VuZXJhdGUgYSByZXBsYWNlbWVudCBmaWxlIGZvciB0aGUgdXBsb2FkLgogICAgICAg
ICAgICAgICAgIGlmICghcGF0aC5pc0VtcHR5KCkpIHsKQEAgLTIxNyw5ICsyMjksOSBAQCB2b2lk
IEZvcm1EYXRhOjphcHBlbmRET01Gb3JtRGF0YShjb25zdCBET01Gb3JtRGF0YSYgZG9tRm9ybURh
dGEsIGJvb2wgaXNNdWx0aVBhcgogICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8gaW5jbHVk
ZSB0aGUgZmlsZW5hbWU9Ii4uIiBwYXJ0IGluIHRoZSBoZWFkZXIsIGV2ZW4gaWYgdGhlIGZpbGVu
YW1lIGlzIGVtcHR5CiAgICAgICAgICAgICAgICAgZm9ybURhdGFCdWlsZGVyLmFkZEZpbGVuYW1l
VG9NdWx0aVBhcnRIZWFkZXIoaGVhZGVyLCBlbmNvZGluZywgZmlsZU5hbWUpOwogCi0gICAgICAg
ICAgICAgICAgLy8gSWYgYSBibG9iIGlzIHNsaWNlZCBmcm9tIGEgZmlsZSwgZG8gbm90IGFkZCB0
aGUgY29udGVudCB0eXBlLiAKKyAgICAgICAgICAgICAgICAvLyBJZiB0aGUgaXRlbSBpcyBzbGlj
ZWQgZnJvbSBhIGZpbGUsIGRvIG5vdCBhZGQgdGhlIGNvbnRlbnQgdHlwZS4KICNpZiBFTkFCTEUo
QkxPQl9TTElDRSkKLSAgICAgICAgICAgICAgICBpZiAoIWZpbGVOYW1lLmlzRW1wdHkoKSAmJiB2
YWx1ZS5ibG9iKCktPmlzRmlsZSgpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFmaWxlTmFtZS5p
c0VtcHR5KCkgJiYgIWl0ZW0tPnRvRmlsZVJhbmdlQmxvYkl0ZW0oKSkgewogI2Vsc2UKICAgICAg
ICAgICAgICAgICBpZiAoIWZpbGVOYW1lLmlzRW1wdHkoKSkgewogI2VuZGlmCkBAIC0yMzcsMTUg
KzI0OSw3IEBAIHZvaWQgRm9ybURhdGE6OmFwcGVuZERPTUZvcm1EYXRhKGNvbnN0IERPTUZvcm1E
YXRhJiBkb21Gb3JtRGF0YSwgYm9vbCBpc011bHRpUGFyCiAKICAgICAgICAgICAgIC8vIEFwcGVu
ZCBib2R5CiAgICAgICAgICAgICBhcHBlbmREYXRhKGhlYWRlci5kYXRhKCksIGhlYWRlci5zaXpl
KCkpOwotICAgICAgICAgICAgaWYgKHNpemVfdCBkYXRhU2l6ZSA9IHZhbHVlLmRhdGEoKS5sZW5n
dGgoKSkKLSAgICAgICAgICAgICAgICBhcHBlbmREYXRhKHZhbHVlLmRhdGEoKS5kYXRhKCksIGRh
dGFTaXplKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlLmJsb2IoKSAmJiAhdmFsdWUuYmxv
YigpLT5wYXRoKCkuaXNFbXB0eSgpKQotI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgICAgICAg
ICAgICAgIGFwcGVuZEZpbGVSYW5nZSh2YWx1ZS5ibG9iKCktPnBhdGgoKSwgdmFsdWUuYmxvYigp
LT5zdGFydCgpLCB2YWx1ZS5ibG9iKCktPmxlbmd0aCgpLCB2YWx1ZS5ibG9iKCktPm1vZGlmaWNh
dGlvblRpbWUoKSwgc2hvdWxkR2VuZXJhdGVGaWxlKTsKLSNlbHNlCi0gICAgICAgICAgICAgICAg
YXBwZW5kRmlsZSh2YWx1ZS5ibG9iKCktPnBhdGgoKSwgc2hvdWxkR2VuZXJhdGVGaWxlKTsKLSNl
bmRpZgotCisgICAgICAgICAgICBtX2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVsZW1lbnQoaXRl
bSwgc2hvdWxkR2VuZXJhdGVGaWxlKSk7CiAgICAgICAgICAgICBhcHBlbmREYXRhKCJcclxuIiwg
Mik7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBPbWl0IHRoZSBuYW1lICJpc2lu
ZGV4IiBpZiBpdCdzIHRoZSBmaXJzdCBmb3JtIGRhdGEgZWxlbWVudC4KQEAgLTI1NSw3ICsyNTks
NyBAQCB2b2lkIEZvcm1EYXRhOjphcHBlbmRET01Gb3JtRGF0YShjb25zdCBET01Gb3JtRGF0YSYg
ZG9tRm9ybURhdGEsIGJvb2wgaXNNdWx0aVBhcgogICAgICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgICAgIGZvcm1EYXRhQnVpbGRlci5hZGRLZXlWYWx1ZVBhaXJBc0Zvcm1EYXRhKGVuY29kZWRE
YXRhLCBrZXkuZGF0YSgpLCB2YWx1ZS5kYXRhKCkpOwogICAgICAgICB9Ci0gICAgfSAKKyAgICB9
CiAKICAgICBpZiAoaXNNdWx0aVBhcnRGb3JtKQogICAgICAgICBmb3JtRGF0YUJ1aWxkZXIuYWRk
Qm91bmRhcnlUb011bHRpUGFydEhlYWRlcihlbmNvZGVkRGF0YSwgbV9ib3VuZGFyeS5kYXRhKCks
IHRydWUpOwpAQCAtMjcwLDEyICsyNzQsOCBAQCB2b2lkIEZvcm1EYXRhOjpmbGF0dGVuKFZlY3Rv
cjxjaGFyPiYgZGF0YSkgY29uc3QKICAgICBzaXplX3QgbiA9IG1fZWxlbWVudHMuc2l6ZSgpOwog
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbjsgKytpKSB7CiAgICAgICAgIGNvbnN0IEZvcm1E
YXRhRWxlbWVudCYgZSA9IG1fZWxlbWVudHNbaV07Ci0gICAgICAgIGlmIChlLm1fdHlwZSA9PSBG
b3JtRGF0YUVsZW1lbnQ6OmRhdGEpIHsKLSAgICAgICAgICAgIHNpemVfdCBvbGRTaXplID0gZGF0
YS5zaXplKCk7Ci0gICAgICAgICAgICBzaXplX3QgZGVsdGEgPSBlLm1fZGF0YS5zaXplKCk7Ci0g
ICAgICAgICAgICBkYXRhLmdyb3cob2xkU2l6ZSArIGRlbHRhKTsKLSAgICAgICAgICAgIG1lbWNw
eShkYXRhLmRhdGEoKSArIG9sZFNpemUsIGUubV9kYXRhLmRhdGEoKSwgZGVsdGEpOwotICAgICAg
ICB9CisgICAgICAgIGlmIChlLm1fdHlwZSA9PSBGb3JtRGF0YUVsZW1lbnQ6OmRhdGEpCisgICAg
ICAgICAgICBkYXRhLmFwcGVuZChlLml0ZW0oKS0+ZGF0YSgpLCBzdGF0aWNfY2FzdDxzaXplX3Q+
KGUuaXRlbSgpLT5zaXplKCkpKTsKICAgICB9CiB9CiAKQEAgLTI4OSwxMCArMjg5LDEwIEBAIFN0
cmluZyBGb3JtRGF0YTo6ZmxhdHRlblRvU3RyaW5nKCkgY29uc3QKIHZvaWQgRm9ybURhdGE6Omdl
bmVyYXRlRmlsZXMoRG9jdW1lbnQqIGRvY3VtZW50KQogewogICAgIEFTU0VSVCghbV9oYXNHZW5l
cmF0ZWRGaWxlcyk7Ci0gICAgCisKICAgICBpZiAobV9oYXNHZW5lcmF0ZWRGaWxlcykKICAgICAg
ICAgcmV0dXJuOwotICAgIAorCiAgICAgUGFnZSogcGFnZSA9IGRvY3VtZW50LT5wYWdlKCk7CiAg
ICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm47CkBAIC0zMDIsNyArMzAyLDcgQEAgdm9pZCBG
b3JtRGF0YTo6Z2VuZXJhdGVGaWxlcyhEb2N1bWVudCogZG9jdW1lbnQpCiAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBuOyArK2kpIHsKICAgICAgICAgRm9ybURhdGFFbGVtZW50JiBlID0gbV9l
bGVtZW50c1tpXTsKICAgICAgICAgaWYgKGUubV90eXBlID09IEZvcm1EYXRhRWxlbWVudDo6ZW5j
b2RlZEZpbGUgJiYgZS5tX3Nob3VsZEdlbmVyYXRlRmlsZSkgewotICAgICAgICAgICAgZS5tX2dl
bmVyYXRlZEZpbGVuYW1lID0gY2xpZW50LT5nZW5lcmF0ZVJlcGxhY2VtZW50RmlsZShlLm1fZmls
ZW5hbWUpOworICAgICAgICAgICAgZS5tX2dlbmVyYXRlZEZpbGVuYW1lID0gY2xpZW50LT5nZW5l
cmF0ZVJlcGxhY2VtZW50RmlsZShlLml0ZW0oKS0+dG9GaWxlQmxvYkl0ZW0oKS0+cGF0aCgpKTsK
ICAgICAgICAgICAgIG1faGFzR2VuZXJhdGVkRmlsZXMgPSB0cnVlOwogICAgICAgICB9CiAgICAg
fQpAQCAtMzEyLDcgKzMxMiw3IEBAIHZvaWQgRm9ybURhdGE6OnJlbW92ZUdlbmVyYXRlZEZpbGVz
SWZOZWVkZWQoKQogewogICAgIGlmICghbV9oYXNHZW5lcmF0ZWRGaWxlcykKICAgICAgICAgcmV0
dXJuOwotICAgICAgICAKKwogICAgIHNpemVfdCBuID0gbV9lbGVtZW50cy5zaXplKCk7CiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBuOyArK2kpIHsKICAgICAgICAgRm9ybURhdGFFbGVtZW50
JiBlID0gbV9lbGVtZW50c1tpXTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9Gb3JtRGF0YS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmgKaW5kZXgg
YTQzOTAyMzQ3OTZhMGUyZjE0ZjVkMzQ5ZjVkZDBlZmZjMGE0YjdjZC4uOTllZTdjNTEyMWQ4MGFj
NzllZTU5MjFlZGNiYjUyN2FlNzNhYjI0MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL0Zvcm1EYXRhLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRh
LmgKQEAgLTIwLDYgKzIwLDcgQEAKICNpZm5kZWYgRm9ybURhdGFfaAogI2RlZmluZSBGb3JtRGF0
YV9oCiAKKyNpbmNsdWRlICJCbG9iLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTI5
LDUyICszMCw0OSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBET01Gb3JtRGF0YTsKIGNs
YXNzIERvY3VtZW50OwogCisvLyBBIHdyYXBwZXIgY2xhc3Mgb2YgQmxvYkl0ZW0gZm9yIEZvcm1E
YXRhLgogY2xhc3MgRm9ybURhdGFFbGVtZW50IHsKIHB1YmxpYzoKLSAgICBGb3JtRGF0YUVsZW1l
bnQoKSA6IG1fdHlwZShkYXRhKSB7IH0KLSAgICBGb3JtRGF0YUVsZW1lbnQoY29uc3QgVmVjdG9y
PGNoYXI+JiBhcnJheSkgOiBtX3R5cGUoZGF0YSksIG1fZGF0YShhcnJheSkgeyB9Ci0jaWYgRU5B
QkxFKEJMT0JfU0xJQ0UpCi0gICAgRm9ybURhdGFFbGVtZW50KGNvbnN0IFN0cmluZyYgZmlsZW5h
bWUsIGxvbmcgbG9uZyBmaWxlU3RhcnQsIGxvbmcgbG9uZyBmaWxlTGVuZ3RoLCBkb3VibGUgZXhw
ZWN0ZWRGaWxlTW9kaWZpY2F0aW9uVGltZSwgYm9vbCBzaG91bGRHZW5lcmF0ZUZpbGUpIDogbV90
eXBlKGVuY29kZWRGaWxlKSwgbV9maWxlbmFtZShmaWxlbmFtZSksIG1fZmlsZVN0YXJ0KGZpbGVT
dGFydCksIG1fZmlsZUxlbmd0aChmaWxlTGVuZ3RoKSwgbV9leHBlY3RlZEZpbGVNb2RpZmljYXRp
b25UaW1lKGV4cGVjdGVkRmlsZU1vZGlmaWNhdGlvblRpbWUpLCBtX3Nob3VsZEdlbmVyYXRlRmls
ZShzaG91bGRHZW5lcmF0ZUZpbGUpIHsgfQotI2Vsc2UKLSAgICBGb3JtRGF0YUVsZW1lbnQoY29u
c3QgU3RyaW5nJiBmaWxlbmFtZSwgYm9vbCBzaG91bGRHZW5lcmF0ZUZpbGUpIDogbV90eXBlKGVu
Y29kZWRGaWxlKSwgbV9maWxlbmFtZShmaWxlbmFtZSksIG1fc2hvdWxkR2VuZXJhdGVGaWxlKHNo
b3VsZEdlbmVyYXRlRmlsZSkgeyB9Ci0jZW5kaWYKKyAgICBGb3JtRGF0YUVsZW1lbnQoKSA6IG1f
ZGF0YSgwKSB7IH0KKyAgICBGb3JtRGF0YUVsZW1lbnQoUGFzc1JlZlB0cjxCbG9iSXRlbT4gYmxv
Ykl0ZW0sIGJvb2wgc2hvdWxkR2VuZXJhdGVGaWxlID0gZmFsc2UpOworCisgICAgY29uc3QgQmxv
Ykl0ZW0qIGl0ZW0oKSBjb25zdCB7IHJldHVybiBtX2l0ZW0uZ2V0KCk7IH0KKworICAgIFJlZlB0
cjxCbG9iSXRlbT4gbV9pdGVtOwogCisgICAgLy8gRklYTUU6IGNsZWFuIG1lIHVwLiAgQ29kZSBi
ZWxvdyBhcmUgbW9zdGx5IGtlcHQgZm9yIGNvbXBhdGliaWxpdHkuCiAgICAgZW51bSB7IGRhdGEs
IGVuY29kZWRGaWxlIH0gbV90eXBlOwotICAgIFZlY3RvcjxjaGFyPiBtX2RhdGE7CisgICAgY29u
c3Qgc3RydWN0IEJsb2JJdGVtV3JhcHBlciB7CisgICAgICAgIEJsb2JJdGVtV3JhcHBlcihjb25z
dCBCbG9iSXRlbVdyYXBwZXImIHYpIDogbV9pdGVtKHYubV9pdGVtKSB7IH0KKyAgICAgICAgQmxv
Ykl0ZW1XcmFwcGVyKGNvbnN0IEJsb2JJdGVtKiBpdGVtKSA6IG1faXRlbShpdGVtKSB7IH0KKyAg
ICAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG1f
aXRlbS0+c2l6ZSgpKTsgfQorICAgICAgICBjb25zdCBjaGFyKiBkYXRhKCkgY29uc3QgeyByZXR1
cm4gbV9pdGVtLT5kYXRhKCk7IH0KKyAgICAgICAgY2hhciogcmVsZWFzZUJ1ZmZlcigpIGNvbnN0
IHsgcmV0dXJuIG1faXRlbS0+cmVsZWFzZUJ1ZmZlcigpOyB9CisgICAgICAgIGNvbnN0IEJsb2JJ
dGVtKiBtX2l0ZW07CisgICAgfSBtX2RhdGE7CiAgICAgU3RyaW5nIG1fZmlsZW5hbWU7CiAjaWYg
RU5BQkxFKEJMT0JfU0xJQ0UpCiAgICAgbG9uZyBsb25nIG1fZmlsZVN0YXJ0OwogICAgIGxvbmcg
bG9uZyBtX2ZpbGVMZW5ndGg7CiAgICAgZG91YmxlIG1fZXhwZWN0ZWRGaWxlTW9kaWZpY2F0aW9u
VGltZTsKKworICAgIHN0YXRpYyBjb25zdCBsb25nIGxvbmcgdG9FbmRPZkZpbGU7CiAjZW5kaWYK
KwogICAgIFN0cmluZyBtX2dlbmVyYXRlZEZpbGVuYW1lOwogICAgIGJvb2wgbV9zaG91bGRHZW5l
cmF0ZUZpbGU7CiB9OwogCiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvcm1EYXRhRWxl
bWVudCYgYSwgY29uc3QgRm9ybURhdGFFbGVtZW50JiBiKQogewotICAgIGlmICgmYSA9PSAmYikK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgaWYgKGEubV90eXBlICE9IGIubV90eXBl
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGEubV9kYXRhICE9IGIubV9kYXRhKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0jaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgaWYgKGEu
bV9maWxlbmFtZSAhPSBiLm1fZmlsZW5hbWUgfHwgYS5tX2ZpbGVTdGFydCAhPSBiLm1fZmlsZVN0
YXJ0IHx8IGEubV9maWxlTGVuZ3RoICE9IGIubV9maWxlTGVuZ3RoIHx8IGEubV9leHBlY3RlZEZp
bGVNb2RpZmljYXRpb25UaW1lICE9IGIubV9leHBlY3RlZEZpbGVNb2RpZmljYXRpb25UaW1lKQot
I2Vsc2UKLSAgICBpZiAoYS5tX2ZpbGVuYW1lICE9IGIubV9maWxlbmFtZSkKLSNlbmRpZgotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gYS5pdGVt
KCktPmVxdWFscyhiLml0ZW0oKSk7CiB9Ci0gCisKIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29u
c3QgRm9ybURhdGFFbGVtZW50JiBhLCBjb25zdCBGb3JtRGF0YUVsZW1lbnQmIGIpCiB7CiAgICAg
cmV0dXJuICEoYSA9PSBiKTsKIH0KLSAKKwogY2xhc3MgRm9ybURhdGEgOiBwdWJsaWMgUmVmQ291
bnRlZDxGb3JtRGF0YT4gewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZvcm1EYXRh
PiBjcmVhdGUoKTsKQEAgLTg2LDggKzg0LDEwIEBAIHB1YmxpYzoKICAgICBQYXNzUmVmUHRyPEZv
cm1EYXRhPiBjb3B5KCkgY29uc3Q7CiAgICAgUGFzc1JlZlB0cjxGb3JtRGF0YT4gZGVlcENvcHko
KSBjb25zdDsKICAgICB+Rm9ybURhdGEoKTsKLSAgICAKKwogICAgIHZvaWQgYXBwZW5kRGF0YShj
b25zdCB2b2lkKiBkYXRhLCBzaXplX3QpOworICAgIHZvaWQgYXBwZW5kQmxvYihCbG9iKik7Cisg
ICAgdm9pZCBhcHBlbmRTdHJpbmcoY29uc3QgQ1N0cmluZyYpOwogICAgIHZvaWQgYXBwZW5kRmls
ZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBib29sIHNob3VsZEdlbmVyYXRlRmlsZSA9IGZhbHNl
KTsKICNpZiBFTkFCTEUoQkxPQl9TTElDRSkKICAgICB2b2lkIGFwcGVuZEZpbGVSYW5nZShjb25z
dCBTdHJpbmcmIGZpbGVuYW1lLCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgsIGRv
dWJsZSBleHBlY3RlZE1vZGlmaWNhdGlvblRpbWUsIGJvb2wgc2hvdWxkR2VuZXJhdGVGaWxlID0g
ZmFsc2UpOwpAQCAtMTE4LDYgKzExOCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBhcHBlbmRET01G
b3JtRGF0YShjb25zdCBET01Gb3JtRGF0YSYgZG9tRm9ybURhdGEsIGJvb2wgaXNNdWx0aVBhcnRG
b3JtLCBEb2N1bWVudCogZG9jdW1lbnQpOwogCiAgICAgVmVjdG9yPEZvcm1EYXRhRWxlbWVudD4g
bV9lbGVtZW50czsKKwogICAgIGludDY0X3QgbV9pZGVudGlmaWVyOwogICAgIGJvb2wgbV9oYXNH
ZW5lcmF0ZWRGaWxlczsKICAgICBib29sIG1fYWx3YXlzU3RyZWFtOwpAQCAtMTMxLDcgKzEzMiw3
IEBAIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9ybURhdGEmIGEsIGNvbnN0IEZvcm1E
YXRhJiBiKQogCiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZvcm1EYXRhJiBhLCBjb25z
dCBGb3JtRGF0YSYgYikKIHsKLSAgICByZXR1cm4gYS5lbGVtZW50cygpICE9IGIuZWxlbWVudHMo
KTsKKyAgICByZXR1cm4gIShhID09IGIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL0Zvcm1EYXRhU3RyZWFtTWFj
Lm1tIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9Gb3JtRGF0YVN0cmVhbU1hYy5tbQpp
bmRleCAyN2VjZmQwOGFkNWFhYWI4NzU2ZmE1OTZkOTk2YmQyZjZlYzVkMDNmLi5lMzk2OGYyNmJl
NzVmMzE2OGY0Yzc0NTViNWE1ZTQ4ODEwMzQxYWJjIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvbWFjL0Zvcm1EYXRhU3RyZWFtTWFjLm1tCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9tYWMvRm9ybURhdGFTdHJlYW1NYWMubW0KQEAgLTE0Miw3ICsxNDIsNyBAQCBz
dGF0aWMgdm9pZCBjbG9zZUN1cnJlbnRTdHJlYW0oRm9ybVN0cmVhbUZpZWxkcyAqZm9ybSkKICAg
ICAgICAgQ0ZSZWxlYXNlKGZvcm0tPmN1cnJlbnRTdHJlYW0pOwogICAgICAgICBmb3JtLT5jdXJy
ZW50U3RyZWFtID0gTlVMTDsKICNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAgICAgICAgZm9ybS0+
Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoID0gQmxvYjo6dG9FbmRPZkZpbGU7CisgICAgICAgIGZv
cm0tPmN1cnJlbnRTdHJlYW1SYW5nZUxlbmd0aCA9IEZvcm1EYXRhRWxlbWVudDo6dG9FbmRPZkZp
bGU7CiAjZW5kaWYKICAgICB9CiAgICAgaWYgKGZvcm0tPmN1cnJlbnREYXRhKSB7CkBAIC0xNjEs
MjEgKzE2MSwxNyBAQCBzdGF0aWMgYm9vbCBhZHZhbmNlQ3VycmVudFN0cmVhbShGb3JtU3RyZWFt
RmllbGRzKiBmb3JtKQogCiAgICAgLy8gQ3JlYXRlIHRoZSBuZXcgc3RyZWFtLgogICAgIEZvcm1E
YXRhRWxlbWVudCYgbmV4dElucHV0ID0gZm9ybS0+cmVtYWluaW5nRWxlbWVudHMubGFzdCgpOwor
CisgICAgLy8gQ2hlY2sgaWYgdGhlIHVuZGVybHlpbmcgZGF0YSBoYXMgYmVjb21lIHN0YWxlIChl
LmcuIHRoZSBmaWxlIGhhcyBiZWVuIGNoYW5nZWQgc2luY2UgaXRzIHNuYXBzaG90IGhhcyBiZWVu
IHRha2VuKSBvciBub3QuCisgICAgaWYgKCFuZXh0SW5wdXQubV9pdGVtLT5pc1ZhbGlkKCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIGlmIChuZXh0SW5wdXQubV90eXBlID09IEZvcm1E
YXRhRWxlbWVudDo6ZGF0YSkgewogICAgICAgICBzaXplX3Qgc2l6ZSA9IG5leHRJbnB1dC5tX2Rh
dGEuc2l6ZSgpOwogICAgICAgICBjaGFyKiBkYXRhID0gbmV4dElucHV0Lm1fZGF0YS5yZWxlYXNl
QnVmZmVyKCk7CiAgICAgICAgIGZvcm0tPmN1cnJlbnRTdHJlYW0gPSBDRlJlYWRTdHJlYW1DcmVh
dGVXaXRoQnl0ZXNOb0NvcHkoMCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVSW50OCo+KGRhdGEp
LCBzaXplLCBrQ0ZBbGxvY2F0b3JOdWxsKTsKICAgICAgICAgZm9ybS0+Y3VycmVudERhdGEgPSBk
YXRhOwogICAgIH0gZWxzZSB7Ci0jaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgICAgIC8vIENo
ZWNrIGlmIHRoZSBmaWxlIGhhcyBiZWVuIGNoYW5nZWQgb3Igbm90IGlmIHJlcXVpcmVkLgotICAg
ICAgICBpZiAobmV4dElucHV0Lm1fZXhwZWN0ZWRGaWxlTW9kaWZpY2F0aW9uVGltZSAhPSBCbG9i
Ojpkb05vdENoZWNrRmlsZUNoYW5nZSkgewotICAgICAgICAgICAgdGltZV90IGZpbGVNb2RpZmlj
YXRpb25UaW1lOwotICAgICAgICAgICAgaWYgKCFnZXRGaWxlTW9kaWZpY2F0aW9uVGltZShuZXh0
SW5wdXQubV9maWxlbmFtZSwgZmlsZU1vZGlmaWNhdGlvblRpbWUpIHx8IGZpbGVNb2RpZmljYXRp
b25UaW1lICE9IHN0YXRpY19jYXN0PHRpbWVfdD4obmV4dElucHV0Lm1fZXhwZWN0ZWRGaWxlTW9k
aWZpY2F0aW9uVGltZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9
Ci0jZW5kaWYKLQogICAgICAgICBjb25zdCBTdHJpbmcmIHBhdGggPSBuZXh0SW5wdXQubV9zaG91
bGRHZW5lcmF0ZUZpbGUgPyBuZXh0SW5wdXQubV9nZW5lcmF0ZWRGaWxlbmFtZSA6IG5leHRJbnB1
dC5tX2ZpbGVuYW1lOwogICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGZpbGVuYW1lKEFk
b3B0Q0YsIHBhdGguY3JlYXRlQ0ZTdHJpbmcoKSk7CiAgICAgICAgIFJldGFpblB0cjxDRlVSTFJl
Zj4gZmlsZVVSTChBZG9wdENGLCBDRlVSTENyZWF0ZVdpdGhGaWxlU3lzdGVtUGF0aCgwLCBmaWxl
bmFtZS5nZXQoKSwga0NGVVJMUE9TSVhQYXRoU3R5bGUsIEZBTFNFKSk7CkBAIC0yMjIsNyArMjE4
LDcgQEAgc3RhdGljIHZvaWQqIGZvcm1DcmVhdGUoQ0ZSZWFkU3RyZWFtUmVmIHN0cmVhbSwgdm9p
ZCogY29udGV4dCkKICAgICBGb3JtU3RyZWFtRmllbGRzKiBuZXdJbmZvID0gbmV3IEZvcm1TdHJl
YW1GaWVsZHM7CiAgICAgbmV3SW5mby0+Y3VycmVudFN0cmVhbSA9IE5VTEw7CiAjaWYgRU5BQkxF
KEJMT0JfU0xJQ0UpCi0gICAgbmV3SW5mby0+Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoID0gQmxv
Yjo6dG9FbmRPZkZpbGU7CisgICAgbmV3SW5mby0+Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoID0g
Rm9ybURhdGFFbGVtZW50Ojp0b0VuZE9mRmlsZTsKICNlbmRpZgogICAgIG5ld0luZm8tPmN1cnJl
bnREYXRhID0gMDsKICAgICBuZXdJbmZvLT5mb3JtU3RyZWFtID0gc3RyZWFtOyAvLyBEb24ndCBy
ZXRhaW4uIFRoYXQgd291bGQgY3JlYXRlIGEgcmVmZXJlbmNlIGN5Y2xlLgpAQCAtMjcwLDcgKzI2
Niw3IEBAIHN0YXRpYyBDRkluZGV4IGZvcm1SZWFkKENGUmVhZFN0cmVhbVJlZiBzdHJlYW0sIFVJ
bnQ4KiBidWZmZXIsIENGSW5kZXggYnVmZmVyTGVuCiAgICAgd2hpbGUgKGZvcm0tPmN1cnJlbnRT
dHJlYW0pIHsKICAgICAgICAgQ0ZJbmRleCBieXRlc1RvUmVhZCA9IGJ1ZmZlckxlbmd0aDsKICNp
ZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAgICAgICAgaWYgKGZvcm0tPmN1cnJlbnRTdHJlYW1SYW5n
ZUxlbmd0aCAhPSBCbG9iOjp0b0VuZE9mRmlsZSAmJiBmb3JtLT5jdXJyZW50U3RyZWFtUmFuZ2VM
ZW5ndGggPCBieXRlc1RvUmVhZCkKKyAgICAgICAgaWYgKGZvcm0tPmN1cnJlbnRTdHJlYW1SYW5n
ZUxlbmd0aCAhPSBGb3JtRGF0YUVsZW1lbnQ6OnRvRW5kT2ZGaWxlICYmIGZvcm0tPmN1cnJlbnRT
dHJlYW1SYW5nZUxlbmd0aCA8IGJ5dGVzVG9SZWFkKQogICAgICAgICAgICAgYnl0ZXNUb1JlYWQg
PSBzdGF0aWNfY2FzdDxDRkluZGV4Pihmb3JtLT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5ndGgpOwog
I2VuZGlmCiAgICAgICAgIENGSW5kZXggYnl0ZXNSZWFkID0gQ0ZSZWFkU3RyZWFtUmVhZChmb3Jt
LT5jdXJyZW50U3RyZWFtLCBidWZmZXIsIGJ5dGVzVG9SZWFkKTsKQEAgLTI4Myw3ICsyNzksNyBA
QCBzdGF0aWMgQ0ZJbmRleCBmb3JtUmVhZChDRlJlYWRTdHJlYW1SZWYgc3RyZWFtLCBVSW50OCog
YnVmZmVyLCBDRkluZGV4IGJ1ZmZlckxlbgogICAgICAgICAgICAgKmF0RU9GID0gRkFMU0U7CiAg
ICAgICAgICAgICBmb3JtLT5ieXRlc1NlbnQgKz0gYnl0ZXNSZWFkOwogI2lmIEVOQUJMRShCTE9C
X1NMSUNFKQotICAgICAgICAgICAgaWYgKGZvcm0tPmN1cnJlbnRTdHJlYW1SYW5nZUxlbmd0aCAh
PSBCbG9iOjp0b0VuZE9mRmlsZSkKKyAgICAgICAgICAgIGlmIChmb3JtLT5jdXJyZW50U3RyZWFt
UmFuZ2VMZW5ndGggIT0gRm9ybURhdGFFbGVtZW50Ojp0b0VuZE9mRmlsZSkKICAgICAgICAgICAg
ICAgICBmb3JtLT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5ndGggLT0gYnl0ZXNSZWFkOwogI2VuZGlm
CiAKQEAgLTQwMCw3ICszOTYsNyBAQCB2b2lkIHNldEhUVFBCb2R5KE5TTXV0YWJsZVVSTFJlcXVl
c3QgKnJlcXVlc3QsIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGZvcm1EYXRhKQogICAgICAgICBlbHNl
IHsKICNpZiBFTkFCTEUoQkxPQl9TTElDRSkKICAgICAgICAgICAgIC8vIElmIHdlJ3JlIHNlbmRp
bmcgdGhlIGZpbGUgcmFuZ2UsIHVzZSB0aGUgZXhpc3RpbmcgcmFuZ2UgbGVuZ3RoIGZvciBub3cu
IFdlIHdpbGwgZGV0ZWN0IGlmIHRoZSBmaWxlIGhhcyBiZWVuIGNoYW5nZWQgcmlnaHQgYmVmb3Jl
IHdlIHJlYWQgdGhlIGZpbGUgYW5kIGFib3J0IHRoZSBvcGVyYXRpb24gaWYgbmVjZXNzYXJ5Lgot
ICAgICAgICAgICAgaWYgKGVsZW1lbnQubV9maWxlTGVuZ3RoICE9IEJsb2I6OnRvRW5kT2ZGaWxl
KSB7CisgICAgICAgICAgICBpZiAoZWxlbWVudC5tX2ZpbGVMZW5ndGggIT0gRm9ybURhdGFFbGVt
ZW50Ojp0b0VuZE9mRmlsZSkgewogICAgICAgICAgICAgICAgIGxlbmd0aCArPSBlbGVtZW50Lm1f
ZmlsZUxlbmd0aDsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcCBiL1dlYkNvcmUveG1sL1hN
TEh0dHBSZXF1ZXN0LmNwcAppbmRleCA1Y2RlMjRkZTI5ZGI0NDIxMDAwMWEzMDIzMjQ0Y2E0Y2Nk
MjVjZmJiLi5mNjFkNzFkMjRlNjM5MzVlYjg1YzBiMzVkYmZjZmI5N2EwNTljMmRmIDEwMDY0NAot
LS0gYS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKKysrIGIvV2ViQ29yZS94bWwvWE1M
SHR0cFJlcXVlc3QuY3BwCkBAIC00NzgsMTEgKzQ3OCw3IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6
OnNlbmQoQmxvYiogYm9keSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgICAgIC8vIEZJWE1FOiBT
aG91bGQgd2Ugc2V0IGEgQ29udGVudC1UeXBlIGlmIG9uZSBpcyBub3Qgc2V0LgogICAgICAgICAv
LyBGSVhNRTogYWRkIHN1cHBvcnQgZm9yIHVwbG9hZGluZyBidW5kbGVzLgogICAgICAgICBtX3Jl
cXVlc3RFbnRpdHlCb2R5ID0gRm9ybURhdGE6OmNyZWF0ZSgpOwotI2lmIEVOQUJMRShCTE9CX1NM
SUNFKQotICAgICAgICBtX3JlcXVlc3RFbnRpdHlCb2R5LT5hcHBlbmRGaWxlUmFuZ2UoYm9keS0+
cGF0aCgpLCBib2R5LT5zdGFydCgpLCBib2R5LT5sZW5ndGgoKSwgYm9keS0+bW9kaWZpY2F0aW9u
VGltZSgpKTsKLSNlbHNlCi0gICAgICAgIG1fcmVxdWVzdEVudGl0eUJvZHktPmFwcGVuZEZpbGUo
Ym9keS0+cGF0aCgpLCBmYWxzZSk7Ci0jZW5kaWYKKyAgICAgICAgbV9yZXF1ZXN0RW50aXR5Qm9k
eS0+YXBwZW5kQmxvYihib2R5KTsKICAgICB9CiAKICAgICBjcmVhdGVSZXF1ZXN0KGVjKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56286</attachid>
            <date>2010-05-17 16:16:39 -0700</date>
            <delta_ts>2010-05-17 18:52:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-39083-20100517161638.patch</filename>
            <type>text/plain</type>
            <size>69215</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YzE4YmQ4MDk3YjQxYTRhMWVjODBmOWZmZTBlNjdmNDdiMGIxNTZiZS4uN2E4ZGZjY2ViMDEwNWI4
ZTMzNWZlMmJlMDY0Y2M4MmNlOTliNDAzNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4NyBAQAorMjAxMC0wNS0xNyAgS2lu
dWtvIFlhc3VkYSAgPGtpbnVrb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVmYWN0b3IgRm9ybURhdGEgYW5kIEJsb2IgZm9y
IGJldHRlciBzdXBwb3J0IG9mIEJsb2JzIHN5bnRoZXNpemVkIGJ5IEJsb2JCdWlsZGVyLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzkwODMKKworICAg
ICAgICBJbnRyb2R1Y2VzIGEgbmV3IGNsYXNzIEJsb2JJdGVtIGFzIGEgYmFzaWMgY29tcG9uZW50
IG9mIEJsb2IgYW5kIEZvcm1EYXRhLAorICAgICAgICBhbmQgbWFrZXMgQmxvYiBhcyBhIGNvbGxl
Y3Rpb24gb2YgQmxvYkl0ZW1zLgorICAgICAgICBGaWxlIHdvdWxkIGJlY29tZSBhIHNwZWNpYWwg
dHlwZSBvZiBCbG9iIHRoYXQgY29udGFpbnMgb25seSBvbmUgRmlsZUJsb2JJdGVtLgorICAgICAg
ICBGb3JtRGF0YUVsZW1lbnQgYW5kIEZvcm1EYXRhTGlzdDo6SXRlbSB3b3VsZCBiZWNvbWUgYSB3
cmFwcGVyIG9mIEJsb2JJdGVtLgorCisgICAgICAgIFRoZSBwYXRjaCBkb2Vzbid0IHN1cHBvcnQg
dGhlIGxhdGVzdCBGaWxlIEFQSSBjaGFuZ2VzIChlLmcuIHR5cGUsIHVybCBhbmQKKyAgICAgICAg
c2xpY2UncyB0eXBlIHBhcmFtZXRlcnMpIGFuZCBzaG91bGQgbm90IGNoYW5nZSBhbnkgb2YgaXRz
IGV4aXN0aW5nIGJlaGF2aW9ycy4KKworICAgICAgICBUaGUgZXhpc3RpbmcgdGVzdHMgc2hvdWxk
IGJlIGFibGUgdG8gYmUgdXNlZCBmb3IgcmVncmVzc2lvbjoKKyAgICAgICAgLSBodHRwL3Rlc3Rz
L2xvY2FsL2Zvcm1kYXRhL3NlbmQtZm9ybS1kYXRhLXdpdGgtc2xpY2VkLWZpbGUuaHRtbAorICAg
ICAgICAtIGh0dHAvdGVzdHMvbG9jYWwvc2VuZC1zbGljZWQtZHJhZ2dlZC1maWxlLmh0bWwKKwor
ICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAg
ICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
ajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogYmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlppZ1phZzo6U2VyaWFsaXplcjo6d3JpdGVCbG9iKToKKyAgICAgICAgKFdlYkNvcmU6Olpp
Z1phZzo6UmVhZGVyOjpyZWFkQmxvYik6CisgICAgICAgICogaHRtbC9CbG9iLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkJsb2I6OkJsb2IpOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6c2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjpwYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6
OmFwcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjpzbGljZSk6CisgICAgICAgICogaHRt
bC9CbG9iLmg6CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6QmxvYjo6Y3JlYXRlRnJvbUZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6dHlw
ZSk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjppdGVtcyk6CisgICAgICAgIChXZWJDb3JlOjpC
bG9iOjpCbG9iKToKKyAgICAgICAgKiBodG1sL0Jsb2JJdGVtLmNwcDogQWRkZWQuCisgICAgICAg
ICogaHRtbC9CbG9iSXRlbS5oOiBBZGRlZC4KKyAgICAgICAgKiBodG1sL0ZpbGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Z2V0RmlsZVR5cGVGcm9tUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpG
aWxlOjpGaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGU6Om5hbWUpOgorICAgICAgICAqIGh0
bWwvRmlsZS5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsZTo6ZmlsZU5hbWUpOgorICAgICAgICAq
IGh0bWwvRmlsZVN0cmVhbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWxlU3RyZWFtOjpvcGVu
Rm9yUmVhZCk6CisgICAgICAgICogaHRtbC9Gb3JtRGF0YUxpc3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9ybURhdGFMaXN0OjphcHBlbmRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Rm9y
bURhdGFMaXN0OjphcHBlbmRCbG9iKToKKyAgICAgICAgKiBodG1sL0Zvcm1EYXRhTGlzdC5oOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGFMaXN0OjpJdGVtOjpJdGVtKToKKyAgICAgICAgKFdl
YkNvcmU6OkZvcm1EYXRhTGlzdDo6SXRlbTo6aXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpGb3Jt
RGF0YUxpc3Q6Okl0ZW06OmRhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvRm9ybURh
dGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGFFbGVtZW50OjpGb3JtRGF0YUVsZW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpGb3JtRGF0YTo6ZGVlcENvcHkpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6OmFw
cGVuZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6OmFwcGVuZFN0cmluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YTo6YXBwZW5kRmlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpGb3JtRGF0YTo6YXBwZW5kQmxvYik6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YTo6YXBw
ZW5kRmlsZVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjphcHBlbmRET01Gb3Jt
RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5oOgorICAgICAgICAo
V2ViQ29yZTo6Rm9ybURhdGFFbGVtZW50OjpGb3JtRGF0YUVsZW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9ybURhdGFFbGVtZW50OjppdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRh
RWxlbWVudDo6QmxvYkl0ZW1XcmFwcGVyOjpCbG9iSXRlbVdyYXBwZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9ybURhdGFFbGVtZW50OjpCbG9iSXRlbVdyYXBwZXI6OnNpemUpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9ybURhdGFFbGVtZW50OjpCbG9iSXRlbVdyYXBwZXI6OmRhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9ybURhdGFFbGVtZW50OjpCbG9iSXRlbVdyYXBwZXI6OnJlbGVhc2VCdWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpv
cGVyYXRvciE9KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL21hYy9Gb3JtRGF0YVN0cmVh
bU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OmNsb3NlQ3VycmVudFN0cmVhbSk6CisgICAgICAg
IChXZWJDb3JlOjphZHZhbmNlQ3VycmVudFN0cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjpmb3Jt
Q3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmZvcm1SZWFkKToKKyAgICAgICAgKFdlYkNvcmU6
OnNldEhUVFBCb2R5KToKKyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OnNlbmQpOgorCiAyMDEwLTA1LTE3ICBBbnR0aSBL
b2l2aXN0byAgPGtvaXZpc3RvQGlraS5maT4KIAogICAgICAgICBUaGlzIHdhcyBtaXNzaW5nIGZy
b20gcHJldmlvdXMgY29tbWl0LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBi
L1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggNWUwYTEyNjNhMjE3NTdmMTU3MTdhODFhYWQ2
Mjc2ZDRjNWRmNjNhNS4uZTRjZGIwYTUxMDZlMGVmNzU0MTIzNmQyM2MyZDBmNTY2MDk4ZTVkMSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmFtCkBAIC0xMDI1LDYgKzEwMjUsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNv
cmUvaGlzdG9yeS9QYWdlQ2FjaGUuaCBcCiAJV2ViQ29yZS9odG1sL0Jsb2IuY3BwIFwKIAlXZWJD
b3JlL2h0bWwvQmxvYi5oIFwKKwlXZWJDb3JlL2h0bWwvQmxvYkl0ZW0uY3BwIFwKKwlXZWJDb3Jl
L2h0bWwvQmxvYkl0ZW0uaCBcCiAJV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNDb250ZXh0QXR0
cmlidXRlcy5oIFwKIAlXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0dyYWRpZW50LmNwcCBcCiAJ
V2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNHcmFkaWVudC5oIFwKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvV2ViQ29yZS5neXBpIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggOTFkN2VkYWI1YTUz
MDc0NTY3ZjUwMWMxNjI2ZjczMzY2MjkyZmJiNi4uYWRhZjE5NGQ0NDgzMGYxZmRiYzNlOTgwZjE1
MGNhNzNhYWQ4YTkwOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKQEAgLTEzNzUsNiArMTM3NSw4IEBACiAgICAgICAgICAgICAnaGlz
dG9yeS9QYWdlQ2FjaGUuaCcsCiAgICAgICAgICAgICAnaHRtbC9CbG9iLmNwcCcsCiAgICAgICAg
ICAgICAnaHRtbC9CbG9iLmgnLAorICAgICAgICAgICAgJ2h0bWwvQmxvYkl0ZW0uY3BwJywKKyAg
ICAgICAgICAgICdodG1sL0Jsb2JJdGVtLmgnLAogICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0Fy
cmF5QnVmZmVyVmlldy5jcHAnLAogICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0FycmF5QnVmZmVy
Vmlldy5oJywKICAgICAgICAgICAgICdodG1sL2NhbnZhcy9BcnJheUJ1ZmZlci5jcHAnLApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXgg
OTMzMDgxYWMyNjliNjE4OWZjY2NkMmFkZTQyYzI1YWRiYmZmNzBiYi4uMzcxZDE2MDYxMDNjZGQz
N2I5M2VmZGZiMDVhMzMxZWI0ZWFlMjM0YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnBy
bworKysgYi9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC01ODYsNiArNTg2LDcgQEAgU09VUkNFUyAr
PSBcCiAgICAgaGlzdG9yeS9xdC9IaXN0b3J5SXRlbVF0LmNwcCBcCiAgICAgaGlzdG9yeS9QYWdl
Q2FjaGUuY3BwIFwKICAgICBodG1sL0Jsb2IuY3BwIFwKKyAgICBodG1sL0Jsb2JJdGVtLmNwcCBc
CiAgICAgaHRtbC9jYW52YXMvQ2FudmFzR3JhZGllbnQuY3BwIFwKICAgICBodG1sL2NhbnZhcy9D
YW52YXNQYXR0ZXJuLmNwcCBcCiAgICAgaHRtbC9jYW52YXMvQ2FudmFzUGl4ZWxBcnJheS5jcHAg
XApAQCAtMTMwNSw2ICsxMzA2LDcgQEAgSEVBREVSUyArPSBcCiAgICAgaGlzdG9yeS9IaXN0b3J5
SXRlbS5oIFwKICAgICBoaXN0b3J5L1BhZ2VDYWNoZS5oIFwKICAgICBodG1sL0Jsb2IuaCBcCisg
ICAgaHRtbC9CbG9iSXRlbS5oIFwKICAgICBodG1sL2NhbnZhcy9DYW52YXNHcmFkaWVudC5oIFwK
ICAgICBodG1sL2NhbnZhcy9DYW52YXNQYXR0ZXJuLmggXAogICAgIGh0bWwvY2FudmFzL0NhbnZh
c1BpeGVsQXJyYXkuaCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCBk
OTMwMmE5OWJlNTQ4MGVhNjAzNDk4NGE0MDk1YWNkMDU0NTE5ZWUwLi5hNjZjYzZiYzJkNmRkNDA4
NzYyZTU3MzI1OTdmNDNjOTZlMzkyMjFjIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUudmNw
cm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2oKQEAgLTMwNTczLDYgKzMwNTczLDE0IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8
RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcQmxvYkl0ZW0uY3BwIg0KKwkJCQk+DQor
CQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxCbG9iSXRl
bS5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0i
Li5caHRtbFxjYW52YXNcQ2FudmFzR3JhZGllbnQuY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZWRiZTk5NWRk
ZWMwMTAwZWM4OWI2ZDAzZDI5NDNlYjk1ZmUzY2EzNy4uN2IzNTc4MDNlMzg2ZTJiZTI0YThlMGRj
MmUxMzU2ZmFmNDY0NDlmYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKQEAgLTY2NSw3ICs2NjUsNyBAQAogCQkyRTk0RjQ1MTExOTIwOTZBMDBCN0Y3NUQgLyog
RmlsZVJlYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMkU5NEYzQ0MxMThCOTA4RTAwQjdGNzVEIC8qIEZpbGVSZWFkZXIuaCAqLzsgfTsKIAkJMkVB
NzY4MDQwRkU3MTI2NDAwQUI5QzhBIC8qIFdvcmtlclNjcmlwdExvYWRlckNsaWVudC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkVBNzY4MDMwRkU3MTI2
NDAwQUI5QzhBIC8qIFdvcmtlclNjcmlwdExvYWRlckNsaWVudC5oICovOyB9OwogCQkyRUFGQUYw
RTEwRTJBRjJEMDA3RUQzRDYgLyogQmxvYi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyRUFGQUYwQjEwRTJBRjJEMDA3RUQzRDYgLyogQmxvYi5jcHAg
Ki87IH07Ci0JCTJFQUZBRjBGMTBFMkFGMkQwMDdFRDNENiAvKiBCbG9iLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRUFGQUYwQzEwRTJBRjJEMDA3RUQz
RDYgLyogQmxvYi5oICovOyB9OworCQkyRUFGQUYwRjEwRTJBRjJEMDA3RUQzRDYgLyogQmxvYi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkVBRkFGMEMx
MEUyQUYyRDAwN0VEM0Q2IC8qIEJsb2IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkyRUNGN0FEQzEwMTYyQjM4MDA0MjdERTcgLyogSlNFcnJvckV2
ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJF
Q0Y3QURBMTAxNjJCMzgwMDQyN0RFNyAvKiBKU0Vycm9yRXZlbnQuY3BwICovOyB9OwogCQkyRUNG
N0FERDEwMTYyQjM4MDA0MjdERTcgLyogSlNFcnJvckV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRUNGN0FEQjEwMTYyQjM4MDA0MjdERTcgLyog
SlNFcnJvckV2ZW50LmggKi87IH07CiAJCTJFQ0Y3QUUxMTAxNjJCNTgwMDQyN0RFNyAvKiBFcnJv
ckV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDJFQ0Y3QURFMTAxNjJCNTgwMDQyN0RFNyAvKiBFcnJvckV2ZW50LmNwcCAqLzsgfTsKQEAgLTIy
NTgsNiArMjI1OCw4IEBACiAJCTg1Rjc0RTBBMEFBOERGOEMwMDBEQzI4NCAvKiBET01DU1NVbmtu
b3duUnVsZS5oIGluIENvcHkgR2VuZXJhdGVkIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gODUwMzJERDUwQUE4QzlCRTAwN0QzQjdEIC8qIERPTUNTU1Vua25vd25S
dWxlLmggKi87IH07CiAJCTg1RkYzMTVBMEFBRkJGQ0IwMDM3NEYzOCAvKiBET01LZXlib2FyZEV2
ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NUZG
MzE1ODBBQUZCRkNCMDAzNzRGMzggLyogRE9NS2V5Ym9hcmRFdmVudC5oICovOyB9OwogCQk4NUZG
MzE1QjBBQUZCRkNCMDAzNzRGMzggLyogRE9NS2V5Ym9hcmRFdmVudC5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg1RkYzMTU5MEFBRkJGQ0IwMDM3NEYz
OCAvKiBET01LZXlib2FyZEV2ZW50Lm1tICovOyB9OworCQk4OTE4MTQzMDExODdDNEI0MDBCRjY5
OEEgLyogQmxvYkl0ZW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gODkxODE0MkIxMTg3QzRCNDAwQkY2OThBIC8qIEJsb2JJdGVtLmNwcCAqLzsgfTsK
KwkJODkxODE0MzExMTg3QzRCNDAwQkY2OThBIC8qIEJsb2JJdGVtLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4OTE4MTQyQzExODdDNEI0MDBCRjY5OEEg
LyogQmxvYkl0ZW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk4OTUyNTM1MjExNjQxQjM0MDBDQUJGMDAgLyogRmlsZVRocmVhZC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4OTUyNTM1MDExNjQxQjM0
MDBDQUJGMDAgLyogRmlsZVRocmVhZC5jcHAgKi87IH07CiAJCTg5NTI1MzUzMTE2NDFCMzQwMENB
QkYwMCAvKiBGaWxlVGhyZWFkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA4OTUyNTM1MTExNjQxQjM0MDBDQUJGMDAgLyogRmlsZVRocmVhZC5oICovOyB9
OwogCQk4OTUyNTNENzExNkM0QzY4MDBDQUJGMDAgLyogRmlsZVN0cmVhbS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4OTUyNTNENDExNkM0QzY4MDBD
QUJGMDAgLyogRmlsZVN0cmVhbS5jcHAgKi87IH07CkBAIC03ODIzLDYgKzc4MjUsOCBAQAogCQk4
NUY1NkE3OTBBOThDRTM3MDBBREI2MEEgLyogRE9NUHJvY2Vzc2luZ0luc3RydWN0aW9uLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IERPTVByb2Nlc3NpbmdJbnN0
cnVjdGlvbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODVGRjMxNTgwQUFGQkZD
QjAwMzc0RjM4IC8qIERPTUtleWJvYXJkRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IERPTUtleWJvYXJkRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJODVGRjMxNTkwQUFGQkZDQjAwMzc0RjM4IC8qIERPTUtleWJvYXJkRXZlbnQubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRE9NS2V5Ym9hcmRFdmVudC5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODkxODE0MkIxMTg3QzRCNDAwQkY2OThBIC8q
IEJsb2JJdGVtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJsb2JJ
dGVtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODkxODE0MkMxMTg3QzRCNDAw
QkY2OThBIC8qIEJsb2JJdGVtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJs
b2JJdGVtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg5NTI1MzUwMTE2NDFCMzQw
MENBQkYwMCAvKiBGaWxlVGhyZWFkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEZpbGVUaHJlYWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4OTUy
NTM1MTExNjQxQjM0MDBDQUJGMDAgLyogRmlsZVRocmVhZC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBGaWxlVGhyZWFkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTg5NTI1M0Q0MTE2QzRDNjgwMENBQkYwMCAvKiBGaWxlU3RyZWFtLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZpbGVTdHJlYW0uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMTMyNjUsNiArMTMyNjksOCBAQAogCQkJCTJFQUZBRjBCMTBFMkFGMkQw
MDdFRDNENiAvKiBCbG9iLmNwcCAqLywKIAkJCQkyRUFGQUYwQzEwRTJBRjJEMDA3RUQzRDYgLyog
QmxvYi5oICovLAogCQkJCTJFQUZBRjBEMTBFMkFGMkQwMDdFRDNENiAvKiBCbG9iLmlkbCAqLywK
KwkJCQk4OTE4MTQyQjExODdDNEI0MDBCRjY5OEEgLyogQmxvYkl0ZW0uY3BwICovLAorCQkJCTg5
MTgxNDJDMTE4N0M0QjQwMEJGNjk4QSAvKiBCbG9iSXRlbS5oICovLAogCQkJCTkzQzQ0MUVEMEY4
MTNBMUEwMEMxQTYzNCAvKiBDb2xsZWN0aW9uQ2FjaGUuY3BwICovLAogCQkJCTkzQzQ0MUVFMEY4
MTNBMUEwMEMxQTYzNCAvKiBDb2xsZWN0aW9uQ2FjaGUuaCAqLywKIAkJCQk5M0M0NDFGRjBGODEz
QUUxMDBDMUE2MzQgLyogQ29sbGVjdGlvblR5cGUuaCAqLywKQEAgLTE2NzUxLDYgKzE2NzU3LDcg
QEAKIAkJCQlCQzVFQjkyMDBFODIwNDA4MDBCMjU5NjUgLyogQmluZGluZ1VSSS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTg5OTQzMjgwQjQyMzM4ODAwRDdDODAyIC8qIEJpdG1hcEltYWdlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkyRUFGQUYwRjEwRTJBRjJEMDA3RUQzRDYgLyogQmxvYi5oIGluIEhl
YWRlcnMgKi8sCisJCQkJODkxODE0MzExMTg3QzRCNDAwQkY2OThBIC8qIEJsb2JJdGVtLmggaW4g
SGVhZGVycyAqLywKIAkJCQk5M0YxOTlCRTA4MjQ1RTU5MDAxRTlBQkMgLyogQmxvY2tFeGNlcHRp
b25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzVFQjVFMTBFODFCRTg3MDBCMjU5NjUgLyogQm9y
ZGVyRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1RUI1REIwRTgxQjdFQTAwQjI1OTY1IC8q
IEJvcmRlclZhbHVlLmggaW4gSGVhZGVycyAqLywKQEAgLTE3OTk5LDYgKzE4MDA2LDcgQEAKIAkJ
CQlGRTgwRDdBQTBFOUMxRUQyMDAwRDZGNzUgLyogSlNDdXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJh
Y2suaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMzQxN0M5MENFQ0ZGMjUwMDQ5Q0JERSAvKiBKU0N1
c3RvbVZvaWRDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTEwQjkzN0MwQjczQzAwQTAw
M0VEODkwIC8qIEpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlC
NTlERDY5OTExOTAyOUU1MDA3RTk2ODQgLyogSlNEYXRhYmFzZUNhbGxiYWNrLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxQUU4MkY5MDBDQUFGQTlEMDAyMjM3QUUgLyogSlNEYXRhYmFzZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkM3N0QxNkEwRkYxOUY1NjAwNzA4ODdCIC8qIEpTRGF0YUdyaWRDb2x1
bW4uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNzdEMTZDMEZGMTlGNTYwMDcwODg3QiAvKiBKU0Rh
dGFHcmlkQ29sdW1uTGlzdC5oIGluIEhlYWRlcnMgKi8sCkBAIC0xODE2Myw3ICsxODE3MSwxMSBA
QAogCQkJCUJDODI0MzI5MEQwQ0U4QTIwMDQ2MEM4RiAvKiBKU1NRTEVycm9yLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxQUU4MkZFRDBDQUIwN0VFMDAyMjM3QUUgLyogSlNTUUxSZXN1bHRTZXQuaCBp
biBIZWFkZXJzICovLAogCQkJCTFBRkUxMTlBMENCRkZDQzQwMDMwMTdGQSAvKiBKU1NRTFJlc3Vs
dFNldFJvd0xpc3QuaCBpbiBIZWFkZXJzICovLAorCQkJCUI1OURENkE1MTE5MDJBNjIwMDdFOTY4
NCAvKiBKU1NRTFN0YXRlbWVudENhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKKwkJCQlCNTlERDZB
OTExOTAyQTcxMDA3RTk2ODQgLyogSlNTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzgyNDMyQTBEMENFOEEyMDA0NjBDOEYgLyogSlNTUUxUcmFuc2FjdGlv
bi5oIGluIEhlYWRlcnMgKi8sCisJCQkJQjU5REQ2OUQxMTkwMkE0MjAwN0U5Njg0IC8qIEpTU1FM
VHJhbnNhY3Rpb25DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCisJCQkJQjU5REQ2QTExMTkwMkE1
MjAwN0U5Njg0IC8qIEpTU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1MUUwQkFFQjBEQTU1RDRBMDBBOUU0MTcgLyogSlNTdG9yYWdlRXZlbnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRjUwMjZBMTAyQkE5NDMwMDY2RjM5QSAvKiBKU1N0eWxlTWVkaWEu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDRTAxMzlCMEMwQkVGMTgwMDQzODYwQSAvKiBKU1N0eWxl
U2hlZXQuaCBpbiBIZWFkZXJzICovLApAQCAtMTkyMTEsMTEgKzE5MjIzLDYgQEAKIAkJCQlFMUJF
NTEyRTBDRjZDNTEyMDAyRUE5NTkgLyogWFNMVFVuaWNvZGVTb3J0LmggaW4gSGVhZGVycyAqLywK
IAkJCQk5N0RENEQ4NzBGREY0RDZFMDBFQ0Y5QTQgLyogWFNTQXVkaXRvci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQ0UxNzJFMDExMTM2RThDRTAwNjJBNTMzIC8qIFpvb21Nb2RlLmggaW4gSGVhZGVy
cyAqLywKLQkJCQlCNTlERDY5OTExOTAyOUU1MDA3RTk2ODQgLyogSlNEYXRhYmFzZUNhbGxiYWNr
LmggaW4gSGVhZGVycyAqLywKLQkJCQlCNTlERDY5RDExOTAyQTQyMDA3RTk2ODQgLyogSlNTUUxU
cmFuc2FjdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKLQkJCQlCNTlERDZBMTExOTAyQTUy
MDA3RTk2ODQgLyogSlNTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaCBpbiBIZWFkZXJzICov
LAotCQkJCUI1OURENkE1MTE5MDJBNjIwMDdFOTY4NCAvKiBKU1NRTFN0YXRlbWVudENhbGxiYWNr
LmggaW4gSGVhZGVycyAqLywKLQkJCQlCNTlERDZBOTExOTAyQTcxMDA3RTk2ODQgLyogSlNTUUxT
dGF0ZW1lbnRFcnJvckNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQlCNTVENUFBNDExOTEz
MUZDMDBCQ0MzMTUgLyogSlNTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQjU4Q0VCNjkxMTkxMzYwNzAwMkE2NzkwIC8qIEpTRGF0YWJhc2VTeW5jLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCNThDRUI2RDExOTEzNjFDMDAyQTY3OTAgLyogSlNTUUxUcmFuc2Fj
dGlvblN5bmMuaCBpbiBIZWFkZXJzICovLApAQCAtMTk1NjIsNiArMTk1NjksNyBAQAogCQkJCUJD
NUVCOTFGMEU4MjA0MDgwMEIyNTk2NSAvKiBCaW5kaW5nVVJJLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE4OTk0MzI5MEI0MjMzODgwMEQ3QzgwMiAvKiBCaXRtYXBJbWFnZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkyRUFGQUYwRTEwRTJBRjJEMDA3RUQzRDYgLyogQmxvYi5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQk4OTE4MTQzMDExODdDNEI0MDBCRjY5OEEgLyogQmxvYkl0ZW0uY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJOTNGMTlBRTEwODI0NUU1OTAwMUU5QUJDIC8qIEJsb2NrRXhjZXB0aW9u
cy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDRUE0ODU0MDk3RDkzMDIwMDk0QzlFNCAvKiBicmVh
a19saW5lcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzMwOUREQTA5OUU2NDkyMDA1NkU1ODEg
LyogQnJlYWtCbG9ja3F1b3RlQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTIwMzEwLDgg
KzIwMzE4LDkgQEAKIAkJCQk1MUVDOTI2NTBDRTkwREQ0MDBGOTAzMDggLyogSlNDdXN0b21TUUxT
dGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBMzQxN0NBMENF
Q0ZGMjUwMDQ5Q0JERSAvKiBKU0N1c3RvbVZvaWRDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlFMTBCOTNDMzBCNzNDMjkxMDAzRUQ4OTAgLyogSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMUFFODJGOEYwQ0FBRkE5RDAwMjIzN0FFIC8qIEpTRGF0
YWJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQjU5REQ2OUExMTkwMjlFNTAwN0U5Njg0IC8q
IEpTRGF0YWJhc2VDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0NFNThBQzEwNjFF
OENGMDA4RkIzNUEgLyogSlNEYXRhYmFzZUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkx
QUU4MkY4RjBDQUFGQTlEMDAyMjM3QUUgLyogSlNEYXRhYmFzZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlCQzc3RDE2OTBGRjE5RjU2MDA3MDg4N0IgLyogSlNEYXRhR3JpZENvbHVtbi5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlCQzc3RDE2QjBGRjE5RjU2MDA3MDg4N0IgLyogSlNEYXRhR3JpZENv
bHVtbkxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM3N0QxNTIwRkYxOUM3MzAwNzA4ODdC
IC8qIEpTRGF0YUdyaWRDb2x1bW5MaXN0Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjA1
MjEsOCArMjA1MzAsMTIgQEAKIAkJCQkxQUU4MkZFQzBDQUIwN0VFMDAyMjM3QUUgLyogSlNTUUxS
ZXN1bHRTZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFGRTExOTkwQ0JGRkNDNDAwMzAxN0ZB
IC8qIEpTU1FMUmVzdWx0U2V0Um93TGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MURDRTgw
MjBDQUM5RjFDMDA0ODgzNTggLyogSlNTUUxSZXN1bHRTZXRSb3dMaXN0Q3VzdG9tLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCUI1OURENkE2MTE5MDJBNjIwMDdFOTY4NCAvKiBKU1NRTFN0YXRlbWVu
dENhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUI1OURENkFBMTE5MDJBNzEwMDdFOTY4
NCAvKiBKU1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NTE0Qzc2MzgwQ0U5MjI1RTAwN0VGM0NEIC8qIEpTU1FMVHJhbnNhY3Rpb24uY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJQjU5REQ2OUUxMTkwMkE0MjAwN0U5Njg0IC8qIEpTU1FMVHJhbnNhY3Rpb25D
YWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUQyMzE2RTBDRDI2OUU3MDBDMUYxOTQg
LyogSlNTUUxUcmFuc2FjdGlvbkN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCNTlERDZB
MjExOTAyQTUyMDA3RTk2ODQgLyogSlNTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNTFFM0Y5RDYwREEwNUUxRDAwMjUwOTExIC8qIEpTU3RvcmFnZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUQwQzUxNjBEQUE5MEI3MDAzQjM4MzEgLyogSlNTdG9y
YWdlQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxRTBCQUVBMERBNTVENEEwMEE5RTQx
NyAvKiBKU1N0b3JhZ2VFdmVudC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTIxNDkzLDExICsyMTUw
Niw2IEBACiAJCQkJOTNGMTlCMDUwODI0NUU1OTAwMUU5QUJDIC8qIFhTTFRQcm9jZXNzb3JMaWJ4
c2x0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxQkU1MTJEMENGNkM1MTIwMDJFQTk1OSAvKiBY
U0xUVW5pY29kZVNvcnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTdERDREODYwRkRGNEQ2RTAw
RUNGOUE0IC8qIFhTU0F1ZGl0b3IuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQjU5REQ2OUExMTkw
MjlFNTAwN0U5Njg0IC8qIEpTRGF0YWJhc2VDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKLQkJ
CQlCNTlERDY5RTExOTAyQTQyMDA3RTk2ODQgLyogSlNTUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCUI1OURENkEyMTE5MDJBNTIwMDdFOTY4NCAvKiBKU1NRTFRy
YW5zYWN0aW9uRXJyb3JDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlCNTlERDZBNjEx
OTAyQTYyMDA3RTk2ODQgLyogSlNTUUxTdGF0ZW1lbnRDYWxsYmFjay5jcHAgaW4gU291cmNlcyAq
LywKLQkJCQlCNTlERDZBQTExOTAyQTcxMDA3RTk2ODQgLyogSlNTUUxTdGF0ZW1lbnRFcnJvckNh
bGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUI1NUQ1QUE1MTE5MTMxRkMwMEJDQzMxNSAv
KiBKU1NRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUI1
NUQ1QUE4MTE5MTMyNTAwMEJDQzMxNSAvKiBKU0RhdGFiYXNlU3luY0N1c3RvbS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlCNTVENUFBOTExOTEzMjUwMDBCQ0MzMTUgLyogSlNTUUxUcmFuc2FjdGlv
blN5bmNDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Nl
cmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKaW5kZXggNTBhYzg2YmFjZTQxZWM1YzFiMTEyNWRkNDRj
NmI2ZjExZTYxODZhOC4uOTA5ZThlZDE2MGViZDU0MGI0ZGI5MGFhN2UwNWM2YWZiMDMxZjNkZCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3Bw
CisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcApAQCAt
NTU4LDYgKzU1OCw5IEBAIHByaXZhdGU6CiAgICAgICAgIEJsb2IqIGJsb2IgPSBWOEJsb2I6OnRv
TmF0aXZlKHZhbHVlLkFzPHY4OjpPYmplY3Q+KCkpOwogICAgICAgICBpZiAoIWJsb2IpCiAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIC8vIEZJWE1FOiBOZWVkIGEgZml4IChvciBhZGRpdGlv
bmFsIGNvZGUgdG8gZHVtcCB0aGUgY29udGVudHMgdG8gYSBmaWxlKQorICAgICAgICAvLyBmb3Ig
bm9uLWZpbGUgYmxvYnMuCisgICAgICAgIC8vIEZJWE1FOiBOZWVkIHRvIHNlcmlhbGl6ZSB0aGUg
dHlwZSBpbmZvcm1hdGlvbiBhcyB3ZWxsPwogICAgICAgICBtX3dyaXRlci53cml0ZUJsb2IoYmxv
Yi0+cGF0aCgpKTsKICAgICB9CiAKQEAgLTg1Myw3ICs4NTYsOCBAQCBwcml2YXRlOgogICAgICAg
ICBTdHJpbmcgcGF0aDsKICAgICAgICAgaWYgKCFyZWFkV2ViQ29yZVN0cmluZygmcGF0aCkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIFBhc3NSZWZQdHI8QmxvYj4gYmxvYiA9
IEJsb2I6OmNyZWF0ZShwYXRoKTsKKyAgICAgICAgLy8gRklYTUU6IHNlZSB0aGUgRklYTUUgY29t
bWVudCBpbiB3cml0ZUJsb2IuCisgICAgICAgIFBhc3NSZWZQdHI8RmlsZT4gYmxvYiA9IEJsb2I6
OmNyZWF0ZUZyb21GaWxlKHBhdGgpOwogICAgICAgICAqdmFsdWUgPSB0b1Y4KGJsb2IpOwogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvQmxvYi5j
cHAgYi9XZWJDb3JlL2h0bWwvQmxvYi5jcHAKaW5kZXggODNiYmRjMGM1MjY0ODQ1NDI2ODgxOTI2
MjE2ODRiNjI4MjAyNGJmNC4uNThkMjFkYTRmNzkyZjgwZjRlNGY0NDQxZTE0MTFlOWUxNzFkMWMx
ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0Jsb2IuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9C
bG9iLmNwcApAQCAtMjksOTAgKzI5LDY4IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgor
CiAjaW5jbHVkZSAiQmxvYi5oIgogCisjaW5jbHVkZSAiQmxvYkl0ZW0uaCIKICNpbmNsdWRlICJG
aWxlU3lzdGVtLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotI2lmIEVOQUJMRShCTE9CX1NM
SUNFKQotY29uc3QgaW50IEJsb2I6OnRvRW5kT2ZGaWxlID0gLTE7Ci1jb25zdCBkb3VibGUgQmxv
Yjo6ZG9Ob3RDaGVja0ZpbGVDaGFuZ2UgPSAwOwotI2VuZGlmCitCbG9iOjpCbG9iKGNvbnN0IFN0
cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nIHR5cGUpCisgICAgOiBtX3R5cGUodHlwZSkKK3sKKyAg
ICBhcHBlbmQoQmxvYkl0ZW06OmNyZWF0ZUZpbGVCbG9iSXRlbShwYXRoKSk7Cit9CiAKLUJsb2I6
OkJsb2IoY29uc3QgU3RyaW5nJiBwYXRoKQotICAgIDogbV9wYXRoKHBhdGgpCi0jaWYgRU5BQkxF
KEJMT0JfU0xJQ0UpCi0gICAgLCBtX3N0YXJ0KDApCi0gICAgLCBtX2xlbmd0aCh0b0VuZE9mRmls
ZSkKLSAgICAsIG1fc25hcHNob3RDYXB0dXJlZChmYWxzZSkKLSAgICAsIG1fc25hcHNob3RTaXpl
KDApCi0gICAgLCBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZShkb05vdENoZWNrRmlsZUNoYW5n
ZSkKLSNlbmRpZgordW5zaWduZWQgbG9uZyBsb25nIEJsb2I6OnNpemUoKSBjb25zdAogeworICAg
IC8vIEZJWE1FOiBKYXZhU2NyaXB0IGNhbm5vdCByZXByZXNlbnQgc2l6ZXMgYXMgbGFyZ2UgYXMg
dW5zaWduZWQgbG9uZyBsb25nLCB3ZSBuZWVkIHRvCisgICAgLy8gY29tZSB1cCB3aXRoIGFuIGV4
Y2VwdGlvbiB0byB0aHJvdyBpZiBmaWxlIHNpemUgaXMgbm90IHJlcHJlc2V0YWJsZS4KKyAgICB1
bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSA9IDA7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X2l0ZW1MaXN0LnNpemUoKTsgKytpKQorICAgICAgICBzaXplICs9IG1faXRlbUxpc3RbaV0tPnNp
emUoKTsKKyAgICByZXR1cm4gc2l6ZTsKIH0KIAotI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotQmxv
Yjo6QmxvYihjb25zdCBTdHJpbmcmIHBhdGgsIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxl
bmd0aCwgbG9uZyBsb25nIHNuYXBzaG90U2l6ZSwgZG91YmxlIHNuYXBzaG90TW9kaWZpY2F0aW9u
VGltZSkKLSAgICA6IG1fcGF0aChwYXRoKQotICAgICwgbV9zdGFydChzdGFydCkKLSAgICAsIG1f
bGVuZ3RoKGxlbmd0aCkKLSAgICAsIG1fc25hcHNob3RDYXB0dXJlZCh0cnVlKQotICAgICwgbV9z
bmFwc2hvdFNpemUoc25hcHNob3RTaXplKQotICAgICwgbV9zbmFwc2hvdE1vZGlmaWNhdGlvblRp
bWUoc25hcHNob3RNb2RpZmljYXRpb25UaW1lKQorY29uc3QgU3RyaW5nJiBCbG9iOjpwYXRoKCkg
Y29uc3QKIHsKLSAgICBBU1NFUlQoc3RhcnQgPj0gMCAmJiBsZW5ndGggPj0gMCAmJiBzdGFydCAr
IGxlbmd0aCA8PSBzbmFwc2hvdFNpemUgJiYgc25hcHNob3RNb2RpZmljYXRpb25UaW1lKTsKKyAg
ICBBU1NFUlQobV9pdGVtTGlzdC5zaXplKCkgPT0gMSAmJiBtX2l0ZW1MaXN0WzBdLT50b0ZpbGVC
bG9iSXRlbSgpKTsKKyAgICByZXR1cm4gbV9pdGVtTGlzdFswXS0+dG9GaWxlQmxvYkl0ZW0oKS0+
cGF0aCgpOwogfQotI2VuZGlmCiAKLXVuc2lnbmVkIGxvbmcgbG9uZyBCbG9iOjpzaXplKCkgY29u
c3QKK3ZvaWQgQmxvYjo6YXBwZW5kKFBhc3NSZWZQdHI8QmxvYkl0ZW0+IGl0ZW0pCiB7Ci0gICAg
Ly8gRklYTUU6IEphdmFTY3JpcHQgY2Fubm90IHJlcHJlc2VudCBzaXplcyBhcyBsYXJnZSBhcyB1
bnNpZ25lZCBsb25nIGxvbmcsIHdlIG5lZWQgdG8KLSAgICAvLyBjb21lIHVwIHdpdGggYW4gZXhj
ZXB0aW9uIHRvIHRocm93IGlmIGZpbGUgc2l6ZSBpcyBub3QgcmVwcmVzZXRhYmxlLgotI2lmIEVO
QUJMRShCTE9CX1NMSUNFKQotICAgIGlmIChtX3NuYXBzaG90Q2FwdHVyZWQpCi0gICAgICAgIHJl
dHVybiBtX2xlbmd0aDsKLSNlbmRpZgotICAgIGxvbmcgbG9uZyBzaXplOwotICAgIGlmICghZ2V0
RmlsZVNpemUobV9wYXRoLCBzaXplKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIHN0
YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oc2l6ZSk7CisgICAgbV9pdGVtTGlzdC5hcHBl
bmQoaXRlbSk7CiB9CiAKICNpZiBFTkFCTEUoQkxPQl9TTElDRSkKIFBhc3NSZWZQdHI8QmxvYj4g
QmxvYjo6c2xpY2UobG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoKSBjb25zdAogewot
ICAgIC8vIFdoZW4gd2Ugc2xpY2UgYSBmaWxlIGZvciB0aGUgZmlyc3QgdGltZSwgd2Ugb2J0YWlu
IGEgc25hcHNob3Qgb2YgdGhlIGZpbGUgYnkgY2FwdHVyaW5nIGl0cyBjdXJyZW50IHNpemUgYW5k
IG1vZGlmaWNhdGlvbiB0aW1lLgotICAgIC8vIFRoZSBtb2RpZmljYXRpb24gdGltZSB3aWxsIGJl
IHVzZWQgdG8gdmVyaWZ5IGlmIHRoZSBmaWxlIGhhcyBiZWVuIGNoYW5nZWQgb3Igbm90LCB3aGVu
IHRoZSB1bmRlcmx5aW5nIGRhdGEgYXJlIGFjY2Vzc2VkLgotICAgIGxvbmcgbG9uZyBzbmFwc2hv
dFNpemU7Ci0gICAgZG91YmxlIHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZTsKLSAgICBpZiAobV9z
bmFwc2hvdENhcHR1cmVkKSB7Ci0gICAgICAgIHNuYXBzaG90U2l6ZSA9IG1fc25hcHNob3RTaXpl
OwotICAgICAgICBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUgPSBtX3NuYXBzaG90TW9kaWZpY2F0
aW9uVGltZTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBJZiB3ZSBmYWlsIHRvIHJldHJpZXZl
IHRoZSBzaXplIG9yIG1vZGlmaWNhdGlvbiB0aW1lLCBwcm9iYWJseSBkdWUgdG8gdGhhdCB0aGUg
ZmlsZSBoYXMgYmVlbiBkZWxldGVkLCBhbiBlbXB0eSBibG9iIHdpbGwgYmUgcmV0dXJuZWQuCi0g
ICAgICAgIHRpbWVfdCBtb2RpZmljYXRpb25UaW1lOwotICAgICAgICBpZiAoIWdldEZpbGVTaXpl
KG1fcGF0aCwgc25hcHNob3RTaXplKSB8fCAhZ2V0RmlsZU1vZGlmaWNhdGlvblRpbWUobV9wYXRo
LCBtb2RpZmljYXRpb25UaW1lKSkgewotICAgICAgICAgICAgc25hcHNob3RTaXplID0gMDsKLSAg
ICAgICAgICAgIHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSA9IDA7Ci0gICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgc25hcHNob3RNb2RpZmljYXRpb25UaW1lID0gbW9kaWZpY2F0aW9uVGltZTsK
LSAgICB9Ci0KLSAgICAvLyBDbGFtcCB0aGUgcmFuZ2UgaWYgaXQgZXhjZWVkcyB0aGUgc2l6ZSBs
aW1pdC4KICAgICBpZiAoc3RhcnQgPCAwKQogICAgICAgICBzdGFydCA9IDA7CiAgICAgaWYgKGxl
bmd0aCA8IDApCiAgICAgICAgIGxlbmd0aCA9IDA7CiAKLSAgICBpZiAoc3RhcnQgPiBzbmFwc2hv
dFNpemUpIHsKKyAgICAvLyBDbGFtcCB0aGUgcmFuZ2UgaWYgaXQgZXhjZWVkcyB0aGUgc2l6ZSBs
aW1pdC4KKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxTaXplID0gc2l6ZSgpOworICAgIGlm
IChzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KHN0YXJ0KSA+IHRvdGFsU2l6ZSkgewog
ICAgICAgICBzdGFydCA9IDA7CiAgICAgICAgIGxlbmd0aCA9IDA7Ci0gICAgfSBlbHNlIGlmIChz
dGFydCArIGxlbmd0aCA+IHNuYXBzaG90U2l6ZSkKLSAgICAgICAgbGVuZ3RoID0gc25hcHNob3RT
aXplIC0gc3RhcnQ7CisgICAgfSBlbHNlIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxv
bmc+KHN0YXJ0ICsgbGVuZ3RoKSA+IHRvdGFsU2l6ZSkKKyAgICAgICAgbGVuZ3RoID0gdG90YWxT
aXplIC0gc3RhcnQ7CiAKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJsb2IobV9wYXRoLCBtX3N0
YXJ0ICsgc3RhcnQsIGxlbmd0aCwgc25hcHNob3RTaXplLCBzbmFwc2hvdE1vZGlmaWNhdGlvblRp
bWUpKTsKKyAgICBzaXplX3QgaSA9IDA7CisgICAgUmVmUHRyPEJsb2I+IGJsb2IgPSBCbG9iOjpj
cmVhdGUoKTsKKyAgICBmb3IgKDsgaSA8IG1faXRlbUxpc3Quc2l6ZSgpICYmIHN0YXRpY19jYXN0
PHVuc2lnbmVkIGxvbmcgbG9uZz4oc3RhcnQpID49IG1faXRlbUxpc3RbaV0tPnNpemUoKTsgKytp
KQorICAgICAgICBzdGFydCAtPSBtX2l0ZW1MaXN0W2ldLT5zaXplKCk7CisgICAgZm9yICg7IGxl
bmd0aCA+IDAgJiYgaSA8IG1faXRlbUxpc3Quc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgYmxvYi0+
bV9pdGVtTGlzdC5hcHBlbmQoQmxvYkl0ZW06OmNyZWF0ZVJhbmdlQmxvYkl0ZW0obV9pdGVtTGlz
dFtpXSwgc3RhcnQsIGxlbmd0aCkpOworICAgICAgICBsZW5ndGggLT0gYmxvYi0+bV9pdGVtTGlz
dC5sYXN0KCktPnNpemUoKTsKKyAgICAgICAgc3RhcnQgPSAwOworICAgIH0KKyAgICByZXR1cm4g
YmxvYi5yZWxlYXNlKCk7CiB9Ci0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoQkxPQl9TTElDRSkK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0Jsb2Iu
aCBiL1dlYkNvcmUvaHRtbC9CbG9iLmgKaW5kZXggZThiNWYzZmRmMDY5YTJiNDg3NmVkMTZhYjgx
YjIyZjBmZjAzODk3MC4uODk3MDA4ODU0YzNkNTY2OTdiYjc4ZmRiZTFjYmY1YjNkOThjZDEwNyAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0Jsb2IuaAorKysgYi9XZWJDb3JlL2h0bWwvQmxvYi5o
CkBAIC0zMSw2OSArMzEsNDggQEAKICNpZm5kZWYgQmxvYl9oCiAjZGVmaW5lIEJsb2JfaAogCi0j
aW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkJsb2JJdGVtLmgiCiAjaW5jbHVk
ZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSAiVGV4dEVu
Y29kaW5nLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBCbG9iIDogcHVibGljIFJlZkNvdW50ZWQ8QmxvYj4gewogcHVibGljOgotI2lm
IEVOQUJMRShCTE9CX1NMSUNFKQotICAgIHN0YXRpYyBjb25zdCBpbnQgdG9FbmRPZkZpbGU7Ci0g
ICAgc3RhdGljIGNvbnN0IGRvdWJsZSBkb05vdENoZWNrRmlsZUNoYW5nZTsKLSNlbmRpZgorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEJsb2I+IGNyZWF0ZShjb25zdCBTdHJpbmcgdHlwZSA9IFN0cmlu
ZygpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBCbG9iKHR5cGUpKTsKKyAg
ICB9CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxCbG9iPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBw
YXRoKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJsb2I+IGNyZWF0ZUZyb21GaWxlKGNvbnN0IFN0
cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nIHR5cGUgPSBTdHJpbmcoKSkKICAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgQmxvYihwYXRoKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgQmxvYihwYXRoLCB0eXBlKSk7CiAgICAgfQogCiAgICAgdmlydHVhbCB+QmxvYigpIHsg
fQogCisgICAgdW5zaWduZWQgbG9uZyBsb25nIHNpemUoKSBjb25zdDsKKyAgICBjb25zdCBTdHJp
bmcmIHBhdGgoKSBjb25zdDsKKyAgICBjb25zdCBTdHJpbmcmIHR5cGUoKSBjb25zdCB7IHJldHVy
biBtX3R5cGU7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNGaWxlKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KIAotI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgIFBhc3NSZWZQdHI8QmxvYj4gc2xp
Y2UobG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoKSBjb25zdDsKLSNlbmRpZgorICAg
IHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxCbG9iSXRlbT4gPiBJdGVtTGlzdDsKKyAgICB2b2lkIGFw
cGVuZChQYXNzUmVmUHRyPEJsb2JJdGVtPiBpdGVtKTsKKyAgICBjb25zdCBJdGVtTGlzdCYgaXRl
bXMoKSBjb25zdCB7IHJldHVybiBtX2l0ZW1MaXN0OyB9CiAKLSAgICBjb25zdCBTdHJpbmcmIHBh
dGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0KLSAgICB1bnNpZ25lZCBsb25nIGxvbmcgc2l6
ZSgpIGNvbnN0OwogI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgIGxvbmcgbG9uZyBzdGFydCgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhcnQ7IH0KLSAgICBsb25nIGxvbmcgbGVuZ3RoKCkgY29uc3Qg
eyByZXR1cm4gbV9sZW5ndGg7IH0KLSAgICBkb3VibGUgbW9kaWZpY2F0aW9uVGltZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc25hcHNob3RNb2RpZmljYXRpb25UaW1lOyB9CisgICAgUGFzc1JlZlB0cjxC
bG9iPiBzbGljZShsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgpIGNvbnN0OwogI2Vu
ZGlmCiAKIHByb3RlY3RlZDoKLSAgICBCbG9iKGNvbnN0IFN0cmluZyYgcGF0aCk7CisgICAgQmxv
Yihjb25zdCBTdHJpbmcgdHlwZSkgOiBtX3R5cGUodHlwZSkgeyB9CisgICAgQmxvYihjb25zdCBT
dHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyB0eXBlKTsKIAotcHJpdmF0ZToKLSNpZiBFTkFCTEUo
QkxPQl9TTElDRSkKLSAgICBCbG9iKGNvbnN0IFN0cmluZyYgcGF0aCwgbG9uZyBsb25nIHN0YXJ0
LCBsb25nIGxvbmcgbGVuZ3RoLCBsb25nIGxvbmcgc25hcHNob3RTaXplLCBkb3VibGUgc25hcHNo
b3RNb2RpZmljYXRpb25UaW1lKTsKLSNlbmRpZgotCi0gICAgLy8gVGhlIHVuZGVybHlpbmcgcGF0
aCBvZiB0aGUgZmlsZS1iYXNlZCBibG9iLiAKLSAgICBTdHJpbmcgbV9wYXRoOwotCi0jaWYgRU5B
QkxFKEJMT0JfU0xJQ0UpCi0gICAgLy8gVGhlIHN0YXJ0aW5nIHBvc2l0aW9uIG9mIHRoZSBmaWxl
LWJhc2VkIGJsb2IuCi0gICAgbG9uZyBsb25nIG1fc3RhcnQ7Ci0KLSAgICAvLyBUaGUgbGVuZ3Ro
IG9mIHRoZSBmaWxlLWJhc2VkIGJsb2IuIFRoZSB2YWx1ZSBvZiAtMSBtZWFucyB0byB0aGUgZW5k
IG9mIHRoZSBmaWxlLgotICAgIGxvbmcgbG9uZyBtX2xlbmd0aDsKLQotICAgIC8vIEEgZmxhZyB0
byB0ZWxsIGlmIGEgc25hcHNob3QgaGFzIGJlZW4gY2FwdHVyZWQuCi0gICAgYm9vbCBtX3NuYXBz
aG90Q2FwdHVyZWQ7Ci0KLSAgICAvLyBUaGUgc2l6ZSBvZiB0aGUgZmlsZSB3aGVuIGEgc25hcHNo
b3QgaXMgY2FwdHVyZWQuIEl0IGNhbiBiZSAwIGlmIHRoZSBmaWxlIGlzIGVtcHR5LgotICAgIGxv
bmcgbG9uZyBtX3NuYXBzaG90U2l6ZTsKLQotICAgIC8vIFRoZSBsYXN0IG1vZGlmaWNhdGlvbiB0
aW1lIG9mIHRoZSBmaWxlIHdoZW4gYSBzbmFwc2hvdCBpcyBjYXB0dXJlZC4gVGhlIHZhbHVlIG9m
IDAgYWxzbyBtZWFucyB0aGF0IHRoZSBzbmFwc2hvdCBpcyBub3QgY2FwdHVyZWQuCi0gICAgZG91
YmxlIG1fc25hcHNob3RNb2RpZmljYXRpb25UaW1lOwotI2VuZGlmCisgICAgVmVjdG9yPFJlZlB0
cjxCbG9iSXRlbT4gPiBtX2l0ZW1MaXN0OworICAgIGNvbnN0IFN0cmluZyBtX3R5cGU7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvQmxvYkl0
ZW0uY3BwIGIvV2ViQ29yZS9odG1sL0Jsb2JJdGVtLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wYzViZDM0YmFh
MTc3YjlhOWE3OTg1NjgzOGE1NmEzYTQ0MzY3NmJlCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29y
ZS9odG1sL0Jsb2JJdGVtLmNwcApAQCAtMCwwICsxLDMwOSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2luY2x1ZGUgIkJsb2JJdGVtLmgiCisKKyNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCisjaW5j
bHVkZSAiVVVJRC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NoYXIqIEJsb2JJdGVtOjpy
ZWxlYXNlQnVmZmVyKCkgY29uc3QKK3sKKyAgICBWZWN0b3I8Y2hhcj4gdjsKKyAgICB2LmFwcGVu
ZChkYXRhKCksIHN0YXRpY19jYXN0PHNpemVfdD4oc2l6ZSgpKSk7CisgICAgcmV0dXJuIHYucmVs
ZWFzZUJ1ZmZlcigpOworfQorCitQYXNzUmVmUHRyPEJsb2JJdGVtPiBCbG9iSXRlbTo6Y3JlYXRl
RmlsZUJsb2JJdGVtKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYo
c3RhdGljX2Nhc3Q8QmxvYkl0ZW0qPihuZXcgRmlsZUJsb2JJdGVtKHBhdGgpKSk7Cit9CisKK1Bh
c3NSZWZQdHI8QmxvYkl0ZW0+IEJsb2JJdGVtOjpjcmVhdGVTdHJpbmdCbG9iSXRlbShjb25zdCBT
dHJpbmcmIHRleHQsIEVuZGluZ1R5cGUgZW5kaW5nLCBUZXh0RW5jb2RpbmcgZW5jb2RpbmcpCit7
CisgICAgcmV0dXJuIGFkb3B0UmVmKHN0YXRpY19jYXN0PEJsb2JJdGVtKj4obmV3IFN0cmluZ0Js
b2JJdGVtKHRleHQsIGVuZGluZywgZW5jb2RpbmcpKSk7Cit9CisKK1Bhc3NSZWZQdHI8QmxvYkl0
ZW0+IEJsb2JJdGVtOjpjcmVhdGVTdHJpbmdCbG9iSXRlbShjb25zdCBDU3RyaW5nJiB0ZXh0KQor
eworICAgIHJldHVybiBhZG9wdFJlZihzdGF0aWNfY2FzdDxCbG9iSXRlbSo+KG5ldyBTdHJpbmdC
bG9iSXRlbSh0ZXh0KSkpOworfQorCitQYXNzUmVmUHRyPEJsb2JJdGVtPiBCbG9iSXRlbTo6Y3Jl
YXRlQnl0ZXNBcnJheUJsb2JJdGVtKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBzaXplKQorewor
ICAgIHJldHVybiBhZG9wdFJlZihzdGF0aWNfY2FzdDxCbG9iSXRlbSo+KG5ldyBCeXRlc0FycmF5
QmxvYkl0ZW0oZGF0YSwgc2l6ZSkpKTsKK30KKworI2lmIEVOQUJMRShCTE9CX1NMSUNFKQorc3Rh
dGljIGNvbnN0IGRvdWJsZSBpbnZhbGlkTW9kaWZpY2F0aW9uVGltZSA9IC0xOworCitkb3VibGUg
Z2V0RmlsZVNuYXBzaG90TW9kaWZpY2F0aW9uVGltZShjb25zdCBTdHJpbmcmIHBhdGgpCit7Cisg
ICAgLy8gRklYTUU6IHN5bmNocm9uaXplZCBmaWxlIGNhbGwKKyAgICB0aW1lX3QgbW9kaWZpY2F0
aW9uVGltZTsKKyAgICBpZiAoZ2V0RmlsZU1vZGlmaWNhdGlvblRpbWUocGF0aCwgbW9kaWZpY2F0
aW9uVGltZSkpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KG1vZGlmaWNhdGlv
blRpbWUpOworICAgIHJldHVybiBpbnZhbGlkTW9kaWZpY2F0aW9uVGltZTsKK30KKworUGFzc1Jl
ZlB0cjxCbG9iSXRlbT4gQmxvYkl0ZW06OmNyZWF0ZVJhbmdlQmxvYkl0ZW0oUGFzc1JlZlB0cjxC
bG9iSXRlbT4gaXRlbSwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoKQoreworICAg
IEFTU0VSVChzdGFydCA+PSAwICYmIGxlbmd0aCA+PSAwKTsKKyAgICBpZiAoIXN0YXJ0ICYmIGl0
ZW0tPnNpemUoKSA8PSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KGxlbmd0aCkpCisg
ICAgICAgIHJldHVybiBpdGVtOworICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxv
bmc+KHN0YXJ0ICsgbGVuZ3RoKSA+IGl0ZW0tPnNpemUoKSkKKyAgICAgICAgbGVuZ3RoID0gaXRl
bS0+c2l6ZSgpIC0gc3RhcnQ7CisgICAgY29uc3QgRmlsZUJsb2JJdGVtKiBmaWxlSXRlbSA9IGl0
ZW0tPnRvRmlsZUJsb2JJdGVtKCk7CisgICAgaWYgKGZpbGVJdGVtKSB7CisgICAgICAgIGNvbnN0
IEZpbGVSYW5nZUJsb2JJdGVtKiBmaWxlUmFuZ2VJdGVtID0gaXRlbS0+dG9GaWxlUmFuZ2VCbG9i
SXRlbSgpOworICAgICAgICBpZiAoZmlsZVJhbmdlSXRlbSkgeworICAgICAgICAgICAgc3RhcnQg
Kz0gZmlsZVJhbmdlSXRlbS0+c3RhcnQoKTsKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGVGaWxl
UmFuZ2VCbG9iSXRlbShmaWxlSXRlbS0+cGF0aCgpLCBzdGFydCwgbGVuZ3RoLCBmaWxlUmFuZ2VJ
dGVtLT5zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUoKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIGNyZWF0ZUZpbGVSYW5nZUJsb2JJdGVtKGZpbGVJdGVtLT5wYXRoKCksIHN0YXJ0LCBsZW5n
dGgsIGdldEZpbGVTbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUoZmlsZUl0ZW0tPnBhdGgoKSkpOwor
ICAgIH0KKyAgICByZXR1cm4gYWRvcHRSZWYoc3RhdGljX2Nhc3Q8QmxvYkl0ZW0qPihuZXcgRGF0
YVJhbmdlQmxvYkl0ZW0oaXRlbSwgc3RhcnQsIGxlbmd0aCkpKTsKK30KKworUGFzc1JlZlB0cjxC
bG9iSXRlbT4gQmxvYkl0ZW06OmNyZWF0ZUZpbGVSYW5nZUJsb2JJdGVtKGNvbnN0IFN0cmluZyYg
cGF0aCwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoLCBkb3VibGUgc25hcHNob3RN
b2RpZmljYXRpb25UaW1lKQoreworICAgIHJldHVybiBhZG9wdFJlZihzdGF0aWNfY2FzdDxCbG9i
SXRlbSo+KG5ldyBGaWxlUmFuZ2VCbG9iSXRlbShwYXRoLCBzdGFydCwgbGVuZ3RoLCBzbmFwc2hv
dE1vZGlmaWNhdGlvblRpbWUpKSk7Cit9CisjZW5kaWYgLy8gRU5BQkxFKEJMT0JfU0xJQ0UpCisK
Ky8vIEZpbGVCbG9iSXRlbSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZpbGVCbG9iSXRlbTo6RmlsZUJsb2JJdGVtKGNv
bnN0IFN0cmluZyYgcGF0aCkKKyAgICA6IG1fcGF0aChwYXRoKQorICAgICwgbV9maWxlTmFtZShw
YXRoR2V0RmlsZU5hbWUobV9wYXRoKSkKK3sKK30KKwordW5zaWduZWQgbG9uZyBsb25nIEZpbGVC
bG9iSXRlbTo6c2l6ZSgpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IHN5bmNocm9uaXplZCBmaWxl
IGNhbGwKKyAgICBsb25nIGxvbmcgc2l6ZTsKKyAgICBpZiAoIWdldEZpbGVTaXplKG1fcGF0aCwg
c2l6ZSkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBsb25nIGxvbmc+KHNpemUpOworfQorCitQYXNzUmVmUHRyPEJsb2JJdGVtPiBGaWxlQmxvYkl0
ZW06OmRlZXBDb3B5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gQmxvYkl0ZW06OmNyZWF0ZUZpbGVC
bG9iSXRlbShtX3BhdGgpOworfQorCitib29sIEZpbGVCbG9iSXRlbTo6ZXF1YWxzKGNvbnN0IEJs
b2JJdGVtKiBiKSBjb25zdAoreworICAgIGNvbnN0IEZpbGVCbG9iSXRlbSogZmlsZUl0ZW0gPSBi
LT50b0ZpbGVCbG9iSXRlbSgpOworICAgIGlmICghZmlsZUl0ZW0gfHwgbV9wYXRoICE9IGZpbGVJ
dGVtLT5tX3BhdGgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworLy8gU3RyaW5nQmxvYkl0ZW0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU3RyaW5nQmxvYkl0ZW06OlN0cmluZ0Jsb2JJ
dGVtKGNvbnN0IFN0cmluZyYgdGV4dCwgRW5kaW5nVHlwZSBlbmRpbmcsIFRleHRFbmNvZGluZyBl
bmNvZGluZykKK3sKKyAgICBDU3RyaW5nIGZyb20gPSBlbmNvZGluZy5lbmNvZGUodGV4dC5jaGFy
YWN0ZXJzKCksIHRleHQubGVuZ3RoKCksIEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKTsKKyAgICBt
X2RhdGEgPSBmcm9tOworCisgICAgaWYgKGVuZGluZyA9PSBFbmRpbmdUcmFuc3BhcmVudCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgY29uc3QgY2hhciogZW5kaW5nQ2hhcnMgPSAoZW5kaW5nID09
IEVuZGluZ0NSTEYpID8gIlxyXG4iIDogKChlbmRpbmcgPT0gRW5kaW5nQ1IpID8gIlxyIiA6ICJc
biIpOworCisgICAgaW50IGVuZGluZ0xlbmd0aCA9IChlbmRpbmcgPT0gRW5kaW5nQ1JMRikgPyAy
IDogMTsKKyAgICBpbnQgbmVlZEZpeCA9IDA7CisKKyAgICAvLyBDYWxjdWxhdGUgdGhlIGZpbmFs
IGxlbmd0aC4KKyAgICBpbnQgY2FsY3VsYXRlZExlbmd0aCA9IGZyb20ubGVuZ3RoKCk7CisgICAg
Y29uc3QgY2hhciogcCA9IGZyb20uZGF0YSgpOworICAgIHdoaWxlIChjaGFyIGMgPSAqcCsrKSB7
CisgICAgICAgIGlmIChjID09ICdccicpIHsKKyAgICAgICAgICAgIC8vIFNhZmUgdG8gbG9vayBh
aGVhZCBiZWNhdXNlIG9mIHRyYWlsaW5nICdcMCcuCisgICAgICAgICAgICBpZiAoKnAgPT0gJ1xu
JyAmJiBlbmRpbmcgIT0gRW5kaW5nQ1JMRikgeworICAgICAgICAgICAgICAgIGNhbGN1bGF0ZWRM
ZW5ndGggKz0gKGVuZGluZ0xlbmd0aCAtIDIpOworICAgICAgICAgICAgICAgICsrbmVlZEZpeDsK
KyAgICAgICAgICAgIH0gZWxzZSBpZiAoZW5kaW5nICE9IEVuZGluZ0NSKSB7CisgICAgICAgICAg
ICAgICAgY2FsY3VsYXRlZExlbmd0aCArPSAoZW5kaW5nTGVuZ3RoIC0gMSk7CisgICAgICAgICAg
ICAgICAgKytuZWVkRml4OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKGMgPT0g
J1xuJyAmJiBlbmRpbmcgIT0gRW5kaW5nTEYpIHsKKyAgICAgICAgICAgIGNhbGN1bGF0ZWRMZW5n
dGggKz0gKGVuZGluZ0xlbmd0aCAtIDEpOworICAgICAgICAgICAgKytuZWVkRml4OworICAgICAg
ICB9CisgICAgfQorCisgICAgaWYgKCFuZWVkRml4KQorICAgICAgICByZXR1cm47CisKKyAgICAv
LyBDb252ZXJ0IHRoZSBlbmRpbmdzIGFuZCBjcmVhdGUgYSBkYXRhIGJ1ZmZlci4KKyAgICBwID0g
ZnJvbS5kYXRhKCk7CisgICAgY2hhciogcTsKKyAgICBtX2RhdGEgPSBDU3RyaW5nOjpuZXdVbmlu
aXRpYWxpemVkKGNhbGN1bGF0ZWRMZW5ndGgsIHEpOworICAgIHdoaWxlIChjaGFyIGMgPSAqcCsr
KSB7CisgICAgICAgIGlmIChjID09ICdccicpIHsKKyAgICAgICAgICAgIGlmICgqcCA9PSAnXG4n
ICYmIGVuZGluZyAhPSBFbmRpbmdDUkxGKSB7CisgICAgICAgICAgICAgICAgbWVtY3B5KHEsIGVu
ZGluZ0NoYXJzLCBlbmRpbmdMZW5ndGgpOworICAgICAgICAgICAgICAgIHEgKz0gZW5kaW5nTGVu
Z3RoOworICAgICAgICAgICAgfSBlbHNlIGlmICgqcCAhPSAnXG4nICYmIGVuZGluZyAhPSBFbmRp
bmdDUikgeworICAgICAgICAgICAgICAgIG1lbWNweShxLCBlbmRpbmdDaGFycywgZW5kaW5nTGVu
Z3RoKTsKKyAgICAgICAgICAgICAgICBxICs9IGVuZGluZ0xlbmd0aDsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSBlbHNlIGlmIChjID09ICdcbicgJiYgZW5kaW5nICE9IEVuZGluZ0xGKSB7Cisg
ICAgICAgICAgICBtZW1jcHkocSwgZW5kaW5nQ2hhcnMsIGVuZGluZ0xlbmd0aCk7CisgICAgICAg
ICAgICBxICs9IGVuZGluZ0xlbmd0aDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8v
IExlYXZlIG90aGVyIGNoYXJhY3RlcnMgYWxvbmUuCisgICAgICAgICAgICAqcSsrID0gYzsKKyAg
ICAgICAgfQorICAgIH0KK30KKworU3RyaW5nQmxvYkl0ZW06OlN0cmluZ0Jsb2JJdGVtKGNvbnN0
IENTdHJpbmcmIHRleHQpCisgICAgOiBtX2RhdGEodGV4dCkKK3sKK30KKworUGFzc1JlZlB0cjxC
bG9iSXRlbT4gU3RyaW5nQmxvYkl0ZW06OmRlZXBDb3B5KCkgY29uc3QKK3sKKyAgICByZXR1cm4g
QmxvYkl0ZW06OmNyZWF0ZVN0cmluZ0Jsb2JJdGVtKENTdHJpbmcobV9kYXRhLmRhdGEoKSwgbV9k
YXRhLmxlbmd0aCgpKSk7Cit9CisKK2Jvb2wgU3RyaW5nQmxvYkl0ZW06OmVxdWFscyhjb25zdCBC
bG9iSXRlbSogYikgY29uc3QKK3sKKyAgICBjb25zdCBTdHJpbmdCbG9iSXRlbSogc3RyaW5nSXRl
bSA9IGItPnRvU3RyaW5nQmxvYkl0ZW0oKTsKKyAgICBpZiAoIXN0cmluZ0l0ZW0pCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gKHN0cmluZ0l0ZW0gJiYgZGF0YSgpID09IGItPmRh
dGEoKSAmJiBzaXplKCkgPT0gYi0+c2l6ZSgpKTsKK30KKworLy8gQnl0ZXNBcnJheUJsb2JJdGVt
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKworQnl0ZXNBcnJheUJsb2JJdGVtOjpCeXRlc0FycmF5QmxvYkl0ZW0oY29uc3QgY2hhciog
ZGF0YSwgc2l6ZV90IHNpemUpCit7CisgICAgbV9ieXRlc0FycmF5LmFwcGVuZChkYXRhLCBzaXpl
KTsKK30KKworUGFzc1JlZlB0cjxCbG9iSXRlbT4gQnl0ZXNBcnJheUJsb2JJdGVtOjpkZWVwQ29w
eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEJsb2JJdGVtOjpjcmVhdGVCeXRlc0FycmF5QmxvYkl0
ZW0obV9ieXRlc0FycmF5LmRhdGEoKSwgbV9ieXRlc0FycmF5LnNpemUoKSk7Cit9CisKK2Jvb2wg
Qnl0ZXNBcnJheUJsb2JJdGVtOjplcXVhbHMoY29uc3QgQmxvYkl0ZW0qIGIpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIChkYXRhKCkgPT0gYi0+ZGF0YSgpICYmIHNpemUoKSA9PSBiLT5zaXplKCkpOwor
fQorCisjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCisKKy8vIERhdGFSYW5nZUJsb2JJdGVtIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisK
K0RhdGFSYW5nZUJsb2JJdGVtOjpEYXRhUmFuZ2VCbG9iSXRlbShQYXNzUmVmUHRyPEJsb2JJdGVt
PiBpdGVtLCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgpCisgICAgOiBtX2l0ZW0o
aXRlbSkKKyAgICAsIG1fc3RhcnQoc3RhcnQpCisgICAgLCBtX2xlbmd0aChsZW5ndGgpCit7Cisg
ICAgQVNTRVJUKCFtX2l0ZW0tPnRvRmlsZUJsb2JJdGVtKCkpOworICAgIGlmIChtX2l0ZW0tPnRv
RGF0YVJhbmdlQmxvYkl0ZW0oKSkgeworICAgICAgICBjb25zdCBEYXRhUmFuZ2VCbG9iSXRlbSog
ciA9IG1faXRlbS0+dG9EYXRhUmFuZ2VCbG9iSXRlbSgpOworICAgICAgICBtX3N0YXJ0ICs9IHIt
Pm1fc3RhcnQ7CisgICAgICAgIG1faXRlbSA9IHItPm1faXRlbTsKKyAgICAgICAgQVNTRVJUKCFt
X2l0ZW0tPnRvRGF0YVJhbmdlQmxvYkl0ZW0oKSk7CisgICAgICAgIEFTU0VSVChzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBsb25nIGxvbmc+KG1fc3RhcnQgKyBtX2xlbmd0aCkgPD0gbV9pdGVtLT5zaXpl
KCkpOworICAgIH0KK30KKworY29uc3QgY2hhciogRGF0YVJhbmdlQmxvYkl0ZW06OmRhdGEoKSBj
b25zdAoreworICAgIHJldHVybiBtX2l0ZW0tPmRhdGEoKSArIG1fc3RhcnQ7Cit9CisKK1Bhc3NS
ZWZQdHI8QmxvYkl0ZW0+IERhdGFSYW5nZUJsb2JJdGVtOjpkZWVwQ29weSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIEJsb2JJdGVtOjpjcmVhdGVSYW5nZUJsb2JJdGVtKG1faXRlbS0+ZGVlcENvcHko
KSwgbV9zdGFydCwgbV9sZW5ndGgpOworfQorCitib29sIERhdGFSYW5nZUJsb2JJdGVtOjplcXVh
bHMoY29uc3QgQmxvYkl0ZW0qIGIpIGNvbnN0Cit7CisgICAgY29uc3QgRGF0YVJhbmdlQmxvYkl0
ZW0qIHJhbmdlSXRlbSA9IGItPnRvRGF0YVJhbmdlQmxvYkl0ZW0oKTsKKyAgICBpZiAoIXJhbmdl
SXRlbSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3N0YXJ0ICE9IHJhbmdlSXRl
bS0+bV9zdGFydCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghbV9pdGVtLT5lcXVh
bHMocmFuZ2VJdGVtLT5tX2l0ZW0uZ2V0KCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKKy8vIEZpbGVSYW5nZUJsb2JJdGVtIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZpbGVSYW5nZUJs
b2JJdGVtOjpGaWxlUmFuZ2VCbG9iSXRlbShjb25zdCBTdHJpbmcmIHBhdGgsIGxvbmcgbG9uZyBz
dGFydCwgbG9uZyBsb25nIGxlbmd0aCwgZG91YmxlIG1vZGlmaWNhdGlvblRpbWUpCisgICAgOiBG
aWxlQmxvYkl0ZW0ocGF0aCkKKyAgICAsIG1fc3RhcnQoc3RhcnQpCisgICAgLCBtX2xlbmd0aChs
ZW5ndGgpCisgICAgLCBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZShtb2RpZmljYXRpb25UaW1l
KQoreworICAgIG1fdW5pcXVlTmFtZSA9ICJCbG9iIiArIGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJp
bmcoKTsKKyAgICBtX3VuaXF1ZU5hbWUucmVwbGFjZSgiLSIsICIiKTsgLy8gRm9yIHNhZnR5LCBy
ZW1vdmUgJy0nIGZyb20gdGhlIGZpbGVuYW1lIHNuY2Ugc29tZSBzZXJ2ZXJzIG1heSBub3QgbGlr
ZSBpdC4KK30KKworUGFzc1JlZlB0cjxCbG9iSXRlbT4gRmlsZVJhbmdlQmxvYkl0ZW06OmRlZXBD
b3B5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gQmxvYkl0ZW06OmNyZWF0ZUZpbGVSYW5nZUJsb2JJ
dGVtKHBhdGgoKSwgbV9zdGFydCwgbV9sZW5ndGgsIG1fc25hcHNob3RNb2RpZmljYXRpb25UaW1l
KTsKK30KKworYm9vbCBGaWxlUmFuZ2VCbG9iSXRlbTo6ZXF1YWxzKGNvbnN0IEJsb2JJdGVtKiBi
KSBjb25zdAoreworICAgIGlmICghRmlsZUJsb2JJdGVtOjplcXVhbHMoYikpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBjb25zdCBGaWxlUmFuZ2VCbG9iSXRlbSogcmFuZ2VJdGVtID0gYi0+
dG9GaWxlUmFuZ2VCbG9iSXRlbSgpOworICAgIGlmICghcmFuZ2VJdGVtKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgaWYgKG1fc3RhcnQgIT0gcmFuZ2VJdGVtLT5tX3N0YXJ0IHx8IG1fdW5p
cXVlTmFtZSAhPSByYW5nZUl0ZW0tPm1fdW5pcXVlTmFtZSB8fCBtX3NuYXBzaG90TW9kaWZpY2F0
aW9uVGltZSAhPSByYW5nZUl0ZW0tPm1fc25hcHNob3RNb2RpZmljYXRpb25UaW1lKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgRmlsZVJhbmdlQmxv
Ykl0ZW06OmlzVmFsaWQoKSBjb25zdAoreworICAgIC8vIDwgMCBpbmRpY2F0ZXMgaW52YWxpZE1v
ZGlmaWNhdGlvblRpbWUgKGkuZS4gaW5pdGlhbGl6YXRpb24gaGFzIGJlZW4gZmFpbGVkKS4KKyAg
ICBpZiAobV9zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUgPCAwKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgcmV0dXJuIG1fc25hcHNob3RNb2RpZmljYXRpb25UaW1lID09IGdldEZpbGVTbmFw
c2hvdE1vZGlmaWNhdGlvblRpbWUocGF0aCgpKTsKK30KKworI2VuZGlmIC8vIEVOQUJMRShCTE9C
X1NMSUNFKQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0
bWwvQmxvYkl0ZW0uaCBiL1dlYkNvcmUvaHRtbC9CbG9iSXRlbS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmViOGMw
ODgyMzNjMzA1ZjEyM2IwNjIwOGEwYTliNzk3YTRlY2MyODEKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJDb3JlL2h0bWwvQmxvYkl0ZW0uaApAQCAtMCwwICsxLDE4OCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9u
LgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEJsb2JJdGVt
X2gKKyNkZWZpbmUgQmxvYkl0ZW1faAorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNp
bmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBTdHJp
bmcgZW5kaW5nIHR5cGVzLgorZW51bSBFbmRpbmdUeXBlIHsKKyAgICBFbmRpbmdUcmFuc3BhcmVu
dCA9IDAsCisgICAgRW5kaW5nTEYsCisgICAgRW5kaW5nQ1IsCisgICAgRW5kaW5nQ1JMRiwKK307
CisKK2NsYXNzIERhdGFSYW5nZUJsb2JJdGVtOworY2xhc3MgRmlsZUJsb2JJdGVtOworY2xhc3Mg
RmlsZVJhbmdlQmxvYkl0ZW07CitjbGFzcyBTdHJpbmdCbG9iSXRlbTsKKworLy8gQSBiYXNlIGlu
dGVyZmFjZSBmb3IgYWxsICdibG9iJyBpdGVtcyAoZmlsZSwgc3RyaW5nIG9yIGJ5dGVzIGFycmF5
KS4KK2NsYXNzIEJsb2JJdGVtIDogcHVibGljIFJlZkNvdW50ZWQ8QmxvYkl0ZW0+IHsKK3B1Ymxp
YzoKKyAgICB2aXJ0dWFsIH5CbG9iSXRlbSgpIHsgfQorICAgIHZpcnR1YWwgdW5zaWduZWQgbG9u
ZyBsb25nIHNpemUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiBkYXRhKCkg
Y29uc3QgeyByZXR1cm4gMDsgfQorICAgIGNoYXIqIHJlbGVhc2VCdWZmZXIoKSBjb25zdDsKKwor
ICAgIC8vIEZhY3RvcnkgbWV0aG9kcy4KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCbG9iSXRlbT4g
Y3JlYXRlU3RyaW5nQmxvYkl0ZW0oY29uc3QgU3RyaW5nJiwgRW5kaW5nVHlwZSwgVGV4dEVuY29k
aW5nKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCbG9iSXRlbT4gY3JlYXRlU3RyaW5nQmxvYkl0
ZW0oY29uc3QgQ1N0cmluZyYpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJsb2JJdGVtPiBjcmVh
dGVCeXRlc0FycmF5QmxvYkl0ZW0oY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IHNpemUpOworICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEJsb2JJdGVtPiBjcmVhdGVGaWxlQmxvYkl0ZW0oY29uc3QgU3Ry
aW5nJiBwYXRoKTsKKworI2lmIEVOQUJMRShCTE9CX1NMSUNFKQorICAgIC8vIENyZWF0ZXMgRGF0
YVJuYWdlQmxvYkl0ZW0gb3IgRmlsZVJhbmdlQmxvYkl0ZW0uCisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8QmxvYkl0ZW0+IGNyZWF0ZVJhbmdlQmxvYkl0ZW0oUGFzc1JlZlB0cjxCbG9iSXRlbT4gaXRl
bSwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoKTsKKyAgICAvLyBDcmVhdGVzIEZp
bGVSYW5nZUJsb2JJdGVtLgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJsb2JJdGVtPiBjcmVhdGVG
aWxlUmFuZ2VCbG9iSXRlbShjb25zdCBTdHJpbmcmIHBhdGgsIGxvbmcgbG9uZyBzdGFydCwgbG9u
ZyBsb25nIGxlbmd0aCwgZG91YmxlIHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSk7CisjZW5kaWYg
Ly8gRU5BQkxFKEJMT0JfU0xJQ0UpCisKKyAgICAvLyBSZXR1cm5zIGZhbHNlIGlmIHRoZSBkYXRh
IGhhcyBiZWNvbWUgc3RhbGUgb3IgaW52YWxpZC4KKyAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgp
IGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKworICAgIHZpcnR1YWwgY29uc3QgU3RyaW5nQmxvYkl0
ZW0qIHRvU3RyaW5nQmxvYkl0ZW0oKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBj
b25zdCBGaWxlQmxvYkl0ZW0qIHRvRmlsZUJsb2JJdGVtKCkgY29uc3QgeyByZXR1cm4gMDsgfQor
I2lmIEVOQUJMRShCTE9CX1NMSUNFKQorICAgIHZpcnR1YWwgY29uc3QgRGF0YVJhbmdlQmxvYkl0
ZW0qIHRvRGF0YVJhbmdlQmxvYkl0ZW0oKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgdmlydHVh
bCBjb25zdCBGaWxlUmFuZ2VCbG9iSXRlbSogdG9GaWxlUmFuZ2VCbG9iSXRlbSgpIGNvbnN0IHsg
cmV0dXJuIDA7IH0KKyNlbmRpZiAvLyBFTkFCTEUoQkxPQl9TTElDRSkKKworICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxCbG9iSXRlbT4gZGVlcENvcHkoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBi
b29sIGVxdWFscyhjb25zdCBCbG9iSXRlbSopIGNvbnN0ID0gMDsKKworcHJvdGVjdGVkOgorICAg
IEJsb2JJdGVtKCkgeyB9Cit9OworCitjbGFzcyBTdHJpbmdCbG9iSXRlbSA6IHB1YmxpYyBCbG9i
SXRlbSB7CitwdWJsaWM6CisgICAgU3RyaW5nQmxvYkl0ZW0oY29uc3QgU3RyaW5nJiwgRW5kaW5n
VHlwZSwgVGV4dEVuY29kaW5nKTsKKyAgICBTdHJpbmdCbG9iSXRlbShjb25zdCBDU3RyaW5nJik7
CisgICAgY29uc3QgQ1N0cmluZyYgY3N0cigpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsgfQorCisg
ICAgLy8gQmxvYkl0ZW0gbWV0aG9kcy4KKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgbG9uZyBz
aXplKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmxlbmd0aCgpOyB9CisgICAgdmlydHVhbCBjb25z
dCBjaGFyKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmRhdGEoKTsgfQorICAgIHZpcnR1
YWwgY29uc3QgU3RyaW5nQmxvYkl0ZW0qIHRvU3RyaW5nQmxvYkl0ZW0oKSBjb25zdCB7IHJldHVy
biB0aGlzOyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEJsb2JJdGVtPiBkZWVwQ29weSgpIGNv
bnN0OworICAgIHZpcnR1YWwgYm9vbCBlcXVhbHMoY29uc3QgQmxvYkl0ZW0qKSBjb25zdDsKKwor
cHJpdmF0ZToKKyAgICBtdXRhYmxlIENTdHJpbmcgbV9kYXRhOworfTsKKworY2xhc3MgQnl0ZXNB
cnJheUJsb2JJdGVtIDogcHVibGljIEJsb2JJdGVtIHsKK3B1YmxpYzoKKyAgICBCeXRlc0FycmF5
QmxvYkl0ZW0oY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IHNpemUpOworICAgIHZpcnR1YWwgdW5z
aWduZWQgbG9uZyBsb25nIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2J5dGVzQXJyYXkuc2l6ZSgp
OyB9CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9ieXRl
c0FycmF5LmRhdGEoKTsgfQorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxCbG9iSXRlbT4gZGVlcENv
cHkoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZXF1YWxzKGNvbnN0IEJsb2JJdGVtKikgY29u
c3Q7CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPGNoYXI+IG1fYnl0ZXNBcnJheTsKK307CisKK2Ns
YXNzIEZpbGVCbG9iSXRlbSA6IHB1YmxpYyBCbG9iSXRlbSB7CitwdWJsaWM6CisgICAgRmlsZUJs
b2JJdGVtKGNvbnN0IFN0cmluZyYgcGF0aCk7CisgICAgdmlydHVhbCBjb25zdCBTdHJpbmcmIHVu
aXF1ZU5hbWUoKSBjb25zdCB7IHJldHVybiBtX2ZpbGVOYW1lOyB9CisgICAgdmlydHVhbCBjb25z
dCBTdHJpbmcmIHBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0KKworICAgIC8vIEJsb2JJ
dGVtIG1ldGhvZHMuCisgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSgpIGNvbnN0
OworICAgIHZpcnR1YWwgY29uc3QgRmlsZUJsb2JJdGVtKiB0b0ZpbGVCbG9iSXRlbSgpIGNvbnN0
IHsgcmV0dXJuIHRoaXM7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8QmxvYkl0ZW0+IGRlZXBD
b3B5KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGVxdWFscyhjb25zdCBCbG9iSXRlbSopIGNv
bnN0OworCitwcml2YXRlOgorICAgIFN0cmluZyBtX3BhdGg7CisgICAgU3RyaW5nIG1fZmlsZU5h
bWU7Cit9OworCisjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCisKKy8vIEJsb2JJdGVtIGNsYXNzIGZv
ciBzbGljZWQgZGF0YSAoc3RyaW5nIG9yIGJ5dGVzLWFycmF5KS4KK2NsYXNzIERhdGFSYW5nZUJs
b2JJdGVtIDogcHVibGljIEJsb2JJdGVtIHsKK3B1YmxpYzoKKyAgICBEYXRhUmFuZ2VCbG9iSXRl
bShQYXNzUmVmUHRyPEJsb2JJdGVtPiBpdGVtLCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBs
ZW5ndGgpOworCisgICAgLy8gQmxvYkl0ZW0gbWV0aG9kcy4KKyAgICB2aXJ0dWFsIHVuc2lnbmVk
IGxvbmcgbG9uZyBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KKyAgICB2aXJ0dWFs
IGNvbnN0IERhdGFSYW5nZUJsb2JJdGVtKiB0b0RhdGFSYW5nZUJsb2JJdGVtKCkgY29uc3QgeyBy
ZXR1cm4gdGhpczsgfQorICAgIHZpcnR1YWwgY29uc3QgY2hhciogZGF0YSgpIGNvbnN0OworICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxCbG9iSXRlbT4gZGVlcENvcHkoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIGJvb2wgZXF1YWxzKGNvbnN0IEJsb2JJdGVtKikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAg
UmVmUHRyPEJsb2JJdGVtPiBtX2l0ZW07CisgICAgbG9uZyBsb25nIG1fc3RhcnQ7CisgICAgbG9u
ZyBsb25nIG1fbGVuZ3RoOworfTsKKworY2xhc3MgRmlsZVJhbmdlQmxvYkl0ZW0gOiBwdWJsaWMg
RmlsZUJsb2JJdGVtIHsKK3B1YmxpYzoKKyAgICBGaWxlUmFuZ2VCbG9iSXRlbShjb25zdCBTdHJp
bmcmIHBhdGgsIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCwgZG91YmxlIHNuYXBz
aG90TW9kaWZpY2F0aW9uVGltZSk7CisgICAgbG9uZyBsb25nIHN0YXJ0KCkgY29uc3QgeyByZXR1
cm4gbV9zdGFydDsgfQorICAgIGRvdWJsZSBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUoKSBjb25z
dCB7IHJldHVybiBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZTsgfQorCisgICAgLy8gQmxvYkl0
ZW0gbWV0aG9kcy4KKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9sZW5ndGg7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IEZpbGVSYW5nZUJsb2JJdGVt
KiB0b0ZpbGVSYW5nZUJsb2JJdGVtKCkgY29uc3QgeyByZXR1cm4gdGhpczsgfQorICAgIHZpcnR1
YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3Q7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEJsb2JJdGVt
PiBkZWVwQ29weSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBlcXVhbHMoY29uc3QgQmxvYkl0
ZW0qKSBjb25zdDsKKworICAgIC8vIEZpbGVCbG9iSXRlbSBtZXRob2RzLgorICAgIHZpcnR1YWwg
Y29uc3QgU3RyaW5nJiB1bmlxdWVOYW1lKCkgY29uc3QgeyByZXR1cm4gbV91bmlxdWVOYW1lOyB9
CisKK3ByaXZhdGU6CisgICAgbG9uZyBsb25nIG1fc3RhcnQ7CisgICAgbG9uZyBsb25nIG1fbGVu
Z3RoOworICAgIFN0cmluZyBtX3VuaXF1ZU5hbWU7CisKKyAgICBkb3VibGUgbV9zbmFwc2hvdE1v
ZGlmaWNhdGlvblRpbWU7Cit9OworCisjZW5kaWYgLy8gRU5BQkxFKEJMT0JfU0xJQ0UpCisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEJsb2JJdGVtX2gKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvaHRtbC9GaWxlLmNwcCBiL1dlYkNvcmUvaHRtbC9GaWxlLmNwcAppbmRleCA5N2Zk
YzQ1NzhkNzRiMjI1ZTU5NDZmNGQ2YWVmMjU2NTI1NDQzYWU0Li45MmI3ZTU2OTlmNDFjMzA0MjNk
MTM2ZDAzMWU5YzMxNTc2OGE5ZTU2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvRmlsZS5jcHAK
KysrIGIvV2ViQ29yZS9odG1sL0ZpbGUuY3BwCkBAIC0zMSwxNCArMzEsMjIgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1GaWxlOjpGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkKLSAgICA6IEJs
b2IocGF0aCkKLSAgICAsIG1fbmFtZShwYXRoR2V0RmlsZU5hbWUocGF0aCkpCitzdGF0aWMgU3Ry
aW5nIGdldEZpbGVUeXBlRnJvbVBhdGgoY29uc3QgU3RyaW5nJiBwYXRoKQogewotICAgIC8vIFdl
IGRvbid0IHVzZSBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZvclBhdGgoKSBiZWNhdXNl
IGl0IHJldHVybnMgImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIgdXBvbiBmYWlsdXJlLgotICAg
IGludCBpbmRleCA9IG1fbmFtZS5yZXZlcnNlRmluZCgnLicpOworICAgIGludCBpbmRleCA9IHBh
dGgucmV2ZXJzZUZpbmQoJy4nKTsKICAgICBpZiAoaW5kZXggIT0gLTEpCi0gICAgICAgIG1fdHlw
ZSA9IE1JTUVUeXBlUmVnaXN0cnk6OmdldE1JTUVUeXBlRm9yRXh0ZW5zaW9uKG1fbmFtZS5zdWJz
dHJpbmcoaW5kZXggKyAxKSk7CisgICAgICAgIHJldHVybiBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRN
SU1FVHlwZUZvckV4dGVuc2lvbihwYXRoLnN1YnN0cmluZyhpbmRleCArIDEpKTsKKyAgICByZXR1
cm4gU3RyaW5nKCk7Cit9CisKK0ZpbGU6OkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKQorICAgIDog
QmxvYihwYXRoLCBnZXRGaWxlVHlwZUZyb21QYXRoKHBhdGgpKQoreworfQorCitjb25zdCBTdHJp
bmcgRmlsZTo6bmFtZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGl0ZW1zKCkuYXQoMCktPnRvRmls
ZUJsb2JJdGVtKCktPnVuaXF1ZU5hbWUoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0ZpbGUuaCBiL1dlYkNvcmUvaHRtbC9GaWxlLmgKaW5k
ZXggMDY1ZGQ4NmE3YjFlYmY3N2ZiNDA2NDZmOWM2ZTg3MDQ2OWQ3ZWIwOS4uNGNlY2E2NTU5OTYw
Y2JlM2IwMjU2NzIxZWI0NzhlZmQ3OGY5NGUwZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0Zp
bGUuaAorKysgYi9XZWJDb3JlL2h0bWwvRmlsZS5oCkBAIC00MSwxOCArNDEsMTQgQEAgcHVibGlj
OgogCiAgICAgdmlydHVhbCBib29sIGlzRmlsZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAot
ICAgIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQotICAgIGNv
bnN0IFN0cmluZyYgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgIGNvbnN0IFN0
cmluZyBuYW1lKCkgY29uc3Q7CiAKICAgICAvLyBGSVhNRTogb2Jzb2xldGUgYXR0cmlidXRlcy4g
VG8gYmUgcmVtb3ZlZC4KLSAgICBjb25zdCBTdHJpbmcmIGZpbGVOYW1lKCkgY29uc3QgeyByZXR1
cm4gbV9uYW1lOyB9CisgICAgY29uc3QgU3RyaW5nIGZpbGVOYW1lKCkgY29uc3QgeyByZXR1cm4g
bmFtZSgpOyB9CiAgICAgdW5zaWduZWQgbG9uZyBsb25nIGZpbGVTaXplKCkgY29uc3QgeyByZXR1
cm4gc2l6ZSgpOyB9CiAKIHByaXZhdGU6CiAgICAgRmlsZShjb25zdCBTdHJpbmcmIHBhdGgpOwot
Ci0gICAgU3RyaW5nIG1fbmFtZTsKLSAgICBTdHJpbmcgbV90eXBlOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0ZpbGVTdHJlYW0uY3BwIGIv
V2ViQ29yZS9odG1sL0ZpbGVTdHJlYW0uY3BwCmluZGV4IDcwODlmNjE2MTU0ZTRiMTBhMzI3NzNl
MDMzNTZhNzkzNjQ1OGY5N2YuLjI4NzI4MDJmOTlmM2VmMjJlY2Q1MWYzZGRhMmE5OTE2ZTZlMTJk
ODcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9GaWxlU3RyZWFtLmNwcAorKysgYi9XZWJDb3Jl
L2h0bWwvRmlsZVN0cmVhbS5jcHAKQEAgLTkwLDMwICs5MCwyNiBAQCB2b2lkIEZpbGVTdHJlYW06
Om9wZW5Gb3JSZWFkKEJsb2IqIGJsb2IpCiAgICAgfQogCiAjaWYgRU5BQkxFKEJMT0JfU0xJQ0Up
Ci0gICAgLy8gQ2hlY2sgdGhlIG1vZGlmaWNhdGlvbnQgdGltZSBmb3IgdGhlIHBvc3NpYmxlIGZp
bGUgY2hhbmdlLgotICAgIGlmIChibG9iLT5tb2RpZmljYXRpb25UaW1lKCkgIT0gQmxvYjo6ZG9O
b3RDaGVja0ZpbGVDaGFuZ2UgJiYgc3RhdGljX2Nhc3Q8dGltZV90PihibG9iLT5tb2RpZmljYXRp
b25UaW1lKCkpICE9IGN1cnJlbnRNb2RpZmljYXRpb25UaW1lKSB7Ci0gICAgICAgIG1fY2xpZW50
LT5kaWRGYWlsKE5PVF9SRUFEQUJMRV9FUlIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgLy8gSnVtcCB0byB0aGUgYmVnaW5uaW5nIHBvc2l0aW9uIGlmIHRoZSBmaWxlIGhhcyBiZWVu
IHNsaWNlZC4KLSAgICBpZiAoYmxvYi0+c3RhcnQoKSA+IDApIHsKLSAgICAgICAgaWYgKCFzZWVr
RmlsZShtX2hhbmRsZSwgYmxvYi0+c3RhcnQoKSwgU2Vla0Zyb21CZWdpbm5pbmcpKSB7CisgICAg
Y29uc3QgRmlsZVJhbmdlQmxvYkl0ZW0qIHJhbmdlID0gYmxvYi0+aXRlbXMoKS5hdCgwKS0+dG9G
aWxlUmFuZ2VCbG9iSXRlbSgpOworICAgIGlmIChyYW5nZSkgeworICAgICAgICAvLyBDaGVjayB0
aGUgbW9kaWZpY2F0aW9udCB0aW1lIGZvciB0aGUgcG9zc2libGUgZmlsZSBjaGFuZ2UuCisgICAg
ICAgIGlmIChzdGF0aWNfY2FzdDx0aW1lX3Q+KHJhbmdlLT5zbmFwc2hvdE1vZGlmaWNhdGlvblRp
bWUoKSkgIT0gY3VycmVudE1vZGlmaWNhdGlvblRpbWUpIHsKICAgICAgICAgICAgIG1fY2xpZW50
LT5kaWRGYWlsKE5PVF9SRUFEQUJMRV9FUlIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CisKKyAgICAgICAgLy8gSnVtcCB0byB0aGUgYmVnaW5uaW5nIHBvc2l0aW9uIGlmIHRoZSBm
aWxlIGhhcyBiZWVuIHNsaWNlZC4KKyAgICAgICAgaWYgKHJhbmdlLT5zdGFydCgpID4gMCkgewor
ICAgICAgICAgICAgaWYgKHNlZWtGaWxlKG1faGFuZGxlLCByYW5nZS0+c3RhcnQoKSwgU2Vla0Zy
b21CZWdpbm5pbmcpIDwgMCkgeworICAgICAgICAgICAgICAgIG1fY2xpZW50LT5kaWRGYWlsKE5P
VF9SRUFEQUJMRV9FUlIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQogICAgIH0KICNlbmRpZgogCiAgICAgLy8gR2V0IHRoZSBzaXplLgotI2lmIEVO
QUJMRShCTE9CX1NMSUNFKQotICAgIG1fdG90YWxCeXRlc1RvUmVhZCA9IGJsb2ItPmxlbmd0aCgp
OwotICAgIGlmIChtX3RvdGFsQnl0ZXNUb1JlYWQgPT0gQmxvYjo6dG9FbmRPZkZpbGUpCi0gICAg
ICAgIG1fdG90YWxCeXRlc1RvUmVhZCA9IGJsb2ItPnNpemUoKSAtIGJsb2ItPnN0YXJ0KCk7Ci0j
ZWxzZQotICAgIG1fdG90YWwgPSBibG9iLT5zaXplKCk7Ci0jZW5kaWYKLQorICAgIG1fdG90YWxC
eXRlc1RvUmVhZCA9IGJsb2ItPnNpemUoKTsKICAgICBtX2NsaWVudC0+ZGlkR2V0U2l6ZShtX3Rv
dGFsQnl0ZXNUb1JlYWQpOwogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvRm9ybURhdGFM
aXN0LmNwcCBiL1dlYkNvcmUvaHRtbC9Gb3JtRGF0YUxpc3QuY3BwCmluZGV4IDI4MWM5ZmU0MThl
MWM0ODMzYmI4N2Y4MmY3NGYxY2M0ZDcyMmQ1N2MuLjJiNGJhMGM4MjAwNjRlYTVkZjY2OWQ5NmJl
OTVhMDgyZDVmMGQ3N2IgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9Gb3JtRGF0YUxpc3QuY3Bw
CisrKyBiL1dlYkNvcmUvaHRtbC9Gb3JtRGF0YUxpc3QuY3BwCkBAIC0yOCw2NCArMjgsMjIgQEAg
Rm9ybURhdGFMaXN0OjpGb3JtRGF0YUxpc3QoY29uc3QgVGV4dEVuY29kaW5nJiBjKQogewogfQog
Ci12b2lkIEZvcm1EYXRhTGlzdDo6YXBwZW5kU3RyaW5nKGNvbnN0IENTdHJpbmcmIHMpCit2b2lk
IEZvcm1EYXRhTGlzdDo6YXBwZW5kU3RyaW5nKGNvbnN0IFN0cmluZyYgcykKIHsKLSAgICBtX2xp
c3QuYXBwZW5kKHMpOworICAgIG1fbGlzdC5hcHBlbmQoQmxvYkl0ZW06OmNyZWF0ZVN0cmluZ0Js
b2JJdGVtKHMsIEVuZGluZ0NSTEYsIG1fZW5jb2RpbmcpKTsKIH0KIAotLy8gQ2hhbmdlIHBsYWlu
IENSIGFuZCBwbGFpbiBMRiB0byBDUkxGIHBhaXJzLgotc3RhdGljIENTdHJpbmcgZml4TGluZUJy
ZWFrcyhjb25zdCBDU3RyaW5nJiBzKQordm9pZCBGb3JtRGF0YUxpc3Q6OmFwcGVuZFN0cmluZyhj
b25zdCBDU3RyaW5nJiBzKQogewotICAgIC8vIENvbXB1dGUgdGhlIGxlbmd0aC4KLSAgICB1bnNp
Z25lZCBuZXdMZW4gPSAwOwotICAgIGNvbnN0IGNoYXIqIHAgPSBzLmRhdGEoKTsKLSAgICB3aGls
ZSAoY2hhciBjID0gKnArKykgewotICAgICAgICBpZiAoYyA9PSAnXHInKSB7Ci0gICAgICAgICAg
ICAvLyBTYWZlIHRvIGxvb2sgYWhlYWQgYmVjYXVzZSBvZiB0cmFpbGluZyAnXDAnLgotICAgICAg
ICAgICAgaWYgKCpwICE9ICdcbicpIHsKLSAgICAgICAgICAgICAgICAvLyBUdXJuIENSIGludG8g
Q1JMRi4KLSAgICAgICAgICAgICAgICBuZXdMZW4gKz0gMjsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfSBlbHNlIGlmIChjID09ICdcbicpIHsKLSAgICAgICAgICAgIC8vIFR1cm4gTEYgaW50byBD
UkxGLgotICAgICAgICAgICAgbmV3TGVuICs9IDI7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAvLyBMZWF2ZSBvdGhlciBjaGFyYWN0ZXJzIGFsb25lLgotICAgICAgICAgICAgbmV3TGVu
ICs9IDE7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKG5ld0xlbiA9PSBzLmxlbmd0aCgpKSB7
Ci0gICAgICAgIHJldHVybiBzOwotICAgIH0KLSAgICAKLSAgICAvLyBNYWtlIGEgY29weSBvZiB0
aGUgc3RyaW5nLgotICAgIHAgPSBzLmRhdGEoKTsKLSAgICBjaGFyKiBxOwotICAgIENTdHJpbmcg
cmVzdWx0ID0gQ1N0cmluZzo6bmV3VW5pbml0aWFsaXplZChuZXdMZW4sIHEpOwotICAgIHdoaWxl
IChjaGFyIGMgPSAqcCsrKSB7Ci0gICAgICAgIGlmIChjID09ICdccicpIHsKLSAgICAgICAgICAg
IC8vIFNhZmUgdG8gbG9vayBhaGVhZCBiZWNhdXNlIG9mIHRyYWlsaW5nICdcMCcuCi0gICAgICAg
ICAgICBpZiAoKnAgIT0gJ1xuJykgewotICAgICAgICAgICAgICAgIC8vIFR1cm4gQ1IgaW50byBD
UkxGLgotICAgICAgICAgICAgICAgICpxKysgPSAnXHInOwotICAgICAgICAgICAgICAgICpxKysg
PSAnXG4nOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKGMgPT0gJ1xuJykgewot
ICAgICAgICAgICAgLy8gVHVybiBMRiBpbnRvIENSTEYuCi0gICAgICAgICAgICAqcSsrID0gJ1xy
JzsKLSAgICAgICAgICAgICpxKysgPSAnXG4nOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgLy8gTGVhdmUgb3RoZXIgY2hhcmFjdGVycyBhbG9uZS4KLSAgICAgICAgICAgICpxKysgPSBj
OwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7CisgICAgbV9saXN0LmFwcGVu
ZChCbG9iSXRlbTo6Y3JlYXRlU3RyaW5nQmxvYkl0ZW0ocykpOwogfQogCi12b2lkIEZvcm1EYXRh
TGlzdDo6YXBwZW5kU3RyaW5nKGNvbnN0IFN0cmluZyYgcykKK3ZvaWQgRm9ybURhdGFMaXN0Ojph
cHBlbmRCbG9iKGNvbnN0IFN0cmluZyYga2V5LCBQYXNzUmVmUHRyPEJsb2I+IGJsb2IpCiB7Ci0g
ICAgQ1N0cmluZyBjc3RyID0gZml4TGluZUJyZWFrcyhtX2VuY29kaW5nLmVuY29kZShzLmNoYXJh
Y3RlcnMoKSwgcy5sZW5ndGgoKSwgRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpKTsKLSAgICBtX2xp
c3QuYXBwZW5kKGNzdHIpOworICAgIGFwcGVuZFN0cmluZyhrZXkpOworICAgIGNvbnN0IEJsb2I6
Okl0ZW1MaXN0JiBsaXN0ID0gYmxvYi0+aXRlbXMoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGxpc3Quc2l6ZSgpOyArK2kpCisgICAgICAgIG1fbGlzdC5hcHBlbmQobGlzdC5hdChpKSk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvRm9ybURhdGFM
aXN0LmggYi9XZWJDb3JlL2h0bWwvRm9ybURhdGFMaXN0LmgKaW5kZXggOGVjZjY0ZWU5M2FkNTI0
ZjQ3OTIxZjFkODIyZjlhMDhiYTAxM2Q3Yy4uZDg2MTRkNzEwMTAwMzI4ZDMzYjExNGQzY2RkYWU2
MTFiY2FlNzViOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0Zvcm1EYXRhTGlzdC5oCisrKyBi
L1dlYkNvcmUvaHRtbC9Gb3JtRGF0YUxpc3QuaApAQCAtMjEsNyArMjEsOCBAQAogI2lmbmRlZiBG
b3JtRGF0YUxpc3RfaAogI2RlZmluZSBGb3JtRGF0YUxpc3RfaAogCi0jaW5jbHVkZSAiQmxvYi5o
IgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJGaWxlLmgiCiAjaW5jbHVk
ZSAiVGV4dEVuY29kaW5nLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCkBAIC00
NiwyNCArNDcsMjMgQEAgcHVibGljOgogICAgICAgICBhcHBlbmRTdHJpbmcoa2V5KTsKICAgICAg
ICAgYXBwZW5kU3RyaW5nKFN0cmluZzo6bnVtYmVyKHZhbHVlKSk7CiAgICAgfQotICAgIHZvaWQg
YXBwZW5kQmxvYihjb25zdCBTdHJpbmcmIGtleSwgUGFzc1JlZlB0cjxCbG9iPiBibG9iKQotICAg
IHsKLSAgICAgICAgYXBwZW5kU3RyaW5nKGtleSk7Ci0gICAgICAgIG1fbGlzdC5hcHBlbmQoYmxv
Yik7Ci0gICAgfQorICAgIHZvaWQgYXBwZW5kQmxvYihjb25zdCBTdHJpbmcmIGtleSwgUGFzc1Jl
ZlB0cjxCbG9iPiBibG9iKTsKIAorICAgIC8vIEEgc2ltcGxlIHdyYXBwZXIgZm9yIEJsb2JJdGVt
LgogICAgIGNsYXNzIEl0ZW0gewogICAgIHB1YmxpYzoKICAgICAgICAgSXRlbSgpIHsgfQotICAg
ICAgICBJdGVtKGNvbnN0IFdURjo6Q1N0cmluZyYgZGF0YSkgOiBtX2RhdGEoZGF0YSkgeyB9Ci0g
ICAgICAgIEl0ZW0oUGFzc1JlZlB0cjxCbG9iPiBibG9iKSA6IG1fYmxvYihibG9iKSB7IH0KLQot
ICAgICAgICBjb25zdCBXVEY6OkNTdHJpbmcmIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7
IH0KLSAgICAgICAgQmxvYiogYmxvYigpIGNvbnN0IHsgcmV0dXJuIG1fYmxvYi5nZXQoKTsgfQor
ICAgICAgICBJdGVtKFBhc3NSZWZQdHI8QmxvYkl0ZW0+IGl0ZW0pIDogbV9pdGVtKGl0ZW0pCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX2l0ZW0tPnRvU3RyaW5nQmxvYkl0ZW0oKSkKKyAg
ICAgICAgICAgICAgICBtX2NzdHIgPSBtX2l0ZW0tPnRvU3RyaW5nQmxvYkl0ZW0oKS0+Y3N0cigp
OworICAgICAgICB9CisgICAgICAgIGNvbnN0IFBhc3NSZWZQdHI8QmxvYkl0ZW0+IGl0ZW0oKSBj
b25zdCB7IHJldHVybiBtX2l0ZW07IH0KKyAgICAgICAgY29uc3QgV1RGOjpDU3RyaW5nJiBkYXRh
KCkgY29uc3QgeyByZXR1cm4gbV9jc3RyOyB9CiAKICAgICBwcml2YXRlOgotICAgICAgICBXVEY6
OkNTdHJpbmcgbV9kYXRhOwotICAgICAgICBSZWZQdHI8QmxvYj4gbV9ibG9iOworICAgICAgICBS
ZWZQdHI8QmxvYkl0ZW0+IG1faXRlbTsKKyAgICAgICAgV1RGOjpDU3RyaW5nIG1fY3N0cjsKICAg
ICB9OwogCiAgICAgY29uc3QgVmVjdG9yPEl0ZW0+JiBsaXN0KCkgY29uc3QgeyByZXR1cm4gbV9s
aXN0OyB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3Bw
IGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcAppbmRleCA5MTgwMDJhZWZk
ODFhNjg5MWY5ZjE5YmFmNDRkNzU1OTFmZGZhNDg0Li5mOTNiODA2Yjg1MmRhZmJlOTBiNmRlNjFj
YjAzZjBmZmNmMDFkNzJiIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9y
bURhdGEuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAKQEAg
LTIyLDIwICsyMiw0NSBAQAogI2luY2x1ZGUgIkZvcm1EYXRhLmgiCiAKICNpbmNsdWRlICJCbG9i
LmgiCisjaW5jbHVkZSAiQmxvYkl0ZW0uaCIKICNpbmNsdWRlICJDaHJvbWUuaCIKICNpbmNsdWRl
ICJDaHJvbWVDbGllbnQuaCIKICNpbmNsdWRlICJET01Gb3JtRGF0YS5oIgogI2luY2x1ZGUgIkRv
Y3VtZW50LmgiCi0jaW5jbHVkZSAiRmlsZS5oIgogI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKICNp
bmNsdWRlICJGb3JtRGF0YUJ1aWxkZXIuaCIKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5Lmgi
CiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgotI2luY2x1ZGUg
IlVVSUQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisjaWYgRU5BQkxFKEJMT0JfU0xJQ0Up
Citjb25zdCBsb25nIGxvbmcgRm9ybURhdGFFbGVtZW50Ojp0b0VuZE9mRmlsZSA9IC0xOworI2Vu
ZGlmCisKK0Zvcm1EYXRhRWxlbWVudDo6Rm9ybURhdGFFbGVtZW50KFBhc3NSZWZQdHI8QmxvYkl0
ZW0+IGJsb2JJdGVtLCBib29sIHNob3VsZEdlbmVyYXRlRmlsZSkKKyAgICA6IG1faXRlbShibG9i
SXRlbSkKKyAgICAsIG1fdHlwZShtX2l0ZW0tPnRvRmlsZUJsb2JJdGVtKCkgPyBlbmNvZGVkRmls
ZSA6IGRhdGEpCisgICAgLCBtX2RhdGEobV9pdGVtLmdldCgpKQorICAgICwgbV9maWxlbmFtZSht
X2l0ZW0tPnRvRmlsZUJsb2JJdGVtKCkgPyBtX2l0ZW0tPnRvRmlsZUJsb2JJdGVtKCktPnBhdGgo
KSA6IFN0cmluZygpKQorI2lmIEVOQUJMRShCTE9CX1NMSUNFKQorICAgICwgbV9maWxlU3RhcnQo
MCkKKyAgICAsIG1fZmlsZUxlbmd0aCh0b0VuZE9mRmlsZSkKKyAgICAsIG1fZXhwZWN0ZWRGaWxl
TW9kaWZpY2F0aW9uVGltZSgwKQorI2VuZGlmCisgICAgLCBtX3Nob3VsZEdlbmVyYXRlRmlsZShz
aG91bGRHZW5lcmF0ZUZpbGUpCit7CisjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCisgICAgaWYgKG1f
aXRlbS0+dG9GaWxlUmFuZ2VCbG9iSXRlbSgpKSB7CisgICAgICAgIGNvbnN0IEZpbGVSYW5nZUJs
b2JJdGVtKiByYW5nZSA9IG1faXRlbS0+dG9GaWxlUmFuZ2VCbG9iSXRlbSgpOworICAgICAgICBt
X2ZpbGVTdGFydCA9IHJhbmdlLT5zdGFydCgpOworICAgICAgICBtX2ZpbGVMZW5ndGggPSByYW5n
ZS0+c2l6ZSgpOworICAgICAgICBtX2V4cGVjdGVkRmlsZU1vZGlmaWNhdGlvblRpbWUgPSByYW5n
ZS0+c25hcHNob3RNb2RpZmljYXRpb25UaW1lKCk7CisgICAgfQorI2VuZGlmCit9CisKIGlubGlu
ZSBGb3JtRGF0YTo6Rm9ybURhdGEoKQogICAgIDogbV9pZGVudGlmaWVyKDApCiAgICAgLCBtX2hh
c0dlbmVyYXRlZEZpbGVzKGZhbHNlKQpAQCAtODUsNyArMTEwLDcgQEAgUGFzc1JlZlB0cjxGb3Jt
RGF0YT4gRm9ybURhdGE6OmNyZWF0ZShjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSkKIFBh
c3NSZWZQdHI8Rm9ybURhdGE+IEZvcm1EYXRhOjpjcmVhdGUoY29uc3QgQ1N0cmluZyYgc3RyaW5n
KQogewogICAgIFJlZlB0cjxGb3JtRGF0YT4gcmVzdWx0ID0gY3JlYXRlKCk7Ci0gICAgcmVzdWx0
LT5hcHBlbmREYXRhKHN0cmluZy5kYXRhKCksIHN0cmluZy5sZW5ndGgoKSk7CisgICAgcmVzdWx0
LT5hcHBlbmRTdHJpbmcoc3RyaW5nKTsKICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0K
IApAQCAtMTI1LDQ1ICsxNTAsNDIgQEAgUGFzc1JlZlB0cjxGb3JtRGF0YT4gRm9ybURhdGE6OmRl
ZXBDb3B5KCkgY29uc3QKICAgICBmb3JtRGF0YS0+bV9lbGVtZW50cy5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KG4pOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbjsgKytpKSB7CiAgICAgICAg
IGNvbnN0IEZvcm1EYXRhRWxlbWVudCYgZSA9IG1fZWxlbWVudHNbaV07Ci0gICAgICAgIHN3aXRj
aCAoZS5tX3R5cGUpIHsKLSAgICAgICAgY2FzZSBGb3JtRGF0YUVsZW1lbnQ6OmRhdGE6Ci0gICAg
ICAgICAgICBmb3JtRGF0YS0+bV9lbGVtZW50cy5hcHBlbmQoRm9ybURhdGFFbGVtZW50KGUubV9k
YXRhKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBGb3JtRGF0YUVsZW1lbnQ6
OmVuY29kZWRGaWxlOgotI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgICAgICAgICAgZm9ybURh
dGEtPm1fZWxlbWVudHMuYXBwZW5kKEZvcm1EYXRhRWxlbWVudChlLm1fZmlsZW5hbWUsIGUubV9m
aWxlU3RhcnQsIGUubV9maWxlTGVuZ3RoLCBlLm1fZXhwZWN0ZWRGaWxlTW9kaWZpY2F0aW9uVGlt
ZSwgZS5tX3Nob3VsZEdlbmVyYXRlRmlsZSkpOwotI2Vsc2UKLSAgICAgICAgICAgIGZvcm1EYXRh
LT5tX2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVsZW1lbnQoZS5tX2ZpbGVuYW1lLCBlLm1fc2hv
dWxkR2VuZXJhdGVGaWxlKSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
CisgICAgICAgIGZvcm1EYXRhLT5tX2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVsZW1lbnQoZS5p
dGVtKCktPmRlZXBDb3B5KCksIGUubV9zaG91bGRHZW5lcmF0ZUZpbGUpKTsKICAgICB9CiAgICAg
cmV0dXJuIGZvcm1EYXRhLnJlbGVhc2UoKTsKIH0KIAogdm9pZCBGb3JtRGF0YTo6YXBwZW5kRGF0
YShjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSkKIHsKLSAgICBpZiAobV9lbGVtZW50cy5p
c0VtcHR5KCkgfHwgbV9lbGVtZW50cy5sYXN0KCkubV90eXBlICE9IEZvcm1EYXRhRWxlbWVudDo6
ZGF0YSkKLSAgICAgICAgbV9lbGVtZW50cy5hcHBlbmQoRm9ybURhdGFFbGVtZW50KCkpOwotICAg
IEZvcm1EYXRhRWxlbWVudCYgZSA9IG1fZWxlbWVudHMubGFzdCgpOwotICAgIHNpemVfdCBvbGRT
aXplID0gZS5tX2RhdGEuc2l6ZSgpOwotICAgIGUubV9kYXRhLmdyb3cob2xkU2l6ZSArIHNpemUp
OwotICAgIG1lbWNweShlLm1fZGF0YS5kYXRhKCkgKyBvbGRTaXplLCBkYXRhLCBzaXplKTsKKyAg
ICBtX2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVsZW1lbnQoQmxvYkl0ZW06OmNyZWF0ZUJ5dGVz
QXJyYXlCbG9iSXRlbShzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZGF0YSksIHNpemUpKSk7Cit9
CisKK3ZvaWQgRm9ybURhdGE6OmFwcGVuZFN0cmluZyhjb25zdCBDU3RyaW5nJiBzdHJpbmcpCit7
CisgICAgbV9lbGVtZW50cy5hcHBlbmQoRm9ybURhdGFFbGVtZW50KEJsb2JJdGVtOjpjcmVhdGVT
dHJpbmdCbG9iSXRlbShzdHJpbmcpKSk7CiB9CiAKIHZvaWQgRm9ybURhdGE6OmFwcGVuZEZpbGUo
Y29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgYm9vbCBzaG91bGRHZW5lcmF0ZUZpbGUpCiB7Ci0jaWYg
RU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgbV9lbGVtZW50cy5hcHBlbmQoRm9ybURhdGFFbGVtZW50
KGZpbGVuYW1lLCAwLCBCbG9iOjp0b0VuZE9mRmlsZSwgQmxvYjo6ZG9Ob3RDaGVja0ZpbGVDaGFu
Z2UsIHNob3VsZEdlbmVyYXRlRmlsZSkpOwotI2Vsc2UKLSAgICBtX2VsZW1lbnRzLmFwcGVuZChG
b3JtRGF0YUVsZW1lbnQoZmlsZW5hbWUsIHNob3VsZEdlbmVyYXRlRmlsZSkpOwotI2VuZGlmCisg
ICAgbV9lbGVtZW50cy5hcHBlbmQoRm9ybURhdGFFbGVtZW50KEJsb2JJdGVtOjpjcmVhdGVGaWxl
QmxvYkl0ZW0oZmlsZW5hbWUpLCBzaG91bGRHZW5lcmF0ZUZpbGUpKTsKK30KKwordm9pZCBGb3Jt
RGF0YTo6YXBwZW5kQmxvYihCbG9iKiBiKQoreworICAgIFJlZlB0cjxCbG9iPiBibG9iID0gYjsK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2ItPml0ZW1zKCkuc2l6ZSgpOyArK2kpCisg
ICAgICAgIG1fZWxlbWVudHMuYXBwZW5kKGJsb2ItPml0ZW1zKCkuYXQoaSkpOwogfQogCiAjaWYg
RU5BQkxFKEJMT0JfU0xJQ0UpCiB2b2lkIEZvcm1EYXRhOjphcHBlbmRGaWxlUmFuZ2UoY29uc3Qg
U3RyaW5nJiBmaWxlbmFtZSwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoLCBkb3Vi
bGUgZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lLCBib29sIHNob3VsZEdlbmVyYXRlRmlsZSkKIHsK
LSAgICBtX2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVsZW1lbnQoZmlsZW5hbWUsIHN0YXJ0LCBs
ZW5ndGgsIGV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZSwgc2hvdWxkR2VuZXJhdGVGaWxlKSk7Cisg
ICAgaWYgKGxlbmd0aCA9PSBGb3JtRGF0YUVsZW1lbnQ6OnRvRW5kT2ZGaWxlKSB7CisgICAgICAg
IEFTU0VSVCghc3RhcnQpOworICAgICAgICBBU1NFUlQoIWV4cGVjdGVkTW9kaWZpY2F0aW9uVGlt
ZSk7CisgICAgICAgIG1fZWxlbWVudHMuYXBwZW5kKEZvcm1EYXRhRWxlbWVudChCbG9iSXRlbTo6
Y3JlYXRlRmlsZUJsb2JJdGVtKGZpbGVuYW1lKSwgc2hvdWxkR2VuZXJhdGVGaWxlKSk7CisgICAg
fSBlbHNlCisgICAgICAgIG1fZWxlbWVudHMuYXBwZW5kKEZvcm1EYXRhRWxlbWVudChCbG9iSXRl
bTo6Y3JlYXRlRmlsZVJhbmdlQmxvYkl0ZW0oZmlsZW5hbWUsIHN0YXJ0LCBsZW5ndGgsIGV4cGVj
dGVkTW9kaWZpY2F0aW9uVGltZSksIHNob3VsZEdlbmVyYXRlRmlsZSkpOwogfQogI2VuZGlmCiAK
QEAgLTE4NiwyMyArMjA4LDEzIEBAIHZvaWQgRm9ybURhdGE6OmFwcGVuZERPTUZvcm1EYXRhKGNv
bnN0IERPTUZvcm1EYXRhJiBkb21Gb3JtRGF0YSwgYm9vbCBpc011bHRpUGFyCiAgICAgICAgICAg
ICBWZWN0b3I8Y2hhcj4gaGVhZGVyOwogICAgICAgICAgICAgZm9ybURhdGFCdWlsZGVyLmJlZ2lu
TXVsdGlQYXJ0SGVhZGVyKGhlYWRlciwgbV9ib3VuZGFyeS5kYXRhKCksIGtleS5kYXRhKCkpOwog
CisgICAgICAgICAgICBjb25zdCBSZWZQdHI8QmxvYkl0ZW0+IGl0ZW0gPSB2YWx1ZS5pdGVtKCk7
CiAgICAgICAgICAgICBib29sIHNob3VsZEdlbmVyYXRlRmlsZSA9IGZhbHNlOwogICAgICAgICAg
ICAgLy8gSWYgdGhlIGN1cnJlbnQgdHlwZSBpcyBGSUxFLCB0aGVuIHdlIGFsc28gbmVlZCB0byBp
bmNsdWRlIHRoZSBmaWxlbmFtZQotICAgICAgICAgICAgaWYgKHZhbHVlLmJsb2IoKSkgewotICAg
ICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgcGF0aCA9IHZhbHVlLmJsb2IoKS0+cGF0aCgpOwot
I2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgICAgICAgICAgICAgIFN0cmluZyBmaWxlTmFtZTsK
LSAgICAgICAgICAgICAgICBpZiAodmFsdWUuYmxvYigpLT5pc0ZpbGUoKSkKLSAgICAgICAgICAg
ICAgICAgICAgZmlsZU5hbWUgPSBzdGF0aWNfY2FzdDxGaWxlKj4odmFsdWUuYmxvYigpKS0+Zmls
ZU5hbWUoKTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8g
SWYgYSBibG9iIGlzIHNsaWNlZCBmcm9tIGEgZmlsZSwgaXQgZG9lcyBub3QgaGF2ZSB0aGUgZmls
ZW5hbWUuIEluIHRoaXMgY2FzZSwgbGV0J3MgcHJvZHVjZSBhIHVuaXF1ZSBmaWxlbmFtZS4KLSAg
ICAgICAgICAgICAgICAgICAgZmlsZU5hbWUgPSAiQmxvYiIgKyBjcmVhdGVDYW5vbmljYWxVVUlE
U3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lLnJlcGxhY2UoIi0iLCAiIik7
IC8vIEZvciBzYWZ0eSwgcmVtb3ZlICctJyBmcm9tIHRoZSBmaWxlbmFtZSBzbmNlIHNvbWUgc2Vy
dmVycyBtYXkgbm90IGxpa2UgaXQuCi0gICAgICAgICAgICAgICAgfQotI2Vsc2UKLSAgICAgICAg
ICAgICAgICBBU1NFUlQodmFsdWUuYmxvYigpLT5pc0ZpbGUoKSk7Ci0gICAgICAgICAgICAgICAg
U3RyaW5nIGZpbGVOYW1lID0gc3RhdGljX2Nhc3Q8RmlsZSo+KHZhbHVlLmJsb2IoKSktPmZpbGVO
YW1lKCk7Ci0jZW5kaWYKKyAgICAgICAgICAgIGlmIChpdGVtLT50b0ZpbGVCbG9iSXRlbSgpKSB7
CisgICAgICAgICAgICAgICAgY29uc3QgRmlsZUJsb2JJdGVtKiBmaWxlID0gaXRlbS0+dG9GaWxl
QmxvYkl0ZW0oKTsKKyAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHBhdGggPSBmaWxlLT5w
YXRoKCk7CisgICAgICAgICAgICAgICAgU3RyaW5nIGZpbGVOYW1lID0gZmlsZS0+dW5pcXVlTmFt
ZSgpOwogCiAgICAgICAgICAgICAgICAgLy8gTGV0IHRoZSBhcHBsaWNhdGlvbiBzcGVjaWZ5IGEg
ZmlsZW5hbWUgaWYgaXQncyBnb2luZyB0byBnZW5lcmF0ZSBhIHJlcGxhY2VtZW50IGZpbGUgZm9y
IHRoZSB1cGxvYWQuCiAgICAgICAgICAgICAgICAgaWYgKCFwYXRoLmlzRW1wdHkoKSkgewpAQCAt
MjE3LDkgKzIyOSw5IEBAIHZvaWQgRm9ybURhdGE6OmFwcGVuZERPTUZvcm1EYXRhKGNvbnN0IERP
TUZvcm1EYXRhJiBkb21Gb3JtRGF0YSwgYm9vbCBpc011bHRpUGFyCiAgICAgICAgICAgICAgICAg
Ly8gV2UgaGF2ZSB0byBpbmNsdWRlIHRoZSBmaWxlbmFtZT0iLi4iIHBhcnQgaW4gdGhlIGhlYWRl
ciwgZXZlbiBpZiB0aGUgZmlsZW5hbWUgaXMgZW1wdHkKICAgICAgICAgICAgICAgICBmb3JtRGF0
YUJ1aWxkZXIuYWRkRmlsZW5hbWVUb011bHRpUGFydEhlYWRlcihoZWFkZXIsIGVuY29kaW5nLCBm
aWxlTmFtZSk7CiAKLSAgICAgICAgICAgICAgICAvLyBJZiBhIGJsb2IgaXMgc2xpY2VkIGZyb20g
YSBmaWxlLCBkbyBub3QgYWRkIHRoZSBjb250ZW50IHR5cGUuIAorICAgICAgICAgICAgICAgIC8v
IElmIHRoZSBpdGVtIGlzIHNsaWNlZCBmcm9tIGEgZmlsZSwgZG8gbm90IGFkZCB0aGUgY29udGVu
dCB0eXBlLgogI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgICAgICAgICAgICAgIGlmICghZmls
ZU5hbWUuaXNFbXB0eSgpICYmIHZhbHVlLmJsb2IoKS0+aXNGaWxlKCkpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoIWZpbGVOYW1lLmlzRW1wdHkoKSAmJiAhaXRlbS0+dG9GaWxlUmFuZ2VCbG9iSXRl
bSgpKSB7CiAjZWxzZQogICAgICAgICAgICAgICAgIGlmICghZmlsZU5hbWUuaXNFbXB0eSgpKSB7
CiAjZW5kaWYKQEAgLTIzNywxNSArMjQ5LDcgQEAgdm9pZCBGb3JtRGF0YTo6YXBwZW5kRE9NRm9y
bURhdGEoY29uc3QgRE9NRm9ybURhdGEmIGRvbUZvcm1EYXRhLCBib29sIGlzTXVsdGlQYXIKIAog
ICAgICAgICAgICAgLy8gQXBwZW5kIGJvZHkKICAgICAgICAgICAgIGFwcGVuZERhdGEoaGVhZGVy
LmRhdGEoKSwgaGVhZGVyLnNpemUoKSk7Ci0gICAgICAgICAgICBpZiAoc2l6ZV90IGRhdGFTaXpl
ID0gdmFsdWUuZGF0YSgpLmxlbmd0aCgpKQotICAgICAgICAgICAgICAgIGFwcGVuZERhdGEodmFs
dWUuZGF0YSgpLmRhdGEoKSwgZGF0YVNpemUpOwotICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUu
YmxvYigpICYmICF2YWx1ZS5ibG9iKCktPnBhdGgoKS5pc0VtcHR5KCkpCi0jaWYgRU5BQkxFKEJM
T0JfU0xJQ0UpCi0gICAgICAgICAgICAgICAgYXBwZW5kRmlsZVJhbmdlKHZhbHVlLmJsb2IoKS0+
cGF0aCgpLCB2YWx1ZS5ibG9iKCktPnN0YXJ0KCksIHZhbHVlLmJsb2IoKS0+bGVuZ3RoKCksIHZh
bHVlLmJsb2IoKS0+bW9kaWZpY2F0aW9uVGltZSgpLCBzaG91bGRHZW5lcmF0ZUZpbGUpOwotI2Vs
c2UKLSAgICAgICAgICAgICAgICBhcHBlbmRGaWxlKHZhbHVlLmJsb2IoKS0+cGF0aCgpLCBzaG91
bGRHZW5lcmF0ZUZpbGUpOwotI2VuZGlmCi0KKyAgICAgICAgICAgIG1fZWxlbWVudHMuYXBwZW5k
KEZvcm1EYXRhRWxlbWVudChpdGVtLCBzaG91bGRHZW5lcmF0ZUZpbGUpKTsKICAgICAgICAgICAg
IGFwcGVuZERhdGEoIlxyXG4iLCAyKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8v
IE9taXQgdGhlIG5hbWUgImlzaW5kZXgiIGlmIGl0J3MgdGhlIGZpcnN0IGZvcm0gZGF0YSBlbGVt
ZW50LgpAQCAtMjU1LDcgKzI1OSw3IEBAIHZvaWQgRm9ybURhdGE6OmFwcGVuZERPTUZvcm1EYXRh
KGNvbnN0IERPTUZvcm1EYXRhJiBkb21Gb3JtRGF0YSwgYm9vbCBpc011bHRpUGFyCiAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgZm9ybURhdGFCdWlsZGVyLmFkZEtleVZhbHVlUGFp
ckFzRm9ybURhdGEoZW5jb2RlZERhdGEsIGtleS5kYXRhKCksIHZhbHVlLmRhdGEoKSk7CiAgICAg
ICAgIH0KLSAgICB9IAorICAgIH0KIAogICAgIGlmIChpc011bHRpUGFydEZvcm0pCiAgICAgICAg
IGZvcm1EYXRhQnVpbGRlci5hZGRCb3VuZGFyeVRvTXVsdGlQYXJ0SGVhZGVyKGVuY29kZWREYXRh
LCBtX2JvdW5kYXJ5LmRhdGEoKSwgdHJ1ZSk7CkBAIC0yNzAsMTIgKzI3NCw4IEBAIHZvaWQgRm9y
bURhdGE6OmZsYXR0ZW4oVmVjdG9yPGNoYXI+JiBkYXRhKSBjb25zdAogICAgIHNpemVfdCBuID0g
bV9lbGVtZW50cy5zaXplKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuOyArK2kpIHsK
ICAgICAgICAgY29uc3QgRm9ybURhdGFFbGVtZW50JiBlID0gbV9lbGVtZW50c1tpXTsKLSAgICAg
ICAgaWYgKGUubV90eXBlID09IEZvcm1EYXRhRWxlbWVudDo6ZGF0YSkgewotICAgICAgICAgICAg
c2l6ZV90IG9sZFNpemUgPSBkYXRhLnNpemUoKTsKLSAgICAgICAgICAgIHNpemVfdCBkZWx0YSA9
IGUubV9kYXRhLnNpemUoKTsKLSAgICAgICAgICAgIGRhdGEuZ3JvdyhvbGRTaXplICsgZGVsdGEp
OwotICAgICAgICAgICAgbWVtY3B5KGRhdGEuZGF0YSgpICsgb2xkU2l6ZSwgZS5tX2RhdGEuZGF0
YSgpLCBkZWx0YSk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKGUubV90eXBlID09IEZvcm1EYXRh
RWxlbWVudDo6ZGF0YSkKKyAgICAgICAgICAgIGRhdGEuYXBwZW5kKGUuaXRlbSgpLT5kYXRhKCks
IHN0YXRpY19jYXN0PHNpemVfdD4oZS5pdGVtKCktPnNpemUoKSkpOwogICAgIH0KIH0KIApAQCAt
Mjg5LDEwICsyODksMTAgQEAgU3RyaW5nIEZvcm1EYXRhOjpmbGF0dGVuVG9TdHJpbmcoKSBjb25z
dAogdm9pZCBGb3JtRGF0YTo6Z2VuZXJhdGVGaWxlcyhEb2N1bWVudCogZG9jdW1lbnQpCiB7CiAg
ICAgQVNTRVJUKCFtX2hhc0dlbmVyYXRlZEZpbGVzKTsKLSAgICAKKwogICAgIGlmIChtX2hhc0dl
bmVyYXRlZEZpbGVzKQogICAgICAgICByZXR1cm47Ci0gICAgCisKICAgICBQYWdlKiBwYWdlID0g
ZG9jdW1lbnQtPnBhZ2UoKTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybjsKQEAgLTMw
Miw3ICszMDIsNyBAQCB2b2lkIEZvcm1EYXRhOjpnZW5lcmF0ZUZpbGVzKERvY3VtZW50KiBkb2N1
bWVudCkKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG47ICsraSkgewogICAgICAgICBGb3Jt
RGF0YUVsZW1lbnQmIGUgPSBtX2VsZW1lbnRzW2ldOwogICAgICAgICBpZiAoZS5tX3R5cGUgPT0g
Rm9ybURhdGFFbGVtZW50OjplbmNvZGVkRmlsZSAmJiBlLm1fc2hvdWxkR2VuZXJhdGVGaWxlKSB7
Ci0gICAgICAgICAgICBlLm1fZ2VuZXJhdGVkRmlsZW5hbWUgPSBjbGllbnQtPmdlbmVyYXRlUmVw
bGFjZW1lbnRGaWxlKGUubV9maWxlbmFtZSk7CisgICAgICAgICAgICBlLm1fZ2VuZXJhdGVkRmls
ZW5hbWUgPSBjbGllbnQtPmdlbmVyYXRlUmVwbGFjZW1lbnRGaWxlKGUuaXRlbSgpLT50b0ZpbGVC
bG9iSXRlbSgpLT5wYXRoKCkpOwogICAgICAgICAgICAgbV9oYXNHZW5lcmF0ZWRGaWxlcyA9IHRy
dWU7CiAgICAgICAgIH0KICAgICB9CkBAIC0zMTIsNyArMzEyLDcgQEAgdm9pZCBGb3JtRGF0YTo6
cmVtb3ZlR2VuZXJhdGVkRmlsZXNJZk5lZWRlZCgpCiB7CiAgICAgaWYgKCFtX2hhc0dlbmVyYXRl
ZEZpbGVzKQogICAgICAgICByZXR1cm47Ci0gICAgICAgIAorCiAgICAgc2l6ZV90IG4gPSBtX2Vs
ZW1lbnRzLnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG47ICsraSkgewogICAg
ICAgICBGb3JtRGF0YUVsZW1lbnQmIGUgPSBtX2VsZW1lbnRzW2ldOwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmggYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvRm9ybURhdGEuaAppbmRleCBhNDM5MDIzNDc5NmEwZTJmMTRmNWQzNDlmNWRkMGVmZmMwYTRi
N2NkLi45OWVlN2M1MTIxZDgwYWM3OWVlNTkyMWVkY2JiNTI3YWU3M2FiMjQyIDEwMDY0NAotLS0g
YS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuaAorKysgYi9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvRm9ybURhdGEuaApAQCAtMjAsNiArMjAsNyBAQAogI2lmbmRlZiBGb3JtRGF0
YV9oCiAjZGVmaW5lIEZvcm1EYXRhX2gKIAorI2luY2x1ZGUgIkJsb2IuaCIKICNpbmNsdWRlICJQ
bGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgpAQCAtMjksNTIgKzMwLDQ5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNs
YXNzIERPTUZvcm1EYXRhOwogY2xhc3MgRG9jdW1lbnQ7CiAKKy8vIEEgd3JhcHBlciBjbGFzcyBv
ZiBCbG9iSXRlbSBmb3IgRm9ybURhdGEuCiBjbGFzcyBGb3JtRGF0YUVsZW1lbnQgewogcHVibGlj
OgotICAgIEZvcm1EYXRhRWxlbWVudCgpIDogbV90eXBlKGRhdGEpIHsgfQotICAgIEZvcm1EYXRh
RWxlbWVudChjb25zdCBWZWN0b3I8Y2hhcj4mIGFycmF5KSA6IG1fdHlwZShkYXRhKSwgbV9kYXRh
KGFycmF5KSB7IH0KLSNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAgICBGb3JtRGF0YUVsZW1lbnQo
Y29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgbG9uZyBsb25nIGZpbGVTdGFydCwgbG9uZyBsb25nIGZp
bGVMZW5ndGgsIGRvdWJsZSBleHBlY3RlZEZpbGVNb2RpZmljYXRpb25UaW1lLCBib29sIHNob3Vs
ZEdlbmVyYXRlRmlsZSkgOiBtX3R5cGUoZW5jb2RlZEZpbGUpLCBtX2ZpbGVuYW1lKGZpbGVuYW1l
KSwgbV9maWxlU3RhcnQoZmlsZVN0YXJ0KSwgbV9maWxlTGVuZ3RoKGZpbGVMZW5ndGgpLCBtX2V4
cGVjdGVkRmlsZU1vZGlmaWNhdGlvblRpbWUoZXhwZWN0ZWRGaWxlTW9kaWZpY2F0aW9uVGltZSks
IG1fc2hvdWxkR2VuZXJhdGVGaWxlKHNob3VsZEdlbmVyYXRlRmlsZSkgeyB9Ci0jZWxzZQotICAg
IEZvcm1EYXRhRWxlbWVudChjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBib29sIHNob3VsZEdlbmVy
YXRlRmlsZSkgOiBtX3R5cGUoZW5jb2RlZEZpbGUpLCBtX2ZpbGVuYW1lKGZpbGVuYW1lKSwgbV9z
aG91bGRHZW5lcmF0ZUZpbGUoc2hvdWxkR2VuZXJhdGVGaWxlKSB7IH0KLSNlbmRpZgorICAgIEZv
cm1EYXRhRWxlbWVudCgpIDogbV9kYXRhKDApIHsgfQorICAgIEZvcm1EYXRhRWxlbWVudChQYXNz
UmVmUHRyPEJsb2JJdGVtPiBibG9iSXRlbSwgYm9vbCBzaG91bGRHZW5lcmF0ZUZpbGUgPSBmYWxz
ZSk7CisKKyAgICBjb25zdCBCbG9iSXRlbSogaXRlbSgpIGNvbnN0IHsgcmV0dXJuIG1faXRlbS5n
ZXQoKTsgfQorCisgICAgUmVmUHRyPEJsb2JJdGVtPiBtX2l0ZW07CiAKKyAgICAvLyBGSVhNRTog
Y2xlYW4gbWUgdXAuICBDb2RlIGJlbG93IGFyZSBtb3N0bHkga2VwdCBmb3IgY29tcGF0aWJpbGl0
eS4KICAgICBlbnVtIHsgZGF0YSwgZW5jb2RlZEZpbGUgfSBtX3R5cGU7Ci0gICAgVmVjdG9yPGNo
YXI+IG1fZGF0YTsKKyAgICBjb25zdCBzdHJ1Y3QgQmxvYkl0ZW1XcmFwcGVyIHsKKyAgICAgICAg
QmxvYkl0ZW1XcmFwcGVyKGNvbnN0IEJsb2JJdGVtV3JhcHBlciYgdikgOiBtX2l0ZW0odi5tX2l0
ZW0pIHsgfQorICAgICAgICBCbG9iSXRlbVdyYXBwZXIoY29uc3QgQmxvYkl0ZW0qIGl0ZW0pIDog
bV9pdGVtKGl0ZW0pIHsgfQorICAgICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHN0
YXRpY19jYXN0PHNpemVfdD4obV9pdGVtLT5zaXplKCkpOyB9CisgICAgICAgIGNvbnN0IGNoYXIq
IGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2l0ZW0tPmRhdGEoKTsgfQorICAgICAgICBjaGFyKiBy
ZWxlYXNlQnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9pdGVtLT5yZWxlYXNlQnVmZmVyKCk7IH0K
KyAgICAgICAgY29uc3QgQmxvYkl0ZW0qIG1faXRlbTsKKyAgICB9IG1fZGF0YTsKICAgICBTdHJp
bmcgbV9maWxlbmFtZTsKICNpZiBFTkFCTEUoQkxPQl9TTElDRSkKICAgICBsb25nIGxvbmcgbV9m
aWxlU3RhcnQ7CiAgICAgbG9uZyBsb25nIG1fZmlsZUxlbmd0aDsKICAgICBkb3VibGUgbV9leHBl
Y3RlZEZpbGVNb2RpZmljYXRpb25UaW1lOworCisgICAgc3RhdGljIGNvbnN0IGxvbmcgbG9uZyB0
b0VuZE9mRmlsZTsKICNlbmRpZgorCiAgICAgU3RyaW5nIG1fZ2VuZXJhdGVkRmlsZW5hbWU7CiAg
ICAgYm9vbCBtX3Nob3VsZEdlbmVyYXRlRmlsZTsKIH07CiAKIGlubGluZSBib29sIG9wZXJhdG9y
PT0oY29uc3QgRm9ybURhdGFFbGVtZW50JiBhLCBjb25zdCBGb3JtRGF0YUVsZW1lbnQmIGIpCiB7
Ci0gICAgaWYgKCZhID09ICZiKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICBpZiAo
YS5tX3R5cGUgIT0gYi5tX3R5cGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoYS5t
X2RhdGEgIT0gYi5tX2RhdGEpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSNpZiBFTkFCTEUoQkxP
Ql9TTElDRSkKLSAgICBpZiAoYS5tX2ZpbGVuYW1lICE9IGIubV9maWxlbmFtZSB8fCBhLm1fZmls
ZVN0YXJ0ICE9IGIubV9maWxlU3RhcnQgfHwgYS5tX2ZpbGVMZW5ndGggIT0gYi5tX2ZpbGVMZW5n
dGggfHwgYS5tX2V4cGVjdGVkRmlsZU1vZGlmaWNhdGlvblRpbWUgIT0gYi5tX2V4cGVjdGVkRmls
ZU1vZGlmaWNhdGlvblRpbWUpCi0jZWxzZQotICAgIGlmIChhLm1fZmlsZW5hbWUgIT0gYi5tX2Zp
bGVuYW1lKQotI2VuZGlmCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVl
OworICAgIHJldHVybiBhLml0ZW0oKS0+ZXF1YWxzKGIuaXRlbSgpKTsKIH0KLSAKKwogaW5saW5l
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBGb3JtRGF0YUVsZW1lbnQmIGEsIGNvbnN0IEZvcm1EYXRh
RWxlbWVudCYgYikKIHsKICAgICByZXR1cm4gIShhID09IGIpOwogfQotIAorCiBjbGFzcyBGb3Jt
RGF0YSA6IHB1YmxpYyBSZWZDb3VudGVkPEZvcm1EYXRhPiB7CiBwdWJsaWM6CiAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8Rm9ybURhdGE+IGNyZWF0ZSgpOwpAQCAtODYsOCArODQsMTAgQEAgcHVibGlj
OgogICAgIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGNvcHkoKSBjb25zdDsKICAgICBQYXNzUmVmUHRy
PEZvcm1EYXRhPiBkZWVwQ29weSgpIGNvbnN0OwogICAgIH5Gb3JtRGF0YSgpOwotICAgIAorCiAg
ICAgdm9pZCBhcHBlbmREYXRhKGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCk7CisgICAgdm9pZCBh
cHBlbmRCbG9iKEJsb2IqKTsKKyAgICB2b2lkIGFwcGVuZFN0cmluZyhjb25zdCBDU3RyaW5nJik7
CiAgICAgdm9pZCBhcHBlbmRGaWxlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGJvb2wgc2hvdWxk
R2VuZXJhdGVGaWxlID0gZmFsc2UpOwogI2lmIEVOQUJMRShCTE9CX1NMSUNFKQogICAgIHZvaWQg
YXBwZW5kRmlsZVJhbmdlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGxvbmcgbG9uZyBzdGFydCwg
bG9uZyBsb25nIGxlbmd0aCwgZG91YmxlIGV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZSwgYm9vbCBz
aG91bGRHZW5lcmF0ZUZpbGUgPSBmYWxzZSk7CkBAIC0xMTgsNiArMTE4LDcgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIGFwcGVuZERPTUZvcm1EYXRhKGNvbnN0IERPTUZvcm1EYXRhJiBkb21Gb3JtRGF0
YSwgYm9vbCBpc011bHRpUGFydEZvcm0sIERvY3VtZW50KiBkb2N1bWVudCk7CiAKICAgICBWZWN0
b3I8Rm9ybURhdGFFbGVtZW50PiBtX2VsZW1lbnRzOworCiAgICAgaW50NjRfdCBtX2lkZW50aWZp
ZXI7CiAgICAgYm9vbCBtX2hhc0dlbmVyYXRlZEZpbGVzOwogICAgIGJvb2wgbV9hbHdheXNTdHJl
YW07CkBAIC0xMzEsNyArMTMyLDcgQEAgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb3Jt
RGF0YSYgYSwgY29uc3QgRm9ybURhdGEmIGIpCiAKIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29u
c3QgRm9ybURhdGEmIGEsIGNvbnN0IEZvcm1EYXRhJiBiKQogewotICAgIHJldHVybiBhLmVsZW1l
bnRzKCkgIT0gYi5lbGVtZW50cygpOworICAgIHJldHVybiAhKGEgPT0gYik7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9t
YWMvRm9ybURhdGFTdHJlYW1NYWMubW0gYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL0Zv
cm1EYXRhU3RyZWFtTWFjLm1tCmluZGV4IDI3ZWNmZDA4YWQ1YWFhYjg3NTZmYTU5NmQ5OTZiZDJm
NmVjNWQwM2YuLmUzOTY4ZjI2YmU3NWYzMTY4ZjRjNzQ1NWI1YTVlNDg4MTAzNDFhYmMgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvRm9ybURhdGFTdHJlYW1NYWMubW0K
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9Gb3JtRGF0YVN0cmVhbU1hYy5tbQpA
QCAtMTQyLDcgKzE0Miw3IEBAIHN0YXRpYyB2b2lkIGNsb3NlQ3VycmVudFN0cmVhbShGb3JtU3Ry
ZWFtRmllbGRzICpmb3JtKQogICAgICAgICBDRlJlbGVhc2UoZm9ybS0+Y3VycmVudFN0cmVhbSk7
CiAgICAgICAgIGZvcm0tPmN1cnJlbnRTdHJlYW0gPSBOVUxMOwogI2lmIEVOQUJMRShCTE9CX1NM
SUNFKQotICAgICAgICBmb3JtLT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5ndGggPSBCbG9iOjp0b0Vu
ZE9mRmlsZTsKKyAgICAgICAgZm9ybS0+Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoID0gRm9ybURh
dGFFbGVtZW50Ojp0b0VuZE9mRmlsZTsKICNlbmRpZgogICAgIH0KICAgICBpZiAoZm9ybS0+Y3Vy
cmVudERhdGEpIHsKQEAgLTE2MSwyMSArMTYxLDE3IEBAIHN0YXRpYyBib29sIGFkdmFuY2VDdXJy
ZW50U3RyZWFtKEZvcm1TdHJlYW1GaWVsZHMqIGZvcm0pCiAKICAgICAvLyBDcmVhdGUgdGhlIG5l
dyBzdHJlYW0uCiAgICAgRm9ybURhdGFFbGVtZW50JiBuZXh0SW5wdXQgPSBmb3JtLT5yZW1haW5p
bmdFbGVtZW50cy5sYXN0KCk7CisKKyAgICAvLyBDaGVjayBpZiB0aGUgdW5kZXJseWluZyBkYXRh
IGhhcyBiZWNvbWUgc3RhbGUgKGUuZy4gdGhlIGZpbGUgaGFzIGJlZW4gY2hhbmdlZCBzaW5jZSBp
dHMgc25hcHNob3QgaGFzIGJlZW4gdGFrZW4pIG9yIG5vdC4KKyAgICBpZiAoIW5leHRJbnB1dC5t
X2l0ZW0tPmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgaWYgKG5leHRJ
bnB1dC5tX3R5cGUgPT0gRm9ybURhdGFFbGVtZW50OjpkYXRhKSB7CiAgICAgICAgIHNpemVfdCBz
aXplID0gbmV4dElucHV0Lm1fZGF0YS5zaXplKCk7CiAgICAgICAgIGNoYXIqIGRhdGEgPSBuZXh0
SW5wdXQubV9kYXRhLnJlbGVhc2VCdWZmZXIoKTsKICAgICAgICAgZm9ybS0+Y3VycmVudFN0cmVh
bSA9IENGUmVhZFN0cmVhbUNyZWF0ZVdpdGhCeXRlc05vQ29weSgwLCByZWludGVycHJldF9jYXN0
PGNvbnN0IFVJbnQ4Kj4oZGF0YSksIHNpemUsIGtDRkFsbG9jYXRvck51bGwpOwogICAgICAgICBm
b3JtLT5jdXJyZW50RGF0YSA9IGRhdGE7CiAgICAgfSBlbHNlIHsKLSNpZiBFTkFCTEUoQkxPQl9T
TElDRSkKLSAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGZpbGUgaGFzIGJlZW4gY2hhbmdlZCBvciBu
b3QgaWYgcmVxdWlyZWQuCi0gICAgICAgIGlmIChuZXh0SW5wdXQubV9leHBlY3RlZEZpbGVNb2Rp
ZmljYXRpb25UaW1lICE9IEJsb2I6OmRvTm90Q2hlY2tGaWxlQ2hhbmdlKSB7Ci0gICAgICAgICAg
ICB0aW1lX3QgZmlsZU1vZGlmaWNhdGlvblRpbWU7Ci0gICAgICAgICAgICBpZiAoIWdldEZpbGVN
b2RpZmljYXRpb25UaW1lKG5leHRJbnB1dC5tX2ZpbGVuYW1lLCBmaWxlTW9kaWZpY2F0aW9uVGlt
ZSkgfHwgZmlsZU1vZGlmaWNhdGlvblRpbWUgIT0gc3RhdGljX2Nhc3Q8dGltZV90PihuZXh0SW5w
dXQubV9leHBlY3RlZEZpbGVNb2RpZmljYXRpb25UaW1lKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIH0KLSNlbmRpZgotCiAgICAgICAgIGNvbnN0IFN0cmluZyYgcGF0
aCA9IG5leHRJbnB1dC5tX3Nob3VsZEdlbmVyYXRlRmlsZSA/IG5leHRJbnB1dC5tX2dlbmVyYXRl
ZEZpbGVuYW1lIDogbmV4dElucHV0Lm1fZmlsZW5hbWU7CiAgICAgICAgIFJldGFpblB0cjxDRlN0
cmluZ1JlZj4gZmlsZW5hbWUoQWRvcHRDRiwgcGF0aC5jcmVhdGVDRlN0cmluZygpKTsKICAgICAg
ICAgUmV0YWluUHRyPENGVVJMUmVmPiBmaWxlVVJMKEFkb3B0Q0YsIENGVVJMQ3JlYXRlV2l0aEZp
bGVTeXN0ZW1QYXRoKDAsIGZpbGVuYW1lLmdldCgpLCBrQ0ZVUkxQT1NJWFBhdGhTdHlsZSwgRkFM
U0UpKTsKQEAgLTIyMiw3ICsyMTgsNyBAQCBzdGF0aWMgdm9pZCogZm9ybUNyZWF0ZShDRlJlYWRT
dHJlYW1SZWYgc3RyZWFtLCB2b2lkKiBjb250ZXh0KQogICAgIEZvcm1TdHJlYW1GaWVsZHMqIG5l
d0luZm8gPSBuZXcgRm9ybVN0cmVhbUZpZWxkczsKICAgICBuZXdJbmZvLT5jdXJyZW50U3RyZWFt
ID0gTlVMTDsKICNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAgICBuZXdJbmZvLT5jdXJyZW50U3Ry
ZWFtUmFuZ2VMZW5ndGggPSBCbG9iOjp0b0VuZE9mRmlsZTsKKyAgICBuZXdJbmZvLT5jdXJyZW50
U3RyZWFtUmFuZ2VMZW5ndGggPSBGb3JtRGF0YUVsZW1lbnQ6OnRvRW5kT2ZGaWxlOwogI2VuZGlm
CiAgICAgbmV3SW5mby0+Y3VycmVudERhdGEgPSAwOwogICAgIG5ld0luZm8tPmZvcm1TdHJlYW0g
PSBzdHJlYW07IC8vIERvbid0IHJldGFpbi4gVGhhdCB3b3VsZCBjcmVhdGUgYSByZWZlcmVuY2Ug
Y3ljbGUuCkBAIC0yNzAsNyArMjY2LDcgQEAgc3RhdGljIENGSW5kZXggZm9ybVJlYWQoQ0ZSZWFk
U3RyZWFtUmVmIHN0cmVhbSwgVUludDgqIGJ1ZmZlciwgQ0ZJbmRleCBidWZmZXJMZW4KICAgICB3
aGlsZSAoZm9ybS0+Y3VycmVudFN0cmVhbSkgewogICAgICAgICBDRkluZGV4IGJ5dGVzVG9SZWFk
ID0gYnVmZmVyTGVuZ3RoOwogI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgICAgICBpZiAoZm9y
bS0+Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoICE9IEJsb2I6OnRvRW5kT2ZGaWxlICYmIGZvcm0t
PmN1cnJlbnRTdHJlYW1SYW5nZUxlbmd0aCA8IGJ5dGVzVG9SZWFkKQorICAgICAgICBpZiAoZm9y
bS0+Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoICE9IEZvcm1EYXRhRWxlbWVudDo6dG9FbmRPZkZp
bGUgJiYgZm9ybS0+Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoIDwgYnl0ZXNUb1JlYWQpCiAgICAg
ICAgICAgICBieXRlc1RvUmVhZCA9IHN0YXRpY19jYXN0PENGSW5kZXg+KGZvcm0tPmN1cnJlbnRT
dHJlYW1SYW5nZUxlbmd0aCk7CiAjZW5kaWYKICAgICAgICAgQ0ZJbmRleCBieXRlc1JlYWQgPSBD
RlJlYWRTdHJlYW1SZWFkKGZvcm0tPmN1cnJlbnRTdHJlYW0sIGJ1ZmZlciwgYnl0ZXNUb1JlYWQp
OwpAQCAtMjgzLDcgKzI3OSw3IEBAIHN0YXRpYyBDRkluZGV4IGZvcm1SZWFkKENGUmVhZFN0cmVh
bVJlZiBzdHJlYW0sIFVJbnQ4KiBidWZmZXIsIENGSW5kZXggYnVmZmVyTGVuCiAgICAgICAgICAg
ICAqYXRFT0YgPSBGQUxTRTsKICAgICAgICAgICAgIGZvcm0tPmJ5dGVzU2VudCArPSBieXRlc1Jl
YWQ7CiAjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgICAgICAgICBpZiAoZm9ybS0+Y3VycmVu
dFN0cmVhbVJhbmdlTGVuZ3RoICE9IEJsb2I6OnRvRW5kT2ZGaWxlKQorICAgICAgICAgICAgaWYg
KGZvcm0tPmN1cnJlbnRTdHJlYW1SYW5nZUxlbmd0aCAhPSBGb3JtRGF0YUVsZW1lbnQ6OnRvRW5k
T2ZGaWxlKQogICAgICAgICAgICAgICAgIGZvcm0tPmN1cnJlbnRTdHJlYW1SYW5nZUxlbmd0aCAt
PSBieXRlc1JlYWQ7CiAjZW5kaWYKIApAQCAtNDAwLDcgKzM5Niw3IEBAIHZvaWQgc2V0SFRUUEJv
ZHkoTlNNdXRhYmxlVVJMUmVxdWVzdCAqcmVxdWVzdCwgUGFzc1JlZlB0cjxGb3JtRGF0YT4gZm9y
bURhdGEpCiAgICAgICAgIGVsc2UgewogI2lmIEVOQUJMRShCTE9CX1NMSUNFKQogICAgICAgICAg
ICAgLy8gSWYgd2UncmUgc2VuZGluZyB0aGUgZmlsZSByYW5nZSwgdXNlIHRoZSBleGlzdGluZyBy
YW5nZSBsZW5ndGggZm9yIG5vdy4gV2Ugd2lsbCBkZXRlY3QgaWYgdGhlIGZpbGUgaGFzIGJlZW4g
Y2hhbmdlZCByaWdodCBiZWZvcmUgd2UgcmVhZCB0aGUgZmlsZSBhbmQgYWJvcnQgdGhlIG9wZXJh
dGlvbiBpZiBuZWNlc3NhcnkuCi0gICAgICAgICAgICBpZiAoZWxlbWVudC5tX2ZpbGVMZW5ndGgg
IT0gQmxvYjo6dG9FbmRPZkZpbGUpIHsKKyAgICAgICAgICAgIGlmIChlbGVtZW50Lm1fZmlsZUxl
bmd0aCAhPSBGb3JtRGF0YUVsZW1lbnQ6OnRvRW5kT2ZGaWxlKSB7CiAgICAgICAgICAgICAgICAg
bGVuZ3RoICs9IGVsZW1lbnQubV9maWxlTGVuZ3RoOwogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3Qu
Y3BwIGIvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCmluZGV4IDVjZGUyNGRlMjlkYjQ0
MjEwMDAxYTMwMjMyNDRjYTRjY2QyNWNmYmIuLmY2MWQ3MWQyNGU2MzkzNWViODVjMGIzNWRiZmNm
Yjk3YTA1OWMyZGYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAor
KysgYi9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKQEAgLTQ3OCwxMSArNDc4LDcgQEAg
dm9pZCBYTUxIdHRwUmVxdWVzdDo6c2VuZChCbG9iKiBib2R5LCBFeGNlcHRpb25Db2RlJiBlYykK
ICAgICAgICAgLy8gRklYTUU6IFNob3VsZCB3ZSBzZXQgYSBDb250ZW50LVR5cGUgaWYgb25lIGlz
IG5vdCBzZXQuCiAgICAgICAgIC8vIEZJWE1FOiBhZGQgc3VwcG9ydCBmb3IgdXBsb2FkaW5nIGJ1
bmRsZXMuCiAgICAgICAgIG1fcmVxdWVzdEVudGl0eUJvZHkgPSBGb3JtRGF0YTo6Y3JlYXRlKCk7
Ci0jaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgICAgIG1fcmVxdWVzdEVudGl0eUJvZHktPmFw
cGVuZEZpbGVSYW5nZShib2R5LT5wYXRoKCksIGJvZHktPnN0YXJ0KCksIGJvZHktPmxlbmd0aCgp
LCBib2R5LT5tb2RpZmljYXRpb25UaW1lKCkpOwotI2Vsc2UKLSAgICAgICAgbV9yZXF1ZXN0RW50
aXR5Qm9keS0+YXBwZW5kRmlsZShib2R5LT5wYXRoKCksIGZhbHNlKTsKLSNlbmRpZgorICAgICAg
ICBtX3JlcXVlc3RFbnRpdHlCb2R5LT5hcHBlbmRCbG9iKGJvZHkpOwogICAgIH0KIAogICAgIGNy
ZWF0ZVJlcXVlc3QoZWMpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56304</attachid>
            <date>2010-05-17 18:52:40 -0700</date>
            <delta_ts>2010-05-17 19:07:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-39083-20100517185239.patch</filename>
            <type>text/plain</type>
            <size>69215</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YzE4YmQ4MDk3YjQxYTRhMWVjODBmOWZmZTBlNjdmNDdiMGIxNTZiZS4uN2E4ZGZjY2ViMDEwNWI4
ZTMzNWZlMmJlMDY0Y2M4MmNlOTliNDAzNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4NyBAQAorMjAxMC0wNS0xNyAgS2lu
dWtvIFlhc3VkYSAgPGtpbnVrb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVmYWN0b3IgRm9ybURhdGEgYW5kIEJsb2IgZm9y
IGJldHRlciBzdXBwb3J0IG9mIEJsb2JzIHN5bnRoZXNpemVkIGJ5IEJsb2JCdWlsZGVyLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzkwODMKKworICAg
ICAgICBJbnRyb2R1Y2VzIGEgbmV3IGNsYXNzIEJsb2JJdGVtIGFzIGEgYmFzaWMgY29tcG9uZW50
IG9mIEJsb2IgYW5kIEZvcm1EYXRhLAorICAgICAgICBhbmQgbWFrZXMgQmxvYiBhcyBhIGNvbGxl
Y3Rpb24gb2YgQmxvYkl0ZW1zLgorICAgICAgICBGaWxlIHdvdWxkIGJlY29tZSBhIHNwZWNpYWwg
dHlwZSBvZiBCbG9iIHRoYXQgY29udGFpbnMgb25seSBvbmUgRmlsZUJsb2JJdGVtLgorICAgICAg
ICBGb3JtRGF0YUVsZW1lbnQgYW5kIEZvcm1EYXRhTGlzdDo6SXRlbSB3b3VsZCBiZWNvbWUgYSB3
cmFwcGVyIG9mIEJsb2JJdGVtLgorCisgICAgICAgIFRoZSBwYXRjaCBkb2Vzbid0IHN1cHBvcnQg
dGhlIGxhdGVzdCBGaWxlIEFQSSBjaGFuZ2VzIChlLmcuIHR5cGUsIHVybCBhbmQKKyAgICAgICAg
c2xpY2UncyB0eXBlIHBhcmFtZXRlcnMpIGFuZCBzaG91bGQgbm90IGNoYW5nZSBhbnkgb2YgaXRz
IGV4aXN0aW5nIGJlaGF2aW9ycy4KKworICAgICAgICBUaGUgZXhpc3RpbmcgdGVzdHMgc2hvdWxk
IGJlIGFibGUgdG8gYmUgdXNlZCBmb3IgcmVncmVzc2lvbjoKKyAgICAgICAgLSBodHRwL3Rlc3Rz
L2xvY2FsL2Zvcm1kYXRhL3NlbmQtZm9ybS1kYXRhLXdpdGgtc2xpY2VkLWZpbGUuaHRtbAorICAg
ICAgICAtIGh0dHAvdGVzdHMvbG9jYWwvc2VuZC1zbGljZWQtZHJhZ2dlZC1maWxlLmh0bWwKKwor
ICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAg
ICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
ajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogYmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlppZ1phZzo6U2VyaWFsaXplcjo6d3JpdGVCbG9iKToKKyAgICAgICAgKFdlYkNvcmU6Olpp
Z1phZzo6UmVhZGVyOjpyZWFkQmxvYik6CisgICAgICAgICogaHRtbC9CbG9iLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkJsb2I6OkJsb2IpOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6c2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjpwYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6
OmFwcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjpzbGljZSk6CisgICAgICAgICogaHRt
bC9CbG9iLmg6CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6QmxvYjo6Y3JlYXRlRnJvbUZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6dHlw
ZSk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjppdGVtcyk6CisgICAgICAgIChXZWJDb3JlOjpC
bG9iOjpCbG9iKToKKyAgICAgICAgKiBodG1sL0Jsb2JJdGVtLmNwcDogQWRkZWQuCisgICAgICAg
ICogaHRtbC9CbG9iSXRlbS5oOiBBZGRlZC4KKyAgICAgICAgKiBodG1sL0ZpbGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Z2V0RmlsZVR5cGVGcm9tUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpG
aWxlOjpGaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGU6Om5hbWUpOgorICAgICAgICAqIGh0
bWwvRmlsZS5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsZTo6ZmlsZU5hbWUpOgorICAgICAgICAq
IGh0bWwvRmlsZVN0cmVhbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWxlU3RyZWFtOjpvcGVu
Rm9yUmVhZCk6CisgICAgICAgICogaHRtbC9Gb3JtRGF0YUxpc3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9ybURhdGFMaXN0OjphcHBlbmRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Rm9y
bURhdGFMaXN0OjphcHBlbmRCbG9iKToKKyAgICAgICAgKiBodG1sL0Zvcm1EYXRhTGlzdC5oOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGFMaXN0OjpJdGVtOjpJdGVtKToKKyAgICAgICAgKFdl
YkNvcmU6OkZvcm1EYXRhTGlzdDo6SXRlbTo6aXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpGb3Jt
RGF0YUxpc3Q6Okl0ZW06OmRhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvRm9ybURh
dGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGFFbGVtZW50OjpGb3JtRGF0YUVsZW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpGb3JtRGF0YTo6ZGVlcENvcHkpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6OmFw
cGVuZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6OmFwcGVuZFN0cmluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YTo6YXBwZW5kRmlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpGb3JtRGF0YTo6YXBwZW5kQmxvYik6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YTo6YXBw
ZW5kRmlsZVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjphcHBlbmRET01Gb3Jt
RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5oOgorICAgICAgICAo
V2ViQ29yZTo6Rm9ybURhdGFFbGVtZW50OjpGb3JtRGF0YUVsZW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9ybURhdGFFbGVtZW50OjppdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRh
RWxlbWVudDo6QmxvYkl0ZW1XcmFwcGVyOjpCbG9iSXRlbVdyYXBwZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9ybURhdGFFbGVtZW50OjpCbG9iSXRlbVdyYXBwZXI6OnNpemUpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9ybURhdGFFbGVtZW50OjpCbG9iSXRlbVdyYXBwZXI6OmRhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9ybURhdGFFbGVtZW50OjpCbG9iSXRlbVdyYXBwZXI6OnJlbGVhc2VCdWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpv
cGVyYXRvciE9KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL21hYy9Gb3JtRGF0YVN0cmVh
bU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OmNsb3NlQ3VycmVudFN0cmVhbSk6CisgICAgICAg
IChXZWJDb3JlOjphZHZhbmNlQ3VycmVudFN0cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjpmb3Jt
Q3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmZvcm1SZWFkKToKKyAgICAgICAgKFdlYkNvcmU6
OnNldEhUVFBCb2R5KToKKyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OnNlbmQpOgorCiAyMDEwLTA1LTE3ICBBbnR0aSBL
b2l2aXN0byAgPGtvaXZpc3RvQGlraS5maT4KIAogICAgICAgICBUaGlzIHdhcyBtaXNzaW5nIGZy
b20gcHJldmlvdXMgY29tbWl0LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBi
L1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggNWUwYTEyNjNhMjE3NTdmMTU3MTdhODFhYWQ2
Mjc2ZDRjNWRmNjNhNS4uZTRjZGIwYTUxMDZlMGVmNzU0MTIzNmQyM2MyZDBmNTY2MDk4ZTVkMSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmFtCkBAIC0xMDI1LDYgKzEwMjUsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNv
cmUvaGlzdG9yeS9QYWdlQ2FjaGUuaCBcCiAJV2ViQ29yZS9odG1sL0Jsb2IuY3BwIFwKIAlXZWJD
b3JlL2h0bWwvQmxvYi5oIFwKKwlXZWJDb3JlL2h0bWwvQmxvYkl0ZW0uY3BwIFwKKwlXZWJDb3Jl
L2h0bWwvQmxvYkl0ZW0uaCBcCiAJV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNDb250ZXh0QXR0
cmlidXRlcy5oIFwKIAlXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0dyYWRpZW50LmNwcCBcCiAJ
V2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNHcmFkaWVudC5oIFwKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvV2ViQ29yZS5neXBpIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggOTFkN2VkYWI1YTUz
MDc0NTY3ZjUwMWMxNjI2ZjczMzY2MjkyZmJiNi4uYWRhZjE5NGQ0NDgzMGYxZmRiYzNlOTgwZjE1
MGNhNzNhYWQ4YTkwOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKQEAgLTEzNzUsNiArMTM3NSw4IEBACiAgICAgICAgICAgICAnaGlz
dG9yeS9QYWdlQ2FjaGUuaCcsCiAgICAgICAgICAgICAnaHRtbC9CbG9iLmNwcCcsCiAgICAgICAg
ICAgICAnaHRtbC9CbG9iLmgnLAorICAgICAgICAgICAgJ2h0bWwvQmxvYkl0ZW0uY3BwJywKKyAg
ICAgICAgICAgICdodG1sL0Jsb2JJdGVtLmgnLAogICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0Fy
cmF5QnVmZmVyVmlldy5jcHAnLAogICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0FycmF5QnVmZmVy
Vmlldy5oJywKICAgICAgICAgICAgICdodG1sL2NhbnZhcy9BcnJheUJ1ZmZlci5jcHAnLApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXgg
OTMzMDgxYWMyNjliNjE4OWZjY2NkMmFkZTQyYzI1YWRiYmZmNzBiYi4uMzcxZDE2MDYxMDNjZGQz
N2I5M2VmZGZiMDVhMzMxZWI0ZWFlMjM0YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnBy
bworKysgYi9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC01ODYsNiArNTg2LDcgQEAgU09VUkNFUyAr
PSBcCiAgICAgaGlzdG9yeS9xdC9IaXN0b3J5SXRlbVF0LmNwcCBcCiAgICAgaGlzdG9yeS9QYWdl
Q2FjaGUuY3BwIFwKICAgICBodG1sL0Jsb2IuY3BwIFwKKyAgICBodG1sL0Jsb2JJdGVtLmNwcCBc
CiAgICAgaHRtbC9jYW52YXMvQ2FudmFzR3JhZGllbnQuY3BwIFwKICAgICBodG1sL2NhbnZhcy9D
YW52YXNQYXR0ZXJuLmNwcCBcCiAgICAgaHRtbC9jYW52YXMvQ2FudmFzUGl4ZWxBcnJheS5jcHAg
XApAQCAtMTMwNSw2ICsxMzA2LDcgQEAgSEVBREVSUyArPSBcCiAgICAgaGlzdG9yeS9IaXN0b3J5
SXRlbS5oIFwKICAgICBoaXN0b3J5L1BhZ2VDYWNoZS5oIFwKICAgICBodG1sL0Jsb2IuaCBcCisg
ICAgaHRtbC9CbG9iSXRlbS5oIFwKICAgICBodG1sL2NhbnZhcy9DYW52YXNHcmFkaWVudC5oIFwK
ICAgICBodG1sL2NhbnZhcy9DYW52YXNQYXR0ZXJuLmggXAogICAgIGh0bWwvY2FudmFzL0NhbnZh
c1BpeGVsQXJyYXkuaCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCBk
OTMwMmE5OWJlNTQ4MGVhNjAzNDk4NGE0MDk1YWNkMDU0NTE5ZWUwLi5hNjZjYzZiYzJkNmRkNDA4
NzYyZTU3MzI1OTdmNDNjOTZlMzkyMjFjIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUudmNw
cm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2oKQEAgLTMwNTczLDYgKzMwNTczLDE0IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8
RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcQmxvYkl0ZW0uY3BwIg0KKwkJCQk+DQor
CQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxCbG9iSXRl
bS5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0i
Li5caHRtbFxjYW52YXNcQ2FudmFzR3JhZGllbnQuY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZWRiZTk5NWRk
ZWMwMTAwZWM4OWI2ZDAzZDI5NDNlYjk1ZmUzY2EzNy4uN2IzNTc4MDNlMzg2ZTJiZTI0YThlMGRj
MmUxMzU2ZmFmNDY0NDlmYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKQEAgLTY2NSw3ICs2NjUsNyBAQAogCQkyRTk0RjQ1MTExOTIwOTZBMDBCN0Y3NUQgLyog
RmlsZVJlYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMkU5NEYzQ0MxMThCOTA4RTAwQjdGNzVEIC8qIEZpbGVSZWFkZXIuaCAqLzsgfTsKIAkJMkVB
NzY4MDQwRkU3MTI2NDAwQUI5QzhBIC8qIFdvcmtlclNjcmlwdExvYWRlckNsaWVudC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkVBNzY4MDMwRkU3MTI2
NDAwQUI5QzhBIC8qIFdvcmtlclNjcmlwdExvYWRlckNsaWVudC5oICovOyB9OwogCQkyRUFGQUYw
RTEwRTJBRjJEMDA3RUQzRDYgLyogQmxvYi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyRUFGQUYwQjEwRTJBRjJEMDA3RUQzRDYgLyogQmxvYi5jcHAg
Ki87IH07Ci0JCTJFQUZBRjBGMTBFMkFGMkQwMDdFRDNENiAvKiBCbG9iLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRUFGQUYwQzEwRTJBRjJEMDA3RUQz
RDYgLyogQmxvYi5oICovOyB9OworCQkyRUFGQUYwRjEwRTJBRjJEMDA3RUQzRDYgLyogQmxvYi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkVBRkFGMEMx
MEUyQUYyRDAwN0VEM0Q2IC8qIEJsb2IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkyRUNGN0FEQzEwMTYyQjM4MDA0MjdERTcgLyogSlNFcnJvckV2
ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJF
Q0Y3QURBMTAxNjJCMzgwMDQyN0RFNyAvKiBKU0Vycm9yRXZlbnQuY3BwICovOyB9OwogCQkyRUNG
N0FERDEwMTYyQjM4MDA0MjdERTcgLyogSlNFcnJvckV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRUNGN0FEQjEwMTYyQjM4MDA0MjdERTcgLyog
SlNFcnJvckV2ZW50LmggKi87IH07CiAJCTJFQ0Y3QUUxMTAxNjJCNTgwMDQyN0RFNyAvKiBFcnJv
ckV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDJFQ0Y3QURFMTAxNjJCNTgwMDQyN0RFNyAvKiBFcnJvckV2ZW50LmNwcCAqLzsgfTsKQEAgLTIy
NTgsNiArMjI1OCw4IEBACiAJCTg1Rjc0RTBBMEFBOERGOEMwMDBEQzI4NCAvKiBET01DU1NVbmtu
b3duUnVsZS5oIGluIENvcHkgR2VuZXJhdGVkIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gODUwMzJERDUwQUE4QzlCRTAwN0QzQjdEIC8qIERPTUNTU1Vua25vd25S
dWxlLmggKi87IH07CiAJCTg1RkYzMTVBMEFBRkJGQ0IwMDM3NEYzOCAvKiBET01LZXlib2FyZEV2
ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NUZG
MzE1ODBBQUZCRkNCMDAzNzRGMzggLyogRE9NS2V5Ym9hcmRFdmVudC5oICovOyB9OwogCQk4NUZG
MzE1QjBBQUZCRkNCMDAzNzRGMzggLyogRE9NS2V5Ym9hcmRFdmVudC5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg1RkYzMTU5MEFBRkJGQ0IwMDM3NEYz
OCAvKiBET01LZXlib2FyZEV2ZW50Lm1tICovOyB9OworCQk4OTE4MTQzMDExODdDNEI0MDBCRjY5
OEEgLyogQmxvYkl0ZW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gODkxODE0MkIxMTg3QzRCNDAwQkY2OThBIC8qIEJsb2JJdGVtLmNwcCAqLzsgfTsK
KwkJODkxODE0MzExMTg3QzRCNDAwQkY2OThBIC8qIEJsb2JJdGVtLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4OTE4MTQyQzExODdDNEI0MDBCRjY5OEEg
LyogQmxvYkl0ZW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk4OTUyNTM1MjExNjQxQjM0MDBDQUJGMDAgLyogRmlsZVRocmVhZC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4OTUyNTM1MDExNjQxQjM0
MDBDQUJGMDAgLyogRmlsZVRocmVhZC5jcHAgKi87IH07CiAJCTg5NTI1MzUzMTE2NDFCMzQwMENB
QkYwMCAvKiBGaWxlVGhyZWFkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA4OTUyNTM1MTExNjQxQjM0MDBDQUJGMDAgLyogRmlsZVRocmVhZC5oICovOyB9
OwogCQk4OTUyNTNENzExNkM0QzY4MDBDQUJGMDAgLyogRmlsZVN0cmVhbS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4OTUyNTNENDExNkM0QzY4MDBD
QUJGMDAgLyogRmlsZVN0cmVhbS5jcHAgKi87IH07CkBAIC03ODIzLDYgKzc4MjUsOCBAQAogCQk4
NUY1NkE3OTBBOThDRTM3MDBBREI2MEEgLyogRE9NUHJvY2Vzc2luZ0luc3RydWN0aW9uLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IERPTVByb2Nlc3NpbmdJbnN0
cnVjdGlvbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODVGRjMxNTgwQUFGQkZD
QjAwMzc0RjM4IC8qIERPTUtleWJvYXJkRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IERPTUtleWJvYXJkRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJODVGRjMxNTkwQUFGQkZDQjAwMzc0RjM4IC8qIERPTUtleWJvYXJkRXZlbnQubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRE9NS2V5Ym9hcmRFdmVudC5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODkxODE0MkIxMTg3QzRCNDAwQkY2OThBIC8q
IEJsb2JJdGVtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJsb2JJ
dGVtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODkxODE0MkMxMTg3QzRCNDAw
QkY2OThBIC8qIEJsb2JJdGVtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJs
b2JJdGVtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg5NTI1MzUwMTE2NDFCMzQw
MENBQkYwMCAvKiBGaWxlVGhyZWFkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEZpbGVUaHJlYWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4OTUy
NTM1MTExNjQxQjM0MDBDQUJGMDAgLyogRmlsZVRocmVhZC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBGaWxlVGhyZWFkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTg5NTI1M0Q0MTE2QzRDNjgwMENBQkYwMCAvKiBGaWxlU3RyZWFtLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZpbGVTdHJlYW0uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMTMyNjUsNiArMTMyNjksOCBAQAogCQkJCTJFQUZBRjBCMTBFMkFGMkQw
MDdFRDNENiAvKiBCbG9iLmNwcCAqLywKIAkJCQkyRUFGQUYwQzEwRTJBRjJEMDA3RUQzRDYgLyog
QmxvYi5oICovLAogCQkJCTJFQUZBRjBEMTBFMkFGMkQwMDdFRDNENiAvKiBCbG9iLmlkbCAqLywK
KwkJCQk4OTE4MTQyQjExODdDNEI0MDBCRjY5OEEgLyogQmxvYkl0ZW0uY3BwICovLAorCQkJCTg5
MTgxNDJDMTE4N0M0QjQwMEJGNjk4QSAvKiBCbG9iSXRlbS5oICovLAogCQkJCTkzQzQ0MUVEMEY4
MTNBMUEwMEMxQTYzNCAvKiBDb2xsZWN0aW9uQ2FjaGUuY3BwICovLAogCQkJCTkzQzQ0MUVFMEY4
MTNBMUEwMEMxQTYzNCAvKiBDb2xsZWN0aW9uQ2FjaGUuaCAqLywKIAkJCQk5M0M0NDFGRjBGODEz
QUUxMDBDMUE2MzQgLyogQ29sbGVjdGlvblR5cGUuaCAqLywKQEAgLTE2NzUxLDYgKzE2NzU3LDcg
QEAKIAkJCQlCQzVFQjkyMDBFODIwNDA4MDBCMjU5NjUgLyogQmluZGluZ1VSSS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTg5OTQzMjgwQjQyMzM4ODAwRDdDODAyIC8qIEJpdG1hcEltYWdlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkyRUFGQUYwRjEwRTJBRjJEMDA3RUQzRDYgLyogQmxvYi5oIGluIEhl
YWRlcnMgKi8sCisJCQkJODkxODE0MzExMTg3QzRCNDAwQkY2OThBIC8qIEJsb2JJdGVtLmggaW4g
SGVhZGVycyAqLywKIAkJCQk5M0YxOTlCRTA4MjQ1RTU5MDAxRTlBQkMgLyogQmxvY2tFeGNlcHRp
b25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzVFQjVFMTBFODFCRTg3MDBCMjU5NjUgLyogQm9y
ZGVyRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1RUI1REIwRTgxQjdFQTAwQjI1OTY1IC8q
IEJvcmRlclZhbHVlLmggaW4gSGVhZGVycyAqLywKQEAgLTE3OTk5LDYgKzE4MDA2LDcgQEAKIAkJ
CQlGRTgwRDdBQTBFOUMxRUQyMDAwRDZGNzUgLyogSlNDdXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJh
Y2suaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMzQxN0M5MENFQ0ZGMjUwMDQ5Q0JERSAvKiBKU0N1
c3RvbVZvaWRDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTEwQjkzN0MwQjczQzAwQTAw
M0VEODkwIC8qIEpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlC
NTlERDY5OTExOTAyOUU1MDA3RTk2ODQgLyogSlNEYXRhYmFzZUNhbGxiYWNrLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxQUU4MkY5MDBDQUFGQTlEMDAyMjM3QUUgLyogSlNEYXRhYmFzZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkM3N0QxNkEwRkYxOUY1NjAwNzA4ODdCIC8qIEpTRGF0YUdyaWRDb2x1
bW4uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNzdEMTZDMEZGMTlGNTYwMDcwODg3QiAvKiBKU0Rh
dGFHcmlkQ29sdW1uTGlzdC5oIGluIEhlYWRlcnMgKi8sCkBAIC0xODE2Myw3ICsxODE3MSwxMSBA
QAogCQkJCUJDODI0MzI5MEQwQ0U4QTIwMDQ2MEM4RiAvKiBKU1NRTEVycm9yLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxQUU4MkZFRDBDQUIwN0VFMDAyMjM3QUUgLyogSlNTUUxSZXN1bHRTZXQuaCBp
biBIZWFkZXJzICovLAogCQkJCTFBRkUxMTlBMENCRkZDQzQwMDMwMTdGQSAvKiBKU1NRTFJlc3Vs
dFNldFJvd0xpc3QuaCBpbiBIZWFkZXJzICovLAorCQkJCUI1OURENkE1MTE5MDJBNjIwMDdFOTY4
NCAvKiBKU1NRTFN0YXRlbWVudENhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKKwkJCQlCNTlERDZB
OTExOTAyQTcxMDA3RTk2ODQgLyogSlNTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzgyNDMyQTBEMENFOEEyMDA0NjBDOEYgLyogSlNTUUxUcmFuc2FjdGlv
bi5oIGluIEhlYWRlcnMgKi8sCisJCQkJQjU5REQ2OUQxMTkwMkE0MjAwN0U5Njg0IC8qIEpTU1FM
VHJhbnNhY3Rpb25DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCisJCQkJQjU5REQ2QTExMTkwMkE1
MjAwN0U5Njg0IC8qIEpTU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1MUUwQkFFQjBEQTU1RDRBMDBBOUU0MTcgLyogSlNTdG9yYWdlRXZlbnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRjUwMjZBMTAyQkE5NDMwMDY2RjM5QSAvKiBKU1N0eWxlTWVkaWEu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDRTAxMzlCMEMwQkVGMTgwMDQzODYwQSAvKiBKU1N0eWxl
U2hlZXQuaCBpbiBIZWFkZXJzICovLApAQCAtMTkyMTEsMTEgKzE5MjIzLDYgQEAKIAkJCQlFMUJF
NTEyRTBDRjZDNTEyMDAyRUE5NTkgLyogWFNMVFVuaWNvZGVTb3J0LmggaW4gSGVhZGVycyAqLywK
IAkJCQk5N0RENEQ4NzBGREY0RDZFMDBFQ0Y5QTQgLyogWFNTQXVkaXRvci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQ0UxNzJFMDExMTM2RThDRTAwNjJBNTMzIC8qIFpvb21Nb2RlLmggaW4gSGVhZGVy
cyAqLywKLQkJCQlCNTlERDY5OTExOTAyOUU1MDA3RTk2ODQgLyogSlNEYXRhYmFzZUNhbGxiYWNr
LmggaW4gSGVhZGVycyAqLywKLQkJCQlCNTlERDY5RDExOTAyQTQyMDA3RTk2ODQgLyogSlNTUUxU
cmFuc2FjdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKLQkJCQlCNTlERDZBMTExOTAyQTUy
MDA3RTk2ODQgLyogSlNTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaCBpbiBIZWFkZXJzICov
LAotCQkJCUI1OURENkE1MTE5MDJBNjIwMDdFOTY4NCAvKiBKU1NRTFN0YXRlbWVudENhbGxiYWNr
LmggaW4gSGVhZGVycyAqLywKLQkJCQlCNTlERDZBOTExOTAyQTcxMDA3RTk2ODQgLyogSlNTUUxT
dGF0ZW1lbnRFcnJvckNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQlCNTVENUFBNDExOTEz
MUZDMDBCQ0MzMTUgLyogSlNTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQjU4Q0VCNjkxMTkxMzYwNzAwMkE2NzkwIC8qIEpTRGF0YWJhc2VTeW5jLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCNThDRUI2RDExOTEzNjFDMDAyQTY3OTAgLyogSlNTUUxUcmFuc2Fj
dGlvblN5bmMuaCBpbiBIZWFkZXJzICovLApAQCAtMTk1NjIsNiArMTk1NjksNyBAQAogCQkJCUJD
NUVCOTFGMEU4MjA0MDgwMEIyNTk2NSAvKiBCaW5kaW5nVVJJLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE4OTk0MzI5MEI0MjMzODgwMEQ3QzgwMiAvKiBCaXRtYXBJbWFnZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkyRUFGQUYwRTEwRTJBRjJEMDA3RUQzRDYgLyogQmxvYi5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQk4OTE4MTQzMDExODdDNEI0MDBCRjY5OEEgLyogQmxvYkl0ZW0uY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJOTNGMTlBRTEwODI0NUU1OTAwMUU5QUJDIC8qIEJsb2NrRXhjZXB0aW9u
cy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDRUE0ODU0MDk3RDkzMDIwMDk0QzlFNCAvKiBicmVh
a19saW5lcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzMwOUREQTA5OUU2NDkyMDA1NkU1ODEg
LyogQnJlYWtCbG9ja3F1b3RlQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTIwMzEwLDgg
KzIwMzE4LDkgQEAKIAkJCQk1MUVDOTI2NTBDRTkwREQ0MDBGOTAzMDggLyogSlNDdXN0b21TUUxT
dGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBMzQxN0NBMENF
Q0ZGMjUwMDQ5Q0JERSAvKiBKU0N1c3RvbVZvaWRDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlFMTBCOTNDMzBCNzNDMjkxMDAzRUQ4OTAgLyogSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMUFFODJGOEYwQ0FBRkE5RDAwMjIzN0FFIC8qIEpTRGF0
YWJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQjU5REQ2OUExMTkwMjlFNTAwN0U5Njg0IC8q
IEpTRGF0YWJhc2VDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0NFNThBQzEwNjFF
OENGMDA4RkIzNUEgLyogSlNEYXRhYmFzZUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkx
QUU4MkY4RjBDQUFGQTlEMDAyMjM3QUUgLyogSlNEYXRhYmFzZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlCQzc3RDE2OTBGRjE5RjU2MDA3MDg4N0IgLyogSlNEYXRhR3JpZENvbHVtbi5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlCQzc3RDE2QjBGRjE5RjU2MDA3MDg4N0IgLyogSlNEYXRhR3JpZENv
bHVtbkxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM3N0QxNTIwRkYxOUM3MzAwNzA4ODdC
IC8qIEpTRGF0YUdyaWRDb2x1bW5MaXN0Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjA1
MjEsOCArMjA1MzAsMTIgQEAKIAkJCQkxQUU4MkZFQzBDQUIwN0VFMDAyMjM3QUUgLyogSlNTUUxS
ZXN1bHRTZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFGRTExOTkwQ0JGRkNDNDAwMzAxN0ZB
IC8qIEpTU1FMUmVzdWx0U2V0Um93TGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MURDRTgw
MjBDQUM5RjFDMDA0ODgzNTggLyogSlNTUUxSZXN1bHRTZXRSb3dMaXN0Q3VzdG9tLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCUI1OURENkE2MTE5MDJBNjIwMDdFOTY4NCAvKiBKU1NRTFN0YXRlbWVu
dENhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUI1OURENkFBMTE5MDJBNzEwMDdFOTY4
NCAvKiBKU1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NTE0Qzc2MzgwQ0U5MjI1RTAwN0VGM0NEIC8qIEpTU1FMVHJhbnNhY3Rpb24uY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJQjU5REQ2OUUxMTkwMkE0MjAwN0U5Njg0IC8qIEpTU1FMVHJhbnNhY3Rpb25D
YWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUQyMzE2RTBDRDI2OUU3MDBDMUYxOTQg
LyogSlNTUUxUcmFuc2FjdGlvbkN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCNTlERDZB
MjExOTAyQTUyMDA3RTk2ODQgLyogSlNTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNTFFM0Y5RDYwREEwNUUxRDAwMjUwOTExIC8qIEpTU3RvcmFnZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUQwQzUxNjBEQUE5MEI3MDAzQjM4MzEgLyogSlNTdG9y
YWdlQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxRTBCQUVBMERBNTVENEEwMEE5RTQx
NyAvKiBKU1N0b3JhZ2VFdmVudC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTIxNDkzLDExICsyMTUw
Niw2IEBACiAJCQkJOTNGMTlCMDUwODI0NUU1OTAwMUU5QUJDIC8qIFhTTFRQcm9jZXNzb3JMaWJ4
c2x0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxQkU1MTJEMENGNkM1MTIwMDJFQTk1OSAvKiBY
U0xUVW5pY29kZVNvcnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTdERDREODYwRkRGNEQ2RTAw
RUNGOUE0IC8qIFhTU0F1ZGl0b3IuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQjU5REQ2OUExMTkw
MjlFNTAwN0U5Njg0IC8qIEpTRGF0YWJhc2VDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKLQkJ
CQlCNTlERDY5RTExOTAyQTQyMDA3RTk2ODQgLyogSlNTUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCUI1OURENkEyMTE5MDJBNTIwMDdFOTY4NCAvKiBKU1NRTFRy
YW5zYWN0aW9uRXJyb3JDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlCNTlERDZBNjEx
OTAyQTYyMDA3RTk2ODQgLyogSlNTUUxTdGF0ZW1lbnRDYWxsYmFjay5jcHAgaW4gU291cmNlcyAq
LywKLQkJCQlCNTlERDZBQTExOTAyQTcxMDA3RTk2ODQgLyogSlNTUUxTdGF0ZW1lbnRFcnJvckNh
bGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUI1NUQ1QUE1MTE5MTMxRkMwMEJDQzMxNSAv
KiBKU1NRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUI1
NUQ1QUE4MTE5MTMyNTAwMEJDQzMxNSAvKiBKU0RhdGFiYXNlU3luY0N1c3RvbS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlCNTVENUFBOTExOTEzMjUwMDBCQ0MzMTUgLyogSlNTUUxUcmFuc2FjdGlv
blN5bmNDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Nl
cmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKaW5kZXggNTBhYzg2YmFjZTQxZWM1YzFiMTEyNWRkNDRj
NmI2ZjExZTYxODZhOC4uYWI5ODc1YzFjMTNhNjM0ZjNmOWM3OWE1YmQ1MDdmZWI5MDNlNzIyNiAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3Bw
CisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcApAQCAt
NTU4LDYgKzU1OCw5IEBAIHByaXZhdGU6CiAgICAgICAgIEJsb2IqIGJsb2IgPSBWOEJsb2I6OnRv
TmF0aXZlKHZhbHVlLkFzPHY4OjpPYmplY3Q+KCkpOwogICAgICAgICBpZiAoIWJsb2IpCiAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIC8vIEZJWE1FOiBOZWVkIGEgZml4IChvciBhZGRpdGlv
bmFsIGNvZGUgdG8gZHVtcCB0aGUgY29udGVudHMgdG8gYSBmaWxlKQorICAgICAgICAvLyBmb3Ig
bm9uLWZpbGUgYmxvYnMuCisgICAgICAgIC8vIEZJWE1FOiBOZWVkIHRvIHNlcmlhbGl6ZSB0aGUg
dHlwZSBpbmZvcm1hdGlvbiBhcyB3ZWxsPwogICAgICAgICBtX3dyaXRlci53cml0ZUJsb2IoYmxv
Yi0+cGF0aCgpKTsKICAgICB9CiAKQEAgLTg1Myw3ICs4NTYsOCBAQCBwcml2YXRlOgogICAgICAg
ICBTdHJpbmcgcGF0aDsKICAgICAgICAgaWYgKCFyZWFkV2ViQ29yZVN0cmluZygmcGF0aCkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIFBhc3NSZWZQdHI8QmxvYj4gYmxvYiA9
IEJsb2I6OmNyZWF0ZShwYXRoKTsKKyAgICAgICAgLy8gRklYTUU6IHNlZSB0aGUgRklYTUUgY29t
bWVudCBpbiB3cml0ZUJsb2IuCisgICAgICAgIFBhc3NSZWZQdHI8QmxvYj4gYmxvYiA9IEJsb2I6
OmNyZWF0ZUZyb21GaWxlKHBhdGgpOwogICAgICAgICAqdmFsdWUgPSB0b1Y4KGJsb2IpOwogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvQmxvYi5j
cHAgYi9XZWJDb3JlL2h0bWwvQmxvYi5jcHAKaW5kZXggODNiYmRjMGM1MjY0ODQ1NDI2ODgxOTI2
MjE2ODRiNjI4MjAyNGJmNC4uNThkMjFkYTRmNzkyZjgwZjRlNGY0NDQxZTE0MTFlOWUxNzFkMWMx
ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0Jsb2IuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9C
bG9iLmNwcApAQCAtMjksOTAgKzI5LDY4IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgor
CiAjaW5jbHVkZSAiQmxvYi5oIgogCisjaW5jbHVkZSAiQmxvYkl0ZW0uaCIKICNpbmNsdWRlICJG
aWxlU3lzdGVtLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotI2lmIEVOQUJMRShCTE9CX1NM
SUNFKQotY29uc3QgaW50IEJsb2I6OnRvRW5kT2ZGaWxlID0gLTE7Ci1jb25zdCBkb3VibGUgQmxv
Yjo6ZG9Ob3RDaGVja0ZpbGVDaGFuZ2UgPSAwOwotI2VuZGlmCitCbG9iOjpCbG9iKGNvbnN0IFN0
cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nIHR5cGUpCisgICAgOiBtX3R5cGUodHlwZSkKK3sKKyAg
ICBhcHBlbmQoQmxvYkl0ZW06OmNyZWF0ZUZpbGVCbG9iSXRlbShwYXRoKSk7Cit9CiAKLUJsb2I6
OkJsb2IoY29uc3QgU3RyaW5nJiBwYXRoKQotICAgIDogbV9wYXRoKHBhdGgpCi0jaWYgRU5BQkxF
KEJMT0JfU0xJQ0UpCi0gICAgLCBtX3N0YXJ0KDApCi0gICAgLCBtX2xlbmd0aCh0b0VuZE9mRmls
ZSkKLSAgICAsIG1fc25hcHNob3RDYXB0dXJlZChmYWxzZSkKLSAgICAsIG1fc25hcHNob3RTaXpl
KDApCi0gICAgLCBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZShkb05vdENoZWNrRmlsZUNoYW5n
ZSkKLSNlbmRpZgordW5zaWduZWQgbG9uZyBsb25nIEJsb2I6OnNpemUoKSBjb25zdAogeworICAg
IC8vIEZJWE1FOiBKYXZhU2NyaXB0IGNhbm5vdCByZXByZXNlbnQgc2l6ZXMgYXMgbGFyZ2UgYXMg
dW5zaWduZWQgbG9uZyBsb25nLCB3ZSBuZWVkIHRvCisgICAgLy8gY29tZSB1cCB3aXRoIGFuIGV4
Y2VwdGlvbiB0byB0aHJvdyBpZiBmaWxlIHNpemUgaXMgbm90IHJlcHJlc2V0YWJsZS4KKyAgICB1
bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSA9IDA7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X2l0ZW1MaXN0LnNpemUoKTsgKytpKQorICAgICAgICBzaXplICs9IG1faXRlbUxpc3RbaV0tPnNp
emUoKTsKKyAgICByZXR1cm4gc2l6ZTsKIH0KIAotI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotQmxv
Yjo6QmxvYihjb25zdCBTdHJpbmcmIHBhdGgsIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxl
bmd0aCwgbG9uZyBsb25nIHNuYXBzaG90U2l6ZSwgZG91YmxlIHNuYXBzaG90TW9kaWZpY2F0aW9u
VGltZSkKLSAgICA6IG1fcGF0aChwYXRoKQotICAgICwgbV9zdGFydChzdGFydCkKLSAgICAsIG1f
bGVuZ3RoKGxlbmd0aCkKLSAgICAsIG1fc25hcHNob3RDYXB0dXJlZCh0cnVlKQotICAgICwgbV9z
bmFwc2hvdFNpemUoc25hcHNob3RTaXplKQotICAgICwgbV9zbmFwc2hvdE1vZGlmaWNhdGlvblRp
bWUoc25hcHNob3RNb2RpZmljYXRpb25UaW1lKQorY29uc3QgU3RyaW5nJiBCbG9iOjpwYXRoKCkg
Y29uc3QKIHsKLSAgICBBU1NFUlQoc3RhcnQgPj0gMCAmJiBsZW5ndGggPj0gMCAmJiBzdGFydCAr
IGxlbmd0aCA8PSBzbmFwc2hvdFNpemUgJiYgc25hcHNob3RNb2RpZmljYXRpb25UaW1lKTsKKyAg
ICBBU1NFUlQobV9pdGVtTGlzdC5zaXplKCkgPT0gMSAmJiBtX2l0ZW1MaXN0WzBdLT50b0ZpbGVC
bG9iSXRlbSgpKTsKKyAgICByZXR1cm4gbV9pdGVtTGlzdFswXS0+dG9GaWxlQmxvYkl0ZW0oKS0+
cGF0aCgpOwogfQotI2VuZGlmCiAKLXVuc2lnbmVkIGxvbmcgbG9uZyBCbG9iOjpzaXplKCkgY29u
c3QKK3ZvaWQgQmxvYjo6YXBwZW5kKFBhc3NSZWZQdHI8QmxvYkl0ZW0+IGl0ZW0pCiB7Ci0gICAg
Ly8gRklYTUU6IEphdmFTY3JpcHQgY2Fubm90IHJlcHJlc2VudCBzaXplcyBhcyBsYXJnZSBhcyB1
bnNpZ25lZCBsb25nIGxvbmcsIHdlIG5lZWQgdG8KLSAgICAvLyBjb21lIHVwIHdpdGggYW4gZXhj
ZXB0aW9uIHRvIHRocm93IGlmIGZpbGUgc2l6ZSBpcyBub3QgcmVwcmVzZXRhYmxlLgotI2lmIEVO
QUJMRShCTE9CX1NMSUNFKQotICAgIGlmIChtX3NuYXBzaG90Q2FwdHVyZWQpCi0gICAgICAgIHJl
dHVybiBtX2xlbmd0aDsKLSNlbmRpZgotICAgIGxvbmcgbG9uZyBzaXplOwotICAgIGlmICghZ2V0
RmlsZVNpemUobV9wYXRoLCBzaXplKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIHN0
YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oc2l6ZSk7CisgICAgbV9pdGVtTGlzdC5hcHBl
bmQoaXRlbSk7CiB9CiAKICNpZiBFTkFCTEUoQkxPQl9TTElDRSkKIFBhc3NSZWZQdHI8QmxvYj4g
QmxvYjo6c2xpY2UobG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoKSBjb25zdAogewot
ICAgIC8vIFdoZW4gd2Ugc2xpY2UgYSBmaWxlIGZvciB0aGUgZmlyc3QgdGltZSwgd2Ugb2J0YWlu
IGEgc25hcHNob3Qgb2YgdGhlIGZpbGUgYnkgY2FwdHVyaW5nIGl0cyBjdXJyZW50IHNpemUgYW5k
IG1vZGlmaWNhdGlvbiB0aW1lLgotICAgIC8vIFRoZSBtb2RpZmljYXRpb24gdGltZSB3aWxsIGJl
IHVzZWQgdG8gdmVyaWZ5IGlmIHRoZSBmaWxlIGhhcyBiZWVuIGNoYW5nZWQgb3Igbm90LCB3aGVu
IHRoZSB1bmRlcmx5aW5nIGRhdGEgYXJlIGFjY2Vzc2VkLgotICAgIGxvbmcgbG9uZyBzbmFwc2hv
dFNpemU7Ci0gICAgZG91YmxlIHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZTsKLSAgICBpZiAobV9z
bmFwc2hvdENhcHR1cmVkKSB7Ci0gICAgICAgIHNuYXBzaG90U2l6ZSA9IG1fc25hcHNob3RTaXpl
OwotICAgICAgICBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUgPSBtX3NuYXBzaG90TW9kaWZpY2F0
aW9uVGltZTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBJZiB3ZSBmYWlsIHRvIHJldHJpZXZl
IHRoZSBzaXplIG9yIG1vZGlmaWNhdGlvbiB0aW1lLCBwcm9iYWJseSBkdWUgdG8gdGhhdCB0aGUg
ZmlsZSBoYXMgYmVlbiBkZWxldGVkLCBhbiBlbXB0eSBibG9iIHdpbGwgYmUgcmV0dXJuZWQuCi0g
ICAgICAgIHRpbWVfdCBtb2RpZmljYXRpb25UaW1lOwotICAgICAgICBpZiAoIWdldEZpbGVTaXpl
KG1fcGF0aCwgc25hcHNob3RTaXplKSB8fCAhZ2V0RmlsZU1vZGlmaWNhdGlvblRpbWUobV9wYXRo
LCBtb2RpZmljYXRpb25UaW1lKSkgewotICAgICAgICAgICAgc25hcHNob3RTaXplID0gMDsKLSAg
ICAgICAgICAgIHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSA9IDA7Ci0gICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgc25hcHNob3RNb2RpZmljYXRpb25UaW1lID0gbW9kaWZpY2F0aW9uVGltZTsK
LSAgICB9Ci0KLSAgICAvLyBDbGFtcCB0aGUgcmFuZ2UgaWYgaXQgZXhjZWVkcyB0aGUgc2l6ZSBs
aW1pdC4KICAgICBpZiAoc3RhcnQgPCAwKQogICAgICAgICBzdGFydCA9IDA7CiAgICAgaWYgKGxl
bmd0aCA8IDApCiAgICAgICAgIGxlbmd0aCA9IDA7CiAKLSAgICBpZiAoc3RhcnQgPiBzbmFwc2hv
dFNpemUpIHsKKyAgICAvLyBDbGFtcCB0aGUgcmFuZ2UgaWYgaXQgZXhjZWVkcyB0aGUgc2l6ZSBs
aW1pdC4KKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxTaXplID0gc2l6ZSgpOworICAgIGlm
IChzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KHN0YXJ0KSA+IHRvdGFsU2l6ZSkgewog
ICAgICAgICBzdGFydCA9IDA7CiAgICAgICAgIGxlbmd0aCA9IDA7Ci0gICAgfSBlbHNlIGlmIChz
dGFydCArIGxlbmd0aCA+IHNuYXBzaG90U2l6ZSkKLSAgICAgICAgbGVuZ3RoID0gc25hcHNob3RT
aXplIC0gc3RhcnQ7CisgICAgfSBlbHNlIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxv
bmc+KHN0YXJ0ICsgbGVuZ3RoKSA+IHRvdGFsU2l6ZSkKKyAgICAgICAgbGVuZ3RoID0gdG90YWxT
aXplIC0gc3RhcnQ7CiAKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJsb2IobV9wYXRoLCBtX3N0
YXJ0ICsgc3RhcnQsIGxlbmd0aCwgc25hcHNob3RTaXplLCBzbmFwc2hvdE1vZGlmaWNhdGlvblRp
bWUpKTsKKyAgICBzaXplX3QgaSA9IDA7CisgICAgUmVmUHRyPEJsb2I+IGJsb2IgPSBCbG9iOjpj
cmVhdGUoKTsKKyAgICBmb3IgKDsgaSA8IG1faXRlbUxpc3Quc2l6ZSgpICYmIHN0YXRpY19jYXN0
PHVuc2lnbmVkIGxvbmcgbG9uZz4oc3RhcnQpID49IG1faXRlbUxpc3RbaV0tPnNpemUoKTsgKytp
KQorICAgICAgICBzdGFydCAtPSBtX2l0ZW1MaXN0W2ldLT5zaXplKCk7CisgICAgZm9yICg7IGxl
bmd0aCA+IDAgJiYgaSA8IG1faXRlbUxpc3Quc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgYmxvYi0+
bV9pdGVtTGlzdC5hcHBlbmQoQmxvYkl0ZW06OmNyZWF0ZVJhbmdlQmxvYkl0ZW0obV9pdGVtTGlz
dFtpXSwgc3RhcnQsIGxlbmd0aCkpOworICAgICAgICBsZW5ndGggLT0gYmxvYi0+bV9pdGVtTGlz
dC5sYXN0KCktPnNpemUoKTsKKyAgICAgICAgc3RhcnQgPSAwOworICAgIH0KKyAgICByZXR1cm4g
YmxvYi5yZWxlYXNlKCk7CiB9Ci0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoQkxPQl9TTElDRSkK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0Jsb2Iu
aCBiL1dlYkNvcmUvaHRtbC9CbG9iLmgKaW5kZXggZThiNWYzZmRmMDY5YTJiNDg3NmVkMTZhYjgx
YjIyZjBmZjAzODk3MC4uODk3MDA4ODU0YzNkNTY2OTdiYjc4ZmRiZTFjYmY1YjNkOThjZDEwNyAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0Jsb2IuaAorKysgYi9XZWJDb3JlL2h0bWwvQmxvYi5o
CkBAIC0zMSw2OSArMzEsNDggQEAKICNpZm5kZWYgQmxvYl9oCiAjZGVmaW5lIEJsb2JfaAogCi0j
aW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkJsb2JJdGVtLmgiCiAjaW5jbHVk
ZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSAiVGV4dEVu
Y29kaW5nLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBCbG9iIDogcHVibGljIFJlZkNvdW50ZWQ8QmxvYj4gewogcHVibGljOgotI2lm
IEVOQUJMRShCTE9CX1NMSUNFKQotICAgIHN0YXRpYyBjb25zdCBpbnQgdG9FbmRPZkZpbGU7Ci0g
ICAgc3RhdGljIGNvbnN0IGRvdWJsZSBkb05vdENoZWNrRmlsZUNoYW5nZTsKLSNlbmRpZgorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEJsb2I+IGNyZWF0ZShjb25zdCBTdHJpbmcgdHlwZSA9IFN0cmlu
ZygpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBCbG9iKHR5cGUpKTsKKyAg
ICB9CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxCbG9iPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBw
YXRoKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJsb2I+IGNyZWF0ZUZyb21GaWxlKGNvbnN0IFN0
cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nIHR5cGUgPSBTdHJpbmcoKSkKICAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgQmxvYihwYXRoKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgQmxvYihwYXRoLCB0eXBlKSk7CiAgICAgfQogCiAgICAgdmlydHVhbCB+QmxvYigpIHsg
fQogCisgICAgdW5zaWduZWQgbG9uZyBsb25nIHNpemUoKSBjb25zdDsKKyAgICBjb25zdCBTdHJp
bmcmIHBhdGgoKSBjb25zdDsKKyAgICBjb25zdCBTdHJpbmcmIHR5cGUoKSBjb25zdCB7IHJldHVy
biBtX3R5cGU7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNGaWxlKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KIAotI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgIFBhc3NSZWZQdHI8QmxvYj4gc2xp
Y2UobG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoKSBjb25zdDsKLSNlbmRpZgorICAg
IHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxCbG9iSXRlbT4gPiBJdGVtTGlzdDsKKyAgICB2b2lkIGFw
cGVuZChQYXNzUmVmUHRyPEJsb2JJdGVtPiBpdGVtKTsKKyAgICBjb25zdCBJdGVtTGlzdCYgaXRl
bXMoKSBjb25zdCB7IHJldHVybiBtX2l0ZW1MaXN0OyB9CiAKLSAgICBjb25zdCBTdHJpbmcmIHBh
dGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0KLSAgICB1bnNpZ25lZCBsb25nIGxvbmcgc2l6
ZSgpIGNvbnN0OwogI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgIGxvbmcgbG9uZyBzdGFydCgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhcnQ7IH0KLSAgICBsb25nIGxvbmcgbGVuZ3RoKCkgY29uc3Qg
eyByZXR1cm4gbV9sZW5ndGg7IH0KLSAgICBkb3VibGUgbW9kaWZpY2F0aW9uVGltZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc25hcHNob3RNb2RpZmljYXRpb25UaW1lOyB9CisgICAgUGFzc1JlZlB0cjxC
bG9iPiBzbGljZShsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgpIGNvbnN0OwogI2Vu
ZGlmCiAKIHByb3RlY3RlZDoKLSAgICBCbG9iKGNvbnN0IFN0cmluZyYgcGF0aCk7CisgICAgQmxv
Yihjb25zdCBTdHJpbmcgdHlwZSkgOiBtX3R5cGUodHlwZSkgeyB9CisgICAgQmxvYihjb25zdCBT
dHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyB0eXBlKTsKIAotcHJpdmF0ZToKLSNpZiBFTkFCTEUo
QkxPQl9TTElDRSkKLSAgICBCbG9iKGNvbnN0IFN0cmluZyYgcGF0aCwgbG9uZyBsb25nIHN0YXJ0
LCBsb25nIGxvbmcgbGVuZ3RoLCBsb25nIGxvbmcgc25hcHNob3RTaXplLCBkb3VibGUgc25hcHNo
b3RNb2RpZmljYXRpb25UaW1lKTsKLSNlbmRpZgotCi0gICAgLy8gVGhlIHVuZGVybHlpbmcgcGF0
aCBvZiB0aGUgZmlsZS1iYXNlZCBibG9iLiAKLSAgICBTdHJpbmcgbV9wYXRoOwotCi0jaWYgRU5B
QkxFKEJMT0JfU0xJQ0UpCi0gICAgLy8gVGhlIHN0YXJ0aW5nIHBvc2l0aW9uIG9mIHRoZSBmaWxl
LWJhc2VkIGJsb2IuCi0gICAgbG9uZyBsb25nIG1fc3RhcnQ7Ci0KLSAgICAvLyBUaGUgbGVuZ3Ro
IG9mIHRoZSBmaWxlLWJhc2VkIGJsb2IuIFRoZSB2YWx1ZSBvZiAtMSBtZWFucyB0byB0aGUgZW5k
IG9mIHRoZSBmaWxlLgotICAgIGxvbmcgbG9uZyBtX2xlbmd0aDsKLQotICAgIC8vIEEgZmxhZyB0
byB0ZWxsIGlmIGEgc25hcHNob3QgaGFzIGJlZW4gY2FwdHVyZWQuCi0gICAgYm9vbCBtX3NuYXBz
aG90Q2FwdHVyZWQ7Ci0KLSAgICAvLyBUaGUgc2l6ZSBvZiB0aGUgZmlsZSB3aGVuIGEgc25hcHNo
b3QgaXMgY2FwdHVyZWQuIEl0IGNhbiBiZSAwIGlmIHRoZSBmaWxlIGlzIGVtcHR5LgotICAgIGxv
bmcgbG9uZyBtX3NuYXBzaG90U2l6ZTsKLQotICAgIC8vIFRoZSBsYXN0IG1vZGlmaWNhdGlvbiB0
aW1lIG9mIHRoZSBmaWxlIHdoZW4gYSBzbmFwc2hvdCBpcyBjYXB0dXJlZC4gVGhlIHZhbHVlIG9m
IDAgYWxzbyBtZWFucyB0aGF0IHRoZSBzbmFwc2hvdCBpcyBub3QgY2FwdHVyZWQuCi0gICAgZG91
YmxlIG1fc25hcHNob3RNb2RpZmljYXRpb25UaW1lOwotI2VuZGlmCisgICAgVmVjdG9yPFJlZlB0
cjxCbG9iSXRlbT4gPiBtX2l0ZW1MaXN0OworICAgIGNvbnN0IFN0cmluZyBtX3R5cGU7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvQmxvYkl0
ZW0uY3BwIGIvV2ViQ29yZS9odG1sL0Jsb2JJdGVtLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wYzViZDM0YmFh
MTc3YjlhOWE3OTg1NjgzOGE1NmEzYTQ0MzY3NmJlCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29y
ZS9odG1sL0Jsb2JJdGVtLmNwcApAQCAtMCwwICsxLDMwOSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2luY2x1ZGUgIkJsb2JJdGVtLmgiCisKKyNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCisjaW5j
bHVkZSAiVVVJRC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NoYXIqIEJsb2JJdGVtOjpy
ZWxlYXNlQnVmZmVyKCkgY29uc3QKK3sKKyAgICBWZWN0b3I8Y2hhcj4gdjsKKyAgICB2LmFwcGVu
ZChkYXRhKCksIHN0YXRpY19jYXN0PHNpemVfdD4oc2l6ZSgpKSk7CisgICAgcmV0dXJuIHYucmVs
ZWFzZUJ1ZmZlcigpOworfQorCitQYXNzUmVmUHRyPEJsb2JJdGVtPiBCbG9iSXRlbTo6Y3JlYXRl
RmlsZUJsb2JJdGVtKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYo
c3RhdGljX2Nhc3Q8QmxvYkl0ZW0qPihuZXcgRmlsZUJsb2JJdGVtKHBhdGgpKSk7Cit9CisKK1Bh
c3NSZWZQdHI8QmxvYkl0ZW0+IEJsb2JJdGVtOjpjcmVhdGVTdHJpbmdCbG9iSXRlbShjb25zdCBT
dHJpbmcmIHRleHQsIEVuZGluZ1R5cGUgZW5kaW5nLCBUZXh0RW5jb2RpbmcgZW5jb2RpbmcpCit7
CisgICAgcmV0dXJuIGFkb3B0UmVmKHN0YXRpY19jYXN0PEJsb2JJdGVtKj4obmV3IFN0cmluZ0Js
b2JJdGVtKHRleHQsIGVuZGluZywgZW5jb2RpbmcpKSk7Cit9CisKK1Bhc3NSZWZQdHI8QmxvYkl0
ZW0+IEJsb2JJdGVtOjpjcmVhdGVTdHJpbmdCbG9iSXRlbShjb25zdCBDU3RyaW5nJiB0ZXh0KQor
eworICAgIHJldHVybiBhZG9wdFJlZihzdGF0aWNfY2FzdDxCbG9iSXRlbSo+KG5ldyBTdHJpbmdC
bG9iSXRlbSh0ZXh0KSkpOworfQorCitQYXNzUmVmUHRyPEJsb2JJdGVtPiBCbG9iSXRlbTo6Y3Jl
YXRlQnl0ZXNBcnJheUJsb2JJdGVtKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBzaXplKQorewor
ICAgIHJldHVybiBhZG9wdFJlZihzdGF0aWNfY2FzdDxCbG9iSXRlbSo+KG5ldyBCeXRlc0FycmF5
QmxvYkl0ZW0oZGF0YSwgc2l6ZSkpKTsKK30KKworI2lmIEVOQUJMRShCTE9CX1NMSUNFKQorc3Rh
dGljIGNvbnN0IGRvdWJsZSBpbnZhbGlkTW9kaWZpY2F0aW9uVGltZSA9IC0xOworCitkb3VibGUg
Z2V0RmlsZVNuYXBzaG90TW9kaWZpY2F0aW9uVGltZShjb25zdCBTdHJpbmcmIHBhdGgpCit7Cisg
ICAgLy8gRklYTUU6IHN5bmNocm9uaXplZCBmaWxlIGNhbGwKKyAgICB0aW1lX3QgbW9kaWZpY2F0
aW9uVGltZTsKKyAgICBpZiAoZ2V0RmlsZU1vZGlmaWNhdGlvblRpbWUocGF0aCwgbW9kaWZpY2F0
aW9uVGltZSkpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KG1vZGlmaWNhdGlv
blRpbWUpOworICAgIHJldHVybiBpbnZhbGlkTW9kaWZpY2F0aW9uVGltZTsKK30KKworUGFzc1Jl
ZlB0cjxCbG9iSXRlbT4gQmxvYkl0ZW06OmNyZWF0ZVJhbmdlQmxvYkl0ZW0oUGFzc1JlZlB0cjxC
bG9iSXRlbT4gaXRlbSwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoKQoreworICAg
IEFTU0VSVChzdGFydCA+PSAwICYmIGxlbmd0aCA+PSAwKTsKKyAgICBpZiAoIXN0YXJ0ICYmIGl0
ZW0tPnNpemUoKSA8PSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KGxlbmd0aCkpCisg
ICAgICAgIHJldHVybiBpdGVtOworICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxv
bmc+KHN0YXJ0ICsgbGVuZ3RoKSA+IGl0ZW0tPnNpemUoKSkKKyAgICAgICAgbGVuZ3RoID0gaXRl
bS0+c2l6ZSgpIC0gc3RhcnQ7CisgICAgY29uc3QgRmlsZUJsb2JJdGVtKiBmaWxlSXRlbSA9IGl0
ZW0tPnRvRmlsZUJsb2JJdGVtKCk7CisgICAgaWYgKGZpbGVJdGVtKSB7CisgICAgICAgIGNvbnN0
IEZpbGVSYW5nZUJsb2JJdGVtKiBmaWxlUmFuZ2VJdGVtID0gaXRlbS0+dG9GaWxlUmFuZ2VCbG9i
SXRlbSgpOworICAgICAgICBpZiAoZmlsZVJhbmdlSXRlbSkgeworICAgICAgICAgICAgc3RhcnQg
Kz0gZmlsZVJhbmdlSXRlbS0+c3RhcnQoKTsKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGVGaWxl
UmFuZ2VCbG9iSXRlbShmaWxlSXRlbS0+cGF0aCgpLCBzdGFydCwgbGVuZ3RoLCBmaWxlUmFuZ2VJ
dGVtLT5zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUoKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIGNyZWF0ZUZpbGVSYW5nZUJsb2JJdGVtKGZpbGVJdGVtLT5wYXRoKCksIHN0YXJ0LCBsZW5n
dGgsIGdldEZpbGVTbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUoZmlsZUl0ZW0tPnBhdGgoKSkpOwor
ICAgIH0KKyAgICByZXR1cm4gYWRvcHRSZWYoc3RhdGljX2Nhc3Q8QmxvYkl0ZW0qPihuZXcgRGF0
YVJhbmdlQmxvYkl0ZW0oaXRlbSwgc3RhcnQsIGxlbmd0aCkpKTsKK30KKworUGFzc1JlZlB0cjxC
bG9iSXRlbT4gQmxvYkl0ZW06OmNyZWF0ZUZpbGVSYW5nZUJsb2JJdGVtKGNvbnN0IFN0cmluZyYg
cGF0aCwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoLCBkb3VibGUgc25hcHNob3RN
b2RpZmljYXRpb25UaW1lKQoreworICAgIHJldHVybiBhZG9wdFJlZihzdGF0aWNfY2FzdDxCbG9i
SXRlbSo+KG5ldyBGaWxlUmFuZ2VCbG9iSXRlbShwYXRoLCBzdGFydCwgbGVuZ3RoLCBzbmFwc2hv
dE1vZGlmaWNhdGlvblRpbWUpKSk7Cit9CisjZW5kaWYgLy8gRU5BQkxFKEJMT0JfU0xJQ0UpCisK
Ky8vIEZpbGVCbG9iSXRlbSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZpbGVCbG9iSXRlbTo6RmlsZUJsb2JJdGVtKGNv
bnN0IFN0cmluZyYgcGF0aCkKKyAgICA6IG1fcGF0aChwYXRoKQorICAgICwgbV9maWxlTmFtZShw
YXRoR2V0RmlsZU5hbWUobV9wYXRoKSkKK3sKK30KKwordW5zaWduZWQgbG9uZyBsb25nIEZpbGVC
bG9iSXRlbTo6c2l6ZSgpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IHN5bmNocm9uaXplZCBmaWxl
IGNhbGwKKyAgICBsb25nIGxvbmcgc2l6ZTsKKyAgICBpZiAoIWdldEZpbGVTaXplKG1fcGF0aCwg
c2l6ZSkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBsb25nIGxvbmc+KHNpemUpOworfQorCitQYXNzUmVmUHRyPEJsb2JJdGVtPiBGaWxlQmxvYkl0
ZW06OmRlZXBDb3B5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gQmxvYkl0ZW06OmNyZWF0ZUZpbGVC
bG9iSXRlbShtX3BhdGgpOworfQorCitib29sIEZpbGVCbG9iSXRlbTo6ZXF1YWxzKGNvbnN0IEJs
b2JJdGVtKiBiKSBjb25zdAoreworICAgIGNvbnN0IEZpbGVCbG9iSXRlbSogZmlsZUl0ZW0gPSBi
LT50b0ZpbGVCbG9iSXRlbSgpOworICAgIGlmICghZmlsZUl0ZW0gfHwgbV9wYXRoICE9IGZpbGVJ
dGVtLT5tX3BhdGgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworLy8gU3RyaW5nQmxvYkl0ZW0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU3RyaW5nQmxvYkl0ZW06OlN0cmluZ0Jsb2JJ
dGVtKGNvbnN0IFN0cmluZyYgdGV4dCwgRW5kaW5nVHlwZSBlbmRpbmcsIFRleHRFbmNvZGluZyBl
bmNvZGluZykKK3sKKyAgICBDU3RyaW5nIGZyb20gPSBlbmNvZGluZy5lbmNvZGUodGV4dC5jaGFy
YWN0ZXJzKCksIHRleHQubGVuZ3RoKCksIEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKTsKKyAgICBt
X2RhdGEgPSBmcm9tOworCisgICAgaWYgKGVuZGluZyA9PSBFbmRpbmdUcmFuc3BhcmVudCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgY29uc3QgY2hhciogZW5kaW5nQ2hhcnMgPSAoZW5kaW5nID09
IEVuZGluZ0NSTEYpID8gIlxyXG4iIDogKChlbmRpbmcgPT0gRW5kaW5nQ1IpID8gIlxyIiA6ICJc
biIpOworCisgICAgaW50IGVuZGluZ0xlbmd0aCA9IChlbmRpbmcgPT0gRW5kaW5nQ1JMRikgPyAy
IDogMTsKKyAgICBpbnQgbmVlZEZpeCA9IDA7CisKKyAgICAvLyBDYWxjdWxhdGUgdGhlIGZpbmFs
IGxlbmd0aC4KKyAgICBpbnQgY2FsY3VsYXRlZExlbmd0aCA9IGZyb20ubGVuZ3RoKCk7CisgICAg
Y29uc3QgY2hhciogcCA9IGZyb20uZGF0YSgpOworICAgIHdoaWxlIChjaGFyIGMgPSAqcCsrKSB7
CisgICAgICAgIGlmIChjID09ICdccicpIHsKKyAgICAgICAgICAgIC8vIFNhZmUgdG8gbG9vayBh
aGVhZCBiZWNhdXNlIG9mIHRyYWlsaW5nICdcMCcuCisgICAgICAgICAgICBpZiAoKnAgPT0gJ1xu
JyAmJiBlbmRpbmcgIT0gRW5kaW5nQ1JMRikgeworICAgICAgICAgICAgICAgIGNhbGN1bGF0ZWRM
ZW5ndGggKz0gKGVuZGluZ0xlbmd0aCAtIDIpOworICAgICAgICAgICAgICAgICsrbmVlZEZpeDsK
KyAgICAgICAgICAgIH0gZWxzZSBpZiAoZW5kaW5nICE9IEVuZGluZ0NSKSB7CisgICAgICAgICAg
ICAgICAgY2FsY3VsYXRlZExlbmd0aCArPSAoZW5kaW5nTGVuZ3RoIC0gMSk7CisgICAgICAgICAg
ICAgICAgKytuZWVkRml4OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKGMgPT0g
J1xuJyAmJiBlbmRpbmcgIT0gRW5kaW5nTEYpIHsKKyAgICAgICAgICAgIGNhbGN1bGF0ZWRMZW5n
dGggKz0gKGVuZGluZ0xlbmd0aCAtIDEpOworICAgICAgICAgICAgKytuZWVkRml4OworICAgICAg
ICB9CisgICAgfQorCisgICAgaWYgKCFuZWVkRml4KQorICAgICAgICByZXR1cm47CisKKyAgICAv
LyBDb252ZXJ0IHRoZSBlbmRpbmdzIGFuZCBjcmVhdGUgYSBkYXRhIGJ1ZmZlci4KKyAgICBwID0g
ZnJvbS5kYXRhKCk7CisgICAgY2hhciogcTsKKyAgICBtX2RhdGEgPSBDU3RyaW5nOjpuZXdVbmlu
aXRpYWxpemVkKGNhbGN1bGF0ZWRMZW5ndGgsIHEpOworICAgIHdoaWxlIChjaGFyIGMgPSAqcCsr
KSB7CisgICAgICAgIGlmIChjID09ICdccicpIHsKKyAgICAgICAgICAgIGlmICgqcCA9PSAnXG4n
ICYmIGVuZGluZyAhPSBFbmRpbmdDUkxGKSB7CisgICAgICAgICAgICAgICAgbWVtY3B5KHEsIGVu
ZGluZ0NoYXJzLCBlbmRpbmdMZW5ndGgpOworICAgICAgICAgICAgICAgIHEgKz0gZW5kaW5nTGVu
Z3RoOworICAgICAgICAgICAgfSBlbHNlIGlmICgqcCAhPSAnXG4nICYmIGVuZGluZyAhPSBFbmRp
bmdDUikgeworICAgICAgICAgICAgICAgIG1lbWNweShxLCBlbmRpbmdDaGFycywgZW5kaW5nTGVu
Z3RoKTsKKyAgICAgICAgICAgICAgICBxICs9IGVuZGluZ0xlbmd0aDsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSBlbHNlIGlmIChjID09ICdcbicgJiYgZW5kaW5nICE9IEVuZGluZ0xGKSB7Cisg
ICAgICAgICAgICBtZW1jcHkocSwgZW5kaW5nQ2hhcnMsIGVuZGluZ0xlbmd0aCk7CisgICAgICAg
ICAgICBxICs9IGVuZGluZ0xlbmd0aDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8v
IExlYXZlIG90aGVyIGNoYXJhY3RlcnMgYWxvbmUuCisgICAgICAgICAgICAqcSsrID0gYzsKKyAg
ICAgICAgfQorICAgIH0KK30KKworU3RyaW5nQmxvYkl0ZW06OlN0cmluZ0Jsb2JJdGVtKGNvbnN0
IENTdHJpbmcmIHRleHQpCisgICAgOiBtX2RhdGEodGV4dCkKK3sKK30KKworUGFzc1JlZlB0cjxC
bG9iSXRlbT4gU3RyaW5nQmxvYkl0ZW06OmRlZXBDb3B5KCkgY29uc3QKK3sKKyAgICByZXR1cm4g
QmxvYkl0ZW06OmNyZWF0ZVN0cmluZ0Jsb2JJdGVtKENTdHJpbmcobV9kYXRhLmRhdGEoKSwgbV9k
YXRhLmxlbmd0aCgpKSk7Cit9CisKK2Jvb2wgU3RyaW5nQmxvYkl0ZW06OmVxdWFscyhjb25zdCBC
bG9iSXRlbSogYikgY29uc3QKK3sKKyAgICBjb25zdCBTdHJpbmdCbG9iSXRlbSogc3RyaW5nSXRl
bSA9IGItPnRvU3RyaW5nQmxvYkl0ZW0oKTsKKyAgICBpZiAoIXN0cmluZ0l0ZW0pCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gKHN0cmluZ0l0ZW0gJiYgZGF0YSgpID09IGItPmRh
dGEoKSAmJiBzaXplKCkgPT0gYi0+c2l6ZSgpKTsKK30KKworLy8gQnl0ZXNBcnJheUJsb2JJdGVt
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKworQnl0ZXNBcnJheUJsb2JJdGVtOjpCeXRlc0FycmF5QmxvYkl0ZW0oY29uc3QgY2hhciog
ZGF0YSwgc2l6ZV90IHNpemUpCit7CisgICAgbV9ieXRlc0FycmF5LmFwcGVuZChkYXRhLCBzaXpl
KTsKK30KKworUGFzc1JlZlB0cjxCbG9iSXRlbT4gQnl0ZXNBcnJheUJsb2JJdGVtOjpkZWVwQ29w
eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEJsb2JJdGVtOjpjcmVhdGVCeXRlc0FycmF5QmxvYkl0
ZW0obV9ieXRlc0FycmF5LmRhdGEoKSwgbV9ieXRlc0FycmF5LnNpemUoKSk7Cit9CisKK2Jvb2wg
Qnl0ZXNBcnJheUJsb2JJdGVtOjplcXVhbHMoY29uc3QgQmxvYkl0ZW0qIGIpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIChkYXRhKCkgPT0gYi0+ZGF0YSgpICYmIHNpemUoKSA9PSBiLT5zaXplKCkpOwor
fQorCisjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCisKKy8vIERhdGFSYW5nZUJsb2JJdGVtIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisK
K0RhdGFSYW5nZUJsb2JJdGVtOjpEYXRhUmFuZ2VCbG9iSXRlbShQYXNzUmVmUHRyPEJsb2JJdGVt
PiBpdGVtLCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgpCisgICAgOiBtX2l0ZW0o
aXRlbSkKKyAgICAsIG1fc3RhcnQoc3RhcnQpCisgICAgLCBtX2xlbmd0aChsZW5ndGgpCit7Cisg
ICAgQVNTRVJUKCFtX2l0ZW0tPnRvRmlsZUJsb2JJdGVtKCkpOworICAgIGlmIChtX2l0ZW0tPnRv
RGF0YVJhbmdlQmxvYkl0ZW0oKSkgeworICAgICAgICBjb25zdCBEYXRhUmFuZ2VCbG9iSXRlbSog
ciA9IG1faXRlbS0+dG9EYXRhUmFuZ2VCbG9iSXRlbSgpOworICAgICAgICBtX3N0YXJ0ICs9IHIt
Pm1fc3RhcnQ7CisgICAgICAgIG1faXRlbSA9IHItPm1faXRlbTsKKyAgICAgICAgQVNTRVJUKCFt
X2l0ZW0tPnRvRGF0YVJhbmdlQmxvYkl0ZW0oKSk7CisgICAgICAgIEFTU0VSVChzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBsb25nIGxvbmc+KG1fc3RhcnQgKyBtX2xlbmd0aCkgPD0gbV9pdGVtLT5zaXpl
KCkpOworICAgIH0KK30KKworY29uc3QgY2hhciogRGF0YVJhbmdlQmxvYkl0ZW06OmRhdGEoKSBj
b25zdAoreworICAgIHJldHVybiBtX2l0ZW0tPmRhdGEoKSArIG1fc3RhcnQ7Cit9CisKK1Bhc3NS
ZWZQdHI8QmxvYkl0ZW0+IERhdGFSYW5nZUJsb2JJdGVtOjpkZWVwQ29weSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIEJsb2JJdGVtOjpjcmVhdGVSYW5nZUJsb2JJdGVtKG1faXRlbS0+ZGVlcENvcHko
KSwgbV9zdGFydCwgbV9sZW5ndGgpOworfQorCitib29sIERhdGFSYW5nZUJsb2JJdGVtOjplcXVh
bHMoY29uc3QgQmxvYkl0ZW0qIGIpIGNvbnN0Cit7CisgICAgY29uc3QgRGF0YVJhbmdlQmxvYkl0
ZW0qIHJhbmdlSXRlbSA9IGItPnRvRGF0YVJhbmdlQmxvYkl0ZW0oKTsKKyAgICBpZiAoIXJhbmdl
SXRlbSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3N0YXJ0ICE9IHJhbmdlSXRl
bS0+bV9zdGFydCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghbV9pdGVtLT5lcXVh
bHMocmFuZ2VJdGVtLT5tX2l0ZW0uZ2V0KCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKKy8vIEZpbGVSYW5nZUJsb2JJdGVtIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZpbGVSYW5nZUJs
b2JJdGVtOjpGaWxlUmFuZ2VCbG9iSXRlbShjb25zdCBTdHJpbmcmIHBhdGgsIGxvbmcgbG9uZyBz
dGFydCwgbG9uZyBsb25nIGxlbmd0aCwgZG91YmxlIG1vZGlmaWNhdGlvblRpbWUpCisgICAgOiBG
aWxlQmxvYkl0ZW0ocGF0aCkKKyAgICAsIG1fc3RhcnQoc3RhcnQpCisgICAgLCBtX2xlbmd0aChs
ZW5ndGgpCisgICAgLCBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZShtb2RpZmljYXRpb25UaW1l
KQoreworICAgIG1fdW5pcXVlTmFtZSA9ICJCbG9iIiArIGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJp
bmcoKTsKKyAgICBtX3VuaXF1ZU5hbWUucmVwbGFjZSgiLSIsICIiKTsgLy8gRm9yIHNhZnR5LCBy
ZW1vdmUgJy0nIGZyb20gdGhlIGZpbGVuYW1lIHNuY2Ugc29tZSBzZXJ2ZXJzIG1heSBub3QgbGlr
ZSBpdC4KK30KKworUGFzc1JlZlB0cjxCbG9iSXRlbT4gRmlsZVJhbmdlQmxvYkl0ZW06OmRlZXBD
b3B5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gQmxvYkl0ZW06OmNyZWF0ZUZpbGVSYW5nZUJsb2JJ
dGVtKHBhdGgoKSwgbV9zdGFydCwgbV9sZW5ndGgsIG1fc25hcHNob3RNb2RpZmljYXRpb25UaW1l
KTsKK30KKworYm9vbCBGaWxlUmFuZ2VCbG9iSXRlbTo6ZXF1YWxzKGNvbnN0IEJsb2JJdGVtKiBi
KSBjb25zdAoreworICAgIGlmICghRmlsZUJsb2JJdGVtOjplcXVhbHMoYikpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBjb25zdCBGaWxlUmFuZ2VCbG9iSXRlbSogcmFuZ2VJdGVtID0gYi0+
dG9GaWxlUmFuZ2VCbG9iSXRlbSgpOworICAgIGlmICghcmFuZ2VJdGVtKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgaWYgKG1fc3RhcnQgIT0gcmFuZ2VJdGVtLT5tX3N0YXJ0IHx8IG1fdW5p
cXVlTmFtZSAhPSByYW5nZUl0ZW0tPm1fdW5pcXVlTmFtZSB8fCBtX3NuYXBzaG90TW9kaWZpY2F0
aW9uVGltZSAhPSByYW5nZUl0ZW0tPm1fc25hcHNob3RNb2RpZmljYXRpb25UaW1lKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgRmlsZVJhbmdlQmxv
Ykl0ZW06OmlzVmFsaWQoKSBjb25zdAoreworICAgIC8vIDwgMCBpbmRpY2F0ZXMgaW52YWxpZE1v
ZGlmaWNhdGlvblRpbWUgKGkuZS4gaW5pdGlhbGl6YXRpb24gaGFzIGJlZW4gZmFpbGVkKS4KKyAg
ICBpZiAobV9zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUgPCAwKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgcmV0dXJuIG1fc25hcHNob3RNb2RpZmljYXRpb25UaW1lID09IGdldEZpbGVTbmFw
c2hvdE1vZGlmaWNhdGlvblRpbWUocGF0aCgpKTsKK30KKworI2VuZGlmIC8vIEVOQUJMRShCTE9C
X1NMSUNFKQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0
bWwvQmxvYkl0ZW0uaCBiL1dlYkNvcmUvaHRtbC9CbG9iSXRlbS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmViOGMw
ODgyMzNjMzA1ZjEyM2IwNjIwOGEwYTliNzk3YTRlY2MyODEKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJDb3JlL2h0bWwvQmxvYkl0ZW0uaApAQCAtMCwwICsxLDE4OCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9u
LgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEJsb2JJdGVt
X2gKKyNkZWZpbmUgQmxvYkl0ZW1faAorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNp
bmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBTdHJp
bmcgZW5kaW5nIHR5cGVzLgorZW51bSBFbmRpbmdUeXBlIHsKKyAgICBFbmRpbmdUcmFuc3BhcmVu
dCA9IDAsCisgICAgRW5kaW5nTEYsCisgICAgRW5kaW5nQ1IsCisgICAgRW5kaW5nQ1JMRiwKK307
CisKK2NsYXNzIERhdGFSYW5nZUJsb2JJdGVtOworY2xhc3MgRmlsZUJsb2JJdGVtOworY2xhc3Mg
RmlsZVJhbmdlQmxvYkl0ZW07CitjbGFzcyBTdHJpbmdCbG9iSXRlbTsKKworLy8gQSBiYXNlIGlu
dGVyZmFjZSBmb3IgYWxsICdibG9iJyBpdGVtcyAoZmlsZSwgc3RyaW5nIG9yIGJ5dGVzIGFycmF5
KS4KK2NsYXNzIEJsb2JJdGVtIDogcHVibGljIFJlZkNvdW50ZWQ8QmxvYkl0ZW0+IHsKK3B1Ymxp
YzoKKyAgICB2aXJ0dWFsIH5CbG9iSXRlbSgpIHsgfQorICAgIHZpcnR1YWwgdW5zaWduZWQgbG9u
ZyBsb25nIHNpemUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiBkYXRhKCkg
Y29uc3QgeyByZXR1cm4gMDsgfQorICAgIGNoYXIqIHJlbGVhc2VCdWZmZXIoKSBjb25zdDsKKwor
ICAgIC8vIEZhY3RvcnkgbWV0aG9kcy4KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCbG9iSXRlbT4g
Y3JlYXRlU3RyaW5nQmxvYkl0ZW0oY29uc3QgU3RyaW5nJiwgRW5kaW5nVHlwZSwgVGV4dEVuY29k
aW5nKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCbG9iSXRlbT4gY3JlYXRlU3RyaW5nQmxvYkl0
ZW0oY29uc3QgQ1N0cmluZyYpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJsb2JJdGVtPiBjcmVh
dGVCeXRlc0FycmF5QmxvYkl0ZW0oY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IHNpemUpOworICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEJsb2JJdGVtPiBjcmVhdGVGaWxlQmxvYkl0ZW0oY29uc3QgU3Ry
aW5nJiBwYXRoKTsKKworI2lmIEVOQUJMRShCTE9CX1NMSUNFKQorICAgIC8vIENyZWF0ZXMgRGF0
YVJuYWdlQmxvYkl0ZW0gb3IgRmlsZVJhbmdlQmxvYkl0ZW0uCisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8QmxvYkl0ZW0+IGNyZWF0ZVJhbmdlQmxvYkl0ZW0oUGFzc1JlZlB0cjxCbG9iSXRlbT4gaXRl
bSwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoKTsKKyAgICAvLyBDcmVhdGVzIEZp
bGVSYW5nZUJsb2JJdGVtLgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJsb2JJdGVtPiBjcmVhdGVG
aWxlUmFuZ2VCbG9iSXRlbShjb25zdCBTdHJpbmcmIHBhdGgsIGxvbmcgbG9uZyBzdGFydCwgbG9u
ZyBsb25nIGxlbmd0aCwgZG91YmxlIHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSk7CisjZW5kaWYg
Ly8gRU5BQkxFKEJMT0JfU0xJQ0UpCisKKyAgICAvLyBSZXR1cm5zIGZhbHNlIGlmIHRoZSBkYXRh
IGhhcyBiZWNvbWUgc3RhbGUgb3IgaW52YWxpZC4KKyAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgp
IGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKworICAgIHZpcnR1YWwgY29uc3QgU3RyaW5nQmxvYkl0
ZW0qIHRvU3RyaW5nQmxvYkl0ZW0oKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBj
b25zdCBGaWxlQmxvYkl0ZW0qIHRvRmlsZUJsb2JJdGVtKCkgY29uc3QgeyByZXR1cm4gMDsgfQor
I2lmIEVOQUJMRShCTE9CX1NMSUNFKQorICAgIHZpcnR1YWwgY29uc3QgRGF0YVJhbmdlQmxvYkl0
ZW0qIHRvRGF0YVJhbmdlQmxvYkl0ZW0oKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgdmlydHVh
bCBjb25zdCBGaWxlUmFuZ2VCbG9iSXRlbSogdG9GaWxlUmFuZ2VCbG9iSXRlbSgpIGNvbnN0IHsg
cmV0dXJuIDA7IH0KKyNlbmRpZiAvLyBFTkFCTEUoQkxPQl9TTElDRSkKKworICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxCbG9iSXRlbT4gZGVlcENvcHkoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBi
b29sIGVxdWFscyhjb25zdCBCbG9iSXRlbSopIGNvbnN0ID0gMDsKKworcHJvdGVjdGVkOgorICAg
IEJsb2JJdGVtKCkgeyB9Cit9OworCitjbGFzcyBTdHJpbmdCbG9iSXRlbSA6IHB1YmxpYyBCbG9i
SXRlbSB7CitwdWJsaWM6CisgICAgU3RyaW5nQmxvYkl0ZW0oY29uc3QgU3RyaW5nJiwgRW5kaW5n
VHlwZSwgVGV4dEVuY29kaW5nKTsKKyAgICBTdHJpbmdCbG9iSXRlbShjb25zdCBDU3RyaW5nJik7
CisgICAgY29uc3QgQ1N0cmluZyYgY3N0cigpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsgfQorCisg
ICAgLy8gQmxvYkl0ZW0gbWV0aG9kcy4KKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgbG9uZyBz
aXplKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmxlbmd0aCgpOyB9CisgICAgdmlydHVhbCBjb25z
dCBjaGFyKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmRhdGEoKTsgfQorICAgIHZpcnR1
YWwgY29uc3QgU3RyaW5nQmxvYkl0ZW0qIHRvU3RyaW5nQmxvYkl0ZW0oKSBjb25zdCB7IHJldHVy
biB0aGlzOyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEJsb2JJdGVtPiBkZWVwQ29weSgpIGNv
bnN0OworICAgIHZpcnR1YWwgYm9vbCBlcXVhbHMoY29uc3QgQmxvYkl0ZW0qKSBjb25zdDsKKwor
cHJpdmF0ZToKKyAgICBtdXRhYmxlIENTdHJpbmcgbV9kYXRhOworfTsKKworY2xhc3MgQnl0ZXNB
cnJheUJsb2JJdGVtIDogcHVibGljIEJsb2JJdGVtIHsKK3B1YmxpYzoKKyAgICBCeXRlc0FycmF5
QmxvYkl0ZW0oY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IHNpemUpOworICAgIHZpcnR1YWwgdW5z
aWduZWQgbG9uZyBsb25nIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2J5dGVzQXJyYXkuc2l6ZSgp
OyB9CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9ieXRl
c0FycmF5LmRhdGEoKTsgfQorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxCbG9iSXRlbT4gZGVlcENv
cHkoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZXF1YWxzKGNvbnN0IEJsb2JJdGVtKikgY29u
c3Q7CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPGNoYXI+IG1fYnl0ZXNBcnJheTsKK307CisKK2Ns
YXNzIEZpbGVCbG9iSXRlbSA6IHB1YmxpYyBCbG9iSXRlbSB7CitwdWJsaWM6CisgICAgRmlsZUJs
b2JJdGVtKGNvbnN0IFN0cmluZyYgcGF0aCk7CisgICAgdmlydHVhbCBjb25zdCBTdHJpbmcmIHVu
aXF1ZU5hbWUoKSBjb25zdCB7IHJldHVybiBtX2ZpbGVOYW1lOyB9CisgICAgdmlydHVhbCBjb25z
dCBTdHJpbmcmIHBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0KKworICAgIC8vIEJsb2JJ
dGVtIG1ldGhvZHMuCisgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSgpIGNvbnN0
OworICAgIHZpcnR1YWwgY29uc3QgRmlsZUJsb2JJdGVtKiB0b0ZpbGVCbG9iSXRlbSgpIGNvbnN0
IHsgcmV0dXJuIHRoaXM7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8QmxvYkl0ZW0+IGRlZXBD
b3B5KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGVxdWFscyhjb25zdCBCbG9iSXRlbSopIGNv
bnN0OworCitwcml2YXRlOgorICAgIFN0cmluZyBtX3BhdGg7CisgICAgU3RyaW5nIG1fZmlsZU5h
bWU7Cit9OworCisjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCisKKy8vIEJsb2JJdGVtIGNsYXNzIGZv
ciBzbGljZWQgZGF0YSAoc3RyaW5nIG9yIGJ5dGVzLWFycmF5KS4KK2NsYXNzIERhdGFSYW5nZUJs
b2JJdGVtIDogcHVibGljIEJsb2JJdGVtIHsKK3B1YmxpYzoKKyAgICBEYXRhUmFuZ2VCbG9iSXRl
bShQYXNzUmVmUHRyPEJsb2JJdGVtPiBpdGVtLCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBs
ZW5ndGgpOworCisgICAgLy8gQmxvYkl0ZW0gbWV0aG9kcy4KKyAgICB2aXJ0dWFsIHVuc2lnbmVk
IGxvbmcgbG9uZyBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KKyAgICB2aXJ0dWFs
IGNvbnN0IERhdGFSYW5nZUJsb2JJdGVtKiB0b0RhdGFSYW5nZUJsb2JJdGVtKCkgY29uc3QgeyBy
ZXR1cm4gdGhpczsgfQorICAgIHZpcnR1YWwgY29uc3QgY2hhciogZGF0YSgpIGNvbnN0OworICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxCbG9iSXRlbT4gZGVlcENvcHkoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIGJvb2wgZXF1YWxzKGNvbnN0IEJsb2JJdGVtKikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAg
UmVmUHRyPEJsb2JJdGVtPiBtX2l0ZW07CisgICAgbG9uZyBsb25nIG1fc3RhcnQ7CisgICAgbG9u
ZyBsb25nIG1fbGVuZ3RoOworfTsKKworY2xhc3MgRmlsZVJhbmdlQmxvYkl0ZW0gOiBwdWJsaWMg
RmlsZUJsb2JJdGVtIHsKK3B1YmxpYzoKKyAgICBGaWxlUmFuZ2VCbG9iSXRlbShjb25zdCBTdHJp
bmcmIHBhdGgsIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCwgZG91YmxlIHNuYXBz
aG90TW9kaWZpY2F0aW9uVGltZSk7CisgICAgbG9uZyBsb25nIHN0YXJ0KCkgY29uc3QgeyByZXR1
cm4gbV9zdGFydDsgfQorICAgIGRvdWJsZSBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUoKSBjb25z
dCB7IHJldHVybiBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZTsgfQorCisgICAgLy8gQmxvYkl0
ZW0gbWV0aG9kcy4KKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9sZW5ndGg7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IEZpbGVSYW5nZUJsb2JJdGVt
KiB0b0ZpbGVSYW5nZUJsb2JJdGVtKCkgY29uc3QgeyByZXR1cm4gdGhpczsgfQorICAgIHZpcnR1
YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3Q7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEJsb2JJdGVt
PiBkZWVwQ29weSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBlcXVhbHMoY29uc3QgQmxvYkl0
ZW0qKSBjb25zdDsKKworICAgIC8vIEZpbGVCbG9iSXRlbSBtZXRob2RzLgorICAgIHZpcnR1YWwg
Y29uc3QgU3RyaW5nJiB1bmlxdWVOYW1lKCkgY29uc3QgeyByZXR1cm4gbV91bmlxdWVOYW1lOyB9
CisKK3ByaXZhdGU6CisgICAgbG9uZyBsb25nIG1fc3RhcnQ7CisgICAgbG9uZyBsb25nIG1fbGVu
Z3RoOworICAgIFN0cmluZyBtX3VuaXF1ZU5hbWU7CisKKyAgICBkb3VibGUgbV9zbmFwc2hvdE1v
ZGlmaWNhdGlvblRpbWU7Cit9OworCisjZW5kaWYgLy8gRU5BQkxFKEJMT0JfU0xJQ0UpCisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEJsb2JJdGVtX2gKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvaHRtbC9GaWxlLmNwcCBiL1dlYkNvcmUvaHRtbC9GaWxlLmNwcAppbmRleCA5N2Zk
YzQ1NzhkNzRiMjI1ZTU5NDZmNGQ2YWVmMjU2NTI1NDQzYWU0Li45MmI3ZTU2OTlmNDFjMzA0MjNk
MTM2ZDAzMWU5YzMxNTc2OGE5ZTU2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvRmlsZS5jcHAK
KysrIGIvV2ViQ29yZS9odG1sL0ZpbGUuY3BwCkBAIC0zMSwxNCArMzEsMjIgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1GaWxlOjpGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkKLSAgICA6IEJs
b2IocGF0aCkKLSAgICAsIG1fbmFtZShwYXRoR2V0RmlsZU5hbWUocGF0aCkpCitzdGF0aWMgU3Ry
aW5nIGdldEZpbGVUeXBlRnJvbVBhdGgoY29uc3QgU3RyaW5nJiBwYXRoKQogewotICAgIC8vIFdl
IGRvbid0IHVzZSBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZvclBhdGgoKSBiZWNhdXNl
IGl0IHJldHVybnMgImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIgdXBvbiBmYWlsdXJlLgotICAg
IGludCBpbmRleCA9IG1fbmFtZS5yZXZlcnNlRmluZCgnLicpOworICAgIGludCBpbmRleCA9IHBh
dGgucmV2ZXJzZUZpbmQoJy4nKTsKICAgICBpZiAoaW5kZXggIT0gLTEpCi0gICAgICAgIG1fdHlw
ZSA9IE1JTUVUeXBlUmVnaXN0cnk6OmdldE1JTUVUeXBlRm9yRXh0ZW5zaW9uKG1fbmFtZS5zdWJz
dHJpbmcoaW5kZXggKyAxKSk7CisgICAgICAgIHJldHVybiBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRN
SU1FVHlwZUZvckV4dGVuc2lvbihwYXRoLnN1YnN0cmluZyhpbmRleCArIDEpKTsKKyAgICByZXR1
cm4gU3RyaW5nKCk7Cit9CisKK0ZpbGU6OkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKQorICAgIDog
QmxvYihwYXRoLCBnZXRGaWxlVHlwZUZyb21QYXRoKHBhdGgpKQoreworfQorCitjb25zdCBTdHJp
bmcgRmlsZTo6bmFtZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGl0ZW1zKCkuYXQoMCktPnRvRmls
ZUJsb2JJdGVtKCktPnVuaXF1ZU5hbWUoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0ZpbGUuaCBiL1dlYkNvcmUvaHRtbC9GaWxlLmgKaW5k
ZXggMDY1ZGQ4NmE3YjFlYmY3N2ZiNDA2NDZmOWM2ZTg3MDQ2OWQ3ZWIwOS4uNGNlY2E2NTU5OTYw
Y2JlM2IwMjU2NzIxZWI0NzhlZmQ3OGY5NGUwZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0Zp
bGUuaAorKysgYi9XZWJDb3JlL2h0bWwvRmlsZS5oCkBAIC00MSwxOCArNDEsMTQgQEAgcHVibGlj
OgogCiAgICAgdmlydHVhbCBib29sIGlzRmlsZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAot
ICAgIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQotICAgIGNv
bnN0IFN0cmluZyYgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgIGNvbnN0IFN0
cmluZyBuYW1lKCkgY29uc3Q7CiAKICAgICAvLyBGSVhNRTogb2Jzb2xldGUgYXR0cmlidXRlcy4g
VG8gYmUgcmVtb3ZlZC4KLSAgICBjb25zdCBTdHJpbmcmIGZpbGVOYW1lKCkgY29uc3QgeyByZXR1
cm4gbV9uYW1lOyB9CisgICAgY29uc3QgU3RyaW5nIGZpbGVOYW1lKCkgY29uc3QgeyByZXR1cm4g
bmFtZSgpOyB9CiAgICAgdW5zaWduZWQgbG9uZyBsb25nIGZpbGVTaXplKCkgY29uc3QgeyByZXR1
cm4gc2l6ZSgpOyB9CiAKIHByaXZhdGU6CiAgICAgRmlsZShjb25zdCBTdHJpbmcmIHBhdGgpOwot
Ci0gICAgU3RyaW5nIG1fbmFtZTsKLSAgICBTdHJpbmcgbV90eXBlOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0ZpbGVTdHJlYW0uY3BwIGIv
V2ViQ29yZS9odG1sL0ZpbGVTdHJlYW0uY3BwCmluZGV4IDcwODlmNjE2MTU0ZTRiMTBhMzI3NzNl
MDMzNTZhNzkzNjQ1OGY5N2YuLjI4NzI4MDJmOTlmM2VmMjJlY2Q1MWYzZGRhMmE5OTE2ZTZlMTJk
ODcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9GaWxlU3RyZWFtLmNwcAorKysgYi9XZWJDb3Jl
L2h0bWwvRmlsZVN0cmVhbS5jcHAKQEAgLTkwLDMwICs5MCwyNiBAQCB2b2lkIEZpbGVTdHJlYW06
Om9wZW5Gb3JSZWFkKEJsb2IqIGJsb2IpCiAgICAgfQogCiAjaWYgRU5BQkxFKEJMT0JfU0xJQ0Up
Ci0gICAgLy8gQ2hlY2sgdGhlIG1vZGlmaWNhdGlvbnQgdGltZSBmb3IgdGhlIHBvc3NpYmxlIGZp
bGUgY2hhbmdlLgotICAgIGlmIChibG9iLT5tb2RpZmljYXRpb25UaW1lKCkgIT0gQmxvYjo6ZG9O
b3RDaGVja0ZpbGVDaGFuZ2UgJiYgc3RhdGljX2Nhc3Q8dGltZV90PihibG9iLT5tb2RpZmljYXRp
b25UaW1lKCkpICE9IGN1cnJlbnRNb2RpZmljYXRpb25UaW1lKSB7Ci0gICAgICAgIG1fY2xpZW50
LT5kaWRGYWlsKE5PVF9SRUFEQUJMRV9FUlIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgLy8gSnVtcCB0byB0aGUgYmVnaW5uaW5nIHBvc2l0aW9uIGlmIHRoZSBmaWxlIGhhcyBiZWVu
IHNsaWNlZC4KLSAgICBpZiAoYmxvYi0+c3RhcnQoKSA+IDApIHsKLSAgICAgICAgaWYgKCFzZWVr
RmlsZShtX2hhbmRsZSwgYmxvYi0+c3RhcnQoKSwgU2Vla0Zyb21CZWdpbm5pbmcpKSB7CisgICAg
Y29uc3QgRmlsZVJhbmdlQmxvYkl0ZW0qIHJhbmdlID0gYmxvYi0+aXRlbXMoKS5hdCgwKS0+dG9G
aWxlUmFuZ2VCbG9iSXRlbSgpOworICAgIGlmIChyYW5nZSkgeworICAgICAgICAvLyBDaGVjayB0
aGUgbW9kaWZpY2F0aW9udCB0aW1lIGZvciB0aGUgcG9zc2libGUgZmlsZSBjaGFuZ2UuCisgICAg
ICAgIGlmIChzdGF0aWNfY2FzdDx0aW1lX3Q+KHJhbmdlLT5zbmFwc2hvdE1vZGlmaWNhdGlvblRp
bWUoKSkgIT0gY3VycmVudE1vZGlmaWNhdGlvblRpbWUpIHsKICAgICAgICAgICAgIG1fY2xpZW50
LT5kaWRGYWlsKE5PVF9SRUFEQUJMRV9FUlIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CisKKyAgICAgICAgLy8gSnVtcCB0byB0aGUgYmVnaW5uaW5nIHBvc2l0aW9uIGlmIHRoZSBm
aWxlIGhhcyBiZWVuIHNsaWNlZC4KKyAgICAgICAgaWYgKHJhbmdlLT5zdGFydCgpID4gMCkgewor
ICAgICAgICAgICAgaWYgKHNlZWtGaWxlKG1faGFuZGxlLCByYW5nZS0+c3RhcnQoKSwgU2Vla0Zy
b21CZWdpbm5pbmcpIDwgMCkgeworICAgICAgICAgICAgICAgIG1fY2xpZW50LT5kaWRGYWlsKE5P
VF9SRUFEQUJMRV9FUlIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQogICAgIH0KICNlbmRpZgogCiAgICAgLy8gR2V0IHRoZSBzaXplLgotI2lmIEVO
QUJMRShCTE9CX1NMSUNFKQotICAgIG1fdG90YWxCeXRlc1RvUmVhZCA9IGJsb2ItPmxlbmd0aCgp
OwotICAgIGlmIChtX3RvdGFsQnl0ZXNUb1JlYWQgPT0gQmxvYjo6dG9FbmRPZkZpbGUpCi0gICAg
ICAgIG1fdG90YWxCeXRlc1RvUmVhZCA9IGJsb2ItPnNpemUoKSAtIGJsb2ItPnN0YXJ0KCk7Ci0j
ZWxzZQotICAgIG1fdG90YWwgPSBibG9iLT5zaXplKCk7Ci0jZW5kaWYKLQorICAgIG1fdG90YWxC
eXRlc1RvUmVhZCA9IGJsb2ItPnNpemUoKTsKICAgICBtX2NsaWVudC0+ZGlkR2V0U2l6ZShtX3Rv
dGFsQnl0ZXNUb1JlYWQpOwogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvRm9ybURhdGFM
aXN0LmNwcCBiL1dlYkNvcmUvaHRtbC9Gb3JtRGF0YUxpc3QuY3BwCmluZGV4IDI4MWM5ZmU0MThl
MWM0ODMzYmI4N2Y4MmY3NGYxY2M0ZDcyMmQ1N2MuLjJiNGJhMGM4MjAwNjRlYTVkZjY2OWQ5NmJl
OTVhMDgyZDVmMGQ3N2IgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9Gb3JtRGF0YUxpc3QuY3Bw
CisrKyBiL1dlYkNvcmUvaHRtbC9Gb3JtRGF0YUxpc3QuY3BwCkBAIC0yOCw2NCArMjgsMjIgQEAg
Rm9ybURhdGFMaXN0OjpGb3JtRGF0YUxpc3QoY29uc3QgVGV4dEVuY29kaW5nJiBjKQogewogfQog
Ci12b2lkIEZvcm1EYXRhTGlzdDo6YXBwZW5kU3RyaW5nKGNvbnN0IENTdHJpbmcmIHMpCit2b2lk
IEZvcm1EYXRhTGlzdDo6YXBwZW5kU3RyaW5nKGNvbnN0IFN0cmluZyYgcykKIHsKLSAgICBtX2xp
c3QuYXBwZW5kKHMpOworICAgIG1fbGlzdC5hcHBlbmQoQmxvYkl0ZW06OmNyZWF0ZVN0cmluZ0Js
b2JJdGVtKHMsIEVuZGluZ0NSTEYsIG1fZW5jb2RpbmcpKTsKIH0KIAotLy8gQ2hhbmdlIHBsYWlu
IENSIGFuZCBwbGFpbiBMRiB0byBDUkxGIHBhaXJzLgotc3RhdGljIENTdHJpbmcgZml4TGluZUJy
ZWFrcyhjb25zdCBDU3RyaW5nJiBzKQordm9pZCBGb3JtRGF0YUxpc3Q6OmFwcGVuZFN0cmluZyhj
b25zdCBDU3RyaW5nJiBzKQogewotICAgIC8vIENvbXB1dGUgdGhlIGxlbmd0aC4KLSAgICB1bnNp
Z25lZCBuZXdMZW4gPSAwOwotICAgIGNvbnN0IGNoYXIqIHAgPSBzLmRhdGEoKTsKLSAgICB3aGls
ZSAoY2hhciBjID0gKnArKykgewotICAgICAgICBpZiAoYyA9PSAnXHInKSB7Ci0gICAgICAgICAg
ICAvLyBTYWZlIHRvIGxvb2sgYWhlYWQgYmVjYXVzZSBvZiB0cmFpbGluZyAnXDAnLgotICAgICAg
ICAgICAgaWYgKCpwICE9ICdcbicpIHsKLSAgICAgICAgICAgICAgICAvLyBUdXJuIENSIGludG8g
Q1JMRi4KLSAgICAgICAgICAgICAgICBuZXdMZW4gKz0gMjsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfSBlbHNlIGlmIChjID09ICdcbicpIHsKLSAgICAgICAgICAgIC8vIFR1cm4gTEYgaW50byBD
UkxGLgotICAgICAgICAgICAgbmV3TGVuICs9IDI7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAvLyBMZWF2ZSBvdGhlciBjaGFyYWN0ZXJzIGFsb25lLgotICAgICAgICAgICAgbmV3TGVu
ICs9IDE7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKG5ld0xlbiA9PSBzLmxlbmd0aCgpKSB7
Ci0gICAgICAgIHJldHVybiBzOwotICAgIH0KLSAgICAKLSAgICAvLyBNYWtlIGEgY29weSBvZiB0
aGUgc3RyaW5nLgotICAgIHAgPSBzLmRhdGEoKTsKLSAgICBjaGFyKiBxOwotICAgIENTdHJpbmcg
cmVzdWx0ID0gQ1N0cmluZzo6bmV3VW5pbml0aWFsaXplZChuZXdMZW4sIHEpOwotICAgIHdoaWxl
IChjaGFyIGMgPSAqcCsrKSB7Ci0gICAgICAgIGlmIChjID09ICdccicpIHsKLSAgICAgICAgICAg
IC8vIFNhZmUgdG8gbG9vayBhaGVhZCBiZWNhdXNlIG9mIHRyYWlsaW5nICdcMCcuCi0gICAgICAg
ICAgICBpZiAoKnAgIT0gJ1xuJykgewotICAgICAgICAgICAgICAgIC8vIFR1cm4gQ1IgaW50byBD
UkxGLgotICAgICAgICAgICAgICAgICpxKysgPSAnXHInOwotICAgICAgICAgICAgICAgICpxKysg
PSAnXG4nOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKGMgPT0gJ1xuJykgewot
ICAgICAgICAgICAgLy8gVHVybiBMRiBpbnRvIENSTEYuCi0gICAgICAgICAgICAqcSsrID0gJ1xy
JzsKLSAgICAgICAgICAgICpxKysgPSAnXG4nOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgLy8gTGVhdmUgb3RoZXIgY2hhcmFjdGVycyBhbG9uZS4KLSAgICAgICAgICAgICpxKysgPSBj
OwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7CisgICAgbV9saXN0LmFwcGVu
ZChCbG9iSXRlbTo6Y3JlYXRlU3RyaW5nQmxvYkl0ZW0ocykpOwogfQogCi12b2lkIEZvcm1EYXRh
TGlzdDo6YXBwZW5kU3RyaW5nKGNvbnN0IFN0cmluZyYgcykKK3ZvaWQgRm9ybURhdGFMaXN0Ojph
cHBlbmRCbG9iKGNvbnN0IFN0cmluZyYga2V5LCBQYXNzUmVmUHRyPEJsb2I+IGJsb2IpCiB7Ci0g
ICAgQ1N0cmluZyBjc3RyID0gZml4TGluZUJyZWFrcyhtX2VuY29kaW5nLmVuY29kZShzLmNoYXJh
Y3RlcnMoKSwgcy5sZW5ndGgoKSwgRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpKTsKLSAgICBtX2xp
c3QuYXBwZW5kKGNzdHIpOworICAgIGFwcGVuZFN0cmluZyhrZXkpOworICAgIGNvbnN0IEJsb2I6
Okl0ZW1MaXN0JiBsaXN0ID0gYmxvYi0+aXRlbXMoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGxpc3Quc2l6ZSgpOyArK2kpCisgICAgICAgIG1fbGlzdC5hcHBlbmQobGlzdC5hdChpKSk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvRm9ybURhdGFM
aXN0LmggYi9XZWJDb3JlL2h0bWwvRm9ybURhdGFMaXN0LmgKaW5kZXggOGVjZjY0ZWU5M2FkNTI0
ZjQ3OTIxZjFkODIyZjlhMDhiYTAxM2Q3Yy4uZDg2MTRkNzEwMTAwMzI4ZDMzYjExNGQzY2RkYWU2
MTFiY2FlNzViOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0Zvcm1EYXRhTGlzdC5oCisrKyBi
L1dlYkNvcmUvaHRtbC9Gb3JtRGF0YUxpc3QuaApAQCAtMjEsNyArMjEsOCBAQAogI2lmbmRlZiBG
b3JtRGF0YUxpc3RfaAogI2RlZmluZSBGb3JtRGF0YUxpc3RfaAogCi0jaW5jbHVkZSAiQmxvYi5o
IgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJGaWxlLmgiCiAjaW5jbHVk
ZSAiVGV4dEVuY29kaW5nLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCkBAIC00
NiwyNCArNDcsMjMgQEAgcHVibGljOgogICAgICAgICBhcHBlbmRTdHJpbmcoa2V5KTsKICAgICAg
ICAgYXBwZW5kU3RyaW5nKFN0cmluZzo6bnVtYmVyKHZhbHVlKSk7CiAgICAgfQotICAgIHZvaWQg
YXBwZW5kQmxvYihjb25zdCBTdHJpbmcmIGtleSwgUGFzc1JlZlB0cjxCbG9iPiBibG9iKQotICAg
IHsKLSAgICAgICAgYXBwZW5kU3RyaW5nKGtleSk7Ci0gICAgICAgIG1fbGlzdC5hcHBlbmQoYmxv
Yik7Ci0gICAgfQorICAgIHZvaWQgYXBwZW5kQmxvYihjb25zdCBTdHJpbmcmIGtleSwgUGFzc1Jl
ZlB0cjxCbG9iPiBibG9iKTsKIAorICAgIC8vIEEgc2ltcGxlIHdyYXBwZXIgZm9yIEJsb2JJdGVt
LgogICAgIGNsYXNzIEl0ZW0gewogICAgIHB1YmxpYzoKICAgICAgICAgSXRlbSgpIHsgfQotICAg
ICAgICBJdGVtKGNvbnN0IFdURjo6Q1N0cmluZyYgZGF0YSkgOiBtX2RhdGEoZGF0YSkgeyB9Ci0g
ICAgICAgIEl0ZW0oUGFzc1JlZlB0cjxCbG9iPiBibG9iKSA6IG1fYmxvYihibG9iKSB7IH0KLQot
ICAgICAgICBjb25zdCBXVEY6OkNTdHJpbmcmIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7
IH0KLSAgICAgICAgQmxvYiogYmxvYigpIGNvbnN0IHsgcmV0dXJuIG1fYmxvYi5nZXQoKTsgfQor
ICAgICAgICBJdGVtKFBhc3NSZWZQdHI8QmxvYkl0ZW0+IGl0ZW0pIDogbV9pdGVtKGl0ZW0pCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX2l0ZW0tPnRvU3RyaW5nQmxvYkl0ZW0oKSkKKyAg
ICAgICAgICAgICAgICBtX2NzdHIgPSBtX2l0ZW0tPnRvU3RyaW5nQmxvYkl0ZW0oKS0+Y3N0cigp
OworICAgICAgICB9CisgICAgICAgIGNvbnN0IFBhc3NSZWZQdHI8QmxvYkl0ZW0+IGl0ZW0oKSBj
b25zdCB7IHJldHVybiBtX2l0ZW07IH0KKyAgICAgICAgY29uc3QgV1RGOjpDU3RyaW5nJiBkYXRh
KCkgY29uc3QgeyByZXR1cm4gbV9jc3RyOyB9CiAKICAgICBwcml2YXRlOgotICAgICAgICBXVEY6
OkNTdHJpbmcgbV9kYXRhOwotICAgICAgICBSZWZQdHI8QmxvYj4gbV9ibG9iOworICAgICAgICBS
ZWZQdHI8QmxvYkl0ZW0+IG1faXRlbTsKKyAgICAgICAgV1RGOjpDU3RyaW5nIG1fY3N0cjsKICAg
ICB9OwogCiAgICAgY29uc3QgVmVjdG9yPEl0ZW0+JiBsaXN0KCkgY29uc3QgeyByZXR1cm4gbV9s
aXN0OyB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3Bw
IGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcAppbmRleCA5MTgwMDJhZWZk
ODFhNjg5MWY5ZjE5YmFmNDRkNzU1OTFmZGZhNDg0Li5mOTNiODA2Yjg1MmRhZmJlOTBiNmRlNjFj
YjAzZjBmZmNmMDFkNzJiIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9y
bURhdGEuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAKQEAg
LTIyLDIwICsyMiw0NSBAQAogI2luY2x1ZGUgIkZvcm1EYXRhLmgiCiAKICNpbmNsdWRlICJCbG9i
LmgiCisjaW5jbHVkZSAiQmxvYkl0ZW0uaCIKICNpbmNsdWRlICJDaHJvbWUuaCIKICNpbmNsdWRl
ICJDaHJvbWVDbGllbnQuaCIKICNpbmNsdWRlICJET01Gb3JtRGF0YS5oIgogI2luY2x1ZGUgIkRv
Y3VtZW50LmgiCi0jaW5jbHVkZSAiRmlsZS5oIgogI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKICNp
bmNsdWRlICJGb3JtRGF0YUJ1aWxkZXIuaCIKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5Lmgi
CiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgotI2luY2x1ZGUg
IlVVSUQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisjaWYgRU5BQkxFKEJMT0JfU0xJQ0Up
Citjb25zdCBsb25nIGxvbmcgRm9ybURhdGFFbGVtZW50Ojp0b0VuZE9mRmlsZSA9IC0xOworI2Vu
ZGlmCisKK0Zvcm1EYXRhRWxlbWVudDo6Rm9ybURhdGFFbGVtZW50KFBhc3NSZWZQdHI8QmxvYkl0
ZW0+IGJsb2JJdGVtLCBib29sIHNob3VsZEdlbmVyYXRlRmlsZSkKKyAgICA6IG1faXRlbShibG9i
SXRlbSkKKyAgICAsIG1fdHlwZShtX2l0ZW0tPnRvRmlsZUJsb2JJdGVtKCkgPyBlbmNvZGVkRmls
ZSA6IGRhdGEpCisgICAgLCBtX2RhdGEobV9pdGVtLmdldCgpKQorICAgICwgbV9maWxlbmFtZSht
X2l0ZW0tPnRvRmlsZUJsb2JJdGVtKCkgPyBtX2l0ZW0tPnRvRmlsZUJsb2JJdGVtKCktPnBhdGgo
KSA6IFN0cmluZygpKQorI2lmIEVOQUJMRShCTE9CX1NMSUNFKQorICAgICwgbV9maWxlU3RhcnQo
MCkKKyAgICAsIG1fZmlsZUxlbmd0aCh0b0VuZE9mRmlsZSkKKyAgICAsIG1fZXhwZWN0ZWRGaWxl
TW9kaWZpY2F0aW9uVGltZSgwKQorI2VuZGlmCisgICAgLCBtX3Nob3VsZEdlbmVyYXRlRmlsZShz
aG91bGRHZW5lcmF0ZUZpbGUpCit7CisjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCisgICAgaWYgKG1f
aXRlbS0+dG9GaWxlUmFuZ2VCbG9iSXRlbSgpKSB7CisgICAgICAgIGNvbnN0IEZpbGVSYW5nZUJs
b2JJdGVtKiByYW5nZSA9IG1faXRlbS0+dG9GaWxlUmFuZ2VCbG9iSXRlbSgpOworICAgICAgICBt
X2ZpbGVTdGFydCA9IHJhbmdlLT5zdGFydCgpOworICAgICAgICBtX2ZpbGVMZW5ndGggPSByYW5n
ZS0+c2l6ZSgpOworICAgICAgICBtX2V4cGVjdGVkRmlsZU1vZGlmaWNhdGlvblRpbWUgPSByYW5n
ZS0+c25hcHNob3RNb2RpZmljYXRpb25UaW1lKCk7CisgICAgfQorI2VuZGlmCit9CisKIGlubGlu
ZSBGb3JtRGF0YTo6Rm9ybURhdGEoKQogICAgIDogbV9pZGVudGlmaWVyKDApCiAgICAgLCBtX2hh
c0dlbmVyYXRlZEZpbGVzKGZhbHNlKQpAQCAtODUsNyArMTEwLDcgQEAgUGFzc1JlZlB0cjxGb3Jt
RGF0YT4gRm9ybURhdGE6OmNyZWF0ZShjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSkKIFBh
c3NSZWZQdHI8Rm9ybURhdGE+IEZvcm1EYXRhOjpjcmVhdGUoY29uc3QgQ1N0cmluZyYgc3RyaW5n
KQogewogICAgIFJlZlB0cjxGb3JtRGF0YT4gcmVzdWx0ID0gY3JlYXRlKCk7Ci0gICAgcmVzdWx0
LT5hcHBlbmREYXRhKHN0cmluZy5kYXRhKCksIHN0cmluZy5sZW5ndGgoKSk7CisgICAgcmVzdWx0
LT5hcHBlbmRTdHJpbmcoc3RyaW5nKTsKICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0K
IApAQCAtMTI1LDQ1ICsxNTAsNDIgQEAgUGFzc1JlZlB0cjxGb3JtRGF0YT4gRm9ybURhdGE6OmRl
ZXBDb3B5KCkgY29uc3QKICAgICBmb3JtRGF0YS0+bV9lbGVtZW50cy5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KG4pOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbjsgKytpKSB7CiAgICAgICAg
IGNvbnN0IEZvcm1EYXRhRWxlbWVudCYgZSA9IG1fZWxlbWVudHNbaV07Ci0gICAgICAgIHN3aXRj
aCAoZS5tX3R5cGUpIHsKLSAgICAgICAgY2FzZSBGb3JtRGF0YUVsZW1lbnQ6OmRhdGE6Ci0gICAg
ICAgICAgICBmb3JtRGF0YS0+bV9lbGVtZW50cy5hcHBlbmQoRm9ybURhdGFFbGVtZW50KGUubV9k
YXRhKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBGb3JtRGF0YUVsZW1lbnQ6
OmVuY29kZWRGaWxlOgotI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgICAgICAgICAgZm9ybURh
dGEtPm1fZWxlbWVudHMuYXBwZW5kKEZvcm1EYXRhRWxlbWVudChlLm1fZmlsZW5hbWUsIGUubV9m
aWxlU3RhcnQsIGUubV9maWxlTGVuZ3RoLCBlLm1fZXhwZWN0ZWRGaWxlTW9kaWZpY2F0aW9uVGlt
ZSwgZS5tX3Nob3VsZEdlbmVyYXRlRmlsZSkpOwotI2Vsc2UKLSAgICAgICAgICAgIGZvcm1EYXRh
LT5tX2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVsZW1lbnQoZS5tX2ZpbGVuYW1lLCBlLm1fc2hv
dWxkR2VuZXJhdGVGaWxlKSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
CisgICAgICAgIGZvcm1EYXRhLT5tX2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVsZW1lbnQoZS5p
dGVtKCktPmRlZXBDb3B5KCksIGUubV9zaG91bGRHZW5lcmF0ZUZpbGUpKTsKICAgICB9CiAgICAg
cmV0dXJuIGZvcm1EYXRhLnJlbGVhc2UoKTsKIH0KIAogdm9pZCBGb3JtRGF0YTo6YXBwZW5kRGF0
YShjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSkKIHsKLSAgICBpZiAobV9lbGVtZW50cy5p
c0VtcHR5KCkgfHwgbV9lbGVtZW50cy5sYXN0KCkubV90eXBlICE9IEZvcm1EYXRhRWxlbWVudDo6
ZGF0YSkKLSAgICAgICAgbV9lbGVtZW50cy5hcHBlbmQoRm9ybURhdGFFbGVtZW50KCkpOwotICAg
IEZvcm1EYXRhRWxlbWVudCYgZSA9IG1fZWxlbWVudHMubGFzdCgpOwotICAgIHNpemVfdCBvbGRT
aXplID0gZS5tX2RhdGEuc2l6ZSgpOwotICAgIGUubV9kYXRhLmdyb3cob2xkU2l6ZSArIHNpemUp
OwotICAgIG1lbWNweShlLm1fZGF0YS5kYXRhKCkgKyBvbGRTaXplLCBkYXRhLCBzaXplKTsKKyAg
ICBtX2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVsZW1lbnQoQmxvYkl0ZW06OmNyZWF0ZUJ5dGVz
QXJyYXlCbG9iSXRlbShzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZGF0YSksIHNpemUpKSk7Cit9
CisKK3ZvaWQgRm9ybURhdGE6OmFwcGVuZFN0cmluZyhjb25zdCBDU3RyaW5nJiBzdHJpbmcpCit7
CisgICAgbV9lbGVtZW50cy5hcHBlbmQoRm9ybURhdGFFbGVtZW50KEJsb2JJdGVtOjpjcmVhdGVT
dHJpbmdCbG9iSXRlbShzdHJpbmcpKSk7CiB9CiAKIHZvaWQgRm9ybURhdGE6OmFwcGVuZEZpbGUo
Y29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgYm9vbCBzaG91bGRHZW5lcmF0ZUZpbGUpCiB7Ci0jaWYg
RU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgbV9lbGVtZW50cy5hcHBlbmQoRm9ybURhdGFFbGVtZW50
KGZpbGVuYW1lLCAwLCBCbG9iOjp0b0VuZE9mRmlsZSwgQmxvYjo6ZG9Ob3RDaGVja0ZpbGVDaGFu
Z2UsIHNob3VsZEdlbmVyYXRlRmlsZSkpOwotI2Vsc2UKLSAgICBtX2VsZW1lbnRzLmFwcGVuZChG
b3JtRGF0YUVsZW1lbnQoZmlsZW5hbWUsIHNob3VsZEdlbmVyYXRlRmlsZSkpOwotI2VuZGlmCisg
ICAgbV9lbGVtZW50cy5hcHBlbmQoRm9ybURhdGFFbGVtZW50KEJsb2JJdGVtOjpjcmVhdGVGaWxl
QmxvYkl0ZW0oZmlsZW5hbWUpLCBzaG91bGRHZW5lcmF0ZUZpbGUpKTsKK30KKwordm9pZCBGb3Jt
RGF0YTo6YXBwZW5kQmxvYihCbG9iKiBiKQoreworICAgIFJlZlB0cjxCbG9iPiBibG9iID0gYjsK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2ItPml0ZW1zKCkuc2l6ZSgpOyArK2kpCisg
ICAgICAgIG1fZWxlbWVudHMuYXBwZW5kKGJsb2ItPml0ZW1zKCkuYXQoaSkpOwogfQogCiAjaWYg
RU5BQkxFKEJMT0JfU0xJQ0UpCiB2b2lkIEZvcm1EYXRhOjphcHBlbmRGaWxlUmFuZ2UoY29uc3Qg
U3RyaW5nJiBmaWxlbmFtZSwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoLCBkb3Vi
bGUgZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lLCBib29sIHNob3VsZEdlbmVyYXRlRmlsZSkKIHsK
LSAgICBtX2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVsZW1lbnQoZmlsZW5hbWUsIHN0YXJ0LCBs
ZW5ndGgsIGV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZSwgc2hvdWxkR2VuZXJhdGVGaWxlKSk7Cisg
ICAgaWYgKGxlbmd0aCA9PSBGb3JtRGF0YUVsZW1lbnQ6OnRvRW5kT2ZGaWxlKSB7CisgICAgICAg
IEFTU0VSVCghc3RhcnQpOworICAgICAgICBBU1NFUlQoIWV4cGVjdGVkTW9kaWZpY2F0aW9uVGlt
ZSk7CisgICAgICAgIG1fZWxlbWVudHMuYXBwZW5kKEZvcm1EYXRhRWxlbWVudChCbG9iSXRlbTo6
Y3JlYXRlRmlsZUJsb2JJdGVtKGZpbGVuYW1lKSwgc2hvdWxkR2VuZXJhdGVGaWxlKSk7CisgICAg
fSBlbHNlCisgICAgICAgIG1fZWxlbWVudHMuYXBwZW5kKEZvcm1EYXRhRWxlbWVudChCbG9iSXRl
bTo6Y3JlYXRlRmlsZVJhbmdlQmxvYkl0ZW0oZmlsZW5hbWUsIHN0YXJ0LCBsZW5ndGgsIGV4cGVj
dGVkTW9kaWZpY2F0aW9uVGltZSksIHNob3VsZEdlbmVyYXRlRmlsZSkpOwogfQogI2VuZGlmCiAK
QEAgLTE4NiwyMyArMjA4LDEzIEBAIHZvaWQgRm9ybURhdGE6OmFwcGVuZERPTUZvcm1EYXRhKGNv
bnN0IERPTUZvcm1EYXRhJiBkb21Gb3JtRGF0YSwgYm9vbCBpc011bHRpUGFyCiAgICAgICAgICAg
ICBWZWN0b3I8Y2hhcj4gaGVhZGVyOwogICAgICAgICAgICAgZm9ybURhdGFCdWlsZGVyLmJlZ2lu
TXVsdGlQYXJ0SGVhZGVyKGhlYWRlciwgbV9ib3VuZGFyeS5kYXRhKCksIGtleS5kYXRhKCkpOwog
CisgICAgICAgICAgICBjb25zdCBSZWZQdHI8QmxvYkl0ZW0+IGl0ZW0gPSB2YWx1ZS5pdGVtKCk7
CiAgICAgICAgICAgICBib29sIHNob3VsZEdlbmVyYXRlRmlsZSA9IGZhbHNlOwogICAgICAgICAg
ICAgLy8gSWYgdGhlIGN1cnJlbnQgdHlwZSBpcyBGSUxFLCB0aGVuIHdlIGFsc28gbmVlZCB0byBp
bmNsdWRlIHRoZSBmaWxlbmFtZQotICAgICAgICAgICAgaWYgKHZhbHVlLmJsb2IoKSkgewotICAg
ICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgcGF0aCA9IHZhbHVlLmJsb2IoKS0+cGF0aCgpOwot
I2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgICAgICAgICAgICAgIFN0cmluZyBmaWxlTmFtZTsK
LSAgICAgICAgICAgICAgICBpZiAodmFsdWUuYmxvYigpLT5pc0ZpbGUoKSkKLSAgICAgICAgICAg
ICAgICAgICAgZmlsZU5hbWUgPSBzdGF0aWNfY2FzdDxGaWxlKj4odmFsdWUuYmxvYigpKS0+Zmls
ZU5hbWUoKTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8g
SWYgYSBibG9iIGlzIHNsaWNlZCBmcm9tIGEgZmlsZSwgaXQgZG9lcyBub3QgaGF2ZSB0aGUgZmls
ZW5hbWUuIEluIHRoaXMgY2FzZSwgbGV0J3MgcHJvZHVjZSBhIHVuaXF1ZSBmaWxlbmFtZS4KLSAg
ICAgICAgICAgICAgICAgICAgZmlsZU5hbWUgPSAiQmxvYiIgKyBjcmVhdGVDYW5vbmljYWxVVUlE
U3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lLnJlcGxhY2UoIi0iLCAiIik7
IC8vIEZvciBzYWZ0eSwgcmVtb3ZlICctJyBmcm9tIHRoZSBmaWxlbmFtZSBzbmNlIHNvbWUgc2Vy
dmVycyBtYXkgbm90IGxpa2UgaXQuCi0gICAgICAgICAgICAgICAgfQotI2Vsc2UKLSAgICAgICAg
ICAgICAgICBBU1NFUlQodmFsdWUuYmxvYigpLT5pc0ZpbGUoKSk7Ci0gICAgICAgICAgICAgICAg
U3RyaW5nIGZpbGVOYW1lID0gc3RhdGljX2Nhc3Q8RmlsZSo+KHZhbHVlLmJsb2IoKSktPmZpbGVO
YW1lKCk7Ci0jZW5kaWYKKyAgICAgICAgICAgIGlmIChpdGVtLT50b0ZpbGVCbG9iSXRlbSgpKSB7
CisgICAgICAgICAgICAgICAgY29uc3QgRmlsZUJsb2JJdGVtKiBmaWxlID0gaXRlbS0+dG9GaWxl
QmxvYkl0ZW0oKTsKKyAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHBhdGggPSBmaWxlLT5w
YXRoKCk7CisgICAgICAgICAgICAgICAgU3RyaW5nIGZpbGVOYW1lID0gZmlsZS0+dW5pcXVlTmFt
ZSgpOwogCiAgICAgICAgICAgICAgICAgLy8gTGV0IHRoZSBhcHBsaWNhdGlvbiBzcGVjaWZ5IGEg
ZmlsZW5hbWUgaWYgaXQncyBnb2luZyB0byBnZW5lcmF0ZSBhIHJlcGxhY2VtZW50IGZpbGUgZm9y
IHRoZSB1cGxvYWQuCiAgICAgICAgICAgICAgICAgaWYgKCFwYXRoLmlzRW1wdHkoKSkgewpAQCAt
MjE3LDkgKzIyOSw5IEBAIHZvaWQgRm9ybURhdGE6OmFwcGVuZERPTUZvcm1EYXRhKGNvbnN0IERP
TUZvcm1EYXRhJiBkb21Gb3JtRGF0YSwgYm9vbCBpc011bHRpUGFyCiAgICAgICAgICAgICAgICAg
Ly8gV2UgaGF2ZSB0byBpbmNsdWRlIHRoZSBmaWxlbmFtZT0iLi4iIHBhcnQgaW4gdGhlIGhlYWRl
ciwgZXZlbiBpZiB0aGUgZmlsZW5hbWUgaXMgZW1wdHkKICAgICAgICAgICAgICAgICBmb3JtRGF0
YUJ1aWxkZXIuYWRkRmlsZW5hbWVUb011bHRpUGFydEhlYWRlcihoZWFkZXIsIGVuY29kaW5nLCBm
aWxlTmFtZSk7CiAKLSAgICAgICAgICAgICAgICAvLyBJZiBhIGJsb2IgaXMgc2xpY2VkIGZyb20g
YSBmaWxlLCBkbyBub3QgYWRkIHRoZSBjb250ZW50IHR5cGUuIAorICAgICAgICAgICAgICAgIC8v
IElmIHRoZSBpdGVtIGlzIHNsaWNlZCBmcm9tIGEgZmlsZSwgZG8gbm90IGFkZCB0aGUgY29udGVu
dCB0eXBlLgogI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgICAgICAgICAgICAgIGlmICghZmls
ZU5hbWUuaXNFbXB0eSgpICYmIHZhbHVlLmJsb2IoKS0+aXNGaWxlKCkpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoIWZpbGVOYW1lLmlzRW1wdHkoKSAmJiAhaXRlbS0+dG9GaWxlUmFuZ2VCbG9iSXRl
bSgpKSB7CiAjZWxzZQogICAgICAgICAgICAgICAgIGlmICghZmlsZU5hbWUuaXNFbXB0eSgpKSB7
CiAjZW5kaWYKQEAgLTIzNywxNSArMjQ5LDcgQEAgdm9pZCBGb3JtRGF0YTo6YXBwZW5kRE9NRm9y
bURhdGEoY29uc3QgRE9NRm9ybURhdGEmIGRvbUZvcm1EYXRhLCBib29sIGlzTXVsdGlQYXIKIAog
ICAgICAgICAgICAgLy8gQXBwZW5kIGJvZHkKICAgICAgICAgICAgIGFwcGVuZERhdGEoaGVhZGVy
LmRhdGEoKSwgaGVhZGVyLnNpemUoKSk7Ci0gICAgICAgICAgICBpZiAoc2l6ZV90IGRhdGFTaXpl
ID0gdmFsdWUuZGF0YSgpLmxlbmd0aCgpKQotICAgICAgICAgICAgICAgIGFwcGVuZERhdGEodmFs
dWUuZGF0YSgpLmRhdGEoKSwgZGF0YVNpemUpOwotICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUu
YmxvYigpICYmICF2YWx1ZS5ibG9iKCktPnBhdGgoKS5pc0VtcHR5KCkpCi0jaWYgRU5BQkxFKEJM
T0JfU0xJQ0UpCi0gICAgICAgICAgICAgICAgYXBwZW5kRmlsZVJhbmdlKHZhbHVlLmJsb2IoKS0+
cGF0aCgpLCB2YWx1ZS5ibG9iKCktPnN0YXJ0KCksIHZhbHVlLmJsb2IoKS0+bGVuZ3RoKCksIHZh
bHVlLmJsb2IoKS0+bW9kaWZpY2F0aW9uVGltZSgpLCBzaG91bGRHZW5lcmF0ZUZpbGUpOwotI2Vs
c2UKLSAgICAgICAgICAgICAgICBhcHBlbmRGaWxlKHZhbHVlLmJsb2IoKS0+cGF0aCgpLCBzaG91
bGRHZW5lcmF0ZUZpbGUpOwotI2VuZGlmCi0KKyAgICAgICAgICAgIG1fZWxlbWVudHMuYXBwZW5k
KEZvcm1EYXRhRWxlbWVudChpdGVtLCBzaG91bGRHZW5lcmF0ZUZpbGUpKTsKICAgICAgICAgICAg
IGFwcGVuZERhdGEoIlxyXG4iLCAyKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8v
IE9taXQgdGhlIG5hbWUgImlzaW5kZXgiIGlmIGl0J3MgdGhlIGZpcnN0IGZvcm0gZGF0YSBlbGVt
ZW50LgpAQCAtMjU1LDcgKzI1OSw3IEBAIHZvaWQgRm9ybURhdGE6OmFwcGVuZERPTUZvcm1EYXRh
KGNvbnN0IERPTUZvcm1EYXRhJiBkb21Gb3JtRGF0YSwgYm9vbCBpc011bHRpUGFyCiAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgZm9ybURhdGFCdWlsZGVyLmFkZEtleVZhbHVlUGFp
ckFzRm9ybURhdGEoZW5jb2RlZERhdGEsIGtleS5kYXRhKCksIHZhbHVlLmRhdGEoKSk7CiAgICAg
ICAgIH0KLSAgICB9IAorICAgIH0KIAogICAgIGlmIChpc011bHRpUGFydEZvcm0pCiAgICAgICAg
IGZvcm1EYXRhQnVpbGRlci5hZGRCb3VuZGFyeVRvTXVsdGlQYXJ0SGVhZGVyKGVuY29kZWREYXRh
LCBtX2JvdW5kYXJ5LmRhdGEoKSwgdHJ1ZSk7CkBAIC0yNzAsMTIgKzI3NCw4IEBAIHZvaWQgRm9y
bURhdGE6OmZsYXR0ZW4oVmVjdG9yPGNoYXI+JiBkYXRhKSBjb25zdAogICAgIHNpemVfdCBuID0g
bV9lbGVtZW50cy5zaXplKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuOyArK2kpIHsK
ICAgICAgICAgY29uc3QgRm9ybURhdGFFbGVtZW50JiBlID0gbV9lbGVtZW50c1tpXTsKLSAgICAg
ICAgaWYgKGUubV90eXBlID09IEZvcm1EYXRhRWxlbWVudDo6ZGF0YSkgewotICAgICAgICAgICAg
c2l6ZV90IG9sZFNpemUgPSBkYXRhLnNpemUoKTsKLSAgICAgICAgICAgIHNpemVfdCBkZWx0YSA9
IGUubV9kYXRhLnNpemUoKTsKLSAgICAgICAgICAgIGRhdGEuZ3JvdyhvbGRTaXplICsgZGVsdGEp
OwotICAgICAgICAgICAgbWVtY3B5KGRhdGEuZGF0YSgpICsgb2xkU2l6ZSwgZS5tX2RhdGEuZGF0
YSgpLCBkZWx0YSk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKGUubV90eXBlID09IEZvcm1EYXRh
RWxlbWVudDo6ZGF0YSkKKyAgICAgICAgICAgIGRhdGEuYXBwZW5kKGUuaXRlbSgpLT5kYXRhKCks
IHN0YXRpY19jYXN0PHNpemVfdD4oZS5pdGVtKCktPnNpemUoKSkpOwogICAgIH0KIH0KIApAQCAt
Mjg5LDEwICsyODksMTAgQEAgU3RyaW5nIEZvcm1EYXRhOjpmbGF0dGVuVG9TdHJpbmcoKSBjb25z
dAogdm9pZCBGb3JtRGF0YTo6Z2VuZXJhdGVGaWxlcyhEb2N1bWVudCogZG9jdW1lbnQpCiB7CiAg
ICAgQVNTRVJUKCFtX2hhc0dlbmVyYXRlZEZpbGVzKTsKLSAgICAKKwogICAgIGlmIChtX2hhc0dl
bmVyYXRlZEZpbGVzKQogICAgICAgICByZXR1cm47Ci0gICAgCisKICAgICBQYWdlKiBwYWdlID0g
ZG9jdW1lbnQtPnBhZ2UoKTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybjsKQEAgLTMw
Miw3ICszMDIsNyBAQCB2b2lkIEZvcm1EYXRhOjpnZW5lcmF0ZUZpbGVzKERvY3VtZW50KiBkb2N1
bWVudCkKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG47ICsraSkgewogICAgICAgICBGb3Jt
RGF0YUVsZW1lbnQmIGUgPSBtX2VsZW1lbnRzW2ldOwogICAgICAgICBpZiAoZS5tX3R5cGUgPT0g
Rm9ybURhdGFFbGVtZW50OjplbmNvZGVkRmlsZSAmJiBlLm1fc2hvdWxkR2VuZXJhdGVGaWxlKSB7
Ci0gICAgICAgICAgICBlLm1fZ2VuZXJhdGVkRmlsZW5hbWUgPSBjbGllbnQtPmdlbmVyYXRlUmVw
bGFjZW1lbnRGaWxlKGUubV9maWxlbmFtZSk7CisgICAgICAgICAgICBlLm1fZ2VuZXJhdGVkRmls
ZW5hbWUgPSBjbGllbnQtPmdlbmVyYXRlUmVwbGFjZW1lbnRGaWxlKGUuaXRlbSgpLT50b0ZpbGVC
bG9iSXRlbSgpLT5wYXRoKCkpOwogICAgICAgICAgICAgbV9oYXNHZW5lcmF0ZWRGaWxlcyA9IHRy
dWU7CiAgICAgICAgIH0KICAgICB9CkBAIC0zMTIsNyArMzEyLDcgQEAgdm9pZCBGb3JtRGF0YTo6
cmVtb3ZlR2VuZXJhdGVkRmlsZXNJZk5lZWRlZCgpCiB7CiAgICAgaWYgKCFtX2hhc0dlbmVyYXRl
ZEZpbGVzKQogICAgICAgICByZXR1cm47Ci0gICAgICAgIAorCiAgICAgc2l6ZV90IG4gPSBtX2Vs
ZW1lbnRzLnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG47ICsraSkgewogICAg
ICAgICBGb3JtRGF0YUVsZW1lbnQmIGUgPSBtX2VsZW1lbnRzW2ldOwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmggYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvRm9ybURhdGEuaAppbmRleCBhNDM5MDIzNDc5NmEwZTJmMTRmNWQzNDlmNWRkMGVmZmMwYTRi
N2NkLi45OWVlN2M1MTIxZDgwYWM3OWVlNTkyMWVkY2JiNTI3YWU3M2FiMjQyIDEwMDY0NAotLS0g
YS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuaAorKysgYi9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvRm9ybURhdGEuaApAQCAtMjAsNiArMjAsNyBAQAogI2lmbmRlZiBGb3JtRGF0
YV9oCiAjZGVmaW5lIEZvcm1EYXRhX2gKIAorI2luY2x1ZGUgIkJsb2IuaCIKICNpbmNsdWRlICJQ
bGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgpAQCAtMjksNTIgKzMwLDQ5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNs
YXNzIERPTUZvcm1EYXRhOwogY2xhc3MgRG9jdW1lbnQ7CiAKKy8vIEEgd3JhcHBlciBjbGFzcyBv
ZiBCbG9iSXRlbSBmb3IgRm9ybURhdGEuCiBjbGFzcyBGb3JtRGF0YUVsZW1lbnQgewogcHVibGlj
OgotICAgIEZvcm1EYXRhRWxlbWVudCgpIDogbV90eXBlKGRhdGEpIHsgfQotICAgIEZvcm1EYXRh
RWxlbWVudChjb25zdCBWZWN0b3I8Y2hhcj4mIGFycmF5KSA6IG1fdHlwZShkYXRhKSwgbV9kYXRh
KGFycmF5KSB7IH0KLSNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAgICBGb3JtRGF0YUVsZW1lbnQo
Y29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgbG9uZyBsb25nIGZpbGVTdGFydCwgbG9uZyBsb25nIGZp
bGVMZW5ndGgsIGRvdWJsZSBleHBlY3RlZEZpbGVNb2RpZmljYXRpb25UaW1lLCBib29sIHNob3Vs
ZEdlbmVyYXRlRmlsZSkgOiBtX3R5cGUoZW5jb2RlZEZpbGUpLCBtX2ZpbGVuYW1lKGZpbGVuYW1l
KSwgbV9maWxlU3RhcnQoZmlsZVN0YXJ0KSwgbV9maWxlTGVuZ3RoKGZpbGVMZW5ndGgpLCBtX2V4
cGVjdGVkRmlsZU1vZGlmaWNhdGlvblRpbWUoZXhwZWN0ZWRGaWxlTW9kaWZpY2F0aW9uVGltZSks
IG1fc2hvdWxkR2VuZXJhdGVGaWxlKHNob3VsZEdlbmVyYXRlRmlsZSkgeyB9Ci0jZWxzZQotICAg
IEZvcm1EYXRhRWxlbWVudChjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBib29sIHNob3VsZEdlbmVy
YXRlRmlsZSkgOiBtX3R5cGUoZW5jb2RlZEZpbGUpLCBtX2ZpbGVuYW1lKGZpbGVuYW1lKSwgbV9z
aG91bGRHZW5lcmF0ZUZpbGUoc2hvdWxkR2VuZXJhdGVGaWxlKSB7IH0KLSNlbmRpZgorICAgIEZv
cm1EYXRhRWxlbWVudCgpIDogbV9kYXRhKDApIHsgfQorICAgIEZvcm1EYXRhRWxlbWVudChQYXNz
UmVmUHRyPEJsb2JJdGVtPiBibG9iSXRlbSwgYm9vbCBzaG91bGRHZW5lcmF0ZUZpbGUgPSBmYWxz
ZSk7CisKKyAgICBjb25zdCBCbG9iSXRlbSogaXRlbSgpIGNvbnN0IHsgcmV0dXJuIG1faXRlbS5n
ZXQoKTsgfQorCisgICAgUmVmUHRyPEJsb2JJdGVtPiBtX2l0ZW07CiAKKyAgICAvLyBGSVhNRTog
Y2xlYW4gbWUgdXAuICBDb2RlIGJlbG93IGFyZSBtb3N0bHkga2VwdCBmb3IgY29tcGF0aWJpbGl0
eS4KICAgICBlbnVtIHsgZGF0YSwgZW5jb2RlZEZpbGUgfSBtX3R5cGU7Ci0gICAgVmVjdG9yPGNo
YXI+IG1fZGF0YTsKKyAgICBjb25zdCBzdHJ1Y3QgQmxvYkl0ZW1XcmFwcGVyIHsKKyAgICAgICAg
QmxvYkl0ZW1XcmFwcGVyKGNvbnN0IEJsb2JJdGVtV3JhcHBlciYgdikgOiBtX2l0ZW0odi5tX2l0
ZW0pIHsgfQorICAgICAgICBCbG9iSXRlbVdyYXBwZXIoY29uc3QgQmxvYkl0ZW0qIGl0ZW0pIDog
bV9pdGVtKGl0ZW0pIHsgfQorICAgICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHN0
YXRpY19jYXN0PHNpemVfdD4obV9pdGVtLT5zaXplKCkpOyB9CisgICAgICAgIGNvbnN0IGNoYXIq
IGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2l0ZW0tPmRhdGEoKTsgfQorICAgICAgICBjaGFyKiBy
ZWxlYXNlQnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9pdGVtLT5yZWxlYXNlQnVmZmVyKCk7IH0K
KyAgICAgICAgY29uc3QgQmxvYkl0ZW0qIG1faXRlbTsKKyAgICB9IG1fZGF0YTsKICAgICBTdHJp
bmcgbV9maWxlbmFtZTsKICNpZiBFTkFCTEUoQkxPQl9TTElDRSkKICAgICBsb25nIGxvbmcgbV9m
aWxlU3RhcnQ7CiAgICAgbG9uZyBsb25nIG1fZmlsZUxlbmd0aDsKICAgICBkb3VibGUgbV9leHBl
Y3RlZEZpbGVNb2RpZmljYXRpb25UaW1lOworCisgICAgc3RhdGljIGNvbnN0IGxvbmcgbG9uZyB0
b0VuZE9mRmlsZTsKICNlbmRpZgorCiAgICAgU3RyaW5nIG1fZ2VuZXJhdGVkRmlsZW5hbWU7CiAg
ICAgYm9vbCBtX3Nob3VsZEdlbmVyYXRlRmlsZTsKIH07CiAKIGlubGluZSBib29sIG9wZXJhdG9y
PT0oY29uc3QgRm9ybURhdGFFbGVtZW50JiBhLCBjb25zdCBGb3JtRGF0YUVsZW1lbnQmIGIpCiB7
Ci0gICAgaWYgKCZhID09ICZiKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICBpZiAo
YS5tX3R5cGUgIT0gYi5tX3R5cGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoYS5t
X2RhdGEgIT0gYi5tX2RhdGEpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSNpZiBFTkFCTEUoQkxP
Ql9TTElDRSkKLSAgICBpZiAoYS5tX2ZpbGVuYW1lICE9IGIubV9maWxlbmFtZSB8fCBhLm1fZmls
ZVN0YXJ0ICE9IGIubV9maWxlU3RhcnQgfHwgYS5tX2ZpbGVMZW5ndGggIT0gYi5tX2ZpbGVMZW5n
dGggfHwgYS5tX2V4cGVjdGVkRmlsZU1vZGlmaWNhdGlvblRpbWUgIT0gYi5tX2V4cGVjdGVkRmls
ZU1vZGlmaWNhdGlvblRpbWUpCi0jZWxzZQotICAgIGlmIChhLm1fZmlsZW5hbWUgIT0gYi5tX2Zp
bGVuYW1lKQotI2VuZGlmCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVl
OworICAgIHJldHVybiBhLml0ZW0oKS0+ZXF1YWxzKGIuaXRlbSgpKTsKIH0KLSAKKwogaW5saW5l
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBGb3JtRGF0YUVsZW1lbnQmIGEsIGNvbnN0IEZvcm1EYXRh
RWxlbWVudCYgYikKIHsKICAgICByZXR1cm4gIShhID09IGIpOwogfQotIAorCiBjbGFzcyBGb3Jt
RGF0YSA6IHB1YmxpYyBSZWZDb3VudGVkPEZvcm1EYXRhPiB7CiBwdWJsaWM6CiAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8Rm9ybURhdGE+IGNyZWF0ZSgpOwpAQCAtODYsOCArODQsMTAgQEAgcHVibGlj
OgogICAgIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGNvcHkoKSBjb25zdDsKICAgICBQYXNzUmVmUHRy
PEZvcm1EYXRhPiBkZWVwQ29weSgpIGNvbnN0OwogICAgIH5Gb3JtRGF0YSgpOwotICAgIAorCiAg
ICAgdm9pZCBhcHBlbmREYXRhKGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCk7CisgICAgdm9pZCBh
cHBlbmRCbG9iKEJsb2IqKTsKKyAgICB2b2lkIGFwcGVuZFN0cmluZyhjb25zdCBDU3RyaW5nJik7
CiAgICAgdm9pZCBhcHBlbmRGaWxlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGJvb2wgc2hvdWxk
R2VuZXJhdGVGaWxlID0gZmFsc2UpOwogI2lmIEVOQUJMRShCTE9CX1NMSUNFKQogICAgIHZvaWQg
YXBwZW5kRmlsZVJhbmdlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGxvbmcgbG9uZyBzdGFydCwg
bG9uZyBsb25nIGxlbmd0aCwgZG91YmxlIGV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZSwgYm9vbCBz
aG91bGRHZW5lcmF0ZUZpbGUgPSBmYWxzZSk7CkBAIC0xMTgsNiArMTE4LDcgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIGFwcGVuZERPTUZvcm1EYXRhKGNvbnN0IERPTUZvcm1EYXRhJiBkb21Gb3JtRGF0
YSwgYm9vbCBpc011bHRpUGFydEZvcm0sIERvY3VtZW50KiBkb2N1bWVudCk7CiAKICAgICBWZWN0
b3I8Rm9ybURhdGFFbGVtZW50PiBtX2VsZW1lbnRzOworCiAgICAgaW50NjRfdCBtX2lkZW50aWZp
ZXI7CiAgICAgYm9vbCBtX2hhc0dlbmVyYXRlZEZpbGVzOwogICAgIGJvb2wgbV9hbHdheXNTdHJl
YW07CkBAIC0xMzEsNyArMTMyLDcgQEAgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb3Jt
RGF0YSYgYSwgY29uc3QgRm9ybURhdGEmIGIpCiAKIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29u
c3QgRm9ybURhdGEmIGEsIGNvbnN0IEZvcm1EYXRhJiBiKQogewotICAgIHJldHVybiBhLmVsZW1l
bnRzKCkgIT0gYi5lbGVtZW50cygpOworICAgIHJldHVybiAhKGEgPT0gYik7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9t
YWMvRm9ybURhdGFTdHJlYW1NYWMubW0gYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL0Zv
cm1EYXRhU3RyZWFtTWFjLm1tCmluZGV4IDI3ZWNmZDA4YWQ1YWFhYjg3NTZmYTU5NmQ5OTZiZDJm
NmVjNWQwM2YuLmUzOTY4ZjI2YmU3NWYzMTY4ZjRjNzQ1NWI1YTVlNDg4MTAzNDFhYmMgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvRm9ybURhdGFTdHJlYW1NYWMubW0K
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9Gb3JtRGF0YVN0cmVhbU1hYy5tbQpA
QCAtMTQyLDcgKzE0Miw3IEBAIHN0YXRpYyB2b2lkIGNsb3NlQ3VycmVudFN0cmVhbShGb3JtU3Ry
ZWFtRmllbGRzICpmb3JtKQogICAgICAgICBDRlJlbGVhc2UoZm9ybS0+Y3VycmVudFN0cmVhbSk7
CiAgICAgICAgIGZvcm0tPmN1cnJlbnRTdHJlYW0gPSBOVUxMOwogI2lmIEVOQUJMRShCTE9CX1NM
SUNFKQotICAgICAgICBmb3JtLT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5ndGggPSBCbG9iOjp0b0Vu
ZE9mRmlsZTsKKyAgICAgICAgZm9ybS0+Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoID0gRm9ybURh
dGFFbGVtZW50Ojp0b0VuZE9mRmlsZTsKICNlbmRpZgogICAgIH0KICAgICBpZiAoZm9ybS0+Y3Vy
cmVudERhdGEpIHsKQEAgLTE2MSwyMSArMTYxLDE3IEBAIHN0YXRpYyBib29sIGFkdmFuY2VDdXJy
ZW50U3RyZWFtKEZvcm1TdHJlYW1GaWVsZHMqIGZvcm0pCiAKICAgICAvLyBDcmVhdGUgdGhlIG5l
dyBzdHJlYW0uCiAgICAgRm9ybURhdGFFbGVtZW50JiBuZXh0SW5wdXQgPSBmb3JtLT5yZW1haW5p
bmdFbGVtZW50cy5sYXN0KCk7CisKKyAgICAvLyBDaGVjayBpZiB0aGUgdW5kZXJseWluZyBkYXRh
IGhhcyBiZWNvbWUgc3RhbGUgKGUuZy4gdGhlIGZpbGUgaGFzIGJlZW4gY2hhbmdlZCBzaW5jZSBp
dHMgc25hcHNob3QgaGFzIGJlZW4gdGFrZW4pIG9yIG5vdC4KKyAgICBpZiAoIW5leHRJbnB1dC5t
X2l0ZW0tPmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgaWYgKG5leHRJ
bnB1dC5tX3R5cGUgPT0gRm9ybURhdGFFbGVtZW50OjpkYXRhKSB7CiAgICAgICAgIHNpemVfdCBz
aXplID0gbmV4dElucHV0Lm1fZGF0YS5zaXplKCk7CiAgICAgICAgIGNoYXIqIGRhdGEgPSBuZXh0
SW5wdXQubV9kYXRhLnJlbGVhc2VCdWZmZXIoKTsKICAgICAgICAgZm9ybS0+Y3VycmVudFN0cmVh
bSA9IENGUmVhZFN0cmVhbUNyZWF0ZVdpdGhCeXRlc05vQ29weSgwLCByZWludGVycHJldF9jYXN0
PGNvbnN0IFVJbnQ4Kj4oZGF0YSksIHNpemUsIGtDRkFsbG9jYXRvck51bGwpOwogICAgICAgICBm
b3JtLT5jdXJyZW50RGF0YSA9IGRhdGE7CiAgICAgfSBlbHNlIHsKLSNpZiBFTkFCTEUoQkxPQl9T
TElDRSkKLSAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGZpbGUgaGFzIGJlZW4gY2hhbmdlZCBvciBu
b3QgaWYgcmVxdWlyZWQuCi0gICAgICAgIGlmIChuZXh0SW5wdXQubV9leHBlY3RlZEZpbGVNb2Rp
ZmljYXRpb25UaW1lICE9IEJsb2I6OmRvTm90Q2hlY2tGaWxlQ2hhbmdlKSB7Ci0gICAgICAgICAg
ICB0aW1lX3QgZmlsZU1vZGlmaWNhdGlvblRpbWU7Ci0gICAgICAgICAgICBpZiAoIWdldEZpbGVN
b2RpZmljYXRpb25UaW1lKG5leHRJbnB1dC5tX2ZpbGVuYW1lLCBmaWxlTW9kaWZpY2F0aW9uVGlt
ZSkgfHwgZmlsZU1vZGlmaWNhdGlvblRpbWUgIT0gc3RhdGljX2Nhc3Q8dGltZV90PihuZXh0SW5w
dXQubV9leHBlY3RlZEZpbGVNb2RpZmljYXRpb25UaW1lKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIH0KLSNlbmRpZgotCiAgICAgICAgIGNvbnN0IFN0cmluZyYgcGF0
aCA9IG5leHRJbnB1dC5tX3Nob3VsZEdlbmVyYXRlRmlsZSA/IG5leHRJbnB1dC5tX2dlbmVyYXRl
ZEZpbGVuYW1lIDogbmV4dElucHV0Lm1fZmlsZW5hbWU7CiAgICAgICAgIFJldGFpblB0cjxDRlN0
cmluZ1JlZj4gZmlsZW5hbWUoQWRvcHRDRiwgcGF0aC5jcmVhdGVDRlN0cmluZygpKTsKICAgICAg
ICAgUmV0YWluUHRyPENGVVJMUmVmPiBmaWxlVVJMKEFkb3B0Q0YsIENGVVJMQ3JlYXRlV2l0aEZp
bGVTeXN0ZW1QYXRoKDAsIGZpbGVuYW1lLmdldCgpLCBrQ0ZVUkxQT1NJWFBhdGhTdHlsZSwgRkFM
U0UpKTsKQEAgLTIyMiw3ICsyMTgsNyBAQCBzdGF0aWMgdm9pZCogZm9ybUNyZWF0ZShDRlJlYWRT
dHJlYW1SZWYgc3RyZWFtLCB2b2lkKiBjb250ZXh0KQogICAgIEZvcm1TdHJlYW1GaWVsZHMqIG5l
d0luZm8gPSBuZXcgRm9ybVN0cmVhbUZpZWxkczsKICAgICBuZXdJbmZvLT5jdXJyZW50U3RyZWFt
ID0gTlVMTDsKICNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAgICBuZXdJbmZvLT5jdXJyZW50U3Ry
ZWFtUmFuZ2VMZW5ndGggPSBCbG9iOjp0b0VuZE9mRmlsZTsKKyAgICBuZXdJbmZvLT5jdXJyZW50
U3RyZWFtUmFuZ2VMZW5ndGggPSBGb3JtRGF0YUVsZW1lbnQ6OnRvRW5kT2ZGaWxlOwogI2VuZGlm
CiAgICAgbmV3SW5mby0+Y3VycmVudERhdGEgPSAwOwogICAgIG5ld0luZm8tPmZvcm1TdHJlYW0g
PSBzdHJlYW07IC8vIERvbid0IHJldGFpbi4gVGhhdCB3b3VsZCBjcmVhdGUgYSByZWZlcmVuY2Ug
Y3ljbGUuCkBAIC0yNzAsNyArMjY2LDcgQEAgc3RhdGljIENGSW5kZXggZm9ybVJlYWQoQ0ZSZWFk
U3RyZWFtUmVmIHN0cmVhbSwgVUludDgqIGJ1ZmZlciwgQ0ZJbmRleCBidWZmZXJMZW4KICAgICB3
aGlsZSAoZm9ybS0+Y3VycmVudFN0cmVhbSkgewogICAgICAgICBDRkluZGV4IGJ5dGVzVG9SZWFk
ID0gYnVmZmVyTGVuZ3RoOwogI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgICAgICBpZiAoZm9y
bS0+Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoICE9IEJsb2I6OnRvRW5kT2ZGaWxlICYmIGZvcm0t
PmN1cnJlbnRTdHJlYW1SYW5nZUxlbmd0aCA8IGJ5dGVzVG9SZWFkKQorICAgICAgICBpZiAoZm9y
bS0+Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoICE9IEZvcm1EYXRhRWxlbWVudDo6dG9FbmRPZkZp
bGUgJiYgZm9ybS0+Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoIDwgYnl0ZXNUb1JlYWQpCiAgICAg
ICAgICAgICBieXRlc1RvUmVhZCA9IHN0YXRpY19jYXN0PENGSW5kZXg+KGZvcm0tPmN1cnJlbnRT
dHJlYW1SYW5nZUxlbmd0aCk7CiAjZW5kaWYKICAgICAgICAgQ0ZJbmRleCBieXRlc1JlYWQgPSBD
RlJlYWRTdHJlYW1SZWFkKGZvcm0tPmN1cnJlbnRTdHJlYW0sIGJ1ZmZlciwgYnl0ZXNUb1JlYWQp
OwpAQCAtMjgzLDcgKzI3OSw3IEBAIHN0YXRpYyBDRkluZGV4IGZvcm1SZWFkKENGUmVhZFN0cmVh
bVJlZiBzdHJlYW0sIFVJbnQ4KiBidWZmZXIsIENGSW5kZXggYnVmZmVyTGVuCiAgICAgICAgICAg
ICAqYXRFT0YgPSBGQUxTRTsKICAgICAgICAgICAgIGZvcm0tPmJ5dGVzU2VudCArPSBieXRlc1Jl
YWQ7CiAjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgICAgICAgICBpZiAoZm9ybS0+Y3VycmVu
dFN0cmVhbVJhbmdlTGVuZ3RoICE9IEJsb2I6OnRvRW5kT2ZGaWxlKQorICAgICAgICAgICAgaWYg
KGZvcm0tPmN1cnJlbnRTdHJlYW1SYW5nZUxlbmd0aCAhPSBGb3JtRGF0YUVsZW1lbnQ6OnRvRW5k
T2ZGaWxlKQogICAgICAgICAgICAgICAgIGZvcm0tPmN1cnJlbnRTdHJlYW1SYW5nZUxlbmd0aCAt
PSBieXRlc1JlYWQ7CiAjZW5kaWYKIApAQCAtNDAwLDcgKzM5Niw3IEBAIHZvaWQgc2V0SFRUUEJv
ZHkoTlNNdXRhYmxlVVJMUmVxdWVzdCAqcmVxdWVzdCwgUGFzc1JlZlB0cjxGb3JtRGF0YT4gZm9y
bURhdGEpCiAgICAgICAgIGVsc2UgewogI2lmIEVOQUJMRShCTE9CX1NMSUNFKQogICAgICAgICAg
ICAgLy8gSWYgd2UncmUgc2VuZGluZyB0aGUgZmlsZSByYW5nZSwgdXNlIHRoZSBleGlzdGluZyBy
YW5nZSBsZW5ndGggZm9yIG5vdy4gV2Ugd2lsbCBkZXRlY3QgaWYgdGhlIGZpbGUgaGFzIGJlZW4g
Y2hhbmdlZCByaWdodCBiZWZvcmUgd2UgcmVhZCB0aGUgZmlsZSBhbmQgYWJvcnQgdGhlIG9wZXJh
dGlvbiBpZiBuZWNlc3NhcnkuCi0gICAgICAgICAgICBpZiAoZWxlbWVudC5tX2ZpbGVMZW5ndGgg
IT0gQmxvYjo6dG9FbmRPZkZpbGUpIHsKKyAgICAgICAgICAgIGlmIChlbGVtZW50Lm1fZmlsZUxl
bmd0aCAhPSBGb3JtRGF0YUVsZW1lbnQ6OnRvRW5kT2ZGaWxlKSB7CiAgICAgICAgICAgICAgICAg
bGVuZ3RoICs9IGVsZW1lbnQubV9maWxlTGVuZ3RoOwogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3Qu
Y3BwIGIvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCmluZGV4IDVjZGUyNGRlMjlkYjQ0
MjEwMDAxYTMwMjMyNDRjYTRjY2QyNWNmYmIuLmY2MWQ3MWQyNGU2MzkzNWViODVjMGIzNWRiZmNm
Yjk3YTA1OWMyZGYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAor
KysgYi9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKQEAgLTQ3OCwxMSArNDc4LDcgQEAg
dm9pZCBYTUxIdHRwUmVxdWVzdDo6c2VuZChCbG9iKiBib2R5LCBFeGNlcHRpb25Db2RlJiBlYykK
ICAgICAgICAgLy8gRklYTUU6IFNob3VsZCB3ZSBzZXQgYSBDb250ZW50LVR5cGUgaWYgb25lIGlz
IG5vdCBzZXQuCiAgICAgICAgIC8vIEZJWE1FOiBhZGQgc3VwcG9ydCBmb3IgdXBsb2FkaW5nIGJ1
bmRsZXMuCiAgICAgICAgIG1fcmVxdWVzdEVudGl0eUJvZHkgPSBGb3JtRGF0YTo6Y3JlYXRlKCk7
Ci0jaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgICAgIG1fcmVxdWVzdEVudGl0eUJvZHktPmFw
cGVuZEZpbGVSYW5nZShib2R5LT5wYXRoKCksIGJvZHktPnN0YXJ0KCksIGJvZHktPmxlbmd0aCgp
LCBib2R5LT5tb2RpZmljYXRpb25UaW1lKCkpOwotI2Vsc2UKLSAgICAgICAgbV9yZXF1ZXN0RW50
aXR5Qm9keS0+YXBwZW5kRmlsZShib2R5LT5wYXRoKCksIGZhbHNlKTsKLSNlbmRpZgorICAgICAg
ICBtX3JlcXVlc3RFbnRpdHlCb2R5LT5hcHBlbmRCbG9iKGJvZHkpOwogICAgIH0KIAogICAgIGNy
ZWF0ZVJlcXVlc3QoZWMpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56305</attachid>
            <date>2010-05-17 19:07:53 -0700</date>
            <delta_ts>2010-05-19 15:32:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-39083-20100517190751.patch</filename>
            <type>text/plain</type>
            <size>69344</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YzE4YmQ4MDk3YjQxYTRhMWVjODBmOWZmZTBlNjdmNDdiMGIxNTZiZS4uN2E4ZGZjY2ViMDEwNWI4
ZTMzNWZlMmJlMDY0Y2M4MmNlOTliNDAzNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4NyBAQAorMjAxMC0wNS0xNyAgS2lu
dWtvIFlhc3VkYSAgPGtpbnVrb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVmYWN0b3IgRm9ybURhdGEgYW5kIEJsb2IgZm9y
IGJldHRlciBzdXBwb3J0IG9mIEJsb2JzIHN5bnRoZXNpemVkIGJ5IEJsb2JCdWlsZGVyLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzkwODMKKworICAg
ICAgICBJbnRyb2R1Y2VzIGEgbmV3IGNsYXNzIEJsb2JJdGVtIGFzIGEgYmFzaWMgY29tcG9uZW50
IG9mIEJsb2IgYW5kIEZvcm1EYXRhLAorICAgICAgICBhbmQgbWFrZXMgQmxvYiBhcyBhIGNvbGxl
Y3Rpb24gb2YgQmxvYkl0ZW1zLgorICAgICAgICBGaWxlIHdvdWxkIGJlY29tZSBhIHNwZWNpYWwg
dHlwZSBvZiBCbG9iIHRoYXQgY29udGFpbnMgb25seSBvbmUgRmlsZUJsb2JJdGVtLgorICAgICAg
ICBGb3JtRGF0YUVsZW1lbnQgYW5kIEZvcm1EYXRhTGlzdDo6SXRlbSB3b3VsZCBiZWNvbWUgYSB3
cmFwcGVyIG9mIEJsb2JJdGVtLgorCisgICAgICAgIFRoZSBwYXRjaCBkb2Vzbid0IHN1cHBvcnQg
dGhlIGxhdGVzdCBGaWxlIEFQSSBjaGFuZ2VzIChlLmcuIHR5cGUsIHVybCBhbmQKKyAgICAgICAg
c2xpY2UncyB0eXBlIHBhcmFtZXRlcnMpIGFuZCBzaG91bGQgbm90IGNoYW5nZSBhbnkgb2YgaXRz
IGV4aXN0aW5nIGJlaGF2aW9ycy4KKworICAgICAgICBUaGUgZXhpc3RpbmcgdGVzdHMgc2hvdWxk
IGJlIGFibGUgdG8gYmUgdXNlZCBmb3IgcmVncmVzc2lvbjoKKyAgICAgICAgLSBodHRwL3Rlc3Rz
L2xvY2FsL2Zvcm1kYXRhL3NlbmQtZm9ybS1kYXRhLXdpdGgtc2xpY2VkLWZpbGUuaHRtbAorICAg
ICAgICAtIGh0dHAvdGVzdHMvbG9jYWwvc2VuZC1zbGljZWQtZHJhZ2dlZC1maWxlLmh0bWwKKwor
ICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAg
ICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
ajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogYmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlppZ1phZzo6U2VyaWFsaXplcjo6d3JpdGVCbG9iKToKKyAgICAgICAgKFdlYkNvcmU6Olpp
Z1phZzo6UmVhZGVyOjpyZWFkQmxvYik6CisgICAgICAgICogaHRtbC9CbG9iLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkJsb2I6OkJsb2IpOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6c2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjpwYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6
OmFwcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjpzbGljZSk6CisgICAgICAgICogaHRt
bC9CbG9iLmg6CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6QmxvYjo6Y3JlYXRlRnJvbUZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6dHlw
ZSk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjppdGVtcyk6CisgICAgICAgIChXZWJDb3JlOjpC
bG9iOjpCbG9iKToKKyAgICAgICAgKiBodG1sL0Jsb2JJdGVtLmNwcDogQWRkZWQuCisgICAgICAg
ICogaHRtbC9CbG9iSXRlbS5oOiBBZGRlZC4KKyAgICAgICAgKiBodG1sL0ZpbGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Z2V0RmlsZVR5cGVGcm9tUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpG
aWxlOjpGaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGU6Om5hbWUpOgorICAgICAgICAqIGh0
bWwvRmlsZS5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsZTo6ZmlsZU5hbWUpOgorICAgICAgICAq
IGh0bWwvRmlsZVN0cmVhbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWxlU3RyZWFtOjpvcGVu
Rm9yUmVhZCk6CisgICAgICAgICogaHRtbC9Gb3JtRGF0YUxpc3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9ybURhdGFMaXN0OjphcHBlbmRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Rm9y
bURhdGFMaXN0OjphcHBlbmRCbG9iKToKKyAgICAgICAgKiBodG1sL0Zvcm1EYXRhTGlzdC5oOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGFMaXN0OjpJdGVtOjpJdGVtKToKKyAgICAgICAgKFdl
YkNvcmU6OkZvcm1EYXRhTGlzdDo6SXRlbTo6aXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpGb3Jt
RGF0YUxpc3Q6Okl0ZW06OmRhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvRm9ybURh
dGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGFFbGVtZW50OjpGb3JtRGF0YUVsZW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpGb3JtRGF0YTo6ZGVlcENvcHkpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6OmFw
cGVuZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6OmFwcGVuZFN0cmluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YTo6YXBwZW5kRmlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpGb3JtRGF0YTo6YXBwZW5kQmxvYik6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YTo6YXBw
ZW5kRmlsZVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjphcHBlbmRET01Gb3Jt
RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5oOgorICAgICAgICAo
V2ViQ29yZTo6Rm9ybURhdGFFbGVtZW50OjpGb3JtRGF0YUVsZW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9ybURhdGFFbGVtZW50OjppdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRh
RWxlbWVudDo6QmxvYkl0ZW1XcmFwcGVyOjpCbG9iSXRlbVdyYXBwZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9ybURhdGFFbGVtZW50OjpCbG9iSXRlbVdyYXBwZXI6OnNpemUpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9ybURhdGFFbGVtZW50OjpCbG9iSXRlbVdyYXBwZXI6OmRhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9ybURhdGFFbGVtZW50OjpCbG9iSXRlbVdyYXBwZXI6OnJlbGVhc2VCdWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpv
cGVyYXRvciE9KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL21hYy9Gb3JtRGF0YVN0cmVh
bU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OmNsb3NlQ3VycmVudFN0cmVhbSk6CisgICAgICAg
IChXZWJDb3JlOjphZHZhbmNlQ3VycmVudFN0cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjpmb3Jt
Q3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmZvcm1SZWFkKToKKyAgICAgICAgKFdlYkNvcmU6
OnNldEhUVFBCb2R5KToKKyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OnNlbmQpOgorCiAyMDEwLTA1LTE3ICBBbnR0aSBL
b2l2aXN0byAgPGtvaXZpc3RvQGlraS5maT4KIAogICAgICAgICBUaGlzIHdhcyBtaXNzaW5nIGZy
b20gcHJldmlvdXMgY29tbWl0LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBi
L1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggNWUwYTEyNjNhMjE3NTdmMTU3MTdhODFhYWQ2
Mjc2ZDRjNWRmNjNhNS4uZTRjZGIwYTUxMDZlMGVmNzU0MTIzNmQyM2MyZDBmNTY2MDk4ZTVkMSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmFtCkBAIC0xMDI1LDYgKzEwMjUsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNv
cmUvaGlzdG9yeS9QYWdlQ2FjaGUuaCBcCiAJV2ViQ29yZS9odG1sL0Jsb2IuY3BwIFwKIAlXZWJD
b3JlL2h0bWwvQmxvYi5oIFwKKwlXZWJDb3JlL2h0bWwvQmxvYkl0ZW0uY3BwIFwKKwlXZWJDb3Jl
L2h0bWwvQmxvYkl0ZW0uaCBcCiAJV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNDb250ZXh0QXR0
cmlidXRlcy5oIFwKIAlXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0dyYWRpZW50LmNwcCBcCiAJ
V2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNHcmFkaWVudC5oIFwKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvV2ViQ29yZS5neXBpIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggOTFkN2VkYWI1YTUz
MDc0NTY3ZjUwMWMxNjI2ZjczMzY2MjkyZmJiNi4uYWRhZjE5NGQ0NDgzMGYxZmRiYzNlOTgwZjE1
MGNhNzNhYWQ4YTkwOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKQEAgLTEzNzUsNiArMTM3NSw4IEBACiAgICAgICAgICAgICAnaGlz
dG9yeS9QYWdlQ2FjaGUuaCcsCiAgICAgICAgICAgICAnaHRtbC9CbG9iLmNwcCcsCiAgICAgICAg
ICAgICAnaHRtbC9CbG9iLmgnLAorICAgICAgICAgICAgJ2h0bWwvQmxvYkl0ZW0uY3BwJywKKyAg
ICAgICAgICAgICdodG1sL0Jsb2JJdGVtLmgnLAogICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0Fy
cmF5QnVmZmVyVmlldy5jcHAnLAogICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0FycmF5QnVmZmVy
Vmlldy5oJywKICAgICAgICAgICAgICdodG1sL2NhbnZhcy9BcnJheUJ1ZmZlci5jcHAnLApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXgg
OTMzMDgxYWMyNjliNjE4OWZjY2NkMmFkZTQyYzI1YWRiYmZmNzBiYi4uMzcxZDE2MDYxMDNjZGQz
N2I5M2VmZGZiMDVhMzMxZWI0ZWFlMjM0YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnBy
bworKysgYi9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC01ODYsNiArNTg2LDcgQEAgU09VUkNFUyAr
PSBcCiAgICAgaGlzdG9yeS9xdC9IaXN0b3J5SXRlbVF0LmNwcCBcCiAgICAgaGlzdG9yeS9QYWdl
Q2FjaGUuY3BwIFwKICAgICBodG1sL0Jsb2IuY3BwIFwKKyAgICBodG1sL0Jsb2JJdGVtLmNwcCBc
CiAgICAgaHRtbC9jYW52YXMvQ2FudmFzR3JhZGllbnQuY3BwIFwKICAgICBodG1sL2NhbnZhcy9D
YW52YXNQYXR0ZXJuLmNwcCBcCiAgICAgaHRtbC9jYW52YXMvQ2FudmFzUGl4ZWxBcnJheS5jcHAg
XApAQCAtMTMwNSw2ICsxMzA2LDcgQEAgSEVBREVSUyArPSBcCiAgICAgaGlzdG9yeS9IaXN0b3J5
SXRlbS5oIFwKICAgICBoaXN0b3J5L1BhZ2VDYWNoZS5oIFwKICAgICBodG1sL0Jsb2IuaCBcCisg
ICAgaHRtbC9CbG9iSXRlbS5oIFwKICAgICBodG1sL2NhbnZhcy9DYW52YXNHcmFkaWVudC5oIFwK
ICAgICBodG1sL2NhbnZhcy9DYW52YXNQYXR0ZXJuLmggXAogICAgIGh0bWwvY2FudmFzL0NhbnZh
c1BpeGVsQXJyYXkuaCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCBk
OTMwMmE5OWJlNTQ4MGVhNjAzNDk4NGE0MDk1YWNkMDU0NTE5ZWUwLi5hNjZjYzZiYzJkNmRkNDA4
NzYyZTU3MzI1OTdmNDNjOTZlMzkyMjFjIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUudmNw
cm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2oKQEAgLTMwNTczLDYgKzMwNTczLDE0IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8
RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcQmxvYkl0ZW0uY3BwIg0KKwkJCQk+DQor
CQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxCbG9iSXRl
bS5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0i
Li5caHRtbFxjYW52YXNcQ2FudmFzR3JhZGllbnQuY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZWRiZTk5NWRk
ZWMwMTAwZWM4OWI2ZDAzZDI5NDNlYjk1ZmUzY2EzNy4uN2IzNTc4MDNlMzg2ZTJiZTI0YThlMGRj
MmUxMzU2ZmFmNDY0NDlmYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKQEAgLTY2NSw3ICs2NjUsNyBAQAogCQkyRTk0RjQ1MTExOTIwOTZBMDBCN0Y3NUQgLyog
RmlsZVJlYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMkU5NEYzQ0MxMThCOTA4RTAwQjdGNzVEIC8qIEZpbGVSZWFkZXIuaCAqLzsgfTsKIAkJMkVB
NzY4MDQwRkU3MTI2NDAwQUI5QzhBIC8qIFdvcmtlclNjcmlwdExvYWRlckNsaWVudC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkVBNzY4MDMwRkU3MTI2
NDAwQUI5QzhBIC8qIFdvcmtlclNjcmlwdExvYWRlckNsaWVudC5oICovOyB9OwogCQkyRUFGQUYw
RTEwRTJBRjJEMDA3RUQzRDYgLyogQmxvYi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyRUFGQUYwQjEwRTJBRjJEMDA3RUQzRDYgLyogQmxvYi5jcHAg
Ki87IH07Ci0JCTJFQUZBRjBGMTBFMkFGMkQwMDdFRDNENiAvKiBCbG9iLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRUFGQUYwQzEwRTJBRjJEMDA3RUQz
RDYgLyogQmxvYi5oICovOyB9OworCQkyRUFGQUYwRjEwRTJBRjJEMDA3RUQzRDYgLyogQmxvYi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkVBRkFGMEMx
MEUyQUYyRDAwN0VEM0Q2IC8qIEJsb2IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkyRUNGN0FEQzEwMTYyQjM4MDA0MjdERTcgLyogSlNFcnJvckV2
ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJF
Q0Y3QURBMTAxNjJCMzgwMDQyN0RFNyAvKiBKU0Vycm9yRXZlbnQuY3BwICovOyB9OwogCQkyRUNG
N0FERDEwMTYyQjM4MDA0MjdERTcgLyogSlNFcnJvckV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRUNGN0FEQjEwMTYyQjM4MDA0MjdERTcgLyog
SlNFcnJvckV2ZW50LmggKi87IH07CiAJCTJFQ0Y3QUUxMTAxNjJCNTgwMDQyN0RFNyAvKiBFcnJv
ckV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDJFQ0Y3QURFMTAxNjJCNTgwMDQyN0RFNyAvKiBFcnJvckV2ZW50LmNwcCAqLzsgfTsKQEAgLTIy
NTgsNiArMjI1OCw4IEBACiAJCTg1Rjc0RTBBMEFBOERGOEMwMDBEQzI4NCAvKiBET01DU1NVbmtu
b3duUnVsZS5oIGluIENvcHkgR2VuZXJhdGVkIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gODUwMzJERDUwQUE4QzlCRTAwN0QzQjdEIC8qIERPTUNTU1Vua25vd25S
dWxlLmggKi87IH07CiAJCTg1RkYzMTVBMEFBRkJGQ0IwMDM3NEYzOCAvKiBET01LZXlib2FyZEV2
ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NUZG
MzE1ODBBQUZCRkNCMDAzNzRGMzggLyogRE9NS2V5Ym9hcmRFdmVudC5oICovOyB9OwogCQk4NUZG
MzE1QjBBQUZCRkNCMDAzNzRGMzggLyogRE9NS2V5Ym9hcmRFdmVudC5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg1RkYzMTU5MEFBRkJGQ0IwMDM3NEYz
OCAvKiBET01LZXlib2FyZEV2ZW50Lm1tICovOyB9OworCQk4OTE4MTQzMDExODdDNEI0MDBCRjY5
OEEgLyogQmxvYkl0ZW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gODkxODE0MkIxMTg3QzRCNDAwQkY2OThBIC8qIEJsb2JJdGVtLmNwcCAqLzsgfTsK
KwkJODkxODE0MzExMTg3QzRCNDAwQkY2OThBIC8qIEJsb2JJdGVtLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4OTE4MTQyQzExODdDNEI0MDBCRjY5OEEg
LyogQmxvYkl0ZW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk4OTUyNTM1MjExNjQxQjM0MDBDQUJGMDAgLyogRmlsZVRocmVhZC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4OTUyNTM1MDExNjQxQjM0
MDBDQUJGMDAgLyogRmlsZVRocmVhZC5jcHAgKi87IH07CiAJCTg5NTI1MzUzMTE2NDFCMzQwMENB
QkYwMCAvKiBGaWxlVGhyZWFkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA4OTUyNTM1MTExNjQxQjM0MDBDQUJGMDAgLyogRmlsZVRocmVhZC5oICovOyB9
OwogCQk4OTUyNTNENzExNkM0QzY4MDBDQUJGMDAgLyogRmlsZVN0cmVhbS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4OTUyNTNENDExNkM0QzY4MDBD
QUJGMDAgLyogRmlsZVN0cmVhbS5jcHAgKi87IH07CkBAIC03ODIzLDYgKzc4MjUsOCBAQAogCQk4
NUY1NkE3OTBBOThDRTM3MDBBREI2MEEgLyogRE9NUHJvY2Vzc2luZ0luc3RydWN0aW9uLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IERPTVByb2Nlc3NpbmdJbnN0
cnVjdGlvbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODVGRjMxNTgwQUFGQkZD
QjAwMzc0RjM4IC8qIERPTUtleWJvYXJkRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IERPTUtleWJvYXJkRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJODVGRjMxNTkwQUFGQkZDQjAwMzc0RjM4IC8qIERPTUtleWJvYXJkRXZlbnQubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRE9NS2V5Ym9hcmRFdmVudC5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODkxODE0MkIxMTg3QzRCNDAwQkY2OThBIC8q
IEJsb2JJdGVtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJsb2JJ
dGVtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODkxODE0MkMxMTg3QzRCNDAw
QkY2OThBIC8qIEJsb2JJdGVtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJs
b2JJdGVtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg5NTI1MzUwMTE2NDFCMzQw
MENBQkYwMCAvKiBGaWxlVGhyZWFkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEZpbGVUaHJlYWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4OTUy
NTM1MTExNjQxQjM0MDBDQUJGMDAgLyogRmlsZVRocmVhZC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBGaWxlVGhyZWFkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTg5NTI1M0Q0MTE2QzRDNjgwMENBQkYwMCAvKiBGaWxlU3RyZWFtLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZpbGVTdHJlYW0uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMTMyNjUsNiArMTMyNjksOCBAQAogCQkJCTJFQUZBRjBCMTBFMkFGMkQw
MDdFRDNENiAvKiBCbG9iLmNwcCAqLywKIAkJCQkyRUFGQUYwQzEwRTJBRjJEMDA3RUQzRDYgLyog
QmxvYi5oICovLAogCQkJCTJFQUZBRjBEMTBFMkFGMkQwMDdFRDNENiAvKiBCbG9iLmlkbCAqLywK
KwkJCQk4OTE4MTQyQjExODdDNEI0MDBCRjY5OEEgLyogQmxvYkl0ZW0uY3BwICovLAorCQkJCTg5
MTgxNDJDMTE4N0M0QjQwMEJGNjk4QSAvKiBCbG9iSXRlbS5oICovLAogCQkJCTkzQzQ0MUVEMEY4
MTNBMUEwMEMxQTYzNCAvKiBDb2xsZWN0aW9uQ2FjaGUuY3BwICovLAogCQkJCTkzQzQ0MUVFMEY4
MTNBMUEwMEMxQTYzNCAvKiBDb2xsZWN0aW9uQ2FjaGUuaCAqLywKIAkJCQk5M0M0NDFGRjBGODEz
QUUxMDBDMUE2MzQgLyogQ29sbGVjdGlvblR5cGUuaCAqLywKQEAgLTE2NzUxLDYgKzE2NzU3LDcg
QEAKIAkJCQlCQzVFQjkyMDBFODIwNDA4MDBCMjU5NjUgLyogQmluZGluZ1VSSS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTg5OTQzMjgwQjQyMzM4ODAwRDdDODAyIC8qIEJpdG1hcEltYWdlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkyRUFGQUYwRjEwRTJBRjJEMDA3RUQzRDYgLyogQmxvYi5oIGluIEhl
YWRlcnMgKi8sCisJCQkJODkxODE0MzExMTg3QzRCNDAwQkY2OThBIC8qIEJsb2JJdGVtLmggaW4g
SGVhZGVycyAqLywKIAkJCQk5M0YxOTlCRTA4MjQ1RTU5MDAxRTlBQkMgLyogQmxvY2tFeGNlcHRp
b25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzVFQjVFMTBFODFCRTg3MDBCMjU5NjUgLyogQm9y
ZGVyRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1RUI1REIwRTgxQjdFQTAwQjI1OTY1IC8q
IEJvcmRlclZhbHVlLmggaW4gSGVhZGVycyAqLywKQEAgLTE3OTk5LDYgKzE4MDA2LDcgQEAKIAkJ
CQlGRTgwRDdBQTBFOUMxRUQyMDAwRDZGNzUgLyogSlNDdXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJh
Y2suaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMzQxN0M5MENFQ0ZGMjUwMDQ5Q0JERSAvKiBKU0N1
c3RvbVZvaWRDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTEwQjkzN0MwQjczQzAwQTAw
M0VEODkwIC8qIEpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlC
NTlERDY5OTExOTAyOUU1MDA3RTk2ODQgLyogSlNEYXRhYmFzZUNhbGxiYWNrLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxQUU4MkY5MDBDQUFGQTlEMDAyMjM3QUUgLyogSlNEYXRhYmFzZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkM3N0QxNkEwRkYxOUY1NjAwNzA4ODdCIC8qIEpTRGF0YUdyaWRDb2x1
bW4uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNzdEMTZDMEZGMTlGNTYwMDcwODg3QiAvKiBKU0Rh
dGFHcmlkQ29sdW1uTGlzdC5oIGluIEhlYWRlcnMgKi8sCkBAIC0xODE2Myw3ICsxODE3MSwxMSBA
QAogCQkJCUJDODI0MzI5MEQwQ0U4QTIwMDQ2MEM4RiAvKiBKU1NRTEVycm9yLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxQUU4MkZFRDBDQUIwN0VFMDAyMjM3QUUgLyogSlNTUUxSZXN1bHRTZXQuaCBp
biBIZWFkZXJzICovLAogCQkJCTFBRkUxMTlBMENCRkZDQzQwMDMwMTdGQSAvKiBKU1NRTFJlc3Vs
dFNldFJvd0xpc3QuaCBpbiBIZWFkZXJzICovLAorCQkJCUI1OURENkE1MTE5MDJBNjIwMDdFOTY4
NCAvKiBKU1NRTFN0YXRlbWVudENhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKKwkJCQlCNTlERDZB
OTExOTAyQTcxMDA3RTk2ODQgLyogSlNTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzgyNDMyQTBEMENFOEEyMDA0NjBDOEYgLyogSlNTUUxUcmFuc2FjdGlv
bi5oIGluIEhlYWRlcnMgKi8sCisJCQkJQjU5REQ2OUQxMTkwMkE0MjAwN0U5Njg0IC8qIEpTU1FM
VHJhbnNhY3Rpb25DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCisJCQkJQjU5REQ2QTExMTkwMkE1
MjAwN0U5Njg0IC8qIEpTU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1MUUwQkFFQjBEQTU1RDRBMDBBOUU0MTcgLyogSlNTdG9yYWdlRXZlbnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRjUwMjZBMTAyQkE5NDMwMDY2RjM5QSAvKiBKU1N0eWxlTWVkaWEu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDRTAxMzlCMEMwQkVGMTgwMDQzODYwQSAvKiBKU1N0eWxl
U2hlZXQuaCBpbiBIZWFkZXJzICovLApAQCAtMTkyMTEsMTEgKzE5MjIzLDYgQEAKIAkJCQlFMUJF
NTEyRTBDRjZDNTEyMDAyRUE5NTkgLyogWFNMVFVuaWNvZGVTb3J0LmggaW4gSGVhZGVycyAqLywK
IAkJCQk5N0RENEQ4NzBGREY0RDZFMDBFQ0Y5QTQgLyogWFNTQXVkaXRvci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQ0UxNzJFMDExMTM2RThDRTAwNjJBNTMzIC8qIFpvb21Nb2RlLmggaW4gSGVhZGVy
cyAqLywKLQkJCQlCNTlERDY5OTExOTAyOUU1MDA3RTk2ODQgLyogSlNEYXRhYmFzZUNhbGxiYWNr
LmggaW4gSGVhZGVycyAqLywKLQkJCQlCNTlERDY5RDExOTAyQTQyMDA3RTk2ODQgLyogSlNTUUxU
cmFuc2FjdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKLQkJCQlCNTlERDZBMTExOTAyQTUy
MDA3RTk2ODQgLyogSlNTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaCBpbiBIZWFkZXJzICov
LAotCQkJCUI1OURENkE1MTE5MDJBNjIwMDdFOTY4NCAvKiBKU1NRTFN0YXRlbWVudENhbGxiYWNr
LmggaW4gSGVhZGVycyAqLywKLQkJCQlCNTlERDZBOTExOTAyQTcxMDA3RTk2ODQgLyogSlNTUUxT
dGF0ZW1lbnRFcnJvckNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQlCNTVENUFBNDExOTEz
MUZDMDBCQ0MzMTUgLyogSlNTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQjU4Q0VCNjkxMTkxMzYwNzAwMkE2NzkwIC8qIEpTRGF0YWJhc2VTeW5jLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCNThDRUI2RDExOTEzNjFDMDAyQTY3OTAgLyogSlNTUUxUcmFuc2Fj
dGlvblN5bmMuaCBpbiBIZWFkZXJzICovLApAQCAtMTk1NjIsNiArMTk1NjksNyBAQAogCQkJCUJD
NUVCOTFGMEU4MjA0MDgwMEIyNTk2NSAvKiBCaW5kaW5nVVJJLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE4OTk0MzI5MEI0MjMzODgwMEQ3QzgwMiAvKiBCaXRtYXBJbWFnZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkyRUFGQUYwRTEwRTJBRjJEMDA3RUQzRDYgLyogQmxvYi5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQk4OTE4MTQzMDExODdDNEI0MDBCRjY5OEEgLyogQmxvYkl0ZW0uY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJOTNGMTlBRTEwODI0NUU1OTAwMUU5QUJDIC8qIEJsb2NrRXhjZXB0aW9u
cy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDRUE0ODU0MDk3RDkzMDIwMDk0QzlFNCAvKiBicmVh
a19saW5lcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzMwOUREQTA5OUU2NDkyMDA1NkU1ODEg
LyogQnJlYWtCbG9ja3F1b3RlQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTIwMzEwLDgg
KzIwMzE4LDkgQEAKIAkJCQk1MUVDOTI2NTBDRTkwREQ0MDBGOTAzMDggLyogSlNDdXN0b21TUUxT
dGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBMzQxN0NBMENF
Q0ZGMjUwMDQ5Q0JERSAvKiBKU0N1c3RvbVZvaWRDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlFMTBCOTNDMzBCNzNDMjkxMDAzRUQ4OTAgLyogSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMUFFODJGOEYwQ0FBRkE5RDAwMjIzN0FFIC8qIEpTRGF0
YWJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQjU5REQ2OUExMTkwMjlFNTAwN0U5Njg0IC8q
IEpTRGF0YWJhc2VDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0NFNThBQzEwNjFF
OENGMDA4RkIzNUEgLyogSlNEYXRhYmFzZUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkx
QUU4MkY4RjBDQUFGQTlEMDAyMjM3QUUgLyogSlNEYXRhYmFzZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlCQzc3RDE2OTBGRjE5RjU2MDA3MDg4N0IgLyogSlNEYXRhR3JpZENvbHVtbi5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlCQzc3RDE2QjBGRjE5RjU2MDA3MDg4N0IgLyogSlNEYXRhR3JpZENv
bHVtbkxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM3N0QxNTIwRkYxOUM3MzAwNzA4ODdC
IC8qIEpTRGF0YUdyaWRDb2x1bW5MaXN0Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjA1
MjEsOCArMjA1MzAsMTIgQEAKIAkJCQkxQUU4MkZFQzBDQUIwN0VFMDAyMjM3QUUgLyogSlNTUUxS
ZXN1bHRTZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFGRTExOTkwQ0JGRkNDNDAwMzAxN0ZB
IC8qIEpTU1FMUmVzdWx0U2V0Um93TGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MURDRTgw
MjBDQUM5RjFDMDA0ODgzNTggLyogSlNTUUxSZXN1bHRTZXRSb3dMaXN0Q3VzdG9tLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCUI1OURENkE2MTE5MDJBNjIwMDdFOTY4NCAvKiBKU1NRTFN0YXRlbWVu
dENhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUI1OURENkFBMTE5MDJBNzEwMDdFOTY4
NCAvKiBKU1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NTE0Qzc2MzgwQ0U5MjI1RTAwN0VGM0NEIC8qIEpTU1FMVHJhbnNhY3Rpb24uY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJQjU5REQ2OUUxMTkwMkE0MjAwN0U5Njg0IC8qIEpTU1FMVHJhbnNhY3Rpb25D
YWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUQyMzE2RTBDRDI2OUU3MDBDMUYxOTQg
LyogSlNTUUxUcmFuc2FjdGlvbkN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCNTlERDZB
MjExOTAyQTUyMDA3RTk2ODQgLyogSlNTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNTFFM0Y5RDYwREEwNUUxRDAwMjUwOTExIC8qIEpTU3RvcmFnZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUQwQzUxNjBEQUE5MEI3MDAzQjM4MzEgLyogSlNTdG9y
YWdlQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxRTBCQUVBMERBNTVENEEwMEE5RTQx
NyAvKiBKU1N0b3JhZ2VFdmVudC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTIxNDkzLDExICsyMTUw
Niw2IEBACiAJCQkJOTNGMTlCMDUwODI0NUU1OTAwMUU5QUJDIC8qIFhTTFRQcm9jZXNzb3JMaWJ4
c2x0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxQkU1MTJEMENGNkM1MTIwMDJFQTk1OSAvKiBY
U0xUVW5pY29kZVNvcnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTdERDREODYwRkRGNEQ2RTAw
RUNGOUE0IC8qIFhTU0F1ZGl0b3IuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQjU5REQ2OUExMTkw
MjlFNTAwN0U5Njg0IC8qIEpTRGF0YWJhc2VDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKLQkJ
CQlCNTlERDY5RTExOTAyQTQyMDA3RTk2ODQgLyogSlNTUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCUI1OURENkEyMTE5MDJBNTIwMDdFOTY4NCAvKiBKU1NRTFRy
YW5zYWN0aW9uRXJyb3JDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlCNTlERDZBNjEx
OTAyQTYyMDA3RTk2ODQgLyogSlNTUUxTdGF0ZW1lbnRDYWxsYmFjay5jcHAgaW4gU291cmNlcyAq
LywKLQkJCQlCNTlERDZBQTExOTAyQTcxMDA3RTk2ODQgLyogSlNTUUxTdGF0ZW1lbnRFcnJvckNh
bGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUI1NUQ1QUE1MTE5MTMxRkMwMEJDQzMxNSAv
KiBKU1NRTFRyYW5zYWN0aW9uU3luY0NhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUI1
NUQ1QUE4MTE5MTMyNTAwMEJDQzMxNSAvKiBKU0RhdGFiYXNlU3luY0N1c3RvbS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlCNTVENUFBOTExOTEzMjUwMDBCQ0MzMTUgLyogSlNTUUxUcmFuc2FjdGlv
blN5bmNDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Nl
cmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKaW5kZXggNTBhYzg2YmFjZTQxZWM1YzFiMTEyNWRkNDRj
NmI2ZjExZTYxODZhOC4uYWI5ODc1YzFjMTNhNjM0ZjNmOWM3OWE1YmQ1MDdmZWI5MDNlNzIyNiAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3Bw
CisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcApAQCAt
NTU4LDYgKzU1OCw5IEBAIHByaXZhdGU6CiAgICAgICAgIEJsb2IqIGJsb2IgPSBWOEJsb2I6OnRv
TmF0aXZlKHZhbHVlLkFzPHY4OjpPYmplY3Q+KCkpOwogICAgICAgICBpZiAoIWJsb2IpCiAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIC8vIEZJWE1FOiBOZWVkIGEgZml4IChvciBhZGRpdGlv
bmFsIGNvZGUgdG8gZHVtcCB0aGUgY29udGVudHMgdG8gYSBmaWxlKQorICAgICAgICAvLyBmb3Ig
bm9uLWZpbGUgYmxvYnMuCisgICAgICAgIC8vIEZJWE1FOiBOZWVkIHRvIHNlcmlhbGl6ZSB0aGUg
dHlwZSBpbmZvcm1hdGlvbiBhcyB3ZWxsPwogICAgICAgICBtX3dyaXRlci53cml0ZUJsb2IoYmxv
Yi0+cGF0aCgpKTsKICAgICB9CiAKQEAgLTg1Myw3ICs4NTYsOCBAQCBwcml2YXRlOgogICAgICAg
ICBTdHJpbmcgcGF0aDsKICAgICAgICAgaWYgKCFyZWFkV2ViQ29yZVN0cmluZygmcGF0aCkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIFBhc3NSZWZQdHI8QmxvYj4gYmxvYiA9
IEJsb2I6OmNyZWF0ZShwYXRoKTsKKyAgICAgICAgLy8gRklYTUU6IHNlZSB0aGUgRklYTUUgY29t
bWVudCBpbiB3cml0ZUJsb2IuCisgICAgICAgIFBhc3NSZWZQdHI8QmxvYj4gYmxvYiA9IEJsb2I6
OmNyZWF0ZUZyb21GaWxlKHBhdGgpOwogICAgICAgICAqdmFsdWUgPSB0b1Y4KGJsb2IpOwogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvQmxvYi5j
cHAgYi9XZWJDb3JlL2h0bWwvQmxvYi5jcHAKaW5kZXggODNiYmRjMGM1MjY0ODQ1NDI2ODgxOTI2
MjE2ODRiNjI4MjAyNGJmNC4uNThkMjFkYTRmNzkyZjgwZjRlNGY0NDQxZTE0MTFlOWUxNzFkMWMx
ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0Jsb2IuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9C
bG9iLmNwcApAQCAtMjksOTAgKzI5LDY4IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgor
CiAjaW5jbHVkZSAiQmxvYi5oIgogCisjaW5jbHVkZSAiQmxvYkl0ZW0uaCIKICNpbmNsdWRlICJG
aWxlU3lzdGVtLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotI2lmIEVOQUJMRShCTE9CX1NM
SUNFKQotY29uc3QgaW50IEJsb2I6OnRvRW5kT2ZGaWxlID0gLTE7Ci1jb25zdCBkb3VibGUgQmxv
Yjo6ZG9Ob3RDaGVja0ZpbGVDaGFuZ2UgPSAwOwotI2VuZGlmCitCbG9iOjpCbG9iKGNvbnN0IFN0
cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nIHR5cGUpCisgICAgOiBtX3R5cGUodHlwZSkKK3sKKyAg
ICBhcHBlbmQoQmxvYkl0ZW06OmNyZWF0ZUZpbGVCbG9iSXRlbShwYXRoKSk7Cit9CiAKLUJsb2I6
OkJsb2IoY29uc3QgU3RyaW5nJiBwYXRoKQotICAgIDogbV9wYXRoKHBhdGgpCi0jaWYgRU5BQkxF
KEJMT0JfU0xJQ0UpCi0gICAgLCBtX3N0YXJ0KDApCi0gICAgLCBtX2xlbmd0aCh0b0VuZE9mRmls
ZSkKLSAgICAsIG1fc25hcHNob3RDYXB0dXJlZChmYWxzZSkKLSAgICAsIG1fc25hcHNob3RTaXpl
KDApCi0gICAgLCBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZShkb05vdENoZWNrRmlsZUNoYW5n
ZSkKLSNlbmRpZgordW5zaWduZWQgbG9uZyBsb25nIEJsb2I6OnNpemUoKSBjb25zdAogeworICAg
IC8vIEZJWE1FOiBKYXZhU2NyaXB0IGNhbm5vdCByZXByZXNlbnQgc2l6ZXMgYXMgbGFyZ2UgYXMg
dW5zaWduZWQgbG9uZyBsb25nLCB3ZSBuZWVkIHRvCisgICAgLy8gY29tZSB1cCB3aXRoIGFuIGV4
Y2VwdGlvbiB0byB0aHJvdyBpZiBmaWxlIHNpemUgaXMgbm90IHJlcHJlc2V0YWJsZS4KKyAgICB1
bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSA9IDA7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X2l0ZW1MaXN0LnNpemUoKTsgKytpKQorICAgICAgICBzaXplICs9IG1faXRlbUxpc3RbaV0tPnNp
emUoKTsKKyAgICByZXR1cm4gc2l6ZTsKIH0KIAotI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotQmxv
Yjo6QmxvYihjb25zdCBTdHJpbmcmIHBhdGgsIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxl
bmd0aCwgbG9uZyBsb25nIHNuYXBzaG90U2l6ZSwgZG91YmxlIHNuYXBzaG90TW9kaWZpY2F0aW9u
VGltZSkKLSAgICA6IG1fcGF0aChwYXRoKQotICAgICwgbV9zdGFydChzdGFydCkKLSAgICAsIG1f
bGVuZ3RoKGxlbmd0aCkKLSAgICAsIG1fc25hcHNob3RDYXB0dXJlZCh0cnVlKQotICAgICwgbV9z
bmFwc2hvdFNpemUoc25hcHNob3RTaXplKQotICAgICwgbV9zbmFwc2hvdE1vZGlmaWNhdGlvblRp
bWUoc25hcHNob3RNb2RpZmljYXRpb25UaW1lKQorY29uc3QgU3RyaW5nJiBCbG9iOjpwYXRoKCkg
Y29uc3QKIHsKLSAgICBBU1NFUlQoc3RhcnQgPj0gMCAmJiBsZW5ndGggPj0gMCAmJiBzdGFydCAr
IGxlbmd0aCA8PSBzbmFwc2hvdFNpemUgJiYgc25hcHNob3RNb2RpZmljYXRpb25UaW1lKTsKKyAg
ICBBU1NFUlQobV9pdGVtTGlzdC5zaXplKCkgPT0gMSAmJiBtX2l0ZW1MaXN0WzBdLT50b0ZpbGVC
bG9iSXRlbSgpKTsKKyAgICByZXR1cm4gbV9pdGVtTGlzdFswXS0+dG9GaWxlQmxvYkl0ZW0oKS0+
cGF0aCgpOwogfQotI2VuZGlmCiAKLXVuc2lnbmVkIGxvbmcgbG9uZyBCbG9iOjpzaXplKCkgY29u
c3QKK3ZvaWQgQmxvYjo6YXBwZW5kKFBhc3NSZWZQdHI8QmxvYkl0ZW0+IGl0ZW0pCiB7Ci0gICAg
Ly8gRklYTUU6IEphdmFTY3JpcHQgY2Fubm90IHJlcHJlc2VudCBzaXplcyBhcyBsYXJnZSBhcyB1
bnNpZ25lZCBsb25nIGxvbmcsIHdlIG5lZWQgdG8KLSAgICAvLyBjb21lIHVwIHdpdGggYW4gZXhj
ZXB0aW9uIHRvIHRocm93IGlmIGZpbGUgc2l6ZSBpcyBub3QgcmVwcmVzZXRhYmxlLgotI2lmIEVO
QUJMRShCTE9CX1NMSUNFKQotICAgIGlmIChtX3NuYXBzaG90Q2FwdHVyZWQpCi0gICAgICAgIHJl
dHVybiBtX2xlbmd0aDsKLSNlbmRpZgotICAgIGxvbmcgbG9uZyBzaXplOwotICAgIGlmICghZ2V0
RmlsZVNpemUobV9wYXRoLCBzaXplKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIHN0
YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oc2l6ZSk7CisgICAgbV9pdGVtTGlzdC5hcHBl
bmQoaXRlbSk7CiB9CiAKICNpZiBFTkFCTEUoQkxPQl9TTElDRSkKIFBhc3NSZWZQdHI8QmxvYj4g
QmxvYjo6c2xpY2UobG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoKSBjb25zdAogewot
ICAgIC8vIFdoZW4gd2Ugc2xpY2UgYSBmaWxlIGZvciB0aGUgZmlyc3QgdGltZSwgd2Ugb2J0YWlu
IGEgc25hcHNob3Qgb2YgdGhlIGZpbGUgYnkgY2FwdHVyaW5nIGl0cyBjdXJyZW50IHNpemUgYW5k
IG1vZGlmaWNhdGlvbiB0aW1lLgotICAgIC8vIFRoZSBtb2RpZmljYXRpb24gdGltZSB3aWxsIGJl
IHVzZWQgdG8gdmVyaWZ5IGlmIHRoZSBmaWxlIGhhcyBiZWVuIGNoYW5nZWQgb3Igbm90LCB3aGVu
IHRoZSB1bmRlcmx5aW5nIGRhdGEgYXJlIGFjY2Vzc2VkLgotICAgIGxvbmcgbG9uZyBzbmFwc2hv
dFNpemU7Ci0gICAgZG91YmxlIHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZTsKLSAgICBpZiAobV9z
bmFwc2hvdENhcHR1cmVkKSB7Ci0gICAgICAgIHNuYXBzaG90U2l6ZSA9IG1fc25hcHNob3RTaXpl
OwotICAgICAgICBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUgPSBtX3NuYXBzaG90TW9kaWZpY2F0
aW9uVGltZTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBJZiB3ZSBmYWlsIHRvIHJldHJpZXZl
IHRoZSBzaXplIG9yIG1vZGlmaWNhdGlvbiB0aW1lLCBwcm9iYWJseSBkdWUgdG8gdGhhdCB0aGUg
ZmlsZSBoYXMgYmVlbiBkZWxldGVkLCBhbiBlbXB0eSBibG9iIHdpbGwgYmUgcmV0dXJuZWQuCi0g
ICAgICAgIHRpbWVfdCBtb2RpZmljYXRpb25UaW1lOwotICAgICAgICBpZiAoIWdldEZpbGVTaXpl
KG1fcGF0aCwgc25hcHNob3RTaXplKSB8fCAhZ2V0RmlsZU1vZGlmaWNhdGlvblRpbWUobV9wYXRo
LCBtb2RpZmljYXRpb25UaW1lKSkgewotICAgICAgICAgICAgc25hcHNob3RTaXplID0gMDsKLSAg
ICAgICAgICAgIHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSA9IDA7Ci0gICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgc25hcHNob3RNb2RpZmljYXRpb25UaW1lID0gbW9kaWZpY2F0aW9uVGltZTsK
LSAgICB9Ci0KLSAgICAvLyBDbGFtcCB0aGUgcmFuZ2UgaWYgaXQgZXhjZWVkcyB0aGUgc2l6ZSBs
aW1pdC4KICAgICBpZiAoc3RhcnQgPCAwKQogICAgICAgICBzdGFydCA9IDA7CiAgICAgaWYgKGxl
bmd0aCA8IDApCiAgICAgICAgIGxlbmd0aCA9IDA7CiAKLSAgICBpZiAoc3RhcnQgPiBzbmFwc2hv
dFNpemUpIHsKKyAgICAvLyBDbGFtcCB0aGUgcmFuZ2UgaWYgaXQgZXhjZWVkcyB0aGUgc2l6ZSBs
aW1pdC4KKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxTaXplID0gc2l6ZSgpOworICAgIGlm
IChzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KHN0YXJ0KSA+IHRvdGFsU2l6ZSkgewog
ICAgICAgICBzdGFydCA9IDA7CiAgICAgICAgIGxlbmd0aCA9IDA7Ci0gICAgfSBlbHNlIGlmIChz
dGFydCArIGxlbmd0aCA+IHNuYXBzaG90U2l6ZSkKLSAgICAgICAgbGVuZ3RoID0gc25hcHNob3RT
aXplIC0gc3RhcnQ7CisgICAgfSBlbHNlIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxv
bmc+KHN0YXJ0ICsgbGVuZ3RoKSA+IHRvdGFsU2l6ZSkKKyAgICAgICAgbGVuZ3RoID0gdG90YWxT
aXplIC0gc3RhcnQ7CiAKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJsb2IobV9wYXRoLCBtX3N0
YXJ0ICsgc3RhcnQsIGxlbmd0aCwgc25hcHNob3RTaXplLCBzbmFwc2hvdE1vZGlmaWNhdGlvblRp
bWUpKTsKKyAgICBzaXplX3QgaSA9IDA7CisgICAgUmVmUHRyPEJsb2I+IGJsb2IgPSBCbG9iOjpj
cmVhdGUoKTsKKyAgICBmb3IgKDsgaSA8IG1faXRlbUxpc3Quc2l6ZSgpICYmIHN0YXRpY19jYXN0
PHVuc2lnbmVkIGxvbmcgbG9uZz4oc3RhcnQpID49IG1faXRlbUxpc3RbaV0tPnNpemUoKTsgKytp
KQorICAgICAgICBzdGFydCAtPSBtX2l0ZW1MaXN0W2ldLT5zaXplKCk7CisgICAgZm9yICg7IGxl
bmd0aCA+IDAgJiYgaSA8IG1faXRlbUxpc3Quc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgYmxvYi0+
bV9pdGVtTGlzdC5hcHBlbmQoQmxvYkl0ZW06OmNyZWF0ZVJhbmdlQmxvYkl0ZW0obV9pdGVtTGlz
dFtpXSwgc3RhcnQsIGxlbmd0aCkpOworICAgICAgICBsZW5ndGggLT0gYmxvYi0+bV9pdGVtTGlz
dC5sYXN0KCktPnNpemUoKTsKKyAgICAgICAgc3RhcnQgPSAwOworICAgIH0KKyAgICByZXR1cm4g
YmxvYi5yZWxlYXNlKCk7CiB9Ci0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoQkxPQl9TTElDRSkK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0Jsb2Iu
aCBiL1dlYkNvcmUvaHRtbC9CbG9iLmgKaW5kZXggZThiNWYzZmRmMDY5YTJiNDg3NmVkMTZhYjgx
YjIyZjBmZjAzODk3MC4uODk3MDA4ODU0YzNkNTY2OTdiYjc4ZmRiZTFjYmY1YjNkOThjZDEwNyAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0Jsb2IuaAorKysgYi9XZWJDb3JlL2h0bWwvQmxvYi5o
CkBAIC0zMSw2OSArMzEsNDggQEAKICNpZm5kZWYgQmxvYl9oCiAjZGVmaW5lIEJsb2JfaAogCi0j
aW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkJsb2JJdGVtLmgiCiAjaW5jbHVk
ZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSAiVGV4dEVu
Y29kaW5nLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBCbG9iIDogcHVibGljIFJlZkNvdW50ZWQ8QmxvYj4gewogcHVibGljOgotI2lm
IEVOQUJMRShCTE9CX1NMSUNFKQotICAgIHN0YXRpYyBjb25zdCBpbnQgdG9FbmRPZkZpbGU7Ci0g
ICAgc3RhdGljIGNvbnN0IGRvdWJsZSBkb05vdENoZWNrRmlsZUNoYW5nZTsKLSNlbmRpZgorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEJsb2I+IGNyZWF0ZShjb25zdCBTdHJpbmcgdHlwZSA9IFN0cmlu
ZygpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBCbG9iKHR5cGUpKTsKKyAg
ICB9CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxCbG9iPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBw
YXRoKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJsb2I+IGNyZWF0ZUZyb21GaWxlKGNvbnN0IFN0
cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nIHR5cGUgPSBTdHJpbmcoKSkKICAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgQmxvYihwYXRoKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgQmxvYihwYXRoLCB0eXBlKSk7CiAgICAgfQogCiAgICAgdmlydHVhbCB+QmxvYigpIHsg
fQogCisgICAgdW5zaWduZWQgbG9uZyBsb25nIHNpemUoKSBjb25zdDsKKyAgICBjb25zdCBTdHJp
bmcmIHBhdGgoKSBjb25zdDsKKyAgICBjb25zdCBTdHJpbmcmIHR5cGUoKSBjb25zdCB7IHJldHVy
biBtX3R5cGU7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNGaWxlKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KIAotI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgIFBhc3NSZWZQdHI8QmxvYj4gc2xp
Y2UobG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoKSBjb25zdDsKLSNlbmRpZgorICAg
IHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxCbG9iSXRlbT4gPiBJdGVtTGlzdDsKKyAgICB2b2lkIGFw
cGVuZChQYXNzUmVmUHRyPEJsb2JJdGVtPiBpdGVtKTsKKyAgICBjb25zdCBJdGVtTGlzdCYgaXRl
bXMoKSBjb25zdCB7IHJldHVybiBtX2l0ZW1MaXN0OyB9CiAKLSAgICBjb25zdCBTdHJpbmcmIHBh
dGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0KLSAgICB1bnNpZ25lZCBsb25nIGxvbmcgc2l6
ZSgpIGNvbnN0OwogI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgIGxvbmcgbG9uZyBzdGFydCgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhcnQ7IH0KLSAgICBsb25nIGxvbmcgbGVuZ3RoKCkgY29uc3Qg
eyByZXR1cm4gbV9sZW5ndGg7IH0KLSAgICBkb3VibGUgbW9kaWZpY2F0aW9uVGltZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc25hcHNob3RNb2RpZmljYXRpb25UaW1lOyB9CisgICAgUGFzc1JlZlB0cjxC
bG9iPiBzbGljZShsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgpIGNvbnN0OwogI2Vu
ZGlmCiAKIHByb3RlY3RlZDoKLSAgICBCbG9iKGNvbnN0IFN0cmluZyYgcGF0aCk7CisgICAgQmxv
Yihjb25zdCBTdHJpbmcgdHlwZSkgOiBtX3R5cGUodHlwZSkgeyB9CisgICAgQmxvYihjb25zdCBT
dHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyB0eXBlKTsKIAotcHJpdmF0ZToKLSNpZiBFTkFCTEUo
QkxPQl9TTElDRSkKLSAgICBCbG9iKGNvbnN0IFN0cmluZyYgcGF0aCwgbG9uZyBsb25nIHN0YXJ0
LCBsb25nIGxvbmcgbGVuZ3RoLCBsb25nIGxvbmcgc25hcHNob3RTaXplLCBkb3VibGUgc25hcHNo
b3RNb2RpZmljYXRpb25UaW1lKTsKLSNlbmRpZgotCi0gICAgLy8gVGhlIHVuZGVybHlpbmcgcGF0
aCBvZiB0aGUgZmlsZS1iYXNlZCBibG9iLiAKLSAgICBTdHJpbmcgbV9wYXRoOwotCi0jaWYgRU5B
QkxFKEJMT0JfU0xJQ0UpCi0gICAgLy8gVGhlIHN0YXJ0aW5nIHBvc2l0aW9uIG9mIHRoZSBmaWxl
LWJhc2VkIGJsb2IuCi0gICAgbG9uZyBsb25nIG1fc3RhcnQ7Ci0KLSAgICAvLyBUaGUgbGVuZ3Ro
IG9mIHRoZSBmaWxlLWJhc2VkIGJsb2IuIFRoZSB2YWx1ZSBvZiAtMSBtZWFucyB0byB0aGUgZW5k
IG9mIHRoZSBmaWxlLgotICAgIGxvbmcgbG9uZyBtX2xlbmd0aDsKLQotICAgIC8vIEEgZmxhZyB0
byB0ZWxsIGlmIGEgc25hcHNob3QgaGFzIGJlZW4gY2FwdHVyZWQuCi0gICAgYm9vbCBtX3NuYXBz
aG90Q2FwdHVyZWQ7Ci0KLSAgICAvLyBUaGUgc2l6ZSBvZiB0aGUgZmlsZSB3aGVuIGEgc25hcHNo
b3QgaXMgY2FwdHVyZWQuIEl0IGNhbiBiZSAwIGlmIHRoZSBmaWxlIGlzIGVtcHR5LgotICAgIGxv
bmcgbG9uZyBtX3NuYXBzaG90U2l6ZTsKLQotICAgIC8vIFRoZSBsYXN0IG1vZGlmaWNhdGlvbiB0
aW1lIG9mIHRoZSBmaWxlIHdoZW4gYSBzbmFwc2hvdCBpcyBjYXB0dXJlZC4gVGhlIHZhbHVlIG9m
IDAgYWxzbyBtZWFucyB0aGF0IHRoZSBzbmFwc2hvdCBpcyBub3QgY2FwdHVyZWQuCi0gICAgZG91
YmxlIG1fc25hcHNob3RNb2RpZmljYXRpb25UaW1lOwotI2VuZGlmCisgICAgVmVjdG9yPFJlZlB0
cjxCbG9iSXRlbT4gPiBtX2l0ZW1MaXN0OworICAgIGNvbnN0IFN0cmluZyBtX3R5cGU7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvQmxvYkl0
ZW0uY3BwIGIvV2ViQ29yZS9odG1sL0Jsb2JJdGVtLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NDNhNjY5NmVj
NGEzMTRkN2E3OWJhNGFlYzlmMTU3NWViOTc4MjdlCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29y
ZS9odG1sL0Jsb2JJdGVtLmNwcApAQCAtMCwwICsxLDMxMSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2luY2x1ZGUgIkJsb2JJdGVtLmgiCisKKyNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCisjaW5j
bHVkZSAiVVVJRC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NoYXIqIEJsb2JJdGVtOjpy
ZWxlYXNlQnVmZmVyKCkgY29uc3QKK3sKKyAgICBWZWN0b3I8Y2hhcj4gdjsKKyAgICB2LmFwcGVu
ZChkYXRhKCksIHN0YXRpY19jYXN0PHNpemVfdD4oc2l6ZSgpKSk7CisgICAgcmV0dXJuIHYucmVs
ZWFzZUJ1ZmZlcigpOworfQorCitQYXNzUmVmUHRyPEJsb2JJdGVtPiBCbG9iSXRlbTo6Y3JlYXRl
RmlsZUJsb2JJdGVtKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYo
c3RhdGljX2Nhc3Q8QmxvYkl0ZW0qPihuZXcgRmlsZUJsb2JJdGVtKHBhdGgpKSk7Cit9CisKK1Bh
c3NSZWZQdHI8QmxvYkl0ZW0+IEJsb2JJdGVtOjpjcmVhdGVTdHJpbmdCbG9iSXRlbShjb25zdCBT
dHJpbmcmIHRleHQsIEVuZGluZ1R5cGUgZW5kaW5nLCBUZXh0RW5jb2RpbmcgZW5jb2RpbmcpCit7
CisgICAgcmV0dXJuIGFkb3B0UmVmKHN0YXRpY19jYXN0PEJsb2JJdGVtKj4obmV3IFN0cmluZ0Js
b2JJdGVtKHRleHQsIGVuZGluZywgZW5jb2RpbmcpKSk7Cit9CisKK1Bhc3NSZWZQdHI8QmxvYkl0
ZW0+IEJsb2JJdGVtOjpjcmVhdGVTdHJpbmdCbG9iSXRlbShjb25zdCBDU3RyaW5nJiB0ZXh0KQor
eworICAgIHJldHVybiBhZG9wdFJlZihzdGF0aWNfY2FzdDxCbG9iSXRlbSo+KG5ldyBTdHJpbmdC
bG9iSXRlbSh0ZXh0KSkpOworfQorCitQYXNzUmVmUHRyPEJsb2JJdGVtPiBCbG9iSXRlbTo6Y3Jl
YXRlQnl0ZXNBcnJheUJsb2JJdGVtKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBzaXplKQorewor
ICAgIHJldHVybiBhZG9wdFJlZihzdGF0aWNfY2FzdDxCbG9iSXRlbSo+KG5ldyBCeXRlc0FycmF5
QmxvYkl0ZW0oZGF0YSwgc2l6ZSkpKTsKK30KKworI2lmIEVOQUJMRShCTE9CX1NMSUNFKQorc3Rh
dGljIGNvbnN0IGRvdWJsZSBpbnZhbGlkTW9kaWZpY2F0aW9uVGltZSA9IC0xOworCitkb3VibGUg
Z2V0RmlsZVNuYXBzaG90TW9kaWZpY2F0aW9uVGltZShjb25zdCBTdHJpbmcmIHBhdGgpCit7Cisg
ICAgLy8gRklYTUU6IHN5bmNocm9uaXplZCBmaWxlIGNhbGwKKyAgICB0aW1lX3QgbW9kaWZpY2F0
aW9uVGltZTsKKyAgICBpZiAoZ2V0RmlsZU1vZGlmaWNhdGlvblRpbWUocGF0aCwgbW9kaWZpY2F0
aW9uVGltZSkpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KG1vZGlmaWNhdGlv
blRpbWUpOworICAgIHJldHVybiBpbnZhbGlkTW9kaWZpY2F0aW9uVGltZTsKK30KKworUGFzc1Jl
ZlB0cjxCbG9iSXRlbT4gQmxvYkl0ZW06OmNyZWF0ZVJhbmdlQmxvYkl0ZW0oUGFzc1JlZlB0cjxC
bG9iSXRlbT4gaXRlbSwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoKQoreworICAg
IEFTU0VSVChzdGFydCA+PSAwICYmIGxlbmd0aCA+PSAwKTsKKyAgICBpZiAoIXN0YXJ0ICYmIGl0
ZW0tPnNpemUoKSA8PSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KGxlbmd0aCkpCisg
ICAgICAgIHJldHVybiBpdGVtOworICAgIGNvbnN0IEZpbGVCbG9iSXRlbSogZmlsZUl0ZW0gPSBp
dGVtLT50b0ZpbGVCbG9iSXRlbSgpOworICAgIGlmIChmaWxlSXRlbSkgeworICAgICAgICBjb25z
dCBGaWxlUmFuZ2VCbG9iSXRlbSogZmlsZVJhbmdlSXRlbSA9IGl0ZW0tPnRvRmlsZVJhbmdlQmxv
Ykl0ZW0oKTsKKyAgICAgICAgaWYgKGZpbGVSYW5nZUl0ZW0pIHsKKyAgICAgICAgICAgIGlmIChz
dGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KHN0YXJ0ICsgbGVuZ3RoKSA+IGl0ZW0tPnNp
emUoKSkKKyAgICAgICAgICAgICAgICBsZW5ndGggPSBpdGVtLT5zaXplKCkgLSBzdGFydDsKKyAg
ICAgICAgICAgIHN0YXJ0ICs9IGZpbGVSYW5nZUl0ZW0tPnN0YXJ0KCk7CisgICAgICAgICAgICBy
ZXR1cm4gY3JlYXRlRmlsZVJhbmdlQmxvYkl0ZW0oZmlsZUl0ZW0tPnBhdGgoKSwgc3RhcnQsIGxl
bmd0aCwgZmlsZVJhbmdlSXRlbS0+c25hcHNob3RNb2RpZmljYXRpb25UaW1lKCkpOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBjcmVhdGVGaWxlUmFuZ2VCbG9iSXRlbShmaWxlSXRlbS0+cGF0
aCgpLCBzdGFydCwgbGVuZ3RoLCBnZXRGaWxlU25hcHNob3RNb2RpZmljYXRpb25UaW1lKGZpbGVJ
dGVtLT5wYXRoKCkpKTsKKyAgICB9CisgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcg
bG9uZz4oc3RhcnQgKyBsZW5ndGgpID4gaXRlbS0+c2l6ZSgpKQorICAgICAgICBsZW5ndGggPSBp
dGVtLT5zaXplKCkgLSBzdGFydDsKKyAgICByZXR1cm4gYWRvcHRSZWYoc3RhdGljX2Nhc3Q8Qmxv
Ykl0ZW0qPihuZXcgRGF0YVJhbmdlQmxvYkl0ZW0oaXRlbSwgc3RhcnQsIGxlbmd0aCkpKTsKK30K
KworUGFzc1JlZlB0cjxCbG9iSXRlbT4gQmxvYkl0ZW06OmNyZWF0ZUZpbGVSYW5nZUJsb2JJdGVt
KGNvbnN0IFN0cmluZyYgcGF0aCwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoLCBk
b3VibGUgc25hcHNob3RNb2RpZmljYXRpb25UaW1lKQoreworICAgIHJldHVybiBhZG9wdFJlZihz
dGF0aWNfY2FzdDxCbG9iSXRlbSo+KG5ldyBGaWxlUmFuZ2VCbG9iSXRlbShwYXRoLCBzdGFydCwg
bGVuZ3RoLCBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUpKSk7Cit9CisjZW5kaWYgLy8gRU5BQkxF
KEJMT0JfU0xJQ0UpCisKKy8vIEZpbGVCbG9iSXRlbSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZpbGVCbG9iSXRlbTo6
RmlsZUJsb2JJdGVtKGNvbnN0IFN0cmluZyYgcGF0aCkKKyAgICA6IG1fcGF0aChwYXRoKQorICAg
ICwgbV9maWxlTmFtZShwYXRoR2V0RmlsZU5hbWUobV9wYXRoKSkKK3sKK30KKwordW5zaWduZWQg
bG9uZyBsb25nIEZpbGVCbG9iSXRlbTo6c2l6ZSgpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IHN5
bmNocm9uaXplZCBmaWxlIGNhbGwKKyAgICBsb25nIGxvbmcgc2l6ZTsKKyAgICBpZiAoIWdldEZp
bGVTaXplKG1fcGF0aCwgc2l6ZSkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBzdGF0
aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KHNpemUpOworfQorCitQYXNzUmVmUHRyPEJsb2JJ
dGVtPiBGaWxlQmxvYkl0ZW06OmRlZXBDb3B5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gQmxvYkl0
ZW06OmNyZWF0ZUZpbGVCbG9iSXRlbShtX3BhdGgpOworfQorCitib29sIEZpbGVCbG9iSXRlbTo6
ZXF1YWxzKGNvbnN0IEJsb2JJdGVtKiBiKSBjb25zdAoreworICAgIGNvbnN0IEZpbGVCbG9iSXRl
bSogZmlsZUl0ZW0gPSBiLT50b0ZpbGVCbG9iSXRlbSgpOworICAgIGlmICghZmlsZUl0ZW0gfHwg
bV9wYXRoICE9IGZpbGVJdGVtLT5tX3BhdGgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworLy8gU3RyaW5nQmxvYkl0ZW0gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU3RyaW5nQmxvYkl0
ZW06OlN0cmluZ0Jsb2JJdGVtKGNvbnN0IFN0cmluZyYgdGV4dCwgRW5kaW5nVHlwZSBlbmRpbmcs
IFRleHRFbmNvZGluZyBlbmNvZGluZykKK3sKKyAgICBDU3RyaW5nIGZyb20gPSBlbmNvZGluZy5l
bmNvZGUodGV4dC5jaGFyYWN0ZXJzKCksIHRleHQubGVuZ3RoKCksIEVudGl0aWVzRm9yVW5lbmNv
ZGFibGVzKTsKKyAgICBtX2RhdGEgPSBmcm9tOworCisgICAgaWYgKGVuZGluZyA9PSBFbmRpbmdU
cmFuc3BhcmVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3QgY2hhciogZW5kaW5nQ2hh
cnMgPSAoZW5kaW5nID09IEVuZGluZ0NSTEYpID8gIlxyXG4iIDogKChlbmRpbmcgPT0gRW5kaW5n
Q1IpID8gIlxyIiA6ICJcbiIpOworCisgICAgaW50IGVuZGluZ0xlbmd0aCA9IChlbmRpbmcgPT0g
RW5kaW5nQ1JMRikgPyAyIDogMTsKKyAgICBpbnQgbmVlZEZpeCA9IDA7CisKKyAgICAvLyBDYWxj
dWxhdGUgdGhlIGZpbmFsIGxlbmd0aC4KKyAgICBpbnQgY2FsY3VsYXRlZExlbmd0aCA9IGZyb20u
bGVuZ3RoKCk7CisgICAgY29uc3QgY2hhciogcCA9IGZyb20uZGF0YSgpOworICAgIHdoaWxlIChj
aGFyIGMgPSAqcCsrKSB7CisgICAgICAgIGlmIChjID09ICdccicpIHsKKyAgICAgICAgICAgIC8v
IFNhZmUgdG8gbG9vayBhaGVhZCBiZWNhdXNlIG9mIHRyYWlsaW5nICdcMCcuCisgICAgICAgICAg
ICBpZiAoKnAgPT0gJ1xuJyAmJiBlbmRpbmcgIT0gRW5kaW5nQ1JMRikgeworICAgICAgICAgICAg
ICAgIGNhbGN1bGF0ZWRMZW5ndGggKz0gKGVuZGluZ0xlbmd0aCAtIDIpOworICAgICAgICAgICAg
ICAgICsrbmVlZEZpeDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoZW5kaW5nICE9IEVuZGluZ0NS
KSB7CisgICAgICAgICAgICAgICAgY2FsY3VsYXRlZExlbmd0aCArPSAoZW5kaW5nTGVuZ3RoIC0g
MSk7CisgICAgICAgICAgICAgICAgKytuZWVkRml4OworICAgICAgICAgICAgfQorICAgICAgICB9
IGVsc2UgaWYgKGMgPT0gJ1xuJyAmJiBlbmRpbmcgIT0gRW5kaW5nTEYpIHsKKyAgICAgICAgICAg
IGNhbGN1bGF0ZWRMZW5ndGggKz0gKGVuZGluZ0xlbmd0aCAtIDEpOworICAgICAgICAgICAgKytu
ZWVkRml4OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFuZWVkRml4KQorICAgICAgICBy
ZXR1cm47CisKKyAgICAvLyBDb252ZXJ0IHRoZSBlbmRpbmdzIGFuZCBjcmVhdGUgYSBkYXRhIGJ1
ZmZlci4KKyAgICBwID0gZnJvbS5kYXRhKCk7CisgICAgY2hhciogcTsKKyAgICBtX2RhdGEgPSBD
U3RyaW5nOjpuZXdVbmluaXRpYWxpemVkKGNhbGN1bGF0ZWRMZW5ndGgsIHEpOworICAgIHdoaWxl
IChjaGFyIGMgPSAqcCsrKSB7CisgICAgICAgIGlmIChjID09ICdccicpIHsKKyAgICAgICAgICAg
IGlmICgqcCA9PSAnXG4nICYmIGVuZGluZyAhPSBFbmRpbmdDUkxGKSB7CisgICAgICAgICAgICAg
ICAgbWVtY3B5KHEsIGVuZGluZ0NoYXJzLCBlbmRpbmdMZW5ndGgpOworICAgICAgICAgICAgICAg
IHEgKz0gZW5kaW5nTGVuZ3RoOworICAgICAgICAgICAgfSBlbHNlIGlmICgqcCAhPSAnXG4nICYm
IGVuZGluZyAhPSBFbmRpbmdDUikgeworICAgICAgICAgICAgICAgIG1lbWNweShxLCBlbmRpbmdD
aGFycywgZW5kaW5nTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBxICs9IGVuZGluZ0xlbmd0aDsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChjID09ICdcbicgJiYgZW5kaW5nICE9
IEVuZGluZ0xGKSB7CisgICAgICAgICAgICBtZW1jcHkocSwgZW5kaW5nQ2hhcnMsIGVuZGluZ0xl
bmd0aCk7CisgICAgICAgICAgICBxICs9IGVuZGluZ0xlbmd0aDsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIC8vIExlYXZlIG90aGVyIGNoYXJhY3RlcnMgYWxvbmUuCisgICAgICAgICAg
ICAqcSsrID0gYzsKKyAgICAgICAgfQorICAgIH0KK30KKworU3RyaW5nQmxvYkl0ZW06OlN0cmlu
Z0Jsb2JJdGVtKGNvbnN0IENTdHJpbmcmIHRleHQpCisgICAgOiBtX2RhdGEodGV4dCkKK3sKK30K
KworUGFzc1JlZlB0cjxCbG9iSXRlbT4gU3RyaW5nQmxvYkl0ZW06OmRlZXBDb3B5KCkgY29uc3QK
K3sKKyAgICByZXR1cm4gQmxvYkl0ZW06OmNyZWF0ZVN0cmluZ0Jsb2JJdGVtKENTdHJpbmcobV9k
YXRhLmRhdGEoKSwgbV9kYXRhLmxlbmd0aCgpKSk7Cit9CisKK2Jvb2wgU3RyaW5nQmxvYkl0ZW06
OmVxdWFscyhjb25zdCBCbG9iSXRlbSogYikgY29uc3QKK3sKKyAgICBjb25zdCBTdHJpbmdCbG9i
SXRlbSogc3RyaW5nSXRlbSA9IGItPnRvU3RyaW5nQmxvYkl0ZW0oKTsKKyAgICBpZiAoIXN0cmlu
Z0l0ZW0pCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gKHN0cmluZ0l0ZW0gJiYg
ZGF0YSgpID09IGItPmRhdGEoKSAmJiBzaXplKCkgPT0gYi0+c2l6ZSgpKTsKK30KKworLy8gQnl0
ZXNBcnJheUJsb2JJdGVtIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKworQnl0ZXNBcnJheUJsb2JJdGVtOjpCeXRlc0FycmF5QmxvYkl0
ZW0oY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IHNpemUpCit7CisgICAgbV9ieXRlc0FycmF5LmFw
cGVuZChkYXRhLCBzaXplKTsKK30KKworUGFzc1JlZlB0cjxCbG9iSXRlbT4gQnl0ZXNBcnJheUJs
b2JJdGVtOjpkZWVwQ29weSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEJsb2JJdGVtOjpjcmVhdGVC
eXRlc0FycmF5QmxvYkl0ZW0obV9ieXRlc0FycmF5LmRhdGEoKSwgbV9ieXRlc0FycmF5LnNpemUo
KSk7Cit9CisKK2Jvb2wgQnl0ZXNBcnJheUJsb2JJdGVtOjplcXVhbHMoY29uc3QgQmxvYkl0ZW0q
IGIpIGNvbnN0Cit7CisgICAgcmV0dXJuIChkYXRhKCkgPT0gYi0+ZGF0YSgpICYmIHNpemUoKSA9
PSBiLT5zaXplKCkpOworfQorCisjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCisKKy8vIERhdGFSYW5n
ZUJsb2JJdGVtIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisKK0RhdGFSYW5nZUJsb2JJdGVtOjpEYXRhUmFuZ2VCbG9iSXRlbShQYXNz
UmVmUHRyPEJsb2JJdGVtPiBpdGVtLCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgp
CisgICAgOiBtX2l0ZW0oaXRlbSkKKyAgICAsIG1fc3RhcnQoc3RhcnQpCisgICAgLCBtX2xlbmd0
aChsZW5ndGgpCit7CisgICAgQVNTRVJUKCFtX2l0ZW0tPnRvRmlsZUJsb2JJdGVtKCkpOworICAg
IGlmIChtX2l0ZW0tPnRvRGF0YVJhbmdlQmxvYkl0ZW0oKSkgeworICAgICAgICBjb25zdCBEYXRh
UmFuZ2VCbG9iSXRlbSogciA9IG1faXRlbS0+dG9EYXRhUmFuZ2VCbG9iSXRlbSgpOworICAgICAg
ICBtX3N0YXJ0ICs9IHItPm1fc3RhcnQ7CisgICAgICAgIG1faXRlbSA9IHItPm1faXRlbTsKKyAg
ICAgICAgQVNTRVJUKCFtX2l0ZW0tPnRvRGF0YVJhbmdlQmxvYkl0ZW0oKSk7CisgICAgICAgIEFT
U0VSVChzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KG1fc3RhcnQgKyBtX2xlbmd0aCkg
PD0gbV9pdGVtLT5zaXplKCkpOworICAgIH0KK30KKworY29uc3QgY2hhciogRGF0YVJhbmdlQmxv
Ykl0ZW06OmRhdGEoKSBjb25zdAoreworICAgIHJldHVybiBtX2l0ZW0tPmRhdGEoKSArIG1fc3Rh
cnQ7Cit9CisKK1Bhc3NSZWZQdHI8QmxvYkl0ZW0+IERhdGFSYW5nZUJsb2JJdGVtOjpkZWVwQ29w
eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEJsb2JJdGVtOjpjcmVhdGVSYW5nZUJsb2JJdGVtKG1f
aXRlbS0+ZGVlcENvcHkoKSwgbV9zdGFydCwgbV9sZW5ndGgpOworfQorCitib29sIERhdGFSYW5n
ZUJsb2JJdGVtOjplcXVhbHMoY29uc3QgQmxvYkl0ZW0qIGIpIGNvbnN0Cit7CisgICAgY29uc3Qg
RGF0YVJhbmdlQmxvYkl0ZW0qIHJhbmdlSXRlbSA9IGItPnRvRGF0YVJhbmdlQmxvYkl0ZW0oKTsK
KyAgICBpZiAoIXJhbmdlSXRlbSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3N0
YXJ0ICE9IHJhbmdlSXRlbS0+bV9zdGFydCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlm
ICghbV9pdGVtLT5lcXVhbHMocmFuZ2VJdGVtLT5tX2l0ZW0uZ2V0KCkpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vIEZpbGVSYW5nZUJsb2JJdGVtIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisKK0ZpbGVSYW5nZUJsb2JJdGVtOjpGaWxlUmFuZ2VCbG9iSXRlbShjb25zdCBTdHJpbmcmIHBh
dGgsIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCwgZG91YmxlIG1vZGlmaWNhdGlv
blRpbWUpCisgICAgOiBGaWxlQmxvYkl0ZW0ocGF0aCkKKyAgICAsIG1fc3RhcnQoc3RhcnQpCisg
ICAgLCBtX2xlbmd0aChsZW5ndGgpCisgICAgLCBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZSht
b2RpZmljYXRpb25UaW1lKQoreworICAgIG1fdW5pcXVlTmFtZSA9ICJCbG9iIiArIGNyZWF0ZUNh
bm9uaWNhbFVVSURTdHJpbmcoKTsKKyAgICBtX3VuaXF1ZU5hbWUucmVwbGFjZSgiLSIsICIiKTsg
Ly8gRm9yIHNhZnR5LCByZW1vdmUgJy0nIGZyb20gdGhlIGZpbGVuYW1lIHNuY2Ugc29tZSBzZXJ2
ZXJzIG1heSBub3QgbGlrZSBpdC4KK30KKworUGFzc1JlZlB0cjxCbG9iSXRlbT4gRmlsZVJhbmdl
QmxvYkl0ZW06OmRlZXBDb3B5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gQmxvYkl0ZW06OmNyZWF0
ZUZpbGVSYW5nZUJsb2JJdGVtKHBhdGgoKSwgbV9zdGFydCwgbV9sZW5ndGgsIG1fc25hcHNob3RN
b2RpZmljYXRpb25UaW1lKTsKK30KKworYm9vbCBGaWxlUmFuZ2VCbG9iSXRlbTo6ZXF1YWxzKGNv
bnN0IEJsb2JJdGVtKiBiKSBjb25zdAoreworICAgIGlmICghRmlsZUJsb2JJdGVtOjplcXVhbHMo
YikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjb25zdCBGaWxlUmFuZ2VCbG9iSXRlbSog
cmFuZ2VJdGVtID0gYi0+dG9GaWxlUmFuZ2VCbG9iSXRlbSgpOworICAgIGlmICghcmFuZ2VJdGVt
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fc3RhcnQgIT0gcmFuZ2VJdGVtLT5t
X3N0YXJ0IHx8IG1fdW5pcXVlTmFtZSAhPSByYW5nZUl0ZW0tPm1fdW5pcXVlTmFtZSB8fCBtX3Nu
YXBzaG90TW9kaWZpY2F0aW9uVGltZSAhPSByYW5nZUl0ZW0tPm1fc25hcHNob3RNb2RpZmljYXRp
b25UaW1lKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgRmlsZVJhbmdlQmxvYkl0ZW06OmlzVmFsaWQoKSBjb25zdAoreworICAgIC8vIDwgMCBpbmRp
Y2F0ZXMgaW52YWxpZE1vZGlmaWNhdGlvblRpbWUgKGkuZS4gaW5pdGlhbGl6YXRpb24gaGFzIGJl
ZW4gZmFpbGVkKS4KKyAgICBpZiAobV9zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUgPCAwKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG1fc25hcHNob3RNb2RpZmljYXRpb25UaW1l
ID09IGdldEZpbGVTbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUocGF0aCgpKTsKK30KKworI2VuZGlm
IC8vIEVOQUJMRShCTE9CX1NMSUNFKQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2h0bWwvQmxvYkl0ZW0uaCBiL1dlYkNvcmUvaHRtbC9CbG9iSXRlbS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmViOGMwODgyMzNjMzA1ZjEyM2IwNjIwOGEwYTliNzk3YTRlY2MyODEKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJDb3JlL2h0bWwvQmxvYkl0ZW0uaApAQCAtMCwwICsxLDE4OCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIEJsb2JJdGVtX2gKKyNkZWZpbmUgQmxvYkl0ZW1faAorCisjaW5jbHVkZSAiUGxhdGZv
cm1TdHJpbmcuaCIKKyNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKKyNpbmNsdWRlIDx3dGYvT3du
UHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCisvLyBTdHJpbmcgZW5kaW5nIHR5cGVzLgorZW51bSBFbmRpbmdUeXBlIHsKKyAgICBF
bmRpbmdUcmFuc3BhcmVudCA9IDAsCisgICAgRW5kaW5nTEYsCisgICAgRW5kaW5nQ1IsCisgICAg
RW5kaW5nQ1JMRiwKK307CisKK2NsYXNzIERhdGFSYW5nZUJsb2JJdGVtOworY2xhc3MgRmlsZUJs
b2JJdGVtOworY2xhc3MgRmlsZVJhbmdlQmxvYkl0ZW07CitjbGFzcyBTdHJpbmdCbG9iSXRlbTsK
KworLy8gQSBiYXNlIGludGVyZmFjZSBmb3IgYWxsICdibG9iJyBpdGVtcyAoZmlsZSwgc3RyaW5n
IG9yIGJ5dGVzIGFycmF5KS4KK2NsYXNzIEJsb2JJdGVtIDogcHVibGljIFJlZkNvdW50ZWQ8Qmxv
Ykl0ZW0+IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5CbG9iSXRlbSgpIHsgfQorICAgIHZpcnR1
YWwgdW5zaWduZWQgbG9uZyBsb25nIHNpemUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBjb25z
dCBjaGFyKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIGNoYXIqIHJlbGVhc2VCdWZm
ZXIoKSBjb25zdDsKKworICAgIC8vIEZhY3RvcnkgbWV0aG9kcy4KKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxCbG9iSXRlbT4gY3JlYXRlU3RyaW5nQmxvYkl0ZW0oY29uc3QgU3RyaW5nJiwgRW5kaW5n
VHlwZSwgVGV4dEVuY29kaW5nKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCbG9iSXRlbT4gY3Jl
YXRlU3RyaW5nQmxvYkl0ZW0oY29uc3QgQ1N0cmluZyYpOworICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEJsb2JJdGVtPiBjcmVhdGVCeXRlc0FycmF5QmxvYkl0ZW0oY29uc3QgY2hhciogZGF0YSwgc2l6
ZV90IHNpemUpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJsb2JJdGVtPiBjcmVhdGVGaWxlQmxv
Ykl0ZW0oY29uc3QgU3RyaW5nJiBwYXRoKTsKKworI2lmIEVOQUJMRShCTE9CX1NMSUNFKQorICAg
IC8vIENyZWF0ZXMgRGF0YVJuYWdlQmxvYkl0ZW0gb3IgRmlsZVJhbmdlQmxvYkl0ZW0uCisgICAg
c3RhdGljIFBhc3NSZWZQdHI8QmxvYkl0ZW0+IGNyZWF0ZVJhbmdlQmxvYkl0ZW0oUGFzc1JlZlB0
cjxCbG9iSXRlbT4gaXRlbSwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoKTsKKyAg
ICAvLyBDcmVhdGVzIEZpbGVSYW5nZUJsb2JJdGVtLgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJs
b2JJdGVtPiBjcmVhdGVGaWxlUmFuZ2VCbG9iSXRlbShjb25zdCBTdHJpbmcmIHBhdGgsIGxvbmcg
bG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCwgZG91YmxlIHNuYXBzaG90TW9kaWZpY2F0aW9u
VGltZSk7CisjZW5kaWYgLy8gRU5BQkxFKEJMT0JfU0xJQ0UpCisKKyAgICAvLyBSZXR1cm5zIGZh
bHNlIGlmIHRoZSBkYXRhIGhhcyBiZWNvbWUgc3RhbGUgb3IgaW52YWxpZC4KKyAgICB2aXJ0dWFs
IGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKworICAgIHZpcnR1YWwgY29u
c3QgU3RyaW5nQmxvYkl0ZW0qIHRvU3RyaW5nQmxvYkl0ZW0oKSBjb25zdCB7IHJldHVybiAwOyB9
CisgICAgdmlydHVhbCBjb25zdCBGaWxlQmxvYkl0ZW0qIHRvRmlsZUJsb2JJdGVtKCkgY29uc3Qg
eyByZXR1cm4gMDsgfQorI2lmIEVOQUJMRShCTE9CX1NMSUNFKQorICAgIHZpcnR1YWwgY29uc3Qg
RGF0YVJhbmdlQmxvYkl0ZW0qIHRvRGF0YVJhbmdlQmxvYkl0ZW0oKSBjb25zdCB7IHJldHVybiAw
OyB9CisgICAgdmlydHVhbCBjb25zdCBGaWxlUmFuZ2VCbG9iSXRlbSogdG9GaWxlUmFuZ2VCbG9i
SXRlbSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyNlbmRpZiAvLyBFTkFCTEUoQkxPQl9TTElDRSkK
KworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxCbG9iSXRlbT4gZGVlcENvcHkoKSBjb25zdCA9IDA7
CisgICAgdmlydHVhbCBib29sIGVxdWFscyhjb25zdCBCbG9iSXRlbSopIGNvbnN0ID0gMDsKKwor
cHJvdGVjdGVkOgorICAgIEJsb2JJdGVtKCkgeyB9Cit9OworCitjbGFzcyBTdHJpbmdCbG9iSXRl
bSA6IHB1YmxpYyBCbG9iSXRlbSB7CitwdWJsaWM6CisgICAgU3RyaW5nQmxvYkl0ZW0oY29uc3Qg
U3RyaW5nJiwgRW5kaW5nVHlwZSwgVGV4dEVuY29kaW5nKTsKKyAgICBTdHJpbmdCbG9iSXRlbShj
b25zdCBDU3RyaW5nJik7CisgICAgY29uc3QgQ1N0cmluZyYgY3N0cigpIGNvbnN0IHsgcmV0dXJu
IG1fZGF0YTsgfQorCisgICAgLy8gQmxvYkl0ZW0gbWV0aG9kcy4KKyAgICB2aXJ0dWFsIHVuc2ln
bmVkIGxvbmcgbG9uZyBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmxlbmd0aCgpOyB9Cisg
ICAgdmlydHVhbCBjb25zdCBjaGFyKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmRhdGEo
KTsgfQorICAgIHZpcnR1YWwgY29uc3QgU3RyaW5nQmxvYkl0ZW0qIHRvU3RyaW5nQmxvYkl0ZW0o
KSBjb25zdCB7IHJldHVybiB0aGlzOyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEJsb2JJdGVt
PiBkZWVwQ29weSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBlcXVhbHMoY29uc3QgQmxvYkl0
ZW0qKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBtdXRhYmxlIENTdHJpbmcgbV9kYXRhOworfTsK
KworY2xhc3MgQnl0ZXNBcnJheUJsb2JJdGVtIDogcHVibGljIEJsb2JJdGVtIHsKK3B1YmxpYzoK
KyAgICBCeXRlc0FycmF5QmxvYkl0ZW0oY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IHNpemUpOwor
ICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBsb25nIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2J5
dGVzQXJyYXkuc2l6ZSgpOyB9CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiBkYXRhKCkgY29uc3Qg
eyByZXR1cm4gbV9ieXRlc0FycmF5LmRhdGEoKTsgfQorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxC
bG9iSXRlbT4gZGVlcENvcHkoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZXF1YWxzKGNvbnN0
IEJsb2JJdGVtKikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPGNoYXI+IG1fYnl0ZXNB
cnJheTsKK307CisKK2NsYXNzIEZpbGVCbG9iSXRlbSA6IHB1YmxpYyBCbG9iSXRlbSB7CitwdWJs
aWM6CisgICAgRmlsZUJsb2JJdGVtKGNvbnN0IFN0cmluZyYgcGF0aCk7CisgICAgdmlydHVhbCBj
b25zdCBTdHJpbmcmIHVuaXF1ZU5hbWUoKSBjb25zdCB7IHJldHVybiBtX2ZpbGVOYW1lOyB9Cisg
ICAgdmlydHVhbCBjb25zdCBTdHJpbmcmIHBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0K
KworICAgIC8vIEJsb2JJdGVtIG1ldGhvZHMuCisgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxv
bmcgc2l6ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgY29uc3QgRmlsZUJsb2JJdGVtKiB0b0ZpbGVC
bG9iSXRlbSgpIGNvbnN0IHsgcmV0dXJuIHRoaXM7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
QmxvYkl0ZW0+IGRlZXBDb3B5KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGVxdWFscyhjb25z
dCBCbG9iSXRlbSopIGNvbnN0OworCitwcml2YXRlOgorICAgIFN0cmluZyBtX3BhdGg7CisgICAg
U3RyaW5nIG1fZmlsZU5hbWU7Cit9OworCisjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCisKKy8vIEJs
b2JJdGVtIGNsYXNzIGZvciBzbGljZWQgZGF0YSAoc3RyaW5nIG9yIGJ5dGVzLWFycmF5KS4KK2Ns
YXNzIERhdGFSYW5nZUJsb2JJdGVtIDogcHVibGljIEJsb2JJdGVtIHsKK3B1YmxpYzoKKyAgICBE
YXRhUmFuZ2VCbG9iSXRlbShQYXNzUmVmUHRyPEJsb2JJdGVtPiBpdGVtLCBsb25nIGxvbmcgc3Rh
cnQsIGxvbmcgbG9uZyBsZW5ndGgpOworCisgICAgLy8gQmxvYkl0ZW0gbWV0aG9kcy4KKyAgICB2
aXJ0dWFsIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7
IH0KKyAgICB2aXJ0dWFsIGNvbnN0IERhdGFSYW5nZUJsb2JJdGVtKiB0b0RhdGFSYW5nZUJsb2JJ
dGVtKCkgY29uc3QgeyByZXR1cm4gdGhpczsgfQorICAgIHZpcnR1YWwgY29uc3QgY2hhciogZGF0
YSgpIGNvbnN0OworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxCbG9iSXRlbT4gZGVlcENvcHkoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZXF1YWxzKGNvbnN0IEJsb2JJdGVtKikgY29uc3Q7CisK
K3ByaXZhdGU6CisgICAgUmVmUHRyPEJsb2JJdGVtPiBtX2l0ZW07CisgICAgbG9uZyBsb25nIG1f
c3RhcnQ7CisgICAgbG9uZyBsb25nIG1fbGVuZ3RoOworfTsKKworY2xhc3MgRmlsZVJhbmdlQmxv
Ykl0ZW0gOiBwdWJsaWMgRmlsZUJsb2JJdGVtIHsKK3B1YmxpYzoKKyAgICBGaWxlUmFuZ2VCbG9i
SXRlbShjb25zdCBTdHJpbmcmIHBhdGgsIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0
aCwgZG91YmxlIHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSk7CisgICAgbG9uZyBsb25nIHN0YXJ0
KCkgY29uc3QgeyByZXR1cm4gbV9zdGFydDsgfQorICAgIGRvdWJsZSBzbmFwc2hvdE1vZGlmaWNh
dGlvblRpbWUoKSBjb25zdCB7IHJldHVybiBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZTsgfQor
CisgICAgLy8gQmxvYkl0ZW0gbWV0aG9kcy4KKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgbG9u
ZyBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IEZp
bGVSYW5nZUJsb2JJdGVtKiB0b0ZpbGVSYW5nZUJsb2JJdGVtKCkgY29uc3QgeyByZXR1cm4gdGhp
czsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3Q7CisgICAgdmlydHVhbCBQYXNz
UmVmUHRyPEJsb2JJdGVtPiBkZWVwQ29weSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBlcXVh
bHMoY29uc3QgQmxvYkl0ZW0qKSBjb25zdDsKKworICAgIC8vIEZpbGVCbG9iSXRlbSBtZXRob2Rz
LgorICAgIHZpcnR1YWwgY29uc3QgU3RyaW5nJiB1bmlxdWVOYW1lKCkgY29uc3QgeyByZXR1cm4g
bV91bmlxdWVOYW1lOyB9CisKK3ByaXZhdGU6CisgICAgbG9uZyBsb25nIG1fc3RhcnQ7CisgICAg
bG9uZyBsb25nIG1fbGVuZ3RoOworICAgIFN0cmluZyBtX3VuaXF1ZU5hbWU7CisKKyAgICBkb3Vi
bGUgbV9zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWU7Cit9OworCisjZW5kaWYgLy8gRU5BQkxFKEJM
T0JfU0xJQ0UpCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEJsb2JJdGVt
X2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9GaWxlLmNwcCBiL1dlYkNvcmUvaHRtbC9GaWxl
LmNwcAppbmRleCA5N2ZkYzQ1NzhkNzRiMjI1ZTU5NDZmNGQ2YWVmMjU2NTI1NDQzYWU0Li45MmI3
ZTU2OTlmNDFjMzA0MjNkMTM2ZDAzMWU5YzMxNTc2OGE5ZTU2IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2h0bWwvRmlsZS5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0ZpbGUuY3BwCkBAIC0zMSwxNCArMzEs
MjIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GaWxlOjpGaWxlKGNvbnN0IFN0cmluZyYg
cGF0aCkKLSAgICA6IEJsb2IocGF0aCkKLSAgICAsIG1fbmFtZShwYXRoR2V0RmlsZU5hbWUocGF0
aCkpCitzdGF0aWMgU3RyaW5nIGdldEZpbGVUeXBlRnJvbVBhdGgoY29uc3QgU3RyaW5nJiBwYXRo
KQogewotICAgIC8vIFdlIGRvbid0IHVzZSBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZv
clBhdGgoKSBiZWNhdXNlIGl0IHJldHVybnMgImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIgdXBv
biBmYWlsdXJlLgotICAgIGludCBpbmRleCA9IG1fbmFtZS5yZXZlcnNlRmluZCgnLicpOworICAg
IGludCBpbmRleCA9IHBhdGgucmV2ZXJzZUZpbmQoJy4nKTsKICAgICBpZiAoaW5kZXggIT0gLTEp
Ci0gICAgICAgIG1fdHlwZSA9IE1JTUVUeXBlUmVnaXN0cnk6OmdldE1JTUVUeXBlRm9yRXh0ZW5z
aW9uKG1fbmFtZS5zdWJzdHJpbmcoaW5kZXggKyAxKSk7CisgICAgICAgIHJldHVybiBNSU1FVHlw
ZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZvckV4dGVuc2lvbihwYXRoLnN1YnN0cmluZyhpbmRleCAr
IDEpKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK0ZpbGU6OkZpbGUoY29uc3QgU3RyaW5n
JiBwYXRoKQorICAgIDogQmxvYihwYXRoLCBnZXRGaWxlVHlwZUZyb21QYXRoKHBhdGgpKQorewor
fQorCitjb25zdCBTdHJpbmcgRmlsZTo6bmFtZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGl0ZW1z
KCkuYXQoMCktPnRvRmlsZUJsb2JJdGVtKCktPnVuaXF1ZU5hbWUoKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0ZpbGUuaCBiL1dlYkNvcmUv
aHRtbC9GaWxlLmgKaW5kZXggMDY1ZGQ4NmE3YjFlYmY3N2ZiNDA2NDZmOWM2ZTg3MDQ2OWQ3ZWIw
OS4uNGNlY2E2NTU5OTYwY2JlM2IwMjU2NzIxZWI0NzhlZmQ3OGY5NGUwZiAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9odG1sL0ZpbGUuaAorKysgYi9XZWJDb3JlL2h0bWwvRmlsZS5oCkBAIC00MSwxOCAr
NDEsMTQgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIGlzRmlsZSgpIGNvbnN0IHsgcmV0
dXJuIHRydWU7IH0KIAotICAgIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1f
bmFtZTsgfQotICAgIGNvbnN0IFN0cmluZyYgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsg
fQorICAgIGNvbnN0IFN0cmluZyBuYW1lKCkgY29uc3Q7CiAKICAgICAvLyBGSVhNRTogb2Jzb2xl
dGUgYXR0cmlidXRlcy4gVG8gYmUgcmVtb3ZlZC4KLSAgICBjb25zdCBTdHJpbmcmIGZpbGVOYW1l
KCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CisgICAgY29uc3QgU3RyaW5nIGZpbGVOYW1lKCkg
Y29uc3QgeyByZXR1cm4gbmFtZSgpOyB9CiAgICAgdW5zaWduZWQgbG9uZyBsb25nIGZpbGVTaXpl
KCkgY29uc3QgeyByZXR1cm4gc2l6ZSgpOyB9CiAKIHByaXZhdGU6CiAgICAgRmlsZShjb25zdCBT
dHJpbmcmIHBhdGgpOwotCi0gICAgU3RyaW5nIG1fbmFtZTsKLSAgICBTdHJpbmcgbV90eXBlOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0Zp
bGVTdHJlYW0uY3BwIGIvV2ViQ29yZS9odG1sL0ZpbGVTdHJlYW0uY3BwCmluZGV4IDcwODlmNjE2
MTU0ZTRiMTBhMzI3NzNlMDMzNTZhNzkzNjQ1OGY5N2YuLjI4NzI4MDJmOTlmM2VmMjJlY2Q1MWYz
ZGRhMmE5OTE2ZTZlMTJkODcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9GaWxlU3RyZWFtLmNw
cAorKysgYi9XZWJDb3JlL2h0bWwvRmlsZVN0cmVhbS5jcHAKQEAgLTkwLDMwICs5MCwyNiBAQCB2
b2lkIEZpbGVTdHJlYW06Om9wZW5Gb3JSZWFkKEJsb2IqIGJsb2IpCiAgICAgfQogCiAjaWYgRU5B
QkxFKEJMT0JfU0xJQ0UpCi0gICAgLy8gQ2hlY2sgdGhlIG1vZGlmaWNhdGlvbnQgdGltZSBmb3Ig
dGhlIHBvc3NpYmxlIGZpbGUgY2hhbmdlLgotICAgIGlmIChibG9iLT5tb2RpZmljYXRpb25UaW1l
KCkgIT0gQmxvYjo6ZG9Ob3RDaGVja0ZpbGVDaGFuZ2UgJiYgc3RhdGljX2Nhc3Q8dGltZV90Pihi
bG9iLT5tb2RpZmljYXRpb25UaW1lKCkpICE9IGN1cnJlbnRNb2RpZmljYXRpb25UaW1lKSB7Ci0g
ICAgICAgIG1fY2xpZW50LT5kaWRGYWlsKE5PVF9SRUFEQUJMRV9FUlIpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgLy8gSnVtcCB0byB0aGUgYmVnaW5uaW5nIHBvc2l0aW9uIGlmIHRo
ZSBmaWxlIGhhcyBiZWVuIHNsaWNlZC4KLSAgICBpZiAoYmxvYi0+c3RhcnQoKSA+IDApIHsKLSAg
ICAgICAgaWYgKCFzZWVrRmlsZShtX2hhbmRsZSwgYmxvYi0+c3RhcnQoKSwgU2Vla0Zyb21CZWdp
bm5pbmcpKSB7CisgICAgY29uc3QgRmlsZVJhbmdlQmxvYkl0ZW0qIHJhbmdlID0gYmxvYi0+aXRl
bXMoKS5hdCgwKS0+dG9GaWxlUmFuZ2VCbG9iSXRlbSgpOworICAgIGlmIChyYW5nZSkgeworICAg
ICAgICAvLyBDaGVjayB0aGUgbW9kaWZpY2F0aW9udCB0aW1lIGZvciB0aGUgcG9zc2libGUgZmls
ZSBjaGFuZ2UuCisgICAgICAgIGlmIChzdGF0aWNfY2FzdDx0aW1lX3Q+KHJhbmdlLT5zbmFwc2hv
dE1vZGlmaWNhdGlvblRpbWUoKSkgIT0gY3VycmVudE1vZGlmaWNhdGlvblRpbWUpIHsKICAgICAg
ICAgICAgIG1fY2xpZW50LT5kaWRGYWlsKE5PVF9SRUFEQUJMRV9FUlIpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CisKKyAgICAgICAgLy8gSnVtcCB0byB0aGUgYmVnaW5uaW5nIHBv
c2l0aW9uIGlmIHRoZSBmaWxlIGhhcyBiZWVuIHNsaWNlZC4KKyAgICAgICAgaWYgKHJhbmdlLT5z
dGFydCgpID4gMCkgeworICAgICAgICAgICAgaWYgKHNlZWtGaWxlKG1faGFuZGxlLCByYW5nZS0+
c3RhcnQoKSwgU2Vla0Zyb21CZWdpbm5pbmcpIDwgMCkgeworICAgICAgICAgICAgICAgIG1fY2xp
ZW50LT5kaWRGYWlsKE5PVF9SRUFEQUJMRV9FUlIpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KICNlbmRpZgogCiAgICAgLy8gR2V0IHRo
ZSBzaXplLgotI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgIG1fdG90YWxCeXRlc1RvUmVhZCA9
IGJsb2ItPmxlbmd0aCgpOwotICAgIGlmIChtX3RvdGFsQnl0ZXNUb1JlYWQgPT0gQmxvYjo6dG9F
bmRPZkZpbGUpCi0gICAgICAgIG1fdG90YWxCeXRlc1RvUmVhZCA9IGJsb2ItPnNpemUoKSAtIGJs
b2ItPnN0YXJ0KCk7Ci0jZWxzZQotICAgIG1fdG90YWwgPSBibG9iLT5zaXplKCk7Ci0jZW5kaWYK
LQorICAgIG1fdG90YWxCeXRlc1RvUmVhZCA9IGJsb2ItPnNpemUoKTsKICAgICBtX2NsaWVudC0+
ZGlkR2V0U2l6ZShtX3RvdGFsQnl0ZXNUb1JlYWQpOwogfQogCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2h0bWwvRm9ybURhdGFMaXN0LmNwcCBiL1dlYkNvcmUvaHRtbC9Gb3JtRGF0YUxpc3QuY3BwCmlu
ZGV4IDI4MWM5ZmU0MThlMWM0ODMzYmI4N2Y4MmY3NGYxY2M0ZDcyMmQ1N2MuLjJiNGJhMGM4MjAw
NjRlYTVkZjY2OWQ5NmJlOTVhMDgyZDVmMGQ3N2IgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9G
b3JtRGF0YUxpc3QuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9Gb3JtRGF0YUxpc3QuY3BwCkBAIC0y
OCw2NCArMjgsMjIgQEAgRm9ybURhdGFMaXN0OjpGb3JtRGF0YUxpc3QoY29uc3QgVGV4dEVuY29k
aW5nJiBjKQogewogfQogCi12b2lkIEZvcm1EYXRhTGlzdDo6YXBwZW5kU3RyaW5nKGNvbnN0IENT
dHJpbmcmIHMpCit2b2lkIEZvcm1EYXRhTGlzdDo6YXBwZW5kU3RyaW5nKGNvbnN0IFN0cmluZyYg
cykKIHsKLSAgICBtX2xpc3QuYXBwZW5kKHMpOworICAgIG1fbGlzdC5hcHBlbmQoQmxvYkl0ZW06
OmNyZWF0ZVN0cmluZ0Jsb2JJdGVtKHMsIEVuZGluZ0NSTEYsIG1fZW5jb2RpbmcpKTsKIH0KIAot
Ly8gQ2hhbmdlIHBsYWluIENSIGFuZCBwbGFpbiBMRiB0byBDUkxGIHBhaXJzLgotc3RhdGljIENT
dHJpbmcgZml4TGluZUJyZWFrcyhjb25zdCBDU3RyaW5nJiBzKQordm9pZCBGb3JtRGF0YUxpc3Q6
OmFwcGVuZFN0cmluZyhjb25zdCBDU3RyaW5nJiBzKQogewotICAgIC8vIENvbXB1dGUgdGhlIGxl
bmd0aC4KLSAgICB1bnNpZ25lZCBuZXdMZW4gPSAwOwotICAgIGNvbnN0IGNoYXIqIHAgPSBzLmRh
dGEoKTsKLSAgICB3aGlsZSAoY2hhciBjID0gKnArKykgewotICAgICAgICBpZiAoYyA9PSAnXHIn
KSB7Ci0gICAgICAgICAgICAvLyBTYWZlIHRvIGxvb2sgYWhlYWQgYmVjYXVzZSBvZiB0cmFpbGlu
ZyAnXDAnLgotICAgICAgICAgICAgaWYgKCpwICE9ICdcbicpIHsKLSAgICAgICAgICAgICAgICAv
LyBUdXJuIENSIGludG8gQ1JMRi4KLSAgICAgICAgICAgICAgICBuZXdMZW4gKz0gMjsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChjID09ICdcbicpIHsKLSAgICAgICAgICAgIC8v
IFR1cm4gTEYgaW50byBDUkxGLgotICAgICAgICAgICAgbmV3TGVuICs9IDI7Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAvLyBMZWF2ZSBvdGhlciBjaGFyYWN0ZXJzIGFsb25lLgotICAg
ICAgICAgICAgbmV3TGVuICs9IDE7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKG5ld0xlbiA9
PSBzLmxlbmd0aCgpKSB7Ci0gICAgICAgIHJldHVybiBzOwotICAgIH0KLSAgICAKLSAgICAvLyBN
YWtlIGEgY29weSBvZiB0aGUgc3RyaW5nLgotICAgIHAgPSBzLmRhdGEoKTsKLSAgICBjaGFyKiBx
OwotICAgIENTdHJpbmcgcmVzdWx0ID0gQ1N0cmluZzo6bmV3VW5pbml0aWFsaXplZChuZXdMZW4s
IHEpOwotICAgIHdoaWxlIChjaGFyIGMgPSAqcCsrKSB7Ci0gICAgICAgIGlmIChjID09ICdccicp
IHsKLSAgICAgICAgICAgIC8vIFNhZmUgdG8gbG9vayBhaGVhZCBiZWNhdXNlIG9mIHRyYWlsaW5n
ICdcMCcuCi0gICAgICAgICAgICBpZiAoKnAgIT0gJ1xuJykgewotICAgICAgICAgICAgICAgIC8v
IFR1cm4gQ1IgaW50byBDUkxGLgotICAgICAgICAgICAgICAgICpxKysgPSAnXHInOwotICAgICAg
ICAgICAgICAgICpxKysgPSAnXG4nOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYg
KGMgPT0gJ1xuJykgewotICAgICAgICAgICAgLy8gVHVybiBMRiBpbnRvIENSTEYuCi0gICAgICAg
ICAgICAqcSsrID0gJ1xyJzsKLSAgICAgICAgICAgICpxKysgPSAnXG4nOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgLy8gTGVhdmUgb3RoZXIgY2hhcmFjdGVycyBhbG9uZS4KLSAgICAg
ICAgICAgICpxKysgPSBjOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgbV9saXN0LmFwcGVuZChCbG9iSXRlbTo6Y3JlYXRlU3RyaW5nQmxvYkl0ZW0ocykpOwogfQog
Ci12b2lkIEZvcm1EYXRhTGlzdDo6YXBwZW5kU3RyaW5nKGNvbnN0IFN0cmluZyYgcykKK3ZvaWQg
Rm9ybURhdGFMaXN0OjphcHBlbmRCbG9iKGNvbnN0IFN0cmluZyYga2V5LCBQYXNzUmVmUHRyPEJs
b2I+IGJsb2IpCiB7Ci0gICAgQ1N0cmluZyBjc3RyID0gZml4TGluZUJyZWFrcyhtX2VuY29kaW5n
LmVuY29kZShzLmNoYXJhY3RlcnMoKSwgcy5sZW5ndGgoKSwgRW50aXRpZXNGb3JVbmVuY29kYWJs
ZXMpKTsKLSAgICBtX2xpc3QuYXBwZW5kKGNzdHIpOworICAgIGFwcGVuZFN0cmluZyhrZXkpOwor
ICAgIGNvbnN0IEJsb2I6Okl0ZW1MaXN0JiBsaXN0ID0gYmxvYi0+aXRlbXMoKTsKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGxpc3Quc2l6ZSgpOyArK2kpCisgICAgICAgIG1fbGlzdC5hcHBl
bmQobGlzdC5hdChpKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2h0bWwvRm9ybURhdGFMaXN0LmggYi9XZWJDb3JlL2h0bWwvRm9ybURhdGFMaXN0LmgKaW5kZXgg
OGVjZjY0ZWU5M2FkNTI0ZjQ3OTIxZjFkODIyZjlhMDhiYTAxM2Q3Yy4uZDg2MTRkNzEwMTAwMzI4
ZDMzYjExNGQzY2RkYWU2MTFiY2FlNzViOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0Zvcm1E
YXRhTGlzdC5oCisrKyBiL1dlYkNvcmUvaHRtbC9Gb3JtRGF0YUxpc3QuaApAQCAtMjEsNyArMjEs
OCBAQAogI2lmbmRlZiBGb3JtRGF0YUxpc3RfaAogI2RlZmluZSBGb3JtRGF0YUxpc3RfaAogCi0j
aW5jbHVkZSAiQmxvYi5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJG
aWxlLmgiCiAjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgogCkBAIC00NiwyNCArNDcsMjMgQEAgcHVibGljOgogICAgICAgICBhcHBlbmRTdHJp
bmcoa2V5KTsKICAgICAgICAgYXBwZW5kU3RyaW5nKFN0cmluZzo6bnVtYmVyKHZhbHVlKSk7CiAg
ICAgfQotICAgIHZvaWQgYXBwZW5kQmxvYihjb25zdCBTdHJpbmcmIGtleSwgUGFzc1JlZlB0cjxC
bG9iPiBibG9iKQotICAgIHsKLSAgICAgICAgYXBwZW5kU3RyaW5nKGtleSk7Ci0gICAgICAgIG1f
bGlzdC5hcHBlbmQoYmxvYik7Ci0gICAgfQorICAgIHZvaWQgYXBwZW5kQmxvYihjb25zdCBTdHJp
bmcmIGtleSwgUGFzc1JlZlB0cjxCbG9iPiBibG9iKTsKIAorICAgIC8vIEEgc2ltcGxlIHdyYXBw
ZXIgZm9yIEJsb2JJdGVtLgogICAgIGNsYXNzIEl0ZW0gewogICAgIHB1YmxpYzoKICAgICAgICAg
SXRlbSgpIHsgfQotICAgICAgICBJdGVtKGNvbnN0IFdURjo6Q1N0cmluZyYgZGF0YSkgOiBtX2Rh
dGEoZGF0YSkgeyB9Ci0gICAgICAgIEl0ZW0oUGFzc1JlZlB0cjxCbG9iPiBibG9iKSA6IG1fYmxv
YihibG9iKSB7IH0KLQotICAgICAgICBjb25zdCBXVEY6OkNTdHJpbmcmIGRhdGEoKSBjb25zdCB7
IHJldHVybiBtX2RhdGE7IH0KLSAgICAgICAgQmxvYiogYmxvYigpIGNvbnN0IHsgcmV0dXJuIG1f
YmxvYi5nZXQoKTsgfQorICAgICAgICBJdGVtKFBhc3NSZWZQdHI8QmxvYkl0ZW0+IGl0ZW0pIDog
bV9pdGVtKGl0ZW0pCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX2l0ZW0tPnRvU3RyaW5n
QmxvYkl0ZW0oKSkKKyAgICAgICAgICAgICAgICBtX2NzdHIgPSBtX2l0ZW0tPnRvU3RyaW5nQmxv
Ykl0ZW0oKS0+Y3N0cigpOworICAgICAgICB9CisgICAgICAgIGNvbnN0IFBhc3NSZWZQdHI8Qmxv
Ykl0ZW0+IGl0ZW0oKSBjb25zdCB7IHJldHVybiBtX2l0ZW07IH0KKyAgICAgICAgY29uc3QgV1RG
OjpDU3RyaW5nJiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9jc3RyOyB9CiAKICAgICBwcml2YXRl
OgotICAgICAgICBXVEY6OkNTdHJpbmcgbV9kYXRhOwotICAgICAgICBSZWZQdHI8QmxvYj4gbV9i
bG9iOworICAgICAgICBSZWZQdHI8QmxvYkl0ZW0+IG1faXRlbTsKKyAgICAgICAgV1RGOjpDU3Ry
aW5nIG1fY3N0cjsKICAgICB9OwogCiAgICAgY29uc3QgVmVjdG9yPEl0ZW0+JiBsaXN0KCkgY29u
c3QgeyByZXR1cm4gbV9saXN0OyB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvRm9ybURhdGEuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcApp
bmRleCA5MTgwMDJhZWZkODFhNjg5MWY5ZjE5YmFmNDRkNzU1OTFmZGZhNDg0Li5mOTNiODA2Yjg1
MmRhZmJlOTBiNmRlNjFjYjAzZjBmZmNmMDFkNzJiIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvRm9ybURhdGEuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9G
b3JtRGF0YS5jcHAKQEAgLTIyLDIwICsyMiw0NSBAQAogI2luY2x1ZGUgIkZvcm1EYXRhLmgiCiAK
ICNpbmNsdWRlICJCbG9iLmgiCisjaW5jbHVkZSAiQmxvYkl0ZW0uaCIKICNpbmNsdWRlICJDaHJv
bWUuaCIKICNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKICNpbmNsdWRlICJET01Gb3JtRGF0YS5o
IgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRmlsZS5oIgogI2luY2x1ZGUgIkZp
bGVTeXN0ZW0uaCIKICNpbmNsdWRlICJGb3JtRGF0YUJ1aWxkZXIuaCIKICNpbmNsdWRlICJNSU1F
VHlwZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlRleHRFbmNvZGlu
Zy5oIgotI2luY2x1ZGUgIlVVSUQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisjaWYgRU5B
QkxFKEJMT0JfU0xJQ0UpCitjb25zdCBsb25nIGxvbmcgRm9ybURhdGFFbGVtZW50Ojp0b0VuZE9m
RmlsZSA9IC0xOworI2VuZGlmCisKK0Zvcm1EYXRhRWxlbWVudDo6Rm9ybURhdGFFbGVtZW50KFBh
c3NSZWZQdHI8QmxvYkl0ZW0+IGJsb2JJdGVtLCBib29sIHNob3VsZEdlbmVyYXRlRmlsZSkKKyAg
ICA6IG1faXRlbShibG9iSXRlbSkKKyAgICAsIG1fdHlwZShtX2l0ZW0tPnRvRmlsZUJsb2JJdGVt
KCkgPyBlbmNvZGVkRmlsZSA6IGRhdGEpCisgICAgLCBtX2RhdGEobV9pdGVtLmdldCgpKQorICAg
ICwgbV9maWxlbmFtZShtX2l0ZW0tPnRvRmlsZUJsb2JJdGVtKCkgPyBtX2l0ZW0tPnRvRmlsZUJs
b2JJdGVtKCktPnBhdGgoKSA6IFN0cmluZygpKQorI2lmIEVOQUJMRShCTE9CX1NMSUNFKQorICAg
ICwgbV9maWxlU3RhcnQoMCkKKyAgICAsIG1fZmlsZUxlbmd0aCh0b0VuZE9mRmlsZSkKKyAgICAs
IG1fZXhwZWN0ZWRGaWxlTW9kaWZpY2F0aW9uVGltZSgwKQorI2VuZGlmCisgICAgLCBtX3Nob3Vs
ZEdlbmVyYXRlRmlsZShzaG91bGRHZW5lcmF0ZUZpbGUpCit7CisjaWYgRU5BQkxFKEJMT0JfU0xJ
Q0UpCisgICAgaWYgKG1faXRlbS0+dG9GaWxlUmFuZ2VCbG9iSXRlbSgpKSB7CisgICAgICAgIGNv
bnN0IEZpbGVSYW5nZUJsb2JJdGVtKiByYW5nZSA9IG1faXRlbS0+dG9GaWxlUmFuZ2VCbG9iSXRl
bSgpOworICAgICAgICBtX2ZpbGVTdGFydCA9IHJhbmdlLT5zdGFydCgpOworICAgICAgICBtX2Zp
bGVMZW5ndGggPSByYW5nZS0+c2l6ZSgpOworICAgICAgICBtX2V4cGVjdGVkRmlsZU1vZGlmaWNh
dGlvblRpbWUgPSByYW5nZS0+c25hcHNob3RNb2RpZmljYXRpb25UaW1lKCk7CisgICAgfQorI2Vu
ZGlmCit9CisKIGlubGluZSBGb3JtRGF0YTo6Rm9ybURhdGEoKQogICAgIDogbV9pZGVudGlmaWVy
KDApCiAgICAgLCBtX2hhc0dlbmVyYXRlZEZpbGVzKGZhbHNlKQpAQCAtODUsNyArMTEwLDcgQEAg
UGFzc1JlZlB0cjxGb3JtRGF0YT4gRm9ybURhdGE6OmNyZWF0ZShjb25zdCB2b2lkKiBkYXRhLCBz
aXplX3Qgc2l6ZSkKIFBhc3NSZWZQdHI8Rm9ybURhdGE+IEZvcm1EYXRhOjpjcmVhdGUoY29uc3Qg
Q1N0cmluZyYgc3RyaW5nKQogewogICAgIFJlZlB0cjxGb3JtRGF0YT4gcmVzdWx0ID0gY3JlYXRl
KCk7Ci0gICAgcmVzdWx0LT5hcHBlbmREYXRhKHN0cmluZy5kYXRhKCksIHN0cmluZy5sZW5ndGgo
KSk7CisgICAgcmVzdWx0LT5hcHBlbmRTdHJpbmcoc3RyaW5nKTsKICAgICByZXR1cm4gcmVzdWx0
LnJlbGVhc2UoKTsKIH0KIApAQCAtMTI1LDQ1ICsxNTAsNDIgQEAgUGFzc1JlZlB0cjxGb3JtRGF0
YT4gRm9ybURhdGE6OmRlZXBDb3B5KCkgY29uc3QKICAgICBmb3JtRGF0YS0+bV9lbGVtZW50cy5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KG4pOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbjsg
KytpKSB7CiAgICAgICAgIGNvbnN0IEZvcm1EYXRhRWxlbWVudCYgZSA9IG1fZWxlbWVudHNbaV07
Ci0gICAgICAgIHN3aXRjaCAoZS5tX3R5cGUpIHsKLSAgICAgICAgY2FzZSBGb3JtRGF0YUVsZW1l
bnQ6OmRhdGE6Ci0gICAgICAgICAgICBmb3JtRGF0YS0+bV9lbGVtZW50cy5hcHBlbmQoRm9ybURh
dGFFbGVtZW50KGUubV9kYXRhKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBG
b3JtRGF0YUVsZW1lbnQ6OmVuY29kZWRGaWxlOgotI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAg
ICAgICAgICAgZm9ybURhdGEtPm1fZWxlbWVudHMuYXBwZW5kKEZvcm1EYXRhRWxlbWVudChlLm1f
ZmlsZW5hbWUsIGUubV9maWxlU3RhcnQsIGUubV9maWxlTGVuZ3RoLCBlLm1fZXhwZWN0ZWRGaWxl
TW9kaWZpY2F0aW9uVGltZSwgZS5tX3Nob3VsZEdlbmVyYXRlRmlsZSkpOwotI2Vsc2UKLSAgICAg
ICAgICAgIGZvcm1EYXRhLT5tX2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVsZW1lbnQoZS5tX2Zp
bGVuYW1lLCBlLm1fc2hvdWxkR2VuZXJhdGVGaWxlKSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9CisgICAgICAgIGZvcm1EYXRhLT5tX2VsZW1lbnRzLmFwcGVuZChGb3Jt
RGF0YUVsZW1lbnQoZS5pdGVtKCktPmRlZXBDb3B5KCksIGUubV9zaG91bGRHZW5lcmF0ZUZpbGUp
KTsKICAgICB9CiAgICAgcmV0dXJuIGZvcm1EYXRhLnJlbGVhc2UoKTsKIH0KIAogdm9pZCBGb3Jt
RGF0YTo6YXBwZW5kRGF0YShjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSkKIHsKLSAgICBp
ZiAobV9lbGVtZW50cy5pc0VtcHR5KCkgfHwgbV9lbGVtZW50cy5sYXN0KCkubV90eXBlICE9IEZv
cm1EYXRhRWxlbWVudDo6ZGF0YSkKLSAgICAgICAgbV9lbGVtZW50cy5hcHBlbmQoRm9ybURhdGFF
bGVtZW50KCkpOwotICAgIEZvcm1EYXRhRWxlbWVudCYgZSA9IG1fZWxlbWVudHMubGFzdCgpOwot
ICAgIHNpemVfdCBvbGRTaXplID0gZS5tX2RhdGEuc2l6ZSgpOwotICAgIGUubV9kYXRhLmdyb3co
b2xkU2l6ZSArIHNpemUpOwotICAgIG1lbWNweShlLm1fZGF0YS5kYXRhKCkgKyBvbGRTaXplLCBk
YXRhLCBzaXplKTsKKyAgICBtX2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVsZW1lbnQoQmxvYkl0
ZW06OmNyZWF0ZUJ5dGVzQXJyYXlCbG9iSXRlbShzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZGF0
YSksIHNpemUpKSk7Cit9CisKK3ZvaWQgRm9ybURhdGE6OmFwcGVuZFN0cmluZyhjb25zdCBDU3Ry
aW5nJiBzdHJpbmcpCit7CisgICAgbV9lbGVtZW50cy5hcHBlbmQoRm9ybURhdGFFbGVtZW50KEJs
b2JJdGVtOjpjcmVhdGVTdHJpbmdCbG9iSXRlbShzdHJpbmcpKSk7CiB9CiAKIHZvaWQgRm9ybURh
dGE6OmFwcGVuZEZpbGUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgYm9vbCBzaG91bGRHZW5lcmF0
ZUZpbGUpCiB7Ci0jaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgbV9lbGVtZW50cy5hcHBlbmQo
Rm9ybURhdGFFbGVtZW50KGZpbGVuYW1lLCAwLCBCbG9iOjp0b0VuZE9mRmlsZSwgQmxvYjo6ZG9O
b3RDaGVja0ZpbGVDaGFuZ2UsIHNob3VsZEdlbmVyYXRlRmlsZSkpOwotI2Vsc2UKLSAgICBtX2Vs
ZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVsZW1lbnQoZmlsZW5hbWUsIHNob3VsZEdlbmVyYXRlRmls
ZSkpOwotI2VuZGlmCisgICAgbV9lbGVtZW50cy5hcHBlbmQoRm9ybURhdGFFbGVtZW50KEJsb2JJ
dGVtOjpjcmVhdGVGaWxlQmxvYkl0ZW0oZmlsZW5hbWUpLCBzaG91bGRHZW5lcmF0ZUZpbGUpKTsK
K30KKwordm9pZCBGb3JtRGF0YTo6YXBwZW5kQmxvYihCbG9iKiBiKQoreworICAgIFJlZlB0cjxC
bG9iPiBibG9iID0gYjsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2ItPml0ZW1zKCku
c2l6ZSgpOyArK2kpCisgICAgICAgIG1fZWxlbWVudHMuYXBwZW5kKGJsb2ItPml0ZW1zKCkuYXQo
aSkpOwogfQogCiAjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCiB2b2lkIEZvcm1EYXRhOjphcHBlbmRG
aWxlUmFuZ2UoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxv
bmcgbGVuZ3RoLCBkb3VibGUgZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lLCBib29sIHNob3VsZEdl
bmVyYXRlRmlsZSkKIHsKLSAgICBtX2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVsZW1lbnQoZmls
ZW5hbWUsIHN0YXJ0LCBsZW5ndGgsIGV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZSwgc2hvdWxkR2Vu
ZXJhdGVGaWxlKSk7CisgICAgaWYgKGxlbmd0aCA9PSBGb3JtRGF0YUVsZW1lbnQ6OnRvRW5kT2ZG
aWxlKSB7CisgICAgICAgIEFTU0VSVCghc3RhcnQpOworICAgICAgICBBU1NFUlQoIWV4cGVjdGVk
TW9kaWZpY2F0aW9uVGltZSk7CisgICAgICAgIG1fZWxlbWVudHMuYXBwZW5kKEZvcm1EYXRhRWxl
bWVudChCbG9iSXRlbTo6Y3JlYXRlRmlsZUJsb2JJdGVtKGZpbGVuYW1lKSwgc2hvdWxkR2VuZXJh
dGVGaWxlKSk7CisgICAgfSBlbHNlCisgICAgICAgIG1fZWxlbWVudHMuYXBwZW5kKEZvcm1EYXRh
RWxlbWVudChCbG9iSXRlbTo6Y3JlYXRlRmlsZVJhbmdlQmxvYkl0ZW0oZmlsZW5hbWUsIHN0YXJ0
LCBsZW5ndGgsIGV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZSksIHNob3VsZEdlbmVyYXRlRmlsZSkp
OwogfQogI2VuZGlmCiAKQEAgLTE4NiwyMyArMjA4LDEzIEBAIHZvaWQgRm9ybURhdGE6OmFwcGVu
ZERPTUZvcm1EYXRhKGNvbnN0IERPTUZvcm1EYXRhJiBkb21Gb3JtRGF0YSwgYm9vbCBpc011bHRp
UGFyCiAgICAgICAgICAgICBWZWN0b3I8Y2hhcj4gaGVhZGVyOwogICAgICAgICAgICAgZm9ybURh
dGFCdWlsZGVyLmJlZ2luTXVsdGlQYXJ0SGVhZGVyKGhlYWRlciwgbV9ib3VuZGFyeS5kYXRhKCks
IGtleS5kYXRhKCkpOwogCisgICAgICAgICAgICBjb25zdCBSZWZQdHI8QmxvYkl0ZW0+IGl0ZW0g
PSB2YWx1ZS5pdGVtKCk7CiAgICAgICAgICAgICBib29sIHNob3VsZEdlbmVyYXRlRmlsZSA9IGZh
bHNlOwogICAgICAgICAgICAgLy8gSWYgdGhlIGN1cnJlbnQgdHlwZSBpcyBGSUxFLCB0aGVuIHdl
IGFsc28gbmVlZCB0byBpbmNsdWRlIHRoZSBmaWxlbmFtZQotICAgICAgICAgICAgaWYgKHZhbHVl
LmJsb2IoKSkgewotICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgcGF0aCA9IHZhbHVlLmJs
b2IoKS0+cGF0aCgpOwotI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgICAgICAgICAgICAgIFN0
cmluZyBmaWxlTmFtZTsKLSAgICAgICAgICAgICAgICBpZiAodmFsdWUuYmxvYigpLT5pc0ZpbGUo
KSkKLSAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWUgPSBzdGF0aWNfY2FzdDxGaWxlKj4odmFs
dWUuYmxvYigpKS0+ZmlsZU5hbWUoKTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgLy8gSWYgYSBibG9iIGlzIHNsaWNlZCBmcm9tIGEgZmlsZSwgaXQgZG9lcyBu
b3QgaGF2ZSB0aGUgZmlsZW5hbWUuIEluIHRoaXMgY2FzZSwgbGV0J3MgcHJvZHVjZSBhIHVuaXF1
ZSBmaWxlbmFtZS4KLSAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWUgPSAiQmxvYiIgKyBjcmVh
dGVDYW5vbmljYWxVVUlEU3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lLnJl
cGxhY2UoIi0iLCAiIik7IC8vIEZvciBzYWZ0eSwgcmVtb3ZlICctJyBmcm9tIHRoZSBmaWxlbmFt
ZSBzbmNlIHNvbWUgc2VydmVycyBtYXkgbm90IGxpa2UgaXQuCi0gICAgICAgICAgICAgICAgfQot
I2Vsc2UKLSAgICAgICAgICAgICAgICBBU1NFUlQodmFsdWUuYmxvYigpLT5pc0ZpbGUoKSk7Ci0g
ICAgICAgICAgICAgICAgU3RyaW5nIGZpbGVOYW1lID0gc3RhdGljX2Nhc3Q8RmlsZSo+KHZhbHVl
LmJsb2IoKSktPmZpbGVOYW1lKCk7Ci0jZW5kaWYKKyAgICAgICAgICAgIGlmIChpdGVtLT50b0Zp
bGVCbG9iSXRlbSgpKSB7CisgICAgICAgICAgICAgICAgY29uc3QgRmlsZUJsb2JJdGVtKiBmaWxl
ID0gaXRlbS0+dG9GaWxlQmxvYkl0ZW0oKTsKKyAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcm
IHBhdGggPSBmaWxlLT5wYXRoKCk7CisgICAgICAgICAgICAgICAgU3RyaW5nIGZpbGVOYW1lID0g
ZmlsZS0+dW5pcXVlTmFtZSgpOwogCiAgICAgICAgICAgICAgICAgLy8gTGV0IHRoZSBhcHBsaWNh
dGlvbiBzcGVjaWZ5IGEgZmlsZW5hbWUgaWYgaXQncyBnb2luZyB0byBnZW5lcmF0ZSBhIHJlcGxh
Y2VtZW50IGZpbGUgZm9yIHRoZSB1cGxvYWQuCiAgICAgICAgICAgICAgICAgaWYgKCFwYXRoLmlz
RW1wdHkoKSkgewpAQCAtMjE3LDkgKzIyOSw5IEBAIHZvaWQgRm9ybURhdGE6OmFwcGVuZERPTUZv
cm1EYXRhKGNvbnN0IERPTUZvcm1EYXRhJiBkb21Gb3JtRGF0YSwgYm9vbCBpc011bHRpUGFyCiAg
ICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBpbmNsdWRlIHRoZSBmaWxlbmFtZT0iLi4iIHBh
cnQgaW4gdGhlIGhlYWRlciwgZXZlbiBpZiB0aGUgZmlsZW5hbWUgaXMgZW1wdHkKICAgICAgICAg
ICAgICAgICBmb3JtRGF0YUJ1aWxkZXIuYWRkRmlsZW5hbWVUb011bHRpUGFydEhlYWRlcihoZWFk
ZXIsIGVuY29kaW5nLCBmaWxlTmFtZSk7CiAKLSAgICAgICAgICAgICAgICAvLyBJZiBhIGJsb2Ig
aXMgc2xpY2VkIGZyb20gYSBmaWxlLCBkbyBub3QgYWRkIHRoZSBjb250ZW50IHR5cGUuIAorICAg
ICAgICAgICAgICAgIC8vIElmIHRoZSBpdGVtIGlzIHNsaWNlZCBmcm9tIGEgZmlsZSwgZG8gbm90
IGFkZCB0aGUgY29udGVudCB0eXBlLgogI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgICAgICAg
ICAgICAgIGlmICghZmlsZU5hbWUuaXNFbXB0eSgpICYmIHZhbHVlLmJsb2IoKS0+aXNGaWxlKCkp
IHsKKyAgICAgICAgICAgICAgICBpZiAoIWZpbGVOYW1lLmlzRW1wdHkoKSAmJiAhaXRlbS0+dG9G
aWxlUmFuZ2VCbG9iSXRlbSgpKSB7CiAjZWxzZQogICAgICAgICAgICAgICAgIGlmICghZmlsZU5h
bWUuaXNFbXB0eSgpKSB7CiAjZW5kaWYKQEAgLTIzNywxNSArMjQ5LDcgQEAgdm9pZCBGb3JtRGF0
YTo6YXBwZW5kRE9NRm9ybURhdGEoY29uc3QgRE9NRm9ybURhdGEmIGRvbUZvcm1EYXRhLCBib29s
IGlzTXVsdGlQYXIKIAogICAgICAgICAgICAgLy8gQXBwZW5kIGJvZHkKICAgICAgICAgICAgIGFw
cGVuZERhdGEoaGVhZGVyLmRhdGEoKSwgaGVhZGVyLnNpemUoKSk7Ci0gICAgICAgICAgICBpZiAo
c2l6ZV90IGRhdGFTaXplID0gdmFsdWUuZGF0YSgpLmxlbmd0aCgpKQotICAgICAgICAgICAgICAg
IGFwcGVuZERhdGEodmFsdWUuZGF0YSgpLmRhdGEoKSwgZGF0YVNpemUpOwotICAgICAgICAgICAg
ZWxzZSBpZiAodmFsdWUuYmxvYigpICYmICF2YWx1ZS5ibG9iKCktPnBhdGgoKS5pc0VtcHR5KCkp
Ci0jaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgICAgICAgICAgICAgYXBwZW5kRmlsZVJhbmdl
KHZhbHVlLmJsb2IoKS0+cGF0aCgpLCB2YWx1ZS5ibG9iKCktPnN0YXJ0KCksIHZhbHVlLmJsb2Io
KS0+bGVuZ3RoKCksIHZhbHVlLmJsb2IoKS0+bW9kaWZpY2F0aW9uVGltZSgpLCBzaG91bGRHZW5l
cmF0ZUZpbGUpOwotI2Vsc2UKLSAgICAgICAgICAgICAgICBhcHBlbmRGaWxlKHZhbHVlLmJsb2Io
KS0+cGF0aCgpLCBzaG91bGRHZW5lcmF0ZUZpbGUpOwotI2VuZGlmCi0KKyAgICAgICAgICAgIG1f
ZWxlbWVudHMuYXBwZW5kKEZvcm1EYXRhRWxlbWVudChpdGVtLCBzaG91bGRHZW5lcmF0ZUZpbGUp
KTsKICAgICAgICAgICAgIGFwcGVuZERhdGEoIlxyXG4iLCAyKTsKICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgIC8vIE9taXQgdGhlIG5hbWUgImlzaW5kZXgiIGlmIGl0J3MgdGhlIGZpcnN0
IGZvcm0gZGF0YSBlbGVtZW50LgpAQCAtMjU1LDcgKzI1OSw3IEBAIHZvaWQgRm9ybURhdGE6OmFw
cGVuZERPTUZvcm1EYXRhKGNvbnN0IERPTUZvcm1EYXRhJiBkb21Gb3JtRGF0YSwgYm9vbCBpc011
bHRpUGFyCiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgZm9ybURhdGFCdWlsZGVy
LmFkZEtleVZhbHVlUGFpckFzRm9ybURhdGEoZW5jb2RlZERhdGEsIGtleS5kYXRhKCksIHZhbHVl
LmRhdGEoKSk7CiAgICAgICAgIH0KLSAgICB9IAorICAgIH0KIAogICAgIGlmIChpc011bHRpUGFy
dEZvcm0pCiAgICAgICAgIGZvcm1EYXRhQnVpbGRlci5hZGRCb3VuZGFyeVRvTXVsdGlQYXJ0SGVh
ZGVyKGVuY29kZWREYXRhLCBtX2JvdW5kYXJ5LmRhdGEoKSwgdHJ1ZSk7CkBAIC0yNzAsMTIgKzI3
NCw4IEBAIHZvaWQgRm9ybURhdGE6OmZsYXR0ZW4oVmVjdG9yPGNoYXI+JiBkYXRhKSBjb25zdAog
ICAgIHNpemVfdCBuID0gbV9lbGVtZW50cy5zaXplKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBuOyArK2kpIHsKICAgICAgICAgY29uc3QgRm9ybURhdGFFbGVtZW50JiBlID0gbV9lbGVt
ZW50c1tpXTsKLSAgICAgICAgaWYgKGUubV90eXBlID09IEZvcm1EYXRhRWxlbWVudDo6ZGF0YSkg
ewotICAgICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBkYXRhLnNpemUoKTsKLSAgICAgICAgICAg
IHNpemVfdCBkZWx0YSA9IGUubV9kYXRhLnNpemUoKTsKLSAgICAgICAgICAgIGRhdGEuZ3Jvdyhv
bGRTaXplICsgZGVsdGEpOwotICAgICAgICAgICAgbWVtY3B5KGRhdGEuZGF0YSgpICsgb2xkU2l6
ZSwgZS5tX2RhdGEuZGF0YSgpLCBkZWx0YSk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKGUubV90
eXBlID09IEZvcm1EYXRhRWxlbWVudDo6ZGF0YSkKKyAgICAgICAgICAgIGRhdGEuYXBwZW5kKGUu
aXRlbSgpLT5kYXRhKCksIHN0YXRpY19jYXN0PHNpemVfdD4oZS5pdGVtKCktPnNpemUoKSkpOwog
ICAgIH0KIH0KIApAQCAtMjg5LDEwICsyODksMTAgQEAgU3RyaW5nIEZvcm1EYXRhOjpmbGF0dGVu
VG9TdHJpbmcoKSBjb25zdAogdm9pZCBGb3JtRGF0YTo6Z2VuZXJhdGVGaWxlcyhEb2N1bWVudCog
ZG9jdW1lbnQpCiB7CiAgICAgQVNTRVJUKCFtX2hhc0dlbmVyYXRlZEZpbGVzKTsKLSAgICAKKwog
ICAgIGlmIChtX2hhc0dlbmVyYXRlZEZpbGVzKQogICAgICAgICByZXR1cm47Ci0gICAgCisKICAg
ICBQYWdlKiBwYWdlID0gZG9jdW1lbnQtPnBhZ2UoKTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAg
IHJldHVybjsKQEAgLTMwMiw3ICszMDIsNyBAQCB2b2lkIEZvcm1EYXRhOjpnZW5lcmF0ZUZpbGVz
KERvY3VtZW50KiBkb2N1bWVudCkKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG47ICsraSkg
ewogICAgICAgICBGb3JtRGF0YUVsZW1lbnQmIGUgPSBtX2VsZW1lbnRzW2ldOwogICAgICAgICBp
ZiAoZS5tX3R5cGUgPT0gRm9ybURhdGFFbGVtZW50OjplbmNvZGVkRmlsZSAmJiBlLm1fc2hvdWxk
R2VuZXJhdGVGaWxlKSB7Ci0gICAgICAgICAgICBlLm1fZ2VuZXJhdGVkRmlsZW5hbWUgPSBjbGll
bnQtPmdlbmVyYXRlUmVwbGFjZW1lbnRGaWxlKGUubV9maWxlbmFtZSk7CisgICAgICAgICAgICBl
Lm1fZ2VuZXJhdGVkRmlsZW5hbWUgPSBjbGllbnQtPmdlbmVyYXRlUmVwbGFjZW1lbnRGaWxlKGUu
aXRlbSgpLT50b0ZpbGVCbG9iSXRlbSgpLT5wYXRoKCkpOwogICAgICAgICAgICAgbV9oYXNHZW5l
cmF0ZWRGaWxlcyA9IHRydWU7CiAgICAgICAgIH0KICAgICB9CkBAIC0zMTIsNyArMzEyLDcgQEAg
dm9pZCBGb3JtRGF0YTo6cmVtb3ZlR2VuZXJhdGVkRmlsZXNJZk5lZWRlZCgpCiB7CiAgICAgaWYg
KCFtX2hhc0dlbmVyYXRlZEZpbGVzKQogICAgICAgICByZXR1cm47Ci0gICAgICAgIAorCiAgICAg
c2l6ZV90IG4gPSBtX2VsZW1lbnRzLnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG47ICsraSkgewogICAgICAgICBGb3JtRGF0YUVsZW1lbnQmIGUgPSBtX2VsZW1lbnRzW2ldOwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmggYi9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuaAppbmRleCBhNDM5MDIzNDc5NmEwZTJmMTRmNWQz
NDlmNWRkMGVmZmMwYTRiN2NkLi45OWVlN2M1MTIxZDgwYWM3OWVlNTkyMWVkY2JiNTI3YWU3M2Fi
MjQyIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuaAorKysg
Yi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuaApAQCAtMjAsNiArMjAsNyBAQAog
I2lmbmRlZiBGb3JtRGF0YV9oCiAjZGVmaW5lIEZvcm1EYXRhX2gKIAorI2luY2x1ZGUgIkJsb2Iu
aCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtMjksNTIgKzMwLDQ5IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIGNsYXNzIERPTUZvcm1EYXRhOwogY2xhc3MgRG9jdW1lbnQ7CiAKKy8vIEEg
d3JhcHBlciBjbGFzcyBvZiBCbG9iSXRlbSBmb3IgRm9ybURhdGEuCiBjbGFzcyBGb3JtRGF0YUVs
ZW1lbnQgewogcHVibGljOgotICAgIEZvcm1EYXRhRWxlbWVudCgpIDogbV90eXBlKGRhdGEpIHsg
fQotICAgIEZvcm1EYXRhRWxlbWVudChjb25zdCBWZWN0b3I8Y2hhcj4mIGFycmF5KSA6IG1fdHlw
ZShkYXRhKSwgbV9kYXRhKGFycmF5KSB7IH0KLSNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAgICBG
b3JtRGF0YUVsZW1lbnQoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgbG9uZyBsb25nIGZpbGVTdGFy
dCwgbG9uZyBsb25nIGZpbGVMZW5ndGgsIGRvdWJsZSBleHBlY3RlZEZpbGVNb2RpZmljYXRpb25U
aW1lLCBib29sIHNob3VsZEdlbmVyYXRlRmlsZSkgOiBtX3R5cGUoZW5jb2RlZEZpbGUpLCBtX2Zp
bGVuYW1lKGZpbGVuYW1lKSwgbV9maWxlU3RhcnQoZmlsZVN0YXJ0KSwgbV9maWxlTGVuZ3RoKGZp
bGVMZW5ndGgpLCBtX2V4cGVjdGVkRmlsZU1vZGlmaWNhdGlvblRpbWUoZXhwZWN0ZWRGaWxlTW9k
aWZpY2F0aW9uVGltZSksIG1fc2hvdWxkR2VuZXJhdGVGaWxlKHNob3VsZEdlbmVyYXRlRmlsZSkg
eyB9Ci0jZWxzZQotICAgIEZvcm1EYXRhRWxlbWVudChjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBi
b29sIHNob3VsZEdlbmVyYXRlRmlsZSkgOiBtX3R5cGUoZW5jb2RlZEZpbGUpLCBtX2ZpbGVuYW1l
KGZpbGVuYW1lKSwgbV9zaG91bGRHZW5lcmF0ZUZpbGUoc2hvdWxkR2VuZXJhdGVGaWxlKSB7IH0K
LSNlbmRpZgorICAgIEZvcm1EYXRhRWxlbWVudCgpIDogbV9kYXRhKDApIHsgfQorICAgIEZvcm1E
YXRhRWxlbWVudChQYXNzUmVmUHRyPEJsb2JJdGVtPiBibG9iSXRlbSwgYm9vbCBzaG91bGRHZW5l
cmF0ZUZpbGUgPSBmYWxzZSk7CisKKyAgICBjb25zdCBCbG9iSXRlbSogaXRlbSgpIGNvbnN0IHsg
cmV0dXJuIG1faXRlbS5nZXQoKTsgfQorCisgICAgUmVmUHRyPEJsb2JJdGVtPiBtX2l0ZW07CiAK
KyAgICAvLyBGSVhNRTogY2xlYW4gbWUgdXAuICBDb2RlIGJlbG93IGFyZSBtb3N0bHkga2VwdCBm
b3IgY29tcGF0aWJpbGl0eS4KICAgICBlbnVtIHsgZGF0YSwgZW5jb2RlZEZpbGUgfSBtX3R5cGU7
Ci0gICAgVmVjdG9yPGNoYXI+IG1fZGF0YTsKKyAgICBjb25zdCBzdHJ1Y3QgQmxvYkl0ZW1XcmFw
cGVyIHsKKyAgICAgICAgQmxvYkl0ZW1XcmFwcGVyKGNvbnN0IEJsb2JJdGVtV3JhcHBlciYgdikg
OiBtX2l0ZW0odi5tX2l0ZW0pIHsgfQorICAgICAgICBCbG9iSXRlbVdyYXBwZXIoY29uc3QgQmxv
Ykl0ZW0qIGl0ZW0pIDogbV9pdGVtKGl0ZW0pIHsgfQorICAgICAgICBzaXplX3Qgc2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4obV9pdGVtLT5zaXplKCkpOyB9CisgICAg
ICAgIGNvbnN0IGNoYXIqIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2l0ZW0tPmRhdGEoKTsgfQor
ICAgICAgICBjaGFyKiByZWxlYXNlQnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9pdGVtLT5yZWxl
YXNlQnVmZmVyKCk7IH0KKyAgICAgICAgY29uc3QgQmxvYkl0ZW0qIG1faXRlbTsKKyAgICB9IG1f
ZGF0YTsKICAgICBTdHJpbmcgbV9maWxlbmFtZTsKICNpZiBFTkFCTEUoQkxPQl9TTElDRSkKICAg
ICBsb25nIGxvbmcgbV9maWxlU3RhcnQ7CiAgICAgbG9uZyBsb25nIG1fZmlsZUxlbmd0aDsKICAg
ICBkb3VibGUgbV9leHBlY3RlZEZpbGVNb2RpZmljYXRpb25UaW1lOworCisgICAgc3RhdGljIGNv
bnN0IGxvbmcgbG9uZyB0b0VuZE9mRmlsZTsKICNlbmRpZgorCiAgICAgU3RyaW5nIG1fZ2VuZXJh
dGVkRmlsZW5hbWU7CiAgICAgYm9vbCBtX3Nob3VsZEdlbmVyYXRlRmlsZTsKIH07CiAKIGlubGlu
ZSBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9ybURhdGFFbGVtZW50JiBhLCBjb25zdCBGb3JtRGF0
YUVsZW1lbnQmIGIpCiB7Ci0gICAgaWYgKCZhID09ICZiKQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAKLSAgICBpZiAoYS5tX3R5cGUgIT0gYi5tX3R5cGUpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBpZiAoYS5tX2RhdGEgIT0gYi5tX2RhdGEpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAgICBpZiAoYS5tX2ZpbGVuYW1lICE9IGIubV9maWxl
bmFtZSB8fCBhLm1fZmlsZVN0YXJ0ICE9IGIubV9maWxlU3RhcnQgfHwgYS5tX2ZpbGVMZW5ndGgg
IT0gYi5tX2ZpbGVMZW5ndGggfHwgYS5tX2V4cGVjdGVkRmlsZU1vZGlmaWNhdGlvblRpbWUgIT0g
Yi5tX2V4cGVjdGVkRmlsZU1vZGlmaWNhdGlvblRpbWUpCi0jZWxzZQotICAgIGlmIChhLm1fZmls
ZW5hbWUgIT0gYi5tX2ZpbGVuYW1lKQotI2VuZGlmCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBhLml0ZW0oKS0+ZXF1YWxzKGIuaXRlbSgpKTsK
IH0KLSAKKwogaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGb3JtRGF0YUVsZW1lbnQmIGEs
IGNvbnN0IEZvcm1EYXRhRWxlbWVudCYgYikKIHsKICAgICByZXR1cm4gIShhID09IGIpOwogfQot
IAorCiBjbGFzcyBGb3JtRGF0YSA6IHB1YmxpYyBSZWZDb3VudGVkPEZvcm1EYXRhPiB7CiBwdWJs
aWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGNyZWF0ZSgpOwpAQCAtODYsOCAr
ODQsMTAgQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGNvcHkoKSBjb25zdDsK
ICAgICBQYXNzUmVmUHRyPEZvcm1EYXRhPiBkZWVwQ29weSgpIGNvbnN0OwogICAgIH5Gb3JtRGF0
YSgpOwotICAgIAorCiAgICAgdm9pZCBhcHBlbmREYXRhKGNvbnN0IHZvaWQqIGRhdGEsIHNpemVf
dCk7CisgICAgdm9pZCBhcHBlbmRCbG9iKEJsb2IqKTsKKyAgICB2b2lkIGFwcGVuZFN0cmluZyhj
b25zdCBDU3RyaW5nJik7CiAgICAgdm9pZCBhcHBlbmRGaWxlKGNvbnN0IFN0cmluZyYgZmlsZW5h
bWUsIGJvb2wgc2hvdWxkR2VuZXJhdGVGaWxlID0gZmFsc2UpOwogI2lmIEVOQUJMRShCTE9CX1NM
SUNFKQogICAgIHZvaWQgYXBwZW5kRmlsZVJhbmdlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGxv
bmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCwgZG91YmxlIGV4cGVjdGVkTW9kaWZpY2F0
aW9uVGltZSwgYm9vbCBzaG91bGRHZW5lcmF0ZUZpbGUgPSBmYWxzZSk7CkBAIC0xMTgsNiArMTE4
LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGFwcGVuZERPTUZvcm1EYXRhKGNvbnN0IERPTUZvcm1E
YXRhJiBkb21Gb3JtRGF0YSwgYm9vbCBpc011bHRpUGFydEZvcm0sIERvY3VtZW50KiBkb2N1bWVu
dCk7CiAKICAgICBWZWN0b3I8Rm9ybURhdGFFbGVtZW50PiBtX2VsZW1lbnRzOworCiAgICAgaW50
NjRfdCBtX2lkZW50aWZpZXI7CiAgICAgYm9vbCBtX2hhc0dlbmVyYXRlZEZpbGVzOwogICAgIGJv
b2wgbV9hbHdheXNTdHJlYW07CkBAIC0xMzEsNyArMTMyLDcgQEAgaW5saW5lIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBGb3JtRGF0YSYgYSwgY29uc3QgRm9ybURhdGEmIGIpCiAKIGlubGluZSBib29s
IG9wZXJhdG9yIT0oY29uc3QgRm9ybURhdGEmIGEsIGNvbnN0IEZvcm1EYXRhJiBiKQogewotICAg
IHJldHVybiBhLmVsZW1lbnRzKCkgIT0gYi5lbGVtZW50cygpOworICAgIHJldHVybiAhKGEgPT0g
Yik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9tYWMvRm9ybURhdGFTdHJlYW1NYWMubW0gYi9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvbWFjL0Zvcm1EYXRhU3RyZWFtTWFjLm1tCmluZGV4IDI3ZWNmZDA4YWQ1YWFhYjg3
NTZmYTU5NmQ5OTZiZDJmNmVjNWQwM2YuLmUzOTY4ZjI2YmU3NWYzMTY4ZjRjNzQ1NWI1YTVlNDg4
MTAzNDFhYmMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvRm9ybURh
dGFTdHJlYW1NYWMubW0KKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9Gb3JtRGF0
YVN0cmVhbU1hYy5tbQpAQCAtMTQyLDcgKzE0Miw3IEBAIHN0YXRpYyB2b2lkIGNsb3NlQ3VycmVu
dFN0cmVhbShGb3JtU3RyZWFtRmllbGRzICpmb3JtKQogICAgICAgICBDRlJlbGVhc2UoZm9ybS0+
Y3VycmVudFN0cmVhbSk7CiAgICAgICAgIGZvcm0tPmN1cnJlbnRTdHJlYW0gPSBOVUxMOwogI2lm
IEVOQUJMRShCTE9CX1NMSUNFKQotICAgICAgICBmb3JtLT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5n
dGggPSBCbG9iOjp0b0VuZE9mRmlsZTsKKyAgICAgICAgZm9ybS0+Y3VycmVudFN0cmVhbVJhbmdl
TGVuZ3RoID0gRm9ybURhdGFFbGVtZW50Ojp0b0VuZE9mRmlsZTsKICNlbmRpZgogICAgIH0KICAg
ICBpZiAoZm9ybS0+Y3VycmVudERhdGEpIHsKQEAgLTE2MSwyMSArMTYxLDE3IEBAIHN0YXRpYyBi
b29sIGFkdmFuY2VDdXJyZW50U3RyZWFtKEZvcm1TdHJlYW1GaWVsZHMqIGZvcm0pCiAKICAgICAv
LyBDcmVhdGUgdGhlIG5ldyBzdHJlYW0uCiAgICAgRm9ybURhdGFFbGVtZW50JiBuZXh0SW5wdXQg
PSBmb3JtLT5yZW1haW5pbmdFbGVtZW50cy5sYXN0KCk7CisKKyAgICAvLyBDaGVjayBpZiB0aGUg
dW5kZXJseWluZyBkYXRhIGhhcyBiZWNvbWUgc3RhbGUgKGUuZy4gdGhlIGZpbGUgaGFzIGJlZW4g
Y2hhbmdlZCBzaW5jZSBpdHMgc25hcHNob3QgaGFzIGJlZW4gdGFrZW4pIG9yIG5vdC4KKyAgICBp
ZiAoIW5leHRJbnB1dC5tX2l0ZW0tPmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CiAgICAgaWYgKG5leHRJbnB1dC5tX3R5cGUgPT0gRm9ybURhdGFFbGVtZW50OjpkYXRhKSB7CiAg
ICAgICAgIHNpemVfdCBzaXplID0gbmV4dElucHV0Lm1fZGF0YS5zaXplKCk7CiAgICAgICAgIGNo
YXIqIGRhdGEgPSBuZXh0SW5wdXQubV9kYXRhLnJlbGVhc2VCdWZmZXIoKTsKICAgICAgICAgZm9y
bS0+Y3VycmVudFN0cmVhbSA9IENGUmVhZFN0cmVhbUNyZWF0ZVdpdGhCeXRlc05vQ29weSgwLCBy
ZWludGVycHJldF9jYXN0PGNvbnN0IFVJbnQ4Kj4oZGF0YSksIHNpemUsIGtDRkFsbG9jYXRvck51
bGwpOwogICAgICAgICBmb3JtLT5jdXJyZW50RGF0YSA9IGRhdGE7CiAgICAgfSBlbHNlIHsKLSNp
ZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGZpbGUgaGFzIGJl
ZW4gY2hhbmdlZCBvciBub3QgaWYgcmVxdWlyZWQuCi0gICAgICAgIGlmIChuZXh0SW5wdXQubV9l
eHBlY3RlZEZpbGVNb2RpZmljYXRpb25UaW1lICE9IEJsb2I6OmRvTm90Q2hlY2tGaWxlQ2hhbmdl
KSB7Ci0gICAgICAgICAgICB0aW1lX3QgZmlsZU1vZGlmaWNhdGlvblRpbWU7Ci0gICAgICAgICAg
ICBpZiAoIWdldEZpbGVNb2RpZmljYXRpb25UaW1lKG5leHRJbnB1dC5tX2ZpbGVuYW1lLCBmaWxl
TW9kaWZpY2F0aW9uVGltZSkgfHwgZmlsZU1vZGlmaWNhdGlvblRpbWUgIT0gc3RhdGljX2Nhc3Q8
dGltZV90PihuZXh0SW5wdXQubV9leHBlY3RlZEZpbGVNb2RpZmljYXRpb25UaW1lKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSNlbmRpZgotCiAgICAgICAgIGNv
bnN0IFN0cmluZyYgcGF0aCA9IG5leHRJbnB1dC5tX3Nob3VsZEdlbmVyYXRlRmlsZSA/IG5leHRJ
bnB1dC5tX2dlbmVyYXRlZEZpbGVuYW1lIDogbmV4dElucHV0Lm1fZmlsZW5hbWU7CiAgICAgICAg
IFJldGFpblB0cjxDRlN0cmluZ1JlZj4gZmlsZW5hbWUoQWRvcHRDRiwgcGF0aC5jcmVhdGVDRlN0
cmluZygpKTsKICAgICAgICAgUmV0YWluUHRyPENGVVJMUmVmPiBmaWxlVVJMKEFkb3B0Q0YsIENG
VVJMQ3JlYXRlV2l0aEZpbGVTeXN0ZW1QYXRoKDAsIGZpbGVuYW1lLmdldCgpLCBrQ0ZVUkxQT1NJ
WFBhdGhTdHlsZSwgRkFMU0UpKTsKQEAgLTIyMiw3ICsyMTgsNyBAQCBzdGF0aWMgdm9pZCogZm9y
bUNyZWF0ZShDRlJlYWRTdHJlYW1SZWYgc3RyZWFtLCB2b2lkKiBjb250ZXh0KQogICAgIEZvcm1T
dHJlYW1GaWVsZHMqIG5ld0luZm8gPSBuZXcgRm9ybVN0cmVhbUZpZWxkczsKICAgICBuZXdJbmZv
LT5jdXJyZW50U3RyZWFtID0gTlVMTDsKICNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAgICBuZXdJ
bmZvLT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5ndGggPSBCbG9iOjp0b0VuZE9mRmlsZTsKKyAgICBu
ZXdJbmZvLT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5ndGggPSBGb3JtRGF0YUVsZW1lbnQ6OnRvRW5k
T2ZGaWxlOwogI2VuZGlmCiAgICAgbmV3SW5mby0+Y3VycmVudERhdGEgPSAwOwogICAgIG5ld0lu
Zm8tPmZvcm1TdHJlYW0gPSBzdHJlYW07IC8vIERvbid0IHJldGFpbi4gVGhhdCB3b3VsZCBjcmVh
dGUgYSByZWZlcmVuY2UgY3ljbGUuCkBAIC0yNzAsNyArMjY2LDcgQEAgc3RhdGljIENGSW5kZXgg
Zm9ybVJlYWQoQ0ZSZWFkU3RyZWFtUmVmIHN0cmVhbSwgVUludDgqIGJ1ZmZlciwgQ0ZJbmRleCBi
dWZmZXJMZW4KICAgICB3aGlsZSAoZm9ybS0+Y3VycmVudFN0cmVhbSkgewogICAgICAgICBDRklu
ZGV4IGJ5dGVzVG9SZWFkID0gYnVmZmVyTGVuZ3RoOwogI2lmIEVOQUJMRShCTE9CX1NMSUNFKQot
ICAgICAgICBpZiAoZm9ybS0+Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoICE9IEJsb2I6OnRvRW5k
T2ZGaWxlICYmIGZvcm0tPmN1cnJlbnRTdHJlYW1SYW5nZUxlbmd0aCA8IGJ5dGVzVG9SZWFkKQor
ICAgICAgICBpZiAoZm9ybS0+Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoICE9IEZvcm1EYXRhRWxl
bWVudDo6dG9FbmRPZkZpbGUgJiYgZm9ybS0+Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoIDwgYnl0
ZXNUb1JlYWQpCiAgICAgICAgICAgICBieXRlc1RvUmVhZCA9IHN0YXRpY19jYXN0PENGSW5kZXg+
KGZvcm0tPmN1cnJlbnRTdHJlYW1SYW5nZUxlbmd0aCk7CiAjZW5kaWYKICAgICAgICAgQ0ZJbmRl
eCBieXRlc1JlYWQgPSBDRlJlYWRTdHJlYW1SZWFkKGZvcm0tPmN1cnJlbnRTdHJlYW0sIGJ1ZmZl
ciwgYnl0ZXNUb1JlYWQpOwpAQCAtMjgzLDcgKzI3OSw3IEBAIHN0YXRpYyBDRkluZGV4IGZvcm1S
ZWFkKENGUmVhZFN0cmVhbVJlZiBzdHJlYW0sIFVJbnQ4KiBidWZmZXIsIENGSW5kZXggYnVmZmVy
TGVuCiAgICAgICAgICAgICAqYXRFT0YgPSBGQUxTRTsKICAgICAgICAgICAgIGZvcm0tPmJ5dGVz
U2VudCArPSBieXRlc1JlYWQ7CiAjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgICAgICAgICBp
ZiAoZm9ybS0+Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoICE9IEJsb2I6OnRvRW5kT2ZGaWxlKQor
ICAgICAgICAgICAgaWYgKGZvcm0tPmN1cnJlbnRTdHJlYW1SYW5nZUxlbmd0aCAhPSBGb3JtRGF0
YUVsZW1lbnQ6OnRvRW5kT2ZGaWxlKQogICAgICAgICAgICAgICAgIGZvcm0tPmN1cnJlbnRTdHJl
YW1SYW5nZUxlbmd0aCAtPSBieXRlc1JlYWQ7CiAjZW5kaWYKIApAQCAtNDAwLDcgKzM5Niw3IEBA
IHZvaWQgc2V0SFRUUEJvZHkoTlNNdXRhYmxlVVJMUmVxdWVzdCAqcmVxdWVzdCwgUGFzc1JlZlB0
cjxGb3JtRGF0YT4gZm9ybURhdGEpCiAgICAgICAgIGVsc2UgewogI2lmIEVOQUJMRShCTE9CX1NM
SUNFKQogICAgICAgICAgICAgLy8gSWYgd2UncmUgc2VuZGluZyB0aGUgZmlsZSByYW5nZSwgdXNl
IHRoZSBleGlzdGluZyByYW5nZSBsZW5ndGggZm9yIG5vdy4gV2Ugd2lsbCBkZXRlY3QgaWYgdGhl
IGZpbGUgaGFzIGJlZW4gY2hhbmdlZCByaWdodCBiZWZvcmUgd2UgcmVhZCB0aGUgZmlsZSBhbmQg
YWJvcnQgdGhlIG9wZXJhdGlvbiBpZiBuZWNlc3NhcnkuCi0gICAgICAgICAgICBpZiAoZWxlbWVu
dC5tX2ZpbGVMZW5ndGggIT0gQmxvYjo6dG9FbmRPZkZpbGUpIHsKKyAgICAgICAgICAgIGlmIChl
bGVtZW50Lm1fZmlsZUxlbmd0aCAhPSBGb3JtRGF0YUVsZW1lbnQ6OnRvRW5kT2ZGaWxlKSB7CiAg
ICAgICAgICAgICAgICAgbGVuZ3RoICs9IGVsZW1lbnQubV9maWxlTGVuZ3RoOwogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS94bWwv
WE1MSHR0cFJlcXVlc3QuY3BwIGIvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCmluZGV4
IDVjZGUyNGRlMjlkYjQ0MjEwMDAxYTMwMjMyNDRjYTRjY2QyNWNmYmIuLmY2MWQ3MWQyNGU2Mzkz
NWViODVjMGIzNWRiZmNmYjk3YTA1OWMyZGYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUveG1sL1hNTEh0
dHBSZXF1ZXN0LmNwcAorKysgYi9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKQEAgLTQ3
OCwxMSArNDc4LDcgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6c2VuZChCbG9iKiBib2R5LCBFeGNl
cHRpb25Db2RlJiBlYykKICAgICAgICAgLy8gRklYTUU6IFNob3VsZCB3ZSBzZXQgYSBDb250ZW50
LVR5cGUgaWYgb25lIGlzIG5vdCBzZXQuCiAgICAgICAgIC8vIEZJWE1FOiBhZGQgc3VwcG9ydCBm
b3IgdXBsb2FkaW5nIGJ1bmRsZXMuCiAgICAgICAgIG1fcmVxdWVzdEVudGl0eUJvZHkgPSBGb3Jt
RGF0YTo6Y3JlYXRlKCk7Ci0jaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgICAgIG1fcmVxdWVz
dEVudGl0eUJvZHktPmFwcGVuZEZpbGVSYW5nZShib2R5LT5wYXRoKCksIGJvZHktPnN0YXJ0KCks
IGJvZHktPmxlbmd0aCgpLCBib2R5LT5tb2RpZmljYXRpb25UaW1lKCkpOwotI2Vsc2UKLSAgICAg
ICAgbV9yZXF1ZXN0RW50aXR5Qm9keS0+YXBwZW5kRmlsZShib2R5LT5wYXRoKCksIGZhbHNlKTsK
LSNlbmRpZgorICAgICAgICBtX3JlcXVlc3RFbnRpdHlCb2R5LT5hcHBlbmRCbG9iKGJvZHkpOwog
ICAgIH0KIAogICAgIGNyZWF0ZVJlcXVlc3QoZWMpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56524</attachid>
            <date>2010-05-19 15:32:24 -0700</date>
            <delta_ts>2010-05-20 10:55:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-39083-20100519153223.patch</filename>
            <type>text/plain</type>
            <size>76088</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CmluZGV4IGZhODliZTYwZDBhMGE3YTU5Y2Y3MzQ0ZGFiOWJhN2JkNDMzNDJkYzEuLjRlZmQ4
YzM5MmYzZjVjNDNiMTU4NzMyYjk0ZTcyYzAwMGJmOTM4YTkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
Q01ha2VMaXN0cy50eHQKKysrIGIvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTA5NSw2ICsx
MDk1LDcgQEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAgIHBhZ2UvYW5pbWF0aW9uL0tleWZyYW1l
QW5pbWF0aW9uLmNwcAogCiAgICAgcGxhdGZvcm0vQXJlbmEuY3BwCisgICAgcGxhdGZvcm0vQmxv
Ykl0ZW0uY3BwCiAgICAgcGxhdGZvcm0vQ29udGVudFR5cGUuY3BwCiAgICAgcGxhdGZvcm0vQ29u
dGV4dE1lbnUuY3BwCiAgICAgcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDQ5MGRiNjNl
NDY5MmMxZDcxY2IxYmNkZjI3NmVmNDlhMTlmMzM2OWQuLmEzZDA0ODRkYjMyMzc5MDc5MTVlNzI1
M2VjNjhmYjEyYzkxZDdhMmIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dl
YkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTEgQEAKKzIwMTAtMDUtMTkgIEtpbnVrbyBZYXN1
ZGEgIDxraW51a29AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yIEZvcm1EYXRhIGFuZCBCbG9iIGZvciBiZXR0ZXIg
c3VwcG9ydCBvZiBCbG9icyBzeW50aGVzaXplZCBieSBCbG9iQnVpbGRlci4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5MDgzCisKKyAgICAgICAgLSBJ
bnRyb2R1Y2VzIGEgbmV3IGNsYXNzIEJsb2JJdGVtIChwbGF0Zm9ybS9CbG9iRGF0YS57aCxjcHB9
KSBhcworICAgICAgICAgIGEgYmFzaWMgY29tcG9uZW50IG9mIEJsb2IgYW5kIEZvcm1EYXRhLCBh
bmQgbWFrZXMgQmxvYiBhcyBhCisgICAgICAgICAgY29sbGVjdGlvbiBvZiBCbG9iSXRlbXMuCisg
ICAgICAgIC0gRmlsZSB3b3VsZCBiZWNvbWUgYSBzcGVjaWFsIHR5cGUgb2YgQmxvYiB0aGF0IGNv
bnRhaW5zIG9ubHkgb25lCisgICAgICAgICAgRmlsZUJsb2JJdGVtLgorICAgICAgICAtIE1ha2Vz
IEZvcm1EYXRhRWxlbWVudCBhIHdyYXBwZXIgb2YgQmxvYkl0ZW0gKGFzIGEgdHJhbnNpZW50Cisg
ICAgICAgICAgc29sdXRpb24pLgorICAgICAgICAtIEZpeCB0aGUgZGVwZW5kZW5jeSB2aW9sYXRp
b24gaW4gRm9ybURhdGEgc28gdGhhdCB0aGUgZmlsZXMgdW5kZXIKKyAgICAgICAgICBwbGF0Zm9y
bS8gZG8gbm90IGluY2x1ZGUgYW55IGh0bWwvIGZpbGVzLgorCisgICAgICAgIFRoZSBwYXRjaCBk
b2Vzbid0IHN1cHBvcnQgdGhlIGxhdGVzdCBGaWxlIEFQSSBjaGFuZ2VzIChlLmcuIHR5cGUsCisg
ICAgICAgIHVybCBhbmQgc2xpY2UncyB0eXBlIHBhcmFtZXRlcnMpIGFuZCBzaG91bGQgbm90IGNo
YW5nZSBhbnkgb2YgaXRzCisgICAgICAgIGV4aXN0aW5nIGJlaGF2aW9ycy4KKworICAgICAgICBU
aGUgZXhpc3RpbmcgdGVzdHMgc2hvdWxkIGJlIGFibGUgdG8gYmUgdXNlZCBmb3IgcmVncmVzc2lv
bjoKKyAgICAgICAgLSBodHRwL3Rlc3RzL2xvY2FsL2Zvcm1kYXRhL3NlbmQtZm9ybS1kYXRhLXdp
dGgtc2xpY2VkLWZpbGUuaHRtbAorICAgICAgICAtIGh0dHAvdGVzdHMvbG9jYWwvc2VuZC1zbGlj
ZWQtZHJhZ2dlZC1maWxlLmh0bWwKKyAgICAgICAgLSBodHRwL3Rlc3RzL21pc2MvaXNpbmRleC1m
b3JtZGF0YS5odG1sCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVt
YWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5w
cm86CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICog
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGh0bWwvQmxvYi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjpCbG9iKToKKyAgICAgICAgKFdlYkNvcmU6OkJs
b2I6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6cGF0aCk6CisgICAgICAgIChXZWJD
b3JlOjpCbG9iOjphcHBlbmQpOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6c2xpY2UpOgorICAg
ICAgICAqIGh0bWwvQmxvYi5oOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkJsb2I6OnR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6aXRl
bXMpOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6QmxvYik6CisgICAgICAgICogaHRtbC9GaWxl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGU6OkZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6
RmlsZTo6bmFtZSk6CisgICAgICAgICogaHRtbC9GaWxlLmg6CisgICAgICAgIChXZWJDb3JlOjpG
aWxlOjpmaWxlTmFtZSk6CisgICAgICAgICogaHRtbC9GaWxlU3RyZWFtLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZpbGVTdHJlYW06Om9wZW5Gb3JSZWFkKToKKyAgICAgICAgKiBodG1sL0Zvcm1E
YXRhTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YUxpc3Q6OmFwcGVuZFN0cmlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YUxpc3Q6OmFwcGVuZEJsb2IpOgorICAgICAg
ICAqIGh0bWwvRm9ybURhdGFMaXN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YUxpc3Q6
Omxpc3QpOgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1FbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6Y3JlYXRlRm9ybURhdGEpOgorICAgICAgICAqIHBsYXRm
b3JtL0Jsb2JJdGVtLmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vQmxvYkl0ZW0uaDog
QWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGb3JtRGF0YUVsZW1lbnQ6OkZvcm1EYXRhRWxlbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpGb3JtRGF0YTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjpj
cmVhdGVNdWx0aVBhcnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6OmRlZXBDb3B5KToK
KyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjphcHBlbmREYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkZvcm1EYXRhOjphcHBlbmRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6
OmFwcGVuZEZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6OmFwcGVuZEJsb2JJdGVt
TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YTo6YXBwZW5kRmlsZVJhbmdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjphcHBlbmRGb3JtRGF0YUl0ZW1zKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0
YUVsZW1lbnQ6OkZvcm1EYXRhRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YUVs
ZW1lbnQ6Oml0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGFFbGVtZW50OjpCbG9iSXRl
bVdyYXBwZXI6OkJsb2JJdGVtV3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YUVs
ZW1lbnQ6OkJsb2JJdGVtV3JhcHBlcjo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0
YUVsZW1lbnQ6OkJsb2JJdGVtV3JhcHBlcjo6ZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb3Jt
RGF0YUVsZW1lbnQ6OkJsb2JJdGVtV3JhcHBlcjo6cmVsZWFzZUJ1ZmZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yIT0pOgorICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvbWFjL0Zvcm1EYXRhU3RyZWFtTWFjLm1tOgorICAgICAg
ICAoV2ViQ29yZTo6Y2xvc2VDdXJyZW50U3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6OmFkdmFu
Y2VDdXJyZW50U3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6OmZvcm1DcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6Zm9ybVJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SFRUUEJvZHkpOgor
ICAgICAgICAqIHhtbC9YTUxIdHRwUmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxI
dHRwUmVxdWVzdDo6c2VuZCk6CisKIDIwMTAtMDUtMTkgIEFsZXhhbmRlciBQYXZsb3YgIDxhcGF2
bG92QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBKZXJlbXkgT3Jsb3cuCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5h
bQppbmRleCBkNjMxZmVlZGU4N2E3ZjQwNTUxODE3NDU3MDgwN2ZjNGFkMTMwOWIwLi43MmMzZGI5
YTNlNTEzNzU2MmVjNGViNGI2YjRlZjk5Y2VmNzFhNGNkIDEwMDY0NAotLS0gYS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmFtCisrKyBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTE1MjgsNiArMTUy
OCw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9BcmVuYS5jcHAg
XAogCVdlYkNvcmUvcGxhdGZvcm0vQXJlbmEuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9BdXRvZHJh
aW5lZFBvb2wuaCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9CbG9iSXRlbS5jcHAgXAorCVdlYkNvcmUv
cGxhdGZvcm0vQmxvYkl0ZW0uaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9Db250ZW50VHlwZS5jcHAg
XAogCVdlYkNvcmUvcGxhdGZvcm0vQ29udGVudFR5cGUuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9D
b250ZXh0TWVudS5jcHAgXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQppbmRleCAxMjE5ODZkMGM4MGRlN2UwNDE4NjlmMjMxZDViNWI5NDg4
YmVmNDkwLi5iZTQ1ZTA2MmE5ZDRlNTU4NDE1NWQ1ZjZhOWJlOWI3M2U1YTA4YzhkIDEwMDY0NAot
LS0gYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAt
Mjg1Niw2ICsyODU2LDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9BcmVuYS5jcHAnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL0FyZW5hLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL0F1dG9k
cmFpbmVkUG9vbC5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9CbG9iSXRlbS5jcHAnLAorICAg
ICAgICAgICAgJ3BsYXRmb3JtL0Jsb2JJdGVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL0Nv
bnRlbnRUeXBlLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vQ29udGVudFR5cGUuaCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vQ29udGV4dE1lbnUuY3BwJywKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvV2ViQ29yZS5wcm8gYi9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IDVkNjVhNTdhOTUyODUy
MDAyNzIwMTlmYmIyOTI4YzIzNzkwZWVjNTguLjAzOWNiMmI5YzU4MDA2OGNlY2RhZjAzZWZlNjdj
YzJiM2RhMGQwYTQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvV2ViQ29y
ZS9XZWJDb3JlLnBybwpAQCAtODA0LDYgKzgwNCw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRm
b3JtL2FuaW1hdGlvbi9BbmltYXRpb24uY3BwIFwKICAgICBwbGF0Zm9ybS9hbmltYXRpb24vQW5p
bWF0aW9uTGlzdC5jcHAgXAogICAgIHBsYXRmb3JtL0FyZW5hLmNwcCBcCisgICAgcGxhdGZvcm0v
QmxvYkl0ZW0uY3BwIFwKICAgICBwbGF0Zm9ybS90ZXh0L0Jhc2U2NC5jcHAgXAogICAgIHBsYXRm
b3JtL3RleHQvQmlkaUNvbnRleHQuY3BwIFwKICAgICBwbGF0Zm9ybS9Db250ZW50VHlwZS5jcHAg
XApAQCAtMTU0OSw2ICsxNTUwLDcgQEAgSEVBREVSUyArPSBcCiAgICAgcGxhdGZvcm0vYW5pbWF0
aW9uL0FuaW1hdGlvbi5oIFwKICAgICBwbGF0Zm9ybS9hbmltYXRpb24vQW5pbWF0aW9uTGlzdC5o
IFwKICAgICBwbGF0Zm9ybS9BcmVuYS5oIFwKKyAgICBwbGF0Zm9ybS9CbG9iSXRlbS5oIFwKICAg
ICBwbGF0Zm9ybS9Db250ZW50VHlwZS5oIFwKICAgICBwbGF0Zm9ybS9Db250ZXh0TWVudS5oIFwK
ICAgICBwbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5oIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
V2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qCmluZGV4IDliN2M5YTI1ODk1MGExYjUyMmI2ZWRhNmFhNjgxNmYyMGYzYmU3
OTQuLjM1NzNiMzA3OTA4NDg4MzQ3NmJhMjY1NWRmMWJmNDUwZDk4YzhmOGYgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvV2ViQ29yZS9XZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAtMzA1NzMsNiArMzA1NzMsMTQgQEAKIAkJCQk+
DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxCbG9i
SXRlbS5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxodG1sXEJsb2JJdGVtLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUN
CiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXGNhbnZhc1xDYW52YXNHcmFkaWVudC5jcHAiDQog
CQkJCT4NCiAJCQk8L0ZpbGU+DQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2ogYi9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagppbmRleCAxZjNlYWI5Mjg3MzZhYzMwMDkxNTA5N2M1OGVkYWYyYTEyNDAzYmI5Li44Njgw
YTUyYWVhMmIwZDVlZjZhYTQ5YWMzN2FiNjMzZGJhZTlkZjU2IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjI2OCw2ICsyMjY4LDggQEAKIAkJODk1MjUz
REMxMTZDNEVGNTAwQ0FCRjAwIC8qIEZpbGVTdHJlYW1Qcm94eS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4OTUyNTNEQTExNkM0RUY1MDBDQUJGMDAg
LyogRmlsZVN0cmVhbVByb3h5LmNwcCAqLzsgfTsKIAkJODk1MjUzREQxMTZDNEVGNTAwQ0FCRjAw
IC8qIEZpbGVTdHJlYW1Qcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gODk1MjUzREIxMTZDNEVGNTAwQ0FCRjAwIC8qIEZpbGVTdHJlYW1Qcm94eS5o
ICovOyB9OwogCQk4OTUyNTNERjExNkM0RjA2MDBDQUJGMDAgLyogRmlsZVRocmVhZFRhc2suaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg5NTI1M0RFMTE2
QzRGMDYwMENBQkYwMCAvKiBGaWxlVGhyZWFkVGFzay5oICovOyB9OworCQk4OTg4RTEwRTExQTM1
MDhCMDBEQjczMkUgLyogQmxvYkl0ZW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gODk4OEUxMEMxMUEzNTA4QjAwREI3MzJFIC8qIEJsb2JJdGVtLmNw
cCAqLzsgfTsKKwkJODk4OEUxMEYxMUEzNTA4QjAwREI3MzJFIC8qIEJsb2JJdGVtLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4OTg4RTEwRDExQTM1MDhC
MDBEQjczMkUgLyogQmxvYkl0ZW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk5MzAyQjBCRDBENzlGODI5MDBDN0VFODMgLyogUGFnZUdyb3VwLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMDJCMEJD
MEQ3OUY4MjkwMEM3RUU4MyAvKiBQYWdlR3JvdXAuY3BwICovOyB9OwogCQk5MzAyQjBCRjBENzlG
ODJDMDBDN0VFODMgLyogUGFnZUdyb3VwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5MzAyQjBCRTBENzlGODJDMDBDN0VFODMgLyogUGFnZUdyb3VwLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTMwNUIy
NEQwOThGMUI2QjAwQzI4ODU1IC8qIFRpbWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5MzA1QjI0QzA5OEYxQjZCMDBDMjg4NTUgLyogVGltZXIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNzgzOCw2
ICs3ODQwLDggQEAKIAkJODk1MjUzREExMTZDNEVGNTAwQ0FCRjAwIC8qIEZpbGVTdHJlYW1Qcm94
eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGaWxlU3RyZWFtUHJv
eHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4OTUyNTNEQjExNkM0RUY1MDBD
QUJGMDAgLyogRmlsZVN0cmVhbVByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEZpbGVTdHJlYW1Qcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4OTUy
NTNERTExNkM0RjA2MDBDQUJGMDAgLyogRmlsZVRocmVhZFRhc2suaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRmlsZVRocmVhZFRhc2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJODk4OEUxMEMxMUEzNTA4QjAwREI3MzJFIC8qIEJsb2JJdGVtLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJsb2JJdGVtLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJODk4OEUxMEQxMUEzNTA4QjAwREI3MzJFIC8qIEJsb2JJdGVtLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJsb2JJdGVtLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTkzMDJCMEJDMEQ3OUY4MjkwMEM3RUU4MyAvKiBQYWdlR3JvdXAu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFnZUdyb3VwLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMwMkIwQkUwRDc5RjgyQzAwQzdFRTgzIC8q
IFBhZ2VHcm91cC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYWdlR3JvdXAu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMwNUIyNEMwOThGMUI2QjAwQzI4ODU1
IC8qIFRpbWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRpbWVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNTczOCw2ICsxNTc0Miw4IEBACiAJCQkJQkNG
QjJGNzQwOTdBMkUxQTAwQkE3MDNEIC8qIEFyZW5hLmNwcCAqLywKIAkJCQlCQ0ZCMkY3NTA5N0Ey
RTFBMDBCQTcwM0QgLyogQXJlbmEuaCAqLywKIAkJCQk1MUUxRUNCMTBDOTFDNTU2MDBEQzI1NUIg
LyogQXV0b2RyYWluZWRQb29sLmggKi8sCisJCQkJODk4OEUxMEMxMUEzNTA4QjAwREI3MzJFIC8q
IEJsb2JJdGVtLmNwcCAqLywKKwkJCQk4OTg4RTEwRDExQTM1MDhCMDBEQjczMkUgLyogQmxvYkl0
ZW0uaCAqLywKIAkJCQlCQ0M4Q0ZDQTA5ODZDRDI0MDAxNDBCRjIgLyogQ29sb3JEYXRhLmdwZXJm
ICovLAogCQkJCTQxRDAxNUM5MEY0QjVDNzEwMDRBNjYyRiAvKiBDb250ZW50VHlwZS5jcHAgKi8s
CiAJCQkJNDFEMDE1QzgwRjRCNUM3MTAwNEE2NjJGIC8qIENvbnRlbnRUeXBlLmggKi8sCkBAIC0x
Njc2Niw2ICsxNjc3Miw3IEBACiAJCQkJQkM1RUI5MjAwRTgyMDQwODAwQjI1OTY1IC8qIEJpbmRp
bmdVUkkuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4OTk0MzI4MEI0MjMzODgwMEQ3QzgwMiAvKiBC
aXRtYXBJbWFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkVBRkFGMEYxMEUyQUYyRDAwN0VEM0Q2
IC8qIEJsb2IuaCBpbiBIZWFkZXJzICovLAorCQkJCTg5ODhFMTBGMTFBMzUwOEIwMERCNzMyRSAv
KiBCbG9iSXRlbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNGMTk5QkUwODI0NUU1OTAwMUU5QUJD
IC8qIEJsb2NrRXhjZXB0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1RUI1RTEwRTgxQkU4
NzAwQjI1OTY1IC8qIEJvcmRlckRhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNUVCNURCMEU4
MUI3RUEwMEIyNTk2NSAvKiBCb3JkZXJWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0xODAxNCw2
ICsxODAyMSw3IEBACiAJCQkJRkU4MEQ3QUEwRTlDMUVEMjAwMEQ2Rjc1IC8qIEpTQ3VzdG9tUG9z
aXRpb25FcnJvckNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTM0MTdDOTBDRUNGRjI1
MDA0OUNCREUgLyogSlNDdXN0b21Wb2lkQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUUx
MEI5MzdDMEI3M0MwMEEwMDNFRDg5MCAvKiBKU0N1c3RvbVhQYXRoTlNSZXNvbHZlci5oIGluIEhl
YWRlcnMgKi8sCisJCQkJQjU5REQ2OTkxMTkwMjlFNTAwN0U5Njg0IC8qIEpTRGF0YWJhc2VDYWxs
YmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFFODJGOTAwQ0FBRkE5RDAwMjIzN0FFIC8qIEpT
RGF0YWJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNzdEMTZBMEZGMTlGNTYwMDcwODg3QiAv
KiBKU0RhdGFHcmlkQ29sdW1uLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzc3RDE2QzBGRjE5RjU2
MDA3MDg4N0IgLyogSlNEYXRhR3JpZENvbHVtbkxpc3QuaCBpbiBIZWFkZXJzICovLApAQCAtMTgx
NzgsNyArMTgxODYsMTEgQEAKIAkJCQlCQzgyNDMyOTBEMENFOEEyMDA0NjBDOEYgLyogSlNTUUxF
cnJvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFFODJGRUQwQ0FCMDdFRTAwMjIzN0FFIC8qIEpT
U1FMUmVzdWx0U2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUZFMTE5QTBDQkZGQ0M0MDAzMDE3
RkEgLyogSlNTUUxSZXN1bHRTZXRSb3dMaXN0LmggaW4gSGVhZGVycyAqLywKKwkJCQlCNTlERDZB
NTExOTAyQTYyMDA3RTk2ODQgLyogSlNTUUxTdGF0ZW1lbnRDYWxsYmFjay5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQjU5REQ2QTkxMTkwMkE3MTAwN0U5Njg0IC8qIEpTU1FMU3RhdGVtZW50RXJyb3JD
YWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM4MjQzMkEwRDBDRThBMjAwNDYwQzhGIC8q
IEpTU1FMVHJhbnNhY3Rpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCUI1OURENjlEMTE5MDJBNDIw
MDdFOTY4NCAvKiBKU1NRTFRyYW5zYWN0aW9uQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAorCQkJ
CUI1OURENkExMTE5MDJBNTIwMDdFOTY4NCAvKiBKU1NRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFj
ay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFFMEJBRUIwREE1NUQ0QTAwQTlFNDE3IC8qIEpTU3Rv
cmFnZUV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY1MDI2QTEwMkJBOTQzMDA2NkYzOUEg
LyogSlNTdHlsZU1lZGlhLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0UwMTM5QjBDMEJFRjE4MDA0
Mzg2MEEgLyogSlNTdHlsZVNoZWV0LmggaW4gSGVhZGVycyAqLywKQEAgLTE5MjI1LDExICsxOTIz
Nyw2IEBACiAJCQkJRTFCRTUxMkUwQ0Y2QzUxMjAwMkVBOTU5IC8qIFhTTFRVbmljb2RlU29ydC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTdERDREODcwRkRGNEQ2RTAwRUNGOUE0IC8qIFhTU0F1ZGl0
b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUNFMTcyRTAxMTEzNkU4Q0UwMDYyQTUzMyAvKiBab29t
TW9kZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQjU5REQ2OTkxMTkwMjlFNTAwN0U5Njg0IC8qIEpT
RGF0YWJhc2VDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQjU5REQ2OUQxMTkwMkE0MjAw
N0U5Njg0IC8qIEpTU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
QjU5REQ2QTExMTkwMkE1MjAwN0U5Njg0IC8qIEpTU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNr
LmggaW4gSGVhZGVycyAqLywKLQkJCQlCNTlERDZBNTExOTAyQTYyMDA3RTk2ODQgLyogSlNTUUxT
dGF0ZW1lbnRDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQjU5REQ2QTkxMTkwMkE3MTAw
N0U5Njg0IC8qIEpTU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQjU1RDVBQTQxMTkxMzFGQzAwQkNDMzE1IC8qIEpTU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJh
Y2suaCBpbiBIZWFkZXJzICovLAogCQkJCUI1OENFQjY5MTE5MTM2MDcwMDJBNjc5MCAvKiBKU0Rh
dGFiYXNlU3luYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjU4Q0VCNkQxMTkxMzYxQzAwMkE2Nzkw
IC8qIEpTU1FMVHJhbnNhY3Rpb25TeW5jLmggaW4gSGVhZGVycyAqLywKQEAgLTE5NTgwLDYgKzE5
NTg3LDcgQEAKIAkJCQlCQzVFQjkxRjBFODIwNDA4MDBCMjU5NjUgLyogQmluZGluZ1VSSS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBODk5NDMyOTBCNDIzMzg4MDBEN0M4MDIgLyogQml0bWFwSW1h
Z2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkVBRkFGMEUxMEUyQUYyRDAwN0VEM0Q2IC8qIEJs
b2IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJODk4OEUxMEUxMUEzNTA4QjAwREI3MzJFIC8qIEJs
b2JJdGVtLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzRjE5QUUxMDgyNDVFNTkwMDFFOUFCQyAv
KiBCbG9ja0V4Y2VwdGlvbnMubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQ0VBNDg1NDA5N0Q5MzAy
MDA5NEM5RTQgLyogYnJlYWtfbGluZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzMDlEREEw
OTlFNjQ5MjAwNTZFNTgxIC8qIEJyZWFrQmxvY2txdW90ZUNvbW1hbmQuY3BwIGluIFNvdXJjZXMg
Ki8sCkBAIC0yMDMyOCw4ICsyMDMzNiw5IEBACiAJCQkJNTFFQzkyNjUwQ0U5MERENDAwRjkwMzA4
IC8qIEpTQ3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkxQTM0MTdDQTBDRUNGRjI1MDA0OUNCREUgLyogSlNDdXN0b21Wb2lkQ2FsbGJhY2suY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJRTEwQjkzQzMwQjczQzI5MTAwM0VEODkwIC8qIEpTQ3VzdG9t
WFBhdGhOU1Jlc29sdmVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTFBRTgyRjhGMENBQUZBOUQw
MDIyMzdBRSAvKiBKU0RhdGFiYXNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUI1OURENjlBMTE5
MDI5RTUwMDdFOTY4NCAvKiBKU0RhdGFiYXNlQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQkNDRTU4QUMxMDYxRThDRjAwOEZCMzVBIC8qIEpTRGF0YWJhc2VDdXN0b20uY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJMUFFODJGOEYwQ0FBRkE5RDAwMjIzN0FFIC8qIEpTRGF0YWJhc2UuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQkM3N0QxNjkwRkYxOUY1NjAwNzA4ODdCIC8qIEpTRGF0YUdy
aWRDb2x1bW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM3N0QxNkIwRkYxOUY1NjAwNzA4ODdC
IC8qIEpTRGF0YUdyaWRDb2x1bW5MaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNzdEMTUy
MEZGMTlDNzMwMDcwODg3QiAvKiBKU0RhdGFHcmlkQ29sdW1uTGlzdEN1c3RvbS5jcHAgaW4gU291
cmNlcyAqLywKQEAgLTIwNTM5LDggKzIwNTQ4LDEyIEBACiAJCQkJMUFFODJGRUMwQ0FCMDdFRTAw
MjIzN0FFIC8qIEpTU1FMUmVzdWx0U2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBRkUxMTk5
MENCRkZDQzQwMDMwMTdGQSAvKiBKU1NRTFJlc3VsdFNldFJvd0xpc3QuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNTFEQ0U4MDIwQ0FDOUYxQzAwNDg4MzU4IC8qIEpTU1FMUmVzdWx0U2V0Um93TGlz
dEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCNTlERDZBNjExOTAyQTYyMDA3RTk2ODQg
LyogSlNTUUxTdGF0ZW1lbnRDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCNTlERDZB
QTExOTAyQTcxMDA3RTk2ODQgLyogSlNTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTUxNEM3NjM4MENFOTIyNUUwMDdFRjNDRCAvKiBKU1NRTFRyYW5zYWN0
aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUI1OURENjlFMTE5MDJBNDIwMDdFOTY4NCAvKiBK
U1NRTFRyYW5zYWN0aW9uQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFEMjMxNkUw
Q0QyNjlFNzAwQzFGMTk0IC8qIEpTU1FMVHJhbnNhY3Rpb25DdXN0b20uY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJQjU5REQ2QTIxMTkwMkE1MjAwN0U5Njg0IC8qIEpTU1FMVHJhbnNhY3Rpb25FcnJv
ckNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxRTNGOUQ2MERBMDVFMUQwMDI1MDkx
MSAvKiBKU1N0b3JhZ2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFEMEM1MTYwREFBOTBCNzAw
M0IzODMxIC8qIEpTU3RvcmFnZUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUUwQkFF
QTBEQTU1RDRBMDBBOUU0MTcgLyogSlNTdG9yYWdlRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC0yMTUwOSwxMSArMjE1MjIsNiBAQAogCQkJCTkzRjE5QjA1MDgyNDVFNTkwMDFFOUFCQyAvKiBY
U0xUUHJvY2Vzc29yTGlieHNsdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMUJFNTEyRDBDRjZD
NTEyMDAyRUE5NTkgLyogWFNMVFVuaWNvZGVTb3J0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3
REQ0RDg2MEZERjRENkUwMEVDRjlBNCAvKiBYU1NBdWRpdG9yLmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCUI1OURENjlBMTE5MDI5RTUwMDdFOTY4NCAvKiBKU0RhdGFiYXNlQ2FsbGJhY2suY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJQjU5REQ2OUUxMTkwMkE0MjAwN0U5Njg0IC8qIEpTU1FMVHJhbnNh
Y3Rpb25DYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlCNTlERDZBMjExOTAyQTUyMDA3
RTk2ODQgLyogSlNTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8s
Ci0JCQkJQjU5REQ2QTYxMTkwMkE2MjAwN0U5Njg0IC8qIEpTU1FMU3RhdGVtZW50Q2FsbGJhY2su
Y3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQjU5REQ2QUExMTkwMkE3MTAwN0U5Njg0IC8qIEpTU1FM
U3RhdGVtZW50RXJyb3JDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCNTVENUFBNTEx
OTEzMUZDMDBCQ0MzMTUgLyogSlNTUUxUcmFuc2FjdGlvblN5bmNDYWxsYmFjay5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlCNTVENUFBODExOTEzMjUwMDBCQ0MzMTUgLyogSlNEYXRhYmFzZVN5bmND
dXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjU1RDVBQTkxMTkxMzI1MDAwQkNDMzE1IC8q
IEpTU1FMVHJhbnNhY3Rpb25TeW5jQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9odG1sL0Jsb2IuY3BwIGIvV2ViQ29yZS9odG1sL0Jsb2IuY3BwCmluZGV4IDgz
YmJkYzBjNTI2NDg0NTQyNjg4MTkyNjIxNjg0YjYyODIwMjRiZjQuLjQ3NWNkMjM5MWUwNGZjYzdj
ODQxZDRlMWNkYTM1OWZhYTk3NzdhMWYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9CbG9iLmNw
cAorKysgYi9XZWJDb3JlL2h0bWwvQmxvYi5jcHAKQEAgLTI5LDkwICsyOSw2OCBAQAogICovCiAK
ICNpbmNsdWRlICJjb25maWcuaCIKKwogI2luY2x1ZGUgIkJsb2IuaCIKIAorI2luY2x1ZGUgIkJs
b2JJdGVtLmgiCiAjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLSNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLWNvbnN0IGludCBCbG9iOjp0b0VuZE9mRmlsZSA9
IC0xOwotY29uc3QgZG91YmxlIEJsb2I6OmRvTm90Q2hlY2tGaWxlQ2hhbmdlID0gMDsKLSNlbmRp
ZgotCiBCbG9iOjpCbG9iKGNvbnN0IFN0cmluZyYgcGF0aCkKLSAgICA6IG1fcGF0aChwYXRoKQot
I2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgICwgbV9zdGFydCgwKQotICAgICwgbV9sZW5ndGgo
dG9FbmRPZkZpbGUpCi0gICAgLCBtX3NuYXBzaG90Q2FwdHVyZWQoZmFsc2UpCi0gICAgLCBtX3Nu
YXBzaG90U2l6ZSgwKQotICAgICwgbV9zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUoZG9Ob3RDaGVj
a0ZpbGVDaGFuZ2UpCi0jZW5kaWYKIHsKKyAgICAvLyBOb3RlOiB0aGlzIGRvZXNuJ3QgaW5pdGlh
bGl6ZSB0aGUgdHlwZSB1bmxpa2UgRmlsZShwYXRoKS4KKyAgICBhcHBlbmQoQmxvYkl0ZW06OmNy
ZWF0ZUZpbGVCbG9iSXRlbShwYXRoKSk7CiB9CiAKLSNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLUJs
b2I6OkJsb2IoY29uc3QgU3RyaW5nJiBwYXRoLCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBs
ZW5ndGgsIGxvbmcgbG9uZyBzbmFwc2hvdFNpemUsIGRvdWJsZSBzbmFwc2hvdE1vZGlmaWNhdGlv
blRpbWUpCi0gICAgOiBtX3BhdGgocGF0aCkKLSAgICAsIG1fc3RhcnQoc3RhcnQpCi0gICAgLCBt
X2xlbmd0aChsZW5ndGgpCi0gICAgLCBtX3NuYXBzaG90Q2FwdHVyZWQodHJ1ZSkKLSAgICAsIG1f
c25hcHNob3RTaXplKHNuYXBzaG90U2l6ZSkKLSAgICAsIG1fc25hcHNob3RNb2RpZmljYXRpb25U
aW1lKHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSkKLXsKLSAgICBBU1NFUlQoc3RhcnQgPj0gMCAm
JiBsZW5ndGggPj0gMCAmJiBzdGFydCArIGxlbmd0aCA8PSBzbmFwc2hvdFNpemUgJiYgc25hcHNo
b3RNb2RpZmljYXRpb25UaW1lKTsKLX0KLSNlbmRpZgotCiB1bnNpZ25lZCBsb25nIGxvbmcgQmxv
Yjo6c2l6ZSgpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IEphdmFTY3JpcHQgY2Fubm90IHJlcHJl
c2VudCBzaXplcyBhcyBsYXJnZSBhcyB1bnNpZ25lZCBsb25nIGxvbmcsIHdlIG5lZWQgdG8KICAg
ICAvLyBjb21lIHVwIHdpdGggYW4gZXhjZXB0aW9uIHRvIHRocm93IGlmIGZpbGUgc2l6ZSBpcyBu
b3QgcmVwcmVzZXRhYmxlLgotI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgIGlmIChtX3NuYXBz
aG90Q2FwdHVyZWQpCi0gICAgICAgIHJldHVybiBtX2xlbmd0aDsKLSNlbmRpZgotICAgIGxvbmcg
bG9uZyBzaXplOwotICAgIGlmICghZ2V0RmlsZVNpemUobV9wYXRoLCBzaXplKSkKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oc2l6
ZSk7CisgICAgdW5zaWduZWQgbG9uZyBsb25nIHNpemUgPSAwOworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV9pdGVtTGlzdC5zaXplKCk7ICsraSkKKyAgICAgICAgc2l6ZSArPSBtX2l0ZW1M
aXN0W2ldLT5zaXplKCk7CisgICAgcmV0dXJuIHNpemU7Cit9CisKK2NvbnN0IFN0cmluZyYgQmxv
Yjo6cGF0aCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1faXRlbUxpc3Quc2l6ZSgpID09IDEgJiYg
bV9pdGVtTGlzdFswXS0+dG9GaWxlQmxvYkl0ZW0oKSk7CisgICAgcmV0dXJuIG1faXRlbUxpc3Rb
MF0tPnRvRmlsZUJsb2JJdGVtKCktPnBhdGgoKTsKK30KKwordm9pZCBCbG9iOjphcHBlbmQoUGFz
c1JlZlB0cjxCbG9iSXRlbT4gaXRlbSkKK3sKKyAgICBtX2l0ZW1MaXN0LmFwcGVuZChpdGVtKTsK
IH0KIAogI2lmIEVOQUJMRShCTE9CX1NMSUNFKQogUGFzc1JlZlB0cjxCbG9iPiBCbG9iOjpzbGlj
ZShsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgpIGNvbnN0CiB7Ci0gICAgLy8gV2hl
biB3ZSBzbGljZSBhIGZpbGUgZm9yIHRoZSBmaXJzdCB0aW1lLCB3ZSBvYnRhaW4gYSBzbmFwc2hv
dCBvZiB0aGUgZmlsZSBieSBjYXB0dXJpbmcgaXRzIGN1cnJlbnQgc2l6ZSBhbmQgbW9kaWZpY2F0
aW9uIHRpbWUuCi0gICAgLy8gVGhlIG1vZGlmaWNhdGlvbiB0aW1lIHdpbGwgYmUgdXNlZCB0byB2
ZXJpZnkgaWYgdGhlIGZpbGUgaGFzIGJlZW4gY2hhbmdlZCBvciBub3QsIHdoZW4gdGhlIHVuZGVy
bHlpbmcgZGF0YSBhcmUgYWNjZXNzZWQuCi0gICAgbG9uZyBsb25nIHNuYXBzaG90U2l6ZTsKLSAg
ICBkb3VibGUgc25hcHNob3RNb2RpZmljYXRpb25UaW1lOwotICAgIGlmIChtX3NuYXBzaG90Q2Fw
dHVyZWQpIHsKLSAgICAgICAgc25hcHNob3RTaXplID0gbV9zbmFwc2hvdFNpemU7Ci0gICAgICAg
IHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSA9IG1fc25hcHNob3RNb2RpZmljYXRpb25UaW1lOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIElmIHdlIGZhaWwgdG8gcmV0cmlldmUgdGhlIHNpemUg
b3IgbW9kaWZpY2F0aW9uIHRpbWUsIHByb2JhYmx5IGR1ZSB0byB0aGF0IHRoZSBmaWxlIGhhcyBi
ZWVuIGRlbGV0ZWQsIGFuIGVtcHR5IGJsb2Igd2lsbCBiZSByZXR1cm5lZC4KLSAgICAgICAgdGlt
ZV90IG1vZGlmaWNhdGlvblRpbWU7Ci0gICAgICAgIGlmICghZ2V0RmlsZVNpemUobV9wYXRoLCBz
bmFwc2hvdFNpemUpIHx8ICFnZXRGaWxlTW9kaWZpY2F0aW9uVGltZShtX3BhdGgsIG1vZGlmaWNh
dGlvblRpbWUpKSB7Ci0gICAgICAgICAgICBzbmFwc2hvdFNpemUgPSAwOwotICAgICAgICAgICAg
c25hcHNob3RNb2RpZmljYXRpb25UaW1lID0gMDsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUgPSBtb2RpZmljYXRpb25UaW1lOwotICAgIH0KLQot
ICAgIC8vIENsYW1wIHRoZSByYW5nZSBpZiBpdCBleGNlZWRzIHRoZSBzaXplIGxpbWl0LgogICAg
IGlmIChzdGFydCA8IDApCiAgICAgICAgIHN0YXJ0ID0gMDsKICAgICBpZiAobGVuZ3RoIDwgMCkK
ICAgICAgICAgbGVuZ3RoID0gMDsKIAotICAgIGlmIChzdGFydCA+IHNuYXBzaG90U2l6ZSkgewor
ICAgIC8vIENsYW1wIHRoZSByYW5nZSBpZiBpdCBleGNlZWRzIHRoZSBzaXplIGxpbWl0LgorICAg
IHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbFNpemUgPSBzaXplKCk7CisgICAgaWYgKHN0YXRpY19j
YXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oc3RhcnQpID4gdG90YWxTaXplKSB7CiAgICAgICAgIHN0
YXJ0ID0gMDsKICAgICAgICAgbGVuZ3RoID0gMDsKLSAgICB9IGVsc2UgaWYgKHN0YXJ0ICsgbGVu
Z3RoID4gc25hcHNob3RTaXplKQotICAgICAgICBsZW5ndGggPSBzbmFwc2hvdFNpemUgLSBzdGFy
dDsKKyAgICB9IGVsc2UgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oc3RhcnQg
KyBsZW5ndGgpID4gdG90YWxTaXplKQorICAgICAgICBsZW5ndGggPSB0b3RhbFNpemUgLSBzdGFy
dDsKIAotICAgIHJldHVybiBhZG9wdFJlZihuZXcgQmxvYihtX3BhdGgsIG1fc3RhcnQgKyBzdGFy
dCwgbGVuZ3RoLCBzbmFwc2hvdFNpemUsIHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSkpOworICAg
IHNpemVfdCBpID0gMDsKKyAgICBSZWZQdHI8QmxvYj4gYmxvYiA9IEJsb2I6OmNyZWF0ZSgpOwor
ICAgIGZvciAoOyBpIDwgbV9pdGVtTGlzdC5zaXplKCkgJiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQg
bG9uZyBsb25nPihzdGFydCkgPj0gbV9pdGVtTGlzdFtpXS0+c2l6ZSgpOyArK2kpCisgICAgICAg
IHN0YXJ0IC09IG1faXRlbUxpc3RbaV0tPnNpemUoKTsKKyAgICBmb3IgKDsgbGVuZ3RoID4gMCAm
JiBpIDwgbV9pdGVtTGlzdC5zaXplKCk7ICsraSkgeworICAgICAgICBibG9iLT5tX2l0ZW1MaXN0
LmFwcGVuZChCbG9iSXRlbTo6Y3JlYXRlUmFuZ2VCbG9iSXRlbShtX2l0ZW1MaXN0W2ldLCBzdGFy
dCwgbGVuZ3RoKSk7CisgICAgICAgIGxlbmd0aCAtPSBibG9iLT5tX2l0ZW1MaXN0Lmxhc3QoKS0+
c2l6ZSgpOworICAgICAgICBzdGFydCA9IDA7CisgICAgfQorICAgIHJldHVybiBibG9iLnJlbGVh
c2UoKTsKIH0KLSNlbmRpZgorI2VuZGlmIC8vIEVOQUJMRShCTE9CX1NMSUNFKQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvQmxvYi5oIGIvV2ViQ29y
ZS9odG1sL0Jsb2IuaAppbmRleCBlOGI1ZjNmZGYwNjlhMmI0ODc2ZWQxNmFiODFiMjJmMGZmMDM4
OTcwLi5hMjdlZTY4Yjk1MGYxZDM4MzdhM2YzMDkxZmNkODg5OTM5YjA5OGJmIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2h0bWwvQmxvYi5oCisrKyBiL1dlYkNvcmUvaHRtbC9CbG9iLmgKQEAgLTMxLDIw
ICszMSwyMSBAQAogI2lmbmRlZiBCbG9iX2gKICNkZWZpbmUgQmxvYl9oCiAKLSNpbmNsdWRlICJF
eGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiQmxvYkl0ZW0uaCIKICNpbmNsdWRlICJQbGF0Zm9y
bVN0cmluZy5oIgotI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIK
ICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IEJsb2IgOiBwdWJsaWMgUmVmQ291bnRlZDxCbG9iPiB7CiBwdWJsaWM6Ci0jaWYgRU5BQkxFKEJM
T0JfU0xJQ0UpCi0gICAgc3RhdGljIGNvbnN0IGludCB0b0VuZE9mRmlsZTsKLSAgICBzdGF0aWMg
Y29uc3QgZG91YmxlIGRvTm90Q2hlY2tGaWxlQ2hhbmdlOwotI2VuZGlmCisgICAgc3RhdGljIFBh
c3NSZWZQdHI8QmxvYj4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgQmxvYigpKTsKKyAgICB9CiAKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxCbG9iPiBjcmVhdGUo
Y29uc3QgU3RyaW5nJiBwYXRoKQogICAgIHsKQEAgLTUzLDQ3ICs1NCwyNCBAQCBwdWJsaWM6CiAK
ICAgICB2aXJ0dWFsIH5CbG9iKCkgeyB9CiAKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSgp
IGNvbnN0OworICAgIGNvbnN0IFN0cmluZyYgcGF0aCgpIGNvbnN0OworICAgIGNvbnN0IFN0cmlu
ZyYgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0Zp
bGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCi0jaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0g
ICAgUGFzc1JlZlB0cjxCbG9iPiBzbGljZShsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5n
dGgpIGNvbnN0OwotI2VuZGlmCisgICAgdm9pZCBhcHBlbmQoUGFzc1JlZlB0cjxCbG9iSXRlbT4g
aXRlbSk7CisgICAgY29uc3QgQmxvYkl0ZW1MaXN0JiBpdGVtcygpIGNvbnN0IHsgcmV0dXJuIG1f
aXRlbUxpc3Q7IH0KIAotICAgIGNvbnN0IFN0cmluZyYgcGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1f
cGF0aDsgfQotICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplKCkgY29uc3Q7CiAjaWYgRU5BQkxF
KEJMT0JfU0xJQ0UpCi0gICAgbG9uZyBsb25nIHN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbV9zdGFy
dDsgfQotICAgIGxvbmcgbG9uZyBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQot
ICAgIGRvdWJsZSBtb2RpZmljYXRpb25UaW1lKCkgY29uc3QgeyByZXR1cm4gbV9zbmFwc2hvdE1v
ZGlmaWNhdGlvblRpbWU7IH0KKyAgICBQYXNzUmVmUHRyPEJsb2I+IHNsaWNlKGxvbmcgbG9uZyBz
dGFydCwgbG9uZyBsb25nIGxlbmd0aCkgY29uc3Q7CiAjZW5kaWYKIAogcHJvdGVjdGVkOgorICAg
IEJsb2IoKSB7IH0KICAgICBCbG9iKGNvbnN0IFN0cmluZyYgcGF0aCk7CiAKLXByaXZhdGU6Ci0j
aWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgQmxvYihjb25zdCBTdHJpbmcmIHBhdGgsIGxvbmcg
bG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCwgbG9uZyBsb25nIHNuYXBzaG90U2l6ZSwgZG91
YmxlIHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSk7Ci0jZW5kaWYKLQotICAgIC8vIFRoZSB1bmRl
cmx5aW5nIHBhdGggb2YgdGhlIGZpbGUtYmFzZWQgYmxvYi4gCi0gICAgU3RyaW5nIG1fcGF0aDsK
LQotI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgIC8vIFRoZSBzdGFydGluZyBwb3NpdGlvbiBv
ZiB0aGUgZmlsZS1iYXNlZCBibG9iLgotICAgIGxvbmcgbG9uZyBtX3N0YXJ0OwotCi0gICAgLy8g
VGhlIGxlbmd0aCBvZiB0aGUgZmlsZS1iYXNlZCBibG9iLiBUaGUgdmFsdWUgb2YgLTEgbWVhbnMg
dG8gdGhlIGVuZCBvZiB0aGUgZmlsZS4KLSAgICBsb25nIGxvbmcgbV9sZW5ndGg7Ci0KLSAgICAv
LyBBIGZsYWcgdG8gdGVsbCBpZiBhIHNuYXBzaG90IGhhcyBiZWVuIGNhcHR1cmVkLgotICAgIGJv
b2wgbV9zbmFwc2hvdENhcHR1cmVkOwotCi0gICAgLy8gVGhlIHNpemUgb2YgdGhlIGZpbGUgd2hl
biBhIHNuYXBzaG90IGlzIGNhcHR1cmVkLiBJdCBjYW4gYmUgMCBpZiB0aGUgZmlsZSBpcyBlbXB0
eS4KLSAgICBsb25nIGxvbmcgbV9zbmFwc2hvdFNpemU7Ci0KLSAgICAvLyBUaGUgbGFzdCBtb2Rp
ZmljYXRpb24gdGltZSBvZiB0aGUgZmlsZSB3aGVuIGEgc25hcHNob3QgaXMgY2FwdHVyZWQuIFRo
ZSB2YWx1ZSBvZiAwIGFsc28gbWVhbnMgdGhhdCB0aGUgc25hcHNob3QgaXMgbm90IGNhcHR1cmVk
LgotICAgIGRvdWJsZSBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZTsKLSNlbmRpZgorICAgIEJs
b2JJdGVtTGlzdCBtX2l0ZW1MaXN0OworICAgIFN0cmluZyBtX3R5cGU7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvRmlsZS5jcHAgYi9XZWJD
b3JlL2h0bWwvRmlsZS5jcHAKaW5kZXggOTdmZGM0NTc4ZDc0YjIyNWU1OTQ2ZjRkNmFlZjI1NjUy
NTQ0M2FlNC4uNTE3YzMxNWYwMzgxZDRjZWIzMTg2OTkyMDc3ZTdjMTVkNmY3ZmI2NyAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9odG1sL0ZpbGUuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9GaWxlLmNwcApA
QCAtMzMsMTIgKzMzLDE2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogRmlsZTo6RmlsZShjb25z
dCBTdHJpbmcmIHBhdGgpCiAgICAgOiBCbG9iKHBhdGgpCi0gICAgLCBtX25hbWUocGF0aEdldEZp
bGVOYW1lKHBhdGgpKQogewogICAgIC8vIFdlIGRvbid0IHVzZSBNSU1FVHlwZVJlZ2lzdHJ5Ojpn
ZXRNSU1FVHlwZUZvclBhdGgoKSBiZWNhdXNlIGl0IHJldHVybnMgImFwcGxpY2F0aW9uL29jdGV0
LXN0cmVhbSIgdXBvbiBmYWlsdXJlLgotICAgIGludCBpbmRleCA9IG1fbmFtZS5yZXZlcnNlRmlu
ZCgnLicpOworICAgIGludCBpbmRleCA9IG5hbWUoKS5yZXZlcnNlRmluZCgnLicpOwogICAgIGlm
IChpbmRleCAhPSAtMSkKLSAgICAgICAgbV90eXBlID0gTUlNRVR5cGVSZWdpc3RyeTo6Z2V0TUlN
RVR5cGVGb3JFeHRlbnNpb24obV9uYW1lLnN1YnN0cmluZyhpbmRleCArIDEpKTsKKyAgICAgICAg
bV90eXBlID0gTUlNRVR5cGVSZWdpc3RyeTo6Z2V0TUlNRVR5cGVGb3JFeHRlbnNpb24obmFtZSgp
LnN1YnN0cmluZyhpbmRleCArIDEpKTsKK30KKworY29uc3QgU3RyaW5nJiBGaWxlOjpuYW1lKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gaXRlbXMoKS5hdCgwKS0+dG9GaWxlQmxvYkl0ZW0oKS0+dW5p
cXVlTmFtZSgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2h0bWwvRmlsZS5oIGIvV2ViQ29yZS9odG1sL0ZpbGUuaAppbmRleCAwNjVkZDg2YTdiMWVi
Zjc3ZmI0MDY0NmY5YzZlODcwNDY5ZDdlYjA5Li41ODJkYjI4NTAzYmZmZjJiOTU4ZTNkNTI1NWVm
N2FiZTlhNjA1NjlhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvRmlsZS5oCisrKyBiL1dlYkNv
cmUvaHRtbC9GaWxlLmgKQEAgLTQxLDE4ICs0MSwxNCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFs
IGJvb2wgaXNGaWxlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgY29uc3QgU3RyaW5n
JiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9Ci0gICAgY29uc3QgU3RyaW5nJiB0eXBl
KCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisgICAgY29uc3QgU3RyaW5nJiBuYW1lKCkgY29u
c3Q7CiAKICAgICAvLyBGSVhNRTogb2Jzb2xldGUgYXR0cmlidXRlcy4gVG8gYmUgcmVtb3ZlZC4K
LSAgICBjb25zdCBTdHJpbmcmIGZpbGVOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9Cisg
ICAgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG5hbWUoKTsgfQogICAg
IHVuc2lnbmVkIGxvbmcgbG9uZyBmaWxlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemUoKTsgfQog
CiBwcml2YXRlOgogICAgIEZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKTsKLQotICAgIFN0cmluZyBt
X25hbWU7Ci0gICAgU3RyaW5nIG1fdHlwZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9GaWxlU3RyZWFtLmNwcCBiL1dlYkNvcmUvaHRtbC9G
aWxlU3RyZWFtLmNwcAppbmRleCA3MDg5ZjYxNjE1NGU0YjEwYTMyNzczZTAzMzU2YTc5MzY0NThm
OTdmLi4yODcyODAyZjk5ZjNlZjIyZWNkNTFmM2RkYTJhOTkxNmU2ZTEyZDg3IDEwMDY0NAotLS0g
YS9XZWJDb3JlL2h0bWwvRmlsZVN0cmVhbS5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0ZpbGVTdHJl
YW0uY3BwCkBAIC05MCwzMCArOTAsMjYgQEAgdm9pZCBGaWxlU3RyZWFtOjpvcGVuRm9yUmVhZChC
bG9iKiBibG9iKQogICAgIH0KIAogI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgIC8vIENoZWNr
IHRoZSBtb2RpZmljYXRpb250IHRpbWUgZm9yIHRoZSBwb3NzaWJsZSBmaWxlIGNoYW5nZS4KLSAg
ICBpZiAoYmxvYi0+bW9kaWZpY2F0aW9uVGltZSgpICE9IEJsb2I6OmRvTm90Q2hlY2tGaWxlQ2hh
bmdlICYmIHN0YXRpY19jYXN0PHRpbWVfdD4oYmxvYi0+bW9kaWZpY2F0aW9uVGltZSgpKSAhPSBj
dXJyZW50TW9kaWZpY2F0aW9uVGltZSkgewotICAgICAgICBtX2NsaWVudC0+ZGlkRmFpbChOT1Rf
UkVBREFCTEVfRVJSKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEp1bXAgdG8g
dGhlIGJlZ2lubmluZyBwb3NpdGlvbiBpZiB0aGUgZmlsZSBoYXMgYmVlbiBzbGljZWQuCi0gICAg
aWYgKGJsb2ItPnN0YXJ0KCkgPiAwKSB7Ci0gICAgICAgIGlmICghc2Vla0ZpbGUobV9oYW5kbGUs
IGJsb2ItPnN0YXJ0KCksIFNlZWtGcm9tQmVnaW5uaW5nKSkgeworICAgIGNvbnN0IEZpbGVSYW5n
ZUJsb2JJdGVtKiByYW5nZSA9IGJsb2ItPml0ZW1zKCkuYXQoMCktPnRvRmlsZVJhbmdlQmxvYkl0
ZW0oKTsKKyAgICBpZiAocmFuZ2UpIHsKKyAgICAgICAgLy8gQ2hlY2sgdGhlIG1vZGlmaWNhdGlv
bnQgdGltZSBmb3IgdGhlIHBvc3NpYmxlIGZpbGUgY2hhbmdlLgorICAgICAgICBpZiAoc3RhdGlj
X2Nhc3Q8dGltZV90PihyYW5nZS0+c25hcHNob3RNb2RpZmljYXRpb25UaW1lKCkpICE9IGN1cnJl
bnRNb2RpZmljYXRpb25UaW1lKSB7CiAgICAgICAgICAgICBtX2NsaWVudC0+ZGlkRmFpbChOT1Rf
UkVBREFCTEVfRVJSKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorCisgICAgICAg
IC8vIEp1bXAgdG8gdGhlIGJlZ2lubmluZyBwb3NpdGlvbiBpZiB0aGUgZmlsZSBoYXMgYmVlbiBz
bGljZWQuCisgICAgICAgIGlmIChyYW5nZS0+c3RhcnQoKSA+IDApIHsKKyAgICAgICAgICAgIGlm
IChzZWVrRmlsZShtX2hhbmRsZSwgcmFuZ2UtPnN0YXJ0KCksIFNlZWtGcm9tQmVnaW5uaW5nKSA8
IDApIHsKKyAgICAgICAgICAgICAgICBtX2NsaWVudC0+ZGlkRmFpbChOT1RfUkVBREFCTEVfRVJS
KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAg
ICB9CiAjZW5kaWYKIAogICAgIC8vIEdldCB0aGUgc2l6ZS4KLSNpZiBFTkFCTEUoQkxPQl9TTElD
RSkKLSAgICBtX3RvdGFsQnl0ZXNUb1JlYWQgPSBibG9iLT5sZW5ndGgoKTsKLSAgICBpZiAobV90
b3RhbEJ5dGVzVG9SZWFkID09IEJsb2I6OnRvRW5kT2ZGaWxlKQotICAgICAgICBtX3RvdGFsQnl0
ZXNUb1JlYWQgPSBibG9iLT5zaXplKCkgLSBibG9iLT5zdGFydCgpOwotI2Vsc2UKLSAgICBtX3Rv
dGFsID0gYmxvYi0+c2l6ZSgpOwotI2VuZGlmCi0KKyAgICBtX3RvdGFsQnl0ZXNUb1JlYWQgPSBi
bG9iLT5zaXplKCk7CiAgICAgbV9jbGllbnQtPmRpZEdldFNpemUobV90b3RhbEJ5dGVzVG9SZWFk
KTsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0Zvcm1EYXRhTGlzdC5jcHAgYi9XZWJD
b3JlL2h0bWwvRm9ybURhdGFMaXN0LmNwcAppbmRleCAyODFjOWZlNDE4ZTFjNDgzM2JiODdmODJm
NzRmMWNjNGQ3MjJkNTdjLi45NzlkOTEwMDU2ZWQyNzRkN2JkYjg4Mjc4YTA3NGNmZmVkZGRkMzRi
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvRm9ybURhdGFMaXN0LmNwcAorKysgYi9XZWJDb3Jl
L2h0bWwvRm9ybURhdGFMaXN0LmNwcApAQCAtMjgsNjQgKzI4LDIyIEBAIEZvcm1EYXRhTGlzdDo6
Rm9ybURhdGFMaXN0KGNvbnN0IFRleHRFbmNvZGluZyYgYykKIHsKIH0KIAotdm9pZCBGb3JtRGF0
YUxpc3Q6OmFwcGVuZFN0cmluZyhjb25zdCBDU3RyaW5nJiBzKQordm9pZCBGb3JtRGF0YUxpc3Q6
OmFwcGVuZFN0cmluZyhjb25zdCBTdHJpbmcmIHMpCiB7Ci0gICAgbV9saXN0LmFwcGVuZChzKTsK
KyAgICBtX2xpc3QuYXBwZW5kKEJsb2JJdGVtOjpjcmVhdGVTdHJpbmdCbG9iSXRlbShzLCBFbmRp
bmdDUkxGLCBtX2VuY29kaW5nKSk7CiB9CiAKLS8vIENoYW5nZSBwbGFpbiBDUiBhbmQgcGxhaW4g
TEYgdG8gQ1JMRiBwYWlycy4KLXN0YXRpYyBDU3RyaW5nIGZpeExpbmVCcmVha3MoY29uc3QgQ1N0
cmluZyYgcykKK3ZvaWQgRm9ybURhdGFMaXN0OjphcHBlbmRTdHJpbmcoY29uc3QgQ1N0cmluZyYg
cykKIHsKLSAgICAvLyBDb21wdXRlIHRoZSBsZW5ndGguCi0gICAgdW5zaWduZWQgbmV3TGVuID0g
MDsKLSAgICBjb25zdCBjaGFyKiBwID0gcy5kYXRhKCk7Ci0gICAgd2hpbGUgKGNoYXIgYyA9ICpw
KyspIHsKLSAgICAgICAgaWYgKGMgPT0gJ1xyJykgewotICAgICAgICAgICAgLy8gU2FmZSB0byBs
b29rIGFoZWFkIGJlY2F1c2Ugb2YgdHJhaWxpbmcgJ1wwJy4KLSAgICAgICAgICAgIGlmICgqcCAh
PSAnXG4nKSB7Ci0gICAgICAgICAgICAgICAgLy8gVHVybiBDUiBpbnRvIENSTEYuCi0gICAgICAg
ICAgICAgICAgbmV3TGVuICs9IDI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAo
YyA9PSAnXG4nKSB7Ci0gICAgICAgICAgICAvLyBUdXJuIExGIGludG8gQ1JMRi4KLSAgICAgICAg
ICAgIG5ld0xlbiArPSAyOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gTGVhdmUg
b3RoZXIgY2hhcmFjdGVycyBhbG9uZS4KLSAgICAgICAgICAgIG5ld0xlbiArPSAxOwotICAgICAg
ICB9Ci0gICAgfQotICAgIGlmIChuZXdMZW4gPT0gcy5sZW5ndGgoKSkgewotICAgICAgICByZXR1
cm4gczsKLSAgICB9Ci0gICAgCi0gICAgLy8gTWFrZSBhIGNvcHkgb2YgdGhlIHN0cmluZy4KLSAg
ICBwID0gcy5kYXRhKCk7Ci0gICAgY2hhciogcTsKLSAgICBDU3RyaW5nIHJlc3VsdCA9IENTdHJp
bmc6Om5ld1VuaW5pdGlhbGl6ZWQobmV3TGVuLCBxKTsKLSAgICB3aGlsZSAoY2hhciBjID0gKnAr
KykgewotICAgICAgICBpZiAoYyA9PSAnXHInKSB7Ci0gICAgICAgICAgICAvLyBTYWZlIHRvIGxv
b2sgYWhlYWQgYmVjYXVzZSBvZiB0cmFpbGluZyAnXDAnLgotICAgICAgICAgICAgaWYgKCpwICE9
ICdcbicpIHsKLSAgICAgICAgICAgICAgICAvLyBUdXJuIENSIGludG8gQ1JMRi4KLSAgICAgICAg
ICAgICAgICAqcSsrID0gJ1xyJzsKLSAgICAgICAgICAgICAgICAqcSsrID0gJ1xuJzsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChjID09ICdcbicpIHsKLSAgICAgICAgICAgIC8v
IFR1cm4gTEYgaW50byBDUkxGLgotICAgICAgICAgICAgKnErKyA9ICdccic7Ci0gICAgICAgICAg
ICAqcSsrID0gJ1xuJzsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIExlYXZlIG90
aGVyIGNoYXJhY3RlcnMgYWxvbmUuCi0gICAgICAgICAgICAqcSsrID0gYzsKLSAgICAgICAgfQot
ICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OworICAgIG1fbGlzdC5hcHBlbmQoQmxvYkl0ZW06OmNy
ZWF0ZVN0cmluZ0Jsb2JJdGVtKHMpKTsKIH0KIAotdm9pZCBGb3JtRGF0YUxpc3Q6OmFwcGVuZFN0
cmluZyhjb25zdCBTdHJpbmcmIHMpCit2b2lkIEZvcm1EYXRhTGlzdDo6YXBwZW5kQmxvYihjb25z
dCBTdHJpbmcmIGtleSwgUGFzc1JlZlB0cjxCbG9iPiBibG9iKQogewotICAgIENTdHJpbmcgY3N0
ciA9IGZpeExpbmVCcmVha3MobV9lbmNvZGluZy5lbmNvZGUocy5jaGFyYWN0ZXJzKCksIHMubGVu
Z3RoKCksIEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKSk7Ci0gICAgbV9saXN0LmFwcGVuZChjc3Ry
KTsKKyAgICBhcHBlbmRTdHJpbmcoa2V5KTsKKyAgICBjb25zdCBCbG9iSXRlbUxpc3QmIGxpc3Qg
PSBibG9iLT5pdGVtcygpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdC5zaXplKCk7
ICsraSkKKyAgICAgICAgbV9saXN0LmFwcGVuZChsaXN0LmF0KGkpKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9Gb3JtRGF0YUxpc3QuaCBiL1dlYkNvcmUv
aHRtbC9Gb3JtRGF0YUxpc3QuaAppbmRleCA4ZWNmNjRlZTkzYWQ1MjRmNDc5MjFmMWQ4MjJmOWEw
OGJhMDEzZDdjLi44YTIyMWI3NGE3YWJlYTA4NTY1NmIyNmU2YTk0NjNmMDA1ZGY5NDFkIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2h0bWwvRm9ybURhdGFMaXN0LmgKKysrIGIvV2ViQ29yZS9odG1sL0Zv
cm1EYXRhTGlzdC5oCkBAIC0yMSw3ICsyMSw4IEBACiAjaWZuZGVmIEZvcm1EYXRhTGlzdF9oCiAj
ZGVmaW5lIEZvcm1EYXRhTGlzdF9oCiAKLSNpbmNsdWRlICJCbG9iLmgiCisjaW5jbHVkZSAiRXhj
ZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkZpbGUuaCIKICNpbmNsdWRlICJUZXh0RW5jb2Rpbmcu
aCIKICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKQEAgLTQ2LDI3ICs0Nyw5IEBAIHB1
YmxpYzoKICAgICAgICAgYXBwZW5kU3RyaW5nKGtleSk7CiAgICAgICAgIGFwcGVuZFN0cmluZyhT
dHJpbmc6Om51bWJlcih2YWx1ZSkpOwogICAgIH0KLSAgICB2b2lkIGFwcGVuZEJsb2IoY29uc3Qg
U3RyaW5nJiBrZXksIFBhc3NSZWZQdHI8QmxvYj4gYmxvYikKLSAgICB7Ci0gICAgICAgIGFwcGVu
ZFN0cmluZyhrZXkpOwotICAgICAgICBtX2xpc3QuYXBwZW5kKGJsb2IpOwotICAgIH0KLQotICAg
IGNsYXNzIEl0ZW0gewotICAgIHB1YmxpYzoKLSAgICAgICAgSXRlbSgpIHsgfQotICAgICAgICBJ
dGVtKGNvbnN0IFdURjo6Q1N0cmluZyYgZGF0YSkgOiBtX2RhdGEoZGF0YSkgeyB9Ci0gICAgICAg
IEl0ZW0oUGFzc1JlZlB0cjxCbG9iPiBibG9iKSA6IG1fYmxvYihibG9iKSB7IH0KLQotICAgICAg
ICBjb25zdCBXVEY6OkNTdHJpbmcmIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0KLSAg
ICAgICAgQmxvYiogYmxvYigpIGNvbnN0IHsgcmV0dXJuIG1fYmxvYi5nZXQoKTsgfQotCi0gICAg
cHJpdmF0ZToKLSAgICAgICAgV1RGOjpDU3RyaW5nIG1fZGF0YTsKLSAgICAgICAgUmVmUHRyPEJs
b2I+IG1fYmxvYjsKLSAgICB9OworICAgIHZvaWQgYXBwZW5kQmxvYihjb25zdCBTdHJpbmcmIGtl
eSwgUGFzc1JlZlB0cjxCbG9iPiBibG9iKTsKIAotICAgIGNvbnN0IFZlY3RvcjxJdGVtPiYgbGlz
dCgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdDsgfQorICAgIGNvbnN0IEJsb2JJdGVtTGlzdCYgbGlz
dCgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdDsgfQogICAgIGNvbnN0IFRleHRFbmNvZGluZyYgZW5j
b2RpbmcoKSBjb25zdCB7IHJldHVybiBtX2VuY29kaW5nOyB9CiAKIHByaXZhdGU6CkBAIC03NCw3
ICs1Nyw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBhcHBlbmRTdHJpbmcoY29uc3QgU3RyaW5nJik7
CiAKICAgICBUZXh0RW5jb2RpbmcgbV9lbmNvZGluZzsKLSAgICBWZWN0b3I8SXRlbT4gbV9saXN0
OworICAgIEJsb2JJdGVtTGlzdCBtX2xpc3Q7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcCBiL1dlYkNvcmUv
aHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCmluZGV4IDdjNTgzNjQ0Yjg2ZjBmMWU3NWNlMWViOWM4
NDM1MTYzNTBjZTllM2YuLjlhNGY1ZDU4NDI2ODIwNDhlMTliYjUwNzZkNjg3MTA2ZDIyOTVkNWQg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCisrKyBiL1dlYkNv
cmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCkBAIC0yMTAsNyArMjEwLDcgQEAgUGFzc1JlZlB0
cjxGb3JtRGF0YT4gSFRNTEZvcm1FbGVtZW50OjpjcmVhdGVGb3JtRGF0YSgpCiAgICAgICAgICAg
ICBjb250cm9sLT5hcHBlbmRGb3JtRGF0YSgqZG9tRm9ybURhdGEsIG1fZm9ybURhdGFCdWlsZGVy
LmlzTXVsdGlQYXJ0Rm9ybSgpKTsKICAgICB9CiAKLSAgICBSZWZQdHI8Rm9ybURhdGE+IHJlc3Vs
dCA9IChtX2Zvcm1EYXRhQnVpbGRlci5pc011bHRpUGFydEZvcm0oKSkgPyBGb3JtRGF0YTo6Y3Jl
YXRlTXVsdGlQYXJ0KCpkb21Gb3JtRGF0YSwgZG9jdW1lbnQoKSkgOiBGb3JtRGF0YTo6Y3JlYXRl
KCpkb21Gb3JtRGF0YSk7CisgICAgUmVmUHRyPEZvcm1EYXRhPiByZXN1bHQgPSAobV9mb3JtRGF0
YUJ1aWxkZXIuaXNNdWx0aVBhcnRGb3JtKCkpID8gRm9ybURhdGE6OmNyZWF0ZU11bHRpUGFydChk
b21Gb3JtRGF0YS0+bGlzdCgpLCBkb21Gb3JtRGF0YS0+ZW5jb2RpbmcoKSwgZG9jdW1lbnQoKSkg
OiBGb3JtRGF0YTo6Y3JlYXRlKGRvbUZvcm1EYXRhLT5saXN0KCksIGRvbUZvcm1EYXRhLT5lbmNv
ZGluZygpKTsKIAogICAgIHJlc3VsdC0+c2V0SWRlbnRpZmllcihnZW5lcmF0ZUZvcm1EYXRhSWRl
bnRpZmllcigpKTsKICAgICByZXR1cm4gcmVzdWx0OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0
Zm9ybS9CbG9iSXRlbS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL0Jsb2JJdGVtLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5lNmFmYmM2NDg5ODM0NzVjNDQ4OGNlNmQyYjc5NTdmM2EwMGE0NjkzCi0tLSAvZGV2L251
bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9CbG9iSXRlbS5jcHAKQEAgLTAsMCArMSwzMTQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJCbG9iSXRlbS5oIgorCisjaW5jbHVkZSAi
RmlsZVN5c3RlbS5oIgorI2luY2x1ZGUgIlVVSUQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitQYXNzUmVmUHRyPEJsb2JJdGVtPiBCbG9iSXRlbTo6Y3JlYXRlRmlsZUJsb2JJdGVtKGNvbnN0
IFN0cmluZyYgcGF0aCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoc3RhdGljX2Nhc3Q8QmxvYkl0
ZW0qPihuZXcgRmlsZUJsb2JJdGVtKHBhdGgpKSk7Cit9CisKK1Bhc3NSZWZQdHI8QmxvYkl0ZW0+
IEJsb2JJdGVtOjpjcmVhdGVTdHJpbmdCbG9iSXRlbShjb25zdCBTdHJpbmcmIHRleHQsIEVuZGlu
Z1R5cGUgZW5kaW5nLCBUZXh0RW5jb2RpbmcgZW5jb2RpbmcpCit7CisgICAgcmV0dXJuIGFkb3B0
UmVmKHN0YXRpY19jYXN0PEJsb2JJdGVtKj4obmV3IFN0cmluZ0Jsb2JJdGVtKHRleHQsIGVuZGlu
ZywgZW5jb2RpbmcpKSk7Cit9CisKK1Bhc3NSZWZQdHI8QmxvYkl0ZW0+IEJsb2JJdGVtOjpjcmVh
dGVTdHJpbmdCbG9iSXRlbShjb25zdCBDU3RyaW5nJiB0ZXh0KQoreworICAgIHJldHVybiBhZG9w
dFJlZihzdGF0aWNfY2FzdDxCbG9iSXRlbSo+KG5ldyBTdHJpbmdCbG9iSXRlbSh0ZXh0KSkpOwor
fQorCitQYXNzUmVmUHRyPEJsb2JJdGVtPiBCbG9iSXRlbTo6Y3JlYXRlQnl0ZXNBcnJheUJsb2JJ
dGVtKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBzaXplKQoreworICAgIHJldHVybiBhZG9wdFJl
ZihzdGF0aWNfY2FzdDxCbG9iSXRlbSo+KG5ldyBCeXRlc0FycmF5QmxvYkl0ZW0oZGF0YSwgc2l6
ZSkpKTsKK30KKworI2lmIEVOQUJMRShCTE9CX1NMSUNFKQorc3RhdGljIGNvbnN0IGRvdWJsZSBp
bnZhbGlkTW9kaWZpY2F0aW9uVGltZSA9IDA7CisKK2RvdWJsZSBnZXRGaWxlU25hcHNob3RNb2Rp
ZmljYXRpb25UaW1lKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICAvLyBGSVhNRTogc3luY2hy
b25pemVkIGZpbGUgY2FsbAorICAgIHRpbWVfdCBtb2RpZmljYXRpb25UaW1lOworICAgIGlmIChn
ZXRGaWxlTW9kaWZpY2F0aW9uVGltZShwYXRoLCBtb2RpZmljYXRpb25UaW1lKSkKKyAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4obW9kaWZpY2F0aW9uVGltZSk7CisgICAgcmV0dXJu
IGludmFsaWRNb2RpZmljYXRpb25UaW1lOworfQorCitQYXNzUmVmUHRyPEJsb2JJdGVtPiBCbG9i
SXRlbTo6Y3JlYXRlUmFuZ2VCbG9iSXRlbShQYXNzUmVmUHRyPEJsb2JJdGVtPiBpdGVtLCBsb25n
IGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgpCit7CisgICAgQVNTRVJUKHN0YXJ0ID49IDAg
JiYgbGVuZ3RoID49IDApOworICAgIGlmICghc3RhcnQgJiYgaXRlbS0+c2l6ZSgpIDw9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4obGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIGl0ZW07
CisgICAgY29uc3QgRmlsZUJsb2JJdGVtKiBmaWxlSXRlbSA9IGl0ZW0tPnRvRmlsZUJsb2JJdGVt
KCk7CisgICAgaWYgKGZpbGVJdGVtKSB7CisgICAgICAgIGNvbnN0IEZpbGVSYW5nZUJsb2JJdGVt
KiBmaWxlUmFuZ2VJdGVtID0gaXRlbS0+dG9GaWxlUmFuZ2VCbG9iSXRlbSgpOworICAgICAgICBp
ZiAoZmlsZVJhbmdlSXRlbSkgeworICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVk
IGxvbmcgbG9uZz4oc3RhcnQgKyBsZW5ndGgpID4gaXRlbS0+c2l6ZSgpKQorICAgICAgICAgICAg
ICAgIGxlbmd0aCA9IGl0ZW0tPnNpemUoKSAtIHN0YXJ0OworICAgICAgICAgICAgc3RhcnQgKz0g
ZmlsZVJhbmdlSXRlbS0+c3RhcnQoKTsKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGVGaWxlUmFu
Z2VCbG9iSXRlbShmaWxlSXRlbS0+cGF0aCgpLCBzdGFydCwgbGVuZ3RoLCBmaWxlUmFuZ2VJdGVt
LT5zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUoKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IGNyZWF0ZUZpbGVSYW5nZUJsb2JJdGVtKGZpbGVJdGVtLT5wYXRoKCksIHN0YXJ0LCBsZW5ndGgs
IGdldEZpbGVTbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUoZmlsZUl0ZW0tPnBhdGgoKSkpOworICAg
IH0KKyAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihzdGFydCArIGxlbmd0
aCkgPiBpdGVtLT5zaXplKCkpCisgICAgICAgIGxlbmd0aCA9IGl0ZW0tPnNpemUoKSAtIHN0YXJ0
OworICAgIHJldHVybiBhZG9wdFJlZihzdGF0aWNfY2FzdDxCbG9iSXRlbSo+KG5ldyBEYXRhUmFu
Z2VCbG9iSXRlbShpdGVtLCBzdGFydCwgbGVuZ3RoKSkpOworfQorCitQYXNzUmVmUHRyPEJsb2JJ
dGVtPiBCbG9iSXRlbTo6Y3JlYXRlRmlsZVJhbmdlQmxvYkl0ZW0oY29uc3QgU3RyaW5nJiBwYXRo
LCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgsIGRvdWJsZSBzbmFwc2hvdE1vZGlm
aWNhdGlvblRpbWUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKHN0YXRpY19jYXN0PEJsb2JJdGVt
Kj4obmV3IEZpbGVSYW5nZUJsb2JJdGVtKHBhdGgsIHN0YXJ0LCBsZW5ndGgsIHNuYXBzaG90TW9k
aWZpY2F0aW9uVGltZSkpKTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoQkxPQl9TTElDRSkKKworLy8g
RGF0YUJsb2JJdGVtIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2hhciogRGF0YUJsb2JJdGVtOjpyZWxlYXNlQnVmZmVy
KCkgY29uc3QKK3sKKyAgICBWZWN0b3I8Y2hhcj4gdjsKKyAgICB2LmFwcGVuZChkYXRhKCksIHN0
YXRpY19jYXN0PHNpemVfdD4oc2l6ZSgpKSk7CisgICAgcmV0dXJuIHYucmVsZWFzZUJ1ZmZlcigp
OworfQorCitib29sIERhdGFCbG9iSXRlbTo6ZXF1YWxzKGNvbnN0IEJsb2JJdGVtKiBpdGVtKSBj
b25zdAoreworICAgIGNvbnN0IERhdGFCbG9iSXRlbSogZGF0YUl0ZW0gPSBpdGVtLT50b0RhdGFC
bG9iSXRlbSgpOworICAgIHJldHVybiAoZGF0YUl0ZW0gJiYgZGF0YSgpID09IGRhdGFJdGVtLT5k
YXRhKCkgJiYgc2l6ZSgpID09IGRhdGFJdGVtLT5zaXplKCkpOworfQorCisKKy8vIEZpbGVCbG9i
SXRlbSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisKK0ZpbGVCbG9iSXRlbTo6RmlsZUJsb2JJdGVtKGNvbnN0IFN0cmluZyYg
cGF0aCkKKyAgICA6IG1fcGF0aChwYXRoKQorICAgICwgbV9maWxlTmFtZShwYXRoR2V0RmlsZU5h
bWUobV9wYXRoKSkKK3sKK30KKwordW5zaWduZWQgbG9uZyBsb25nIEZpbGVCbG9iSXRlbTo6c2l6
ZSgpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IHN5bmNocm9uaXplZCBmaWxlIGNhbGwKKyAgICBs
b25nIGxvbmcgc2l6ZTsKKyAgICBpZiAoIWdldEZpbGVTaXplKG1fcGF0aCwgc2l6ZSkpCisgICAg
ICAgIHJldHVybiAwOworICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+
KHNpemUpOworfQorCitQYXNzUmVmUHRyPEJsb2JJdGVtPiBGaWxlQmxvYkl0ZW06OmRlZXBDb3B5
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gQmxvYkl0ZW06OmNyZWF0ZUZpbGVCbG9iSXRlbShtX3Bh
dGgpOworfQorCitib29sIEZpbGVCbG9iSXRlbTo6ZXF1YWxzKGNvbnN0IEJsb2JJdGVtKiBpdGVt
KSBjb25zdAoreworICAgIGNvbnN0IEZpbGVCbG9iSXRlbSogZmlsZUl0ZW0gPSBpdGVtLT50b0Zp
bGVCbG9iSXRlbSgpOworICAgIGlmICghZmlsZUl0ZW0gfHwgbV9wYXRoICE9IGZpbGVJdGVtLT5t
X3BhdGgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8g
U3RyaW5nQmxvYkl0ZW0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU3RyaW5nQmxvYkl0ZW06OlN0cmluZ0Jsb2JJdGVtKGNv
bnN0IFN0cmluZyYgdGV4dCwgRW5kaW5nVHlwZSBlbmRpbmcsIFRleHRFbmNvZGluZyBlbmNvZGlu
ZykKK3sKKyAgICBDU3RyaW5nIGZyb20gPSBlbmNvZGluZy5lbmNvZGUodGV4dC5jaGFyYWN0ZXJz
KCksIHRleHQubGVuZ3RoKCksIEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKTsKKyAgICBtX2RhdGEg
PSBmcm9tOworCisgICAgaWYgKGVuZGluZyA9PSBFbmRpbmdUcmFuc3BhcmVudCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgY29uc3QgY2hhciogZW5kaW5nQ2hhcnMgPSAoZW5kaW5nID09IEVuZGlu
Z0NSTEYpID8gIlxyXG4iIDogKChlbmRpbmcgPT0gRW5kaW5nQ1IpID8gIlxyIiA6ICJcbiIpOwor
CisgICAgaW50IGVuZGluZ0xlbmd0aCA9IChlbmRpbmcgPT0gRW5kaW5nQ1JMRikgPyAyIDogMTsK
KyAgICBpbnQgbmVlZEZpeCA9IDA7CisKKyAgICAvLyBDYWxjdWxhdGUgdGhlIGZpbmFsIGxlbmd0
aC4KKyAgICBpbnQgY2FsY3VsYXRlZExlbmd0aCA9IGZyb20ubGVuZ3RoKCk7CisgICAgY29uc3Qg
Y2hhciogcCA9IGZyb20uZGF0YSgpOworICAgIHdoaWxlIChjaGFyIGMgPSAqcCsrKSB7CisgICAg
ICAgIGlmIChjID09ICdccicpIHsKKyAgICAgICAgICAgIC8vIFNhZmUgdG8gbG9vayBhaGVhZCBi
ZWNhdXNlIG9mIHRyYWlsaW5nICdcMCcuCisgICAgICAgICAgICBpZiAoKnAgPT0gJ1xuJyAmJiBl
bmRpbmcgIT0gRW5kaW5nQ1JMRikgeworICAgICAgICAgICAgICAgIGNhbGN1bGF0ZWRMZW5ndGgg
Kz0gKGVuZGluZ0xlbmd0aCAtIDIpOworICAgICAgICAgICAgICAgICsrbmVlZEZpeDsKKyAgICAg
ICAgICAgIH0gZWxzZSBpZiAoZW5kaW5nICE9IEVuZGluZ0NSKSB7CisgICAgICAgICAgICAgICAg
Y2FsY3VsYXRlZExlbmd0aCArPSAoZW5kaW5nTGVuZ3RoIC0gMSk7CisgICAgICAgICAgICAgICAg
KytuZWVkRml4OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKGMgPT0gJ1xuJyAm
JiBlbmRpbmcgIT0gRW5kaW5nTEYpIHsKKyAgICAgICAgICAgIGNhbGN1bGF0ZWRMZW5ndGggKz0g
KGVuZGluZ0xlbmd0aCAtIDEpOworICAgICAgICAgICAgKytuZWVkRml4OworICAgICAgICB9Cisg
ICAgfQorCisgICAgaWYgKCFuZWVkRml4KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBDb252
ZXJ0IHRoZSBlbmRpbmdzIGFuZCBjcmVhdGUgYSBkYXRhIGJ1ZmZlci4KKyAgICBwID0gZnJvbS5k
YXRhKCk7CisgICAgY2hhciogcTsKKyAgICBtX2RhdGEgPSBDU3RyaW5nOjpuZXdVbmluaXRpYWxp
emVkKGNhbGN1bGF0ZWRMZW5ndGgsIHEpOworICAgIHdoaWxlIChjaGFyIGMgPSAqcCsrKSB7Cisg
ICAgICAgIGlmIChjID09ICdccicpIHsKKyAgICAgICAgICAgIGlmICgqcCA9PSAnXG4nICYmIGVu
ZGluZyAhPSBFbmRpbmdDUkxGKSB7CisgICAgICAgICAgICAgICAgbWVtY3B5KHEsIGVuZGluZ0No
YXJzLCBlbmRpbmdMZW5ndGgpOworICAgICAgICAgICAgICAgIHEgKz0gZW5kaW5nTGVuZ3RoOwor
ICAgICAgICAgICAgfSBlbHNlIGlmICgqcCAhPSAnXG4nICYmIGVuZGluZyAhPSBFbmRpbmdDUikg
eworICAgICAgICAgICAgICAgIG1lbWNweShxLCBlbmRpbmdDaGFycywgZW5kaW5nTGVuZ3RoKTsK
KyAgICAgICAgICAgICAgICBxICs9IGVuZGluZ0xlbmd0aDsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSBlbHNlIGlmIChjID09ICdcbicgJiYgZW5kaW5nICE9IEVuZGluZ0xGKSB7CisgICAgICAg
ICAgICBtZW1jcHkocSwgZW5kaW5nQ2hhcnMsIGVuZGluZ0xlbmd0aCk7CisgICAgICAgICAgICBx
ICs9IGVuZGluZ0xlbmd0aDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIExlYXZl
IG90aGVyIGNoYXJhY3RlcnMgYWxvbmUuCisgICAgICAgICAgICAqcSsrID0gYzsKKyAgICAgICAg
fQorICAgIH0KK30KKworU3RyaW5nQmxvYkl0ZW06OlN0cmluZ0Jsb2JJdGVtKGNvbnN0IENTdHJp
bmcmIHRleHQpCisgICAgOiBtX2RhdGEodGV4dCkKK3sKK30KKworUGFzc1JlZlB0cjxCbG9iSXRl
bT4gU3RyaW5nQmxvYkl0ZW06OmRlZXBDb3B5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gQmxvYkl0
ZW06OmNyZWF0ZVN0cmluZ0Jsb2JJdGVtKENTdHJpbmcobV9kYXRhLmRhdGEoKSwgbV9kYXRhLmxl
bmd0aCgpKSk7Cit9CisKK2Jvb2wgU3RyaW5nQmxvYkl0ZW06OmVxdWFscyhjb25zdCBCbG9iSXRl
bSogaXRlbSkgY29uc3QKK3sKKyAgICBpZiAoIURhdGFCbG9iSXRlbTo6ZXF1YWxzKGl0ZW0pKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY29uc3QgU3RyaW5nQmxvYkl0ZW0qIHN0cmluZ0l0
ZW0gPSBpdGVtLT50b1N0cmluZ0Jsb2JJdGVtKCk7CisgICAgcmV0dXJuIChzdHJpbmdJdGVtICYm
IGRhdGEoKSA9PSBzdHJpbmdJdGVtLT5kYXRhKCkgJiYgc2l6ZSgpID09IHN0cmluZ0l0ZW0tPnNp
emUoKSk7Cit9CisKKy8vIEJ5dGVzQXJyYXlCbG9iSXRlbSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0J5dGVzQXJyYXlCbG9iSXRl
bTo6Qnl0ZXNBcnJheUJsb2JJdGVtKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBzaXplKQorewor
ICAgIG1fYnl0ZXNBcnJheS5hcHBlbmQoZGF0YSwgc2l6ZSk7Cit9CisKK1Bhc3NSZWZQdHI8Qmxv
Ykl0ZW0+IEJ5dGVzQXJyYXlCbG9iSXRlbTo6ZGVlcENvcHkoKSBjb25zdAoreworICAgIHJldHVy
biBCbG9iSXRlbTo6Y3JlYXRlQnl0ZXNBcnJheUJsb2JJdGVtKG1fYnl0ZXNBcnJheS5kYXRhKCks
IG1fYnl0ZXNBcnJheS5zaXplKCkpOworfQorCisjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCisKKy8v
IERhdGFSYW5nZUJsb2JJdGVtIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RhdGFSYW5nZUJsb2JJdGVtOjpEYXRhUmFuZ2VCbG9i
SXRlbShQYXNzUmVmUHRyPEJsb2JJdGVtPiBpdGVtLCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9u
ZyBsZW5ndGgpCisgICAgOiBtX2l0ZW0oaXRlbSkKKyAgICAsIG1fc3RhcnQoc3RhcnQpCisgICAg
LCBtX2xlbmd0aChsZW5ndGgpCit7CisgICAgQVNTRVJUKG1faXRlbS0+dG9EYXRhQmxvYkl0ZW0o
KSk7CisgICAgaWYgKG1faXRlbS0+dG9EYXRhUmFuZ2VCbG9iSXRlbSgpKSB7CisgICAgICAgIGNv
bnN0IERhdGFSYW5nZUJsb2JJdGVtKiByYW5nZUl0ZW0gPSBtX2l0ZW0tPnRvRGF0YVJhbmdlQmxv
Ykl0ZW0oKTsKKyAgICAgICAgbV9zdGFydCArPSByYW5nZUl0ZW0tPm1fc3RhcnQ7CisgICAgICAg
IG1faXRlbSA9IHJhbmdlSXRlbS0+bV9pdGVtOworICAgICAgICBBU1NFUlQoIW1faXRlbS0+dG9E
YXRhUmFuZ2VCbG9iSXRlbSgpKTsKKyAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHVuc2lnbmVk
IGxvbmcgbG9uZz4obV9zdGFydCArIG1fbGVuZ3RoKSA8PSBtX2l0ZW0tPnNpemUoKSk7CisgICAg
fQorfQorCitjb25zdCBjaGFyKiBEYXRhUmFuZ2VCbG9iSXRlbTo6ZGF0YSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1faXRlbS0+dG9EYXRhQmxvYkl0ZW0oKS0+ZGF0YSgpICsgbV9zdGFydDsKK30K
KworUGFzc1JlZlB0cjxCbG9iSXRlbT4gRGF0YVJhbmdlQmxvYkl0ZW06OmRlZXBDb3B5KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gQmxvYkl0ZW06OmNyZWF0ZVJhbmdlQmxvYkl0ZW0obV9pdGVtLT5k
ZWVwQ29weSgpLCBtX3N0YXJ0LCBtX2xlbmd0aCk7Cit9CisKK2Jvb2wgRGF0YVJhbmdlQmxvYkl0
ZW06OmVxdWFscyhjb25zdCBCbG9iSXRlbSogaXRlbSkgY29uc3QKK3sKKyAgICBjb25zdCBEYXRh
UmFuZ2VCbG9iSXRlbSogcmFuZ2VJdGVtID0gaXRlbS0+dG9EYXRhUmFuZ2VCbG9iSXRlbSgpOwor
ICAgIGlmICghcmFuZ2VJdGVtKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fc3Rh
cnQgIT0gcmFuZ2VJdGVtLT5tX3N0YXJ0IHx8IG1fbGVuZ3RoICE9IHJhbmdlSXRlbS0+bV9sZW5n
dGgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIW1faXRlbS0+ZXF1YWxzKHJhbmdl
SXRlbS0+bV9pdGVtLmdldCgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0
cnVlOworfQorCisvLyBGaWxlUmFuZ2VCbG9iSXRlbSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitGaWxlUmFuZ2VCbG9iSXRlbTo6
RmlsZVJhbmdlQmxvYkl0ZW0oY29uc3QgU3RyaW5nJiBwYXRoLCBsb25nIGxvbmcgc3RhcnQsIGxv
bmcgbG9uZyBsZW5ndGgsIGRvdWJsZSBtb2RpZmljYXRpb25UaW1lKQorICAgIDogRmlsZUJsb2JJ
dGVtKHBhdGgpCisgICAgLCBtX3N0YXJ0KHN0YXJ0KQorICAgICwgbV9sZW5ndGgobGVuZ3RoKQor
ICAgICwgbV9zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUobW9kaWZpY2F0aW9uVGltZSkKK3sKKyAg
ICBtX3VuaXF1ZU5hbWUgPSAiQmxvYiIgKyBjcmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCk7Cisg
ICAgbV91bmlxdWVOYW1lLnJlcGxhY2UoIi0iLCAiIik7IC8vIEZvciBzYWZ0eSwgcmVtb3ZlICct
JyBmcm9tIHRoZSBmaWxlbmFtZSBzbmNlIHNvbWUgc2VydmVycyBtYXkgbm90IGxpa2UgaXQuCit9
CisKK1Bhc3NSZWZQdHI8QmxvYkl0ZW0+IEZpbGVSYW5nZUJsb2JJdGVtOjpkZWVwQ29weSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIEJsb2JJdGVtOjpjcmVhdGVGaWxlUmFuZ2VCbG9iSXRlbShwYXRo
KCksIG1fc3RhcnQsIG1fbGVuZ3RoLCBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZSk7Cit9CisK
K2Jvb2wgRmlsZVJhbmdlQmxvYkl0ZW06OmVxdWFscyhjb25zdCBCbG9iSXRlbSogaXRlbSkgY29u
c3QKK3sKKyAgICBpZiAoIUZpbGVCbG9iSXRlbTo6ZXF1YWxzKGl0ZW0pKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgY29uc3QgRmlsZVJhbmdlQmxvYkl0ZW0qIHJhbmdlSXRlbSA9IGl0ZW0t
PnRvRmlsZVJhbmdlQmxvYkl0ZW0oKTsKKyAgICBpZiAoIXJhbmdlSXRlbSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGlmIChtX3N0YXJ0ICE9IHJhbmdlSXRlbS0+bV9zdGFydCB8fCBtX3Vu
aXF1ZU5hbWUgIT0gcmFuZ2VJdGVtLT5tX3VuaXF1ZU5hbWUgfHwgbV9zbmFwc2hvdE1vZGlmaWNh
dGlvblRpbWUgIT0gcmFuZ2VJdGVtLT5tX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEZpbGVSYW5nZUJs
b2JJdGVtOjppc1ZhbGlkKCkgY29uc3QKK3sKKyAgICBpZiAobV9zbmFwc2hvdE1vZGlmaWNhdGlv
blRpbWUgPT0gaW52YWxpZE1vZGlmaWNhdGlvblRpbWUpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICByZXR1cm4gbV9zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUgPT0gZ2V0RmlsZVNuYXBzaG90
TW9kaWZpY2F0aW9uVGltZShwYXRoKCkpOworfQorCisjZW5kaWYgLy8gRU5BQkxFKEJMT0JfU0xJ
Q0UpCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZv
cm0vQmxvYkl0ZW0uaCBiL1dlYkNvcmUvcGxhdGZvcm0vQmxvYkl0ZW0uaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42
Yzc2OWFhN2ZiYzQyZjIzZjczZjIzODNiZDU4MDIzYzliYzRkNWYzCi0tLSAvZGV2L251bGwKKysr
IGIvV2ViQ29yZS9wbGF0Zm9ybS9CbG9iSXRlbS5oCkBAIC0wLDAgKzEsMjE4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0
cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
QmxvYkl0ZW1faAorI2RlZmluZSBCbG9iSXRlbV9oCisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmlu
Zy5oIgorI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4K
KyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBTdHJpbmcgZW5kaW5nIHR5cGVzLgorZW51bSBF
bmRpbmdUeXBlIHsKKyAgICBFbmRpbmdUcmFuc3BhcmVudCA9IDAsCisgICAgRW5kaW5nTEYsCisg
ICAgRW5kaW5nQ1IsCisgICAgRW5kaW5nQ1JMRiwKK307CisKK2NsYXNzIERhdGFCbG9iSXRlbTsK
K2NsYXNzIERhdGFSYW5nZUJsb2JJdGVtOworY2xhc3MgRmlsZUJsb2JJdGVtOworY2xhc3MgRmls
ZVJhbmdlQmxvYkl0ZW07CitjbGFzcyBTdHJpbmdCbG9iSXRlbTsKKworLy8gQSBiYXNlIGludGVy
ZmFjZSBmb3IgYWxsIGFyYml0cmFyeS1kYXRhLW9iamVjdCBjb21wb25lbnQgaXRlbXMuCisvLyBU
aGUgQmxvYkl0ZW0gYW5kIGl0cyBzdWJjbGFzc2VzIGFyZSBzdHJ1Y3R1cmVkIGxpa2UgdGhlIGZv
bGxvd2luZzoKKy8vICAgIEJsb2JJdGVtCisvLyAgICAgICB8CisvLyAgICAgICArLS0tLS0tLT4g
RGF0YUJsb2JJdGVtCisvLyAgICAgICB8ICAgICAgICAgICAgICB8CisvLyAgICAgICB8ICAgICAg
ICAgICAgICArLS0tLS0tLS0tPiBTdHJpbmdCbG9iSXRlbQorLy8gICAgICAgfCAgICAgICAgICAg
ICAgKy0tLS0tLS0tLT4gQnl0ZUFycmF5QmxvYkl0ZW0KKy8vICAgICAgIHwgICAgICAgICAgICAg
ICstLS0tLS0tLS0+IERhdGFSYW5nZUJsb2JJdGVtCisvLyAgICAgICB8CisvLyAgICAgICArLS0t
LS0tLT4gRmlsZUJsb2JJdGVtCisvLyAgICAgICB8ICAgICAgICAgICAgICB8CisvLyAgICAgICB8
ICAgICAgICAgICAgICArLS0tLS0tLS0tPiBGaWxlUmFuZ2VCbG9iSXRlbQorLy8KK2NsYXNzIEJs
b2JJdGVtIDogcHVibGljIFJlZkNvdW50ZWQ8QmxvYkl0ZW0+IHsKK3B1YmxpYzoKKyAgICB2aXJ0
dWFsIH5CbG9iSXRlbSgpIHsgfQorICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBsb25nIHNpemUo
KSBjb25zdCA9IDA7CisKKyAgICAvLyBGYWN0b3J5IG1ldGhvZHMuCisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8QmxvYkl0ZW0+IGNyZWF0ZVN0cmluZ0Jsb2JJdGVtKGNvbnN0IFN0cmluZyYsIEVuZGlu
Z1R5cGUsIFRleHRFbmNvZGluZyk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QmxvYkl0ZW0+IGNy
ZWF0ZVN0cmluZ0Jsb2JJdGVtKGNvbnN0IENTdHJpbmcmKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxCbG9iSXRlbT4gY3JlYXRlQnl0ZXNBcnJheUJsb2JJdGVtKGNvbnN0IGNoYXIqIGRhdGEsIHNp
emVfdCBzaXplKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCbG9iSXRlbT4gY3JlYXRlRmlsZUJs
b2JJdGVtKGNvbnN0IFN0cmluZyYgcGF0aCk7CisKKyNpZiBFTkFCTEUoQkxPQl9TTElDRSkKKyAg
ICAvLyBDcmVhdGVzIERhdGFSbmFnZUJsb2JJdGVtIG9yIEZpbGVSYW5nZUJsb2JJdGVtLgorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEJsb2JJdGVtPiBjcmVhdGVSYW5nZUJsb2JJdGVtKFBhc3NSZWZQ
dHI8QmxvYkl0ZW0+IGl0ZW0sIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCk7Cisg
ICAgLy8gQ3JlYXRlcyBGaWxlUmFuZ2VCbG9iSXRlbS4KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxC
bG9iSXRlbT4gY3JlYXRlRmlsZVJhbmdlQmxvYkl0ZW0oY29uc3QgU3RyaW5nJiBwYXRoLCBsb25n
IGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgsIGRvdWJsZSBzbmFwc2hvdE1vZGlmaWNhdGlv
blRpbWUpOworI2VuZGlmIC8vIEVOQUJMRShCTE9CX1NMSUNFKQorCisgICAgLy8gUmV0dXJucyBm
YWxzZSBpZiB0aGUgZGF0YSBoYXMgYmVjb21lIHN0YWxlIG9yIGludmFsaWQuCisgICAgdmlydHVh
bCBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2aXJ0dWFsIGNv
bnN0IERhdGFCbG9iSXRlbSogdG9EYXRhQmxvYkl0ZW0oKSBjb25zdCB7IHJldHVybiAwOyB9Cisg
ICAgdmlydHVhbCBjb25zdCBTdHJpbmdCbG9iSXRlbSogdG9TdHJpbmdCbG9iSXRlbSgpIGNvbnN0
IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IEZpbGVCbG9iSXRlbSogdG9GaWxlQmxv
Ykl0ZW0oKSBjb25zdCB7IHJldHVybiAwOyB9CisjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCisgICAg
dmlydHVhbCBjb25zdCBEYXRhUmFuZ2VCbG9iSXRlbSogdG9EYXRhUmFuZ2VCbG9iSXRlbSgpIGNv
bnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IEZpbGVSYW5nZUJsb2JJdGVtKiB0
b0ZpbGVSYW5nZUJsb2JJdGVtKCkgY29uc3QgeyByZXR1cm4gMDsgfQorI2VuZGlmIC8vIEVOQUJM
RShCTE9CX1NMSUNFKQorCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEJsb2JJdGVtPiBkZWVwQ29w
eSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZXF1YWxzKGNvbnN0IEJsb2JJdGVtKikg
Y29uc3QgPSAwOworCitwcm90ZWN0ZWQ6CisgICAgQmxvYkl0ZW0oKSB7IH0KK307CisKKy8vIElu
IG1vc3QgY2FzZXMgQmxvYkl0ZW0ncyBhcmUgaGFuZGxlZCBhcyBhIGxpc3QgKGUuZy4gaW4gQmxv
YiwgRm9ybURhdGEpLgordHlwZWRlZiBWZWN0b3I8UmVmUHRyPEJsb2JJdGVtPiA+IEJsb2JJdGVt
TGlzdDsKKworY2xhc3MgRGF0YUJsb2JJdGVtIDogcHVibGljIEJsb2JJdGVtIHsKK3B1YmxpYzoK
KyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGRhdGEoKSBjb25zdCA9IDA7CisgICAgY2hhciogcmVs
ZWFzZUJ1ZmZlcigpIGNvbnN0OworICAgIHZpcnR1YWwgY29uc3QgRGF0YUJsb2JJdGVtKiB0b0Rh
dGFCbG9iSXRlbSgpIGNvbnN0IHsgcmV0dXJuIHRoaXM7IH0KKyAgICB2aXJ0dWFsIGJvb2wgZXF1
YWxzKGNvbnN0IEJsb2JJdGVtKikgY29uc3Q7Cit9OworCitjbGFzcyBGaWxlQmxvYkl0ZW0gOiBw
dWJsaWMgQmxvYkl0ZW0geworcHVibGljOgorICAgIEZpbGVCbG9iSXRlbShjb25zdCBTdHJpbmcm
IHBhdGgpOworICAgIHZpcnR1YWwgY29uc3QgU3RyaW5nJiB1bmlxdWVOYW1lKCkgY29uc3QgeyBy
ZXR1cm4gbV9maWxlTmFtZTsgfQorICAgIHZpcnR1YWwgY29uc3QgU3RyaW5nJiBwYXRoKCkgY29u
c3QgeyByZXR1cm4gbV9wYXRoOyB9CisKKyAgICAvLyBCbG9iSXRlbSBtZXRob2RzLgorICAgIHZp
cnR1YWwgdW5zaWduZWQgbG9uZyBsb25nIHNpemUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGNvbnN0
IEZpbGVCbG9iSXRlbSogdG9GaWxlQmxvYkl0ZW0oKSBjb25zdCB7IHJldHVybiB0aGlzOyB9Cisg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPEJsb2JJdGVtPiBkZWVwQ29weSgpIGNvbnN0OworICAgIHZp
cnR1YWwgYm9vbCBlcXVhbHMoY29uc3QgQmxvYkl0ZW0qKSBjb25zdDsKKworcHJpdmF0ZToKKyAg
ICBTdHJpbmcgbV9wYXRoOworICAgIFN0cmluZyBtX2ZpbGVOYW1lOworfTsKKworY2xhc3MgU3Ry
aW5nQmxvYkl0ZW0gOiBwdWJsaWMgRGF0YUJsb2JJdGVtIHsKK3B1YmxpYzoKKyAgICBTdHJpbmdC
bG9iSXRlbShjb25zdCBTdHJpbmcmLCBFbmRpbmdUeXBlLCBUZXh0RW5jb2RpbmcpOworICAgIFN0
cmluZ0Jsb2JJdGVtKGNvbnN0IENTdHJpbmcmKTsKKyAgICBjb25zdCBDU3RyaW5nJiBjc3RyKCkg
Y29uc3QgeyByZXR1cm4gbV9kYXRhOyB9CisKKyAgICAvLyBCbG9iSXRlbSBtZXRob2RzLgorICAg
IHZpcnR1YWwgdW5zaWduZWQgbG9uZyBsb25nIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2RhdGEu
bGVuZ3RoKCk7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IFN0cmluZ0Jsb2JJdGVtKiB0b1N0cmluZ0Js
b2JJdGVtKCkgY29uc3QgeyByZXR1cm4gdGhpczsgfQorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxC
bG9iSXRlbT4gZGVlcENvcHkoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZXF1YWxzKGNvbnN0
IEJsb2JJdGVtKikgY29uc3Q7CisKKyAgICAvLyBEYXRhQmxvYkl0ZW0gbWV0aG9kcy4KKyAgICB2
aXJ0dWFsIGNvbnN0IGNoYXIqIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGEuZGF0YSgpOyB9
CisKK3ByaXZhdGU6CisgICAgbXV0YWJsZSBDU3RyaW5nIG1fZGF0YTsKK307CisKK2NsYXNzIEJ5
dGVzQXJyYXlCbG9iSXRlbSA6IHB1YmxpYyBEYXRhQmxvYkl0ZW0geworcHVibGljOgorICAgIEJ5
dGVzQXJyYXlCbG9iSXRlbShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3Qgc2l6ZSk7CisgICAgdmly
dHVhbCB1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZXNBcnJh
eS5zaXplKCk7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8QmxvYkl0ZW0+IGRlZXBDb3B5KCkg
Y29uc3Q7CisKKyAgICAvLyBEYXRhQmxvYkl0ZW0gbWV0aG9kcy4KKyAgICB2aXJ0dWFsIGNvbnN0
IGNoYXIqIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2J5dGVzQXJyYXkuZGF0YSgpOyB9CisKK3By
aXZhdGU6CisgICAgVmVjdG9yPGNoYXI+IG1fYnl0ZXNBcnJheTsKK307CisKKyNpZiBFTkFCTEUo
QkxPQl9TTElDRSkKKworLy8gQmxvYkl0ZW0gY2xhc3MgZm9yIHNsaWNlZCBkYXRhIChzdHJpbmcg
b3IgYnl0ZXMtYXJyYXkpLgorY2xhc3MgRGF0YVJhbmdlQmxvYkl0ZW0gOiBwdWJsaWMgRGF0YUJs
b2JJdGVtIHsKK3B1YmxpYzoKKyAgICBEYXRhUmFuZ2VCbG9iSXRlbShQYXNzUmVmUHRyPEJsb2JJ
dGVtPiBpdGVtLCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgpOworCisgICAgLy8g
QmxvYkl0ZW0gbWV0aG9kcy4KKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IERhdGFSYW5nZUJs
b2JJdGVtKiB0b0RhdGFSYW5nZUJsb2JJdGVtKCkgY29uc3QgeyByZXR1cm4gdGhpczsgfQorICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxCbG9iSXRlbT4gZGVlcENvcHkoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIGJvb2wgZXF1YWxzKGNvbnN0IEJsb2JJdGVtKikgY29uc3Q7CisKKyAgICAvLyBEYXRhQmxv
Ykl0ZW0gbWV0aG9kcy4KKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGRhdGEoKSBjb25zdDsKKwor
cHJpdmF0ZToKKyAgICBSZWZQdHI8QmxvYkl0ZW0+IG1faXRlbTsKKyAgICBsb25nIGxvbmcgbV9z
dGFydDsKKyAgICBsb25nIGxvbmcgbV9sZW5ndGg7Cit9OworCitjbGFzcyBGaWxlUmFuZ2VCbG9i
SXRlbSA6IHB1YmxpYyBGaWxlQmxvYkl0ZW0geworcHVibGljOgorICAgIEZpbGVSYW5nZUJsb2JJ
dGVtKGNvbnN0IFN0cmluZyYgcGF0aCwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3Ro
LCBkb3VibGUgc25hcHNob3RNb2RpZmljYXRpb25UaW1lKTsKKyAgICBsb25nIGxvbmcgc3RhcnQo
KSBjb25zdCB7IHJldHVybiBtX3N0YXJ0OyB9CisgICAgZG91YmxlIHNuYXBzaG90TW9kaWZpY2F0
aW9uVGltZSgpIGNvbnN0IHsgcmV0dXJuIG1fc25hcHNob3RNb2RpZmljYXRpb25UaW1lOyB9CisK
KyAgICAvLyBCbG9iSXRlbSBtZXRob2RzLgorICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBsb25n
IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQorICAgIHZpcnR1YWwgY29uc3QgRmls
ZVJhbmdlQmxvYkl0ZW0qIHRvRmlsZVJhbmdlQmxvYkl0ZW0oKSBjb25zdCB7IHJldHVybiB0aGlz
OyB9CisgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8QmxvYkl0ZW0+IGRlZXBDb3B5KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGVxdWFs
cyhjb25zdCBCbG9iSXRlbSopIGNvbnN0OworCisgICAgLy8gRmlsZUJsb2JJdGVtIG1ldGhvZHMu
CisgICAgdmlydHVhbCBjb25zdCBTdHJpbmcmIHVuaXF1ZU5hbWUoKSBjb25zdCB7IHJldHVybiBt
X3VuaXF1ZU5hbWU7IH0KKworcHJpdmF0ZToKKyAgICBsb25nIGxvbmcgbV9zdGFydDsKKyAgICBs
b25nIGxvbmcgbV9sZW5ndGg7CisgICAgU3RyaW5nIG1fdW5pcXVlTmFtZTsKKworICAgIGRvdWJs
ZSBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZTsKK307CisKKyNlbmRpZiAvLyBFTkFCTEUoQkxP
Ql9TTElDRSkKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQmxvYkl0ZW1f
aApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcCBiL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAKaW5kZXggOTE4MDAyYWVmZDgxYTY4
OTFmOWYxOWJhZjQ0ZDc1NTkxZmRmYTQ4NC4uYmZhNDFmZDc3YWJhNjljZDM0YWUxOTM4MTc5NWY2
N2RlYWZkYTc1YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRh
LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwCkBAIC0xOSwy
MyArMTksNDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCisKICNpbmNsdWRlICJGb3Jt
RGF0YS5oIgogCi0jaW5jbHVkZSAiQmxvYi5oIgorI2luY2x1ZGUgIkJsb2JJdGVtLmgiCiAjaW5j
bHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCi0jaW5jbHVkZSAiRE9N
Rm9ybURhdGEuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkZpbGUuaCIKICNp
bmNsdWRlICJGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiRm9ybURhdGFCdWlsZGVyLmgiCiAjaW5j
bHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJU
ZXh0RW5jb2RpbmcuaCIKLSNpbmNsdWRlICJVVUlELmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAorI2lmIEVOQUJMRShCTE9CX1NMSUNFKQorY29uc3QgbG9uZyBsb25nIEZvcm1EYXRhRWxlbWVu
dDo6dG9FbmRPZkZpbGUgPSAtMTsKKyNlbmRpZgorCitGb3JtRGF0YUVsZW1lbnQ6OkZvcm1EYXRh
RWxlbWVudChQYXNzUmVmUHRyPEJsb2JJdGVtPiBibG9iSXRlbSwgYm9vbCBzaG91bGRHZW5lcmF0
ZUZpbGUpCisgICAgOiBtX2l0ZW0oYmxvYkl0ZW0pCisgICAgLCBtX3R5cGUobV9pdGVtLT50b0Zp
bGVCbG9iSXRlbSgpID8gZW5jb2RlZEZpbGUgOiBkYXRhKQorICAgICwgbV9kYXRhKG1faXRlbS0+
dG9EYXRhQmxvYkl0ZW0oKSkKKyAgICAsIG1fZmlsZW5hbWUobV9pdGVtLT50b0ZpbGVCbG9iSXRl
bSgpID8gbV9pdGVtLT50b0ZpbGVCbG9iSXRlbSgpLT5wYXRoKCkgOiBTdHJpbmcoKSkKKyNpZiBF
TkFCTEUoQkxPQl9TTElDRSkKKyAgICAsIG1fZmlsZVN0YXJ0KDApCisgICAgLCBtX2ZpbGVMZW5n
dGgodG9FbmRPZkZpbGUpCisgICAgLCBtX2V4cGVjdGVkRmlsZU1vZGlmaWNhdGlvblRpbWUoMCkK
KyNlbmRpZgorICAgICwgbV9zaG91bGRHZW5lcmF0ZUZpbGUoc2hvdWxkR2VuZXJhdGVGaWxlKQor
eworI2lmIEVOQUJMRShCTE9CX1NMSUNFKQorICAgIGlmIChtX2l0ZW0tPnRvRmlsZVJhbmdlQmxv
Ykl0ZW0oKSkgeworICAgICAgICBjb25zdCBGaWxlUmFuZ2VCbG9iSXRlbSogcmFuZ2UgPSBtX2l0
ZW0tPnRvRmlsZVJhbmdlQmxvYkl0ZW0oKTsKKyAgICAgICAgbV9maWxlU3RhcnQgPSByYW5nZS0+
c3RhcnQoKTsKKyAgICAgICAgbV9maWxlTGVuZ3RoID0gcmFuZ2UtPnNpemUoKTsKKyAgICAgICAg
bV9leHBlY3RlZEZpbGVNb2RpZmljYXRpb25UaW1lID0gcmFuZ2UtPnNuYXBzaG90TW9kaWZpY2F0
aW9uVGltZSgpOworICAgIH0KKyNlbmRpZgorfQorCiBpbmxpbmUgRm9ybURhdGE6OkZvcm1EYXRh
KCkKICAgICA6IG1faWRlbnRpZmllcigwKQogICAgICwgbV9oYXNHZW5lcmF0ZWRGaWxlcyhmYWxz
ZSkKQEAgLTg1LDcgKzEwOSw3IEBAIFBhc3NSZWZQdHI8Rm9ybURhdGE+IEZvcm1EYXRhOjpjcmVh
dGUoY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IHNpemUpCiBQYXNzUmVmUHRyPEZvcm1EYXRhPiBG
b3JtRGF0YTo6Y3JlYXRlKGNvbnN0IENTdHJpbmcmIHN0cmluZykKIHsKICAgICBSZWZQdHI8Rm9y
bURhdGE+IHJlc3VsdCA9IGNyZWF0ZSgpOwotICAgIHJlc3VsdC0+YXBwZW5kRGF0YShzdHJpbmcu
ZGF0YSgpLCBzdHJpbmcubGVuZ3RoKCkpOworICAgIHJlc3VsdC0+YXBwZW5kU3RyaW5nKHN0cmlu
Zyk7CiAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiB9CiAKQEAgLTk2LDE3ICsxMjAsMTcg
QEAgUGFzc1JlZlB0cjxGb3JtRGF0YT4gRm9ybURhdGE6OmNyZWF0ZShjb25zdCBWZWN0b3I8Y2hh
cj4mIHZlY3RvcikKICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0KIAotUGFzc1JlZlB0
cjxGb3JtRGF0YT4gRm9ybURhdGE6OmNyZWF0ZShjb25zdCBET01Gb3JtRGF0YSYgZG9tRm9ybURh
dGEpCitQYXNzUmVmUHRyPEZvcm1EYXRhPiBGb3JtRGF0YTo6Y3JlYXRlKGNvbnN0IEJsb2JJdGVt
TGlzdCYgaXRlbUxpc3QsIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcpCiB7CiAgICAgUmVm
UHRyPEZvcm1EYXRhPiByZXN1bHQgPSBjcmVhdGUoKTsKLSAgICByZXN1bHQtPmFwcGVuZERPTUZv
cm1EYXRhKGRvbUZvcm1EYXRhLCBmYWxzZSwgMCk7CisgICAgcmVzdWx0LT5hcHBlbmRGb3JtRGF0
YUl0ZW1zKGl0ZW1MaXN0LCBlbmNvZGluZywgZmFsc2UsIDApOwogICAgIHJldHVybiByZXN1bHQu
cmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPEZvcm1EYXRhPiBGb3JtRGF0YTo6Y3JlYXRlTXVs
dGlQYXJ0KGNvbnN0IERPTUZvcm1EYXRhJiBkb21Gb3JtRGF0YSwgRG9jdW1lbnQqIGRvY3VtZW50
KQorUGFzc1JlZlB0cjxGb3JtRGF0YT4gRm9ybURhdGE6OmNyZWF0ZU11bHRpUGFydChjb25zdCBC
bG9iSXRlbUxpc3QmIGl0ZW1MaXN0LCBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nLCBEb2N1
bWVudCogZG9jdW1lbnQpCiB7CiAgICAgUmVmUHRyPEZvcm1EYXRhPiByZXN1bHQgPSBjcmVhdGUo
KTsKLSAgICByZXN1bHQtPmFwcGVuZERPTUZvcm1EYXRhKGRvbUZvcm1EYXRhLCB0cnVlLCBkb2N1
bWVudCk7CisgICAgcmVzdWx0LT5hcHBlbmRGb3JtRGF0YUl0ZW1zKGl0ZW1MaXN0LCBlbmNvZGlu
ZywgdHJ1ZSwgZG9jdW1lbnQpOwogICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwogfQogCkBA
IC0xMjUsODQgKzE0OSw2OCBAQCBQYXNzUmVmUHRyPEZvcm1EYXRhPiBGb3JtRGF0YTo6ZGVlcENv
cHkoKSBjb25zdAogICAgIGZvcm1EYXRhLT5tX2VsZW1lbnRzLnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkobik7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuOyArK2kpIHsKICAgICAgICAgY29u
c3QgRm9ybURhdGFFbGVtZW50JiBlID0gbV9lbGVtZW50c1tpXTsKLSAgICAgICAgc3dpdGNoIChl
Lm1fdHlwZSkgewotICAgICAgICBjYXNlIEZvcm1EYXRhRWxlbWVudDo6ZGF0YToKLSAgICAgICAg
ICAgIGZvcm1EYXRhLT5tX2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVsZW1lbnQoZS5tX2RhdGEp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEZvcm1EYXRhRWxlbWVudDo6ZW5j
b2RlZEZpbGU6Ci0jaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgICAgICAgICBmb3JtRGF0YS0+
bV9lbGVtZW50cy5hcHBlbmQoRm9ybURhdGFFbGVtZW50KGUubV9maWxlbmFtZSwgZS5tX2ZpbGVT
dGFydCwgZS5tX2ZpbGVMZW5ndGgsIGUubV9leHBlY3RlZEZpbGVNb2RpZmljYXRpb25UaW1lLCBl
Lm1fc2hvdWxkR2VuZXJhdGVGaWxlKSk7Ci0jZWxzZQotICAgICAgICAgICAgZm9ybURhdGEtPm1f
ZWxlbWVudHMuYXBwZW5kKEZvcm1EYXRhRWxlbWVudChlLm1fZmlsZW5hbWUsIGUubV9zaG91bGRH
ZW5lcmF0ZUZpbGUpKTsKLSNlbmRpZgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAg
ICAgICAgZm9ybURhdGEtPm1fZWxlbWVudHMuYXBwZW5kKEZvcm1EYXRhRWxlbWVudChlLml0ZW0o
KS0+ZGVlcENvcHkoKSwgZS5tX3Nob3VsZEdlbmVyYXRlRmlsZSkpOwogICAgIH0KICAgICByZXR1
cm4gZm9ybURhdGEucmVsZWFzZSgpOwogfQogCiB2b2lkIEZvcm1EYXRhOjphcHBlbmREYXRhKGNv
bnN0IHZvaWQqIGRhdGEsIHNpemVfdCBzaXplKQogewotICAgIGlmIChtX2VsZW1lbnRzLmlzRW1w
dHkoKSB8fCBtX2VsZW1lbnRzLmxhc3QoKS5tX3R5cGUgIT0gRm9ybURhdGFFbGVtZW50OjpkYXRh
KQotICAgICAgICBtX2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVsZW1lbnQoKSk7Ci0gICAgRm9y
bURhdGFFbGVtZW50JiBlID0gbV9lbGVtZW50cy5sYXN0KCk7Ci0gICAgc2l6ZV90IG9sZFNpemUg
PSBlLm1fZGF0YS5zaXplKCk7Ci0gICAgZS5tX2RhdGEuZ3JvdyhvbGRTaXplICsgc2l6ZSk7Ci0g
ICAgbWVtY3B5KGUubV9kYXRhLmRhdGEoKSArIG9sZFNpemUsIGRhdGEsIHNpemUpOworICAgIG1f
ZWxlbWVudHMuYXBwZW5kKEZvcm1EYXRhRWxlbWVudChCbG9iSXRlbTo6Y3JlYXRlQnl0ZXNBcnJh
eUJsb2JJdGVtKHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihkYXRhKSwgc2l6ZSkpKTsKK30KKwor
dm9pZCBGb3JtRGF0YTo6YXBwZW5kU3RyaW5nKGNvbnN0IENTdHJpbmcmIHN0cmluZykKK3sKKyAg
ICBtX2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVsZW1lbnQoQmxvYkl0ZW06OmNyZWF0ZVN0cmlu
Z0Jsb2JJdGVtKHN0cmluZykpKTsKIH0KIAogdm9pZCBGb3JtRGF0YTo6YXBwZW5kRmlsZShjb25z
dCBTdHJpbmcmIGZpbGVuYW1lLCBib29sIHNob3VsZEdlbmVyYXRlRmlsZSkKIHsKLSNpZiBFTkFC
TEUoQkxPQl9TTElDRSkKLSAgICBtX2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVsZW1lbnQoZmls
ZW5hbWUsIDAsIEJsb2I6OnRvRW5kT2ZGaWxlLCBCbG9iOjpkb05vdENoZWNrRmlsZUNoYW5nZSwg
c2hvdWxkR2VuZXJhdGVGaWxlKSk7Ci0jZWxzZQotICAgIG1fZWxlbWVudHMuYXBwZW5kKEZvcm1E
YXRhRWxlbWVudChmaWxlbmFtZSwgc2hvdWxkR2VuZXJhdGVGaWxlKSk7Ci0jZW5kaWYKKyAgICBt
X2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVsZW1lbnQoQmxvYkl0ZW06OmNyZWF0ZUZpbGVCbG9i
SXRlbShmaWxlbmFtZSksIHNob3VsZEdlbmVyYXRlRmlsZSkpOworfQorCit2b2lkIEZvcm1EYXRh
OjphcHBlbmRCbG9iSXRlbUxpc3QoY29uc3QgQmxvYkl0ZW1MaXN0JiBsaXN0KQoreworICAgIGZv
ciAoQmxvYkl0ZW1MaXN0Ojpjb25zdF9pdGVyYXRvciBpdGVyKGxpc3QuYmVnaW4oKSk7IGl0ZXIg
IT0gbGlzdC5lbmQoKTsgKytpdGVyKQorICAgICAgICBtX2VsZW1lbnRzLmFwcGVuZCgqaXRlcik7
CiB9CiAKICNpZiBFTkFCTEUoQkxPQl9TTElDRSkKIHZvaWQgRm9ybURhdGE6OmFwcGVuZEZpbGVS
YW5nZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBs
ZW5ndGgsIGRvdWJsZSBleHBlY3RlZE1vZGlmaWNhdGlvblRpbWUsIGJvb2wgc2hvdWxkR2VuZXJh
dGVGaWxlKQogewotICAgIG1fZWxlbWVudHMuYXBwZW5kKEZvcm1EYXRhRWxlbWVudChmaWxlbmFt
ZSwgc3RhcnQsIGxlbmd0aCwgZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lLCBzaG91bGRHZW5lcmF0
ZUZpbGUpKTsKKyAgICBpZiAobGVuZ3RoID09IEZvcm1EYXRhRWxlbWVudDo6dG9FbmRPZkZpbGUp
IHsKKyAgICAgICAgQVNTRVJUKCFzdGFydCk7CisgICAgICAgIEFTU0VSVCghZXhwZWN0ZWRNb2Rp
ZmljYXRpb25UaW1lKTsKKyAgICAgICAgbV9lbGVtZW50cy5hcHBlbmQoRm9ybURhdGFFbGVtZW50
KEJsb2JJdGVtOjpjcmVhdGVGaWxlQmxvYkl0ZW0oZmlsZW5hbWUpLCBzaG91bGRHZW5lcmF0ZUZp
bGUpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9lbGVtZW50cy5hcHBlbmQoRm9ybURhdGFFbGVt
ZW50KEJsb2JJdGVtOjpjcmVhdGVGaWxlUmFuZ2VCbG9iSXRlbShmaWxlbmFtZSwgc3RhcnQsIGxl
bmd0aCwgZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lKSwgc2hvdWxkR2VuZXJhdGVGaWxlKSk7CiB9
CiAjZW5kaWYKIAotdm9pZCBGb3JtRGF0YTo6YXBwZW5kRE9NRm9ybURhdGEoY29uc3QgRE9NRm9y
bURhdGEmIGRvbUZvcm1EYXRhLCBib29sIGlzTXVsdGlQYXJ0Rm9ybSwgRG9jdW1lbnQqIGRvY3Vt
ZW50KQordm9pZCBGb3JtRGF0YTo6YXBwZW5kRm9ybURhdGFJdGVtcyhjb25zdCBCbG9iSXRlbUxp
c3QmIGxpc3QsIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcsIGJvb2wgaXNNdWx0aVBhcnRG
b3JtLCBEb2N1bWVudCogZG9jdW1lbnQpCiB7CiAgICAgRm9ybURhdGFCdWlsZGVyIGZvcm1EYXRh
QnVpbGRlcjsKICAgICBpZiAoaXNNdWx0aVBhcnRGb3JtKQogICAgICAgICBtX2JvdW5kYXJ5ID0g
Zm9ybURhdGFCdWlsZGVyLmdlbmVyYXRlVW5pcXVlQm91bmRhcnlTdHJpbmcoKTsKIAogICAgIFZl
Y3RvcjxjaGFyPiBlbmNvZGVkRGF0YTsKLSAgICBUZXh0RW5jb2RpbmcgZW5jb2RpbmcgPSBkb21G
b3JtRGF0YS5lbmNvZGluZygpOwogCi0gICAgY29uc3QgVmVjdG9yPEZvcm1EYXRhTGlzdDo6SXRl
bT4mIGxpc3QgPSBkb21Gb3JtRGF0YS5saXN0KCk7CiAgICAgc2l6ZV90IGZvcm1EYXRhTGlzdFNp
emUgPSBsaXN0LnNpemUoKTsKICAgICBBU1NFUlQoIShmb3JtRGF0YUxpc3RTaXplICUgMikpOwog
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZm9ybURhdGFMaXN0U2l6ZTsgaSArPSAyKSB7Ci0g
ICAgICAgIGNvbnN0IEZvcm1EYXRhTGlzdDo6SXRlbSYga2V5ID0gbGlzdFtpXTsKLSAgICAgICAg
Y29uc3QgRm9ybURhdGFMaXN0OjpJdGVtJiB2YWx1ZSA9IGxpc3RbaSArIDFdOworICAgICAgICBj
b25zdCBTdHJpbmdCbG9iSXRlbSoga2V5ID0gbGlzdFtpXS0+dG9TdHJpbmdCbG9iSXRlbSgpOwor
ICAgICAgICBjb25zdCBSZWZQdHI8QmxvYkl0ZW0+IHZhbHVlID0gbGlzdFtpICsgMV07CisgICAg
ICAgIEFTU0VSVChrZXkpOwogICAgICAgICBpZiAoaXNNdWx0aVBhcnRGb3JtKSB7CiAgICAgICAg
ICAgICBWZWN0b3I8Y2hhcj4gaGVhZGVyOwotICAgICAgICAgICAgZm9ybURhdGFCdWlsZGVyLmJl
Z2luTXVsdGlQYXJ0SGVhZGVyKGhlYWRlciwgbV9ib3VuZGFyeS5kYXRhKCksIGtleS5kYXRhKCkp
OworICAgICAgICAgICAgZm9ybURhdGFCdWlsZGVyLmJlZ2luTXVsdGlQYXJ0SGVhZGVyKGhlYWRl
ciwgbV9ib3VuZGFyeS5kYXRhKCksIGtleS0+Y3N0cigpKTsKIAogICAgICAgICAgICAgYm9vbCBz
aG91bGRHZW5lcmF0ZUZpbGUgPSBmYWxzZTsKICAgICAgICAgICAgIC8vIElmIHRoZSBjdXJyZW50
IHR5cGUgaXMgRklMRSwgdGhlbiB3ZSBhbHNvIG5lZWQgdG8gaW5jbHVkZSB0aGUgZmlsZW5hbWUK
LSAgICAgICAgICAgIGlmICh2YWx1ZS5ibG9iKCkpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBT
dHJpbmcmIHBhdGggPSB2YWx1ZS5ibG9iKCktPnBhdGgoKTsKLSNpZiBFTkFCTEUoQkxPQl9TTElD
RSkKLSAgICAgICAgICAgICAgICBTdHJpbmcgZmlsZU5hbWU7Ci0gICAgICAgICAgICAgICAgaWYg
KHZhbHVlLmJsb2IoKS0+aXNGaWxlKCkpCi0gICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lID0g
c3RhdGljX2Nhc3Q8RmlsZSo+KHZhbHVlLmJsb2IoKSktPmZpbGVOYW1lKCk7Ci0gICAgICAgICAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIElmIGEgYmxvYiBpcyBzbGljZWQg
ZnJvbSBhIGZpbGUsIGl0IGRvZXMgbm90IGhhdmUgdGhlIGZpbGVuYW1lLiBJbiB0aGlzIGNhc2Us
IGxldCdzIHByb2R1Y2UgYSB1bmlxdWUgZmlsZW5hbWUuCi0gICAgICAgICAgICAgICAgICAgIGZp
bGVOYW1lID0gIkJsb2IiICsgY3JlYXRlQ2Fub25pY2FsVVVJRFN0cmluZygpOwotICAgICAgICAg
ICAgICAgICAgICBmaWxlTmFtZS5yZXBsYWNlKCItIiwgIiIpOyAvLyBGb3Igc2FmdHksIHJlbW92
ZSAnLScgZnJvbSB0aGUgZmlsZW5hbWUgc25jZSBzb21lIHNlcnZlcnMgbWF5IG5vdCBsaWtlIGl0
LgotICAgICAgICAgICAgICAgIH0KLSNlbHNlCi0gICAgICAgICAgICAgICAgQVNTRVJUKHZhbHVl
LmJsb2IoKS0+aXNGaWxlKCkpOwotICAgICAgICAgICAgICAgIFN0cmluZyBmaWxlTmFtZSA9IHN0
YXRpY19jYXN0PEZpbGUqPih2YWx1ZS5ibG9iKCkpLT5maWxlTmFtZSgpOwotI2VuZGlmCisgICAg
ICAgICAgICBpZiAodmFsdWUtPnRvRmlsZUJsb2JJdGVtKCkpIHsKKyAgICAgICAgICAgICAgICBj
b25zdCBGaWxlQmxvYkl0ZW0qIGZpbGUgPSB2YWx1ZS0+dG9GaWxlQmxvYkl0ZW0oKTsKKyAgICAg
ICAgICAgICAgICBjb25zdCBTdHJpbmcmIHBhdGggPSBmaWxlLT5wYXRoKCk7CisgICAgICAgICAg
ICAgICAgU3RyaW5nIGZpbGVOYW1lID0gZmlsZS0+dW5pcXVlTmFtZSgpOwogCiAgICAgICAgICAg
ICAgICAgLy8gTGV0IHRoZSBhcHBsaWNhdGlvbiBzcGVjaWZ5IGEgZmlsZW5hbWUgaWYgaXQncyBn
b2luZyB0byBnZW5lcmF0ZSBhIHJlcGxhY2VtZW50IGZpbGUgZm9yIHRoZSB1cGxvYWQuCiAgICAg
ICAgICAgICAgICAgaWYgKCFwYXRoLmlzRW1wdHkoKSkgewpAQCAtMjE3LDkgKzIyNSw5IEBAIHZv
aWQgRm9ybURhdGE6OmFwcGVuZERPTUZvcm1EYXRhKGNvbnN0IERPTUZvcm1EYXRhJiBkb21Gb3Jt
RGF0YSwgYm9vbCBpc011bHRpUGFyCiAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBpbmNs
dWRlIHRoZSBmaWxlbmFtZT0iLi4iIHBhcnQgaW4gdGhlIGhlYWRlciwgZXZlbiBpZiB0aGUgZmls
ZW5hbWUgaXMgZW1wdHkKICAgICAgICAgICAgICAgICBmb3JtRGF0YUJ1aWxkZXIuYWRkRmlsZW5h
bWVUb011bHRpUGFydEhlYWRlcihoZWFkZXIsIGVuY29kaW5nLCBmaWxlTmFtZSk7CiAKLSAgICAg
ICAgICAgICAgICAvLyBJZiBhIGJsb2IgaXMgc2xpY2VkIGZyb20gYSBmaWxlLCBkbyBub3QgYWRk
IHRoZSBjb250ZW50IHR5cGUuIAorICAgICAgICAgICAgICAgIC8vIElmIHRoZSBpdGVtIGlzIHNs
aWNlZCBmcm9tIGEgZmlsZSwgZG8gbm90IGFkZCB0aGUgY29udGVudCB0eXBlLgogI2lmIEVOQUJM
RShCTE9CX1NMSUNFKQotICAgICAgICAgICAgICAgIGlmICghZmlsZU5hbWUuaXNFbXB0eSgpICYm
IHZhbHVlLmJsb2IoKS0+aXNGaWxlKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWZpbGVOYW1l
LmlzRW1wdHkoKSAmJiAhdmFsdWUtPnRvRmlsZVJhbmdlQmxvYkl0ZW0oKSkgewogI2Vsc2UKICAg
ICAgICAgICAgICAgICBpZiAoIWZpbGVOYW1lLmlzRW1wdHkoKSkgewogI2VuZGlmCkBAIC0yMzcs
MjUgKzI0NSwyMCBAQCB2b2lkIEZvcm1EYXRhOjphcHBlbmRET01Gb3JtRGF0YShjb25zdCBET01G
b3JtRGF0YSYgZG9tRm9ybURhdGEsIGJvb2wgaXNNdWx0aVBhcgogCiAgICAgICAgICAgICAvLyBB
cHBlbmQgYm9keQogICAgICAgICAgICAgYXBwZW5kRGF0YShoZWFkZXIuZGF0YSgpLCBoZWFkZXIu
c2l6ZSgpKTsKLSAgICAgICAgICAgIGlmIChzaXplX3QgZGF0YVNpemUgPSB2YWx1ZS5kYXRhKCku
bGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAgYXBwZW5kRGF0YSh2YWx1ZS5kYXRhKCkuZGF0YSgp
LCBkYXRhU2l6ZSk7Ci0gICAgICAgICAgICBlbHNlIGlmICh2YWx1ZS5ibG9iKCkgJiYgIXZhbHVl
LmJsb2IoKS0+cGF0aCgpLmlzRW1wdHkoKSkKLSNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAgICAg
ICAgICAgICAgICBhcHBlbmRGaWxlUmFuZ2UodmFsdWUuYmxvYigpLT5wYXRoKCksIHZhbHVlLmJs
b2IoKS0+c3RhcnQoKSwgdmFsdWUuYmxvYigpLT5sZW5ndGgoKSwgdmFsdWUuYmxvYigpLT5tb2Rp
ZmljYXRpb25UaW1lKCksIHNob3VsZEdlbmVyYXRlRmlsZSk7Ci0jZWxzZQotICAgICAgICAgICAg
ICAgIGFwcGVuZEZpbGUodmFsdWUuYmxvYigpLT5wYXRoKCksIHNob3VsZEdlbmVyYXRlRmlsZSk7
Ci0jZW5kaWYKLQorICAgICAgICAgICAgbV9lbGVtZW50cy5hcHBlbmQoRm9ybURhdGFFbGVtZW50
KHZhbHVlLCBzaG91bGRHZW5lcmF0ZUZpbGUpKTsKICAgICAgICAgICAgIGFwcGVuZERhdGEoIlxy
XG4iLCAyKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIE9taXQgdGhlIG5hbWUg
ImlzaW5kZXgiIGlmIGl0J3MgdGhlIGZpcnN0IGZvcm0gZGF0YSBlbGVtZW50LgogICAgICAgICAg
ICAgLy8gRklYTUU6IFdoeSBpcyB0aGlzIGEgZ29vZCBydWxlPyBJcyB0aGlzIG9ic29sZXRlIG5v
dz8KLSAgICAgICAgICAgIGlmIChlbmNvZGVkRGF0YS5pc0VtcHR5KCkgJiYga2V5LmRhdGEoKSA9
PSAiaXNpbmRleCIpCi0gICAgICAgICAgICAgICAgRm9ybURhdGFCdWlsZGVyOjplbmNvZGVTdHJp
bmdBc0Zvcm1EYXRhKGVuY29kZWREYXRhLCB2YWx1ZS5kYXRhKCkpOworICAgICAgICAgICAgY29u
c3QgU3RyaW5nQmxvYkl0ZW0qIHN0cmluZ1ZhbHVlID0gdmFsdWUtPnRvU3RyaW5nQmxvYkl0ZW0o
KTsKKyAgICAgICAgICAgIGlmICghc3RyaW5nVmFsdWUpCisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICBpZiAoZW5jb2RlZERhdGEuaXNFbXB0eSgpICYmIGtleS0+Y3N0cigp
ID09ICJpc2luZGV4IikKKyAgICAgICAgICAgICAgICBGb3JtRGF0YUJ1aWxkZXI6OmVuY29kZVN0
cmluZ0FzRm9ybURhdGEoZW5jb2RlZERhdGEsIHN0cmluZ1ZhbHVlLT5jc3RyKCkpOwogICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGZvcm1EYXRhQnVpbGRlci5hZGRLZXlWYWx1ZVBh
aXJBc0Zvcm1EYXRhKGVuY29kZWREYXRhLCBrZXkuZGF0YSgpLCB2YWx1ZS5kYXRhKCkpOworICAg
ICAgICAgICAgICAgIGZvcm1EYXRhQnVpbGRlci5hZGRLZXlWYWx1ZVBhaXJBc0Zvcm1EYXRhKGVu
Y29kZWREYXRhLCBrZXktPmNzdHIoKSwgc3RyaW5nVmFsdWUtPmNzdHIoKSk7CiAgICAgICAgIH0K
LSAgICB9IAorICAgIH0KIAogICAgIGlmIChpc011bHRpUGFydEZvcm0pCiAgICAgICAgIGZvcm1E
YXRhQnVpbGRlci5hZGRCb3VuZGFyeVRvTXVsdGlQYXJ0SGVhZGVyKGVuY29kZWREYXRhLCBtX2Jv
dW5kYXJ5LmRhdGEoKSwgdHJ1ZSk7CkBAIC0yNzAsMTIgKzI3Myw4IEBAIHZvaWQgRm9ybURhdGE6
OmZsYXR0ZW4oVmVjdG9yPGNoYXI+JiBkYXRhKSBjb25zdAogICAgIHNpemVfdCBuID0gbV9lbGVt
ZW50cy5zaXplKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuOyArK2kpIHsKICAgICAg
ICAgY29uc3QgRm9ybURhdGFFbGVtZW50JiBlID0gbV9lbGVtZW50c1tpXTsKLSAgICAgICAgaWYg
KGUubV90eXBlID09IEZvcm1EYXRhRWxlbWVudDo6ZGF0YSkgewotICAgICAgICAgICAgc2l6ZV90
IG9sZFNpemUgPSBkYXRhLnNpemUoKTsKLSAgICAgICAgICAgIHNpemVfdCBkZWx0YSA9IGUubV9k
YXRhLnNpemUoKTsKLSAgICAgICAgICAgIGRhdGEuZ3JvdyhvbGRTaXplICsgZGVsdGEpOwotICAg
ICAgICAgICAgbWVtY3B5KGRhdGEuZGF0YSgpICsgb2xkU2l6ZSwgZS5tX2RhdGEuZGF0YSgpLCBk
ZWx0YSk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKGUubV90eXBlID09IEZvcm1EYXRhRWxlbWVu
dDo6ZGF0YSkKKyAgICAgICAgICAgIGRhdGEuYXBwZW5kKGUubV9kYXRhLmRhdGEoKSwgc3RhdGlj
X2Nhc3Q8c2l6ZV90PihlLm1fZGF0YS5zaXplKCkpKTsKICAgICB9CiB9CiAKQEAgLTI4OSwxMCAr
Mjg4LDEwIEBAIFN0cmluZyBGb3JtRGF0YTo6ZmxhdHRlblRvU3RyaW5nKCkgY29uc3QKIHZvaWQg
Rm9ybURhdGE6OmdlbmVyYXRlRmlsZXMoRG9jdW1lbnQqIGRvY3VtZW50KQogewogICAgIEFTU0VS
VCghbV9oYXNHZW5lcmF0ZWRGaWxlcyk7Ci0gICAgCisKICAgICBpZiAobV9oYXNHZW5lcmF0ZWRG
aWxlcykKICAgICAgICAgcmV0dXJuOwotICAgIAorCiAgICAgUGFnZSogcGFnZSA9IGRvY3VtZW50
LT5wYWdlKCk7CiAgICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm47CkBAIC0zMDIsNyArMzAx
LDcgQEAgdm9pZCBGb3JtRGF0YTo6Z2VuZXJhdGVGaWxlcyhEb2N1bWVudCogZG9jdW1lbnQpCiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuOyArK2kpIHsKICAgICAgICAgRm9ybURhdGFFbGVt
ZW50JiBlID0gbV9lbGVtZW50c1tpXTsKICAgICAgICAgaWYgKGUubV90eXBlID09IEZvcm1EYXRh
RWxlbWVudDo6ZW5jb2RlZEZpbGUgJiYgZS5tX3Nob3VsZEdlbmVyYXRlRmlsZSkgewotICAgICAg
ICAgICAgZS5tX2dlbmVyYXRlZEZpbGVuYW1lID0gY2xpZW50LT5nZW5lcmF0ZVJlcGxhY2VtZW50
RmlsZShlLm1fZmlsZW5hbWUpOworICAgICAgICAgICAgZS5tX2dlbmVyYXRlZEZpbGVuYW1lID0g
Y2xpZW50LT5nZW5lcmF0ZVJlcGxhY2VtZW50RmlsZShlLml0ZW0oKS0+dG9GaWxlQmxvYkl0ZW0o
KS0+cGF0aCgpKTsKICAgICAgICAgICAgIG1faGFzR2VuZXJhdGVkRmlsZXMgPSB0cnVlOwogICAg
ICAgICB9CiAgICAgfQpAQCAtMzEyLDcgKzMxMSw3IEBAIHZvaWQgRm9ybURhdGE6OnJlbW92ZUdl
bmVyYXRlZEZpbGVzSWZOZWVkZWQoKQogewogICAgIGlmICghbV9oYXNHZW5lcmF0ZWRGaWxlcykK
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAKKwogICAgIHNpemVfdCBuID0gbV9lbGVtZW50cy5z
aXplKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuOyArK2kpIHsKICAgICAgICAgRm9y
bURhdGFFbGVtZW50JiBlID0gbV9lbGVtZW50c1tpXTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9Gb3JtRGF0YS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1E
YXRhLmgKaW5kZXggYTQzOTAyMzQ3OTZhMGUyZjE0ZjVkMzQ5ZjVkZDBlZmZjMGE0YjdjZC4uOTFm
YmM5YWQwNjJiM2YwNzE1Yzk3ZTZlYjM4YmFiZjkxYjdmMmU1ZiAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL0Zvcm1EYXRhLmgKQEAgLTIwLDc0ICsyMCw4OSBAQAogI2lmbmRlZiBGb3JtRGF0YV9oCiAj
ZGVmaW5lIEZvcm1EYXRhX2gKIAorI2luY2x1ZGUgIkJsb2JJdGVtLmgiCiAjaW5jbHVkZSAiUGxh
dGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBET01Gb3JtRGF0YTsK
IGNsYXNzIERvY3VtZW50OworY2xhc3MgVGV4dEVuY29kaW5nOwogCisvLyBBIHdyYXBwZXIgY2xh
c3Mgb2YgQmxvYkl0ZW0gZm9yIEZvcm1EYXRhLgogY2xhc3MgRm9ybURhdGFFbGVtZW50IHsKIHB1
YmxpYzoKLSAgICBGb3JtRGF0YUVsZW1lbnQoKSA6IG1fdHlwZShkYXRhKSB7IH0KLSAgICBGb3Jt
RGF0YUVsZW1lbnQoY29uc3QgVmVjdG9yPGNoYXI+JiBhcnJheSkgOiBtX3R5cGUoZGF0YSksIG1f
ZGF0YShhcnJheSkgeyB9Ci0jaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgRm9ybURhdGFFbGVt
ZW50KGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGxvbmcgbG9uZyBmaWxlU3RhcnQsIGxvbmcgbG9u
ZyBmaWxlTGVuZ3RoLCBkb3VibGUgZXhwZWN0ZWRGaWxlTW9kaWZpY2F0aW9uVGltZSwgYm9vbCBz
aG91bGRHZW5lcmF0ZUZpbGUpIDogbV90eXBlKGVuY29kZWRGaWxlKSwgbV9maWxlbmFtZShmaWxl
bmFtZSksIG1fZmlsZVN0YXJ0KGZpbGVTdGFydCksIG1fZmlsZUxlbmd0aChmaWxlTGVuZ3RoKSwg
bV9leHBlY3RlZEZpbGVNb2RpZmljYXRpb25UaW1lKGV4cGVjdGVkRmlsZU1vZGlmaWNhdGlvblRp
bWUpLCBtX3Nob3VsZEdlbmVyYXRlRmlsZShzaG91bGRHZW5lcmF0ZUZpbGUpIHsgfQotI2Vsc2UK
LSAgICBGb3JtRGF0YUVsZW1lbnQoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgYm9vbCBzaG91bGRH
ZW5lcmF0ZUZpbGUpIDogbV90eXBlKGVuY29kZWRGaWxlKSwgbV9maWxlbmFtZShmaWxlbmFtZSks
IG1fc2hvdWxkR2VuZXJhdGVGaWxlKHNob3VsZEdlbmVyYXRlRmlsZSkgeyB9Ci0jZW5kaWYKKyAg
ICBGb3JtRGF0YUVsZW1lbnQoKSA6IG1fZGF0YSgwKSB7IH0KKyAgICBGb3JtRGF0YUVsZW1lbnQo
UGFzc1JlZlB0cjxCbG9iSXRlbT4gYmxvYkl0ZW0sIGJvb2wgc2hvdWxkR2VuZXJhdGVGaWxlID0g
ZmFsc2UpOworCisgICAgY29uc3QgQmxvYkl0ZW0qIGl0ZW0oKSBjb25zdCB7IHJldHVybiBtX2l0
ZW0uZ2V0KCk7IH0KKworICAgIFJlZlB0cjxCbG9iSXRlbT4gbV9pdGVtOwogCisgICAgLy8gRklY
TUU6IGNsZWFuIG1lIHVwLiAgQ29kZSBiZWxvdyBhcmUgbW9zdGx5IGtlcHQgZm9yIGNvbXBhdGli
aWxpdHkuCiAgICAgZW51bSB7IGRhdGEsIGVuY29kZWRGaWxlIH0gbV90eXBlOwotICAgIFZlY3Rv
cjxjaGFyPiBtX2RhdGE7CisgICAgY29uc3Qgc3RydWN0IEJsb2JJdGVtV3JhcHBlciB7CisgICAg
ICAgIEJsb2JJdGVtV3JhcHBlcihjb25zdCBCbG9iSXRlbVdyYXBwZXImIHYpIDogbV9pdGVtKHYu
bV9pdGVtKSB7IH0KKyAgICAgICAgQmxvYkl0ZW1XcmFwcGVyKGNvbnN0IERhdGFCbG9iSXRlbSog
aXRlbSkgOiBtX2l0ZW0oaXRlbSkgeyB9CisgICAgICAgIHNpemVfdCBzaXplKCkgY29uc3QKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKCFtX2l0ZW0pCisgICAgICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2l0ZW0tPnNpemUo
KSk7CisgICAgICAgIH0KKyAgICAgICAgY29uc3QgY2hhciogZGF0YSgpIGNvbnN0CisgICAgICAg
IHsKKyAgICAgICAgICAgIGlmICghbV9pdGVtKQorICAgICAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICAgICAgcmV0dXJuIG1faXRlbS0+ZGF0YSgpOworICAgICAgICB9CisgICAgICAgIGNo
YXIqIHJlbGVhc2VCdWZmZXIoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIW1f
aXRlbSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBtX2l0
ZW0tPnJlbGVhc2VCdWZmZXIoKTsKKyAgICAgICAgfQorICAgICAgICBjb25zdCBEYXRhQmxvYkl0
ZW0qIG1faXRlbTsKKyAgICB9IG1fZGF0YTsKICAgICBTdHJpbmcgbV9maWxlbmFtZTsKICNpZiBF
TkFCTEUoQkxPQl9TTElDRSkKICAgICBsb25nIGxvbmcgbV9maWxlU3RhcnQ7CiAgICAgbG9uZyBs
b25nIG1fZmlsZUxlbmd0aDsKICAgICBkb3VibGUgbV9leHBlY3RlZEZpbGVNb2RpZmljYXRpb25U
aW1lOworCisgICAgc3RhdGljIGNvbnN0IGxvbmcgbG9uZyB0b0VuZE9mRmlsZTsKICNlbmRpZgor
CiAgICAgU3RyaW5nIG1fZ2VuZXJhdGVkRmlsZW5hbWU7CiAgICAgYm9vbCBtX3Nob3VsZEdlbmVy
YXRlRmlsZTsKIH07CiAKIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9ybURhdGFFbGVt
ZW50JiBhLCBjb25zdCBGb3JtRGF0YUVsZW1lbnQmIGIpCiB7Ci0gICAgaWYgKCZhID09ICZiKQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICBpZiAoYS5tX3R5cGUgIT0gYi5tX3R5cGUp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoYS5tX2RhdGEgIT0gYi5tX2RhdGEpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAgICBpZiAoYS5t
X2ZpbGVuYW1lICE9IGIubV9maWxlbmFtZSB8fCBhLm1fZmlsZVN0YXJ0ICE9IGIubV9maWxlU3Rh
cnQgfHwgYS5tX2ZpbGVMZW5ndGggIT0gYi5tX2ZpbGVMZW5ndGggfHwgYS5tX2V4cGVjdGVkRmls
ZU1vZGlmaWNhdGlvblRpbWUgIT0gYi5tX2V4cGVjdGVkRmlsZU1vZGlmaWNhdGlvblRpbWUpCi0j
ZWxzZQotICAgIGlmIChhLm1fZmlsZW5hbWUgIT0gYi5tX2ZpbGVuYW1lKQotI2VuZGlmCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBhLml0ZW0o
KS0+ZXF1YWxzKGIuaXRlbSgpKTsKIH0KLSAKKwogaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25z
dCBGb3JtRGF0YUVsZW1lbnQmIGEsIGNvbnN0IEZvcm1EYXRhRWxlbWVudCYgYikKIHsKICAgICBy
ZXR1cm4gIShhID09IGIpOwogfQotIAorCiBjbGFzcyBGb3JtRGF0YSA6IHB1YmxpYyBSZWZDb3Vu
dGVkPEZvcm1EYXRhPiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Rm9ybURhdGE+
IGNyZWF0ZSgpOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZvcm1EYXRhPiBjcmVhdGUoY29uc3Qg
dm9pZCosIHNpemVfdCk7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGNyZWF0ZShj
b25zdCBXVEY6OkNTdHJpbmcmKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxGb3JtRGF0YT4gY3Jl
YXRlKGNvbnN0IFZlY3RvcjxjaGFyPiYpOwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZvcm1EYXRh
PiBjcmVhdGUoY29uc3QgRE9NRm9ybURhdGEmKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxGb3Jt
RGF0YT4gY3JlYXRlTXVsdGlQYXJ0KGNvbnN0IERPTUZvcm1EYXRhJiwgRG9jdW1lbnQqKTsKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxGb3JtRGF0YT4gY3JlYXRlKGNvbnN0IEJsb2JJdGVtTGlzdCYs
IGNvbnN0IFRleHRFbmNvZGluZyYpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZvcm1EYXRhPiBj
cmVhdGVNdWx0aVBhcnQoY29uc3QgQmxvYkl0ZW1MaXN0JiwgY29uc3QgVGV4dEVuY29kaW5nJiwg
RG9jdW1lbnQqKTsKICAgICBQYXNzUmVmUHRyPEZvcm1EYXRhPiBjb3B5KCkgY29uc3Q7CiAgICAg
UGFzc1JlZlB0cjxGb3JtRGF0YT4gZGVlcENvcHkoKSBjb25zdDsKICAgICB+Rm9ybURhdGEoKTsK
LSAgICAKKwogICAgIHZvaWQgYXBwZW5kRGF0YShjb25zdCB2b2lkKiBkYXRhLCBzaXplX3QpOwor
ICAgIHZvaWQgYXBwZW5kQmxvYkl0ZW1MaXN0KGNvbnN0IEJsb2JJdGVtTGlzdCYpOworICAgIHZv
aWQgYXBwZW5kU3RyaW5nKGNvbnN0IENTdHJpbmcmKTsKICAgICB2b2lkIGFwcGVuZEZpbGUoY29u
c3QgU3RyaW5nJiBmaWxlbmFtZSwgYm9vbCBzaG91bGRHZW5lcmF0ZUZpbGUgPSBmYWxzZSk7CiAj
aWYgRU5BQkxFKEJMT0JfU0xJQ0UpCiAgICAgdm9pZCBhcHBlbmRGaWxlUmFuZ2UoY29uc3QgU3Ry
aW5nJiBmaWxlbmFtZSwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoLCBkb3VibGUg
ZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lLCBib29sIHNob3VsZEdlbmVyYXRlRmlsZSA9IGZhbHNl
KTsKQEAgLTExNSw5ICsxMzAsMTAgQEAgcHJpdmF0ZToKICAgICBGb3JtRGF0YSgpOwogICAgIEZv
cm1EYXRhKGNvbnN0IEZvcm1EYXRhJik7CiAKLSAgICB2b2lkIGFwcGVuZERPTUZvcm1EYXRhKGNv
bnN0IERPTUZvcm1EYXRhJiBkb21Gb3JtRGF0YSwgYm9vbCBpc011bHRpUGFydEZvcm0sIERvY3Vt
ZW50KiBkb2N1bWVudCk7CisgICAgdm9pZCBhcHBlbmRGb3JtRGF0YUl0ZW1zKGNvbnN0IEJsb2JJ
dGVtTGlzdCYgZm9ybURhdGFJdGVtcywgY29uc3QgVGV4dEVuY29kaW5nJiwgYm9vbCBpc011bHRp
UGFydEZvcm0sIERvY3VtZW50KiBkb2N1bWVudCk7CiAKICAgICBWZWN0b3I8Rm9ybURhdGFFbGVt
ZW50PiBtX2VsZW1lbnRzOworCiAgICAgaW50NjRfdCBtX2lkZW50aWZpZXI7CiAgICAgYm9vbCBt
X2hhc0dlbmVyYXRlZEZpbGVzOwogICAgIGJvb2wgbV9hbHdheXNTdHJlYW07CkBAIC0xMzEsNyAr
MTQ3LDcgQEAgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb3JtRGF0YSYgYSwgY29uc3Qg
Rm9ybURhdGEmIGIpCiAKIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgRm9ybURhdGEmIGEs
IGNvbnN0IEZvcm1EYXRhJiBiKQogewotICAgIHJldHVybiBhLmVsZW1lbnRzKCkgIT0gYi5lbGVt
ZW50cygpOworICAgIHJldHVybiAhKGEgPT0gYik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvRm9ybURhdGFTdHJl
YW1NYWMubW0gYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL0Zvcm1EYXRhU3RyZWFtTWFj
Lm1tCmluZGV4IDI3ZWNmZDA4YWQ1YWFhYjg3NTZmYTU5NmQ5OTZiZDJmNmVjNWQwM2YuLjFlNDhl
MmY4ZmJiMmZmZTZlNzc5ZWFiMTBhNjcxMjA0MTc0NmEwNDIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9tYWMvRm9ybURhdGFTdHJlYW1NYWMubW0KKysrIGIvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL21hYy9Gb3JtRGF0YVN0cmVhbU1hYy5tbQpAQCAtMzEsNyArMzEsNiBA
QAogI2ltcG9ydCAiY29uZmlnLmgiCiAjaW1wb3J0ICJGb3JtRGF0YVN0cmVhbU1hYy5oIgogCi0j
aW1wb3J0ICJCbG9iLmgiCiAjaW1wb3J0ICJGaWxlU3lzdGVtLmgiCiAjaW1wb3J0ICJGb3JtRGF0
YS5oIgogI2ltcG9ydCAiUmVzb3VyY2VIYW5kbGUuaCIKQEAgLTE0Miw3ICsxNDEsNyBAQCBzdGF0
aWMgdm9pZCBjbG9zZUN1cnJlbnRTdHJlYW0oRm9ybVN0cmVhbUZpZWxkcyAqZm9ybSkKICAgICAg
ICAgQ0ZSZWxlYXNlKGZvcm0tPmN1cnJlbnRTdHJlYW0pOwogICAgICAgICBmb3JtLT5jdXJyZW50
U3RyZWFtID0gTlVMTDsKICNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAgICAgICAgZm9ybS0+Y3Vy
cmVudFN0cmVhbVJhbmdlTGVuZ3RoID0gQmxvYjo6dG9FbmRPZkZpbGU7CisgICAgICAgIGZvcm0t
PmN1cnJlbnRTdHJlYW1SYW5nZUxlbmd0aCA9IEZvcm1EYXRhRWxlbWVudDo6dG9FbmRPZkZpbGU7
CiAjZW5kaWYKICAgICB9CiAgICAgaWYgKGZvcm0tPmN1cnJlbnREYXRhKSB7CkBAIC0xNjEsMjEg
KzE2MCwxNyBAQCBzdGF0aWMgYm9vbCBhZHZhbmNlQ3VycmVudFN0cmVhbShGb3JtU3RyZWFtRmll
bGRzKiBmb3JtKQogCiAgICAgLy8gQ3JlYXRlIHRoZSBuZXcgc3RyZWFtLgogICAgIEZvcm1EYXRh
RWxlbWVudCYgbmV4dElucHV0ID0gZm9ybS0+cmVtYWluaW5nRWxlbWVudHMubGFzdCgpOworCisg
ICAgLy8gQ2hlY2sgaWYgdGhlIHVuZGVybHlpbmcgZGF0YSBoYXMgYmVjb21lIHN0YWxlIChlLmcu
IHRoZSBmaWxlIGhhcyBiZWVuIGNoYW5nZWQgc2luY2UgaXRzIHNuYXBzaG90IGhhcyBiZWVuIHRh
a2VuKSBvciBub3QuCisgICAgaWYgKCFuZXh0SW5wdXQubV9pdGVtLT5pc1ZhbGlkKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKwogICAgIGlmIChuZXh0SW5wdXQubV90eXBlID09IEZvcm1EYXRh
RWxlbWVudDo6ZGF0YSkgewogICAgICAgICBzaXplX3Qgc2l6ZSA9IG5leHRJbnB1dC5tX2RhdGEu
c2l6ZSgpOwogICAgICAgICBjaGFyKiBkYXRhID0gbmV4dElucHV0Lm1fZGF0YS5yZWxlYXNlQnVm
ZmVyKCk7CiAgICAgICAgIGZvcm0tPmN1cnJlbnRTdHJlYW0gPSBDRlJlYWRTdHJlYW1DcmVhdGVX
aXRoQnl0ZXNOb0NvcHkoMCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVSW50OCo+KGRhdGEpLCBz
aXplLCBrQ0ZBbGxvY2F0b3JOdWxsKTsKICAgICAgICAgZm9ybS0+Y3VycmVudERhdGEgPSBkYXRh
OwogICAgIH0gZWxzZSB7Ci0jaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgICAgIC8vIENoZWNr
IGlmIHRoZSBmaWxlIGhhcyBiZWVuIGNoYW5nZWQgb3Igbm90IGlmIHJlcXVpcmVkLgotICAgICAg
ICBpZiAobmV4dElucHV0Lm1fZXhwZWN0ZWRGaWxlTW9kaWZpY2F0aW9uVGltZSAhPSBCbG9iOjpk
b05vdENoZWNrRmlsZUNoYW5nZSkgewotICAgICAgICAgICAgdGltZV90IGZpbGVNb2RpZmljYXRp
b25UaW1lOwotICAgICAgICAgICAgaWYgKCFnZXRGaWxlTW9kaWZpY2F0aW9uVGltZShuZXh0SW5w
dXQubV9maWxlbmFtZSwgZmlsZU1vZGlmaWNhdGlvblRpbWUpIHx8IGZpbGVNb2RpZmljYXRpb25U
aW1lICE9IHN0YXRpY19jYXN0PHRpbWVfdD4obmV4dElucHV0Lm1fZXhwZWN0ZWRGaWxlTW9kaWZp
Y2F0aW9uVGltZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0j
ZW5kaWYKLQogICAgICAgICBjb25zdCBTdHJpbmcmIHBhdGggPSBuZXh0SW5wdXQubV9zaG91bGRH
ZW5lcmF0ZUZpbGUgPyBuZXh0SW5wdXQubV9nZW5lcmF0ZWRGaWxlbmFtZSA6IG5leHRJbnB1dC5t
X2ZpbGVuYW1lOwogICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGZpbGVuYW1lKEFkb3B0
Q0YsIHBhdGguY3JlYXRlQ0ZTdHJpbmcoKSk7CiAgICAgICAgIFJldGFpblB0cjxDRlVSTFJlZj4g
ZmlsZVVSTChBZG9wdENGLCBDRlVSTENyZWF0ZVdpdGhGaWxlU3lzdGVtUGF0aCgwLCBmaWxlbmFt
ZS5nZXQoKSwga0NGVVJMUE9TSVhQYXRoU3R5bGUsIEZBTFNFKSk7CkBAIC0yMjIsNyArMjE3LDcg
QEAgc3RhdGljIHZvaWQqIGZvcm1DcmVhdGUoQ0ZSZWFkU3RyZWFtUmVmIHN0cmVhbSwgdm9pZCog
Y29udGV4dCkKICAgICBGb3JtU3RyZWFtRmllbGRzKiBuZXdJbmZvID0gbmV3IEZvcm1TdHJlYW1G
aWVsZHM7CiAgICAgbmV3SW5mby0+Y3VycmVudFN0cmVhbSA9IE5VTEw7CiAjaWYgRU5BQkxFKEJM
T0JfU0xJQ0UpCi0gICAgbmV3SW5mby0+Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoID0gQmxvYjo6
dG9FbmRPZkZpbGU7CisgICAgbmV3SW5mby0+Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoID0gRm9y
bURhdGFFbGVtZW50Ojp0b0VuZE9mRmlsZTsKICNlbmRpZgogICAgIG5ld0luZm8tPmN1cnJlbnRE
YXRhID0gMDsKICAgICBuZXdJbmZvLT5mb3JtU3RyZWFtID0gc3RyZWFtOyAvLyBEb24ndCByZXRh
aW4uIFRoYXQgd291bGQgY3JlYXRlIGEgcmVmZXJlbmNlIGN5Y2xlLgpAQCAtMjcwLDcgKzI2NSw3
IEBAIHN0YXRpYyBDRkluZGV4IGZvcm1SZWFkKENGUmVhZFN0cmVhbVJlZiBzdHJlYW0sIFVJbnQ4
KiBidWZmZXIsIENGSW5kZXggYnVmZmVyTGVuCiAgICAgd2hpbGUgKGZvcm0tPmN1cnJlbnRTdHJl
YW0pIHsKICAgICAgICAgQ0ZJbmRleCBieXRlc1RvUmVhZCA9IGJ1ZmZlckxlbmd0aDsKICNpZiBF
TkFCTEUoQkxPQl9TTElDRSkKLSAgICAgICAgaWYgKGZvcm0tPmN1cnJlbnRTdHJlYW1SYW5nZUxl
bmd0aCAhPSBCbG9iOjp0b0VuZE9mRmlsZSAmJiBmb3JtLT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5n
dGggPCBieXRlc1RvUmVhZCkKKyAgICAgICAgaWYgKGZvcm0tPmN1cnJlbnRTdHJlYW1SYW5nZUxl
bmd0aCAhPSBGb3JtRGF0YUVsZW1lbnQ6OnRvRW5kT2ZGaWxlICYmIGZvcm0tPmN1cnJlbnRTdHJl
YW1SYW5nZUxlbmd0aCA8IGJ5dGVzVG9SZWFkKQogICAgICAgICAgICAgYnl0ZXNUb1JlYWQgPSBz
dGF0aWNfY2FzdDxDRkluZGV4Pihmb3JtLT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5ndGgpOwogI2Vu
ZGlmCiAgICAgICAgIENGSW5kZXggYnl0ZXNSZWFkID0gQ0ZSZWFkU3RyZWFtUmVhZChmb3JtLT5j
dXJyZW50U3RyZWFtLCBidWZmZXIsIGJ5dGVzVG9SZWFkKTsKQEAgLTI4Myw3ICsyNzgsNyBAQCBz
dGF0aWMgQ0ZJbmRleCBmb3JtUmVhZChDRlJlYWRTdHJlYW1SZWYgc3RyZWFtLCBVSW50OCogYnVm
ZmVyLCBDRkluZGV4IGJ1ZmZlckxlbgogICAgICAgICAgICAgKmF0RU9GID0gRkFMU0U7CiAgICAg
ICAgICAgICBmb3JtLT5ieXRlc1NlbnQgKz0gYnl0ZXNSZWFkOwogI2lmIEVOQUJMRShCTE9CX1NM
SUNFKQotICAgICAgICAgICAgaWYgKGZvcm0tPmN1cnJlbnRTdHJlYW1SYW5nZUxlbmd0aCAhPSBC
bG9iOjp0b0VuZE9mRmlsZSkKKyAgICAgICAgICAgIGlmIChmb3JtLT5jdXJyZW50U3RyZWFtUmFu
Z2VMZW5ndGggIT0gRm9ybURhdGFFbGVtZW50Ojp0b0VuZE9mRmlsZSkKICAgICAgICAgICAgICAg
ICBmb3JtLT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5ndGggLT0gYnl0ZXNSZWFkOwogI2VuZGlmCiAK
QEAgLTQwMCw3ICszOTUsNyBAQCB2b2lkIHNldEhUVFBCb2R5KE5TTXV0YWJsZVVSTFJlcXVlc3Qg
KnJlcXVlc3QsIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGZvcm1EYXRhKQogICAgICAgICBlbHNlIHsK
ICNpZiBFTkFCTEUoQkxPQl9TTElDRSkKICAgICAgICAgICAgIC8vIElmIHdlJ3JlIHNlbmRpbmcg
dGhlIGZpbGUgcmFuZ2UsIHVzZSB0aGUgZXhpc3RpbmcgcmFuZ2UgbGVuZ3RoIGZvciBub3cuIFdl
IHdpbGwgZGV0ZWN0IGlmIHRoZSBmaWxlIGhhcyBiZWVuIGNoYW5nZWQgcmlnaHQgYmVmb3JlIHdl
IHJlYWQgdGhlIGZpbGUgYW5kIGFib3J0IHRoZSBvcGVyYXRpb24gaWYgbmVjZXNzYXJ5LgotICAg
ICAgICAgICAgaWYgKGVsZW1lbnQubV9maWxlTGVuZ3RoICE9IEJsb2I6OnRvRW5kT2ZGaWxlKSB7
CisgICAgICAgICAgICBpZiAoZWxlbWVudC5tX2ZpbGVMZW5ndGggIT0gRm9ybURhdGFFbGVtZW50
Ojp0b0VuZE9mRmlsZSkgewogICAgICAgICAgICAgICAgIGxlbmd0aCArPSBlbGVtZW50Lm1fZmls
ZUxlbmd0aDsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KZGlmZiAt
LWdpdCBhL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcCBiL1dlYkNvcmUveG1sL1hNTEh0
dHBSZXF1ZXN0LmNwcAppbmRleCA1Y2RlMjRkZTI5ZGI0NDIxMDAwMWEzMDIzMjQ0Y2E0Y2NkMjVj
ZmJiLi40ZDQ1MDNlMzg3ZGE3M2IzNTgxYzI2ZGI1OGZmZmJhM2Y1NThmMDA2IDEwMDY0NAotLS0g
YS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKKysrIGIvV2ViQ29yZS94bWwvWE1MSHR0
cFJlcXVlc3QuY3BwCkBAIC00NzgsMTEgKzQ3OCw3IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OnNl
bmQoQmxvYiogYm9keSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgICAgIC8vIEZJWE1FOiBTaG91
bGQgd2Ugc2V0IGEgQ29udGVudC1UeXBlIGlmIG9uZSBpcyBub3Qgc2V0LgogICAgICAgICAvLyBG
SVhNRTogYWRkIHN1cHBvcnQgZm9yIHVwbG9hZGluZyBidW5kbGVzLgogICAgICAgICBtX3JlcXVl
c3RFbnRpdHlCb2R5ID0gRm9ybURhdGE6OmNyZWF0ZSgpOwotI2lmIEVOQUJMRShCTE9CX1NMSUNF
KQotICAgICAgICBtX3JlcXVlc3RFbnRpdHlCb2R5LT5hcHBlbmRGaWxlUmFuZ2UoYm9keS0+cGF0
aCgpLCBib2R5LT5zdGFydCgpLCBib2R5LT5sZW5ndGgoKSwgYm9keS0+bW9kaWZpY2F0aW9uVGlt
ZSgpKTsKLSNlbHNlCi0gICAgICAgIG1fcmVxdWVzdEVudGl0eUJvZHktPmFwcGVuZEZpbGUoYm9k
eS0+cGF0aCgpLCBmYWxzZSk7Ci0jZW5kaWYKKyAgICAgICAgbV9yZXF1ZXN0RW50aXR5Qm9keS0+
YXBwZW5kQmxvYkl0ZW1MaXN0KGJvZHktPml0ZW1zKCkpOwogICAgIH0KIAogICAgIGNyZWF0ZVJl
cXVlc3QoZWMpOwpAQCAtNDk0LDcgKzQ5MCw3IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OnNlbmQo
RE9NRm9ybURhdGEqIGJvZHksIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgICAgICByZXR1cm47CiAK
ICAgICBpZiAobV9tZXRob2QgIT0gIkdFVCIgJiYgbV9tZXRob2QgIT0gIkhFQUQiICYmIG1fdXJs
LnByb3RvY29sSW5IVFRQRmFtaWx5KCkpIHsKLSAgICAgICAgbV9yZXF1ZXN0RW50aXR5Qm9keSA9
IEZvcm1EYXRhOjpjcmVhdGVNdWx0aVBhcnQoKmJvZHksIGRvY3VtZW50KCkpOworICAgICAgICBt
X3JlcXVlc3RFbnRpdHlCb2R5ID0gRm9ybURhdGE6OmNyZWF0ZU11bHRpUGFydChib2R5LT5saXN0
KCksIGJvZHktPmVuY29kaW5nKCksIGRvY3VtZW50KCkpOwogCiAgICAgICAgIC8vIFdlIG5lZWQg
dG8gYXNrIHRoZSBjbGllbnQgdG8gcHJvdmlkZSB0aGUgZ2VuZXJhdGVkIGZpbGUgbmFtZXMgaWYg
bmVlZGVkLiBXaGVuIEZvcm1EYXRhIGZpbGxzIHRoZSBlbGVtZW50CiAgICAgICAgIC8vIGZvciB0
aGUgZmlsZSwgaXQgY291bGQgc2V0IGEgZmxhZyB0byB1c2UgdGhlIGdlbmVyYXRlZCBmaWxlIG5h
bWUsIGkuZS4gYSBwYWNrYWdlIGZpbGUgb24gTWFjLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggYTQzMzkzODc3
YWJhNWU5Y2RmZGZjMjY4ZmFhOTBiYmZjNmMyYWYxNi4uZDk5OTcyYzkyMDE2YmVkMjMxN2E2MjRj
NmQ2NGE0ZjQ2MjIzYWRkNCAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwor
KysgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTAtMDUt
MTkgIEtpbnVrbyBZYXN1ZGEgIDxraW51a29Aa2ludWtvMi1tYWNwcm8ubXR2LmNvcnAuZ29vZ2xl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBS
ZWZhY3RvciBGb3JtRGF0YSBhbmQgQmxvYiBmb3IgYmV0dGVyIHN1cHBvcnQgb2YgQmxvYnMgc3lu
dGhlc2l6ZWQgYnkgQmxvYkJ1aWxkZXIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0zOTA4MworCisgICAgICAgIFJlcGxhY2UgRmlsZUl0ZW1MaXN0OjpJ
dGVtIGxpc3Qgd2l0aCBCbG9iSXRlbUxpc3QgdG8gZ2V0IGl0IGNvbXBpbGluZworICAgICAgICB3
aXRoIHRoZSByZWZhY3RvcmluZyBpbiBGb3JtRGF0YUxpc3QuCisKKyAgICAgICAgKiBzcmMvV2Vi
U2VhcmNoYWJsZUZvcm1EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okhhc1N1aXRhYmxlVGV4
dEVsZW1lbnQpOgorCiAyMDEwLTA1LTE3ICBKZXJlbXkgT3Jsb3cgIDxqb3Jsb3dAY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEZpc2hlci4KZGlmZiAtLWdpdCBhL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViU2VhcmNoYWJsZUZvcm1EYXRhLmNwcCBiL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViU2VhcmNoYWJsZUZvcm1EYXRhLmNwcAppbmRleCA4ZWVmNmNjODk0N2U1YzZj
YzkzMzA1ZDJjYjYxMTU4ZWVlOWU2OGQ1Li5kYzE4MWVjZTgxMjA0YWJhZmIxOGU3ZDhjNDcxNDg0
OWM5MmRhZjY3IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNlYXJjaGFibGVG
b3JtRGF0YS5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZWFyY2hhYmxlRm9ybURh
dGEuY3BwCkBAIC0xODUsNyArMTg1LDcgQEAgYm9vbCBIYXNTdWl0YWJsZVRleHRFbGVtZW50KGNv
bnN0IEhUTUxGb3JtRWxlbWVudCogZm9ybSwgVmVjdG9yPGNoYXI+KiBlbmNvZGVkU3QKICAgICAg
IGlmICghZm9ybUVsZW1lbnQtPmFwcGVuZEZvcm1EYXRhKGRhdGFMaXN0LCBmYWxzZSkpCiAgICAg
ICAgICAgY29udGludWU7CiAKLSAgICAgIGNvbnN0IFZlY3RvcjxGb3JtRGF0YUxpc3Q6Okl0ZW0+
JiBpdGVtTGlzdCA9IGRhdGFMaXN0Lmxpc3QoKTsKKyAgICAgIGNvbnN0IEJsb2JJdGVtTGlzdCYg
aXRlbUxpc3QgPSBkYXRhTGlzdC5saXN0KCk7CiAgICAgICBpZiAoaXNUZXh0RWxlbWVudCAmJiAh
aXRlbUxpc3QuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgaWYgKHRleHRFbGVtZW50KSB7CiAgICAg
ICAgICAgICAgIC8vIFRoZSBhdXRvLWNvbXBsZXRlIGJhciBvbmx5IGtub3dzIGhvdyB0byBmaWxs
IGluIG9uZSB2YWx1ZS4KQEAgLTE5NCwyMCArMTk0LDI0IEBAIGJvb2wgSGFzU3VpdGFibGVUZXh0
RWxlbWVudChjb25zdCBIVE1MRm9ybUVsZW1lbnQqIGZvcm0sIFZlY3RvcjxjaGFyPiogZW5jb2Rl
ZFN0CiAgICAgICAgICAgfQogICAgICAgICAgIHRleHRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRN
TElucHV0RWxlbWVudCo+KGZvcm1FbGVtZW50KTsKICAgICAgIH0KLSAgICAgIGZvciAoVmVjdG9y
PEZvcm1EYXRhTGlzdDo6SXRlbT46OmNvbnN0X2l0ZXJhdG9yIGooaXRlbUxpc3QuYmVnaW4oKSk7
IGogIT0gaXRlbUxpc3QuZW5kKCk7ICsraikgeworICAgICAgZm9yIChCbG9iSXRlbUxpc3Q6OmNv
bnN0X2l0ZXJhdG9yIGooaXRlbUxpc3QuYmVnaW4oKSk7IGogIT0gaXRlbUxpc3QuZW5kKCk7ICsr
aikgeworICAgICAgICAgIENTdHJpbmcgZGF0YTsKKyAgICAgICAgICBTdHJpbmdCbG9iSXRlbSog
aXRlbSA9IGotPnRvU3RyaW5nQmxvYkl0ZW0oKTsKKyAgICAgICAgICBpZiAoaXRlbSkKKyAgICAg
ICAgICAgIGRhdGEgPSBpdGVtLT5jc3RyKCk7CiAgICAgICAgICAgLy8gSGFuZGxlIElTSU5ERVgg
LyA8aW5wdXQgbmFtZT1pc2luZGV4PiBzcGVjaWFsbHksIGJ1dCBvbmx5IGlmIGl0J3MKICAgICAg
ICAgICAvLyB0aGUgZmlyc3QgZW50cnkuCi0gICAgICAgICAgaWYgKCFlbmNvZGVkU3RyaW5nLT5p
c0VtcHR5KCkgfHwgai0+ZGF0YSgpICE9ICJpc2luZGV4IikgeworICAgICAgICAgIGlmICghZW5j
b2RlZFN0cmluZy0+aXNFbXB0eSgpIHx8IGl0ZW0tPmNzdHIoKSAhPSAiaXNpbmRleCIpIHsKICAg
ICAgICAgICAgICAgaWYgKCFlbmNvZGVkU3RyaW5nLT5pc0VtcHR5KCkpCiAgICAgICAgICAgICAg
ICAgICBlbmNvZGVkU3RyaW5nLT5hcHBlbmQoJyYnKTsKLSAgICAgICAgICAgICAgRm9ybURhdGFC
dWlsZGVyOjplbmNvZGVTdHJpbmdBc0Zvcm1EYXRhKCplbmNvZGVkU3RyaW5nLCBqLT5kYXRhKCkp
OworICAgICAgICAgICAgICBGb3JtRGF0YUJ1aWxkZXI6OmVuY29kZVN0cmluZ0FzRm9ybURhdGEo
KmVuY29kZWRTdHJpbmcsIGRhdGEpOwogICAgICAgICAgICAgICBlbmNvZGVkU3RyaW5nLT5hcHBl
bmQoJz0nKTsKICAgICAgICAgICB9CiAgICAgICAgICAgKytqOwogICAgICAgICAgIGlmIChmb3Jt
RWxlbWVudCA9PSB0ZXh0RWxlbWVudCkKICAgICAgICAgICAgICAgZW5jb2RlZFN0cmluZy0+YXBw
ZW5kKCJ7c2VhcmNoVGVybXN9IiwgMTMpOwogICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
Rm9ybURhdGFCdWlsZGVyOjplbmNvZGVTdHJpbmdBc0Zvcm1EYXRhKCplbmNvZGVkU3RyaW5nLCBq
LT5kYXRhKCkpOworICAgICAgICAgICAgICBGb3JtRGF0YUJ1aWxkZXI6OmVuY29kZVN0cmluZ0Fz
Rm9ybURhdGEoKmVuY29kZWRTdHJpbmcsIGRhdGEpOwogICAgICAgfQogICAgIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56609</attachid>
            <date>2010-05-20 10:55:29 -0700</date>
            <delta_ts>2010-05-20 11:09:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-39083-20100520105528.patch</filename>
            <type>text/plain</type>
            <size>8087</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MmIyNTczZWNkMGUwODQ0Mjc0YjBhZDQzYmYyOTUwOGZlNGJhZGZlYi4uOWFjNGQyMzE2MjI4Mzkx
YTlkMGQyNDNjYzM2ZDliZmRkNmQ1ZWU1NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw5MSBAQAorMjAxMC0wNS0yMCAgS2lu
dWtvIFlhc3VkYSAgPGtpbnVrb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVmYWN0b3IgRm9ybURhdGEgYW5kIEJsb2IgZm9y
IGJldHRlciBzdXBwb3J0IG9mIEJsb2JzIHN5bnRoZXNpemVkIGJ5IEJsb2JCdWlsZGVyLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzkwODMKKworICAg
ICAgICAtIEludHJvZHVjZXMgYSBuZXcgY2xhc3MgQmxvYkl0ZW0gKHBsYXRmb3JtL0Jsb2JEYXRh
LntoLGNwcH0pIGFzCisgICAgICAgICAgYSBiYXNpYyBjb21wb25lbnQgb2YgQmxvYiBhbmQgRm9y
bURhdGEsIGFuZCBtYWtlcyBCbG9iIGFzIGEKKyAgICAgICAgICBjb2xsZWN0aW9uIG9mIEJsb2JJ
dGVtcy4KKyAgICAgICAgLSBGaWxlIHdvdWxkIGJlY29tZSBhIHNwZWNpYWwgdHlwZSBvZiBCbG9i
IHRoYXQgY29udGFpbnMgb25seSBvbmUKKyAgICAgICAgICBGaWxlQmxvYkl0ZW0uCisgICAgICAg
IC0gTWFrZXMgRm9ybURhdGFFbGVtZW50IGEgd3JhcHBlciBvZiBCbG9iSXRlbSAoYXMgYSB0cmFu
c2llbnQKKyAgICAgICAgICBzb2x1dGlvbikuCisgICAgICAgIC0gRml4IHRoZSBkZXBlbmRlbmN5
IHZpb2xhdGlvbiBpbiBGb3JtRGF0YSBzbyB0aGF0IHRoZSBmaWxlcyB1bmRlcgorICAgICAgICAg
IHBsYXRmb3JtLyBkbyBub3QgaW5jbHVkZSBhbnkgaHRtbC8gZmlsZXMuCisKKyAgICAgICAgVGhl
IHBhdGNoIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgbGF0ZXN0IEZpbGUgQVBJIGNoYW5nZXMgKGUuZy4g
dHlwZSwKKyAgICAgICAgdXJsIGFuZCBzbGljZSdzIHR5cGUgcGFyYW1ldGVycykgYW5kIHNob3Vs
ZCBub3QgY2hhbmdlIGFueSBvZiBpdHMKKyAgICAgICAgZXhpc3RpbmcgYmVoYXZpb3JzLgorCisg
ICAgICAgIFRoZSBleGlzdGluZyB0ZXN0cyBzaG91bGQgYmUgYWJsZSB0byBiZSB1c2VkIGZvciBy
ZWdyZXNzaW9uOgorICAgICAgICAtIGh0dHAvdGVzdHMvbG9jYWwvZm9ybWRhdGEvc2VuZC1mb3Jt
LWRhdGEtd2l0aC1zbGljZWQtZmlsZS5odG1sCisgICAgICAgIC0gaHR0cC90ZXN0cy9sb2NhbC9z
ZW5kLXNsaWNlZC1kcmFnZ2VkLWZpbGUuaHRtbAorICAgICAgICAtIGh0dHAvdGVzdHMvbWlzYy9p
c2luZGV4LWZvcm1kYXRhLmh0bWwKKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAg
ICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBX
ZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAg
ICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaHRt
bC9CbG9iLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OkJsb2IpOgorICAgICAgICAoV2Vi
Q29yZTo6QmxvYjo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjpwYXRoKToKKyAgICAg
ICAgKFdlYkNvcmU6OkJsb2I6OmFwcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjpzbGlj
ZSk6CisgICAgICAgICogaHRtbC9CbG9iLmg6CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6dHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpC
bG9iOjppdGVtcyk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjpCbG9iKToKKyAgICAgICAgKiBo
dG1sL0ZpbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsZTo6RmlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGaWxlOjpuYW1lKToKKyAgICAgICAgKiBodG1sL0ZpbGUuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkZpbGU6OmZpbGVOYW1lKToKKyAgICAgICAgKiBodG1sL0ZpbGVTdHJlYW0uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsZVN0cmVhbTo6b3BlbkZvclJlYWQpOgorICAgICAgICAqIGh0
bWwvRm9ybURhdGFMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhTGlzdDo6YXBw
ZW5kU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhTGlzdDo6YXBwZW5kQmxvYik6
CisgICAgICAgICogaHRtbC9Gb3JtRGF0YUxpc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1E
YXRhTGlzdDo6bGlzdCk6CisgICAgICAgICogaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50OjpjcmVhdGVGb3JtRGF0YSk6CisgICAgICAg
ICogcGxhdGZvcm0vQmxvYkl0ZW0uY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9CbG9i
SXRlbS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhRWxlbWVudDo6Rm9ybURhdGFFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9y
bURhdGE6OmNyZWF0ZU11bHRpUGFydCk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YTo6ZGVl
cENvcHkpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6OmFwcGVuZERhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9ybURhdGE6OmFwcGVuZFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpG
b3JtRGF0YTo6YXBwZW5kRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YTo6YXBwZW5k
QmxvYkl0ZW1MaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjphcHBlbmRGaWxlUmFu
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6OmFwcGVuZEZvcm1EYXRhSXRlbXMpOgor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkZvcm1EYXRhRWxlbWVudDo6Rm9ybURhdGFFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZv
cm1EYXRhRWxlbWVudDo6aXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YUVsZW1lbnQ6
OkJsb2JJdGVtV3JhcHBlcjo6QmxvYkl0ZW1XcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZv
cm1EYXRhRWxlbWVudDo6QmxvYkl0ZW1XcmFwcGVyOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OkZvcm1EYXRhRWxlbWVudDo6QmxvYkl0ZW1XcmFwcGVyOjpkYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkZvcm1EYXRhRWxlbWVudDo6QmxvYkl0ZW1XcmFwcGVyOjpyZWxlYXNlQnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3Ih
PSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9tYWMvRm9ybURhdGFTdHJlYW1NYWMubW06
CisgICAgICAgIChXZWJDb3JlOjpjbG9zZUN1cnJlbnRTdHJlYW0pOgorICAgICAgICAoV2ViQ29y
ZTo6YWR2YW5jZUN1cnJlbnRTdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6Zm9ybUNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpmb3JtUmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpzZXRIVFRQ
Qm9keSk6CisgICAgICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlhNTEh0dHBSZXF1ZXN0OjpzZW5kKToKKwogMjAxMC0wNS0xOSAgTWFyY3VzIEJ1bGFjaCAg
PGJ1bGFjaEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU3RldmUgQmxvY2su
CmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvV2Vi
Q29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCBhYjZiYWVmMTI3NGM3MDM1
MTljMDE3YWFhZjU4YzY2OWFiZjRkMTdjLi42ZDU0MTQ5ZTViOTJiNGI5ZDE0NjE2NDVjYWJhN2M2
MTc5ZjI5OTAzIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTIyMTkz
LDYgKzIyMTkzLDE0IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXEJsb2JJdGVtLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4N
CisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXEJsb2JJdGVtLmgiDQor
CQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0
Zm9ybVxDb250ZW50VHlwZS5jcHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpAQCAtMzA1NzMsMTQg
KzMwNTgxLDYgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQotCQkJCVJlbGF0aXZl
UGF0aD0iLi5caHRtbFxCbG9iSXRlbS5jcHAiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZp
bGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEJsb2JJdGVtLmgiDQotCQkJCT4NCi0JCQk8
L0ZpbGU+DQotCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXGNhbnZhc1xDYW52
YXNHcmFkaWVudC5jcHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBmN2E5YWRjNzczZWMzOWE2MDg2YWVlYTQ3MGU1
ZjVhOTUzNGJjN2YwLi42Njg0ZTgxNGI5N2ZkOWQyMTE5MDIwNjZhMzE5OTlmOWU2ZWRmN2MxIDEw
MDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysg
Yi9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjAzNDEsNyAr
MjAzNDEsNiBAQAogCQkJCTUxRUM5MjY1MENFOTBERDQwMEY5MDMwOCAvKiBKU0N1c3RvbVNRTFN0
YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUEzNDE3Q0EwQ0VD
RkYyNTAwNDlDQkRFIC8qIEpTQ3VzdG9tVm9pZENhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUUxMEI5M0MzMEI3M0MyOTEwMDNFRDg5MCAvKiBKU0N1c3RvbVhQYXRoTlNSZXNvbHZlci5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQlCNTlERDY5QTExOTAyOUU1MDA3RTk2ODQgLyogSlNEYXRh
YmFzZUNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDQ0U1OEFDMTA2MUU4Q0YwMDhG
QjM1QSAvKiBKU0RhdGFiYXNlQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBRTgyRjhG
MENBQUZBOUQwMDIyMzdBRSAvKiBKU0RhdGFiYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJD
NzdEMTY5MEZGMTlGNTYwMDcwODg3QiAvKiBKU0RhdGFHcmlkQ29sdW1uLmNwcCBpbiBTb3VyY2Vz
ICovLApAQCAtMjA1NTMsMTIgKzIwNTUyLDggQEAKIAkJCQkxQUU4MkZFQzBDQUIwN0VFMDAyMjM3
QUUgLyogSlNTUUxSZXN1bHRTZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFGRTExOTkwQ0JG
RkNDNDAwMzAxN0ZBIC8qIEpTU1FMUmVzdWx0U2V0Um93TGlzdC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk1MURDRTgwMjBDQUM5RjFDMDA0ODgzNTggLyogSlNTUUxSZXN1bHRTZXRSb3dMaXN0Q3Vz
dG9tLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUI1OURENkE2MTE5MDJBNjIwMDdFOTY4NCAvKiBK
U1NRTFN0YXRlbWVudENhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUI1OURENkFBMTE5
MDJBNzEwMDdFOTY4NCAvKiBKU1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNTE0Qzc2MzgwQ0U5MjI1RTAwN0VGM0NEIC8qIEpTU1FMVHJhbnNhY3Rpb24u
Y3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQjU5REQ2OUUxMTkwMkE0MjAwN0U5Njg0IC8qIEpTU1FM
VHJhbnNhY3Rpb25DYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUQyMzE2RTBDRDI2
OUU3MDBDMUYxOTQgLyogSlNTUUxUcmFuc2FjdGlvbkN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywK
LQkJCQlCNTlERDZBMjExOTAyQTUyMDA3RTk2ODQgLyogSlNTUUxUcmFuc2FjdGlvbkVycm9yQ2Fs
bGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFFM0Y5RDYwREEwNUUxRDAwMjUwOTExIC8q
IEpTU3RvcmFnZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUQwQzUxNjBEQUE5MEI3MDAzQjM4
MzEgLyogSlNTdG9yYWdlQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxRTBCQUVBMERB
NTVENEEwMEE5RTQxNyAvKiBKU1N0b3JhZ2VFdmVudC5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvaHRtbC9Gb3JtRGF0YUxpc3QuaCBiL1dlYkNvcmUvaHRtbC9Gb3JtRGF0
YUxpc3QuaAppbmRleCBiZTM5YjUwNDJjMzM5NDgxNTlmOTMyMmE2MjVhNWZmMWFlNGQzZDI0Li42
MDg4NmI4MzRhMGZiZTdkNDFlZGIzYWQwNjBhNDFhNmI2ZmJkNDI0IDEwMDY0NAotLS0gYS9XZWJD
b3JlL2h0bWwvRm9ybURhdGFMaXN0LmgKKysrIGIvV2ViQ29yZS9odG1sL0Zvcm1EYXRhTGlzdC5o
CkBAIC0yMiw3ICsyMiw2IEBACiAjZGVmaW5lIEZvcm1EYXRhTGlzdF9oCiAKICNpbmNsdWRlICJC
bG9iLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIlRleHRFbmNvZGlu
Zy5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIApkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9odG1sL0hUTUxQcm9ncmVzc0VsZW1lbnQuY3BwIGIvV2ViQ29yZS9odG1sL0hUTUxQcm9ncmVz
c0VsZW1lbnQuY3BwCmluZGV4IDg0YTk3OTRkNTQxODZkMzAzNDYzNWZlYTNjYzA5OTU2OTBmNjhl
ZjYuLmYzNzgyYmZjMDI2M2E3NmI5ZmI1ODk2ZDFiMzgxY2VkOGM2MGNjNjYgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvaHRtbC9IVE1MUHJvZ3Jlc3NFbGVtZW50LmNwcAorKysgYi9XZWJDb3JlL2h0bWwv
SFRNTFByb2dyZXNzRWxlbWVudC5jcHAKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlICJIVE1M
UHJvZ3Jlc3NFbGVtZW50LmgiCiAKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAi
RXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkZvcm1EYXRhTGlzdC5oIgogI2luY2x1ZGUgIkhU
TUxGb3JtRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgpkaWZmIC0tZ2l0IGEvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXgg
ZGFjM2IyZmZhOThlZTJlYzI5ZGRkYzUxZDU2YzFhMjU1ZWFmYzM1OS4uOTQ0YmFlYTFlZWZhZjcx
NWUxYjgwYmFmMzJiMGVmOWZlNDgzZjc0MSAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZworKysgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAK
KzIwMTAtMDUtMjAgIEtpbnVrbyBZYXN1ZGEgIDxraW51a29Aa2ludWtvMi1tYWNwcm8ubXR2LmNv
cnAuZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBSZWZhY3RvciBGb3JtRGF0YSBhbmQgQmxvYiBmb3IgYmV0dGVyIHN1cHBvcnQgb2Yg
QmxvYnMgc3ludGhlc2l6ZWQgYnkgQmxvYkJ1aWxkZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5MDgzCisKKyAgICAgICAgUmVwbGFjZSBGb3JtRGF0
YUxpc3Q6Okl0ZW0gbGlzdCB3aXRoIEJsb2JJdGVtTGlzdCB0byBnZXQgaXQgY29tcGlsaW5nCisg
ICAgICAgIHdpdGggdGhlIHJlZmFjdG9yaW5nIGluIEZvcm1EYXRhTGlzdC4KKworICAgICAgICAq
IHNyYy9XZWJTZWFyY2hhYmxlRm9ybURhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SGFzU3Vp
dGFibGVUZXh0RWxlbWVudCk6CisKIDIwMTAtMDUtMTkgIE1hcmN1cyBCdWxhY2ggIDxidWxhY2hA
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFN0ZXZlIEJsb2NrLgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56610</attachid>
            <date>2010-05-20 11:09:21 -0700</date>
            <delta_ts>2010-05-21 07:39:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-39083-20100520110920.patch</filename>
            <type>text/plain</type>
            <size>74638</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CmluZGV4IDFiYjcyMDg5NzE3MzlkOWY2OTI0NDEyNzgwZjQ4NjRlNTU1ZTBiMjcuLjYxNmY2
M2IyOTcwYzgwYWIxMGI4MDFmNmNmMDlhNGMzYzM0NmVmNmIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
Q01ha2VMaXN0cy50eHQKKysrIGIvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTA5Niw2ICsx
MDk2LDcgQEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAgIHBhZ2UvYW5pbWF0aW9uL0tleWZyYW1l
QW5pbWF0aW9uLmNwcAogCiAgICAgcGxhdGZvcm0vQXJlbmEuY3BwCisgICAgcGxhdGZvcm0vQmxv
Ykl0ZW0uY3BwCiAgICAgcGxhdGZvcm0vQ29udGVudFR5cGUuY3BwCiAgICAgcGxhdGZvcm0vQ29u
dGV4dE1lbnUuY3BwCiAgICAgcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDJiMjU3M2Vj
ZDBlMDg0NDI3NGIwYWQ0M2JmMjk1MDhmZTRiYWRmZWIuLjlhYzRkMjMxNjIyODM5MWE5ZDBkMjQz
Y2MzNmQ5YmZkZDZkNWVlNTUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dl
YkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTEgQEAKKzIwMTAtMDUtMjAgIEtpbnVrbyBZYXN1
ZGEgIDxraW51a29AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yIEZvcm1EYXRhIGFuZCBCbG9iIGZvciBiZXR0ZXIg
c3VwcG9ydCBvZiBCbG9icyBzeW50aGVzaXplZCBieSBCbG9iQnVpbGRlci4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5MDgzCisKKyAgICAgICAgLSBJ
bnRyb2R1Y2VzIGEgbmV3IGNsYXNzIEJsb2JJdGVtIChwbGF0Zm9ybS9CbG9iRGF0YS57aCxjcHB9
KSBhcworICAgICAgICAgIGEgYmFzaWMgY29tcG9uZW50IG9mIEJsb2IgYW5kIEZvcm1EYXRhLCBh
bmQgbWFrZXMgQmxvYiBhcyBhCisgICAgICAgICAgY29sbGVjdGlvbiBvZiBCbG9iSXRlbXMuCisg
ICAgICAgIC0gRmlsZSB3b3VsZCBiZWNvbWUgYSBzcGVjaWFsIHR5cGUgb2YgQmxvYiB0aGF0IGNv
bnRhaW5zIG9ubHkgb25lCisgICAgICAgICAgRmlsZUJsb2JJdGVtLgorICAgICAgICAtIE1ha2Vz
IEZvcm1EYXRhRWxlbWVudCBhIHdyYXBwZXIgb2YgQmxvYkl0ZW0gKGFzIGEgdHJhbnNpZW50Cisg
ICAgICAgICAgc29sdXRpb24pLgorICAgICAgICAtIEZpeCB0aGUgZGVwZW5kZW5jeSB2aW9sYXRp
b24gaW4gRm9ybURhdGEgc28gdGhhdCB0aGUgZmlsZXMgdW5kZXIKKyAgICAgICAgICBwbGF0Zm9y
bS8gZG8gbm90IGluY2x1ZGUgYW55IGh0bWwvIGZpbGVzLgorCisgICAgICAgIFRoZSBwYXRjaCBk
b2Vzbid0IHN1cHBvcnQgdGhlIGxhdGVzdCBGaWxlIEFQSSBjaGFuZ2VzIChlLmcuIHR5cGUsCisg
ICAgICAgIHVybCBhbmQgc2xpY2UncyB0eXBlIHBhcmFtZXRlcnMpIGFuZCBzaG91bGQgbm90IGNo
YW5nZSBhbnkgb2YgaXRzCisgICAgICAgIGV4aXN0aW5nIGJlaGF2aW9ycy4KKworICAgICAgICBU
aGUgZXhpc3RpbmcgdGVzdHMgc2hvdWxkIGJlIGFibGUgdG8gYmUgdXNlZCBmb3IgcmVncmVzc2lv
bjoKKyAgICAgICAgLSBodHRwL3Rlc3RzL2xvY2FsL2Zvcm1kYXRhL3NlbmQtZm9ybS1kYXRhLXdp
dGgtc2xpY2VkLWZpbGUuaHRtbAorICAgICAgICAtIGh0dHAvdGVzdHMvbG9jYWwvc2VuZC1zbGlj
ZWQtZHJhZ2dlZC1maWxlLmh0bWwKKyAgICAgICAgLSBodHRwL3Rlc3RzL21pc2MvaXNpbmRleC1m
b3JtZGF0YS5odG1sCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVt
YWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5w
cm86CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICog
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGh0bWwvQmxvYi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjpCbG9iKToKKyAgICAgICAgKFdlYkNvcmU6OkJs
b2I6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6cGF0aCk6CisgICAgICAgIChXZWJD
b3JlOjpCbG9iOjphcHBlbmQpOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6c2xpY2UpOgorICAg
ICAgICAqIGh0bWwvQmxvYi5oOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkJsb2I6OnR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6aXRl
bXMpOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6QmxvYik6CisgICAgICAgICogaHRtbC9GaWxl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGU6OkZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6
RmlsZTo6bmFtZSk6CisgICAgICAgICogaHRtbC9GaWxlLmg6CisgICAgICAgIChXZWJDb3JlOjpG
aWxlOjpmaWxlTmFtZSk6CisgICAgICAgICogaHRtbC9GaWxlU3RyZWFtLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZpbGVTdHJlYW06Om9wZW5Gb3JSZWFkKToKKyAgICAgICAgKiBodG1sL0Zvcm1E
YXRhTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YUxpc3Q6OmFwcGVuZFN0cmlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YUxpc3Q6OmFwcGVuZEJsb2IpOgorICAgICAg
ICAqIGh0bWwvRm9ybURhdGFMaXN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YUxpc3Q6
Omxpc3QpOgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1FbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6Y3JlYXRlRm9ybURhdGEpOgorICAgICAgICAqIHBsYXRm
b3JtL0Jsb2JJdGVtLmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vQmxvYkl0ZW0uaDog
QWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGb3JtRGF0YUVsZW1lbnQ6OkZvcm1EYXRhRWxlbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpGb3JtRGF0YTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjpj
cmVhdGVNdWx0aVBhcnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6OmRlZXBDb3B5KToK
KyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjphcHBlbmREYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkZvcm1EYXRhOjphcHBlbmRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6
OmFwcGVuZEZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6OmFwcGVuZEJsb2JJdGVt
TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YTo6YXBwZW5kRmlsZVJhbmdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjphcHBlbmRGb3JtRGF0YUl0ZW1zKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0
YUVsZW1lbnQ6OkZvcm1EYXRhRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YUVs
ZW1lbnQ6Oml0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGFFbGVtZW50OjpCbG9iSXRl
bVdyYXBwZXI6OkJsb2JJdGVtV3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YUVs
ZW1lbnQ6OkJsb2JJdGVtV3JhcHBlcjo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0
YUVsZW1lbnQ6OkJsb2JJdGVtV3JhcHBlcjo6ZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb3Jt
RGF0YUVsZW1lbnQ6OkJsb2JJdGVtV3JhcHBlcjo6cmVsZWFzZUJ1ZmZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yIT0pOgorICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvbWFjL0Zvcm1EYXRhU3RyZWFtTWFjLm1tOgorICAgICAg
ICAoV2ViQ29yZTo6Y2xvc2VDdXJyZW50U3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6OmFkdmFu
Y2VDdXJyZW50U3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6OmZvcm1DcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6Zm9ybVJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SFRUUEJvZHkpOgor
ICAgICAgICAqIHhtbC9YTUxIdHRwUmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxI
dHRwUmVxdWVzdDo6c2VuZCk6CisKIDIwMTAtMDUtMTkgIE1hcmN1cyBCdWxhY2ggIDxidWxhY2hA
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFN0ZXZlIEJsb2NrLgpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5k
ZXggNGYzOTUwYjMzYjVjNjdiN2E5NzdmNjU2ODRjZmU0YTI5MDc2MzVmMC4uZmQ0YTk5OGNkZTVh
NjhiYTIwZWFiYzJhYjE0NjlkZjAyZjZjODlhMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5hbQorKysgYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC0xNTMwLDYgKzE1MzAsOCBA
QCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvcGxhdGZvcm0vQXJlbmEuY3BwIFwKIAlX
ZWJDb3JlL3BsYXRmb3JtL0FyZW5hLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vQXV0b2RyYWluZWRQ
b29sLmggXAorCVdlYkNvcmUvcGxhdGZvcm0vQmxvYkl0ZW0uY3BwIFwKKwlXZWJDb3JlL3BsYXRm
b3JtL0Jsb2JJdGVtLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vQ29udGVudFR5cGUuY3BwIFwKIAlX
ZWJDb3JlL3BsYXRmb3JtL0NvbnRlbnRUeXBlLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vQ29udGV4
dE1lbnUuY3BwIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKaW5kZXggMDQ2NjBmYmRmZjVmMTNkYTkyMjQ1ODE0YWU1NDcyOGMzNmE0OGU2
NC4uYWY5ZjU2ZGQzNjc5YzZlODliOGY4YzdlZmQzNDVmZGVkODdmZjMzMCAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTI4NTgs
NiArMjg1OCw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vQXJlbmEuY3BwJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9BcmVuYS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9BdXRvZHJhaW5l
ZFBvb2wuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vQmxvYkl0ZW0uY3BwJywKKyAgICAgICAg
ICAgICdwbGF0Zm9ybS9CbG9iSXRlbS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9Db250ZW50
VHlwZS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL0NvbnRlbnRUeXBlLmgnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL0NvbnRleHRNZW51LmNwcCcsCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dl
YkNvcmUucHJvIGIvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRleCA2YjQyZGE5OTllYjc3MjcyNzdk
NGMxNmNkNmExMzlhZTExODMzZmYyLi5jZGI0M2EzY2RiYjhkZmExNTg5ZmQyYzU5MThkMzY2NDZh
MGZiY2Q1IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUucHJvCisrKyBiL1dlYkNvcmUvV2Vi
Q29yZS5wcm8KQEAgLTgwNSw2ICs4MDUsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBwbGF0Zm9ybS9h
bmltYXRpb24vQW5pbWF0aW9uLmNwcCBcCiAgICAgcGxhdGZvcm0vYW5pbWF0aW9uL0FuaW1hdGlv
bkxpc3QuY3BwIFwKICAgICBwbGF0Zm9ybS9BcmVuYS5jcHAgXAorICAgIHBsYXRmb3JtL0Jsb2JJ
dGVtLmNwcCBcCiAgICAgcGxhdGZvcm0vdGV4dC9CYXNlNjQuY3BwIFwKICAgICBwbGF0Zm9ybS90
ZXh0L0JpZGlDb250ZXh0LmNwcCBcCiAgICAgcGxhdGZvcm0vQ29udGVudFR5cGUuY3BwIFwKQEAg
LTE1NTAsNiArMTU1MSw3IEBAIEhFQURFUlMgKz0gXAogICAgIHBsYXRmb3JtL2FuaW1hdGlvbi9B
bmltYXRpb24uaCBcCiAgICAgcGxhdGZvcm0vYW5pbWF0aW9uL0FuaW1hdGlvbkxpc3QuaCBcCiAg
ICAgcGxhdGZvcm0vQXJlbmEuaCBcCisgICAgcGxhdGZvcm0vQmxvYkl0ZW0uaCBcCiAgICAgcGxh
dGZvcm0vQ29udGVudFR5cGUuaCBcCiAgICAgcGxhdGZvcm0vQ29udGV4dE1lbnUuaCBcCiAgICAg
cGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuaCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3Jl
LnZjcHJvagppbmRleCA1ZGYyMDNiN2FhMTdkNDYxNDExZjkxNzk5ZTEwMTBkN2M3OWUzY2QyLi42
ZDU0MTQ5ZTViOTJiNGI5ZDE0NjE2NDVjYWJhN2M2MTc5ZjI5OTAzIDEwMDY0NAotLS0gYS9XZWJD
b3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS52
Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTIyMTkzLDYgKzIyMTkzLDE0IEBACiAJCQkJPg0KIAkJ
CTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXEJsb2JJ
dGVtLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXHBsYXRmb3JtXEJsb2JJdGVtLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZp
bGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxDb250ZW50VHlwZS5jcHAiDQogCQkJ
CT4NCiAJCQk8L0ZpbGU+DQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2ogYi9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agppbmRleCAzODNjNDM4M2FiODI2MTE4OWMxMTA3OTQwNjAyZGU1ZTgyMGZkZWM0Li42Njg0ZTgx
NGI5N2ZkOWQyMTE5MDIwNjZhMzE5OTlmOWU2ZWRmN2MxIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjI2OSw2ICsyMjY5LDggQEAKIAkJODk1MjUzREQx
MTZDNEVGNTAwQ0FCRjAwIC8qIEZpbGVTdHJlYW1Qcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODk1MjUzREIxMTZDNEVGNTAwQ0FCRjAwIC8qIEZp
bGVTdHJlYW1Qcm94eS5oICovOyB9OwogCQk4OTUyNTNERjExNkM0RjA2MDBDQUJGMDAgLyogRmls
ZVRocmVhZFRhc2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDg5NTI1M0RFMTE2QzRGMDYwMENBQkYwMCAvKiBGaWxlVGhyZWFkVGFzay5oICovOyB9Owog
CQk4RkFDNzc0RDExOTg3MkNCMDAxNUFFOTQgLyogSlNNYWluVGhyZWFkRXhlY1N0YXRlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDhGOTM0RDg0MTE4
OUYxRUUwMDUwOEQ1RCAvKiBKU01haW5UaHJlYWRFeGVjU3RhdGUuY3BwICovOyB9OworCQk4OTg4
RTEwRTExQTM1MDhCMDBEQjczMkUgLyogQmxvYkl0ZW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODk4OEUxMEMxMUEzNTA4QjAwREI3MzJFIC8qIEJs
b2JJdGVtLmNwcCAqLzsgfTsKKwkJODk4OEUxMEYxMUEzNTA4QjAwREI3MzJFIC8qIEJsb2JJdGVt
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4OTg4RTEw
RDExQTM1MDhCMDBEQjczMkUgLyogQmxvYkl0ZW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5MzAyQjBCRDBENzlGODI5MDBDN0VFODMgLyogUGFn
ZUdyb3VwLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDkzMDJCMEJDMEQ3OUY4MjkwMEM3RUU4MyAvKiBQYWdlR3JvdXAuY3BwICovOyB9OwogCQk5MzAy
QjBCRjBENzlGODJDMDBDN0VFODMgLyogUGFnZUdyb3VwLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzAyQjBCRTBENzlGODJDMDBDN0VFODMgLyogUGFn
ZUdyb3VwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJOTMwNUIyNEQwOThGMUI2QjAwQzI4ODU1IC8qIFRpbWVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzA1QjI0QzA5OEYxQjZCMDBDMjg4NTUgLyog
VGltZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpA
QCAtNzg0MSw2ICs3ODQzLDggQEAKIAkJODk1MjUzREUxMTZDNEYwNjAwQ0FCRjAwIC8qIEZpbGVU
aHJlYWRUYXNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbGVUaHJlYWRU
YXNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCThGOTM0RDgzMTE4OUYxRUUwMDUw
OEQ1RCAvKiBKU01haW5UaHJlYWRFeGVjU3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCThGOTM0RDg0MTE4OUYxRUUwMDUwOEQ1RCAvKiBKU01haW5UaHJlYWRFeGVjU3RhdGUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNNYWluVGhyZWFkRXhl
Y1N0YXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODk4OEUxMEMxMUEzNTA4
QjAwREI3MzJFIC8qIEJsb2JJdGVtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEJsb2JJdGVtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODk4OEUx
MEQxMUEzNTA4QjAwREI3MzJFIC8qIEJsb2JJdGVtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEJsb2JJdGVtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzMDJC
MEJDMEQ3OUY4MjkwMEM3RUU4MyAvKiBQYWdlR3JvdXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gUGFnZUdyb3VwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJOTMwMkIwQkUwRDc5RjgyQzAwQzdFRTgzIC8qIFBhZ2VHcm91cC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBQYWdlR3JvdXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOTMwNUIyNEMwOThGMUI2QjAwQzI4ODU1IC8qIFRpbWVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRpbWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0xNTc0Myw2ICsxNTc0Nyw4IEBACiAJCQkJQkNGQjJGNzQwOTdBMkUxQTAwQkE3MDNEIC8q
IEFyZW5hLmNwcCAqLywKIAkJCQlCQ0ZCMkY3NTA5N0EyRTFBMDBCQTcwM0QgLyogQXJlbmEuaCAq
LywKIAkJCQk1MUUxRUNCMTBDOTFDNTU2MDBEQzI1NUIgLyogQXV0b2RyYWluZWRQb29sLmggKi8s
CisJCQkJODk4OEUxMEMxMUEzNTA4QjAwREI3MzJFIC8qIEJsb2JJdGVtLmNwcCAqLywKKwkJCQk4
OTg4RTEwRDExQTM1MDhCMDBEQjczMkUgLyogQmxvYkl0ZW0uaCAqLywKIAkJCQlCQ0M4Q0ZDQTA5
ODZDRDI0MDAxNDBCRjIgLyogQ29sb3JEYXRhLmdwZXJmICovLAogCQkJCTQxRDAxNUM5MEY0QjVD
NzEwMDRBNjYyRiAvKiBDb250ZW50VHlwZS5jcHAgKi8sCiAJCQkJNDFEMDE1QzgwRjRCNUM3MTAw
NEE2NjJGIC8qIENvbnRlbnRUeXBlLmggKi8sCkBAIC0xNjc3MSw2ICsxNjc3Nyw3IEBACiAJCQkJ
QkM1RUI5MjAwRTgyMDQwODAwQjI1OTY1IC8qIEJpbmRpbmdVUkkuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE4OTk0MzI4MEI0MjMzODgwMEQ3QzgwMiAvKiBCaXRtYXBJbWFnZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMkVBRkFGMEYxMEUyQUYyRDAwN0VEM0Q2IC8qIEJsb2IuaCBpbiBIZWFkZXJzICov
LAorCQkJCTg5ODhFMTBGMTFBMzUwOEIwMERCNzMyRSAvKiBCbG9iSXRlbS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJOTNGMTk5QkUwODI0NUU1OTAwMUU5QUJDIC8qIEJsb2NrRXhjZXB0aW9ucy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkM1RUI1RTEwRTgxQkU4NzAwQjI1OTY1IC8qIEJvcmRlckRhdGEu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDNUVCNURCMEU4MUI3RUEwMEIyNTk2NSAvKiBCb3JkZXJW
YWx1ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0xODAxOSw2ICsxODAyNiw3IEBACiAJCQkJRkU4MEQ3
QUEwRTlDMUVEMjAwMEQ2Rjc1IC8qIEpTQ3VzdG9tUG9zaXRpb25FcnJvckNhbGxiYWNrLmggaW4g
SGVhZGVycyAqLywKIAkJCQkxQTM0MTdDOTBDRUNGRjI1MDA0OUNCREUgLyogSlNDdXN0b21Wb2lk
Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUUxMEI5MzdDMEI3M0MwMEEwMDNFRDg5MCAv
KiBKU0N1c3RvbVhQYXRoTlNSZXNvbHZlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQjU5REQ2OTkx
MTkwMjlFNTAwN0U5Njg0IC8qIEpTRGF0YWJhc2VDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMUFFODJGOTAwQ0FBRkE5RDAwMjIzN0FFIC8qIEpTRGF0YWJhc2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDNzdEMTZBMEZGMTlGNTYwMDcwODg3QiAvKiBKU0RhdGFHcmlkQ29sdW1uLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzc3RDE2QzBGRjE5RjU2MDA3MDg4N0IgLyogSlNEYXRhR3JpZENv
bHVtbkxpc3QuaCBpbiBIZWFkZXJzICovLApAQCAtMTgxODMsNyArMTgxOTEsMTEgQEAKIAkJCQlC
QzgyNDMyOTBEMENFOEEyMDA0NjBDOEYgLyogSlNTUUxFcnJvci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMUFFODJGRUQwQ0FCMDdFRTAwMjIzN0FFIC8qIEpTU1FMUmVzdWx0U2V0LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxQUZFMTE5QTBDQkZGQ0M0MDAzMDE3RkEgLyogSlNTUUxSZXN1bHRTZXRSb3dM
aXN0LmggaW4gSGVhZGVycyAqLywKKwkJCQlCNTlERDZBNTExOTAyQTYyMDA3RTk2ODQgLyogSlNT
UUxTdGF0ZW1lbnRDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCisJCQkJQjU5REQ2QTkxMTkwMkE3
MTAwN0U5Njg0IC8qIEpTU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkM4MjQzMkEwRDBDRThBMjAwNDYwQzhGIC8qIEpTU1FMVHJhbnNhY3Rpb24uaCBpbiBI
ZWFkZXJzICovLAorCQkJCUI1OURENjlEMTE5MDJBNDIwMDdFOTY4NCAvKiBKU1NRTFRyYW5zYWN0
aW9uQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAorCQkJCUI1OURENkExMTE5MDJBNTIwMDdFOTY4
NCAvKiBKU1NRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NTFFMEJBRUIwREE1NUQ0QTAwQTlFNDE3IC8qIEpTU3RvcmFnZUV2ZW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkY1MDI2QTEwMkJBOTQzMDA2NkYzOUEgLyogSlNTdHlsZU1lZGlhLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQ0UwMTM5QjBDMEJFRjE4MDA0Mzg2MEEgLyogSlNTdHlsZVNoZWV0Lmgg
aW4gSGVhZGVycyAqLywKQEAgLTE5MjMwLDExICsxOTI0Miw2IEBACiAJCQkJRTFCRTUxMkUwQ0Y2
QzUxMjAwMkVBOTU5IC8qIFhTTFRVbmljb2RlU29ydC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTdE
RDREODcwRkRGNEQ2RTAwRUNGOUE0IC8qIFhTU0F1ZGl0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUNFMTcyRTAxMTEzNkU4Q0UwMDYyQTUzMyAvKiBab29tTW9kZS5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJQjU5REQ2OTkxMTkwMjlFNTAwN0U5Njg0IC8qIEpTRGF0YWJhc2VDYWxsYmFjay5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJQjU5REQ2OUQxMTkwMkE0MjAwN0U5Njg0IC8qIEpTU1FMVHJhbnNhY3Rp
b25DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQjU5REQ2QTExMTkwMkE1MjAwN0U5Njg0
IC8qIEpTU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKLQkJCQlC
NTlERDZBNTExOTAyQTYyMDA3RTk2ODQgLyogSlNTUUxTdGF0ZW1lbnRDYWxsYmFjay5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJQjU5REQ2QTkxMTkwMkE3MTAwN0U5Njg0IC8qIEpTU1FMU3RhdGVtZW50
RXJyb3JDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjU1RDVBQTQxMTkxMzFGQzAwQkND
MzE1IC8qIEpTU1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJ
CUI1OENFQjY5MTE5MTM2MDcwMDJBNjc5MCAvKiBKU0RhdGFiYXNlU3luYy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQjU4Q0VCNkQxMTkxMzYxQzAwMkE2NzkwIC8qIEpTU1FMVHJhbnNhY3Rpb25TeW5j
LmggaW4gSGVhZGVycyAqLywKQEAgLTE5NTg1LDYgKzE5NTkyLDcgQEAKIAkJCQlCQzVFQjkxRjBF
ODIwNDA4MDBCMjU5NjUgLyogQmluZGluZ1VSSS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODk5
NDMyOTBCNDIzMzg4MDBEN0M4MDIgLyogQml0bWFwSW1hZ2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMkVBRkFGMEUxMEUyQUYyRDAwN0VEM0Q2IC8qIEJsb2IuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJODk4OEUxMEUxMUEzNTA4QjAwREI3MzJFIC8qIEJsb2JJdGVtLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTkzRjE5QUUxMDgyNDVFNTkwMDFFOUFCQyAvKiBCbG9ja0V4Y2VwdGlvbnMubW0gaW4g
U291cmNlcyAqLywKIAkJCQlCQ0VBNDg1NDA5N0Q5MzAyMDA5NEM5RTQgLyogYnJlYWtfbGluZXMu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzMDlEREEwOTlFNjQ5MjAwNTZFNTgxIC8qIEJyZWFr
QmxvY2txdW90ZUNvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yMDMzMyw4ICsyMDM0MSw4
IEBACiAJCQkJNTFFQzkyNjUwQ0U5MERENDAwRjkwMzA4IC8qIEpTQ3VzdG9tU1FMU3RhdGVtZW50
RXJyb3JDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTM0MTdDQTBDRUNGRjI1MDA0
OUNCREUgLyogSlNDdXN0b21Wb2lkQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTEw
QjkzQzMwQjczQzI5MTAwM0VEODkwIC8qIEpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcCBpbiBT
b3VyY2VzICovLAotCQkJCTFBRTgyRjhGMENBQUZBOUQwMDIyMzdBRSAvKiBKU0RhdGFiYXNlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUJDQ0U1OEFDMTA2MUU4Q0YwMDhGQjM1QSAvKiBKU0RhdGFi
YXNlQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTFBRTgyRjhGMENBQUZBOUQwMDIyMzdB
RSAvKiBKU0RhdGFiYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNzdEMTY5MEZGMTlGNTYw
MDcwODg3QiAvKiBKU0RhdGFHcmlkQ29sdW1uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNzdE
MTZCMEZGMTlGNTYwMDcwODg3QiAvKiBKU0RhdGFHcmlkQ29sdW1uTGlzdC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCQzc3RDE1MjBGRjE5QzczMDA3MDg4N0IgLyogSlNEYXRhR3JpZENvbHVtbkxp
c3RDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvQmxv
Yi5jcHAgYi9XZWJDb3JlL2h0bWwvQmxvYi5jcHAKaW5kZXggODNiYmRjMGM1MjY0ODQ1NDI2ODgx
OTI2MjE2ODRiNjI4MjAyNGJmNC4uZGZiMmNkMzIyMGNhODEyZjg3MTU2ODM2NzE3ZDI2OTYxZTE2
NmM3OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0Jsb2IuY3BwCisrKyBiL1dlYkNvcmUvaHRt
bC9CbG9iLmNwcApAQCAtMjksOTAgKzI5LDY4IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5o
IgorCiAjaW5jbHVkZSAiQmxvYi5oIgogCisjaW5jbHVkZSAiQmxvYkl0ZW0uaCIKICNpbmNsdWRl
ICJGaWxlU3lzdGVtLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotI2lmIEVOQUJMRShCTE9C
X1NMSUNFKQotY29uc3QgaW50IEJsb2I6OnRvRW5kT2ZGaWxlID0gLTE7Ci1jb25zdCBkb3VibGUg
QmxvYjo6ZG9Ob3RDaGVja0ZpbGVDaGFuZ2UgPSAwOwotI2VuZGlmCi0KIEJsb2I6OkJsb2IoY29u
c3QgU3RyaW5nJiBwYXRoKQotICAgIDogbV9wYXRoKHBhdGgpCi0jaWYgRU5BQkxFKEJMT0JfU0xJ
Q0UpCi0gICAgLCBtX3N0YXJ0KDApCi0gICAgLCBtX2xlbmd0aCh0b0VuZE9mRmlsZSkKLSAgICAs
IG1fc25hcHNob3RDYXB0dXJlZChmYWxzZSkKLSAgICAsIG1fc25hcHNob3RTaXplKDApCi0gICAg
LCBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZShkb05vdENoZWNrRmlsZUNoYW5nZSkKLSNlbmRp
ZgogeworICAgIC8vIE5vdGU6IHRoaXMgZG9lc24ndCBpbml0aWFsaXplIHRoZSB0eXBlIHVubGlr
ZSBGaWxlKHBhdGgpLgorICAgIGFwcGVuZChGaWxlQmxvYkl0ZW06OmNyZWF0ZShwYXRoKSk7CiB9
CiAKLSNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLUJsb2I6OkJsb2IoY29uc3QgU3RyaW5nJiBwYXRo
LCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgsIGxvbmcgbG9uZyBzbmFwc2hvdFNp
emUsIGRvdWJsZSBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUpCi0gICAgOiBtX3BhdGgocGF0aCkK
LSAgICAsIG1fc3RhcnQoc3RhcnQpCi0gICAgLCBtX2xlbmd0aChsZW5ndGgpCi0gICAgLCBtX3Nu
YXBzaG90Q2FwdHVyZWQodHJ1ZSkKLSAgICAsIG1fc25hcHNob3RTaXplKHNuYXBzaG90U2l6ZSkK
LSAgICAsIG1fc25hcHNob3RNb2RpZmljYXRpb25UaW1lKHNuYXBzaG90TW9kaWZpY2F0aW9uVGlt
ZSkKLXsKLSAgICBBU1NFUlQoc3RhcnQgPj0gMCAmJiBsZW5ndGggPj0gMCAmJiBzdGFydCArIGxl
bmd0aCA8PSBzbmFwc2hvdFNpemUgJiYgc25hcHNob3RNb2RpZmljYXRpb25UaW1lKTsKLX0KLSNl
bmRpZgotCiB1bnNpZ25lZCBsb25nIGxvbmcgQmxvYjo6c2l6ZSgpIGNvbnN0CiB7CiAgICAgLy8g
RklYTUU6IEphdmFTY3JpcHQgY2Fubm90IHJlcHJlc2VudCBzaXplcyBhcyBsYXJnZSBhcyB1bnNp
Z25lZCBsb25nIGxvbmcsIHdlIG5lZWQgdG8KICAgICAvLyBjb21lIHVwIHdpdGggYW4gZXhjZXB0
aW9uIHRvIHRocm93IGlmIGZpbGUgc2l6ZSBpcyBub3QgcmVwcmVzZXRhYmxlLgotI2lmIEVOQUJM
RShCTE9CX1NMSUNFKQotICAgIGlmIChtX3NuYXBzaG90Q2FwdHVyZWQpCi0gICAgICAgIHJldHVy
biBtX2xlbmd0aDsKLSNlbmRpZgotICAgIGxvbmcgbG9uZyBzaXplOwotICAgIGlmICghZ2V0Rmls
ZVNpemUobV9wYXRoLCBzaXplKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oc2l6ZSk7CisgICAgdW5zaWduZWQgbG9uZyBsb25n
IHNpemUgPSAwOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9pdGVtTGlzdC5zaXplKCk7
ICsraSkKKyAgICAgICAgc2l6ZSArPSBtX2l0ZW1MaXN0W2ldLT5zaXplKCk7CisgICAgcmV0dXJu
IHNpemU7Cit9CisKK2NvbnN0IFN0cmluZyYgQmxvYjo6cGF0aCgpIGNvbnN0Cit7CisgICAgQVNT
RVJUKG1faXRlbUxpc3Quc2l6ZSgpID09IDEgJiYgbV9pdGVtTGlzdFswXS0+dG9GaWxlQmxvYkl0
ZW0oKSk7CisgICAgcmV0dXJuIG1faXRlbUxpc3RbMF0tPnRvRmlsZUJsb2JJdGVtKCktPnBhdGgo
KTsKK30KKwordm9pZCBCbG9iOjphcHBlbmQoUGFzc1JlZlB0cjxCbG9iSXRlbT4gaXRlbSkKK3sK
KyAgICBtX2l0ZW1MaXN0LmFwcGVuZChpdGVtKTsKIH0KIAogI2lmIEVOQUJMRShCTE9CX1NMSUNF
KQogUGFzc1JlZlB0cjxCbG9iPiBCbG9iOjpzbGljZShsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9u
ZyBsZW5ndGgpIGNvbnN0CiB7Ci0gICAgLy8gV2hlbiB3ZSBzbGljZSBhIGZpbGUgZm9yIHRoZSBm
aXJzdCB0aW1lLCB3ZSBvYnRhaW4gYSBzbmFwc2hvdCBvZiB0aGUgZmlsZSBieSBjYXB0dXJpbmcg
aXRzIGN1cnJlbnQgc2l6ZSBhbmQgbW9kaWZpY2F0aW9uIHRpbWUuCi0gICAgLy8gVGhlIG1vZGlm
aWNhdGlvbiB0aW1lIHdpbGwgYmUgdXNlZCB0byB2ZXJpZnkgaWYgdGhlIGZpbGUgaGFzIGJlZW4g
Y2hhbmdlZCBvciBub3QsIHdoZW4gdGhlIHVuZGVybHlpbmcgZGF0YSBhcmUgYWNjZXNzZWQuCi0g
ICAgbG9uZyBsb25nIHNuYXBzaG90U2l6ZTsKLSAgICBkb3VibGUgc25hcHNob3RNb2RpZmljYXRp
b25UaW1lOwotICAgIGlmIChtX3NuYXBzaG90Q2FwdHVyZWQpIHsKLSAgICAgICAgc25hcHNob3RT
aXplID0gbV9zbmFwc2hvdFNpemU7Ci0gICAgICAgIHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSA9
IG1fc25hcHNob3RNb2RpZmljYXRpb25UaW1lOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIElm
IHdlIGZhaWwgdG8gcmV0cmlldmUgdGhlIHNpemUgb3IgbW9kaWZpY2F0aW9uIHRpbWUsIHByb2Jh
Ymx5IGR1ZSB0byB0aGF0IHRoZSBmaWxlIGhhcyBiZWVuIGRlbGV0ZWQsIGFuIGVtcHR5IGJsb2Ig
d2lsbCBiZSByZXR1cm5lZC4KLSAgICAgICAgdGltZV90IG1vZGlmaWNhdGlvblRpbWU7Ci0gICAg
ICAgIGlmICghZ2V0RmlsZVNpemUobV9wYXRoLCBzbmFwc2hvdFNpemUpIHx8ICFnZXRGaWxlTW9k
aWZpY2F0aW9uVGltZShtX3BhdGgsIG1vZGlmaWNhdGlvblRpbWUpKSB7Ci0gICAgICAgICAgICBz
bmFwc2hvdFNpemUgPSAwOwotICAgICAgICAgICAgc25hcHNob3RNb2RpZmljYXRpb25UaW1lID0g
MDsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUg
PSBtb2RpZmljYXRpb25UaW1lOwotICAgIH0KLQotICAgIC8vIENsYW1wIHRoZSByYW5nZSBpZiBp
dCBleGNlZWRzIHRoZSBzaXplIGxpbWl0LgogICAgIGlmIChzdGFydCA8IDApCiAgICAgICAgIHN0
YXJ0ID0gMDsKICAgICBpZiAobGVuZ3RoIDwgMCkKICAgICAgICAgbGVuZ3RoID0gMDsKIAotICAg
IGlmIChzdGFydCA+IHNuYXBzaG90U2l6ZSkgeworICAgIC8vIENsYW1wIHRoZSByYW5nZSBpZiBp
dCBleGNlZWRzIHRoZSBzaXplIGxpbWl0LgorICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbFNp
emUgPSBzaXplKCk7CisgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oc3Rh
cnQpID4gdG90YWxTaXplKSB7CiAgICAgICAgIHN0YXJ0ID0gMDsKICAgICAgICAgbGVuZ3RoID0g
MDsKLSAgICB9IGVsc2UgaWYgKHN0YXJ0ICsgbGVuZ3RoID4gc25hcHNob3RTaXplKQotICAgICAg
ICBsZW5ndGggPSBzbmFwc2hvdFNpemUgLSBzdGFydDsKKyAgICB9IGVsc2UgaWYgKHN0YXRpY19j
YXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oc3RhcnQgKyBsZW5ndGgpID4gdG90YWxTaXplKQorICAg
ICAgICBsZW5ndGggPSB0b3RhbFNpemUgLSBzdGFydDsKIAotICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgQmxvYihtX3BhdGgsIG1fc3RhcnQgKyBzdGFydCwgbGVuZ3RoLCBzbmFwc2hvdFNpemUsIHNu
YXBzaG90TW9kaWZpY2F0aW9uVGltZSkpOworICAgIHNpemVfdCBpID0gMDsKKyAgICBSZWZQdHI8
QmxvYj4gYmxvYiA9IEJsb2I6OmNyZWF0ZSgpOworICAgIGZvciAoOyBpIDwgbV9pdGVtTGlzdC5z
aXplKCkgJiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihzdGFydCkgPj0gbV9pdGVt
TGlzdFtpXS0+c2l6ZSgpOyArK2kpCisgICAgICAgIHN0YXJ0IC09IG1faXRlbUxpc3RbaV0tPnNp
emUoKTsKKyAgICBmb3IgKDsgbGVuZ3RoID4gMCAmJiBpIDwgbV9pdGVtTGlzdC5zaXplKCk7ICsr
aSkgeworICAgICAgICBibG9iLT5tX2l0ZW1MaXN0LmFwcGVuZChtX2l0ZW1MaXN0W2ldLT5zbGlj
ZShzdGFydCwgbGVuZ3RoKSk7CisgICAgICAgIGxlbmd0aCAtPSBibG9iLT5tX2l0ZW1MaXN0Lmxh
c3QoKS0+c2l6ZSgpOworICAgICAgICBzdGFydCA9IDA7CisgICAgfQorICAgIHJldHVybiBibG9i
LnJlbGVhc2UoKTsKIH0KLSNlbmRpZgorI2VuZGlmIC8vIEVOQUJMRShCTE9CX1NMSUNFKQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvQmxvYi5oIGIv
V2ViQ29yZS9odG1sL0Jsb2IuaAppbmRleCBlOGI1ZjNmZGYwNjlhMmI0ODc2ZWQxNmFiODFiMjJm
MGZmMDM4OTcwLi5hMjdlZTY4Yjk1MGYxZDM4MzdhM2YzMDkxZmNkODg5OTM5YjA5OGJmIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2h0bWwvQmxvYi5oCisrKyBiL1dlYkNvcmUvaHRtbC9CbG9iLmgKQEAg
LTMxLDIwICszMSwyMSBAQAogI2lmbmRlZiBCbG9iX2gKICNkZWZpbmUgQmxvYl9oCiAKLSNpbmNs
dWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiQmxvYkl0ZW0uaCIKICNpbmNsdWRlICJQ
bGF0Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlICJUZXh0RW5jb2Rp
bmcuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIEJsb2IgOiBwdWJsaWMgUmVmQ291bnRlZDxCbG9iPiB7CiBwdWJsaWM6Ci0jaWYgRU5B
QkxFKEJMT0JfU0xJQ0UpCi0gICAgc3RhdGljIGNvbnN0IGludCB0b0VuZE9mRmlsZTsKLSAgICBz
dGF0aWMgY29uc3QgZG91YmxlIGRvTm90Q2hlY2tGaWxlQ2hhbmdlOwotI2VuZGlmCisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8QmxvYj4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgQmxvYigpKTsKKyAgICB9CiAKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxCbG9iPiBj
cmVhdGUoY29uc3QgU3RyaW5nJiBwYXRoKQogICAgIHsKQEAgLTUzLDQ3ICs1NCwyNCBAQCBwdWJs
aWM6CiAKICAgICB2aXJ0dWFsIH5CbG9iKCkgeyB9CiAKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcg
c2l6ZSgpIGNvbnN0OworICAgIGNvbnN0IFN0cmluZyYgcGF0aCgpIGNvbnN0OworICAgIGNvbnN0
IFN0cmluZyYgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQogICAgIHZpcnR1YWwgYm9v
bCBpc0ZpbGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCi0jaWYgRU5BQkxFKEJMT0JfU0xJ
Q0UpCi0gICAgUGFzc1JlZlB0cjxCbG9iPiBzbGljZShsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9u
ZyBsZW5ndGgpIGNvbnN0OwotI2VuZGlmCisgICAgdm9pZCBhcHBlbmQoUGFzc1JlZlB0cjxCbG9i
SXRlbT4gaXRlbSk7CisgICAgY29uc3QgQmxvYkl0ZW1MaXN0JiBpdGVtcygpIGNvbnN0IHsgcmV0
dXJuIG1faXRlbUxpc3Q7IH0KIAotICAgIGNvbnN0IFN0cmluZyYgcGF0aCgpIGNvbnN0IHsgcmV0
dXJuIG1fcGF0aDsgfQotICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplKCkgY29uc3Q7CiAjaWYg
RU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgbG9uZyBsb25nIHN0YXJ0KCkgY29uc3QgeyByZXR1cm4g
bV9zdGFydDsgfQotICAgIGxvbmcgbG9uZyBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0
aDsgfQotICAgIGRvdWJsZSBtb2RpZmljYXRpb25UaW1lKCkgY29uc3QgeyByZXR1cm4gbV9zbmFw
c2hvdE1vZGlmaWNhdGlvblRpbWU7IH0KKyAgICBQYXNzUmVmUHRyPEJsb2I+IHNsaWNlKGxvbmcg
bG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCkgY29uc3Q7CiAjZW5kaWYKIAogcHJvdGVjdGVk
OgorICAgIEJsb2IoKSB7IH0KICAgICBCbG9iKGNvbnN0IFN0cmluZyYgcGF0aCk7CiAKLXByaXZh
dGU6Ci0jaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgQmxvYihjb25zdCBTdHJpbmcmIHBhdGgs
IGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCwgbG9uZyBsb25nIHNuYXBzaG90U2l6
ZSwgZG91YmxlIHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSk7Ci0jZW5kaWYKLQotICAgIC8vIFRo
ZSB1bmRlcmx5aW5nIHBhdGggb2YgdGhlIGZpbGUtYmFzZWQgYmxvYi4gCi0gICAgU3RyaW5nIG1f
cGF0aDsKLQotI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgIC8vIFRoZSBzdGFydGluZyBwb3Np
dGlvbiBvZiB0aGUgZmlsZS1iYXNlZCBibG9iLgotICAgIGxvbmcgbG9uZyBtX3N0YXJ0OwotCi0g
ICAgLy8gVGhlIGxlbmd0aCBvZiB0aGUgZmlsZS1iYXNlZCBibG9iLiBUaGUgdmFsdWUgb2YgLTEg
bWVhbnMgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZS4KLSAgICBsb25nIGxvbmcgbV9sZW5ndGg7Ci0K
LSAgICAvLyBBIGZsYWcgdG8gdGVsbCBpZiBhIHNuYXBzaG90IGhhcyBiZWVuIGNhcHR1cmVkLgot
ICAgIGJvb2wgbV9zbmFwc2hvdENhcHR1cmVkOwotCi0gICAgLy8gVGhlIHNpemUgb2YgdGhlIGZp
bGUgd2hlbiBhIHNuYXBzaG90IGlzIGNhcHR1cmVkLiBJdCBjYW4gYmUgMCBpZiB0aGUgZmlsZSBp
cyBlbXB0eS4KLSAgICBsb25nIGxvbmcgbV9zbmFwc2hvdFNpemU7Ci0KLSAgICAvLyBUaGUgbGFz
dCBtb2RpZmljYXRpb24gdGltZSBvZiB0aGUgZmlsZSB3aGVuIGEgc25hcHNob3QgaXMgY2FwdHVy
ZWQuIFRoZSB2YWx1ZSBvZiAwIGFsc28gbWVhbnMgdGhhdCB0aGUgc25hcHNob3QgaXMgbm90IGNh
cHR1cmVkLgotICAgIGRvdWJsZSBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZTsKLSNlbmRpZgor
ICAgIEJsb2JJdGVtTGlzdCBtX2l0ZW1MaXN0OworICAgIFN0cmluZyBtX3R5cGU7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvRmlsZS5jcHAg
Yi9XZWJDb3JlL2h0bWwvRmlsZS5jcHAKaW5kZXggOTdmZGM0NTc4ZDc0YjIyNWU1OTQ2ZjRkNmFl
ZjI1NjUyNTQ0M2FlNC4uMTgwY2ExN2Y4ZDdhMzRmNTgzOWY1OWU5YjBlMmEzY2MxOThjNTVmNSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0ZpbGUuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9GaWxl
LmNwcApAQCAtMzMsMTIgKzMzLDE2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogRmlsZTo6Rmls
ZShjb25zdCBTdHJpbmcmIHBhdGgpCiAgICAgOiBCbG9iKHBhdGgpCi0gICAgLCBtX25hbWUocGF0
aEdldEZpbGVOYW1lKHBhdGgpKQogewogICAgIC8vIFdlIGRvbid0IHVzZSBNSU1FVHlwZVJlZ2lz
dHJ5OjpnZXRNSU1FVHlwZUZvclBhdGgoKSBiZWNhdXNlIGl0IHJldHVybnMgImFwcGxpY2F0aW9u
L29jdGV0LXN0cmVhbSIgdXBvbiBmYWlsdXJlLgotICAgIGludCBpbmRleCA9IG1fbmFtZS5yZXZl
cnNlRmluZCgnLicpOworICAgIGludCBpbmRleCA9IG5hbWUoKS5yZXZlcnNlRmluZCgnLicpOwog
ICAgIGlmIChpbmRleCAhPSAtMSkKLSAgICAgICAgbV90eXBlID0gTUlNRVR5cGVSZWdpc3RyeTo6
Z2V0TUlNRVR5cGVGb3JFeHRlbnNpb24obV9uYW1lLnN1YnN0cmluZyhpbmRleCArIDEpKTsKKyAg
ICAgICAgbV90eXBlID0gTUlNRVR5cGVSZWdpc3RyeTo6Z2V0TUlNRVR5cGVGb3JFeHRlbnNpb24o
bmFtZSgpLnN1YnN0cmluZyhpbmRleCArIDEpKTsKK30KKworY29uc3QgU3RyaW5nJiBGaWxlOjpu
YW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaXRlbXMoKS5hdCgwKS0+dG9GaWxlQmxvYkl0ZW0o
KS0+bmFtZSgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2h0bWwvRmlsZS5oIGIvV2ViQ29yZS9odG1sL0ZpbGUuaAppbmRleCAwNjVkZDg2YTdiMWVi
Zjc3ZmI0MDY0NmY5YzZlODcwNDY5ZDdlYjA5Li41ODJkYjI4NTAzYmZmZjJiOTU4ZTNkNTI1NWVm
N2FiZTlhNjA1NjlhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvRmlsZS5oCisrKyBiL1dlYkNv
cmUvaHRtbC9GaWxlLmgKQEAgLTQxLDE4ICs0MSwxNCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFs
IGJvb2wgaXNGaWxlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgY29uc3QgU3RyaW5n
JiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9Ci0gICAgY29uc3QgU3RyaW5nJiB0eXBl
KCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisgICAgY29uc3QgU3RyaW5nJiBuYW1lKCkgY29u
c3Q7CiAKICAgICAvLyBGSVhNRTogb2Jzb2xldGUgYXR0cmlidXRlcy4gVG8gYmUgcmVtb3ZlZC4K
LSAgICBjb25zdCBTdHJpbmcmIGZpbGVOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9Cisg
ICAgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG5hbWUoKTsgfQogICAg
IHVuc2lnbmVkIGxvbmcgbG9uZyBmaWxlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemUoKTsgfQog
CiBwcml2YXRlOgogICAgIEZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKTsKLQotICAgIFN0cmluZyBt
X25hbWU7Ci0gICAgU3RyaW5nIG1fdHlwZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9GaWxlU3RyZWFtLmNwcCBiL1dlYkNvcmUvaHRtbC9G
aWxlU3RyZWFtLmNwcAppbmRleCA3MDg5ZjYxNjE1NGU0YjEwYTMyNzczZTAzMzU2YTc5MzY0NThm
OTdmLi4yODcyODAyZjk5ZjNlZjIyZWNkNTFmM2RkYTJhOTkxNmU2ZTEyZDg3IDEwMDY0NAotLS0g
YS9XZWJDb3JlL2h0bWwvRmlsZVN0cmVhbS5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0ZpbGVTdHJl
YW0uY3BwCkBAIC05MCwzMCArOTAsMjYgQEAgdm9pZCBGaWxlU3RyZWFtOjpvcGVuRm9yUmVhZChC
bG9iKiBibG9iKQogICAgIH0KIAogI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgIC8vIENoZWNr
IHRoZSBtb2RpZmljYXRpb250IHRpbWUgZm9yIHRoZSBwb3NzaWJsZSBmaWxlIGNoYW5nZS4KLSAg
ICBpZiAoYmxvYi0+bW9kaWZpY2F0aW9uVGltZSgpICE9IEJsb2I6OmRvTm90Q2hlY2tGaWxlQ2hh
bmdlICYmIHN0YXRpY19jYXN0PHRpbWVfdD4oYmxvYi0+bW9kaWZpY2F0aW9uVGltZSgpKSAhPSBj
dXJyZW50TW9kaWZpY2F0aW9uVGltZSkgewotICAgICAgICBtX2NsaWVudC0+ZGlkRmFpbChOT1Rf
UkVBREFCTEVfRVJSKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEp1bXAgdG8g
dGhlIGJlZ2lubmluZyBwb3NpdGlvbiBpZiB0aGUgZmlsZSBoYXMgYmVlbiBzbGljZWQuCi0gICAg
aWYgKGJsb2ItPnN0YXJ0KCkgPiAwKSB7Ci0gICAgICAgIGlmICghc2Vla0ZpbGUobV9oYW5kbGUs
IGJsb2ItPnN0YXJ0KCksIFNlZWtGcm9tQmVnaW5uaW5nKSkgeworICAgIGNvbnN0IEZpbGVSYW5n
ZUJsb2JJdGVtKiByYW5nZSA9IGJsb2ItPml0ZW1zKCkuYXQoMCktPnRvRmlsZVJhbmdlQmxvYkl0
ZW0oKTsKKyAgICBpZiAocmFuZ2UpIHsKKyAgICAgICAgLy8gQ2hlY2sgdGhlIG1vZGlmaWNhdGlv
bnQgdGltZSBmb3IgdGhlIHBvc3NpYmxlIGZpbGUgY2hhbmdlLgorICAgICAgICBpZiAoc3RhdGlj
X2Nhc3Q8dGltZV90PihyYW5nZS0+c25hcHNob3RNb2RpZmljYXRpb25UaW1lKCkpICE9IGN1cnJl
bnRNb2RpZmljYXRpb25UaW1lKSB7CiAgICAgICAgICAgICBtX2NsaWVudC0+ZGlkRmFpbChOT1Rf
UkVBREFCTEVfRVJSKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorCisgICAgICAg
IC8vIEp1bXAgdG8gdGhlIGJlZ2lubmluZyBwb3NpdGlvbiBpZiB0aGUgZmlsZSBoYXMgYmVlbiBz
bGljZWQuCisgICAgICAgIGlmIChyYW5nZS0+c3RhcnQoKSA+IDApIHsKKyAgICAgICAgICAgIGlm
IChzZWVrRmlsZShtX2hhbmRsZSwgcmFuZ2UtPnN0YXJ0KCksIFNlZWtGcm9tQmVnaW5uaW5nKSA8
IDApIHsKKyAgICAgICAgICAgICAgICBtX2NsaWVudC0+ZGlkRmFpbChOT1RfUkVBREFCTEVfRVJS
KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAg
ICB9CiAjZW5kaWYKIAogICAgIC8vIEdldCB0aGUgc2l6ZS4KLSNpZiBFTkFCTEUoQkxPQl9TTElD
RSkKLSAgICBtX3RvdGFsQnl0ZXNUb1JlYWQgPSBibG9iLT5sZW5ndGgoKTsKLSAgICBpZiAobV90
b3RhbEJ5dGVzVG9SZWFkID09IEJsb2I6OnRvRW5kT2ZGaWxlKQotICAgICAgICBtX3RvdGFsQnl0
ZXNUb1JlYWQgPSBibG9iLT5zaXplKCkgLSBibG9iLT5zdGFydCgpOwotI2Vsc2UKLSAgICBtX3Rv
dGFsID0gYmxvYi0+c2l6ZSgpOwotI2VuZGlmCi0KKyAgICBtX3RvdGFsQnl0ZXNUb1JlYWQgPSBi
bG9iLT5zaXplKCk7CiAgICAgbV9jbGllbnQtPmRpZEdldFNpemUobV90b3RhbEJ5dGVzVG9SZWFk
KTsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0Zvcm1EYXRhTGlzdC5jcHAgYi9XZWJD
b3JlL2h0bWwvRm9ybURhdGFMaXN0LmNwcAppbmRleCAyODFjOWZlNDE4ZTFjNDgzM2JiODdmODJm
NzRmMWNjNGQ3MjJkNTdjLi5kOWZkZTUxYjI4MzJkMTc1MThjZmVlYWZhYzY4Mjk5MTFmOWNiNjgx
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvRm9ybURhdGFMaXN0LmNwcAorKysgYi9XZWJDb3Jl
L2h0bWwvRm9ybURhdGFMaXN0LmNwcApAQCAtMjgsNjQgKzI4LDIyIEBAIEZvcm1EYXRhTGlzdDo6
Rm9ybURhdGFMaXN0KGNvbnN0IFRleHRFbmNvZGluZyYgYykKIHsKIH0KIAotdm9pZCBGb3JtRGF0
YUxpc3Q6OmFwcGVuZFN0cmluZyhjb25zdCBDU3RyaW5nJiBzKQordm9pZCBGb3JtRGF0YUxpc3Q6
OmFwcGVuZFN0cmluZyhjb25zdCBTdHJpbmcmIHMpCiB7Ci0gICAgbV9saXN0LmFwcGVuZChzKTsK
KyAgICBtX2xpc3QuYXBwZW5kKFN0cmluZ0Jsb2JJdGVtOjpjcmVhdGUocywgRW5kaW5nQ1JMRiwg
bV9lbmNvZGluZykpOwogfQogCi0vLyBDaGFuZ2UgcGxhaW4gQ1IgYW5kIHBsYWluIExGIHRvIENS
TEYgcGFpcnMuCi1zdGF0aWMgQ1N0cmluZyBmaXhMaW5lQnJlYWtzKGNvbnN0IENTdHJpbmcmIHMp
Cit2b2lkIEZvcm1EYXRhTGlzdDo6YXBwZW5kU3RyaW5nKGNvbnN0IENTdHJpbmcmIHMpCiB7Ci0g
ICAgLy8gQ29tcHV0ZSB0aGUgbGVuZ3RoLgotICAgIHVuc2lnbmVkIG5ld0xlbiA9IDA7Ci0gICAg
Y29uc3QgY2hhciogcCA9IHMuZGF0YSgpOwotICAgIHdoaWxlIChjaGFyIGMgPSAqcCsrKSB7Ci0g
ICAgICAgIGlmIChjID09ICdccicpIHsKLSAgICAgICAgICAgIC8vIFNhZmUgdG8gbG9vayBhaGVh
ZCBiZWNhdXNlIG9mIHRyYWlsaW5nICdcMCcuCi0gICAgICAgICAgICBpZiAoKnAgIT0gJ1xuJykg
ewotICAgICAgICAgICAgICAgIC8vIFR1cm4gQ1IgaW50byBDUkxGLgotICAgICAgICAgICAgICAg
IG5ld0xlbiArPSAyOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKGMgPT0gJ1xu
JykgewotICAgICAgICAgICAgLy8gVHVybiBMRiBpbnRvIENSTEYuCi0gICAgICAgICAgICBuZXdM
ZW4gKz0gMjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIExlYXZlIG90aGVyIGNo
YXJhY3RlcnMgYWxvbmUuCi0gICAgICAgICAgICBuZXdMZW4gKz0gMTsKLSAgICAgICAgfQotICAg
IH0KLSAgICBpZiAobmV3TGVuID09IHMubGVuZ3RoKCkpIHsKLSAgICAgICAgcmV0dXJuIHM7Ci0g
ICAgfQotICAgIAotICAgIC8vIE1ha2UgYSBjb3B5IG9mIHRoZSBzdHJpbmcuCi0gICAgcCA9IHMu
ZGF0YSgpOwotICAgIGNoYXIqIHE7Ci0gICAgQ1N0cmluZyByZXN1bHQgPSBDU3RyaW5nOjpuZXdV
bmluaXRpYWxpemVkKG5ld0xlbiwgcSk7Ci0gICAgd2hpbGUgKGNoYXIgYyA9ICpwKyspIHsKLSAg
ICAgICAgaWYgKGMgPT0gJ1xyJykgewotICAgICAgICAgICAgLy8gU2FmZSB0byBsb29rIGFoZWFk
IGJlY2F1c2Ugb2YgdHJhaWxpbmcgJ1wwJy4KLSAgICAgICAgICAgIGlmICgqcCAhPSAnXG4nKSB7
Ci0gICAgICAgICAgICAgICAgLy8gVHVybiBDUiBpbnRvIENSTEYuCi0gICAgICAgICAgICAgICAg
KnErKyA9ICdccic7Ci0gICAgICAgICAgICAgICAgKnErKyA9ICdcbic7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0gZWxzZSBpZiAoYyA9PSAnXG4nKSB7Ci0gICAgICAgICAgICAvLyBUdXJuIExG
IGludG8gQ1JMRi4KLSAgICAgICAgICAgICpxKysgPSAnXHInOwotICAgICAgICAgICAgKnErKyA9
ICdcbic7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBMZWF2ZSBvdGhlciBjaGFy
YWN0ZXJzIGFsb25lLgotICAgICAgICAgICAgKnErKyA9IGM7Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICBtX2xpc3QuYXBwZW5kKFN0cmluZ0Jsb2JJdGVtOjpjcmVh
dGUocykpOwogfQogCi12b2lkIEZvcm1EYXRhTGlzdDo6YXBwZW5kU3RyaW5nKGNvbnN0IFN0cmlu
ZyYgcykKK3ZvaWQgRm9ybURhdGFMaXN0OjphcHBlbmRCbG9iKGNvbnN0IFN0cmluZyYga2V5LCBQ
YXNzUmVmUHRyPEJsb2I+IGJsb2IpCiB7Ci0gICAgQ1N0cmluZyBjc3RyID0gZml4TGluZUJyZWFr
cyhtX2VuY29kaW5nLmVuY29kZShzLmNoYXJhY3RlcnMoKSwgcy5sZW5ndGgoKSwgRW50aXRpZXNG
b3JVbmVuY29kYWJsZXMpKTsKLSAgICBtX2xpc3QuYXBwZW5kKGNzdHIpOworICAgIGFwcGVuZFN0
cmluZyhrZXkpOworICAgIGNvbnN0IEJsb2JJdGVtTGlzdCYgbGlzdCA9IGJsb2ItPml0ZW1zKCk7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0LnNpemUoKTsgKytpKQorICAgICAgICBt
X2xpc3QuYXBwZW5kKGxpc3QuYXQoaSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9odG1sL0Zvcm1EYXRhTGlzdC5oIGIvV2ViQ29yZS9odG1sL0Zvcm1EYXRhTGlz
dC5oCmluZGV4IDhlY2Y2NGVlOTNhZDUyNGY0NzkyMWYxZDgyMmY5YTA4YmEwMTNkN2MuLjYwODg2
YjgzNGEwZmJlN2Q0MWVkYjNhZDA2MGE0MWE2YjZmYmQ0MjQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
aHRtbC9Gb3JtRGF0YUxpc3QuaAorKysgYi9XZWJDb3JlL2h0bWwvRm9ybURhdGFMaXN0LmgKQEAg
LTQ2LDI3ICs0Niw5IEBAIHB1YmxpYzoKICAgICAgICAgYXBwZW5kU3RyaW5nKGtleSk7CiAgICAg
ICAgIGFwcGVuZFN0cmluZyhTdHJpbmc6Om51bWJlcih2YWx1ZSkpOwogICAgIH0KLSAgICB2b2lk
IGFwcGVuZEJsb2IoY29uc3QgU3RyaW5nJiBrZXksIFBhc3NSZWZQdHI8QmxvYj4gYmxvYikKLSAg
ICB7Ci0gICAgICAgIGFwcGVuZFN0cmluZyhrZXkpOwotICAgICAgICBtX2xpc3QuYXBwZW5kKGJs
b2IpOwotICAgIH0KLQotICAgIGNsYXNzIEl0ZW0gewotICAgIHB1YmxpYzoKLSAgICAgICAgSXRl
bSgpIHsgfQotICAgICAgICBJdGVtKGNvbnN0IFdURjo6Q1N0cmluZyYgZGF0YSkgOiBtX2RhdGEo
ZGF0YSkgeyB9Ci0gICAgICAgIEl0ZW0oUGFzc1JlZlB0cjxCbG9iPiBibG9iKSA6IG1fYmxvYihi
bG9iKSB7IH0KLQotICAgICAgICBjb25zdCBXVEY6OkNTdHJpbmcmIGRhdGEoKSBjb25zdCB7IHJl
dHVybiBtX2RhdGE7IH0KLSAgICAgICAgQmxvYiogYmxvYigpIGNvbnN0IHsgcmV0dXJuIG1fYmxv
Yi5nZXQoKTsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgV1RGOjpDU3RyaW5nIG1fZGF0YTsK
LSAgICAgICAgUmVmUHRyPEJsb2I+IG1fYmxvYjsKLSAgICB9OworICAgIHZvaWQgYXBwZW5kQmxv
Yihjb25zdCBTdHJpbmcmIGtleSwgUGFzc1JlZlB0cjxCbG9iPiBibG9iKTsKIAotICAgIGNvbnN0
IFZlY3RvcjxJdGVtPiYgbGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdDsgfQorICAgIGNvbnN0
IEJsb2JJdGVtTGlzdCYgbGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdDsgfQogICAgIGNvbnN0
IFRleHRFbmNvZGluZyYgZW5jb2RpbmcoKSBjb25zdCB7IHJldHVybiBtX2VuY29kaW5nOyB9CiAK
IHByaXZhdGU6CkBAIC03NCw3ICs1Niw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBhcHBlbmRTdHJp
bmcoY29uc3QgU3RyaW5nJik7CiAKICAgICBUZXh0RW5jb2RpbmcgbV9lbmNvZGluZzsKLSAgICBW
ZWN0b3I8SXRlbT4gbV9saXN0OworICAgIEJsb2JJdGVtTGlzdCBtX2xpc3Q7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVt
ZW50LmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCmluZGV4IDdjNTgzNjQ0
Yjg2ZjBmMWU3NWNlMWViOWM4NDM1MTYzNTBjZTllM2YuLjlhNGY1ZDU4NDI2ODIwNDhlMTliYjUw
NzZkNjg3MTA2ZDIyOTVkNWQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1l
bnQuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCkBAIC0yMTAsNyAr
MjEwLDcgQEAgUGFzc1JlZlB0cjxGb3JtRGF0YT4gSFRNTEZvcm1FbGVtZW50OjpjcmVhdGVGb3Jt
RGF0YSgpCiAgICAgICAgICAgICBjb250cm9sLT5hcHBlbmRGb3JtRGF0YSgqZG9tRm9ybURhdGEs
IG1fZm9ybURhdGFCdWlsZGVyLmlzTXVsdGlQYXJ0Rm9ybSgpKTsKICAgICB9CiAKLSAgICBSZWZQ
dHI8Rm9ybURhdGE+IHJlc3VsdCA9IChtX2Zvcm1EYXRhQnVpbGRlci5pc011bHRpUGFydEZvcm0o
KSkgPyBGb3JtRGF0YTo6Y3JlYXRlTXVsdGlQYXJ0KCpkb21Gb3JtRGF0YSwgZG9jdW1lbnQoKSkg
OiBGb3JtRGF0YTo6Y3JlYXRlKCpkb21Gb3JtRGF0YSk7CisgICAgUmVmUHRyPEZvcm1EYXRhPiBy
ZXN1bHQgPSAobV9mb3JtRGF0YUJ1aWxkZXIuaXNNdWx0aVBhcnRGb3JtKCkpID8gRm9ybURhdGE6
OmNyZWF0ZU11bHRpUGFydChkb21Gb3JtRGF0YS0+bGlzdCgpLCBkb21Gb3JtRGF0YS0+ZW5jb2Rp
bmcoKSwgZG9jdW1lbnQoKSkgOiBGb3JtRGF0YTo6Y3JlYXRlKGRvbUZvcm1EYXRhLT5saXN0KCks
IGRvbUZvcm1EYXRhLT5lbmNvZGluZygpKTsKIAogICAgIHJlc3VsdC0+c2V0SWRlbnRpZmllcihn
ZW5lcmF0ZUZvcm1EYXRhSWRlbnRpZmllcigpKTsKICAgICByZXR1cm4gcmVzdWx0OwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9odG1sL0hUTUxQcm9ncmVzc0VsZW1lbnQuY3BwIGIvV2ViQ29yZS9odG1s
L0hUTUxQcm9ncmVzc0VsZW1lbnQuY3BwCmluZGV4IDg0YTk3OTRkNTQxODZkMzAzNDYzNWZlYTNj
YzA5OTU2OTBmNjhlZjYuLmYzNzgyYmZjMDI2M2E3NmI5ZmI1ODk2ZDFiMzgxY2VkOGM2MGNjNjYg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MUHJvZ3Jlc3NFbGVtZW50LmNwcAorKysgYi9X
ZWJDb3JlL2h0bWwvSFRNTFByb2dyZXNzRWxlbWVudC5jcHAKQEAgLTIzLDYgKzIzLDcgQEAKICNp
bmNsdWRlICJIVE1MUHJvZ3Jlc3NFbGVtZW50LmgiCiAKICNpbmNsdWRlICJFdmVudE5hbWVzLmgi
CisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkZvcm1EYXRhTGlzdC5oIgog
I2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9CbG9iSXRlbS5jcHAgYi9XZWJDb3JlL3BsYXRmb3Jt
L0Jsb2JJdGVtLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yYjYyMGYwMmJlMjI5YTEwZjE4NDNkMjM5NGE2YWIx
OWQzOGIzM2Y2Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9CbG9iSXRlbS5j
cHAKQEAgLTAsMCArMSwzMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJCbG9i
SXRlbS5oIgorCisjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgorI2luY2x1ZGUgIlVVSUQuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCitzdGF0aWMgY29u
c3QgZG91YmxlIGludmFsaWRNb2RpZmljYXRpb25UaW1lID0gMDsKKworZG91YmxlIGdldEZpbGVT
bmFwc2hvdE1vZGlmaWNhdGlvblRpbWUoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIC8vIEZJ
WE1FOiBzeW5jaHJvbml6ZWQgZmlsZSBjYWxsCisgICAgdGltZV90IG1vZGlmaWNhdGlvblRpbWU7
CisgICAgaWYgKGdldEZpbGVNb2RpZmljYXRpb25UaW1lKHBhdGgsIG1vZGlmaWNhdGlvblRpbWUp
KQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPihtb2RpZmljYXRpb25UaW1lKTsK
KyAgICByZXR1cm4gaW52YWxpZE1vZGlmaWNhdGlvblRpbWU7Cit9CisKK1Bhc3NSZWZQdHI8Qmxv
Ykl0ZW0+IEJsb2JJdGVtOjpzbGljZShsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgp
Cit7CisgICAgQVNTRVJUKHN0YXJ0ID49IDAgJiYgbGVuZ3RoID49IDApOworICAgIGlmICghc3Rh
cnQgJiYgc2l6ZSgpIDw9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4obGVuZ3RoKSkK
KyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgY29uc3QgRmlsZUJsb2JJdGVtKiBmaWxlSXRlbSA9
IHRvRmlsZUJsb2JJdGVtKCk7CisgICAgaWYgKGZpbGVJdGVtKSB7CisgICAgICAgIGNvbnN0IEZp
bGVSYW5nZUJsb2JJdGVtKiBmaWxlUmFuZ2VJdGVtID0gdG9GaWxlUmFuZ2VCbG9iSXRlbSgpOwor
ICAgICAgICBpZiAoZmlsZVJhbmdlSXRlbSkgeworICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0
PHVuc2lnbmVkIGxvbmcgbG9uZz4oc3RhcnQgKyBsZW5ndGgpID4gc2l6ZSgpKQorICAgICAgICAg
ICAgICAgIGxlbmd0aCA9IHNpemUoKSAtIHN0YXJ0OworICAgICAgICAgICAgc3RhcnQgKz0gZmls
ZVJhbmdlSXRlbS0+c3RhcnQoKTsKKyAgICAgICAgICAgIHJldHVybiBGaWxlUmFuZ2VCbG9iSXRl
bTo6Y3JlYXRlKGZpbGVJdGVtLT5wYXRoKCksIHN0YXJ0LCBsZW5ndGgsIGZpbGVSYW5nZUl0ZW0t
PnNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSgpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
RmlsZVJhbmdlQmxvYkl0ZW06OmNyZWF0ZShmaWxlSXRlbS0+cGF0aCgpLCBzdGFydCwgbGVuZ3Ro
LCBnZXRGaWxlU25hcHNob3RNb2RpZmljYXRpb25UaW1lKGZpbGVJdGVtLT5wYXRoKCkpKTsKKyAg
ICB9CisgICAgQVNTRVJUKHRvRGF0YUJsb2JJdGVtKCkpOworICAgIGlmIChzdGF0aWNfY2FzdDx1
bnNpZ25lZCBsb25nIGxvbmc+KHN0YXJ0ICsgbGVuZ3RoKSA+IHNpemUoKSkKKyAgICAgICAgbGVu
Z3RoID0gc2l6ZSgpIC0gc3RhcnQ7CisgICAgcmV0dXJuIERhdGFSYW5nZUJsb2JJdGVtOjpjcmVh
dGUoc3RhdGljX2Nhc3Q8RGF0YVJhbmdlQmxvYkl0ZW0qPih0aGlzKSwgc3RhcnQsIGxlbmd0aCk7
Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoQkxPQl9TTElDRSkKKworLy8gRGF0YUJsb2JJdGVtIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKworY2hhciogRGF0YUJsb2JJdGVtOjpyZWxlYXNlQnVmZmVyKCkgY29uc3QKK3sKKyAg
ICBWZWN0b3I8Y2hhcj4gdjsKKyAgICB2LmFwcGVuZChkYXRhKCksIHN0YXRpY19jYXN0PHNpemVf
dD4oc2l6ZSgpKSk7CisgICAgcmV0dXJuIHYucmVsZWFzZUJ1ZmZlcigpOworfQorCitib29sIERh
dGFCbG9iSXRlbTo6ZXF1YWxzKGNvbnN0IEJsb2JJdGVtKiBpdGVtKSBjb25zdAoreworICAgIGNv
bnN0IERhdGFCbG9iSXRlbSogZGF0YUl0ZW0gPSBpdGVtLT50b0RhdGFCbG9iSXRlbSgpOworICAg
IHJldHVybiAoZGF0YUl0ZW0gJiYgZGF0YSgpID09IGRhdGFJdGVtLT5kYXRhKCkgJiYgc2l6ZSgp
ID09IGRhdGFJdGVtLT5zaXplKCkpOworfQorCisKKy8vIEZpbGVCbG9iSXRlbSAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisK
K1Bhc3NSZWZQdHI8QmxvYkl0ZW0+IEZpbGVCbG9iSXRlbTo6Y3JlYXRlKGNvbnN0IFN0cmluZyYg
cGF0aCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoc3RhdGljX2Nhc3Q8QmxvYkl0ZW0qPihuZXcg
RmlsZUJsb2JJdGVtKHBhdGgpKSk7Cit9CisKK0ZpbGVCbG9iSXRlbTo6RmlsZUJsb2JJdGVtKGNv
bnN0IFN0cmluZyYgcGF0aCkKKyAgICA6IG1fcGF0aChwYXRoKQorICAgICwgbV9maWxlTmFtZShw
YXRoR2V0RmlsZU5hbWUobV9wYXRoKSkKK3sKK30KKwordW5zaWduZWQgbG9uZyBsb25nIEZpbGVC
bG9iSXRlbTo6c2l6ZSgpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IHN5bmNocm9uaXplZCBmaWxl
IGNhbGwKKyAgICBsb25nIGxvbmcgc2l6ZTsKKyAgICBpZiAoIWdldEZpbGVTaXplKG1fcGF0aCwg
c2l6ZSkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBsb25nIGxvbmc+KHNpemUpOworfQorCitQYXNzUmVmUHRyPEJsb2JJdGVtPiBGaWxlQmxvYkl0
ZW06OmRlZXBDb3B5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gRmlsZUJsb2JJdGVtOjpjcmVhdGUo
bV9wYXRoKTsKK30KKworYm9vbCBGaWxlQmxvYkl0ZW06OmVxdWFscyhjb25zdCBCbG9iSXRlbSog
aXRlbSkgY29uc3QKK3sKKyAgICBjb25zdCBGaWxlQmxvYkl0ZW0qIGZpbGVJdGVtID0gaXRlbS0+
dG9GaWxlQmxvYkl0ZW0oKTsKKyAgICBpZiAoIWZpbGVJdGVtIHx8IG1fcGF0aCAhPSBmaWxlSXRl
bS0+bV9wYXRoKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
Ky8vIFN0cmluZ0Jsb2JJdGVtIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1Bhc3NSZWZQdHI8QmxvYkl0ZW0+IFN0cmluZ0Js
b2JJdGVtOjpjcmVhdGUoY29uc3QgU3RyaW5nJiB0ZXh0LCBFbmRpbmdUeXBlIGVuZGluZywgVGV4
dEVuY29kaW5nIGVuY29kaW5nKQoreworICAgIHJldHVybiBhZG9wdFJlZihzdGF0aWNfY2FzdDxC
bG9iSXRlbSo+KG5ldyBTdHJpbmdCbG9iSXRlbSh0ZXh0LCBlbmRpbmcsIGVuY29kaW5nKSkpOwor
fQorCitQYXNzUmVmUHRyPEJsb2JJdGVtPiBTdHJpbmdCbG9iSXRlbTo6Y3JlYXRlKGNvbnN0IENT
dHJpbmcmIHRleHQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKHN0YXRpY19jYXN0PEJsb2JJdGVt
Kj4obmV3IFN0cmluZ0Jsb2JJdGVtKHRleHQpKSk7Cit9CisKKworU3RyaW5nQmxvYkl0ZW06OlN0
cmluZ0Jsb2JJdGVtKGNvbnN0IFN0cmluZyYgdGV4dCwgRW5kaW5nVHlwZSBlbmRpbmcsIFRleHRF
bmNvZGluZyBlbmNvZGluZykKK3sKKyAgICBDU3RyaW5nIGZyb20gPSBlbmNvZGluZy5lbmNvZGUo
dGV4dC5jaGFyYWN0ZXJzKCksIHRleHQubGVuZ3RoKCksIEVudGl0aWVzRm9yVW5lbmNvZGFibGVz
KTsKKyAgICBtX2RhdGEgPSBmcm9tOworCisgICAgaWYgKGVuZGluZyA9PSBFbmRpbmdUcmFuc3Bh
cmVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3QgY2hhciogZW5kaW5nQ2hhcnMgPSAo
ZW5kaW5nID09IEVuZGluZ0NSTEYpID8gIlxyXG4iIDogKChlbmRpbmcgPT0gRW5kaW5nQ1IpID8g
IlxyIiA6ICJcbiIpOworCisgICAgaW50IGVuZGluZ0xlbmd0aCA9IChlbmRpbmcgPT0gRW5kaW5n
Q1JMRikgPyAyIDogMTsKKyAgICBpbnQgbmVlZEZpeCA9IDA7CisKKyAgICAvLyBDYWxjdWxhdGUg
dGhlIGZpbmFsIGxlbmd0aC4KKyAgICBpbnQgY2FsY3VsYXRlZExlbmd0aCA9IGZyb20ubGVuZ3Ro
KCk7CisgICAgY29uc3QgY2hhciogcCA9IGZyb20uZGF0YSgpOworICAgIHdoaWxlIChjaGFyIGMg
PSAqcCsrKSB7CisgICAgICAgIGlmIChjID09ICdccicpIHsKKyAgICAgICAgICAgIC8vIFNhZmUg
dG8gbG9vayBhaGVhZCBiZWNhdXNlIG9mIHRyYWlsaW5nICdcMCcuCisgICAgICAgICAgICBpZiAo
KnAgPT0gJ1xuJyAmJiBlbmRpbmcgIT0gRW5kaW5nQ1JMRikgeworICAgICAgICAgICAgICAgIGNh
bGN1bGF0ZWRMZW5ndGggKz0gKGVuZGluZ0xlbmd0aCAtIDIpOworICAgICAgICAgICAgICAgICsr
bmVlZEZpeDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoZW5kaW5nICE9IEVuZGluZ0NSKSB7Cisg
ICAgICAgICAgICAgICAgY2FsY3VsYXRlZExlbmd0aCArPSAoZW5kaW5nTGVuZ3RoIC0gMSk7Cisg
ICAgICAgICAgICAgICAgKytuZWVkRml4OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ug
aWYgKGMgPT0gJ1xuJyAmJiBlbmRpbmcgIT0gRW5kaW5nTEYpIHsKKyAgICAgICAgICAgIGNhbGN1
bGF0ZWRMZW5ndGggKz0gKGVuZGluZ0xlbmd0aCAtIDEpOworICAgICAgICAgICAgKytuZWVkRml4
OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFuZWVkRml4KQorICAgICAgICByZXR1cm47
CisKKyAgICAvLyBDb252ZXJ0IHRoZSBlbmRpbmdzIGFuZCBjcmVhdGUgYSBkYXRhIGJ1ZmZlci4K
KyAgICBwID0gZnJvbS5kYXRhKCk7CisgICAgY2hhciogcTsKKyAgICBtX2RhdGEgPSBDU3RyaW5n
OjpuZXdVbmluaXRpYWxpemVkKGNhbGN1bGF0ZWRMZW5ndGgsIHEpOworICAgIHdoaWxlIChjaGFy
IGMgPSAqcCsrKSB7CisgICAgICAgIGlmIChjID09ICdccicpIHsKKyAgICAgICAgICAgIGlmICgq
cCA9PSAnXG4nICYmIGVuZGluZyAhPSBFbmRpbmdDUkxGKSB7CisgICAgICAgICAgICAgICAgbWVt
Y3B5KHEsIGVuZGluZ0NoYXJzLCBlbmRpbmdMZW5ndGgpOworICAgICAgICAgICAgICAgIHEgKz0g
ZW5kaW5nTGVuZ3RoOworICAgICAgICAgICAgfSBlbHNlIGlmICgqcCAhPSAnXG4nICYmIGVuZGlu
ZyAhPSBFbmRpbmdDUikgeworICAgICAgICAgICAgICAgIG1lbWNweShxLCBlbmRpbmdDaGFycywg
ZW5kaW5nTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBxICs9IGVuZGluZ0xlbmd0aDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChjID09ICdcbicgJiYgZW5kaW5nICE9IEVuZGlu
Z0xGKSB7CisgICAgICAgICAgICBtZW1jcHkocSwgZW5kaW5nQ2hhcnMsIGVuZGluZ0xlbmd0aCk7
CisgICAgICAgICAgICBxICs9IGVuZGluZ0xlbmd0aDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIC8vIExlYXZlIG90aGVyIGNoYXJhY3RlcnMgYWxvbmUuCisgICAgICAgICAgICAqcSsr
ID0gYzsKKyAgICAgICAgfQorICAgIH0KK30KKworU3RyaW5nQmxvYkl0ZW06OlN0cmluZ0Jsb2JJ
dGVtKGNvbnN0IENTdHJpbmcmIHRleHQpCisgICAgOiBtX2RhdGEodGV4dCkKK3sKK30KKworUGFz
c1JlZlB0cjxCbG9iSXRlbT4gU3RyaW5nQmxvYkl0ZW06OmRlZXBDb3B5KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gU3RyaW5nQmxvYkl0ZW06OmNyZWF0ZShDU3RyaW5nKG1fZGF0YS5kYXRhKCksIG1f
ZGF0YS5sZW5ndGgoKSkpOworfQorCitib29sIFN0cmluZ0Jsb2JJdGVtOjplcXVhbHMoY29uc3Qg
QmxvYkl0ZW0qIGl0ZW0pIGNvbnN0Cit7CisgICAgaWYgKCFEYXRhQmxvYkl0ZW06OmVxdWFscyhp
dGVtKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNvbnN0IFN0cmluZ0Jsb2JJdGVtKiBz
dHJpbmdJdGVtID0gaXRlbS0+dG9TdHJpbmdCbG9iSXRlbSgpOworICAgIHJldHVybiAoc3RyaW5n
SXRlbSAmJiBkYXRhKCkgPT0gc3RyaW5nSXRlbS0+ZGF0YSgpICYmIHNpemUoKSA9PSBzdHJpbmdJ
dGVtLT5zaXplKCkpOworfQorCisvLyBCeXRlc0FycmF5QmxvYkl0ZW0gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitQYXNzUmVmUHRy
PEJsb2JJdGVtPiBCeXRlc0FycmF5QmxvYkl0ZW06OmNyZWF0ZShjb25zdCBjaGFyKiBkYXRhLCBz
aXplX3Qgc2l6ZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoc3RhdGljX2Nhc3Q8QmxvYkl0ZW0q
PihuZXcgQnl0ZXNBcnJheUJsb2JJdGVtKGRhdGEsIHNpemUpKSk7Cit9CisKK0J5dGVzQXJyYXlC
bG9iSXRlbTo6Qnl0ZXNBcnJheUJsb2JJdGVtKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBzaXpl
KQoreworICAgIG1fYnl0ZXNBcnJheS5hcHBlbmQoZGF0YSwgc2l6ZSk7Cit9CisKK1Bhc3NSZWZQ
dHI8QmxvYkl0ZW0+IEJ5dGVzQXJyYXlCbG9iSXRlbTo6ZGVlcENvcHkoKSBjb25zdAoreworICAg
IHJldHVybiBCeXRlc0FycmF5QmxvYkl0ZW06OmNyZWF0ZShtX2J5dGVzQXJyYXkuZGF0YSgpLCBt
X2J5dGVzQXJyYXkuc2l6ZSgpKTsKK30KKworI2lmIEVOQUJMRShCTE9CX1NMSUNFKQorCisvLyBE
YXRhUmFuZ2VCbG9iSXRlbSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorCitQYXNzUmVmUHRyPEJsb2JJdGVtPiBEYXRhUmFuZ2VCbG9i
SXRlbTo6Y3JlYXRlKFBhc3NSZWZQdHI8RGF0YUJsb2JJdGVtPiBpdGVtLCBsb25nIGxvbmcgc3Rh
cnQsIGxvbmcgbG9uZyBsZW5ndGgpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKHN0YXRpY19jYXN0
PEJsb2JJdGVtKj4obmV3IERhdGFSYW5nZUJsb2JJdGVtKGl0ZW0sIHN0YXJ0LCBsZW5ndGgpKSk7
Cit9CisKK0RhdGFSYW5nZUJsb2JJdGVtOjpEYXRhUmFuZ2VCbG9iSXRlbShQYXNzUmVmUHRyPERh
dGFCbG9iSXRlbT4gaXRlbSwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoKQorICAg
IDogbV9pdGVtKGl0ZW0pCisgICAgLCBtX3N0YXJ0KHN0YXJ0KQorICAgICwgbV9sZW5ndGgobGVu
Z3RoKQoreworICAgIGlmIChtX2l0ZW0tPnRvRGF0YVJhbmdlQmxvYkl0ZW0oKSkgeworICAgICAg
ICBjb25zdCBEYXRhUmFuZ2VCbG9iSXRlbSogcmFuZ2VJdGVtID0gbV9pdGVtLT50b0RhdGFSYW5n
ZUJsb2JJdGVtKCk7CisgICAgICAgIG1fc3RhcnQgKz0gcmFuZ2VJdGVtLT5tX3N0YXJ0OworICAg
ICAgICBtX2l0ZW0gPSByYW5nZUl0ZW0tPm1faXRlbTsKKyAgICAgICAgQVNTRVJUKCFtX2l0ZW0t
PnRvRGF0YVJhbmdlQmxvYkl0ZW0oKSk7CisgICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1bnNp
Z25lZCBsb25nIGxvbmc+KG1fc3RhcnQgKyBtX2xlbmd0aCkgPD0gbV9pdGVtLT5zaXplKCkpOwor
ICAgIH0KK30KKworY29uc3QgY2hhciogRGF0YVJhbmdlQmxvYkl0ZW06OmRhdGEoKSBjb25zdAor
eworICAgIHJldHVybiBtX2l0ZW0tPmRhdGEoKSArIG1fc3RhcnQ7Cit9CisKK1Bhc3NSZWZQdHI8
QmxvYkl0ZW0+IERhdGFSYW5nZUJsb2JJdGVtOjpkZWVwQ29weSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIERhdGFSYW5nZUJsb2JJdGVtOjpjcmVhdGUoc3RhdGljX3BvaW50ZXJfY2FzdDxEYXRhQmxv
Ykl0ZW0+KG1faXRlbS0+ZGVlcENvcHkoKSksIG1fc3RhcnQsIG1fbGVuZ3RoKTsKK30KKworYm9v
bCBEYXRhUmFuZ2VCbG9iSXRlbTo6ZXF1YWxzKGNvbnN0IEJsb2JJdGVtKiBpdGVtKSBjb25zdAor
eworICAgIGNvbnN0IERhdGFSYW5nZUJsb2JJdGVtKiByYW5nZUl0ZW0gPSBpdGVtLT50b0RhdGFS
YW5nZUJsb2JJdGVtKCk7CisgICAgaWYgKCFyYW5nZUl0ZW0pCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBpZiAobV9zdGFydCAhPSByYW5nZUl0ZW0tPm1fc3RhcnQgfHwgbV9sZW5ndGggIT0g
cmFuZ2VJdGVtLT5tX2xlbmd0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghbV9p
dGVtLT5lcXVhbHMocmFuZ2VJdGVtLT5tX2l0ZW0uZ2V0KCkpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vIEZpbGVSYW5nZUJsb2JJdGVtIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1Bh
c3NSZWZQdHI8QmxvYkl0ZW0+IEZpbGVSYW5nZUJsb2JJdGVtOjpjcmVhdGUoY29uc3QgU3RyaW5n
JiBwYXRoLCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgsIGRvdWJsZSBzbmFwc2hv
dE1vZGlmaWNhdGlvblRpbWUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKHN0YXRpY19jYXN0PEJs
b2JJdGVtKj4obmV3IEZpbGVSYW5nZUJsb2JJdGVtKHBhdGgsIHN0YXJ0LCBsZW5ndGgsIHNuYXBz
aG90TW9kaWZpY2F0aW9uVGltZSkpKTsKK30KKworRmlsZVJhbmdlQmxvYkl0ZW06OkZpbGVSYW5n
ZUJsb2JJdGVtKGNvbnN0IFN0cmluZyYgcGF0aCwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcg
bGVuZ3RoLCBkb3VibGUgbW9kaWZpY2F0aW9uVGltZSkKKyAgICA6IEZpbGVCbG9iSXRlbShwYXRo
KQorICAgICwgbV9zdGFydChzdGFydCkKKyAgICAsIG1fbGVuZ3RoKGxlbmd0aCkKKyAgICAsIG1f
c25hcHNob3RNb2RpZmljYXRpb25UaW1lKG1vZGlmaWNhdGlvblRpbWUpCit7CisgICAgbV91bmlx
dWVOYW1lID0gIkJsb2IiICsgY3JlYXRlQ2Fub25pY2FsVVVJRFN0cmluZygpOworICAgIG1fdW5p
cXVlTmFtZS5yZXBsYWNlKCItIiwgIiIpOyAvLyBGb3Igc2FmdHksIHJlbW92ZSAnLScgZnJvbSB0
aGUgZmlsZW5hbWUgc25jZSBzb21lIHNlcnZlcnMgbWF5IG5vdCBsaWtlIGl0LgorfQorCitQYXNz
UmVmUHRyPEJsb2JJdGVtPiBGaWxlUmFuZ2VCbG9iSXRlbTo6ZGVlcENvcHkoKSBjb25zdAorewor
ICAgIHJldHVybiBGaWxlUmFuZ2VCbG9iSXRlbTo6Y3JlYXRlKHBhdGgoKSwgbV9zdGFydCwgbV9s
ZW5ndGgsIG1fc25hcHNob3RNb2RpZmljYXRpb25UaW1lKTsKK30KKworYm9vbCBGaWxlUmFuZ2VC
bG9iSXRlbTo6ZXF1YWxzKGNvbnN0IEJsb2JJdGVtKiBpdGVtKSBjb25zdAoreworICAgIGlmICgh
RmlsZUJsb2JJdGVtOjplcXVhbHMoaXRlbSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBj
b25zdCBGaWxlUmFuZ2VCbG9iSXRlbSogcmFuZ2VJdGVtID0gaXRlbS0+dG9GaWxlUmFuZ2VCbG9i
SXRlbSgpOworICAgIGlmICghcmFuZ2VJdGVtKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
aWYgKG1fc3RhcnQgIT0gcmFuZ2VJdGVtLT5tX3N0YXJ0IHx8IG1fdW5pcXVlTmFtZSAhPSByYW5n
ZUl0ZW0tPm1fdW5pcXVlTmFtZSB8fCBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZSAhPSByYW5n
ZUl0ZW0tPm1fc25hcHNob3RNb2RpZmljYXRpb25UaW1lKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgRmlsZVJhbmdlQmxvYkl0ZW06OmlzVmFsaWQo
KSBjb25zdAoreworICAgIGlmIChtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZSA9PSBpbnZhbGlk
TW9kaWZpY2F0aW9uVGltZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBtX3Nu
YXBzaG90TW9kaWZpY2F0aW9uVGltZSA9PSBnZXRGaWxlU25hcHNob3RNb2RpZmljYXRpb25UaW1l
KHBhdGgoKSk7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoQkxPQl9TTElDRSkKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9CbG9iSXRlbS5oIGIv
V2ViQ29yZS9wbGF0Zm9ybS9CbG9iSXRlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlhNTBkZjQ2YjMzNjhlMzk4
OTg1OTk0YWRjNDMyYmM2YTg4NzBlMWUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRm
b3JtL0Jsb2JJdGVtLmgKQEAgLTAsMCArMSwyMjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBCbG9iSXRlbV9oCisjZGVm
aW5lIEJsb2JJdGVtX2gKKworI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAi
VGV4dEVuY29kaW5nLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKKy8vIFN0cmluZyBlbmRpbmcgdHlwZXMuCitlbnVtIEVuZGluZ1R5cGUgeworICAg
IEVuZGluZ1RyYW5zcGFyZW50ID0gMCwKKyAgICBFbmRpbmdMRiwKKyAgICBFbmRpbmdDUiwKKyAg
ICBFbmRpbmdDUkxGLAorfTsKKworY2xhc3MgQnl0ZXNBcnJheUJsb2JJdGVtOworY2xhc3MgRGF0
YUJsb2JJdGVtOworY2xhc3MgRGF0YVJhbmdlQmxvYkl0ZW07CitjbGFzcyBGaWxlQmxvYkl0ZW07
CitjbGFzcyBGaWxlUmFuZ2VCbG9iSXRlbTsKK2NsYXNzIFN0cmluZ0Jsb2JJdGVtOworCisvLyBB
IGJhc2UgaW50ZXJmYWNlIGZvciBhbGwgYXJiaXRyYXJ5LWRhdGEtb2JqZWN0IGNvbXBvbmVudCBp
dGVtcy4KKy8vIFRoZSBCbG9iSXRlbSBhbmQgaXRzIHN1YmNsYXNzZXMgYXJlIHN0cnVjdHVyZWQg
bGlrZSB0aGUgZm9sbG93aW5nOgorLy8gICAgQmxvYkl0ZW0KKy8vICAgICAgIHwKKy8vICAgICAg
ICstLS0tLS0tPiBEYXRhQmxvYkl0ZW0KKy8vICAgICAgIHwgICAgICAgICAgICAgIHwKKy8vICAg
ICAgIHwgICAgICAgICAgICAgICstLS0tLS0tLS0+IFN0cmluZ0Jsb2JJdGVtCisvLyAgICAgICB8
ICAgICAgICAgICAgICArLS0tLS0tLS0tPiBCeXRlQXJyYXlCbG9iSXRlbQorLy8gICAgICAgfCAg
ICAgICAgICAgICAgKy0tLS0tLS0tLT4gRGF0YVJhbmdlQmxvYkl0ZW0KKy8vICAgICAgIHwKKy8v
ICAgICAgICstLS0tLS0tPiBGaWxlQmxvYkl0ZW0KKy8vICAgICAgICAgICAgICAgICAgICAgIHwK
Ky8vICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0+IEZpbGVSYW5nZUJsb2JJdGVtCisv
LworY2xhc3MgQmxvYkl0ZW0gOiBwdWJsaWMgUmVmQ291bnRlZDxCbG9iSXRlbT4geworcHVibGlj
OgorICAgIHZpcnR1YWwgfkJsb2JJdGVtKCkgeyB9CisgICAgdmlydHVhbCB1bnNpZ25lZCBsb25n
IGxvbmcgc2l6ZSgpIGNvbnN0ID0gMDsKKworI2lmIEVOQUJMRShCTE9CX1NMSUNFKQorICAgIFBh
c3NSZWZQdHI8QmxvYkl0ZW0+IHNsaWNlKGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0
aCk7CisjZW5kaWYgLy8gRU5BQkxFKEJMT0JfU0xJQ0UpCisKKyAgICAvLyBSZXR1cm5zIGZhbHNl
IGlmIHRoZSBkYXRhIGhhcyBiZWNvbWUgc3RhbGUgb3IgaW52YWxpZC4KKyAgICB2aXJ0dWFsIGJv
b2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKworICAgIHZpcnR1YWwgY29uc3Qg
RGF0YUJsb2JJdGVtKiB0b0RhdGFCbG9iSXRlbSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2
aXJ0dWFsIGNvbnN0IFN0cmluZ0Jsb2JJdGVtKiB0b1N0cmluZ0Jsb2JJdGVtKCkgY29uc3QgeyBy
ZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgY29uc3QgQnl0ZXNBcnJheUJsb2JJdGVtKiB0b0J5dGVz
QXJyYXlCbG9iSXRlbSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IEZp
bGVCbG9iSXRlbSogdG9GaWxlQmxvYkl0ZW0oKSBjb25zdCB7IHJldHVybiAwOyB9CisjaWYgRU5B
QkxFKEJMT0JfU0xJQ0UpCisgICAgdmlydHVhbCBjb25zdCBEYXRhUmFuZ2VCbG9iSXRlbSogdG9E
YXRhUmFuZ2VCbG9iSXRlbSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGNvbnN0
IEZpbGVSYW5nZUJsb2JJdGVtKiB0b0ZpbGVSYW5nZUJsb2JJdGVtKCkgY29uc3QgeyByZXR1cm4g
MDsgfQorI2VuZGlmIC8vIEVOQUJMRShCTE9CX1NMSUNFKQorCisgICAgdmlydHVhbCBQYXNzUmVm
UHRyPEJsb2JJdGVtPiBkZWVwQ29weSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZXF1
YWxzKGNvbnN0IEJsb2JJdGVtKikgY29uc3QgPSAwOworCitwcm90ZWN0ZWQ6CisgICAgQmxvYkl0
ZW0oKSB7IH0KK307CisKKy8vIEluIG1vc3QgY2FzZXMgQmxvYkl0ZW0ncyBhcmUgaGFuZGxlZCBh
cyBhIGxpc3QgKGUuZy4gaW4gQmxvYiwgRm9ybURhdGEpLgordHlwZWRlZiBWZWN0b3I8UmVmUHRy
PEJsb2JJdGVtPiA+IEJsb2JJdGVtTGlzdDsKKworY2xhc3MgRGF0YUJsb2JJdGVtIDogcHVibGlj
IEJsb2JJdGVtIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGRhdGEoKSBjb25z
dCA9IDA7CisKKyAgICAvLyBCbG9iSXRlbSBtZXRob2RzLgorICAgIGNoYXIqIHJlbGVhc2VCdWZm
ZXIoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGNvbnN0IERhdGFCbG9iSXRlbSogdG9EYXRhQmxvYkl0
ZW0oKSBjb25zdCB7IHJldHVybiB0aGlzOyB9CisgICAgdmlydHVhbCBib29sIGVxdWFscyhjb25z
dCBCbG9iSXRlbSopIGNvbnN0OworfTsKKworY2xhc3MgRmlsZUJsb2JJdGVtIDogcHVibGljIEJs
b2JJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCbG9iSXRlbT4gY3JlYXRl
KGNvbnN0IFN0cmluZyYgcGF0aCk7CisgICAgdmlydHVhbCBjb25zdCBTdHJpbmcmIG5hbWUoKSBj
b25zdCB7IHJldHVybiBtX2ZpbGVOYW1lOyB9CisgICAgdmlydHVhbCBjb25zdCBTdHJpbmcmIHBh
dGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0KKworICAgIC8vIEJsb2JJdGVtIG1ldGhvZHMu
CisgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSgpIGNvbnN0OworICAgIHZpcnR1
YWwgY29uc3QgRmlsZUJsb2JJdGVtKiB0b0ZpbGVCbG9iSXRlbSgpIGNvbnN0IHsgcmV0dXJuIHRo
aXM7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8QmxvYkl0ZW0+IGRlZXBDb3B5KCkgY29uc3Q7
CisgICAgdmlydHVhbCBib29sIGVxdWFscyhjb25zdCBCbG9iSXRlbSopIGNvbnN0OworCitwcm90
ZWN0ZWQ6CisgICAgRmlsZUJsb2JJdGVtKGNvbnN0IFN0cmluZyYgcGF0aCk7CisgICAgU3RyaW5n
IG1fcGF0aDsKKyAgICBTdHJpbmcgbV9maWxlTmFtZTsKK307CisKK2NsYXNzIFN0cmluZ0Jsb2JJ
dGVtIDogcHVibGljIERhdGFCbG9iSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8QmxvYkl0ZW0+IGNyZWF0ZShjb25zdCBTdHJpbmcmLCBFbmRpbmdUeXBlLCBUZXh0RW5jb2Rp
bmcpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJsb2JJdGVtPiBjcmVhdGUoY29uc3QgQ1N0cmlu
ZyYpOworICAgIGNvbnN0IENTdHJpbmcmIGNzdHIoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0K
KworICAgIC8vIEJsb2JJdGVtIG1ldGhvZHMuCisgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxv
bmcgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5sZW5ndGgoKTsgfQorICAgIHZpcnR1YWwg
Y29uc3QgU3RyaW5nQmxvYkl0ZW0qIHRvU3RyaW5nQmxvYkl0ZW0oKSBjb25zdCB7IHJldHVybiB0
aGlzOyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEJsb2JJdGVtPiBkZWVwQ29weSgpIGNvbnN0
OworICAgIHZpcnR1YWwgYm9vbCBlcXVhbHMoY29uc3QgQmxvYkl0ZW0qKSBjb25zdDsKKworICAg
IC8vIERhdGFCbG9iSXRlbSBtZXRob2RzLgorICAgIHZpcnR1YWwgY29uc3QgY2hhciogZGF0YSgp
IGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5kYXRhKCk7IH0KKworcHJpdmF0ZToKKyAgICBTdHJpbmdC
bG9iSXRlbShjb25zdCBTdHJpbmcmLCBFbmRpbmdUeXBlLCBUZXh0RW5jb2RpbmcpOworICAgIFN0
cmluZ0Jsb2JJdGVtKGNvbnN0IENTdHJpbmcmKTsKKyAgICBtdXRhYmxlIENTdHJpbmcgbV9kYXRh
OworfTsKKworY2xhc3MgQnl0ZXNBcnJheUJsb2JJdGVtIDogcHVibGljIERhdGFCbG9iSXRlbSB7
CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QmxvYkl0ZW0+IGNyZWF0ZShjb25zdCBj
aGFyKiBkYXRhLCBzaXplX3Qgc2l6ZSk7CisKKyAgICAvLyBCbG9iSXRlbSBtZXRob2RzLgorICAg
IHZpcnR1YWwgdW5zaWduZWQgbG9uZyBsb25nIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2J5dGVz
QXJyYXkuc2l6ZSgpOyB9CisgICAgdmlydHVhbCBjb25zdCBCeXRlc0FycmF5QmxvYkl0ZW0qIHRv
Qnl0ZXNBcnJheUJsb2JJdGVtKCkgY29uc3QgeyByZXR1cm4gdGhpczsgfQorICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxCbG9iSXRlbT4gZGVlcENvcHkoKSBjb25zdDsKKworICAgIC8vIERhdGFCbG9i
SXRlbSBtZXRob2RzLgorICAgIHZpcnR1YWwgY29uc3QgY2hhciogZGF0YSgpIGNvbnN0IHsgcmV0
dXJuIG1fYnl0ZXNBcnJheS5kYXRhKCk7IH0KKworcHJpdmF0ZToKKyAgICBCeXRlc0FycmF5Qmxv
Ykl0ZW0oY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IHNpemUpOworICAgIFZlY3RvcjxjaGFyPiBt
X2J5dGVzQXJyYXk7Cit9OworCisjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCisKKy8vIEJsb2JJdGVt
IGNsYXNzIGZvciBzbGljZWQgZGF0YSAoc3RyaW5nIG9yIGJ5dGVzLWFycmF5KS4KK2NsYXNzIERh
dGFSYW5nZUJsb2JJdGVtIDogcHVibGljIERhdGFCbG9iSXRlbSB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8QmxvYkl0ZW0+IGNyZWF0ZShQYXNzUmVmUHRyPERhdGFCbG9iSXRlbT4s
IGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCk7CisKKyAgICAvLyBCbG9iSXRlbSBt
ZXRob2RzLgorICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBsb25nIHNpemUoKSBjb25zdCB7IHJl
dHVybiBtX2xlbmd0aDsgfQorICAgIHZpcnR1YWwgY29uc3QgRGF0YVJhbmdlQmxvYkl0ZW0qIHRv
RGF0YVJhbmdlQmxvYkl0ZW0oKSBjb25zdCB7IHJldHVybiB0aGlzOyB9CisgICAgdmlydHVhbCBQ
YXNzUmVmUHRyPEJsb2JJdGVtPiBkZWVwQ29weSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBl
cXVhbHMoY29uc3QgQmxvYkl0ZW0qKSBjb25zdDsKKworICAgIC8vIERhdGFCbG9iSXRlbSBtZXRo
b2RzLgorICAgIHZpcnR1YWwgY29uc3QgY2hhciogZGF0YSgpIGNvbnN0OworCitwcml2YXRlOgor
ICAgIERhdGFSYW5nZUJsb2JJdGVtKFBhc3NSZWZQdHI8RGF0YUJsb2JJdGVtPiBpdGVtLCBsb25n
IGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgpOworICAgIFJlZlB0cjxEYXRhQmxvYkl0ZW0+
IG1faXRlbTsKKyAgICBsb25nIGxvbmcgbV9zdGFydDsKKyAgICBsb25nIGxvbmcgbV9sZW5ndGg7
Cit9OworCitjbGFzcyBGaWxlUmFuZ2VCbG9iSXRlbSA6IHB1YmxpYyBGaWxlQmxvYkl0ZW0gewor
cHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJsb2JJdGVtPiBjcmVhdGUoY29uc3QgU3Ry
aW5nJiBwYXRoLCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgsIGRvdWJsZSBzbmFw
c2hvdE1vZGlmaWNhdGlvblRpbWUpOworICAgIGxvbmcgbG9uZyBzdGFydCgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RhcnQ7IH0KKyAgICBkb3VibGUgc25hcHNob3RNb2RpZmljYXRpb25UaW1lKCkgY29u
c3QgeyByZXR1cm4gbV9zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWU7IH0KKworICAgIC8vIEJsb2JJ
dGVtIG1ldGhvZHMuCisgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbGVuZ3RoOyB9CisgICAgdmlydHVhbCBjb25zdCBGaWxlUmFuZ2VCbG9iSXRl
bSogdG9GaWxlUmFuZ2VCbG9iSXRlbSgpIGNvbnN0IHsgcmV0dXJuIHRoaXM7IH0KKyAgICB2aXJ0
dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0OworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxCbG9iSXRl
bT4gZGVlcENvcHkoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZXF1YWxzKGNvbnN0IEJsb2JJ
dGVtKikgY29uc3Q7CisKKyAgICAvLyBGaWxlQmxvYkl0ZW0gbWV0aG9kcy4KKyAgICB2aXJ0dWFs
IGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fdW5pcXVlTmFtZTsgfQorCitw
cml2YXRlOgorICAgIEZpbGVSYW5nZUJsb2JJdGVtKGNvbnN0IFN0cmluZyYgcGF0aCwgbG9uZyBs
b25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoLCBkb3VibGUgc25hcHNob3RNb2RpZmljYXRpb25U
aW1lKTsKKyAgICBsb25nIGxvbmcgbV9zdGFydDsKKyAgICBsb25nIGxvbmcgbV9sZW5ndGg7Cisg
ICAgU3RyaW5nIG1fdW5pcXVlTmFtZTsKKworICAgIGRvdWJsZSBtX3NuYXBzaG90TW9kaWZpY2F0
aW9uVGltZTsKK307CisKKyNlbmRpZiAvLyBFTkFCTEUoQkxPQl9TTElDRSkKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQmxvYkl0ZW1faApkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9Gb3JtRGF0YS5jcHAKaW5kZXggOTE4MDAyYWVmZDgxYTY4OTFmOWYxOWJhZjQ0ZDc1NTkxZmRm
YTQ4NC4uMDI5NTI0ZDA3YjQwYjAxZTc5MTJlOThmYjkwYTJlNTUxOTZmYTNhOCAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcAorKysgYi9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwCkBAIC0xOSwyMyArMTksNDcgQEAKICAqLwogCiAj
aW5jbHVkZSAiY29uZmlnLmgiCisKICNpbmNsdWRlICJGb3JtRGF0YS5oIgogCi0jaW5jbHVkZSAi
QmxvYi5oIgorI2luY2x1ZGUgIkJsb2JJdGVtLmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5j
bHVkZSAiQ2hyb21lQ2xpZW50LmgiCi0jaW5jbHVkZSAiRE9NRm9ybURhdGEuaCIKICNpbmNsdWRl
ICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkZpbGUuaCIKICNpbmNsdWRlICJGaWxlU3lzdGVtLmgi
CiAjaW5jbHVkZSAiRm9ybURhdGFCdWlsZGVyLmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3Ry
eS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKLSNpbmNs
dWRlICJVVUlELmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorI2lmIEVOQUJMRShCTE9CX1NM
SUNFKQorY29uc3QgbG9uZyBsb25nIEZvcm1EYXRhRWxlbWVudDo6dG9FbmRPZkZpbGUgPSAtMTsK
KyNlbmRpZgorCitGb3JtRGF0YUVsZW1lbnQ6OkZvcm1EYXRhRWxlbWVudChQYXNzUmVmUHRyPEJs
b2JJdGVtPiBibG9iSXRlbSwgYm9vbCBzaG91bGRHZW5lcmF0ZUZpbGUpCisgICAgOiBtX2l0ZW0o
YmxvYkl0ZW0pCisgICAgLCBtX3R5cGUobV9pdGVtLT50b0ZpbGVCbG9iSXRlbSgpID8gZW5jb2Rl
ZEZpbGUgOiBkYXRhKQorICAgICwgbV9kYXRhKG1faXRlbS0+dG9EYXRhQmxvYkl0ZW0oKSkKKyAg
ICAsIG1fZmlsZW5hbWUobV9pdGVtLT50b0ZpbGVCbG9iSXRlbSgpID8gbV9pdGVtLT50b0ZpbGVC
bG9iSXRlbSgpLT5wYXRoKCkgOiBTdHJpbmcoKSkKKyNpZiBFTkFCTEUoQkxPQl9TTElDRSkKKyAg
ICAsIG1fZmlsZVN0YXJ0KDApCisgICAgLCBtX2ZpbGVMZW5ndGgodG9FbmRPZkZpbGUpCisgICAg
LCBtX2V4cGVjdGVkRmlsZU1vZGlmaWNhdGlvblRpbWUoMCkKKyNlbmRpZgorICAgICwgbV9zaG91
bGRHZW5lcmF0ZUZpbGUoc2hvdWxkR2VuZXJhdGVGaWxlKQoreworI2lmIEVOQUJMRShCTE9CX1NM
SUNFKQorICAgIGlmIChtX2l0ZW0tPnRvRmlsZVJhbmdlQmxvYkl0ZW0oKSkgeworICAgICAgICBj
b25zdCBGaWxlUmFuZ2VCbG9iSXRlbSogcmFuZ2UgPSBtX2l0ZW0tPnRvRmlsZVJhbmdlQmxvYkl0
ZW0oKTsKKyAgICAgICAgbV9maWxlU3RhcnQgPSByYW5nZS0+c3RhcnQoKTsKKyAgICAgICAgbV9m
aWxlTGVuZ3RoID0gcmFuZ2UtPnNpemUoKTsKKyAgICAgICAgbV9leHBlY3RlZEZpbGVNb2RpZmlj
YXRpb25UaW1lID0gcmFuZ2UtPnNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSgpOworICAgIH0KKyNl
bmRpZgorfQorCiBpbmxpbmUgRm9ybURhdGE6OkZvcm1EYXRhKCkKICAgICA6IG1faWRlbnRpZmll
cigwKQogICAgICwgbV9oYXNHZW5lcmF0ZWRGaWxlcyhmYWxzZSkKQEAgLTg1LDcgKzEwOSw3IEBA
IFBhc3NSZWZQdHI8Rm9ybURhdGE+IEZvcm1EYXRhOjpjcmVhdGUoY29uc3Qgdm9pZCogZGF0YSwg
c2l6ZV90IHNpemUpCiBQYXNzUmVmUHRyPEZvcm1EYXRhPiBGb3JtRGF0YTo6Y3JlYXRlKGNvbnN0
IENTdHJpbmcmIHN0cmluZykKIHsKICAgICBSZWZQdHI8Rm9ybURhdGE+IHJlc3VsdCA9IGNyZWF0
ZSgpOwotICAgIHJlc3VsdC0+YXBwZW5kRGF0YShzdHJpbmcuZGF0YSgpLCBzdHJpbmcubGVuZ3Ro
KCkpOworICAgIHJlc3VsdC0+YXBwZW5kU3RyaW5nKHN0cmluZyk7CiAgICAgcmV0dXJuIHJlc3Vs
dC5yZWxlYXNlKCk7CiB9CiAKQEAgLTk2LDE3ICsxMjAsMTcgQEAgUGFzc1JlZlB0cjxGb3JtRGF0
YT4gRm9ybURhdGE6OmNyZWF0ZShjb25zdCBWZWN0b3I8Y2hhcj4mIHZlY3RvcikKICAgICByZXR1
cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0KIAotUGFzc1JlZlB0cjxGb3JtRGF0YT4gRm9ybURhdGE6
OmNyZWF0ZShjb25zdCBET01Gb3JtRGF0YSYgZG9tRm9ybURhdGEpCitQYXNzUmVmUHRyPEZvcm1E
YXRhPiBGb3JtRGF0YTo6Y3JlYXRlKGNvbnN0IEJsb2JJdGVtTGlzdCYgaXRlbUxpc3QsIGNvbnN0
IFRleHRFbmNvZGluZyYgZW5jb2RpbmcpCiB7CiAgICAgUmVmUHRyPEZvcm1EYXRhPiByZXN1bHQg
PSBjcmVhdGUoKTsKLSAgICByZXN1bHQtPmFwcGVuZERPTUZvcm1EYXRhKGRvbUZvcm1EYXRhLCBm
YWxzZSwgMCk7CisgICAgcmVzdWx0LT5hcHBlbmRGb3JtRGF0YUl0ZW1zKGl0ZW1MaXN0LCBlbmNv
ZGluZywgZmFsc2UsIDApOwogICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwogfQogCi1QYXNz
UmVmUHRyPEZvcm1EYXRhPiBGb3JtRGF0YTo6Y3JlYXRlTXVsdGlQYXJ0KGNvbnN0IERPTUZvcm1E
YXRhJiBkb21Gb3JtRGF0YSwgRG9jdW1lbnQqIGRvY3VtZW50KQorUGFzc1JlZlB0cjxGb3JtRGF0
YT4gRm9ybURhdGE6OmNyZWF0ZU11bHRpUGFydChjb25zdCBCbG9iSXRlbUxpc3QmIGl0ZW1MaXN0
LCBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nLCBEb2N1bWVudCogZG9jdW1lbnQpCiB7CiAg
ICAgUmVmUHRyPEZvcm1EYXRhPiByZXN1bHQgPSBjcmVhdGUoKTsKLSAgICByZXN1bHQtPmFwcGVu
ZERPTUZvcm1EYXRhKGRvbUZvcm1EYXRhLCB0cnVlLCBkb2N1bWVudCk7CisgICAgcmVzdWx0LT5h
cHBlbmRGb3JtRGF0YUl0ZW1zKGl0ZW1MaXN0LCBlbmNvZGluZywgdHJ1ZSwgZG9jdW1lbnQpOwog
ICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwogfQogCkBAIC0xMjUsODQgKzE0OSw2OCBAQCBQ
YXNzUmVmUHRyPEZvcm1EYXRhPiBGb3JtRGF0YTo6ZGVlcENvcHkoKSBjb25zdAogICAgIGZvcm1E
YXRhLT5tX2VsZW1lbnRzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobik7CiAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBuOyArK2kpIHsKICAgICAgICAgY29uc3QgRm9ybURhdGFFbGVtZW50JiBl
ID0gbV9lbGVtZW50c1tpXTsKLSAgICAgICAgc3dpdGNoIChlLm1fdHlwZSkgewotICAgICAgICBj
YXNlIEZvcm1EYXRhRWxlbWVudDo6ZGF0YToKLSAgICAgICAgICAgIGZvcm1EYXRhLT5tX2VsZW1l
bnRzLmFwcGVuZChGb3JtRGF0YUVsZW1lbnQoZS5tX2RhdGEpKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIEZvcm1EYXRhRWxlbWVudDo6ZW5jb2RlZEZpbGU6Ci0jaWYgRU5BQkxF
KEJMT0JfU0xJQ0UpCi0gICAgICAgICAgICBmb3JtRGF0YS0+bV9lbGVtZW50cy5hcHBlbmQoRm9y
bURhdGFFbGVtZW50KGUubV9maWxlbmFtZSwgZS5tX2ZpbGVTdGFydCwgZS5tX2ZpbGVMZW5ndGgs
IGUubV9leHBlY3RlZEZpbGVNb2RpZmljYXRpb25UaW1lLCBlLm1fc2hvdWxkR2VuZXJhdGVGaWxl
KSk7Ci0jZWxzZQotICAgICAgICAgICAgZm9ybURhdGEtPm1fZWxlbWVudHMuYXBwZW5kKEZvcm1E
YXRhRWxlbWVudChlLm1fZmlsZW5hbWUsIGUubV9zaG91bGRHZW5lcmF0ZUZpbGUpKTsKLSNlbmRp
ZgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAgICAgICAgZm9ybURhdGEtPm1fZWxl
bWVudHMuYXBwZW5kKEZvcm1EYXRhRWxlbWVudChlLml0ZW0oKS0+ZGVlcENvcHkoKSwgZS5tX3No
b3VsZEdlbmVyYXRlRmlsZSkpOwogICAgIH0KICAgICByZXR1cm4gZm9ybURhdGEucmVsZWFzZSgp
OwogfQogCiB2b2lkIEZvcm1EYXRhOjphcHBlbmREYXRhKGNvbnN0IHZvaWQqIGRhdGEsIHNpemVf
dCBzaXplKQogewotICAgIGlmIChtX2VsZW1lbnRzLmlzRW1wdHkoKSB8fCBtX2VsZW1lbnRzLmxh
c3QoKS5tX3R5cGUgIT0gRm9ybURhdGFFbGVtZW50OjpkYXRhKQotICAgICAgICBtX2VsZW1lbnRz
LmFwcGVuZChGb3JtRGF0YUVsZW1lbnQoKSk7Ci0gICAgRm9ybURhdGFFbGVtZW50JiBlID0gbV9l
bGVtZW50cy5sYXN0KCk7Ci0gICAgc2l6ZV90IG9sZFNpemUgPSBlLm1fZGF0YS5zaXplKCk7Ci0g
ICAgZS5tX2RhdGEuZ3JvdyhvbGRTaXplICsgc2l6ZSk7Ci0gICAgbWVtY3B5KGUubV9kYXRhLmRh
dGEoKSArIG9sZFNpemUsIGRhdGEsIHNpemUpOworICAgIG1fZWxlbWVudHMuYXBwZW5kKEZvcm1E
YXRhRWxlbWVudChCeXRlc0FycmF5QmxvYkl0ZW06OmNyZWF0ZShzdGF0aWNfY2FzdDxjb25zdCBj
aGFyKj4oZGF0YSksIHNpemUpKSk7Cit9CisKK3ZvaWQgRm9ybURhdGE6OmFwcGVuZFN0cmluZyhj
b25zdCBDU3RyaW5nJiBzdHJpbmcpCit7CisgICAgbV9lbGVtZW50cy5hcHBlbmQoRm9ybURhdGFF
bGVtZW50KFN0cmluZ0Jsb2JJdGVtOjpjcmVhdGUoc3RyaW5nKSkpOwogfQogCiB2b2lkIEZvcm1E
YXRhOjphcHBlbmRGaWxlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGJvb2wgc2hvdWxkR2VuZXJh
dGVGaWxlKQogewotI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgIG1fZWxlbWVudHMuYXBwZW5k
KEZvcm1EYXRhRWxlbWVudChmaWxlbmFtZSwgMCwgQmxvYjo6dG9FbmRPZkZpbGUsIEJsb2I6OmRv
Tm90Q2hlY2tGaWxlQ2hhbmdlLCBzaG91bGRHZW5lcmF0ZUZpbGUpKTsKLSNlbHNlCi0gICAgbV9l
bGVtZW50cy5hcHBlbmQoRm9ybURhdGFFbGVtZW50KGZpbGVuYW1lLCBzaG91bGRHZW5lcmF0ZUZp
bGUpKTsKLSNlbmRpZgorICAgIG1fZWxlbWVudHMuYXBwZW5kKEZvcm1EYXRhRWxlbWVudChGaWxl
QmxvYkl0ZW06OmNyZWF0ZShmaWxlbmFtZSksIHNob3VsZEdlbmVyYXRlRmlsZSkpOworfQorCit2
b2lkIEZvcm1EYXRhOjphcHBlbmRCbG9iSXRlbUxpc3QoY29uc3QgQmxvYkl0ZW1MaXN0JiBsaXN0
KQoreworICAgIGZvciAoQmxvYkl0ZW1MaXN0Ojpjb25zdF9pdGVyYXRvciBpdGVyKGxpc3QuYmVn
aW4oKSk7IGl0ZXIgIT0gbGlzdC5lbmQoKTsgKytpdGVyKQorICAgICAgICBtX2VsZW1lbnRzLmFw
cGVuZCgqaXRlcik7CiB9CiAKICNpZiBFTkFCTEUoQkxPQl9TTElDRSkKIHZvaWQgRm9ybURhdGE6
OmFwcGVuZEZpbGVSYW5nZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBsb25nIGxvbmcgc3RhcnQs
IGxvbmcgbG9uZyBsZW5ndGgsIGRvdWJsZSBleHBlY3RlZE1vZGlmaWNhdGlvblRpbWUsIGJvb2wg
c2hvdWxkR2VuZXJhdGVGaWxlKQogewotICAgIG1fZWxlbWVudHMuYXBwZW5kKEZvcm1EYXRhRWxl
bWVudChmaWxlbmFtZSwgc3RhcnQsIGxlbmd0aCwgZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lLCBz
aG91bGRHZW5lcmF0ZUZpbGUpKTsKKyAgICBpZiAobGVuZ3RoID09IEZvcm1EYXRhRWxlbWVudDo6
dG9FbmRPZkZpbGUpIHsKKyAgICAgICAgQVNTRVJUKCFzdGFydCk7CisgICAgICAgIEFTU0VSVCgh
ZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lKTsKKyAgICAgICAgbV9lbGVtZW50cy5hcHBlbmQoRm9y
bURhdGFFbGVtZW50KEZpbGVCbG9iSXRlbTo6Y3JlYXRlKGZpbGVuYW1lKSwgc2hvdWxkR2VuZXJh
dGVGaWxlKSk7CisgICAgfSBlbHNlCisgICAgICAgIG1fZWxlbWVudHMuYXBwZW5kKEZvcm1EYXRh
RWxlbWVudChGaWxlUmFuZ2VCbG9iSXRlbTo6Y3JlYXRlKGZpbGVuYW1lLCBzdGFydCwgbGVuZ3Ro
LCBleHBlY3RlZE1vZGlmaWNhdGlvblRpbWUpLCBzaG91bGRHZW5lcmF0ZUZpbGUpKTsKIH0KICNl
bmRpZgogCi12b2lkIEZvcm1EYXRhOjphcHBlbmRET01Gb3JtRGF0YShjb25zdCBET01Gb3JtRGF0
YSYgZG9tRm9ybURhdGEsIGJvb2wgaXNNdWx0aVBhcnRGb3JtLCBEb2N1bWVudCogZG9jdW1lbnQp
Cit2b2lkIEZvcm1EYXRhOjphcHBlbmRGb3JtRGF0YUl0ZW1zKGNvbnN0IEJsb2JJdGVtTGlzdCYg
bGlzdCwgY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZywgYm9vbCBpc011bHRpUGFydEZvcm0s
IERvY3VtZW50KiBkb2N1bWVudCkKIHsKICAgICBGb3JtRGF0YUJ1aWxkZXIgZm9ybURhdGFCdWls
ZGVyOwogICAgIGlmIChpc011bHRpUGFydEZvcm0pCiAgICAgICAgIG1fYm91bmRhcnkgPSBmb3Jt
RGF0YUJ1aWxkZXIuZ2VuZXJhdGVVbmlxdWVCb3VuZGFyeVN0cmluZygpOwogCiAgICAgVmVjdG9y
PGNoYXI+IGVuY29kZWREYXRhOwotICAgIFRleHRFbmNvZGluZyBlbmNvZGluZyA9IGRvbUZvcm1E
YXRhLmVuY29kaW5nKCk7CiAKLSAgICBjb25zdCBWZWN0b3I8Rm9ybURhdGFMaXN0OjpJdGVtPiYg
bGlzdCA9IGRvbUZvcm1EYXRhLmxpc3QoKTsKICAgICBzaXplX3QgZm9ybURhdGFMaXN0U2l6ZSA9
IGxpc3Quc2l6ZSgpOwogICAgIEFTU0VSVCghKGZvcm1EYXRhTGlzdFNpemUgJSAyKSk7CiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBmb3JtRGF0YUxpc3RTaXplOyBpICs9IDIpIHsKLSAgICAg
ICAgY29uc3QgRm9ybURhdGFMaXN0OjpJdGVtJiBrZXkgPSBsaXN0W2ldOwotICAgICAgICBjb25z
dCBGb3JtRGF0YUxpc3Q6Okl0ZW0mIHZhbHVlID0gbGlzdFtpICsgMV07CisgICAgICAgIGNvbnN0
IFN0cmluZ0Jsb2JJdGVtKiBrZXkgPSBsaXN0W2ldLT50b1N0cmluZ0Jsb2JJdGVtKCk7CisgICAg
ICAgIGNvbnN0IFJlZlB0cjxCbG9iSXRlbT4gdmFsdWUgPSBsaXN0W2kgKyAxXTsKKyAgICAgICAg
QVNTRVJUKGtleSk7CiAgICAgICAgIGlmIChpc011bHRpUGFydEZvcm0pIHsKICAgICAgICAgICAg
IFZlY3RvcjxjaGFyPiBoZWFkZXI7Ci0gICAgICAgICAgICBmb3JtRGF0YUJ1aWxkZXIuYmVnaW5N
dWx0aVBhcnRIZWFkZXIoaGVhZGVyLCBtX2JvdW5kYXJ5LmRhdGEoKSwga2V5LmRhdGEoKSk7Cisg
ICAgICAgICAgICBmb3JtRGF0YUJ1aWxkZXIuYmVnaW5NdWx0aVBhcnRIZWFkZXIoaGVhZGVyLCBt
X2JvdW5kYXJ5LmRhdGEoKSwga2V5LT5jc3RyKCkpOwogCiAgICAgICAgICAgICBib29sIHNob3Vs
ZEdlbmVyYXRlRmlsZSA9IGZhbHNlOwogICAgICAgICAgICAgLy8gSWYgdGhlIGN1cnJlbnQgdHlw
ZSBpcyBGSUxFLCB0aGVuIHdlIGFsc28gbmVlZCB0byBpbmNsdWRlIHRoZSBmaWxlbmFtZQotICAg
ICAgICAgICAgaWYgKHZhbHVlLmJsb2IoKSkgewotICAgICAgICAgICAgICAgIGNvbnN0IFN0cmlu
ZyYgcGF0aCA9IHZhbHVlLmJsb2IoKS0+cGF0aCgpOwotI2lmIEVOQUJMRShCTE9CX1NMSUNFKQot
ICAgICAgICAgICAgICAgIFN0cmluZyBmaWxlTmFtZTsKLSAgICAgICAgICAgICAgICBpZiAodmFs
dWUuYmxvYigpLT5pc0ZpbGUoKSkKLSAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWUgPSBzdGF0
aWNfY2FzdDxGaWxlKj4odmFsdWUuYmxvYigpKS0+ZmlsZU5hbWUoKTsKLSAgICAgICAgICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gSWYgYSBibG9iIGlzIHNsaWNlZCBmcm9t
IGEgZmlsZSwgaXQgZG9lcyBub3QgaGF2ZSB0aGUgZmlsZW5hbWUuIEluIHRoaXMgY2FzZSwgbGV0
J3MgcHJvZHVjZSBhIHVuaXF1ZSBmaWxlbmFtZS4KLSAgICAgICAgICAgICAgICAgICAgZmlsZU5h
bWUgPSAiQmxvYiIgKyBjcmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCk7Ci0gICAgICAgICAgICAg
ICAgICAgIGZpbGVOYW1lLnJlcGxhY2UoIi0iLCAiIik7IC8vIEZvciBzYWZ0eSwgcmVtb3ZlICct
JyBmcm9tIHRoZSBmaWxlbmFtZSBzbmNlIHNvbWUgc2VydmVycyBtYXkgbm90IGxpa2UgaXQuCi0g
ICAgICAgICAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgICAgICAgICBBU1NFUlQodmFsdWUuYmxv
YigpLT5pc0ZpbGUoKSk7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIGZpbGVOYW1lID0gc3RhdGlj
X2Nhc3Q8RmlsZSo+KHZhbHVlLmJsb2IoKSktPmZpbGVOYW1lKCk7Ci0jZW5kaWYKKyAgICAgICAg
ICAgIGlmICh2YWx1ZS0+dG9GaWxlQmxvYkl0ZW0oKSkgeworICAgICAgICAgICAgICAgIGNvbnN0
IEZpbGVCbG9iSXRlbSogZmlsZSA9IHZhbHVlLT50b0ZpbGVCbG9iSXRlbSgpOworICAgICAgICAg
ICAgICAgIGNvbnN0IFN0cmluZyYgcGF0aCA9IGZpbGUtPnBhdGgoKTsKKyAgICAgICAgICAgICAg
ICBTdHJpbmcgZmlsZU5hbWUgPSBmaWxlLT5uYW1lKCk7CiAKICAgICAgICAgICAgICAgICAvLyBM
ZXQgdGhlIGFwcGxpY2F0aW9uIHNwZWNpZnkgYSBmaWxlbmFtZSBpZiBpdCdzIGdvaW5nIHRvIGdl
bmVyYXRlIGEgcmVwbGFjZW1lbnQgZmlsZSBmb3IgdGhlIHVwbG9hZC4KICAgICAgICAgICAgICAg
ICBpZiAoIXBhdGguaXNFbXB0eSgpKSB7CkBAIC0yMTcsOSArMjI1LDkgQEAgdm9pZCBGb3JtRGF0
YTo6YXBwZW5kRE9NRm9ybURhdGEoY29uc3QgRE9NRm9ybURhdGEmIGRvbUZvcm1EYXRhLCBib29s
IGlzTXVsdGlQYXIKICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIGluY2x1ZGUgdGhlIGZp
bGVuYW1lPSIuLiIgcGFydCBpbiB0aGUgaGVhZGVyLCBldmVuIGlmIHRoZSBmaWxlbmFtZSBpcyBl
bXB0eQogICAgICAgICAgICAgICAgIGZvcm1EYXRhQnVpbGRlci5hZGRGaWxlbmFtZVRvTXVsdGlQ
YXJ0SGVhZGVyKGhlYWRlciwgZW5jb2RpbmcsIGZpbGVOYW1lKTsKIAotICAgICAgICAgICAgICAg
IC8vIElmIGEgYmxvYiBpcyBzbGljZWQgZnJvbSBhIGZpbGUsIGRvIG5vdCBhZGQgdGhlIGNvbnRl
bnQgdHlwZS4gCisgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGl0ZW0gaXMgc2xpY2VkIGZyb20g
YSBmaWxlLCBkbyBub3QgYWRkIHRoZSBjb250ZW50IHR5cGUuCiAjaWYgRU5BQkxFKEJMT0JfU0xJ
Q0UpCi0gICAgICAgICAgICAgICAgaWYgKCFmaWxlTmFtZS5pc0VtcHR5KCkgJiYgdmFsdWUuYmxv
YigpLT5pc0ZpbGUoKSkgeworICAgICAgICAgICAgICAgIGlmICghZmlsZU5hbWUuaXNFbXB0eSgp
ICYmICF2YWx1ZS0+dG9GaWxlUmFuZ2VCbG9iSXRlbSgpKSB7CiAjZWxzZQogICAgICAgICAgICAg
ICAgIGlmICghZmlsZU5hbWUuaXNFbXB0eSgpKSB7CiAjZW5kaWYKQEAgLTIzNywyNSArMjQ1LDIw
IEBAIHZvaWQgRm9ybURhdGE6OmFwcGVuZERPTUZvcm1EYXRhKGNvbnN0IERPTUZvcm1EYXRhJiBk
b21Gb3JtRGF0YSwgYm9vbCBpc011bHRpUGFyCiAKICAgICAgICAgICAgIC8vIEFwcGVuZCBib2R5
CiAgICAgICAgICAgICBhcHBlbmREYXRhKGhlYWRlci5kYXRhKCksIGhlYWRlci5zaXplKCkpOwot
ICAgICAgICAgICAgaWYgKHNpemVfdCBkYXRhU2l6ZSA9IHZhbHVlLmRhdGEoKS5sZW5ndGgoKSkK
LSAgICAgICAgICAgICAgICBhcHBlbmREYXRhKHZhbHVlLmRhdGEoKS5kYXRhKCksIGRhdGFTaXpl
KTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlLmJsb2IoKSAmJiAhdmFsdWUuYmxvYigpLT5w
YXRoKCkuaXNFbXB0eSgpKQotI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgICAgICAgICAgICAg
IGFwcGVuZEZpbGVSYW5nZSh2YWx1ZS5ibG9iKCktPnBhdGgoKSwgdmFsdWUuYmxvYigpLT5zdGFy
dCgpLCB2YWx1ZS5ibG9iKCktPmxlbmd0aCgpLCB2YWx1ZS5ibG9iKCktPm1vZGlmaWNhdGlvblRp
bWUoKSwgc2hvdWxkR2VuZXJhdGVGaWxlKTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgYXBwZW5k
RmlsZSh2YWx1ZS5ibG9iKCktPnBhdGgoKSwgc2hvdWxkR2VuZXJhdGVGaWxlKTsKLSNlbmRpZgot
CisgICAgICAgICAgICBtX2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVsZW1lbnQodmFsdWUsIHNo
b3VsZEdlbmVyYXRlRmlsZSkpOwogICAgICAgICAgICAgYXBwZW5kRGF0YSgiXHJcbiIsIDIpOwog
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gT21pdCB0aGUgbmFtZSAiaXNpbmRleCIg
aWYgaXQncyB0aGUgZmlyc3QgZm9ybSBkYXRhIGVsZW1lbnQuCiAgICAgICAgICAgICAvLyBGSVhN
RTogV2h5IGlzIHRoaXMgYSBnb29kIHJ1bGU/IElzIHRoaXMgb2Jzb2xldGUgbm93PwotICAgICAg
ICAgICAgaWYgKGVuY29kZWREYXRhLmlzRW1wdHkoKSAmJiBrZXkuZGF0YSgpID09ICJpc2luZGV4
IikKLSAgICAgICAgICAgICAgICBGb3JtRGF0YUJ1aWxkZXI6OmVuY29kZVN0cmluZ0FzRm9ybURh
dGEoZW5jb2RlZERhdGEsIHZhbHVlLmRhdGEoKSk7CisgICAgICAgICAgICBjb25zdCBTdHJpbmdC
bG9iSXRlbSogc3RyaW5nVmFsdWUgPSB2YWx1ZS0+dG9TdHJpbmdCbG9iSXRlbSgpOworICAgICAg
ICAgICAgaWYgKCFzdHJpbmdWYWx1ZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIGlmIChlbmNvZGVkRGF0YS5pc0VtcHR5KCkgJiYga2V5LT5jc3RyKCkgPT0gImlzaW5k
ZXgiKQorICAgICAgICAgICAgICAgIEZvcm1EYXRhQnVpbGRlcjo6ZW5jb2RlU3RyaW5nQXNGb3Jt
RGF0YShlbmNvZGVkRGF0YSwgc3RyaW5nVmFsdWUtPmNzdHIoKSk7CiAgICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgZm9ybURhdGFCdWlsZGVyLmFkZEtleVZhbHVlUGFpckFzRm9ybURh
dGEoZW5jb2RlZERhdGEsIGtleS5kYXRhKCksIHZhbHVlLmRhdGEoKSk7CisgICAgICAgICAgICAg
ICAgZm9ybURhdGFCdWlsZGVyLmFkZEtleVZhbHVlUGFpckFzRm9ybURhdGEoZW5jb2RlZERhdGEs
IGtleS0+Y3N0cigpLCBzdHJpbmdWYWx1ZS0+Y3N0cigpKTsKICAgICAgICAgfQotICAgIH0gCisg
ICAgfQogCiAgICAgaWYgKGlzTXVsdGlQYXJ0Rm9ybSkKICAgICAgICAgZm9ybURhdGFCdWlsZGVy
LmFkZEJvdW5kYXJ5VG9NdWx0aVBhcnRIZWFkZXIoZW5jb2RlZERhdGEsIG1fYm91bmRhcnkuZGF0
YSgpLCB0cnVlKTsKQEAgLTI3MCwxMiArMjczLDggQEAgdm9pZCBGb3JtRGF0YTo6ZmxhdHRlbihW
ZWN0b3I8Y2hhcj4mIGRhdGEpIGNvbnN0CiAgICAgc2l6ZV90IG4gPSBtX2VsZW1lbnRzLnNpemUo
KTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG47ICsraSkgewogICAgICAgICBjb25zdCBG
b3JtRGF0YUVsZW1lbnQmIGUgPSBtX2VsZW1lbnRzW2ldOwotICAgICAgICBpZiAoZS5tX3R5cGUg
PT0gRm9ybURhdGFFbGVtZW50OjpkYXRhKSB7Ci0gICAgICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9
IGRhdGEuc2l6ZSgpOwotICAgICAgICAgICAgc2l6ZV90IGRlbHRhID0gZS5tX2RhdGEuc2l6ZSgp
OwotICAgICAgICAgICAgZGF0YS5ncm93KG9sZFNpemUgKyBkZWx0YSk7Ci0gICAgICAgICAgICBt
ZW1jcHkoZGF0YS5kYXRhKCkgKyBvbGRTaXplLCBlLm1fZGF0YS5kYXRhKCksIGRlbHRhKTsKLSAg
ICAgICAgfQorICAgICAgICBpZiAoZS5tX3R5cGUgPT0gRm9ybURhdGFFbGVtZW50OjpkYXRhKQor
ICAgICAgICAgICAgZGF0YS5hcHBlbmQoZS5tX2RhdGEuZGF0YSgpLCBzdGF0aWNfY2FzdDxzaXpl
X3Q+KGUubV9kYXRhLnNpemUoKSkpOwogICAgIH0KIH0KIApAQCAtMjg5LDEwICsyODgsMTAgQEAg
U3RyaW5nIEZvcm1EYXRhOjpmbGF0dGVuVG9TdHJpbmcoKSBjb25zdAogdm9pZCBGb3JtRGF0YTo6
Z2VuZXJhdGVGaWxlcyhEb2N1bWVudCogZG9jdW1lbnQpCiB7CiAgICAgQVNTRVJUKCFtX2hhc0dl
bmVyYXRlZEZpbGVzKTsKLSAgICAKKwogICAgIGlmIChtX2hhc0dlbmVyYXRlZEZpbGVzKQogICAg
ICAgICByZXR1cm47Ci0gICAgCisKICAgICBQYWdlKiBwYWdlID0gZG9jdW1lbnQtPnBhZ2UoKTsK
ICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybjsKQEAgLTMwMiw3ICszMDEsNyBAQCB2b2lk
IEZvcm1EYXRhOjpnZW5lcmF0ZUZpbGVzKERvY3VtZW50KiBkb2N1bWVudCkKICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG47ICsraSkgewogICAgICAgICBGb3JtRGF0YUVsZW1lbnQmIGUgPSBt
X2VsZW1lbnRzW2ldOwogICAgICAgICBpZiAoZS5tX3R5cGUgPT0gRm9ybURhdGFFbGVtZW50Ojpl
bmNvZGVkRmlsZSAmJiBlLm1fc2hvdWxkR2VuZXJhdGVGaWxlKSB7Ci0gICAgICAgICAgICBlLm1f
Z2VuZXJhdGVkRmlsZW5hbWUgPSBjbGllbnQtPmdlbmVyYXRlUmVwbGFjZW1lbnRGaWxlKGUubV9m
aWxlbmFtZSk7CisgICAgICAgICAgICBlLm1fZ2VuZXJhdGVkRmlsZW5hbWUgPSBjbGllbnQtPmdl
bmVyYXRlUmVwbGFjZW1lbnRGaWxlKGUuaXRlbSgpLT50b0ZpbGVCbG9iSXRlbSgpLT5wYXRoKCkp
OwogICAgICAgICAgICAgbV9oYXNHZW5lcmF0ZWRGaWxlcyA9IHRydWU7CiAgICAgICAgIH0KICAg
ICB9CkBAIC0zMTIsNyArMzExLDcgQEAgdm9pZCBGb3JtRGF0YTo6cmVtb3ZlR2VuZXJhdGVkRmls
ZXNJZk5lZWRlZCgpCiB7CiAgICAgaWYgKCFtX2hhc0dlbmVyYXRlZEZpbGVzKQogICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIAorCiAgICAgc2l6ZV90IG4gPSBtX2VsZW1lbnRzLnNpemUoKTsKICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG47ICsraSkgewogICAgICAgICBGb3JtRGF0YUVsZW1l
bnQmIGUgPSBtX2VsZW1lbnRzW2ldOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL0Zvcm1EYXRhLmggYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuaAppbmRl
eCBhNDM5MDIzNDc5NmEwZTJmMTRmNWQzNDlmNWRkMGVmZmMwYTRiN2NkLi45MWZiYzlhZDA2MmIz
ZjA3MTVjOTdlNmViMzhiYWJmOTFiN2YyZTVmIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvRm9ybURhdGEuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURh
dGEuaApAQCAtMjAsNzQgKzIwLDg5IEBACiAjaWZuZGVmIEZvcm1EYXRhX2gKICNkZWZpbmUgRm9y
bURhdGFfaAogCisjaW5jbHVkZSAiQmxvYkl0ZW0uaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmlu
Zy5oIgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIERPTUZvcm1EYXRhOwogY2xhc3MgRG9j
dW1lbnQ7CitjbGFzcyBUZXh0RW5jb2Rpbmc7CiAKKy8vIEEgd3JhcHBlciBjbGFzcyBvZiBCbG9i
SXRlbSBmb3IgRm9ybURhdGEuCiBjbGFzcyBGb3JtRGF0YUVsZW1lbnQgewogcHVibGljOgotICAg
IEZvcm1EYXRhRWxlbWVudCgpIDogbV90eXBlKGRhdGEpIHsgfQotICAgIEZvcm1EYXRhRWxlbWVu
dChjb25zdCBWZWN0b3I8Y2hhcj4mIGFycmF5KSA6IG1fdHlwZShkYXRhKSwgbV9kYXRhKGFycmF5
KSB7IH0KLSNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAgICBGb3JtRGF0YUVsZW1lbnQoY29uc3Qg
U3RyaW5nJiBmaWxlbmFtZSwgbG9uZyBsb25nIGZpbGVTdGFydCwgbG9uZyBsb25nIGZpbGVMZW5n
dGgsIGRvdWJsZSBleHBlY3RlZEZpbGVNb2RpZmljYXRpb25UaW1lLCBib29sIHNob3VsZEdlbmVy
YXRlRmlsZSkgOiBtX3R5cGUoZW5jb2RlZEZpbGUpLCBtX2ZpbGVuYW1lKGZpbGVuYW1lKSwgbV9m
aWxlU3RhcnQoZmlsZVN0YXJ0KSwgbV9maWxlTGVuZ3RoKGZpbGVMZW5ndGgpLCBtX2V4cGVjdGVk
RmlsZU1vZGlmaWNhdGlvblRpbWUoZXhwZWN0ZWRGaWxlTW9kaWZpY2F0aW9uVGltZSksIG1fc2hv
dWxkR2VuZXJhdGVGaWxlKHNob3VsZEdlbmVyYXRlRmlsZSkgeyB9Ci0jZWxzZQotICAgIEZvcm1E
YXRhRWxlbWVudChjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBib29sIHNob3VsZEdlbmVyYXRlRmls
ZSkgOiBtX3R5cGUoZW5jb2RlZEZpbGUpLCBtX2ZpbGVuYW1lKGZpbGVuYW1lKSwgbV9zaG91bGRH
ZW5lcmF0ZUZpbGUoc2hvdWxkR2VuZXJhdGVGaWxlKSB7IH0KLSNlbmRpZgorICAgIEZvcm1EYXRh
RWxlbWVudCgpIDogbV9kYXRhKDApIHsgfQorICAgIEZvcm1EYXRhRWxlbWVudChQYXNzUmVmUHRy
PEJsb2JJdGVtPiBibG9iSXRlbSwgYm9vbCBzaG91bGRHZW5lcmF0ZUZpbGUgPSBmYWxzZSk7CisK
KyAgICBjb25zdCBCbG9iSXRlbSogaXRlbSgpIGNvbnN0IHsgcmV0dXJuIG1faXRlbS5nZXQoKTsg
fQorCisgICAgUmVmUHRyPEJsb2JJdGVtPiBtX2l0ZW07CiAKKyAgICAvLyBGSVhNRTogY2xlYW4g
bWUgdXAuICBDb2RlIGJlbG93IGFyZSBtb3N0bHkga2VwdCBmb3IgY29tcGF0aWJpbGl0eS4KICAg
ICBlbnVtIHsgZGF0YSwgZW5jb2RlZEZpbGUgfSBtX3R5cGU7Ci0gICAgVmVjdG9yPGNoYXI+IG1f
ZGF0YTsKKyAgICBjb25zdCBzdHJ1Y3QgQmxvYkl0ZW1XcmFwcGVyIHsKKyAgICAgICAgQmxvYkl0
ZW1XcmFwcGVyKGNvbnN0IEJsb2JJdGVtV3JhcHBlciYgdikgOiBtX2l0ZW0odi5tX2l0ZW0pIHsg
fQorICAgICAgICBCbG9iSXRlbVdyYXBwZXIoY29uc3QgRGF0YUJsb2JJdGVtKiBpdGVtKSA6IG1f
aXRlbShpdGVtKSB7IH0KKyAgICAgICAgc2l6ZV90IHNpemUoKSBjb25zdAorICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAoIW1faXRlbSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG1faXRlbS0+c2l6ZSgpKTsKKyAgICAg
ICAgfQorICAgICAgICBjb25zdCBjaGFyKiBkYXRhKCkgY29uc3QKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKCFtX2l0ZW0pCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAg
ICByZXR1cm4gbV9pdGVtLT5kYXRhKCk7CisgICAgICAgIH0KKyAgICAgICAgY2hhciogcmVsZWFz
ZUJ1ZmZlcigpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghbV9pdGVtKQorICAg
ICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIG1faXRlbS0+cmVsZWFz
ZUJ1ZmZlcigpOworICAgICAgICB9CisgICAgICAgIGNvbnN0IERhdGFCbG9iSXRlbSogbV9pdGVt
OworICAgIH0gbV9kYXRhOwogICAgIFN0cmluZyBtX2ZpbGVuYW1lOwogI2lmIEVOQUJMRShCTE9C
X1NMSUNFKQogICAgIGxvbmcgbG9uZyBtX2ZpbGVTdGFydDsKICAgICBsb25nIGxvbmcgbV9maWxl
TGVuZ3RoOwogICAgIGRvdWJsZSBtX2V4cGVjdGVkRmlsZU1vZGlmaWNhdGlvblRpbWU7CisKKyAg
ICBzdGF0aWMgY29uc3QgbG9uZyBsb25nIHRvRW5kT2ZGaWxlOwogI2VuZGlmCisKICAgICBTdHJp
bmcgbV9nZW5lcmF0ZWRGaWxlbmFtZTsKICAgICBib29sIG1fc2hvdWxkR2VuZXJhdGVGaWxlOwog
fTsKIAogaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb3JtRGF0YUVsZW1lbnQmIGEsIGNv
bnN0IEZvcm1EYXRhRWxlbWVudCYgYikKIHsKLSAgICBpZiAoJmEgPT0gJmIpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIAotICAgIGlmIChhLm1fdHlwZSAhPSBiLm1fdHlwZSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIGlmIChhLm1fZGF0YSAhPSBiLm1fZGF0YSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgIGlmIChhLm1fZmlsZW5hbWUg
IT0gYi5tX2ZpbGVuYW1lIHx8IGEubV9maWxlU3RhcnQgIT0gYi5tX2ZpbGVTdGFydCB8fCBhLm1f
ZmlsZUxlbmd0aCAhPSBiLm1fZmlsZUxlbmd0aCB8fCBhLm1fZXhwZWN0ZWRGaWxlTW9kaWZpY2F0
aW9uVGltZSAhPSBiLm1fZXhwZWN0ZWRGaWxlTW9kaWZpY2F0aW9uVGltZSkKLSNlbHNlCi0gICAg
aWYgKGEubV9maWxlbmFtZSAhPSBiLm1fZmlsZW5hbWUpCi0jZW5kaWYKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGEuaXRlbSgpLT5lcXVhbHMo
Yi5pdGVtKCkpOwogfQotIAorCiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZvcm1EYXRh
RWxlbWVudCYgYSwgY29uc3QgRm9ybURhdGFFbGVtZW50JiBiKQogewogICAgIHJldHVybiAhKGEg
PT0gYik7CiB9Ci0gCisKIGNsYXNzIEZvcm1EYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8Rm9ybURh
dGE+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxGb3JtRGF0YT4gY3JlYXRlKCk7
CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGNyZWF0ZShjb25zdCB2b2lkKiwgc2l6
ZV90KTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxGb3JtRGF0YT4gY3JlYXRlKGNvbnN0IFdURjo6
Q1N0cmluZyYpOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZvcm1EYXRhPiBjcmVhdGUoY29uc3Qg
VmVjdG9yPGNoYXI+Jik7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGNyZWF0ZShj
b25zdCBET01Gb3JtRGF0YSYpOwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZvcm1EYXRhPiBjcmVh
dGVNdWx0aVBhcnQoY29uc3QgRE9NRm9ybURhdGEmLCBEb2N1bWVudCopOworICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEZvcm1EYXRhPiBjcmVhdGUoY29uc3QgQmxvYkl0ZW1MaXN0JiwgY29uc3QgVGV4
dEVuY29kaW5nJik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGNyZWF0ZU11bHRp
UGFydChjb25zdCBCbG9iSXRlbUxpc3QmLCBjb25zdCBUZXh0RW5jb2RpbmcmLCBEb2N1bWVudCop
OwogICAgIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGNvcHkoKSBjb25zdDsKICAgICBQYXNzUmVmUHRy
PEZvcm1EYXRhPiBkZWVwQ29weSgpIGNvbnN0OwogICAgIH5Gb3JtRGF0YSgpOwotICAgIAorCiAg
ICAgdm9pZCBhcHBlbmREYXRhKGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCk7CisgICAgdm9pZCBh
cHBlbmRCbG9iSXRlbUxpc3QoY29uc3QgQmxvYkl0ZW1MaXN0Jik7CisgICAgdm9pZCBhcHBlbmRT
dHJpbmcoY29uc3QgQ1N0cmluZyYpOwogICAgIHZvaWQgYXBwZW5kRmlsZShjb25zdCBTdHJpbmcm
IGZpbGVuYW1lLCBib29sIHNob3VsZEdlbmVyYXRlRmlsZSA9IGZhbHNlKTsKICNpZiBFTkFCTEUo
QkxPQl9TTElDRSkKICAgICB2b2lkIGFwcGVuZEZpbGVSYW5nZShjb25zdCBTdHJpbmcmIGZpbGVu
YW1lLCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgsIGRvdWJsZSBleHBlY3RlZE1v
ZGlmaWNhdGlvblRpbWUsIGJvb2wgc2hvdWxkR2VuZXJhdGVGaWxlID0gZmFsc2UpOwpAQCAtMTE1
LDkgKzEzMCwxMCBAQCBwcml2YXRlOgogICAgIEZvcm1EYXRhKCk7CiAgICAgRm9ybURhdGEoY29u
c3QgRm9ybURhdGEmKTsKIAotICAgIHZvaWQgYXBwZW5kRE9NRm9ybURhdGEoY29uc3QgRE9NRm9y
bURhdGEmIGRvbUZvcm1EYXRhLCBib29sIGlzTXVsdGlQYXJ0Rm9ybSwgRG9jdW1lbnQqIGRvY3Vt
ZW50KTsKKyAgICB2b2lkIGFwcGVuZEZvcm1EYXRhSXRlbXMoY29uc3QgQmxvYkl0ZW1MaXN0JiBm
b3JtRGF0YUl0ZW1zLCBjb25zdCBUZXh0RW5jb2RpbmcmLCBib29sIGlzTXVsdGlQYXJ0Rm9ybSwg
RG9jdW1lbnQqIGRvY3VtZW50KTsKIAogICAgIFZlY3RvcjxGb3JtRGF0YUVsZW1lbnQ+IG1fZWxl
bWVudHM7CisKICAgICBpbnQ2NF90IG1faWRlbnRpZmllcjsKICAgICBib29sIG1faGFzR2VuZXJh
dGVkRmlsZXM7CiAgICAgYm9vbCBtX2Fsd2F5c1N0cmVhbTsKQEAgLTEzMSw3ICsxNDcsNyBAQCBp
bmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvcm1EYXRhJiBhLCBjb25zdCBGb3JtRGF0YSYg
YikKIAogaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGb3JtRGF0YSYgYSwgY29uc3QgRm9y
bURhdGEmIGIpCiB7Ci0gICAgcmV0dXJuIGEuZWxlbWVudHMoKSAhPSBiLmVsZW1lbnRzKCk7Cisg
ICAgcmV0dXJuICEoYSA9PSBiKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9Gb3JtRGF0YVN0cmVhbU1hYy5tbSBi
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvRm9ybURhdGFTdHJlYW1NYWMubW0KaW5kZXgg
MjdlY2ZkMDhhZDVhYWFiODc1NmZhNTk2ZDk5NmJkMmY2ZWM1ZDAzZi4uMWU0OGUyZjhmYmIyZmZl
NmU3NzllYWIxMGE2NzEyMDQxNzQ2YTA0MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL21hYy9Gb3JtRGF0YVN0cmVhbU1hYy5tbQorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvbWFjL0Zvcm1EYXRhU3RyZWFtTWFjLm1tCkBAIC0zMSw3ICszMSw2IEBACiAjaW1wb3J0
ICJjb25maWcuaCIKICNpbXBvcnQgIkZvcm1EYXRhU3RyZWFtTWFjLmgiCiAKLSNpbXBvcnQgIkJs
b2IuaCIKICNpbXBvcnQgIkZpbGVTeXN0ZW0uaCIKICNpbXBvcnQgIkZvcm1EYXRhLmgiCiAjaW1w
b3J0ICJSZXNvdXJjZUhhbmRsZS5oIgpAQCAtMTQyLDcgKzE0MSw3IEBAIHN0YXRpYyB2b2lkIGNs
b3NlQ3VycmVudFN0cmVhbShGb3JtU3RyZWFtRmllbGRzICpmb3JtKQogICAgICAgICBDRlJlbGVh
c2UoZm9ybS0+Y3VycmVudFN0cmVhbSk7CiAgICAgICAgIGZvcm0tPmN1cnJlbnRTdHJlYW0gPSBO
VUxMOwogI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgICAgICBmb3JtLT5jdXJyZW50U3RyZWFt
UmFuZ2VMZW5ndGggPSBCbG9iOjp0b0VuZE9mRmlsZTsKKyAgICAgICAgZm9ybS0+Y3VycmVudFN0
cmVhbVJhbmdlTGVuZ3RoID0gRm9ybURhdGFFbGVtZW50Ojp0b0VuZE9mRmlsZTsKICNlbmRpZgog
ICAgIH0KICAgICBpZiAoZm9ybS0+Y3VycmVudERhdGEpIHsKQEAgLTE2MSwyMSArMTYwLDE3IEBA
IHN0YXRpYyBib29sIGFkdmFuY2VDdXJyZW50U3RyZWFtKEZvcm1TdHJlYW1GaWVsZHMqIGZvcm0p
CiAKICAgICAvLyBDcmVhdGUgdGhlIG5ldyBzdHJlYW0uCiAgICAgRm9ybURhdGFFbGVtZW50JiBu
ZXh0SW5wdXQgPSBmb3JtLT5yZW1haW5pbmdFbGVtZW50cy5sYXN0KCk7CisKKyAgICAvLyBDaGVj
ayBpZiB0aGUgdW5kZXJseWluZyBkYXRhIGhhcyBiZWNvbWUgc3RhbGUgKGUuZy4gdGhlIGZpbGUg
aGFzIGJlZW4gY2hhbmdlZCBzaW5jZSBpdHMgc25hcHNob3QgaGFzIGJlZW4gdGFrZW4pIG9yIG5v
dC4KKyAgICBpZiAoIW5leHRJbnB1dC5tX2l0ZW0tPmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCiAgICAgaWYgKG5leHRJbnB1dC5tX3R5cGUgPT0gRm9ybURhdGFFbGVtZW50Ojpk
YXRhKSB7CiAgICAgICAgIHNpemVfdCBzaXplID0gbmV4dElucHV0Lm1fZGF0YS5zaXplKCk7CiAg
ICAgICAgIGNoYXIqIGRhdGEgPSBuZXh0SW5wdXQubV9kYXRhLnJlbGVhc2VCdWZmZXIoKTsKICAg
ICAgICAgZm9ybS0+Y3VycmVudFN0cmVhbSA9IENGUmVhZFN0cmVhbUNyZWF0ZVdpdGhCeXRlc05v
Q29weSgwLCByZWludGVycHJldF9jYXN0PGNvbnN0IFVJbnQ4Kj4oZGF0YSksIHNpemUsIGtDRkFs
bG9jYXRvck51bGwpOwogICAgICAgICBmb3JtLT5jdXJyZW50RGF0YSA9IGRhdGE7CiAgICAgfSBl
bHNlIHsKLSNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGZp
bGUgaGFzIGJlZW4gY2hhbmdlZCBvciBub3QgaWYgcmVxdWlyZWQuCi0gICAgICAgIGlmIChuZXh0
SW5wdXQubV9leHBlY3RlZEZpbGVNb2RpZmljYXRpb25UaW1lICE9IEJsb2I6OmRvTm90Q2hlY2tG
aWxlQ2hhbmdlKSB7Ci0gICAgICAgICAgICB0aW1lX3QgZmlsZU1vZGlmaWNhdGlvblRpbWU7Ci0g
ICAgICAgICAgICBpZiAoIWdldEZpbGVNb2RpZmljYXRpb25UaW1lKG5leHRJbnB1dC5tX2ZpbGVu
YW1lLCBmaWxlTW9kaWZpY2F0aW9uVGltZSkgfHwgZmlsZU1vZGlmaWNhdGlvblRpbWUgIT0gc3Rh
dGljX2Nhc3Q8dGltZV90PihuZXh0SW5wdXQubV9leHBlY3RlZEZpbGVNb2RpZmljYXRpb25UaW1l
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSNlbmRpZgotCiAg
ICAgICAgIGNvbnN0IFN0cmluZyYgcGF0aCA9IG5leHRJbnB1dC5tX3Nob3VsZEdlbmVyYXRlRmls
ZSA/IG5leHRJbnB1dC5tX2dlbmVyYXRlZEZpbGVuYW1lIDogbmV4dElucHV0Lm1fZmlsZW5hbWU7
CiAgICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gZmlsZW5hbWUoQWRvcHRDRiwgcGF0aC5j
cmVhdGVDRlN0cmluZygpKTsKICAgICAgICAgUmV0YWluUHRyPENGVVJMUmVmPiBmaWxlVVJMKEFk
b3B0Q0YsIENGVVJMQ3JlYXRlV2l0aEZpbGVTeXN0ZW1QYXRoKDAsIGZpbGVuYW1lLmdldCgpLCBr
Q0ZVUkxQT1NJWFBhdGhTdHlsZSwgRkFMU0UpKTsKQEAgLTIyMiw3ICsyMTcsNyBAQCBzdGF0aWMg
dm9pZCogZm9ybUNyZWF0ZShDRlJlYWRTdHJlYW1SZWYgc3RyZWFtLCB2b2lkKiBjb250ZXh0KQog
ICAgIEZvcm1TdHJlYW1GaWVsZHMqIG5ld0luZm8gPSBuZXcgRm9ybVN0cmVhbUZpZWxkczsKICAg
ICBuZXdJbmZvLT5jdXJyZW50U3RyZWFtID0gTlVMTDsKICNpZiBFTkFCTEUoQkxPQl9TTElDRSkK
LSAgICBuZXdJbmZvLT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5ndGggPSBCbG9iOjp0b0VuZE9mRmls
ZTsKKyAgICBuZXdJbmZvLT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5ndGggPSBGb3JtRGF0YUVsZW1l
bnQ6OnRvRW5kT2ZGaWxlOwogI2VuZGlmCiAgICAgbmV3SW5mby0+Y3VycmVudERhdGEgPSAwOwog
ICAgIG5ld0luZm8tPmZvcm1TdHJlYW0gPSBzdHJlYW07IC8vIERvbid0IHJldGFpbi4gVGhhdCB3
b3VsZCBjcmVhdGUgYSByZWZlcmVuY2UgY3ljbGUuCkBAIC0yNzAsNyArMjY1LDcgQEAgc3RhdGlj
IENGSW5kZXggZm9ybVJlYWQoQ0ZSZWFkU3RyZWFtUmVmIHN0cmVhbSwgVUludDgqIGJ1ZmZlciwg
Q0ZJbmRleCBidWZmZXJMZW4KICAgICB3aGlsZSAoZm9ybS0+Y3VycmVudFN0cmVhbSkgewogICAg
ICAgICBDRkluZGV4IGJ5dGVzVG9SZWFkID0gYnVmZmVyTGVuZ3RoOwogI2lmIEVOQUJMRShCTE9C
X1NMSUNFKQotICAgICAgICBpZiAoZm9ybS0+Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoICE9IEJs
b2I6OnRvRW5kT2ZGaWxlICYmIGZvcm0tPmN1cnJlbnRTdHJlYW1SYW5nZUxlbmd0aCA8IGJ5dGVz
VG9SZWFkKQorICAgICAgICBpZiAoZm9ybS0+Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoICE9IEZv
cm1EYXRhRWxlbWVudDo6dG9FbmRPZkZpbGUgJiYgZm9ybS0+Y3VycmVudFN0cmVhbVJhbmdlTGVu
Z3RoIDwgYnl0ZXNUb1JlYWQpCiAgICAgICAgICAgICBieXRlc1RvUmVhZCA9IHN0YXRpY19jYXN0
PENGSW5kZXg+KGZvcm0tPmN1cnJlbnRTdHJlYW1SYW5nZUxlbmd0aCk7CiAjZW5kaWYKICAgICAg
ICAgQ0ZJbmRleCBieXRlc1JlYWQgPSBDRlJlYWRTdHJlYW1SZWFkKGZvcm0tPmN1cnJlbnRTdHJl
YW0sIGJ1ZmZlciwgYnl0ZXNUb1JlYWQpOwpAQCAtMjgzLDcgKzI3OCw3IEBAIHN0YXRpYyBDRklu
ZGV4IGZvcm1SZWFkKENGUmVhZFN0cmVhbVJlZiBzdHJlYW0sIFVJbnQ4KiBidWZmZXIsIENGSW5k
ZXggYnVmZmVyTGVuCiAgICAgICAgICAgICAqYXRFT0YgPSBGQUxTRTsKICAgICAgICAgICAgIGZv
cm0tPmJ5dGVzU2VudCArPSBieXRlc1JlYWQ7CiAjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAg
ICAgICAgICBpZiAoZm9ybS0+Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoICE9IEJsb2I6OnRvRW5k
T2ZGaWxlKQorICAgICAgICAgICAgaWYgKGZvcm0tPmN1cnJlbnRTdHJlYW1SYW5nZUxlbmd0aCAh
PSBGb3JtRGF0YUVsZW1lbnQ6OnRvRW5kT2ZGaWxlKQogICAgICAgICAgICAgICAgIGZvcm0tPmN1
cnJlbnRTdHJlYW1SYW5nZUxlbmd0aCAtPSBieXRlc1JlYWQ7CiAjZW5kaWYKIApAQCAtNDAwLDcg
KzM5NSw3IEBAIHZvaWQgc2V0SFRUUEJvZHkoTlNNdXRhYmxlVVJMUmVxdWVzdCAqcmVxdWVzdCwg
UGFzc1JlZlB0cjxGb3JtRGF0YT4gZm9ybURhdGEpCiAgICAgICAgIGVsc2UgewogI2lmIEVOQUJM
RShCTE9CX1NMSUNFKQogICAgICAgICAgICAgLy8gSWYgd2UncmUgc2VuZGluZyB0aGUgZmlsZSBy
YW5nZSwgdXNlIHRoZSBleGlzdGluZyByYW5nZSBsZW5ndGggZm9yIG5vdy4gV2Ugd2lsbCBkZXRl
Y3QgaWYgdGhlIGZpbGUgaGFzIGJlZW4gY2hhbmdlZCByaWdodCBiZWZvcmUgd2UgcmVhZCB0aGUg
ZmlsZSBhbmQgYWJvcnQgdGhlIG9wZXJhdGlvbiBpZiBuZWNlc3NhcnkuCi0gICAgICAgICAgICBp
ZiAoZWxlbWVudC5tX2ZpbGVMZW5ndGggIT0gQmxvYjo6dG9FbmRPZkZpbGUpIHsKKyAgICAgICAg
ICAgIGlmIChlbGVtZW50Lm1fZmlsZUxlbmd0aCAhPSBGb3JtRGF0YUVsZW1lbnQ6OnRvRW5kT2ZG
aWxlKSB7CiAgICAgICAgICAgICAgICAgbGVuZ3RoICs9IGVsZW1lbnQubV9maWxlTGVuZ3RoOwog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwIGIvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3Qu
Y3BwCmluZGV4IDVjZGUyNGRlMjlkYjQ0MjEwMDAxYTMwMjMyNDRjYTRjY2QyNWNmYmIuLjRkNDUw
M2UzODdkYTczYjM1ODFjMjZkYjU4ZmZmYmEzZjU1OGYwMDYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
eG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAorKysgYi9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5j
cHAKQEAgLTQ3OCwxMSArNDc4LDcgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6c2VuZChCbG9iKiBi
b2R5LCBFeGNlcHRpb25Db2RlJiBlYykKICAgICAgICAgLy8gRklYTUU6IFNob3VsZCB3ZSBzZXQg
YSBDb250ZW50LVR5cGUgaWYgb25lIGlzIG5vdCBzZXQuCiAgICAgICAgIC8vIEZJWE1FOiBhZGQg
c3VwcG9ydCBmb3IgdXBsb2FkaW5nIGJ1bmRsZXMuCiAgICAgICAgIG1fcmVxdWVzdEVudGl0eUJv
ZHkgPSBGb3JtRGF0YTo6Y3JlYXRlKCk7Ci0jaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgICAg
IG1fcmVxdWVzdEVudGl0eUJvZHktPmFwcGVuZEZpbGVSYW5nZShib2R5LT5wYXRoKCksIGJvZHkt
PnN0YXJ0KCksIGJvZHktPmxlbmd0aCgpLCBib2R5LT5tb2RpZmljYXRpb25UaW1lKCkpOwotI2Vs
c2UKLSAgICAgICAgbV9yZXF1ZXN0RW50aXR5Qm9keS0+YXBwZW5kRmlsZShib2R5LT5wYXRoKCks
IGZhbHNlKTsKLSNlbmRpZgorICAgICAgICBtX3JlcXVlc3RFbnRpdHlCb2R5LT5hcHBlbmRCbG9i
SXRlbUxpc3QoYm9keS0+aXRlbXMoKSk7CiAgICAgfQogCiAgICAgY3JlYXRlUmVxdWVzdChlYyk7
CkBAIC00OTQsNyArNDkwLDcgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6c2VuZChET01Gb3JtRGF0
YSogYm9keSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICht
X21ldGhvZCAhPSAiR0VUIiAmJiBtX21ldGhvZCAhPSAiSEVBRCIgJiYgbV91cmwucHJvdG9jb2xJ
bkhUVFBGYW1pbHkoKSkgewotICAgICAgICBtX3JlcXVlc3RFbnRpdHlCb2R5ID0gRm9ybURhdGE6
OmNyZWF0ZU11bHRpUGFydCgqYm9keSwgZG9jdW1lbnQoKSk7CisgICAgICAgIG1fcmVxdWVzdEVu
dGl0eUJvZHkgPSBGb3JtRGF0YTo6Y3JlYXRlTXVsdGlQYXJ0KGJvZHktPmxpc3QoKSwgYm9keS0+
ZW5jb2RpbmcoKSwgZG9jdW1lbnQoKSk7CiAKICAgICAgICAgLy8gV2UgbmVlZCB0byBhc2sgdGhl
IGNsaWVudCB0byBwcm92aWRlIHRoZSBnZW5lcmF0ZWQgZmlsZSBuYW1lcyBpZiBuZWVkZWQuIFdo
ZW4gRm9ybURhdGEgZmlsbHMgdGhlIGVsZW1lbnQKICAgICAgICAgLy8gZm9yIHRoZSBmaWxlLCBp
dCBjb3VsZCBzZXQgYSBmbGFnIHRvIHVzZSB0aGUgZ2VuZXJhdGVkIGZpbGUgbmFtZSwgaS5lLiBh
IHBhY2thZ2UgZmlsZSBvbiBNYWMuCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBkYWMzYjJmZmE5OGVlMmVjMjlk
ZGRjNTFkNTZjMWEyNTVlYWZjMzU5Li45NDRiYWVhMWVlZmFmNzE1ZTFiODBiYWYzMmIwZWY5ZmU0
ODNmNzQxIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxMC0wNS0yMCAgS2ludWtv
IFlhc3VkYSAgPGtpbnVrb0BraW51a28yLW1hY3Byby5tdHYuY29ycC5nb29nbGUuY29tPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yIEZv
cm1EYXRhIGFuZCBCbG9iIGZvciBiZXR0ZXIgc3VwcG9ydCBvZiBCbG9icyBzeW50aGVzaXplZCBi
eSBCbG9iQnVpbGRlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MzkwODMKKworICAgICAgICBSZXBsYWNlIEZvcm1EYXRhTGlzdDo6SXRlbSBsaXN0IHdp
dGggQmxvYkl0ZW1MaXN0IHRvIGdldCBpdCBjb21waWxpbmcKKyAgICAgICAgd2l0aCB0aGUgcmVm
YWN0b3JpbmcgaW4gRm9ybURhdGFMaXN0LgorCisgICAgICAgICogc3JjL1dlYlNlYXJjaGFibGVG
b3JtRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIYXNTdWl0YWJsZVRleHRFbGVtZW50KToK
KwogMjAxMC0wNS0xOSAgTWFyY3VzIEJ1bGFjaCAgPGJ1bGFjaEBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgU3RldmUgQmxvY2suCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlNlYXJjaGFibGVGb3JtRGF0YS5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlNlYXJjaGFibGVGb3JtRGF0YS5jcHAKaW5kZXggOGVlZjZjYzg5NDdlNWM2Y2M5MzMwNWQyY2I2
MTE1OGVlZTllNjhkNS4uZjMyMGMwOWEzOGRhOWEyY2Y4YmUyOWU0NGQ0MTAwMzMxODRhZDcyOSAx
MDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZWFyY2hhYmxlRm9ybURhdGEuY3Bw
CisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2VhcmNoYWJsZUZvcm1EYXRhLmNwcApAQCAt
MTg1LDcgKzE4NSw3IEBAIGJvb2wgSGFzU3VpdGFibGVUZXh0RWxlbWVudChjb25zdCBIVE1MRm9y
bUVsZW1lbnQqIGZvcm0sIFZlY3RvcjxjaGFyPiogZW5jb2RlZFN0CiAgICAgICBpZiAoIWZvcm1F
bGVtZW50LT5hcHBlbmRGb3JtRGF0YShkYXRhTGlzdCwgZmFsc2UpKQogICAgICAgICAgIGNvbnRp
bnVlOwogCi0gICAgICBjb25zdCBWZWN0b3I8Rm9ybURhdGFMaXN0OjpJdGVtPiYgaXRlbUxpc3Qg
PSBkYXRhTGlzdC5saXN0KCk7CisgICAgICBjb25zdCBCbG9iSXRlbUxpc3QmIGl0ZW1MaXN0ID0g
ZGF0YUxpc3QubGlzdCgpOwogICAgICAgaWYgKGlzVGV4dEVsZW1lbnQgJiYgIWl0ZW1MaXN0Lmlz
RW1wdHkoKSkgewogICAgICAgICAgIGlmICh0ZXh0RWxlbWVudCkgewogICAgICAgICAgICAgICAv
LyBUaGUgYXV0by1jb21wbGV0ZSBiYXIgb25seSBrbm93cyBob3cgdG8gZmlsbCBpbiBvbmUgdmFs
dWUuCkBAIC0xOTQsMjAgKzE5NCwyMyBAQCBib29sIEhhc1N1aXRhYmxlVGV4dEVsZW1lbnQoY29u
c3QgSFRNTEZvcm1FbGVtZW50KiBmb3JtLCBWZWN0b3I8Y2hhcj4qIGVuY29kZWRTdAogICAgICAg
ICAgIH0KICAgICAgICAgICB0ZXh0RWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1l
bnQqPihmb3JtRWxlbWVudCk7CiAgICAgICB9Ci0gICAgICBmb3IgKFZlY3RvcjxGb3JtRGF0YUxp
c3Q6Okl0ZW0+Ojpjb25zdF9pdGVyYXRvciBqKGl0ZW1MaXN0LmJlZ2luKCkpOyBqICE9IGl0ZW1M
aXN0LmVuZCgpOyArK2opIHsKKyAgICAgIGZvciAoQmxvYkl0ZW1MaXN0Ojpjb25zdF9pdGVyYXRv
ciBqKGl0ZW1MaXN0LmJlZ2luKCkpOyBqICE9IGl0ZW1MaXN0LmVuZCgpOyArK2opIHsKKyAgICAg
ICAgICBTdHJpbmdCbG9iSXRlbSogaXRlbSA9ICgqaiktPnRvU3RyaW5nQmxvYkl0ZW0oKTsKKyAg
ICAgICAgICBpZiAoIWl0ZW0pCisgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgIC8v
IEhhbmRsZSBJU0lOREVYIC8gPGlucHV0IG5hbWU9aXNpbmRleD4gc3BlY2lhbGx5LCBidXQgb25s
eSBpZiBpdCdzCiAgICAgICAgICAgLy8gdGhlIGZpcnN0IGVudHJ5LgotICAgICAgICAgIGlmICgh
ZW5jb2RlZFN0cmluZy0+aXNFbXB0eSgpIHx8IGotPmRhdGEoKSAhPSAiaXNpbmRleCIpIHsKKyAg
ICAgICAgICBpZiAoIWVuY29kZWRTdHJpbmctPmlzRW1wdHkoKSB8fCBpdGVtLT5jc3RyKCkgIT0g
ImlzaW5kZXgiKSB7CiAgICAgICAgICAgICAgIGlmICghZW5jb2RlZFN0cmluZy0+aXNFbXB0eSgp
KQogICAgICAgICAgICAgICAgICAgZW5jb2RlZFN0cmluZy0+YXBwZW5kKCcmJyk7Ci0gICAgICAg
ICAgICAgIEZvcm1EYXRhQnVpbGRlcjo6ZW5jb2RlU3RyaW5nQXNGb3JtRGF0YSgqZW5jb2RlZFN0
cmluZywgai0+ZGF0YSgpKTsKKyAgICAgICAgICAgICAgRm9ybURhdGFCdWlsZGVyOjplbmNvZGVT
dHJpbmdBc0Zvcm1EYXRhKCplbmNvZGVkU3RyaW5nLCBpdGVtLT5jc3RyKCkpOwogICAgICAgICAg
ICAgICBlbmNvZGVkU3RyaW5nLT5hcHBlbmQoJz0nKTsKICAgICAgICAgICB9CiAgICAgICAgICAg
KytqOwogICAgICAgICAgIGlmIChmb3JtRWxlbWVudCA9PSB0ZXh0RWxlbWVudCkKICAgICAgICAg
ICAgICAgZW5jb2RlZFN0cmluZy0+YXBwZW5kKCJ7c2VhcmNoVGVybXN9IiwgMTMpOwogICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgRm9ybURhdGFCdWlsZGVyOjplbmNvZGVTdHJpbmdBc0Zv
cm1EYXRhKCplbmNvZGVkU3RyaW5nLCBqLT5kYXRhKCkpOworICAgICAgICAgICAgICBGb3JtRGF0
YUJ1aWxkZXI6OmVuY29kZVN0cmluZ0FzRm9ybURhdGEoKmVuY29kZWRTdHJpbmcsIGl0ZW0tPmNz
dHIoKSk7CiAgICAgICB9CiAgICAgfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56706</attachid>
            <date>2010-05-21 07:39:33 -0700</date>
            <delta_ts>2010-05-21 07:54:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-39083-20100521073932.patch</filename>
            <type>text/plain</type>
            <size>74990</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CmluZGV4IDFiYjcyMDg5NzE3MzlkOWY2OTI0NDEyNzgwZjQ4NjRlNTU1ZTBiMjcuLjYxNmY2
M2IyOTcwYzgwYWIxMGI4MDFmNmNmMDlhNGMzYzM0NmVmNmIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
Q01ha2VMaXN0cy50eHQKKysrIGIvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTA5Niw2ICsx
MDk2LDcgQEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAgIHBhZ2UvYW5pbWF0aW9uL0tleWZyYW1l
QW5pbWF0aW9uLmNwcAogCiAgICAgcGxhdGZvcm0vQXJlbmEuY3BwCisgICAgcGxhdGZvcm0vQmxv
Ykl0ZW0uY3BwCiAgICAgcGxhdGZvcm0vQ29udGVudFR5cGUuY3BwCiAgICAgcGxhdGZvcm0vQ29u
dGV4dE1lbnUuY3BwCiAgICAgcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDRkZDJkZjM0
ZTEyY2JmYWJkNzc2YmJiNjY4OGMyMzc0NzYwMDhlZjYuLmMwZGE1OTg1YWRiNWRhMzEzNjYzZWRl
NjdjYmEzN2EzNjNlNzA4ZWMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dl
YkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODcgQEAKKzIwMTAtMDUtMjAgIEtpbnVrbyBZYXN1
ZGEgIDxraW51a29AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yIEZvcm1EYXRhIGFuZCBCbG9iIGZvciBiZXR0ZXIg
c3VwcG9ydCBvZiBCbG9icyBzeW50aGVzaXplZCBieSBCbG9iQnVpbGRlci4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5MDgzCisKKyAgICAgICAgLSBJ
bnRyb2R1Y2VzIGEgbmV3IGNsYXNzIEJsb2JJdGVtIGFzIGEgYmFzaWMgY29tcG9uZW50IG9mIEJs
b2IgYW5kIEZvcm1EYXRhLAorICAgICAgICAgIGFuZCBtYWtlcyBCbG9iIGFzIGEgY29sbGVjdGlv
biBvZiBCbG9iSXRlbXMuCisgICAgICAgIC0gRmlsZSB3b3VsZCBiZWNvbWUgYSBzcGVjaWFsIHR5
cGUgb2YgQmxvYiB0aGF0IGNvbnRhaW5zIG9ubHkgb25lCisgICAgICAgICAgRmlsZUJsb2JJdGVt
LgorICAgICAgICAtIE1ha2VzIEZvcm1EYXRhRWxlbWVudCBhIHdyYXBwZXIgb2YgQmxvYkl0ZW0g
KGFzIGEgdHJhbnNpZW50CisgICAgICAgICAgc29sdXRpb24pLgorICAgICAgICAtIEZpeCB0aGUg
ZGVwZW5kZW5jeSB2aW9sYXRpb24gaW4gRm9ybURhdGEgc28gdGhhdCB0aGUgZmlsZXMgdW5kZXIK
KyAgICAgICAgICBwbGF0Zm9ybS8gZG8gbm90IGluY2x1ZGUgYW55IGh0bWwvIGZpbGVzLgorCisg
ICAgICAgIFRoZSBwYXRjaCBkb2Vzbid0IHN1cHBvcnQgdGhlIGxhdGVzdCBGaWxlIEFQSSBjaGFu
Z2VzIChlLmcuIHR5cGUsCisgICAgICAgIHVybCBhbmQgc2xpY2UncyB0eXBlIHBhcmFtZXRlcnMp
IGFuZCBzaG91bGQgbm90IGNoYW5nZSBhbnkgb2YgaXRzCisgICAgICAgIGV4aXN0aW5nIGJlaGF2
aW9ycy4KKworICAgICAgICBUaGUgZXhpc3RpbmcgdGVzdHMgc2hvdWxkIGJlIGFibGUgdG8gYmUg
dXNlZCBmb3IgcmVncmVzc2lvbi4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAg
ICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBX
ZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAg
ICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaHRt
bC9CbG9iLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OkJsb2IpOgorICAgICAgICAoV2Vi
Q29yZTo6QmxvYjo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjpwYXRoKToKKyAgICAg
ICAgKFdlYkNvcmU6OkJsb2I6OmFwcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjpzbGlj
ZSk6CisgICAgICAgICogaHRtbC9CbG9iLmg6CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6dHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpC
bG9iOjppdGVtcyk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjpCbG9iKToKKyAgICAgICAgKiBo
dG1sL0ZpbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsZTo6RmlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGaWxlOjpuYW1lKToKKyAgICAgICAgKiBodG1sL0ZpbGUuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkZpbGU6OmZpbGVOYW1lKToKKyAgICAgICAgKiBodG1sL0ZpbGVTdHJlYW0uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsZVN0cmVhbTo6b3BlbkZvclJlYWQpOgorICAgICAgICAqIGh0
bWwvRm9ybURhdGFMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhTGlzdDo6YXBw
ZW5kU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhTGlzdDo6YXBwZW5kQmxvYik6
CisgICAgICAgICogaHRtbC9Gb3JtRGF0YUxpc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1E
YXRhTGlzdDo6bGlzdCk6CisgICAgICAgICogaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50OjpjcmVhdGVGb3JtRGF0YSk6CisgICAgICAg
ICogcGxhdGZvcm0vQmxvYkl0ZW0uY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9CbG9i
SXRlbS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhRWxlbWVudDo6Rm9ybURhdGFFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9y
bURhdGE6OmNyZWF0ZU11bHRpUGFydCk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YTo6ZGVl
cENvcHkpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6OmFwcGVuZERhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9ybURhdGE6OmFwcGVuZFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpG
b3JtRGF0YTo6YXBwZW5kRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YTo6YXBwZW5k
QmxvYkl0ZW1MaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjphcHBlbmRGaWxlUmFu
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6OmFwcGVuZEZvcm1EYXRhSXRlbXMpOgor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkZvcm1EYXRhRWxlbWVudDo6Rm9ybURhdGFFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZv
cm1EYXRhRWxlbWVudDo6aXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YUVsZW1lbnQ6
OkJsb2JJdGVtV3JhcHBlcjo6QmxvYkl0ZW1XcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZv
cm1EYXRhRWxlbWVudDo6QmxvYkl0ZW1XcmFwcGVyOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OkZvcm1EYXRhRWxlbWVudDo6QmxvYkl0ZW1XcmFwcGVyOjpkYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkZvcm1EYXRhRWxlbWVudDo6QmxvYkl0ZW1XcmFwcGVyOjpyZWxlYXNlQnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3Ih
PSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9tYWMvRm9ybURhdGFTdHJlYW1NYWMubW06
CisgICAgICAgIChXZWJDb3JlOjpjbG9zZUN1cnJlbnRTdHJlYW0pOgorICAgICAgICAoV2ViQ29y
ZTo6YWR2YW5jZUN1cnJlbnRTdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6Zm9ybUNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpmb3JtUmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpzZXRIVFRQ
Qm9keSk6CisgICAgICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlhNTEh0dHBSZXF1ZXN0OjpzZW5kKToKKwogMjAxMC0wNS0yMCAgQWRhbSBSb2JlbiAgPGFy
b2JlbkBhcHBsZS5jb20+CiAKICAgICAgICAgU3RvcCBsZWFraW5nIGFsbCBDQUNGQ29udGV4dHMK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0gYi9XZWJDb3JlL0dOVW1ha2VmaWxl
LmFtCmluZGV4IDYxYjczNGFmYWVjYWNiNWU3ZGEyNTFmMDMwNmZiNDk3NjgyMGM2NzIuLjhmZjI4
MDFlNmUxOGExODAzODNhNzg2ODY0YzRhNDBhMzQwZWEyYTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
R05VbWFrZWZpbGUuYW0KKysrIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtMTUzMyw2ICsx
NTMzLDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3BsYXRmb3JtL0FyZW5hLmNw
cCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9BcmVuYS5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL0F1dG9k
cmFpbmVkUG9vbC5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL0Jsb2JJdGVtLmNwcCBcCisJV2ViQ29y
ZS9wbGF0Zm9ybS9CbG9iSXRlbS5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL0NvbnRlbnRUeXBlLmNw
cCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9Db250ZW50VHlwZS5oIFwKIAlXZWJDb3JlL3BsYXRmb3Jt
L0NvbnRleHRNZW51LmNwcCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1dl
YkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDFjMjRiMTkyMmFmMTAxYmFlZmZiNzQ2ODliNDA4ZGM3
NDQyMDIzYmUuLjUzNmQzZjk2MmI0MzUwZDVjYmU1NDkzZjBkNjkwZTlmMzhkN2QxMzIgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBA
IC0yODYxLDYgKzI4NjEsOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL0FyZW5hLmNwcCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vQXJlbmEuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vQXV0
b2RyYWluZWRQb29sLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL0Jsb2JJdGVtLmNwcCcsCisg
ICAgICAgICAgICAncGxhdGZvcm0vQmxvYkl0ZW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Q29udGVudFR5cGUuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9Db250ZW50VHlwZS5oJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9Db250ZXh0TWVudS5jcHAnLApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggY2MyZjhmYWJlNzc3
OTEzNjkzOWQ2ZjcxNGM1MzI5NTI3N2FjZjQ2MS4uMzlmM2VhNmU1ZmFjYjYzNmRiNDY2NDhmZmQ4
OTI1M2FjZDdlNGY3YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9XZWJD
b3JlL1dlYkNvcmUucHJvCkBAIC04MDYsNiArODA2LDcgQEAgU09VUkNFUyArPSBcCiAgICAgcGxh
dGZvcm0vYW5pbWF0aW9uL0FuaW1hdGlvbi5jcHAgXAogICAgIHBsYXRmb3JtL2FuaW1hdGlvbi9B
bmltYXRpb25MaXN0LmNwcCBcCiAgICAgcGxhdGZvcm0vQXJlbmEuY3BwIFwKKyAgICBwbGF0Zm9y
bS9CbG9iSXRlbS5jcHAgXAogICAgIHBsYXRmb3JtL3RleHQvQmFzZTY0LmNwcCBcCiAgICAgcGxh
dGZvcm0vdGV4dC9CaWRpQ29udGV4dC5jcHAgXAogICAgIHBsYXRmb3JtL0NvbnRlbnRUeXBlLmNw
cCBcCkBAIC0xNTUxLDYgKzE1NTIsNyBAQCBIRUFERVJTICs9IFwKICAgICBwbGF0Zm9ybS9hbmlt
YXRpb24vQW5pbWF0aW9uLmggXAogICAgIHBsYXRmb3JtL2FuaW1hdGlvbi9BbmltYXRpb25MaXN0
LmggXAogICAgIHBsYXRmb3JtL0FyZW5hLmggXAorICAgIHBsYXRmb3JtL0Jsb2JJdGVtLmggXAog
ICAgIHBsYXRmb3JtL0NvbnRlbnRUeXBlLmggXAogICAgIHBsYXRmb3JtL0NvbnRleHRNZW51Lmgg
XAogICAgIHBsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmggXApkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2oKaW5kZXggZjZiNDgwMWM3MjMyZjEwYmJmMGVkNGNiNmVlM2U5MGZjNjcz
MDFmZC4uNjU5Y2MyNDkxYTgzZmQyOWEzY2E5N2Y1NzZlZDViNTU4MzI5NDUyZCAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9XZWJDb3JlL1dl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC0yMjE5Myw2ICsyMjE5MywxNCBAQAogCQkJ
CT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9y
bVxCbG9iSXRlbS5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVs
YXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxCbG9iSXRlbS5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0K
KwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cQ29udGVudFR5cGUuY3Bw
Ig0KIAkJCQk+DQogCQkJPC9GaWxlPg0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKaW5kZXggNzcwMTU1N2I1MDdjODI0ZTBlZjg4NDIyMTlmYmNlZGFlYTdmZmE5Zi4u
MzIzYTRkODQ0N2RlMmQ5YjFmYzM0YzEyNmRhMjZlNmFjYThhMTA3YiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTIyNzMsNiArMjI3Myw4IEBACiAJCTg5
NTI1M0REMTE2QzRFRjUwMENBQkYwMCAvKiBGaWxlU3RyZWFtUHJveHkuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg5NTI1M0RCMTE2QzRFRjUwMENBQkYw
MCAvKiBGaWxlU3RyZWFtUHJveHkuaCAqLzsgfTsKIAkJODk1MjUzREYxMTZDNEYwNjAwQ0FCRjAw
IC8qIEZpbGVUaHJlYWRUYXNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA4OTUyNTNERTExNkM0RjA2MDBDQUJGMDAgLyogRmlsZVRocmVhZFRhc2suaCAq
LzsgfTsKIAkJOEZBQzc3NEQxMTk4NzJDQjAwMTVBRTk0IC8qIEpTTWFpblRocmVhZEV4ZWNTdGF0
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4Rjkz
NEQ4NDExODlGMUVFMDA1MDhENUQgLyogSlNNYWluVGhyZWFkRXhlY1N0YXRlLmNwcCAqLzsgfTsK
KwkJODk4OEUxMEUxMUEzNTA4QjAwREI3MzJFIC8qIEJsb2JJdGVtLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg5ODhFMTBDMTFBMzUwOEIwMERCNzMy
RSAvKiBCbG9iSXRlbS5jcHAgKi87IH07CisJCTg5ODhFMTBGMTFBMzUwOEIwMERCNzMyRSAvKiBC
bG9iSXRlbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
ODk4OEUxMEQxMUEzNTA4QjAwREI3MzJFIC8qIEJsb2JJdGVtLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTMwMkIwQkQwRDc5RjgyOTAwQzdFRTgz
IC8qIFBhZ2VHcm91cC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5MzAyQjBCQzBENzlGODI5MDBDN0VFODMgLyogUGFnZUdyb3VwLmNwcCAqLzsgfTsK
IAkJOTMwMkIwQkYwRDc5RjgyQzAwQzdFRTgzIC8qIFBhZ2VHcm91cC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMwMkIwQkUwRDc5RjgyQzAwQzdFRTgz
IC8qIFBhZ2VHcm91cC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTkzMDVCMjREMDk4RjFCNkIwMEMyODg1NSAvKiBUaW1lci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMwNUIyNEMwOThGMUI2QjAwQzI4
ODU1IC8qIFRpbWVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTc4NDksNiArNzg1MSw4IEBACiAJCTg5NTI1M0RFMTE2QzRGMDYwMENBQkYwMCAv
KiBGaWxlVGhyZWFkVGFzay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWxl
VGhyZWFkVGFzay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4RjkzNEQ4MzExODlG
MUVFMDA1MDhENUQgLyogSlNNYWluVGhyZWFkRXhlY1N0YXRlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTTWFpblRocmVhZEV4ZWNTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk4RjkzNEQ4NDExODlGMUVFMDA1MDhENUQgLyogSlNNYWluVGhyZWFkRXhl
Y1N0YXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTWFpblRo
cmVhZEV4ZWNTdGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg5ODhFMTBD
MTFBMzUwOEIwMERCNzMyRSAvKiBCbG9iSXRlbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBCbG9iSXRlbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTg5ODhFMTBEMTFBMzUwOEIwMERCNzMyRSAvKiBCbG9iSXRlbS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBCbG9iSXRlbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5MzAyQjBCQzBENzlGODI5MDBDN0VFODMgLyogUGFnZUdyb3VwLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhZ2VHcm91cC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTkzMDJCMEJFMEQ3OUY4MkMwMEM3RUU4MyAvKiBQYWdlR3JvdXAuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFnZUdyb3VwLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTkzMDVCMjRDMDk4RjFCNkIwMEMyODg1NSAvKiBUaW1lci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaW1lci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTU3NTEsNiArMTU3NTUsOCBAQAogCQkJCUJDRkIyRjc0MDk3QTJFMUEwMEJB
NzAzRCAvKiBBcmVuYS5jcHAgKi8sCiAJCQkJQkNGQjJGNzUwOTdBMkUxQTAwQkE3MDNEIC8qIEFy
ZW5hLmggKi8sCiAJCQkJNTFFMUVDQjEwQzkxQzU1NjAwREMyNTVCIC8qIEF1dG9kcmFpbmVkUG9v
bC5oICovLAorCQkJCTg5ODhFMTBDMTFBMzUwOEIwMERCNzMyRSAvKiBCbG9iSXRlbS5jcHAgKi8s
CisJCQkJODk4OEUxMEQxMUEzNTA4QjAwREI3MzJFIC8qIEJsb2JJdGVtLmggKi8sCiAJCQkJQkND
OENGQ0EwOTg2Q0QyNDAwMTQwQkYyIC8qIENvbG9yRGF0YS5ncGVyZiAqLywKIAkJCQk0MUQwMTVD
OTBGNEI1QzcxMDA0QTY2MkYgLyogQ29udGVudFR5cGUuY3BwICovLAogCQkJCTQxRDAxNUM4MEY0
QjVDNzEwMDRBNjYyRiAvKiBDb250ZW50VHlwZS5oICovLApAQCAtMTY3ODIsNiArMTY3ODgsNyBA
QAogCQkJCUJDNUVCOTIwMEU4MjA0MDgwMEIyNTk2NSAvKiBCaW5kaW5nVVJJLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBODk5NDMyODBCNDIzMzg4MDBEN0M4MDIgLyogQml0bWFwSW1hZ2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTJFQUZBRjBGMTBFMkFGMkQwMDdFRDNENiAvKiBCbG9iLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk4OTg4RTEwRjExQTM1MDhCMDBEQjczMkUgLyogQmxvYkl0ZW0uaCBpbiBI
ZWFkZXJzICovLAogCQkJCTkzRjE5OUJFMDgyNDVFNTkwMDFFOUFCQyAvKiBCbG9ja0V4Y2VwdGlv
bnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNUVCNUUxMEU4MUJFODcwMEIyNTk2NSAvKiBCb3Jk
ZXJEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzVFQjVEQjBFODFCN0VBMDBCMjU5NjUgLyog
Qm9yZGVyVmFsdWUuaCBpbiBIZWFkZXJzICovLApAQCAtMTk1OTcsNiArMTk2MDQsNyBAQAogCQkJ
CUJDNUVCOTFGMEU4MjA0MDgwMEIyNTk2NSAvKiBCaW5kaW5nVVJJLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUE4OTk0MzI5MEI0MjMzODgwMEQ3QzgwMiAvKiBCaXRtYXBJbWFnZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkyRUFGQUYwRTEwRTJBRjJEMDA3RUQzRDYgLyogQmxvYi5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQk4OTg4RTEwRTExQTM1MDhCMDBEQjczMkUgLyogQmxvYkl0ZW0uY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJOTNGMTlBRTEwODI0NUU1OTAwMUU5QUJDIC8qIEJsb2NrRXhjZXB0
aW9ucy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDRUE0ODU0MDk3RDkzMDIwMDk0QzlFNCAvKiBi
cmVha19saW5lcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzMwOUREQTA5OUU2NDkyMDA1NkU1
ODEgLyogQnJlYWtCbG9ja3F1b3RlQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTIwMzQ1
LDggKzIwMzUzLDggQEAKIAkJCQk1MUVDOTI2NTBDRTkwREQ0MDBGOTAzMDggLyogSlNDdXN0b21T
UUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBMzQxN0NB
MENFQ0ZGMjUwMDQ5Q0JERSAvKiBKU0N1c3RvbVZvaWRDYWxsYmFjay5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlFMTBCOTNDMzBCNzNDMjkxMDAzRUQ4OTAgLyogSlNDdXN0b21YUGF0aE5TUmVzb2x2
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMUFFODJGOEYwQ0FBRkE5RDAwMjIzN0FFIC8qIEpT
RGF0YWJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNDRTU4QUMxMDYxRThDRjAwOEZCMzVB
IC8qIEpTRGF0YWJhc2VDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUFFODJGOEYwQ0FB
RkE5RDAwMjIzN0FFIC8qIEpTRGF0YWJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM3N0Qx
NjkwRkYxOUY1NjAwNzA4ODdCIC8qIEpTRGF0YUdyaWRDb2x1bW4uY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQkM3N0QxNkIwRkYxOUY1NjAwNzA4ODdCIC8qIEpTRGF0YUdyaWRDb2x1bW5MaXN0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUJDNzdEMTUyMEZGMTlDNzMwMDcwODg3QiAvKiBKU0RhdGFH
cmlkQ29sdW1uTGlzdEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvaHRtbC9CbG9iLmNwcCBiL1dlYkNvcmUvaHRtbC9CbG9iLmNwcAppbmRleCA4M2JiZGMwYzUy
NjQ4NDU0MjY4ODE5MjYyMTY4NGI2MjgyMDI0YmY0Li5iMWYyZGY3YTAzMWJkNDQ2ZjRjZDBjZjk5
NmJjMzlmMWM4ZjQ5ODQzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvQmxvYi5jcHAKKysrIGIv
V2ViQ29yZS9odG1sL0Jsb2IuY3BwCkBAIC0yOSw5MCArMjksNjggQEAKICAqLwogCiAjaW5jbHVk
ZSAiY29uZmlnLmgiCisKICNpbmNsdWRlICJCbG9iLmgiCiAKKyNpbmNsdWRlICJCbG9iSXRlbS5o
IgogI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0jaWYg
RU5BQkxFKEJMT0JfU0xJQ0UpCi1jb25zdCBpbnQgQmxvYjo6dG9FbmRPZkZpbGUgPSAtMTsKLWNv
bnN0IGRvdWJsZSBCbG9iOjpkb05vdENoZWNrRmlsZUNoYW5nZSA9IDA7Ci0jZW5kaWYKLQogQmxv
Yjo6QmxvYihjb25zdCBTdHJpbmcmIHBhdGgpCi0gICAgOiBtX3BhdGgocGF0aCkKLSNpZiBFTkFC
TEUoQkxPQl9TTElDRSkKLSAgICAsIG1fc3RhcnQoMCkKLSAgICAsIG1fbGVuZ3RoKHRvRW5kT2ZG
aWxlKQotICAgICwgbV9zbmFwc2hvdENhcHR1cmVkKGZhbHNlKQotICAgICwgbV9zbmFwc2hvdFNp
emUoMCkKLSAgICAsIG1fc25hcHNob3RNb2RpZmljYXRpb25UaW1lKGRvTm90Q2hlY2tGaWxlQ2hh
bmdlKQotI2VuZGlmCiB7CisgICAgLy8gTm90ZTogdGhpcyBkb2Vzbid0IGluaXRpYWxpemUgdGhl
IHR5cGUgdW5saWtlIEZpbGUocGF0aCkuCisgICAgYXBwZW5kKEZpbGVCbG9iSXRlbTo6Y3JlYXRl
KHBhdGgpKTsKIH0KIAotI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotQmxvYjo6QmxvYihjb25zdCBT
dHJpbmcmIHBhdGgsIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCwgbG9uZyBsb25n
IHNuYXBzaG90U2l6ZSwgZG91YmxlIHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSkKLSAgICA6IG1f
cGF0aChwYXRoKQotICAgICwgbV9zdGFydChzdGFydCkKLSAgICAsIG1fbGVuZ3RoKGxlbmd0aCkK
LSAgICAsIG1fc25hcHNob3RDYXB0dXJlZCh0cnVlKQotICAgICwgbV9zbmFwc2hvdFNpemUoc25h
cHNob3RTaXplKQotICAgICwgbV9zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUoc25hcHNob3RNb2Rp
ZmljYXRpb25UaW1lKQotewotICAgIEFTU0VSVChzdGFydCA+PSAwICYmIGxlbmd0aCA+PSAwICYm
IHN0YXJ0ICsgbGVuZ3RoIDw9IHNuYXBzaG90U2l6ZSAmJiBzbmFwc2hvdE1vZGlmaWNhdGlvblRp
bWUpOwotfQotI2VuZGlmCi0KIHVuc2lnbmVkIGxvbmcgbG9uZyBCbG9iOjpzaXplKCkgY29uc3QK
IHsKICAgICAvLyBGSVhNRTogSmF2YVNjcmlwdCBjYW5ub3QgcmVwcmVzZW50IHNpemVzIGFzIGxh
cmdlIGFzIHVuc2lnbmVkIGxvbmcgbG9uZywgd2UgbmVlZCB0bwogICAgIC8vIGNvbWUgdXAgd2l0
aCBhbiBleGNlcHRpb24gdG8gdGhyb3cgaWYgZmlsZSBzaXplIGlzIG5vdCByZXByZXNldGFibGUu
Ci0jaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgaWYgKG1fc25hcHNob3RDYXB0dXJlZCkKLSAg
ICAgICAgcmV0dXJuIG1fbGVuZ3RoOwotI2VuZGlmCi0gICAgbG9uZyBsb25nIHNpemU7Ci0gICAg
aWYgKCFnZXRGaWxlU2l6ZShtX3BhdGgsIHNpemUpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihzaXplKTsKKyAgICB1bnNpZ25l
ZCBsb25nIGxvbmcgc2l6ZSA9IDA7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2l0ZW1z
LnNpemUoKTsgKytpKQorICAgICAgICBzaXplICs9IG1faXRlbXNbaV0tPnNpemUoKTsKKyAgICBy
ZXR1cm4gc2l6ZTsKK30KKworY29uc3QgU3RyaW5nJiBCbG9iOjpwYXRoKCkgY29uc3QKK3sKKyAg
ICBBU1NFUlQobV9pdGVtcy5zaXplKCkgPT0gMSAmJiBtX2l0ZW1zWzBdLT50b0ZpbGVCbG9iSXRl
bSgpKTsKKyAgICByZXR1cm4gbV9pdGVtc1swXS0+dG9GaWxlQmxvYkl0ZW0oKS0+cGF0aCgpOwor
fQorCit2b2lkIEJsb2I6OmFwcGVuZChQYXNzUmVmUHRyPEJsb2JJdGVtPiBpdGVtKQoreworICAg
IG1faXRlbXMuYXBwZW5kKGl0ZW0pOwogfQogCiAjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCiBQYXNz
UmVmUHRyPEJsb2I+IEJsb2I6OnNsaWNlKGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0
aCkgY29uc3QKIHsKLSAgICAvLyBXaGVuIHdlIHNsaWNlIGEgZmlsZSBmb3IgdGhlIGZpcnN0IHRp
bWUsIHdlIG9idGFpbiBhIHNuYXBzaG90IG9mIHRoZSBmaWxlIGJ5IGNhcHR1cmluZyBpdHMgY3Vy
cmVudCBzaXplIGFuZCBtb2RpZmljYXRpb24gdGltZS4KLSAgICAvLyBUaGUgbW9kaWZpY2F0aW9u
IHRpbWUgd2lsbCBiZSB1c2VkIHRvIHZlcmlmeSBpZiB0aGUgZmlsZSBoYXMgYmVlbiBjaGFuZ2Vk
IG9yIG5vdCwgd2hlbiB0aGUgdW5kZXJseWluZyBkYXRhIGFyZSBhY2Nlc3NlZC4KLSAgICBsb25n
IGxvbmcgc25hcHNob3RTaXplOwotICAgIGRvdWJsZSBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWU7
Ci0gICAgaWYgKG1fc25hcHNob3RDYXB0dXJlZCkgewotICAgICAgICBzbmFwc2hvdFNpemUgPSBt
X3NuYXBzaG90U2l6ZTsKLSAgICAgICAgc25hcHNob3RNb2RpZmljYXRpb25UaW1lID0gbV9zbmFw
c2hvdE1vZGlmaWNhdGlvblRpbWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gSWYgd2UgZmFp
bCB0byByZXRyaWV2ZSB0aGUgc2l6ZSBvciBtb2RpZmljYXRpb24gdGltZSwgcHJvYmFibHkgZHVl
IHRvIHRoYXQgdGhlIGZpbGUgaGFzIGJlZW4gZGVsZXRlZCwgYW4gZW1wdHkgYmxvYiB3aWxsIGJl
IHJldHVybmVkLgotICAgICAgICB0aW1lX3QgbW9kaWZpY2F0aW9uVGltZTsKLSAgICAgICAgaWYg
KCFnZXRGaWxlU2l6ZShtX3BhdGgsIHNuYXBzaG90U2l6ZSkgfHwgIWdldEZpbGVNb2RpZmljYXRp
b25UaW1lKG1fcGF0aCwgbW9kaWZpY2F0aW9uVGltZSkpIHsKLSAgICAgICAgICAgIHNuYXBzaG90
U2l6ZSA9IDA7Ci0gICAgICAgICAgICBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUgPSAwOwotICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgIHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSA9IG1vZGlm
aWNhdGlvblRpbWU7Ci0gICAgfQotCi0gICAgLy8gQ2xhbXAgdGhlIHJhbmdlIGlmIGl0IGV4Y2Vl
ZHMgdGhlIHNpemUgbGltaXQuCiAgICAgaWYgKHN0YXJ0IDwgMCkKICAgICAgICAgc3RhcnQgPSAw
OwogICAgIGlmIChsZW5ndGggPCAwKQogICAgICAgICBsZW5ndGggPSAwOwogCi0gICAgaWYgKHN0
YXJ0ID4gc25hcHNob3RTaXplKSB7CisgICAgLy8gQ2xhbXAgdGhlIHJhbmdlIGlmIGl0IGV4Y2Vl
ZHMgdGhlIHNpemUgbGltaXQuCisgICAgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsU2l6ZSA9IHNp
emUoKTsKKyAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihzdGFydCkgPiB0
b3RhbFNpemUpIHsKICAgICAgICAgc3RhcnQgPSAwOwogICAgICAgICBsZW5ndGggPSAwOwotICAg
IH0gZWxzZSBpZiAoc3RhcnQgKyBsZW5ndGggPiBzbmFwc2hvdFNpemUpCi0gICAgICAgIGxlbmd0
aCA9IHNuYXBzaG90U2l6ZSAtIHN0YXJ0OworICAgIH0gZWxzZSBpZiAoc3RhdGljX2Nhc3Q8dW5z
aWduZWQgbG9uZyBsb25nPihzdGFydCArIGxlbmd0aCkgPiB0b3RhbFNpemUpCisgICAgICAgIGxl
bmd0aCA9IHRvdGFsU2l6ZSAtIHN0YXJ0OwogCi0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBCbG9i
KG1fcGF0aCwgbV9zdGFydCArIHN0YXJ0LCBsZW5ndGgsIHNuYXBzaG90U2l6ZSwgc25hcHNob3RN
b2RpZmljYXRpb25UaW1lKSk7CisgICAgc2l6ZV90IGkgPSAwOworICAgIFJlZlB0cjxCbG9iPiBi
bG9iID0gQmxvYjo6Y3JlYXRlKCk7CisgICAgZm9yICg7IGkgPCBtX2l0ZW1zLnNpemUoKSAmJiBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KHN0YXJ0KSA+PSBtX2l0ZW1zW2ldLT5zaXpl
KCk7ICsraSkKKyAgICAgICAgc3RhcnQgLT0gbV9pdGVtc1tpXS0+c2l6ZSgpOworICAgIGZvciAo
OyBsZW5ndGggPiAwICYmIGkgPCBtX2l0ZW1zLnNpemUoKTsgKytpKSB7CisgICAgICAgIGJsb2It
Pm1faXRlbXMuYXBwZW5kKG1faXRlbXNbaV0tPnNsaWNlKHN0YXJ0LCBsZW5ndGgpKTsKKyAgICAg
ICAgbGVuZ3RoIC09IGJsb2ItPm1faXRlbXMubGFzdCgpLT5zaXplKCk7CisgICAgICAgIHN0YXJ0
ID0gMDsKKyAgICB9CisgICAgcmV0dXJuIGJsb2IucmVsZWFzZSgpOwogfQotI2VuZGlmCisjZW5k
aWYgLy8gRU5BQkxFKEJMT0JfU0xJQ0UpCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvaHRtbC9CbG9iLmggYi9XZWJDb3JlL2h0bWwvQmxvYi5oCmluZGV4IGU4
YjVmM2ZkZjA2OWEyYjQ4NzZlZDE2YWI4MWIyMmYwZmYwMzg5NzAuLjMxYzEyNDIwMzM5Yjg0Nzdi
ODQ0YWM1ZTBjYWNkNGExOWU0OGQ0MmIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9CbG9iLmgK
KysrIGIvV2ViQ29yZS9odG1sL0Jsb2IuaApAQCAtMzEsMjEgKzMxLDI1IEBACiAjaWZuZGVmIEJs
b2JfaAogI2RlZmluZSBCbG9iX2gKIAotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNs
dWRlICJCbG9iSXRlbS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSA8
dGltZS5oPgorI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQmxvYiA6IHB1YmxpYyBSZWZDb3Vu
dGVkPEJsb2I+IHsKIHB1YmxpYzoKLSNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAgICBzdGF0aWMg
Y29uc3QgaW50IHRvRW5kT2ZGaWxlOwotICAgIHN0YXRpYyBjb25zdCBkb3VibGUgZG9Ob3RDaGVj
a0ZpbGVDaGFuZ2U7Ci0jZW5kaWYKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCbG9iPiBjcmVhdGUo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBCbG9iKCkpOworICAgIH0KIAor
ICAgIC8vIEZJWE1FOiBkZXByZWNhdGVkIG1ldGhvZC4gIFRoaXMgaXMgY2FsbGVkIG9ubHkgZnJv
bQorICAgIC8vIGJpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgYW5kIHRoZSB1
c2FnZSBpbiBpdCB3aWxsIGJlY29tZSBpbnZhbGlkIG9uY2UKKyAgICAvLyBCbG9iQnVpbGRlciBp
cyBpbnRyb2R1Y2VkLgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJsb2I+IGNyZWF0ZShjb25zdCBT
dHJpbmcmIHBhdGgpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJsb2IocGF0
aCkpOwpAQCAtNTMsNDcgKzU3LDI4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgfkJsb2IoKSB7
IH0KIAorICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplKCkgY29uc3Q7CisgICAgY29uc3QgU3Ry
aW5nJiB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CiAgICAgdmlydHVhbCBib29sIGlz
RmlsZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKLSNpZiBFTkFCTEUoQkxPQl9TTElDRSkK
LSAgICBQYXNzUmVmUHRyPEJsb2I+IHNsaWNlKGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxl
bmd0aCkgY29uc3Q7Ci0jZW5kaWYKLQotICAgIGNvbnN0IFN0cmluZyYgcGF0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fcGF0aDsgfQotICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplKCkgY29uc3Q7Ci0j
aWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgbG9uZyBsb25nIHN0YXJ0KCkgY29uc3QgeyByZXR1
cm4gbV9zdGFydDsgfQotICAgIGxvbmcgbG9uZyBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xl
bmd0aDsgfQotICAgIGRvdWJsZSBtb2RpZmljYXRpb25UaW1lKCkgY29uc3QgeyByZXR1cm4gbV9z
bmFwc2hvdE1vZGlmaWNhdGlvblRpbWU7IH0KLSNlbmRpZgorICAgIC8vIEZJWE1FOiBkZXByZWNh
dGVkIG1ldGhvZC4KKyAgICBjb25zdCBTdHJpbmcmIHBhdGgoKSBjb25zdDsKIAotcHJvdGVjdGVk
OgotICAgIEJsb2IoY29uc3QgU3RyaW5nJiBwYXRoKTsKKyAgICB2b2lkIGFwcGVuZChQYXNzUmVm
UHRyPEJsb2JJdGVtPik7CisgICAgY29uc3QgQmxvYkl0ZW1MaXN0JiBpdGVtcygpIGNvbnN0IHsg
cmV0dXJuIG1faXRlbXM7IH0KIAotcHJpdmF0ZToKICNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAg
ICBCbG9iKGNvbnN0IFN0cmluZyYgcGF0aCwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVu
Z3RoLCBsb25nIGxvbmcgc25hcHNob3RTaXplLCBkb3VibGUgc25hcHNob3RNb2RpZmljYXRpb25U
aW1lKTsKKyAgICBQYXNzUmVmUHRyPEJsb2I+IHNsaWNlKGxvbmcgbG9uZyBzdGFydCwgbG9uZyBs
b25nIGxlbmd0aCkgY29uc3Q7CiAjZW5kaWYKIAotICAgIC8vIFRoZSB1bmRlcmx5aW5nIHBhdGgg
b2YgdGhlIGZpbGUtYmFzZWQgYmxvYi4gCi0gICAgU3RyaW5nIG1fcGF0aDsKLQotI2lmIEVOQUJM
RShCTE9CX1NMSUNFKQotICAgIC8vIFRoZSBzdGFydGluZyBwb3NpdGlvbiBvZiB0aGUgZmlsZS1i
YXNlZCBibG9iLgotICAgIGxvbmcgbG9uZyBtX3N0YXJ0OwotCi0gICAgLy8gVGhlIGxlbmd0aCBv
ZiB0aGUgZmlsZS1iYXNlZCBibG9iLiBUaGUgdmFsdWUgb2YgLTEgbWVhbnMgdG8gdGhlIGVuZCBv
ZiB0aGUgZmlsZS4KLSAgICBsb25nIGxvbmcgbV9sZW5ndGg7Ci0KLSAgICAvLyBBIGZsYWcgdG8g
dGVsbCBpZiBhIHNuYXBzaG90IGhhcyBiZWVuIGNhcHR1cmVkLgotICAgIGJvb2wgbV9zbmFwc2hv
dENhcHR1cmVkOworcHJvdGVjdGVkOgorICAgIEJsb2IoKSB7IH0KIAotICAgIC8vIFRoZSBzaXpl
IG9mIHRoZSBmaWxlIHdoZW4gYSBzbmFwc2hvdCBpcyBjYXB0dXJlZC4gSXQgY2FuIGJlIDAgaWYg
dGhlIGZpbGUgaXMgZW1wdHkuCi0gICAgbG9uZyBsb25nIG1fc25hcHNob3RTaXplOworICAgIC8v
IEZJWE1FOiBkZXByZWNhdGVkIGNvbnN0cnVjdG9yLiAgU2VlIGFsc28gdGhlIGNvbW1lbnQgZm9y
IEJsb2I6OmNyZWF0ZShwYXRoKS4KKyAgICBCbG9iKGNvbnN0IFN0cmluZyYgcGF0aCk7CiAKLSAg
ICAvLyBUaGUgbGFzdCBtb2RpZmljYXRpb24gdGltZSBvZiB0aGUgZmlsZSB3aGVuIGEgc25hcHNo
b3QgaXMgY2FwdHVyZWQuIFRoZSB2YWx1ZSBvZiAwIGFsc28gbWVhbnMgdGhhdCB0aGUgc25hcHNo
b3QgaXMgbm90IGNhcHR1cmVkLgotICAgIGRvdWJsZSBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGlt
ZTsKLSNlbmRpZgorICAgIEJsb2JJdGVtTGlzdCBtX2l0ZW1zOworICAgIFN0cmluZyBtX3R5cGU7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwv
RmlsZS5jcHAgYi9XZWJDb3JlL2h0bWwvRmlsZS5jcHAKaW5kZXggOTdmZGM0NTc4ZDc0YjIyNWU1
OTQ2ZjRkNmFlZjI1NjUyNTQ0M2FlNC4uMTgwY2ExN2Y4ZDdhMzRmNTgzOWY1OWU5YjBlMmEzY2Mx
OThjNTVmNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0ZpbGUuY3BwCisrKyBiL1dlYkNvcmUv
aHRtbC9GaWxlLmNwcApAQCAtMzMsMTIgKzMzLDE2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
RmlsZTo6RmlsZShjb25zdCBTdHJpbmcmIHBhdGgpCiAgICAgOiBCbG9iKHBhdGgpCi0gICAgLCBt
X25hbWUocGF0aEdldEZpbGVOYW1lKHBhdGgpKQogewogICAgIC8vIFdlIGRvbid0IHVzZSBNSU1F
VHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZvclBhdGgoKSBiZWNhdXNlIGl0IHJldHVybnMgImFw
cGxpY2F0aW9uL29jdGV0LXN0cmVhbSIgdXBvbiBmYWlsdXJlLgotICAgIGludCBpbmRleCA9IG1f
bmFtZS5yZXZlcnNlRmluZCgnLicpOworICAgIGludCBpbmRleCA9IG5hbWUoKS5yZXZlcnNlRmlu
ZCgnLicpOwogICAgIGlmIChpbmRleCAhPSAtMSkKLSAgICAgICAgbV90eXBlID0gTUlNRVR5cGVS
ZWdpc3RyeTo6Z2V0TUlNRVR5cGVGb3JFeHRlbnNpb24obV9uYW1lLnN1YnN0cmluZyhpbmRleCAr
IDEpKTsKKyAgICAgICAgbV90eXBlID0gTUlNRVR5cGVSZWdpc3RyeTo6Z2V0TUlNRVR5cGVGb3JF
eHRlbnNpb24obmFtZSgpLnN1YnN0cmluZyhpbmRleCArIDEpKTsKK30KKworY29uc3QgU3RyaW5n
JiBGaWxlOjpuYW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaXRlbXMoKS5hdCgwKS0+dG9GaWxl
QmxvYkl0ZW0oKS0+bmFtZSgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2h0bWwvRmlsZS5oIGIvV2ViQ29yZS9odG1sL0ZpbGUuaAppbmRleCAwNjVk
ZDg2YTdiMWViZjc3ZmI0MDY0NmY5YzZlODcwNDY5ZDdlYjA5Li41ODJkYjI4NTAzYmZmZjJiOTU4
ZTNkNTI1NWVmN2FiZTlhNjA1NjlhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvRmlsZS5oCisr
KyBiL1dlYkNvcmUvaHRtbC9GaWxlLmgKQEAgLTQxLDE4ICs0MSwxNCBAQCBwdWJsaWM6CiAKICAg
ICB2aXJ0dWFsIGJvb2wgaXNGaWxlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgY29u
c3QgU3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9Ci0gICAgY29uc3QgU3Ry
aW5nJiB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisgICAgY29uc3QgU3RyaW5nJiBu
YW1lKCkgY29uc3Q7CiAKICAgICAvLyBGSVhNRTogb2Jzb2xldGUgYXR0cmlidXRlcy4gVG8gYmUg
cmVtb3ZlZC4KLSAgICBjb25zdCBTdHJpbmcmIGZpbGVOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9u
YW1lOyB9CisgICAgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG5hbWUo
KTsgfQogICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBmaWxlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNp
emUoKTsgfQogCiBwcml2YXRlOgogICAgIEZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKTsKLQotICAg
IFN0cmluZyBtX25hbWU7Ci0gICAgU3RyaW5nIG1fdHlwZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9GaWxlUmVhZGVyLmNwcCBiL1dlYkNv
cmUvaHRtbC9GaWxlUmVhZGVyLmNwcAppbmRleCAzNDQyMzQyMjc1ODEyN2JlZDc3Mzg3MmM0ZmYz
MWZhMDFkZmFjNGU0Li4yZTAyMGMxMTM1MDVjY2I2ZjQ0M2E4ZDI1NmIwZTlhMWJhYjA4MDM0IDEw
MDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvRmlsZVJlYWRlci5jcHAKKysrIGIvV2ViQ29yZS9odG1s
L0ZpbGVSZWFkZXIuY3BwCkBAIC04NSw2ICs4NSw3IEBAIHZvaWQgRmlsZVJlYWRlcjo6c3RvcCgp
CiAKIHZvaWQgRmlsZVJlYWRlcjo6cmVhZEFzQmluYXJ5U3RyaW5nKEJsb2IqIGZpbGVCbG9iKQog
eworICAgIC8vIEZJWE1FOiBuZWVkcyB0byBoYW5kbGUgbm9uLWZpbGUgYmxvYnMuCiAgICAgTE9H
KEZpbGVBUEksICJGaWxlUmVhZGVyOiByZWFkaW5nIGFzIGJpbmFyeTogJXNcbiIsIGZpbGVCbG9i
LT5wYXRoKCkudXRmOCgpLmRhdGEoKSk7CiAKICAgICByZWFkSW50ZXJuYWwoZmlsZUJsb2IsIFJl
YWRGaWxlQXNCaW5hcnlTdHJpbmcpOwpAQCAtOTIsNiArOTMsNyBAQCB2b2lkIEZpbGVSZWFkZXI6
OnJlYWRBc0JpbmFyeVN0cmluZyhCbG9iKiBmaWxlQmxvYikKIAogdm9pZCBGaWxlUmVhZGVyOjpy
ZWFkQXNUZXh0KEJsb2IqIGZpbGVCbG9iLCBjb25zdCBTdHJpbmcmIGVuY29kaW5nKQogeworICAg
IC8vIEZJWE1FOiBuZWVkcyB0byBoYW5kbGUgbm9uLWZpbGUgYmxvYnMuCiAgICAgTE9HKEZpbGVB
UEksICJGaWxlUmVhZGVyOiByZWFkaW5nIGFzIHRleHQ6ICVzXG4iLCBmaWxlQmxvYi0+cGF0aCgp
LnV0ZjgoKS5kYXRhKCkpOwogCiAgICAgaWYgKCFlbmNvZGluZy5pc0VtcHR5KCkpCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2h0bWwvRmlsZVN0cmVhbS5jcHAgYi9XZWJDb3JlL2h0bWwvRmlsZVN0cmVh
bS5jcHAKaW5kZXggNzA4OWY2MTYxNTRlNGIxMGEzMjc3M2UwMzM1NmE3OTM2NDU4Zjk3Zi4uMjVj
NTYzZDVjNTE4NjJiNmRkZTMzZjJlYWRjMjRlYTNhMjY0YWM5NCAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9odG1sL0ZpbGVTdHJlYW0uY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9GaWxlU3RyZWFtLmNwcApA
QCAtNzIsNDggKzcyLDQ5IEBAIHZvaWQgRmlsZVN0cmVhbTo6b3BlbkZvclJlYWQoQmxvYiogYmxv
YikKICAgICBpZiAoaXNIYW5kbGVWYWxpZChtX2hhbmRsZSkpCiAgICAgICAgIHJldHVybjsKIAor
ICAgIC8vIEZJWE1FOiBuZWVkIHRvIGhhbmRsZSBtdWx0aXBsZSBpdGVtcyB0aGF0IG1heSBpbmNs
dWRlIG5vbi1maWxlIG9uZXMKKyAgICAvLyB3aGVuIEJsb2JCdWlsZGVyIGlzIGludHJvZHVjZWQu
CisgICAgQVNTRVJUKGJsb2ItPml0ZW1zKCkuc2l6ZSgpID09IDEgJiYgYmxvYi0+aXRlbXMoKS5h
dCgwKS0+dG9GaWxlQmxvYkl0ZW0oKSk7CisgICAgY29uc3QgRmlsZUJsb2JJdGVtKiBmaWxlID0g
YmxvYi0+aXRlbXMoKS5hdCgwKS0+dG9GaWxlQmxvYkl0ZW0oKTsKKwogICAgIC8vIENoZWNrIGlm
IHRoZSBmaWxlIGV4aXN0cyBieSBxdWVyeWluZyBpdHMgbW9kaWZpY2F0aW9uIHRpbWUuIFdlIGNo
b29zZSBub3QgdG8gY2FsbCBmaWxlRXhpc3RzKCkgaW4gb3JkZXIgdG8gc2F2ZSBhbgogICAgIC8v
IGV4dHJhIGZpbGUgc3lzdGVtIGNhbGwgd2hlbiB0aGUgbW9kaWZpY2F0aW9uIHRpbWUgaXMgbmVl
ZGVkIHRvIGNoZWNrIHRoZSB2YWxpZGl0eSBvZiB0aGUgc2xpY2VkIGZpbGUgYmxvYi4KICAgICAv
LyBQZXIgdGhlIHNwZWMsIHdlIG5lZWQgdG8gcmV0dXJuIGRpZmZlcmVudCBlcnJvciBjb2RlcyB0
byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gbm9uLWV4aXN0ZW50IGZpbGUgYW5kIHBlcm1pc3Npb24g
ZXJyb3IuCiAgICAgLy8gb3BlbkZpbGUoKSBjb3VsZCBub3QgdGVsbCB1c2UgdGhlIGZhaWx1cmUg
cmVhc29uLgogICAgIHRpbWVfdCBjdXJyZW50TW9kaWZpY2F0aW9uVGltZTsKLSAgICBpZiAoIWdl
dEZpbGVNb2RpZmljYXRpb25UaW1lKGJsb2ItPnBhdGgoKSwgY3VycmVudE1vZGlmaWNhdGlvblRp
bWUpKSB7CisgICAgaWYgKCFnZXRGaWxlTW9kaWZpY2F0aW9uVGltZShmaWxlLT5wYXRoKCksIGN1
cnJlbnRNb2RpZmljYXRpb25UaW1lKSkgewogICAgICAgICBtX2NsaWVudC0+ZGlkRmFpbChOT1Rf
Rk9VTkRfRVJSKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIC8vIE9wZW4gdGhlIGZp
bGUgYmxvYi4KLSAgICBtX2hhbmRsZSA9IG9wZW5GaWxlKGJsb2ItPnBhdGgoKSwgT3BlbkZvclJl
YWQpOworICAgIG1faGFuZGxlID0gb3BlbkZpbGUoZmlsZS0+cGF0aCgpLCBPcGVuRm9yUmVhZCk7
CiAgICAgaWYgKCFpc0hhbmRsZVZhbGlkKG1faGFuZGxlKSkgewogICAgICAgICBtX2NsaWVudC0+
ZGlkRmFpbChOT1RfUkVBREFCTEVfRVJSKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogI2lm
IEVOQUJMRShCTE9CX1NMSUNFKQotICAgIC8vIENoZWNrIHRoZSBtb2RpZmljYXRpb250IHRpbWUg
Zm9yIHRoZSBwb3NzaWJsZSBmaWxlIGNoYW5nZS4KLSAgICBpZiAoYmxvYi0+bW9kaWZpY2F0aW9u
VGltZSgpICE9IEJsb2I6OmRvTm90Q2hlY2tGaWxlQ2hhbmdlICYmIHN0YXRpY19jYXN0PHRpbWVf
dD4oYmxvYi0+bW9kaWZpY2F0aW9uVGltZSgpKSAhPSBjdXJyZW50TW9kaWZpY2F0aW9uVGltZSkg
ewotICAgICAgICBtX2NsaWVudC0+ZGlkRmFpbChOT1RfUkVBREFCTEVfRVJSKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIC8vIEp1bXAgdG8gdGhlIGJlZ2lubmluZyBwb3NpdGlvbiBp
ZiB0aGUgZmlsZSBoYXMgYmVlbiBzbGljZWQuCi0gICAgaWYgKGJsb2ItPnN0YXJ0KCkgPiAwKSB7
Ci0gICAgICAgIGlmICghc2Vla0ZpbGUobV9oYW5kbGUsIGJsb2ItPnN0YXJ0KCksIFNlZWtGcm9t
QmVnaW5uaW5nKSkgeworICAgIGNvbnN0IEZpbGVSYW5nZUJsb2JJdGVtKiByYW5nZSA9IGZpbGUt
PnRvRmlsZVJhbmdlQmxvYkl0ZW0oKTsKKyAgICBpZiAocmFuZ2UpIHsKKyAgICAgICAgLy8gQ2hl
Y2sgdGhlIG1vZGlmaWNhdGlvbnQgdGltZSBmb3IgdGhlIHBvc3NpYmxlIGZpbGUgY2hhbmdlLgor
ICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8dGltZV90PihyYW5nZS0+c25hcHNob3RNb2RpZmljYXRp
b25UaW1lKCkpICE9IGN1cnJlbnRNb2RpZmljYXRpb25UaW1lKSB7CiAgICAgICAgICAgICBtX2Ns
aWVudC0+ZGlkRmFpbChOT1RfUkVBREFCTEVfRVJSKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQorCisgICAgICAgIC8vIEp1bXAgdG8gdGhlIGJlZ2lubmluZyBwb3NpdGlvbiBpZiB0
aGUgZmlsZSBoYXMgYmVlbiBzbGljZWQuCisgICAgICAgIGlmIChyYW5nZS0+c3RhcnQoKSA+IDAp
IHsKKyAgICAgICAgICAgIGlmIChzZWVrRmlsZShtX2hhbmRsZSwgcmFuZ2UtPnN0YXJ0KCksIFNl
ZWtGcm9tQmVnaW5uaW5nKSA8IDApIHsKKyAgICAgICAgICAgICAgICBtX2NsaWVudC0+ZGlkRmFp
bChOT1RfUkVBREFCTEVfRVJSKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KICAgICB9CiAjZW5kaWYKIAogICAgIC8vIEdldCB0aGUgc2l6ZS4KLSNp
ZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAgICBtX3RvdGFsQnl0ZXNUb1JlYWQgPSBibG9iLT5sZW5n
dGgoKTsKLSAgICBpZiAobV90b3RhbEJ5dGVzVG9SZWFkID09IEJsb2I6OnRvRW5kT2ZGaWxlKQot
ICAgICAgICBtX3RvdGFsQnl0ZXNUb1JlYWQgPSBibG9iLT5zaXplKCkgLSBibG9iLT5zdGFydCgp
OwotI2Vsc2UKLSAgICBtX3RvdGFsID0gYmxvYi0+c2l6ZSgpOwotI2VuZGlmCi0KKyAgICBtX3Rv
dGFsQnl0ZXNUb1JlYWQgPSBibG9iLT5zaXplKCk7CiAgICAgbV9jbGllbnQtPmRpZEdldFNpemUo
bV90b3RhbEJ5dGVzVG9SZWFkKTsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0Zvcm1E
YXRhTGlzdC5jcHAgYi9XZWJDb3JlL2h0bWwvRm9ybURhdGFMaXN0LmNwcAppbmRleCAyODFjOWZl
NDE4ZTFjNDgzM2JiODdmODJmNzRmMWNjNGQ3MjJkNTdjLi5kOWZkZTUxYjI4MzJkMTc1MThjZmVl
YWZhYzY4Mjk5MTFmOWNiNjgxIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvRm9ybURhdGFMaXN0
LmNwcAorKysgYi9XZWJDb3JlL2h0bWwvRm9ybURhdGFMaXN0LmNwcApAQCAtMjgsNjQgKzI4LDIy
IEBAIEZvcm1EYXRhTGlzdDo6Rm9ybURhdGFMaXN0KGNvbnN0IFRleHRFbmNvZGluZyYgYykKIHsK
IH0KIAotdm9pZCBGb3JtRGF0YUxpc3Q6OmFwcGVuZFN0cmluZyhjb25zdCBDU3RyaW5nJiBzKQor
dm9pZCBGb3JtRGF0YUxpc3Q6OmFwcGVuZFN0cmluZyhjb25zdCBTdHJpbmcmIHMpCiB7Ci0gICAg
bV9saXN0LmFwcGVuZChzKTsKKyAgICBtX2xpc3QuYXBwZW5kKFN0cmluZ0Jsb2JJdGVtOjpjcmVh
dGUocywgRW5kaW5nQ1JMRiwgbV9lbmNvZGluZykpOwogfQogCi0vLyBDaGFuZ2UgcGxhaW4gQ1Ig
YW5kIHBsYWluIExGIHRvIENSTEYgcGFpcnMuCi1zdGF0aWMgQ1N0cmluZyBmaXhMaW5lQnJlYWtz
KGNvbnN0IENTdHJpbmcmIHMpCit2b2lkIEZvcm1EYXRhTGlzdDo6YXBwZW5kU3RyaW5nKGNvbnN0
IENTdHJpbmcmIHMpCiB7Ci0gICAgLy8gQ29tcHV0ZSB0aGUgbGVuZ3RoLgotICAgIHVuc2lnbmVk
IG5ld0xlbiA9IDA7Ci0gICAgY29uc3QgY2hhciogcCA9IHMuZGF0YSgpOwotICAgIHdoaWxlIChj
aGFyIGMgPSAqcCsrKSB7Ci0gICAgICAgIGlmIChjID09ICdccicpIHsKLSAgICAgICAgICAgIC8v
IFNhZmUgdG8gbG9vayBhaGVhZCBiZWNhdXNlIG9mIHRyYWlsaW5nICdcMCcuCi0gICAgICAgICAg
ICBpZiAoKnAgIT0gJ1xuJykgewotICAgICAgICAgICAgICAgIC8vIFR1cm4gQ1IgaW50byBDUkxG
LgotICAgICAgICAgICAgICAgIG5ld0xlbiArPSAyOwotICAgICAgICAgICAgfQotICAgICAgICB9
IGVsc2UgaWYgKGMgPT0gJ1xuJykgewotICAgICAgICAgICAgLy8gVHVybiBMRiBpbnRvIENSTEYu
Ci0gICAgICAgICAgICBuZXdMZW4gKz0gMjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IC8vIExlYXZlIG90aGVyIGNoYXJhY3RlcnMgYWxvbmUuCi0gICAgICAgICAgICBuZXdMZW4gKz0g
MTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAobmV3TGVuID09IHMubGVuZ3RoKCkpIHsKLSAg
ICAgICAgcmV0dXJuIHM7Ci0gICAgfQotICAgIAotICAgIC8vIE1ha2UgYSBjb3B5IG9mIHRoZSBz
dHJpbmcuCi0gICAgcCA9IHMuZGF0YSgpOwotICAgIGNoYXIqIHE7Ci0gICAgQ1N0cmluZyByZXN1
bHQgPSBDU3RyaW5nOjpuZXdVbmluaXRpYWxpemVkKG5ld0xlbiwgcSk7Ci0gICAgd2hpbGUgKGNo
YXIgYyA9ICpwKyspIHsKLSAgICAgICAgaWYgKGMgPT0gJ1xyJykgewotICAgICAgICAgICAgLy8g
U2FmZSB0byBsb29rIGFoZWFkIGJlY2F1c2Ugb2YgdHJhaWxpbmcgJ1wwJy4KLSAgICAgICAgICAg
IGlmICgqcCAhPSAnXG4nKSB7Ci0gICAgICAgICAgICAgICAgLy8gVHVybiBDUiBpbnRvIENSTEYu
Ci0gICAgICAgICAgICAgICAgKnErKyA9ICdccic7Ci0gICAgICAgICAgICAgICAgKnErKyA9ICdc
bic7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoYyA9PSAnXG4nKSB7Ci0gICAg
ICAgICAgICAvLyBUdXJuIExGIGludG8gQ1JMRi4KLSAgICAgICAgICAgICpxKysgPSAnXHInOwot
ICAgICAgICAgICAgKnErKyA9ICdcbic7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAv
LyBMZWF2ZSBvdGhlciBjaGFyYWN0ZXJzIGFsb25lLgotICAgICAgICAgICAgKnErKyA9IGM7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBtX2xpc3QuYXBwZW5kKFN0
cmluZ0Jsb2JJdGVtOjpjcmVhdGUocykpOwogfQogCi12b2lkIEZvcm1EYXRhTGlzdDo6YXBwZW5k
U3RyaW5nKGNvbnN0IFN0cmluZyYgcykKK3ZvaWQgRm9ybURhdGFMaXN0OjphcHBlbmRCbG9iKGNv
bnN0IFN0cmluZyYga2V5LCBQYXNzUmVmUHRyPEJsb2I+IGJsb2IpCiB7Ci0gICAgQ1N0cmluZyBj
c3RyID0gZml4TGluZUJyZWFrcyhtX2VuY29kaW5nLmVuY29kZShzLmNoYXJhY3RlcnMoKSwgcy5s
ZW5ndGgoKSwgRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpKTsKLSAgICBtX2xpc3QuYXBwZW5kKGNz
dHIpOworICAgIGFwcGVuZFN0cmluZyhrZXkpOworICAgIGNvbnN0IEJsb2JJdGVtTGlzdCYgbGlz
dCA9IGJsb2ItPml0ZW1zKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0LnNpemUo
KTsgKytpKQorICAgICAgICBtX2xpc3QuYXBwZW5kKGxpc3QuYXQoaSkpOwogfQogCiB9IC8vIG5h
bWVzcGFjZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0Zvcm1EYXRhTGlzdC5oIGIvV2ViQ29y
ZS9odG1sL0Zvcm1EYXRhTGlzdC5oCmluZGV4IDhlY2Y2NGVlOTNhZDUyNGY0NzkyMWYxZDgyMmY5
YTA4YmEwMTNkN2MuLjYwODg2YjgzNGEwZmJlN2Q0MWVkYjNhZDA2MGE0MWE2YjZmYmQ0MjQgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9Gb3JtRGF0YUxpc3QuaAorKysgYi9XZWJDb3JlL2h0bWwv
Rm9ybURhdGFMaXN0LmgKQEAgLTQ2LDI3ICs0Niw5IEBAIHB1YmxpYzoKICAgICAgICAgYXBwZW5k
U3RyaW5nKGtleSk7CiAgICAgICAgIGFwcGVuZFN0cmluZyhTdHJpbmc6Om51bWJlcih2YWx1ZSkp
OwogICAgIH0KLSAgICB2b2lkIGFwcGVuZEJsb2IoY29uc3QgU3RyaW5nJiBrZXksIFBhc3NSZWZQ
dHI8QmxvYj4gYmxvYikKLSAgICB7Ci0gICAgICAgIGFwcGVuZFN0cmluZyhrZXkpOwotICAgICAg
ICBtX2xpc3QuYXBwZW5kKGJsb2IpOwotICAgIH0KLQotICAgIGNsYXNzIEl0ZW0gewotICAgIHB1
YmxpYzoKLSAgICAgICAgSXRlbSgpIHsgfQotICAgICAgICBJdGVtKGNvbnN0IFdURjo6Q1N0cmlu
ZyYgZGF0YSkgOiBtX2RhdGEoZGF0YSkgeyB9Ci0gICAgICAgIEl0ZW0oUGFzc1JlZlB0cjxCbG9i
PiBibG9iKSA6IG1fYmxvYihibG9iKSB7IH0KLQotICAgICAgICBjb25zdCBXVEY6OkNTdHJpbmcm
IGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0KLSAgICAgICAgQmxvYiogYmxvYigpIGNv
bnN0IHsgcmV0dXJuIG1fYmxvYi5nZXQoKTsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgV1RG
OjpDU3RyaW5nIG1fZGF0YTsKLSAgICAgICAgUmVmUHRyPEJsb2I+IG1fYmxvYjsKLSAgICB9Owor
ICAgIHZvaWQgYXBwZW5kQmxvYihjb25zdCBTdHJpbmcmIGtleSwgUGFzc1JlZlB0cjxCbG9iPiBi
bG9iKTsKIAotICAgIGNvbnN0IFZlY3RvcjxJdGVtPiYgbGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1f
bGlzdDsgfQorICAgIGNvbnN0IEJsb2JJdGVtTGlzdCYgbGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1f
bGlzdDsgfQogICAgIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcoKSBjb25zdCB7IHJldHVy
biBtX2VuY29kaW5nOyB9CiAKIHByaXZhdGU6CkBAIC03NCw3ICs1Niw3IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBhcHBlbmRTdHJpbmcoY29uc3QgU3RyaW5nJik7CiAKICAgICBUZXh0RW5jb2Rpbmcg
bV9lbmNvZGluZzsKLSAgICBWZWN0b3I8SXRlbT4gbV9saXN0OworICAgIEJsb2JJdGVtTGlzdCBt
X2xpc3Q7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQu
Y3BwCmluZGV4IGM4NDQ1NGQxNTlkYmVjYTVhNGUzNWI5NTJhYmVhYTM0OTliYTUxZjMuLjAxZGVj
MTFiNmUwMmFmYjczYmVkNGUzODUyM2RmNWViOTkzYmFlYWUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
aHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1l
bnQuY3BwCkBAIC0yMTAsNyArMjEwLDcgQEAgUGFzc1JlZlB0cjxGb3JtRGF0YT4gSFRNTEZvcm1F
bGVtZW50OjpjcmVhdGVGb3JtRGF0YSgpCiAgICAgICAgICAgICBjb250cm9sLT5hcHBlbmRGb3Jt
RGF0YSgqZG9tRm9ybURhdGEsIG1fZm9ybURhdGFCdWlsZGVyLmlzTXVsdGlQYXJ0Rm9ybSgpKTsK
ICAgICB9CiAKLSAgICBSZWZQdHI8Rm9ybURhdGE+IHJlc3VsdCA9IChtX2Zvcm1EYXRhQnVpbGRl
ci5pc011bHRpUGFydEZvcm0oKSkgPyBGb3JtRGF0YTo6Y3JlYXRlTXVsdGlQYXJ0KCpkb21Gb3Jt
RGF0YSwgZG9jdW1lbnQoKSkgOiBGb3JtRGF0YTo6Y3JlYXRlKCpkb21Gb3JtRGF0YSk7CisgICAg
UmVmUHRyPEZvcm1EYXRhPiByZXN1bHQgPSAobV9mb3JtRGF0YUJ1aWxkZXIuaXNNdWx0aVBhcnRG
b3JtKCkpID8gRm9ybURhdGE6OmNyZWF0ZU11bHRpUGFydChkb21Gb3JtRGF0YS0+bGlzdCgpLCBk
b21Gb3JtRGF0YS0+ZW5jb2RpbmcoKSwgZG9jdW1lbnQoKSkgOiBGb3JtRGF0YTo6Y3JlYXRlKGRv
bUZvcm1EYXRhLT5saXN0KCksIGRvbUZvcm1EYXRhLT5lbmNvZGluZygpKTsKIAogICAgIHJlc3Vs
dC0+c2V0SWRlbnRpZmllcihnZW5lcmF0ZUZvcm1EYXRhSWRlbnRpZmllcigpKTsKICAgICByZXR1
cm4gcmVzdWx0OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxQcm9ncmVzc0VsZW1lbnQu
Y3BwIGIvV2ViQ29yZS9odG1sL0hUTUxQcm9ncmVzc0VsZW1lbnQuY3BwCmluZGV4IGQyNzVlYmZj
ZmY4ZDk3YjkxNmQ1OWQyNGYyNDE5ZGE4YzUzNGFmMjkuLmY3ZTg2ZjNhOWFmZmVjZWRlYmI5M2I5
MzUzNTBkYWI4NTJhZWE2YzUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MUHJvZ3Jlc3NF
bGVtZW50LmNwcAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTFByb2dyZXNzRWxlbWVudC5jcHAKQEAg
LTI0LDYgKzI0LDcgQEAKIAogI2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkV2ZW50
TmFtZXMuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiRm9ybURhdGFM
aXN0LmgiCiAjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVz
LmgiCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL0Jsb2JJdGVtLmNwcCBiL1dlYkNvcmUv
cGxhdGZvcm0vQmxvYkl0ZW0uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcyMzhjNjNlMTU2YTJhYTM5N2I4NjY1
ZjU5ZGFmN2JhNDY5YzBiZjUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL0Js
b2JJdGVtLmNwcApAQCAtMCwwICsxLDMxOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1
ZGUgIkJsb2JJdGVtLmgiCisKKyNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCisjaW5jbHVkZSAiVVVJ
RC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiBFTkFCTEUoQkxPQl9TTElDRSkKK3N0
YXRpYyBjb25zdCBkb3VibGUgaW52YWxpZE1vZGlmaWNhdGlvblRpbWUgPSAwOworCitkb3VibGUg
Z2V0RmlsZVNuYXBzaG90TW9kaWZpY2F0aW9uVGltZShjb25zdCBTdHJpbmcmIHBhdGgpCit7Cisg
ICAgLy8gRklYTUU6IHN5bmNocm9uaXplZCBmaWxlIGNhbGwKKyAgICB0aW1lX3QgbW9kaWZpY2F0
aW9uVGltZTsKKyAgICBpZiAoZ2V0RmlsZU1vZGlmaWNhdGlvblRpbWUocGF0aCwgbW9kaWZpY2F0
aW9uVGltZSkpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KG1vZGlmaWNhdGlv
blRpbWUpOworICAgIHJldHVybiBpbnZhbGlkTW9kaWZpY2F0aW9uVGltZTsKK30KKworUGFzc1Jl
ZlB0cjxCbG9iSXRlbT4gQmxvYkl0ZW06OnNsaWNlKGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25n
IGxlbmd0aCkKK3sKKyAgICBBU1NFUlQoc3RhcnQgPj0gMCAmJiBsZW5ndGggPj0gMCk7CisgICAg
QVNTRVJUKHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oc3RhcnQpIDwgc2l6ZSgpKTsK
KyAgICBpZiAoIXN0YXJ0ICYmIHNpemUoKSA8PSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxv
bmc+KGxlbmd0aCkpCisgICAgICAgIHJldHVybiB0aGlzOworICAgIGNvbnN0IEZpbGVCbG9iSXRl
bSogZmlsZUl0ZW0gPSB0b0ZpbGVCbG9iSXRlbSgpOworICAgIGlmIChmaWxlSXRlbSkgeworICAg
ICAgICBjb25zdCBGaWxlUmFuZ2VCbG9iSXRlbSogZmlsZVJhbmdlSXRlbSA9IHRvRmlsZVJhbmdl
QmxvYkl0ZW0oKTsKKyAgICAgICAgaWYgKGZpbGVSYW5nZUl0ZW0pIHsKKyAgICAgICAgICAgIGlm
IChzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KHN0YXJ0ICsgbGVuZ3RoKSA+IHNpemUo
KSkKKyAgICAgICAgICAgICAgICBsZW5ndGggPSBzaXplKCkgLSBzdGFydDsKKyAgICAgICAgICAg
IHN0YXJ0ICs9IGZpbGVSYW5nZUl0ZW0tPnN0YXJ0KCk7CisgICAgICAgICAgICByZXR1cm4gRmls
ZVJhbmdlQmxvYkl0ZW06OmNyZWF0ZShmaWxlSXRlbS0+cGF0aCgpLCBzdGFydCwgbGVuZ3RoLCBm
aWxlUmFuZ2VJdGVtLT5zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUoKSk7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIEZpbGVSYW5nZUJsb2JJdGVtOjpjcmVhdGUoZmlsZUl0ZW0tPnBhdGgoKSwg
c3RhcnQsIGxlbmd0aCwgZ2V0RmlsZVNuYXBzaG90TW9kaWZpY2F0aW9uVGltZShmaWxlSXRlbS0+
cGF0aCgpKSk7CisgICAgfQorICAgIEFTU0VSVCh0b0RhdGFCbG9iSXRlbSgpKTsKKyAgICBpZiAo
c3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihzdGFydCArIGxlbmd0aCkgPiBzaXplKCkp
CisgICAgICAgIGxlbmd0aCA9IHNpemUoKSAtIHN0YXJ0OworICAgIHJldHVybiBEYXRhUmFuZ2VC
bG9iSXRlbTo6Y3JlYXRlKHN0YXRpY19jYXN0PERhdGFSYW5nZUJsb2JJdGVtKj4odGhpcyksIHN0
YXJ0LCBsZW5ndGgpOworfQorCisjZW5kaWYgLy8gRU5BQkxFKEJMT0JfU0xJQ0UpCisKKy8vIERh
dGFCbG9iSXRlbSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisKK2NoYXIqIERhdGFCbG9iSXRlbTo6cmVsZWFzZUJ1ZmZlcigp
IGNvbnN0Cit7CisgICAgLy8gTWFrZXMgYSBjb3B5IG9mIGl0cyBpbnRlcm5hbCBkYXRhIGFuZCBw
YXNzIHRoZSBvd25lcnNoaXAgdG8gdGhlIGNhbGxlci4KKyAgICBWZWN0b3I8Y2hhcj4gdjsKKyAg
ICB2LmFwcGVuZChkYXRhKCksIHN0YXRpY19jYXN0PHNpemVfdD4oc2l6ZSgpKSk7CisgICAgcmV0
dXJuIHYucmVsZWFzZUJ1ZmZlcigpOworfQorCitib29sIERhdGFCbG9iSXRlbTo6ZXF1YWxzKGNv
bnN0IEJsb2JJdGVtKiBpdGVtKSBjb25zdAoreworICAgIGNvbnN0IERhdGFCbG9iSXRlbSogZGF0
YUl0ZW0gPSBpdGVtLT50b0RhdGFCbG9iSXRlbSgpOworICAgIHJldHVybiBkYXRhSXRlbSAmJiBk
YXRhKCkgPT0gZGF0YUl0ZW0tPmRhdGEoKSAmJiBzaXplKCkgPT0gZGF0YUl0ZW0tPnNpemUoKTsK
K30KKworCisvLyBGaWxlQmxvYkl0ZW0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitQYXNzUmVmUHRyPEJsb2JJdGVtPiBG
aWxlQmxvYkl0ZW06OmNyZWF0ZShjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgcmV0dXJuIGFk
b3B0UmVmKHN0YXRpY19jYXN0PEJsb2JJdGVtKj4obmV3IEZpbGVCbG9iSXRlbShwYXRoKSkpOwor
fQorCitGaWxlQmxvYkl0ZW06OkZpbGVCbG9iSXRlbShjb25zdCBTdHJpbmcmIHBhdGgpCisgICAg
OiBtX3BhdGgocGF0aCkKKyAgICAsIG1fZmlsZU5hbWUocGF0aEdldEZpbGVOYW1lKG1fcGF0aCkp
Cit7Cit9CisKK3Vuc2lnbmVkIGxvbmcgbG9uZyBGaWxlQmxvYkl0ZW06OnNpemUoKSBjb25zdAor
eworICAgIC8vIEZJWE1FOiBzeW5jaHJvbml6ZWQgZmlsZSBjYWxsCisgICAgbG9uZyBsb25nIHNp
emU7CisgICAgaWYgKCFnZXRGaWxlU2l6ZShtX3BhdGgsIHNpemUpKQorICAgICAgICByZXR1cm4g
MDsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihzaXplKTsKK30K
KworUGFzc1JlZlB0cjxCbG9iSXRlbT4gRmlsZUJsb2JJdGVtOjpkZWVwQ29weSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIEZpbGVCbG9iSXRlbTo6Y3JlYXRlKG1fcGF0aCk7Cit9CisKK2Jvb2wgRmls
ZUJsb2JJdGVtOjplcXVhbHMoY29uc3QgQmxvYkl0ZW0qIGl0ZW0pIGNvbnN0Cit7CisgICAgY29u
c3QgRmlsZUJsb2JJdGVtKiBmaWxlSXRlbSA9IGl0ZW0tPnRvRmlsZUJsb2JJdGVtKCk7CisgICAg
cmV0dXJuIGZpbGVJdGVtICYmIG1fcGF0aCA9PSBmaWxlSXRlbS0+bV9wYXRoOworfQorCisvLyBT
dHJpbmdCbG9iSXRlbSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorCitQYXNzUmVmUHRyPEJsb2JJdGVtPiBTdHJpbmdCbG9iSXRl
bTo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgdGV4dCwgRW5kaW5nVHlwZSBlbmRpbmcsIFRleHRFbmNv
ZGluZyBlbmNvZGluZykKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoc3RhdGljX2Nhc3Q8QmxvYkl0
ZW0qPihuZXcgU3RyaW5nQmxvYkl0ZW0odGV4dCwgZW5kaW5nLCBlbmNvZGluZykpKTsKK30KKwor
UGFzc1JlZlB0cjxCbG9iSXRlbT4gU3RyaW5nQmxvYkl0ZW06OmNyZWF0ZShjb25zdCBDU3RyaW5n
JiB0ZXh0KQoreworICAgIHJldHVybiBhZG9wdFJlZihzdGF0aWNfY2FzdDxCbG9iSXRlbSo+KG5l
dyBTdHJpbmdCbG9iSXRlbSh0ZXh0KSkpOworfQorCisKK1N0cmluZ0Jsb2JJdGVtOjpTdHJpbmdC
bG9iSXRlbShjb25zdCBTdHJpbmcmIHRleHQsIEVuZGluZ1R5cGUgZW5kaW5nLCBUZXh0RW5jb2Rp
bmcgZW5jb2RpbmcpCisgICAgOiBtX2RhdGEoU3RyaW5nQmxvYkl0ZW06OmNvbnZlcnRUb0NTdHJp
bmcodGV4dCwgZW5kaW5nLCBlbmNvZGluZykpCit7Cit9CisKK1N0cmluZ0Jsb2JJdGVtOjpTdHJp
bmdCbG9iSXRlbShjb25zdCBDU3RyaW5nJiB0ZXh0KQorICAgIDogbV9kYXRhKHRleHQpCit7Cit9
CisKK1Bhc3NSZWZQdHI8QmxvYkl0ZW0+IFN0cmluZ0Jsb2JJdGVtOjpkZWVwQ29weSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIFN0cmluZ0Jsb2JJdGVtOjpjcmVhdGUoQ1N0cmluZyhtX2RhdGEuZGF0
YSgpLCBtX2RhdGEubGVuZ3RoKCkpKTsKK30KKworYm9vbCBTdHJpbmdCbG9iSXRlbTo6ZXF1YWxz
KGNvbnN0IEJsb2JJdGVtKiBpdGVtKSBjb25zdAoreworICAgIGlmICghRGF0YUJsb2JJdGVtOjpl
cXVhbHMoaXRlbSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjb25zdCBTdHJpbmdCbG9i
SXRlbSogc3RyaW5nSXRlbSA9IGl0ZW0tPnRvU3RyaW5nQmxvYkl0ZW0oKTsKKyAgICByZXR1cm4g
c3RyaW5nSXRlbSAmJiBkYXRhKCkgPT0gc3RyaW5nSXRlbS0+ZGF0YSgpICYmIHNpemUoKSA9PSBz
dHJpbmdJdGVtLT5zaXplKCk7Cit9CisKK0NTdHJpbmcgU3RyaW5nQmxvYkl0ZW06OmNvbnZlcnRU
b0NTdHJpbmcoY29uc3QgU3RyaW5nJiB0ZXh0LCBFbmRpbmdUeXBlIGVuZGluZywgVGV4dEVuY29k
aW5nIGVuY29kaW5nKQoreworICAgIENTdHJpbmcgZnJvbSA9IGVuY29kaW5nLmVuY29kZSh0ZXh0
LmNoYXJhY3RlcnMoKSwgdGV4dC5sZW5ndGgoKSwgRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpOwor
ICAgIENTdHJpbmcgcmVzdWx0ID0gZnJvbTsKKworICAgIGlmIChlbmRpbmcgPT0gRW5kaW5nVHJh
bnNwYXJlbnQpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICBjb25zdCBjaGFyKiBlbmRp
bmdDaGFycyA9IChlbmRpbmcgPT0gRW5kaW5nQ1JMRikgPyAiXHJcbiIgOiAoKGVuZGluZyA9PSBF
bmRpbmdDUikgPyAiXHIiIDogIlxuIik7CisKKyAgICBpbnQgZW5kaW5nTGVuZ3RoID0gKGVuZGlu
ZyA9PSBFbmRpbmdDUkxGKSA/IDIgOiAxOworICAgIGludCBuZWVkRml4ID0gMDsKKworICAgIC8v
IENhbGN1bGF0ZSB0aGUgZmluYWwgbGVuZ3RoLgorICAgIGludCBjYWxjdWxhdGVkTGVuZ3RoID0g
ZnJvbS5sZW5ndGgoKTsKKyAgICBjb25zdCBjaGFyKiBwID0gZnJvbS5kYXRhKCk7CisgICAgd2hp
bGUgKGNoYXIgYyA9ICpwKyspIHsKKyAgICAgICAgaWYgKGMgPT0gJ1xyJykgeworICAgICAgICAg
ICAgLy8gU2FmZSB0byBsb29rIGFoZWFkIGJlY2F1c2Ugb2YgdHJhaWxpbmcgJ1wwJy4KKyAgICAg
ICAgICAgIGlmICgqcCA9PSAnXG4nICYmIGVuZGluZyAhPSBFbmRpbmdDUkxGKSB7CisgICAgICAg
ICAgICAgICAgY2FsY3VsYXRlZExlbmd0aCArPSAoZW5kaW5nTGVuZ3RoIC0gMik7CisgICAgICAg
ICAgICAgICAgKytuZWVkRml4OworICAgICAgICAgICAgfSBlbHNlIGlmIChlbmRpbmcgIT0gRW5k
aW5nQ1IpIHsKKyAgICAgICAgICAgICAgICBjYWxjdWxhdGVkTGVuZ3RoICs9IChlbmRpbmdMZW5n
dGggLSAxKTsKKyAgICAgICAgICAgICAgICArK25lZWRGaXg7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0gZWxzZSBpZiAoYyA9PSAnXG4nICYmIGVuZGluZyAhPSBFbmRpbmdMRikgeworICAgICAg
ICAgICAgY2FsY3VsYXRlZExlbmd0aCArPSAoZW5kaW5nTGVuZ3RoIC0gMSk7CisgICAgICAgICAg
ICArK25lZWRGaXg7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIW5lZWRGaXgpCisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisKKyAgICAvLyBDb252ZXJ0IHRoZSBlbmRpbmdzIGFuZCBjcmVh
dGUgYSBkYXRhIGJ1ZmZlci4KKyAgICBwID0gZnJvbS5kYXRhKCk7CisgICAgY2hhciogcTsKKyAg
ICByZXN1bHQgPSBDU3RyaW5nOjpuZXdVbmluaXRpYWxpemVkKGNhbGN1bGF0ZWRMZW5ndGgsIHEp
OworICAgIHdoaWxlIChjaGFyIGMgPSAqcCsrKSB7CisgICAgICAgIGlmIChjID09ICdccicpIHsK
KyAgICAgICAgICAgIGlmICgqcCA9PSAnXG4nICYmIGVuZGluZyAhPSBFbmRpbmdDUkxGKSB7Cisg
ICAgICAgICAgICAgICAgbWVtY3B5KHEsIGVuZGluZ0NoYXJzLCBlbmRpbmdMZW5ndGgpOworICAg
ICAgICAgICAgICAgIHEgKz0gZW5kaW5nTGVuZ3RoOworICAgICAgICAgICAgfSBlbHNlIGlmICgq
cCAhPSAnXG4nICYmIGVuZGluZyAhPSBFbmRpbmdDUikgeworICAgICAgICAgICAgICAgIG1lbWNw
eShxLCBlbmRpbmdDaGFycywgZW5kaW5nTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBxICs9IGVu
ZGluZ0xlbmd0aDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChjID09ICdcbicg
JiYgZW5kaW5nICE9IEVuZGluZ0xGKSB7CisgICAgICAgICAgICBtZW1jcHkocSwgZW5kaW5nQ2hh
cnMsIGVuZGluZ0xlbmd0aCk7CisgICAgICAgICAgICBxICs9IGVuZGluZ0xlbmd0aDsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIExlYXZlIG90aGVyIGNoYXJhY3RlcnMgYWxvbmUu
CisgICAgICAgICAgICAqcSsrID0gYzsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcmVz
dWx0OworfQorCisvLyBCeXRlc0FycmF5QmxvYkl0ZW0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitQYXNzUmVmUHRyPEJsb2JJdGVt
PiBCeXRlc0FycmF5QmxvYkl0ZW06OmNyZWF0ZShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3Qgc2l6
ZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoc3RhdGljX2Nhc3Q8QmxvYkl0ZW0qPihuZXcgQnl0
ZXNBcnJheUJsb2JJdGVtKGRhdGEsIHNpemUpKSk7Cit9CisKK0J5dGVzQXJyYXlCbG9iSXRlbTo6
Qnl0ZXNBcnJheUJsb2JJdGVtKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBzaXplKQoreworICAg
IG1fYnl0ZXNBcnJheS5hcHBlbmQoZGF0YSwgc2l6ZSk7Cit9CisKK1Bhc3NSZWZQdHI8QmxvYkl0
ZW0+IEJ5dGVzQXJyYXlCbG9iSXRlbTo6ZGVlcENvcHkoKSBjb25zdAoreworICAgIHJldHVybiBC
eXRlc0FycmF5QmxvYkl0ZW06OmNyZWF0ZShtX2J5dGVzQXJyYXkuZGF0YSgpLCBtX2J5dGVzQXJy
YXkuc2l6ZSgpKTsKK30KKworI2lmIEVOQUJMRShCTE9CX1NMSUNFKQorCisvLyBEYXRhUmFuZ2VC
bG9iSXRlbSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorCitQYXNzUmVmUHRyPEJsb2JJdGVtPiBEYXRhUmFuZ2VCbG9iSXRlbTo6Y3Jl
YXRlKFBhc3NSZWZQdHI8RGF0YUJsb2JJdGVtPiBpdGVtLCBsb25nIGxvbmcgc3RhcnQsIGxvbmcg
bG9uZyBsZW5ndGgpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKHN0YXRpY19jYXN0PEJsb2JJdGVt
Kj4obmV3IERhdGFSYW5nZUJsb2JJdGVtKGl0ZW0sIHN0YXJ0LCBsZW5ndGgpKSk7Cit9CisKK0Rh
dGFSYW5nZUJsb2JJdGVtOjpEYXRhUmFuZ2VCbG9iSXRlbShQYXNzUmVmUHRyPERhdGFCbG9iSXRl
bT4gaXRlbSwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoKQorICAgIDogbV9sZW5n
dGgobGVuZ3RoKQoreworICAgIGNvbnN0IERhdGFSYW5nZUJsb2JJdGVtKiByYW5nZUl0ZW0gPSBt
X2l0ZW0tPnRvRGF0YVJhbmdlQmxvYkl0ZW0oKTsKKyAgICBpZiAocmFuZ2VJdGVtKSB7CisgICAg
ICAgIG1faXRlbSA9IHJhbmdlSXRlbS0+bV9pdGVtOworICAgICAgICBtX3N0YXJ0ID0gc3RhcnQg
KyByYW5nZUl0ZW0tPm1fc3RhcnQ7CisgICAgICAgIEFTU0VSVCghbV9pdGVtLT50b0RhdGFSYW5n
ZUJsb2JJdGVtKCkpOworICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBs
b25nPihtX3N0YXJ0ICsgbV9sZW5ndGgpIDw9IG1faXRlbS0+c2l6ZSgpKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBtX2l0ZW0gPSBpdGVtOworICAgICAgICBtX3N0YXJ0ID0gc3RhcnQ7CisgICAg
fQorfQorCitjb25zdCBjaGFyKiBEYXRhUmFuZ2VCbG9iSXRlbTo6ZGF0YSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1faXRlbS0+ZGF0YSgpICsgbV9zdGFydDsKK30KKworUGFzc1JlZlB0cjxCbG9i
SXRlbT4gRGF0YVJhbmdlQmxvYkl0ZW06OmRlZXBDb3B5KCkgY29uc3QKK3sKKyAgICByZXR1cm4g
RGF0YVJhbmdlQmxvYkl0ZW06OmNyZWF0ZShzdGF0aWNfcG9pbnRlcl9jYXN0PERhdGFCbG9iSXRl
bT4obV9pdGVtLT5kZWVwQ29weSgpKSwgbV9zdGFydCwgbV9sZW5ndGgpOworfQorCitib29sIERh
dGFSYW5nZUJsb2JJdGVtOjplcXVhbHMoY29uc3QgQmxvYkl0ZW0qIGl0ZW0pIGNvbnN0Cit7Cisg
ICAgY29uc3QgRGF0YVJhbmdlQmxvYkl0ZW0qIHJhbmdlSXRlbSA9IGl0ZW0tPnRvRGF0YVJhbmdl
QmxvYkl0ZW0oKTsKKyAgICByZXR1cm4gcmFuZ2VJdGVtICYmIG1fc3RhcnQgPT0gcmFuZ2VJdGVt
LT5tX3N0YXJ0ICYmIG1fbGVuZ3RoID09IHJhbmdlSXRlbS0+bV9sZW5ndGggJiYgbV9pdGVtLT5l
cXVhbHMocmFuZ2VJdGVtLT5tX2l0ZW0uZ2V0KCkpOworfQorCisvLyBGaWxlUmFuZ2VCbG9iSXRl
bSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorCitQYXNzUmVmUHRyPEJsb2JJdGVtPiBGaWxlUmFuZ2VCbG9iSXRlbTo6Y3JlYXRlKGNv
bnN0IFN0cmluZyYgcGF0aCwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoLCBkb3Vi
bGUgc25hcHNob3RNb2RpZmljYXRpb25UaW1lKQoreworICAgIHJldHVybiBhZG9wdFJlZihzdGF0
aWNfY2FzdDxCbG9iSXRlbSo+KG5ldyBGaWxlUmFuZ2VCbG9iSXRlbShwYXRoLCBzdGFydCwgbGVu
Z3RoLCBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUpKSk7Cit9CisKK0ZpbGVSYW5nZUJsb2JJdGVt
OjpGaWxlUmFuZ2VCbG9iSXRlbShjb25zdCBTdHJpbmcmIHBhdGgsIGxvbmcgbG9uZyBzdGFydCwg
bG9uZyBsb25nIGxlbmd0aCwgZG91YmxlIG1vZGlmaWNhdGlvblRpbWUpCisgICAgOiBGaWxlQmxv
Ykl0ZW0ocGF0aCkKKyAgICAsIG1fc3RhcnQoc3RhcnQpCisgICAgLCBtX2xlbmd0aChsZW5ndGgp
CisgICAgLCBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZShtb2RpZmljYXRpb25UaW1lKQorewor
ICAgIG1fdW5pcXVlTmFtZSA9ICJCbG9iIiArIGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKTsK
KyAgICBtX3VuaXF1ZU5hbWUucmVwbGFjZSgiLSIsICIiKTsgLy8gRm9yIHNhZnR5LCByZW1vdmUg
Jy0nIGZyb20gdGhlIGZpbGVuYW1lIHNuY2Ugc29tZSBzZXJ2ZXJzIG1heSBub3QgbGlrZSBpdC4K
K30KKworUGFzc1JlZlB0cjxCbG9iSXRlbT4gRmlsZVJhbmdlQmxvYkl0ZW06OmRlZXBDb3B5KCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gRmlsZVJhbmdlQmxvYkl0ZW06OmNyZWF0ZShwYXRoKCksIG1f
c3RhcnQsIG1fbGVuZ3RoLCBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZSk7Cit9CisKK2Jvb2wg
RmlsZVJhbmdlQmxvYkl0ZW06OmVxdWFscyhjb25zdCBCbG9iSXRlbSogaXRlbSkgY29uc3QKK3sK
KyAgICBpZiAoIUZpbGVCbG9iSXRlbTo6ZXF1YWxzKGl0ZW0pKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgY29uc3QgRmlsZVJhbmdlQmxvYkl0ZW0qIHJhbmdlSXRlbSA9IGl0ZW0tPnRvRmls
ZVJhbmdlQmxvYkl0ZW0oKTsKKyAgICByZXR1cm4gcmFuZ2VJdGVtICYmIG1fc3RhcnQgPT0gcmFu
Z2VJdGVtLT5tX3N0YXJ0ICYmIG1fdW5pcXVlTmFtZSA9PSByYW5nZUl0ZW0tPm1fdW5pcXVlTmFt
ZSAmJiBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZSA9PSByYW5nZUl0ZW0tPm1fc25hcHNob3RN
b2RpZmljYXRpb25UaW1lOworfQorCitib29sIEZpbGVSYW5nZUJsb2JJdGVtOjppc1ZhbGlkKCkg
Y29uc3QKK3sKKyAgICBpZiAobV9zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUgPT0gaW52YWxpZE1v
ZGlmaWNhdGlvblRpbWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gbV9zbmFw
c2hvdE1vZGlmaWNhdGlvblRpbWUgPT0gZ2V0RmlsZVNuYXBzaG90TW9kaWZpY2F0aW9uVGltZShw
YXRoKCkpOworfQorCisjZW5kaWYgLy8gRU5BQkxFKEJMT0JfU0xJQ0UpCisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vQmxvYkl0ZW0uaCBiL1dl
YkNvcmUvcGxhdGZvcm0vQmxvYkl0ZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZmQ4ZmQ0OGNmM2Q3NmVmZmQ2
YzQxMjM3MjUzYmY5YjhkNzI5NzQ2Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9y
bS9CbG9iSXRlbS5oCkBAIC0wLDAgKzEsMjI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisg
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQmxvYkl0ZW1faAorI2RlZmlu
ZSBCbG9iSXRlbV9oCisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlRl
eHRFbmNvZGluZy5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCisvLyBTdHJpbmcgZW5kaW5nIHR5cGVzLgorZW51bSBFbmRpbmdUeXBlIHsKKyAgICBF
bmRpbmdUcmFuc3BhcmVudCA9IDAsCisgICAgRW5kaW5nTEYsCisgICAgRW5kaW5nQ1IsCisgICAg
RW5kaW5nQ1JMRiwKK307CisKK2NsYXNzIEJ5dGVzQXJyYXlCbG9iSXRlbTsKK2NsYXNzIERhdGFC
bG9iSXRlbTsKK2NsYXNzIERhdGFSYW5nZUJsb2JJdGVtOworY2xhc3MgRmlsZUJsb2JJdGVtOwor
Y2xhc3MgRmlsZVJhbmdlQmxvYkl0ZW07CitjbGFzcyBTdHJpbmdCbG9iSXRlbTsKKworLy8gQSBi
YXNlIGludGVyZmFjZSBmb3IgYWxsIGFyYml0cmFyeS1kYXRhLW9iamVjdCBjb21wb25lbnQgaXRl
bXMuCisvLyBUaGUgQmxvYkl0ZW0gYW5kIGl0cyBzdWJjbGFzc2VzIGFyZSBzdHJ1Y3R1cmVkIGxp
a2UgdGhlIGZvbGxvd2luZzoKKy8vICAgIEJsb2JJdGVtCisvLyAgICAgICB8CisvLyAgICAgICAr
LS0tLS0tLT4gRGF0YUJsb2JJdGVtCisvLyAgICAgICB8ICAgICAgICAgICAgICB8CisvLyAgICAg
ICB8ICAgICAgICAgICAgICArLS0tLS0tLS0tPiBTdHJpbmdCbG9iSXRlbQorLy8gICAgICAgfCAg
ICAgICAgICAgICAgKy0tLS0tLS0tLT4gQnl0ZUFycmF5QmxvYkl0ZW0KKy8vICAgICAgIHwgICAg
ICAgICAgICAgICstLS0tLS0tLS0+IERhdGFSYW5nZUJsb2JJdGVtCisvLyAgICAgICB8CisvLyAg
ICAgICArLS0tLS0tLT4gRmlsZUJsb2JJdGVtCisvLyAgICAgICAgICAgICAgICAgICAgICB8Cisv
LyAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tPiBGaWxlUmFuZ2VCbG9iSXRlbQorLy8K
K2NsYXNzIEJsb2JJdGVtIDogcHVibGljIFJlZkNvdW50ZWQ8QmxvYkl0ZW0+IHsKK3B1YmxpYzoK
KyAgICB2aXJ0dWFsIH5CbG9iSXRlbSgpIHsgfQorICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBs
b25nIHNpemUoKSBjb25zdCA9IDA7CisKKyAgICAvLyBSZXR1cm5zIGZhbHNlIGlmIHRoZSBkYXRh
IGhhcyBiZWNvbWUgc3RhbGUgb3IgaW52YWxpZC4KKyAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgp
IGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKworICAgIHZpcnR1YWwgY29uc3QgRGF0YUJsb2JJdGVt
KiB0b0RhdGFCbG9iSXRlbSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGNvbnN0
IFN0cmluZ0Jsb2JJdGVtKiB0b1N0cmluZ0Jsb2JJdGVtKCkgY29uc3QgeyByZXR1cm4gMDsgfQor
ICAgIHZpcnR1YWwgY29uc3QgQnl0ZXNBcnJheUJsb2JJdGVtKiB0b0J5dGVzQXJyYXlCbG9iSXRl
bSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IEZpbGVCbG9iSXRlbSog
dG9GaWxlQmxvYkl0ZW0oKSBjb25zdCB7IHJldHVybiAwOyB9CisjaWYgRU5BQkxFKEJMT0JfU0xJ
Q0UpCisgICAgdmlydHVhbCBjb25zdCBEYXRhUmFuZ2VCbG9iSXRlbSogdG9EYXRhUmFuZ2VCbG9i
SXRlbSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IEZpbGVSYW5nZUJs
b2JJdGVtKiB0b0ZpbGVSYW5nZUJsb2JJdGVtKCkgY29uc3QgeyByZXR1cm4gMDsgfQorI2VuZGlm
IC8vIEVOQUJMRShCTE9CX1NMSUNFKQorCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEJsb2JJdGVt
PiBkZWVwQ29weSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZXF1YWxzKGNvbnN0IEJs
b2JJdGVtKikgY29uc3QgPSAwOworCitwcm90ZWN0ZWQ6CisgICAgQmxvYkl0ZW0oKSB7IH0KKwor
cHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQmxvYjsKKyNpZiBFTkFCTEUoQkxPQl9TTElDRSkK
KyAgICAvLyBObyBleHRlcm5hbCBtZXRob2RzIGV4Y2VwdCBmb3IgQmxvYjo6c2xpY2Ugc2hvdWxk
IGNhbGwgdGhpcy4KKyAgICBQYXNzUmVmUHRyPEJsb2JJdGVtPiBzbGljZShsb25nIGxvbmcgc3Rh
cnQsIGxvbmcgbG9uZyBsZW5ndGgpOworI2VuZGlmIC8vIEVOQUJMRShCTE9CX1NMSUNFKQorfTsK
KworLy8gSW4gbW9zdCBjYXNlcyBCbG9iSXRlbSdzIGFyZSBoYW5kbGVkIGFzIGEgbGlzdCAoZS5n
LiBpbiBCbG9iLCBGb3JtRGF0YSkuCit0eXBlZGVmIFZlY3RvcjxSZWZQdHI8QmxvYkl0ZW0+ID4g
QmxvYkl0ZW1MaXN0OworCitjbGFzcyBEYXRhQmxvYkl0ZW0gOiBwdWJsaWMgQmxvYkl0ZW0gewor
cHVibGljOgorICAgIHZpcnR1YWwgY29uc3QgY2hhciogZGF0YSgpIGNvbnN0ID0gMDsKKyAgICBj
aGFyKiByZWxlYXNlQnVmZmVyKCkgY29uc3Q7CisKKyAgICAvLyBCbG9iSXRlbSBtZXRob2RzLgor
ICAgIHZpcnR1YWwgY29uc3QgRGF0YUJsb2JJdGVtKiB0b0RhdGFCbG9iSXRlbSgpIGNvbnN0IHsg
cmV0dXJuIHRoaXM7IH0KKyAgICB2aXJ0dWFsIGJvb2wgZXF1YWxzKGNvbnN0IEJsb2JJdGVtKikg
Y29uc3Q7Cit9OworCitjbGFzcyBGaWxlQmxvYkl0ZW0gOiBwdWJsaWMgQmxvYkl0ZW0geworcHVi
bGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJsb2JJdGVtPiBjcmVhdGUoY29uc3QgU3RyaW5n
JiBwYXRoKTsKKyAgICB2aXJ0dWFsIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJu
IG1fZmlsZU5hbWU7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IFN0cmluZyYgcGF0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fcGF0aDsgfQorCisgICAgLy8gQmxvYkl0ZW0gbWV0aG9kcy4KKyAgICB2aXJ0dWFs
IHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplKCkgY29uc3Q7CisgICAgdmlydHVhbCBjb25zdCBGaWxl
QmxvYkl0ZW0qIHRvRmlsZUJsb2JJdGVtKCkgY29uc3QgeyByZXR1cm4gdGhpczsgfQorICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxCbG9iSXRlbT4gZGVlcENvcHkoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IGJvb2wgZXF1YWxzKGNvbnN0IEJsb2JJdGVtKikgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICBG
aWxlQmxvYkl0ZW0oY29uc3QgU3RyaW5nJiBwYXRoKTsKKyAgICBTdHJpbmcgbV9wYXRoOworICAg
IFN0cmluZyBtX2ZpbGVOYW1lOworfTsKKworY2xhc3MgU3RyaW5nQmxvYkl0ZW0gOiBwdWJsaWMg
RGF0YUJsb2JJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCbG9iSXRlbT4g
Y3JlYXRlKGNvbnN0IFN0cmluZyYsIEVuZGluZ1R5cGUsIFRleHRFbmNvZGluZyk7CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8QmxvYkl0ZW0+IGNyZWF0ZShjb25zdCBDU3RyaW5nJik7CisgICAgY29u
c3QgQ1N0cmluZyYgY3N0cigpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsgfQorCisgICAgLy8gQmxv
Ykl0ZW0gbWV0aG9kcy4KKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplKCkgY29u
c3QgeyByZXR1cm4gbV9kYXRhLmxlbmd0aCgpOyB9CisgICAgdmlydHVhbCBjb25zdCBTdHJpbmdC
bG9iSXRlbSogdG9TdHJpbmdCbG9iSXRlbSgpIGNvbnN0IHsgcmV0dXJuIHRoaXM7IH0KKyAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8QmxvYkl0ZW0+IGRlZXBDb3B5KCkgY29uc3Q7CisgICAgdmlydHVh
bCBib29sIGVxdWFscyhjb25zdCBCbG9iSXRlbSopIGNvbnN0OworCisgICAgLy8gRGF0YUJsb2JJ
dGVtIG1ldGhvZHMuCisgICAgdmlydHVhbCBjb25zdCBjaGFyKiBkYXRhKCkgY29uc3QgeyByZXR1
cm4gbV9kYXRhLmRhdGEoKTsgfQorCitwcml2YXRlOgorICAgIFN0cmluZ0Jsb2JJdGVtKGNvbnN0
IFN0cmluZyYsIEVuZGluZ1R5cGUsIFRleHRFbmNvZGluZyk7CisgICAgU3RyaW5nQmxvYkl0ZW0o
Y29uc3QgQ1N0cmluZyYpOworICAgIHN0YXRpYyBDU3RyaW5nIGNvbnZlcnRUb0NTdHJpbmcoY29u
c3QgU3RyaW5nJiwgRW5kaW5nVHlwZSwgVGV4dEVuY29kaW5nKTsKKyAgICBDU3RyaW5nIG1fZGF0
YTsKK307CisKK2NsYXNzIEJ5dGVzQXJyYXlCbG9iSXRlbSA6IHB1YmxpYyBEYXRhQmxvYkl0ZW0g
eworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJsb2JJdGVtPiBjcmVhdGUoY29uc3Qg
Y2hhciogZGF0YSwgc2l6ZV90IHNpemUpOworCisgICAgLy8gQmxvYkl0ZW0gbWV0aG9kcy4KKyAg
ICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9ieXRl
c0FycmF5LnNpemUoKTsgfQorICAgIHZpcnR1YWwgY29uc3QgQnl0ZXNBcnJheUJsb2JJdGVtKiB0
b0J5dGVzQXJyYXlCbG9iSXRlbSgpIGNvbnN0IHsgcmV0dXJuIHRoaXM7IH0KKyAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8QmxvYkl0ZW0+IGRlZXBDb3B5KCkgY29uc3Q7CisKKyAgICAvLyBEYXRhQmxv
Ykl0ZW0gbWV0aG9kcy4KKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGRhdGEoKSBjb25zdCB7IHJl
dHVybiBtX2J5dGVzQXJyYXkuZGF0YSgpOyB9CisKK3ByaXZhdGU6CisgICAgQnl0ZXNBcnJheUJs
b2JJdGVtKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBzaXplKTsKKyAgICBWZWN0b3I8Y2hhcj4g
bV9ieXRlc0FycmF5OworfTsKKworI2lmIEVOQUJMRShCTE9CX1NMSUNFKQorCisvLyBCbG9iSXRl
bSBjbGFzcyBmb3Igc2xpY2VkIGRhdGEgKHN0cmluZyBvciBieXRlcy1hcnJheSkuCitjbGFzcyBE
YXRhUmFuZ2VCbG9iSXRlbSA6IHB1YmxpYyBEYXRhQmxvYkl0ZW0geworcHVibGljOgorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEJsb2JJdGVtPiBjcmVhdGUoUGFzc1JlZlB0cjxEYXRhQmxvYkl0ZW0+
LCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgpOworCisgICAgLy8gQmxvYkl0ZW0g
bWV0aG9kcy4KKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9sZW5ndGg7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IERhdGFSYW5nZUJsb2JJdGVtKiB0
b0RhdGFSYW5nZUJsb2JJdGVtKCkgY29uc3QgeyByZXR1cm4gdGhpczsgfQorICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxCbG9iSXRlbT4gZGVlcENvcHkoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wg
ZXF1YWxzKGNvbnN0IEJsb2JJdGVtKikgY29uc3Q7CisKKyAgICAvLyBEYXRhQmxvYkl0ZW0gbWV0
aG9kcy4KKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGRhdGEoKSBjb25zdDsKKworcHJpdmF0ZToK
KyAgICBEYXRhUmFuZ2VCbG9iSXRlbShQYXNzUmVmUHRyPERhdGFCbG9iSXRlbT4gaXRlbSwgbG9u
ZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoKTsKKyAgICBSZWZQdHI8RGF0YUJsb2JJdGVt
PiBtX2l0ZW07CisgICAgbG9uZyBsb25nIG1fc3RhcnQ7CisgICAgbG9uZyBsb25nIG1fbGVuZ3Ro
OworfTsKKworY2xhc3MgRmlsZVJhbmdlQmxvYkl0ZW0gOiBwdWJsaWMgRmlsZUJsb2JJdGVtIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCbG9iSXRlbT4gY3JlYXRlKGNvbnN0IFN0
cmluZyYgcGF0aCwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoLCBkb3VibGUgc25h
cHNob3RNb2RpZmljYXRpb25UaW1lKTsKKyAgICBsb25nIGxvbmcgc3RhcnQoKSBjb25zdCB7IHJl
dHVybiBtX3N0YXJ0OyB9CisgICAgZG91YmxlIHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc25hcHNob3RNb2RpZmljYXRpb25UaW1lOyB9CisKKyAgICAvLyBCbG9i
SXRlbSBtZXRob2RzLgorICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBsb25nIHNpemUoKSBjb25z
dCB7IHJldHVybiBtX2xlbmd0aDsgfQorICAgIHZpcnR1YWwgY29uc3QgRmlsZVJhbmdlQmxvYkl0
ZW0qIHRvRmlsZVJhbmdlQmxvYkl0ZW0oKSBjb25zdCB7IHJldHVybiB0aGlzOyB9CisgICAgdmly
dHVhbCBib29sIGlzVmFsaWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8QmxvYkl0
ZW0+IGRlZXBDb3B5KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGVxdWFscyhjb25zdCBCbG9i
SXRlbSopIGNvbnN0OworCisgICAgLy8gRmlsZUJsb2JJdGVtIG1ldGhvZHMuCisgICAgdmlydHVh
bCBjb25zdCBTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX3VuaXF1ZU5hbWU7IH0KKwor
cHJpdmF0ZToKKyAgICBGaWxlUmFuZ2VCbG9iSXRlbShjb25zdCBTdHJpbmcmIHBhdGgsIGxvbmcg
bG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCwgZG91YmxlIHNuYXBzaG90TW9kaWZpY2F0aW9u
VGltZSk7CisgICAgbG9uZyBsb25nIG1fc3RhcnQ7CisgICAgbG9uZyBsb25nIG1fbGVuZ3RoOwor
ICAgIFN0cmluZyBtX3VuaXF1ZU5hbWU7CisKKyAgICBkb3VibGUgbV9zbmFwc2hvdE1vZGlmaWNh
dGlvblRpbWU7Cit9OworCisjZW5kaWYgLy8gRU5BQkxFKEJMT0JfU0xJQ0UpCisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEJsb2JJdGVtX2gKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvRm9ybURhdGEuY3BwCmluZGV4IDkxODAwMmFlZmQ4MWE2ODkxZjlmMTliYWY0NGQ3NTU5MWZk
ZmE0ODQuLmQyNTliZDE3OWI4Y2M0MjNhMGFlOTQ4NTRjZGMwMmEzNjMwOWQ1NDcgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAKKysrIGIvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcApAQCAtMTksMjMgKzE5LDQ2IEBACiAgKi8KIAog
I2luY2x1ZGUgImNvbmZpZy5oIgorCiAjaW5jbHVkZSAiRm9ybURhdGEuaCIKIAotI2luY2x1ZGUg
IkJsb2IuaCIKKyNpbmNsdWRlICJCbG9iSXRlbS5oIgogI2luY2x1ZGUgIkNocm9tZS5oIgogI2lu
Y2x1ZGUgIkNocm9tZUNsaWVudC5oIgotI2luY2x1ZGUgIkRPTUZvcm1EYXRhLmgiCiAjaW5jbHVk
ZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJGaWxlLmgiCiAjaW5jbHVkZSAiRmlsZVN5c3RlbS5o
IgogI2luY2x1ZGUgIkZvcm1EYXRhQnVpbGRlci5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0
cnkuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCi0jaW5j
bHVkZSAiVVVJRC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyNpZiBFTkFCTEUoQkxPQl9T
TElDRSkKK2NvbnN0IGxvbmcgbG9uZyBGb3JtRGF0YUVsZW1lbnQ6OnRvRW5kT2ZGaWxlID0gLTE7
CisjZW5kaWYKKworRm9ybURhdGFFbGVtZW50OjpGb3JtRGF0YUVsZW1lbnQoUGFzc1JlZlB0cjxC
bG9iSXRlbT4gYmxvYkl0ZW0sIGJvb2wgc2hvdWxkR2VuZXJhdGVGaWxlKQorICAgIDogbV9pdGVt
KGJsb2JJdGVtKQorICAgICwgbV90eXBlKG1faXRlbS0+dG9GaWxlQmxvYkl0ZW0oKSA/IGVuY29k
ZWRGaWxlIDogZGF0YSkKKyAgICAsIG1fZGF0YShtX2l0ZW0tPnRvRGF0YUJsb2JJdGVtKCkpCisg
ICAgLCBtX2ZpbGVuYW1lKG1faXRlbS0+dG9GaWxlQmxvYkl0ZW0oKSA/IG1faXRlbS0+dG9GaWxl
QmxvYkl0ZW0oKS0+cGF0aCgpIDogU3RyaW5nKCkpCisgICAgLCBtX3Nob3VsZEdlbmVyYXRlRmls
ZShzaG91bGRHZW5lcmF0ZUZpbGUpCit7CisjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCisgICAgY29u
c3QgRmlsZVJhbmdlQmxvYkl0ZW0qIHJhbmdlID0gbV9pdGVtLT50b0ZpbGVSYW5nZUJsb2JJdGVt
KCk7CisgICAgaWYgKHJhbmdlKSB7CisgICAgICAgIG1fZmlsZVN0YXJ0ID0gcmFuZ2UtPnN0YXJ0
KCk7CisgICAgICAgIG1fZmlsZUxlbmd0aCA9IHJhbmdlLT5zaXplKCk7CisgICAgICAgIG1fZXhw
ZWN0ZWRGaWxlTW9kaWZpY2F0aW9uVGltZSA9IHJhbmdlLT5zbmFwc2hvdE1vZGlmaWNhdGlvblRp
bWUoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX2ZpbGVTdGFydCA9IDA7CisgICAgICAgIG1f
ZmlsZUxlbmd0aCA9IHRvRW5kT2ZGaWxlOworICAgICAgICBtX2V4cGVjdGVkRmlsZU1vZGlmaWNh
dGlvblRpbWUgPSAwOworICAgIH0KKyNlbmRpZgorfQorCiBpbmxpbmUgRm9ybURhdGE6OkZvcm1E
YXRhKCkKICAgICA6IG1faWRlbnRpZmllcigwKQogICAgICwgbV9oYXNHZW5lcmF0ZWRGaWxlcyhm
YWxzZSkKQEAgLTg1LDcgKzEwOCw3IEBAIFBhc3NSZWZQdHI8Rm9ybURhdGE+IEZvcm1EYXRhOjpj
cmVhdGUoY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IHNpemUpCiBQYXNzUmVmUHRyPEZvcm1EYXRh
PiBGb3JtRGF0YTo6Y3JlYXRlKGNvbnN0IENTdHJpbmcmIHN0cmluZykKIHsKICAgICBSZWZQdHI8
Rm9ybURhdGE+IHJlc3VsdCA9IGNyZWF0ZSgpOwotICAgIHJlc3VsdC0+YXBwZW5kRGF0YShzdHJp
bmcuZGF0YSgpLCBzdHJpbmcubGVuZ3RoKCkpOworICAgIHJlc3VsdC0+YXBwZW5kU3RyaW5nKHN0
cmluZyk7CiAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiB9CiAKQEAgLTk2LDE3ICsxMTks
MTcgQEAgUGFzc1JlZlB0cjxGb3JtRGF0YT4gRm9ybURhdGE6OmNyZWF0ZShjb25zdCBWZWN0b3I8
Y2hhcj4mIHZlY3RvcikKICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0KIAotUGFzc1Jl
ZlB0cjxGb3JtRGF0YT4gRm9ybURhdGE6OmNyZWF0ZShjb25zdCBET01Gb3JtRGF0YSYgZG9tRm9y
bURhdGEpCitQYXNzUmVmUHRyPEZvcm1EYXRhPiBGb3JtRGF0YTo6Y3JlYXRlKGNvbnN0IEJsb2JJ
dGVtTGlzdCYgaXRlbXMsIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcpCiB7CiAgICAgUmVm
UHRyPEZvcm1EYXRhPiByZXN1bHQgPSBjcmVhdGUoKTsKLSAgICByZXN1bHQtPmFwcGVuZERPTUZv
cm1EYXRhKGRvbUZvcm1EYXRhLCBmYWxzZSwgMCk7CisgICAgcmVzdWx0LT5hcHBlbmRJdGVtcyhp
dGVtcywgZW5jb2RpbmcsIGZhbHNlLCAwKTsKICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsK
IH0KIAotUGFzc1JlZlB0cjxGb3JtRGF0YT4gRm9ybURhdGE6OmNyZWF0ZU11bHRpUGFydChjb25z
dCBET01Gb3JtRGF0YSYgZG9tRm9ybURhdGEsIERvY3VtZW50KiBkb2N1bWVudCkKK1Bhc3NSZWZQ
dHI8Rm9ybURhdGE+IEZvcm1EYXRhOjpjcmVhdGVNdWx0aVBhcnQoY29uc3QgQmxvYkl0ZW1MaXN0
JiBpdGVtcywgY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZywgRG9jdW1lbnQqIGRvY3VtZW50
KQogewogICAgIFJlZlB0cjxGb3JtRGF0YT4gcmVzdWx0ID0gY3JlYXRlKCk7Ci0gICAgcmVzdWx0
LT5hcHBlbmRET01Gb3JtRGF0YShkb21Gb3JtRGF0YSwgdHJ1ZSwgZG9jdW1lbnQpOworICAgIHJl
c3VsdC0+YXBwZW5kSXRlbXMoaXRlbXMsIGVuY29kaW5nLCB0cnVlLCBkb2N1bWVudCk7CiAgICAg
cmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiB9CiAKQEAgLTEyNSw4NCArMTQ4LDY4IEBAIFBhc3NS
ZWZQdHI8Rm9ybURhdGE+IEZvcm1EYXRhOjpkZWVwQ29weSgpIGNvbnN0CiAgICAgZm9ybURhdGEt
Pm1fZWxlbWVudHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShuKTsKICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG47ICsraSkgewogICAgICAgICBjb25zdCBGb3JtRGF0YUVsZW1lbnQmIGUgPSBt
X2VsZW1lbnRzW2ldOwotICAgICAgICBzd2l0Y2ggKGUubV90eXBlKSB7Ci0gICAgICAgIGNhc2Ug
Rm9ybURhdGFFbGVtZW50OjpkYXRhOgotICAgICAgICAgICAgZm9ybURhdGEtPm1fZWxlbWVudHMu
YXBwZW5kKEZvcm1EYXRhRWxlbWVudChlLm1fZGF0YSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgRm9ybURhdGFFbGVtZW50OjplbmNvZGVkRmlsZToKLSNpZiBFTkFCTEUoQkxP
Ql9TTElDRSkKLSAgICAgICAgICAgIGZvcm1EYXRhLT5tX2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0
YUVsZW1lbnQoZS5tX2ZpbGVuYW1lLCBlLm1fZmlsZVN0YXJ0LCBlLm1fZmlsZUxlbmd0aCwgZS5t
X2V4cGVjdGVkRmlsZU1vZGlmaWNhdGlvblRpbWUsIGUubV9zaG91bGRHZW5lcmF0ZUZpbGUpKTsK
LSNlbHNlCi0gICAgICAgICAgICBmb3JtRGF0YS0+bV9lbGVtZW50cy5hcHBlbmQoRm9ybURhdGFF
bGVtZW50KGUubV9maWxlbmFtZSwgZS5tX3Nob3VsZEdlbmVyYXRlRmlsZSkpOwotI2VuZGlmCi0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorICAgICAgICBmb3JtRGF0YS0+bV9lbGVtZW50
cy5hcHBlbmQoRm9ybURhdGFFbGVtZW50KGUuaXRlbSgpLT5kZWVwQ29weSgpLCBlLm1fc2hvdWxk
R2VuZXJhdGVGaWxlKSk7CiAgICAgfQogICAgIHJldHVybiBmb3JtRGF0YS5yZWxlYXNlKCk7CiB9
CiAKIHZvaWQgRm9ybURhdGE6OmFwcGVuZERhdGEoY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IHNp
emUpCiB7Ci0gICAgaWYgKG1fZWxlbWVudHMuaXNFbXB0eSgpIHx8IG1fZWxlbWVudHMubGFzdCgp
Lm1fdHlwZSAhPSBGb3JtRGF0YUVsZW1lbnQ6OmRhdGEpCi0gICAgICAgIG1fZWxlbWVudHMuYXBw
ZW5kKEZvcm1EYXRhRWxlbWVudCgpKTsKLSAgICBGb3JtRGF0YUVsZW1lbnQmIGUgPSBtX2VsZW1l
bnRzLmxhc3QoKTsKLSAgICBzaXplX3Qgb2xkU2l6ZSA9IGUubV9kYXRhLnNpemUoKTsKLSAgICBl
Lm1fZGF0YS5ncm93KG9sZFNpemUgKyBzaXplKTsKLSAgICBtZW1jcHkoZS5tX2RhdGEuZGF0YSgp
ICsgb2xkU2l6ZSwgZGF0YSwgc2l6ZSk7CisgICAgbV9lbGVtZW50cy5hcHBlbmQoRm9ybURhdGFF
bGVtZW50KEJ5dGVzQXJyYXlCbG9iSXRlbTo6Y3JlYXRlKHN0YXRpY19jYXN0PGNvbnN0IGNoYXIq
PihkYXRhKSwgc2l6ZSkpKTsKK30KKwordm9pZCBGb3JtRGF0YTo6YXBwZW5kU3RyaW5nKGNvbnN0
IENTdHJpbmcmIHN0cmluZykKK3sKKyAgICBtX2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVsZW1l
bnQoU3RyaW5nQmxvYkl0ZW06OmNyZWF0ZShzdHJpbmcpKSk7CiB9CiAKIHZvaWQgRm9ybURhdGE6
OmFwcGVuZEZpbGUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgYm9vbCBzaG91bGRHZW5lcmF0ZUZp
bGUpCiB7Ci0jaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgbV9lbGVtZW50cy5hcHBlbmQoRm9y
bURhdGFFbGVtZW50KGZpbGVuYW1lLCAwLCBCbG9iOjp0b0VuZE9mRmlsZSwgQmxvYjo6ZG9Ob3RD
aGVja0ZpbGVDaGFuZ2UsIHNob3VsZEdlbmVyYXRlRmlsZSkpOwotI2Vsc2UKLSAgICBtX2VsZW1l
bnRzLmFwcGVuZChGb3JtRGF0YUVsZW1lbnQoZmlsZW5hbWUsIHNob3VsZEdlbmVyYXRlRmlsZSkp
OwotI2VuZGlmCisgICAgbV9lbGVtZW50cy5hcHBlbmQoRm9ybURhdGFFbGVtZW50KEZpbGVCbG9i
SXRlbTo6Y3JlYXRlKGZpbGVuYW1lKSwgc2hvdWxkR2VuZXJhdGVGaWxlKSk7Cit9CisKK3ZvaWQg
Rm9ybURhdGE6OmFwcGVuZEJsb2JJdGVtTGlzdChjb25zdCBCbG9iSXRlbUxpc3QmIGxpc3QpCit7
CisgICAgZm9yIChCbG9iSXRlbUxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIobGlzdC5iZWdpbigp
KTsgaXRlciAhPSBsaXN0LmVuZCgpOyArK2l0ZXIpCisgICAgICAgIG1fZWxlbWVudHMuYXBwZW5k
KCppdGVyKTsKIH0KIAogI2lmIEVOQUJMRShCTE9CX1NMSUNFKQogdm9pZCBGb3JtRGF0YTo6YXBw
ZW5kRmlsZVJhbmdlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGxvbmcgbG9uZyBzdGFydCwgbG9u
ZyBsb25nIGxlbmd0aCwgZG91YmxlIGV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZSwgYm9vbCBzaG91
bGRHZW5lcmF0ZUZpbGUpCiB7Ci0gICAgbV9lbGVtZW50cy5hcHBlbmQoRm9ybURhdGFFbGVtZW50
KGZpbGVuYW1lLCBzdGFydCwgbGVuZ3RoLCBleHBlY3RlZE1vZGlmaWNhdGlvblRpbWUsIHNob3Vs
ZEdlbmVyYXRlRmlsZSkpOworICAgIGlmIChsZW5ndGggPT0gRm9ybURhdGFFbGVtZW50Ojp0b0Vu
ZE9mRmlsZSkgeworICAgICAgICBBU1NFUlQoIXN0YXJ0KTsKKyAgICAgICAgQVNTRVJUKCFleHBl
Y3RlZE1vZGlmaWNhdGlvblRpbWUpOworICAgICAgICBtX2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0
YUVsZW1lbnQoRmlsZUJsb2JJdGVtOjpjcmVhdGUoZmlsZW5hbWUpLCBzaG91bGRHZW5lcmF0ZUZp
bGUpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9lbGVtZW50cy5hcHBlbmQoRm9ybURhdGFFbGVt
ZW50KEZpbGVSYW5nZUJsb2JJdGVtOjpjcmVhdGUoZmlsZW5hbWUsIHN0YXJ0LCBsZW5ndGgsIGV4
cGVjdGVkTW9kaWZpY2F0aW9uVGltZSksIHNob3VsZEdlbmVyYXRlRmlsZSkpOwogfQogI2VuZGlm
CiAKLXZvaWQgRm9ybURhdGE6OmFwcGVuZERPTUZvcm1EYXRhKGNvbnN0IERPTUZvcm1EYXRhJiBk
b21Gb3JtRGF0YSwgYm9vbCBpc011bHRpUGFydEZvcm0sIERvY3VtZW50KiBkb2N1bWVudCkKK3Zv
aWQgRm9ybURhdGE6OmFwcGVuZEl0ZW1zKGNvbnN0IEJsb2JJdGVtTGlzdCYgaXRlbXMsIGNvbnN0
IFRleHRFbmNvZGluZyYgZW5jb2RpbmcsIGJvb2wgaXNNdWx0aVBhcnRGb3JtLCBEb2N1bWVudCog
ZG9jdW1lbnQpCiB7CiAgICAgRm9ybURhdGFCdWlsZGVyIGZvcm1EYXRhQnVpbGRlcjsKICAgICBp
ZiAoaXNNdWx0aVBhcnRGb3JtKQogICAgICAgICBtX2JvdW5kYXJ5ID0gZm9ybURhdGFCdWlsZGVy
LmdlbmVyYXRlVW5pcXVlQm91bmRhcnlTdHJpbmcoKTsKIAogICAgIFZlY3RvcjxjaGFyPiBlbmNv
ZGVkRGF0YTsKLSAgICBUZXh0RW5jb2RpbmcgZW5jb2RpbmcgPSBkb21Gb3JtRGF0YS5lbmNvZGlu
ZygpOwogCi0gICAgY29uc3QgVmVjdG9yPEZvcm1EYXRhTGlzdDo6SXRlbT4mIGxpc3QgPSBkb21G
b3JtRGF0YS5saXN0KCk7Ci0gICAgc2l6ZV90IGZvcm1EYXRhTGlzdFNpemUgPSBsaXN0LnNpemUo
KTsKKyAgICBzaXplX3QgZm9ybURhdGFMaXN0U2l6ZSA9IGl0ZW1zLnNpemUoKTsKICAgICBBU1NF
UlQoIShmb3JtRGF0YUxpc3RTaXplICUgMikpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
Zm9ybURhdGFMaXN0U2l6ZTsgaSArPSAyKSB7Ci0gICAgICAgIGNvbnN0IEZvcm1EYXRhTGlzdDo6
SXRlbSYga2V5ID0gbGlzdFtpXTsKLSAgICAgICAgY29uc3QgRm9ybURhdGFMaXN0OjpJdGVtJiB2
YWx1ZSA9IGxpc3RbaSArIDFdOworICAgICAgICBjb25zdCBTdHJpbmdCbG9iSXRlbSoga2V5ID0g
aXRlbXNbaV0tPnRvU3RyaW5nQmxvYkl0ZW0oKTsKKyAgICAgICAgY29uc3QgUmVmUHRyPEJsb2JJ
dGVtPiB2YWx1ZSA9IGl0ZW1zW2kgKyAxXTsKKyAgICAgICAgQVNTRVJUKGtleSk7CiAgICAgICAg
IGlmIChpc011bHRpUGFydEZvcm0pIHsKICAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBoZWFkZXI7
Ci0gICAgICAgICAgICBmb3JtRGF0YUJ1aWxkZXIuYmVnaW5NdWx0aVBhcnRIZWFkZXIoaGVhZGVy
LCBtX2JvdW5kYXJ5LmRhdGEoKSwga2V5LmRhdGEoKSk7CisgICAgICAgICAgICBmb3JtRGF0YUJ1
aWxkZXIuYmVnaW5NdWx0aVBhcnRIZWFkZXIoaGVhZGVyLCBtX2JvdW5kYXJ5LmRhdGEoKSwga2V5
LT5jc3RyKCkpOwogCiAgICAgICAgICAgICBib29sIHNob3VsZEdlbmVyYXRlRmlsZSA9IGZhbHNl
OwogICAgICAgICAgICAgLy8gSWYgdGhlIGN1cnJlbnQgdHlwZSBpcyBGSUxFLCB0aGVuIHdlIGFs
c28gbmVlZCB0byBpbmNsdWRlIHRoZSBmaWxlbmFtZQotICAgICAgICAgICAgaWYgKHZhbHVlLmJs
b2IoKSkgewotICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgcGF0aCA9IHZhbHVlLmJsb2Io
KS0+cGF0aCgpOwotI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgICAgICAgICAgICAgIFN0cmlu
ZyBmaWxlTmFtZTsKLSAgICAgICAgICAgICAgICBpZiAodmFsdWUuYmxvYigpLT5pc0ZpbGUoKSkK
LSAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWUgPSBzdGF0aWNfY2FzdDxGaWxlKj4odmFsdWUu
YmxvYigpKS0+ZmlsZU5hbWUoKTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAgICAgLy8gSWYgYSBibG9iIGlzIHNsaWNlZCBmcm9tIGEgZmlsZSwgaXQgZG9lcyBub3Qg
aGF2ZSB0aGUgZmlsZW5hbWUuIEluIHRoaXMgY2FzZSwgbGV0J3MgcHJvZHVjZSBhIHVuaXF1ZSBm
aWxlbmFtZS4KLSAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWUgPSAiQmxvYiIgKyBjcmVhdGVD
YW5vbmljYWxVVUlEU3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lLnJlcGxh
Y2UoIi0iLCAiIik7IC8vIEZvciBzYWZ0eSwgcmVtb3ZlICctJyBmcm9tIHRoZSBmaWxlbmFtZSBz
bmNlIHNvbWUgc2VydmVycyBtYXkgbm90IGxpa2UgaXQuCi0gICAgICAgICAgICAgICAgfQotI2Vs
c2UKLSAgICAgICAgICAgICAgICBBU1NFUlQodmFsdWUuYmxvYigpLT5pc0ZpbGUoKSk7Ci0gICAg
ICAgICAgICAgICAgU3RyaW5nIGZpbGVOYW1lID0gc3RhdGljX2Nhc3Q8RmlsZSo+KHZhbHVlLmJs
b2IoKSktPmZpbGVOYW1lKCk7Ci0jZW5kaWYKKyAgICAgICAgICAgIGlmICh2YWx1ZS0+dG9GaWxl
QmxvYkl0ZW0oKSkgeworICAgICAgICAgICAgICAgIGNvbnN0IEZpbGVCbG9iSXRlbSogZmlsZSA9
IHZhbHVlLT50b0ZpbGVCbG9iSXRlbSgpOworICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYg
cGF0aCA9IGZpbGUtPnBhdGgoKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgZmlsZU5hbWUgPSBm
aWxlLT5uYW1lKCk7CiAKICAgICAgICAgICAgICAgICAvLyBMZXQgdGhlIGFwcGxpY2F0aW9uIHNw
ZWNpZnkgYSBmaWxlbmFtZSBpZiBpdCdzIGdvaW5nIHRvIGdlbmVyYXRlIGEgcmVwbGFjZW1lbnQg
ZmlsZSBmb3IgdGhlIHVwbG9hZC4KICAgICAgICAgICAgICAgICBpZiAoIXBhdGguaXNFbXB0eSgp
KSB7CkBAIC0yMTcsOSArMjI0LDkgQEAgdm9pZCBGb3JtRGF0YTo6YXBwZW5kRE9NRm9ybURhdGEo
Y29uc3QgRE9NRm9ybURhdGEmIGRvbUZvcm1EYXRhLCBib29sIGlzTXVsdGlQYXIKICAgICAgICAg
ICAgICAgICAvLyBXZSBoYXZlIHRvIGluY2x1ZGUgdGhlIGZpbGVuYW1lPSIuLiIgcGFydCBpbiB0
aGUgaGVhZGVyLCBldmVuIGlmIHRoZSBmaWxlbmFtZSBpcyBlbXB0eQogICAgICAgICAgICAgICAg
IGZvcm1EYXRhQnVpbGRlci5hZGRGaWxlbmFtZVRvTXVsdGlQYXJ0SGVhZGVyKGhlYWRlciwgZW5j
b2RpbmcsIGZpbGVOYW1lKTsKIAotICAgICAgICAgICAgICAgIC8vIElmIGEgYmxvYiBpcyBzbGlj
ZWQgZnJvbSBhIGZpbGUsIGRvIG5vdCBhZGQgdGhlIGNvbnRlbnQgdHlwZS4gCisgICAgICAgICAg
ICAgICAgLy8gSWYgdGhlIGl0ZW0gaXMgc2xpY2VkIGZyb20gYSBmaWxlLCBkbyBub3QgYWRkIHRo
ZSBjb250ZW50IHR5cGUuCiAjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgICAgICAgICAgICAg
aWYgKCFmaWxlTmFtZS5pc0VtcHR5KCkgJiYgdmFsdWUuYmxvYigpLT5pc0ZpbGUoKSkgeworICAg
ICAgICAgICAgICAgIGlmICghZmlsZU5hbWUuaXNFbXB0eSgpICYmICF2YWx1ZS0+dG9GaWxlUmFu
Z2VCbG9iSXRlbSgpKSB7CiAjZWxzZQogICAgICAgICAgICAgICAgIGlmICghZmlsZU5hbWUuaXNF
bXB0eSgpKSB7CiAjZW5kaWYKQEAgLTIzNywyNSArMjQ0LDIwIEBAIHZvaWQgRm9ybURhdGE6OmFw
cGVuZERPTUZvcm1EYXRhKGNvbnN0IERPTUZvcm1EYXRhJiBkb21Gb3JtRGF0YSwgYm9vbCBpc011
bHRpUGFyCiAKICAgICAgICAgICAgIC8vIEFwcGVuZCBib2R5CiAgICAgICAgICAgICBhcHBlbmRE
YXRhKGhlYWRlci5kYXRhKCksIGhlYWRlci5zaXplKCkpOwotICAgICAgICAgICAgaWYgKHNpemVf
dCBkYXRhU2l6ZSA9IHZhbHVlLmRhdGEoKS5sZW5ndGgoKSkKLSAgICAgICAgICAgICAgICBhcHBl
bmREYXRhKHZhbHVlLmRhdGEoKS5kYXRhKCksIGRhdGFTaXplKTsKLSAgICAgICAgICAgIGVsc2Ug
aWYgKHZhbHVlLmJsb2IoKSAmJiAhdmFsdWUuYmxvYigpLT5wYXRoKCkuaXNFbXB0eSgpKQotI2lm
IEVOQUJMRShCTE9CX1NMSUNFKQotICAgICAgICAgICAgICAgIGFwcGVuZEZpbGVSYW5nZSh2YWx1
ZS5ibG9iKCktPnBhdGgoKSwgdmFsdWUuYmxvYigpLT5zdGFydCgpLCB2YWx1ZS5ibG9iKCktPmxl
bmd0aCgpLCB2YWx1ZS5ibG9iKCktPm1vZGlmaWNhdGlvblRpbWUoKSwgc2hvdWxkR2VuZXJhdGVG
aWxlKTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgYXBwZW5kRmlsZSh2YWx1ZS5ibG9iKCktPnBh
dGgoKSwgc2hvdWxkR2VuZXJhdGVGaWxlKTsKLSNlbmRpZgotCisgICAgICAgICAgICBtX2VsZW1l
bnRzLmFwcGVuZChGb3JtRGF0YUVsZW1lbnQodmFsdWUsIHNob3VsZEdlbmVyYXRlRmlsZSkpOwog
ICAgICAgICAgICAgYXBwZW5kRGF0YSgiXHJcbiIsIDIpOwogICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgLy8gT21pdCB0aGUgbmFtZSAiaXNpbmRleCIgaWYgaXQncyB0aGUgZmlyc3QgZm9y
bSBkYXRhIGVsZW1lbnQuCiAgICAgICAgICAgICAvLyBGSVhNRTogV2h5IGlzIHRoaXMgYSBnb29k
IHJ1bGU/IElzIHRoaXMgb2Jzb2xldGUgbm93PwotICAgICAgICAgICAgaWYgKGVuY29kZWREYXRh
LmlzRW1wdHkoKSAmJiBrZXkuZGF0YSgpID09ICJpc2luZGV4IikKLSAgICAgICAgICAgICAgICBG
b3JtRGF0YUJ1aWxkZXI6OmVuY29kZVN0cmluZ0FzRm9ybURhdGEoZW5jb2RlZERhdGEsIHZhbHVl
LmRhdGEoKSk7CisgICAgICAgICAgICBjb25zdCBTdHJpbmdCbG9iSXRlbSogc3RyaW5nVmFsdWUg
PSB2YWx1ZS0+dG9TdHJpbmdCbG9iSXRlbSgpOworICAgICAgICAgICAgaWYgKCFzdHJpbmdWYWx1
ZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChlbmNvZGVkRGF0
YS5pc0VtcHR5KCkgJiYga2V5LT5jc3RyKCkgPT0gImlzaW5kZXgiKQorICAgICAgICAgICAgICAg
IEZvcm1EYXRhQnVpbGRlcjo6ZW5jb2RlU3RyaW5nQXNGb3JtRGF0YShlbmNvZGVkRGF0YSwgc3Ry
aW5nVmFsdWUtPmNzdHIoKSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZm9y
bURhdGFCdWlsZGVyLmFkZEtleVZhbHVlUGFpckFzRm9ybURhdGEoZW5jb2RlZERhdGEsIGtleS5k
YXRhKCksIHZhbHVlLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgZm9ybURhdGFCdWlsZGVyLmFk
ZEtleVZhbHVlUGFpckFzRm9ybURhdGEoZW5jb2RlZERhdGEsIGtleS0+Y3N0cigpLCBzdHJpbmdW
YWx1ZS0+Y3N0cigpKTsKICAgICAgICAgfQotICAgIH0gCisgICAgfQogCiAgICAgaWYgKGlzTXVs
dGlQYXJ0Rm9ybSkKICAgICAgICAgZm9ybURhdGFCdWlsZGVyLmFkZEJvdW5kYXJ5VG9NdWx0aVBh
cnRIZWFkZXIoZW5jb2RlZERhdGEsIG1fYm91bmRhcnkuZGF0YSgpLCB0cnVlKTsKQEAgLTI3MCwx
MiArMjcyLDggQEAgdm9pZCBGb3JtRGF0YTo6ZmxhdHRlbihWZWN0b3I8Y2hhcj4mIGRhdGEpIGNv
bnN0CiAgICAgc2l6ZV90IG4gPSBtX2VsZW1lbnRzLnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG47ICsraSkgewogICAgICAgICBjb25zdCBGb3JtRGF0YUVsZW1lbnQmIGUgPSBt
X2VsZW1lbnRzW2ldOwotICAgICAgICBpZiAoZS5tX3R5cGUgPT0gRm9ybURhdGFFbGVtZW50Ojpk
YXRhKSB7Ci0gICAgICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IGRhdGEuc2l6ZSgpOwotICAgICAg
ICAgICAgc2l6ZV90IGRlbHRhID0gZS5tX2RhdGEuc2l6ZSgpOwotICAgICAgICAgICAgZGF0YS5n
cm93KG9sZFNpemUgKyBkZWx0YSk7Ci0gICAgICAgICAgICBtZW1jcHkoZGF0YS5kYXRhKCkgKyBv
bGRTaXplLCBlLm1fZGF0YS5kYXRhKCksIGRlbHRhKTsKLSAgICAgICAgfQorICAgICAgICBpZiAo
ZS5tX3R5cGUgPT0gRm9ybURhdGFFbGVtZW50OjpkYXRhKQorICAgICAgICAgICAgZGF0YS5hcHBl
bmQoZS5tX2RhdGEuZGF0YSgpLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGUubV9kYXRhLnNpemUoKSkp
OwogICAgIH0KIH0KIApAQCAtMjg5LDEwICsyODcsMTAgQEAgU3RyaW5nIEZvcm1EYXRhOjpmbGF0
dGVuVG9TdHJpbmcoKSBjb25zdAogdm9pZCBGb3JtRGF0YTo6Z2VuZXJhdGVGaWxlcyhEb2N1bWVu
dCogZG9jdW1lbnQpCiB7CiAgICAgQVNTRVJUKCFtX2hhc0dlbmVyYXRlZEZpbGVzKTsKLSAgICAK
KwogICAgIGlmIChtX2hhc0dlbmVyYXRlZEZpbGVzKQogICAgICAgICByZXR1cm47Ci0gICAgCisK
ICAgICBQYWdlKiBwYWdlID0gZG9jdW1lbnQtPnBhZ2UoKTsKICAgICBpZiAoIXBhZ2UpCiAgICAg
ICAgIHJldHVybjsKQEAgLTMwMiw3ICszMDAsNyBAQCB2b2lkIEZvcm1EYXRhOjpnZW5lcmF0ZUZp
bGVzKERvY3VtZW50KiBkb2N1bWVudCkKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG47ICsr
aSkgewogICAgICAgICBGb3JtRGF0YUVsZW1lbnQmIGUgPSBtX2VsZW1lbnRzW2ldOwogICAgICAg
ICBpZiAoZS5tX3R5cGUgPT0gRm9ybURhdGFFbGVtZW50OjplbmNvZGVkRmlsZSAmJiBlLm1fc2hv
dWxkR2VuZXJhdGVGaWxlKSB7Ci0gICAgICAgICAgICBlLm1fZ2VuZXJhdGVkRmlsZW5hbWUgPSBj
bGllbnQtPmdlbmVyYXRlUmVwbGFjZW1lbnRGaWxlKGUubV9maWxlbmFtZSk7CisgICAgICAgICAg
ICBlLm1fZ2VuZXJhdGVkRmlsZW5hbWUgPSBjbGllbnQtPmdlbmVyYXRlUmVwbGFjZW1lbnRGaWxl
KGUuaXRlbSgpLT50b0ZpbGVCbG9iSXRlbSgpLT5wYXRoKCkpOwogICAgICAgICAgICAgbV9oYXNH
ZW5lcmF0ZWRGaWxlcyA9IHRydWU7CiAgICAgICAgIH0KICAgICB9CkBAIC0zMTIsNyArMzEwLDcg
QEAgdm9pZCBGb3JtRGF0YTo6cmVtb3ZlR2VuZXJhdGVkRmlsZXNJZk5lZWRlZCgpCiB7CiAgICAg
aWYgKCFtX2hhc0dlbmVyYXRlZEZpbGVzKQogICAgICAgICByZXR1cm47Ci0gICAgICAgIAorCiAg
ICAgc2l6ZV90IG4gPSBtX2VsZW1lbnRzLnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG47ICsraSkgewogICAgICAgICBGb3JtRGF0YUVsZW1lbnQmIGUgPSBtX2VsZW1lbnRzW2ld
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmggYi9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuaAppbmRleCBhNDM5MDIzNDc5NmEwZTJmMTRm
NWQzNDlmNWRkMGVmZmMwYTRiN2NkLi5jYmI1ZjJhN2VjMmViNjlhZTBhY2EyMGYyYzI3ZTg1ZDUz
ZjdkMjFlIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuaAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuaApAQCAtMjAsNzQgKzIwLDg5
IEBACiAjaWZuZGVmIEZvcm1EYXRhX2gKICNkZWZpbmUgRm9ybURhdGFfaAogCisjaW5jbHVkZSAi
QmxvYkl0ZW0uaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLWNsYXNzIERPTUZvcm1EYXRhOwogY2xhc3MgRG9jdW1lbnQ7CitjbGFzcyBUZXh0RW5j
b2Rpbmc7CiAKKy8vIEEgd3JhcHBlciBjbGFzcyBvZiBCbG9iSXRlbSBmb3IgRm9ybURhdGEuCiBj
bGFzcyBGb3JtRGF0YUVsZW1lbnQgewogcHVibGljOgotICAgIEZvcm1EYXRhRWxlbWVudCgpIDog
bV90eXBlKGRhdGEpIHsgfQotICAgIEZvcm1EYXRhRWxlbWVudChjb25zdCBWZWN0b3I8Y2hhcj4m
IGFycmF5KSA6IG1fdHlwZShkYXRhKSwgbV9kYXRhKGFycmF5KSB7IH0KLSNpZiBFTkFCTEUoQkxP
Ql9TTElDRSkKLSAgICBGb3JtRGF0YUVsZW1lbnQoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgbG9u
ZyBsb25nIGZpbGVTdGFydCwgbG9uZyBsb25nIGZpbGVMZW5ndGgsIGRvdWJsZSBleHBlY3RlZEZp
bGVNb2RpZmljYXRpb25UaW1lLCBib29sIHNob3VsZEdlbmVyYXRlRmlsZSkgOiBtX3R5cGUoZW5j
b2RlZEZpbGUpLCBtX2ZpbGVuYW1lKGZpbGVuYW1lKSwgbV9maWxlU3RhcnQoZmlsZVN0YXJ0KSwg
bV9maWxlTGVuZ3RoKGZpbGVMZW5ndGgpLCBtX2V4cGVjdGVkRmlsZU1vZGlmaWNhdGlvblRpbWUo
ZXhwZWN0ZWRGaWxlTW9kaWZpY2F0aW9uVGltZSksIG1fc2hvdWxkR2VuZXJhdGVGaWxlKHNob3Vs
ZEdlbmVyYXRlRmlsZSkgeyB9Ci0jZWxzZQotICAgIEZvcm1EYXRhRWxlbWVudChjb25zdCBTdHJp
bmcmIGZpbGVuYW1lLCBib29sIHNob3VsZEdlbmVyYXRlRmlsZSkgOiBtX3R5cGUoZW5jb2RlZEZp
bGUpLCBtX2ZpbGVuYW1lKGZpbGVuYW1lKSwgbV9zaG91bGRHZW5lcmF0ZUZpbGUoc2hvdWxkR2Vu
ZXJhdGVGaWxlKSB7IH0KLSNlbmRpZgorICAgIEZvcm1EYXRhRWxlbWVudCgpIDogbV9kYXRhKDAp
IHsgfQorICAgIEZvcm1EYXRhRWxlbWVudChQYXNzUmVmUHRyPEJsb2JJdGVtPiBibG9iSXRlbSwg
Ym9vbCBzaG91bGRHZW5lcmF0ZUZpbGUgPSBmYWxzZSk7CisKKyAgICBjb25zdCBCbG9iSXRlbSog
aXRlbSgpIGNvbnN0IHsgcmV0dXJuIG1faXRlbS5nZXQoKTsgfQorCisgICAgUmVmUHRyPEJsb2JJ
dGVtPiBtX2l0ZW07CiAKKyAgICAvLyBGSVhNRTogY2xlYW4gbWUgdXAuICBDb2RlIGJlbG93IGFy
ZSBtb3N0bHkga2VwdCBmb3IgY29tcGF0aWJpbGl0eS4KICAgICBlbnVtIHsgZGF0YSwgZW5jb2Rl
ZEZpbGUgfSBtX3R5cGU7Ci0gICAgVmVjdG9yPGNoYXI+IG1fZGF0YTsKKyAgICBjb25zdCBzdHJ1
Y3QgQmxvYkl0ZW1XcmFwcGVyIHsKKyAgICAgICAgQmxvYkl0ZW1XcmFwcGVyKGNvbnN0IEJsb2JJ
dGVtV3JhcHBlciYgdikgOiBtX2l0ZW0odi5tX2l0ZW0pIHsgfQorICAgICAgICBCbG9iSXRlbVdy
YXBwZXIoY29uc3QgRGF0YUJsb2JJdGVtKiBpdGVtKSA6IG1faXRlbShpdGVtKSB7IH0KKyAgICAg
ICAgc2l6ZV90IHNpemUoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIW1faXRl
bSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxzaXplX3Q+KG1faXRlbS0+c2l6ZSgpKTsKKyAgICAgICAgfQorICAgICAgICBjb25zdCBj
aGFyKiBkYXRhKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFtX2l0ZW0pCisg
ICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gbV9pdGVtLT5kYXRh
KCk7CisgICAgICAgIH0KKyAgICAgICAgY2hhciogcmVsZWFzZUJ1ZmZlcigpIGNvbnN0CisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmICghbV9pdGVtKQorICAgICAgICAgICAgICAgIHJldHVybiAw
OworICAgICAgICAgICAgcmV0dXJuIG1faXRlbS0+cmVsZWFzZUJ1ZmZlcigpOworICAgICAgICB9
CisgICAgICAgIGNvbnN0IERhdGFCbG9iSXRlbSogbV9pdGVtOworICAgIH0gbV9kYXRhOwogICAg
IFN0cmluZyBtX2ZpbGVuYW1lOwogI2lmIEVOQUJMRShCTE9CX1NMSUNFKQogICAgIGxvbmcgbG9u
ZyBtX2ZpbGVTdGFydDsKICAgICBsb25nIGxvbmcgbV9maWxlTGVuZ3RoOwogICAgIGRvdWJsZSBt
X2V4cGVjdGVkRmlsZU1vZGlmaWNhdGlvblRpbWU7CisKKyAgICBzdGF0aWMgY29uc3QgbG9uZyBs
b25nIHRvRW5kT2ZGaWxlOwogI2VuZGlmCisKICAgICBTdHJpbmcgbV9nZW5lcmF0ZWRGaWxlbmFt
ZTsKICAgICBib29sIG1fc2hvdWxkR2VuZXJhdGVGaWxlOwogfTsKIAogaW5saW5lIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBGb3JtRGF0YUVsZW1lbnQmIGEsIGNvbnN0IEZvcm1EYXRhRWxlbWVudCYg
YikKIHsKLSAgICBpZiAoJmEgPT0gJmIpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAg
IGlmIChhLm1fdHlwZSAhPSBiLm1fdHlwZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlm
IChhLm1fZGF0YSAhPSBiLm1fZGF0YSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotI2lmIEVOQUJM
RShCTE9CX1NMSUNFKQotICAgIGlmIChhLm1fZmlsZW5hbWUgIT0gYi5tX2ZpbGVuYW1lIHx8IGEu
bV9maWxlU3RhcnQgIT0gYi5tX2ZpbGVTdGFydCB8fCBhLm1fZmlsZUxlbmd0aCAhPSBiLm1fZmls
ZUxlbmd0aCB8fCBhLm1fZXhwZWN0ZWRGaWxlTW9kaWZpY2F0aW9uVGltZSAhPSBiLm1fZXhwZWN0
ZWRGaWxlTW9kaWZpY2F0aW9uVGltZSkKLSNlbHNlCi0gICAgaWYgKGEubV9maWxlbmFtZSAhPSBi
Lm1fZmlsZW5hbWUpCi0jZW5kaWYKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJu
IHRydWU7CisgICAgcmV0dXJuIGEuaXRlbSgpLT5lcXVhbHMoYi5pdGVtKCkpOwogfQotIAorCiBp
bmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZvcm1EYXRhRWxlbWVudCYgYSwgY29uc3QgRm9y
bURhdGFFbGVtZW50JiBiKQogewogICAgIHJldHVybiAhKGEgPT0gYik7CiB9Ci0gCisKIGNsYXNz
IEZvcm1EYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8Rm9ybURhdGE+IHsKIHB1YmxpYzoKICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxGb3JtRGF0YT4gY3JlYXRlKCk7CiAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8Rm9ybURhdGE+IGNyZWF0ZShjb25zdCB2b2lkKiwgc2l6ZV90KTsKICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxGb3JtRGF0YT4gY3JlYXRlKGNvbnN0IFdURjo6Q1N0cmluZyYpOwogICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEZvcm1EYXRhPiBjcmVhdGUoY29uc3QgVmVjdG9yPGNoYXI+Jik7Ci0gICAg
c3RhdGljIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGNyZWF0ZShjb25zdCBET01Gb3JtRGF0YSYpOwot
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZvcm1EYXRhPiBjcmVhdGVNdWx0aVBhcnQoY29uc3QgRE9N
Rm9ybURhdGEmLCBEb2N1bWVudCopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZvcm1EYXRhPiBj
cmVhdGUoY29uc3QgQmxvYkl0ZW1MaXN0JiwgY29uc3QgVGV4dEVuY29kaW5nJik7CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGNyZWF0ZU11bHRpUGFydChjb25zdCBCbG9iSXRlbUxp
c3QmLCBjb25zdCBUZXh0RW5jb2RpbmcmLCBEb2N1bWVudCopOwogICAgIFBhc3NSZWZQdHI8Rm9y
bURhdGE+IGNvcHkoKSBjb25zdDsKICAgICBQYXNzUmVmUHRyPEZvcm1EYXRhPiBkZWVwQ29weSgp
IGNvbnN0OwogICAgIH5Gb3JtRGF0YSgpOwotICAgIAorCiAgICAgdm9pZCBhcHBlbmREYXRhKGNv
bnN0IHZvaWQqIGRhdGEsIHNpemVfdCk7CisgICAgdm9pZCBhcHBlbmRCbG9iSXRlbUxpc3QoY29u
c3QgQmxvYkl0ZW1MaXN0Jik7CisgICAgdm9pZCBhcHBlbmRTdHJpbmcoY29uc3QgQ1N0cmluZyYp
OwogICAgIHZvaWQgYXBwZW5kRmlsZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBib29sIHNob3Vs
ZEdlbmVyYXRlRmlsZSA9IGZhbHNlKTsKICNpZiBFTkFCTEUoQkxPQl9TTElDRSkKICAgICB2b2lk
IGFwcGVuZEZpbGVSYW5nZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBsb25nIGxvbmcgc3RhcnQs
IGxvbmcgbG9uZyBsZW5ndGgsIGRvdWJsZSBleHBlY3RlZE1vZGlmaWNhdGlvblRpbWUsIGJvb2wg
c2hvdWxkR2VuZXJhdGVGaWxlID0gZmFsc2UpOwpAQCAtMTE1LDkgKzEzMCwxMCBAQCBwcml2YXRl
OgogICAgIEZvcm1EYXRhKCk7CiAgICAgRm9ybURhdGEoY29uc3QgRm9ybURhdGEmKTsKIAotICAg
IHZvaWQgYXBwZW5kRE9NRm9ybURhdGEoY29uc3QgRE9NRm9ybURhdGEmIGRvbUZvcm1EYXRhLCBi
b29sIGlzTXVsdGlQYXJ0Rm9ybSwgRG9jdW1lbnQqIGRvY3VtZW50KTsKKyAgICB2b2lkIGFwcGVu
ZEl0ZW1zKGNvbnN0IEJsb2JJdGVtTGlzdCYsIGNvbnN0IFRleHRFbmNvZGluZyYsIGJvb2wgaXNN
dWx0aVBhcnRGb3JtLCBEb2N1bWVudCopOwogCiAgICAgVmVjdG9yPEZvcm1EYXRhRWxlbWVudD4g
bV9lbGVtZW50czsKKwogICAgIGludDY0X3QgbV9pZGVudGlmaWVyOwogICAgIGJvb2wgbV9oYXNH
ZW5lcmF0ZWRGaWxlczsKICAgICBib29sIG1fYWx3YXlzU3RyZWFtOwpAQCAtMTMxLDcgKzE0Nyw3
IEBAIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9ybURhdGEmIGEsIGNvbnN0IEZvcm1E
YXRhJiBiKQogCiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZvcm1EYXRhJiBhLCBjb25z
dCBGb3JtRGF0YSYgYikKIHsKLSAgICByZXR1cm4gYS5lbGVtZW50cygpICE9IGIuZWxlbWVudHMo
KTsKKyAgICByZXR1cm4gIShhID09IGIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL0Zvcm1EYXRhU3RyZWFtTWFj
Lm1tIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9Gb3JtRGF0YVN0cmVhbU1hYy5tbQpp
bmRleCAyN2VjZmQwOGFkNWFhYWI4NzU2ZmE1OTZkOTk2YmQyZjZlYzVkMDNmLi4xZTQ4ZTJmOGZi
YjJmZmU2ZTc3OWVhYjEwYTY3MTIwNDE3NDZhMDQyIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvbWFjL0Zvcm1EYXRhU3RyZWFtTWFjLm1tCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9tYWMvRm9ybURhdGFTdHJlYW1NYWMubW0KQEAgLTMxLDcgKzMxLDYgQEAKICNp
bXBvcnQgImNvbmZpZy5oIgogI2ltcG9ydCAiRm9ybURhdGFTdHJlYW1NYWMuaCIKIAotI2ltcG9y
dCAiQmxvYi5oIgogI2ltcG9ydCAiRmlsZVN5c3RlbS5oIgogI2ltcG9ydCAiRm9ybURhdGEuaCIK
ICNpbXBvcnQgIlJlc291cmNlSGFuZGxlLmgiCkBAIC0xNDIsNyArMTQxLDcgQEAgc3RhdGljIHZv
aWQgY2xvc2VDdXJyZW50U3RyZWFtKEZvcm1TdHJlYW1GaWVsZHMgKmZvcm0pCiAgICAgICAgIENG
UmVsZWFzZShmb3JtLT5jdXJyZW50U3RyZWFtKTsKICAgICAgICAgZm9ybS0+Y3VycmVudFN0cmVh
bSA9IE5VTEw7CiAjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgICAgIGZvcm0tPmN1cnJlbnRT
dHJlYW1SYW5nZUxlbmd0aCA9IEJsb2I6OnRvRW5kT2ZGaWxlOworICAgICAgICBmb3JtLT5jdXJy
ZW50U3RyZWFtUmFuZ2VMZW5ndGggPSBGb3JtRGF0YUVsZW1lbnQ6OnRvRW5kT2ZGaWxlOwogI2Vu
ZGlmCiAgICAgfQogICAgIGlmIChmb3JtLT5jdXJyZW50RGF0YSkgewpAQCAtMTYxLDIxICsxNjAs
MTcgQEAgc3RhdGljIGJvb2wgYWR2YW5jZUN1cnJlbnRTdHJlYW0oRm9ybVN0cmVhbUZpZWxkcyog
Zm9ybSkKIAogICAgIC8vIENyZWF0ZSB0aGUgbmV3IHN0cmVhbS4KICAgICBGb3JtRGF0YUVsZW1l
bnQmIG5leHRJbnB1dCA9IGZvcm0tPnJlbWFpbmluZ0VsZW1lbnRzLmxhc3QoKTsKKworICAgIC8v
IENoZWNrIGlmIHRoZSB1bmRlcmx5aW5nIGRhdGEgaGFzIGJlY29tZSBzdGFsZSAoZS5nLiB0aGUg
ZmlsZSBoYXMgYmVlbiBjaGFuZ2VkIHNpbmNlIGl0cyBzbmFwc2hvdCBoYXMgYmVlbiB0YWtlbikg
b3Igbm90LgorICAgIGlmICghbmV4dElucHV0Lm1faXRlbS0+aXNWYWxpZCgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKICAgICBpZiAobmV4dElucHV0Lm1fdHlwZSA9PSBGb3JtRGF0YUVsZW1l
bnQ6OmRhdGEpIHsKICAgICAgICAgc2l6ZV90IHNpemUgPSBuZXh0SW5wdXQubV9kYXRhLnNpemUo
KTsKICAgICAgICAgY2hhciogZGF0YSA9IG5leHRJbnB1dC5tX2RhdGEucmVsZWFzZUJ1ZmZlcigp
OwogICAgICAgICBmb3JtLT5jdXJyZW50U3RyZWFtID0gQ0ZSZWFkU3RyZWFtQ3JlYXRlV2l0aEJ5
dGVzTm9Db3B5KDAsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUludDgqPihkYXRhKSwgc2l6ZSwg
a0NGQWxsb2NhdG9yTnVsbCk7CiAgICAgICAgIGZvcm0tPmN1cnJlbnREYXRhID0gZGF0YTsKICAg
ICB9IGVsc2UgewotI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgICAgICAvLyBDaGVjayBpZiB0
aGUgZmlsZSBoYXMgYmVlbiBjaGFuZ2VkIG9yIG5vdCBpZiByZXF1aXJlZC4KLSAgICAgICAgaWYg
KG5leHRJbnB1dC5tX2V4cGVjdGVkRmlsZU1vZGlmaWNhdGlvblRpbWUgIT0gQmxvYjo6ZG9Ob3RD
aGVja0ZpbGVDaGFuZ2UpIHsKLSAgICAgICAgICAgIHRpbWVfdCBmaWxlTW9kaWZpY2F0aW9uVGlt
ZTsKLSAgICAgICAgICAgIGlmICghZ2V0RmlsZU1vZGlmaWNhdGlvblRpbWUobmV4dElucHV0Lm1f
ZmlsZW5hbWUsIGZpbGVNb2RpZmljYXRpb25UaW1lKSB8fCBmaWxlTW9kaWZpY2F0aW9uVGltZSAh
PSBzdGF0aWNfY2FzdDx0aW1lX3Q+KG5leHRJbnB1dC5tX2V4cGVjdGVkRmlsZU1vZGlmaWNhdGlv
blRpbWUpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotI2VuZGlm
Ci0KICAgICAgICAgY29uc3QgU3RyaW5nJiBwYXRoID0gbmV4dElucHV0Lm1fc2hvdWxkR2VuZXJh
dGVGaWxlID8gbmV4dElucHV0Lm1fZ2VuZXJhdGVkRmlsZW5hbWUgOiBuZXh0SW5wdXQubV9maWxl
bmFtZTsKICAgICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBmaWxlbmFtZShBZG9wdENGLCBw
YXRoLmNyZWF0ZUNGU3RyaW5nKCkpOwogICAgICAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IGZpbGVV
UkwoQWRvcHRDRiwgQ0ZVUkxDcmVhdGVXaXRoRmlsZVN5c3RlbVBhdGgoMCwgZmlsZW5hbWUuZ2V0
KCksIGtDRlVSTFBPU0lYUGF0aFN0eWxlLCBGQUxTRSkpOwpAQCAtMjIyLDcgKzIxNyw3IEBAIHN0
YXRpYyB2b2lkKiBmb3JtQ3JlYXRlKENGUmVhZFN0cmVhbVJlZiBzdHJlYW0sIHZvaWQqIGNvbnRl
eHQpCiAgICAgRm9ybVN0cmVhbUZpZWxkcyogbmV3SW5mbyA9IG5ldyBGb3JtU3RyZWFtRmllbGRz
OwogICAgIG5ld0luZm8tPmN1cnJlbnRTdHJlYW0gPSBOVUxMOwogI2lmIEVOQUJMRShCTE9CX1NM
SUNFKQotICAgIG5ld0luZm8tPmN1cnJlbnRTdHJlYW1SYW5nZUxlbmd0aCA9IEJsb2I6OnRvRW5k
T2ZGaWxlOworICAgIG5ld0luZm8tPmN1cnJlbnRTdHJlYW1SYW5nZUxlbmd0aCA9IEZvcm1EYXRh
RWxlbWVudDo6dG9FbmRPZkZpbGU7CiAjZW5kaWYKICAgICBuZXdJbmZvLT5jdXJyZW50RGF0YSA9
IDA7CiAgICAgbmV3SW5mby0+Zm9ybVN0cmVhbSA9IHN0cmVhbTsgLy8gRG9uJ3QgcmV0YWluLiBU
aGF0IHdvdWxkIGNyZWF0ZSBhIHJlZmVyZW5jZSBjeWNsZS4KQEAgLTI3MCw3ICsyNjUsNyBAQCBz
dGF0aWMgQ0ZJbmRleCBmb3JtUmVhZChDRlJlYWRTdHJlYW1SZWYgc3RyZWFtLCBVSW50OCogYnVm
ZmVyLCBDRkluZGV4IGJ1ZmZlckxlbgogICAgIHdoaWxlIChmb3JtLT5jdXJyZW50U3RyZWFtKSB7
CiAgICAgICAgIENGSW5kZXggYnl0ZXNUb1JlYWQgPSBidWZmZXJMZW5ndGg7CiAjaWYgRU5BQkxF
KEJMT0JfU0xJQ0UpCi0gICAgICAgIGlmIChmb3JtLT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5ndGgg
IT0gQmxvYjo6dG9FbmRPZkZpbGUgJiYgZm9ybS0+Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoIDwg
Ynl0ZXNUb1JlYWQpCisgICAgICAgIGlmIChmb3JtLT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5ndGgg
IT0gRm9ybURhdGFFbGVtZW50Ojp0b0VuZE9mRmlsZSAmJiBmb3JtLT5jdXJyZW50U3RyZWFtUmFu
Z2VMZW5ndGggPCBieXRlc1RvUmVhZCkKICAgICAgICAgICAgIGJ5dGVzVG9SZWFkID0gc3RhdGlj
X2Nhc3Q8Q0ZJbmRleD4oZm9ybS0+Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoKTsKICNlbmRpZgog
ICAgICAgICBDRkluZGV4IGJ5dGVzUmVhZCA9IENGUmVhZFN0cmVhbVJlYWQoZm9ybS0+Y3VycmVu
dFN0cmVhbSwgYnVmZmVyLCBieXRlc1RvUmVhZCk7CkBAIC0yODMsNyArMjc4LDcgQEAgc3RhdGlj
IENGSW5kZXggZm9ybVJlYWQoQ0ZSZWFkU3RyZWFtUmVmIHN0cmVhbSwgVUludDgqIGJ1ZmZlciwg
Q0ZJbmRleCBidWZmZXJMZW4KICAgICAgICAgICAgICphdEVPRiA9IEZBTFNFOwogICAgICAgICAg
ICAgZm9ybS0+Ynl0ZXNTZW50ICs9IGJ5dGVzUmVhZDsKICNpZiBFTkFCTEUoQkxPQl9TTElDRSkK
LSAgICAgICAgICAgIGlmIChmb3JtLT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5ndGggIT0gQmxvYjo6
dG9FbmRPZkZpbGUpCisgICAgICAgICAgICBpZiAoZm9ybS0+Y3VycmVudFN0cmVhbVJhbmdlTGVu
Z3RoICE9IEZvcm1EYXRhRWxlbWVudDo6dG9FbmRPZkZpbGUpCiAgICAgICAgICAgICAgICAgZm9y
bS0+Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoIC09IGJ5dGVzUmVhZDsKICNlbmRpZgogCkBAIC00
MDAsNyArMzk1LDcgQEAgdm9pZCBzZXRIVFRQQm9keShOU011dGFibGVVUkxSZXF1ZXN0ICpyZXF1
ZXN0LCBQYXNzUmVmUHRyPEZvcm1EYXRhPiBmb3JtRGF0YSkKICAgICAgICAgZWxzZSB7CiAjaWYg
RU5BQkxFKEJMT0JfU0xJQ0UpCiAgICAgICAgICAgICAvLyBJZiB3ZSdyZSBzZW5kaW5nIHRoZSBm
aWxlIHJhbmdlLCB1c2UgdGhlIGV4aXN0aW5nIHJhbmdlIGxlbmd0aCBmb3Igbm93LiBXZSB3aWxs
IGRldGVjdCBpZiB0aGUgZmlsZSBoYXMgYmVlbiBjaGFuZ2VkIHJpZ2h0IGJlZm9yZSB3ZSByZWFk
IHRoZSBmaWxlIGFuZCBhYm9ydCB0aGUgb3BlcmF0aW9uIGlmIG5lY2Vzc2FyeS4KLSAgICAgICAg
ICAgIGlmIChlbGVtZW50Lm1fZmlsZUxlbmd0aCAhPSBCbG9iOjp0b0VuZE9mRmlsZSkgeworICAg
ICAgICAgICAgaWYgKGVsZW1lbnQubV9maWxlTGVuZ3RoICE9IEZvcm1EYXRhRWxlbWVudDo6dG9F
bmRPZkZpbGUpIHsKICAgICAgICAgICAgICAgICBsZW5ndGggKz0gZWxlbWVudC5tX2ZpbGVMZW5n
dGg7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQg
YS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAgYi9XZWJDb3JlL3htbC9YTUxIdHRwUmVx
dWVzdC5jcHAKaW5kZXggNWNkZTI0ZGUyOWRiNDQyMTAwMDFhMzAyMzI0NGNhNGNjZDI1Y2ZiYi4u
NGQ0NTAzZTM4N2RhNzNiMzU4MWMyNmRiNThmZmZiYTNmNTU4ZjAwNiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCisrKyBiL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1
ZXN0LmNwcApAQCAtNDc4LDExICs0NzgsNyBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpzZW5kKEJs
b2IqIGJvZHksIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHdl
IHNldCBhIENvbnRlbnQtVHlwZSBpZiBvbmUgaXMgbm90IHNldC4KICAgICAgICAgLy8gRklYTUU6
IGFkZCBzdXBwb3J0IGZvciB1cGxvYWRpbmcgYnVuZGxlcy4KICAgICAgICAgbV9yZXF1ZXN0RW50
aXR5Qm9keSA9IEZvcm1EYXRhOjpjcmVhdGUoKTsKLSNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAg
ICAgICAgbV9yZXF1ZXN0RW50aXR5Qm9keS0+YXBwZW5kRmlsZVJhbmdlKGJvZHktPnBhdGgoKSwg
Ym9keS0+c3RhcnQoKSwgYm9keS0+bGVuZ3RoKCksIGJvZHktPm1vZGlmaWNhdGlvblRpbWUoKSk7
Ci0jZWxzZQotICAgICAgICBtX3JlcXVlc3RFbnRpdHlCb2R5LT5hcHBlbmRGaWxlKGJvZHktPnBh
dGgoKSwgZmFsc2UpOwotI2VuZGlmCisgICAgICAgIG1fcmVxdWVzdEVudGl0eUJvZHktPmFwcGVu
ZEJsb2JJdGVtTGlzdChib2R5LT5pdGVtcygpKTsKICAgICB9CiAKICAgICBjcmVhdGVSZXF1ZXN0
KGVjKTsKQEAgLTQ5NCw3ICs0OTAsNyBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpzZW5kKERPTUZv
cm1EYXRhKiBib2R5LCBFeGNlcHRpb25Db2RlJiBlYykKICAgICAgICAgcmV0dXJuOwogCiAgICAg
aWYgKG1fbWV0aG9kICE9ICJHRVQiICYmIG1fbWV0aG9kICE9ICJIRUFEIiAmJiBtX3VybC5wcm90
b2NvbEluSFRUUEZhbWlseSgpKSB7Ci0gICAgICAgIG1fcmVxdWVzdEVudGl0eUJvZHkgPSBGb3Jt
RGF0YTo6Y3JlYXRlTXVsdGlQYXJ0KCpib2R5LCBkb2N1bWVudCgpKTsKKyAgICAgICAgbV9yZXF1
ZXN0RW50aXR5Qm9keSA9IEZvcm1EYXRhOjpjcmVhdGVNdWx0aVBhcnQoYm9keS0+bGlzdCgpLCBi
b2R5LT5lbmNvZGluZygpLCBkb2N1bWVudCgpKTsKIAogICAgICAgICAvLyBXZSBuZWVkIHRvIGFz
ayB0aGUgY2xpZW50IHRvIHByb3ZpZGUgdGhlIGdlbmVyYXRlZCBmaWxlIG5hbWVzIGlmIG5lZWRl
ZC4gV2hlbiBGb3JtRGF0YSBmaWxscyB0aGUgZWxlbWVudAogICAgICAgICAvLyBmb3IgdGhlIGZp
bGUsIGl0IGNvdWxkIHNldCBhIGZsYWcgdG8gdXNlIHRoZSBnZW5lcmF0ZWQgZmlsZSBuYW1lLCBp
LmUuIGEgcGFja2FnZSBmaWxlIG9uIE1hYy4KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGFiYWIzMTg5MDEwMjgx
ZTAxN2U0NDQ1OGM3NzAxOWQxNTAyMmYzZDMuLmM5ODhjYWU1YzZhZjIxMDFhZmI3ZmZhMDQxZGNh
ZWIzZjM2ZGNiMWYgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDEwLTA1LTIwICBL
aW51a28gWWFzdWRhICA8a2ludWtvQGtpbnVrbzItbWFjcHJvLm10di5jb3JwLmdvb2dsZS5jb20+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVmYWN0
b3IgRm9ybURhdGEgYW5kIEJsb2IgZm9yIGJldHRlciBzdXBwb3J0IG9mIEJsb2JzIHN5bnRoZXNp
emVkIGJ5IEJsb2JCdWlsZGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0zOTA4MworCisgICAgICAgIFJlcGxhY2UgRm9ybURhdGFMaXN0OjpJdGVtIGxp
c3Qgd2l0aCBCbG9iSXRlbUxpc3QgdG8gZ2V0IGl0IGNvbXBpbGluZworICAgICAgICB3aXRoIHRo
ZSByZWZhY3RvcmluZyBpbiBGb3JtRGF0YUxpc3QuCisKKyAgICAgICAgKiBzcmMvV2ViU2VhcmNo
YWJsZUZvcm1EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okhhc1N1aXRhYmxlVGV4dEVsZW1l
bnQpOgorCiAyMDEwLTA1LTIwICBEb21pbmljIE1henpvbmkgIDxkbWF6em9uaUBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gRmlzaGVyLgpkaWZmIC0tZ2l0IGEvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJTZWFyY2hhYmxlRm9ybURhdGEuY3BwIGIvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJTZWFyY2hhYmxlRm9ybURhdGEuY3BwCmluZGV4IDhlZWY2Y2M4OTQ3ZTVjNmNj
OTMzMDVkMmNiNjExNThlZWU5ZTY4ZDUuLmYzMjBjMDlhMzhkYTlhMmNmOGJlMjllNDRkNDEwMDMz
MTg0YWQ3MjkgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2VhcmNoYWJsZUZv
cm1EYXRhLmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNlYXJjaGFibGVGb3JtRGF0
YS5jcHAKQEAgLTE4NSw3ICsxODUsNyBAQCBib29sIEhhc1N1aXRhYmxlVGV4dEVsZW1lbnQoY29u
c3QgSFRNTEZvcm1FbGVtZW50KiBmb3JtLCBWZWN0b3I8Y2hhcj4qIGVuY29kZWRTdAogICAgICAg
aWYgKCFmb3JtRWxlbWVudC0+YXBwZW5kRm9ybURhdGEoZGF0YUxpc3QsIGZhbHNlKSkKICAgICAg
ICAgICBjb250aW51ZTsKIAotICAgICAgY29uc3QgVmVjdG9yPEZvcm1EYXRhTGlzdDo6SXRlbT4m
IGl0ZW1MaXN0ID0gZGF0YUxpc3QubGlzdCgpOworICAgICAgY29uc3QgQmxvYkl0ZW1MaXN0JiBp
dGVtTGlzdCA9IGRhdGFMaXN0Lmxpc3QoKTsKICAgICAgIGlmIChpc1RleHRFbGVtZW50ICYmICFp
dGVtTGlzdC5pc0VtcHR5KCkpIHsKICAgICAgICAgICBpZiAodGV4dEVsZW1lbnQpIHsKICAgICAg
ICAgICAgICAgLy8gVGhlIGF1dG8tY29tcGxldGUgYmFyIG9ubHkga25vd3MgaG93IHRvIGZpbGwg
aW4gb25lIHZhbHVlLgpAQCAtMTk0LDIwICsxOTQsMjMgQEAgYm9vbCBIYXNTdWl0YWJsZVRleHRF
bGVtZW50KGNvbnN0IEhUTUxGb3JtRWxlbWVudCogZm9ybSwgVmVjdG9yPGNoYXI+KiBlbmNvZGVk
U3QKICAgICAgICAgICB9CiAgICAgICAgICAgdGV4dEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1M
SW5wdXRFbGVtZW50Kj4oZm9ybUVsZW1lbnQpOwogICAgICAgfQotICAgICAgZm9yIChWZWN0b3I8
Rm9ybURhdGFMaXN0OjpJdGVtPjo6Y29uc3RfaXRlcmF0b3IgaihpdGVtTGlzdC5iZWdpbigpKTsg
aiAhPSBpdGVtTGlzdC5lbmQoKTsgKytqKSB7CisgICAgICBmb3IgKEJsb2JJdGVtTGlzdDo6Y29u
c3RfaXRlcmF0b3IgaihpdGVtTGlzdC5iZWdpbigpKTsgaiAhPSBpdGVtTGlzdC5lbmQoKTsgKytq
KSB7CisgICAgICAgICAgU3RyaW5nQmxvYkl0ZW0qIGl0ZW0gPSAoKmopLT50b1N0cmluZ0Jsb2JJ
dGVtKCk7CisgICAgICAgICAgaWYgKCFpdGVtKQorICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAvLyBIYW5kbGUgSVNJTkRFWCAvIDxpbnB1dCBuYW1lPWlzaW5kZXg+IHNwZWNpYWxs
eSwgYnV0IG9ubHkgaWYgaXQncwogICAgICAgICAgIC8vIHRoZSBmaXJzdCBlbnRyeS4KLSAgICAg
ICAgICBpZiAoIWVuY29kZWRTdHJpbmctPmlzRW1wdHkoKSB8fCBqLT5kYXRhKCkgIT0gImlzaW5k
ZXgiKSB7CisgICAgICAgICAgaWYgKCFlbmNvZGVkU3RyaW5nLT5pc0VtcHR5KCkgfHwgaXRlbS0+
Y3N0cigpICE9ICJpc2luZGV4IikgewogICAgICAgICAgICAgICBpZiAoIWVuY29kZWRTdHJpbmct
PmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICAgIGVuY29kZWRTdHJpbmctPmFwcGVuZCgnJicp
OwotICAgICAgICAgICAgICBGb3JtRGF0YUJ1aWxkZXI6OmVuY29kZVN0cmluZ0FzRm9ybURhdGEo
KmVuY29kZWRTdHJpbmcsIGotPmRhdGEoKSk7CisgICAgICAgICAgICAgIEZvcm1EYXRhQnVpbGRl
cjo6ZW5jb2RlU3RyaW5nQXNGb3JtRGF0YSgqZW5jb2RlZFN0cmluZywgaXRlbS0+Y3N0cigpKTsK
ICAgICAgICAgICAgICAgZW5jb2RlZFN0cmluZy0+YXBwZW5kKCc9Jyk7CiAgICAgICAgICAgfQog
ICAgICAgICAgICsrajsKICAgICAgICAgICBpZiAoZm9ybUVsZW1lbnQgPT0gdGV4dEVsZW1lbnQp
CiAgICAgICAgICAgICAgIGVuY29kZWRTdHJpbmctPmFwcGVuZCgie3NlYXJjaFRlcm1zfSIsIDEz
KTsKICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIEZvcm1EYXRhQnVpbGRlcjo6ZW5jb2Rl
U3RyaW5nQXNGb3JtRGF0YSgqZW5jb2RlZFN0cmluZywgai0+ZGF0YSgpKTsKKyAgICAgICAgICAg
ICAgRm9ybURhdGFCdWlsZGVyOjplbmNvZGVTdHJpbmdBc0Zvcm1EYXRhKCplbmNvZGVkU3RyaW5n
LCBpdGVtLT5jc3RyKCkpOwogICAgICAgfQogICAgIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56709</attachid>
            <date>2010-05-21 07:54:31 -0700</date>
            <delta_ts>2010-05-24 01:33:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-39083-20100521075429.patch</filename>
            <type>text/plain</type>
            <size>75098</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CmluZGV4IDFiYjcyMDg5NzE3MzlkOWY2OTI0NDEyNzgwZjQ4NjRlNTU1ZTBiMjcuLjYxNmY2
M2IyOTcwYzgwYWIxMGI4MDFmNmNmMDlhNGMzYzM0NmVmNmIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
Q01ha2VMaXN0cy50eHQKKysrIGIvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTA5Niw2ICsx
MDk2LDcgQEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAgIHBhZ2UvYW5pbWF0aW9uL0tleWZyYW1l
QW5pbWF0aW9uLmNwcAogCiAgICAgcGxhdGZvcm0vQXJlbmEuY3BwCisgICAgcGxhdGZvcm0vQmxv
Ykl0ZW0uY3BwCiAgICAgcGxhdGZvcm0vQ29udGVudFR5cGUuY3BwCiAgICAgcGxhdGZvcm0vQ29u
dGV4dE1lbnUuY3BwCiAgICAgcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDRkZDJkZjM0
ZTEyY2JmYWJkNzc2YmJiNjY4OGMyMzc0NzYwMDhlZjYuLmMwZGE1OTg1YWRiNWRhMzEzNjYzZWRl
NjdjYmEzN2EzNjNlNzA4ZWMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dl
YkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODcgQEAKKzIwMTAtMDUtMjAgIEtpbnVrbyBZYXN1
ZGEgIDxraW51a29AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yIEZvcm1EYXRhIGFuZCBCbG9iIGZvciBiZXR0ZXIg
c3VwcG9ydCBvZiBCbG9icyBzeW50aGVzaXplZCBieSBCbG9iQnVpbGRlci4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5MDgzCisKKyAgICAgICAgLSBJ
bnRyb2R1Y2VzIGEgbmV3IGNsYXNzIEJsb2JJdGVtIGFzIGEgYmFzaWMgY29tcG9uZW50IG9mIEJs
b2IgYW5kIEZvcm1EYXRhLAorICAgICAgICAgIGFuZCBtYWtlcyBCbG9iIGFzIGEgY29sbGVjdGlv
biBvZiBCbG9iSXRlbXMuCisgICAgICAgIC0gRmlsZSB3b3VsZCBiZWNvbWUgYSBzcGVjaWFsIHR5
cGUgb2YgQmxvYiB0aGF0IGNvbnRhaW5zIG9ubHkgb25lCisgICAgICAgICAgRmlsZUJsb2JJdGVt
LgorICAgICAgICAtIE1ha2VzIEZvcm1EYXRhRWxlbWVudCBhIHdyYXBwZXIgb2YgQmxvYkl0ZW0g
KGFzIGEgdHJhbnNpZW50CisgICAgICAgICAgc29sdXRpb24pLgorICAgICAgICAtIEZpeCB0aGUg
ZGVwZW5kZW5jeSB2aW9sYXRpb24gaW4gRm9ybURhdGEgc28gdGhhdCB0aGUgZmlsZXMgdW5kZXIK
KyAgICAgICAgICBwbGF0Zm9ybS8gZG8gbm90IGluY2x1ZGUgYW55IGh0bWwvIGZpbGVzLgorCisg
ICAgICAgIFRoZSBwYXRjaCBkb2Vzbid0IHN1cHBvcnQgdGhlIGxhdGVzdCBGaWxlIEFQSSBjaGFu
Z2VzIChlLmcuIHR5cGUsCisgICAgICAgIHVybCBhbmQgc2xpY2UncyB0eXBlIHBhcmFtZXRlcnMp
IGFuZCBzaG91bGQgbm90IGNoYW5nZSBhbnkgb2YgaXRzCisgICAgICAgIGV4aXN0aW5nIGJlaGF2
aW9ycy4KKworICAgICAgICBUaGUgZXhpc3RpbmcgdGVzdHMgc2hvdWxkIGJlIGFibGUgdG8gYmUg
dXNlZCBmb3IgcmVncmVzc2lvbi4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAg
ICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBX
ZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAg
ICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaHRt
bC9CbG9iLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OkJsb2IpOgorICAgICAgICAoV2Vi
Q29yZTo6QmxvYjo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjpwYXRoKToKKyAgICAg
ICAgKFdlYkNvcmU6OkJsb2I6OmFwcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjpzbGlj
ZSk6CisgICAgICAgICogaHRtbC9CbG9iLmg6CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6dHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpC
bG9iOjppdGVtcyk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjpCbG9iKToKKyAgICAgICAgKiBo
dG1sL0ZpbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsZTo6RmlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGaWxlOjpuYW1lKToKKyAgICAgICAgKiBodG1sL0ZpbGUuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkZpbGU6OmZpbGVOYW1lKToKKyAgICAgICAgKiBodG1sL0ZpbGVTdHJlYW0uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsZVN0cmVhbTo6b3BlbkZvclJlYWQpOgorICAgICAgICAqIGh0
bWwvRm9ybURhdGFMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhTGlzdDo6YXBw
ZW5kU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhTGlzdDo6YXBwZW5kQmxvYik6
CisgICAgICAgICogaHRtbC9Gb3JtRGF0YUxpc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1E
YXRhTGlzdDo6bGlzdCk6CisgICAgICAgICogaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50OjpjcmVhdGVGb3JtRGF0YSk6CisgICAgICAg
ICogcGxhdGZvcm0vQmxvYkl0ZW0uY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9CbG9i
SXRlbS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhRWxlbWVudDo6Rm9ybURhdGFFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9y
bURhdGE6OmNyZWF0ZU11bHRpUGFydCk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YTo6ZGVl
cENvcHkpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6OmFwcGVuZERhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9ybURhdGE6OmFwcGVuZFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpG
b3JtRGF0YTo6YXBwZW5kRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YTo6YXBwZW5k
QmxvYkl0ZW1MaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjphcHBlbmRGaWxlUmFu
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6OmFwcGVuZEZvcm1EYXRhSXRlbXMpOgor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkZvcm1EYXRhRWxlbWVudDo6Rm9ybURhdGFFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZv
cm1EYXRhRWxlbWVudDo6aXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YUVsZW1lbnQ6
OkJsb2JJdGVtV3JhcHBlcjo6QmxvYkl0ZW1XcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZv
cm1EYXRhRWxlbWVudDo6QmxvYkl0ZW1XcmFwcGVyOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OkZvcm1EYXRhRWxlbWVudDo6QmxvYkl0ZW1XcmFwcGVyOjpkYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkZvcm1EYXRhRWxlbWVudDo6QmxvYkl0ZW1XcmFwcGVyOjpyZWxlYXNlQnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3Ih
PSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9tYWMvRm9ybURhdGFTdHJlYW1NYWMubW06
CisgICAgICAgIChXZWJDb3JlOjpjbG9zZUN1cnJlbnRTdHJlYW0pOgorICAgICAgICAoV2ViQ29y
ZTo6YWR2YW5jZUN1cnJlbnRTdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6Zm9ybUNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpmb3JtUmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpzZXRIVFRQ
Qm9keSk6CisgICAgICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlhNTEh0dHBSZXF1ZXN0OjpzZW5kKToKKwogMjAxMC0wNS0yMCAgQWRhbSBSb2JlbiAgPGFy
b2JlbkBhcHBsZS5jb20+CiAKICAgICAgICAgU3RvcCBsZWFraW5nIGFsbCBDQUNGQ29udGV4dHMK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0gYi9XZWJDb3JlL0dOVW1ha2VmaWxl
LmFtCmluZGV4IDYxYjczNGFmYWVjYWNiNWU3ZGEyNTFmMDMwNmZiNDk3NjgyMGM2NzIuLjhmZjI4
MDFlNmUxOGExODAzODNhNzg2ODY0YzRhNDBhMzQwZWEyYTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
R05VbWFrZWZpbGUuYW0KKysrIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtMTUzMyw2ICsx
NTMzLDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3BsYXRmb3JtL0FyZW5hLmNw
cCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9BcmVuYS5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL0F1dG9k
cmFpbmVkUG9vbC5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL0Jsb2JJdGVtLmNwcCBcCisJV2ViQ29y
ZS9wbGF0Zm9ybS9CbG9iSXRlbS5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL0NvbnRlbnRUeXBlLmNw
cCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9Db250ZW50VHlwZS5oIFwKIAlXZWJDb3JlL3BsYXRmb3Jt
L0NvbnRleHRNZW51LmNwcCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1dl
YkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDFjMjRiMTkyMmFmMTAxYmFlZmZiNzQ2ODliNDA4ZGM3
NDQyMDIzYmUuLjUzNmQzZjk2MmI0MzUwZDVjYmU1NDkzZjBkNjkwZTlmMzhkN2QxMzIgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBA
IC0yODYxLDYgKzI4NjEsOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL0FyZW5hLmNwcCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vQXJlbmEuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vQXV0
b2RyYWluZWRQb29sLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL0Jsb2JJdGVtLmNwcCcsCisg
ICAgICAgICAgICAncGxhdGZvcm0vQmxvYkl0ZW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Q29udGVudFR5cGUuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9Db250ZW50VHlwZS5oJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9Db250ZXh0TWVudS5jcHAnLApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggY2MyZjhmYWJlNzc3
OTEzNjkzOWQ2ZjcxNGM1MzI5NTI3N2FjZjQ2MS4uMzlmM2VhNmU1ZmFjYjYzNmRiNDY2NDhmZmQ4
OTI1M2FjZDdlNGY3YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9XZWJD
b3JlL1dlYkNvcmUucHJvCkBAIC04MDYsNiArODA2LDcgQEAgU09VUkNFUyArPSBcCiAgICAgcGxh
dGZvcm0vYW5pbWF0aW9uL0FuaW1hdGlvbi5jcHAgXAogICAgIHBsYXRmb3JtL2FuaW1hdGlvbi9B
bmltYXRpb25MaXN0LmNwcCBcCiAgICAgcGxhdGZvcm0vQXJlbmEuY3BwIFwKKyAgICBwbGF0Zm9y
bS9CbG9iSXRlbS5jcHAgXAogICAgIHBsYXRmb3JtL3RleHQvQmFzZTY0LmNwcCBcCiAgICAgcGxh
dGZvcm0vdGV4dC9CaWRpQ29udGV4dC5jcHAgXAogICAgIHBsYXRmb3JtL0NvbnRlbnRUeXBlLmNw
cCBcCkBAIC0xNTUxLDYgKzE1NTIsNyBAQCBIRUFERVJTICs9IFwKICAgICBwbGF0Zm9ybS9hbmlt
YXRpb24vQW5pbWF0aW9uLmggXAogICAgIHBsYXRmb3JtL2FuaW1hdGlvbi9BbmltYXRpb25MaXN0
LmggXAogICAgIHBsYXRmb3JtL0FyZW5hLmggXAorICAgIHBsYXRmb3JtL0Jsb2JJdGVtLmggXAog
ICAgIHBsYXRmb3JtL0NvbnRlbnRUeXBlLmggXAogICAgIHBsYXRmb3JtL0NvbnRleHRNZW51Lmgg
XAogICAgIHBsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmggXApkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2oKaW5kZXggZjZiNDgwMWM3MjMyZjEwYmJmMGVkNGNiNmVlM2U5MGZjNjcz
MDFmZC4uNjU5Y2MyNDkxYTgzZmQyOWEzY2E5N2Y1NzZlZDViNTU4MzI5NDUyZCAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9XZWJDb3JlL1dl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC0yMjE5Myw2ICsyMjE5MywxNCBAQAogCQkJ
CT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9y
bVxCbG9iSXRlbS5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVs
YXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxCbG9iSXRlbS5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0K
KwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cQ29udGVudFR5cGUuY3Bw
Ig0KIAkJCQk+DQogCQkJPC9GaWxlPg0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKaW5kZXggNzcwMTU1N2I1MDdjODI0ZTBlZjg4NDIyMTlmYmNlZGFlYTdmZmE5Zi4u
MzIzYTRkODQ0N2RlMmQ5YjFmYzM0YzEyNmRhMjZlNmFjYThhMTA3YiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTIyNzMsNiArMjI3Myw4IEBACiAJCTg5
NTI1M0REMTE2QzRFRjUwMENBQkYwMCAvKiBGaWxlU3RyZWFtUHJveHkuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg5NTI1M0RCMTE2QzRFRjUwMENBQkYw
MCAvKiBGaWxlU3RyZWFtUHJveHkuaCAqLzsgfTsKIAkJODk1MjUzREYxMTZDNEYwNjAwQ0FCRjAw
IC8qIEZpbGVUaHJlYWRUYXNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA4OTUyNTNERTExNkM0RjA2MDBDQUJGMDAgLyogRmlsZVRocmVhZFRhc2suaCAq
LzsgfTsKIAkJOEZBQzc3NEQxMTk4NzJDQjAwMTVBRTk0IC8qIEpTTWFpblRocmVhZEV4ZWNTdGF0
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4Rjkz
NEQ4NDExODlGMUVFMDA1MDhENUQgLyogSlNNYWluVGhyZWFkRXhlY1N0YXRlLmNwcCAqLzsgfTsK
KwkJODk4OEUxMEUxMUEzNTA4QjAwREI3MzJFIC8qIEJsb2JJdGVtLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg5ODhFMTBDMTFBMzUwOEIwMERCNzMy
RSAvKiBCbG9iSXRlbS5jcHAgKi87IH07CisJCTg5ODhFMTBGMTFBMzUwOEIwMERCNzMyRSAvKiBC
bG9iSXRlbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
ODk4OEUxMEQxMUEzNTA4QjAwREI3MzJFIC8qIEJsb2JJdGVtLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTMwMkIwQkQwRDc5RjgyOTAwQzdFRTgz
IC8qIFBhZ2VHcm91cC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5MzAyQjBCQzBENzlGODI5MDBDN0VFODMgLyogUGFnZUdyb3VwLmNwcCAqLzsgfTsK
IAkJOTMwMkIwQkYwRDc5RjgyQzAwQzdFRTgzIC8qIFBhZ2VHcm91cC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMwMkIwQkUwRDc5RjgyQzAwQzdFRTgz
IC8qIFBhZ2VHcm91cC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTkzMDVCMjREMDk4RjFCNkIwMEMyODg1NSAvKiBUaW1lci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMwNUIyNEMwOThGMUI2QjAwQzI4
ODU1IC8qIFRpbWVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTc4NDksNiArNzg1MSw4IEBACiAJCTg5NTI1M0RFMTE2QzRGMDYwMENBQkYwMCAv
KiBGaWxlVGhyZWFkVGFzay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWxl
VGhyZWFkVGFzay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4RjkzNEQ4MzExODlG
MUVFMDA1MDhENUQgLyogSlNNYWluVGhyZWFkRXhlY1N0YXRlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTTWFpblRocmVhZEV4ZWNTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk4RjkzNEQ4NDExODlGMUVFMDA1MDhENUQgLyogSlNNYWluVGhyZWFkRXhl
Y1N0YXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTWFpblRo
cmVhZEV4ZWNTdGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg5ODhFMTBD
MTFBMzUwOEIwMERCNzMyRSAvKiBCbG9iSXRlbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBCbG9iSXRlbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTg5ODhFMTBEMTFBMzUwOEIwMERCNzMyRSAvKiBCbG9iSXRlbS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBCbG9iSXRlbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5MzAyQjBCQzBENzlGODI5MDBDN0VFODMgLyogUGFnZUdyb3VwLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhZ2VHcm91cC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTkzMDJCMEJFMEQ3OUY4MkMwMEM3RUU4MyAvKiBQYWdlR3JvdXAuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFnZUdyb3VwLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTkzMDVCMjRDMDk4RjFCNkIwMEMyODg1NSAvKiBUaW1lci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaW1lci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTU3NTEsNiArMTU3NTUsOCBAQAogCQkJCUJDRkIyRjc0MDk3QTJFMUEwMEJB
NzAzRCAvKiBBcmVuYS5jcHAgKi8sCiAJCQkJQkNGQjJGNzUwOTdBMkUxQTAwQkE3MDNEIC8qIEFy
ZW5hLmggKi8sCiAJCQkJNTFFMUVDQjEwQzkxQzU1NjAwREMyNTVCIC8qIEF1dG9kcmFpbmVkUG9v
bC5oICovLAorCQkJCTg5ODhFMTBDMTFBMzUwOEIwMERCNzMyRSAvKiBCbG9iSXRlbS5jcHAgKi8s
CisJCQkJODk4OEUxMEQxMUEzNTA4QjAwREI3MzJFIC8qIEJsb2JJdGVtLmggKi8sCiAJCQkJQkND
OENGQ0EwOTg2Q0QyNDAwMTQwQkYyIC8qIENvbG9yRGF0YS5ncGVyZiAqLywKIAkJCQk0MUQwMTVD
OTBGNEI1QzcxMDA0QTY2MkYgLyogQ29udGVudFR5cGUuY3BwICovLAogCQkJCTQxRDAxNUM4MEY0
QjVDNzEwMDRBNjYyRiAvKiBDb250ZW50VHlwZS5oICovLApAQCAtMTY3ODIsNiArMTY3ODgsNyBA
QAogCQkJCUJDNUVCOTIwMEU4MjA0MDgwMEIyNTk2NSAvKiBCaW5kaW5nVVJJLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBODk5NDMyODBCNDIzMzg4MDBEN0M4MDIgLyogQml0bWFwSW1hZ2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTJFQUZBRjBGMTBFMkFGMkQwMDdFRDNENiAvKiBCbG9iLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk4OTg4RTEwRjExQTM1MDhCMDBEQjczMkUgLyogQmxvYkl0ZW0uaCBpbiBI
ZWFkZXJzICovLAogCQkJCTkzRjE5OUJFMDgyNDVFNTkwMDFFOUFCQyAvKiBCbG9ja0V4Y2VwdGlv
bnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNUVCNUUxMEU4MUJFODcwMEIyNTk2NSAvKiBCb3Jk
ZXJEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzVFQjVEQjBFODFCN0VBMDBCMjU5NjUgLyog
Qm9yZGVyVmFsdWUuaCBpbiBIZWFkZXJzICovLApAQCAtMTk1OTcsNiArMTk2MDQsNyBAQAogCQkJ
CUJDNUVCOTFGMEU4MjA0MDgwMEIyNTk2NSAvKiBCaW5kaW5nVVJJLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUE4OTk0MzI5MEI0MjMzODgwMEQ3QzgwMiAvKiBCaXRtYXBJbWFnZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkyRUFGQUYwRTEwRTJBRjJEMDA3RUQzRDYgLyogQmxvYi5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQk4OTg4RTEwRTExQTM1MDhCMDBEQjczMkUgLyogQmxvYkl0ZW0uY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJOTNGMTlBRTEwODI0NUU1OTAwMUU5QUJDIC8qIEJsb2NrRXhjZXB0
aW9ucy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDRUE0ODU0MDk3RDkzMDIwMDk0QzlFNCAvKiBi
cmVha19saW5lcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzMwOUREQTA5OUU2NDkyMDA1NkU1
ODEgLyogQnJlYWtCbG9ja3F1b3RlQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTIwMzQ1
LDggKzIwMzUzLDggQEAKIAkJCQk1MUVDOTI2NTBDRTkwREQ0MDBGOTAzMDggLyogSlNDdXN0b21T
UUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBMzQxN0NB
MENFQ0ZGMjUwMDQ5Q0JERSAvKiBKU0N1c3RvbVZvaWRDYWxsYmFjay5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlFMTBCOTNDMzBCNzNDMjkxMDAzRUQ4OTAgLyogSlNDdXN0b21YUGF0aE5TUmVzb2x2
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMUFFODJGOEYwQ0FBRkE5RDAwMjIzN0FFIC8qIEpT
RGF0YWJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNDRTU4QUMxMDYxRThDRjAwOEZCMzVB
IC8qIEpTRGF0YWJhc2VDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUFFODJGOEYwQ0FB
RkE5RDAwMjIzN0FFIC8qIEpTRGF0YWJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM3N0Qx
NjkwRkYxOUY1NjAwNzA4ODdCIC8qIEpTRGF0YUdyaWRDb2x1bW4uY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQkM3N0QxNkIwRkYxOUY1NjAwNzA4ODdCIC8qIEpTRGF0YUdyaWRDb2x1bW5MaXN0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUJDNzdEMTUyMEZGMTlDNzMwMDcwODg3QiAvKiBKU0RhdGFH
cmlkQ29sdW1uTGlzdEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvaHRtbC9CbG9iLmNwcCBiL1dlYkNvcmUvaHRtbC9CbG9iLmNwcAppbmRleCA4M2JiZGMwYzUy
NjQ4NDU0MjY4ODE5MjYyMTY4NGI2MjgyMDI0YmY0Li5iMWYyZGY3YTAzMWJkNDQ2ZjRjZDBjZjk5
NmJjMzlmMWM4ZjQ5ODQzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvQmxvYi5jcHAKKysrIGIv
V2ViQ29yZS9odG1sL0Jsb2IuY3BwCkBAIC0yOSw5MCArMjksNjggQEAKICAqLwogCiAjaW5jbHVk
ZSAiY29uZmlnLmgiCisKICNpbmNsdWRlICJCbG9iLmgiCiAKKyNpbmNsdWRlICJCbG9iSXRlbS5o
IgogI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0jaWYg
RU5BQkxFKEJMT0JfU0xJQ0UpCi1jb25zdCBpbnQgQmxvYjo6dG9FbmRPZkZpbGUgPSAtMTsKLWNv
bnN0IGRvdWJsZSBCbG9iOjpkb05vdENoZWNrRmlsZUNoYW5nZSA9IDA7Ci0jZW5kaWYKLQogQmxv
Yjo6QmxvYihjb25zdCBTdHJpbmcmIHBhdGgpCi0gICAgOiBtX3BhdGgocGF0aCkKLSNpZiBFTkFC
TEUoQkxPQl9TTElDRSkKLSAgICAsIG1fc3RhcnQoMCkKLSAgICAsIG1fbGVuZ3RoKHRvRW5kT2ZG
aWxlKQotICAgICwgbV9zbmFwc2hvdENhcHR1cmVkKGZhbHNlKQotICAgICwgbV9zbmFwc2hvdFNp
emUoMCkKLSAgICAsIG1fc25hcHNob3RNb2RpZmljYXRpb25UaW1lKGRvTm90Q2hlY2tGaWxlQ2hh
bmdlKQotI2VuZGlmCiB7CisgICAgLy8gTm90ZTogdGhpcyBkb2Vzbid0IGluaXRpYWxpemUgdGhl
IHR5cGUgdW5saWtlIEZpbGUocGF0aCkuCisgICAgYXBwZW5kKEZpbGVCbG9iSXRlbTo6Y3JlYXRl
KHBhdGgpKTsKIH0KIAotI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotQmxvYjo6QmxvYihjb25zdCBT
dHJpbmcmIHBhdGgsIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCwgbG9uZyBsb25n
IHNuYXBzaG90U2l6ZSwgZG91YmxlIHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSkKLSAgICA6IG1f
cGF0aChwYXRoKQotICAgICwgbV9zdGFydChzdGFydCkKLSAgICAsIG1fbGVuZ3RoKGxlbmd0aCkK
LSAgICAsIG1fc25hcHNob3RDYXB0dXJlZCh0cnVlKQotICAgICwgbV9zbmFwc2hvdFNpemUoc25h
cHNob3RTaXplKQotICAgICwgbV9zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUoc25hcHNob3RNb2Rp
ZmljYXRpb25UaW1lKQotewotICAgIEFTU0VSVChzdGFydCA+PSAwICYmIGxlbmd0aCA+PSAwICYm
IHN0YXJ0ICsgbGVuZ3RoIDw9IHNuYXBzaG90U2l6ZSAmJiBzbmFwc2hvdE1vZGlmaWNhdGlvblRp
bWUpOwotfQotI2VuZGlmCi0KIHVuc2lnbmVkIGxvbmcgbG9uZyBCbG9iOjpzaXplKCkgY29uc3QK
IHsKICAgICAvLyBGSVhNRTogSmF2YVNjcmlwdCBjYW5ub3QgcmVwcmVzZW50IHNpemVzIGFzIGxh
cmdlIGFzIHVuc2lnbmVkIGxvbmcgbG9uZywgd2UgbmVlZCB0bwogICAgIC8vIGNvbWUgdXAgd2l0
aCBhbiBleGNlcHRpb24gdG8gdGhyb3cgaWYgZmlsZSBzaXplIGlzIG5vdCByZXByZXNldGFibGUu
Ci0jaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgaWYgKG1fc25hcHNob3RDYXB0dXJlZCkKLSAg
ICAgICAgcmV0dXJuIG1fbGVuZ3RoOwotI2VuZGlmCi0gICAgbG9uZyBsb25nIHNpemU7Ci0gICAg
aWYgKCFnZXRGaWxlU2l6ZShtX3BhdGgsIHNpemUpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihzaXplKTsKKyAgICB1bnNpZ25l
ZCBsb25nIGxvbmcgc2l6ZSA9IDA7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2l0ZW1z
LnNpemUoKTsgKytpKQorICAgICAgICBzaXplICs9IG1faXRlbXNbaV0tPnNpemUoKTsKKyAgICBy
ZXR1cm4gc2l6ZTsKK30KKworY29uc3QgU3RyaW5nJiBCbG9iOjpwYXRoKCkgY29uc3QKK3sKKyAg
ICBBU1NFUlQobV9pdGVtcy5zaXplKCkgPT0gMSAmJiBtX2l0ZW1zWzBdLT50b0ZpbGVCbG9iSXRl
bSgpKTsKKyAgICByZXR1cm4gbV9pdGVtc1swXS0+dG9GaWxlQmxvYkl0ZW0oKS0+cGF0aCgpOwor
fQorCit2b2lkIEJsb2I6OmFwcGVuZChQYXNzUmVmUHRyPEJsb2JJdGVtPiBpdGVtKQoreworICAg
IG1faXRlbXMuYXBwZW5kKGl0ZW0pOwogfQogCiAjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCiBQYXNz
UmVmUHRyPEJsb2I+IEJsb2I6OnNsaWNlKGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0
aCkgY29uc3QKIHsKLSAgICAvLyBXaGVuIHdlIHNsaWNlIGEgZmlsZSBmb3IgdGhlIGZpcnN0IHRp
bWUsIHdlIG9idGFpbiBhIHNuYXBzaG90IG9mIHRoZSBmaWxlIGJ5IGNhcHR1cmluZyBpdHMgY3Vy
cmVudCBzaXplIGFuZCBtb2RpZmljYXRpb24gdGltZS4KLSAgICAvLyBUaGUgbW9kaWZpY2F0aW9u
IHRpbWUgd2lsbCBiZSB1c2VkIHRvIHZlcmlmeSBpZiB0aGUgZmlsZSBoYXMgYmVlbiBjaGFuZ2Vk
IG9yIG5vdCwgd2hlbiB0aGUgdW5kZXJseWluZyBkYXRhIGFyZSBhY2Nlc3NlZC4KLSAgICBsb25n
IGxvbmcgc25hcHNob3RTaXplOwotICAgIGRvdWJsZSBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWU7
Ci0gICAgaWYgKG1fc25hcHNob3RDYXB0dXJlZCkgewotICAgICAgICBzbmFwc2hvdFNpemUgPSBt
X3NuYXBzaG90U2l6ZTsKLSAgICAgICAgc25hcHNob3RNb2RpZmljYXRpb25UaW1lID0gbV9zbmFw
c2hvdE1vZGlmaWNhdGlvblRpbWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gSWYgd2UgZmFp
bCB0byByZXRyaWV2ZSB0aGUgc2l6ZSBvciBtb2RpZmljYXRpb24gdGltZSwgcHJvYmFibHkgZHVl
IHRvIHRoYXQgdGhlIGZpbGUgaGFzIGJlZW4gZGVsZXRlZCwgYW4gZW1wdHkgYmxvYiB3aWxsIGJl
IHJldHVybmVkLgotICAgICAgICB0aW1lX3QgbW9kaWZpY2F0aW9uVGltZTsKLSAgICAgICAgaWYg
KCFnZXRGaWxlU2l6ZShtX3BhdGgsIHNuYXBzaG90U2l6ZSkgfHwgIWdldEZpbGVNb2RpZmljYXRp
b25UaW1lKG1fcGF0aCwgbW9kaWZpY2F0aW9uVGltZSkpIHsKLSAgICAgICAgICAgIHNuYXBzaG90
U2l6ZSA9IDA7Ci0gICAgICAgICAgICBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUgPSAwOwotICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgIHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSA9IG1vZGlm
aWNhdGlvblRpbWU7Ci0gICAgfQotCi0gICAgLy8gQ2xhbXAgdGhlIHJhbmdlIGlmIGl0IGV4Y2Vl
ZHMgdGhlIHNpemUgbGltaXQuCiAgICAgaWYgKHN0YXJ0IDwgMCkKICAgICAgICAgc3RhcnQgPSAw
OwogICAgIGlmIChsZW5ndGggPCAwKQogICAgICAgICBsZW5ndGggPSAwOwogCi0gICAgaWYgKHN0
YXJ0ID4gc25hcHNob3RTaXplKSB7CisgICAgLy8gQ2xhbXAgdGhlIHJhbmdlIGlmIGl0IGV4Y2Vl
ZHMgdGhlIHNpemUgbGltaXQuCisgICAgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsU2l6ZSA9IHNp
emUoKTsKKyAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihzdGFydCkgPiB0
b3RhbFNpemUpIHsKICAgICAgICAgc3RhcnQgPSAwOwogICAgICAgICBsZW5ndGggPSAwOwotICAg
IH0gZWxzZSBpZiAoc3RhcnQgKyBsZW5ndGggPiBzbmFwc2hvdFNpemUpCi0gICAgICAgIGxlbmd0
aCA9IHNuYXBzaG90U2l6ZSAtIHN0YXJ0OworICAgIH0gZWxzZSBpZiAoc3RhdGljX2Nhc3Q8dW5z
aWduZWQgbG9uZyBsb25nPihzdGFydCArIGxlbmd0aCkgPiB0b3RhbFNpemUpCisgICAgICAgIGxl
bmd0aCA9IHRvdGFsU2l6ZSAtIHN0YXJ0OwogCi0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBCbG9i
KG1fcGF0aCwgbV9zdGFydCArIHN0YXJ0LCBsZW5ndGgsIHNuYXBzaG90U2l6ZSwgc25hcHNob3RN
b2RpZmljYXRpb25UaW1lKSk7CisgICAgc2l6ZV90IGkgPSAwOworICAgIFJlZlB0cjxCbG9iPiBi
bG9iID0gQmxvYjo6Y3JlYXRlKCk7CisgICAgZm9yICg7IGkgPCBtX2l0ZW1zLnNpemUoKSAmJiBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KHN0YXJ0KSA+PSBtX2l0ZW1zW2ldLT5zaXpl
KCk7ICsraSkKKyAgICAgICAgc3RhcnQgLT0gbV9pdGVtc1tpXS0+c2l6ZSgpOworICAgIGZvciAo
OyBsZW5ndGggPiAwICYmIGkgPCBtX2l0ZW1zLnNpemUoKTsgKytpKSB7CisgICAgICAgIGJsb2It
Pm1faXRlbXMuYXBwZW5kKG1faXRlbXNbaV0tPnNsaWNlKHN0YXJ0LCBsZW5ndGgpKTsKKyAgICAg
ICAgbGVuZ3RoIC09IGJsb2ItPm1faXRlbXMubGFzdCgpLT5zaXplKCk7CisgICAgICAgIHN0YXJ0
ID0gMDsKKyAgICB9CisgICAgcmV0dXJuIGJsb2IucmVsZWFzZSgpOwogfQotI2VuZGlmCisjZW5k
aWYgLy8gRU5BQkxFKEJMT0JfU0xJQ0UpCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvaHRtbC9CbG9iLmggYi9XZWJDb3JlL2h0bWwvQmxvYi5oCmluZGV4IGU4
YjVmM2ZkZjA2OWEyYjQ4NzZlZDE2YWI4MWIyMmYwZmYwMzg5NzAuLjMxYzEyNDIwMzM5Yjg0Nzdi
ODQ0YWM1ZTBjYWNkNGExOWU0OGQ0MmIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9CbG9iLmgK
KysrIGIvV2ViQ29yZS9odG1sL0Jsb2IuaApAQCAtMzEsMjEgKzMxLDI1IEBACiAjaWZuZGVmIEJs
b2JfaAogI2RlZmluZSBCbG9iX2gKIAotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNs
dWRlICJCbG9iSXRlbS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSA8
dGltZS5oPgorI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQmxvYiA6IHB1YmxpYyBSZWZDb3Vu
dGVkPEJsb2I+IHsKIHB1YmxpYzoKLSNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAgICBzdGF0aWMg
Y29uc3QgaW50IHRvRW5kT2ZGaWxlOwotICAgIHN0YXRpYyBjb25zdCBkb3VibGUgZG9Ob3RDaGVj
a0ZpbGVDaGFuZ2U7Ci0jZW5kaWYKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCbG9iPiBjcmVhdGUo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBCbG9iKCkpOworICAgIH0KIAor
ICAgIC8vIEZJWE1FOiBkZXByZWNhdGVkIG1ldGhvZC4gIFRoaXMgaXMgY2FsbGVkIG9ubHkgZnJv
bQorICAgIC8vIGJpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgYW5kIHRoZSB1
c2FnZSBpbiBpdCB3aWxsIGJlY29tZSBpbnZhbGlkIG9uY2UKKyAgICAvLyBCbG9iQnVpbGRlciBp
cyBpbnRyb2R1Y2VkLgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJsb2I+IGNyZWF0ZShjb25zdCBT
dHJpbmcmIHBhdGgpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJsb2IocGF0
aCkpOwpAQCAtNTMsNDcgKzU3LDI4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgfkJsb2IoKSB7
IH0KIAorICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplKCkgY29uc3Q7CisgICAgY29uc3QgU3Ry
aW5nJiB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CiAgICAgdmlydHVhbCBib29sIGlz
RmlsZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKLSNpZiBFTkFCTEUoQkxPQl9TTElDRSkK
LSAgICBQYXNzUmVmUHRyPEJsb2I+IHNsaWNlKGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxl
bmd0aCkgY29uc3Q7Ci0jZW5kaWYKLQotICAgIGNvbnN0IFN0cmluZyYgcGF0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fcGF0aDsgfQotICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplKCkgY29uc3Q7Ci0j
aWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgbG9uZyBsb25nIHN0YXJ0KCkgY29uc3QgeyByZXR1
cm4gbV9zdGFydDsgfQotICAgIGxvbmcgbG9uZyBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xl
bmd0aDsgfQotICAgIGRvdWJsZSBtb2RpZmljYXRpb25UaW1lKCkgY29uc3QgeyByZXR1cm4gbV9z
bmFwc2hvdE1vZGlmaWNhdGlvblRpbWU7IH0KLSNlbmRpZgorICAgIC8vIEZJWE1FOiBkZXByZWNh
dGVkIG1ldGhvZC4KKyAgICBjb25zdCBTdHJpbmcmIHBhdGgoKSBjb25zdDsKIAotcHJvdGVjdGVk
OgotICAgIEJsb2IoY29uc3QgU3RyaW5nJiBwYXRoKTsKKyAgICB2b2lkIGFwcGVuZChQYXNzUmVm
UHRyPEJsb2JJdGVtPik7CisgICAgY29uc3QgQmxvYkl0ZW1MaXN0JiBpdGVtcygpIGNvbnN0IHsg
cmV0dXJuIG1faXRlbXM7IH0KIAotcHJpdmF0ZToKICNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAg
ICBCbG9iKGNvbnN0IFN0cmluZyYgcGF0aCwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVu
Z3RoLCBsb25nIGxvbmcgc25hcHNob3RTaXplLCBkb3VibGUgc25hcHNob3RNb2RpZmljYXRpb25U
aW1lKTsKKyAgICBQYXNzUmVmUHRyPEJsb2I+IHNsaWNlKGxvbmcgbG9uZyBzdGFydCwgbG9uZyBs
b25nIGxlbmd0aCkgY29uc3Q7CiAjZW5kaWYKIAotICAgIC8vIFRoZSB1bmRlcmx5aW5nIHBhdGgg
b2YgdGhlIGZpbGUtYmFzZWQgYmxvYi4gCi0gICAgU3RyaW5nIG1fcGF0aDsKLQotI2lmIEVOQUJM
RShCTE9CX1NMSUNFKQotICAgIC8vIFRoZSBzdGFydGluZyBwb3NpdGlvbiBvZiB0aGUgZmlsZS1i
YXNlZCBibG9iLgotICAgIGxvbmcgbG9uZyBtX3N0YXJ0OwotCi0gICAgLy8gVGhlIGxlbmd0aCBv
ZiB0aGUgZmlsZS1iYXNlZCBibG9iLiBUaGUgdmFsdWUgb2YgLTEgbWVhbnMgdG8gdGhlIGVuZCBv
ZiB0aGUgZmlsZS4KLSAgICBsb25nIGxvbmcgbV9sZW5ndGg7Ci0KLSAgICAvLyBBIGZsYWcgdG8g
dGVsbCBpZiBhIHNuYXBzaG90IGhhcyBiZWVuIGNhcHR1cmVkLgotICAgIGJvb2wgbV9zbmFwc2hv
dENhcHR1cmVkOworcHJvdGVjdGVkOgorICAgIEJsb2IoKSB7IH0KIAotICAgIC8vIFRoZSBzaXpl
IG9mIHRoZSBmaWxlIHdoZW4gYSBzbmFwc2hvdCBpcyBjYXB0dXJlZC4gSXQgY2FuIGJlIDAgaWYg
dGhlIGZpbGUgaXMgZW1wdHkuCi0gICAgbG9uZyBsb25nIG1fc25hcHNob3RTaXplOworICAgIC8v
IEZJWE1FOiBkZXByZWNhdGVkIGNvbnN0cnVjdG9yLiAgU2VlIGFsc28gdGhlIGNvbW1lbnQgZm9y
IEJsb2I6OmNyZWF0ZShwYXRoKS4KKyAgICBCbG9iKGNvbnN0IFN0cmluZyYgcGF0aCk7CiAKLSAg
ICAvLyBUaGUgbGFzdCBtb2RpZmljYXRpb24gdGltZSBvZiB0aGUgZmlsZSB3aGVuIGEgc25hcHNo
b3QgaXMgY2FwdHVyZWQuIFRoZSB2YWx1ZSBvZiAwIGFsc28gbWVhbnMgdGhhdCB0aGUgc25hcHNo
b3QgaXMgbm90IGNhcHR1cmVkLgotICAgIGRvdWJsZSBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGlt
ZTsKLSNlbmRpZgorICAgIEJsb2JJdGVtTGlzdCBtX2l0ZW1zOworICAgIFN0cmluZyBtX3R5cGU7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwv
RmlsZS5jcHAgYi9XZWJDb3JlL2h0bWwvRmlsZS5jcHAKaW5kZXggOTdmZGM0NTc4ZDc0YjIyNWU1
OTQ2ZjRkNmFlZjI1NjUyNTQ0M2FlNC4uMTgwY2ExN2Y4ZDdhMzRmNTgzOWY1OWU5YjBlMmEzY2Mx
OThjNTVmNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0ZpbGUuY3BwCisrKyBiL1dlYkNvcmUv
aHRtbC9GaWxlLmNwcApAQCAtMzMsMTIgKzMzLDE2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
RmlsZTo6RmlsZShjb25zdCBTdHJpbmcmIHBhdGgpCiAgICAgOiBCbG9iKHBhdGgpCi0gICAgLCBt
X25hbWUocGF0aEdldEZpbGVOYW1lKHBhdGgpKQogewogICAgIC8vIFdlIGRvbid0IHVzZSBNSU1F
VHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZvclBhdGgoKSBiZWNhdXNlIGl0IHJldHVybnMgImFw
cGxpY2F0aW9uL29jdGV0LXN0cmVhbSIgdXBvbiBmYWlsdXJlLgotICAgIGludCBpbmRleCA9IG1f
bmFtZS5yZXZlcnNlRmluZCgnLicpOworICAgIGludCBpbmRleCA9IG5hbWUoKS5yZXZlcnNlRmlu
ZCgnLicpOwogICAgIGlmIChpbmRleCAhPSAtMSkKLSAgICAgICAgbV90eXBlID0gTUlNRVR5cGVS
ZWdpc3RyeTo6Z2V0TUlNRVR5cGVGb3JFeHRlbnNpb24obV9uYW1lLnN1YnN0cmluZyhpbmRleCAr
IDEpKTsKKyAgICAgICAgbV90eXBlID0gTUlNRVR5cGVSZWdpc3RyeTo6Z2V0TUlNRVR5cGVGb3JF
eHRlbnNpb24obmFtZSgpLnN1YnN0cmluZyhpbmRleCArIDEpKTsKK30KKworY29uc3QgU3RyaW5n
JiBGaWxlOjpuYW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaXRlbXMoKS5hdCgwKS0+dG9GaWxl
QmxvYkl0ZW0oKS0+bmFtZSgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2h0bWwvRmlsZS5oIGIvV2ViQ29yZS9odG1sL0ZpbGUuaAppbmRleCAwNjVk
ZDg2YTdiMWViZjc3ZmI0MDY0NmY5YzZlODcwNDY5ZDdlYjA5Li41ODJkYjI4NTAzYmZmZjJiOTU4
ZTNkNTI1NWVmN2FiZTlhNjA1NjlhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvRmlsZS5oCisr
KyBiL1dlYkNvcmUvaHRtbC9GaWxlLmgKQEAgLTQxLDE4ICs0MSwxNCBAQCBwdWJsaWM6CiAKICAg
ICB2aXJ0dWFsIGJvb2wgaXNGaWxlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgY29u
c3QgU3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9Ci0gICAgY29uc3QgU3Ry
aW5nJiB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisgICAgY29uc3QgU3RyaW5nJiBu
YW1lKCkgY29uc3Q7CiAKICAgICAvLyBGSVhNRTogb2Jzb2xldGUgYXR0cmlidXRlcy4gVG8gYmUg
cmVtb3ZlZC4KLSAgICBjb25zdCBTdHJpbmcmIGZpbGVOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9u
YW1lOyB9CisgICAgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG5hbWUo
KTsgfQogICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBmaWxlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNp
emUoKTsgfQogCiBwcml2YXRlOgogICAgIEZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKTsKLQotICAg
IFN0cmluZyBtX25hbWU7Ci0gICAgU3RyaW5nIG1fdHlwZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9GaWxlUmVhZGVyLmNwcCBiL1dlYkNv
cmUvaHRtbC9GaWxlUmVhZGVyLmNwcAppbmRleCAzNDQyMzQyMjc1ODEyN2JlZDc3Mzg3MmM0ZmYz
MWZhMDFkZmFjNGU0Li4yZTAyMGMxMTM1MDVjY2I2ZjQ0M2E4ZDI1NmIwZTlhMWJhYjA4MDM0IDEw
MDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvRmlsZVJlYWRlci5jcHAKKysrIGIvV2ViQ29yZS9odG1s
L0ZpbGVSZWFkZXIuY3BwCkBAIC04NSw2ICs4NSw3IEBAIHZvaWQgRmlsZVJlYWRlcjo6c3RvcCgp
CiAKIHZvaWQgRmlsZVJlYWRlcjo6cmVhZEFzQmluYXJ5U3RyaW5nKEJsb2IqIGZpbGVCbG9iKQog
eworICAgIC8vIEZJWE1FOiBuZWVkcyB0byBoYW5kbGUgbm9uLWZpbGUgYmxvYnMuCiAgICAgTE9H
KEZpbGVBUEksICJGaWxlUmVhZGVyOiByZWFkaW5nIGFzIGJpbmFyeTogJXNcbiIsIGZpbGVCbG9i
LT5wYXRoKCkudXRmOCgpLmRhdGEoKSk7CiAKICAgICByZWFkSW50ZXJuYWwoZmlsZUJsb2IsIFJl
YWRGaWxlQXNCaW5hcnlTdHJpbmcpOwpAQCAtOTIsNiArOTMsNyBAQCB2b2lkIEZpbGVSZWFkZXI6
OnJlYWRBc0JpbmFyeVN0cmluZyhCbG9iKiBmaWxlQmxvYikKIAogdm9pZCBGaWxlUmVhZGVyOjpy
ZWFkQXNUZXh0KEJsb2IqIGZpbGVCbG9iLCBjb25zdCBTdHJpbmcmIGVuY29kaW5nKQogeworICAg
IC8vIEZJWE1FOiBuZWVkcyB0byBoYW5kbGUgbm9uLWZpbGUgYmxvYnMuCiAgICAgTE9HKEZpbGVB
UEksICJGaWxlUmVhZGVyOiByZWFkaW5nIGFzIHRleHQ6ICVzXG4iLCBmaWxlQmxvYi0+cGF0aCgp
LnV0ZjgoKS5kYXRhKCkpOwogCiAgICAgaWYgKCFlbmNvZGluZy5pc0VtcHR5KCkpCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2h0bWwvRmlsZVN0cmVhbS5jcHAgYi9XZWJDb3JlL2h0bWwvRmlsZVN0cmVh
bS5jcHAKaW5kZXggNzA4OWY2MTYxNTRlNGIxMGEzMjc3M2UwMzM1NmE3OTM2NDU4Zjk3Zi4uMjVj
NTYzZDVjNTE4NjJiNmRkZTMzZjJlYWRjMjRlYTNhMjY0YWM5NCAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9odG1sL0ZpbGVTdHJlYW0uY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9GaWxlU3RyZWFtLmNwcApA
QCAtNzIsNDggKzcyLDQ5IEBAIHZvaWQgRmlsZVN0cmVhbTo6b3BlbkZvclJlYWQoQmxvYiogYmxv
YikKICAgICBpZiAoaXNIYW5kbGVWYWxpZChtX2hhbmRsZSkpCiAgICAgICAgIHJldHVybjsKIAor
ICAgIC8vIEZJWE1FOiBuZWVkIHRvIGhhbmRsZSBtdWx0aXBsZSBpdGVtcyB0aGF0IG1heSBpbmNs
dWRlIG5vbi1maWxlIG9uZXMKKyAgICAvLyB3aGVuIEJsb2JCdWlsZGVyIGlzIGludHJvZHVjZWQu
CisgICAgQVNTRVJUKGJsb2ItPml0ZW1zKCkuc2l6ZSgpID09IDEgJiYgYmxvYi0+aXRlbXMoKS5h
dCgwKS0+dG9GaWxlQmxvYkl0ZW0oKSk7CisgICAgY29uc3QgRmlsZUJsb2JJdGVtKiBmaWxlID0g
YmxvYi0+aXRlbXMoKS5hdCgwKS0+dG9GaWxlQmxvYkl0ZW0oKTsKKwogICAgIC8vIENoZWNrIGlm
IHRoZSBmaWxlIGV4aXN0cyBieSBxdWVyeWluZyBpdHMgbW9kaWZpY2F0aW9uIHRpbWUuIFdlIGNo
b29zZSBub3QgdG8gY2FsbCBmaWxlRXhpc3RzKCkgaW4gb3JkZXIgdG8gc2F2ZSBhbgogICAgIC8v
IGV4dHJhIGZpbGUgc3lzdGVtIGNhbGwgd2hlbiB0aGUgbW9kaWZpY2F0aW9uIHRpbWUgaXMgbmVl
ZGVkIHRvIGNoZWNrIHRoZSB2YWxpZGl0eSBvZiB0aGUgc2xpY2VkIGZpbGUgYmxvYi4KICAgICAv
LyBQZXIgdGhlIHNwZWMsIHdlIG5lZWQgdG8gcmV0dXJuIGRpZmZlcmVudCBlcnJvciBjb2RlcyB0
byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gbm9uLWV4aXN0ZW50IGZpbGUgYW5kIHBlcm1pc3Npb24g
ZXJyb3IuCiAgICAgLy8gb3BlbkZpbGUoKSBjb3VsZCBub3QgdGVsbCB1c2UgdGhlIGZhaWx1cmUg
cmVhc29uLgogICAgIHRpbWVfdCBjdXJyZW50TW9kaWZpY2F0aW9uVGltZTsKLSAgICBpZiAoIWdl
dEZpbGVNb2RpZmljYXRpb25UaW1lKGJsb2ItPnBhdGgoKSwgY3VycmVudE1vZGlmaWNhdGlvblRp
bWUpKSB7CisgICAgaWYgKCFnZXRGaWxlTW9kaWZpY2F0aW9uVGltZShmaWxlLT5wYXRoKCksIGN1
cnJlbnRNb2RpZmljYXRpb25UaW1lKSkgewogICAgICAgICBtX2NsaWVudC0+ZGlkRmFpbChOT1Rf
Rk9VTkRfRVJSKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIC8vIE9wZW4gdGhlIGZp
bGUgYmxvYi4KLSAgICBtX2hhbmRsZSA9IG9wZW5GaWxlKGJsb2ItPnBhdGgoKSwgT3BlbkZvclJl
YWQpOworICAgIG1faGFuZGxlID0gb3BlbkZpbGUoZmlsZS0+cGF0aCgpLCBPcGVuRm9yUmVhZCk7
CiAgICAgaWYgKCFpc0hhbmRsZVZhbGlkKG1faGFuZGxlKSkgewogICAgICAgICBtX2NsaWVudC0+
ZGlkRmFpbChOT1RfUkVBREFCTEVfRVJSKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogI2lm
IEVOQUJMRShCTE9CX1NMSUNFKQotICAgIC8vIENoZWNrIHRoZSBtb2RpZmljYXRpb250IHRpbWUg
Zm9yIHRoZSBwb3NzaWJsZSBmaWxlIGNoYW5nZS4KLSAgICBpZiAoYmxvYi0+bW9kaWZpY2F0aW9u
VGltZSgpICE9IEJsb2I6OmRvTm90Q2hlY2tGaWxlQ2hhbmdlICYmIHN0YXRpY19jYXN0PHRpbWVf
dD4oYmxvYi0+bW9kaWZpY2F0aW9uVGltZSgpKSAhPSBjdXJyZW50TW9kaWZpY2F0aW9uVGltZSkg
ewotICAgICAgICBtX2NsaWVudC0+ZGlkRmFpbChOT1RfUkVBREFCTEVfRVJSKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIC8vIEp1bXAgdG8gdGhlIGJlZ2lubmluZyBwb3NpdGlvbiBp
ZiB0aGUgZmlsZSBoYXMgYmVlbiBzbGljZWQuCi0gICAgaWYgKGJsb2ItPnN0YXJ0KCkgPiAwKSB7
Ci0gICAgICAgIGlmICghc2Vla0ZpbGUobV9oYW5kbGUsIGJsb2ItPnN0YXJ0KCksIFNlZWtGcm9t
QmVnaW5uaW5nKSkgeworICAgIGNvbnN0IEZpbGVSYW5nZUJsb2JJdGVtKiByYW5nZSA9IGZpbGUt
PnRvRmlsZVJhbmdlQmxvYkl0ZW0oKTsKKyAgICBpZiAocmFuZ2UpIHsKKyAgICAgICAgLy8gQ2hl
Y2sgdGhlIG1vZGlmaWNhdGlvbnQgdGltZSBmb3IgdGhlIHBvc3NpYmxlIGZpbGUgY2hhbmdlLgor
ICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8dGltZV90PihyYW5nZS0+c25hcHNob3RNb2RpZmljYXRp
b25UaW1lKCkpICE9IGN1cnJlbnRNb2RpZmljYXRpb25UaW1lKSB7CiAgICAgICAgICAgICBtX2Ns
aWVudC0+ZGlkRmFpbChOT1RfUkVBREFCTEVfRVJSKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQorCisgICAgICAgIC8vIEp1bXAgdG8gdGhlIGJlZ2lubmluZyBwb3NpdGlvbiBpZiB0
aGUgZmlsZSBoYXMgYmVlbiBzbGljZWQuCisgICAgICAgIGlmIChyYW5nZS0+c3RhcnQoKSA+IDAp
IHsKKyAgICAgICAgICAgIGlmIChzZWVrRmlsZShtX2hhbmRsZSwgcmFuZ2UtPnN0YXJ0KCksIFNl
ZWtGcm9tQmVnaW5uaW5nKSA8IDApIHsKKyAgICAgICAgICAgICAgICBtX2NsaWVudC0+ZGlkRmFp
bChOT1RfUkVBREFCTEVfRVJSKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KICAgICB9CiAjZW5kaWYKIAogICAgIC8vIEdldCB0aGUgc2l6ZS4KLSNp
ZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAgICBtX3RvdGFsQnl0ZXNUb1JlYWQgPSBibG9iLT5sZW5n
dGgoKTsKLSAgICBpZiAobV90b3RhbEJ5dGVzVG9SZWFkID09IEJsb2I6OnRvRW5kT2ZGaWxlKQot
ICAgICAgICBtX3RvdGFsQnl0ZXNUb1JlYWQgPSBibG9iLT5zaXplKCkgLSBibG9iLT5zdGFydCgp
OwotI2Vsc2UKLSAgICBtX3RvdGFsID0gYmxvYi0+c2l6ZSgpOwotI2VuZGlmCi0KKyAgICBtX3Rv
dGFsQnl0ZXNUb1JlYWQgPSBibG9iLT5zaXplKCk7CiAgICAgbV9jbGllbnQtPmRpZEdldFNpemUo
bV90b3RhbEJ5dGVzVG9SZWFkKTsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0Zvcm1E
YXRhTGlzdC5jcHAgYi9XZWJDb3JlL2h0bWwvRm9ybURhdGFMaXN0LmNwcAppbmRleCAyODFjOWZl
NDE4ZTFjNDgzM2JiODdmODJmNzRmMWNjNGQ3MjJkNTdjLi4wZjYyNTk1ZWQ0MWMyMzE5YmRiNzli
NTdiYmQ3Y2E5NDYyMmI4MmFhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvRm9ybURhdGFMaXN0
LmNwcAorKysgYi9XZWJDb3JlL2h0bWwvRm9ybURhdGFMaXN0LmNwcApAQCAtMjgsNjQgKzI4LDIy
IEBAIEZvcm1EYXRhTGlzdDo6Rm9ybURhdGFMaXN0KGNvbnN0IFRleHRFbmNvZGluZyYgYykKIHsK
IH0KIAotdm9pZCBGb3JtRGF0YUxpc3Q6OmFwcGVuZFN0cmluZyhjb25zdCBDU3RyaW5nJiBzKQor
dm9pZCBGb3JtRGF0YUxpc3Q6OmFwcGVuZFN0cmluZyhjb25zdCBTdHJpbmcmIHMpCiB7Ci0gICAg
bV9saXN0LmFwcGVuZChzKTsKKyAgICBtX2l0ZW1zLmFwcGVuZChTdHJpbmdCbG9iSXRlbTo6Y3Jl
YXRlKHMsIEVuZGluZ0NSTEYsIG1fZW5jb2RpbmcpKTsKIH0KIAotLy8gQ2hhbmdlIHBsYWluIENS
IGFuZCBwbGFpbiBMRiB0byBDUkxGIHBhaXJzLgotc3RhdGljIENTdHJpbmcgZml4TGluZUJyZWFr
cyhjb25zdCBDU3RyaW5nJiBzKQordm9pZCBGb3JtRGF0YUxpc3Q6OmFwcGVuZFN0cmluZyhjb25z
dCBDU3RyaW5nJiBzKQogewotICAgIC8vIENvbXB1dGUgdGhlIGxlbmd0aC4KLSAgICB1bnNpZ25l
ZCBuZXdMZW4gPSAwOwotICAgIGNvbnN0IGNoYXIqIHAgPSBzLmRhdGEoKTsKLSAgICB3aGlsZSAo
Y2hhciBjID0gKnArKykgewotICAgICAgICBpZiAoYyA9PSAnXHInKSB7Ci0gICAgICAgICAgICAv
LyBTYWZlIHRvIGxvb2sgYWhlYWQgYmVjYXVzZSBvZiB0cmFpbGluZyAnXDAnLgotICAgICAgICAg
ICAgaWYgKCpwICE9ICdcbicpIHsKLSAgICAgICAgICAgICAgICAvLyBUdXJuIENSIGludG8gQ1JM
Ri4KLSAgICAgICAgICAgICAgICBuZXdMZW4gKz0gMjsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fSBlbHNlIGlmIChjID09ICdcbicpIHsKLSAgICAgICAgICAgIC8vIFR1cm4gTEYgaW50byBDUkxG
LgotICAgICAgICAgICAgbmV3TGVuICs9IDI7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAvLyBMZWF2ZSBvdGhlciBjaGFyYWN0ZXJzIGFsb25lLgotICAgICAgICAgICAgbmV3TGVuICs9
IDE7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKG5ld0xlbiA9PSBzLmxlbmd0aCgpKSB7Ci0g
ICAgICAgIHJldHVybiBzOwotICAgIH0KLSAgICAKLSAgICAvLyBNYWtlIGEgY29weSBvZiB0aGUg
c3RyaW5nLgotICAgIHAgPSBzLmRhdGEoKTsKLSAgICBjaGFyKiBxOwotICAgIENTdHJpbmcgcmVz
dWx0ID0gQ1N0cmluZzo6bmV3VW5pbml0aWFsaXplZChuZXdMZW4sIHEpOwotICAgIHdoaWxlIChj
aGFyIGMgPSAqcCsrKSB7Ci0gICAgICAgIGlmIChjID09ICdccicpIHsKLSAgICAgICAgICAgIC8v
IFNhZmUgdG8gbG9vayBhaGVhZCBiZWNhdXNlIG9mIHRyYWlsaW5nICdcMCcuCi0gICAgICAgICAg
ICBpZiAoKnAgIT0gJ1xuJykgewotICAgICAgICAgICAgICAgIC8vIFR1cm4gQ1IgaW50byBDUkxG
LgotICAgICAgICAgICAgICAgICpxKysgPSAnXHInOwotICAgICAgICAgICAgICAgICpxKysgPSAn
XG4nOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKGMgPT0gJ1xuJykgewotICAg
ICAgICAgICAgLy8gVHVybiBMRiBpbnRvIENSTEYuCi0gICAgICAgICAgICAqcSsrID0gJ1xyJzsK
LSAgICAgICAgICAgICpxKysgPSAnXG4nOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
Ly8gTGVhdmUgb3RoZXIgY2hhcmFjdGVycyBhbG9uZS4KLSAgICAgICAgICAgICpxKysgPSBjOwot
ICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7CisgICAgbV9pdGVtcy5hcHBlbmQo
U3RyaW5nQmxvYkl0ZW06OmNyZWF0ZShzKSk7CiB9CiAKLXZvaWQgRm9ybURhdGFMaXN0OjphcHBl
bmRTdHJpbmcoY29uc3QgU3RyaW5nJiBzKQordm9pZCBGb3JtRGF0YUxpc3Q6OmFwcGVuZEJsb2Io
Y29uc3QgU3RyaW5nJiBrZXksIFBhc3NSZWZQdHI8QmxvYj4gYmxvYikKIHsKLSAgICBDU3RyaW5n
IGNzdHIgPSBmaXhMaW5lQnJlYWtzKG1fZW5jb2RpbmcuZW5jb2RlKHMuY2hhcmFjdGVycygpLCBz
Lmxlbmd0aCgpLCBFbnRpdGllc0ZvclVuZW5jb2RhYmxlcykpOwotICAgIG1fbGlzdC5hcHBlbmQo
Y3N0cik7CisgICAgYXBwZW5kU3RyaW5nKGtleSk7CisgICAgY29uc3QgQmxvYkl0ZW1MaXN0JiBp
dGVtcyA9IGJsb2ItPml0ZW1zKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpdGVtcy5z
aXplKCk7ICsraSkKKyAgICAgICAgbV9pdGVtcy5hcHBlbmQoaXRlbXMuYXQoaSkpOwogfQogCiB9
IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0Zvcm1EYXRhTGlzdC5oIGIv
V2ViQ29yZS9odG1sL0Zvcm1EYXRhTGlzdC5oCmluZGV4IDhlY2Y2NGVlOTNhZDUyNGY0NzkyMWYx
ZDgyMmY5YTA4YmEwMTNkN2MuLmQwYjEzMDc0ZjVkNDM2NzAzMmU3ZTFjMmM5OTY1NGYyMjI5NWE4
NWYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9Gb3JtRGF0YUxpc3QuaAorKysgYi9XZWJDb3Jl
L2h0bWwvRm9ybURhdGFMaXN0LmgKQEAgLTQ2LDI3ICs0Niw5IEBAIHB1YmxpYzoKICAgICAgICAg
YXBwZW5kU3RyaW5nKGtleSk7CiAgICAgICAgIGFwcGVuZFN0cmluZyhTdHJpbmc6Om51bWJlcih2
YWx1ZSkpOwogICAgIH0KLSAgICB2b2lkIGFwcGVuZEJsb2IoY29uc3QgU3RyaW5nJiBrZXksIFBh
c3NSZWZQdHI8QmxvYj4gYmxvYikKLSAgICB7Ci0gICAgICAgIGFwcGVuZFN0cmluZyhrZXkpOwot
ICAgICAgICBtX2xpc3QuYXBwZW5kKGJsb2IpOwotICAgIH0KLQotICAgIGNsYXNzIEl0ZW0gewot
ICAgIHB1YmxpYzoKLSAgICAgICAgSXRlbSgpIHsgfQotICAgICAgICBJdGVtKGNvbnN0IFdURjo6
Q1N0cmluZyYgZGF0YSkgOiBtX2RhdGEoZGF0YSkgeyB9Ci0gICAgICAgIEl0ZW0oUGFzc1JlZlB0
cjxCbG9iPiBibG9iKSA6IG1fYmxvYihibG9iKSB7IH0KLQotICAgICAgICBjb25zdCBXVEY6OkNT
dHJpbmcmIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0KLSAgICAgICAgQmxvYiogYmxv
YigpIGNvbnN0IHsgcmV0dXJuIG1fYmxvYi5nZXQoKTsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAg
ICAgV1RGOjpDU3RyaW5nIG1fZGF0YTsKLSAgICAgICAgUmVmUHRyPEJsb2I+IG1fYmxvYjsKLSAg
ICB9OworICAgIHZvaWQgYXBwZW5kQmxvYihjb25zdCBTdHJpbmcmIGtleSwgUGFzc1JlZlB0cjxC
bG9iPiBibG9iKTsKIAotICAgIGNvbnN0IFZlY3RvcjxJdGVtPiYgbGlzdCgpIGNvbnN0IHsgcmV0
dXJuIG1fbGlzdDsgfQorICAgIGNvbnN0IEJsb2JJdGVtTGlzdCYgaXRlbXMoKSBjb25zdCB7IHJl
dHVybiBtX2l0ZW1zOyB9CiAgICAgY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZygpIGNvbnN0
IHsgcmV0dXJuIG1fZW5jb2Rpbmc7IH0KIAogcHJpdmF0ZToKQEAgLTc0LDcgKzU2LDcgQEAgcHJp
dmF0ZToKICAgICB2b2lkIGFwcGVuZFN0cmluZyhjb25zdCBTdHJpbmcmKTsKIAogICAgIFRleHRF
bmNvZGluZyBtX2VuY29kaW5nOwotICAgIFZlY3RvcjxJdGVtPiBtX2xpc3Q7CisgICAgQmxvYkl0
ZW1MaXN0IG1faXRlbXM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1MRm9y
bUVsZW1lbnQuY3BwCmluZGV4IGM4NDQ1NGQxNTlkYmVjYTVhNGUzNWI5NTJhYmVhYTM0OTliYTUx
ZjMuLjczODVjZTM3ODUyYzM3ZTVlYzE1YjUxZDE0ODliZmMzOTE5ZjJlYTMgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1M
Rm9ybUVsZW1lbnQuY3BwCkBAIC0yMTAsNyArMjEwLDcgQEAgUGFzc1JlZlB0cjxGb3JtRGF0YT4g
SFRNTEZvcm1FbGVtZW50OjpjcmVhdGVGb3JtRGF0YSgpCiAgICAgICAgICAgICBjb250cm9sLT5h
cHBlbmRGb3JtRGF0YSgqZG9tRm9ybURhdGEsIG1fZm9ybURhdGFCdWlsZGVyLmlzTXVsdGlQYXJ0
Rm9ybSgpKTsKICAgICB9CiAKLSAgICBSZWZQdHI8Rm9ybURhdGE+IHJlc3VsdCA9IChtX2Zvcm1E
YXRhQnVpbGRlci5pc011bHRpUGFydEZvcm0oKSkgPyBGb3JtRGF0YTo6Y3JlYXRlTXVsdGlQYXJ0
KCpkb21Gb3JtRGF0YSwgZG9jdW1lbnQoKSkgOiBGb3JtRGF0YTo6Y3JlYXRlKCpkb21Gb3JtRGF0
YSk7CisgICAgUmVmUHRyPEZvcm1EYXRhPiByZXN1bHQgPSAobV9mb3JtRGF0YUJ1aWxkZXIuaXNN
dWx0aVBhcnRGb3JtKCkpID8gRm9ybURhdGE6OmNyZWF0ZU11bHRpUGFydChkb21Gb3JtRGF0YS0+
aXRlbXMoKSwgZG9tRm9ybURhdGEtPmVuY29kaW5nKCksIGRvY3VtZW50KCkpIDogRm9ybURhdGE6
OmNyZWF0ZShkb21Gb3JtRGF0YS0+aXRlbXMoKSwgZG9tRm9ybURhdGEtPmVuY29kaW5nKCkpOwog
CiAgICAgcmVzdWx0LT5zZXRJZGVudGlmaWVyKGdlbmVyYXRlRm9ybURhdGFJZGVudGlmaWVyKCkp
OwogICAgIHJldHVybiByZXN1bHQ7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTFByb2dy
ZXNzRWxlbWVudC5jcHAgYi9XZWJDb3JlL2h0bWwvSFRNTFByb2dyZXNzRWxlbWVudC5jcHAKaW5k
ZXggZDI3NWViZmNmZjhkOTdiOTE2ZDU5ZDI0ZjI0MTlkYThjNTM0YWYyOS4uZjdlODZmM2E5YWZm
ZWNlZGViYjkzYjkzNTM1MGRhYjg1MmFlYTZjNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hU
TUxQcm9ncmVzc0VsZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MUHJvZ3Jlc3NFbGVt
ZW50LmNwcApAQCAtMjQsNiArMjQsNyBAQAogCiAjaW5jbHVkZSAiQXR0cmlidXRlLmgiCiAjaW5j
bHVkZSAiRXZlbnROYW1lcy5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRl
ICJGb3JtRGF0YUxpc3QuaCIKICNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKICNpbmNsdWRl
ICJIVE1MTmFtZXMuaCIKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vQmxvYkl0ZW0uY3Bw
IGIvV2ViQ29yZS9wbGF0Zm9ybS9CbG9iSXRlbS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzIzOGM2M2UxNTZh
MmFhMzk3Yjg2NjVmNTlkYWY3YmE0NjljMGJmNQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUv
cGxhdGZvcm0vQmxvYkl0ZW0uY3BwCkBAIC0wLDAgKzEsMzE4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaW5jbHVkZSAiQmxvYkl0ZW0uaCIKKworI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKKyNp
bmNsdWRlICJVVUlELmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmIEVOQUJMRShCTE9C
X1NMSUNFKQorc3RhdGljIGNvbnN0IGRvdWJsZSBpbnZhbGlkTW9kaWZpY2F0aW9uVGltZSA9IDA7
CisKK2RvdWJsZSBnZXRGaWxlU25hcHNob3RNb2RpZmljYXRpb25UaW1lKGNvbnN0IFN0cmluZyYg
cGF0aCkKK3sKKyAgICAvLyBGSVhNRTogc3luY2hyb25pemVkIGZpbGUgY2FsbAorICAgIHRpbWVf
dCBtb2RpZmljYXRpb25UaW1lOworICAgIGlmIChnZXRGaWxlTW9kaWZpY2F0aW9uVGltZShwYXRo
LCBtb2RpZmljYXRpb25UaW1lKSkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4o
bW9kaWZpY2F0aW9uVGltZSk7CisgICAgcmV0dXJuIGludmFsaWRNb2RpZmljYXRpb25UaW1lOwor
fQorCitQYXNzUmVmUHRyPEJsb2JJdGVtPiBCbG9iSXRlbTo6c2xpY2UobG9uZyBsb25nIHN0YXJ0
LCBsb25nIGxvbmcgbGVuZ3RoKQoreworICAgIEFTU0VSVChzdGFydCA+PSAwICYmIGxlbmd0aCA+
PSAwKTsKKyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihzdGFydCkg
PCBzaXplKCkpOworICAgIGlmICghc3RhcnQgJiYgc2l6ZSgpIDw9IHN0YXRpY19jYXN0PHVuc2ln
bmVkIGxvbmcgbG9uZz4obGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgY29uc3Qg
RmlsZUJsb2JJdGVtKiBmaWxlSXRlbSA9IHRvRmlsZUJsb2JJdGVtKCk7CisgICAgaWYgKGZpbGVJ
dGVtKSB7CisgICAgICAgIGNvbnN0IEZpbGVSYW5nZUJsb2JJdGVtKiBmaWxlUmFuZ2VJdGVtID0g
dG9GaWxlUmFuZ2VCbG9iSXRlbSgpOworICAgICAgICBpZiAoZmlsZVJhbmdlSXRlbSkgeworICAg
ICAgICAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oc3RhcnQgKyBsZW5n
dGgpID4gc2l6ZSgpKQorICAgICAgICAgICAgICAgIGxlbmd0aCA9IHNpemUoKSAtIHN0YXJ0Owor
ICAgICAgICAgICAgc3RhcnQgKz0gZmlsZVJhbmdlSXRlbS0+c3RhcnQoKTsKKyAgICAgICAgICAg
IHJldHVybiBGaWxlUmFuZ2VCbG9iSXRlbTo6Y3JlYXRlKGZpbGVJdGVtLT5wYXRoKCksIHN0YXJ0
LCBsZW5ndGgsIGZpbGVSYW5nZUl0ZW0tPnNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSgpKTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gRmlsZVJhbmdlQmxvYkl0ZW06OmNyZWF0ZShmaWxlSXRl
bS0+cGF0aCgpLCBzdGFydCwgbGVuZ3RoLCBnZXRGaWxlU25hcHNob3RNb2RpZmljYXRpb25UaW1l
KGZpbGVJdGVtLT5wYXRoKCkpKTsKKyAgICB9CisgICAgQVNTRVJUKHRvRGF0YUJsb2JJdGVtKCkp
OworICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KHN0YXJ0ICsgbGVuZ3Ro
KSA+IHNpemUoKSkKKyAgICAgICAgbGVuZ3RoID0gc2l6ZSgpIC0gc3RhcnQ7CisgICAgcmV0dXJu
IERhdGFSYW5nZUJsb2JJdGVtOjpjcmVhdGUoc3RhdGljX2Nhc3Q8RGF0YVJhbmdlQmxvYkl0ZW0q
Pih0aGlzKSwgc3RhcnQsIGxlbmd0aCk7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoQkxPQl9TTElD
RSkKKworLy8gRGF0YUJsb2JJdGVtIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2hhciogRGF0YUJsb2JJdGVtOjpyZWxl
YXNlQnVmZmVyKCkgY29uc3QKK3sKKyAgICAvLyBNYWtlcyBhIGNvcHkgb2YgaXRzIGludGVybmFs
IGRhdGEgYW5kIHBhc3MgdGhlIG93bmVyc2hpcCB0byB0aGUgY2FsbGVyLgorICAgIFZlY3Rvcjxj
aGFyPiB2OworICAgIHYuYXBwZW5kKGRhdGEoKSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihzaXplKCkp
KTsKKyAgICByZXR1cm4gdi5yZWxlYXNlQnVmZmVyKCk7Cit9CisKK2Jvb2wgRGF0YUJsb2JJdGVt
OjplcXVhbHMoY29uc3QgQmxvYkl0ZW0qIGl0ZW0pIGNvbnN0Cit7CisgICAgY29uc3QgRGF0YUJs
b2JJdGVtKiBkYXRhSXRlbSA9IGl0ZW0tPnRvRGF0YUJsb2JJdGVtKCk7CisgICAgcmV0dXJuIGRh
dGFJdGVtICYmIGRhdGEoKSA9PSBkYXRhSXRlbS0+ZGF0YSgpICYmIHNpemUoKSA9PSBkYXRhSXRl
bS0+c2l6ZSgpOworfQorCisKKy8vIEZpbGVCbG9iSXRlbSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1Bhc3NSZWZQdHI8
QmxvYkl0ZW0+IEZpbGVCbG9iSXRlbTo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAg
ICByZXR1cm4gYWRvcHRSZWYoc3RhdGljX2Nhc3Q8QmxvYkl0ZW0qPihuZXcgRmlsZUJsb2JJdGVt
KHBhdGgpKSk7Cit9CisKK0ZpbGVCbG9iSXRlbTo6RmlsZUJsb2JJdGVtKGNvbnN0IFN0cmluZyYg
cGF0aCkKKyAgICA6IG1fcGF0aChwYXRoKQorICAgICwgbV9maWxlTmFtZShwYXRoR2V0RmlsZU5h
bWUobV9wYXRoKSkKK3sKK30KKwordW5zaWduZWQgbG9uZyBsb25nIEZpbGVCbG9iSXRlbTo6c2l6
ZSgpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IHN5bmNocm9uaXplZCBmaWxlIGNhbGwKKyAgICBs
b25nIGxvbmcgc2l6ZTsKKyAgICBpZiAoIWdldEZpbGVTaXplKG1fcGF0aCwgc2l6ZSkpCisgICAg
ICAgIHJldHVybiAwOworICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+
KHNpemUpOworfQorCitQYXNzUmVmUHRyPEJsb2JJdGVtPiBGaWxlQmxvYkl0ZW06OmRlZXBDb3B5
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gRmlsZUJsb2JJdGVtOjpjcmVhdGUobV9wYXRoKTsKK30K
KworYm9vbCBGaWxlQmxvYkl0ZW06OmVxdWFscyhjb25zdCBCbG9iSXRlbSogaXRlbSkgY29uc3QK
K3sKKyAgICBjb25zdCBGaWxlQmxvYkl0ZW0qIGZpbGVJdGVtID0gaXRlbS0+dG9GaWxlQmxvYkl0
ZW0oKTsKKyAgICByZXR1cm4gZmlsZUl0ZW0gJiYgbV9wYXRoID09IGZpbGVJdGVtLT5tX3BhdGg7
Cit9CisKKy8vIFN0cmluZ0Jsb2JJdGVtIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1Bhc3NSZWZQdHI8QmxvYkl0ZW0+IFN0
cmluZ0Jsb2JJdGVtOjpjcmVhdGUoY29uc3QgU3RyaW5nJiB0ZXh0LCBFbmRpbmdUeXBlIGVuZGlu
ZywgVGV4dEVuY29kaW5nIGVuY29kaW5nKQoreworICAgIHJldHVybiBhZG9wdFJlZihzdGF0aWNf
Y2FzdDxCbG9iSXRlbSo+KG5ldyBTdHJpbmdCbG9iSXRlbSh0ZXh0LCBlbmRpbmcsIGVuY29kaW5n
KSkpOworfQorCitQYXNzUmVmUHRyPEJsb2JJdGVtPiBTdHJpbmdCbG9iSXRlbTo6Y3JlYXRlKGNv
bnN0IENTdHJpbmcmIHRleHQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKHN0YXRpY19jYXN0PEJs
b2JJdGVtKj4obmV3IFN0cmluZ0Jsb2JJdGVtKHRleHQpKSk7Cit9CisKKworU3RyaW5nQmxvYkl0
ZW06OlN0cmluZ0Jsb2JJdGVtKGNvbnN0IFN0cmluZyYgdGV4dCwgRW5kaW5nVHlwZSBlbmRpbmcs
IFRleHRFbmNvZGluZyBlbmNvZGluZykKKyAgICA6IG1fZGF0YShTdHJpbmdCbG9iSXRlbTo6Y29u
dmVydFRvQ1N0cmluZyh0ZXh0LCBlbmRpbmcsIGVuY29kaW5nKSkKK3sKK30KKworU3RyaW5nQmxv
Ykl0ZW06OlN0cmluZ0Jsb2JJdGVtKGNvbnN0IENTdHJpbmcmIHRleHQpCisgICAgOiBtX2RhdGEo
dGV4dCkKK3sKK30KKworUGFzc1JlZlB0cjxCbG9iSXRlbT4gU3RyaW5nQmxvYkl0ZW06OmRlZXBD
b3B5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gU3RyaW5nQmxvYkl0ZW06OmNyZWF0ZShDU3RyaW5n
KG1fZGF0YS5kYXRhKCksIG1fZGF0YS5sZW5ndGgoKSkpOworfQorCitib29sIFN0cmluZ0Jsb2JJ
dGVtOjplcXVhbHMoY29uc3QgQmxvYkl0ZW0qIGl0ZW0pIGNvbnN0Cit7CisgICAgaWYgKCFEYXRh
QmxvYkl0ZW06OmVxdWFscyhpdGVtKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNvbnN0
IFN0cmluZ0Jsb2JJdGVtKiBzdHJpbmdJdGVtID0gaXRlbS0+dG9TdHJpbmdCbG9iSXRlbSgpOwor
ICAgIHJldHVybiBzdHJpbmdJdGVtICYmIGRhdGEoKSA9PSBzdHJpbmdJdGVtLT5kYXRhKCkgJiYg
c2l6ZSgpID09IHN0cmluZ0l0ZW0tPnNpemUoKTsKK30KKworQ1N0cmluZyBTdHJpbmdCbG9iSXRl
bTo6Y29udmVydFRvQ1N0cmluZyhjb25zdCBTdHJpbmcmIHRleHQsIEVuZGluZ1R5cGUgZW5kaW5n
LCBUZXh0RW5jb2RpbmcgZW5jb2RpbmcpCit7CisgICAgQ1N0cmluZyBmcm9tID0gZW5jb2Rpbmcu
ZW5jb2RlKHRleHQuY2hhcmFjdGVycygpLCB0ZXh0Lmxlbmd0aCgpLCBFbnRpdGllc0ZvclVuZW5j
b2RhYmxlcyk7CisgICAgQ1N0cmluZyByZXN1bHQgPSBmcm9tOworCisgICAgaWYgKGVuZGluZyA9
PSBFbmRpbmdUcmFuc3BhcmVudCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIGNvbnN0
IGNoYXIqIGVuZGluZ0NoYXJzID0gKGVuZGluZyA9PSBFbmRpbmdDUkxGKSA/ICJcclxuIiA6ICgo
ZW5kaW5nID09IEVuZGluZ0NSKSA/ICJcciIgOiAiXG4iKTsKKworICAgIGludCBlbmRpbmdMZW5n
dGggPSAoZW5kaW5nID09IEVuZGluZ0NSTEYpID8gMiA6IDE7CisgICAgaW50IG5lZWRGaXggPSAw
OworCisgICAgLy8gQ2FsY3VsYXRlIHRoZSBmaW5hbCBsZW5ndGguCisgICAgaW50IGNhbGN1bGF0
ZWRMZW5ndGggPSBmcm9tLmxlbmd0aCgpOworICAgIGNvbnN0IGNoYXIqIHAgPSBmcm9tLmRhdGEo
KTsKKyAgICB3aGlsZSAoY2hhciBjID0gKnArKykgeworICAgICAgICBpZiAoYyA9PSAnXHInKSB7
CisgICAgICAgICAgICAvLyBTYWZlIHRvIGxvb2sgYWhlYWQgYmVjYXVzZSBvZiB0cmFpbGluZyAn
XDAnLgorICAgICAgICAgICAgaWYgKCpwID09ICdcbicgJiYgZW5kaW5nICE9IEVuZGluZ0NSTEYp
IHsKKyAgICAgICAgICAgICAgICBjYWxjdWxhdGVkTGVuZ3RoICs9IChlbmRpbmdMZW5ndGggLSAy
KTsKKyAgICAgICAgICAgICAgICArK25lZWRGaXg7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGVu
ZGluZyAhPSBFbmRpbmdDUikgeworICAgICAgICAgICAgICAgIGNhbGN1bGF0ZWRMZW5ndGggKz0g
KGVuZGluZ0xlbmd0aCAtIDEpOworICAgICAgICAgICAgICAgICsrbmVlZEZpeDsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChjID09ICdcbicgJiYgZW5kaW5nICE9IEVuZGluZ0xG
KSB7CisgICAgICAgICAgICBjYWxjdWxhdGVkTGVuZ3RoICs9IChlbmRpbmdMZW5ndGggLSAxKTsK
KyAgICAgICAgICAgICsrbmVlZEZpeDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghbmVl
ZEZpeCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIC8vIENvbnZlcnQgdGhlIGVuZGlu
Z3MgYW5kIGNyZWF0ZSBhIGRhdGEgYnVmZmVyLgorICAgIHAgPSBmcm9tLmRhdGEoKTsKKyAgICBj
aGFyKiBxOworICAgIHJlc3VsdCA9IENTdHJpbmc6Om5ld1VuaW5pdGlhbGl6ZWQoY2FsY3VsYXRl
ZExlbmd0aCwgcSk7CisgICAgd2hpbGUgKGNoYXIgYyA9ICpwKyspIHsKKyAgICAgICAgaWYgKGMg
PT0gJ1xyJykgeworICAgICAgICAgICAgaWYgKCpwID09ICdcbicgJiYgZW5kaW5nICE9IEVuZGlu
Z0NSTEYpIHsKKyAgICAgICAgICAgICAgICBtZW1jcHkocSwgZW5kaW5nQ2hhcnMsIGVuZGluZ0xl
bmd0aCk7CisgICAgICAgICAgICAgICAgcSArPSBlbmRpbmdMZW5ndGg7CisgICAgICAgICAgICB9
IGVsc2UgaWYgKCpwICE9ICdcbicgJiYgZW5kaW5nICE9IEVuZGluZ0NSKSB7CisgICAgICAgICAg
ICAgICAgbWVtY3B5KHEsIGVuZGluZ0NoYXJzLCBlbmRpbmdMZW5ndGgpOworICAgICAgICAgICAg
ICAgIHEgKz0gZW5kaW5nTGVuZ3RoOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYg
KGMgPT0gJ1xuJyAmJiBlbmRpbmcgIT0gRW5kaW5nTEYpIHsKKyAgICAgICAgICAgIG1lbWNweShx
LCBlbmRpbmdDaGFycywgZW5kaW5nTGVuZ3RoKTsKKyAgICAgICAgICAgIHEgKz0gZW5kaW5nTGVu
Z3RoOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gTGVhdmUgb3RoZXIgY2hhcmFj
dGVycyBhbG9uZS4KKyAgICAgICAgICAgICpxKysgPSBjOworICAgICAgICB9CisgICAgfQorICAg
IHJldHVybiByZXN1bHQ7Cit9CisKKy8vIEJ5dGVzQXJyYXlCbG9iSXRlbSAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1Bhc3NSZWZQ
dHI8QmxvYkl0ZW0+IEJ5dGVzQXJyYXlCbG9iSXRlbTo6Y3JlYXRlKGNvbnN0IGNoYXIqIGRhdGEs
IHNpemVfdCBzaXplKQoreworICAgIHJldHVybiBhZG9wdFJlZihzdGF0aWNfY2FzdDxCbG9iSXRl
bSo+KG5ldyBCeXRlc0FycmF5QmxvYkl0ZW0oZGF0YSwgc2l6ZSkpKTsKK30KKworQnl0ZXNBcnJh
eUJsb2JJdGVtOjpCeXRlc0FycmF5QmxvYkl0ZW0oY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IHNp
emUpCit7CisgICAgbV9ieXRlc0FycmF5LmFwcGVuZChkYXRhLCBzaXplKTsKK30KKworUGFzc1Jl
ZlB0cjxCbG9iSXRlbT4gQnl0ZXNBcnJheUJsb2JJdGVtOjpkZWVwQ29weSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIEJ5dGVzQXJyYXlCbG9iSXRlbTo6Y3JlYXRlKG1fYnl0ZXNBcnJheS5kYXRhKCks
IG1fYnl0ZXNBcnJheS5zaXplKCkpOworfQorCisjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCisKKy8v
IERhdGFSYW5nZUJsb2JJdGVtIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1Bhc3NSZWZQdHI8QmxvYkl0ZW0+IERhdGFSYW5nZUJs
b2JJdGVtOjpjcmVhdGUoUGFzc1JlZlB0cjxEYXRhQmxvYkl0ZW0+IGl0ZW0sIGxvbmcgbG9uZyBz
dGFydCwgbG9uZyBsb25nIGxlbmd0aCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoc3RhdGljX2Nh
c3Q8QmxvYkl0ZW0qPihuZXcgRGF0YVJhbmdlQmxvYkl0ZW0oaXRlbSwgc3RhcnQsIGxlbmd0aCkp
KTsKK30KKworRGF0YVJhbmdlQmxvYkl0ZW06OkRhdGFSYW5nZUJsb2JJdGVtKFBhc3NSZWZQdHI8
RGF0YUJsb2JJdGVtPiBpdGVtLCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgpCisg
ICAgOiBtX2xlbmd0aChsZW5ndGgpCit7CisgICAgY29uc3QgRGF0YVJhbmdlQmxvYkl0ZW0qIHJh
bmdlSXRlbSA9IG1faXRlbS0+dG9EYXRhUmFuZ2VCbG9iSXRlbSgpOworICAgIGlmIChyYW5nZUl0
ZW0pIHsKKyAgICAgICAgbV9pdGVtID0gcmFuZ2VJdGVtLT5tX2l0ZW07CisgICAgICAgIG1fc3Rh
cnQgPSBzdGFydCArIHJhbmdlSXRlbS0+bV9zdGFydDsKKyAgICAgICAgQVNTRVJUKCFtX2l0ZW0t
PnRvRGF0YVJhbmdlQmxvYkl0ZW0oKSk7CisgICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1bnNp
Z25lZCBsb25nIGxvbmc+KG1fc3RhcnQgKyBtX2xlbmd0aCkgPD0gbV9pdGVtLT5zaXplKCkpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIG1faXRlbSA9IGl0ZW07CisgICAgICAgIG1fc3RhcnQgPSBz
dGFydDsKKyAgICB9Cit9CisKK2NvbnN0IGNoYXIqIERhdGFSYW5nZUJsb2JJdGVtOjpkYXRhKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9pdGVtLT5kYXRhKCkgKyBtX3N0YXJ0OworfQorCitQYXNz
UmVmUHRyPEJsb2JJdGVtPiBEYXRhUmFuZ2VCbG9iSXRlbTo6ZGVlcENvcHkoKSBjb25zdAorewor
ICAgIHJldHVybiBEYXRhUmFuZ2VCbG9iSXRlbTo6Y3JlYXRlKHN0YXRpY19wb2ludGVyX2Nhc3Q8
RGF0YUJsb2JJdGVtPihtX2l0ZW0tPmRlZXBDb3B5KCkpLCBtX3N0YXJ0LCBtX2xlbmd0aCk7Cit9
CisKK2Jvb2wgRGF0YVJhbmdlQmxvYkl0ZW06OmVxdWFscyhjb25zdCBCbG9iSXRlbSogaXRlbSkg
Y29uc3QKK3sKKyAgICBjb25zdCBEYXRhUmFuZ2VCbG9iSXRlbSogcmFuZ2VJdGVtID0gaXRlbS0+
dG9EYXRhUmFuZ2VCbG9iSXRlbSgpOworICAgIHJldHVybiByYW5nZUl0ZW0gJiYgbV9zdGFydCA9
PSByYW5nZUl0ZW0tPm1fc3RhcnQgJiYgbV9sZW5ndGggPT0gcmFuZ2VJdGVtLT5tX2xlbmd0aCAm
JiBtX2l0ZW0tPmVxdWFscyhyYW5nZUl0ZW0tPm1faXRlbS5nZXQoKSk7Cit9CisKKy8vIEZpbGVS
YW5nZUJsb2JJdGVtIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisKK1Bhc3NSZWZQdHI8QmxvYkl0ZW0+IEZpbGVSYW5nZUJsb2JJdGVt
OjpjcmVhdGUoY29uc3QgU3RyaW5nJiBwYXRoLCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBs
ZW5ndGgsIGRvdWJsZSBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUpCit7CisgICAgcmV0dXJuIGFk
b3B0UmVmKHN0YXRpY19jYXN0PEJsb2JJdGVtKj4obmV3IEZpbGVSYW5nZUJsb2JJdGVtKHBhdGgs
IHN0YXJ0LCBsZW5ndGgsIHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSkpKTsKK30KKworRmlsZVJh
bmdlQmxvYkl0ZW06OkZpbGVSYW5nZUJsb2JJdGVtKGNvbnN0IFN0cmluZyYgcGF0aCwgbG9uZyBs
b25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoLCBkb3VibGUgbW9kaWZpY2F0aW9uVGltZSkKKyAg
ICA6IEZpbGVCbG9iSXRlbShwYXRoKQorICAgICwgbV9zdGFydChzdGFydCkKKyAgICAsIG1fbGVu
Z3RoKGxlbmd0aCkKKyAgICAsIG1fc25hcHNob3RNb2RpZmljYXRpb25UaW1lKG1vZGlmaWNhdGlv
blRpbWUpCit7CisgICAgbV91bmlxdWVOYW1lID0gIkJsb2IiICsgY3JlYXRlQ2Fub25pY2FsVVVJ
RFN0cmluZygpOworICAgIG1fdW5pcXVlTmFtZS5yZXBsYWNlKCItIiwgIiIpOyAvLyBGb3Igc2Fm
dHksIHJlbW92ZSAnLScgZnJvbSB0aGUgZmlsZW5hbWUgc25jZSBzb21lIHNlcnZlcnMgbWF5IG5v
dCBsaWtlIGl0LgorfQorCitQYXNzUmVmUHRyPEJsb2JJdGVtPiBGaWxlUmFuZ2VCbG9iSXRlbTo6
ZGVlcENvcHkoKSBjb25zdAoreworICAgIHJldHVybiBGaWxlUmFuZ2VCbG9iSXRlbTo6Y3JlYXRl
KHBhdGgoKSwgbV9zdGFydCwgbV9sZW5ndGgsIG1fc25hcHNob3RNb2RpZmljYXRpb25UaW1lKTsK
K30KKworYm9vbCBGaWxlUmFuZ2VCbG9iSXRlbTo6ZXF1YWxzKGNvbnN0IEJsb2JJdGVtKiBpdGVt
KSBjb25zdAoreworICAgIGlmICghRmlsZUJsb2JJdGVtOjplcXVhbHMoaXRlbSkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBjb25zdCBGaWxlUmFuZ2VCbG9iSXRlbSogcmFuZ2VJdGVtID0g
aXRlbS0+dG9GaWxlUmFuZ2VCbG9iSXRlbSgpOworICAgIHJldHVybiByYW5nZUl0ZW0gJiYgbV9z
dGFydCA9PSByYW5nZUl0ZW0tPm1fc3RhcnQgJiYgbV91bmlxdWVOYW1lID09IHJhbmdlSXRlbS0+
bV91bmlxdWVOYW1lICYmIG1fc25hcHNob3RNb2RpZmljYXRpb25UaW1lID09IHJhbmdlSXRlbS0+
bV9zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWU7Cit9CisKK2Jvb2wgRmlsZVJhbmdlQmxvYkl0ZW06
OmlzVmFsaWQoKSBjb25zdAoreworICAgIGlmIChtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZSA9
PSBpbnZhbGlkTW9kaWZpY2F0aW9uVGltZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJl
dHVybiBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZSA9PSBnZXRGaWxlU25hcHNob3RNb2RpZmlj
YXRpb25UaW1lKHBhdGgoKSk7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoQkxPQl9TTElDRSkKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9CbG9i
SXRlbS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9CbG9iSXRlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRmZDhmZDQ4
Y2YzZDc2ZWZmZDZjNDEyMzcyNTNiZjliOGQ3Mjk3NDYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL0Jsb2JJdGVtLmgKQEAgLTAsMCArMSwyMjYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlv
bi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBCbG9iSXRl
bV9oCisjZGVmaW5lIEJsb2JJdGVtX2gKKworI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisj
aW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKKy8vIFN0cmluZyBlbmRpbmcgdHlwZXMuCitlbnVtIEVuZGluZ1R5
cGUgeworICAgIEVuZGluZ1RyYW5zcGFyZW50ID0gMCwKKyAgICBFbmRpbmdMRiwKKyAgICBFbmRp
bmdDUiwKKyAgICBFbmRpbmdDUkxGLAorfTsKKworY2xhc3MgQnl0ZXNBcnJheUJsb2JJdGVtOwor
Y2xhc3MgRGF0YUJsb2JJdGVtOworY2xhc3MgRGF0YVJhbmdlQmxvYkl0ZW07CitjbGFzcyBGaWxl
QmxvYkl0ZW07CitjbGFzcyBGaWxlUmFuZ2VCbG9iSXRlbTsKK2NsYXNzIFN0cmluZ0Jsb2JJdGVt
OworCisvLyBBIGJhc2UgaW50ZXJmYWNlIGZvciBhbGwgYXJiaXRyYXJ5LWRhdGEtb2JqZWN0IGNv
bXBvbmVudCBpdGVtcy4KKy8vIFRoZSBCbG9iSXRlbSBhbmQgaXRzIHN1YmNsYXNzZXMgYXJlIHN0
cnVjdHVyZWQgbGlrZSB0aGUgZm9sbG93aW5nOgorLy8gICAgQmxvYkl0ZW0KKy8vICAgICAgIHwK
Ky8vICAgICAgICstLS0tLS0tPiBEYXRhQmxvYkl0ZW0KKy8vICAgICAgIHwgICAgICAgICAgICAg
IHwKKy8vICAgICAgIHwgICAgICAgICAgICAgICstLS0tLS0tLS0+IFN0cmluZ0Jsb2JJdGVtCisv
LyAgICAgICB8ICAgICAgICAgICAgICArLS0tLS0tLS0tPiBCeXRlQXJyYXlCbG9iSXRlbQorLy8g
ICAgICAgfCAgICAgICAgICAgICAgKy0tLS0tLS0tLT4gRGF0YVJhbmdlQmxvYkl0ZW0KKy8vICAg
ICAgIHwKKy8vICAgICAgICstLS0tLS0tPiBGaWxlQmxvYkl0ZW0KKy8vICAgICAgICAgICAgICAg
ICAgICAgIHwKKy8vICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0+IEZpbGVSYW5nZUJs
b2JJdGVtCisvLworY2xhc3MgQmxvYkl0ZW0gOiBwdWJsaWMgUmVmQ291bnRlZDxCbG9iSXRlbT4g
eworcHVibGljOgorICAgIHZpcnR1YWwgfkJsb2JJdGVtKCkgeyB9CisgICAgdmlydHVhbCB1bnNp
Z25lZCBsb25nIGxvbmcgc2l6ZSgpIGNvbnN0ID0gMDsKKworICAgIC8vIFJldHVybnMgZmFsc2Ug
aWYgdGhlIGRhdGEgaGFzIGJlY29tZSBzdGFsZSBvciBpbnZhbGlkLgorICAgIHZpcnR1YWwgYm9v
bCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgdmlydHVhbCBjb25zdCBE
YXRhQmxvYkl0ZW0qIHRvRGF0YUJsb2JJdGVtKCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZp
cnR1YWwgY29uc3QgU3RyaW5nQmxvYkl0ZW0qIHRvU3RyaW5nQmxvYkl0ZW0oKSBjb25zdCB7IHJl
dHVybiAwOyB9CisgICAgdmlydHVhbCBjb25zdCBCeXRlc0FycmF5QmxvYkl0ZW0qIHRvQnl0ZXNB
cnJheUJsb2JJdGVtKCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgY29uc3QgRmls
ZUJsb2JJdGVtKiB0b0ZpbGVCbG9iSXRlbSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyNpZiBFTkFC
TEUoQkxPQl9TTElDRSkKKyAgICB2aXJ0dWFsIGNvbnN0IERhdGFSYW5nZUJsb2JJdGVtKiB0b0Rh
dGFSYW5nZUJsb2JJdGVtKCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgY29uc3Qg
RmlsZVJhbmdlQmxvYkl0ZW0qIHRvRmlsZVJhbmdlQmxvYkl0ZW0oKSBjb25zdCB7IHJldHVybiAw
OyB9CisjZW5kaWYgLy8gRU5BQkxFKEJMT0JfU0xJQ0UpCisKKyAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8QmxvYkl0ZW0+IGRlZXBDb3B5KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBlcXVh
bHMoY29uc3QgQmxvYkl0ZW0qKSBjb25zdCA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICBCbG9iSXRl
bSgpIHsgfQorCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBCbG9iOworI2lmIEVOQUJMRShC
TE9CX1NMSUNFKQorICAgIC8vIE5vIGV4dGVybmFsIG1ldGhvZHMgZXhjZXB0IGZvciBCbG9iOjpz
bGljZSBzaG91bGQgY2FsbCB0aGlzLgorICAgIFBhc3NSZWZQdHI8QmxvYkl0ZW0+IHNsaWNlKGxv
bmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCk7CisjZW5kaWYgLy8gRU5BQkxFKEJMT0Jf
U0xJQ0UpCit9OworCisvLyBJbiBtb3N0IGNhc2VzIEJsb2JJdGVtJ3MgYXJlIGhhbmRsZWQgYXMg
YSBsaXN0IChlLmcuIGluIEJsb2IsIEZvcm1EYXRhKS4KK3R5cGVkZWYgVmVjdG9yPFJlZlB0cjxC
bG9iSXRlbT4gPiBCbG9iSXRlbUxpc3Q7CisKK2NsYXNzIERhdGFCbG9iSXRlbSA6IHB1YmxpYyBC
bG9iSXRlbSB7CitwdWJsaWM6CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiBkYXRhKCkgY29uc3Qg
PSAwOworICAgIGNoYXIqIHJlbGVhc2VCdWZmZXIoKSBjb25zdDsKKworICAgIC8vIEJsb2JJdGVt
IG1ldGhvZHMuCisgICAgdmlydHVhbCBjb25zdCBEYXRhQmxvYkl0ZW0qIHRvRGF0YUJsb2JJdGVt
KCkgY29uc3QgeyByZXR1cm4gdGhpczsgfQorICAgIHZpcnR1YWwgYm9vbCBlcXVhbHMoY29uc3Qg
QmxvYkl0ZW0qKSBjb25zdDsKK307CisKK2NsYXNzIEZpbGVCbG9iSXRlbSA6IHB1YmxpYyBCbG9i
SXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QmxvYkl0ZW0+IGNyZWF0ZShj
b25zdCBTdHJpbmcmIHBhdGgpOworICAgIHZpcnR1YWwgY29uc3QgU3RyaW5nJiBuYW1lKCkgY29u
c3QgeyByZXR1cm4gbV9maWxlTmFtZTsgfQorICAgIHZpcnR1YWwgY29uc3QgU3RyaW5nJiBwYXRo
KCkgY29uc3QgeyByZXR1cm4gbV9wYXRoOyB9CisKKyAgICAvLyBCbG9iSXRlbSBtZXRob2RzLgor
ICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBsb25nIHNpemUoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IGNvbnN0IEZpbGVCbG9iSXRlbSogdG9GaWxlQmxvYkl0ZW0oKSBjb25zdCB7IHJldHVybiB0aGlz
OyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEJsb2JJdGVtPiBkZWVwQ29weSgpIGNvbnN0Owor
ICAgIHZpcnR1YWwgYm9vbCBlcXVhbHMoY29uc3QgQmxvYkl0ZW0qKSBjb25zdDsKKworcHJvdGVj
dGVkOgorICAgIEZpbGVCbG9iSXRlbShjb25zdCBTdHJpbmcmIHBhdGgpOworICAgIFN0cmluZyBt
X3BhdGg7CisgICAgU3RyaW5nIG1fZmlsZU5hbWU7Cit9OworCitjbGFzcyBTdHJpbmdCbG9iSXRl
bSA6IHB1YmxpYyBEYXRhQmxvYkl0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEJsb2JJdGVtPiBjcmVhdGUoY29uc3QgU3RyaW5nJiwgRW5kaW5nVHlwZSwgVGV4dEVuY29kaW5n
KTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCbG9iSXRlbT4gY3JlYXRlKGNvbnN0IENTdHJpbmcm
KTsKKyAgICBjb25zdCBDU3RyaW5nJiBjc3RyKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9CisK
KyAgICAvLyBCbG9iSXRlbSBtZXRob2RzLgorICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBsb25n
IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2RhdGEubGVuZ3RoKCk7IH0KKyAgICB2aXJ0dWFsIGNv
bnN0IFN0cmluZ0Jsb2JJdGVtKiB0b1N0cmluZ0Jsb2JJdGVtKCkgY29uc3QgeyByZXR1cm4gdGhp
czsgfQorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxCbG9iSXRlbT4gZGVlcENvcHkoKSBjb25zdDsK
KyAgICB2aXJ0dWFsIGJvb2wgZXF1YWxzKGNvbnN0IEJsb2JJdGVtKikgY29uc3Q7CisKKyAgICAv
LyBEYXRhQmxvYkl0ZW0gbWV0aG9kcy4KKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGRhdGEoKSBj
b25zdCB7IHJldHVybiBtX2RhdGEuZGF0YSgpOyB9CisKK3ByaXZhdGU6CisgICAgU3RyaW5nQmxv
Ykl0ZW0oY29uc3QgU3RyaW5nJiwgRW5kaW5nVHlwZSwgVGV4dEVuY29kaW5nKTsKKyAgICBTdHJp
bmdCbG9iSXRlbShjb25zdCBDU3RyaW5nJik7CisgICAgc3RhdGljIENTdHJpbmcgY29udmVydFRv
Q1N0cmluZyhjb25zdCBTdHJpbmcmLCBFbmRpbmdUeXBlLCBUZXh0RW5jb2RpbmcpOworICAgIENT
dHJpbmcgbV9kYXRhOworfTsKKworY2xhc3MgQnl0ZXNBcnJheUJsb2JJdGVtIDogcHVibGljIERh
dGFCbG9iSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QmxvYkl0ZW0+IGNy
ZWF0ZShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3Qgc2l6ZSk7CisKKyAgICAvLyBCbG9iSXRlbSBt
ZXRob2RzLgorICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBsb25nIHNpemUoKSBjb25zdCB7IHJl
dHVybiBtX2J5dGVzQXJyYXkuc2l6ZSgpOyB9CisgICAgdmlydHVhbCBjb25zdCBCeXRlc0FycmF5
QmxvYkl0ZW0qIHRvQnl0ZXNBcnJheUJsb2JJdGVtKCkgY29uc3QgeyByZXR1cm4gdGhpczsgfQor
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxCbG9iSXRlbT4gZGVlcENvcHkoKSBjb25zdDsKKworICAg
IC8vIERhdGFCbG9iSXRlbSBtZXRob2RzLgorICAgIHZpcnR1YWwgY29uc3QgY2hhciogZGF0YSgp
IGNvbnN0IHsgcmV0dXJuIG1fYnl0ZXNBcnJheS5kYXRhKCk7IH0KKworcHJpdmF0ZToKKyAgICBC
eXRlc0FycmF5QmxvYkl0ZW0oY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IHNpemUpOworICAgIFZl
Y3RvcjxjaGFyPiBtX2J5dGVzQXJyYXk7Cit9OworCisjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCisK
Ky8vIEJsb2JJdGVtIGNsYXNzIGZvciBzbGljZWQgZGF0YSAoc3RyaW5nIG9yIGJ5dGVzLWFycmF5
KS4KK2NsYXNzIERhdGFSYW5nZUJsb2JJdGVtIDogcHVibGljIERhdGFCbG9iSXRlbSB7CitwdWJs
aWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QmxvYkl0ZW0+IGNyZWF0ZShQYXNzUmVmUHRyPERh
dGFCbG9iSXRlbT4sIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCk7CisKKyAgICAv
LyBCbG9iSXRlbSBtZXRob2RzLgorICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBsb25nIHNpemUo
KSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQorICAgIHZpcnR1YWwgY29uc3QgRGF0YVJhbmdl
QmxvYkl0ZW0qIHRvRGF0YVJhbmdlQmxvYkl0ZW0oKSBjb25zdCB7IHJldHVybiB0aGlzOyB9Cisg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPEJsb2JJdGVtPiBkZWVwQ29weSgpIGNvbnN0OworICAgIHZp
cnR1YWwgYm9vbCBlcXVhbHMoY29uc3QgQmxvYkl0ZW0qKSBjb25zdDsKKworICAgIC8vIERhdGFC
bG9iSXRlbSBtZXRob2RzLgorICAgIHZpcnR1YWwgY29uc3QgY2hhciogZGF0YSgpIGNvbnN0Owor
Citwcml2YXRlOgorICAgIERhdGFSYW5nZUJsb2JJdGVtKFBhc3NSZWZQdHI8RGF0YUJsb2JJdGVt
PiBpdGVtLCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgpOworICAgIFJlZlB0cjxE
YXRhQmxvYkl0ZW0+IG1faXRlbTsKKyAgICBsb25nIGxvbmcgbV9zdGFydDsKKyAgICBsb25nIGxv
bmcgbV9sZW5ndGg7Cit9OworCitjbGFzcyBGaWxlUmFuZ2VCbG9iSXRlbSA6IHB1YmxpYyBGaWxl
QmxvYkl0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJsb2JJdGVtPiBjcmVh
dGUoY29uc3QgU3RyaW5nJiBwYXRoLCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgs
IGRvdWJsZSBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUpOworICAgIGxvbmcgbG9uZyBzdGFydCgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhcnQ7IH0KKyAgICBkb3VibGUgc25hcHNob3RNb2RpZmljYXRp
b25UaW1lKCkgY29uc3QgeyByZXR1cm4gbV9zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWU7IH0KKwor
ICAgIC8vIEJsb2JJdGVtIG1ldGhvZHMuCisgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxvbmcg
c2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9CisgICAgdmlydHVhbCBjb25zdCBGaWxl
UmFuZ2VCbG9iSXRlbSogdG9GaWxlUmFuZ2VCbG9iSXRlbSgpIGNvbnN0IHsgcmV0dXJuIHRoaXM7
IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0OworICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxCbG9iSXRlbT4gZGVlcENvcHkoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZXF1YWxz
KGNvbnN0IEJsb2JJdGVtKikgY29uc3Q7CisKKyAgICAvLyBGaWxlQmxvYkl0ZW0gbWV0aG9kcy4K
KyAgICB2aXJ0dWFsIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fdW5pcXVl
TmFtZTsgfQorCitwcml2YXRlOgorICAgIEZpbGVSYW5nZUJsb2JJdGVtKGNvbnN0IFN0cmluZyYg
cGF0aCwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoLCBkb3VibGUgc25hcHNob3RN
b2RpZmljYXRpb25UaW1lKTsKKyAgICBsb25nIGxvbmcgbV9zdGFydDsKKyAgICBsb25nIGxvbmcg
bV9sZW5ndGg7CisgICAgU3RyaW5nIG1fdW5pcXVlTmFtZTsKKworICAgIGRvdWJsZSBtX3NuYXBz
aG90TW9kaWZpY2F0aW9uVGltZTsKK307CisKKyNlbmRpZiAvLyBFTkFCTEUoQkxPQl9TTElDRSkK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQmxvYkl0ZW1faApkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcCBiL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAKaW5kZXggOTE4MDAyYWVmZDgxYTY4OTFmOWYxOWJh
ZjQ0ZDc1NTkxZmRmYTQ4NC4uNjUzNjM5ZmFhNzNlZTY2MmQxZWJhOGNkZTAwYjA5MGVlYzAwOTM1
ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcAorKysg
Yi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwCkBAIC0xOSwyMyArMTksNDYg
QEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCisKICNpbmNsdWRlICJGb3JtRGF0YS5oIgog
Ci0jaW5jbHVkZSAiQmxvYi5oIgorI2luY2x1ZGUgIkJsb2JJdGVtLmgiCiAjaW5jbHVkZSAiQ2hy
b21lLmgiCiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCi0jaW5jbHVkZSAiRE9NRm9ybURhdGEu
aCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkZpbGUuaCIKICNpbmNsdWRlICJG
aWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiRm9ybURhdGFCdWlsZGVyLmgiCiAjaW5jbHVkZSAiTUlN
RVR5cGVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJUZXh0RW5jb2Rp
bmcuaCIKLSNpbmNsdWRlICJVVUlELmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorI2lmIEVO
QUJMRShCTE9CX1NMSUNFKQorY29uc3QgbG9uZyBsb25nIEZvcm1EYXRhRWxlbWVudDo6dG9FbmRP
ZkZpbGUgPSAtMTsKKyNlbmRpZgorCitGb3JtRGF0YUVsZW1lbnQ6OkZvcm1EYXRhRWxlbWVudChQ
YXNzUmVmUHRyPEJsb2JJdGVtPiBibG9iSXRlbSwgYm9vbCBzaG91bGRHZW5lcmF0ZUZpbGUpCisg
ICAgOiBtX2l0ZW0oYmxvYkl0ZW0pCisgICAgLCBtX3R5cGUobV9pdGVtLT50b0ZpbGVCbG9iSXRl
bSgpID8gZW5jb2RlZEZpbGUgOiBkYXRhKQorICAgICwgbV9kYXRhKG1faXRlbS0+dG9EYXRhQmxv
Ykl0ZW0oKSkKKyAgICAsIG1fZmlsZW5hbWUobV9pdGVtLT50b0ZpbGVCbG9iSXRlbSgpID8gbV9p
dGVtLT50b0ZpbGVCbG9iSXRlbSgpLT5wYXRoKCkgOiBTdHJpbmcoKSkKKyAgICAsIG1fc2hvdWxk
R2VuZXJhdGVGaWxlKHNob3VsZEdlbmVyYXRlRmlsZSkKK3sKKyNpZiBFTkFCTEUoQkxPQl9TTElD
RSkKKyAgICBjb25zdCBGaWxlUmFuZ2VCbG9iSXRlbSogcmFuZ2UgPSBtX2l0ZW0tPnRvRmlsZVJh
bmdlQmxvYkl0ZW0oKTsKKyAgICBpZiAocmFuZ2UpIHsKKyAgICAgICAgbV9maWxlU3RhcnQgPSBy
YW5nZS0+c3RhcnQoKTsKKyAgICAgICAgbV9maWxlTGVuZ3RoID0gcmFuZ2UtPnNpemUoKTsKKyAg
ICAgICAgbV9leHBlY3RlZEZpbGVNb2RpZmljYXRpb25UaW1lID0gcmFuZ2UtPnNuYXBzaG90TW9k
aWZpY2F0aW9uVGltZSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fZmlsZVN0YXJ0ID0gMDsK
KyAgICAgICAgbV9maWxlTGVuZ3RoID0gdG9FbmRPZkZpbGU7CisgICAgICAgIG1fZXhwZWN0ZWRG
aWxlTW9kaWZpY2F0aW9uVGltZSA9IDA7CisgICAgfQorI2VuZGlmCit9CisKIGlubGluZSBGb3Jt
RGF0YTo6Rm9ybURhdGEoKQogICAgIDogbV9pZGVudGlmaWVyKDApCiAgICAgLCBtX2hhc0dlbmVy
YXRlZEZpbGVzKGZhbHNlKQpAQCAtODUsNyArMTA4LDcgQEAgUGFzc1JlZlB0cjxGb3JtRGF0YT4g
Rm9ybURhdGE6OmNyZWF0ZShjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSkKIFBhc3NSZWZQ
dHI8Rm9ybURhdGE+IEZvcm1EYXRhOjpjcmVhdGUoY29uc3QgQ1N0cmluZyYgc3RyaW5nKQogewog
ICAgIFJlZlB0cjxGb3JtRGF0YT4gcmVzdWx0ID0gY3JlYXRlKCk7Ci0gICAgcmVzdWx0LT5hcHBl
bmREYXRhKHN0cmluZy5kYXRhKCksIHN0cmluZy5sZW5ndGgoKSk7CisgICAgcmVzdWx0LT5hcHBl
bmRTdHJpbmcoc3RyaW5nKTsKICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0KIApAQCAt
OTYsMTcgKzExOSwxNyBAQCBQYXNzUmVmUHRyPEZvcm1EYXRhPiBGb3JtRGF0YTo6Y3JlYXRlKGNv
bnN0IFZlY3RvcjxjaGFyPiYgdmVjdG9yKQogICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwog
fQogCi1QYXNzUmVmUHRyPEZvcm1EYXRhPiBGb3JtRGF0YTo6Y3JlYXRlKGNvbnN0IERPTUZvcm1E
YXRhJiBkb21Gb3JtRGF0YSkKK1Bhc3NSZWZQdHI8Rm9ybURhdGE+IEZvcm1EYXRhOjpjcmVhdGUo
Y29uc3QgQmxvYkl0ZW1MaXN0JiBpdGVtcywgY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZykK
IHsKICAgICBSZWZQdHI8Rm9ybURhdGE+IHJlc3VsdCA9IGNyZWF0ZSgpOwotICAgIHJlc3VsdC0+
YXBwZW5kRE9NRm9ybURhdGEoZG9tRm9ybURhdGEsIGZhbHNlLCAwKTsKKyAgICByZXN1bHQtPmFw
cGVuZEl0ZW1zKGl0ZW1zLCBlbmNvZGluZywgZmFsc2UsIDApOwogICAgIHJldHVybiByZXN1bHQu
cmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPEZvcm1EYXRhPiBGb3JtRGF0YTo6Y3JlYXRlTXVs
dGlQYXJ0KGNvbnN0IERPTUZvcm1EYXRhJiBkb21Gb3JtRGF0YSwgRG9jdW1lbnQqIGRvY3VtZW50
KQorUGFzc1JlZlB0cjxGb3JtRGF0YT4gRm9ybURhdGE6OmNyZWF0ZU11bHRpUGFydChjb25zdCBC
bG9iSXRlbUxpc3QmIGl0ZW1zLCBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nLCBEb2N1bWVu
dCogZG9jdW1lbnQpCiB7CiAgICAgUmVmUHRyPEZvcm1EYXRhPiByZXN1bHQgPSBjcmVhdGUoKTsK
LSAgICByZXN1bHQtPmFwcGVuZERPTUZvcm1EYXRhKGRvbUZvcm1EYXRhLCB0cnVlLCBkb2N1bWVu
dCk7CisgICAgcmVzdWx0LT5hcHBlbmRJdGVtcyhpdGVtcywgZW5jb2RpbmcsIHRydWUsIGRvY3Vt
ZW50KTsKICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0KIApAQCAtMTI1LDg0ICsxNDgs
NjggQEAgUGFzc1JlZlB0cjxGb3JtRGF0YT4gRm9ybURhdGE6OmRlZXBDb3B5KCkgY29uc3QKICAg
ICBmb3JtRGF0YS0+bV9lbGVtZW50cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG4pOwogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbjsgKytpKSB7CiAgICAgICAgIGNvbnN0IEZvcm1EYXRhRWxl
bWVudCYgZSA9IG1fZWxlbWVudHNbaV07Ci0gICAgICAgIHN3aXRjaCAoZS5tX3R5cGUpIHsKLSAg
ICAgICAgY2FzZSBGb3JtRGF0YUVsZW1lbnQ6OmRhdGE6Ci0gICAgICAgICAgICBmb3JtRGF0YS0+
bV9lbGVtZW50cy5hcHBlbmQoRm9ybURhdGFFbGVtZW50KGUubV9kYXRhKSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBGb3JtRGF0YUVsZW1lbnQ6OmVuY29kZWRGaWxlOgotI2lm
IEVOQUJMRShCTE9CX1NMSUNFKQotICAgICAgICAgICAgZm9ybURhdGEtPm1fZWxlbWVudHMuYXBw
ZW5kKEZvcm1EYXRhRWxlbWVudChlLm1fZmlsZW5hbWUsIGUubV9maWxlU3RhcnQsIGUubV9maWxl
TGVuZ3RoLCBlLm1fZXhwZWN0ZWRGaWxlTW9kaWZpY2F0aW9uVGltZSwgZS5tX3Nob3VsZEdlbmVy
YXRlRmlsZSkpOwotI2Vsc2UKLSAgICAgICAgICAgIGZvcm1EYXRhLT5tX2VsZW1lbnRzLmFwcGVu
ZChGb3JtRGF0YUVsZW1lbnQoZS5tX2ZpbGVuYW1lLCBlLm1fc2hvdWxkR2VuZXJhdGVGaWxlKSk7
Ci0jZW5kaWYKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisgICAgICAgIGZvcm1EYXRh
LT5tX2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVsZW1lbnQoZS5pdGVtKCktPmRlZXBDb3B5KCks
IGUubV9zaG91bGRHZW5lcmF0ZUZpbGUpKTsKICAgICB9CiAgICAgcmV0dXJuIGZvcm1EYXRhLnJl
bGVhc2UoKTsKIH0KIAogdm9pZCBGb3JtRGF0YTo6YXBwZW5kRGF0YShjb25zdCB2b2lkKiBkYXRh
LCBzaXplX3Qgc2l6ZSkKIHsKLSAgICBpZiAobV9lbGVtZW50cy5pc0VtcHR5KCkgfHwgbV9lbGVt
ZW50cy5sYXN0KCkubV90eXBlICE9IEZvcm1EYXRhRWxlbWVudDo6ZGF0YSkKLSAgICAgICAgbV9l
bGVtZW50cy5hcHBlbmQoRm9ybURhdGFFbGVtZW50KCkpOwotICAgIEZvcm1EYXRhRWxlbWVudCYg
ZSA9IG1fZWxlbWVudHMubGFzdCgpOwotICAgIHNpemVfdCBvbGRTaXplID0gZS5tX2RhdGEuc2l6
ZSgpOwotICAgIGUubV9kYXRhLmdyb3cob2xkU2l6ZSArIHNpemUpOwotICAgIG1lbWNweShlLm1f
ZGF0YS5kYXRhKCkgKyBvbGRTaXplLCBkYXRhLCBzaXplKTsKKyAgICBtX2VsZW1lbnRzLmFwcGVu
ZChGb3JtRGF0YUVsZW1lbnQoQnl0ZXNBcnJheUJsb2JJdGVtOjpjcmVhdGUoc3RhdGljX2Nhc3Q8
Y29uc3QgY2hhcio+KGRhdGEpLCBzaXplKSkpOworfQorCit2b2lkIEZvcm1EYXRhOjphcHBlbmRT
dHJpbmcoY29uc3QgQ1N0cmluZyYgc3RyaW5nKQoreworICAgIG1fZWxlbWVudHMuYXBwZW5kKEZv
cm1EYXRhRWxlbWVudChTdHJpbmdCbG9iSXRlbTo6Y3JlYXRlKHN0cmluZykpKTsKIH0KIAogdm9p
ZCBGb3JtRGF0YTo6YXBwZW5kRmlsZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBib29sIHNob3Vs
ZEdlbmVyYXRlRmlsZSkKIHsKLSNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAgICBtX2VsZW1lbnRz
LmFwcGVuZChGb3JtRGF0YUVsZW1lbnQoZmlsZW5hbWUsIDAsIEJsb2I6OnRvRW5kT2ZGaWxlLCBC
bG9iOjpkb05vdENoZWNrRmlsZUNoYW5nZSwgc2hvdWxkR2VuZXJhdGVGaWxlKSk7Ci0jZWxzZQot
ICAgIG1fZWxlbWVudHMuYXBwZW5kKEZvcm1EYXRhRWxlbWVudChmaWxlbmFtZSwgc2hvdWxkR2Vu
ZXJhdGVGaWxlKSk7Ci0jZW5kaWYKKyAgICBtX2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVsZW1l
bnQoRmlsZUJsb2JJdGVtOjpjcmVhdGUoZmlsZW5hbWUpLCBzaG91bGRHZW5lcmF0ZUZpbGUpKTsK
K30KKwordm9pZCBGb3JtRGF0YTo6YXBwZW5kQmxvYkl0ZW1MaXN0KGNvbnN0IEJsb2JJdGVtTGlz
dCYgbGlzdCkKK3sKKyAgICBmb3IgKEJsb2JJdGVtTGlzdDo6Y29uc3RfaXRlcmF0b3IgaXRlcihs
aXN0LmJlZ2luKCkpOyBpdGVyICE9IGxpc3QuZW5kKCk7ICsraXRlcikKKyAgICAgICAgbV9lbGVt
ZW50cy5hcHBlbmQoKml0ZXIpOwogfQogCiAjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCiB2b2lkIEZv
cm1EYXRhOjphcHBlbmRGaWxlUmFuZ2UoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgbG9uZyBsb25n
IHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoLCBkb3VibGUgZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1l
LCBib29sIHNob3VsZEdlbmVyYXRlRmlsZSkKIHsKLSAgICBtX2VsZW1lbnRzLmFwcGVuZChGb3Jt
RGF0YUVsZW1lbnQoZmlsZW5hbWUsIHN0YXJ0LCBsZW5ndGgsIGV4cGVjdGVkTW9kaWZpY2F0aW9u
VGltZSwgc2hvdWxkR2VuZXJhdGVGaWxlKSk7CisgICAgaWYgKGxlbmd0aCA9PSBGb3JtRGF0YUVs
ZW1lbnQ6OnRvRW5kT2ZGaWxlKSB7CisgICAgICAgIEFTU0VSVCghc3RhcnQpOworICAgICAgICBB
U1NFUlQoIWV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZSk7CisgICAgICAgIG1fZWxlbWVudHMuYXBw
ZW5kKEZvcm1EYXRhRWxlbWVudChGaWxlQmxvYkl0ZW06OmNyZWF0ZShmaWxlbmFtZSksIHNob3Vs
ZEdlbmVyYXRlRmlsZSkpOworICAgIH0gZWxzZQorICAgICAgICBtX2VsZW1lbnRzLmFwcGVuZChG
b3JtRGF0YUVsZW1lbnQoRmlsZVJhbmdlQmxvYkl0ZW06OmNyZWF0ZShmaWxlbmFtZSwgc3RhcnQs
IGxlbmd0aCwgZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lKSwgc2hvdWxkR2VuZXJhdGVGaWxlKSk7
CiB9CiAjZW5kaWYKIAotdm9pZCBGb3JtRGF0YTo6YXBwZW5kRE9NRm9ybURhdGEoY29uc3QgRE9N
Rm9ybURhdGEmIGRvbUZvcm1EYXRhLCBib29sIGlzTXVsdGlQYXJ0Rm9ybSwgRG9jdW1lbnQqIGRv
Y3VtZW50KQordm9pZCBGb3JtRGF0YTo6YXBwZW5kSXRlbXMoY29uc3QgQmxvYkl0ZW1MaXN0JiBp
dGVtcywgY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZywgYm9vbCBpc011bHRpUGFydEZvcm0s
IERvY3VtZW50KiBkb2N1bWVudCkKIHsKICAgICBGb3JtRGF0YUJ1aWxkZXIgZm9ybURhdGFCdWls
ZGVyOwogICAgIGlmIChpc011bHRpUGFydEZvcm0pCiAgICAgICAgIG1fYm91bmRhcnkgPSBmb3Jt
RGF0YUJ1aWxkZXIuZ2VuZXJhdGVVbmlxdWVCb3VuZGFyeVN0cmluZygpOwogCiAgICAgVmVjdG9y
PGNoYXI+IGVuY29kZWREYXRhOwotICAgIFRleHRFbmNvZGluZyBlbmNvZGluZyA9IGRvbUZvcm1E
YXRhLmVuY29kaW5nKCk7CiAKLSAgICBjb25zdCBWZWN0b3I8Rm9ybURhdGFMaXN0OjpJdGVtPiYg
bGlzdCA9IGRvbUZvcm1EYXRhLmxpc3QoKTsKLSAgICBzaXplX3QgZm9ybURhdGFMaXN0U2l6ZSA9
IGxpc3Quc2l6ZSgpOworICAgIHNpemVfdCBmb3JtRGF0YUxpc3RTaXplID0gaXRlbXMuc2l6ZSgp
OwogICAgIEFTU0VSVCghKGZvcm1EYXRhTGlzdFNpemUgJSAyKSk7CiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBmb3JtRGF0YUxpc3RTaXplOyBpICs9IDIpIHsKLSAgICAgICAgY29uc3QgRm9y
bURhdGFMaXN0OjpJdGVtJiBrZXkgPSBsaXN0W2ldOwotICAgICAgICBjb25zdCBGb3JtRGF0YUxp
c3Q6Okl0ZW0mIHZhbHVlID0gbGlzdFtpICsgMV07CisgICAgICAgIGNvbnN0IFN0cmluZ0Jsb2JJ
dGVtKiBrZXkgPSBpdGVtc1tpXS0+dG9TdHJpbmdCbG9iSXRlbSgpOworICAgICAgICBjb25zdCBS
ZWZQdHI8QmxvYkl0ZW0+IHZhbHVlID0gaXRlbXNbaSArIDFdOworICAgICAgICBBU1NFUlQoa2V5
KTsKICAgICAgICAgaWYgKGlzTXVsdGlQYXJ0Rm9ybSkgewogICAgICAgICAgICAgVmVjdG9yPGNo
YXI+IGhlYWRlcjsKLSAgICAgICAgICAgIGZvcm1EYXRhQnVpbGRlci5iZWdpbk11bHRpUGFydEhl
YWRlcihoZWFkZXIsIG1fYm91bmRhcnkuZGF0YSgpLCBrZXkuZGF0YSgpKTsKKyAgICAgICAgICAg
IGZvcm1EYXRhQnVpbGRlci5iZWdpbk11bHRpUGFydEhlYWRlcihoZWFkZXIsIG1fYm91bmRhcnku
ZGF0YSgpLCBrZXktPmNzdHIoKSk7CiAKICAgICAgICAgICAgIGJvb2wgc2hvdWxkR2VuZXJhdGVG
aWxlID0gZmFsc2U7CiAgICAgICAgICAgICAvLyBJZiB0aGUgY3VycmVudCB0eXBlIGlzIEZJTEUs
IHRoZW4gd2UgYWxzbyBuZWVkIHRvIGluY2x1ZGUgdGhlIGZpbGVuYW1lCi0gICAgICAgICAgICBp
ZiAodmFsdWUuYmxvYigpKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBwYXRoID0g
dmFsdWUuYmxvYigpLT5wYXRoKCk7Ci0jaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgICAgICAg
ICAgICAgU3RyaW5nIGZpbGVOYW1lOwotICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5ibG9iKCkt
PmlzRmlsZSgpKQotICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZSA9IHN0YXRpY19jYXN0PEZp
bGUqPih2YWx1ZS5ibG9iKCkpLT5maWxlTmFtZSgpOwotICAgICAgICAgICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICAvLyBJZiBhIGJsb2IgaXMgc2xpY2VkIGZyb20gYSBmaWxlLCBp
dCBkb2VzIG5vdCBoYXZlIHRoZSBmaWxlbmFtZS4gSW4gdGhpcyBjYXNlLCBsZXQncyBwcm9kdWNl
IGEgdW5pcXVlIGZpbGVuYW1lLgotICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZSA9ICJCbG9i
IiArIGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgZmls
ZU5hbWUucmVwbGFjZSgiLSIsICIiKTsgLy8gRm9yIHNhZnR5LCByZW1vdmUgJy0nIGZyb20gdGhl
IGZpbGVuYW1lIHNuY2Ugc29tZSBzZXJ2ZXJzIG1heSBub3QgbGlrZSBpdC4KLSAgICAgICAgICAg
ICAgICB9Ci0jZWxzZQotICAgICAgICAgICAgICAgIEFTU0VSVCh2YWx1ZS5ibG9iKCktPmlzRmls
ZSgpKTsKLSAgICAgICAgICAgICAgICBTdHJpbmcgZmlsZU5hbWUgPSBzdGF0aWNfY2FzdDxGaWxl
Kj4odmFsdWUuYmxvYigpKS0+ZmlsZU5hbWUoKTsKLSNlbmRpZgorICAgICAgICAgICAgY29uc3Qg
RmlsZUJsb2JJdGVtKiBmaWxlID0gdmFsdWUtPnRvRmlsZUJsb2JJdGVtKCk7CisgICAgICAgICAg
ICBpZiAoZmlsZSkgeworICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgcGF0aCA9IGZpbGUt
PnBhdGgoKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgZmlsZU5hbWUgPSBmaWxlLT5uYW1lKCk7
CiAKICAgICAgICAgICAgICAgICAvLyBMZXQgdGhlIGFwcGxpY2F0aW9uIHNwZWNpZnkgYSBmaWxl
bmFtZSBpZiBpdCdzIGdvaW5nIHRvIGdlbmVyYXRlIGEgcmVwbGFjZW1lbnQgZmlsZSBmb3IgdGhl
IHVwbG9hZC4KICAgICAgICAgICAgICAgICBpZiAoIXBhdGguaXNFbXB0eSgpKSB7CkBAIC0yMTcs
OSArMjI0LDkgQEAgdm9pZCBGb3JtRGF0YTo6YXBwZW5kRE9NRm9ybURhdGEoY29uc3QgRE9NRm9y
bURhdGEmIGRvbUZvcm1EYXRhLCBib29sIGlzTXVsdGlQYXIKICAgICAgICAgICAgICAgICAvLyBX
ZSBoYXZlIHRvIGluY2x1ZGUgdGhlIGZpbGVuYW1lPSIuLiIgcGFydCBpbiB0aGUgaGVhZGVyLCBl
dmVuIGlmIHRoZSBmaWxlbmFtZSBpcyBlbXB0eQogICAgICAgICAgICAgICAgIGZvcm1EYXRhQnVp
bGRlci5hZGRGaWxlbmFtZVRvTXVsdGlQYXJ0SGVhZGVyKGhlYWRlciwgZW5jb2RpbmcsIGZpbGVO
YW1lKTsKIAotICAgICAgICAgICAgICAgIC8vIElmIGEgYmxvYiBpcyBzbGljZWQgZnJvbSBhIGZp
bGUsIGRvIG5vdCBhZGQgdGhlIGNvbnRlbnQgdHlwZS4gCisgICAgICAgICAgICAgICAgLy8gSWYg
dGhlIGl0ZW0gaXMgc2xpY2VkIGZyb20gYSBmaWxlLCBkbyBub3QgYWRkIHRoZSBjb250ZW50IHR5
cGUuCiAjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgICAgICAgICAgICAgaWYgKCFmaWxlTmFt
ZS5pc0VtcHR5KCkgJiYgdmFsdWUuYmxvYigpLT5pc0ZpbGUoKSkgeworICAgICAgICAgICAgICAg
IGlmICghZmlsZU5hbWUuaXNFbXB0eSgpICYmICF2YWx1ZS0+dG9GaWxlUmFuZ2VCbG9iSXRlbSgp
KSB7CiAjZWxzZQogICAgICAgICAgICAgICAgIGlmICghZmlsZU5hbWUuaXNFbXB0eSgpKSB7CiAj
ZW5kaWYKQEAgLTIzNywyNSArMjQ0LDIwIEBAIHZvaWQgRm9ybURhdGE6OmFwcGVuZERPTUZvcm1E
YXRhKGNvbnN0IERPTUZvcm1EYXRhJiBkb21Gb3JtRGF0YSwgYm9vbCBpc011bHRpUGFyCiAKICAg
ICAgICAgICAgIC8vIEFwcGVuZCBib2R5CiAgICAgICAgICAgICBhcHBlbmREYXRhKGhlYWRlci5k
YXRhKCksIGhlYWRlci5zaXplKCkpOwotICAgICAgICAgICAgaWYgKHNpemVfdCBkYXRhU2l6ZSA9
IHZhbHVlLmRhdGEoKS5sZW5ndGgoKSkKLSAgICAgICAgICAgICAgICBhcHBlbmREYXRhKHZhbHVl
LmRhdGEoKS5kYXRhKCksIGRhdGFTaXplKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlLmJs
b2IoKSAmJiAhdmFsdWUuYmxvYigpLT5wYXRoKCkuaXNFbXB0eSgpKQotI2lmIEVOQUJMRShCTE9C
X1NMSUNFKQotICAgICAgICAgICAgICAgIGFwcGVuZEZpbGVSYW5nZSh2YWx1ZS5ibG9iKCktPnBh
dGgoKSwgdmFsdWUuYmxvYigpLT5zdGFydCgpLCB2YWx1ZS5ibG9iKCktPmxlbmd0aCgpLCB2YWx1
ZS5ibG9iKCktPm1vZGlmaWNhdGlvblRpbWUoKSwgc2hvdWxkR2VuZXJhdGVGaWxlKTsKLSNlbHNl
Ci0gICAgICAgICAgICAgICAgYXBwZW5kRmlsZSh2YWx1ZS5ibG9iKCktPnBhdGgoKSwgc2hvdWxk
R2VuZXJhdGVGaWxlKTsKLSNlbmRpZgotCisgICAgICAgICAgICBtX2VsZW1lbnRzLmFwcGVuZChG
b3JtRGF0YUVsZW1lbnQodmFsdWUsIHNob3VsZEdlbmVyYXRlRmlsZSkpOwogICAgICAgICAgICAg
YXBwZW5kRGF0YSgiXHJcbiIsIDIpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8g
T21pdCB0aGUgbmFtZSAiaXNpbmRleCIgaWYgaXQncyB0aGUgZmlyc3QgZm9ybSBkYXRhIGVsZW1l
bnQuCiAgICAgICAgICAgICAvLyBGSVhNRTogV2h5IGlzIHRoaXMgYSBnb29kIHJ1bGU/IElzIHRo
aXMgb2Jzb2xldGUgbm93PwotICAgICAgICAgICAgaWYgKGVuY29kZWREYXRhLmlzRW1wdHkoKSAm
JiBrZXkuZGF0YSgpID09ICJpc2luZGV4IikKLSAgICAgICAgICAgICAgICBGb3JtRGF0YUJ1aWxk
ZXI6OmVuY29kZVN0cmluZ0FzRm9ybURhdGEoZW5jb2RlZERhdGEsIHZhbHVlLmRhdGEoKSk7Cisg
ICAgICAgICAgICBjb25zdCBTdHJpbmdCbG9iSXRlbSogc3RyaW5nVmFsdWUgPSB2YWx1ZS0+dG9T
dHJpbmdCbG9iSXRlbSgpOworICAgICAgICAgICAgaWYgKCFzdHJpbmdWYWx1ZSkKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChlbmNvZGVkRGF0YS5pc0VtcHR5KCkg
JiYga2V5LT5jc3RyKCkgPT0gImlzaW5kZXgiKQorICAgICAgICAgICAgICAgIEZvcm1EYXRhQnVp
bGRlcjo6ZW5jb2RlU3RyaW5nQXNGb3JtRGF0YShlbmNvZGVkRGF0YSwgc3RyaW5nVmFsdWUtPmNz
dHIoKSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZm9ybURhdGFCdWlsZGVy
LmFkZEtleVZhbHVlUGFpckFzRm9ybURhdGEoZW5jb2RlZERhdGEsIGtleS5kYXRhKCksIHZhbHVl
LmRhdGEoKSk7CisgICAgICAgICAgICAgICAgZm9ybURhdGFCdWlsZGVyLmFkZEtleVZhbHVlUGFp
ckFzRm9ybURhdGEoZW5jb2RlZERhdGEsIGtleS0+Y3N0cigpLCBzdHJpbmdWYWx1ZS0+Y3N0cigp
KTsKICAgICAgICAgfQotICAgIH0gCisgICAgfQogCiAgICAgaWYgKGlzTXVsdGlQYXJ0Rm9ybSkK
ICAgICAgICAgZm9ybURhdGFCdWlsZGVyLmFkZEJvdW5kYXJ5VG9NdWx0aVBhcnRIZWFkZXIoZW5j
b2RlZERhdGEsIG1fYm91bmRhcnkuZGF0YSgpLCB0cnVlKTsKQEAgLTI3MCwxMiArMjcyLDggQEAg
dm9pZCBGb3JtRGF0YTo6ZmxhdHRlbihWZWN0b3I8Y2hhcj4mIGRhdGEpIGNvbnN0CiAgICAgc2l6
ZV90IG4gPSBtX2VsZW1lbnRzLnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG47
ICsraSkgewogICAgICAgICBjb25zdCBGb3JtRGF0YUVsZW1lbnQmIGUgPSBtX2VsZW1lbnRzW2ld
OwotICAgICAgICBpZiAoZS5tX3R5cGUgPT0gRm9ybURhdGFFbGVtZW50OjpkYXRhKSB7Ci0gICAg
ICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IGRhdGEuc2l6ZSgpOwotICAgICAgICAgICAgc2l6ZV90
IGRlbHRhID0gZS5tX2RhdGEuc2l6ZSgpOwotICAgICAgICAgICAgZGF0YS5ncm93KG9sZFNpemUg
KyBkZWx0YSk7Ci0gICAgICAgICAgICBtZW1jcHkoZGF0YS5kYXRhKCkgKyBvbGRTaXplLCBlLm1f
ZGF0YS5kYXRhKCksIGRlbHRhKTsKLSAgICAgICAgfQorICAgICAgICBpZiAoZS5tX3R5cGUgPT0g
Rm9ybURhdGFFbGVtZW50OjpkYXRhKQorICAgICAgICAgICAgZGF0YS5hcHBlbmQoZS5tX2RhdGEu
ZGF0YSgpLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGUubV9kYXRhLnNpemUoKSkpOwogICAgIH0KIH0K
IApAQCAtMjg5LDEwICsyODcsMTAgQEAgU3RyaW5nIEZvcm1EYXRhOjpmbGF0dGVuVG9TdHJpbmco
KSBjb25zdAogdm9pZCBGb3JtRGF0YTo6Z2VuZXJhdGVGaWxlcyhEb2N1bWVudCogZG9jdW1lbnQp
CiB7CiAgICAgQVNTRVJUKCFtX2hhc0dlbmVyYXRlZEZpbGVzKTsKLSAgICAKKwogICAgIGlmICht
X2hhc0dlbmVyYXRlZEZpbGVzKQogICAgICAgICByZXR1cm47Ci0gICAgCisKICAgICBQYWdlKiBw
YWdlID0gZG9jdW1lbnQtPnBhZ2UoKTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybjsK
QEAgLTMwMiw3ICszMDAsNyBAQCB2b2lkIEZvcm1EYXRhOjpnZW5lcmF0ZUZpbGVzKERvY3VtZW50
KiBkb2N1bWVudCkKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG47ICsraSkgewogICAgICAg
ICBGb3JtRGF0YUVsZW1lbnQmIGUgPSBtX2VsZW1lbnRzW2ldOwogICAgICAgICBpZiAoZS5tX3R5
cGUgPT0gRm9ybURhdGFFbGVtZW50OjplbmNvZGVkRmlsZSAmJiBlLm1fc2hvdWxkR2VuZXJhdGVG
aWxlKSB7Ci0gICAgICAgICAgICBlLm1fZ2VuZXJhdGVkRmlsZW5hbWUgPSBjbGllbnQtPmdlbmVy
YXRlUmVwbGFjZW1lbnRGaWxlKGUubV9maWxlbmFtZSk7CisgICAgICAgICAgICBlLm1fZ2VuZXJh
dGVkRmlsZW5hbWUgPSBjbGllbnQtPmdlbmVyYXRlUmVwbGFjZW1lbnRGaWxlKGUuaXRlbSgpLT50
b0ZpbGVCbG9iSXRlbSgpLT5wYXRoKCkpOwogICAgICAgICAgICAgbV9oYXNHZW5lcmF0ZWRGaWxl
cyA9IHRydWU7CiAgICAgICAgIH0KICAgICB9CkBAIC0zMTIsNyArMzEwLDcgQEAgdm9pZCBGb3Jt
RGF0YTo6cmVtb3ZlR2VuZXJhdGVkRmlsZXNJZk5lZWRlZCgpCiB7CiAgICAgaWYgKCFtX2hhc0dl
bmVyYXRlZEZpbGVzKQogICAgICAgICByZXR1cm47Ci0gICAgICAgIAorCiAgICAgc2l6ZV90IG4g
PSBtX2VsZW1lbnRzLnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG47ICsraSkg
ewogICAgICAgICBGb3JtRGF0YUVsZW1lbnQmIGUgPSBtX2VsZW1lbnRzW2ldOwpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmggYi9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvRm9ybURhdGEuaAppbmRleCBhNDM5MDIzNDc5NmEwZTJmMTRmNWQzNDlmNWRkMGVm
ZmMwYTRiN2NkLi5jYmI1ZjJhN2VjMmViNjlhZTBhY2EyMGYyYzI3ZTg1ZDUzZjdkMjFlIDEwMDY0
NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuaAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuaApAQCAtMjAsNzQgKzIwLDg5IEBACiAjaWZuZGVm
IEZvcm1EYXRhX2gKICNkZWZpbmUgRm9ybURhdGFfaAogCisjaW5jbHVkZSAiQmxvYkl0ZW0uaCIK
ICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNz
IERPTUZvcm1EYXRhOwogY2xhc3MgRG9jdW1lbnQ7CitjbGFzcyBUZXh0RW5jb2Rpbmc7CiAKKy8v
IEEgd3JhcHBlciBjbGFzcyBvZiBCbG9iSXRlbSBmb3IgRm9ybURhdGEuCiBjbGFzcyBGb3JtRGF0
YUVsZW1lbnQgewogcHVibGljOgotICAgIEZvcm1EYXRhRWxlbWVudCgpIDogbV90eXBlKGRhdGEp
IHsgfQotICAgIEZvcm1EYXRhRWxlbWVudChjb25zdCBWZWN0b3I8Y2hhcj4mIGFycmF5KSA6IG1f
dHlwZShkYXRhKSwgbV9kYXRhKGFycmF5KSB7IH0KLSNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAg
ICBGb3JtRGF0YUVsZW1lbnQoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgbG9uZyBsb25nIGZpbGVT
dGFydCwgbG9uZyBsb25nIGZpbGVMZW5ndGgsIGRvdWJsZSBleHBlY3RlZEZpbGVNb2RpZmljYXRp
b25UaW1lLCBib29sIHNob3VsZEdlbmVyYXRlRmlsZSkgOiBtX3R5cGUoZW5jb2RlZEZpbGUpLCBt
X2ZpbGVuYW1lKGZpbGVuYW1lKSwgbV9maWxlU3RhcnQoZmlsZVN0YXJ0KSwgbV9maWxlTGVuZ3Ro
KGZpbGVMZW5ndGgpLCBtX2V4cGVjdGVkRmlsZU1vZGlmaWNhdGlvblRpbWUoZXhwZWN0ZWRGaWxl
TW9kaWZpY2F0aW9uVGltZSksIG1fc2hvdWxkR2VuZXJhdGVGaWxlKHNob3VsZEdlbmVyYXRlRmls
ZSkgeyB9Ci0jZWxzZQotICAgIEZvcm1EYXRhRWxlbWVudChjb25zdCBTdHJpbmcmIGZpbGVuYW1l
LCBib29sIHNob3VsZEdlbmVyYXRlRmlsZSkgOiBtX3R5cGUoZW5jb2RlZEZpbGUpLCBtX2ZpbGVu
YW1lKGZpbGVuYW1lKSwgbV9zaG91bGRHZW5lcmF0ZUZpbGUoc2hvdWxkR2VuZXJhdGVGaWxlKSB7
IH0KLSNlbmRpZgorICAgIEZvcm1EYXRhRWxlbWVudCgpIDogbV9kYXRhKDApIHsgfQorICAgIEZv
cm1EYXRhRWxlbWVudChQYXNzUmVmUHRyPEJsb2JJdGVtPiBibG9iSXRlbSwgYm9vbCBzaG91bGRH
ZW5lcmF0ZUZpbGUgPSBmYWxzZSk7CisKKyAgICBjb25zdCBCbG9iSXRlbSogaXRlbSgpIGNvbnN0
IHsgcmV0dXJuIG1faXRlbS5nZXQoKTsgfQorCisgICAgUmVmUHRyPEJsb2JJdGVtPiBtX2l0ZW07
CiAKKyAgICAvLyBGSVhNRTogY2xlYW4gbWUgdXAuICBDb2RlIGJlbG93IGFyZSBtb3N0bHkga2Vw
dCBmb3IgY29tcGF0aWJpbGl0eS4KICAgICBlbnVtIHsgZGF0YSwgZW5jb2RlZEZpbGUgfSBtX3R5
cGU7Ci0gICAgVmVjdG9yPGNoYXI+IG1fZGF0YTsKKyAgICBjb25zdCBzdHJ1Y3QgQmxvYkl0ZW1X
cmFwcGVyIHsKKyAgICAgICAgQmxvYkl0ZW1XcmFwcGVyKGNvbnN0IEJsb2JJdGVtV3JhcHBlciYg
dikgOiBtX2l0ZW0odi5tX2l0ZW0pIHsgfQorICAgICAgICBCbG9iSXRlbVdyYXBwZXIoY29uc3Qg
RGF0YUJsb2JJdGVtKiBpdGVtKSA6IG1faXRlbShpdGVtKSB7IH0KKyAgICAgICAgc2l6ZV90IHNp
emUoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIW1faXRlbSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+
KG1faXRlbS0+c2l6ZSgpKTsKKyAgICAgICAgfQorICAgICAgICBjb25zdCBjaGFyKiBkYXRhKCkg
Y29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFtX2l0ZW0pCisgICAgICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gbV9pdGVtLT5kYXRhKCk7CisgICAgICAg
IH0KKyAgICAgICAgY2hhciogcmVsZWFzZUJ1ZmZlcigpIGNvbnN0CisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmICghbV9pdGVtKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAg
ICAgcmV0dXJuIG1faXRlbS0+cmVsZWFzZUJ1ZmZlcigpOworICAgICAgICB9CisgICAgICAgIGNv
bnN0IERhdGFCbG9iSXRlbSogbV9pdGVtOworICAgIH0gbV9kYXRhOwogICAgIFN0cmluZyBtX2Zp
bGVuYW1lOwogI2lmIEVOQUJMRShCTE9CX1NMSUNFKQogICAgIGxvbmcgbG9uZyBtX2ZpbGVTdGFy
dDsKICAgICBsb25nIGxvbmcgbV9maWxlTGVuZ3RoOwogICAgIGRvdWJsZSBtX2V4cGVjdGVkRmls
ZU1vZGlmaWNhdGlvblRpbWU7CisKKyAgICBzdGF0aWMgY29uc3QgbG9uZyBsb25nIHRvRW5kT2ZG
aWxlOwogI2VuZGlmCisKICAgICBTdHJpbmcgbV9nZW5lcmF0ZWRGaWxlbmFtZTsKICAgICBib29s
IG1fc2hvdWxkR2VuZXJhdGVGaWxlOwogfTsKIAogaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBGb3JtRGF0YUVsZW1lbnQmIGEsIGNvbnN0IEZvcm1EYXRhRWxlbWVudCYgYikKIHsKLSAgICBp
ZiAoJmEgPT0gJmIpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAgIGlmIChhLm1fdHlw
ZSAhPSBiLm1fdHlwZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChhLm1fZGF0YSAh
PSBiLm1fZGF0YSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotI2lmIEVOQUJMRShCTE9CX1NMSUNF
KQotICAgIGlmIChhLm1fZmlsZW5hbWUgIT0gYi5tX2ZpbGVuYW1lIHx8IGEubV9maWxlU3RhcnQg
IT0gYi5tX2ZpbGVTdGFydCB8fCBhLm1fZmlsZUxlbmd0aCAhPSBiLm1fZmlsZUxlbmd0aCB8fCBh
Lm1fZXhwZWN0ZWRGaWxlTW9kaWZpY2F0aW9uVGltZSAhPSBiLm1fZXhwZWN0ZWRGaWxlTW9kaWZp
Y2F0aW9uVGltZSkKLSNlbHNlCi0gICAgaWYgKGEubV9maWxlbmFtZSAhPSBiLm1fZmlsZW5hbWUp
Ci0jZW5kaWYKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7CisgICAg
cmV0dXJuIGEuaXRlbSgpLT5lcXVhbHMoYi5pdGVtKCkpOwogfQotIAorCiBpbmxpbmUgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IEZvcm1EYXRhRWxlbWVudCYgYSwgY29uc3QgRm9ybURhdGFFbGVtZW50
JiBiKQogewogICAgIHJldHVybiAhKGEgPT0gYik7CiB9Ci0gCisKIGNsYXNzIEZvcm1EYXRhIDog
cHVibGljIFJlZkNvdW50ZWQ8Rm9ybURhdGE+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxGb3JtRGF0YT4gY3JlYXRlKCk7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Rm9ybURhdGE+
IGNyZWF0ZShjb25zdCB2b2lkKiwgc2l6ZV90KTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxGb3Jt
RGF0YT4gY3JlYXRlKGNvbnN0IFdURjo6Q1N0cmluZyYpOwogICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEZvcm1EYXRhPiBjcmVhdGUoY29uc3QgVmVjdG9yPGNoYXI+Jik7Ci0gICAgc3RhdGljIFBhc3NS
ZWZQdHI8Rm9ybURhdGE+IGNyZWF0ZShjb25zdCBET01Gb3JtRGF0YSYpOwotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEZvcm1EYXRhPiBjcmVhdGVNdWx0aVBhcnQoY29uc3QgRE9NRm9ybURhdGEmLCBE
b2N1bWVudCopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZvcm1EYXRhPiBjcmVhdGUoY29uc3Qg
QmxvYkl0ZW1MaXN0JiwgY29uc3QgVGV4dEVuY29kaW5nJik7CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8Rm9ybURhdGE+IGNyZWF0ZU11bHRpUGFydChjb25zdCBCbG9iSXRlbUxpc3QmLCBjb25zdCBU
ZXh0RW5jb2RpbmcmLCBEb2N1bWVudCopOwogICAgIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGNvcHko
KSBjb25zdDsKICAgICBQYXNzUmVmUHRyPEZvcm1EYXRhPiBkZWVwQ29weSgpIGNvbnN0OwogICAg
IH5Gb3JtRGF0YSgpOwotICAgIAorCiAgICAgdm9pZCBhcHBlbmREYXRhKGNvbnN0IHZvaWQqIGRh
dGEsIHNpemVfdCk7CisgICAgdm9pZCBhcHBlbmRCbG9iSXRlbUxpc3QoY29uc3QgQmxvYkl0ZW1M
aXN0Jik7CisgICAgdm9pZCBhcHBlbmRTdHJpbmcoY29uc3QgQ1N0cmluZyYpOwogICAgIHZvaWQg
YXBwZW5kRmlsZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBib29sIHNob3VsZEdlbmVyYXRlRmls
ZSA9IGZhbHNlKTsKICNpZiBFTkFCTEUoQkxPQl9TTElDRSkKICAgICB2b2lkIGFwcGVuZEZpbGVS
YW5nZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBs
ZW5ndGgsIGRvdWJsZSBleHBlY3RlZE1vZGlmaWNhdGlvblRpbWUsIGJvb2wgc2hvdWxkR2VuZXJh
dGVGaWxlID0gZmFsc2UpOwpAQCAtMTE1LDkgKzEzMCwxMCBAQCBwcml2YXRlOgogICAgIEZvcm1E
YXRhKCk7CiAgICAgRm9ybURhdGEoY29uc3QgRm9ybURhdGEmKTsKIAotICAgIHZvaWQgYXBwZW5k
RE9NRm9ybURhdGEoY29uc3QgRE9NRm9ybURhdGEmIGRvbUZvcm1EYXRhLCBib29sIGlzTXVsdGlQ
YXJ0Rm9ybSwgRG9jdW1lbnQqIGRvY3VtZW50KTsKKyAgICB2b2lkIGFwcGVuZEl0ZW1zKGNvbnN0
IEJsb2JJdGVtTGlzdCYsIGNvbnN0IFRleHRFbmNvZGluZyYsIGJvb2wgaXNNdWx0aVBhcnRGb3Jt
LCBEb2N1bWVudCopOwogCiAgICAgVmVjdG9yPEZvcm1EYXRhRWxlbWVudD4gbV9lbGVtZW50czsK
KwogICAgIGludDY0X3QgbV9pZGVudGlmaWVyOwogICAgIGJvb2wgbV9oYXNHZW5lcmF0ZWRGaWxl
czsKICAgICBib29sIG1fYWx3YXlzU3RyZWFtOwpAQCAtMTMxLDcgKzE0Nyw3IEBAIGlubGluZSBi
b29sIG9wZXJhdG9yPT0oY29uc3QgRm9ybURhdGEmIGEsIGNvbnN0IEZvcm1EYXRhJiBiKQogCiBp
bmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZvcm1EYXRhJiBhLCBjb25zdCBGb3JtRGF0YSYg
YikKIHsKLSAgICByZXR1cm4gYS5lbGVtZW50cygpICE9IGIuZWxlbWVudHMoKTsKKyAgICByZXR1
cm4gIShhID09IGIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL0Zvcm1EYXRhU3RyZWFtTWFjLm1tIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9Gb3JtRGF0YVN0cmVhbU1hYy5tbQppbmRleCAyN2VjZmQw
OGFkNWFhYWI4NzU2ZmE1OTZkOTk2YmQyZjZlYzVkMDNmLi4xZTQ4ZTJmOGZiYjJmZmU2ZTc3OWVh
YjEwYTY3MTIwNDE3NDZhMDQyIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
bWFjL0Zvcm1EYXRhU3RyZWFtTWFjLm1tCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9t
YWMvRm9ybURhdGFTdHJlYW1NYWMubW0KQEAgLTMxLDcgKzMxLDYgQEAKICNpbXBvcnQgImNvbmZp
Zy5oIgogI2ltcG9ydCAiRm9ybURhdGFTdHJlYW1NYWMuaCIKIAotI2ltcG9ydCAiQmxvYi5oIgog
I2ltcG9ydCAiRmlsZVN5c3RlbS5oIgogI2ltcG9ydCAiRm9ybURhdGEuaCIKICNpbXBvcnQgIlJl
c291cmNlSGFuZGxlLmgiCkBAIC0xNDIsNyArMTQxLDcgQEAgc3RhdGljIHZvaWQgY2xvc2VDdXJy
ZW50U3RyZWFtKEZvcm1TdHJlYW1GaWVsZHMgKmZvcm0pCiAgICAgICAgIENGUmVsZWFzZShmb3Jt
LT5jdXJyZW50U3RyZWFtKTsKICAgICAgICAgZm9ybS0+Y3VycmVudFN0cmVhbSA9IE5VTEw7CiAj
aWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgICAgIGZvcm0tPmN1cnJlbnRTdHJlYW1SYW5nZUxl
bmd0aCA9IEJsb2I6OnRvRW5kT2ZGaWxlOworICAgICAgICBmb3JtLT5jdXJyZW50U3RyZWFtUmFu
Z2VMZW5ndGggPSBGb3JtRGF0YUVsZW1lbnQ6OnRvRW5kT2ZGaWxlOwogI2VuZGlmCiAgICAgfQog
ICAgIGlmIChmb3JtLT5jdXJyZW50RGF0YSkgewpAQCAtMTYxLDIxICsxNjAsMTcgQEAgc3RhdGlj
IGJvb2wgYWR2YW5jZUN1cnJlbnRTdHJlYW0oRm9ybVN0cmVhbUZpZWxkcyogZm9ybSkKIAogICAg
IC8vIENyZWF0ZSB0aGUgbmV3IHN0cmVhbS4KICAgICBGb3JtRGF0YUVsZW1lbnQmIG5leHRJbnB1
dCA9IGZvcm0tPnJlbWFpbmluZ0VsZW1lbnRzLmxhc3QoKTsKKworICAgIC8vIENoZWNrIGlmIHRo
ZSB1bmRlcmx5aW5nIGRhdGEgaGFzIGJlY29tZSBzdGFsZSAoZS5nLiB0aGUgZmlsZSBoYXMgYmVl
biBjaGFuZ2VkIHNpbmNlIGl0cyBzbmFwc2hvdCBoYXMgYmVlbiB0YWtlbikgb3Igbm90LgorICAg
IGlmICghbmV4dElucHV0Lm1faXRlbS0+aXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKICAgICBpZiAobmV4dElucHV0Lm1fdHlwZSA9PSBGb3JtRGF0YUVsZW1lbnQ6OmRhdGEpIHsK
ICAgICAgICAgc2l6ZV90IHNpemUgPSBuZXh0SW5wdXQubV9kYXRhLnNpemUoKTsKICAgICAgICAg
Y2hhciogZGF0YSA9IG5leHRJbnB1dC5tX2RhdGEucmVsZWFzZUJ1ZmZlcigpOwogICAgICAgICBm
b3JtLT5jdXJyZW50U3RyZWFtID0gQ0ZSZWFkU3RyZWFtQ3JlYXRlV2l0aEJ5dGVzTm9Db3B5KDAs
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUludDgqPihkYXRhKSwgc2l6ZSwga0NGQWxsb2NhdG9y
TnVsbCk7CiAgICAgICAgIGZvcm0tPmN1cnJlbnREYXRhID0gZGF0YTsKICAgICB9IGVsc2Ugewot
I2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgICAgICAvLyBDaGVjayBpZiB0aGUgZmlsZSBoYXMg
YmVlbiBjaGFuZ2VkIG9yIG5vdCBpZiByZXF1aXJlZC4KLSAgICAgICAgaWYgKG5leHRJbnB1dC5t
X2V4cGVjdGVkRmlsZU1vZGlmaWNhdGlvblRpbWUgIT0gQmxvYjo6ZG9Ob3RDaGVja0ZpbGVDaGFu
Z2UpIHsKLSAgICAgICAgICAgIHRpbWVfdCBmaWxlTW9kaWZpY2F0aW9uVGltZTsKLSAgICAgICAg
ICAgIGlmICghZ2V0RmlsZU1vZGlmaWNhdGlvblRpbWUobmV4dElucHV0Lm1fZmlsZW5hbWUsIGZp
bGVNb2RpZmljYXRpb25UaW1lKSB8fCBmaWxlTW9kaWZpY2F0aW9uVGltZSAhPSBzdGF0aWNfY2Fz
dDx0aW1lX3Q+KG5leHRJbnB1dC5tX2V4cGVjdGVkRmlsZU1vZGlmaWNhdGlvblRpbWUpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotI2VuZGlmCi0KICAgICAgICAg
Y29uc3QgU3RyaW5nJiBwYXRoID0gbmV4dElucHV0Lm1fc2hvdWxkR2VuZXJhdGVGaWxlID8gbmV4
dElucHV0Lm1fZ2VuZXJhdGVkRmlsZW5hbWUgOiBuZXh0SW5wdXQubV9maWxlbmFtZTsKICAgICAg
ICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBmaWxlbmFtZShBZG9wdENGLCBwYXRoLmNyZWF0ZUNG
U3RyaW5nKCkpOwogICAgICAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IGZpbGVVUkwoQWRvcHRDRiwg
Q0ZVUkxDcmVhdGVXaXRoRmlsZVN5c3RlbVBhdGgoMCwgZmlsZW5hbWUuZ2V0KCksIGtDRlVSTFBP
U0lYUGF0aFN0eWxlLCBGQUxTRSkpOwpAQCAtMjIyLDcgKzIxNyw3IEBAIHN0YXRpYyB2b2lkKiBm
b3JtQ3JlYXRlKENGUmVhZFN0cmVhbVJlZiBzdHJlYW0sIHZvaWQqIGNvbnRleHQpCiAgICAgRm9y
bVN0cmVhbUZpZWxkcyogbmV3SW5mbyA9IG5ldyBGb3JtU3RyZWFtRmllbGRzOwogICAgIG5ld0lu
Zm8tPmN1cnJlbnRTdHJlYW0gPSBOVUxMOwogI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgIG5l
d0luZm8tPmN1cnJlbnRTdHJlYW1SYW5nZUxlbmd0aCA9IEJsb2I6OnRvRW5kT2ZGaWxlOworICAg
IG5ld0luZm8tPmN1cnJlbnRTdHJlYW1SYW5nZUxlbmd0aCA9IEZvcm1EYXRhRWxlbWVudDo6dG9F
bmRPZkZpbGU7CiAjZW5kaWYKICAgICBuZXdJbmZvLT5jdXJyZW50RGF0YSA9IDA7CiAgICAgbmV3
SW5mby0+Zm9ybVN0cmVhbSA9IHN0cmVhbTsgLy8gRG9uJ3QgcmV0YWluLiBUaGF0IHdvdWxkIGNy
ZWF0ZSBhIHJlZmVyZW5jZSBjeWNsZS4KQEAgLTI3MCw3ICsyNjUsNyBAQCBzdGF0aWMgQ0ZJbmRl
eCBmb3JtUmVhZChDRlJlYWRTdHJlYW1SZWYgc3RyZWFtLCBVSW50OCogYnVmZmVyLCBDRkluZGV4
IGJ1ZmZlckxlbgogICAgIHdoaWxlIChmb3JtLT5jdXJyZW50U3RyZWFtKSB7CiAgICAgICAgIENG
SW5kZXggYnl0ZXNUb1JlYWQgPSBidWZmZXJMZW5ndGg7CiAjaWYgRU5BQkxFKEJMT0JfU0xJQ0Up
Ci0gICAgICAgIGlmIChmb3JtLT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5ndGggIT0gQmxvYjo6dG9F
bmRPZkZpbGUgJiYgZm9ybS0+Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoIDwgYnl0ZXNUb1JlYWQp
CisgICAgICAgIGlmIChmb3JtLT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5ndGggIT0gRm9ybURhdGFF
bGVtZW50Ojp0b0VuZE9mRmlsZSAmJiBmb3JtLT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5ndGggPCBi
eXRlc1RvUmVhZCkKICAgICAgICAgICAgIGJ5dGVzVG9SZWFkID0gc3RhdGljX2Nhc3Q8Q0ZJbmRl
eD4oZm9ybS0+Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoKTsKICNlbmRpZgogICAgICAgICBDRklu
ZGV4IGJ5dGVzUmVhZCA9IENGUmVhZFN0cmVhbVJlYWQoZm9ybS0+Y3VycmVudFN0cmVhbSwgYnVm
ZmVyLCBieXRlc1RvUmVhZCk7CkBAIC0yODMsNyArMjc4LDcgQEAgc3RhdGljIENGSW5kZXggZm9y
bVJlYWQoQ0ZSZWFkU3RyZWFtUmVmIHN0cmVhbSwgVUludDgqIGJ1ZmZlciwgQ0ZJbmRleCBidWZm
ZXJMZW4KICAgICAgICAgICAgICphdEVPRiA9IEZBTFNFOwogICAgICAgICAgICAgZm9ybS0+Ynl0
ZXNTZW50ICs9IGJ5dGVzUmVhZDsKICNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAgICAgICAgICAg
IGlmIChmb3JtLT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5ndGggIT0gQmxvYjo6dG9FbmRPZkZpbGUp
CisgICAgICAgICAgICBpZiAoZm9ybS0+Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoICE9IEZvcm1E
YXRhRWxlbWVudDo6dG9FbmRPZkZpbGUpCiAgICAgICAgICAgICAgICAgZm9ybS0+Y3VycmVudFN0
cmVhbVJhbmdlTGVuZ3RoIC09IGJ5dGVzUmVhZDsKICNlbmRpZgogCkBAIC00MDAsNyArMzk1LDcg
QEAgdm9pZCBzZXRIVFRQQm9keShOU011dGFibGVVUkxSZXF1ZXN0ICpyZXF1ZXN0LCBQYXNzUmVm
UHRyPEZvcm1EYXRhPiBmb3JtRGF0YSkKICAgICAgICAgZWxzZSB7CiAjaWYgRU5BQkxFKEJMT0Jf
U0xJQ0UpCiAgICAgICAgICAgICAvLyBJZiB3ZSdyZSBzZW5kaW5nIHRoZSBmaWxlIHJhbmdlLCB1
c2UgdGhlIGV4aXN0aW5nIHJhbmdlIGxlbmd0aCBmb3Igbm93LiBXZSB3aWxsIGRldGVjdCBpZiB0
aGUgZmlsZSBoYXMgYmVlbiBjaGFuZ2VkIHJpZ2h0IGJlZm9yZSB3ZSByZWFkIHRoZSBmaWxlIGFu
ZCBhYm9ydCB0aGUgb3BlcmF0aW9uIGlmIG5lY2Vzc2FyeS4KLSAgICAgICAgICAgIGlmIChlbGVt
ZW50Lm1fZmlsZUxlbmd0aCAhPSBCbG9iOjp0b0VuZE9mRmlsZSkgeworICAgICAgICAgICAgaWYg
KGVsZW1lbnQubV9maWxlTGVuZ3RoICE9IEZvcm1EYXRhRWxlbWVudDo6dG9FbmRPZkZpbGUpIHsK
ICAgICAgICAgICAgICAgICBsZW5ndGggKz0gZWxlbWVudC5tX2ZpbGVMZW5ndGg7CiAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3ht
bC9YTUxIdHRwUmVxdWVzdC5jcHAgYi9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKaW5k
ZXggNWNkZTI0ZGUyOWRiNDQyMTAwMDFhMzAyMzI0NGNhNGNjZDI1Y2ZiYi4uMTQxMGE1ZWNjOGM2
OWI2MWJiMjY5ZDY2MDA0OGI5NTZiYjliODFkMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS94bWwvWE1M
SHR0cFJlcXVlc3QuY3BwCisrKyBiL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcApAQCAt
NDc4LDExICs0NzgsNyBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpzZW5kKEJsb2IqIGJvZHksIEV4
Y2VwdGlvbkNvZGUmIGVjKQogICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHdlIHNldCBhIENvbnRl
bnQtVHlwZSBpZiBvbmUgaXMgbm90IHNldC4KICAgICAgICAgLy8gRklYTUU6IGFkZCBzdXBwb3J0
IGZvciB1cGxvYWRpbmcgYnVuZGxlcy4KICAgICAgICAgbV9yZXF1ZXN0RW50aXR5Qm9keSA9IEZv
cm1EYXRhOjpjcmVhdGUoKTsKLSNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAgICAgICAgbV9yZXF1
ZXN0RW50aXR5Qm9keS0+YXBwZW5kRmlsZVJhbmdlKGJvZHktPnBhdGgoKSwgYm9keS0+c3RhcnQo
KSwgYm9keS0+bGVuZ3RoKCksIGJvZHktPm1vZGlmaWNhdGlvblRpbWUoKSk7Ci0jZWxzZQotICAg
ICAgICBtX3JlcXVlc3RFbnRpdHlCb2R5LT5hcHBlbmRGaWxlKGJvZHktPnBhdGgoKSwgZmFsc2Up
OwotI2VuZGlmCisgICAgICAgIG1fcmVxdWVzdEVudGl0eUJvZHktPmFwcGVuZEJsb2JJdGVtTGlz
dChib2R5LT5pdGVtcygpKTsKICAgICB9CiAKICAgICBjcmVhdGVSZXF1ZXN0KGVjKTsKQEAgLTQ5
NCw3ICs0OTAsNyBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpzZW5kKERPTUZvcm1EYXRhKiBib2R5
LCBFeGNlcHRpb25Db2RlJiBlYykKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1fbWV0aG9k
ICE9ICJHRVQiICYmIG1fbWV0aG9kICE9ICJIRUFEIiAmJiBtX3VybC5wcm90b2NvbEluSFRUUEZh
bWlseSgpKSB7Ci0gICAgICAgIG1fcmVxdWVzdEVudGl0eUJvZHkgPSBGb3JtRGF0YTo6Y3JlYXRl
TXVsdGlQYXJ0KCpib2R5LCBkb2N1bWVudCgpKTsKKyAgICAgICAgbV9yZXF1ZXN0RW50aXR5Qm9k
eSA9IEZvcm1EYXRhOjpjcmVhdGVNdWx0aVBhcnQoYm9keS0+aXRlbXMoKSwgYm9keS0+ZW5jb2Rp
bmcoKSwgZG9jdW1lbnQoKSk7CiAKICAgICAgICAgLy8gV2UgbmVlZCB0byBhc2sgdGhlIGNsaWVu
dCB0byBwcm92aWRlIHRoZSBnZW5lcmF0ZWQgZmlsZSBuYW1lcyBpZiBuZWVkZWQuIFdoZW4gRm9y
bURhdGEgZmlsbHMgdGhlIGVsZW1lbnQKICAgICAgICAgLy8gZm9yIHRoZSBmaWxlLCBpdCBjb3Vs
ZCBzZXQgYSBmbGFnIHRvIHVzZSB0aGUgZ2VuZXJhdGVkIGZpbGUgbmFtZSwgaS5lLiBhIHBhY2th
Z2UgZmlsZSBvbiBNYWMuCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBhYmFiMzE4OTAxMDI4MWUwMTdlNDQ0NThj
NzcwMTlkMTUwMjJmM2QzLi5jOTg4Y2FlNWM2YWYyMTAxYWZiN2ZmYTA0MWRjYWViM2YzNmRjYjFm
IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxMC0wNS0yMCAgS2ludWtvIFlhc3Vk
YSAgPGtpbnVrb0BraW51a28yLW1hY3Byby5tdHYuY29ycC5nb29nbGUuY29tPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yIEZvcm1EYXRh
IGFuZCBCbG9iIGZvciBiZXR0ZXIgc3VwcG9ydCBvZiBCbG9icyBzeW50aGVzaXplZCBieSBCbG9i
QnVpbGRlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MzkwODMKKworICAgICAgICBSZXBsYWNlIEZvcm1EYXRhTGlzdDo6SXRlbSBsaXN0IHdpdGggQmxv
Ykl0ZW1MaXN0IHRvIGdldCBpdCBjb21waWxpbmcKKyAgICAgICAgd2l0aCB0aGUgcmVmYWN0b3Jp
bmcgaW4gRm9ybURhdGFMaXN0LgorCisgICAgICAgICogc3JjL1dlYlNlYXJjaGFibGVGb3JtRGF0
YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIYXNTdWl0YWJsZVRleHRFbGVtZW50KToKKwogMjAx
MC0wNS0yMCAgRG9taW5pYyBNYXp6b25pICA8ZG1henpvbmlAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IERhcmluIEZpc2hlci4KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViU2VhcmNoYWJsZUZvcm1EYXRhLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
U2VhcmNoYWJsZUZvcm1EYXRhLmNwcAppbmRleCA4ZWVmNmNjODk0N2U1YzZjYzkzMzA1ZDJjYjYx
MTU4ZWVlOWU2OGQ1Li43NTJjMjNiOWZmZTc0MjEzMjEyMGEwN2Y5MTBhZmUxZmNiZTNjZTZmIDEw
MDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNlYXJjaGFibGVGb3JtRGF0YS5jcHAK
KysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZWFyY2hhYmxlRm9ybURhdGEuY3BwCkBAIC0x
ODUsOCArMTg1LDggQEAgYm9vbCBIYXNTdWl0YWJsZVRleHRFbGVtZW50KGNvbnN0IEhUTUxGb3Jt
RWxlbWVudCogZm9ybSwgVmVjdG9yPGNoYXI+KiBlbmNvZGVkU3QKICAgICAgIGlmICghZm9ybUVs
ZW1lbnQtPmFwcGVuZEZvcm1EYXRhKGRhdGFMaXN0LCBmYWxzZSkpCiAgICAgICAgICAgY29udGlu
dWU7CiAKLSAgICAgIGNvbnN0IFZlY3RvcjxGb3JtRGF0YUxpc3Q6Okl0ZW0+JiBpdGVtTGlzdCA9
IGRhdGFMaXN0Lmxpc3QoKTsKLSAgICAgIGlmIChpc1RleHRFbGVtZW50ICYmICFpdGVtTGlzdC5p
c0VtcHR5KCkpIHsKKyAgICAgIGNvbnN0IEJsb2JJdGVtTGlzdCYgaXRlbXMgPSBkYXRhTGlzdC5p
dGVtcygpOworICAgICAgaWYgKGlzVGV4dEVsZW1lbnQgJiYgIWl0ZW1zLmlzRW1wdHkoKSkgewog
ICAgICAgICAgIGlmICh0ZXh0RWxlbWVudCkgewogICAgICAgICAgICAgICAvLyBUaGUgYXV0by1j
b21wbGV0ZSBiYXIgb25seSBrbm93cyBob3cgdG8gZmlsbCBpbiBvbmUgdmFsdWUuCiAgICAgICAg
ICAgICAgIC8vIFRoaXMgZm9ybSBoYXMgbXVsdGlwbGUgZmllbGRzOyBkb24ndCB0cmVhdCBpdCBh
cyBzZWFyY2hhYmxlLgpAQCAtMTk0LDIwICsxOTQsMjMgQEAgYm9vbCBIYXNTdWl0YWJsZVRleHRF
bGVtZW50KGNvbnN0IEhUTUxGb3JtRWxlbWVudCogZm9ybSwgVmVjdG9yPGNoYXI+KiBlbmNvZGVk
U3QKICAgICAgICAgICB9CiAgICAgICAgICAgdGV4dEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1M
SW5wdXRFbGVtZW50Kj4oZm9ybUVsZW1lbnQpOwogICAgICAgfQotICAgICAgZm9yIChWZWN0b3I8
Rm9ybURhdGFMaXN0OjpJdGVtPjo6Y29uc3RfaXRlcmF0b3IgaihpdGVtTGlzdC5iZWdpbigpKTsg
aiAhPSBpdGVtTGlzdC5lbmQoKTsgKytqKSB7CisgICAgICBmb3IgKEJsb2JJdGVtTGlzdDo6Y29u
c3RfaXRlcmF0b3IgaihpdGVtcy5iZWdpbigpKTsgaiAhPSBpdGVtcy5lbmQoKTsgKytqKSB7Cisg
ICAgICAgICAgU3RyaW5nQmxvYkl0ZW0qIGl0ZW0gPSAoKmopLT50b1N0cmluZ0Jsb2JJdGVtKCk7
CisgICAgICAgICAgaWYgKCFpdGVtKQorICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAvLyBIYW5kbGUgSVNJTkRFWCAvIDxpbnB1dCBuYW1lPWlzaW5kZXg+IHNwZWNpYWxseSwgYnV0
IG9ubHkgaWYgaXQncwogICAgICAgICAgIC8vIHRoZSBmaXJzdCBlbnRyeS4KLSAgICAgICAgICBp
ZiAoIWVuY29kZWRTdHJpbmctPmlzRW1wdHkoKSB8fCBqLT5kYXRhKCkgIT0gImlzaW5kZXgiKSB7
CisgICAgICAgICAgaWYgKCFlbmNvZGVkU3RyaW5nLT5pc0VtcHR5KCkgfHwgaXRlbS0+Y3N0cigp
ICE9ICJpc2luZGV4IikgewogICAgICAgICAgICAgICBpZiAoIWVuY29kZWRTdHJpbmctPmlzRW1w
dHkoKSkKICAgICAgICAgICAgICAgICAgIGVuY29kZWRTdHJpbmctPmFwcGVuZCgnJicpOwotICAg
ICAgICAgICAgICBGb3JtRGF0YUJ1aWxkZXI6OmVuY29kZVN0cmluZ0FzRm9ybURhdGEoKmVuY29k
ZWRTdHJpbmcsIGotPmRhdGEoKSk7CisgICAgICAgICAgICAgIEZvcm1EYXRhQnVpbGRlcjo6ZW5j
b2RlU3RyaW5nQXNGb3JtRGF0YSgqZW5jb2RlZFN0cmluZywgaXRlbS0+Y3N0cigpKTsKICAgICAg
ICAgICAgICAgZW5jb2RlZFN0cmluZy0+YXBwZW5kKCc9Jyk7CiAgICAgICAgICAgfQogICAgICAg
ICAgICsrajsKICAgICAgICAgICBpZiAoZm9ybUVsZW1lbnQgPT0gdGV4dEVsZW1lbnQpCiAgICAg
ICAgICAgICAgIGVuY29kZWRTdHJpbmctPmFwcGVuZCgie3NlYXJjaFRlcm1zfSIsIDEzKTsKICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIEZvcm1EYXRhQnVpbGRlcjo6ZW5jb2RlU3RyaW5n
QXNGb3JtRGF0YSgqZW5jb2RlZFN0cmluZywgai0+ZGF0YSgpKTsKKyAgICAgICAgICAgICAgRm9y
bURhdGFCdWlsZGVyOjplbmNvZGVTdHJpbmdBc0Zvcm1EYXRhKCplbmNvZGVkU3RyaW5nLCBpdGVt
LT5jc3RyKCkpOwogICAgICAgfQogICAgIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56861</attachid>
            <date>2010-05-24 01:33:57 -0700</date>
            <delta_ts>2010-05-25 07:31:17 -0700</delta_ts>
            <desc>Patch (fixed cr-linux build)</desc>
            <filename>bug-39083-20100524013356.patch</filename>
            <type>text/plain</type>
            <size>75226</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CmluZGV4IGVlYzA0NDE5MjQ4NjY1NmMzODQ2MDZjYWQyZjNkOGY1MThiZWNhNzAuLmNhNDI2
YzZlNjE2YzQyYzgwNDVlYjE1Yzc2YWQ3OWY4NjZlMjU3OTAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
Q01ha2VMaXN0cy50eHQKKysrIGIvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTExMiw2ICsx
MTEyLDcgQEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAgIHBhZ2UvYW5pbWF0aW9uL0tleWZyYW1l
QW5pbWF0aW9uLmNwcAogCiAgICAgcGxhdGZvcm0vQXJlbmEuY3BwCisgICAgcGxhdGZvcm0vQmxv
Ykl0ZW0uY3BwCiAgICAgcGxhdGZvcm0vQ29udGVudFR5cGUuY3BwCiAgICAgcGxhdGZvcm0vQ29u
dGV4dE1lbnUuY3BwCiAgICAgcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGZhYTkwYWNh
NzY5MmJmYjA3MzYwNmNjNDI3ZmJjZTQzNGU2NDljMDcuLjlkY2NmZDA0MzhkZmMxNjY3MGEyNjM0
YzU4YjMwZmZhOWQxMzc2NDcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dl
YkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTEgQEAKKzIwMTAtMDUtMjQgIEtpbnVrbyBZYXN1
ZGEgIDxraW51a29AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yIEZvcm1EYXRhIGFuZCBCbG9iIGZvciBiZXR0ZXIg
c3VwcG9ydCBvZiBCbG9icyBzeW50aGVzaXplZCBieSBCbG9iQnVpbGRlci4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5MDgzCisKKyAgICAgICAgLSBJ
bnRyb2R1Y2VzIGEgbmV3IGNsYXNzIEJsb2JJdGVtIGFzIGEgYmFzaWMgY29tcG9uZW50IG9mIEJs
b2IgYW5kCisgICAgICAgICAgRm9ybURhdGEgYW5kIG1ha2VzIEJsb2IgYXMgYSBjb2xsZWN0aW9u
IG9mIEJsb2JJdGVtcy4KKyAgICAgICAgLSBGaWxlIHdvdWxkIGJlY29tZSBhIHNwZWNpYWwgdHlw
ZSBvZiBCbG9iIHRoYXQgY29udGFpbnMgb25seSBvbmUKKyAgICAgICAgICBGaWxlQmxvYkl0ZW0u
CisgICAgICAgIC0gTWFrZXMgRm9ybURhdGFFbGVtZW50IGEgd3JhcHBlciBvZiBCbG9iSXRlbSAo
YXMgYSB0cmFuc2llbnQKKyAgICAgICAgICBzb2x1dGlvbikuCisgICAgICAgIC0gRml4IHRoZSBk
ZXBlbmRlbmN5IHZpb2xhdGlvbiBpbiBGb3JtRGF0YSBzbyB0aGF0IHRoZSBmaWxlcyB1bmRlcgor
ICAgICAgICAgIHBsYXRmb3JtLyBkbyBub3QgaW5jbHVkZSBhbnkgaHRtbC8gZmlsZXMuCisKKyAg
ICAgICAgVGhlIHBhdGNoIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgbGF0ZXN0IEZpbGUgQVBJIGNoYW5n
ZXMgKGUuZy4gdHlwZSwKKyAgICAgICAgdXJsIGFuZCBzbGljZSdzIHR5cGUgcGFyYW1ldGVycykg
YW5kIHNob3VsZCBub3QgY2hhbmdlIGFueSBvZiBpdHMKKyAgICAgICAgZXhpc3RpbmcgYmVoYXZp
b3JzLgorCisgICAgICAgIFRoZSBleGlzdGluZyB0ZXN0cyBzaG91bGQgYmUgYWJsZSB0byBiZSB1
c2VkIGZvciByZWdyZXNzaW9uLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAg
ICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdl
YkNvcmUucHJvOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAg
ICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBodG1s
L0Jsb2IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6QmxvYik6CisgICAgICAgIChXZWJD
b3JlOjpCbG9iOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OnBhdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6QmxvYjo6YXBwZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OnNsaWNl
KToKKyAgICAgICAgKiBodG1sL0Jsb2IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjp0eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkJs
b2I6Oml0ZW1zKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OkJsb2IpOgorICAgICAgICAqIGh0
bWwvRmlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWxlOjpGaWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbGU6Om5hbWUpOgorICAgICAgICAqIGh0bWwvRmlsZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsZTo6ZmlsZU5hbWUpOgorICAgICAgICAqIGh0bWwvRmlsZVJlYWRlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWxlUmVhZGVyOjpyZWFkQXNCaW5hcnlTdHJpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsZVJlYWRlcjo6cmVhZEFzVGV4dCk6CisgICAgICAgICogaHRtbC9GaWxl
U3RyZWFtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVTdHJlYW06Om9wZW5Gb3JSZWFkKToK
KyAgICAgICAgKiBodG1sL0Zvcm1EYXRhTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb3Jt
RGF0YUxpc3Q6OmFwcGVuZFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YUxpc3Q6
OmFwcGVuZEJsb2IpOgorICAgICAgICAqIGh0bWwvRm9ybURhdGFMaXN0Lmg6CisgICAgICAgIChX
ZWJDb3JlOjpGb3JtRGF0YUxpc3Q6Oml0ZW1zKToKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6OmNyZWF0ZUZvcm1E
YXRhKToKKyAgICAgICAgKiBodG1sL0hUTUxQcm9ncmVzc0VsZW1lbnQuY3BwOgorICAgICAgICAq
IHBsYXRmb3JtL0Jsb2JJdGVtLmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vQmxvYkl0
ZW0uaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YUVsZW1lbnQ6OkZvcm1EYXRhRWxlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpGb3JtRGF0YTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1E
YXRhOjpjcmVhdGVNdWx0aVBhcnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6OmRlZXBD
b3B5KToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjphcHBlbmREYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OkZvcm1EYXRhOjphcHBlbmRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Rm9y
bURhdGE6OmFwcGVuZEZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6OmFwcGVuZEJs
b2JJdGVtTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YTo6YXBwZW5kRmlsZVJhbmdl
KToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjphcHBlbmRJdGVtcyk6CisgICAgICAgICog
cGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGFF
bGVtZW50OjpGb3JtRGF0YUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGFFbGVt
ZW50OjppdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhRWxlbWVudDo6QmxvYkl0ZW1X
cmFwcGVyOjpCbG9iSXRlbVdyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGFFbGVt
ZW50OjpCbG9iSXRlbVdyYXBwZXI6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGFF
bGVtZW50OjpCbG9iSXRlbVdyYXBwZXI6OmRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURh
dGFFbGVtZW50OjpCbG9iSXRlbVdyYXBwZXI6OnJlbGVhc2VCdWZmZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvciE9KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9uZXR3b3JrL21hYy9Gb3JtRGF0YVN0cmVhbU1hYy5tbToKKyAgICAgICAg
KFdlYkNvcmU6OmNsb3NlQ3VycmVudFN0cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjphZHZhbmNl
Q3VycmVudFN0cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjpmb3JtQ3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OmZvcm1SZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEhUVFBCb2R5KToKKyAg
ICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0
cFJlcXVlc3Q6OnNlbmQpOgorCiAyMDEwLTA1LTIzICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5v
cmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgT2xpdmVyIEh1bnQuCmRpZmYgLS1naXQgYS9XZWJD
b3JlL0dOVW1ha2VmaWxlLmFtIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCBiNTRmMjhh
ZWUwNTNlYWRjMDU1YzllNzA5ZTVlY2IxOWQwMzhhOGY4Li4yMjI2YjAwYWNiODFjOGQwOWE1YTk1
ODNiZTIzMmE1ZjAyNzhiZTVkIDEwMDY0NAotLS0gYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCisr
KyBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTE1MzYsNiArMTUzNiw4IEBAIHdlYmNvcmVf
c291cmNlcyArPSBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9BcmVuYS5jcHAgXAogCVdlYkNvcmUvcGxh
dGZvcm0vQXJlbmEuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9BdXRvZHJhaW5lZFBvb2wuaCBcCisJ
V2ViQ29yZS9wbGF0Zm9ybS9CbG9iSXRlbS5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0vQmxvYkl0
ZW0uaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9Db250ZW50VHlwZS5jcHAgXAogCVdlYkNvcmUvcGxh
dGZvcm0vQ29udGVudFR5cGUuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9Db250ZXh0TWVudS5jcHAg
XApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQppbmRleCA0MzRiMTJkZmI2MmE3MWZiNjgyZDAxYzM2NDFhYjZkZWVmMTM4YWE1Li45MDQyODRh
NTQ4YTkxZTJkMzI5NzQwZjUzZjU2ZmU3MTAzOGQzNTQyIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQorKysgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMjg2Myw2ICsyODYzLDgg
QEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9BcmVuYS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL0FyZW5hLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL0F1dG9kcmFpbmVkUG9vbC5oJywK
KyAgICAgICAgICAgICdwbGF0Zm9ybS9CbG9iSXRlbS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRm
b3JtL0Jsb2JJdGVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL0NvbnRlbnRUeXBlLmNwcCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vQ29udGVudFR5cGUuaCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vQ29udGV4dE1lbnUuY3BwJywKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5wcm8g
Yi9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IGUyZmMxMTZiOWE0MDJhZmM4MzgxMjAwOTYwMzlh
OWY2MmRmNTBkMWEuLmJkMjEwODBkMmU0YTQ1OGUyZTM3MTI2NmNiZmI1MmRiOGU1MGRmNDkgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvV2ViQ29yZS9XZWJDb3JlLnBybwpA
QCAtODA3LDYgKzgwNyw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3JtL2FuaW1hdGlvbi9B
bmltYXRpb24uY3BwIFwKICAgICBwbGF0Zm9ybS9hbmltYXRpb24vQW5pbWF0aW9uTGlzdC5jcHAg
XAogICAgIHBsYXRmb3JtL0FyZW5hLmNwcCBcCisgICAgcGxhdGZvcm0vQmxvYkl0ZW0uY3BwIFwK
ICAgICBwbGF0Zm9ybS90ZXh0L0Jhc2U2NC5jcHAgXAogICAgIHBsYXRmb3JtL3RleHQvQmlkaUNv
bnRleHQuY3BwIFwKICAgICBwbGF0Zm9ybS9Db250ZW50VHlwZS5jcHAgXApAQCAtMTU1Myw2ICsx
NTU0LDcgQEAgSEVBREVSUyArPSBcCiAgICAgcGxhdGZvcm0vYW5pbWF0aW9uL0FuaW1hdGlvbi5o
IFwKICAgICBwbGF0Zm9ybS9hbmltYXRpb24vQW5pbWF0aW9uTGlzdC5oIFwKICAgICBwbGF0Zm9y
bS9BcmVuYS5oIFwKKyAgICBwbGF0Zm9ybS9CbG9iSXRlbS5oIFwKICAgICBwbGF0Zm9ybS9Db250
ZW50VHlwZS5oIFwKICAgICBwbGF0Zm9ybS9Db250ZXh0TWVudS5oIFwKICAgICBwbGF0Zm9ybS9D
cm9zc1RocmVhZENvcGllci5oIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2ogYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmlu
ZGV4IGExMjE1MTBjNTMyOWFiOTYyMzIwOTEyOTc2NWU2OTNhM2YxNTVmNTQuLmE1ZDFlNjc3YjQw
Njc3MWQwNzFhODA1ZDJlOWRiZGU0MGE1NjE5NTIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvagpAQCAtMjIyNDksNiArMjIyNDksMTQgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0K
IAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cQmxvYkl0ZW0uY3BwIg0K
KwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxh
dGZvcm1cQmxvYkl0ZW0uaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXENvbnRlbnRUeXBlLmNwcCINCiAJCQkJPg0KIAkJCTwv
RmlsZT4NCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGY2
N2JmYTEyNmE4YmMyNTkwMDMxN2E4ZTRiNGIwMjVmNjhlODI3NTYuLmI2OGExZDZkYTkxOWIwZWU5
MzQ1OTQ1NTBjYzMzNTZhNTE2MjEyMzQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCkBAIC0yMjc2LDYgKzIyNzYsOCBAQAogCQk4OTUyNTNERDExNkM0RUY1MDBD
QUJGMDAgLyogRmlsZVN0cmVhbVByb3h5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4OTUyNTNEQjExNkM0RUY1MDBDQUJGMDAgLyogRmlsZVN0cmVhbVBy
b3h5LmggKi87IH07CiAJCTg5NTI1M0RGMTE2QzRGMDYwMENBQkYwMCAvKiBGaWxlVGhyZWFkVGFz
ay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODk1MjUz
REUxMTZDNEYwNjAwQ0FCRjAwIC8qIEZpbGVUaHJlYWRUYXNrLmggKi87IH07CiAJCThGQUM3NzRE
MTE5ODcyQ0IwMDE1QUU5NCAvKiBKU01haW5UaHJlYWRFeGVjU3RhdGUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOEY5MzREODQxMTg5RjFFRTAwNTA4
RDVEIC8qIEpTTWFpblRocmVhZEV4ZWNTdGF0ZS5jcHAgKi87IH07CisJCTg5ODhFMTBFMTFBMzUw
OEIwMERCNzMyRSAvKiBCbG9iSXRlbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4OTg4RTEwQzExQTM1MDhCMDBEQjczMkUgLyogQmxvYkl0ZW0uY3Bw
ICovOyB9OworCQk4OTg4RTEwRjExQTM1MDhCMDBEQjczMkUgLyogQmxvYkl0ZW0uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg5ODhFMTBEMTFBMzUwOEIw
MERCNzMyRSAvKiBCbG9iSXRlbS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTkzMDJCMEJEMEQ3OUY4MjkwMEM3RUU4MyAvKiBQYWdlR3JvdXAuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMwMkIwQkMw
RDc5RjgyOTAwQzdFRTgzIC8qIFBhZ2VHcm91cC5jcHAgKi87IH07CiAJCTkzMDJCMEJGMEQ3OUY4
MkMwMEM3RUU4MyAvKiBQYWdlR3JvdXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDkzMDJCMEJFMEQ3OUY4MkMwMEM3RUU4MyAvKiBQYWdlR3JvdXAuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5MzA1QjI0
RDA5OEYxQjZCMDBDMjg4NTUgLyogVGltZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDkzMDVCMjRDMDk4RjFCNkIwMEMyODg1NSAvKiBUaW1lci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC03ODU1LDYg
Kzc4NTcsOCBAQAogCQk4OTUyNTNERTExNkM0RjA2MDBDQUJGMDAgLyogRmlsZVRocmVhZFRhc2su
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsZVRocmVhZFRhc2suaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOEY5MzREODMxMTg5RjFFRTAwNTA4RDVEIC8qIEpT
TWFpblRocmVhZEV4ZWNTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBK
U01haW5UaHJlYWRFeGVjU3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOEY5
MzREODQxMTg5RjFFRTAwNTA4RDVEIC8qIEpTTWFpblRocmVhZEV4ZWNTdGF0ZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU01haW5UaHJlYWRFeGVjU3RhdGUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4OTg4RTEwQzExQTM1MDhCMDBEQjczMkUg
LyogQmxvYkl0ZW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmxv
Ykl0ZW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4OTg4RTEwRDExQTM1MDhC
MDBEQjczMkUgLyogQmxvYkl0ZW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
QmxvYkl0ZW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMwMkIwQkMwRDc5Rjgy
OTAwQzdFRTgzIC8qIFBhZ2VHcm91cC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBQYWdlR3JvdXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzAy
QjBCRTBENzlGODJDMDBDN0VFODMgLyogUGFnZUdyb3VwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFBhZ2VHcm91cC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5
MzA1QjI0QzA5OEYxQjZCMDBDMjg4NTUgLyogVGltZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVGltZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1NzU5
LDYgKzE1NzYzLDggQEAKIAkJCQlCQ0ZCMkY3NDA5N0EyRTFBMDBCQTcwM0QgLyogQXJlbmEuY3Bw
ICovLAogCQkJCUJDRkIyRjc1MDk3QTJFMUEwMEJBNzAzRCAvKiBBcmVuYS5oICovLAogCQkJCTUx
RTFFQ0IxMEM5MUM1NTYwMERDMjU1QiAvKiBBdXRvZHJhaW5lZFBvb2wuaCAqLywKKwkJCQk4OTg4
RTEwQzExQTM1MDhCMDBEQjczMkUgLyogQmxvYkl0ZW0uY3BwICovLAorCQkJCTg5ODhFMTBEMTFB
MzUwOEIwMERCNzMyRSAvKiBCbG9iSXRlbS5oICovLAogCQkJCUJDQzhDRkNBMDk4NkNEMjQwMDE0
MEJGMiAvKiBDb2xvckRhdGEuZ3BlcmYgKi8sCiAJCQkJNDFEMDE1QzkwRjRCNUM3MTAwNEE2NjJG
IC8qIENvbnRlbnRUeXBlLmNwcCAqLywKIAkJCQk0MUQwMTVDODBGNEI1QzcxMDA0QTY2MkYgLyog
Q29udGVudFR5cGUuaCAqLywKQEAgLTE2NzkxLDYgKzE2Nzk3LDcgQEAKIAkJCQlCQzVFQjkyMDBF
ODIwNDA4MDBCMjU5NjUgLyogQmluZGluZ1VSSS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTg5OTQz
MjgwQjQyMzM4ODAwRDdDODAyIC8qIEJpdG1hcEltYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQky
RUFGQUYwRjEwRTJBRjJEMDA3RUQzRDYgLyogQmxvYi5oIGluIEhlYWRlcnMgKi8sCisJCQkJODk4
OEUxMEYxMUEzNTA4QjAwREI3MzJFIC8qIEJsb2JJdGVtLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
M0YxOTlCRTA4MjQ1RTU5MDAxRTlBQkMgLyogQmxvY2tFeGNlcHRpb25zLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzVFQjVFMTBFODFCRTg3MDBCMjU5NjUgLyogQm9yZGVyRGF0YS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkM1RUI1REIwRTgxQjdFQTAwQjI1OTY1IC8qIEJvcmRlclZhbHVlLmggaW4g
SGVhZGVycyAqLywKQEAgLTE5NjA4LDYgKzE5NjE1LDcgQEAKIAkJCQlCQzVFQjkxRjBFODIwNDA4
MDBCMjU5NjUgLyogQmluZGluZ1VSSS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODk5NDMyOTBC
NDIzMzg4MDBEN0M4MDIgLyogQml0bWFwSW1hZ2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkVB
RkFGMEUxMEUyQUYyRDAwN0VEM0Q2IC8qIEJsb2IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJODk4
OEUxMEUxMUEzNTA4QjAwREI3MzJFIC8qIEJsb2JJdGVtLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTkzRjE5QUUxMDgyNDVFNTkwMDFFOUFCQyAvKiBCbG9ja0V4Y2VwdGlvbnMubW0gaW4gU291cmNl
cyAqLywKIAkJCQlCQ0VBNDg1NDA5N0Q5MzAyMDA5NEM5RTQgLyogYnJlYWtfbGluZXMuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJOTMzMDlEREEwOTlFNjQ5MjAwNTZFNTgxIC8qIEJyZWFrQmxvY2tx
dW90ZUNvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yMDM1Niw4ICsyMDM2NCw4IEBACiAJ
CQkJNTFFQzkyNjUwQ0U5MERENDAwRjkwMzA4IC8qIEpTQ3VzdG9tU1FMU3RhdGVtZW50RXJyb3JD
YWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTM0MTdDQTBDRUNGRjI1MDA0OUNCREUg
LyogSlNDdXN0b21Wb2lkQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTEwQjkzQzMw
QjczQzI5MTAwM0VEODkwIC8qIEpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcCBpbiBTb3VyY2Vz
ICovLAotCQkJCTFBRTgyRjhGMENBQUZBOUQwMDIyMzdBRSAvKiBKU0RhdGFiYXNlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUJDQ0U1OEFDMTA2MUU4Q0YwMDhGQjM1QSAvKiBKU0RhdGFiYXNlQ3Vz
dG9tLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTFBRTgyRjhGMENBQUZBOUQwMDIyMzdBRSAvKiBK
U0RhdGFiYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNzdEMTY5MEZGMTlGNTYwMDcwODg3
QiAvKiBKU0RhdGFHcmlkQ29sdW1uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNzdEMTZCMEZG
MTlGNTYwMDcwODg3QiAvKiBKU0RhdGFHcmlkQ29sdW1uTGlzdC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlCQzc3RDE1MjBGRjE5QzczMDA3MDg4N0IgLyogSlNEYXRhR3JpZENvbHVtbkxpc3RDdXN0
b20uY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvQmxvYi5jcHAg
Yi9XZWJDb3JlL2h0bWwvQmxvYi5jcHAKaW5kZXggODNiYmRjMGM1MjY0ODQ1NDI2ODgxOTI2MjE2
ODRiNjI4MjAyNGJmNC4uYjFmMmRmN2EwMzFiZDQ0NmY0Y2QwY2Y5OTZiYzM5ZjFjOGY0OTg0MyAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0Jsb2IuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9CbG9i
LmNwcApAQCAtMjksOTAgKzI5LDY4IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgorCiAj
aW5jbHVkZSAiQmxvYi5oIgogCisjaW5jbHVkZSAiQmxvYkl0ZW0uaCIKICNpbmNsdWRlICJGaWxl
U3lzdGVtLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotI2lmIEVOQUJMRShCTE9CX1NMSUNF
KQotY29uc3QgaW50IEJsb2I6OnRvRW5kT2ZGaWxlID0gLTE7Ci1jb25zdCBkb3VibGUgQmxvYjo6
ZG9Ob3RDaGVja0ZpbGVDaGFuZ2UgPSAwOwotI2VuZGlmCi0KIEJsb2I6OkJsb2IoY29uc3QgU3Ry
aW5nJiBwYXRoKQotICAgIDogbV9wYXRoKHBhdGgpCi0jaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0g
ICAgLCBtX3N0YXJ0KDApCi0gICAgLCBtX2xlbmd0aCh0b0VuZE9mRmlsZSkKLSAgICAsIG1fc25h
cHNob3RDYXB0dXJlZChmYWxzZSkKLSAgICAsIG1fc25hcHNob3RTaXplKDApCi0gICAgLCBtX3Nu
YXBzaG90TW9kaWZpY2F0aW9uVGltZShkb05vdENoZWNrRmlsZUNoYW5nZSkKLSNlbmRpZgogewor
ICAgIC8vIE5vdGU6IHRoaXMgZG9lc24ndCBpbml0aWFsaXplIHRoZSB0eXBlIHVubGlrZSBGaWxl
KHBhdGgpLgorICAgIGFwcGVuZChGaWxlQmxvYkl0ZW06OmNyZWF0ZShwYXRoKSk7CiB9CiAKLSNp
ZiBFTkFCTEUoQkxPQl9TTElDRSkKLUJsb2I6OkJsb2IoY29uc3QgU3RyaW5nJiBwYXRoLCBsb25n
IGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgsIGxvbmcgbG9uZyBzbmFwc2hvdFNpemUsIGRv
dWJsZSBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUpCi0gICAgOiBtX3BhdGgocGF0aCkKLSAgICAs
IG1fc3RhcnQoc3RhcnQpCi0gICAgLCBtX2xlbmd0aChsZW5ndGgpCi0gICAgLCBtX3NuYXBzaG90
Q2FwdHVyZWQodHJ1ZSkKLSAgICAsIG1fc25hcHNob3RTaXplKHNuYXBzaG90U2l6ZSkKLSAgICAs
IG1fc25hcHNob3RNb2RpZmljYXRpb25UaW1lKHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSkKLXsK
LSAgICBBU1NFUlQoc3RhcnQgPj0gMCAmJiBsZW5ndGggPj0gMCAmJiBzdGFydCArIGxlbmd0aCA8
PSBzbmFwc2hvdFNpemUgJiYgc25hcHNob3RNb2RpZmljYXRpb25UaW1lKTsKLX0KLSNlbmRpZgot
CiB1bnNpZ25lZCBsb25nIGxvbmcgQmxvYjo6c2l6ZSgpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6
IEphdmFTY3JpcHQgY2Fubm90IHJlcHJlc2VudCBzaXplcyBhcyBsYXJnZSBhcyB1bnNpZ25lZCBs
b25nIGxvbmcsIHdlIG5lZWQgdG8KICAgICAvLyBjb21lIHVwIHdpdGggYW4gZXhjZXB0aW9uIHRv
IHRocm93IGlmIGZpbGUgc2l6ZSBpcyBub3QgcmVwcmVzZXRhYmxlLgotI2lmIEVOQUJMRShCTE9C
X1NMSUNFKQotICAgIGlmIChtX3NuYXBzaG90Q2FwdHVyZWQpCi0gICAgICAgIHJldHVybiBtX2xl
bmd0aDsKLSNlbmRpZgotICAgIGxvbmcgbG9uZyBzaXplOwotICAgIGlmICghZ2V0RmlsZVNpemUo
bV9wYXRoLCBzaXplKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0
PHVuc2lnbmVkIGxvbmcgbG9uZz4oc2l6ZSk7CisgICAgdW5zaWduZWQgbG9uZyBsb25nIHNpemUg
PSAwOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9pdGVtcy5zaXplKCk7ICsraSkKKyAg
ICAgICAgc2l6ZSArPSBtX2l0ZW1zW2ldLT5zaXplKCk7CisgICAgcmV0dXJuIHNpemU7Cit9CisK
K2NvbnN0IFN0cmluZyYgQmxvYjo6cGF0aCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1faXRlbXMu
c2l6ZSgpID09IDEgJiYgbV9pdGVtc1swXS0+dG9GaWxlQmxvYkl0ZW0oKSk7CisgICAgcmV0dXJu
IG1faXRlbXNbMF0tPnRvRmlsZUJsb2JJdGVtKCktPnBhdGgoKTsKK30KKwordm9pZCBCbG9iOjph
cHBlbmQoUGFzc1JlZlB0cjxCbG9iSXRlbT4gaXRlbSkKK3sKKyAgICBtX2l0ZW1zLmFwcGVuZChp
dGVtKTsKIH0KIAogI2lmIEVOQUJMRShCTE9CX1NMSUNFKQogUGFzc1JlZlB0cjxCbG9iPiBCbG9i
OjpzbGljZShsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgpIGNvbnN0CiB7Ci0gICAg
Ly8gV2hlbiB3ZSBzbGljZSBhIGZpbGUgZm9yIHRoZSBmaXJzdCB0aW1lLCB3ZSBvYnRhaW4gYSBz
bmFwc2hvdCBvZiB0aGUgZmlsZSBieSBjYXB0dXJpbmcgaXRzIGN1cnJlbnQgc2l6ZSBhbmQgbW9k
aWZpY2F0aW9uIHRpbWUuCi0gICAgLy8gVGhlIG1vZGlmaWNhdGlvbiB0aW1lIHdpbGwgYmUgdXNl
ZCB0byB2ZXJpZnkgaWYgdGhlIGZpbGUgaGFzIGJlZW4gY2hhbmdlZCBvciBub3QsIHdoZW4gdGhl
IHVuZGVybHlpbmcgZGF0YSBhcmUgYWNjZXNzZWQuCi0gICAgbG9uZyBsb25nIHNuYXBzaG90U2l6
ZTsKLSAgICBkb3VibGUgc25hcHNob3RNb2RpZmljYXRpb25UaW1lOwotICAgIGlmIChtX3NuYXBz
aG90Q2FwdHVyZWQpIHsKLSAgICAgICAgc25hcHNob3RTaXplID0gbV9zbmFwc2hvdFNpemU7Ci0g
ICAgICAgIHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSA9IG1fc25hcHNob3RNb2RpZmljYXRpb25U
aW1lOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIElmIHdlIGZhaWwgdG8gcmV0cmlldmUgdGhl
IHNpemUgb3IgbW9kaWZpY2F0aW9uIHRpbWUsIHByb2JhYmx5IGR1ZSB0byB0aGF0IHRoZSBmaWxl
IGhhcyBiZWVuIGRlbGV0ZWQsIGFuIGVtcHR5IGJsb2Igd2lsbCBiZSByZXR1cm5lZC4KLSAgICAg
ICAgdGltZV90IG1vZGlmaWNhdGlvblRpbWU7Ci0gICAgICAgIGlmICghZ2V0RmlsZVNpemUobV9w
YXRoLCBzbmFwc2hvdFNpemUpIHx8ICFnZXRGaWxlTW9kaWZpY2F0aW9uVGltZShtX3BhdGgsIG1v
ZGlmaWNhdGlvblRpbWUpKSB7Ci0gICAgICAgICAgICBzbmFwc2hvdFNpemUgPSAwOwotICAgICAg
ICAgICAgc25hcHNob3RNb2RpZmljYXRpb25UaW1lID0gMDsKLSAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUgPSBtb2RpZmljYXRpb25UaW1lOwotICAg
IH0KLQotICAgIC8vIENsYW1wIHRoZSByYW5nZSBpZiBpdCBleGNlZWRzIHRoZSBzaXplIGxpbWl0
LgogICAgIGlmIChzdGFydCA8IDApCiAgICAgICAgIHN0YXJ0ID0gMDsKICAgICBpZiAobGVuZ3Ro
IDwgMCkKICAgICAgICAgbGVuZ3RoID0gMDsKIAotICAgIGlmIChzdGFydCA+IHNuYXBzaG90U2l6
ZSkgeworICAgIC8vIENsYW1wIHRoZSByYW5nZSBpZiBpdCBleGNlZWRzIHRoZSBzaXplIGxpbWl0
LgorICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbFNpemUgPSBzaXplKCk7CisgICAgaWYgKHN0
YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oc3RhcnQpID4gdG90YWxTaXplKSB7CiAgICAg
ICAgIHN0YXJ0ID0gMDsKICAgICAgICAgbGVuZ3RoID0gMDsKLSAgICB9IGVsc2UgaWYgKHN0YXJ0
ICsgbGVuZ3RoID4gc25hcHNob3RTaXplKQotICAgICAgICBsZW5ndGggPSBzbmFwc2hvdFNpemUg
LSBzdGFydDsKKyAgICB9IGVsc2UgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4o
c3RhcnQgKyBsZW5ndGgpID4gdG90YWxTaXplKQorICAgICAgICBsZW5ndGggPSB0b3RhbFNpemUg
LSBzdGFydDsKIAotICAgIHJldHVybiBhZG9wdFJlZihuZXcgQmxvYihtX3BhdGgsIG1fc3RhcnQg
KyBzdGFydCwgbGVuZ3RoLCBzbmFwc2hvdFNpemUsIHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSkp
OworICAgIHNpemVfdCBpID0gMDsKKyAgICBSZWZQdHI8QmxvYj4gYmxvYiA9IEJsb2I6OmNyZWF0
ZSgpOworICAgIGZvciAoOyBpIDwgbV9pdGVtcy5zaXplKCkgJiYgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgbG9uZyBsb25nPihzdGFydCkgPj0gbV9pdGVtc1tpXS0+c2l6ZSgpOyArK2kpCisgICAgICAg
IHN0YXJ0IC09IG1faXRlbXNbaV0tPnNpemUoKTsKKyAgICBmb3IgKDsgbGVuZ3RoID4gMCAmJiBp
IDwgbV9pdGVtcy5zaXplKCk7ICsraSkgeworICAgICAgICBibG9iLT5tX2l0ZW1zLmFwcGVuZCht
X2l0ZW1zW2ldLT5zbGljZShzdGFydCwgbGVuZ3RoKSk7CisgICAgICAgIGxlbmd0aCAtPSBibG9i
LT5tX2l0ZW1zLmxhc3QoKS0+c2l6ZSgpOworICAgICAgICBzdGFydCA9IDA7CisgICAgfQorICAg
IHJldHVybiBibG9iLnJlbGVhc2UoKTsKIH0KLSNlbmRpZgorI2VuZGlmIC8vIEVOQUJMRShCTE9C
X1NMSUNFKQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0
bWwvQmxvYi5oIGIvV2ViQ29yZS9odG1sL0Jsb2IuaAppbmRleCBlOGI1ZjNmZGYwNjlhMmI0ODc2
ZWQxNmFiODFiMjJmMGZmMDM4OTcwLi4zMWMxMjQyMDMzOWI4NDc3Yjg0NGFjNWUwY2FjZDRhMTll
NDhkNDJiIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvQmxvYi5oCisrKyBiL1dlYkNvcmUvaHRt
bC9CbG9iLmgKQEAgLTMxLDIxICszMSwyNSBAQAogI2lmbmRlZiBCbG9iX2gKICNkZWZpbmUgQmxv
Yl9oCiAKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiQmxvYkl0ZW0uaCIK
ICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRl
ICJUZXh0RW5jb2RpbmcuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIEJsb2IgOiBwdWJsaWMgUmVmQ291bnRlZDxCbG9iPiB7CiBwdWJs
aWM6Ci0jaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgc3RhdGljIGNvbnN0IGludCB0b0VuZE9m
RmlsZTsKLSAgICBzdGF0aWMgY29uc3QgZG91YmxlIGRvTm90Q2hlY2tGaWxlQ2hhbmdlOwotI2Vu
ZGlmCisgICAgc3RhdGljIFBhc3NSZWZQdHI8QmxvYj4gY3JlYXRlKCkKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgQmxvYigpKTsKKyAgICB9CiAKKyAgICAvLyBGSVhNRTogZGVw
cmVjYXRlZCBtZXRob2QuICBUaGlzIGlzIGNhbGxlZCBvbmx5IGZyb20KKyAgICAvLyBiaW5kaW5n
cy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwIGFuZCB0aGUgdXNhZ2UgaW4gaXQgd2lsbCBi
ZWNvbWUgaW52YWxpZCBvbmNlCisgICAgLy8gQmxvYkJ1aWxkZXIgaXMgaW50cm9kdWNlZC4KICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxCbG9iPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBwYXRoKQogICAg
IHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBCbG9iKHBhdGgpKTsKQEAgLTUzLDQ3ICs1
NywyOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIH5CbG9iKCkgeyB9CiAKKyAgICB1bnNpZ25l
ZCBsb25nIGxvbmcgc2l6ZSgpIGNvbnN0OworICAgIGNvbnN0IFN0cmluZyYgdHlwZSgpIGNvbnN0
IHsgcmV0dXJuIG1fdHlwZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0ZpbGUoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQogCi0jaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgUGFzc1JlZlB0cjxC
bG9iPiBzbGljZShsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgpIGNvbnN0OwotI2Vu
ZGlmCi0KLSAgICBjb25zdCBTdHJpbmcmIHBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0K
LSAgICB1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSgpIGNvbnN0OwotI2lmIEVOQUJMRShCTE9CX1NM
SUNFKQotICAgIGxvbmcgbG9uZyBzdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnQ7IH0KLSAg
ICBsb25nIGxvbmcgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KLSAgICBkb3Vi
bGUgbW9kaWZpY2F0aW9uVGltZSgpIGNvbnN0IHsgcmV0dXJuIG1fc25hcHNob3RNb2RpZmljYXRp
b25UaW1lOyB9Ci0jZW5kaWYKKyAgICAvLyBGSVhNRTogZGVwcmVjYXRlZCBtZXRob2QuCisgICAg
Y29uc3QgU3RyaW5nJiBwYXRoKCkgY29uc3Q7CiAKLXByb3RlY3RlZDoKLSAgICBCbG9iKGNvbnN0
IFN0cmluZyYgcGF0aCk7CisgICAgdm9pZCBhcHBlbmQoUGFzc1JlZlB0cjxCbG9iSXRlbT4pOwor
ICAgIGNvbnN0IEJsb2JJdGVtTGlzdCYgaXRlbXMoKSBjb25zdCB7IHJldHVybiBtX2l0ZW1zOyB9
CiAKLXByaXZhdGU6CiAjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgQmxvYihjb25zdCBTdHJp
bmcmIHBhdGgsIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCwgbG9uZyBsb25nIHNu
YXBzaG90U2l6ZSwgZG91YmxlIHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSk7CisgICAgUGFzc1Jl
ZlB0cjxCbG9iPiBzbGljZShsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgpIGNvbnN0
OwogI2VuZGlmCiAKLSAgICAvLyBUaGUgdW5kZXJseWluZyBwYXRoIG9mIHRoZSBmaWxlLWJhc2Vk
IGJsb2IuIAotICAgIFN0cmluZyBtX3BhdGg7Ci0KLSNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAg
ICAvLyBUaGUgc3RhcnRpbmcgcG9zaXRpb24gb2YgdGhlIGZpbGUtYmFzZWQgYmxvYi4KLSAgICBs
b25nIGxvbmcgbV9zdGFydDsKLQotICAgIC8vIFRoZSBsZW5ndGggb2YgdGhlIGZpbGUtYmFzZWQg
YmxvYi4gVGhlIHZhbHVlIG9mIC0xIG1lYW5zIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUuCi0gICAg
bG9uZyBsb25nIG1fbGVuZ3RoOwotCi0gICAgLy8gQSBmbGFnIHRvIHRlbGwgaWYgYSBzbmFwc2hv
dCBoYXMgYmVlbiBjYXB0dXJlZC4KLSAgICBib29sIG1fc25hcHNob3RDYXB0dXJlZDsKK3Byb3Rl
Y3RlZDoKKyAgICBCbG9iKCkgeyB9CiAKLSAgICAvLyBUaGUgc2l6ZSBvZiB0aGUgZmlsZSB3aGVu
IGEgc25hcHNob3QgaXMgY2FwdHVyZWQuIEl0IGNhbiBiZSAwIGlmIHRoZSBmaWxlIGlzIGVtcHR5
LgotICAgIGxvbmcgbG9uZyBtX3NuYXBzaG90U2l6ZTsKKyAgICAvLyBGSVhNRTogZGVwcmVjYXRl
ZCBjb25zdHJ1Y3Rvci4gIFNlZSBhbHNvIHRoZSBjb21tZW50IGZvciBCbG9iOjpjcmVhdGUocGF0
aCkuCisgICAgQmxvYihjb25zdCBTdHJpbmcmIHBhdGgpOwogCi0gICAgLy8gVGhlIGxhc3QgbW9k
aWZpY2F0aW9uIHRpbWUgb2YgdGhlIGZpbGUgd2hlbiBhIHNuYXBzaG90IGlzIGNhcHR1cmVkLiBU
aGUgdmFsdWUgb2YgMCBhbHNvIG1lYW5zIHRoYXQgdGhlIHNuYXBzaG90IGlzIG5vdCBjYXB0dXJl
ZC4KLSAgICBkb3VibGUgbV9zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWU7Ci0jZW5kaWYKKyAgICBC
bG9iSXRlbUxpc3QgbV9pdGVtczsKKyAgICBTdHJpbmcgbV90eXBlOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0ZpbGUuY3BwIGIvV2ViQ29y
ZS9odG1sL0ZpbGUuY3BwCmluZGV4IDk3ZmRjNDU3OGQ3NGIyMjVlNTk0NmY0ZDZhZWYyNTY1MjU0
NDNhZTQuLjE4MGNhMTdmOGQ3YTM0ZjU4MzlmNTllOWIwZTJhM2NjMTk4YzU1ZjUgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaHRtbC9GaWxlLmNwcAorKysgYi9XZWJDb3JlL2h0bWwvRmlsZS5jcHAKQEAg
LTMzLDEyICszMywxNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEZpbGU6OkZpbGUoY29uc3Qg
U3RyaW5nJiBwYXRoKQogICAgIDogQmxvYihwYXRoKQotICAgICwgbV9uYW1lKHBhdGhHZXRGaWxl
TmFtZShwYXRoKSkKIHsKICAgICAvLyBXZSBkb24ndCB1c2UgTUlNRVR5cGVSZWdpc3RyeTo6Z2V0
TUlNRVR5cGVGb3JQYXRoKCkgYmVjYXVzZSBpdCByZXR1cm5zICJhcHBsaWNhdGlvbi9vY3RldC1z
dHJlYW0iIHVwb24gZmFpbHVyZS4KLSAgICBpbnQgaW5kZXggPSBtX25hbWUucmV2ZXJzZUZpbmQo
Jy4nKTsKKyAgICBpbnQgaW5kZXggPSBuYW1lKCkucmV2ZXJzZUZpbmQoJy4nKTsKICAgICBpZiAo
aW5kZXggIT0gLTEpCi0gICAgICAgIG1fdHlwZSA9IE1JTUVUeXBlUmVnaXN0cnk6OmdldE1JTUVU
eXBlRm9yRXh0ZW5zaW9uKG1fbmFtZS5zdWJzdHJpbmcoaW5kZXggKyAxKSk7CisgICAgICAgIG1f
dHlwZSA9IE1JTUVUeXBlUmVnaXN0cnk6OmdldE1JTUVUeXBlRm9yRXh0ZW5zaW9uKG5hbWUoKS5z
dWJzdHJpbmcoaW5kZXggKyAxKSk7Cit9CisKK2NvbnN0IFN0cmluZyYgRmlsZTo6bmFtZSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGl0ZW1zKCkuYXQoMCktPnRvRmlsZUJsb2JJdGVtKCktPm5hbWUo
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1s
L0ZpbGUuaCBiL1dlYkNvcmUvaHRtbC9GaWxlLmgKaW5kZXggMDY1ZGQ4NmE3YjFlYmY3N2ZiNDA2
NDZmOWM2ZTg3MDQ2OWQ3ZWIwOS4uNTgyZGIyODUwM2JmZmYyYjk1OGUzZDUyNTVlZjdhYmU5YTYw
NTY5YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0ZpbGUuaAorKysgYi9XZWJDb3JlL2h0bWwv
RmlsZS5oCkBAIC00MSwxOCArNDEsMTQgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIGlz
RmlsZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAotICAgIGNvbnN0IFN0cmluZyYgbmFtZSgp
IGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQotICAgIGNvbnN0IFN0cmluZyYgdHlwZSgpIGNvbnN0
IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0OwogCiAg
ICAgLy8gRklYTUU6IG9ic29sZXRlIGF0dHJpYnV0ZXMuIFRvIGJlIHJlbW92ZWQuCi0gICAgY29u
c3QgU3RyaW5nJiBmaWxlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQorICAgIGNvbnN0
IFN0cmluZyYgZmlsZU5hbWUoKSBjb25zdCB7IHJldHVybiBuYW1lKCk7IH0KICAgICB1bnNpZ25l
ZCBsb25nIGxvbmcgZmlsZVNpemUoKSBjb25zdCB7IHJldHVybiBzaXplKCk7IH0KIAogcHJpdmF0
ZToKICAgICBGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCk7Ci0KLSAgICBTdHJpbmcgbV9uYW1lOwot
ICAgIFN0cmluZyBtX3R5cGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2h0bWwvRmlsZVJlYWRlci5jcHAgYi9XZWJDb3JlL2h0bWwvRmlsZVJlYWRl
ci5jcHAKaW5kZXggMzQ0MjM0MjI3NTgxMjdiZWQ3NzM4NzJjNGZmMzFmYTAxZGZhYzRlNC4uMmUw
MjBjMTEzNTA1Y2NiNmY0NDNhOGQyNTZiMGU5YTFiYWIwODAzNCAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9odG1sL0ZpbGVSZWFkZXIuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9GaWxlUmVhZGVyLmNwcApA
QCAtODUsNiArODUsNyBAQCB2b2lkIEZpbGVSZWFkZXI6OnN0b3AoKQogCiB2b2lkIEZpbGVSZWFk
ZXI6OnJlYWRBc0JpbmFyeVN0cmluZyhCbG9iKiBmaWxlQmxvYikKIHsKKyAgICAvLyBGSVhNRTog
bmVlZHMgdG8gaGFuZGxlIG5vbi1maWxlIGJsb2JzLgogICAgIExPRyhGaWxlQVBJLCAiRmlsZVJl
YWRlcjogcmVhZGluZyBhcyBiaW5hcnk6ICVzXG4iLCBmaWxlQmxvYi0+cGF0aCgpLnV0ZjgoKS5k
YXRhKCkpOwogCiAgICAgcmVhZEludGVybmFsKGZpbGVCbG9iLCBSZWFkRmlsZUFzQmluYXJ5U3Ry
aW5nKTsKQEAgLTkyLDYgKzkzLDcgQEAgdm9pZCBGaWxlUmVhZGVyOjpyZWFkQXNCaW5hcnlTdHJp
bmcoQmxvYiogZmlsZUJsb2IpCiAKIHZvaWQgRmlsZVJlYWRlcjo6cmVhZEFzVGV4dChCbG9iKiBm
aWxlQmxvYiwgY29uc3QgU3RyaW5nJiBlbmNvZGluZykKIHsKKyAgICAvLyBGSVhNRTogbmVlZHMg
dG8gaGFuZGxlIG5vbi1maWxlIGJsb2JzLgogICAgIExPRyhGaWxlQVBJLCAiRmlsZVJlYWRlcjog
cmVhZGluZyBhcyB0ZXh0OiAlc1xuIiwgZmlsZUJsb2ItPnBhdGgoKS51dGY4KCkuZGF0YSgpKTsK
IAogICAgIGlmICghZW5jb2RpbmcuaXNFbXB0eSgpKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1s
L0ZpbGVTdHJlYW0uY3BwIGIvV2ViQ29yZS9odG1sL0ZpbGVTdHJlYW0uY3BwCmluZGV4IDcwODlm
NjE2MTU0ZTRiMTBhMzI3NzNlMDMzNTZhNzkzNjQ1OGY5N2YuLjI1YzU2M2Q1YzUxODYyYjZkZGUz
M2YyZWFkYzI0ZWEzYTI2NGFjOTQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9GaWxlU3RyZWFt
LmNwcAorKysgYi9XZWJDb3JlL2h0bWwvRmlsZVN0cmVhbS5jcHAKQEAgLTcyLDQ4ICs3Miw0OSBA
QCB2b2lkIEZpbGVTdHJlYW06Om9wZW5Gb3JSZWFkKEJsb2IqIGJsb2IpCiAgICAgaWYgKGlzSGFu
ZGxlVmFsaWQobV9oYW5kbGUpKQogICAgICAgICByZXR1cm47CiAKKyAgICAvLyBGSVhNRTogbmVl
ZCB0byBoYW5kbGUgbXVsdGlwbGUgaXRlbXMgdGhhdCBtYXkgaW5jbHVkZSBub24tZmlsZSBvbmVz
CisgICAgLy8gd2hlbiBCbG9iQnVpbGRlciBpcyBpbnRyb2R1Y2VkLgorICAgIEFTU0VSVChibG9i
LT5pdGVtcygpLnNpemUoKSA9PSAxICYmIGJsb2ItPml0ZW1zKCkuYXQoMCktPnRvRmlsZUJsb2JJ
dGVtKCkpOworICAgIGNvbnN0IEZpbGVCbG9iSXRlbSogZmlsZSA9IGJsb2ItPml0ZW1zKCkuYXQo
MCktPnRvRmlsZUJsb2JJdGVtKCk7CisKICAgICAvLyBDaGVjayBpZiB0aGUgZmlsZSBleGlzdHMg
YnkgcXVlcnlpbmcgaXRzIG1vZGlmaWNhdGlvbiB0aW1lLiBXZSBjaG9vc2Ugbm90IHRvIGNhbGwg
ZmlsZUV4aXN0cygpIGluIG9yZGVyIHRvIHNhdmUgYW4KICAgICAvLyBleHRyYSBmaWxlIHN5c3Rl
bSBjYWxsIHdoZW4gdGhlIG1vZGlmaWNhdGlvbiB0aW1lIGlzIG5lZWRlZCB0byBjaGVjayB0aGUg
dmFsaWRpdHkgb2YgdGhlIHNsaWNlZCBmaWxlIGJsb2IuCiAgICAgLy8gUGVyIHRoZSBzcGVjLCB3
ZSBuZWVkIHRvIHJldHVybiBkaWZmZXJlbnQgZXJyb3IgY29kZXMgdG8gZGlmZmVyZW50aWF0ZSBi
ZXR3ZWVuIG5vbi1leGlzdGVudCBmaWxlIGFuZCBwZXJtaXNzaW9uIGVycm9yLgogICAgIC8vIG9w
ZW5GaWxlKCkgY291bGQgbm90IHRlbGwgdXNlIHRoZSBmYWlsdXJlIHJlYXNvbi4KICAgICB0aW1l
X3QgY3VycmVudE1vZGlmaWNhdGlvblRpbWU7Ci0gICAgaWYgKCFnZXRGaWxlTW9kaWZpY2F0aW9u
VGltZShibG9iLT5wYXRoKCksIGN1cnJlbnRNb2RpZmljYXRpb25UaW1lKSkgeworICAgIGlmICgh
Z2V0RmlsZU1vZGlmaWNhdGlvblRpbWUoZmlsZS0+cGF0aCgpLCBjdXJyZW50TW9kaWZpY2F0aW9u
VGltZSkpIHsKICAgICAgICAgbV9jbGllbnQtPmRpZEZhaWwoTk9UX0ZPVU5EX0VSUik7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKICAgICAvLyBPcGVuIHRoZSBmaWxlIGJsb2IuCi0gICAgbV9o
YW5kbGUgPSBvcGVuRmlsZShibG9iLT5wYXRoKCksIE9wZW5Gb3JSZWFkKTsKKyAgICBtX2hhbmRs
ZSA9IG9wZW5GaWxlKGZpbGUtPnBhdGgoKSwgT3BlbkZvclJlYWQpOwogICAgIGlmICghaXNIYW5k
bGVWYWxpZChtX2hhbmRsZSkpIHsKICAgICAgICAgbV9jbGllbnQtPmRpZEZhaWwoTk9UX1JFQURB
QkxFX0VSUik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICNpZiBFTkFCTEUoQkxPQl9TTElD
RSkKLSAgICAvLyBDaGVjayB0aGUgbW9kaWZpY2F0aW9udCB0aW1lIGZvciB0aGUgcG9zc2libGUg
ZmlsZSBjaGFuZ2UuCi0gICAgaWYgKGJsb2ItPm1vZGlmaWNhdGlvblRpbWUoKSAhPSBCbG9iOjpk
b05vdENoZWNrRmlsZUNoYW5nZSAmJiBzdGF0aWNfY2FzdDx0aW1lX3Q+KGJsb2ItPm1vZGlmaWNh
dGlvblRpbWUoKSkgIT0gY3VycmVudE1vZGlmaWNhdGlvblRpbWUpIHsKLSAgICAgICAgbV9jbGll
bnQtPmRpZEZhaWwoTk9UX1JFQURBQkxFX0VSUik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICAvLyBKdW1wIHRvIHRoZSBiZWdpbm5pbmcgcG9zaXRpb24gaWYgdGhlIGZpbGUgaGFzIGJl
ZW4gc2xpY2VkLgotICAgIGlmIChibG9iLT5zdGFydCgpID4gMCkgewotICAgICAgICBpZiAoIXNl
ZWtGaWxlKG1faGFuZGxlLCBibG9iLT5zdGFydCgpLCBTZWVrRnJvbUJlZ2lubmluZykpIHsKKyAg
ICBjb25zdCBGaWxlUmFuZ2VCbG9iSXRlbSogcmFuZ2UgPSBmaWxlLT50b0ZpbGVSYW5nZUJsb2JJ
dGVtKCk7CisgICAgaWYgKHJhbmdlKSB7CisgICAgICAgIC8vIENoZWNrIHRoZSBtb2RpZmljYXRp
b250IHRpbWUgZm9yIHRoZSBwb3NzaWJsZSBmaWxlIGNoYW5nZS4KKyAgICAgICAgaWYgKHN0YXRp
Y19jYXN0PHRpbWVfdD4ocmFuZ2UtPnNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSgpKSAhPSBjdXJy
ZW50TW9kaWZpY2F0aW9uVGltZSkgewogICAgICAgICAgICAgbV9jbGllbnQtPmRpZEZhaWwoTk9U
X1JFQURBQkxFX0VSUik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKworICAgICAg
ICAvLyBKdW1wIHRvIHRoZSBiZWdpbm5pbmcgcG9zaXRpb24gaWYgdGhlIGZpbGUgaGFzIGJlZW4g
c2xpY2VkLgorICAgICAgICBpZiAocmFuZ2UtPnN0YXJ0KCkgPiAwKSB7CisgICAgICAgICAgICBp
ZiAoc2Vla0ZpbGUobV9oYW5kbGUsIHJhbmdlLT5zdGFydCgpLCBTZWVrRnJvbUJlZ2lubmluZykg
PCAwKSB7CisgICAgICAgICAgICAgICAgbV9jbGllbnQtPmRpZEZhaWwoTk9UX1JFQURBQkxFX0VS
Uik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CiAg
ICAgfQogI2VuZGlmCiAKICAgICAvLyBHZXQgdGhlIHNpemUuCi0jaWYgRU5BQkxFKEJMT0JfU0xJ
Q0UpCi0gICAgbV90b3RhbEJ5dGVzVG9SZWFkID0gYmxvYi0+bGVuZ3RoKCk7Ci0gICAgaWYgKG1f
dG90YWxCeXRlc1RvUmVhZCA9PSBCbG9iOjp0b0VuZE9mRmlsZSkKLSAgICAgICAgbV90b3RhbEJ5
dGVzVG9SZWFkID0gYmxvYi0+c2l6ZSgpIC0gYmxvYi0+c3RhcnQoKTsKLSNlbHNlCi0gICAgbV90
b3RhbCA9IGJsb2ItPnNpemUoKTsKLSNlbmRpZgotCisgICAgbV90b3RhbEJ5dGVzVG9SZWFkID0g
YmxvYi0+c2l6ZSgpOwogICAgIG1fY2xpZW50LT5kaWRHZXRTaXplKG1fdG90YWxCeXRlc1RvUmVh
ZCk7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9Gb3JtRGF0YUxpc3QuY3BwIGIvV2Vi
Q29yZS9odG1sL0Zvcm1EYXRhTGlzdC5jcHAKaW5kZXggMjgxYzlmZTQxOGUxYzQ4MzNiYjg3Zjgy
Zjc0ZjFjYzRkNzIyZDU3Yy4uMGY2MjU5NWVkNDFjMjMxOWJkYjc5YjU3YmJkN2NhOTQ2MjJiODJh
YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0Zvcm1EYXRhTGlzdC5jcHAKKysrIGIvV2ViQ29y
ZS9odG1sL0Zvcm1EYXRhTGlzdC5jcHAKQEAgLTI4LDY0ICsyOCwyMiBAQCBGb3JtRGF0YUxpc3Q6
OkZvcm1EYXRhTGlzdChjb25zdCBUZXh0RW5jb2RpbmcmIGMpCiB7CiB9CiAKLXZvaWQgRm9ybURh
dGFMaXN0OjphcHBlbmRTdHJpbmcoY29uc3QgQ1N0cmluZyYgcykKK3ZvaWQgRm9ybURhdGFMaXN0
OjphcHBlbmRTdHJpbmcoY29uc3QgU3RyaW5nJiBzKQogewotICAgIG1fbGlzdC5hcHBlbmQocyk7
CisgICAgbV9pdGVtcy5hcHBlbmQoU3RyaW5nQmxvYkl0ZW06OmNyZWF0ZShzLCBFbmRpbmdDUkxG
LCBtX2VuY29kaW5nKSk7CiB9CiAKLS8vIENoYW5nZSBwbGFpbiBDUiBhbmQgcGxhaW4gTEYgdG8g
Q1JMRiBwYWlycy4KLXN0YXRpYyBDU3RyaW5nIGZpeExpbmVCcmVha3MoY29uc3QgQ1N0cmluZyYg
cykKK3ZvaWQgRm9ybURhdGFMaXN0OjphcHBlbmRTdHJpbmcoY29uc3QgQ1N0cmluZyYgcykKIHsK
LSAgICAvLyBDb21wdXRlIHRoZSBsZW5ndGguCi0gICAgdW5zaWduZWQgbmV3TGVuID0gMDsKLSAg
ICBjb25zdCBjaGFyKiBwID0gcy5kYXRhKCk7Ci0gICAgd2hpbGUgKGNoYXIgYyA9ICpwKyspIHsK
LSAgICAgICAgaWYgKGMgPT0gJ1xyJykgewotICAgICAgICAgICAgLy8gU2FmZSB0byBsb29rIGFo
ZWFkIGJlY2F1c2Ugb2YgdHJhaWxpbmcgJ1wwJy4KLSAgICAgICAgICAgIGlmICgqcCAhPSAnXG4n
KSB7Ci0gICAgICAgICAgICAgICAgLy8gVHVybiBDUiBpbnRvIENSTEYuCi0gICAgICAgICAgICAg
ICAgbmV3TGVuICs9IDI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoYyA9PSAn
XG4nKSB7Ci0gICAgICAgICAgICAvLyBUdXJuIExGIGludG8gQ1JMRi4KLSAgICAgICAgICAgIG5l
d0xlbiArPSAyOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gTGVhdmUgb3RoZXIg
Y2hhcmFjdGVycyBhbG9uZS4KLSAgICAgICAgICAgIG5ld0xlbiArPSAxOwotICAgICAgICB9Ci0g
ICAgfQotICAgIGlmIChuZXdMZW4gPT0gcy5sZW5ndGgoKSkgewotICAgICAgICByZXR1cm4gczsK
LSAgICB9Ci0gICAgCi0gICAgLy8gTWFrZSBhIGNvcHkgb2YgdGhlIHN0cmluZy4KLSAgICBwID0g
cy5kYXRhKCk7Ci0gICAgY2hhciogcTsKLSAgICBDU3RyaW5nIHJlc3VsdCA9IENTdHJpbmc6Om5l
d1VuaW5pdGlhbGl6ZWQobmV3TGVuLCBxKTsKLSAgICB3aGlsZSAoY2hhciBjID0gKnArKykgewot
ICAgICAgICBpZiAoYyA9PSAnXHInKSB7Ci0gICAgICAgICAgICAvLyBTYWZlIHRvIGxvb2sgYWhl
YWQgYmVjYXVzZSBvZiB0cmFpbGluZyAnXDAnLgotICAgICAgICAgICAgaWYgKCpwICE9ICdcbicp
IHsKLSAgICAgICAgICAgICAgICAvLyBUdXJuIENSIGludG8gQ1JMRi4KLSAgICAgICAgICAgICAg
ICAqcSsrID0gJ1xyJzsKLSAgICAgICAgICAgICAgICAqcSsrID0gJ1xuJzsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfSBlbHNlIGlmIChjID09ICdcbicpIHsKLSAgICAgICAgICAgIC8vIFR1cm4g
TEYgaW50byBDUkxGLgotICAgICAgICAgICAgKnErKyA9ICdccic7Ci0gICAgICAgICAgICAqcSsr
ID0gJ1xuJzsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIExlYXZlIG90aGVyIGNo
YXJhY3RlcnMgYWxvbmUuCi0gICAgICAgICAgICAqcSsrID0gYzsKLSAgICAgICAgfQotICAgIH0K
LSAgICByZXR1cm4gcmVzdWx0OworICAgIG1faXRlbXMuYXBwZW5kKFN0cmluZ0Jsb2JJdGVtOjpj
cmVhdGUocykpOwogfQogCi12b2lkIEZvcm1EYXRhTGlzdDo6YXBwZW5kU3RyaW5nKGNvbnN0IFN0
cmluZyYgcykKK3ZvaWQgRm9ybURhdGFMaXN0OjphcHBlbmRCbG9iKGNvbnN0IFN0cmluZyYga2V5
LCBQYXNzUmVmUHRyPEJsb2I+IGJsb2IpCiB7Ci0gICAgQ1N0cmluZyBjc3RyID0gZml4TGluZUJy
ZWFrcyhtX2VuY29kaW5nLmVuY29kZShzLmNoYXJhY3RlcnMoKSwgcy5sZW5ndGgoKSwgRW50aXRp
ZXNGb3JVbmVuY29kYWJsZXMpKTsKLSAgICBtX2xpc3QuYXBwZW5kKGNzdHIpOworICAgIGFwcGVu
ZFN0cmluZyhrZXkpOworICAgIGNvbnN0IEJsb2JJdGVtTGlzdCYgaXRlbXMgPSBibG9iLT5pdGVt
cygpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyArK2kpCisgICAg
ICAgIG1faXRlbXMuYXBwZW5kKGl0ZW1zLmF0KGkpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9Gb3JtRGF0YUxpc3QuaCBiL1dlYkNvcmUvaHRtbC9Gb3Jt
RGF0YUxpc3QuaAppbmRleCA4ZWNmNjRlZTkzYWQ1MjRmNDc5MjFmMWQ4MjJmOWEwOGJhMDEzZDdj
Li5kMGIxMzA3NGY1ZDQzNjcwMzJlN2UxYzJjOTk2NTRmMjIyOTVhODVmIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2h0bWwvRm9ybURhdGFMaXN0LmgKKysrIGIvV2ViQ29yZS9odG1sL0Zvcm1EYXRhTGlz
dC5oCkBAIC00NiwyNyArNDYsOSBAQCBwdWJsaWM6CiAgICAgICAgIGFwcGVuZFN0cmluZyhrZXkp
OwogICAgICAgICBhcHBlbmRTdHJpbmcoU3RyaW5nOjpudW1iZXIodmFsdWUpKTsKICAgICB9Ci0g
ICAgdm9pZCBhcHBlbmRCbG9iKGNvbnN0IFN0cmluZyYga2V5LCBQYXNzUmVmUHRyPEJsb2I+IGJs
b2IpCi0gICAgewotICAgICAgICBhcHBlbmRTdHJpbmcoa2V5KTsKLSAgICAgICAgbV9saXN0LmFw
cGVuZChibG9iKTsKLSAgICB9Ci0KLSAgICBjbGFzcyBJdGVtIHsKLSAgICBwdWJsaWM6Ci0gICAg
ICAgIEl0ZW0oKSB7IH0KLSAgICAgICAgSXRlbShjb25zdCBXVEY6OkNTdHJpbmcmIGRhdGEpIDog
bV9kYXRhKGRhdGEpIHsgfQotICAgICAgICBJdGVtKFBhc3NSZWZQdHI8QmxvYj4gYmxvYikgOiBt
X2Jsb2IoYmxvYikgeyB9Ci0KLSAgICAgICAgY29uc3QgV1RGOjpDU3RyaW5nJiBkYXRhKCkgY29u
c3QgeyByZXR1cm4gbV9kYXRhOyB9Ci0gICAgICAgIEJsb2IqIGJsb2IoKSBjb25zdCB7IHJldHVy
biBtX2Jsb2IuZ2V0KCk7IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIFdURjo6Q1N0cmluZyBt
X2RhdGE7Ci0gICAgICAgIFJlZlB0cjxCbG9iPiBtX2Jsb2I7Ci0gICAgfTsKKyAgICB2b2lkIGFw
cGVuZEJsb2IoY29uc3QgU3RyaW5nJiBrZXksIFBhc3NSZWZQdHI8QmxvYj4gYmxvYik7CiAKLSAg
ICBjb25zdCBWZWN0b3I8SXRlbT4mIGxpc3QoKSBjb25zdCB7IHJldHVybiBtX2xpc3Q7IH0KKyAg
ICBjb25zdCBCbG9iSXRlbUxpc3QmIGl0ZW1zKCkgY29uc3QgeyByZXR1cm4gbV9pdGVtczsgfQog
ICAgIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcoKSBjb25zdCB7IHJldHVybiBtX2VuY29k
aW5nOyB9CiAKIHByaXZhdGU6CkBAIC03NCw3ICs1Niw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBh
cHBlbmRTdHJpbmcoY29uc3QgU3RyaW5nJik7CiAKICAgICBUZXh0RW5jb2RpbmcgbV9lbmNvZGlu
ZzsKLSAgICBWZWN0b3I8SXRlbT4gbV9saXN0OworICAgIEJsb2JJdGVtTGlzdCBtX2l0ZW1zOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hU
TUxGb3JtRWxlbWVudC5jcHAgYi9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAppbmRl
eCBjODQ0NTRkMTU5ZGJlY2E1YTRlMzViOTUyYWJlYWEzNDk5YmE1MWYzLi43Mzg1Y2UzNzg1MmMz
N2U1ZWMxNWI1MWQxNDg5YmZjMzkxOWYyZWEzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRN
TEZvcm1FbGVtZW50LmNwcAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcApA
QCAtMjEwLDcgKzIxMCw3IEBAIFBhc3NSZWZQdHI8Rm9ybURhdGE+IEhUTUxGb3JtRWxlbWVudDo6
Y3JlYXRlRm9ybURhdGEoKQogICAgICAgICAgICAgY29udHJvbC0+YXBwZW5kRm9ybURhdGEoKmRv
bUZvcm1EYXRhLCBtX2Zvcm1EYXRhQnVpbGRlci5pc011bHRpUGFydEZvcm0oKSk7CiAgICAgfQog
Ci0gICAgUmVmUHRyPEZvcm1EYXRhPiByZXN1bHQgPSAobV9mb3JtRGF0YUJ1aWxkZXIuaXNNdWx0
aVBhcnRGb3JtKCkpID8gRm9ybURhdGE6OmNyZWF0ZU11bHRpUGFydCgqZG9tRm9ybURhdGEsIGRv
Y3VtZW50KCkpIDogRm9ybURhdGE6OmNyZWF0ZSgqZG9tRm9ybURhdGEpOworICAgIFJlZlB0cjxG
b3JtRGF0YT4gcmVzdWx0ID0gKG1fZm9ybURhdGFCdWlsZGVyLmlzTXVsdGlQYXJ0Rm9ybSgpKSA/
IEZvcm1EYXRhOjpjcmVhdGVNdWx0aVBhcnQoZG9tRm9ybURhdGEtPml0ZW1zKCksIGRvbUZvcm1E
YXRhLT5lbmNvZGluZygpLCBkb2N1bWVudCgpKSA6IEZvcm1EYXRhOjpjcmVhdGUoZG9tRm9ybURh
dGEtPml0ZW1zKCksIGRvbUZvcm1EYXRhLT5lbmNvZGluZygpKTsKIAogICAgIHJlc3VsdC0+c2V0
SWRlbnRpZmllcihnZW5lcmF0ZUZvcm1EYXRhSWRlbnRpZmllcigpKTsKICAgICByZXR1cm4gcmVz
dWx0OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxQcm9ncmVzc0VsZW1lbnQuY3BwIGIv
V2ViQ29yZS9odG1sL0hUTUxQcm9ncmVzc0VsZW1lbnQuY3BwCmluZGV4IGQyNzVlYmZjZmY4ZDk3
YjkxNmQ1OWQyNGYyNDE5ZGE4YzUzNGFmMjkuLmY3ZTg2ZjNhOWFmZmVjZWRlYmI5M2I5MzUzNTBk
YWI4NTJhZWE2YzUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MUHJvZ3Jlc3NFbGVtZW50
LmNwcAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTFByb2dyZXNzRWxlbWVudC5jcHAKQEAgLTI0LDYg
KzI0LDcgQEAKIAogI2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMu
aCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiRm9ybURhdGFMaXN0Lmgi
CiAjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL0Jsb2JJdGVtLmNwcCBiL1dlYkNvcmUvcGxhdGZv
cm0vQmxvYkl0ZW0uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcyMzhjNjNlMTU2YTJhYTM5N2I4NjY1ZjU5ZGFm
N2JhNDY5YzBiZjUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL0Jsb2JJdGVt
LmNwcApAQCAtMCwwICsxLDMxOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkJs
b2JJdGVtLmgiCisKKyNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCisjaW5jbHVkZSAiVVVJRC5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiBFTkFCTEUoQkxPQl9TTElDRSkKK3N0YXRpYyBj
b25zdCBkb3VibGUgaW52YWxpZE1vZGlmaWNhdGlvblRpbWUgPSAwOworCitkb3VibGUgZ2V0Rmls
ZVNuYXBzaG90TW9kaWZpY2F0aW9uVGltZShjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgLy8g
RklYTUU6IHN5bmNocm9uaXplZCBmaWxlIGNhbGwKKyAgICB0aW1lX3QgbW9kaWZpY2F0aW9uVGlt
ZTsKKyAgICBpZiAoZ2V0RmlsZU1vZGlmaWNhdGlvblRpbWUocGF0aCwgbW9kaWZpY2F0aW9uVGlt
ZSkpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KG1vZGlmaWNhdGlvblRpbWUp
OworICAgIHJldHVybiBpbnZhbGlkTW9kaWZpY2F0aW9uVGltZTsKK30KKworUGFzc1JlZlB0cjxC
bG9iSXRlbT4gQmxvYkl0ZW06OnNsaWNlKGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0
aCkKK3sKKyAgICBBU1NFUlQoc3RhcnQgPj0gMCAmJiBsZW5ndGggPj0gMCk7CisgICAgQVNTRVJU
KHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oc3RhcnQpIDwgc2l6ZSgpKTsKKyAgICBp
ZiAoIXN0YXJ0ICYmIHNpemUoKSA8PSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KGxl
bmd0aCkpCisgICAgICAgIHJldHVybiB0aGlzOworICAgIGNvbnN0IEZpbGVCbG9iSXRlbSogZmls
ZUl0ZW0gPSB0b0ZpbGVCbG9iSXRlbSgpOworICAgIGlmIChmaWxlSXRlbSkgeworICAgICAgICBj
b25zdCBGaWxlUmFuZ2VCbG9iSXRlbSogZmlsZVJhbmdlSXRlbSA9IHRvRmlsZVJhbmdlQmxvYkl0
ZW0oKTsKKyAgICAgICAgaWYgKGZpbGVSYW5nZUl0ZW0pIHsKKyAgICAgICAgICAgIGlmIChzdGF0
aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KHN0YXJ0ICsgbGVuZ3RoKSA+IHNpemUoKSkKKyAg
ICAgICAgICAgICAgICBsZW5ndGggPSBzaXplKCkgLSBzdGFydDsKKyAgICAgICAgICAgIHN0YXJ0
ICs9IGZpbGVSYW5nZUl0ZW0tPnN0YXJ0KCk7CisgICAgICAgICAgICByZXR1cm4gRmlsZVJhbmdl
QmxvYkl0ZW06OmNyZWF0ZShmaWxlSXRlbS0+cGF0aCgpLCBzdGFydCwgbGVuZ3RoLCBmaWxlUmFu
Z2VJdGVtLT5zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUoKSk7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIEZpbGVSYW5nZUJsb2JJdGVtOjpjcmVhdGUoZmlsZUl0ZW0tPnBhdGgoKSwgc3RhcnQs
IGxlbmd0aCwgZ2V0RmlsZVNuYXBzaG90TW9kaWZpY2F0aW9uVGltZShmaWxlSXRlbS0+cGF0aCgp
KSk7CisgICAgfQorICAgIEFTU0VSVCh0b0RhdGFCbG9iSXRlbSgpKTsKKyAgICBpZiAoc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihzdGFydCArIGxlbmd0aCkgPiBzaXplKCkpCisgICAg
ICAgIGxlbmd0aCA9IHNpemUoKSAtIHN0YXJ0OworICAgIHJldHVybiBEYXRhUmFuZ2VCbG9iSXRl
bTo6Y3JlYXRlKHN0YXRpY19jYXN0PERhdGFSYW5nZUJsb2JJdGVtKj4odGhpcyksIHN0YXJ0LCBs
ZW5ndGgpOworfQorCisjZW5kaWYgLy8gRU5BQkxFKEJMT0JfU0xJQ0UpCisKKy8vIERhdGFCbG9i
SXRlbSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisKK2NoYXIqIERhdGFCbG9iSXRlbTo6cmVsZWFzZUJ1ZmZlcigpIGNvbnN0
Cit7CisgICAgLy8gTWFrZXMgYSBjb3B5IG9mIGl0cyBpbnRlcm5hbCBkYXRhIGFuZCBwYXNzIHRo
ZSBvd25lcnNoaXAgdG8gdGhlIGNhbGxlci4KKyAgICBWZWN0b3I8Y2hhcj4gdjsKKyAgICB2LmFw
cGVuZChkYXRhKCksIHN0YXRpY19jYXN0PHNpemVfdD4oc2l6ZSgpKSk7CisgICAgcmV0dXJuIHYu
cmVsZWFzZUJ1ZmZlcigpOworfQorCitib29sIERhdGFCbG9iSXRlbTo6ZXF1YWxzKGNvbnN0IEJs
b2JJdGVtKiBpdGVtKSBjb25zdAoreworICAgIGNvbnN0IERhdGFCbG9iSXRlbSogZGF0YUl0ZW0g
PSBpdGVtLT50b0RhdGFCbG9iSXRlbSgpOworICAgIHJldHVybiBkYXRhSXRlbSAmJiBkYXRhKCkg
PT0gZGF0YUl0ZW0tPmRhdGEoKSAmJiBzaXplKCkgPT0gZGF0YUl0ZW0tPnNpemUoKTsKK30KKwor
CisvLyBGaWxlQmxvYkl0ZW0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitQYXNzUmVmUHRyPEJsb2JJdGVtPiBGaWxlQmxv
Ykl0ZW06OmNyZWF0ZShjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgcmV0dXJuIGFkb3B0UmVm
KHN0YXRpY19jYXN0PEJsb2JJdGVtKj4obmV3IEZpbGVCbG9iSXRlbShwYXRoKSkpOworfQorCitG
aWxlQmxvYkl0ZW06OkZpbGVCbG9iSXRlbShjb25zdCBTdHJpbmcmIHBhdGgpCisgICAgOiBtX3Bh
dGgocGF0aCkKKyAgICAsIG1fZmlsZU5hbWUocGF0aEdldEZpbGVOYW1lKG1fcGF0aCkpCit7Cit9
CisKK3Vuc2lnbmVkIGxvbmcgbG9uZyBGaWxlQmxvYkl0ZW06OnNpemUoKSBjb25zdAoreworICAg
IC8vIEZJWE1FOiBzeW5jaHJvbml6ZWQgZmlsZSBjYWxsCisgICAgbG9uZyBsb25nIHNpemU7Cisg
ICAgaWYgKCFnZXRGaWxlU2l6ZShtX3BhdGgsIHNpemUpKQorICAgICAgICByZXR1cm4gMDsKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihzaXplKTsKK30KKworUGFz
c1JlZlB0cjxCbG9iSXRlbT4gRmlsZUJsb2JJdGVtOjpkZWVwQ29weSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIEZpbGVCbG9iSXRlbTo6Y3JlYXRlKG1fcGF0aCk7Cit9CisKK2Jvb2wgRmlsZUJsb2JJ
dGVtOjplcXVhbHMoY29uc3QgQmxvYkl0ZW0qIGl0ZW0pIGNvbnN0Cit7CisgICAgY29uc3QgRmls
ZUJsb2JJdGVtKiBmaWxlSXRlbSA9IGl0ZW0tPnRvRmlsZUJsb2JJdGVtKCk7CisgICAgcmV0dXJu
IGZpbGVJdGVtICYmIG1fcGF0aCA9PSBmaWxlSXRlbS0+bV9wYXRoOworfQorCisvLyBTdHJpbmdC
bG9iSXRlbSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorCitQYXNzUmVmUHRyPEJsb2JJdGVtPiBTdHJpbmdCbG9iSXRlbTo6Y3Jl
YXRlKGNvbnN0IFN0cmluZyYgdGV4dCwgRW5kaW5nVHlwZSBlbmRpbmcsIFRleHRFbmNvZGluZyBl
bmNvZGluZykKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoc3RhdGljX2Nhc3Q8QmxvYkl0ZW0qPihu
ZXcgU3RyaW5nQmxvYkl0ZW0odGV4dCwgZW5kaW5nLCBlbmNvZGluZykpKTsKK30KKworUGFzc1Jl
ZlB0cjxCbG9iSXRlbT4gU3RyaW5nQmxvYkl0ZW06OmNyZWF0ZShjb25zdCBDU3RyaW5nJiB0ZXh0
KQoreworICAgIHJldHVybiBhZG9wdFJlZihzdGF0aWNfY2FzdDxCbG9iSXRlbSo+KG5ldyBTdHJp
bmdCbG9iSXRlbSh0ZXh0KSkpOworfQorCisKK1N0cmluZ0Jsb2JJdGVtOjpTdHJpbmdCbG9iSXRl
bShjb25zdCBTdHJpbmcmIHRleHQsIEVuZGluZ1R5cGUgZW5kaW5nLCBUZXh0RW5jb2RpbmcgZW5j
b2RpbmcpCisgICAgOiBtX2RhdGEoU3RyaW5nQmxvYkl0ZW06OmNvbnZlcnRUb0NTdHJpbmcodGV4
dCwgZW5kaW5nLCBlbmNvZGluZykpCit7Cit9CisKK1N0cmluZ0Jsb2JJdGVtOjpTdHJpbmdCbG9i
SXRlbShjb25zdCBDU3RyaW5nJiB0ZXh0KQorICAgIDogbV9kYXRhKHRleHQpCit7Cit9CisKK1Bh
c3NSZWZQdHI8QmxvYkl0ZW0+IFN0cmluZ0Jsb2JJdGVtOjpkZWVwQ29weSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIFN0cmluZ0Jsb2JJdGVtOjpjcmVhdGUoQ1N0cmluZyhtX2RhdGEuZGF0YSgpLCBt
X2RhdGEubGVuZ3RoKCkpKTsKK30KKworYm9vbCBTdHJpbmdCbG9iSXRlbTo6ZXF1YWxzKGNvbnN0
IEJsb2JJdGVtKiBpdGVtKSBjb25zdAoreworICAgIGlmICghRGF0YUJsb2JJdGVtOjplcXVhbHMo
aXRlbSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjb25zdCBTdHJpbmdCbG9iSXRlbSog
c3RyaW5nSXRlbSA9IGl0ZW0tPnRvU3RyaW5nQmxvYkl0ZW0oKTsKKyAgICByZXR1cm4gc3RyaW5n
SXRlbSAmJiBkYXRhKCkgPT0gc3RyaW5nSXRlbS0+ZGF0YSgpICYmIHNpemUoKSA9PSBzdHJpbmdJ
dGVtLT5zaXplKCk7Cit9CisKK0NTdHJpbmcgU3RyaW5nQmxvYkl0ZW06OmNvbnZlcnRUb0NTdHJp
bmcoY29uc3QgU3RyaW5nJiB0ZXh0LCBFbmRpbmdUeXBlIGVuZGluZywgVGV4dEVuY29kaW5nIGVu
Y29kaW5nKQoreworICAgIENTdHJpbmcgZnJvbSA9IGVuY29kaW5nLmVuY29kZSh0ZXh0LmNoYXJh
Y3RlcnMoKSwgdGV4dC5sZW5ndGgoKSwgRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpOworICAgIENT
dHJpbmcgcmVzdWx0ID0gZnJvbTsKKworICAgIGlmIChlbmRpbmcgPT0gRW5kaW5nVHJhbnNwYXJl
bnQpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICBjb25zdCBjaGFyKiBlbmRpbmdDaGFy
cyA9IChlbmRpbmcgPT0gRW5kaW5nQ1JMRikgPyAiXHJcbiIgOiAoKGVuZGluZyA9PSBFbmRpbmdD
UikgPyAiXHIiIDogIlxuIik7CisKKyAgICBpbnQgZW5kaW5nTGVuZ3RoID0gKGVuZGluZyA9PSBF
bmRpbmdDUkxGKSA/IDIgOiAxOworICAgIGludCBuZWVkRml4ID0gMDsKKworICAgIC8vIENhbGN1
bGF0ZSB0aGUgZmluYWwgbGVuZ3RoLgorICAgIGludCBjYWxjdWxhdGVkTGVuZ3RoID0gZnJvbS5s
ZW5ndGgoKTsKKyAgICBjb25zdCBjaGFyKiBwID0gZnJvbS5kYXRhKCk7CisgICAgd2hpbGUgKGNo
YXIgYyA9ICpwKyspIHsKKyAgICAgICAgaWYgKGMgPT0gJ1xyJykgeworICAgICAgICAgICAgLy8g
U2FmZSB0byBsb29rIGFoZWFkIGJlY2F1c2Ugb2YgdHJhaWxpbmcgJ1wwJy4KKyAgICAgICAgICAg
IGlmICgqcCA9PSAnXG4nICYmIGVuZGluZyAhPSBFbmRpbmdDUkxGKSB7CisgICAgICAgICAgICAg
ICAgY2FsY3VsYXRlZExlbmd0aCArPSAoZW5kaW5nTGVuZ3RoIC0gMik7CisgICAgICAgICAgICAg
ICAgKytuZWVkRml4OworICAgICAgICAgICAgfSBlbHNlIGlmIChlbmRpbmcgIT0gRW5kaW5nQ1Ip
IHsKKyAgICAgICAgICAgICAgICBjYWxjdWxhdGVkTGVuZ3RoICs9IChlbmRpbmdMZW5ndGggLSAx
KTsKKyAgICAgICAgICAgICAgICArK25lZWRGaXg7CisgICAgICAgICAgICB9CisgICAgICAgIH0g
ZWxzZSBpZiAoYyA9PSAnXG4nICYmIGVuZGluZyAhPSBFbmRpbmdMRikgeworICAgICAgICAgICAg
Y2FsY3VsYXRlZExlbmd0aCArPSAoZW5kaW5nTGVuZ3RoIC0gMSk7CisgICAgICAgICAgICArK25l
ZWRGaXg7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIW5lZWRGaXgpCisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisKKyAgICAvLyBDb252ZXJ0IHRoZSBlbmRpbmdzIGFuZCBjcmVhdGUgYSBk
YXRhIGJ1ZmZlci4KKyAgICBwID0gZnJvbS5kYXRhKCk7CisgICAgY2hhciogcTsKKyAgICByZXN1
bHQgPSBDU3RyaW5nOjpuZXdVbmluaXRpYWxpemVkKGNhbGN1bGF0ZWRMZW5ndGgsIHEpOworICAg
IHdoaWxlIChjaGFyIGMgPSAqcCsrKSB7CisgICAgICAgIGlmIChjID09ICdccicpIHsKKyAgICAg
ICAgICAgIGlmICgqcCA9PSAnXG4nICYmIGVuZGluZyAhPSBFbmRpbmdDUkxGKSB7CisgICAgICAg
ICAgICAgICAgbWVtY3B5KHEsIGVuZGluZ0NoYXJzLCBlbmRpbmdMZW5ndGgpOworICAgICAgICAg
ICAgICAgIHEgKz0gZW5kaW5nTGVuZ3RoOworICAgICAgICAgICAgfSBlbHNlIGlmICgqcCAhPSAn
XG4nICYmIGVuZGluZyAhPSBFbmRpbmdDUikgeworICAgICAgICAgICAgICAgIG1lbWNweShxLCBl
bmRpbmdDaGFycywgZW5kaW5nTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBxICs9IGVuZGluZ0xl
bmd0aDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChjID09ICdcbicgJiYgZW5k
aW5nICE9IEVuZGluZ0xGKSB7CisgICAgICAgICAgICBtZW1jcHkocSwgZW5kaW5nQ2hhcnMsIGVu
ZGluZ0xlbmd0aCk7CisgICAgICAgICAgICBxICs9IGVuZGluZ0xlbmd0aDsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIC8vIExlYXZlIG90aGVyIGNoYXJhY3RlcnMgYWxvbmUuCisgICAg
ICAgICAgICAqcSsrID0gYzsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCisvLyBCeXRlc0FycmF5QmxvYkl0ZW0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitQYXNzUmVmUHRyPEJsb2JJdGVtPiBCeXRl
c0FycmF5QmxvYkl0ZW06OmNyZWF0ZShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3Qgc2l6ZSkKK3sK
KyAgICByZXR1cm4gYWRvcHRSZWYoc3RhdGljX2Nhc3Q8QmxvYkl0ZW0qPihuZXcgQnl0ZXNBcnJh
eUJsb2JJdGVtKGRhdGEsIHNpemUpKSk7Cit9CisKK0J5dGVzQXJyYXlCbG9iSXRlbTo6Qnl0ZXNB
cnJheUJsb2JJdGVtKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBzaXplKQoreworICAgIG1fYnl0
ZXNBcnJheS5hcHBlbmQoZGF0YSwgc2l6ZSk7Cit9CisKK1Bhc3NSZWZQdHI8QmxvYkl0ZW0+IEJ5
dGVzQXJyYXlCbG9iSXRlbTo6ZGVlcENvcHkoKSBjb25zdAoreworICAgIHJldHVybiBCeXRlc0Fy
cmF5QmxvYkl0ZW06OmNyZWF0ZShtX2J5dGVzQXJyYXkuZGF0YSgpLCBtX2J5dGVzQXJyYXkuc2l6
ZSgpKTsKK30KKworI2lmIEVOQUJMRShCTE9CX1NMSUNFKQorCisvLyBEYXRhUmFuZ2VCbG9iSXRl
bSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorCitQYXNzUmVmUHRyPEJsb2JJdGVtPiBEYXRhUmFuZ2VCbG9iSXRlbTo6Y3JlYXRlKFBh
c3NSZWZQdHI8RGF0YUJsb2JJdGVtPiBpdGVtLCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBs
ZW5ndGgpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKHN0YXRpY19jYXN0PEJsb2JJdGVtKj4obmV3
IERhdGFSYW5nZUJsb2JJdGVtKGl0ZW0sIHN0YXJ0LCBsZW5ndGgpKSk7Cit9CisKK0RhdGFSYW5n
ZUJsb2JJdGVtOjpEYXRhUmFuZ2VCbG9iSXRlbShQYXNzUmVmUHRyPERhdGFCbG9iSXRlbT4gaXRl
bSwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoKQorICAgIDogbV9sZW5ndGgobGVu
Z3RoKQoreworICAgIGNvbnN0IERhdGFSYW5nZUJsb2JJdGVtKiByYW5nZUl0ZW0gPSBtX2l0ZW0t
PnRvRGF0YVJhbmdlQmxvYkl0ZW0oKTsKKyAgICBpZiAocmFuZ2VJdGVtKSB7CisgICAgICAgIG1f
aXRlbSA9IHJhbmdlSXRlbS0+bV9pdGVtOworICAgICAgICBtX3N0YXJ0ID0gc3RhcnQgKyByYW5n
ZUl0ZW0tPm1fc3RhcnQ7CisgICAgICAgIEFTU0VSVCghbV9pdGVtLT50b0RhdGFSYW5nZUJsb2JJ
dGVtKCkpOworICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPiht
X3N0YXJ0ICsgbV9sZW5ndGgpIDw9IG1faXRlbS0+c2l6ZSgpKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBtX2l0ZW0gPSBpdGVtOworICAgICAgICBtX3N0YXJ0ID0gc3RhcnQ7CisgICAgfQorfQor
Citjb25zdCBjaGFyKiBEYXRhUmFuZ2VCbG9iSXRlbTo6ZGF0YSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1faXRlbS0+ZGF0YSgpICsgbV9zdGFydDsKK30KKworUGFzc1JlZlB0cjxCbG9iSXRlbT4g
RGF0YVJhbmdlQmxvYkl0ZW06OmRlZXBDb3B5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gRGF0YVJh
bmdlQmxvYkl0ZW06OmNyZWF0ZShzdGF0aWNfcG9pbnRlcl9jYXN0PERhdGFCbG9iSXRlbT4obV9p
dGVtLT5kZWVwQ29weSgpKSwgbV9zdGFydCwgbV9sZW5ndGgpOworfQorCitib29sIERhdGFSYW5n
ZUJsb2JJdGVtOjplcXVhbHMoY29uc3QgQmxvYkl0ZW0qIGl0ZW0pIGNvbnN0Cit7CisgICAgY29u
c3QgRGF0YVJhbmdlQmxvYkl0ZW0qIHJhbmdlSXRlbSA9IGl0ZW0tPnRvRGF0YVJhbmdlQmxvYkl0
ZW0oKTsKKyAgICByZXR1cm4gcmFuZ2VJdGVtICYmIG1fc3RhcnQgPT0gcmFuZ2VJdGVtLT5tX3N0
YXJ0ICYmIG1fbGVuZ3RoID09IHJhbmdlSXRlbS0+bV9sZW5ndGggJiYgbV9pdGVtLT5lcXVhbHMo
cmFuZ2VJdGVtLT5tX2l0ZW0uZ2V0KCkpOworfQorCisvLyBGaWxlUmFuZ2VCbG9iSXRlbSAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
CitQYXNzUmVmUHRyPEJsb2JJdGVtPiBGaWxlUmFuZ2VCbG9iSXRlbTo6Y3JlYXRlKGNvbnN0IFN0
cmluZyYgcGF0aCwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoLCBkb3VibGUgc25h
cHNob3RNb2RpZmljYXRpb25UaW1lKQoreworICAgIHJldHVybiBhZG9wdFJlZihzdGF0aWNfY2Fz
dDxCbG9iSXRlbSo+KG5ldyBGaWxlUmFuZ2VCbG9iSXRlbShwYXRoLCBzdGFydCwgbGVuZ3RoLCBz
bmFwc2hvdE1vZGlmaWNhdGlvblRpbWUpKSk7Cit9CisKK0ZpbGVSYW5nZUJsb2JJdGVtOjpGaWxl
UmFuZ2VCbG9iSXRlbShjb25zdCBTdHJpbmcmIHBhdGgsIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBs
b25nIGxlbmd0aCwgZG91YmxlIG1vZGlmaWNhdGlvblRpbWUpCisgICAgOiBGaWxlQmxvYkl0ZW0o
cGF0aCkKKyAgICAsIG1fc3RhcnQoc3RhcnQpCisgICAgLCBtX2xlbmd0aChsZW5ndGgpCisgICAg
LCBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZShtb2RpZmljYXRpb25UaW1lKQoreworICAgIG1f
dW5pcXVlTmFtZSA9ICJCbG9iIiArIGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKTsKKyAgICBt
X3VuaXF1ZU5hbWUucmVwbGFjZSgiLSIsICIiKTsgLy8gRm9yIHNhZnR5LCByZW1vdmUgJy0nIGZy
b20gdGhlIGZpbGVuYW1lIHNuY2Ugc29tZSBzZXJ2ZXJzIG1heSBub3QgbGlrZSBpdC4KK30KKwor
UGFzc1JlZlB0cjxCbG9iSXRlbT4gRmlsZVJhbmdlQmxvYkl0ZW06OmRlZXBDb3B5KCkgY29uc3QK
K3sKKyAgICByZXR1cm4gRmlsZVJhbmdlQmxvYkl0ZW06OmNyZWF0ZShwYXRoKCksIG1fc3RhcnQs
IG1fbGVuZ3RoLCBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZSk7Cit9CisKK2Jvb2wgRmlsZVJh
bmdlQmxvYkl0ZW06OmVxdWFscyhjb25zdCBCbG9iSXRlbSogaXRlbSkgY29uc3QKK3sKKyAgICBp
ZiAoIUZpbGVCbG9iSXRlbTo6ZXF1YWxzKGl0ZW0pKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgY29uc3QgRmlsZVJhbmdlQmxvYkl0ZW0qIHJhbmdlSXRlbSA9IGl0ZW0tPnRvRmlsZVJhbmdl
QmxvYkl0ZW0oKTsKKyAgICByZXR1cm4gcmFuZ2VJdGVtICYmIG1fc3RhcnQgPT0gcmFuZ2VJdGVt
LT5tX3N0YXJ0ICYmIG1fdW5pcXVlTmFtZSA9PSByYW5nZUl0ZW0tPm1fdW5pcXVlTmFtZSAmJiBt
X3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZSA9PSByYW5nZUl0ZW0tPm1fc25hcHNob3RNb2RpZmlj
YXRpb25UaW1lOworfQorCitib29sIEZpbGVSYW5nZUJsb2JJdGVtOjppc1ZhbGlkKCkgY29uc3QK
K3sKKyAgICBpZiAobV9zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUgPT0gaW52YWxpZE1vZGlmaWNh
dGlvblRpbWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gbV9zbmFwc2hvdE1v
ZGlmaWNhdGlvblRpbWUgPT0gZ2V0RmlsZVNuYXBzaG90TW9kaWZpY2F0aW9uVGltZShwYXRoKCkp
OworfQorCisjZW5kaWYgLy8gRU5BQkxFKEJMT0JfU0xJQ0UpCisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vQmxvYkl0ZW0uaCBiL1dlYkNvcmUv
cGxhdGZvcm0vQmxvYkl0ZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZmQ4ZmQ0OGNmM2Q3NmVmZmQ2YzQxMjM3
MjUzYmY5YjhkNzI5NzQ2Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9CbG9i
SXRlbS5oCkBAIC0wLDAgKzEsMjI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2ds
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisg
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQmxvYkl0ZW1faAorI2RlZmluZSBCbG9i
SXRlbV9oCisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlRleHRFbmNv
ZGluZy5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CisvLyBTdHJpbmcgZW5kaW5nIHR5cGVzLgorZW51bSBFbmRpbmdUeXBlIHsKKyAgICBFbmRpbmdU
cmFuc3BhcmVudCA9IDAsCisgICAgRW5kaW5nTEYsCisgICAgRW5kaW5nQ1IsCisgICAgRW5kaW5n
Q1JMRiwKK307CisKK2NsYXNzIEJ5dGVzQXJyYXlCbG9iSXRlbTsKK2NsYXNzIERhdGFCbG9iSXRl
bTsKK2NsYXNzIERhdGFSYW5nZUJsb2JJdGVtOworY2xhc3MgRmlsZUJsb2JJdGVtOworY2xhc3Mg
RmlsZVJhbmdlQmxvYkl0ZW07CitjbGFzcyBTdHJpbmdCbG9iSXRlbTsKKworLy8gQSBiYXNlIGlu
dGVyZmFjZSBmb3IgYWxsIGFyYml0cmFyeS1kYXRhLW9iamVjdCBjb21wb25lbnQgaXRlbXMuCisv
LyBUaGUgQmxvYkl0ZW0gYW5kIGl0cyBzdWJjbGFzc2VzIGFyZSBzdHJ1Y3R1cmVkIGxpa2UgdGhl
IGZvbGxvd2luZzoKKy8vICAgIEJsb2JJdGVtCisvLyAgICAgICB8CisvLyAgICAgICArLS0tLS0t
LT4gRGF0YUJsb2JJdGVtCisvLyAgICAgICB8ICAgICAgICAgICAgICB8CisvLyAgICAgICB8ICAg
ICAgICAgICAgICArLS0tLS0tLS0tPiBTdHJpbmdCbG9iSXRlbQorLy8gICAgICAgfCAgICAgICAg
ICAgICAgKy0tLS0tLS0tLT4gQnl0ZUFycmF5QmxvYkl0ZW0KKy8vICAgICAgIHwgICAgICAgICAg
ICAgICstLS0tLS0tLS0+IERhdGFSYW5nZUJsb2JJdGVtCisvLyAgICAgICB8CisvLyAgICAgICAr
LS0tLS0tLT4gRmlsZUJsb2JJdGVtCisvLyAgICAgICAgICAgICAgICAgICAgICB8CisvLyAgICAg
ICAgICAgICAgICAgICAgICArLS0tLS0tLS0tPiBGaWxlUmFuZ2VCbG9iSXRlbQorLy8KK2NsYXNz
IEJsb2JJdGVtIDogcHVibGljIFJlZkNvdW50ZWQ8QmxvYkl0ZW0+IHsKK3B1YmxpYzoKKyAgICB2
aXJ0dWFsIH5CbG9iSXRlbSgpIHsgfQorICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBsb25nIHNp
emUoKSBjb25zdCA9IDA7CisKKyAgICAvLyBSZXR1cm5zIGZhbHNlIGlmIHRoZSBkYXRhIGhhcyBi
ZWNvbWUgc3RhbGUgb3IgaW52YWxpZC4KKyAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0
IHsgcmV0dXJuIHRydWU7IH0KKworICAgIHZpcnR1YWwgY29uc3QgRGF0YUJsb2JJdGVtKiB0b0Rh
dGFCbG9iSXRlbSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IFN0cmlu
Z0Jsb2JJdGVtKiB0b1N0cmluZ0Jsb2JJdGVtKCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZp
cnR1YWwgY29uc3QgQnl0ZXNBcnJheUJsb2JJdGVtKiB0b0J5dGVzQXJyYXlCbG9iSXRlbSgpIGNv
bnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IEZpbGVCbG9iSXRlbSogdG9GaWxl
QmxvYkl0ZW0oKSBjb25zdCB7IHJldHVybiAwOyB9CisjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCisg
ICAgdmlydHVhbCBjb25zdCBEYXRhUmFuZ2VCbG9iSXRlbSogdG9EYXRhUmFuZ2VCbG9iSXRlbSgp
IGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IEZpbGVSYW5nZUJsb2JJdGVt
KiB0b0ZpbGVSYW5nZUJsb2JJdGVtKCkgY29uc3QgeyByZXR1cm4gMDsgfQorI2VuZGlmIC8vIEVO
QUJMRShCTE9CX1NMSUNFKQorCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEJsb2JJdGVtPiBkZWVw
Q29weSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZXF1YWxzKGNvbnN0IEJsb2JJdGVt
KikgY29uc3QgPSAwOworCitwcm90ZWN0ZWQ6CisgICAgQmxvYkl0ZW0oKSB7IH0KKworcHJpdmF0
ZToKKyAgICBmcmllbmQgY2xhc3MgQmxvYjsKKyNpZiBFTkFCTEUoQkxPQl9TTElDRSkKKyAgICAv
LyBObyBleHRlcm5hbCBtZXRob2RzIGV4Y2VwdCBmb3IgQmxvYjo6c2xpY2Ugc2hvdWxkIGNhbGwg
dGhpcy4KKyAgICBQYXNzUmVmUHRyPEJsb2JJdGVtPiBzbGljZShsb25nIGxvbmcgc3RhcnQsIGxv
bmcgbG9uZyBsZW5ndGgpOworI2VuZGlmIC8vIEVOQUJMRShCTE9CX1NMSUNFKQorfTsKKworLy8g
SW4gbW9zdCBjYXNlcyBCbG9iSXRlbSdzIGFyZSBoYW5kbGVkIGFzIGEgbGlzdCAoZS5nLiBpbiBC
bG9iLCBGb3JtRGF0YSkuCit0eXBlZGVmIFZlY3RvcjxSZWZQdHI8QmxvYkl0ZW0+ID4gQmxvYkl0
ZW1MaXN0OworCitjbGFzcyBEYXRhQmxvYkl0ZW0gOiBwdWJsaWMgQmxvYkl0ZW0geworcHVibGlj
OgorICAgIHZpcnR1YWwgY29uc3QgY2hhciogZGF0YSgpIGNvbnN0ID0gMDsKKyAgICBjaGFyKiBy
ZWxlYXNlQnVmZmVyKCkgY29uc3Q7CisKKyAgICAvLyBCbG9iSXRlbSBtZXRob2RzLgorICAgIHZp
cnR1YWwgY29uc3QgRGF0YUJsb2JJdGVtKiB0b0RhdGFCbG9iSXRlbSgpIGNvbnN0IHsgcmV0dXJu
IHRoaXM7IH0KKyAgICB2aXJ0dWFsIGJvb2wgZXF1YWxzKGNvbnN0IEJsb2JJdGVtKikgY29uc3Q7
Cit9OworCitjbGFzcyBGaWxlQmxvYkl0ZW0gOiBwdWJsaWMgQmxvYkl0ZW0geworcHVibGljOgor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJsb2JJdGVtPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBwYXRo
KTsKKyAgICB2aXJ0dWFsIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmls
ZU5hbWU7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IFN0cmluZyYgcGF0aCgpIGNvbnN0IHsgcmV0dXJu
IG1fcGF0aDsgfQorCisgICAgLy8gQmxvYkl0ZW0gbWV0aG9kcy4KKyAgICB2aXJ0dWFsIHVuc2ln
bmVkIGxvbmcgbG9uZyBzaXplKCkgY29uc3Q7CisgICAgdmlydHVhbCBjb25zdCBGaWxlQmxvYkl0
ZW0qIHRvRmlsZUJsb2JJdGVtKCkgY29uc3QgeyByZXR1cm4gdGhpczsgfQorICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxCbG9iSXRlbT4gZGVlcENvcHkoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wg
ZXF1YWxzKGNvbnN0IEJsb2JJdGVtKikgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICBGaWxlQmxv
Ykl0ZW0oY29uc3QgU3RyaW5nJiBwYXRoKTsKKyAgICBTdHJpbmcgbV9wYXRoOworICAgIFN0cmlu
ZyBtX2ZpbGVOYW1lOworfTsKKworY2xhc3MgU3RyaW5nQmxvYkl0ZW0gOiBwdWJsaWMgRGF0YUJs
b2JJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCbG9iSXRlbT4gY3JlYXRl
KGNvbnN0IFN0cmluZyYsIEVuZGluZ1R5cGUsIFRleHRFbmNvZGluZyk7CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8QmxvYkl0ZW0+IGNyZWF0ZShjb25zdCBDU3RyaW5nJik7CisgICAgY29uc3QgQ1N0
cmluZyYgY3N0cigpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsgfQorCisgICAgLy8gQmxvYkl0ZW0g
bWV0aG9kcy4KKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9kYXRhLmxlbmd0aCgpOyB9CisgICAgdmlydHVhbCBjb25zdCBTdHJpbmdCbG9iSXRl
bSogdG9TdHJpbmdCbG9iSXRlbSgpIGNvbnN0IHsgcmV0dXJuIHRoaXM7IH0KKyAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8QmxvYkl0ZW0+IGRlZXBDb3B5KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29s
IGVxdWFscyhjb25zdCBCbG9iSXRlbSopIGNvbnN0OworCisgICAgLy8gRGF0YUJsb2JJdGVtIG1l
dGhvZHMuCisgICAgdmlydHVhbCBjb25zdCBjaGFyKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9k
YXRhLmRhdGEoKTsgfQorCitwcml2YXRlOgorICAgIFN0cmluZ0Jsb2JJdGVtKGNvbnN0IFN0cmlu
ZyYsIEVuZGluZ1R5cGUsIFRleHRFbmNvZGluZyk7CisgICAgU3RyaW5nQmxvYkl0ZW0oY29uc3Qg
Q1N0cmluZyYpOworICAgIHN0YXRpYyBDU3RyaW5nIGNvbnZlcnRUb0NTdHJpbmcoY29uc3QgU3Ry
aW5nJiwgRW5kaW5nVHlwZSwgVGV4dEVuY29kaW5nKTsKKyAgICBDU3RyaW5nIG1fZGF0YTsKK307
CisKK2NsYXNzIEJ5dGVzQXJyYXlCbG9iSXRlbSA6IHB1YmxpYyBEYXRhQmxvYkl0ZW0geworcHVi
bGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJsb2JJdGVtPiBjcmVhdGUoY29uc3QgY2hhciog
ZGF0YSwgc2l6ZV90IHNpemUpOworCisgICAgLy8gQmxvYkl0ZW0gbWV0aG9kcy4KKyAgICB2aXJ0
dWFsIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlc0FycmF5
LnNpemUoKTsgfQorICAgIHZpcnR1YWwgY29uc3QgQnl0ZXNBcnJheUJsb2JJdGVtKiB0b0J5dGVz
QXJyYXlCbG9iSXRlbSgpIGNvbnN0IHsgcmV0dXJuIHRoaXM7IH0KKyAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8QmxvYkl0ZW0+IGRlZXBDb3B5KCkgY29uc3Q7CisKKyAgICAvLyBEYXRhQmxvYkl0ZW0g
bWV0aG9kcy4KKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGRhdGEoKSBjb25zdCB7IHJldHVybiBt
X2J5dGVzQXJyYXkuZGF0YSgpOyB9CisKK3ByaXZhdGU6CisgICAgQnl0ZXNBcnJheUJsb2JJdGVt
KGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBzaXplKTsKKyAgICBWZWN0b3I8Y2hhcj4gbV9ieXRl
c0FycmF5OworfTsKKworI2lmIEVOQUJMRShCTE9CX1NMSUNFKQorCisvLyBCbG9iSXRlbSBjbGFz
cyBmb3Igc2xpY2VkIGRhdGEgKHN0cmluZyBvciBieXRlcy1hcnJheSkuCitjbGFzcyBEYXRhUmFu
Z2VCbG9iSXRlbSA6IHB1YmxpYyBEYXRhQmxvYkl0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEJsb2JJdGVtPiBjcmVhdGUoUGFzc1JlZlB0cjxEYXRhQmxvYkl0ZW0+LCBsb25n
IGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgpOworCisgICAgLy8gQmxvYkl0ZW0gbWV0aG9k
cy4KKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplKCkgY29uc3QgeyByZXR1cm4g
bV9sZW5ndGg7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IERhdGFSYW5nZUJsb2JJdGVtKiB0b0RhdGFS
YW5nZUJsb2JJdGVtKCkgY29uc3QgeyByZXR1cm4gdGhpczsgfQorICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxCbG9iSXRlbT4gZGVlcENvcHkoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZXF1YWxz
KGNvbnN0IEJsb2JJdGVtKikgY29uc3Q7CisKKyAgICAvLyBEYXRhQmxvYkl0ZW0gbWV0aG9kcy4K
KyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGRhdGEoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBE
YXRhUmFuZ2VCbG9iSXRlbShQYXNzUmVmUHRyPERhdGFCbG9iSXRlbT4gaXRlbSwgbG9uZyBsb25n
IHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoKTsKKyAgICBSZWZQdHI8RGF0YUJsb2JJdGVtPiBtX2l0
ZW07CisgICAgbG9uZyBsb25nIG1fc3RhcnQ7CisgICAgbG9uZyBsb25nIG1fbGVuZ3RoOworfTsK
KworY2xhc3MgRmlsZVJhbmdlQmxvYkl0ZW0gOiBwdWJsaWMgRmlsZUJsb2JJdGVtIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCbG9iSXRlbT4gY3JlYXRlKGNvbnN0IFN0cmluZyYg
cGF0aCwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoLCBkb3VibGUgc25hcHNob3RN
b2RpZmljYXRpb25UaW1lKTsKKyAgICBsb25nIGxvbmcgc3RhcnQoKSBjb25zdCB7IHJldHVybiBt
X3N0YXJ0OyB9CisgICAgZG91YmxlIHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc25hcHNob3RNb2RpZmljYXRpb25UaW1lOyB9CisKKyAgICAvLyBCbG9iSXRlbSBt
ZXRob2RzLgorICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBsb25nIHNpemUoKSBjb25zdCB7IHJl
dHVybiBtX2xlbmd0aDsgfQorICAgIHZpcnR1YWwgY29uc3QgRmlsZVJhbmdlQmxvYkl0ZW0qIHRv
RmlsZVJhbmdlQmxvYkl0ZW0oKSBjb25zdCB7IHJldHVybiB0aGlzOyB9CisgICAgdmlydHVhbCBi
b29sIGlzVmFsaWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8QmxvYkl0ZW0+IGRl
ZXBDb3B5KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGVxdWFscyhjb25zdCBCbG9iSXRlbSop
IGNvbnN0OworCisgICAgLy8gRmlsZUJsb2JJdGVtIG1ldGhvZHMuCisgICAgdmlydHVhbCBjb25z
dCBTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX3VuaXF1ZU5hbWU7IH0KKworcHJpdmF0
ZToKKyAgICBGaWxlUmFuZ2VCbG9iSXRlbShjb25zdCBTdHJpbmcmIHBhdGgsIGxvbmcgbG9uZyBz
dGFydCwgbG9uZyBsb25nIGxlbmd0aCwgZG91YmxlIHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSk7
CisgICAgbG9uZyBsb25nIG1fc3RhcnQ7CisgICAgbG9uZyBsb25nIG1fbGVuZ3RoOworICAgIFN0
cmluZyBtX3VuaXF1ZU5hbWU7CisKKyAgICBkb3VibGUgbV9zbmFwc2hvdE1vZGlmaWNhdGlvblRp
bWU7Cit9OworCisjZW5kaWYgLy8gRU5BQkxFKEJMT0JfU0xJQ0UpCisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIEJsb2JJdGVtX2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9y
bURhdGEuY3BwCmluZGV4IDkxODAwMmFlZmQ4MWE2ODkxZjlmMTliYWY0NGQ3NTU5MWZkZmE0ODQu
LjY1MzYzOWZhYTczZWU2NjJkMWViYThjZGUwMGIwOTBlZWMwMDkzNWYgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL0Zvcm1EYXRhLmNwcApAQCAtMTksMjMgKzE5LDQ2IEBACiAgKi8KIAogI2luY2x1
ZGUgImNvbmZpZy5oIgorCiAjaW5jbHVkZSAiRm9ybURhdGEuaCIKIAotI2luY2x1ZGUgIkJsb2Iu
aCIKKyNpbmNsdWRlICJCbG9iSXRlbS5oIgogI2luY2x1ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUg
IkNocm9tZUNsaWVudC5oIgotI2luY2x1ZGUgIkRPTUZvcm1EYXRhLmgiCiAjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKLSNpbmNsdWRlICJGaWxlLmgiCiAjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgogI2lu
Y2x1ZGUgIkZvcm1EYXRhQnVpbGRlci5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIK
ICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCi0jaW5jbHVkZSAi
VVVJRC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyNpZiBFTkFCTEUoQkxPQl9TTElDRSkK
K2NvbnN0IGxvbmcgbG9uZyBGb3JtRGF0YUVsZW1lbnQ6OnRvRW5kT2ZGaWxlID0gLTE7CisjZW5k
aWYKKworRm9ybURhdGFFbGVtZW50OjpGb3JtRGF0YUVsZW1lbnQoUGFzc1JlZlB0cjxCbG9iSXRl
bT4gYmxvYkl0ZW0sIGJvb2wgc2hvdWxkR2VuZXJhdGVGaWxlKQorICAgIDogbV9pdGVtKGJsb2JJ
dGVtKQorICAgICwgbV90eXBlKG1faXRlbS0+dG9GaWxlQmxvYkl0ZW0oKSA/IGVuY29kZWRGaWxl
IDogZGF0YSkKKyAgICAsIG1fZGF0YShtX2l0ZW0tPnRvRGF0YUJsb2JJdGVtKCkpCisgICAgLCBt
X2ZpbGVuYW1lKG1faXRlbS0+dG9GaWxlQmxvYkl0ZW0oKSA/IG1faXRlbS0+dG9GaWxlQmxvYkl0
ZW0oKS0+cGF0aCgpIDogU3RyaW5nKCkpCisgICAgLCBtX3Nob3VsZEdlbmVyYXRlRmlsZShzaG91
bGRHZW5lcmF0ZUZpbGUpCit7CisjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCisgICAgY29uc3QgRmls
ZVJhbmdlQmxvYkl0ZW0qIHJhbmdlID0gbV9pdGVtLT50b0ZpbGVSYW5nZUJsb2JJdGVtKCk7Cisg
ICAgaWYgKHJhbmdlKSB7CisgICAgICAgIG1fZmlsZVN0YXJ0ID0gcmFuZ2UtPnN0YXJ0KCk7Cisg
ICAgICAgIG1fZmlsZUxlbmd0aCA9IHJhbmdlLT5zaXplKCk7CisgICAgICAgIG1fZXhwZWN0ZWRG
aWxlTW9kaWZpY2F0aW9uVGltZSA9IHJhbmdlLT5zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUoKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBtX2ZpbGVTdGFydCA9IDA7CisgICAgICAgIG1fZmlsZUxl
bmd0aCA9IHRvRW5kT2ZGaWxlOworICAgICAgICBtX2V4cGVjdGVkRmlsZU1vZGlmaWNhdGlvblRp
bWUgPSAwOworICAgIH0KKyNlbmRpZgorfQorCiBpbmxpbmUgRm9ybURhdGE6OkZvcm1EYXRhKCkK
ICAgICA6IG1faWRlbnRpZmllcigwKQogICAgICwgbV9oYXNHZW5lcmF0ZWRGaWxlcyhmYWxzZSkK
QEAgLTg1LDcgKzEwOCw3IEBAIFBhc3NSZWZQdHI8Rm9ybURhdGE+IEZvcm1EYXRhOjpjcmVhdGUo
Y29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IHNpemUpCiBQYXNzUmVmUHRyPEZvcm1EYXRhPiBGb3Jt
RGF0YTo6Y3JlYXRlKGNvbnN0IENTdHJpbmcmIHN0cmluZykKIHsKICAgICBSZWZQdHI8Rm9ybURh
dGE+IHJlc3VsdCA9IGNyZWF0ZSgpOwotICAgIHJlc3VsdC0+YXBwZW5kRGF0YShzdHJpbmcuZGF0
YSgpLCBzdHJpbmcubGVuZ3RoKCkpOworICAgIHJlc3VsdC0+YXBwZW5kU3RyaW5nKHN0cmluZyk7
CiAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiB9CiAKQEAgLTk2LDE3ICsxMTksMTcgQEAg
UGFzc1JlZlB0cjxGb3JtRGF0YT4gRm9ybURhdGE6OmNyZWF0ZShjb25zdCBWZWN0b3I8Y2hhcj4m
IHZlY3RvcikKICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0KIAotUGFzc1JlZlB0cjxG
b3JtRGF0YT4gRm9ybURhdGE6OmNyZWF0ZShjb25zdCBET01Gb3JtRGF0YSYgZG9tRm9ybURhdGEp
CitQYXNzUmVmUHRyPEZvcm1EYXRhPiBGb3JtRGF0YTo6Y3JlYXRlKGNvbnN0IEJsb2JJdGVtTGlz
dCYgaXRlbXMsIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcpCiB7CiAgICAgUmVmUHRyPEZv
cm1EYXRhPiByZXN1bHQgPSBjcmVhdGUoKTsKLSAgICByZXN1bHQtPmFwcGVuZERPTUZvcm1EYXRh
KGRvbUZvcm1EYXRhLCBmYWxzZSwgMCk7CisgICAgcmVzdWx0LT5hcHBlbmRJdGVtcyhpdGVtcywg
ZW5jb2RpbmcsIGZhbHNlLCAwKTsKICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0KIAot
UGFzc1JlZlB0cjxGb3JtRGF0YT4gRm9ybURhdGE6OmNyZWF0ZU11bHRpUGFydChjb25zdCBET01G
b3JtRGF0YSYgZG9tRm9ybURhdGEsIERvY3VtZW50KiBkb2N1bWVudCkKK1Bhc3NSZWZQdHI8Rm9y
bURhdGE+IEZvcm1EYXRhOjpjcmVhdGVNdWx0aVBhcnQoY29uc3QgQmxvYkl0ZW1MaXN0JiBpdGVt
cywgY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZywgRG9jdW1lbnQqIGRvY3VtZW50KQogewog
ICAgIFJlZlB0cjxGb3JtRGF0YT4gcmVzdWx0ID0gY3JlYXRlKCk7Ci0gICAgcmVzdWx0LT5hcHBl
bmRET01Gb3JtRGF0YShkb21Gb3JtRGF0YSwgdHJ1ZSwgZG9jdW1lbnQpOworICAgIHJlc3VsdC0+
YXBwZW5kSXRlbXMoaXRlbXMsIGVuY29kaW5nLCB0cnVlLCBkb2N1bWVudCk7CiAgICAgcmV0dXJu
IHJlc3VsdC5yZWxlYXNlKCk7CiB9CiAKQEAgLTEyNSw4NCArMTQ4LDY4IEBAIFBhc3NSZWZQdHI8
Rm9ybURhdGE+IEZvcm1EYXRhOjpkZWVwQ29weSgpIGNvbnN0CiAgICAgZm9ybURhdGEtPm1fZWxl
bWVudHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShuKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG47ICsraSkgewogICAgICAgICBjb25zdCBGb3JtRGF0YUVsZW1lbnQmIGUgPSBtX2VsZW1l
bnRzW2ldOwotICAgICAgICBzd2l0Y2ggKGUubV90eXBlKSB7Ci0gICAgICAgIGNhc2UgRm9ybURh
dGFFbGVtZW50OjpkYXRhOgotICAgICAgICAgICAgZm9ybURhdGEtPm1fZWxlbWVudHMuYXBwZW5k
KEZvcm1EYXRhRWxlbWVudChlLm1fZGF0YSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgRm9ybURhdGFFbGVtZW50OjplbmNvZGVkRmlsZToKLSNpZiBFTkFCTEUoQkxPQl9TTElD
RSkKLSAgICAgICAgICAgIGZvcm1EYXRhLT5tX2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVsZW1l
bnQoZS5tX2ZpbGVuYW1lLCBlLm1fZmlsZVN0YXJ0LCBlLm1fZmlsZUxlbmd0aCwgZS5tX2V4cGVj
dGVkRmlsZU1vZGlmaWNhdGlvblRpbWUsIGUubV9zaG91bGRHZW5lcmF0ZUZpbGUpKTsKLSNlbHNl
Ci0gICAgICAgICAgICBmb3JtRGF0YS0+bV9lbGVtZW50cy5hcHBlbmQoRm9ybURhdGFFbGVtZW50
KGUubV9maWxlbmFtZSwgZS5tX3Nob3VsZEdlbmVyYXRlRmlsZSkpOwotI2VuZGlmCi0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQorICAgICAgICBmb3JtRGF0YS0+bV9lbGVtZW50cy5hcHBl
bmQoRm9ybURhdGFFbGVtZW50KGUuaXRlbSgpLT5kZWVwQ29weSgpLCBlLm1fc2hvdWxkR2VuZXJh
dGVGaWxlKSk7CiAgICAgfQogICAgIHJldHVybiBmb3JtRGF0YS5yZWxlYXNlKCk7CiB9CiAKIHZv
aWQgRm9ybURhdGE6OmFwcGVuZERhdGEoY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IHNpemUpCiB7
Ci0gICAgaWYgKG1fZWxlbWVudHMuaXNFbXB0eSgpIHx8IG1fZWxlbWVudHMubGFzdCgpLm1fdHlw
ZSAhPSBGb3JtRGF0YUVsZW1lbnQ6OmRhdGEpCi0gICAgICAgIG1fZWxlbWVudHMuYXBwZW5kKEZv
cm1EYXRhRWxlbWVudCgpKTsKLSAgICBGb3JtRGF0YUVsZW1lbnQmIGUgPSBtX2VsZW1lbnRzLmxh
c3QoKTsKLSAgICBzaXplX3Qgb2xkU2l6ZSA9IGUubV9kYXRhLnNpemUoKTsKLSAgICBlLm1fZGF0
YS5ncm93KG9sZFNpemUgKyBzaXplKTsKLSAgICBtZW1jcHkoZS5tX2RhdGEuZGF0YSgpICsgb2xk
U2l6ZSwgZGF0YSwgc2l6ZSk7CisgICAgbV9lbGVtZW50cy5hcHBlbmQoRm9ybURhdGFFbGVtZW50
KEJ5dGVzQXJyYXlCbG9iSXRlbTo6Y3JlYXRlKHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihkYXRh
KSwgc2l6ZSkpKTsKK30KKwordm9pZCBGb3JtRGF0YTo6YXBwZW5kU3RyaW5nKGNvbnN0IENTdHJp
bmcmIHN0cmluZykKK3sKKyAgICBtX2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVsZW1lbnQoU3Ry
aW5nQmxvYkl0ZW06OmNyZWF0ZShzdHJpbmcpKSk7CiB9CiAKIHZvaWQgRm9ybURhdGE6OmFwcGVu
ZEZpbGUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgYm9vbCBzaG91bGRHZW5lcmF0ZUZpbGUpCiB7
Ci0jaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgbV9lbGVtZW50cy5hcHBlbmQoRm9ybURhdGFF
bGVtZW50KGZpbGVuYW1lLCAwLCBCbG9iOjp0b0VuZE9mRmlsZSwgQmxvYjo6ZG9Ob3RDaGVja0Zp
bGVDaGFuZ2UsIHNob3VsZEdlbmVyYXRlRmlsZSkpOwotI2Vsc2UKLSAgICBtX2VsZW1lbnRzLmFw
cGVuZChGb3JtRGF0YUVsZW1lbnQoZmlsZW5hbWUsIHNob3VsZEdlbmVyYXRlRmlsZSkpOwotI2Vu
ZGlmCisgICAgbV9lbGVtZW50cy5hcHBlbmQoRm9ybURhdGFFbGVtZW50KEZpbGVCbG9iSXRlbTo6
Y3JlYXRlKGZpbGVuYW1lKSwgc2hvdWxkR2VuZXJhdGVGaWxlKSk7Cit9CisKK3ZvaWQgRm9ybURh
dGE6OmFwcGVuZEJsb2JJdGVtTGlzdChjb25zdCBCbG9iSXRlbUxpc3QmIGxpc3QpCit7CisgICAg
Zm9yIChCbG9iSXRlbUxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIobGlzdC5iZWdpbigpKTsgaXRl
ciAhPSBsaXN0LmVuZCgpOyArK2l0ZXIpCisgICAgICAgIG1fZWxlbWVudHMuYXBwZW5kKCppdGVy
KTsKIH0KIAogI2lmIEVOQUJMRShCTE9CX1NMSUNFKQogdm9pZCBGb3JtRGF0YTo6YXBwZW5kRmls
ZVJhbmdlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25n
IGxlbmd0aCwgZG91YmxlIGV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZSwgYm9vbCBzaG91bGRHZW5l
cmF0ZUZpbGUpCiB7Ci0gICAgbV9lbGVtZW50cy5hcHBlbmQoRm9ybURhdGFFbGVtZW50KGZpbGVu
YW1lLCBzdGFydCwgbGVuZ3RoLCBleHBlY3RlZE1vZGlmaWNhdGlvblRpbWUsIHNob3VsZEdlbmVy
YXRlRmlsZSkpOworICAgIGlmIChsZW5ndGggPT0gRm9ybURhdGFFbGVtZW50Ojp0b0VuZE9mRmls
ZSkgeworICAgICAgICBBU1NFUlQoIXN0YXJ0KTsKKyAgICAgICAgQVNTRVJUKCFleHBlY3RlZE1v
ZGlmaWNhdGlvblRpbWUpOworICAgICAgICBtX2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVsZW1l
bnQoRmlsZUJsb2JJdGVtOjpjcmVhdGUoZmlsZW5hbWUpLCBzaG91bGRHZW5lcmF0ZUZpbGUpKTsK
KyAgICB9IGVsc2UKKyAgICAgICAgbV9lbGVtZW50cy5hcHBlbmQoRm9ybURhdGFFbGVtZW50KEZp
bGVSYW5nZUJsb2JJdGVtOjpjcmVhdGUoZmlsZW5hbWUsIHN0YXJ0LCBsZW5ndGgsIGV4cGVjdGVk
TW9kaWZpY2F0aW9uVGltZSksIHNob3VsZEdlbmVyYXRlRmlsZSkpOwogfQogI2VuZGlmCiAKLXZv
aWQgRm9ybURhdGE6OmFwcGVuZERPTUZvcm1EYXRhKGNvbnN0IERPTUZvcm1EYXRhJiBkb21Gb3Jt
RGF0YSwgYm9vbCBpc011bHRpUGFydEZvcm0sIERvY3VtZW50KiBkb2N1bWVudCkKK3ZvaWQgRm9y
bURhdGE6OmFwcGVuZEl0ZW1zKGNvbnN0IEJsb2JJdGVtTGlzdCYgaXRlbXMsIGNvbnN0IFRleHRF
bmNvZGluZyYgZW5jb2RpbmcsIGJvb2wgaXNNdWx0aVBhcnRGb3JtLCBEb2N1bWVudCogZG9jdW1l
bnQpCiB7CiAgICAgRm9ybURhdGFCdWlsZGVyIGZvcm1EYXRhQnVpbGRlcjsKICAgICBpZiAoaXNN
dWx0aVBhcnRGb3JtKQogICAgICAgICBtX2JvdW5kYXJ5ID0gZm9ybURhdGFCdWlsZGVyLmdlbmVy
YXRlVW5pcXVlQm91bmRhcnlTdHJpbmcoKTsKIAogICAgIFZlY3RvcjxjaGFyPiBlbmNvZGVkRGF0
YTsKLSAgICBUZXh0RW5jb2RpbmcgZW5jb2RpbmcgPSBkb21Gb3JtRGF0YS5lbmNvZGluZygpOwog
Ci0gICAgY29uc3QgVmVjdG9yPEZvcm1EYXRhTGlzdDo6SXRlbT4mIGxpc3QgPSBkb21Gb3JtRGF0
YS5saXN0KCk7Ci0gICAgc2l6ZV90IGZvcm1EYXRhTGlzdFNpemUgPSBsaXN0LnNpemUoKTsKKyAg
ICBzaXplX3QgZm9ybURhdGFMaXN0U2l6ZSA9IGl0ZW1zLnNpemUoKTsKICAgICBBU1NFUlQoIShm
b3JtRGF0YUxpc3RTaXplICUgMikpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZm9ybURh
dGFMaXN0U2l6ZTsgaSArPSAyKSB7Ci0gICAgICAgIGNvbnN0IEZvcm1EYXRhTGlzdDo6SXRlbSYg
a2V5ID0gbGlzdFtpXTsKLSAgICAgICAgY29uc3QgRm9ybURhdGFMaXN0OjpJdGVtJiB2YWx1ZSA9
IGxpc3RbaSArIDFdOworICAgICAgICBjb25zdCBTdHJpbmdCbG9iSXRlbSoga2V5ID0gaXRlbXNb
aV0tPnRvU3RyaW5nQmxvYkl0ZW0oKTsKKyAgICAgICAgY29uc3QgUmVmUHRyPEJsb2JJdGVtPiB2
YWx1ZSA9IGl0ZW1zW2kgKyAxXTsKKyAgICAgICAgQVNTRVJUKGtleSk7CiAgICAgICAgIGlmIChp
c011bHRpUGFydEZvcm0pIHsKICAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBoZWFkZXI7Ci0gICAg
ICAgICAgICBmb3JtRGF0YUJ1aWxkZXIuYmVnaW5NdWx0aVBhcnRIZWFkZXIoaGVhZGVyLCBtX2Jv
dW5kYXJ5LmRhdGEoKSwga2V5LmRhdGEoKSk7CisgICAgICAgICAgICBmb3JtRGF0YUJ1aWxkZXIu
YmVnaW5NdWx0aVBhcnRIZWFkZXIoaGVhZGVyLCBtX2JvdW5kYXJ5LmRhdGEoKSwga2V5LT5jc3Ry
KCkpOwogCiAgICAgICAgICAgICBib29sIHNob3VsZEdlbmVyYXRlRmlsZSA9IGZhbHNlOwogICAg
ICAgICAgICAgLy8gSWYgdGhlIGN1cnJlbnQgdHlwZSBpcyBGSUxFLCB0aGVuIHdlIGFsc28gbmVl
ZCB0byBpbmNsdWRlIHRoZSBmaWxlbmFtZQotICAgICAgICAgICAgaWYgKHZhbHVlLmJsb2IoKSkg
ewotICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgcGF0aCA9IHZhbHVlLmJsb2IoKS0+cGF0
aCgpOwotI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgICAgICAgICAgICAgIFN0cmluZyBmaWxl
TmFtZTsKLSAgICAgICAgICAgICAgICBpZiAodmFsdWUuYmxvYigpLT5pc0ZpbGUoKSkKLSAgICAg
ICAgICAgICAgICAgICAgZmlsZU5hbWUgPSBzdGF0aWNfY2FzdDxGaWxlKj4odmFsdWUuYmxvYigp
KS0+ZmlsZU5hbWUoKTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgLy8gSWYgYSBibG9iIGlzIHNsaWNlZCBmcm9tIGEgZmlsZSwgaXQgZG9lcyBub3QgaGF2ZSB0
aGUgZmlsZW5hbWUuIEluIHRoaXMgY2FzZSwgbGV0J3MgcHJvZHVjZSBhIHVuaXF1ZSBmaWxlbmFt
ZS4KLSAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWUgPSAiQmxvYiIgKyBjcmVhdGVDYW5vbmlj
YWxVVUlEU3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lLnJlcGxhY2UoIi0i
LCAiIik7IC8vIEZvciBzYWZ0eSwgcmVtb3ZlICctJyBmcm9tIHRoZSBmaWxlbmFtZSBzbmNlIHNv
bWUgc2VydmVycyBtYXkgbm90IGxpa2UgaXQuCi0gICAgICAgICAgICAgICAgfQotI2Vsc2UKLSAg
ICAgICAgICAgICAgICBBU1NFUlQodmFsdWUuYmxvYigpLT5pc0ZpbGUoKSk7Ci0gICAgICAgICAg
ICAgICAgU3RyaW5nIGZpbGVOYW1lID0gc3RhdGljX2Nhc3Q8RmlsZSo+KHZhbHVlLmJsb2IoKSkt
PmZpbGVOYW1lKCk7Ci0jZW5kaWYKKyAgICAgICAgICAgIGNvbnN0IEZpbGVCbG9iSXRlbSogZmls
ZSA9IHZhbHVlLT50b0ZpbGVCbG9iSXRlbSgpOworICAgICAgICAgICAgaWYgKGZpbGUpIHsKKyAg
ICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHBhdGggPSBmaWxlLT5wYXRoKCk7CisgICAgICAg
ICAgICAgICAgU3RyaW5nIGZpbGVOYW1lID0gZmlsZS0+bmFtZSgpOwogCiAgICAgICAgICAgICAg
ICAgLy8gTGV0IHRoZSBhcHBsaWNhdGlvbiBzcGVjaWZ5IGEgZmlsZW5hbWUgaWYgaXQncyBnb2lu
ZyB0byBnZW5lcmF0ZSBhIHJlcGxhY2VtZW50IGZpbGUgZm9yIHRoZSB1cGxvYWQuCiAgICAgICAg
ICAgICAgICAgaWYgKCFwYXRoLmlzRW1wdHkoKSkgewpAQCAtMjE3LDkgKzIyNCw5IEBAIHZvaWQg
Rm9ybURhdGE6OmFwcGVuZERPTUZvcm1EYXRhKGNvbnN0IERPTUZvcm1EYXRhJiBkb21Gb3JtRGF0
YSwgYm9vbCBpc011bHRpUGFyCiAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBpbmNsdWRl
IHRoZSBmaWxlbmFtZT0iLi4iIHBhcnQgaW4gdGhlIGhlYWRlciwgZXZlbiBpZiB0aGUgZmlsZW5h
bWUgaXMgZW1wdHkKICAgICAgICAgICAgICAgICBmb3JtRGF0YUJ1aWxkZXIuYWRkRmlsZW5hbWVU
b011bHRpUGFydEhlYWRlcihoZWFkZXIsIGVuY29kaW5nLCBmaWxlTmFtZSk7CiAKLSAgICAgICAg
ICAgICAgICAvLyBJZiBhIGJsb2IgaXMgc2xpY2VkIGZyb20gYSBmaWxlLCBkbyBub3QgYWRkIHRo
ZSBjb250ZW50IHR5cGUuIAorICAgICAgICAgICAgICAgIC8vIElmIHRoZSBpdGVtIGlzIHNsaWNl
ZCBmcm9tIGEgZmlsZSwgZG8gbm90IGFkZCB0aGUgY29udGVudCB0eXBlLgogI2lmIEVOQUJMRShC
TE9CX1NMSUNFKQotICAgICAgICAgICAgICAgIGlmICghZmlsZU5hbWUuaXNFbXB0eSgpICYmIHZh
bHVlLmJsb2IoKS0+aXNGaWxlKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWZpbGVOYW1lLmlz
RW1wdHkoKSAmJiAhdmFsdWUtPnRvRmlsZVJhbmdlQmxvYkl0ZW0oKSkgewogI2Vsc2UKICAgICAg
ICAgICAgICAgICBpZiAoIWZpbGVOYW1lLmlzRW1wdHkoKSkgewogI2VuZGlmCkBAIC0yMzcsMjUg
KzI0NCwyMCBAQCB2b2lkIEZvcm1EYXRhOjphcHBlbmRET01Gb3JtRGF0YShjb25zdCBET01Gb3Jt
RGF0YSYgZG9tRm9ybURhdGEsIGJvb2wgaXNNdWx0aVBhcgogCiAgICAgICAgICAgICAvLyBBcHBl
bmQgYm9keQogICAgICAgICAgICAgYXBwZW5kRGF0YShoZWFkZXIuZGF0YSgpLCBoZWFkZXIuc2l6
ZSgpKTsKLSAgICAgICAgICAgIGlmIChzaXplX3QgZGF0YVNpemUgPSB2YWx1ZS5kYXRhKCkubGVu
Z3RoKCkpCi0gICAgICAgICAgICAgICAgYXBwZW5kRGF0YSh2YWx1ZS5kYXRhKCkuZGF0YSgpLCBk
YXRhU2l6ZSk7Ci0gICAgICAgICAgICBlbHNlIGlmICh2YWx1ZS5ibG9iKCkgJiYgIXZhbHVlLmJs
b2IoKS0+cGF0aCgpLmlzRW1wdHkoKSkKLSNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAgICAgICAg
ICAgICAgICBhcHBlbmRGaWxlUmFuZ2UodmFsdWUuYmxvYigpLT5wYXRoKCksIHZhbHVlLmJsb2Io
KS0+c3RhcnQoKSwgdmFsdWUuYmxvYigpLT5sZW5ndGgoKSwgdmFsdWUuYmxvYigpLT5tb2RpZmlj
YXRpb25UaW1lKCksIHNob3VsZEdlbmVyYXRlRmlsZSk7Ci0jZWxzZQotICAgICAgICAgICAgICAg
IGFwcGVuZEZpbGUodmFsdWUuYmxvYigpLT5wYXRoKCksIHNob3VsZEdlbmVyYXRlRmlsZSk7Ci0j
ZW5kaWYKLQorICAgICAgICAgICAgbV9lbGVtZW50cy5hcHBlbmQoRm9ybURhdGFFbGVtZW50KHZh
bHVlLCBzaG91bGRHZW5lcmF0ZUZpbGUpKTsKICAgICAgICAgICAgIGFwcGVuZERhdGEoIlxyXG4i
LCAyKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIE9taXQgdGhlIG5hbWUgImlz
aW5kZXgiIGlmIGl0J3MgdGhlIGZpcnN0IGZvcm0gZGF0YSBlbGVtZW50LgogICAgICAgICAgICAg
Ly8gRklYTUU6IFdoeSBpcyB0aGlzIGEgZ29vZCBydWxlPyBJcyB0aGlzIG9ic29sZXRlIG5vdz8K
LSAgICAgICAgICAgIGlmIChlbmNvZGVkRGF0YS5pc0VtcHR5KCkgJiYga2V5LmRhdGEoKSA9PSAi
aXNpbmRleCIpCi0gICAgICAgICAgICAgICAgRm9ybURhdGFCdWlsZGVyOjplbmNvZGVTdHJpbmdB
c0Zvcm1EYXRhKGVuY29kZWREYXRhLCB2YWx1ZS5kYXRhKCkpOworICAgICAgICAgICAgY29uc3Qg
U3RyaW5nQmxvYkl0ZW0qIHN0cmluZ1ZhbHVlID0gdmFsdWUtPnRvU3RyaW5nQmxvYkl0ZW0oKTsK
KyAgICAgICAgICAgIGlmICghc3RyaW5nVmFsdWUpCisgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICBpZiAoZW5jb2RlZERhdGEuaXNFbXB0eSgpICYmIGtleS0+Y3N0cigpID09
ICJpc2luZGV4IikKKyAgICAgICAgICAgICAgICBGb3JtRGF0YUJ1aWxkZXI6OmVuY29kZVN0cmlu
Z0FzRm9ybURhdGEoZW5jb2RlZERhdGEsIHN0cmluZ1ZhbHVlLT5jc3RyKCkpOwogICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIGZvcm1EYXRhQnVpbGRlci5hZGRLZXlWYWx1ZVBhaXJB
c0Zvcm1EYXRhKGVuY29kZWREYXRhLCBrZXkuZGF0YSgpLCB2YWx1ZS5kYXRhKCkpOworICAgICAg
ICAgICAgICAgIGZvcm1EYXRhQnVpbGRlci5hZGRLZXlWYWx1ZVBhaXJBc0Zvcm1EYXRhKGVuY29k
ZWREYXRhLCBrZXktPmNzdHIoKSwgc3RyaW5nVmFsdWUtPmNzdHIoKSk7CiAgICAgICAgIH0KLSAg
ICB9IAorICAgIH0KIAogICAgIGlmIChpc011bHRpUGFydEZvcm0pCiAgICAgICAgIGZvcm1EYXRh
QnVpbGRlci5hZGRCb3VuZGFyeVRvTXVsdGlQYXJ0SGVhZGVyKGVuY29kZWREYXRhLCBtX2JvdW5k
YXJ5LmRhdGEoKSwgdHJ1ZSk7CkBAIC0yNzAsMTIgKzI3Miw4IEBAIHZvaWQgRm9ybURhdGE6OmZs
YXR0ZW4oVmVjdG9yPGNoYXI+JiBkYXRhKSBjb25zdAogICAgIHNpemVfdCBuID0gbV9lbGVtZW50
cy5zaXplKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuOyArK2kpIHsKICAgICAgICAg
Y29uc3QgRm9ybURhdGFFbGVtZW50JiBlID0gbV9lbGVtZW50c1tpXTsKLSAgICAgICAgaWYgKGUu
bV90eXBlID09IEZvcm1EYXRhRWxlbWVudDo6ZGF0YSkgewotICAgICAgICAgICAgc2l6ZV90IG9s
ZFNpemUgPSBkYXRhLnNpemUoKTsKLSAgICAgICAgICAgIHNpemVfdCBkZWx0YSA9IGUubV9kYXRh
LnNpemUoKTsKLSAgICAgICAgICAgIGRhdGEuZ3JvdyhvbGRTaXplICsgZGVsdGEpOwotICAgICAg
ICAgICAgbWVtY3B5KGRhdGEuZGF0YSgpICsgb2xkU2l6ZSwgZS5tX2RhdGEuZGF0YSgpLCBkZWx0
YSk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKGUubV90eXBlID09IEZvcm1EYXRhRWxlbWVudDo6
ZGF0YSkKKyAgICAgICAgICAgIGRhdGEuYXBwZW5kKGUubV9kYXRhLmRhdGEoKSwgc3RhdGljX2Nh
c3Q8c2l6ZV90PihlLm1fZGF0YS5zaXplKCkpKTsKICAgICB9CiB9CiAKQEAgLTI4OSwxMCArMjg3
LDEwIEBAIFN0cmluZyBGb3JtRGF0YTo6ZmxhdHRlblRvU3RyaW5nKCkgY29uc3QKIHZvaWQgRm9y
bURhdGE6OmdlbmVyYXRlRmlsZXMoRG9jdW1lbnQqIGRvY3VtZW50KQogewogICAgIEFTU0VSVCgh
bV9oYXNHZW5lcmF0ZWRGaWxlcyk7Ci0gICAgCisKICAgICBpZiAobV9oYXNHZW5lcmF0ZWRGaWxl
cykKICAgICAgICAgcmV0dXJuOwotICAgIAorCiAgICAgUGFnZSogcGFnZSA9IGRvY3VtZW50LT5w
YWdlKCk7CiAgICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm47CkBAIC0zMDIsNyArMzAwLDcg
QEAgdm9pZCBGb3JtRGF0YTo6Z2VuZXJhdGVGaWxlcyhEb2N1bWVudCogZG9jdW1lbnQpCiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBuOyArK2kpIHsKICAgICAgICAgRm9ybURhdGFFbGVtZW50
JiBlID0gbV9lbGVtZW50c1tpXTsKICAgICAgICAgaWYgKGUubV90eXBlID09IEZvcm1EYXRhRWxl
bWVudDo6ZW5jb2RlZEZpbGUgJiYgZS5tX3Nob3VsZEdlbmVyYXRlRmlsZSkgewotICAgICAgICAg
ICAgZS5tX2dlbmVyYXRlZEZpbGVuYW1lID0gY2xpZW50LT5nZW5lcmF0ZVJlcGxhY2VtZW50Rmls
ZShlLm1fZmlsZW5hbWUpOworICAgICAgICAgICAgZS5tX2dlbmVyYXRlZEZpbGVuYW1lID0gY2xp
ZW50LT5nZW5lcmF0ZVJlcGxhY2VtZW50RmlsZShlLml0ZW0oKS0+dG9GaWxlQmxvYkl0ZW0oKS0+
cGF0aCgpKTsKICAgICAgICAgICAgIG1faGFzR2VuZXJhdGVkRmlsZXMgPSB0cnVlOwogICAgICAg
ICB9CiAgICAgfQpAQCAtMzEyLDcgKzMxMCw3IEBAIHZvaWQgRm9ybURhdGE6OnJlbW92ZUdlbmVy
YXRlZEZpbGVzSWZOZWVkZWQoKQogewogICAgIGlmICghbV9oYXNHZW5lcmF0ZWRGaWxlcykKICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAKKwogICAgIHNpemVfdCBuID0gbV9lbGVtZW50cy5zaXpl
KCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuOyArK2kpIHsKICAgICAgICAgRm9ybURh
dGFFbGVtZW50JiBlID0gbV9lbGVtZW50c1tpXTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9Gb3JtRGF0YS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRh
LmgKaW5kZXggYTQzOTAyMzQ3OTZhMGUyZjE0ZjVkMzQ5ZjVkZDBlZmZjMGE0YjdjZC4uY2JiNWYy
YTdlYzJlYjY5YWUwYWNhMjBmMmMyN2U4NWQ1M2Y3ZDIxZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L0Zvcm1EYXRhLmgKQEAgLTIwLDc0ICsyMCw4OSBAQAogI2lmbmRlZiBGb3JtRGF0YV9oCiAjZGVm
aW5lIEZvcm1EYXRhX2gKIAorI2luY2x1ZGUgIkJsb2JJdGVtLmgiCiAjaW5jbHVkZSAiUGxhdGZv
cm1TdHJpbmcuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBET01Gb3JtRGF0YTsKIGNs
YXNzIERvY3VtZW50OworY2xhc3MgVGV4dEVuY29kaW5nOwogCisvLyBBIHdyYXBwZXIgY2xhc3Mg
b2YgQmxvYkl0ZW0gZm9yIEZvcm1EYXRhLgogY2xhc3MgRm9ybURhdGFFbGVtZW50IHsKIHB1Ymxp
YzoKLSAgICBGb3JtRGF0YUVsZW1lbnQoKSA6IG1fdHlwZShkYXRhKSB7IH0KLSAgICBGb3JtRGF0
YUVsZW1lbnQoY29uc3QgVmVjdG9yPGNoYXI+JiBhcnJheSkgOiBtX3R5cGUoZGF0YSksIG1fZGF0
YShhcnJheSkgeyB9Ci0jaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgRm9ybURhdGFFbGVtZW50
KGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGxvbmcgbG9uZyBmaWxlU3RhcnQsIGxvbmcgbG9uZyBm
aWxlTGVuZ3RoLCBkb3VibGUgZXhwZWN0ZWRGaWxlTW9kaWZpY2F0aW9uVGltZSwgYm9vbCBzaG91
bGRHZW5lcmF0ZUZpbGUpIDogbV90eXBlKGVuY29kZWRGaWxlKSwgbV9maWxlbmFtZShmaWxlbmFt
ZSksIG1fZmlsZVN0YXJ0KGZpbGVTdGFydCksIG1fZmlsZUxlbmd0aChmaWxlTGVuZ3RoKSwgbV9l
eHBlY3RlZEZpbGVNb2RpZmljYXRpb25UaW1lKGV4cGVjdGVkRmlsZU1vZGlmaWNhdGlvblRpbWUp
LCBtX3Nob3VsZEdlbmVyYXRlRmlsZShzaG91bGRHZW5lcmF0ZUZpbGUpIHsgfQotI2Vsc2UKLSAg
ICBGb3JtRGF0YUVsZW1lbnQoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgYm9vbCBzaG91bGRHZW5l
cmF0ZUZpbGUpIDogbV90eXBlKGVuY29kZWRGaWxlKSwgbV9maWxlbmFtZShmaWxlbmFtZSksIG1f
c2hvdWxkR2VuZXJhdGVGaWxlKHNob3VsZEdlbmVyYXRlRmlsZSkgeyB9Ci0jZW5kaWYKKyAgICBG
b3JtRGF0YUVsZW1lbnQoKSA6IG1fZGF0YSgwKSB7IH0KKyAgICBGb3JtRGF0YUVsZW1lbnQoUGFz
c1JlZlB0cjxCbG9iSXRlbT4gYmxvYkl0ZW0sIGJvb2wgc2hvdWxkR2VuZXJhdGVGaWxlID0gZmFs
c2UpOworCisgICAgY29uc3QgQmxvYkl0ZW0qIGl0ZW0oKSBjb25zdCB7IHJldHVybiBtX2l0ZW0u
Z2V0KCk7IH0KKworICAgIFJlZlB0cjxCbG9iSXRlbT4gbV9pdGVtOwogCisgICAgLy8gRklYTUU6
IGNsZWFuIG1lIHVwLiAgQ29kZSBiZWxvdyBhcmUgbW9zdGx5IGtlcHQgZm9yIGNvbXBhdGliaWxp
dHkuCiAgICAgZW51bSB7IGRhdGEsIGVuY29kZWRGaWxlIH0gbV90eXBlOwotICAgIFZlY3Rvcjxj
aGFyPiBtX2RhdGE7CisgICAgY29uc3Qgc3RydWN0IEJsb2JJdGVtV3JhcHBlciB7CisgICAgICAg
IEJsb2JJdGVtV3JhcHBlcihjb25zdCBCbG9iSXRlbVdyYXBwZXImIHYpIDogbV9pdGVtKHYubV9p
dGVtKSB7IH0KKyAgICAgICAgQmxvYkl0ZW1XcmFwcGVyKGNvbnN0IERhdGFCbG9iSXRlbSogaXRl
bSkgOiBtX2l0ZW0oaXRlbSkgeyB9CisgICAgICAgIHNpemVfdCBzaXplKCkgY29uc3QKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKCFtX2l0ZW0pCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2l0ZW0tPnNpemUoKSk7
CisgICAgICAgIH0KKyAgICAgICAgY29uc3QgY2hhciogZGF0YSgpIGNvbnN0CisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmICghbV9pdGVtKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICAgICAgcmV0dXJuIG1faXRlbS0+ZGF0YSgpOworICAgICAgICB9CisgICAgICAgIGNoYXIq
IHJlbGVhc2VCdWZmZXIoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIW1faXRl
bSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBtX2l0ZW0t
PnJlbGVhc2VCdWZmZXIoKTsKKyAgICAgICAgfQorICAgICAgICBjb25zdCBEYXRhQmxvYkl0ZW0q
IG1faXRlbTsKKyAgICB9IG1fZGF0YTsKICAgICBTdHJpbmcgbV9maWxlbmFtZTsKICNpZiBFTkFC
TEUoQkxPQl9TTElDRSkKICAgICBsb25nIGxvbmcgbV9maWxlU3RhcnQ7CiAgICAgbG9uZyBsb25n
IG1fZmlsZUxlbmd0aDsKICAgICBkb3VibGUgbV9leHBlY3RlZEZpbGVNb2RpZmljYXRpb25UaW1l
OworCisgICAgc3RhdGljIGNvbnN0IGxvbmcgbG9uZyB0b0VuZE9mRmlsZTsKICNlbmRpZgorCiAg
ICAgU3RyaW5nIG1fZ2VuZXJhdGVkRmlsZW5hbWU7CiAgICAgYm9vbCBtX3Nob3VsZEdlbmVyYXRl
RmlsZTsKIH07CiAKIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9ybURhdGFFbGVtZW50
JiBhLCBjb25zdCBGb3JtRGF0YUVsZW1lbnQmIGIpCiB7Ci0gICAgaWYgKCZhID09ICZiKQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICBpZiAoYS5tX3R5cGUgIT0gYi5tX3R5cGUpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoYS5tX2RhdGEgIT0gYi5tX2RhdGEpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAgICBpZiAoYS5tX2Zp
bGVuYW1lICE9IGIubV9maWxlbmFtZSB8fCBhLm1fZmlsZVN0YXJ0ICE9IGIubV9maWxlU3RhcnQg
fHwgYS5tX2ZpbGVMZW5ndGggIT0gYi5tX2ZpbGVMZW5ndGggfHwgYS5tX2V4cGVjdGVkRmlsZU1v
ZGlmaWNhdGlvblRpbWUgIT0gYi5tX2V4cGVjdGVkRmlsZU1vZGlmaWNhdGlvblRpbWUpCi0jZWxz
ZQotICAgIGlmIChhLm1fZmlsZW5hbWUgIT0gYi5tX2ZpbGVuYW1lKQotI2VuZGlmCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBhLml0ZW0oKS0+
ZXF1YWxzKGIuaXRlbSgpKTsKIH0KLSAKKwogaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBG
b3JtRGF0YUVsZW1lbnQmIGEsIGNvbnN0IEZvcm1EYXRhRWxlbWVudCYgYikKIHsKICAgICByZXR1
cm4gIShhID09IGIpOwogfQotIAorCiBjbGFzcyBGb3JtRGF0YSA6IHB1YmxpYyBSZWZDb3VudGVk
PEZvcm1EYXRhPiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGNy
ZWF0ZSgpOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZvcm1EYXRhPiBjcmVhdGUoY29uc3Qgdm9p
ZCosIHNpemVfdCk7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGNyZWF0ZShjb25z
dCBXVEY6OkNTdHJpbmcmKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxGb3JtRGF0YT4gY3JlYXRl
KGNvbnN0IFZlY3RvcjxjaGFyPiYpOwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZvcm1EYXRhPiBj
cmVhdGUoY29uc3QgRE9NRm9ybURhdGEmKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxGb3JtRGF0
YT4gY3JlYXRlTXVsdGlQYXJ0KGNvbnN0IERPTUZvcm1EYXRhJiwgRG9jdW1lbnQqKTsKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxGb3JtRGF0YT4gY3JlYXRlKGNvbnN0IEJsb2JJdGVtTGlzdCYsIGNv
bnN0IFRleHRFbmNvZGluZyYpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZvcm1EYXRhPiBjcmVh
dGVNdWx0aVBhcnQoY29uc3QgQmxvYkl0ZW1MaXN0JiwgY29uc3QgVGV4dEVuY29kaW5nJiwgRG9j
dW1lbnQqKTsKICAgICBQYXNzUmVmUHRyPEZvcm1EYXRhPiBjb3B5KCkgY29uc3Q7CiAgICAgUGFz
c1JlZlB0cjxGb3JtRGF0YT4gZGVlcENvcHkoKSBjb25zdDsKICAgICB+Rm9ybURhdGEoKTsKLSAg
ICAKKwogICAgIHZvaWQgYXBwZW5kRGF0YShjb25zdCB2b2lkKiBkYXRhLCBzaXplX3QpOworICAg
IHZvaWQgYXBwZW5kQmxvYkl0ZW1MaXN0KGNvbnN0IEJsb2JJdGVtTGlzdCYpOworICAgIHZvaWQg
YXBwZW5kU3RyaW5nKGNvbnN0IENTdHJpbmcmKTsKICAgICB2b2lkIGFwcGVuZEZpbGUoY29uc3Qg
U3RyaW5nJiBmaWxlbmFtZSwgYm9vbCBzaG91bGRHZW5lcmF0ZUZpbGUgPSBmYWxzZSk7CiAjaWYg
RU5BQkxFKEJMT0JfU0xJQ0UpCiAgICAgdm9pZCBhcHBlbmRGaWxlUmFuZ2UoY29uc3QgU3RyaW5n
JiBmaWxlbmFtZSwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoLCBkb3VibGUgZXhw
ZWN0ZWRNb2RpZmljYXRpb25UaW1lLCBib29sIHNob3VsZEdlbmVyYXRlRmlsZSA9IGZhbHNlKTsK
QEAgLTExNSw5ICsxMzAsMTAgQEAgcHJpdmF0ZToKICAgICBGb3JtRGF0YSgpOwogICAgIEZvcm1E
YXRhKGNvbnN0IEZvcm1EYXRhJik7CiAKLSAgICB2b2lkIGFwcGVuZERPTUZvcm1EYXRhKGNvbnN0
IERPTUZvcm1EYXRhJiBkb21Gb3JtRGF0YSwgYm9vbCBpc011bHRpUGFydEZvcm0sIERvY3VtZW50
KiBkb2N1bWVudCk7CisgICAgdm9pZCBhcHBlbmRJdGVtcyhjb25zdCBCbG9iSXRlbUxpc3QmLCBj
b25zdCBUZXh0RW5jb2RpbmcmLCBib29sIGlzTXVsdGlQYXJ0Rm9ybSwgRG9jdW1lbnQqKTsKIAog
ICAgIFZlY3RvcjxGb3JtRGF0YUVsZW1lbnQ+IG1fZWxlbWVudHM7CisKICAgICBpbnQ2NF90IG1f
aWRlbnRpZmllcjsKICAgICBib29sIG1faGFzR2VuZXJhdGVkRmlsZXM7CiAgICAgYm9vbCBtX2Fs
d2F5c1N0cmVhbTsKQEAgLTEzMSw3ICsxNDcsNyBAQCBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IEZvcm1EYXRhJiBhLCBjb25zdCBGb3JtRGF0YSYgYikKIAogaW5saW5lIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBGb3JtRGF0YSYgYSwgY29uc3QgRm9ybURhdGEmIGIpCiB7Ci0gICAgcmV0dXJu
IGEuZWxlbWVudHMoKSAhPSBiLmVsZW1lbnRzKCk7CisgICAgcmV0dXJuICEoYSA9PSBiKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL21hYy9Gb3JtRGF0YVN0cmVhbU1hYy5tbSBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9tYWMvRm9ybURhdGFTdHJlYW1NYWMubW0KaW5kZXggMjdlY2ZkMDhhZDVhYWFiODc1NmZhNTk2
ZDk5NmJkMmY2ZWM1ZDAzZi4uMWU0OGUyZjhmYmIyZmZlNmU3NzllYWIxMGE2NzEyMDQxNzQ2YTA0
MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9Gb3JtRGF0YVN0cmVh
bU1hYy5tbQorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL0Zvcm1EYXRhU3RyZWFt
TWFjLm1tCkBAIC0zMSw3ICszMSw2IEBACiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIkZv
cm1EYXRhU3RyZWFtTWFjLmgiCiAKLSNpbXBvcnQgIkJsb2IuaCIKICNpbXBvcnQgIkZpbGVTeXN0
ZW0uaCIKICNpbXBvcnQgIkZvcm1EYXRhLmgiCiAjaW1wb3J0ICJSZXNvdXJjZUhhbmRsZS5oIgpA
QCAtMTQyLDcgKzE0MSw3IEBAIHN0YXRpYyB2b2lkIGNsb3NlQ3VycmVudFN0cmVhbShGb3JtU3Ry
ZWFtRmllbGRzICpmb3JtKQogICAgICAgICBDRlJlbGVhc2UoZm9ybS0+Y3VycmVudFN0cmVhbSk7
CiAgICAgICAgIGZvcm0tPmN1cnJlbnRTdHJlYW0gPSBOVUxMOwogI2lmIEVOQUJMRShCTE9CX1NM
SUNFKQotICAgICAgICBmb3JtLT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5ndGggPSBCbG9iOjp0b0Vu
ZE9mRmlsZTsKKyAgICAgICAgZm9ybS0+Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoID0gRm9ybURh
dGFFbGVtZW50Ojp0b0VuZE9mRmlsZTsKICNlbmRpZgogICAgIH0KICAgICBpZiAoZm9ybS0+Y3Vy
cmVudERhdGEpIHsKQEAgLTE2MSwyMSArMTYwLDE3IEBAIHN0YXRpYyBib29sIGFkdmFuY2VDdXJy
ZW50U3RyZWFtKEZvcm1TdHJlYW1GaWVsZHMqIGZvcm0pCiAKICAgICAvLyBDcmVhdGUgdGhlIG5l
dyBzdHJlYW0uCiAgICAgRm9ybURhdGFFbGVtZW50JiBuZXh0SW5wdXQgPSBmb3JtLT5yZW1haW5p
bmdFbGVtZW50cy5sYXN0KCk7CisKKyAgICAvLyBDaGVjayBpZiB0aGUgdW5kZXJseWluZyBkYXRh
IGhhcyBiZWNvbWUgc3RhbGUgKGUuZy4gdGhlIGZpbGUgaGFzIGJlZW4gY2hhbmdlZCBzaW5jZSBp
dHMgc25hcHNob3QgaGFzIGJlZW4gdGFrZW4pIG9yIG5vdC4KKyAgICBpZiAoIW5leHRJbnB1dC5t
X2l0ZW0tPmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgaWYgKG5leHRJ
bnB1dC5tX3R5cGUgPT0gRm9ybURhdGFFbGVtZW50OjpkYXRhKSB7CiAgICAgICAgIHNpemVfdCBz
aXplID0gbmV4dElucHV0Lm1fZGF0YS5zaXplKCk7CiAgICAgICAgIGNoYXIqIGRhdGEgPSBuZXh0
SW5wdXQubV9kYXRhLnJlbGVhc2VCdWZmZXIoKTsKICAgICAgICAgZm9ybS0+Y3VycmVudFN0cmVh
bSA9IENGUmVhZFN0cmVhbUNyZWF0ZVdpdGhCeXRlc05vQ29weSgwLCByZWludGVycHJldF9jYXN0
PGNvbnN0IFVJbnQ4Kj4oZGF0YSksIHNpemUsIGtDRkFsbG9jYXRvck51bGwpOwogICAgICAgICBm
b3JtLT5jdXJyZW50RGF0YSA9IGRhdGE7CiAgICAgfSBlbHNlIHsKLSNpZiBFTkFCTEUoQkxPQl9T
TElDRSkKLSAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGZpbGUgaGFzIGJlZW4gY2hhbmdlZCBvciBu
b3QgaWYgcmVxdWlyZWQuCi0gICAgICAgIGlmIChuZXh0SW5wdXQubV9leHBlY3RlZEZpbGVNb2Rp
ZmljYXRpb25UaW1lICE9IEJsb2I6OmRvTm90Q2hlY2tGaWxlQ2hhbmdlKSB7Ci0gICAgICAgICAg
ICB0aW1lX3QgZmlsZU1vZGlmaWNhdGlvblRpbWU7Ci0gICAgICAgICAgICBpZiAoIWdldEZpbGVN
b2RpZmljYXRpb25UaW1lKG5leHRJbnB1dC5tX2ZpbGVuYW1lLCBmaWxlTW9kaWZpY2F0aW9uVGlt
ZSkgfHwgZmlsZU1vZGlmaWNhdGlvblRpbWUgIT0gc3RhdGljX2Nhc3Q8dGltZV90PihuZXh0SW5w
dXQubV9leHBlY3RlZEZpbGVNb2RpZmljYXRpb25UaW1lKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIH0KLSNlbmRpZgotCiAgICAgICAgIGNvbnN0IFN0cmluZyYgcGF0
aCA9IG5leHRJbnB1dC5tX3Nob3VsZEdlbmVyYXRlRmlsZSA/IG5leHRJbnB1dC5tX2dlbmVyYXRl
ZEZpbGVuYW1lIDogbmV4dElucHV0Lm1fZmlsZW5hbWU7CiAgICAgICAgIFJldGFpblB0cjxDRlN0
cmluZ1JlZj4gZmlsZW5hbWUoQWRvcHRDRiwgcGF0aC5jcmVhdGVDRlN0cmluZygpKTsKICAgICAg
ICAgUmV0YWluUHRyPENGVVJMUmVmPiBmaWxlVVJMKEFkb3B0Q0YsIENGVVJMQ3JlYXRlV2l0aEZp
bGVTeXN0ZW1QYXRoKDAsIGZpbGVuYW1lLmdldCgpLCBrQ0ZVUkxQT1NJWFBhdGhTdHlsZSwgRkFM
U0UpKTsKQEAgLTIyMiw3ICsyMTcsNyBAQCBzdGF0aWMgdm9pZCogZm9ybUNyZWF0ZShDRlJlYWRT
dHJlYW1SZWYgc3RyZWFtLCB2b2lkKiBjb250ZXh0KQogICAgIEZvcm1TdHJlYW1GaWVsZHMqIG5l
d0luZm8gPSBuZXcgRm9ybVN0cmVhbUZpZWxkczsKICAgICBuZXdJbmZvLT5jdXJyZW50U3RyZWFt
ID0gTlVMTDsKICNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAgICBuZXdJbmZvLT5jdXJyZW50U3Ry
ZWFtUmFuZ2VMZW5ndGggPSBCbG9iOjp0b0VuZE9mRmlsZTsKKyAgICBuZXdJbmZvLT5jdXJyZW50
U3RyZWFtUmFuZ2VMZW5ndGggPSBGb3JtRGF0YUVsZW1lbnQ6OnRvRW5kT2ZGaWxlOwogI2VuZGlm
CiAgICAgbmV3SW5mby0+Y3VycmVudERhdGEgPSAwOwogICAgIG5ld0luZm8tPmZvcm1TdHJlYW0g
PSBzdHJlYW07IC8vIERvbid0IHJldGFpbi4gVGhhdCB3b3VsZCBjcmVhdGUgYSByZWZlcmVuY2Ug
Y3ljbGUuCkBAIC0yNzAsNyArMjY1LDcgQEAgc3RhdGljIENGSW5kZXggZm9ybVJlYWQoQ0ZSZWFk
U3RyZWFtUmVmIHN0cmVhbSwgVUludDgqIGJ1ZmZlciwgQ0ZJbmRleCBidWZmZXJMZW4KICAgICB3
aGlsZSAoZm9ybS0+Y3VycmVudFN0cmVhbSkgewogICAgICAgICBDRkluZGV4IGJ5dGVzVG9SZWFk
ID0gYnVmZmVyTGVuZ3RoOwogI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgICAgICBpZiAoZm9y
bS0+Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoICE9IEJsb2I6OnRvRW5kT2ZGaWxlICYmIGZvcm0t
PmN1cnJlbnRTdHJlYW1SYW5nZUxlbmd0aCA8IGJ5dGVzVG9SZWFkKQorICAgICAgICBpZiAoZm9y
bS0+Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoICE9IEZvcm1EYXRhRWxlbWVudDo6dG9FbmRPZkZp
bGUgJiYgZm9ybS0+Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoIDwgYnl0ZXNUb1JlYWQpCiAgICAg
ICAgICAgICBieXRlc1RvUmVhZCA9IHN0YXRpY19jYXN0PENGSW5kZXg+KGZvcm0tPmN1cnJlbnRT
dHJlYW1SYW5nZUxlbmd0aCk7CiAjZW5kaWYKICAgICAgICAgQ0ZJbmRleCBieXRlc1JlYWQgPSBD
RlJlYWRTdHJlYW1SZWFkKGZvcm0tPmN1cnJlbnRTdHJlYW0sIGJ1ZmZlciwgYnl0ZXNUb1JlYWQp
OwpAQCAtMjgzLDcgKzI3OCw3IEBAIHN0YXRpYyBDRkluZGV4IGZvcm1SZWFkKENGUmVhZFN0cmVh
bVJlZiBzdHJlYW0sIFVJbnQ4KiBidWZmZXIsIENGSW5kZXggYnVmZmVyTGVuCiAgICAgICAgICAg
ICAqYXRFT0YgPSBGQUxTRTsKICAgICAgICAgICAgIGZvcm0tPmJ5dGVzU2VudCArPSBieXRlc1Jl
YWQ7CiAjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgICAgICAgICBpZiAoZm9ybS0+Y3VycmVu
dFN0cmVhbVJhbmdlTGVuZ3RoICE9IEJsb2I6OnRvRW5kT2ZGaWxlKQorICAgICAgICAgICAgaWYg
KGZvcm0tPmN1cnJlbnRTdHJlYW1SYW5nZUxlbmd0aCAhPSBGb3JtRGF0YUVsZW1lbnQ6OnRvRW5k
T2ZGaWxlKQogICAgICAgICAgICAgICAgIGZvcm0tPmN1cnJlbnRTdHJlYW1SYW5nZUxlbmd0aCAt
PSBieXRlc1JlYWQ7CiAjZW5kaWYKIApAQCAtNDAwLDcgKzM5NSw3IEBAIHZvaWQgc2V0SFRUUEJv
ZHkoTlNNdXRhYmxlVVJMUmVxdWVzdCAqcmVxdWVzdCwgUGFzc1JlZlB0cjxGb3JtRGF0YT4gZm9y
bURhdGEpCiAgICAgICAgIGVsc2UgewogI2lmIEVOQUJMRShCTE9CX1NMSUNFKQogICAgICAgICAg
ICAgLy8gSWYgd2UncmUgc2VuZGluZyB0aGUgZmlsZSByYW5nZSwgdXNlIHRoZSBleGlzdGluZyBy
YW5nZSBsZW5ndGggZm9yIG5vdy4gV2Ugd2lsbCBkZXRlY3QgaWYgdGhlIGZpbGUgaGFzIGJlZW4g
Y2hhbmdlZCByaWdodCBiZWZvcmUgd2UgcmVhZCB0aGUgZmlsZSBhbmQgYWJvcnQgdGhlIG9wZXJh
dGlvbiBpZiBuZWNlc3NhcnkuCi0gICAgICAgICAgICBpZiAoZWxlbWVudC5tX2ZpbGVMZW5ndGgg
IT0gQmxvYjo6dG9FbmRPZkZpbGUpIHsKKyAgICAgICAgICAgIGlmIChlbGVtZW50Lm1fZmlsZUxl
bmd0aCAhPSBGb3JtRGF0YUVsZW1lbnQ6OnRvRW5kT2ZGaWxlKSB7CiAgICAgICAgICAgICAgICAg
bGVuZ3RoICs9IGVsZW1lbnQubV9maWxlTGVuZ3RoOwogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3Qu
Y3BwIGIvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCmluZGV4IDVjZGUyNGRlMjlkYjQ0
MjEwMDAxYTMwMjMyNDRjYTRjY2QyNWNmYmIuLjE0MTBhNWVjYzhjNjliNjFiYjI2OWQ2NjAwNDhi
OTU2YmI5YjgxZDMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAor
KysgYi9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKQEAgLTQ3OCwxMSArNDc4LDcgQEAg
dm9pZCBYTUxIdHRwUmVxdWVzdDo6c2VuZChCbG9iKiBib2R5LCBFeGNlcHRpb25Db2RlJiBlYykK
ICAgICAgICAgLy8gRklYTUU6IFNob3VsZCB3ZSBzZXQgYSBDb250ZW50LVR5cGUgaWYgb25lIGlz
IG5vdCBzZXQuCiAgICAgICAgIC8vIEZJWE1FOiBhZGQgc3VwcG9ydCBmb3IgdXBsb2FkaW5nIGJ1
bmRsZXMuCiAgICAgICAgIG1fcmVxdWVzdEVudGl0eUJvZHkgPSBGb3JtRGF0YTo6Y3JlYXRlKCk7
Ci0jaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgICAgIG1fcmVxdWVzdEVudGl0eUJvZHktPmFw
cGVuZEZpbGVSYW5nZShib2R5LT5wYXRoKCksIGJvZHktPnN0YXJ0KCksIGJvZHktPmxlbmd0aCgp
LCBib2R5LT5tb2RpZmljYXRpb25UaW1lKCkpOwotI2Vsc2UKLSAgICAgICAgbV9yZXF1ZXN0RW50
aXR5Qm9keS0+YXBwZW5kRmlsZShib2R5LT5wYXRoKCksIGZhbHNlKTsKLSNlbmRpZgorICAgICAg
ICBtX3JlcXVlc3RFbnRpdHlCb2R5LT5hcHBlbmRCbG9iSXRlbUxpc3QoYm9keS0+aXRlbXMoKSk7
CiAgICAgfQogCiAgICAgY3JlYXRlUmVxdWVzdChlYyk7CkBAIC00OTQsNyArNDkwLDcgQEAgdm9p
ZCBYTUxIdHRwUmVxdWVzdDo6c2VuZChET01Gb3JtRGF0YSogYm9keSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChtX21ldGhvZCAhPSAiR0VUIiAmJiBtX21l
dGhvZCAhPSAiSEVBRCIgJiYgbV91cmwucHJvdG9jb2xJbkhUVFBGYW1pbHkoKSkgewotICAgICAg
ICBtX3JlcXVlc3RFbnRpdHlCb2R5ID0gRm9ybURhdGE6OmNyZWF0ZU11bHRpUGFydCgqYm9keSwg
ZG9jdW1lbnQoKSk7CisgICAgICAgIG1fcmVxdWVzdEVudGl0eUJvZHkgPSBGb3JtRGF0YTo6Y3Jl
YXRlTXVsdGlQYXJ0KGJvZHktPml0ZW1zKCksIGJvZHktPmVuY29kaW5nKCksIGRvY3VtZW50KCkp
OwogCiAgICAgICAgIC8vIFdlIG5lZWQgdG8gYXNrIHRoZSBjbGllbnQgdG8gcHJvdmlkZSB0aGUg
Z2VuZXJhdGVkIGZpbGUgbmFtZXMgaWYgbmVlZGVkLiBXaGVuIEZvcm1EYXRhIGZpbGxzIHRoZSBl
bGVtZW50CiAgICAgICAgIC8vIGZvciB0aGUgZmlsZSwgaXQgY291bGQgc2V0IGEgZmxhZyB0byB1
c2UgdGhlIGdlbmVyYXRlZCBmaWxlIG5hbWUsIGkuZS4gYSBwYWNrYWdlIGZpbGUgb24gTWFjLgpk
aWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKaW5kZXggMDdlNmVkYjJlMTYwNWMwNTdjYTUzZWY3NDM4MGI2M2RmMGExYzdlNS4u
MmMwMDY3NmQ5YTZhNjk1NGU5OGMzMWE3ZWVlZTBkY2NiMTRmZDk4MiAxMDA2NDQKLS0tIGEvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTYgQEAKKzIwMTAtMDUtMjQgIEtpbnVrbyBZYXN1ZGEgIDxraW51a29AY2hyb21p
dW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFJlZmFjdG9yIEZvcm1EYXRhIGFuZCBCbG9iIGZvciBiZXR0ZXIgc3VwcG9ydCBvZiBCbG9icyBz
eW50aGVzaXplZCBieSBCbG9iQnVpbGRlci4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTM5MDgzCisKKyAgICAgICAgUmVwbGFjZSBGb3JtRGF0YUxpc3Q6
Okl0ZW0gbGlzdCB3aXRoIEJsb2JJdGVtTGlzdCB0byBnZXQgaXQgY29tcGlsaW5nCisgICAgICAg
IHdpdGggdGhlIHJlZmFjdG9yaW5nIGluIEZvcm1EYXRhTGlzdC4KKworICAgICAgICAqIHNyYy9X
ZWJTZWFyY2hhYmxlRm9ybURhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SGFzU3VpdGFibGVU
ZXh0RWxlbWVudCk6CisKIDIwMTAtMDUtMjEgIFRvbnkgQ2hhbmcgIDx0b255QGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBSZXZpZXdlZCBieSBPamFuIFZhZmFpLgpkaWZmIC0tZ2l0IGEvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJTZWFyY2hhYmxlRm9ybURhdGEuY3BwIGIvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJTZWFyY2hhYmxlRm9ybURhdGEuY3BwCmluZGV4IDhlZWY2Y2M4OTQ3ZTVjNmNjOTMz
MDVkMmNiNjExNThlZWU5ZTY4ZDUuLjcyNjk0YjcxMGFmMjVjYTU5ODI1Y2RkNjc4YTQwOWJiZjE0
YjFlNWIgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2VhcmNoYWJsZUZvcm1E
YXRhLmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNlYXJjaGFibGVGb3JtRGF0YS5j
cHAKQEAgLTE4NSw4ICsxODUsOCBAQCBib29sIEhhc1N1aXRhYmxlVGV4dEVsZW1lbnQoY29uc3Qg
SFRNTEZvcm1FbGVtZW50KiBmb3JtLCBWZWN0b3I8Y2hhcj4qIGVuY29kZWRTdAogICAgICAgaWYg
KCFmb3JtRWxlbWVudC0+YXBwZW5kRm9ybURhdGEoZGF0YUxpc3QsIGZhbHNlKSkKICAgICAgICAg
ICBjb250aW51ZTsKIAotICAgICAgY29uc3QgVmVjdG9yPEZvcm1EYXRhTGlzdDo6SXRlbT4mIGl0
ZW1MaXN0ID0gZGF0YUxpc3QubGlzdCgpOwotICAgICAgaWYgKGlzVGV4dEVsZW1lbnQgJiYgIWl0
ZW1MaXN0LmlzRW1wdHkoKSkgeworICAgICAgY29uc3QgQmxvYkl0ZW1MaXN0JiBpdGVtcyA9IGRh
dGFMaXN0Lml0ZW1zKCk7CisgICAgICBpZiAoaXNUZXh0RWxlbWVudCAmJiAhaXRlbXMuaXNFbXB0
eSgpKSB7CiAgICAgICAgICAgaWYgKHRleHRFbGVtZW50KSB7CiAgICAgICAgICAgICAgIC8vIFRo
ZSBhdXRvLWNvbXBsZXRlIGJhciBvbmx5IGtub3dzIGhvdyB0byBmaWxsIGluIG9uZSB2YWx1ZS4K
ICAgICAgICAgICAgICAgLy8gVGhpcyBmb3JtIGhhcyBtdWx0aXBsZSBmaWVsZHM7IGRvbid0IHRy
ZWF0IGl0IGFzIHNlYXJjaGFibGUuCkBAIC0xOTQsMjAgKzE5NCwyMyBAQCBib29sIEhhc1N1aXRh
YmxlVGV4dEVsZW1lbnQoY29uc3QgSFRNTEZvcm1FbGVtZW50KiBmb3JtLCBWZWN0b3I8Y2hhcj4q
IGVuY29kZWRTdAogICAgICAgICAgIH0KICAgICAgICAgICB0ZXh0RWxlbWVudCA9IHN0YXRpY19j
YXN0PEhUTUxJbnB1dEVsZW1lbnQqPihmb3JtRWxlbWVudCk7CiAgICAgICB9Ci0gICAgICBmb3Ig
KFZlY3RvcjxGb3JtRGF0YUxpc3Q6Okl0ZW0+Ojpjb25zdF9pdGVyYXRvciBqKGl0ZW1MaXN0LmJl
Z2luKCkpOyBqICE9IGl0ZW1MaXN0LmVuZCgpOyArK2opIHsKKyAgICAgIGZvciAoQmxvYkl0ZW1M
aXN0Ojpjb25zdF9pdGVyYXRvciBqKGl0ZW1zLmJlZ2luKCkpOyBqICE9IGl0ZW1zLmVuZCgpOyAr
K2opIHsKKyAgICAgICAgICBjb25zdCBTdHJpbmdCbG9iSXRlbSogaXRlbSA9ICgqaiktPnRvU3Ry
aW5nQmxvYkl0ZW0oKTsKKyAgICAgICAgICBpZiAoIWl0ZW0pCisgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgIC8vIEhhbmRsZSBJU0lOREVYIC8gPGlucHV0IG5hbWU9aXNpbmRleD4g
c3BlY2lhbGx5LCBidXQgb25seSBpZiBpdCdzCiAgICAgICAgICAgLy8gdGhlIGZpcnN0IGVudHJ5
LgotICAgICAgICAgIGlmICghZW5jb2RlZFN0cmluZy0+aXNFbXB0eSgpIHx8IGotPmRhdGEoKSAh
PSAiaXNpbmRleCIpIHsKKyAgICAgICAgICBpZiAoIWVuY29kZWRTdHJpbmctPmlzRW1wdHkoKSB8
fCBpdGVtLT5jc3RyKCkgIT0gImlzaW5kZXgiKSB7CiAgICAgICAgICAgICAgIGlmICghZW5jb2Rl
ZFN0cmluZy0+aXNFbXB0eSgpKQogICAgICAgICAgICAgICAgICAgZW5jb2RlZFN0cmluZy0+YXBw
ZW5kKCcmJyk7Ci0gICAgICAgICAgICAgIEZvcm1EYXRhQnVpbGRlcjo6ZW5jb2RlU3RyaW5nQXNG
b3JtRGF0YSgqZW5jb2RlZFN0cmluZywgai0+ZGF0YSgpKTsKKyAgICAgICAgICAgICAgRm9ybURh
dGFCdWlsZGVyOjplbmNvZGVTdHJpbmdBc0Zvcm1EYXRhKCplbmNvZGVkU3RyaW5nLCBpdGVtLT5j
c3RyKCkpOwogICAgICAgICAgICAgICBlbmNvZGVkU3RyaW5nLT5hcHBlbmQoJz0nKTsKICAgICAg
ICAgICB9CiAgICAgICAgICAgKytqOwogICAgICAgICAgIGlmIChmb3JtRWxlbWVudCA9PSB0ZXh0
RWxlbWVudCkKICAgICAgICAgICAgICAgZW5jb2RlZFN0cmluZy0+YXBwZW5kKCJ7c2VhcmNoVGVy
bXN9IiwgMTMpOwogICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgRm9ybURhdGFCdWlsZGVy
OjplbmNvZGVTdHJpbmdBc0Zvcm1EYXRhKCplbmNvZGVkU3RyaW5nLCBqLT5kYXRhKCkpOworICAg
ICAgICAgICAgICBGb3JtRGF0YUJ1aWxkZXI6OmVuY29kZVN0cmluZ0FzRm9ybURhdGEoKmVuY29k
ZWRTdHJpbmcsIGl0ZW0tPmNzdHIoKSk7CiAgICAgICB9CiAgICAgfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57016</attachid>
            <date>2010-05-25 07:31:24 -0700</date>
            <delta_ts>2010-05-25 07:47:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-39083-20100525073122.patch</filename>
            <type>text/plain</type>
            <size>75489</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CmluZGV4IGIxN2NlMjczNTI4YzZhZTdkYjdiNjYyMjc1MGM3YmZlMDFiNjM3MmQuLjQ3Y2U1
MGIwNmU5ODIzYmYwOGMxZWRhODE5NjUzZjEwNDE3Y2VhNmUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
Q01ha2VMaXN0cy50eHQKKysrIGIvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTExNCw2ICsx
MTE0LDcgQEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAgIHBhZ2UvYW5pbWF0aW9uL0tleWZyYW1l
QW5pbWF0aW9uLmNwcAogCiAgICAgcGxhdGZvcm0vQXJlbmEuY3BwCisgICAgcGxhdGZvcm0vQmxv
Ykl0ZW0uY3BwCiAgICAgcGxhdGZvcm0vQ29udGVudFR5cGUuY3BwCiAgICAgcGxhdGZvcm0vQ29u
dGV4dE1lbnUuY3BwCiAgICAgcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGI1ZjY0MjYy
ZmQ2NjI2MTNkNjMyOTIyMWQ3NDRjNTAzYjQ3ZTg5OWEuLmY1ZjFkYjgzNzg0NmJjY2FkYmRkOGVk
OGEwNzg5Nzg1YmUxYWFmY2YgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dl
YkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTEgQEAKKzIwMTAtMDUtMjQgIEtpbnVrbyBZYXN1
ZGEgIDxraW51a29AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yIEZvcm1EYXRhIGFuZCBCbG9iIGZvciBiZXR0ZXIg
c3VwcG9ydCBvZiBCbG9icyBzeW50aGVzaXplZCBieSBCbG9iQnVpbGRlci4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5MDgzCisKKyAgICAgICAgLSBJ
bnRyb2R1Y2VzIGEgbmV3IGNsYXNzIEJsb2JJdGVtIGFzIGEgYmFzaWMgY29tcG9uZW50IG9mIEJs
b2IgYW5kCisgICAgICAgICAgRm9ybURhdGEgYW5kIG1ha2VzIEJsb2IgYXMgYSBjb2xsZWN0aW9u
IG9mIEJsb2JJdGVtcy4KKyAgICAgICAgLSBGaWxlIHdvdWxkIGJlY29tZSBhIHNwZWNpYWwgdHlw
ZSBvZiBCbG9iIHRoYXQgY29udGFpbnMgb25seSBvbmUKKyAgICAgICAgICBGaWxlQmxvYkl0ZW0u
CisgICAgICAgIC0gTWFrZXMgRm9ybURhdGFFbGVtZW50IGEgd3JhcHBlciBvZiBCbG9iSXRlbSAo
YXMgYSB0cmFuc2llbnQKKyAgICAgICAgICBzb2x1dGlvbikuCisgICAgICAgIC0gRml4IHRoZSBk
ZXBlbmRlbmN5IHZpb2xhdGlvbiBpbiBGb3JtRGF0YSBzbyB0aGF0IHRoZSBmaWxlcyB1bmRlcgor
ICAgICAgICAgIHBsYXRmb3JtLyBkbyBub3QgaW5jbHVkZSBhbnkgaHRtbC8gZmlsZXMuCisKKyAg
ICAgICAgVGhlIHBhdGNoIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgbGF0ZXN0IEZpbGUgQVBJIGNoYW5n
ZXMgKGUuZy4gdHlwZSwKKyAgICAgICAgdXJsIGFuZCBzbGljZSdzIHR5cGUgcGFyYW1ldGVycykg
YW5kIHNob3VsZCBub3QgY2hhbmdlIGFueSBvZiBpdHMKKyAgICAgICAgZXhpc3RpbmcgYmVoYXZp
b3JzLgorCisgICAgICAgIFRoZSBleGlzdGluZyB0ZXN0cyBzaG91bGQgYmUgYWJsZSB0byBiZSB1
c2VkIGZvciByZWdyZXNzaW9uLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAg
ICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdl
YkNvcmUucHJvOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAg
ICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBodG1s
L0Jsb2IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6QmxvYik6CisgICAgICAgIChXZWJD
b3JlOjpCbG9iOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OnBhdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6QmxvYjo6YXBwZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OnNsaWNl
KToKKyAgICAgICAgKiBodG1sL0Jsb2IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjp0eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkJs
b2I6Oml0ZW1zKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OkJsb2IpOgorICAgICAgICAqIGh0
bWwvRmlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWxlOjpGaWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbGU6Om5hbWUpOgorICAgICAgICAqIGh0bWwvRmlsZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsZTo6ZmlsZU5hbWUpOgorICAgICAgICAqIGh0bWwvRmlsZVJlYWRlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWxlUmVhZGVyOjpyZWFkQXNCaW5hcnlTdHJpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsZVJlYWRlcjo6cmVhZEFzVGV4dCk6CisgICAgICAgICogaHRtbC9GaWxl
U3RyZWFtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVTdHJlYW06Om9wZW5Gb3JSZWFkKToK
KyAgICAgICAgKiBodG1sL0Zvcm1EYXRhTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb3Jt
RGF0YUxpc3Q6OmFwcGVuZFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YUxpc3Q6
OmFwcGVuZEJsb2IpOgorICAgICAgICAqIGh0bWwvRm9ybURhdGFMaXN0Lmg6CisgICAgICAgIChX
ZWJDb3JlOjpGb3JtRGF0YUxpc3Q6Oml0ZW1zKToKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6OmNyZWF0ZUZvcm1E
YXRhKToKKyAgICAgICAgKiBodG1sL0hUTUxQcm9ncmVzc0VsZW1lbnQuY3BwOgorICAgICAgICAq
IHBsYXRmb3JtL0Jsb2JJdGVtLmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vQmxvYkl0
ZW0uaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YUVsZW1lbnQ6OkZvcm1EYXRhRWxlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpGb3JtRGF0YTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1E
YXRhOjpjcmVhdGVNdWx0aVBhcnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6OmRlZXBD
b3B5KToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjphcHBlbmREYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OkZvcm1EYXRhOjphcHBlbmRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Rm9y
bURhdGE6OmFwcGVuZEZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6OmFwcGVuZEJs
b2JJdGVtTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YTo6YXBwZW5kRmlsZVJhbmdl
KToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjphcHBlbmRJdGVtcyk6CisgICAgICAgICog
cGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGFF
bGVtZW50OjpGb3JtRGF0YUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGFFbGVt
ZW50OjppdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhRWxlbWVudDo6QmxvYkl0ZW1X
cmFwcGVyOjpCbG9iSXRlbVdyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGFFbGVt
ZW50OjpCbG9iSXRlbVdyYXBwZXI6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGFF
bGVtZW50OjpCbG9iSXRlbVdyYXBwZXI6OmRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURh
dGFFbGVtZW50OjpCbG9iSXRlbVdyYXBwZXI6OnJlbGVhc2VCdWZmZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvciE9KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9uZXR3b3JrL21hYy9Gb3JtRGF0YVN0cmVhbU1hYy5tbToKKyAgICAgICAg
KFdlYkNvcmU6OmNsb3NlQ3VycmVudFN0cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjphZHZhbmNl
Q3VycmVudFN0cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjpmb3JtQ3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OmZvcm1SZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEhUVFBCb2R5KToKKyAg
ICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0
cFJlcXVlc3Q6OnNlbmQpOgorCiAyMDEwLTA1LTI0ICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBw
bGUuY29tPgogCiAgICAgICAgIE5vIHJldmlldzsgYnVpbGQgZml4IG9ubHkuCmRpZmYgLS1naXQg
YS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCBl
N2NiMDM4ZjY1MTUxOGY5NmIzNGJmZmRlYzVkNTc3YmJmMTYzMmI2Li4zYzY5NzNiZDY3Yjk0ZDkx
OTFmYmNjNzRkNDM1OWQzYTk1NWI1NzJlIDEwMDY0NAotLS0gYS9XZWJDb3JlL0dOVW1ha2VmaWxl
LmFtCisrKyBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTE1NDAsNiArMTU0MCw4IEBAIHdl
YmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9BcmVuYS5jcHAgXAogCVdlYkNv
cmUvcGxhdGZvcm0vQXJlbmEuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9BdXRvZHJhaW5lZFBvb2wu
aCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9CbG9iSXRlbS5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0v
QmxvYkl0ZW0uaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9Db250ZW50VHlwZS5jcHAgXAogCVdlYkNv
cmUvcGxhdGZvcm0vQ29udGVudFR5cGUuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9Db250ZXh0TWVu
dS5jcHAgXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9XZWJDb3JlL1dlYkNv
cmUuZ3lwaQppbmRleCBiOTFjMjlkMTFmMzA1ZDBiZjYxMGIxNDEyMTI2MGQ4N2Q1ZjM0MThlLi42
NDdjMDNkZGY4NTMzMzg3MmRiN2JhOTM5NDhiMGM1MjI4MzBjZTg1IDEwMDY0NAotLS0gYS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQorKysgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMjg2OCw2ICsy
ODY4LDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9BcmVuYS5jcHAnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL0FyZW5hLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL0F1dG9kcmFpbmVkUG9v
bC5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9CbG9iSXRlbS5jcHAnLAorICAgICAgICAgICAg
J3BsYXRmb3JtL0Jsb2JJdGVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL0NvbnRlbnRUeXBl
LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vQ29udGVudFR5cGUuaCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vQ29udGV4dE1lbnUuY3BwJywKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29y
ZS5wcm8gYi9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IDZjZTY5NWZhNDgxYjdmZjcwMDIwM2Jj
MDFhNjg1ZTVlMTdlYmY5NzQuLjYxZmVmYWQzNzMzNzkyYzk1MWU1ODc3YzI1MTgyNDE3MThjNzUy
NTEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvV2ViQ29yZS9XZWJDb3Jl
LnBybwpAQCAtODA5LDYgKzgwOSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3JtL2FuaW1h
dGlvbi9BbmltYXRpb24uY3BwIFwKICAgICBwbGF0Zm9ybS9hbmltYXRpb24vQW5pbWF0aW9uTGlz
dC5jcHAgXAogICAgIHBsYXRmb3JtL0FyZW5hLmNwcCBcCisgICAgcGxhdGZvcm0vQmxvYkl0ZW0u
Y3BwIFwKICAgICBwbGF0Zm9ybS90ZXh0L0Jhc2U2NC5jcHAgXAogICAgIHBsYXRmb3JtL3RleHQv
QmlkaUNvbnRleHQuY3BwIFwKICAgICBwbGF0Zm9ybS9Db250ZW50VHlwZS5jcHAgXApAQCAtMTU1
Niw2ICsxNTU3LDcgQEAgSEVBREVSUyArPSBcCiAgICAgcGxhdGZvcm0vYW5pbWF0aW9uL0FuaW1h
dGlvbi5oIFwKICAgICBwbGF0Zm9ybS9hbmltYXRpb24vQW5pbWF0aW9uTGlzdC5oIFwKICAgICBw
bGF0Zm9ybS9BcmVuYS5oIFwKKyAgICBwbGF0Zm9ybS9CbG9iSXRlbS5oIFwKICAgICBwbGF0Zm9y
bS9Db250ZW50VHlwZS5oIFwKICAgICBwbGF0Zm9ybS9Db250ZXh0TWVudS5oIFwKICAgICBwbGF0
Zm9ybS9Dcm9zc1RocmVhZENvcGllci5oIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS52
Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qCmluZGV4IDYwMjAyNTBmMGNhOWNkZDg3ODRjNWFiOWJkZTVlNDAzNzk3YTJkZjguLjlhZWRi
OGUzYzZhMGFkNmU5NTUwODE0NGI2NzAxMDIwODA0NDliZjIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
V2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvagpAQCAtMjIzMDUsNiArMjIzMDUsMTQgQEAKIAkJCQk+DQogCQkJPC9G
aWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cQmxvYkl0ZW0u
Y3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0i
Li5ccGxhdGZvcm1cQmxvYkl0ZW0uaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0K
IAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXENvbnRlbnRUeXBlLmNwcCINCiAJCQkJPg0K
IAkJCTwvRmlsZT4NCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IGQzMmRjZGYyNWFiZGJmZGZjZjBmOGE2M2VmZDc1NGY0YWM3NGU5ZjEuLjg0ZTRiOGFhYjFj
YjRmY2Q4Njc1MTVlZTMyMTJmZDFkZTZmNmI3NWEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMjc1LDYgKzIyNzUsOCBAQAogCQk4OTUyNTNERDExNkM0
RUY1MDBDQUJGMDAgLyogRmlsZVN0cmVhbVByb3h5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4OTUyNTNEQjExNkM0RUY1MDBDQUJGMDAgLyogRmlsZVN0
cmVhbVByb3h5LmggKi87IH07CiAJCTg5NTI1M0RGMTE2QzRGMDYwMENBQkYwMCAvKiBGaWxlVGhy
ZWFkVGFzay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
ODk1MjUzREUxMTZDNEYwNjAwQ0FCRjAwIC8qIEZpbGVUaHJlYWRUYXNrLmggKi87IH07CiAJCThG
QUM3NzREMTE5ODcyQ0IwMDE1QUU5NCAvKiBKU01haW5UaHJlYWRFeGVjU3RhdGUuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOEY5MzREODQxMTg5RjFF
RTAwNTA4RDVEIC8qIEpTTWFpblRocmVhZEV4ZWNTdGF0ZS5jcHAgKi87IH07CisJCTg5ODhFMTBF
MTFBMzUwOEIwMERCNzMyRSAvKiBCbG9iSXRlbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4OTg4RTEwQzExQTM1MDhCMDBEQjczMkUgLyogQmxvYkl0
ZW0uY3BwICovOyB9OworCQk4OTg4RTEwRjExQTM1MDhCMDBEQjczMkUgLyogQmxvYkl0ZW0uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg5ODhFMTBEMTFB
MzUwOEIwMERCNzMyRSAvKiBCbG9iSXRlbS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTkzMDJCMEJEMEQ3OUY4MjkwMEM3RUU4MyAvKiBQYWdlR3Jv
dXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMw
MkIwQkMwRDc5RjgyOTAwQzdFRTgzIC8qIFBhZ2VHcm91cC5jcHAgKi87IH07CiAJCTkzMDJCMEJG
MEQ3OUY4MkMwMEM3RUU4MyAvKiBQYWdlR3JvdXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMDJCMEJFMEQ3OUY4MkMwMEM3RUU4MyAvKiBQYWdlR3Jv
dXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5
MzA1QjI0RDA5OEYxQjZCMDBDMjg4NTUgLyogVGltZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMDVCMjRDMDk4RjFCNkIwMEMyODg1NSAvKiBUaW1l
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC03
ODU5LDYgKzc4NjEsOCBAQAogCQk4OTUyNTNERTExNkM0RjA2MDBDQUJGMDAgLyogRmlsZVRocmVh
ZFRhc2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsZVRocmVhZFRhc2su
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOEY5MzREODMxMTg5RjFFRTAwNTA4RDVE
IC8qIEpTTWFpblRocmVhZEV4ZWNTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU01haW5UaHJlYWRFeGVjU3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJOEY5MzREODQxMTg5RjFFRTAwNTA4RDVEIC8qIEpTTWFpblRocmVhZEV4ZWNTdGF0ZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU01haW5UaHJlYWRFeGVjU3Rh
dGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4OTg4RTEwQzExQTM1MDhCMDBE
QjczMkUgLyogQmxvYkl0ZW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gQmxvYkl0ZW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4OTg4RTEwRDEx
QTM1MDhCMDBEQjczMkUgLyogQmxvYkl0ZW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQmxvYkl0ZW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMwMkIwQkMw
RDc5RjgyOTAwQzdFRTgzIC8qIFBhZ2VHcm91cC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBQYWdlR3JvdXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5MzAyQjBCRTBENzlGODJDMDBDN0VFODMgLyogUGFnZUdyb3VwLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFBhZ2VHcm91cC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk5MzA1QjI0QzA5OEYxQjZCMDBDMjg4NTUgLyogVGltZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVGltZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTE1NzgxLDYgKzE1Nzg1LDggQEAKIAkJCQlCQ0ZCMkY3NDA5N0EyRTFBMDBCQTcwM0QgLyogQXJl
bmEuY3BwICovLAogCQkJCUJDRkIyRjc1MDk3QTJFMUEwMEJBNzAzRCAvKiBBcmVuYS5oICovLAog
CQkJCTUxRTFFQ0IxMEM5MUM1NTYwMERDMjU1QiAvKiBBdXRvZHJhaW5lZFBvb2wuaCAqLywKKwkJ
CQk4OTg4RTEwQzExQTM1MDhCMDBEQjczMkUgLyogQmxvYkl0ZW0uY3BwICovLAorCQkJCTg5ODhF
MTBEMTFBMzUwOEIwMERCNzMyRSAvKiBCbG9iSXRlbS5oICovLAogCQkJCUJDQzhDRkNBMDk4NkNE
MjQwMDE0MEJGMiAvKiBDb2xvckRhdGEuZ3BlcmYgKi8sCiAJCQkJNDFEMDE1QzkwRjRCNUM3MTAw
NEE2NjJGIC8qIENvbnRlbnRUeXBlLmNwcCAqLywKIAkJCQk0MUQwMTVDODBGNEI1QzcxMDA0QTY2
MkYgLyogQ29udGVudFR5cGUuaCAqLywKQEAgLTE2ODE2LDYgKzE2ODIyLDcgQEAKIAkJCQlCQzVF
QjkyMDBFODIwNDA4MDBCMjU5NjUgLyogQmluZGluZ1VSSS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTg5OTQzMjgwQjQyMzM4ODAwRDdDODAyIC8qIEJpdG1hcEltYWdlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkyRUFGQUYwRjEwRTJBRjJEMDA3RUQzRDYgLyogQmxvYi5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJODk4OEUxMEYxMUEzNTA4QjAwREI3MzJFIC8qIEJsb2JJdGVtLmggaW4gSGVhZGVycyAqLywK
IAkJCQk5M0YxOTlCRTA4MjQ1RTU5MDAxRTlBQkMgLyogQmxvY2tFeGNlcHRpb25zLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzVFQjVFMTBFODFCRTg3MDBCMjU5NjUgLyogQm9yZGVyRGF0YS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkM1RUI1REIwRTgxQjdFQTAwQjI1OTY1IC8qIEJvcmRlclZhbHVl
LmggaW4gSGVhZGVycyAqLywKQEAgLTE5NjM1LDYgKzE5NjQyLDcgQEAKIAkJCQlCQzVFQjkxRjBF
ODIwNDA4MDBCMjU5NjUgLyogQmluZGluZ1VSSS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODk5
NDMyOTBCNDIzMzg4MDBEN0M4MDIgLyogQml0bWFwSW1hZ2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMkVBRkFGMEUxMEUyQUYyRDAwN0VEM0Q2IC8qIEJsb2IuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJODk4OEUxMEUxMUEzNTA4QjAwREI3MzJFIC8qIEJsb2JJdGVtLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTkzRjE5QUUxMDgyNDVFNTkwMDFFOUFCQyAvKiBCbG9ja0V4Y2VwdGlvbnMubW0gaW4g
U291cmNlcyAqLywKIAkJCQlCQ0VBNDg1NDA5N0Q5MzAyMDA5NEM5RTQgLyogYnJlYWtfbGluZXMu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzMDlEREEwOTlFNjQ5MjAwNTZFNTgxIC8qIEJyZWFr
QmxvY2txdW90ZUNvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yMDM4Myw4ICsyMDM5MSw4
IEBACiAJCQkJNTFFQzkyNjUwQ0U5MERENDAwRjkwMzA4IC8qIEpTQ3VzdG9tU1FMU3RhdGVtZW50
RXJyb3JDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTM0MTdDQTBDRUNGRjI1MDA0
OUNCREUgLyogSlNDdXN0b21Wb2lkQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTEw
QjkzQzMwQjczQzI5MTAwM0VEODkwIC8qIEpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcCBpbiBT
b3VyY2VzICovLAotCQkJCTFBRTgyRjhGMENBQUZBOUQwMDIyMzdBRSAvKiBKU0RhdGFiYXNlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUJDQ0U1OEFDMTA2MUU4Q0YwMDhGQjM1QSAvKiBKU0RhdGFi
YXNlQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTFBRTgyRjhGMENBQUZBOUQwMDIyMzdB
RSAvKiBKU0RhdGFiYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNzdEMTY5MEZGMTlGNTYw
MDcwODg3QiAvKiBKU0RhdGFHcmlkQ29sdW1uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNzdE
MTZCMEZGMTlGNTYwMDcwODg3QiAvKiBKU0RhdGFHcmlkQ29sdW1uTGlzdC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCQzc3RDE1MjBGRjE5QzczMDA3MDg4N0IgLyogSlNEYXRhR3JpZENvbHVtbkxp
c3RDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvQmxv
Yi5jcHAgYi9XZWJDb3JlL2h0bWwvQmxvYi5jcHAKaW5kZXggODNiYmRjMGM1MjY0ODQ1NDI2ODgx
OTI2MjE2ODRiNjI4MjAyNGJmNC4uYjFmMmRmN2EwMzFiZDQ0NmY0Y2QwY2Y5OTZiYzM5ZjFjOGY0
OTg0MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0Jsb2IuY3BwCisrKyBiL1dlYkNvcmUvaHRt
bC9CbG9iLmNwcApAQCAtMjksOTAgKzI5LDY4IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5o
IgorCiAjaW5jbHVkZSAiQmxvYi5oIgogCisjaW5jbHVkZSAiQmxvYkl0ZW0uaCIKICNpbmNsdWRl
ICJGaWxlU3lzdGVtLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotI2lmIEVOQUJMRShCTE9C
X1NMSUNFKQotY29uc3QgaW50IEJsb2I6OnRvRW5kT2ZGaWxlID0gLTE7Ci1jb25zdCBkb3VibGUg
QmxvYjo6ZG9Ob3RDaGVja0ZpbGVDaGFuZ2UgPSAwOwotI2VuZGlmCi0KIEJsb2I6OkJsb2IoY29u
c3QgU3RyaW5nJiBwYXRoKQotICAgIDogbV9wYXRoKHBhdGgpCi0jaWYgRU5BQkxFKEJMT0JfU0xJ
Q0UpCi0gICAgLCBtX3N0YXJ0KDApCi0gICAgLCBtX2xlbmd0aCh0b0VuZE9mRmlsZSkKLSAgICAs
IG1fc25hcHNob3RDYXB0dXJlZChmYWxzZSkKLSAgICAsIG1fc25hcHNob3RTaXplKDApCi0gICAg
LCBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZShkb05vdENoZWNrRmlsZUNoYW5nZSkKLSNlbmRp
ZgogeworICAgIC8vIE5vdGU6IHRoaXMgZG9lc24ndCBpbml0aWFsaXplIHRoZSB0eXBlIHVubGlr
ZSBGaWxlKHBhdGgpLgorICAgIGFwcGVuZChGaWxlQmxvYkl0ZW06OmNyZWF0ZShwYXRoKSk7CiB9
CiAKLSNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLUJsb2I6OkJsb2IoY29uc3QgU3RyaW5nJiBwYXRo
LCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgsIGxvbmcgbG9uZyBzbmFwc2hvdFNp
emUsIGRvdWJsZSBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUpCi0gICAgOiBtX3BhdGgocGF0aCkK
LSAgICAsIG1fc3RhcnQoc3RhcnQpCi0gICAgLCBtX2xlbmd0aChsZW5ndGgpCi0gICAgLCBtX3Nu
YXBzaG90Q2FwdHVyZWQodHJ1ZSkKLSAgICAsIG1fc25hcHNob3RTaXplKHNuYXBzaG90U2l6ZSkK
LSAgICAsIG1fc25hcHNob3RNb2RpZmljYXRpb25UaW1lKHNuYXBzaG90TW9kaWZpY2F0aW9uVGlt
ZSkKLXsKLSAgICBBU1NFUlQoc3RhcnQgPj0gMCAmJiBsZW5ndGggPj0gMCAmJiBzdGFydCArIGxl
bmd0aCA8PSBzbmFwc2hvdFNpemUgJiYgc25hcHNob3RNb2RpZmljYXRpb25UaW1lKTsKLX0KLSNl
bmRpZgotCiB1bnNpZ25lZCBsb25nIGxvbmcgQmxvYjo6c2l6ZSgpIGNvbnN0CiB7CiAgICAgLy8g
RklYTUU6IEphdmFTY3JpcHQgY2Fubm90IHJlcHJlc2VudCBzaXplcyBhcyBsYXJnZSBhcyB1bnNp
Z25lZCBsb25nIGxvbmcsIHdlIG5lZWQgdG8KICAgICAvLyBjb21lIHVwIHdpdGggYW4gZXhjZXB0
aW9uIHRvIHRocm93IGlmIGZpbGUgc2l6ZSBpcyBub3QgcmVwcmVzZXRhYmxlLgotI2lmIEVOQUJM
RShCTE9CX1NMSUNFKQotICAgIGlmIChtX3NuYXBzaG90Q2FwdHVyZWQpCi0gICAgICAgIHJldHVy
biBtX2xlbmd0aDsKLSNlbmRpZgotICAgIGxvbmcgbG9uZyBzaXplOwotICAgIGlmICghZ2V0Rmls
ZVNpemUobV9wYXRoLCBzaXplKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oc2l6ZSk7CisgICAgdW5zaWduZWQgbG9uZyBsb25n
IHNpemUgPSAwOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9pdGVtcy5zaXplKCk7ICsr
aSkKKyAgICAgICAgc2l6ZSArPSBtX2l0ZW1zW2ldLT5zaXplKCk7CisgICAgcmV0dXJuIHNpemU7
Cit9CisKK2NvbnN0IFN0cmluZyYgQmxvYjo6cGF0aCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1f
aXRlbXMuc2l6ZSgpID09IDEgJiYgbV9pdGVtc1swXS0+dG9GaWxlQmxvYkl0ZW0oKSk7CisgICAg
cmV0dXJuIG1faXRlbXNbMF0tPnRvRmlsZUJsb2JJdGVtKCktPnBhdGgoKTsKK30KKwordm9pZCBC
bG9iOjphcHBlbmQoUGFzc1JlZlB0cjxCbG9iSXRlbT4gaXRlbSkKK3sKKyAgICBtX2l0ZW1zLmFw
cGVuZChpdGVtKTsKIH0KIAogI2lmIEVOQUJMRShCTE9CX1NMSUNFKQogUGFzc1JlZlB0cjxCbG9i
PiBCbG9iOjpzbGljZShsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgpIGNvbnN0CiB7
Ci0gICAgLy8gV2hlbiB3ZSBzbGljZSBhIGZpbGUgZm9yIHRoZSBmaXJzdCB0aW1lLCB3ZSBvYnRh
aW4gYSBzbmFwc2hvdCBvZiB0aGUgZmlsZSBieSBjYXB0dXJpbmcgaXRzIGN1cnJlbnQgc2l6ZSBh
bmQgbW9kaWZpY2F0aW9uIHRpbWUuCi0gICAgLy8gVGhlIG1vZGlmaWNhdGlvbiB0aW1lIHdpbGwg
YmUgdXNlZCB0byB2ZXJpZnkgaWYgdGhlIGZpbGUgaGFzIGJlZW4gY2hhbmdlZCBvciBub3QsIHdo
ZW4gdGhlIHVuZGVybHlpbmcgZGF0YSBhcmUgYWNjZXNzZWQuCi0gICAgbG9uZyBsb25nIHNuYXBz
aG90U2l6ZTsKLSAgICBkb3VibGUgc25hcHNob3RNb2RpZmljYXRpb25UaW1lOwotICAgIGlmICht
X3NuYXBzaG90Q2FwdHVyZWQpIHsKLSAgICAgICAgc25hcHNob3RTaXplID0gbV9zbmFwc2hvdFNp
emU7Ci0gICAgICAgIHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSA9IG1fc25hcHNob3RNb2RpZmlj
YXRpb25UaW1lOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIElmIHdlIGZhaWwgdG8gcmV0cmll
dmUgdGhlIHNpemUgb3IgbW9kaWZpY2F0aW9uIHRpbWUsIHByb2JhYmx5IGR1ZSB0byB0aGF0IHRo
ZSBmaWxlIGhhcyBiZWVuIGRlbGV0ZWQsIGFuIGVtcHR5IGJsb2Igd2lsbCBiZSByZXR1cm5lZC4K
LSAgICAgICAgdGltZV90IG1vZGlmaWNhdGlvblRpbWU7Ci0gICAgICAgIGlmICghZ2V0RmlsZVNp
emUobV9wYXRoLCBzbmFwc2hvdFNpemUpIHx8ICFnZXRGaWxlTW9kaWZpY2F0aW9uVGltZShtX3Bh
dGgsIG1vZGlmaWNhdGlvblRpbWUpKSB7Ci0gICAgICAgICAgICBzbmFwc2hvdFNpemUgPSAwOwot
ICAgICAgICAgICAgc25hcHNob3RNb2RpZmljYXRpb25UaW1lID0gMDsKLSAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUgPSBtb2RpZmljYXRpb25UaW1l
OwotICAgIH0KLQotICAgIC8vIENsYW1wIHRoZSByYW5nZSBpZiBpdCBleGNlZWRzIHRoZSBzaXpl
IGxpbWl0LgogICAgIGlmIChzdGFydCA8IDApCiAgICAgICAgIHN0YXJ0ID0gMDsKICAgICBpZiAo
bGVuZ3RoIDwgMCkKICAgICAgICAgbGVuZ3RoID0gMDsKIAotICAgIGlmIChzdGFydCA+IHNuYXBz
aG90U2l6ZSkgeworICAgIC8vIENsYW1wIHRoZSByYW5nZSBpZiBpdCBleGNlZWRzIHRoZSBzaXpl
IGxpbWl0LgorICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbFNpemUgPSBzaXplKCk7CisgICAg
aWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oc3RhcnQpID4gdG90YWxTaXplKSB7
CiAgICAgICAgIHN0YXJ0ID0gMDsKICAgICAgICAgbGVuZ3RoID0gMDsKLSAgICB9IGVsc2UgaWYg
KHN0YXJ0ICsgbGVuZ3RoID4gc25hcHNob3RTaXplKQotICAgICAgICBsZW5ndGggPSBzbmFwc2hv
dFNpemUgLSBzdGFydDsKKyAgICB9IGVsc2UgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcg
bG9uZz4oc3RhcnQgKyBsZW5ndGgpID4gdG90YWxTaXplKQorICAgICAgICBsZW5ndGggPSB0b3Rh
bFNpemUgLSBzdGFydDsKIAotICAgIHJldHVybiBhZG9wdFJlZihuZXcgQmxvYihtX3BhdGgsIG1f
c3RhcnQgKyBzdGFydCwgbGVuZ3RoLCBzbmFwc2hvdFNpemUsIHNuYXBzaG90TW9kaWZpY2F0aW9u
VGltZSkpOworICAgIHNpemVfdCBpID0gMDsKKyAgICBSZWZQdHI8QmxvYj4gYmxvYiA9IEJsb2I6
OmNyZWF0ZSgpOworICAgIGZvciAoOyBpIDwgbV9pdGVtcy5zaXplKCkgJiYgc3RhdGljX2Nhc3Q8
dW5zaWduZWQgbG9uZyBsb25nPihzdGFydCkgPj0gbV9pdGVtc1tpXS0+c2l6ZSgpOyArK2kpCisg
ICAgICAgIHN0YXJ0IC09IG1faXRlbXNbaV0tPnNpemUoKTsKKyAgICBmb3IgKDsgbGVuZ3RoID4g
MCAmJiBpIDwgbV9pdGVtcy5zaXplKCk7ICsraSkgeworICAgICAgICBibG9iLT5tX2l0ZW1zLmFw
cGVuZChtX2l0ZW1zW2ldLT5zbGljZShzdGFydCwgbGVuZ3RoKSk7CisgICAgICAgIGxlbmd0aCAt
PSBibG9iLT5tX2l0ZW1zLmxhc3QoKS0+c2l6ZSgpOworICAgICAgICBzdGFydCA9IDA7CisgICAg
fQorICAgIHJldHVybiBibG9iLnJlbGVhc2UoKTsKIH0KLSNlbmRpZgorI2VuZGlmIC8vIEVOQUJM
RShCTE9CX1NMSUNFKQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2h0bWwvQmxvYi5oIGIvV2ViQ29yZS9odG1sL0Jsb2IuaAppbmRleCBlOGI1ZjNmZGYwNjlh
MmI0ODc2ZWQxNmFiODFiMjJmMGZmMDM4OTcwLi4zOTE3N2I1MWVlOWQwNzg2ODNmMjAyYTY1MWRm
NTgyMzhmMjc0OTU3IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvQmxvYi5oCisrKyBiL1dlYkNv
cmUvaHRtbC9CbG9iLmgKQEAgLTMxLDIxICszMSwyNCBAQAogI2lmbmRlZiBCbG9iX2gKICNkZWZp
bmUgQmxvYl9oCiAKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiQmxvYkl0
ZW0uaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUgPHRpbWUuaD4KICNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Cisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEJs
b2IgOiBwdWJsaWMgUmVmQ291bnRlZDxCbG9iPiB7CiBwdWJsaWM6Ci0jaWYgRU5BQkxFKEJMT0Jf
U0xJQ0UpCi0gICAgc3RhdGljIGNvbnN0IGludCB0b0VuZE9mRmlsZTsKLSAgICBzdGF0aWMgY29u
c3QgZG91YmxlIGRvTm90Q2hlY2tGaWxlQ2hhbmdlOwotI2VuZGlmCisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8QmxvYj4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
QmxvYigpKTsKKyAgICB9CiAKKyAgICAvLyBGSVhNRTogRGVwcmVjYXRlZCBtZXRob2QuICBUaGlz
IGlzIGNhbGxlZCBvbmx5IGZyb20KKyAgICAvLyBiaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0
VmFsdWUuY3BwIGFuZCB0aGUgdXNhZ2UgaW4gaXQgd2lsbCBiZWNvbWUgaW52YWxpZCBvbmNlCisg
ICAgLy8gQmxvYkJ1aWxkZXIgaXMgaW50cm9kdWNlZC4KICAgICBzdGF0aWMgUGFzc1JlZlB0cjxC
bG9iPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBwYXRoKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBCbG9iKHBhdGgpKTsKQEAgLTUzLDQ3ICs1NiwyOCBAQCBwdWJsaWM6CiAKICAg
ICB2aXJ0dWFsIH5CbG9iKCkgeyB9CiAKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSgpIGNv
bnN0OworICAgIGNvbnN0IFN0cmluZyYgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQog
ICAgIHZpcnR1YWwgYm9vbCBpc0ZpbGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCi0jaWYg
RU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgUGFzc1JlZlB0cjxCbG9iPiBzbGljZShsb25nIGxvbmcg
c3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgpIGNvbnN0OwotI2VuZGlmCi0KLSAgICBjb25zdCBTdHJp
bmcmIHBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0KLSAgICB1bnNpZ25lZCBsb25nIGxv
bmcgc2l6ZSgpIGNvbnN0OwotI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgIGxvbmcgbG9uZyBz
dGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnQ7IH0KLSAgICBsb25nIGxvbmcgbGVuZ3RoKCkg
Y29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KLSAgICBkb3VibGUgbW9kaWZpY2F0aW9uVGltZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc25hcHNob3RNb2RpZmljYXRpb25UaW1lOyB9Ci0jZW5kaWYKKyAg
ICAvLyBGSVhNRTogRGVwcmVjYXRlZCBtZXRob2QuCisgICAgY29uc3QgU3RyaW5nJiBwYXRoKCkg
Y29uc3Q7CiAKLXByb3RlY3RlZDoKLSAgICBCbG9iKGNvbnN0IFN0cmluZyYgcGF0aCk7CisgICAg
dm9pZCBhcHBlbmQoUGFzc1JlZlB0cjxCbG9iSXRlbT4pOworICAgIGNvbnN0IEJsb2JJdGVtTGlz
dCYgaXRlbXMoKSBjb25zdCB7IHJldHVybiBtX2l0ZW1zOyB9CiAKLXByaXZhdGU6CiAjaWYgRU5B
QkxFKEJMT0JfU0xJQ0UpCi0gICAgQmxvYihjb25zdCBTdHJpbmcmIHBhdGgsIGxvbmcgbG9uZyBz
dGFydCwgbG9uZyBsb25nIGxlbmd0aCwgbG9uZyBsb25nIHNuYXBzaG90U2l6ZSwgZG91YmxlIHNu
YXBzaG90TW9kaWZpY2F0aW9uVGltZSk7CisgICAgUGFzc1JlZlB0cjxCbG9iPiBzbGljZShsb25n
IGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgpIGNvbnN0OwogI2VuZGlmCiAKLSAgICAvLyBU
aGUgdW5kZXJseWluZyBwYXRoIG9mIHRoZSBmaWxlLWJhc2VkIGJsb2IuIAotICAgIFN0cmluZyBt
X3BhdGg7Ci0KLSNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAgICAvLyBUaGUgc3RhcnRpbmcgcG9z
aXRpb24gb2YgdGhlIGZpbGUtYmFzZWQgYmxvYi4KLSAgICBsb25nIGxvbmcgbV9zdGFydDsKLQot
ICAgIC8vIFRoZSBsZW5ndGggb2YgdGhlIGZpbGUtYmFzZWQgYmxvYi4gVGhlIHZhbHVlIG9mIC0x
IG1lYW5zIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUuCi0gICAgbG9uZyBsb25nIG1fbGVuZ3RoOwot
Ci0gICAgLy8gQSBmbGFnIHRvIHRlbGwgaWYgYSBzbmFwc2hvdCBoYXMgYmVlbiBjYXB0dXJlZC4K
LSAgICBib29sIG1fc25hcHNob3RDYXB0dXJlZDsKK3Byb3RlY3RlZDoKKyAgICBCbG9iKCkgeyB9
CiAKLSAgICAvLyBUaGUgc2l6ZSBvZiB0aGUgZmlsZSB3aGVuIGEgc25hcHNob3QgaXMgY2FwdHVy
ZWQuIEl0IGNhbiBiZSAwIGlmIHRoZSBmaWxlIGlzIGVtcHR5LgotICAgIGxvbmcgbG9uZyBtX3Nu
YXBzaG90U2l6ZTsKKyAgICAvLyBGSVhNRTogRGVwcmVjYXRlZCBjb25zdHJ1Y3Rvci4gIFNlZSBh
bHNvIHRoZSBjb21tZW50IGZvciBCbG9iOjpjcmVhdGUocGF0aCkuCisgICAgQmxvYihjb25zdCBT
dHJpbmcmIHBhdGgpOwogCi0gICAgLy8gVGhlIGxhc3QgbW9kaWZpY2F0aW9uIHRpbWUgb2YgdGhl
IGZpbGUgd2hlbiBhIHNuYXBzaG90IGlzIGNhcHR1cmVkLiBUaGUgdmFsdWUgb2YgMCBhbHNvIG1l
YW5zIHRoYXQgdGhlIHNuYXBzaG90IGlzIG5vdCBjYXB0dXJlZC4KLSAgICBkb3VibGUgbV9zbmFw
c2hvdE1vZGlmaWNhdGlvblRpbWU7Ci0jZW5kaWYKKyAgICBCbG9iSXRlbUxpc3QgbV9pdGVtczsK
KyAgICBTdHJpbmcgbV90eXBlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9odG1sL0ZpbGUuY3BwIGIvV2ViQ29yZS9odG1sL0ZpbGUuY3BwCmluZGV4
IDk3ZmRjNDU3OGQ3NGIyMjVlNTk0NmY0ZDZhZWYyNTY1MjU0NDNhZTQuLjJjOWNlNTNiODNjYjBk
Zjc5YTg1OTUyMmRjOTE2ZjI1NWJkODRjYzMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9GaWxl
LmNwcAorKysgYi9XZWJDb3JlL2h0bWwvRmlsZS5jcHAKQEAgLTMzLDEyICszMywxNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIEZpbGU6OkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKQogICAgIDog
QmxvYihwYXRoKQotICAgICwgbV9uYW1lKHBhdGhHZXRGaWxlTmFtZShwYXRoKSkKIHsKICAgICAv
LyBXZSBkb24ndCB1c2UgTUlNRVR5cGVSZWdpc3RyeTo6Z2V0TUlNRVR5cGVGb3JQYXRoKCkgYmVj
YXVzZSBpdCByZXR1cm5zICJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iIHVwb24gZmFpbHVyZS4K
LSAgICBpbnQgaW5kZXggPSBtX25hbWUucmV2ZXJzZUZpbmQoJy4nKTsKKyAgICBjb25zdCBTdHJp
bmcmIGZpbGVOYW1lID0gbmFtZSgpOworICAgIGludCBpbmRleCA9IGZpbGVOYW1lLnJldmVyc2VG
aW5kKCcuJyk7CiAgICAgaWYgKGluZGV4ICE9IC0xKQotICAgICAgICBtX3R5cGUgPSBNSU1FVHlw
ZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZvckV4dGVuc2lvbihtX25hbWUuc3Vic3RyaW5nKGluZGV4
ICsgMSkpOworICAgICAgICBtX3R5cGUgPSBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZv
ckV4dGVuc2lvbihmaWxlTmFtZS5zdWJzdHJpbmcoaW5kZXggKyAxKSk7Cit9CisKK2NvbnN0IFN0
cmluZyYgRmlsZTo6bmFtZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGl0ZW1zKCkuYXQoMCktPnRv
RmlsZUJsb2JJdGVtKCktPm5hbWUoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9odG1sL0ZpbGUuaCBiL1dlYkNvcmUvaHRtbC9GaWxlLmgKaW5kZXgg
MDY1ZGQ4NmE3YjFlYmY3N2ZiNDA2NDZmOWM2ZTg3MDQ2OWQ3ZWIwOS4uNTgyZGIyODUwM2JmZmYy
Yjk1OGUzZDUyNTVlZjdhYmU5YTYwNTY5YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0ZpbGUu
aAorKysgYi9XZWJDb3JlL2h0bWwvRmlsZS5oCkBAIC00MSwxOCArNDEsMTQgQEAgcHVibGljOgog
CiAgICAgdmlydHVhbCBib29sIGlzRmlsZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAotICAg
IGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQotICAgIGNvbnN0
IFN0cmluZyYgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgIGNvbnN0IFN0cmlu
ZyYgbmFtZSgpIGNvbnN0OwogCiAgICAgLy8gRklYTUU6IG9ic29sZXRlIGF0dHJpYnV0ZXMuIFRv
IGJlIHJlbW92ZWQuCi0gICAgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSgpIGNvbnN0IHsgcmV0dXJu
IG1fbmFtZTsgfQorICAgIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUoKSBjb25zdCB7IHJldHVybiBu
YW1lKCk7IH0KICAgICB1bnNpZ25lZCBsb25nIGxvbmcgZmlsZVNpemUoKSBjb25zdCB7IHJldHVy
biBzaXplKCk7IH0KIAogcHJpdmF0ZToKICAgICBGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCk7Ci0K
LSAgICBTdHJpbmcgbV9uYW1lOwotICAgIFN0cmluZyBtX3R5cGU7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvRmlsZVJlYWRlci5jcHAgYi9X
ZWJDb3JlL2h0bWwvRmlsZVJlYWRlci5jcHAKaW5kZXggMzQ0MjM0MjI3NTgxMjdiZWQ3NzM4NzJj
NGZmMzFmYTAxZGZhYzRlNC4uMmUwMjBjMTEzNTA1Y2NiNmY0NDNhOGQyNTZiMGU5YTFiYWIwODAz
NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0ZpbGVSZWFkZXIuY3BwCisrKyBiL1dlYkNvcmUv
aHRtbC9GaWxlUmVhZGVyLmNwcApAQCAtODUsNiArODUsNyBAQCB2b2lkIEZpbGVSZWFkZXI6OnN0
b3AoKQogCiB2b2lkIEZpbGVSZWFkZXI6OnJlYWRBc0JpbmFyeVN0cmluZyhCbG9iKiBmaWxlQmxv
YikKIHsKKyAgICAvLyBGSVhNRTogbmVlZHMgdG8gaGFuZGxlIG5vbi1maWxlIGJsb2JzLgogICAg
IExPRyhGaWxlQVBJLCAiRmlsZVJlYWRlcjogcmVhZGluZyBhcyBiaW5hcnk6ICVzXG4iLCBmaWxl
QmxvYi0+cGF0aCgpLnV0ZjgoKS5kYXRhKCkpOwogCiAgICAgcmVhZEludGVybmFsKGZpbGVCbG9i
LCBSZWFkRmlsZUFzQmluYXJ5U3RyaW5nKTsKQEAgLTkyLDYgKzkzLDcgQEAgdm9pZCBGaWxlUmVh
ZGVyOjpyZWFkQXNCaW5hcnlTdHJpbmcoQmxvYiogZmlsZUJsb2IpCiAKIHZvaWQgRmlsZVJlYWRl
cjo6cmVhZEFzVGV4dChCbG9iKiBmaWxlQmxvYiwgY29uc3QgU3RyaW5nJiBlbmNvZGluZykKIHsK
KyAgICAvLyBGSVhNRTogbmVlZHMgdG8gaGFuZGxlIG5vbi1maWxlIGJsb2JzLgogICAgIExPRyhG
aWxlQVBJLCAiRmlsZVJlYWRlcjogcmVhZGluZyBhcyB0ZXh0OiAlc1xuIiwgZmlsZUJsb2ItPnBh
dGgoKS51dGY4KCkuZGF0YSgpKTsKIAogICAgIGlmICghZW5jb2RpbmcuaXNFbXB0eSgpKQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9odG1sL0ZpbGVTdHJlYW0uY3BwIGIvV2ViQ29yZS9odG1sL0ZpbGVT
dHJlYW0uY3BwCmluZGV4IDcwODlmNjE2MTU0ZTRiMTBhMzI3NzNlMDMzNTZhNzkzNjQ1OGY5N2Yu
LmY4NTliNjNhMWMxYjM0YzM2ZTc0YzA5MTI0ZmEwOTEzZjZhZjY3MDQgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvaHRtbC9GaWxlU3RyZWFtLmNwcAorKysgYi9XZWJDb3JlL2h0bWwvRmlsZVN0cmVhbS5j
cHAKQEAgLTcyLDQ4ICs3Miw1MyBAQCB2b2lkIEZpbGVTdHJlYW06Om9wZW5Gb3JSZWFkKEJsb2Iq
IGJsb2IpCiAgICAgaWYgKGlzSGFuZGxlVmFsaWQobV9oYW5kbGUpKQogICAgICAgICByZXR1cm47
CiAKKyAgICAvLyBGSVhNRTogTmVlZCB0byBoYW5kbGUgbXVsdGlwbGUgaXRlbXMgdGhhdCBtYXkg
aW5jbHVkZSBub24tZmlsZSBvbmVzIHdoZW4gQmxvYkJ1aWxkZXIgaXMgaW50cm9kdWNlZC4KKyAg
ICBBU1NFUlQoYmxvYi0+aXRlbXMoKS5zaXplKCkgPj0gMSk7CisgICAgY29uc3QgRmlsZUJsb2JJ
dGVtKiBmaWxlSXRlbSA9IGJsb2ItPml0ZW1zKCkuYXQoMCktPnRvRmlsZUJsb2JJdGVtKCk7Cisg
ICAgaWYgKCFmaWxlSXRlbSkgeworICAgICAgICBBU1NFUlQoZmFsc2UpOworICAgICAgICBtX2Ns
aWVudC0+ZGlkRmFpbChOT1RfUkVBREFCTEVfRVJSKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KwogICAgIC8vIENoZWNrIGlmIHRoZSBmaWxlIGV4aXN0cyBieSBxdWVyeWluZyBpdHMgbW9kaWZp
Y2F0aW9uIHRpbWUuIFdlIGNob29zZSBub3QgdG8gY2FsbCBmaWxlRXhpc3RzKCkgaW4gb3JkZXIg
dG8gc2F2ZSBhbgogICAgIC8vIGV4dHJhIGZpbGUgc3lzdGVtIGNhbGwgd2hlbiB0aGUgbW9kaWZp
Y2F0aW9uIHRpbWUgaXMgbmVlZGVkIHRvIGNoZWNrIHRoZSB2YWxpZGl0eSBvZiB0aGUgc2xpY2Vk
IGZpbGUgYmxvYi4KICAgICAvLyBQZXIgdGhlIHNwZWMsIHdlIG5lZWQgdG8gcmV0dXJuIGRpZmZl
cmVudCBlcnJvciBjb2RlcyB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gbm9uLWV4aXN0ZW50IGZp
bGUgYW5kIHBlcm1pc3Npb24gZXJyb3IuCiAgICAgLy8gb3BlbkZpbGUoKSBjb3VsZCBub3QgdGVs
bCB1c2UgdGhlIGZhaWx1cmUgcmVhc29uLgogICAgIHRpbWVfdCBjdXJyZW50TW9kaWZpY2F0aW9u
VGltZTsKLSAgICBpZiAoIWdldEZpbGVNb2RpZmljYXRpb25UaW1lKGJsb2ItPnBhdGgoKSwgY3Vy
cmVudE1vZGlmaWNhdGlvblRpbWUpKSB7CisgICAgaWYgKCFnZXRGaWxlTW9kaWZpY2F0aW9uVGlt
ZShmaWxlSXRlbS0+cGF0aCgpLCBjdXJyZW50TW9kaWZpY2F0aW9uVGltZSkpIHsKICAgICAgICAg
bV9jbGllbnQtPmRpZEZhaWwoTk9UX0ZPVU5EX0VSUik7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKICAgICAvLyBPcGVuIHRoZSBmaWxlIGJsb2IuCi0gICAgbV9oYW5kbGUgPSBvcGVuRmlsZShi
bG9iLT5wYXRoKCksIE9wZW5Gb3JSZWFkKTsKKyAgICBtX2hhbmRsZSA9IG9wZW5GaWxlKGZpbGVJ
dGVtLT5wYXRoKCksIE9wZW5Gb3JSZWFkKTsKICAgICBpZiAoIWlzSGFuZGxlVmFsaWQobV9oYW5k
bGUpKSB7CiAgICAgICAgIG1fY2xpZW50LT5kaWRGYWlsKE5PVF9SRUFEQUJMRV9FUlIpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCiAjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgLy8gQ2hl
Y2sgdGhlIG1vZGlmaWNhdGlvbnQgdGltZSBmb3IgdGhlIHBvc3NpYmxlIGZpbGUgY2hhbmdlLgot
ICAgIGlmIChibG9iLT5tb2RpZmljYXRpb25UaW1lKCkgIT0gQmxvYjo6ZG9Ob3RDaGVja0ZpbGVD
aGFuZ2UgJiYgc3RhdGljX2Nhc3Q8dGltZV90PihibG9iLT5tb2RpZmljYXRpb25UaW1lKCkpICE9
IGN1cnJlbnRNb2RpZmljYXRpb25UaW1lKSB7Ci0gICAgICAgIG1fY2xpZW50LT5kaWRGYWlsKE5P
VF9SRUFEQUJMRV9FUlIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gSnVtcCB0
byB0aGUgYmVnaW5uaW5nIHBvc2l0aW9uIGlmIHRoZSBmaWxlIGhhcyBiZWVuIHNsaWNlZC4KLSAg
ICBpZiAoYmxvYi0+c3RhcnQoKSA+IDApIHsKLSAgICAgICAgaWYgKCFzZWVrRmlsZShtX2hhbmRs
ZSwgYmxvYi0+c3RhcnQoKSwgU2Vla0Zyb21CZWdpbm5pbmcpKSB7CisgICAgY29uc3QgRmlsZVJh
bmdlQmxvYkl0ZW0qIGZpbGVSYW5nZUl0ZW0gPSBmaWxlSXRlbS0+dG9GaWxlUmFuZ2VCbG9iSXRl
bSgpOworICAgIGlmIChmaWxlUmFuZ2VJdGVtKSB7CisgICAgICAgIC8vIENoZWNrIHRoZSBtb2Rp
ZmljYXRpb250IHRpbWUgZm9yIHRoZSBwb3NzaWJsZSBmaWxlIGNoYW5nZS4KKyAgICAgICAgaWYg
KHN0YXRpY19jYXN0PHRpbWVfdD4oZmlsZVJhbmdlSXRlbS0+c25hcHNob3RNb2RpZmljYXRpb25U
aW1lKCkpICE9IGN1cnJlbnRNb2RpZmljYXRpb25UaW1lKSB7CiAgICAgICAgICAgICBtX2NsaWVu
dC0+ZGlkRmFpbChOT1RfUkVBREFCTEVfRVJSKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQorCisgICAgICAgIC8vIEp1bXAgdG8gdGhlIGJlZ2lubmluZyBwb3NpdGlvbiBpZiB0aGUg
ZmlsZSBoYXMgYmVlbiBzbGljZWQuCisgICAgICAgIGlmIChmaWxlUmFuZ2VJdGVtLT5zdGFydCgp
ID4gMCkgeworICAgICAgICAgICAgaWYgKHNlZWtGaWxlKG1faGFuZGxlLCBmaWxlUmFuZ2VJdGVt
LT5zdGFydCgpLCBTZWVrRnJvbUJlZ2lubmluZykgPCAwKSB7CisgICAgICAgICAgICAgICAgbV9j
bGllbnQtPmRpZEZhaWwoTk9UX1JFQURBQkxFX0VSUik7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQogI2VuZGlmCiAKICAgICAvLyBHZXQg
dGhlIHNpemUuCi0jaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgbV90b3RhbEJ5dGVzVG9SZWFk
ID0gYmxvYi0+bGVuZ3RoKCk7Ci0gICAgaWYgKG1fdG90YWxCeXRlc1RvUmVhZCA9PSBCbG9iOjp0
b0VuZE9mRmlsZSkKLSAgICAgICAgbV90b3RhbEJ5dGVzVG9SZWFkID0gYmxvYi0+c2l6ZSgpIC0g
YmxvYi0+c3RhcnQoKTsKLSNlbHNlCi0gICAgbV90b3RhbCA9IGJsb2ItPnNpemUoKTsKLSNlbmRp
ZgotCisgICAgbV90b3RhbEJ5dGVzVG9SZWFkID0gYmxvYi0+c2l6ZSgpOwogICAgIG1fY2xpZW50
LT5kaWRHZXRTaXplKG1fdG90YWxCeXRlc1RvUmVhZCk7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvaHRtbC9Gb3JtRGF0YUxpc3QuY3BwIGIvV2ViQ29yZS9odG1sL0Zvcm1EYXRhTGlzdC5jcHAK
aW5kZXggMjgxYzlmZTQxOGUxYzQ4MzNiYjg3ZjgyZjc0ZjFjYzRkNzIyZDU3Yy4uMGY2MjU5NWVk
NDFjMjMxOWJkYjc5YjU3YmJkN2NhOTQ2MjJiODJhYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1s
L0Zvcm1EYXRhTGlzdC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0Zvcm1EYXRhTGlzdC5jcHAKQEAg
LTI4LDY0ICsyOCwyMiBAQCBGb3JtRGF0YUxpc3Q6OkZvcm1EYXRhTGlzdChjb25zdCBUZXh0RW5j
b2RpbmcmIGMpCiB7CiB9CiAKLXZvaWQgRm9ybURhdGFMaXN0OjphcHBlbmRTdHJpbmcoY29uc3Qg
Q1N0cmluZyYgcykKK3ZvaWQgRm9ybURhdGFMaXN0OjphcHBlbmRTdHJpbmcoY29uc3QgU3RyaW5n
JiBzKQogewotICAgIG1fbGlzdC5hcHBlbmQocyk7CisgICAgbV9pdGVtcy5hcHBlbmQoU3RyaW5n
QmxvYkl0ZW06OmNyZWF0ZShzLCBFbmRpbmdDUkxGLCBtX2VuY29kaW5nKSk7CiB9CiAKLS8vIENo
YW5nZSBwbGFpbiBDUiBhbmQgcGxhaW4gTEYgdG8gQ1JMRiBwYWlycy4KLXN0YXRpYyBDU3RyaW5n
IGZpeExpbmVCcmVha3MoY29uc3QgQ1N0cmluZyYgcykKK3ZvaWQgRm9ybURhdGFMaXN0OjphcHBl
bmRTdHJpbmcoY29uc3QgQ1N0cmluZyYgcykKIHsKLSAgICAvLyBDb21wdXRlIHRoZSBsZW5ndGgu
Ci0gICAgdW5zaWduZWQgbmV3TGVuID0gMDsKLSAgICBjb25zdCBjaGFyKiBwID0gcy5kYXRhKCk7
Ci0gICAgd2hpbGUgKGNoYXIgYyA9ICpwKyspIHsKLSAgICAgICAgaWYgKGMgPT0gJ1xyJykgewot
ICAgICAgICAgICAgLy8gU2FmZSB0byBsb29rIGFoZWFkIGJlY2F1c2Ugb2YgdHJhaWxpbmcgJ1ww
Jy4KLSAgICAgICAgICAgIGlmICgqcCAhPSAnXG4nKSB7Ci0gICAgICAgICAgICAgICAgLy8gVHVy
biBDUiBpbnRvIENSTEYuCi0gICAgICAgICAgICAgICAgbmV3TGVuICs9IDI7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoYyA9PSAnXG4nKSB7Ci0gICAgICAgICAgICAvLyBUdXJu
IExGIGludG8gQ1JMRi4KLSAgICAgICAgICAgIG5ld0xlbiArPSAyOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgLy8gTGVhdmUgb3RoZXIgY2hhcmFjdGVycyBhbG9uZS4KLSAgICAgICAg
ICAgIG5ld0xlbiArPSAxOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChuZXdMZW4gPT0gcy5s
ZW5ndGgoKSkgewotICAgICAgICByZXR1cm4gczsKLSAgICB9Ci0gICAgCi0gICAgLy8gTWFrZSBh
IGNvcHkgb2YgdGhlIHN0cmluZy4KLSAgICBwID0gcy5kYXRhKCk7Ci0gICAgY2hhciogcTsKLSAg
ICBDU3RyaW5nIHJlc3VsdCA9IENTdHJpbmc6Om5ld1VuaW5pdGlhbGl6ZWQobmV3TGVuLCBxKTsK
LSAgICB3aGlsZSAoY2hhciBjID0gKnArKykgewotICAgICAgICBpZiAoYyA9PSAnXHInKSB7Ci0g
ICAgICAgICAgICAvLyBTYWZlIHRvIGxvb2sgYWhlYWQgYmVjYXVzZSBvZiB0cmFpbGluZyAnXDAn
LgotICAgICAgICAgICAgaWYgKCpwICE9ICdcbicpIHsKLSAgICAgICAgICAgICAgICAvLyBUdXJu
IENSIGludG8gQ1JMRi4KLSAgICAgICAgICAgICAgICAqcSsrID0gJ1xyJzsKLSAgICAgICAgICAg
ICAgICAqcSsrID0gJ1xuJzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChjID09
ICdcbicpIHsKLSAgICAgICAgICAgIC8vIFR1cm4gTEYgaW50byBDUkxGLgotICAgICAgICAgICAg
KnErKyA9ICdccic7Ci0gICAgICAgICAgICAqcSsrID0gJ1xuJzsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIC8vIExlYXZlIG90aGVyIGNoYXJhY3RlcnMgYWxvbmUuCi0gICAgICAgICAg
ICAqcSsrID0gYzsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OworICAgIG1f
aXRlbXMuYXBwZW5kKFN0cmluZ0Jsb2JJdGVtOjpjcmVhdGUocykpOwogfQogCi12b2lkIEZvcm1E
YXRhTGlzdDo6YXBwZW5kU3RyaW5nKGNvbnN0IFN0cmluZyYgcykKK3ZvaWQgRm9ybURhdGFMaXN0
OjphcHBlbmRCbG9iKGNvbnN0IFN0cmluZyYga2V5LCBQYXNzUmVmUHRyPEJsb2I+IGJsb2IpCiB7
Ci0gICAgQ1N0cmluZyBjc3RyID0gZml4TGluZUJyZWFrcyhtX2VuY29kaW5nLmVuY29kZShzLmNo
YXJhY3RlcnMoKSwgcy5sZW5ndGgoKSwgRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpKTsKLSAgICBt
X2xpc3QuYXBwZW5kKGNzdHIpOworICAgIGFwcGVuZFN0cmluZyhrZXkpOworICAgIGNvbnN0IEJs
b2JJdGVtTGlzdCYgaXRlbXMgPSBibG9iLT5pdGVtcygpOworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgaXRlbXMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1faXRlbXMuYXBwZW5kKGl0ZW1zLmF0
KGkpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9Gb3Jt
RGF0YUxpc3QuaCBiL1dlYkNvcmUvaHRtbC9Gb3JtRGF0YUxpc3QuaAppbmRleCA4ZWNmNjRlZTkz
YWQ1MjRmNDc5MjFmMWQ4MjJmOWEwOGJhMDEzZDdjLi5mNGJiOTA1MTUwZmFkNzhiMDFhZTVhOTY4
M2ZhZDk5ODQzOTBlNmJlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvRm9ybURhdGFMaXN0LmgK
KysrIGIvV2ViQ29yZS9odG1sL0Zvcm1EYXRhTGlzdC5oCkBAIC00NiwyNyArNDYsOSBAQCBwdWJs
aWM6CiAgICAgICAgIGFwcGVuZFN0cmluZyhrZXkpOwogICAgICAgICBhcHBlbmRTdHJpbmcoU3Ry
aW5nOjpudW1iZXIodmFsdWUpKTsKICAgICB9Ci0gICAgdm9pZCBhcHBlbmRCbG9iKGNvbnN0IFN0
cmluZyYga2V5LCBQYXNzUmVmUHRyPEJsb2I+IGJsb2IpCi0gICAgewotICAgICAgICBhcHBlbmRT
dHJpbmcoa2V5KTsKLSAgICAgICAgbV9saXN0LmFwcGVuZChibG9iKTsKLSAgICB9Ci0KLSAgICBj
bGFzcyBJdGVtIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEl0ZW0oKSB7IH0KLSAgICAgICAgSXRl
bShjb25zdCBXVEY6OkNTdHJpbmcmIGRhdGEpIDogbV9kYXRhKGRhdGEpIHsgfQotICAgICAgICBJ
dGVtKFBhc3NSZWZQdHI8QmxvYj4gYmxvYikgOiBtX2Jsb2IoYmxvYikgeyB9Ci0KLSAgICAgICAg
Y29uc3QgV1RGOjpDU3RyaW5nJiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9Ci0gICAg
ICAgIEJsb2IqIGJsb2IoKSBjb25zdCB7IHJldHVybiBtX2Jsb2IuZ2V0KCk7IH0KLQotICAgIHBy
aXZhdGU6Ci0gICAgICAgIFdURjo6Q1N0cmluZyBtX2RhdGE7Ci0gICAgICAgIFJlZlB0cjxCbG9i
PiBtX2Jsb2I7Ci0gICAgfTsKKyAgICB2b2lkIGFwcGVuZEJsb2IoY29uc3QgU3RyaW5nJiBrZXks
IFBhc3NSZWZQdHI8QmxvYj4pOwogCi0gICAgY29uc3QgVmVjdG9yPEl0ZW0+JiBsaXN0KCkgY29u
c3QgeyByZXR1cm4gbV9saXN0OyB9CisgICAgY29uc3QgQmxvYkl0ZW1MaXN0JiBpdGVtcygpIGNv
bnN0IHsgcmV0dXJuIG1faXRlbXM7IH0KICAgICBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5n
KCkgY29uc3QgeyByZXR1cm4gbV9lbmNvZGluZzsgfQogCiBwcml2YXRlOgpAQCAtNzQsNyArNTYs
NyBAQCBwcml2YXRlOgogICAgIHZvaWQgYXBwZW5kU3RyaW5nKGNvbnN0IFN0cmluZyYpOwogCiAg
ICAgVGV4dEVuY29kaW5nIG1fZW5jb2Rpbmc7Ci0gICAgVmVjdG9yPEl0ZW0+IG1fbGlzdDsKKyAg
ICBCbG9iSXRlbUxpc3QgbV9pdGVtczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwIGIvV2ViQ29yZS9odG1s
L0hUTUxGb3JtRWxlbWVudC5jcHAKaW5kZXggYzg0NDU0ZDE1OWRiZWNhNWE0ZTM1Yjk1MmFiZWFh
MzQ5OWJhNTFmMy4uNzM4NWNlMzc4NTJjMzdlNWVjMTViNTFkMTQ4OWJmYzM5MTlmMmVhMyAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9o
dG1sL0hUTUxGb3JtRWxlbWVudC5jcHAKQEAgLTIxMCw3ICsyMTAsNyBAQCBQYXNzUmVmUHRyPEZv
cm1EYXRhPiBIVE1MRm9ybUVsZW1lbnQ6OmNyZWF0ZUZvcm1EYXRhKCkKICAgICAgICAgICAgIGNv
bnRyb2wtPmFwcGVuZEZvcm1EYXRhKCpkb21Gb3JtRGF0YSwgbV9mb3JtRGF0YUJ1aWxkZXIuaXNN
dWx0aVBhcnRGb3JtKCkpOwogICAgIH0KIAotICAgIFJlZlB0cjxGb3JtRGF0YT4gcmVzdWx0ID0g
KG1fZm9ybURhdGFCdWlsZGVyLmlzTXVsdGlQYXJ0Rm9ybSgpKSA/IEZvcm1EYXRhOjpjcmVhdGVN
dWx0aVBhcnQoKmRvbUZvcm1EYXRhLCBkb2N1bWVudCgpKSA6IEZvcm1EYXRhOjpjcmVhdGUoKmRv
bUZvcm1EYXRhKTsKKyAgICBSZWZQdHI8Rm9ybURhdGE+IHJlc3VsdCA9IChtX2Zvcm1EYXRhQnVp
bGRlci5pc011bHRpUGFydEZvcm0oKSkgPyBGb3JtRGF0YTo6Y3JlYXRlTXVsdGlQYXJ0KGRvbUZv
cm1EYXRhLT5pdGVtcygpLCBkb21Gb3JtRGF0YS0+ZW5jb2RpbmcoKSwgZG9jdW1lbnQoKSkgOiBG
b3JtRGF0YTo6Y3JlYXRlKGRvbUZvcm1EYXRhLT5pdGVtcygpLCBkb21Gb3JtRGF0YS0+ZW5jb2Rp
bmcoKSk7CiAKICAgICByZXN1bHQtPnNldElkZW50aWZpZXIoZ2VuZXJhdGVGb3JtRGF0YUlkZW50
aWZpZXIoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9I
VE1MUHJvZ3Jlc3NFbGVtZW50LmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1MUHJvZ3Jlc3NFbGVtZW50
LmNwcAppbmRleCBkMjc1ZWJmY2ZmOGQ5N2I5MTZkNTlkMjRmMjQxOWRhOGM1MzRhZjI5Li5mN2U4
NmYzYTlhZmZlY2VkZWJiOTNiOTM1MzUwZGFiODUyYWVhNmM1IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2h0bWwvSFRNTFByb2dyZXNzRWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxQcm9n
cmVzc0VsZW1lbnQuY3BwCkBAIC0yNCw2ICsyNCw3IEBACiAKICNpbmNsdWRlICJBdHRyaWJ1dGUu
aCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgog
I2luY2x1ZGUgIkZvcm1EYXRhTGlzdC5oIgogI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgog
I2luY2x1ZGUgIkhUTUxOYW1lcy5oIgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9CbG9i
SXRlbS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL0Jsb2JJdGVtLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZDRm
NjE1N2NhYzk4MDA3NzkwMDhlODk1MmY1MjFiNjU4YmUzZTk5Ci0tLSAvZGV2L251bGwKKysrIGIv
V2ViQ29yZS9wbGF0Zm9ybS9CbG9iSXRlbS5jcHAKQEAgLTAsMCArMSwzMjAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpbmNsdWRlICJCbG9iSXRlbS5oIgorCisjaW5jbHVkZSAiRmlsZVN5c3Rl
bS5oIgorI2luY2x1ZGUgIlVVSUQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYgRU5B
QkxFKEJMT0JfU0xJQ0UpCitzdGF0aWMgY29uc3QgZG91YmxlIGludmFsaWRNb2RpZmljYXRpb25U
aW1lID0gMDsKKworZG91YmxlIGdldEZpbGVTbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUoY29uc3Qg
U3RyaW5nJiBwYXRoKQoreworICAgIC8vIEZJWE1FOiBzeW5jaHJvbml6ZWQgZmlsZSBjYWxsCisg
ICAgdGltZV90IG1vZGlmaWNhdGlvblRpbWU7CisgICAgaWYgKGdldEZpbGVNb2RpZmljYXRpb25U
aW1lKHBhdGgsIG1vZGlmaWNhdGlvblRpbWUpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
ZG91YmxlPihtb2RpZmljYXRpb25UaW1lKTsKKyAgICByZXR1cm4gaW52YWxpZE1vZGlmaWNhdGlv
blRpbWU7Cit9CisKK1Bhc3NSZWZQdHI8QmxvYkl0ZW0+IEJsb2JJdGVtOjpzbGljZShsb25nIGxv
bmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgpCit7CisgICAgQVNTRVJUKHN0YXJ0ID49IDAgJiYg
bGVuZ3RoID49IDApOworICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+
KHN0YXJ0KSA8IHNpemUoKSk7CisgICAgaWYgKCFzdGFydCAmJiBzaXplKCkgPD0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQgbG9uZyBsb25nPihsZW5ndGgpKQorICAgICAgICByZXR1cm4gdGhpczsKKyAg
ICBjb25zdCBGaWxlQmxvYkl0ZW0qIGZpbGVJdGVtID0gdG9GaWxlQmxvYkl0ZW0oKTsKKyAgICBp
ZiAoZmlsZUl0ZW0pIHsKKyAgICAgICAgY29uc3QgRmlsZVJhbmdlQmxvYkl0ZW0qIGZpbGVSYW5n
ZUl0ZW0gPSB0b0ZpbGVSYW5nZUJsb2JJdGVtKCk7CisgICAgICAgIGRvdWJsZSBtb2RpZmljYXRp
b25UaW1lID0gZmlsZVJhbmdlSXRlbSA/IGZpbGVSYW5nZUl0ZW0tPnNuYXBzaG90TW9kaWZpY2F0
aW9uVGltZSgpIDogZ2V0RmlsZVNuYXBzaG90TW9kaWZpY2F0aW9uVGltZShmaWxlSXRlbS0+cGF0
aCgpKTsKKyAgICAgICAgcmV0dXJuIEZpbGVSYW5nZUJsb2JJdGVtOjpjcmVhdGUoZmlsZUl0ZW0t
PnBhdGgoKSwgc3RhcnQsIGxlbmd0aCwgbW9kaWZpY2F0aW9uVGltZSk7CisgICAgfQorICAgIEFT
U0VSVCh0b0RhdGFCbG9iSXRlbSgpKTsKKyAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9u
ZyBsb25nPihzdGFydCArIGxlbmd0aCkgPiBzaXplKCkpCisgICAgICAgIGxlbmd0aCA9IHNpemUo
KSAtIHN0YXJ0OworICAgIHJldHVybiBEYXRhUmFuZ2VCbG9iSXRlbTo6Y3JlYXRlKHN0YXRpY19j
YXN0PERhdGFSYW5nZUJsb2JJdGVtKj4odGhpcyksIHN0YXJ0LCBsZW5ndGgpOworfQorCisjZW5k
aWYgLy8gRU5BQkxFKEJMT0JfU0xJQ0UpCisKKy8vIERhdGFCbG9iSXRlbSAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2No
YXIqIERhdGFCbG9iSXRlbTo6ZGVlcENvcHlCdWZmZXIoKSBjb25zdAoreworICAgIC8vIEZJWE1F
OiBSZWNvbnNpZGVyIGlmIHdlIHN0aWxsIG5lZWQgaXQgb25jZSB3ZSBjbGVhbiB1cCB0aGUgdHJh
bnNpZW50IHdyYXBwZXIgY2xhc3MgRm9ybURhdGFFbGVtZW50OjpCbG9iSXRlbVdyYXBwZXIgYW5k
IGl0cyByZWxlYXNlQnVmZmVyKCkgbWV0aG9kLiAgSXQgdXNlZCB0byBiZSBhIG1lcmUgVmVjdG9y
IGFuZCBWZWN0b3I6OnJlbGVhc2VCdWZmZXIsIGJ1dCBub3cgd2Uga2VlcCB0aGUgZGF0YSByZWYt
Y291bnRlZCBhbmQgbmVlZCB0byBtYWtlIGEgY29weSB0byByZXR1cm4gdGhlIGRhdGEgd2l0aCBv
d25lcnNoaXAuCisgICAgVmVjdG9yPGNoYXI+IHY7CisgICAgdi5hcHBlbmQoZGF0YSgpLCBzdGF0
aWNfY2FzdDxzaXplX3Q+KHNpemUoKSkpOworICAgIHJldHVybiB2LnJlbGVhc2VCdWZmZXIoKTsK
K30KKworYm9vbCBEYXRhQmxvYkl0ZW06OmVxdWFscyhjb25zdCBCbG9iSXRlbSogaXRlbSkgY29u
c3QKK3sKKyAgICBjb25zdCBEYXRhQmxvYkl0ZW0qIGRhdGFJdGVtID0gaXRlbS0+dG9EYXRhQmxv
Ykl0ZW0oKTsKKyAgICByZXR1cm4gZGF0YUl0ZW0gJiYgZGF0YSgpID09IGRhdGFJdGVtLT5kYXRh
KCkgJiYgc2l6ZSgpID09IGRhdGFJdGVtLT5zaXplKCk7Cit9CisKKworLy8gRmlsZUJsb2JJdGVt
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKworUGFzc1JlZlB0cjxCbG9iSXRlbT4gRmlsZUJsb2JJdGVtOjpjcmVhdGUoY29u
c3QgU3RyaW5nJiBwYXRoKQoreworICAgIHJldHVybiBhZG9wdFJlZihzdGF0aWNfY2FzdDxCbG9i
SXRlbSo+KG5ldyBGaWxlQmxvYkl0ZW0ocGF0aCkpKTsKK30KKworRmlsZUJsb2JJdGVtOjpGaWxl
QmxvYkl0ZW0oY29uc3QgU3RyaW5nJiBwYXRoKQorICAgIDogbV9wYXRoKHBhdGgpCisgICAgLCBt
X2ZpbGVOYW1lKHBhdGhHZXRGaWxlTmFtZShtX3BhdGgpKQoreworfQorCit1bnNpZ25lZCBsb25n
IGxvbmcgRmlsZUJsb2JJdGVtOjpzaXplKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogc3luY2hy
b25pemVkIGZpbGUgY2FsbAorICAgIGxvbmcgbG9uZyBzaXplOworICAgIGlmICghZ2V0RmlsZVNp
emUobV9wYXRoLCBzaXplKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oc2l6ZSk7Cit9CisKK2Jvb2wgRmlsZUJsb2JJdGVtOjpp
c1ZhbGlkKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogc3luY2hyb25pemVkIGZpbGUgY2FsbAor
ICAgIGxvbmcgbG9uZyBzaXplOworICAgIHJldHVybiAoIW1fcGF0aC5pc0VtcHR5KCkgJiYgZ2V0
RmlsZVNpemUobV9wYXRoLCBzaXplKSk7Cit9CisKK1Bhc3NSZWZQdHI8QmxvYkl0ZW0+IEZpbGVC
bG9iSXRlbTo6ZGVlcENvcHkoKSBjb25zdAoreworICAgIHJldHVybiBGaWxlQmxvYkl0ZW06OmNy
ZWF0ZShtX3BhdGgpOworfQorCitib29sIEZpbGVCbG9iSXRlbTo6ZXF1YWxzKGNvbnN0IEJsb2JJ
dGVtKiBpdGVtKSBjb25zdAoreworICAgIGNvbnN0IEZpbGVCbG9iSXRlbSogZmlsZUl0ZW0gPSBp
dGVtLT50b0ZpbGVCbG9iSXRlbSgpOworICAgIHJldHVybiBmaWxlSXRlbSAmJiBtX3BhdGggPT0g
ZmlsZUl0ZW0tPm1fcGF0aDsKK30KKworLy8gU3RyaW5nQmxvYkl0ZW0gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUGFzc1Jl
ZlB0cjxCbG9iSXRlbT4gU3RyaW5nQmxvYkl0ZW06OmNyZWF0ZShjb25zdCBTdHJpbmcmIHRleHQs
IEVuZGluZ1R5cGUgZW5kaW5nLCBUZXh0RW5jb2RpbmcgZW5jb2RpbmcpCit7CisgICAgcmV0dXJu
IGFkb3B0UmVmKHN0YXRpY19jYXN0PEJsb2JJdGVtKj4obmV3IFN0cmluZ0Jsb2JJdGVtKHRleHQs
IGVuZGluZywgZW5jb2RpbmcpKSk7Cit9CisKK1Bhc3NSZWZQdHI8QmxvYkl0ZW0+IFN0cmluZ0Js
b2JJdGVtOjpjcmVhdGUoY29uc3QgQ1N0cmluZyYgdGV4dCkKK3sKKyAgICByZXR1cm4gYWRvcHRS
ZWYoc3RhdGljX2Nhc3Q8QmxvYkl0ZW0qPihuZXcgU3RyaW5nQmxvYkl0ZW0odGV4dCkpKTsKK30K
KworCitTdHJpbmdCbG9iSXRlbTo6U3RyaW5nQmxvYkl0ZW0oY29uc3QgU3RyaW5nJiB0ZXh0LCBF
bmRpbmdUeXBlIGVuZGluZywgVGV4dEVuY29kaW5nIGVuY29kaW5nKQorICAgIDogbV9kYXRhKFN0
cmluZ0Jsb2JJdGVtOjpjb252ZXJ0VG9DU3RyaW5nKHRleHQsIGVuZGluZywgZW5jb2RpbmcpKQor
eworfQorCitTdHJpbmdCbG9iSXRlbTo6U3RyaW5nQmxvYkl0ZW0oY29uc3QgQ1N0cmluZyYgdGV4
dCkKKyAgICA6IG1fZGF0YSh0ZXh0KQoreworfQorCitQYXNzUmVmUHRyPEJsb2JJdGVtPiBTdHJp
bmdCbG9iSXRlbTo6ZGVlcENvcHkoKSBjb25zdAoreworICAgIHJldHVybiBTdHJpbmdCbG9iSXRl
bTo6Y3JlYXRlKENTdHJpbmcobV9kYXRhLmRhdGEoKSwgbV9kYXRhLmxlbmd0aCgpKSk7Cit9CisK
K2Jvb2wgU3RyaW5nQmxvYkl0ZW06OmVxdWFscyhjb25zdCBCbG9iSXRlbSogaXRlbSkgY29uc3QK
K3sKKyAgICBpZiAoIURhdGFCbG9iSXRlbTo6ZXF1YWxzKGl0ZW0pKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgY29uc3QgU3RyaW5nQmxvYkl0ZW0qIHN0cmluZ0l0ZW0gPSBpdGVtLT50b1N0
cmluZ0Jsb2JJdGVtKCk7CisgICAgcmV0dXJuIHN0cmluZ0l0ZW0gJiYgZGF0YSgpID09IHN0cmlu
Z0l0ZW0tPmRhdGEoKSAmJiBzaXplKCkgPT0gc3RyaW5nSXRlbS0+c2l6ZSgpOworfQorCitDU3Ry
aW5nIFN0cmluZ0Jsb2JJdGVtOjpjb252ZXJ0VG9DU3RyaW5nKGNvbnN0IFN0cmluZyYgdGV4dCwg
RW5kaW5nVHlwZSBlbmRpbmcsIFRleHRFbmNvZGluZyBlbmNvZGluZykKK3sKKyAgICBDU3RyaW5n
IGZyb20gPSBlbmNvZGluZy5lbmNvZGUodGV4dC5jaGFyYWN0ZXJzKCksIHRleHQubGVuZ3RoKCks
IEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKTsKKyAgICBDU3RyaW5nIHJlc3VsdCA9IGZyb207CisK
KyAgICBpZiAoZW5kaW5nID09IEVuZGluZ1RyYW5zcGFyZW50KQorICAgICAgICByZXR1cm4gcmVz
dWx0OworCisgICAgY29uc3QgY2hhciogZW5kaW5nQ2hhcnMgPSAoZW5kaW5nID09IEVuZGluZ0NS
TEYpID8gIlxyXG4iIDogKChlbmRpbmcgPT0gRW5kaW5nQ1IpID8gIlxyIiA6ICJcbiIpOworCisg
ICAgaW50IGVuZGluZ0xlbmd0aCA9IChlbmRpbmcgPT0gRW5kaW5nQ1JMRikgPyAyIDogMTsKKyAg
ICBpbnQgbmVlZEZpeCA9IDA7CisKKyAgICAvLyBDYWxjdWxhdGUgdGhlIGZpbmFsIGxlbmd0aC4K
KyAgICBpbnQgY2FsY3VsYXRlZExlbmd0aCA9IGZyb20ubGVuZ3RoKCk7CisgICAgY29uc3QgY2hh
ciogcCA9IGZyb20uZGF0YSgpOworICAgIHdoaWxlIChjaGFyIGMgPSAqcCsrKSB7CisgICAgICAg
IGlmIChjID09ICdccicpIHsKKyAgICAgICAgICAgIC8vIFNhZmUgdG8gbG9vayBhaGVhZCBiZWNh
dXNlIG9mIHRyYWlsaW5nICdcMCcuCisgICAgICAgICAgICBpZiAoKnAgPT0gJ1xuJyAmJiBlbmRp
bmcgIT0gRW5kaW5nQ1JMRikgeworICAgICAgICAgICAgICAgIGNhbGN1bGF0ZWRMZW5ndGggKz0g
KGVuZGluZ0xlbmd0aCAtIDIpOworICAgICAgICAgICAgICAgICsrbmVlZEZpeDsKKyAgICAgICAg
ICAgIH0gZWxzZSBpZiAoZW5kaW5nICE9IEVuZGluZ0NSKSB7CisgICAgICAgICAgICAgICAgY2Fs
Y3VsYXRlZExlbmd0aCArPSAoZW5kaW5nTGVuZ3RoIC0gMSk7CisgICAgICAgICAgICAgICAgKytu
ZWVkRml4OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKGMgPT0gJ1xuJyAmJiBl
bmRpbmcgIT0gRW5kaW5nTEYpIHsKKyAgICAgICAgICAgIGNhbGN1bGF0ZWRMZW5ndGggKz0gKGVu
ZGluZ0xlbmd0aCAtIDEpOworICAgICAgICAgICAgKytuZWVkRml4OworICAgICAgICB9CisgICAg
fQorCisgICAgaWYgKCFuZWVkRml4KQorICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgLy8g
Q29udmVydCB0aGUgZW5kaW5ncyBhbmQgY3JlYXRlIGEgZGF0YSBidWZmZXIuCisgICAgcCA9IGZy
b20uZGF0YSgpOworICAgIGNoYXIqIHE7CisgICAgcmVzdWx0ID0gQ1N0cmluZzo6bmV3VW5pbml0
aWFsaXplZChjYWxjdWxhdGVkTGVuZ3RoLCBxKTsKKyAgICB3aGlsZSAoY2hhciBjID0gKnArKykg
eworICAgICAgICBpZiAoYyA9PSAnXHInKSB7CisgICAgICAgICAgICBpZiAoKnAgPT0gJ1xuJyAm
JiBlbmRpbmcgIT0gRW5kaW5nQ1JMRikgeworICAgICAgICAgICAgICAgIG1lbWNweShxLCBlbmRp
bmdDaGFycywgZW5kaW5nTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBxICs9IGVuZGluZ0xlbmd0
aDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoKnAgIT0gJ1xuJyAmJiBlbmRpbmcgIT0gRW5kaW5n
Q1IpIHsKKyAgICAgICAgICAgICAgICBtZW1jcHkocSwgZW5kaW5nQ2hhcnMsIGVuZGluZ0xlbmd0
aCk7CisgICAgICAgICAgICAgICAgcSArPSBlbmRpbmdMZW5ndGg7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0gZWxzZSBpZiAoYyA9PSAnXG4nICYmIGVuZGluZyAhPSBFbmRpbmdMRikgeworICAg
ICAgICAgICAgbWVtY3B5KHEsIGVuZGluZ0NoYXJzLCBlbmRpbmdMZW5ndGgpOworICAgICAgICAg
ICAgcSArPSBlbmRpbmdMZW5ndGg7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBM
ZWF2ZSBvdGhlciBjaGFyYWN0ZXJzIGFsb25lLgorICAgICAgICAgICAgKnErKyA9IGM7CisgICAg
ICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLy8gQnl0ZXNBcnJheUJsb2JJ
dGVtIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKworUGFzc1JlZlB0cjxCbG9iSXRlbT4gQnl0ZXNBcnJheUJsb2JJdGVtOjpjcmVhdGUo
Y29uc3QgY2hhciogZGF0YSwgc2l6ZV90IHNpemUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKHN0
YXRpY19jYXN0PEJsb2JJdGVtKj4obmV3IEJ5dGVzQXJyYXlCbG9iSXRlbShkYXRhLCBzaXplKSkp
OworfQorCitCeXRlc0FycmF5QmxvYkl0ZW06OkJ5dGVzQXJyYXlCbG9iSXRlbShjb25zdCBjaGFy
KiBkYXRhLCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBtX2J5dGVzQXJyYXkuYXBwZW5kKGRhdGEsIHNp
emUpOworfQorCitQYXNzUmVmUHRyPEJsb2JJdGVtPiBCeXRlc0FycmF5QmxvYkl0ZW06OmRlZXBD
b3B5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gQnl0ZXNBcnJheUJsb2JJdGVtOjpjcmVhdGUobV9i
eXRlc0FycmF5LmRhdGEoKSwgbV9ieXRlc0FycmF5LnNpemUoKSk7Cit9CisKKyNpZiBFTkFCTEUo
QkxPQl9TTElDRSkKKworLy8gRGF0YVJhbmdlQmxvYkl0ZW0gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUGFzc1JlZlB0cjxCbG9i
SXRlbT4gRGF0YVJhbmdlQmxvYkl0ZW06OmNyZWF0ZShQYXNzUmVmUHRyPERhdGFCbG9iSXRlbT4g
aXRlbSwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoKQoreworICAgIHJldHVybiBh
ZG9wdFJlZihzdGF0aWNfY2FzdDxCbG9iSXRlbSo+KG5ldyBEYXRhUmFuZ2VCbG9iSXRlbShpdGVt
LCBzdGFydCwgbGVuZ3RoKSkpOworfQorCitEYXRhUmFuZ2VCbG9iSXRlbTo6RGF0YVJhbmdlQmxv
Ykl0ZW0oUGFzc1JlZlB0cjxEYXRhQmxvYkl0ZW0+IGl0ZW0sIGxvbmcgbG9uZyBzdGFydCwgbG9u
ZyBsb25nIGxlbmd0aCkKKyAgICA6IG1fbGVuZ3RoKGxlbmd0aCkKK3sKKyAgICBjb25zdCBEYXRh
UmFuZ2VCbG9iSXRlbSogcmFuZ2VJdGVtID0gbV9pdGVtLT50b0RhdGFSYW5nZUJsb2JJdGVtKCk7
CisgICAgaWYgKHJhbmdlSXRlbSkgeworICAgICAgICBtX2l0ZW0gPSByYW5nZUl0ZW0tPm1faXRl
bTsKKyAgICAgICAgbV9zdGFydCA9IHN0YXJ0ICsgcmFuZ2VJdGVtLT5tX3N0YXJ0OworICAgICAg
ICBBU1NFUlQoIW1faXRlbS0+dG9EYXRhUmFuZ2VCbG9iSXRlbSgpKTsKKyAgICAgICAgQVNTRVJU
KHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4obV9zdGFydCArIG1fbGVuZ3RoKSA8PSBt
X2l0ZW0tPnNpemUoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9pdGVtID0gaXRlbTsKKyAg
ICAgICAgbV9zdGFydCA9IHN0YXJ0OworICAgIH0KK30KKworY29uc3QgY2hhciogRGF0YVJhbmdl
QmxvYkl0ZW06OmRhdGEoKSBjb25zdAoreworICAgIHJldHVybiBtX2l0ZW0tPmRhdGEoKSArIG1f
c3RhcnQ7Cit9CisKK1Bhc3NSZWZQdHI8QmxvYkl0ZW0+IERhdGFSYW5nZUJsb2JJdGVtOjpkZWVw
Q29weSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIERhdGFSYW5nZUJsb2JJdGVtOjpjcmVhdGUoc3Rh
dGljX3BvaW50ZXJfY2FzdDxEYXRhQmxvYkl0ZW0+KG1faXRlbS0+ZGVlcENvcHkoKSksIG1fc3Rh
cnQsIG1fbGVuZ3RoKTsKK30KKworYm9vbCBEYXRhUmFuZ2VCbG9iSXRlbTo6ZXF1YWxzKGNvbnN0
IEJsb2JJdGVtKiBpdGVtKSBjb25zdAoreworICAgIGNvbnN0IERhdGFSYW5nZUJsb2JJdGVtKiBy
YW5nZUl0ZW0gPSBpdGVtLT50b0RhdGFSYW5nZUJsb2JJdGVtKCk7CisgICAgcmV0dXJuIHJhbmdl
SXRlbSAmJiBtX3N0YXJ0ID09IHJhbmdlSXRlbS0+bV9zdGFydCAmJiBtX2xlbmd0aCA9PSByYW5n
ZUl0ZW0tPm1fbGVuZ3RoICYmIG1faXRlbS0+ZXF1YWxzKHJhbmdlSXRlbS0+bV9pdGVtLmdldCgp
KTsKK30KKworLy8gRmlsZVJhbmdlQmxvYkl0ZW0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUGFzc1JlZlB0cjxCbG9iSXRlbT4g
RmlsZVJhbmdlQmxvYkl0ZW06OmNyZWF0ZShjb25zdCBTdHJpbmcmIHBhdGgsIGxvbmcgbG9uZyBz
dGFydCwgbG9uZyBsb25nIGxlbmd0aCwgZG91YmxlIHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSkK
K3sKKyAgICByZXR1cm4gYWRvcHRSZWYoc3RhdGljX2Nhc3Q8QmxvYkl0ZW0qPihuZXcgRmlsZVJh
bmdlQmxvYkl0ZW0ocGF0aCwgc3RhcnQsIGxlbmd0aCwgc25hcHNob3RNb2RpZmljYXRpb25UaW1l
KSkpOworfQorCitGaWxlUmFuZ2VCbG9iSXRlbTo6RmlsZVJhbmdlQmxvYkl0ZW0oY29uc3QgU3Ry
aW5nJiBwYXRoLCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgsIGRvdWJsZSBtb2Rp
ZmljYXRpb25UaW1lKQorICAgIDogRmlsZUJsb2JJdGVtKHBhdGgpCisgICAgLCBtX3N0YXJ0KHN0
YXJ0KQorICAgICwgbV9sZW5ndGgobGVuZ3RoKQorICAgICwgbV9zbmFwc2hvdE1vZGlmaWNhdGlv
blRpbWUobW9kaWZpY2F0aW9uVGltZSkKK3sKKyAgICBtX3VuaXF1ZU5hbWUgPSAiQmxvYiIgKyBj
cmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCk7CisgICAgbV91bmlxdWVOYW1lLnJlcGxhY2UoIi0i
LCAiIik7IC8vIEZvciBzYWZ0eSwgcmVtb3ZlICctJyBmcm9tIHRoZSBmaWxlbmFtZSBzbmNlIHNv
bWUgc2VydmVycyBtYXkgbm90IGxpa2UgaXQuCit9CisKK1Bhc3NSZWZQdHI8QmxvYkl0ZW0+IEZp
bGVSYW5nZUJsb2JJdGVtOjpkZWVwQ29weSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEZpbGVSYW5n
ZUJsb2JJdGVtOjpjcmVhdGUocGF0aCgpLCBtX3N0YXJ0LCBtX2xlbmd0aCwgbV9zbmFwc2hvdE1v
ZGlmaWNhdGlvblRpbWUpOworfQorCitib29sIEZpbGVSYW5nZUJsb2JJdGVtOjplcXVhbHMoY29u
c3QgQmxvYkl0ZW0qIGl0ZW0pIGNvbnN0Cit7CisgICAgaWYgKCFGaWxlQmxvYkl0ZW06OmVxdWFs
cyhpdGVtKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNvbnN0IEZpbGVSYW5nZUJsb2JJ
dGVtKiByYW5nZUl0ZW0gPSBpdGVtLT50b0ZpbGVSYW5nZUJsb2JJdGVtKCk7CisgICAgcmV0dXJu
IHJhbmdlSXRlbSAmJiBtX3N0YXJ0ID09IHJhbmdlSXRlbS0+bV9zdGFydCAmJiBtX3VuaXF1ZU5h
bWUgPT0gcmFuZ2VJdGVtLT5tX3VuaXF1ZU5hbWUgJiYgbV9zbmFwc2hvdE1vZGlmaWNhdGlvblRp
bWUgPT0gcmFuZ2VJdGVtLT5tX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZTsKK30KKworYm9vbCBG
aWxlUmFuZ2VCbG9iSXRlbTo6aXNWYWxpZCgpIGNvbnN0Cit7CisgICAgaWYgKG1fc25hcHNob3RN
b2RpZmljYXRpb25UaW1lID09IGludmFsaWRNb2RpZmljYXRpb25UaW1lKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgcmV0dXJuIG1fc25hcHNob3RNb2RpZmljYXRpb25UaW1lID09IGdldEZp
bGVTbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUocGF0aCgpKTsKK30KKworI2VuZGlmIC8vIEVOQUJM
RShCTE9CX1NMSUNFKQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsYXRmb3JtL0Jsb2JJdGVtLmggYi9XZWJDb3JlL3BsYXRmb3JtL0Jsb2JJdGVtLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNmQyOGQ4NDE1ZTI4YjM0NGMzYTBiOWEzMmU5YjkxYTE0ZDUzYTZmOQotLS0gL2Rl
di9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vQmxvYkl0ZW0uaApAQCAtMCwwICsxLDIyMiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIEJsb2JJdGVtX2gKKyNkZWZpbmUgQmxvYkl0ZW1faAorCisjaW5jbHVkZSAiUGxh
dGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKKyNpbmNsdWRlIDx3dGYv
T3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gU3RyaW5nIGVuZGluZyB0eXBl
cy4KK2VudW0gRW5kaW5nVHlwZSB7CisgICAgRW5kaW5nVHJhbnNwYXJlbnQgPSAwLAorICAgIEVu
ZGluZ0xGLAorICAgIEVuZGluZ0NSLAorICAgIEVuZGluZ0NSTEYsCit9OworCitjbGFzcyBCeXRl
c0FycmF5QmxvYkl0ZW07CitjbGFzcyBEYXRhQmxvYkl0ZW07CitjbGFzcyBEYXRhUmFuZ2VCbG9i
SXRlbTsKK2NsYXNzIEZpbGVCbG9iSXRlbTsKK2NsYXNzIEZpbGVSYW5nZUJsb2JJdGVtOworY2xh
c3MgU3RyaW5nQmxvYkl0ZW07CisKKy8vIEEgYmFzZSBpbnRlcmZhY2UgZm9yIGFsbCBhcmJpdHJh
cnktZGF0YS1vYmplY3QgY29tcG9uZW50IGl0ZW1zLgorLy8gVGhlIEJsb2JJdGVtIGFuZCBpdHMg
c3ViY2xhc3NlcyBhcmUgc3RydWN0dXJlZCBsaWtlIHRoZSBmb2xsb3dpbmc6CisvLyAgICBCbG9i
SXRlbQorLy8gICAgICAgfAorLy8gICAgICAgKy0tLS0tLS0+IERhdGFCbG9iSXRlbQorLy8gICAg
ICAgfCAgICAgICAgICAgICAgfAorLy8gICAgICAgfCAgICAgICAgICAgICAgKy0tLS0tLS0tLT4g
U3RyaW5nQmxvYkl0ZW0KKy8vICAgICAgIHwgICAgICAgICAgICAgICstLS0tLS0tLS0+IEJ5dGVB
cnJheUJsb2JJdGVtCisvLyAgICAgICB8ICAgICAgICAgICAgICArLS0tLS0tLS0tPiBEYXRhUmFu
Z2VCbG9iSXRlbQorLy8gICAgICAgfAorLy8gICAgICAgKy0tLS0tLS0+IEZpbGVCbG9iSXRlbQor
Ly8gICAgICAgICAgICAgICAgICAgICAgfAorLy8gICAgICAgICAgICAgICAgICAgICAgKy0tLS0t
LS0tLT4gRmlsZVJhbmdlQmxvYkl0ZW0KKy8vCitjbGFzcyBCbG9iSXRlbSA6IHB1YmxpYyBSZWZD
b3VudGVkPEJsb2JJdGVtPiB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+QmxvYkl0ZW0oKSB7IH0K
KyAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplKCkgY29uc3QgPSAwOworCisgICAg
Ly8gUmV0dXJucyBmYWxzZSBpZiB0aGUgZGF0YSBoYXMgYmVjb21lIHN0YWxlIG9yIGludmFsaWQu
CisgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAg
ICB2aXJ0dWFsIGNvbnN0IERhdGFCbG9iSXRlbSogdG9EYXRhQmxvYkl0ZW0oKSBjb25zdCB7IHJl
dHVybiAwOyB9CisgICAgdmlydHVhbCBjb25zdCBTdHJpbmdCbG9iSXRlbSogdG9TdHJpbmdCbG9i
SXRlbSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IEJ5dGVzQXJyYXlC
bG9iSXRlbSogdG9CeXRlc0FycmF5QmxvYkl0ZW0oKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAg
dmlydHVhbCBjb25zdCBGaWxlQmxvYkl0ZW0qIHRvRmlsZUJsb2JJdGVtKCkgY29uc3QgeyByZXR1
cm4gMDsgfQorI2lmIEVOQUJMRShCTE9CX1NMSUNFKQorICAgIHZpcnR1YWwgY29uc3QgRGF0YVJh
bmdlQmxvYkl0ZW0qIHRvRGF0YVJhbmdlQmxvYkl0ZW0oKSBjb25zdCB7IHJldHVybiAwOyB9Cisg
ICAgdmlydHVhbCBjb25zdCBGaWxlUmFuZ2VCbG9iSXRlbSogdG9GaWxlUmFuZ2VCbG9iSXRlbSgp
IGNvbnN0IHsgcmV0dXJuIDA7IH0KKworICAgIC8vIE5vIGV4dGVybmFsIG1ldGhvZHMgZXhjZXB0
IGZvciBCbG9iOjpzbGljZSBzaG91bGQgY2FsbCB0aGlzLgorICAgIFBhc3NSZWZQdHI8QmxvYkl0
ZW0+IHNsaWNlKGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCk7CisjZW5kaWYgLy8g
RU5BQkxFKEJMT0JfU0xJQ0UpCisKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8QmxvYkl0ZW0+IGRl
ZXBDb3B5KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBlcXVhbHMoY29uc3QgQmxvYkl0
ZW0qKSBjb25zdCA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICBCbG9iSXRlbSgpIHsgfQorfTsKKwor
dHlwZWRlZiBWZWN0b3I8UmVmUHRyPEJsb2JJdGVtPiA+IEJsb2JJdGVtTGlzdDsKKworY2xhc3Mg
RGF0YUJsb2JJdGVtIDogcHVibGljIEJsb2JJdGVtIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIGNv
bnN0IGNoYXIqIGRhdGEoKSBjb25zdCA9IDA7CisgICAgY2hhciogZGVlcENvcHlCdWZmZXIoKSBj
b25zdDsKKworICAgIC8vIEJsb2JJdGVtIG1ldGhvZHMuCisgICAgdmlydHVhbCBjb25zdCBEYXRh
QmxvYkl0ZW0qIHRvRGF0YUJsb2JJdGVtKCkgY29uc3QgeyByZXR1cm4gdGhpczsgfQorICAgIHZp
cnR1YWwgYm9vbCBlcXVhbHMoY29uc3QgQmxvYkl0ZW0qKSBjb25zdDsKK307CisKK2NsYXNzIEZp
bGVCbG9iSXRlbSA6IHB1YmxpYyBCbG9iSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8QmxvYkl0ZW0+IGNyZWF0ZShjb25zdCBTdHJpbmcmIHBhdGgpOworICAgIHZpcnR1YWwg
Y29uc3QgU3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9maWxlTmFtZTsgfQorICAgIHZp
cnR1YWwgY29uc3QgU3RyaW5nJiBwYXRoKCkgY29uc3QgeyByZXR1cm4gbV9wYXRoOyB9CisKKyAg
ICAvLyBCbG9iSXRlbSBtZXRob2RzLgorICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBsb25nIHNp
emUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGNvbnN0IEZpbGVCbG9iSXRlbSogdG9GaWxlQmxvYkl0
ZW0oKSBjb25zdCB7IHJldHVybiB0aGlzOyB9CisgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8QmxvYkl0ZW0+IGRlZXBDb3B5KCkgY29uc3Q7
CisgICAgdmlydHVhbCBib29sIGVxdWFscyhjb25zdCBCbG9iSXRlbSopIGNvbnN0OworCitwcm90
ZWN0ZWQ6CisgICAgRmlsZUJsb2JJdGVtKGNvbnN0IFN0cmluZyYgcGF0aCk7CisgICAgU3RyaW5n
IG1fcGF0aDsKKyAgICBTdHJpbmcgbV9maWxlTmFtZTsKK307CisKK2NsYXNzIFN0cmluZ0Jsb2JJ
dGVtIDogcHVibGljIERhdGFCbG9iSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8QmxvYkl0ZW0+IGNyZWF0ZShjb25zdCBTdHJpbmcmLCBFbmRpbmdUeXBlLCBUZXh0RW5jb2Rp
bmcpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJsb2JJdGVtPiBjcmVhdGUoY29uc3QgQ1N0cmlu
ZyYpOworICAgIGNvbnN0IENTdHJpbmcmIGNzdHIoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0K
KworICAgIC8vIEJsb2JJdGVtIG1ldGhvZHMuCisgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxv
bmcgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5sZW5ndGgoKTsgfQorICAgIHZpcnR1YWwg
Y29uc3QgU3RyaW5nQmxvYkl0ZW0qIHRvU3RyaW5nQmxvYkl0ZW0oKSBjb25zdCB7IHJldHVybiB0
aGlzOyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEJsb2JJdGVtPiBkZWVwQ29weSgpIGNvbnN0
OworICAgIHZpcnR1YWwgYm9vbCBlcXVhbHMoY29uc3QgQmxvYkl0ZW0qKSBjb25zdDsKKworICAg
IC8vIERhdGFCbG9iSXRlbSBtZXRob2RzLgorICAgIHZpcnR1YWwgY29uc3QgY2hhciogZGF0YSgp
IGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5kYXRhKCk7IH0KKworcHJpdmF0ZToKKyAgICBTdHJpbmdC
bG9iSXRlbShjb25zdCBTdHJpbmcmLCBFbmRpbmdUeXBlLCBUZXh0RW5jb2RpbmcpOworICAgIFN0
cmluZ0Jsb2JJdGVtKGNvbnN0IENTdHJpbmcmKTsKKyAgICBzdGF0aWMgQ1N0cmluZyBjb252ZXJ0
VG9DU3RyaW5nKGNvbnN0IFN0cmluZyYsIEVuZGluZ1R5cGUsIFRleHRFbmNvZGluZyk7CisgICAg
Q1N0cmluZyBtX2RhdGE7Cit9OworCitjbGFzcyBCeXRlc0FycmF5QmxvYkl0ZW0gOiBwdWJsaWMg
RGF0YUJsb2JJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCbG9iSXRlbT4g
Y3JlYXRlKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBzaXplKTsKKworICAgIC8vIEJsb2JJdGVt
IG1ldGhvZHMuCisgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fYnl0ZXNBcnJheS5zaXplKCk7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IEJ5dGVzQXJy
YXlCbG9iSXRlbSogdG9CeXRlc0FycmF5QmxvYkl0ZW0oKSBjb25zdCB7IHJldHVybiB0aGlzOyB9
CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEJsb2JJdGVtPiBkZWVwQ29weSgpIGNvbnN0OworCisg
ICAgLy8gRGF0YUJsb2JJdGVtIG1ldGhvZHMuCisgICAgdmlydHVhbCBjb25zdCBjaGFyKiBkYXRh
KCkgY29uc3QgeyByZXR1cm4gbV9ieXRlc0FycmF5LmRhdGEoKTsgfQorCitwcml2YXRlOgorICAg
IEJ5dGVzQXJyYXlCbG9iSXRlbShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3Qgc2l6ZSk7CisgICAg
VmVjdG9yPGNoYXI+IG1fYnl0ZXNBcnJheTsKK307CisKKyNpZiBFTkFCTEUoQkxPQl9TTElDRSkK
KworLy8gQmxvYkl0ZW0gY2xhc3MgZm9yIHNsaWNlZCBkYXRhIChzdHJpbmcgb3IgYnl0ZXMtYXJy
YXkpLgorY2xhc3MgRGF0YVJhbmdlQmxvYkl0ZW0gOiBwdWJsaWMgRGF0YUJsb2JJdGVtIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCbG9iSXRlbT4gY3JlYXRlKFBhc3NSZWZQdHI8
RGF0YUJsb2JJdGVtPiwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoKTsKKworICAg
IC8vIEJsb2JJdGVtIG1ldGhvZHMuCisgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxvbmcgc2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9CisgICAgdmlydHVhbCBjb25zdCBEYXRhUmFu
Z2VCbG9iSXRlbSogdG9EYXRhUmFuZ2VCbG9iSXRlbSgpIGNvbnN0IHsgcmV0dXJuIHRoaXM7IH0K
KyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8QmxvYkl0ZW0+IGRlZXBDb3B5KCkgY29uc3Q7CisgICAg
dmlydHVhbCBib29sIGVxdWFscyhjb25zdCBCbG9iSXRlbSopIGNvbnN0OworCisgICAgLy8gRGF0
YUJsb2JJdGVtIG1ldGhvZHMuCisgICAgdmlydHVhbCBjb25zdCBjaGFyKiBkYXRhKCkgY29uc3Q7
CisKK3ByaXZhdGU6CisgICAgRGF0YVJhbmdlQmxvYkl0ZW0oUGFzc1JlZlB0cjxEYXRhQmxvYkl0
ZW0+IGl0ZW0sIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCk7CisgICAgUmVmUHRy
PERhdGFCbG9iSXRlbT4gbV9pdGVtOworICAgIGxvbmcgbG9uZyBtX3N0YXJ0OworICAgIGxvbmcg
bG9uZyBtX2xlbmd0aDsKK307CisKK2NsYXNzIEZpbGVSYW5nZUJsb2JJdGVtIDogcHVibGljIEZp
bGVCbG9iSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QmxvYkl0ZW0+IGNy
ZWF0ZShjb25zdCBTdHJpbmcmIHBhdGgsIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0
aCwgZG91YmxlIHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSk7CisgICAgbG9uZyBsb25nIHN0YXJ0
KCkgY29uc3QgeyByZXR1cm4gbV9zdGFydDsgfQorICAgIGRvdWJsZSBzbmFwc2hvdE1vZGlmaWNh
dGlvblRpbWUoKSBjb25zdCB7IHJldHVybiBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZTsgfQor
CisgICAgLy8gQmxvYkl0ZW0gbWV0aG9kcy4KKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgbG9u
ZyBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IEZp
bGVSYW5nZUJsb2JJdGVtKiB0b0ZpbGVSYW5nZUJsb2JJdGVtKCkgY29uc3QgeyByZXR1cm4gdGhp
czsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3Q7CisgICAgdmlydHVhbCBQYXNz
UmVmUHRyPEJsb2JJdGVtPiBkZWVwQ29weSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBlcXVh
bHMoY29uc3QgQmxvYkl0ZW0qKSBjb25zdDsKKworICAgIC8vIEZpbGVCbG9iSXRlbSBtZXRob2Rz
LgorICAgIHZpcnR1YWwgY29uc3QgU3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV91bmlx
dWVOYW1lOyB9CisKK3ByaXZhdGU6CisgICAgRmlsZVJhbmdlQmxvYkl0ZW0oY29uc3QgU3RyaW5n
JiBwYXRoLCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgsIGRvdWJsZSBzbmFwc2hv
dE1vZGlmaWNhdGlvblRpbWUpOworICAgIGxvbmcgbG9uZyBtX3N0YXJ0OworICAgIGxvbmcgbG9u
ZyBtX2xlbmd0aDsKKyAgICBTdHJpbmcgbV91bmlxdWVOYW1lOworCisgICAgZG91YmxlIG1fc25h
cHNob3RNb2RpZmljYXRpb25UaW1lOworfTsKKworI2VuZGlmIC8vIEVOQUJMRShCTE9CX1NMSUNF
KQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBCbG9iSXRlbV9oCmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwIGIvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcAppbmRleCA5MTgwMDJhZWZkODFhNjg5MWY5ZjE5
YmFmNDRkNzU1OTFmZGZhNDg0Li4zODdjMGY2YzE5ZmI2YjMzOGY5OGYxYjcwM2NmMDBlYWIxMzRm
MGJkIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAKQEAgLTE5LDIzICsxOSw0
NiBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKwogI2luY2x1ZGUgIkZvcm1EYXRhLmgi
CiAKLSNpbmNsdWRlICJCbG9iLmgiCisjaW5jbHVkZSAiQmxvYkl0ZW0uaCIKICNpbmNsdWRlICJD
aHJvbWUuaCIKICNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKLSNpbmNsdWRlICJET01Gb3JtRGF0
YS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRmlsZS5oIgogI2luY2x1ZGUg
IkZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJGb3JtRGF0YUJ1aWxkZXIuaCIKICNpbmNsdWRlICJN
SU1FVHlwZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlRleHRFbmNv
ZGluZy5oIgotI2luY2x1ZGUgIlVVSUQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisjaWYg
RU5BQkxFKEJMT0JfU0xJQ0UpCitjb25zdCBsb25nIGxvbmcgRm9ybURhdGFFbGVtZW50Ojp0b0Vu
ZE9mRmlsZSA9IC0xOworI2VuZGlmCisKK0Zvcm1EYXRhRWxlbWVudDo6Rm9ybURhdGFFbGVtZW50
KFBhc3NSZWZQdHI8QmxvYkl0ZW0+IGJsb2JJdGVtLCBib29sIHNob3VsZEdlbmVyYXRlRmlsZSkK
KyAgICA6IG1faXRlbShibG9iSXRlbSkKKyAgICAsIG1fdHlwZShtX2l0ZW0tPnRvRmlsZUJsb2JJ
dGVtKCkgPyBlbmNvZGVkRmlsZSA6IGRhdGEpCisgICAgLCBtX2RhdGEobV9pdGVtLT50b0RhdGFC
bG9iSXRlbSgpKQorICAgICwgbV9maWxlbmFtZShtX2l0ZW0tPnRvRmlsZUJsb2JJdGVtKCkgPyBt
X2l0ZW0tPnRvRmlsZUJsb2JJdGVtKCktPnBhdGgoKSA6IFN0cmluZygpKQorICAgICwgbV9zaG91
bGRHZW5lcmF0ZUZpbGUoc2hvdWxkR2VuZXJhdGVGaWxlKQoreworI2lmIEVOQUJMRShCTE9CX1NM
SUNFKQorICAgIGNvbnN0IEZpbGVSYW5nZUJsb2JJdGVtKiBmaWxlUmFuZ2VJdGVtID0gbV9pdGVt
LT50b0ZpbGVSYW5nZUJsb2JJdGVtKCk7CisgICAgaWYgKGZpbGVSYW5nZUl0ZW0pIHsKKyAgICAg
ICAgbV9maWxlU3RhcnQgPSBmaWxlUmFuZ2VJdGVtLT5zdGFydCgpOworICAgICAgICBtX2ZpbGVM
ZW5ndGggPSBmaWxlUmFuZ2VJdGVtLT5zaXplKCk7CisgICAgICAgIG1fZXhwZWN0ZWRGaWxlTW9k
aWZpY2F0aW9uVGltZSA9IGZpbGVSYW5nZUl0ZW0tPnNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSgp
OworICAgIH0gZWxzZSB7CisgICAgICAgIG1fZmlsZVN0YXJ0ID0gMDsKKyAgICAgICAgbV9maWxl
TGVuZ3RoID0gdG9FbmRPZkZpbGU7CisgICAgICAgIG1fZXhwZWN0ZWRGaWxlTW9kaWZpY2F0aW9u
VGltZSA9IDA7CisgICAgfQorI2VuZGlmCit9CisKIGlubGluZSBGb3JtRGF0YTo6Rm9ybURhdGEo
KQogICAgIDogbV9pZGVudGlmaWVyKDApCiAgICAgLCBtX2hhc0dlbmVyYXRlZEZpbGVzKGZhbHNl
KQpAQCAtODUsNyArMTA4LDcgQEAgUGFzc1JlZlB0cjxGb3JtRGF0YT4gRm9ybURhdGE6OmNyZWF0
ZShjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSkKIFBhc3NSZWZQdHI8Rm9ybURhdGE+IEZv
cm1EYXRhOjpjcmVhdGUoY29uc3QgQ1N0cmluZyYgc3RyaW5nKQogewogICAgIFJlZlB0cjxGb3Jt
RGF0YT4gcmVzdWx0ID0gY3JlYXRlKCk7Ci0gICAgcmVzdWx0LT5hcHBlbmREYXRhKHN0cmluZy5k
YXRhKCksIHN0cmluZy5sZW5ndGgoKSk7CisgICAgcmVzdWx0LT5hcHBlbmRTdHJpbmcoc3RyaW5n
KTsKICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0KIApAQCAtOTYsMTcgKzExOSwxNyBA
QCBQYXNzUmVmUHRyPEZvcm1EYXRhPiBGb3JtRGF0YTo6Y3JlYXRlKGNvbnN0IFZlY3RvcjxjaGFy
PiYgdmVjdG9yKQogICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRy
PEZvcm1EYXRhPiBGb3JtRGF0YTo6Y3JlYXRlKGNvbnN0IERPTUZvcm1EYXRhJiBkb21Gb3JtRGF0
YSkKK1Bhc3NSZWZQdHI8Rm9ybURhdGE+IEZvcm1EYXRhOjpjcmVhdGUoY29uc3QgQmxvYkl0ZW1M
aXN0JiBpdGVtcywgY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZykKIHsKICAgICBSZWZQdHI8
Rm9ybURhdGE+IHJlc3VsdCA9IGNyZWF0ZSgpOwotICAgIHJlc3VsdC0+YXBwZW5kRE9NRm9ybURh
dGEoZG9tRm9ybURhdGEsIGZhbHNlLCAwKTsKKyAgICByZXN1bHQtPmFwcGVuZEl0ZW1zKGl0ZW1z
LCBlbmNvZGluZywgZmFsc2UsIDApOwogICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwogfQog
Ci1QYXNzUmVmUHRyPEZvcm1EYXRhPiBGb3JtRGF0YTo6Y3JlYXRlTXVsdGlQYXJ0KGNvbnN0IERP
TUZvcm1EYXRhJiBkb21Gb3JtRGF0YSwgRG9jdW1lbnQqIGRvY3VtZW50KQorUGFzc1JlZlB0cjxG
b3JtRGF0YT4gRm9ybURhdGE6OmNyZWF0ZU11bHRpUGFydChjb25zdCBCbG9iSXRlbUxpc3QmIGl0
ZW1zLCBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nLCBEb2N1bWVudCogZG9jdW1lbnQpCiB7
CiAgICAgUmVmUHRyPEZvcm1EYXRhPiByZXN1bHQgPSBjcmVhdGUoKTsKLSAgICByZXN1bHQtPmFw
cGVuZERPTUZvcm1EYXRhKGRvbUZvcm1EYXRhLCB0cnVlLCBkb2N1bWVudCk7CisgICAgcmVzdWx0
LT5hcHBlbmRJdGVtcyhpdGVtcywgZW5jb2RpbmcsIHRydWUsIGRvY3VtZW50KTsKICAgICByZXR1
cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0KIApAQCAtMTI1LDg0ICsxNDgsNjggQEAgUGFzc1JlZlB0
cjxGb3JtRGF0YT4gRm9ybURhdGE6OmRlZXBDb3B5KCkgY29uc3QKICAgICBmb3JtRGF0YS0+bV9l
bGVtZW50cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG4pOwogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbjsgKytpKSB7CiAgICAgICAgIGNvbnN0IEZvcm1EYXRhRWxlbWVudCYgZSA9IG1fZWxl
bWVudHNbaV07Ci0gICAgICAgIHN3aXRjaCAoZS5tX3R5cGUpIHsKLSAgICAgICAgY2FzZSBGb3Jt
RGF0YUVsZW1lbnQ6OmRhdGE6Ci0gICAgICAgICAgICBmb3JtRGF0YS0+bV9lbGVtZW50cy5hcHBl
bmQoRm9ybURhdGFFbGVtZW50KGUubV9kYXRhKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBGb3JtRGF0YUVsZW1lbnQ6OmVuY29kZWRGaWxlOgotI2lmIEVOQUJMRShCTE9CX1NM
SUNFKQotICAgICAgICAgICAgZm9ybURhdGEtPm1fZWxlbWVudHMuYXBwZW5kKEZvcm1EYXRhRWxl
bWVudChlLm1fZmlsZW5hbWUsIGUubV9maWxlU3RhcnQsIGUubV9maWxlTGVuZ3RoLCBlLm1fZXhw
ZWN0ZWRGaWxlTW9kaWZpY2F0aW9uVGltZSwgZS5tX3Nob3VsZEdlbmVyYXRlRmlsZSkpOwotI2Vs
c2UKLSAgICAgICAgICAgIGZvcm1EYXRhLT5tX2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVsZW1l
bnQoZS5tX2ZpbGVuYW1lLCBlLm1fc2hvdWxkR2VuZXJhdGVGaWxlKSk7Ci0jZW5kaWYKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9CisgICAgICAgIGZvcm1EYXRhLT5tX2VsZW1lbnRzLmFw
cGVuZChGb3JtRGF0YUVsZW1lbnQoZS5pdGVtKCktPmRlZXBDb3B5KCksIGUubV9zaG91bGRHZW5l
cmF0ZUZpbGUpKTsKICAgICB9CiAgICAgcmV0dXJuIGZvcm1EYXRhLnJlbGVhc2UoKTsKIH0KIAog
dm9pZCBGb3JtRGF0YTo6YXBwZW5kRGF0YShjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSkK
IHsKLSAgICBpZiAobV9lbGVtZW50cy5pc0VtcHR5KCkgfHwgbV9lbGVtZW50cy5sYXN0KCkubV90
eXBlICE9IEZvcm1EYXRhRWxlbWVudDo6ZGF0YSkKLSAgICAgICAgbV9lbGVtZW50cy5hcHBlbmQo
Rm9ybURhdGFFbGVtZW50KCkpOwotICAgIEZvcm1EYXRhRWxlbWVudCYgZSA9IG1fZWxlbWVudHMu
bGFzdCgpOwotICAgIHNpemVfdCBvbGRTaXplID0gZS5tX2RhdGEuc2l6ZSgpOwotICAgIGUubV9k
YXRhLmdyb3cob2xkU2l6ZSArIHNpemUpOwotICAgIG1lbWNweShlLm1fZGF0YS5kYXRhKCkgKyBv
bGRTaXplLCBkYXRhLCBzaXplKTsKKyAgICBtX2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVsZW1l
bnQoQnl0ZXNBcnJheUJsb2JJdGVtOjpjcmVhdGUoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGRh
dGEpLCBzaXplKSkpOworfQorCit2b2lkIEZvcm1EYXRhOjphcHBlbmRTdHJpbmcoY29uc3QgQ1N0
cmluZyYgc3RyaW5nKQoreworICAgIG1fZWxlbWVudHMuYXBwZW5kKEZvcm1EYXRhRWxlbWVudChT
dHJpbmdCbG9iSXRlbTo6Y3JlYXRlKHN0cmluZykpKTsKIH0KIAogdm9pZCBGb3JtRGF0YTo6YXBw
ZW5kRmlsZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBib29sIHNob3VsZEdlbmVyYXRlRmlsZSkK
IHsKLSNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAgICBtX2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0
YUVsZW1lbnQoZmlsZW5hbWUsIDAsIEJsb2I6OnRvRW5kT2ZGaWxlLCBCbG9iOjpkb05vdENoZWNr
RmlsZUNoYW5nZSwgc2hvdWxkR2VuZXJhdGVGaWxlKSk7Ci0jZWxzZQotICAgIG1fZWxlbWVudHMu
YXBwZW5kKEZvcm1EYXRhRWxlbWVudChmaWxlbmFtZSwgc2hvdWxkR2VuZXJhdGVGaWxlKSk7Ci0j
ZW5kaWYKKyAgICBtX2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVsZW1lbnQoRmlsZUJsb2JJdGVt
OjpjcmVhdGUoZmlsZW5hbWUpLCBzaG91bGRHZW5lcmF0ZUZpbGUpKTsKK30KKwordm9pZCBGb3Jt
RGF0YTo6YXBwZW5kQmxvYkl0ZW1MaXN0KGNvbnN0IEJsb2JJdGVtTGlzdCYgbGlzdCkKK3sKKyAg
ICBmb3IgKEJsb2JJdGVtTGlzdDo6Y29uc3RfaXRlcmF0b3IgaXRlcihsaXN0LmJlZ2luKCkpOyBp
dGVyICE9IGxpc3QuZW5kKCk7ICsraXRlcikKKyAgICAgICAgbV9lbGVtZW50cy5hcHBlbmQoKml0
ZXIpOwogfQogCiAjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCiB2b2lkIEZvcm1EYXRhOjphcHBlbmRG
aWxlUmFuZ2UoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxv
bmcgbGVuZ3RoLCBkb3VibGUgZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lLCBib29sIHNob3VsZEdl
bmVyYXRlRmlsZSkKIHsKLSAgICBtX2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVsZW1lbnQoZmls
ZW5hbWUsIHN0YXJ0LCBsZW5ndGgsIGV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZSwgc2hvdWxkR2Vu
ZXJhdGVGaWxlKSk7CisgICAgaWYgKGxlbmd0aCA9PSBGb3JtRGF0YUVsZW1lbnQ6OnRvRW5kT2ZG
aWxlKSB7CisgICAgICAgIEFTU0VSVCghc3RhcnQpOworICAgICAgICBBU1NFUlQoIWV4cGVjdGVk
TW9kaWZpY2F0aW9uVGltZSk7CisgICAgICAgIG1fZWxlbWVudHMuYXBwZW5kKEZvcm1EYXRhRWxl
bWVudChGaWxlQmxvYkl0ZW06OmNyZWF0ZShmaWxlbmFtZSksIHNob3VsZEdlbmVyYXRlRmlsZSkp
OworICAgIH0gZWxzZQorICAgICAgICBtX2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVsZW1lbnQo
RmlsZVJhbmdlQmxvYkl0ZW06OmNyZWF0ZShmaWxlbmFtZSwgc3RhcnQsIGxlbmd0aCwgZXhwZWN0
ZWRNb2RpZmljYXRpb25UaW1lKSwgc2hvdWxkR2VuZXJhdGVGaWxlKSk7CiB9CiAjZW5kaWYKIAot
dm9pZCBGb3JtRGF0YTo6YXBwZW5kRE9NRm9ybURhdGEoY29uc3QgRE9NRm9ybURhdGEmIGRvbUZv
cm1EYXRhLCBib29sIGlzTXVsdGlQYXJ0Rm9ybSwgRG9jdW1lbnQqIGRvY3VtZW50KQordm9pZCBG
b3JtRGF0YTo6YXBwZW5kSXRlbXMoY29uc3QgQmxvYkl0ZW1MaXN0JiBpdGVtcywgY29uc3QgVGV4
dEVuY29kaW5nJiBlbmNvZGluZywgYm9vbCBpc011bHRpUGFydEZvcm0sIERvY3VtZW50KiBkb2N1
bWVudCkKIHsKICAgICBGb3JtRGF0YUJ1aWxkZXIgZm9ybURhdGFCdWlsZGVyOwogICAgIGlmIChp
c011bHRpUGFydEZvcm0pCiAgICAgICAgIG1fYm91bmRhcnkgPSBmb3JtRGF0YUJ1aWxkZXIuZ2Vu
ZXJhdGVVbmlxdWVCb3VuZGFyeVN0cmluZygpOwogCiAgICAgVmVjdG9yPGNoYXI+IGVuY29kZWRE
YXRhOwotICAgIFRleHRFbmNvZGluZyBlbmNvZGluZyA9IGRvbUZvcm1EYXRhLmVuY29kaW5nKCk7
CiAKLSAgICBjb25zdCBWZWN0b3I8Rm9ybURhdGFMaXN0OjpJdGVtPiYgbGlzdCA9IGRvbUZvcm1E
YXRhLmxpc3QoKTsKLSAgICBzaXplX3QgZm9ybURhdGFMaXN0U2l6ZSA9IGxpc3Quc2l6ZSgpOwor
ICAgIHNpemVfdCBmb3JtRGF0YUxpc3RTaXplID0gaXRlbXMuc2l6ZSgpOwogICAgIEFTU0VSVCgh
KGZvcm1EYXRhTGlzdFNpemUgJSAyKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmb3Jt
RGF0YUxpc3RTaXplOyBpICs9IDIpIHsKLSAgICAgICAgY29uc3QgRm9ybURhdGFMaXN0OjpJdGVt
JiBrZXkgPSBsaXN0W2ldOwotICAgICAgICBjb25zdCBGb3JtRGF0YUxpc3Q6Okl0ZW0mIHZhbHVl
ID0gbGlzdFtpICsgMV07CisgICAgICAgIGNvbnN0IFN0cmluZ0Jsb2JJdGVtKiBrZXkgPSBpdGVt
c1tpXS0+dG9TdHJpbmdCbG9iSXRlbSgpOworICAgICAgICBjb25zdCBSZWZQdHI8QmxvYkl0ZW0+
IHZhbHVlID0gaXRlbXNbaSArIDFdOworICAgICAgICBBU1NFUlQoa2V5KTsKICAgICAgICAgaWYg
KGlzTXVsdGlQYXJ0Rm9ybSkgewogICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGhlYWRlcjsKLSAg
ICAgICAgICAgIGZvcm1EYXRhQnVpbGRlci5iZWdpbk11bHRpUGFydEhlYWRlcihoZWFkZXIsIG1f
Ym91bmRhcnkuZGF0YSgpLCBrZXkuZGF0YSgpKTsKKyAgICAgICAgICAgIGZvcm1EYXRhQnVpbGRl
ci5iZWdpbk11bHRpUGFydEhlYWRlcihoZWFkZXIsIG1fYm91bmRhcnkuZGF0YSgpLCBrZXktPmNz
dHIoKSk7CiAKICAgICAgICAgICAgIGJvb2wgc2hvdWxkR2VuZXJhdGVGaWxlID0gZmFsc2U7CiAg
ICAgICAgICAgICAvLyBJZiB0aGUgY3VycmVudCB0eXBlIGlzIEZJTEUsIHRoZW4gd2UgYWxzbyBu
ZWVkIHRvIGluY2x1ZGUgdGhlIGZpbGVuYW1lCi0gICAgICAgICAgICBpZiAodmFsdWUuYmxvYigp
KSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBwYXRoID0gdmFsdWUuYmxvYigpLT5w
YXRoKCk7Ci0jaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgICAgICAgICAgICAgU3RyaW5nIGZp
bGVOYW1lOwotICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5ibG9iKCktPmlzRmlsZSgpKQotICAg
ICAgICAgICAgICAgICAgICBmaWxlTmFtZSA9IHN0YXRpY19jYXN0PEZpbGUqPih2YWx1ZS5ibG9i
KCkpLT5maWxlTmFtZSgpOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICAvLyBJZiBhIGJsb2IgaXMgc2xpY2VkIGZyb20gYSBmaWxlLCBpdCBkb2VzIG5vdCBoYXZl
IHRoZSBmaWxlbmFtZS4gSW4gdGhpcyBjYXNlLCBsZXQncyBwcm9kdWNlIGEgdW5pcXVlIGZpbGVu
YW1lLgotICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZSA9ICJCbG9iIiArIGNyZWF0ZUNhbm9u
aWNhbFVVSURTdHJpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWUucmVwbGFjZSgi
LSIsICIiKTsgLy8gRm9yIHNhZnR5LCByZW1vdmUgJy0nIGZyb20gdGhlIGZpbGVuYW1lIHNuY2Ug
c29tZSBzZXJ2ZXJzIG1heSBub3QgbGlrZSBpdC4KLSAgICAgICAgICAgICAgICB9Ci0jZWxzZQot
ICAgICAgICAgICAgICAgIEFTU0VSVCh2YWx1ZS5ibG9iKCktPmlzRmlsZSgpKTsKLSAgICAgICAg
ICAgICAgICBTdHJpbmcgZmlsZU5hbWUgPSBzdGF0aWNfY2FzdDxGaWxlKj4odmFsdWUuYmxvYigp
KS0+ZmlsZU5hbWUoKTsKLSNlbmRpZgorICAgICAgICAgICAgY29uc3QgRmlsZUJsb2JJdGVtKiBm
aWxlSXRlbSA9IHZhbHVlLT50b0ZpbGVCbG9iSXRlbSgpOworICAgICAgICAgICAgaWYgKGZpbGVJ
dGVtKSB7CisgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBwYXRoID0gZmlsZUl0ZW0tPnBh
dGgoKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgZmlsZU5hbWUgPSBmaWxlSXRlbS0+bmFtZSgp
OwogCiAgICAgICAgICAgICAgICAgLy8gTGV0IHRoZSBhcHBsaWNhdGlvbiBzcGVjaWZ5IGEgZmls
ZW5hbWUgaWYgaXQncyBnb2luZyB0byBnZW5lcmF0ZSBhIHJlcGxhY2VtZW50IGZpbGUgZm9yIHRo
ZSB1cGxvYWQuCiAgICAgICAgICAgICAgICAgaWYgKCFwYXRoLmlzRW1wdHkoKSkgewpAQCAtMjE3
LDkgKzIyNCw5IEBAIHZvaWQgRm9ybURhdGE6OmFwcGVuZERPTUZvcm1EYXRhKGNvbnN0IERPTUZv
cm1EYXRhJiBkb21Gb3JtRGF0YSwgYm9vbCBpc011bHRpUGFyCiAgICAgICAgICAgICAgICAgLy8g
V2UgaGF2ZSB0byBpbmNsdWRlIHRoZSBmaWxlbmFtZT0iLi4iIHBhcnQgaW4gdGhlIGhlYWRlciwg
ZXZlbiBpZiB0aGUgZmlsZW5hbWUgaXMgZW1wdHkKICAgICAgICAgICAgICAgICBmb3JtRGF0YUJ1
aWxkZXIuYWRkRmlsZW5hbWVUb011bHRpUGFydEhlYWRlcihoZWFkZXIsIGVuY29kaW5nLCBmaWxl
TmFtZSk7CiAKLSAgICAgICAgICAgICAgICAvLyBJZiBhIGJsb2IgaXMgc2xpY2VkIGZyb20gYSBm
aWxlLCBkbyBub3QgYWRkIHRoZSBjb250ZW50IHR5cGUuIAorICAgICAgICAgICAgICAgIC8vIElm
IHRoZSBpdGVtIGlzIHNsaWNlZCBmcm9tIGEgZmlsZSwgZG8gbm90IGFkZCB0aGUgY29udGVudCB0
eXBlLgogI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgICAgICAgICAgICAgIGlmICghZmlsZU5h
bWUuaXNFbXB0eSgpICYmIHZhbHVlLmJsb2IoKS0+aXNGaWxlKCkpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoIWZpbGVOYW1lLmlzRW1wdHkoKSAmJiAhdmFsdWUtPnRvRmlsZVJhbmdlQmxvYkl0ZW0o
KSkgewogI2Vsc2UKICAgICAgICAgICAgICAgICBpZiAoIWZpbGVOYW1lLmlzRW1wdHkoKSkgewog
I2VuZGlmCkBAIC0yMzcsMjUgKzI0NCwyMCBAQCB2b2lkIEZvcm1EYXRhOjphcHBlbmRET01Gb3Jt
RGF0YShjb25zdCBET01Gb3JtRGF0YSYgZG9tRm9ybURhdGEsIGJvb2wgaXNNdWx0aVBhcgogCiAg
ICAgICAgICAgICAvLyBBcHBlbmQgYm9keQogICAgICAgICAgICAgYXBwZW5kRGF0YShoZWFkZXIu
ZGF0YSgpLCBoZWFkZXIuc2l6ZSgpKTsKLSAgICAgICAgICAgIGlmIChzaXplX3QgZGF0YVNpemUg
PSB2YWx1ZS5kYXRhKCkubGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAgYXBwZW5kRGF0YSh2YWx1
ZS5kYXRhKCkuZGF0YSgpLCBkYXRhU2l6ZSk7Ci0gICAgICAgICAgICBlbHNlIGlmICh2YWx1ZS5i
bG9iKCkgJiYgIXZhbHVlLmJsb2IoKS0+cGF0aCgpLmlzRW1wdHkoKSkKLSNpZiBFTkFCTEUoQkxP
Ql9TTElDRSkKLSAgICAgICAgICAgICAgICBhcHBlbmRGaWxlUmFuZ2UodmFsdWUuYmxvYigpLT5w
YXRoKCksIHZhbHVlLmJsb2IoKS0+c3RhcnQoKSwgdmFsdWUuYmxvYigpLT5sZW5ndGgoKSwgdmFs
dWUuYmxvYigpLT5tb2RpZmljYXRpb25UaW1lKCksIHNob3VsZEdlbmVyYXRlRmlsZSk7Ci0jZWxz
ZQotICAgICAgICAgICAgICAgIGFwcGVuZEZpbGUodmFsdWUuYmxvYigpLT5wYXRoKCksIHNob3Vs
ZEdlbmVyYXRlRmlsZSk7Ci0jZW5kaWYKLQorICAgICAgICAgICAgbV9lbGVtZW50cy5hcHBlbmQo
Rm9ybURhdGFFbGVtZW50KHZhbHVlLCBzaG91bGRHZW5lcmF0ZUZpbGUpKTsKICAgICAgICAgICAg
IGFwcGVuZERhdGEoIlxyXG4iLCAyKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8v
IE9taXQgdGhlIG5hbWUgImlzaW5kZXgiIGlmIGl0J3MgdGhlIGZpcnN0IGZvcm0gZGF0YSBlbGVt
ZW50LgogICAgICAgICAgICAgLy8gRklYTUU6IFdoeSBpcyB0aGlzIGEgZ29vZCBydWxlPyBJcyB0
aGlzIG9ic29sZXRlIG5vdz8KLSAgICAgICAgICAgIGlmIChlbmNvZGVkRGF0YS5pc0VtcHR5KCkg
JiYga2V5LmRhdGEoKSA9PSAiaXNpbmRleCIpCi0gICAgICAgICAgICAgICAgRm9ybURhdGFCdWls
ZGVyOjplbmNvZGVTdHJpbmdBc0Zvcm1EYXRhKGVuY29kZWREYXRhLCB2YWx1ZS5kYXRhKCkpOwor
ICAgICAgICAgICAgY29uc3QgU3RyaW5nQmxvYkl0ZW0qIHN0cmluZ1ZhbHVlID0gdmFsdWUtPnRv
U3RyaW5nQmxvYkl0ZW0oKTsKKyAgICAgICAgICAgIGlmICghc3RyaW5nVmFsdWUpCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAoZW5jb2RlZERhdGEuaXNFbXB0eSgp
ICYmIGtleS0+Y3N0cigpID09ICJpc2luZGV4IikKKyAgICAgICAgICAgICAgICBGb3JtRGF0YUJ1
aWxkZXI6OmVuY29kZVN0cmluZ0FzRm9ybURhdGEoZW5jb2RlZERhdGEsIHN0cmluZ1ZhbHVlLT5j
c3RyKCkpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGZvcm1EYXRhQnVpbGRl
ci5hZGRLZXlWYWx1ZVBhaXJBc0Zvcm1EYXRhKGVuY29kZWREYXRhLCBrZXkuZGF0YSgpLCB2YWx1
ZS5kYXRhKCkpOworICAgICAgICAgICAgICAgIGZvcm1EYXRhQnVpbGRlci5hZGRLZXlWYWx1ZVBh
aXJBc0Zvcm1EYXRhKGVuY29kZWREYXRhLCBrZXktPmNzdHIoKSwgc3RyaW5nVmFsdWUtPmNzdHIo
KSk7CiAgICAgICAgIH0KLSAgICB9IAorICAgIH0KIAogICAgIGlmIChpc011bHRpUGFydEZvcm0p
CiAgICAgICAgIGZvcm1EYXRhQnVpbGRlci5hZGRCb3VuZGFyeVRvTXVsdGlQYXJ0SGVhZGVyKGVu
Y29kZWREYXRhLCBtX2JvdW5kYXJ5LmRhdGEoKSwgdHJ1ZSk7CkBAIC0yNzAsMTIgKzI3Miw4IEBA
IHZvaWQgRm9ybURhdGE6OmZsYXR0ZW4oVmVjdG9yPGNoYXI+JiBkYXRhKSBjb25zdAogICAgIHNp
emVfdCBuID0gbV9lbGVtZW50cy5zaXplKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBu
OyArK2kpIHsKICAgICAgICAgY29uc3QgRm9ybURhdGFFbGVtZW50JiBlID0gbV9lbGVtZW50c1tp
XTsKLSAgICAgICAgaWYgKGUubV90eXBlID09IEZvcm1EYXRhRWxlbWVudDo6ZGF0YSkgewotICAg
ICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBkYXRhLnNpemUoKTsKLSAgICAgICAgICAgIHNpemVf
dCBkZWx0YSA9IGUubV9kYXRhLnNpemUoKTsKLSAgICAgICAgICAgIGRhdGEuZ3JvdyhvbGRTaXpl
ICsgZGVsdGEpOwotICAgICAgICAgICAgbWVtY3B5KGRhdGEuZGF0YSgpICsgb2xkU2l6ZSwgZS5t
X2RhdGEuZGF0YSgpLCBkZWx0YSk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKGUubV90eXBlID09
IEZvcm1EYXRhRWxlbWVudDo6ZGF0YSkKKyAgICAgICAgICAgIGRhdGEuYXBwZW5kKGUubV9kYXRh
LmRhdGEoKSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihlLm1fZGF0YS5zaXplKCkpKTsKICAgICB9CiB9
CiAKQEAgLTI4OSwxMCArMjg3LDEwIEBAIFN0cmluZyBGb3JtRGF0YTo6ZmxhdHRlblRvU3RyaW5n
KCkgY29uc3QKIHZvaWQgRm9ybURhdGE6OmdlbmVyYXRlRmlsZXMoRG9jdW1lbnQqIGRvY3VtZW50
KQogewogICAgIEFTU0VSVCghbV9oYXNHZW5lcmF0ZWRGaWxlcyk7Ci0gICAgCisKICAgICBpZiAo
bV9oYXNHZW5lcmF0ZWRGaWxlcykKICAgICAgICAgcmV0dXJuOwotICAgIAorCiAgICAgUGFnZSog
cGFnZSA9IGRvY3VtZW50LT5wYWdlKCk7CiAgICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm47
CkBAIC0zMDIsNyArMzAwLDcgQEAgdm9pZCBGb3JtRGF0YTo6Z2VuZXJhdGVGaWxlcyhEb2N1bWVu
dCogZG9jdW1lbnQpCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuOyArK2kpIHsKICAgICAg
ICAgRm9ybURhdGFFbGVtZW50JiBlID0gbV9lbGVtZW50c1tpXTsKICAgICAgICAgaWYgKGUubV90
eXBlID09IEZvcm1EYXRhRWxlbWVudDo6ZW5jb2RlZEZpbGUgJiYgZS5tX3Nob3VsZEdlbmVyYXRl
RmlsZSkgewotICAgICAgICAgICAgZS5tX2dlbmVyYXRlZEZpbGVuYW1lID0gY2xpZW50LT5nZW5l
cmF0ZVJlcGxhY2VtZW50RmlsZShlLm1fZmlsZW5hbWUpOworICAgICAgICAgICAgZS5tX2dlbmVy
YXRlZEZpbGVuYW1lID0gY2xpZW50LT5nZW5lcmF0ZVJlcGxhY2VtZW50RmlsZShlLml0ZW0oKS0+
dG9GaWxlQmxvYkl0ZW0oKS0+cGF0aCgpKTsKICAgICAgICAgICAgIG1faGFzR2VuZXJhdGVkRmls
ZXMgPSB0cnVlOwogICAgICAgICB9CiAgICAgfQpAQCAtMzEyLDcgKzMxMCw3IEBAIHZvaWQgRm9y
bURhdGE6OnJlbW92ZUdlbmVyYXRlZEZpbGVzSWZOZWVkZWQoKQogewogICAgIGlmICghbV9oYXNH
ZW5lcmF0ZWRGaWxlcykKICAgICAgICAgcmV0dXJuOwotICAgICAgICAKKwogICAgIHNpemVfdCBu
ID0gbV9lbGVtZW50cy5zaXplKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuOyArK2kp
IHsKICAgICAgICAgRm9ybURhdGFFbGVtZW50JiBlID0gbV9lbGVtZW50c1tpXTsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5oIGIvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL0Zvcm1EYXRhLmgKaW5kZXggYTQzOTAyMzQ3OTZhMGUyZjE0ZjVkMzQ5ZjVkZDBl
ZmZjMGE0YjdjZC4uYWM1NWEwZDZhNzRmZDhlNDEyNTNkMmMwOGFlMDg3OWVmOTQ5MGZlZiAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmgKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmgKQEAgLTIwLDc0ICsyMCw4OSBAQAogI2lmbmRl
ZiBGb3JtRGF0YV9oCiAjZGVmaW5lIEZvcm1EYXRhX2gKIAorI2luY2x1ZGUgIkJsb2JJdGVtLmgi
CiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFz
cyBET01Gb3JtRGF0YTsKIGNsYXNzIERvY3VtZW50OworY2xhc3MgVGV4dEVuY29kaW5nOwogCisv
LyBBIHdyYXBwZXIgY2xhc3Mgb2YgQmxvYkl0ZW0gZm9yIEZvcm1EYXRhLgogY2xhc3MgRm9ybURh
dGFFbGVtZW50IHsKIHB1YmxpYzoKLSAgICBGb3JtRGF0YUVsZW1lbnQoKSA6IG1fdHlwZShkYXRh
KSB7IH0KLSAgICBGb3JtRGF0YUVsZW1lbnQoY29uc3QgVmVjdG9yPGNoYXI+JiBhcnJheSkgOiBt
X3R5cGUoZGF0YSksIG1fZGF0YShhcnJheSkgeyB9Ci0jaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0g
ICAgRm9ybURhdGFFbGVtZW50KGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGxvbmcgbG9uZyBmaWxl
U3RhcnQsIGxvbmcgbG9uZyBmaWxlTGVuZ3RoLCBkb3VibGUgZXhwZWN0ZWRGaWxlTW9kaWZpY2F0
aW9uVGltZSwgYm9vbCBzaG91bGRHZW5lcmF0ZUZpbGUpIDogbV90eXBlKGVuY29kZWRGaWxlKSwg
bV9maWxlbmFtZShmaWxlbmFtZSksIG1fZmlsZVN0YXJ0KGZpbGVTdGFydCksIG1fZmlsZUxlbmd0
aChmaWxlTGVuZ3RoKSwgbV9leHBlY3RlZEZpbGVNb2RpZmljYXRpb25UaW1lKGV4cGVjdGVkRmls
ZU1vZGlmaWNhdGlvblRpbWUpLCBtX3Nob3VsZEdlbmVyYXRlRmlsZShzaG91bGRHZW5lcmF0ZUZp
bGUpIHsgfQotI2Vsc2UKLSAgICBGb3JtRGF0YUVsZW1lbnQoY29uc3QgU3RyaW5nJiBmaWxlbmFt
ZSwgYm9vbCBzaG91bGRHZW5lcmF0ZUZpbGUpIDogbV90eXBlKGVuY29kZWRGaWxlKSwgbV9maWxl
bmFtZShmaWxlbmFtZSksIG1fc2hvdWxkR2VuZXJhdGVGaWxlKHNob3VsZEdlbmVyYXRlRmlsZSkg
eyB9Ci0jZW5kaWYKKyAgICBGb3JtRGF0YUVsZW1lbnQoKSA6IG1fZGF0YSgwKSB7IH0KKyAgICBG
b3JtRGF0YUVsZW1lbnQoUGFzc1JlZlB0cjxCbG9iSXRlbT4gYmxvYkl0ZW0sIGJvb2wgc2hvdWxk
R2VuZXJhdGVGaWxlID0gZmFsc2UpOworCisgICAgY29uc3QgQmxvYkl0ZW0qIGl0ZW0oKSBjb25z
dCB7IHJldHVybiBtX2l0ZW0uZ2V0KCk7IH0KKworICAgIFJlZlB0cjxCbG9iSXRlbT4gbV9pdGVt
OwogCisgICAgLy8gRklYTUU6IGNsZWFuIG1lIHVwLiAgQ29kZSBiZWxvdyBhcmUgbW9zdGx5IGtl
cHQgZm9yIGNvbXBhdGliaWxpdHkuCiAgICAgZW51bSB7IGRhdGEsIGVuY29kZWRGaWxlIH0gbV90
eXBlOwotICAgIFZlY3RvcjxjaGFyPiBtX2RhdGE7CisgICAgY29uc3Qgc3RydWN0IEJsb2JJdGVt
V3JhcHBlciB7CisgICAgICAgIEJsb2JJdGVtV3JhcHBlcihjb25zdCBCbG9iSXRlbVdyYXBwZXIm
IHYpIDogbV9pdGVtKHYubV9pdGVtKSB7IH0KKyAgICAgICAgQmxvYkl0ZW1XcmFwcGVyKGNvbnN0
IERhdGFCbG9iSXRlbSogaXRlbSkgOiBtX2l0ZW0oaXRlbSkgeyB9CisgICAgICAgIHNpemVfdCBz
aXplKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFtX2l0ZW0pCisgICAgICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90
PihtX2l0ZW0tPnNpemUoKSk7CisgICAgICAgIH0KKyAgICAgICAgY29uc3QgY2hhciogZGF0YSgp
IGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghbV9pdGVtKQorICAgICAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIG1faXRlbS0+ZGF0YSgpOworICAgICAg
ICB9CisgICAgICAgIGNoYXIqIHJlbGVhc2VCdWZmZXIoKSBjb25zdAorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAoIW1faXRlbSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
ICAgIHJldHVybiBtX2l0ZW0tPmRlZXBDb3B5QnVmZmVyKCk7CisgICAgICAgIH0KKyAgICAgICAg
Y29uc3QgRGF0YUJsb2JJdGVtKiBtX2l0ZW07CisgICAgfSBtX2RhdGE7CiAgICAgU3RyaW5nIG1f
ZmlsZW5hbWU7CiAjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCiAgICAgbG9uZyBsb25nIG1fZmlsZVN0
YXJ0OwogICAgIGxvbmcgbG9uZyBtX2ZpbGVMZW5ndGg7CiAgICAgZG91YmxlIG1fZXhwZWN0ZWRG
aWxlTW9kaWZpY2F0aW9uVGltZTsKKworICAgIHN0YXRpYyBjb25zdCBsb25nIGxvbmcgdG9FbmRP
ZkZpbGU7CiAjZW5kaWYKKwogICAgIFN0cmluZyBtX2dlbmVyYXRlZEZpbGVuYW1lOwogICAgIGJv
b2wgbV9zaG91bGRHZW5lcmF0ZUZpbGU7CiB9OwogCiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IEZvcm1EYXRhRWxlbWVudCYgYSwgY29uc3QgRm9ybURhdGFFbGVtZW50JiBiKQogewotICAg
IGlmICgmYSA9PSAmYikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgaWYgKGEubV90
eXBlICE9IGIubV90eXBlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGEubV9kYXRh
ICE9IGIubV9kYXRhKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0jaWYgRU5BQkxFKEJMT0JfU0xJ
Q0UpCi0gICAgaWYgKGEubV9maWxlbmFtZSAhPSBiLm1fZmlsZW5hbWUgfHwgYS5tX2ZpbGVTdGFy
dCAhPSBiLm1fZmlsZVN0YXJ0IHx8IGEubV9maWxlTGVuZ3RoICE9IGIubV9maWxlTGVuZ3RoIHx8
IGEubV9leHBlY3RlZEZpbGVNb2RpZmljYXRpb25UaW1lICE9IGIubV9leHBlY3RlZEZpbGVNb2Rp
ZmljYXRpb25UaW1lKQotI2Vsc2UKLSAgICBpZiAoYS5tX2ZpbGVuYW1lICE9IGIubV9maWxlbmFt
ZSkKLSNlbmRpZgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKKyAg
ICByZXR1cm4gYS5pdGVtKCktPmVxdWFscyhiLml0ZW0oKSk7CiB9Ci0gCisKIGlubGluZSBib29s
IG9wZXJhdG9yIT0oY29uc3QgRm9ybURhdGFFbGVtZW50JiBhLCBjb25zdCBGb3JtRGF0YUVsZW1l
bnQmIGIpCiB7CiAgICAgcmV0dXJuICEoYSA9PSBiKTsKIH0KLSAKKwogY2xhc3MgRm9ybURhdGEg
OiBwdWJsaWMgUmVmQ291bnRlZDxGb3JtRGF0YT4gewogcHVibGljOgogICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEZvcm1EYXRhPiBjcmVhdGUoKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxGb3JtRGF0
YT4gY3JlYXRlKGNvbnN0IHZvaWQqLCBzaXplX3QpOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZv
cm1EYXRhPiBjcmVhdGUoY29uc3QgV1RGOjpDU3RyaW5nJik7CiAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8Rm9ybURhdGE+IGNyZWF0ZShjb25zdCBWZWN0b3I8Y2hhcj4mKTsKLSAgICBzdGF0aWMgUGFz
c1JlZlB0cjxGb3JtRGF0YT4gY3JlYXRlKGNvbnN0IERPTUZvcm1EYXRhJik7Ci0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8Rm9ybURhdGE+IGNyZWF0ZU11bHRpUGFydChjb25zdCBET01Gb3JtRGF0YSYs
IERvY3VtZW50Kik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGNyZWF0ZShjb25z
dCBCbG9iSXRlbUxpc3QmLCBjb25zdCBUZXh0RW5jb2RpbmcmKTsKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxGb3JtRGF0YT4gY3JlYXRlTXVsdGlQYXJ0KGNvbnN0IEJsb2JJdGVtTGlzdCYsIGNvbnN0
IFRleHRFbmNvZGluZyYsIERvY3VtZW50Kik7CiAgICAgUGFzc1JlZlB0cjxGb3JtRGF0YT4gY29w
eSgpIGNvbnN0OwogICAgIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGRlZXBDb3B5KCkgY29uc3Q7CiAg
ICAgfkZvcm1EYXRhKCk7Ci0gICAgCisKICAgICB2b2lkIGFwcGVuZERhdGEoY29uc3Qgdm9pZCog
ZGF0YSwgc2l6ZV90KTsKKyAgICB2b2lkIGFwcGVuZEJsb2JJdGVtTGlzdChjb25zdCBCbG9iSXRl
bUxpc3QmKTsKKyAgICB2b2lkIGFwcGVuZFN0cmluZyhjb25zdCBDU3RyaW5nJik7CiAgICAgdm9p
ZCBhcHBlbmRGaWxlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGJvb2wgc2hvdWxkR2VuZXJhdGVG
aWxlID0gZmFsc2UpOwogI2lmIEVOQUJMRShCTE9CX1NMSUNFKQogICAgIHZvaWQgYXBwZW5kRmls
ZVJhbmdlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25n
IGxlbmd0aCwgZG91YmxlIGV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZSwgYm9vbCBzaG91bGRHZW5l
cmF0ZUZpbGUgPSBmYWxzZSk7CkBAIC0xMTUsOSArMTMwLDEwIEBAIHByaXZhdGU6CiAgICAgRm9y
bURhdGEoKTsKICAgICBGb3JtRGF0YShjb25zdCBGb3JtRGF0YSYpOwogCi0gICAgdm9pZCBhcHBl
bmRET01Gb3JtRGF0YShjb25zdCBET01Gb3JtRGF0YSYgZG9tRm9ybURhdGEsIGJvb2wgaXNNdWx0
aVBhcnRGb3JtLCBEb2N1bWVudCogZG9jdW1lbnQpOworICAgIHZvaWQgYXBwZW5kSXRlbXMoY29u
c3QgQmxvYkl0ZW1MaXN0JiwgY29uc3QgVGV4dEVuY29kaW5nJiwgYm9vbCBpc011bHRpUGFydEZv
cm0sIERvY3VtZW50Kik7CiAKICAgICBWZWN0b3I8Rm9ybURhdGFFbGVtZW50PiBtX2VsZW1lbnRz
OworCiAgICAgaW50NjRfdCBtX2lkZW50aWZpZXI7CiAgICAgYm9vbCBtX2hhc0dlbmVyYXRlZEZp
bGVzOwogICAgIGJvb2wgbV9hbHdheXNTdHJlYW07CkBAIC0xMzEsNyArMTQ3LDcgQEAgaW5saW5l
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb3JtRGF0YSYgYSwgY29uc3QgRm9ybURhdGEmIGIpCiAK
IGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgRm9ybURhdGEmIGEsIGNvbnN0IEZvcm1EYXRh
JiBiKQogewotICAgIHJldHVybiBhLmVsZW1lbnRzKCkgIT0gYi5lbGVtZW50cygpOworICAgIHJl
dHVybiAhKGEgPT0gYik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvRm9ybURhdGFTdHJlYW1NYWMubW0gYi9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL0Zvcm1EYXRhU3RyZWFtTWFjLm1tCmluZGV4IDI3ZWNm
ZDA4YWQ1YWFhYjg3NTZmYTU5NmQ5OTZiZDJmNmVjNWQwM2YuLjFlNDhlMmY4ZmJiMmZmZTZlNzc5
ZWFiMTBhNjcxMjA0MTc0NmEwNDIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9tYWMvRm9ybURhdGFTdHJlYW1NYWMubW0KKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L21hYy9Gb3JtRGF0YVN0cmVhbU1hYy5tbQpAQCAtMzEsNyArMzEsNiBAQAogI2ltcG9ydCAiY29u
ZmlnLmgiCiAjaW1wb3J0ICJGb3JtRGF0YVN0cmVhbU1hYy5oIgogCi0jaW1wb3J0ICJCbG9iLmgi
CiAjaW1wb3J0ICJGaWxlU3lzdGVtLmgiCiAjaW1wb3J0ICJGb3JtRGF0YS5oIgogI2ltcG9ydCAi
UmVzb3VyY2VIYW5kbGUuaCIKQEAgLTE0Miw3ICsxNDEsNyBAQCBzdGF0aWMgdm9pZCBjbG9zZUN1
cnJlbnRTdHJlYW0oRm9ybVN0cmVhbUZpZWxkcyAqZm9ybSkKICAgICAgICAgQ0ZSZWxlYXNlKGZv
cm0tPmN1cnJlbnRTdHJlYW0pOwogICAgICAgICBmb3JtLT5jdXJyZW50U3RyZWFtID0gTlVMTDsK
ICNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAgICAgICAgZm9ybS0+Y3VycmVudFN0cmVhbVJhbmdl
TGVuZ3RoID0gQmxvYjo6dG9FbmRPZkZpbGU7CisgICAgICAgIGZvcm0tPmN1cnJlbnRTdHJlYW1S
YW5nZUxlbmd0aCA9IEZvcm1EYXRhRWxlbWVudDo6dG9FbmRPZkZpbGU7CiAjZW5kaWYKICAgICB9
CiAgICAgaWYgKGZvcm0tPmN1cnJlbnREYXRhKSB7CkBAIC0xNjEsMjEgKzE2MCwxNyBAQCBzdGF0
aWMgYm9vbCBhZHZhbmNlQ3VycmVudFN0cmVhbShGb3JtU3RyZWFtRmllbGRzKiBmb3JtKQogCiAg
ICAgLy8gQ3JlYXRlIHRoZSBuZXcgc3RyZWFtLgogICAgIEZvcm1EYXRhRWxlbWVudCYgbmV4dElu
cHV0ID0gZm9ybS0+cmVtYWluaW5nRWxlbWVudHMubGFzdCgpOworCisgICAgLy8gQ2hlY2sgaWYg
dGhlIHVuZGVybHlpbmcgZGF0YSBoYXMgYmVjb21lIHN0YWxlIChlLmcuIHRoZSBmaWxlIGhhcyBi
ZWVuIGNoYW5nZWQgc2luY2UgaXRzIHNuYXBzaG90IGhhcyBiZWVuIHRha2VuKSBvciBub3QuCisg
ICAgaWYgKCFuZXh0SW5wdXQubV9pdGVtLT5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKwogICAgIGlmIChuZXh0SW5wdXQubV90eXBlID09IEZvcm1EYXRhRWxlbWVudDo6ZGF0YSkg
ewogICAgICAgICBzaXplX3Qgc2l6ZSA9IG5leHRJbnB1dC5tX2RhdGEuc2l6ZSgpOwogICAgICAg
ICBjaGFyKiBkYXRhID0gbmV4dElucHV0Lm1fZGF0YS5yZWxlYXNlQnVmZmVyKCk7CiAgICAgICAg
IGZvcm0tPmN1cnJlbnRTdHJlYW0gPSBDRlJlYWRTdHJlYW1DcmVhdGVXaXRoQnl0ZXNOb0NvcHko
MCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVSW50OCo+KGRhdGEpLCBzaXplLCBrQ0ZBbGxvY2F0
b3JOdWxsKTsKICAgICAgICAgZm9ybS0+Y3VycmVudERhdGEgPSBkYXRhOwogICAgIH0gZWxzZSB7
Ci0jaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgICAgIC8vIENoZWNrIGlmIHRoZSBmaWxlIGhh
cyBiZWVuIGNoYW5nZWQgb3Igbm90IGlmIHJlcXVpcmVkLgotICAgICAgICBpZiAobmV4dElucHV0
Lm1fZXhwZWN0ZWRGaWxlTW9kaWZpY2F0aW9uVGltZSAhPSBCbG9iOjpkb05vdENoZWNrRmlsZUNo
YW5nZSkgewotICAgICAgICAgICAgdGltZV90IGZpbGVNb2RpZmljYXRpb25UaW1lOwotICAgICAg
ICAgICAgaWYgKCFnZXRGaWxlTW9kaWZpY2F0aW9uVGltZShuZXh0SW5wdXQubV9maWxlbmFtZSwg
ZmlsZU1vZGlmaWNhdGlvblRpbWUpIHx8IGZpbGVNb2RpZmljYXRpb25UaW1lICE9IHN0YXRpY19j
YXN0PHRpbWVfdD4obmV4dElucHV0Lm1fZXhwZWN0ZWRGaWxlTW9kaWZpY2F0aW9uVGltZSkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0jZW5kaWYKLQogICAgICAg
ICBjb25zdCBTdHJpbmcmIHBhdGggPSBuZXh0SW5wdXQubV9zaG91bGRHZW5lcmF0ZUZpbGUgPyBu
ZXh0SW5wdXQubV9nZW5lcmF0ZWRGaWxlbmFtZSA6IG5leHRJbnB1dC5tX2ZpbGVuYW1lOwogICAg
ICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGZpbGVuYW1lKEFkb3B0Q0YsIHBhdGguY3JlYXRl
Q0ZTdHJpbmcoKSk7CiAgICAgICAgIFJldGFpblB0cjxDRlVSTFJlZj4gZmlsZVVSTChBZG9wdENG
LCBDRlVSTENyZWF0ZVdpdGhGaWxlU3lzdGVtUGF0aCgwLCBmaWxlbmFtZS5nZXQoKSwga0NGVVJM
UE9TSVhQYXRoU3R5bGUsIEZBTFNFKSk7CkBAIC0yMjIsNyArMjE3LDcgQEAgc3RhdGljIHZvaWQq
IGZvcm1DcmVhdGUoQ0ZSZWFkU3RyZWFtUmVmIHN0cmVhbSwgdm9pZCogY29udGV4dCkKICAgICBG
b3JtU3RyZWFtRmllbGRzKiBuZXdJbmZvID0gbmV3IEZvcm1TdHJlYW1GaWVsZHM7CiAgICAgbmV3
SW5mby0+Y3VycmVudFN0cmVhbSA9IE5VTEw7CiAjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAg
bmV3SW5mby0+Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoID0gQmxvYjo6dG9FbmRPZkZpbGU7Cisg
ICAgbmV3SW5mby0+Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoID0gRm9ybURhdGFFbGVtZW50Ojp0
b0VuZE9mRmlsZTsKICNlbmRpZgogICAgIG5ld0luZm8tPmN1cnJlbnREYXRhID0gMDsKICAgICBu
ZXdJbmZvLT5mb3JtU3RyZWFtID0gc3RyZWFtOyAvLyBEb24ndCByZXRhaW4uIFRoYXQgd291bGQg
Y3JlYXRlIGEgcmVmZXJlbmNlIGN5Y2xlLgpAQCAtMjcwLDcgKzI2NSw3IEBAIHN0YXRpYyBDRklu
ZGV4IGZvcm1SZWFkKENGUmVhZFN0cmVhbVJlZiBzdHJlYW0sIFVJbnQ4KiBidWZmZXIsIENGSW5k
ZXggYnVmZmVyTGVuCiAgICAgd2hpbGUgKGZvcm0tPmN1cnJlbnRTdHJlYW0pIHsKICAgICAgICAg
Q0ZJbmRleCBieXRlc1RvUmVhZCA9IGJ1ZmZlckxlbmd0aDsKICNpZiBFTkFCTEUoQkxPQl9TTElD
RSkKLSAgICAgICAgaWYgKGZvcm0tPmN1cnJlbnRTdHJlYW1SYW5nZUxlbmd0aCAhPSBCbG9iOjp0
b0VuZE9mRmlsZSAmJiBmb3JtLT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5ndGggPCBieXRlc1RvUmVh
ZCkKKyAgICAgICAgaWYgKGZvcm0tPmN1cnJlbnRTdHJlYW1SYW5nZUxlbmd0aCAhPSBGb3JtRGF0
YUVsZW1lbnQ6OnRvRW5kT2ZGaWxlICYmIGZvcm0tPmN1cnJlbnRTdHJlYW1SYW5nZUxlbmd0aCA8
IGJ5dGVzVG9SZWFkKQogICAgICAgICAgICAgYnl0ZXNUb1JlYWQgPSBzdGF0aWNfY2FzdDxDRklu
ZGV4Pihmb3JtLT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5ndGgpOwogI2VuZGlmCiAgICAgICAgIENG
SW5kZXggYnl0ZXNSZWFkID0gQ0ZSZWFkU3RyZWFtUmVhZChmb3JtLT5jdXJyZW50U3RyZWFtLCBi
dWZmZXIsIGJ5dGVzVG9SZWFkKTsKQEAgLTI4Myw3ICsyNzgsNyBAQCBzdGF0aWMgQ0ZJbmRleCBm
b3JtUmVhZChDRlJlYWRTdHJlYW1SZWYgc3RyZWFtLCBVSW50OCogYnVmZmVyLCBDRkluZGV4IGJ1
ZmZlckxlbgogICAgICAgICAgICAgKmF0RU9GID0gRkFMU0U7CiAgICAgICAgICAgICBmb3JtLT5i
eXRlc1NlbnQgKz0gYnl0ZXNSZWFkOwogI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgICAgICAg
ICAgaWYgKGZvcm0tPmN1cnJlbnRTdHJlYW1SYW5nZUxlbmd0aCAhPSBCbG9iOjp0b0VuZE9mRmls
ZSkKKyAgICAgICAgICAgIGlmIChmb3JtLT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5ndGggIT0gRm9y
bURhdGFFbGVtZW50Ojp0b0VuZE9mRmlsZSkKICAgICAgICAgICAgICAgICBmb3JtLT5jdXJyZW50
U3RyZWFtUmFuZ2VMZW5ndGggLT0gYnl0ZXNSZWFkOwogI2VuZGlmCiAKQEAgLTQwMCw3ICszOTUs
NyBAQCB2b2lkIHNldEhUVFBCb2R5KE5TTXV0YWJsZVVSTFJlcXVlc3QgKnJlcXVlc3QsIFBhc3NS
ZWZQdHI8Rm9ybURhdGE+IGZvcm1EYXRhKQogICAgICAgICBlbHNlIHsKICNpZiBFTkFCTEUoQkxP
Ql9TTElDRSkKICAgICAgICAgICAgIC8vIElmIHdlJ3JlIHNlbmRpbmcgdGhlIGZpbGUgcmFuZ2Us
IHVzZSB0aGUgZXhpc3RpbmcgcmFuZ2UgbGVuZ3RoIGZvciBub3cuIFdlIHdpbGwgZGV0ZWN0IGlm
IHRoZSBmaWxlIGhhcyBiZWVuIGNoYW5nZWQgcmlnaHQgYmVmb3JlIHdlIHJlYWQgdGhlIGZpbGUg
YW5kIGFib3J0IHRoZSBvcGVyYXRpb24gaWYgbmVjZXNzYXJ5LgotICAgICAgICAgICAgaWYgKGVs
ZW1lbnQubV9maWxlTGVuZ3RoICE9IEJsb2I6OnRvRW5kT2ZGaWxlKSB7CisgICAgICAgICAgICBp
ZiAoZWxlbWVudC5tX2ZpbGVMZW5ndGggIT0gRm9ybURhdGFFbGVtZW50Ojp0b0VuZE9mRmlsZSkg
ewogICAgICAgICAgICAgICAgIGxlbmd0aCArPSBlbGVtZW50Lm1fZmlsZUxlbmd0aDsKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
eG1sL1hNTEh0dHBSZXF1ZXN0LmNwcCBiL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcApp
bmRleCA1Y2RlMjRkZTI5ZGI0NDIxMDAwMWEzMDIzMjQ0Y2E0Y2NkMjVjZmJiLi4xNDEwYTVlY2M4
YzY5YjYxYmIyNjlkNjYwMDQ4Yjk1NmJiOWI4MWQzIDEwMDY0NAotLS0gYS9XZWJDb3JlL3htbC9Y
TUxIdHRwUmVxdWVzdC5jcHAKKysrIGIvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCkBA
IC00NzgsMTEgKzQ3OCw3IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OnNlbmQoQmxvYiogYm9keSwg
RXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgd2Ugc2V0IGEgQ29u
dGVudC1UeXBlIGlmIG9uZSBpcyBub3Qgc2V0LgogICAgICAgICAvLyBGSVhNRTogYWRkIHN1cHBv
cnQgZm9yIHVwbG9hZGluZyBidW5kbGVzLgogICAgICAgICBtX3JlcXVlc3RFbnRpdHlCb2R5ID0g
Rm9ybURhdGE6OmNyZWF0ZSgpOwotI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgICAgICBtX3Jl
cXVlc3RFbnRpdHlCb2R5LT5hcHBlbmRGaWxlUmFuZ2UoYm9keS0+cGF0aCgpLCBib2R5LT5zdGFy
dCgpLCBib2R5LT5sZW5ndGgoKSwgYm9keS0+bW9kaWZpY2F0aW9uVGltZSgpKTsKLSNlbHNlCi0g
ICAgICAgIG1fcmVxdWVzdEVudGl0eUJvZHktPmFwcGVuZEZpbGUoYm9keS0+cGF0aCgpLCBmYWxz
ZSk7Ci0jZW5kaWYKKyAgICAgICAgbV9yZXF1ZXN0RW50aXR5Qm9keS0+YXBwZW5kQmxvYkl0ZW1M
aXN0KGJvZHktPml0ZW1zKCkpOwogICAgIH0KIAogICAgIGNyZWF0ZVJlcXVlc3QoZWMpOwpAQCAt
NDk0LDcgKzQ5MCw3IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OnNlbmQoRE9NRm9ybURhdGEqIGJv
ZHksIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV9tZXRo
b2QgIT0gIkdFVCIgJiYgbV9tZXRob2QgIT0gIkhFQUQiICYmIG1fdXJsLnByb3RvY29sSW5IVFRQ
RmFtaWx5KCkpIHsKLSAgICAgICAgbV9yZXF1ZXN0RW50aXR5Qm9keSA9IEZvcm1EYXRhOjpjcmVh
dGVNdWx0aVBhcnQoKmJvZHksIGRvY3VtZW50KCkpOworICAgICAgICBtX3JlcXVlc3RFbnRpdHlC
b2R5ID0gRm9ybURhdGE6OmNyZWF0ZU11bHRpUGFydChib2R5LT5pdGVtcygpLCBib2R5LT5lbmNv
ZGluZygpLCBkb2N1bWVudCgpKTsKIAogICAgICAgICAvLyBXZSBuZWVkIHRvIGFzayB0aGUgY2xp
ZW50IHRvIHByb3ZpZGUgdGhlIGdlbmVyYXRlZCBmaWxlIG5hbWVzIGlmIG5lZWRlZC4gV2hlbiBG
b3JtRGF0YSBmaWxscyB0aGUgZWxlbWVudAogICAgICAgICAvLyBmb3IgdGhlIGZpbGUsIGl0IGNv
dWxkIHNldCBhIGZsYWcgdG8gdXNlIHRoZSBnZW5lcmF0ZWQgZmlsZSBuYW1lLCBpLmUuIGEgcGFj
a2FnZSBmaWxlIG9uIE1hYy4KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cg
Yi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDhiMWNlNGI5NGU1M2ZhZDgwMjg3MTA3
NDc3ZDUxYThiY2I5MTE1YjQuLmNhNDQxZWQ1ZWZjMGY1NjIwOGNlMTJkOTc0MjcwNGYyMGFmYmI2
YTAgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDEwLTA1LTI0ICBLaW51a28gWWFz
dWRhICA8a2ludWtvQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBSZWZhY3RvciBGb3JtRGF0YSBhbmQgQmxvYiBmb3IgYmV0dGVy
IHN1cHBvcnQgb2YgQmxvYnMgc3ludGhlc2l6ZWQgYnkgQmxvYkJ1aWxkZXIuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zOTA4MworCisgICAgICAgIFJl
cGxhY2UgRm9ybURhdGFMaXN0OjpJdGVtIGxpc3Qgd2l0aCBCbG9iSXRlbUxpc3QgdG8gZ2V0IGl0
IGNvbXBpbGVkCisgICAgICAgIHdpdGggdGhlIHJlZmFjdG9yaW5nIGluIEZvcm1EYXRhTGlzdC4K
KworICAgICAgICAqIHNyYy9XZWJTZWFyY2hhYmxlRm9ybURhdGEuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SGFzU3VpdGFibGVUZXh0RWxlbWVudCk6CisKIDIwMTAtMDUtMjQgIEFuZGVycyBDYXJs
c3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBBdHRlbXB0IHRvIGZpeCB0aGUg
Q2hyb21pdW0gYnVpbGQuCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNlYXJj
aGFibGVGb3JtRGF0YS5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNlYXJjaGFibGVGb3Jt
RGF0YS5jcHAKaW5kZXggOGVlZjZjYzg5NDdlNWM2Y2M5MzMwNWQyY2I2MTE1OGVlZTllNjhkNS4u
NzI2OTRiNzEwYWYyNWNhNTk4MjVjZGQ2NzhhNDA5YmJmMTRiMWU1YiAxMDA2NDQKLS0tIGEvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJTZWFyY2hhYmxlRm9ybURhdGEuY3BwCisrKyBiL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViU2VhcmNoYWJsZUZvcm1EYXRhLmNwcApAQCAtMTg1LDggKzE4NSw4IEBA
IGJvb2wgSGFzU3VpdGFibGVUZXh0RWxlbWVudChjb25zdCBIVE1MRm9ybUVsZW1lbnQqIGZvcm0s
IFZlY3RvcjxjaGFyPiogZW5jb2RlZFN0CiAgICAgICBpZiAoIWZvcm1FbGVtZW50LT5hcHBlbmRG
b3JtRGF0YShkYXRhTGlzdCwgZmFsc2UpKQogICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICBj
b25zdCBWZWN0b3I8Rm9ybURhdGFMaXN0OjpJdGVtPiYgaXRlbUxpc3QgPSBkYXRhTGlzdC5saXN0
KCk7Ci0gICAgICBpZiAoaXNUZXh0RWxlbWVudCAmJiAhaXRlbUxpc3QuaXNFbXB0eSgpKSB7Cisg
ICAgICBjb25zdCBCbG9iSXRlbUxpc3QmIGl0ZW1zID0gZGF0YUxpc3QuaXRlbXMoKTsKKyAgICAg
IGlmIChpc1RleHRFbGVtZW50ICYmICFpdGVtcy5pc0VtcHR5KCkpIHsKICAgICAgICAgICBpZiAo
dGV4dEVsZW1lbnQpIHsKICAgICAgICAgICAgICAgLy8gVGhlIGF1dG8tY29tcGxldGUgYmFyIG9u
bHkga25vd3MgaG93IHRvIGZpbGwgaW4gb25lIHZhbHVlLgogICAgICAgICAgICAgICAvLyBUaGlz
IGZvcm0gaGFzIG11bHRpcGxlIGZpZWxkczsgZG9uJ3QgdHJlYXQgaXQgYXMgc2VhcmNoYWJsZS4K
QEAgLTE5NCwyMCArMTk0LDIzIEBAIGJvb2wgSGFzU3VpdGFibGVUZXh0RWxlbWVudChjb25zdCBI
VE1MRm9ybUVsZW1lbnQqIGZvcm0sIFZlY3RvcjxjaGFyPiogZW5jb2RlZFN0CiAgICAgICAgICAg
fQogICAgICAgICAgIHRleHRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+
KGZvcm1FbGVtZW50KTsKICAgICAgIH0KLSAgICAgIGZvciAoVmVjdG9yPEZvcm1EYXRhTGlzdDo6
SXRlbT46OmNvbnN0X2l0ZXJhdG9yIGooaXRlbUxpc3QuYmVnaW4oKSk7IGogIT0gaXRlbUxpc3Qu
ZW5kKCk7ICsraikgeworICAgICAgZm9yIChCbG9iSXRlbUxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGoo
aXRlbXMuYmVnaW4oKSk7IGogIT0gaXRlbXMuZW5kKCk7ICsraikgeworICAgICAgICAgIGNvbnN0
IFN0cmluZ0Jsb2JJdGVtKiBpdGVtID0gKCpqKS0+dG9TdHJpbmdCbG9iSXRlbSgpOworICAgICAg
ICAgIGlmICghaXRlbSkKKyAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgLy8gSGFu
ZGxlIElTSU5ERVggLyA8aW5wdXQgbmFtZT1pc2luZGV4PiBzcGVjaWFsbHksIGJ1dCBvbmx5IGlm
IGl0J3MKICAgICAgICAgICAvLyB0aGUgZmlyc3QgZW50cnkuCi0gICAgICAgICAgaWYgKCFlbmNv
ZGVkU3RyaW5nLT5pc0VtcHR5KCkgfHwgai0+ZGF0YSgpICE9ICJpc2luZGV4IikgeworICAgICAg
ICAgIGlmICghZW5jb2RlZFN0cmluZy0+aXNFbXB0eSgpIHx8IGl0ZW0tPmNzdHIoKSAhPSAiaXNp
bmRleCIpIHsKICAgICAgICAgICAgICAgaWYgKCFlbmNvZGVkU3RyaW5nLT5pc0VtcHR5KCkpCiAg
ICAgICAgICAgICAgICAgICBlbmNvZGVkU3RyaW5nLT5hcHBlbmQoJyYnKTsKLSAgICAgICAgICAg
ICAgRm9ybURhdGFCdWlsZGVyOjplbmNvZGVTdHJpbmdBc0Zvcm1EYXRhKCplbmNvZGVkU3RyaW5n
LCBqLT5kYXRhKCkpOworICAgICAgICAgICAgICBGb3JtRGF0YUJ1aWxkZXI6OmVuY29kZVN0cmlu
Z0FzRm9ybURhdGEoKmVuY29kZWRTdHJpbmcsIGl0ZW0tPmNzdHIoKSk7CiAgICAgICAgICAgICAg
IGVuY29kZWRTdHJpbmctPmFwcGVuZCgnPScpOwogICAgICAgICAgIH0KICAgICAgICAgICArK2o7
CiAgICAgICAgICAgaWYgKGZvcm1FbGVtZW50ID09IHRleHRFbGVtZW50KQogICAgICAgICAgICAg
ICBlbmNvZGVkU3RyaW5nLT5hcHBlbmQoIntzZWFyY2hUZXJtc30iLCAxMyk7CiAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICBGb3JtRGF0YUJ1aWxkZXI6OmVuY29kZVN0cmluZ0FzRm9ybURh
dGEoKmVuY29kZWRTdHJpbmcsIGotPmRhdGEoKSk7CisgICAgICAgICAgICAgIEZvcm1EYXRhQnVp
bGRlcjo6ZW5jb2RlU3RyaW5nQXNGb3JtRGF0YSgqZW5jb2RlZFN0cmluZywgaXRlbS0+Y3N0cigp
KTsKICAgICAgIH0KICAgICB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57018</attachid>
            <date>2010-05-25 07:47:33 -0700</date>
            <delta_ts>2010-05-25 22:44:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-39083-20100525074731.patch</filename>
            <type>text/plain</type>
            <size>75921</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CmluZGV4IGIxN2NlMjczNTI4YzZhZTdkYjdiNjYyMjc1MGM3YmZlMDFiNjM3MmQuLjQ3Y2U1
MGIwNmU5ODIzYmYwOGMxZWRhODE5NjUzZjEwNDE3Y2VhNmUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
Q01ha2VMaXN0cy50eHQKKysrIGIvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTExNCw2ICsx
MTE0LDcgQEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAgIHBhZ2UvYW5pbWF0aW9uL0tleWZyYW1l
QW5pbWF0aW9uLmNwcAogCiAgICAgcGxhdGZvcm0vQXJlbmEuY3BwCisgICAgcGxhdGZvcm0vQmxv
Ykl0ZW0uY3BwCiAgICAgcGxhdGZvcm0vQ29udGVudFR5cGUuY3BwCiAgICAgcGxhdGZvcm0vQ29u
dGV4dE1lbnUuY3BwCiAgICAgcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGI1ZjY0MjYy
ZmQ2NjI2MTNkNjMyOTIyMWQ3NDRjNTAzYjQ3ZTg5OWEuLmY1ZjFkYjgzNzg0NmJjY2FkYmRkOGVk
OGEwNzg5Nzg1YmUxYWFmY2YgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dl
YkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTEgQEAKKzIwMTAtMDUtMjQgIEtpbnVrbyBZYXN1
ZGEgIDxraW51a29AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yIEZvcm1EYXRhIGFuZCBCbG9iIGZvciBiZXR0ZXIg
c3VwcG9ydCBvZiBCbG9icyBzeW50aGVzaXplZCBieSBCbG9iQnVpbGRlci4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5MDgzCisKKyAgICAgICAgLSBJ
bnRyb2R1Y2VzIGEgbmV3IGNsYXNzIEJsb2JJdGVtIGFzIGEgYmFzaWMgY29tcG9uZW50IG9mIEJs
b2IgYW5kCisgICAgICAgICAgRm9ybURhdGEgYW5kIG1ha2VzIEJsb2IgYXMgYSBjb2xsZWN0aW9u
IG9mIEJsb2JJdGVtcy4KKyAgICAgICAgLSBGaWxlIHdvdWxkIGJlY29tZSBhIHNwZWNpYWwgdHlw
ZSBvZiBCbG9iIHRoYXQgY29udGFpbnMgb25seSBvbmUKKyAgICAgICAgICBGaWxlQmxvYkl0ZW0u
CisgICAgICAgIC0gTWFrZXMgRm9ybURhdGFFbGVtZW50IGEgd3JhcHBlciBvZiBCbG9iSXRlbSAo
YXMgYSB0cmFuc2llbnQKKyAgICAgICAgICBzb2x1dGlvbikuCisgICAgICAgIC0gRml4IHRoZSBk
ZXBlbmRlbmN5IHZpb2xhdGlvbiBpbiBGb3JtRGF0YSBzbyB0aGF0IHRoZSBmaWxlcyB1bmRlcgor
ICAgICAgICAgIHBsYXRmb3JtLyBkbyBub3QgaW5jbHVkZSBhbnkgaHRtbC8gZmlsZXMuCisKKyAg
ICAgICAgVGhlIHBhdGNoIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgbGF0ZXN0IEZpbGUgQVBJIGNoYW5n
ZXMgKGUuZy4gdHlwZSwKKyAgICAgICAgdXJsIGFuZCBzbGljZSdzIHR5cGUgcGFyYW1ldGVycykg
YW5kIHNob3VsZCBub3QgY2hhbmdlIGFueSBvZiBpdHMKKyAgICAgICAgZXhpc3RpbmcgYmVoYXZp
b3JzLgorCisgICAgICAgIFRoZSBleGlzdGluZyB0ZXN0cyBzaG91bGQgYmUgYWJsZSB0byBiZSB1
c2VkIGZvciByZWdyZXNzaW9uLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAg
ICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdl
YkNvcmUucHJvOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAg
ICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBodG1s
L0Jsb2IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6QmxvYik6CisgICAgICAgIChXZWJD
b3JlOjpCbG9iOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OnBhdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6QmxvYjo6YXBwZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OnNsaWNl
KToKKyAgICAgICAgKiBodG1sL0Jsb2IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjp0eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkJs
b2I6Oml0ZW1zKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OkJsb2IpOgorICAgICAgICAqIGh0
bWwvRmlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWxlOjpGaWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbGU6Om5hbWUpOgorICAgICAgICAqIGh0bWwvRmlsZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsZTo6ZmlsZU5hbWUpOgorICAgICAgICAqIGh0bWwvRmlsZVJlYWRlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWxlUmVhZGVyOjpyZWFkQXNCaW5hcnlTdHJpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsZVJlYWRlcjo6cmVhZEFzVGV4dCk6CisgICAgICAgICogaHRtbC9GaWxl
U3RyZWFtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVTdHJlYW06Om9wZW5Gb3JSZWFkKToK
KyAgICAgICAgKiBodG1sL0Zvcm1EYXRhTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb3Jt
RGF0YUxpc3Q6OmFwcGVuZFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YUxpc3Q6
OmFwcGVuZEJsb2IpOgorICAgICAgICAqIGh0bWwvRm9ybURhdGFMaXN0Lmg6CisgICAgICAgIChX
ZWJDb3JlOjpGb3JtRGF0YUxpc3Q6Oml0ZW1zKToKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6OmNyZWF0ZUZvcm1E
YXRhKToKKyAgICAgICAgKiBodG1sL0hUTUxQcm9ncmVzc0VsZW1lbnQuY3BwOgorICAgICAgICAq
IHBsYXRmb3JtL0Jsb2JJdGVtLmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vQmxvYkl0
ZW0uaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YUVsZW1lbnQ6OkZvcm1EYXRhRWxlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpGb3JtRGF0YTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1E
YXRhOjpjcmVhdGVNdWx0aVBhcnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6OmRlZXBD
b3B5KToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjphcHBlbmREYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OkZvcm1EYXRhOjphcHBlbmRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Rm9y
bURhdGE6OmFwcGVuZEZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6OmFwcGVuZEJs
b2JJdGVtTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YTo6YXBwZW5kRmlsZVJhbmdl
KToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjphcHBlbmRJdGVtcyk6CisgICAgICAgICog
cGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGFF
bGVtZW50OjpGb3JtRGF0YUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGFFbGVt
ZW50OjppdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhRWxlbWVudDo6QmxvYkl0ZW1X
cmFwcGVyOjpCbG9iSXRlbVdyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGFFbGVt
ZW50OjpCbG9iSXRlbVdyYXBwZXI6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGFF
bGVtZW50OjpCbG9iSXRlbVdyYXBwZXI6OmRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURh
dGFFbGVtZW50OjpCbG9iSXRlbVdyYXBwZXI6OnJlbGVhc2VCdWZmZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvciE9KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9uZXR3b3JrL21hYy9Gb3JtRGF0YVN0cmVhbU1hYy5tbToKKyAgICAgICAg
KFdlYkNvcmU6OmNsb3NlQ3VycmVudFN0cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjphZHZhbmNl
Q3VycmVudFN0cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjpmb3JtQ3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OmZvcm1SZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEhUVFBCb2R5KToKKyAg
ICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0
cFJlcXVlc3Q6OnNlbmQpOgorCiAyMDEwLTA1LTI0ICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBw
bGUuY29tPgogCiAgICAgICAgIE5vIHJldmlldzsgYnVpbGQgZml4IG9ubHkuCmRpZmYgLS1naXQg
YS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCBl
N2NiMDM4ZjY1MTUxOGY5NmIzNGJmZmRlYzVkNTc3YmJmMTYzMmI2Li4zYzY5NzNiZDY3Yjk0ZDkx
OTFmYmNjNzRkNDM1OWQzYTk1NWI1NzJlIDEwMDY0NAotLS0gYS9XZWJDb3JlL0dOVW1ha2VmaWxl
LmFtCisrKyBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTE1NDAsNiArMTU0MCw4IEBAIHdl
YmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9BcmVuYS5jcHAgXAogCVdlYkNv
cmUvcGxhdGZvcm0vQXJlbmEuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9BdXRvZHJhaW5lZFBvb2wu
aCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9CbG9iSXRlbS5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0v
QmxvYkl0ZW0uaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9Db250ZW50VHlwZS5jcHAgXAogCVdlYkNv
cmUvcGxhdGZvcm0vQ29udGVudFR5cGUuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9Db250ZXh0TWVu
dS5jcHAgXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9XZWJDb3JlL1dlYkNv
cmUuZ3lwaQppbmRleCBiOTFjMjlkMTFmMzA1ZDBiZjYxMGIxNDEyMTI2MGQ4N2Q1ZjM0MThlLi42
NDdjMDNkZGY4NTMzMzg3MmRiN2JhOTM5NDhiMGM1MjI4MzBjZTg1IDEwMDY0NAotLS0gYS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQorKysgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMjg2OCw2ICsy
ODY4LDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9BcmVuYS5jcHAnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL0FyZW5hLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL0F1dG9kcmFpbmVkUG9v
bC5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9CbG9iSXRlbS5jcHAnLAorICAgICAgICAgICAg
J3BsYXRmb3JtL0Jsb2JJdGVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL0NvbnRlbnRUeXBl
LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vQ29udGVudFR5cGUuaCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vQ29udGV4dE1lbnUuY3BwJywKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29y
ZS5wcm8gYi9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IDZjZTY5NWZhNDgxYjdmZjcwMDIwM2Jj
MDFhNjg1ZTVlMTdlYmY5NzQuLjYxZmVmYWQzNzMzNzkyYzk1MWU1ODc3YzI1MTgyNDE3MThjNzUy
NTEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvV2ViQ29yZS9XZWJDb3Jl
LnBybwpAQCAtODA5LDYgKzgwOSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3JtL2FuaW1h
dGlvbi9BbmltYXRpb24uY3BwIFwKICAgICBwbGF0Zm9ybS9hbmltYXRpb24vQW5pbWF0aW9uTGlz
dC5jcHAgXAogICAgIHBsYXRmb3JtL0FyZW5hLmNwcCBcCisgICAgcGxhdGZvcm0vQmxvYkl0ZW0u
Y3BwIFwKICAgICBwbGF0Zm9ybS90ZXh0L0Jhc2U2NC5jcHAgXAogICAgIHBsYXRmb3JtL3RleHQv
QmlkaUNvbnRleHQuY3BwIFwKICAgICBwbGF0Zm9ybS9Db250ZW50VHlwZS5jcHAgXApAQCAtMTU1
Niw2ICsxNTU3LDcgQEAgSEVBREVSUyArPSBcCiAgICAgcGxhdGZvcm0vYW5pbWF0aW9uL0FuaW1h
dGlvbi5oIFwKICAgICBwbGF0Zm9ybS9hbmltYXRpb24vQW5pbWF0aW9uTGlzdC5oIFwKICAgICBw
bGF0Zm9ybS9BcmVuYS5oIFwKKyAgICBwbGF0Zm9ybS9CbG9iSXRlbS5oIFwKICAgICBwbGF0Zm9y
bS9Db250ZW50VHlwZS5oIFwKICAgICBwbGF0Zm9ybS9Db250ZXh0TWVudS5oIFwKICAgICBwbGF0
Zm9ybS9Dcm9zc1RocmVhZENvcGllci5oIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS52
Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qCmluZGV4IDYwMjAyNTBmMGNhOWNkZDg3ODRjNWFiOWJkZTVlNDAzNzk3YTJkZjguLjlhZWRi
OGUzYzZhMGFkNmU5NTUwODE0NGI2NzAxMDIwODA0NDliZjIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
V2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvagpAQCAtMjIzMDUsNiArMjIzMDUsMTQgQEAKIAkJCQk+DQogCQkJPC9G
aWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cQmxvYkl0ZW0u
Y3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0i
Li5ccGxhdGZvcm1cQmxvYkl0ZW0uaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0K
IAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXENvbnRlbnRUeXBlLmNwcCINCiAJCQkJPg0K
IAkJCTwvRmlsZT4NCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IGQzMmRjZGYyNWFiZGJmZGZjZjBmOGE2M2VmZDc1NGY0YWM3NGU5ZjEuLjg0ZTRiOGFhYjFj
YjRmY2Q4Njc1MTVlZTMyMTJmZDFkZTZmNmI3NWEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMjc1LDYgKzIyNzUsOCBAQAogCQk4OTUyNTNERDExNkM0
RUY1MDBDQUJGMDAgLyogRmlsZVN0cmVhbVByb3h5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4OTUyNTNEQjExNkM0RUY1MDBDQUJGMDAgLyogRmlsZVN0
cmVhbVByb3h5LmggKi87IH07CiAJCTg5NTI1M0RGMTE2QzRGMDYwMENBQkYwMCAvKiBGaWxlVGhy
ZWFkVGFzay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
ODk1MjUzREUxMTZDNEYwNjAwQ0FCRjAwIC8qIEZpbGVUaHJlYWRUYXNrLmggKi87IH07CiAJCThG
QUM3NzREMTE5ODcyQ0IwMDE1QUU5NCAvKiBKU01haW5UaHJlYWRFeGVjU3RhdGUuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOEY5MzREODQxMTg5RjFF
RTAwNTA4RDVEIC8qIEpTTWFpblRocmVhZEV4ZWNTdGF0ZS5jcHAgKi87IH07CisJCTg5ODhFMTBF
MTFBMzUwOEIwMERCNzMyRSAvKiBCbG9iSXRlbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4OTg4RTEwQzExQTM1MDhCMDBEQjczMkUgLyogQmxvYkl0
ZW0uY3BwICovOyB9OworCQk4OTg4RTEwRjExQTM1MDhCMDBEQjczMkUgLyogQmxvYkl0ZW0uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg5ODhFMTBEMTFB
MzUwOEIwMERCNzMyRSAvKiBCbG9iSXRlbS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTkzMDJCMEJEMEQ3OUY4MjkwMEM3RUU4MyAvKiBQYWdlR3Jv
dXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMw
MkIwQkMwRDc5RjgyOTAwQzdFRTgzIC8qIFBhZ2VHcm91cC5jcHAgKi87IH07CiAJCTkzMDJCMEJG
MEQ3OUY4MkMwMEM3RUU4MyAvKiBQYWdlR3JvdXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMDJCMEJFMEQ3OUY4MkMwMEM3RUU4MyAvKiBQYWdlR3Jv
dXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5
MzA1QjI0RDA5OEYxQjZCMDBDMjg4NTUgLyogVGltZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMDVCMjRDMDk4RjFCNkIwMEMyODg1NSAvKiBUaW1l
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC03
ODU5LDYgKzc4NjEsOCBAQAogCQk4OTUyNTNERTExNkM0RjA2MDBDQUJGMDAgLyogRmlsZVRocmVh
ZFRhc2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsZVRocmVhZFRhc2su
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOEY5MzREODMxMTg5RjFFRTAwNTA4RDVE
IC8qIEpTTWFpblRocmVhZEV4ZWNTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU01haW5UaHJlYWRFeGVjU3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJOEY5MzREODQxMTg5RjFFRTAwNTA4RDVEIC8qIEpTTWFpblRocmVhZEV4ZWNTdGF0ZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU01haW5UaHJlYWRFeGVjU3Rh
dGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4OTg4RTEwQzExQTM1MDhCMDBE
QjczMkUgLyogQmxvYkl0ZW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gQmxvYkl0ZW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4OTg4RTEwRDEx
QTM1MDhCMDBEQjczMkUgLyogQmxvYkl0ZW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQmxvYkl0ZW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMwMkIwQkMw
RDc5RjgyOTAwQzdFRTgzIC8qIFBhZ2VHcm91cC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBQYWdlR3JvdXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5MzAyQjBCRTBENzlGODJDMDBDN0VFODMgLyogUGFnZUdyb3VwLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFBhZ2VHcm91cC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk5MzA1QjI0QzA5OEYxQjZCMDBDMjg4NTUgLyogVGltZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVGltZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTE1NzgxLDYgKzE1Nzg1LDggQEAKIAkJCQlCQ0ZCMkY3NDA5N0EyRTFBMDBCQTcwM0QgLyogQXJl
bmEuY3BwICovLAogCQkJCUJDRkIyRjc1MDk3QTJFMUEwMEJBNzAzRCAvKiBBcmVuYS5oICovLAog
CQkJCTUxRTFFQ0IxMEM5MUM1NTYwMERDMjU1QiAvKiBBdXRvZHJhaW5lZFBvb2wuaCAqLywKKwkJ
CQk4OTg4RTEwQzExQTM1MDhCMDBEQjczMkUgLyogQmxvYkl0ZW0uY3BwICovLAorCQkJCTg5ODhF
MTBEMTFBMzUwOEIwMERCNzMyRSAvKiBCbG9iSXRlbS5oICovLAogCQkJCUJDQzhDRkNBMDk4NkNE
MjQwMDE0MEJGMiAvKiBDb2xvckRhdGEuZ3BlcmYgKi8sCiAJCQkJNDFEMDE1QzkwRjRCNUM3MTAw
NEE2NjJGIC8qIENvbnRlbnRUeXBlLmNwcCAqLywKIAkJCQk0MUQwMTVDODBGNEI1QzcxMDA0QTY2
MkYgLyogQ29udGVudFR5cGUuaCAqLywKQEAgLTE2ODE2LDYgKzE2ODIyLDcgQEAKIAkJCQlCQzVF
QjkyMDBFODIwNDA4MDBCMjU5NjUgLyogQmluZGluZ1VSSS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTg5OTQzMjgwQjQyMzM4ODAwRDdDODAyIC8qIEJpdG1hcEltYWdlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkyRUFGQUYwRjEwRTJBRjJEMDA3RUQzRDYgLyogQmxvYi5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJODk4OEUxMEYxMUEzNTA4QjAwREI3MzJFIC8qIEJsb2JJdGVtLmggaW4gSGVhZGVycyAqLywK
IAkJCQk5M0YxOTlCRTA4MjQ1RTU5MDAxRTlBQkMgLyogQmxvY2tFeGNlcHRpb25zLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzVFQjVFMTBFODFCRTg3MDBCMjU5NjUgLyogQm9yZGVyRGF0YS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkM1RUI1REIwRTgxQjdFQTAwQjI1OTY1IC8qIEJvcmRlclZhbHVl
LmggaW4gSGVhZGVycyAqLywKQEAgLTE5NjM1LDYgKzE5NjQyLDcgQEAKIAkJCQlCQzVFQjkxRjBF
ODIwNDA4MDBCMjU5NjUgLyogQmluZGluZ1VSSS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODk5
NDMyOTBCNDIzMzg4MDBEN0M4MDIgLyogQml0bWFwSW1hZ2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMkVBRkFGMEUxMEUyQUYyRDAwN0VEM0Q2IC8qIEJsb2IuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJODk4OEUxMEUxMUEzNTA4QjAwREI3MzJFIC8qIEJsb2JJdGVtLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTkzRjE5QUUxMDgyNDVFNTkwMDFFOUFCQyAvKiBCbG9ja0V4Y2VwdGlvbnMubW0gaW4g
U291cmNlcyAqLywKIAkJCQlCQ0VBNDg1NDA5N0Q5MzAyMDA5NEM5RTQgLyogYnJlYWtfbGluZXMu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzMDlEREEwOTlFNjQ5MjAwNTZFNTgxIC8qIEJyZWFr
QmxvY2txdW90ZUNvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yMDM4Myw4ICsyMDM5MSw4
IEBACiAJCQkJNTFFQzkyNjUwQ0U5MERENDAwRjkwMzA4IC8qIEpTQ3VzdG9tU1FMU3RhdGVtZW50
RXJyb3JDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTM0MTdDQTBDRUNGRjI1MDA0
OUNCREUgLyogSlNDdXN0b21Wb2lkQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTEw
QjkzQzMwQjczQzI5MTAwM0VEODkwIC8qIEpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcCBpbiBT
b3VyY2VzICovLAotCQkJCTFBRTgyRjhGMENBQUZBOUQwMDIyMzdBRSAvKiBKU0RhdGFiYXNlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUJDQ0U1OEFDMTA2MUU4Q0YwMDhGQjM1QSAvKiBKU0RhdGFi
YXNlQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTFBRTgyRjhGMENBQUZBOUQwMDIyMzdB
RSAvKiBKU0RhdGFiYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNzdEMTY5MEZGMTlGNTYw
MDcwODg3QiAvKiBKU0RhdGFHcmlkQ29sdW1uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNzdE
MTZCMEZGMTlGNTYwMDcwODg3QiAvKiBKU0RhdGFHcmlkQ29sdW1uTGlzdC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCQzc3RDE1MjBGRjE5QzczMDA3MDg4N0IgLyogSlNEYXRhR3JpZENvbHVtbkxp
c3RDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvQmxv
Yi5jcHAgYi9XZWJDb3JlL2h0bWwvQmxvYi5jcHAKaW5kZXggODNiYmRjMGM1MjY0ODQ1NDI2ODgx
OTI2MjE2ODRiNjI4MjAyNGJmNC4uYjFmMmRmN2EwMzFiZDQ0NmY0Y2QwY2Y5OTZiYzM5ZjFjOGY0
OTg0MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0Jsb2IuY3BwCisrKyBiL1dlYkNvcmUvaHRt
bC9CbG9iLmNwcApAQCAtMjksOTAgKzI5LDY4IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5o
IgorCiAjaW5jbHVkZSAiQmxvYi5oIgogCisjaW5jbHVkZSAiQmxvYkl0ZW0uaCIKICNpbmNsdWRl
ICJGaWxlU3lzdGVtLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotI2lmIEVOQUJMRShCTE9C
X1NMSUNFKQotY29uc3QgaW50IEJsb2I6OnRvRW5kT2ZGaWxlID0gLTE7Ci1jb25zdCBkb3VibGUg
QmxvYjo6ZG9Ob3RDaGVja0ZpbGVDaGFuZ2UgPSAwOwotI2VuZGlmCi0KIEJsb2I6OkJsb2IoY29u
c3QgU3RyaW5nJiBwYXRoKQotICAgIDogbV9wYXRoKHBhdGgpCi0jaWYgRU5BQkxFKEJMT0JfU0xJ
Q0UpCi0gICAgLCBtX3N0YXJ0KDApCi0gICAgLCBtX2xlbmd0aCh0b0VuZE9mRmlsZSkKLSAgICAs
IG1fc25hcHNob3RDYXB0dXJlZChmYWxzZSkKLSAgICAsIG1fc25hcHNob3RTaXplKDApCi0gICAg
LCBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZShkb05vdENoZWNrRmlsZUNoYW5nZSkKLSNlbmRp
ZgogeworICAgIC8vIE5vdGU6IHRoaXMgZG9lc24ndCBpbml0aWFsaXplIHRoZSB0eXBlIHVubGlr
ZSBGaWxlKHBhdGgpLgorICAgIGFwcGVuZChGaWxlQmxvYkl0ZW06OmNyZWF0ZShwYXRoKSk7CiB9
CiAKLSNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLUJsb2I6OkJsb2IoY29uc3QgU3RyaW5nJiBwYXRo
LCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgsIGxvbmcgbG9uZyBzbmFwc2hvdFNp
emUsIGRvdWJsZSBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUpCi0gICAgOiBtX3BhdGgocGF0aCkK
LSAgICAsIG1fc3RhcnQoc3RhcnQpCi0gICAgLCBtX2xlbmd0aChsZW5ndGgpCi0gICAgLCBtX3Nu
YXBzaG90Q2FwdHVyZWQodHJ1ZSkKLSAgICAsIG1fc25hcHNob3RTaXplKHNuYXBzaG90U2l6ZSkK
LSAgICAsIG1fc25hcHNob3RNb2RpZmljYXRpb25UaW1lKHNuYXBzaG90TW9kaWZpY2F0aW9uVGlt
ZSkKLXsKLSAgICBBU1NFUlQoc3RhcnQgPj0gMCAmJiBsZW5ndGggPj0gMCAmJiBzdGFydCArIGxl
bmd0aCA8PSBzbmFwc2hvdFNpemUgJiYgc25hcHNob3RNb2RpZmljYXRpb25UaW1lKTsKLX0KLSNl
bmRpZgotCiB1bnNpZ25lZCBsb25nIGxvbmcgQmxvYjo6c2l6ZSgpIGNvbnN0CiB7CiAgICAgLy8g
RklYTUU6IEphdmFTY3JpcHQgY2Fubm90IHJlcHJlc2VudCBzaXplcyBhcyBsYXJnZSBhcyB1bnNp
Z25lZCBsb25nIGxvbmcsIHdlIG5lZWQgdG8KICAgICAvLyBjb21lIHVwIHdpdGggYW4gZXhjZXB0
aW9uIHRvIHRocm93IGlmIGZpbGUgc2l6ZSBpcyBub3QgcmVwcmVzZXRhYmxlLgotI2lmIEVOQUJM
RShCTE9CX1NMSUNFKQotICAgIGlmIChtX3NuYXBzaG90Q2FwdHVyZWQpCi0gICAgICAgIHJldHVy
biBtX2xlbmd0aDsKLSNlbmRpZgotICAgIGxvbmcgbG9uZyBzaXplOwotICAgIGlmICghZ2V0Rmls
ZVNpemUobV9wYXRoLCBzaXplKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oc2l6ZSk7CisgICAgdW5zaWduZWQgbG9uZyBsb25n
IHNpemUgPSAwOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9pdGVtcy5zaXplKCk7ICsr
aSkKKyAgICAgICAgc2l6ZSArPSBtX2l0ZW1zW2ldLT5zaXplKCk7CisgICAgcmV0dXJuIHNpemU7
Cit9CisKK2NvbnN0IFN0cmluZyYgQmxvYjo6cGF0aCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1f
aXRlbXMuc2l6ZSgpID09IDEgJiYgbV9pdGVtc1swXS0+dG9GaWxlQmxvYkl0ZW0oKSk7CisgICAg
cmV0dXJuIG1faXRlbXNbMF0tPnRvRmlsZUJsb2JJdGVtKCktPnBhdGgoKTsKK30KKwordm9pZCBC
bG9iOjphcHBlbmQoUGFzc1JlZlB0cjxCbG9iSXRlbT4gaXRlbSkKK3sKKyAgICBtX2l0ZW1zLmFw
cGVuZChpdGVtKTsKIH0KIAogI2lmIEVOQUJMRShCTE9CX1NMSUNFKQogUGFzc1JlZlB0cjxCbG9i
PiBCbG9iOjpzbGljZShsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgpIGNvbnN0CiB7
Ci0gICAgLy8gV2hlbiB3ZSBzbGljZSBhIGZpbGUgZm9yIHRoZSBmaXJzdCB0aW1lLCB3ZSBvYnRh
aW4gYSBzbmFwc2hvdCBvZiB0aGUgZmlsZSBieSBjYXB0dXJpbmcgaXRzIGN1cnJlbnQgc2l6ZSBh
bmQgbW9kaWZpY2F0aW9uIHRpbWUuCi0gICAgLy8gVGhlIG1vZGlmaWNhdGlvbiB0aW1lIHdpbGwg
YmUgdXNlZCB0byB2ZXJpZnkgaWYgdGhlIGZpbGUgaGFzIGJlZW4gY2hhbmdlZCBvciBub3QsIHdo
ZW4gdGhlIHVuZGVybHlpbmcgZGF0YSBhcmUgYWNjZXNzZWQuCi0gICAgbG9uZyBsb25nIHNuYXBz
aG90U2l6ZTsKLSAgICBkb3VibGUgc25hcHNob3RNb2RpZmljYXRpb25UaW1lOwotICAgIGlmICht
X3NuYXBzaG90Q2FwdHVyZWQpIHsKLSAgICAgICAgc25hcHNob3RTaXplID0gbV9zbmFwc2hvdFNp
emU7Ci0gICAgICAgIHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSA9IG1fc25hcHNob3RNb2RpZmlj
YXRpb25UaW1lOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIElmIHdlIGZhaWwgdG8gcmV0cmll
dmUgdGhlIHNpemUgb3IgbW9kaWZpY2F0aW9uIHRpbWUsIHByb2JhYmx5IGR1ZSB0byB0aGF0IHRo
ZSBmaWxlIGhhcyBiZWVuIGRlbGV0ZWQsIGFuIGVtcHR5IGJsb2Igd2lsbCBiZSByZXR1cm5lZC4K
LSAgICAgICAgdGltZV90IG1vZGlmaWNhdGlvblRpbWU7Ci0gICAgICAgIGlmICghZ2V0RmlsZVNp
emUobV9wYXRoLCBzbmFwc2hvdFNpemUpIHx8ICFnZXRGaWxlTW9kaWZpY2F0aW9uVGltZShtX3Bh
dGgsIG1vZGlmaWNhdGlvblRpbWUpKSB7Ci0gICAgICAgICAgICBzbmFwc2hvdFNpemUgPSAwOwot
ICAgICAgICAgICAgc25hcHNob3RNb2RpZmljYXRpb25UaW1lID0gMDsKLSAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUgPSBtb2RpZmljYXRpb25UaW1l
OwotICAgIH0KLQotICAgIC8vIENsYW1wIHRoZSByYW5nZSBpZiBpdCBleGNlZWRzIHRoZSBzaXpl
IGxpbWl0LgogICAgIGlmIChzdGFydCA8IDApCiAgICAgICAgIHN0YXJ0ID0gMDsKICAgICBpZiAo
bGVuZ3RoIDwgMCkKICAgICAgICAgbGVuZ3RoID0gMDsKIAotICAgIGlmIChzdGFydCA+IHNuYXBz
aG90U2l6ZSkgeworICAgIC8vIENsYW1wIHRoZSByYW5nZSBpZiBpdCBleGNlZWRzIHRoZSBzaXpl
IGxpbWl0LgorICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbFNpemUgPSBzaXplKCk7CisgICAg
aWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oc3RhcnQpID4gdG90YWxTaXplKSB7
CiAgICAgICAgIHN0YXJ0ID0gMDsKICAgICAgICAgbGVuZ3RoID0gMDsKLSAgICB9IGVsc2UgaWYg
KHN0YXJ0ICsgbGVuZ3RoID4gc25hcHNob3RTaXplKQotICAgICAgICBsZW5ndGggPSBzbmFwc2hv
dFNpemUgLSBzdGFydDsKKyAgICB9IGVsc2UgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcg
bG9uZz4oc3RhcnQgKyBsZW5ndGgpID4gdG90YWxTaXplKQorICAgICAgICBsZW5ndGggPSB0b3Rh
bFNpemUgLSBzdGFydDsKIAotICAgIHJldHVybiBhZG9wdFJlZihuZXcgQmxvYihtX3BhdGgsIG1f
c3RhcnQgKyBzdGFydCwgbGVuZ3RoLCBzbmFwc2hvdFNpemUsIHNuYXBzaG90TW9kaWZpY2F0aW9u
VGltZSkpOworICAgIHNpemVfdCBpID0gMDsKKyAgICBSZWZQdHI8QmxvYj4gYmxvYiA9IEJsb2I6
OmNyZWF0ZSgpOworICAgIGZvciAoOyBpIDwgbV9pdGVtcy5zaXplKCkgJiYgc3RhdGljX2Nhc3Q8
dW5zaWduZWQgbG9uZyBsb25nPihzdGFydCkgPj0gbV9pdGVtc1tpXS0+c2l6ZSgpOyArK2kpCisg
ICAgICAgIHN0YXJ0IC09IG1faXRlbXNbaV0tPnNpemUoKTsKKyAgICBmb3IgKDsgbGVuZ3RoID4g
MCAmJiBpIDwgbV9pdGVtcy5zaXplKCk7ICsraSkgeworICAgICAgICBibG9iLT5tX2l0ZW1zLmFw
cGVuZChtX2l0ZW1zW2ldLT5zbGljZShzdGFydCwgbGVuZ3RoKSk7CisgICAgICAgIGxlbmd0aCAt
PSBibG9iLT5tX2l0ZW1zLmxhc3QoKS0+c2l6ZSgpOworICAgICAgICBzdGFydCA9IDA7CisgICAg
fQorICAgIHJldHVybiBibG9iLnJlbGVhc2UoKTsKIH0KLSNlbmRpZgorI2VuZGlmIC8vIEVOQUJM
RShCTE9CX1NMSUNFKQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2h0bWwvQmxvYi5oIGIvV2ViQ29yZS9odG1sL0Jsb2IuaAppbmRleCBlOGI1ZjNmZGYwNjlh
MmI0ODc2ZWQxNmFiODFiMjJmMGZmMDM4OTcwLi4zOTE3N2I1MWVlOWQwNzg2ODNmMjAyYTY1MWRm
NTgyMzhmMjc0OTU3IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvQmxvYi5oCisrKyBiL1dlYkNv
cmUvaHRtbC9CbG9iLmgKQEAgLTMxLDIxICszMSwyNCBAQAogI2lmbmRlZiBCbG9iX2gKICNkZWZp
bmUgQmxvYl9oCiAKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiQmxvYkl0
ZW0uaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUgPHRpbWUuaD4KICNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Cisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEJs
b2IgOiBwdWJsaWMgUmVmQ291bnRlZDxCbG9iPiB7CiBwdWJsaWM6Ci0jaWYgRU5BQkxFKEJMT0Jf
U0xJQ0UpCi0gICAgc3RhdGljIGNvbnN0IGludCB0b0VuZE9mRmlsZTsKLSAgICBzdGF0aWMgY29u
c3QgZG91YmxlIGRvTm90Q2hlY2tGaWxlQ2hhbmdlOwotI2VuZGlmCisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8QmxvYj4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
QmxvYigpKTsKKyAgICB9CiAKKyAgICAvLyBGSVhNRTogRGVwcmVjYXRlZCBtZXRob2QuICBUaGlz
IGlzIGNhbGxlZCBvbmx5IGZyb20KKyAgICAvLyBiaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0
VmFsdWUuY3BwIGFuZCB0aGUgdXNhZ2UgaW4gaXQgd2lsbCBiZWNvbWUgaW52YWxpZCBvbmNlCisg
ICAgLy8gQmxvYkJ1aWxkZXIgaXMgaW50cm9kdWNlZC4KICAgICBzdGF0aWMgUGFzc1JlZlB0cjxC
bG9iPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBwYXRoKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBCbG9iKHBhdGgpKTsKQEAgLTUzLDQ3ICs1NiwyOCBAQCBwdWJsaWM6CiAKICAg
ICB2aXJ0dWFsIH5CbG9iKCkgeyB9CiAKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSgpIGNv
bnN0OworICAgIGNvbnN0IFN0cmluZyYgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQog
ICAgIHZpcnR1YWwgYm9vbCBpc0ZpbGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCi0jaWYg
RU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgUGFzc1JlZlB0cjxCbG9iPiBzbGljZShsb25nIGxvbmcg
c3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgpIGNvbnN0OwotI2VuZGlmCi0KLSAgICBjb25zdCBTdHJp
bmcmIHBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0KLSAgICB1bnNpZ25lZCBsb25nIGxv
bmcgc2l6ZSgpIGNvbnN0OwotI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgIGxvbmcgbG9uZyBz
dGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnQ7IH0KLSAgICBsb25nIGxvbmcgbGVuZ3RoKCkg
Y29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KLSAgICBkb3VibGUgbW9kaWZpY2F0aW9uVGltZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc25hcHNob3RNb2RpZmljYXRpb25UaW1lOyB9Ci0jZW5kaWYKKyAg
ICAvLyBGSVhNRTogRGVwcmVjYXRlZCBtZXRob2QuCisgICAgY29uc3QgU3RyaW5nJiBwYXRoKCkg
Y29uc3Q7CiAKLXByb3RlY3RlZDoKLSAgICBCbG9iKGNvbnN0IFN0cmluZyYgcGF0aCk7CisgICAg
dm9pZCBhcHBlbmQoUGFzc1JlZlB0cjxCbG9iSXRlbT4pOworICAgIGNvbnN0IEJsb2JJdGVtTGlz
dCYgaXRlbXMoKSBjb25zdCB7IHJldHVybiBtX2l0ZW1zOyB9CiAKLXByaXZhdGU6CiAjaWYgRU5B
QkxFKEJMT0JfU0xJQ0UpCi0gICAgQmxvYihjb25zdCBTdHJpbmcmIHBhdGgsIGxvbmcgbG9uZyBz
dGFydCwgbG9uZyBsb25nIGxlbmd0aCwgbG9uZyBsb25nIHNuYXBzaG90U2l6ZSwgZG91YmxlIHNu
YXBzaG90TW9kaWZpY2F0aW9uVGltZSk7CisgICAgUGFzc1JlZlB0cjxCbG9iPiBzbGljZShsb25n
IGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgpIGNvbnN0OwogI2VuZGlmCiAKLSAgICAvLyBU
aGUgdW5kZXJseWluZyBwYXRoIG9mIHRoZSBmaWxlLWJhc2VkIGJsb2IuIAotICAgIFN0cmluZyBt
X3BhdGg7Ci0KLSNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAgICAvLyBUaGUgc3RhcnRpbmcgcG9z
aXRpb24gb2YgdGhlIGZpbGUtYmFzZWQgYmxvYi4KLSAgICBsb25nIGxvbmcgbV9zdGFydDsKLQot
ICAgIC8vIFRoZSBsZW5ndGggb2YgdGhlIGZpbGUtYmFzZWQgYmxvYi4gVGhlIHZhbHVlIG9mIC0x
IG1lYW5zIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUuCi0gICAgbG9uZyBsb25nIG1fbGVuZ3RoOwot
Ci0gICAgLy8gQSBmbGFnIHRvIHRlbGwgaWYgYSBzbmFwc2hvdCBoYXMgYmVlbiBjYXB0dXJlZC4K
LSAgICBib29sIG1fc25hcHNob3RDYXB0dXJlZDsKK3Byb3RlY3RlZDoKKyAgICBCbG9iKCkgeyB9
CiAKLSAgICAvLyBUaGUgc2l6ZSBvZiB0aGUgZmlsZSB3aGVuIGEgc25hcHNob3QgaXMgY2FwdHVy
ZWQuIEl0IGNhbiBiZSAwIGlmIHRoZSBmaWxlIGlzIGVtcHR5LgotICAgIGxvbmcgbG9uZyBtX3Nu
YXBzaG90U2l6ZTsKKyAgICAvLyBGSVhNRTogRGVwcmVjYXRlZCBjb25zdHJ1Y3Rvci4gIFNlZSBh
bHNvIHRoZSBjb21tZW50IGZvciBCbG9iOjpjcmVhdGUocGF0aCkuCisgICAgQmxvYihjb25zdCBT
dHJpbmcmIHBhdGgpOwogCi0gICAgLy8gVGhlIGxhc3QgbW9kaWZpY2F0aW9uIHRpbWUgb2YgdGhl
IGZpbGUgd2hlbiBhIHNuYXBzaG90IGlzIGNhcHR1cmVkLiBUaGUgdmFsdWUgb2YgMCBhbHNvIG1l
YW5zIHRoYXQgdGhlIHNuYXBzaG90IGlzIG5vdCBjYXB0dXJlZC4KLSAgICBkb3VibGUgbV9zbmFw
c2hvdE1vZGlmaWNhdGlvblRpbWU7Ci0jZW5kaWYKKyAgICBCbG9iSXRlbUxpc3QgbV9pdGVtczsK
KyAgICBTdHJpbmcgbV90eXBlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9odG1sL0ZpbGUuY3BwIGIvV2ViQ29yZS9odG1sL0ZpbGUuY3BwCmluZGV4
IDk3ZmRjNDU3OGQ3NGIyMjVlNTk0NmY0ZDZhZWYyNTY1MjU0NDNhZTQuLjJjOWNlNTNiODNjYjBk
Zjc5YTg1OTUyMmRjOTE2ZjI1NWJkODRjYzMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9GaWxl
LmNwcAorKysgYi9XZWJDb3JlL2h0bWwvRmlsZS5jcHAKQEAgLTMzLDEyICszMywxNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIEZpbGU6OkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKQogICAgIDog
QmxvYihwYXRoKQotICAgICwgbV9uYW1lKHBhdGhHZXRGaWxlTmFtZShwYXRoKSkKIHsKICAgICAv
LyBXZSBkb24ndCB1c2UgTUlNRVR5cGVSZWdpc3RyeTo6Z2V0TUlNRVR5cGVGb3JQYXRoKCkgYmVj
YXVzZSBpdCByZXR1cm5zICJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iIHVwb24gZmFpbHVyZS4K
LSAgICBpbnQgaW5kZXggPSBtX25hbWUucmV2ZXJzZUZpbmQoJy4nKTsKKyAgICBjb25zdCBTdHJp
bmcmIGZpbGVOYW1lID0gbmFtZSgpOworICAgIGludCBpbmRleCA9IGZpbGVOYW1lLnJldmVyc2VG
aW5kKCcuJyk7CiAgICAgaWYgKGluZGV4ICE9IC0xKQotICAgICAgICBtX3R5cGUgPSBNSU1FVHlw
ZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZvckV4dGVuc2lvbihtX25hbWUuc3Vic3RyaW5nKGluZGV4
ICsgMSkpOworICAgICAgICBtX3R5cGUgPSBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZv
ckV4dGVuc2lvbihmaWxlTmFtZS5zdWJzdHJpbmcoaW5kZXggKyAxKSk7Cit9CisKK2NvbnN0IFN0
cmluZyYgRmlsZTo6bmFtZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGl0ZW1zKCkuYXQoMCktPnRv
RmlsZUJsb2JJdGVtKCktPm5hbWUoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9odG1sL0ZpbGUuaCBiL1dlYkNvcmUvaHRtbC9GaWxlLmgKaW5kZXgg
MDY1ZGQ4NmE3YjFlYmY3N2ZiNDA2NDZmOWM2ZTg3MDQ2OWQ3ZWIwOS4uNTgyZGIyODUwM2JmZmYy
Yjk1OGUzZDUyNTVlZjdhYmU5YTYwNTY5YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0ZpbGUu
aAorKysgYi9XZWJDb3JlL2h0bWwvRmlsZS5oCkBAIC00MSwxOCArNDEsMTQgQEAgcHVibGljOgog
CiAgICAgdmlydHVhbCBib29sIGlzRmlsZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAotICAg
IGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQotICAgIGNvbnN0
IFN0cmluZyYgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgIGNvbnN0IFN0cmlu
ZyYgbmFtZSgpIGNvbnN0OwogCiAgICAgLy8gRklYTUU6IG9ic29sZXRlIGF0dHJpYnV0ZXMuIFRv
IGJlIHJlbW92ZWQuCi0gICAgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSgpIGNvbnN0IHsgcmV0dXJu
IG1fbmFtZTsgfQorICAgIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUoKSBjb25zdCB7IHJldHVybiBu
YW1lKCk7IH0KICAgICB1bnNpZ25lZCBsb25nIGxvbmcgZmlsZVNpemUoKSBjb25zdCB7IHJldHVy
biBzaXplKCk7IH0KIAogcHJpdmF0ZToKICAgICBGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCk7Ci0K
LSAgICBTdHJpbmcgbV9uYW1lOwotICAgIFN0cmluZyBtX3R5cGU7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvRmlsZVJlYWRlci5jcHAgYi9X
ZWJDb3JlL2h0bWwvRmlsZVJlYWRlci5jcHAKaW5kZXggMzQ0MjM0MjI3NTgxMjdiZWQ3NzM4NzJj
NGZmMzFmYTAxZGZhYzRlNC4uMmUwMjBjMTEzNTA1Y2NiNmY0NDNhOGQyNTZiMGU5YTFiYWIwODAz
NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0ZpbGVSZWFkZXIuY3BwCisrKyBiL1dlYkNvcmUv
aHRtbC9GaWxlUmVhZGVyLmNwcApAQCAtODUsNiArODUsNyBAQCB2b2lkIEZpbGVSZWFkZXI6OnN0
b3AoKQogCiB2b2lkIEZpbGVSZWFkZXI6OnJlYWRBc0JpbmFyeVN0cmluZyhCbG9iKiBmaWxlQmxv
YikKIHsKKyAgICAvLyBGSVhNRTogbmVlZHMgdG8gaGFuZGxlIG5vbi1maWxlIGJsb2JzLgogICAg
IExPRyhGaWxlQVBJLCAiRmlsZVJlYWRlcjogcmVhZGluZyBhcyBiaW5hcnk6ICVzXG4iLCBmaWxl
QmxvYi0+cGF0aCgpLnV0ZjgoKS5kYXRhKCkpOwogCiAgICAgcmVhZEludGVybmFsKGZpbGVCbG9i
LCBSZWFkRmlsZUFzQmluYXJ5U3RyaW5nKTsKQEAgLTkyLDYgKzkzLDcgQEAgdm9pZCBGaWxlUmVh
ZGVyOjpyZWFkQXNCaW5hcnlTdHJpbmcoQmxvYiogZmlsZUJsb2IpCiAKIHZvaWQgRmlsZVJlYWRl
cjo6cmVhZEFzVGV4dChCbG9iKiBmaWxlQmxvYiwgY29uc3QgU3RyaW5nJiBlbmNvZGluZykKIHsK
KyAgICAvLyBGSVhNRTogbmVlZHMgdG8gaGFuZGxlIG5vbi1maWxlIGJsb2JzLgogICAgIExPRyhG
aWxlQVBJLCAiRmlsZVJlYWRlcjogcmVhZGluZyBhcyB0ZXh0OiAlc1xuIiwgZmlsZUJsb2ItPnBh
dGgoKS51dGY4KCkuZGF0YSgpKTsKIAogICAgIGlmICghZW5jb2RpbmcuaXNFbXB0eSgpKQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9odG1sL0ZpbGVTdHJlYW0uY3BwIGIvV2ViQ29yZS9odG1sL0ZpbGVT
dHJlYW0uY3BwCmluZGV4IDcwODlmNjE2MTU0ZTRiMTBhMzI3NzNlMDMzNTZhNzkzNjQ1OGY5N2Yu
LmY4NTliNjNhMWMxYjM0YzM2ZTc0YzA5MTI0ZmEwOTEzZjZhZjY3MDQgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvaHRtbC9GaWxlU3RyZWFtLmNwcAorKysgYi9XZWJDb3JlL2h0bWwvRmlsZVN0cmVhbS5j
cHAKQEAgLTcyLDQ4ICs3Miw1MyBAQCB2b2lkIEZpbGVTdHJlYW06Om9wZW5Gb3JSZWFkKEJsb2Iq
IGJsb2IpCiAgICAgaWYgKGlzSGFuZGxlVmFsaWQobV9oYW5kbGUpKQogICAgICAgICByZXR1cm47
CiAKKyAgICAvLyBGSVhNRTogTmVlZCB0byBoYW5kbGUgbXVsdGlwbGUgaXRlbXMgdGhhdCBtYXkg
aW5jbHVkZSBub24tZmlsZSBvbmVzIHdoZW4gQmxvYkJ1aWxkZXIgaXMgaW50cm9kdWNlZC4KKyAg
ICBBU1NFUlQoYmxvYi0+aXRlbXMoKS5zaXplKCkgPj0gMSk7CisgICAgY29uc3QgRmlsZUJsb2JJ
dGVtKiBmaWxlSXRlbSA9IGJsb2ItPml0ZW1zKCkuYXQoMCktPnRvRmlsZUJsb2JJdGVtKCk7Cisg
ICAgaWYgKCFmaWxlSXRlbSkgeworICAgICAgICBBU1NFUlQoZmFsc2UpOworICAgICAgICBtX2Ns
aWVudC0+ZGlkRmFpbChOT1RfUkVBREFCTEVfRVJSKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KwogICAgIC8vIENoZWNrIGlmIHRoZSBmaWxlIGV4aXN0cyBieSBxdWVyeWluZyBpdHMgbW9kaWZp
Y2F0aW9uIHRpbWUuIFdlIGNob29zZSBub3QgdG8gY2FsbCBmaWxlRXhpc3RzKCkgaW4gb3JkZXIg
dG8gc2F2ZSBhbgogICAgIC8vIGV4dHJhIGZpbGUgc3lzdGVtIGNhbGwgd2hlbiB0aGUgbW9kaWZp
Y2F0aW9uIHRpbWUgaXMgbmVlZGVkIHRvIGNoZWNrIHRoZSB2YWxpZGl0eSBvZiB0aGUgc2xpY2Vk
IGZpbGUgYmxvYi4KICAgICAvLyBQZXIgdGhlIHNwZWMsIHdlIG5lZWQgdG8gcmV0dXJuIGRpZmZl
cmVudCBlcnJvciBjb2RlcyB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gbm9uLWV4aXN0ZW50IGZp
bGUgYW5kIHBlcm1pc3Npb24gZXJyb3IuCiAgICAgLy8gb3BlbkZpbGUoKSBjb3VsZCBub3QgdGVs
bCB1c2UgdGhlIGZhaWx1cmUgcmVhc29uLgogICAgIHRpbWVfdCBjdXJyZW50TW9kaWZpY2F0aW9u
VGltZTsKLSAgICBpZiAoIWdldEZpbGVNb2RpZmljYXRpb25UaW1lKGJsb2ItPnBhdGgoKSwgY3Vy
cmVudE1vZGlmaWNhdGlvblRpbWUpKSB7CisgICAgaWYgKCFnZXRGaWxlTW9kaWZpY2F0aW9uVGlt
ZShmaWxlSXRlbS0+cGF0aCgpLCBjdXJyZW50TW9kaWZpY2F0aW9uVGltZSkpIHsKICAgICAgICAg
bV9jbGllbnQtPmRpZEZhaWwoTk9UX0ZPVU5EX0VSUik7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKICAgICAvLyBPcGVuIHRoZSBmaWxlIGJsb2IuCi0gICAgbV9oYW5kbGUgPSBvcGVuRmlsZShi
bG9iLT5wYXRoKCksIE9wZW5Gb3JSZWFkKTsKKyAgICBtX2hhbmRsZSA9IG9wZW5GaWxlKGZpbGVJ
dGVtLT5wYXRoKCksIE9wZW5Gb3JSZWFkKTsKICAgICBpZiAoIWlzSGFuZGxlVmFsaWQobV9oYW5k
bGUpKSB7CiAgICAgICAgIG1fY2xpZW50LT5kaWRGYWlsKE5PVF9SRUFEQUJMRV9FUlIpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCiAjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgLy8gQ2hl
Y2sgdGhlIG1vZGlmaWNhdGlvbnQgdGltZSBmb3IgdGhlIHBvc3NpYmxlIGZpbGUgY2hhbmdlLgot
ICAgIGlmIChibG9iLT5tb2RpZmljYXRpb25UaW1lKCkgIT0gQmxvYjo6ZG9Ob3RDaGVja0ZpbGVD
aGFuZ2UgJiYgc3RhdGljX2Nhc3Q8dGltZV90PihibG9iLT5tb2RpZmljYXRpb25UaW1lKCkpICE9
IGN1cnJlbnRNb2RpZmljYXRpb25UaW1lKSB7Ci0gICAgICAgIG1fY2xpZW50LT5kaWRGYWlsKE5P
VF9SRUFEQUJMRV9FUlIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gSnVtcCB0
byB0aGUgYmVnaW5uaW5nIHBvc2l0aW9uIGlmIHRoZSBmaWxlIGhhcyBiZWVuIHNsaWNlZC4KLSAg
ICBpZiAoYmxvYi0+c3RhcnQoKSA+IDApIHsKLSAgICAgICAgaWYgKCFzZWVrRmlsZShtX2hhbmRs
ZSwgYmxvYi0+c3RhcnQoKSwgU2Vla0Zyb21CZWdpbm5pbmcpKSB7CisgICAgY29uc3QgRmlsZVJh
bmdlQmxvYkl0ZW0qIGZpbGVSYW5nZUl0ZW0gPSBmaWxlSXRlbS0+dG9GaWxlUmFuZ2VCbG9iSXRl
bSgpOworICAgIGlmIChmaWxlUmFuZ2VJdGVtKSB7CisgICAgICAgIC8vIENoZWNrIHRoZSBtb2Rp
ZmljYXRpb250IHRpbWUgZm9yIHRoZSBwb3NzaWJsZSBmaWxlIGNoYW5nZS4KKyAgICAgICAgaWYg
KHN0YXRpY19jYXN0PHRpbWVfdD4oZmlsZVJhbmdlSXRlbS0+c25hcHNob3RNb2RpZmljYXRpb25U
aW1lKCkpICE9IGN1cnJlbnRNb2RpZmljYXRpb25UaW1lKSB7CiAgICAgICAgICAgICBtX2NsaWVu
dC0+ZGlkRmFpbChOT1RfUkVBREFCTEVfRVJSKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQorCisgICAgICAgIC8vIEp1bXAgdG8gdGhlIGJlZ2lubmluZyBwb3NpdGlvbiBpZiB0aGUg
ZmlsZSBoYXMgYmVlbiBzbGljZWQuCisgICAgICAgIGlmIChmaWxlUmFuZ2VJdGVtLT5zdGFydCgp
ID4gMCkgeworICAgICAgICAgICAgaWYgKHNlZWtGaWxlKG1faGFuZGxlLCBmaWxlUmFuZ2VJdGVt
LT5zdGFydCgpLCBTZWVrRnJvbUJlZ2lubmluZykgPCAwKSB7CisgICAgICAgICAgICAgICAgbV9j
bGllbnQtPmRpZEZhaWwoTk9UX1JFQURBQkxFX0VSUik7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQogI2VuZGlmCiAKICAgICAvLyBHZXQg
dGhlIHNpemUuCi0jaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgbV90b3RhbEJ5dGVzVG9SZWFk
ID0gYmxvYi0+bGVuZ3RoKCk7Ci0gICAgaWYgKG1fdG90YWxCeXRlc1RvUmVhZCA9PSBCbG9iOjp0
b0VuZE9mRmlsZSkKLSAgICAgICAgbV90b3RhbEJ5dGVzVG9SZWFkID0gYmxvYi0+c2l6ZSgpIC0g
YmxvYi0+c3RhcnQoKTsKLSNlbHNlCi0gICAgbV90b3RhbCA9IGJsb2ItPnNpemUoKTsKLSNlbmRp
ZgotCisgICAgbV90b3RhbEJ5dGVzVG9SZWFkID0gYmxvYi0+c2l6ZSgpOwogICAgIG1fY2xpZW50
LT5kaWRHZXRTaXplKG1fdG90YWxCeXRlc1RvUmVhZCk7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvaHRtbC9Gb3JtRGF0YUxpc3QuY3BwIGIvV2ViQ29yZS9odG1sL0Zvcm1EYXRhTGlzdC5jcHAK
aW5kZXggMjgxYzlmZTQxOGUxYzQ4MzNiYjg3ZjgyZjc0ZjFjYzRkNzIyZDU3Yy4uMGY2MjU5NWVk
NDFjMjMxOWJkYjc5YjU3YmJkN2NhOTQ2MjJiODJhYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1s
L0Zvcm1EYXRhTGlzdC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0Zvcm1EYXRhTGlzdC5jcHAKQEAg
LTI4LDY0ICsyOCwyMiBAQCBGb3JtRGF0YUxpc3Q6OkZvcm1EYXRhTGlzdChjb25zdCBUZXh0RW5j
b2RpbmcmIGMpCiB7CiB9CiAKLXZvaWQgRm9ybURhdGFMaXN0OjphcHBlbmRTdHJpbmcoY29uc3Qg
Q1N0cmluZyYgcykKK3ZvaWQgRm9ybURhdGFMaXN0OjphcHBlbmRTdHJpbmcoY29uc3QgU3RyaW5n
JiBzKQogewotICAgIG1fbGlzdC5hcHBlbmQocyk7CisgICAgbV9pdGVtcy5hcHBlbmQoU3RyaW5n
QmxvYkl0ZW06OmNyZWF0ZShzLCBFbmRpbmdDUkxGLCBtX2VuY29kaW5nKSk7CiB9CiAKLS8vIENo
YW5nZSBwbGFpbiBDUiBhbmQgcGxhaW4gTEYgdG8gQ1JMRiBwYWlycy4KLXN0YXRpYyBDU3RyaW5n
IGZpeExpbmVCcmVha3MoY29uc3QgQ1N0cmluZyYgcykKK3ZvaWQgRm9ybURhdGFMaXN0OjphcHBl
bmRTdHJpbmcoY29uc3QgQ1N0cmluZyYgcykKIHsKLSAgICAvLyBDb21wdXRlIHRoZSBsZW5ndGgu
Ci0gICAgdW5zaWduZWQgbmV3TGVuID0gMDsKLSAgICBjb25zdCBjaGFyKiBwID0gcy5kYXRhKCk7
Ci0gICAgd2hpbGUgKGNoYXIgYyA9ICpwKyspIHsKLSAgICAgICAgaWYgKGMgPT0gJ1xyJykgewot
ICAgICAgICAgICAgLy8gU2FmZSB0byBsb29rIGFoZWFkIGJlY2F1c2Ugb2YgdHJhaWxpbmcgJ1ww
Jy4KLSAgICAgICAgICAgIGlmICgqcCAhPSAnXG4nKSB7Ci0gICAgICAgICAgICAgICAgLy8gVHVy
biBDUiBpbnRvIENSTEYuCi0gICAgICAgICAgICAgICAgbmV3TGVuICs9IDI7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoYyA9PSAnXG4nKSB7Ci0gICAgICAgICAgICAvLyBUdXJu
IExGIGludG8gQ1JMRi4KLSAgICAgICAgICAgIG5ld0xlbiArPSAyOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgLy8gTGVhdmUgb3RoZXIgY2hhcmFjdGVycyBhbG9uZS4KLSAgICAgICAg
ICAgIG5ld0xlbiArPSAxOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChuZXdMZW4gPT0gcy5s
ZW5ndGgoKSkgewotICAgICAgICByZXR1cm4gczsKLSAgICB9Ci0gICAgCi0gICAgLy8gTWFrZSBh
IGNvcHkgb2YgdGhlIHN0cmluZy4KLSAgICBwID0gcy5kYXRhKCk7Ci0gICAgY2hhciogcTsKLSAg
ICBDU3RyaW5nIHJlc3VsdCA9IENTdHJpbmc6Om5ld1VuaW5pdGlhbGl6ZWQobmV3TGVuLCBxKTsK
LSAgICB3aGlsZSAoY2hhciBjID0gKnArKykgewotICAgICAgICBpZiAoYyA9PSAnXHInKSB7Ci0g
ICAgICAgICAgICAvLyBTYWZlIHRvIGxvb2sgYWhlYWQgYmVjYXVzZSBvZiB0cmFpbGluZyAnXDAn
LgotICAgICAgICAgICAgaWYgKCpwICE9ICdcbicpIHsKLSAgICAgICAgICAgICAgICAvLyBUdXJu
IENSIGludG8gQ1JMRi4KLSAgICAgICAgICAgICAgICAqcSsrID0gJ1xyJzsKLSAgICAgICAgICAg
ICAgICAqcSsrID0gJ1xuJzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChjID09
ICdcbicpIHsKLSAgICAgICAgICAgIC8vIFR1cm4gTEYgaW50byBDUkxGLgotICAgICAgICAgICAg
KnErKyA9ICdccic7Ci0gICAgICAgICAgICAqcSsrID0gJ1xuJzsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIC8vIExlYXZlIG90aGVyIGNoYXJhY3RlcnMgYWxvbmUuCi0gICAgICAgICAg
ICAqcSsrID0gYzsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OworICAgIG1f
aXRlbXMuYXBwZW5kKFN0cmluZ0Jsb2JJdGVtOjpjcmVhdGUocykpOwogfQogCi12b2lkIEZvcm1E
YXRhTGlzdDo6YXBwZW5kU3RyaW5nKGNvbnN0IFN0cmluZyYgcykKK3ZvaWQgRm9ybURhdGFMaXN0
OjphcHBlbmRCbG9iKGNvbnN0IFN0cmluZyYga2V5LCBQYXNzUmVmUHRyPEJsb2I+IGJsb2IpCiB7
Ci0gICAgQ1N0cmluZyBjc3RyID0gZml4TGluZUJyZWFrcyhtX2VuY29kaW5nLmVuY29kZShzLmNo
YXJhY3RlcnMoKSwgcy5sZW5ndGgoKSwgRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpKTsKLSAgICBt
X2xpc3QuYXBwZW5kKGNzdHIpOworICAgIGFwcGVuZFN0cmluZyhrZXkpOworICAgIGNvbnN0IEJs
b2JJdGVtTGlzdCYgaXRlbXMgPSBibG9iLT5pdGVtcygpOworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgaXRlbXMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1faXRlbXMuYXBwZW5kKGl0ZW1zLmF0
KGkpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9Gb3Jt
RGF0YUxpc3QuaCBiL1dlYkNvcmUvaHRtbC9Gb3JtRGF0YUxpc3QuaAppbmRleCA4ZWNmNjRlZTkz
YWQ1MjRmNDc5MjFmMWQ4MjJmOWEwOGJhMDEzZDdjLi5mNGJiOTA1MTUwZmFkNzhiMDFhZTVhOTY4
M2ZhZDk5ODQzOTBlNmJlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvRm9ybURhdGFMaXN0LmgK
KysrIGIvV2ViQ29yZS9odG1sL0Zvcm1EYXRhTGlzdC5oCkBAIC00NiwyNyArNDYsOSBAQCBwdWJs
aWM6CiAgICAgICAgIGFwcGVuZFN0cmluZyhrZXkpOwogICAgICAgICBhcHBlbmRTdHJpbmcoU3Ry
aW5nOjpudW1iZXIodmFsdWUpKTsKICAgICB9Ci0gICAgdm9pZCBhcHBlbmRCbG9iKGNvbnN0IFN0
cmluZyYga2V5LCBQYXNzUmVmUHRyPEJsb2I+IGJsb2IpCi0gICAgewotICAgICAgICBhcHBlbmRT
dHJpbmcoa2V5KTsKLSAgICAgICAgbV9saXN0LmFwcGVuZChibG9iKTsKLSAgICB9Ci0KLSAgICBj
bGFzcyBJdGVtIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEl0ZW0oKSB7IH0KLSAgICAgICAgSXRl
bShjb25zdCBXVEY6OkNTdHJpbmcmIGRhdGEpIDogbV9kYXRhKGRhdGEpIHsgfQotICAgICAgICBJ
dGVtKFBhc3NSZWZQdHI8QmxvYj4gYmxvYikgOiBtX2Jsb2IoYmxvYikgeyB9Ci0KLSAgICAgICAg
Y29uc3QgV1RGOjpDU3RyaW5nJiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9Ci0gICAg
ICAgIEJsb2IqIGJsb2IoKSBjb25zdCB7IHJldHVybiBtX2Jsb2IuZ2V0KCk7IH0KLQotICAgIHBy
aXZhdGU6Ci0gICAgICAgIFdURjo6Q1N0cmluZyBtX2RhdGE7Ci0gICAgICAgIFJlZlB0cjxCbG9i
PiBtX2Jsb2I7Ci0gICAgfTsKKyAgICB2b2lkIGFwcGVuZEJsb2IoY29uc3QgU3RyaW5nJiBrZXks
IFBhc3NSZWZQdHI8QmxvYj4pOwogCi0gICAgY29uc3QgVmVjdG9yPEl0ZW0+JiBsaXN0KCkgY29u
c3QgeyByZXR1cm4gbV9saXN0OyB9CisgICAgY29uc3QgQmxvYkl0ZW1MaXN0JiBpdGVtcygpIGNv
bnN0IHsgcmV0dXJuIG1faXRlbXM7IH0KICAgICBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5n
KCkgY29uc3QgeyByZXR1cm4gbV9lbmNvZGluZzsgfQogCiBwcml2YXRlOgpAQCAtNzQsNyArNTYs
NyBAQCBwcml2YXRlOgogICAgIHZvaWQgYXBwZW5kU3RyaW5nKGNvbnN0IFN0cmluZyYpOwogCiAg
ICAgVGV4dEVuY29kaW5nIG1fZW5jb2Rpbmc7Ci0gICAgVmVjdG9yPEl0ZW0+IG1fbGlzdDsKKyAg
ICBCbG9iSXRlbUxpc3QgbV9pdGVtczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwIGIvV2ViQ29yZS9odG1s
L0hUTUxGb3JtRWxlbWVudC5jcHAKaW5kZXggYzg0NDU0ZDE1OWRiZWNhNWE0ZTM1Yjk1MmFiZWFh
MzQ5OWJhNTFmMy4uNzM4NWNlMzc4NTJjMzdlNWVjMTViNTFkMTQ4OWJmYzM5MTlmMmVhMyAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9o
dG1sL0hUTUxGb3JtRWxlbWVudC5jcHAKQEAgLTIxMCw3ICsyMTAsNyBAQCBQYXNzUmVmUHRyPEZv
cm1EYXRhPiBIVE1MRm9ybUVsZW1lbnQ6OmNyZWF0ZUZvcm1EYXRhKCkKICAgICAgICAgICAgIGNv
bnRyb2wtPmFwcGVuZEZvcm1EYXRhKCpkb21Gb3JtRGF0YSwgbV9mb3JtRGF0YUJ1aWxkZXIuaXNN
dWx0aVBhcnRGb3JtKCkpOwogICAgIH0KIAotICAgIFJlZlB0cjxGb3JtRGF0YT4gcmVzdWx0ID0g
KG1fZm9ybURhdGFCdWlsZGVyLmlzTXVsdGlQYXJ0Rm9ybSgpKSA/IEZvcm1EYXRhOjpjcmVhdGVN
dWx0aVBhcnQoKmRvbUZvcm1EYXRhLCBkb2N1bWVudCgpKSA6IEZvcm1EYXRhOjpjcmVhdGUoKmRv
bUZvcm1EYXRhKTsKKyAgICBSZWZQdHI8Rm9ybURhdGE+IHJlc3VsdCA9IChtX2Zvcm1EYXRhQnVp
bGRlci5pc011bHRpUGFydEZvcm0oKSkgPyBGb3JtRGF0YTo6Y3JlYXRlTXVsdGlQYXJ0KGRvbUZv
cm1EYXRhLT5pdGVtcygpLCBkb21Gb3JtRGF0YS0+ZW5jb2RpbmcoKSwgZG9jdW1lbnQoKSkgOiBG
b3JtRGF0YTo6Y3JlYXRlKGRvbUZvcm1EYXRhLT5pdGVtcygpLCBkb21Gb3JtRGF0YS0+ZW5jb2Rp
bmcoKSk7CiAKICAgICByZXN1bHQtPnNldElkZW50aWZpZXIoZ2VuZXJhdGVGb3JtRGF0YUlkZW50
aWZpZXIoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9I
VE1MTWV0ZXJFbGVtZW50LmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1MTWV0ZXJFbGVtZW50LmNwcApp
bmRleCBhMWI3NGIyZDBhYjBjNzVjZWRhM2Q2MzI4OTgxMTU0YzQ4YzcyNDE4Li4wMzE2MjY3MGM2
M2I3NzlkZjYwNzNiOTU2MDU0ZTZiYWVhZDM1MjM4IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwv
SFRNTE1ldGVyRWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxNZXRlckVsZW1lbnQu
Y3BwCkBAIC0yNCw2ICsyNCw3IEBACiAKICNpbmNsdWRlICJBdHRyaWJ1dGUuaCIKICNpbmNsdWRl
ICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkZv
cm1EYXRhTGlzdC5oIgogI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgogI2luY2x1ZGUgIkhU
TUxOYW1lcy5oIgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxQcm9ncmVzc0VsZW1lbnQu
Y3BwIGIvV2ViQ29yZS9odG1sL0hUTUxQcm9ncmVzc0VsZW1lbnQuY3BwCmluZGV4IGQyNzVlYmZj
ZmY4ZDk3YjkxNmQ1OWQyNGYyNDE5ZGE4YzUzNGFmMjkuLmY3ZTg2ZjNhOWFmZmVjZWRlYmI5M2I5
MzUzNTBkYWI4NTJhZWE2YzUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MUHJvZ3Jlc3NF
bGVtZW50LmNwcAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTFByb2dyZXNzRWxlbWVudC5jcHAKQEAg
LTI0LDYgKzI0LDcgQEAKIAogI2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkV2ZW50
TmFtZXMuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiRm9ybURhdGFM
aXN0LmgiCiAjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVz
LmgiCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL0Jsb2JJdGVtLmNwcCBiL1dlYkNvcmUv
cGxhdGZvcm0vQmxvYkl0ZW0uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVkNGY2MTU3Y2FjOTgwMDc3OTAwOGU4
OTUyZjUyMWI2NThiZTNlOTkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL0Js
b2JJdGVtLmNwcApAQCAtMCwwICsxLDMyMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1
ZGUgIkJsb2JJdGVtLmgiCisKKyNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCisjaW5jbHVkZSAiVVVJ
RC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiBFTkFCTEUoQkxPQl9TTElDRSkKK3N0
YXRpYyBjb25zdCBkb3VibGUgaW52YWxpZE1vZGlmaWNhdGlvblRpbWUgPSAwOworCitkb3VibGUg
Z2V0RmlsZVNuYXBzaG90TW9kaWZpY2F0aW9uVGltZShjb25zdCBTdHJpbmcmIHBhdGgpCit7Cisg
ICAgLy8gRklYTUU6IHN5bmNocm9uaXplZCBmaWxlIGNhbGwKKyAgICB0aW1lX3QgbW9kaWZpY2F0
aW9uVGltZTsKKyAgICBpZiAoZ2V0RmlsZU1vZGlmaWNhdGlvblRpbWUocGF0aCwgbW9kaWZpY2F0
aW9uVGltZSkpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KG1vZGlmaWNhdGlv
blRpbWUpOworICAgIHJldHVybiBpbnZhbGlkTW9kaWZpY2F0aW9uVGltZTsKK30KKworUGFzc1Jl
ZlB0cjxCbG9iSXRlbT4gQmxvYkl0ZW06OnNsaWNlKGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25n
IGxlbmd0aCkKK3sKKyAgICBBU1NFUlQoc3RhcnQgPj0gMCAmJiBsZW5ndGggPj0gMCk7CisgICAg
QVNTRVJUKHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oc3RhcnQpIDwgc2l6ZSgpKTsK
KyAgICBpZiAoIXN0YXJ0ICYmIHNpemUoKSA8PSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxv
bmc+KGxlbmd0aCkpCisgICAgICAgIHJldHVybiB0aGlzOworICAgIGNvbnN0IEZpbGVCbG9iSXRl
bSogZmlsZUl0ZW0gPSB0b0ZpbGVCbG9iSXRlbSgpOworICAgIGlmIChmaWxlSXRlbSkgeworICAg
ICAgICBjb25zdCBGaWxlUmFuZ2VCbG9iSXRlbSogZmlsZVJhbmdlSXRlbSA9IHRvRmlsZVJhbmdl
QmxvYkl0ZW0oKTsKKyAgICAgICAgZG91YmxlIG1vZGlmaWNhdGlvblRpbWUgPSBmaWxlUmFuZ2VJ
dGVtID8gZmlsZVJhbmdlSXRlbS0+c25hcHNob3RNb2RpZmljYXRpb25UaW1lKCkgOiBnZXRGaWxl
U25hcHNob3RNb2RpZmljYXRpb25UaW1lKGZpbGVJdGVtLT5wYXRoKCkpOworICAgICAgICByZXR1
cm4gRmlsZVJhbmdlQmxvYkl0ZW06OmNyZWF0ZShmaWxlSXRlbS0+cGF0aCgpLCBzdGFydCwgbGVu
Z3RoLCBtb2RpZmljYXRpb25UaW1lKTsKKyAgICB9CisgICAgQVNTRVJUKHRvRGF0YUJsb2JJdGVt
KCkpOworICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KHN0YXJ0ICsgbGVu
Z3RoKSA+IHNpemUoKSkKKyAgICAgICAgbGVuZ3RoID0gc2l6ZSgpIC0gc3RhcnQ7CisgICAgcmV0
dXJuIERhdGFSYW5nZUJsb2JJdGVtOjpjcmVhdGUoc3RhdGljX2Nhc3Q8RGF0YVJhbmdlQmxvYkl0
ZW0qPih0aGlzKSwgc3RhcnQsIGxlbmd0aCk7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoQkxPQl9T
TElDRSkKKworLy8gRGF0YUJsb2JJdGVtIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2hhciogRGF0YUJsb2JJdGVtOjpk
ZWVwQ29weUJ1ZmZlcigpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IFJlY29uc2lkZXIgaWYgd2Ug
c3RpbGwgbmVlZCBpdCBvbmNlIHdlIGNsZWFuIHVwIHRoZSB0cmFuc2llbnQgd3JhcHBlciBjbGFz
cyBGb3JtRGF0YUVsZW1lbnQ6OkJsb2JJdGVtV3JhcHBlciBhbmQgaXRzIHJlbGVhc2VCdWZmZXIo
KSBtZXRob2QuICBJdCB1c2VkIHRvIGJlIGEgbWVyZSBWZWN0b3IgYW5kIFZlY3Rvcjo6cmVsZWFz
ZUJ1ZmZlciwgYnV0IG5vdyB3ZSBrZWVwIHRoZSBkYXRhIHJlZi1jb3VudGVkIGFuZCBuZWVkIHRv
IG1ha2UgYSBjb3B5IHRvIHJldHVybiB0aGUgZGF0YSB3aXRoIG93bmVyc2hpcC4KKyAgICBWZWN0
b3I8Y2hhcj4gdjsKKyAgICB2LmFwcGVuZChkYXRhKCksIHN0YXRpY19jYXN0PHNpemVfdD4oc2l6
ZSgpKSk7CisgICAgcmV0dXJuIHYucmVsZWFzZUJ1ZmZlcigpOworfQorCitib29sIERhdGFCbG9i
SXRlbTo6ZXF1YWxzKGNvbnN0IEJsb2JJdGVtKiBpdGVtKSBjb25zdAoreworICAgIGNvbnN0IERh
dGFCbG9iSXRlbSogZGF0YUl0ZW0gPSBpdGVtLT50b0RhdGFCbG9iSXRlbSgpOworICAgIHJldHVy
biBkYXRhSXRlbSAmJiBkYXRhKCkgPT0gZGF0YUl0ZW0tPmRhdGEoKSAmJiBzaXplKCkgPT0gZGF0
YUl0ZW0tPnNpemUoKTsKK30KKworCisvLyBGaWxlQmxvYkl0ZW0gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitQYXNzUmVm
UHRyPEJsb2JJdGVtPiBGaWxlQmxvYkl0ZW06OmNyZWF0ZShjb25zdCBTdHJpbmcmIHBhdGgpCit7
CisgICAgcmV0dXJuIGFkb3B0UmVmKHN0YXRpY19jYXN0PEJsb2JJdGVtKj4obmV3IEZpbGVCbG9i
SXRlbShwYXRoKSkpOworfQorCitGaWxlQmxvYkl0ZW06OkZpbGVCbG9iSXRlbShjb25zdCBTdHJp
bmcmIHBhdGgpCisgICAgOiBtX3BhdGgocGF0aCkKKyAgICAsIG1fZmlsZU5hbWUocGF0aEdldEZp
bGVOYW1lKG1fcGF0aCkpCit7Cit9CisKK3Vuc2lnbmVkIGxvbmcgbG9uZyBGaWxlQmxvYkl0ZW06
OnNpemUoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBzeW5jaHJvbml6ZWQgZmlsZSBjYWxsCisg
ICAgbG9uZyBsb25nIHNpemU7CisgICAgaWYgKCFnZXRGaWxlU2l6ZShtX3BhdGgsIHNpemUpKQor
ICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBs
b25nPihzaXplKTsKK30KKworYm9vbCBGaWxlQmxvYkl0ZW06OmlzVmFsaWQoKSBjb25zdAorewor
ICAgIC8vIEZJWE1FOiBzeW5jaHJvbml6ZWQgZmlsZSBjYWxsCisgICAgbG9uZyBsb25nIHNpemU7
CisgICAgcmV0dXJuICghbV9wYXRoLmlzRW1wdHkoKSAmJiBnZXRGaWxlU2l6ZShtX3BhdGgsIHNp
emUpKTsKK30KKworUGFzc1JlZlB0cjxCbG9iSXRlbT4gRmlsZUJsb2JJdGVtOjpkZWVwQ29weSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIEZpbGVCbG9iSXRlbTo6Y3JlYXRlKG1fcGF0aCk7Cit9CisK
K2Jvb2wgRmlsZUJsb2JJdGVtOjplcXVhbHMoY29uc3QgQmxvYkl0ZW0qIGl0ZW0pIGNvbnN0Cit7
CisgICAgY29uc3QgRmlsZUJsb2JJdGVtKiBmaWxlSXRlbSA9IGl0ZW0tPnRvRmlsZUJsb2JJdGVt
KCk7CisgICAgcmV0dXJuIGZpbGVJdGVtICYmIG1fcGF0aCA9PSBmaWxlSXRlbS0+bV9wYXRoOwor
fQorCisvLyBTdHJpbmdCbG9iSXRlbSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitQYXNzUmVmUHRyPEJsb2JJdGVtPiBTdHJp
bmdCbG9iSXRlbTo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgdGV4dCwgRW5kaW5nVHlwZSBlbmRpbmcs
IFRleHRFbmNvZGluZyBlbmNvZGluZykKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoc3RhdGljX2Nh
c3Q8QmxvYkl0ZW0qPihuZXcgU3RyaW5nQmxvYkl0ZW0odGV4dCwgZW5kaW5nLCBlbmNvZGluZykp
KTsKK30KKworUGFzc1JlZlB0cjxCbG9iSXRlbT4gU3RyaW5nQmxvYkl0ZW06OmNyZWF0ZShjb25z
dCBDU3RyaW5nJiB0ZXh0KQoreworICAgIHJldHVybiBhZG9wdFJlZihzdGF0aWNfY2FzdDxCbG9i
SXRlbSo+KG5ldyBTdHJpbmdCbG9iSXRlbSh0ZXh0KSkpOworfQorCisKK1N0cmluZ0Jsb2JJdGVt
OjpTdHJpbmdCbG9iSXRlbShjb25zdCBTdHJpbmcmIHRleHQsIEVuZGluZ1R5cGUgZW5kaW5nLCBU
ZXh0RW5jb2RpbmcgZW5jb2RpbmcpCisgICAgOiBtX2RhdGEoU3RyaW5nQmxvYkl0ZW06OmNvbnZl
cnRUb0NTdHJpbmcodGV4dCwgZW5kaW5nLCBlbmNvZGluZykpCit7Cit9CisKK1N0cmluZ0Jsb2JJ
dGVtOjpTdHJpbmdCbG9iSXRlbShjb25zdCBDU3RyaW5nJiB0ZXh0KQorICAgIDogbV9kYXRhKHRl
eHQpCit7Cit9CisKK1Bhc3NSZWZQdHI8QmxvYkl0ZW0+IFN0cmluZ0Jsb2JJdGVtOjpkZWVwQ29w
eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFN0cmluZ0Jsb2JJdGVtOjpjcmVhdGUoQ1N0cmluZyht
X2RhdGEuZGF0YSgpLCBtX2RhdGEubGVuZ3RoKCkpKTsKK30KKworYm9vbCBTdHJpbmdCbG9iSXRl
bTo6ZXF1YWxzKGNvbnN0IEJsb2JJdGVtKiBpdGVtKSBjb25zdAoreworICAgIGlmICghRGF0YUJs
b2JJdGVtOjplcXVhbHMoaXRlbSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjb25zdCBT
dHJpbmdCbG9iSXRlbSogc3RyaW5nSXRlbSA9IGl0ZW0tPnRvU3RyaW5nQmxvYkl0ZW0oKTsKKyAg
ICByZXR1cm4gc3RyaW5nSXRlbSAmJiBkYXRhKCkgPT0gc3RyaW5nSXRlbS0+ZGF0YSgpICYmIHNp
emUoKSA9PSBzdHJpbmdJdGVtLT5zaXplKCk7Cit9CisKK0NTdHJpbmcgU3RyaW5nQmxvYkl0ZW06
OmNvbnZlcnRUb0NTdHJpbmcoY29uc3QgU3RyaW5nJiB0ZXh0LCBFbmRpbmdUeXBlIGVuZGluZywg
VGV4dEVuY29kaW5nIGVuY29kaW5nKQoreworICAgIENTdHJpbmcgZnJvbSA9IGVuY29kaW5nLmVu
Y29kZSh0ZXh0LmNoYXJhY3RlcnMoKSwgdGV4dC5sZW5ndGgoKSwgRW50aXRpZXNGb3JVbmVuY29k
YWJsZXMpOworICAgIENTdHJpbmcgcmVzdWx0ID0gZnJvbTsKKworICAgIGlmIChlbmRpbmcgPT0g
RW5kaW5nVHJhbnNwYXJlbnQpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICBjb25zdCBj
aGFyKiBlbmRpbmdDaGFycyA9IChlbmRpbmcgPT0gRW5kaW5nQ1JMRikgPyAiXHJcbiIgOiAoKGVu
ZGluZyA9PSBFbmRpbmdDUikgPyAiXHIiIDogIlxuIik7CisKKyAgICBpbnQgZW5kaW5nTGVuZ3Ro
ID0gKGVuZGluZyA9PSBFbmRpbmdDUkxGKSA/IDIgOiAxOworICAgIGludCBuZWVkRml4ID0gMDsK
KworICAgIC8vIENhbGN1bGF0ZSB0aGUgZmluYWwgbGVuZ3RoLgorICAgIGludCBjYWxjdWxhdGVk
TGVuZ3RoID0gZnJvbS5sZW5ndGgoKTsKKyAgICBjb25zdCBjaGFyKiBwID0gZnJvbS5kYXRhKCk7
CisgICAgd2hpbGUgKGNoYXIgYyA9ICpwKyspIHsKKyAgICAgICAgaWYgKGMgPT0gJ1xyJykgewor
ICAgICAgICAgICAgLy8gU2FmZSB0byBsb29rIGFoZWFkIGJlY2F1c2Ugb2YgdHJhaWxpbmcgJ1ww
Jy4KKyAgICAgICAgICAgIGlmICgqcCA9PSAnXG4nICYmIGVuZGluZyAhPSBFbmRpbmdDUkxGKSB7
CisgICAgICAgICAgICAgICAgY2FsY3VsYXRlZExlbmd0aCArPSAoZW5kaW5nTGVuZ3RoIC0gMik7
CisgICAgICAgICAgICAgICAgKytuZWVkRml4OworICAgICAgICAgICAgfSBlbHNlIGlmIChlbmRp
bmcgIT0gRW5kaW5nQ1IpIHsKKyAgICAgICAgICAgICAgICBjYWxjdWxhdGVkTGVuZ3RoICs9IChl
bmRpbmdMZW5ndGggLSAxKTsKKyAgICAgICAgICAgICAgICArK25lZWRGaXg7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0gZWxzZSBpZiAoYyA9PSAnXG4nICYmIGVuZGluZyAhPSBFbmRpbmdMRikg
eworICAgICAgICAgICAgY2FsY3VsYXRlZExlbmd0aCArPSAoZW5kaW5nTGVuZ3RoIC0gMSk7Cisg
ICAgICAgICAgICArK25lZWRGaXg7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIW5lZWRG
aXgpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICAvLyBDb252ZXJ0IHRoZSBlbmRpbmdz
IGFuZCBjcmVhdGUgYSBkYXRhIGJ1ZmZlci4KKyAgICBwID0gZnJvbS5kYXRhKCk7CisgICAgY2hh
ciogcTsKKyAgICByZXN1bHQgPSBDU3RyaW5nOjpuZXdVbmluaXRpYWxpemVkKGNhbGN1bGF0ZWRM
ZW5ndGgsIHEpOworICAgIHdoaWxlIChjaGFyIGMgPSAqcCsrKSB7CisgICAgICAgIGlmIChjID09
ICdccicpIHsKKyAgICAgICAgICAgIGlmICgqcCA9PSAnXG4nICYmIGVuZGluZyAhPSBFbmRpbmdD
UkxGKSB7CisgICAgICAgICAgICAgICAgbWVtY3B5KHEsIGVuZGluZ0NoYXJzLCBlbmRpbmdMZW5n
dGgpOworICAgICAgICAgICAgICAgIHEgKz0gZW5kaW5nTGVuZ3RoOworICAgICAgICAgICAgfSBl
bHNlIGlmICgqcCAhPSAnXG4nICYmIGVuZGluZyAhPSBFbmRpbmdDUikgeworICAgICAgICAgICAg
ICAgIG1lbWNweShxLCBlbmRpbmdDaGFycywgZW5kaW5nTGVuZ3RoKTsKKyAgICAgICAgICAgICAg
ICBxICs9IGVuZGluZ0xlbmd0aDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChj
ID09ICdcbicgJiYgZW5kaW5nICE9IEVuZGluZ0xGKSB7CisgICAgICAgICAgICBtZW1jcHkocSwg
ZW5kaW5nQ2hhcnMsIGVuZGluZ0xlbmd0aCk7CisgICAgICAgICAgICBxICs9IGVuZGluZ0xlbmd0
aDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIExlYXZlIG90aGVyIGNoYXJhY3Rl
cnMgYWxvbmUuCisgICAgICAgICAgICAqcSsrID0gYzsKKyAgICAgICAgfQorICAgIH0KKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCisvLyBCeXRlc0FycmF5QmxvYkl0ZW0gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitQYXNzUmVmUHRy
PEJsb2JJdGVtPiBCeXRlc0FycmF5QmxvYkl0ZW06OmNyZWF0ZShjb25zdCBjaGFyKiBkYXRhLCBz
aXplX3Qgc2l6ZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoc3RhdGljX2Nhc3Q8QmxvYkl0ZW0q
PihuZXcgQnl0ZXNBcnJheUJsb2JJdGVtKGRhdGEsIHNpemUpKSk7Cit9CisKK0J5dGVzQXJyYXlC
bG9iSXRlbTo6Qnl0ZXNBcnJheUJsb2JJdGVtKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBzaXpl
KQoreworICAgIG1fYnl0ZXNBcnJheS5hcHBlbmQoZGF0YSwgc2l6ZSk7Cit9CisKK1Bhc3NSZWZQ
dHI8QmxvYkl0ZW0+IEJ5dGVzQXJyYXlCbG9iSXRlbTo6ZGVlcENvcHkoKSBjb25zdAoreworICAg
IHJldHVybiBCeXRlc0FycmF5QmxvYkl0ZW06OmNyZWF0ZShtX2J5dGVzQXJyYXkuZGF0YSgpLCBt
X2J5dGVzQXJyYXkuc2l6ZSgpKTsKK30KKworI2lmIEVOQUJMRShCTE9CX1NMSUNFKQorCisvLyBE
YXRhUmFuZ2VCbG9iSXRlbSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorCitQYXNzUmVmUHRyPEJsb2JJdGVtPiBEYXRhUmFuZ2VCbG9i
SXRlbTo6Y3JlYXRlKFBhc3NSZWZQdHI8RGF0YUJsb2JJdGVtPiBpdGVtLCBsb25nIGxvbmcgc3Rh
cnQsIGxvbmcgbG9uZyBsZW5ndGgpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKHN0YXRpY19jYXN0
PEJsb2JJdGVtKj4obmV3IERhdGFSYW5nZUJsb2JJdGVtKGl0ZW0sIHN0YXJ0LCBsZW5ndGgpKSk7
Cit9CisKK0RhdGFSYW5nZUJsb2JJdGVtOjpEYXRhUmFuZ2VCbG9iSXRlbShQYXNzUmVmUHRyPERh
dGFCbG9iSXRlbT4gaXRlbSwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoKQorICAg
IDogbV9sZW5ndGgobGVuZ3RoKQoreworICAgIGNvbnN0IERhdGFSYW5nZUJsb2JJdGVtKiByYW5n
ZUl0ZW0gPSBtX2l0ZW0tPnRvRGF0YVJhbmdlQmxvYkl0ZW0oKTsKKyAgICBpZiAocmFuZ2VJdGVt
KSB7CisgICAgICAgIG1faXRlbSA9IHJhbmdlSXRlbS0+bV9pdGVtOworICAgICAgICBtX3N0YXJ0
ID0gc3RhcnQgKyByYW5nZUl0ZW0tPm1fc3RhcnQ7CisgICAgICAgIEFTU0VSVCghbV9pdGVtLT50
b0RhdGFSYW5nZUJsb2JJdGVtKCkpOworICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgbG9uZyBsb25nPihtX3N0YXJ0ICsgbV9sZW5ndGgpIDw9IG1faXRlbS0+c2l6ZSgpKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBtX2l0ZW0gPSBpdGVtOworICAgICAgICBtX3N0YXJ0ID0gc3Rh
cnQ7CisgICAgfQorfQorCitjb25zdCBjaGFyKiBEYXRhUmFuZ2VCbG9iSXRlbTo6ZGF0YSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1faXRlbS0+ZGF0YSgpICsgbV9zdGFydDsKK30KKworUGFzc1Jl
ZlB0cjxCbG9iSXRlbT4gRGF0YVJhbmdlQmxvYkl0ZW06OmRlZXBDb3B5KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gRGF0YVJhbmdlQmxvYkl0ZW06OmNyZWF0ZShzdGF0aWNfcG9pbnRlcl9jYXN0PERh
dGFCbG9iSXRlbT4obV9pdGVtLT5kZWVwQ29weSgpKSwgbV9zdGFydCwgbV9sZW5ndGgpOworfQor
Citib29sIERhdGFSYW5nZUJsb2JJdGVtOjplcXVhbHMoY29uc3QgQmxvYkl0ZW0qIGl0ZW0pIGNv
bnN0Cit7CisgICAgY29uc3QgRGF0YVJhbmdlQmxvYkl0ZW0qIHJhbmdlSXRlbSA9IGl0ZW0tPnRv
RGF0YVJhbmdlQmxvYkl0ZW0oKTsKKyAgICByZXR1cm4gcmFuZ2VJdGVtICYmIG1fc3RhcnQgPT0g
cmFuZ2VJdGVtLT5tX3N0YXJ0ICYmIG1fbGVuZ3RoID09IHJhbmdlSXRlbS0+bV9sZW5ndGggJiYg
bV9pdGVtLT5lcXVhbHMocmFuZ2VJdGVtLT5tX2l0ZW0uZ2V0KCkpOworfQorCisvLyBGaWxlUmFu
Z2VCbG9iSXRlbSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorCitQYXNzUmVmUHRyPEJsb2JJdGVtPiBGaWxlUmFuZ2VCbG9iSXRlbTo6
Y3JlYXRlKGNvbnN0IFN0cmluZyYgcGF0aCwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVu
Z3RoLCBkb3VibGUgc25hcHNob3RNb2RpZmljYXRpb25UaW1lKQoreworICAgIHJldHVybiBhZG9w
dFJlZihzdGF0aWNfY2FzdDxCbG9iSXRlbSo+KG5ldyBGaWxlUmFuZ2VCbG9iSXRlbShwYXRoLCBz
dGFydCwgbGVuZ3RoLCBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUpKSk7Cit9CisKK0ZpbGVSYW5n
ZUJsb2JJdGVtOjpGaWxlUmFuZ2VCbG9iSXRlbShjb25zdCBTdHJpbmcmIHBhdGgsIGxvbmcgbG9u
ZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCwgZG91YmxlIG1vZGlmaWNhdGlvblRpbWUpCisgICAg
OiBGaWxlQmxvYkl0ZW0ocGF0aCkKKyAgICAsIG1fc3RhcnQoc3RhcnQpCisgICAgLCBtX2xlbmd0
aChsZW5ndGgpCisgICAgLCBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZShtb2RpZmljYXRpb25U
aW1lKQoreworICAgIG1fdW5pcXVlTmFtZSA9ICJCbG9iIiArIGNyZWF0ZUNhbm9uaWNhbFVVSURT
dHJpbmcoKTsKKyAgICBtX3VuaXF1ZU5hbWUucmVwbGFjZSgiLSIsICIiKTsgLy8gRm9yIHNhZnR5
LCByZW1vdmUgJy0nIGZyb20gdGhlIGZpbGVuYW1lIHNuY2Ugc29tZSBzZXJ2ZXJzIG1heSBub3Qg
bGlrZSBpdC4KK30KKworUGFzc1JlZlB0cjxCbG9iSXRlbT4gRmlsZVJhbmdlQmxvYkl0ZW06OmRl
ZXBDb3B5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gRmlsZVJhbmdlQmxvYkl0ZW06OmNyZWF0ZShw
YXRoKCksIG1fc3RhcnQsIG1fbGVuZ3RoLCBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZSk7Cit9
CisKK2Jvb2wgRmlsZVJhbmdlQmxvYkl0ZW06OmVxdWFscyhjb25zdCBCbG9iSXRlbSogaXRlbSkg
Y29uc3QKK3sKKyAgICBpZiAoIUZpbGVCbG9iSXRlbTo6ZXF1YWxzKGl0ZW0pKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgY29uc3QgRmlsZVJhbmdlQmxvYkl0ZW0qIHJhbmdlSXRlbSA9IGl0
ZW0tPnRvRmlsZVJhbmdlQmxvYkl0ZW0oKTsKKyAgICByZXR1cm4gcmFuZ2VJdGVtICYmIG1fc3Rh
cnQgPT0gcmFuZ2VJdGVtLT5tX3N0YXJ0ICYmIG1fdW5pcXVlTmFtZSA9PSByYW5nZUl0ZW0tPm1f
dW5pcXVlTmFtZSAmJiBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZSA9PSByYW5nZUl0ZW0tPm1f
c25hcHNob3RNb2RpZmljYXRpb25UaW1lOworfQorCitib29sIEZpbGVSYW5nZUJsb2JJdGVtOjpp
c1ZhbGlkKCkgY29uc3QKK3sKKyAgICBpZiAobV9zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUgPT0g
aW52YWxpZE1vZGlmaWNhdGlvblRpbWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1
cm4gbV9zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUgPT0gZ2V0RmlsZVNuYXBzaG90TW9kaWZpY2F0
aW9uVGltZShwYXRoKCkpOworfQorCisjZW5kaWYgLy8gRU5BQkxFKEJMT0JfU0xJQ0UpCisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vQmxvYkl0
ZW0uaCBiL1dlYkNvcmUvcGxhdGZvcm0vQmxvYkl0ZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kZDE1YWU1MjZk
ODZhYzIyNDk3NWMxNWM3ZTM3ZGEzYTE5YjcxNjllCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9CbG9iSXRlbS5oCkBAIC0wLDAgKzEsMjIyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEwIEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24u
CisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQmxvYkl0ZW1f
aAorI2RlZmluZSBCbG9iSXRlbV9oCisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2lu
Y2x1ZGUgIlRleHRFbmNvZGluZy5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCisvLyBTdHJpbmcgZW5kaW5nIHR5cGVzLgorZW51bSBFbmRpbmdUeXBl
IHsKKyAgICBFbmRpbmdUcmFuc3BhcmVudCA9IDAsCisgICAgRW5kaW5nTEYsCisgICAgRW5kaW5n
Q1IsCisgICAgRW5kaW5nQ1JMRiwKK307CisKK2NsYXNzIEJ5dGVzQXJyYXlCbG9iSXRlbTsKK2Ns
YXNzIERhdGFCbG9iSXRlbTsKK2NsYXNzIERhdGFSYW5nZUJsb2JJdGVtOworY2xhc3MgRmlsZUJs
b2JJdGVtOworY2xhc3MgRmlsZVJhbmdlQmxvYkl0ZW07CitjbGFzcyBTdHJpbmdCbG9iSXRlbTsK
KworLy8gQSBiYXNlIGludGVyZmFjZSBmb3IgYWxsIGFyYml0cmFyeS1kYXRhLW9iamVjdCBjb21w
b25lbnQgaXRlbXMuCisvLyBUaGUgQmxvYkl0ZW0gYW5kIGl0cyBzdWJjbGFzc2VzIGFyZSBzdHJ1
Y3R1cmVkIGxpa2UgdGhlIGZvbGxvd2luZzoKKy8vICAgIEJsb2JJdGVtCisvLyAgICAgICB8Cisv
LyAgICAgICArLS0tLS0tLT4gRGF0YUJsb2JJdGVtCisvLyAgICAgICB8ICAgICAgICAgICAgICB8
CisvLyAgICAgICB8ICAgICAgICAgICAgICArLS0tLS0tLS0tPiBTdHJpbmdCbG9iSXRlbQorLy8g
ICAgICAgfCAgICAgICAgICAgICAgKy0tLS0tLS0tLT4gQnl0ZUFycmF5QmxvYkl0ZW0KKy8vICAg
ICAgIHwgICAgICAgICAgICAgICstLS0tLS0tLS0+IERhdGFSYW5nZUJsb2JJdGVtCisvLyAgICAg
ICB8CisvLyAgICAgICArLS0tLS0tLT4gRmlsZUJsb2JJdGVtCisvLyAgICAgICAgICAgICAgICAg
ICAgICB8CisvLyAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tPiBGaWxlUmFuZ2VCbG9i
SXRlbQorLy8KK2NsYXNzIEJsb2JJdGVtIDogcHVibGljIFJlZkNvdW50ZWQ8QmxvYkl0ZW0+IHsK
K3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5CbG9iSXRlbSgpIHsgfQorICAgIHZpcnR1YWwgdW5zaWdu
ZWQgbG9uZyBsb25nIHNpemUoKSBjb25zdCA9IDA7CisKKyAgICAvLyBSZXR1cm5zIGZhbHNlIGlm
IHRoZSBkYXRhIGhhcyBiZWNvbWUgc3RhbGUgb3IgaW52YWxpZC4KKyAgICB2aXJ0dWFsIGJvb2wg
aXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKworICAgIHZpcnR1YWwgY29uc3QgRGF0
YUJsb2JJdGVtKiB0b0RhdGFCbG9iSXRlbSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0
dWFsIGNvbnN0IFN0cmluZ0Jsb2JJdGVtKiB0b1N0cmluZ0Jsb2JJdGVtKCkgY29uc3QgeyByZXR1
cm4gMDsgfQorICAgIHZpcnR1YWwgY29uc3QgQnl0ZXNBcnJheUJsb2JJdGVtKiB0b0J5dGVzQXJy
YXlCbG9iSXRlbSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IEZpbGVC
bG9iSXRlbSogdG9GaWxlQmxvYkl0ZW0oKSBjb25zdCB7IHJldHVybiAwOyB9CisjaWYgRU5BQkxF
KEJMT0JfU0xJQ0UpCisgICAgdmlydHVhbCBjb25zdCBEYXRhUmFuZ2VCbG9iSXRlbSogdG9EYXRh
UmFuZ2VCbG9iSXRlbSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IEZp
bGVSYW5nZUJsb2JJdGVtKiB0b0ZpbGVSYW5nZUJsb2JJdGVtKCkgY29uc3QgeyByZXR1cm4gMDsg
fQorCisgICAgLy8gTm8gZXh0ZXJuYWwgbWV0aG9kcyBleGNlcHQgZm9yIEJsb2I6OnNsaWNlIHNo
b3VsZCBjYWxsIHRoaXMuCisgICAgUGFzc1JlZlB0cjxCbG9iSXRlbT4gc2xpY2UobG9uZyBsb25n
IHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoKTsKKyNlbmRpZiAvLyBFTkFCTEUoQkxPQl9TTElDRSkK
KworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxCbG9iSXRlbT4gZGVlcENvcHkoKSBjb25zdCA9IDA7
CisgICAgdmlydHVhbCBib29sIGVxdWFscyhjb25zdCBCbG9iSXRlbSopIGNvbnN0ID0gMDsKKwor
cHJvdGVjdGVkOgorICAgIEJsb2JJdGVtKCkgeyB9Cit9OworCit0eXBlZGVmIFZlY3RvcjxSZWZQ
dHI8QmxvYkl0ZW0+ID4gQmxvYkl0ZW1MaXN0OworCitjbGFzcyBEYXRhQmxvYkl0ZW0gOiBwdWJs
aWMgQmxvYkl0ZW0geworcHVibGljOgorICAgIHZpcnR1YWwgY29uc3QgY2hhciogZGF0YSgpIGNv
bnN0ID0gMDsKKyAgICBjaGFyKiBkZWVwQ29weUJ1ZmZlcigpIGNvbnN0OworCisgICAgLy8gQmxv
Ykl0ZW0gbWV0aG9kcy4KKyAgICB2aXJ0dWFsIGNvbnN0IERhdGFCbG9iSXRlbSogdG9EYXRhQmxv
Ykl0ZW0oKSBjb25zdCB7IHJldHVybiB0aGlzOyB9CisgICAgdmlydHVhbCBib29sIGVxdWFscyhj
b25zdCBCbG9iSXRlbSopIGNvbnN0OworfTsKKworY2xhc3MgRmlsZUJsb2JJdGVtIDogcHVibGlj
IEJsb2JJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCbG9iSXRlbT4gY3Jl
YXRlKGNvbnN0IFN0cmluZyYgcGF0aCk7CisgICAgdmlydHVhbCBjb25zdCBTdHJpbmcmIG5hbWUo
KSBjb25zdCB7IHJldHVybiBtX2ZpbGVOYW1lOyB9CisgICAgdmlydHVhbCBjb25zdCBTdHJpbmcm
IHBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0KKworICAgIC8vIEJsb2JJdGVtIG1ldGhv
ZHMuCisgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSgpIGNvbnN0OworICAgIHZp
cnR1YWwgY29uc3QgRmlsZUJsb2JJdGVtKiB0b0ZpbGVCbG9iSXRlbSgpIGNvbnN0IHsgcmV0dXJu
IHRoaXM7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0OworICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxCbG9iSXRlbT4gZGVlcENvcHkoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wg
ZXF1YWxzKGNvbnN0IEJsb2JJdGVtKikgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICBGaWxlQmxv
Ykl0ZW0oY29uc3QgU3RyaW5nJiBwYXRoKTsKKyAgICBTdHJpbmcgbV9wYXRoOworICAgIFN0cmlu
ZyBtX2ZpbGVOYW1lOworfTsKKworY2xhc3MgU3RyaW5nQmxvYkl0ZW0gOiBwdWJsaWMgRGF0YUJs
b2JJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCbG9iSXRlbT4gY3JlYXRl
KGNvbnN0IFN0cmluZyYsIEVuZGluZ1R5cGUsIFRleHRFbmNvZGluZyk7CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8QmxvYkl0ZW0+IGNyZWF0ZShjb25zdCBDU3RyaW5nJik7CisgICAgY29uc3QgQ1N0
cmluZyYgY3N0cigpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsgfQorCisgICAgLy8gQmxvYkl0ZW0g
bWV0aG9kcy4KKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9kYXRhLmxlbmd0aCgpOyB9CisgICAgdmlydHVhbCBjb25zdCBTdHJpbmdCbG9iSXRl
bSogdG9TdHJpbmdCbG9iSXRlbSgpIGNvbnN0IHsgcmV0dXJuIHRoaXM7IH0KKyAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8QmxvYkl0ZW0+IGRlZXBDb3B5KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29s
IGVxdWFscyhjb25zdCBCbG9iSXRlbSopIGNvbnN0OworCisgICAgLy8gRGF0YUJsb2JJdGVtIG1l
dGhvZHMuCisgICAgdmlydHVhbCBjb25zdCBjaGFyKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9k
YXRhLmRhdGEoKTsgfQorCitwcml2YXRlOgorICAgIFN0cmluZ0Jsb2JJdGVtKGNvbnN0IFN0cmlu
ZyYsIEVuZGluZ1R5cGUsIFRleHRFbmNvZGluZyk7CisgICAgU3RyaW5nQmxvYkl0ZW0oY29uc3Qg
Q1N0cmluZyYpOworICAgIHN0YXRpYyBDU3RyaW5nIGNvbnZlcnRUb0NTdHJpbmcoY29uc3QgU3Ry
aW5nJiwgRW5kaW5nVHlwZSwgVGV4dEVuY29kaW5nKTsKKyAgICBDU3RyaW5nIG1fZGF0YTsKK307
CisKK2NsYXNzIEJ5dGVzQXJyYXlCbG9iSXRlbSA6IHB1YmxpYyBEYXRhQmxvYkl0ZW0geworcHVi
bGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJsb2JJdGVtPiBjcmVhdGUoY29uc3QgY2hhciog
ZGF0YSwgc2l6ZV90IHNpemUpOworCisgICAgLy8gQmxvYkl0ZW0gbWV0aG9kcy4KKyAgICB2aXJ0
dWFsIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlc0FycmF5
LnNpemUoKTsgfQorICAgIHZpcnR1YWwgY29uc3QgQnl0ZXNBcnJheUJsb2JJdGVtKiB0b0J5dGVz
QXJyYXlCbG9iSXRlbSgpIGNvbnN0IHsgcmV0dXJuIHRoaXM7IH0KKyAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8QmxvYkl0ZW0+IGRlZXBDb3B5KCkgY29uc3Q7CisKKyAgICAvLyBEYXRhQmxvYkl0ZW0g
bWV0aG9kcy4KKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGRhdGEoKSBjb25zdCB7IHJldHVybiBt
X2J5dGVzQXJyYXkuZGF0YSgpOyB9CisKK3ByaXZhdGU6CisgICAgQnl0ZXNBcnJheUJsb2JJdGVt
KGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBzaXplKTsKKyAgICBWZWN0b3I8Y2hhcj4gbV9ieXRl
c0FycmF5OworfTsKKworI2lmIEVOQUJMRShCTE9CX1NMSUNFKQorCisvLyBCbG9iSXRlbSBjbGFz
cyBmb3Igc2xpY2VkIGRhdGEgKHN0cmluZyBvciBieXRlcy1hcnJheSkuCitjbGFzcyBEYXRhUmFu
Z2VCbG9iSXRlbSA6IHB1YmxpYyBEYXRhQmxvYkl0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEJsb2JJdGVtPiBjcmVhdGUoUGFzc1JlZlB0cjxEYXRhQmxvYkl0ZW0+LCBsb25n
IGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgpOworCisgICAgLy8gQmxvYkl0ZW0gbWV0aG9k
cy4KKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplKCkgY29uc3QgeyByZXR1cm4g
bV9sZW5ndGg7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IERhdGFSYW5nZUJsb2JJdGVtKiB0b0RhdGFS
YW5nZUJsb2JJdGVtKCkgY29uc3QgeyByZXR1cm4gdGhpczsgfQorICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxCbG9iSXRlbT4gZGVlcENvcHkoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZXF1YWxz
KGNvbnN0IEJsb2JJdGVtKikgY29uc3Q7CisKKyAgICAvLyBEYXRhQmxvYkl0ZW0gbWV0aG9kcy4K
KyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGRhdGEoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBE
YXRhUmFuZ2VCbG9iSXRlbShQYXNzUmVmUHRyPERhdGFCbG9iSXRlbT4sIGxvbmcgbG9uZyBzdGFy
dCwgbG9uZyBsb25nIGxlbmd0aCk7CisgICAgUmVmUHRyPERhdGFCbG9iSXRlbT4gbV9pdGVtOwor
ICAgIGxvbmcgbG9uZyBtX3N0YXJ0OworICAgIGxvbmcgbG9uZyBtX2xlbmd0aDsKK307CisKK2Ns
YXNzIEZpbGVSYW5nZUJsb2JJdGVtIDogcHVibGljIEZpbGVCbG9iSXRlbSB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8QmxvYkl0ZW0+IGNyZWF0ZShjb25zdCBTdHJpbmcmIHBhdGgs
IGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCwgZG91YmxlIHNuYXBzaG90TW9kaWZp
Y2F0aW9uVGltZSk7CisgICAgbG9uZyBsb25nIHN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbV9zdGFy
dDsgfQorICAgIGRvdWJsZSBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUoKSBjb25zdCB7IHJldHVy
biBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZTsgfQorCisgICAgLy8gQmxvYkl0ZW0gbWV0aG9k
cy4KKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplKCkgY29uc3QgeyByZXR1cm4g
bV9sZW5ndGg7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IEZpbGVSYW5nZUJsb2JJdGVtKiB0b0ZpbGVS
YW5nZUJsb2JJdGVtKCkgY29uc3QgeyByZXR1cm4gdGhpczsgfQorICAgIHZpcnR1YWwgYm9vbCBp
c1ZhbGlkKCkgY29uc3Q7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEJsb2JJdGVtPiBkZWVwQ29w
eSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBlcXVhbHMoY29uc3QgQmxvYkl0ZW0qKSBjb25z
dDsKKworICAgIC8vIEZpbGVCbG9iSXRlbSBtZXRob2RzLgorICAgIHZpcnR1YWwgY29uc3QgU3Ry
aW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV91bmlxdWVOYW1lOyB9CisKK3ByaXZhdGU6Cisg
ICAgRmlsZVJhbmdlQmxvYkl0ZW0oY29uc3QgU3RyaW5nJiBwYXRoLCBsb25nIGxvbmcgc3RhcnQs
IGxvbmcgbG9uZyBsZW5ndGgsIGRvdWJsZSBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUpOworICAg
IGxvbmcgbG9uZyBtX3N0YXJ0OworICAgIGxvbmcgbG9uZyBtX2xlbmd0aDsKKyAgICBTdHJpbmcg
bV91bmlxdWVOYW1lOworCisgICAgZG91YmxlIG1fc25hcHNob3RNb2RpZmljYXRpb25UaW1lOwor
fTsKKworI2VuZGlmIC8vIEVOQUJMRShCTE9CX1NMSUNFKQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBCbG9iSXRlbV9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvRm9ybURhdGEuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRh
LmNwcAppbmRleCA5MTgwMDJhZWZkODFhNjg5MWY5ZjE5YmFmNDRkNzU1OTFmZGZhNDg0Li4zODdj
MGY2YzE5ZmI2YjMzOGY5OGYxYjcwM2NmMDBlYWIxMzRmMGJkIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9Gb3JtRGF0YS5jcHAKQEAgLTE5LDIzICsxOSw0NiBAQAogICovCiAKICNpbmNsdWRlICJj
b25maWcuaCIKKwogI2luY2x1ZGUgIkZvcm1EYXRhLmgiCiAKLSNpbmNsdWRlICJCbG9iLmgiCisj
aW5jbHVkZSAiQmxvYkl0ZW0uaCIKICNpbmNsdWRlICJDaHJvbWUuaCIKICNpbmNsdWRlICJDaHJv
bWVDbGllbnQuaCIKLSNpbmNsdWRlICJET01Gb3JtRGF0YS5oIgogI2luY2x1ZGUgIkRvY3VtZW50
LmgiCi0jaW5jbHVkZSAiRmlsZS5oIgogI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKICNpbmNsdWRl
ICJGb3JtRGF0YUJ1aWxkZXIuaCIKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAjaW5j
bHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgotI2luY2x1ZGUgIlVVSUQu
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCitjb25z
dCBsb25nIGxvbmcgRm9ybURhdGFFbGVtZW50Ojp0b0VuZE9mRmlsZSA9IC0xOworI2VuZGlmCisK
K0Zvcm1EYXRhRWxlbWVudDo6Rm9ybURhdGFFbGVtZW50KFBhc3NSZWZQdHI8QmxvYkl0ZW0+IGJs
b2JJdGVtLCBib29sIHNob3VsZEdlbmVyYXRlRmlsZSkKKyAgICA6IG1faXRlbShibG9iSXRlbSkK
KyAgICAsIG1fdHlwZShtX2l0ZW0tPnRvRmlsZUJsb2JJdGVtKCkgPyBlbmNvZGVkRmlsZSA6IGRh
dGEpCisgICAgLCBtX2RhdGEobV9pdGVtLT50b0RhdGFCbG9iSXRlbSgpKQorICAgICwgbV9maWxl
bmFtZShtX2l0ZW0tPnRvRmlsZUJsb2JJdGVtKCkgPyBtX2l0ZW0tPnRvRmlsZUJsb2JJdGVtKCkt
PnBhdGgoKSA6IFN0cmluZygpKQorICAgICwgbV9zaG91bGRHZW5lcmF0ZUZpbGUoc2hvdWxkR2Vu
ZXJhdGVGaWxlKQoreworI2lmIEVOQUJMRShCTE9CX1NMSUNFKQorICAgIGNvbnN0IEZpbGVSYW5n
ZUJsb2JJdGVtKiBmaWxlUmFuZ2VJdGVtID0gbV9pdGVtLT50b0ZpbGVSYW5nZUJsb2JJdGVtKCk7
CisgICAgaWYgKGZpbGVSYW5nZUl0ZW0pIHsKKyAgICAgICAgbV9maWxlU3RhcnQgPSBmaWxlUmFu
Z2VJdGVtLT5zdGFydCgpOworICAgICAgICBtX2ZpbGVMZW5ndGggPSBmaWxlUmFuZ2VJdGVtLT5z
aXplKCk7CisgICAgICAgIG1fZXhwZWN0ZWRGaWxlTW9kaWZpY2F0aW9uVGltZSA9IGZpbGVSYW5n
ZUl0ZW0tPnNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSgpOworICAgIH0gZWxzZSB7CisgICAgICAg
IG1fZmlsZVN0YXJ0ID0gMDsKKyAgICAgICAgbV9maWxlTGVuZ3RoID0gdG9FbmRPZkZpbGU7Cisg
ICAgICAgIG1fZXhwZWN0ZWRGaWxlTW9kaWZpY2F0aW9uVGltZSA9IDA7CisgICAgfQorI2VuZGlm
Cit9CisKIGlubGluZSBGb3JtRGF0YTo6Rm9ybURhdGEoKQogICAgIDogbV9pZGVudGlmaWVyKDAp
CiAgICAgLCBtX2hhc0dlbmVyYXRlZEZpbGVzKGZhbHNlKQpAQCAtODUsNyArMTA4LDcgQEAgUGFz
c1JlZlB0cjxGb3JtRGF0YT4gRm9ybURhdGE6OmNyZWF0ZShjb25zdCB2b2lkKiBkYXRhLCBzaXpl
X3Qgc2l6ZSkKIFBhc3NSZWZQdHI8Rm9ybURhdGE+IEZvcm1EYXRhOjpjcmVhdGUoY29uc3QgQ1N0
cmluZyYgc3RyaW5nKQogewogICAgIFJlZlB0cjxGb3JtRGF0YT4gcmVzdWx0ID0gY3JlYXRlKCk7
Ci0gICAgcmVzdWx0LT5hcHBlbmREYXRhKHN0cmluZy5kYXRhKCksIHN0cmluZy5sZW5ndGgoKSk7
CisgICAgcmVzdWx0LT5hcHBlbmRTdHJpbmcoc3RyaW5nKTsKICAgICByZXR1cm4gcmVzdWx0LnJl
bGVhc2UoKTsKIH0KIApAQCAtOTYsMTcgKzExOSwxNyBAQCBQYXNzUmVmUHRyPEZvcm1EYXRhPiBG
b3JtRGF0YTo6Y3JlYXRlKGNvbnN0IFZlY3RvcjxjaGFyPiYgdmVjdG9yKQogICAgIHJldHVybiBy
ZXN1bHQucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPEZvcm1EYXRhPiBGb3JtRGF0YTo6Y3Jl
YXRlKGNvbnN0IERPTUZvcm1EYXRhJiBkb21Gb3JtRGF0YSkKK1Bhc3NSZWZQdHI8Rm9ybURhdGE+
IEZvcm1EYXRhOjpjcmVhdGUoY29uc3QgQmxvYkl0ZW1MaXN0JiBpdGVtcywgY29uc3QgVGV4dEVu
Y29kaW5nJiBlbmNvZGluZykKIHsKICAgICBSZWZQdHI8Rm9ybURhdGE+IHJlc3VsdCA9IGNyZWF0
ZSgpOwotICAgIHJlc3VsdC0+YXBwZW5kRE9NRm9ybURhdGEoZG9tRm9ybURhdGEsIGZhbHNlLCAw
KTsKKyAgICByZXN1bHQtPmFwcGVuZEl0ZW1zKGl0ZW1zLCBlbmNvZGluZywgZmFsc2UsIDApOwog
ICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPEZvcm1EYXRhPiBG
b3JtRGF0YTo6Y3JlYXRlTXVsdGlQYXJ0KGNvbnN0IERPTUZvcm1EYXRhJiBkb21Gb3JtRGF0YSwg
RG9jdW1lbnQqIGRvY3VtZW50KQorUGFzc1JlZlB0cjxGb3JtRGF0YT4gRm9ybURhdGE6OmNyZWF0
ZU11bHRpUGFydChjb25zdCBCbG9iSXRlbUxpc3QmIGl0ZW1zLCBjb25zdCBUZXh0RW5jb2Rpbmcm
IGVuY29kaW5nLCBEb2N1bWVudCogZG9jdW1lbnQpCiB7CiAgICAgUmVmUHRyPEZvcm1EYXRhPiBy
ZXN1bHQgPSBjcmVhdGUoKTsKLSAgICByZXN1bHQtPmFwcGVuZERPTUZvcm1EYXRhKGRvbUZvcm1E
YXRhLCB0cnVlLCBkb2N1bWVudCk7CisgICAgcmVzdWx0LT5hcHBlbmRJdGVtcyhpdGVtcywgZW5j
b2RpbmcsIHRydWUsIGRvY3VtZW50KTsKICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0K
IApAQCAtMTI1LDg0ICsxNDgsNjggQEAgUGFzc1JlZlB0cjxGb3JtRGF0YT4gRm9ybURhdGE6OmRl
ZXBDb3B5KCkgY29uc3QKICAgICBmb3JtRGF0YS0+bV9lbGVtZW50cy5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KG4pOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbjsgKytpKSB7CiAgICAgICAg
IGNvbnN0IEZvcm1EYXRhRWxlbWVudCYgZSA9IG1fZWxlbWVudHNbaV07Ci0gICAgICAgIHN3aXRj
aCAoZS5tX3R5cGUpIHsKLSAgICAgICAgY2FzZSBGb3JtRGF0YUVsZW1lbnQ6OmRhdGE6Ci0gICAg
ICAgICAgICBmb3JtRGF0YS0+bV9lbGVtZW50cy5hcHBlbmQoRm9ybURhdGFFbGVtZW50KGUubV9k
YXRhKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBGb3JtRGF0YUVsZW1lbnQ6
OmVuY29kZWRGaWxlOgotI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgICAgICAgICAgZm9ybURh
dGEtPm1fZWxlbWVudHMuYXBwZW5kKEZvcm1EYXRhRWxlbWVudChlLm1fZmlsZW5hbWUsIGUubV9m
aWxlU3RhcnQsIGUubV9maWxlTGVuZ3RoLCBlLm1fZXhwZWN0ZWRGaWxlTW9kaWZpY2F0aW9uVGlt
ZSwgZS5tX3Nob3VsZEdlbmVyYXRlRmlsZSkpOwotI2Vsc2UKLSAgICAgICAgICAgIGZvcm1EYXRh
LT5tX2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVsZW1lbnQoZS5tX2ZpbGVuYW1lLCBlLm1fc2hv
dWxkR2VuZXJhdGVGaWxlKSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
CisgICAgICAgIGZvcm1EYXRhLT5tX2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVsZW1lbnQoZS5p
dGVtKCktPmRlZXBDb3B5KCksIGUubV9zaG91bGRHZW5lcmF0ZUZpbGUpKTsKICAgICB9CiAgICAg
cmV0dXJuIGZvcm1EYXRhLnJlbGVhc2UoKTsKIH0KIAogdm9pZCBGb3JtRGF0YTo6YXBwZW5kRGF0
YShjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSkKIHsKLSAgICBpZiAobV9lbGVtZW50cy5p
c0VtcHR5KCkgfHwgbV9lbGVtZW50cy5sYXN0KCkubV90eXBlICE9IEZvcm1EYXRhRWxlbWVudDo6
ZGF0YSkKLSAgICAgICAgbV9lbGVtZW50cy5hcHBlbmQoRm9ybURhdGFFbGVtZW50KCkpOwotICAg
IEZvcm1EYXRhRWxlbWVudCYgZSA9IG1fZWxlbWVudHMubGFzdCgpOwotICAgIHNpemVfdCBvbGRT
aXplID0gZS5tX2RhdGEuc2l6ZSgpOwotICAgIGUubV9kYXRhLmdyb3cob2xkU2l6ZSArIHNpemUp
OwotICAgIG1lbWNweShlLm1fZGF0YS5kYXRhKCkgKyBvbGRTaXplLCBkYXRhLCBzaXplKTsKKyAg
ICBtX2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVsZW1lbnQoQnl0ZXNBcnJheUJsb2JJdGVtOjpj
cmVhdGUoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEpLCBzaXplKSkpOworfQorCit2b2lk
IEZvcm1EYXRhOjphcHBlbmRTdHJpbmcoY29uc3QgQ1N0cmluZyYgc3RyaW5nKQoreworICAgIG1f
ZWxlbWVudHMuYXBwZW5kKEZvcm1EYXRhRWxlbWVudChTdHJpbmdCbG9iSXRlbTo6Y3JlYXRlKHN0
cmluZykpKTsKIH0KIAogdm9pZCBGb3JtRGF0YTo6YXBwZW5kRmlsZShjb25zdCBTdHJpbmcmIGZp
bGVuYW1lLCBib29sIHNob3VsZEdlbmVyYXRlRmlsZSkKIHsKLSNpZiBFTkFCTEUoQkxPQl9TTElD
RSkKLSAgICBtX2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVsZW1lbnQoZmlsZW5hbWUsIDAsIEJs
b2I6OnRvRW5kT2ZGaWxlLCBCbG9iOjpkb05vdENoZWNrRmlsZUNoYW5nZSwgc2hvdWxkR2VuZXJh
dGVGaWxlKSk7Ci0jZWxzZQotICAgIG1fZWxlbWVudHMuYXBwZW5kKEZvcm1EYXRhRWxlbWVudChm
aWxlbmFtZSwgc2hvdWxkR2VuZXJhdGVGaWxlKSk7Ci0jZW5kaWYKKyAgICBtX2VsZW1lbnRzLmFw
cGVuZChGb3JtRGF0YUVsZW1lbnQoRmlsZUJsb2JJdGVtOjpjcmVhdGUoZmlsZW5hbWUpLCBzaG91
bGRHZW5lcmF0ZUZpbGUpKTsKK30KKwordm9pZCBGb3JtRGF0YTo6YXBwZW5kQmxvYkl0ZW1MaXN0
KGNvbnN0IEJsb2JJdGVtTGlzdCYgbGlzdCkKK3sKKyAgICBmb3IgKEJsb2JJdGVtTGlzdDo6Y29u
c3RfaXRlcmF0b3IgaXRlcihsaXN0LmJlZ2luKCkpOyBpdGVyICE9IGxpc3QuZW5kKCk7ICsraXRl
cikKKyAgICAgICAgbV9lbGVtZW50cy5hcHBlbmQoKml0ZXIpOwogfQogCiAjaWYgRU5BQkxFKEJM
T0JfU0xJQ0UpCiB2b2lkIEZvcm1EYXRhOjphcHBlbmRGaWxlUmFuZ2UoY29uc3QgU3RyaW5nJiBm
aWxlbmFtZSwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoLCBkb3VibGUgZXhwZWN0
ZWRNb2RpZmljYXRpb25UaW1lLCBib29sIHNob3VsZEdlbmVyYXRlRmlsZSkKIHsKLSAgICBtX2Vs
ZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVsZW1lbnQoZmlsZW5hbWUsIHN0YXJ0LCBsZW5ndGgsIGV4
cGVjdGVkTW9kaWZpY2F0aW9uVGltZSwgc2hvdWxkR2VuZXJhdGVGaWxlKSk7CisgICAgaWYgKGxl
bmd0aCA9PSBGb3JtRGF0YUVsZW1lbnQ6OnRvRW5kT2ZGaWxlKSB7CisgICAgICAgIEFTU0VSVCgh
c3RhcnQpOworICAgICAgICBBU1NFUlQoIWV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZSk7CisgICAg
ICAgIG1fZWxlbWVudHMuYXBwZW5kKEZvcm1EYXRhRWxlbWVudChGaWxlQmxvYkl0ZW06OmNyZWF0
ZShmaWxlbmFtZSksIHNob3VsZEdlbmVyYXRlRmlsZSkpOworICAgIH0gZWxzZQorICAgICAgICBt
X2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVsZW1lbnQoRmlsZVJhbmdlQmxvYkl0ZW06OmNyZWF0
ZShmaWxlbmFtZSwgc3RhcnQsIGxlbmd0aCwgZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lKSwgc2hv
dWxkR2VuZXJhdGVGaWxlKSk7CiB9CiAjZW5kaWYKIAotdm9pZCBGb3JtRGF0YTo6YXBwZW5kRE9N
Rm9ybURhdGEoY29uc3QgRE9NRm9ybURhdGEmIGRvbUZvcm1EYXRhLCBib29sIGlzTXVsdGlQYXJ0
Rm9ybSwgRG9jdW1lbnQqIGRvY3VtZW50KQordm9pZCBGb3JtRGF0YTo6YXBwZW5kSXRlbXMoY29u
c3QgQmxvYkl0ZW1MaXN0JiBpdGVtcywgY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZywgYm9v
bCBpc011bHRpUGFydEZvcm0sIERvY3VtZW50KiBkb2N1bWVudCkKIHsKICAgICBGb3JtRGF0YUJ1
aWxkZXIgZm9ybURhdGFCdWlsZGVyOwogICAgIGlmIChpc011bHRpUGFydEZvcm0pCiAgICAgICAg
IG1fYm91bmRhcnkgPSBmb3JtRGF0YUJ1aWxkZXIuZ2VuZXJhdGVVbmlxdWVCb3VuZGFyeVN0cmlu
ZygpOwogCiAgICAgVmVjdG9yPGNoYXI+IGVuY29kZWREYXRhOwotICAgIFRleHRFbmNvZGluZyBl
bmNvZGluZyA9IGRvbUZvcm1EYXRhLmVuY29kaW5nKCk7CiAKLSAgICBjb25zdCBWZWN0b3I8Rm9y
bURhdGFMaXN0OjpJdGVtPiYgbGlzdCA9IGRvbUZvcm1EYXRhLmxpc3QoKTsKLSAgICBzaXplX3Qg
Zm9ybURhdGFMaXN0U2l6ZSA9IGxpc3Quc2l6ZSgpOworICAgIHNpemVfdCBmb3JtRGF0YUxpc3RT
aXplID0gaXRlbXMuc2l6ZSgpOwogICAgIEFTU0VSVCghKGZvcm1EYXRhTGlzdFNpemUgJSAyKSk7
CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmb3JtRGF0YUxpc3RTaXplOyBpICs9IDIpIHsK
LSAgICAgICAgY29uc3QgRm9ybURhdGFMaXN0OjpJdGVtJiBrZXkgPSBsaXN0W2ldOwotICAgICAg
ICBjb25zdCBGb3JtRGF0YUxpc3Q6Okl0ZW0mIHZhbHVlID0gbGlzdFtpICsgMV07CisgICAgICAg
IGNvbnN0IFN0cmluZ0Jsb2JJdGVtKiBrZXkgPSBpdGVtc1tpXS0+dG9TdHJpbmdCbG9iSXRlbSgp
OworICAgICAgICBjb25zdCBSZWZQdHI8QmxvYkl0ZW0+IHZhbHVlID0gaXRlbXNbaSArIDFdOwor
ICAgICAgICBBU1NFUlQoa2V5KTsKICAgICAgICAgaWYgKGlzTXVsdGlQYXJ0Rm9ybSkgewogICAg
ICAgICAgICAgVmVjdG9yPGNoYXI+IGhlYWRlcjsKLSAgICAgICAgICAgIGZvcm1EYXRhQnVpbGRl
ci5iZWdpbk11bHRpUGFydEhlYWRlcihoZWFkZXIsIG1fYm91bmRhcnkuZGF0YSgpLCBrZXkuZGF0
YSgpKTsKKyAgICAgICAgICAgIGZvcm1EYXRhQnVpbGRlci5iZWdpbk11bHRpUGFydEhlYWRlciho
ZWFkZXIsIG1fYm91bmRhcnkuZGF0YSgpLCBrZXktPmNzdHIoKSk7CiAKICAgICAgICAgICAgIGJv
b2wgc2hvdWxkR2VuZXJhdGVGaWxlID0gZmFsc2U7CiAgICAgICAgICAgICAvLyBJZiB0aGUgY3Vy
cmVudCB0eXBlIGlzIEZJTEUsIHRoZW4gd2UgYWxzbyBuZWVkIHRvIGluY2x1ZGUgdGhlIGZpbGVu
YW1lCi0gICAgICAgICAgICBpZiAodmFsdWUuYmxvYigpKSB7Ci0gICAgICAgICAgICAgICAgY29u
c3QgU3RyaW5nJiBwYXRoID0gdmFsdWUuYmxvYigpLT5wYXRoKCk7Ci0jaWYgRU5BQkxFKEJMT0Jf
U0xJQ0UpCi0gICAgICAgICAgICAgICAgU3RyaW5nIGZpbGVOYW1lOwotICAgICAgICAgICAgICAg
IGlmICh2YWx1ZS5ibG9iKCktPmlzRmlsZSgpKQotICAgICAgICAgICAgICAgICAgICBmaWxlTmFt
ZSA9IHN0YXRpY19jYXN0PEZpbGUqPih2YWx1ZS5ibG9iKCkpLT5maWxlTmFtZSgpOwotICAgICAg
ICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvLyBJZiBhIGJsb2IgaXMgc2xp
Y2VkIGZyb20gYSBmaWxlLCBpdCBkb2VzIG5vdCBoYXZlIHRoZSBmaWxlbmFtZS4gSW4gdGhpcyBj
YXNlLCBsZXQncyBwcm9kdWNlIGEgdW5pcXVlIGZpbGVuYW1lLgotICAgICAgICAgICAgICAgICAg
ICBmaWxlTmFtZSA9ICJCbG9iIiArIGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKTsKLSAgICAg
ICAgICAgICAgICAgICAgZmlsZU5hbWUucmVwbGFjZSgiLSIsICIiKTsgLy8gRm9yIHNhZnR5LCBy
ZW1vdmUgJy0nIGZyb20gdGhlIGZpbGVuYW1lIHNuY2Ugc29tZSBzZXJ2ZXJzIG1heSBub3QgbGlr
ZSBpdC4KLSAgICAgICAgICAgICAgICB9Ci0jZWxzZQotICAgICAgICAgICAgICAgIEFTU0VSVCh2
YWx1ZS5ibG9iKCktPmlzRmlsZSgpKTsKLSAgICAgICAgICAgICAgICBTdHJpbmcgZmlsZU5hbWUg
PSBzdGF0aWNfY2FzdDxGaWxlKj4odmFsdWUuYmxvYigpKS0+ZmlsZU5hbWUoKTsKLSNlbmRpZgor
ICAgICAgICAgICAgY29uc3QgRmlsZUJsb2JJdGVtKiBmaWxlSXRlbSA9IHZhbHVlLT50b0ZpbGVC
bG9iSXRlbSgpOworICAgICAgICAgICAgaWYgKGZpbGVJdGVtKSB7CisgICAgICAgICAgICAgICAg
Y29uc3QgU3RyaW5nJiBwYXRoID0gZmlsZUl0ZW0tPnBhdGgoKTsKKyAgICAgICAgICAgICAgICBT
dHJpbmcgZmlsZU5hbWUgPSBmaWxlSXRlbS0+bmFtZSgpOwogCiAgICAgICAgICAgICAgICAgLy8g
TGV0IHRoZSBhcHBsaWNhdGlvbiBzcGVjaWZ5IGEgZmlsZW5hbWUgaWYgaXQncyBnb2luZyB0byBn
ZW5lcmF0ZSBhIHJlcGxhY2VtZW50IGZpbGUgZm9yIHRoZSB1cGxvYWQuCiAgICAgICAgICAgICAg
ICAgaWYgKCFwYXRoLmlzRW1wdHkoKSkgewpAQCAtMjE3LDkgKzIyNCw5IEBAIHZvaWQgRm9ybURh
dGE6OmFwcGVuZERPTUZvcm1EYXRhKGNvbnN0IERPTUZvcm1EYXRhJiBkb21Gb3JtRGF0YSwgYm9v
bCBpc011bHRpUGFyCiAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBpbmNsdWRlIHRoZSBm
aWxlbmFtZT0iLi4iIHBhcnQgaW4gdGhlIGhlYWRlciwgZXZlbiBpZiB0aGUgZmlsZW5hbWUgaXMg
ZW1wdHkKICAgICAgICAgICAgICAgICBmb3JtRGF0YUJ1aWxkZXIuYWRkRmlsZW5hbWVUb011bHRp
UGFydEhlYWRlcihoZWFkZXIsIGVuY29kaW5nLCBmaWxlTmFtZSk7CiAKLSAgICAgICAgICAgICAg
ICAvLyBJZiBhIGJsb2IgaXMgc2xpY2VkIGZyb20gYSBmaWxlLCBkbyBub3QgYWRkIHRoZSBjb250
ZW50IHR5cGUuIAorICAgICAgICAgICAgICAgIC8vIElmIHRoZSBpdGVtIGlzIHNsaWNlZCBmcm9t
IGEgZmlsZSwgZG8gbm90IGFkZCB0aGUgY29udGVudCB0eXBlLgogI2lmIEVOQUJMRShCTE9CX1NM
SUNFKQotICAgICAgICAgICAgICAgIGlmICghZmlsZU5hbWUuaXNFbXB0eSgpICYmIHZhbHVlLmJs
b2IoKS0+aXNGaWxlKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWZpbGVOYW1lLmlzRW1wdHko
KSAmJiAhdmFsdWUtPnRvRmlsZVJhbmdlQmxvYkl0ZW0oKSkgewogI2Vsc2UKICAgICAgICAgICAg
ICAgICBpZiAoIWZpbGVOYW1lLmlzRW1wdHkoKSkgewogI2VuZGlmCkBAIC0yMzcsMjUgKzI0NCwy
MCBAQCB2b2lkIEZvcm1EYXRhOjphcHBlbmRET01Gb3JtRGF0YShjb25zdCBET01Gb3JtRGF0YSYg
ZG9tRm9ybURhdGEsIGJvb2wgaXNNdWx0aVBhcgogCiAgICAgICAgICAgICAvLyBBcHBlbmQgYm9k
eQogICAgICAgICAgICAgYXBwZW5kRGF0YShoZWFkZXIuZGF0YSgpLCBoZWFkZXIuc2l6ZSgpKTsK
LSAgICAgICAgICAgIGlmIChzaXplX3QgZGF0YVNpemUgPSB2YWx1ZS5kYXRhKCkubGVuZ3RoKCkp
Ci0gICAgICAgICAgICAgICAgYXBwZW5kRGF0YSh2YWx1ZS5kYXRhKCkuZGF0YSgpLCBkYXRhU2l6
ZSk7Ci0gICAgICAgICAgICBlbHNlIGlmICh2YWx1ZS5ibG9iKCkgJiYgIXZhbHVlLmJsb2IoKS0+
cGF0aCgpLmlzRW1wdHkoKSkKLSNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAgICAgICAgICAgICAg
ICBhcHBlbmRGaWxlUmFuZ2UodmFsdWUuYmxvYigpLT5wYXRoKCksIHZhbHVlLmJsb2IoKS0+c3Rh
cnQoKSwgdmFsdWUuYmxvYigpLT5sZW5ndGgoKSwgdmFsdWUuYmxvYigpLT5tb2RpZmljYXRpb25U
aW1lKCksIHNob3VsZEdlbmVyYXRlRmlsZSk7Ci0jZWxzZQotICAgICAgICAgICAgICAgIGFwcGVu
ZEZpbGUodmFsdWUuYmxvYigpLT5wYXRoKCksIHNob3VsZEdlbmVyYXRlRmlsZSk7Ci0jZW5kaWYK
LQorICAgICAgICAgICAgbV9lbGVtZW50cy5hcHBlbmQoRm9ybURhdGFFbGVtZW50KHZhbHVlLCBz
aG91bGRHZW5lcmF0ZUZpbGUpKTsKICAgICAgICAgICAgIGFwcGVuZERhdGEoIlxyXG4iLCAyKTsK
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIE9taXQgdGhlIG5hbWUgImlzaW5kZXgi
IGlmIGl0J3MgdGhlIGZpcnN0IGZvcm0gZGF0YSBlbGVtZW50LgogICAgICAgICAgICAgLy8gRklY
TUU6IFdoeSBpcyB0aGlzIGEgZ29vZCBydWxlPyBJcyB0aGlzIG9ic29sZXRlIG5vdz8KLSAgICAg
ICAgICAgIGlmIChlbmNvZGVkRGF0YS5pc0VtcHR5KCkgJiYga2V5LmRhdGEoKSA9PSAiaXNpbmRl
eCIpCi0gICAgICAgICAgICAgICAgRm9ybURhdGFCdWlsZGVyOjplbmNvZGVTdHJpbmdBc0Zvcm1E
YXRhKGVuY29kZWREYXRhLCB2YWx1ZS5kYXRhKCkpOworICAgICAgICAgICAgY29uc3QgU3RyaW5n
QmxvYkl0ZW0qIHN0cmluZ1ZhbHVlID0gdmFsdWUtPnRvU3RyaW5nQmxvYkl0ZW0oKTsKKyAgICAg
ICAgICAgIGlmICghc3RyaW5nVmFsdWUpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICBpZiAoZW5jb2RlZERhdGEuaXNFbXB0eSgpICYmIGtleS0+Y3N0cigpID09ICJpc2lu
ZGV4IikKKyAgICAgICAgICAgICAgICBGb3JtRGF0YUJ1aWxkZXI6OmVuY29kZVN0cmluZ0FzRm9y
bURhdGEoZW5jb2RlZERhdGEsIHN0cmluZ1ZhbHVlLT5jc3RyKCkpOwogICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIGZvcm1EYXRhQnVpbGRlci5hZGRLZXlWYWx1ZVBhaXJBc0Zvcm1E
YXRhKGVuY29kZWREYXRhLCBrZXkuZGF0YSgpLCB2YWx1ZS5kYXRhKCkpOworICAgICAgICAgICAg
ICAgIGZvcm1EYXRhQnVpbGRlci5hZGRLZXlWYWx1ZVBhaXJBc0Zvcm1EYXRhKGVuY29kZWREYXRh
LCBrZXktPmNzdHIoKSwgc3RyaW5nVmFsdWUtPmNzdHIoKSk7CiAgICAgICAgIH0KLSAgICB9IAor
ICAgIH0KIAogICAgIGlmIChpc011bHRpUGFydEZvcm0pCiAgICAgICAgIGZvcm1EYXRhQnVpbGRl
ci5hZGRCb3VuZGFyeVRvTXVsdGlQYXJ0SGVhZGVyKGVuY29kZWREYXRhLCBtX2JvdW5kYXJ5LmRh
dGEoKSwgdHJ1ZSk7CkBAIC0yNzAsMTIgKzI3Miw4IEBAIHZvaWQgRm9ybURhdGE6OmZsYXR0ZW4o
VmVjdG9yPGNoYXI+JiBkYXRhKSBjb25zdAogICAgIHNpemVfdCBuID0gbV9lbGVtZW50cy5zaXpl
KCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuOyArK2kpIHsKICAgICAgICAgY29uc3Qg
Rm9ybURhdGFFbGVtZW50JiBlID0gbV9lbGVtZW50c1tpXTsKLSAgICAgICAgaWYgKGUubV90eXBl
ID09IEZvcm1EYXRhRWxlbWVudDo6ZGF0YSkgewotICAgICAgICAgICAgc2l6ZV90IG9sZFNpemUg
PSBkYXRhLnNpemUoKTsKLSAgICAgICAgICAgIHNpemVfdCBkZWx0YSA9IGUubV9kYXRhLnNpemUo
KTsKLSAgICAgICAgICAgIGRhdGEuZ3JvdyhvbGRTaXplICsgZGVsdGEpOwotICAgICAgICAgICAg
bWVtY3B5KGRhdGEuZGF0YSgpICsgb2xkU2l6ZSwgZS5tX2RhdGEuZGF0YSgpLCBkZWx0YSk7Ci0g
ICAgICAgIH0KKyAgICAgICAgaWYgKGUubV90eXBlID09IEZvcm1EYXRhRWxlbWVudDo6ZGF0YSkK
KyAgICAgICAgICAgIGRhdGEuYXBwZW5kKGUubV9kYXRhLmRhdGEoKSwgc3RhdGljX2Nhc3Q8c2l6
ZV90PihlLm1fZGF0YS5zaXplKCkpKTsKICAgICB9CiB9CiAKQEAgLTI4OSwxMCArMjg3LDEwIEBA
IFN0cmluZyBGb3JtRGF0YTo6ZmxhdHRlblRvU3RyaW5nKCkgY29uc3QKIHZvaWQgRm9ybURhdGE6
OmdlbmVyYXRlRmlsZXMoRG9jdW1lbnQqIGRvY3VtZW50KQogewogICAgIEFTU0VSVCghbV9oYXNH
ZW5lcmF0ZWRGaWxlcyk7Ci0gICAgCisKICAgICBpZiAobV9oYXNHZW5lcmF0ZWRGaWxlcykKICAg
ICAgICAgcmV0dXJuOwotICAgIAorCiAgICAgUGFnZSogcGFnZSA9IGRvY3VtZW50LT5wYWdlKCk7
CiAgICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm47CkBAIC0zMDIsNyArMzAwLDcgQEAgdm9p
ZCBGb3JtRGF0YTo6Z2VuZXJhdGVGaWxlcyhEb2N1bWVudCogZG9jdW1lbnQpCiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBuOyArK2kpIHsKICAgICAgICAgRm9ybURhdGFFbGVtZW50JiBlID0g
bV9lbGVtZW50c1tpXTsKICAgICAgICAgaWYgKGUubV90eXBlID09IEZvcm1EYXRhRWxlbWVudDo6
ZW5jb2RlZEZpbGUgJiYgZS5tX3Nob3VsZEdlbmVyYXRlRmlsZSkgewotICAgICAgICAgICAgZS5t
X2dlbmVyYXRlZEZpbGVuYW1lID0gY2xpZW50LT5nZW5lcmF0ZVJlcGxhY2VtZW50RmlsZShlLm1f
ZmlsZW5hbWUpOworICAgICAgICAgICAgZS5tX2dlbmVyYXRlZEZpbGVuYW1lID0gY2xpZW50LT5n
ZW5lcmF0ZVJlcGxhY2VtZW50RmlsZShlLml0ZW0oKS0+dG9GaWxlQmxvYkl0ZW0oKS0+cGF0aCgp
KTsKICAgICAgICAgICAgIG1faGFzR2VuZXJhdGVkRmlsZXMgPSB0cnVlOwogICAgICAgICB9CiAg
ICAgfQpAQCAtMzEyLDcgKzMxMCw3IEBAIHZvaWQgRm9ybURhdGE6OnJlbW92ZUdlbmVyYXRlZEZp
bGVzSWZOZWVkZWQoKQogewogICAgIGlmICghbV9oYXNHZW5lcmF0ZWRGaWxlcykKICAgICAgICAg
cmV0dXJuOwotICAgICAgICAKKwogICAgIHNpemVfdCBuID0gbV9lbGVtZW50cy5zaXplKCk7CiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuOyArK2kpIHsKICAgICAgICAgRm9ybURhdGFFbGVt
ZW50JiBlID0gbV9lbGVtZW50c1tpXTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9Gb3JtRGF0YS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmgKaW5k
ZXggYTQzOTAyMzQ3OTZhMGUyZjE0ZjVkMzQ5ZjVkZDBlZmZjMGE0YjdjZC4uYWM1NWEwZDZhNzRm
ZDhlNDEyNTNkMmMwOGFlMDg3OWVmOTQ5MGZlZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL0Zvcm1EYXRhLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1E
YXRhLmgKQEAgLTIwLDc0ICsyMCw4OSBAQAogI2lmbmRlZiBGb3JtRGF0YV9oCiAjZGVmaW5lIEZv
cm1EYXRhX2gKIAorI2luY2x1ZGUgIkJsb2JJdGVtLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJp
bmcuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBET01Gb3JtRGF0YTsKIGNsYXNzIERv
Y3VtZW50OworY2xhc3MgVGV4dEVuY29kaW5nOwogCisvLyBBIHdyYXBwZXIgY2xhc3Mgb2YgQmxv
Ykl0ZW0gZm9yIEZvcm1EYXRhLgogY2xhc3MgRm9ybURhdGFFbGVtZW50IHsKIHB1YmxpYzoKLSAg
ICBGb3JtRGF0YUVsZW1lbnQoKSA6IG1fdHlwZShkYXRhKSB7IH0KLSAgICBGb3JtRGF0YUVsZW1l
bnQoY29uc3QgVmVjdG9yPGNoYXI+JiBhcnJheSkgOiBtX3R5cGUoZGF0YSksIG1fZGF0YShhcnJh
eSkgeyB9Ci0jaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgRm9ybURhdGFFbGVtZW50KGNvbnN0
IFN0cmluZyYgZmlsZW5hbWUsIGxvbmcgbG9uZyBmaWxlU3RhcnQsIGxvbmcgbG9uZyBmaWxlTGVu
Z3RoLCBkb3VibGUgZXhwZWN0ZWRGaWxlTW9kaWZpY2F0aW9uVGltZSwgYm9vbCBzaG91bGRHZW5l
cmF0ZUZpbGUpIDogbV90eXBlKGVuY29kZWRGaWxlKSwgbV9maWxlbmFtZShmaWxlbmFtZSksIG1f
ZmlsZVN0YXJ0KGZpbGVTdGFydCksIG1fZmlsZUxlbmd0aChmaWxlTGVuZ3RoKSwgbV9leHBlY3Rl
ZEZpbGVNb2RpZmljYXRpb25UaW1lKGV4cGVjdGVkRmlsZU1vZGlmaWNhdGlvblRpbWUpLCBtX3No
b3VsZEdlbmVyYXRlRmlsZShzaG91bGRHZW5lcmF0ZUZpbGUpIHsgfQotI2Vsc2UKLSAgICBGb3Jt
RGF0YUVsZW1lbnQoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgYm9vbCBzaG91bGRHZW5lcmF0ZUZp
bGUpIDogbV90eXBlKGVuY29kZWRGaWxlKSwgbV9maWxlbmFtZShmaWxlbmFtZSksIG1fc2hvdWxk
R2VuZXJhdGVGaWxlKHNob3VsZEdlbmVyYXRlRmlsZSkgeyB9Ci0jZW5kaWYKKyAgICBGb3JtRGF0
YUVsZW1lbnQoKSA6IG1fZGF0YSgwKSB7IH0KKyAgICBGb3JtRGF0YUVsZW1lbnQoUGFzc1JlZlB0
cjxCbG9iSXRlbT4gYmxvYkl0ZW0sIGJvb2wgc2hvdWxkR2VuZXJhdGVGaWxlID0gZmFsc2UpOwor
CisgICAgY29uc3QgQmxvYkl0ZW0qIGl0ZW0oKSBjb25zdCB7IHJldHVybiBtX2l0ZW0uZ2V0KCk7
IH0KKworICAgIFJlZlB0cjxCbG9iSXRlbT4gbV9pdGVtOwogCisgICAgLy8gRklYTUU6IGNsZWFu
IG1lIHVwLiAgQ29kZSBiZWxvdyBhcmUgbW9zdGx5IGtlcHQgZm9yIGNvbXBhdGliaWxpdHkuCiAg
ICAgZW51bSB7IGRhdGEsIGVuY29kZWRGaWxlIH0gbV90eXBlOwotICAgIFZlY3RvcjxjaGFyPiBt
X2RhdGE7CisgICAgY29uc3Qgc3RydWN0IEJsb2JJdGVtV3JhcHBlciB7CisgICAgICAgIEJsb2JJ
dGVtV3JhcHBlcihjb25zdCBCbG9iSXRlbVdyYXBwZXImIHYpIDogbV9pdGVtKHYubV9pdGVtKSB7
IH0KKyAgICAgICAgQmxvYkl0ZW1XcmFwcGVyKGNvbnN0IERhdGFCbG9iSXRlbSogaXRlbSkgOiBt
X2l0ZW0oaXRlbSkgeyB9CisgICAgICAgIHNpemVfdCBzaXplKCkgY29uc3QKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKCFtX2l0ZW0pCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2l0ZW0tPnNpemUoKSk7CisgICAg
ICAgIH0KKyAgICAgICAgY29uc3QgY2hhciogZGF0YSgpIGNvbnN0CisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmICghbV9pdGVtKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAg
ICAgcmV0dXJuIG1faXRlbS0+ZGF0YSgpOworICAgICAgICB9CisgICAgICAgIGNoYXIqIHJlbGVh
c2VCdWZmZXIoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIW1faXRlbSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBtX2l0ZW0tPmRlZXBD
b3B5QnVmZmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgY29uc3QgRGF0YUJsb2JJdGVtKiBtX2l0
ZW07CisgICAgfSBtX2RhdGE7CiAgICAgU3RyaW5nIG1fZmlsZW5hbWU7CiAjaWYgRU5BQkxFKEJM
T0JfU0xJQ0UpCiAgICAgbG9uZyBsb25nIG1fZmlsZVN0YXJ0OwogICAgIGxvbmcgbG9uZyBtX2Zp
bGVMZW5ndGg7CiAgICAgZG91YmxlIG1fZXhwZWN0ZWRGaWxlTW9kaWZpY2F0aW9uVGltZTsKKwor
ICAgIHN0YXRpYyBjb25zdCBsb25nIGxvbmcgdG9FbmRPZkZpbGU7CiAjZW5kaWYKKwogICAgIFN0
cmluZyBtX2dlbmVyYXRlZEZpbGVuYW1lOwogICAgIGJvb2wgbV9zaG91bGRHZW5lcmF0ZUZpbGU7
CiB9OwogCiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvcm1EYXRhRWxlbWVudCYgYSwg
Y29uc3QgRm9ybURhdGFFbGVtZW50JiBiKQogewotICAgIGlmICgmYSA9PSAmYikKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgCi0gICAgaWYgKGEubV90eXBlICE9IGIubV90eXBlKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGEubV9kYXRhICE9IGIubV9kYXRhKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0jaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgaWYgKGEubV9maWxlbmFt
ZSAhPSBiLm1fZmlsZW5hbWUgfHwgYS5tX2ZpbGVTdGFydCAhPSBiLm1fZmlsZVN0YXJ0IHx8IGEu
bV9maWxlTGVuZ3RoICE9IGIubV9maWxlTGVuZ3RoIHx8IGEubV9leHBlY3RlZEZpbGVNb2RpZmlj
YXRpb25UaW1lICE9IGIubV9leHBlY3RlZEZpbGVNb2RpZmljYXRpb25UaW1lKQotI2Vsc2UKLSAg
ICBpZiAoYS5tX2ZpbGVuYW1lICE9IGIubV9maWxlbmFtZSkKLSNlbmRpZgotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gYS5pdGVtKCktPmVxdWFs
cyhiLml0ZW0oKSk7CiB9Ci0gCisKIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgRm9ybURh
dGFFbGVtZW50JiBhLCBjb25zdCBGb3JtRGF0YUVsZW1lbnQmIGIpCiB7CiAgICAgcmV0dXJuICEo
YSA9PSBiKTsKIH0KLSAKKwogY2xhc3MgRm9ybURhdGEgOiBwdWJsaWMgUmVmQ291bnRlZDxGb3Jt
RGF0YT4gewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZvcm1EYXRhPiBjcmVhdGUo
KTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxGb3JtRGF0YT4gY3JlYXRlKGNvbnN0IHZvaWQqLCBz
aXplX3QpOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZvcm1EYXRhPiBjcmVhdGUoY29uc3QgV1RG
OjpDU3RyaW5nJik7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGNyZWF0ZShjb25z
dCBWZWN0b3I8Y2hhcj4mKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxGb3JtRGF0YT4gY3JlYXRl
KGNvbnN0IERPTUZvcm1EYXRhJik7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGNy
ZWF0ZU11bHRpUGFydChjb25zdCBET01Gb3JtRGF0YSYsIERvY3VtZW50Kik7CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8Rm9ybURhdGE+IGNyZWF0ZShjb25zdCBCbG9iSXRlbUxpc3QmLCBjb25zdCBU
ZXh0RW5jb2RpbmcmKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxGb3JtRGF0YT4gY3JlYXRlTXVs
dGlQYXJ0KGNvbnN0IEJsb2JJdGVtTGlzdCYsIGNvbnN0IFRleHRFbmNvZGluZyYsIERvY3VtZW50
Kik7CiAgICAgUGFzc1JlZlB0cjxGb3JtRGF0YT4gY29weSgpIGNvbnN0OwogICAgIFBhc3NSZWZQ
dHI8Rm9ybURhdGE+IGRlZXBDb3B5KCkgY29uc3Q7CiAgICAgfkZvcm1EYXRhKCk7Ci0gICAgCisK
ICAgICB2b2lkIGFwcGVuZERhdGEoY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90KTsKKyAgICB2b2lk
IGFwcGVuZEJsb2JJdGVtTGlzdChjb25zdCBCbG9iSXRlbUxpc3QmKTsKKyAgICB2b2lkIGFwcGVu
ZFN0cmluZyhjb25zdCBDU3RyaW5nJik7CiAgICAgdm9pZCBhcHBlbmRGaWxlKGNvbnN0IFN0cmlu
ZyYgZmlsZW5hbWUsIGJvb2wgc2hvdWxkR2VuZXJhdGVGaWxlID0gZmFsc2UpOwogI2lmIEVOQUJM
RShCTE9CX1NMSUNFKQogICAgIHZvaWQgYXBwZW5kRmlsZVJhbmdlKGNvbnN0IFN0cmluZyYgZmls
ZW5hbWUsIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCwgZG91YmxlIGV4cGVjdGVk
TW9kaWZpY2F0aW9uVGltZSwgYm9vbCBzaG91bGRHZW5lcmF0ZUZpbGUgPSBmYWxzZSk7CkBAIC0x
MTUsOSArMTMwLDEwIEBAIHByaXZhdGU6CiAgICAgRm9ybURhdGEoKTsKICAgICBGb3JtRGF0YShj
b25zdCBGb3JtRGF0YSYpOwogCi0gICAgdm9pZCBhcHBlbmRET01Gb3JtRGF0YShjb25zdCBET01G
b3JtRGF0YSYgZG9tRm9ybURhdGEsIGJvb2wgaXNNdWx0aVBhcnRGb3JtLCBEb2N1bWVudCogZG9j
dW1lbnQpOworICAgIHZvaWQgYXBwZW5kSXRlbXMoY29uc3QgQmxvYkl0ZW1MaXN0JiwgY29uc3Qg
VGV4dEVuY29kaW5nJiwgYm9vbCBpc011bHRpUGFydEZvcm0sIERvY3VtZW50Kik7CiAKICAgICBW
ZWN0b3I8Rm9ybURhdGFFbGVtZW50PiBtX2VsZW1lbnRzOworCiAgICAgaW50NjRfdCBtX2lkZW50
aWZpZXI7CiAgICAgYm9vbCBtX2hhc0dlbmVyYXRlZEZpbGVzOwogICAgIGJvb2wgbV9hbHdheXNT
dHJlYW07CkBAIC0xMzEsNyArMTQ3LDcgQEAgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBG
b3JtRGF0YSYgYSwgY29uc3QgRm9ybURhdGEmIGIpCiAKIGlubGluZSBib29sIG9wZXJhdG9yIT0o
Y29uc3QgRm9ybURhdGEmIGEsIGNvbnN0IEZvcm1EYXRhJiBiKQogewotICAgIHJldHVybiBhLmVs
ZW1lbnRzKCkgIT0gYi5lbGVtZW50cygpOworICAgIHJldHVybiAhKGEgPT0gYik7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9tYWMvRm9ybURhdGFTdHJlYW1NYWMubW0gYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFj
L0Zvcm1EYXRhU3RyZWFtTWFjLm1tCmluZGV4IDI3ZWNmZDA4YWQ1YWFhYjg3NTZmYTU5NmQ5OTZi
ZDJmNmVjNWQwM2YuLjFlNDhlMmY4ZmJiMmZmZTZlNzc5ZWFiMTBhNjcxMjA0MTc0NmEwNDIgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvRm9ybURhdGFTdHJlYW1NYWMu
bW0KKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9Gb3JtRGF0YVN0cmVhbU1hYy5t
bQpAQCAtMzEsNyArMzEsNiBAQAogI2ltcG9ydCAiY29uZmlnLmgiCiAjaW1wb3J0ICJGb3JtRGF0
YVN0cmVhbU1hYy5oIgogCi0jaW1wb3J0ICJCbG9iLmgiCiAjaW1wb3J0ICJGaWxlU3lzdGVtLmgi
CiAjaW1wb3J0ICJGb3JtRGF0YS5oIgogI2ltcG9ydCAiUmVzb3VyY2VIYW5kbGUuaCIKQEAgLTE0
Miw3ICsxNDEsNyBAQCBzdGF0aWMgdm9pZCBjbG9zZUN1cnJlbnRTdHJlYW0oRm9ybVN0cmVhbUZp
ZWxkcyAqZm9ybSkKICAgICAgICAgQ0ZSZWxlYXNlKGZvcm0tPmN1cnJlbnRTdHJlYW0pOwogICAg
ICAgICBmb3JtLT5jdXJyZW50U3RyZWFtID0gTlVMTDsKICNpZiBFTkFCTEUoQkxPQl9TTElDRSkK
LSAgICAgICAgZm9ybS0+Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoID0gQmxvYjo6dG9FbmRPZkZp
bGU7CisgICAgICAgIGZvcm0tPmN1cnJlbnRTdHJlYW1SYW5nZUxlbmd0aCA9IEZvcm1EYXRhRWxl
bWVudDo6dG9FbmRPZkZpbGU7CiAjZW5kaWYKICAgICB9CiAgICAgaWYgKGZvcm0tPmN1cnJlbnRE
YXRhKSB7CkBAIC0xNjEsMjEgKzE2MCwxNyBAQCBzdGF0aWMgYm9vbCBhZHZhbmNlQ3VycmVudFN0
cmVhbShGb3JtU3RyZWFtRmllbGRzKiBmb3JtKQogCiAgICAgLy8gQ3JlYXRlIHRoZSBuZXcgc3Ry
ZWFtLgogICAgIEZvcm1EYXRhRWxlbWVudCYgbmV4dElucHV0ID0gZm9ybS0+cmVtYWluaW5nRWxl
bWVudHMubGFzdCgpOworCisgICAgLy8gQ2hlY2sgaWYgdGhlIHVuZGVybHlpbmcgZGF0YSBoYXMg
YmVjb21lIHN0YWxlIChlLmcuIHRoZSBmaWxlIGhhcyBiZWVuIGNoYW5nZWQgc2luY2UgaXRzIHNu
YXBzaG90IGhhcyBiZWVuIHRha2VuKSBvciBub3QuCisgICAgaWYgKCFuZXh0SW5wdXQubV9pdGVt
LT5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIGlmIChuZXh0SW5wdXQu
bV90eXBlID09IEZvcm1EYXRhRWxlbWVudDo6ZGF0YSkgewogICAgICAgICBzaXplX3Qgc2l6ZSA9
IG5leHRJbnB1dC5tX2RhdGEuc2l6ZSgpOwogICAgICAgICBjaGFyKiBkYXRhID0gbmV4dElucHV0
Lm1fZGF0YS5yZWxlYXNlQnVmZmVyKCk7CiAgICAgICAgIGZvcm0tPmN1cnJlbnRTdHJlYW0gPSBD
RlJlYWRTdHJlYW1DcmVhdGVXaXRoQnl0ZXNOb0NvcHkoMCwgcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBVSW50OCo+KGRhdGEpLCBzaXplLCBrQ0ZBbGxvY2F0b3JOdWxsKTsKICAgICAgICAgZm9ybS0+
Y3VycmVudERhdGEgPSBkYXRhOwogICAgIH0gZWxzZSB7Ci0jaWYgRU5BQkxFKEJMT0JfU0xJQ0Up
Ci0gICAgICAgIC8vIENoZWNrIGlmIHRoZSBmaWxlIGhhcyBiZWVuIGNoYW5nZWQgb3Igbm90IGlm
IHJlcXVpcmVkLgotICAgICAgICBpZiAobmV4dElucHV0Lm1fZXhwZWN0ZWRGaWxlTW9kaWZpY2F0
aW9uVGltZSAhPSBCbG9iOjpkb05vdENoZWNrRmlsZUNoYW5nZSkgewotICAgICAgICAgICAgdGlt
ZV90IGZpbGVNb2RpZmljYXRpb25UaW1lOwotICAgICAgICAgICAgaWYgKCFnZXRGaWxlTW9kaWZp
Y2F0aW9uVGltZShuZXh0SW5wdXQubV9maWxlbmFtZSwgZmlsZU1vZGlmaWNhdGlvblRpbWUpIHx8
IGZpbGVNb2RpZmljYXRpb25UaW1lICE9IHN0YXRpY19jYXN0PHRpbWVfdD4obmV4dElucHV0Lm1f
ZXhwZWN0ZWRGaWxlTW9kaWZpY2F0aW9uVGltZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICB9Ci0jZW5kaWYKLQogICAgICAgICBjb25zdCBTdHJpbmcmIHBhdGggPSBu
ZXh0SW5wdXQubV9zaG91bGRHZW5lcmF0ZUZpbGUgPyBuZXh0SW5wdXQubV9nZW5lcmF0ZWRGaWxl
bmFtZSA6IG5leHRJbnB1dC5tX2ZpbGVuYW1lOwogICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdS
ZWY+IGZpbGVuYW1lKEFkb3B0Q0YsIHBhdGguY3JlYXRlQ0ZTdHJpbmcoKSk7CiAgICAgICAgIFJl
dGFpblB0cjxDRlVSTFJlZj4gZmlsZVVSTChBZG9wdENGLCBDRlVSTENyZWF0ZVdpdGhGaWxlU3lz
dGVtUGF0aCgwLCBmaWxlbmFtZS5nZXQoKSwga0NGVVJMUE9TSVhQYXRoU3R5bGUsIEZBTFNFKSk7
CkBAIC0yMjIsNyArMjE3LDcgQEAgc3RhdGljIHZvaWQqIGZvcm1DcmVhdGUoQ0ZSZWFkU3RyZWFt
UmVmIHN0cmVhbSwgdm9pZCogY29udGV4dCkKICAgICBGb3JtU3RyZWFtRmllbGRzKiBuZXdJbmZv
ID0gbmV3IEZvcm1TdHJlYW1GaWVsZHM7CiAgICAgbmV3SW5mby0+Y3VycmVudFN0cmVhbSA9IE5V
TEw7CiAjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgbmV3SW5mby0+Y3VycmVudFN0cmVhbVJh
bmdlTGVuZ3RoID0gQmxvYjo6dG9FbmRPZkZpbGU7CisgICAgbmV3SW5mby0+Y3VycmVudFN0cmVh
bVJhbmdlTGVuZ3RoID0gRm9ybURhdGFFbGVtZW50Ojp0b0VuZE9mRmlsZTsKICNlbmRpZgogICAg
IG5ld0luZm8tPmN1cnJlbnREYXRhID0gMDsKICAgICBuZXdJbmZvLT5mb3JtU3RyZWFtID0gc3Ry
ZWFtOyAvLyBEb24ndCByZXRhaW4uIFRoYXQgd291bGQgY3JlYXRlIGEgcmVmZXJlbmNlIGN5Y2xl
LgpAQCAtMjcwLDcgKzI2NSw3IEBAIHN0YXRpYyBDRkluZGV4IGZvcm1SZWFkKENGUmVhZFN0cmVh
bVJlZiBzdHJlYW0sIFVJbnQ4KiBidWZmZXIsIENGSW5kZXggYnVmZmVyTGVuCiAgICAgd2hpbGUg
KGZvcm0tPmN1cnJlbnRTdHJlYW0pIHsKICAgICAgICAgQ0ZJbmRleCBieXRlc1RvUmVhZCA9IGJ1
ZmZlckxlbmd0aDsKICNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAgICAgICAgaWYgKGZvcm0tPmN1
cnJlbnRTdHJlYW1SYW5nZUxlbmd0aCAhPSBCbG9iOjp0b0VuZE9mRmlsZSAmJiBmb3JtLT5jdXJy
ZW50U3RyZWFtUmFuZ2VMZW5ndGggPCBieXRlc1RvUmVhZCkKKyAgICAgICAgaWYgKGZvcm0tPmN1
cnJlbnRTdHJlYW1SYW5nZUxlbmd0aCAhPSBGb3JtRGF0YUVsZW1lbnQ6OnRvRW5kT2ZGaWxlICYm
IGZvcm0tPmN1cnJlbnRTdHJlYW1SYW5nZUxlbmd0aCA8IGJ5dGVzVG9SZWFkKQogICAgICAgICAg
ICAgYnl0ZXNUb1JlYWQgPSBzdGF0aWNfY2FzdDxDRkluZGV4Pihmb3JtLT5jdXJyZW50U3RyZWFt
UmFuZ2VMZW5ndGgpOwogI2VuZGlmCiAgICAgICAgIENGSW5kZXggYnl0ZXNSZWFkID0gQ0ZSZWFk
U3RyZWFtUmVhZChmb3JtLT5jdXJyZW50U3RyZWFtLCBidWZmZXIsIGJ5dGVzVG9SZWFkKTsKQEAg
LTI4Myw3ICsyNzgsNyBAQCBzdGF0aWMgQ0ZJbmRleCBmb3JtUmVhZChDRlJlYWRTdHJlYW1SZWYg
c3RyZWFtLCBVSW50OCogYnVmZmVyLCBDRkluZGV4IGJ1ZmZlckxlbgogICAgICAgICAgICAgKmF0
RU9GID0gRkFMU0U7CiAgICAgICAgICAgICBmb3JtLT5ieXRlc1NlbnQgKz0gYnl0ZXNSZWFkOwog
I2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgICAgICAgICAgaWYgKGZvcm0tPmN1cnJlbnRTdHJl
YW1SYW5nZUxlbmd0aCAhPSBCbG9iOjp0b0VuZE9mRmlsZSkKKyAgICAgICAgICAgIGlmIChmb3Jt
LT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5ndGggIT0gRm9ybURhdGFFbGVtZW50Ojp0b0VuZE9mRmls
ZSkKICAgICAgICAgICAgICAgICBmb3JtLT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5ndGggLT0gYnl0
ZXNSZWFkOwogI2VuZGlmCiAKQEAgLTQwMCw3ICszOTUsNyBAQCB2b2lkIHNldEhUVFBCb2R5KE5T
TXV0YWJsZVVSTFJlcXVlc3QgKnJlcXVlc3QsIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGZvcm1EYXRh
KQogICAgICAgICBlbHNlIHsKICNpZiBFTkFCTEUoQkxPQl9TTElDRSkKICAgICAgICAgICAgIC8v
IElmIHdlJ3JlIHNlbmRpbmcgdGhlIGZpbGUgcmFuZ2UsIHVzZSB0aGUgZXhpc3RpbmcgcmFuZ2Ug
bGVuZ3RoIGZvciBub3cuIFdlIHdpbGwgZGV0ZWN0IGlmIHRoZSBmaWxlIGhhcyBiZWVuIGNoYW5n
ZWQgcmlnaHQgYmVmb3JlIHdlIHJlYWQgdGhlIGZpbGUgYW5kIGFib3J0IHRoZSBvcGVyYXRpb24g
aWYgbmVjZXNzYXJ5LgotICAgICAgICAgICAgaWYgKGVsZW1lbnQubV9maWxlTGVuZ3RoICE9IEJs
b2I6OnRvRW5kT2ZGaWxlKSB7CisgICAgICAgICAgICBpZiAoZWxlbWVudC5tX2ZpbGVMZW5ndGgg
IT0gRm9ybURhdGFFbGVtZW50Ojp0b0VuZE9mRmlsZSkgewogICAgICAgICAgICAgICAgIGxlbmd0
aCArPSBlbGVtZW50Lm1fZmlsZUxlbmd0aDsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcCBi
L1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAppbmRleCA1Y2RlMjRkZTI5ZGI0NDIxMDAw
MWEzMDIzMjQ0Y2E0Y2NkMjVjZmJiLi4xNDEwYTVlY2M4YzY5YjYxYmIyNjlkNjYwMDQ4Yjk1NmJi
OWI4MWQzIDEwMDY0NAotLS0gYS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKKysrIGIv
V2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCkBAIC00NzgsMTEgKzQ3OCw3IEBAIHZvaWQg
WE1MSHR0cFJlcXVlc3Q6OnNlbmQoQmxvYiogYm9keSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAg
ICAgIC8vIEZJWE1FOiBTaG91bGQgd2Ugc2V0IGEgQ29udGVudC1UeXBlIGlmIG9uZSBpcyBub3Qg
c2V0LgogICAgICAgICAvLyBGSVhNRTogYWRkIHN1cHBvcnQgZm9yIHVwbG9hZGluZyBidW5kbGVz
LgogICAgICAgICBtX3JlcXVlc3RFbnRpdHlCb2R5ID0gRm9ybURhdGE6OmNyZWF0ZSgpOwotI2lm
IEVOQUJMRShCTE9CX1NMSUNFKQotICAgICAgICBtX3JlcXVlc3RFbnRpdHlCb2R5LT5hcHBlbmRG
aWxlUmFuZ2UoYm9keS0+cGF0aCgpLCBib2R5LT5zdGFydCgpLCBib2R5LT5sZW5ndGgoKSwgYm9k
eS0+bW9kaWZpY2F0aW9uVGltZSgpKTsKLSNlbHNlCi0gICAgICAgIG1fcmVxdWVzdEVudGl0eUJv
ZHktPmFwcGVuZEZpbGUoYm9keS0+cGF0aCgpLCBmYWxzZSk7Ci0jZW5kaWYKKyAgICAgICAgbV9y
ZXF1ZXN0RW50aXR5Qm9keS0+YXBwZW5kQmxvYkl0ZW1MaXN0KGJvZHktPml0ZW1zKCkpOwogICAg
IH0KIAogICAgIGNyZWF0ZVJlcXVlc3QoZWMpOwpAQCAtNDk0LDcgKzQ5MCw3IEBAIHZvaWQgWE1M
SHR0cFJlcXVlc3Q6OnNlbmQoRE9NRm9ybURhdGEqIGJvZHksIEV4Y2VwdGlvbkNvZGUmIGVjKQog
ICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV9tZXRob2QgIT0gIkdFVCIgJiYgbV9tZXRob2Qg
IT0gIkhFQUQiICYmIG1fdXJsLnByb3RvY29sSW5IVFRQRmFtaWx5KCkpIHsKLSAgICAgICAgbV9y
ZXF1ZXN0RW50aXR5Qm9keSA9IEZvcm1EYXRhOjpjcmVhdGVNdWx0aVBhcnQoKmJvZHksIGRvY3Vt
ZW50KCkpOworICAgICAgICBtX3JlcXVlc3RFbnRpdHlCb2R5ID0gRm9ybURhdGE6OmNyZWF0ZU11
bHRpUGFydChib2R5LT5pdGVtcygpLCBib2R5LT5lbmNvZGluZygpLCBkb2N1bWVudCgpKTsKIAog
ICAgICAgICAvLyBXZSBuZWVkIHRvIGFzayB0aGUgY2xpZW50IHRvIHByb3ZpZGUgdGhlIGdlbmVy
YXRlZCBmaWxlIG5hbWVzIGlmIG5lZWRlZC4gV2hlbiBGb3JtRGF0YSBmaWxscyB0aGUgZWxlbWVu
dAogICAgICAgICAvLyBmb3IgdGhlIGZpbGUsIGl0IGNvdWxkIHNldCBhIGZsYWcgdG8gdXNlIHRo
ZSBnZW5lcmF0ZWQgZmlsZSBuYW1lLCBpLmUuIGEgcGFja2FnZSBmaWxlIG9uIE1hYy4KZGlmZiAt
LWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCmluZGV4IDhiMWNlNGI5NGU1M2ZhZDgwMjg3MTA3NDc3ZDUxYThiY2I5MTE1YjQuLmNhNDQx
ZWQ1ZWZjMGY1NjIwOGNlMTJkOTc0MjcwNGYyMGFmYmI2YTAgMTAwNjQ0Ci0tLSBhL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE2IEBACisyMDEwLTA1LTI0ICBLaW51a28gWWFzdWRhICA8a2ludWtvQGNocm9taXVtLm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZWZh
Y3RvciBGb3JtRGF0YSBhbmQgQmxvYiBmb3IgYmV0dGVyIHN1cHBvcnQgb2YgQmxvYnMgc3ludGhl
c2l6ZWQgYnkgQmxvYkJ1aWxkZXIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0zOTA4MworCisgICAgICAgIFJlcGxhY2UgRm9ybURhdGFMaXN0OjpJdGVt
IGxpc3Qgd2l0aCBCbG9iSXRlbUxpc3QgdG8gZ2V0IGl0IGNvbXBpbGVkCisgICAgICAgIHdpdGgg
dGhlIHJlZmFjdG9yaW5nIGluIEZvcm1EYXRhTGlzdC4KKworICAgICAgICAqIHNyYy9XZWJTZWFy
Y2hhYmxlRm9ybURhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SGFzU3VpdGFibGVUZXh0RWxl
bWVudCk6CisKIDIwMTAtMDUtMjQgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNv
bT4KIAogICAgICAgICBBdHRlbXB0IHRvIGZpeCB0aGUgQ2hyb21pdW0gYnVpbGQuCmRpZmYgLS1n
aXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNlYXJjaGFibGVGb3JtRGF0YS5jcHAgYi9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlNlYXJjaGFibGVGb3JtRGF0YS5jcHAKaW5kZXggOGVlZjZjYzg5
NDdlNWM2Y2M5MzMwNWQyY2I2MTE1OGVlZTllNjhkNS4uNzI2OTRiNzEwYWYyNWNhNTk4MjVjZGQ2
NzhhNDA5YmJmMTRiMWU1YiAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZWFy
Y2hhYmxlRm9ybURhdGEuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2VhcmNoYWJs
ZUZvcm1EYXRhLmNwcApAQCAtMTg1LDggKzE4NSw4IEBAIGJvb2wgSGFzU3VpdGFibGVUZXh0RWxl
bWVudChjb25zdCBIVE1MRm9ybUVsZW1lbnQqIGZvcm0sIFZlY3RvcjxjaGFyPiogZW5jb2RlZFN0
CiAgICAgICBpZiAoIWZvcm1FbGVtZW50LT5hcHBlbmRGb3JtRGF0YShkYXRhTGlzdCwgZmFsc2Up
KQogICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICBjb25zdCBWZWN0b3I8Rm9ybURhdGFMaXN0
OjpJdGVtPiYgaXRlbUxpc3QgPSBkYXRhTGlzdC5saXN0KCk7Ci0gICAgICBpZiAoaXNUZXh0RWxl
bWVudCAmJiAhaXRlbUxpc3QuaXNFbXB0eSgpKSB7CisgICAgICBjb25zdCBCbG9iSXRlbUxpc3Qm
IGl0ZW1zID0gZGF0YUxpc3QuaXRlbXMoKTsKKyAgICAgIGlmIChpc1RleHRFbGVtZW50ICYmICFp
dGVtcy5pc0VtcHR5KCkpIHsKICAgICAgICAgICBpZiAodGV4dEVsZW1lbnQpIHsKICAgICAgICAg
ICAgICAgLy8gVGhlIGF1dG8tY29tcGxldGUgYmFyIG9ubHkga25vd3MgaG93IHRvIGZpbGwgaW4g
b25lIHZhbHVlLgogICAgICAgICAgICAgICAvLyBUaGlzIGZvcm0gaGFzIG11bHRpcGxlIGZpZWxk
czsgZG9uJ3QgdHJlYXQgaXQgYXMgc2VhcmNoYWJsZS4KQEAgLTE5NCwyMCArMTk0LDIzIEBAIGJv
b2wgSGFzU3VpdGFibGVUZXh0RWxlbWVudChjb25zdCBIVE1MRm9ybUVsZW1lbnQqIGZvcm0sIFZl
Y3RvcjxjaGFyPiogZW5jb2RlZFN0CiAgICAgICAgICAgfQogICAgICAgICAgIHRleHRFbGVtZW50
ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KGZvcm1FbGVtZW50KTsKICAgICAgIH0K
LSAgICAgIGZvciAoVmVjdG9yPEZvcm1EYXRhTGlzdDo6SXRlbT46OmNvbnN0X2l0ZXJhdG9yIGoo
aXRlbUxpc3QuYmVnaW4oKSk7IGogIT0gaXRlbUxpc3QuZW5kKCk7ICsraikgeworICAgICAgZm9y
IChCbG9iSXRlbUxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGooaXRlbXMuYmVnaW4oKSk7IGogIT0gaXRl
bXMuZW5kKCk7ICsraikgeworICAgICAgICAgIGNvbnN0IFN0cmluZ0Jsb2JJdGVtKiBpdGVtID0g
KCpqKS0+dG9TdHJpbmdCbG9iSXRlbSgpOworICAgICAgICAgIGlmICghaXRlbSkKKyAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgICAgLy8gSGFuZGxlIElTSU5ERVggLyA8aW5wdXQgbmFt
ZT1pc2luZGV4PiBzcGVjaWFsbHksIGJ1dCBvbmx5IGlmIGl0J3MKICAgICAgICAgICAvLyB0aGUg
Zmlyc3QgZW50cnkuCi0gICAgICAgICAgaWYgKCFlbmNvZGVkU3RyaW5nLT5pc0VtcHR5KCkgfHwg
ai0+ZGF0YSgpICE9ICJpc2luZGV4IikgeworICAgICAgICAgIGlmICghZW5jb2RlZFN0cmluZy0+
aXNFbXB0eSgpIHx8IGl0ZW0tPmNzdHIoKSAhPSAiaXNpbmRleCIpIHsKICAgICAgICAgICAgICAg
aWYgKCFlbmNvZGVkU3RyaW5nLT5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgICBlbmNvZGVk
U3RyaW5nLT5hcHBlbmQoJyYnKTsKLSAgICAgICAgICAgICAgRm9ybURhdGFCdWlsZGVyOjplbmNv
ZGVTdHJpbmdBc0Zvcm1EYXRhKCplbmNvZGVkU3RyaW5nLCBqLT5kYXRhKCkpOworICAgICAgICAg
ICAgICBGb3JtRGF0YUJ1aWxkZXI6OmVuY29kZVN0cmluZ0FzRm9ybURhdGEoKmVuY29kZWRTdHJp
bmcsIGl0ZW0tPmNzdHIoKSk7CiAgICAgICAgICAgICAgIGVuY29kZWRTdHJpbmctPmFwcGVuZCgn
PScpOwogICAgICAgICAgIH0KICAgICAgICAgICArK2o7CiAgICAgICAgICAgaWYgKGZvcm1FbGVt
ZW50ID09IHRleHRFbGVtZW50KQogICAgICAgICAgICAgICBlbmNvZGVkU3RyaW5nLT5hcHBlbmQo
IntzZWFyY2hUZXJtc30iLCAxMyk7CiAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICBGb3Jt
RGF0YUJ1aWxkZXI6OmVuY29kZVN0cmluZ0FzRm9ybURhdGEoKmVuY29kZWRTdHJpbmcsIGotPmRh
dGEoKSk7CisgICAgICAgICAgICAgIEZvcm1EYXRhQnVpbGRlcjo6ZW5jb2RlU3RyaW5nQXNGb3Jt
RGF0YSgqZW5jb2RlZFN0cmluZywgaXRlbS0+Y3N0cigpKTsKICAgICAgIH0KICAgICB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57069</attachid>
            <date>2010-05-25 22:44:27 -0700</date>
            <delta_ts>2010-05-26 01:41:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-39083-20100526144424.patch</filename>
            <type>text/plain</type>
            <size>76550</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CmluZGV4IGJmOGQ1NjI0NmJlNTQ3NWE3OGMzYWIzODI1MmIzMjE1ZjFkYTE4YzkuLjAyMzJl
Y2Q1Zjk5ZGVhOTNmZGQ2NGYwMWQ2MWI1MjRhZDUyM2FhNDkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
Q01ha2VMaXN0cy50eHQKKysrIGIvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTExNSw2ICsx
MTE1LDcgQEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAgIHBhZ2UvYW5pbWF0aW9uL0tleWZyYW1l
QW5pbWF0aW9uLmNwcAogCiAgICAgcGxhdGZvcm0vQXJlbmEuY3BwCisgICAgcGxhdGZvcm0vQmxv
Ykl0ZW0uY3BwCiAgICAgcGxhdGZvcm0vQ29udGVudFR5cGUuY3BwCiAgICAgcGxhdGZvcm0vQ29u
dGV4dE1lbnUuY3BwCiAgICAgcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGY3MmYzMGNi
YjAxZDRjMGNlYjEzMDJiMjI1MTZhMWUzNmIxMzZmMjYuLjQwYTZjOGVmYzI4Nzg3ZWY2Y2VjYWJk
NzliZTU5YzVkZGViYWNlZjIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dl
YkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTEgQEAKKzIwMTAtMDUtMjQgIEtpbnVrbyBZYXN1
ZGEgIDxraW51a29AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yIEZvcm1EYXRhIGFuZCBCbG9iIGZvciBiZXR0ZXIg
c3VwcG9ydCBvZiBCbG9icyBzeW50aGVzaXplZCBieSBCbG9iQnVpbGRlci4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5MDgzCisKKyAgICAgICAgLSBJ
bnRyb2R1Y2VzIGEgbmV3IGNsYXNzIEJsb2JJdGVtIGFzIGEgYmFzaWMgY29tcG9uZW50IG9mIEJs
b2IgYW5kCisgICAgICAgICAgRm9ybURhdGEgYW5kIG1ha2VzIEJsb2IgYXMgYSBjb2xsZWN0aW9u
IG9mIEJsb2JJdGVtcy4KKyAgICAgICAgLSBGaWxlIHdvdWxkIGJlY29tZSBhIHNwZWNpYWwgdHlw
ZSBvZiBCbG9iIHRoYXQgY29udGFpbnMgb25seSBvbmUKKyAgICAgICAgICBGaWxlQmxvYkl0ZW0u
CisgICAgICAgIC0gTWFrZXMgRm9ybURhdGFFbGVtZW50IGEgd3JhcHBlciBvZiBCbG9iSXRlbSAo
YXMgYSB0cmFuc2llbnQKKyAgICAgICAgICBzb2x1dGlvbikuCisgICAgICAgIC0gRml4IHRoZSBk
ZXBlbmRlbmN5IHZpb2xhdGlvbiBpbiBGb3JtRGF0YSBzbyB0aGF0IHRoZSBmaWxlcyB1bmRlcgor
ICAgICAgICAgIHBsYXRmb3JtLyBkbyBub3QgaW5jbHVkZSBhbnkgaHRtbC8gZmlsZXMuCisKKyAg
ICAgICAgVGhlIHBhdGNoIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgbGF0ZXN0IEZpbGUgQVBJIGNoYW5n
ZXMgKGUuZy4gdHlwZSwKKyAgICAgICAgdXJsIGFuZCBzbGljZSdzIHR5cGUgcGFyYW1ldGVycykg
YW5kIHNob3VsZCBub3QgY2hhbmdlIGFueSBvZiBpdHMKKyAgICAgICAgZXhpc3RpbmcgYmVoYXZp
b3JzLgorCisgICAgICAgIFRoZSBleGlzdGluZyB0ZXN0cyBzaG91bGQgYmUgYWJsZSB0byBiZSB1
c2VkIGZvciByZWdyZXNzaW9uLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAg
ICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdl
YkNvcmUucHJvOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAg
ICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBodG1s
L0Jsb2IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6QmxvYik6CisgICAgICAgIChXZWJD
b3JlOjpCbG9iOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OnBhdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6QmxvYjo6YXBwZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OnNsaWNl
KToKKyAgICAgICAgKiBodG1sL0Jsb2IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjp0eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkJs
b2I6Oml0ZW1zKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OkJsb2IpOgorICAgICAgICAqIGh0
bWwvRmlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWxlOjpGaWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbGU6Om5hbWUpOgorICAgICAgICAqIGh0bWwvRmlsZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsZTo6ZmlsZU5hbWUpOgorICAgICAgICAqIGh0bWwvRmlsZVJlYWRlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWxlUmVhZGVyOjpyZWFkQXNCaW5hcnlTdHJpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsZVJlYWRlcjo6cmVhZEFzVGV4dCk6CisgICAgICAgICogaHRtbC9GaWxl
U3RyZWFtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVTdHJlYW06Om9wZW5Gb3JSZWFkKToK
KyAgICAgICAgKiBodG1sL0Zvcm1EYXRhTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb3Jt
RGF0YUxpc3Q6OmFwcGVuZFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YUxpc3Q6
OmFwcGVuZEJsb2IpOgorICAgICAgICAqIGh0bWwvRm9ybURhdGFMaXN0Lmg6CisgICAgICAgIChX
ZWJDb3JlOjpGb3JtRGF0YUxpc3Q6Oml0ZW1zKToKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6OmNyZWF0ZUZvcm1E
YXRhKToKKyAgICAgICAgKiBodG1sL0hUTUxQcm9ncmVzc0VsZW1lbnQuY3BwOgorICAgICAgICAq
IHBsYXRmb3JtL0Jsb2JJdGVtLmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vQmxvYkl0
ZW0uaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YUVsZW1lbnQ6OkZvcm1EYXRhRWxlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpGb3JtRGF0YTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1E
YXRhOjpjcmVhdGVNdWx0aVBhcnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6OmRlZXBD
b3B5KToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjphcHBlbmREYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OkZvcm1EYXRhOjphcHBlbmRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Rm9y
bURhdGE6OmFwcGVuZEZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6OmFwcGVuZEJs
b2JJdGVtTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YTo6YXBwZW5kRmlsZVJhbmdl
KToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjphcHBlbmRJdGVtcyk6CisgICAgICAgICog
cGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGFF
bGVtZW50OjpGb3JtRGF0YUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGFFbGVt
ZW50OjppdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhRWxlbWVudDo6QmxvYkl0ZW1X
cmFwcGVyOjpCbG9iSXRlbVdyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGFFbGVt
ZW50OjpCbG9iSXRlbVdyYXBwZXI6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGFF
bGVtZW50OjpCbG9iSXRlbVdyYXBwZXI6OmRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURh
dGFFbGVtZW50OjpCbG9iSXRlbVdyYXBwZXI6OnJlbGVhc2VCdWZmZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvciE9KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9uZXR3b3JrL21hYy9Gb3JtRGF0YVN0cmVhbU1hYy5tbToKKyAgICAgICAg
KFdlYkNvcmU6OmNsb3NlQ3VycmVudFN0cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjphZHZhbmNl
Q3VycmVudFN0cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjpmb3JtQ3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OmZvcm1SZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEhUVFBCb2R5KToKKyAg
ICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0
cFJlcXVlc3Q6OnNlbmQpOgorCiAyMDEwLTA1LTI1ICBFbnJpY2EgQ2FzdWNjaSAgPGVucmljYUBh
cHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCmRpZmYgLS1naXQg
YS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCBm
NzA0MGU5OTFiNmE0MTM1NDMyMmU2OWIzMmNiOGQ3MzcwY2U1ZTM3Li5lOWVjMDMxYWM1NGZhYjM4
NjZjNmNkZGVhN2IxODhmYzlmNzI4YWZjIDEwMDY0NAotLS0gYS9XZWJDb3JlL0dOVW1ha2VmaWxl
LmFtCisrKyBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTE1NDIsNiArMTU0Miw4IEBAIHdl
YmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9BcmVuYS5jcHAgXAogCVdlYkNv
cmUvcGxhdGZvcm0vQXJlbmEuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9BdXRvZHJhaW5lZFBvb2wu
aCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9CbG9iSXRlbS5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0v
QmxvYkl0ZW0uaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9Db250ZW50VHlwZS5jcHAgXAogCVdlYkNv
cmUvcGxhdGZvcm0vQ29udGVudFR5cGUuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9Db250ZXh0TWVu
dS5jcHAgXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9XZWJDb3JlL1dlYkNv
cmUuZ3lwaQppbmRleCA1ZmRjYjhiYThiZGVjNmYxMmRkZmQ1MDMxZThmYjNmMWQ4MzJiOGVmLi5j
MWQ0Nzg4YmI2YmRhMmZhZjljZjYwMzg4NTg3YzljMmY0Y2RiNWY4IDEwMDY0NAotLS0gYS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQorKysgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMjg3MCw2ICsy
ODcwLDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9BcmVuYS5jcHAnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL0FyZW5hLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL0F1dG9kcmFpbmVkUG9v
bC5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9CbG9iSXRlbS5jcHAnLAorICAgICAgICAgICAg
J3BsYXRmb3JtL0Jsb2JJdGVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL0NvbnRlbnRUeXBl
LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vQ29udGVudFR5cGUuaCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vQ29udGV4dE1lbnUuY3BwJywKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29y
ZS5wcm8gYi9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IGYwZmM5MzI0NWI2MzYyODNhMmQ2ZGEy
Y2QzZDdjZjRjZWQyZjE5OTAuLjkwYjUzNjQ1NWJjMzlmY2IwZjhkODJiMDJkODgxOTM0NmRhMWVi
MDEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvV2ViQ29yZS9XZWJDb3Jl
LnBybwpAQCAtODEwLDYgKzgxMCw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3JtL2FuaW1h
dGlvbi9BbmltYXRpb24uY3BwIFwKICAgICBwbGF0Zm9ybS9hbmltYXRpb24vQW5pbWF0aW9uTGlz
dC5jcHAgXAogICAgIHBsYXRmb3JtL0FyZW5hLmNwcCBcCisgICAgcGxhdGZvcm0vQmxvYkl0ZW0u
Y3BwIFwKICAgICBwbGF0Zm9ybS90ZXh0L0Jhc2U2NC5jcHAgXAogICAgIHBsYXRmb3JtL3RleHQv
QmlkaUNvbnRleHQuY3BwIFwKICAgICBwbGF0Zm9ybS9Db250ZW50VHlwZS5jcHAgXApAQCAtMTU1
Nyw2ICsxNTU4LDcgQEAgSEVBREVSUyArPSBcCiAgICAgcGxhdGZvcm0vYW5pbWF0aW9uL0FuaW1h
dGlvbi5oIFwKICAgICBwbGF0Zm9ybS9hbmltYXRpb24vQW5pbWF0aW9uTGlzdC5oIFwKICAgICBw
bGF0Zm9ybS9BcmVuYS5oIFwKKyAgICBwbGF0Zm9ybS9CbG9iSXRlbS5oIFwKICAgICBwbGF0Zm9y
bS9Db250ZW50VHlwZS5oIFwKICAgICBwbGF0Zm9ybS9Db250ZXh0TWVudS5oIFwKICAgICBwbGF0
Zm9ybS9Dcm9zc1RocmVhZENvcGllci5oIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS52
Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qCmluZGV4IDg2YTA2OTg1NDlmODBmNWMxN2RlNDg1ZTMzZGJiMGI4NGJmMjgwNTcuLmM0M2U0
YjJlNmNiNjNmMTdjMjZhMDIzODhiZGI3M2IxZGNhODExNzkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
V2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvagpAQCAtMjIzMTMsNiArMjIzMTMsMTQgQEAKIAkJCQk+DQogCQkJPC9G
aWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cQmxvYkl0ZW0u
Y3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0i
Li5ccGxhdGZvcm1cQmxvYkl0ZW0uaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0K
IAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXENvbnRlbnRUeXBlLmNwcCINCiAJCQkJPg0K
IAkJCTwvRmlsZT4NCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IGU0MmNiZmIzZDRjZjY5NzhiMmQxYmMyZWYzMTZkMjY3ZDJjMmVkMjMuLjEzYjRmNmViYjdi
MDMzNjEyMWFlNzc0MjI5Y2M1YzU3MWUyMmRhODMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMjc3LDYgKzIyNzcsOCBAQAogCQk4OTUyNTNERDExNkM0
RUY1MDBDQUJGMDAgLyogRmlsZVN0cmVhbVByb3h5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4OTUyNTNEQjExNkM0RUY1MDBDQUJGMDAgLyogRmlsZVN0
cmVhbVByb3h5LmggKi87IH07CiAJCTg5NTI1M0RGMTE2QzRGMDYwMENBQkYwMCAvKiBGaWxlVGhy
ZWFkVGFzay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
ODk1MjUzREUxMTZDNEYwNjAwQ0FCRjAwIC8qIEZpbGVUaHJlYWRUYXNrLmggKi87IH07CiAJCThG
QUM3NzREMTE5ODcyQ0IwMDE1QUU5NCAvKiBKU01haW5UaHJlYWRFeGVjU3RhdGUuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOEY5MzREODQxMTg5RjFF
RTAwNTA4RDVEIC8qIEpTTWFpblRocmVhZEV4ZWNTdGF0ZS5jcHAgKi87IH07CisJCTg5ODhFMTBF
MTFBMzUwOEIwMERCNzMyRSAvKiBCbG9iSXRlbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4OTg4RTEwQzExQTM1MDhCMDBEQjczMkUgLyogQmxvYkl0
ZW0uY3BwICovOyB9OworCQk4OTg4RTEwRjExQTM1MDhCMDBEQjczMkUgLyogQmxvYkl0ZW0uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg5ODhFMTBEMTFB
MzUwOEIwMERCNzMyRSAvKiBCbG9iSXRlbS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTkzMDJCMEJEMEQ3OUY4MjkwMEM3RUU4MyAvKiBQYWdlR3Jv
dXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMw
MkIwQkMwRDc5RjgyOTAwQzdFRTgzIC8qIFBhZ2VHcm91cC5jcHAgKi87IH07CiAJCTkzMDJCMEJG
MEQ3OUY4MkMwMEM3RUU4MyAvKiBQYWdlR3JvdXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMDJCMEJFMEQ3OUY4MkMwMEM3RUU4MyAvKiBQYWdlR3Jv
dXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5
MzA1QjI0RDA5OEYxQjZCMDBDMjg4NTUgLyogVGltZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMDVCMjRDMDk4RjFCNkIwMEMyODg1NSAvKiBUaW1l
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC03
ODYzLDYgKzc4NjUsOCBAQAogCQk4OTUyNTNERTExNkM0RjA2MDBDQUJGMDAgLyogRmlsZVRocmVh
ZFRhc2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsZVRocmVhZFRhc2su
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOEY5MzREODMxMTg5RjFFRTAwNTA4RDVE
IC8qIEpTTWFpblRocmVhZEV4ZWNTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU01haW5UaHJlYWRFeGVjU3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJOEY5MzREODQxMTg5RjFFRTAwNTA4RDVEIC8qIEpTTWFpblRocmVhZEV4ZWNTdGF0ZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU01haW5UaHJlYWRFeGVjU3Rh
dGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4OTg4RTEwQzExQTM1MDhCMDBE
QjczMkUgLyogQmxvYkl0ZW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gQmxvYkl0ZW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4OTg4RTEwRDEx
QTM1MDhCMDBEQjczMkUgLyogQmxvYkl0ZW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQmxvYkl0ZW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMwMkIwQkMw
RDc5RjgyOTAwQzdFRTgzIC8qIFBhZ2VHcm91cC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBQYWdlR3JvdXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5MzAyQjBCRTBENzlGODJDMDBDN0VFODMgLyogUGFnZUdyb3VwLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFBhZ2VHcm91cC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk5MzA1QjI0QzA5OEYxQjZCMDBDMjg4NTUgLyogVGltZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVGltZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTE1Nzg3LDYgKzE1NzkxLDggQEAKIAkJCQlCQ0ZCMkY3NDA5N0EyRTFBMDBCQTcwM0QgLyogQXJl
bmEuY3BwICovLAogCQkJCUJDRkIyRjc1MDk3QTJFMUEwMEJBNzAzRCAvKiBBcmVuYS5oICovLAog
CQkJCTUxRTFFQ0IxMEM5MUM1NTYwMERDMjU1QiAvKiBBdXRvZHJhaW5lZFBvb2wuaCAqLywKKwkJ
CQk4OTg4RTEwQzExQTM1MDhCMDBEQjczMkUgLyogQmxvYkl0ZW0uY3BwICovLAorCQkJCTg5ODhF
MTBEMTFBMzUwOEIwMERCNzMyRSAvKiBCbG9iSXRlbS5oICovLAogCQkJCUJDQzhDRkNBMDk4NkNE
MjQwMDE0MEJGMiAvKiBDb2xvckRhdGEuZ3BlcmYgKi8sCiAJCQkJNDFEMDE1QzkwRjRCNUM3MTAw
NEE2NjJGIC8qIENvbnRlbnRUeXBlLmNwcCAqLywKIAkJCQk0MUQwMTVDODBGNEI1QzcxMDA0QTY2
MkYgLyogQ29udGVudFR5cGUuaCAqLywKQEAgLTE2ODIyLDYgKzE2ODI4LDcgQEAKIAkJCQlCQzVF
QjkyMDBFODIwNDA4MDBCMjU5NjUgLyogQmluZGluZ1VSSS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTg5OTQzMjgwQjQyMzM4ODAwRDdDODAyIC8qIEJpdG1hcEltYWdlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkyRUFGQUYwRjEwRTJBRjJEMDA3RUQzRDYgLyogQmxvYi5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJODk4OEUxMEYxMUEzNTA4QjAwREI3MzJFIC8qIEJsb2JJdGVtLmggaW4gSGVhZGVycyAqLywK
IAkJCQk5M0YxOTlCRTA4MjQ1RTU5MDAxRTlBQkMgLyogQmxvY2tFeGNlcHRpb25zLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzVFQjVFMTBFODFCRTg3MDBCMjU5NjUgLyogQm9yZGVyRGF0YS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkM1RUI1REIwRTgxQjdFQTAwQjI1OTY1IC8qIEJvcmRlclZhbHVl
LmggaW4gSGVhZGVycyAqLywKQEAgLTE5NjQyLDYgKzE5NjQ5LDcgQEAKIAkJCQlCQzVFQjkxRjBF
ODIwNDA4MDBCMjU5NjUgLyogQmluZGluZ1VSSS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODk5
NDMyOTBCNDIzMzg4MDBEN0M4MDIgLyogQml0bWFwSW1hZ2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMkVBRkFGMEUxMEUyQUYyRDAwN0VEM0Q2IC8qIEJsb2IuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJODk4OEUxMEUxMUEzNTA4QjAwREI3MzJFIC8qIEJsb2JJdGVtLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTkzRjE5QUUxMDgyNDVFNTkwMDFFOUFCQyAvKiBCbG9ja0V4Y2VwdGlvbnMubW0gaW4g
U291cmNlcyAqLywKIAkJCQlCQ0VBNDg1NDA5N0Q5MzAyMDA5NEM5RTQgLyogYnJlYWtfbGluZXMu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzMDlEREEwOTlFNjQ5MjAwNTZFNTgxIC8qIEJyZWFr
QmxvY2txdW90ZUNvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yMDM5MCw4ICsyMDM5OCw4
IEBACiAJCQkJNTFFQzkyNjUwQ0U5MERENDAwRjkwMzA4IC8qIEpTQ3VzdG9tU1FMU3RhdGVtZW50
RXJyb3JDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTM0MTdDQTBDRUNGRjI1MDA0
OUNCREUgLyogSlNDdXN0b21Wb2lkQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTEw
QjkzQzMwQjczQzI5MTAwM0VEODkwIC8qIEpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcCBpbiBT
b3VyY2VzICovLAotCQkJCTFBRTgyRjhGMENBQUZBOUQwMDIyMzdBRSAvKiBKU0RhdGFiYXNlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUJDQ0U1OEFDMTA2MUU4Q0YwMDhGQjM1QSAvKiBKU0RhdGFi
YXNlQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTFBRTgyRjhGMENBQUZBOUQwMDIyMzdB
RSAvKiBKU0RhdGFiYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNzdEMTY5MEZGMTlGNTYw
MDcwODg3QiAvKiBKU0RhdGFHcmlkQ29sdW1uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNzdE
MTZCMEZGMTlGNTYwMDcwODg3QiAvKiBKU0RhdGFHcmlkQ29sdW1uTGlzdC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCQzc3RDE1MjBGRjE5QzczMDA3MDg4N0IgLyogSlNEYXRhR3JpZENvbHVtbkxp
c3RDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvQmxv
Yi5jcHAgYi9XZWJDb3JlL2h0bWwvQmxvYi5jcHAKaW5kZXggODNiYmRjMGM1MjY0ODQ1NDI2ODgx
OTI2MjE2ODRiNjI4MjAyNGJmNC4uYjFmMmRmN2EwMzFiZDQ0NmY0Y2QwY2Y5OTZiYzM5ZjFjOGY0
OTg0MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0Jsb2IuY3BwCisrKyBiL1dlYkNvcmUvaHRt
bC9CbG9iLmNwcApAQCAtMjksOTAgKzI5LDY4IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5o
IgorCiAjaW5jbHVkZSAiQmxvYi5oIgogCisjaW5jbHVkZSAiQmxvYkl0ZW0uaCIKICNpbmNsdWRl
ICJGaWxlU3lzdGVtLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotI2lmIEVOQUJMRShCTE9C
X1NMSUNFKQotY29uc3QgaW50IEJsb2I6OnRvRW5kT2ZGaWxlID0gLTE7Ci1jb25zdCBkb3VibGUg
QmxvYjo6ZG9Ob3RDaGVja0ZpbGVDaGFuZ2UgPSAwOwotI2VuZGlmCi0KIEJsb2I6OkJsb2IoY29u
c3QgU3RyaW5nJiBwYXRoKQotICAgIDogbV9wYXRoKHBhdGgpCi0jaWYgRU5BQkxFKEJMT0JfU0xJ
Q0UpCi0gICAgLCBtX3N0YXJ0KDApCi0gICAgLCBtX2xlbmd0aCh0b0VuZE9mRmlsZSkKLSAgICAs
IG1fc25hcHNob3RDYXB0dXJlZChmYWxzZSkKLSAgICAsIG1fc25hcHNob3RTaXplKDApCi0gICAg
LCBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZShkb05vdENoZWNrRmlsZUNoYW5nZSkKLSNlbmRp
ZgogeworICAgIC8vIE5vdGU6IHRoaXMgZG9lc24ndCBpbml0aWFsaXplIHRoZSB0eXBlIHVubGlr
ZSBGaWxlKHBhdGgpLgorICAgIGFwcGVuZChGaWxlQmxvYkl0ZW06OmNyZWF0ZShwYXRoKSk7CiB9
CiAKLSNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLUJsb2I6OkJsb2IoY29uc3QgU3RyaW5nJiBwYXRo
LCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgsIGxvbmcgbG9uZyBzbmFwc2hvdFNp
emUsIGRvdWJsZSBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUpCi0gICAgOiBtX3BhdGgocGF0aCkK
LSAgICAsIG1fc3RhcnQoc3RhcnQpCi0gICAgLCBtX2xlbmd0aChsZW5ndGgpCi0gICAgLCBtX3Nu
YXBzaG90Q2FwdHVyZWQodHJ1ZSkKLSAgICAsIG1fc25hcHNob3RTaXplKHNuYXBzaG90U2l6ZSkK
LSAgICAsIG1fc25hcHNob3RNb2RpZmljYXRpb25UaW1lKHNuYXBzaG90TW9kaWZpY2F0aW9uVGlt
ZSkKLXsKLSAgICBBU1NFUlQoc3RhcnQgPj0gMCAmJiBsZW5ndGggPj0gMCAmJiBzdGFydCArIGxl
bmd0aCA8PSBzbmFwc2hvdFNpemUgJiYgc25hcHNob3RNb2RpZmljYXRpb25UaW1lKTsKLX0KLSNl
bmRpZgotCiB1bnNpZ25lZCBsb25nIGxvbmcgQmxvYjo6c2l6ZSgpIGNvbnN0CiB7CiAgICAgLy8g
RklYTUU6IEphdmFTY3JpcHQgY2Fubm90IHJlcHJlc2VudCBzaXplcyBhcyBsYXJnZSBhcyB1bnNp
Z25lZCBsb25nIGxvbmcsIHdlIG5lZWQgdG8KICAgICAvLyBjb21lIHVwIHdpdGggYW4gZXhjZXB0
aW9uIHRvIHRocm93IGlmIGZpbGUgc2l6ZSBpcyBub3QgcmVwcmVzZXRhYmxlLgotI2lmIEVOQUJM
RShCTE9CX1NMSUNFKQotICAgIGlmIChtX3NuYXBzaG90Q2FwdHVyZWQpCi0gICAgICAgIHJldHVy
biBtX2xlbmd0aDsKLSNlbmRpZgotICAgIGxvbmcgbG9uZyBzaXplOwotICAgIGlmICghZ2V0Rmls
ZVNpemUobV9wYXRoLCBzaXplKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oc2l6ZSk7CisgICAgdW5zaWduZWQgbG9uZyBsb25n
IHNpemUgPSAwOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9pdGVtcy5zaXplKCk7ICsr
aSkKKyAgICAgICAgc2l6ZSArPSBtX2l0ZW1zW2ldLT5zaXplKCk7CisgICAgcmV0dXJuIHNpemU7
Cit9CisKK2NvbnN0IFN0cmluZyYgQmxvYjo6cGF0aCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1f
aXRlbXMuc2l6ZSgpID09IDEgJiYgbV9pdGVtc1swXS0+dG9GaWxlQmxvYkl0ZW0oKSk7CisgICAg
cmV0dXJuIG1faXRlbXNbMF0tPnRvRmlsZUJsb2JJdGVtKCktPnBhdGgoKTsKK30KKwordm9pZCBC
bG9iOjphcHBlbmQoUGFzc1JlZlB0cjxCbG9iSXRlbT4gaXRlbSkKK3sKKyAgICBtX2l0ZW1zLmFw
cGVuZChpdGVtKTsKIH0KIAogI2lmIEVOQUJMRShCTE9CX1NMSUNFKQogUGFzc1JlZlB0cjxCbG9i
PiBCbG9iOjpzbGljZShsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgpIGNvbnN0CiB7
Ci0gICAgLy8gV2hlbiB3ZSBzbGljZSBhIGZpbGUgZm9yIHRoZSBmaXJzdCB0aW1lLCB3ZSBvYnRh
aW4gYSBzbmFwc2hvdCBvZiB0aGUgZmlsZSBieSBjYXB0dXJpbmcgaXRzIGN1cnJlbnQgc2l6ZSBh
bmQgbW9kaWZpY2F0aW9uIHRpbWUuCi0gICAgLy8gVGhlIG1vZGlmaWNhdGlvbiB0aW1lIHdpbGwg
YmUgdXNlZCB0byB2ZXJpZnkgaWYgdGhlIGZpbGUgaGFzIGJlZW4gY2hhbmdlZCBvciBub3QsIHdo
ZW4gdGhlIHVuZGVybHlpbmcgZGF0YSBhcmUgYWNjZXNzZWQuCi0gICAgbG9uZyBsb25nIHNuYXBz
aG90U2l6ZTsKLSAgICBkb3VibGUgc25hcHNob3RNb2RpZmljYXRpb25UaW1lOwotICAgIGlmICht
X3NuYXBzaG90Q2FwdHVyZWQpIHsKLSAgICAgICAgc25hcHNob3RTaXplID0gbV9zbmFwc2hvdFNp
emU7Ci0gICAgICAgIHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSA9IG1fc25hcHNob3RNb2RpZmlj
YXRpb25UaW1lOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIElmIHdlIGZhaWwgdG8gcmV0cmll
dmUgdGhlIHNpemUgb3IgbW9kaWZpY2F0aW9uIHRpbWUsIHByb2JhYmx5IGR1ZSB0byB0aGF0IHRo
ZSBmaWxlIGhhcyBiZWVuIGRlbGV0ZWQsIGFuIGVtcHR5IGJsb2Igd2lsbCBiZSByZXR1cm5lZC4K
LSAgICAgICAgdGltZV90IG1vZGlmaWNhdGlvblRpbWU7Ci0gICAgICAgIGlmICghZ2V0RmlsZVNp
emUobV9wYXRoLCBzbmFwc2hvdFNpemUpIHx8ICFnZXRGaWxlTW9kaWZpY2F0aW9uVGltZShtX3Bh
dGgsIG1vZGlmaWNhdGlvblRpbWUpKSB7Ci0gICAgICAgICAgICBzbmFwc2hvdFNpemUgPSAwOwot
ICAgICAgICAgICAgc25hcHNob3RNb2RpZmljYXRpb25UaW1lID0gMDsKLSAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUgPSBtb2RpZmljYXRpb25UaW1l
OwotICAgIH0KLQotICAgIC8vIENsYW1wIHRoZSByYW5nZSBpZiBpdCBleGNlZWRzIHRoZSBzaXpl
IGxpbWl0LgogICAgIGlmIChzdGFydCA8IDApCiAgICAgICAgIHN0YXJ0ID0gMDsKICAgICBpZiAo
bGVuZ3RoIDwgMCkKICAgICAgICAgbGVuZ3RoID0gMDsKIAotICAgIGlmIChzdGFydCA+IHNuYXBz
aG90U2l6ZSkgeworICAgIC8vIENsYW1wIHRoZSByYW5nZSBpZiBpdCBleGNlZWRzIHRoZSBzaXpl
IGxpbWl0LgorICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbFNpemUgPSBzaXplKCk7CisgICAg
aWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oc3RhcnQpID4gdG90YWxTaXplKSB7
CiAgICAgICAgIHN0YXJ0ID0gMDsKICAgICAgICAgbGVuZ3RoID0gMDsKLSAgICB9IGVsc2UgaWYg
KHN0YXJ0ICsgbGVuZ3RoID4gc25hcHNob3RTaXplKQotICAgICAgICBsZW5ndGggPSBzbmFwc2hv
dFNpemUgLSBzdGFydDsKKyAgICB9IGVsc2UgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcg
bG9uZz4oc3RhcnQgKyBsZW5ndGgpID4gdG90YWxTaXplKQorICAgICAgICBsZW5ndGggPSB0b3Rh
bFNpemUgLSBzdGFydDsKIAotICAgIHJldHVybiBhZG9wdFJlZihuZXcgQmxvYihtX3BhdGgsIG1f
c3RhcnQgKyBzdGFydCwgbGVuZ3RoLCBzbmFwc2hvdFNpemUsIHNuYXBzaG90TW9kaWZpY2F0aW9u
VGltZSkpOworICAgIHNpemVfdCBpID0gMDsKKyAgICBSZWZQdHI8QmxvYj4gYmxvYiA9IEJsb2I6
OmNyZWF0ZSgpOworICAgIGZvciAoOyBpIDwgbV9pdGVtcy5zaXplKCkgJiYgc3RhdGljX2Nhc3Q8
dW5zaWduZWQgbG9uZyBsb25nPihzdGFydCkgPj0gbV9pdGVtc1tpXS0+c2l6ZSgpOyArK2kpCisg
ICAgICAgIHN0YXJ0IC09IG1faXRlbXNbaV0tPnNpemUoKTsKKyAgICBmb3IgKDsgbGVuZ3RoID4g
MCAmJiBpIDwgbV9pdGVtcy5zaXplKCk7ICsraSkgeworICAgICAgICBibG9iLT5tX2l0ZW1zLmFw
cGVuZChtX2l0ZW1zW2ldLT5zbGljZShzdGFydCwgbGVuZ3RoKSk7CisgICAgICAgIGxlbmd0aCAt
PSBibG9iLT5tX2l0ZW1zLmxhc3QoKS0+c2l6ZSgpOworICAgICAgICBzdGFydCA9IDA7CisgICAg
fQorICAgIHJldHVybiBibG9iLnJlbGVhc2UoKTsKIH0KLSNlbmRpZgorI2VuZGlmIC8vIEVOQUJM
RShCTE9CX1NMSUNFKQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2h0bWwvQmxvYi5oIGIvV2ViQ29yZS9odG1sL0Jsb2IuaAppbmRleCBlOGI1ZjNmZGYwNjlh
MmI0ODc2ZWQxNmFiODFiMjJmMGZmMDM4OTcwLi4zOTE3N2I1MWVlOWQwNzg2ODNmMjAyYTY1MWRm
NTgyMzhmMjc0OTU3IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvQmxvYi5oCisrKyBiL1dlYkNv
cmUvaHRtbC9CbG9iLmgKQEAgLTMxLDIxICszMSwyNCBAQAogI2lmbmRlZiBCbG9iX2gKICNkZWZp
bmUgQmxvYl9oCiAKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiQmxvYkl0
ZW0uaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUgPHRpbWUuaD4KICNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Cisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEJs
b2IgOiBwdWJsaWMgUmVmQ291bnRlZDxCbG9iPiB7CiBwdWJsaWM6Ci0jaWYgRU5BQkxFKEJMT0Jf
U0xJQ0UpCi0gICAgc3RhdGljIGNvbnN0IGludCB0b0VuZE9mRmlsZTsKLSAgICBzdGF0aWMgY29u
c3QgZG91YmxlIGRvTm90Q2hlY2tGaWxlQ2hhbmdlOwotI2VuZGlmCisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8QmxvYj4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
QmxvYigpKTsKKyAgICB9CiAKKyAgICAvLyBGSVhNRTogRGVwcmVjYXRlZCBtZXRob2QuICBUaGlz
IGlzIGNhbGxlZCBvbmx5IGZyb20KKyAgICAvLyBiaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0
VmFsdWUuY3BwIGFuZCB0aGUgdXNhZ2UgaW4gaXQgd2lsbCBiZWNvbWUgaW52YWxpZCBvbmNlCisg
ICAgLy8gQmxvYkJ1aWxkZXIgaXMgaW50cm9kdWNlZC4KICAgICBzdGF0aWMgUGFzc1JlZlB0cjxC
bG9iPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBwYXRoKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBCbG9iKHBhdGgpKTsKQEAgLTUzLDQ3ICs1NiwyOCBAQCBwdWJsaWM6CiAKICAg
ICB2aXJ0dWFsIH5CbG9iKCkgeyB9CiAKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSgpIGNv
bnN0OworICAgIGNvbnN0IFN0cmluZyYgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQog
ICAgIHZpcnR1YWwgYm9vbCBpc0ZpbGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCi0jaWYg
RU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgUGFzc1JlZlB0cjxCbG9iPiBzbGljZShsb25nIGxvbmcg
c3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgpIGNvbnN0OwotI2VuZGlmCi0KLSAgICBjb25zdCBTdHJp
bmcmIHBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0KLSAgICB1bnNpZ25lZCBsb25nIGxv
bmcgc2l6ZSgpIGNvbnN0OwotI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgIGxvbmcgbG9uZyBz
dGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnQ7IH0KLSAgICBsb25nIGxvbmcgbGVuZ3RoKCkg
Y29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KLSAgICBkb3VibGUgbW9kaWZpY2F0aW9uVGltZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc25hcHNob3RNb2RpZmljYXRpb25UaW1lOyB9Ci0jZW5kaWYKKyAg
ICAvLyBGSVhNRTogRGVwcmVjYXRlZCBtZXRob2QuCisgICAgY29uc3QgU3RyaW5nJiBwYXRoKCkg
Y29uc3Q7CiAKLXByb3RlY3RlZDoKLSAgICBCbG9iKGNvbnN0IFN0cmluZyYgcGF0aCk7CisgICAg
dm9pZCBhcHBlbmQoUGFzc1JlZlB0cjxCbG9iSXRlbT4pOworICAgIGNvbnN0IEJsb2JJdGVtTGlz
dCYgaXRlbXMoKSBjb25zdCB7IHJldHVybiBtX2l0ZW1zOyB9CiAKLXByaXZhdGU6CiAjaWYgRU5B
QkxFKEJMT0JfU0xJQ0UpCi0gICAgQmxvYihjb25zdCBTdHJpbmcmIHBhdGgsIGxvbmcgbG9uZyBz
dGFydCwgbG9uZyBsb25nIGxlbmd0aCwgbG9uZyBsb25nIHNuYXBzaG90U2l6ZSwgZG91YmxlIHNu
YXBzaG90TW9kaWZpY2F0aW9uVGltZSk7CisgICAgUGFzc1JlZlB0cjxCbG9iPiBzbGljZShsb25n
IGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgpIGNvbnN0OwogI2VuZGlmCiAKLSAgICAvLyBU
aGUgdW5kZXJseWluZyBwYXRoIG9mIHRoZSBmaWxlLWJhc2VkIGJsb2IuIAotICAgIFN0cmluZyBt
X3BhdGg7Ci0KLSNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAgICAvLyBUaGUgc3RhcnRpbmcgcG9z
aXRpb24gb2YgdGhlIGZpbGUtYmFzZWQgYmxvYi4KLSAgICBsb25nIGxvbmcgbV9zdGFydDsKLQot
ICAgIC8vIFRoZSBsZW5ndGggb2YgdGhlIGZpbGUtYmFzZWQgYmxvYi4gVGhlIHZhbHVlIG9mIC0x
IG1lYW5zIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUuCi0gICAgbG9uZyBsb25nIG1fbGVuZ3RoOwot
Ci0gICAgLy8gQSBmbGFnIHRvIHRlbGwgaWYgYSBzbmFwc2hvdCBoYXMgYmVlbiBjYXB0dXJlZC4K
LSAgICBib29sIG1fc25hcHNob3RDYXB0dXJlZDsKK3Byb3RlY3RlZDoKKyAgICBCbG9iKCkgeyB9
CiAKLSAgICAvLyBUaGUgc2l6ZSBvZiB0aGUgZmlsZSB3aGVuIGEgc25hcHNob3QgaXMgY2FwdHVy
ZWQuIEl0IGNhbiBiZSAwIGlmIHRoZSBmaWxlIGlzIGVtcHR5LgotICAgIGxvbmcgbG9uZyBtX3Nu
YXBzaG90U2l6ZTsKKyAgICAvLyBGSVhNRTogRGVwcmVjYXRlZCBjb25zdHJ1Y3Rvci4gIFNlZSBh
bHNvIHRoZSBjb21tZW50IGZvciBCbG9iOjpjcmVhdGUocGF0aCkuCisgICAgQmxvYihjb25zdCBT
dHJpbmcmIHBhdGgpOwogCi0gICAgLy8gVGhlIGxhc3QgbW9kaWZpY2F0aW9uIHRpbWUgb2YgdGhl
IGZpbGUgd2hlbiBhIHNuYXBzaG90IGlzIGNhcHR1cmVkLiBUaGUgdmFsdWUgb2YgMCBhbHNvIG1l
YW5zIHRoYXQgdGhlIHNuYXBzaG90IGlzIG5vdCBjYXB0dXJlZC4KLSAgICBkb3VibGUgbV9zbmFw
c2hvdE1vZGlmaWNhdGlvblRpbWU7Ci0jZW5kaWYKKyAgICBCbG9iSXRlbUxpc3QgbV9pdGVtczsK
KyAgICBTdHJpbmcgbV90eXBlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9odG1sL0ZpbGUuY3BwIGIvV2ViQ29yZS9odG1sL0ZpbGUuY3BwCmluZGV4
IDk3ZmRjNDU3OGQ3NGIyMjVlNTk0NmY0ZDZhZWYyNTY1MjU0NDNhZTQuLjJjOWNlNTNiODNjYjBk
Zjc5YTg1OTUyMmRjOTE2ZjI1NWJkODRjYzMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9GaWxl
LmNwcAorKysgYi9XZWJDb3JlL2h0bWwvRmlsZS5jcHAKQEAgLTMzLDEyICszMywxNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIEZpbGU6OkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKQogICAgIDog
QmxvYihwYXRoKQotICAgICwgbV9uYW1lKHBhdGhHZXRGaWxlTmFtZShwYXRoKSkKIHsKICAgICAv
LyBXZSBkb24ndCB1c2UgTUlNRVR5cGVSZWdpc3RyeTo6Z2V0TUlNRVR5cGVGb3JQYXRoKCkgYmVj
YXVzZSBpdCByZXR1cm5zICJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iIHVwb24gZmFpbHVyZS4K
LSAgICBpbnQgaW5kZXggPSBtX25hbWUucmV2ZXJzZUZpbmQoJy4nKTsKKyAgICBjb25zdCBTdHJp
bmcmIGZpbGVOYW1lID0gbmFtZSgpOworICAgIGludCBpbmRleCA9IGZpbGVOYW1lLnJldmVyc2VG
aW5kKCcuJyk7CiAgICAgaWYgKGluZGV4ICE9IC0xKQotICAgICAgICBtX3R5cGUgPSBNSU1FVHlw
ZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZvckV4dGVuc2lvbihtX25hbWUuc3Vic3RyaW5nKGluZGV4
ICsgMSkpOworICAgICAgICBtX3R5cGUgPSBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZv
ckV4dGVuc2lvbihmaWxlTmFtZS5zdWJzdHJpbmcoaW5kZXggKyAxKSk7Cit9CisKK2NvbnN0IFN0
cmluZyYgRmlsZTo6bmFtZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGl0ZW1zKCkuYXQoMCktPnRv
RmlsZUJsb2JJdGVtKCktPm5hbWUoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9odG1sL0ZpbGUuaCBiL1dlYkNvcmUvaHRtbC9GaWxlLmgKaW5kZXgg
MDY1ZGQ4NmE3YjFlYmY3N2ZiNDA2NDZmOWM2ZTg3MDQ2OWQ3ZWIwOS4uNTgyZGIyODUwM2JmZmYy
Yjk1OGUzZDUyNTVlZjdhYmU5YTYwNTY5YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0ZpbGUu
aAorKysgYi9XZWJDb3JlL2h0bWwvRmlsZS5oCkBAIC00MSwxOCArNDEsMTQgQEAgcHVibGljOgog
CiAgICAgdmlydHVhbCBib29sIGlzRmlsZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAotICAg
IGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQotICAgIGNvbnN0
IFN0cmluZyYgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgIGNvbnN0IFN0cmlu
ZyYgbmFtZSgpIGNvbnN0OwogCiAgICAgLy8gRklYTUU6IG9ic29sZXRlIGF0dHJpYnV0ZXMuIFRv
IGJlIHJlbW92ZWQuCi0gICAgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSgpIGNvbnN0IHsgcmV0dXJu
IG1fbmFtZTsgfQorICAgIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUoKSBjb25zdCB7IHJldHVybiBu
YW1lKCk7IH0KICAgICB1bnNpZ25lZCBsb25nIGxvbmcgZmlsZVNpemUoKSBjb25zdCB7IHJldHVy
biBzaXplKCk7IH0KIAogcHJpdmF0ZToKICAgICBGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCk7Ci0K
LSAgICBTdHJpbmcgbV9uYW1lOwotICAgIFN0cmluZyBtX3R5cGU7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvRmlsZVJlYWRlci5jcHAgYi9X
ZWJDb3JlL2h0bWwvRmlsZVJlYWRlci5jcHAKaW5kZXggMzQ0MjM0MjI3NTgxMjdiZWQ3NzM4NzJj
NGZmMzFmYTAxZGZhYzRlNC4uMmUwMjBjMTEzNTA1Y2NiNmY0NDNhOGQyNTZiMGU5YTFiYWIwODAz
NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0ZpbGVSZWFkZXIuY3BwCisrKyBiL1dlYkNvcmUv
aHRtbC9GaWxlUmVhZGVyLmNwcApAQCAtODUsNiArODUsNyBAQCB2b2lkIEZpbGVSZWFkZXI6OnN0
b3AoKQogCiB2b2lkIEZpbGVSZWFkZXI6OnJlYWRBc0JpbmFyeVN0cmluZyhCbG9iKiBmaWxlQmxv
YikKIHsKKyAgICAvLyBGSVhNRTogbmVlZHMgdG8gaGFuZGxlIG5vbi1maWxlIGJsb2JzLgogICAg
IExPRyhGaWxlQVBJLCAiRmlsZVJlYWRlcjogcmVhZGluZyBhcyBiaW5hcnk6ICVzXG4iLCBmaWxl
QmxvYi0+cGF0aCgpLnV0ZjgoKS5kYXRhKCkpOwogCiAgICAgcmVhZEludGVybmFsKGZpbGVCbG9i
LCBSZWFkRmlsZUFzQmluYXJ5U3RyaW5nKTsKQEAgLTkyLDYgKzkzLDcgQEAgdm9pZCBGaWxlUmVh
ZGVyOjpyZWFkQXNCaW5hcnlTdHJpbmcoQmxvYiogZmlsZUJsb2IpCiAKIHZvaWQgRmlsZVJlYWRl
cjo6cmVhZEFzVGV4dChCbG9iKiBmaWxlQmxvYiwgY29uc3QgU3RyaW5nJiBlbmNvZGluZykKIHsK
KyAgICAvLyBGSVhNRTogbmVlZHMgdG8gaGFuZGxlIG5vbi1maWxlIGJsb2JzLgogICAgIExPRyhG
aWxlQVBJLCAiRmlsZVJlYWRlcjogcmVhZGluZyBhcyB0ZXh0OiAlc1xuIiwgZmlsZUJsb2ItPnBh
dGgoKS51dGY4KCkuZGF0YSgpKTsKIAogICAgIGlmICghZW5jb2RpbmcuaXNFbXB0eSgpKQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9odG1sL0ZpbGVTdHJlYW0uY3BwIGIvV2ViQ29yZS9odG1sL0ZpbGVT
dHJlYW0uY3BwCmluZGV4IDcwODlmNjE2MTU0ZTRiMTBhMzI3NzNlMDMzNTZhNzkzNjQ1OGY5N2Yu
LmY4NTliNjNhMWMxYjM0YzM2ZTc0YzA5MTI0ZmEwOTEzZjZhZjY3MDQgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvaHRtbC9GaWxlU3RyZWFtLmNwcAorKysgYi9XZWJDb3JlL2h0bWwvRmlsZVN0cmVhbS5j
cHAKQEAgLTcyLDQ4ICs3Miw1MyBAQCB2b2lkIEZpbGVTdHJlYW06Om9wZW5Gb3JSZWFkKEJsb2Iq
IGJsb2IpCiAgICAgaWYgKGlzSGFuZGxlVmFsaWQobV9oYW5kbGUpKQogICAgICAgICByZXR1cm47
CiAKKyAgICAvLyBGSVhNRTogTmVlZCB0byBoYW5kbGUgbXVsdGlwbGUgaXRlbXMgdGhhdCBtYXkg
aW5jbHVkZSBub24tZmlsZSBvbmVzIHdoZW4gQmxvYkJ1aWxkZXIgaXMgaW50cm9kdWNlZC4KKyAg
ICBBU1NFUlQoYmxvYi0+aXRlbXMoKS5zaXplKCkgPj0gMSk7CisgICAgY29uc3QgRmlsZUJsb2JJ
dGVtKiBmaWxlSXRlbSA9IGJsb2ItPml0ZW1zKCkuYXQoMCktPnRvRmlsZUJsb2JJdGVtKCk7Cisg
ICAgaWYgKCFmaWxlSXRlbSkgeworICAgICAgICBBU1NFUlQoZmFsc2UpOworICAgICAgICBtX2Ns
aWVudC0+ZGlkRmFpbChOT1RfUkVBREFCTEVfRVJSKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KwogICAgIC8vIENoZWNrIGlmIHRoZSBmaWxlIGV4aXN0cyBieSBxdWVyeWluZyBpdHMgbW9kaWZp
Y2F0aW9uIHRpbWUuIFdlIGNob29zZSBub3QgdG8gY2FsbCBmaWxlRXhpc3RzKCkgaW4gb3JkZXIg
dG8gc2F2ZSBhbgogICAgIC8vIGV4dHJhIGZpbGUgc3lzdGVtIGNhbGwgd2hlbiB0aGUgbW9kaWZp
Y2F0aW9uIHRpbWUgaXMgbmVlZGVkIHRvIGNoZWNrIHRoZSB2YWxpZGl0eSBvZiB0aGUgc2xpY2Vk
IGZpbGUgYmxvYi4KICAgICAvLyBQZXIgdGhlIHNwZWMsIHdlIG5lZWQgdG8gcmV0dXJuIGRpZmZl
cmVudCBlcnJvciBjb2RlcyB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gbm9uLWV4aXN0ZW50IGZp
bGUgYW5kIHBlcm1pc3Npb24gZXJyb3IuCiAgICAgLy8gb3BlbkZpbGUoKSBjb3VsZCBub3QgdGVs
bCB1c2UgdGhlIGZhaWx1cmUgcmVhc29uLgogICAgIHRpbWVfdCBjdXJyZW50TW9kaWZpY2F0aW9u
VGltZTsKLSAgICBpZiAoIWdldEZpbGVNb2RpZmljYXRpb25UaW1lKGJsb2ItPnBhdGgoKSwgY3Vy
cmVudE1vZGlmaWNhdGlvblRpbWUpKSB7CisgICAgaWYgKCFnZXRGaWxlTW9kaWZpY2F0aW9uVGlt
ZShmaWxlSXRlbS0+cGF0aCgpLCBjdXJyZW50TW9kaWZpY2F0aW9uVGltZSkpIHsKICAgICAgICAg
bV9jbGllbnQtPmRpZEZhaWwoTk9UX0ZPVU5EX0VSUik7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKICAgICAvLyBPcGVuIHRoZSBmaWxlIGJsb2IuCi0gICAgbV9oYW5kbGUgPSBvcGVuRmlsZShi
bG9iLT5wYXRoKCksIE9wZW5Gb3JSZWFkKTsKKyAgICBtX2hhbmRsZSA9IG9wZW5GaWxlKGZpbGVJ
dGVtLT5wYXRoKCksIE9wZW5Gb3JSZWFkKTsKICAgICBpZiAoIWlzSGFuZGxlVmFsaWQobV9oYW5k
bGUpKSB7CiAgICAgICAgIG1fY2xpZW50LT5kaWRGYWlsKE5PVF9SRUFEQUJMRV9FUlIpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCiAjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgLy8gQ2hl
Y2sgdGhlIG1vZGlmaWNhdGlvbnQgdGltZSBmb3IgdGhlIHBvc3NpYmxlIGZpbGUgY2hhbmdlLgot
ICAgIGlmIChibG9iLT5tb2RpZmljYXRpb25UaW1lKCkgIT0gQmxvYjo6ZG9Ob3RDaGVja0ZpbGVD
aGFuZ2UgJiYgc3RhdGljX2Nhc3Q8dGltZV90PihibG9iLT5tb2RpZmljYXRpb25UaW1lKCkpICE9
IGN1cnJlbnRNb2RpZmljYXRpb25UaW1lKSB7Ci0gICAgICAgIG1fY2xpZW50LT5kaWRGYWlsKE5P
VF9SRUFEQUJMRV9FUlIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gSnVtcCB0
byB0aGUgYmVnaW5uaW5nIHBvc2l0aW9uIGlmIHRoZSBmaWxlIGhhcyBiZWVuIHNsaWNlZC4KLSAg
ICBpZiAoYmxvYi0+c3RhcnQoKSA+IDApIHsKLSAgICAgICAgaWYgKCFzZWVrRmlsZShtX2hhbmRs
ZSwgYmxvYi0+c3RhcnQoKSwgU2Vla0Zyb21CZWdpbm5pbmcpKSB7CisgICAgY29uc3QgRmlsZVJh
bmdlQmxvYkl0ZW0qIGZpbGVSYW5nZUl0ZW0gPSBmaWxlSXRlbS0+dG9GaWxlUmFuZ2VCbG9iSXRl
bSgpOworICAgIGlmIChmaWxlUmFuZ2VJdGVtKSB7CisgICAgICAgIC8vIENoZWNrIHRoZSBtb2Rp
ZmljYXRpb250IHRpbWUgZm9yIHRoZSBwb3NzaWJsZSBmaWxlIGNoYW5nZS4KKyAgICAgICAgaWYg
KHN0YXRpY19jYXN0PHRpbWVfdD4oZmlsZVJhbmdlSXRlbS0+c25hcHNob3RNb2RpZmljYXRpb25U
aW1lKCkpICE9IGN1cnJlbnRNb2RpZmljYXRpb25UaW1lKSB7CiAgICAgICAgICAgICBtX2NsaWVu
dC0+ZGlkRmFpbChOT1RfUkVBREFCTEVfRVJSKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQorCisgICAgICAgIC8vIEp1bXAgdG8gdGhlIGJlZ2lubmluZyBwb3NpdGlvbiBpZiB0aGUg
ZmlsZSBoYXMgYmVlbiBzbGljZWQuCisgICAgICAgIGlmIChmaWxlUmFuZ2VJdGVtLT5zdGFydCgp
ID4gMCkgeworICAgICAgICAgICAgaWYgKHNlZWtGaWxlKG1faGFuZGxlLCBmaWxlUmFuZ2VJdGVt
LT5zdGFydCgpLCBTZWVrRnJvbUJlZ2lubmluZykgPCAwKSB7CisgICAgICAgICAgICAgICAgbV9j
bGllbnQtPmRpZEZhaWwoTk9UX1JFQURBQkxFX0VSUik7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQogI2VuZGlmCiAKICAgICAvLyBHZXQg
dGhlIHNpemUuCi0jaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgbV90b3RhbEJ5dGVzVG9SZWFk
ID0gYmxvYi0+bGVuZ3RoKCk7Ci0gICAgaWYgKG1fdG90YWxCeXRlc1RvUmVhZCA9PSBCbG9iOjp0
b0VuZE9mRmlsZSkKLSAgICAgICAgbV90b3RhbEJ5dGVzVG9SZWFkID0gYmxvYi0+c2l6ZSgpIC0g
YmxvYi0+c3RhcnQoKTsKLSNlbHNlCi0gICAgbV90b3RhbCA9IGJsb2ItPnNpemUoKTsKLSNlbmRp
ZgotCisgICAgbV90b3RhbEJ5dGVzVG9SZWFkID0gYmxvYi0+c2l6ZSgpOwogICAgIG1fY2xpZW50
LT5kaWRHZXRTaXplKG1fdG90YWxCeXRlc1RvUmVhZCk7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvaHRtbC9Gb3JtRGF0YUxpc3QuY3BwIGIvV2ViQ29yZS9odG1sL0Zvcm1EYXRhTGlzdC5jcHAK
aW5kZXggMjgxYzlmZTQxOGUxYzQ4MzNiYjg3ZjgyZjc0ZjFjYzRkNzIyZDU3Yy4uMGY2MjU5NWVk
NDFjMjMxOWJkYjc5YjU3YmJkN2NhOTQ2MjJiODJhYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1s
L0Zvcm1EYXRhTGlzdC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0Zvcm1EYXRhTGlzdC5jcHAKQEAg
LTI4LDY0ICsyOCwyMiBAQCBGb3JtRGF0YUxpc3Q6OkZvcm1EYXRhTGlzdChjb25zdCBUZXh0RW5j
b2RpbmcmIGMpCiB7CiB9CiAKLXZvaWQgRm9ybURhdGFMaXN0OjphcHBlbmRTdHJpbmcoY29uc3Qg
Q1N0cmluZyYgcykKK3ZvaWQgRm9ybURhdGFMaXN0OjphcHBlbmRTdHJpbmcoY29uc3QgU3RyaW5n
JiBzKQogewotICAgIG1fbGlzdC5hcHBlbmQocyk7CisgICAgbV9pdGVtcy5hcHBlbmQoU3RyaW5n
QmxvYkl0ZW06OmNyZWF0ZShzLCBFbmRpbmdDUkxGLCBtX2VuY29kaW5nKSk7CiB9CiAKLS8vIENo
YW5nZSBwbGFpbiBDUiBhbmQgcGxhaW4gTEYgdG8gQ1JMRiBwYWlycy4KLXN0YXRpYyBDU3RyaW5n
IGZpeExpbmVCcmVha3MoY29uc3QgQ1N0cmluZyYgcykKK3ZvaWQgRm9ybURhdGFMaXN0OjphcHBl
bmRTdHJpbmcoY29uc3QgQ1N0cmluZyYgcykKIHsKLSAgICAvLyBDb21wdXRlIHRoZSBsZW5ndGgu
Ci0gICAgdW5zaWduZWQgbmV3TGVuID0gMDsKLSAgICBjb25zdCBjaGFyKiBwID0gcy5kYXRhKCk7
Ci0gICAgd2hpbGUgKGNoYXIgYyA9ICpwKyspIHsKLSAgICAgICAgaWYgKGMgPT0gJ1xyJykgewot
ICAgICAgICAgICAgLy8gU2FmZSB0byBsb29rIGFoZWFkIGJlY2F1c2Ugb2YgdHJhaWxpbmcgJ1ww
Jy4KLSAgICAgICAgICAgIGlmICgqcCAhPSAnXG4nKSB7Ci0gICAgICAgICAgICAgICAgLy8gVHVy
biBDUiBpbnRvIENSTEYuCi0gICAgICAgICAgICAgICAgbmV3TGVuICs9IDI7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoYyA9PSAnXG4nKSB7Ci0gICAgICAgICAgICAvLyBUdXJu
IExGIGludG8gQ1JMRi4KLSAgICAgICAgICAgIG5ld0xlbiArPSAyOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgLy8gTGVhdmUgb3RoZXIgY2hhcmFjdGVycyBhbG9uZS4KLSAgICAgICAg
ICAgIG5ld0xlbiArPSAxOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChuZXdMZW4gPT0gcy5s
ZW5ndGgoKSkgewotICAgICAgICByZXR1cm4gczsKLSAgICB9Ci0gICAgCi0gICAgLy8gTWFrZSBh
IGNvcHkgb2YgdGhlIHN0cmluZy4KLSAgICBwID0gcy5kYXRhKCk7Ci0gICAgY2hhciogcTsKLSAg
ICBDU3RyaW5nIHJlc3VsdCA9IENTdHJpbmc6Om5ld1VuaW5pdGlhbGl6ZWQobmV3TGVuLCBxKTsK
LSAgICB3aGlsZSAoY2hhciBjID0gKnArKykgewotICAgICAgICBpZiAoYyA9PSAnXHInKSB7Ci0g
ICAgICAgICAgICAvLyBTYWZlIHRvIGxvb2sgYWhlYWQgYmVjYXVzZSBvZiB0cmFpbGluZyAnXDAn
LgotICAgICAgICAgICAgaWYgKCpwICE9ICdcbicpIHsKLSAgICAgICAgICAgICAgICAvLyBUdXJu
IENSIGludG8gQ1JMRi4KLSAgICAgICAgICAgICAgICAqcSsrID0gJ1xyJzsKLSAgICAgICAgICAg
ICAgICAqcSsrID0gJ1xuJzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChjID09
ICdcbicpIHsKLSAgICAgICAgICAgIC8vIFR1cm4gTEYgaW50byBDUkxGLgotICAgICAgICAgICAg
KnErKyA9ICdccic7Ci0gICAgICAgICAgICAqcSsrID0gJ1xuJzsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIC8vIExlYXZlIG90aGVyIGNoYXJhY3RlcnMgYWxvbmUuCi0gICAgICAgICAg
ICAqcSsrID0gYzsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OworICAgIG1f
aXRlbXMuYXBwZW5kKFN0cmluZ0Jsb2JJdGVtOjpjcmVhdGUocykpOwogfQogCi12b2lkIEZvcm1E
YXRhTGlzdDo6YXBwZW5kU3RyaW5nKGNvbnN0IFN0cmluZyYgcykKK3ZvaWQgRm9ybURhdGFMaXN0
OjphcHBlbmRCbG9iKGNvbnN0IFN0cmluZyYga2V5LCBQYXNzUmVmUHRyPEJsb2I+IGJsb2IpCiB7
Ci0gICAgQ1N0cmluZyBjc3RyID0gZml4TGluZUJyZWFrcyhtX2VuY29kaW5nLmVuY29kZShzLmNo
YXJhY3RlcnMoKSwgcy5sZW5ndGgoKSwgRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpKTsKLSAgICBt
X2xpc3QuYXBwZW5kKGNzdHIpOworICAgIGFwcGVuZFN0cmluZyhrZXkpOworICAgIGNvbnN0IEJs
b2JJdGVtTGlzdCYgaXRlbXMgPSBibG9iLT5pdGVtcygpOworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgaXRlbXMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1faXRlbXMuYXBwZW5kKGl0ZW1zLmF0
KGkpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9Gb3Jt
RGF0YUxpc3QuaCBiL1dlYkNvcmUvaHRtbC9Gb3JtRGF0YUxpc3QuaAppbmRleCA4ZWNmNjRlZTkz
YWQ1MjRmNDc5MjFmMWQ4MjJmOWEwOGJhMDEzZDdjLi5mNGJiOTA1MTUwZmFkNzhiMDFhZTVhOTY4
M2ZhZDk5ODQzOTBlNmJlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvRm9ybURhdGFMaXN0LmgK
KysrIGIvV2ViQ29yZS9odG1sL0Zvcm1EYXRhTGlzdC5oCkBAIC00NiwyNyArNDYsOSBAQCBwdWJs
aWM6CiAgICAgICAgIGFwcGVuZFN0cmluZyhrZXkpOwogICAgICAgICBhcHBlbmRTdHJpbmcoU3Ry
aW5nOjpudW1iZXIodmFsdWUpKTsKICAgICB9Ci0gICAgdm9pZCBhcHBlbmRCbG9iKGNvbnN0IFN0
cmluZyYga2V5LCBQYXNzUmVmUHRyPEJsb2I+IGJsb2IpCi0gICAgewotICAgICAgICBhcHBlbmRT
dHJpbmcoa2V5KTsKLSAgICAgICAgbV9saXN0LmFwcGVuZChibG9iKTsKLSAgICB9Ci0KLSAgICBj
bGFzcyBJdGVtIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEl0ZW0oKSB7IH0KLSAgICAgICAgSXRl
bShjb25zdCBXVEY6OkNTdHJpbmcmIGRhdGEpIDogbV9kYXRhKGRhdGEpIHsgfQotICAgICAgICBJ
dGVtKFBhc3NSZWZQdHI8QmxvYj4gYmxvYikgOiBtX2Jsb2IoYmxvYikgeyB9Ci0KLSAgICAgICAg
Y29uc3QgV1RGOjpDU3RyaW5nJiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9Ci0gICAg
ICAgIEJsb2IqIGJsb2IoKSBjb25zdCB7IHJldHVybiBtX2Jsb2IuZ2V0KCk7IH0KLQotICAgIHBy
aXZhdGU6Ci0gICAgICAgIFdURjo6Q1N0cmluZyBtX2RhdGE7Ci0gICAgICAgIFJlZlB0cjxCbG9i
PiBtX2Jsb2I7Ci0gICAgfTsKKyAgICB2b2lkIGFwcGVuZEJsb2IoY29uc3QgU3RyaW5nJiBrZXks
IFBhc3NSZWZQdHI8QmxvYj4pOwogCi0gICAgY29uc3QgVmVjdG9yPEl0ZW0+JiBsaXN0KCkgY29u
c3QgeyByZXR1cm4gbV9saXN0OyB9CisgICAgY29uc3QgQmxvYkl0ZW1MaXN0JiBpdGVtcygpIGNv
bnN0IHsgcmV0dXJuIG1faXRlbXM7IH0KICAgICBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5n
KCkgY29uc3QgeyByZXR1cm4gbV9lbmNvZGluZzsgfQogCiBwcml2YXRlOgpAQCAtNzQsNyArNTYs
NyBAQCBwcml2YXRlOgogICAgIHZvaWQgYXBwZW5kU3RyaW5nKGNvbnN0IFN0cmluZyYpOwogCiAg
ICAgVGV4dEVuY29kaW5nIG1fZW5jb2Rpbmc7Ci0gICAgVmVjdG9yPEl0ZW0+IG1fbGlzdDsKKyAg
ICBCbG9iSXRlbUxpc3QgbV9pdGVtczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwIGIvV2ViQ29yZS9odG1s
L0hUTUxGb3JtRWxlbWVudC5jcHAKaW5kZXggYzg0NDU0ZDE1OWRiZWNhNWE0ZTM1Yjk1MmFiZWFh
MzQ5OWJhNTFmMy4uNzM4NWNlMzc4NTJjMzdlNWVjMTViNTFkMTQ4OWJmYzM5MTlmMmVhMyAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9o
dG1sL0hUTUxGb3JtRWxlbWVudC5jcHAKQEAgLTIxMCw3ICsyMTAsNyBAQCBQYXNzUmVmUHRyPEZv
cm1EYXRhPiBIVE1MRm9ybUVsZW1lbnQ6OmNyZWF0ZUZvcm1EYXRhKCkKICAgICAgICAgICAgIGNv
bnRyb2wtPmFwcGVuZEZvcm1EYXRhKCpkb21Gb3JtRGF0YSwgbV9mb3JtRGF0YUJ1aWxkZXIuaXNN
dWx0aVBhcnRGb3JtKCkpOwogICAgIH0KIAotICAgIFJlZlB0cjxGb3JtRGF0YT4gcmVzdWx0ID0g
KG1fZm9ybURhdGFCdWlsZGVyLmlzTXVsdGlQYXJ0Rm9ybSgpKSA/IEZvcm1EYXRhOjpjcmVhdGVN
dWx0aVBhcnQoKmRvbUZvcm1EYXRhLCBkb2N1bWVudCgpKSA6IEZvcm1EYXRhOjpjcmVhdGUoKmRv
bUZvcm1EYXRhKTsKKyAgICBSZWZQdHI8Rm9ybURhdGE+IHJlc3VsdCA9IChtX2Zvcm1EYXRhQnVp
bGRlci5pc011bHRpUGFydEZvcm0oKSkgPyBGb3JtRGF0YTo6Y3JlYXRlTXVsdGlQYXJ0KGRvbUZv
cm1EYXRhLT5pdGVtcygpLCBkb21Gb3JtRGF0YS0+ZW5jb2RpbmcoKSwgZG9jdW1lbnQoKSkgOiBG
b3JtRGF0YTo6Y3JlYXRlKGRvbUZvcm1EYXRhLT5pdGVtcygpLCBkb21Gb3JtRGF0YS0+ZW5jb2Rp
bmcoKSk7CiAKICAgICByZXN1bHQtPnNldElkZW50aWZpZXIoZ2VuZXJhdGVGb3JtRGF0YUlkZW50
aWZpZXIoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9I
VE1MUHJvZ3Jlc3NFbGVtZW50LmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1MUHJvZ3Jlc3NFbGVtZW50
LmNwcAppbmRleCBkMjc1ZWJmY2ZmOGQ5N2I5MTZkNTlkMjRmMjQxOWRhOGM1MzRhZjI5Li5mN2U4
NmYzYTlhZmZlY2VkZWJiOTNiOTM1MzUwZGFiODUyYWVhNmM1IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2h0bWwvSFRNTFByb2dyZXNzRWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxQcm9n
cmVzc0VsZW1lbnQuY3BwCkBAIC0yNCw2ICsyNCw3IEBACiAKICNpbmNsdWRlICJBdHRyaWJ1dGUu
aCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgog
I2luY2x1ZGUgIkZvcm1EYXRhTGlzdC5oIgogI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgog
I2luY2x1ZGUgIkhUTUxOYW1lcy5oIgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9CbG9i
SXRlbS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL0Jsb2JJdGVtLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45OTAz
OTg0NjA2ZWQzMTg0NWRjNmRhYmJmMWMxMDQzMWI3YTRjOTI2Ci0tLSAvZGV2L251bGwKKysrIGIv
V2ViQ29yZS9wbGF0Zm9ybS9CbG9iSXRlbS5jcHAKQEAgLTAsMCArMSwzMTIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpbmNsdWRlICJCbG9iSXRlbS5oIgorCisjaW5jbHVkZSAiRmlsZVN5c3Rl
bS5oIgorI2luY2x1ZGUgIlVVSUQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYgRU5B
QkxFKEJMT0JfU0xJQ0UpCitzdGF0aWMgY29uc3QgZG91YmxlIGludmFsaWRNb2RpZmljYXRpb25U
aW1lID0gMDsKKworZG91YmxlIGdldEZpbGVTbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUoY29uc3Qg
U3RyaW5nJiBwYXRoKQoreworICAgIC8vIEZJWE1FOiBzeW5jaHJvbml6ZWQgZmlsZSBjYWxsCisg
ICAgdGltZV90IG1vZGlmaWNhdGlvblRpbWU7CisgICAgaWYgKGdldEZpbGVNb2RpZmljYXRpb25U
aW1lKHBhdGgsIG1vZGlmaWNhdGlvblRpbWUpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
ZG91YmxlPihtb2RpZmljYXRpb25UaW1lKTsKKyAgICByZXR1cm4gaW52YWxpZE1vZGlmaWNhdGlv
blRpbWU7Cit9CisKK1Bhc3NSZWZQdHI8QmxvYkl0ZW0+IEJsb2JJdGVtOjpzbGljZShsb25nIGxv
bmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgpCit7CisgICAgQVNTRVJUKHN0YXJ0ID49IDAgJiYg
bGVuZ3RoID49IDApOworICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+
KHN0YXJ0KSA8IHNpemUoKSk7CisgICAgaWYgKCFzdGFydCAmJiBzaXplKCkgPD0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQgbG9uZyBsb25nPihsZW5ndGgpKQorICAgICAgICByZXR1cm4gdGhpczsKKyAg
ICBjb25zdCBGaWxlQmxvYkl0ZW0qIGZpbGVJdGVtID0gdG9GaWxlQmxvYkl0ZW0oKTsKKyAgICBp
ZiAoZmlsZUl0ZW0pIHsKKyAgICAgICAgY29uc3QgRmlsZVJhbmdlQmxvYkl0ZW0qIGZpbGVSYW5n
ZUl0ZW0gPSB0b0ZpbGVSYW5nZUJsb2JJdGVtKCk7CisgICAgICAgIGRvdWJsZSBtb2RpZmljYXRp
b25UaW1lID0gZmlsZVJhbmdlSXRlbSA/IGZpbGVSYW5nZUl0ZW0tPnNuYXBzaG90TW9kaWZpY2F0
aW9uVGltZSgpIDogZ2V0RmlsZVNuYXBzaG90TW9kaWZpY2F0aW9uVGltZShmaWxlSXRlbS0+cGF0
aCgpKTsKKyAgICAgICAgcmV0dXJuIEZpbGVSYW5nZUJsb2JJdGVtOjpjcmVhdGUoZmlsZUl0ZW0t
PnBhdGgoKSwgc3RhcnQsIGxlbmd0aCwgbW9kaWZpY2F0aW9uVGltZSk7CisgICAgfQorICAgIEFT
U0VSVCh0b0RhdGFCbG9iSXRlbSgpKTsKKyAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9u
ZyBsb25nPihzdGFydCArIGxlbmd0aCkgPiBzaXplKCkpCisgICAgICAgIGxlbmd0aCA9IHNpemUo
KSAtIHN0YXJ0OworICAgIHJldHVybiBEYXRhUmFuZ2VCbG9iSXRlbTo6Y3JlYXRlKHN0YXRpY19j
YXN0PERhdGFSYW5nZUJsb2JJdGVtKj4odGhpcyksIHN0YXJ0LCBsZW5ndGgpOworfQorCisjZW5k
aWYgLy8gRU5BQkxFKEJMT0JfU0xJQ0UpCisKKy8vIERhdGFCbG9iSXRlbSAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2No
YXIqIERhdGFCbG9iSXRlbTo6Y29weUJ1ZmZlcigpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IFJl
Y29uc2lkZXIgaWYgd2Ugc3RpbGwgbmVlZCBpdCBvbmNlIHdlIGNsZWFuIHVwIHRoZSB0cmFuc2ll
bnQgd3JhcHBlciBjbGFzcyBGb3JtRGF0YUVsZW1lbnQ6OkJsb2JJdGVtV3JhcHBlciBhbmQgaXRz
IHJlbGVhc2VCdWZmZXIoKSBtZXRob2QuICBJdCB1c2VkIHRvIGJlIGEgbWVyZSBWZWN0b3IgYW5k
IFZlY3Rvcjo6cmVsZWFzZUJ1ZmZlciwgYnV0IG5vdyB3ZSBrZWVwIHRoZSBkYXRhIHJlZi1jb3Vu
dGVkIGFuZCBuZWVkIHRvIG1ha2UgYSBjb3B5IHRvIHJldHVybiB0aGUgZGF0YSB3aXRoIG93bmVy
c2hpcC4KKyAgICBWZWN0b3I8Y2hhcj4gdjsKKyAgICB2LmFwcGVuZChkYXRhKCksIHN0YXRpY19j
YXN0PHNpemVfdD4oc2l6ZSgpKSk7CisgICAgcmV0dXJuIHYucmVsZWFzZUJ1ZmZlcigpOworfQor
Citib29sIERhdGFCbG9iSXRlbTo6ZXF1YWxzKGNvbnN0IEJsb2JJdGVtKiBpdGVtKSBjb25zdAor
eworICAgIGNvbnN0IERhdGFCbG9iSXRlbSogZGF0YUl0ZW0gPSBpdGVtLT50b0RhdGFCbG9iSXRl
bSgpOworICAgIHJldHVybiBkYXRhSXRlbSAmJiBkYXRhKCkgPT0gZGF0YUl0ZW0tPmRhdGEoKSAm
JiBzaXplKCkgPT0gZGF0YUl0ZW0tPnNpemUoKTsKK30KKworCisvLyBGaWxlQmxvYkl0ZW0gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorCitQYXNzUmVmUHRyPEJsb2JJdGVtPiBGaWxlQmxvYkl0ZW06OmNyZWF0ZShjb25zdCBT
dHJpbmcmIHBhdGgpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKHN0YXRpY19jYXN0PEJsb2JJdGVt
Kj4obmV3IEZpbGVCbG9iSXRlbShwYXRoKSkpOworfQorCitGaWxlQmxvYkl0ZW06OkZpbGVCbG9i
SXRlbShjb25zdCBTdHJpbmcmIHBhdGgpCisgICAgOiBtX3BhdGgocGF0aCkKKyAgICAsIG1fZmls
ZU5hbWUocGF0aEdldEZpbGVOYW1lKG1fcGF0aCkpCit7Cit9CisKK3Vuc2lnbmVkIGxvbmcgbG9u
ZyBGaWxlQmxvYkl0ZW06OnNpemUoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBzeW5jaHJvbml6
ZWQgZmlsZSBjYWxsCisgICAgbG9uZyBsb25nIHNpemU7CisgICAgaWYgKCFnZXRGaWxlU2l6ZSht
X3BhdGgsIHNpemUpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
dW5zaWduZWQgbG9uZyBsb25nPihzaXplKTsKK30KKworUGFzc1JlZlB0cjxCbG9iSXRlbT4gRmls
ZUJsb2JJdGVtOjpkZWVwQ29weSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEZpbGVCbG9iSXRlbTo6
Y3JlYXRlKG1fcGF0aCk7Cit9CisKK2Jvb2wgRmlsZUJsb2JJdGVtOjplcXVhbHMoY29uc3QgQmxv
Ykl0ZW0qIGl0ZW0pIGNvbnN0Cit7CisgICAgY29uc3QgRmlsZUJsb2JJdGVtKiBmaWxlSXRlbSA9
IGl0ZW0tPnRvRmlsZUJsb2JJdGVtKCk7CisgICAgcmV0dXJuIGZpbGVJdGVtICYmIG1fcGF0aCA9
PSBmaWxlSXRlbS0+bV9wYXRoOworfQorCisvLyBTdHJpbmdCbG9iSXRlbSAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitQYXNz
UmVmUHRyPEJsb2JJdGVtPiBTdHJpbmdCbG9iSXRlbTo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgdGV4
dCwgRW5kaW5nVHlwZSBlbmRpbmcsIFRleHRFbmNvZGluZyBlbmNvZGluZykKK3sKKyAgICByZXR1
cm4gYWRvcHRSZWYoc3RhdGljX2Nhc3Q8QmxvYkl0ZW0qPihuZXcgU3RyaW5nQmxvYkl0ZW0odGV4
dCwgZW5kaW5nLCBlbmNvZGluZykpKTsKK30KKworUGFzc1JlZlB0cjxCbG9iSXRlbT4gU3RyaW5n
QmxvYkl0ZW06OmNyZWF0ZShjb25zdCBDU3RyaW5nJiB0ZXh0KQoreworICAgIHJldHVybiBhZG9w
dFJlZihzdGF0aWNfY2FzdDxCbG9iSXRlbSo+KG5ldyBTdHJpbmdCbG9iSXRlbSh0ZXh0KSkpOwor
fQorCitTdHJpbmdCbG9iSXRlbTo6U3RyaW5nQmxvYkl0ZW0oY29uc3QgU3RyaW5nJiB0ZXh0LCBF
bmRpbmdUeXBlIGVuZGluZywgVGV4dEVuY29kaW5nIGVuY29kaW5nKQorICAgIDogbV9kYXRhKFN0
cmluZ0Jsb2JJdGVtOjpjb252ZXJ0VG9DU3RyaW5nKHRleHQsIGVuZGluZywgZW5jb2RpbmcpKQor
eworfQorCitTdHJpbmdCbG9iSXRlbTo6U3RyaW5nQmxvYkl0ZW0oY29uc3QgQ1N0cmluZyYgdGV4
dCkKKyAgICA6IG1fZGF0YSh0ZXh0KQoreworfQorCitQYXNzUmVmUHRyPEJsb2JJdGVtPiBTdHJp
bmdCbG9iSXRlbTo6ZGVlcENvcHkoKSBjb25zdAoreworICAgIHJldHVybiBTdHJpbmdCbG9iSXRl
bTo6Y3JlYXRlKENTdHJpbmcobV9kYXRhLmRhdGEoKSwgbV9kYXRhLmxlbmd0aCgpKSk7Cit9CisK
K2Jvb2wgU3RyaW5nQmxvYkl0ZW06OmVxdWFscyhjb25zdCBCbG9iSXRlbSogaXRlbSkgY29uc3QK
K3sKKyAgICBpZiAoIURhdGFCbG9iSXRlbTo6ZXF1YWxzKGl0ZW0pKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgY29uc3QgU3RyaW5nQmxvYkl0ZW0qIHN0cmluZ0l0ZW0gPSBpdGVtLT50b1N0
cmluZ0Jsb2JJdGVtKCk7CisgICAgcmV0dXJuIHN0cmluZ0l0ZW0gJiYgZGF0YSgpID09IHN0cmlu
Z0l0ZW0tPmRhdGEoKSAmJiBzaXplKCkgPT0gc3RyaW5nSXRlbS0+c2l6ZSgpOworfQorCitDU3Ry
aW5nIFN0cmluZ0Jsb2JJdGVtOjpjb252ZXJ0VG9DU3RyaW5nKGNvbnN0IFN0cmluZyYgdGV4dCwg
RW5kaW5nVHlwZSBlbmRpbmcsIFRleHRFbmNvZGluZyBlbmNvZGluZykKK3sKKyAgICBDU3RyaW5n
IGZyb20gPSBlbmNvZGluZy5lbmNvZGUodGV4dC5jaGFyYWN0ZXJzKCksIHRleHQubGVuZ3RoKCks
IEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKTsKKyAgICBDU3RyaW5nIHJlc3VsdCA9IGZyb207CisK
KyAgICBpZiAoZW5kaW5nID09IEVuZGluZ1RyYW5zcGFyZW50KQorICAgICAgICByZXR1cm4gcmVz
dWx0OworCisgICAgY29uc3QgY2hhciogZW5kaW5nQ2hhcnMgPSAoZW5kaW5nID09IEVuZGluZ0NS
TEYpID8gIlxyXG4iIDogKChlbmRpbmcgPT0gRW5kaW5nQ1IpID8gIlxyIiA6ICJcbiIpOworCisg
ICAgaW50IGVuZGluZ0xlbmd0aCA9IChlbmRpbmcgPT0gRW5kaW5nQ1JMRikgPyAyIDogMTsKKyAg
ICBpbnQgbmVlZEZpeCA9IDA7CisKKyAgICAvLyBDYWxjdWxhdGUgdGhlIGZpbmFsIGxlbmd0aC4K
KyAgICBpbnQgY2FsY3VsYXRlZExlbmd0aCA9IGZyb20ubGVuZ3RoKCk7CisgICAgY29uc3QgY2hh
ciogcCA9IGZyb20uZGF0YSgpOworICAgIHdoaWxlIChjaGFyIGMgPSAqcCsrKSB7CisgICAgICAg
IGlmIChjID09ICdccicpIHsKKyAgICAgICAgICAgIC8vIFNhZmUgdG8gbG9vayBhaGVhZCBiZWNh
dXNlIG9mIHRyYWlsaW5nICdcMCcuCisgICAgICAgICAgICBpZiAoKnAgPT0gJ1xuJyAmJiBlbmRp
bmcgIT0gRW5kaW5nQ1JMRikgeworICAgICAgICAgICAgICAgIGNhbGN1bGF0ZWRMZW5ndGggKz0g
KGVuZGluZ0xlbmd0aCAtIDIpOworICAgICAgICAgICAgICAgICsrbmVlZEZpeDsKKyAgICAgICAg
ICAgIH0gZWxzZSBpZiAoZW5kaW5nICE9IEVuZGluZ0NSKSB7CisgICAgICAgICAgICAgICAgY2Fs
Y3VsYXRlZExlbmd0aCArPSAoZW5kaW5nTGVuZ3RoIC0gMSk7CisgICAgICAgICAgICAgICAgKytu
ZWVkRml4OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKGMgPT0gJ1xuJyAmJiBl
bmRpbmcgIT0gRW5kaW5nTEYpIHsKKyAgICAgICAgICAgIGNhbGN1bGF0ZWRMZW5ndGggKz0gKGVu
ZGluZ0xlbmd0aCAtIDEpOworICAgICAgICAgICAgKytuZWVkRml4OworICAgICAgICB9CisgICAg
fQorCisgICAgaWYgKCFuZWVkRml4KQorICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgLy8g
Q29udmVydCB0aGUgZW5kaW5ncyBhbmQgY3JlYXRlIGEgZGF0YSBidWZmZXIuCisgICAgcCA9IGZy
b20uZGF0YSgpOworICAgIGNoYXIqIHE7CisgICAgcmVzdWx0ID0gQ1N0cmluZzo6bmV3VW5pbml0
aWFsaXplZChjYWxjdWxhdGVkTGVuZ3RoLCBxKTsKKyAgICB3aGlsZSAoY2hhciBjID0gKnArKykg
eworICAgICAgICBpZiAoYyA9PSAnXHInKSB7CisgICAgICAgICAgICBpZiAoKnAgPT0gJ1xuJyAm
JiBlbmRpbmcgIT0gRW5kaW5nQ1JMRikgeworICAgICAgICAgICAgICAgIG1lbWNweShxLCBlbmRp
bmdDaGFycywgZW5kaW5nTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBxICs9IGVuZGluZ0xlbmd0
aDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoKnAgIT0gJ1xuJyAmJiBlbmRpbmcgIT0gRW5kaW5n
Q1IpIHsKKyAgICAgICAgICAgICAgICBtZW1jcHkocSwgZW5kaW5nQ2hhcnMsIGVuZGluZ0xlbmd0
aCk7CisgICAgICAgICAgICAgICAgcSArPSBlbmRpbmdMZW5ndGg7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0gZWxzZSBpZiAoYyA9PSAnXG4nICYmIGVuZGluZyAhPSBFbmRpbmdMRikgeworICAg
ICAgICAgICAgbWVtY3B5KHEsIGVuZGluZ0NoYXJzLCBlbmRpbmdMZW5ndGgpOworICAgICAgICAg
ICAgcSArPSBlbmRpbmdMZW5ndGg7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBM
ZWF2ZSBvdGhlciBjaGFyYWN0ZXJzIGFsb25lLgorICAgICAgICAgICAgKnErKyA9IGM7CisgICAg
ICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLy8gQnl0ZXNBcnJheUJsb2JJ
dGVtIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKworUGFzc1JlZlB0cjxCbG9iSXRlbT4gQnl0ZXNBcnJheUJsb2JJdGVtOjpjcmVhdGUo
Y29uc3QgY2hhciogZGF0YSwgc2l6ZV90IHNpemUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKHN0
YXRpY19jYXN0PEJsb2JJdGVtKj4obmV3IEJ5dGVzQXJyYXlCbG9iSXRlbShkYXRhLCBzaXplKSkp
OworfQorCitCeXRlc0FycmF5QmxvYkl0ZW06OkJ5dGVzQXJyYXlCbG9iSXRlbShjb25zdCBjaGFy
KiBkYXRhLCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBtX2J5dGVzQXJyYXkuYXBwZW5kKGRhdGEsIHNp
emUpOworfQorCitQYXNzUmVmUHRyPEJsb2JJdGVtPiBCeXRlc0FycmF5QmxvYkl0ZW06OmRlZXBD
b3B5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gQnl0ZXNBcnJheUJsb2JJdGVtOjpjcmVhdGUobV9i
eXRlc0FycmF5LmRhdGEoKSwgbV9ieXRlc0FycmF5LnNpemUoKSk7Cit9CisKKyNpZiBFTkFCTEUo
QkxPQl9TTElDRSkKKworLy8gRGF0YVJhbmdlQmxvYkl0ZW0gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUGFzc1JlZlB0cjxCbG9i
SXRlbT4gRGF0YVJhbmdlQmxvYkl0ZW06OmNyZWF0ZShQYXNzUmVmUHRyPERhdGFCbG9iSXRlbT4g
aXRlbSwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoKQoreworICAgIHJldHVybiBh
ZG9wdFJlZihzdGF0aWNfY2FzdDxCbG9iSXRlbSo+KG5ldyBEYXRhUmFuZ2VCbG9iSXRlbShpdGVt
LCBzdGFydCwgbGVuZ3RoKSkpOworfQorCitEYXRhUmFuZ2VCbG9iSXRlbTo6RGF0YVJhbmdlQmxv
Ykl0ZW0oUGFzc1JlZlB0cjxEYXRhQmxvYkl0ZW0+IGl0ZW0sIGxvbmcgbG9uZyBzdGFydCwgbG9u
ZyBsb25nIGxlbmd0aCkKKyAgICA6IG1fbGVuZ3RoKGxlbmd0aCkKK3sKKyAgICBjb25zdCBEYXRh
UmFuZ2VCbG9iSXRlbSogcmFuZ2VJdGVtID0gbV9pdGVtLT50b0RhdGFSYW5nZUJsb2JJdGVtKCk7
CisgICAgaWYgKHJhbmdlSXRlbSkgeworICAgICAgICBtX2l0ZW0gPSByYW5nZUl0ZW0tPm1faXRl
bTsKKyAgICAgICAgbV9zdGFydCA9IHN0YXJ0ICsgcmFuZ2VJdGVtLT5tX3N0YXJ0OworICAgICAg
ICBBU1NFUlQoIW1faXRlbS0+dG9EYXRhUmFuZ2VCbG9iSXRlbSgpKTsKKyAgICAgICAgQVNTRVJU
KHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4obV9zdGFydCArIG1fbGVuZ3RoKSA8PSBt
X2l0ZW0tPnNpemUoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9pdGVtID0gaXRlbTsKKyAg
ICAgICAgbV9zdGFydCA9IHN0YXJ0OworICAgIH0KK30KKworY29uc3QgY2hhciogRGF0YVJhbmdl
QmxvYkl0ZW06OmRhdGEoKSBjb25zdAoreworICAgIHJldHVybiBtX2l0ZW0tPmRhdGEoKSArIG1f
c3RhcnQ7Cit9CisKK1Bhc3NSZWZQdHI8QmxvYkl0ZW0+IERhdGFSYW5nZUJsb2JJdGVtOjpkZWVw
Q29weSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIERhdGFSYW5nZUJsb2JJdGVtOjpjcmVhdGUoc3Rh
dGljX3BvaW50ZXJfY2FzdDxEYXRhQmxvYkl0ZW0+KG1faXRlbS0+ZGVlcENvcHkoKSksIG1fc3Rh
cnQsIG1fbGVuZ3RoKTsKK30KKworYm9vbCBEYXRhUmFuZ2VCbG9iSXRlbTo6ZXF1YWxzKGNvbnN0
IEJsb2JJdGVtKiBpdGVtKSBjb25zdAoreworICAgIGNvbnN0IERhdGFSYW5nZUJsb2JJdGVtKiBy
YW5nZUl0ZW0gPSBpdGVtLT50b0RhdGFSYW5nZUJsb2JJdGVtKCk7CisgICAgcmV0dXJuIHJhbmdl
SXRlbSAmJiBtX3N0YXJ0ID09IHJhbmdlSXRlbS0+bV9zdGFydCAmJiBtX2xlbmd0aCA9PSByYW5n
ZUl0ZW0tPm1fbGVuZ3RoICYmIG1faXRlbS0+ZXF1YWxzKHJhbmdlSXRlbS0+bV9pdGVtLmdldCgp
KTsKK30KKworLy8gRmlsZVJhbmdlQmxvYkl0ZW0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUGFzc1JlZlB0cjxCbG9iSXRlbT4g
RmlsZVJhbmdlQmxvYkl0ZW06OmNyZWF0ZShjb25zdCBTdHJpbmcmIHBhdGgsIGxvbmcgbG9uZyBz
dGFydCwgbG9uZyBsb25nIGxlbmd0aCwgZG91YmxlIHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSkK
K3sKKyAgICByZXR1cm4gYWRvcHRSZWYoc3RhdGljX2Nhc3Q8QmxvYkl0ZW0qPihuZXcgRmlsZVJh
bmdlQmxvYkl0ZW0ocGF0aCwgc3RhcnQsIGxlbmd0aCwgc25hcHNob3RNb2RpZmljYXRpb25UaW1l
KSkpOworfQorCitGaWxlUmFuZ2VCbG9iSXRlbTo6RmlsZVJhbmdlQmxvYkl0ZW0oY29uc3QgU3Ry
aW5nJiBwYXRoLCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgsIGRvdWJsZSBtb2Rp
ZmljYXRpb25UaW1lKQorICAgIDogRmlsZUJsb2JJdGVtKHBhdGgpCisgICAgLCBtX3N0YXJ0KHN0
YXJ0KQorICAgICwgbV9sZW5ndGgobGVuZ3RoKQorICAgICwgbV9zbmFwc2hvdE1vZGlmaWNhdGlv
blRpbWUobW9kaWZpY2F0aW9uVGltZSkKK3sKKyAgICBtX3VuaXF1ZU5hbWUgPSAiQmxvYiIgKyBj
cmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCk7CisgICAgbV91bmlxdWVOYW1lLnJlcGxhY2UoIi0i
LCAiIik7IC8vIEZvciBzYWZ0eSwgcmVtb3ZlICctJyBmcm9tIHRoZSBmaWxlbmFtZSBzbmNlIHNv
bWUgc2VydmVycyBtYXkgbm90IGxpa2UgaXQuCit9CisKK1Bhc3NSZWZQdHI8QmxvYkl0ZW0+IEZp
bGVSYW5nZUJsb2JJdGVtOjpkZWVwQ29weSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEZpbGVSYW5n
ZUJsb2JJdGVtOjpjcmVhdGUocGF0aCgpLCBtX3N0YXJ0LCBtX2xlbmd0aCwgbV9zbmFwc2hvdE1v
ZGlmaWNhdGlvblRpbWUpOworfQorCitib29sIEZpbGVSYW5nZUJsb2JJdGVtOjplcXVhbHMoY29u
c3QgQmxvYkl0ZW0qIGl0ZW0pIGNvbnN0Cit7CisgICAgaWYgKCFGaWxlQmxvYkl0ZW06OmVxdWFs
cyhpdGVtKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNvbnN0IEZpbGVSYW5nZUJsb2JJ
dGVtKiByYW5nZUl0ZW0gPSBpdGVtLT50b0ZpbGVSYW5nZUJsb2JJdGVtKCk7CisgICAgcmV0dXJu
IHJhbmdlSXRlbSAmJiBtX3N0YXJ0ID09IHJhbmdlSXRlbS0+bV9zdGFydCAmJiBtX3VuaXF1ZU5h
bWUgPT0gcmFuZ2VJdGVtLT5tX3VuaXF1ZU5hbWUgJiYgbV9zbmFwc2hvdE1vZGlmaWNhdGlvblRp
bWUgPT0gcmFuZ2VJdGVtLT5tX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZTsKK30KKworYm9vbCBG
aWxlUmFuZ2VCbG9iSXRlbTo6aXNWYWxpZCgpIGNvbnN0Cit7CisgICAgaWYgKG1fc25hcHNob3RN
b2RpZmljYXRpb25UaW1lID09IGludmFsaWRNb2RpZmljYXRpb25UaW1lKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgcmV0dXJuIG1fc25hcHNob3RNb2RpZmljYXRpb25UaW1lID09IGdldEZp
bGVTbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUocGF0aCgpKTsKK30KKworI2VuZGlmIC8vIEVOQUJM
RShCTE9CX1NMSUNFKQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsYXRmb3JtL0Jsb2JJdGVtLmggYi9XZWJDb3JlL3BsYXRmb3JtL0Jsb2JJdGVtLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMGQxMGEwZmE4NmVmMjgwYjllZWQxZTYzZjIxNDhhMjBiMzdlMDdmYwotLS0gL2Rl
di9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vQmxvYkl0ZW0uaApAQCAtMCwwICsxLDIyMSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIEJsb2JJdGVtX2gKKyNkZWZpbmUgQmxvYkl0ZW1faAorCisjaW5jbHVkZSAiUGxh
dGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKKyNpbmNsdWRlIDx3dGYv
T3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gU3RyaW5nIGVuZGluZyB0eXBl
cy4KK2VudW0gRW5kaW5nVHlwZSB7CisgICAgRW5kaW5nVHJhbnNwYXJlbnQgPSAwLAorICAgIEVu
ZGluZ0xGLAorICAgIEVuZGluZ0NSLAorICAgIEVuZGluZ0NSTEYsCit9OworCitjbGFzcyBCeXRl
c0FycmF5QmxvYkl0ZW07CitjbGFzcyBEYXRhQmxvYkl0ZW07CitjbGFzcyBEYXRhUmFuZ2VCbG9i
SXRlbTsKK2NsYXNzIEZpbGVCbG9iSXRlbTsKK2NsYXNzIEZpbGVSYW5nZUJsb2JJdGVtOworY2xh
c3MgU3RyaW5nQmxvYkl0ZW07CisKKy8vIEEgYmFzZSBpbnRlcmZhY2UgZm9yIGFsbCBhcmJpdHJh
cnktZGF0YS1vYmplY3QgY29tcG9uZW50IGl0ZW1zLgorLy8gVGhlIEJsb2JJdGVtIGFuZCBpdHMg
c3ViY2xhc3NlcyBhcmUgc3RydWN0dXJlZCBsaWtlIHRoZSBmb2xsb3dpbmc6CisvLyAgICBCbG9i
SXRlbQorLy8gICAgICAgfAorLy8gICAgICAgKy0tLS0tLS0+IERhdGFCbG9iSXRlbQorLy8gICAg
ICAgfCAgICAgICAgICAgICAgfAorLy8gICAgICAgfCAgICAgICAgICAgICAgKy0tLS0tLS0tLT4g
U3RyaW5nQmxvYkl0ZW0KKy8vICAgICAgIHwgICAgICAgICAgICAgICstLS0tLS0tLS0+IEJ5dGVB
cnJheUJsb2JJdGVtCisvLyAgICAgICB8ICAgICAgICAgICAgICArLS0tLS0tLS0tPiBEYXRhUmFu
Z2VCbG9iSXRlbQorLy8gICAgICAgfAorLy8gICAgICAgKy0tLS0tLS0+IEZpbGVCbG9iSXRlbQor
Ly8gICAgICAgICAgICAgICAgICAgICAgfAorLy8gICAgICAgICAgICAgICAgICAgICAgKy0tLS0t
LS0tLT4gRmlsZVJhbmdlQmxvYkl0ZW0KKy8vCitjbGFzcyBCbG9iSXRlbSA6IHB1YmxpYyBSZWZD
b3VudGVkPEJsb2JJdGVtPiB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+QmxvYkl0ZW0oKSB7IH0K
KyAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplKCkgY29uc3QgPSAwOworCisgICAg
Ly8gUmV0dXJucyBmYWxzZSBpZiB0aGUgZGF0YSBoYXMgYmVjb21lIHN0YWxlIG9yIGludmFsaWQu
CisgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAg
ICB2aXJ0dWFsIGNvbnN0IERhdGFCbG9iSXRlbSogdG9EYXRhQmxvYkl0ZW0oKSBjb25zdCB7IHJl
dHVybiAwOyB9CisgICAgdmlydHVhbCBjb25zdCBTdHJpbmdCbG9iSXRlbSogdG9TdHJpbmdCbG9i
SXRlbSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IEJ5dGVzQXJyYXlC
bG9iSXRlbSogdG9CeXRlc0FycmF5QmxvYkl0ZW0oKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAg
dmlydHVhbCBjb25zdCBGaWxlQmxvYkl0ZW0qIHRvRmlsZUJsb2JJdGVtKCkgY29uc3QgeyByZXR1
cm4gMDsgfQorI2lmIEVOQUJMRShCTE9CX1NMSUNFKQorICAgIHZpcnR1YWwgY29uc3QgRGF0YVJh
bmdlQmxvYkl0ZW0qIHRvRGF0YVJhbmdlQmxvYkl0ZW0oKSBjb25zdCB7IHJldHVybiAwOyB9Cisg
ICAgdmlydHVhbCBjb25zdCBGaWxlUmFuZ2VCbG9iSXRlbSogdG9GaWxlUmFuZ2VCbG9iSXRlbSgp
IGNvbnN0IHsgcmV0dXJuIDA7IH0KKworICAgIC8vIE5vIGV4dGVybmFsIG1ldGhvZHMgZXhjZXB0
IGZvciBCbG9iOjpzbGljZSBzaG91bGQgY2FsbCB0aGlzLgorICAgIFBhc3NSZWZQdHI8QmxvYkl0
ZW0+IHNsaWNlKGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCk7CisjZW5kaWYgLy8g
RU5BQkxFKEJMT0JfU0xJQ0UpCisKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8QmxvYkl0ZW0+IGRl
ZXBDb3B5KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBlcXVhbHMoY29uc3QgQmxvYkl0
ZW0qKSBjb25zdCA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICBCbG9iSXRlbSgpIHsgfQorfTsKKwor
dHlwZWRlZiBWZWN0b3I8UmVmUHRyPEJsb2JJdGVtPiA+IEJsb2JJdGVtTGlzdDsKKworY2xhc3Mg
RGF0YUJsb2JJdGVtIDogcHVibGljIEJsb2JJdGVtIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIGNv
bnN0IGNoYXIqIGRhdGEoKSBjb25zdCA9IDA7CisgICAgY2hhciogY29weUJ1ZmZlcigpIGNvbnN0
OworCisgICAgLy8gQmxvYkl0ZW0gbWV0aG9kcy4KKyAgICB2aXJ0dWFsIGNvbnN0IERhdGFCbG9i
SXRlbSogdG9EYXRhQmxvYkl0ZW0oKSBjb25zdCB7IHJldHVybiB0aGlzOyB9CisgICAgdmlydHVh
bCBib29sIGVxdWFscyhjb25zdCBCbG9iSXRlbSopIGNvbnN0OworfTsKKworY2xhc3MgRmlsZUJs
b2JJdGVtIDogcHVibGljIEJsb2JJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxCbG9iSXRlbT4gY3JlYXRlKGNvbnN0IFN0cmluZyYgcGF0aCk7CisgICAgdmlydHVhbCBjb25z
dCBTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX2ZpbGVOYW1lOyB9CisgICAgdmlydHVh
bCBjb25zdCBTdHJpbmcmIHBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0KKworICAgIC8v
IEJsb2JJdGVtIG1ldGhvZHMuCisgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSgp
IGNvbnN0OworICAgIHZpcnR1YWwgY29uc3QgRmlsZUJsb2JJdGVtKiB0b0ZpbGVCbG9iSXRlbSgp
IGNvbnN0IHsgcmV0dXJuIHRoaXM7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8QmxvYkl0ZW0+
IGRlZXBDb3B5KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGVxdWFscyhjb25zdCBCbG9iSXRl
bSopIGNvbnN0OworCitwcm90ZWN0ZWQ6CisgICAgRmlsZUJsb2JJdGVtKGNvbnN0IFN0cmluZyYg
cGF0aCk7CisgICAgU3RyaW5nIG1fcGF0aDsKKyAgICBTdHJpbmcgbV9maWxlTmFtZTsKK307CisK
K2NsYXNzIFN0cmluZ0Jsb2JJdGVtIDogcHVibGljIERhdGFCbG9iSXRlbSB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8QmxvYkl0ZW0+IGNyZWF0ZShjb25zdCBTdHJpbmcmLCBFbmRp
bmdUeXBlLCBUZXh0RW5jb2RpbmcpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJsb2JJdGVtPiBj
cmVhdGUoY29uc3QgQ1N0cmluZyYpOworICAgIGNvbnN0IENTdHJpbmcmIGNzdHIoKSBjb25zdCB7
IHJldHVybiBtX2RhdGE7IH0KKworICAgIC8vIEJsb2JJdGVtIG1ldGhvZHMuCisgICAgdmlydHVh
bCB1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5sZW5ndGgo
KTsgfQorICAgIHZpcnR1YWwgY29uc3QgU3RyaW5nQmxvYkl0ZW0qIHRvU3RyaW5nQmxvYkl0ZW0o
KSBjb25zdCB7IHJldHVybiB0aGlzOyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEJsb2JJdGVt
PiBkZWVwQ29weSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBlcXVhbHMoY29uc3QgQmxvYkl0
ZW0qKSBjb25zdDsKKworICAgIC8vIERhdGFCbG9iSXRlbSBtZXRob2RzLgorICAgIHZpcnR1YWwg
Y29uc3QgY2hhciogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5kYXRhKCk7IH0KKworcHJp
dmF0ZToKKyAgICBTdHJpbmdCbG9iSXRlbShjb25zdCBTdHJpbmcmLCBFbmRpbmdUeXBlLCBUZXh0
RW5jb2RpbmcpOworICAgIFN0cmluZ0Jsb2JJdGVtKGNvbnN0IENTdHJpbmcmKTsKKyAgICBzdGF0
aWMgQ1N0cmluZyBjb252ZXJ0VG9DU3RyaW5nKGNvbnN0IFN0cmluZyYsIEVuZGluZ1R5cGUsIFRl
eHRFbmNvZGluZyk7CisgICAgQ1N0cmluZyBtX2RhdGE7Cit9OworCitjbGFzcyBCeXRlc0FycmF5
QmxvYkl0ZW0gOiBwdWJsaWMgRGF0YUJsb2JJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxCbG9iSXRlbT4gY3JlYXRlKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBzaXplKTsK
KworICAgIC8vIEJsb2JJdGVtIG1ldGhvZHMuCisgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxv
bmcgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZXNBcnJheS5zaXplKCk7IH0KKyAgICB2aXJ0
dWFsIGNvbnN0IEJ5dGVzQXJyYXlCbG9iSXRlbSogdG9CeXRlc0FycmF5QmxvYkl0ZW0oKSBjb25z
dCB7IHJldHVybiB0aGlzOyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEJsb2JJdGVtPiBkZWVw
Q29weSgpIGNvbnN0OworCisgICAgLy8gRGF0YUJsb2JJdGVtIG1ldGhvZHMuCisgICAgdmlydHVh
bCBjb25zdCBjaGFyKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlc0FycmF5LmRhdGEoKTsg
fQorCitwcml2YXRlOgorICAgIEJ5dGVzQXJyYXlCbG9iSXRlbShjb25zdCBjaGFyKiBkYXRhLCBz
aXplX3Qgc2l6ZSk7CisgICAgVmVjdG9yPGNoYXI+IG1fYnl0ZXNBcnJheTsKK307CisKKyNpZiBF
TkFCTEUoQkxPQl9TTElDRSkKKworLy8gQmxvYkl0ZW0gY2xhc3MgZm9yIHNsaWNlZCBkYXRhIChz
dHJpbmcgb3IgYnl0ZXMtYXJyYXkpLgorY2xhc3MgRGF0YVJhbmdlQmxvYkl0ZW0gOiBwdWJsaWMg
RGF0YUJsb2JJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCbG9iSXRlbT4g
Y3JlYXRlKFBhc3NSZWZQdHI8RGF0YUJsb2JJdGVtPiwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxv
bmcgbGVuZ3RoKTsKKworICAgIC8vIEJsb2JJdGVtIG1ldGhvZHMuCisgICAgdmlydHVhbCB1bnNp
Z25lZCBsb25nIGxvbmcgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9CisgICAgdmly
dHVhbCBjb25zdCBEYXRhUmFuZ2VCbG9iSXRlbSogdG9EYXRhUmFuZ2VCbG9iSXRlbSgpIGNvbnN0
IHsgcmV0dXJuIHRoaXM7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8QmxvYkl0ZW0+IGRlZXBD
b3B5KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGVxdWFscyhjb25zdCBCbG9iSXRlbSopIGNv
bnN0OworCisgICAgLy8gRGF0YUJsb2JJdGVtIG1ldGhvZHMuCisgICAgdmlydHVhbCBjb25zdCBj
aGFyKiBkYXRhKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgRGF0YVJhbmdlQmxvYkl0ZW0oUGFz
c1JlZlB0cjxEYXRhQmxvYkl0ZW0+IGl0ZW0sIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxl
bmd0aCk7CisgICAgUmVmUHRyPERhdGFCbG9iSXRlbT4gbV9pdGVtOworICAgIGxvbmcgbG9uZyBt
X3N0YXJ0OworICAgIGxvbmcgbG9uZyBtX2xlbmd0aDsKK307CisKK2NsYXNzIEZpbGVSYW5nZUJs
b2JJdGVtIDogcHVibGljIEZpbGVCbG9iSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8QmxvYkl0ZW0+IGNyZWF0ZShjb25zdCBTdHJpbmcmIHBhdGgsIGxvbmcgbG9uZyBzdGFy
dCwgbG9uZyBsb25nIGxlbmd0aCwgZG91YmxlIHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSk7Cisg
ICAgbG9uZyBsb25nIHN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbV9zdGFydDsgfQorICAgIGRvdWJs
ZSBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUoKSBjb25zdCB7IHJldHVybiBtX3NuYXBzaG90TW9k
aWZpY2F0aW9uVGltZTsgfQorCisgICAgLy8gQmxvYkl0ZW0gbWV0aG9kcy4KKyAgICB2aXJ0dWFs
IHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KKyAg
ICB2aXJ0dWFsIGNvbnN0IEZpbGVSYW5nZUJsb2JJdGVtKiB0b0ZpbGVSYW5nZUJsb2JJdGVtKCkg
Y29uc3QgeyByZXR1cm4gdGhpczsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3Q7
CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEJsb2JJdGVtPiBkZWVwQ29weSgpIGNvbnN0OworICAg
IHZpcnR1YWwgYm9vbCBlcXVhbHMoY29uc3QgQmxvYkl0ZW0qKSBjb25zdDsKKworICAgIC8vIEZp
bGVCbG9iSXRlbSBtZXRob2RzLgorICAgIHZpcnR1YWwgY29uc3QgU3RyaW5nJiBuYW1lKCkgY29u
c3QgeyByZXR1cm4gbV91bmlxdWVOYW1lOyB9CisKK3ByaXZhdGU6CisgICAgRmlsZVJhbmdlQmxv
Ykl0ZW0oY29uc3QgU3RyaW5nJiBwYXRoLCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5n
dGgsIGRvdWJsZSBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUpOworICAgIGxvbmcgbG9uZyBtX3N0
YXJ0OworICAgIGxvbmcgbG9uZyBtX2xlbmd0aDsKKyAgICBTdHJpbmcgbV91bmlxdWVOYW1lOwor
CisgICAgZG91YmxlIG1fc25hcHNob3RNb2RpZmljYXRpb25UaW1lOworfTsKKworI2VuZGlmIC8v
IEVOQUJMRShCTE9CX1NMSUNFKQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBCbG9iSXRlbV9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURh
dGEuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcAppbmRleCA5MTgw
MDJhZWZkODFhNjg5MWY5ZjE5YmFmNDRkNzU1OTFmZGZhNDg0Li5kYTM5OWI5MDNiMGJmMWRhYjll
NDIxYjE1N2M0ZmUzZTVhYWMxMmIxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvRm9ybURhdGEuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5j
cHAKQEAgLTE5LDIzICsxOSw0NiBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKwogI2lu
Y2x1ZGUgIkZvcm1EYXRhLmgiCiAKLSNpbmNsdWRlICJCbG9iLmgiCisjaW5jbHVkZSAiQmxvYkl0
ZW0uaCIKICNpbmNsdWRlICJDaHJvbWUuaCIKICNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKLSNp
bmNsdWRlICJET01Gb3JtRGF0YS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAi
RmlsZS5oIgogI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJGb3JtRGF0YUJ1aWxk
ZXIuaCIKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgog
I2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgotI2luY2x1ZGUgIlVVSUQuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCisjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCitjb25zdCBsb25nIGxvbmcgRm9y
bURhdGFFbGVtZW50Ojp0b0VuZE9mRmlsZSA9IC0xOworI2VuZGlmCisKK0Zvcm1EYXRhRWxlbWVu
dDo6Rm9ybURhdGFFbGVtZW50KFBhc3NSZWZQdHI8QmxvYkl0ZW0+IGJsb2JJdGVtLCBib29sIHNo
b3VsZEdlbmVyYXRlRmlsZSkKKyAgICA6IG1faXRlbShibG9iSXRlbSkKKyAgICAsIG1fdHlwZSht
X2l0ZW0tPnRvRmlsZUJsb2JJdGVtKCkgPyBlbmNvZGVkRmlsZSA6IGRhdGEpCisgICAgLCBtX2Rh
dGEobV9pdGVtLT50b0RhdGFCbG9iSXRlbSgpKQorICAgICwgbV9maWxlbmFtZShtX2l0ZW0tPnRv
RmlsZUJsb2JJdGVtKCkgPyBtX2l0ZW0tPnRvRmlsZUJsb2JJdGVtKCktPnBhdGgoKSA6IFN0cmlu
ZygpKQorICAgICwgbV9zaG91bGRHZW5lcmF0ZUZpbGUoc2hvdWxkR2VuZXJhdGVGaWxlKQorewor
I2lmIEVOQUJMRShCTE9CX1NMSUNFKQorICAgIGNvbnN0IEZpbGVSYW5nZUJsb2JJdGVtKiBmaWxl
UmFuZ2VJdGVtID0gbV9pdGVtLT50b0ZpbGVSYW5nZUJsb2JJdGVtKCk7CisgICAgaWYgKGZpbGVS
YW5nZUl0ZW0pIHsKKyAgICAgICAgbV9maWxlU3RhcnQgPSBmaWxlUmFuZ2VJdGVtLT5zdGFydCgp
OworICAgICAgICBtX2ZpbGVMZW5ndGggPSBmaWxlUmFuZ2VJdGVtLT5zaXplKCk7CisgICAgICAg
IG1fZXhwZWN0ZWRGaWxlTW9kaWZpY2F0aW9uVGltZSA9IGZpbGVSYW5nZUl0ZW0tPnNuYXBzaG90
TW9kaWZpY2F0aW9uVGltZSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fZmlsZVN0YXJ0ID0g
MDsKKyAgICAgICAgbV9maWxlTGVuZ3RoID0gdG9FbmRPZkZpbGU7CisgICAgICAgIG1fZXhwZWN0
ZWRGaWxlTW9kaWZpY2F0aW9uVGltZSA9IDA7CisgICAgfQorI2VuZGlmCit9CisKIGlubGluZSBG
b3JtRGF0YTo6Rm9ybURhdGEoKQogICAgIDogbV9pZGVudGlmaWVyKDApCiAgICAgLCBtX2hhc0dl
bmVyYXRlZEZpbGVzKGZhbHNlKQpAQCAtODUsNyArMTA4LDcgQEAgUGFzc1JlZlB0cjxGb3JtRGF0
YT4gRm9ybURhdGE6OmNyZWF0ZShjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSkKIFBhc3NS
ZWZQdHI8Rm9ybURhdGE+IEZvcm1EYXRhOjpjcmVhdGUoY29uc3QgQ1N0cmluZyYgc3RyaW5nKQog
ewogICAgIFJlZlB0cjxGb3JtRGF0YT4gcmVzdWx0ID0gY3JlYXRlKCk7Ci0gICAgcmVzdWx0LT5h
cHBlbmREYXRhKHN0cmluZy5kYXRhKCksIHN0cmluZy5sZW5ndGgoKSk7CisgICAgcmVzdWx0LT5h
cHBlbmRTdHJpbmcoc3RyaW5nKTsKICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0KIApA
QCAtOTYsMTcgKzExOSwxNyBAQCBQYXNzUmVmUHRyPEZvcm1EYXRhPiBGb3JtRGF0YTo6Y3JlYXRl
KGNvbnN0IFZlY3RvcjxjaGFyPiYgdmVjdG9yKQogICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgp
OwogfQogCi1QYXNzUmVmUHRyPEZvcm1EYXRhPiBGb3JtRGF0YTo6Y3JlYXRlKGNvbnN0IERPTUZv
cm1EYXRhJiBkb21Gb3JtRGF0YSkKK1Bhc3NSZWZQdHI8Rm9ybURhdGE+IEZvcm1EYXRhOjpjcmVh
dGUoY29uc3QgQmxvYkl0ZW1MaXN0JiBpdGVtcywgY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGlu
ZykKIHsKICAgICBSZWZQdHI8Rm9ybURhdGE+IHJlc3VsdCA9IGNyZWF0ZSgpOwotICAgIHJlc3Vs
dC0+YXBwZW5kRE9NRm9ybURhdGEoZG9tRm9ybURhdGEsIGZhbHNlLCAwKTsKKyAgICByZXN1bHQt
PmFwcGVuZEtleVZhbHVlUGFpckl0ZW1zKGl0ZW1zLCBlbmNvZGluZywgZmFsc2UsIDApOwogICAg
IHJldHVybiByZXN1bHQucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPEZvcm1EYXRhPiBGb3Jt
RGF0YTo6Y3JlYXRlTXVsdGlQYXJ0KGNvbnN0IERPTUZvcm1EYXRhJiBkb21Gb3JtRGF0YSwgRG9j
dW1lbnQqIGRvY3VtZW50KQorUGFzc1JlZlB0cjxGb3JtRGF0YT4gRm9ybURhdGE6OmNyZWF0ZU11
bHRpUGFydChjb25zdCBCbG9iSXRlbUxpc3QmIGl0ZW1zLCBjb25zdCBUZXh0RW5jb2RpbmcmIGVu
Y29kaW5nLCBEb2N1bWVudCogZG9jdW1lbnQpCiB7CiAgICAgUmVmUHRyPEZvcm1EYXRhPiByZXN1
bHQgPSBjcmVhdGUoKTsKLSAgICByZXN1bHQtPmFwcGVuZERPTUZvcm1EYXRhKGRvbUZvcm1EYXRh
LCB0cnVlLCBkb2N1bWVudCk7CisgICAgcmVzdWx0LT5hcHBlbmRLZXlWYWx1ZVBhaXJJdGVtcyhp
dGVtcywgZW5jb2RpbmcsIHRydWUsIGRvY3VtZW50KTsKICAgICByZXR1cm4gcmVzdWx0LnJlbGVh
c2UoKTsKIH0KIApAQCAtMTI1LDg0ICsxNDgsNjkgQEAgUGFzc1JlZlB0cjxGb3JtRGF0YT4gRm9y
bURhdGE6OmRlZXBDb3B5KCkgY29uc3QKICAgICBmb3JtRGF0YS0+bV9lbGVtZW50cy5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KG4pOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbjsgKytpKSB7
CiAgICAgICAgIGNvbnN0IEZvcm1EYXRhRWxlbWVudCYgZSA9IG1fZWxlbWVudHNbaV07Ci0gICAg
ICAgIHN3aXRjaCAoZS5tX3R5cGUpIHsKLSAgICAgICAgY2FzZSBGb3JtRGF0YUVsZW1lbnQ6OmRh
dGE6Ci0gICAgICAgICAgICBmb3JtRGF0YS0+bV9lbGVtZW50cy5hcHBlbmQoRm9ybURhdGFFbGVt
ZW50KGUubV9kYXRhKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBGb3JtRGF0
YUVsZW1lbnQ6OmVuY29kZWRGaWxlOgotI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgICAgICAg
ICAgZm9ybURhdGEtPm1fZWxlbWVudHMuYXBwZW5kKEZvcm1EYXRhRWxlbWVudChlLm1fZmlsZW5h
bWUsIGUubV9maWxlU3RhcnQsIGUubV9maWxlTGVuZ3RoLCBlLm1fZXhwZWN0ZWRGaWxlTW9kaWZp
Y2F0aW9uVGltZSwgZS5tX3Nob3VsZEdlbmVyYXRlRmlsZSkpOwotI2Vsc2UKLSAgICAgICAgICAg
IGZvcm1EYXRhLT5tX2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVsZW1lbnQoZS5tX2ZpbGVuYW1l
LCBlLm1fc2hvdWxkR2VuZXJhdGVGaWxlKSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9CisgICAgICAgIGZvcm1EYXRhLT5tX2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVs
ZW1lbnQoZS5pdGVtKCktPmRlZXBDb3B5KCksIGUubV9zaG91bGRHZW5lcmF0ZUZpbGUpKTsKICAg
ICB9CiAgICAgcmV0dXJuIGZvcm1EYXRhLnJlbGVhc2UoKTsKIH0KIAogdm9pZCBGb3JtRGF0YTo6
YXBwZW5kRGF0YShjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSkKIHsKLSAgICBpZiAobV9l
bGVtZW50cy5pc0VtcHR5KCkgfHwgbV9lbGVtZW50cy5sYXN0KCkubV90eXBlICE9IEZvcm1EYXRh
RWxlbWVudDo6ZGF0YSkKLSAgICAgICAgbV9lbGVtZW50cy5hcHBlbmQoRm9ybURhdGFFbGVtZW50
KCkpOwotICAgIEZvcm1EYXRhRWxlbWVudCYgZSA9IG1fZWxlbWVudHMubGFzdCgpOwotICAgIHNp
emVfdCBvbGRTaXplID0gZS5tX2RhdGEuc2l6ZSgpOwotICAgIGUubV9kYXRhLmdyb3cob2xkU2l6
ZSArIHNpemUpOwotICAgIG1lbWNweShlLm1fZGF0YS5kYXRhKCkgKyBvbGRTaXplLCBkYXRhLCBz
aXplKTsKKyAgICBtX2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVsZW1lbnQoQnl0ZXNBcnJheUJs
b2JJdGVtOjpjcmVhdGUoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEpLCBzaXplKSkpOwor
fQorCit2b2lkIEZvcm1EYXRhOjphcHBlbmRTdHJpbmcoY29uc3QgQ1N0cmluZyYgc3RyaW5nKQor
eworICAgIG1fZWxlbWVudHMuYXBwZW5kKEZvcm1EYXRhRWxlbWVudChTdHJpbmdCbG9iSXRlbTo6
Y3JlYXRlKHN0cmluZykpKTsKIH0KIAogdm9pZCBGb3JtRGF0YTo6YXBwZW5kRmlsZShjb25zdCBT
dHJpbmcmIGZpbGVuYW1lLCBib29sIHNob3VsZEdlbmVyYXRlRmlsZSkKIHsKLSNpZiBFTkFCTEUo
QkxPQl9TTElDRSkKLSAgICBtX2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVsZW1lbnQoZmlsZW5h
bWUsIDAsIEJsb2I6OnRvRW5kT2ZGaWxlLCBCbG9iOjpkb05vdENoZWNrRmlsZUNoYW5nZSwgc2hv
dWxkR2VuZXJhdGVGaWxlKSk7Ci0jZWxzZQotICAgIG1fZWxlbWVudHMuYXBwZW5kKEZvcm1EYXRh
RWxlbWVudChmaWxlbmFtZSwgc2hvdWxkR2VuZXJhdGVGaWxlKSk7Ci0jZW5kaWYKKyAgICBtX2Vs
ZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVsZW1lbnQoRmlsZUJsb2JJdGVtOjpjcmVhdGUoZmlsZW5h
bWUpLCBzaG91bGRHZW5lcmF0ZUZpbGUpKTsKK30KKwordm9pZCBGb3JtRGF0YTo6YXBwZW5kSXRl
bXMoY29uc3QgQmxvYkl0ZW1MaXN0JiBpdGVtcykKK3sKKyAgICBmb3IgKEJsb2JJdGVtTGlzdDo6
Y29uc3RfaXRlcmF0b3IgaXRlcihpdGVtcy5iZWdpbigpKTsgaXRlciAhPSBpdGVtcy5lbmQoKTsg
KytpdGVyKQorICAgICAgICBtX2VsZW1lbnRzLmFwcGVuZCgqaXRlcik7CiB9CiAKICNpZiBFTkFC
TEUoQkxPQl9TTElDRSkKIHZvaWQgRm9ybURhdGE6OmFwcGVuZEZpbGVSYW5nZShjb25zdCBTdHJp
bmcmIGZpbGVuYW1lLCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgsIGRvdWJsZSBl
eHBlY3RlZE1vZGlmaWNhdGlvblRpbWUsIGJvb2wgc2hvdWxkR2VuZXJhdGVGaWxlKQogewotICAg
IG1fZWxlbWVudHMuYXBwZW5kKEZvcm1EYXRhRWxlbWVudChmaWxlbmFtZSwgc3RhcnQsIGxlbmd0
aCwgZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lLCBzaG91bGRHZW5lcmF0ZUZpbGUpKTsKKyAgICBp
ZiAobGVuZ3RoID09IEZvcm1EYXRhRWxlbWVudDo6dG9FbmRPZkZpbGUpIHsKKyAgICAgICAgQVNT
RVJUKCFzdGFydCk7CisgICAgICAgIEFTU0VSVCghZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lKTsK
KyAgICAgICAgbV9lbGVtZW50cy5hcHBlbmQoRm9ybURhdGFFbGVtZW50KEZpbGVCbG9iSXRlbTo6
Y3JlYXRlKGZpbGVuYW1lKSwgc2hvdWxkR2VuZXJhdGVGaWxlKSk7CisgICAgfSBlbHNlCisgICAg
ICAgIG1fZWxlbWVudHMuYXBwZW5kKEZvcm1EYXRhRWxlbWVudChGaWxlUmFuZ2VCbG9iSXRlbTo6
Y3JlYXRlKGZpbGVuYW1lLCBzdGFydCwgbGVuZ3RoLCBleHBlY3RlZE1vZGlmaWNhdGlvblRpbWUp
LCBzaG91bGRHZW5lcmF0ZUZpbGUpKTsKIH0KICNlbmRpZgogCi12b2lkIEZvcm1EYXRhOjphcHBl
bmRET01Gb3JtRGF0YShjb25zdCBET01Gb3JtRGF0YSYgZG9tRm9ybURhdGEsIGJvb2wgaXNNdWx0
aVBhcnRGb3JtLCBEb2N1bWVudCogZG9jdW1lbnQpCit2b2lkIEZvcm1EYXRhOjphcHBlbmRLZXlW
YWx1ZVBhaXJJdGVtcyhjb25zdCBCbG9iSXRlbUxpc3QmIGl0ZW1zLCBjb25zdCBUZXh0RW5jb2Rp
bmcmIGVuY29kaW5nLCBib29sIGlzTXVsdGlQYXJ0Rm9ybSwgRG9jdW1lbnQqIGRvY3VtZW50KQog
ewogICAgIEZvcm1EYXRhQnVpbGRlciBmb3JtRGF0YUJ1aWxkZXI7CiAgICAgaWYgKGlzTXVsdGlQ
YXJ0Rm9ybSkKICAgICAgICAgbV9ib3VuZGFyeSA9IGZvcm1EYXRhQnVpbGRlci5nZW5lcmF0ZVVu
aXF1ZUJvdW5kYXJ5U3RyaW5nKCk7CiAKICAgICBWZWN0b3I8Y2hhcj4gZW5jb2RlZERhdGE7Ci0g
ICAgVGV4dEVuY29kaW5nIGVuY29kaW5nID0gZG9tRm9ybURhdGEuZW5jb2RpbmcoKTsKIAotICAg
IGNvbnN0IFZlY3RvcjxGb3JtRGF0YUxpc3Q6Okl0ZW0+JiBsaXN0ID0gZG9tRm9ybURhdGEubGlz
dCgpOwotICAgIHNpemVfdCBmb3JtRGF0YUxpc3RTaXplID0gbGlzdC5zaXplKCk7CisgICAgc2l6
ZV90IGZvcm1EYXRhTGlzdFNpemUgPSBpdGVtcy5zaXplKCk7CiAgICAgQVNTRVJUKCEoZm9ybURh
dGFMaXN0U2l6ZSAlIDIpKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZvcm1EYXRhTGlz
dFNpemU7IGkgKz0gMikgewotICAgICAgICBjb25zdCBGb3JtRGF0YUxpc3Q6Okl0ZW0mIGtleSA9
IGxpc3RbaV07Ci0gICAgICAgIGNvbnN0IEZvcm1EYXRhTGlzdDo6SXRlbSYgdmFsdWUgPSBsaXN0
W2kgKyAxXTsKKyAgICAgICAgY29uc3QgU3RyaW5nQmxvYkl0ZW0qIGtleSA9IGl0ZW1zW2ldLT50
b1N0cmluZ0Jsb2JJdGVtKCk7CisgICAgICAgIGNvbnN0IFJlZlB0cjxCbG9iSXRlbT4gdmFsdWUg
PSBpdGVtc1tpICsgMV07CisgICAgICAgIEFTU0VSVChrZXkpOworICAgICAgICBib29sIGFwcGVu
ZFZhbHVlID0gdHJ1ZTsKICAgICAgICAgaWYgKGlzTXVsdGlQYXJ0Rm9ybSkgewogICAgICAgICAg
ICAgVmVjdG9yPGNoYXI+IGhlYWRlcjsKLSAgICAgICAgICAgIGZvcm1EYXRhQnVpbGRlci5iZWdp
bk11bHRpUGFydEhlYWRlcihoZWFkZXIsIG1fYm91bmRhcnkuZGF0YSgpLCBrZXkuZGF0YSgpKTsK
KyAgICAgICAgICAgIGZvcm1EYXRhQnVpbGRlci5iZWdpbk11bHRpUGFydEhlYWRlcihoZWFkZXIs
IG1fYm91bmRhcnkuZGF0YSgpLCBrZXktPmNzdHIoKSk7CiAKICAgICAgICAgICAgIGJvb2wgc2hv
dWxkR2VuZXJhdGVGaWxlID0gZmFsc2U7CiAgICAgICAgICAgICAvLyBJZiB0aGUgY3VycmVudCB0
eXBlIGlzIEZJTEUsIHRoZW4gd2UgYWxzbyBuZWVkIHRvIGluY2x1ZGUgdGhlIGZpbGVuYW1lCi0g
ICAgICAgICAgICBpZiAodmFsdWUuYmxvYigpKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgU3Ry
aW5nJiBwYXRoID0gdmFsdWUuYmxvYigpLT5wYXRoKCk7Ci0jaWYgRU5BQkxFKEJMT0JfU0xJQ0Up
Ci0gICAgICAgICAgICAgICAgU3RyaW5nIGZpbGVOYW1lOwotICAgICAgICAgICAgICAgIGlmICh2
YWx1ZS5ibG9iKCktPmlzRmlsZSgpKQotICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZSA9IHN0
YXRpY19jYXN0PEZpbGUqPih2YWx1ZS5ibG9iKCkpLT5maWxlTmFtZSgpOwotICAgICAgICAgICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvLyBJZiBhIGJsb2IgaXMgc2xpY2VkIGZy
b20gYSBmaWxlLCBpdCBkb2VzIG5vdCBoYXZlIHRoZSBmaWxlbmFtZS4gSW4gdGhpcyBjYXNlLCBs
ZXQncyBwcm9kdWNlIGEgdW5pcXVlIGZpbGVuYW1lLgotICAgICAgICAgICAgICAgICAgICBmaWxl
TmFtZSA9ICJCbG9iIiArIGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKTsKLSAgICAgICAgICAg
ICAgICAgICAgZmlsZU5hbWUucmVwbGFjZSgiLSIsICIiKTsgLy8gRm9yIHNhZnR5LCByZW1vdmUg
Jy0nIGZyb20gdGhlIGZpbGVuYW1lIHNuY2Ugc29tZSBzZXJ2ZXJzIG1heSBub3QgbGlrZSBpdC4K
LSAgICAgICAgICAgICAgICB9Ci0jZWxzZQotICAgICAgICAgICAgICAgIEFTU0VSVCh2YWx1ZS5i
bG9iKCktPmlzRmlsZSgpKTsKLSAgICAgICAgICAgICAgICBTdHJpbmcgZmlsZU5hbWUgPSBzdGF0
aWNfY2FzdDxGaWxlKj4odmFsdWUuYmxvYigpKS0+ZmlsZU5hbWUoKTsKLSNlbmRpZgorICAgICAg
ICAgICAgY29uc3QgRmlsZUJsb2JJdGVtKiBmaWxlSXRlbSA9IHZhbHVlLT50b0ZpbGVCbG9iSXRl
bSgpOworICAgICAgICAgICAgaWYgKGZpbGVJdGVtKSB7CisgICAgICAgICAgICAgICAgY29uc3Qg
U3RyaW5nJiBwYXRoID0gZmlsZUl0ZW0tPnBhdGgoKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcg
ZmlsZU5hbWUgPSBmaWxlSXRlbS0+bmFtZSgpOwogCiAgICAgICAgICAgICAgICAgLy8gTGV0IHRo
ZSBhcHBsaWNhdGlvbiBzcGVjaWZ5IGEgZmlsZW5hbWUgaWYgaXQncyBnb2luZyB0byBnZW5lcmF0
ZSBhIHJlcGxhY2VtZW50IGZpbGUgZm9yIHRoZSB1cGxvYWQuCiAgICAgICAgICAgICAgICAgaWYg
KCFwYXRoLmlzRW1wdHkoKSkgewpAQCAtMjEyLDE0ICsyMjAsMTcgQEAgdm9pZCBGb3JtRGF0YTo6
YXBwZW5kRE9NRm9ybURhdGEoY29uc3QgRE9NRm9ybURhdGEmIGRvbUZvcm1EYXRhLCBib29sIGlz
TXVsdGlQYXIKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaG91bGRHZW5lcmF0ZUZpbGUp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWUgPSBnZW5lcmF0ZWRGaWxlTmFt
ZTsKICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgIC8vIElmIHRoZSBwYXRoIGlzIGVtcHR5IGRvIG5vdCBhZGQgdGhlIGZp
bGUgdG8gdGhlIGVsZW1lbnQgbGlzdC4KKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kVmFsdWUg
PSBmYWxzZTsKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAvLyBXZSBoYXZl
IHRvIGluY2x1ZGUgdGhlIGZpbGVuYW1lPSIuLiIgcGFydCBpbiB0aGUgaGVhZGVyLCBldmVuIGlm
IHRoZSBmaWxlbmFtZSBpcyBlbXB0eQogICAgICAgICAgICAgICAgIGZvcm1EYXRhQnVpbGRlci5h
ZGRGaWxlbmFtZVRvTXVsdGlQYXJ0SGVhZGVyKGhlYWRlciwgZW5jb2RpbmcsIGZpbGVOYW1lKTsK
IAotICAgICAgICAgICAgICAgIC8vIElmIGEgYmxvYiBpcyBzbGljZWQgZnJvbSBhIGZpbGUsIGRv
IG5vdCBhZGQgdGhlIGNvbnRlbnQgdHlwZS4gCisgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGl0
ZW0gaXMgc2xpY2VkIGZyb20gYSBmaWxlLCBkbyBub3QgYWRkIHRoZSBjb250ZW50IHR5cGUuCiAj
aWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgICAgICAgICAgICAgaWYgKCFmaWxlTmFtZS5pc0Vt
cHR5KCkgJiYgdmFsdWUuYmxvYigpLT5pc0ZpbGUoKSkgeworICAgICAgICAgICAgICAgIGlmICgh
ZmlsZU5hbWUuaXNFbXB0eSgpICYmICF2YWx1ZS0+dG9GaWxlUmFuZ2VCbG9iSXRlbSgpKSB7CiAj
ZWxzZQogICAgICAgICAgICAgICAgIGlmICghZmlsZU5hbWUuaXNFbXB0eSgpKSB7CiAjZW5kaWYK
QEAgLTIzNywyNSArMjQ4LDIxIEBAIHZvaWQgRm9ybURhdGE6OmFwcGVuZERPTUZvcm1EYXRhKGNv
bnN0IERPTUZvcm1EYXRhJiBkb21Gb3JtRGF0YSwgYm9vbCBpc011bHRpUGFyCiAKICAgICAgICAg
ICAgIC8vIEFwcGVuZCBib2R5CiAgICAgICAgICAgICBhcHBlbmREYXRhKGhlYWRlci5kYXRhKCks
IGhlYWRlci5zaXplKCkpOwotICAgICAgICAgICAgaWYgKHNpemVfdCBkYXRhU2l6ZSA9IHZhbHVl
LmRhdGEoKS5sZW5ndGgoKSkKLSAgICAgICAgICAgICAgICBhcHBlbmREYXRhKHZhbHVlLmRhdGEo
KS5kYXRhKCksIGRhdGFTaXplKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlLmJsb2IoKSAm
JiAhdmFsdWUuYmxvYigpLT5wYXRoKCkuaXNFbXB0eSgpKQotI2lmIEVOQUJMRShCTE9CX1NMSUNF
KQotICAgICAgICAgICAgICAgIGFwcGVuZEZpbGVSYW5nZSh2YWx1ZS5ibG9iKCktPnBhdGgoKSwg
dmFsdWUuYmxvYigpLT5zdGFydCgpLCB2YWx1ZS5ibG9iKCktPmxlbmd0aCgpLCB2YWx1ZS5ibG9i
KCktPm1vZGlmaWNhdGlvblRpbWUoKSwgc2hvdWxkR2VuZXJhdGVGaWxlKTsKLSNlbHNlCi0gICAg
ICAgICAgICAgICAgYXBwZW5kRmlsZSh2YWx1ZS5ibG9iKCktPnBhdGgoKSwgc2hvdWxkR2VuZXJh
dGVGaWxlKTsKLSNlbmRpZgotCisgICAgICAgICAgICBpZiAoYXBwZW5kVmFsdWUpCisgICAgICAg
ICAgICAgICAgbV9lbGVtZW50cy5hcHBlbmQoRm9ybURhdGFFbGVtZW50KHZhbHVlLCBzaG91bGRH
ZW5lcmF0ZUZpbGUpKTsKICAgICAgICAgICAgIGFwcGVuZERhdGEoIlxyXG4iLCAyKTsKICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIE9taXQgdGhlIG5hbWUgImlzaW5kZXgiIGlmIGl0
J3MgdGhlIGZpcnN0IGZvcm0gZGF0YSBlbGVtZW50LgogICAgICAgICAgICAgLy8gRklYTUU6IFdo
eSBpcyB0aGlzIGEgZ29vZCBydWxlPyBJcyB0aGlzIG9ic29sZXRlIG5vdz8KLSAgICAgICAgICAg
IGlmIChlbmNvZGVkRGF0YS5pc0VtcHR5KCkgJiYga2V5LmRhdGEoKSA9PSAiaXNpbmRleCIpCi0g
ICAgICAgICAgICAgICAgRm9ybURhdGFCdWlsZGVyOjplbmNvZGVTdHJpbmdBc0Zvcm1EYXRhKGVu
Y29kZWREYXRhLCB2YWx1ZS5kYXRhKCkpOworICAgICAgICAgICAgY29uc3QgU3RyaW5nQmxvYkl0
ZW0qIHN0cmluZ1ZhbHVlID0gdmFsdWUtPnRvU3RyaW5nQmxvYkl0ZW0oKTsKKyAgICAgICAgICAg
IGlmICghc3RyaW5nVmFsdWUpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICBpZiAoZW5jb2RlZERhdGEuaXNFbXB0eSgpICYmIGtleS0+Y3N0cigpID09ICJpc2luZGV4IikK
KyAgICAgICAgICAgICAgICBGb3JtRGF0YUJ1aWxkZXI6OmVuY29kZVN0cmluZ0FzRm9ybURhdGEo
ZW5jb2RlZERhdGEsIHN0cmluZ1ZhbHVlLT5jc3RyKCkpOwogICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIGZvcm1EYXRhQnVpbGRlci5hZGRLZXlWYWx1ZVBhaXJBc0Zvcm1EYXRhKGVu
Y29kZWREYXRhLCBrZXkuZGF0YSgpLCB2YWx1ZS5kYXRhKCkpOworICAgICAgICAgICAgICAgIGZv
cm1EYXRhQnVpbGRlci5hZGRLZXlWYWx1ZVBhaXJBc0Zvcm1EYXRhKGVuY29kZWREYXRhLCBrZXkt
PmNzdHIoKSwgc3RyaW5nVmFsdWUtPmNzdHIoKSk7CiAgICAgICAgIH0KLSAgICB9IAorICAgIH0K
IAogICAgIGlmIChpc011bHRpUGFydEZvcm0pCiAgICAgICAgIGZvcm1EYXRhQnVpbGRlci5hZGRC
b3VuZGFyeVRvTXVsdGlQYXJ0SGVhZGVyKGVuY29kZWREYXRhLCBtX2JvdW5kYXJ5LmRhdGEoKSwg
dHJ1ZSk7CkBAIC0yNzAsMTIgKzI3Nyw4IEBAIHZvaWQgRm9ybURhdGE6OmZsYXR0ZW4oVmVjdG9y
PGNoYXI+JiBkYXRhKSBjb25zdAogICAgIHNpemVfdCBuID0gbV9lbGVtZW50cy5zaXplKCk7CiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuOyArK2kpIHsKICAgICAgICAgY29uc3QgRm9ybURh
dGFFbGVtZW50JiBlID0gbV9lbGVtZW50c1tpXTsKLSAgICAgICAgaWYgKGUubV90eXBlID09IEZv
cm1EYXRhRWxlbWVudDo6ZGF0YSkgewotICAgICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBkYXRh
LnNpemUoKTsKLSAgICAgICAgICAgIHNpemVfdCBkZWx0YSA9IGUubV9kYXRhLnNpemUoKTsKLSAg
ICAgICAgICAgIGRhdGEuZ3JvdyhvbGRTaXplICsgZGVsdGEpOwotICAgICAgICAgICAgbWVtY3B5
KGRhdGEuZGF0YSgpICsgb2xkU2l6ZSwgZS5tX2RhdGEuZGF0YSgpLCBkZWx0YSk7Ci0gICAgICAg
IH0KKyAgICAgICAgaWYgKGUubV90eXBlID09IEZvcm1EYXRhRWxlbWVudDo6ZGF0YSkKKyAgICAg
ICAgICAgIGRhdGEuYXBwZW5kKGUubV9kYXRhLmRhdGEoKSwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihl
Lm1fZGF0YS5zaXplKCkpKTsKICAgICB9CiB9CiAKQEAgLTI4OSwxMCArMjkyLDEwIEBAIFN0cmlu
ZyBGb3JtRGF0YTo6ZmxhdHRlblRvU3RyaW5nKCkgY29uc3QKIHZvaWQgRm9ybURhdGE6OmdlbmVy
YXRlRmlsZXMoRG9jdW1lbnQqIGRvY3VtZW50KQogewogICAgIEFTU0VSVCghbV9oYXNHZW5lcmF0
ZWRGaWxlcyk7Ci0gICAgCisKICAgICBpZiAobV9oYXNHZW5lcmF0ZWRGaWxlcykKICAgICAgICAg
cmV0dXJuOwotICAgIAorCiAgICAgUGFnZSogcGFnZSA9IGRvY3VtZW50LT5wYWdlKCk7CiAgICAg
aWYgKCFwYWdlKQogICAgICAgICByZXR1cm47CkBAIC0zMDIsNyArMzA1LDcgQEAgdm9pZCBGb3Jt
RGF0YTo6Z2VuZXJhdGVGaWxlcyhEb2N1bWVudCogZG9jdW1lbnQpCiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBuOyArK2kpIHsKICAgICAgICAgRm9ybURhdGFFbGVtZW50JiBlID0gbV9lbGVt
ZW50c1tpXTsKICAgICAgICAgaWYgKGUubV90eXBlID09IEZvcm1EYXRhRWxlbWVudDo6ZW5jb2Rl
ZEZpbGUgJiYgZS5tX3Nob3VsZEdlbmVyYXRlRmlsZSkgewotICAgICAgICAgICAgZS5tX2dlbmVy
YXRlZEZpbGVuYW1lID0gY2xpZW50LT5nZW5lcmF0ZVJlcGxhY2VtZW50RmlsZShlLm1fZmlsZW5h
bWUpOworICAgICAgICAgICAgZS5tX2dlbmVyYXRlZEZpbGVuYW1lID0gY2xpZW50LT5nZW5lcmF0
ZVJlcGxhY2VtZW50RmlsZShlLml0ZW0oKS0+dG9GaWxlQmxvYkl0ZW0oKS0+cGF0aCgpKTsKICAg
ICAgICAgICAgIG1faGFzR2VuZXJhdGVkRmlsZXMgPSB0cnVlOwogICAgICAgICB9CiAgICAgfQpA
QCAtMzEyLDcgKzMxNSw3IEBAIHZvaWQgRm9ybURhdGE6OnJlbW92ZUdlbmVyYXRlZEZpbGVzSWZO
ZWVkZWQoKQogewogICAgIGlmICghbV9oYXNHZW5lcmF0ZWRGaWxlcykKICAgICAgICAgcmV0dXJu
OwotICAgICAgICAKKwogICAgIHNpemVfdCBuID0gbV9lbGVtZW50cy5zaXplKCk7CiAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBuOyArK2kpIHsKICAgICAgICAgRm9ybURhdGFFbGVtZW50JiBl
ID0gbV9lbGVtZW50c1tpXTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9G
b3JtRGF0YS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmgKaW5kZXggYTQz
OTAyMzQ3OTZhMGUyZjE0ZjVkMzQ5ZjVkZDBlZmZjMGE0YjdjZC4uM2RjNDhjYmE3YjU5MTBhM2Rk
NjIxMzAxMjZhNzViMWIyM2VmMDlhYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL0Zvcm1EYXRhLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmgK
QEAgLTIwLDc0ICsyMCw4OSBAQAogI2lmbmRlZiBGb3JtRGF0YV9oCiAjZGVmaW5lIEZvcm1EYXRh
X2gKIAorI2luY2x1ZGUgIkJsb2JJdGVtLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIK
ICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBET01Gb3JtRGF0YTsKIGNsYXNzIERvY3VtZW50
OworY2xhc3MgVGV4dEVuY29kaW5nOwogCisvLyBBIHdyYXBwZXIgY2xhc3Mgb2YgQmxvYkl0ZW0g
Zm9yIEZvcm1EYXRhLgogY2xhc3MgRm9ybURhdGFFbGVtZW50IHsKIHB1YmxpYzoKLSAgICBGb3Jt
RGF0YUVsZW1lbnQoKSA6IG1fdHlwZShkYXRhKSB7IH0KLSAgICBGb3JtRGF0YUVsZW1lbnQoY29u
c3QgVmVjdG9yPGNoYXI+JiBhcnJheSkgOiBtX3R5cGUoZGF0YSksIG1fZGF0YShhcnJheSkgeyB9
Ci0jaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgRm9ybURhdGFFbGVtZW50KGNvbnN0IFN0cmlu
ZyYgZmlsZW5hbWUsIGxvbmcgbG9uZyBmaWxlU3RhcnQsIGxvbmcgbG9uZyBmaWxlTGVuZ3RoLCBk
b3VibGUgZXhwZWN0ZWRGaWxlTW9kaWZpY2F0aW9uVGltZSwgYm9vbCBzaG91bGRHZW5lcmF0ZUZp
bGUpIDogbV90eXBlKGVuY29kZWRGaWxlKSwgbV9maWxlbmFtZShmaWxlbmFtZSksIG1fZmlsZVN0
YXJ0KGZpbGVTdGFydCksIG1fZmlsZUxlbmd0aChmaWxlTGVuZ3RoKSwgbV9leHBlY3RlZEZpbGVN
b2RpZmljYXRpb25UaW1lKGV4cGVjdGVkRmlsZU1vZGlmaWNhdGlvblRpbWUpLCBtX3Nob3VsZEdl
bmVyYXRlRmlsZShzaG91bGRHZW5lcmF0ZUZpbGUpIHsgfQotI2Vsc2UKLSAgICBGb3JtRGF0YUVs
ZW1lbnQoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgYm9vbCBzaG91bGRHZW5lcmF0ZUZpbGUpIDog
bV90eXBlKGVuY29kZWRGaWxlKSwgbV9maWxlbmFtZShmaWxlbmFtZSksIG1fc2hvdWxkR2VuZXJh
dGVGaWxlKHNob3VsZEdlbmVyYXRlRmlsZSkgeyB9Ci0jZW5kaWYKKyAgICBGb3JtRGF0YUVsZW1l
bnQoKSA6IG1fZGF0YSgwKSB7IH0KKyAgICBGb3JtRGF0YUVsZW1lbnQoUGFzc1JlZlB0cjxCbG9i
SXRlbT4gYmxvYkl0ZW0sIGJvb2wgc2hvdWxkR2VuZXJhdGVGaWxlID0gZmFsc2UpOworCisgICAg
Y29uc3QgQmxvYkl0ZW0qIGl0ZW0oKSBjb25zdCB7IHJldHVybiBtX2l0ZW0uZ2V0KCk7IH0KKwor
ICAgIFJlZlB0cjxCbG9iSXRlbT4gbV9pdGVtOwogCisgICAgLy8gRklYTUU6IGNsZWFuIG1lIHVw
LiAgQ29kZSBiZWxvdyBhcmUgbW9zdGx5IGtlcHQgZm9yIGNvbXBhdGliaWxpdHkuCiAgICAgZW51
bSB7IGRhdGEsIGVuY29kZWRGaWxlIH0gbV90eXBlOwotICAgIFZlY3RvcjxjaGFyPiBtX2RhdGE7
CisgICAgY29uc3Qgc3RydWN0IEJsb2JJdGVtV3JhcHBlciB7CisgICAgICAgIEJsb2JJdGVtV3Jh
cHBlcihjb25zdCBCbG9iSXRlbVdyYXBwZXImIHYpIDogbV9pdGVtKHYubV9pdGVtKSB7IH0KKyAg
ICAgICAgQmxvYkl0ZW1XcmFwcGVyKGNvbnN0IERhdGFCbG9iSXRlbSogaXRlbSkgOiBtX2l0ZW0o
aXRlbSkgeyB9CisgICAgICAgIHNpemVfdCBzaXplKCkgY29uc3QKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKCFtX2l0ZW0pCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2l0ZW0tPnNpemUoKSk7CisgICAgICAgIH0K
KyAgICAgICAgY29uc3QgY2hhciogZGF0YSgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAg
IGlmICghbV9pdGVtKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0
dXJuIG1faXRlbS0+ZGF0YSgpOworICAgICAgICB9CisgICAgICAgIGNoYXIqIHJlbGVhc2VCdWZm
ZXIoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIW1faXRlbSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBtX2l0ZW0tPmNvcHlCdWZmZXIo
KTsKKyAgICAgICAgfQorICAgICAgICBjb25zdCBEYXRhQmxvYkl0ZW0qIG1faXRlbTsKKyAgICB9
IG1fZGF0YTsKICAgICBTdHJpbmcgbV9maWxlbmFtZTsKICNpZiBFTkFCTEUoQkxPQl9TTElDRSkK
ICAgICBsb25nIGxvbmcgbV9maWxlU3RhcnQ7CiAgICAgbG9uZyBsb25nIG1fZmlsZUxlbmd0aDsK
ICAgICBkb3VibGUgbV9leHBlY3RlZEZpbGVNb2RpZmljYXRpb25UaW1lOworCisgICAgc3RhdGlj
IGNvbnN0IGxvbmcgbG9uZyB0b0VuZE9mRmlsZTsKICNlbmRpZgorCiAgICAgU3RyaW5nIG1fZ2Vu
ZXJhdGVkRmlsZW5hbWU7CiAgICAgYm9vbCBtX3Nob3VsZEdlbmVyYXRlRmlsZTsKIH07CiAKIGlu
bGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9ybURhdGFFbGVtZW50JiBhLCBjb25zdCBGb3Jt
RGF0YUVsZW1lbnQmIGIpCiB7Ci0gICAgaWYgKCZhID09ICZiKQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAKLSAgICBpZiAoYS5tX3R5cGUgIT0gYi5tX3R5cGUpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBpZiAoYS5tX2RhdGEgIT0gYi5tX2RhdGEpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAgICBpZiAoYS5tX2ZpbGVuYW1lICE9IGIubV9m
aWxlbmFtZSB8fCBhLm1fZmlsZVN0YXJ0ICE9IGIubV9maWxlU3RhcnQgfHwgYS5tX2ZpbGVMZW5n
dGggIT0gYi5tX2ZpbGVMZW5ndGggfHwgYS5tX2V4cGVjdGVkRmlsZU1vZGlmaWNhdGlvblRpbWUg
IT0gYi5tX2V4cGVjdGVkRmlsZU1vZGlmaWNhdGlvblRpbWUpCi0jZWxzZQotICAgIGlmIChhLm1f
ZmlsZW5hbWUgIT0gYi5tX2ZpbGVuYW1lKQotI2VuZGlmCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBhLml0ZW0oKS0+ZXF1YWxzKGIuaXRlbSgp
KTsKIH0KLSAKKwogaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGb3JtRGF0YUVsZW1lbnQm
IGEsIGNvbnN0IEZvcm1EYXRhRWxlbWVudCYgYikKIHsKICAgICByZXR1cm4gIShhID09IGIpOwog
fQotIAorCiBjbGFzcyBGb3JtRGF0YSA6IHB1YmxpYyBSZWZDb3VudGVkPEZvcm1EYXRhPiB7CiBw
dWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGNyZWF0ZSgpOwogICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEZvcm1EYXRhPiBjcmVhdGUoY29uc3Qgdm9pZCosIHNpemVfdCk7CiAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGNyZWF0ZShjb25zdCBXVEY6OkNTdHJpbmcm
KTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxGb3JtRGF0YT4gY3JlYXRlKGNvbnN0IFZlY3Rvcjxj
aGFyPiYpOwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZvcm1EYXRhPiBjcmVhdGUoY29uc3QgRE9N
Rm9ybURhdGEmKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxGb3JtRGF0YT4gY3JlYXRlTXVsdGlQ
YXJ0KGNvbnN0IERPTUZvcm1EYXRhJiwgRG9jdW1lbnQqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxGb3JtRGF0YT4gY3JlYXRlKGNvbnN0IEJsb2JJdGVtTGlzdCYsIGNvbnN0IFRleHRFbmNvZGlu
ZyYpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZvcm1EYXRhPiBjcmVhdGVNdWx0aVBhcnQoY29u
c3QgQmxvYkl0ZW1MaXN0JiwgY29uc3QgVGV4dEVuY29kaW5nJiwgRG9jdW1lbnQqKTsKICAgICBQ
YXNzUmVmUHRyPEZvcm1EYXRhPiBjb3B5KCkgY29uc3Q7CiAgICAgUGFzc1JlZlB0cjxGb3JtRGF0
YT4gZGVlcENvcHkoKSBjb25zdDsKICAgICB+Rm9ybURhdGEoKTsKLSAgICAKKwogICAgIHZvaWQg
YXBwZW5kRGF0YShjb25zdCB2b2lkKiBkYXRhLCBzaXplX3QpOworICAgIHZvaWQgYXBwZW5kSXRl
bXMoY29uc3QgQmxvYkl0ZW1MaXN0Jik7CisgICAgdm9pZCBhcHBlbmRTdHJpbmcoY29uc3QgQ1N0
cmluZyYpOwogICAgIHZvaWQgYXBwZW5kRmlsZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBib29s
IHNob3VsZEdlbmVyYXRlRmlsZSA9IGZhbHNlKTsKICNpZiBFTkFCTEUoQkxPQl9TTElDRSkKICAg
ICB2b2lkIGFwcGVuZEZpbGVSYW5nZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBsb25nIGxvbmcg
c3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgsIGRvdWJsZSBleHBlY3RlZE1vZGlmaWNhdGlvblRpbWUs
IGJvb2wgc2hvdWxkR2VuZXJhdGVGaWxlID0gZmFsc2UpOwpAQCAtMTE1LDkgKzEzMCwxMCBAQCBw
cml2YXRlOgogICAgIEZvcm1EYXRhKCk7CiAgICAgRm9ybURhdGEoY29uc3QgRm9ybURhdGEmKTsK
IAotICAgIHZvaWQgYXBwZW5kRE9NRm9ybURhdGEoY29uc3QgRE9NRm9ybURhdGEmIGRvbUZvcm1E
YXRhLCBib29sIGlzTXVsdGlQYXJ0Rm9ybSwgRG9jdW1lbnQqIGRvY3VtZW50KTsKKyAgICB2b2lk
IGFwcGVuZEtleVZhbHVlUGFpckl0ZW1zKGNvbnN0IEJsb2JJdGVtTGlzdCYsIGNvbnN0IFRleHRF
bmNvZGluZyYsIGJvb2wgaXNNdWx0aVBhcnRGb3JtLCBEb2N1bWVudCopOwogCiAgICAgVmVjdG9y
PEZvcm1EYXRhRWxlbWVudD4gbV9lbGVtZW50czsKKwogICAgIGludDY0X3QgbV9pZGVudGlmaWVy
OwogICAgIGJvb2wgbV9oYXNHZW5lcmF0ZWRGaWxlczsKICAgICBib29sIG1fYWx3YXlzU3RyZWFt
OwpAQCAtMTMxLDcgKzE0Nyw3IEBAIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9ybURh
dGEmIGEsIGNvbnN0IEZvcm1EYXRhJiBiKQogCiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IEZvcm1EYXRhJiBhLCBjb25zdCBGb3JtRGF0YSYgYikKIHsKLSAgICByZXR1cm4gYS5lbGVtZW50
cygpICE9IGIuZWxlbWVudHMoKTsKKyAgICByZXR1cm4gIShhID09IGIpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFj
L0Zvcm1EYXRhU3RyZWFtTWFjLm1tIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9Gb3Jt
RGF0YVN0cmVhbU1hYy5tbQppbmRleCAyN2VjZmQwOGFkNWFhYWI4NzU2ZmE1OTZkOTk2YmQyZjZl
YzVkMDNmLi4yNTJkZGY3Zjk3ZDVkOGJmNmQwY2RkMWQ4NzUyOGFmNTQxZTA3Mzc4IDEwMDY0NAot
LS0gYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL0Zvcm1EYXRhU3RyZWFtTWFjLm1tCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvRm9ybURhdGFTdHJlYW1NYWMubW0KQEAg
LTMxLDcgKzMxLDYgQEAKICNpbXBvcnQgImNvbmZpZy5oIgogI2ltcG9ydCAiRm9ybURhdGFTdHJl
YW1NYWMuaCIKIAotI2ltcG9ydCAiQmxvYi5oIgogI2ltcG9ydCAiRmlsZVN5c3RlbS5oIgogI2lt
cG9ydCAiRm9ybURhdGEuaCIKICNpbXBvcnQgIlJlc291cmNlSGFuZGxlLmgiCkBAIC0xNDIsNyAr
MTQxLDcgQEAgc3RhdGljIHZvaWQgY2xvc2VDdXJyZW50U3RyZWFtKEZvcm1TdHJlYW1GaWVsZHMg
KmZvcm0pCiAgICAgICAgIENGUmVsZWFzZShmb3JtLT5jdXJyZW50U3RyZWFtKTsKICAgICAgICAg
Zm9ybS0+Y3VycmVudFN0cmVhbSA9IE5VTEw7CiAjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAg
ICAgIGZvcm0tPmN1cnJlbnRTdHJlYW1SYW5nZUxlbmd0aCA9IEJsb2I6OnRvRW5kT2ZGaWxlOwor
ICAgICAgICBmb3JtLT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5ndGggPSBGb3JtRGF0YUVsZW1lbnQ6
OnRvRW5kT2ZGaWxlOwogI2VuZGlmCiAgICAgfQogICAgIGlmIChmb3JtLT5jdXJyZW50RGF0YSkg
ewpAQCAtMTUxLDcgKzE1MCw3IEBAIHN0YXRpYyB2b2lkIGNsb3NlQ3VycmVudFN0cmVhbShGb3Jt
U3RyZWFtRmllbGRzICpmb3JtKQogICAgIH0KIH0KIAotLy8gUmV0dXJuIGZhbHNlIGlmIHdlIGNh
bm5vdCBhZHZhbmNlIHRoZSBzdHJlYW0uIEN1cnJlbnRseSB0aGUgb25seSBwb3NzaWJsZSBmYWls
dXJlIGlzIHRoYXQgdGhlIHVuZGVybHlpbmcgZmlsZSBoYXMgYmVlbiBjaGFuZ2VkIHNpbmNlIEZp
bGUuc2xpY2UuIAorLy8gUmV0dXJuIGZhbHNlIGlmIHdlIGNhbm5vdCBhZHZhbmNlIHRoZSBzdHJl
YW0uIEN1cnJlbnRseSB0aGUgb25seSBwb3NzaWJsZSBmYWlsdXJlIGlzIHRoYXQgdGhlIHVuZGVy
bHlpbmcgZmlsZSBoYXMgYmVlbiByZW1vdmVkIG9yIGNoYW5nZWQgc2luY2UgRmlsZS5zbGljZS4K
IHN0YXRpYyBib29sIGFkdmFuY2VDdXJyZW50U3RyZWFtKEZvcm1TdHJlYW1GaWVsZHMqIGZvcm0p
CiB7CiAgICAgY2xvc2VDdXJyZW50U3RyZWFtKGZvcm0pOwpAQCAtMTYxLDI1ICsxNjAsMjUgQEAg
c3RhdGljIGJvb2wgYWR2YW5jZUN1cnJlbnRTdHJlYW0oRm9ybVN0cmVhbUZpZWxkcyogZm9ybSkK
IAogICAgIC8vIENyZWF0ZSB0aGUgbmV3IHN0cmVhbS4KICAgICBGb3JtRGF0YUVsZW1lbnQmIG5l
eHRJbnB1dCA9IGZvcm0tPnJlbWFpbmluZ0VsZW1lbnRzLmxhc3QoKTsKKworICAgIC8vIENoZWNr
IGlmIHRoZSB1bmRlcmx5aW5nIGRhdGEgaGFzIGJlY29tZSBzdGFsZSAoZS5nLiB0aGUgZmlsZSBo
YXMgYmVlbiBjaGFuZ2VkIHNpbmNlIGl0cyBzbmFwc2hvdCBoYXMgYmVlbiB0YWtlbikgb3Igbm90
LgorICAgIGlmICghbmV4dElucHV0Lm1faXRlbS0+aXNWYWxpZCgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKICAgICBpZiAobmV4dElucHV0Lm1fdHlwZSA9PSBGb3JtRGF0YUVsZW1lbnQ6OmRh
dGEpIHsKICAgICAgICAgc2l6ZV90IHNpemUgPSBuZXh0SW5wdXQubV9kYXRhLnNpemUoKTsKICAg
ICAgICAgY2hhciogZGF0YSA9IG5leHRJbnB1dC5tX2RhdGEucmVsZWFzZUJ1ZmZlcigpOwogICAg
ICAgICBmb3JtLT5jdXJyZW50U3RyZWFtID0gQ0ZSZWFkU3RyZWFtQ3JlYXRlV2l0aEJ5dGVzTm9D
b3B5KDAsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUludDgqPihkYXRhKSwgc2l6ZSwga0NGQWxs
b2NhdG9yTnVsbCk7CiAgICAgICAgIGZvcm0tPmN1cnJlbnREYXRhID0gZGF0YTsKICAgICB9IGVs
c2UgewotI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgICAgICAvLyBDaGVjayBpZiB0aGUgZmls
ZSBoYXMgYmVlbiBjaGFuZ2VkIG9yIG5vdCBpZiByZXF1aXJlZC4KLSAgICAgICAgaWYgKG5leHRJ
bnB1dC5tX2V4cGVjdGVkRmlsZU1vZGlmaWNhdGlvblRpbWUgIT0gQmxvYjo6ZG9Ob3RDaGVja0Zp
bGVDaGFuZ2UpIHsKLSAgICAgICAgICAgIHRpbWVfdCBmaWxlTW9kaWZpY2F0aW9uVGltZTsKLSAg
ICAgICAgICAgIGlmICghZ2V0RmlsZU1vZGlmaWNhdGlvblRpbWUobmV4dElucHV0Lm1fZmlsZW5h
bWUsIGZpbGVNb2RpZmljYXRpb25UaW1lKSB8fCBmaWxlTW9kaWZpY2F0aW9uVGltZSAhPSBzdGF0
aWNfY2FzdDx0aW1lX3Q+KG5leHRJbnB1dC5tX2V4cGVjdGVkRmlsZU1vZGlmaWNhdGlvblRpbWUp
KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotI2VuZGlmCi0KICAg
ICAgICAgY29uc3QgU3RyaW5nJiBwYXRoID0gbmV4dElucHV0Lm1fc2hvdWxkR2VuZXJhdGVGaWxl
ID8gbmV4dElucHV0Lm1fZ2VuZXJhdGVkRmlsZW5hbWUgOiBuZXh0SW5wdXQubV9maWxlbmFtZTsK
ICAgICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBmaWxlbmFtZShBZG9wdENGLCBwYXRoLmNy
ZWF0ZUNGU3RyaW5nKCkpOwogICAgICAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IGZpbGVVUkwoQWRv
cHRDRiwgQ0ZVUkxDcmVhdGVXaXRoRmlsZVN5c3RlbVBhdGgoMCwgZmlsZW5hbWUuZ2V0KCksIGtD
RlVSTFBPU0lYUGF0aFN0eWxlLCBGQUxTRSkpOwogICAgICAgICBmb3JtLT5jdXJyZW50U3RyZWFt
ID0gQ0ZSZWFkU3RyZWFtQ3JlYXRlV2l0aEZpbGUoMCwgZmlsZVVSTC5nZXQoKSk7CisgICAgICAg
IGlmICghZm9ybS0+Y3VycmVudFN0cmVhbSkgeworICAgICAgICAgICAgLy8gVGhlIGZpbGUgbXVz
dCBoYXZlIGJlZW4gcmVtb3ZlZCBvciBiZWNvbWUgdW5yZWFkYWJsZS4KKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQogI2lmIEVOQUJMRShCTE9CX1NMSUNFKQogICAgICAgICBp
ZiAobmV4dElucHV0Lm1fZmlsZVN0YXJ0ID4gMCkgewogICAgICAgICAgICAgQ0ZOdW1iZXJSZWYg
cG9zaXRpb24gPSBDRk51bWJlckNyZWF0ZSgwLCBrQ0ZOdW1iZXJMb25nTG9uZ1R5cGUsICZuZXh0
SW5wdXQubV9maWxlU3RhcnQpOwpAQCAtMjIyLDcgKzIyMSw3IEBAIHN0YXRpYyB2b2lkKiBmb3Jt
Q3JlYXRlKENGUmVhZFN0cmVhbVJlZiBzdHJlYW0sIHZvaWQqIGNvbnRleHQpCiAgICAgRm9ybVN0
cmVhbUZpZWxkcyogbmV3SW5mbyA9IG5ldyBGb3JtU3RyZWFtRmllbGRzOwogICAgIG5ld0luZm8t
PmN1cnJlbnRTdHJlYW0gPSBOVUxMOwogI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgIG5ld0lu
Zm8tPmN1cnJlbnRTdHJlYW1SYW5nZUxlbmd0aCA9IEJsb2I6OnRvRW5kT2ZGaWxlOworICAgIG5l
d0luZm8tPmN1cnJlbnRTdHJlYW1SYW5nZUxlbmd0aCA9IEZvcm1EYXRhRWxlbWVudDo6dG9FbmRP
ZkZpbGU7CiAjZW5kaWYKICAgICBuZXdJbmZvLT5jdXJyZW50RGF0YSA9IDA7CiAgICAgbmV3SW5m
by0+Zm9ybVN0cmVhbSA9IHN0cmVhbTsgLy8gRG9uJ3QgcmV0YWluLiBUaGF0IHdvdWxkIGNyZWF0
ZSBhIHJlZmVyZW5jZSBjeWNsZS4KQEAgLTI3MCw3ICsyNjksNyBAQCBzdGF0aWMgQ0ZJbmRleCBm
b3JtUmVhZChDRlJlYWRTdHJlYW1SZWYgc3RyZWFtLCBVSW50OCogYnVmZmVyLCBDRkluZGV4IGJ1
ZmZlckxlbgogICAgIHdoaWxlIChmb3JtLT5jdXJyZW50U3RyZWFtKSB7CiAgICAgICAgIENGSW5k
ZXggYnl0ZXNUb1JlYWQgPSBidWZmZXJMZW5ndGg7CiAjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0g
ICAgICAgIGlmIChmb3JtLT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5ndGggIT0gQmxvYjo6dG9FbmRP
ZkZpbGUgJiYgZm9ybS0+Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoIDwgYnl0ZXNUb1JlYWQpCisg
ICAgICAgIGlmIChmb3JtLT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5ndGggIT0gRm9ybURhdGFFbGVt
ZW50Ojp0b0VuZE9mRmlsZSAmJiBmb3JtLT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5ndGggPCBieXRl
c1RvUmVhZCkKICAgICAgICAgICAgIGJ5dGVzVG9SZWFkID0gc3RhdGljX2Nhc3Q8Q0ZJbmRleD4o
Zm9ybS0+Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoKTsKICNlbmRpZgogICAgICAgICBDRkluZGV4
IGJ5dGVzUmVhZCA9IENGUmVhZFN0cmVhbVJlYWQoZm9ybS0+Y3VycmVudFN0cmVhbSwgYnVmZmVy
LCBieXRlc1RvUmVhZCk7CkBAIC0yODMsNyArMjgyLDcgQEAgc3RhdGljIENGSW5kZXggZm9ybVJl
YWQoQ0ZSZWFkU3RyZWFtUmVmIHN0cmVhbSwgVUludDgqIGJ1ZmZlciwgQ0ZJbmRleCBidWZmZXJM
ZW4KICAgICAgICAgICAgICphdEVPRiA9IEZBTFNFOwogICAgICAgICAgICAgZm9ybS0+Ynl0ZXNT
ZW50ICs9IGJ5dGVzUmVhZDsKICNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAgICAgICAgICAgIGlm
IChmb3JtLT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5ndGggIT0gQmxvYjo6dG9FbmRPZkZpbGUpCisg
ICAgICAgICAgICBpZiAoZm9ybS0+Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoICE9IEZvcm1EYXRh
RWxlbWVudDo6dG9FbmRPZkZpbGUpCiAgICAgICAgICAgICAgICAgZm9ybS0+Y3VycmVudFN0cmVh
bVJhbmdlTGVuZ3RoIC09IGJ5dGVzUmVhZDsKICNlbmRpZgogCkBAIC00MDAsNyArMzk5LDcgQEAg
dm9pZCBzZXRIVFRQQm9keShOU011dGFibGVVUkxSZXF1ZXN0ICpyZXF1ZXN0LCBQYXNzUmVmUHRy
PEZvcm1EYXRhPiBmb3JtRGF0YSkKICAgICAgICAgZWxzZSB7CiAjaWYgRU5BQkxFKEJMT0JfU0xJ
Q0UpCiAgICAgICAgICAgICAvLyBJZiB3ZSdyZSBzZW5kaW5nIHRoZSBmaWxlIHJhbmdlLCB1c2Ug
dGhlIGV4aXN0aW5nIHJhbmdlIGxlbmd0aCBmb3Igbm93LiBXZSB3aWxsIGRldGVjdCBpZiB0aGUg
ZmlsZSBoYXMgYmVlbiBjaGFuZ2VkIHJpZ2h0IGJlZm9yZSB3ZSByZWFkIHRoZSBmaWxlIGFuZCBh
Ym9ydCB0aGUgb3BlcmF0aW9uIGlmIG5lY2Vzc2FyeS4KLSAgICAgICAgICAgIGlmIChlbGVtZW50
Lm1fZmlsZUxlbmd0aCAhPSBCbG9iOjp0b0VuZE9mRmlsZSkgeworICAgICAgICAgICAgaWYgKGVs
ZW1lbnQubV9maWxlTGVuZ3RoICE9IEZvcm1EYXRhRWxlbWVudDo6dG9FbmRPZkZpbGUpIHsKICAg
ICAgICAgICAgICAgICBsZW5ndGggKz0gZWxlbWVudC5tX2ZpbGVMZW5ndGg7CiAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3htbC9Y
TUxIdHRwUmVxdWVzdC5jcHAgYi9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKaW5kZXgg
NWNkZTI0ZGUyOWRiNDQyMTAwMDFhMzAyMzI0NGNhNGNjZDI1Y2ZiYi4uODMxYWRhOTgxMTIxMzk0
MmE4MDQ4NjRkYTU3ZjBhMzljNGJjYzI4ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS94bWwvWE1MSHR0
cFJlcXVlc3QuY3BwCisrKyBiL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcApAQCAtNDc4
LDExICs0NzgsNyBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpzZW5kKEJsb2IqIGJvZHksIEV4Y2Vw
dGlvbkNvZGUmIGVjKQogICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHdlIHNldCBhIENvbnRlbnQt
VHlwZSBpZiBvbmUgaXMgbm90IHNldC4KICAgICAgICAgLy8gRklYTUU6IGFkZCBzdXBwb3J0IGZv
ciB1cGxvYWRpbmcgYnVuZGxlcy4KICAgICAgICAgbV9yZXF1ZXN0RW50aXR5Qm9keSA9IEZvcm1E
YXRhOjpjcmVhdGUoKTsKLSNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAgICAgICAgbV9yZXF1ZXN0
RW50aXR5Qm9keS0+YXBwZW5kRmlsZVJhbmdlKGJvZHktPnBhdGgoKSwgYm9keS0+c3RhcnQoKSwg
Ym9keS0+bGVuZ3RoKCksIGJvZHktPm1vZGlmaWNhdGlvblRpbWUoKSk7Ci0jZWxzZQotICAgICAg
ICBtX3JlcXVlc3RFbnRpdHlCb2R5LT5hcHBlbmRGaWxlKGJvZHktPnBhdGgoKSwgZmFsc2UpOwot
I2VuZGlmCisgICAgICAgIG1fcmVxdWVzdEVudGl0eUJvZHktPmFwcGVuZEl0ZW1zKGJvZHktPml0
ZW1zKCkpOwogICAgIH0KIAogICAgIGNyZWF0ZVJlcXVlc3QoZWMpOwpAQCAtNDk0LDcgKzQ5MCw3
IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OnNlbmQoRE9NRm9ybURhdGEqIGJvZHksIEV4Y2VwdGlv
bkNvZGUmIGVjKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV9tZXRob2QgIT0gIkdFVCIg
JiYgbV9tZXRob2QgIT0gIkhFQUQiICYmIG1fdXJsLnByb3RvY29sSW5IVFRQRmFtaWx5KCkpIHsK
LSAgICAgICAgbV9yZXF1ZXN0RW50aXR5Qm9keSA9IEZvcm1EYXRhOjpjcmVhdGVNdWx0aVBhcnQo
KmJvZHksIGRvY3VtZW50KCkpOworICAgICAgICBtX3JlcXVlc3RFbnRpdHlCb2R5ID0gRm9ybURh
dGE6OmNyZWF0ZU11bHRpUGFydChib2R5LT5pdGVtcygpLCBib2R5LT5lbmNvZGluZygpLCBkb2N1
bWVudCgpKTsKIAogICAgICAgICAvLyBXZSBuZWVkIHRvIGFzayB0aGUgY2xpZW50IHRvIHByb3Zp
ZGUgdGhlIGdlbmVyYXRlZCBmaWxlIG5hbWVzIGlmIG5lZWRlZC4gV2hlbiBGb3JtRGF0YSBmaWxs
cyB0aGUgZWxlbWVudAogICAgICAgICAvLyBmb3IgdGhlIGZpbGUsIGl0IGNvdWxkIHNldCBhIGZs
YWcgdG8gdXNlIHRoZSBnZW5lcmF0ZWQgZmlsZSBuYW1lLCBpLmUuIGEgcGFja2FnZSBmaWxlIG9u
IE1hYy4KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCmluZGV4IDg1OTM2OTg5N2YyMDhkY2JmN2JhODQwZTQzODJkNWRhNTQz
ZjdkY2IuLjBkNjUwMjQzNzE2OGJjMTM3ZDc3NGEyYWVjZTZiNWI2ZmNiMTJjNDUgMTAwNjQ0Ci0t
LSBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDEwLTA1LTI0ICBLaW51a28gWWFzdWRhICA8a2ludWtv
QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBSZWZhY3RvciBGb3JtRGF0YSBhbmQgQmxvYiBmb3IgYmV0dGVyIHN1cHBvcnQgb2Yg
QmxvYnMgc3ludGhlc2l6ZWQgYnkgQmxvYkJ1aWxkZXIuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zOTA4MworCisgICAgICAgIFJlcGxhY2UgRm9ybURh
dGFMaXN0OjpJdGVtIGxpc3Qgd2l0aCBCbG9iSXRlbUxpc3QgdG8gZ2V0IGl0IGNvbXBpbGVkCisg
ICAgICAgIHdpdGggdGhlIHJlZmFjdG9yaW5nIGluIEZvcm1EYXRhTGlzdC4KKworICAgICAgICAq
IHNyYy9XZWJTZWFyY2hhYmxlRm9ybURhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SGFzU3Vp
dGFibGVUZXh0RWxlbWVudCk6CisKIDIwMTAtMDUtMjUgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpbWl0cmkgR2xhemtvdi4KZGlmZiAt
LWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2VhcmNoYWJsZUZvcm1EYXRhLmNwcCBiL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViU2VhcmNoYWJsZUZvcm1EYXRhLmNwcAppbmRleCA4ZWVmNmNj
ODk0N2U1YzZjYzkzMzA1ZDJjYjYxMTU4ZWVlOWU2OGQ1Li43MjY5NGI3MTBhZjI1Y2E1OTgyNWNk
ZDY3OGE0MDliYmYxNGIxZTViIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNl
YXJjaGFibGVGb3JtRGF0YS5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZWFyY2hh
YmxlRm9ybURhdGEuY3BwCkBAIC0xODUsOCArMTg1LDggQEAgYm9vbCBIYXNTdWl0YWJsZVRleHRF
bGVtZW50KGNvbnN0IEhUTUxGb3JtRWxlbWVudCogZm9ybSwgVmVjdG9yPGNoYXI+KiBlbmNvZGVk
U3QKICAgICAgIGlmICghZm9ybUVsZW1lbnQtPmFwcGVuZEZvcm1EYXRhKGRhdGFMaXN0LCBmYWxz
ZSkpCiAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgIGNvbnN0IFZlY3RvcjxGb3JtRGF0YUxp
c3Q6Okl0ZW0+JiBpdGVtTGlzdCA9IGRhdGFMaXN0Lmxpc3QoKTsKLSAgICAgIGlmIChpc1RleHRF
bGVtZW50ICYmICFpdGVtTGlzdC5pc0VtcHR5KCkpIHsKKyAgICAgIGNvbnN0IEJsb2JJdGVtTGlz
dCYgaXRlbXMgPSBkYXRhTGlzdC5pdGVtcygpOworICAgICAgaWYgKGlzVGV4dEVsZW1lbnQgJiYg
IWl0ZW1zLmlzRW1wdHkoKSkgewogICAgICAgICAgIGlmICh0ZXh0RWxlbWVudCkgewogICAgICAg
ICAgICAgICAvLyBUaGUgYXV0by1jb21wbGV0ZSBiYXIgb25seSBrbm93cyBob3cgdG8gZmlsbCBp
biBvbmUgdmFsdWUuCiAgICAgICAgICAgICAgIC8vIFRoaXMgZm9ybSBoYXMgbXVsdGlwbGUgZmll
bGRzOyBkb24ndCB0cmVhdCBpdCBhcyBzZWFyY2hhYmxlLgpAQCAtMTk0LDIwICsxOTQsMjMgQEAg
Ym9vbCBIYXNTdWl0YWJsZVRleHRFbGVtZW50KGNvbnN0IEhUTUxGb3JtRWxlbWVudCogZm9ybSwg
VmVjdG9yPGNoYXI+KiBlbmNvZGVkU3QKICAgICAgICAgICB9CiAgICAgICAgICAgdGV4dEVsZW1l
bnQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oZm9ybUVsZW1lbnQpOwogICAgICAg
fQotICAgICAgZm9yIChWZWN0b3I8Rm9ybURhdGFMaXN0OjpJdGVtPjo6Y29uc3RfaXRlcmF0b3Ig
aihpdGVtTGlzdC5iZWdpbigpKTsgaiAhPSBpdGVtTGlzdC5lbmQoKTsgKytqKSB7CisgICAgICBm
b3IgKEJsb2JJdGVtTGlzdDo6Y29uc3RfaXRlcmF0b3IgaihpdGVtcy5iZWdpbigpKTsgaiAhPSBp
dGVtcy5lbmQoKTsgKytqKSB7CisgICAgICAgICAgY29uc3QgU3RyaW5nQmxvYkl0ZW0qIGl0ZW0g
PSAoKmopLT50b1N0cmluZ0Jsb2JJdGVtKCk7CisgICAgICAgICAgaWYgKCFpdGVtKQorICAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAvLyBIYW5kbGUgSVNJTkRFWCAvIDxpbnB1dCBu
YW1lPWlzaW5kZXg+IHNwZWNpYWxseSwgYnV0IG9ubHkgaWYgaXQncwogICAgICAgICAgIC8vIHRo
ZSBmaXJzdCBlbnRyeS4KLSAgICAgICAgICBpZiAoIWVuY29kZWRTdHJpbmctPmlzRW1wdHkoKSB8
fCBqLT5kYXRhKCkgIT0gImlzaW5kZXgiKSB7CisgICAgICAgICAgaWYgKCFlbmNvZGVkU3RyaW5n
LT5pc0VtcHR5KCkgfHwgaXRlbS0+Y3N0cigpICE9ICJpc2luZGV4IikgewogICAgICAgICAgICAg
ICBpZiAoIWVuY29kZWRTdHJpbmctPmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICAgIGVuY29k
ZWRTdHJpbmctPmFwcGVuZCgnJicpOwotICAgICAgICAgICAgICBGb3JtRGF0YUJ1aWxkZXI6OmVu
Y29kZVN0cmluZ0FzRm9ybURhdGEoKmVuY29kZWRTdHJpbmcsIGotPmRhdGEoKSk7CisgICAgICAg
ICAgICAgIEZvcm1EYXRhQnVpbGRlcjo6ZW5jb2RlU3RyaW5nQXNGb3JtRGF0YSgqZW5jb2RlZFN0
cmluZywgaXRlbS0+Y3N0cigpKTsKICAgICAgICAgICAgICAgZW5jb2RlZFN0cmluZy0+YXBwZW5k
KCc9Jyk7CiAgICAgICAgICAgfQogICAgICAgICAgICsrajsKICAgICAgICAgICBpZiAoZm9ybUVs
ZW1lbnQgPT0gdGV4dEVsZW1lbnQpCiAgICAgICAgICAgICAgIGVuY29kZWRTdHJpbmctPmFwcGVu
ZCgie3NlYXJjaFRlcm1zfSIsIDEzKTsKICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIEZv
cm1EYXRhQnVpbGRlcjo6ZW5jb2RlU3RyaW5nQXNGb3JtRGF0YSgqZW5jb2RlZFN0cmluZywgai0+
ZGF0YSgpKTsKKyAgICAgICAgICAgICAgRm9ybURhdGFCdWlsZGVyOjplbmNvZGVTdHJpbmdBc0Zv
cm1EYXRhKCplbmNvZGVkU3RyaW5nLCBpdGVtLT5jc3RyKCkpOwogICAgICAgfQogICAgIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57080</attachid>
            <date>2010-05-26 01:41:47 -0700</date>
            <delta_ts>2010-06-03 16:34:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-39083-20100526174144.patch</filename>
            <type>text/plain</type>
            <size>77041</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CmluZGV4IDJlNjBkNzk1OTAxYzZhNDhlNjMyODBmY2RhNmM0YzJiMDIyNGI3OGQuLjg1MWIy
ZTg4MDE3NzdkNDk5Njg0NjdmODU1OTFkODE0YTIzMjA5ZGMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
Q01ha2VMaXN0cy50eHQKKysrIGIvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTExNyw2ICsx
MTE3LDcgQEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAgIHBhZ2UvYW5pbWF0aW9uL0tleWZyYW1l
QW5pbWF0aW9uLmNwcAogCiAgICAgcGxhdGZvcm0vQXJlbmEuY3BwCisgICAgcGxhdGZvcm0vQmxv
Ykl0ZW0uY3BwCiAgICAgcGxhdGZvcm0vQ29udGVudFR5cGUuY3BwCiAgICAgcGxhdGZvcm0vQ29u
dGV4dE1lbnUuY3BwCiAgICAgcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDMxMTM5OTkw
ZjY0N2MxOTVmZGVjOThiZjNhYWM2MzkzYzAzMTUyOTAuLmM5YjM5MzdjNmM1ZGVhMjZkOTQxZWMy
NGFhNjFhZjc1OGUwN2M2MzcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dl
YkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTEgQEAKKzIwMTAtMDUtMjQgIEtpbnVrbyBZYXN1
ZGEgIDxraW51a29AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yIEZvcm1EYXRhIGFuZCBCbG9iIGZvciBiZXR0ZXIg
c3VwcG9ydCBvZiBCbG9icyBzeW50aGVzaXplZCBieSBCbG9iQnVpbGRlci4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5MDgzCisKKyAgICAgICAgLSBJ
bnRyb2R1Y2VzIGEgbmV3IGNsYXNzIEJsb2JJdGVtIGFzIGEgYmFzaWMgY29tcG9uZW50IG9mIEJs
b2IgYW5kCisgICAgICAgICAgRm9ybURhdGEgYW5kIG1ha2VzIEJsb2IgYXMgYSBjb2xsZWN0aW9u
IG9mIEJsb2JJdGVtcy4KKyAgICAgICAgLSBGaWxlIHdvdWxkIGJlY29tZSBhIHNwZWNpYWwgdHlw
ZSBvZiBCbG9iIHRoYXQgY29udGFpbnMgb25seSBvbmUKKyAgICAgICAgICBGaWxlQmxvYkl0ZW0u
CisgICAgICAgIC0gTWFrZXMgRm9ybURhdGFFbGVtZW50IGEgd3JhcHBlciBvZiBCbG9iSXRlbSAo
YXMgYSB0cmFuc2llbnQKKyAgICAgICAgICBzb2x1dGlvbikuCisgICAgICAgIC0gRml4IHRoZSBk
ZXBlbmRlbmN5IHZpb2xhdGlvbiBpbiBGb3JtRGF0YSBzbyB0aGF0IHRoZSBmaWxlcyB1bmRlcgor
ICAgICAgICAgIHBsYXRmb3JtLyBkbyBub3QgaW5jbHVkZSBhbnkgaHRtbC8gZmlsZXMuCisKKyAg
ICAgICAgVGhlIHBhdGNoIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgbGF0ZXN0IEZpbGUgQVBJIGNoYW5n
ZXMgKGUuZy4gdHlwZSwKKyAgICAgICAgdXJsIGFuZCBzbGljZSdzIHR5cGUgcGFyYW1ldGVycykg
YW5kIHNob3VsZCBub3QgY2hhbmdlIGFueSBvZiBpdHMKKyAgICAgICAgZXhpc3RpbmcgYmVoYXZp
b3JzLgorCisgICAgICAgIFRoZSBleGlzdGluZyB0ZXN0cyBzaG91bGQgYmUgYWJsZSB0byBiZSB1
c2VkIGZvciByZWdyZXNzaW9uLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAg
ICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdl
YkNvcmUucHJvOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAg
ICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBodG1s
L0Jsb2IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6QmxvYik6CisgICAgICAgIChXZWJD
b3JlOjpCbG9iOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OnBhdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6QmxvYjo6YXBwZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OnNsaWNl
KToKKyAgICAgICAgKiBodG1sL0Jsb2IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjp0eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkJs
b2I6Oml0ZW1zKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OkJsb2IpOgorICAgICAgICAqIGh0
bWwvRmlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWxlOjpGaWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbGU6Om5hbWUpOgorICAgICAgICAqIGh0bWwvRmlsZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsZTo6ZmlsZU5hbWUpOgorICAgICAgICAqIGh0bWwvRmlsZVJlYWRlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWxlUmVhZGVyOjpyZWFkQXNCaW5hcnlTdHJpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsZVJlYWRlcjo6cmVhZEFzVGV4dCk6CisgICAgICAgICogaHRtbC9GaWxl
U3RyZWFtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVTdHJlYW06Om9wZW5Gb3JSZWFkKToK
KyAgICAgICAgKiBodG1sL0Zvcm1EYXRhTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb3Jt
RGF0YUxpc3Q6OmFwcGVuZFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YUxpc3Q6
OmFwcGVuZEJsb2IpOgorICAgICAgICAqIGh0bWwvRm9ybURhdGFMaXN0Lmg6CisgICAgICAgIChX
ZWJDb3JlOjpGb3JtRGF0YUxpc3Q6Oml0ZW1zKToKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6OmNyZWF0ZUZvcm1E
YXRhKToKKyAgICAgICAgKiBodG1sL0hUTUxQcm9ncmVzc0VsZW1lbnQuY3BwOgorICAgICAgICAq
IHBsYXRmb3JtL0Jsb2JJdGVtLmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vQmxvYkl0
ZW0uaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YUVsZW1lbnQ6OkZvcm1EYXRhRWxlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpGb3JtRGF0YTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1E
YXRhOjpjcmVhdGVNdWx0aVBhcnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6OmRlZXBD
b3B5KToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjphcHBlbmREYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OkZvcm1EYXRhOjphcHBlbmRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Rm9y
bURhdGE6OmFwcGVuZEZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6OmFwcGVuZEJs
b2JJdGVtTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YTo6YXBwZW5kRmlsZVJhbmdl
KToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjphcHBlbmRJdGVtcyk6CisgICAgICAgICog
cGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGFF
bGVtZW50OjpGb3JtRGF0YUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGFFbGVt
ZW50OjppdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhRWxlbWVudDo6QmxvYkl0ZW1X
cmFwcGVyOjpCbG9iSXRlbVdyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGFFbGVt
ZW50OjpCbG9iSXRlbVdyYXBwZXI6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGFF
bGVtZW50OjpCbG9iSXRlbVdyYXBwZXI6OmRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURh
dGFFbGVtZW50OjpCbG9iSXRlbVdyYXBwZXI6OnJlbGVhc2VCdWZmZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvciE9KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9uZXR3b3JrL21hYy9Gb3JtRGF0YVN0cmVhbU1hYy5tbToKKyAgICAgICAg
KFdlYkNvcmU6OmNsb3NlQ3VycmVudFN0cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjphZHZhbmNl
Q3VycmVudFN0cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjpmb3JtQ3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OmZvcm1SZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEhUVFBCb2R5KToKKyAg
ICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0
cFJlcXVlc3Q6OnNlbmQpOgorCiAyMDEwLTA1LTI1ICBEdW1pdHJ1IERhbmlsaXVjICA8ZHVtaUBj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgY2hhbmdpbmcgImZ0czIiIHRvICJm
dHMzIiBpbiBvbmUgbG9jYXRpb24gSSBtaXNzZWQgaW4gcjYwMTg4LgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5hbSBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggMTgyNGQw
NjcxMDYzNmE0ZTNkZGRkOTI5NjM3Y2I0MzI0MjZlM2ZjMi4uYzI5OTAzNTkxZTI2ZjkzNTQ1NWI3
NjJlYzA4YThjNTIwMGEyODliYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQor
KysgYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC0xNTQyLDYgKzE1NDIsOCBAQCB3ZWJjb3Jl
X3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvcGxhdGZvcm0vQXJlbmEuY3BwIFwKIAlXZWJDb3JlL3Bs
YXRmb3JtL0FyZW5hLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vQXV0b2RyYWluZWRQb29sLmggXAor
CVdlYkNvcmUvcGxhdGZvcm0vQmxvYkl0ZW0uY3BwIFwKKwlXZWJDb3JlL3BsYXRmb3JtL0Jsb2JJ
dGVtLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vQ29udGVudFR5cGUuY3BwIFwKIAlXZWJDb3JlL3Bs
YXRmb3JtL0NvbnRlbnRUeXBlLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vQ29udGV4dE1lbnUuY3Bw
IFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKaW5kZXggNWZkY2I4YmE4YmRlYzZmMTJkZGZkNTAzMWU4ZmIzZjFkODMyYjhlZi4uYzFkNDc4
OGJiNmJkYTJmYWY5Y2Y2MDM4ODU4N2M5YzJmNGNkYjVmOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTI4NzAsNiArMjg3MCw4
IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vQXJlbmEuY3BwJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9BcmVuYS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9BdXRvZHJhaW5lZFBvb2wuaCcs
CisgICAgICAgICAgICAncGxhdGZvcm0vQmxvYkl0ZW0uY3BwJywKKyAgICAgICAgICAgICdwbGF0
Zm9ybS9CbG9iSXRlbS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9Db250ZW50VHlwZS5jcHAn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL0NvbnRlbnRUeXBlLmgnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL0NvbnRleHRNZW51LmNwcCcsCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUucHJv
IGIvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRleCBmMGZjOTMyNDViNjM2MjgzYTJkNmRhMmNkM2Q3
Y2Y0Y2VkMmYxOTkwLi45MGI1MzY0NTViYzM5ZmNiMGY4ZDgyYjAyZDg4MTkzNDZkYTFlYjAxIDEw
MDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUucHJvCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8K
QEAgLTgxMCw2ICs4MTAsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBwbGF0Zm9ybS9hbmltYXRpb24v
QW5pbWF0aW9uLmNwcCBcCiAgICAgcGxhdGZvcm0vYW5pbWF0aW9uL0FuaW1hdGlvbkxpc3QuY3Bw
IFwKICAgICBwbGF0Zm9ybS9BcmVuYS5jcHAgXAorICAgIHBsYXRmb3JtL0Jsb2JJdGVtLmNwcCBc
CiAgICAgcGxhdGZvcm0vdGV4dC9CYXNlNjQuY3BwIFwKICAgICBwbGF0Zm9ybS90ZXh0L0JpZGlD
b250ZXh0LmNwcCBcCiAgICAgcGxhdGZvcm0vQ29udGVudFR5cGUuY3BwIFwKQEAgLTE1NTcsNiAr
MTU1OCw3IEBAIEhFQURFUlMgKz0gXAogICAgIHBsYXRmb3JtL2FuaW1hdGlvbi9BbmltYXRpb24u
aCBcCiAgICAgcGxhdGZvcm0vYW5pbWF0aW9uL0FuaW1hdGlvbkxpc3QuaCBcCiAgICAgcGxhdGZv
cm0vQXJlbmEuaCBcCisgICAgcGxhdGZvcm0vQmxvYkl0ZW0uaCBcCiAgICAgcGxhdGZvcm0vQ29u
dGVudFR5cGUuaCBcCiAgICAgcGxhdGZvcm0vQ29udGV4dE1lbnUuaCBcCiAgICAgcGxhdGZvcm0v
Q3Jvc3NUaHJlYWRDb3BpZXIuaCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpp
bmRleCBjMGE2ZTI3N2M5ZjQ4MThmYjI0ZmM2ODdmMDFiOWRmOGU2NTkwMzQxLi44YjEyYjZhYzI1
NGM3YTg0MmY1ODYxZjRlZmJhYjk2MmM4MGIyMDYwIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2Vi
Q29yZS52Y3Byb2oKQEAgLTIyMzEzLDYgKzIyMzEzLDE0IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4N
CiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXEJsb2JJdGVtLmNwcCIN
CisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBs
YXRmb3JtXEJsb2JJdGVtLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxDb250ZW50VHlwZS5jcHAiDQogCQkJCT4NCiAJCQk8
L0ZpbGU+DQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2ogYi9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBl
NDJjYmZiM2Q0Y2Y2OTc4YjJkMWJjMmVmMzE2ZDI2N2QyYzJlZDIzLi4xM2I0ZjZlYmI3YjAzMzYx
MjFhZTc3NDIyOWNjNWM1NzFlMjJkYTgzIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagpAQCAtMjI3Nyw2ICsyMjc3LDggQEAKIAkJODk1MjUzREQxMTZDNEVGNTAw
Q0FCRjAwIC8qIEZpbGVTdHJlYW1Qcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gODk1MjUzREIxMTZDNEVGNTAwQ0FCRjAwIC8qIEZpbGVTdHJlYW1Q
cm94eS5oICovOyB9OwogCQk4OTUyNTNERjExNkM0RjA2MDBDQUJGMDAgLyogRmlsZVRocmVhZFRh
c2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg5NTI1
M0RFMTE2QzRGMDYwMENBQkYwMCAvKiBGaWxlVGhyZWFkVGFzay5oICovOyB9OwogCQk4RkFDNzc0
RDExOTg3MkNCMDAxNUFFOTQgLyogSlNNYWluVGhyZWFkRXhlY1N0YXRlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDhGOTM0RDg0MTE4OUYxRUUwMDUw
OEQ1RCAvKiBKU01haW5UaHJlYWRFeGVjU3RhdGUuY3BwICovOyB9OworCQk4OTg4RTEwRTExQTM1
MDhCMDBEQjczMkUgLyogQmxvYkl0ZW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gODk4OEUxMEMxMUEzNTA4QjAwREI3MzJFIC8qIEJsb2JJdGVtLmNw
cCAqLzsgfTsKKwkJODk4OEUxMEYxMUEzNTA4QjAwREI3MzJFIC8qIEJsb2JJdGVtLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4OTg4RTEwRDExQTM1MDhC
MDBEQjczMkUgLyogQmxvYkl0ZW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk5MzAyQjBCRDBENzlGODI5MDBDN0VFODMgLyogUGFnZUdyb3VwLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMDJCMEJD
MEQ3OUY4MjkwMEM3RUU4MyAvKiBQYWdlR3JvdXAuY3BwICovOyB9OwogCQk5MzAyQjBCRjBENzlG
ODJDMDBDN0VFODMgLyogUGFnZUdyb3VwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5MzAyQjBCRTBENzlGODJDMDBDN0VFODMgLyogUGFnZUdyb3VwLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTMwNUIy
NEQwOThGMUI2QjAwQzI4ODU1IC8qIFRpbWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5MzA1QjI0QzA5OEYxQjZCMDBDMjg4NTUgLyogVGltZXIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNzg2Myw2
ICs3ODY1LDggQEAKIAkJODk1MjUzREUxMTZDNEYwNjAwQ0FCRjAwIC8qIEZpbGVUaHJlYWRUYXNr
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbGVUaHJlYWRUYXNrLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCThGOTM0RDgzMTE4OUYxRUUwMDUwOEQ1RCAvKiBK
U01haW5UaHJlYWRFeGVjU3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNNYWluVGhyZWFkRXhlY1N0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCThG
OTM0RDg0MTE4OUYxRUUwMDUwOEQ1RCAvKiBKU01haW5UaHJlYWRFeGVjU3RhdGUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNNYWluVGhyZWFkRXhlY1N0YXRlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODk4OEUxMEMxMUEzNTA4QjAwREI3MzJF
IC8qIEJsb2JJdGVtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJs
b2JJdGVtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODk4OEUxMEQxMUEzNTA4
QjAwREI3MzJFIC8qIEJsb2JJdGVtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEJsb2JJdGVtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzMDJCMEJDMEQ3OUY4
MjkwMEM3RUU4MyAvKiBQYWdlR3JvdXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gUGFnZUdyb3VwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMw
MkIwQkUwRDc5RjgyQzAwQzdFRTgzIC8qIFBhZ2VHcm91cC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBQYWdlR3JvdXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
OTMwNUIyNEMwOThGMUI2QjAwQzI4ODU1IC8qIFRpbWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFRpbWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNTc4
Nyw2ICsxNTc5MSw4IEBACiAJCQkJQkNGQjJGNzQwOTdBMkUxQTAwQkE3MDNEIC8qIEFyZW5hLmNw
cCAqLywKIAkJCQlCQ0ZCMkY3NTA5N0EyRTFBMDBCQTcwM0QgLyogQXJlbmEuaCAqLywKIAkJCQk1
MUUxRUNCMTBDOTFDNTU2MDBEQzI1NUIgLyogQXV0b2RyYWluZWRQb29sLmggKi8sCisJCQkJODk4
OEUxMEMxMUEzNTA4QjAwREI3MzJFIC8qIEJsb2JJdGVtLmNwcCAqLywKKwkJCQk4OTg4RTEwRDEx
QTM1MDhCMDBEQjczMkUgLyogQmxvYkl0ZW0uaCAqLywKIAkJCQlCQ0M4Q0ZDQTA5ODZDRDI0MDAx
NDBCRjIgLyogQ29sb3JEYXRhLmdwZXJmICovLAogCQkJCTQxRDAxNUM5MEY0QjVDNzEwMDRBNjYy
RiAvKiBDb250ZW50VHlwZS5jcHAgKi8sCiAJCQkJNDFEMDE1QzgwRjRCNUM3MTAwNEE2NjJGIC8q
IENvbnRlbnRUeXBlLmggKi8sCkBAIC0xNjgyMiw2ICsxNjgyOCw3IEBACiAJCQkJQkM1RUI5MjAw
RTgyMDQwODAwQjI1OTY1IC8qIEJpbmRpbmdVUkkuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4OTk0
MzI4MEI0MjMzODgwMEQ3QzgwMiAvKiBCaXRtYXBJbWFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MkVBRkFGMEYxMEUyQUYyRDAwN0VEM0Q2IC8qIEJsb2IuaCBpbiBIZWFkZXJzICovLAorCQkJCTg5
ODhFMTBGMTFBMzUwOEIwMERCNzMyRSAvKiBCbG9iSXRlbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OTNGMTk5QkUwODI0NUU1OTAwMUU5QUJDIC8qIEJsb2NrRXhjZXB0aW9ucy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkM1RUI1RTEwRTgxQkU4NzAwQjI1OTY1IC8qIEJvcmRlckRhdGEuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDNUVCNURCMEU4MUI3RUEwMEIyNTk2NSAvKiBCb3JkZXJWYWx1ZS5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0xOTY0Miw2ICsxOTY0OSw3IEBACiAJCQkJQkM1RUI5MUYwRTgyMDQw
ODAwQjI1OTY1IC8qIEJpbmRpbmdVUkkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTg5OTQzMjkw
QjQyMzM4ODAwRDdDODAyIC8qIEJpdG1hcEltYWdlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJF
QUZBRjBFMTBFMkFGMkQwMDdFRDNENiAvKiBCbG9iLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTg5
ODhFMTBFMTFBMzUwOEIwMERCNzMyRSAvKiBCbG9iSXRlbS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk5M0YxOUFFMTA4MjQ1RTU5MDAxRTlBQkMgLyogQmxvY2tFeGNlcHRpb25zLm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQkNFQTQ4NTQwOTdEOTMwMjAwOTRDOUU0IC8qIGJyZWFrX2xpbmVzLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTkzMzA5RERBMDk5RTY0OTIwMDU2RTU4MSAvKiBCcmVha0Jsb2Nr
cXVvdGVDb21tYW5kLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjAzOTAsOCArMjAzOTgsOCBAQAog
CQkJCTUxRUM5MjY1MENFOTBERDQwMEY5MDMwOCAvKiBKU0N1c3RvbVNRTFN0YXRlbWVudEVycm9y
Q2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUEzNDE3Q0EwQ0VDRkYyNTAwNDlDQkRF
IC8qIEpTQ3VzdG9tVm9pZENhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxMEI5M0Mz
MEI3M0MyOTEwMDNFRDg5MCAvKiBKU0N1c3RvbVhQYXRoTlNSZXNvbHZlci5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQkxQUU4MkY4RjBDQUFGQTlEMDAyMjM3QUUgLyogSlNEYXRhYmFzZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlCQ0NFNThBQzEwNjFFOENGMDA4RkIzNUEgLyogSlNEYXRhYmFzZUN1
c3RvbS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkxQUU4MkY4RjBDQUFGQTlEMDAyMjM3QUUgLyog
SlNEYXRhYmFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzc3RDE2OTBGRjE5RjU2MDA3MDg4
N0IgLyogSlNEYXRhR3JpZENvbHVtbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzc3RDE2QjBG
RjE5RjU2MDA3MDg4N0IgLyogSlNEYXRhR3JpZENvbHVtbkxpc3QuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQkM3N0QxNTIwRkYxOUM3MzAwNzA4ODdCIC8qIEpTRGF0YUdyaWRDb2x1bW5MaXN0Q3Vz
dG9tLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0Jsb2IuY3Bw
IGIvV2ViQ29yZS9odG1sL0Jsb2IuY3BwCmluZGV4IDgzYmJkYzBjNTI2NDg0NTQyNjg4MTkyNjIx
Njg0YjYyODIwMjRiZjQuLmIxZjJkZjdhMDMxYmQ0NDZmNGNkMGNmOTk2YmMzOWYxYzhmNDk4NDMg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9CbG9iLmNwcAorKysgYi9XZWJDb3JlL2h0bWwvQmxv
Yi5jcHAKQEAgLTI5LDkwICsyOSw2OCBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKwog
I2luY2x1ZGUgIkJsb2IuaCIKIAorI2luY2x1ZGUgIkJsb2JJdGVtLmgiCiAjaW5jbHVkZSAiRmls
ZVN5c3RlbS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSNpZiBFTkFCTEUoQkxPQl9TTElD
RSkKLWNvbnN0IGludCBCbG9iOjp0b0VuZE9mRmlsZSA9IC0xOwotY29uc3QgZG91YmxlIEJsb2I6
OmRvTm90Q2hlY2tGaWxlQ2hhbmdlID0gMDsKLSNlbmRpZgotCiBCbG9iOjpCbG9iKGNvbnN0IFN0
cmluZyYgcGF0aCkKLSAgICA6IG1fcGF0aChwYXRoKQotI2lmIEVOQUJMRShCTE9CX1NMSUNFKQot
ICAgICwgbV9zdGFydCgwKQotICAgICwgbV9sZW5ndGgodG9FbmRPZkZpbGUpCi0gICAgLCBtX3Nu
YXBzaG90Q2FwdHVyZWQoZmFsc2UpCi0gICAgLCBtX3NuYXBzaG90U2l6ZSgwKQotICAgICwgbV9z
bmFwc2hvdE1vZGlmaWNhdGlvblRpbWUoZG9Ob3RDaGVja0ZpbGVDaGFuZ2UpCi0jZW5kaWYKIHsK
KyAgICAvLyBOb3RlOiB0aGlzIGRvZXNuJ3QgaW5pdGlhbGl6ZSB0aGUgdHlwZSB1bmxpa2UgRmls
ZShwYXRoKS4KKyAgICBhcHBlbmQoRmlsZUJsb2JJdGVtOjpjcmVhdGUocGF0aCkpOwogfQogCi0j
aWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi1CbG9iOjpCbG9iKGNvbnN0IFN0cmluZyYgcGF0aCwgbG9u
ZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoLCBsb25nIGxvbmcgc25hcHNob3RTaXplLCBk
b3VibGUgc25hcHNob3RNb2RpZmljYXRpb25UaW1lKQotICAgIDogbV9wYXRoKHBhdGgpCi0gICAg
LCBtX3N0YXJ0KHN0YXJ0KQotICAgICwgbV9sZW5ndGgobGVuZ3RoKQotICAgICwgbV9zbmFwc2hv
dENhcHR1cmVkKHRydWUpCi0gICAgLCBtX3NuYXBzaG90U2l6ZShzbmFwc2hvdFNpemUpCi0gICAg
LCBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZShzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUpCi17
Ci0gICAgQVNTRVJUKHN0YXJ0ID49IDAgJiYgbGVuZ3RoID49IDAgJiYgc3RhcnQgKyBsZW5ndGgg
PD0gc25hcHNob3RTaXplICYmIHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSk7Ci19Ci0jZW5kaWYK
LQogdW5zaWduZWQgbG9uZyBsb25nIEJsb2I6OnNpemUoKSBjb25zdAogewogICAgIC8vIEZJWE1F
OiBKYXZhU2NyaXB0IGNhbm5vdCByZXByZXNlbnQgc2l6ZXMgYXMgbGFyZ2UgYXMgdW5zaWduZWQg
bG9uZyBsb25nLCB3ZSBuZWVkIHRvCiAgICAgLy8gY29tZSB1cCB3aXRoIGFuIGV4Y2VwdGlvbiB0
byB0aHJvdyBpZiBmaWxlIHNpemUgaXMgbm90IHJlcHJlc2V0YWJsZS4KLSNpZiBFTkFCTEUoQkxP
Ql9TTElDRSkKLSAgICBpZiAobV9zbmFwc2hvdENhcHR1cmVkKQotICAgICAgICByZXR1cm4gbV9s
ZW5ndGg7Ci0jZW5kaWYKLSAgICBsb25nIGxvbmcgc2l6ZTsKLSAgICBpZiAoIWdldEZpbGVTaXpl
KG1fcGF0aCwgc2l6ZSkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBsb25nIGxvbmc+KHNpemUpOworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXpl
ID0gMDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1faXRlbXMuc2l6ZSgpOyArK2kpCisg
ICAgICAgIHNpemUgKz0gbV9pdGVtc1tpXS0+c2l6ZSgpOworICAgIHJldHVybiBzaXplOworfQor
Citjb25zdCBTdHJpbmcmIEJsb2I6OnBhdGgoKSBjb25zdAoreworICAgIEFTU0VSVChtX2l0ZW1z
LnNpemUoKSA9PSAxICYmIG1faXRlbXNbMF0tPnRvRmlsZUJsb2JJdGVtKCkpOworICAgIHJldHVy
biBtX2l0ZW1zWzBdLT50b0ZpbGVCbG9iSXRlbSgpLT5wYXRoKCk7Cit9CisKK3ZvaWQgQmxvYjo6
YXBwZW5kKFBhc3NSZWZQdHI8QmxvYkl0ZW0+IGl0ZW0pCit7CisgICAgbV9pdGVtcy5hcHBlbmQo
aXRlbSk7CiB9CiAKICNpZiBFTkFCTEUoQkxPQl9TTElDRSkKIFBhc3NSZWZQdHI8QmxvYj4gQmxv
Yjo6c2xpY2UobG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoKSBjb25zdAogewotICAg
IC8vIFdoZW4gd2Ugc2xpY2UgYSBmaWxlIGZvciB0aGUgZmlyc3QgdGltZSwgd2Ugb2J0YWluIGEg
c25hcHNob3Qgb2YgdGhlIGZpbGUgYnkgY2FwdHVyaW5nIGl0cyBjdXJyZW50IHNpemUgYW5kIG1v
ZGlmaWNhdGlvbiB0aW1lLgotICAgIC8vIFRoZSBtb2RpZmljYXRpb24gdGltZSB3aWxsIGJlIHVz
ZWQgdG8gdmVyaWZ5IGlmIHRoZSBmaWxlIGhhcyBiZWVuIGNoYW5nZWQgb3Igbm90LCB3aGVuIHRo
ZSB1bmRlcmx5aW5nIGRhdGEgYXJlIGFjY2Vzc2VkLgotICAgIGxvbmcgbG9uZyBzbmFwc2hvdFNp
emU7Ci0gICAgZG91YmxlIHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZTsKLSAgICBpZiAobV9zbmFw
c2hvdENhcHR1cmVkKSB7Ci0gICAgICAgIHNuYXBzaG90U2l6ZSA9IG1fc25hcHNob3RTaXplOwot
ICAgICAgICBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUgPSBtX3NuYXBzaG90TW9kaWZpY2F0aW9u
VGltZTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBJZiB3ZSBmYWlsIHRvIHJldHJpZXZlIHRo
ZSBzaXplIG9yIG1vZGlmaWNhdGlvbiB0aW1lLCBwcm9iYWJseSBkdWUgdG8gdGhhdCB0aGUgZmls
ZSBoYXMgYmVlbiBkZWxldGVkLCBhbiBlbXB0eSBibG9iIHdpbGwgYmUgcmV0dXJuZWQuCi0gICAg
ICAgIHRpbWVfdCBtb2RpZmljYXRpb25UaW1lOwotICAgICAgICBpZiAoIWdldEZpbGVTaXplKG1f
cGF0aCwgc25hcHNob3RTaXplKSB8fCAhZ2V0RmlsZU1vZGlmaWNhdGlvblRpbWUobV9wYXRoLCBt
b2RpZmljYXRpb25UaW1lKSkgewotICAgICAgICAgICAgc25hcHNob3RTaXplID0gMDsKLSAgICAg
ICAgICAgIHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSA9IDA7Ci0gICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgc25hcHNob3RNb2RpZmljYXRpb25UaW1lID0gbW9kaWZpY2F0aW9uVGltZTsKLSAg
ICB9Ci0KLSAgICAvLyBDbGFtcCB0aGUgcmFuZ2UgaWYgaXQgZXhjZWVkcyB0aGUgc2l6ZSBsaW1p
dC4KICAgICBpZiAoc3RhcnQgPCAwKQogICAgICAgICBzdGFydCA9IDA7CiAgICAgaWYgKGxlbmd0
aCA8IDApCiAgICAgICAgIGxlbmd0aCA9IDA7CiAKLSAgICBpZiAoc3RhcnQgPiBzbmFwc2hvdFNp
emUpIHsKKyAgICAvLyBDbGFtcCB0aGUgcmFuZ2UgaWYgaXQgZXhjZWVkcyB0aGUgc2l6ZSBsaW1p
dC4KKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxTaXplID0gc2l6ZSgpOworICAgIGlmIChz
dGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KHN0YXJ0KSA+IHRvdGFsU2l6ZSkgewogICAg
ICAgICBzdGFydCA9IDA7CiAgICAgICAgIGxlbmd0aCA9IDA7Ci0gICAgfSBlbHNlIGlmIChzdGFy
dCArIGxlbmd0aCA+IHNuYXBzaG90U2l6ZSkKLSAgICAgICAgbGVuZ3RoID0gc25hcHNob3RTaXpl
IC0gc3RhcnQ7CisgICAgfSBlbHNlIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+
KHN0YXJ0ICsgbGVuZ3RoKSA+IHRvdGFsU2l6ZSkKKyAgICAgICAgbGVuZ3RoID0gdG90YWxTaXpl
IC0gc3RhcnQ7CiAKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJsb2IobV9wYXRoLCBtX3N0YXJ0
ICsgc3RhcnQsIGxlbmd0aCwgc25hcHNob3RTaXplLCBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUp
KTsKKyAgICBzaXplX3QgaSA9IDA7CisgICAgUmVmUHRyPEJsb2I+IGJsb2IgPSBCbG9iOjpjcmVh
dGUoKTsKKyAgICBmb3IgKDsgaSA8IG1faXRlbXMuc2l6ZSgpICYmIHN0YXRpY19jYXN0PHVuc2ln
bmVkIGxvbmcgbG9uZz4oc3RhcnQpID49IG1faXRlbXNbaV0tPnNpemUoKTsgKytpKQorICAgICAg
ICBzdGFydCAtPSBtX2l0ZW1zW2ldLT5zaXplKCk7CisgICAgZm9yICg7IGxlbmd0aCA+IDAgJiYg
aSA8IG1faXRlbXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgYmxvYi0+bV9pdGVtcy5hcHBlbmQo
bV9pdGVtc1tpXS0+c2xpY2Uoc3RhcnQsIGxlbmd0aCkpOworICAgICAgICBsZW5ndGggLT0gYmxv
Yi0+bV9pdGVtcy5sYXN0KCktPnNpemUoKTsKKyAgICAgICAgc3RhcnQgPSAwOworICAgIH0KKyAg
ICByZXR1cm4gYmxvYi5yZWxlYXNlKCk7CiB9Ci0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoQkxP
Ql9TTElDRSkKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9o
dG1sL0Jsb2IuaCBiL1dlYkNvcmUvaHRtbC9CbG9iLmgKaW5kZXggZThiNWYzZmRmMDY5YTJiNDg3
NmVkMTZhYjgxYjIyZjBmZjAzODk3MC4uMzkxNzdiNTFlZTlkMDc4NjgzZjIwMmE2NTFkZjU4MjM4
ZjI3NDk1NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0Jsb2IuaAorKysgYi9XZWJDb3JlL2h0
bWwvQmxvYi5oCkBAIC0zMSwyMSArMzEsMjQgQEAKICNpZm5kZWYgQmxvYl9oCiAjZGVmaW5lIEJs
b2JfaAogCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkJsb2JJdGVtLmgi
CiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlIDx0aW1lLmg+CiAjaW5jbHVk
ZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBCbG9iIDog
cHVibGljIFJlZkNvdW50ZWQ8QmxvYj4gewogcHVibGljOgotI2lmIEVOQUJMRShCTE9CX1NMSUNF
KQotICAgIHN0YXRpYyBjb25zdCBpbnQgdG9FbmRPZkZpbGU7Ci0gICAgc3RhdGljIGNvbnN0IGRv
dWJsZSBkb05vdENoZWNrRmlsZUNoYW5nZTsKLSNlbmRpZgorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEJsb2I+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJsb2Io
KSk7CisgICAgfQogCisgICAgLy8gRklYTUU6IERlcHJlY2F0ZWQgbWV0aG9kLiAgVGhpcyBpcyBj
YWxsZWQgb25seSBmcm9tCisgICAgLy8gYmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVl
LmNwcCBhbmQgdGhlIHVzYWdlIGluIGl0IHdpbGwgYmVjb21lIGludmFsaWQgb25jZQorICAgIC8v
IEJsb2JCdWlsZGVyIGlzIGludHJvZHVjZWQuCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8QmxvYj4g
Y3JlYXRlKGNvbnN0IFN0cmluZyYgcGF0aCkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgQmxvYihwYXRoKSk7CkBAIC01Myw0NyArNTYsMjggQEAgcHVibGljOgogCiAgICAgdmly
dHVhbCB+QmxvYigpIHsgfQogCisgICAgdW5zaWduZWQgbG9uZyBsb25nIHNpemUoKSBjb25zdDsK
KyAgICBjb25zdCBTdHJpbmcmIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KICAgICB2
aXJ0dWFsIGJvb2wgaXNGaWxlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAotI2lmIEVOQUJM
RShCTE9CX1NMSUNFKQotICAgIFBhc3NSZWZQdHI8QmxvYj4gc2xpY2UobG9uZyBsb25nIHN0YXJ0
LCBsb25nIGxvbmcgbGVuZ3RoKSBjb25zdDsKLSNlbmRpZgotCi0gICAgY29uc3QgU3RyaW5nJiBw
YXRoKCkgY29uc3QgeyByZXR1cm4gbV9wYXRoOyB9Ci0gICAgdW5zaWduZWQgbG9uZyBsb25nIHNp
emUoKSBjb25zdDsKLSNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAgICBsb25nIGxvbmcgc3RhcnQo
KSBjb25zdCB7IHJldHVybiBtX3N0YXJ0OyB9Ci0gICAgbG9uZyBsb25nIGxlbmd0aCgpIGNvbnN0
IHsgcmV0dXJuIG1fbGVuZ3RoOyB9Ci0gICAgZG91YmxlIG1vZGlmaWNhdGlvblRpbWUoKSBjb25z
dCB7IHJldHVybiBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZTsgfQotI2VuZGlmCisgICAgLy8g
RklYTUU6IERlcHJlY2F0ZWQgbWV0aG9kLgorICAgIGNvbnN0IFN0cmluZyYgcGF0aCgpIGNvbnN0
OwogCi1wcm90ZWN0ZWQ6Ci0gICAgQmxvYihjb25zdCBTdHJpbmcmIHBhdGgpOworICAgIHZvaWQg
YXBwZW5kKFBhc3NSZWZQdHI8QmxvYkl0ZW0+KTsKKyAgICBjb25zdCBCbG9iSXRlbUxpc3QmIGl0
ZW1zKCkgY29uc3QgeyByZXR1cm4gbV9pdGVtczsgfQogCi1wcml2YXRlOgogI2lmIEVOQUJMRShC
TE9CX1NMSUNFKQotICAgIEJsb2IoY29uc3QgU3RyaW5nJiBwYXRoLCBsb25nIGxvbmcgc3RhcnQs
IGxvbmcgbG9uZyBsZW5ndGgsIGxvbmcgbG9uZyBzbmFwc2hvdFNpemUsIGRvdWJsZSBzbmFwc2hv
dE1vZGlmaWNhdGlvblRpbWUpOworICAgIFBhc3NSZWZQdHI8QmxvYj4gc2xpY2UobG9uZyBsb25n
IHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoKSBjb25zdDsKICNlbmRpZgogCi0gICAgLy8gVGhlIHVu
ZGVybHlpbmcgcGF0aCBvZiB0aGUgZmlsZS1iYXNlZCBibG9iLiAKLSAgICBTdHJpbmcgbV9wYXRo
OwotCi0jaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgLy8gVGhlIHN0YXJ0aW5nIHBvc2l0aW9u
IG9mIHRoZSBmaWxlLWJhc2VkIGJsb2IuCi0gICAgbG9uZyBsb25nIG1fc3RhcnQ7Ci0KLSAgICAv
LyBUaGUgbGVuZ3RoIG9mIHRoZSBmaWxlLWJhc2VkIGJsb2IuIFRoZSB2YWx1ZSBvZiAtMSBtZWFu
cyB0byB0aGUgZW5kIG9mIHRoZSBmaWxlLgotICAgIGxvbmcgbG9uZyBtX2xlbmd0aDsKLQotICAg
IC8vIEEgZmxhZyB0byB0ZWxsIGlmIGEgc25hcHNob3QgaGFzIGJlZW4gY2FwdHVyZWQuCi0gICAg
Ym9vbCBtX3NuYXBzaG90Q2FwdHVyZWQ7Citwcm90ZWN0ZWQ6CisgICAgQmxvYigpIHsgfQogCi0g
ICAgLy8gVGhlIHNpemUgb2YgdGhlIGZpbGUgd2hlbiBhIHNuYXBzaG90IGlzIGNhcHR1cmVkLiBJ
dCBjYW4gYmUgMCBpZiB0aGUgZmlsZSBpcyBlbXB0eS4KLSAgICBsb25nIGxvbmcgbV9zbmFwc2hv
dFNpemU7CisgICAgLy8gRklYTUU6IERlcHJlY2F0ZWQgY29uc3RydWN0b3IuICBTZWUgYWxzbyB0
aGUgY29tbWVudCBmb3IgQmxvYjo6Y3JlYXRlKHBhdGgpLgorICAgIEJsb2IoY29uc3QgU3RyaW5n
JiBwYXRoKTsKIAotICAgIC8vIFRoZSBsYXN0IG1vZGlmaWNhdGlvbiB0aW1lIG9mIHRoZSBmaWxl
IHdoZW4gYSBzbmFwc2hvdCBpcyBjYXB0dXJlZC4gVGhlIHZhbHVlIG9mIDAgYWxzbyBtZWFucyB0
aGF0IHRoZSBzbmFwc2hvdCBpcyBub3QgY2FwdHVyZWQuCi0gICAgZG91YmxlIG1fc25hcHNob3RN
b2RpZmljYXRpb25UaW1lOwotI2VuZGlmCisgICAgQmxvYkl0ZW1MaXN0IG1faXRlbXM7CisgICAg
U3RyaW5nIG1fdHlwZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvaHRtbC9GaWxlLmNwcCBiL1dlYkNvcmUvaHRtbC9GaWxlLmNwcAppbmRleCA5N2Zk
YzQ1NzhkNzRiMjI1ZTU5NDZmNGQ2YWVmMjU2NTI1NDQzYWU0Li4yYzljZTUzYjgzY2IwZGY3OWE4
NTk1MjJkYzkxNmYyNTViZDg0Y2MzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvRmlsZS5jcHAK
KysrIGIvV2ViQ29yZS9odG1sL0ZpbGUuY3BwCkBAIC0zMywxMiArMzMsMTcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBGaWxlOjpGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkKICAgICA6IEJsb2Io
cGF0aCkKLSAgICAsIG1fbmFtZShwYXRoR2V0RmlsZU5hbWUocGF0aCkpCiB7CiAgICAgLy8gV2Ug
ZG9uJ3QgdXNlIE1JTUVUeXBlUmVnaXN0cnk6OmdldE1JTUVUeXBlRm9yUGF0aCgpIGJlY2F1c2Ug
aXQgcmV0dXJucyAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIiB1cG9uIGZhaWx1cmUuCi0gICAg
aW50IGluZGV4ID0gbV9uYW1lLnJldmVyc2VGaW5kKCcuJyk7CisgICAgY29uc3QgU3RyaW5nJiBm
aWxlTmFtZSA9IG5hbWUoKTsKKyAgICBpbnQgaW5kZXggPSBmaWxlTmFtZS5yZXZlcnNlRmluZCgn
LicpOwogICAgIGlmIChpbmRleCAhPSAtMSkKLSAgICAgICAgbV90eXBlID0gTUlNRVR5cGVSZWdp
c3RyeTo6Z2V0TUlNRVR5cGVGb3JFeHRlbnNpb24obV9uYW1lLnN1YnN0cmluZyhpbmRleCArIDEp
KTsKKyAgICAgICAgbV90eXBlID0gTUlNRVR5cGVSZWdpc3RyeTo6Z2V0TUlNRVR5cGVGb3JFeHRl
bnNpb24oZmlsZU5hbWUuc3Vic3RyaW5nKGluZGV4ICsgMSkpOworfQorCitjb25zdCBTdHJpbmcm
IEZpbGU6Om5hbWUoKSBjb25zdAoreworICAgIHJldHVybiBpdGVtcygpLmF0KDApLT50b0ZpbGVC
bG9iSXRlbSgpLT5uYW1lKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaHRtbC9GaWxlLmggYi9XZWJDb3JlL2h0bWwvRmlsZS5oCmluZGV4IDA2NWRk
ODZhN2IxZWJmNzdmYjQwNjQ2ZjljNmU4NzA0NjlkN2ViMDkuLjU4MmRiMjg1MDNiZmZmMmI5NThl
M2Q1MjU1ZWY3YWJlOWE2MDU2OWEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9GaWxlLmgKKysr
IGIvV2ViQ29yZS9odG1sL0ZpbGUuaApAQCAtNDEsMTggKzQxLDE0IEBAIHB1YmxpYzoKIAogICAg
IHZpcnR1YWwgYm9vbCBpc0ZpbGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKLSAgICBjb25z
dCBTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KLSAgICBjb25zdCBTdHJp
bmcmIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKyAgICBjb25zdCBTdHJpbmcmIG5h
bWUoKSBjb25zdDsKIAogICAgIC8vIEZJWE1FOiBvYnNvbGV0ZSBhdHRyaWJ1dGVzLiBUbyBiZSBy
ZW1vdmVkLgotICAgIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUoKSBjb25zdCB7IHJldHVybiBtX25h
bWU7IH0KKyAgICBjb25zdCBTdHJpbmcmIGZpbGVOYW1lKCkgY29uc3QgeyByZXR1cm4gbmFtZSgp
OyB9CiAgICAgdW5zaWduZWQgbG9uZyBsb25nIGZpbGVTaXplKCkgY29uc3QgeyByZXR1cm4gc2l6
ZSgpOyB9CiAKIHByaXZhdGU6CiAgICAgRmlsZShjb25zdCBTdHJpbmcmIHBhdGgpOwotCi0gICAg
U3RyaW5nIG1fbmFtZTsKLSAgICBTdHJpbmcgbV90eXBlOwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0ZpbGVSZWFkZXIuY3BwIGIvV2ViQ29y
ZS9odG1sL0ZpbGVSZWFkZXIuY3BwCmluZGV4IDM0NDIzNDIyNzU4MTI3YmVkNzczODcyYzRmZjMx
ZmEwMWRmYWM0ZTQuLjJlMDIwYzExMzUwNWNjYjZmNDQzYThkMjU2YjBlOWExYmFiMDgwMzQgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9GaWxlUmVhZGVyLmNwcAorKysgYi9XZWJDb3JlL2h0bWwv
RmlsZVJlYWRlci5jcHAKQEAgLTg1LDYgKzg1LDcgQEAgdm9pZCBGaWxlUmVhZGVyOjpzdG9wKCkK
IAogdm9pZCBGaWxlUmVhZGVyOjpyZWFkQXNCaW5hcnlTdHJpbmcoQmxvYiogZmlsZUJsb2IpCiB7
CisgICAgLy8gRklYTUU6IG5lZWRzIHRvIGhhbmRsZSBub24tZmlsZSBibG9icy4KICAgICBMT0co
RmlsZUFQSSwgIkZpbGVSZWFkZXI6IHJlYWRpbmcgYXMgYmluYXJ5OiAlc1xuIiwgZmlsZUJsb2It
PnBhdGgoKS51dGY4KCkuZGF0YSgpKTsKIAogICAgIHJlYWRJbnRlcm5hbChmaWxlQmxvYiwgUmVh
ZEZpbGVBc0JpbmFyeVN0cmluZyk7CkBAIC05Miw2ICs5Myw3IEBAIHZvaWQgRmlsZVJlYWRlcjo6
cmVhZEFzQmluYXJ5U3RyaW5nKEJsb2IqIGZpbGVCbG9iKQogCiB2b2lkIEZpbGVSZWFkZXI6OnJl
YWRBc1RleHQoQmxvYiogZmlsZUJsb2IsIGNvbnN0IFN0cmluZyYgZW5jb2RpbmcpCiB7CisgICAg
Ly8gRklYTUU6IG5lZWRzIHRvIGhhbmRsZSBub24tZmlsZSBibG9icy4KICAgICBMT0coRmlsZUFQ
SSwgIkZpbGVSZWFkZXI6IHJlYWRpbmcgYXMgdGV4dDogJXNcbiIsIGZpbGVCbG9iLT5wYXRoKCku
dXRmOCgpLmRhdGEoKSk7CiAKICAgICBpZiAoIWVuY29kaW5nLmlzRW1wdHkoKSkKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaHRtbC9GaWxlU3RyZWFtLmNwcCBiL1dlYkNvcmUvaHRtbC9GaWxlU3RyZWFt
LmNwcAppbmRleCA3MDg5ZjYxNjE1NGU0YjEwYTMyNzczZTAzMzU2YTc5MzY0NThmOTdmLi5mODU5
YjYzYTFjMWIzNGMzNmU3NGMwOTEyNGZhMDkxM2Y2YWY2NzA0IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2h0bWwvRmlsZVN0cmVhbS5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0ZpbGVTdHJlYW0uY3BwCkBA
IC03Miw0OCArNzIsNTMgQEAgdm9pZCBGaWxlU3RyZWFtOjpvcGVuRm9yUmVhZChCbG9iKiBibG9i
KQogICAgIGlmIChpc0hhbmRsZVZhbGlkKG1faGFuZGxlKSkKICAgICAgICAgcmV0dXJuOwogCisg
ICAgLy8gRklYTUU6IE5lZWQgdG8gaGFuZGxlIG11bHRpcGxlIGl0ZW1zIHRoYXQgbWF5IGluY2x1
ZGUgbm9uLWZpbGUgb25lcyB3aGVuIEJsb2JCdWlsZGVyIGlzIGludHJvZHVjZWQuCisgICAgQVNT
RVJUKGJsb2ItPml0ZW1zKCkuc2l6ZSgpID49IDEpOworICAgIGNvbnN0IEZpbGVCbG9iSXRlbSog
ZmlsZUl0ZW0gPSBibG9iLT5pdGVtcygpLmF0KDApLT50b0ZpbGVCbG9iSXRlbSgpOworICAgIGlm
ICghZmlsZUl0ZW0pIHsKKyAgICAgICAgQVNTRVJUKGZhbHNlKTsKKyAgICAgICAgbV9jbGllbnQt
PmRpZEZhaWwoTk9UX1JFQURBQkxFX0VSUik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAg
ICAvLyBDaGVjayBpZiB0aGUgZmlsZSBleGlzdHMgYnkgcXVlcnlpbmcgaXRzIG1vZGlmaWNhdGlv
biB0aW1lLiBXZSBjaG9vc2Ugbm90IHRvIGNhbGwgZmlsZUV4aXN0cygpIGluIG9yZGVyIHRvIHNh
dmUgYW4KICAgICAvLyBleHRyYSBmaWxlIHN5c3RlbSBjYWxsIHdoZW4gdGhlIG1vZGlmaWNhdGlv
biB0aW1lIGlzIG5lZWRlZCB0byBjaGVjayB0aGUgdmFsaWRpdHkgb2YgdGhlIHNsaWNlZCBmaWxl
IGJsb2IuCiAgICAgLy8gUGVyIHRoZSBzcGVjLCB3ZSBuZWVkIHRvIHJldHVybiBkaWZmZXJlbnQg
ZXJyb3IgY29kZXMgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIG5vbi1leGlzdGVudCBmaWxlIGFu
ZCBwZXJtaXNzaW9uIGVycm9yLgogICAgIC8vIG9wZW5GaWxlKCkgY291bGQgbm90IHRlbGwgdXNl
IHRoZSBmYWlsdXJlIHJlYXNvbi4KICAgICB0aW1lX3QgY3VycmVudE1vZGlmaWNhdGlvblRpbWU7
Ci0gICAgaWYgKCFnZXRGaWxlTW9kaWZpY2F0aW9uVGltZShibG9iLT5wYXRoKCksIGN1cnJlbnRN
b2RpZmljYXRpb25UaW1lKSkgeworICAgIGlmICghZ2V0RmlsZU1vZGlmaWNhdGlvblRpbWUoZmls
ZUl0ZW0tPnBhdGgoKSwgY3VycmVudE1vZGlmaWNhdGlvblRpbWUpKSB7CiAgICAgICAgIG1fY2xp
ZW50LT5kaWRGYWlsKE5PVF9GT1VORF9FUlIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAg
ICAgLy8gT3BlbiB0aGUgZmlsZSBibG9iLgotICAgIG1faGFuZGxlID0gb3BlbkZpbGUoYmxvYi0+
cGF0aCgpLCBPcGVuRm9yUmVhZCk7CisgICAgbV9oYW5kbGUgPSBvcGVuRmlsZShmaWxlSXRlbS0+
cGF0aCgpLCBPcGVuRm9yUmVhZCk7CiAgICAgaWYgKCFpc0hhbmRsZVZhbGlkKG1faGFuZGxlKSkg
ewogICAgICAgICBtX2NsaWVudC0+ZGlkRmFpbChOT1RfUkVBREFCTEVfRVJSKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAogI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgIC8vIENoZWNrIHRo
ZSBtb2RpZmljYXRpb250IHRpbWUgZm9yIHRoZSBwb3NzaWJsZSBmaWxlIGNoYW5nZS4KLSAgICBp
ZiAoYmxvYi0+bW9kaWZpY2F0aW9uVGltZSgpICE9IEJsb2I6OmRvTm90Q2hlY2tGaWxlQ2hhbmdl
ICYmIHN0YXRpY19jYXN0PHRpbWVfdD4oYmxvYi0+bW9kaWZpY2F0aW9uVGltZSgpKSAhPSBjdXJy
ZW50TW9kaWZpY2F0aW9uVGltZSkgewotICAgICAgICBtX2NsaWVudC0+ZGlkRmFpbChOT1RfUkVB
REFCTEVfRVJSKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEp1bXAgdG8gdGhl
IGJlZ2lubmluZyBwb3NpdGlvbiBpZiB0aGUgZmlsZSBoYXMgYmVlbiBzbGljZWQuCi0gICAgaWYg
KGJsb2ItPnN0YXJ0KCkgPiAwKSB7Ci0gICAgICAgIGlmICghc2Vla0ZpbGUobV9oYW5kbGUsIGJs
b2ItPnN0YXJ0KCksIFNlZWtGcm9tQmVnaW5uaW5nKSkgeworICAgIGNvbnN0IEZpbGVSYW5nZUJs
b2JJdGVtKiBmaWxlUmFuZ2VJdGVtID0gZmlsZUl0ZW0tPnRvRmlsZVJhbmdlQmxvYkl0ZW0oKTsK
KyAgICBpZiAoZmlsZVJhbmdlSXRlbSkgeworICAgICAgICAvLyBDaGVjayB0aGUgbW9kaWZpY2F0
aW9udCB0aW1lIGZvciB0aGUgcG9zc2libGUgZmlsZSBjaGFuZ2UuCisgICAgICAgIGlmIChzdGF0
aWNfY2FzdDx0aW1lX3Q+KGZpbGVSYW5nZUl0ZW0tPnNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSgp
KSAhPSBjdXJyZW50TW9kaWZpY2F0aW9uVGltZSkgewogICAgICAgICAgICAgbV9jbGllbnQtPmRp
ZEZhaWwoTk9UX1JFQURBQkxFX0VSUik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
KworICAgICAgICAvLyBKdW1wIHRvIHRoZSBiZWdpbm5pbmcgcG9zaXRpb24gaWYgdGhlIGZpbGUg
aGFzIGJlZW4gc2xpY2VkLgorICAgICAgICBpZiAoZmlsZVJhbmdlSXRlbS0+c3RhcnQoKSA+IDAp
IHsKKyAgICAgICAgICAgIGlmIChzZWVrRmlsZShtX2hhbmRsZSwgZmlsZVJhbmdlSXRlbS0+c3Rh
cnQoKSwgU2Vla0Zyb21CZWdpbm5pbmcpIDwgMCkgeworICAgICAgICAgICAgICAgIG1fY2xpZW50
LT5kaWRGYWlsKE5PVF9SRUFEQUJMRV9FUlIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KICNlbmRpZgogCiAgICAgLy8gR2V0IHRoZSBz
aXplLgotI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgIG1fdG90YWxCeXRlc1RvUmVhZCA9IGJs
b2ItPmxlbmd0aCgpOwotICAgIGlmIChtX3RvdGFsQnl0ZXNUb1JlYWQgPT0gQmxvYjo6dG9FbmRP
ZkZpbGUpCi0gICAgICAgIG1fdG90YWxCeXRlc1RvUmVhZCA9IGJsb2ItPnNpemUoKSAtIGJsb2It
PnN0YXJ0KCk7Ci0jZWxzZQotICAgIG1fdG90YWwgPSBibG9iLT5zaXplKCk7Ci0jZW5kaWYKLQor
ICAgIG1fdG90YWxCeXRlc1RvUmVhZCA9IGJsb2ItPnNpemUoKTsKICAgICBtX2NsaWVudC0+ZGlk
R2V0U2l6ZShtX3RvdGFsQnl0ZXNUb1JlYWQpOwogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0
bWwvRm9ybURhdGFMaXN0LmNwcCBiL1dlYkNvcmUvaHRtbC9Gb3JtRGF0YUxpc3QuY3BwCmluZGV4
IDI4MWM5ZmU0MThlMWM0ODMzYmI4N2Y4MmY3NGYxY2M0ZDcyMmQ1N2MuLjBmNjI1OTVlZDQxYzIz
MTliZGI3OWI1N2JiZDdjYTk0NjIyYjgyYWEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9Gb3Jt
RGF0YUxpc3QuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9Gb3JtRGF0YUxpc3QuY3BwCkBAIC0yOCw2
NCArMjgsMjIgQEAgRm9ybURhdGFMaXN0OjpGb3JtRGF0YUxpc3QoY29uc3QgVGV4dEVuY29kaW5n
JiBjKQogewogfQogCi12b2lkIEZvcm1EYXRhTGlzdDo6YXBwZW5kU3RyaW5nKGNvbnN0IENTdHJp
bmcmIHMpCit2b2lkIEZvcm1EYXRhTGlzdDo6YXBwZW5kU3RyaW5nKGNvbnN0IFN0cmluZyYgcykK
IHsKLSAgICBtX2xpc3QuYXBwZW5kKHMpOworICAgIG1faXRlbXMuYXBwZW5kKFN0cmluZ0Jsb2JJ
dGVtOjpjcmVhdGUocywgRW5kaW5nQ1JMRiwgbV9lbmNvZGluZykpOwogfQogCi0vLyBDaGFuZ2Ug
cGxhaW4gQ1IgYW5kIHBsYWluIExGIHRvIENSTEYgcGFpcnMuCi1zdGF0aWMgQ1N0cmluZyBmaXhM
aW5lQnJlYWtzKGNvbnN0IENTdHJpbmcmIHMpCit2b2lkIEZvcm1EYXRhTGlzdDo6YXBwZW5kU3Ry
aW5nKGNvbnN0IENTdHJpbmcmIHMpCiB7Ci0gICAgLy8gQ29tcHV0ZSB0aGUgbGVuZ3RoLgotICAg
IHVuc2lnbmVkIG5ld0xlbiA9IDA7Ci0gICAgY29uc3QgY2hhciogcCA9IHMuZGF0YSgpOwotICAg
IHdoaWxlIChjaGFyIGMgPSAqcCsrKSB7Ci0gICAgICAgIGlmIChjID09ICdccicpIHsKLSAgICAg
ICAgICAgIC8vIFNhZmUgdG8gbG9vayBhaGVhZCBiZWNhdXNlIG9mIHRyYWlsaW5nICdcMCcuCi0g
ICAgICAgICAgICBpZiAoKnAgIT0gJ1xuJykgewotICAgICAgICAgICAgICAgIC8vIFR1cm4gQ1Ig
aW50byBDUkxGLgotICAgICAgICAgICAgICAgIG5ld0xlbiArPSAyOwotICAgICAgICAgICAgfQot
ICAgICAgICB9IGVsc2UgaWYgKGMgPT0gJ1xuJykgewotICAgICAgICAgICAgLy8gVHVybiBMRiBp
bnRvIENSTEYuCi0gICAgICAgICAgICBuZXdMZW4gKz0gMjsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIC8vIExlYXZlIG90aGVyIGNoYXJhY3RlcnMgYWxvbmUuCi0gICAgICAgICAgICBu
ZXdMZW4gKz0gMTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAobmV3TGVuID09IHMubGVuZ3Ro
KCkpIHsKLSAgICAgICAgcmV0dXJuIHM7Ci0gICAgfQotICAgIAotICAgIC8vIE1ha2UgYSBjb3B5
IG9mIHRoZSBzdHJpbmcuCi0gICAgcCA9IHMuZGF0YSgpOwotICAgIGNoYXIqIHE7Ci0gICAgQ1N0
cmluZyByZXN1bHQgPSBDU3RyaW5nOjpuZXdVbmluaXRpYWxpemVkKG5ld0xlbiwgcSk7Ci0gICAg
d2hpbGUgKGNoYXIgYyA9ICpwKyspIHsKLSAgICAgICAgaWYgKGMgPT0gJ1xyJykgewotICAgICAg
ICAgICAgLy8gU2FmZSB0byBsb29rIGFoZWFkIGJlY2F1c2Ugb2YgdHJhaWxpbmcgJ1wwJy4KLSAg
ICAgICAgICAgIGlmICgqcCAhPSAnXG4nKSB7Ci0gICAgICAgICAgICAgICAgLy8gVHVybiBDUiBp
bnRvIENSTEYuCi0gICAgICAgICAgICAgICAgKnErKyA9ICdccic7Ci0gICAgICAgICAgICAgICAg
KnErKyA9ICdcbic7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoYyA9PSAnXG4n
KSB7Ci0gICAgICAgICAgICAvLyBUdXJuIExGIGludG8gQ1JMRi4KLSAgICAgICAgICAgICpxKysg
PSAnXHInOwotICAgICAgICAgICAgKnErKyA9ICdcbic7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAvLyBMZWF2ZSBvdGhlciBjaGFyYWN0ZXJzIGFsb25lLgotICAgICAgICAgICAgKnEr
KyA9IGM7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBtX2l0ZW1z
LmFwcGVuZChTdHJpbmdCbG9iSXRlbTo6Y3JlYXRlKHMpKTsKIH0KIAotdm9pZCBGb3JtRGF0YUxp
c3Q6OmFwcGVuZFN0cmluZyhjb25zdCBTdHJpbmcmIHMpCit2b2lkIEZvcm1EYXRhTGlzdDo6YXBw
ZW5kQmxvYihjb25zdCBTdHJpbmcmIGtleSwgUGFzc1JlZlB0cjxCbG9iPiBibG9iKQogewotICAg
IENTdHJpbmcgY3N0ciA9IGZpeExpbmVCcmVha3MobV9lbmNvZGluZy5lbmNvZGUocy5jaGFyYWN0
ZXJzKCksIHMubGVuZ3RoKCksIEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKSk7Ci0gICAgbV9saXN0
LmFwcGVuZChjc3RyKTsKKyAgICBhcHBlbmRTdHJpbmcoa2V5KTsKKyAgICBjb25zdCBCbG9iSXRl
bUxpc3QmIGl0ZW1zID0gYmxvYi0+aXRlbXMoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGl0ZW1zLnNpemUoKTsgKytpKQorICAgICAgICBtX2l0ZW1zLmFwcGVuZChpdGVtcy5hdChpKSk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvRm9ybURhdGFM
aXN0LmggYi9XZWJDb3JlL2h0bWwvRm9ybURhdGFMaXN0LmgKaW5kZXggOGVjZjY0ZWU5M2FkNTI0
ZjQ3OTIxZjFkODIyZjlhMDhiYTAxM2Q3Yy4uZjRiYjkwNTE1MGZhZDc4YjAxYWU1YTk2ODNmYWQ5
OTg0MzkwZTZiZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0Zvcm1EYXRhTGlzdC5oCisrKyBi
L1dlYkNvcmUvaHRtbC9Gb3JtRGF0YUxpc3QuaApAQCAtNDYsMjcgKzQ2LDkgQEAgcHVibGljOgog
ICAgICAgICBhcHBlbmRTdHJpbmcoa2V5KTsKICAgICAgICAgYXBwZW5kU3RyaW5nKFN0cmluZzo6
bnVtYmVyKHZhbHVlKSk7CiAgICAgfQotICAgIHZvaWQgYXBwZW5kQmxvYihjb25zdCBTdHJpbmcm
IGtleSwgUGFzc1JlZlB0cjxCbG9iPiBibG9iKQotICAgIHsKLSAgICAgICAgYXBwZW5kU3RyaW5n
KGtleSk7Ci0gICAgICAgIG1fbGlzdC5hcHBlbmQoYmxvYik7Ci0gICAgfQotCi0gICAgY2xhc3Mg
SXRlbSB7Ci0gICAgcHVibGljOgotICAgICAgICBJdGVtKCkgeyB9Ci0gICAgICAgIEl0ZW0oY29u
c3QgV1RGOjpDU3RyaW5nJiBkYXRhKSA6IG1fZGF0YShkYXRhKSB7IH0KLSAgICAgICAgSXRlbShQ
YXNzUmVmUHRyPEJsb2I+IGJsb2IpIDogbV9ibG9iKGJsb2IpIHsgfQotCi0gICAgICAgIGNvbnN0
IFdURjo6Q1N0cmluZyYgZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsgfQotICAgICAgICBC
bG9iKiBibG9iKCkgY29uc3QgeyByZXR1cm4gbV9ibG9iLmdldCgpOyB9Ci0KLSAgICBwcml2YXRl
OgotICAgICAgICBXVEY6OkNTdHJpbmcgbV9kYXRhOwotICAgICAgICBSZWZQdHI8QmxvYj4gbV9i
bG9iOwotICAgIH07CisgICAgdm9pZCBhcHBlbmRCbG9iKGNvbnN0IFN0cmluZyYga2V5LCBQYXNz
UmVmUHRyPEJsb2I+KTsKIAotICAgIGNvbnN0IFZlY3RvcjxJdGVtPiYgbGlzdCgpIGNvbnN0IHsg
cmV0dXJuIG1fbGlzdDsgfQorICAgIGNvbnN0IEJsb2JJdGVtTGlzdCYgaXRlbXMoKSBjb25zdCB7
IHJldHVybiBtX2l0ZW1zOyB9CiAgICAgY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZygpIGNv
bnN0IHsgcmV0dXJuIG1fZW5jb2Rpbmc7IH0KIAogcHJpdmF0ZToKQEAgLTc0LDcgKzU2LDcgQEAg
cHJpdmF0ZToKICAgICB2b2lkIGFwcGVuZFN0cmluZyhjb25zdCBTdHJpbmcmKTsKIAogICAgIFRl
eHRFbmNvZGluZyBtX2VuY29kaW5nOwotICAgIFZlY3RvcjxJdGVtPiBtX2xpc3Q7CisgICAgQmxv
Ykl0ZW1MaXN0IG1faXRlbXM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1M
Rm9ybUVsZW1lbnQuY3BwCmluZGV4IGM4NDQ1NGQxNTlkYmVjYTVhNGUzNWI5NTJhYmVhYTM0OTli
YTUxZjMuLjczODVjZTM3ODUyYzM3ZTVlYzE1YjUxZDE0ODliZmMzOTE5ZjJlYTMgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9I
VE1MRm9ybUVsZW1lbnQuY3BwCkBAIC0yMTAsNyArMjEwLDcgQEAgUGFzc1JlZlB0cjxGb3JtRGF0
YT4gSFRNTEZvcm1FbGVtZW50OjpjcmVhdGVGb3JtRGF0YSgpCiAgICAgICAgICAgICBjb250cm9s
LT5hcHBlbmRGb3JtRGF0YSgqZG9tRm9ybURhdGEsIG1fZm9ybURhdGFCdWlsZGVyLmlzTXVsdGlQ
YXJ0Rm9ybSgpKTsKICAgICB9CiAKLSAgICBSZWZQdHI8Rm9ybURhdGE+IHJlc3VsdCA9IChtX2Zv
cm1EYXRhQnVpbGRlci5pc011bHRpUGFydEZvcm0oKSkgPyBGb3JtRGF0YTo6Y3JlYXRlTXVsdGlQ
YXJ0KCpkb21Gb3JtRGF0YSwgZG9jdW1lbnQoKSkgOiBGb3JtRGF0YTo6Y3JlYXRlKCpkb21Gb3Jt
RGF0YSk7CisgICAgUmVmUHRyPEZvcm1EYXRhPiByZXN1bHQgPSAobV9mb3JtRGF0YUJ1aWxkZXIu
aXNNdWx0aVBhcnRGb3JtKCkpID8gRm9ybURhdGE6OmNyZWF0ZU11bHRpUGFydChkb21Gb3JtRGF0
YS0+aXRlbXMoKSwgZG9tRm9ybURhdGEtPmVuY29kaW5nKCksIGRvY3VtZW50KCkpIDogRm9ybURh
dGE6OmNyZWF0ZShkb21Gb3JtRGF0YS0+aXRlbXMoKSwgZG9tRm9ybURhdGEtPmVuY29kaW5nKCkp
OwogCiAgICAgcmVzdWx0LT5zZXRJZGVudGlmaWVyKGdlbmVyYXRlRm9ybURhdGFJZGVudGlmaWVy
KCkpOwogICAgIHJldHVybiByZXN1bHQ7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTE1l
dGVyRWxlbWVudC5jcHAgYi9XZWJDb3JlL2h0bWwvSFRNTE1ldGVyRWxlbWVudC5jcHAKaW5kZXgg
YTFiNzRiMmQwYWIwYzc1Y2VkYTNkNjMyODk4MTE1NGM0OGM3MjQxOC4uMDMxNjI2NzBjNjNiNzc5
ZGY2MDczYjk1NjA1NGU2YmFlYWQzNTIzOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxN
ZXRlckVsZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MTWV0ZXJFbGVtZW50LmNwcApA
QCAtMjQsNiArMjQsNyBAQAogCiAjaW5jbHVkZSAiQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiRXZl
bnROYW1lcy5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJGb3JtRGF0
YUxpc3QuaCIKICNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFt
ZXMuaCIKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MUHJvZ3Jlc3NFbGVtZW50LmNwcCBi
L1dlYkNvcmUvaHRtbC9IVE1MUHJvZ3Jlc3NFbGVtZW50LmNwcAppbmRleCBkMjc1ZWJmY2ZmOGQ5
N2I5MTZkNTlkMjRmMjQxOWRhOGM1MzRhZjI5Li5mN2U4NmYzYTlhZmZlY2VkZWJiOTNiOTM1MzUw
ZGFiODUyYWVhNmM1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTFByb2dyZXNzRWxlbWVu
dC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxQcm9ncmVzc0VsZW1lbnQuY3BwCkBAIC0yNCw2
ICsyNCw3IEBACiAKICNpbmNsdWRlICJBdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJFdmVudE5hbWVz
LmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkZvcm1EYXRhTGlzdC5o
IgogI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9CbG9iSXRlbS5jcHAgYi9XZWJDb3JlL3BsYXRm
b3JtL0Jsb2JJdGVtLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45OTAzOTg0NjA2ZWQzMTg0NWRjNmRhYmJmMWMx
MDQzMWI3YTRjOTI2Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9CbG9iSXRl
bS5jcHAKQEAgLTAsMCArMSwzMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJC
bG9iSXRlbS5oIgorCisjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgorI2luY2x1ZGUgIlVVSUQuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCitzdGF0aWMg
Y29uc3QgZG91YmxlIGludmFsaWRNb2RpZmljYXRpb25UaW1lID0gMDsKKworZG91YmxlIGdldEZp
bGVTbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIC8v
IEZJWE1FOiBzeW5jaHJvbml6ZWQgZmlsZSBjYWxsCisgICAgdGltZV90IG1vZGlmaWNhdGlvblRp
bWU7CisgICAgaWYgKGdldEZpbGVNb2RpZmljYXRpb25UaW1lKHBhdGgsIG1vZGlmaWNhdGlvblRp
bWUpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPihtb2RpZmljYXRpb25UaW1l
KTsKKyAgICByZXR1cm4gaW52YWxpZE1vZGlmaWNhdGlvblRpbWU7Cit9CisKK1Bhc3NSZWZQdHI8
QmxvYkl0ZW0+IEJsb2JJdGVtOjpzbGljZShsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5n
dGgpCit7CisgICAgQVNTRVJUKHN0YXJ0ID49IDAgJiYgbGVuZ3RoID49IDApOworICAgIEFTU0VS
VChzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KHN0YXJ0KSA8IHNpemUoKSk7CisgICAg
aWYgKCFzdGFydCAmJiBzaXplKCkgPD0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihs
ZW5ndGgpKQorICAgICAgICByZXR1cm4gdGhpczsKKyAgICBjb25zdCBGaWxlQmxvYkl0ZW0qIGZp
bGVJdGVtID0gdG9GaWxlQmxvYkl0ZW0oKTsKKyAgICBpZiAoZmlsZUl0ZW0pIHsKKyAgICAgICAg
Y29uc3QgRmlsZVJhbmdlQmxvYkl0ZW0qIGZpbGVSYW5nZUl0ZW0gPSB0b0ZpbGVSYW5nZUJsb2JJ
dGVtKCk7CisgICAgICAgIGRvdWJsZSBtb2RpZmljYXRpb25UaW1lID0gZmlsZVJhbmdlSXRlbSA/
IGZpbGVSYW5nZUl0ZW0tPnNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSgpIDogZ2V0RmlsZVNuYXBz
aG90TW9kaWZpY2F0aW9uVGltZShmaWxlSXRlbS0+cGF0aCgpKTsKKyAgICAgICAgcmV0dXJuIEZp
bGVSYW5nZUJsb2JJdGVtOjpjcmVhdGUoZmlsZUl0ZW0tPnBhdGgoKSwgc3RhcnQsIGxlbmd0aCwg
bW9kaWZpY2F0aW9uVGltZSk7CisgICAgfQorICAgIEFTU0VSVCh0b0RhdGFCbG9iSXRlbSgpKTsK
KyAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihzdGFydCArIGxlbmd0aCkg
PiBzaXplKCkpCisgICAgICAgIGxlbmd0aCA9IHNpemUoKSAtIHN0YXJ0OworICAgIHJldHVybiBE
YXRhUmFuZ2VCbG9iSXRlbTo6Y3JlYXRlKHN0YXRpY19jYXN0PERhdGFSYW5nZUJsb2JJdGVtKj4o
dGhpcyksIHN0YXJ0LCBsZW5ndGgpOworfQorCisjZW5kaWYgLy8gRU5BQkxFKEJMT0JfU0xJQ0Up
CisKKy8vIERhdGFCbG9iSXRlbSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NoYXIqIERhdGFCbG9iSXRlbTo6Y29weUJ1
ZmZlcigpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IFJlY29uc2lkZXIgaWYgd2Ugc3RpbGwgbmVl
ZCBpdCBvbmNlIHdlIGNsZWFuIHVwIHRoZSB0cmFuc2llbnQgd3JhcHBlciBjbGFzcyBGb3JtRGF0
YUVsZW1lbnQ6OkJsb2JJdGVtV3JhcHBlciBhbmQgaXRzIHJlbGVhc2VCdWZmZXIoKSBtZXRob2Qu
ICBJdCB1c2VkIHRvIGJlIGEgbWVyZSBWZWN0b3IgYW5kIFZlY3Rvcjo6cmVsZWFzZUJ1ZmZlciwg
YnV0IG5vdyB3ZSBrZWVwIHRoZSBkYXRhIHJlZi1jb3VudGVkIGFuZCBuZWVkIHRvIG1ha2UgYSBj
b3B5IHRvIHJldHVybiB0aGUgZGF0YSB3aXRoIG93bmVyc2hpcC4KKyAgICBWZWN0b3I8Y2hhcj4g
djsKKyAgICB2LmFwcGVuZChkYXRhKCksIHN0YXRpY19jYXN0PHNpemVfdD4oc2l6ZSgpKSk7Cisg
ICAgcmV0dXJuIHYucmVsZWFzZUJ1ZmZlcigpOworfQorCitib29sIERhdGFCbG9iSXRlbTo6ZXF1
YWxzKGNvbnN0IEJsb2JJdGVtKiBpdGVtKSBjb25zdAoreworICAgIGNvbnN0IERhdGFCbG9iSXRl
bSogZGF0YUl0ZW0gPSBpdGVtLT50b0RhdGFCbG9iSXRlbSgpOworICAgIHJldHVybiBkYXRhSXRl
bSAmJiBkYXRhKCkgPT0gZGF0YUl0ZW0tPmRhdGEoKSAmJiBzaXplKCkgPT0gZGF0YUl0ZW0tPnNp
emUoKTsKK30KKworCisvLyBGaWxlQmxvYkl0ZW0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitQYXNzUmVmUHRyPEJsb2JJ
dGVtPiBGaWxlQmxvYkl0ZW06OmNyZWF0ZShjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgcmV0
dXJuIGFkb3B0UmVmKHN0YXRpY19jYXN0PEJsb2JJdGVtKj4obmV3IEZpbGVCbG9iSXRlbShwYXRo
KSkpOworfQorCitGaWxlQmxvYkl0ZW06OkZpbGVCbG9iSXRlbShjb25zdCBTdHJpbmcmIHBhdGgp
CisgICAgOiBtX3BhdGgocGF0aCkKKyAgICAsIG1fZmlsZU5hbWUocGF0aEdldEZpbGVOYW1lKG1f
cGF0aCkpCit7Cit9CisKK3Vuc2lnbmVkIGxvbmcgbG9uZyBGaWxlQmxvYkl0ZW06OnNpemUoKSBj
b25zdAoreworICAgIC8vIEZJWE1FOiBzeW5jaHJvbml6ZWQgZmlsZSBjYWxsCisgICAgbG9uZyBs
b25nIHNpemU7CisgICAgaWYgKCFnZXRGaWxlU2l6ZShtX3BhdGgsIHNpemUpKQorICAgICAgICBy
ZXR1cm4gMDsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihzaXpl
KTsKK30KKworUGFzc1JlZlB0cjxCbG9iSXRlbT4gRmlsZUJsb2JJdGVtOjpkZWVwQ29weSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIEZpbGVCbG9iSXRlbTo6Y3JlYXRlKG1fcGF0aCk7Cit9CisKK2Jv
b2wgRmlsZUJsb2JJdGVtOjplcXVhbHMoY29uc3QgQmxvYkl0ZW0qIGl0ZW0pIGNvbnN0Cit7Cisg
ICAgY29uc3QgRmlsZUJsb2JJdGVtKiBmaWxlSXRlbSA9IGl0ZW0tPnRvRmlsZUJsb2JJdGVtKCk7
CisgICAgcmV0dXJuIGZpbGVJdGVtICYmIG1fcGF0aCA9PSBmaWxlSXRlbS0+bV9wYXRoOworfQor
CisvLyBTdHJpbmdCbG9iSXRlbSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitQYXNzUmVmUHRyPEJsb2JJdGVtPiBTdHJpbmdC
bG9iSXRlbTo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgdGV4dCwgRW5kaW5nVHlwZSBlbmRpbmcsIFRl
eHRFbmNvZGluZyBlbmNvZGluZykKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoc3RhdGljX2Nhc3Q8
QmxvYkl0ZW0qPihuZXcgU3RyaW5nQmxvYkl0ZW0odGV4dCwgZW5kaW5nLCBlbmNvZGluZykpKTsK
K30KKworUGFzc1JlZlB0cjxCbG9iSXRlbT4gU3RyaW5nQmxvYkl0ZW06OmNyZWF0ZShjb25zdCBD
U3RyaW5nJiB0ZXh0KQoreworICAgIHJldHVybiBhZG9wdFJlZihzdGF0aWNfY2FzdDxCbG9iSXRl
bSo+KG5ldyBTdHJpbmdCbG9iSXRlbSh0ZXh0KSkpOworfQorCitTdHJpbmdCbG9iSXRlbTo6U3Ry
aW5nQmxvYkl0ZW0oY29uc3QgU3RyaW5nJiB0ZXh0LCBFbmRpbmdUeXBlIGVuZGluZywgVGV4dEVu
Y29kaW5nIGVuY29kaW5nKQorICAgIDogbV9kYXRhKFN0cmluZ0Jsb2JJdGVtOjpjb252ZXJ0VG9D
U3RyaW5nKHRleHQsIGVuZGluZywgZW5jb2RpbmcpKQoreworfQorCitTdHJpbmdCbG9iSXRlbTo6
U3RyaW5nQmxvYkl0ZW0oY29uc3QgQ1N0cmluZyYgdGV4dCkKKyAgICA6IG1fZGF0YSh0ZXh0KQor
eworfQorCitQYXNzUmVmUHRyPEJsb2JJdGVtPiBTdHJpbmdCbG9iSXRlbTo6ZGVlcENvcHkoKSBj
b25zdAoreworICAgIHJldHVybiBTdHJpbmdCbG9iSXRlbTo6Y3JlYXRlKENTdHJpbmcobV9kYXRh
LmRhdGEoKSwgbV9kYXRhLmxlbmd0aCgpKSk7Cit9CisKK2Jvb2wgU3RyaW5nQmxvYkl0ZW06OmVx
dWFscyhjb25zdCBCbG9iSXRlbSogaXRlbSkgY29uc3QKK3sKKyAgICBpZiAoIURhdGFCbG9iSXRl
bTo6ZXF1YWxzKGl0ZW0pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY29uc3QgU3RyaW5n
QmxvYkl0ZW0qIHN0cmluZ0l0ZW0gPSBpdGVtLT50b1N0cmluZ0Jsb2JJdGVtKCk7CisgICAgcmV0
dXJuIHN0cmluZ0l0ZW0gJiYgZGF0YSgpID09IHN0cmluZ0l0ZW0tPmRhdGEoKSAmJiBzaXplKCkg
PT0gc3RyaW5nSXRlbS0+c2l6ZSgpOworfQorCitDU3RyaW5nIFN0cmluZ0Jsb2JJdGVtOjpjb252
ZXJ0VG9DU3RyaW5nKGNvbnN0IFN0cmluZyYgdGV4dCwgRW5kaW5nVHlwZSBlbmRpbmcsIFRleHRF
bmNvZGluZyBlbmNvZGluZykKK3sKKyAgICBDU3RyaW5nIGZyb20gPSBlbmNvZGluZy5lbmNvZGUo
dGV4dC5jaGFyYWN0ZXJzKCksIHRleHQubGVuZ3RoKCksIEVudGl0aWVzRm9yVW5lbmNvZGFibGVz
KTsKKyAgICBDU3RyaW5nIHJlc3VsdCA9IGZyb207CisKKyAgICBpZiAoZW5kaW5nID09IEVuZGlu
Z1RyYW5zcGFyZW50KQorICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgY29uc3QgY2hhciog
ZW5kaW5nQ2hhcnMgPSAoZW5kaW5nID09IEVuZGluZ0NSTEYpID8gIlxyXG4iIDogKChlbmRpbmcg
PT0gRW5kaW5nQ1IpID8gIlxyIiA6ICJcbiIpOworCisgICAgaW50IGVuZGluZ0xlbmd0aCA9IChl
bmRpbmcgPT0gRW5kaW5nQ1JMRikgPyAyIDogMTsKKyAgICBpbnQgbmVlZEZpeCA9IDA7CisKKyAg
ICAvLyBDYWxjdWxhdGUgdGhlIGZpbmFsIGxlbmd0aC4KKyAgICBpbnQgY2FsY3VsYXRlZExlbmd0
aCA9IGZyb20ubGVuZ3RoKCk7CisgICAgY29uc3QgY2hhciogcCA9IGZyb20uZGF0YSgpOworICAg
IHdoaWxlIChjaGFyIGMgPSAqcCsrKSB7CisgICAgICAgIGlmIChjID09ICdccicpIHsKKyAgICAg
ICAgICAgIC8vIFNhZmUgdG8gbG9vayBhaGVhZCBiZWNhdXNlIG9mIHRyYWlsaW5nICdcMCcuCisg
ICAgICAgICAgICBpZiAoKnAgPT0gJ1xuJyAmJiBlbmRpbmcgIT0gRW5kaW5nQ1JMRikgeworICAg
ICAgICAgICAgICAgIGNhbGN1bGF0ZWRMZW5ndGggKz0gKGVuZGluZ0xlbmd0aCAtIDIpOworICAg
ICAgICAgICAgICAgICsrbmVlZEZpeDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoZW5kaW5nICE9
IEVuZGluZ0NSKSB7CisgICAgICAgICAgICAgICAgY2FsY3VsYXRlZExlbmd0aCArPSAoZW5kaW5n
TGVuZ3RoIC0gMSk7CisgICAgICAgICAgICAgICAgKytuZWVkRml4OworICAgICAgICAgICAgfQor
ICAgICAgICB9IGVsc2UgaWYgKGMgPT0gJ1xuJyAmJiBlbmRpbmcgIT0gRW5kaW5nTEYpIHsKKyAg
ICAgICAgICAgIGNhbGN1bGF0ZWRMZW5ndGggKz0gKGVuZGluZ0xlbmd0aCAtIDEpOworICAgICAg
ICAgICAgKytuZWVkRml4OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFuZWVkRml4KQor
ICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgLy8gQ29udmVydCB0aGUgZW5kaW5ncyBhbmQg
Y3JlYXRlIGEgZGF0YSBidWZmZXIuCisgICAgcCA9IGZyb20uZGF0YSgpOworICAgIGNoYXIqIHE7
CisgICAgcmVzdWx0ID0gQ1N0cmluZzo6bmV3VW5pbml0aWFsaXplZChjYWxjdWxhdGVkTGVuZ3Ro
LCBxKTsKKyAgICB3aGlsZSAoY2hhciBjID0gKnArKykgeworICAgICAgICBpZiAoYyA9PSAnXHIn
KSB7CisgICAgICAgICAgICBpZiAoKnAgPT0gJ1xuJyAmJiBlbmRpbmcgIT0gRW5kaW5nQ1JMRikg
eworICAgICAgICAgICAgICAgIG1lbWNweShxLCBlbmRpbmdDaGFycywgZW5kaW5nTGVuZ3RoKTsK
KyAgICAgICAgICAgICAgICBxICs9IGVuZGluZ0xlbmd0aDsKKyAgICAgICAgICAgIH0gZWxzZSBp
ZiAoKnAgIT0gJ1xuJyAmJiBlbmRpbmcgIT0gRW5kaW5nQ1IpIHsKKyAgICAgICAgICAgICAgICBt
ZW1jcHkocSwgZW5kaW5nQ2hhcnMsIGVuZGluZ0xlbmd0aCk7CisgICAgICAgICAgICAgICAgcSAr
PSBlbmRpbmdMZW5ndGg7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoYyA9PSAn
XG4nICYmIGVuZGluZyAhPSBFbmRpbmdMRikgeworICAgICAgICAgICAgbWVtY3B5KHEsIGVuZGlu
Z0NoYXJzLCBlbmRpbmdMZW5ndGgpOworICAgICAgICAgICAgcSArPSBlbmRpbmdMZW5ndGg7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBMZWF2ZSBvdGhlciBjaGFyYWN0ZXJzIGFs
b25lLgorICAgICAgICAgICAgKnErKyA9IGM7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworLy8gQnl0ZXNBcnJheUJsb2JJdGVtIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUGFzc1JlZlB0cjxCbG9i
SXRlbT4gQnl0ZXNBcnJheUJsb2JJdGVtOjpjcmVhdGUoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90
IHNpemUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKHN0YXRpY19jYXN0PEJsb2JJdGVtKj4obmV3
IEJ5dGVzQXJyYXlCbG9iSXRlbShkYXRhLCBzaXplKSkpOworfQorCitCeXRlc0FycmF5QmxvYkl0
ZW06OkJ5dGVzQXJyYXlCbG9iSXRlbShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3Qgc2l6ZSkKK3sK
KyAgICBtX2J5dGVzQXJyYXkuYXBwZW5kKGRhdGEsIHNpemUpOworfQorCitQYXNzUmVmUHRyPEJs
b2JJdGVtPiBCeXRlc0FycmF5QmxvYkl0ZW06OmRlZXBDb3B5KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gQnl0ZXNBcnJheUJsb2JJdGVtOjpjcmVhdGUobV9ieXRlc0FycmF5LmRhdGEoKSwgbV9ieXRl
c0FycmF5LnNpemUoKSk7Cit9CisKKyNpZiBFTkFCTEUoQkxPQl9TTElDRSkKKworLy8gRGF0YVJh
bmdlQmxvYkl0ZW0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKworUGFzc1JlZlB0cjxCbG9iSXRlbT4gRGF0YVJhbmdlQmxvYkl0ZW06
OmNyZWF0ZShQYXNzUmVmUHRyPERhdGFCbG9iSXRlbT4gaXRlbSwgbG9uZyBsb25nIHN0YXJ0LCBs
b25nIGxvbmcgbGVuZ3RoKQoreworICAgIHJldHVybiBhZG9wdFJlZihzdGF0aWNfY2FzdDxCbG9i
SXRlbSo+KG5ldyBEYXRhUmFuZ2VCbG9iSXRlbShpdGVtLCBzdGFydCwgbGVuZ3RoKSkpOworfQor
CitEYXRhUmFuZ2VCbG9iSXRlbTo6RGF0YVJhbmdlQmxvYkl0ZW0oUGFzc1JlZlB0cjxEYXRhQmxv
Ykl0ZW0+IGl0ZW0sIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCkKKyAgICA6IG1f
bGVuZ3RoKGxlbmd0aCkKK3sKKyAgICBjb25zdCBEYXRhUmFuZ2VCbG9iSXRlbSogcmFuZ2VJdGVt
ID0gbV9pdGVtLT50b0RhdGFSYW5nZUJsb2JJdGVtKCk7CisgICAgaWYgKHJhbmdlSXRlbSkgewor
ICAgICAgICBtX2l0ZW0gPSByYW5nZUl0ZW0tPm1faXRlbTsKKyAgICAgICAgbV9zdGFydCA9IHN0
YXJ0ICsgcmFuZ2VJdGVtLT5tX3N0YXJ0OworICAgICAgICBBU1NFUlQoIW1faXRlbS0+dG9EYXRh
UmFuZ2VCbG9iSXRlbSgpKTsKKyAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHVuc2lnbmVkIGxv
bmcgbG9uZz4obV9zdGFydCArIG1fbGVuZ3RoKSA8PSBtX2l0ZW0tPnNpemUoKSk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgbV9pdGVtID0gaXRlbTsKKyAgICAgICAgbV9zdGFydCA9IHN0YXJ0Owor
ICAgIH0KK30KKworY29uc3QgY2hhciogRGF0YVJhbmdlQmxvYkl0ZW06OmRhdGEoKSBjb25zdAor
eworICAgIHJldHVybiBtX2l0ZW0tPmRhdGEoKSArIG1fc3RhcnQ7Cit9CisKK1Bhc3NSZWZQdHI8
QmxvYkl0ZW0+IERhdGFSYW5nZUJsb2JJdGVtOjpkZWVwQ29weSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIERhdGFSYW5nZUJsb2JJdGVtOjpjcmVhdGUoc3RhdGljX3BvaW50ZXJfY2FzdDxEYXRhQmxv
Ykl0ZW0+KG1faXRlbS0+ZGVlcENvcHkoKSksIG1fc3RhcnQsIG1fbGVuZ3RoKTsKK30KKworYm9v
bCBEYXRhUmFuZ2VCbG9iSXRlbTo6ZXF1YWxzKGNvbnN0IEJsb2JJdGVtKiBpdGVtKSBjb25zdAor
eworICAgIGNvbnN0IERhdGFSYW5nZUJsb2JJdGVtKiByYW5nZUl0ZW0gPSBpdGVtLT50b0RhdGFS
YW5nZUJsb2JJdGVtKCk7CisgICAgcmV0dXJuIHJhbmdlSXRlbSAmJiBtX3N0YXJ0ID09IHJhbmdl
SXRlbS0+bV9zdGFydCAmJiBtX2xlbmd0aCA9PSByYW5nZUl0ZW0tPm1fbGVuZ3RoICYmIG1faXRl
bS0+ZXF1YWxzKHJhbmdlSXRlbS0+bV9pdGVtLmdldCgpKTsKK30KKworLy8gRmlsZVJhbmdlQmxv
Ykl0ZW0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKworUGFzc1JlZlB0cjxCbG9iSXRlbT4gRmlsZVJhbmdlQmxvYkl0ZW06OmNyZWF0
ZShjb25zdCBTdHJpbmcmIHBhdGgsIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCwg
ZG91YmxlIHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYo
c3RhdGljX2Nhc3Q8QmxvYkl0ZW0qPihuZXcgRmlsZVJhbmdlQmxvYkl0ZW0ocGF0aCwgc3RhcnQs
IGxlbmd0aCwgc25hcHNob3RNb2RpZmljYXRpb25UaW1lKSkpOworfQorCitGaWxlUmFuZ2VCbG9i
SXRlbTo6RmlsZVJhbmdlQmxvYkl0ZW0oY29uc3QgU3RyaW5nJiBwYXRoLCBsb25nIGxvbmcgc3Rh
cnQsIGxvbmcgbG9uZyBsZW5ndGgsIGRvdWJsZSBtb2RpZmljYXRpb25UaW1lKQorICAgIDogRmls
ZUJsb2JJdGVtKHBhdGgpCisgICAgLCBtX3N0YXJ0KHN0YXJ0KQorICAgICwgbV9sZW5ndGgobGVu
Z3RoKQorICAgICwgbV9zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUobW9kaWZpY2F0aW9uVGltZSkK
K3sKKyAgICBtX3VuaXF1ZU5hbWUgPSAiQmxvYiIgKyBjcmVhdGVDYW5vbmljYWxVVUlEU3RyaW5n
KCk7CisgICAgbV91bmlxdWVOYW1lLnJlcGxhY2UoIi0iLCAiIik7IC8vIEZvciBzYWZ0eSwgcmVt
b3ZlICctJyBmcm9tIHRoZSBmaWxlbmFtZSBzbmNlIHNvbWUgc2VydmVycyBtYXkgbm90IGxpa2Ug
aXQuCit9CisKK1Bhc3NSZWZQdHI8QmxvYkl0ZW0+IEZpbGVSYW5nZUJsb2JJdGVtOjpkZWVwQ29w
eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEZpbGVSYW5nZUJsb2JJdGVtOjpjcmVhdGUocGF0aCgp
LCBtX3N0YXJ0LCBtX2xlbmd0aCwgbV9zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUpOworfQorCiti
b29sIEZpbGVSYW5nZUJsb2JJdGVtOjplcXVhbHMoY29uc3QgQmxvYkl0ZW0qIGl0ZW0pIGNvbnN0
Cit7CisgICAgaWYgKCFGaWxlQmxvYkl0ZW06OmVxdWFscyhpdGVtKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGNvbnN0IEZpbGVSYW5nZUJsb2JJdGVtKiByYW5nZUl0ZW0gPSBpdGVtLT50
b0ZpbGVSYW5nZUJsb2JJdGVtKCk7CisgICAgcmV0dXJuIHJhbmdlSXRlbSAmJiBtX3N0YXJ0ID09
IHJhbmdlSXRlbS0+bV9zdGFydCAmJiBtX3VuaXF1ZU5hbWUgPT0gcmFuZ2VJdGVtLT5tX3VuaXF1
ZU5hbWUgJiYgbV9zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUgPT0gcmFuZ2VJdGVtLT5tX3NuYXBz
aG90TW9kaWZpY2F0aW9uVGltZTsKK30KKworYm9vbCBGaWxlUmFuZ2VCbG9iSXRlbTo6aXNWYWxp
ZCgpIGNvbnN0Cit7CisgICAgaWYgKG1fc25hcHNob3RNb2RpZmljYXRpb25UaW1lID09IGludmFs
aWRNb2RpZmljYXRpb25UaW1lKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG1f
c25hcHNob3RNb2RpZmljYXRpb25UaW1lID09IGdldEZpbGVTbmFwc2hvdE1vZGlmaWNhdGlvblRp
bWUocGF0aCgpKTsKK30KKworI2VuZGlmIC8vIEVOQUJMRShCTE9CX1NMSUNFKQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL0Jsb2JJdGVtLmgg
Yi9XZWJDb3JlL3BsYXRmb3JtL0Jsb2JJdGVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGQxMGEwZmE4NmVmMjgw
YjllZWQxZTYzZjIxNDhhMjBiMzdlMDdmYwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxh
dGZvcm0vQmxvYkl0ZW0uaApAQCAtMCwwICsxLDIyMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEJsb2JJdGVtX2gKKyNk
ZWZpbmUgQmxvYkl0ZW1faAorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRl
ICJUZXh0RW5jb2RpbmcuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworLy8gU3RyaW5nIGVuZGluZyB0eXBlcy4KK2VudW0gRW5kaW5nVHlwZSB7Cisg
ICAgRW5kaW5nVHJhbnNwYXJlbnQgPSAwLAorICAgIEVuZGluZ0xGLAorICAgIEVuZGluZ0NSLAor
ICAgIEVuZGluZ0NSTEYsCit9OworCitjbGFzcyBCeXRlc0FycmF5QmxvYkl0ZW07CitjbGFzcyBE
YXRhQmxvYkl0ZW07CitjbGFzcyBEYXRhUmFuZ2VCbG9iSXRlbTsKK2NsYXNzIEZpbGVCbG9iSXRl
bTsKK2NsYXNzIEZpbGVSYW5nZUJsb2JJdGVtOworY2xhc3MgU3RyaW5nQmxvYkl0ZW07CisKKy8v
IEEgYmFzZSBpbnRlcmZhY2UgZm9yIGFsbCBhcmJpdHJhcnktZGF0YS1vYmplY3QgY29tcG9uZW50
IGl0ZW1zLgorLy8gVGhlIEJsb2JJdGVtIGFuZCBpdHMgc3ViY2xhc3NlcyBhcmUgc3RydWN0dXJl
ZCBsaWtlIHRoZSBmb2xsb3dpbmc6CisvLyAgICBCbG9iSXRlbQorLy8gICAgICAgfAorLy8gICAg
ICAgKy0tLS0tLS0+IERhdGFCbG9iSXRlbQorLy8gICAgICAgfCAgICAgICAgICAgICAgfAorLy8g
ICAgICAgfCAgICAgICAgICAgICAgKy0tLS0tLS0tLT4gU3RyaW5nQmxvYkl0ZW0KKy8vICAgICAg
IHwgICAgICAgICAgICAgICstLS0tLS0tLS0+IEJ5dGVBcnJheUJsb2JJdGVtCisvLyAgICAgICB8
ICAgICAgICAgICAgICArLS0tLS0tLS0tPiBEYXRhUmFuZ2VCbG9iSXRlbQorLy8gICAgICAgfAor
Ly8gICAgICAgKy0tLS0tLS0+IEZpbGVCbG9iSXRlbQorLy8gICAgICAgICAgICAgICAgICAgICAg
fAorLy8gICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLT4gRmlsZVJhbmdlQmxvYkl0ZW0K
Ky8vCitjbGFzcyBCbG9iSXRlbSA6IHB1YmxpYyBSZWZDb3VudGVkPEJsb2JJdGVtPiB7CitwdWJs
aWM6CisgICAgdmlydHVhbCB+QmxvYkl0ZW0oKSB7IH0KKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGxv
bmcgbG9uZyBzaXplKCkgY29uc3QgPSAwOworCisgICAgLy8gUmV0dXJucyBmYWxzZSBpZiB0aGUg
ZGF0YSBoYXMgYmVjb21lIHN0YWxlIG9yIGludmFsaWQuCisgICAgdmlydHVhbCBib29sIGlzVmFs
aWQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2aXJ0dWFsIGNvbnN0IERhdGFCbG9i
SXRlbSogdG9EYXRhQmxvYkl0ZW0oKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBj
b25zdCBTdHJpbmdCbG9iSXRlbSogdG9TdHJpbmdCbG9iSXRlbSgpIGNvbnN0IHsgcmV0dXJuIDA7
IH0KKyAgICB2aXJ0dWFsIGNvbnN0IEJ5dGVzQXJyYXlCbG9iSXRlbSogdG9CeXRlc0FycmF5Qmxv
Ykl0ZW0oKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBjb25zdCBGaWxlQmxvYkl0
ZW0qIHRvRmlsZUJsb2JJdGVtKCkgY29uc3QgeyByZXR1cm4gMDsgfQorI2lmIEVOQUJMRShCTE9C
X1NMSUNFKQorICAgIHZpcnR1YWwgY29uc3QgRGF0YVJhbmdlQmxvYkl0ZW0qIHRvRGF0YVJhbmdl
QmxvYkl0ZW0oKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBjb25zdCBGaWxlUmFu
Z2VCbG9iSXRlbSogdG9GaWxlUmFuZ2VCbG9iSXRlbSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKwor
ICAgIC8vIE5vIGV4dGVybmFsIG1ldGhvZHMgZXhjZXB0IGZvciBCbG9iOjpzbGljZSBzaG91bGQg
Y2FsbCB0aGlzLgorICAgIFBhc3NSZWZQdHI8QmxvYkl0ZW0+IHNsaWNlKGxvbmcgbG9uZyBzdGFy
dCwgbG9uZyBsb25nIGxlbmd0aCk7CisjZW5kaWYgLy8gRU5BQkxFKEJMT0JfU0xJQ0UpCisKKyAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8QmxvYkl0ZW0+IGRlZXBDb3B5KCkgY29uc3QgPSAwOworICAg
IHZpcnR1YWwgYm9vbCBlcXVhbHMoY29uc3QgQmxvYkl0ZW0qKSBjb25zdCA9IDA7CisKK3Byb3Rl
Y3RlZDoKKyAgICBCbG9iSXRlbSgpIHsgfQorfTsKKwordHlwZWRlZiBWZWN0b3I8UmVmUHRyPEJs
b2JJdGVtPiA+IEJsb2JJdGVtTGlzdDsKKworY2xhc3MgRGF0YUJsb2JJdGVtIDogcHVibGljIEJs
b2JJdGVtIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGRhdGEoKSBjb25zdCA9
IDA7CisgICAgY2hhciogY29weUJ1ZmZlcigpIGNvbnN0OworCisgICAgLy8gQmxvYkl0ZW0gbWV0
aG9kcy4KKyAgICB2aXJ0dWFsIGNvbnN0IERhdGFCbG9iSXRlbSogdG9EYXRhQmxvYkl0ZW0oKSBj
b25zdCB7IHJldHVybiB0aGlzOyB9CisgICAgdmlydHVhbCBib29sIGVxdWFscyhjb25zdCBCbG9i
SXRlbSopIGNvbnN0OworfTsKKworY2xhc3MgRmlsZUJsb2JJdGVtIDogcHVibGljIEJsb2JJdGVt
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCbG9iSXRlbT4gY3JlYXRlKGNvbnN0
IFN0cmluZyYgcGF0aCk7CisgICAgdmlydHVhbCBjb25zdCBTdHJpbmcmIG5hbWUoKSBjb25zdCB7
IHJldHVybiBtX2ZpbGVOYW1lOyB9CisgICAgdmlydHVhbCBjb25zdCBTdHJpbmcmIHBhdGgoKSBj
b25zdCB7IHJldHVybiBtX3BhdGg7IH0KKworICAgIC8vIEJsb2JJdGVtIG1ldGhvZHMuCisgICAg
dmlydHVhbCB1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgY29u
c3QgRmlsZUJsb2JJdGVtKiB0b0ZpbGVCbG9iSXRlbSgpIGNvbnN0IHsgcmV0dXJuIHRoaXM7IH0K
KyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8QmxvYkl0ZW0+IGRlZXBDb3B5KCkgY29uc3Q7CisgICAg
dmlydHVhbCBib29sIGVxdWFscyhjb25zdCBCbG9iSXRlbSopIGNvbnN0OworCitwcm90ZWN0ZWQ6
CisgICAgRmlsZUJsb2JJdGVtKGNvbnN0IFN0cmluZyYgcGF0aCk7CisgICAgU3RyaW5nIG1fcGF0
aDsKKyAgICBTdHJpbmcgbV9maWxlTmFtZTsKK307CisKK2NsYXNzIFN0cmluZ0Jsb2JJdGVtIDog
cHVibGljIERhdGFCbG9iSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Qmxv
Ykl0ZW0+IGNyZWF0ZShjb25zdCBTdHJpbmcmLCBFbmRpbmdUeXBlLCBUZXh0RW5jb2RpbmcpOwor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJsb2JJdGVtPiBjcmVhdGUoY29uc3QgQ1N0cmluZyYpOwor
ICAgIGNvbnN0IENTdHJpbmcmIGNzdHIoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0KKworICAg
IC8vIEJsb2JJdGVtIG1ldGhvZHMuCisgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxvbmcgc2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5sZW5ndGgoKTsgfQorICAgIHZpcnR1YWwgY29uc3Qg
U3RyaW5nQmxvYkl0ZW0qIHRvU3RyaW5nQmxvYkl0ZW0oKSBjb25zdCB7IHJldHVybiB0aGlzOyB9
CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEJsb2JJdGVtPiBkZWVwQ29weSgpIGNvbnN0OworICAg
IHZpcnR1YWwgYm9vbCBlcXVhbHMoY29uc3QgQmxvYkl0ZW0qKSBjb25zdDsKKworICAgIC8vIERh
dGFCbG9iSXRlbSBtZXRob2RzLgorICAgIHZpcnR1YWwgY29uc3QgY2hhciogZGF0YSgpIGNvbnN0
IHsgcmV0dXJuIG1fZGF0YS5kYXRhKCk7IH0KKworcHJpdmF0ZToKKyAgICBTdHJpbmdCbG9iSXRl
bShjb25zdCBTdHJpbmcmLCBFbmRpbmdUeXBlLCBUZXh0RW5jb2RpbmcpOworICAgIFN0cmluZ0Js
b2JJdGVtKGNvbnN0IENTdHJpbmcmKTsKKyAgICBzdGF0aWMgQ1N0cmluZyBjb252ZXJ0VG9DU3Ry
aW5nKGNvbnN0IFN0cmluZyYsIEVuZGluZ1R5cGUsIFRleHRFbmNvZGluZyk7CisgICAgQ1N0cmlu
ZyBtX2RhdGE7Cit9OworCitjbGFzcyBCeXRlc0FycmF5QmxvYkl0ZW0gOiBwdWJsaWMgRGF0YUJs
b2JJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCbG9iSXRlbT4gY3JlYXRl
KGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBzaXplKTsKKworICAgIC8vIEJsb2JJdGVtIG1ldGhv
ZHMuCisgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fYnl0ZXNBcnJheS5zaXplKCk7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IEJ5dGVzQXJyYXlCbG9i
SXRlbSogdG9CeXRlc0FycmF5QmxvYkl0ZW0oKSBjb25zdCB7IHJldHVybiB0aGlzOyB9CisgICAg
dmlydHVhbCBQYXNzUmVmUHRyPEJsb2JJdGVtPiBkZWVwQ29weSgpIGNvbnN0OworCisgICAgLy8g
RGF0YUJsb2JJdGVtIG1ldGhvZHMuCisgICAgdmlydHVhbCBjb25zdCBjaGFyKiBkYXRhKCkgY29u
c3QgeyByZXR1cm4gbV9ieXRlc0FycmF5LmRhdGEoKTsgfQorCitwcml2YXRlOgorICAgIEJ5dGVz
QXJyYXlCbG9iSXRlbShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3Qgc2l6ZSk7CisgICAgVmVjdG9y
PGNoYXI+IG1fYnl0ZXNBcnJheTsKK307CisKKyNpZiBFTkFCTEUoQkxPQl9TTElDRSkKKworLy8g
QmxvYkl0ZW0gY2xhc3MgZm9yIHNsaWNlZCBkYXRhIChzdHJpbmcgb3IgYnl0ZXMtYXJyYXkpLgor
Y2xhc3MgRGF0YVJhbmdlQmxvYkl0ZW0gOiBwdWJsaWMgRGF0YUJsb2JJdGVtIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCbG9iSXRlbT4gY3JlYXRlKFBhc3NSZWZQdHI8RGF0YUJs
b2JJdGVtPiwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoKTsKKworICAgIC8vIEJs
b2JJdGVtIG1ldGhvZHMuCisgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9CisgICAgdmlydHVhbCBjb25zdCBEYXRhUmFuZ2VCbG9i
SXRlbSogdG9EYXRhUmFuZ2VCbG9iSXRlbSgpIGNvbnN0IHsgcmV0dXJuIHRoaXM7IH0KKyAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8QmxvYkl0ZW0+IGRlZXBDb3B5KCkgY29uc3Q7CisgICAgdmlydHVh
bCBib29sIGVxdWFscyhjb25zdCBCbG9iSXRlbSopIGNvbnN0OworCisgICAgLy8gRGF0YUJsb2JJ
dGVtIG1ldGhvZHMuCisgICAgdmlydHVhbCBjb25zdCBjaGFyKiBkYXRhKCkgY29uc3Q7CisKK3By
aXZhdGU6CisgICAgRGF0YVJhbmdlQmxvYkl0ZW0oUGFzc1JlZlB0cjxEYXRhQmxvYkl0ZW0+IGl0
ZW0sIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCk7CisgICAgUmVmUHRyPERhdGFC
bG9iSXRlbT4gbV9pdGVtOworICAgIGxvbmcgbG9uZyBtX3N0YXJ0OworICAgIGxvbmcgbG9uZyBt
X2xlbmd0aDsKK307CisKK2NsYXNzIEZpbGVSYW5nZUJsb2JJdGVtIDogcHVibGljIEZpbGVCbG9i
SXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QmxvYkl0ZW0+IGNyZWF0ZShj
b25zdCBTdHJpbmcmIHBhdGgsIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCwgZG91
YmxlIHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSk7CisgICAgbG9uZyBsb25nIHN0YXJ0KCkgY29u
c3QgeyByZXR1cm4gbV9zdGFydDsgfQorICAgIGRvdWJsZSBzbmFwc2hvdE1vZGlmaWNhdGlvblRp
bWUoKSBjb25zdCB7IHJldHVybiBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZTsgfQorCisgICAg
Ly8gQmxvYkl0ZW0gbWV0aG9kcy4KKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IEZpbGVSYW5n
ZUJsb2JJdGVtKiB0b0ZpbGVSYW5nZUJsb2JJdGVtKCkgY29uc3QgeyByZXR1cm4gdGhpczsgfQor
ICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3Q7CisgICAgdmlydHVhbCBQYXNzUmVmUHRy
PEJsb2JJdGVtPiBkZWVwQ29weSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBlcXVhbHMoY29u
c3QgQmxvYkl0ZW0qKSBjb25zdDsKKworICAgIC8vIEZpbGVCbG9iSXRlbSBtZXRob2RzLgorICAg
IHZpcnR1YWwgY29uc3QgU3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV91bmlxdWVOYW1l
OyB9CisKK3ByaXZhdGU6CisgICAgRmlsZVJhbmdlQmxvYkl0ZW0oY29uc3QgU3RyaW5nJiBwYXRo
LCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgsIGRvdWJsZSBzbmFwc2hvdE1vZGlm
aWNhdGlvblRpbWUpOworICAgIGxvbmcgbG9uZyBtX3N0YXJ0OworICAgIGxvbmcgbG9uZyBtX2xl
bmd0aDsKKyAgICBTdHJpbmcgbV91bmlxdWVOYW1lOworCisgICAgZG91YmxlIG1fc25hcHNob3RN
b2RpZmljYXRpb25UaW1lOworfTsKKworI2VuZGlmIC8vIEVOQUJMRShCTE9CX1NMSUNFKQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBCbG9iSXRlbV9oCmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwIGIvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL0Zvcm1EYXRhLmNwcAppbmRleCA5MTgwMDJhZWZkODFhNjg5MWY5ZjE5YmFmNDRk
NzU1OTFmZGZhNDg0Li5kYTM5OWI5MDNiMGJmMWRhYjllNDIxYjE1N2M0ZmUzZTVhYWMxMmIxIDEw
MDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwCisrKyBiL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAKQEAgLTE5LDIzICsxOSw0NiBAQAog
ICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKwogI2luY2x1ZGUgIkZvcm1EYXRhLmgiCiAKLSNp
bmNsdWRlICJCbG9iLmgiCisjaW5jbHVkZSAiQmxvYkl0ZW0uaCIKICNpbmNsdWRlICJDaHJvbWUu
aCIKICNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKLSNpbmNsdWRlICJET01Gb3JtRGF0YS5oIgog
I2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRmlsZS5oIgogI2luY2x1ZGUgIkZpbGVT
eXN0ZW0uaCIKICNpbmNsdWRlICJGb3JtRGF0YUJ1aWxkZXIuaCIKICNpbmNsdWRlICJNSU1FVHlw
ZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlRleHRFbmNvZGluZy5o
IgotI2luY2x1ZGUgIlVVSUQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisjaWYgRU5BQkxF
KEJMT0JfU0xJQ0UpCitjb25zdCBsb25nIGxvbmcgRm9ybURhdGFFbGVtZW50Ojp0b0VuZE9mRmls
ZSA9IC0xOworI2VuZGlmCisKK0Zvcm1EYXRhRWxlbWVudDo6Rm9ybURhdGFFbGVtZW50KFBhc3NS
ZWZQdHI8QmxvYkl0ZW0+IGJsb2JJdGVtLCBib29sIHNob3VsZEdlbmVyYXRlRmlsZSkKKyAgICA6
IG1faXRlbShibG9iSXRlbSkKKyAgICAsIG1fdHlwZShtX2l0ZW0tPnRvRmlsZUJsb2JJdGVtKCkg
PyBlbmNvZGVkRmlsZSA6IGRhdGEpCisgICAgLCBtX2RhdGEobV9pdGVtLT50b0RhdGFCbG9iSXRl
bSgpKQorICAgICwgbV9maWxlbmFtZShtX2l0ZW0tPnRvRmlsZUJsb2JJdGVtKCkgPyBtX2l0ZW0t
PnRvRmlsZUJsb2JJdGVtKCktPnBhdGgoKSA6IFN0cmluZygpKQorICAgICwgbV9zaG91bGRHZW5l
cmF0ZUZpbGUoc2hvdWxkR2VuZXJhdGVGaWxlKQoreworI2lmIEVOQUJMRShCTE9CX1NMSUNFKQor
ICAgIGNvbnN0IEZpbGVSYW5nZUJsb2JJdGVtKiBmaWxlUmFuZ2VJdGVtID0gbV9pdGVtLT50b0Zp
bGVSYW5nZUJsb2JJdGVtKCk7CisgICAgaWYgKGZpbGVSYW5nZUl0ZW0pIHsKKyAgICAgICAgbV9m
aWxlU3RhcnQgPSBmaWxlUmFuZ2VJdGVtLT5zdGFydCgpOworICAgICAgICBtX2ZpbGVMZW5ndGgg
PSBmaWxlUmFuZ2VJdGVtLT5zaXplKCk7CisgICAgICAgIG1fZXhwZWN0ZWRGaWxlTW9kaWZpY2F0
aW9uVGltZSA9IGZpbGVSYW5nZUl0ZW0tPnNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSgpOworICAg
IH0gZWxzZSB7CisgICAgICAgIG1fZmlsZVN0YXJ0ID0gMDsKKyAgICAgICAgbV9maWxlTGVuZ3Ro
ID0gdG9FbmRPZkZpbGU7CisgICAgICAgIG1fZXhwZWN0ZWRGaWxlTW9kaWZpY2F0aW9uVGltZSA9
IDA7CisgICAgfQorI2VuZGlmCit9CisKIGlubGluZSBGb3JtRGF0YTo6Rm9ybURhdGEoKQogICAg
IDogbV9pZGVudGlmaWVyKDApCiAgICAgLCBtX2hhc0dlbmVyYXRlZEZpbGVzKGZhbHNlKQpAQCAt
ODUsNyArMTA4LDcgQEAgUGFzc1JlZlB0cjxGb3JtRGF0YT4gRm9ybURhdGE6OmNyZWF0ZShjb25z
dCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSkKIFBhc3NSZWZQdHI8Rm9ybURhdGE+IEZvcm1EYXRh
OjpjcmVhdGUoY29uc3QgQ1N0cmluZyYgc3RyaW5nKQogewogICAgIFJlZlB0cjxGb3JtRGF0YT4g
cmVzdWx0ID0gY3JlYXRlKCk7Ci0gICAgcmVzdWx0LT5hcHBlbmREYXRhKHN0cmluZy5kYXRhKCks
IHN0cmluZy5sZW5ndGgoKSk7CisgICAgcmVzdWx0LT5hcHBlbmRTdHJpbmcoc3RyaW5nKTsKICAg
ICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0KIApAQCAtOTYsMTcgKzExOSwxNyBAQCBQYXNz
UmVmUHRyPEZvcm1EYXRhPiBGb3JtRGF0YTo6Y3JlYXRlKGNvbnN0IFZlY3RvcjxjaGFyPiYgdmVj
dG9yKQogICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPEZvcm1E
YXRhPiBGb3JtRGF0YTo6Y3JlYXRlKGNvbnN0IERPTUZvcm1EYXRhJiBkb21Gb3JtRGF0YSkKK1Bh
c3NSZWZQdHI8Rm9ybURhdGE+IEZvcm1EYXRhOjpjcmVhdGUoY29uc3QgQmxvYkl0ZW1MaXN0JiBp
dGVtcywgY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZykKIHsKICAgICBSZWZQdHI8Rm9ybURh
dGE+IHJlc3VsdCA9IGNyZWF0ZSgpOwotICAgIHJlc3VsdC0+YXBwZW5kRE9NRm9ybURhdGEoZG9t
Rm9ybURhdGEsIGZhbHNlLCAwKTsKKyAgICByZXN1bHQtPmFwcGVuZEtleVZhbHVlUGFpckl0ZW1z
KGl0ZW1zLCBlbmNvZGluZywgZmFsc2UsIDApOwogICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgp
OwogfQogCi1QYXNzUmVmUHRyPEZvcm1EYXRhPiBGb3JtRGF0YTo6Y3JlYXRlTXVsdGlQYXJ0KGNv
bnN0IERPTUZvcm1EYXRhJiBkb21Gb3JtRGF0YSwgRG9jdW1lbnQqIGRvY3VtZW50KQorUGFzc1Jl
ZlB0cjxGb3JtRGF0YT4gRm9ybURhdGE6OmNyZWF0ZU11bHRpUGFydChjb25zdCBCbG9iSXRlbUxp
c3QmIGl0ZW1zLCBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nLCBEb2N1bWVudCogZG9jdW1l
bnQpCiB7CiAgICAgUmVmUHRyPEZvcm1EYXRhPiByZXN1bHQgPSBjcmVhdGUoKTsKLSAgICByZXN1
bHQtPmFwcGVuZERPTUZvcm1EYXRhKGRvbUZvcm1EYXRhLCB0cnVlLCBkb2N1bWVudCk7CisgICAg
cmVzdWx0LT5hcHBlbmRLZXlWYWx1ZVBhaXJJdGVtcyhpdGVtcywgZW5jb2RpbmcsIHRydWUsIGRv
Y3VtZW50KTsKICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0KIApAQCAtMTI1LDg0ICsx
NDgsNjkgQEAgUGFzc1JlZlB0cjxGb3JtRGF0YT4gRm9ybURhdGE6OmRlZXBDb3B5KCkgY29uc3QK
ICAgICBmb3JtRGF0YS0+bV9lbGVtZW50cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG4pOwogICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbjsgKytpKSB7CiAgICAgICAgIGNvbnN0IEZvcm1EYXRh
RWxlbWVudCYgZSA9IG1fZWxlbWVudHNbaV07Ci0gICAgICAgIHN3aXRjaCAoZS5tX3R5cGUpIHsK
LSAgICAgICAgY2FzZSBGb3JtRGF0YUVsZW1lbnQ6OmRhdGE6Ci0gICAgICAgICAgICBmb3JtRGF0
YS0+bV9lbGVtZW50cy5hcHBlbmQoRm9ybURhdGFFbGVtZW50KGUubV9kYXRhKSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBGb3JtRGF0YUVsZW1lbnQ6OmVuY29kZWRGaWxlOgot
I2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgICAgICAgICAgZm9ybURhdGEtPm1fZWxlbWVudHMu
YXBwZW5kKEZvcm1EYXRhRWxlbWVudChlLm1fZmlsZW5hbWUsIGUubV9maWxlU3RhcnQsIGUubV9m
aWxlTGVuZ3RoLCBlLm1fZXhwZWN0ZWRGaWxlTW9kaWZpY2F0aW9uVGltZSwgZS5tX3Nob3VsZEdl
bmVyYXRlRmlsZSkpOwotI2Vsc2UKLSAgICAgICAgICAgIGZvcm1EYXRhLT5tX2VsZW1lbnRzLmFw
cGVuZChGb3JtRGF0YUVsZW1lbnQoZS5tX2ZpbGVuYW1lLCBlLm1fc2hvdWxkR2VuZXJhdGVGaWxl
KSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisgICAgICAgIGZvcm1E
YXRhLT5tX2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVsZW1lbnQoZS5pdGVtKCktPmRlZXBDb3B5
KCksIGUubV9zaG91bGRHZW5lcmF0ZUZpbGUpKTsKICAgICB9CiAgICAgcmV0dXJuIGZvcm1EYXRh
LnJlbGVhc2UoKTsKIH0KIAogdm9pZCBGb3JtRGF0YTo6YXBwZW5kRGF0YShjb25zdCB2b2lkKiBk
YXRhLCBzaXplX3Qgc2l6ZSkKIHsKLSAgICBpZiAobV9lbGVtZW50cy5pc0VtcHR5KCkgfHwgbV9l
bGVtZW50cy5sYXN0KCkubV90eXBlICE9IEZvcm1EYXRhRWxlbWVudDo6ZGF0YSkKLSAgICAgICAg
bV9lbGVtZW50cy5hcHBlbmQoRm9ybURhdGFFbGVtZW50KCkpOwotICAgIEZvcm1EYXRhRWxlbWVu
dCYgZSA9IG1fZWxlbWVudHMubGFzdCgpOwotICAgIHNpemVfdCBvbGRTaXplID0gZS5tX2RhdGEu
c2l6ZSgpOwotICAgIGUubV9kYXRhLmdyb3cob2xkU2l6ZSArIHNpemUpOwotICAgIG1lbWNweShl
Lm1fZGF0YS5kYXRhKCkgKyBvbGRTaXplLCBkYXRhLCBzaXplKTsKKyAgICBtX2VsZW1lbnRzLmFw
cGVuZChGb3JtRGF0YUVsZW1lbnQoQnl0ZXNBcnJheUJsb2JJdGVtOjpjcmVhdGUoc3RhdGljX2Nh
c3Q8Y29uc3QgY2hhcio+KGRhdGEpLCBzaXplKSkpOworfQorCit2b2lkIEZvcm1EYXRhOjphcHBl
bmRTdHJpbmcoY29uc3QgQ1N0cmluZyYgc3RyaW5nKQoreworICAgIG1fZWxlbWVudHMuYXBwZW5k
KEZvcm1EYXRhRWxlbWVudChTdHJpbmdCbG9iSXRlbTo6Y3JlYXRlKHN0cmluZykpKTsKIH0KIAog
dm9pZCBGb3JtRGF0YTo6YXBwZW5kRmlsZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBib29sIHNo
b3VsZEdlbmVyYXRlRmlsZSkKIHsKLSNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAgICBtX2VsZW1l
bnRzLmFwcGVuZChGb3JtRGF0YUVsZW1lbnQoZmlsZW5hbWUsIDAsIEJsb2I6OnRvRW5kT2ZGaWxl
LCBCbG9iOjpkb05vdENoZWNrRmlsZUNoYW5nZSwgc2hvdWxkR2VuZXJhdGVGaWxlKSk7Ci0jZWxz
ZQotICAgIG1fZWxlbWVudHMuYXBwZW5kKEZvcm1EYXRhRWxlbWVudChmaWxlbmFtZSwgc2hvdWxk
R2VuZXJhdGVGaWxlKSk7Ci0jZW5kaWYKKyAgICBtX2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVs
ZW1lbnQoRmlsZUJsb2JJdGVtOjpjcmVhdGUoZmlsZW5hbWUpLCBzaG91bGRHZW5lcmF0ZUZpbGUp
KTsKK30KKwordm9pZCBGb3JtRGF0YTo6YXBwZW5kSXRlbXMoY29uc3QgQmxvYkl0ZW1MaXN0JiBp
dGVtcykKK3sKKyAgICBmb3IgKEJsb2JJdGVtTGlzdDo6Y29uc3RfaXRlcmF0b3IgaXRlcihpdGVt
cy5iZWdpbigpKTsgaXRlciAhPSBpdGVtcy5lbmQoKTsgKytpdGVyKQorICAgICAgICBtX2VsZW1l
bnRzLmFwcGVuZCgqaXRlcik7CiB9CiAKICNpZiBFTkFCTEUoQkxPQl9TTElDRSkKIHZvaWQgRm9y
bURhdGE6OmFwcGVuZEZpbGVSYW5nZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBsb25nIGxvbmcg
c3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgsIGRvdWJsZSBleHBlY3RlZE1vZGlmaWNhdGlvblRpbWUs
IGJvb2wgc2hvdWxkR2VuZXJhdGVGaWxlKQogewotICAgIG1fZWxlbWVudHMuYXBwZW5kKEZvcm1E
YXRhRWxlbWVudChmaWxlbmFtZSwgc3RhcnQsIGxlbmd0aCwgZXhwZWN0ZWRNb2RpZmljYXRpb25U
aW1lLCBzaG91bGRHZW5lcmF0ZUZpbGUpKTsKKyAgICBpZiAobGVuZ3RoID09IEZvcm1EYXRhRWxl
bWVudDo6dG9FbmRPZkZpbGUpIHsKKyAgICAgICAgQVNTRVJUKCFzdGFydCk7CisgICAgICAgIEFT
U0VSVCghZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lKTsKKyAgICAgICAgbV9lbGVtZW50cy5hcHBl
bmQoRm9ybURhdGFFbGVtZW50KEZpbGVCbG9iSXRlbTo6Y3JlYXRlKGZpbGVuYW1lKSwgc2hvdWxk
R2VuZXJhdGVGaWxlKSk7CisgICAgfSBlbHNlCisgICAgICAgIG1fZWxlbWVudHMuYXBwZW5kKEZv
cm1EYXRhRWxlbWVudChGaWxlUmFuZ2VCbG9iSXRlbTo6Y3JlYXRlKGZpbGVuYW1lLCBzdGFydCwg
bGVuZ3RoLCBleHBlY3RlZE1vZGlmaWNhdGlvblRpbWUpLCBzaG91bGRHZW5lcmF0ZUZpbGUpKTsK
IH0KICNlbmRpZgogCi12b2lkIEZvcm1EYXRhOjphcHBlbmRET01Gb3JtRGF0YShjb25zdCBET01G
b3JtRGF0YSYgZG9tRm9ybURhdGEsIGJvb2wgaXNNdWx0aVBhcnRGb3JtLCBEb2N1bWVudCogZG9j
dW1lbnQpCit2b2lkIEZvcm1EYXRhOjphcHBlbmRLZXlWYWx1ZVBhaXJJdGVtcyhjb25zdCBCbG9i
SXRlbUxpc3QmIGl0ZW1zLCBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nLCBib29sIGlzTXVs
dGlQYXJ0Rm9ybSwgRG9jdW1lbnQqIGRvY3VtZW50KQogewogICAgIEZvcm1EYXRhQnVpbGRlciBm
b3JtRGF0YUJ1aWxkZXI7CiAgICAgaWYgKGlzTXVsdGlQYXJ0Rm9ybSkKICAgICAgICAgbV9ib3Vu
ZGFyeSA9IGZvcm1EYXRhQnVpbGRlci5nZW5lcmF0ZVVuaXF1ZUJvdW5kYXJ5U3RyaW5nKCk7CiAK
ICAgICBWZWN0b3I8Y2hhcj4gZW5jb2RlZERhdGE7Ci0gICAgVGV4dEVuY29kaW5nIGVuY29kaW5n
ID0gZG9tRm9ybURhdGEuZW5jb2RpbmcoKTsKIAotICAgIGNvbnN0IFZlY3RvcjxGb3JtRGF0YUxp
c3Q6Okl0ZW0+JiBsaXN0ID0gZG9tRm9ybURhdGEubGlzdCgpOwotICAgIHNpemVfdCBmb3JtRGF0
YUxpc3RTaXplID0gbGlzdC5zaXplKCk7CisgICAgc2l6ZV90IGZvcm1EYXRhTGlzdFNpemUgPSBp
dGVtcy5zaXplKCk7CiAgICAgQVNTRVJUKCEoZm9ybURhdGFMaXN0U2l6ZSAlIDIpKTsKICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGZvcm1EYXRhTGlzdFNpemU7IGkgKz0gMikgewotICAgICAg
ICBjb25zdCBGb3JtRGF0YUxpc3Q6Okl0ZW0mIGtleSA9IGxpc3RbaV07Ci0gICAgICAgIGNvbnN0
IEZvcm1EYXRhTGlzdDo6SXRlbSYgdmFsdWUgPSBsaXN0W2kgKyAxXTsKKyAgICAgICAgY29uc3Qg
U3RyaW5nQmxvYkl0ZW0qIGtleSA9IGl0ZW1zW2ldLT50b1N0cmluZ0Jsb2JJdGVtKCk7CisgICAg
ICAgIGNvbnN0IFJlZlB0cjxCbG9iSXRlbT4gdmFsdWUgPSBpdGVtc1tpICsgMV07CisgICAgICAg
IEFTU0VSVChrZXkpOworICAgICAgICBib29sIGFwcGVuZFZhbHVlID0gdHJ1ZTsKICAgICAgICAg
aWYgKGlzTXVsdGlQYXJ0Rm9ybSkgewogICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGhlYWRlcjsK
LSAgICAgICAgICAgIGZvcm1EYXRhQnVpbGRlci5iZWdpbk11bHRpUGFydEhlYWRlcihoZWFkZXIs
IG1fYm91bmRhcnkuZGF0YSgpLCBrZXkuZGF0YSgpKTsKKyAgICAgICAgICAgIGZvcm1EYXRhQnVp
bGRlci5iZWdpbk11bHRpUGFydEhlYWRlcihoZWFkZXIsIG1fYm91bmRhcnkuZGF0YSgpLCBrZXkt
PmNzdHIoKSk7CiAKICAgICAgICAgICAgIGJvb2wgc2hvdWxkR2VuZXJhdGVGaWxlID0gZmFsc2U7
CiAgICAgICAgICAgICAvLyBJZiB0aGUgY3VycmVudCB0eXBlIGlzIEZJTEUsIHRoZW4gd2UgYWxz
byBuZWVkIHRvIGluY2x1ZGUgdGhlIGZpbGVuYW1lCi0gICAgICAgICAgICBpZiAodmFsdWUuYmxv
YigpKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBwYXRoID0gdmFsdWUuYmxvYigp
LT5wYXRoKCk7Ci0jaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgICAgICAgICAgICAgU3RyaW5n
IGZpbGVOYW1lOwotICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5ibG9iKCktPmlzRmlsZSgpKQot
ICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZSA9IHN0YXRpY19jYXN0PEZpbGUqPih2YWx1ZS5i
bG9iKCkpLT5maWxlTmFtZSgpOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICAvLyBJZiBhIGJsb2IgaXMgc2xpY2VkIGZyb20gYSBmaWxlLCBpdCBkb2VzIG5vdCBo
YXZlIHRoZSBmaWxlbmFtZS4gSW4gdGhpcyBjYXNlLCBsZXQncyBwcm9kdWNlIGEgdW5pcXVlIGZp
bGVuYW1lLgotICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZSA9ICJCbG9iIiArIGNyZWF0ZUNh
bm9uaWNhbFVVSURTdHJpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWUucmVwbGFj
ZSgiLSIsICIiKTsgLy8gRm9yIHNhZnR5LCByZW1vdmUgJy0nIGZyb20gdGhlIGZpbGVuYW1lIHNu
Y2Ugc29tZSBzZXJ2ZXJzIG1heSBub3QgbGlrZSBpdC4KLSAgICAgICAgICAgICAgICB9Ci0jZWxz
ZQotICAgICAgICAgICAgICAgIEFTU0VSVCh2YWx1ZS5ibG9iKCktPmlzRmlsZSgpKTsKLSAgICAg
ICAgICAgICAgICBTdHJpbmcgZmlsZU5hbWUgPSBzdGF0aWNfY2FzdDxGaWxlKj4odmFsdWUuYmxv
YigpKS0+ZmlsZU5hbWUoKTsKLSNlbmRpZgorICAgICAgICAgICAgY29uc3QgRmlsZUJsb2JJdGVt
KiBmaWxlSXRlbSA9IHZhbHVlLT50b0ZpbGVCbG9iSXRlbSgpOworICAgICAgICAgICAgaWYgKGZp
bGVJdGVtKSB7CisgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBwYXRoID0gZmlsZUl0ZW0t
PnBhdGgoKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgZmlsZU5hbWUgPSBmaWxlSXRlbS0+bmFt
ZSgpOwogCiAgICAgICAgICAgICAgICAgLy8gTGV0IHRoZSBhcHBsaWNhdGlvbiBzcGVjaWZ5IGEg
ZmlsZW5hbWUgaWYgaXQncyBnb2luZyB0byBnZW5lcmF0ZSBhIHJlcGxhY2VtZW50IGZpbGUgZm9y
IHRoZSB1cGxvYWQuCiAgICAgICAgICAgICAgICAgaWYgKCFwYXRoLmlzRW1wdHkoKSkgewpAQCAt
MjEyLDE0ICsyMjAsMTcgQEAgdm9pZCBGb3JtRGF0YTo6YXBwZW5kRE9NRm9ybURhdGEoY29uc3Qg
RE9NRm9ybURhdGEmIGRvbUZvcm1EYXRhLCBib29sIGlzTXVsdGlQYXIKICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChzaG91bGRHZW5lcmF0ZUZpbGUpCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZmlsZU5hbWUgPSBnZW5lcmF0ZWRGaWxlTmFtZTsKICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIElmIHRo
ZSBwYXRoIGlzIGVtcHR5IGRvIG5vdCBhZGQgdGhlIGZpbGUgdG8gdGhlIGVsZW1lbnQgbGlzdC4K
KyAgICAgICAgICAgICAgICAgICAgYXBwZW5kVmFsdWUgPSBmYWxzZTsKICAgICAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIGluY2x1ZGUgdGhlIGZpbGVuYW1l
PSIuLiIgcGFydCBpbiB0aGUgaGVhZGVyLCBldmVuIGlmIHRoZSBmaWxlbmFtZSBpcyBlbXB0eQog
ICAgICAgICAgICAgICAgIGZvcm1EYXRhQnVpbGRlci5hZGRGaWxlbmFtZVRvTXVsdGlQYXJ0SGVh
ZGVyKGhlYWRlciwgZW5jb2RpbmcsIGZpbGVOYW1lKTsKIAotICAgICAgICAgICAgICAgIC8vIElm
IGEgYmxvYiBpcyBzbGljZWQgZnJvbSBhIGZpbGUsIGRvIG5vdCBhZGQgdGhlIGNvbnRlbnQgdHlw
ZS4gCisgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGl0ZW0gaXMgc2xpY2VkIGZyb20gYSBmaWxl
LCBkbyBub3QgYWRkIHRoZSBjb250ZW50IHR5cGUuCiAjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0g
ICAgICAgICAgICAgICAgaWYgKCFmaWxlTmFtZS5pc0VtcHR5KCkgJiYgdmFsdWUuYmxvYigpLT5p
c0ZpbGUoKSkgeworICAgICAgICAgICAgICAgIGlmICghZmlsZU5hbWUuaXNFbXB0eSgpICYmICF2
YWx1ZS0+dG9GaWxlUmFuZ2VCbG9iSXRlbSgpKSB7CiAjZWxzZQogICAgICAgICAgICAgICAgIGlm
ICghZmlsZU5hbWUuaXNFbXB0eSgpKSB7CiAjZW5kaWYKQEAgLTIzNywyNSArMjQ4LDIxIEBAIHZv
aWQgRm9ybURhdGE6OmFwcGVuZERPTUZvcm1EYXRhKGNvbnN0IERPTUZvcm1EYXRhJiBkb21Gb3Jt
RGF0YSwgYm9vbCBpc011bHRpUGFyCiAKICAgICAgICAgICAgIC8vIEFwcGVuZCBib2R5CiAgICAg
ICAgICAgICBhcHBlbmREYXRhKGhlYWRlci5kYXRhKCksIGhlYWRlci5zaXplKCkpOwotICAgICAg
ICAgICAgaWYgKHNpemVfdCBkYXRhU2l6ZSA9IHZhbHVlLmRhdGEoKS5sZW5ndGgoKSkKLSAgICAg
ICAgICAgICAgICBhcHBlbmREYXRhKHZhbHVlLmRhdGEoKS5kYXRhKCksIGRhdGFTaXplKTsKLSAg
ICAgICAgICAgIGVsc2UgaWYgKHZhbHVlLmJsb2IoKSAmJiAhdmFsdWUuYmxvYigpLT5wYXRoKCku
aXNFbXB0eSgpKQotI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgICAgICAgICAgICAgIGFwcGVu
ZEZpbGVSYW5nZSh2YWx1ZS5ibG9iKCktPnBhdGgoKSwgdmFsdWUuYmxvYigpLT5zdGFydCgpLCB2
YWx1ZS5ibG9iKCktPmxlbmd0aCgpLCB2YWx1ZS5ibG9iKCktPm1vZGlmaWNhdGlvblRpbWUoKSwg
c2hvdWxkR2VuZXJhdGVGaWxlKTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgYXBwZW5kRmlsZSh2
YWx1ZS5ibG9iKCktPnBhdGgoKSwgc2hvdWxkR2VuZXJhdGVGaWxlKTsKLSNlbmRpZgotCisgICAg
ICAgICAgICBpZiAoYXBwZW5kVmFsdWUpCisgICAgICAgICAgICAgICAgbV9lbGVtZW50cy5hcHBl
bmQoRm9ybURhdGFFbGVtZW50KHZhbHVlLCBzaG91bGRHZW5lcmF0ZUZpbGUpKTsKICAgICAgICAg
ICAgIGFwcGVuZERhdGEoIlxyXG4iLCAyKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
IC8vIE9taXQgdGhlIG5hbWUgImlzaW5kZXgiIGlmIGl0J3MgdGhlIGZpcnN0IGZvcm0gZGF0YSBl
bGVtZW50LgogICAgICAgICAgICAgLy8gRklYTUU6IFdoeSBpcyB0aGlzIGEgZ29vZCBydWxlPyBJ
cyB0aGlzIG9ic29sZXRlIG5vdz8KLSAgICAgICAgICAgIGlmIChlbmNvZGVkRGF0YS5pc0VtcHR5
KCkgJiYga2V5LmRhdGEoKSA9PSAiaXNpbmRleCIpCi0gICAgICAgICAgICAgICAgRm9ybURhdGFC
dWlsZGVyOjplbmNvZGVTdHJpbmdBc0Zvcm1EYXRhKGVuY29kZWREYXRhLCB2YWx1ZS5kYXRhKCkp
OworICAgICAgICAgICAgY29uc3QgU3RyaW5nQmxvYkl0ZW0qIHN0cmluZ1ZhbHVlID0gdmFsdWUt
PnRvU3RyaW5nQmxvYkl0ZW0oKTsKKyAgICAgICAgICAgIGlmICghc3RyaW5nVmFsdWUpCisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAoZW5jb2RlZERhdGEuaXNFbXB0
eSgpICYmIGtleS0+Y3N0cigpID09ICJpc2luZGV4IikKKyAgICAgICAgICAgICAgICBGb3JtRGF0
YUJ1aWxkZXI6OmVuY29kZVN0cmluZ0FzRm9ybURhdGEoZW5jb2RlZERhdGEsIHN0cmluZ1ZhbHVl
LT5jc3RyKCkpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGZvcm1EYXRhQnVp
bGRlci5hZGRLZXlWYWx1ZVBhaXJBc0Zvcm1EYXRhKGVuY29kZWREYXRhLCBrZXkuZGF0YSgpLCB2
YWx1ZS5kYXRhKCkpOworICAgICAgICAgICAgICAgIGZvcm1EYXRhQnVpbGRlci5hZGRLZXlWYWx1
ZVBhaXJBc0Zvcm1EYXRhKGVuY29kZWREYXRhLCBrZXktPmNzdHIoKSwgc3RyaW5nVmFsdWUtPmNz
dHIoKSk7CiAgICAgICAgIH0KLSAgICB9IAorICAgIH0KIAogICAgIGlmIChpc011bHRpUGFydEZv
cm0pCiAgICAgICAgIGZvcm1EYXRhQnVpbGRlci5hZGRCb3VuZGFyeVRvTXVsdGlQYXJ0SGVhZGVy
KGVuY29kZWREYXRhLCBtX2JvdW5kYXJ5LmRhdGEoKSwgdHJ1ZSk7CkBAIC0yNzAsMTIgKzI3Nyw4
IEBAIHZvaWQgRm9ybURhdGE6OmZsYXR0ZW4oVmVjdG9yPGNoYXI+JiBkYXRhKSBjb25zdAogICAg
IHNpemVfdCBuID0gbV9lbGVtZW50cy5zaXplKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBuOyArK2kpIHsKICAgICAgICAgY29uc3QgRm9ybURhdGFFbGVtZW50JiBlID0gbV9lbGVtZW50
c1tpXTsKLSAgICAgICAgaWYgKGUubV90eXBlID09IEZvcm1EYXRhRWxlbWVudDo6ZGF0YSkgewot
ICAgICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBkYXRhLnNpemUoKTsKLSAgICAgICAgICAgIHNp
emVfdCBkZWx0YSA9IGUubV9kYXRhLnNpemUoKTsKLSAgICAgICAgICAgIGRhdGEuZ3JvdyhvbGRT
aXplICsgZGVsdGEpOwotICAgICAgICAgICAgbWVtY3B5KGRhdGEuZGF0YSgpICsgb2xkU2l6ZSwg
ZS5tX2RhdGEuZGF0YSgpLCBkZWx0YSk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKGUubV90eXBl
ID09IEZvcm1EYXRhRWxlbWVudDo6ZGF0YSkKKyAgICAgICAgICAgIGRhdGEuYXBwZW5kKGUubV9k
YXRhLmRhdGEoKSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihlLm1fZGF0YS5zaXplKCkpKTsKICAgICB9
CiB9CiAKQEAgLTI4OSwxMCArMjkyLDEwIEBAIFN0cmluZyBGb3JtRGF0YTo6ZmxhdHRlblRvU3Ry
aW5nKCkgY29uc3QKIHZvaWQgRm9ybURhdGE6OmdlbmVyYXRlRmlsZXMoRG9jdW1lbnQqIGRvY3Vt
ZW50KQogewogICAgIEFTU0VSVCghbV9oYXNHZW5lcmF0ZWRGaWxlcyk7Ci0gICAgCisKICAgICBp
ZiAobV9oYXNHZW5lcmF0ZWRGaWxlcykKICAgICAgICAgcmV0dXJuOwotICAgIAorCiAgICAgUGFn
ZSogcGFnZSA9IGRvY3VtZW50LT5wYWdlKCk7CiAgICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1
cm47CkBAIC0zMDIsNyArMzA1LDcgQEAgdm9pZCBGb3JtRGF0YTo6Z2VuZXJhdGVGaWxlcyhEb2N1
bWVudCogZG9jdW1lbnQpCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuOyArK2kpIHsKICAg
ICAgICAgRm9ybURhdGFFbGVtZW50JiBlID0gbV9lbGVtZW50c1tpXTsKICAgICAgICAgaWYgKGUu
bV90eXBlID09IEZvcm1EYXRhRWxlbWVudDo6ZW5jb2RlZEZpbGUgJiYgZS5tX3Nob3VsZEdlbmVy
YXRlRmlsZSkgewotICAgICAgICAgICAgZS5tX2dlbmVyYXRlZEZpbGVuYW1lID0gY2xpZW50LT5n
ZW5lcmF0ZVJlcGxhY2VtZW50RmlsZShlLm1fZmlsZW5hbWUpOworICAgICAgICAgICAgZS5tX2dl
bmVyYXRlZEZpbGVuYW1lID0gY2xpZW50LT5nZW5lcmF0ZVJlcGxhY2VtZW50RmlsZShlLml0ZW0o
KS0+dG9GaWxlQmxvYkl0ZW0oKS0+cGF0aCgpKTsKICAgICAgICAgICAgIG1faGFzR2VuZXJhdGVk
RmlsZXMgPSB0cnVlOwogICAgICAgICB9CiAgICAgfQpAQCAtMzEyLDcgKzMxNSw3IEBAIHZvaWQg
Rm9ybURhdGE6OnJlbW92ZUdlbmVyYXRlZEZpbGVzSWZOZWVkZWQoKQogewogICAgIGlmICghbV9o
YXNHZW5lcmF0ZWRGaWxlcykKICAgICAgICAgcmV0dXJuOwotICAgICAgICAKKwogICAgIHNpemVf
dCBuID0gbV9lbGVtZW50cy5zaXplKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuOyAr
K2kpIHsKICAgICAgICAgRm9ybURhdGFFbGVtZW50JiBlID0gbV9lbGVtZW50c1tpXTsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5oIGIvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmgKaW5kZXggYTQzOTAyMzQ3OTZhMGUyZjE0ZjVkMzQ5ZjVk
ZDBlZmZjMGE0YjdjZC4uM2RjNDhjYmE3YjU5MTBhM2RkNjIxMzAxMjZhNzViMWIyM2VmMDlhYiAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmgKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmgKQEAgLTIwLDc0ICsyMCw4OSBAQAogI2lm
bmRlZiBGb3JtRGF0YV9oCiAjZGVmaW5lIEZvcm1EYXRhX2gKIAorI2luY2x1ZGUgIkJsb2JJdGVt
LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1j
bGFzcyBET01Gb3JtRGF0YTsKIGNsYXNzIERvY3VtZW50OworY2xhc3MgVGV4dEVuY29kaW5nOwog
CisvLyBBIHdyYXBwZXIgY2xhc3Mgb2YgQmxvYkl0ZW0gZm9yIEZvcm1EYXRhLgogY2xhc3MgRm9y
bURhdGFFbGVtZW50IHsKIHB1YmxpYzoKLSAgICBGb3JtRGF0YUVsZW1lbnQoKSA6IG1fdHlwZShk
YXRhKSB7IH0KLSAgICBGb3JtRGF0YUVsZW1lbnQoY29uc3QgVmVjdG9yPGNoYXI+JiBhcnJheSkg
OiBtX3R5cGUoZGF0YSksIG1fZGF0YShhcnJheSkgeyB9Ci0jaWYgRU5BQkxFKEJMT0JfU0xJQ0Up
Ci0gICAgRm9ybURhdGFFbGVtZW50KGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGxvbmcgbG9uZyBm
aWxlU3RhcnQsIGxvbmcgbG9uZyBmaWxlTGVuZ3RoLCBkb3VibGUgZXhwZWN0ZWRGaWxlTW9kaWZp
Y2F0aW9uVGltZSwgYm9vbCBzaG91bGRHZW5lcmF0ZUZpbGUpIDogbV90eXBlKGVuY29kZWRGaWxl
KSwgbV9maWxlbmFtZShmaWxlbmFtZSksIG1fZmlsZVN0YXJ0KGZpbGVTdGFydCksIG1fZmlsZUxl
bmd0aChmaWxlTGVuZ3RoKSwgbV9leHBlY3RlZEZpbGVNb2RpZmljYXRpb25UaW1lKGV4cGVjdGVk
RmlsZU1vZGlmaWNhdGlvblRpbWUpLCBtX3Nob3VsZEdlbmVyYXRlRmlsZShzaG91bGRHZW5lcmF0
ZUZpbGUpIHsgfQotI2Vsc2UKLSAgICBGb3JtRGF0YUVsZW1lbnQoY29uc3QgU3RyaW5nJiBmaWxl
bmFtZSwgYm9vbCBzaG91bGRHZW5lcmF0ZUZpbGUpIDogbV90eXBlKGVuY29kZWRGaWxlKSwgbV9m
aWxlbmFtZShmaWxlbmFtZSksIG1fc2hvdWxkR2VuZXJhdGVGaWxlKHNob3VsZEdlbmVyYXRlRmls
ZSkgeyB9Ci0jZW5kaWYKKyAgICBGb3JtRGF0YUVsZW1lbnQoKSA6IG1fZGF0YSgwKSB7IH0KKyAg
ICBGb3JtRGF0YUVsZW1lbnQoUGFzc1JlZlB0cjxCbG9iSXRlbT4gYmxvYkl0ZW0sIGJvb2wgc2hv
dWxkR2VuZXJhdGVGaWxlID0gZmFsc2UpOworCisgICAgY29uc3QgQmxvYkl0ZW0qIGl0ZW0oKSBj
b25zdCB7IHJldHVybiBtX2l0ZW0uZ2V0KCk7IH0KKworICAgIFJlZlB0cjxCbG9iSXRlbT4gbV9p
dGVtOwogCisgICAgLy8gRklYTUU6IGNsZWFuIG1lIHVwLiAgQ29kZSBiZWxvdyBhcmUgbW9zdGx5
IGtlcHQgZm9yIGNvbXBhdGliaWxpdHkuCiAgICAgZW51bSB7IGRhdGEsIGVuY29kZWRGaWxlIH0g
bV90eXBlOwotICAgIFZlY3RvcjxjaGFyPiBtX2RhdGE7CisgICAgY29uc3Qgc3RydWN0IEJsb2JJ
dGVtV3JhcHBlciB7CisgICAgICAgIEJsb2JJdGVtV3JhcHBlcihjb25zdCBCbG9iSXRlbVdyYXBw
ZXImIHYpIDogbV9pdGVtKHYubV9pdGVtKSB7IH0KKyAgICAgICAgQmxvYkl0ZW1XcmFwcGVyKGNv
bnN0IERhdGFCbG9iSXRlbSogaXRlbSkgOiBtX2l0ZW0oaXRlbSkgeyB9CisgICAgICAgIHNpemVf
dCBzaXplKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFtX2l0ZW0pCisgICAg
ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6
ZV90PihtX2l0ZW0tPnNpemUoKSk7CisgICAgICAgIH0KKyAgICAgICAgY29uc3QgY2hhciogZGF0
YSgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghbV9pdGVtKQorICAgICAgICAg
ICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIG1faXRlbS0+ZGF0YSgpOworICAg
ICAgICB9CisgICAgICAgIGNoYXIqIHJlbGVhc2VCdWZmZXIoKSBjb25zdAorICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAoIW1faXRlbSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgICAgIHJldHVybiBtX2l0ZW0tPmNvcHlCdWZmZXIoKTsKKyAgICAgICAgfQorICAgICAgICBj
b25zdCBEYXRhQmxvYkl0ZW0qIG1faXRlbTsKKyAgICB9IG1fZGF0YTsKICAgICBTdHJpbmcgbV9m
aWxlbmFtZTsKICNpZiBFTkFCTEUoQkxPQl9TTElDRSkKICAgICBsb25nIGxvbmcgbV9maWxlU3Rh
cnQ7CiAgICAgbG9uZyBsb25nIG1fZmlsZUxlbmd0aDsKICAgICBkb3VibGUgbV9leHBlY3RlZEZp
bGVNb2RpZmljYXRpb25UaW1lOworCisgICAgc3RhdGljIGNvbnN0IGxvbmcgbG9uZyB0b0VuZE9m
RmlsZTsKICNlbmRpZgorCiAgICAgU3RyaW5nIG1fZ2VuZXJhdGVkRmlsZW5hbWU7CiAgICAgYm9v
bCBtX3Nob3VsZEdlbmVyYXRlRmlsZTsKIH07CiAKIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29u
c3QgRm9ybURhdGFFbGVtZW50JiBhLCBjb25zdCBGb3JtRGF0YUVsZW1lbnQmIGIpCiB7Ci0gICAg
aWYgKCZhID09ICZiKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICBpZiAoYS5tX3R5
cGUgIT0gYi5tX3R5cGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoYS5tX2RhdGEg
IT0gYi5tX2RhdGEpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSNpZiBFTkFCTEUoQkxPQl9TTElD
RSkKLSAgICBpZiAoYS5tX2ZpbGVuYW1lICE9IGIubV9maWxlbmFtZSB8fCBhLm1fZmlsZVN0YXJ0
ICE9IGIubV9maWxlU3RhcnQgfHwgYS5tX2ZpbGVMZW5ndGggIT0gYi5tX2ZpbGVMZW5ndGggfHwg
YS5tX2V4cGVjdGVkRmlsZU1vZGlmaWNhdGlvblRpbWUgIT0gYi5tX2V4cGVjdGVkRmlsZU1vZGlm
aWNhdGlvblRpbWUpCi0jZWxzZQotICAgIGlmIChhLm1fZmlsZW5hbWUgIT0gYi5tX2ZpbGVuYW1l
KQotI2VuZGlmCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOworICAg
IHJldHVybiBhLml0ZW0oKS0+ZXF1YWxzKGIuaXRlbSgpKTsKIH0KLSAKKwogaW5saW5lIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBGb3JtRGF0YUVsZW1lbnQmIGEsIGNvbnN0IEZvcm1EYXRhRWxlbWVu
dCYgYikKIHsKICAgICByZXR1cm4gIShhID09IGIpOwogfQotIAorCiBjbGFzcyBGb3JtRGF0YSA6
IHB1YmxpYyBSZWZDb3VudGVkPEZvcm1EYXRhPiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8Rm9ybURhdGE+IGNyZWF0ZSgpOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZvcm1EYXRh
PiBjcmVhdGUoY29uc3Qgdm9pZCosIHNpemVfdCk7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Rm9y
bURhdGE+IGNyZWF0ZShjb25zdCBXVEY6OkNTdHJpbmcmKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxGb3JtRGF0YT4gY3JlYXRlKGNvbnN0IFZlY3RvcjxjaGFyPiYpOwotICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEZvcm1EYXRhPiBjcmVhdGUoY29uc3QgRE9NRm9ybURhdGEmKTsKLSAgICBzdGF0aWMg
UGFzc1JlZlB0cjxGb3JtRGF0YT4gY3JlYXRlTXVsdGlQYXJ0KGNvbnN0IERPTUZvcm1EYXRhJiwg
RG9jdW1lbnQqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxGb3JtRGF0YT4gY3JlYXRlKGNvbnN0
IEJsb2JJdGVtTGlzdCYsIGNvbnN0IFRleHRFbmNvZGluZyYpOworICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEZvcm1EYXRhPiBjcmVhdGVNdWx0aVBhcnQoY29uc3QgQmxvYkl0ZW1MaXN0JiwgY29uc3Qg
VGV4dEVuY29kaW5nJiwgRG9jdW1lbnQqKTsKICAgICBQYXNzUmVmUHRyPEZvcm1EYXRhPiBjb3B5
KCkgY29uc3Q7CiAgICAgUGFzc1JlZlB0cjxGb3JtRGF0YT4gZGVlcENvcHkoKSBjb25zdDsKICAg
ICB+Rm9ybURhdGEoKTsKLSAgICAKKwogICAgIHZvaWQgYXBwZW5kRGF0YShjb25zdCB2b2lkKiBk
YXRhLCBzaXplX3QpOworICAgIHZvaWQgYXBwZW5kSXRlbXMoY29uc3QgQmxvYkl0ZW1MaXN0Jik7
CisgICAgdm9pZCBhcHBlbmRTdHJpbmcoY29uc3QgQ1N0cmluZyYpOwogICAgIHZvaWQgYXBwZW5k
RmlsZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBib29sIHNob3VsZEdlbmVyYXRlRmlsZSA9IGZh
bHNlKTsKICNpZiBFTkFCTEUoQkxPQl9TTElDRSkKICAgICB2b2lkIGFwcGVuZEZpbGVSYW5nZShj
b25zdCBTdHJpbmcmIGZpbGVuYW1lLCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgs
IGRvdWJsZSBleHBlY3RlZE1vZGlmaWNhdGlvblRpbWUsIGJvb2wgc2hvdWxkR2VuZXJhdGVGaWxl
ID0gZmFsc2UpOwpAQCAtMTE1LDkgKzEzMCwxMCBAQCBwcml2YXRlOgogICAgIEZvcm1EYXRhKCk7
CiAgICAgRm9ybURhdGEoY29uc3QgRm9ybURhdGEmKTsKIAotICAgIHZvaWQgYXBwZW5kRE9NRm9y
bURhdGEoY29uc3QgRE9NRm9ybURhdGEmIGRvbUZvcm1EYXRhLCBib29sIGlzTXVsdGlQYXJ0Rm9y
bSwgRG9jdW1lbnQqIGRvY3VtZW50KTsKKyAgICB2b2lkIGFwcGVuZEtleVZhbHVlUGFpckl0ZW1z
KGNvbnN0IEJsb2JJdGVtTGlzdCYsIGNvbnN0IFRleHRFbmNvZGluZyYsIGJvb2wgaXNNdWx0aVBh
cnRGb3JtLCBEb2N1bWVudCopOwogCiAgICAgVmVjdG9yPEZvcm1EYXRhRWxlbWVudD4gbV9lbGVt
ZW50czsKKwogICAgIGludDY0X3QgbV9pZGVudGlmaWVyOwogICAgIGJvb2wgbV9oYXNHZW5lcmF0
ZWRGaWxlczsKICAgICBib29sIG1fYWx3YXlzU3RyZWFtOwpAQCAtMTMxLDcgKzE0Nyw3IEBAIGlu
bGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9ybURhdGEmIGEsIGNvbnN0IEZvcm1EYXRhJiBi
KQogCiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZvcm1EYXRhJiBhLCBjb25zdCBGb3Jt
RGF0YSYgYikKIHsKLSAgICByZXR1cm4gYS5lbGVtZW50cygpICE9IGIuZWxlbWVudHMoKTsKKyAg
ICByZXR1cm4gIShhID09IGIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL0Zvcm1EYXRhU3RyZWFtTWFjLm1tIGIv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9Gb3JtRGF0YVN0cmVhbU1hYy5tbQppbmRleCAy
N2VjZmQwOGFkNWFhYWI4NzU2ZmE1OTZkOTk2YmQyZjZlYzVkMDNmLi4yNTJkZGY3Zjk3ZDVkOGJm
NmQwY2RkMWQ4NzUyOGFmNTQxZTA3Mzc4IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvbWFjL0Zvcm1EYXRhU3RyZWFtTWFjLm1tCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9tYWMvRm9ybURhdGFTdHJlYW1NYWMubW0KQEAgLTMxLDcgKzMxLDYgQEAKICNpbXBvcnQg
ImNvbmZpZy5oIgogI2ltcG9ydCAiRm9ybURhdGFTdHJlYW1NYWMuaCIKIAotI2ltcG9ydCAiQmxv
Yi5oIgogI2ltcG9ydCAiRmlsZVN5c3RlbS5oIgogI2ltcG9ydCAiRm9ybURhdGEuaCIKICNpbXBv
cnQgIlJlc291cmNlSGFuZGxlLmgiCkBAIC0xNDIsNyArMTQxLDcgQEAgc3RhdGljIHZvaWQgY2xv
c2VDdXJyZW50U3RyZWFtKEZvcm1TdHJlYW1GaWVsZHMgKmZvcm0pCiAgICAgICAgIENGUmVsZWFz
ZShmb3JtLT5jdXJyZW50U3RyZWFtKTsKICAgICAgICAgZm9ybS0+Y3VycmVudFN0cmVhbSA9IE5V
TEw7CiAjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgICAgIGZvcm0tPmN1cnJlbnRTdHJlYW1S
YW5nZUxlbmd0aCA9IEJsb2I6OnRvRW5kT2ZGaWxlOworICAgICAgICBmb3JtLT5jdXJyZW50U3Ry
ZWFtUmFuZ2VMZW5ndGggPSBGb3JtRGF0YUVsZW1lbnQ6OnRvRW5kT2ZGaWxlOwogI2VuZGlmCiAg
ICAgfQogICAgIGlmIChmb3JtLT5jdXJyZW50RGF0YSkgewpAQCAtMTUxLDcgKzE1MCw3IEBAIHN0
YXRpYyB2b2lkIGNsb3NlQ3VycmVudFN0cmVhbShGb3JtU3RyZWFtRmllbGRzICpmb3JtKQogICAg
IH0KIH0KIAotLy8gUmV0dXJuIGZhbHNlIGlmIHdlIGNhbm5vdCBhZHZhbmNlIHRoZSBzdHJlYW0u
IEN1cnJlbnRseSB0aGUgb25seSBwb3NzaWJsZSBmYWlsdXJlIGlzIHRoYXQgdGhlIHVuZGVybHlp
bmcgZmlsZSBoYXMgYmVlbiBjaGFuZ2VkIHNpbmNlIEZpbGUuc2xpY2UuIAorLy8gUmV0dXJuIGZh
bHNlIGlmIHdlIGNhbm5vdCBhZHZhbmNlIHRoZSBzdHJlYW0uIEN1cnJlbnRseSB0aGUgb25seSBw
b3NzaWJsZSBmYWlsdXJlIGlzIHRoYXQgdGhlIHVuZGVybHlpbmcgZmlsZSBoYXMgYmVlbiByZW1v
dmVkIG9yIGNoYW5nZWQgc2luY2UgRmlsZS5zbGljZS4KIHN0YXRpYyBib29sIGFkdmFuY2VDdXJy
ZW50U3RyZWFtKEZvcm1TdHJlYW1GaWVsZHMqIGZvcm0pCiB7CiAgICAgY2xvc2VDdXJyZW50U3Ry
ZWFtKGZvcm0pOwpAQCAtMTYxLDI1ICsxNjAsMjUgQEAgc3RhdGljIGJvb2wgYWR2YW5jZUN1cnJl
bnRTdHJlYW0oRm9ybVN0cmVhbUZpZWxkcyogZm9ybSkKIAogICAgIC8vIENyZWF0ZSB0aGUgbmV3
IHN0cmVhbS4KICAgICBGb3JtRGF0YUVsZW1lbnQmIG5leHRJbnB1dCA9IGZvcm0tPnJlbWFpbmlu
Z0VsZW1lbnRzLmxhc3QoKTsKKworICAgIC8vIENoZWNrIGlmIHRoZSB1bmRlcmx5aW5nIGRhdGEg
aGFzIGJlY29tZSBzdGFsZSAoZS5nLiB0aGUgZmlsZSBoYXMgYmVlbiBjaGFuZ2VkIHNpbmNlIGl0
cyBzbmFwc2hvdCBoYXMgYmVlbiB0YWtlbikgb3Igbm90LgorICAgIGlmICghbmV4dElucHV0Lm1f
aXRlbS0+aXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBpZiAobmV4dElu
cHV0Lm1fdHlwZSA9PSBGb3JtRGF0YUVsZW1lbnQ6OmRhdGEpIHsKICAgICAgICAgc2l6ZV90IHNp
emUgPSBuZXh0SW5wdXQubV9kYXRhLnNpemUoKTsKICAgICAgICAgY2hhciogZGF0YSA9IG5leHRJ
bnB1dC5tX2RhdGEucmVsZWFzZUJ1ZmZlcigpOwogICAgICAgICBmb3JtLT5jdXJyZW50U3RyZWFt
ID0gQ0ZSZWFkU3RyZWFtQ3JlYXRlV2l0aEJ5dGVzTm9Db3B5KDAsIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgVUludDgqPihkYXRhKSwgc2l6ZSwga0NGQWxsb2NhdG9yTnVsbCk7CiAgICAgICAgIGZv
cm0tPmN1cnJlbnREYXRhID0gZGF0YTsKICAgICB9IGVsc2UgewotI2lmIEVOQUJMRShCTE9CX1NM
SUNFKQotICAgICAgICAvLyBDaGVjayBpZiB0aGUgZmlsZSBoYXMgYmVlbiBjaGFuZ2VkIG9yIG5v
dCBpZiByZXF1aXJlZC4KLSAgICAgICAgaWYgKG5leHRJbnB1dC5tX2V4cGVjdGVkRmlsZU1vZGlm
aWNhdGlvblRpbWUgIT0gQmxvYjo6ZG9Ob3RDaGVja0ZpbGVDaGFuZ2UpIHsKLSAgICAgICAgICAg
IHRpbWVfdCBmaWxlTW9kaWZpY2F0aW9uVGltZTsKLSAgICAgICAgICAgIGlmICghZ2V0RmlsZU1v
ZGlmaWNhdGlvblRpbWUobmV4dElucHV0Lm1fZmlsZW5hbWUsIGZpbGVNb2RpZmljYXRpb25UaW1l
KSB8fCBmaWxlTW9kaWZpY2F0aW9uVGltZSAhPSBzdGF0aWNfY2FzdDx0aW1lX3Q+KG5leHRJbnB1
dC5tX2V4cGVjdGVkRmlsZU1vZGlmaWNhdGlvblRpbWUpKQotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgfQotI2VuZGlmCi0KICAgICAgICAgY29uc3QgU3RyaW5nJiBwYXRo
ID0gbmV4dElucHV0Lm1fc2hvdWxkR2VuZXJhdGVGaWxlID8gbmV4dElucHV0Lm1fZ2VuZXJhdGVk
RmlsZW5hbWUgOiBuZXh0SW5wdXQubV9maWxlbmFtZTsKICAgICAgICAgUmV0YWluUHRyPENGU3Ry
aW5nUmVmPiBmaWxlbmFtZShBZG9wdENGLCBwYXRoLmNyZWF0ZUNGU3RyaW5nKCkpOwogICAgICAg
ICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IGZpbGVVUkwoQWRvcHRDRiwgQ0ZVUkxDcmVhdGVXaXRoRmls
ZVN5c3RlbVBhdGgoMCwgZmlsZW5hbWUuZ2V0KCksIGtDRlVSTFBPU0lYUGF0aFN0eWxlLCBGQUxT
RSkpOwogICAgICAgICBmb3JtLT5jdXJyZW50U3RyZWFtID0gQ0ZSZWFkU3RyZWFtQ3JlYXRlV2l0
aEZpbGUoMCwgZmlsZVVSTC5nZXQoKSk7CisgICAgICAgIGlmICghZm9ybS0+Y3VycmVudFN0cmVh
bSkgeworICAgICAgICAgICAgLy8gVGhlIGZpbGUgbXVzdCBoYXZlIGJlZW4gcmVtb3ZlZCBvciBi
ZWNvbWUgdW5yZWFkYWJsZS4KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQog
I2lmIEVOQUJMRShCTE9CX1NMSUNFKQogICAgICAgICBpZiAobmV4dElucHV0Lm1fZmlsZVN0YXJ0
ID4gMCkgewogICAgICAgICAgICAgQ0ZOdW1iZXJSZWYgcG9zaXRpb24gPSBDRk51bWJlckNyZWF0
ZSgwLCBrQ0ZOdW1iZXJMb25nTG9uZ1R5cGUsICZuZXh0SW5wdXQubV9maWxlU3RhcnQpOwpAQCAt
MjIyLDcgKzIyMSw3IEBAIHN0YXRpYyB2b2lkKiBmb3JtQ3JlYXRlKENGUmVhZFN0cmVhbVJlZiBz
dHJlYW0sIHZvaWQqIGNvbnRleHQpCiAgICAgRm9ybVN0cmVhbUZpZWxkcyogbmV3SW5mbyA9IG5l
dyBGb3JtU3RyZWFtRmllbGRzOwogICAgIG5ld0luZm8tPmN1cnJlbnRTdHJlYW0gPSBOVUxMOwog
I2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgIG5ld0luZm8tPmN1cnJlbnRTdHJlYW1SYW5nZUxl
bmd0aCA9IEJsb2I6OnRvRW5kT2ZGaWxlOworICAgIG5ld0luZm8tPmN1cnJlbnRTdHJlYW1SYW5n
ZUxlbmd0aCA9IEZvcm1EYXRhRWxlbWVudDo6dG9FbmRPZkZpbGU7CiAjZW5kaWYKICAgICBuZXdJ
bmZvLT5jdXJyZW50RGF0YSA9IDA7CiAgICAgbmV3SW5mby0+Zm9ybVN0cmVhbSA9IHN0cmVhbTsg
Ly8gRG9uJ3QgcmV0YWluLiBUaGF0IHdvdWxkIGNyZWF0ZSBhIHJlZmVyZW5jZSBjeWNsZS4KQEAg
LTI3MCw3ICsyNjksNyBAQCBzdGF0aWMgQ0ZJbmRleCBmb3JtUmVhZChDRlJlYWRTdHJlYW1SZWYg
c3RyZWFtLCBVSW50OCogYnVmZmVyLCBDRkluZGV4IGJ1ZmZlckxlbgogICAgIHdoaWxlIChmb3Jt
LT5jdXJyZW50U3RyZWFtKSB7CiAgICAgICAgIENGSW5kZXggYnl0ZXNUb1JlYWQgPSBidWZmZXJM
ZW5ndGg7CiAjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgICAgIGlmIChmb3JtLT5jdXJyZW50
U3RyZWFtUmFuZ2VMZW5ndGggIT0gQmxvYjo6dG9FbmRPZkZpbGUgJiYgZm9ybS0+Y3VycmVudFN0
cmVhbVJhbmdlTGVuZ3RoIDwgYnl0ZXNUb1JlYWQpCisgICAgICAgIGlmIChmb3JtLT5jdXJyZW50
U3RyZWFtUmFuZ2VMZW5ndGggIT0gRm9ybURhdGFFbGVtZW50Ojp0b0VuZE9mRmlsZSAmJiBmb3Jt
LT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5ndGggPCBieXRlc1RvUmVhZCkKICAgICAgICAgICAgIGJ5
dGVzVG9SZWFkID0gc3RhdGljX2Nhc3Q8Q0ZJbmRleD4oZm9ybS0+Y3VycmVudFN0cmVhbVJhbmdl
TGVuZ3RoKTsKICNlbmRpZgogICAgICAgICBDRkluZGV4IGJ5dGVzUmVhZCA9IENGUmVhZFN0cmVh
bVJlYWQoZm9ybS0+Y3VycmVudFN0cmVhbSwgYnVmZmVyLCBieXRlc1RvUmVhZCk7CkBAIC0yODMs
NyArMjgyLDcgQEAgc3RhdGljIENGSW5kZXggZm9ybVJlYWQoQ0ZSZWFkU3RyZWFtUmVmIHN0cmVh
bSwgVUludDgqIGJ1ZmZlciwgQ0ZJbmRleCBidWZmZXJMZW4KICAgICAgICAgICAgICphdEVPRiA9
IEZBTFNFOwogICAgICAgICAgICAgZm9ybS0+Ynl0ZXNTZW50ICs9IGJ5dGVzUmVhZDsKICNpZiBF
TkFCTEUoQkxPQl9TTElDRSkKLSAgICAgICAgICAgIGlmIChmb3JtLT5jdXJyZW50U3RyZWFtUmFu
Z2VMZW5ndGggIT0gQmxvYjo6dG9FbmRPZkZpbGUpCisgICAgICAgICAgICBpZiAoZm9ybS0+Y3Vy
cmVudFN0cmVhbVJhbmdlTGVuZ3RoICE9IEZvcm1EYXRhRWxlbWVudDo6dG9FbmRPZkZpbGUpCiAg
ICAgICAgICAgICAgICAgZm9ybS0+Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoIC09IGJ5dGVzUmVh
ZDsKICNlbmRpZgogCkBAIC00MDAsNyArMzk5LDcgQEAgdm9pZCBzZXRIVFRQQm9keShOU011dGFi
bGVVUkxSZXF1ZXN0ICpyZXF1ZXN0LCBQYXNzUmVmUHRyPEZvcm1EYXRhPiBmb3JtRGF0YSkKICAg
ICAgICAgZWxzZSB7CiAjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCiAgICAgICAgICAgICAvLyBJZiB3
ZSdyZSBzZW5kaW5nIHRoZSBmaWxlIHJhbmdlLCB1c2UgdGhlIGV4aXN0aW5nIHJhbmdlIGxlbmd0
aCBmb3Igbm93LiBXZSB3aWxsIGRldGVjdCBpZiB0aGUgZmlsZSBoYXMgYmVlbiBjaGFuZ2VkIHJp
Z2h0IGJlZm9yZSB3ZSByZWFkIHRoZSBmaWxlIGFuZCBhYm9ydCB0aGUgb3BlcmF0aW9uIGlmIG5l
Y2Vzc2FyeS4KLSAgICAgICAgICAgIGlmIChlbGVtZW50Lm1fZmlsZUxlbmd0aCAhPSBCbG9iOjp0
b0VuZE9mRmlsZSkgeworICAgICAgICAgICAgaWYgKGVsZW1lbnQubV9maWxlTGVuZ3RoICE9IEZv
cm1EYXRhRWxlbWVudDo6dG9FbmRPZkZpbGUpIHsKICAgICAgICAgICAgICAgICBsZW5ndGggKz0g
ZWxlbWVudC5tX2ZpbGVMZW5ndGg7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAgYi9XZWJD
b3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKaW5kZXggNWNkZTI0ZGUyOWRiNDQyMTAwMDFhMzAy
MzI0NGNhNGNjZDI1Y2ZiYi4uODMxYWRhOTgxMTIxMzk0MmE4MDQ4NjRkYTU3ZjBhMzljNGJjYzI4
ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCisrKyBiL1dlYkNv
cmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcApAQCAtNDc4LDExICs0NzgsNyBAQCB2b2lkIFhNTEh0
dHBSZXF1ZXN0OjpzZW5kKEJsb2IqIGJvZHksIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgICAgICAv
LyBGSVhNRTogU2hvdWxkIHdlIHNldCBhIENvbnRlbnQtVHlwZSBpZiBvbmUgaXMgbm90IHNldC4K
ICAgICAgICAgLy8gRklYTUU6IGFkZCBzdXBwb3J0IGZvciB1cGxvYWRpbmcgYnVuZGxlcy4KICAg
ICAgICAgbV9yZXF1ZXN0RW50aXR5Qm9keSA9IEZvcm1EYXRhOjpjcmVhdGUoKTsKLSNpZiBFTkFC
TEUoQkxPQl9TTElDRSkKLSAgICAgICAgbV9yZXF1ZXN0RW50aXR5Qm9keS0+YXBwZW5kRmlsZVJh
bmdlKGJvZHktPnBhdGgoKSwgYm9keS0+c3RhcnQoKSwgYm9keS0+bGVuZ3RoKCksIGJvZHktPm1v
ZGlmaWNhdGlvblRpbWUoKSk7Ci0jZWxzZQotICAgICAgICBtX3JlcXVlc3RFbnRpdHlCb2R5LT5h
cHBlbmRGaWxlKGJvZHktPnBhdGgoKSwgZmFsc2UpOwotI2VuZGlmCisgICAgICAgIG1fcmVxdWVz
dEVudGl0eUJvZHktPmFwcGVuZEl0ZW1zKGJvZHktPml0ZW1zKCkpOwogICAgIH0KIAogICAgIGNy
ZWF0ZVJlcXVlc3QoZWMpOwpAQCAtNDk0LDcgKzQ5MCw3IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6
OnNlbmQoRE9NRm9ybURhdGEqIGJvZHksIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgICAgICByZXR1
cm47CiAKICAgICBpZiAobV9tZXRob2QgIT0gIkdFVCIgJiYgbV9tZXRob2QgIT0gIkhFQUQiICYm
IG1fdXJsLnByb3RvY29sSW5IVFRQRmFtaWx5KCkpIHsKLSAgICAgICAgbV9yZXF1ZXN0RW50aXR5
Qm9keSA9IEZvcm1EYXRhOjpjcmVhdGVNdWx0aVBhcnQoKmJvZHksIGRvY3VtZW50KCkpOworICAg
ICAgICBtX3JlcXVlc3RFbnRpdHlCb2R5ID0gRm9ybURhdGE6OmNyZWF0ZU11bHRpUGFydChib2R5
LT5pdGVtcygpLCBib2R5LT5lbmNvZGluZygpLCBkb2N1bWVudCgpKTsKIAogICAgICAgICAvLyBX
ZSBuZWVkIHRvIGFzayB0aGUgY2xpZW50IHRvIHByb3ZpZGUgdGhlIGdlbmVyYXRlZCBmaWxlIG5h
bWVzIGlmIG5lZWRlZC4gV2hlbiBGb3JtRGF0YSBmaWxscyB0aGUgZWxlbWVudAogICAgICAgICAv
LyBmb3IgdGhlIGZpbGUsIGl0IGNvdWxkIHNldCBhIGZsYWcgdG8gdXNlIHRoZSBnZW5lcmF0ZWQg
ZmlsZSBuYW1lLCBpLmUuIGEgcGFja2FnZSBmaWxlIG9uIE1hYy4KZGlmZiAtLWdpdCBhL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGUx
ODNmNDRjOWMzNWEzZmE2MTJiM2RiNzkxZGFkNDhiMTliNGFkYTQuLjM3MjUzMGE1Y2U3NTBjMWE1
YzI1ZDFlMmRmNTQ1M2VmOWUwZWZkZDcgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisy
MDEwLTA1LTI0ICBLaW51a28gWWFzdWRhICA8a2ludWtvQGNocm9taXVtLm9yZz4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZWZhY3RvciBGb3JtRGF0
YSBhbmQgQmxvYiBmb3IgYmV0dGVyIHN1cHBvcnQgb2YgQmxvYnMgc3ludGhlc2l6ZWQgYnkgQmxv
YkJ1aWxkZXIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0zOTA4MworCisgICAgICAgIFJlcGxhY2UgRm9ybURhdGFMaXN0OjpJdGVtIGxpc3Qgd2l0aCBC
bG9iSXRlbUxpc3QgdG8gZ2V0IGl0IGNvbXBpbGVkCisgICAgICAgIHdpdGggdGhlIHJlZmFjdG9y
aW5nIGluIEZvcm1EYXRhTGlzdC4KKworICAgICAgICAqIHNyYy9XZWJTZWFyY2hhYmxlRm9ybURh
dGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SGFzU3VpdGFibGVUZXh0RWxlbWVudCk6CisKIDIw
MTAtMDUtMjQgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgRGltaXRyaSBHbGF6a292LgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJTZWFyY2hhYmxlRm9ybURhdGEuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJT
ZWFyY2hhYmxlRm9ybURhdGEuY3BwCmluZGV4IDhlZWY2Y2M4OTQ3ZTVjNmNjOTMzMDVkMmNiNjEx
NThlZWU5ZTY4ZDUuLjcyNjk0YjcxMGFmMjVjYTU5ODI1Y2RkNjc4YTQwOWJiZjE0YjFlNWIgMTAw
NjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2VhcmNoYWJsZUZvcm1EYXRhLmNwcAor
KysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNlYXJjaGFibGVGb3JtRGF0YS5jcHAKQEAgLTE4
NSw4ICsxODUsOCBAQCBib29sIEhhc1N1aXRhYmxlVGV4dEVsZW1lbnQoY29uc3QgSFRNTEZvcm1F
bGVtZW50KiBmb3JtLCBWZWN0b3I8Y2hhcj4qIGVuY29kZWRTdAogICAgICAgaWYgKCFmb3JtRWxl
bWVudC0+YXBwZW5kRm9ybURhdGEoZGF0YUxpc3QsIGZhbHNlKSkKICAgICAgICAgICBjb250aW51
ZTsKIAotICAgICAgY29uc3QgVmVjdG9yPEZvcm1EYXRhTGlzdDo6SXRlbT4mIGl0ZW1MaXN0ID0g
ZGF0YUxpc3QubGlzdCgpOwotICAgICAgaWYgKGlzVGV4dEVsZW1lbnQgJiYgIWl0ZW1MaXN0Lmlz
RW1wdHkoKSkgeworICAgICAgY29uc3QgQmxvYkl0ZW1MaXN0JiBpdGVtcyA9IGRhdGFMaXN0Lml0
ZW1zKCk7CisgICAgICBpZiAoaXNUZXh0RWxlbWVudCAmJiAhaXRlbXMuaXNFbXB0eSgpKSB7CiAg
ICAgICAgICAgaWYgKHRleHRFbGVtZW50KSB7CiAgICAgICAgICAgICAgIC8vIFRoZSBhdXRvLWNv
bXBsZXRlIGJhciBvbmx5IGtub3dzIGhvdyB0byBmaWxsIGluIG9uZSB2YWx1ZS4KICAgICAgICAg
ICAgICAgLy8gVGhpcyBmb3JtIGhhcyBtdWx0aXBsZSBmaWVsZHM7IGRvbid0IHRyZWF0IGl0IGFz
IHNlYXJjaGFibGUuCkBAIC0xOTQsMjAgKzE5NCwyMyBAQCBib29sIEhhc1N1aXRhYmxlVGV4dEVs
ZW1lbnQoY29uc3QgSFRNTEZvcm1FbGVtZW50KiBmb3JtLCBWZWN0b3I8Y2hhcj4qIGVuY29kZWRT
dAogICAgICAgICAgIH0KICAgICAgICAgICB0ZXh0RWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxJ
bnB1dEVsZW1lbnQqPihmb3JtRWxlbWVudCk7CiAgICAgICB9Ci0gICAgICBmb3IgKFZlY3RvcjxG
b3JtRGF0YUxpc3Q6Okl0ZW0+Ojpjb25zdF9pdGVyYXRvciBqKGl0ZW1MaXN0LmJlZ2luKCkpOyBq
ICE9IGl0ZW1MaXN0LmVuZCgpOyArK2opIHsKKyAgICAgIGZvciAoQmxvYkl0ZW1MaXN0Ojpjb25z
dF9pdGVyYXRvciBqKGl0ZW1zLmJlZ2luKCkpOyBqICE9IGl0ZW1zLmVuZCgpOyArK2opIHsKKyAg
ICAgICAgICBjb25zdCBTdHJpbmdCbG9iSXRlbSogaXRlbSA9ICgqaiktPnRvU3RyaW5nQmxvYkl0
ZW0oKTsKKyAgICAgICAgICBpZiAoIWl0ZW0pCisgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgIC8vIEhhbmRsZSBJU0lOREVYIC8gPGlucHV0IG5hbWU9aXNpbmRleD4gc3BlY2lhbGx5
LCBidXQgb25seSBpZiBpdCdzCiAgICAgICAgICAgLy8gdGhlIGZpcnN0IGVudHJ5LgotICAgICAg
ICAgIGlmICghZW5jb2RlZFN0cmluZy0+aXNFbXB0eSgpIHx8IGotPmRhdGEoKSAhPSAiaXNpbmRl
eCIpIHsKKyAgICAgICAgICBpZiAoIWVuY29kZWRTdHJpbmctPmlzRW1wdHkoKSB8fCBpdGVtLT5j
c3RyKCkgIT0gImlzaW5kZXgiKSB7CiAgICAgICAgICAgICAgIGlmICghZW5jb2RlZFN0cmluZy0+
aXNFbXB0eSgpKQogICAgICAgICAgICAgICAgICAgZW5jb2RlZFN0cmluZy0+YXBwZW5kKCcmJyk7
Ci0gICAgICAgICAgICAgIEZvcm1EYXRhQnVpbGRlcjo6ZW5jb2RlU3RyaW5nQXNGb3JtRGF0YSgq
ZW5jb2RlZFN0cmluZywgai0+ZGF0YSgpKTsKKyAgICAgICAgICAgICAgRm9ybURhdGFCdWlsZGVy
OjplbmNvZGVTdHJpbmdBc0Zvcm1EYXRhKCplbmNvZGVkU3RyaW5nLCBpdGVtLT5jc3RyKCkpOwog
ICAgICAgICAgICAgICBlbmNvZGVkU3RyaW5nLT5hcHBlbmQoJz0nKTsKICAgICAgICAgICB9CiAg
ICAgICAgICAgKytqOwogICAgICAgICAgIGlmIChmb3JtRWxlbWVudCA9PSB0ZXh0RWxlbWVudCkK
ICAgICAgICAgICAgICAgZW5jb2RlZFN0cmluZy0+YXBwZW5kKCJ7c2VhcmNoVGVybXN9IiwgMTMp
OwogICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgRm9ybURhdGFCdWlsZGVyOjplbmNvZGVT
dHJpbmdBc0Zvcm1EYXRhKCplbmNvZGVkU3RyaW5nLCBqLT5kYXRhKCkpOworICAgICAgICAgICAg
ICBGb3JtRGF0YUJ1aWxkZXI6OmVuY29kZVN0cmluZ0FzRm9ybURhdGEoKmVuY29kZWRTdHJpbmcs
IGl0ZW0tPmNzdHIoKSk7CiAgICAgICB9CiAgICAgfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57831</attachid>
            <date>2010-06-03 16:35:05 -0700</date>
            <delta_ts>2010-06-04 15:31:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-39083-20100603163504.patch</filename>
            <type>text/plain</type>
            <size>76792</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CmluZGV4IDFhZGNhZGVjMTBlYjI5M2E3NzNjZTk5YTA0ZjFjYjVlYTE2OTEwMTIuLmU0Nzdl
MjcwODRjYmQ1ZmZkYmJiOWU2NjhlNDI5NzRmMmFhYmQ2MWEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
Q01ha2VMaXN0cy50eHQKKysrIGIvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTEyMiw2ICsx
MTIyLDcgQEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAgIHBhZ2UvYW5pbWF0aW9uL0tleWZyYW1l
QW5pbWF0aW9uLmNwcAogCiAgICAgcGxhdGZvcm0vQXJlbmEuY3BwCisgICAgcGxhdGZvcm0vQmxv
Ykl0ZW0uY3BwCiAgICAgcGxhdGZvcm0vQ29udGVudFR5cGUuY3BwCiAgICAgcGxhdGZvcm0vQ29u
dGV4dE1lbnUuY3BwCiAgICAgcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGVjNDA3Mzc3
MjRkNzA1ODYyOGQyMmFmYzZjOTliZjA2Y2YyOWRiOWMuLmY1ZWE5NzllNzZmYTI1YWU4ZjIyNDIw
NTNkYjYzZTU4MTc1OTJkZmEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dl
YkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTEgQEAKKzIwMTAtMDYtMDMgIEtpbnVrbyBZYXN1
ZGEgIDxraW51a29AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yIEZvcm1EYXRhIGFuZCBCbG9iIGZvciBiZXR0ZXIg
c3VwcG9ydCBvZiBCbG9icyBzeW50aGVzaXplZCBieSBCbG9iQnVpbGRlci4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5MDgzCisKKyAgICAgICAgLSBJ
bnRyb2R1Y2VzIGEgbmV3IGNsYXNzIEJsb2JJdGVtIGFzIGEgYmFzaWMgY29tcG9uZW50IG9mIEJs
b2IgYW5kCisgICAgICAgICAgRm9ybURhdGEgYW5kIG1ha2VzIEJsb2IgYXMgYSBjb2xsZWN0aW9u
IG9mIEJsb2JJdGVtcy4KKyAgICAgICAgLSBGaWxlIHdvdWxkIGJlY29tZSBhIHNwZWNpYWwgdHlw
ZSBvZiBCbG9iIHRoYXQgY29udGFpbnMgb25seSBvbmUKKyAgICAgICAgICBGaWxlQmxvYkl0ZW0u
CisgICAgICAgIC0gTWFrZXMgRm9ybURhdGFFbGVtZW50IGEgd3JhcHBlciBvZiBCbG9iSXRlbSAo
YXMgYSB0cmFuc2llbnQKKyAgICAgICAgICBzb2x1dGlvbikuCisgICAgICAgIC0gRml4IHRoZSBk
ZXBlbmRlbmN5IHZpb2xhdGlvbiBpbiBGb3JtRGF0YSBzbyB0aGF0IHRoZSBmaWxlcyB1bmRlcgor
ICAgICAgICAgIHBsYXRmb3JtLyBkbyBub3QgaW5jbHVkZSBhbnkgaHRtbC8gZmlsZXMuCisKKyAg
ICAgICAgVGhlIHBhdGNoIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgbGF0ZXN0IEZpbGUgQVBJIGNoYW5n
ZXMgKGUuZy4gdHlwZSwKKyAgICAgICAgdXJsIGFuZCBzbGljZSdzIHR5cGUgcGFyYW1ldGVycykg
YW5kIHNob3VsZCBub3QgY2hhbmdlIGFueSBvZiBpdHMKKyAgICAgICAgZXhpc3RpbmcgYmVoYXZp
b3JzLgorCisgICAgICAgIFRoZSBleGlzdGluZyB0ZXN0cyBzaG91bGQgYmUgYWJsZSB0byBiZSB1
c2VkIGZvciByZWdyZXNzaW9uLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAg
ICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdl
YkNvcmUucHJvOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAg
ICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBodG1s
L0Jsb2IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6QmxvYik6CisgICAgICAgIChXZWJD
b3JlOjpCbG9iOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OnBhdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6QmxvYjo6YXBwZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OnNsaWNl
KToKKyAgICAgICAgKiBodG1sL0Jsb2IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjp0eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkJs
b2I6Oml0ZW1zKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OkJsb2IpOgorICAgICAgICAqIGh0
bWwvRmlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWxlOjpGaWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbGU6Om5hbWUpOgorICAgICAgICAqIGh0bWwvRmlsZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsZTo6ZmlsZU5hbWUpOgorICAgICAgICAqIGh0bWwvRmlsZVJlYWRlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWxlUmVhZGVyOjpyZWFkQXNCaW5hcnlTdHJpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsZVJlYWRlcjo6cmVhZEFzVGV4dCk6CisgICAgICAgICogaHRtbC9GaWxl
U3RyZWFtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVTdHJlYW06Om9wZW5Gb3JSZWFkKToK
KyAgICAgICAgKiBodG1sL0Zvcm1EYXRhTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb3Jt
RGF0YUxpc3Q6OmFwcGVuZFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YUxpc3Q6
OmFwcGVuZEJsb2IpOgorICAgICAgICAqIGh0bWwvRm9ybURhdGFMaXN0Lmg6CisgICAgICAgIChX
ZWJDb3JlOjpGb3JtRGF0YUxpc3Q6Oml0ZW1zKToKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6OmNyZWF0ZUZvcm1E
YXRhKToKKyAgICAgICAgKiBodG1sL0hUTUxQcm9ncmVzc0VsZW1lbnQuY3BwOgorICAgICAgICAq
IHBsYXRmb3JtL0Jsb2JJdGVtLmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vQmxvYkl0
ZW0uaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YUVsZW1lbnQ6OkZvcm1EYXRhRWxlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpGb3JtRGF0YTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1E
YXRhOjpjcmVhdGVNdWx0aVBhcnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6OmRlZXBD
b3B5KToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjphcHBlbmREYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OkZvcm1EYXRhOjphcHBlbmRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Rm9y
bURhdGE6OmFwcGVuZEZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6OmFwcGVuZEZp
bGVSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YTo6YXBwZW5kSXRlbXMpOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6OmFwcGVuZEtleVZhbHVlUGFpckl0ZW1zKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpGb3Jt
RGF0YUVsZW1lbnQ6OkZvcm1EYXRhRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0
YUVsZW1lbnQ6Oml0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGFFbGVtZW50OjpCbG9i
SXRlbVdyYXBwZXI6OkJsb2JJdGVtV3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0
YUVsZW1lbnQ6OkJsb2JJdGVtV3JhcHBlcjo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpGb3Jt
RGF0YUVsZW1lbnQ6OkJsb2JJdGVtV3JhcHBlcjo6ZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpG
b3JtRGF0YUVsZW1lbnQ6OkJsb2JJdGVtV3JhcHBlcjo6cmVsZWFzZUJ1ZmZlcik6CisgICAgICAg
IChXZWJDb3JlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yIT0pOgor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvbWFjL0Zvcm1EYXRhU3RyZWFtTWFjLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6Y2xvc2VDdXJyZW50U3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6OmFk
dmFuY2VDdXJyZW50U3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6OmZvcm1DcmVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6Zm9ybVJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SFRUUEJvZHkp
OgorICAgICAgICAqIHhtbC9YTUxIdHRwUmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpY
TUxIdHRwUmVxdWVzdDo6c2VuZCk6CisKIDIwMTAtMDYtMDMgIFBhdmVsIEZlbGRtYW4gIDxwZmVs
ZG1hbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgTm90IHJldmlld2VkLiBSb2xsaW5nIG91dCBh
Z2dyZXNzaXZlIGNhY2hlIHBhcnQgb2YgdGhlIHI2MDM5MQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9H
TlVtYWtlZmlsZS5hbSBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggNGRjZTYyZmRiYzY0
NmQ4NjkyYjZmNTQ3MDUyY2U3OGExZGQ5NjM2Zi4uM2ZiZjFkOTI1ODYwMjY1ODUyMzU1NTExMTZi
NWI0MTQ2OGFjM2VjYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9X
ZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC0xNTU5LDYgKzE1NTksOCBAQCB3ZWJjb3JlX3NvdXJj
ZXMgKz0gXAogCVdlYkNvcmUvcGxhdGZvcm0vQXJlbmEuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3Jt
L0FyZW5hLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vQXV0b2RyYWluZWRQb29sLmggXAorCVdlYkNv
cmUvcGxhdGZvcm0vQmxvYkl0ZW0uY3BwIFwKKwlXZWJDb3JlL3BsYXRmb3JtL0Jsb2JJdGVtLmgg
XAogCVdlYkNvcmUvcGxhdGZvcm0vQ29udGVudFR5cGUuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3Jt
L0NvbnRlbnRUeXBlLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vQ29udGV4dE1lbnUuY3BwIFwKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5k
ZXggMjkzZjc4NTgwY2IxNjI3ZGVjZTc4YWRmNmU4ZTIzN2ViNjEwOWMzNS4uZDJiN2RlODI1YzIw
ZGMwOTY2OTYyNDJhZmJhM2FmMTYxYWJlZTZhMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTI4ODAsNiArMjg4MCw4IEBACiAg
ICAgICAgICAgICAncGxhdGZvcm0vQXJlbmEuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9B
cmVuYS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9BdXRvZHJhaW5lZFBvb2wuaCcsCisgICAg
ICAgICAgICAncGxhdGZvcm0vQmxvYkl0ZW0uY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9C
bG9iSXRlbS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9Db250ZW50VHlwZS5jcHAnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL0NvbnRlbnRUeXBlLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L0NvbnRleHRNZW51LmNwcCcsCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvV2Vi
Q29yZS9XZWJDb3JlLnBybwppbmRleCAxMWEzZGNiYzNhNzQ0ZDRhNDc1NTk2MThiNzQ3MTMxZDJh
NDI1ZjU1Li43ZDI4MGUxNWRjNjZmYWQyNTYwODYxY2NjNmI1OWYwNGViZmVhMTc2IDEwMDY0NAot
LS0gYS9XZWJDb3JlL1dlYkNvcmUucHJvCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KQEAgLTgx
NSw2ICs4MTUsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBwbGF0Zm9ybS9hbmltYXRpb24vQW5pbWF0
aW9uLmNwcCBcCiAgICAgcGxhdGZvcm0vYW5pbWF0aW9uL0FuaW1hdGlvbkxpc3QuY3BwIFwKICAg
ICBwbGF0Zm9ybS9BcmVuYS5jcHAgXAorICAgIHBsYXRmb3JtL0Jsb2JJdGVtLmNwcCBcCiAgICAg
cGxhdGZvcm0vdGV4dC9CYXNlNjQuY3BwIFwKICAgICBwbGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0
LmNwcCBcCiAgICAgcGxhdGZvcm0vQ29udGVudFR5cGUuY3BwIFwKQEAgLTE1NjQsNiArMTU2NSw3
IEBAIEhFQURFUlMgKz0gXAogICAgIHBsYXRmb3JtL2FuaW1hdGlvbi9BbmltYXRpb24uaCBcCiAg
ICAgcGxhdGZvcm0vYW5pbWF0aW9uL0FuaW1hdGlvbkxpc3QuaCBcCiAgICAgcGxhdGZvcm0vQXJl
bmEuaCBcCisgICAgcGxhdGZvcm0vQmxvYkl0ZW0uaCBcCiAgICAgcGxhdGZvcm0vQ29udGVudFR5
cGUuaCBcCiAgICAgcGxhdGZvcm0vQ29udGV4dE1lbnUuaCBcCiAgICAgcGxhdGZvcm0vQ3Jvc3NU
aHJlYWRDb3BpZXIuaCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCBl
Y2RhZDQ2YzVlZDJjMGE5YjY1YWY5NmY4OTcxZjRlOGMyMTk5MjhhLi4zZjA4ZmYxNzY1NGFhM2Jm
OTc4OGY5OGRmMTA5MjA1ZWE0ZmRiNjBkIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUudmNw
cm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2oKQEAgLTIyMzY5LDYgKzIyMzY5LDE0IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8
RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXEJsb2JJdGVtLmNwcCINCisJCQkJ
Pg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3Jt
XEJsb2JJdGVtLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRp
dmVQYXRoPSIuLlxwbGF0Zm9ybVxDb250ZW50VHlwZS5jcHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+
DQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2og
Yi9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA0ZGQ2ZDg1
MzcxMmJmMjVmNmY2MDdiMDgzMjQyMmNkZWQ0YjBiNGRlLi5lOTlkM2Y4OWNmMjE1YjgyOGEwNjEy
ODlmZTVlMTA3YmVmODk2YzQ0IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagorKysgYi9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagpAQCAtMjI3OSw2ICsyMjc5LDggQEAKIAkJODk1MjUzREQxMTZDNEVGNTAwQ0FCRjAw
IC8qIEZpbGVTdHJlYW1Qcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gODk1MjUzREIxMTZDNEVGNTAwQ0FCRjAwIC8qIEZpbGVTdHJlYW1Qcm94eS5o
ICovOyB9OwogCQk4OTUyNTNERjExNkM0RjA2MDBDQUJGMDAgLyogRmlsZVRocmVhZFRhc2suaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg5NTI1M0RFMTE2
QzRGMDYwMENBQkYwMCAvKiBGaWxlVGhyZWFkVGFzay5oICovOyB9OwogCQk4RkFDNzc0RDExOTg3
MkNCMDAxNUFFOTQgLyogSlNNYWluVGhyZWFkRXhlY1N0YXRlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDhGOTM0RDg0MTE4OUYxRUUwMDUwOEQ1RCAv
KiBKU01haW5UaHJlYWRFeGVjU3RhdGUuY3BwICovOyB9OworCQk4OTg4RTEwRTExQTM1MDhCMDBE
QjczMkUgLyogQmxvYkl0ZW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gODk4OEUxMEMxMUEzNTA4QjAwREI3MzJFIC8qIEJsb2JJdGVtLmNwcCAqLzsg
fTsKKwkJODk4OEUxMEYxMUEzNTA4QjAwREI3MzJFIC8qIEJsb2JJdGVtLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4OTg4RTEwRDExQTM1MDhCMDBEQjcz
MkUgLyogQmxvYkl0ZW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk5MzAyQjBCRDBENzlGODI5MDBDN0VFODMgLyogUGFnZUdyb3VwLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMDJCMEJDMEQ3OUY4
MjkwMEM3RUU4MyAvKiBQYWdlR3JvdXAuY3BwICovOyB9OwogCQk5MzAyQjBCRjBENzlGODJDMDBD
N0VFODMgLyogUGFnZUdyb3VwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5MzAyQjBCRTBENzlGODJDMDBDN0VFODMgLyogUGFnZUdyb3VwLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTMwNUIyNEQwOThG
MUI2QjAwQzI4ODU1IC8qIFRpbWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5MzA1QjI0QzA5OEYxQjZCMDBDMjg4NTUgLyogVGltZXIuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNzg4NSw2ICs3ODg3
LDggQEAKIAkJODk1MjUzREUxMTZDNEYwNjAwQ0FCRjAwIC8qIEZpbGVUaHJlYWRUYXNrLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbGVUaHJlYWRUYXNrLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCThGOTM0RDgzMTE4OUYxRUUwMDUwOEQ1RCAvKiBKU01haW5U
aHJlYWRFeGVjU3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNNYWlu
VGhyZWFkRXhlY1N0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCThGOTM0RDg0
MTE4OUYxRUUwMDUwOEQ1RCAvKiBKU01haW5UaHJlYWRFeGVjU3RhdGUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNNYWluVGhyZWFkRXhlY1N0YXRlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODk4OEUxMEMxMUEzNTA4QjAwREI3MzJFIC8qIEJs
b2JJdGVtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJsb2JJdGVt
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODk4OEUxMEQxMUEzNTA4QjAwREI3
MzJFIC8qIEJsb2JJdGVtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJsb2JJ
dGVtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzMDJCMEJDMEQ3OUY4MjkwMEM3
RUU4MyAvKiBQYWdlR3JvdXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gUGFnZUdyb3VwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMwMkIwQkUw
RDc5RjgyQzAwQzdFRTgzIC8qIFBhZ2VHcm91cC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBQYWdlR3JvdXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMwNUIy
NEMwOThGMUI2QjAwQzI4ODU1IC8qIFRpbWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFRpbWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNTg1Niw2ICsx
NTg2MCw4IEBACiAJCQkJQkNGQjJGNzQwOTdBMkUxQTAwQkE3MDNEIC8qIEFyZW5hLmNwcCAqLywK
IAkJCQlCQ0ZCMkY3NTA5N0EyRTFBMDBCQTcwM0QgLyogQXJlbmEuaCAqLywKIAkJCQk1MUUxRUNC
MTBDOTFDNTU2MDBEQzI1NUIgLyogQXV0b2RyYWluZWRQb29sLmggKi8sCisJCQkJODk4OEUxMEMx
MUEzNTA4QjAwREI3MzJFIC8qIEJsb2JJdGVtLmNwcCAqLywKKwkJCQk4OTg4RTEwRDExQTM1MDhC
MDBEQjczMkUgLyogQmxvYkl0ZW0uaCAqLywKIAkJCQlCQ0M4Q0ZDQTA5ODZDRDI0MDAxNDBCRjIg
LyogQ29sb3JEYXRhLmdwZXJmICovLAogCQkJCTQxRDAxNUM5MEY0QjVDNzEwMDRBNjYyRiAvKiBD
b250ZW50VHlwZS5jcHAgKi8sCiAJCQkJNDFEMDE1QzgwRjRCNUM3MTAwNEE2NjJGIC8qIENvbnRl
bnRUeXBlLmggKi8sCkBAIC0xNjg5Myw2ICsxNjg5OSw3IEBACiAJCQkJQkM1RUI5MjAwRTgyMDQw
ODAwQjI1OTY1IC8qIEJpbmRpbmdVUkkuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4OTk0MzI4MEI0
MjMzODgwMEQ3QzgwMiAvKiBCaXRtYXBJbWFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkVBRkFG
MEYxMEUyQUYyRDAwN0VEM0Q2IC8qIEJsb2IuaCBpbiBIZWFkZXJzICovLAorCQkJCTg5ODhFMTBG
MTFBMzUwOEIwMERCNzMyRSAvKiBCbG9iSXRlbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNGMTk5
QkUwODI0NUU1OTAwMUU5QUJDIC8qIEJsb2NrRXhjZXB0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkM1RUI1RTEwRTgxQkU4NzAwQjI1OTY1IC8qIEJvcmRlckRhdGEuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDNUVCNURCMEU4MUI3RUEwMEIyNTk2NSAvKiBCb3JkZXJWYWx1ZS5oIGluIEhlYWRl
cnMgKi8sCkBAIC0xOTcyNCw2ICsxOTczMSw3IEBACiAJCQkJQkM1RUI5MUYwRTgyMDQwODAwQjI1
OTY1IC8qIEJpbmRpbmdVUkkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTg5OTQzMjkwQjQyMzM4
ODAwRDdDODAyIC8qIEJpdG1hcEltYWdlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJFQUZBRjBF
MTBFMkFGMkQwMDdFRDNENiAvKiBCbG9iLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTg5ODhFMTBF
MTFBMzUwOEIwMERCNzMyRSAvKiBCbG9iSXRlbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5M0Yx
OUFFMTA4MjQ1RTU5MDAxRTlBQkMgLyogQmxvY2tFeGNlcHRpb25zLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJQkNFQTQ4NTQwOTdEOTMwMjAwOTRDOUU0IC8qIGJyZWFrX2xpbmVzLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTkzMzA5RERBMDk5RTY0OTIwMDU2RTU4MSAvKiBCcmVha0Jsb2NrcXVvdGVD
b21tYW5kLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0Jsb2Iu
Y3BwIGIvV2ViQ29yZS9odG1sL0Jsb2IuY3BwCmluZGV4IDgzYmJkYzBjNTI2NDg0NTQyNjg4MTky
NjIxNjg0YjYyODIwMjRiZjQuLjA1NDZmMWMzYzA4ODJkYTIyMDhhOWU2YTBhNzYyZGI0MzU5YmVl
NGEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9CbG9iLmNwcAorKysgYi9XZWJDb3JlL2h0bWwv
QmxvYi5jcHAKQEAgLTMxLDg4ICszMSw2NSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIkJsb2IuaCIKIAorI2luY2x1ZGUgIkJsb2JJdGVtLmgiCiAjaW5jbHVkZSAiRmlsZVN5c3Rl
bS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLWNv
bnN0IGludCBCbG9iOjp0b0VuZE9mRmlsZSA9IC0xOwotY29uc3QgZG91YmxlIEJsb2I6OmRvTm90
Q2hlY2tGaWxlQ2hhbmdlID0gMDsKLSNlbmRpZgotCiBCbG9iOjpCbG9iKGNvbnN0IFN0cmluZyYg
cGF0aCkKLSAgICA6IG1fcGF0aChwYXRoKQotI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgICwg
bV9zdGFydCgwKQotICAgICwgbV9sZW5ndGgodG9FbmRPZkZpbGUpCi0gICAgLCBtX3NuYXBzaG90
Q2FwdHVyZWQoZmFsc2UpCi0gICAgLCBtX3NuYXBzaG90U2l6ZSgwKQotICAgICwgbV9zbmFwc2hv
dE1vZGlmaWNhdGlvblRpbWUoZG9Ob3RDaGVja0ZpbGVDaGFuZ2UpCi0jZW5kaWYKLXsKLX0KLQot
I2lmIEVOQUJMRShCTE9CX1NMSUNFKQotQmxvYjo6QmxvYihjb25zdCBTdHJpbmcmIHBhdGgsIGxv
bmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCwgbG9uZyBsb25nIHNuYXBzaG90U2l6ZSwg
ZG91YmxlIHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSkKLSAgICA6IG1fcGF0aChwYXRoKQotICAg
ICwgbV9zdGFydChzdGFydCkKLSAgICAsIG1fbGVuZ3RoKGxlbmd0aCkKLSAgICAsIG1fc25hcHNo
b3RDYXB0dXJlZCh0cnVlKQotICAgICwgbV9zbmFwc2hvdFNpemUoc25hcHNob3RTaXplKQotICAg
ICwgbV9zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUoc25hcHNob3RNb2RpZmljYXRpb25UaW1lKQog
ewotICAgIEFTU0VSVChzdGFydCA+PSAwICYmIGxlbmd0aCA+PSAwICYmIHN0YXJ0ICsgbGVuZ3Ro
IDw9IHNuYXBzaG90U2l6ZSAmJiBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUpOworICAgIC8vIE5v
dGU6IHRoaXMgZG9lc24ndCBpbml0aWFsaXplIHRoZSB0eXBlIHVubGlrZSBGaWxlKHBhdGgpLgor
ICAgIGFwcGVuZChGaWxlQmxvYkl0ZW06OmNyZWF0ZShwYXRoKSk7CiB9Ci0jZW5kaWYKIAogdW5z
aWduZWQgbG9uZyBsb25nIEJsb2I6OnNpemUoKSBjb25zdAogewogICAgIC8vIEZJWE1FOiBKYXZh
U2NyaXB0IGNhbm5vdCByZXByZXNlbnQgc2l6ZXMgYXMgbGFyZ2UgYXMgdW5zaWduZWQgbG9uZyBs
b25nLCB3ZSBuZWVkIHRvCiAgICAgLy8gY29tZSB1cCB3aXRoIGFuIGV4Y2VwdGlvbiB0byB0aHJv
dyBpZiBmaWxlIHNpemUgaXMgbm90IHJlcHJlc2V0YWJsZS4KLSNpZiBFTkFCTEUoQkxPQl9TTElD
RSkKLSAgICBpZiAobV9zbmFwc2hvdENhcHR1cmVkKQotICAgICAgICByZXR1cm4gbV9sZW5ndGg7
Ci0jZW5kaWYKLSAgICBsb25nIGxvbmcgc2l6ZTsKLSAgICBpZiAoIWdldEZpbGVTaXplKG1fcGF0
aCwgc2l6ZSkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNp
Z25lZCBsb25nIGxvbmc+KHNpemUpOworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplID0gMDsK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1faXRlbXMuc2l6ZSgpOyArK2kpCisgICAgICAg
IHNpemUgKz0gbV9pdGVtc1tpXS0+c2l6ZSgpOworICAgIHJldHVybiBzaXplOworfQorCitjb25z
dCBTdHJpbmcmIEJsb2I6OnBhdGgoKSBjb25zdAoreworICAgIEFTU0VSVChtX2l0ZW1zLnNpemUo
KSA9PSAxICYmIG1faXRlbXNbMF0tPnRvRmlsZUJsb2JJdGVtKCkpOworICAgIHJldHVybiBtX2l0
ZW1zWzBdLT50b0ZpbGVCbG9iSXRlbSgpLT5wYXRoKCk7Cit9CisKK3ZvaWQgQmxvYjo6YXBwZW5k
KFBhc3NSZWZQdHI8QmxvYkl0ZW0+IGl0ZW0pCit7CisgICAgbV9pdGVtcy5hcHBlbmQoaXRlbSk7
CiB9CiAKICNpZiBFTkFCTEUoQkxPQl9TTElDRSkKIFBhc3NSZWZQdHI8QmxvYj4gQmxvYjo6c2xp
Y2UobG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoKSBjb25zdAogewotICAgIC8vIFdo
ZW4gd2Ugc2xpY2UgYSBmaWxlIGZvciB0aGUgZmlyc3QgdGltZSwgd2Ugb2J0YWluIGEgc25hcHNo
b3Qgb2YgdGhlIGZpbGUgYnkgY2FwdHVyaW5nIGl0cyBjdXJyZW50IHNpemUgYW5kIG1vZGlmaWNh
dGlvbiB0aW1lLgotICAgIC8vIFRoZSBtb2RpZmljYXRpb24gdGltZSB3aWxsIGJlIHVzZWQgdG8g
dmVyaWZ5IGlmIHRoZSBmaWxlIGhhcyBiZWVuIGNoYW5nZWQgb3Igbm90LCB3aGVuIHRoZSB1bmRl
cmx5aW5nIGRhdGEgYXJlIGFjY2Vzc2VkLgotICAgIGxvbmcgbG9uZyBzbmFwc2hvdFNpemU7Ci0g
ICAgZG91YmxlIHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZTsKLSAgICBpZiAobV9zbmFwc2hvdENh
cHR1cmVkKSB7Ci0gICAgICAgIHNuYXBzaG90U2l6ZSA9IG1fc25hcHNob3RTaXplOwotICAgICAg
ICBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUgPSBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZTsK
LSAgICB9IGVsc2UgewotICAgICAgICAvLyBJZiB3ZSBmYWlsIHRvIHJldHJpZXZlIHRoZSBzaXpl
IG9yIG1vZGlmaWNhdGlvbiB0aW1lLCBwcm9iYWJseSBkdWUgdG8gdGhhdCB0aGUgZmlsZSBoYXMg
YmVlbiBkZWxldGVkLCBhbiBlbXB0eSBibG9iIHdpbGwgYmUgcmV0dXJuZWQuCi0gICAgICAgIHRp
bWVfdCBtb2RpZmljYXRpb25UaW1lOwotICAgICAgICBpZiAoIWdldEZpbGVTaXplKG1fcGF0aCwg
c25hcHNob3RTaXplKSB8fCAhZ2V0RmlsZU1vZGlmaWNhdGlvblRpbWUobV9wYXRoLCBtb2RpZmlj
YXRpb25UaW1lKSkgewotICAgICAgICAgICAgc25hcHNob3RTaXplID0gMDsKLSAgICAgICAgICAg
IHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSA9IDA7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgc25hcHNob3RNb2RpZmljYXRpb25UaW1lID0gbW9kaWZpY2F0aW9uVGltZTsKLSAgICB9Ci0K
LSAgICAvLyBDbGFtcCB0aGUgcmFuZ2UgaWYgaXQgZXhjZWVkcyB0aGUgc2l6ZSBsaW1pdC4KICAg
ICBpZiAoc3RhcnQgPCAwKQogICAgICAgICBzdGFydCA9IDA7CiAgICAgaWYgKGxlbmd0aCA8IDAp
CiAgICAgICAgIGxlbmd0aCA9IDA7CiAKLSAgICBpZiAoc3RhcnQgPiBzbmFwc2hvdFNpemUpIHsK
KyAgICAvLyBDbGFtcCB0aGUgcmFuZ2UgaWYgaXQgZXhjZWVkcyB0aGUgc2l6ZSBsaW1pdC4KKyAg
ICB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxTaXplID0gc2l6ZSgpOworICAgIGlmIChzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KHN0YXJ0KSA+IHRvdGFsU2l6ZSkgewogICAgICAgICBz
dGFydCA9IDA7CiAgICAgICAgIGxlbmd0aCA9IDA7Ci0gICAgfSBlbHNlIGlmIChzdGFydCArIGxl
bmd0aCA+IHNuYXBzaG90U2l6ZSkKLSAgICAgICAgbGVuZ3RoID0gc25hcHNob3RTaXplIC0gc3Rh
cnQ7CisgICAgfSBlbHNlIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KHN0YXJ0
ICsgbGVuZ3RoKSA+IHRvdGFsU2l6ZSkKKyAgICAgICAgbGVuZ3RoID0gdG90YWxTaXplIC0gc3Rh
cnQ7CiAKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJsb2IobV9wYXRoLCBtX3N0YXJ0ICsgc3Rh
cnQsIGxlbmd0aCwgc25hcHNob3RTaXplLCBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUpKTsKKyAg
ICBzaXplX3QgaSA9IDA7CisgICAgUmVmUHRyPEJsb2I+IGJsb2IgPSBCbG9iOjpjcmVhdGUoKTsK
KyAgICBmb3IgKDsgaSA8IG1faXRlbXMuc2l6ZSgpICYmIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxv
bmcgbG9uZz4oc3RhcnQpID49IG1faXRlbXNbaV0tPnNpemUoKTsgKytpKQorICAgICAgICBzdGFy
dCAtPSBtX2l0ZW1zW2ldLT5zaXplKCk7CisgICAgZm9yICg7IGxlbmd0aCA+IDAgJiYgaSA8IG1f
aXRlbXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgYmxvYi0+bV9pdGVtcy5hcHBlbmQobV9pdGVt
c1tpXS0+c2xpY2Uoc3RhcnQsIGxlbmd0aCkpOworICAgICAgICBsZW5ndGggLT0gYmxvYi0+bV9p
dGVtcy5sYXN0KCktPnNpemUoKTsKKyAgICAgICAgc3RhcnQgPSAwOworICAgIH0KKyAgICByZXR1
cm4gYmxvYi5yZWxlYXNlKCk7CiB9Ci0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoQkxPQl9TTElD
RSkKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0Js
b2IuaCBiL1dlYkNvcmUvaHRtbC9CbG9iLmgKaW5kZXggZThiNWYzZmRmMDY5YTJiNDg3NmVkMTZh
YjgxYjIyZjBmZjAzODk3MC4uMzkxNzdiNTFlZTlkMDc4NjgzZjIwMmE2NTFkZjU4MjM4ZjI3NDk1
NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0Jsb2IuaAorKysgYi9XZWJDb3JlL2h0bWwvQmxv
Yi5oCkBAIC0zMSwyMSArMzEsMjQgQEAKICNpZm5kZWYgQmxvYl9oCiAjZGVmaW5lIEJsb2JfaAog
Ci0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkJsb2JJdGVtLmgiCiAjaW5j
bHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlIDx0aW1lLmg+CiAjaW5jbHVkZSA8d3Rm
L1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBCbG9iIDogcHVibGlj
IFJlZkNvdW50ZWQ8QmxvYj4gewogcHVibGljOgotI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAg
IHN0YXRpYyBjb25zdCBpbnQgdG9FbmRPZkZpbGU7Ci0gICAgc3RhdGljIGNvbnN0IGRvdWJsZSBk
b05vdENoZWNrRmlsZUNoYW5nZTsKLSNlbmRpZgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJsb2I+
IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJsb2IoKSk7Cisg
ICAgfQogCisgICAgLy8gRklYTUU6IERlcHJlY2F0ZWQgbWV0aG9kLiAgVGhpcyBpcyBjYWxsZWQg
b25seSBmcm9tCisgICAgLy8gYmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcCBh
bmQgdGhlIHVzYWdlIGluIGl0IHdpbGwgYmVjb21lIGludmFsaWQgb25jZQorICAgIC8vIEJsb2JC
dWlsZGVyIGlzIGludHJvZHVjZWQuCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8QmxvYj4gY3JlYXRl
KGNvbnN0IFN0cmluZyYgcGF0aCkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
QmxvYihwYXRoKSk7CkBAIC01Myw0NyArNTYsMjggQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB+
QmxvYigpIHsgfQogCisgICAgdW5zaWduZWQgbG9uZyBsb25nIHNpemUoKSBjb25zdDsKKyAgICBj
b25zdCBTdHJpbmcmIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KICAgICB2aXJ0dWFs
IGJvb2wgaXNGaWxlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAotI2lmIEVOQUJMRShCTE9C
X1NMSUNFKQotICAgIFBhc3NSZWZQdHI8QmxvYj4gc2xpY2UobG9uZyBsb25nIHN0YXJ0LCBsb25n
IGxvbmcgbGVuZ3RoKSBjb25zdDsKLSNlbmRpZgotCi0gICAgY29uc3QgU3RyaW5nJiBwYXRoKCkg
Y29uc3QgeyByZXR1cm4gbV9wYXRoOyB9Ci0gICAgdW5zaWduZWQgbG9uZyBsb25nIHNpemUoKSBj
b25zdDsKLSNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAgICBsb25nIGxvbmcgc3RhcnQoKSBjb25z
dCB7IHJldHVybiBtX3N0YXJ0OyB9Ci0gICAgbG9uZyBsb25nIGxlbmd0aCgpIGNvbnN0IHsgcmV0
dXJuIG1fbGVuZ3RoOyB9Ci0gICAgZG91YmxlIG1vZGlmaWNhdGlvblRpbWUoKSBjb25zdCB7IHJl
dHVybiBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZTsgfQotI2VuZGlmCisgICAgLy8gRklYTUU6
IERlcHJlY2F0ZWQgbWV0aG9kLgorICAgIGNvbnN0IFN0cmluZyYgcGF0aCgpIGNvbnN0OwogCi1w
cm90ZWN0ZWQ6Ci0gICAgQmxvYihjb25zdCBTdHJpbmcmIHBhdGgpOworICAgIHZvaWQgYXBwZW5k
KFBhc3NSZWZQdHI8QmxvYkl0ZW0+KTsKKyAgICBjb25zdCBCbG9iSXRlbUxpc3QmIGl0ZW1zKCkg
Y29uc3QgeyByZXR1cm4gbV9pdGVtczsgfQogCi1wcml2YXRlOgogI2lmIEVOQUJMRShCTE9CX1NM
SUNFKQotICAgIEJsb2IoY29uc3QgU3RyaW5nJiBwYXRoLCBsb25nIGxvbmcgc3RhcnQsIGxvbmcg
bG9uZyBsZW5ndGgsIGxvbmcgbG9uZyBzbmFwc2hvdFNpemUsIGRvdWJsZSBzbmFwc2hvdE1vZGlm
aWNhdGlvblRpbWUpOworICAgIFBhc3NSZWZQdHI8QmxvYj4gc2xpY2UobG9uZyBsb25nIHN0YXJ0
LCBsb25nIGxvbmcgbGVuZ3RoKSBjb25zdDsKICNlbmRpZgogCi0gICAgLy8gVGhlIHVuZGVybHlp
bmcgcGF0aCBvZiB0aGUgZmlsZS1iYXNlZCBibG9iLiAKLSAgICBTdHJpbmcgbV9wYXRoOwotCi0j
aWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgLy8gVGhlIHN0YXJ0aW5nIHBvc2l0aW9uIG9mIHRo
ZSBmaWxlLWJhc2VkIGJsb2IuCi0gICAgbG9uZyBsb25nIG1fc3RhcnQ7Ci0KLSAgICAvLyBUaGUg
bGVuZ3RoIG9mIHRoZSBmaWxlLWJhc2VkIGJsb2IuIFRoZSB2YWx1ZSBvZiAtMSBtZWFucyB0byB0
aGUgZW5kIG9mIHRoZSBmaWxlLgotICAgIGxvbmcgbG9uZyBtX2xlbmd0aDsKLQotICAgIC8vIEEg
ZmxhZyB0byB0ZWxsIGlmIGEgc25hcHNob3QgaGFzIGJlZW4gY2FwdHVyZWQuCi0gICAgYm9vbCBt
X3NuYXBzaG90Q2FwdHVyZWQ7Citwcm90ZWN0ZWQ6CisgICAgQmxvYigpIHsgfQogCi0gICAgLy8g
VGhlIHNpemUgb2YgdGhlIGZpbGUgd2hlbiBhIHNuYXBzaG90IGlzIGNhcHR1cmVkLiBJdCBjYW4g
YmUgMCBpZiB0aGUgZmlsZSBpcyBlbXB0eS4KLSAgICBsb25nIGxvbmcgbV9zbmFwc2hvdFNpemU7
CisgICAgLy8gRklYTUU6IERlcHJlY2F0ZWQgY29uc3RydWN0b3IuICBTZWUgYWxzbyB0aGUgY29t
bWVudCBmb3IgQmxvYjo6Y3JlYXRlKHBhdGgpLgorICAgIEJsb2IoY29uc3QgU3RyaW5nJiBwYXRo
KTsKIAotICAgIC8vIFRoZSBsYXN0IG1vZGlmaWNhdGlvbiB0aW1lIG9mIHRoZSBmaWxlIHdoZW4g
YSBzbmFwc2hvdCBpcyBjYXB0dXJlZC4gVGhlIHZhbHVlIG9mIDAgYWxzbyBtZWFucyB0aGF0IHRo
ZSBzbmFwc2hvdCBpcyBub3QgY2FwdHVyZWQuCi0gICAgZG91YmxlIG1fc25hcHNob3RNb2RpZmlj
YXRpb25UaW1lOwotI2VuZGlmCisgICAgQmxvYkl0ZW1MaXN0IG1faXRlbXM7CisgICAgU3RyaW5n
IG1fdHlwZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvaHRtbC9GaWxlLmNwcCBiL1dlYkNvcmUvaHRtbC9GaWxlLmNwcAppbmRleCA5N2ZkYzQ1Nzhk
NzRiMjI1ZTU5NDZmNGQ2YWVmMjU2NTI1NDQzYWU0Li4yYzljZTUzYjgzY2IwZGY3OWE4NTk1MjJk
YzkxNmYyNTViZDg0Y2MzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvRmlsZS5jcHAKKysrIGIv
V2ViQ29yZS9odG1sL0ZpbGUuY3BwCkBAIC0zMywxMiArMzMsMTcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBGaWxlOjpGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkKICAgICA6IEJsb2IocGF0aCkK
LSAgICAsIG1fbmFtZShwYXRoR2V0RmlsZU5hbWUocGF0aCkpCiB7CiAgICAgLy8gV2UgZG9uJ3Qg
dXNlIE1JTUVUeXBlUmVnaXN0cnk6OmdldE1JTUVUeXBlRm9yUGF0aCgpIGJlY2F1c2UgaXQgcmV0
dXJucyAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIiB1cG9uIGZhaWx1cmUuCi0gICAgaW50IGlu
ZGV4ID0gbV9uYW1lLnJldmVyc2VGaW5kKCcuJyk7CisgICAgY29uc3QgU3RyaW5nJiBmaWxlTmFt
ZSA9IG5hbWUoKTsKKyAgICBpbnQgaW5kZXggPSBmaWxlTmFtZS5yZXZlcnNlRmluZCgnLicpOwog
ICAgIGlmIChpbmRleCAhPSAtMSkKLSAgICAgICAgbV90eXBlID0gTUlNRVR5cGVSZWdpc3RyeTo6
Z2V0TUlNRVR5cGVGb3JFeHRlbnNpb24obV9uYW1lLnN1YnN0cmluZyhpbmRleCArIDEpKTsKKyAg
ICAgICAgbV90eXBlID0gTUlNRVR5cGVSZWdpc3RyeTo6Z2V0TUlNRVR5cGVGb3JFeHRlbnNpb24o
ZmlsZU5hbWUuc3Vic3RyaW5nKGluZGV4ICsgMSkpOworfQorCitjb25zdCBTdHJpbmcmIEZpbGU6
Om5hbWUoKSBjb25zdAoreworICAgIHJldHVybiBpdGVtcygpLmF0KDApLT50b0ZpbGVCbG9iSXRl
bSgpLT5uYW1lKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvaHRtbC9GaWxlLmggYi9XZWJDb3JlL2h0bWwvRmlsZS5oCmluZGV4IDA2NWRkODZhN2Ix
ZWJmNzdmYjQwNjQ2ZjljNmU4NzA0NjlkN2ViMDkuLjU4MmRiMjg1MDNiZmZmMmI5NThlM2Q1MjU1
ZWY3YWJlOWE2MDU2OWEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9GaWxlLmgKKysrIGIvV2Vi
Q29yZS9odG1sL0ZpbGUuaApAQCAtNDEsMTggKzQxLDE0IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1
YWwgYm9vbCBpc0ZpbGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKLSAgICBjb25zdCBTdHJp
bmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KLSAgICBjb25zdCBTdHJpbmcmIHR5
cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKyAgICBjb25zdCBTdHJpbmcmIG5hbWUoKSBj
b25zdDsKIAogICAgIC8vIEZJWE1FOiBvYnNvbGV0ZSBhdHRyaWJ1dGVzLiBUbyBiZSByZW1vdmVk
LgotICAgIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0K
KyAgICBjb25zdCBTdHJpbmcmIGZpbGVOYW1lKCkgY29uc3QgeyByZXR1cm4gbmFtZSgpOyB9CiAg
ICAgdW5zaWduZWQgbG9uZyBsb25nIGZpbGVTaXplKCkgY29uc3QgeyByZXR1cm4gc2l6ZSgpOyB9
CiAKIHByaXZhdGU6CiAgICAgRmlsZShjb25zdCBTdHJpbmcmIHBhdGgpOwotCi0gICAgU3RyaW5n
IG1fbmFtZTsKLSAgICBTdHJpbmcgbV90eXBlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0ZpbGVSZWFkZXIuY3BwIGIvV2ViQ29yZS9odG1s
L0ZpbGVSZWFkZXIuY3BwCmluZGV4IDM0NDIzNDIyNzU4MTI3YmVkNzczODcyYzRmZjMxZmEwMWRm
YWM0ZTQuLjJlMDIwYzExMzUwNWNjYjZmNDQzYThkMjU2YjBlOWExYmFiMDgwMzQgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaHRtbC9GaWxlUmVhZGVyLmNwcAorKysgYi9XZWJDb3JlL2h0bWwvRmlsZVJl
YWRlci5jcHAKQEAgLTg1LDYgKzg1LDcgQEAgdm9pZCBGaWxlUmVhZGVyOjpzdG9wKCkKIAogdm9p
ZCBGaWxlUmVhZGVyOjpyZWFkQXNCaW5hcnlTdHJpbmcoQmxvYiogZmlsZUJsb2IpCiB7CisgICAg
Ly8gRklYTUU6IG5lZWRzIHRvIGhhbmRsZSBub24tZmlsZSBibG9icy4KICAgICBMT0coRmlsZUFQ
SSwgIkZpbGVSZWFkZXI6IHJlYWRpbmcgYXMgYmluYXJ5OiAlc1xuIiwgZmlsZUJsb2ItPnBhdGgo
KS51dGY4KCkuZGF0YSgpKTsKIAogICAgIHJlYWRJbnRlcm5hbChmaWxlQmxvYiwgUmVhZEZpbGVB
c0JpbmFyeVN0cmluZyk7CkBAIC05Miw2ICs5Myw3IEBAIHZvaWQgRmlsZVJlYWRlcjo6cmVhZEFz
QmluYXJ5U3RyaW5nKEJsb2IqIGZpbGVCbG9iKQogCiB2b2lkIEZpbGVSZWFkZXI6OnJlYWRBc1Rl
eHQoQmxvYiogZmlsZUJsb2IsIGNvbnN0IFN0cmluZyYgZW5jb2RpbmcpCiB7CisgICAgLy8gRklY
TUU6IG5lZWRzIHRvIGhhbmRsZSBub24tZmlsZSBibG9icy4KICAgICBMT0coRmlsZUFQSSwgIkZp
bGVSZWFkZXI6IHJlYWRpbmcgYXMgdGV4dDogJXNcbiIsIGZpbGVCbG9iLT5wYXRoKCkudXRmOCgp
LmRhdGEoKSk7CiAKICAgICBpZiAoIWVuY29kaW5nLmlzRW1wdHkoKSkKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvaHRtbC9GaWxlU3RyZWFtLmNwcCBiL1dlYkNvcmUvaHRtbC9GaWxlU3RyZWFtLmNwcApp
bmRleCA5YTA2ZWVkOWZkNjZmOGUzN2YzN2Y5ZGQ1MDQzNWI1NmU5Y2M2MTQxLi5mODU5YjYzYTFj
MWIzNGMzNmU3NGMwOTEyNGZhMDkxM2Y2YWY2NzA0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwv
RmlsZVN0cmVhbS5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0ZpbGVTdHJlYW0uY3BwCkBAIC03Miw0
OCArNzIsNTMgQEAgdm9pZCBGaWxlU3RyZWFtOjpvcGVuRm9yUmVhZChCbG9iKiBibG9iKQogICAg
IGlmIChpc0hhbmRsZVZhbGlkKG1faGFuZGxlKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgLy8g
RklYTUU6IE5lZWQgdG8gaGFuZGxlIG11bHRpcGxlIGl0ZW1zIHRoYXQgbWF5IGluY2x1ZGUgbm9u
LWZpbGUgb25lcyB3aGVuIEJsb2JCdWlsZGVyIGlzIGludHJvZHVjZWQuCisgICAgQVNTRVJUKGJs
b2ItPml0ZW1zKCkuc2l6ZSgpID49IDEpOworICAgIGNvbnN0IEZpbGVCbG9iSXRlbSogZmlsZUl0
ZW0gPSBibG9iLT5pdGVtcygpLmF0KDApLT50b0ZpbGVCbG9iSXRlbSgpOworICAgIGlmICghZmls
ZUl0ZW0pIHsKKyAgICAgICAgQVNTRVJUKGZhbHNlKTsKKyAgICAgICAgbV9jbGllbnQtPmRpZEZh
aWwoTk9UX1JFQURBQkxFX0VSUik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICAvLyBD
aGVjayBpZiB0aGUgZmlsZSBleGlzdHMgYnkgcXVlcnlpbmcgaXRzIG1vZGlmaWNhdGlvbiB0aW1l
LiBXZSBjaG9vc2Ugbm90IHRvIGNhbGwgZmlsZUV4aXN0cygpIGluIG9yZGVyIHRvIHNhdmUgYW4K
ICAgICAvLyBleHRyYSBmaWxlIHN5c3RlbSBjYWxsIHdoZW4gdGhlIG1vZGlmaWNhdGlvbiB0aW1l
IGlzIG5lZWRlZCB0byBjaGVjayB0aGUgdmFsaWRpdHkgb2YgdGhlIHNsaWNlZCBmaWxlIGJsb2Iu
CiAgICAgLy8gUGVyIHRoZSBzcGVjLCB3ZSBuZWVkIHRvIHJldHVybiBkaWZmZXJlbnQgZXJyb3Ig
Y29kZXMgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIG5vbi1leGlzdGVudCBmaWxlIGFuZCBwZXJt
aXNzaW9uIGVycm9yLgogICAgIC8vIG9wZW5GaWxlKCkgY291bGQgbm90IHRlbGwgdXNlIHRoZSBm
YWlsdXJlIHJlYXNvbi4KICAgICB0aW1lX3QgY3VycmVudE1vZGlmaWNhdGlvblRpbWU7Ci0gICAg
aWYgKCFnZXRGaWxlTW9kaWZpY2F0aW9uVGltZShibG9iLT5wYXRoKCksIGN1cnJlbnRNb2RpZmlj
YXRpb25UaW1lKSkgeworICAgIGlmICghZ2V0RmlsZU1vZGlmaWNhdGlvblRpbWUoZmlsZUl0ZW0t
PnBhdGgoKSwgY3VycmVudE1vZGlmaWNhdGlvblRpbWUpKSB7CiAgICAgICAgIG1fY2xpZW50LT5k
aWRGYWlsKE5PVF9GT1VORF9FUlIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgLy8g
T3BlbiB0aGUgZmlsZSBibG9iLgotICAgIG1faGFuZGxlID0gb3BlbkZpbGUoYmxvYi0+cGF0aCgp
LCBPcGVuRm9yUmVhZCk7CisgICAgbV9oYW5kbGUgPSBvcGVuRmlsZShmaWxlSXRlbS0+cGF0aCgp
LCBPcGVuRm9yUmVhZCk7CiAgICAgaWYgKCFpc0hhbmRsZVZhbGlkKG1faGFuZGxlKSkgewogICAg
ICAgICBtX2NsaWVudC0+ZGlkRmFpbChOT1RfUkVBREFCTEVfRVJSKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAogI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgIC8vIENoZWNrIHRoZSBtb2Rp
ZmljYXRpb250IHRpbWUgZm9yIHRoZSBwb3NzaWJsZSBmaWxlIGNoYW5nZS4KLSAgICBpZiAoYmxv
Yi0+bW9kaWZpY2F0aW9uVGltZSgpICE9IEJsb2I6OmRvTm90Q2hlY2tGaWxlQ2hhbmdlICYmIHN0
YXRpY19jYXN0PHRpbWVfdD4oYmxvYi0+bW9kaWZpY2F0aW9uVGltZSgpKSAhPSBjdXJyZW50TW9k
aWZpY2F0aW9uVGltZSkgewotICAgICAgICBtX2NsaWVudC0+ZGlkRmFpbChOT1RfUkVBREFCTEVf
RVJSKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEp1bXAgdG8gdGhlIGJlZ2lu
bmluZyBwb3NpdGlvbiBpZiB0aGUgZmlsZSBoYXMgYmVlbiBzbGljZWQuCi0gICAgaWYgKGJsb2It
PnN0YXJ0KCkgPiAwKSB7Ci0gICAgICAgIGlmICghc2Vla0ZpbGUobV9oYW5kbGUsIGJsb2ItPnN0
YXJ0KCksIFNlZWtGcm9tQmVnaW5uaW5nKSkgeworICAgIGNvbnN0IEZpbGVSYW5nZUJsb2JJdGVt
KiBmaWxlUmFuZ2VJdGVtID0gZmlsZUl0ZW0tPnRvRmlsZVJhbmdlQmxvYkl0ZW0oKTsKKyAgICBp
ZiAoZmlsZVJhbmdlSXRlbSkgeworICAgICAgICAvLyBDaGVjayB0aGUgbW9kaWZpY2F0aW9udCB0
aW1lIGZvciB0aGUgcG9zc2libGUgZmlsZSBjaGFuZ2UuCisgICAgICAgIGlmIChzdGF0aWNfY2Fz
dDx0aW1lX3Q+KGZpbGVSYW5nZUl0ZW0tPnNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSgpKSAhPSBj
dXJyZW50TW9kaWZpY2F0aW9uVGltZSkgewogICAgICAgICAgICAgbV9jbGllbnQtPmRpZEZhaWwo
Tk9UX1JFQURBQkxFX0VSUik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKworICAg
ICAgICAvLyBKdW1wIHRvIHRoZSBiZWdpbm5pbmcgcG9zaXRpb24gaWYgdGhlIGZpbGUgaGFzIGJl
ZW4gc2xpY2VkLgorICAgICAgICBpZiAoZmlsZVJhbmdlSXRlbS0+c3RhcnQoKSA+IDApIHsKKyAg
ICAgICAgICAgIGlmIChzZWVrRmlsZShtX2hhbmRsZSwgZmlsZVJhbmdlSXRlbS0+c3RhcnQoKSwg
U2Vla0Zyb21CZWdpbm5pbmcpIDwgMCkgeworICAgICAgICAgICAgICAgIG1fY2xpZW50LT5kaWRG
YWlsKE5PVF9SRUFEQUJMRV9FUlIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQogICAgIH0KICNlbmRpZgogCiAgICAgLy8gR2V0IHRoZSBzaXplLgot
I2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgIG1fdG90YWxCeXRlc1RvUmVhZCA9IGJsb2ItPmxl
bmd0aCgpOwotICAgIGlmIChtX3RvdGFsQnl0ZXNUb1JlYWQgPT0gQmxvYjo6dG9FbmRPZkZpbGUp
Ci0gICAgICAgIG1fdG90YWxCeXRlc1RvUmVhZCA9IGJsb2ItPnNpemUoKSAtIGJsb2ItPnN0YXJ0
KCk7Ci0jZWxzZQogICAgIG1fdG90YWxCeXRlc1RvUmVhZCA9IGJsb2ItPnNpemUoKTsKLSNlbmRp
ZgotCiAgICAgbV9jbGllbnQtPmRpZEdldFNpemUobV90b3RhbEJ5dGVzVG9SZWFkKTsKIH0KIApk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0Zvcm1EYXRhTGlzdC5jcHAgYi9XZWJDb3JlL2h0bWwv
Rm9ybURhdGFMaXN0LmNwcAppbmRleCAyODFjOWZlNDE4ZTFjNDgzM2JiODdmODJmNzRmMWNjNGQ3
MjJkNTdjLi4wZjYyNTk1ZWQ0MWMyMzE5YmRiNzliNTdiYmQ3Y2E5NDYyMmI4MmFhIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2h0bWwvRm9ybURhdGFMaXN0LmNwcAorKysgYi9XZWJDb3JlL2h0bWwvRm9y
bURhdGFMaXN0LmNwcApAQCAtMjgsNjQgKzI4LDIyIEBAIEZvcm1EYXRhTGlzdDo6Rm9ybURhdGFM
aXN0KGNvbnN0IFRleHRFbmNvZGluZyYgYykKIHsKIH0KIAotdm9pZCBGb3JtRGF0YUxpc3Q6OmFw
cGVuZFN0cmluZyhjb25zdCBDU3RyaW5nJiBzKQordm9pZCBGb3JtRGF0YUxpc3Q6OmFwcGVuZFN0
cmluZyhjb25zdCBTdHJpbmcmIHMpCiB7Ci0gICAgbV9saXN0LmFwcGVuZChzKTsKKyAgICBtX2l0
ZW1zLmFwcGVuZChTdHJpbmdCbG9iSXRlbTo6Y3JlYXRlKHMsIEVuZGluZ0NSTEYsIG1fZW5jb2Rp
bmcpKTsKIH0KIAotLy8gQ2hhbmdlIHBsYWluIENSIGFuZCBwbGFpbiBMRiB0byBDUkxGIHBhaXJz
Lgotc3RhdGljIENTdHJpbmcgZml4TGluZUJyZWFrcyhjb25zdCBDU3RyaW5nJiBzKQordm9pZCBG
b3JtRGF0YUxpc3Q6OmFwcGVuZFN0cmluZyhjb25zdCBDU3RyaW5nJiBzKQogewotICAgIC8vIENv
bXB1dGUgdGhlIGxlbmd0aC4KLSAgICB1bnNpZ25lZCBuZXdMZW4gPSAwOwotICAgIGNvbnN0IGNo
YXIqIHAgPSBzLmRhdGEoKTsKLSAgICB3aGlsZSAoY2hhciBjID0gKnArKykgewotICAgICAgICBp
ZiAoYyA9PSAnXHInKSB7Ci0gICAgICAgICAgICAvLyBTYWZlIHRvIGxvb2sgYWhlYWQgYmVjYXVz
ZSBvZiB0cmFpbGluZyAnXDAnLgotICAgICAgICAgICAgaWYgKCpwICE9ICdcbicpIHsKLSAgICAg
ICAgICAgICAgICAvLyBUdXJuIENSIGludG8gQ1JMRi4KLSAgICAgICAgICAgICAgICBuZXdMZW4g
Kz0gMjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChjID09ICdcbicpIHsKLSAg
ICAgICAgICAgIC8vIFR1cm4gTEYgaW50byBDUkxGLgotICAgICAgICAgICAgbmV3TGVuICs9IDI7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBMZWF2ZSBvdGhlciBjaGFyYWN0ZXJz
IGFsb25lLgotICAgICAgICAgICAgbmV3TGVuICs9IDE7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
aWYgKG5ld0xlbiA9PSBzLmxlbmd0aCgpKSB7Ci0gICAgICAgIHJldHVybiBzOwotICAgIH0KLSAg
ICAKLSAgICAvLyBNYWtlIGEgY29weSBvZiB0aGUgc3RyaW5nLgotICAgIHAgPSBzLmRhdGEoKTsK
LSAgICBjaGFyKiBxOwotICAgIENTdHJpbmcgcmVzdWx0ID0gQ1N0cmluZzo6bmV3VW5pbml0aWFs
aXplZChuZXdMZW4sIHEpOwotICAgIHdoaWxlIChjaGFyIGMgPSAqcCsrKSB7Ci0gICAgICAgIGlm
IChjID09ICdccicpIHsKLSAgICAgICAgICAgIC8vIFNhZmUgdG8gbG9vayBhaGVhZCBiZWNhdXNl
IG9mIHRyYWlsaW5nICdcMCcuCi0gICAgICAgICAgICBpZiAoKnAgIT0gJ1xuJykgewotICAgICAg
ICAgICAgICAgIC8vIFR1cm4gQ1IgaW50byBDUkxGLgotICAgICAgICAgICAgICAgICpxKysgPSAn
XHInOwotICAgICAgICAgICAgICAgICpxKysgPSAnXG4nOwotICAgICAgICAgICAgfQotICAgICAg
ICB9IGVsc2UgaWYgKGMgPT0gJ1xuJykgewotICAgICAgICAgICAgLy8gVHVybiBMRiBpbnRvIENS
TEYuCi0gICAgICAgICAgICAqcSsrID0gJ1xyJzsKLSAgICAgICAgICAgICpxKysgPSAnXG4nOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gTGVhdmUgb3RoZXIgY2hhcmFjdGVycyBh
bG9uZS4KLSAgICAgICAgICAgICpxKysgPSBjOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVy
biByZXN1bHQ7CisgICAgbV9pdGVtcy5hcHBlbmQoU3RyaW5nQmxvYkl0ZW06OmNyZWF0ZShzKSk7
CiB9CiAKLXZvaWQgRm9ybURhdGFMaXN0OjphcHBlbmRTdHJpbmcoY29uc3QgU3RyaW5nJiBzKQor
dm9pZCBGb3JtRGF0YUxpc3Q6OmFwcGVuZEJsb2IoY29uc3QgU3RyaW5nJiBrZXksIFBhc3NSZWZQ
dHI8QmxvYj4gYmxvYikKIHsKLSAgICBDU3RyaW5nIGNzdHIgPSBmaXhMaW5lQnJlYWtzKG1fZW5j
b2RpbmcuZW5jb2RlKHMuY2hhcmFjdGVycygpLCBzLmxlbmd0aCgpLCBFbnRpdGllc0ZvclVuZW5j
b2RhYmxlcykpOwotICAgIG1fbGlzdC5hcHBlbmQoY3N0cik7CisgICAgYXBwZW5kU3RyaW5nKGtl
eSk7CisgICAgY29uc3QgQmxvYkl0ZW1MaXN0JiBpdGVtcyA9IGJsb2ItPml0ZW1zKCk7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBpdGVtcy5zaXplKCk7ICsraSkKKyAgICAgICAgbV9pdGVt
cy5hcHBlbmQoaXRlbXMuYXQoaSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9odG1sL0Zvcm1EYXRhTGlzdC5oIGIvV2ViQ29yZS9odG1sL0Zvcm1EYXRhTGlzdC5o
CmluZGV4IDhlY2Y2NGVlOTNhZDUyNGY0NzkyMWYxZDgyMmY5YTA4YmEwMTNkN2MuLmY0YmI5MDUx
NTBmYWQ3OGIwMWFlNWE5NjgzZmFkOTk4NDM5MGU2YmUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRt
bC9Gb3JtRGF0YUxpc3QuaAorKysgYi9XZWJDb3JlL2h0bWwvRm9ybURhdGFMaXN0LmgKQEAgLTQ2
LDI3ICs0Niw5IEBAIHB1YmxpYzoKICAgICAgICAgYXBwZW5kU3RyaW5nKGtleSk7CiAgICAgICAg
IGFwcGVuZFN0cmluZyhTdHJpbmc6Om51bWJlcih2YWx1ZSkpOwogICAgIH0KLSAgICB2b2lkIGFw
cGVuZEJsb2IoY29uc3QgU3RyaW5nJiBrZXksIFBhc3NSZWZQdHI8QmxvYj4gYmxvYikKLSAgICB7
Ci0gICAgICAgIGFwcGVuZFN0cmluZyhrZXkpOwotICAgICAgICBtX2xpc3QuYXBwZW5kKGJsb2Ip
OwotICAgIH0KLQotICAgIGNsYXNzIEl0ZW0gewotICAgIHB1YmxpYzoKLSAgICAgICAgSXRlbSgp
IHsgfQotICAgICAgICBJdGVtKGNvbnN0IFdURjo6Q1N0cmluZyYgZGF0YSkgOiBtX2RhdGEoZGF0
YSkgeyB9Ci0gICAgICAgIEl0ZW0oUGFzc1JlZlB0cjxCbG9iPiBibG9iKSA6IG1fYmxvYihibG9i
KSB7IH0KLQotICAgICAgICBjb25zdCBXVEY6OkNTdHJpbmcmIGRhdGEoKSBjb25zdCB7IHJldHVy
biBtX2RhdGE7IH0KLSAgICAgICAgQmxvYiogYmxvYigpIGNvbnN0IHsgcmV0dXJuIG1fYmxvYi5n
ZXQoKTsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgV1RGOjpDU3RyaW5nIG1fZGF0YTsKLSAg
ICAgICAgUmVmUHRyPEJsb2I+IG1fYmxvYjsKLSAgICB9OworICAgIHZvaWQgYXBwZW5kQmxvYihj
b25zdCBTdHJpbmcmIGtleSwgUGFzc1JlZlB0cjxCbG9iPik7CiAKLSAgICBjb25zdCBWZWN0b3I8
SXRlbT4mIGxpc3QoKSBjb25zdCB7IHJldHVybiBtX2xpc3Q7IH0KKyAgICBjb25zdCBCbG9iSXRl
bUxpc3QmIGl0ZW1zKCkgY29uc3QgeyByZXR1cm4gbV9pdGVtczsgfQogICAgIGNvbnN0IFRleHRF
bmNvZGluZyYgZW5jb2RpbmcoKSBjb25zdCB7IHJldHVybiBtX2VuY29kaW5nOyB9CiAKIHByaXZh
dGU6CkBAIC03NCw3ICs1Niw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBhcHBlbmRTdHJpbmcoY29u
c3QgU3RyaW5nJik7CiAKICAgICBUZXh0RW5jb2RpbmcgbV9lbmNvZGluZzsKLSAgICBWZWN0b3I8
SXRlbT4gbV9saXN0OworICAgIEJsb2JJdGVtTGlzdCBtX2l0ZW1zOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5j
cHAgYi9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAppbmRleCBjMTk5MzNhZGI0ODMz
Y2M0MGYxNmUwZTliNjU4ZDU3YzhlNmIwZjUwLi44YjYwNmY1OTAyMTEyOTM2ODY2NjlmNTM2Yzc1
NDcyYjk1MjcyZjVmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNw
cAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcApAQCAtMjA5LDcgKzIwOSw3
IEBAIFBhc3NSZWZQdHI8Rm9ybURhdGE+IEhUTUxGb3JtRWxlbWVudDo6Y3JlYXRlRm9ybURhdGEo
KQogICAgICAgICAgICAgY29udHJvbC0+YXBwZW5kRm9ybURhdGEoKmRvbUZvcm1EYXRhLCBtX2Zv
cm1EYXRhQnVpbGRlci5pc011bHRpUGFydEZvcm0oKSk7CiAgICAgfQogCi0gICAgUmVmUHRyPEZv
cm1EYXRhPiByZXN1bHQgPSAobV9mb3JtRGF0YUJ1aWxkZXIuaXNNdWx0aVBhcnRGb3JtKCkpID8g
Rm9ybURhdGE6OmNyZWF0ZU11bHRpUGFydCgqZG9tRm9ybURhdGEsIGRvY3VtZW50KCkpIDogRm9y
bURhdGE6OmNyZWF0ZSgqZG9tRm9ybURhdGEpOworICAgIFJlZlB0cjxGb3JtRGF0YT4gcmVzdWx0
ID0gKG1fZm9ybURhdGFCdWlsZGVyLmlzTXVsdGlQYXJ0Rm9ybSgpKSA/IEZvcm1EYXRhOjpjcmVh
dGVNdWx0aVBhcnQoZG9tRm9ybURhdGEtPml0ZW1zKCksIGRvbUZvcm1EYXRhLT5lbmNvZGluZygp
LCBkb2N1bWVudCgpKSA6IEZvcm1EYXRhOjpjcmVhdGUoZG9tRm9ybURhdGEtPml0ZW1zKCksIGRv
bUZvcm1EYXRhLT5lbmNvZGluZygpKTsKIAogICAgIHJlc3VsdC0+c2V0SWRlbnRpZmllcihnZW5l
cmF0ZUZvcm1EYXRhSWRlbnRpZmllcigpKTsKICAgICByZXR1cm4gcmVzdWx0OwpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9odG1sL0hUTUxNZXRlckVsZW1lbnQuY3BwIGIvV2ViQ29yZS9odG1sL0hUTUxN
ZXRlckVsZW1lbnQuY3BwCmluZGV4IGExYjc0YjJkMGFiMGM3NWNlZGEzZDYzMjg5ODExNTRjNDhj
NzI0MTguLjAzMTYyNjcwYzYzYjc3OWRmNjA3M2I5NTYwNTRlNmJhZWFkMzUyMzggMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaHRtbC9IVE1MTWV0ZXJFbGVtZW50LmNwcAorKysgYi9XZWJDb3JlL2h0bWwv
SFRNTE1ldGVyRWxlbWVudC5jcHAKQEAgLTI0LDYgKzI0LDcgQEAKIAogI2luY2x1ZGUgIkF0dHJp
YnV0ZS5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2Rl
LmgiCiAjaW5jbHVkZSAiRm9ybURhdGFMaXN0LmgiCiAjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50
LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRN
TFByb2dyZXNzRWxlbWVudC5jcHAgYi9XZWJDb3JlL2h0bWwvSFRNTFByb2dyZXNzRWxlbWVudC5j
cHAKaW5kZXggZDI3NWViZmNmZjhkOTdiOTE2ZDU5ZDI0ZjI0MTlkYThjNTM0YWYyOS4uZjdlODZm
M2E5YWZmZWNlZGViYjkzYjkzNTM1MGRhYjg1MmFlYTZjNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9o
dG1sL0hUTUxQcm9ncmVzc0VsZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MUHJvZ3Jl
c3NFbGVtZW50LmNwcApAQCAtMjQsNiArMjQsNyBAQAogCiAjaW5jbHVkZSAiQXR0cmlidXRlLmgi
CiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNp
bmNsdWRlICJGb3JtRGF0YUxpc3QuaCIKICNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKICNp
bmNsdWRlICJIVE1MTmFtZXMuaCIKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vQmxvYkl0
ZW0uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9CbG9iSXRlbS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTBhODE4
ZTBmNmNhMjc0ZTRkZmVjMDJjYTY1NGVhMWE3YjBmNWVmNgotLS0gL2Rldi9udWxsCisrKyBiL1dl
YkNvcmUvcGxhdGZvcm0vQmxvYkl0ZW0uY3BwCkBAIC0wLDAgKzEsMzE3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkJsb2JJdGVtLmgiCisKKyNpbmNsdWRlICJGaWxlU3lzdGVtLmgi
CisjaW5jbHVkZSAiVVVJRC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiBFTkFCTEUo
QkxPQl9TTElDRSkKK3N0YXRpYyBjb25zdCBkb3VibGUgaW52YWxpZE1vZGlmaWNhdGlvblRpbWUg
PSAwOworCitkb3VibGUgZ2V0RmlsZVNuYXBzaG90TW9kaWZpY2F0aW9uVGltZShjb25zdCBTdHJp
bmcmIHBhdGgpCit7CisgICAgLy8gRklYTUU6IHN5bmNocm9uaXplZCBmaWxlIGNhbGwKKyAgICB0
aW1lX3QgbW9kaWZpY2F0aW9uVGltZTsKKyAgICBpZiAoZ2V0RmlsZU1vZGlmaWNhdGlvblRpbWUo
cGF0aCwgbW9kaWZpY2F0aW9uVGltZSkpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxkb3Vi
bGU+KG1vZGlmaWNhdGlvblRpbWUpOworICAgIHJldHVybiBpbnZhbGlkTW9kaWZpY2F0aW9uVGlt
ZTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoQkxPQl9TTElDRSkKKworLy8gRGF0YUJsb2JJdGVtIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKworY2hhciogRGF0YUJsb2JJdGVtOjpjb3B5QnVmZmVyKCkgY29uc3QKK3sKKyAgICAv
LyBGSVhNRTogUmVjb25zaWRlciBpZiB3ZSBzdGlsbCBuZWVkIGl0IG9uY2Ugd2UgY2xlYW4gdXAg
dGhlIHRyYW5zaWVudCB3cmFwcGVyIGNsYXNzIEZvcm1EYXRhRWxlbWVudDo6QmxvYkl0ZW1XcmFw
cGVyIGFuZCBpdHMgcmVsZWFzZUJ1ZmZlcigpIG1ldGhvZC4gIEl0IHVzZWQgdG8gYmUgYSBtZXJl
IFZlY3RvciBhbmQgVmVjdG9yOjpyZWxlYXNlQnVmZmVyLCBidXQgbm93IHdlIGtlZXAgdGhlIGRh
dGEgcmVmLWNvdW50ZWQgYW5kIG5lZWQgdG8gbWFrZSBhIGNvcHkgdG8gcmV0dXJuIHRoZSBkYXRh
IHdpdGggb3duZXJzaGlwLgorICAgIFZlY3RvcjxjaGFyPiB2OworICAgIHYuYXBwZW5kKGRhdGEo
KSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihzaXplKCkpKTsKKyAgICByZXR1cm4gdi5yZWxlYXNlQnVm
ZmVyKCk7Cit9CisKK2Jvb2wgRGF0YUJsb2JJdGVtOjplcXVhbHMoY29uc3QgQmxvYkl0ZW0qIGl0
ZW0pIGNvbnN0Cit7CisgICAgY29uc3QgRGF0YUJsb2JJdGVtKiBkYXRhSXRlbSA9IGl0ZW0tPnRv
RGF0YUJsb2JJdGVtKCk7CisgICAgcmV0dXJuIGRhdGFJdGVtICYmIGRhdGEoKSA9PSBkYXRhSXRl
bS0+ZGF0YSgpICYmIHNpemUoKSA9PSBkYXRhSXRlbS0+c2l6ZSgpOworfQorCisjaWYgRU5BQkxF
KEJMT0JfU0xJQ0UpCitQYXNzUmVmUHRyPEJsb2JJdGVtPiBEYXRhQmxvYkl0ZW06OnNsaWNlKGxv
bmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCkKK3sKKyAgICBBU1NFUlQoc3RhcnQgPj0g
MCAmJiBsZW5ndGggPj0gMCk7CisgICAgQVNTRVJUKHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcg
bG9uZz4oc3RhcnQpIDwgc2l6ZSgpKTsKKyAgICBpZiAoIXN0YXJ0ICYmIHNpemUoKSA8PSBzdGF0
aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KGxlbmd0aCkpCisgICAgICAgIHJldHVybiB0aGlz
OworICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KHN0YXJ0ICsgbGVuZ3Ro
KSA+IHNpemUoKSkKKyAgICAgICAgbGVuZ3RoID0gc2l6ZSgpIC0gc3RhcnQ7CisgICAgcmV0dXJu
IERhdGFSYW5nZUJsb2JJdGVtOjpjcmVhdGUodGhpcywgc3RhcnQsIGxlbmd0aCk7Cit9CisjZW5k
aWYgLy8gRU5BQkxFKEJMT0JfU0xJQ0UpCisKKy8vIEZpbGVCbG9iSXRlbSAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1Bh
c3NSZWZQdHI8QmxvYkl0ZW0+IEZpbGVCbG9iSXRlbTo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgcGF0
aCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoc3RhdGljX2Nhc3Q8QmxvYkl0ZW0qPihuZXcgRmls
ZUJsb2JJdGVtKHBhdGgpKSk7Cit9CisKK0ZpbGVCbG9iSXRlbTo6RmlsZUJsb2JJdGVtKGNvbnN0
IFN0cmluZyYgcGF0aCkKKyAgICA6IG1fcGF0aChwYXRoKQorICAgICwgbV9maWxlTmFtZShwYXRo
R2V0RmlsZU5hbWUobV9wYXRoKSkKK3sKK30KKwordW5zaWduZWQgbG9uZyBsb25nIEZpbGVCbG9i
SXRlbTo6c2l6ZSgpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IHN5bmNocm9uaXplZCBmaWxlIGNh
bGwKKyAgICBsb25nIGxvbmcgc2l6ZTsKKyAgICBpZiAoIWdldEZpbGVTaXplKG1fcGF0aCwgc2l6
ZSkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBs
b25nIGxvbmc+KHNpemUpOworfQorCitQYXNzUmVmUHRyPEJsb2JJdGVtPiBGaWxlQmxvYkl0ZW06
OmRlZXBDb3B5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gRmlsZUJsb2JJdGVtOjpjcmVhdGUobV9w
YXRoKTsKK30KKworYm9vbCBGaWxlQmxvYkl0ZW06OmVxdWFscyhjb25zdCBCbG9iSXRlbSogaXRl
bSkgY29uc3QKK3sKKyAgICBjb25zdCBGaWxlQmxvYkl0ZW0qIGZpbGVJdGVtID0gaXRlbS0+dG9G
aWxlQmxvYkl0ZW0oKTsKKyAgICByZXR1cm4gZmlsZUl0ZW0gJiYgbV9wYXRoID09IGZpbGVJdGVt
LT5tX3BhdGg7Cit9CisKKyNpZiBFTkFCTEUoQkxPQl9TTElDRSkKK1Bhc3NSZWZQdHI8QmxvYkl0
ZW0+IEZpbGVCbG9iSXRlbTo6c2xpY2UobG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3Ro
KQoreworICAgIEFTU0VSVChzdGFydCA+PSAwICYmIGxlbmd0aCA+PSAwKTsKKyAgICBBU1NFUlQo
c3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihzdGFydCkgPCBzaXplKCkpOworICAgIGlm
ICghc3RhcnQgJiYgc2l6ZSgpIDw9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4obGVu
Z3RoKSkKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgY29uc3QgRmlsZVJhbmdlQmxvYkl0ZW0q
IGZpbGVSYW5nZUl0ZW0gPSB0b0ZpbGVSYW5nZUJsb2JJdGVtKCk7CisgICAgZG91YmxlIG1vZGlm
aWNhdGlvblRpbWUgPSBmaWxlUmFuZ2VJdGVtID8gZmlsZVJhbmdlSXRlbS0+c25hcHNob3RNb2Rp
ZmljYXRpb25UaW1lKCkgOiBnZXRGaWxlU25hcHNob3RNb2RpZmljYXRpb25UaW1lKHBhdGgoKSk7
CisgICAgcmV0dXJuIEZpbGVSYW5nZUJsb2JJdGVtOjpjcmVhdGUocGF0aCgpLCBzdGFydCwgbGVu
Z3RoLCBtb2RpZmljYXRpb25UaW1lKTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoQkxPQl9TTElDRSkK
KworLy8gU3RyaW5nQmxvYkl0ZW0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUGFzc1JlZlB0cjxCbG9iSXRlbT4gU3RyaW5n
QmxvYkl0ZW06OmNyZWF0ZShjb25zdCBTdHJpbmcmIHRleHQsIExpbmVFbmRpbmcgZW5kaW5nLCBU
ZXh0RW5jb2RpbmcgZW5jb2RpbmcpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKHN0YXRpY19jYXN0
PEJsb2JJdGVtKj4obmV3IFN0cmluZ0Jsb2JJdGVtKHRleHQsIGVuZGluZywgZW5jb2RpbmcpKSk7
Cit9CisKK1Bhc3NSZWZQdHI8QmxvYkl0ZW0+IFN0cmluZ0Jsb2JJdGVtOjpjcmVhdGUoY29uc3Qg
Q1N0cmluZyYgdGV4dCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoc3RhdGljX2Nhc3Q8QmxvYkl0
ZW0qPihuZXcgU3RyaW5nQmxvYkl0ZW0odGV4dCkpKTsKK30KKworU3RyaW5nQmxvYkl0ZW06OlN0
cmluZ0Jsb2JJdGVtKGNvbnN0IFN0cmluZyYgdGV4dCwgTGluZUVuZGluZyBlbmRpbmcsIFRleHRF
bmNvZGluZyBlbmNvZGluZykKKyAgICA6IG1fZGF0YShTdHJpbmdCbG9iSXRlbTo6Y29udmVydFRv
Q1N0cmluZyh0ZXh0LCBlbmRpbmcsIGVuY29kaW5nKSkKK3sKK30KKworU3RyaW5nQmxvYkl0ZW06
OlN0cmluZ0Jsb2JJdGVtKGNvbnN0IENTdHJpbmcmIHRleHQpCisgICAgOiBtX2RhdGEodGV4dCkK
K3sKK30KKworUGFzc1JlZlB0cjxCbG9iSXRlbT4gU3RyaW5nQmxvYkl0ZW06OmRlZXBDb3B5KCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gU3RyaW5nQmxvYkl0ZW06OmNyZWF0ZShDU3RyaW5nKG1fZGF0
YS5kYXRhKCksIG1fZGF0YS5sZW5ndGgoKSkpOworfQorCitib29sIFN0cmluZ0Jsb2JJdGVtOjpl
cXVhbHMoY29uc3QgQmxvYkl0ZW0qIGl0ZW0pIGNvbnN0Cit7CisgICAgaWYgKCFEYXRhQmxvYkl0
ZW06OmVxdWFscyhpdGVtKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNvbnN0IFN0cmlu
Z0Jsb2JJdGVtKiBzdHJpbmdJdGVtID0gaXRlbS0+dG9TdHJpbmdCbG9iSXRlbSgpOworICAgIHJl
dHVybiBzdHJpbmdJdGVtICYmIGRhdGEoKSA9PSBzdHJpbmdJdGVtLT5kYXRhKCkgJiYgc2l6ZSgp
ID09IHN0cmluZ0l0ZW0tPnNpemUoKTsKK30KKworQ1N0cmluZyBTdHJpbmdCbG9iSXRlbTo6Y29u
dmVydFRvQ1N0cmluZyhjb25zdCBTdHJpbmcmIHRleHQsIExpbmVFbmRpbmcgZW5kaW5nLCBUZXh0
RW5jb2RpbmcgZW5jb2RpbmcpCit7CisgICAgQ1N0cmluZyBmcm9tID0gZW5jb2RpbmcuZW5jb2Rl
KHRleHQuY2hhcmFjdGVycygpLCB0ZXh0Lmxlbmd0aCgpLCBFbnRpdGllc0ZvclVuZW5jb2RhYmxl
cyk7CisgICAgQ1N0cmluZyByZXN1bHQgPSBmcm9tOworCisgICAgaWYgKGVuZGluZyA9PSBFbmRp
bmdUcmFuc3BhcmVudCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIGNvbnN0IGNoYXIq
IGVuZGluZ0NoYXJzID0gKGVuZGluZyA9PSBFbmRpbmdDUkxGKSA/ICJcclxuIiA6ICgoZW5kaW5n
ID09IEVuZGluZ0NSKSA/ICJcciIgOiAiXG4iKTsKKworICAgIGludCBlbmRpbmdMZW5ndGggPSAo
ZW5kaW5nID09IEVuZGluZ0NSTEYpID8gMiA6IDE7CisgICAgaW50IG5lZWRGaXggPSAwOworCisg
ICAgLy8gQ2FsY3VsYXRlIHRoZSBmaW5hbCBsZW5ndGguCisgICAgaW50IGNhbGN1bGF0ZWRMZW5n
dGggPSBmcm9tLmxlbmd0aCgpOworICAgIGNvbnN0IGNoYXIqIHAgPSBmcm9tLmRhdGEoKTsKKyAg
ICB3aGlsZSAoY2hhciBjID0gKnArKykgeworICAgICAgICBpZiAoYyA9PSAnXHInKSB7CisgICAg
ICAgICAgICAvLyBTYWZlIHRvIGxvb2sgYWhlYWQgYmVjYXVzZSBvZiB0cmFpbGluZyAnXDAnLgor
ICAgICAgICAgICAgaWYgKCpwID09ICdcbicgJiYgZW5kaW5nICE9IEVuZGluZ0NSTEYpIHsKKyAg
ICAgICAgICAgICAgICBjYWxjdWxhdGVkTGVuZ3RoICs9IChlbmRpbmdMZW5ndGggLSAyKTsKKyAg
ICAgICAgICAgICAgICArK25lZWRGaXg7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGVuZGluZyAh
PSBFbmRpbmdDUikgeworICAgICAgICAgICAgICAgIGNhbGN1bGF0ZWRMZW5ndGggKz0gKGVuZGlu
Z0xlbmd0aCAtIDEpOworICAgICAgICAgICAgICAgICsrbmVlZEZpeDsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSBlbHNlIGlmIChjID09ICdcbicgJiYgZW5kaW5nICE9IEVuZGluZ0xGKSB7Cisg
ICAgICAgICAgICBjYWxjdWxhdGVkTGVuZ3RoICs9IChlbmRpbmdMZW5ndGggLSAxKTsKKyAgICAg
ICAgICAgICsrbmVlZEZpeDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghbmVlZEZpeCkK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIC8vIENvbnZlcnQgdGhlIGVuZGluZ3MgYW5k
IGNyZWF0ZSBhIGRhdGEgYnVmZmVyLgorICAgIHAgPSBmcm9tLmRhdGEoKTsKKyAgICBjaGFyKiBx
OworICAgIHJlc3VsdCA9IENTdHJpbmc6Om5ld1VuaW5pdGlhbGl6ZWQoY2FsY3VsYXRlZExlbmd0
aCwgcSk7CisgICAgd2hpbGUgKGNoYXIgYyA9ICpwKyspIHsKKyAgICAgICAgaWYgKGMgPT0gJ1xy
JykgeworICAgICAgICAgICAgaWYgKCpwID09ICdcbicgJiYgZW5kaW5nICE9IEVuZGluZ0NSTEYp
IHsKKyAgICAgICAgICAgICAgICBtZW1jcHkocSwgZW5kaW5nQ2hhcnMsIGVuZGluZ0xlbmd0aCk7
CisgICAgICAgICAgICAgICAgcSArPSBlbmRpbmdMZW5ndGg7CisgICAgICAgICAgICB9IGVsc2Ug
aWYgKCpwICE9ICdcbicgJiYgZW5kaW5nICE9IEVuZGluZ0NSKSB7CisgICAgICAgICAgICAgICAg
bWVtY3B5KHEsIGVuZGluZ0NoYXJzLCBlbmRpbmdMZW5ndGgpOworICAgICAgICAgICAgICAgIHEg
Kz0gZW5kaW5nTGVuZ3RoOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKGMgPT0g
J1xuJyAmJiBlbmRpbmcgIT0gRW5kaW5nTEYpIHsKKyAgICAgICAgICAgIG1lbWNweShxLCBlbmRp
bmdDaGFycywgZW5kaW5nTGVuZ3RoKTsKKyAgICAgICAgICAgIHEgKz0gZW5kaW5nTGVuZ3RoOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gTGVhdmUgb3RoZXIgY2hhcmFjdGVycyBh
bG9uZS4KKyAgICAgICAgICAgICpxKysgPSBjOworICAgICAgICB9CisgICAgfQorICAgIHJldHVy
biByZXN1bHQ7Cit9CisKKy8vIEJ5dGVBcnJheUJsb2JJdGVtIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUGFzc1JlZlB0cjxCbG9i
SXRlbT4gQnl0ZUFycmF5QmxvYkl0ZW06OmNyZWF0ZShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3Qg
c2l6ZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoc3RhdGljX2Nhc3Q8QmxvYkl0ZW0qPihuZXcg
Qnl0ZUFycmF5QmxvYkl0ZW0oZGF0YSwgc2l6ZSkpKTsKK30KKworQnl0ZUFycmF5QmxvYkl0ZW06
OkJ5dGVBcnJheUJsb2JJdGVtKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBzaXplKQoreworICAg
IG1fYnl0ZXNBcnJheS5hcHBlbmQoZGF0YSwgc2l6ZSk7Cit9CisKK1Bhc3NSZWZQdHI8QmxvYkl0
ZW0+IEJ5dGVBcnJheUJsb2JJdGVtOjpkZWVwQ29weSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEJ5
dGVBcnJheUJsb2JJdGVtOjpjcmVhdGUobV9ieXRlc0FycmF5LmRhdGEoKSwgbV9ieXRlc0FycmF5
LnNpemUoKSk7Cit9CisKKyNpZiBFTkFCTEUoQkxPQl9TTElDRSkKKworLy8gRGF0YVJhbmdlQmxv
Ykl0ZW0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKworUGFzc1JlZlB0cjxCbG9iSXRlbT4gRGF0YVJhbmdlQmxvYkl0ZW06OmNyZWF0
ZShQYXNzUmVmUHRyPERhdGFCbG9iSXRlbT4gaXRlbSwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxv
bmcgbGVuZ3RoKQoreworICAgIHJldHVybiBhZG9wdFJlZihzdGF0aWNfY2FzdDxCbG9iSXRlbSo+
KG5ldyBEYXRhUmFuZ2VCbG9iSXRlbShpdGVtLCBzdGFydCwgbGVuZ3RoKSkpOworfQorCitEYXRh
UmFuZ2VCbG9iSXRlbTo6RGF0YVJhbmdlQmxvYkl0ZW0oUGFzc1JlZlB0cjxEYXRhQmxvYkl0ZW0+
IGl0ZW0sIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCkKKyAgICA6IG1fbGVuZ3Ro
KGxlbmd0aCkKK3sKKyAgICBjb25zdCBEYXRhUmFuZ2VCbG9iSXRlbSogcmFuZ2VJdGVtID0gbV9p
dGVtLT50b0RhdGFSYW5nZUJsb2JJdGVtKCk7CisgICAgaWYgKHJhbmdlSXRlbSkgeworICAgICAg
ICBtX2l0ZW0gPSByYW5nZUl0ZW0tPm1faXRlbTsKKyAgICAgICAgbV9zdGFydCA9IHN0YXJ0ICsg
cmFuZ2VJdGVtLT5tX3N0YXJ0OworICAgICAgICBBU1NFUlQoIW1faXRlbS0+dG9EYXRhUmFuZ2VC
bG9iSXRlbSgpKTsKKyAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9u
Zz4obV9zdGFydCArIG1fbGVuZ3RoKSA8PSBtX2l0ZW0tPnNpemUoKSk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgbV9pdGVtID0gaXRlbTsKKyAgICAgICAgbV9zdGFydCA9IHN0YXJ0OworICAgIH0K
K30KKworY29uc3QgY2hhciogRGF0YVJhbmdlQmxvYkl0ZW06OmRhdGEoKSBjb25zdAoreworICAg
IHJldHVybiBtX2l0ZW0tPmRhdGEoKSArIG1fc3RhcnQ7Cit9CisKK1Bhc3NSZWZQdHI8QmxvYkl0
ZW0+IERhdGFSYW5nZUJsb2JJdGVtOjpkZWVwQ29weSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIERh
dGFSYW5nZUJsb2JJdGVtOjpjcmVhdGUoc3RhdGljX3BvaW50ZXJfY2FzdDxEYXRhQmxvYkl0ZW0+
KG1faXRlbS0+ZGVlcENvcHkoKSksIG1fc3RhcnQsIG1fbGVuZ3RoKTsKK30KKworYm9vbCBEYXRh
UmFuZ2VCbG9iSXRlbTo6ZXF1YWxzKGNvbnN0IEJsb2JJdGVtKiBpdGVtKSBjb25zdAoreworICAg
IGNvbnN0IERhdGFSYW5nZUJsb2JJdGVtKiByYW5nZUl0ZW0gPSBpdGVtLT50b0RhdGFSYW5nZUJs
b2JJdGVtKCk7CisgICAgcmV0dXJuIHJhbmdlSXRlbSAmJiBtX3N0YXJ0ID09IHJhbmdlSXRlbS0+
bV9zdGFydCAmJiBtX2xlbmd0aCA9PSByYW5nZUl0ZW0tPm1fbGVuZ3RoICYmIG1faXRlbS0+ZXF1
YWxzKHJhbmdlSXRlbS0+bV9pdGVtLmdldCgpKTsKK30KKworLy8gRmlsZVJhbmdlQmxvYkl0ZW0g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKworUGFzc1JlZlB0cjxCbG9iSXRlbT4gRmlsZVJhbmdlQmxvYkl0ZW06OmNyZWF0ZShjb25z
dCBTdHJpbmcmIHBhdGgsIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCwgZG91Ymxl
IHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoc3RhdGlj
X2Nhc3Q8QmxvYkl0ZW0qPihuZXcgRmlsZVJhbmdlQmxvYkl0ZW0ocGF0aCwgc3RhcnQsIGxlbmd0
aCwgc25hcHNob3RNb2RpZmljYXRpb25UaW1lKSkpOworfQorCitGaWxlUmFuZ2VCbG9iSXRlbTo6
RmlsZVJhbmdlQmxvYkl0ZW0oY29uc3QgU3RyaW5nJiBwYXRoLCBsb25nIGxvbmcgc3RhcnQsIGxv
bmcgbG9uZyBsZW5ndGgsIGRvdWJsZSBtb2RpZmljYXRpb25UaW1lKQorICAgIDogRmlsZUJsb2JJ
dGVtKHBhdGgpCisgICAgLCBtX3N0YXJ0KHN0YXJ0KQorICAgICwgbV9sZW5ndGgobGVuZ3RoKQor
ICAgICwgbV9zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUobW9kaWZpY2F0aW9uVGltZSkKK3sKKyAg
ICBtX3VuaXF1ZU5hbWUgPSAiQmxvYiIgKyBjcmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCk7Cisg
ICAgbV91bmlxdWVOYW1lLnJlcGxhY2UoIi0iLCAiIik7IC8vIEZvciBzYWZ0eSwgcmVtb3ZlICct
JyBmcm9tIHRoZSBmaWxlbmFtZSBzbmNlIHNvbWUgc2VydmVycyBtYXkgbm90IGxpa2UgaXQuCit9
CisKK1Bhc3NSZWZQdHI8QmxvYkl0ZW0+IEZpbGVSYW5nZUJsb2JJdGVtOjpkZWVwQ29weSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIEZpbGVSYW5nZUJsb2JJdGVtOjpjcmVhdGUocGF0aCgpLCBtX3N0
YXJ0LCBtX2xlbmd0aCwgbV9zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUpOworfQorCitib29sIEZp
bGVSYW5nZUJsb2JJdGVtOjplcXVhbHMoY29uc3QgQmxvYkl0ZW0qIGl0ZW0pIGNvbnN0Cit7Cisg
ICAgaWYgKCFGaWxlQmxvYkl0ZW06OmVxdWFscyhpdGVtKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGNvbnN0IEZpbGVSYW5nZUJsb2JJdGVtKiByYW5nZUl0ZW0gPSBpdGVtLT50b0ZpbGVS
YW5nZUJsb2JJdGVtKCk7CisgICAgcmV0dXJuIHJhbmdlSXRlbSAmJiBtX3N0YXJ0ID09IHJhbmdl
SXRlbS0+bV9zdGFydCAmJiBtX3VuaXF1ZU5hbWUgPT0gcmFuZ2VJdGVtLT5tX3VuaXF1ZU5hbWUg
JiYgbV9zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUgPT0gcmFuZ2VJdGVtLT5tX3NuYXBzaG90TW9k
aWZpY2F0aW9uVGltZTsKK30KKworYm9vbCBGaWxlUmFuZ2VCbG9iSXRlbTo6aXNWYWxpZCgpIGNv
bnN0Cit7CisgICAgaWYgKG1fc25hcHNob3RNb2RpZmljYXRpb25UaW1lID09IGludmFsaWRNb2Rp
ZmljYXRpb25UaW1lKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG1fc25hcHNo
b3RNb2RpZmljYXRpb25UaW1lID09IGdldEZpbGVTbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUocGF0
aCgpKTsKK30KKworI2VuZGlmIC8vIEVOQUJMRShCTE9CX1NMSUNFKQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL0Jsb2JJdGVtLmggYi9XZWJD
b3JlL3BsYXRmb3JtL0Jsb2JJdGVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjE5MWM2YzA4N2QzNmIzMzk0NzEw
ZWIzZTJlYWFjNDc5NWZhNWUyZQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
QmxvYkl0ZW0uaApAQCAtMCwwICsxLDIyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
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
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEJsb2JJdGVtX2gKKyNkZWZpbmUg
QmxvYkl0ZW1faAorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJUZXh0
RW5jb2RpbmcuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworLy8gU3RyaW5nIGVuZGluZyB0eXBlcy4KK2VudW0gTGluZUVuZGluZyB7CisgICAgRW5k
aW5nVHJhbnNwYXJlbnQgPSAwLAorICAgIEVuZGluZ0xGLAorICAgIEVuZGluZ0NSLAorICAgIEVu
ZGluZ0NSTEYsCit9OworCitjbGFzcyBCeXRlQXJyYXlCbG9iSXRlbTsKK2NsYXNzIERhdGFCbG9i
SXRlbTsKK2NsYXNzIERhdGFSYW5nZUJsb2JJdGVtOworY2xhc3MgRmlsZUJsb2JJdGVtOworY2xh
c3MgRmlsZVJhbmdlQmxvYkl0ZW07CitjbGFzcyBTdHJpbmdCbG9iSXRlbTsKKworLy8gQSBiYXNl
IGludGVyZmFjZSBmb3IgYWxsIGFyYml0cmFyeS1kYXRhLW9iamVjdCBjb21wb25lbnQgaXRlbXMu
CisvLyBUaGUgQmxvYkl0ZW0gYW5kIGl0cyBzdWJjbGFzc2VzIGFyZSBzdHJ1Y3R1cmVkIGxpa2Ug
dGhlIGZvbGxvd2luZzoKKy8vICAgIEJsb2JJdGVtCisvLyAgICAgICB8CisvLyAgICAgICArLS0t
LS0tLT4gRGF0YUJsb2JJdGVtCisvLyAgICAgICB8ICAgICAgICAgICAgICB8CisvLyAgICAgICB8
ICAgICAgICAgICAgICArLS0tLS0tLS0tPiBTdHJpbmdCbG9iSXRlbQorLy8gICAgICAgfCAgICAg
ICAgICAgICAgKy0tLS0tLS0tLT4gQnl0ZUFycmF5QmxvYkl0ZW0KKy8vICAgICAgIHwgICAgICAg
ICAgICAgICstLS0tLS0tLS0+IERhdGFSYW5nZUJsb2JJdGVtCisvLyAgICAgICB8CisvLyAgICAg
ICArLS0tLS0tLT4gRmlsZUJsb2JJdGVtCisvLyAgICAgICAgICAgICAgICAgICAgICB8CisvLyAg
ICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tPiBGaWxlUmFuZ2VCbG9iSXRlbQorLy8KK2Ns
YXNzIEJsb2JJdGVtIDogcHVibGljIFJlZkNvdW50ZWQ8QmxvYkl0ZW0+IHsKK3B1YmxpYzoKKyAg
ICB2aXJ0dWFsIH5CbG9iSXRlbSgpIHsgfQorICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBsb25n
IHNpemUoKSBjb25zdCA9IDA7CisKKyAgICAvLyBSZXR1cm5zIGZhbHNlIGlmIHRoZSBkYXRhIGhh
cyBiZWNvbWUgc3RhbGUgb3IgaW52YWxpZC4KKyAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNv
bnN0IHsgcmV0dXJuIHRydWU7IH0KKworICAgIHZpcnR1YWwgY29uc3QgRGF0YUJsb2JJdGVtKiB0
b0RhdGFCbG9iSXRlbSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IFN0
cmluZ0Jsb2JJdGVtKiB0b1N0cmluZ0Jsb2JJdGVtKCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAg
IHZpcnR1YWwgY29uc3QgQnl0ZUFycmF5QmxvYkl0ZW0qIHRvQnl0ZUFycmF5QmxvYkl0ZW0oKSBj
b25zdCB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBjb25zdCBGaWxlQmxvYkl0ZW0qIHRvRmls
ZUJsb2JJdGVtKCkgY29uc3QgeyByZXR1cm4gMDsgfQorI2lmIEVOQUJMRShCTE9CX1NMSUNFKQor
ICAgIHZpcnR1YWwgY29uc3QgRGF0YVJhbmdlQmxvYkl0ZW0qIHRvRGF0YVJhbmdlQmxvYkl0ZW0o
KSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBjb25zdCBGaWxlUmFuZ2VCbG9iSXRl
bSogdG9GaWxlUmFuZ2VCbG9iSXRlbSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKworICAgIC8vIE5v
dGU6IG5vIGV4dGVybmFsIG1ldGhvZHMgZXhjZXB0IGZvciBCbG9iOjpzbGljZSBzaG91bGQgY2Fs
bCB0aGlzLgorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxCbG9iSXRlbT4gc2xpY2UobG9uZyBsb25n
IHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoKSA9IDA7CisjZW5kaWYgLy8gRU5BQkxFKEJMT0JfU0xJ
Q0UpCisKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8QmxvYkl0ZW0+IGRlZXBDb3B5KCkgY29uc3Qg
PSAwOworICAgIHZpcnR1YWwgYm9vbCBlcXVhbHMoY29uc3QgQmxvYkl0ZW0qKSBjb25zdCA9IDA7
CisKK3Byb3RlY3RlZDoKKyAgICBCbG9iSXRlbSgpIHsgfQorfTsKKwordHlwZWRlZiBWZWN0b3I8
UmVmUHRyPEJsb2JJdGVtPiA+IEJsb2JJdGVtTGlzdDsKKworY2xhc3MgRGF0YUJsb2JJdGVtIDog
cHVibGljIEJsb2JJdGVtIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGRhdGEo
KSBjb25zdCA9IDA7CisgICAgY2hhciogY29weUJ1ZmZlcigpIGNvbnN0OworCisgICAgLy8gQmxv
Ykl0ZW0gbWV0aG9kcy4KKyAgICB2aXJ0dWFsIGNvbnN0IERhdGFCbG9iSXRlbSogdG9EYXRhQmxv
Ykl0ZW0oKSBjb25zdCB7IHJldHVybiB0aGlzOyB9CisgICAgdmlydHVhbCBib29sIGVxdWFscyhj
b25zdCBCbG9iSXRlbSopIGNvbnN0OworI2lmIEVOQUJMRShCTE9CX1NMSUNFKQorICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxCbG9iSXRlbT4gc2xpY2UobG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcg
bGVuZ3RoKTsKKyNlbmRpZiAvLyBFTkFCTEUoQkxPQl9TTElDRSkKK307CisKK2NsYXNzIEZpbGVC
bG9iSXRlbSA6IHB1YmxpYyBCbG9iSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8QmxvYkl0ZW0+IGNyZWF0ZShjb25zdCBTdHJpbmcmIHBhdGgpOworICAgIHZpcnR1YWwgY29u
c3QgU3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9maWxlTmFtZTsgfQorICAgIHZpcnR1
YWwgY29uc3QgU3RyaW5nJiBwYXRoKCkgY29uc3QgeyByZXR1cm4gbV9wYXRoOyB9CisKKyAgICAv
LyBCbG9iSXRlbSBtZXRob2RzLgorICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBsb25nIHNpemUo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIGNvbnN0IEZpbGVCbG9iSXRlbSogdG9GaWxlQmxvYkl0ZW0o
KSBjb25zdCB7IHJldHVybiB0aGlzOyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEJsb2JJdGVt
PiBkZWVwQ29weSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBlcXVhbHMoY29uc3QgQmxvYkl0
ZW0qKSBjb25zdDsKKyNpZiBFTkFCTEUoQkxPQl9TTElDRSkKKyAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8QmxvYkl0ZW0+IHNsaWNlKGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCk7Cisj
ZW5kaWYgLy8gRU5BQkxFKEJMT0JfU0xJQ0UpCisKK3Byb3RlY3RlZDoKKyAgICBGaWxlQmxvYkl0
ZW0oY29uc3QgU3RyaW5nJiBwYXRoKTsKKyAgICBTdHJpbmcgbV9wYXRoOworICAgIFN0cmluZyBt
X2ZpbGVOYW1lOworfTsKKworY2xhc3MgU3RyaW5nQmxvYkl0ZW0gOiBwdWJsaWMgRGF0YUJsb2JJ
dGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCbG9iSXRlbT4gY3JlYXRlKGNv
bnN0IFN0cmluZyYsIExpbmVFbmRpbmcsIFRleHRFbmNvZGluZyk7CisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8QmxvYkl0ZW0+IGNyZWF0ZShjb25zdCBDU3RyaW5nJik7CisgICAgY29uc3QgQ1N0cmlu
ZyYgY3N0cigpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsgfQorCisgICAgLy8gQmxvYkl0ZW0gbWV0
aG9kcy4KKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplKCkgY29uc3QgeyByZXR1
cm4gbV9kYXRhLmxlbmd0aCgpOyB9CisgICAgdmlydHVhbCBjb25zdCBTdHJpbmdCbG9iSXRlbSog
dG9TdHJpbmdCbG9iSXRlbSgpIGNvbnN0IHsgcmV0dXJuIHRoaXM7IH0KKyAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8QmxvYkl0ZW0+IGRlZXBDb3B5KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGVx
dWFscyhjb25zdCBCbG9iSXRlbSopIGNvbnN0OworCisgICAgLy8gRGF0YUJsb2JJdGVtIG1ldGhv
ZHMuCisgICAgdmlydHVhbCBjb25zdCBjaGFyKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRh
LmRhdGEoKTsgfQorCitwcml2YXRlOgorICAgIFN0cmluZ0Jsb2JJdGVtKGNvbnN0IFN0cmluZyYs
IExpbmVFbmRpbmcsIFRleHRFbmNvZGluZyk7CisgICAgU3RyaW5nQmxvYkl0ZW0oY29uc3QgQ1N0
cmluZyYpOworICAgIHN0YXRpYyBDU3RyaW5nIGNvbnZlcnRUb0NTdHJpbmcoY29uc3QgU3RyaW5n
JiwgTGluZUVuZGluZywgVGV4dEVuY29kaW5nKTsKKyAgICBDU3RyaW5nIG1fZGF0YTsKK307CisK
K2NsYXNzIEJ5dGVBcnJheUJsb2JJdGVtIDogcHVibGljIERhdGFCbG9iSXRlbSB7CitwdWJsaWM6
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QmxvYkl0ZW0+IGNyZWF0ZShjb25zdCBjaGFyKiBkYXRh
LCBzaXplX3Qgc2l6ZSk7CisKKyAgICAvLyBCbG9iSXRlbSBtZXRob2RzLgorICAgIHZpcnR1YWwg
dW5zaWduZWQgbG9uZyBsb25nIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2J5dGVzQXJyYXkuc2l6
ZSgpOyB9CisgICAgdmlydHVhbCBjb25zdCBCeXRlQXJyYXlCbG9iSXRlbSogdG9CeXRlQXJyYXlC
bG9iSXRlbSgpIGNvbnN0IHsgcmV0dXJuIHRoaXM7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
QmxvYkl0ZW0+IGRlZXBDb3B5KCkgY29uc3Q7CisKKyAgICAvLyBEYXRhQmxvYkl0ZW0gbWV0aG9k
cy4KKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2J5dGVz
QXJyYXkuZGF0YSgpOyB9CisKK3ByaXZhdGU6CisgICAgQnl0ZUFycmF5QmxvYkl0ZW0oY29uc3Qg
Y2hhciogZGF0YSwgc2l6ZV90IHNpemUpOworICAgIFZlY3RvcjxjaGFyPiBtX2J5dGVzQXJyYXk7
Cit9OworCisjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCisKKy8vIEJsb2JJdGVtIGNsYXNzIGZvciBz
bGljZWQgZGF0YSAoc3RyaW5nIG9yIGJ5dGVzLWFycmF5KS4KK2NsYXNzIERhdGFSYW5nZUJsb2JJ
dGVtIDogcHVibGljIERhdGFCbG9iSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8QmxvYkl0ZW0+IGNyZWF0ZShQYXNzUmVmUHRyPERhdGFCbG9iSXRlbT4sIGxvbmcgbG9uZyBz
dGFydCwgbG9uZyBsb25nIGxlbmd0aCk7CisKKyAgICAvLyBCbG9iSXRlbSBtZXRob2RzLgorICAg
IHZpcnR1YWwgdW5zaWduZWQgbG9uZyBsb25nIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0
aDsgfQorICAgIHZpcnR1YWwgY29uc3QgRGF0YVJhbmdlQmxvYkl0ZW0qIHRvRGF0YVJhbmdlQmxv
Ykl0ZW0oKSBjb25zdCB7IHJldHVybiB0aGlzOyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEJs
b2JJdGVtPiBkZWVwQ29weSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBlcXVhbHMoY29uc3Qg
QmxvYkl0ZW0qKSBjb25zdDsKKworICAgIC8vIERhdGFCbG9iSXRlbSBtZXRob2RzLgorICAgIHZp
cnR1YWwgY29uc3QgY2hhciogZGF0YSgpIGNvbnN0OworCitwcml2YXRlOgorICAgIERhdGFSYW5n
ZUJsb2JJdGVtKFBhc3NSZWZQdHI8RGF0YUJsb2JJdGVtPiwgbG9uZyBsb25nIHN0YXJ0LCBsb25n
IGxvbmcgbGVuZ3RoKTsKKyAgICBSZWZQdHI8RGF0YUJsb2JJdGVtPiBtX2l0ZW07CisgICAgbG9u
ZyBsb25nIG1fc3RhcnQ7CisgICAgbG9uZyBsb25nIG1fbGVuZ3RoOworfTsKKworY2xhc3MgRmls
ZVJhbmdlQmxvYkl0ZW0gOiBwdWJsaWMgRmlsZUJsb2JJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxCbG9iSXRlbT4gY3JlYXRlKGNvbnN0IFN0cmluZyYgcGF0aCwgbG9uZyBs
b25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoLCBkb3VibGUgc25hcHNob3RNb2RpZmljYXRpb25U
aW1lKTsKKyAgICBsb25nIGxvbmcgc3RhcnQoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0OyB9Cisg
ICAgZG91YmxlIHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSgpIGNvbnN0IHsgcmV0dXJuIG1fc25h
cHNob3RNb2RpZmljYXRpb25UaW1lOyB9CisKKyAgICAvLyBCbG9iSXRlbSBtZXRob2RzLgorICAg
IHZpcnR1YWwgdW5zaWduZWQgbG9uZyBsb25nIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0
aDsgfQorICAgIHZpcnR1YWwgY29uc3QgRmlsZVJhbmdlQmxvYkl0ZW0qIHRvRmlsZVJhbmdlQmxv
Ykl0ZW0oKSBjb25zdCB7IHJldHVybiB0aGlzOyB9CisgICAgdmlydHVhbCBib29sIGlzVmFsaWQo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8QmxvYkl0ZW0+IGRlZXBDb3B5KCkgY29u
c3Q7CisgICAgdmlydHVhbCBib29sIGVxdWFscyhjb25zdCBCbG9iSXRlbSopIGNvbnN0OworCisg
ICAgLy8gRmlsZUJsb2JJdGVtIG1ldGhvZHMuCisgICAgdmlydHVhbCBjb25zdCBTdHJpbmcmIG5h
bWUoKSBjb25zdCB7IHJldHVybiBtX3VuaXF1ZU5hbWU7IH0KKworcHJpdmF0ZToKKyAgICBGaWxl
UmFuZ2VCbG9iSXRlbShjb25zdCBTdHJpbmcmIHBhdGgsIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBs
b25nIGxlbmd0aCwgZG91YmxlIHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSk7CisgICAgbG9uZyBs
b25nIG1fc3RhcnQ7CisgICAgbG9uZyBsb25nIG1fbGVuZ3RoOworICAgIFN0cmluZyBtX3VuaXF1
ZU5hbWU7CisKKyAgICBkb3VibGUgbV9zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWU7Cit9OworCisj
ZW5kaWYgLy8gRU5BQkxFKEJMT0JfU0xJQ0UpCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEJsb2JJdGVtX2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9Gb3JtRGF0YS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwCmlu
ZGV4IDkxODAwMmFlZmQ4MWE2ODkxZjlmMTliYWY0NGQ3NTU5MWZkZmE0ODQuLmFmY2NjY2FhNDI1
ZGNiZjUwYTljNDNjM2Y1Zjk2NjA4OGY0NGViN2UgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9Gb3JtRGF0YS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zv
cm1EYXRhLmNwcApAQCAtMTksMjMgKzE5LDQ2IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5o
IgorCiAjaW5jbHVkZSAiRm9ybURhdGEuaCIKIAotI2luY2x1ZGUgIkJsb2IuaCIKKyNpbmNsdWRl
ICJCbG9iSXRlbS5oIgogI2luY2x1ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUgIkNocm9tZUNsaWVu
dC5oIgotI2luY2x1ZGUgIkRPTUZvcm1EYXRhLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNp
bmNsdWRlICJGaWxlLmgiCiAjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgogI2luY2x1ZGUgIkZvcm1E
YXRhQnVpbGRlci5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKICNpbmNsdWRlICJQ
YWdlLmgiCiAjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCi0jaW5jbHVkZSAiVVVJRC5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKKyNpZiBFTkFCTEUoQkxPQl9TTElDRSkKK2NvbnN0IGxvbmcg
bG9uZyBGb3JtRGF0YUVsZW1lbnQ6OnRvRW5kT2ZGaWxlID0gLTE7CisjZW5kaWYKKworRm9ybURh
dGFFbGVtZW50OjpGb3JtRGF0YUVsZW1lbnQoUGFzc1JlZlB0cjxCbG9iSXRlbT4gYmxvYkl0ZW0s
IGJvb2wgc2hvdWxkR2VuZXJhdGVGaWxlKQorICAgIDogbV9pdGVtKGJsb2JJdGVtKQorICAgICwg
bV90eXBlKG1faXRlbS0+dG9GaWxlQmxvYkl0ZW0oKSA/IGVuY29kZWRGaWxlIDogZGF0YSkKKyAg
ICAsIG1fZGF0YShtX2l0ZW0tPnRvRGF0YUJsb2JJdGVtKCkpCisgICAgLCBtX2ZpbGVuYW1lKG1f
aXRlbS0+dG9GaWxlQmxvYkl0ZW0oKSA/IG1faXRlbS0+dG9GaWxlQmxvYkl0ZW0oKS0+cGF0aCgp
IDogU3RyaW5nKCkpCisgICAgLCBtX3Nob3VsZEdlbmVyYXRlRmlsZShzaG91bGRHZW5lcmF0ZUZp
bGUpCit7CisjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCisgICAgY29uc3QgRmlsZVJhbmdlQmxvYkl0
ZW0qIGZpbGVSYW5nZUl0ZW0gPSBtX2l0ZW0tPnRvRmlsZVJhbmdlQmxvYkl0ZW0oKTsKKyAgICBp
ZiAoZmlsZVJhbmdlSXRlbSkgeworICAgICAgICBtX2ZpbGVTdGFydCA9IGZpbGVSYW5nZUl0ZW0t
PnN0YXJ0KCk7CisgICAgICAgIG1fZmlsZUxlbmd0aCA9IGZpbGVSYW5nZUl0ZW0tPnNpemUoKTsK
KyAgICAgICAgbV9leHBlY3RlZEZpbGVNb2RpZmljYXRpb25UaW1lID0gZmlsZVJhbmdlSXRlbS0+
c25hcHNob3RNb2RpZmljYXRpb25UaW1lKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9maWxl
U3RhcnQgPSAwOworICAgICAgICBtX2ZpbGVMZW5ndGggPSB0b0VuZE9mRmlsZTsKKyAgICAgICAg
bV9leHBlY3RlZEZpbGVNb2RpZmljYXRpb25UaW1lID0gMDsKKyAgICB9CisjZW5kaWYKK30KKwog
aW5saW5lIEZvcm1EYXRhOjpGb3JtRGF0YSgpCiAgICAgOiBtX2lkZW50aWZpZXIoMCkKICAgICAs
IG1faGFzR2VuZXJhdGVkRmlsZXMoZmFsc2UpCkBAIC04NSw3ICsxMDgsNyBAQCBQYXNzUmVmUHRy
PEZvcm1EYXRhPiBGb3JtRGF0YTo6Y3JlYXRlKGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBzaXpl
KQogUGFzc1JlZlB0cjxGb3JtRGF0YT4gRm9ybURhdGE6OmNyZWF0ZShjb25zdCBDU3RyaW5nJiBz
dHJpbmcpCiB7CiAgICAgUmVmUHRyPEZvcm1EYXRhPiByZXN1bHQgPSBjcmVhdGUoKTsKLSAgICBy
ZXN1bHQtPmFwcGVuZERhdGEoc3RyaW5nLmRhdGEoKSwgc3RyaW5nLmxlbmd0aCgpKTsKKyAgICBy
ZXN1bHQtPmFwcGVuZFN0cmluZyhzdHJpbmcpOwogICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgp
OwogfQogCkBAIC05NiwxNyArMTE5LDE3IEBAIFBhc3NSZWZQdHI8Rm9ybURhdGE+IEZvcm1EYXRh
OjpjcmVhdGUoY29uc3QgVmVjdG9yPGNoYXI+JiB2ZWN0b3IpCiAgICAgcmV0dXJuIHJlc3VsdC5y
ZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8Rm9ybURhdGE+IEZvcm1EYXRhOjpjcmVhdGUoY29u
c3QgRE9NRm9ybURhdGEmIGRvbUZvcm1EYXRhKQorUGFzc1JlZlB0cjxGb3JtRGF0YT4gRm9ybURh
dGE6OmNyZWF0ZShjb25zdCBCbG9iSXRlbUxpc3QmIGl0ZW1zLCBjb25zdCBUZXh0RW5jb2Rpbmcm
IGVuY29kaW5nKQogewogICAgIFJlZlB0cjxGb3JtRGF0YT4gcmVzdWx0ID0gY3JlYXRlKCk7Ci0g
ICAgcmVzdWx0LT5hcHBlbmRET01Gb3JtRGF0YShkb21Gb3JtRGF0YSwgZmFsc2UsIDApOworICAg
IHJlc3VsdC0+YXBwZW5kS2V5VmFsdWVQYWlySXRlbXMoaXRlbXMsIGVuY29kaW5nLCBmYWxzZSwg
MCk7CiAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8Rm9ybURh
dGE+IEZvcm1EYXRhOjpjcmVhdGVNdWx0aVBhcnQoY29uc3QgRE9NRm9ybURhdGEmIGRvbUZvcm1E
YXRhLCBEb2N1bWVudCogZG9jdW1lbnQpCitQYXNzUmVmUHRyPEZvcm1EYXRhPiBGb3JtRGF0YTo6
Y3JlYXRlTXVsdGlQYXJ0KGNvbnN0IEJsb2JJdGVtTGlzdCYgaXRlbXMsIGNvbnN0IFRleHRFbmNv
ZGluZyYgZW5jb2RpbmcsIERvY3VtZW50KiBkb2N1bWVudCkKIHsKICAgICBSZWZQdHI8Rm9ybURh
dGE+IHJlc3VsdCA9IGNyZWF0ZSgpOwotICAgIHJlc3VsdC0+YXBwZW5kRE9NRm9ybURhdGEoZG9t
Rm9ybURhdGEsIHRydWUsIGRvY3VtZW50KTsKKyAgICByZXN1bHQtPmFwcGVuZEtleVZhbHVlUGFp
ckl0ZW1zKGl0ZW1zLCBlbmNvZGluZywgdHJ1ZSwgZG9jdW1lbnQpOwogICAgIHJldHVybiByZXN1
bHQucmVsZWFzZSgpOwogfQogCkBAIC0xMjUsODQgKzE0OCw2OSBAQCBQYXNzUmVmUHRyPEZvcm1E
YXRhPiBGb3JtRGF0YTo6ZGVlcENvcHkoKSBjb25zdAogICAgIGZvcm1EYXRhLT5tX2VsZW1lbnRz
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobik7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBu
OyArK2kpIHsKICAgICAgICAgY29uc3QgRm9ybURhdGFFbGVtZW50JiBlID0gbV9lbGVtZW50c1tp
XTsKLSAgICAgICAgc3dpdGNoIChlLm1fdHlwZSkgewotICAgICAgICBjYXNlIEZvcm1EYXRhRWxl
bWVudDo6ZGF0YToKLSAgICAgICAgICAgIGZvcm1EYXRhLT5tX2VsZW1lbnRzLmFwcGVuZChGb3Jt
RGF0YUVsZW1lbnQoZS5tX2RhdGEpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEZvcm1EYXRhRWxlbWVudDo6ZW5jb2RlZEZpbGU6Ci0jaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0g
ICAgICAgICAgICBmb3JtRGF0YS0+bV9lbGVtZW50cy5hcHBlbmQoRm9ybURhdGFFbGVtZW50KGUu
bV9maWxlbmFtZSwgZS5tX2ZpbGVTdGFydCwgZS5tX2ZpbGVMZW5ndGgsIGUubV9leHBlY3RlZEZp
bGVNb2RpZmljYXRpb25UaW1lLCBlLm1fc2hvdWxkR2VuZXJhdGVGaWxlKSk7Ci0jZWxzZQotICAg
ICAgICAgICAgZm9ybURhdGEtPm1fZWxlbWVudHMuYXBwZW5kKEZvcm1EYXRhRWxlbWVudChlLm1f
ZmlsZW5hbWUsIGUubV9zaG91bGRHZW5lcmF0ZUZpbGUpKTsKLSNlbmRpZgotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KKyAgICAgICAgZm9ybURhdGEtPm1fZWxlbWVudHMuYXBwZW5kKEZv
cm1EYXRhRWxlbWVudChlLml0ZW0oKS0+ZGVlcENvcHkoKSwgZS5tX3Nob3VsZEdlbmVyYXRlRmls
ZSkpOwogICAgIH0KICAgICByZXR1cm4gZm9ybURhdGEucmVsZWFzZSgpOwogfQogCiB2b2lkIEZv
cm1EYXRhOjphcHBlbmREYXRhKGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBzaXplKQogewotICAg
IGlmIChtX2VsZW1lbnRzLmlzRW1wdHkoKSB8fCBtX2VsZW1lbnRzLmxhc3QoKS5tX3R5cGUgIT0g
Rm9ybURhdGFFbGVtZW50OjpkYXRhKQotICAgICAgICBtX2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0
YUVsZW1lbnQoKSk7Ci0gICAgRm9ybURhdGFFbGVtZW50JiBlID0gbV9lbGVtZW50cy5sYXN0KCk7
Ci0gICAgc2l6ZV90IG9sZFNpemUgPSBlLm1fZGF0YS5zaXplKCk7Ci0gICAgZS5tX2RhdGEuZ3Jv
dyhvbGRTaXplICsgc2l6ZSk7Ci0gICAgbWVtY3B5KGUubV9kYXRhLmRhdGEoKSArIG9sZFNpemUs
IGRhdGEsIHNpemUpOworICAgIG1fZWxlbWVudHMuYXBwZW5kKEZvcm1EYXRhRWxlbWVudChCeXRl
QXJyYXlCbG9iSXRlbTo6Y3JlYXRlKHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihkYXRhKSwgc2l6
ZSkpKTsKK30KKwordm9pZCBGb3JtRGF0YTo6YXBwZW5kU3RyaW5nKGNvbnN0IENTdHJpbmcmIHN0
cmluZykKK3sKKyAgICBtX2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVsZW1lbnQoU3RyaW5nQmxv
Ykl0ZW06OmNyZWF0ZShzdHJpbmcpKSk7CiB9CiAKIHZvaWQgRm9ybURhdGE6OmFwcGVuZEZpbGUo
Y29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgYm9vbCBzaG91bGRHZW5lcmF0ZUZpbGUpCiB7Ci0jaWYg
RU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgbV9lbGVtZW50cy5hcHBlbmQoRm9ybURhdGFFbGVtZW50
KGZpbGVuYW1lLCAwLCBCbG9iOjp0b0VuZE9mRmlsZSwgQmxvYjo6ZG9Ob3RDaGVja0ZpbGVDaGFu
Z2UsIHNob3VsZEdlbmVyYXRlRmlsZSkpOwotI2Vsc2UKLSAgICBtX2VsZW1lbnRzLmFwcGVuZChG
b3JtRGF0YUVsZW1lbnQoZmlsZW5hbWUsIHNob3VsZEdlbmVyYXRlRmlsZSkpOwotI2VuZGlmCisg
ICAgbV9lbGVtZW50cy5hcHBlbmQoRm9ybURhdGFFbGVtZW50KEZpbGVCbG9iSXRlbTo6Y3JlYXRl
KGZpbGVuYW1lKSwgc2hvdWxkR2VuZXJhdGVGaWxlKSk7Cit9CisKK3ZvaWQgRm9ybURhdGE6OmFw
cGVuZEl0ZW1zKGNvbnN0IEJsb2JJdGVtTGlzdCYgaXRlbXMpCit7CisgICAgZm9yIChCbG9iSXRl
bUxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIoaXRlbXMuYmVnaW4oKSk7IGl0ZXIgIT0gaXRlbXMu
ZW5kKCk7ICsraXRlcikKKyAgICAgICAgbV9lbGVtZW50cy5hcHBlbmQoKml0ZXIpOwogfQogCiAj
aWYgRU5BQkxFKEJMT0JfU0xJQ0UpCiB2b2lkIEZvcm1EYXRhOjphcHBlbmRGaWxlUmFuZ2UoY29u
c3QgU3RyaW5nJiBmaWxlbmFtZSwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoLCBk
b3VibGUgZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lLCBib29sIHNob3VsZEdlbmVyYXRlRmlsZSkK
IHsKLSAgICBtX2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVsZW1lbnQoZmlsZW5hbWUsIHN0YXJ0
LCBsZW5ndGgsIGV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZSwgc2hvdWxkR2VuZXJhdGVGaWxlKSk7
CisgICAgaWYgKGxlbmd0aCA9PSBGb3JtRGF0YUVsZW1lbnQ6OnRvRW5kT2ZGaWxlKSB7CisgICAg
ICAgIEFTU0VSVCghc3RhcnQpOworICAgICAgICBBU1NFUlQoIWV4cGVjdGVkTW9kaWZpY2F0aW9u
VGltZSk7CisgICAgICAgIG1fZWxlbWVudHMuYXBwZW5kKEZvcm1EYXRhRWxlbWVudChGaWxlQmxv
Ykl0ZW06OmNyZWF0ZShmaWxlbmFtZSksIHNob3VsZEdlbmVyYXRlRmlsZSkpOworICAgIH0gZWxz
ZQorICAgICAgICBtX2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVsZW1lbnQoRmlsZVJhbmdlQmxv
Ykl0ZW06OmNyZWF0ZShmaWxlbmFtZSwgc3RhcnQsIGxlbmd0aCwgZXhwZWN0ZWRNb2RpZmljYXRp
b25UaW1lKSwgc2hvdWxkR2VuZXJhdGVGaWxlKSk7CiB9CiAjZW5kaWYKIAotdm9pZCBGb3JtRGF0
YTo6YXBwZW5kRE9NRm9ybURhdGEoY29uc3QgRE9NRm9ybURhdGEmIGRvbUZvcm1EYXRhLCBib29s
IGlzTXVsdGlQYXJ0Rm9ybSwgRG9jdW1lbnQqIGRvY3VtZW50KQordm9pZCBGb3JtRGF0YTo6YXBw
ZW5kS2V5VmFsdWVQYWlySXRlbXMoY29uc3QgQmxvYkl0ZW1MaXN0JiBpdGVtcywgY29uc3QgVGV4
dEVuY29kaW5nJiBlbmNvZGluZywgYm9vbCBpc011bHRpUGFydEZvcm0sIERvY3VtZW50KiBkb2N1
bWVudCkKIHsKICAgICBGb3JtRGF0YUJ1aWxkZXIgZm9ybURhdGFCdWlsZGVyOwogICAgIGlmIChp
c011bHRpUGFydEZvcm0pCiAgICAgICAgIG1fYm91bmRhcnkgPSBmb3JtRGF0YUJ1aWxkZXIuZ2Vu
ZXJhdGVVbmlxdWVCb3VuZGFyeVN0cmluZygpOwogCiAgICAgVmVjdG9yPGNoYXI+IGVuY29kZWRE
YXRhOwotICAgIFRleHRFbmNvZGluZyBlbmNvZGluZyA9IGRvbUZvcm1EYXRhLmVuY29kaW5nKCk7
CiAKLSAgICBjb25zdCBWZWN0b3I8Rm9ybURhdGFMaXN0OjpJdGVtPiYgbGlzdCA9IGRvbUZvcm1E
YXRhLmxpc3QoKTsKLSAgICBzaXplX3QgZm9ybURhdGFMaXN0U2l6ZSA9IGxpc3Quc2l6ZSgpOwor
ICAgIHNpemVfdCBmb3JtRGF0YUxpc3RTaXplID0gaXRlbXMuc2l6ZSgpOwogICAgIEFTU0VSVCgh
KGZvcm1EYXRhTGlzdFNpemUgJSAyKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmb3Jt
RGF0YUxpc3RTaXplOyBpICs9IDIpIHsKLSAgICAgICAgY29uc3QgRm9ybURhdGFMaXN0OjpJdGVt
JiBrZXkgPSBsaXN0W2ldOwotICAgICAgICBjb25zdCBGb3JtRGF0YUxpc3Q6Okl0ZW0mIHZhbHVl
ID0gbGlzdFtpICsgMV07CisgICAgICAgIGNvbnN0IFN0cmluZ0Jsb2JJdGVtKiBrZXkgPSBpdGVt
c1tpXS0+dG9TdHJpbmdCbG9iSXRlbSgpOworICAgICAgICBjb25zdCBSZWZQdHI8QmxvYkl0ZW0+
IHZhbHVlID0gaXRlbXNbaSArIDFdOworICAgICAgICBBU1NFUlQoa2V5KTsKKyAgICAgICAgYm9v
bCBhcHBlbmRWYWx1ZSA9IHRydWU7CiAgICAgICAgIGlmIChpc011bHRpUGFydEZvcm0pIHsKICAg
ICAgICAgICAgIFZlY3RvcjxjaGFyPiBoZWFkZXI7Ci0gICAgICAgICAgICBmb3JtRGF0YUJ1aWxk
ZXIuYmVnaW5NdWx0aVBhcnRIZWFkZXIoaGVhZGVyLCBtX2JvdW5kYXJ5LmRhdGEoKSwga2V5LmRh
dGEoKSk7CisgICAgICAgICAgICBmb3JtRGF0YUJ1aWxkZXIuYmVnaW5NdWx0aVBhcnRIZWFkZXIo
aGVhZGVyLCBtX2JvdW5kYXJ5LmRhdGEoKSwga2V5LT5jc3RyKCkpOwogCiAgICAgICAgICAgICBi
b29sIHNob3VsZEdlbmVyYXRlRmlsZSA9IGZhbHNlOwogICAgICAgICAgICAgLy8gSWYgdGhlIGN1
cnJlbnQgdHlwZSBpcyBGSUxFLCB0aGVuIHdlIGFsc28gbmVlZCB0byBpbmNsdWRlIHRoZSBmaWxl
bmFtZQotICAgICAgICAgICAgaWYgKHZhbHVlLmJsb2IoKSkgewotICAgICAgICAgICAgICAgIGNv
bnN0IFN0cmluZyYgcGF0aCA9IHZhbHVlLmJsb2IoKS0+cGF0aCgpOwotI2lmIEVOQUJMRShCTE9C
X1NMSUNFKQotICAgICAgICAgICAgICAgIFN0cmluZyBmaWxlTmFtZTsKLSAgICAgICAgICAgICAg
ICBpZiAodmFsdWUuYmxvYigpLT5pc0ZpbGUoKSkKLSAgICAgICAgICAgICAgICAgICAgZmlsZU5h
bWUgPSBzdGF0aWNfY2FzdDxGaWxlKj4odmFsdWUuYmxvYigpKS0+ZmlsZU5hbWUoKTsKLSAgICAg
ICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gSWYgYSBibG9iIGlzIHNs
aWNlZCBmcm9tIGEgZmlsZSwgaXQgZG9lcyBub3QgaGF2ZSB0aGUgZmlsZW5hbWUuIEluIHRoaXMg
Y2FzZSwgbGV0J3MgcHJvZHVjZSBhIHVuaXF1ZSBmaWxlbmFtZS4KLSAgICAgICAgICAgICAgICAg
ICAgZmlsZU5hbWUgPSAiQmxvYiIgKyBjcmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGZpbGVOYW1lLnJlcGxhY2UoIi0iLCAiIik7IC8vIEZvciBzYWZ0eSwg
cmVtb3ZlICctJyBmcm9tIHRoZSBmaWxlbmFtZSBzbmNlIHNvbWUgc2VydmVycyBtYXkgbm90IGxp
a2UgaXQuCi0gICAgICAgICAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgICAgICAgICBBU1NFUlQo
dmFsdWUuYmxvYigpLT5pc0ZpbGUoKSk7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIGZpbGVOYW1l
ID0gc3RhdGljX2Nhc3Q8RmlsZSo+KHZhbHVlLmJsb2IoKSktPmZpbGVOYW1lKCk7Ci0jZW5kaWYK
KyAgICAgICAgICAgIGNvbnN0IEZpbGVCbG9iSXRlbSogZmlsZUl0ZW0gPSB2YWx1ZS0+dG9GaWxl
QmxvYkl0ZW0oKTsKKyAgICAgICAgICAgIGlmIChmaWxlSXRlbSkgeworICAgICAgICAgICAgICAg
IGNvbnN0IFN0cmluZyYgcGF0aCA9IGZpbGVJdGVtLT5wYXRoKCk7CisgICAgICAgICAgICAgICAg
U3RyaW5nIGZpbGVOYW1lID0gZmlsZUl0ZW0tPm5hbWUoKTsKIAogICAgICAgICAgICAgICAgIC8v
IExldCB0aGUgYXBwbGljYXRpb24gc3BlY2lmeSBhIGZpbGVuYW1lIGlmIGl0J3MgZ29pbmcgdG8g
Z2VuZXJhdGUgYSByZXBsYWNlbWVudCBmaWxlIGZvciB0aGUgdXBsb2FkLgogICAgICAgICAgICAg
ICAgIGlmICghcGF0aC5pc0VtcHR5KCkpIHsKQEAgLTIxMiwxNCArMjIwLDE3IEBAIHZvaWQgRm9y
bURhdGE6OmFwcGVuZERPTUZvcm1EYXRhKGNvbnN0IERPTUZvcm1EYXRhJiBkb21Gb3JtRGF0YSwg
Ym9vbCBpc011bHRpUGFyCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkR2VuZXJh
dGVGaWxlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lID0gZ2VuZXJhdGVk
RmlsZU5hbWU7CiAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcGF0aCBpcyBlbXB0eSBkbyBub3QgYWRk
IHRoZSBmaWxlIHRvIHRoZSBlbGVtZW50IGxpc3QuCisgICAgICAgICAgICAgICAgICAgIGFwcGVu
ZFZhbHVlID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgLy8g
V2UgaGF2ZSB0byBpbmNsdWRlIHRoZSBmaWxlbmFtZT0iLi4iIHBhcnQgaW4gdGhlIGhlYWRlciwg
ZXZlbiBpZiB0aGUgZmlsZW5hbWUgaXMgZW1wdHkKICAgICAgICAgICAgICAgICBmb3JtRGF0YUJ1
aWxkZXIuYWRkRmlsZW5hbWVUb011bHRpUGFydEhlYWRlcihoZWFkZXIsIGVuY29kaW5nLCBmaWxl
TmFtZSk7CiAKLSAgICAgICAgICAgICAgICAvLyBJZiBhIGJsb2IgaXMgc2xpY2VkIGZyb20gYSBm
aWxlLCBkbyBub3QgYWRkIHRoZSBjb250ZW50IHR5cGUuIAorICAgICAgICAgICAgICAgIC8vIElm
IHRoZSBpdGVtIGlzIHNsaWNlZCBmcm9tIGEgZmlsZSwgZG8gbm90IGFkZCB0aGUgY29udGVudCB0
eXBlLgogI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgICAgICAgICAgICAgIGlmICghZmlsZU5h
bWUuaXNFbXB0eSgpICYmIHZhbHVlLmJsb2IoKS0+aXNGaWxlKCkpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoIWZpbGVOYW1lLmlzRW1wdHkoKSAmJiAhdmFsdWUtPnRvRmlsZVJhbmdlQmxvYkl0ZW0o
KSkgewogI2Vsc2UKICAgICAgICAgICAgICAgICBpZiAoIWZpbGVOYW1lLmlzRW1wdHkoKSkgewog
I2VuZGlmCkBAIC0yMzcsMjUgKzI0OCwyMSBAQCB2b2lkIEZvcm1EYXRhOjphcHBlbmRET01Gb3Jt
RGF0YShjb25zdCBET01Gb3JtRGF0YSYgZG9tRm9ybURhdGEsIGJvb2wgaXNNdWx0aVBhcgogCiAg
ICAgICAgICAgICAvLyBBcHBlbmQgYm9keQogICAgICAgICAgICAgYXBwZW5kRGF0YShoZWFkZXIu
ZGF0YSgpLCBoZWFkZXIuc2l6ZSgpKTsKLSAgICAgICAgICAgIGlmIChzaXplX3QgZGF0YVNpemUg
PSB2YWx1ZS5kYXRhKCkubGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAgYXBwZW5kRGF0YSh2YWx1
ZS5kYXRhKCkuZGF0YSgpLCBkYXRhU2l6ZSk7Ci0gICAgICAgICAgICBlbHNlIGlmICh2YWx1ZS5i
bG9iKCkgJiYgIXZhbHVlLmJsb2IoKS0+cGF0aCgpLmlzRW1wdHkoKSkKLSNpZiBFTkFCTEUoQkxP
Ql9TTElDRSkKLSAgICAgICAgICAgICAgICBhcHBlbmRGaWxlUmFuZ2UodmFsdWUuYmxvYigpLT5w
YXRoKCksIHZhbHVlLmJsb2IoKS0+c3RhcnQoKSwgdmFsdWUuYmxvYigpLT5sZW5ndGgoKSwgdmFs
dWUuYmxvYigpLT5tb2RpZmljYXRpb25UaW1lKCksIHNob3VsZEdlbmVyYXRlRmlsZSk7Ci0jZWxz
ZQotICAgICAgICAgICAgICAgIGFwcGVuZEZpbGUodmFsdWUuYmxvYigpLT5wYXRoKCksIHNob3Vs
ZEdlbmVyYXRlRmlsZSk7Ci0jZW5kaWYKLQorICAgICAgICAgICAgaWYgKGFwcGVuZFZhbHVlKQor
ICAgICAgICAgICAgICAgIG1fZWxlbWVudHMuYXBwZW5kKEZvcm1EYXRhRWxlbWVudCh2YWx1ZSwg
c2hvdWxkR2VuZXJhdGVGaWxlKSk7CiAgICAgICAgICAgICBhcHBlbmREYXRhKCJcclxuIiwgMik7
CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBPbWl0IHRoZSBuYW1lICJpc2luZGV4
IiBpZiBpdCdzIHRoZSBmaXJzdCBmb3JtIGRhdGEgZWxlbWVudC4KICAgICAgICAgICAgIC8vIEZJ
WE1FOiBXaHkgaXMgdGhpcyBhIGdvb2QgcnVsZT8gSXMgdGhpcyBvYnNvbGV0ZSBub3c/Ci0gICAg
ICAgICAgICBpZiAoZW5jb2RlZERhdGEuaXNFbXB0eSgpICYmIGtleS5kYXRhKCkgPT0gImlzaW5k
ZXgiKQotICAgICAgICAgICAgICAgIEZvcm1EYXRhQnVpbGRlcjo6ZW5jb2RlU3RyaW5nQXNGb3Jt
RGF0YShlbmNvZGVkRGF0YSwgdmFsdWUuZGF0YSgpKTsKKyAgICAgICAgICAgIGNvbnN0IFN0cmlu
Z0Jsb2JJdGVtKiBzdHJpbmdWYWx1ZSA9IHZhbHVlLT50b1N0cmluZ0Jsb2JJdGVtKCk7CisgICAg
ICAgICAgICBpZiAoIXN0cmluZ1ZhbHVlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgaWYgKGVuY29kZWREYXRhLmlzRW1wdHkoKSAmJiBrZXktPmNzdHIoKSA9PSAiaXNp
bmRleCIpCisgICAgICAgICAgICAgICAgRm9ybURhdGFCdWlsZGVyOjplbmNvZGVTdHJpbmdBc0Zv
cm1EYXRhKGVuY29kZWREYXRhLCBzdHJpbmdWYWx1ZS0+Y3N0cigpKTsKICAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICBmb3JtRGF0YUJ1aWxkZXIuYWRkS2V5VmFsdWVQYWlyQXNGb3Jt
RGF0YShlbmNvZGVkRGF0YSwga2V5LmRhdGEoKSwgdmFsdWUuZGF0YSgpKTsKKyAgICAgICAgICAg
ICAgICBmb3JtRGF0YUJ1aWxkZXIuYWRkS2V5VmFsdWVQYWlyQXNGb3JtRGF0YShlbmNvZGVkRGF0
YSwga2V5LT5jc3RyKCksIHN0cmluZ1ZhbHVlLT5jc3RyKCkpOwogICAgICAgICB9Ci0gICAgfSAK
KyAgICB9CiAKICAgICBpZiAoaXNNdWx0aVBhcnRGb3JtKQogICAgICAgICBmb3JtRGF0YUJ1aWxk
ZXIuYWRkQm91bmRhcnlUb011bHRpUGFydEhlYWRlcihlbmNvZGVkRGF0YSwgbV9ib3VuZGFyeS5k
YXRhKCksIHRydWUpOwpAQCAtMjcwLDEyICsyNzcsOCBAQCB2b2lkIEZvcm1EYXRhOjpmbGF0dGVu
KFZlY3RvcjxjaGFyPiYgZGF0YSkgY29uc3QKICAgICBzaXplX3QgbiA9IG1fZWxlbWVudHMuc2l6
ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbjsgKytpKSB7CiAgICAgICAgIGNvbnN0
IEZvcm1EYXRhRWxlbWVudCYgZSA9IG1fZWxlbWVudHNbaV07Ci0gICAgICAgIGlmIChlLm1fdHlw
ZSA9PSBGb3JtRGF0YUVsZW1lbnQ6OmRhdGEpIHsKLSAgICAgICAgICAgIHNpemVfdCBvbGRTaXpl
ID0gZGF0YS5zaXplKCk7Ci0gICAgICAgICAgICBzaXplX3QgZGVsdGEgPSBlLm1fZGF0YS5zaXpl
KCk7Ci0gICAgICAgICAgICBkYXRhLmdyb3cob2xkU2l6ZSArIGRlbHRhKTsKLSAgICAgICAgICAg
IG1lbWNweShkYXRhLmRhdGEoKSArIG9sZFNpemUsIGUubV9kYXRhLmRhdGEoKSwgZGVsdGEpOwot
ICAgICAgICB9CisgICAgICAgIGlmIChlLm1fdHlwZSA9PSBGb3JtRGF0YUVsZW1lbnQ6OmRhdGEp
CisgICAgICAgICAgICBkYXRhLmFwcGVuZChlLm1fZGF0YS5kYXRhKCksIHN0YXRpY19jYXN0PHNp
emVfdD4oZS5tX2RhdGEuc2l6ZSgpKSk7CiAgICAgfQogfQogCkBAIC0yODksMTAgKzI5MiwxMCBA
QCBTdHJpbmcgRm9ybURhdGE6OmZsYXR0ZW5Ub1N0cmluZygpIGNvbnN0CiB2b2lkIEZvcm1EYXRh
OjpnZW5lcmF0ZUZpbGVzKERvY3VtZW50KiBkb2N1bWVudCkKIHsKICAgICBBU1NFUlQoIW1faGFz
R2VuZXJhdGVkRmlsZXMpOwotICAgIAorCiAgICAgaWYgKG1faGFzR2VuZXJhdGVkRmlsZXMpCiAg
ICAgICAgIHJldHVybjsKLSAgICAKKwogICAgIFBhZ2UqIHBhZ2UgPSBkb2N1bWVudC0+cGFnZSgp
OwogICAgIGlmICghcGFnZSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzAyLDcgKzMwNSw3IEBAIHZv
aWQgRm9ybURhdGE6OmdlbmVyYXRlRmlsZXMoRG9jdW1lbnQqIGRvY3VtZW50KQogICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbjsgKytpKSB7CiAgICAgICAgIEZvcm1EYXRhRWxlbWVudCYgZSA9
IG1fZWxlbWVudHNbaV07CiAgICAgICAgIGlmIChlLm1fdHlwZSA9PSBGb3JtRGF0YUVsZW1lbnQ6
OmVuY29kZWRGaWxlICYmIGUubV9zaG91bGRHZW5lcmF0ZUZpbGUpIHsKLSAgICAgICAgICAgIGUu
bV9nZW5lcmF0ZWRGaWxlbmFtZSA9IGNsaWVudC0+Z2VuZXJhdGVSZXBsYWNlbWVudEZpbGUoZS5t
X2ZpbGVuYW1lKTsKKyAgICAgICAgICAgIGUubV9nZW5lcmF0ZWRGaWxlbmFtZSA9IGNsaWVudC0+
Z2VuZXJhdGVSZXBsYWNlbWVudEZpbGUoZS5pdGVtKCktPnRvRmlsZUJsb2JJdGVtKCktPnBhdGgo
KSk7CiAgICAgICAgICAgICBtX2hhc0dlbmVyYXRlZEZpbGVzID0gdHJ1ZTsKICAgICAgICAgfQog
ICAgIH0KQEAgLTMxMiw3ICszMTUsNyBAQCB2b2lkIEZvcm1EYXRhOjpyZW1vdmVHZW5lcmF0ZWRG
aWxlc0lmTmVlZGVkKCkKIHsKICAgICBpZiAoIW1faGFzR2VuZXJhdGVkRmlsZXMpCiAgICAgICAg
IHJldHVybjsKLSAgICAgICAgCisKICAgICBzaXplX3QgbiA9IG1fZWxlbWVudHMuc2l6ZSgpOwog
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbjsgKytpKSB7CiAgICAgICAgIEZvcm1EYXRhRWxl
bWVudCYgZSA9IG1fZWxlbWVudHNbaV07CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvRm9ybURhdGEuaCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5oCmlu
ZGV4IGE0MzkwMjM0Nzk2YTBlMmYxNGY1ZDM0OWY1ZGQwZWZmYzBhNGI3Y2QuLjQ4M2E4NDk3NDdk
ODUyZGY1YjM3NzIzZjI0YWE2MjBhZGFkMGEzYjUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9Gb3JtRGF0YS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3Jt
RGF0YS5oCkBAIC0yMCw3NCArMjAsOTAgQEAKICNpZm5kZWYgRm9ybURhdGFfaAogI2RlZmluZSBG
b3JtRGF0YV9oCiAKKyNpbmNsdWRlICJCbG9iSXRlbS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3Ry
aW5nLmgiCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRE9NRm9ybURhdGE7CiBjbGFzcyBE
b2N1bWVudDsKK2NsYXNzIFRleHRFbmNvZGluZzsKIAorLy8gQSB3cmFwcGVyIGNsYXNzIG9mIEJs
b2JJdGVtIGZvciBGb3JtRGF0YS4KIGNsYXNzIEZvcm1EYXRhRWxlbWVudCB7CiBwdWJsaWM6Ci0g
ICAgRm9ybURhdGFFbGVtZW50KCkgOiBtX3R5cGUoZGF0YSkgeyB9Ci0gICAgRm9ybURhdGFFbGVt
ZW50KGNvbnN0IFZlY3RvcjxjaGFyPiYgYXJyYXkpIDogbV90eXBlKGRhdGEpLCBtX2RhdGEoYXJy
YXkpIHsgfQotI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgIEZvcm1EYXRhRWxlbWVudChjb25z
dCBTdHJpbmcmIGZpbGVuYW1lLCBsb25nIGxvbmcgZmlsZVN0YXJ0LCBsb25nIGxvbmcgZmlsZUxl
bmd0aCwgZG91YmxlIGV4cGVjdGVkRmlsZU1vZGlmaWNhdGlvblRpbWUsIGJvb2wgc2hvdWxkR2Vu
ZXJhdGVGaWxlKSA6IG1fdHlwZShlbmNvZGVkRmlsZSksIG1fZmlsZW5hbWUoZmlsZW5hbWUpLCBt
X2ZpbGVTdGFydChmaWxlU3RhcnQpLCBtX2ZpbGVMZW5ndGgoZmlsZUxlbmd0aCksIG1fZXhwZWN0
ZWRGaWxlTW9kaWZpY2F0aW9uVGltZShleHBlY3RlZEZpbGVNb2RpZmljYXRpb25UaW1lKSwgbV9z
aG91bGRHZW5lcmF0ZUZpbGUoc2hvdWxkR2VuZXJhdGVGaWxlKSB7IH0KLSNlbHNlCi0gICAgRm9y
bURhdGFFbGVtZW50KGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGJvb2wgc2hvdWxkR2VuZXJhdGVG
aWxlKSA6IG1fdHlwZShlbmNvZGVkRmlsZSksIG1fZmlsZW5hbWUoZmlsZW5hbWUpLCBtX3Nob3Vs
ZEdlbmVyYXRlRmlsZShzaG91bGRHZW5lcmF0ZUZpbGUpIHsgfQotI2VuZGlmCisgICAgRm9ybURh
dGFFbGVtZW50KCkgOiBtX2RhdGEoMCkgeyB9CisgICAgRm9ybURhdGFFbGVtZW50KFBhc3NSZWZQ
dHI8QmxvYkl0ZW0+IGJsb2JJdGVtLCBib29sIHNob3VsZEdlbmVyYXRlRmlsZSA9IGZhbHNlKTsK
KworICAgIGNvbnN0IEJsb2JJdGVtKiBpdGVtKCkgY29uc3QgeyByZXR1cm4gbV9pdGVtLmdldCgp
OyB9CisKKyAgICBSZWZQdHI8QmxvYkl0ZW0+IG1faXRlbTsKIAorICAgIC8vIEZJWE1FOiBjbGVh
biBtZSB1cC4gIENvZGUgYmVsb3cgYXJlIG1vc3RseSBrZXB0IGZvciBjb21wYXRpYmlsaXR5Lgog
ICAgIGVudW0geyBkYXRhLCBlbmNvZGVkRmlsZSB9IG1fdHlwZTsKLSAgICBWZWN0b3I8Y2hhcj4g
bV9kYXRhOworICAgIHN0cnVjdCBCbG9iSXRlbVdyYXBwZXIgeworICAgICAgICBCbG9iSXRlbVdy
YXBwZXIoY29uc3QgRGF0YUJsb2JJdGVtKiBpdGVtKSA6IG1faXRlbShpdGVtKSB7IH0KKyAgICAg
ICAgc2l6ZV90IHNpemUoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIW1faXRl
bSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxzaXplX3Q+KG1faXRlbS0+c2l6ZSgpKTsKKyAgICAgICAgfQorICAgICAgICBjb25zdCBj
aGFyKiBkYXRhKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFtX2l0ZW0pCisg
ICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gbV9pdGVtLT5kYXRh
KCk7CisgICAgICAgIH0KKyAgICAgICAgY2hhciogcmVsZWFzZUJ1ZmZlcigpIGNvbnN0CisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmICghbV9pdGVtKQorICAgICAgICAgICAgICAgIHJldHVybiAw
OworICAgICAgICAgICAgLy8gRklYTUU6IHJlbGVhc2VCdWZmZXIgYWN0dWFsbHkgbWFrZXMgYSBj
b3B5IGhlcmUuCisgICAgICAgICAgICByZXR1cm4gbV9pdGVtLT5jb3B5QnVmZmVyKCk7CisgICAg
ICAgIH0KKyAgICAgICAgY29uc3QgRGF0YUJsb2JJdGVtKiBtX2l0ZW07CisgICAgfTsKKyAgICBj
b25zdCBCbG9iSXRlbVdyYXBwZXIgbV9kYXRhOwogICAgIFN0cmluZyBtX2ZpbGVuYW1lOwogI2lm
IEVOQUJMRShCTE9CX1NMSUNFKQogICAgIGxvbmcgbG9uZyBtX2ZpbGVTdGFydDsKICAgICBsb25n
IGxvbmcgbV9maWxlTGVuZ3RoOwogICAgIGRvdWJsZSBtX2V4cGVjdGVkRmlsZU1vZGlmaWNhdGlv
blRpbWU7CisKKyAgICBzdGF0aWMgY29uc3QgbG9uZyBsb25nIHRvRW5kT2ZGaWxlOwogI2VuZGlm
CisKICAgICBTdHJpbmcgbV9nZW5lcmF0ZWRGaWxlbmFtZTsKICAgICBib29sIG1fc2hvdWxkR2Vu
ZXJhdGVGaWxlOwogfTsKIAogaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb3JtRGF0YUVs
ZW1lbnQmIGEsIGNvbnN0IEZvcm1EYXRhRWxlbWVudCYgYikKIHsKLSAgICBpZiAoJmEgPT0gJmIp
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAgIGlmIChhLm1fdHlwZSAhPSBiLm1fdHlw
ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChhLm1fZGF0YSAhPSBiLm1fZGF0YSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgIGlmIChh
Lm1fZmlsZW5hbWUgIT0gYi5tX2ZpbGVuYW1lIHx8IGEubV9maWxlU3RhcnQgIT0gYi5tX2ZpbGVT
dGFydCB8fCBhLm1fZmlsZUxlbmd0aCAhPSBiLm1fZmlsZUxlbmd0aCB8fCBhLm1fZXhwZWN0ZWRG
aWxlTW9kaWZpY2F0aW9uVGltZSAhPSBiLm1fZXhwZWN0ZWRGaWxlTW9kaWZpY2F0aW9uVGltZSkK
LSNlbHNlCi0gICAgaWYgKGEubV9maWxlbmFtZSAhPSBiLm1fZmlsZW5hbWUpCi0jZW5kaWYKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGEuaXRl
bSgpLT5lcXVhbHMoYi5pdGVtKCkpOwogfQotIAorCiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IEZvcm1EYXRhRWxlbWVudCYgYSwgY29uc3QgRm9ybURhdGFFbGVtZW50JiBiKQogewogICAg
IHJldHVybiAhKGEgPT0gYik7CiB9Ci0gCisKIGNsYXNzIEZvcm1EYXRhIDogcHVibGljIFJlZkNv
dW50ZWQ8Rm9ybURhdGE+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxGb3JtRGF0
YT4gY3JlYXRlKCk7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGNyZWF0ZShjb25z
dCB2b2lkKiwgc2l6ZV90KTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxGb3JtRGF0YT4gY3JlYXRl
KGNvbnN0IFdURjo6Q1N0cmluZyYpOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZvcm1EYXRhPiBj
cmVhdGUoY29uc3QgVmVjdG9yPGNoYXI+Jik7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8Rm9ybURh
dGE+IGNyZWF0ZShjb25zdCBET01Gb3JtRGF0YSYpOwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZv
cm1EYXRhPiBjcmVhdGVNdWx0aVBhcnQoY29uc3QgRE9NRm9ybURhdGEmLCBEb2N1bWVudCopOwor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZvcm1EYXRhPiBjcmVhdGUoY29uc3QgQmxvYkl0ZW1MaXN0
JiwgY29uc3QgVGV4dEVuY29kaW5nJik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Rm9ybURhdGE+
IGNyZWF0ZU11bHRpUGFydChjb25zdCBCbG9iSXRlbUxpc3QmLCBjb25zdCBUZXh0RW5jb2Rpbmcm
LCBEb2N1bWVudCopOwogICAgIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGNvcHkoKSBjb25zdDsKICAg
ICBQYXNzUmVmUHRyPEZvcm1EYXRhPiBkZWVwQ29weSgpIGNvbnN0OwogICAgIH5Gb3JtRGF0YSgp
OwotICAgIAorCiAgICAgdm9pZCBhcHBlbmREYXRhKGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCk7
CisgICAgdm9pZCBhcHBlbmRJdGVtcyhjb25zdCBCbG9iSXRlbUxpc3QmKTsKKyAgICB2b2lkIGFw
cGVuZFN0cmluZyhjb25zdCBDU3RyaW5nJik7CiAgICAgdm9pZCBhcHBlbmRGaWxlKGNvbnN0IFN0
cmluZyYgZmlsZW5hbWUsIGJvb2wgc2hvdWxkR2VuZXJhdGVGaWxlID0gZmFsc2UpOwogI2lmIEVO
QUJMRShCTE9CX1NMSUNFKQogICAgIHZvaWQgYXBwZW5kRmlsZVJhbmdlKGNvbnN0IFN0cmluZyYg
ZmlsZW5hbWUsIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCwgZG91YmxlIGV4cGVj
dGVkTW9kaWZpY2F0aW9uVGltZSwgYm9vbCBzaG91bGRHZW5lcmF0ZUZpbGUgPSBmYWxzZSk7CkBA
IC0xMTUsOSArMTMxLDEwIEBAIHByaXZhdGU6CiAgICAgRm9ybURhdGEoKTsKICAgICBGb3JtRGF0
YShjb25zdCBGb3JtRGF0YSYpOwogCi0gICAgdm9pZCBhcHBlbmRET01Gb3JtRGF0YShjb25zdCBE
T01Gb3JtRGF0YSYgZG9tRm9ybURhdGEsIGJvb2wgaXNNdWx0aVBhcnRGb3JtLCBEb2N1bWVudCog
ZG9jdW1lbnQpOworICAgIHZvaWQgYXBwZW5kS2V5VmFsdWVQYWlySXRlbXMoY29uc3QgQmxvYkl0
ZW1MaXN0JiwgY29uc3QgVGV4dEVuY29kaW5nJiwgYm9vbCBpc011bHRpUGFydEZvcm0sIERvY3Vt
ZW50Kik7CiAKICAgICBWZWN0b3I8Rm9ybURhdGFFbGVtZW50PiBtX2VsZW1lbnRzOworCiAgICAg
aW50NjRfdCBtX2lkZW50aWZpZXI7CiAgICAgYm9vbCBtX2hhc0dlbmVyYXRlZEZpbGVzOwogICAg
IGJvb2wgbV9hbHdheXNTdHJlYW07CkBAIC0xMzEsNyArMTQ4LDcgQEAgaW5saW5lIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBGb3JtRGF0YSYgYSwgY29uc3QgRm9ybURhdGEmIGIpCiAKIGlubGluZSBi
b29sIG9wZXJhdG9yIT0oY29uc3QgRm9ybURhdGEmIGEsIGNvbnN0IEZvcm1EYXRhJiBiKQogewot
ICAgIHJldHVybiBhLmVsZW1lbnRzKCkgIT0gYi5lbGVtZW50cygpOworICAgIHJldHVybiAhKGEg
PT0gYik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9tYWMvRm9ybURhdGFTdHJlYW1NYWMubW0gYi9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvbWFjL0Zvcm1EYXRhU3RyZWFtTWFjLm1tCmluZGV4IDI3ZWNmZDA4YWQ1YWFh
Yjg3NTZmYTU5NmQ5OTZiZDJmNmVjNWQwM2YuLjI1MmRkZjdmOTdkNWQ4YmY2ZDBjZGQxZDg3NTI4
YWY1NDFlMDczNzggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvRm9y
bURhdGFTdHJlYW1NYWMubW0KKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9Gb3Jt
RGF0YVN0cmVhbU1hYy5tbQpAQCAtMzEsNyArMzEsNiBAQAogI2ltcG9ydCAiY29uZmlnLmgiCiAj
aW1wb3J0ICJGb3JtRGF0YVN0cmVhbU1hYy5oIgogCi0jaW1wb3J0ICJCbG9iLmgiCiAjaW1wb3J0
ICJGaWxlU3lzdGVtLmgiCiAjaW1wb3J0ICJGb3JtRGF0YS5oIgogI2ltcG9ydCAiUmVzb3VyY2VI
YW5kbGUuaCIKQEAgLTE0Miw3ICsxNDEsNyBAQCBzdGF0aWMgdm9pZCBjbG9zZUN1cnJlbnRTdHJl
YW0oRm9ybVN0cmVhbUZpZWxkcyAqZm9ybSkKICAgICAgICAgQ0ZSZWxlYXNlKGZvcm0tPmN1cnJl
bnRTdHJlYW0pOwogICAgICAgICBmb3JtLT5jdXJyZW50U3RyZWFtID0gTlVMTDsKICNpZiBFTkFC
TEUoQkxPQl9TTElDRSkKLSAgICAgICAgZm9ybS0+Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoID0g
QmxvYjo6dG9FbmRPZkZpbGU7CisgICAgICAgIGZvcm0tPmN1cnJlbnRTdHJlYW1SYW5nZUxlbmd0
aCA9IEZvcm1EYXRhRWxlbWVudDo6dG9FbmRPZkZpbGU7CiAjZW5kaWYKICAgICB9CiAgICAgaWYg
KGZvcm0tPmN1cnJlbnREYXRhKSB7CkBAIC0xNTEsNyArMTUwLDcgQEAgc3RhdGljIHZvaWQgY2xv
c2VDdXJyZW50U3RyZWFtKEZvcm1TdHJlYW1GaWVsZHMgKmZvcm0pCiAgICAgfQogfQogCi0vLyBS
ZXR1cm4gZmFsc2UgaWYgd2UgY2Fubm90IGFkdmFuY2UgdGhlIHN0cmVhbS4gQ3VycmVudGx5IHRo
ZSBvbmx5IHBvc3NpYmxlIGZhaWx1cmUgaXMgdGhhdCB0aGUgdW5kZXJseWluZyBmaWxlIGhhcyBi
ZWVuIGNoYW5nZWQgc2luY2UgRmlsZS5zbGljZS4gCisvLyBSZXR1cm4gZmFsc2UgaWYgd2UgY2Fu
bm90IGFkdmFuY2UgdGhlIHN0cmVhbS4gQ3VycmVudGx5IHRoZSBvbmx5IHBvc3NpYmxlIGZhaWx1
cmUgaXMgdGhhdCB0aGUgdW5kZXJseWluZyBmaWxlIGhhcyBiZWVuIHJlbW92ZWQgb3IgY2hhbmdl
ZCBzaW5jZSBGaWxlLnNsaWNlLgogc3RhdGljIGJvb2wgYWR2YW5jZUN1cnJlbnRTdHJlYW0oRm9y
bVN0cmVhbUZpZWxkcyogZm9ybSkKIHsKICAgICBjbG9zZUN1cnJlbnRTdHJlYW0oZm9ybSk7CkBA
IC0xNjEsMjUgKzE2MCwyNSBAQCBzdGF0aWMgYm9vbCBhZHZhbmNlQ3VycmVudFN0cmVhbShGb3Jt
U3RyZWFtRmllbGRzKiBmb3JtKQogCiAgICAgLy8gQ3JlYXRlIHRoZSBuZXcgc3RyZWFtLgogICAg
IEZvcm1EYXRhRWxlbWVudCYgbmV4dElucHV0ID0gZm9ybS0+cmVtYWluaW5nRWxlbWVudHMubGFz
dCgpOworCisgICAgLy8gQ2hlY2sgaWYgdGhlIHVuZGVybHlpbmcgZGF0YSBoYXMgYmVjb21lIHN0
YWxlIChlLmcuIHRoZSBmaWxlIGhhcyBiZWVuIGNoYW5nZWQgc2luY2UgaXRzIHNuYXBzaG90IGhh
cyBiZWVuIHRha2VuKSBvciBub3QuCisgICAgaWYgKCFuZXh0SW5wdXQubV9pdGVtLT5pc1ZhbGlk
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIGlmIChuZXh0SW5wdXQubV90eXBlID09
IEZvcm1EYXRhRWxlbWVudDo6ZGF0YSkgewogICAgICAgICBzaXplX3Qgc2l6ZSA9IG5leHRJbnB1
dC5tX2RhdGEuc2l6ZSgpOwogICAgICAgICBjaGFyKiBkYXRhID0gbmV4dElucHV0Lm1fZGF0YS5y
ZWxlYXNlQnVmZmVyKCk7CiAgICAgICAgIGZvcm0tPmN1cnJlbnRTdHJlYW0gPSBDRlJlYWRTdHJl
YW1DcmVhdGVXaXRoQnl0ZXNOb0NvcHkoMCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVSW50OCo+
KGRhdGEpLCBzaXplLCBrQ0ZBbGxvY2F0b3JOdWxsKTsKICAgICAgICAgZm9ybS0+Y3VycmVudERh
dGEgPSBkYXRhOwogICAgIH0gZWxzZSB7Ci0jaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgICAg
IC8vIENoZWNrIGlmIHRoZSBmaWxlIGhhcyBiZWVuIGNoYW5nZWQgb3Igbm90IGlmIHJlcXVpcmVk
LgotICAgICAgICBpZiAobmV4dElucHV0Lm1fZXhwZWN0ZWRGaWxlTW9kaWZpY2F0aW9uVGltZSAh
PSBCbG9iOjpkb05vdENoZWNrRmlsZUNoYW5nZSkgewotICAgICAgICAgICAgdGltZV90IGZpbGVN
b2RpZmljYXRpb25UaW1lOwotICAgICAgICAgICAgaWYgKCFnZXRGaWxlTW9kaWZpY2F0aW9uVGlt
ZShuZXh0SW5wdXQubV9maWxlbmFtZSwgZmlsZU1vZGlmaWNhdGlvblRpbWUpIHx8IGZpbGVNb2Rp
ZmljYXRpb25UaW1lICE9IHN0YXRpY19jYXN0PHRpbWVfdD4obmV4dElucHV0Lm1fZXhwZWN0ZWRG
aWxlTW9kaWZpY2F0aW9uVGltZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICB9Ci0jZW5kaWYKLQogICAgICAgICBjb25zdCBTdHJpbmcmIHBhdGggPSBuZXh0SW5wdXQu
bV9zaG91bGRHZW5lcmF0ZUZpbGUgPyBuZXh0SW5wdXQubV9nZW5lcmF0ZWRGaWxlbmFtZSA6IG5l
eHRJbnB1dC5tX2ZpbGVuYW1lOwogICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGZpbGVu
YW1lKEFkb3B0Q0YsIHBhdGguY3JlYXRlQ0ZTdHJpbmcoKSk7CiAgICAgICAgIFJldGFpblB0cjxD
RlVSTFJlZj4gZmlsZVVSTChBZG9wdENGLCBDRlVSTENyZWF0ZVdpdGhGaWxlU3lzdGVtUGF0aCgw
LCBmaWxlbmFtZS5nZXQoKSwga0NGVVJMUE9TSVhQYXRoU3R5bGUsIEZBTFNFKSk7CiAgICAgICAg
IGZvcm0tPmN1cnJlbnRTdHJlYW0gPSBDRlJlYWRTdHJlYW1DcmVhdGVXaXRoRmlsZSgwLCBmaWxl
VVJMLmdldCgpKTsKKyAgICAgICAgaWYgKCFmb3JtLT5jdXJyZW50U3RyZWFtKSB7CisgICAgICAg
ICAgICAvLyBUaGUgZmlsZSBtdXN0IGhhdmUgYmVlbiByZW1vdmVkIG9yIGJlY29tZSB1bnJlYWRh
YmxlLgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CiAjaWYgRU5BQkxFKEJM
T0JfU0xJQ0UpCiAgICAgICAgIGlmIChuZXh0SW5wdXQubV9maWxlU3RhcnQgPiAwKSB7CiAgICAg
ICAgICAgICBDRk51bWJlclJlZiBwb3NpdGlvbiA9IENGTnVtYmVyQ3JlYXRlKDAsIGtDRk51bWJl
ckxvbmdMb25nVHlwZSwgJm5leHRJbnB1dC5tX2ZpbGVTdGFydCk7CkBAIC0yMjIsNyArMjIxLDcg
QEAgc3RhdGljIHZvaWQqIGZvcm1DcmVhdGUoQ0ZSZWFkU3RyZWFtUmVmIHN0cmVhbSwgdm9pZCog
Y29udGV4dCkKICAgICBGb3JtU3RyZWFtRmllbGRzKiBuZXdJbmZvID0gbmV3IEZvcm1TdHJlYW1G
aWVsZHM7CiAgICAgbmV3SW5mby0+Y3VycmVudFN0cmVhbSA9IE5VTEw7CiAjaWYgRU5BQkxFKEJM
T0JfU0xJQ0UpCi0gICAgbmV3SW5mby0+Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoID0gQmxvYjo6
dG9FbmRPZkZpbGU7CisgICAgbmV3SW5mby0+Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoID0gRm9y
bURhdGFFbGVtZW50Ojp0b0VuZE9mRmlsZTsKICNlbmRpZgogICAgIG5ld0luZm8tPmN1cnJlbnRE
YXRhID0gMDsKICAgICBuZXdJbmZvLT5mb3JtU3RyZWFtID0gc3RyZWFtOyAvLyBEb24ndCByZXRh
aW4uIFRoYXQgd291bGQgY3JlYXRlIGEgcmVmZXJlbmNlIGN5Y2xlLgpAQCAtMjcwLDcgKzI2OSw3
IEBAIHN0YXRpYyBDRkluZGV4IGZvcm1SZWFkKENGUmVhZFN0cmVhbVJlZiBzdHJlYW0sIFVJbnQ4
KiBidWZmZXIsIENGSW5kZXggYnVmZmVyTGVuCiAgICAgd2hpbGUgKGZvcm0tPmN1cnJlbnRTdHJl
YW0pIHsKICAgICAgICAgQ0ZJbmRleCBieXRlc1RvUmVhZCA9IGJ1ZmZlckxlbmd0aDsKICNpZiBF
TkFCTEUoQkxPQl9TTElDRSkKLSAgICAgICAgaWYgKGZvcm0tPmN1cnJlbnRTdHJlYW1SYW5nZUxl
bmd0aCAhPSBCbG9iOjp0b0VuZE9mRmlsZSAmJiBmb3JtLT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5n
dGggPCBieXRlc1RvUmVhZCkKKyAgICAgICAgaWYgKGZvcm0tPmN1cnJlbnRTdHJlYW1SYW5nZUxl
bmd0aCAhPSBGb3JtRGF0YUVsZW1lbnQ6OnRvRW5kT2ZGaWxlICYmIGZvcm0tPmN1cnJlbnRTdHJl
YW1SYW5nZUxlbmd0aCA8IGJ5dGVzVG9SZWFkKQogICAgICAgICAgICAgYnl0ZXNUb1JlYWQgPSBz
dGF0aWNfY2FzdDxDRkluZGV4Pihmb3JtLT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5ndGgpOwogI2Vu
ZGlmCiAgICAgICAgIENGSW5kZXggYnl0ZXNSZWFkID0gQ0ZSZWFkU3RyZWFtUmVhZChmb3JtLT5j
dXJyZW50U3RyZWFtLCBidWZmZXIsIGJ5dGVzVG9SZWFkKTsKQEAgLTI4Myw3ICsyODIsNyBAQCBz
dGF0aWMgQ0ZJbmRleCBmb3JtUmVhZChDRlJlYWRTdHJlYW1SZWYgc3RyZWFtLCBVSW50OCogYnVm
ZmVyLCBDRkluZGV4IGJ1ZmZlckxlbgogICAgICAgICAgICAgKmF0RU9GID0gRkFMU0U7CiAgICAg
ICAgICAgICBmb3JtLT5ieXRlc1NlbnQgKz0gYnl0ZXNSZWFkOwogI2lmIEVOQUJMRShCTE9CX1NM
SUNFKQotICAgICAgICAgICAgaWYgKGZvcm0tPmN1cnJlbnRTdHJlYW1SYW5nZUxlbmd0aCAhPSBC
bG9iOjp0b0VuZE9mRmlsZSkKKyAgICAgICAgICAgIGlmIChmb3JtLT5jdXJyZW50U3RyZWFtUmFu
Z2VMZW5ndGggIT0gRm9ybURhdGFFbGVtZW50Ojp0b0VuZE9mRmlsZSkKICAgICAgICAgICAgICAg
ICBmb3JtLT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5ndGggLT0gYnl0ZXNSZWFkOwogI2VuZGlmCiAK
QEAgLTQwMCw3ICszOTksNyBAQCB2b2lkIHNldEhUVFBCb2R5KE5TTXV0YWJsZVVSTFJlcXVlc3Qg
KnJlcXVlc3QsIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGZvcm1EYXRhKQogICAgICAgICBlbHNlIHsK
ICNpZiBFTkFCTEUoQkxPQl9TTElDRSkKICAgICAgICAgICAgIC8vIElmIHdlJ3JlIHNlbmRpbmcg
dGhlIGZpbGUgcmFuZ2UsIHVzZSB0aGUgZXhpc3RpbmcgcmFuZ2UgbGVuZ3RoIGZvciBub3cuIFdl
IHdpbGwgZGV0ZWN0IGlmIHRoZSBmaWxlIGhhcyBiZWVuIGNoYW5nZWQgcmlnaHQgYmVmb3JlIHdl
IHJlYWQgdGhlIGZpbGUgYW5kIGFib3J0IHRoZSBvcGVyYXRpb24gaWYgbmVjZXNzYXJ5LgotICAg
ICAgICAgICAgaWYgKGVsZW1lbnQubV9maWxlTGVuZ3RoICE9IEJsb2I6OnRvRW5kT2ZGaWxlKSB7
CisgICAgICAgICAgICBpZiAoZWxlbWVudC5tX2ZpbGVMZW5ndGggIT0gRm9ybURhdGFFbGVtZW50
Ojp0b0VuZE9mRmlsZSkgewogICAgICAgICAgICAgICAgIGxlbmd0aCArPSBlbGVtZW50Lm1fZmls
ZUxlbmd0aDsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KZGlmZiAt
LWdpdCBhL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcCBiL1dlYkNvcmUveG1sL1hNTEh0
dHBSZXF1ZXN0LmNwcAppbmRleCA1Y2RlMjRkZTI5ZGI0NDIxMDAwMWEzMDIzMjQ0Y2E0Y2NkMjVj
ZmJiLi44MzFhZGE5ODExMjEzOTQyYTgwNDg2NGRhNTdmMGEzOWM0YmNjMjhlIDEwMDY0NAotLS0g
YS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKKysrIGIvV2ViQ29yZS94bWwvWE1MSHR0
cFJlcXVlc3QuY3BwCkBAIC00NzgsMTEgKzQ3OCw3IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OnNl
bmQoQmxvYiogYm9keSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgICAgIC8vIEZJWE1FOiBTaG91
bGQgd2Ugc2V0IGEgQ29udGVudC1UeXBlIGlmIG9uZSBpcyBub3Qgc2V0LgogICAgICAgICAvLyBG
SVhNRTogYWRkIHN1cHBvcnQgZm9yIHVwbG9hZGluZyBidW5kbGVzLgogICAgICAgICBtX3JlcXVl
c3RFbnRpdHlCb2R5ID0gRm9ybURhdGE6OmNyZWF0ZSgpOwotI2lmIEVOQUJMRShCTE9CX1NMSUNF
KQotICAgICAgICBtX3JlcXVlc3RFbnRpdHlCb2R5LT5hcHBlbmRGaWxlUmFuZ2UoYm9keS0+cGF0
aCgpLCBib2R5LT5zdGFydCgpLCBib2R5LT5sZW5ndGgoKSwgYm9keS0+bW9kaWZpY2F0aW9uVGlt
ZSgpKTsKLSNlbHNlCi0gICAgICAgIG1fcmVxdWVzdEVudGl0eUJvZHktPmFwcGVuZEZpbGUoYm9k
eS0+cGF0aCgpLCBmYWxzZSk7Ci0jZW5kaWYKKyAgICAgICAgbV9yZXF1ZXN0RW50aXR5Qm9keS0+
YXBwZW5kSXRlbXMoYm9keS0+aXRlbXMoKSk7CiAgICAgfQogCiAgICAgY3JlYXRlUmVxdWVzdChl
Yyk7CkBAIC00OTQsNyArNDkwLDcgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6c2VuZChET01Gb3Jt
RGF0YSogYm9keSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlm
IChtX21ldGhvZCAhPSAiR0VUIiAmJiBtX21ldGhvZCAhPSAiSEVBRCIgJiYgbV91cmwucHJvdG9j
b2xJbkhUVFBGYW1pbHkoKSkgewotICAgICAgICBtX3JlcXVlc3RFbnRpdHlCb2R5ID0gRm9ybURh
dGE6OmNyZWF0ZU11bHRpUGFydCgqYm9keSwgZG9jdW1lbnQoKSk7CisgICAgICAgIG1fcmVxdWVz
dEVudGl0eUJvZHkgPSBGb3JtRGF0YTo6Y3JlYXRlTXVsdGlQYXJ0KGJvZHktPml0ZW1zKCksIGJv
ZHktPmVuY29kaW5nKCksIGRvY3VtZW50KCkpOwogCiAgICAgICAgIC8vIFdlIG5lZWQgdG8gYXNr
IHRoZSBjbGllbnQgdG8gcHJvdmlkZSB0aGUgZ2VuZXJhdGVkIGZpbGUgbmFtZXMgaWYgbmVlZGVk
LiBXaGVuIEZvcm1EYXRhIGZpbGxzIHRoZSBlbGVtZW50CiAgICAgICAgIC8vIGZvciB0aGUgZmls
ZSwgaXQgY291bGQgc2V0IGEgZmxhZyB0byB1c2UgdGhlIGdlbmVyYXRlZCBmaWxlIG5hbWUsIGku
ZS4gYSBwYWNrYWdlIGZpbGUgb24gTWFjLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggNjU3NThmZDkzYTFiZmZm
OWI2OTJmOTk3Y2Y2YTlkYWVmNzEzM2IxZS4uYmFmYjE1MTAwZTk3M2E0NDdhMjYxMDI1NDZhYmE5
ZTUzNDYwZTZkOCAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTAtMDYtMDMgIEtp
bnVrbyBZYXN1ZGEgIDxraW51a29AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yIEZvcm1EYXRhIGFuZCBCbG9iIGZv
ciBiZXR0ZXIgc3VwcG9ydCBvZiBCbG9icyBzeW50aGVzaXplZCBieSBCbG9iQnVpbGRlci4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5MDgzCisKKyAg
ICAgICAgUmVwbGFjZSBGb3JtRGF0YUxpc3Q6Okl0ZW0gbGlzdCB3aXRoIEJsb2JJdGVtTGlzdCB0
byBnZXQgaXQgY29tcGlsZWQKKyAgICAgICAgd2l0aCB0aGUgcmVmYWN0b3JpbmcgaW4gRm9ybURh
dGFMaXN0LgorCisgICAgICAgICogc3JjL1dlYlNlYXJjaGFibGVGb3JtRGF0YS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIYXNTdWl0YWJsZVRleHRFbGVtZW50KToKKwogMjAxMC0wNi0wMiAgVG9u
eSBDaGFuZyAgPHRvbnlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtlbnQg
VGFtdXJhLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZWFyY2hhYmxlRm9y
bURhdGEuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZWFyY2hhYmxlRm9ybURhdGEuY3Bw
CmluZGV4IDYwMWE0OTczODJkMDhmYmM4ZjBkODUxNmYwZjNhYWI5NTUwMjFmMTkuLjRlY2MyZTQy
ZDU1ZTEwODA0MTVhMmI2ZjQ5YzRlYzE2NDk3YTY1MDQgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViU2VhcmNoYWJsZUZvcm1EYXRhLmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlNlYXJjaGFibGVGb3JtRGF0YS5jcHAKQEAgLTE4Nyw4ICsxODcsOCBAQCBib29sIEhh
c1N1aXRhYmxlVGV4dEVsZW1lbnQoY29uc3QgSFRNTEZvcm1FbGVtZW50KiBmb3JtLCBWZWN0b3I8
Y2hhcj4qIGVuY29kZWRTdAogICAgICAgaWYgKCFmb3JtRWxlbWVudC0+YXBwZW5kRm9ybURhdGEo
ZGF0YUxpc3QsIGZhbHNlKSkKICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgY29uc3QgVmVj
dG9yPEZvcm1EYXRhTGlzdDo6SXRlbT4mIGl0ZW1MaXN0ID0gZGF0YUxpc3QubGlzdCgpOwotICAg
ICAgaWYgKGlzVGV4dEVsZW1lbnQgJiYgIWl0ZW1MaXN0LmlzRW1wdHkoKSkgeworICAgICAgY29u
c3QgQmxvYkl0ZW1MaXN0JiBpdGVtcyA9IGRhdGFMaXN0Lml0ZW1zKCk7CisgICAgICBpZiAoaXNU
ZXh0RWxlbWVudCAmJiAhaXRlbXMuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgaWYgKHRleHRFbGVt
ZW50KSB7CiAgICAgICAgICAgICAgIC8vIFRoZSBhdXRvLWNvbXBsZXRlIGJhciBvbmx5IGtub3dz
IGhvdyB0byBmaWxsIGluIG9uZSB2YWx1ZS4KICAgICAgICAgICAgICAgLy8gVGhpcyBmb3JtIGhh
cyBtdWx0aXBsZSBmaWVsZHM7IGRvbid0IHRyZWF0IGl0IGFzIHNlYXJjaGFibGUuCkBAIC0xOTYs
MjAgKzE5NiwyMyBAQCBib29sIEhhc1N1aXRhYmxlVGV4dEVsZW1lbnQoY29uc3QgSFRNTEZvcm1F
bGVtZW50KiBmb3JtLCBWZWN0b3I8Y2hhcj4qIGVuY29kZWRTdAogICAgICAgICAgIH0KICAgICAg
ICAgICB0ZXh0RWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihmb3JtRWxl
bWVudCk7CiAgICAgICB9Ci0gICAgICBmb3IgKFZlY3RvcjxGb3JtRGF0YUxpc3Q6Okl0ZW0+Ojpj
b25zdF9pdGVyYXRvciBqKGl0ZW1MaXN0LmJlZ2luKCkpOyBqICE9IGl0ZW1MaXN0LmVuZCgpOyAr
K2opIHsKKyAgICAgIGZvciAoQmxvYkl0ZW1MaXN0Ojpjb25zdF9pdGVyYXRvciBqKGl0ZW1zLmJl
Z2luKCkpOyBqICE9IGl0ZW1zLmVuZCgpOyArK2opIHsKKyAgICAgICAgICBjb25zdCBTdHJpbmdC
bG9iSXRlbSogaXRlbSA9ICgqaiktPnRvU3RyaW5nQmxvYkl0ZW0oKTsKKyAgICAgICAgICBpZiAo
IWl0ZW0pCisgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgIC8vIEhhbmRsZSBJU0lO
REVYIC8gPGlucHV0IG5hbWU9aXNpbmRleD4gc3BlY2lhbGx5LCBidXQgb25seSBpZiBpdCdzCiAg
ICAgICAgICAgLy8gdGhlIGZpcnN0IGVudHJ5LgotICAgICAgICAgIGlmICghZW5jb2RlZFN0cmlu
Zy0+aXNFbXB0eSgpIHx8IGotPmRhdGEoKSAhPSAiaXNpbmRleCIpIHsKKyAgICAgICAgICBpZiAo
IWVuY29kZWRTdHJpbmctPmlzRW1wdHkoKSB8fCBpdGVtLT5jc3RyKCkgIT0gImlzaW5kZXgiKSB7
CiAgICAgICAgICAgICAgIGlmICghZW5jb2RlZFN0cmluZy0+aXNFbXB0eSgpKQogICAgICAgICAg
ICAgICAgICAgZW5jb2RlZFN0cmluZy0+YXBwZW5kKCcmJyk7Ci0gICAgICAgICAgICAgIEZvcm1E
YXRhQnVpbGRlcjo6ZW5jb2RlU3RyaW5nQXNGb3JtRGF0YSgqZW5jb2RlZFN0cmluZywgai0+ZGF0
YSgpKTsKKyAgICAgICAgICAgICAgRm9ybURhdGFCdWlsZGVyOjplbmNvZGVTdHJpbmdBc0Zvcm1E
YXRhKCplbmNvZGVkU3RyaW5nLCBpdGVtLT5jc3RyKCkpOwogICAgICAgICAgICAgICBlbmNvZGVk
U3RyaW5nLT5hcHBlbmQoJz0nKTsKICAgICAgICAgICB9CiAgICAgICAgICAgKytqOwogICAgICAg
ICAgIGlmIChmb3JtRWxlbWVudCA9PSB0ZXh0RWxlbWVudCkKICAgICAgICAgICAgICAgZW5jb2Rl
ZFN0cmluZy0+YXBwZW5kKCJ7c2VhcmNoVGVybXN9IiwgMTMpOwogICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgRm9ybURhdGFCdWlsZGVyOjplbmNvZGVTdHJpbmdBc0Zvcm1EYXRhKCplbmNv
ZGVkU3RyaW5nLCBqLT5kYXRhKCkpOworICAgICAgICAgICAgICBGb3JtRGF0YUJ1aWxkZXI6OmVu
Y29kZVN0cmluZ0FzRm9ybURhdGEoKmVuY29kZWRTdHJpbmcsIGl0ZW0tPmNzdHIoKSk7CiAgICAg
ICB9CiAgICAgfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57922</attachid>
            <date>2010-06-04 15:32:03 -0700</date>
            <delta_ts>2010-06-04 17:40:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-39083-20100604153201.patch</filename>
            <type>text/plain</type>
            <size>68240</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CmluZGV4IDFhZGNhZGVjMTBlYjI5M2E3NzNjZTk5YTA0ZjFjYjVlYTE2OTEwMTIuLmU0Nzdl
MjcwODRjYmQ1ZmZkYmJiOWU2NjhlNDI5NzRmMmFhYmQ2MWEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
Q01ha2VMaXN0cy50eHQKKysrIGIvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTEyMiw2ICsx
MTIyLDcgQEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAgIHBhZ2UvYW5pbWF0aW9uL0tleWZyYW1l
QW5pbWF0aW9uLmNwcAogCiAgICAgcGxhdGZvcm0vQXJlbmEuY3BwCisgICAgcGxhdGZvcm0vQmxv
Ykl0ZW0uY3BwCiAgICAgcGxhdGZvcm0vQ29udGVudFR5cGUuY3BwCiAgICAgcGxhdGZvcm0vQ29u
dGV4dE1lbnUuY3BwCiAgICAgcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGNiYTdmMDI1
MDlkY2FlODUxYjQ3NGM1OWI3Zjk4NjIyODJjNTI4NzguLmU4ZmVhMDg2MWRjYWQwM2VjNTEyZGQ3
OTQ4ODM3NjU0NTc3ZmJhYTkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dl
YkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODMgQEAKKzIwMTAtMDYtMDMgIEtpbnVrbyBZYXN1
ZGEgIDxraW51a29AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yIEZvcm1EYXRhIGFuZCBCbG9iIGZvciBiZXR0ZXIg
c3VwcG9ydCBvZiBCbG9icyBzeW50aGVzaXplZCBieSBCbG9iQnVpbGRlci4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5MDgzCisKKyAgICAgICAgLSBJ
bnRyb2R1Y2VzIGEgbmV3IGNsYXNzIEJsb2JJdGVtIGFzIGEgYmFzaWMgY29tcG9uZW50IG9mIEJs
b2IgYW5kCisgICAgICAgICAgRm9ybURhdGFMaXN0IGFuZCBtYWtlcyBCbG9iIGFzIGEgY29sbGVj
dGlvbiBvZiBCbG9iSXRlbXMuCisgICAgICAgIC0gRmlsZSB3b3VsZCBiZWNvbWUgYSBzcGVjaWFs
IHR5cGUgb2YgQmxvYiB0aGF0IGNvbnRhaW5zIG9ubHkgb25lCisgICAgICAgICAgRmlsZUJsb2JJ
dGVtLgorICAgICAgICAtIEZpeCB0aGUgZGVwZW5kZW5jeSB2aW9sYXRpb24gaW4gRm9ybURhdGEg
c28gdGhhdCB0aGUgZmlsZXMgdW5kZXIKKyAgICAgICAgICBwbGF0Zm9ybS8gZG8gbm90IGluY2x1
ZGUgYW55IGh0bWwvIGZpbGVzLgorCisgICAgICAgIFRoZSBwYXRjaCBkb2Vzbid0IHN1cHBvcnQg
dGhlIGxhdGVzdCBGaWxlIEFQSSBjaGFuZ2VzIChlLmcuIHR5cGUsCisgICAgICAgIHVybCBhbmQg
c2xpY2UncyB0eXBlIHBhcmFtZXRlcnMpIGFuZCBzaG91bGQgbm90IGNoYW5nZSBhbnkgb2YgaXRz
CisgICAgICAgIGV4aXN0aW5nIGJlaGF2aW9ycy4KKworICAgICAgICBUaGUgZXhpc3RpbmcgdGVz
dHMgc2hvdWxkIGJlIGFibGUgdG8gYmUgdXNlZCBmb3IgcmVncmVzc2lvbi4KKworICAgICAgICAq
IENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdl
YkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisgICAgICAgICogaHRtbC9CbG9iLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJs
b2I6OkJsb2IpOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6c2l6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpCbG9iOjpwYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OmFwcGVuZCk6CisgICAg
ICAgIChXZWJDb3JlOjpCbG9iOjpzbGljZSk6CisgICAgICAgICogaHRtbC9CbG9iLmg6CisgICAg
ICAgIChXZWJDb3JlOjpCbG9iOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6dHlw
ZSk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjppdGVtcyk6CisgICAgICAgIChXZWJDb3JlOjpC
bG9iOjpCbG9iKToKKyAgICAgICAgKiBodG1sL0ZpbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RmlsZTo6RmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlOjpuYW1lKToKKyAgICAgICAgKiBo
dG1sL0ZpbGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGU6OmZpbGVOYW1lKToKKyAgICAgICAg
KiBodG1sL0ZpbGVSZWFkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVJlYWRlcjo6cmVh
ZEFzQmluYXJ5U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVSZWFkZXI6OnJlYWRBc1Rl
eHQpOgorICAgICAgICAqIGh0bWwvRmlsZVN0cmVhbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
aWxlU3RyZWFtOjpvcGVuRm9yUmVhZCk6CisgICAgICAgICogaHRtbC9Gb3JtRGF0YUxpc3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGFMaXN0OjphcHBlbmRTdHJpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9ybURhdGFMaXN0OjphcHBlbmRCbG9iKToKKyAgICAgICAgKiBodG1sL0Zv
cm1EYXRhTGlzdC5oOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGFMaXN0OjppdGVtcyk6Cisg
ICAgICAgICogaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TEZvcm1FbGVtZW50OjpjcmVhdGVGb3JtRGF0YSk6CisgICAgICAgICogaHRtbC9IVE1MUHJvZ3Jl
c3NFbGVtZW50LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9CbG9iSXRlbS5jcHA6IEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL0Jsb2JJdGVtLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L25ldHdvcmsvRm9ybURhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGFFbGVtZW50
OjpGb3JtRGF0YUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YTo6Y3JlYXRlTXVsdGlQYXJ0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZvcm1EYXRhOjpkZWVwQ29weSk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0
YTo6YXBwZW5kRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YTo6YXBwZW5kU3RyaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjphcHBlbmRGaWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OkZvcm1EYXRhOjphcHBlbmRGaWxlUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Rm9y
bURhdGE6OmFwcGVuZEl0ZW1zKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjphcHBlbmRJ
dGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjphcHBlbmRLZXlWYWx1ZVBhaXJJdGVt
cyk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5oOgorICAgICAgICAoV2Vi
Q29yZTo6b3BlcmF0b3IhPSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9tYWMvRm9ybURh
dGFTdHJlYW1NYWMubW06CisgICAgICAgIChXZWJDb3JlOjpjbG9zZUN1cnJlbnRTdHJlYW0pOgor
ICAgICAgICAoV2ViQ29yZTo6YWR2YW5jZUN1cnJlbnRTdHJlYW0pOgorICAgICAgICAoV2ViQ29y
ZTo6Zm9ybUNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpmb3JtUmVhZCk6CisgICAgICAgIChX
ZWJDb3JlOjpzZXRIVFRQQm9keSk6CisgICAgICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjpzZW5kKToKKwogMjAxMC0wNi0wNCAg
TmlraXRhIFZhc2lseWV2ICA8bWVAZWx2MXMucnU+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgUGF2
ZWwgRmVsZG1hbi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0gYi9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmFtCmluZGV4IDRkY2U2MmZkYmM2NDZkODY5MmI2ZjU0NzA1MmNlNzhhMWRk
OTYzNmYuLjNmYmYxZDkyNTg2MDI2NTg1MjM1NTUxMTE2YjViNDE0NjhhYzNlY2EgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpA
QCAtMTU1OSw2ICsxNTU5LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3BsYXRm
b3JtL0FyZW5hLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9BcmVuYS5oIFwKIAlXZWJDb3JlL3Bs
YXRmb3JtL0F1dG9kcmFpbmVkUG9vbC5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL0Jsb2JJdGVtLmNw
cCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9CbG9iSXRlbS5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL0Nv
bnRlbnRUeXBlLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9Db250ZW50VHlwZS5oIFwKIAlXZWJD
b3JlL3BsYXRmb3JtL0NvbnRleHRNZW51LmNwcCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaSBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDVjN2IyNThkNTA2ZTA1OGViNjVl
NjRjN2EzNTZkMDE4NWYwOTBkNzMuLjUzNWRlY2M0NTE4NWIwMTAzYmIyMDU3M2U2ZTkwZjZiYTE3
YjEzMTAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1dlYkNvcmUvV2Vi
Q29yZS5neXBpCkBAIC0yODgwLDYgKzI4ODAsOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL0Fy
ZW5hLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vQXJlbmEuaCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vQXV0b2RyYWluZWRQb29sLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL0Jsb2JJ
dGVtLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vQmxvYkl0ZW0uaCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vQ29udGVudFR5cGUuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9Db250
ZW50VHlwZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9Db250ZXh0TWVudS5jcHAnLApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXgg
YzZmNzljMzdjMWUwMmZkMWFmNzAyZDFkNTJlZjJmZjQ5ODQ5Yjc1My4uMzRiNzliNGI0YzkzNzU2
OTk2ZDE2ZDI5MGMxNjI3OWM5OGEzNTRhMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnBy
bworKysgYi9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC04MTUsNiArODE1LDcgQEAgU09VUkNFUyAr
PSBcCiAgICAgcGxhdGZvcm0vYW5pbWF0aW9uL0FuaW1hdGlvbi5jcHAgXAogICAgIHBsYXRmb3Jt
L2FuaW1hdGlvbi9BbmltYXRpb25MaXN0LmNwcCBcCiAgICAgcGxhdGZvcm0vQXJlbmEuY3BwIFwK
KyAgICBwbGF0Zm9ybS9CbG9iSXRlbS5jcHAgXAogICAgIHBsYXRmb3JtL3RleHQvQmFzZTY0LmNw
cCBcCiAgICAgcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5jcHAgXAogICAgIHBsYXRmb3JtL0Nv
bnRlbnRUeXBlLmNwcCBcCkBAIC0xNTY0LDYgKzE1NjUsNyBAQCBIRUFERVJTICs9IFwKICAgICBw
bGF0Zm9ybS9hbmltYXRpb24vQW5pbWF0aW9uLmggXAogICAgIHBsYXRmb3JtL2FuaW1hdGlvbi9B
bmltYXRpb25MaXN0LmggXAogICAgIHBsYXRmb3JtL0FyZW5hLmggXAorICAgIHBsYXRmb3JtL0Js
b2JJdGVtLmggXAogICAgIHBsYXRmb3JtL0NvbnRlbnRUeXBlLmggXAogICAgIHBsYXRmb3JtL0Nv
bnRleHRNZW51LmggXAogICAgIHBsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmggXApkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1dlYkNvcmUvV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggMGI5NDY3YmY0NWU3NzZhNjAyOTYxMDk5
NjA0MTRlNjA2NDhiMDE0Mi4uY2NiNmVmOTQ2ZjYwYmUzYWNiYWJhYzA0NTA1OWI2NDU3Mzk1OGM2
MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysg
Yi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC0yMjM2OSw2ICsyMjM2
OSwxNCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRo
PSIuLlxwbGF0Zm9ybVxCbG9iSXRlbS5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZp
bGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxCbG9iSXRlbS5oIg0KKwkJCQk+DQor
CQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cQ29u
dGVudFR5cGUuY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNGRkNmQ4NTM3MTJiZjI1ZjZmNjA3YjA4MzI0MjJj
ZGVkNGIwYjRkZS4uZTk5ZDNmODljZjIxNWI4MjhhMDYxMjg5ZmU1ZTEwN2JlZjg5NmM0NCAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTIyNzksNiArMjI3
OSw4IEBACiAJCTg5NTI1M0REMTE2QzRFRjUwMENBQkYwMCAvKiBGaWxlU3RyZWFtUHJveHkuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg5NTI1M0RCMTE2
QzRFRjUwMENBQkYwMCAvKiBGaWxlU3RyZWFtUHJveHkuaCAqLzsgfTsKIAkJODk1MjUzREYxMTZD
NEYwNjAwQ0FCRjAwIC8qIEZpbGVUaHJlYWRUYXNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4OTUyNTNERTExNkM0RjA2MDBDQUJGMDAgLyogRmlsZVRo
cmVhZFRhc2suaCAqLzsgfTsKIAkJOEZBQzc3NEQxMTk4NzJDQjAwMTVBRTk0IC8qIEpTTWFpblRo
cmVhZEV4ZWNTdGF0ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA4RjkzNEQ4NDExODlGMUVFMDA1MDhENUQgLyogSlNNYWluVGhyZWFkRXhlY1N0YXRl
LmNwcCAqLzsgfTsKKwkJODk4OEUxMEUxMUEzNTA4QjAwREI3MzJFIC8qIEJsb2JJdGVtLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg5ODhFMTBDMTFB
MzUwOEIwMERCNzMyRSAvKiBCbG9iSXRlbS5jcHAgKi87IH07CisJCTg5ODhFMTBGMTFBMzUwOEIw
MERCNzMyRSAvKiBCbG9iSXRlbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gODk4OEUxMEQxMUEzNTA4QjAwREI3MzJFIC8qIEJsb2JJdGVtLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTMwMkIwQkQwRDc5
RjgyOTAwQzdFRTgzIC8qIFBhZ2VHcm91cC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5MzAyQjBCQzBENzlGODI5MDBDN0VFODMgLyogUGFnZUdyb3Vw
LmNwcCAqLzsgfTsKIAkJOTMwMkIwQkYwRDc5RjgyQzAwQzdFRTgzIC8qIFBhZ2VHcm91cC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMwMkIwQkUwRDc5
RjgyQzAwQzdFRTgzIC8qIFBhZ2VHcm91cC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTkzMDVCMjREMDk4RjFCNkIwMEMyODg1NSAvKiBUaW1lci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMwNUIyNEMw
OThGMUI2QjAwQzI4ODU1IC8qIFRpbWVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTc4ODUsNiArNzg4Nyw4IEBACiAJCTg5NTI1M0RFMTE2QzRG
MDYwMENBQkYwMCAvKiBGaWxlVGhyZWFkVGFzay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBGaWxlVGhyZWFkVGFzay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4
RjkzNEQ4MzExODlGMUVFMDA1MDhENUQgLyogSlNNYWluVGhyZWFkRXhlY1N0YXRlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTTWFpblRocmVhZEV4ZWNTdGF0ZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4RjkzNEQ4NDExODlGMUVFMDA1MDhENUQgLyogSlNN
YWluVGhyZWFkRXhlY1N0YXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpTTWFpblRocmVhZEV4ZWNTdGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTg5ODhFMTBDMTFBMzUwOEIwMERCNzMyRSAvKiBCbG9iSXRlbS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCbG9iSXRlbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTg5ODhFMTBEMTFBMzUwOEIwMERCNzMyRSAvKiBCbG9iSXRlbS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCbG9iSXRlbS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk5MzAyQjBCQzBENzlGODI5MDBDN0VFODMgLyogUGFnZUdyb3VwLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhZ2VHcm91cC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzMDJCMEJFMEQ3OUY4MkMwMEM3RUU4MyAvKiBQYWdl
R3JvdXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFnZUdyb3VwLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzMDVCMjRDMDk4RjFCNkIwMEMyODg1NSAvKiBU
aW1lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaW1lci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTU4NTYsNiArMTU4NjAsOCBAQAogCQkJCUJDRkIyRjc0
MDk3QTJFMUEwMEJBNzAzRCAvKiBBcmVuYS5jcHAgKi8sCiAJCQkJQkNGQjJGNzUwOTdBMkUxQTAw
QkE3MDNEIC8qIEFyZW5hLmggKi8sCiAJCQkJNTFFMUVDQjEwQzkxQzU1NjAwREMyNTVCIC8qIEF1
dG9kcmFpbmVkUG9vbC5oICovLAorCQkJCTg5ODhFMTBDMTFBMzUwOEIwMERCNzMyRSAvKiBCbG9i
SXRlbS5jcHAgKi8sCisJCQkJODk4OEUxMEQxMUEzNTA4QjAwREI3MzJFIC8qIEJsb2JJdGVtLmgg
Ki8sCiAJCQkJQkNDOENGQ0EwOTg2Q0QyNDAwMTQwQkYyIC8qIENvbG9yRGF0YS5ncGVyZiAqLywK
IAkJCQk0MUQwMTVDOTBGNEI1QzcxMDA0QTY2MkYgLyogQ29udGVudFR5cGUuY3BwICovLAogCQkJ
CTQxRDAxNUM4MEY0QjVDNzEwMDRBNjYyRiAvKiBDb250ZW50VHlwZS5oICovLApAQCAtMTY4OTMs
NiArMTY4OTksNyBAQAogCQkJCUJDNUVCOTIwMEU4MjA0MDgwMEIyNTk2NSAvKiBCaW5kaW5nVVJJ
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBODk5NDMyODBCNDIzMzg4MDBEN0M4MDIgLyogQml0bWFw
SW1hZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTJFQUZBRjBGMTBFMkFGMkQwMDdFRDNENiAvKiBC
bG9iLmggaW4gSGVhZGVycyAqLywKKwkJCQk4OTg4RTEwRjExQTM1MDhCMDBEQjczMkUgLyogQmxv
Ykl0ZW0uaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRjE5OUJFMDgyNDVFNTkwMDFFOUFCQyAvKiBC
bG9ja0V4Y2VwdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNUVCNUUxMEU4MUJFODcwMEIy
NTk2NSAvKiBCb3JkZXJEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzVFQjVEQjBFODFCN0VB
MDBCMjU5NjUgLyogQm9yZGVyVmFsdWUuaCBpbiBIZWFkZXJzICovLApAQCAtMTk3MjQsNiArMTk3
MzEsNyBAQAogCQkJCUJDNUVCOTFGMEU4MjA0MDgwMEIyNTk2NSAvKiBCaW5kaW5nVVJJLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE4OTk0MzI5MEI0MjMzODgwMEQ3QzgwMiAvKiBCaXRtYXBJbWFn
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyRUFGQUYwRTEwRTJBRjJEMDA3RUQzRDYgLyogQmxv
Yi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk4OTg4RTEwRTExQTM1MDhCMDBEQjczMkUgLyogQmxv
Ykl0ZW0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNGMTlBRTEwODI0NUU1OTAwMUU5QUJDIC8q
IEJsb2NrRXhjZXB0aW9ucy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDRUE0ODU0MDk3RDkzMDIw
MDk0QzlFNCAvKiBicmVha19saW5lcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzMwOUREQTA5
OUU2NDkyMDA1NkU1ODEgLyogQnJlYWtCbG9ja3F1b3RlQ29tbWFuZC5jcHAgaW4gU291cmNlcyAq
LywKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9CbG9iLmNwcCBiL1dlYkNvcmUvaHRtbC9CbG9i
LmNwcAppbmRleCA4M2JiZGMwYzUyNjQ4NDU0MjY4ODE5MjYyMTY4NGI2MjgyMDI0YmY0Li4wNTQ2
ZjFjM2MwODgyZGEyMjA4YTllNmEwYTc2MmRiNDM1OWJlZTRhIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2h0bWwvQmxvYi5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0Jsb2IuY3BwCkBAIC0zMSw4OCArMzEs
NjUgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJCbG9iLmgiCiAKKyNpbmNsdWRl
ICJCbG9iSXRlbS5oIgogI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi0jaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi1jb25zdCBpbnQgQmxvYjo6dG9FbmRPZkZp
bGUgPSAtMTsKLWNvbnN0IGRvdWJsZSBCbG9iOjpkb05vdENoZWNrRmlsZUNoYW5nZSA9IDA7Ci0j
ZW5kaWYKLQogQmxvYjo6QmxvYihjb25zdCBTdHJpbmcmIHBhdGgpCi0gICAgOiBtX3BhdGgocGF0
aCkKLSNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAgICAsIG1fc3RhcnQoMCkKLSAgICAsIG1fbGVu
Z3RoKHRvRW5kT2ZGaWxlKQotICAgICwgbV9zbmFwc2hvdENhcHR1cmVkKGZhbHNlKQotICAgICwg
bV9zbmFwc2hvdFNpemUoMCkKLSAgICAsIG1fc25hcHNob3RNb2RpZmljYXRpb25UaW1lKGRvTm90
Q2hlY2tGaWxlQ2hhbmdlKQotI2VuZGlmCi17Ci19Ci0KLSNpZiBFTkFCTEUoQkxPQl9TTElDRSkK
LUJsb2I6OkJsb2IoY29uc3QgU3RyaW5nJiBwYXRoLCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9u
ZyBsZW5ndGgsIGxvbmcgbG9uZyBzbmFwc2hvdFNpemUsIGRvdWJsZSBzbmFwc2hvdE1vZGlmaWNh
dGlvblRpbWUpCi0gICAgOiBtX3BhdGgocGF0aCkKLSAgICAsIG1fc3RhcnQoc3RhcnQpCi0gICAg
LCBtX2xlbmd0aChsZW5ndGgpCi0gICAgLCBtX3NuYXBzaG90Q2FwdHVyZWQodHJ1ZSkKLSAgICAs
IG1fc25hcHNob3RTaXplKHNuYXBzaG90U2l6ZSkKLSAgICAsIG1fc25hcHNob3RNb2RpZmljYXRp
b25UaW1lKHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSkKIHsKLSAgICBBU1NFUlQoc3RhcnQgPj0g
MCAmJiBsZW5ndGggPj0gMCAmJiBzdGFydCArIGxlbmd0aCA8PSBzbmFwc2hvdFNpemUgJiYgc25h
cHNob3RNb2RpZmljYXRpb25UaW1lKTsKKyAgICAvLyBOb3RlOiB0aGlzIGRvZXNuJ3QgaW5pdGlh
bGl6ZSB0aGUgdHlwZSB1bmxpa2UgRmlsZShwYXRoKS4KKyAgICBhcHBlbmQoRmlsZUJsb2JJdGVt
OjpjcmVhdGUocGF0aCkpOwogfQotI2VuZGlmCiAKIHVuc2lnbmVkIGxvbmcgbG9uZyBCbG9iOjpz
aXplKCkgY29uc3QKIHsKICAgICAvLyBGSVhNRTogSmF2YVNjcmlwdCBjYW5ub3QgcmVwcmVzZW50
IHNpemVzIGFzIGxhcmdlIGFzIHVuc2lnbmVkIGxvbmcgbG9uZywgd2UgbmVlZCB0bwogICAgIC8v
IGNvbWUgdXAgd2l0aCBhbiBleGNlcHRpb24gdG8gdGhyb3cgaWYgZmlsZSBzaXplIGlzIG5vdCBy
ZXByZXNldGFibGUuCi0jaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgaWYgKG1fc25hcHNob3RD
YXB0dXJlZCkKLSAgICAgICAgcmV0dXJuIG1fbGVuZ3RoOwotI2VuZGlmCi0gICAgbG9uZyBsb25n
IHNpemU7Ci0gICAgaWYgKCFnZXRGaWxlU2l6ZShtX3BhdGgsIHNpemUpKQotICAgICAgICByZXR1
cm4gMDsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihzaXplKTsK
KyAgICB1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSA9IDA7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX2l0ZW1zLnNpemUoKTsgKytpKQorICAgICAgICBzaXplICs9IG1faXRlbXNbaV0tPnNp
emUoKTsKKyAgICByZXR1cm4gc2l6ZTsKK30KKworY29uc3QgU3RyaW5nJiBCbG9iOjpwYXRoKCkg
Y29uc3QKK3sKKyAgICBBU1NFUlQobV9pdGVtcy5zaXplKCkgPT0gMSAmJiBtX2l0ZW1zWzBdLT50
b0ZpbGVCbG9iSXRlbSgpKTsKKyAgICByZXR1cm4gbV9pdGVtc1swXS0+dG9GaWxlQmxvYkl0ZW0o
KS0+cGF0aCgpOworfQorCit2b2lkIEJsb2I6OmFwcGVuZChQYXNzUmVmUHRyPEJsb2JJdGVtPiBp
dGVtKQoreworICAgIG1faXRlbXMuYXBwZW5kKGl0ZW0pOwogfQogCiAjaWYgRU5BQkxFKEJMT0Jf
U0xJQ0UpCiBQYXNzUmVmUHRyPEJsb2I+IEJsb2I6OnNsaWNlKGxvbmcgbG9uZyBzdGFydCwgbG9u
ZyBsb25nIGxlbmd0aCkgY29uc3QKIHsKLSAgICAvLyBXaGVuIHdlIHNsaWNlIGEgZmlsZSBmb3Ig
dGhlIGZpcnN0IHRpbWUsIHdlIG9idGFpbiBhIHNuYXBzaG90IG9mIHRoZSBmaWxlIGJ5IGNhcHR1
cmluZyBpdHMgY3VycmVudCBzaXplIGFuZCBtb2RpZmljYXRpb24gdGltZS4KLSAgICAvLyBUaGUg
bW9kaWZpY2F0aW9uIHRpbWUgd2lsbCBiZSB1c2VkIHRvIHZlcmlmeSBpZiB0aGUgZmlsZSBoYXMg
YmVlbiBjaGFuZ2VkIG9yIG5vdCwgd2hlbiB0aGUgdW5kZXJseWluZyBkYXRhIGFyZSBhY2Nlc3Nl
ZC4KLSAgICBsb25nIGxvbmcgc25hcHNob3RTaXplOwotICAgIGRvdWJsZSBzbmFwc2hvdE1vZGlm
aWNhdGlvblRpbWU7Ci0gICAgaWYgKG1fc25hcHNob3RDYXB0dXJlZCkgewotICAgICAgICBzbmFw
c2hvdFNpemUgPSBtX3NuYXBzaG90U2l6ZTsKLSAgICAgICAgc25hcHNob3RNb2RpZmljYXRpb25U
aW1lID0gbV9zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
Ly8gSWYgd2UgZmFpbCB0byByZXRyaWV2ZSB0aGUgc2l6ZSBvciBtb2RpZmljYXRpb24gdGltZSwg
cHJvYmFibHkgZHVlIHRvIHRoYXQgdGhlIGZpbGUgaGFzIGJlZW4gZGVsZXRlZCwgYW4gZW1wdHkg
YmxvYiB3aWxsIGJlIHJldHVybmVkLgotICAgICAgICB0aW1lX3QgbW9kaWZpY2F0aW9uVGltZTsK
LSAgICAgICAgaWYgKCFnZXRGaWxlU2l6ZShtX3BhdGgsIHNuYXBzaG90U2l6ZSkgfHwgIWdldEZp
bGVNb2RpZmljYXRpb25UaW1lKG1fcGF0aCwgbW9kaWZpY2F0aW9uVGltZSkpIHsKLSAgICAgICAg
ICAgIHNuYXBzaG90U2l6ZSA9IDA7Ci0gICAgICAgICAgICBzbmFwc2hvdE1vZGlmaWNhdGlvblRp
bWUgPSAwOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHNuYXBzaG90TW9kaWZpY2F0aW9u
VGltZSA9IG1vZGlmaWNhdGlvblRpbWU7Ci0gICAgfQotCi0gICAgLy8gQ2xhbXAgdGhlIHJhbmdl
IGlmIGl0IGV4Y2VlZHMgdGhlIHNpemUgbGltaXQuCiAgICAgaWYgKHN0YXJ0IDwgMCkKICAgICAg
ICAgc3RhcnQgPSAwOwogICAgIGlmIChsZW5ndGggPCAwKQogICAgICAgICBsZW5ndGggPSAwOwog
Ci0gICAgaWYgKHN0YXJ0ID4gc25hcHNob3RTaXplKSB7CisgICAgLy8gQ2xhbXAgdGhlIHJhbmdl
IGlmIGl0IGV4Y2VlZHMgdGhlIHNpemUgbGltaXQuCisgICAgdW5zaWduZWQgbG9uZyBsb25nIHRv
dGFsU2l6ZSA9IHNpemUoKTsKKyAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25n
PihzdGFydCkgPiB0b3RhbFNpemUpIHsKICAgICAgICAgc3RhcnQgPSAwOwogICAgICAgICBsZW5n
dGggPSAwOwotICAgIH0gZWxzZSBpZiAoc3RhcnQgKyBsZW5ndGggPiBzbmFwc2hvdFNpemUpCi0g
ICAgICAgIGxlbmd0aCA9IHNuYXBzaG90U2l6ZSAtIHN0YXJ0OworICAgIH0gZWxzZSBpZiAoc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihzdGFydCArIGxlbmd0aCkgPiB0b3RhbFNpemUp
CisgICAgICAgIGxlbmd0aCA9IHRvdGFsU2l6ZSAtIHN0YXJ0OwogCi0gICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBCbG9iKG1fcGF0aCwgbV9zdGFydCArIHN0YXJ0LCBsZW5ndGgsIHNuYXBzaG90U2l6
ZSwgc25hcHNob3RNb2RpZmljYXRpb25UaW1lKSk7CisgICAgc2l6ZV90IGkgPSAwOworICAgIFJl
ZlB0cjxCbG9iPiBibG9iID0gQmxvYjo6Y3JlYXRlKCk7CisgICAgZm9yICg7IGkgPCBtX2l0ZW1z
LnNpemUoKSAmJiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KHN0YXJ0KSA+PSBtX2l0
ZW1zW2ldLT5zaXplKCk7ICsraSkKKyAgICAgICAgc3RhcnQgLT0gbV9pdGVtc1tpXS0+c2l6ZSgp
OworICAgIGZvciAoOyBsZW5ndGggPiAwICYmIGkgPCBtX2l0ZW1zLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgIGJsb2ItPm1faXRlbXMuYXBwZW5kKG1faXRlbXNbaV0tPnNsaWNlKHN0YXJ0LCBsZW5n
dGgpKTsKKyAgICAgICAgbGVuZ3RoIC09IGJsb2ItPm1faXRlbXMubGFzdCgpLT5zaXplKCk7Cisg
ICAgICAgIHN0YXJ0ID0gMDsKKyAgICB9CisgICAgcmV0dXJuIGJsb2IucmVsZWFzZSgpOwogfQot
I2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKEJMT0JfU0xJQ0UpCiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9CbG9iLmggYi9XZWJDb3JlL2h0bWwvQmxv
Yi5oCmluZGV4IGU4YjVmM2ZkZjA2OWEyYjQ4NzZlZDE2YWI4MWIyMmYwZmYwMzg5NzAuLjM5MTc3
YjUxZWU5ZDA3ODY4M2YyMDJhNjUxZGY1ODIzOGYyNzQ5NTcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
aHRtbC9CbG9iLmgKKysrIGIvV2ViQ29yZS9odG1sL0Jsb2IuaApAQCAtMzEsMjEgKzMxLDI0IEBA
CiAjaWZuZGVmIEJsb2JfaAogI2RlZmluZSBCbG9iX2gKIAotI2luY2x1ZGUgIkV4Y2VwdGlvbkNv
ZGUuaCIKKyNpbmNsdWRlICJCbG9iSXRlbS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgi
Ci0jaW5jbHVkZSA8dGltZS5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogY2xhc3MgQmxvYiA6IHB1YmxpYyBSZWZDb3VudGVkPEJsb2I+IHsKIHB1
YmxpYzoKLSNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAgICBzdGF0aWMgY29uc3QgaW50IHRvRW5k
T2ZGaWxlOwotICAgIHN0YXRpYyBjb25zdCBkb3VibGUgZG9Ob3RDaGVja0ZpbGVDaGFuZ2U7Ci0j
ZW5kaWYKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCbG9iPiBjcmVhdGUoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBCbG9iKCkpOworICAgIH0KIAorICAgIC8vIEZJWE1FOiBE
ZXByZWNhdGVkIG1ldGhvZC4gIFRoaXMgaXMgY2FsbGVkIG9ubHkgZnJvbQorICAgIC8vIGJpbmRp
bmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgYW5kIHRoZSB1c2FnZSBpbiBpdCB3aWxs
IGJlY29tZSBpbnZhbGlkIG9uY2UKKyAgICAvLyBCbG9iQnVpbGRlciBpcyBpbnRyb2R1Y2VkLgog
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJsb2I+IGNyZWF0ZShjb25zdCBTdHJpbmcmIHBhdGgpCiAg
ICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJsb2IocGF0aCkpOwpAQCAtNTMsNDcg
KzU2LDI4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgfkJsb2IoKSB7IH0KIAorICAgIHVuc2ln
bmVkIGxvbmcgbG9uZyBzaXplKCkgY29uc3Q7CisgICAgY29uc3QgU3RyaW5nJiB0eXBlKCkgY29u
c3QgeyByZXR1cm4gbV90eXBlOyB9CiAgICAgdmlydHVhbCBib29sIGlzRmlsZSgpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CiAKLSNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAgICBQYXNzUmVmUHRy
PEJsb2I+IHNsaWNlKGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCkgY29uc3Q7Ci0j
ZW5kaWYKLQotICAgIGNvbnN0IFN0cmluZyYgcGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aDsg
fQotICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplKCkgY29uc3Q7Ci0jaWYgRU5BQkxFKEJMT0Jf
U0xJQ0UpCi0gICAgbG9uZyBsb25nIHN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbV9zdGFydDsgfQot
ICAgIGxvbmcgbG9uZyBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQotICAgIGRv
dWJsZSBtb2RpZmljYXRpb25UaW1lKCkgY29uc3QgeyByZXR1cm4gbV9zbmFwc2hvdE1vZGlmaWNh
dGlvblRpbWU7IH0KLSNlbmRpZgorICAgIC8vIEZJWE1FOiBEZXByZWNhdGVkIG1ldGhvZC4KKyAg
ICBjb25zdCBTdHJpbmcmIHBhdGgoKSBjb25zdDsKIAotcHJvdGVjdGVkOgotICAgIEJsb2IoY29u
c3QgU3RyaW5nJiBwYXRoKTsKKyAgICB2b2lkIGFwcGVuZChQYXNzUmVmUHRyPEJsb2JJdGVtPik7
CisgICAgY29uc3QgQmxvYkl0ZW1MaXN0JiBpdGVtcygpIGNvbnN0IHsgcmV0dXJuIG1faXRlbXM7
IH0KIAotcHJpdmF0ZToKICNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAgICBCbG9iKGNvbnN0IFN0
cmluZyYgcGF0aCwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoLCBsb25nIGxvbmcg
c25hcHNob3RTaXplLCBkb3VibGUgc25hcHNob3RNb2RpZmljYXRpb25UaW1lKTsKKyAgICBQYXNz
UmVmUHRyPEJsb2I+IHNsaWNlKGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCkgY29u
c3Q7CiAjZW5kaWYKIAotICAgIC8vIFRoZSB1bmRlcmx5aW5nIHBhdGggb2YgdGhlIGZpbGUtYmFz
ZWQgYmxvYi4gCi0gICAgU3RyaW5nIG1fcGF0aDsKLQotI2lmIEVOQUJMRShCTE9CX1NMSUNFKQot
ICAgIC8vIFRoZSBzdGFydGluZyBwb3NpdGlvbiBvZiB0aGUgZmlsZS1iYXNlZCBibG9iLgotICAg
IGxvbmcgbG9uZyBtX3N0YXJ0OwotCi0gICAgLy8gVGhlIGxlbmd0aCBvZiB0aGUgZmlsZS1iYXNl
ZCBibG9iLiBUaGUgdmFsdWUgb2YgLTEgbWVhbnMgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZS4KLSAg
ICBsb25nIGxvbmcgbV9sZW5ndGg7Ci0KLSAgICAvLyBBIGZsYWcgdG8gdGVsbCBpZiBhIHNuYXBz
aG90IGhhcyBiZWVuIGNhcHR1cmVkLgotICAgIGJvb2wgbV9zbmFwc2hvdENhcHR1cmVkOworcHJv
dGVjdGVkOgorICAgIEJsb2IoKSB7IH0KIAotICAgIC8vIFRoZSBzaXplIG9mIHRoZSBmaWxlIHdo
ZW4gYSBzbmFwc2hvdCBpcyBjYXB0dXJlZC4gSXQgY2FuIGJlIDAgaWYgdGhlIGZpbGUgaXMgZW1w
dHkuCi0gICAgbG9uZyBsb25nIG1fc25hcHNob3RTaXplOworICAgIC8vIEZJWE1FOiBEZXByZWNh
dGVkIGNvbnN0cnVjdG9yLiAgU2VlIGFsc28gdGhlIGNvbW1lbnQgZm9yIEJsb2I6OmNyZWF0ZShw
YXRoKS4KKyAgICBCbG9iKGNvbnN0IFN0cmluZyYgcGF0aCk7CiAKLSAgICAvLyBUaGUgbGFzdCBt
b2RpZmljYXRpb24gdGltZSBvZiB0aGUgZmlsZSB3aGVuIGEgc25hcHNob3QgaXMgY2FwdHVyZWQu
IFRoZSB2YWx1ZSBvZiAwIGFsc28gbWVhbnMgdGhhdCB0aGUgc25hcHNob3QgaXMgbm90IGNhcHR1
cmVkLgotICAgIGRvdWJsZSBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZTsKLSNlbmRpZgorICAg
IEJsb2JJdGVtTGlzdCBtX2l0ZW1zOworICAgIFN0cmluZyBtX3R5cGU7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvRmlsZS5jcHAgYi9XZWJD
b3JlL2h0bWwvRmlsZS5jcHAKaW5kZXggOTdmZGM0NTc4ZDc0YjIyNWU1OTQ2ZjRkNmFlZjI1NjUy
NTQ0M2FlNC4uMmM5Y2U1M2I4M2NiMGRmNzlhODU5NTIyZGM5MTZmMjU1YmQ4NGNjMyAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9odG1sL0ZpbGUuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9GaWxlLmNwcApA
QCAtMzMsMTIgKzMzLDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogRmlsZTo6RmlsZShjb25z
dCBTdHJpbmcmIHBhdGgpCiAgICAgOiBCbG9iKHBhdGgpCi0gICAgLCBtX25hbWUocGF0aEdldEZp
bGVOYW1lKHBhdGgpKQogewogICAgIC8vIFdlIGRvbid0IHVzZSBNSU1FVHlwZVJlZ2lzdHJ5Ojpn
ZXRNSU1FVHlwZUZvclBhdGgoKSBiZWNhdXNlIGl0IHJldHVybnMgImFwcGxpY2F0aW9uL29jdGV0
LXN0cmVhbSIgdXBvbiBmYWlsdXJlLgotICAgIGludCBpbmRleCA9IG1fbmFtZS5yZXZlcnNlRmlu
ZCgnLicpOworICAgIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUgPSBuYW1lKCk7CisgICAgaW50IGlu
ZGV4ID0gZmlsZU5hbWUucmV2ZXJzZUZpbmQoJy4nKTsKICAgICBpZiAoaW5kZXggIT0gLTEpCi0g
ICAgICAgIG1fdHlwZSA9IE1JTUVUeXBlUmVnaXN0cnk6OmdldE1JTUVUeXBlRm9yRXh0ZW5zaW9u
KG1fbmFtZS5zdWJzdHJpbmcoaW5kZXggKyAxKSk7CisgICAgICAgIG1fdHlwZSA9IE1JTUVUeXBl
UmVnaXN0cnk6OmdldE1JTUVUeXBlRm9yRXh0ZW5zaW9uKGZpbGVOYW1lLnN1YnN0cmluZyhpbmRl
eCArIDEpKTsKK30KKworY29uc3QgU3RyaW5nJiBGaWxlOjpuYW1lKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gaXRlbXMoKS5hdCgwKS0+dG9GaWxlQmxvYkl0ZW0oKS0+bmFtZSgpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvRmlsZS5oIGIvV2Vi
Q29yZS9odG1sL0ZpbGUuaAppbmRleCAwNjVkZDg2YTdiMWViZjc3ZmI0MDY0NmY5YzZlODcwNDY5
ZDdlYjA5Li41ODJkYjI4NTAzYmZmZjJiOTU4ZTNkNTI1NWVmN2FiZTlhNjA1NjlhIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2h0bWwvRmlsZS5oCisrKyBiL1dlYkNvcmUvaHRtbC9GaWxlLmgKQEAgLTQx
LDE4ICs0MSwxNCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNGaWxlKCkgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgY29uc3QgU3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1
cm4gbV9uYW1lOyB9Ci0gICAgY29uc3QgU3RyaW5nJiB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90
eXBlOyB9CisgICAgY29uc3QgU3RyaW5nJiBuYW1lKCkgY29uc3Q7CiAKICAgICAvLyBGSVhNRTog
b2Jzb2xldGUgYXR0cmlidXRlcy4gVG8gYmUgcmVtb3ZlZC4KLSAgICBjb25zdCBTdHJpbmcmIGZp
bGVOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CisgICAgY29uc3QgU3RyaW5nJiBmaWxl
TmFtZSgpIGNvbnN0IHsgcmV0dXJuIG5hbWUoKTsgfQogICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBm
aWxlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemUoKTsgfQogCiBwcml2YXRlOgogICAgIEZpbGUo
Y29uc3QgU3RyaW5nJiBwYXRoKTsKLQotICAgIFN0cmluZyBtX25hbWU7Ci0gICAgU3RyaW5nIG1f
dHlwZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
aHRtbC9GaWxlUmVhZGVyLmNwcCBiL1dlYkNvcmUvaHRtbC9GaWxlUmVhZGVyLmNwcAppbmRleCAz
NDQyMzQyMjc1ODEyN2JlZDc3Mzg3MmM0ZmYzMWZhMDFkZmFjNGU0Li4yZTAyMGMxMTM1MDVjY2I2
ZjQ0M2E4ZDI1NmIwZTlhMWJhYjA4MDM0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvRmlsZVJl
YWRlci5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0ZpbGVSZWFkZXIuY3BwCkBAIC04NSw2ICs4NSw3
IEBAIHZvaWQgRmlsZVJlYWRlcjo6c3RvcCgpCiAKIHZvaWQgRmlsZVJlYWRlcjo6cmVhZEFzQmlu
YXJ5U3RyaW5nKEJsb2IqIGZpbGVCbG9iKQogeworICAgIC8vIEZJWE1FOiBuZWVkcyB0byBoYW5k
bGUgbm9uLWZpbGUgYmxvYnMuCiAgICAgTE9HKEZpbGVBUEksICJGaWxlUmVhZGVyOiByZWFkaW5n
IGFzIGJpbmFyeTogJXNcbiIsIGZpbGVCbG9iLT5wYXRoKCkudXRmOCgpLmRhdGEoKSk7CiAKICAg
ICByZWFkSW50ZXJuYWwoZmlsZUJsb2IsIFJlYWRGaWxlQXNCaW5hcnlTdHJpbmcpOwpAQCAtOTIs
NiArOTMsNyBAQCB2b2lkIEZpbGVSZWFkZXI6OnJlYWRBc0JpbmFyeVN0cmluZyhCbG9iKiBmaWxl
QmxvYikKIAogdm9pZCBGaWxlUmVhZGVyOjpyZWFkQXNUZXh0KEJsb2IqIGZpbGVCbG9iLCBjb25z
dCBTdHJpbmcmIGVuY29kaW5nKQogeworICAgIC8vIEZJWE1FOiBuZWVkcyB0byBoYW5kbGUgbm9u
LWZpbGUgYmxvYnMuCiAgICAgTE9HKEZpbGVBUEksICJGaWxlUmVhZGVyOiByZWFkaW5nIGFzIHRl
eHQ6ICVzXG4iLCBmaWxlQmxvYi0+cGF0aCgpLnV0ZjgoKS5kYXRhKCkpOwogCiAgICAgaWYgKCFl
bmNvZGluZy5pc0VtcHR5KCkpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvRmlsZVN0cmVhbS5j
cHAgYi9XZWJDb3JlL2h0bWwvRmlsZVN0cmVhbS5jcHAKaW5kZXggOWEwNmVlZDlmZDY2ZjhlMzdm
MzdmOWRkNTA0MzViNTZlOWNjNjE0MS4uZjg1OWI2M2ExYzFiMzRjMzZlNzRjMDkxMjRmYTA5MTNm
NmFmNjcwNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0ZpbGVTdHJlYW0uY3BwCisrKyBiL1dl
YkNvcmUvaHRtbC9GaWxlU3RyZWFtLmNwcApAQCAtNzIsNDggKzcyLDUzIEBAIHZvaWQgRmlsZVN0
cmVhbTo6b3BlbkZvclJlYWQoQmxvYiogYmxvYikKICAgICBpZiAoaXNIYW5kbGVWYWxpZChtX2hh
bmRsZSkpCiAgICAgICAgIHJldHVybjsKIAorICAgIC8vIEZJWE1FOiBOZWVkIHRvIGhhbmRsZSBt
dWx0aXBsZSBpdGVtcyB0aGF0IG1heSBpbmNsdWRlIG5vbi1maWxlIG9uZXMgd2hlbiBCbG9iQnVp
bGRlciBpcyBpbnRyb2R1Y2VkLgorICAgIEFTU0VSVChibG9iLT5pdGVtcygpLnNpemUoKSA+PSAx
KTsKKyAgICBjb25zdCBGaWxlQmxvYkl0ZW0qIGZpbGVJdGVtID0gYmxvYi0+aXRlbXMoKS5hdCgw
KS0+dG9GaWxlQmxvYkl0ZW0oKTsKKyAgICBpZiAoIWZpbGVJdGVtKSB7CisgICAgICAgIEFTU0VS
VChmYWxzZSk7CisgICAgICAgIG1fY2xpZW50LT5kaWRGYWlsKE5PVF9SRUFEQUJMRV9FUlIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgLy8gQ2hlY2sgaWYgdGhlIGZpbGUgZXhpc3Rz
IGJ5IHF1ZXJ5aW5nIGl0cyBtb2RpZmljYXRpb24gdGltZS4gV2UgY2hvb3NlIG5vdCB0byBjYWxs
IGZpbGVFeGlzdHMoKSBpbiBvcmRlciB0byBzYXZlIGFuCiAgICAgLy8gZXh0cmEgZmlsZSBzeXN0
ZW0gY2FsbCB3aGVuIHRoZSBtb2RpZmljYXRpb24gdGltZSBpcyBuZWVkZWQgdG8gY2hlY2sgdGhl
IHZhbGlkaXR5IG9mIHRoZSBzbGljZWQgZmlsZSBibG9iLgogICAgIC8vIFBlciB0aGUgc3BlYywg
d2UgbmVlZCB0byByZXR1cm4gZGlmZmVyZW50IGVycm9yIGNvZGVzIHRvIGRpZmZlcmVudGlhdGUg
YmV0d2VlbiBub24tZXhpc3RlbnQgZmlsZSBhbmQgcGVybWlzc2lvbiBlcnJvci4KICAgICAvLyBv
cGVuRmlsZSgpIGNvdWxkIG5vdCB0ZWxsIHVzZSB0aGUgZmFpbHVyZSByZWFzb24uCiAgICAgdGlt
ZV90IGN1cnJlbnRNb2RpZmljYXRpb25UaW1lOwotICAgIGlmICghZ2V0RmlsZU1vZGlmaWNhdGlv
blRpbWUoYmxvYi0+cGF0aCgpLCBjdXJyZW50TW9kaWZpY2F0aW9uVGltZSkpIHsKKyAgICBpZiAo
IWdldEZpbGVNb2RpZmljYXRpb25UaW1lKGZpbGVJdGVtLT5wYXRoKCksIGN1cnJlbnRNb2RpZmlj
YXRpb25UaW1lKSkgewogICAgICAgICBtX2NsaWVudC0+ZGlkRmFpbChOT1RfRk9VTkRfRVJSKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIC8vIE9wZW4gdGhlIGZpbGUgYmxvYi4KLSAg
ICBtX2hhbmRsZSA9IG9wZW5GaWxlKGJsb2ItPnBhdGgoKSwgT3BlbkZvclJlYWQpOworICAgIG1f
aGFuZGxlID0gb3BlbkZpbGUoZmlsZUl0ZW0tPnBhdGgoKSwgT3BlbkZvclJlYWQpOwogICAgIGlm
ICghaXNIYW5kbGVWYWxpZChtX2hhbmRsZSkpIHsKICAgICAgICAgbV9jbGllbnQtPmRpZEZhaWwo
Tk9UX1JFQURBQkxFX0VSUik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICNpZiBFTkFCTEUo
QkxPQl9TTElDRSkKLSAgICAvLyBDaGVjayB0aGUgbW9kaWZpY2F0aW9udCB0aW1lIGZvciB0aGUg
cG9zc2libGUgZmlsZSBjaGFuZ2UuCi0gICAgaWYgKGJsb2ItPm1vZGlmaWNhdGlvblRpbWUoKSAh
PSBCbG9iOjpkb05vdENoZWNrRmlsZUNoYW5nZSAmJiBzdGF0aWNfY2FzdDx0aW1lX3Q+KGJsb2It
Pm1vZGlmaWNhdGlvblRpbWUoKSkgIT0gY3VycmVudE1vZGlmaWNhdGlvblRpbWUpIHsKLSAgICAg
ICAgbV9jbGllbnQtPmRpZEZhaWwoTk9UX1JFQURBQkxFX0VSUik7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICAvLyBKdW1wIHRvIHRoZSBiZWdpbm5pbmcgcG9zaXRpb24gaWYgdGhlIGZp
bGUgaGFzIGJlZW4gc2xpY2VkLgotICAgIGlmIChibG9iLT5zdGFydCgpID4gMCkgewotICAgICAg
ICBpZiAoIXNlZWtGaWxlKG1faGFuZGxlLCBibG9iLT5zdGFydCgpLCBTZWVrRnJvbUJlZ2lubmlu
ZykpIHsKKyAgICBjb25zdCBGaWxlUmFuZ2VCbG9iSXRlbSogZmlsZVJhbmdlSXRlbSA9IGZpbGVJ
dGVtLT50b0ZpbGVSYW5nZUJsb2JJdGVtKCk7CisgICAgaWYgKGZpbGVSYW5nZUl0ZW0pIHsKKyAg
ICAgICAgLy8gQ2hlY2sgdGhlIG1vZGlmaWNhdGlvbnQgdGltZSBmb3IgdGhlIHBvc3NpYmxlIGZp
bGUgY2hhbmdlLgorICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8dGltZV90PihmaWxlUmFuZ2VJdGVt
LT5zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUoKSkgIT0gY3VycmVudE1vZGlmaWNhdGlvblRpbWUp
IHsKICAgICAgICAgICAgIG1fY2xpZW50LT5kaWRGYWlsKE5PVF9SRUFEQUJMRV9FUlIpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisKKyAgICAgICAgLy8gSnVtcCB0byB0aGUgYmVn
aW5uaW5nIHBvc2l0aW9uIGlmIHRoZSBmaWxlIGhhcyBiZWVuIHNsaWNlZC4KKyAgICAgICAgaWYg
KGZpbGVSYW5nZUl0ZW0tPnN0YXJ0KCkgPiAwKSB7CisgICAgICAgICAgICBpZiAoc2Vla0ZpbGUo
bV9oYW5kbGUsIGZpbGVSYW5nZUl0ZW0tPnN0YXJ0KCksIFNlZWtGcm9tQmVnaW5uaW5nKSA8IDAp
IHsKKyAgICAgICAgICAgICAgICBtX2NsaWVudC0+ZGlkRmFpbChOT1RfUkVBREFCTEVfRVJSKTsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9
CiAjZW5kaWYKIAogICAgIC8vIEdldCB0aGUgc2l6ZS4KLSNpZiBFTkFCTEUoQkxPQl9TTElDRSkK
LSAgICBtX3RvdGFsQnl0ZXNUb1JlYWQgPSBibG9iLT5sZW5ndGgoKTsKLSAgICBpZiAobV90b3Rh
bEJ5dGVzVG9SZWFkID09IEJsb2I6OnRvRW5kT2ZGaWxlKQotICAgICAgICBtX3RvdGFsQnl0ZXNU
b1JlYWQgPSBibG9iLT5zaXplKCkgLSBibG9iLT5zdGFydCgpOwotI2Vsc2UKICAgICBtX3RvdGFs
Qnl0ZXNUb1JlYWQgPSBibG9iLT5zaXplKCk7Ci0jZW5kaWYKLQogICAgIG1fY2xpZW50LT5kaWRH
ZXRTaXplKG1fdG90YWxCeXRlc1RvUmVhZCk7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRt
bC9Gb3JtRGF0YUxpc3QuY3BwIGIvV2ViQ29yZS9odG1sL0Zvcm1EYXRhTGlzdC5jcHAKaW5kZXgg
MjgxYzlmZTQxOGUxYzQ4MzNiYjg3ZjgyZjc0ZjFjYzRkNzIyZDU3Yy4uMGY2MjU5NWVkNDFjMjMx
OWJkYjc5YjU3YmJkN2NhOTQ2MjJiODJhYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0Zvcm1E
YXRhTGlzdC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0Zvcm1EYXRhTGlzdC5jcHAKQEAgLTI4LDY0
ICsyOCwyMiBAQCBGb3JtRGF0YUxpc3Q6OkZvcm1EYXRhTGlzdChjb25zdCBUZXh0RW5jb2Rpbmcm
IGMpCiB7CiB9CiAKLXZvaWQgRm9ybURhdGFMaXN0OjphcHBlbmRTdHJpbmcoY29uc3QgQ1N0cmlu
ZyYgcykKK3ZvaWQgRm9ybURhdGFMaXN0OjphcHBlbmRTdHJpbmcoY29uc3QgU3RyaW5nJiBzKQog
ewotICAgIG1fbGlzdC5hcHBlbmQocyk7CisgICAgbV9pdGVtcy5hcHBlbmQoU3RyaW5nQmxvYkl0
ZW06OmNyZWF0ZShzLCBFbmRpbmdDUkxGLCBtX2VuY29kaW5nKSk7CiB9CiAKLS8vIENoYW5nZSBw
bGFpbiBDUiBhbmQgcGxhaW4gTEYgdG8gQ1JMRiBwYWlycy4KLXN0YXRpYyBDU3RyaW5nIGZpeExp
bmVCcmVha3MoY29uc3QgQ1N0cmluZyYgcykKK3ZvaWQgRm9ybURhdGFMaXN0OjphcHBlbmRTdHJp
bmcoY29uc3QgQ1N0cmluZyYgcykKIHsKLSAgICAvLyBDb21wdXRlIHRoZSBsZW5ndGguCi0gICAg
dW5zaWduZWQgbmV3TGVuID0gMDsKLSAgICBjb25zdCBjaGFyKiBwID0gcy5kYXRhKCk7Ci0gICAg
d2hpbGUgKGNoYXIgYyA9ICpwKyspIHsKLSAgICAgICAgaWYgKGMgPT0gJ1xyJykgewotICAgICAg
ICAgICAgLy8gU2FmZSB0byBsb29rIGFoZWFkIGJlY2F1c2Ugb2YgdHJhaWxpbmcgJ1wwJy4KLSAg
ICAgICAgICAgIGlmICgqcCAhPSAnXG4nKSB7Ci0gICAgICAgICAgICAgICAgLy8gVHVybiBDUiBp
bnRvIENSTEYuCi0gICAgICAgICAgICAgICAgbmV3TGVuICs9IDI7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0gZWxzZSBpZiAoYyA9PSAnXG4nKSB7Ci0gICAgICAgICAgICAvLyBUdXJuIExGIGlu
dG8gQ1JMRi4KLSAgICAgICAgICAgIG5ld0xlbiArPSAyOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgLy8gTGVhdmUgb3RoZXIgY2hhcmFjdGVycyBhbG9uZS4KLSAgICAgICAgICAgIG5l
d0xlbiArPSAxOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChuZXdMZW4gPT0gcy5sZW5ndGgo
KSkgewotICAgICAgICByZXR1cm4gczsKLSAgICB9Ci0gICAgCi0gICAgLy8gTWFrZSBhIGNvcHkg
b2YgdGhlIHN0cmluZy4KLSAgICBwID0gcy5kYXRhKCk7Ci0gICAgY2hhciogcTsKLSAgICBDU3Ry
aW5nIHJlc3VsdCA9IENTdHJpbmc6Om5ld1VuaW5pdGlhbGl6ZWQobmV3TGVuLCBxKTsKLSAgICB3
aGlsZSAoY2hhciBjID0gKnArKykgewotICAgICAgICBpZiAoYyA9PSAnXHInKSB7Ci0gICAgICAg
ICAgICAvLyBTYWZlIHRvIGxvb2sgYWhlYWQgYmVjYXVzZSBvZiB0cmFpbGluZyAnXDAnLgotICAg
ICAgICAgICAgaWYgKCpwICE9ICdcbicpIHsKLSAgICAgICAgICAgICAgICAvLyBUdXJuIENSIGlu
dG8gQ1JMRi4KLSAgICAgICAgICAgICAgICAqcSsrID0gJ1xyJzsKLSAgICAgICAgICAgICAgICAq
cSsrID0gJ1xuJzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChjID09ICdcbicp
IHsKLSAgICAgICAgICAgIC8vIFR1cm4gTEYgaW50byBDUkxGLgotICAgICAgICAgICAgKnErKyA9
ICdccic7Ci0gICAgICAgICAgICAqcSsrID0gJ1xuJzsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIC8vIExlYXZlIG90aGVyIGNoYXJhY3RlcnMgYWxvbmUuCi0gICAgICAgICAgICAqcSsr
ID0gYzsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OworICAgIG1faXRlbXMu
YXBwZW5kKFN0cmluZ0Jsb2JJdGVtOjpjcmVhdGUocykpOwogfQogCi12b2lkIEZvcm1EYXRhTGlz
dDo6YXBwZW5kU3RyaW5nKGNvbnN0IFN0cmluZyYgcykKK3ZvaWQgRm9ybURhdGFMaXN0OjphcHBl
bmRCbG9iKGNvbnN0IFN0cmluZyYga2V5LCBQYXNzUmVmUHRyPEJsb2I+IGJsb2IpCiB7Ci0gICAg
Q1N0cmluZyBjc3RyID0gZml4TGluZUJyZWFrcyhtX2VuY29kaW5nLmVuY29kZShzLmNoYXJhY3Rl
cnMoKSwgcy5sZW5ndGgoKSwgRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpKTsKLSAgICBtX2xpc3Qu
YXBwZW5kKGNzdHIpOworICAgIGFwcGVuZFN0cmluZyhrZXkpOworICAgIGNvbnN0IEJsb2JJdGVt
TGlzdCYgaXRlbXMgPSBibG9iLT5pdGVtcygpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
aXRlbXMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1faXRlbXMuYXBwZW5kKGl0ZW1zLmF0KGkpKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9Gb3JtRGF0YUxp
c3QuaCBiL1dlYkNvcmUvaHRtbC9Gb3JtRGF0YUxpc3QuaAppbmRleCA4ZWNmNjRlZTkzYWQ1MjRm
NDc5MjFmMWQ4MjJmOWEwOGJhMDEzZDdjLi5mNGJiOTA1MTUwZmFkNzhiMDFhZTVhOTY4M2ZhZDk5
ODQzOTBlNmJlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvRm9ybURhdGFMaXN0LmgKKysrIGIv
V2ViQ29yZS9odG1sL0Zvcm1EYXRhTGlzdC5oCkBAIC00NiwyNyArNDYsOSBAQCBwdWJsaWM6CiAg
ICAgICAgIGFwcGVuZFN0cmluZyhrZXkpOwogICAgICAgICBhcHBlbmRTdHJpbmcoU3RyaW5nOjpu
dW1iZXIodmFsdWUpKTsKICAgICB9Ci0gICAgdm9pZCBhcHBlbmRCbG9iKGNvbnN0IFN0cmluZyYg
a2V5LCBQYXNzUmVmUHRyPEJsb2I+IGJsb2IpCi0gICAgewotICAgICAgICBhcHBlbmRTdHJpbmco
a2V5KTsKLSAgICAgICAgbV9saXN0LmFwcGVuZChibG9iKTsKLSAgICB9Ci0KLSAgICBjbGFzcyBJ
dGVtIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEl0ZW0oKSB7IH0KLSAgICAgICAgSXRlbShjb25z
dCBXVEY6OkNTdHJpbmcmIGRhdGEpIDogbV9kYXRhKGRhdGEpIHsgfQotICAgICAgICBJdGVtKFBh
c3NSZWZQdHI8QmxvYj4gYmxvYikgOiBtX2Jsb2IoYmxvYikgeyB9Ci0KLSAgICAgICAgY29uc3Qg
V1RGOjpDU3RyaW5nJiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9Ci0gICAgICAgIEJs
b2IqIGJsb2IoKSBjb25zdCB7IHJldHVybiBtX2Jsb2IuZ2V0KCk7IH0KLQotICAgIHByaXZhdGU6
Ci0gICAgICAgIFdURjo6Q1N0cmluZyBtX2RhdGE7Ci0gICAgICAgIFJlZlB0cjxCbG9iPiBtX2Js
b2I7Ci0gICAgfTsKKyAgICB2b2lkIGFwcGVuZEJsb2IoY29uc3QgU3RyaW5nJiBrZXksIFBhc3NS
ZWZQdHI8QmxvYj4pOwogCi0gICAgY29uc3QgVmVjdG9yPEl0ZW0+JiBsaXN0KCkgY29uc3QgeyBy
ZXR1cm4gbV9saXN0OyB9CisgICAgY29uc3QgQmxvYkl0ZW1MaXN0JiBpdGVtcygpIGNvbnN0IHsg
cmV0dXJuIG1faXRlbXM7IH0KICAgICBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nKCkgY29u
c3QgeyByZXR1cm4gbV9lbmNvZGluZzsgfQogCiBwcml2YXRlOgpAQCAtNzQsNyArNTYsNyBAQCBw
cml2YXRlOgogICAgIHZvaWQgYXBwZW5kU3RyaW5nKGNvbnN0IFN0cmluZyYpOwogCiAgICAgVGV4
dEVuY29kaW5nIG1fZW5jb2Rpbmc7Ci0gICAgVmVjdG9yPEl0ZW0+IG1fbGlzdDsKKyAgICBCbG9i
SXRlbUxpc3QgbV9pdGVtczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwIGIvV2ViQ29yZS9odG1sL0hUTUxG
b3JtRWxlbWVudC5jcHAKaW5kZXggYzE5OTMzYWRiNDgzM2NjNDBmMTZlMGU5YjY1OGQ1N2M4ZTZi
MGY1MC4uOGI2MDZmNTkwMjExMjkzNjg2NjY5ZjUzNmM3NTQ3MmI5NTI3MmY1ZiAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0hU
TUxGb3JtRWxlbWVudC5jcHAKQEAgLTIwOSw3ICsyMDksNyBAQCBQYXNzUmVmUHRyPEZvcm1EYXRh
PiBIVE1MRm9ybUVsZW1lbnQ6OmNyZWF0ZUZvcm1EYXRhKCkKICAgICAgICAgICAgIGNvbnRyb2wt
PmFwcGVuZEZvcm1EYXRhKCpkb21Gb3JtRGF0YSwgbV9mb3JtRGF0YUJ1aWxkZXIuaXNNdWx0aVBh
cnRGb3JtKCkpOwogICAgIH0KIAotICAgIFJlZlB0cjxGb3JtRGF0YT4gcmVzdWx0ID0gKG1fZm9y
bURhdGFCdWlsZGVyLmlzTXVsdGlQYXJ0Rm9ybSgpKSA/IEZvcm1EYXRhOjpjcmVhdGVNdWx0aVBh
cnQoKmRvbUZvcm1EYXRhLCBkb2N1bWVudCgpKSA6IEZvcm1EYXRhOjpjcmVhdGUoKmRvbUZvcm1E
YXRhKTsKKyAgICBSZWZQdHI8Rm9ybURhdGE+IHJlc3VsdCA9IChtX2Zvcm1EYXRhQnVpbGRlci5p
c011bHRpUGFydEZvcm0oKSkgPyBGb3JtRGF0YTo6Y3JlYXRlTXVsdGlQYXJ0KGRvbUZvcm1EYXRh
LT5pdGVtcygpLCBkb21Gb3JtRGF0YS0+ZW5jb2RpbmcoKSwgZG9jdW1lbnQoKSkgOiBGb3JtRGF0
YTo6Y3JlYXRlKGRvbUZvcm1EYXRhLT5pdGVtcygpLCBkb21Gb3JtRGF0YS0+ZW5jb2RpbmcoKSk7
CiAKICAgICByZXN1bHQtPnNldElkZW50aWZpZXIoZ2VuZXJhdGVGb3JtRGF0YUlkZW50aWZpZXIo
KSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MTWV0
ZXJFbGVtZW50LmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1MTWV0ZXJFbGVtZW50LmNwcAppbmRleCBh
MWI3NGIyZDBhYjBjNzVjZWRhM2Q2MzI4OTgxMTU0YzQ4YzcyNDE4Li4wMzE2MjY3MGM2M2I3Nzlk
ZjYwNzNiOTU2MDU0ZTZiYWVhZDM1MjM4IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTE1l
dGVyRWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxNZXRlckVsZW1lbnQuY3BwCkBA
IC0yNCw2ICsyNCw3IEBACiAKICNpbmNsdWRlICJBdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJFdmVu
dE5hbWVzLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkZvcm1EYXRh
TGlzdC5oIgogI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1l
cy5oIgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxQcm9ncmVzc0VsZW1lbnQuY3BwIGIv
V2ViQ29yZS9odG1sL0hUTUxQcm9ncmVzc0VsZW1lbnQuY3BwCmluZGV4IGQyNzVlYmZjZmY4ZDk3
YjkxNmQ1OWQyNGYyNDE5ZGE4YzUzNGFmMjkuLmY3ZTg2ZjNhOWFmZmVjZWRlYmI5M2I5MzUzNTBk
YWI4NTJhZWE2YzUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MUHJvZ3Jlc3NFbGVtZW50
LmNwcAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTFByb2dyZXNzRWxlbWVudC5jcHAKQEAgLTI0LDYg
KzI0LDcgQEAKIAogI2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMu
aCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiRm9ybURhdGFMaXN0Lmgi
CiAjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL0Jsb2JJdGVtLmNwcCBiL1dlYkNvcmUvcGxhdGZv
cm0vQmxvYkl0ZW0uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE2Y2EwNmQ2NzU2MDYzNTljNDBhMWYxYTc2NjU1
ZmY0MGE4NTZhNTYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL0Jsb2JJdGVt
LmNwcApAQCAtMCwwICsxLDI0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCbG9i
SXRlbS5oIgorCisjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgorI2luY2x1ZGUgIlVVSUQuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCitzdGF0aWMgY29u
c3QgZG91YmxlIGludmFsaWRNb2RpZmljYXRpb25UaW1lID0gMDsKKworZG91YmxlIGdldEZpbGVT
bmFwc2hvdE1vZGlmaWNhdGlvblRpbWUoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIC8vIEZJ
WE1FOiBzeW5jaHJvbml6ZWQgZmlsZSBjYWxsCisgICAgdGltZV90IG1vZGlmaWNhdGlvblRpbWU7
CisgICAgaWYgKGdldEZpbGVNb2RpZmljYXRpb25UaW1lKHBhdGgsIG1vZGlmaWNhdGlvblRpbWUp
KQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPihtb2RpZmljYXRpb25UaW1lKTsK
KyAgICByZXR1cm4gaW52YWxpZE1vZGlmaWNhdGlvblRpbWU7Cit9CisjZW5kaWYgLy8gRU5BQkxF
KEJMT0JfU0xJQ0UpCisKKy8vIERhdGFCbG9iSXRlbSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyNpZiBFTkFCTEUoQkxP
Ql9TTElDRSkKK1Bhc3NSZWZQdHI8QmxvYkl0ZW0+IERhdGFCbG9iSXRlbTo6c2xpY2UobG9uZyBs
b25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoKQoreworICAgIEFTU0VSVChzdGFydCA+PSAwICYm
IGxlbmd0aCA+PSAwKTsKKyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25n
PihzdGFydCkgPCBzaXplKCkpOworICAgIGlmICghc3RhcnQgJiYgc2l6ZSgpIDw9IHN0YXRpY19j
YXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4obGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIHRoaXM7Cisg
ICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oc3RhcnQgKyBsZW5ndGgpID4g
c2l6ZSgpKQorICAgICAgICBsZW5ndGggPSBzaXplKCkgLSBzdGFydDsKKyAgICByZXR1cm4gRGF0
YVJhbmdlQmxvYkl0ZW06OmNyZWF0ZSh0aGlzLCBzdGFydCwgbGVuZ3RoKTsKK30KKyNlbmRpZiAv
LyBFTkFCTEUoQkxPQl9TTElDRSkKKworLy8gRmlsZUJsb2JJdGVtIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUGFzc1Jl
ZlB0cjxCbG9iSXRlbT4gRmlsZUJsb2JJdGVtOjpjcmVhdGUoY29uc3QgU3RyaW5nJiBwYXRoKQor
eworICAgIHJldHVybiBhZG9wdFJlZihzdGF0aWNfY2FzdDxCbG9iSXRlbSo+KG5ldyBGaWxlQmxv
Ykl0ZW0ocGF0aCkpKTsKK30KKworRmlsZUJsb2JJdGVtOjpGaWxlQmxvYkl0ZW0oY29uc3QgU3Ry
aW5nJiBwYXRoKQorICAgIDogbV9wYXRoKHBhdGgpCisgICAgLCBtX2ZpbGVOYW1lKHBhdGhHZXRG
aWxlTmFtZShtX3BhdGgpKQoreworfQorCit1bnNpZ25lZCBsb25nIGxvbmcgRmlsZUJsb2JJdGVt
OjpzaXplKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogc3luY2hyb25pemVkIGZpbGUgY2FsbAor
ICAgIGxvbmcgbG9uZyBzaXplOworICAgIGlmICghZ2V0RmlsZVNpemUobV9wYXRoLCBzaXplKSkK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcg
bG9uZz4oc2l6ZSk7Cit9CisKKyNpZiBFTkFCTEUoQkxPQl9TTElDRSkKK1Bhc3NSZWZQdHI8Qmxv
Ykl0ZW0+IEZpbGVCbG9iSXRlbTo6c2xpY2UobG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVu
Z3RoKQoreworICAgIEFTU0VSVChzdGFydCA+PSAwICYmIGxlbmd0aCA+PSAwKTsKKyAgICBBU1NF
UlQoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihzdGFydCkgPCBzaXplKCkpOworICAg
IGlmICghc3RhcnQgJiYgc2l6ZSgpIDw9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4o
bGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgY29uc3QgRmlsZVJhbmdlQmxvYkl0
ZW0qIGZpbGVSYW5nZUl0ZW0gPSB0b0ZpbGVSYW5nZUJsb2JJdGVtKCk7CisgICAgZG91YmxlIG1v
ZGlmaWNhdGlvblRpbWUgPSBmaWxlUmFuZ2VJdGVtID8gZmlsZVJhbmdlSXRlbS0+c25hcHNob3RN
b2RpZmljYXRpb25UaW1lKCkgOiBnZXRGaWxlU25hcHNob3RNb2RpZmljYXRpb25UaW1lKHBhdGgo
KSk7CisgICAgcmV0dXJuIEZpbGVSYW5nZUJsb2JJdGVtOjpjcmVhdGUocGF0aCgpLCBzdGFydCwg
bGVuZ3RoLCBtb2RpZmljYXRpb25UaW1lKTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoQkxPQl9TTElD
RSkKKworLy8gU3RyaW5nQmxvYkl0ZW0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUGFzc1JlZlB0cjxCbG9iSXRlbT4gU3Ry
aW5nQmxvYkl0ZW06OmNyZWF0ZShjb25zdCBTdHJpbmcmIHRleHQsIExpbmVFbmRpbmcgZW5kaW5n
LCBUZXh0RW5jb2RpbmcgZW5jb2RpbmcpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKHN0YXRpY19j
YXN0PEJsb2JJdGVtKj4obmV3IFN0cmluZ0Jsb2JJdGVtKHRleHQsIGVuZGluZywgZW5jb2Rpbmcp
KSk7Cit9CisKK1Bhc3NSZWZQdHI8QmxvYkl0ZW0+IFN0cmluZ0Jsb2JJdGVtOjpjcmVhdGUoY29u
c3QgQ1N0cmluZyYgdGV4dCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoc3RhdGljX2Nhc3Q8Qmxv
Ykl0ZW0qPihuZXcgU3RyaW5nQmxvYkl0ZW0odGV4dCkpKTsKK30KKworU3RyaW5nQmxvYkl0ZW06
OlN0cmluZ0Jsb2JJdGVtKGNvbnN0IFN0cmluZyYgdGV4dCwgTGluZUVuZGluZyBlbmRpbmcsIFRl
eHRFbmNvZGluZyBlbmNvZGluZykKKyAgICA6IG1fZGF0YShTdHJpbmdCbG9iSXRlbTo6Y29udmVy
dFRvQ1N0cmluZyh0ZXh0LCBlbmRpbmcsIGVuY29kaW5nKSkKK3sKK30KKworU3RyaW5nQmxvYkl0
ZW06OlN0cmluZ0Jsb2JJdGVtKGNvbnN0IENTdHJpbmcmIHRleHQpCisgICAgOiBtX2RhdGEodGV4
dCkKK3sKK30KKworQ1N0cmluZyBTdHJpbmdCbG9iSXRlbTo6Y29udmVydFRvQ1N0cmluZyhjb25z
dCBTdHJpbmcmIHRleHQsIExpbmVFbmRpbmcgZW5kaW5nLCBUZXh0RW5jb2RpbmcgZW5jb2Rpbmcp
Cit7CisgICAgQ1N0cmluZyBmcm9tID0gZW5jb2RpbmcuZW5jb2RlKHRleHQuY2hhcmFjdGVycygp
LCB0ZXh0Lmxlbmd0aCgpLCBFbnRpdGllc0ZvclVuZW5jb2RhYmxlcyk7CisgICAgQ1N0cmluZyBy
ZXN1bHQgPSBmcm9tOworCisgICAgaWYgKGVuZGluZyA9PSBFbmRpbmdUcmFuc3BhcmVudCkKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIGNvbnN0IGNoYXIqIGVuZGluZ0NoYXJzID0gKGVu
ZGluZyA9PSBFbmRpbmdDUkxGKSA/ICJcclxuIiA6ICgoZW5kaW5nID09IEVuZGluZ0NSKSA/ICJc
ciIgOiAiXG4iKTsKKworICAgIGludCBlbmRpbmdMZW5ndGggPSAoZW5kaW5nID09IEVuZGluZ0NS
TEYpID8gMiA6IDE7CisgICAgaW50IG5lZWRGaXggPSAwOworCisgICAgLy8gQ2FsY3VsYXRlIHRo
ZSBmaW5hbCBsZW5ndGguCisgICAgaW50IGNhbGN1bGF0ZWRMZW5ndGggPSBmcm9tLmxlbmd0aCgp
OworICAgIGNvbnN0IGNoYXIqIHAgPSBmcm9tLmRhdGEoKTsKKyAgICB3aGlsZSAoY2hhciBjID0g
KnArKykgeworICAgICAgICBpZiAoYyA9PSAnXHInKSB7CisgICAgICAgICAgICAvLyBTYWZlIHRv
IGxvb2sgYWhlYWQgYmVjYXVzZSBvZiB0cmFpbGluZyAnXDAnLgorICAgICAgICAgICAgaWYgKCpw
ID09ICdcbicgJiYgZW5kaW5nICE9IEVuZGluZ0NSTEYpIHsKKyAgICAgICAgICAgICAgICBjYWxj
dWxhdGVkTGVuZ3RoICs9IChlbmRpbmdMZW5ndGggLSAyKTsKKyAgICAgICAgICAgICAgICArK25l
ZWRGaXg7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGVuZGluZyAhPSBFbmRpbmdDUikgeworICAg
ICAgICAgICAgICAgIGNhbGN1bGF0ZWRMZW5ndGggKz0gKGVuZGluZ0xlbmd0aCAtIDEpOworICAg
ICAgICAgICAgICAgICsrbmVlZEZpeDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlm
IChjID09ICdcbicgJiYgZW5kaW5nICE9IEVuZGluZ0xGKSB7CisgICAgICAgICAgICBjYWxjdWxh
dGVkTGVuZ3RoICs9IChlbmRpbmdMZW5ndGggLSAxKTsKKyAgICAgICAgICAgICsrbmVlZEZpeDsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghbmVlZEZpeCkKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKworICAgIC8vIENvbnZlcnQgdGhlIGVuZGluZ3MgYW5kIGNyZWF0ZSBhIGRhdGEgYnVm
ZmVyLgorICAgIHAgPSBmcm9tLmRhdGEoKTsKKyAgICBjaGFyKiBxOworICAgIHJlc3VsdCA9IENT
dHJpbmc6Om5ld1VuaW5pdGlhbGl6ZWQoY2FsY3VsYXRlZExlbmd0aCwgcSk7CisgICAgd2hpbGUg
KGNoYXIgYyA9ICpwKyspIHsKKyAgICAgICAgaWYgKGMgPT0gJ1xyJykgeworICAgICAgICAgICAg
aWYgKCpwID09ICdcbicgJiYgZW5kaW5nICE9IEVuZGluZ0NSTEYpIHsKKyAgICAgICAgICAgICAg
ICBtZW1jcHkocSwgZW5kaW5nQ2hhcnMsIGVuZGluZ0xlbmd0aCk7CisgICAgICAgICAgICAgICAg
cSArPSBlbmRpbmdMZW5ndGg7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCpwICE9ICdcbicgJiYg
ZW5kaW5nICE9IEVuZGluZ0NSKSB7CisgICAgICAgICAgICAgICAgbWVtY3B5KHEsIGVuZGluZ0No
YXJzLCBlbmRpbmdMZW5ndGgpOworICAgICAgICAgICAgICAgIHEgKz0gZW5kaW5nTGVuZ3RoOwor
ICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKGMgPT0gJ1xuJyAmJiBlbmRpbmcgIT0g
RW5kaW5nTEYpIHsKKyAgICAgICAgICAgIG1lbWNweShxLCBlbmRpbmdDaGFycywgZW5kaW5nTGVu
Z3RoKTsKKyAgICAgICAgICAgIHEgKz0gZW5kaW5nTGVuZ3RoOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgLy8gTGVhdmUgb3RoZXIgY2hhcmFjdGVycyBhbG9uZS4KKyAgICAgICAgICAg
ICpxKysgPSBjOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8v
IEJ5dGVBcnJheUJsb2JJdGVtIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUGFzc1JlZlB0cjxCbG9iSXRlbT4gQnl0ZUFycmF5Qmxv
Ykl0ZW06OmNyZWF0ZShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3Qgc2l6ZSkKK3sKKyAgICByZXR1
cm4gYWRvcHRSZWYoc3RhdGljX2Nhc3Q8QmxvYkl0ZW0qPihuZXcgQnl0ZUFycmF5QmxvYkl0ZW0o
ZGF0YSwgc2l6ZSkpKTsKK30KKworQnl0ZUFycmF5QmxvYkl0ZW06OkJ5dGVBcnJheUJsb2JJdGVt
KGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBzaXplKQoreworICAgIG1fYnl0ZXNBcnJheS5hcHBl
bmQoZGF0YSwgc2l6ZSk7Cit9CisKKyNpZiBFTkFCTEUoQkxPQl9TTElDRSkKKworLy8gRGF0YVJh
bmdlQmxvYkl0ZW0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKworUGFzc1JlZlB0cjxCbG9iSXRlbT4gRGF0YVJhbmdlQmxvYkl0ZW06
OmNyZWF0ZShQYXNzUmVmUHRyPERhdGFCbG9iSXRlbT4gaXRlbSwgbG9uZyBsb25nIHN0YXJ0LCBs
b25nIGxvbmcgbGVuZ3RoKQoreworICAgIHJldHVybiBhZG9wdFJlZihzdGF0aWNfY2FzdDxCbG9i
SXRlbSo+KG5ldyBEYXRhUmFuZ2VCbG9iSXRlbShpdGVtLCBzdGFydCwgbGVuZ3RoKSkpOworfQor
CitEYXRhUmFuZ2VCbG9iSXRlbTo6RGF0YVJhbmdlQmxvYkl0ZW0oUGFzc1JlZlB0cjxEYXRhQmxv
Ykl0ZW0+IGl0ZW0sIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCkKKyAgICA6IG1f
bGVuZ3RoKGxlbmd0aCkKK3sKKyAgICBjb25zdCBEYXRhUmFuZ2VCbG9iSXRlbSogcmFuZ2VJdGVt
ID0gbV9pdGVtLT50b0RhdGFSYW5nZUJsb2JJdGVtKCk7CisgICAgaWYgKHJhbmdlSXRlbSkgewor
ICAgICAgICBtX2l0ZW0gPSByYW5nZUl0ZW0tPm1faXRlbTsKKyAgICAgICAgbV9zdGFydCA9IHN0
YXJ0ICsgcmFuZ2VJdGVtLT5tX3N0YXJ0OworICAgICAgICBBU1NFUlQoIW1faXRlbS0+dG9EYXRh
UmFuZ2VCbG9iSXRlbSgpKTsKKyAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHVuc2lnbmVkIGxv
bmcgbG9uZz4obV9zdGFydCArIG1fbGVuZ3RoKSA8PSBtX2l0ZW0tPnNpemUoKSk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgbV9pdGVtID0gaXRlbTsKKyAgICAgICAgbV9zdGFydCA9IHN0YXJ0Owor
ICAgIH0KK30KKworY29uc3QgY2hhciogRGF0YVJhbmdlQmxvYkl0ZW06OmRhdGEoKSBjb25zdAor
eworICAgIHJldHVybiBtX2l0ZW0tPmRhdGEoKSArIG1fc3RhcnQ7Cit9CisKKy8vIEZpbGVSYW5n
ZUJsb2JJdGVtIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisKK1Bhc3NSZWZQdHI8QmxvYkl0ZW0+IEZpbGVSYW5nZUJsb2JJdGVtOjpj
cmVhdGUoY29uc3QgU3RyaW5nJiBwYXRoLCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5n
dGgsIGRvdWJsZSBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUpCit7CisgICAgcmV0dXJuIGFkb3B0
UmVmKHN0YXRpY19jYXN0PEJsb2JJdGVtKj4obmV3IEZpbGVSYW5nZUJsb2JJdGVtKHBhdGgsIHN0
YXJ0LCBsZW5ndGgsIHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSkpKTsKK30KKworRmlsZVJhbmdl
QmxvYkl0ZW06OkZpbGVSYW5nZUJsb2JJdGVtKGNvbnN0IFN0cmluZyYgcGF0aCwgbG9uZyBsb25n
IHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoLCBkb3VibGUgbW9kaWZpY2F0aW9uVGltZSkKKyAgICA6
IEZpbGVCbG9iSXRlbShwYXRoKQorICAgICwgbV9zdGFydChzdGFydCkKKyAgICAsIG1fbGVuZ3Ro
KGxlbmd0aCkKKyAgICAsIG1fc25hcHNob3RNb2RpZmljYXRpb25UaW1lKG1vZGlmaWNhdGlvblRp
bWUpCit7CisgICAgbV91bmlxdWVOYW1lID0gIkJsb2IiICsgY3JlYXRlQ2Fub25pY2FsVVVJRFN0
cmluZygpOworICAgIG1fdW5pcXVlTmFtZS5yZXBsYWNlKCItIiwgIiIpOyAvLyBGb3Igc2FmdHks
IHJlbW92ZSAnLScgZnJvbSB0aGUgZmlsZW5hbWUgc25jZSBzb21lIHNlcnZlcnMgbWF5IG5vdCBs
aWtlIGl0LgorfQorCisjZW5kaWYgLy8gRU5BQkxFKEJMT0JfU0xJQ0UpCisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vQmxvYkl0ZW0uaCBiL1dl
YkNvcmUvcGxhdGZvcm0vQmxvYkl0ZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMmVlNTZiMDgxNzk2NDNhOGQ3
OWUyYjg3OTcyYzhkMWVmZGQwMjhiCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9y
bS9CbG9iSXRlbS5oCkBAIC0wLDAgKzEsMjA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisg
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQmxvYkl0ZW1faAorI2RlZmlu
ZSBCbG9iSXRlbV9oCisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlRl
eHRFbmNvZGluZy5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCisvLyBTdHJpbmcgZW5kaW5nIHR5cGVzLgorZW51bSBMaW5lRW5kaW5nIHsKKyAgICBF
bmRpbmdUcmFuc3BhcmVudCA9IDAsCisgICAgRW5kaW5nTEYsCisgICAgRW5kaW5nQ1IsCisgICAg
RW5kaW5nQ1JMRiwKK307CisKK2NsYXNzIEJ5dGVBcnJheUJsb2JJdGVtOworY2xhc3MgRGF0YUJs
b2JJdGVtOworY2xhc3MgRGF0YVJhbmdlQmxvYkl0ZW07CitjbGFzcyBGaWxlQmxvYkl0ZW07Citj
bGFzcyBGaWxlUmFuZ2VCbG9iSXRlbTsKK2NsYXNzIFN0cmluZ0Jsb2JJdGVtOworCisvLyBBIGJh
c2UgaW50ZXJmYWNlIGZvciBhbGwgYXJiaXRyYXJ5LWRhdGEtb2JqZWN0IGNvbXBvbmVudCBpdGVt
cy4KKy8vIFRoZSBCbG9iSXRlbSBhbmQgaXRzIHN1YmNsYXNzZXMgYXJlIHN0cnVjdHVyZWQgbGlr
ZSB0aGUgZm9sbG93aW5nOgorLy8gICAgQmxvYkl0ZW0KKy8vICAgICAgIHwKKy8vICAgICAgICst
LS0tLS0tPiBEYXRhQmxvYkl0ZW0KKy8vICAgICAgIHwgICAgICAgICAgICAgIHwKKy8vICAgICAg
IHwgICAgICAgICAgICAgICstLS0tLS0tLS0+IFN0cmluZ0Jsb2JJdGVtCisvLyAgICAgICB8ICAg
ICAgICAgICAgICArLS0tLS0tLS0tPiBCeXRlQXJyYXlCbG9iSXRlbQorLy8gICAgICAgfCAgICAg
ICAgICAgICAgKy0tLS0tLS0tLT4gRGF0YVJhbmdlQmxvYkl0ZW0KKy8vICAgICAgIHwKKy8vICAg
ICAgICstLS0tLS0tPiBGaWxlQmxvYkl0ZW0KKy8vICAgICAgICAgICAgICAgICAgICAgIHwKKy8v
ICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0+IEZpbGVSYW5nZUJsb2JJdGVtCisvLwor
Y2xhc3MgQmxvYkl0ZW0gOiBwdWJsaWMgUmVmQ291bnRlZDxCbG9iSXRlbT4geworcHVibGljOgor
ICAgIHZpcnR1YWwgfkJsb2JJdGVtKCkgeyB9CisgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxv
bmcgc2l6ZSgpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgY29uc3QgRGF0YUJsb2JJdGVtKiB0
b0RhdGFCbG9iSXRlbSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IFN0
cmluZ0Jsb2JJdGVtKiB0b1N0cmluZ0Jsb2JJdGVtKCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAg
IHZpcnR1YWwgY29uc3QgQnl0ZUFycmF5QmxvYkl0ZW0qIHRvQnl0ZUFycmF5QmxvYkl0ZW0oKSBj
b25zdCB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBjb25zdCBGaWxlQmxvYkl0ZW0qIHRvRmls
ZUJsb2JJdGVtKCkgY29uc3QgeyByZXR1cm4gMDsgfQorI2lmIEVOQUJMRShCTE9CX1NMSUNFKQor
ICAgIHZpcnR1YWwgY29uc3QgRGF0YVJhbmdlQmxvYkl0ZW0qIHRvRGF0YVJhbmdlQmxvYkl0ZW0o
KSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBjb25zdCBGaWxlUmFuZ2VCbG9iSXRl
bSogdG9GaWxlUmFuZ2VCbG9iSXRlbSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKworICAgIC8vIE5v
dGU6IG5vIGV4dGVybmFsIG1ldGhvZHMgZXhjZXB0IGZvciBCbG9iOjpzbGljZSBzaG91bGQgY2Fs
bCB0aGlzLgorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxCbG9iSXRlbT4gc2xpY2UobG9uZyBsb25n
IHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoKSA9IDA7CisjZW5kaWYgLy8gRU5BQkxFKEJMT0JfU0xJ
Q0UpCisKK3Byb3RlY3RlZDoKKyAgICBCbG9iSXRlbSgpIHsgfQorfTsKKwordHlwZWRlZiBWZWN0
b3I8UmVmUHRyPEJsb2JJdGVtPiA+IEJsb2JJdGVtTGlzdDsKKworY2xhc3MgRGF0YUJsb2JJdGVt
IDogcHVibGljIEJsb2JJdGVtIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGRh
dGEoKSBjb25zdCA9IDA7CisKKyAgICAvLyBCbG9iSXRlbSBtZXRob2RzLgorICAgIHZpcnR1YWwg
Y29uc3QgRGF0YUJsb2JJdGVtKiB0b0RhdGFCbG9iSXRlbSgpIGNvbnN0IHsgcmV0dXJuIHRoaXM7
IH0KKyNpZiBFTkFCTEUoQkxPQl9TTElDRSkKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8QmxvYkl0
ZW0+IHNsaWNlKGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCk7CisjZW5kaWYgLy8g
RU5BQkxFKEJMT0JfU0xJQ0UpCit9OworCitjbGFzcyBGaWxlQmxvYkl0ZW0gOiBwdWJsaWMgQmxv
Ykl0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJsb2JJdGVtPiBjcmVhdGUo
Y29uc3QgU3RyaW5nJiBwYXRoKTsKKyAgICB2aXJ0dWFsIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNv
bnN0IHsgcmV0dXJuIG1fZmlsZU5hbWU7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IFN0cmluZyYgcGF0
aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aDsgfQorCisgICAgLy8gQmxvYkl0ZW0gbWV0aG9kcy4K
KyAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplKCkgY29uc3Q7CisgICAgdmlydHVh
bCBjb25zdCBGaWxlQmxvYkl0ZW0qIHRvRmlsZUJsb2JJdGVtKCkgY29uc3QgeyByZXR1cm4gdGhp
czsgfQorI2lmIEVOQUJMRShCTE9CX1NMSUNFKQorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxCbG9i
SXRlbT4gc2xpY2UobG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoKTsKKyNlbmRpZiAv
LyBFTkFCTEUoQkxPQl9TTElDRSkKKworcHJvdGVjdGVkOgorICAgIEZpbGVCbG9iSXRlbShjb25z
dCBTdHJpbmcmIHBhdGgpOworICAgIFN0cmluZyBtX3BhdGg7CisgICAgU3RyaW5nIG1fZmlsZU5h
bWU7Cit9OworCitjbGFzcyBTdHJpbmdCbG9iSXRlbSA6IHB1YmxpYyBEYXRhQmxvYkl0ZW0gewor
cHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJsb2JJdGVtPiBjcmVhdGUoY29uc3QgU3Ry
aW5nJiwgTGluZUVuZGluZywgVGV4dEVuY29kaW5nKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxC
bG9iSXRlbT4gY3JlYXRlKGNvbnN0IENTdHJpbmcmKTsKKyAgICBjb25zdCBDU3RyaW5nJiBjc3Ry
KCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9CisKKyAgICAvLyBCbG9iSXRlbSBtZXRob2RzLgor
ICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBsb25nIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2Rh
dGEubGVuZ3RoKCk7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IFN0cmluZ0Jsb2JJdGVtKiB0b1N0cmlu
Z0Jsb2JJdGVtKCkgY29uc3QgeyByZXR1cm4gdGhpczsgfQorCisgICAgLy8gRGF0YUJsb2JJdGVt
IG1ldGhvZHMuCisgICAgdmlydHVhbCBjb25zdCBjaGFyKiBkYXRhKCkgY29uc3QgeyByZXR1cm4g
bV9kYXRhLmRhdGEoKTsgfQorCitwcml2YXRlOgorICAgIFN0cmluZ0Jsb2JJdGVtKGNvbnN0IFN0
cmluZyYsIExpbmVFbmRpbmcsIFRleHRFbmNvZGluZyk7CisgICAgU3RyaW5nQmxvYkl0ZW0oY29u
c3QgQ1N0cmluZyYpOworICAgIHN0YXRpYyBDU3RyaW5nIGNvbnZlcnRUb0NTdHJpbmcoY29uc3Qg
U3RyaW5nJiwgTGluZUVuZGluZywgVGV4dEVuY29kaW5nKTsKKyAgICBDU3RyaW5nIG1fZGF0YTsK
K307CisKK2NsYXNzIEJ5dGVBcnJheUJsb2JJdGVtIDogcHVibGljIERhdGFCbG9iSXRlbSB7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QmxvYkl0ZW0+IGNyZWF0ZShjb25zdCBjaGFy
KiBkYXRhLCBzaXplX3Qgc2l6ZSk7CisKKyAgICAvLyBCbG9iSXRlbSBtZXRob2RzLgorICAgIHZp
cnR1YWwgdW5zaWduZWQgbG9uZyBsb25nIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2J5dGVzQXJy
YXkuc2l6ZSgpOyB9CisgICAgdmlydHVhbCBjb25zdCBCeXRlQXJyYXlCbG9iSXRlbSogdG9CeXRl
QXJyYXlCbG9iSXRlbSgpIGNvbnN0IHsgcmV0dXJuIHRoaXM7IH0KKworICAgIC8vIERhdGFCbG9i
SXRlbSBtZXRob2RzLgorICAgIHZpcnR1YWwgY29uc3QgY2hhciogZGF0YSgpIGNvbnN0IHsgcmV0
dXJuIG1fYnl0ZXNBcnJheS5kYXRhKCk7IH0KKworcHJpdmF0ZToKKyAgICBCeXRlQXJyYXlCbG9i
SXRlbShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3Qgc2l6ZSk7CisgICAgVmVjdG9yPGNoYXI+IG1f
Ynl0ZXNBcnJheTsKK307CisKKyNpZiBFTkFCTEUoQkxPQl9TTElDRSkKKworLy8gQmxvYkl0ZW0g
Y2xhc3MgZm9yIHNsaWNlZCBkYXRhIChzdHJpbmcgb3IgYnl0ZXMtYXJyYXkpLgorY2xhc3MgRGF0
YVJhbmdlQmxvYkl0ZW0gOiBwdWJsaWMgRGF0YUJsb2JJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxCbG9iSXRlbT4gY3JlYXRlKFBhc3NSZWZQdHI8RGF0YUJsb2JJdGVtPiwg
bG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoKTsKKworICAgIC8vIEJsb2JJdGVtIG1l
dGhvZHMuCisgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fbGVuZ3RoOyB9CisgICAgdmlydHVhbCBjb25zdCBEYXRhUmFuZ2VCbG9iSXRlbSogdG9E
YXRhUmFuZ2VCbG9iSXRlbSgpIGNvbnN0IHsgcmV0dXJuIHRoaXM7IH0KKworICAgIC8vIERhdGFC
bG9iSXRlbSBtZXRob2RzLgorICAgIHZpcnR1YWwgY29uc3QgY2hhciogZGF0YSgpIGNvbnN0Owor
Citwcml2YXRlOgorICAgIERhdGFSYW5nZUJsb2JJdGVtKFBhc3NSZWZQdHI8RGF0YUJsb2JJdGVt
PiwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoKTsKKyAgICBSZWZQdHI8RGF0YUJs
b2JJdGVtPiBtX2l0ZW07CisgICAgbG9uZyBsb25nIG1fc3RhcnQ7CisgICAgbG9uZyBsb25nIG1f
bGVuZ3RoOworfTsKKworY2xhc3MgRmlsZVJhbmdlQmxvYkl0ZW0gOiBwdWJsaWMgRmlsZUJsb2JJ
dGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCbG9iSXRlbT4gY3JlYXRlKGNv
bnN0IFN0cmluZyYgcGF0aCwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoLCBkb3Vi
bGUgc25hcHNob3RNb2RpZmljYXRpb25UaW1lKTsKKyAgICBsb25nIGxvbmcgc3RhcnQoKSBjb25z
dCB7IHJldHVybiBtX3N0YXJ0OyB9CisgICAgZG91YmxlIHNuYXBzaG90TW9kaWZpY2F0aW9uVGlt
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc25hcHNob3RNb2RpZmljYXRpb25UaW1lOyB9CisKKyAgICAv
LyBCbG9iSXRlbSBtZXRob2RzLgorICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBsb25nIHNpemUo
KSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQorICAgIHZpcnR1YWwgY29uc3QgRmlsZVJhbmdl
QmxvYkl0ZW0qIHRvRmlsZVJhbmdlQmxvYkl0ZW0oKSBjb25zdCB7IHJldHVybiB0aGlzOyB9CisK
KyAgICAvLyBGaWxlQmxvYkl0ZW0gbWV0aG9kcy4KKyAgICB2aXJ0dWFsIGNvbnN0IFN0cmluZyYg
bmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fdW5pcXVlTmFtZTsgfQorCitwcml2YXRlOgorICAgIEZp
bGVSYW5nZUJsb2JJdGVtKGNvbnN0IFN0cmluZyYgcGF0aCwgbG9uZyBsb25nIHN0YXJ0LCBsb25n
IGxvbmcgbGVuZ3RoLCBkb3VibGUgc25hcHNob3RNb2RpZmljYXRpb25UaW1lKTsKKyAgICBsb25n
IGxvbmcgbV9zdGFydDsKKyAgICBsb25nIGxvbmcgbV9sZW5ndGg7CisgICAgU3RyaW5nIG1fdW5p
cXVlTmFtZTsKKworICAgIGRvdWJsZSBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZTsKK307CisK
KyNlbmRpZiAvLyBFTkFCTEUoQkxPQl9TTElDRSkKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gQmxvYkl0ZW1faApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL0Zvcm1EYXRhLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAK
aW5kZXggOTE4MDAyYWVmZDgxYTY4OTFmOWYxOWJhZjQ0ZDc1NTkxZmRmYTQ4NC4uZjAyY2ViMWVi
NzEzZTI2ZThmZTNkYmEwMWY2OTU4MTA3YzI4N2Y5YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Rm9ybURhdGEuY3BwCkBAIC0xOSwyMyArMTksMjYgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmln
LmgiCisKICNpbmNsdWRlICJGb3JtRGF0YS5oIgogCi0jaW5jbHVkZSAiQmxvYi5oIgorI2luY2x1
ZGUgIkJsb2JJdGVtLmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAiQ2hyb21lQ2xp
ZW50LmgiCi0jaW5jbHVkZSAiRE9NRm9ybURhdGEuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgot
I2luY2x1ZGUgIkZpbGUuaCIKICNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiRm9y
bURhdGFCdWlsZGVyLmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgogI2luY2x1ZGUg
IlBhZ2UuaCIKICNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKLSNpbmNsdWRlICJVVUlELmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorI2lmIEVOQUJMRShCTE9CX1NMSUNFKQorY29uc3QgbG9u
ZyBsb25nIEZvcm1EYXRhRWxlbWVudDo6dG9FbmRPZkZpbGUgPSAtMTsKK2NvbnN0IGRvdWJsZSBG
b3JtRGF0YUVsZW1lbnQ6OmRvTm90Q2hlY2tGaWxlQ2hhbmdlID0gMDsKKyNlbmRpZgorCiBpbmxp
bmUgRm9ybURhdGE6OkZvcm1EYXRhKCkKICAgICA6IG1faWRlbnRpZmllcigwKQogICAgICwgbV9o
YXNHZW5lcmF0ZWRGaWxlcyhmYWxzZSkKQEAgLTk2LDE3ICs5OSwxNyBAQCBQYXNzUmVmUHRyPEZv
cm1EYXRhPiBGb3JtRGF0YTo6Y3JlYXRlKGNvbnN0IFZlY3RvcjxjaGFyPiYgdmVjdG9yKQogICAg
IHJldHVybiByZXN1bHQucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPEZvcm1EYXRhPiBGb3Jt
RGF0YTo6Y3JlYXRlKGNvbnN0IERPTUZvcm1EYXRhJiBkb21Gb3JtRGF0YSkKK1Bhc3NSZWZQdHI8
Rm9ybURhdGE+IEZvcm1EYXRhOjpjcmVhdGUoY29uc3QgQmxvYkl0ZW1MaXN0JiBpdGVtcywgY29u
c3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZykKIHsKICAgICBSZWZQdHI8Rm9ybURhdGE+IHJlc3Vs
dCA9IGNyZWF0ZSgpOwotICAgIHJlc3VsdC0+YXBwZW5kRE9NRm9ybURhdGEoZG9tRm9ybURhdGEs
IGZhbHNlLCAwKTsKKyAgICByZXN1bHQtPmFwcGVuZEtleVZhbHVlUGFpckl0ZW1zKGl0ZW1zLCBl
bmNvZGluZywgZmFsc2UsIDApOwogICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwogfQogCi1Q
YXNzUmVmUHRyPEZvcm1EYXRhPiBGb3JtRGF0YTo6Y3JlYXRlTXVsdGlQYXJ0KGNvbnN0IERPTUZv
cm1EYXRhJiBkb21Gb3JtRGF0YSwgRG9jdW1lbnQqIGRvY3VtZW50KQorUGFzc1JlZlB0cjxGb3Jt
RGF0YT4gRm9ybURhdGE6OmNyZWF0ZU11bHRpUGFydChjb25zdCBCbG9iSXRlbUxpc3QmIGl0ZW1z
LCBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nLCBEb2N1bWVudCogZG9jdW1lbnQpCiB7CiAg
ICAgUmVmUHRyPEZvcm1EYXRhPiByZXN1bHQgPSBjcmVhdGUoKTsKLSAgICByZXN1bHQtPmFwcGVu
ZERPTUZvcm1EYXRhKGRvbUZvcm1EYXRhLCB0cnVlLCBkb2N1bWVudCk7CisgICAgcmVzdWx0LT5h
cHBlbmRLZXlWYWx1ZVBhaXJJdGVtcyhpdGVtcywgZW5jb2RpbmcsIHRydWUsIGRvY3VtZW50KTsK
ICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0KIApAQCAtMTU0LDEyICsxNTcsNDQgQEAg
dm9pZCBGb3JtRGF0YTo6YXBwZW5kRGF0YShjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSkK
IHZvaWQgRm9ybURhdGE6OmFwcGVuZEZpbGUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgYm9vbCBz
aG91bGRHZW5lcmF0ZUZpbGUpCiB7CiAjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgbV9lbGVt
ZW50cy5hcHBlbmQoRm9ybURhdGFFbGVtZW50KGZpbGVuYW1lLCAwLCBCbG9iOjp0b0VuZE9mRmls
ZSwgQmxvYjo6ZG9Ob3RDaGVja0ZpbGVDaGFuZ2UsIHNob3VsZEdlbmVyYXRlRmlsZSkpOworICAg
IG1fZWxlbWVudHMuYXBwZW5kKEZvcm1EYXRhRWxlbWVudChmaWxlbmFtZSwgMCwgRm9ybURhdGFF
bGVtZW50Ojp0b0VuZE9mRmlsZSwgRm9ybURhdGFFbGVtZW50Ojpkb05vdENoZWNrRmlsZUNoYW5n
ZSwgc2hvdWxkR2VuZXJhdGVGaWxlKSk7CiAjZWxzZQogICAgIG1fZWxlbWVudHMuYXBwZW5kKEZv
cm1EYXRhRWxlbWVudChmaWxlbmFtZSwgc2hvdWxkR2VuZXJhdGVGaWxlKSk7CiAjZW5kaWYKIH0K
IAordm9pZCBGb3JtRGF0YTo6YXBwZW5kSXRlbXMoY29uc3QgQmxvYkl0ZW1MaXN0JiBpdGVtcykK
K3sKKyAgICBmb3IgKEJsb2JJdGVtTGlzdDo6Y29uc3RfaXRlcmF0b3IgaXRlcihpdGVtcy5iZWdp
bigpKTsgaXRlciAhPSBpdGVtcy5lbmQoKTsgKytpdGVyKQorICAgICAgICBhcHBlbmRJdGVtKGl0
ZXItPmdldCgpLCBmYWxzZSk7Cit9CisKK3ZvaWQgRm9ybURhdGE6OmFwcGVuZEl0ZW0oY29uc3Qg
QmxvYkl0ZW0qIGl0ZW0sIGJvb2wgc2hvdWxkR2VuZXJhdGVGaWxlKQoreworICAgIGNvbnN0IERh
dGFCbG9iSXRlbSogZGF0YUl0ZW0gPSBpdGVtLT50b0RhdGFCbG9iSXRlbSgpOworICAgIGlmIChk
YXRhSXRlbSkgeworICAgICAgICBhcHBlbmREYXRhKGRhdGFJdGVtLT5kYXRhKCksIHN0YXRpY19j
YXN0PHNpemVfdD4oZGF0YUl0ZW0tPnNpemUoKSkpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgY29uc3QgRmlsZUJsb2JJdGVtKiBmaWxlSXRlbSA9IGl0ZW0tPnRvRmlsZUJsb2JJdGVt
KCk7CisgICAgQVNTRVJUKGZpbGVJdGVtKTsKKyAgICBpZiAoZmlsZUl0ZW0tPnBhdGgoKS5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgLy8gSWYgdGhlIHBhdGggaXMgZW1wdHkgZG8gbm90IGFkZCB0aGUg
aXRlbS4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworI2lmIEVOQUJMRShCTE9CX1NMSUNFKQor
ICAgIGNvbnN0IEZpbGVSYW5nZUJsb2JJdGVtKiBmaWxlUmFuZ2VJdGVtID0gaXRlbS0+dG9GaWxl
UmFuZ2VCbG9iSXRlbSgpOworICAgIGlmIChmaWxlUmFuZ2VJdGVtKSB7CisgICAgICAgIGFwcGVu
ZEZpbGVSYW5nZShmaWxlSXRlbS0+cGF0aCgpLCBmaWxlUmFuZ2VJdGVtLT5zdGFydCgpLCBmaWxl
UmFuZ2VJdGVtLT5zaXplKCksIGZpbGVSYW5nZUl0ZW0tPnNuYXBzaG90TW9kaWZpY2F0aW9uVGlt
ZSgpLCBzaG91bGRHZW5lcmF0ZUZpbGUpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlm
CisKKyAgICBhcHBlbmRGaWxlKGZpbGVJdGVtLT5wYXRoKCksIHNob3VsZEdlbmVyYXRlRmlsZSk7
Cit9CisKICNpZiBFTkFCTEUoQkxPQl9TTElDRSkKIHZvaWQgRm9ybURhdGE6OmFwcGVuZEZpbGVS
YW5nZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBs
ZW5ndGgsIGRvdWJsZSBleHBlY3RlZE1vZGlmaWNhdGlvblRpbWUsIGJvb2wgc2hvdWxkR2VuZXJh
dGVGaWxlKQogewpAQCAtMTY3LDQyICsyMDIsMzAgQEAgdm9pZCBGb3JtRGF0YTo6YXBwZW5kRmls
ZVJhbmdlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb24K
IH0KICNlbmRpZgogCi12b2lkIEZvcm1EYXRhOjphcHBlbmRET01Gb3JtRGF0YShjb25zdCBET01G
b3JtRGF0YSYgZG9tRm9ybURhdGEsIGJvb2wgaXNNdWx0aVBhcnRGb3JtLCBEb2N1bWVudCogZG9j
dW1lbnQpCit2b2lkIEZvcm1EYXRhOjphcHBlbmRLZXlWYWx1ZVBhaXJJdGVtcyhjb25zdCBCbG9i
SXRlbUxpc3QmIGl0ZW1zLCBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nLCBib29sIGlzTXVs
dGlQYXJ0Rm9ybSwgRG9jdW1lbnQqIGRvY3VtZW50KQogewogICAgIEZvcm1EYXRhQnVpbGRlciBm
b3JtRGF0YUJ1aWxkZXI7CiAgICAgaWYgKGlzTXVsdGlQYXJ0Rm9ybSkKICAgICAgICAgbV9ib3Vu
ZGFyeSA9IGZvcm1EYXRhQnVpbGRlci5nZW5lcmF0ZVVuaXF1ZUJvdW5kYXJ5U3RyaW5nKCk7CiAK
ICAgICBWZWN0b3I8Y2hhcj4gZW5jb2RlZERhdGE7Ci0gICAgVGV4dEVuY29kaW5nIGVuY29kaW5n
ID0gZG9tRm9ybURhdGEuZW5jb2RpbmcoKTsKIAotICAgIGNvbnN0IFZlY3RvcjxGb3JtRGF0YUxp
c3Q6Okl0ZW0+JiBsaXN0ID0gZG9tRm9ybURhdGEubGlzdCgpOwotICAgIHNpemVfdCBmb3JtRGF0
YUxpc3RTaXplID0gbGlzdC5zaXplKCk7CisgICAgc2l6ZV90IGZvcm1EYXRhTGlzdFNpemUgPSBp
dGVtcy5zaXplKCk7CiAgICAgQVNTRVJUKCEoZm9ybURhdGFMaXN0U2l6ZSAlIDIpKTsKICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGZvcm1EYXRhTGlzdFNpemU7IGkgKz0gMikgewotICAgICAg
ICBjb25zdCBGb3JtRGF0YUxpc3Q6Okl0ZW0mIGtleSA9IGxpc3RbaV07Ci0gICAgICAgIGNvbnN0
IEZvcm1EYXRhTGlzdDo6SXRlbSYgdmFsdWUgPSBsaXN0W2kgKyAxXTsKKyAgICAgICAgY29uc3Qg
U3RyaW5nQmxvYkl0ZW0qIGtleSA9IGl0ZW1zW2ldLT50b1N0cmluZ0Jsb2JJdGVtKCk7CisgICAg
ICAgIGNvbnN0IFJlZlB0cjxCbG9iSXRlbT4gdmFsdWUgPSBpdGVtc1tpICsgMV07CisgICAgICAg
IEFTU0VSVChrZXkpOwogICAgICAgICBpZiAoaXNNdWx0aVBhcnRGb3JtKSB7CiAgICAgICAgICAg
ICBWZWN0b3I8Y2hhcj4gaGVhZGVyOwotICAgICAgICAgICAgZm9ybURhdGFCdWlsZGVyLmJlZ2lu
TXVsdGlQYXJ0SGVhZGVyKGhlYWRlciwgbV9ib3VuZGFyeS5kYXRhKCksIGtleS5kYXRhKCkpOwor
ICAgICAgICAgICAgZm9ybURhdGFCdWlsZGVyLmJlZ2luTXVsdGlQYXJ0SGVhZGVyKGhlYWRlciwg
bV9ib3VuZGFyeS5kYXRhKCksIGtleS0+Y3N0cigpKTsKIAogICAgICAgICAgICAgYm9vbCBzaG91
bGRHZW5lcmF0ZUZpbGUgPSBmYWxzZTsKICAgICAgICAgICAgIC8vIElmIHRoZSBjdXJyZW50IHR5
cGUgaXMgRklMRSwgdGhlbiB3ZSBhbHNvIG5lZWQgdG8gaW5jbHVkZSB0aGUgZmlsZW5hbWUKLSAg
ICAgICAgICAgIGlmICh2YWx1ZS5ibG9iKCkpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBTdHJp
bmcmIHBhdGggPSB2YWx1ZS5ibG9iKCktPnBhdGgoKTsKLSNpZiBFTkFCTEUoQkxPQl9TTElDRSkK
LSAgICAgICAgICAgICAgICBTdHJpbmcgZmlsZU5hbWU7Ci0gICAgICAgICAgICAgICAgaWYgKHZh
bHVlLmJsb2IoKS0+aXNGaWxlKCkpCi0gICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lID0gc3Rh
dGljX2Nhc3Q8RmlsZSo+KHZhbHVlLmJsb2IoKSktPmZpbGVOYW1lKCk7Ci0gICAgICAgICAgICAg
ICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIElmIGEgYmxvYiBpcyBzbGljZWQgZnJv
bSBhIGZpbGUsIGl0IGRvZXMgbm90IGhhdmUgdGhlIGZpbGVuYW1lLiBJbiB0aGlzIGNhc2UsIGxl
dCdzIHByb2R1Y2UgYSB1bmlxdWUgZmlsZW5hbWUuCi0gICAgICAgICAgICAgICAgICAgIGZpbGVO
YW1lID0gIkJsb2IiICsgY3JlYXRlQ2Fub25pY2FsVVVJRFN0cmluZygpOwotICAgICAgICAgICAg
ICAgICAgICBmaWxlTmFtZS5yZXBsYWNlKCItIiwgIiIpOyAvLyBGb3Igc2FmdHksIHJlbW92ZSAn
LScgZnJvbSB0aGUgZmlsZW5hbWUgc25jZSBzb21lIHNlcnZlcnMgbWF5IG5vdCBsaWtlIGl0Lgot
ICAgICAgICAgICAgICAgIH0KLSNlbHNlCi0gICAgICAgICAgICAgICAgQVNTRVJUKHZhbHVlLmJs
b2IoKS0+aXNGaWxlKCkpOwotICAgICAgICAgICAgICAgIFN0cmluZyBmaWxlTmFtZSA9IHN0YXRp
Y19jYXN0PEZpbGUqPih2YWx1ZS5ibG9iKCkpLT5maWxlTmFtZSgpOwotI2VuZGlmCisgICAgICAg
ICAgICBjb25zdCBGaWxlQmxvYkl0ZW0qIGZpbGVJdGVtID0gdmFsdWUtPnRvRmlsZUJsb2JJdGVt
KCk7CisgICAgICAgICAgICBpZiAoZmlsZUl0ZW0pIHsKKyAgICAgICAgICAgICAgICBjb25zdCBT
dHJpbmcmIHBhdGggPSBmaWxlSXRlbS0+cGF0aCgpOworICAgICAgICAgICAgICAgIFN0cmluZyBm
aWxlTmFtZSA9IGZpbGVJdGVtLT5uYW1lKCk7CiAKICAgICAgICAgICAgICAgICAvLyBMZXQgdGhl
IGFwcGxpY2F0aW9uIHNwZWNpZnkgYSBmaWxlbmFtZSBpZiBpdCdzIGdvaW5nIHRvIGdlbmVyYXRl
IGEgcmVwbGFjZW1lbnQgZmlsZSBmb3IgdGhlIHVwbG9hZC4KICAgICAgICAgICAgICAgICBpZiAo
IXBhdGguaXNFbXB0eSgpKSB7CkBAIC0yMTcsOSArMjQwLDkgQEAgdm9pZCBGb3JtRGF0YTo6YXBw
ZW5kRE9NRm9ybURhdGEoY29uc3QgRE9NRm9ybURhdGEmIGRvbUZvcm1EYXRhLCBib29sIGlzTXVs
dGlQYXIKICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIGluY2x1ZGUgdGhlIGZpbGVuYW1l
PSIuLiIgcGFydCBpbiB0aGUgaGVhZGVyLCBldmVuIGlmIHRoZSBmaWxlbmFtZSBpcyBlbXB0eQog
ICAgICAgICAgICAgICAgIGZvcm1EYXRhQnVpbGRlci5hZGRGaWxlbmFtZVRvTXVsdGlQYXJ0SGVh
ZGVyKGhlYWRlciwgZW5jb2RpbmcsIGZpbGVOYW1lKTsKIAotICAgICAgICAgICAgICAgIC8vIElm
IGEgYmxvYiBpcyBzbGljZWQgZnJvbSBhIGZpbGUsIGRvIG5vdCBhZGQgdGhlIGNvbnRlbnQgdHlw
ZS4gCisgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGl0ZW0gaXMgc2xpY2VkIGZyb20gYSBmaWxl
LCBkbyBub3QgYWRkIHRoZSBjb250ZW50IHR5cGUuCiAjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0g
ICAgICAgICAgICAgICAgaWYgKCFmaWxlTmFtZS5pc0VtcHR5KCkgJiYgdmFsdWUuYmxvYigpLT5p
c0ZpbGUoKSkgeworICAgICAgICAgICAgICAgIGlmICghZmlsZU5hbWUuaXNFbXB0eSgpICYmICF2
YWx1ZS0+dG9GaWxlUmFuZ2VCbG9iSXRlbSgpKSB7CiAjZWxzZQogICAgICAgICAgICAgICAgIGlm
ICghZmlsZU5hbWUuaXNFbXB0eSgpKSB7CiAjZW5kaWYKQEAgLTIzNywyNSArMjYwLDIwIEBAIHZv
aWQgRm9ybURhdGE6OmFwcGVuZERPTUZvcm1EYXRhKGNvbnN0IERPTUZvcm1EYXRhJiBkb21Gb3Jt
RGF0YSwgYm9vbCBpc011bHRpUGFyCiAKICAgICAgICAgICAgIC8vIEFwcGVuZCBib2R5CiAgICAg
ICAgICAgICBhcHBlbmREYXRhKGhlYWRlci5kYXRhKCksIGhlYWRlci5zaXplKCkpOwotICAgICAg
ICAgICAgaWYgKHNpemVfdCBkYXRhU2l6ZSA9IHZhbHVlLmRhdGEoKS5sZW5ndGgoKSkKLSAgICAg
ICAgICAgICAgICBhcHBlbmREYXRhKHZhbHVlLmRhdGEoKS5kYXRhKCksIGRhdGFTaXplKTsKLSAg
ICAgICAgICAgIGVsc2UgaWYgKHZhbHVlLmJsb2IoKSAmJiAhdmFsdWUuYmxvYigpLT5wYXRoKCku
aXNFbXB0eSgpKQotI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgICAgICAgICAgICAgIGFwcGVu
ZEZpbGVSYW5nZSh2YWx1ZS5ibG9iKCktPnBhdGgoKSwgdmFsdWUuYmxvYigpLT5zdGFydCgpLCB2
YWx1ZS5ibG9iKCktPmxlbmd0aCgpLCB2YWx1ZS5ibG9iKCktPm1vZGlmaWNhdGlvblRpbWUoKSwg
c2hvdWxkR2VuZXJhdGVGaWxlKTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgYXBwZW5kRmlsZSh2
YWx1ZS5ibG9iKCktPnBhdGgoKSwgc2hvdWxkR2VuZXJhdGVGaWxlKTsKLSNlbmRpZgotCisgICAg
ICAgICAgICBhcHBlbmRJdGVtKHZhbHVlLmdldCgpLCBzaG91bGRHZW5lcmF0ZUZpbGUpOwogICAg
ICAgICAgICAgYXBwZW5kRGF0YSgiXHJcbiIsIDIpOwogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgLy8gT21pdCB0aGUgbmFtZSAiaXNpbmRleCIgaWYgaXQncyB0aGUgZmlyc3QgZm9ybSBk
YXRhIGVsZW1lbnQuCiAgICAgICAgICAgICAvLyBGSVhNRTogV2h5IGlzIHRoaXMgYSBnb29kIHJ1
bGU/IElzIHRoaXMgb2Jzb2xldGUgbm93PwotICAgICAgICAgICAgaWYgKGVuY29kZWREYXRhLmlz
RW1wdHkoKSAmJiBrZXkuZGF0YSgpID09ICJpc2luZGV4IikKLSAgICAgICAgICAgICAgICBGb3Jt
RGF0YUJ1aWxkZXI6OmVuY29kZVN0cmluZ0FzRm9ybURhdGEoZW5jb2RlZERhdGEsIHZhbHVlLmRh
dGEoKSk7CisgICAgICAgICAgICBjb25zdCBTdHJpbmdCbG9iSXRlbSogc3RyaW5nVmFsdWUgPSB2
YWx1ZS0+dG9TdHJpbmdCbG9iSXRlbSgpOworICAgICAgICAgICAgaWYgKCFzdHJpbmdWYWx1ZSkK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChlbmNvZGVkRGF0YS5p
c0VtcHR5KCkgJiYga2V5LT5jc3RyKCkgPT0gImlzaW5kZXgiKQorICAgICAgICAgICAgICAgIEZv
cm1EYXRhQnVpbGRlcjo6ZW5jb2RlU3RyaW5nQXNGb3JtRGF0YShlbmNvZGVkRGF0YSwgc3RyaW5n
VmFsdWUtPmNzdHIoKSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZm9ybURh
dGFCdWlsZGVyLmFkZEtleVZhbHVlUGFpckFzRm9ybURhdGEoZW5jb2RlZERhdGEsIGtleS5kYXRh
KCksIHZhbHVlLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgZm9ybURhdGFCdWlsZGVyLmFkZEtl
eVZhbHVlUGFpckFzRm9ybURhdGEoZW5jb2RlZERhdGEsIGtleS0+Y3N0cigpLCBzdHJpbmdWYWx1
ZS0+Y3N0cigpKTsKICAgICAgICAgfQotICAgIH0gCisgICAgfQogCiAgICAgaWYgKGlzTXVsdGlQ
YXJ0Rm9ybSkKICAgICAgICAgZm9ybURhdGFCdWlsZGVyLmFkZEJvdW5kYXJ5VG9NdWx0aVBhcnRI
ZWFkZXIoZW5jb2RlZERhdGEsIG1fYm91bmRhcnkuZGF0YSgpLCB0cnVlKTsKQEAgLTI3MCwxMiAr
Mjg4LDggQEAgdm9pZCBGb3JtRGF0YTo6ZmxhdHRlbihWZWN0b3I8Y2hhcj4mIGRhdGEpIGNvbnN0
CiAgICAgc2l6ZV90IG4gPSBtX2VsZW1lbnRzLnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG47ICsraSkgewogICAgICAgICBjb25zdCBGb3JtRGF0YUVsZW1lbnQmIGUgPSBtX2Vs
ZW1lbnRzW2ldOwotICAgICAgICBpZiAoZS5tX3R5cGUgPT0gRm9ybURhdGFFbGVtZW50OjpkYXRh
KSB7Ci0gICAgICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IGRhdGEuc2l6ZSgpOwotICAgICAgICAg
ICAgc2l6ZV90IGRlbHRhID0gZS5tX2RhdGEuc2l6ZSgpOwotICAgICAgICAgICAgZGF0YS5ncm93
KG9sZFNpemUgKyBkZWx0YSk7Ci0gICAgICAgICAgICBtZW1jcHkoZGF0YS5kYXRhKCkgKyBvbGRT
aXplLCBlLm1fZGF0YS5kYXRhKCksIGRlbHRhKTsKLSAgICAgICAgfQorICAgICAgICBpZiAoZS5t
X3R5cGUgPT0gRm9ybURhdGFFbGVtZW50OjpkYXRhKQorICAgICAgICAgICAgZGF0YS5hcHBlbmQo
ZS5tX2RhdGEuZGF0YSgpLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGUubV9kYXRhLnNpemUoKSkpOwog
ICAgIH0KIH0KIApAQCAtMjg5LDEwICszMDMsMTAgQEAgU3RyaW5nIEZvcm1EYXRhOjpmbGF0dGVu
VG9TdHJpbmcoKSBjb25zdAogdm9pZCBGb3JtRGF0YTo6Z2VuZXJhdGVGaWxlcyhEb2N1bWVudCog
ZG9jdW1lbnQpCiB7CiAgICAgQVNTRVJUKCFtX2hhc0dlbmVyYXRlZEZpbGVzKTsKLSAgICAKKwog
ICAgIGlmIChtX2hhc0dlbmVyYXRlZEZpbGVzKQogICAgICAgICByZXR1cm47Ci0gICAgCisKICAg
ICBQYWdlKiBwYWdlID0gZG9jdW1lbnQtPnBhZ2UoKTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAg
IHJldHVybjsKQEAgLTMxMiw3ICszMjYsNyBAQCB2b2lkIEZvcm1EYXRhOjpyZW1vdmVHZW5lcmF0
ZWRGaWxlc0lmTmVlZGVkKCkKIHsKICAgICBpZiAoIW1faGFzR2VuZXJhdGVkRmlsZXMpCiAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgCisKICAgICBzaXplX3QgbiA9IG1fZWxlbWVudHMuc2l6ZSgp
OwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbjsgKytpKSB7CiAgICAgICAgIEZvcm1EYXRh
RWxlbWVudCYgZSA9IG1fZWxlbWVudHNbaV07CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvRm9ybURhdGEuaCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5o
CmluZGV4IGE0MzkwMjM0Nzk2YTBlMmYxNGY1ZDM0OWY1ZGQwZWZmYzBhNGI3Y2QuLjVkYTEyZGU2
YmQ5YzNhMWE0ZDhjNjUzYWJiZTk3NmViZjZhNGNkZGYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9Gb3JtRGF0YS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9G
b3JtRGF0YS5oCkBAIC0yMCwxOSArMjAsMjEgQEAKICNpZm5kZWYgRm9ybURhdGFfaAogI2RlZmlu
ZSBGb3JtRGF0YV9oCiAKKyNpbmNsdWRlICJCbG9iSXRlbS5oIgogI2luY2x1ZGUgIlBsYXRmb3Jt
U3RyaW5nLmgiCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRE9NRm9ybURhdGE7CiBjbGFz
cyBEb2N1bWVudDsKK2NsYXNzIFRleHRFbmNvZGluZzsKIAogY2xhc3MgRm9ybURhdGFFbGVtZW50
IHsKIHB1YmxpYzoKICAgICBGb3JtRGF0YUVsZW1lbnQoKSA6IG1fdHlwZShkYXRhKSB7IH0KICAg
ICBGb3JtRGF0YUVsZW1lbnQoY29uc3QgVmVjdG9yPGNoYXI+JiBhcnJheSkgOiBtX3R5cGUoZGF0
YSksIG1fZGF0YShhcnJheSkgeyB9CisKICNpZiBFTkFCTEUoQkxPQl9TTElDRSkKICAgICBGb3Jt
RGF0YUVsZW1lbnQoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgbG9uZyBsb25nIGZpbGVTdGFydCwg
bG9uZyBsb25nIGZpbGVMZW5ndGgsIGRvdWJsZSBleHBlY3RlZEZpbGVNb2RpZmljYXRpb25UaW1l
LCBib29sIHNob3VsZEdlbmVyYXRlRmlsZSkgOiBtX3R5cGUoZW5jb2RlZEZpbGUpLCBtX2ZpbGVu
YW1lKGZpbGVuYW1lKSwgbV9maWxlU3RhcnQoZmlsZVN0YXJ0KSwgbV9maWxlTGVuZ3RoKGZpbGVM
ZW5ndGgpLCBtX2V4cGVjdGVkRmlsZU1vZGlmaWNhdGlvblRpbWUoZXhwZWN0ZWRGaWxlTW9kaWZp
Y2F0aW9uVGltZSksIG1fc2hvdWxkR2VuZXJhdGVGaWxlKHNob3VsZEdlbmVyYXRlRmlsZSkgeyB9
CiAjZWxzZQpAQCAtNDksMTMgKzUxLDE4IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIFN0cmluZyBt
X2dlbmVyYXRlZEZpbGVuYW1lOwogICAgIGJvb2wgbV9zaG91bGRHZW5lcmF0ZUZpbGU7CisKKyNp
ZiBFTkFCTEUoQkxPQl9TTElDRSkKKyAgICBzdGF0aWMgY29uc3QgbG9uZyBsb25nIHRvRW5kT2ZG
aWxlOworICAgIHN0YXRpYyBjb25zdCBkb3VibGUgZG9Ob3RDaGVja0ZpbGVDaGFuZ2U7CisjZW5k
aWYKIH07CiAKIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9ybURhdGFFbGVtZW50JiBh
LCBjb25zdCBGb3JtRGF0YUVsZW1lbnQmIGIpCiB7CiAgICAgaWYgKCZhID09ICZiKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAKKwogICAgIGlmIChhLm1fdHlwZSAhPSBiLm1fdHlwZSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChhLm1fZGF0YSAhPSBiLm1fZGF0YSkKQEAgLTY5
LDI1ICs3NiwyNiBAQCBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvcm1EYXRhRWxlbWVu
dCYgYSwgY29uc3QgRm9ybURhdGFFbGVtZW50JiBiKQogCiAgICAgcmV0dXJuIHRydWU7CiB9Ci0g
CisKIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgRm9ybURhdGFFbGVtZW50JiBhLCBjb25z
dCBGb3JtRGF0YUVsZW1lbnQmIGIpCiB7CiAgICAgcmV0dXJuICEoYSA9PSBiKTsKIH0KLSAKKwog
Y2xhc3MgRm9ybURhdGEgOiBwdWJsaWMgUmVmQ291bnRlZDxGb3JtRGF0YT4gewogcHVibGljOgog
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZvcm1EYXRhPiBjcmVhdGUoKTsKICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxGb3JtRGF0YT4gY3JlYXRlKGNvbnN0IHZvaWQqLCBzaXplX3QpOwogICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEZvcm1EYXRhPiBjcmVhdGUoY29uc3QgV1RGOjpDU3RyaW5nJik7CiAgICAg
c3RhdGljIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGNyZWF0ZShjb25zdCBWZWN0b3I8Y2hhcj4mKTsK
LSAgICBzdGF0aWMgUGFzc1JlZlB0cjxGb3JtRGF0YT4gY3JlYXRlKGNvbnN0IERPTUZvcm1EYXRh
Jik7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGNyZWF0ZU11bHRpUGFydChjb25z
dCBET01Gb3JtRGF0YSYsIERvY3VtZW50Kik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Rm9ybURh
dGE+IGNyZWF0ZShjb25zdCBCbG9iSXRlbUxpc3QmLCBjb25zdCBUZXh0RW5jb2RpbmcmKTsKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxGb3JtRGF0YT4gY3JlYXRlTXVsdGlQYXJ0KGNvbnN0IEJsb2JJ
dGVtTGlzdCYsIGNvbnN0IFRleHRFbmNvZGluZyYsIERvY3VtZW50Kik7CiAgICAgUGFzc1JlZlB0
cjxGb3JtRGF0YT4gY29weSgpIGNvbnN0OwogICAgIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGRlZXBD
b3B5KCkgY29uc3Q7CiAgICAgfkZvcm1EYXRhKCk7Ci0gICAgCisKICAgICB2b2lkIGFwcGVuZERh
dGEoY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90KTsKKyAgICB2b2lkIGFwcGVuZEl0ZW1zKGNvbnN0
IEJsb2JJdGVtTGlzdCYpOwogICAgIHZvaWQgYXBwZW5kRmlsZShjb25zdCBTdHJpbmcmIGZpbGVu
YW1lLCBib29sIHNob3VsZEdlbmVyYXRlRmlsZSA9IGZhbHNlKTsKICNpZiBFTkFCTEUoQkxPQl9T
TElDRSkKICAgICB2b2lkIGFwcGVuZEZpbGVSYW5nZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBs
b25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgsIGRvdWJsZSBleHBlY3RlZE1vZGlmaWNh
dGlvblRpbWUsIGJvb2wgc2hvdWxkR2VuZXJhdGVGaWxlID0gZmFsc2UpOwpAQCAtMTE1LDkgKzEy
MywxMSBAQCBwcml2YXRlOgogICAgIEZvcm1EYXRhKCk7CiAgICAgRm9ybURhdGEoY29uc3QgRm9y
bURhdGEmKTsKIAotICAgIHZvaWQgYXBwZW5kRE9NRm9ybURhdGEoY29uc3QgRE9NRm9ybURhdGEm
IGRvbUZvcm1EYXRhLCBib29sIGlzTXVsdGlQYXJ0Rm9ybSwgRG9jdW1lbnQqIGRvY3VtZW50KTsK
KyAgICB2b2lkIGFwcGVuZEl0ZW0oY29uc3QgQmxvYkl0ZW0qLCBib29sIHNob3VsZEdlbmVyYXRl
RmlsZSk7CisgICAgdm9pZCBhcHBlbmRLZXlWYWx1ZVBhaXJJdGVtcyhjb25zdCBCbG9iSXRlbUxp
c3QmLCBjb25zdCBUZXh0RW5jb2RpbmcmLCBib29sIGlzTXVsdGlQYXJ0Rm9ybSwgRG9jdW1lbnQq
KTsKIAogICAgIFZlY3RvcjxGb3JtRGF0YUVsZW1lbnQ+IG1fZWxlbWVudHM7CisKICAgICBpbnQ2
NF90IG1faWRlbnRpZmllcjsKICAgICBib29sIG1faGFzR2VuZXJhdGVkRmlsZXM7CiAgICAgYm9v
bCBtX2Fsd2F5c1N0cmVhbTsKQEAgLTEzMSw3ICsxNDEsNyBAQCBpbmxpbmUgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IEZvcm1EYXRhJiBhLCBjb25zdCBGb3JtRGF0YSYgYikKIAogaW5saW5lIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBGb3JtRGF0YSYgYSwgY29uc3QgRm9ybURhdGEmIGIpCiB7Ci0gICAg
cmV0dXJuIGEuZWxlbWVudHMoKSAhPSBiLmVsZW1lbnRzKCk7CisgICAgcmV0dXJuICEoYSA9PSBi
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL21hYy9Gb3JtRGF0YVN0cmVhbU1hYy5tbSBiL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9tYWMvRm9ybURhdGFTdHJlYW1NYWMubW0KaW5kZXggMjdlY2ZkMDhhZDVhYWFiODc1
NmZhNTk2ZDk5NmJkMmY2ZWM1ZDAzZi4uZGIyZTEzYjA0NWMzMmQ5Y2I0ZWU2ZGNiN2FhY2NiMmE4
NDA3ODRiZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9Gb3JtRGF0
YVN0cmVhbU1hYy5tbQorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL0Zvcm1EYXRh
U3RyZWFtTWFjLm1tCkBAIC0zMSw3ICszMSw2IEBACiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBv
cnQgIkZvcm1EYXRhU3RyZWFtTWFjLmgiCiAKLSNpbXBvcnQgIkJsb2IuaCIKICNpbXBvcnQgIkZp
bGVTeXN0ZW0uaCIKICNpbXBvcnQgIkZvcm1EYXRhLmgiCiAjaW1wb3J0ICJSZXNvdXJjZUhhbmRs
ZS5oIgpAQCAtMTQyLDcgKzE0MSw3IEBAIHN0YXRpYyB2b2lkIGNsb3NlQ3VycmVudFN0cmVhbShG
b3JtU3RyZWFtRmllbGRzICpmb3JtKQogICAgICAgICBDRlJlbGVhc2UoZm9ybS0+Y3VycmVudFN0
cmVhbSk7CiAgICAgICAgIGZvcm0tPmN1cnJlbnRTdHJlYW0gPSBOVUxMOwogI2lmIEVOQUJMRShC
TE9CX1NMSUNFKQotICAgICAgICBmb3JtLT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5ndGggPSBCbG9i
Ojp0b0VuZE9mRmlsZTsKKyAgICAgICAgZm9ybS0+Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoID0g
Rm9ybURhdGFFbGVtZW50Ojp0b0VuZE9mRmlsZTsKICNlbmRpZgogICAgIH0KICAgICBpZiAoZm9y
bS0+Y3VycmVudERhdGEpIHsKQEAgLTE1MSw3ICsxNTAsNyBAQCBzdGF0aWMgdm9pZCBjbG9zZUN1
cnJlbnRTdHJlYW0oRm9ybVN0cmVhbUZpZWxkcyAqZm9ybSkKICAgICB9CiB9CiAKLS8vIFJldHVy
biBmYWxzZSBpZiB3ZSBjYW5ub3QgYWR2YW5jZSB0aGUgc3RyZWFtLiBDdXJyZW50bHkgdGhlIG9u
bHkgcG9zc2libGUgZmFpbHVyZSBpcyB0aGF0IHRoZSB1bmRlcmx5aW5nIGZpbGUgaGFzIGJlZW4g
Y2hhbmdlZCBzaW5jZSBGaWxlLnNsaWNlLiAKKy8vIFJldHVybiBmYWxzZSBpZiB3ZSBjYW5ub3Qg
YWR2YW5jZSB0aGUgc3RyZWFtLiBDdXJyZW50bHkgdGhlIG9ubHkgcG9zc2libGUgZmFpbHVyZSBp
cyB0aGF0IHRoZSB1bmRlcmx5aW5nIGZpbGUgaGFzIGJlZW4gcmVtb3ZlZCBvciBjaGFuZ2VkIHNp
bmNlIEZpbGUuc2xpY2UuCiBzdGF0aWMgYm9vbCBhZHZhbmNlQ3VycmVudFN0cmVhbShGb3JtU3Ry
ZWFtRmllbGRzKiBmb3JtKQogewogICAgIGNsb3NlQ3VycmVudFN0cmVhbShmb3JtKTsKQEAgLTE2
MSw2ICsxNjAsNyBAQCBzdGF0aWMgYm9vbCBhZHZhbmNlQ3VycmVudFN0cmVhbShGb3JtU3RyZWFt
RmllbGRzKiBmb3JtKQogCiAgICAgLy8gQ3JlYXRlIHRoZSBuZXcgc3RyZWFtLgogICAgIEZvcm1E
YXRhRWxlbWVudCYgbmV4dElucHV0ID0gZm9ybS0+cmVtYWluaW5nRWxlbWVudHMubGFzdCgpOwor
CiAgICAgaWYgKG5leHRJbnB1dC5tX3R5cGUgPT0gRm9ybURhdGFFbGVtZW50OjpkYXRhKSB7CiAg
ICAgICAgIHNpemVfdCBzaXplID0gbmV4dElucHV0Lm1fZGF0YS5zaXplKCk7CiAgICAgICAgIGNo
YXIqIGRhdGEgPSBuZXh0SW5wdXQubV9kYXRhLnJlbGVhc2VCdWZmZXIoKTsKQEAgLTE2OSwxNyAr
MTY5LDIwIEBAIHN0YXRpYyBib29sIGFkdmFuY2VDdXJyZW50U3RyZWFtKEZvcm1TdHJlYW1GaWVs
ZHMqIGZvcm0pCiAgICAgfSBlbHNlIHsKICNpZiBFTkFCTEUoQkxPQl9TTElDRSkKICAgICAgICAg
Ly8gQ2hlY2sgaWYgdGhlIGZpbGUgaGFzIGJlZW4gY2hhbmdlZCBvciBub3QgaWYgcmVxdWlyZWQu
Ci0gICAgICAgIGlmIChuZXh0SW5wdXQubV9leHBlY3RlZEZpbGVNb2RpZmljYXRpb25UaW1lICE9
IEJsb2I6OmRvTm90Q2hlY2tGaWxlQ2hhbmdlKSB7CisgICAgICAgIGlmIChuZXh0SW5wdXQubV9l
eHBlY3RlZEZpbGVNb2RpZmljYXRpb25UaW1lICE9IEZvcm1EYXRhRWxlbWVudDo6ZG9Ob3RDaGVj
a0ZpbGVDaGFuZ2UpIHsKICAgICAgICAgICAgIHRpbWVfdCBmaWxlTW9kaWZpY2F0aW9uVGltZTsK
ICAgICAgICAgICAgIGlmICghZ2V0RmlsZU1vZGlmaWNhdGlvblRpbWUobmV4dElucHV0Lm1fZmls
ZW5hbWUsIGZpbGVNb2RpZmljYXRpb25UaW1lKSB8fCBmaWxlTW9kaWZpY2F0aW9uVGltZSAhPSBz
dGF0aWNfY2FzdDx0aW1lX3Q+KG5leHRJbnB1dC5tX2V4cGVjdGVkRmlsZU1vZGlmaWNhdGlvblRp
bWUpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogI2VuZGlmCi0K
ICAgICAgICAgY29uc3QgU3RyaW5nJiBwYXRoID0gbmV4dElucHV0Lm1fc2hvdWxkR2VuZXJhdGVG
aWxlID8gbmV4dElucHV0Lm1fZ2VuZXJhdGVkRmlsZW5hbWUgOiBuZXh0SW5wdXQubV9maWxlbmFt
ZTsKICAgICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBmaWxlbmFtZShBZG9wdENGLCBwYXRo
LmNyZWF0ZUNGU3RyaW5nKCkpOwogICAgICAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IGZpbGVVUkwo
QWRvcHRDRiwgQ0ZVUkxDcmVhdGVXaXRoRmlsZVN5c3RlbVBhdGgoMCwgZmlsZW5hbWUuZ2V0KCks
IGtDRlVSTFBPU0lYUGF0aFN0eWxlLCBGQUxTRSkpOwogICAgICAgICBmb3JtLT5jdXJyZW50U3Ry
ZWFtID0gQ0ZSZWFkU3RyZWFtQ3JlYXRlV2l0aEZpbGUoMCwgZmlsZVVSTC5nZXQoKSk7CisgICAg
ICAgIGlmICghZm9ybS0+Y3VycmVudFN0cmVhbSkgeworICAgICAgICAgICAgLy8gVGhlIGZpbGUg
bXVzdCBoYXZlIGJlZW4gcmVtb3ZlZCBvciBiZWNvbWUgdW5yZWFkYWJsZS4KKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQogI2lmIEVOQUJMRShCTE9CX1NMSUNFKQogICAgICAg
ICBpZiAobmV4dElucHV0Lm1fZmlsZVN0YXJ0ID4gMCkgewogICAgICAgICAgICAgQ0ZOdW1iZXJS
ZWYgcG9zaXRpb24gPSBDRk51bWJlckNyZWF0ZSgwLCBrQ0ZOdW1iZXJMb25nTG9uZ1R5cGUsICZu
ZXh0SW5wdXQubV9maWxlU3RhcnQpOwpAQCAtMjIyLDcgKzIyNSw3IEBAIHN0YXRpYyB2b2lkKiBm
b3JtQ3JlYXRlKENGUmVhZFN0cmVhbVJlZiBzdHJlYW0sIHZvaWQqIGNvbnRleHQpCiAgICAgRm9y
bVN0cmVhbUZpZWxkcyogbmV3SW5mbyA9IG5ldyBGb3JtU3RyZWFtRmllbGRzOwogICAgIG5ld0lu
Zm8tPmN1cnJlbnRTdHJlYW0gPSBOVUxMOwogI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgIG5l
d0luZm8tPmN1cnJlbnRTdHJlYW1SYW5nZUxlbmd0aCA9IEJsb2I6OnRvRW5kT2ZGaWxlOworICAg
IG5ld0luZm8tPmN1cnJlbnRTdHJlYW1SYW5nZUxlbmd0aCA9IEZvcm1EYXRhRWxlbWVudDo6dG9F
bmRPZkZpbGU7CiAjZW5kaWYKICAgICBuZXdJbmZvLT5jdXJyZW50RGF0YSA9IDA7CiAgICAgbmV3
SW5mby0+Zm9ybVN0cmVhbSA9IHN0cmVhbTsgLy8gRG9uJ3QgcmV0YWluLiBUaGF0IHdvdWxkIGNy
ZWF0ZSBhIHJlZmVyZW5jZSBjeWNsZS4KQEAgLTI3MCw3ICsyNzMsNyBAQCBzdGF0aWMgQ0ZJbmRl
eCBmb3JtUmVhZChDRlJlYWRTdHJlYW1SZWYgc3RyZWFtLCBVSW50OCogYnVmZmVyLCBDRkluZGV4
IGJ1ZmZlckxlbgogICAgIHdoaWxlIChmb3JtLT5jdXJyZW50U3RyZWFtKSB7CiAgICAgICAgIENG
SW5kZXggYnl0ZXNUb1JlYWQgPSBidWZmZXJMZW5ndGg7CiAjaWYgRU5BQkxFKEJMT0JfU0xJQ0Up
Ci0gICAgICAgIGlmIChmb3JtLT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5ndGggIT0gQmxvYjo6dG9F
bmRPZkZpbGUgJiYgZm9ybS0+Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoIDwgYnl0ZXNUb1JlYWQp
CisgICAgICAgIGlmIChmb3JtLT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5ndGggIT0gRm9ybURhdGFF
bGVtZW50Ojp0b0VuZE9mRmlsZSAmJiBmb3JtLT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5ndGggPCBi
eXRlc1RvUmVhZCkKICAgICAgICAgICAgIGJ5dGVzVG9SZWFkID0gc3RhdGljX2Nhc3Q8Q0ZJbmRl
eD4oZm9ybS0+Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoKTsKICNlbmRpZgogICAgICAgICBDRklu
ZGV4IGJ5dGVzUmVhZCA9IENGUmVhZFN0cmVhbVJlYWQoZm9ybS0+Y3VycmVudFN0cmVhbSwgYnVm
ZmVyLCBieXRlc1RvUmVhZCk7CkBAIC0yODMsNyArMjg2LDcgQEAgc3RhdGljIENGSW5kZXggZm9y
bVJlYWQoQ0ZSZWFkU3RyZWFtUmVmIHN0cmVhbSwgVUludDgqIGJ1ZmZlciwgQ0ZJbmRleCBidWZm
ZXJMZW4KICAgICAgICAgICAgICphdEVPRiA9IEZBTFNFOwogICAgICAgICAgICAgZm9ybS0+Ynl0
ZXNTZW50ICs9IGJ5dGVzUmVhZDsKICNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAgICAgICAgICAg
IGlmIChmb3JtLT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5ndGggIT0gQmxvYjo6dG9FbmRPZkZpbGUp
CisgICAgICAgICAgICBpZiAoZm9ybS0+Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoICE9IEZvcm1E
YXRhRWxlbWVudDo6dG9FbmRPZkZpbGUpCiAgICAgICAgICAgICAgICAgZm9ybS0+Y3VycmVudFN0
cmVhbVJhbmdlTGVuZ3RoIC09IGJ5dGVzUmVhZDsKICNlbmRpZgogCkBAIC00MDAsNyArNDAzLDcg
QEAgdm9pZCBzZXRIVFRQQm9keShOU011dGFibGVVUkxSZXF1ZXN0ICpyZXF1ZXN0LCBQYXNzUmVm
UHRyPEZvcm1EYXRhPiBmb3JtRGF0YSkKICAgICAgICAgZWxzZSB7CiAjaWYgRU5BQkxFKEJMT0Jf
U0xJQ0UpCiAgICAgICAgICAgICAvLyBJZiB3ZSdyZSBzZW5kaW5nIHRoZSBmaWxlIHJhbmdlLCB1
c2UgdGhlIGV4aXN0aW5nIHJhbmdlIGxlbmd0aCBmb3Igbm93LiBXZSB3aWxsIGRldGVjdCBpZiB0
aGUgZmlsZSBoYXMgYmVlbiBjaGFuZ2VkIHJpZ2h0IGJlZm9yZSB3ZSByZWFkIHRoZSBmaWxlIGFu
ZCBhYm9ydCB0aGUgb3BlcmF0aW9uIGlmIG5lY2Vzc2FyeS4KLSAgICAgICAgICAgIGlmIChlbGVt
ZW50Lm1fZmlsZUxlbmd0aCAhPSBCbG9iOjp0b0VuZE9mRmlsZSkgeworICAgICAgICAgICAgaWYg
KGVsZW1lbnQubV9maWxlTGVuZ3RoICE9IEZvcm1EYXRhRWxlbWVudDo6dG9FbmRPZkZpbGUpIHsK
ICAgICAgICAgICAgICAgICBsZW5ndGggKz0gZWxlbWVudC5tX2ZpbGVMZW5ndGg7CiAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3ht
bC9YTUxIdHRwUmVxdWVzdC5jcHAgYi9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKaW5k
ZXggNWNkZTI0ZGUyOWRiNDQyMTAwMDFhMzAyMzI0NGNhNGNjZDI1Y2ZiYi4uODMxYWRhOTgxMTIx
Mzk0MmE4MDQ4NjRkYTU3ZjBhMzljNGJjYzI4ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS94bWwvWE1M
SHR0cFJlcXVlc3QuY3BwCisrKyBiL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcApAQCAt
NDc4LDExICs0NzgsNyBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpzZW5kKEJsb2IqIGJvZHksIEV4
Y2VwdGlvbkNvZGUmIGVjKQogICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHdlIHNldCBhIENvbnRl
bnQtVHlwZSBpZiBvbmUgaXMgbm90IHNldC4KICAgICAgICAgLy8gRklYTUU6IGFkZCBzdXBwb3J0
IGZvciB1cGxvYWRpbmcgYnVuZGxlcy4KICAgICAgICAgbV9yZXF1ZXN0RW50aXR5Qm9keSA9IEZv
cm1EYXRhOjpjcmVhdGUoKTsKLSNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAgICAgICAgbV9yZXF1
ZXN0RW50aXR5Qm9keS0+YXBwZW5kRmlsZVJhbmdlKGJvZHktPnBhdGgoKSwgYm9keS0+c3RhcnQo
KSwgYm9keS0+bGVuZ3RoKCksIGJvZHktPm1vZGlmaWNhdGlvblRpbWUoKSk7Ci0jZWxzZQotICAg
ICAgICBtX3JlcXVlc3RFbnRpdHlCb2R5LT5hcHBlbmRGaWxlKGJvZHktPnBhdGgoKSwgZmFsc2Up
OwotI2VuZGlmCisgICAgICAgIG1fcmVxdWVzdEVudGl0eUJvZHktPmFwcGVuZEl0ZW1zKGJvZHkt
Pml0ZW1zKCkpOwogICAgIH0KIAogICAgIGNyZWF0ZVJlcXVlc3QoZWMpOwpAQCAtNDk0LDcgKzQ5
MCw3IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OnNlbmQoRE9NRm9ybURhdGEqIGJvZHksIEV4Y2Vw
dGlvbkNvZGUmIGVjKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV9tZXRob2QgIT0gIkdF
VCIgJiYgbV9tZXRob2QgIT0gIkhFQUQiICYmIG1fdXJsLnByb3RvY29sSW5IVFRQRmFtaWx5KCkp
IHsKLSAgICAgICAgbV9yZXF1ZXN0RW50aXR5Qm9keSA9IEZvcm1EYXRhOjpjcmVhdGVNdWx0aVBh
cnQoKmJvZHksIGRvY3VtZW50KCkpOworICAgICAgICBtX3JlcXVlc3RFbnRpdHlCb2R5ID0gRm9y
bURhdGE6OmNyZWF0ZU11bHRpUGFydChib2R5LT5pdGVtcygpLCBib2R5LT5lbmNvZGluZygpLCBk
b2N1bWVudCgpKTsKIAogICAgICAgICAvLyBXZSBuZWVkIHRvIGFzayB0aGUgY2xpZW50IHRvIHBy
b3ZpZGUgdGhlIGdlbmVyYXRlZCBmaWxlIG5hbWVzIGlmIG5lZWRlZC4gV2hlbiBGb3JtRGF0YSBm
aWxscyB0aGUgZWxlbWVudAogICAgICAgICAvLyBmb3IgdGhlIGZpbGUsIGl0IGNvdWxkIHNldCBh
IGZsYWcgdG8gdXNlIHRoZSBnZW5lcmF0ZWQgZmlsZSBuYW1lLCBpLmUuIGEgcGFja2FnZSBmaWxl
IG9uIE1hYy4KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDE5OTExYzlmM2QyMGZjMWQ2ZDEzNDc4MWY2MWQzNzVm
MDEzNjExNTAuLjNlOTE3ZmFlN2I0YmI4YjFlZTcyNDc2ZWM3YzY5MTZkODZjMmMwOTAgMTAwNjQ0
Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDEwLTA2LTAzICBLaW51a28gWWFzdWRhICA8a2lu
dWtvQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBSZWZhY3RvciBGb3JtRGF0YSBhbmQgQmxvYiBmb3IgYmV0dGVyIHN1cHBvcnQg
b2YgQmxvYnMgc3ludGhlc2l6ZWQgYnkgQmxvYkJ1aWxkZXIuCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zOTA4MworCisgICAgICAgIFJlcGxhY2UgRm9y
bURhdGFMaXN0OjpJdGVtIGxpc3Qgd2l0aCBCbG9iSXRlbUxpc3QgdG8gZ2V0IGl0IGNvbXBpbGVk
CisgICAgICAgIHdpdGggdGhlIHJlZmFjdG9yaW5nIGluIEZvcm1EYXRhTGlzdC4KKworICAgICAg
ICAqIHNyYy9XZWJTZWFyY2hhYmxlRm9ybURhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SGFz
U3VpdGFibGVUZXh0RWxlbWVudCk6CisKIDIwMTAtMDYtMDQgIFBhdmVsIFBvZGl2aWxvdiAgPHBv
ZGl2aWxvdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgWXVyeSBTZW1pa2hh
dHNreS4KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2VhcmNoYWJsZUZvcm1E
YXRhLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2VhcmNoYWJsZUZvcm1EYXRhLmNwcApp
bmRleCA2MDFhNDk3MzgyZDA4ZmJjOGYwZDg1MTZmMGYzYWFiOTU1MDIxZjE5Li40ZWNjMmU0MmQ1
NWUxMDgwNDE1YTJiNmY0OWM0ZWMxNjQ5N2E2NTA0IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlNlYXJjaGFibGVGb3JtRGF0YS5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJTZWFyY2hhYmxlRm9ybURhdGEuY3BwCkBAIC0xODcsOCArMTg3LDggQEAgYm9vbCBIYXNT
dWl0YWJsZVRleHRFbGVtZW50KGNvbnN0IEhUTUxGb3JtRWxlbWVudCogZm9ybSwgVmVjdG9yPGNo
YXI+KiBlbmNvZGVkU3QKICAgICAgIGlmICghZm9ybUVsZW1lbnQtPmFwcGVuZEZvcm1EYXRhKGRh
dGFMaXN0LCBmYWxzZSkpCiAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgIGNvbnN0IFZlY3Rv
cjxGb3JtRGF0YUxpc3Q6Okl0ZW0+JiBpdGVtTGlzdCA9IGRhdGFMaXN0Lmxpc3QoKTsKLSAgICAg
IGlmIChpc1RleHRFbGVtZW50ICYmICFpdGVtTGlzdC5pc0VtcHR5KCkpIHsKKyAgICAgIGNvbnN0
IEJsb2JJdGVtTGlzdCYgaXRlbXMgPSBkYXRhTGlzdC5pdGVtcygpOworICAgICAgaWYgKGlzVGV4
dEVsZW1lbnQgJiYgIWl0ZW1zLmlzRW1wdHkoKSkgewogICAgICAgICAgIGlmICh0ZXh0RWxlbWVu
dCkgewogICAgICAgICAgICAgICAvLyBUaGUgYXV0by1jb21wbGV0ZSBiYXIgb25seSBrbm93cyBo
b3cgdG8gZmlsbCBpbiBvbmUgdmFsdWUuCiAgICAgICAgICAgICAgIC8vIFRoaXMgZm9ybSBoYXMg
bXVsdGlwbGUgZmllbGRzOyBkb24ndCB0cmVhdCBpdCBhcyBzZWFyY2hhYmxlLgpAQCAtMTk2LDIw
ICsxOTYsMjMgQEAgYm9vbCBIYXNTdWl0YWJsZVRleHRFbGVtZW50KGNvbnN0IEhUTUxGb3JtRWxl
bWVudCogZm9ybSwgVmVjdG9yPGNoYXI+KiBlbmNvZGVkU3QKICAgICAgICAgICB9CiAgICAgICAg
ICAgdGV4dEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oZm9ybUVsZW1l
bnQpOwogICAgICAgfQotICAgICAgZm9yIChWZWN0b3I8Rm9ybURhdGFMaXN0OjpJdGVtPjo6Y29u
c3RfaXRlcmF0b3IgaihpdGVtTGlzdC5iZWdpbigpKTsgaiAhPSBpdGVtTGlzdC5lbmQoKTsgKytq
KSB7CisgICAgICBmb3IgKEJsb2JJdGVtTGlzdDo6Y29uc3RfaXRlcmF0b3IgaihpdGVtcy5iZWdp
bigpKTsgaiAhPSBpdGVtcy5lbmQoKTsgKytqKSB7CisgICAgICAgICAgY29uc3QgU3RyaW5nQmxv
Ykl0ZW0qIGl0ZW0gPSAoKmopLT50b1N0cmluZ0Jsb2JJdGVtKCk7CisgICAgICAgICAgaWYgKCFp
dGVtKQorICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAvLyBIYW5kbGUgSVNJTkRF
WCAvIDxpbnB1dCBuYW1lPWlzaW5kZXg+IHNwZWNpYWxseSwgYnV0IG9ubHkgaWYgaXQncwogICAg
ICAgICAgIC8vIHRoZSBmaXJzdCBlbnRyeS4KLSAgICAgICAgICBpZiAoIWVuY29kZWRTdHJpbmct
PmlzRW1wdHkoKSB8fCBqLT5kYXRhKCkgIT0gImlzaW5kZXgiKSB7CisgICAgICAgICAgaWYgKCFl
bmNvZGVkU3RyaW5nLT5pc0VtcHR5KCkgfHwgaXRlbS0+Y3N0cigpICE9ICJpc2luZGV4Iikgewog
ICAgICAgICAgICAgICBpZiAoIWVuY29kZWRTdHJpbmctPmlzRW1wdHkoKSkKICAgICAgICAgICAg
ICAgICAgIGVuY29kZWRTdHJpbmctPmFwcGVuZCgnJicpOwotICAgICAgICAgICAgICBGb3JtRGF0
YUJ1aWxkZXI6OmVuY29kZVN0cmluZ0FzRm9ybURhdGEoKmVuY29kZWRTdHJpbmcsIGotPmRhdGEo
KSk7CisgICAgICAgICAgICAgIEZvcm1EYXRhQnVpbGRlcjo6ZW5jb2RlU3RyaW5nQXNGb3JtRGF0
YSgqZW5jb2RlZFN0cmluZywgaXRlbS0+Y3N0cigpKTsKICAgICAgICAgICAgICAgZW5jb2RlZFN0
cmluZy0+YXBwZW5kKCc9Jyk7CiAgICAgICAgICAgfQogICAgICAgICAgICsrajsKICAgICAgICAg
ICBpZiAoZm9ybUVsZW1lbnQgPT0gdGV4dEVsZW1lbnQpCiAgICAgICAgICAgICAgIGVuY29kZWRT
dHJpbmctPmFwcGVuZCgie3NlYXJjaFRlcm1zfSIsIDEzKTsKICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgIEZvcm1EYXRhQnVpbGRlcjo6ZW5jb2RlU3RyaW5nQXNGb3JtRGF0YSgqZW5jb2Rl
ZFN0cmluZywgai0+ZGF0YSgpKTsKKyAgICAgICAgICAgICAgRm9ybURhdGFCdWlsZGVyOjplbmNv
ZGVTdHJpbmdBc0Zvcm1EYXRhKCplbmNvZGVkU3RyaW5nLCBpdGVtLT5jc3RyKCkpOwogICAgICAg
fQogICAgIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57930</attachid>
            <date>2010-06-04 17:40:07 -0700</date>
            <delta_ts>2010-06-04 18:18:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-39083-20100604174006.patch</filename>
            <type>text/plain</type>
            <size>68121</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CmluZGV4IDFhZGNhZGVjMTBlYjI5M2E3NzNjZTk5YTA0ZjFjYjVlYTE2OTEwMTIuLmU0Nzdl
MjcwODRjYmQ1ZmZkYmJiOWU2NjhlNDI5NzRmMmFhYmQ2MWEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
Q01ha2VMaXN0cy50eHQKKysrIGIvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTEyMiw2ICsx
MTIyLDcgQEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAgIHBhZ2UvYW5pbWF0aW9uL0tleWZyYW1l
QW5pbWF0aW9uLmNwcAogCiAgICAgcGxhdGZvcm0vQXJlbmEuY3BwCisgICAgcGxhdGZvcm0vQmxv
Ykl0ZW0uY3BwCiAgICAgcGxhdGZvcm0vQ29udGVudFR5cGUuY3BwCiAgICAgcGxhdGZvcm0vQ29u
dGV4dE1lbnUuY3BwCiAgICAgcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGNiYTdmMDI1
MDlkY2FlODUxYjQ3NGM1OWI3Zjk4NjIyODJjNTI4NzguLjI2MTM3YjcyZWY2MjE3NDI3MmFlZTk5
YjNlZDUxMmFmMDcyMjBjZDEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dl
YkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODAgQEAKKzIwMTAtMDYtMDMgIEtpbnVrbyBZYXN1
ZGEgIDxraW51a29AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yIEZvcm1EYXRhIGFuZCBCbG9iIGZvciBiZXR0ZXIg
c3VwcG9ydCBvZiBCbG9icyBzeW50aGVzaXplZCBieSBCbG9iQnVpbGRlci4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5MDgzCisKKyAgICAgICAgLSBJ
bnRyb2R1Y2VzIGEgbmV3IGNsYXNzIEJsb2JJdGVtIGFzIGEgYmFzaWMgY29tcG9uZW50IG9mIEJs
b2IgYW5kIEZvcm1EYXRhTGlzdC4KKyAgICAgICAgLSBGaWxlIHdvdWxkIGJlY29tZSBhIHNwZWNp
YWwgdHlwZSBvZiBCbG9iIHRoYXQgY29udGFpbnMgb25seSBvbmUgRmlsZUJsb2JJdGVtLgorICAg
ICAgICAtIEZpeCB0aGUgZGVwZW5kZW5jeSB2aW9sYXRpb24gaW4gRm9ybURhdGEgc28gdGhhdCB0
aGUgZmlsZXMgdW5kZXIgcGxhdGZvcm0vIGRvIG5vdCBpbmNsdWRlIGFueSBodG1sLyBmaWxlcy4K
KworICAgICAgICBUaGUgcGF0Y2ggZG9lc24ndCBzdXBwb3J0IHRoZSBsYXRlc3QgRmlsZSBBUEkg
Y2hhbmdlcyAoZS5nLiB0eXBlLAorICAgICAgICB1cmwgYW5kIHNsaWNlJ3MgdHlwZSBwYXJhbWV0
ZXJzKSBhbmQgc2hvdWxkIG5vdCBjaGFuZ2UgYW55IG9mIGl0cworICAgICAgICBleGlzdGluZyBi
ZWhhdmlvcnMuCisKKyAgICAgICAgVGhlIGV4aXN0aW5nIHRlc3RzIHNob3VsZCBiZSBhYmxlIHRv
IGJlIHVzZWQgZm9yIHJlZ3Jlc3Npb24uCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAg
ICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAg
ICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6
CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IGh0bWwvQmxvYi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjpCbG9iKToKKyAgICAgICAg
KFdlYkNvcmU6OkJsb2I6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6cGF0aCk6Cisg
ICAgICAgIChXZWJDb3JlOjpCbG9iOjphcHBlbmQpOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6
c2xpY2UpOgorICAgICAgICAqIGh0bWwvQmxvYi5oOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OnR5cGUpOgorICAgICAgICAoV2ViQ29y
ZTo6QmxvYjo6aXRlbXMpOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6QmxvYik6CisgICAgICAg
ICogaHRtbC9GaWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGU6OkZpbGUpOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsZTo6bmFtZSk6CisgICAgICAgICogaHRtbC9GaWxlLmg6CisgICAgICAg
IChXZWJDb3JlOjpGaWxlOjpmaWxlTmFtZSk6CisgICAgICAgICogaHRtbC9GaWxlUmVhZGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVSZWFkZXI6OnJlYWRBc0JpbmFyeVN0cmluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWxlUmVhZGVyOjpyZWFkQXNUZXh0KToKKyAgICAgICAgKiBodG1s
L0ZpbGVTdHJlYW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVN0cmVhbTo6b3BlbkZvclJl
YWQpOgorICAgICAgICAqIGh0bWwvRm9ybURhdGFMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZvcm1EYXRhTGlzdDo6YXBwZW5kU3RyaW5nKTogTW92ZWQgdGhlIGxpbmUgZW5kaW5nIGZpeCBs
b2dpYyB0byBTdHJpbmdCbG9iSXRlbTo6Y29udmVydFRvQ1N0cmluZy4KKyAgICAgICAgKFdlYkNv
cmU6OkZvcm1EYXRhTGlzdDo6YXBwZW5kQmxvYik6CisgICAgICAgICogaHRtbC9Gb3JtRGF0YUxp
c3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhTGlzdDo6aXRlbXMpOgorICAgICAgICAq
IGh0bWwvSFRNTEZvcm1FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxl
bWVudDo6Y3JlYXRlRm9ybURhdGEpOgorICAgICAgICAqIGh0bWwvSFRNTFByb2dyZXNzRWxlbWVu
dC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vQmxvYkl0ZW0uY3BwOiBBZGRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9CbG9iSXRlbS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3Jr
L0Zvcm1EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhRWxlbWVudDo6Rm9ybURh
dGFFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9ybURhdGE6OmNyZWF0ZU11bHRpUGFydCk6CisgICAgICAgIChXZWJDb3Jl
OjpGb3JtRGF0YTo6ZGVlcENvcHkpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6OmFwcGVu
ZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6OmFwcGVuZFN0cmluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpGb3JtRGF0YTo6YXBwZW5kRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpG
b3JtRGF0YTo6YXBwZW5kRmlsZVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjph
cHBlbmRJdGVtcyk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YTo6YXBwZW5kSXRlbSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YTo6YXBwZW5kS2V5VmFsdWVQYWlySXRlbXMpOgorICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6Om9w
ZXJhdG9yIT0pOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvbWFjL0Zvcm1EYXRhU3RyZWFt
TWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6Y2xvc2VDdXJyZW50U3RyZWFtKToKKyAgICAgICAg
KFdlYkNvcmU6OmFkdmFuY2VDdXJyZW50U3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6OmZvcm1D
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Zm9ybVJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6
c2V0SFRUUEJvZHkpOgorICAgICAgICAqIHhtbC9YTUxIdHRwUmVxdWVzdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6c2VuZCk6CisKIDIwMTAtMDYtMDQgIE5pa2l0YSBW
YXNpbHlldiAgPG1lQGVsdjFzLnJ1PgogCiAgICAgICAgIFJldmlld2VkIGJ5IFBhdmVsIEZlbGRt
YW4uCmRpZmYgLS1naXQgYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5hbQppbmRleCA0ZGNlNjJmZGJjNjQ2ZDg2OTJiNmY1NDcwNTJjZTc4YTFkZDk2MzZmLi4z
ZmJmMWQ5MjU4NjAyNjU4NTIzNTU1MTExNmI1YjQxNDY4YWMzZWNhIDEwMDY0NAotLS0gYS9XZWJD
b3JlL0dOVW1ha2VmaWxlLmFtCisrKyBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTE1NTks
NiArMTU1OSw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9BcmVu
YS5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vQXJlbmEuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9B
dXRvZHJhaW5lZFBvb2wuaCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9CbG9iSXRlbS5jcHAgXAorCVdl
YkNvcmUvcGxhdGZvcm0vQmxvYkl0ZW0uaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9Db250ZW50VHlw
ZS5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vQ29udGVudFR5cGUuaCBcCiAJV2ViQ29yZS9wbGF0
Zm9ybS9Db250ZXh0TWVudS5jcHAgXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkg
Yi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA1YzdiMjU4ZDUwNmUwNThlYjY1ZTY0YzdhMzU2
ZDAxODVmMDkwZDczLi41MzVkZWNjNDUxODViMDEwM2JiMjA1NzNlNmU5MGY2YmExN2IxMzEwIDEw
MDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQpAQCAtMjg4MCw2ICsyODgwLDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9BcmVuYS5jcHAn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL0FyZW5hLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L0F1dG9kcmFpbmVkUG9vbC5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9CbG9iSXRlbS5jcHAn
LAorICAgICAgICAgICAgJ3BsYXRmb3JtL0Jsb2JJdGVtLmgnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL0NvbnRlbnRUeXBlLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vQ29udGVudFR5cGUu
aCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vQ29udGV4dE1lbnUuY3BwJywKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IGM2Zjc5YzM3
YzFlMDJmZDFhZjcwMmQxZDUyZWYyZmY0OTg0OWI3NTMuLjM0Yjc5YjRiNGM5Mzc1Njk5NmQxNmQy
OTBjMTYyNzljOThhMzU0YTEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIv
V2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtODE1LDYgKzgxNSw3IEBAIFNPVVJDRVMgKz0gXAogICAg
IHBsYXRmb3JtL2FuaW1hdGlvbi9BbmltYXRpb24uY3BwIFwKICAgICBwbGF0Zm9ybS9hbmltYXRp
b24vQW5pbWF0aW9uTGlzdC5jcHAgXAogICAgIHBsYXRmb3JtL0FyZW5hLmNwcCBcCisgICAgcGxh
dGZvcm0vQmxvYkl0ZW0uY3BwIFwKICAgICBwbGF0Zm9ybS90ZXh0L0Jhc2U2NC5jcHAgXAogICAg
IHBsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuY3BwIFwKICAgICBwbGF0Zm9ybS9Db250ZW50VHlw
ZS5jcHAgXApAQCAtMTU2NCw2ICsxNTY1LDcgQEAgSEVBREVSUyArPSBcCiAgICAgcGxhdGZvcm0v
YW5pbWF0aW9uL0FuaW1hdGlvbi5oIFwKICAgICBwbGF0Zm9ybS9hbmltYXRpb24vQW5pbWF0aW9u
TGlzdC5oIFwKICAgICBwbGF0Zm9ybS9BcmVuYS5oIFwKKyAgICBwbGF0Zm9ybS9CbG9iSXRlbS5o
IFwKICAgICBwbGF0Zm9ybS9Db250ZW50VHlwZS5oIFwKICAgICBwbGF0Zm9ybS9Db250ZXh0TWVu
dS5oIFwKICAgICBwbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5oIFwKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9XZWJDb3JlL1dlYkNvcmUudmNw
cm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IDBiOTQ2N2JmNDVlNzc2YTYwMjk2MTA5OTYwNDE0ZTYw
NjQ4YjAxNDIuLmNjYjZlZjk0NmY2MGJlM2FjYmFiYWMwNDUwNTliNjQ1NzM5NThjNjMgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvV2ViQ29y
ZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAtMjIzNjksNiArMjIzNjksMTQgQEAK
IAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxh
dGZvcm1cQmxvYkl0ZW0uY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJ
CVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cQmxvYkl0ZW0uaCINCisJCQkJPg0KKwkJCTwvRmls
ZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXENvbnRlbnRUeXBl
LmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmluZGV4IDRkZDZkODUzNzEyYmYyNWY2ZjYwN2IwODMyNDIyY2RlZDRiMGI0
ZGUuLmU5OWQzZjg5Y2YyMTViODI4YTA2MTI4OWZlNWUxMDdiZWY4OTZjNDQgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMjc5LDYgKzIyNzksOCBAQAog
CQk4OTUyNTNERDExNkM0RUY1MDBDQUJGMDAgLyogRmlsZVN0cmVhbVByb3h5LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4OTUyNTNEQjExNkM0RUY1MDBD
QUJGMDAgLyogRmlsZVN0cmVhbVByb3h5LmggKi87IH07CiAJCTg5NTI1M0RGMTE2QzRGMDYwMENB
QkYwMCAvKiBGaWxlVGhyZWFkVGFzay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gODk1MjUzREUxMTZDNEYwNjAwQ0FCRjAwIC8qIEZpbGVUaHJlYWRUYXNr
LmggKi87IH07CiAJCThGQUM3NzREMTE5ODcyQ0IwMDE1QUU5NCAvKiBKU01haW5UaHJlYWRFeGVj
U3RhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OEY5MzREODQxMTg5RjFFRTAwNTA4RDVEIC8qIEpTTWFpblRocmVhZEV4ZWNTdGF0ZS5jcHAgKi87
IH07CisJCTg5ODhFMTBFMTFBMzUwOEIwMERCNzMyRSAvKiBCbG9iSXRlbS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4OTg4RTEwQzExQTM1MDhCMDBE
QjczMkUgLyogQmxvYkl0ZW0uY3BwICovOyB9OworCQk4OTg4RTEwRjExQTM1MDhCMDBEQjczMkUg
LyogQmxvYkl0ZW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDg5ODhFMTBEMTFBMzUwOEIwMERCNzMyRSAvKiBCbG9iSXRlbS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkzMDJCMEJEMEQ3OUY4MjkwMEM3
RUU4MyAvKiBQYWdlR3JvdXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOTMwMkIwQkMwRDc5RjgyOTAwQzdFRTgzIC8qIFBhZ2VHcm91cC5jcHAgKi87
IH07CiAJCTkzMDJCMEJGMEQ3OUY4MkMwMEM3RUU4MyAvKiBQYWdlR3JvdXAuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMDJCMEJFMEQ3OUY4MkMwMEM3
RUU4MyAvKiBQYWdlR3JvdXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk5MzA1QjI0RDA5OEYxQjZCMDBDMjg4NTUgLyogVGltZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMDVCMjRDMDk4RjFCNkIw
MEMyODg1NSAvKiBUaW1lci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CkBAIC03ODg1LDYgKzc4ODcsOCBAQAogCQk4OTUyNTNERTExNkM0RjA2MDBDQUJG
MDAgLyogRmlsZVRocmVhZFRhc2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RmlsZVRocmVhZFRhc2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOEY5MzREODMx
MTg5RjFFRTAwNTA4RDVEIC8qIEpTTWFpblRocmVhZEV4ZWNTdGF0ZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU01haW5UaHJlYWRFeGVjU3RhdGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJOEY5MzREODQxMTg5RjFFRTAwNTA4RDVEIC8qIEpTTWFpblRocmVh
ZEV4ZWNTdGF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU01h
aW5UaHJlYWRFeGVjU3RhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4OTg4
RTEwQzExQTM1MDhCMDBEQjczMkUgLyogQmxvYkl0ZW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gQmxvYkl0ZW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk4OTg4RTEwRDExQTM1MDhCMDBEQjczMkUgLyogQmxvYkl0ZW0uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQmxvYkl0ZW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJOTMwMkIwQkMwRDc5RjgyOTAwQzdFRTgzIC8qIFBhZ2VHcm91cC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYWdlR3JvdXAuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk5MzAyQjBCRTBENzlGODJDMDBDN0VFODMgLyogUGFnZUdyb3VwLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhZ2VHcm91cC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk5MzA1QjI0QzA5OEYxQjZCMDBDMjg4NTUgLyogVGltZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGltZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTE1ODU2LDYgKzE1ODYwLDggQEAKIAkJCQlCQ0ZCMkY3NDA5N0EyRTFB
MDBCQTcwM0QgLyogQXJlbmEuY3BwICovLAogCQkJCUJDRkIyRjc1MDk3QTJFMUEwMEJBNzAzRCAv
KiBBcmVuYS5oICovLAogCQkJCTUxRTFFQ0IxMEM5MUM1NTYwMERDMjU1QiAvKiBBdXRvZHJhaW5l
ZFBvb2wuaCAqLywKKwkJCQk4OTg4RTEwQzExQTM1MDhCMDBEQjczMkUgLyogQmxvYkl0ZW0uY3Bw
ICovLAorCQkJCTg5ODhFMTBEMTFBMzUwOEIwMERCNzMyRSAvKiBCbG9iSXRlbS5oICovLAogCQkJ
CUJDQzhDRkNBMDk4NkNEMjQwMDE0MEJGMiAvKiBDb2xvckRhdGEuZ3BlcmYgKi8sCiAJCQkJNDFE
MDE1QzkwRjRCNUM3MTAwNEE2NjJGIC8qIENvbnRlbnRUeXBlLmNwcCAqLywKIAkJCQk0MUQwMTVD
ODBGNEI1QzcxMDA0QTY2MkYgLyogQ29udGVudFR5cGUuaCAqLywKQEAgLTE2ODkzLDYgKzE2ODk5
LDcgQEAKIAkJCQlCQzVFQjkyMDBFODIwNDA4MDBCMjU5NjUgLyogQmluZGluZ1VSSS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTg5OTQzMjgwQjQyMzM4ODAwRDdDODAyIC8qIEJpdG1hcEltYWdlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkyRUFGQUYwRjEwRTJBRjJEMDA3RUQzRDYgLyogQmxvYi5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJODk4OEUxMEYxMUEzNTA4QjAwREI3MzJFIC8qIEJsb2JJdGVtLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOTlCRTA4MjQ1RTU5MDAxRTlBQkMgLyogQmxvY2tFeGNl
cHRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzVFQjVFMTBFODFCRTg3MDBCMjU5NjUgLyog
Qm9yZGVyRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1RUI1REIwRTgxQjdFQTAwQjI1OTY1
IC8qIEJvcmRlclZhbHVlLmggaW4gSGVhZGVycyAqLywKQEAgLTE5NzI0LDYgKzE5NzMxLDcgQEAK
IAkJCQlCQzVFQjkxRjBFODIwNDA4MDBCMjU5NjUgLyogQmluZGluZ1VSSS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBODk5NDMyOTBCNDIzMzg4MDBEN0M4MDIgLyogQml0bWFwSW1hZ2UuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMkVBRkFGMEUxMEUyQUYyRDAwN0VEM0Q2IC8qIEJsb2IuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJODk4OEUxMEUxMUEzNTA4QjAwREI3MzJFIC8qIEJsb2JJdGVtLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTkzRjE5QUUxMDgyNDVFNTkwMDFFOUFCQyAvKiBCbG9ja0V4
Y2VwdGlvbnMubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQ0VBNDg1NDA5N0Q5MzAyMDA5NEM5RTQg
LyogYnJlYWtfbGluZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzMDlEREEwOTlFNjQ5MjAw
NTZFNTgxIC8qIEJyZWFrQmxvY2txdW90ZUNvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2h0bWwvQmxvYi5jcHAgYi9XZWJDb3JlL2h0bWwvQmxvYi5jcHAKaW5k
ZXggODNiYmRjMGM1MjY0ODQ1NDI2ODgxOTI2MjE2ODRiNjI4MjAyNGJmNC4uMDU0NmYxYzNjMDg4
MmRhMjIwOGE5ZTZhMGE3NjJkYjQzNTliZWU0YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0Js
b2IuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9CbG9iLmNwcApAQCAtMzEsODggKzMxLDY1IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQmxvYi5oIgogCisjaW5jbHVkZSAiQmxvYkl0
ZW0uaCIKICNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
I2lmIEVOQUJMRShCTE9CX1NMSUNFKQotY29uc3QgaW50IEJsb2I6OnRvRW5kT2ZGaWxlID0gLTE7
Ci1jb25zdCBkb3VibGUgQmxvYjo6ZG9Ob3RDaGVja0ZpbGVDaGFuZ2UgPSAwOwotI2VuZGlmCi0K
IEJsb2I6OkJsb2IoY29uc3QgU3RyaW5nJiBwYXRoKQotICAgIDogbV9wYXRoKHBhdGgpCi0jaWYg
RU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgLCBtX3N0YXJ0KDApCi0gICAgLCBtX2xlbmd0aCh0b0Vu
ZE9mRmlsZSkKLSAgICAsIG1fc25hcHNob3RDYXB0dXJlZChmYWxzZSkKLSAgICAsIG1fc25hcHNo
b3RTaXplKDApCi0gICAgLCBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZShkb05vdENoZWNrRmls
ZUNoYW5nZSkKLSNlbmRpZgotewotfQotCi0jaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi1CbG9iOjpC
bG9iKGNvbnN0IFN0cmluZyYgcGF0aCwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3Ro
LCBsb25nIGxvbmcgc25hcHNob3RTaXplLCBkb3VibGUgc25hcHNob3RNb2RpZmljYXRpb25UaW1l
KQotICAgIDogbV9wYXRoKHBhdGgpCi0gICAgLCBtX3N0YXJ0KHN0YXJ0KQotICAgICwgbV9sZW5n
dGgobGVuZ3RoKQotICAgICwgbV9zbmFwc2hvdENhcHR1cmVkKHRydWUpCi0gICAgLCBtX3NuYXBz
aG90U2l6ZShzbmFwc2hvdFNpemUpCi0gICAgLCBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZShz
bmFwc2hvdE1vZGlmaWNhdGlvblRpbWUpCiB7Ci0gICAgQVNTRVJUKHN0YXJ0ID49IDAgJiYgbGVu
Z3RoID49IDAgJiYgc3RhcnQgKyBsZW5ndGggPD0gc25hcHNob3RTaXplICYmIHNuYXBzaG90TW9k
aWZpY2F0aW9uVGltZSk7CisgICAgLy8gTm90ZTogdGhpcyBkb2Vzbid0IGluaXRpYWxpemUgdGhl
IHR5cGUgdW5saWtlIEZpbGUocGF0aCkuCisgICAgYXBwZW5kKEZpbGVCbG9iSXRlbTo6Y3JlYXRl
KHBhdGgpKTsKIH0KLSNlbmRpZgogCiB1bnNpZ25lZCBsb25nIGxvbmcgQmxvYjo6c2l6ZSgpIGNv
bnN0CiB7CiAgICAgLy8gRklYTUU6IEphdmFTY3JpcHQgY2Fubm90IHJlcHJlc2VudCBzaXplcyBh
cyBsYXJnZSBhcyB1bnNpZ25lZCBsb25nIGxvbmcsIHdlIG5lZWQgdG8KICAgICAvLyBjb21lIHVw
IHdpdGggYW4gZXhjZXB0aW9uIHRvIHRocm93IGlmIGZpbGUgc2l6ZSBpcyBub3QgcmVwcmVzZXRh
YmxlLgotI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgIGlmIChtX3NuYXBzaG90Q2FwdHVyZWQp
Ci0gICAgICAgIHJldHVybiBtX2xlbmd0aDsKLSNlbmRpZgotICAgIGxvbmcgbG9uZyBzaXplOwot
ICAgIGlmICghZ2V0RmlsZVNpemUobV9wYXRoLCBzaXplKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oc2l6ZSk7CisgICAgdW5z
aWduZWQgbG9uZyBsb25nIHNpemUgPSAwOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9p
dGVtcy5zaXplKCk7ICsraSkKKyAgICAgICAgc2l6ZSArPSBtX2l0ZW1zW2ldLT5zaXplKCk7Cisg
ICAgcmV0dXJuIHNpemU7Cit9CisKK2NvbnN0IFN0cmluZyYgQmxvYjo6cGF0aCgpIGNvbnN0Cit7
CisgICAgQVNTRVJUKG1faXRlbXMuc2l6ZSgpID09IDEgJiYgbV9pdGVtc1swXS0+dG9GaWxlQmxv
Ykl0ZW0oKSk7CisgICAgcmV0dXJuIG1faXRlbXNbMF0tPnRvRmlsZUJsb2JJdGVtKCktPnBhdGgo
KTsKK30KKwordm9pZCBCbG9iOjphcHBlbmQoUGFzc1JlZlB0cjxCbG9iSXRlbT4gaXRlbSkKK3sK
KyAgICBtX2l0ZW1zLmFwcGVuZChpdGVtKTsKIH0KIAogI2lmIEVOQUJMRShCTE9CX1NMSUNFKQog
UGFzc1JlZlB0cjxCbG9iPiBCbG9iOjpzbGljZShsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBs
ZW5ndGgpIGNvbnN0CiB7Ci0gICAgLy8gV2hlbiB3ZSBzbGljZSBhIGZpbGUgZm9yIHRoZSBmaXJz
dCB0aW1lLCB3ZSBvYnRhaW4gYSBzbmFwc2hvdCBvZiB0aGUgZmlsZSBieSBjYXB0dXJpbmcgaXRz
IGN1cnJlbnQgc2l6ZSBhbmQgbW9kaWZpY2F0aW9uIHRpbWUuCi0gICAgLy8gVGhlIG1vZGlmaWNh
dGlvbiB0aW1lIHdpbGwgYmUgdXNlZCB0byB2ZXJpZnkgaWYgdGhlIGZpbGUgaGFzIGJlZW4gY2hh
bmdlZCBvciBub3QsIHdoZW4gdGhlIHVuZGVybHlpbmcgZGF0YSBhcmUgYWNjZXNzZWQuCi0gICAg
bG9uZyBsb25nIHNuYXBzaG90U2l6ZTsKLSAgICBkb3VibGUgc25hcHNob3RNb2RpZmljYXRpb25U
aW1lOwotICAgIGlmIChtX3NuYXBzaG90Q2FwdHVyZWQpIHsKLSAgICAgICAgc25hcHNob3RTaXpl
ID0gbV9zbmFwc2hvdFNpemU7Ci0gICAgICAgIHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSA9IG1f
c25hcHNob3RNb2RpZmljYXRpb25UaW1lOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIElmIHdl
IGZhaWwgdG8gcmV0cmlldmUgdGhlIHNpemUgb3IgbW9kaWZpY2F0aW9uIHRpbWUsIHByb2JhYmx5
IGR1ZSB0byB0aGF0IHRoZSBmaWxlIGhhcyBiZWVuIGRlbGV0ZWQsIGFuIGVtcHR5IGJsb2Igd2ls
bCBiZSByZXR1cm5lZC4KLSAgICAgICAgdGltZV90IG1vZGlmaWNhdGlvblRpbWU7Ci0gICAgICAg
IGlmICghZ2V0RmlsZVNpemUobV9wYXRoLCBzbmFwc2hvdFNpemUpIHx8ICFnZXRGaWxlTW9kaWZp
Y2F0aW9uVGltZShtX3BhdGgsIG1vZGlmaWNhdGlvblRpbWUpKSB7Ci0gICAgICAgICAgICBzbmFw
c2hvdFNpemUgPSAwOwotICAgICAgICAgICAgc25hcHNob3RNb2RpZmljYXRpb25UaW1lID0gMDsK
LSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUgPSBt
b2RpZmljYXRpb25UaW1lOwotICAgIH0KLQotICAgIC8vIENsYW1wIHRoZSByYW5nZSBpZiBpdCBl
eGNlZWRzIHRoZSBzaXplIGxpbWl0LgogICAgIGlmIChzdGFydCA8IDApCiAgICAgICAgIHN0YXJ0
ID0gMDsKICAgICBpZiAobGVuZ3RoIDwgMCkKICAgICAgICAgbGVuZ3RoID0gMDsKIAotICAgIGlm
IChzdGFydCA+IHNuYXBzaG90U2l6ZSkgeworICAgIC8vIENsYW1wIHRoZSByYW5nZSBpZiBpdCBl
eGNlZWRzIHRoZSBzaXplIGxpbWl0LgorICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbFNpemUg
PSBzaXplKCk7CisgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oc3RhcnQp
ID4gdG90YWxTaXplKSB7CiAgICAgICAgIHN0YXJ0ID0gMDsKICAgICAgICAgbGVuZ3RoID0gMDsK
LSAgICB9IGVsc2UgaWYgKHN0YXJ0ICsgbGVuZ3RoID4gc25hcHNob3RTaXplKQotICAgICAgICBs
ZW5ndGggPSBzbmFwc2hvdFNpemUgLSBzdGFydDsKKyAgICB9IGVsc2UgaWYgKHN0YXRpY19jYXN0
PHVuc2lnbmVkIGxvbmcgbG9uZz4oc3RhcnQgKyBsZW5ndGgpID4gdG90YWxTaXplKQorICAgICAg
ICBsZW5ndGggPSB0b3RhbFNpemUgLSBzdGFydDsKIAotICAgIHJldHVybiBhZG9wdFJlZihuZXcg
QmxvYihtX3BhdGgsIG1fc3RhcnQgKyBzdGFydCwgbGVuZ3RoLCBzbmFwc2hvdFNpemUsIHNuYXBz
aG90TW9kaWZpY2F0aW9uVGltZSkpOworICAgIHNpemVfdCBpID0gMDsKKyAgICBSZWZQdHI8Qmxv
Yj4gYmxvYiA9IEJsb2I6OmNyZWF0ZSgpOworICAgIGZvciAoOyBpIDwgbV9pdGVtcy5zaXplKCkg
JiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihzdGFydCkgPj0gbV9pdGVtc1tpXS0+
c2l6ZSgpOyArK2kpCisgICAgICAgIHN0YXJ0IC09IG1faXRlbXNbaV0tPnNpemUoKTsKKyAgICBm
b3IgKDsgbGVuZ3RoID4gMCAmJiBpIDwgbV9pdGVtcy5zaXplKCk7ICsraSkgeworICAgICAgICBi
bG9iLT5tX2l0ZW1zLmFwcGVuZChtX2l0ZW1zW2ldLT5zbGljZShzdGFydCwgbGVuZ3RoKSk7Cisg
ICAgICAgIGxlbmd0aCAtPSBibG9iLT5tX2l0ZW1zLmxhc3QoKS0+c2l6ZSgpOworICAgICAgICBz
dGFydCA9IDA7CisgICAgfQorICAgIHJldHVybiBibG9iLnJlbGVhc2UoKTsKIH0KLSNlbmRpZgor
I2VuZGlmIC8vIEVOQUJMRShCTE9CX1NMSUNFKQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvQmxvYi5oIGIvV2ViQ29yZS9odG1sL0Jsb2IuaAppbmRl
eCBlOGI1ZjNmZGYwNjlhMmI0ODc2ZWQxNmFiODFiMjJmMGZmMDM4OTcwLi4zOTE3N2I1MWVlOWQw
Nzg2ODNmMjAyYTY1MWRmNTgyMzhmMjc0OTU3IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvQmxv
Yi5oCisrKyBiL1dlYkNvcmUvaHRtbC9CbG9iLmgKQEAgLTMxLDIxICszMSwyNCBAQAogI2lmbmRl
ZiBCbG9iX2gKICNkZWZpbmUgQmxvYl9oCiAKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisj
aW5jbHVkZSAiQmxvYkl0ZW0uaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1
ZGUgPHRpbWUuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIEJsb2IgOiBwdWJsaWMgUmVmQ291bnRlZDxCbG9iPiB7CiBwdWJsaWM6Ci0j
aWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgc3RhdGljIGNvbnN0IGludCB0b0VuZE9mRmlsZTsK
LSAgICBzdGF0aWMgY29uc3QgZG91YmxlIGRvTm90Q2hlY2tGaWxlQ2hhbmdlOwotI2VuZGlmCisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8QmxvYj4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgQmxvYigpKTsKKyAgICB9CiAKKyAgICAvLyBGSVhNRTogRGVwcmVjYXRl
ZCBtZXRob2QuICBUaGlzIGlzIGNhbGxlZCBvbmx5IGZyb20KKyAgICAvLyBiaW5kaW5ncy92OC9T
ZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwIGFuZCB0aGUgdXNhZ2UgaW4gaXQgd2lsbCBiZWNvbWUg
aW52YWxpZCBvbmNlCisgICAgLy8gQmxvYkJ1aWxkZXIgaXMgaW50cm9kdWNlZC4KICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxCbG9iPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBwYXRoKQogICAgIHsKICAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBCbG9iKHBhdGgpKTsKQEAgLTUzLDQ3ICs1NiwyOCBA
QCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIH5CbG9iKCkgeyB9CiAKKyAgICB1bnNpZ25lZCBsb25n
IGxvbmcgc2l6ZSgpIGNvbnN0OworICAgIGNvbnN0IFN0cmluZyYgdHlwZSgpIGNvbnN0IHsgcmV0
dXJuIG1fdHlwZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0ZpbGUoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQogCi0jaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgUGFzc1JlZlB0cjxCbG9iPiBz
bGljZShsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgpIGNvbnN0OwotI2VuZGlmCi0K
LSAgICBjb25zdCBTdHJpbmcmIHBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0KLSAgICB1
bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSgpIGNvbnN0OwotI2lmIEVOQUJMRShCTE9CX1NMSUNFKQot
ICAgIGxvbmcgbG9uZyBzdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnQ7IH0KLSAgICBsb25n
IGxvbmcgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KLSAgICBkb3VibGUgbW9k
aWZpY2F0aW9uVGltZSgpIGNvbnN0IHsgcmV0dXJuIG1fc25hcHNob3RNb2RpZmljYXRpb25UaW1l
OyB9Ci0jZW5kaWYKKyAgICAvLyBGSVhNRTogRGVwcmVjYXRlZCBtZXRob2QuCisgICAgY29uc3Qg
U3RyaW5nJiBwYXRoKCkgY29uc3Q7CiAKLXByb3RlY3RlZDoKLSAgICBCbG9iKGNvbnN0IFN0cmlu
ZyYgcGF0aCk7CisgICAgdm9pZCBhcHBlbmQoUGFzc1JlZlB0cjxCbG9iSXRlbT4pOworICAgIGNv
bnN0IEJsb2JJdGVtTGlzdCYgaXRlbXMoKSBjb25zdCB7IHJldHVybiBtX2l0ZW1zOyB9CiAKLXBy
aXZhdGU6CiAjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgQmxvYihjb25zdCBTdHJpbmcmIHBh
dGgsIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCwgbG9uZyBsb25nIHNuYXBzaG90
U2l6ZSwgZG91YmxlIHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSk7CisgICAgUGFzc1JlZlB0cjxC
bG9iPiBzbGljZShsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgpIGNvbnN0OwogI2Vu
ZGlmCiAKLSAgICAvLyBUaGUgdW5kZXJseWluZyBwYXRoIG9mIHRoZSBmaWxlLWJhc2VkIGJsb2Iu
IAotICAgIFN0cmluZyBtX3BhdGg7Ci0KLSNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAgICAvLyBU
aGUgc3RhcnRpbmcgcG9zaXRpb24gb2YgdGhlIGZpbGUtYmFzZWQgYmxvYi4KLSAgICBsb25nIGxv
bmcgbV9zdGFydDsKLQotICAgIC8vIFRoZSBsZW5ndGggb2YgdGhlIGZpbGUtYmFzZWQgYmxvYi4g
VGhlIHZhbHVlIG9mIC0xIG1lYW5zIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUuCi0gICAgbG9uZyBs
b25nIG1fbGVuZ3RoOwotCi0gICAgLy8gQSBmbGFnIHRvIHRlbGwgaWYgYSBzbmFwc2hvdCBoYXMg
YmVlbiBjYXB0dXJlZC4KLSAgICBib29sIG1fc25hcHNob3RDYXB0dXJlZDsKK3Byb3RlY3RlZDoK
KyAgICBCbG9iKCkgeyB9CiAKLSAgICAvLyBUaGUgc2l6ZSBvZiB0aGUgZmlsZSB3aGVuIGEgc25h
cHNob3QgaXMgY2FwdHVyZWQuIEl0IGNhbiBiZSAwIGlmIHRoZSBmaWxlIGlzIGVtcHR5LgotICAg
IGxvbmcgbG9uZyBtX3NuYXBzaG90U2l6ZTsKKyAgICAvLyBGSVhNRTogRGVwcmVjYXRlZCBjb25z
dHJ1Y3Rvci4gIFNlZSBhbHNvIHRoZSBjb21tZW50IGZvciBCbG9iOjpjcmVhdGUocGF0aCkuCisg
ICAgQmxvYihjb25zdCBTdHJpbmcmIHBhdGgpOwogCi0gICAgLy8gVGhlIGxhc3QgbW9kaWZpY2F0
aW9uIHRpbWUgb2YgdGhlIGZpbGUgd2hlbiBhIHNuYXBzaG90IGlzIGNhcHR1cmVkLiBUaGUgdmFs
dWUgb2YgMCBhbHNvIG1lYW5zIHRoYXQgdGhlIHNuYXBzaG90IGlzIG5vdCBjYXB0dXJlZC4KLSAg
ICBkb3VibGUgbV9zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWU7Ci0jZW5kaWYKKyAgICBCbG9iSXRl
bUxpc3QgbV9pdGVtczsKKyAgICBTdHJpbmcgbV90eXBlOwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0ZpbGUuY3BwIGIvV2ViQ29yZS9odG1s
L0ZpbGUuY3BwCmluZGV4IDk3ZmRjNDU3OGQ3NGIyMjVlNTk0NmY0ZDZhZWYyNTY1MjU0NDNhZTQu
LjJjOWNlNTNiODNjYjBkZjc5YTg1OTUyMmRjOTE2ZjI1NWJkODRjYzMgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvaHRtbC9GaWxlLmNwcAorKysgYi9XZWJDb3JlL2h0bWwvRmlsZS5jcHAKQEAgLTMzLDEy
ICszMywxNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEZpbGU6OkZpbGUoY29uc3QgU3RyaW5n
JiBwYXRoKQogICAgIDogQmxvYihwYXRoKQotICAgICwgbV9uYW1lKHBhdGhHZXRGaWxlTmFtZShw
YXRoKSkKIHsKICAgICAvLyBXZSBkb24ndCB1c2UgTUlNRVR5cGVSZWdpc3RyeTo6Z2V0TUlNRVR5
cGVGb3JQYXRoKCkgYmVjYXVzZSBpdCByZXR1cm5zICJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0i
IHVwb24gZmFpbHVyZS4KLSAgICBpbnQgaW5kZXggPSBtX25hbWUucmV2ZXJzZUZpbmQoJy4nKTsK
KyAgICBjb25zdCBTdHJpbmcmIGZpbGVOYW1lID0gbmFtZSgpOworICAgIGludCBpbmRleCA9IGZp
bGVOYW1lLnJldmVyc2VGaW5kKCcuJyk7CiAgICAgaWYgKGluZGV4ICE9IC0xKQotICAgICAgICBt
X3R5cGUgPSBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZvckV4dGVuc2lvbihtX25hbWUu
c3Vic3RyaW5nKGluZGV4ICsgMSkpOworICAgICAgICBtX3R5cGUgPSBNSU1FVHlwZVJlZ2lzdHJ5
OjpnZXRNSU1FVHlwZUZvckV4dGVuc2lvbihmaWxlTmFtZS5zdWJzdHJpbmcoaW5kZXggKyAxKSk7
Cit9CisKK2NvbnN0IFN0cmluZyYgRmlsZTo6bmFtZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGl0
ZW1zKCkuYXQoMCktPnRvRmlsZUJsb2JJdGVtKCktPm5hbWUoKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0ZpbGUuaCBiL1dlYkNvcmUvaHRt
bC9GaWxlLmgKaW5kZXggMDY1ZGQ4NmE3YjFlYmY3N2ZiNDA2NDZmOWM2ZTg3MDQ2OWQ3ZWIwOS4u
NTgyZGIyODUwM2JmZmYyYjk1OGUzZDUyNTVlZjdhYmU5YTYwNTY5YSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9odG1sL0ZpbGUuaAorKysgYi9XZWJDb3JlL2h0bWwvRmlsZS5oCkBAIC00MSwxOCArNDEs
MTQgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIGlzRmlsZSgpIGNvbnN0IHsgcmV0dXJu
IHRydWU7IH0KIAotICAgIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFt
ZTsgfQotICAgIGNvbnN0IFN0cmluZyYgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQor
ICAgIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0OwogCiAgICAgLy8gRklYTUU6IG9ic29sZXRl
IGF0dHJpYnV0ZXMuIFRvIGJlIHJlbW92ZWQuCi0gICAgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSgp
IGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQorICAgIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUoKSBj
b25zdCB7IHJldHVybiBuYW1lKCk7IH0KICAgICB1bnNpZ25lZCBsb25nIGxvbmcgZmlsZVNpemUo
KSBjb25zdCB7IHJldHVybiBzaXplKCk7IH0KIAogcHJpdmF0ZToKICAgICBGaWxlKGNvbnN0IFN0
cmluZyYgcGF0aCk7Ci0KLSAgICBTdHJpbmcgbV9uYW1lOwotICAgIFN0cmluZyBtX3R5cGU7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvRmls
ZVJlYWRlci5jcHAgYi9XZWJDb3JlL2h0bWwvRmlsZVJlYWRlci5jcHAKaW5kZXggMzQ0MjM0MjI3
NTgxMjdiZWQ3NzM4NzJjNGZmMzFmYTAxZGZhYzRlNC4uMmUwMjBjMTEzNTA1Y2NiNmY0NDNhOGQy
NTZiMGU5YTFiYWIwODAzNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0ZpbGVSZWFkZXIuY3Bw
CisrKyBiL1dlYkNvcmUvaHRtbC9GaWxlUmVhZGVyLmNwcApAQCAtODUsNiArODUsNyBAQCB2b2lk
IEZpbGVSZWFkZXI6OnN0b3AoKQogCiB2b2lkIEZpbGVSZWFkZXI6OnJlYWRBc0JpbmFyeVN0cmlu
ZyhCbG9iKiBmaWxlQmxvYikKIHsKKyAgICAvLyBGSVhNRTogbmVlZHMgdG8gaGFuZGxlIG5vbi1m
aWxlIGJsb2JzLgogICAgIExPRyhGaWxlQVBJLCAiRmlsZVJlYWRlcjogcmVhZGluZyBhcyBiaW5h
cnk6ICVzXG4iLCBmaWxlQmxvYi0+cGF0aCgpLnV0ZjgoKS5kYXRhKCkpOwogCiAgICAgcmVhZElu
dGVybmFsKGZpbGVCbG9iLCBSZWFkRmlsZUFzQmluYXJ5U3RyaW5nKTsKQEAgLTkyLDYgKzkzLDcg
QEAgdm9pZCBGaWxlUmVhZGVyOjpyZWFkQXNCaW5hcnlTdHJpbmcoQmxvYiogZmlsZUJsb2IpCiAK
IHZvaWQgRmlsZVJlYWRlcjo6cmVhZEFzVGV4dChCbG9iKiBmaWxlQmxvYiwgY29uc3QgU3RyaW5n
JiBlbmNvZGluZykKIHsKKyAgICAvLyBGSVhNRTogbmVlZHMgdG8gaGFuZGxlIG5vbi1maWxlIGJs
b2JzLgogICAgIExPRyhGaWxlQVBJLCAiRmlsZVJlYWRlcjogcmVhZGluZyBhcyB0ZXh0OiAlc1xu
IiwgZmlsZUJsb2ItPnBhdGgoKS51dGY4KCkuZGF0YSgpKTsKIAogICAgIGlmICghZW5jb2Rpbmcu
aXNFbXB0eSgpKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0ZpbGVTdHJlYW0uY3BwIGIvV2Vi
Q29yZS9odG1sL0ZpbGVTdHJlYW0uY3BwCmluZGV4IDlhMDZlZWQ5ZmQ2NmY4ZTM3ZjM3ZjlkZDUw
NDM1YjU2ZTljYzYxNDEuLmY4NTliNjNhMWMxYjM0YzM2ZTc0YzA5MTI0ZmEwOTEzZjZhZjY3MDQg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9GaWxlU3RyZWFtLmNwcAorKysgYi9XZWJDb3JlL2h0
bWwvRmlsZVN0cmVhbS5jcHAKQEAgLTcyLDQ4ICs3Miw1MyBAQCB2b2lkIEZpbGVTdHJlYW06Om9w
ZW5Gb3JSZWFkKEJsb2IqIGJsb2IpCiAgICAgaWYgKGlzSGFuZGxlVmFsaWQobV9oYW5kbGUpKQog
ICAgICAgICByZXR1cm47CiAKKyAgICAvLyBGSVhNRTogTmVlZCB0byBoYW5kbGUgbXVsdGlwbGUg
aXRlbXMgdGhhdCBtYXkgaW5jbHVkZSBub24tZmlsZSBvbmVzIHdoZW4gQmxvYkJ1aWxkZXIgaXMg
aW50cm9kdWNlZC4KKyAgICBBU1NFUlQoYmxvYi0+aXRlbXMoKS5zaXplKCkgPj0gMSk7CisgICAg
Y29uc3QgRmlsZUJsb2JJdGVtKiBmaWxlSXRlbSA9IGJsb2ItPml0ZW1zKCkuYXQoMCktPnRvRmls
ZUJsb2JJdGVtKCk7CisgICAgaWYgKCFmaWxlSXRlbSkgeworICAgICAgICBBU1NFUlQoZmFsc2Up
OworICAgICAgICBtX2NsaWVudC0+ZGlkRmFpbChOT1RfUkVBREFCTEVfRVJSKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKwogICAgIC8vIENoZWNrIGlmIHRoZSBmaWxlIGV4aXN0cyBieSBxdWVy
eWluZyBpdHMgbW9kaWZpY2F0aW9uIHRpbWUuIFdlIGNob29zZSBub3QgdG8gY2FsbCBmaWxlRXhp
c3RzKCkgaW4gb3JkZXIgdG8gc2F2ZSBhbgogICAgIC8vIGV4dHJhIGZpbGUgc3lzdGVtIGNhbGwg
d2hlbiB0aGUgbW9kaWZpY2F0aW9uIHRpbWUgaXMgbmVlZGVkIHRvIGNoZWNrIHRoZSB2YWxpZGl0
eSBvZiB0aGUgc2xpY2VkIGZpbGUgYmxvYi4KICAgICAvLyBQZXIgdGhlIHNwZWMsIHdlIG5lZWQg
dG8gcmV0dXJuIGRpZmZlcmVudCBlcnJvciBjb2RlcyB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4g
bm9uLWV4aXN0ZW50IGZpbGUgYW5kIHBlcm1pc3Npb24gZXJyb3IuCiAgICAgLy8gb3BlbkZpbGUo
KSBjb3VsZCBub3QgdGVsbCB1c2UgdGhlIGZhaWx1cmUgcmVhc29uLgogICAgIHRpbWVfdCBjdXJy
ZW50TW9kaWZpY2F0aW9uVGltZTsKLSAgICBpZiAoIWdldEZpbGVNb2RpZmljYXRpb25UaW1lKGJs
b2ItPnBhdGgoKSwgY3VycmVudE1vZGlmaWNhdGlvblRpbWUpKSB7CisgICAgaWYgKCFnZXRGaWxl
TW9kaWZpY2F0aW9uVGltZShmaWxlSXRlbS0+cGF0aCgpLCBjdXJyZW50TW9kaWZpY2F0aW9uVGlt
ZSkpIHsKICAgICAgICAgbV9jbGllbnQtPmRpZEZhaWwoTk9UX0ZPVU5EX0VSUik7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKICAgICAvLyBPcGVuIHRoZSBmaWxlIGJsb2IuCi0gICAgbV9oYW5k
bGUgPSBvcGVuRmlsZShibG9iLT5wYXRoKCksIE9wZW5Gb3JSZWFkKTsKKyAgICBtX2hhbmRsZSA9
IG9wZW5GaWxlKGZpbGVJdGVtLT5wYXRoKCksIE9wZW5Gb3JSZWFkKTsKICAgICBpZiAoIWlzSGFu
ZGxlVmFsaWQobV9oYW5kbGUpKSB7CiAgICAgICAgIG1fY2xpZW50LT5kaWRGYWlsKE5PVF9SRUFE
QUJMRV9FUlIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAjaWYgRU5BQkxFKEJMT0JfU0xJ
Q0UpCi0gICAgLy8gQ2hlY2sgdGhlIG1vZGlmaWNhdGlvbnQgdGltZSBmb3IgdGhlIHBvc3NpYmxl
IGZpbGUgY2hhbmdlLgotICAgIGlmIChibG9iLT5tb2RpZmljYXRpb25UaW1lKCkgIT0gQmxvYjo6
ZG9Ob3RDaGVja0ZpbGVDaGFuZ2UgJiYgc3RhdGljX2Nhc3Q8dGltZV90PihibG9iLT5tb2RpZmlj
YXRpb25UaW1lKCkpICE9IGN1cnJlbnRNb2RpZmljYXRpb25UaW1lKSB7Ci0gICAgICAgIG1fY2xp
ZW50LT5kaWRGYWlsKE5PVF9SRUFEQUJMRV9FUlIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgLy8gSnVtcCB0byB0aGUgYmVnaW5uaW5nIHBvc2l0aW9uIGlmIHRoZSBmaWxlIGhhcyBi
ZWVuIHNsaWNlZC4KLSAgICBpZiAoYmxvYi0+c3RhcnQoKSA+IDApIHsKLSAgICAgICAgaWYgKCFz
ZWVrRmlsZShtX2hhbmRsZSwgYmxvYi0+c3RhcnQoKSwgU2Vla0Zyb21CZWdpbm5pbmcpKSB7Cisg
ICAgY29uc3QgRmlsZVJhbmdlQmxvYkl0ZW0qIGZpbGVSYW5nZUl0ZW0gPSBmaWxlSXRlbS0+dG9G
aWxlUmFuZ2VCbG9iSXRlbSgpOworICAgIGlmIChmaWxlUmFuZ2VJdGVtKSB7CisgICAgICAgIC8v
IENoZWNrIHRoZSBtb2RpZmljYXRpb250IHRpbWUgZm9yIHRoZSBwb3NzaWJsZSBmaWxlIGNoYW5n
ZS4KKyAgICAgICAgaWYgKHN0YXRpY19jYXN0PHRpbWVfdD4oZmlsZVJhbmdlSXRlbS0+c25hcHNo
b3RNb2RpZmljYXRpb25UaW1lKCkpICE9IGN1cnJlbnRNb2RpZmljYXRpb25UaW1lKSB7CiAgICAg
ICAgICAgICBtX2NsaWVudC0+ZGlkRmFpbChOT1RfUkVBREFCTEVfRVJSKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQorCisgICAgICAgIC8vIEp1bXAgdG8gdGhlIGJlZ2lubmluZyBw
b3NpdGlvbiBpZiB0aGUgZmlsZSBoYXMgYmVlbiBzbGljZWQuCisgICAgICAgIGlmIChmaWxlUmFu
Z2VJdGVtLT5zdGFydCgpID4gMCkgeworICAgICAgICAgICAgaWYgKHNlZWtGaWxlKG1faGFuZGxl
LCBmaWxlUmFuZ2VJdGVtLT5zdGFydCgpLCBTZWVrRnJvbUJlZ2lubmluZykgPCAwKSB7CisgICAg
ICAgICAgICAgICAgbV9jbGllbnQtPmRpZEZhaWwoTk9UX1JFQURBQkxFX0VSUik7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQogI2VuZGlm
CiAKICAgICAvLyBHZXQgdGhlIHNpemUuCi0jaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgbV90
b3RhbEJ5dGVzVG9SZWFkID0gYmxvYi0+bGVuZ3RoKCk7Ci0gICAgaWYgKG1fdG90YWxCeXRlc1Rv
UmVhZCA9PSBCbG9iOjp0b0VuZE9mRmlsZSkKLSAgICAgICAgbV90b3RhbEJ5dGVzVG9SZWFkID0g
YmxvYi0+c2l6ZSgpIC0gYmxvYi0+c3RhcnQoKTsKLSNlbHNlCiAgICAgbV90b3RhbEJ5dGVzVG9S
ZWFkID0gYmxvYi0+c2l6ZSgpOwotI2VuZGlmCi0KICAgICBtX2NsaWVudC0+ZGlkR2V0U2l6ZSht
X3RvdGFsQnl0ZXNUb1JlYWQpOwogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvRm9ybURh
dGFMaXN0LmNwcCBiL1dlYkNvcmUvaHRtbC9Gb3JtRGF0YUxpc3QuY3BwCmluZGV4IDI4MWM5ZmU0
MThlMWM0ODMzYmI4N2Y4MmY3NGYxY2M0ZDcyMmQ1N2MuLjBmNjI1OTVlZDQxYzIzMTliZGI3OWI1
N2JiZDdjYTk0NjIyYjgyYWEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9Gb3JtRGF0YUxpc3Qu
Y3BwCisrKyBiL1dlYkNvcmUvaHRtbC9Gb3JtRGF0YUxpc3QuY3BwCkBAIC0yOCw2NCArMjgsMjIg
QEAgRm9ybURhdGFMaXN0OjpGb3JtRGF0YUxpc3QoY29uc3QgVGV4dEVuY29kaW5nJiBjKQogewog
fQogCi12b2lkIEZvcm1EYXRhTGlzdDo6YXBwZW5kU3RyaW5nKGNvbnN0IENTdHJpbmcmIHMpCit2
b2lkIEZvcm1EYXRhTGlzdDo6YXBwZW5kU3RyaW5nKGNvbnN0IFN0cmluZyYgcykKIHsKLSAgICBt
X2xpc3QuYXBwZW5kKHMpOworICAgIG1faXRlbXMuYXBwZW5kKFN0cmluZ0Jsb2JJdGVtOjpjcmVh
dGUocywgRW5kaW5nQ1JMRiwgbV9lbmNvZGluZykpOwogfQogCi0vLyBDaGFuZ2UgcGxhaW4gQ1Ig
YW5kIHBsYWluIExGIHRvIENSTEYgcGFpcnMuCi1zdGF0aWMgQ1N0cmluZyBmaXhMaW5lQnJlYWtz
KGNvbnN0IENTdHJpbmcmIHMpCit2b2lkIEZvcm1EYXRhTGlzdDo6YXBwZW5kU3RyaW5nKGNvbnN0
IENTdHJpbmcmIHMpCiB7Ci0gICAgLy8gQ29tcHV0ZSB0aGUgbGVuZ3RoLgotICAgIHVuc2lnbmVk
IG5ld0xlbiA9IDA7Ci0gICAgY29uc3QgY2hhciogcCA9IHMuZGF0YSgpOwotICAgIHdoaWxlIChj
aGFyIGMgPSAqcCsrKSB7Ci0gICAgICAgIGlmIChjID09ICdccicpIHsKLSAgICAgICAgICAgIC8v
IFNhZmUgdG8gbG9vayBhaGVhZCBiZWNhdXNlIG9mIHRyYWlsaW5nICdcMCcuCi0gICAgICAgICAg
ICBpZiAoKnAgIT0gJ1xuJykgewotICAgICAgICAgICAgICAgIC8vIFR1cm4gQ1IgaW50byBDUkxG
LgotICAgICAgICAgICAgICAgIG5ld0xlbiArPSAyOwotICAgICAgICAgICAgfQotICAgICAgICB9
IGVsc2UgaWYgKGMgPT0gJ1xuJykgewotICAgICAgICAgICAgLy8gVHVybiBMRiBpbnRvIENSTEYu
Ci0gICAgICAgICAgICBuZXdMZW4gKz0gMjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IC8vIExlYXZlIG90aGVyIGNoYXJhY3RlcnMgYWxvbmUuCi0gICAgICAgICAgICBuZXdMZW4gKz0g
MTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAobmV3TGVuID09IHMubGVuZ3RoKCkpIHsKLSAg
ICAgICAgcmV0dXJuIHM7Ci0gICAgfQotICAgIAotICAgIC8vIE1ha2UgYSBjb3B5IG9mIHRoZSBz
dHJpbmcuCi0gICAgcCA9IHMuZGF0YSgpOwotICAgIGNoYXIqIHE7Ci0gICAgQ1N0cmluZyByZXN1
bHQgPSBDU3RyaW5nOjpuZXdVbmluaXRpYWxpemVkKG5ld0xlbiwgcSk7Ci0gICAgd2hpbGUgKGNo
YXIgYyA9ICpwKyspIHsKLSAgICAgICAgaWYgKGMgPT0gJ1xyJykgewotICAgICAgICAgICAgLy8g
U2FmZSB0byBsb29rIGFoZWFkIGJlY2F1c2Ugb2YgdHJhaWxpbmcgJ1wwJy4KLSAgICAgICAgICAg
IGlmICgqcCAhPSAnXG4nKSB7Ci0gICAgICAgICAgICAgICAgLy8gVHVybiBDUiBpbnRvIENSTEYu
Ci0gICAgICAgICAgICAgICAgKnErKyA9ICdccic7Ci0gICAgICAgICAgICAgICAgKnErKyA9ICdc
bic7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoYyA9PSAnXG4nKSB7Ci0gICAg
ICAgICAgICAvLyBUdXJuIExGIGludG8gQ1JMRi4KLSAgICAgICAgICAgICpxKysgPSAnXHInOwot
ICAgICAgICAgICAgKnErKyA9ICdcbic7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAv
LyBMZWF2ZSBvdGhlciBjaGFyYWN0ZXJzIGFsb25lLgotICAgICAgICAgICAgKnErKyA9IGM7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBtX2l0ZW1zLmFwcGVuZChT
dHJpbmdCbG9iSXRlbTo6Y3JlYXRlKHMpKTsKIH0KIAotdm9pZCBGb3JtRGF0YUxpc3Q6OmFwcGVu
ZFN0cmluZyhjb25zdCBTdHJpbmcmIHMpCit2b2lkIEZvcm1EYXRhTGlzdDo6YXBwZW5kQmxvYihj
b25zdCBTdHJpbmcmIGtleSwgUGFzc1JlZlB0cjxCbG9iPiBibG9iKQogewotICAgIENTdHJpbmcg
Y3N0ciA9IGZpeExpbmVCcmVha3MobV9lbmNvZGluZy5lbmNvZGUocy5jaGFyYWN0ZXJzKCksIHMu
bGVuZ3RoKCksIEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKSk7Ci0gICAgbV9saXN0LmFwcGVuZChj
c3RyKTsKKyAgICBhcHBlbmRTdHJpbmcoa2V5KTsKKyAgICBjb25zdCBCbG9iSXRlbUxpc3QmIGl0
ZW1zID0gYmxvYi0+aXRlbXMoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGl0ZW1zLnNp
emUoKTsgKytpKQorICAgICAgICBtX2l0ZW1zLmFwcGVuZChpdGVtcy5hdChpKSk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvRm9ybURhdGFMaXN0LmggYi9X
ZWJDb3JlL2h0bWwvRm9ybURhdGFMaXN0LmgKaW5kZXggOGVjZjY0ZWU5M2FkNTI0ZjQ3OTIxZjFk
ODIyZjlhMDhiYTAxM2Q3Yy4uZjRiYjkwNTE1MGZhZDc4YjAxYWU1YTk2ODNmYWQ5OTg0MzkwZTZi
ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0Zvcm1EYXRhTGlzdC5oCisrKyBiL1dlYkNvcmUv
aHRtbC9Gb3JtRGF0YUxpc3QuaApAQCAtNDYsMjcgKzQ2LDkgQEAgcHVibGljOgogICAgICAgICBh
cHBlbmRTdHJpbmcoa2V5KTsKICAgICAgICAgYXBwZW5kU3RyaW5nKFN0cmluZzo6bnVtYmVyKHZh
bHVlKSk7CiAgICAgfQotICAgIHZvaWQgYXBwZW5kQmxvYihjb25zdCBTdHJpbmcmIGtleSwgUGFz
c1JlZlB0cjxCbG9iPiBibG9iKQotICAgIHsKLSAgICAgICAgYXBwZW5kU3RyaW5nKGtleSk7Ci0g
ICAgICAgIG1fbGlzdC5hcHBlbmQoYmxvYik7Ci0gICAgfQotCi0gICAgY2xhc3MgSXRlbSB7Ci0g
ICAgcHVibGljOgotICAgICAgICBJdGVtKCkgeyB9Ci0gICAgICAgIEl0ZW0oY29uc3QgV1RGOjpD
U3RyaW5nJiBkYXRhKSA6IG1fZGF0YShkYXRhKSB7IH0KLSAgICAgICAgSXRlbShQYXNzUmVmUHRy
PEJsb2I+IGJsb2IpIDogbV9ibG9iKGJsb2IpIHsgfQotCi0gICAgICAgIGNvbnN0IFdURjo6Q1N0
cmluZyYgZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsgfQotICAgICAgICBCbG9iKiBibG9i
KCkgY29uc3QgeyByZXR1cm4gbV9ibG9iLmdldCgpOyB9Ci0KLSAgICBwcml2YXRlOgotICAgICAg
ICBXVEY6OkNTdHJpbmcgbV9kYXRhOwotICAgICAgICBSZWZQdHI8QmxvYj4gbV9ibG9iOwotICAg
IH07CisgICAgdm9pZCBhcHBlbmRCbG9iKGNvbnN0IFN0cmluZyYga2V5LCBQYXNzUmVmUHRyPEJs
b2I+KTsKIAotICAgIGNvbnN0IFZlY3RvcjxJdGVtPiYgbGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1f
bGlzdDsgfQorICAgIGNvbnN0IEJsb2JJdGVtTGlzdCYgaXRlbXMoKSBjb25zdCB7IHJldHVybiBt
X2l0ZW1zOyB9CiAgICAgY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZygpIGNvbnN0IHsgcmV0
dXJuIG1fZW5jb2Rpbmc7IH0KIAogcHJpdmF0ZToKQEAgLTc0LDcgKzU2LDcgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIGFwcGVuZFN0cmluZyhjb25zdCBTdHJpbmcmKTsKIAogICAgIFRleHRFbmNvZGlu
ZyBtX2VuY29kaW5nOwotICAgIFZlY3RvcjxJdGVtPiBtX2xpc3Q7CisgICAgQmxvYkl0ZW1MaXN0
IG1faXRlbXM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1l
bnQuY3BwCmluZGV4IGMxOTkzM2FkYjQ4MzNjYzQwZjE2ZTBlOWI2NThkNTdjOGU2YjBmNTAuLjhi
NjA2ZjU5MDIxMTI5MzY4NjY2OWY1MzZjNzU0NzJiOTUyNzJmNWYgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVs
ZW1lbnQuY3BwCkBAIC0yMDksNyArMjA5LDcgQEAgUGFzc1JlZlB0cjxGb3JtRGF0YT4gSFRNTEZv
cm1FbGVtZW50OjpjcmVhdGVGb3JtRGF0YSgpCiAgICAgICAgICAgICBjb250cm9sLT5hcHBlbmRG
b3JtRGF0YSgqZG9tRm9ybURhdGEsIG1fZm9ybURhdGFCdWlsZGVyLmlzTXVsdGlQYXJ0Rm9ybSgp
KTsKICAgICB9CiAKLSAgICBSZWZQdHI8Rm9ybURhdGE+IHJlc3VsdCA9IChtX2Zvcm1EYXRhQnVp
bGRlci5pc011bHRpUGFydEZvcm0oKSkgPyBGb3JtRGF0YTo6Y3JlYXRlTXVsdGlQYXJ0KCpkb21G
b3JtRGF0YSwgZG9jdW1lbnQoKSkgOiBGb3JtRGF0YTo6Y3JlYXRlKCpkb21Gb3JtRGF0YSk7Cisg
ICAgUmVmUHRyPEZvcm1EYXRhPiByZXN1bHQgPSAobV9mb3JtRGF0YUJ1aWxkZXIuaXNNdWx0aVBh
cnRGb3JtKCkpID8gRm9ybURhdGE6OmNyZWF0ZU11bHRpUGFydChkb21Gb3JtRGF0YS0+aXRlbXMo
KSwgZG9tRm9ybURhdGEtPmVuY29kaW5nKCksIGRvY3VtZW50KCkpIDogRm9ybURhdGE6OmNyZWF0
ZShkb21Gb3JtRGF0YS0+aXRlbXMoKSwgZG9tRm9ybURhdGEtPmVuY29kaW5nKCkpOwogCiAgICAg
cmVzdWx0LT5zZXRJZGVudGlmaWVyKGdlbmVyYXRlRm9ybURhdGFJZGVudGlmaWVyKCkpOwogICAg
IHJldHVybiByZXN1bHQ7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTE1ldGVyRWxlbWVu
dC5jcHAgYi9XZWJDb3JlL2h0bWwvSFRNTE1ldGVyRWxlbWVudC5jcHAKaW5kZXggYTFiNzRiMmQw
YWIwYzc1Y2VkYTNkNjMyODk4MTE1NGM0OGM3MjQxOC4uMDMxNjI2NzBjNjNiNzc5ZGY2MDczYjk1
NjA1NGU2YmFlYWQzNTIzOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxNZXRlckVsZW1l
bnQuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MTWV0ZXJFbGVtZW50LmNwcApAQCAtMjQsNiAr
MjQsNyBAQAogCiAjaW5jbHVkZSAiQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5o
IgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJGb3JtRGF0YUxpc3QuaCIK
ICNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MUHJvZ3Jlc3NFbGVtZW50LmNwcCBiL1dlYkNvcmUv
aHRtbC9IVE1MUHJvZ3Jlc3NFbGVtZW50LmNwcAppbmRleCBkMjc1ZWJmY2ZmOGQ5N2I5MTZkNTlk
MjRmMjQxOWRhOGM1MzRhZjI5Li5mN2U4NmYzYTlhZmZlY2VkZWJiOTNiOTM1MzUwZGFiODUyYWVh
NmM1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTFByb2dyZXNzRWxlbWVudC5jcHAKKysr
IGIvV2ViQ29yZS9odG1sL0hUTUxQcm9ncmVzc0VsZW1lbnQuY3BwCkBAIC0yNCw2ICsyNCw3IEBA
CiAKICNpbmNsdWRlICJBdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5j
bHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkZvcm1EYXRhTGlzdC5oIgogI2luY2x1
ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbGF0Zm9ybS9CbG9iSXRlbS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL0Jsb2JJ
dGVtLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4xNmNhMDZkNjc1NjA2MzU5YzQwYTFmMWE3NjY1NWZmNDBhODU2
YTU2Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9CbG9iSXRlbS5jcHAKQEAg
LTAsMCArMSwyNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQmxvYkl0ZW0uaCIK
KworI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKKyNpbmNsdWRlICJVVUlELmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworI2lmIEVOQUJMRShCTE9CX1NMSUNFKQorc3RhdGljIGNvbnN0IGRvdWJs
ZSBpbnZhbGlkTW9kaWZpY2F0aW9uVGltZSA9IDA7CisKK2RvdWJsZSBnZXRGaWxlU25hcHNob3RN
b2RpZmljYXRpb25UaW1lKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICAvLyBGSVhNRTogc3lu
Y2hyb25pemVkIGZpbGUgY2FsbAorICAgIHRpbWVfdCBtb2RpZmljYXRpb25UaW1lOworICAgIGlm
IChnZXRGaWxlTW9kaWZpY2F0aW9uVGltZShwYXRoLCBtb2RpZmljYXRpb25UaW1lKSkKKyAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4obW9kaWZpY2F0aW9uVGltZSk7CisgICAgcmV0
dXJuIGludmFsaWRNb2RpZmljYXRpb25UaW1lOworfQorI2VuZGlmIC8vIEVOQUJMRShCTE9CX1NM
SUNFKQorCisvLyBEYXRhQmxvYkl0ZW0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjaWYgRU5BQkxFKEJMT0JfU0xJQ0Up
CitQYXNzUmVmUHRyPEJsb2JJdGVtPiBEYXRhQmxvYkl0ZW06OnNsaWNlKGxvbmcgbG9uZyBzdGFy
dCwgbG9uZyBsb25nIGxlbmd0aCkKK3sKKyAgICBBU1NFUlQoc3RhcnQgPj0gMCAmJiBsZW5ndGgg
Pj0gMCk7CisgICAgQVNTRVJUKHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oc3RhcnQp
IDwgc2l6ZSgpKTsKKyAgICBpZiAoIXN0YXJ0ICYmIHNpemUoKSA8PSBzdGF0aWNfY2FzdDx1bnNp
Z25lZCBsb25nIGxvbmc+KGxlbmd0aCkpCisgICAgICAgIHJldHVybiB0aGlzOworICAgIGlmIChz
dGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KHN0YXJ0ICsgbGVuZ3RoKSA+IHNpemUoKSkK
KyAgICAgICAgbGVuZ3RoID0gc2l6ZSgpIC0gc3RhcnQ7CisgICAgcmV0dXJuIERhdGFSYW5nZUJs
b2JJdGVtOjpjcmVhdGUodGhpcywgc3RhcnQsIGxlbmd0aCk7Cit9CisjZW5kaWYgLy8gRU5BQkxF
KEJMT0JfU0xJQ0UpCisKKy8vIEZpbGVCbG9iSXRlbSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1Bhc3NSZWZQdHI8Qmxv
Ykl0ZW0+IEZpbGVCbG9iSXRlbTo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBy
ZXR1cm4gYWRvcHRSZWYoc3RhdGljX2Nhc3Q8QmxvYkl0ZW0qPihuZXcgRmlsZUJsb2JJdGVtKHBh
dGgpKSk7Cit9CisKK0ZpbGVCbG9iSXRlbTo6RmlsZUJsb2JJdGVtKGNvbnN0IFN0cmluZyYgcGF0
aCkKKyAgICA6IG1fcGF0aChwYXRoKQorICAgICwgbV9maWxlTmFtZShwYXRoR2V0RmlsZU5hbWUo
bV9wYXRoKSkKK3sKK30KKwordW5zaWduZWQgbG9uZyBsb25nIEZpbGVCbG9iSXRlbTo6c2l6ZSgp
IGNvbnN0Cit7CisgICAgLy8gRklYTUU6IHN5bmNocm9uaXplZCBmaWxlIGNhbGwKKyAgICBsb25n
IGxvbmcgc2l6ZTsKKyAgICBpZiAoIWdldEZpbGVTaXplKG1fcGF0aCwgc2l6ZSkpCisgICAgICAg
IHJldHVybiAwOworICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KHNp
emUpOworfQorCisjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCitQYXNzUmVmUHRyPEJsb2JJdGVtPiBG
aWxlQmxvYkl0ZW06OnNsaWNlKGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCkKK3sK
KyAgICBBU1NFUlQoc3RhcnQgPj0gMCAmJiBsZW5ndGggPj0gMCk7CisgICAgQVNTRVJUKHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oc3RhcnQpIDwgc2l6ZSgpKTsKKyAgICBpZiAoIXN0
YXJ0ICYmIHNpemUoKSA8PSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KGxlbmd0aCkp
CisgICAgICAgIHJldHVybiB0aGlzOworICAgIGNvbnN0IEZpbGVSYW5nZUJsb2JJdGVtKiBmaWxl
UmFuZ2VJdGVtID0gdG9GaWxlUmFuZ2VCbG9iSXRlbSgpOworICAgIGRvdWJsZSBtb2RpZmljYXRp
b25UaW1lID0gZmlsZVJhbmdlSXRlbSA/IGZpbGVSYW5nZUl0ZW0tPnNuYXBzaG90TW9kaWZpY2F0
aW9uVGltZSgpIDogZ2V0RmlsZVNuYXBzaG90TW9kaWZpY2F0aW9uVGltZShwYXRoKCkpOworICAg
IHJldHVybiBGaWxlUmFuZ2VCbG9iSXRlbTo6Y3JlYXRlKHBhdGgoKSwgc3RhcnQsIGxlbmd0aCwg
bW9kaWZpY2F0aW9uVGltZSk7Cit9CisjZW5kaWYgLy8gRU5BQkxFKEJMT0JfU0xJQ0UpCisKKy8v
IFN0cmluZ0Jsb2JJdGVtIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1Bhc3NSZWZQdHI8QmxvYkl0ZW0+IFN0cmluZ0Jsb2JJ
dGVtOjpjcmVhdGUoY29uc3QgU3RyaW5nJiB0ZXh0LCBMaW5lRW5kaW5nIGVuZGluZywgVGV4dEVu
Y29kaW5nIGVuY29kaW5nKQoreworICAgIHJldHVybiBhZG9wdFJlZihzdGF0aWNfY2FzdDxCbG9i
SXRlbSo+KG5ldyBTdHJpbmdCbG9iSXRlbSh0ZXh0LCBlbmRpbmcsIGVuY29kaW5nKSkpOworfQor
CitQYXNzUmVmUHRyPEJsb2JJdGVtPiBTdHJpbmdCbG9iSXRlbTo6Y3JlYXRlKGNvbnN0IENTdHJp
bmcmIHRleHQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKHN0YXRpY19jYXN0PEJsb2JJdGVtKj4o
bmV3IFN0cmluZ0Jsb2JJdGVtKHRleHQpKSk7Cit9CisKK1N0cmluZ0Jsb2JJdGVtOjpTdHJpbmdC
bG9iSXRlbShjb25zdCBTdHJpbmcmIHRleHQsIExpbmVFbmRpbmcgZW5kaW5nLCBUZXh0RW5jb2Rp
bmcgZW5jb2RpbmcpCisgICAgOiBtX2RhdGEoU3RyaW5nQmxvYkl0ZW06OmNvbnZlcnRUb0NTdHJp
bmcodGV4dCwgZW5kaW5nLCBlbmNvZGluZykpCit7Cit9CisKK1N0cmluZ0Jsb2JJdGVtOjpTdHJp
bmdCbG9iSXRlbShjb25zdCBDU3RyaW5nJiB0ZXh0KQorICAgIDogbV9kYXRhKHRleHQpCit7Cit9
CisKK0NTdHJpbmcgU3RyaW5nQmxvYkl0ZW06OmNvbnZlcnRUb0NTdHJpbmcoY29uc3QgU3RyaW5n
JiB0ZXh0LCBMaW5lRW5kaW5nIGVuZGluZywgVGV4dEVuY29kaW5nIGVuY29kaW5nKQoreworICAg
IENTdHJpbmcgZnJvbSA9IGVuY29kaW5nLmVuY29kZSh0ZXh0LmNoYXJhY3RlcnMoKSwgdGV4dC5s
ZW5ndGgoKSwgRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpOworICAgIENTdHJpbmcgcmVzdWx0ID0g
ZnJvbTsKKworICAgIGlmIChlbmRpbmcgPT0gRW5kaW5nVHJhbnNwYXJlbnQpCisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisKKyAgICBjb25zdCBjaGFyKiBlbmRpbmdDaGFycyA9IChlbmRpbmcgPT0g
RW5kaW5nQ1JMRikgPyAiXHJcbiIgOiAoKGVuZGluZyA9PSBFbmRpbmdDUikgPyAiXHIiIDogIlxu
Iik7CisKKyAgICBpbnQgZW5kaW5nTGVuZ3RoID0gKGVuZGluZyA9PSBFbmRpbmdDUkxGKSA/IDIg
OiAxOworICAgIGludCBuZWVkRml4ID0gMDsKKworICAgIC8vIENhbGN1bGF0ZSB0aGUgZmluYWwg
bGVuZ3RoLgorICAgIGludCBjYWxjdWxhdGVkTGVuZ3RoID0gZnJvbS5sZW5ndGgoKTsKKyAgICBj
b25zdCBjaGFyKiBwID0gZnJvbS5kYXRhKCk7CisgICAgd2hpbGUgKGNoYXIgYyA9ICpwKyspIHsK
KyAgICAgICAgaWYgKGMgPT0gJ1xyJykgeworICAgICAgICAgICAgLy8gU2FmZSB0byBsb29rIGFo
ZWFkIGJlY2F1c2Ugb2YgdHJhaWxpbmcgJ1wwJy4KKyAgICAgICAgICAgIGlmICgqcCA9PSAnXG4n
ICYmIGVuZGluZyAhPSBFbmRpbmdDUkxGKSB7CisgICAgICAgICAgICAgICAgY2FsY3VsYXRlZExl
bmd0aCArPSAoZW5kaW5nTGVuZ3RoIC0gMik7CisgICAgICAgICAgICAgICAgKytuZWVkRml4Owor
ICAgICAgICAgICAgfSBlbHNlIGlmIChlbmRpbmcgIT0gRW5kaW5nQ1IpIHsKKyAgICAgICAgICAg
ICAgICBjYWxjdWxhdGVkTGVuZ3RoICs9IChlbmRpbmdMZW5ndGggLSAxKTsKKyAgICAgICAgICAg
ICAgICArK25lZWRGaXg7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoYyA9PSAn
XG4nICYmIGVuZGluZyAhPSBFbmRpbmdMRikgeworICAgICAgICAgICAgY2FsY3VsYXRlZExlbmd0
aCArPSAoZW5kaW5nTGVuZ3RoIC0gMSk7CisgICAgICAgICAgICArK25lZWRGaXg7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBpZiAoIW5lZWRGaXgpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisK
KyAgICAvLyBDb252ZXJ0IHRoZSBlbmRpbmdzIGFuZCBjcmVhdGUgYSBkYXRhIGJ1ZmZlci4KKyAg
ICBwID0gZnJvbS5kYXRhKCk7CisgICAgY2hhciogcTsKKyAgICByZXN1bHQgPSBDU3RyaW5nOjpu
ZXdVbmluaXRpYWxpemVkKGNhbGN1bGF0ZWRMZW5ndGgsIHEpOworICAgIHdoaWxlIChjaGFyIGMg
PSAqcCsrKSB7CisgICAgICAgIGlmIChjID09ICdccicpIHsKKyAgICAgICAgICAgIGlmICgqcCA9
PSAnXG4nICYmIGVuZGluZyAhPSBFbmRpbmdDUkxGKSB7CisgICAgICAgICAgICAgICAgbWVtY3B5
KHEsIGVuZGluZ0NoYXJzLCBlbmRpbmdMZW5ndGgpOworICAgICAgICAgICAgICAgIHEgKz0gZW5k
aW5nTGVuZ3RoOworICAgICAgICAgICAgfSBlbHNlIGlmICgqcCAhPSAnXG4nICYmIGVuZGluZyAh
PSBFbmRpbmdDUikgeworICAgICAgICAgICAgICAgIG1lbWNweShxLCBlbmRpbmdDaGFycywgZW5k
aW5nTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBxICs9IGVuZGluZ0xlbmd0aDsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChjID09ICdcbicgJiYgZW5kaW5nICE9IEVuZGluZ0xG
KSB7CisgICAgICAgICAgICBtZW1jcHkocSwgZW5kaW5nQ2hhcnMsIGVuZGluZ0xlbmd0aCk7Cisg
ICAgICAgICAgICBxICs9IGVuZGluZ0xlbmd0aDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIC8vIExlYXZlIG90aGVyIGNoYXJhY3RlcnMgYWxvbmUuCisgICAgICAgICAgICAqcSsrID0g
YzsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCisvLyBCeXRlQXJy
YXlCbG9iSXRlbSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisKK1Bhc3NSZWZQdHI8QmxvYkl0ZW0+IEJ5dGVBcnJheUJsb2JJdGVtOjpj
cmVhdGUoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IHNpemUpCit7CisgICAgcmV0dXJuIGFkb3B0
UmVmKHN0YXRpY19jYXN0PEJsb2JJdGVtKj4obmV3IEJ5dGVBcnJheUJsb2JJdGVtKGRhdGEsIHNp
emUpKSk7Cit9CisKK0J5dGVBcnJheUJsb2JJdGVtOjpCeXRlQXJyYXlCbG9iSXRlbShjb25zdCBj
aGFyKiBkYXRhLCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBtX2J5dGVzQXJyYXkuYXBwZW5kKGRhdGEs
IHNpemUpOworfQorCisjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCisKKy8vIERhdGFSYW5nZUJsb2JJ
dGVtIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisKK1Bhc3NSZWZQdHI8QmxvYkl0ZW0+IERhdGFSYW5nZUJsb2JJdGVtOjpjcmVhdGUo
UGFzc1JlZlB0cjxEYXRhQmxvYkl0ZW0+IGl0ZW0sIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25n
IGxlbmd0aCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoc3RhdGljX2Nhc3Q8QmxvYkl0ZW0qPihu
ZXcgRGF0YVJhbmdlQmxvYkl0ZW0oaXRlbSwgc3RhcnQsIGxlbmd0aCkpKTsKK30KKworRGF0YVJh
bmdlQmxvYkl0ZW06OkRhdGFSYW5nZUJsb2JJdGVtKFBhc3NSZWZQdHI8RGF0YUJsb2JJdGVtPiBp
dGVtLCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgpCisgICAgOiBtX2xlbmd0aChs
ZW5ndGgpCit7CisgICAgY29uc3QgRGF0YVJhbmdlQmxvYkl0ZW0qIHJhbmdlSXRlbSA9IG1faXRl
bS0+dG9EYXRhUmFuZ2VCbG9iSXRlbSgpOworICAgIGlmIChyYW5nZUl0ZW0pIHsKKyAgICAgICAg
bV9pdGVtID0gcmFuZ2VJdGVtLT5tX2l0ZW07CisgICAgICAgIG1fc3RhcnQgPSBzdGFydCArIHJh
bmdlSXRlbS0+bV9zdGFydDsKKyAgICAgICAgQVNTRVJUKCFtX2l0ZW0tPnRvRGF0YVJhbmdlQmxv
Ykl0ZW0oKSk7CisgICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+
KG1fc3RhcnQgKyBtX2xlbmd0aCkgPD0gbV9pdGVtLT5zaXplKCkpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIG1faXRlbSA9IGl0ZW07CisgICAgICAgIG1fc3RhcnQgPSBzdGFydDsKKyAgICB9Cit9
CisKK2NvbnN0IGNoYXIqIERhdGFSYW5nZUJsb2JJdGVtOjpkYXRhKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9pdGVtLT5kYXRhKCkgKyBtX3N0YXJ0OworfQorCisvLyBGaWxlUmFuZ2VCbG9iSXRl
bSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorCitQYXNzUmVmUHRyPEJsb2JJdGVtPiBGaWxlUmFuZ2VCbG9iSXRlbTo6Y3JlYXRlKGNv
bnN0IFN0cmluZyYgcGF0aCwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoLCBkb3Vi
bGUgc25hcHNob3RNb2RpZmljYXRpb25UaW1lKQoreworICAgIHJldHVybiBhZG9wdFJlZihzdGF0
aWNfY2FzdDxCbG9iSXRlbSo+KG5ldyBGaWxlUmFuZ2VCbG9iSXRlbShwYXRoLCBzdGFydCwgbGVu
Z3RoLCBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUpKSk7Cit9CisKK0ZpbGVSYW5nZUJsb2JJdGVt
OjpGaWxlUmFuZ2VCbG9iSXRlbShjb25zdCBTdHJpbmcmIHBhdGgsIGxvbmcgbG9uZyBzdGFydCwg
bG9uZyBsb25nIGxlbmd0aCwgZG91YmxlIG1vZGlmaWNhdGlvblRpbWUpCisgICAgOiBGaWxlQmxv
Ykl0ZW0ocGF0aCkKKyAgICAsIG1fc3RhcnQoc3RhcnQpCisgICAgLCBtX2xlbmd0aChsZW5ndGgp
CisgICAgLCBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZShtb2RpZmljYXRpb25UaW1lKQorewor
ICAgIG1fdW5pcXVlTmFtZSA9ICJCbG9iIiArIGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKTsK
KyAgICBtX3VuaXF1ZU5hbWUucmVwbGFjZSgiLSIsICIiKTsgLy8gRm9yIHNhZnR5LCByZW1vdmUg
Jy0nIGZyb20gdGhlIGZpbGVuYW1lIHNuY2Ugc29tZSBzZXJ2ZXJzIG1heSBub3QgbGlrZSBpdC4K
K30KKworI2VuZGlmIC8vIEVOQUJMRShCTE9CX1NMSUNFKQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL0Jsb2JJdGVtLmggYi9XZWJDb3JlL3Bs
YXRmb3JtL0Jsb2JJdGVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjJlZTU2YjA4MTc5NjQzYThkNzllMmI4Nzk3
MmM4ZDFlZmRkMDI4YgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vQmxvYkl0
ZW0uaApAQCAtMCwwICsxLDIwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEJsb2JJdGVtX2gKKyNkZWZpbmUgQmxvYkl0
ZW1faAorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJUZXh0RW5jb2Rp
bmcuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Ly8gU3RyaW5nIGVuZGluZyB0eXBlcy4KK2VudW0gTGluZUVuZGluZyB7CisgICAgRW5kaW5nVHJh
bnNwYXJlbnQgPSAwLAorICAgIEVuZGluZ0xGLAorICAgIEVuZGluZ0NSLAorICAgIEVuZGluZ0NS
TEYsCit9OworCitjbGFzcyBCeXRlQXJyYXlCbG9iSXRlbTsKK2NsYXNzIERhdGFCbG9iSXRlbTsK
K2NsYXNzIERhdGFSYW5nZUJsb2JJdGVtOworY2xhc3MgRmlsZUJsb2JJdGVtOworY2xhc3MgRmls
ZVJhbmdlQmxvYkl0ZW07CitjbGFzcyBTdHJpbmdCbG9iSXRlbTsKKworLy8gQSBiYXNlIGludGVy
ZmFjZSBmb3IgYWxsIGFyYml0cmFyeS1kYXRhLW9iamVjdCBjb21wb25lbnQgaXRlbXMuCisvLyBU
aGUgQmxvYkl0ZW0gYW5kIGl0cyBzdWJjbGFzc2VzIGFyZSBzdHJ1Y3R1cmVkIGxpa2UgdGhlIGZv
bGxvd2luZzoKKy8vICAgIEJsb2JJdGVtCisvLyAgICAgICB8CisvLyAgICAgICArLS0tLS0tLT4g
RGF0YUJsb2JJdGVtCisvLyAgICAgICB8ICAgICAgICAgICAgICB8CisvLyAgICAgICB8ICAgICAg
ICAgICAgICArLS0tLS0tLS0tPiBTdHJpbmdCbG9iSXRlbQorLy8gICAgICAgfCAgICAgICAgICAg
ICAgKy0tLS0tLS0tLT4gQnl0ZUFycmF5QmxvYkl0ZW0KKy8vICAgICAgIHwgICAgICAgICAgICAg
ICstLS0tLS0tLS0+IERhdGFSYW5nZUJsb2JJdGVtCisvLyAgICAgICB8CisvLyAgICAgICArLS0t
LS0tLT4gRmlsZUJsb2JJdGVtCisvLyAgICAgICAgICAgICAgICAgICAgICB8CisvLyAgICAgICAg
ICAgICAgICAgICAgICArLS0tLS0tLS0tPiBGaWxlUmFuZ2VCbG9iSXRlbQorLy8KK2NsYXNzIEJs
b2JJdGVtIDogcHVibGljIFJlZkNvdW50ZWQ8QmxvYkl0ZW0+IHsKK3B1YmxpYzoKKyAgICB2aXJ0
dWFsIH5CbG9iSXRlbSgpIHsgfQorICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBsb25nIHNpemUo
KSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIGNvbnN0IERhdGFCbG9iSXRlbSogdG9EYXRhQmxv
Ykl0ZW0oKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBjb25zdCBTdHJpbmdCbG9i
SXRlbSogdG9TdHJpbmdCbG9iSXRlbSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFs
IGNvbnN0IEJ5dGVBcnJheUJsb2JJdGVtKiB0b0J5dGVBcnJheUJsb2JJdGVtKCkgY29uc3QgeyBy
ZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgY29uc3QgRmlsZUJsb2JJdGVtKiB0b0ZpbGVCbG9iSXRl
bSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyNpZiBFTkFCTEUoQkxPQl9TTElDRSkKKyAgICB2aXJ0
dWFsIGNvbnN0IERhdGFSYW5nZUJsb2JJdGVtKiB0b0RhdGFSYW5nZUJsb2JJdGVtKCkgY29uc3Qg
eyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgY29uc3QgRmlsZVJhbmdlQmxvYkl0ZW0qIHRvRmls
ZVJhbmdlQmxvYkl0ZW0oKSBjb25zdCB7IHJldHVybiAwOyB9CisKKyAgICAvLyBOb3RlOiBubyBl
eHRlcm5hbCBtZXRob2RzIGV4Y2VwdCBmb3IgQmxvYjo6c2xpY2Ugc2hvdWxkIGNhbGwgdGhpcy4K
KyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8QmxvYkl0ZW0+IHNsaWNlKGxvbmcgbG9uZyBzdGFydCwg
bG9uZyBsb25nIGxlbmd0aCkgPSAwOworI2VuZGlmIC8vIEVOQUJMRShCTE9CX1NMSUNFKQorCitw
cm90ZWN0ZWQ6CisgICAgQmxvYkl0ZW0oKSB7IH0KK307CisKK3R5cGVkZWYgVmVjdG9yPFJlZlB0
cjxCbG9iSXRlbT4gPiBCbG9iSXRlbUxpc3Q7CisKK2NsYXNzIERhdGFCbG9iSXRlbSA6IHB1Ymxp
YyBCbG9iSXRlbSB7CitwdWJsaWM6CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiBkYXRhKCkgY29u
c3QgPSAwOworCisgICAgLy8gQmxvYkl0ZW0gbWV0aG9kcy4KKyAgICB2aXJ0dWFsIGNvbnN0IERh
dGFCbG9iSXRlbSogdG9EYXRhQmxvYkl0ZW0oKSBjb25zdCB7IHJldHVybiB0aGlzOyB9CisjaWYg
RU5BQkxFKEJMT0JfU0xJQ0UpCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEJsb2JJdGVtPiBzbGlj
ZShsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgpOworI2VuZGlmIC8vIEVOQUJMRShC
TE9CX1NMSUNFKQorfTsKKworY2xhc3MgRmlsZUJsb2JJdGVtIDogcHVibGljIEJsb2JJdGVtIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCbG9iSXRlbT4gY3JlYXRlKGNvbnN0IFN0
cmluZyYgcGF0aCk7CisgICAgdmlydHVhbCBjb25zdCBTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJl
dHVybiBtX2ZpbGVOYW1lOyB9CisgICAgdmlydHVhbCBjb25zdCBTdHJpbmcmIHBhdGgoKSBjb25z
dCB7IHJldHVybiBtX3BhdGg7IH0KKworICAgIC8vIEJsb2JJdGVtIG1ldGhvZHMuCisgICAgdmly
dHVhbCB1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgY29uc3Qg
RmlsZUJsb2JJdGVtKiB0b0ZpbGVCbG9iSXRlbSgpIGNvbnN0IHsgcmV0dXJuIHRoaXM7IH0KKyNp
ZiBFTkFCTEUoQkxPQl9TTElDRSkKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8QmxvYkl0ZW0+IHNs
aWNlKGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCk7CisjZW5kaWYgLy8gRU5BQkxF
KEJMT0JfU0xJQ0UpCisKK3Byb3RlY3RlZDoKKyAgICBGaWxlQmxvYkl0ZW0oY29uc3QgU3RyaW5n
JiBwYXRoKTsKKyAgICBTdHJpbmcgbV9wYXRoOworICAgIFN0cmluZyBtX2ZpbGVOYW1lOworfTsK
KworY2xhc3MgU3RyaW5nQmxvYkl0ZW0gOiBwdWJsaWMgRGF0YUJsb2JJdGVtIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCbG9iSXRlbT4gY3JlYXRlKGNvbnN0IFN0cmluZyYsIExp
bmVFbmRpbmcsIFRleHRFbmNvZGluZyk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QmxvYkl0ZW0+
IGNyZWF0ZShjb25zdCBDU3RyaW5nJik7CisgICAgY29uc3QgQ1N0cmluZyYgY3N0cigpIGNvbnN0
IHsgcmV0dXJuIG1fZGF0YTsgfQorCisgICAgLy8gQmxvYkl0ZW0gbWV0aG9kcy4KKyAgICB2aXJ0
dWFsIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmxlbmd0
aCgpOyB9CisgICAgdmlydHVhbCBjb25zdCBTdHJpbmdCbG9iSXRlbSogdG9TdHJpbmdCbG9iSXRl
bSgpIGNvbnN0IHsgcmV0dXJuIHRoaXM7IH0KKworICAgIC8vIERhdGFCbG9iSXRlbSBtZXRob2Rz
LgorICAgIHZpcnR1YWwgY29uc3QgY2hhciogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5k
YXRhKCk7IH0KKworcHJpdmF0ZToKKyAgICBTdHJpbmdCbG9iSXRlbShjb25zdCBTdHJpbmcmLCBM
aW5lRW5kaW5nLCBUZXh0RW5jb2RpbmcpOworICAgIFN0cmluZ0Jsb2JJdGVtKGNvbnN0IENTdHJp
bmcmKTsKKyAgICBzdGF0aWMgQ1N0cmluZyBjb252ZXJ0VG9DU3RyaW5nKGNvbnN0IFN0cmluZyYs
IExpbmVFbmRpbmcsIFRleHRFbmNvZGluZyk7CisgICAgQ1N0cmluZyBtX2RhdGE7Cit9OworCitj
bGFzcyBCeXRlQXJyYXlCbG9iSXRlbSA6IHB1YmxpYyBEYXRhQmxvYkl0ZW0geworcHVibGljOgor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJsb2JJdGVtPiBjcmVhdGUoY29uc3QgY2hhciogZGF0YSwg
c2l6ZV90IHNpemUpOworCisgICAgLy8gQmxvYkl0ZW0gbWV0aG9kcy4KKyAgICB2aXJ0dWFsIHVu
c2lnbmVkIGxvbmcgbG9uZyBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlc0FycmF5LnNpemUo
KTsgfQorICAgIHZpcnR1YWwgY29uc3QgQnl0ZUFycmF5QmxvYkl0ZW0qIHRvQnl0ZUFycmF5Qmxv
Ykl0ZW0oKSBjb25zdCB7IHJldHVybiB0aGlzOyB9CisKKyAgICAvLyBEYXRhQmxvYkl0ZW0gbWV0
aG9kcy4KKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2J5
dGVzQXJyYXkuZGF0YSgpOyB9CisKK3ByaXZhdGU6CisgICAgQnl0ZUFycmF5QmxvYkl0ZW0oY29u
c3QgY2hhciogZGF0YSwgc2l6ZV90IHNpemUpOworICAgIFZlY3RvcjxjaGFyPiBtX2J5dGVzQXJy
YXk7Cit9OworCisjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCisKKy8vIEJsb2JJdGVtIGNsYXNzIGZv
ciBzbGljZWQgZGF0YSAoc3RyaW5nIG9yIGJ5dGVzLWFycmF5KS4KK2NsYXNzIERhdGFSYW5nZUJs
b2JJdGVtIDogcHVibGljIERhdGFCbG9iSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8QmxvYkl0ZW0+IGNyZWF0ZShQYXNzUmVmUHRyPERhdGFCbG9iSXRlbT4sIGxvbmcgbG9u
ZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCk7CisKKyAgICAvLyBCbG9iSXRlbSBtZXRob2RzLgor
ICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBsb25nIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2xl
bmd0aDsgfQorICAgIHZpcnR1YWwgY29uc3QgRGF0YVJhbmdlQmxvYkl0ZW0qIHRvRGF0YVJhbmdl
QmxvYkl0ZW0oKSBjb25zdCB7IHJldHVybiB0aGlzOyB9CisKKyAgICAvLyBEYXRhQmxvYkl0ZW0g
bWV0aG9kcy4KKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGRhdGEoKSBjb25zdDsKKworcHJpdmF0
ZToKKyAgICBEYXRhUmFuZ2VCbG9iSXRlbShQYXNzUmVmUHRyPERhdGFCbG9iSXRlbT4sIGxvbmcg
bG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCk7CisgICAgUmVmUHRyPERhdGFCbG9iSXRlbT4g
bV9pdGVtOworICAgIGxvbmcgbG9uZyBtX3N0YXJ0OworICAgIGxvbmcgbG9uZyBtX2xlbmd0aDsK
K307CisKK2NsYXNzIEZpbGVSYW5nZUJsb2JJdGVtIDogcHVibGljIEZpbGVCbG9iSXRlbSB7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QmxvYkl0ZW0+IGNyZWF0ZShjb25zdCBTdHJp
bmcmIHBhdGgsIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCwgZG91YmxlIHNuYXBz
aG90TW9kaWZpY2F0aW9uVGltZSk7CisgICAgbG9uZyBsb25nIHN0YXJ0KCkgY29uc3QgeyByZXR1
cm4gbV9zdGFydDsgfQorICAgIGRvdWJsZSBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUoKSBjb25z
dCB7IHJldHVybiBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZTsgfQorCisgICAgLy8gQmxvYkl0
ZW0gbWV0aG9kcy4KKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9sZW5ndGg7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IEZpbGVSYW5nZUJsb2JJdGVt
KiB0b0ZpbGVSYW5nZUJsb2JJdGVtKCkgY29uc3QgeyByZXR1cm4gdGhpczsgfQorCisgICAgLy8g
RmlsZUJsb2JJdGVtIG1ldGhvZHMuCisgICAgdmlydHVhbCBjb25zdCBTdHJpbmcmIG5hbWUoKSBj
b25zdCB7IHJldHVybiBtX3VuaXF1ZU5hbWU7IH0KKworcHJpdmF0ZToKKyAgICBGaWxlUmFuZ2VC
bG9iSXRlbShjb25zdCBTdHJpbmcmIHBhdGgsIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxl
bmd0aCwgZG91YmxlIHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSk7CisgICAgbG9uZyBsb25nIG1f
c3RhcnQ7CisgICAgbG9uZyBsb25nIG1fbGVuZ3RoOworICAgIFN0cmluZyBtX3VuaXF1ZU5hbWU7
CisKKyAgICBkb3VibGUgbV9zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWU7Cit9OworCisjZW5kaWYg
Ly8gRU5BQkxFKEJMT0JfU0xJQ0UpCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIEJsb2JJdGVtX2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3Jt
RGF0YS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwCmluZGV4IDkx
ODAwMmFlZmQ4MWE2ODkxZjlmMTliYWY0NGQ3NTU5MWZkZmE0ODQuLjQzMWRiZTRmZDllNWIyNjNi
YWQzMjdlZTkxODE4NjQ3ZjI1MzEyNmQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9Gb3JtRGF0YS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRh
LmNwcApAQCAtMTksMjMgKzE5LDI2IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgorCiAj
aW5jbHVkZSAiRm9ybURhdGEuaCIKIAotI2luY2x1ZGUgIkJsb2IuaCIKKyNpbmNsdWRlICJCbG9i
SXRlbS5oIgogI2luY2x1ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgot
I2luY2x1ZGUgIkRPTUZvcm1EYXRhLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRl
ICJGaWxlLmgiCiAjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgogI2luY2x1ZGUgIkZvcm1EYXRhQnVp
bGRlci5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKICNpbmNsdWRlICJQYWdlLmgi
CiAjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCi0jaW5jbHVkZSAiVVVJRC5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKKyNpZiBFTkFCTEUoQkxPQl9TTElDRSkKK2NvbnN0IGxvbmcgbG9uZyBG
b3JtRGF0YUVsZW1lbnQ6OnRvRW5kT2ZGaWxlID0gLTE7Citjb25zdCBkb3VibGUgRm9ybURhdGFF
bGVtZW50Ojpkb05vdENoZWNrRmlsZUNoYW5nZSA9IDA7CisjZW5kaWYKKwogaW5saW5lIEZvcm1E
YXRhOjpGb3JtRGF0YSgpCiAgICAgOiBtX2lkZW50aWZpZXIoMCkKICAgICAsIG1faGFzR2VuZXJh
dGVkRmlsZXMoZmFsc2UpCkBAIC05NiwxNyArOTksMTcgQEAgUGFzc1JlZlB0cjxGb3JtRGF0YT4g
Rm9ybURhdGE6OmNyZWF0ZShjb25zdCBWZWN0b3I8Y2hhcj4mIHZlY3RvcikKICAgICByZXR1cm4g
cmVzdWx0LnJlbGVhc2UoKTsKIH0KIAotUGFzc1JlZlB0cjxGb3JtRGF0YT4gRm9ybURhdGE6OmNy
ZWF0ZShjb25zdCBET01Gb3JtRGF0YSYgZG9tRm9ybURhdGEpCitQYXNzUmVmUHRyPEZvcm1EYXRh
PiBGb3JtRGF0YTo6Y3JlYXRlKGNvbnN0IEJsb2JJdGVtTGlzdCYgaXRlbXMsIGNvbnN0IFRleHRF
bmNvZGluZyYgZW5jb2RpbmcpCiB7CiAgICAgUmVmUHRyPEZvcm1EYXRhPiByZXN1bHQgPSBjcmVh
dGUoKTsKLSAgICByZXN1bHQtPmFwcGVuZERPTUZvcm1EYXRhKGRvbUZvcm1EYXRhLCBmYWxzZSwg
MCk7CisgICAgcmVzdWx0LT5hcHBlbmRLZXlWYWx1ZVBhaXJJdGVtcyhpdGVtcywgZW5jb2Rpbmcs
IGZhbHNlLCAwKTsKICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0KIAotUGFzc1JlZlB0
cjxGb3JtRGF0YT4gRm9ybURhdGE6OmNyZWF0ZU11bHRpUGFydChjb25zdCBET01Gb3JtRGF0YSYg
ZG9tRm9ybURhdGEsIERvY3VtZW50KiBkb2N1bWVudCkKK1Bhc3NSZWZQdHI8Rm9ybURhdGE+IEZv
cm1EYXRhOjpjcmVhdGVNdWx0aVBhcnQoY29uc3QgQmxvYkl0ZW1MaXN0JiBpdGVtcywgY29uc3Qg
VGV4dEVuY29kaW5nJiBlbmNvZGluZywgRG9jdW1lbnQqIGRvY3VtZW50KQogewogICAgIFJlZlB0
cjxGb3JtRGF0YT4gcmVzdWx0ID0gY3JlYXRlKCk7Ci0gICAgcmVzdWx0LT5hcHBlbmRET01Gb3Jt
RGF0YShkb21Gb3JtRGF0YSwgdHJ1ZSwgZG9jdW1lbnQpOworICAgIHJlc3VsdC0+YXBwZW5kS2V5
VmFsdWVQYWlySXRlbXMoaXRlbXMsIGVuY29kaW5nLCB0cnVlLCBkb2N1bWVudCk7CiAgICAgcmV0
dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiB9CiAKQEAgLTE1NCwxMiArMTU3LDQ0IEBAIHZvaWQgRm9y
bURhdGE6OmFwcGVuZERhdGEoY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IHNpemUpCiB2b2lkIEZv
cm1EYXRhOjphcHBlbmRGaWxlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGJvb2wgc2hvdWxkR2Vu
ZXJhdGVGaWxlKQogewogI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgIG1fZWxlbWVudHMuYXBw
ZW5kKEZvcm1EYXRhRWxlbWVudChmaWxlbmFtZSwgMCwgQmxvYjo6dG9FbmRPZkZpbGUsIEJsb2I6
OmRvTm90Q2hlY2tGaWxlQ2hhbmdlLCBzaG91bGRHZW5lcmF0ZUZpbGUpKTsKKyAgICBtX2VsZW1l
bnRzLmFwcGVuZChGb3JtRGF0YUVsZW1lbnQoZmlsZW5hbWUsIDAsIEZvcm1EYXRhRWxlbWVudDo6
dG9FbmRPZkZpbGUsIEZvcm1EYXRhRWxlbWVudDo6ZG9Ob3RDaGVja0ZpbGVDaGFuZ2UsIHNob3Vs
ZEdlbmVyYXRlRmlsZSkpOwogI2Vsc2UKICAgICBtX2VsZW1lbnRzLmFwcGVuZChGb3JtRGF0YUVs
ZW1lbnQoZmlsZW5hbWUsIHNob3VsZEdlbmVyYXRlRmlsZSkpOwogI2VuZGlmCiB9CiAKK3ZvaWQg
Rm9ybURhdGE6OmFwcGVuZEl0ZW1zKGNvbnN0IEJsb2JJdGVtTGlzdCYgaXRlbXMpCit7CisgICAg
Zm9yIChCbG9iSXRlbUxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIoaXRlbXMuYmVnaW4oKSk7IGl0
ZXIgIT0gaXRlbXMuZW5kKCk7ICsraXRlcikKKyAgICAgICAgYXBwZW5kSXRlbShpdGVyLT5nZXQo
KSwgZmFsc2UpOworfQorCit2b2lkIEZvcm1EYXRhOjphcHBlbmRJdGVtKGNvbnN0IEJsb2JJdGVt
KiBpdGVtLCBib29sIHNob3VsZEdlbmVyYXRlRmlsZSkKK3sKKyAgICBjb25zdCBEYXRhQmxvYkl0
ZW0qIGRhdGFJdGVtID0gaXRlbS0+dG9EYXRhQmxvYkl0ZW0oKTsKKyAgICBpZiAoZGF0YUl0ZW0p
IHsKKyAgICAgICAgYXBwZW5kRGF0YShkYXRhSXRlbS0+ZGF0YSgpLCBzdGF0aWNfY2FzdDxzaXpl
X3Q+KGRhdGFJdGVtLT5zaXplKCkpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNv
bnN0IEZpbGVCbG9iSXRlbSogZmlsZUl0ZW0gPSBpdGVtLT50b0ZpbGVCbG9iSXRlbSgpOworICAg
IEFTU0VSVChmaWxlSXRlbSk7CisgICAgaWYgKGZpbGVJdGVtLT5wYXRoKCkuaXNFbXB0eSgpKSB7
CisgICAgICAgIC8vIElmIHRoZSBwYXRoIGlzIGVtcHR5IGRvIG5vdCBhZGQgdGhlIGl0ZW0uCisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZiBFTkFCTEUoQkxPQl9TTElDRSkKKyAgICBjb25z
dCBGaWxlUmFuZ2VCbG9iSXRlbSogZmlsZVJhbmdlSXRlbSA9IGl0ZW0tPnRvRmlsZVJhbmdlQmxv
Ykl0ZW0oKTsKKyAgICBpZiAoZmlsZVJhbmdlSXRlbSkgeworICAgICAgICBhcHBlbmRGaWxlUmFu
Z2UoZmlsZUl0ZW0tPnBhdGgoKSwgZmlsZVJhbmdlSXRlbS0+c3RhcnQoKSwgZmlsZVJhbmdlSXRl
bS0+c2l6ZSgpLCBmaWxlUmFuZ2VJdGVtLT5zbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUoKSwgc2hv
dWxkR2VuZXJhdGVGaWxlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorCisgICAg
YXBwZW5kRmlsZShmaWxlSXRlbS0+cGF0aCgpLCBzaG91bGRHZW5lcmF0ZUZpbGUpOworfQorCiAj
aWYgRU5BQkxFKEJMT0JfU0xJQ0UpCiB2b2lkIEZvcm1EYXRhOjphcHBlbmRGaWxlUmFuZ2UoY29u
c3QgU3RyaW5nJiBmaWxlbmFtZSwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoLCBk
b3VibGUgZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lLCBib29sIHNob3VsZEdlbmVyYXRlRmlsZSkK
IHsKQEAgLTE2Nyw0MiArMjAyLDMwIEBAIHZvaWQgRm9ybURhdGE6OmFwcGVuZEZpbGVSYW5nZShj
b25zdCBTdHJpbmcmIGZpbGVuYW1lLCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uCiB9CiAjZW5k
aWYKIAotdm9pZCBGb3JtRGF0YTo6YXBwZW5kRE9NRm9ybURhdGEoY29uc3QgRE9NRm9ybURhdGEm
IGRvbUZvcm1EYXRhLCBib29sIGlzTXVsdGlQYXJ0Rm9ybSwgRG9jdW1lbnQqIGRvY3VtZW50KQor
dm9pZCBGb3JtRGF0YTo6YXBwZW5kS2V5VmFsdWVQYWlySXRlbXMoY29uc3QgQmxvYkl0ZW1MaXN0
JiBpdGVtcywgY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZywgYm9vbCBpc011bHRpUGFydEZv
cm0sIERvY3VtZW50KiBkb2N1bWVudCkKIHsKICAgICBGb3JtRGF0YUJ1aWxkZXIgZm9ybURhdGFC
dWlsZGVyOwogICAgIGlmIChpc011bHRpUGFydEZvcm0pCiAgICAgICAgIG1fYm91bmRhcnkgPSBm
b3JtRGF0YUJ1aWxkZXIuZ2VuZXJhdGVVbmlxdWVCb3VuZGFyeVN0cmluZygpOwogCiAgICAgVmVj
dG9yPGNoYXI+IGVuY29kZWREYXRhOwotICAgIFRleHRFbmNvZGluZyBlbmNvZGluZyA9IGRvbUZv
cm1EYXRhLmVuY29kaW5nKCk7CiAKLSAgICBjb25zdCBWZWN0b3I8Rm9ybURhdGFMaXN0OjpJdGVt
PiYgbGlzdCA9IGRvbUZvcm1EYXRhLmxpc3QoKTsKLSAgICBzaXplX3QgZm9ybURhdGFMaXN0U2l6
ZSA9IGxpc3Quc2l6ZSgpOworICAgIHNpemVfdCBmb3JtRGF0YUxpc3RTaXplID0gaXRlbXMuc2l6
ZSgpOwogICAgIEFTU0VSVCghKGZvcm1EYXRhTGlzdFNpemUgJSAyKSk7CiAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBmb3JtRGF0YUxpc3RTaXplOyBpICs9IDIpIHsKLSAgICAgICAgY29uc3Qg
Rm9ybURhdGFMaXN0OjpJdGVtJiBrZXkgPSBsaXN0W2ldOwotICAgICAgICBjb25zdCBGb3JtRGF0
YUxpc3Q6Okl0ZW0mIHZhbHVlID0gbGlzdFtpICsgMV07CisgICAgICAgIGNvbnN0IFN0cmluZ0Js
b2JJdGVtKiBrZXkgPSBpdGVtc1tpXS0+dG9TdHJpbmdCbG9iSXRlbSgpOworICAgICAgICBjb25z
dCBCbG9iSXRlbSogdmFsdWUgPSBpdGVtc1tpICsgMV0uZ2V0KCk7CisgICAgICAgIEFTU0VSVChr
ZXkpOwogICAgICAgICBpZiAoaXNNdWx0aVBhcnRGb3JtKSB7CiAgICAgICAgICAgICBWZWN0b3I8
Y2hhcj4gaGVhZGVyOwotICAgICAgICAgICAgZm9ybURhdGFCdWlsZGVyLmJlZ2luTXVsdGlQYXJ0
SGVhZGVyKGhlYWRlciwgbV9ib3VuZGFyeS5kYXRhKCksIGtleS5kYXRhKCkpOworICAgICAgICAg
ICAgZm9ybURhdGFCdWlsZGVyLmJlZ2luTXVsdGlQYXJ0SGVhZGVyKGhlYWRlciwgbV9ib3VuZGFy
eS5kYXRhKCksIGtleS0+Y3N0cigpKTsKIAogICAgICAgICAgICAgYm9vbCBzaG91bGRHZW5lcmF0
ZUZpbGUgPSBmYWxzZTsKICAgICAgICAgICAgIC8vIElmIHRoZSBjdXJyZW50IHR5cGUgaXMgRklM
RSwgdGhlbiB3ZSBhbHNvIG5lZWQgdG8gaW5jbHVkZSB0aGUgZmlsZW5hbWUKLSAgICAgICAgICAg
IGlmICh2YWx1ZS5ibG9iKCkpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHBhdGgg
PSB2YWx1ZS5ibG9iKCktPnBhdGgoKTsKLSNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAgICAgICAg
ICAgICAgICBTdHJpbmcgZmlsZU5hbWU7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmJsb2Io
KS0+aXNGaWxlKCkpCi0gICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lID0gc3RhdGljX2Nhc3Q8
RmlsZSo+KHZhbHVlLmJsb2IoKSktPmZpbGVOYW1lKCk7Ci0gICAgICAgICAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgIC8vIElmIGEgYmxvYiBpcyBzbGljZWQgZnJvbSBhIGZpbGUs
IGl0IGRvZXMgbm90IGhhdmUgdGhlIGZpbGVuYW1lLiBJbiB0aGlzIGNhc2UsIGxldCdzIHByb2R1
Y2UgYSB1bmlxdWUgZmlsZW5hbWUuCi0gICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lID0gIkJs
b2IiICsgY3JlYXRlQ2Fub25pY2FsVVVJRFN0cmluZygpOwotICAgICAgICAgICAgICAgICAgICBm
aWxlTmFtZS5yZXBsYWNlKCItIiwgIiIpOyAvLyBGb3Igc2FmdHksIHJlbW92ZSAnLScgZnJvbSB0
aGUgZmlsZW5hbWUgc25jZSBzb21lIHNlcnZlcnMgbWF5IG5vdCBsaWtlIGl0LgotICAgICAgICAg
ICAgICAgIH0KLSNlbHNlCi0gICAgICAgICAgICAgICAgQVNTRVJUKHZhbHVlLmJsb2IoKS0+aXNG
aWxlKCkpOwotICAgICAgICAgICAgICAgIFN0cmluZyBmaWxlTmFtZSA9IHN0YXRpY19jYXN0PEZp
bGUqPih2YWx1ZS5ibG9iKCkpLT5maWxlTmFtZSgpOwotI2VuZGlmCisgICAgICAgICAgICBjb25z
dCBGaWxlQmxvYkl0ZW0qIGZpbGVJdGVtID0gdmFsdWUtPnRvRmlsZUJsb2JJdGVtKCk7CisgICAg
ICAgICAgICBpZiAoZmlsZUl0ZW0pIHsKKyAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHBh
dGggPSBmaWxlSXRlbS0+cGF0aCgpOworICAgICAgICAgICAgICAgIFN0cmluZyBmaWxlTmFtZSA9
IGZpbGVJdGVtLT5uYW1lKCk7CiAKICAgICAgICAgICAgICAgICAvLyBMZXQgdGhlIGFwcGxpY2F0
aW9uIHNwZWNpZnkgYSBmaWxlbmFtZSBpZiBpdCdzIGdvaW5nIHRvIGdlbmVyYXRlIGEgcmVwbGFj
ZW1lbnQgZmlsZSBmb3IgdGhlIHVwbG9hZC4KICAgICAgICAgICAgICAgICBpZiAoIXBhdGguaXNF
bXB0eSgpKSB7CkBAIC0yMTcsOSArMjQwLDkgQEAgdm9pZCBGb3JtRGF0YTo6YXBwZW5kRE9NRm9y
bURhdGEoY29uc3QgRE9NRm9ybURhdGEmIGRvbUZvcm1EYXRhLCBib29sIGlzTXVsdGlQYXIKICAg
ICAgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIGluY2x1ZGUgdGhlIGZpbGVuYW1lPSIuLiIgcGFy
dCBpbiB0aGUgaGVhZGVyLCBldmVuIGlmIHRoZSBmaWxlbmFtZSBpcyBlbXB0eQogICAgICAgICAg
ICAgICAgIGZvcm1EYXRhQnVpbGRlci5hZGRGaWxlbmFtZVRvTXVsdGlQYXJ0SGVhZGVyKGhlYWRl
ciwgZW5jb2RpbmcsIGZpbGVOYW1lKTsKIAotICAgICAgICAgICAgICAgIC8vIElmIGEgYmxvYiBp
cyBzbGljZWQgZnJvbSBhIGZpbGUsIGRvIG5vdCBhZGQgdGhlIGNvbnRlbnQgdHlwZS4gCisgICAg
ICAgICAgICAgICAgLy8gSWYgdGhlIGl0ZW0gaXMgc2xpY2VkIGZyb20gYSBmaWxlLCBkbyBub3Qg
YWRkIHRoZSBjb250ZW50IHR5cGUuCiAjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgICAgICAg
ICAgICAgaWYgKCFmaWxlTmFtZS5pc0VtcHR5KCkgJiYgdmFsdWUuYmxvYigpLT5pc0ZpbGUoKSkg
eworICAgICAgICAgICAgICAgIGlmICghZmlsZU5hbWUuaXNFbXB0eSgpICYmICF2YWx1ZS0+dG9G
aWxlUmFuZ2VCbG9iSXRlbSgpKSB7CiAjZWxzZQogICAgICAgICAgICAgICAgIGlmICghZmlsZU5h
bWUuaXNFbXB0eSgpKSB7CiAjZW5kaWYKQEAgLTIzNywyNSArMjYwLDIwIEBAIHZvaWQgRm9ybURh
dGE6OmFwcGVuZERPTUZvcm1EYXRhKGNvbnN0IERPTUZvcm1EYXRhJiBkb21Gb3JtRGF0YSwgYm9v
bCBpc011bHRpUGFyCiAKICAgICAgICAgICAgIC8vIEFwcGVuZCBib2R5CiAgICAgICAgICAgICBh
cHBlbmREYXRhKGhlYWRlci5kYXRhKCksIGhlYWRlci5zaXplKCkpOwotICAgICAgICAgICAgaWYg
KHNpemVfdCBkYXRhU2l6ZSA9IHZhbHVlLmRhdGEoKS5sZW5ndGgoKSkKLSAgICAgICAgICAgICAg
ICBhcHBlbmREYXRhKHZhbHVlLmRhdGEoKS5kYXRhKCksIGRhdGFTaXplKTsKLSAgICAgICAgICAg
IGVsc2UgaWYgKHZhbHVlLmJsb2IoKSAmJiAhdmFsdWUuYmxvYigpLT5wYXRoKCkuaXNFbXB0eSgp
KQotI2lmIEVOQUJMRShCTE9CX1NMSUNFKQotICAgICAgICAgICAgICAgIGFwcGVuZEZpbGVSYW5n
ZSh2YWx1ZS5ibG9iKCktPnBhdGgoKSwgdmFsdWUuYmxvYigpLT5zdGFydCgpLCB2YWx1ZS5ibG9i
KCktPmxlbmd0aCgpLCB2YWx1ZS5ibG9iKCktPm1vZGlmaWNhdGlvblRpbWUoKSwgc2hvdWxkR2Vu
ZXJhdGVGaWxlKTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgYXBwZW5kRmlsZSh2YWx1ZS5ibG9i
KCktPnBhdGgoKSwgc2hvdWxkR2VuZXJhdGVGaWxlKTsKLSNlbmRpZgotCisgICAgICAgICAgICBh
cHBlbmRJdGVtKHZhbHVlLCBzaG91bGRHZW5lcmF0ZUZpbGUpOwogICAgICAgICAgICAgYXBwZW5k
RGF0YSgiXHJcbiIsIDIpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gT21pdCB0
aGUgbmFtZSAiaXNpbmRleCIgaWYgaXQncyB0aGUgZmlyc3QgZm9ybSBkYXRhIGVsZW1lbnQuCiAg
ICAgICAgICAgICAvLyBGSVhNRTogV2h5IGlzIHRoaXMgYSBnb29kIHJ1bGU/IElzIHRoaXMgb2Jz
b2xldGUgbm93PwotICAgICAgICAgICAgaWYgKGVuY29kZWREYXRhLmlzRW1wdHkoKSAmJiBrZXku
ZGF0YSgpID09ICJpc2luZGV4IikKLSAgICAgICAgICAgICAgICBGb3JtRGF0YUJ1aWxkZXI6OmVu
Y29kZVN0cmluZ0FzRm9ybURhdGEoZW5jb2RlZERhdGEsIHZhbHVlLmRhdGEoKSk7CisgICAgICAg
ICAgICBjb25zdCBTdHJpbmdCbG9iSXRlbSogc3RyaW5nVmFsdWUgPSB2YWx1ZS0+dG9TdHJpbmdC
bG9iSXRlbSgpOworICAgICAgICAgICAgaWYgKCFzdHJpbmdWYWx1ZSkKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChlbmNvZGVkRGF0YS5pc0VtcHR5KCkgJiYga2V5
LT5jc3RyKCkgPT0gImlzaW5kZXgiKQorICAgICAgICAgICAgICAgIEZvcm1EYXRhQnVpbGRlcjo6
ZW5jb2RlU3RyaW5nQXNGb3JtRGF0YShlbmNvZGVkRGF0YSwgc3RyaW5nVmFsdWUtPmNzdHIoKSk7
CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZm9ybURhdGFCdWlsZGVyLmFkZEtl
eVZhbHVlUGFpckFzRm9ybURhdGEoZW5jb2RlZERhdGEsIGtleS5kYXRhKCksIHZhbHVlLmRhdGEo
KSk7CisgICAgICAgICAgICAgICAgZm9ybURhdGFCdWlsZGVyLmFkZEtleVZhbHVlUGFpckFzRm9y
bURhdGEoZW5jb2RlZERhdGEsIGtleS0+Y3N0cigpLCBzdHJpbmdWYWx1ZS0+Y3N0cigpKTsKICAg
ICAgICAgfQotICAgIH0gCisgICAgfQogCiAgICAgaWYgKGlzTXVsdGlQYXJ0Rm9ybSkKICAgICAg
ICAgZm9ybURhdGFCdWlsZGVyLmFkZEJvdW5kYXJ5VG9NdWx0aVBhcnRIZWFkZXIoZW5jb2RlZERh
dGEsIG1fYm91bmRhcnkuZGF0YSgpLCB0cnVlKTsKQEAgLTI3MCwxMiArMjg4LDggQEAgdm9pZCBG
b3JtRGF0YTo6ZmxhdHRlbihWZWN0b3I8Y2hhcj4mIGRhdGEpIGNvbnN0CiAgICAgc2l6ZV90IG4g
PSBtX2VsZW1lbnRzLnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG47ICsraSkg
ewogICAgICAgICBjb25zdCBGb3JtRGF0YUVsZW1lbnQmIGUgPSBtX2VsZW1lbnRzW2ldOwotICAg
ICAgICBpZiAoZS5tX3R5cGUgPT0gRm9ybURhdGFFbGVtZW50OjpkYXRhKSB7Ci0gICAgICAgICAg
ICBzaXplX3Qgb2xkU2l6ZSA9IGRhdGEuc2l6ZSgpOwotICAgICAgICAgICAgc2l6ZV90IGRlbHRh
ID0gZS5tX2RhdGEuc2l6ZSgpOwotICAgICAgICAgICAgZGF0YS5ncm93KG9sZFNpemUgKyBkZWx0
YSk7Ci0gICAgICAgICAgICBtZW1jcHkoZGF0YS5kYXRhKCkgKyBvbGRTaXplLCBlLm1fZGF0YS5k
YXRhKCksIGRlbHRhKTsKLSAgICAgICAgfQorICAgICAgICBpZiAoZS5tX3R5cGUgPT0gRm9ybURh
dGFFbGVtZW50OjpkYXRhKQorICAgICAgICAgICAgZGF0YS5hcHBlbmQoZS5tX2RhdGEuZGF0YSgp
LCBzdGF0aWNfY2FzdDxzaXplX3Q+KGUubV9kYXRhLnNpemUoKSkpOwogICAgIH0KIH0KIApAQCAt
Mjg5LDEwICszMDMsMTAgQEAgU3RyaW5nIEZvcm1EYXRhOjpmbGF0dGVuVG9TdHJpbmcoKSBjb25z
dAogdm9pZCBGb3JtRGF0YTo6Z2VuZXJhdGVGaWxlcyhEb2N1bWVudCogZG9jdW1lbnQpCiB7CiAg
ICAgQVNTRVJUKCFtX2hhc0dlbmVyYXRlZEZpbGVzKTsKLSAgICAKKwogICAgIGlmIChtX2hhc0dl
bmVyYXRlZEZpbGVzKQogICAgICAgICByZXR1cm47Ci0gICAgCisKICAgICBQYWdlKiBwYWdlID0g
ZG9jdW1lbnQtPnBhZ2UoKTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybjsKQEAgLTMx
Miw3ICszMjYsNyBAQCB2b2lkIEZvcm1EYXRhOjpyZW1vdmVHZW5lcmF0ZWRGaWxlc0lmTmVlZGVk
KCkKIHsKICAgICBpZiAoIW1faGFzR2VuZXJhdGVkRmlsZXMpCiAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgCisKICAgICBzaXplX3QgbiA9IG1fZWxlbWVudHMuc2l6ZSgpOwogICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbjsgKytpKSB7CiAgICAgICAgIEZvcm1EYXRhRWxlbWVudCYgZSA9IG1f
ZWxlbWVudHNbaV07CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURh
dGEuaCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5oCmluZGV4IGE0MzkwMjM0
Nzk2YTBlMmYxNGY1ZDM0OWY1ZGQwZWZmYzBhNGI3Y2QuLjk1ZWIyNTgyYjMzMWI2OGI5M2MzMmIx
NjYzNjk5ZTMyMTRjMTA1NjkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9G
b3JtRGF0YS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5oCkBAIC0y
NiwxMyArMjYsMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBET01Gb3JtRGF0
YTsKK2NsYXNzIEJsb2JJdGVtOwogY2xhc3MgRG9jdW1lbnQ7CitjbGFzcyBUZXh0RW5jb2Rpbmc7
Cit0eXBlZGVmIFZlY3RvcjxSZWZQdHI8QmxvYkl0ZW0+ID4gQmxvYkl0ZW1MaXN0OwogCiBjbGFz
cyBGb3JtRGF0YUVsZW1lbnQgewogcHVibGljOgogICAgIEZvcm1EYXRhRWxlbWVudCgpIDogbV90
eXBlKGRhdGEpIHsgfQogICAgIEZvcm1EYXRhRWxlbWVudChjb25zdCBWZWN0b3I8Y2hhcj4mIGFy
cmF5KSA6IG1fdHlwZShkYXRhKSwgbV9kYXRhKGFycmF5KSB7IH0KKwogI2lmIEVOQUJMRShCTE9C
X1NMSUNFKQogICAgIEZvcm1EYXRhRWxlbWVudChjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBsb25n
IGxvbmcgZmlsZVN0YXJ0LCBsb25nIGxvbmcgZmlsZUxlbmd0aCwgZG91YmxlIGV4cGVjdGVkRmls
ZU1vZGlmaWNhdGlvblRpbWUsIGJvb2wgc2hvdWxkR2VuZXJhdGVGaWxlKSA6IG1fdHlwZShlbmNv
ZGVkRmlsZSksIG1fZmlsZW5hbWUoZmlsZW5hbWUpLCBtX2ZpbGVTdGFydChmaWxlU3RhcnQpLCBt
X2ZpbGVMZW5ndGgoZmlsZUxlbmd0aCksIG1fZXhwZWN0ZWRGaWxlTW9kaWZpY2F0aW9uVGltZShl
eHBlY3RlZEZpbGVNb2RpZmljYXRpb25UaW1lKSwgbV9zaG91bGRHZW5lcmF0ZUZpbGUoc2hvdWxk
R2VuZXJhdGVGaWxlKSB7IH0KICNlbHNlCkBAIC00OSwxMyArNTIsMTggQEAgcHVibGljOgogI2Vu
ZGlmCiAgICAgU3RyaW5nIG1fZ2VuZXJhdGVkRmlsZW5hbWU7CiAgICAgYm9vbCBtX3Nob3VsZEdl
bmVyYXRlRmlsZTsKKworI2lmIEVOQUJMRShCTE9CX1NMSUNFKQorICAgIHN0YXRpYyBjb25zdCBs
b25nIGxvbmcgdG9FbmRPZkZpbGU7CisgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBkb05vdENoZWNr
RmlsZUNoYW5nZTsKKyNlbmRpZgogfTsKIAogaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBG
b3JtRGF0YUVsZW1lbnQmIGEsIGNvbnN0IEZvcm1EYXRhRWxlbWVudCYgYikKIHsKICAgICBpZiAo
JmEgPT0gJmIpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIAorCiAgICAgaWYgKGEubV90eXBl
ICE9IGIubV90eXBlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKGEubV9kYXRhICE9
IGIubV9kYXRhKQpAQCAtNjksMjUgKzc3LDI2IEBAIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29u
c3QgRm9ybURhdGFFbGVtZW50JiBhLCBjb25zdCBGb3JtRGF0YUVsZW1lbnQmIGIpCiAKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KLSAKKwogaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGb3JtRGF0
YUVsZW1lbnQmIGEsIGNvbnN0IEZvcm1EYXRhRWxlbWVudCYgYikKIHsKICAgICByZXR1cm4gIShh
ID09IGIpOwogfQotIAorCiBjbGFzcyBGb3JtRGF0YSA6IHB1YmxpYyBSZWZDb3VudGVkPEZvcm1E
YXRhPiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGNyZWF0ZSgp
OwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZvcm1EYXRhPiBjcmVhdGUoY29uc3Qgdm9pZCosIHNp
emVfdCk7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGNyZWF0ZShjb25zdCBXVEY6
OkNTdHJpbmcmKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxGb3JtRGF0YT4gY3JlYXRlKGNvbnN0
IFZlY3RvcjxjaGFyPiYpOwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZvcm1EYXRhPiBjcmVhdGUo
Y29uc3QgRE9NRm9ybURhdGEmKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxGb3JtRGF0YT4gY3Jl
YXRlTXVsdGlQYXJ0KGNvbnN0IERPTUZvcm1EYXRhJiwgRG9jdW1lbnQqKTsKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxGb3JtRGF0YT4gY3JlYXRlKGNvbnN0IEJsb2JJdGVtTGlzdCYsIGNvbnN0IFRl
eHRFbmNvZGluZyYpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZvcm1EYXRhPiBjcmVhdGVNdWx0
aVBhcnQoY29uc3QgQmxvYkl0ZW1MaXN0JiwgY29uc3QgVGV4dEVuY29kaW5nJiwgRG9jdW1lbnQq
KTsKICAgICBQYXNzUmVmUHRyPEZvcm1EYXRhPiBjb3B5KCkgY29uc3Q7CiAgICAgUGFzc1JlZlB0
cjxGb3JtRGF0YT4gZGVlcENvcHkoKSBjb25zdDsKICAgICB+Rm9ybURhdGEoKTsKLSAgICAKKwog
ICAgIHZvaWQgYXBwZW5kRGF0YShjb25zdCB2b2lkKiBkYXRhLCBzaXplX3QpOworICAgIHZvaWQg
YXBwZW5kSXRlbXMoY29uc3QgQmxvYkl0ZW1MaXN0Jik7CiAgICAgdm9pZCBhcHBlbmRGaWxlKGNv
bnN0IFN0cmluZyYgZmlsZW5hbWUsIGJvb2wgc2hvdWxkR2VuZXJhdGVGaWxlID0gZmFsc2UpOwog
I2lmIEVOQUJMRShCTE9CX1NMSUNFKQogICAgIHZvaWQgYXBwZW5kRmlsZVJhbmdlKGNvbnN0IFN0
cmluZyYgZmlsZW5hbWUsIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCwgZG91Ymxl
IGV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZSwgYm9vbCBzaG91bGRHZW5lcmF0ZUZpbGUgPSBmYWxz
ZSk7CkBAIC0xMTUsOSArMTI0LDExIEBAIHByaXZhdGU6CiAgICAgRm9ybURhdGEoKTsKICAgICBG
b3JtRGF0YShjb25zdCBGb3JtRGF0YSYpOwogCi0gICAgdm9pZCBhcHBlbmRET01Gb3JtRGF0YShj
b25zdCBET01Gb3JtRGF0YSYgZG9tRm9ybURhdGEsIGJvb2wgaXNNdWx0aVBhcnRGb3JtLCBEb2N1
bWVudCogZG9jdW1lbnQpOworICAgIHZvaWQgYXBwZW5kSXRlbShjb25zdCBCbG9iSXRlbSosIGJv
b2wgc2hvdWxkR2VuZXJhdGVGaWxlKTsKKyAgICB2b2lkIGFwcGVuZEtleVZhbHVlUGFpckl0ZW1z
KGNvbnN0IEJsb2JJdGVtTGlzdCYsIGNvbnN0IFRleHRFbmNvZGluZyYsIGJvb2wgaXNNdWx0aVBh
cnRGb3JtLCBEb2N1bWVudCopOwogCiAgICAgVmVjdG9yPEZvcm1EYXRhRWxlbWVudD4gbV9lbGVt
ZW50czsKKwogICAgIGludDY0X3QgbV9pZGVudGlmaWVyOwogICAgIGJvb2wgbV9oYXNHZW5lcmF0
ZWRGaWxlczsKICAgICBib29sIG1fYWx3YXlzU3RyZWFtOwpAQCAtMTMxLDcgKzE0Miw3IEBAIGlu
bGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9ybURhdGEmIGEsIGNvbnN0IEZvcm1EYXRhJiBi
KQogCiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZvcm1EYXRhJiBhLCBjb25zdCBGb3Jt
RGF0YSYgYikKIHsKLSAgICByZXR1cm4gYS5lbGVtZW50cygpICE9IGIuZWxlbWVudHMoKTsKKyAg
ICByZXR1cm4gIShhID09IGIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL0Zvcm1EYXRhU3RyZWFtTWFjLm1tIGIv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9Gb3JtRGF0YVN0cmVhbU1hYy5tbQppbmRleCAy
N2VjZmQwOGFkNWFhYWI4NzU2ZmE1OTZkOTk2YmQyZjZlYzVkMDNmLi5kYjJlMTNiMDQ1YzMyZDlj
YjRlZTZkY2I3YWFjY2IyYTg0MDc4NGJmIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvbWFjL0Zvcm1EYXRhU3RyZWFtTWFjLm1tCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9tYWMvRm9ybURhdGFTdHJlYW1NYWMubW0KQEAgLTMxLDcgKzMxLDYgQEAKICNpbXBvcnQg
ImNvbmZpZy5oIgogI2ltcG9ydCAiRm9ybURhdGFTdHJlYW1NYWMuaCIKIAotI2ltcG9ydCAiQmxv
Yi5oIgogI2ltcG9ydCAiRmlsZVN5c3RlbS5oIgogI2ltcG9ydCAiRm9ybURhdGEuaCIKICNpbXBv
cnQgIlJlc291cmNlSGFuZGxlLmgiCkBAIC0xNDIsNyArMTQxLDcgQEAgc3RhdGljIHZvaWQgY2xv
c2VDdXJyZW50U3RyZWFtKEZvcm1TdHJlYW1GaWVsZHMgKmZvcm0pCiAgICAgICAgIENGUmVsZWFz
ZShmb3JtLT5jdXJyZW50U3RyZWFtKTsKICAgICAgICAgZm9ybS0+Y3VycmVudFN0cmVhbSA9IE5V
TEw7CiAjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgICAgIGZvcm0tPmN1cnJlbnRTdHJlYW1S
YW5nZUxlbmd0aCA9IEJsb2I6OnRvRW5kT2ZGaWxlOworICAgICAgICBmb3JtLT5jdXJyZW50U3Ry
ZWFtUmFuZ2VMZW5ndGggPSBGb3JtRGF0YUVsZW1lbnQ6OnRvRW5kT2ZGaWxlOwogI2VuZGlmCiAg
ICAgfQogICAgIGlmIChmb3JtLT5jdXJyZW50RGF0YSkgewpAQCAtMTUxLDcgKzE1MCw3IEBAIHN0
YXRpYyB2b2lkIGNsb3NlQ3VycmVudFN0cmVhbShGb3JtU3RyZWFtRmllbGRzICpmb3JtKQogICAg
IH0KIH0KIAotLy8gUmV0dXJuIGZhbHNlIGlmIHdlIGNhbm5vdCBhZHZhbmNlIHRoZSBzdHJlYW0u
IEN1cnJlbnRseSB0aGUgb25seSBwb3NzaWJsZSBmYWlsdXJlIGlzIHRoYXQgdGhlIHVuZGVybHlp
bmcgZmlsZSBoYXMgYmVlbiBjaGFuZ2VkIHNpbmNlIEZpbGUuc2xpY2UuIAorLy8gUmV0dXJuIGZh
bHNlIGlmIHdlIGNhbm5vdCBhZHZhbmNlIHRoZSBzdHJlYW0uIEN1cnJlbnRseSB0aGUgb25seSBw
b3NzaWJsZSBmYWlsdXJlIGlzIHRoYXQgdGhlIHVuZGVybHlpbmcgZmlsZSBoYXMgYmVlbiByZW1v
dmVkIG9yIGNoYW5nZWQgc2luY2UgRmlsZS5zbGljZS4KIHN0YXRpYyBib29sIGFkdmFuY2VDdXJy
ZW50U3RyZWFtKEZvcm1TdHJlYW1GaWVsZHMqIGZvcm0pCiB7CiAgICAgY2xvc2VDdXJyZW50U3Ry
ZWFtKGZvcm0pOwpAQCAtMTYxLDYgKzE2MCw3IEBAIHN0YXRpYyBib29sIGFkdmFuY2VDdXJyZW50
U3RyZWFtKEZvcm1TdHJlYW1GaWVsZHMqIGZvcm0pCiAKICAgICAvLyBDcmVhdGUgdGhlIG5ldyBz
dHJlYW0uCiAgICAgRm9ybURhdGFFbGVtZW50JiBuZXh0SW5wdXQgPSBmb3JtLT5yZW1haW5pbmdF
bGVtZW50cy5sYXN0KCk7CisKICAgICBpZiAobmV4dElucHV0Lm1fdHlwZSA9PSBGb3JtRGF0YUVs
ZW1lbnQ6OmRhdGEpIHsKICAgICAgICAgc2l6ZV90IHNpemUgPSBuZXh0SW5wdXQubV9kYXRhLnNp
emUoKTsKICAgICAgICAgY2hhciogZGF0YSA9IG5leHRJbnB1dC5tX2RhdGEucmVsZWFzZUJ1ZmZl
cigpOwpAQCAtMTY5LDE3ICsxNjksMjAgQEAgc3RhdGljIGJvb2wgYWR2YW5jZUN1cnJlbnRTdHJl
YW0oRm9ybVN0cmVhbUZpZWxkcyogZm9ybSkKICAgICB9IGVsc2UgewogI2lmIEVOQUJMRShCTE9C
X1NMSUNFKQogICAgICAgICAvLyBDaGVjayBpZiB0aGUgZmlsZSBoYXMgYmVlbiBjaGFuZ2VkIG9y
IG5vdCBpZiByZXF1aXJlZC4KLSAgICAgICAgaWYgKG5leHRJbnB1dC5tX2V4cGVjdGVkRmlsZU1v
ZGlmaWNhdGlvblRpbWUgIT0gQmxvYjo6ZG9Ob3RDaGVja0ZpbGVDaGFuZ2UpIHsKKyAgICAgICAg
aWYgKG5leHRJbnB1dC5tX2V4cGVjdGVkRmlsZU1vZGlmaWNhdGlvblRpbWUgIT0gRm9ybURhdGFF
bGVtZW50Ojpkb05vdENoZWNrRmlsZUNoYW5nZSkgewogICAgICAgICAgICAgdGltZV90IGZpbGVN
b2RpZmljYXRpb25UaW1lOwogICAgICAgICAgICAgaWYgKCFnZXRGaWxlTW9kaWZpY2F0aW9uVGlt
ZShuZXh0SW5wdXQubV9maWxlbmFtZSwgZmlsZU1vZGlmaWNhdGlvblRpbWUpIHx8IGZpbGVNb2Rp
ZmljYXRpb25UaW1lICE9IHN0YXRpY19jYXN0PHRpbWVfdD4obmV4dElucHV0Lm1fZXhwZWN0ZWRG
aWxlTW9kaWZpY2F0aW9uVGltZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICB9CiAjZW5kaWYKLQogICAgICAgICBjb25zdCBTdHJpbmcmIHBhdGggPSBuZXh0SW5wdXQu
bV9zaG91bGRHZW5lcmF0ZUZpbGUgPyBuZXh0SW5wdXQubV9nZW5lcmF0ZWRGaWxlbmFtZSA6IG5l
eHRJbnB1dC5tX2ZpbGVuYW1lOwogICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGZpbGVu
YW1lKEFkb3B0Q0YsIHBhdGguY3JlYXRlQ0ZTdHJpbmcoKSk7CiAgICAgICAgIFJldGFpblB0cjxD
RlVSTFJlZj4gZmlsZVVSTChBZG9wdENGLCBDRlVSTENyZWF0ZVdpdGhGaWxlU3lzdGVtUGF0aCgw
LCBmaWxlbmFtZS5nZXQoKSwga0NGVVJMUE9TSVhQYXRoU3R5bGUsIEZBTFNFKSk7CiAgICAgICAg
IGZvcm0tPmN1cnJlbnRTdHJlYW0gPSBDRlJlYWRTdHJlYW1DcmVhdGVXaXRoRmlsZSgwLCBmaWxl
VVJMLmdldCgpKTsKKyAgICAgICAgaWYgKCFmb3JtLT5jdXJyZW50U3RyZWFtKSB7CisgICAgICAg
ICAgICAvLyBUaGUgZmlsZSBtdXN0IGhhdmUgYmVlbiByZW1vdmVkIG9yIGJlY29tZSB1bnJlYWRh
YmxlLgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CiAjaWYgRU5BQkxFKEJM
T0JfU0xJQ0UpCiAgICAgICAgIGlmIChuZXh0SW5wdXQubV9maWxlU3RhcnQgPiAwKSB7CiAgICAg
ICAgICAgICBDRk51bWJlclJlZiBwb3NpdGlvbiA9IENGTnVtYmVyQ3JlYXRlKDAsIGtDRk51bWJl
ckxvbmdMb25nVHlwZSwgJm5leHRJbnB1dC5tX2ZpbGVTdGFydCk7CkBAIC0yMjIsNyArMjI1LDcg
QEAgc3RhdGljIHZvaWQqIGZvcm1DcmVhdGUoQ0ZSZWFkU3RyZWFtUmVmIHN0cmVhbSwgdm9pZCog
Y29udGV4dCkKICAgICBGb3JtU3RyZWFtRmllbGRzKiBuZXdJbmZvID0gbmV3IEZvcm1TdHJlYW1G
aWVsZHM7CiAgICAgbmV3SW5mby0+Y3VycmVudFN0cmVhbSA9IE5VTEw7CiAjaWYgRU5BQkxFKEJM
T0JfU0xJQ0UpCi0gICAgbmV3SW5mby0+Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoID0gQmxvYjo6
dG9FbmRPZkZpbGU7CisgICAgbmV3SW5mby0+Y3VycmVudFN0cmVhbVJhbmdlTGVuZ3RoID0gRm9y
bURhdGFFbGVtZW50Ojp0b0VuZE9mRmlsZTsKICNlbmRpZgogICAgIG5ld0luZm8tPmN1cnJlbnRE
YXRhID0gMDsKICAgICBuZXdJbmZvLT5mb3JtU3RyZWFtID0gc3RyZWFtOyAvLyBEb24ndCByZXRh
aW4uIFRoYXQgd291bGQgY3JlYXRlIGEgcmVmZXJlbmNlIGN5Y2xlLgpAQCAtMjcwLDcgKzI3Myw3
IEBAIHN0YXRpYyBDRkluZGV4IGZvcm1SZWFkKENGUmVhZFN0cmVhbVJlZiBzdHJlYW0sIFVJbnQ4
KiBidWZmZXIsIENGSW5kZXggYnVmZmVyTGVuCiAgICAgd2hpbGUgKGZvcm0tPmN1cnJlbnRTdHJl
YW0pIHsKICAgICAgICAgQ0ZJbmRleCBieXRlc1RvUmVhZCA9IGJ1ZmZlckxlbmd0aDsKICNpZiBF
TkFCTEUoQkxPQl9TTElDRSkKLSAgICAgICAgaWYgKGZvcm0tPmN1cnJlbnRTdHJlYW1SYW5nZUxl
bmd0aCAhPSBCbG9iOjp0b0VuZE9mRmlsZSAmJiBmb3JtLT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5n
dGggPCBieXRlc1RvUmVhZCkKKyAgICAgICAgaWYgKGZvcm0tPmN1cnJlbnRTdHJlYW1SYW5nZUxl
bmd0aCAhPSBGb3JtRGF0YUVsZW1lbnQ6OnRvRW5kT2ZGaWxlICYmIGZvcm0tPmN1cnJlbnRTdHJl
YW1SYW5nZUxlbmd0aCA8IGJ5dGVzVG9SZWFkKQogICAgICAgICAgICAgYnl0ZXNUb1JlYWQgPSBz
dGF0aWNfY2FzdDxDRkluZGV4Pihmb3JtLT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5ndGgpOwogI2Vu
ZGlmCiAgICAgICAgIENGSW5kZXggYnl0ZXNSZWFkID0gQ0ZSZWFkU3RyZWFtUmVhZChmb3JtLT5j
dXJyZW50U3RyZWFtLCBidWZmZXIsIGJ5dGVzVG9SZWFkKTsKQEAgLTI4Myw3ICsyODYsNyBAQCBz
dGF0aWMgQ0ZJbmRleCBmb3JtUmVhZChDRlJlYWRTdHJlYW1SZWYgc3RyZWFtLCBVSW50OCogYnVm
ZmVyLCBDRkluZGV4IGJ1ZmZlckxlbgogICAgICAgICAgICAgKmF0RU9GID0gRkFMU0U7CiAgICAg
ICAgICAgICBmb3JtLT5ieXRlc1NlbnQgKz0gYnl0ZXNSZWFkOwogI2lmIEVOQUJMRShCTE9CX1NM
SUNFKQotICAgICAgICAgICAgaWYgKGZvcm0tPmN1cnJlbnRTdHJlYW1SYW5nZUxlbmd0aCAhPSBC
bG9iOjp0b0VuZE9mRmlsZSkKKyAgICAgICAgICAgIGlmIChmb3JtLT5jdXJyZW50U3RyZWFtUmFu
Z2VMZW5ndGggIT0gRm9ybURhdGFFbGVtZW50Ojp0b0VuZE9mRmlsZSkKICAgICAgICAgICAgICAg
ICBmb3JtLT5jdXJyZW50U3RyZWFtUmFuZ2VMZW5ndGggLT0gYnl0ZXNSZWFkOwogI2VuZGlmCiAK
QEAgLTQwMCw3ICs0MDMsNyBAQCB2b2lkIHNldEhUVFBCb2R5KE5TTXV0YWJsZVVSTFJlcXVlc3Qg
KnJlcXVlc3QsIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGZvcm1EYXRhKQogICAgICAgICBlbHNlIHsK
ICNpZiBFTkFCTEUoQkxPQl9TTElDRSkKICAgICAgICAgICAgIC8vIElmIHdlJ3JlIHNlbmRpbmcg
dGhlIGZpbGUgcmFuZ2UsIHVzZSB0aGUgZXhpc3RpbmcgcmFuZ2UgbGVuZ3RoIGZvciBub3cuIFdl
IHdpbGwgZGV0ZWN0IGlmIHRoZSBmaWxlIGhhcyBiZWVuIGNoYW5nZWQgcmlnaHQgYmVmb3JlIHdl
IHJlYWQgdGhlIGZpbGUgYW5kIGFib3J0IHRoZSBvcGVyYXRpb24gaWYgbmVjZXNzYXJ5LgotICAg
ICAgICAgICAgaWYgKGVsZW1lbnQubV9maWxlTGVuZ3RoICE9IEJsb2I6OnRvRW5kT2ZGaWxlKSB7
CisgICAgICAgICAgICBpZiAoZWxlbWVudC5tX2ZpbGVMZW5ndGggIT0gRm9ybURhdGFFbGVtZW50
Ojp0b0VuZE9mRmlsZSkgewogICAgICAgICAgICAgICAgIGxlbmd0aCArPSBlbGVtZW50Lm1fZmls
ZUxlbmd0aDsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KZGlmZiAt
LWdpdCBhL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcCBiL1dlYkNvcmUveG1sL1hNTEh0
dHBSZXF1ZXN0LmNwcAppbmRleCA1Y2RlMjRkZTI5ZGI0NDIxMDAwMWEzMDIzMjQ0Y2E0Y2NkMjVj
ZmJiLi44MzFhZGE5ODExMjEzOTQyYTgwNDg2NGRhNTdmMGEzOWM0YmNjMjhlIDEwMDY0NAotLS0g
YS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKKysrIGIvV2ViQ29yZS94bWwvWE1MSHR0
cFJlcXVlc3QuY3BwCkBAIC00NzgsMTEgKzQ3OCw3IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OnNl
bmQoQmxvYiogYm9keSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgICAgIC8vIEZJWE1FOiBTaG91
bGQgd2Ugc2V0IGEgQ29udGVudC1UeXBlIGlmIG9uZSBpcyBub3Qgc2V0LgogICAgICAgICAvLyBG
SVhNRTogYWRkIHN1cHBvcnQgZm9yIHVwbG9hZGluZyBidW5kbGVzLgogICAgICAgICBtX3JlcXVl
c3RFbnRpdHlCb2R5ID0gRm9ybURhdGE6OmNyZWF0ZSgpOwotI2lmIEVOQUJMRShCTE9CX1NMSUNF
KQotICAgICAgICBtX3JlcXVlc3RFbnRpdHlCb2R5LT5hcHBlbmRGaWxlUmFuZ2UoYm9keS0+cGF0
aCgpLCBib2R5LT5zdGFydCgpLCBib2R5LT5sZW5ndGgoKSwgYm9keS0+bW9kaWZpY2F0aW9uVGlt
ZSgpKTsKLSNlbHNlCi0gICAgICAgIG1fcmVxdWVzdEVudGl0eUJvZHktPmFwcGVuZEZpbGUoYm9k
eS0+cGF0aCgpLCBmYWxzZSk7Ci0jZW5kaWYKKyAgICAgICAgbV9yZXF1ZXN0RW50aXR5Qm9keS0+
YXBwZW5kSXRlbXMoYm9keS0+aXRlbXMoKSk7CiAgICAgfQogCiAgICAgY3JlYXRlUmVxdWVzdChl
Yyk7CkBAIC00OTQsNyArNDkwLDcgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6c2VuZChET01Gb3Jt
RGF0YSogYm9keSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlm
IChtX21ldGhvZCAhPSAiR0VUIiAmJiBtX21ldGhvZCAhPSAiSEVBRCIgJiYgbV91cmwucHJvdG9j
b2xJbkhUVFBGYW1pbHkoKSkgewotICAgICAgICBtX3JlcXVlc3RFbnRpdHlCb2R5ID0gRm9ybURh
dGE6OmNyZWF0ZU11bHRpUGFydCgqYm9keSwgZG9jdW1lbnQoKSk7CisgICAgICAgIG1fcmVxdWVz
dEVudGl0eUJvZHkgPSBGb3JtRGF0YTo6Y3JlYXRlTXVsdGlQYXJ0KGJvZHktPml0ZW1zKCksIGJv
ZHktPmVuY29kaW5nKCksIGRvY3VtZW50KCkpOwogCiAgICAgICAgIC8vIFdlIG5lZWQgdG8gYXNr
IHRoZSBjbGllbnQgdG8gcHJvdmlkZSB0aGUgZ2VuZXJhdGVkIGZpbGUgbmFtZXMgaWYgbmVlZGVk
LiBXaGVuIEZvcm1EYXRhIGZpbGxzIHRoZSBlbGVtZW50CiAgICAgICAgIC8vIGZvciB0aGUgZmls
ZSwgaXQgY291bGQgc2V0IGEgZmxhZyB0byB1c2UgdGhlIGdlbmVyYXRlZCBmaWxlIG5hbWUsIGku
ZS4gYSBwYWNrYWdlIGZpbGUgb24gTWFjLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggMTk5MTFjOWYzZDIwZmMx
ZDZkMTM0NzgxZjYxZDM3NWYwMTM2MTE1MC4uM2U5MTdmYWU3YjRiYjhiMWVlNzI0NzZlYzdjNjkx
NmQ4NmMyYzA5MCAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTAtMDYtMDMgIEtp
bnVrbyBZYXN1ZGEgIDxraW51a29AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yIEZvcm1EYXRhIGFuZCBCbG9iIGZv
ciBiZXR0ZXIgc3VwcG9ydCBvZiBCbG9icyBzeW50aGVzaXplZCBieSBCbG9iQnVpbGRlci4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5MDgzCisKKyAg
ICAgICAgUmVwbGFjZSBGb3JtRGF0YUxpc3Q6Okl0ZW0gbGlzdCB3aXRoIEJsb2JJdGVtTGlzdCB0
byBnZXQgaXQgY29tcGlsZWQKKyAgICAgICAgd2l0aCB0aGUgcmVmYWN0b3JpbmcgaW4gRm9ybURh
dGFMaXN0LgorCisgICAgICAgICogc3JjL1dlYlNlYXJjaGFibGVGb3JtRGF0YS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIYXNTdWl0YWJsZVRleHRFbGVtZW50KToKKwogMjAxMC0wNi0wNCAgUGF2
ZWwgUG9kaXZpbG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBZdXJ5IFNlbWlraGF0c2t5LgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJTZWFyY2hhYmxlRm9ybURhdGEuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZWFyY2hh
YmxlRm9ybURhdGEuY3BwCmluZGV4IDYwMWE0OTczODJkMDhmYmM4ZjBkODUxNmYwZjNhYWI5NTUw
MjFmMTkuLjE0ZWNlMTMzYWVhZGI1Y2M2Mjg2YzBlM2E2ODgyN2IwNTAzNjdlYjQgMTAwNjQ0Ci0t
LSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2VhcmNoYWJsZUZvcm1EYXRhLmNwcAorKysgYi9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNlYXJjaGFibGVGb3JtRGF0YS5jcHAKQEAgLTE4Nyw4ICsx
ODcsOCBAQCBib29sIEhhc1N1aXRhYmxlVGV4dEVsZW1lbnQoY29uc3QgSFRNTEZvcm1FbGVtZW50
KiBmb3JtLCBWZWN0b3I8Y2hhcj4qIGVuY29kZWRTdAogICAgICAgaWYgKCFmb3JtRWxlbWVudC0+
YXBwZW5kRm9ybURhdGEoZGF0YUxpc3QsIGZhbHNlKSkKICAgICAgICAgICBjb250aW51ZTsKIAot
ICAgICAgY29uc3QgVmVjdG9yPEZvcm1EYXRhTGlzdDo6SXRlbT4mIGl0ZW1MaXN0ID0gZGF0YUxp
c3QubGlzdCgpOwotICAgICAgaWYgKGlzVGV4dEVsZW1lbnQgJiYgIWl0ZW1MaXN0LmlzRW1wdHko
KSkgeworICAgICAgY29uc3QgQmxvYkl0ZW1MaXN0JiBpdGVtcyA9IGRhdGFMaXN0Lml0ZW1zKCk7
CisgICAgICBpZiAoaXNUZXh0RWxlbWVudCAmJiAhaXRlbXMuaXNFbXB0eSgpKSB7CiAgICAgICAg
ICAgaWYgKHRleHRFbGVtZW50KSB7CiAgICAgICAgICAgICAgIC8vIFRoZSBhdXRvLWNvbXBsZXRl
IGJhciBvbmx5IGtub3dzIGhvdyB0byBmaWxsIGluIG9uZSB2YWx1ZS4KICAgICAgICAgICAgICAg
Ly8gVGhpcyBmb3JtIGhhcyBtdWx0aXBsZSBmaWVsZHM7IGRvbid0IHRyZWF0IGl0IGFzIHNlYXJj
aGFibGUuCkBAIC0xOTYsMjAgKzE5NiwyMiBAQCBib29sIEhhc1N1aXRhYmxlVGV4dEVsZW1lbnQo
Y29uc3QgSFRNTEZvcm1FbGVtZW50KiBmb3JtLCBWZWN0b3I8Y2hhcj4qIGVuY29kZWRTdAogICAg
ICAgICAgIH0KICAgICAgICAgICB0ZXh0RWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVs
ZW1lbnQqPihmb3JtRWxlbWVudCk7CiAgICAgICB9Ci0gICAgICBmb3IgKFZlY3RvcjxGb3JtRGF0
YUxpc3Q6Okl0ZW0+Ojpjb25zdF9pdGVyYXRvciBqKGl0ZW1MaXN0LmJlZ2luKCkpOyBqICE9IGl0
ZW1MaXN0LmVuZCgpOyArK2opIHsKKyAgICAgIGZvciAoQmxvYkl0ZW1MaXN0Ojpjb25zdF9pdGVy
YXRvciBqKGl0ZW1zLmJlZ2luKCkpOyBqICE9IGl0ZW1zLmVuZCgpOyArK2opIHsKKyAgICAgICAg
ICBjb25zdCBTdHJpbmdCbG9iSXRlbSogaXRlbSA9ICgqaiktPnRvU3RyaW5nQmxvYkl0ZW0oKTsK
KyAgICAgICAgICBBU1NFUlQoaXRlbSk7CiAgICAgICAgICAgLy8gSGFuZGxlIElTSU5ERVggLyA8
aW5wdXQgbmFtZT1pc2luZGV4PiBzcGVjaWFsbHksIGJ1dCBvbmx5IGlmIGl0J3MKICAgICAgICAg
ICAvLyB0aGUgZmlyc3QgZW50cnkuCi0gICAgICAgICAgaWYgKCFlbmNvZGVkU3RyaW5nLT5pc0Vt
cHR5KCkgfHwgai0+ZGF0YSgpICE9ICJpc2luZGV4IikgeworICAgICAgICAgIGlmICghZW5jb2Rl
ZFN0cmluZy0+aXNFbXB0eSgpIHx8IGl0ZW0tPmNzdHIoKSAhPSAiaXNpbmRleCIpIHsKICAgICAg
ICAgICAgICAgaWYgKCFlbmNvZGVkU3RyaW5nLT5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAg
ICBlbmNvZGVkU3RyaW5nLT5hcHBlbmQoJyYnKTsKLSAgICAgICAgICAgICAgRm9ybURhdGFCdWls
ZGVyOjplbmNvZGVTdHJpbmdBc0Zvcm1EYXRhKCplbmNvZGVkU3RyaW5nLCBqLT5kYXRhKCkpOwor
ICAgICAgICAgICAgICBGb3JtRGF0YUJ1aWxkZXI6OmVuY29kZVN0cmluZ0FzRm9ybURhdGEoKmVu
Y29kZWRTdHJpbmcsIGl0ZW0tPmNzdHIoKSk7CiAgICAgICAgICAgICAgIGVuY29kZWRTdHJpbmct
PmFwcGVuZCgnPScpOwogICAgICAgICAgIH0KICAgICAgICAgICArK2o7CiAgICAgICAgICAgaWYg
KGZvcm1FbGVtZW50ID09IHRleHRFbGVtZW50KQogICAgICAgICAgICAgICBlbmNvZGVkU3RyaW5n
LT5hcHBlbmQoIntzZWFyY2hUZXJtc30iLCAxMyk7CiAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICBGb3JtRGF0YUJ1aWxkZXI6OmVuY29kZVN0cmluZ0FzRm9ybURhdGEoKmVuY29kZWRTdHJp
bmcsIGotPmRhdGEoKSk7CisgICAgICAgICAgICAgIEZvcm1EYXRhQnVpbGRlcjo6ZW5jb2RlU3Ry
aW5nQXNGb3JtRGF0YSgqZW5jb2RlZFN0cmluZywgaXRlbS0+Y3N0cigpKTsKICAgICAgIH0KICAg
ICB9CiAK
</data>
<flag name="review"
          id="42646"
          type_id="1"
          status="+"
          setter="jianli"
    />
          </attachment>
      

    </bug>

</bugzilla>