<?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>108851</bug_id>
          
          <creation_ts>2013-02-04 13:03:07 -0800</creation_ts>
          <short_desc>FileSystem mods: Changes to snapshot file creation to reduce dependencies on blobs.</short_desc>
          <delta_ts>2013-03-13 17:03:49 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>108736</dependson>
          <blocked>108733</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Nordman">michaeln</reporter>
          <assigned_to name="Michael Nordman">michaeln</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>dglazkov</cc>
    
    <cc>fishd</cc>
    
    <cc>kinuko</cc>
    
    <cc>levin+threading</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>824674</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2013-02-04 13:03:07 -0800</bug_when>
    <thetext>New methods have been declared in the chromium WebKit API for snapfile file creation. Need to patch webcore/webkit to use those new methods.

This patch is the 3rd in a series of changes that straddle webkit vs chromium repositories.

1) WK: Declare new virtual createSnapshotFile/didCreateSnapshotFile public api methods.
    done in: https://bugs.webkit.org/show_bug.cgi?id=108736
2) CR: Implement the new create method such that the didCreate method is invoked in response.
    done in: https://codereview.chromium.org/12084077/
3) WK: Use the new create method and implement the new didCreate method.
3) CR: Cleanup the obsolete/deprecated blocks of code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824773</commentid>
    <comment_count>1</comment_count>
      <attachid>186463</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2013-02-04 14:39:26 -0800</bug_when>
    <thetext>Created attachment 186463
impl of new api

will have to wait for https://codereview.chromium.org/12084077/ to land in chromium svn</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824785</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-04 14:49:23 -0800</bug_when>
    <thetext>Attachment 186463 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/Modules/filesystem/DOMFileSystem.cpp&apos;, u&apos;Source/WebCore/Modules/filesystem/DOMFileSystemSync.cpp&apos;, u&apos;Source/WebCore/platform/AsyncFileSystemCallbacks.h&apos;, u&apos;Source/WebCore/platform/gtk/AsyncFileSystemGtk.cpp&apos;, u&apos;Source/WebCore/platform/network/BlobData.cpp&apos;, u&apos;Source/WebCore/platform/network/BlobData.h&apos;, u&apos;Source/WebKit/chromium/ChangeLog&apos;, u&apos;Source/WebKit/chromium/src/AsyncFileSystemChromium.cpp&apos;, u&apos;Source/WebKit/chromium/src/AsyncFileSystemChromium.h&apos;, u&apos;Source/WebKit/chromium/src/LocalFileSystemChromium.cpp&apos;, u&apos;Source/WebKit/chromium/src/WebFileSystemCallbacksImpl.cpp&apos;, u&apos;Source/WebKit/chromium/src/WebFileSystemCallbacksImpl.h&apos;, u&apos;Source/WebKit/chromium/src/WorkerAsyncFileSystemChromium.cpp&apos;, u&apos;Source/WebKit/chromium/src/WorkerFileSystemCallbacksBridge.cpp&apos;, u&apos;Source/WebKit/chromium/src/WorkerFileSystemCallbacksBridge.h&apos;]&quot; exit_code: 1
Source/WebKit/chromium/src/WebFileSystemCallbacksImpl.h:61:  The parameter name &quot;info&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/chromium/src/WebFileSystemCallbacksImpl.h:69:  The parameter name &quot;info&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/network/BlobData.h:217:  The parameter name &quot;data&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/chromium/src/WorkerFileSystemCallbacksBridge.cpp:310:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 4 in 15 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824796</commentid>
    <comment_count>3</comment_count>
      <attachid>186466</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2013-02-04 14:58:51 -0800</bug_when>
    <thetext>Created attachment 186466
impl of new api

fix some style lint things</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824799</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-04 15:02:07 -0800</bug_when>
    <thetext>Attachment 186466 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/Modules/filesystem/DOMFileSystem.cpp&apos;, u&apos;Source/WebCore/Modules/filesystem/DOMFileSystemSync.cpp&apos;, u&apos;Source/WebCore/platform/AsyncFileSystemCallbacks.h&apos;, u&apos;Source/WebCore/platform/gtk/AsyncFileSystemGtk.cpp&apos;, u&apos;Source/WebCore/platform/network/BlobData.cpp&apos;, u&apos;Source/WebCore/platform/network/BlobData.h&apos;, u&apos;Source/WebKit/chromium/ChangeLog&apos;, u&apos;Source/WebKit/chromium/src/AsyncFileSystemChromium.cpp&apos;, u&apos;Source/WebKit/chromium/src/AsyncFileSystemChromium.h&apos;, u&apos;Source/WebKit/chromium/src/LocalFileSystemChromium.cpp&apos;, u&apos;Source/WebKit/chromium/src/WebFileSystemCallbacksImpl.cpp&apos;, u&apos;Source/WebKit/chromium/src/WebFileSystemCallbacksImpl.h&apos;, u&apos;Source/WebKit/chromium/src/WorkerAsyncFileSystemChromium.cpp&apos;, u&apos;Source/WebKit/chromium/src/WorkerFileSystemCallbacksBridge.cpp&apos;, u&apos;Source/WebKit/chromium/src/WorkerFileSystemCallbacksBridge.h&apos;]&quot; exit_code: 1
Source/WebKit/chromium/src/WorkerFileSystemCallbacksBridge.cpp:310:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 1 in 15 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824809</commentid>
    <comment_count>5</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2013-02-04 15:14:16 -0800</bug_when>
    <thetext>&gt; Are you using a 4-space indent?  [whitespace/indent] [3]

If you were a person, instead of a mindless bot, you&apos;d see that I&apos;m making a slight modification to an existing line of code without altering its indentation :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825014</commentid>
    <comment_count>6</comment_count>
      <attachid>186466</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-02-04 18:53:38 -0800</bug_when>
    <thetext>Comment on attachment 186466
impl of new api

Attachment 186466 did not pass win-ews (win):
Output: http://queues.webkit.org/results/16375463</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825046</commentid>
    <comment_count>7</comment_count>
      <attachid>186466</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-04 19:46:37 -0800</bug_when>
    <thetext>Comment on attachment 186466
impl of new api

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

New failing tests:
fast/filesystem/file-writer-abort-depth.html
fast/filesystem/file-writer-empty-blob.html
fast/filesystem/file-from-file-entry.html
fast/filesystem/workers/file-writer-gc-blob.html
fast/filesystem/workers/file-from-file-entry-sync.html
fast/filesystem/file-writer-abort-continue.html
fast/filesystem/file-writer-abort.html
fast/filesystem/workers/file-writer-sync-write-overlapped.html
fast/filesystem/file-writer-truncate-extend.html
http/tests/websocket/tests/hybi/send-file-blob-fail.html
http/tests/inspector/filesystem/request-file-content.html
fast/filesystem/file-writer-events.html
fast/filesystem/file-writer-write-overlapped.html
fast/filesystem/workers/file-writer-events.html
fast/filesystem/file-metadata-after-write.html
fast/filesystem/workers/file-writer-empty-blob.html
fast/filesystem/simple-readonly-file-object.html
fast/filesystem/workers/file-writer-truncate-extend.html
fast/filesystem/workers/file-writer-write-overlapped.html
fast/filesystem/workers/file-writer-sync-truncate-extend.html
fast/filesystem/workers/file-from-file-entry.html
http/tests/websocket/tests/hybi/send-file-blob.html
fast/filesystem/file-writer-gc-blob.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825086</commentid>
    <comment_count>8</comment_count>
      <attachid>186466</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-04 20:54:00 -0800</bug_when>
    <thetext>Comment on attachment 186466
impl of new api

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

New failing tests:
fast/filesystem/file-writer-abort-depth.html
fast/filesystem/file-writer-empty-blob.html
fast/filesystem/file-from-file-entry.html
fast/filesystem/workers/file-writer-gc-blob.html
fast/filesystem/workers/file-from-file-entry-sync.html
fast/filesystem/file-writer-abort-continue.html
fast/filesystem/file-writer-abort.html
fast/filesystem/workers/file-writer-sync-write-overlapped.html
fast/filesystem/file-writer-truncate-extend.html
http/tests/websocket/tests/hybi/send-file-blob-fail.html
http/tests/inspector/filesystem/request-file-content.html
fast/filesystem/file-writer-events.html
fast/filesystem/file-writer-write-overlapped.html
fast/filesystem/workers/file-writer-events.html
fast/filesystem/file-metadata-after-write.html
fast/filesystem/workers/file-writer-empty-blob.html
fast/filesystem/simple-readonly-file-object.html
fast/filesystem/workers/file-writer-truncate-extend.html
fast/filesystem/workers/file-writer-write-overlapped.html
fast/filesystem/workers/file-writer-sync-truncate-extend.html
fast/filesystem/workers/file-from-file-entry.html
http/tests/websocket/tests/hybi/send-file-blob.html
fast/filesystem/file-writer-gc-blob.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825602</commentid>
    <comment_count>9</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2013-02-05 10:29:02 -0800</bug_when>
    <thetext>fyi, the chromium test failures are expected until https://codereview.chromium.org/12084077/ lands</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>835797</commentid>
    <comment_count>10</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-02-18 15:35:31 -0800</bug_when>
    <thetext>What is the status of this patch, does it need a reviewer? I&apos;m willing to look at general blob changes, but not at FileSystem ones.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837585</commentid>
    <comment_count>11</comment_count>
      <attachid>189344</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2013-02-20 11:13:12 -0800</bug_when>
    <thetext>Created attachment 189344
patch

same patch, reupped to run ews bots again</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837587</commentid>
    <comment_count>12</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2013-02-20 11:15:05 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; What is the status of this patch, does it need a reviewer? I&apos;m willing to look at general blob changes, but not at FileSystem ones.

It does need a reviewer, but it is not a general blob change, this is very specific to the FileSystem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837588</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-20 11:15:51 -0800</bug_when>
    <thetext>Attachment 189344 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/Modules/filesystem/DOMFileSystem.cpp&apos;, u&apos;Source/WebCore/Modules/filesystem/DOMFileSystemSync.cpp&apos;, u&apos;Source/WebCore/platform/AsyncFileSystemCallbacks.h&apos;, u&apos;Source/WebCore/platform/gtk/AsyncFileSystemGtk.cpp&apos;, u&apos;Source/WebCore/platform/network/BlobData.cpp&apos;, u&apos;Source/WebCore/platform/network/BlobData.h&apos;, u&apos;Source/WebKit/chromium/ChangeLog&apos;, u&apos;Source/WebKit/chromium/src/AsyncFileSystemChromium.cpp&apos;, u&apos;Source/WebKit/chromium/src/AsyncFileSystemChromium.h&apos;, u&apos;Source/WebKit/chromium/src/LocalFileSystemChromium.cpp&apos;, u&apos;Source/WebKit/chromium/src/WebFileSystemCallbacksImpl.cpp&apos;, u&apos;Source/WebKit/chromium/src/WebFileSystemCallbacksImpl.h&apos;, u&apos;Source/WebKit/chromium/src/WorkerAsyncFileSystemChromium.cpp&apos;, u&apos;Source/WebKit/chromium/src/WorkerFileSystemCallbacksBridge.cpp&apos;, u&apos;Source/WebKit/chromium/src/WorkerFileSystemCallbacksBridge.h&apos;]&quot; exit_code: 1
Source/WebKit/chromium/src/WorkerFileSystemCallbacksBridge.cpp:310:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 1 in 15 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837600</commentid>
    <comment_count>14</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2013-02-20 11:28:21 -0800</bug_when>
    <thetext>ap, not uploaded yet but here are the general blob changes i&apos;m working up to.

https://codereview.chromium.org/11192017/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837666</commentid>
    <comment_count>15</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2013-02-20 13:00:32 -0800</bug_when>
    <thetext>now that https://codereview.chromium.org/12084077/ is committed, tests are passing... so this is ready for a review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>850436</commentid>
    <comment_count>16</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2013-03-07 13:25:12 -0800</bug_when>
    <thetext>adam or darin, maybe one of you can take a look?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>852729</commentid>
    <comment_count>17</comment_count>
      <attachid>189344</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-03-11 14:32:31 -0700</bug_when>
    <thetext>Comment on attachment 189344
patch

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

&gt; Source/WebCore/ChangeLog:10
&gt; +        No new tests (OOPS!).

This line will stop your patch from being landed.  You should either add a test of an explanation of why this change doesn&apos;t need a test.

&gt; Source/WebCore/platform/network/BlobData.cpp:117
&gt; +BlobDataHandle::~BlobDataHandle()
&gt; +{
&gt; +    ThreadableBlobRegistry::unregisterBlobURL(m_internalURL);
&gt; +}

I take is that ThreadableBlobRegistry is safe to call on any thread.

&gt; Source/WebCore/platform/network/BlobData.h:218
&gt; +    KURL m_internalURL;

This object is ThreadSafeRefCounted but presumably KURL itself isn&apos;t actually thread safe.  What&apos;s the thread-safety story here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>852731</commentid>
    <comment_count>18</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-03-11 14:36:24 -0700</bug_when>
    <thetext>&gt; I take is that ThreadableBlobRegistry is safe to call on any thread.

Not quite. Registering and unregistering should be done on the same thread, because originMap() is ThreadSpecific.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>852760</commentid>
    <comment_count>19</comment_count>
      <attachid>189344</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2013-03-11 14:56:57 -0700</bug_when>
    <thetext>Comment on attachment 189344
patch

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

&gt;&gt; Source/WebCore/ChangeLog:10
&gt;&gt; +        No new tests (OOPS!).
&gt; 
&gt; This line will stop your patch from being landed.  You should either add a test of an explanation of why this change doesn&apos;t need a test.

Thnx, i&apos;ll explain that there is no change in content observable behavior.

&gt;&gt; Source/WebCore/platform/network/BlobData.cpp:117
&gt;&gt; +}
&gt; 
&gt; I take is that ThreadableBlobRegistry is safe to call on any thread.

Yes

&gt;&gt; Source/WebCore/platform/network/BlobData.h:218
&gt;&gt; +    KURL m_internalURL;
&gt; 
&gt; This object is ThreadSafeRefCounted but presumably KURL itself isn&apos;t actually thread safe.  What&apos;s the thread-safety story here?

That&apos;s right, I could invoke the ThreadableBlobRegistry with an copy, but under the covers ThreadableBlobRegistry/BlobRegistry are taking a copy if needed so it really isn&apos;t necessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>852766</commentid>
    <comment_count>20</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2013-03-11 15:01:28 -0700</bug_when>
    <thetext>&gt; Not quite. Registering and unregistering should be done on the same thread, because originMap() is ThreadSpecific.

The originMap only applies to public blob urls with &apos;null&apos; security contexts, these are internal urls used as identifiers, they&apos;re security context is not &apos;null&apos;. No entries is made in the originMap for them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>852894</commentid>
    <comment_count>21</comment_count>
      <attachid>192600</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2013-03-11 17:08:07 -0700</bug_when>
    <thetext>Created attachment 192600
impl of new api

patch for landing with  a new change log comment about no tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>852983</commentid>
    <comment_count>22</comment_count>
      <attachid>192600</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-11 18:53:44 -0700</bug_when>
    <thetext>Comment on attachment 192600
impl of new api

Rejecting attachment 192600 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-commit-queue.appspot.com&apos;, &apos;--bot-id=gce-cq-02&apos;, &apos;apply-attachment&apos;, &apos;--no-update&apos;, &apos;--non-interactive&apos;, 192600, &apos;--port=chromium-xvfb&apos;]&quot; exit_code: 2 cwd: /mnt/git/webkit-commit-queue

Last 500 characters of output:

patching file Source/WebKit/chromium/src/WorkerAsyncFileSystemChromium.cpp
patching file Source/WebKit/chromium/src/WorkerFileSystemCallbacksBridge.cpp
Hunk #1 FAILED at 33.
1 out of 7 hunks FAILED -- saving rejects to file Source/WebKit/chromium/src/WorkerFileSystemCallbacksBridge.cpp.rej
patching file Source/WebKit/chromium/src/WorkerFileSystemCallbacksBridge.h

Failed to run &quot;[u&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/svn-apply&apos;, &apos;--force&apos;]&quot; exit_code: 1 cwd: /mnt/git/webkit-commit-queue

Full output: http://webkit-commit-queue.appspot.com/results/17169369</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>852995</commentid>
    <comment_count>23</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2013-03-11 19:07:03 -0700</bug_when>
    <thetext>oh well... moving targets...
https://bugs.webkit.org/show_bug.cgi?id=112049
... files shuffling from from this public directory to some other one in preparation of some other moving around in the future. silly me trying to change the code, hopefully i&apos;ll be able to land something before it moves again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>853194</commentid>
    <comment_count>24</comment_count>
      <attachid>192600</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2013-03-12 01:45:43 -0700</bug_when>
    <thetext>Comment on attachment 192600
impl of new api

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

&gt; Source/WebCore/ChangeLog:5
&gt; +        patch, it&apos;s just enough to refactor the FileSystem code to not function in terms of blobURLs.

It&apos;s nicer to note why this refactoring is good in a simple sentence.

&gt; Source/WebCore/ChangeLog:8
&gt; +        Reviewed by NOBODY (OOPS!).

Nit: It looks like the common ChangeLog format is:

&gt; [Issue subject]
&gt; https://bugs.webkit.org/show_bug.cgi?id=108851
&gt; 
&gt; Reviewed by ...
&gt; 
&gt; [Detail/more info about the change.]
&gt;
&gt; [Test line]

&gt; Source/WebCore/platform/network/BlobData.h:206
&gt; +// https://codereview.chromium.org/11192017/.

Hmm, referring chromium review site from the common code may not make a lot sense. Can we make the &apos;FIXME&apos; point clearer (like: Do X when Y, X needs to be Y etc) and attach bugs.webkit.org URL instead so that this patch itself becomes slightly more complete?

&gt; Source/WebKit/chromium/src/WebFileSystemCallbacksImpl.h:67
&gt; +    // created on the main thread to an  AsyncFileSystemCallback on a background worker thread. The other

nit: extra space before AsyncFileSystemCallback</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>854580</commentid>
    <comment_count>25</comment_count>
      <attachid>192600</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2013-03-13 13:38:11 -0700</bug_when>
    <thetext>Comment on attachment 192600
impl of new api

thnx for looking

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

&gt;&gt; Source/WebCore/ChangeLog:5
&gt;&gt; +        patch, it&apos;s just enough to refactor the FileSystem code to not function in terms of blobURLs.
&gt; 
&gt; It&apos;s nicer to note why this refactoring is good in a simple sentence.

i thought i had, &apos;to reduce dependencies on blob URLs&apos;, is there other wording you&apos;d like to see?

&gt;&gt; Source/WebCore/ChangeLog:8
&gt;&gt; +        Reviewed by NOBODY (OOPS!).
&gt; 
&gt; Nit: It looks like the common ChangeLog format is:

i don&apos;t understand this comment? webkit-patch land will fill this in automagically

&gt;&gt; Source/WebCore/platform/network/BlobData.h:206
&gt;&gt; +// https://codereview.chromium.org/11192017/.
&gt; 
&gt; Hmm, referring chromium review site from the common code may not make a lot sense. Can we make the &apos;FIXME&apos; point clearer (like: Do X when Y, X needs to be Y etc) and attach bugs.webkit.org URL instead so that this patch itself becomes slightly more complete?

done. i&apos;ve put a pointer here to the umbrella bug in webkit, https://bugs.webkit.org/show_bug.cgi?id=108733, but also left the reference to the chromium CL. The chromium CL shows the actual changes to this class in light of the larger refactoring.

&gt;&gt; Source/WebKit/chromium/src/WebFileSystemCallbacksImpl.h:67
&gt;&gt; +    // created on the main thread to an  AsyncFileSystemCallback on a background worker thread. The other
&gt; 
&gt; nit: extra space before AsyncFileSystemCallback

done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>854697</commentid>
    <comment_count>26</comment_count>
      <attachid>193004</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2013-03-13 15:09:18 -0700</bug_when>
    <thetext>Created attachment 193004
impl of new api

merged and modified per kinuko&apos;s comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>854719</commentid>
    <comment_count>27</comment_count>
      <attachid>193004</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-13 15:32:21 -0700</bug_when>
    <thetext>Comment on attachment 193004
impl of new api

Rejecting attachment 193004 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-commit-queue.appspot.com&apos;, &apos;--bot-id=gce-cq-01&apos;, &apos;validate-changelog&apos;, &apos;--non-interactive&apos;, 193004, &apos;--port=chromium-xvfb&apos;]&quot; exit_code: 1 cwd: /mnt/git/webkit-commit-queue

/mnt/git/webkit-commit-queue/Source/WebCore/ChangeLog neither lists a valid reviewer nor contains the string &quot;Unreviewed&quot; or &quot;Rubber stamp&quot; (case insensitive).

Full output: http://webkit-commit-queue.appspot.com/results/17174204</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>854753</commentid>
    <comment_count>28</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2013-03-13 15:58:32 -0700</bug_when>
    <thetext>&gt; /mnt/git/webkit-commit-queue/Source/WebCore/ChangeLog neither lists a valid reviewer nor contains the string &quot;Unreviewed&quot; or &quot;Rubber stamp&quot; (case insensitive).

Ok, so now i better understand kinuko&apos;s comment, apparently the commit bot will not fill this in automagically (seems like it used to?)... prepping another patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>854763</commentid>
    <comment_count>29</comment_count>
      <attachid>193016</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2013-03-13 16:04:10 -0700</bug_when>
    <thetext>Created attachment 193016
impl of new api

changelog massaging</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>854797</commentid>
    <comment_count>30</comment_count>
      <attachid>193016</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-13 17:03:43 -0700</bug_when>
    <thetext>Comment on attachment 193016
impl of new api

Clearing flags on attachment: 193016

Committed r145771: &lt;http://trac.webkit.org/changeset/145771&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>854798</commentid>
    <comment_count>31</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-13 17:03:49 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186463</attachid>
            <date>2013-02-04 14:39:26 -0800</date>
            <delta_ts>2013-02-04 14:58:51 -0800</delta_ts>
            <desc>impl of new api</desc>
            <filename>impl.txt</filename>
            <type>text/plain</type>
            <size>32114</size>
            <attacher name="Michael Nordman">michaeln</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0MTc5NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBACisyMDEzLTAyLTA0ICBNaWNoYWVs
IE5vcmRtYW4gIDxtaWNoYWVsbkBnb29nbGUuY29tPgorCisgICAgICAgIEZpbGVTeXN0ZW0gbW9k
czogQ2hhbmdlcyB0byBzbmFwc2hvdCBmaWxlIGNyZWF0aW9uIHRvIHJlZHVjZSBkZXBlbmRlbmNp
ZXMgb24gYmxvYiBVUkxzLgorICAgICAgICBBZGRpbmcgYSBuZXcgbWluaW1hbCBCbG9iRGF0YUhh
bmRsZSBjbGFzcyB3aGljaCB3aWxsIGJlIHJlaW1wbGVtZW50ZWQvYnVpbHQgdXBvbiBpbiBsYXRl
ciBDTHMuIEluIHRoaXMKKyAgICAgICAgcGF0Y2gsIGl0J3MganVzdCBlbm91Z2ggdG8gcmVmYWN0
b3IgdGhlIEZpbGVTeXN0ZW0gY29kZSB0byBub3QgZnVuY3Rpb24gaW4gdGVybXMgb2YgYmxvYlVS
THMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDg4
NTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBu
ZXcgdGVzdHMgKE9PUFMhKS4KKworICAgICAgICAqIE1vZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxl
U3lzdGVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RE9NRmls
ZVN5c3RlbTo6Y3JlYXRlRmlsZSk6CisgICAgICAgICogTW9kdWxlcy9maWxlc3lzdGVtL0RPTUZp
bGVTeXN0ZW1TeW5jLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRmb3Jt
L0FzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcy5oOgorICAgICAgICAoQXN5bmNGaWxlU3lzdGVtQ2Fs
bGJhY2tzKToKKyAgICAgICAgKFdlYkNvcmU6OkFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrczo6ZGlk
Q3JlYXRlU25hcHNob3RGaWxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvQXN5bmNGaWxlU3lz
dGVtR3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFzeW5jRmlsZVN5c3RlbUd0azo6Y3JlYXRl
U25hcHNob3RGaWxlQW5kUmVhZE1ldGFkYXRhKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAqIHBsYXRmb3JtL25ldHdvcmsvQmxvYkRhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpCbG9iRGF0YUhhbmRsZTo6QmxvYkRhdGFIYW5kbGUpOgorICAgICAg
ICAoV2ViQ29yZTo6QmxvYkRhdGFIYW5kbGU6On5CbG9iRGF0YUhhbmRsZSk6CisgICAgICAgICog
cGxhdGZvcm0vbmV0d29yay9CbG9iRGF0YS5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChCbG9iRGF0YUhhbmRsZSk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iRGF0YUhhbmRsZTo6Y3Jl
YXRlKToKKwogMjAxMy0wMi0wNCAgRGltYSBHb3JiaWsgIDxkZ29yYmlrQGFwcGxlLmNvbT4KIAog
ICAgICAgICBJbXBsZW1ldCA6bGFuZygpIHBzZXVkbyBjbGFzcyBzdXBwb3J0IGZvciB0aGUgV2Vi
VlRUIDo6Y3VlIHBzZXVkbyBlbGVtZW50CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2Zp
bGVzeXN0ZW0vRE9NRmlsZVN5c3RlbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9maWxlc3lzdGVtL0RPTUZpbGVTeXN0ZW0uY3BwCShyZXZpc2lvbiAxNDE3OTEpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZpbGVzeXN0ZW0vRE9NRmlsZVN5c3RlbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE0OCwxOSArMTQ4LDI0IEBAIHZvaWQgRE9NRmlsZVN5c3RlbTo6Y3Jl
YXRlV3JpdGVyKGNvbnN0IEYKIAogbmFtZXNwYWNlIHsKIAotY2xhc3MgR2V0TWV0YWRhdGFDYWxs
YmFjayA6IHB1YmxpYyBGaWxlU3lzdGVtQ2FsbGJhY2tzQmFzZSB7CitjbGFzcyBTbmFwc2hvdEZp
bGVDYWxsYmFjayA6IHB1YmxpYyBGaWxlU3lzdGVtQ2FsbGJhY2tzQmFzZSB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFBhc3NPd25QdHI8R2V0TWV0YWRhdGFDYWxsYmFjaz4gY3JlYXRlKFBhc3NSZWZQ
dHI8RE9NRmlsZVN5c3RlbT4gZmlsZXN5c3RlbSwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBL
VVJMJiB1cmwsIFBhc3NSZWZQdHI8RmlsZUNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NS
ZWZQdHI8RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaykKKyAgICBzdGF0aWMgUGFzc093blB0
cjxTbmFwc2hvdEZpbGVDYWxsYmFjaz4gY3JlYXRlKFBhc3NSZWZQdHI8RE9NRmlsZVN5c3RlbT4g
ZmlsZXN5c3RlbSwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBLVVJMJiB1cmwsIFBhc3NSZWZQ
dHI8RmlsZUNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFj
az4gZXJyb3JDYWxsYmFjaykKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgR2V0
TWV0YWRhdGFDYWxsYmFjayhmaWxlc3lzdGVtLCBuYW1lLCB1cmwsIHN1Y2Nlc3NDYWxsYmFjaywg
ZXJyb3JDYWxsYmFjaykpOworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFNuYXBzaG90Rmls
ZUNhbGxiYWNrKGZpbGVzeXN0ZW0sIG5hbWUsIHVybCwgc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNh
bGxiYWNrKSk7CiAgICAgfQogCi0gICAgdmlydHVhbCB2b2lkIGRpZFJlYWRNZXRhZGF0YShjb25z
dCBGaWxlTWV0YWRhdGEmIG1ldGFkYXRhKQorICAgIHZpcnR1YWwgdm9pZCBkaWRDcmVhdGVTbmFw
c2hvdEZpbGUoY29uc3QgRmlsZU1ldGFkYXRhJiBtZXRhZGF0YSwgUGFzc1JlZlB0cjxCbG9iRGF0
YUhhbmRsZT4gc25hcHNob3QpCiAgICAgewogICAgICAgICBBU1NFUlQoIW1ldGFkYXRhLnBsYXRm
b3JtUGF0aC5pc0VtcHR5KCkpOwogICAgICAgICBpZiAoIW1fc3VjY2Vzc0NhbGxiYWNrKQogICAg
ICAgICAgICAgcmV0dXJuOwogCisgICAgICAgIC8vIFdlIGNhbid0IGRpcmVjdGx5IHVzZSB0aGUg
c25hcHNob3QgYmxvYiBkYXRhIGhhbmRsZSBiZWNhdXNlIHRoZSBjb250ZW50IHR5cGUgb24gaXQg
aGFzbid0IGJlZW4gc2V0LgorICAgICAgICAvLyBUaGUgfHNuYXBzaG90fCBwYXJhbSBpcyBoZXJl
IHRvIHByb3ZpZGUgYSBhIGNoYWluIG9mIGN1c3RvZHkgdGhydSB0aHJlYWQgYnJpZGdpbmcgdGhh
dCBpcyBoZWxkIG9udG8gdW50aWwKKyAgICAgICAgLy8gKmFmdGVyKiB3ZSd2ZSBjb2luZWQgYSBG
aWxlIHdpdGggYSBuZXcgaGFuZGxlIHRoYXQgaGFzIHRoZSBjb3JyZWN0IHR5cGUgc2V0IG9uIGl0
LiBUaGlzIGFsbG93cyB0aGUKKyAgICAgICAgLy8gYmxvYiBzdG9yYWdlIHN5c3RlbSB0byB0cmFj
ayB3aGVuIGEgdGVtcCBmaWxlIGNhbiBhbmQgY2FuJ3QgYmUgc2FmZWx5IGRlbGV0ZWQuCisKICAg
ICAgICAgLy8gRm9yIHJlZ3VsYXIgZmlsZXN5c3RlbSB0eXBlcyAodGVtcG9yYXJ5IG9yIHBlcnNp
c3RlbnQpLCB3ZSBzaG91bGQgbm90IGNhY2hlIGZpbGUgbWV0YWRhdGEgYXMgaXQgY291bGQgY2hh
bmdlIEZpbGUgc2VtYW50aWNzLgogICAgICAgICAvLyBGb3Igb3RoZXIgZmlsZXN5c3RlbSB0eXBl
cyAod2hpY2ggY291bGQgYmUgcGxhdGZvcm0tc3BlY2lmaWMgb25lcyksIHRoZXJlJ3MgYSBjaGFu
Y2UgdGhhdCB0aGUgZmlsZXMgYXJlIG9uIHJlbW90ZSBmaWxlc3lzdGVtLiBJZiB0aGUgcG9ydCBo
YXMgcmV0dXJuZWQgbWV0YWRhdGEganVzdCBwYXNzIGl0IHRvIEZpbGUgY29uc3RydWN0b3IgKHNv
IHdlIG1heSBjYWNoZSB0aGUgbWV0YWRhdGEpLgogICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IHVzZSB0aGUgc25hcHNob3QgbWV0YWRhdGEgZm9yIGFsbCBmaWxlcy4KQEAgLTE3OSw3ICsxODQs
NyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIEdldE1ldGFkYXRhQ2FsbGJhY2so
UGFzc1JlZlB0cjxET01GaWxlU3lzdGVtPiBmaWxlc3lzdGVtLCBjb25zdCBTdHJpbmcmIG5hbWUs
ICBjb25zdCBLVVJMJiB1cmwsIFBhc3NSZWZQdHI8RmlsZUNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJh
Y2ssIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaykKKyAgICBTbmFwc2hv
dEZpbGVDYWxsYmFjayhQYXNzUmVmUHRyPERPTUZpbGVTeXN0ZW0+IGZpbGVzeXN0ZW0sIGNvbnN0
IFN0cmluZyYgbmFtZSwgIGNvbnN0IEtVUkwmIHVybCwgUGFzc1JlZlB0cjxGaWxlQ2FsbGJhY2s+
IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNr
KQogICAgICAgICA6IEZpbGVTeXN0ZW1DYWxsYmFja3NCYXNlKGVycm9yQ2FsbGJhY2spCiAgICAg
ICAgICwgbV9maWxlc3lzdGVtKGZpbGVzeXN0ZW0pCiAgICAgICAgICwgbV9uYW1lKG5hbWUpCkBA
IC0xOTksNyArMjA0LDcgQEAgcHJpdmF0ZToKIHZvaWQgRE9NRmlsZVN5c3RlbTo6Y3JlYXRlRmls
ZShjb25zdCBGaWxlRW50cnkqIGZpbGVFbnRyeSwgUGFzc1JlZlB0cjxGaWxlQ2FsbGJhY2s+IHN1
Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrKQog
ewogICAgIEtVUkwgZmlsZVN5c3RlbVVSTCA9IGNyZWF0ZUZpbGVTeXN0ZW1VUkwoZmlsZUVudHJ5
KTsKLSAgICBtX2FzeW5jRmlsZVN5c3RlbS0+Y3JlYXRlU25hcHNob3RGaWxlQW5kUmVhZE1ldGFk
YXRhKGZpbGVTeXN0ZW1VUkwsIEdldE1ldGFkYXRhQ2FsbGJhY2s6OmNyZWF0ZSh0aGlzLCBmaWxl
RW50cnktPm5hbWUoKSwgZmlsZVN5c3RlbVVSTCwgc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxi
YWNrKSk7CisgICAgbV9hc3luY0ZpbGVTeXN0ZW0tPmNyZWF0ZVNuYXBzaG90RmlsZUFuZFJlYWRN
ZXRhZGF0YShmaWxlU3lzdGVtVVJMLCBTbmFwc2hvdEZpbGVDYWxsYmFjazo6Y3JlYXRlKHRoaXMs
IGZpbGVFbnRyeS0+bmFtZSgpLCBmaWxlU3lzdGVtVVJMLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9y
Q2FsbGJhY2spKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9maWxlc3lzdGVtL0RPTUZpbGVTeXN0ZW1TeW5jLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZpbGVzeXN0ZW0vRE9NRmlsZVN5c3RlbVN5bmMu
Y3BwCShyZXZpc2lvbiAxNDE3OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZpbGVzeXN0
ZW0vRE9NRmlsZVN5c3RlbVN5bmMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsMTAgKzExMywx
NiBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIHZvaWQgZGlkUmVhZE1ldGFkYXRhKGNv
bnN0IEZpbGVNZXRhZGF0YSYgbWV0YWRhdGEpCisgICAgdmlydHVhbCB2b2lkIGRpZENyZWF0ZVNu
YXBzaG90RmlsZShjb25zdCBGaWxlTWV0YWRhdGEmIG1ldGFkYXRhLCBQYXNzUmVmUHRyPEJsb2JE
YXRhSGFuZGxlPiBzbmFwc2hvdCkKICAgICB7CisgICAgICAgIC8vIFdlIGNhbid0IGRpcmVjdGx5
IHVzZSB0aGUgc25hcHNob3QgYmxvYiBkYXRhIGhhbmRsZSBiZWNhdXNlIHRoZSBjb250ZW50IHR5
cGUgb24gaXQgaGFzbid0IGJlZW4gc2V0LgorICAgICAgICAvLyBUaGUgfHNuYXBzaG90fCBwYXJh
bSBpcyBoZXJlIHRvIHByb3ZpZGUgYSBhIGNoYWluIG9mIGN1c3RvZHkgdGhydSB0aHJlYWQgYnJp
ZGdpbmcgdGhhdCBpcyBoZWxkIG9udG8gdW50aWwKKyAgICAgICAgLy8gKmFmdGVyKiB3ZSd2ZSBj
b2luZWQgYSBGaWxlIHdpdGggYSBuZXcgaGFuZGxlIHRoYXQgaGFzIHRoZSBjb3JyZWN0IHR5cGUg
c2V0IG9uIGl0LiBUaGlzIGFsbG93cyB0aGUKKyAgICAgICAgLy8gYmxvYiBzdG9yYWdlIHN5c3Rl
bSB0byB0cmFjayB3aGVuIGEgdGVtcCBmaWxlIGNhbiBhbmQgY2FuJ3QgYmUgc2FmZWx5IGRlbGV0
ZWQuCisKICAgICAgICAgLy8gRm9yIHJlZ3VsYXIgZmlsZXN5c3RlbSB0eXBlcyAodGVtcG9yYXJ5
IG9yIHBlcnNpc3RlbnQpLCB3ZSBzaG91bGQgbm90IGNhY2hlIGZpbGUgbWV0YWRhdGEgYXMgaXQg
Y291bGQgY2hhbmdlIEZpbGUgc2VtYW50aWNzLgotICAgICAgICAvLyBGb3Igb3RoZXIgZmlsZXN5
c3RlbSB0eXBlcyAod2hpY2ggY291bGQgYmUgcGxhdGZvcm0tc3BlY2lmaWMgb25lcyksIHRoZXJl
J3MgYSBjaGFuY2UgdGhhdCB0aGUgZmlsZXMgYXJlIG9uIHJlbW90ZSBmaWxlc3lzdGVtLiBJZiB0
aGUgcG9ydCBoYXMgcmV0dXJuZWQgbWV0YWRhdGEganVzdCBwYXNzIGl0IHRvIEZpbGUgY29uc3Ry
dWN0b3IgKHNvIHdlIG1heSBjYWNoZSB0aGUgbWV0YWRhdGEpLgorICAgICAgICAvLyBGb3Igb3Ro
ZXIgZmlsZXN5c3RlbSB0eXBlcyAod2hpY2ggY291bGQgYmUgcGxhdGZvcm0tc3BlY2lmaWMgb25l
cyksIHRoZXJlJ3MgYSBjaGFuY2UgdGhhdCB0aGUgZmlsZXMgYXJlIG9uIHJlbW90ZSBmaWxlc3lz
dGVtLgorICAgICAgICAvLyBJZiB0aGUgcG9ydCBoYXMgcmV0dXJuZWQgbWV0YWRhdGEganVzdCBw
YXNzIGl0IHRvIEZpbGUgY29uc3RydWN0b3IgKHNvIHdlIG1heSBjYWNoZSB0aGUgbWV0YWRhdGEp
LgogICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHVzZSB0aGUgc25hcHNob3QgbWV0YWRhdGEg
Zm9yIGFsbCBmaWxlcy4KICAgICAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL0J1Z3MvUHVibGlj
L3Nob3dfYnVnLmNnaT9pZD0xNzc0NgogICAgICAgICBpZiAobV90eXBlID09IEZpbGVTeXN0ZW1U
eXBlVGVtcG9yYXJ5IHx8IG1fdHlwZSA9PSBGaWxlU3lzdGVtVHlwZVBlcnNpc3RlbnQpIHsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0FzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0FzeW5jRmlsZVN5c3RlbUNhbGxi
YWNrcy5oCShyZXZpc2lvbiAxNDE3OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Bc3lu
Y0ZpbGVTeXN0ZW1DYWxsYmFja3MuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAog
CiAjaW5jbHVkZSAiQXN5bmNGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiQXN5bmNGaWxlV3JpdGVy
LmgiCisjaW5jbHVkZSAiQmxvYkRhdGEuaCIKICNpbmNsdWRlICJGaWxlTWV0YWRhdGEuaCIKICNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtNTQsNiArNTUsOSBAQCBwdWJsaWM6
CiAgICAgLy8gQ2FsbGVkIHdoZW4gYSBmaWxlIG1ldGFkYXRhIGlzIHJlYWQgc3VjY2Vzc2Z1bGx5
LgogICAgIHZpcnR1YWwgdm9pZCBkaWRSZWFkTWV0YWRhdGEoY29uc3QgRmlsZU1ldGFkYXRhJikg
eyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogCisgICAgLy8gQ2FsbGVkIHdoZW4gYSBzbmFwc2hv
dCBmaWxlIGlzIGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5LgorICAgIHZpcnR1YWwgdm9pZCBkaWRDcmVh
dGVTbmFwc2hvdEZpbGUoY29uc3QgRmlsZU1ldGFkYXRhJiwgUGFzc1JlZlB0cjxCbG9iRGF0YUhh
bmRsZT4gc25hcHNob3QpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKwogICAgIC8vIENhbGxl
ZCB3aGVuIGEgZGlyZWN0b3J5IGVudHJ5IGlzIHJlYWQuCiAgICAgdmlydHVhbCB2b2lkIGRpZFJl
YWREaXJlY3RvcnlFbnRyeShjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgaXNEaXJlY3RvcnkpIHsg
QVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL0FzeW5jRmlsZVN5c3RlbUd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL0FzeW5jRmlsZVN5c3RlbUd0ay5jcHAJKHJldmlzaW9uIDE0MTc5MSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Bc3luY0ZpbGVTeXN0ZW1HdGsuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTgsNiArMTE4LDExIEBAIHZvaWQgQXN5bmNGaWxlU3lzdGVtR3RrOjpj
cmVhdGVXcml0ZXIoQXMKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCit2b2lkIEFzeW5jRmls
ZVN5c3RlbUd0azo6Y3JlYXRlU25hcHNob3RGaWxlQW5kUmVhZE1ldGFkYXRhKGNvbnN0IEtVUkwm
LCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4pCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYkRhdGEuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYkRhdGEuY3BwCShyZXZpc2lvbiAx
NDE3OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JEYXRhLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsOCBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiQmxvYkRhdGEuaCIKKyNpbmNsdWRlICJCbG9iVVJMLmgiCisjaW5jbHVkZSAiVGhy
ZWFkYWJsZUJsb2JSZWdpc3RyeS5oIgogCiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1
ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CkBAIC0xMDEsNCArMTAzLDE3IEBAIHZvaWQgQmxvYkRhdGE6
OnN3YXBJdGVtcyhCbG9iRGF0YUl0ZW1MaXMKICAgICBtX2l0ZW1zLnN3YXAoaXRlbXMpOwogfQog
CisKK0Jsb2JEYXRhSGFuZGxlOjpCbG9iRGF0YUhhbmRsZShQYXNzT3duUHRyPEJsb2JEYXRhPiBk
YXRhLCBsb25nIGxvbmcgc2l6ZSkKK3sKKyAgICBVTlVTRURfUEFSQU0oc2l6ZSk7CisgICAgbV9p
bnRlcm5hbFVSTCA9IEJsb2JVUkw6OmNyZWF0ZUludGVybmFsVVJMKCk7CisgICAgVGhyZWFkYWJs
ZUJsb2JSZWdpc3RyeTo6cmVnaXN0ZXJCbG9iVVJMKG1faW50ZXJuYWxVUkwsIGRhdGEpOworfQor
CitCbG9iRGF0YUhhbmRsZTo6fkJsb2JEYXRhSGFuZGxlKCkKK3sKKyAgICBUaHJlYWRhYmxlQmxv
YlJlZ2lzdHJ5Ojp1bnJlZ2lzdGVyQmxvYlVSTChtX2ludGVybmFsVVJMKTsKK30KKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9C
bG9iRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
QmxvYkRhdGEuaAkocmV2aXNpb24gMTQxNzkxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9CbG9iRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDIsNiArMjAyLDIyIEBAIHBy
aXZhdGU6CiAgICAgQmxvYkRhdGFJdGVtTGlzdCBtX2l0ZW1zOwogfTsKIAorLy8gRklYTUU6IFRo
aXMgY2xhc3MgaXMgbW9zdGx5IHBsYWNlIGhvbGRlciB1bnRpbCBJIGdldCBmYXJ0aGVyIGFsb25n
IGluIGxhbmRpbmcKKy8vIGh0dHBzOi8vY29kZXJldmlldy5jaHJvbWl1bS5vcmcvMTExOTIwMTcv
LgorY2xhc3MgQmxvYkRhdGFIYW5kbGUgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Qmxv
YkRhdGFIYW5kbGU+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCbG9iRGF0YUhh
bmRsZT4gY3JlYXRlKFBhc3NPd25QdHI8QmxvYkRhdGE+IGRhdGEsIGxvbmcgbG9uZyBzaXplKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBCbG9iRGF0YUhhbmRsZShkYXRhLCBz
aXplKSk7CisgICAgfQorCisgICAgfkJsb2JEYXRhSGFuZGxlKCk7CisKK3ByaXZhdGU6CisgICAg
QmxvYkRhdGFIYW5kbGUoUGFzc093blB0cjxCbG9iRGF0YT4gZGF0YSwgbG9uZyBsb25nIHNpemUp
OworICAgIEtVUkwgbV9pbnRlcm5hbFVSTDsKK307CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IAogI2VuZGlmIC8vIEJsb2JEYXRhX2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShy
ZXZpc2lvbiAxNDE3OTUpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDQ0IEBACisyMDEzLTAyLTA0ICBNaWNoYWVsIE5vcmRtYW4g
IDxtaWNoYWVsbkBnb29nbGUuY29tPgorCisgICAgICAgIFtDaHJvbWl1bV0gRmlsZVN5c3RlbSBt
b2RzOiBDaGFuZ2VzIHRvIHNuYXBzaG90IGZpbGUgY3JlYXRpb24gdG8gcmVkdWNlIGRlcGVuZGVu
Y2llcyBvbiBibG9icy4KKyAgICAgICAgTm8gbG9uZ2VyIHNlbmQgYSB8YmxvYlVSTHwgdG8gdGhl
IGJyb3dzZXIgcHJvY2Vzcywgbm8gbG9uZ2VyIGV4cGVjdCB0aGUgYnJvd3NlciBwcm9jZXNzCisg
ICAgICAgIHRvIGhhdmUgcmVnaXN0ZXJlZCBhIGJsb2Igd2l0aCB0aGF0IHVybC4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwODg1MQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3JjL0FzeW5jRmlsZVN5
c3RlbUNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
RmlsZVdyaXRlckhlbHBlckNhbGxiYWNrczo6ZGlkQ3JlYXRlU25hcHNob3RGaWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFzeW5jRmlsZVN5c3RlbUNocm9taXVtOjpjcmVhdGVTbmFwc2hvdEZpbGVB
bmRSZWFkTWV0YWRhdGEpOgorICAgICAgICAqIHNyYy9Bc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bS5o
OgorICAgICAgICAoQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0pOgorICAgICAgICAqIHNyYy9Mb2Nh
bEZpbGVTeXN0ZW1DaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBz
cmMvV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJG
aWxlU3lzdGVtQ2FsbGJhY2tzSW1wbDo6ZGlkQ3JlYXRlU25hcHNob3RGaWxlKToKKyAgICAgICAg
KFdlYktpdCk6CisgICAgICAgICogc3JjL1dlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsLmg6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsKToK
KyAgICAgICAgKiBzcmMvV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6V29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW06OmNyZWF0ZVNuYXBzaG90
RmlsZUFuZFJlYWRNZXRhZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJBc3luY0ZpbGVT
eXN0ZW1DaHJvbWl1bTo6Y3JlYXRlV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZSk6Cisg
ICAgICAgICogc3JjL1dvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpNYWluVGhyZWFkRmlsZVN5c3RlbUNhbGxiYWNrczo6ZGlkQ3JlYXRlU25hcHNo
b3RGaWxlKToKKyAgICAgICAgKE1haW5UaHJlYWRGaWxlU3lzdGVtQ2FsbGJhY2tzKToKKyAgICAg
ICAgKFdlYktpdDo6V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6cG9zdENyZWF0ZVNu
YXBzaG90RmlsZVRvTWFpblRocmVhZCk6CisgICAgICAgIChXZWJLaXQ6OldvcmtlckZpbGVTeXN0
ZW1DYWxsYmFja3NCcmlkZ2U6OmNyZWF0ZVNuYXBzaG90RmlsZU9uTWFpblRocmVhZCk6CisgICAg
ICAgIChXZWJLaXQ6OldvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OmRpZENyZWF0ZVNu
YXBzaG90RmlsZU9uTWFpblRocmVhZCk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2Vi
S2l0OjpXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpXb3JrZXJGaWxlU3lzdGVtQ2Fs
bGJhY2tzQnJpZGdlKToKKyAgICAgICAgKFdlYktpdDo6V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNr
c0JyaWRnZTo6ZGlkQ3JlYXRlU25hcHNob3RGaWxlT25Xb3JrZXJUaHJlYWQpOgorICAgICAgICAq
IHNyYy9Xb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlLmg6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OldvcmtlckZpbGVTeXN0ZW1D
YWxsYmFja3NCcmlkZ2U6OmNyZWF0ZSk6CisgICAgICAgIChXb3JrZXJGaWxlU3lzdGVtQ2FsbGJh
Y2tzQnJpZGdlKToKKwogMjAxMy0wMi0wNCAgTWFyayBQaWxncmltICA8cGlsZ3JpbUBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgW0Nocm9taXVtXSBNb3ZlIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJm
YWNlIHRvIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0FzeW5jRmls
ZVN5c3RlbUNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9Bc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAJKHJldmlzaW9uIDE0MTc5MSkKKysrIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0FzeW5jRmlsZVN5c3RlbUNocm9taXVtLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDgsNDYgKzQ4LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1u
YW1lc3BhY2UgewotCi0vLyBTcGVjaWFsaXplZCBjYWxsYmFjayBjbGFzcyBmb3IgY3JlYXRlU25h
cHNob3RGaWxlQW5kUmVhZE1ldGFkYXRhLgotY2xhc3MgU25hcHNob3RGaWxlQ2FsbGJhY2tzIDog
cHVibGljIEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcyB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBh
c3NPd25QdHI8U25hcHNob3RGaWxlQ2FsbGJhY2tzPiBjcmVhdGUoY29uc3QgS1VSTCYgaW50ZXJu
YWxCbG9iVVJMLCBQYXNzT3duUHRyPFdlYkNvcmU6OkFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4g
Y2FsbGJhY2tzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTbmFwc2hvdEZp
bGVDYWxsYmFja3MoaW50ZXJuYWxCbG9iVVJMLCBjYWxsYmFja3MpKTsKLSAgICB9Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgZGlkUmVhZE1ldGFkYXRhKGNvbnN0IEZpbGVNZXRhZGF0YSYgbWV0YWRhdGEp
Ci0gICAgewotICAgICAgICBBU1NFUlQobV9jYWxsYmFja3MpOwotCi0gICAgICAgIC8vIFRoaXMg
d2lsbCBjcmVhdGUgYSBuZXcgRmlsZSBvYmplY3QgdXNpbmcgdGhlIG1ldGFkYXRhLgotICAgICAg
ICBtX2NhbGxiYWNrcy0+ZGlkUmVhZE1ldGFkYXRhKG1ldGFkYXRhKTsKLQotICAgICAgICAvLyBO
b3cgdGhhdCB3ZSd2ZSByZWdpc3RlcmVkIHRoZSBzbmFwc2hvdCBmaWxlLCB3ZSBjYW4gdW5yZWdp
c3RlciBvdXIgaW50ZXJuYWxCbG9iVVJMIHdoaWNoIGhhcyBwbGF5ZWQgYSBwbGFjZWhvbGRlciBm
b3IgdGhlIGZpbGUgZHVyaW5nIHRoZSBJUEMuCi0gICAgICAgIFRocmVhZGFibGVCbG9iUmVnaXN0
cnk6OnVucmVnaXN0ZXJCbG9iVVJMKG1faW50ZXJuYWxCbG9iVVJMKTsKLSAgICB9Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgZGlkRmFpbChpbnQgZXJyb3IpCi0gICAgewotICAgICAgICBBU1NFUlQobV9j
YWxsYmFja3MpOwotICAgICAgICBtX2NhbGxiYWNrcy0+ZGlkRmFpbChlcnJvcik7Ci0gICAgfQot
Ci1wcml2YXRlOgotICAgIFNuYXBzaG90RmlsZUNhbGxiYWNrcyhjb25zdCBLVVJMJiBpbnRlcm5h
bEJsb2JVUkwsIFBhc3NPd25QdHI8V2ViQ29yZTo6QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPiBj
YWxsYmFja3MpCi0gICAgICAgIDogbV9pbnRlcm5hbEJsb2JVUkwoaW50ZXJuYWxCbG9iVVJMKQot
ICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKLSAgICB7Ci0gICAgfQotCi0gICAgS1VS
TCBtX2ludGVybmFsQmxvYlVSTDsKLSAgICBPd25QdHI8V2ViQ29yZTo6QXN5bmNGaWxlU3lzdGVt
Q2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlCi0KIGJvb2wgQXN5
bmNGaWxlU3lzdGVtOjppc0F2YWlsYWJsZSgpCiB7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0xODYs
NyArMTQ2LDExIEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgICAgICBkZWxldGUgdGhpczsKICAg
ICB9Ci0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ3JlYXRlU25hcHNob3RGaWxlKGNvbnN0IFdlYktp
dDo6V2ViRmlsZUluZm8mIGluZm8pCisgICAgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgZGVsZXRlIHRoaXM7CisgICAgfQogICAgIHZpcnR1YWwgdm9pZCBkaWRSZWFk
RGlyZWN0b3J5KGNvbnN0IFdlYktpdDo6V2ViVmVjdG9yPFdlYktpdDo6V2ViRmlsZVN5c3RlbUVu
dHJ5PiYgZW50cmllcywgYm9vbCBoYXNNb3JlKQogICAgIHsKICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CkBAIC0yMTksMTUgKzE4Myw3IEBAIHZvaWQgQXN5bmNGaWxlU3lzdGVtQ2hyb21p
dW06OmNyZWF0ZVdyaXQKIAogdm9pZCBBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bTo6Y3JlYXRlU25h
cHNob3RGaWxlQW5kUmVhZE1ldGFkYXRhKGNvbnN0IEtVUkwmIHBhdGgsIFBhc3NPd25QdHI8QXN5
bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPiBjYWxsYmFja3MpCiB7Ci0gICAgS1VSTCBpbnRlcm5hbEJs
b2JVUkwgPSBCbG9iVVJMOjpjcmVhdGVJbnRlcm5hbFVSTCgpOwotCi0gICAgLy8gVGhpcyB3aWxs
IGNyZWF0ZSBhIHNuYXBzaG90IGZpbGUgYW5kIHJlZ2lzdGVyIHRoZSBmaWxlIHRvIGEgYmxvYiB1
c2luZyB0aGUgZ2l2ZW4gaW50ZXJuYWxCbG9iVVJMLgotICAgIG1fd2ViRmlsZVN5c3RlbS0+Y3Jl
YXRlU25hcHNob3RGaWxlQW5kUmVhZE1ldGFkYXRhKGludGVybmFsQmxvYlVSTCwgcGF0aCwgbmV3
IFdlYktpdDo6V2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwoY3JlYXRlU25hcHNob3RGaWxlQ2Fs
bGJhY2soaW50ZXJuYWxCbG9iVVJMLCBjYWxsYmFja3MpKSk7Ci19Ci0KLVBhc3NPd25QdHI8QXN5
bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPiBBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bTo6Y3JlYXRlU25h
cHNob3RGaWxlQ2FsbGJhY2soY29uc3QgS1VSTCYgaW50ZXJuYWxCbG9iVVJMLCBQYXNzT3duUHRy
PEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4gY2FsbGJhY2tzKSBjb25zdAotewotICAgIHJldHVy
biBTbmFwc2hvdEZpbGVDYWxsYmFja3M6OmNyZWF0ZShpbnRlcm5hbEJsb2JVUkwsIGNhbGxiYWNr
cyk7CisgICAgbV93ZWJGaWxlU3lzdGVtLT5jcmVhdGVTbmFwc2hvdEZpbGVBbmRSZWFkTWV0YWRh
dGEocGF0aCwgbmV3IFdlYktpdDo6V2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwoY2FsbGJhY2tz
KSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL0FzeW5jRmlsZVN5c3RlbUNocm9taXVtLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uaAkocmV2aXNpb24g
MTQxNzkxKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXN5bmNGaWxlU3lzdGVtQ2hy
b21pdW0uaAkod29ya2luZyBjb3B5KQpAQCAtNjksOCArNjksNiBAQCBwdWJsaWM6CiBwcm90ZWN0
ZWQ6CiAgICAgQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0oKTsKIAotICAgIFBhc3NPd25QdHI8QXN5
bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPiBjcmVhdGVTbmFwc2hvdEZpbGVDYWxsYmFjayhjb25zdCBL
VVJMJiBpbnRlcm5hbEJsb2JVUkwsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tz
PikgY29uc3Q7Ci0KICAgICBXZWJLaXQ6OldlYkZpbGVTeXN0ZW0qIG1fd2ViRmlsZVN5c3RlbTsK
IH07CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0xvY2FsRmlsZVN5c3RlbUNo
cm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Mb2Nh
bEZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAJKHJldmlzaW9uIDE0MTc5MSkKKysrIFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL0xvY2FsRmlsZVN5c3RlbUNocm9taXVtLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTUzLDcgKzE1Myw3IEBAIGJvb2wgYWxsb3dGaWxlU3lzdGVtRm9yV29ya2VyKFdlYkNv
bW1vblcKICAgICByZXR1cm4gYnJpZGdlLT5yZXN1bHQoKTsKIH0KIAotdm9pZCBvcGVuRmlsZVN5
c3RlbUZvcldvcmtlcihXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1vbkNsaWVudCwgV2ViRmls
ZVN5c3RlbTo6VHlwZSB0eXBlLCBsb25nIGxvbmcgc2l6ZSwgYm9vbCBjcmVhdGUsIFdlYkZpbGVT
eXN0ZW1DYWxsYmFja3MqIGNhbGxiYWNrcywgRmlsZVN5c3RlbVN5bmNocm9ub3VzVHlwZSBzeW5j
aHJvbm91c1R5cGUpCit2b2lkIG9wZW5GaWxlU3lzdGVtRm9yV29ya2VyKFdlYkNvbW1vbldvcmtl
ckNsaWVudCogY29tbW9uQ2xpZW50LCBXZWJGaWxlU3lzdGVtOjpUeXBlIHR5cGUsIGxvbmcgbG9u
ZyBzaXplLCBib29sIGNyZWF0ZSwgV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwqIGNhbGxiYWNr
cywgRmlsZVN5c3RlbVN5bmNocm9ub3VzVHlwZSBzeW5jaHJvbm91c1R5cGUpCiB7CiAgICAgV29y
a2VyU2NyaXB0Q29udHJvbGxlciogY29udHJvbGxlciA9IFdvcmtlclNjcmlwdENvbnRyb2xsZXI6
OmNvbnRyb2xsZXJGb3JDb250ZXh0KCk7CiAgICAgV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4
dCA9IGNvbnRyb2xsZXItPndvcmtlckNvbnRleHQoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbC5jcHAJ
KHJldmlzaW9uIDE0MTc5MSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZpbGVT
eXN0ZW1DYWxsYmFja3NJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYsNiArNzYsMjcgQEAg
dm9pZCBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbDo6ZGlkUmVhZAogICAgIGRlbGV0ZSB0aGlz
OwogfQogCit2b2lkIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsOjpkaWRDcmVhdGVTbmFwc2hv
dEZpbGUoY29uc3QgV2ViRmlsZUluZm8mIHdlYkZpbGVJbmZvKQoreworICAgIC8vIEl0J3MgaW1w
b3J0YW50IHRvIGNyZWF0ZSBhIEJsb2JEYXRhSGFuZGxlIHRoYXQgcmVmZXJzIHRvIHRoZSBwbGF0
Zm9ybSBmaWxlIHBhdGggcHJpb3IKKyAgICAvLyB0byByZXR1cm4gZnJvbSB0aGlzIG1ldGhvZCBz
byB0aGUgdW5kZXJseWluZyBmaWxlIHdpbGwgbm90IGJlIGRlbGV0ZWQuCisgICAgT3duUHRyPEJs
b2JEYXRhPiBibG9iRGF0YSA9IEJsb2JEYXRhOjpjcmVhdGUoKTsKKyAgICBibG9iRGF0YS0+YXBw
ZW5kRmlsZSh3ZWJGaWxlSW5mby5wbGF0Zm9ybVBhdGgpOworICAgIFJlZlB0cjxCbG9iRGF0YUhh
bmRsZT4gc25hcHNob3RCbG9iID0gQmxvYkRhdGFIYW5kbGU6OmNyZWF0ZShibG9iRGF0YS5yZWxl
YXNlKCksIHdlYkZpbGVJbmZvLmxlbmd0aCk7CisgICAgZGlkQ3JlYXRlU25hcHNob3RGaWxlKHdl
YkZpbGVJbmZvLCBzbmFwc2hvdEJsb2IpOworfQorCit2b2lkIFdlYkZpbGVTeXN0ZW1DYWxsYmFj
a3NJbXBsOjpkaWRDcmVhdGVTbmFwc2hvdEZpbGUoY29uc3QgV2ViRmlsZUluZm8mIHdlYkZpbGVJ
bmZvLCBQYXNzUmVmUHRyPFdlYkNvcmU6OkJsb2JEYXRhSGFuZGxlPiBzbmFwc2hvdCkKK3sKKyAg
ICBGaWxlTWV0YWRhdGEgZmlsZU1ldGFkYXRhOworICAgIGZpbGVNZXRhZGF0YS5tb2RpZmljYXRp
b25UaW1lID0gd2ViRmlsZUluZm8ubW9kaWZpY2F0aW9uVGltZTsKKyAgICBmaWxlTWV0YWRhdGEu
bGVuZ3RoID0gd2ViRmlsZUluZm8ubGVuZ3RoOworICAgIGZpbGVNZXRhZGF0YS50eXBlID0gc3Rh
dGljX2Nhc3Q8RmlsZU1ldGFkYXRhOjpUeXBlPih3ZWJGaWxlSW5mby50eXBlKTsKKyAgICBmaWxl
TWV0YWRhdGEucGxhdGZvcm1QYXRoID0gd2ViRmlsZUluZm8ucGxhdGZvcm1QYXRoOworICAgIG1f
Y2FsbGJhY2tzLT5kaWRDcmVhdGVTbmFwc2hvdEZpbGUoZmlsZU1ldGFkYXRhLCBzbmFwc2hvdCk7
CisgICAgZGVsZXRlIHRoaXM7Cit9CisKIHZvaWQgV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGw6
OmRpZFJlYWREaXJlY3RvcnkoY29uc3QgV2ViVmVjdG9yPFdlYkZpbGVTeXN0ZW1FbnRyeT4mIGVu
dHJpZXMsIGJvb2wgaGFzTW9yZSkKIHsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGVudHJp
ZXMuc2l6ZSgpOyArK2kpCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGaWxl
U3lzdGVtQ2FsbGJhY2tzSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsLmgJKHJldmlzaW9uIDE0MTc5MSkKKysr
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Y2xhc3MgQXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzOworY2xhc3MgQmxvYkRhdGFIYW5kbGU7CiBj
bGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogfQogCkBAIC01NywxMCArNTgsMTYgQEAgcHVi
bGljOgogCiAgICAgdmlydHVhbCB2b2lkIGRpZFN1Y2NlZWQoKTsKICAgICB2aXJ0dWFsIHZvaWQg
ZGlkUmVhZE1ldGFkYXRhKGNvbnN0IFdlYkZpbGVJbmZvJiBpbmZvKTsKKyAgICB2aXJ0dWFsIHZv
aWQgZGlkQ3JlYXRlU25hcHNob3RGaWxlKGNvbnN0IFdlYkZpbGVJbmZvJiBpbmZvKTsKICAgICB2
aXJ0dWFsIHZvaWQgZGlkUmVhZERpcmVjdG9yeShjb25zdCBXZWJWZWN0b3I8V2ViRmlsZVN5c3Rl
bUVudHJ5PiYgZW50cmllcywgYm9vbCBoYXNNb3JlKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkT3Bl
bkZpbGVTeXN0ZW0oY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBjb25zdCBXZWJVUkwmIHJvb3RVUkwp
OwogICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKFdlYkZpbGVFcnJvciBlcnJvcik7CiAKKyAgICAv
LyBUaGlzIGludGVybmFsIG92ZXJsb2FkIGlzIHVzZWQgYnkgV29ya2VyRmlsZVN5c3RlbUNhbGxi
YWNrc0JyaWRnZSB0byBkZWxpdmVyIGEgYmxvYiBkYXRhIGhhbmRsZQorICAgIC8vIGNyZWF0ZWQg
b24gdGhlIG1haW4gdGhyZWFkIHRvIGFuICBBc3luY0ZpbGVTeXN0ZW1DYWxsYmFjayBvbiBhIGJh
Y2tncm91bmQgd29ya2VyIHRocmVhZC4gVGhlIG90aGVyCisgICAgLy8gdmlydHVhbCBtZXRob2Qg
aXMgaW52b2tlZCBieSB0aGUgZW1iZWRkZXIuCisgICAgdm9pZCBkaWRDcmVhdGVTbmFwc2hvdEZp
bGUoY29uc3QgV2ViRmlsZUluZm8mIGluZm8sIFBhc3NSZWZQdHI8V2ViQ29yZTo6QmxvYkRhdGFI
YW5kbGU+IHNuYXBzaG90KTsKKwogcHJpdmF0ZToKICAgICBPd25QdHI8V2ViQ29yZTo6QXN5bmNG
aWxlU3lzdGVtQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKIApJbmRleDogU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9t
aXVtLmNwcAkocmV2aXNpb24gMTQxNzkxKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzks
MTUgKzE3OSwxMiBAQCB2b2lkIFdvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVtOjpjcmVhCiAK
IHZvaWQgV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW06OmNyZWF0ZVNuYXBzaG90RmlsZUFu
ZFJlYWRNZXRhZGF0YShjb25zdCBLVVJMJiBwYXRoLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3Rl
bUNhbGxiYWNrcz4gY2FsbGJhY2tzKQogewotICAgIEtVUkwgaW50ZXJuYWxCbG9iVVJMID0gQmxv
YlVSTDo6Y3JlYXRlSW50ZXJuYWxVUkwoKTsKLQotICAgIGNyZWF0ZVdvcmtlckZpbGVTeXN0ZW1D
YWxsYmFja3NCcmlkZ2UoY3JlYXRlU25hcHNob3RGaWxlQ2FsbGJhY2soaW50ZXJuYWxCbG9iVVJM
LCBjYWxsYmFja3MpKS0+cG9zdENyZWF0ZVNuYXBzaG90RmlsZVRvTWFpblRocmVhZChtX3dlYkZp
bGVTeXN0ZW0sIGludGVybmFsQmxvYlVSTCwgcGF0aCwgbV9tb2RlRm9yQ3VycmVudE9wZXJhdGlv
bik7CisgICAgY3JlYXRlV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZShjYWxsYmFja3Mp
LT5wb3N0Q3JlYXRlU25hcHNob3RGaWxlVG9NYWluVGhyZWFkKG1fd2ViRmlsZVN5c3RlbSwgcGF0
aCwgbV9tb2RlRm9yQ3VycmVudE9wZXJhdGlvbik7CiB9CiAKIFBhc3NSZWZQdHI8V29ya2VyRmls
ZVN5c3RlbUNhbGxiYWNrc0JyaWRnZT4gV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW06OmNy
ZWF0ZVdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UoUGFzc093blB0cjxBc3luY0ZpbGVT
eXN0ZW1DYWxsYmFja3M+IGNhbGxiYWNrcykKIHsKICAgICBBU1NFUlQobV9zeW5jaHJvbm91c1R5
cGUgPT0gQXN5bmNocm9ub3VzRmlsZVN5c3RlbSB8fCAhbV9icmlkZ2VGb3JDdXJyZW50T3BlcmF0
aW9uKTsKLSAgICAodm9pZCltX3N5bmNocm9ub3VzVHlwZTsKIAogICAgIG1fbW9kZUZvckN1cnJl
bnRPcGVyYXRpb24gPSBmaWxlU3lzdGVtT3BlcmF0aW9uc01vZGU7CiAgICAgbV9tb2RlRm9yQ3Vy
cmVudE9wZXJhdGlvbi5hcHBlbmQoU3RyaW5nOjpudW1iZXIobV93b3JrZXJDb250ZXh0LT50aHJl
YWQoKS0+cnVuTG9vcCgpLmNyZWF0ZVVuaXF1ZUlkKCkpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckZpbGVTeXN0ZW1DYWxsYmFj
a3NCcmlkZ2UuY3BwCShyZXZpc2lvbiAxNDE3OTEpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9Xb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzMsMTAgKzMzLDExIEBACiAKICNpZiBFTkFCTEUoRklMRV9TWVNURU0pICYmIEVOQUJMRShX
T1JLRVJTKQogCisjaW5jbHVkZSAiQmxvYkRhdGEuaCIKICNpbmNsdWRlICJDcm9zc1RocmVhZFRh
c2suaCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiV2ViQ29tbW9uV29ya2VyQ2xpZW50
LmgiCi0jaW5jbHVkZSAiV2ViRmlsZVN5c3RlbUNhbGxiYWNrcy5oIgorI2luY2x1ZGUgIldlYkZp
bGVTeXN0ZW1DYWxsYmFja3NJbXBsLmgiCiAjaW5jbHVkZSAiV2ViRmlsZVN5c3RlbUVudHJ5Lmgi
CiAjaW5jbHVkZSAiV2ViV29ya2VyQmFzZS5oIgogI2luY2x1ZGUgIldvcmtlckNvbnRleHQuaCIK
QEAgLTEyNCw2ICsxMjUsMTcgQEAgcHVibGljOgogICAgICAgICBkZWxldGUgdGhpczsKICAgICB9
CiAKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ3JlYXRlU25hcHNob3RGaWxlKGNvbnN0IFdlYkZpbGVJ
bmZvJiBpbmZvKQorICAgIHsKKyAgICAgICAgLy8gSXQncyBpbXBvcnRhbnQgdG8gY3JlYXRlIGEg
QmxvYkRhdGFIYW5kbGUgdGhhdCByZWZlcnMgdG8gdGhlIHBsYXRmb3JtIGZpbGUgcGF0aCBwcmlv
cgorICAgICAgICAvLyB0byByZXR1cm4gZnJvbSB0aGlzIG1ldGhvZCBzbyB0aGUgdW5kZXJseWlu
ZyBmaWxlIHdpbGwgbm90IGJlIGRlbGV0ZWQuCisgICAgICAgIE93blB0cjxCbG9iRGF0YT4gYmxv
YkRhdGEgPSBCbG9iRGF0YTo6Y3JlYXRlKCk7CisgICAgICAgIGJsb2JEYXRhLT5hcHBlbmRGaWxl
KGluZm8ucGxhdGZvcm1QYXRoKTsKKyAgICAgICAgUmVmUHRyPEJsb2JEYXRhSGFuZGxlPiBzbmFw
c2hvdEJsb2IgPSBCbG9iRGF0YUhhbmRsZTo6Y3JlYXRlKGJsb2JEYXRhLnJlbGVhc2UoKSwgaW5m
by5sZW5ndGgpOworICAgICAgICBtX2JyaWRnZS0+ZGlkQ3JlYXRlU25hcHNob3RGaWxlT25NYWlu
VGhyZWFkKGluZm8sIG1fbW9kZSwgc25hcHNob3RCbG9iKTsKKyAgICAgICAgZGVsZXRlIHRoaXM7
CisgICAgfQorCiAgICAgdmlydHVhbCB2b2lkIGRpZFJlYWREaXJlY3RvcnkoY29uc3QgV2ViVmVj
dG9yPFdlYkZpbGVTeXN0ZW1FbnRyeT4mIGVudHJpZXMsIGJvb2wgaGFzTW9yZSkKICAgICB7CiAg
ICAgICAgIG1fYnJpZGdlLT5kaWRSZWFkRGlyZWN0b3J5T25NYWluVGhyZWFkKGVudHJpZXMsIGhh
c01vcmUsIG1fbW9kZSk7CkBAIC0yODksMTMgKzMwMSwxMyBAQCB2b2lkIFdvcmtlckZpbGVTeXN0
ZW1DYWxsYmFja3NCcmlkZ2U6OnBvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLCBt
b2RlKSk7CiB9CiAKLXZvaWQgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6cG9zdENy
ZWF0ZVNuYXBzaG90RmlsZVRvTWFpblRocmVhZChXZWJGaWxlU3lzdGVtKiBmaWxlU3lzdGVtLCBj
b25zdCBLVVJMJiBpbnRlcm5hbEJsb2JVUkwsIGNvbnN0IEtVUkwmIHBhdGgsIGNvbnN0IFN0cmlu
ZyYgbW9kZSkKK3ZvaWQgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6cG9zdENyZWF0
ZVNuYXBzaG90RmlsZVRvTWFpblRocmVhZChXZWJGaWxlU3lzdGVtKiBmaWxlU3lzdGVtLCBjb25z
dCBLVVJMJiBwYXRoLCBjb25zdCBTdHJpbmcmIG1vZGUpCiB7CiAgICAgQVNTRVJUKGZpbGVTeXN0
ZW0pOwogICAgIGRpc3BhdGNoVGFza1RvTWFpblRocmVhZCgKICAgICAgICAgY3JlYXRlQ2FsbGJh
Y2tUYXNrKCZjcmVhdGVTbmFwc2hvdEZpbGVPbk1haW5UaHJlYWQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKGZpbGVTeXN0ZW0pLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50ZXJuYWxCbG9iVVJMLCBwYXRoLCB0aGlzLCBtb2RlKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLCB0aGlzLCBtb2RlKSk7CiB9CiAKIHZvaWQg
V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6b3BlbkZpbGVTeXN0ZW1Pbk1haW5UaHJl
YWQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9u
Q2xpZW50LCBXZWJGaWxlU3lzdGVtOjpUeXBlIHR5cGUsIGxvbmcgbG9uZyBzaXplLCBib29sIGNy
ZWF0ZSwgUGFzc1JlZlB0cjxXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlPiBicmlkZ2Us
IGNvbnN0IFN0cmluZyYgbW9kZSkKQEAgLTM1Nyw5ICszNjksOSBAQCB2b2lkIFdvcmtlckZpbGVT
eXN0ZW1DYWxsYmFja3NCcmlkZ2U6OnJlCiAgICAgZmlsZVN5c3RlbS0+cmVhZERpcmVjdG9yeShw
YXRoLCBNYWluVGhyZWFkRmlsZVN5c3RlbUNhbGxiYWNrczo6Y3JlYXRlTGVha2VkUHRyKGJyaWRn
ZSwgbW9kZSkpOwogfQogCi12b2lkIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OmNy
ZWF0ZVNuYXBzaG90RmlsZU9uTWFpblRocmVhZChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgV2ViRmlsZVN5c3RlbSogZmlsZVN5c3RlbSwgY29uc3QgS1VSTCYgaW50ZXJuYWxCbG9i
VVJMLCBjb25zdCBLVVJMJiBwYXRoLCBQYXNzUmVmUHRyPFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFj
a3NCcmlkZ2U+IGJyaWRnZSwgY29uc3QgU3RyaW5nJiBtb2RlKQordm9pZCBXb3JrZXJGaWxlU3lz
dGVtQ2FsbGJhY2tzQnJpZGdlOjpjcmVhdGVTbmFwc2hvdEZpbGVPbk1haW5UaHJlYWQoV2ViQ29y
ZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYkZpbGVTeXN0ZW0qIGZpbGVTeXN0ZW0sIGNv
bnN0IEtVUkwmIHBhdGgsIFBhc3NSZWZQdHI8V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRn
ZT4gYnJpZGdlLCBjb25zdCBTdHJpbmcmIG1vZGUpCiB7Ci0gICAgZmlsZVN5c3RlbS0+Y3JlYXRl
U25hcHNob3RGaWxlQW5kUmVhZE1ldGFkYXRhKGludGVybmFsQmxvYlVSTCwgcGF0aCwgTWFpblRo
cmVhZEZpbGVTeXN0ZW1DYWxsYmFja3M6OmNyZWF0ZUxlYWtlZFB0cihicmlkZ2UsIG1vZGUpKTsK
KyAgICBmaWxlU3lzdGVtLT5jcmVhdGVTbmFwc2hvdEZpbGVBbmRSZWFkTWV0YWRhdGEocGF0aCwg
TWFpblRocmVhZEZpbGVTeXN0ZW1DYWxsYmFja3M6OmNyZWF0ZUxlYWtlZFB0cihicmlkZ2UsIG1v
ZGUpKTsKIH0KIAogdm9pZCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpkaWRGYWls
T25NYWluVGhyZWFkKFdlYkZpbGVFcnJvciBlcnJvciwgY29uc3QgU3RyaW5nJiBtb2RlKQpAQCAt
MzgzLDYgKzM5NSwxMSBAQCB2b2lkIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OmRp
CiAgICAgbWF5UG9zdFRhc2tUb1dvcmtlcihjcmVhdGVDYWxsYmFja1Rhc2soJmRpZFJlYWRNZXRh
ZGF0YU9uV29ya2VyVGhyZWFkLCB0aGlzLCBpbmZvKSwgbW9kZSk7CiB9CiAKK3ZvaWQgV29ya2Vy
RmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6ZGlkQ3JlYXRlU25hcHNob3RGaWxlT25NYWluVGhy
ZWFkKGNvbnN0IFdlYkZpbGVJbmZvJiBpbmZvLCBjb25zdCBTdHJpbmcmIG1vZGUsIFBhc3NSZWZQ
dHI8QmxvYkRhdGFIYW5kbGU+IHNuYXBzaG90QmxvYikKK3sKKyAgICBtYXlQb3N0VGFza1RvV29y
a2VyKGNyZWF0ZUNhbGxiYWNrVGFzaygmZGlkQ3JlYXRlU25hcHNob3RGaWxlT25Xb3JrZXJUaHJl
YWQsIHRoaXMsIGluZm8sIHNuYXBzaG90QmxvYiksIG1vZGUpOworfQorCiB2b2lkIFdvcmtlckZp
bGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OmRpZFJlYWREaXJlY3RvcnlPbk1haW5UaHJlYWQoY29u
c3QgV2ViVmVjdG9yPFdlYkZpbGVTeXN0ZW1FbnRyeT4mIGVudHJpZXMsIGJvb2wgaGFzTW9yZSwg
Y29uc3QgU3RyaW5nJiBtb2RlKQogewogICAgIG1heVBvc3RUYXNrVG9Xb3JrZXIoCkBAIC0zOTAs
NyArNDA3LDcgQEAgdm9pZCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpkaQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcywgZW50cmllcywgaGFzTW9yZSksIG1vZGUpOwog
fQogCi1Xb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpXb3JrZXJGaWxlU3lzdGVtQ2Fs
bGJhY2tzQnJpZGdlKFdlYkNvcmU6OldvcmtlckxvYWRlclByb3h5KiB3b3JrZXJMb2FkZXJQcm94
eSwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgV2ViRmls
ZVN5c3RlbUNhbGxiYWNrcyogY2FsbGJhY2tzKQorV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0Jy
aWRnZTo6V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZShXZWJDb3JlOjpXb3JrZXJMb2Fk
ZXJQcm94eSogd29ya2VyTG9hZGVyUHJveHksIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQsIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsKiBjYWxsYmFja3Mp
CiAgICAgOiBtX3dvcmtlckxvYWRlclByb3h5KHdvcmtlckxvYWRlclByb3h5KQogICAgICwgbV93
b3JrZXJDb250ZXh0KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpCiAgICAgLCBtX3dvcmtlckNvbnRl
eHRPYnNlcnZlcihXb3JrZXJGaWxlU3lzdGVtQ29udGV4dE9ic2VydmVyOjpjcmVhdGUoc3RhdGlj
X2Nhc3Q8V29ya2VyQ29udGV4dCo+KG1fd29ya2VyQ29udGV4dCksIHRoaXMpLmxlYWtQdHIoKSkK
QEAgLTQyNCw2ICs0NDEsMTEgQEAgdm9pZCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdl
OjpkaQogICAgIGJyaWRnZS0+bV9jYWxsYmFja3NPbldvcmtlclRocmVhZC0+ZGlkUmVhZE1ldGFk
YXRhKGluZm8pOwogfQogCit2b2lkIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OmRp
ZENyZWF0ZVNuYXBzaG90RmlsZU9uV29ya2VyVGhyZWFkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBQYXNzUmVmUHRyPFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U+IGJyaWRnZSwgY29u
c3QgV2ViRmlsZUluZm8mIGluZm8sIFBhc3NSZWZQdHI8QmxvYkRhdGFIYW5kbGU+IHNuYXBzaG90
QmxvYikKK3sKKyAgICBicmlkZ2UtPm1fY2FsbGJhY2tzT25Xb3JrZXJUaHJlYWQtPmRpZENyZWF0
ZVNuYXBzaG90RmlsZShpbmZvLCBzbmFwc2hvdEJsb2IpOworfQorCiB2b2lkIFdvcmtlckZpbGVT
eXN0ZW1DYWxsYmFja3NCcmlkZ2U6OmRpZFJlYWREaXJlY3RvcnlPbldvcmtlclRocmVhZChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tz
QnJpZGdlPiBicmlkZ2UsIGNvbnN0IFdlYlZlY3RvcjxXZWJGaWxlU3lzdGVtRW50cnk+JiBlbnRy
aWVzLCBib29sIGhhc01vcmUpCiB7CiAgICAgYnJpZGdlLT5tX2NhbGxiYWNrc09uV29ya2VyVGhy
ZWFkLT5kaWRSZWFkRGlyZWN0b3J5KGVudHJpZXMsIGhhc01vcmUpOwpJbmRleDogU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckZpbGVTeXN0ZW1DYWxs
YmFja3NCcmlkZ2UuaAkocmV2aXNpb24gMTQxNzkxKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKK2NsYXNzIEJsb2JEYXRhSGFuZGxlOwogY2xhc3MgV29ya2VyTG9hZGVy
UHJveHk7CiB9CiAKQEAgLTUyLDcgKzUzLDcgQEAgY2xhc3MgQXN5bmNGaWxlU3lzdGVtOwogY2xh
c3MgTWFpblRocmVhZEZpbGVTeXN0ZW1DYWxsYmFja3M7CiBjbGFzcyBXZWJDb21tb25Xb3JrZXJD
bGllbnQ7CiBjbGFzcyBUaHJlYWRhYmxlQ2FsbGJhY2tzQnJpZGdlV3JhcHBlcjsKLWNsYXNzIFdl
YkZpbGVTeXN0ZW1DYWxsYmFja3M7CitjbGFzcyBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbDsK
IGNsYXNzIFdvcmtlckZpbGVTeXN0ZW1Db250ZXh0T2JzZXJ2ZXI7CiBzdHJ1Y3QgV2ViRmlsZUlu
Zm87CiBzdHJ1Y3QgV2ViRmlsZVN5c3RlbUVudHJ5OwpAQCAtNzcsNyArNzgsNyBAQCBwdWJsaWM6
CiAKICAgICB2b2lkIHN0b3AoKTsKIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdvcmtlckZpbGVT
eXN0ZW1DYWxsYmFja3NCcmlkZ2U+IGNyZWF0ZShXZWJDb3JlOjpXb3JrZXJMb2FkZXJQcm94eSog
d29ya2VyTG9hZGVyUHJveHksIFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHdvcmtl
ckNvbnRleHQsIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3MqIGNhbGxiYWNrcykKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlPiBjcmVhdGUoV2ViQ29y
ZTo6V29ya2VyTG9hZGVyUHJveHkqIHdvcmtlckxvYWRlclByb3h5LCBXZWJDb3JlOjpTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiB3b3JrZXJDb250ZXh0LCBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1w
bCogY2FsbGJhY2tzKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXb3JrZXJG
aWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlKHdvcmtlckxvYWRlclByb3h5LCB3b3JrZXJDb250ZXh0
LCBjYWxsYmFja3MpKTsKICAgICB9CkBAIC05NCwxNyArOTUsMTggQEAgcHVibGljOgogICAgIHZv
aWQgcG9zdEZpbGVFeGlzdHNUb01haW5UaHJlYWQoV2ViRmlsZVN5c3RlbSosIGNvbnN0IFdlYkNv
cmU6OktVUkwmIHBhdGgsIGNvbnN0IFN0cmluZyYgbW9kZSk7CiAgICAgdm9pZCBwb3N0RGlyZWN0
b3J5RXhpc3RzVG9NYWluVGhyZWFkKFdlYkZpbGVTeXN0ZW0qLCBjb25zdCBXZWJDb3JlOjpLVVJM
JiBwYXRoLCBjb25zdCBTdHJpbmcmIG1vZGUpOwogICAgIHZvaWQgcG9zdFJlYWREaXJlY3RvcnlU
b01haW5UaHJlYWQoV2ViRmlsZVN5c3RlbSosIGNvbnN0IFdlYkNvcmU6OktVUkwmIHBhdGgsIGNv
bnN0IFN0cmluZyYgbW9kZSk7Ci0gICAgdm9pZCBwb3N0Q3JlYXRlU25hcHNob3RGaWxlVG9NYWlu
VGhyZWFkKFdlYkZpbGVTeXN0ZW0qLCBjb25zdCBXZWJDb3JlOjpLVVJMJiBpbnRlcm5hbEJsb2JV
UkwsIGNvbnN0IFdlYkNvcmU6OktVUkwmIHBhdGgsIGNvbnN0IFN0cmluZyYgbW9kZSk7CisgICAg
dm9pZCBwb3N0Q3JlYXRlU25hcHNob3RGaWxlVG9NYWluVGhyZWFkKFdlYkZpbGVTeXN0ZW0qLCBj
b25zdCBXZWJDb3JlOjpLVVJMJiBwYXRoLCBjb25zdCBTdHJpbmcmIG1vZGUpOwogCiAgICAgLy8g
Q2FsbGJhY2sgbWV0aG9kcyB0aGF0IGFyZSBjYWxsZWQgb24gdGhlIG1haW4gdGhyZWFkLgogICAg
IHZvaWQgZGlkRmFpbE9uTWFpblRocmVhZChXZWJGaWxlRXJyb3IsIGNvbnN0IFN0cmluZyYgbW9k
ZSk7CiAgICAgdm9pZCBkaWRPcGVuRmlsZVN5c3RlbU9uTWFpblRocmVhZChjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IFdlYkNvcmU6OktVUkwmIHJvb3RVUkwsIGNvbnN0IFN0cmluZyYgbW9kZSk7
CiAgICAgdm9pZCBkaWRTdWNjZWVkT25NYWluVGhyZWFkKGNvbnN0IFN0cmluZyYgbW9kZSk7CiAg
ICAgdm9pZCBkaWRSZWFkTWV0YWRhdGFPbk1haW5UaHJlYWQoY29uc3QgV2ViRmlsZUluZm8mLCBj
b25zdCBTdHJpbmcmIG1vZGUpOworICAgIHZvaWQgZGlkQ3JlYXRlU25hcHNob3RGaWxlT25NYWlu
VGhyZWFkKGNvbnN0IFdlYkZpbGVJbmZvJiwgY29uc3QgU3RyaW5nJiBtb2RlLCBQYXNzUmVmUHRy
PFdlYkNvcmU6OkJsb2JEYXRhSGFuZGxlPiBzbmFwc2hvdEJsb2IpOwogICAgIHZvaWQgZGlkUmVh
ZERpcmVjdG9yeU9uTWFpblRocmVhZChjb25zdCBXZWJWZWN0b3I8V2ViRmlsZVN5c3RlbUVudHJ5
PiYsIGJvb2wgaGFzTW9yZSwgY29uc3QgU3RyaW5nJiBtb2RlKTsKIAogcHJpdmF0ZToKLSAgICBX
b3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlKFdlYkNvcmU6OldvcmtlckxvYWRlclByb3h5
KiwgV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYkZpbGVTeXN0ZW1DYWxsYmFj
a3MqKTsKKyAgICBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlKFdlYkNvcmU6Oldvcmtl
ckxvYWRlclByb3h5KiwgV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYkZpbGVT
eXN0ZW1DYWxsYmFja3NJbXBsKik7CiAKICAgICAvLyBNZXRob2RzIHRoYXQgYXJlIHRvIGJlIGNh
bGxlZCBvbiB0aGUgbWFpbiB0aHJlYWQuCiAgICAgc3RhdGljIHZvaWQgb3BlbkZpbGVTeXN0ZW1P
bk1haW5UaHJlYWQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYkNvbW1vbldv
cmtlckNsaWVudCosIFdlYkZpbGVTeXN0ZW06OlR5cGUsIGxvbmcgbG9uZyBzaXplLCBib29sIGNy
ZWF0ZSwgUGFzc1JlZlB0cjxXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlPiwgY29uc3Qg
U3RyaW5nJiBtb2RlKTsKQEAgLTExOCw3ICsxMjAsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2
b2lkIGZpbGVFeGlzdHNPbk1haW5UaHJlYWQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFdlYkZpbGVTeXN0ZW0qLCBjb25zdCBXZWJDb3JlOjpLVVJMJiBwYXRoLCBQYXNzUmVmUHRy
PFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U+LCBjb25zdCBTdHJpbmcmIG1vZGUpOwog
ICAgIHN0YXRpYyB2b2lkIGRpcmVjdG9yeUV4aXN0c09uTWFpblRocmVhZChXZWJDb3JlOjpTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgV2ViRmlsZVN5c3RlbSosIGNvbnN0IFdlYkNvcmU6OktVUkwm
IHBhdGgsIFBhc3NSZWZQdHI8V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZT4sIGNvbnN0
IFN0cmluZyYgbW9kZSk7CiAgICAgc3RhdGljIHZvaWQgcmVhZERpcmVjdG9yeU9uTWFpblRocmVh
ZChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViRmlsZVN5c3RlbSosIGNvbnN0
IFdlYkNvcmU6OktVUkwmIHBhdGgsIFBhc3NSZWZQdHI8V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNr
c0JyaWRnZT4sIGNvbnN0IFN0cmluZyYgbW9kZSk7Ci0gICAgc3RhdGljIHZvaWQgY3JlYXRlU25h
cHNob3RGaWxlT25NYWluVGhyZWFkKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBX
ZWJGaWxlU3lzdGVtKiwgY29uc3QgV2ViQ29yZTo6S1VSTCYgaW50ZXJuYWxCbG9iVVJMLCBjb25z
dCBXZWJDb3JlOjpLVVJMJiBwYXRoLCBQYXNzUmVmUHRyPFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFj
a3NCcmlkZ2U+LCBjb25zdCBTdHJpbmcmIG1vZGUpOworICAgIHN0YXRpYyB2b2lkIGNyZWF0ZVNu
YXBzaG90RmlsZU9uTWFpblRocmVhZChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
V2ViRmlsZVN5c3RlbSosIGNvbnN0IFdlYkNvcmU6OktVUkwmIHBhdGgsIFBhc3NSZWZQdHI8V29y
a2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZT4sIGNvbnN0IFN0cmluZyYgbW9kZSk7CiAKICAg
ICBmcmllbmQgY2xhc3MgTWFpblRocmVhZEZpbGVTeXN0ZW1DYWxsYmFja3M7CiAKQEAgLTEyNyw2
ICsxMjksNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIGRpZE9wZW5GaWxlU3lzdGVtT25X
b3JrZXJUaHJlYWQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8
V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZT4sIGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgV2ViQ29yZTo6S1VSTCYgcm9vdFBhdGgpOwogICAgIHN0YXRpYyB2b2lkIGRpZFN1Y2NlZWRP
bldvcmtlclRocmVhZChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0
cjxXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlPik7CiAgICAgc3RhdGljIHZvaWQgZGlk
UmVhZE1ldGFkYXRhT25Xb3JrZXJUaHJlYWQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFBhc3NSZWZQdHI8V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZT4sIGNvbnN0IFdl
YkZpbGVJbmZvJik7CisgICAgc3RhdGljIHZvaWQgZGlkQ3JlYXRlU25hcHNob3RGaWxlT25Xb3Jr
ZXJUaHJlYWQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8V29y
a2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZT4sIGNvbnN0IFdlYkZpbGVJbmZvJiwgUGFzc1Jl
ZlB0cjxXZWJDb3JlOjpCbG9iRGF0YUhhbmRsZT4gc25hcHNob3RCbG9iKTsKICAgICBzdGF0aWMg
dm9pZCBkaWRSZWFkRGlyZWN0b3J5T25Xb3JrZXJUaHJlYWQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZT4s
IGNvbnN0IFdlYlZlY3RvcjxXZWJGaWxlU3lzdGVtRW50cnk+JiwgYm9vbCBoYXNNb3JlKTsKIAog
ICAgIHN0YXRpYyB2b2lkIHJ1blRhc2tPbk1haW5UaHJlYWQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZT4s
IFBhc3NPd25QdHI8V2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4pOwpAQCAt
MTQ2LDcgKzE0OSw3IEBAIHByaXZhdGU6CiAgICAgV29ya2VyRmlsZVN5c3RlbUNvbnRleHRPYnNl
cnZlciogbV93b3JrZXJDb250ZXh0T2JzZXJ2ZXI7CiAKICAgICAvLyBUaGlzIGlzIHNlbGYtZGVz
dHJ1Y3RlZCBhbmQgbXVzdCBiZSBmaXJlZCBvbiB0aGUgd29ya2VyIHRocmVhZC4KLSAgICBXZWJG
aWxlU3lzdGVtQ2FsbGJhY2tzKiBtX2NhbGxiYWNrc09uV29ya2VyVGhyZWFkOworICAgIFdlYkZp
bGVTeXN0ZW1DYWxsYmFja3NJbXBsKiBtX2NhbGxiYWNrc09uV29ya2VyVGhyZWFkOwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186466</attachid>
            <date>2013-02-04 14:58:51 -0800</date>
            <delta_ts>2013-02-20 11:13:12 -0800</delta_ts>
            <desc>impl of new api</desc>
            <filename>impl2.txt</filename>
            <type>text/plain</type>
            <size>32198</size>
            <attacher name="Michael Nordman">michaeln</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0MTc5NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBACisyMDEzLTAyLTA0ICBNaWNoYWVs
IE5vcmRtYW4gIDxtaWNoYWVsbkBnb29nbGUuY29tPgorCisgICAgICAgIEZpbGVTeXN0ZW0gbW9k
czogQ2hhbmdlcyB0byBzbmFwc2hvdCBmaWxlIGNyZWF0aW9uIHRvIHJlZHVjZSBkZXBlbmRlbmNp
ZXMgb24gYmxvYiBVUkxzLgorICAgICAgICBBZGRpbmcgYSBuZXcgbWluaW1hbCBCbG9iRGF0YUhh
bmRsZSBjbGFzcyB3aGljaCB3aWxsIGJlIHJlaW1wbGVtZW50ZWQvYnVpbHQgdXBvbiBpbiBsYXRl
ciBDTHMuIEluIHRoaXMKKyAgICAgICAgcGF0Y2gsIGl0J3MganVzdCBlbm91Z2ggdG8gcmVmYWN0
b3IgdGhlIEZpbGVTeXN0ZW0gY29kZSB0byBub3QgZnVuY3Rpb24gaW4gdGVybXMgb2YgYmxvYlVS
THMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDg4
NTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBu
ZXcgdGVzdHMgKE9PUFMhKS4KKworICAgICAgICAqIE1vZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxl
U3lzdGVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RE9NRmls
ZVN5c3RlbTo6Y3JlYXRlRmlsZSk6CisgICAgICAgICogTW9kdWxlcy9maWxlc3lzdGVtL0RPTUZp
bGVTeXN0ZW1TeW5jLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRmb3Jt
L0FzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcy5oOgorICAgICAgICAoQXN5bmNGaWxlU3lzdGVtQ2Fs
bGJhY2tzKToKKyAgICAgICAgKFdlYkNvcmU6OkFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrczo6ZGlk
Q3JlYXRlU25hcHNob3RGaWxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvQXN5bmNGaWxlU3lz
dGVtR3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFzeW5jRmlsZVN5c3RlbUd0azo6Y3JlYXRl
U25hcHNob3RGaWxlQW5kUmVhZE1ldGFkYXRhKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAqIHBsYXRmb3JtL25ldHdvcmsvQmxvYkRhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpCbG9iRGF0YUhhbmRsZTo6QmxvYkRhdGFIYW5kbGUpOgorICAgICAg
ICAoV2ViQ29yZTo6QmxvYkRhdGFIYW5kbGU6On5CbG9iRGF0YUhhbmRsZSk6CisgICAgICAgICog
cGxhdGZvcm0vbmV0d29yay9CbG9iRGF0YS5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChCbG9iRGF0YUhhbmRsZSk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iRGF0YUhhbmRsZTo6Y3Jl
YXRlKToKKwogMjAxMy0wMi0wNCAgRGltYSBHb3JiaWsgIDxkZ29yYmlrQGFwcGxlLmNvbT4KIAog
ICAgICAgICBJbXBsZW1ldCA6bGFuZygpIHBzZXVkbyBjbGFzcyBzdXBwb3J0IGZvciB0aGUgV2Vi
VlRUIDo6Y3VlIHBzZXVkbyBlbGVtZW50CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2Zp
bGVzeXN0ZW0vRE9NRmlsZVN5c3RlbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9maWxlc3lzdGVtL0RPTUZpbGVTeXN0ZW0uY3BwCShyZXZpc2lvbiAxNDE3OTEpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZpbGVzeXN0ZW0vRE9NRmlsZVN5c3RlbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE0OCwxOSArMTQ4LDI0IEBAIHZvaWQgRE9NRmlsZVN5c3RlbTo6Y3Jl
YXRlV3JpdGVyKGNvbnN0IEYKIAogbmFtZXNwYWNlIHsKIAotY2xhc3MgR2V0TWV0YWRhdGFDYWxs
YmFjayA6IHB1YmxpYyBGaWxlU3lzdGVtQ2FsbGJhY2tzQmFzZSB7CitjbGFzcyBTbmFwc2hvdEZp
bGVDYWxsYmFjayA6IHB1YmxpYyBGaWxlU3lzdGVtQ2FsbGJhY2tzQmFzZSB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFBhc3NPd25QdHI8R2V0TWV0YWRhdGFDYWxsYmFjaz4gY3JlYXRlKFBhc3NSZWZQ
dHI8RE9NRmlsZVN5c3RlbT4gZmlsZXN5c3RlbSwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBL
VVJMJiB1cmwsIFBhc3NSZWZQdHI8RmlsZUNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NS
ZWZQdHI8RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaykKKyAgICBzdGF0aWMgUGFzc093blB0
cjxTbmFwc2hvdEZpbGVDYWxsYmFjaz4gY3JlYXRlKFBhc3NSZWZQdHI8RE9NRmlsZVN5c3RlbT4g
ZmlsZXN5c3RlbSwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBLVVJMJiB1cmwsIFBhc3NSZWZQ
dHI8RmlsZUNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFj
az4gZXJyb3JDYWxsYmFjaykKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgR2V0
TWV0YWRhdGFDYWxsYmFjayhmaWxlc3lzdGVtLCBuYW1lLCB1cmwsIHN1Y2Nlc3NDYWxsYmFjaywg
ZXJyb3JDYWxsYmFjaykpOworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFNuYXBzaG90Rmls
ZUNhbGxiYWNrKGZpbGVzeXN0ZW0sIG5hbWUsIHVybCwgc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNh
bGxiYWNrKSk7CiAgICAgfQogCi0gICAgdmlydHVhbCB2b2lkIGRpZFJlYWRNZXRhZGF0YShjb25z
dCBGaWxlTWV0YWRhdGEmIG1ldGFkYXRhKQorICAgIHZpcnR1YWwgdm9pZCBkaWRDcmVhdGVTbmFw
c2hvdEZpbGUoY29uc3QgRmlsZU1ldGFkYXRhJiBtZXRhZGF0YSwgUGFzc1JlZlB0cjxCbG9iRGF0
YUhhbmRsZT4gc25hcHNob3QpCiAgICAgewogICAgICAgICBBU1NFUlQoIW1ldGFkYXRhLnBsYXRm
b3JtUGF0aC5pc0VtcHR5KCkpOwogICAgICAgICBpZiAoIW1fc3VjY2Vzc0NhbGxiYWNrKQogICAg
ICAgICAgICAgcmV0dXJuOwogCisgICAgICAgIC8vIFdlIGNhbid0IGRpcmVjdGx5IHVzZSB0aGUg
c25hcHNob3QgYmxvYiBkYXRhIGhhbmRsZSBiZWNhdXNlIHRoZSBjb250ZW50IHR5cGUgb24gaXQg
aGFzbid0IGJlZW4gc2V0LgorICAgICAgICAvLyBUaGUgfHNuYXBzaG90fCBwYXJhbSBpcyBoZXJl
IHRvIHByb3ZpZGUgYSBhIGNoYWluIG9mIGN1c3RvZHkgdGhydSB0aHJlYWQgYnJpZGdpbmcgdGhh
dCBpcyBoZWxkIG9udG8gdW50aWwKKyAgICAgICAgLy8gKmFmdGVyKiB3ZSd2ZSBjb2luZWQgYSBG
aWxlIHdpdGggYSBuZXcgaGFuZGxlIHRoYXQgaGFzIHRoZSBjb3JyZWN0IHR5cGUgc2V0IG9uIGl0
LiBUaGlzIGFsbG93cyB0aGUKKyAgICAgICAgLy8gYmxvYiBzdG9yYWdlIHN5c3RlbSB0byB0cmFj
ayB3aGVuIGEgdGVtcCBmaWxlIGNhbiBhbmQgY2FuJ3QgYmUgc2FmZWx5IGRlbGV0ZWQuCisKICAg
ICAgICAgLy8gRm9yIHJlZ3VsYXIgZmlsZXN5c3RlbSB0eXBlcyAodGVtcG9yYXJ5IG9yIHBlcnNp
c3RlbnQpLCB3ZSBzaG91bGQgbm90IGNhY2hlIGZpbGUgbWV0YWRhdGEgYXMgaXQgY291bGQgY2hh
bmdlIEZpbGUgc2VtYW50aWNzLgogICAgICAgICAvLyBGb3Igb3RoZXIgZmlsZXN5c3RlbSB0eXBl
cyAod2hpY2ggY291bGQgYmUgcGxhdGZvcm0tc3BlY2lmaWMgb25lcyksIHRoZXJlJ3MgYSBjaGFu
Y2UgdGhhdCB0aGUgZmlsZXMgYXJlIG9uIHJlbW90ZSBmaWxlc3lzdGVtLiBJZiB0aGUgcG9ydCBo
YXMgcmV0dXJuZWQgbWV0YWRhdGEganVzdCBwYXNzIGl0IHRvIEZpbGUgY29uc3RydWN0b3IgKHNv
IHdlIG1heSBjYWNoZSB0aGUgbWV0YWRhdGEpLgogICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IHVzZSB0aGUgc25hcHNob3QgbWV0YWRhdGEgZm9yIGFsbCBmaWxlcy4KQEAgLTE3OSw3ICsxODQs
NyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIEdldE1ldGFkYXRhQ2FsbGJhY2so
UGFzc1JlZlB0cjxET01GaWxlU3lzdGVtPiBmaWxlc3lzdGVtLCBjb25zdCBTdHJpbmcmIG5hbWUs
ICBjb25zdCBLVVJMJiB1cmwsIFBhc3NSZWZQdHI8RmlsZUNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJh
Y2ssIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaykKKyAgICBTbmFwc2hv
dEZpbGVDYWxsYmFjayhQYXNzUmVmUHRyPERPTUZpbGVTeXN0ZW0+IGZpbGVzeXN0ZW0sIGNvbnN0
IFN0cmluZyYgbmFtZSwgIGNvbnN0IEtVUkwmIHVybCwgUGFzc1JlZlB0cjxGaWxlQ2FsbGJhY2s+
IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNr
KQogICAgICAgICA6IEZpbGVTeXN0ZW1DYWxsYmFja3NCYXNlKGVycm9yQ2FsbGJhY2spCiAgICAg
ICAgICwgbV9maWxlc3lzdGVtKGZpbGVzeXN0ZW0pCiAgICAgICAgICwgbV9uYW1lKG5hbWUpCkBA
IC0xOTksNyArMjA0LDcgQEAgcHJpdmF0ZToKIHZvaWQgRE9NRmlsZVN5c3RlbTo6Y3JlYXRlRmls
ZShjb25zdCBGaWxlRW50cnkqIGZpbGVFbnRyeSwgUGFzc1JlZlB0cjxGaWxlQ2FsbGJhY2s+IHN1
Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrKQog
ewogICAgIEtVUkwgZmlsZVN5c3RlbVVSTCA9IGNyZWF0ZUZpbGVTeXN0ZW1VUkwoZmlsZUVudHJ5
KTsKLSAgICBtX2FzeW5jRmlsZVN5c3RlbS0+Y3JlYXRlU25hcHNob3RGaWxlQW5kUmVhZE1ldGFk
YXRhKGZpbGVTeXN0ZW1VUkwsIEdldE1ldGFkYXRhQ2FsbGJhY2s6OmNyZWF0ZSh0aGlzLCBmaWxl
RW50cnktPm5hbWUoKSwgZmlsZVN5c3RlbVVSTCwgc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxi
YWNrKSk7CisgICAgbV9hc3luY0ZpbGVTeXN0ZW0tPmNyZWF0ZVNuYXBzaG90RmlsZUFuZFJlYWRN
ZXRhZGF0YShmaWxlU3lzdGVtVVJMLCBTbmFwc2hvdEZpbGVDYWxsYmFjazo6Y3JlYXRlKHRoaXMs
IGZpbGVFbnRyeS0+bmFtZSgpLCBmaWxlU3lzdGVtVVJMLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9y
Q2FsbGJhY2spKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9maWxlc3lzdGVtL0RPTUZpbGVTeXN0ZW1TeW5jLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZpbGVzeXN0ZW0vRE9NRmlsZVN5c3RlbVN5bmMu
Y3BwCShyZXZpc2lvbiAxNDE3OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZpbGVzeXN0
ZW0vRE9NRmlsZVN5c3RlbVN5bmMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsMTAgKzExMywx
NiBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIHZvaWQgZGlkUmVhZE1ldGFkYXRhKGNv
bnN0IEZpbGVNZXRhZGF0YSYgbWV0YWRhdGEpCisgICAgdmlydHVhbCB2b2lkIGRpZENyZWF0ZVNu
YXBzaG90RmlsZShjb25zdCBGaWxlTWV0YWRhdGEmIG1ldGFkYXRhLCBQYXNzUmVmUHRyPEJsb2JE
YXRhSGFuZGxlPiBzbmFwc2hvdCkKICAgICB7CisgICAgICAgIC8vIFdlIGNhbid0IGRpcmVjdGx5
IHVzZSB0aGUgc25hcHNob3QgYmxvYiBkYXRhIGhhbmRsZSBiZWNhdXNlIHRoZSBjb250ZW50IHR5
cGUgb24gaXQgaGFzbid0IGJlZW4gc2V0LgorICAgICAgICAvLyBUaGUgfHNuYXBzaG90fCBwYXJh
bSBpcyBoZXJlIHRvIHByb3ZpZGUgYSBhIGNoYWluIG9mIGN1c3RvZHkgdGhydSB0aHJlYWQgYnJp
ZGdpbmcgdGhhdCBpcyBoZWxkIG9udG8gdW50aWwKKyAgICAgICAgLy8gKmFmdGVyKiB3ZSd2ZSBj
b2luZWQgYSBGaWxlIHdpdGggYSBuZXcgaGFuZGxlIHRoYXQgaGFzIHRoZSBjb3JyZWN0IHR5cGUg
c2V0IG9uIGl0LiBUaGlzIGFsbG93cyB0aGUKKyAgICAgICAgLy8gYmxvYiBzdG9yYWdlIHN5c3Rl
bSB0byB0cmFjayB3aGVuIGEgdGVtcCBmaWxlIGNhbiBhbmQgY2FuJ3QgYmUgc2FmZWx5IGRlbGV0
ZWQuCisKICAgICAgICAgLy8gRm9yIHJlZ3VsYXIgZmlsZXN5c3RlbSB0eXBlcyAodGVtcG9yYXJ5
IG9yIHBlcnNpc3RlbnQpLCB3ZSBzaG91bGQgbm90IGNhY2hlIGZpbGUgbWV0YWRhdGEgYXMgaXQg
Y291bGQgY2hhbmdlIEZpbGUgc2VtYW50aWNzLgotICAgICAgICAvLyBGb3Igb3RoZXIgZmlsZXN5
c3RlbSB0eXBlcyAod2hpY2ggY291bGQgYmUgcGxhdGZvcm0tc3BlY2lmaWMgb25lcyksIHRoZXJl
J3MgYSBjaGFuY2UgdGhhdCB0aGUgZmlsZXMgYXJlIG9uIHJlbW90ZSBmaWxlc3lzdGVtLiBJZiB0
aGUgcG9ydCBoYXMgcmV0dXJuZWQgbWV0YWRhdGEganVzdCBwYXNzIGl0IHRvIEZpbGUgY29uc3Ry
dWN0b3IgKHNvIHdlIG1heSBjYWNoZSB0aGUgbWV0YWRhdGEpLgorICAgICAgICAvLyBGb3Igb3Ro
ZXIgZmlsZXN5c3RlbSB0eXBlcyAod2hpY2ggY291bGQgYmUgcGxhdGZvcm0tc3BlY2lmaWMgb25l
cyksIHRoZXJlJ3MgYSBjaGFuY2UgdGhhdCB0aGUgZmlsZXMgYXJlIG9uIHJlbW90ZSBmaWxlc3lz
dGVtLgorICAgICAgICAvLyBJZiB0aGUgcG9ydCBoYXMgcmV0dXJuZWQgbWV0YWRhdGEganVzdCBw
YXNzIGl0IHRvIEZpbGUgY29uc3RydWN0b3IgKHNvIHdlIG1heSBjYWNoZSB0aGUgbWV0YWRhdGEp
LgogICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHVzZSB0aGUgc25hcHNob3QgbWV0YWRhdGEg
Zm9yIGFsbCBmaWxlcy4KICAgICAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL0J1Z3MvUHVibGlj
L3Nob3dfYnVnLmNnaT9pZD0xNzc0NgogICAgICAgICBpZiAobV90eXBlID09IEZpbGVTeXN0ZW1U
eXBlVGVtcG9yYXJ5IHx8IG1fdHlwZSA9PSBGaWxlU3lzdGVtVHlwZVBlcnNpc3RlbnQpIHsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0FzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0FzeW5jRmlsZVN5c3RlbUNhbGxi
YWNrcy5oCShyZXZpc2lvbiAxNDE3OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Bc3lu
Y0ZpbGVTeXN0ZW1DYWxsYmFja3MuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAog
CiAjaW5jbHVkZSAiQXN5bmNGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiQXN5bmNGaWxlV3JpdGVy
LmgiCisjaW5jbHVkZSAiQmxvYkRhdGEuaCIKICNpbmNsdWRlICJGaWxlTWV0YWRhdGEuaCIKICNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtNTQsNiArNTUsOSBAQCBwdWJsaWM6
CiAgICAgLy8gQ2FsbGVkIHdoZW4gYSBmaWxlIG1ldGFkYXRhIGlzIHJlYWQgc3VjY2Vzc2Z1bGx5
LgogICAgIHZpcnR1YWwgdm9pZCBkaWRSZWFkTWV0YWRhdGEoY29uc3QgRmlsZU1ldGFkYXRhJikg
eyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogCisgICAgLy8gQ2FsbGVkIHdoZW4gYSBzbmFwc2hv
dCBmaWxlIGlzIGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5LgorICAgIHZpcnR1YWwgdm9pZCBkaWRDcmVh
dGVTbmFwc2hvdEZpbGUoY29uc3QgRmlsZU1ldGFkYXRhJiwgUGFzc1JlZlB0cjxCbG9iRGF0YUhh
bmRsZT4gc25hcHNob3QpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKwogICAgIC8vIENhbGxl
ZCB3aGVuIGEgZGlyZWN0b3J5IGVudHJ5IGlzIHJlYWQuCiAgICAgdmlydHVhbCB2b2lkIGRpZFJl
YWREaXJlY3RvcnlFbnRyeShjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgaXNEaXJlY3RvcnkpIHsg
QVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL0FzeW5jRmlsZVN5c3RlbUd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL0FzeW5jRmlsZVN5c3RlbUd0ay5jcHAJKHJldmlzaW9uIDE0MTc5MSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Bc3luY0ZpbGVTeXN0ZW1HdGsuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTgsNiArMTE4LDExIEBAIHZvaWQgQXN5bmNGaWxlU3lzdGVtR3RrOjpj
cmVhdGVXcml0ZXIoQXMKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCit2b2lkIEFzeW5jRmls
ZVN5c3RlbUd0azo6Y3JlYXRlU25hcHNob3RGaWxlQW5kUmVhZE1ldGFkYXRhKGNvbnN0IEtVUkwm
LCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4pCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYkRhdGEuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYkRhdGEuY3BwCShyZXZpc2lvbiAx
NDE3OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JEYXRhLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsOCBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiQmxvYkRhdGEuaCIKKyNpbmNsdWRlICJCbG9iVVJMLmgiCisjaW5jbHVkZSAiVGhy
ZWFkYWJsZUJsb2JSZWdpc3RyeS5oIgogCiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1
ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CkBAIC0xMDEsNCArMTAzLDE3IEBAIHZvaWQgQmxvYkRhdGE6
OnN3YXBJdGVtcyhCbG9iRGF0YUl0ZW1MaXMKICAgICBtX2l0ZW1zLnN3YXAoaXRlbXMpOwogfQog
CisKK0Jsb2JEYXRhSGFuZGxlOjpCbG9iRGF0YUhhbmRsZShQYXNzT3duUHRyPEJsb2JEYXRhPiBk
YXRhLCBsb25nIGxvbmcgc2l6ZSkKK3sKKyAgICBVTlVTRURfUEFSQU0oc2l6ZSk7CisgICAgbV9p
bnRlcm5hbFVSTCA9IEJsb2JVUkw6OmNyZWF0ZUludGVybmFsVVJMKCk7CisgICAgVGhyZWFkYWJs
ZUJsb2JSZWdpc3RyeTo6cmVnaXN0ZXJCbG9iVVJMKG1faW50ZXJuYWxVUkwsIGRhdGEpOworfQor
CitCbG9iRGF0YUhhbmRsZTo6fkJsb2JEYXRhSGFuZGxlKCkKK3sKKyAgICBUaHJlYWRhYmxlQmxv
YlJlZ2lzdHJ5Ojp1bnJlZ2lzdGVyQmxvYlVSTChtX2ludGVybmFsVVJMKTsKK30KKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9C
bG9iRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
QmxvYkRhdGEuaAkocmV2aXNpb24gMTQxNzkxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9CbG9iRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDIsNiArMjAyLDIyIEBAIHBy
aXZhdGU6CiAgICAgQmxvYkRhdGFJdGVtTGlzdCBtX2l0ZW1zOwogfTsKIAorLy8gRklYTUU6IFRo
aXMgY2xhc3MgaXMgbW9zdGx5IHBsYWNlIGhvbGRlciB1bnRpbCBJIGdldCBmYXJ0aGVyIGFsb25n
IGluIGxhbmRpbmcKKy8vIGh0dHBzOi8vY29kZXJldmlldy5jaHJvbWl1bS5vcmcvMTExOTIwMTcv
LgorY2xhc3MgQmxvYkRhdGFIYW5kbGUgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Qmxv
YkRhdGFIYW5kbGU+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCbG9iRGF0YUhh
bmRsZT4gY3JlYXRlKFBhc3NPd25QdHI8QmxvYkRhdGE+IGRhdGEsIGxvbmcgbG9uZyBzaXplKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBCbG9iRGF0YUhhbmRsZShkYXRhLCBz
aXplKSk7CisgICAgfQorCisgICAgfkJsb2JEYXRhSGFuZGxlKCk7CisKK3ByaXZhdGU6CisgICAg
QmxvYkRhdGFIYW5kbGUoUGFzc093blB0cjxCbG9iRGF0YT4sIGxvbmcgbG9uZyBzaXplKTsKKyAg
ICBLVVJMIG1faW50ZXJuYWxVUkw7Cit9OworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNl
bmRpZiAvLyBCbG9iRGF0YV9oCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNp
b24gMTQxNzk1KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSw0NCBAQAorMjAxMy0wMi0wNCAgTWljaGFlbCBOb3JkbWFuICA8bWlj
aGFlbG5AZ29vZ2xlLmNvbT4KKworICAgICAgICBbQ2hyb21pdW1dIEZpbGVTeXN0ZW0gbW9kczog
Q2hhbmdlcyB0byBzbmFwc2hvdCBmaWxlIGNyZWF0aW9uIHRvIHJlZHVjZSBkZXBlbmRlbmNpZXMg
b24gYmxvYnMuCisgICAgICAgIE5vIGxvbmdlciBzZW5kIGEgfGJsb2JVUkx8IHRvIHRoZSBicm93
c2VyIHByb2Nlc3MsIG5vIGxvbmdlciBleHBlY3QgdGhlIGJyb3dzZXIgcHJvY2VzcworICAgICAg
ICB0byBoYXZlIHJlZ2lzdGVyZWQgYSBibG9iIHdpdGggdGhhdCB1cmwuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDg4NTEKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHNyYy9Bc3luY0ZpbGVTeXN0ZW1D
aHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVX
cml0ZXJIZWxwZXJDYWxsYmFja3M6OmRpZENyZWF0ZVNuYXBzaG90RmlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bTo6Y3JlYXRlU25hcHNob3RGaWxlQW5kUmVh
ZE1ldGFkYXRhKToKKyAgICAgICAgKiBzcmMvQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uaDoKKyAg
ICAgICAgKEFzeW5jRmlsZVN5c3RlbUNocm9taXVtKToKKyAgICAgICAgKiBzcmMvTG9jYWxGaWxl
U3lzdGVtQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogc3JjL1dl
YkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRmlsZVN5
c3RlbUNhbGxiYWNrc0ltcGw6OmRpZENyZWF0ZVNuYXBzaG90RmlsZSk6CisgICAgICAgIChXZWJL
aXQpOgorICAgICAgICAqIHNyYy9XZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbC5oOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbCk6CisgICAg
ICAgICogc3JjL1dvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVtLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OldvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVtOjpjcmVhdGVTbmFwc2hvdEZpbGVB
bmRSZWFkTWV0YWRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyQXN5bmNGaWxlU3lzdGVt
Q2hyb21pdW06OmNyZWF0ZVdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UpOgorICAgICAg
ICAqIHNyYy9Xb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6TWFpblRocmVhZEZpbGVTeXN0ZW1DYWxsYmFja3M6OmRpZENyZWF0ZVNuYXBzaG90Rmls
ZSk6CisgICAgICAgIChNYWluVGhyZWFkRmlsZVN5c3RlbUNhbGxiYWNrcyk6CisgICAgICAgIChX
ZWJLaXQ6OldvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OnBvc3RDcmVhdGVTbmFwc2hv
dEZpbGVUb01haW5UaHJlYWQpOgorICAgICAgICAoV2ViS2l0OjpXb3JrZXJGaWxlU3lzdGVtQ2Fs
bGJhY2tzQnJpZGdlOjpjcmVhdGVTbmFwc2hvdEZpbGVPbk1haW5UaHJlYWQpOgorICAgICAgICAo
V2ViS2l0OjpXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpkaWRDcmVhdGVTbmFwc2hv
dEZpbGVPbk1haW5UaHJlYWQpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6
V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNr
c0JyaWRnZSk6CisgICAgICAgIChXZWJLaXQ6OldvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlk
Z2U6OmRpZENyZWF0ZVNuYXBzaG90RmlsZU9uV29ya2VyVGhyZWFkKToKKyAgICAgICAgKiBzcmMv
V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZS5oOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpXb3JrZXJGaWxlU3lzdGVtQ2FsbGJh
Y2tzQnJpZGdlOjpjcmVhdGUpOgorICAgICAgICAoV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0Jy
aWRnZSk6CisKIDIwMTMtMDItMDQgIE1hcmsgUGlsZ3JpbSAgPHBpbGdyaW1AY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFtDaHJvbWl1bV0gTW92ZSBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZSB0
byBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3luY0ZpbGVTeXN0
ZW1DaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
QXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uY3BwCShyZXZpc2lvbiAxNDE3OTEpCisrKyBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9Bc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ4LDQ2ICs0OCw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotbmFtZXNw
YWNlIHsKLQotLy8gU3BlY2lhbGl6ZWQgY2FsbGJhY2sgY2xhc3MgZm9yIGNyZWF0ZVNuYXBzaG90
RmlsZUFuZFJlYWRNZXRhZGF0YS4KLWNsYXNzIFNuYXBzaG90RmlsZUNhbGxiYWNrcyA6IHB1Ymxp
YyBBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3MgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3du
UHRyPFNuYXBzaG90RmlsZUNhbGxiYWNrcz4gY3JlYXRlKGNvbnN0IEtVUkwmIGludGVybmFsQmxv
YlVSTCwgUGFzc093blB0cjxXZWJDb3JlOjpBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+IGNhbGxi
YWNrcykKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgU25hcHNob3RGaWxlQ2Fs
bGJhY2tzKGludGVybmFsQmxvYlVSTCwgY2FsbGJhY2tzKSk7Ci0gICAgfQotCi0gICAgdmlydHVh
bCB2b2lkIGRpZFJlYWRNZXRhZGF0YShjb25zdCBGaWxlTWV0YWRhdGEmIG1ldGFkYXRhKQotICAg
IHsKLSAgICAgICAgQVNTRVJUKG1fY2FsbGJhY2tzKTsKLQotICAgICAgICAvLyBUaGlzIHdpbGwg
Y3JlYXRlIGEgbmV3IEZpbGUgb2JqZWN0IHVzaW5nIHRoZSBtZXRhZGF0YS4KLSAgICAgICAgbV9j
YWxsYmFja3MtPmRpZFJlYWRNZXRhZGF0YShtZXRhZGF0YSk7Ci0KLSAgICAgICAgLy8gTm93IHRo
YXQgd2UndmUgcmVnaXN0ZXJlZCB0aGUgc25hcHNob3QgZmlsZSwgd2UgY2FuIHVucmVnaXN0ZXIg
b3VyIGludGVybmFsQmxvYlVSTCB3aGljaCBoYXMgcGxheWVkIGEgcGxhY2Vob2xkZXIgZm9yIHRo
ZSBmaWxlIGR1cmluZyB0aGUgSVBDLgotICAgICAgICBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5Ojp1
bnJlZ2lzdGVyQmxvYlVSTChtX2ludGVybmFsQmxvYlVSTCk7Ci0gICAgfQotCi0gICAgdmlydHVh
bCB2b2lkIGRpZEZhaWwoaW50IGVycm9yKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fY2FsbGJh
Y2tzKTsKLSAgICAgICAgbV9jYWxsYmFja3MtPmRpZEZhaWwoZXJyb3IpOwotICAgIH0KLQotcHJp
dmF0ZToKLSAgICBTbmFwc2hvdEZpbGVDYWxsYmFja3MoY29uc3QgS1VSTCYgaW50ZXJuYWxCbG9i
VVJMLCBQYXNzT3duUHRyPFdlYkNvcmU6OkFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4gY2FsbGJh
Y2tzKQotICAgICAgICA6IG1faW50ZXJuYWxCbG9iVVJMKGludGVybmFsQmxvYlVSTCkKLSAgICAg
ICAgLCBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCi0gICAgewotICAgIH0KLQotICAgIEtVUkwgbV9p
bnRlcm5hbEJsb2JVUkw7Ci0gICAgT3duUHRyPFdlYkNvcmU6OkFzeW5jRmlsZVN5c3RlbUNhbGxi
YWNrcz4gbV9jYWxsYmFja3M7Ci19OwotCi19IC8vIG5hbWVzcGFjZQotCiBib29sIEFzeW5jRmls
ZVN5c3RlbTo6aXNBdmFpbGFibGUoKQogewogICAgIHJldHVybiB0cnVlOwpAQCAtMTg2LDcgKzE0
NiwxMSBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICAgICAgZGVsZXRlIHRoaXM7CiAgICAgfQot
CisgICAgdmlydHVhbCB2b2lkIGRpZENyZWF0ZVNuYXBzaG90RmlsZShjb25zdCBXZWJLaXQ6Oldl
YkZpbGVJbmZvJiBpbmZvKQorICAgIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIGRlbGV0ZSB0aGlzOworICAgIH0KICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVhZERpcmVj
dG9yeShjb25zdCBXZWJLaXQ6OldlYlZlY3RvcjxXZWJLaXQ6OldlYkZpbGVTeXN0ZW1FbnRyeT4m
IGVudHJpZXMsIGJvb2wgaGFzTW9yZSkKICAgICB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwpAQCAtMjE5LDE1ICsxODMsNyBAQCB2b2lkIEFzeW5jRmlsZVN5c3RlbUNocm9taXVtOjpj
cmVhdGVXcml0CiAKIHZvaWQgQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW06OmNyZWF0ZVNuYXBzaG90
RmlsZUFuZFJlYWRNZXRhZGF0YShjb25zdCBLVVJMJiBwYXRoLCBQYXNzT3duUHRyPEFzeW5jRmls
ZVN5c3RlbUNhbGxiYWNrcz4gY2FsbGJhY2tzKQogewotICAgIEtVUkwgaW50ZXJuYWxCbG9iVVJM
ID0gQmxvYlVSTDo6Y3JlYXRlSW50ZXJuYWxVUkwoKTsKLQotICAgIC8vIFRoaXMgd2lsbCBjcmVh
dGUgYSBzbmFwc2hvdCBmaWxlIGFuZCByZWdpc3RlciB0aGUgZmlsZSB0byBhIGJsb2IgdXNpbmcg
dGhlIGdpdmVuIGludGVybmFsQmxvYlVSTC4KLSAgICBtX3dlYkZpbGVTeXN0ZW0tPmNyZWF0ZVNu
YXBzaG90RmlsZUFuZFJlYWRNZXRhZGF0YShpbnRlcm5hbEJsb2JVUkwsIHBhdGgsIG5ldyBXZWJL
aXQ6OldlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsKGNyZWF0ZVNuYXBzaG90RmlsZUNhbGxiYWNr
KGludGVybmFsQmxvYlVSTCwgY2FsbGJhY2tzKSkpOwotfQotCi1QYXNzT3duUHRyPEFzeW5jRmls
ZVN5c3RlbUNhbGxiYWNrcz4gQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW06OmNyZWF0ZVNuYXBzaG90
RmlsZUNhbGxiYWNrKGNvbnN0IEtVUkwmIGludGVybmFsQmxvYlVSTCwgUGFzc093blB0cjxBc3lu
Y0ZpbGVTeXN0ZW1DYWxsYmFja3M+IGNhbGxiYWNrcykgY29uc3QKLXsKLSAgICByZXR1cm4gU25h
cHNob3RGaWxlQ2FsbGJhY2tzOjpjcmVhdGUoaW50ZXJuYWxCbG9iVVJMLCBjYWxsYmFja3MpOwor
ICAgIG1fd2ViRmlsZVN5c3RlbS0+Y3JlYXRlU25hcHNob3RGaWxlQW5kUmVhZE1ldGFkYXRhKHBh
dGgsIG5ldyBXZWJLaXQ6OldlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsKGNhbGxiYWNrcykpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9Bc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL0FzeW5jRmlsZVN5c3RlbUNocm9taXVtLmgJKHJldmlzaW9uIDE0MTc5
MSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0FzeW5jRmlsZVN5c3RlbUNocm9taXVt
LmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDggKzY5LDYgQEAgcHVibGljOgogcHJvdGVjdGVkOgog
ICAgIEFzeW5jRmlsZVN5c3RlbUNocm9taXVtKCk7CiAKLSAgICBQYXNzT3duUHRyPEFzeW5jRmls
ZVN5c3RlbUNhbGxiYWNrcz4gY3JlYXRlU25hcHNob3RGaWxlQ2FsbGJhY2soY29uc3QgS1VSTCYg
aW50ZXJuYWxCbG9iVVJMLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4pIGNv
bnN0OwotCiAgICAgV2ViS2l0OjpXZWJGaWxlU3lzdGVtKiBtX3dlYkZpbGVTeXN0ZW07CiB9Owog
CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Mb2NhbEZpbGVTeXN0ZW1DaHJvbWl1
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvTG9jYWxGaWxl
U3lzdGVtQ2hyb21pdW0uY3BwCShyZXZpc2lvbiAxNDE3OTEpCisrKyBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9Mb2NhbEZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE1Myw3ICsxNTMsNyBAQCBib29sIGFsbG93RmlsZVN5c3RlbUZvcldvcmtlcihXZWJDb21tb25X
CiAgICAgcmV0dXJuIGJyaWRnZS0+cmVzdWx0KCk7CiB9CiAKLXZvaWQgb3BlbkZpbGVTeXN0ZW1G
b3JXb3JrZXIoV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQsIFdlYkZpbGVTeXN0
ZW06OlR5cGUgdHlwZSwgbG9uZyBsb25nIHNpemUsIGJvb2wgY3JlYXRlLCBXZWJGaWxlU3lzdGVt
Q2FsbGJhY2tzKiBjYWxsYmFja3MsIEZpbGVTeXN0ZW1TeW5jaHJvbm91c1R5cGUgc3luY2hyb25v
dXNUeXBlKQordm9pZCBvcGVuRmlsZVN5c3RlbUZvcldvcmtlcihXZWJDb21tb25Xb3JrZXJDbGll
bnQqIGNvbW1vbkNsaWVudCwgV2ViRmlsZVN5c3RlbTo6VHlwZSB0eXBlLCBsb25nIGxvbmcgc2l6
ZSwgYm9vbCBjcmVhdGUsIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsKiBjYWxsYmFja3MsIEZp
bGVTeXN0ZW1TeW5jaHJvbm91c1R5cGUgc3luY2hyb25vdXNUeXBlKQogewogICAgIFdvcmtlclNj
cmlwdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpjb250
cm9sbGVyRm9yQ29udGV4dCgpOwogICAgIFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQgPSBj
b250cm9sbGVyLT53b3JrZXJDb250ZXh0KCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwuY3BwCShyZXZp
c2lvbiAxNDE3OTEpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGaWxlU3lzdGVt
Q2FsbGJhY2tzSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDYgKzc2LDI3IEBAIHZvaWQg
V2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGw6OmRpZFJlYWQKICAgICBkZWxldGUgdGhpczsKIH0K
IAordm9pZCBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbDo6ZGlkQ3JlYXRlU25hcHNob3RGaWxl
KGNvbnN0IFdlYkZpbGVJbmZvJiB3ZWJGaWxlSW5mbykKK3sKKyAgICAvLyBJdCdzIGltcG9ydGFu
dCB0byBjcmVhdGUgYSBCbG9iRGF0YUhhbmRsZSB0aGF0IHJlZmVycyB0byB0aGUgcGxhdGZvcm0g
ZmlsZSBwYXRoIHByaW9yCisgICAgLy8gdG8gcmV0dXJuIGZyb20gdGhpcyBtZXRob2Qgc28gdGhl
IHVuZGVybHlpbmcgZmlsZSB3aWxsIG5vdCBiZSBkZWxldGVkLgorICAgIE93blB0cjxCbG9iRGF0
YT4gYmxvYkRhdGEgPSBCbG9iRGF0YTo6Y3JlYXRlKCk7CisgICAgYmxvYkRhdGEtPmFwcGVuZEZp
bGUod2ViRmlsZUluZm8ucGxhdGZvcm1QYXRoKTsKKyAgICBSZWZQdHI8QmxvYkRhdGFIYW5kbGU+
IHNuYXBzaG90QmxvYiA9IEJsb2JEYXRhSGFuZGxlOjpjcmVhdGUoYmxvYkRhdGEucmVsZWFzZSgp
LCB3ZWJGaWxlSW5mby5sZW5ndGgpOworICAgIGRpZENyZWF0ZVNuYXBzaG90RmlsZSh3ZWJGaWxl
SW5mbywgc25hcHNob3RCbG9iKTsKK30KKwordm9pZCBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1w
bDo6ZGlkQ3JlYXRlU25hcHNob3RGaWxlKGNvbnN0IFdlYkZpbGVJbmZvJiB3ZWJGaWxlSW5mbywg
UGFzc1JlZlB0cjxXZWJDb3JlOjpCbG9iRGF0YUhhbmRsZT4gc25hcHNob3QpCit7CisgICAgRmls
ZU1ldGFkYXRhIGZpbGVNZXRhZGF0YTsKKyAgICBmaWxlTWV0YWRhdGEubW9kaWZpY2F0aW9uVGlt
ZSA9IHdlYkZpbGVJbmZvLm1vZGlmaWNhdGlvblRpbWU7CisgICAgZmlsZU1ldGFkYXRhLmxlbmd0
aCA9IHdlYkZpbGVJbmZvLmxlbmd0aDsKKyAgICBmaWxlTWV0YWRhdGEudHlwZSA9IHN0YXRpY19j
YXN0PEZpbGVNZXRhZGF0YTo6VHlwZT4od2ViRmlsZUluZm8udHlwZSk7CisgICAgZmlsZU1ldGFk
YXRhLnBsYXRmb3JtUGF0aCA9IHdlYkZpbGVJbmZvLnBsYXRmb3JtUGF0aDsKKyAgICBtX2NhbGxi
YWNrcy0+ZGlkQ3JlYXRlU25hcHNob3RGaWxlKGZpbGVNZXRhZGF0YSwgc25hcHNob3QpOworICAg
IGRlbGV0ZSB0aGlzOworfQorCiB2b2lkIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsOjpkaWRS
ZWFkRGlyZWN0b3J5KGNvbnN0IFdlYlZlY3RvcjxXZWJGaWxlU3lzdGVtRW50cnk+JiBlbnRyaWVz
LCBib29sIGhhc01vcmUpCiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBlbnRyaWVzLnNp
emUoKTsgKytpKQpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRmlsZVN5c3Rl
bUNhbGxiYWNrc0ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbC5oCShyZXZpc2lvbiAxNDE3OTEpCisrKyBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNz
IEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrczsKK2NsYXNzIEJsb2JEYXRhSGFuZGxlOwogY2xhc3Mg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIH0KIApAQCAtNTYsMTEgKzU3LDE3IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIH5XZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbCgpOwogCiAgICAgdmlydHVh
bCB2b2lkIGRpZFN1Y2NlZWQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVhZE1ldGFkYXRhKGNv
bnN0IFdlYkZpbGVJbmZvJiBpbmZvKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVhZE1ldGFkYXRh
KGNvbnN0IFdlYkZpbGVJbmZvJik7CisgICAgdmlydHVhbCB2b2lkIGRpZENyZWF0ZVNuYXBzaG90
RmlsZShjb25zdCBXZWJGaWxlSW5mbyYpOwogICAgIHZpcnR1YWwgdm9pZCBkaWRSZWFkRGlyZWN0
b3J5KGNvbnN0IFdlYlZlY3RvcjxXZWJGaWxlU3lzdGVtRW50cnk+JiBlbnRyaWVzLCBib29sIGhh
c01vcmUpOwogICAgIHZpcnR1YWwgdm9pZCBkaWRPcGVuRmlsZVN5c3RlbShjb25zdCBXZWJTdHJp
bmcmIG5hbWUsIGNvbnN0IFdlYlVSTCYgcm9vdFVSTCk7CiAgICAgdmlydHVhbCB2b2lkIGRpZEZh
aWwoV2ViRmlsZUVycm9yIGVycm9yKTsKIAorICAgIC8vIFRoaXMgaW50ZXJuYWwgb3ZlcmxvYWQg
aXMgdXNlZCBieSBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlIHRvIGRlbGl2ZXIgYSBi
bG9iIGRhdGEgaGFuZGxlCisgICAgLy8gY3JlYXRlZCBvbiB0aGUgbWFpbiB0aHJlYWQgdG8gYW4g
IEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrIG9uIGEgYmFja2dyb3VuZCB3b3JrZXIgdGhyZWFkLiBU
aGUgb3RoZXIKKyAgICAvLyB2aXJ0dWFsIG1ldGhvZCBpcyBpbnZva2VkIGJ5IHRoZSBlbWJlZGRl
ci4KKyAgICB2b2lkIGRpZENyZWF0ZVNuYXBzaG90RmlsZShjb25zdCBXZWJGaWxlSW5mbyYsIFBh
c3NSZWZQdHI8V2ViQ29yZTo6QmxvYkRhdGFIYW5kbGU+IHNuYXBzaG90KTsKKwogcHJpdmF0ZToK
ICAgICBPd25QdHI8V2ViQ29yZTo6QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPiBtX2NhbGxiYWNr
czsKIApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyQXN5bmNGaWxlU3lz
dGVtQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVtLmNwcAkocmV2aXNpb24gMTQxNzkxKQorKysg
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzksMTUgKzE3OSwxMiBAQCB2b2lkIFdvcmtlckFzeW5j
RmlsZVN5c3RlbUNocm9taXVtOjpjcmVhCiAKIHZvaWQgV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hy
b21pdW06OmNyZWF0ZVNuYXBzaG90RmlsZUFuZFJlYWRNZXRhZGF0YShjb25zdCBLVVJMJiBwYXRo
LCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4gY2FsbGJhY2tzKQogewotICAg
IEtVUkwgaW50ZXJuYWxCbG9iVVJMID0gQmxvYlVSTDo6Y3JlYXRlSW50ZXJuYWxVUkwoKTsKLQot
ICAgIGNyZWF0ZVdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UoY3JlYXRlU25hcHNob3RG
aWxlQ2FsbGJhY2soaW50ZXJuYWxCbG9iVVJMLCBjYWxsYmFja3MpKS0+cG9zdENyZWF0ZVNuYXBz
aG90RmlsZVRvTWFpblRocmVhZChtX3dlYkZpbGVTeXN0ZW0sIGludGVybmFsQmxvYlVSTCwgcGF0
aCwgbV9tb2RlRm9yQ3VycmVudE9wZXJhdGlvbik7CisgICAgY3JlYXRlV29ya2VyRmlsZVN5c3Rl
bUNhbGxiYWNrc0JyaWRnZShjYWxsYmFja3MpLT5wb3N0Q3JlYXRlU25hcHNob3RGaWxlVG9NYWlu
VGhyZWFkKG1fd2ViRmlsZVN5c3RlbSwgcGF0aCwgbV9tb2RlRm9yQ3VycmVudE9wZXJhdGlvbik7
CiB9CiAKIFBhc3NSZWZQdHI8V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZT4gV29ya2Vy
QXN5bmNGaWxlU3lzdGVtQ2hyb21pdW06OmNyZWF0ZVdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NC
cmlkZ2UoUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+IGNhbGxiYWNrcykKIHsK
ICAgICBBU1NFUlQobV9zeW5jaHJvbm91c1R5cGUgPT0gQXN5bmNocm9ub3VzRmlsZVN5c3RlbSB8
fCAhbV9icmlkZ2VGb3JDdXJyZW50T3BlcmF0aW9uKTsKLSAgICAodm9pZCltX3N5bmNocm9ub3Vz
VHlwZTsKIAogICAgIG1fbW9kZUZvckN1cnJlbnRPcGVyYXRpb24gPSBmaWxlU3lzdGVtT3BlcmF0
aW9uc01vZGU7CiAgICAgbV9tb2RlRm9yQ3VycmVudE9wZXJhdGlvbi5hcHBlbmQoU3RyaW5nOjpu
dW1iZXIobV93b3JrZXJDb250ZXh0LT50aHJlYWQoKS0+cnVuTG9vcCgpLmNyZWF0ZVVuaXF1ZUlk
KCkpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckZpbGVTeXN0ZW1D
YWxsYmFja3NCcmlkZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UuY3BwCShyZXZpc2lvbiAxNDE3OTEp
CisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tz
QnJpZGdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTAgKzMzLDExIEBACiAKICNpZiBFTkFC
TEUoRklMRV9TWVNURU0pICYmIEVOQUJMRShXT1JLRVJTKQogCisjaW5jbHVkZSAiQmxvYkRhdGEu
aCIKICNpbmNsdWRlICJDcm9zc1RocmVhZFRhc2suaCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5j
bHVkZSAiV2ViQ29tbW9uV29ya2VyQ2xpZW50LmgiCi0jaW5jbHVkZSAiV2ViRmlsZVN5c3RlbUNh
bGxiYWNrcy5oIgorI2luY2x1ZGUgIldlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsLmgiCiAjaW5j
bHVkZSAiV2ViRmlsZVN5c3RlbUVudHJ5LmgiCiAjaW5jbHVkZSAiV2ViV29ya2VyQmFzZS5oIgog
I2luY2x1ZGUgIldvcmtlckNvbnRleHQuaCIKQEAgLTEyNCw2ICsxMjUsMTcgQEAgcHVibGljOgog
ICAgICAgICBkZWxldGUgdGhpczsKICAgICB9CiAKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ3JlYXRl
U25hcHNob3RGaWxlKGNvbnN0IFdlYkZpbGVJbmZvJiBpbmZvKQorICAgIHsKKyAgICAgICAgLy8g
SXQncyBpbXBvcnRhbnQgdG8gY3JlYXRlIGEgQmxvYkRhdGFIYW5kbGUgdGhhdCByZWZlcnMgdG8g
dGhlIHBsYXRmb3JtIGZpbGUgcGF0aCBwcmlvcgorICAgICAgICAvLyB0byByZXR1cm4gZnJvbSB0
aGlzIG1ldGhvZCBzbyB0aGUgdW5kZXJseWluZyBmaWxlIHdpbGwgbm90IGJlIGRlbGV0ZWQuCisg
ICAgICAgIE93blB0cjxCbG9iRGF0YT4gYmxvYkRhdGEgPSBCbG9iRGF0YTo6Y3JlYXRlKCk7Cisg
ICAgICAgIGJsb2JEYXRhLT5hcHBlbmRGaWxlKGluZm8ucGxhdGZvcm1QYXRoKTsKKyAgICAgICAg
UmVmUHRyPEJsb2JEYXRhSGFuZGxlPiBzbmFwc2hvdEJsb2IgPSBCbG9iRGF0YUhhbmRsZTo6Y3Jl
YXRlKGJsb2JEYXRhLnJlbGVhc2UoKSwgaW5mby5sZW5ndGgpOworICAgICAgICBtX2JyaWRnZS0+
ZGlkQ3JlYXRlU25hcHNob3RGaWxlT25NYWluVGhyZWFkKGluZm8sIG1fbW9kZSwgc25hcHNob3RC
bG9iKTsKKyAgICAgICAgZGVsZXRlIHRoaXM7CisgICAgfQorCiAgICAgdmlydHVhbCB2b2lkIGRp
ZFJlYWREaXJlY3RvcnkoY29uc3QgV2ViVmVjdG9yPFdlYkZpbGVTeXN0ZW1FbnRyeT4mIGVudHJp
ZXMsIGJvb2wgaGFzTW9yZSkKICAgICB7CiAgICAgICAgIG1fYnJpZGdlLT5kaWRSZWFkRGlyZWN0
b3J5T25NYWluVGhyZWFkKGVudHJpZXMsIGhhc01vcmUsIG1fbW9kZSk7CkBAIC0yODksMTMgKzMw
MSwxMyBAQCB2b2lkIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OnBvCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0aGlzLCBtb2RlKSk7CiB9CiAKLXZvaWQgV29ya2VyRmlsZVN5
c3RlbUNhbGxiYWNrc0JyaWRnZTo6cG9zdENyZWF0ZVNuYXBzaG90RmlsZVRvTWFpblRocmVhZChX
ZWJGaWxlU3lzdGVtKiBmaWxlU3lzdGVtLCBjb25zdCBLVVJMJiBpbnRlcm5hbEJsb2JVUkwsIGNv
bnN0IEtVUkwmIHBhdGgsIGNvbnN0IFN0cmluZyYgbW9kZSkKK3ZvaWQgV29ya2VyRmlsZVN5c3Rl
bUNhbGxiYWNrc0JyaWRnZTo6cG9zdENyZWF0ZVNuYXBzaG90RmlsZVRvTWFpblRocmVhZChXZWJG
aWxlU3lzdGVtKiBmaWxlU3lzdGVtLCBjb25zdCBLVVJMJiBwYXRoLCBjb25zdCBTdHJpbmcmIG1v
ZGUpCiB7CiAgICAgQVNTRVJUKGZpbGVTeXN0ZW0pOwogICAgIGRpc3BhdGNoVGFza1RvTWFpblRo
cmVhZCgKICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZjcmVhdGVTbmFwc2hvdEZpbGVPbk1h
aW5UaHJlYWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbGxvd0Nyb3NzVGhyZWFkQWNj
ZXNzKGZpbGVTeXN0ZW0pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxCbG9i
VVJMLCBwYXRoLCB0aGlzLCBtb2RlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRo
LCB0aGlzLCBtb2RlKSk7CiB9CiAKIHZvaWQgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRn
ZTo6b3BlbkZpbGVTeXN0ZW1Pbk1haW5UaHJlYWQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdl
YkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50LCBXZWJGaWxlU3lzdGVtOjpUeXBlIHR5
cGUsIGxvbmcgbG9uZyBzaXplLCBib29sIGNyZWF0ZSwgUGFzc1JlZlB0cjxXb3JrZXJGaWxlU3lz
dGVtQ2FsbGJhY2tzQnJpZGdlPiBicmlkZ2UsIGNvbnN0IFN0cmluZyYgbW9kZSkKQEAgLTM1Nyw5
ICszNjksOSBAQCB2b2lkIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OnJlCiAgICAg
ZmlsZVN5c3RlbS0+cmVhZERpcmVjdG9yeShwYXRoLCBNYWluVGhyZWFkRmlsZVN5c3RlbUNhbGxi
YWNrczo6Y3JlYXRlTGVha2VkUHRyKGJyaWRnZSwgbW9kZSkpOwogfQogCi12b2lkIFdvcmtlckZp
bGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OmNyZWF0ZVNuYXBzaG90RmlsZU9uTWFpblRocmVhZChX
ZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViRmlsZVN5c3RlbSogZmlsZVN5c3Rl
bSwgY29uc3QgS1VSTCYgaW50ZXJuYWxCbG9iVVJMLCBjb25zdCBLVVJMJiBwYXRoLCBQYXNzUmVm
UHRyPFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U+IGJyaWRnZSwgY29uc3QgU3RyaW5n
JiBtb2RlKQordm9pZCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpjcmVhdGVTbmFw
c2hvdEZpbGVPbk1haW5UaHJlYWQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdl
YkZpbGVTeXN0ZW0qIGZpbGVTeXN0ZW0sIGNvbnN0IEtVUkwmIHBhdGgsIFBhc3NSZWZQdHI8V29y
a2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZT4gYnJpZGdlLCBjb25zdCBTdHJpbmcmIG1vZGUp
CiB7Ci0gICAgZmlsZVN5c3RlbS0+Y3JlYXRlU25hcHNob3RGaWxlQW5kUmVhZE1ldGFkYXRhKGlu
dGVybmFsQmxvYlVSTCwgcGF0aCwgTWFpblRocmVhZEZpbGVTeXN0ZW1DYWxsYmFja3M6OmNyZWF0
ZUxlYWtlZFB0cihicmlkZ2UsIG1vZGUpKTsKKyAgICBmaWxlU3lzdGVtLT5jcmVhdGVTbmFwc2hv
dEZpbGVBbmRSZWFkTWV0YWRhdGEocGF0aCwgTWFpblRocmVhZEZpbGVTeXN0ZW1DYWxsYmFja3M6
OmNyZWF0ZUxlYWtlZFB0cihicmlkZ2UsIG1vZGUpKTsKIH0KIAogdm9pZCBXb3JrZXJGaWxlU3lz
dGVtQ2FsbGJhY2tzQnJpZGdlOjpkaWRGYWlsT25NYWluVGhyZWFkKFdlYkZpbGVFcnJvciBlcnJv
ciwgY29uc3QgU3RyaW5nJiBtb2RlKQpAQCAtMzgzLDYgKzM5NSwxMSBAQCB2b2lkIFdvcmtlckZp
bGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OmRpCiAgICAgbWF5UG9zdFRhc2tUb1dvcmtlcihjcmVh
dGVDYWxsYmFja1Rhc2soJmRpZFJlYWRNZXRhZGF0YU9uV29ya2VyVGhyZWFkLCB0aGlzLCBpbmZv
KSwgbW9kZSk7CiB9CiAKK3ZvaWQgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6ZGlk
Q3JlYXRlU25hcHNob3RGaWxlT25NYWluVGhyZWFkKGNvbnN0IFdlYkZpbGVJbmZvJiBpbmZvLCBj
b25zdCBTdHJpbmcmIG1vZGUsIFBhc3NSZWZQdHI8QmxvYkRhdGFIYW5kbGU+IHNuYXBzaG90Qmxv
YikKK3sKKyAgICBtYXlQb3N0VGFza1RvV29ya2VyKGNyZWF0ZUNhbGxiYWNrVGFzaygmZGlkQ3Jl
YXRlU25hcHNob3RGaWxlT25Xb3JrZXJUaHJlYWQsIHRoaXMsIGluZm8sIHNuYXBzaG90QmxvYiks
IG1vZGUpOworfQorCiB2b2lkIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OmRpZFJl
YWREaXJlY3RvcnlPbk1haW5UaHJlYWQoY29uc3QgV2ViVmVjdG9yPFdlYkZpbGVTeXN0ZW1FbnRy
eT4mIGVudHJpZXMsIGJvb2wgaGFzTW9yZSwgY29uc3QgU3RyaW5nJiBtb2RlKQogewogICAgIG1h
eVBvc3RUYXNrVG9Xb3JrZXIoCkBAIC0zOTAsNyArNDA3LDcgQEAgdm9pZCBXb3JrZXJGaWxlU3lz
dGVtQ2FsbGJhY2tzQnJpZGdlOjpkaQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcywg
ZW50cmllcywgaGFzTW9yZSksIG1vZGUpOwogfQogCi1Xb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tz
QnJpZGdlOjpXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlKFdlYkNvcmU6Oldvcmtlckxv
YWRlclByb3h5KiB3b3JrZXJMb2FkZXJQcm94eSwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCwgV2ViRmlsZVN5c3RlbUNhbGxiYWNrcyogY2FsbGJhY2tzKQor
V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNr
c0JyaWRnZShXZWJDb3JlOjpXb3JrZXJMb2FkZXJQcm94eSogd29ya2VyTG9hZGVyUHJveHksIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIFdlYkZpbGVTeXN0
ZW1DYWxsYmFja3NJbXBsKiBjYWxsYmFja3MpCiAgICAgOiBtX3dvcmtlckxvYWRlclByb3h5KHdv
cmtlckxvYWRlclByb3h5KQogICAgICwgbV93b3JrZXJDb250ZXh0KHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQpCiAgICAgLCBtX3dvcmtlckNvbnRleHRPYnNlcnZlcihXb3JrZXJGaWxlU3lzdGVtQ29u
dGV4dE9ic2VydmVyOjpjcmVhdGUoc3RhdGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KG1fd29ya2Vy
Q29udGV4dCksIHRoaXMpLmxlYWtQdHIoKSkKQEAgLTQyNCw2ICs0NDEsMTEgQEAgdm9pZCBXb3Jr
ZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpkaQogICAgIGJyaWRnZS0+bV9jYWxsYmFja3NP
bldvcmtlclRocmVhZC0+ZGlkUmVhZE1ldGFkYXRhKGluZm8pOwogfQogCit2b2lkIFdvcmtlckZp
bGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OmRpZENyZWF0ZVNuYXBzaG90RmlsZU9uV29ya2VyVGhy
ZWFkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPFdvcmtlckZpbGVTeXN0ZW1D
YWxsYmFja3NCcmlkZ2U+IGJyaWRnZSwgY29uc3QgV2ViRmlsZUluZm8mIGluZm8sIFBhc3NSZWZQ
dHI8QmxvYkRhdGFIYW5kbGU+IHNuYXBzaG90QmxvYikKK3sKKyAgICBicmlkZ2UtPm1fY2FsbGJh
Y2tzT25Xb3JrZXJUaHJlYWQtPmRpZENyZWF0ZVNuYXBzaG90RmlsZShpbmZvLCBzbmFwc2hvdEJs
b2IpOworfQorCiB2b2lkIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OmRpZFJlYWRE
aXJlY3RvcnlPbldvcmtlclRocmVhZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0
cjxXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlPiBicmlkZ2UsIGNvbnN0IFdlYlZlY3Rv
cjxXZWJGaWxlU3lzdGVtRW50cnk+JiBlbnRyaWVzLCBib29sIGhhc01vcmUpCiB7CiAgICAgYnJp
ZGdlLT5tX2NhbGxiYWNrc09uV29ya2VyVGhyZWFkLT5kaWRSZWFkRGlyZWN0b3J5KGVudHJpZXMs
IGhhc01vcmUpOwpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyRmlsZVN5
c3RlbUNhbGxiYWNrc0JyaWRnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UuaAkocmV2aXNpb24gMTQxNzkx
KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNr
c0JyaWRnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEJsb2JEYXRh
SGFuZGxlOwogY2xhc3MgV29ya2VyTG9hZGVyUHJveHk7CiB9CiAKQEAgLTUyLDcgKzUzLDcgQEAg
Y2xhc3MgQXN5bmNGaWxlU3lzdGVtOwogY2xhc3MgTWFpblRocmVhZEZpbGVTeXN0ZW1DYWxsYmFj
a3M7CiBjbGFzcyBXZWJDb21tb25Xb3JrZXJDbGllbnQ7CiBjbGFzcyBUaHJlYWRhYmxlQ2FsbGJh
Y2tzQnJpZGdlV3JhcHBlcjsKLWNsYXNzIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3M7CitjbGFzcyBX
ZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbDsKIGNsYXNzIFdvcmtlckZpbGVTeXN0ZW1Db250ZXh0
T2JzZXJ2ZXI7CiBzdHJ1Y3QgV2ViRmlsZUluZm87CiBzdHJ1Y3QgV2ViRmlsZVN5c3RlbUVudHJ5
OwpAQCAtNzcsNyArNzgsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHN0b3AoKTsKIAotICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U+IGNyZWF0ZShX
ZWJDb3JlOjpXb3JrZXJMb2FkZXJQcm94eSogd29ya2VyTG9hZGVyUHJveHksIFdlYkNvcmU6OlNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIHdvcmtlckNvbnRleHQsIFdlYkZpbGVTeXN0ZW1DYWxsYmFj
a3MqIGNhbGxiYWNrcykKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXb3JrZXJGaWxlU3lzdGVtQ2Fs
bGJhY2tzQnJpZGdlPiBjcmVhdGUoV2ViQ29yZTo6V29ya2VyTG9hZGVyUHJveHkqIHdvcmtlckxv
YWRlclByb3h5LCBXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiB3b3JrZXJDb250ZXh0
LCBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbCogY2FsbGJhY2tzKQogICAgIHsKICAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlKHdvcmtl
ckxvYWRlclByb3h5LCB3b3JrZXJDb250ZXh0LCBjYWxsYmFja3MpKTsKICAgICB9CkBAIC05NCwx
NyArOTUsMTggQEAgcHVibGljOgogICAgIHZvaWQgcG9zdEZpbGVFeGlzdHNUb01haW5UaHJlYWQo
V2ViRmlsZVN5c3RlbSosIGNvbnN0IFdlYkNvcmU6OktVUkwmIHBhdGgsIGNvbnN0IFN0cmluZyYg
bW9kZSk7CiAgICAgdm9pZCBwb3N0RGlyZWN0b3J5RXhpc3RzVG9NYWluVGhyZWFkKFdlYkZpbGVT
eXN0ZW0qLCBjb25zdCBXZWJDb3JlOjpLVVJMJiBwYXRoLCBjb25zdCBTdHJpbmcmIG1vZGUpOwog
ICAgIHZvaWQgcG9zdFJlYWREaXJlY3RvcnlUb01haW5UaHJlYWQoV2ViRmlsZVN5c3RlbSosIGNv
bnN0IFdlYkNvcmU6OktVUkwmIHBhdGgsIGNvbnN0IFN0cmluZyYgbW9kZSk7Ci0gICAgdm9pZCBw
b3N0Q3JlYXRlU25hcHNob3RGaWxlVG9NYWluVGhyZWFkKFdlYkZpbGVTeXN0ZW0qLCBjb25zdCBX
ZWJDb3JlOjpLVVJMJiBpbnRlcm5hbEJsb2JVUkwsIGNvbnN0IFdlYkNvcmU6OktVUkwmIHBhdGgs
IGNvbnN0IFN0cmluZyYgbW9kZSk7CisgICAgdm9pZCBwb3N0Q3JlYXRlU25hcHNob3RGaWxlVG9N
YWluVGhyZWFkKFdlYkZpbGVTeXN0ZW0qLCBjb25zdCBXZWJDb3JlOjpLVVJMJiBwYXRoLCBjb25z
dCBTdHJpbmcmIG1vZGUpOwogCiAgICAgLy8gQ2FsbGJhY2sgbWV0aG9kcyB0aGF0IGFyZSBjYWxs
ZWQgb24gdGhlIG1haW4gdGhyZWFkLgogICAgIHZvaWQgZGlkRmFpbE9uTWFpblRocmVhZChXZWJG
aWxlRXJyb3IsIGNvbnN0IFN0cmluZyYgbW9kZSk7CiAgICAgdm9pZCBkaWRPcGVuRmlsZVN5c3Rl
bU9uTWFpblRocmVhZChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYkNvcmU6OktVUkwmIHJv
b3RVUkwsIGNvbnN0IFN0cmluZyYgbW9kZSk7CiAgICAgdm9pZCBkaWRTdWNjZWVkT25NYWluVGhy
ZWFkKGNvbnN0IFN0cmluZyYgbW9kZSk7CiAgICAgdm9pZCBkaWRSZWFkTWV0YWRhdGFPbk1haW5U
aHJlYWQoY29uc3QgV2ViRmlsZUluZm8mLCBjb25zdCBTdHJpbmcmIG1vZGUpOworICAgIHZvaWQg
ZGlkQ3JlYXRlU25hcHNob3RGaWxlT25NYWluVGhyZWFkKGNvbnN0IFdlYkZpbGVJbmZvJiwgY29u
c3QgU3RyaW5nJiBtb2RlLCBQYXNzUmVmUHRyPFdlYkNvcmU6OkJsb2JEYXRhSGFuZGxlPiBzbmFw
c2hvdEJsb2IpOwogICAgIHZvaWQgZGlkUmVhZERpcmVjdG9yeU9uTWFpblRocmVhZChjb25zdCBX
ZWJWZWN0b3I8V2ViRmlsZVN5c3RlbUVudHJ5PiYsIGJvb2wgaGFzTW9yZSwgY29uc3QgU3RyaW5n
JiBtb2RlKTsKIAogcHJpdmF0ZToKLSAgICBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdl
KFdlYkNvcmU6OldvcmtlckxvYWRlclByb3h5KiwgV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3MqKTsKKyAgICBXb3JrZXJGaWxlU3lzdGVtQ2Fs
bGJhY2tzQnJpZGdlKFdlYkNvcmU6OldvcmtlckxvYWRlclByb3h5KiwgV2ViQ29yZTo6U2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsKik7CiAKICAgICAv
LyBNZXRob2RzIHRoYXQgYXJlIHRvIGJlIGNhbGxlZCBvbiB0aGUgbWFpbiB0aHJlYWQuCiAgICAg
c3RhdGljIHZvaWQgb3BlbkZpbGVTeXN0ZW1Pbk1haW5UaHJlYWQoV2ViQ29yZTo6U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIFdlYkNvbW1vbldvcmtlckNsaWVudCosIFdlYkZpbGVTeXN0ZW06OlR5
cGUsIGxvbmcgbG9uZyBzaXplLCBib29sIGNyZWF0ZSwgUGFzc1JlZlB0cjxXb3JrZXJGaWxlU3lz
dGVtQ2FsbGJhY2tzQnJpZGdlPiwgY29uc3QgU3RyaW5nJiBtb2RlKTsKQEAgLTExOCw3ICsxMjAs
NyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIGZpbGVFeGlzdHNPbk1haW5UaHJlYWQoV2Vi
Q29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYkZpbGVTeXN0ZW0qLCBjb25zdCBXZWJD
b3JlOjpLVVJMJiBwYXRoLCBQYXNzUmVmUHRyPFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlk
Z2U+LCBjb25zdCBTdHJpbmcmIG1vZGUpOwogICAgIHN0YXRpYyB2b2lkIGRpcmVjdG9yeUV4aXN0
c09uTWFpblRocmVhZChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViRmlsZVN5
c3RlbSosIGNvbnN0IFdlYkNvcmU6OktVUkwmIHBhdGgsIFBhc3NSZWZQdHI8V29ya2VyRmlsZVN5
c3RlbUNhbGxiYWNrc0JyaWRnZT4sIGNvbnN0IFN0cmluZyYgbW9kZSk7CiAgICAgc3RhdGljIHZv
aWQgcmVhZERpcmVjdG9yeU9uTWFpblRocmVhZChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgV2ViRmlsZVN5c3RlbSosIGNvbnN0IFdlYkNvcmU6OktVUkwmIHBhdGgsIFBhc3NSZWZQ
dHI8V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZT4sIGNvbnN0IFN0cmluZyYgbW9kZSk7
Ci0gICAgc3RhdGljIHZvaWQgY3JlYXRlU25hcHNob3RGaWxlT25NYWluVGhyZWFkKFdlYkNvcmU6
OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJGaWxlU3lzdGVtKiwgY29uc3QgV2ViQ29yZTo6
S1VSTCYgaW50ZXJuYWxCbG9iVVJMLCBjb25zdCBXZWJDb3JlOjpLVVJMJiBwYXRoLCBQYXNzUmVm
UHRyPFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U+LCBjb25zdCBTdHJpbmcmIG1vZGUp
OworICAgIHN0YXRpYyB2b2lkIGNyZWF0ZVNuYXBzaG90RmlsZU9uTWFpblRocmVhZChXZWJDb3Jl
OjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViRmlsZVN5c3RlbSosIGNvbnN0IFdlYkNvcmU6
OktVUkwmIHBhdGgsIFBhc3NSZWZQdHI8V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZT4s
IGNvbnN0IFN0cmluZyYgbW9kZSk7CiAKICAgICBmcmllbmQgY2xhc3MgTWFpblRocmVhZEZpbGVT
eXN0ZW1DYWxsYmFja3M7CiAKQEAgLTEyNyw2ICsxMjksNyBAQCBwcml2YXRlOgogICAgIHN0YXRp
YyB2b2lkIGRpZE9wZW5GaWxlU3lzdGVtT25Xb3JrZXJUaHJlYWQoV2ViQ29yZTo6U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRn
ZT4sIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgV2ViQ29yZTo6S1VSTCYgcm9vdFBhdGgpOwog
ICAgIHN0YXRpYyB2b2lkIGRpZFN1Y2NlZWRPbldvcmtlclRocmVhZChXZWJDb3JlOjpTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJp
ZGdlPik7CiAgICAgc3RhdGljIHZvaWQgZGlkUmVhZE1ldGFkYXRhT25Xb3JrZXJUaHJlYWQoV2Vi
Q29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8V29ya2VyRmlsZVN5c3Rl
bUNhbGxiYWNrc0JyaWRnZT4sIGNvbnN0IFdlYkZpbGVJbmZvJik7CisgICAgc3RhdGljIHZvaWQg
ZGlkQ3JlYXRlU25hcHNob3RGaWxlT25Xb3JrZXJUaHJlYWQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZT4s
IGNvbnN0IFdlYkZpbGVJbmZvJiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpCbG9iRGF0YUhhbmRsZT4g
c25hcHNob3RCbG9iKTsKICAgICBzdGF0aWMgdm9pZCBkaWRSZWFkRGlyZWN0b3J5T25Xb3JrZXJU
aHJlYWQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8V29ya2Vy
RmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZT4sIGNvbnN0IFdlYlZlY3RvcjxXZWJGaWxlU3lzdGVt
RW50cnk+JiwgYm9vbCBoYXNNb3JlKTsKIAogICAgIHN0YXRpYyB2b2lkIHJ1blRhc2tPbk1haW5U
aHJlYWQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8V29ya2Vy
RmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZT4sIFBhc3NPd25QdHI8V2ViQ29yZTo6U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dDo6VGFzaz4pOwpAQCAtMTQ2LDcgKzE0OSw3IEBAIHByaXZhdGU6CiAgICAg
V29ya2VyRmlsZVN5c3RlbUNvbnRleHRPYnNlcnZlciogbV93b3JrZXJDb250ZXh0T2JzZXJ2ZXI7
CiAKICAgICAvLyBUaGlzIGlzIHNlbGYtZGVzdHJ1Y3RlZCBhbmQgbXVzdCBiZSBmaXJlZCBvbiB0
aGUgd29ya2VyIHRocmVhZC4KLSAgICBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzKiBtX2NhbGxiYWNr
c09uV29ya2VyVGhyZWFkOworICAgIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsKiBtX2NhbGxi
YWNrc09uV29ya2VyVGhyZWFkOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>
<flag name="commit-queue"
          id="205996"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189344</attachid>
            <date>2013-02-20 11:13:12 -0800</date>
            <delta_ts>2013-03-11 17:08:07 -0700</delta_ts>
            <desc>patch</desc>
            <filename>impl2.txt</filename>
            <type>text/plain</type>
            <size>32198</size>
            <attacher name="Michael Nordman">michaeln</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0MTc5NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBACisyMDEzLTAyLTA0ICBNaWNoYWVs
IE5vcmRtYW4gIDxtaWNoYWVsbkBnb29nbGUuY29tPgorCisgICAgICAgIEZpbGVTeXN0ZW0gbW9k
czogQ2hhbmdlcyB0byBzbmFwc2hvdCBmaWxlIGNyZWF0aW9uIHRvIHJlZHVjZSBkZXBlbmRlbmNp
ZXMgb24gYmxvYiBVUkxzLgorICAgICAgICBBZGRpbmcgYSBuZXcgbWluaW1hbCBCbG9iRGF0YUhh
bmRsZSBjbGFzcyB3aGljaCB3aWxsIGJlIHJlaW1wbGVtZW50ZWQvYnVpbHQgdXBvbiBpbiBsYXRl
ciBDTHMuIEluIHRoaXMKKyAgICAgICAgcGF0Y2gsIGl0J3MganVzdCBlbm91Z2ggdG8gcmVmYWN0
b3IgdGhlIEZpbGVTeXN0ZW0gY29kZSB0byBub3QgZnVuY3Rpb24gaW4gdGVybXMgb2YgYmxvYlVS
THMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDg4
NTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBu
ZXcgdGVzdHMgKE9PUFMhKS4KKworICAgICAgICAqIE1vZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxl
U3lzdGVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RE9NRmls
ZVN5c3RlbTo6Y3JlYXRlRmlsZSk6CisgICAgICAgICogTW9kdWxlcy9maWxlc3lzdGVtL0RPTUZp
bGVTeXN0ZW1TeW5jLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRmb3Jt
L0FzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcy5oOgorICAgICAgICAoQXN5bmNGaWxlU3lzdGVtQ2Fs
bGJhY2tzKToKKyAgICAgICAgKFdlYkNvcmU6OkFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrczo6ZGlk
Q3JlYXRlU25hcHNob3RGaWxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvQXN5bmNGaWxlU3lz
dGVtR3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFzeW5jRmlsZVN5c3RlbUd0azo6Y3JlYXRl
U25hcHNob3RGaWxlQW5kUmVhZE1ldGFkYXRhKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAqIHBsYXRmb3JtL25ldHdvcmsvQmxvYkRhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpCbG9iRGF0YUhhbmRsZTo6QmxvYkRhdGFIYW5kbGUpOgorICAgICAg
ICAoV2ViQ29yZTo6QmxvYkRhdGFIYW5kbGU6On5CbG9iRGF0YUhhbmRsZSk6CisgICAgICAgICog
cGxhdGZvcm0vbmV0d29yay9CbG9iRGF0YS5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChCbG9iRGF0YUhhbmRsZSk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iRGF0YUhhbmRsZTo6Y3Jl
YXRlKToKKwogMjAxMy0wMi0wNCAgRGltYSBHb3JiaWsgIDxkZ29yYmlrQGFwcGxlLmNvbT4KIAog
ICAgICAgICBJbXBsZW1ldCA6bGFuZygpIHBzZXVkbyBjbGFzcyBzdXBwb3J0IGZvciB0aGUgV2Vi
VlRUIDo6Y3VlIHBzZXVkbyBlbGVtZW50CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2Zp
bGVzeXN0ZW0vRE9NRmlsZVN5c3RlbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9maWxlc3lzdGVtL0RPTUZpbGVTeXN0ZW0uY3BwCShyZXZpc2lvbiAxNDE3OTEpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZpbGVzeXN0ZW0vRE9NRmlsZVN5c3RlbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE0OCwxOSArMTQ4LDI0IEBAIHZvaWQgRE9NRmlsZVN5c3RlbTo6Y3Jl
YXRlV3JpdGVyKGNvbnN0IEYKIAogbmFtZXNwYWNlIHsKIAotY2xhc3MgR2V0TWV0YWRhdGFDYWxs
YmFjayA6IHB1YmxpYyBGaWxlU3lzdGVtQ2FsbGJhY2tzQmFzZSB7CitjbGFzcyBTbmFwc2hvdEZp
bGVDYWxsYmFjayA6IHB1YmxpYyBGaWxlU3lzdGVtQ2FsbGJhY2tzQmFzZSB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFBhc3NPd25QdHI8R2V0TWV0YWRhdGFDYWxsYmFjaz4gY3JlYXRlKFBhc3NSZWZQ
dHI8RE9NRmlsZVN5c3RlbT4gZmlsZXN5c3RlbSwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBL
VVJMJiB1cmwsIFBhc3NSZWZQdHI8RmlsZUNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NS
ZWZQdHI8RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaykKKyAgICBzdGF0aWMgUGFzc093blB0
cjxTbmFwc2hvdEZpbGVDYWxsYmFjaz4gY3JlYXRlKFBhc3NSZWZQdHI8RE9NRmlsZVN5c3RlbT4g
ZmlsZXN5c3RlbSwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBLVVJMJiB1cmwsIFBhc3NSZWZQ
dHI8RmlsZUNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFj
az4gZXJyb3JDYWxsYmFjaykKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgR2V0
TWV0YWRhdGFDYWxsYmFjayhmaWxlc3lzdGVtLCBuYW1lLCB1cmwsIHN1Y2Nlc3NDYWxsYmFjaywg
ZXJyb3JDYWxsYmFjaykpOworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFNuYXBzaG90Rmls
ZUNhbGxiYWNrKGZpbGVzeXN0ZW0sIG5hbWUsIHVybCwgc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNh
bGxiYWNrKSk7CiAgICAgfQogCi0gICAgdmlydHVhbCB2b2lkIGRpZFJlYWRNZXRhZGF0YShjb25z
dCBGaWxlTWV0YWRhdGEmIG1ldGFkYXRhKQorICAgIHZpcnR1YWwgdm9pZCBkaWRDcmVhdGVTbmFw
c2hvdEZpbGUoY29uc3QgRmlsZU1ldGFkYXRhJiBtZXRhZGF0YSwgUGFzc1JlZlB0cjxCbG9iRGF0
YUhhbmRsZT4gc25hcHNob3QpCiAgICAgewogICAgICAgICBBU1NFUlQoIW1ldGFkYXRhLnBsYXRm
b3JtUGF0aC5pc0VtcHR5KCkpOwogICAgICAgICBpZiAoIW1fc3VjY2Vzc0NhbGxiYWNrKQogICAg
ICAgICAgICAgcmV0dXJuOwogCisgICAgICAgIC8vIFdlIGNhbid0IGRpcmVjdGx5IHVzZSB0aGUg
c25hcHNob3QgYmxvYiBkYXRhIGhhbmRsZSBiZWNhdXNlIHRoZSBjb250ZW50IHR5cGUgb24gaXQg
aGFzbid0IGJlZW4gc2V0LgorICAgICAgICAvLyBUaGUgfHNuYXBzaG90fCBwYXJhbSBpcyBoZXJl
IHRvIHByb3ZpZGUgYSBhIGNoYWluIG9mIGN1c3RvZHkgdGhydSB0aHJlYWQgYnJpZGdpbmcgdGhh
dCBpcyBoZWxkIG9udG8gdW50aWwKKyAgICAgICAgLy8gKmFmdGVyKiB3ZSd2ZSBjb2luZWQgYSBG
aWxlIHdpdGggYSBuZXcgaGFuZGxlIHRoYXQgaGFzIHRoZSBjb3JyZWN0IHR5cGUgc2V0IG9uIGl0
LiBUaGlzIGFsbG93cyB0aGUKKyAgICAgICAgLy8gYmxvYiBzdG9yYWdlIHN5c3RlbSB0byB0cmFj
ayB3aGVuIGEgdGVtcCBmaWxlIGNhbiBhbmQgY2FuJ3QgYmUgc2FmZWx5IGRlbGV0ZWQuCisKICAg
ICAgICAgLy8gRm9yIHJlZ3VsYXIgZmlsZXN5c3RlbSB0eXBlcyAodGVtcG9yYXJ5IG9yIHBlcnNp
c3RlbnQpLCB3ZSBzaG91bGQgbm90IGNhY2hlIGZpbGUgbWV0YWRhdGEgYXMgaXQgY291bGQgY2hh
bmdlIEZpbGUgc2VtYW50aWNzLgogICAgICAgICAvLyBGb3Igb3RoZXIgZmlsZXN5c3RlbSB0eXBl
cyAod2hpY2ggY291bGQgYmUgcGxhdGZvcm0tc3BlY2lmaWMgb25lcyksIHRoZXJlJ3MgYSBjaGFu
Y2UgdGhhdCB0aGUgZmlsZXMgYXJlIG9uIHJlbW90ZSBmaWxlc3lzdGVtLiBJZiB0aGUgcG9ydCBo
YXMgcmV0dXJuZWQgbWV0YWRhdGEganVzdCBwYXNzIGl0IHRvIEZpbGUgY29uc3RydWN0b3IgKHNv
IHdlIG1heSBjYWNoZSB0aGUgbWV0YWRhdGEpLgogICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IHVzZSB0aGUgc25hcHNob3QgbWV0YWRhdGEgZm9yIGFsbCBmaWxlcy4KQEAgLTE3OSw3ICsxODQs
NyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIEdldE1ldGFkYXRhQ2FsbGJhY2so
UGFzc1JlZlB0cjxET01GaWxlU3lzdGVtPiBmaWxlc3lzdGVtLCBjb25zdCBTdHJpbmcmIG5hbWUs
ICBjb25zdCBLVVJMJiB1cmwsIFBhc3NSZWZQdHI8RmlsZUNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJh
Y2ssIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaykKKyAgICBTbmFwc2hv
dEZpbGVDYWxsYmFjayhQYXNzUmVmUHRyPERPTUZpbGVTeXN0ZW0+IGZpbGVzeXN0ZW0sIGNvbnN0
IFN0cmluZyYgbmFtZSwgIGNvbnN0IEtVUkwmIHVybCwgUGFzc1JlZlB0cjxGaWxlQ2FsbGJhY2s+
IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNr
KQogICAgICAgICA6IEZpbGVTeXN0ZW1DYWxsYmFja3NCYXNlKGVycm9yQ2FsbGJhY2spCiAgICAg
ICAgICwgbV9maWxlc3lzdGVtKGZpbGVzeXN0ZW0pCiAgICAgICAgICwgbV9uYW1lKG5hbWUpCkBA
IC0xOTksNyArMjA0LDcgQEAgcHJpdmF0ZToKIHZvaWQgRE9NRmlsZVN5c3RlbTo6Y3JlYXRlRmls
ZShjb25zdCBGaWxlRW50cnkqIGZpbGVFbnRyeSwgUGFzc1JlZlB0cjxGaWxlQ2FsbGJhY2s+IHN1
Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrKQog
ewogICAgIEtVUkwgZmlsZVN5c3RlbVVSTCA9IGNyZWF0ZUZpbGVTeXN0ZW1VUkwoZmlsZUVudHJ5
KTsKLSAgICBtX2FzeW5jRmlsZVN5c3RlbS0+Y3JlYXRlU25hcHNob3RGaWxlQW5kUmVhZE1ldGFk
YXRhKGZpbGVTeXN0ZW1VUkwsIEdldE1ldGFkYXRhQ2FsbGJhY2s6OmNyZWF0ZSh0aGlzLCBmaWxl
RW50cnktPm5hbWUoKSwgZmlsZVN5c3RlbVVSTCwgc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxi
YWNrKSk7CisgICAgbV9hc3luY0ZpbGVTeXN0ZW0tPmNyZWF0ZVNuYXBzaG90RmlsZUFuZFJlYWRN
ZXRhZGF0YShmaWxlU3lzdGVtVVJMLCBTbmFwc2hvdEZpbGVDYWxsYmFjazo6Y3JlYXRlKHRoaXMs
IGZpbGVFbnRyeS0+bmFtZSgpLCBmaWxlU3lzdGVtVVJMLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9y
Q2FsbGJhY2spKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9maWxlc3lzdGVtL0RPTUZpbGVTeXN0ZW1TeW5jLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZpbGVzeXN0ZW0vRE9NRmlsZVN5c3RlbVN5bmMu
Y3BwCShyZXZpc2lvbiAxNDE3OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZpbGVzeXN0
ZW0vRE9NRmlsZVN5c3RlbVN5bmMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsMTAgKzExMywx
NiBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIHZvaWQgZGlkUmVhZE1ldGFkYXRhKGNv
bnN0IEZpbGVNZXRhZGF0YSYgbWV0YWRhdGEpCisgICAgdmlydHVhbCB2b2lkIGRpZENyZWF0ZVNu
YXBzaG90RmlsZShjb25zdCBGaWxlTWV0YWRhdGEmIG1ldGFkYXRhLCBQYXNzUmVmUHRyPEJsb2JE
YXRhSGFuZGxlPiBzbmFwc2hvdCkKICAgICB7CisgICAgICAgIC8vIFdlIGNhbid0IGRpcmVjdGx5
IHVzZSB0aGUgc25hcHNob3QgYmxvYiBkYXRhIGhhbmRsZSBiZWNhdXNlIHRoZSBjb250ZW50IHR5
cGUgb24gaXQgaGFzbid0IGJlZW4gc2V0LgorICAgICAgICAvLyBUaGUgfHNuYXBzaG90fCBwYXJh
bSBpcyBoZXJlIHRvIHByb3ZpZGUgYSBhIGNoYWluIG9mIGN1c3RvZHkgdGhydSB0aHJlYWQgYnJp
ZGdpbmcgdGhhdCBpcyBoZWxkIG9udG8gdW50aWwKKyAgICAgICAgLy8gKmFmdGVyKiB3ZSd2ZSBj
b2luZWQgYSBGaWxlIHdpdGggYSBuZXcgaGFuZGxlIHRoYXQgaGFzIHRoZSBjb3JyZWN0IHR5cGUg
c2V0IG9uIGl0LiBUaGlzIGFsbG93cyB0aGUKKyAgICAgICAgLy8gYmxvYiBzdG9yYWdlIHN5c3Rl
bSB0byB0cmFjayB3aGVuIGEgdGVtcCBmaWxlIGNhbiBhbmQgY2FuJ3QgYmUgc2FmZWx5IGRlbGV0
ZWQuCisKICAgICAgICAgLy8gRm9yIHJlZ3VsYXIgZmlsZXN5c3RlbSB0eXBlcyAodGVtcG9yYXJ5
IG9yIHBlcnNpc3RlbnQpLCB3ZSBzaG91bGQgbm90IGNhY2hlIGZpbGUgbWV0YWRhdGEgYXMgaXQg
Y291bGQgY2hhbmdlIEZpbGUgc2VtYW50aWNzLgotICAgICAgICAvLyBGb3Igb3RoZXIgZmlsZXN5
c3RlbSB0eXBlcyAod2hpY2ggY291bGQgYmUgcGxhdGZvcm0tc3BlY2lmaWMgb25lcyksIHRoZXJl
J3MgYSBjaGFuY2UgdGhhdCB0aGUgZmlsZXMgYXJlIG9uIHJlbW90ZSBmaWxlc3lzdGVtLiBJZiB0
aGUgcG9ydCBoYXMgcmV0dXJuZWQgbWV0YWRhdGEganVzdCBwYXNzIGl0IHRvIEZpbGUgY29uc3Ry
dWN0b3IgKHNvIHdlIG1heSBjYWNoZSB0aGUgbWV0YWRhdGEpLgorICAgICAgICAvLyBGb3Igb3Ro
ZXIgZmlsZXN5c3RlbSB0eXBlcyAod2hpY2ggY291bGQgYmUgcGxhdGZvcm0tc3BlY2lmaWMgb25l
cyksIHRoZXJlJ3MgYSBjaGFuY2UgdGhhdCB0aGUgZmlsZXMgYXJlIG9uIHJlbW90ZSBmaWxlc3lz
dGVtLgorICAgICAgICAvLyBJZiB0aGUgcG9ydCBoYXMgcmV0dXJuZWQgbWV0YWRhdGEganVzdCBw
YXNzIGl0IHRvIEZpbGUgY29uc3RydWN0b3IgKHNvIHdlIG1heSBjYWNoZSB0aGUgbWV0YWRhdGEp
LgogICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHVzZSB0aGUgc25hcHNob3QgbWV0YWRhdGEg
Zm9yIGFsbCBmaWxlcy4KICAgICAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL0J1Z3MvUHVibGlj
L3Nob3dfYnVnLmNnaT9pZD0xNzc0NgogICAgICAgICBpZiAobV90eXBlID09IEZpbGVTeXN0ZW1U
eXBlVGVtcG9yYXJ5IHx8IG1fdHlwZSA9PSBGaWxlU3lzdGVtVHlwZVBlcnNpc3RlbnQpIHsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0FzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0FzeW5jRmlsZVN5c3RlbUNhbGxi
YWNrcy5oCShyZXZpc2lvbiAxNDE3OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Bc3lu
Y0ZpbGVTeXN0ZW1DYWxsYmFja3MuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAog
CiAjaW5jbHVkZSAiQXN5bmNGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiQXN5bmNGaWxlV3JpdGVy
LmgiCisjaW5jbHVkZSAiQmxvYkRhdGEuaCIKICNpbmNsdWRlICJGaWxlTWV0YWRhdGEuaCIKICNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtNTQsNiArNTUsOSBAQCBwdWJsaWM6
CiAgICAgLy8gQ2FsbGVkIHdoZW4gYSBmaWxlIG1ldGFkYXRhIGlzIHJlYWQgc3VjY2Vzc2Z1bGx5
LgogICAgIHZpcnR1YWwgdm9pZCBkaWRSZWFkTWV0YWRhdGEoY29uc3QgRmlsZU1ldGFkYXRhJikg
eyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogCisgICAgLy8gQ2FsbGVkIHdoZW4gYSBzbmFwc2hv
dCBmaWxlIGlzIGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5LgorICAgIHZpcnR1YWwgdm9pZCBkaWRDcmVh
dGVTbmFwc2hvdEZpbGUoY29uc3QgRmlsZU1ldGFkYXRhJiwgUGFzc1JlZlB0cjxCbG9iRGF0YUhh
bmRsZT4gc25hcHNob3QpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKwogICAgIC8vIENhbGxl
ZCB3aGVuIGEgZGlyZWN0b3J5IGVudHJ5IGlzIHJlYWQuCiAgICAgdmlydHVhbCB2b2lkIGRpZFJl
YWREaXJlY3RvcnlFbnRyeShjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgaXNEaXJlY3RvcnkpIHsg
QVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL0FzeW5jRmlsZVN5c3RlbUd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL0FzeW5jRmlsZVN5c3RlbUd0ay5jcHAJKHJldmlzaW9uIDE0MTc5MSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Bc3luY0ZpbGVTeXN0ZW1HdGsuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTgsNiArMTE4LDExIEBAIHZvaWQgQXN5bmNGaWxlU3lzdGVtR3RrOjpj
cmVhdGVXcml0ZXIoQXMKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCit2b2lkIEFzeW5jRmls
ZVN5c3RlbUd0azo6Y3JlYXRlU25hcHNob3RGaWxlQW5kUmVhZE1ldGFkYXRhKGNvbnN0IEtVUkwm
LCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4pCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYkRhdGEuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYkRhdGEuY3BwCShyZXZpc2lvbiAx
NDE3OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JEYXRhLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsOCBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiQmxvYkRhdGEuaCIKKyNpbmNsdWRlICJCbG9iVVJMLmgiCisjaW5jbHVkZSAiVGhy
ZWFkYWJsZUJsb2JSZWdpc3RyeS5oIgogCiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1
ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CkBAIC0xMDEsNCArMTAzLDE3IEBAIHZvaWQgQmxvYkRhdGE6
OnN3YXBJdGVtcyhCbG9iRGF0YUl0ZW1MaXMKICAgICBtX2l0ZW1zLnN3YXAoaXRlbXMpOwogfQog
CisKK0Jsb2JEYXRhSGFuZGxlOjpCbG9iRGF0YUhhbmRsZShQYXNzT3duUHRyPEJsb2JEYXRhPiBk
YXRhLCBsb25nIGxvbmcgc2l6ZSkKK3sKKyAgICBVTlVTRURfUEFSQU0oc2l6ZSk7CisgICAgbV9p
bnRlcm5hbFVSTCA9IEJsb2JVUkw6OmNyZWF0ZUludGVybmFsVVJMKCk7CisgICAgVGhyZWFkYWJs
ZUJsb2JSZWdpc3RyeTo6cmVnaXN0ZXJCbG9iVVJMKG1faW50ZXJuYWxVUkwsIGRhdGEpOworfQor
CitCbG9iRGF0YUhhbmRsZTo6fkJsb2JEYXRhSGFuZGxlKCkKK3sKKyAgICBUaHJlYWRhYmxlQmxv
YlJlZ2lzdHJ5Ojp1bnJlZ2lzdGVyQmxvYlVSTChtX2ludGVybmFsVVJMKTsKK30KKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9C
bG9iRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
QmxvYkRhdGEuaAkocmV2aXNpb24gMTQxNzkxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9CbG9iRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDIsNiArMjAyLDIyIEBAIHBy
aXZhdGU6CiAgICAgQmxvYkRhdGFJdGVtTGlzdCBtX2l0ZW1zOwogfTsKIAorLy8gRklYTUU6IFRo
aXMgY2xhc3MgaXMgbW9zdGx5IHBsYWNlIGhvbGRlciB1bnRpbCBJIGdldCBmYXJ0aGVyIGFsb25n
IGluIGxhbmRpbmcKKy8vIGh0dHBzOi8vY29kZXJldmlldy5jaHJvbWl1bS5vcmcvMTExOTIwMTcv
LgorY2xhc3MgQmxvYkRhdGFIYW5kbGUgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Qmxv
YkRhdGFIYW5kbGU+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCbG9iRGF0YUhh
bmRsZT4gY3JlYXRlKFBhc3NPd25QdHI8QmxvYkRhdGE+IGRhdGEsIGxvbmcgbG9uZyBzaXplKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBCbG9iRGF0YUhhbmRsZShkYXRhLCBz
aXplKSk7CisgICAgfQorCisgICAgfkJsb2JEYXRhSGFuZGxlKCk7CisKK3ByaXZhdGU6CisgICAg
QmxvYkRhdGFIYW5kbGUoUGFzc093blB0cjxCbG9iRGF0YT4sIGxvbmcgbG9uZyBzaXplKTsKKyAg
ICBLVVJMIG1faW50ZXJuYWxVUkw7Cit9OworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNl
bmRpZiAvLyBCbG9iRGF0YV9oCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNp
b24gMTQxNzk1KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSw0NCBAQAorMjAxMy0wMi0wNCAgTWljaGFlbCBOb3JkbWFuICA8bWlj
aGFlbG5AZ29vZ2xlLmNvbT4KKworICAgICAgICBbQ2hyb21pdW1dIEZpbGVTeXN0ZW0gbW9kczog
Q2hhbmdlcyB0byBzbmFwc2hvdCBmaWxlIGNyZWF0aW9uIHRvIHJlZHVjZSBkZXBlbmRlbmNpZXMg
b24gYmxvYnMuCisgICAgICAgIE5vIGxvbmdlciBzZW5kIGEgfGJsb2JVUkx8IHRvIHRoZSBicm93
c2VyIHByb2Nlc3MsIG5vIGxvbmdlciBleHBlY3QgdGhlIGJyb3dzZXIgcHJvY2VzcworICAgICAg
ICB0byBoYXZlIHJlZ2lzdGVyZWQgYSBibG9iIHdpdGggdGhhdCB1cmwuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDg4NTEKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHNyYy9Bc3luY0ZpbGVTeXN0ZW1D
aHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVX
cml0ZXJIZWxwZXJDYWxsYmFja3M6OmRpZENyZWF0ZVNuYXBzaG90RmlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bTo6Y3JlYXRlU25hcHNob3RGaWxlQW5kUmVh
ZE1ldGFkYXRhKToKKyAgICAgICAgKiBzcmMvQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uaDoKKyAg
ICAgICAgKEFzeW5jRmlsZVN5c3RlbUNocm9taXVtKToKKyAgICAgICAgKiBzcmMvTG9jYWxGaWxl
U3lzdGVtQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogc3JjL1dl
YkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRmlsZVN5
c3RlbUNhbGxiYWNrc0ltcGw6OmRpZENyZWF0ZVNuYXBzaG90RmlsZSk6CisgICAgICAgIChXZWJL
aXQpOgorICAgICAgICAqIHNyYy9XZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbC5oOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbCk6CisgICAg
ICAgICogc3JjL1dvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVtLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OldvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVtOjpjcmVhdGVTbmFwc2hvdEZpbGVB
bmRSZWFkTWV0YWRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyQXN5bmNGaWxlU3lzdGVt
Q2hyb21pdW06OmNyZWF0ZVdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UpOgorICAgICAg
ICAqIHNyYy9Xb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6TWFpblRocmVhZEZpbGVTeXN0ZW1DYWxsYmFja3M6OmRpZENyZWF0ZVNuYXBzaG90Rmls
ZSk6CisgICAgICAgIChNYWluVGhyZWFkRmlsZVN5c3RlbUNhbGxiYWNrcyk6CisgICAgICAgIChX
ZWJLaXQ6OldvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OnBvc3RDcmVhdGVTbmFwc2hv
dEZpbGVUb01haW5UaHJlYWQpOgorICAgICAgICAoV2ViS2l0OjpXb3JrZXJGaWxlU3lzdGVtQ2Fs
bGJhY2tzQnJpZGdlOjpjcmVhdGVTbmFwc2hvdEZpbGVPbk1haW5UaHJlYWQpOgorICAgICAgICAo
V2ViS2l0OjpXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpkaWRDcmVhdGVTbmFwc2hv
dEZpbGVPbk1haW5UaHJlYWQpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6
V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNr
c0JyaWRnZSk6CisgICAgICAgIChXZWJLaXQ6OldvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlk
Z2U6OmRpZENyZWF0ZVNuYXBzaG90RmlsZU9uV29ya2VyVGhyZWFkKToKKyAgICAgICAgKiBzcmMv
V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZS5oOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpXb3JrZXJGaWxlU3lzdGVtQ2FsbGJh
Y2tzQnJpZGdlOjpjcmVhdGUpOgorICAgICAgICAoV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0Jy
aWRnZSk6CisKIDIwMTMtMDItMDQgIE1hcmsgUGlsZ3JpbSAgPHBpbGdyaW1AY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFtDaHJvbWl1bV0gTW92ZSBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZSB0
byBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3luY0ZpbGVTeXN0
ZW1DaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
QXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uY3BwCShyZXZpc2lvbiAxNDE3OTEpCisrKyBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9Bc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ4LDQ2ICs0OCw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotbmFtZXNw
YWNlIHsKLQotLy8gU3BlY2lhbGl6ZWQgY2FsbGJhY2sgY2xhc3MgZm9yIGNyZWF0ZVNuYXBzaG90
RmlsZUFuZFJlYWRNZXRhZGF0YS4KLWNsYXNzIFNuYXBzaG90RmlsZUNhbGxiYWNrcyA6IHB1Ymxp
YyBBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3MgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3du
UHRyPFNuYXBzaG90RmlsZUNhbGxiYWNrcz4gY3JlYXRlKGNvbnN0IEtVUkwmIGludGVybmFsQmxv
YlVSTCwgUGFzc093blB0cjxXZWJDb3JlOjpBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+IGNhbGxi
YWNrcykKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgU25hcHNob3RGaWxlQ2Fs
bGJhY2tzKGludGVybmFsQmxvYlVSTCwgY2FsbGJhY2tzKSk7Ci0gICAgfQotCi0gICAgdmlydHVh
bCB2b2lkIGRpZFJlYWRNZXRhZGF0YShjb25zdCBGaWxlTWV0YWRhdGEmIG1ldGFkYXRhKQotICAg
IHsKLSAgICAgICAgQVNTRVJUKG1fY2FsbGJhY2tzKTsKLQotICAgICAgICAvLyBUaGlzIHdpbGwg
Y3JlYXRlIGEgbmV3IEZpbGUgb2JqZWN0IHVzaW5nIHRoZSBtZXRhZGF0YS4KLSAgICAgICAgbV9j
YWxsYmFja3MtPmRpZFJlYWRNZXRhZGF0YShtZXRhZGF0YSk7Ci0KLSAgICAgICAgLy8gTm93IHRo
YXQgd2UndmUgcmVnaXN0ZXJlZCB0aGUgc25hcHNob3QgZmlsZSwgd2UgY2FuIHVucmVnaXN0ZXIg
b3VyIGludGVybmFsQmxvYlVSTCB3aGljaCBoYXMgcGxheWVkIGEgcGxhY2Vob2xkZXIgZm9yIHRo
ZSBmaWxlIGR1cmluZyB0aGUgSVBDLgotICAgICAgICBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5Ojp1
bnJlZ2lzdGVyQmxvYlVSTChtX2ludGVybmFsQmxvYlVSTCk7Ci0gICAgfQotCi0gICAgdmlydHVh
bCB2b2lkIGRpZEZhaWwoaW50IGVycm9yKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fY2FsbGJh
Y2tzKTsKLSAgICAgICAgbV9jYWxsYmFja3MtPmRpZEZhaWwoZXJyb3IpOwotICAgIH0KLQotcHJp
dmF0ZToKLSAgICBTbmFwc2hvdEZpbGVDYWxsYmFja3MoY29uc3QgS1VSTCYgaW50ZXJuYWxCbG9i
VVJMLCBQYXNzT3duUHRyPFdlYkNvcmU6OkFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4gY2FsbGJh
Y2tzKQotICAgICAgICA6IG1faW50ZXJuYWxCbG9iVVJMKGludGVybmFsQmxvYlVSTCkKLSAgICAg
ICAgLCBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCi0gICAgewotICAgIH0KLQotICAgIEtVUkwgbV9p
bnRlcm5hbEJsb2JVUkw7Ci0gICAgT3duUHRyPFdlYkNvcmU6OkFzeW5jRmlsZVN5c3RlbUNhbGxi
YWNrcz4gbV9jYWxsYmFja3M7Ci19OwotCi19IC8vIG5hbWVzcGFjZQotCiBib29sIEFzeW5jRmls
ZVN5c3RlbTo6aXNBdmFpbGFibGUoKQogewogICAgIHJldHVybiB0cnVlOwpAQCAtMTg2LDcgKzE0
NiwxMSBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICAgICAgZGVsZXRlIHRoaXM7CiAgICAgfQot
CisgICAgdmlydHVhbCB2b2lkIGRpZENyZWF0ZVNuYXBzaG90RmlsZShjb25zdCBXZWJLaXQ6Oldl
YkZpbGVJbmZvJiBpbmZvKQorICAgIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIGRlbGV0ZSB0aGlzOworICAgIH0KICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVhZERpcmVj
dG9yeShjb25zdCBXZWJLaXQ6OldlYlZlY3RvcjxXZWJLaXQ6OldlYkZpbGVTeXN0ZW1FbnRyeT4m
IGVudHJpZXMsIGJvb2wgaGFzTW9yZSkKICAgICB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwpAQCAtMjE5LDE1ICsxODMsNyBAQCB2b2lkIEFzeW5jRmlsZVN5c3RlbUNocm9taXVtOjpj
cmVhdGVXcml0CiAKIHZvaWQgQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW06OmNyZWF0ZVNuYXBzaG90
RmlsZUFuZFJlYWRNZXRhZGF0YShjb25zdCBLVVJMJiBwYXRoLCBQYXNzT3duUHRyPEFzeW5jRmls
ZVN5c3RlbUNhbGxiYWNrcz4gY2FsbGJhY2tzKQogewotICAgIEtVUkwgaW50ZXJuYWxCbG9iVVJM
ID0gQmxvYlVSTDo6Y3JlYXRlSW50ZXJuYWxVUkwoKTsKLQotICAgIC8vIFRoaXMgd2lsbCBjcmVh
dGUgYSBzbmFwc2hvdCBmaWxlIGFuZCByZWdpc3RlciB0aGUgZmlsZSB0byBhIGJsb2IgdXNpbmcg
dGhlIGdpdmVuIGludGVybmFsQmxvYlVSTC4KLSAgICBtX3dlYkZpbGVTeXN0ZW0tPmNyZWF0ZVNu
YXBzaG90RmlsZUFuZFJlYWRNZXRhZGF0YShpbnRlcm5hbEJsb2JVUkwsIHBhdGgsIG5ldyBXZWJL
aXQ6OldlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsKGNyZWF0ZVNuYXBzaG90RmlsZUNhbGxiYWNr
KGludGVybmFsQmxvYlVSTCwgY2FsbGJhY2tzKSkpOwotfQotCi1QYXNzT3duUHRyPEFzeW5jRmls
ZVN5c3RlbUNhbGxiYWNrcz4gQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW06OmNyZWF0ZVNuYXBzaG90
RmlsZUNhbGxiYWNrKGNvbnN0IEtVUkwmIGludGVybmFsQmxvYlVSTCwgUGFzc093blB0cjxBc3lu
Y0ZpbGVTeXN0ZW1DYWxsYmFja3M+IGNhbGxiYWNrcykgY29uc3QKLXsKLSAgICByZXR1cm4gU25h
cHNob3RGaWxlQ2FsbGJhY2tzOjpjcmVhdGUoaW50ZXJuYWxCbG9iVVJMLCBjYWxsYmFja3MpOwor
ICAgIG1fd2ViRmlsZVN5c3RlbS0+Y3JlYXRlU25hcHNob3RGaWxlQW5kUmVhZE1ldGFkYXRhKHBh
dGgsIG5ldyBXZWJLaXQ6OldlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsKGNhbGxiYWNrcykpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9Bc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL0FzeW5jRmlsZVN5c3RlbUNocm9taXVtLmgJKHJldmlzaW9uIDE0MTc5
MSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0FzeW5jRmlsZVN5c3RlbUNocm9taXVt
LmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDggKzY5LDYgQEAgcHVibGljOgogcHJvdGVjdGVkOgog
ICAgIEFzeW5jRmlsZVN5c3RlbUNocm9taXVtKCk7CiAKLSAgICBQYXNzT3duUHRyPEFzeW5jRmls
ZVN5c3RlbUNhbGxiYWNrcz4gY3JlYXRlU25hcHNob3RGaWxlQ2FsbGJhY2soY29uc3QgS1VSTCYg
aW50ZXJuYWxCbG9iVVJMLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4pIGNv
bnN0OwotCiAgICAgV2ViS2l0OjpXZWJGaWxlU3lzdGVtKiBtX3dlYkZpbGVTeXN0ZW07CiB9Owog
CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Mb2NhbEZpbGVTeXN0ZW1DaHJvbWl1
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvTG9jYWxGaWxl
U3lzdGVtQ2hyb21pdW0uY3BwCShyZXZpc2lvbiAxNDE3OTEpCisrKyBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9Mb2NhbEZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE1Myw3ICsxNTMsNyBAQCBib29sIGFsbG93RmlsZVN5c3RlbUZvcldvcmtlcihXZWJDb21tb25X
CiAgICAgcmV0dXJuIGJyaWRnZS0+cmVzdWx0KCk7CiB9CiAKLXZvaWQgb3BlbkZpbGVTeXN0ZW1G
b3JXb3JrZXIoV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQsIFdlYkZpbGVTeXN0
ZW06OlR5cGUgdHlwZSwgbG9uZyBsb25nIHNpemUsIGJvb2wgY3JlYXRlLCBXZWJGaWxlU3lzdGVt
Q2FsbGJhY2tzKiBjYWxsYmFja3MsIEZpbGVTeXN0ZW1TeW5jaHJvbm91c1R5cGUgc3luY2hyb25v
dXNUeXBlKQordm9pZCBvcGVuRmlsZVN5c3RlbUZvcldvcmtlcihXZWJDb21tb25Xb3JrZXJDbGll
bnQqIGNvbW1vbkNsaWVudCwgV2ViRmlsZVN5c3RlbTo6VHlwZSB0eXBlLCBsb25nIGxvbmcgc2l6
ZSwgYm9vbCBjcmVhdGUsIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsKiBjYWxsYmFja3MsIEZp
bGVTeXN0ZW1TeW5jaHJvbm91c1R5cGUgc3luY2hyb25vdXNUeXBlKQogewogICAgIFdvcmtlclNj
cmlwdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpjb250
cm9sbGVyRm9yQ29udGV4dCgpOwogICAgIFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQgPSBj
b250cm9sbGVyLT53b3JrZXJDb250ZXh0KCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwuY3BwCShyZXZp
c2lvbiAxNDE3OTEpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGaWxlU3lzdGVt
Q2FsbGJhY2tzSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDYgKzc2LDI3IEBAIHZvaWQg
V2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGw6OmRpZFJlYWQKICAgICBkZWxldGUgdGhpczsKIH0K
IAordm9pZCBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbDo6ZGlkQ3JlYXRlU25hcHNob3RGaWxl
KGNvbnN0IFdlYkZpbGVJbmZvJiB3ZWJGaWxlSW5mbykKK3sKKyAgICAvLyBJdCdzIGltcG9ydGFu
dCB0byBjcmVhdGUgYSBCbG9iRGF0YUhhbmRsZSB0aGF0IHJlZmVycyB0byB0aGUgcGxhdGZvcm0g
ZmlsZSBwYXRoIHByaW9yCisgICAgLy8gdG8gcmV0dXJuIGZyb20gdGhpcyBtZXRob2Qgc28gdGhl
IHVuZGVybHlpbmcgZmlsZSB3aWxsIG5vdCBiZSBkZWxldGVkLgorICAgIE93blB0cjxCbG9iRGF0
YT4gYmxvYkRhdGEgPSBCbG9iRGF0YTo6Y3JlYXRlKCk7CisgICAgYmxvYkRhdGEtPmFwcGVuZEZp
bGUod2ViRmlsZUluZm8ucGxhdGZvcm1QYXRoKTsKKyAgICBSZWZQdHI8QmxvYkRhdGFIYW5kbGU+
IHNuYXBzaG90QmxvYiA9IEJsb2JEYXRhSGFuZGxlOjpjcmVhdGUoYmxvYkRhdGEucmVsZWFzZSgp
LCB3ZWJGaWxlSW5mby5sZW5ndGgpOworICAgIGRpZENyZWF0ZVNuYXBzaG90RmlsZSh3ZWJGaWxl
SW5mbywgc25hcHNob3RCbG9iKTsKK30KKwordm9pZCBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1w
bDo6ZGlkQ3JlYXRlU25hcHNob3RGaWxlKGNvbnN0IFdlYkZpbGVJbmZvJiB3ZWJGaWxlSW5mbywg
UGFzc1JlZlB0cjxXZWJDb3JlOjpCbG9iRGF0YUhhbmRsZT4gc25hcHNob3QpCit7CisgICAgRmls
ZU1ldGFkYXRhIGZpbGVNZXRhZGF0YTsKKyAgICBmaWxlTWV0YWRhdGEubW9kaWZpY2F0aW9uVGlt
ZSA9IHdlYkZpbGVJbmZvLm1vZGlmaWNhdGlvblRpbWU7CisgICAgZmlsZU1ldGFkYXRhLmxlbmd0
aCA9IHdlYkZpbGVJbmZvLmxlbmd0aDsKKyAgICBmaWxlTWV0YWRhdGEudHlwZSA9IHN0YXRpY19j
YXN0PEZpbGVNZXRhZGF0YTo6VHlwZT4od2ViRmlsZUluZm8udHlwZSk7CisgICAgZmlsZU1ldGFk
YXRhLnBsYXRmb3JtUGF0aCA9IHdlYkZpbGVJbmZvLnBsYXRmb3JtUGF0aDsKKyAgICBtX2NhbGxi
YWNrcy0+ZGlkQ3JlYXRlU25hcHNob3RGaWxlKGZpbGVNZXRhZGF0YSwgc25hcHNob3QpOworICAg
IGRlbGV0ZSB0aGlzOworfQorCiB2b2lkIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsOjpkaWRS
ZWFkRGlyZWN0b3J5KGNvbnN0IFdlYlZlY3RvcjxXZWJGaWxlU3lzdGVtRW50cnk+JiBlbnRyaWVz
LCBib29sIGhhc01vcmUpCiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBlbnRyaWVzLnNp
emUoKTsgKytpKQpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRmlsZVN5c3Rl
bUNhbGxiYWNrc0ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbC5oCShyZXZpc2lvbiAxNDE3OTEpCisrKyBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNz
IEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrczsKK2NsYXNzIEJsb2JEYXRhSGFuZGxlOwogY2xhc3Mg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIH0KIApAQCAtNTYsMTEgKzU3LDE3IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIH5XZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbCgpOwogCiAgICAgdmlydHVh
bCB2b2lkIGRpZFN1Y2NlZWQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVhZE1ldGFkYXRhKGNv
bnN0IFdlYkZpbGVJbmZvJiBpbmZvKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVhZE1ldGFkYXRh
KGNvbnN0IFdlYkZpbGVJbmZvJik7CisgICAgdmlydHVhbCB2b2lkIGRpZENyZWF0ZVNuYXBzaG90
RmlsZShjb25zdCBXZWJGaWxlSW5mbyYpOwogICAgIHZpcnR1YWwgdm9pZCBkaWRSZWFkRGlyZWN0
b3J5KGNvbnN0IFdlYlZlY3RvcjxXZWJGaWxlU3lzdGVtRW50cnk+JiBlbnRyaWVzLCBib29sIGhh
c01vcmUpOwogICAgIHZpcnR1YWwgdm9pZCBkaWRPcGVuRmlsZVN5c3RlbShjb25zdCBXZWJTdHJp
bmcmIG5hbWUsIGNvbnN0IFdlYlVSTCYgcm9vdFVSTCk7CiAgICAgdmlydHVhbCB2b2lkIGRpZEZh
aWwoV2ViRmlsZUVycm9yIGVycm9yKTsKIAorICAgIC8vIFRoaXMgaW50ZXJuYWwgb3ZlcmxvYWQg
aXMgdXNlZCBieSBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlIHRvIGRlbGl2ZXIgYSBi
bG9iIGRhdGEgaGFuZGxlCisgICAgLy8gY3JlYXRlZCBvbiB0aGUgbWFpbiB0aHJlYWQgdG8gYW4g
IEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrIG9uIGEgYmFja2dyb3VuZCB3b3JrZXIgdGhyZWFkLiBU
aGUgb3RoZXIKKyAgICAvLyB2aXJ0dWFsIG1ldGhvZCBpcyBpbnZva2VkIGJ5IHRoZSBlbWJlZGRl
ci4KKyAgICB2b2lkIGRpZENyZWF0ZVNuYXBzaG90RmlsZShjb25zdCBXZWJGaWxlSW5mbyYsIFBh
c3NSZWZQdHI8V2ViQ29yZTo6QmxvYkRhdGFIYW5kbGU+IHNuYXBzaG90KTsKKwogcHJpdmF0ZToK
ICAgICBPd25QdHI8V2ViQ29yZTo6QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPiBtX2NhbGxiYWNr
czsKIApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyQXN5bmNGaWxlU3lz
dGVtQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVtLmNwcAkocmV2aXNpb24gMTQxNzkxKQorKysg
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzksMTUgKzE3OSwxMiBAQCB2b2lkIFdvcmtlckFzeW5j
RmlsZVN5c3RlbUNocm9taXVtOjpjcmVhCiAKIHZvaWQgV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hy
b21pdW06OmNyZWF0ZVNuYXBzaG90RmlsZUFuZFJlYWRNZXRhZGF0YShjb25zdCBLVVJMJiBwYXRo
LCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4gY2FsbGJhY2tzKQogewotICAg
IEtVUkwgaW50ZXJuYWxCbG9iVVJMID0gQmxvYlVSTDo6Y3JlYXRlSW50ZXJuYWxVUkwoKTsKLQot
ICAgIGNyZWF0ZVdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UoY3JlYXRlU25hcHNob3RG
aWxlQ2FsbGJhY2soaW50ZXJuYWxCbG9iVVJMLCBjYWxsYmFja3MpKS0+cG9zdENyZWF0ZVNuYXBz
aG90RmlsZVRvTWFpblRocmVhZChtX3dlYkZpbGVTeXN0ZW0sIGludGVybmFsQmxvYlVSTCwgcGF0
aCwgbV9tb2RlRm9yQ3VycmVudE9wZXJhdGlvbik7CisgICAgY3JlYXRlV29ya2VyRmlsZVN5c3Rl
bUNhbGxiYWNrc0JyaWRnZShjYWxsYmFja3MpLT5wb3N0Q3JlYXRlU25hcHNob3RGaWxlVG9NYWlu
VGhyZWFkKG1fd2ViRmlsZVN5c3RlbSwgcGF0aCwgbV9tb2RlRm9yQ3VycmVudE9wZXJhdGlvbik7
CiB9CiAKIFBhc3NSZWZQdHI8V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZT4gV29ya2Vy
QXN5bmNGaWxlU3lzdGVtQ2hyb21pdW06OmNyZWF0ZVdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NC
cmlkZ2UoUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+IGNhbGxiYWNrcykKIHsK
ICAgICBBU1NFUlQobV9zeW5jaHJvbm91c1R5cGUgPT0gQXN5bmNocm9ub3VzRmlsZVN5c3RlbSB8
fCAhbV9icmlkZ2VGb3JDdXJyZW50T3BlcmF0aW9uKTsKLSAgICAodm9pZCltX3N5bmNocm9ub3Vz
VHlwZTsKIAogICAgIG1fbW9kZUZvckN1cnJlbnRPcGVyYXRpb24gPSBmaWxlU3lzdGVtT3BlcmF0
aW9uc01vZGU7CiAgICAgbV9tb2RlRm9yQ3VycmVudE9wZXJhdGlvbi5hcHBlbmQoU3RyaW5nOjpu
dW1iZXIobV93b3JrZXJDb250ZXh0LT50aHJlYWQoKS0+cnVuTG9vcCgpLmNyZWF0ZVVuaXF1ZUlk
KCkpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckZpbGVTeXN0ZW1D
YWxsYmFja3NCcmlkZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UuY3BwCShyZXZpc2lvbiAxNDE3OTEp
CisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tz
QnJpZGdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTAgKzMzLDExIEBACiAKICNpZiBFTkFC
TEUoRklMRV9TWVNURU0pICYmIEVOQUJMRShXT1JLRVJTKQogCisjaW5jbHVkZSAiQmxvYkRhdGEu
aCIKICNpbmNsdWRlICJDcm9zc1RocmVhZFRhc2suaCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5j
bHVkZSAiV2ViQ29tbW9uV29ya2VyQ2xpZW50LmgiCi0jaW5jbHVkZSAiV2ViRmlsZVN5c3RlbUNh
bGxiYWNrcy5oIgorI2luY2x1ZGUgIldlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsLmgiCiAjaW5j
bHVkZSAiV2ViRmlsZVN5c3RlbUVudHJ5LmgiCiAjaW5jbHVkZSAiV2ViV29ya2VyQmFzZS5oIgog
I2luY2x1ZGUgIldvcmtlckNvbnRleHQuaCIKQEAgLTEyNCw2ICsxMjUsMTcgQEAgcHVibGljOgog
ICAgICAgICBkZWxldGUgdGhpczsKICAgICB9CiAKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ3JlYXRl
U25hcHNob3RGaWxlKGNvbnN0IFdlYkZpbGVJbmZvJiBpbmZvKQorICAgIHsKKyAgICAgICAgLy8g
SXQncyBpbXBvcnRhbnQgdG8gY3JlYXRlIGEgQmxvYkRhdGFIYW5kbGUgdGhhdCByZWZlcnMgdG8g
dGhlIHBsYXRmb3JtIGZpbGUgcGF0aCBwcmlvcgorICAgICAgICAvLyB0byByZXR1cm4gZnJvbSB0
aGlzIG1ldGhvZCBzbyB0aGUgdW5kZXJseWluZyBmaWxlIHdpbGwgbm90IGJlIGRlbGV0ZWQuCisg
ICAgICAgIE93blB0cjxCbG9iRGF0YT4gYmxvYkRhdGEgPSBCbG9iRGF0YTo6Y3JlYXRlKCk7Cisg
ICAgICAgIGJsb2JEYXRhLT5hcHBlbmRGaWxlKGluZm8ucGxhdGZvcm1QYXRoKTsKKyAgICAgICAg
UmVmUHRyPEJsb2JEYXRhSGFuZGxlPiBzbmFwc2hvdEJsb2IgPSBCbG9iRGF0YUhhbmRsZTo6Y3Jl
YXRlKGJsb2JEYXRhLnJlbGVhc2UoKSwgaW5mby5sZW5ndGgpOworICAgICAgICBtX2JyaWRnZS0+
ZGlkQ3JlYXRlU25hcHNob3RGaWxlT25NYWluVGhyZWFkKGluZm8sIG1fbW9kZSwgc25hcHNob3RC
bG9iKTsKKyAgICAgICAgZGVsZXRlIHRoaXM7CisgICAgfQorCiAgICAgdmlydHVhbCB2b2lkIGRp
ZFJlYWREaXJlY3RvcnkoY29uc3QgV2ViVmVjdG9yPFdlYkZpbGVTeXN0ZW1FbnRyeT4mIGVudHJp
ZXMsIGJvb2wgaGFzTW9yZSkKICAgICB7CiAgICAgICAgIG1fYnJpZGdlLT5kaWRSZWFkRGlyZWN0
b3J5T25NYWluVGhyZWFkKGVudHJpZXMsIGhhc01vcmUsIG1fbW9kZSk7CkBAIC0yODksMTMgKzMw
MSwxMyBAQCB2b2lkIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OnBvCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0aGlzLCBtb2RlKSk7CiB9CiAKLXZvaWQgV29ya2VyRmlsZVN5
c3RlbUNhbGxiYWNrc0JyaWRnZTo6cG9zdENyZWF0ZVNuYXBzaG90RmlsZVRvTWFpblRocmVhZChX
ZWJGaWxlU3lzdGVtKiBmaWxlU3lzdGVtLCBjb25zdCBLVVJMJiBpbnRlcm5hbEJsb2JVUkwsIGNv
bnN0IEtVUkwmIHBhdGgsIGNvbnN0IFN0cmluZyYgbW9kZSkKK3ZvaWQgV29ya2VyRmlsZVN5c3Rl
bUNhbGxiYWNrc0JyaWRnZTo6cG9zdENyZWF0ZVNuYXBzaG90RmlsZVRvTWFpblRocmVhZChXZWJG
aWxlU3lzdGVtKiBmaWxlU3lzdGVtLCBjb25zdCBLVVJMJiBwYXRoLCBjb25zdCBTdHJpbmcmIG1v
ZGUpCiB7CiAgICAgQVNTRVJUKGZpbGVTeXN0ZW0pOwogICAgIGRpc3BhdGNoVGFza1RvTWFpblRo
cmVhZCgKICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZjcmVhdGVTbmFwc2hvdEZpbGVPbk1h
aW5UaHJlYWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbGxvd0Nyb3NzVGhyZWFkQWNj
ZXNzKGZpbGVTeXN0ZW0pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxCbG9i
VVJMLCBwYXRoLCB0aGlzLCBtb2RlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRo
LCB0aGlzLCBtb2RlKSk7CiB9CiAKIHZvaWQgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRn
ZTo6b3BlbkZpbGVTeXN0ZW1Pbk1haW5UaHJlYWQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdl
YkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50LCBXZWJGaWxlU3lzdGVtOjpUeXBlIHR5
cGUsIGxvbmcgbG9uZyBzaXplLCBib29sIGNyZWF0ZSwgUGFzc1JlZlB0cjxXb3JrZXJGaWxlU3lz
dGVtQ2FsbGJhY2tzQnJpZGdlPiBicmlkZ2UsIGNvbnN0IFN0cmluZyYgbW9kZSkKQEAgLTM1Nyw5
ICszNjksOSBAQCB2b2lkIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OnJlCiAgICAg
ZmlsZVN5c3RlbS0+cmVhZERpcmVjdG9yeShwYXRoLCBNYWluVGhyZWFkRmlsZVN5c3RlbUNhbGxi
YWNrczo6Y3JlYXRlTGVha2VkUHRyKGJyaWRnZSwgbW9kZSkpOwogfQogCi12b2lkIFdvcmtlckZp
bGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OmNyZWF0ZVNuYXBzaG90RmlsZU9uTWFpblRocmVhZChX
ZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViRmlsZVN5c3RlbSogZmlsZVN5c3Rl
bSwgY29uc3QgS1VSTCYgaW50ZXJuYWxCbG9iVVJMLCBjb25zdCBLVVJMJiBwYXRoLCBQYXNzUmVm
UHRyPFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U+IGJyaWRnZSwgY29uc3QgU3RyaW5n
JiBtb2RlKQordm9pZCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpjcmVhdGVTbmFw
c2hvdEZpbGVPbk1haW5UaHJlYWQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdl
YkZpbGVTeXN0ZW0qIGZpbGVTeXN0ZW0sIGNvbnN0IEtVUkwmIHBhdGgsIFBhc3NSZWZQdHI8V29y
a2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZT4gYnJpZGdlLCBjb25zdCBTdHJpbmcmIG1vZGUp
CiB7Ci0gICAgZmlsZVN5c3RlbS0+Y3JlYXRlU25hcHNob3RGaWxlQW5kUmVhZE1ldGFkYXRhKGlu
dGVybmFsQmxvYlVSTCwgcGF0aCwgTWFpblRocmVhZEZpbGVTeXN0ZW1DYWxsYmFja3M6OmNyZWF0
ZUxlYWtlZFB0cihicmlkZ2UsIG1vZGUpKTsKKyAgICBmaWxlU3lzdGVtLT5jcmVhdGVTbmFwc2hv
dEZpbGVBbmRSZWFkTWV0YWRhdGEocGF0aCwgTWFpblRocmVhZEZpbGVTeXN0ZW1DYWxsYmFja3M6
OmNyZWF0ZUxlYWtlZFB0cihicmlkZ2UsIG1vZGUpKTsKIH0KIAogdm9pZCBXb3JrZXJGaWxlU3lz
dGVtQ2FsbGJhY2tzQnJpZGdlOjpkaWRGYWlsT25NYWluVGhyZWFkKFdlYkZpbGVFcnJvciBlcnJv
ciwgY29uc3QgU3RyaW5nJiBtb2RlKQpAQCAtMzgzLDYgKzM5NSwxMSBAQCB2b2lkIFdvcmtlckZp
bGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OmRpCiAgICAgbWF5UG9zdFRhc2tUb1dvcmtlcihjcmVh
dGVDYWxsYmFja1Rhc2soJmRpZFJlYWRNZXRhZGF0YU9uV29ya2VyVGhyZWFkLCB0aGlzLCBpbmZv
KSwgbW9kZSk7CiB9CiAKK3ZvaWQgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6ZGlk
Q3JlYXRlU25hcHNob3RGaWxlT25NYWluVGhyZWFkKGNvbnN0IFdlYkZpbGVJbmZvJiBpbmZvLCBj
b25zdCBTdHJpbmcmIG1vZGUsIFBhc3NSZWZQdHI8QmxvYkRhdGFIYW5kbGU+IHNuYXBzaG90Qmxv
YikKK3sKKyAgICBtYXlQb3N0VGFza1RvV29ya2VyKGNyZWF0ZUNhbGxiYWNrVGFzaygmZGlkQ3Jl
YXRlU25hcHNob3RGaWxlT25Xb3JrZXJUaHJlYWQsIHRoaXMsIGluZm8sIHNuYXBzaG90QmxvYiks
IG1vZGUpOworfQorCiB2b2lkIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OmRpZFJl
YWREaXJlY3RvcnlPbk1haW5UaHJlYWQoY29uc3QgV2ViVmVjdG9yPFdlYkZpbGVTeXN0ZW1FbnRy
eT4mIGVudHJpZXMsIGJvb2wgaGFzTW9yZSwgY29uc3QgU3RyaW5nJiBtb2RlKQogewogICAgIG1h
eVBvc3RUYXNrVG9Xb3JrZXIoCkBAIC0zOTAsNyArNDA3LDcgQEAgdm9pZCBXb3JrZXJGaWxlU3lz
dGVtQ2FsbGJhY2tzQnJpZGdlOjpkaQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcywg
ZW50cmllcywgaGFzTW9yZSksIG1vZGUpOwogfQogCi1Xb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tz
QnJpZGdlOjpXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlKFdlYkNvcmU6Oldvcmtlckxv
YWRlclByb3h5KiB3b3JrZXJMb2FkZXJQcm94eSwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCwgV2ViRmlsZVN5c3RlbUNhbGxiYWNrcyogY2FsbGJhY2tzKQor
V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNr
c0JyaWRnZShXZWJDb3JlOjpXb3JrZXJMb2FkZXJQcm94eSogd29ya2VyTG9hZGVyUHJveHksIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIFdlYkZpbGVTeXN0
ZW1DYWxsYmFja3NJbXBsKiBjYWxsYmFja3MpCiAgICAgOiBtX3dvcmtlckxvYWRlclByb3h5KHdv
cmtlckxvYWRlclByb3h5KQogICAgICwgbV93b3JrZXJDb250ZXh0KHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQpCiAgICAgLCBtX3dvcmtlckNvbnRleHRPYnNlcnZlcihXb3JrZXJGaWxlU3lzdGVtQ29u
dGV4dE9ic2VydmVyOjpjcmVhdGUoc3RhdGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KG1fd29ya2Vy
Q29udGV4dCksIHRoaXMpLmxlYWtQdHIoKSkKQEAgLTQyNCw2ICs0NDEsMTEgQEAgdm9pZCBXb3Jr
ZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpkaQogICAgIGJyaWRnZS0+bV9jYWxsYmFja3NP
bldvcmtlclRocmVhZC0+ZGlkUmVhZE1ldGFkYXRhKGluZm8pOwogfQogCit2b2lkIFdvcmtlckZp
bGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OmRpZENyZWF0ZVNuYXBzaG90RmlsZU9uV29ya2VyVGhy
ZWFkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPFdvcmtlckZpbGVTeXN0ZW1D
YWxsYmFja3NCcmlkZ2U+IGJyaWRnZSwgY29uc3QgV2ViRmlsZUluZm8mIGluZm8sIFBhc3NSZWZQ
dHI8QmxvYkRhdGFIYW5kbGU+IHNuYXBzaG90QmxvYikKK3sKKyAgICBicmlkZ2UtPm1fY2FsbGJh
Y2tzT25Xb3JrZXJUaHJlYWQtPmRpZENyZWF0ZVNuYXBzaG90RmlsZShpbmZvLCBzbmFwc2hvdEJs
b2IpOworfQorCiB2b2lkIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OmRpZFJlYWRE
aXJlY3RvcnlPbldvcmtlclRocmVhZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0
cjxXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlPiBicmlkZ2UsIGNvbnN0IFdlYlZlY3Rv
cjxXZWJGaWxlU3lzdGVtRW50cnk+JiBlbnRyaWVzLCBib29sIGhhc01vcmUpCiB7CiAgICAgYnJp
ZGdlLT5tX2NhbGxiYWNrc09uV29ya2VyVGhyZWFkLT5kaWRSZWFkRGlyZWN0b3J5KGVudHJpZXMs
IGhhc01vcmUpOwpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyRmlsZVN5
c3RlbUNhbGxiYWNrc0JyaWRnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UuaAkocmV2aXNpb24gMTQxNzkx
KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNr
c0JyaWRnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEJsb2JEYXRh
SGFuZGxlOwogY2xhc3MgV29ya2VyTG9hZGVyUHJveHk7CiB9CiAKQEAgLTUyLDcgKzUzLDcgQEAg
Y2xhc3MgQXN5bmNGaWxlU3lzdGVtOwogY2xhc3MgTWFpblRocmVhZEZpbGVTeXN0ZW1DYWxsYmFj
a3M7CiBjbGFzcyBXZWJDb21tb25Xb3JrZXJDbGllbnQ7CiBjbGFzcyBUaHJlYWRhYmxlQ2FsbGJh
Y2tzQnJpZGdlV3JhcHBlcjsKLWNsYXNzIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3M7CitjbGFzcyBX
ZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbDsKIGNsYXNzIFdvcmtlckZpbGVTeXN0ZW1Db250ZXh0
T2JzZXJ2ZXI7CiBzdHJ1Y3QgV2ViRmlsZUluZm87CiBzdHJ1Y3QgV2ViRmlsZVN5c3RlbUVudHJ5
OwpAQCAtNzcsNyArNzgsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHN0b3AoKTsKIAotICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U+IGNyZWF0ZShX
ZWJDb3JlOjpXb3JrZXJMb2FkZXJQcm94eSogd29ya2VyTG9hZGVyUHJveHksIFdlYkNvcmU6OlNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIHdvcmtlckNvbnRleHQsIFdlYkZpbGVTeXN0ZW1DYWxsYmFj
a3MqIGNhbGxiYWNrcykKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXb3JrZXJGaWxlU3lzdGVtQ2Fs
bGJhY2tzQnJpZGdlPiBjcmVhdGUoV2ViQ29yZTo6V29ya2VyTG9hZGVyUHJveHkqIHdvcmtlckxv
YWRlclByb3h5LCBXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiB3b3JrZXJDb250ZXh0
LCBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbCogY2FsbGJhY2tzKQogICAgIHsKICAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlKHdvcmtl
ckxvYWRlclByb3h5LCB3b3JrZXJDb250ZXh0LCBjYWxsYmFja3MpKTsKICAgICB9CkBAIC05NCwx
NyArOTUsMTggQEAgcHVibGljOgogICAgIHZvaWQgcG9zdEZpbGVFeGlzdHNUb01haW5UaHJlYWQo
V2ViRmlsZVN5c3RlbSosIGNvbnN0IFdlYkNvcmU6OktVUkwmIHBhdGgsIGNvbnN0IFN0cmluZyYg
bW9kZSk7CiAgICAgdm9pZCBwb3N0RGlyZWN0b3J5RXhpc3RzVG9NYWluVGhyZWFkKFdlYkZpbGVT
eXN0ZW0qLCBjb25zdCBXZWJDb3JlOjpLVVJMJiBwYXRoLCBjb25zdCBTdHJpbmcmIG1vZGUpOwog
ICAgIHZvaWQgcG9zdFJlYWREaXJlY3RvcnlUb01haW5UaHJlYWQoV2ViRmlsZVN5c3RlbSosIGNv
bnN0IFdlYkNvcmU6OktVUkwmIHBhdGgsIGNvbnN0IFN0cmluZyYgbW9kZSk7Ci0gICAgdm9pZCBw
b3N0Q3JlYXRlU25hcHNob3RGaWxlVG9NYWluVGhyZWFkKFdlYkZpbGVTeXN0ZW0qLCBjb25zdCBX
ZWJDb3JlOjpLVVJMJiBpbnRlcm5hbEJsb2JVUkwsIGNvbnN0IFdlYkNvcmU6OktVUkwmIHBhdGgs
IGNvbnN0IFN0cmluZyYgbW9kZSk7CisgICAgdm9pZCBwb3N0Q3JlYXRlU25hcHNob3RGaWxlVG9N
YWluVGhyZWFkKFdlYkZpbGVTeXN0ZW0qLCBjb25zdCBXZWJDb3JlOjpLVVJMJiBwYXRoLCBjb25z
dCBTdHJpbmcmIG1vZGUpOwogCiAgICAgLy8gQ2FsbGJhY2sgbWV0aG9kcyB0aGF0IGFyZSBjYWxs
ZWQgb24gdGhlIG1haW4gdGhyZWFkLgogICAgIHZvaWQgZGlkRmFpbE9uTWFpblRocmVhZChXZWJG
aWxlRXJyb3IsIGNvbnN0IFN0cmluZyYgbW9kZSk7CiAgICAgdm9pZCBkaWRPcGVuRmlsZVN5c3Rl
bU9uTWFpblRocmVhZChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYkNvcmU6OktVUkwmIHJv
b3RVUkwsIGNvbnN0IFN0cmluZyYgbW9kZSk7CiAgICAgdm9pZCBkaWRTdWNjZWVkT25NYWluVGhy
ZWFkKGNvbnN0IFN0cmluZyYgbW9kZSk7CiAgICAgdm9pZCBkaWRSZWFkTWV0YWRhdGFPbk1haW5U
aHJlYWQoY29uc3QgV2ViRmlsZUluZm8mLCBjb25zdCBTdHJpbmcmIG1vZGUpOworICAgIHZvaWQg
ZGlkQ3JlYXRlU25hcHNob3RGaWxlT25NYWluVGhyZWFkKGNvbnN0IFdlYkZpbGVJbmZvJiwgY29u
c3QgU3RyaW5nJiBtb2RlLCBQYXNzUmVmUHRyPFdlYkNvcmU6OkJsb2JEYXRhSGFuZGxlPiBzbmFw
c2hvdEJsb2IpOwogICAgIHZvaWQgZGlkUmVhZERpcmVjdG9yeU9uTWFpblRocmVhZChjb25zdCBX
ZWJWZWN0b3I8V2ViRmlsZVN5c3RlbUVudHJ5PiYsIGJvb2wgaGFzTW9yZSwgY29uc3QgU3RyaW5n
JiBtb2RlKTsKIAogcHJpdmF0ZToKLSAgICBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdl
KFdlYkNvcmU6OldvcmtlckxvYWRlclByb3h5KiwgV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3MqKTsKKyAgICBXb3JrZXJGaWxlU3lzdGVtQ2Fs
bGJhY2tzQnJpZGdlKFdlYkNvcmU6OldvcmtlckxvYWRlclByb3h5KiwgV2ViQ29yZTo6U2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsKik7CiAKICAgICAv
LyBNZXRob2RzIHRoYXQgYXJlIHRvIGJlIGNhbGxlZCBvbiB0aGUgbWFpbiB0aHJlYWQuCiAgICAg
c3RhdGljIHZvaWQgb3BlbkZpbGVTeXN0ZW1Pbk1haW5UaHJlYWQoV2ViQ29yZTo6U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIFdlYkNvbW1vbldvcmtlckNsaWVudCosIFdlYkZpbGVTeXN0ZW06OlR5
cGUsIGxvbmcgbG9uZyBzaXplLCBib29sIGNyZWF0ZSwgUGFzc1JlZlB0cjxXb3JrZXJGaWxlU3lz
dGVtQ2FsbGJhY2tzQnJpZGdlPiwgY29uc3QgU3RyaW5nJiBtb2RlKTsKQEAgLTExOCw3ICsxMjAs
NyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIGZpbGVFeGlzdHNPbk1haW5UaHJlYWQoV2Vi
Q29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYkZpbGVTeXN0ZW0qLCBjb25zdCBXZWJD
b3JlOjpLVVJMJiBwYXRoLCBQYXNzUmVmUHRyPFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlk
Z2U+LCBjb25zdCBTdHJpbmcmIG1vZGUpOwogICAgIHN0YXRpYyB2b2lkIGRpcmVjdG9yeUV4aXN0
c09uTWFpblRocmVhZChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViRmlsZVN5
c3RlbSosIGNvbnN0IFdlYkNvcmU6OktVUkwmIHBhdGgsIFBhc3NSZWZQdHI8V29ya2VyRmlsZVN5
c3RlbUNhbGxiYWNrc0JyaWRnZT4sIGNvbnN0IFN0cmluZyYgbW9kZSk7CiAgICAgc3RhdGljIHZv
aWQgcmVhZERpcmVjdG9yeU9uTWFpblRocmVhZChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgV2ViRmlsZVN5c3RlbSosIGNvbnN0IFdlYkNvcmU6OktVUkwmIHBhdGgsIFBhc3NSZWZQ
dHI8V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZT4sIGNvbnN0IFN0cmluZyYgbW9kZSk7
Ci0gICAgc3RhdGljIHZvaWQgY3JlYXRlU25hcHNob3RGaWxlT25NYWluVGhyZWFkKFdlYkNvcmU6
OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJGaWxlU3lzdGVtKiwgY29uc3QgV2ViQ29yZTo6
S1VSTCYgaW50ZXJuYWxCbG9iVVJMLCBjb25zdCBXZWJDb3JlOjpLVVJMJiBwYXRoLCBQYXNzUmVm
UHRyPFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U+LCBjb25zdCBTdHJpbmcmIG1vZGUp
OworICAgIHN0YXRpYyB2b2lkIGNyZWF0ZVNuYXBzaG90RmlsZU9uTWFpblRocmVhZChXZWJDb3Jl
OjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViRmlsZVN5c3RlbSosIGNvbnN0IFdlYkNvcmU6
OktVUkwmIHBhdGgsIFBhc3NSZWZQdHI8V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZT4s
IGNvbnN0IFN0cmluZyYgbW9kZSk7CiAKICAgICBmcmllbmQgY2xhc3MgTWFpblRocmVhZEZpbGVT
eXN0ZW1DYWxsYmFja3M7CiAKQEAgLTEyNyw2ICsxMjksNyBAQCBwcml2YXRlOgogICAgIHN0YXRp
YyB2b2lkIGRpZE9wZW5GaWxlU3lzdGVtT25Xb3JrZXJUaHJlYWQoV2ViQ29yZTo6U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRn
ZT4sIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgV2ViQ29yZTo6S1VSTCYgcm9vdFBhdGgpOwog
ICAgIHN0YXRpYyB2b2lkIGRpZFN1Y2NlZWRPbldvcmtlclRocmVhZChXZWJDb3JlOjpTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJp
ZGdlPik7CiAgICAgc3RhdGljIHZvaWQgZGlkUmVhZE1ldGFkYXRhT25Xb3JrZXJUaHJlYWQoV2Vi
Q29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8V29ya2VyRmlsZVN5c3Rl
bUNhbGxiYWNrc0JyaWRnZT4sIGNvbnN0IFdlYkZpbGVJbmZvJik7CisgICAgc3RhdGljIHZvaWQg
ZGlkQ3JlYXRlU25hcHNob3RGaWxlT25Xb3JrZXJUaHJlYWQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZT4s
IGNvbnN0IFdlYkZpbGVJbmZvJiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpCbG9iRGF0YUhhbmRsZT4g
c25hcHNob3RCbG9iKTsKICAgICBzdGF0aWMgdm9pZCBkaWRSZWFkRGlyZWN0b3J5T25Xb3JrZXJU
aHJlYWQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8V29ya2Vy
RmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZT4sIGNvbnN0IFdlYlZlY3RvcjxXZWJGaWxlU3lzdGVt
RW50cnk+JiwgYm9vbCBoYXNNb3JlKTsKIAogICAgIHN0YXRpYyB2b2lkIHJ1blRhc2tPbk1haW5U
aHJlYWQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8V29ya2Vy
RmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZT4sIFBhc3NPd25QdHI8V2ViQ29yZTo6U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dDo6VGFzaz4pOwpAQCAtMTQ2LDcgKzE0OSw3IEBAIHByaXZhdGU6CiAgICAg
V29ya2VyRmlsZVN5c3RlbUNvbnRleHRPYnNlcnZlciogbV93b3JrZXJDb250ZXh0T2JzZXJ2ZXI7
CiAKICAgICAvLyBUaGlzIGlzIHNlbGYtZGVzdHJ1Y3RlZCBhbmQgbXVzdCBiZSBmaXJlZCBvbiB0
aGUgd29ya2VyIHRocmVhZC4KLSAgICBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzKiBtX2NhbGxiYWNr
c09uV29ya2VyVGhyZWFkOworICAgIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsKiBtX2NhbGxi
YWNrc09uV29ya2VyVGhyZWFkOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>
<flag name="review"
          id="209714"
          type_id="1"
          status="+"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>192600</attachid>
            <date>2013-03-11 17:08:07 -0700</date>
            <delta_ts>2013-03-13 15:09:18 -0700</delta_ts>
            <desc>impl of new api</desc>
            <filename>impl3.txt</filename>
            <type>text/plain</type>
            <size>32258</size>
            <attacher name="Michael Nordman">michaeln</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0NTQxNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBACisyMDEzLTAzLTExICBNaWNoYWVs
IE5vcmRtYW4gIDxtaWNoYWVsbkBnb29nbGUuY29tPgorCisgICAgICAgIEZpbGVTeXN0ZW0gbW9k
czogQ2hhbmdlcyB0byBzbmFwc2hvdCBmaWxlIGNyZWF0aW9uIHRvIHJlZHVjZSBkZXBlbmRlbmNp
ZXMgb24gYmxvYiBVUkxzLgorICAgICAgICBBZGRpbmcgYSBuZXcgbWluaW1hbCBCbG9iRGF0YUhh
bmRsZSBjbGFzcyB3aGljaCB3aWxsIGJlIHJlaW1wbGVtZW50ZWQvYnVpbHQgdXBvbiBpbiBsYXRl
ciBDTHMuIEluIHRoaXMKKyAgICAgICAgcGF0Y2gsIGl0J3MganVzdCBlbm91Z2ggdG8gcmVmYWN0
b3IgdGhlIEZpbGVTeXN0ZW0gY29kZSB0byBub3QgZnVuY3Rpb24gaW4gdGVybXMgb2YgYmxvYlVS
THMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDg4
NTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBu
ZXcgdGVzdHMuIFRoaXMgaXMgc3RyaWN0bHkgYSByZWZhY3RvcmluZyBvZiB0aGUgZXhpc3Rpbmcg
Y29kZS4KKworICAgICAgICAqIE1vZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxlU3lzdGVtLmNwcDoK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RE9NRmlsZVN5c3RlbTo6Y3Jl
YXRlRmlsZSk6CisgICAgICAgICogTW9kdWxlcy9maWxlc3lzdGVtL0RPTUZpbGVTeXN0ZW1TeW5j
LmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRmb3JtL0FzeW5jRmlsZVN5
c3RlbUNhbGxiYWNrcy5oOgorICAgICAgICAoQXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrczo6ZGlkQ3JlYXRlU25hcHNo
b3RGaWxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvQXN5bmNGaWxlU3lzdGVtR3RrLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkFzeW5jRmlsZVN5c3RlbUd0azo6Y3JlYXRlU25hcHNob3RGaWxl
QW5kUmVhZE1ldGFkYXRhKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRmb3Jt
L25ldHdvcmsvQmxvYkRhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJD
b3JlOjpCbG9iRGF0YUhhbmRsZTo6QmxvYkRhdGFIYW5kbGUpOgorICAgICAgICAoV2ViQ29yZTo6
QmxvYkRhdGFIYW5kbGU6On5CbG9iRGF0YUhhbmRsZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0
d29yay9CbG9iRGF0YS5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChCbG9iRGF0YUhh
bmRsZSk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iRGF0YUhhbmRsZTo6Y3JlYXRlKToKKwogMjAx
My0wMy0xMSAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KIAogICAgICAgICBD
aHJvbWl1bSBidWlsZCBmaXguIEZvcmtlZCBmaWxlcyBzdHJpa2UgYWdhaW4uCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2ZpbGVzeXN0ZW0vRE9NRmlsZVN5c3RlbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9maWxlc3lzdGVtL0RPTUZpbGVTeXN0ZW0uY3Bw
CShyZXZpc2lvbiAxNDU0MTYpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZpbGVzeXN0ZW0v
RE9NRmlsZVN5c3RlbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OCwxOSArMTQ4LDI0IEBAIHZv
aWQgRE9NRmlsZVN5c3RlbTo6Y3JlYXRlV3JpdGVyKGNvbnN0IEYKIAogbmFtZXNwYWNlIHsKIAot
Y2xhc3MgR2V0TWV0YWRhdGFDYWxsYmFjayA6IHB1YmxpYyBGaWxlU3lzdGVtQ2FsbGJhY2tzQmFz
ZSB7CitjbGFzcyBTbmFwc2hvdEZpbGVDYWxsYmFjayA6IHB1YmxpYyBGaWxlU3lzdGVtQ2FsbGJh
Y2tzQmFzZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8R2V0TWV0YWRhdGFDYWxs
YmFjaz4gY3JlYXRlKFBhc3NSZWZQdHI8RE9NRmlsZVN5c3RlbT4gZmlsZXN5c3RlbSwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBLVVJMJiB1cmwsIFBhc3NSZWZQdHI8RmlsZUNhbGxiYWNrPiBz
dWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaykK
KyAgICBzdGF0aWMgUGFzc093blB0cjxTbmFwc2hvdEZpbGVDYWxsYmFjaz4gY3JlYXRlKFBhc3NS
ZWZQdHI8RE9NRmlsZVN5c3RlbT4gZmlsZXN5c3RlbSwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBLVVJMJiB1cmwsIFBhc3NSZWZQdHI8RmlsZUNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBh
c3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaykKICAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgR2V0TWV0YWRhdGFDYWxsYmFjayhmaWxlc3lzdGVtLCBuYW1lLCB1
cmwsIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaykpOworICAgICAgICByZXR1cm4gYWRv
cHRQdHIobmV3IFNuYXBzaG90RmlsZUNhbGxiYWNrKGZpbGVzeXN0ZW0sIG5hbWUsIHVybCwgc3Vj
Y2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrKSk7CiAgICAgfQogCi0gICAgdmlydHVhbCB2b2lk
IGRpZFJlYWRNZXRhZGF0YShjb25zdCBGaWxlTWV0YWRhdGEmIG1ldGFkYXRhKQorICAgIHZpcnR1
YWwgdm9pZCBkaWRDcmVhdGVTbmFwc2hvdEZpbGUoY29uc3QgRmlsZU1ldGFkYXRhJiBtZXRhZGF0
YSwgUGFzc1JlZlB0cjxCbG9iRGF0YUhhbmRsZT4gc25hcHNob3QpCiAgICAgewogICAgICAgICBB
U1NFUlQoIW1ldGFkYXRhLnBsYXRmb3JtUGF0aC5pc0VtcHR5KCkpOwogICAgICAgICBpZiAoIW1f
c3VjY2Vzc0NhbGxiYWNrKQogICAgICAgICAgICAgcmV0dXJuOwogCisgICAgICAgIC8vIFdlIGNh
bid0IGRpcmVjdGx5IHVzZSB0aGUgc25hcHNob3QgYmxvYiBkYXRhIGhhbmRsZSBiZWNhdXNlIHRo
ZSBjb250ZW50IHR5cGUgb24gaXQgaGFzbid0IGJlZW4gc2V0LgorICAgICAgICAvLyBUaGUgfHNu
YXBzaG90fCBwYXJhbSBpcyBoZXJlIHRvIHByb3ZpZGUgYSBhIGNoYWluIG9mIGN1c3RvZHkgdGhy
dSB0aHJlYWQgYnJpZGdpbmcgdGhhdCBpcyBoZWxkIG9udG8gdW50aWwKKyAgICAgICAgLy8gKmFm
dGVyKiB3ZSd2ZSBjb2luZWQgYSBGaWxlIHdpdGggYSBuZXcgaGFuZGxlIHRoYXQgaGFzIHRoZSBj
b3JyZWN0IHR5cGUgc2V0IG9uIGl0LiBUaGlzIGFsbG93cyB0aGUKKyAgICAgICAgLy8gYmxvYiBz
dG9yYWdlIHN5c3RlbSB0byB0cmFjayB3aGVuIGEgdGVtcCBmaWxlIGNhbiBhbmQgY2FuJ3QgYmUg
c2FmZWx5IGRlbGV0ZWQuCisKICAgICAgICAgLy8gRm9yIHJlZ3VsYXIgZmlsZXN5c3RlbSB0eXBl
cyAodGVtcG9yYXJ5IG9yIHBlcnNpc3RlbnQpLCB3ZSBzaG91bGQgbm90IGNhY2hlIGZpbGUgbWV0
YWRhdGEgYXMgaXQgY291bGQgY2hhbmdlIEZpbGUgc2VtYW50aWNzLgogICAgICAgICAvLyBGb3Ig
b3RoZXIgZmlsZXN5c3RlbSB0eXBlcyAod2hpY2ggY291bGQgYmUgcGxhdGZvcm0tc3BlY2lmaWMg
b25lcyksIHRoZXJlJ3MgYSBjaGFuY2UgdGhhdCB0aGUgZmlsZXMgYXJlIG9uIHJlbW90ZSBmaWxl
c3lzdGVtLiBJZiB0aGUgcG9ydCBoYXMgcmV0dXJuZWQgbWV0YWRhdGEganVzdCBwYXNzIGl0IHRv
IEZpbGUgY29uc3RydWN0b3IgKHNvIHdlIG1heSBjYWNoZSB0aGUgbWV0YWRhdGEpLgogICAgICAg
ICAvLyBGSVhNRTogV2Ugc2hvdWxkIHVzZSB0aGUgc25hcHNob3QgbWV0YWRhdGEgZm9yIGFsbCBm
aWxlcy4KQEAgLTE3OSw3ICsxODQsNyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAg
IEdldE1ldGFkYXRhQ2FsbGJhY2soUGFzc1JlZlB0cjxET01GaWxlU3lzdGVtPiBmaWxlc3lzdGVt
LCBjb25zdCBTdHJpbmcmIG5hbWUsICBjb25zdCBLVVJMJiB1cmwsIFBhc3NSZWZQdHI8RmlsZUNh
bGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4gZXJyb3JD
YWxsYmFjaykKKyAgICBTbmFwc2hvdEZpbGVDYWxsYmFjayhQYXNzUmVmUHRyPERPTUZpbGVTeXN0
ZW0+IGZpbGVzeXN0ZW0sIGNvbnN0IFN0cmluZyYgbmFtZSwgIGNvbnN0IEtVUkwmIHVybCwgUGFz
c1JlZlB0cjxGaWxlQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxFcnJvckNh
bGxiYWNrPiBlcnJvckNhbGxiYWNrKQogICAgICAgICA6IEZpbGVTeXN0ZW1DYWxsYmFja3NCYXNl
KGVycm9yQ2FsbGJhY2spCiAgICAgICAgICwgbV9maWxlc3lzdGVtKGZpbGVzeXN0ZW0pCiAgICAg
ICAgICwgbV9uYW1lKG5hbWUpCkBAIC0xOTksNyArMjA0LDcgQEAgcHJpdmF0ZToKIHZvaWQgRE9N
RmlsZVN5c3RlbTo6Y3JlYXRlRmlsZShjb25zdCBGaWxlRW50cnkqIGZpbGVFbnRyeSwgUGFzc1Jl
ZlB0cjxGaWxlQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxFcnJvckNhbGxi
YWNrPiBlcnJvckNhbGxiYWNrKQogewogICAgIEtVUkwgZmlsZVN5c3RlbVVSTCA9IGNyZWF0ZUZp
bGVTeXN0ZW1VUkwoZmlsZUVudHJ5KTsKLSAgICBtX2FzeW5jRmlsZVN5c3RlbS0+Y3JlYXRlU25h
cHNob3RGaWxlQW5kUmVhZE1ldGFkYXRhKGZpbGVTeXN0ZW1VUkwsIEdldE1ldGFkYXRhQ2FsbGJh
Y2s6OmNyZWF0ZSh0aGlzLCBmaWxlRW50cnktPm5hbWUoKSwgZmlsZVN5c3RlbVVSTCwgc3VjY2Vz
c0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrKSk7CisgICAgbV9hc3luY0ZpbGVTeXN0ZW0tPmNyZWF0
ZVNuYXBzaG90RmlsZUFuZFJlYWRNZXRhZGF0YShmaWxlU3lzdGVtVVJMLCBTbmFwc2hvdEZpbGVD
YWxsYmFjazo6Y3JlYXRlKHRoaXMsIGZpbGVFbnRyeS0+bmFtZSgpLCBmaWxlU3lzdGVtVVJMLCBz
dWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9maWxlc3lzdGVtL0RPTUZpbGVTeXN0
ZW1TeW5jLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZpbGVzeXN0
ZW0vRE9NRmlsZVN5c3RlbVN5bmMuY3BwCShyZXZpc2lvbiAxNDU0MTYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2ZpbGVzeXN0ZW0vRE9NRmlsZVN5c3RlbVN5bmMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTMsMTAgKzExMywxNiBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIHZv
aWQgZGlkUmVhZE1ldGFkYXRhKGNvbnN0IEZpbGVNZXRhZGF0YSYgbWV0YWRhdGEpCisgICAgdmly
dHVhbCB2b2lkIGRpZENyZWF0ZVNuYXBzaG90RmlsZShjb25zdCBGaWxlTWV0YWRhdGEmIG1ldGFk
YXRhLCBQYXNzUmVmUHRyPEJsb2JEYXRhSGFuZGxlPiBzbmFwc2hvdCkKICAgICB7CisgICAgICAg
IC8vIFdlIGNhbid0IGRpcmVjdGx5IHVzZSB0aGUgc25hcHNob3QgYmxvYiBkYXRhIGhhbmRsZSBi
ZWNhdXNlIHRoZSBjb250ZW50IHR5cGUgb24gaXQgaGFzbid0IGJlZW4gc2V0LgorICAgICAgICAv
LyBUaGUgfHNuYXBzaG90fCBwYXJhbSBpcyBoZXJlIHRvIHByb3ZpZGUgYSBhIGNoYWluIG9mIGN1
c3RvZHkgdGhydSB0aHJlYWQgYnJpZGdpbmcgdGhhdCBpcyBoZWxkIG9udG8gdW50aWwKKyAgICAg
ICAgLy8gKmFmdGVyKiB3ZSd2ZSBjb2luZWQgYSBGaWxlIHdpdGggYSBuZXcgaGFuZGxlIHRoYXQg
aGFzIHRoZSBjb3JyZWN0IHR5cGUgc2V0IG9uIGl0LiBUaGlzIGFsbG93cyB0aGUKKyAgICAgICAg
Ly8gYmxvYiBzdG9yYWdlIHN5c3RlbSB0byB0cmFjayB3aGVuIGEgdGVtcCBmaWxlIGNhbiBhbmQg
Y2FuJ3QgYmUgc2FmZWx5IGRlbGV0ZWQuCisKICAgICAgICAgLy8gRm9yIHJlZ3VsYXIgZmlsZXN5
c3RlbSB0eXBlcyAodGVtcG9yYXJ5IG9yIHBlcnNpc3RlbnQpLCB3ZSBzaG91bGQgbm90IGNhY2hl
IGZpbGUgbWV0YWRhdGEgYXMgaXQgY291bGQgY2hhbmdlIEZpbGUgc2VtYW50aWNzLgotICAgICAg
ICAvLyBGb3Igb3RoZXIgZmlsZXN5c3RlbSB0eXBlcyAod2hpY2ggY291bGQgYmUgcGxhdGZvcm0t
c3BlY2lmaWMgb25lcyksIHRoZXJlJ3MgYSBjaGFuY2UgdGhhdCB0aGUgZmlsZXMgYXJlIG9uIHJl
bW90ZSBmaWxlc3lzdGVtLiBJZiB0aGUgcG9ydCBoYXMgcmV0dXJuZWQgbWV0YWRhdGEganVzdCBw
YXNzIGl0IHRvIEZpbGUgY29uc3RydWN0b3IgKHNvIHdlIG1heSBjYWNoZSB0aGUgbWV0YWRhdGEp
LgorICAgICAgICAvLyBGb3Igb3RoZXIgZmlsZXN5c3RlbSB0eXBlcyAod2hpY2ggY291bGQgYmUg
cGxhdGZvcm0tc3BlY2lmaWMgb25lcyksIHRoZXJlJ3MgYSBjaGFuY2UgdGhhdCB0aGUgZmlsZXMg
YXJlIG9uIHJlbW90ZSBmaWxlc3lzdGVtLgorICAgICAgICAvLyBJZiB0aGUgcG9ydCBoYXMgcmV0
dXJuZWQgbWV0YWRhdGEganVzdCBwYXNzIGl0IHRvIEZpbGUgY29uc3RydWN0b3IgKHNvIHdlIG1h
eSBjYWNoZSB0aGUgbWV0YWRhdGEpLgogICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHVzZSB0
aGUgc25hcHNob3QgbWV0YWRhdGEgZm9yIGFsbCBmaWxlcy4KICAgICAgICAgLy8gaHR0cHM6Ly93
d3cudzMub3JnL0J1Z3MvUHVibGljL3Nob3dfYnVnLmNnaT9pZD0xNzc0NgogICAgICAgICBpZiAo
bV90eXBlID09IEZpbGVTeXN0ZW1UeXBlVGVtcG9yYXJ5IHx8IG1fdHlwZSA9PSBGaWxlU3lzdGVt
VHlwZVBlcnNpc3RlbnQpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0FzeW5jRmls
ZVN5c3RlbUNhbGxiYWNrcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0FzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcy5oCShyZXZpc2lvbiAxNDU0MTYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9Bc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3MuaAkod29ya2luZyBjb3B5
KQpAQCAtMzUsNiArMzUsNyBAQAogCiAjaW5jbHVkZSAiQXN5bmNGaWxlU3lzdGVtLmgiCiAjaW5j
bHVkZSAiQXN5bmNGaWxlV3JpdGVyLmgiCisjaW5jbHVkZSAiQmxvYkRhdGEuaCIKICNpbmNsdWRl
ICJGaWxlTWV0YWRhdGEuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAt
NTQsNiArNTUsOSBAQCBwdWJsaWM6CiAgICAgLy8gQ2FsbGVkIHdoZW4gYSBmaWxlIG1ldGFkYXRh
IGlzIHJlYWQgc3VjY2Vzc2Z1bGx5LgogICAgIHZpcnR1YWwgdm9pZCBkaWRSZWFkTWV0YWRhdGEo
Y29uc3QgRmlsZU1ldGFkYXRhJikgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogCisgICAgLy8g
Q2FsbGVkIHdoZW4gYSBzbmFwc2hvdCBmaWxlIGlzIGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5LgorICAg
IHZpcnR1YWwgdm9pZCBkaWRDcmVhdGVTbmFwc2hvdEZpbGUoY29uc3QgRmlsZU1ldGFkYXRhJiwg
UGFzc1JlZlB0cjxCbG9iRGF0YUhhbmRsZT4gc25hcHNob3QpIHsgQVNTRVJUX05PVF9SRUFDSEVE
KCk7IH0KKwogICAgIC8vIENhbGxlZCB3aGVuIGEgZGlyZWN0b3J5IGVudHJ5IGlzIHJlYWQuCiAg
ICAgdmlydHVhbCB2b2lkIGRpZFJlYWREaXJlY3RvcnlFbnRyeShjb25zdCBTdHJpbmcmIG5hbWUs
IGJvb2wgaXNEaXJlY3RvcnkpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0FzeW5jRmlsZVN5c3RlbUd0ay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0FzeW5jRmlsZVN5c3RlbUd0ay5jcHAJ
KHJldmlzaW9uIDE0NTQxNikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Bc3luY0Zp
bGVTeXN0ZW1HdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsNiArMTE4LDExIEBAIHZvaWQg
QXN5bmNGaWxlU3lzdGVtR3RrOjpjcmVhdGVXcml0ZXIoQXMKICAgICBub3RJbXBsZW1lbnRlZCgp
OwogfQogCit2b2lkIEFzeW5jRmlsZVN5c3RlbUd0azo6Y3JlYXRlU25hcHNob3RGaWxlQW5kUmVh
ZE1ldGFkYXRhKGNvbnN0IEtVUkwmLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNr
cz4pCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYkRh
dGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxv
YkRhdGEuY3BwCShyZXZpc2lvbiAxNDU0MTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL0Jsb2JEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsOCBAQAogCiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQmxvYkRhdGEuaCIKKyNpbmNsdWRlICJCbG9i
VVJMLmgiCisjaW5jbHVkZSAiVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5oIgogCiAjaW5jbHVkZSA8
d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CkBAIC0xMDEsNCArMTAz
LDE3IEBAIHZvaWQgQmxvYkRhdGE6OnN3YXBJdGVtcyhCbG9iRGF0YUl0ZW1MaXMKICAgICBtX2l0
ZW1zLnN3YXAoaXRlbXMpOwogfQogCisKK0Jsb2JEYXRhSGFuZGxlOjpCbG9iRGF0YUhhbmRsZShQ
YXNzT3duUHRyPEJsb2JEYXRhPiBkYXRhLCBsb25nIGxvbmcgc2l6ZSkKK3sKKyAgICBVTlVTRURf
UEFSQU0oc2l6ZSk7CisgICAgbV9pbnRlcm5hbFVSTCA9IEJsb2JVUkw6OmNyZWF0ZUludGVybmFs
VVJMKCk7CisgICAgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6cmVnaXN0ZXJCbG9iVVJMKG1faW50
ZXJuYWxVUkwsIGRhdGEpOworfQorCitCbG9iRGF0YUhhbmRsZTo6fkJsb2JEYXRhSGFuZGxlKCkK
K3sKKyAgICBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5Ojp1bnJlZ2lzdGVyQmxvYlVSTChtX2ludGVy
bmFsVVJMKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9CbG9iRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYkRhdGEuaAkocmV2aXNpb24gMTQ1NDE2KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yMDIsNiArMjAyLDIyIEBAIHByaXZhdGU6CiAgICAgQmxvYkRhdGFJdGVtTGlzdCBtX2l0ZW1z
OwogfTsKIAorLy8gRklYTUU6IFRoaXMgY2xhc3MgaXMgbW9zdGx5IHBsYWNlIGhvbGRlciB1bnRp
bCBJIGdldCBmYXJ0aGVyIGFsb25nIGluIGxhbmRpbmcKKy8vIGh0dHBzOi8vY29kZXJldmlldy5j
aHJvbWl1bS5vcmcvMTExOTIwMTcvLgorY2xhc3MgQmxvYkRhdGFIYW5kbGUgOiBwdWJsaWMgVGhy
ZWFkU2FmZVJlZkNvdW50ZWQ8QmxvYkRhdGFIYW5kbGU+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxCbG9iRGF0YUhhbmRsZT4gY3JlYXRlKFBhc3NPd25QdHI8QmxvYkRhdGE+IGRh
dGEsIGxvbmcgbG9uZyBzaXplKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBC
bG9iRGF0YUhhbmRsZShkYXRhLCBzaXplKSk7CisgICAgfQorCisgICAgfkJsb2JEYXRhSGFuZGxl
KCk7CisKK3ByaXZhdGU6CisgICAgQmxvYkRhdGFIYW5kbGUoUGFzc093blB0cjxCbG9iRGF0YT4s
IGxvbmcgbG9uZyBzaXplKTsKKyAgICBLVVJMIG1faW50ZXJuYWxVUkw7Cit9OworCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBCbG9iRGF0YV9oCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ1NDE2KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0NCBAQAorMjAxMy0wMy0xMSAg
TWljaGFlbCBOb3JkbWFuICA8bWljaGFlbG5AZ29vZ2xlLmNvbT4KKworICAgICAgICBbQ2hyb21p
dW1dIEZpbGVTeXN0ZW0gbW9kczogQ2hhbmdlcyB0byBzbmFwc2hvdCBmaWxlIGNyZWF0aW9uIHRv
IHJlZHVjZSBkZXBlbmRlbmNpZXMgb24gYmxvYnMuCisgICAgICAgIE5vIGxvbmdlciBzZW5kIGEg
fGJsb2JVUkx8IHRvIHRoZSBicm93c2VyIHByb2Nlc3MsIG5vIGxvbmdlciBleHBlY3QgdGhlIGJy
b3dzZXIgcHJvY2VzcworICAgICAgICB0byBoYXZlIHJlZ2lzdGVyZWQgYSBibG9iIHdpdGggdGhh
dCB1cmwuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MDg4NTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IHNyYy9Bc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbGVXcml0ZXJIZWxwZXJDYWxsYmFja3M6OmRpZENyZWF0ZVNuYXBz
aG90RmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bTo6Y3Jl
YXRlU25hcHNob3RGaWxlQW5kUmVhZE1ldGFkYXRhKToKKyAgICAgICAgKiBzcmMvQXN5bmNGaWxl
U3lzdGVtQ2hyb21pdW0uaDoKKyAgICAgICAgKEFzeW5jRmlsZVN5c3RlbUNocm9taXVtKToKKyAg
ICAgICAgKiBzcmMvTG9jYWxGaWxlU3lzdGVtQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgICogc3JjL1dlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGw6OmRpZENyZWF0ZVNuYXBzaG90
RmlsZSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAqIHNyYy9XZWJGaWxlU3lzdGVtQ2Fs
bGJhY2tzSW1wbC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJGaWxlU3lzdGVt
Q2FsbGJhY2tzSW1wbCk6CisgICAgICAgICogc3JjL1dvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9t
aXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVt
OjpjcmVhdGVTbmFwc2hvdEZpbGVBbmRSZWFkTWV0YWRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
V29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW06OmNyZWF0ZVdvcmtlckZpbGVTeXN0ZW1DYWxs
YmFja3NCcmlkZ2UpOgorICAgICAgICAqIHNyYy9Xb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJp
ZGdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TWFpblRocmVhZEZpbGVTeXN0ZW1DYWxsYmFja3M6
OmRpZENyZWF0ZVNuYXBzaG90RmlsZSk6CisgICAgICAgIChNYWluVGhyZWFkRmlsZVN5c3RlbUNh
bGxiYWNrcyk6CisgICAgICAgIChXZWJLaXQ6OldvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlk
Z2U6OnBvc3RDcmVhdGVTbmFwc2hvdEZpbGVUb01haW5UaHJlYWQpOgorICAgICAgICAoV2ViS2l0
OjpXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpjcmVhdGVTbmFwc2hvdEZpbGVPbk1h
aW5UaHJlYWQpOgorICAgICAgICAoV2ViS2l0OjpXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJp
ZGdlOjpkaWRDcmVhdGVTbmFwc2hvdEZpbGVPbk1haW5UaHJlYWQpOgorICAgICAgICAoV2ViS2l0
KToKKyAgICAgICAgKFdlYktpdDo6V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6V29y
a2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZSk6CisgICAgICAgIChXZWJLaXQ6OldvcmtlckZp
bGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OmRpZENyZWF0ZVNuYXBzaG90RmlsZU9uV29ya2VyVGhy
ZWFkKToKKyAgICAgICAgKiBzcmMvV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZS5oOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpX
b3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpjcmVhdGUpOgorICAgICAgICAoV29ya2Vy
RmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZSk6CisKIDIwMTMtMDMtMTEgIFhpeXVhbiBYaWEgIDx4
aXl1YW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtDaHJvbWl1bV0gY2hyb21pdW0vbGludXgg
YnJlYWtzIGV4cGVjdGF0aW9uIG9mIHNlbGVjdCBwb3B1cCBiYWNrZ3JvdW5kIGR1ZSB0byBiYWQg
VUEgY3NzIHJ1bGVzCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3luY0ZpbGVT
eXN0ZW1DaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uY3BwCShyZXZpc2lvbiAxNDU0MTYpCisrKyBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ4LDQ2ICs0OCw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotbmFt
ZXNwYWNlIHsKLQotLy8gU3BlY2lhbGl6ZWQgY2FsbGJhY2sgY2xhc3MgZm9yIGNyZWF0ZVNuYXBz
aG90RmlsZUFuZFJlYWRNZXRhZGF0YS4KLWNsYXNzIFNuYXBzaG90RmlsZUNhbGxiYWNrcyA6IHB1
YmxpYyBBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3MgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNz
T3duUHRyPFNuYXBzaG90RmlsZUNhbGxiYWNrcz4gY3JlYXRlKGNvbnN0IEtVUkwmIGludGVybmFs
QmxvYlVSTCwgUGFzc093blB0cjxXZWJDb3JlOjpBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+IGNh
bGxiYWNrcykKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgU25hcHNob3RGaWxl
Q2FsbGJhY2tzKGludGVybmFsQmxvYlVSTCwgY2FsbGJhY2tzKSk7Ci0gICAgfQotCi0gICAgdmly
dHVhbCB2b2lkIGRpZFJlYWRNZXRhZGF0YShjb25zdCBGaWxlTWV0YWRhdGEmIG1ldGFkYXRhKQot
ICAgIHsKLSAgICAgICAgQVNTRVJUKG1fY2FsbGJhY2tzKTsKLQotICAgICAgICAvLyBUaGlzIHdp
bGwgY3JlYXRlIGEgbmV3IEZpbGUgb2JqZWN0IHVzaW5nIHRoZSBtZXRhZGF0YS4KLSAgICAgICAg
bV9jYWxsYmFja3MtPmRpZFJlYWRNZXRhZGF0YShtZXRhZGF0YSk7Ci0KLSAgICAgICAgLy8gTm93
IHRoYXQgd2UndmUgcmVnaXN0ZXJlZCB0aGUgc25hcHNob3QgZmlsZSwgd2UgY2FuIHVucmVnaXN0
ZXIgb3VyIGludGVybmFsQmxvYlVSTCB3aGljaCBoYXMgcGxheWVkIGEgcGxhY2Vob2xkZXIgZm9y
IHRoZSBmaWxlIGR1cmluZyB0aGUgSVBDLgotICAgICAgICBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5
Ojp1bnJlZ2lzdGVyQmxvYlVSTChtX2ludGVybmFsQmxvYlVSTCk7Ci0gICAgfQotCi0gICAgdmly
dHVhbCB2b2lkIGRpZEZhaWwoaW50IGVycm9yKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fY2Fs
bGJhY2tzKTsKLSAgICAgICAgbV9jYWxsYmFja3MtPmRpZEZhaWwoZXJyb3IpOwotICAgIH0KLQot
cHJpdmF0ZToKLSAgICBTbmFwc2hvdEZpbGVDYWxsYmFja3MoY29uc3QgS1VSTCYgaW50ZXJuYWxC
bG9iVVJMLCBQYXNzT3duUHRyPFdlYkNvcmU6OkFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4gY2Fs
bGJhY2tzKQotICAgICAgICA6IG1faW50ZXJuYWxCbG9iVVJMKGludGVybmFsQmxvYlVSTCkKLSAg
ICAgICAgLCBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCi0gICAgewotICAgIH0KLQotICAgIEtVUkwg
bV9pbnRlcm5hbEJsb2JVUkw7Ci0gICAgT3duUHRyPFdlYkNvcmU6OkFzeW5jRmlsZVN5c3RlbUNh
bGxiYWNrcz4gbV9jYWxsYmFja3M7Ci19OwotCi19IC8vIG5hbWVzcGFjZQotCiBib29sIEFzeW5j
RmlsZVN5c3RlbTo6aXNBdmFpbGFibGUoKQogewogICAgIHJldHVybiB0cnVlOwpAQCAtMTg2LDcg
KzE0NiwxMSBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICAgICAgZGVsZXRlIHRoaXM7CiAgICAg
fQotCisgICAgdmlydHVhbCB2b2lkIGRpZENyZWF0ZVNuYXBzaG90RmlsZShjb25zdCBXZWJLaXQ6
OldlYkZpbGVJbmZvJiBpbmZvKQorICAgIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIGRlbGV0ZSB0aGlzOworICAgIH0KICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVhZERp
cmVjdG9yeShjb25zdCBXZWJLaXQ6OldlYlZlY3RvcjxXZWJLaXQ6OldlYkZpbGVTeXN0ZW1FbnRy
eT4mIGVudHJpZXMsIGJvb2wgaGFzTW9yZSkKICAgICB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwpAQCAtMjE5LDE1ICsxODMsNyBAQCB2b2lkIEFzeW5jRmlsZVN5c3RlbUNocm9taXVt
OjpjcmVhdGVXcml0CiAKIHZvaWQgQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW06OmNyZWF0ZVNuYXBz
aG90RmlsZUFuZFJlYWRNZXRhZGF0YShjb25zdCBLVVJMJiBwYXRoLCBQYXNzT3duUHRyPEFzeW5j
RmlsZVN5c3RlbUNhbGxiYWNrcz4gY2FsbGJhY2tzKQogewotICAgIEtVUkwgaW50ZXJuYWxCbG9i
VVJMID0gQmxvYlVSTDo6Y3JlYXRlSW50ZXJuYWxVUkwoKTsKLQotICAgIC8vIFRoaXMgd2lsbCBj
cmVhdGUgYSBzbmFwc2hvdCBmaWxlIGFuZCByZWdpc3RlciB0aGUgZmlsZSB0byBhIGJsb2IgdXNp
bmcgdGhlIGdpdmVuIGludGVybmFsQmxvYlVSTC4KLSAgICBtX3dlYkZpbGVTeXN0ZW0tPmNyZWF0
ZVNuYXBzaG90RmlsZUFuZFJlYWRNZXRhZGF0YShpbnRlcm5hbEJsb2JVUkwsIHBhdGgsIG5ldyBX
ZWJLaXQ6OldlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsKGNyZWF0ZVNuYXBzaG90RmlsZUNhbGxi
YWNrKGludGVybmFsQmxvYlVSTCwgY2FsbGJhY2tzKSkpOwotfQotCi1QYXNzT3duUHRyPEFzeW5j
RmlsZVN5c3RlbUNhbGxiYWNrcz4gQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW06OmNyZWF0ZVNuYXBz
aG90RmlsZUNhbGxiYWNrKGNvbnN0IEtVUkwmIGludGVybmFsQmxvYlVSTCwgUGFzc093blB0cjxB
c3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+IGNhbGxiYWNrcykgY29uc3QKLXsKLSAgICByZXR1cm4g
U25hcHNob3RGaWxlQ2FsbGJhY2tzOjpjcmVhdGUoaW50ZXJuYWxCbG9iVVJMLCBjYWxsYmFja3Mp
OworICAgIG1fd2ViRmlsZVN5c3RlbS0+Y3JlYXRlU25hcHNob3RGaWxlQW5kUmVhZE1ldGFkYXRh
KHBhdGgsIG5ldyBXZWJLaXQ6OldlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsKGNhbGxiYWNrcykp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9Bc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL0FzeW5jRmlsZVN5c3RlbUNocm9taXVtLmgJKHJldmlzaW9uIDE0
NTQxNikKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0FzeW5jRmlsZVN5c3RlbUNocm9t
aXVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDggKzY5LDYgQEAgcHVibGljOgogcHJvdGVjdGVk
OgogICAgIEFzeW5jRmlsZVN5c3RlbUNocm9taXVtKCk7CiAKLSAgICBQYXNzT3duUHRyPEFzeW5j
RmlsZVN5c3RlbUNhbGxiYWNrcz4gY3JlYXRlU25hcHNob3RGaWxlQ2FsbGJhY2soY29uc3QgS1VS
TCYgaW50ZXJuYWxCbG9iVVJMLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4p
IGNvbnN0OwotCiAgICAgV2ViS2l0OjpXZWJGaWxlU3lzdGVtKiBtX3dlYkZpbGVTeXN0ZW07CiB9
OwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Mb2NhbEZpbGVTeXN0ZW1DaHJv
bWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvTG9jYWxG
aWxlU3lzdGVtQ2hyb21pdW0uY3BwCShyZXZpc2lvbiAxNDU0MTYpCisrKyBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9Mb2NhbEZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE1Myw3ICsxNTMsNyBAQCBib29sIGFsbG93RmlsZVN5c3RlbUZvcldvcmtlcihXZWJDb21t
b25XCiAgICAgcmV0dXJuIGJyaWRnZS0+cmVzdWx0KCk7CiB9CiAKLXZvaWQgb3BlbkZpbGVTeXN0
ZW1Gb3JXb3JrZXIoV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQsIFdlYkZpbGVT
eXN0ZW06OlR5cGUgdHlwZSwgbG9uZyBsb25nIHNpemUsIGJvb2wgY3JlYXRlLCBXZWJGaWxlU3lz
dGVtQ2FsbGJhY2tzKiBjYWxsYmFja3MsIEZpbGVTeXN0ZW1TeW5jaHJvbm91c1R5cGUgc3luY2hy
b25vdXNUeXBlKQordm9pZCBvcGVuRmlsZVN5c3RlbUZvcldvcmtlcihXZWJDb21tb25Xb3JrZXJD
bGllbnQqIGNvbW1vbkNsaWVudCwgV2ViRmlsZVN5c3RlbTo6VHlwZSB0eXBlLCBsb25nIGxvbmcg
c2l6ZSwgYm9vbCBjcmVhdGUsIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsKiBjYWxsYmFja3Ms
IEZpbGVTeXN0ZW1TeW5jaHJvbm91c1R5cGUgc3luY2hyb25vdXNUeXBlKQogewogICAgIFdvcmtl
clNjcmlwdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpj
b250cm9sbGVyRm9yQ29udGV4dCgpOwogICAgIFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQg
PSBjb250cm9sbGVyLT53b3JrZXJDb250ZXh0KCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwuY3BwCShy
ZXZpc2lvbiAxNDU0MTYpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGaWxlU3lz
dGVtQ2FsbGJhY2tzSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDYgKzc2LDI3IEBAIHZv
aWQgV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGw6OmRpZFJlYWQKICAgICBkZWxldGUgdGhpczsK
IH0KIAordm9pZCBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbDo6ZGlkQ3JlYXRlU25hcHNob3RG
aWxlKGNvbnN0IFdlYkZpbGVJbmZvJiB3ZWJGaWxlSW5mbykKK3sKKyAgICAvLyBJdCdzIGltcG9y
dGFudCB0byBjcmVhdGUgYSBCbG9iRGF0YUhhbmRsZSB0aGF0IHJlZmVycyB0byB0aGUgcGxhdGZv
cm0gZmlsZSBwYXRoIHByaW9yCisgICAgLy8gdG8gcmV0dXJuIGZyb20gdGhpcyBtZXRob2Qgc28g
dGhlIHVuZGVybHlpbmcgZmlsZSB3aWxsIG5vdCBiZSBkZWxldGVkLgorICAgIE93blB0cjxCbG9i
RGF0YT4gYmxvYkRhdGEgPSBCbG9iRGF0YTo6Y3JlYXRlKCk7CisgICAgYmxvYkRhdGEtPmFwcGVu
ZEZpbGUod2ViRmlsZUluZm8ucGxhdGZvcm1QYXRoKTsKKyAgICBSZWZQdHI8QmxvYkRhdGFIYW5k
bGU+IHNuYXBzaG90QmxvYiA9IEJsb2JEYXRhSGFuZGxlOjpjcmVhdGUoYmxvYkRhdGEucmVsZWFz
ZSgpLCB3ZWJGaWxlSW5mby5sZW5ndGgpOworICAgIGRpZENyZWF0ZVNuYXBzaG90RmlsZSh3ZWJG
aWxlSW5mbywgc25hcHNob3RCbG9iKTsKK30KKwordm9pZCBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tz
SW1wbDo6ZGlkQ3JlYXRlU25hcHNob3RGaWxlKGNvbnN0IFdlYkZpbGVJbmZvJiB3ZWJGaWxlSW5m
bywgUGFzc1JlZlB0cjxXZWJDb3JlOjpCbG9iRGF0YUhhbmRsZT4gc25hcHNob3QpCit7CisgICAg
RmlsZU1ldGFkYXRhIGZpbGVNZXRhZGF0YTsKKyAgICBmaWxlTWV0YWRhdGEubW9kaWZpY2F0aW9u
VGltZSA9IHdlYkZpbGVJbmZvLm1vZGlmaWNhdGlvblRpbWU7CisgICAgZmlsZU1ldGFkYXRhLmxl
bmd0aCA9IHdlYkZpbGVJbmZvLmxlbmd0aDsKKyAgICBmaWxlTWV0YWRhdGEudHlwZSA9IHN0YXRp
Y19jYXN0PEZpbGVNZXRhZGF0YTo6VHlwZT4od2ViRmlsZUluZm8udHlwZSk7CisgICAgZmlsZU1l
dGFkYXRhLnBsYXRmb3JtUGF0aCA9IHdlYkZpbGVJbmZvLnBsYXRmb3JtUGF0aDsKKyAgICBtX2Nh
bGxiYWNrcy0+ZGlkQ3JlYXRlU25hcHNob3RGaWxlKGZpbGVNZXRhZGF0YSwgc25hcHNob3QpOwor
ICAgIGRlbGV0ZSB0aGlzOworfQorCiB2b2lkIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsOjpk
aWRSZWFkRGlyZWN0b3J5KGNvbnN0IFdlYlZlY3RvcjxXZWJGaWxlU3lzdGVtRW50cnk+JiBlbnRy
aWVzLCBib29sIGhhc01vcmUpCiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBlbnRyaWVz
LnNpemUoKTsgKytpKQpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRmlsZVN5
c3RlbUNhbGxiYWNrc0ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbC5oCShyZXZpc2lvbiAxNDU0MTYpCisrKyBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbC5oCSh3
b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNs
YXNzIEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrczsKK2NsYXNzIEJsb2JEYXRhSGFuZGxlOwogY2xh
c3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIH0KIApAQCAtNTYsMTEgKzU3LDE3IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIH5XZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbCgpOwogCiAgICAgdmly
dHVhbCB2b2lkIGRpZFN1Y2NlZWQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVhZE1ldGFkYXRh
KGNvbnN0IFdlYkZpbGVJbmZvJiBpbmZvKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVhZE1ldGFk
YXRhKGNvbnN0IFdlYkZpbGVJbmZvJik7CisgICAgdmlydHVhbCB2b2lkIGRpZENyZWF0ZVNuYXBz
aG90RmlsZShjb25zdCBXZWJGaWxlSW5mbyYpOwogICAgIHZpcnR1YWwgdm9pZCBkaWRSZWFkRGly
ZWN0b3J5KGNvbnN0IFdlYlZlY3RvcjxXZWJGaWxlU3lzdGVtRW50cnk+JiBlbnRyaWVzLCBib29s
IGhhc01vcmUpOwogICAgIHZpcnR1YWwgdm9pZCBkaWRPcGVuRmlsZVN5c3RlbShjb25zdCBXZWJT
dHJpbmcmIG5hbWUsIGNvbnN0IFdlYlVSTCYgcm9vdFVSTCk7CiAgICAgdmlydHVhbCB2b2lkIGRp
ZEZhaWwoV2ViRmlsZUVycm9yIGVycm9yKTsKIAorICAgIC8vIFRoaXMgaW50ZXJuYWwgb3Zlcmxv
YWQgaXMgdXNlZCBieSBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlIHRvIGRlbGl2ZXIg
YSBibG9iIGRhdGEgaGFuZGxlCisgICAgLy8gY3JlYXRlZCBvbiB0aGUgbWFpbiB0aHJlYWQgdG8g
YW4gIEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrIG9uIGEgYmFja2dyb3VuZCB3b3JrZXIgdGhyZWFk
LiBUaGUgb3RoZXIKKyAgICAvLyB2aXJ0dWFsIG1ldGhvZCBpcyBpbnZva2VkIGJ5IHRoZSBlbWJl
ZGRlci4KKyAgICB2b2lkIGRpZENyZWF0ZVNuYXBzaG90RmlsZShjb25zdCBXZWJGaWxlSW5mbyYs
IFBhc3NSZWZQdHI8V2ViQ29yZTo6QmxvYkRhdGFIYW5kbGU+IHNuYXBzaG90KTsKKwogcHJpdmF0
ZToKICAgICBPd25QdHI8V2ViQ29yZTo6QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPiBtX2NhbGxi
YWNrczsKIApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyQXN5bmNGaWxl
U3lzdGVtQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVtLmNwcAkocmV2aXNpb24gMTQ1NDE2KQor
KysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21p
dW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzksMTUgKzE3OSwxMiBAQCB2b2lkIFdvcmtlckFz
eW5jRmlsZVN5c3RlbUNocm9taXVtOjpjcmVhCiAKIHZvaWQgV29ya2VyQXN5bmNGaWxlU3lzdGVt
Q2hyb21pdW06OmNyZWF0ZVNuYXBzaG90RmlsZUFuZFJlYWRNZXRhZGF0YShjb25zdCBLVVJMJiBw
YXRoLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4gY2FsbGJhY2tzKQogewot
ICAgIEtVUkwgaW50ZXJuYWxCbG9iVVJMID0gQmxvYlVSTDo6Y3JlYXRlSW50ZXJuYWxVUkwoKTsK
LQotICAgIGNyZWF0ZVdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UoY3JlYXRlU25hcHNo
b3RGaWxlQ2FsbGJhY2soaW50ZXJuYWxCbG9iVVJMLCBjYWxsYmFja3MpKS0+cG9zdENyZWF0ZVNu
YXBzaG90RmlsZVRvTWFpblRocmVhZChtX3dlYkZpbGVTeXN0ZW0sIGludGVybmFsQmxvYlVSTCwg
cGF0aCwgbV9tb2RlRm9yQ3VycmVudE9wZXJhdGlvbik7CisgICAgY3JlYXRlV29ya2VyRmlsZVN5
c3RlbUNhbGxiYWNrc0JyaWRnZShjYWxsYmFja3MpLT5wb3N0Q3JlYXRlU25hcHNob3RGaWxlVG9N
YWluVGhyZWFkKG1fd2ViRmlsZVN5c3RlbSwgcGF0aCwgbV9tb2RlRm9yQ3VycmVudE9wZXJhdGlv
bik7CiB9CiAKIFBhc3NSZWZQdHI8V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZT4gV29y
a2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW06OmNyZWF0ZVdvcmtlckZpbGVTeXN0ZW1DYWxsYmFj
a3NCcmlkZ2UoUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+IGNhbGxiYWNrcykK
IHsKICAgICBBU1NFUlQobV9zeW5jaHJvbm91c1R5cGUgPT0gQXN5bmNocm9ub3VzRmlsZVN5c3Rl
bSB8fCAhbV9icmlkZ2VGb3JDdXJyZW50T3BlcmF0aW9uKTsKLSAgICAodm9pZCltX3N5bmNocm9u
b3VzVHlwZTsKIAogICAgIG1fbW9kZUZvckN1cnJlbnRPcGVyYXRpb24gPSBmaWxlU3lzdGVtT3Bl
cmF0aW9uc01vZGU7CiAgICAgbV9tb2RlRm9yQ3VycmVudE9wZXJhdGlvbi5hcHBlbmQoU3RyaW5n
OjpudW1iZXIobV93b3JrZXJDb250ZXh0LT50aHJlYWQoKS0+cnVuTG9vcCgpLmNyZWF0ZVVuaXF1
ZUlkKCkpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckZpbGVTeXN0
ZW1DYWxsYmFja3NCcmlkZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UuY3BwCShyZXZpc2lvbiAxNDU0
MTYpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJGaWxlU3lzdGVtQ2FsbGJh
Y2tzQnJpZGdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTAgKzMzLDExIEBACiAKICNpZiBF
TkFCTEUoRklMRV9TWVNURU0pICYmIEVOQUJMRShXT1JLRVJTKQogCisjaW5jbHVkZSAiQmxvYkRh
dGEuaCIKICNpbmNsdWRlICJDcm9zc1RocmVhZFRhc2suaCIKICNpbmNsdWRlICJLVVJMLmgiCiAj
aW5jbHVkZSAiV2ViQ29tbW9uV29ya2VyQ2xpZW50LmgiCi0jaW5jbHVkZSAiV2ViRmlsZVN5c3Rl
bUNhbGxiYWNrcy5oIgorI2luY2x1ZGUgIldlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsLmgiCiAj
aW5jbHVkZSAiV2ViRmlsZVN5c3RlbUVudHJ5LmgiCiAjaW5jbHVkZSAiV2ViV29ya2VyQmFzZS5o
IgogI2luY2x1ZGUgIldvcmtlckNvbnRleHQuaCIKQEAgLTEyNCw2ICsxMjUsMTcgQEAgcHVibGlj
OgogICAgICAgICBkZWxldGUgdGhpczsKICAgICB9CiAKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ3Jl
YXRlU25hcHNob3RGaWxlKGNvbnN0IFdlYkZpbGVJbmZvJiBpbmZvKQorICAgIHsKKyAgICAgICAg
Ly8gSXQncyBpbXBvcnRhbnQgdG8gY3JlYXRlIGEgQmxvYkRhdGFIYW5kbGUgdGhhdCByZWZlcnMg
dG8gdGhlIHBsYXRmb3JtIGZpbGUgcGF0aCBwcmlvcgorICAgICAgICAvLyB0byByZXR1cm4gZnJv
bSB0aGlzIG1ldGhvZCBzbyB0aGUgdW5kZXJseWluZyBmaWxlIHdpbGwgbm90IGJlIGRlbGV0ZWQu
CisgICAgICAgIE93blB0cjxCbG9iRGF0YT4gYmxvYkRhdGEgPSBCbG9iRGF0YTo6Y3JlYXRlKCk7
CisgICAgICAgIGJsb2JEYXRhLT5hcHBlbmRGaWxlKGluZm8ucGxhdGZvcm1QYXRoKTsKKyAgICAg
ICAgUmVmUHRyPEJsb2JEYXRhSGFuZGxlPiBzbmFwc2hvdEJsb2IgPSBCbG9iRGF0YUhhbmRsZTo6
Y3JlYXRlKGJsb2JEYXRhLnJlbGVhc2UoKSwgaW5mby5sZW5ndGgpOworICAgICAgICBtX2JyaWRn
ZS0+ZGlkQ3JlYXRlU25hcHNob3RGaWxlT25NYWluVGhyZWFkKGluZm8sIG1fbW9kZSwgc25hcHNo
b3RCbG9iKTsKKyAgICAgICAgZGVsZXRlIHRoaXM7CisgICAgfQorCiAgICAgdmlydHVhbCB2b2lk
IGRpZFJlYWREaXJlY3RvcnkoY29uc3QgV2ViVmVjdG9yPFdlYkZpbGVTeXN0ZW1FbnRyeT4mIGVu
dHJpZXMsIGJvb2wgaGFzTW9yZSkKICAgICB7CiAgICAgICAgIG1fYnJpZGdlLT5kaWRSZWFkRGly
ZWN0b3J5T25NYWluVGhyZWFkKGVudHJpZXMsIGhhc01vcmUsIG1fbW9kZSk7CkBAIC0yODksMTMg
KzMwMSwxMyBAQCB2b2lkIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OnBvCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLCBtb2RlKSk7CiB9CiAKLXZvaWQgV29ya2VyRmls
ZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6cG9zdENyZWF0ZVNuYXBzaG90RmlsZVRvTWFpblRocmVh
ZChXZWJGaWxlU3lzdGVtKiBmaWxlU3lzdGVtLCBjb25zdCBLVVJMJiBpbnRlcm5hbEJsb2JVUkws
IGNvbnN0IEtVUkwmIHBhdGgsIGNvbnN0IFN0cmluZyYgbW9kZSkKK3ZvaWQgV29ya2VyRmlsZVN5
c3RlbUNhbGxiYWNrc0JyaWRnZTo6cG9zdENyZWF0ZVNuYXBzaG90RmlsZVRvTWFpblRocmVhZChX
ZWJGaWxlU3lzdGVtKiBmaWxlU3lzdGVtLCBjb25zdCBLVVJMJiBwYXRoLCBjb25zdCBTdHJpbmcm
IG1vZGUpCiB7CiAgICAgQVNTRVJUKGZpbGVTeXN0ZW0pOwogICAgIGRpc3BhdGNoVGFza1RvTWFp
blRocmVhZCgKICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZjcmVhdGVTbmFwc2hvdEZpbGVP
bk1haW5UaHJlYWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbGxvd0Nyb3NzVGhyZWFk
QWNjZXNzKGZpbGVTeXN0ZW0pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxC
bG9iVVJMLCBwYXRoLCB0aGlzLCBtb2RlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBw
YXRoLCB0aGlzLCBtb2RlKSk7CiB9CiAKIHZvaWQgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0Jy
aWRnZTo6b3BlbkZpbGVTeXN0ZW1Pbk1haW5UaHJlYWQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IFdlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50LCBXZWJGaWxlU3lzdGVtOjpUeXBl
IHR5cGUsIGxvbmcgbG9uZyBzaXplLCBib29sIGNyZWF0ZSwgUGFzc1JlZlB0cjxXb3JrZXJGaWxl
U3lzdGVtQ2FsbGJhY2tzQnJpZGdlPiBicmlkZ2UsIGNvbnN0IFN0cmluZyYgbW9kZSkKQEAgLTM1
Nyw5ICszNjksOSBAQCB2b2lkIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OnJlCiAg
ICAgZmlsZVN5c3RlbS0+cmVhZERpcmVjdG9yeShwYXRoLCBNYWluVGhyZWFkRmlsZVN5c3RlbUNh
bGxiYWNrczo6Y3JlYXRlTGVha2VkUHRyKGJyaWRnZSwgbW9kZSkpOwogfQogCi12b2lkIFdvcmtl
ckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OmNyZWF0ZVNuYXBzaG90RmlsZU9uTWFpblRocmVh
ZChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViRmlsZVN5c3RlbSogZmlsZVN5
c3RlbSwgY29uc3QgS1VSTCYgaW50ZXJuYWxCbG9iVVJMLCBjb25zdCBLVVJMJiBwYXRoLCBQYXNz
UmVmUHRyPFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U+IGJyaWRnZSwgY29uc3QgU3Ry
aW5nJiBtb2RlKQordm9pZCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpjcmVhdGVT
bmFwc2hvdEZpbGVPbk1haW5UaHJlYWQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IFdlYkZpbGVTeXN0ZW0qIGZpbGVTeXN0ZW0sIGNvbnN0IEtVUkwmIHBhdGgsIFBhc3NSZWZQdHI8
V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZT4gYnJpZGdlLCBjb25zdCBTdHJpbmcmIG1v
ZGUpCiB7Ci0gICAgZmlsZVN5c3RlbS0+Y3JlYXRlU25hcHNob3RGaWxlQW5kUmVhZE1ldGFkYXRh
KGludGVybmFsQmxvYlVSTCwgcGF0aCwgTWFpblRocmVhZEZpbGVTeXN0ZW1DYWxsYmFja3M6OmNy
ZWF0ZUxlYWtlZFB0cihicmlkZ2UsIG1vZGUpKTsKKyAgICBmaWxlU3lzdGVtLT5jcmVhdGVTbmFw
c2hvdEZpbGVBbmRSZWFkTWV0YWRhdGEocGF0aCwgTWFpblRocmVhZEZpbGVTeXN0ZW1DYWxsYmFj
a3M6OmNyZWF0ZUxlYWtlZFB0cihicmlkZ2UsIG1vZGUpKTsKIH0KIAogdm9pZCBXb3JrZXJGaWxl
U3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpkaWRGYWlsT25NYWluVGhyZWFkKFdlYkZpbGVFcnJvciBl
cnJvciwgY29uc3QgU3RyaW5nJiBtb2RlKQpAQCAtMzgzLDYgKzM5NSwxMSBAQCB2b2lkIFdvcmtl
ckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OmRpCiAgICAgbWF5UG9zdFRhc2tUb1dvcmtlcihj
cmVhdGVDYWxsYmFja1Rhc2soJmRpZFJlYWRNZXRhZGF0YU9uV29ya2VyVGhyZWFkLCB0aGlzLCBp
bmZvKSwgbW9kZSk7CiB9CiAKK3ZvaWQgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6
ZGlkQ3JlYXRlU25hcHNob3RGaWxlT25NYWluVGhyZWFkKGNvbnN0IFdlYkZpbGVJbmZvJiBpbmZv
LCBjb25zdCBTdHJpbmcmIG1vZGUsIFBhc3NSZWZQdHI8QmxvYkRhdGFIYW5kbGU+IHNuYXBzaG90
QmxvYikKK3sKKyAgICBtYXlQb3N0VGFza1RvV29ya2VyKGNyZWF0ZUNhbGxiYWNrVGFzaygmZGlk
Q3JlYXRlU25hcHNob3RGaWxlT25Xb3JrZXJUaHJlYWQsIHRoaXMsIGluZm8sIHNuYXBzaG90Qmxv
YiksIG1vZGUpOworfQorCiB2b2lkIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OmRp
ZFJlYWREaXJlY3RvcnlPbk1haW5UaHJlYWQoY29uc3QgV2ViVmVjdG9yPFdlYkZpbGVTeXN0ZW1F
bnRyeT4mIGVudHJpZXMsIGJvb2wgaGFzTW9yZSwgY29uc3QgU3RyaW5nJiBtb2RlKQogewogICAg
IG1heVBvc3RUYXNrVG9Xb3JrZXIoCkBAIC0zOTAsNyArNDA3LDcgQEAgdm9pZCBXb3JrZXJGaWxl
U3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpkaQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhp
cywgZW50cmllcywgaGFzTW9yZSksIG1vZGUpOwogfQogCi1Xb3JrZXJGaWxlU3lzdGVtQ2FsbGJh
Y2tzQnJpZGdlOjpXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlKFdlYkNvcmU6Oldvcmtl
ckxvYWRlclByb3h5KiB3b3JrZXJMb2FkZXJQcm94eSwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgV2ViRmlsZVN5c3RlbUNhbGxiYWNrcyogY2FsbGJhY2tz
KQorV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6V29ya2VyRmlsZVN5c3RlbUNhbGxi
YWNrc0JyaWRnZShXZWJDb3JlOjpXb3JrZXJMb2FkZXJQcm94eSogd29ya2VyTG9hZGVyUHJveHks
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIFdlYkZpbGVT
eXN0ZW1DYWxsYmFja3NJbXBsKiBjYWxsYmFja3MpCiAgICAgOiBtX3dvcmtlckxvYWRlclByb3h5
KHdvcmtlckxvYWRlclByb3h5KQogICAgICwgbV93b3JrZXJDb250ZXh0KHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQpCiAgICAgLCBtX3dvcmtlckNvbnRleHRPYnNlcnZlcihXb3JrZXJGaWxlU3lzdGVt
Q29udGV4dE9ic2VydmVyOjpjcmVhdGUoc3RhdGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KG1fd29y
a2VyQ29udGV4dCksIHRoaXMpLmxlYWtQdHIoKSkKQEAgLTQyNCw2ICs0NDEsMTEgQEAgdm9pZCBX
b3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpkaQogICAgIGJyaWRnZS0+bV9jYWxsYmFj
a3NPbldvcmtlclRocmVhZC0+ZGlkUmVhZE1ldGFkYXRhKGluZm8pOwogfQogCit2b2lkIFdvcmtl
ckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OmRpZENyZWF0ZVNuYXBzaG90RmlsZU9uV29ya2Vy
VGhyZWFkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPFdvcmtlckZpbGVTeXN0
ZW1DYWxsYmFja3NCcmlkZ2U+IGJyaWRnZSwgY29uc3QgV2ViRmlsZUluZm8mIGluZm8sIFBhc3NS
ZWZQdHI8QmxvYkRhdGFIYW5kbGU+IHNuYXBzaG90QmxvYikKK3sKKyAgICBicmlkZ2UtPm1fY2Fs
bGJhY2tzT25Xb3JrZXJUaHJlYWQtPmRpZENyZWF0ZVNuYXBzaG90RmlsZShpbmZvLCBzbmFwc2hv
dEJsb2IpOworfQorCiB2b2lkIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OmRpZFJl
YWREaXJlY3RvcnlPbldvcmtlclRocmVhZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1Jl
ZlB0cjxXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlPiBicmlkZ2UsIGNvbnN0IFdlYlZl
Y3RvcjxXZWJGaWxlU3lzdGVtRW50cnk+JiBlbnRyaWVzLCBib29sIGhhc01vcmUpCiB7CiAgICAg
YnJpZGdlLT5tX2NhbGxiYWNrc09uV29ya2VyVGhyZWFkLT5kaWRSZWFkRGlyZWN0b3J5KGVudHJp
ZXMsIGhhc01vcmUpOwpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyRmls
ZVN5c3RlbUNhbGxiYWNrc0JyaWRnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UuaAkocmV2aXNpb24gMTQ1
NDE2KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyRmlsZVN5c3RlbUNhbGxi
YWNrc0JyaWRnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEJsb2JE
YXRhSGFuZGxlOwogY2xhc3MgV29ya2VyTG9hZGVyUHJveHk7CiB9CiAKQEAgLTUyLDcgKzUzLDcg
QEAgY2xhc3MgQXN5bmNGaWxlU3lzdGVtOwogY2xhc3MgTWFpblRocmVhZEZpbGVTeXN0ZW1DYWxs
YmFja3M7CiBjbGFzcyBXZWJDb21tb25Xb3JrZXJDbGllbnQ7CiBjbGFzcyBUaHJlYWRhYmxlQ2Fs
bGJhY2tzQnJpZGdlV3JhcHBlcjsKLWNsYXNzIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3M7CitjbGFz
cyBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbDsKIGNsYXNzIFdvcmtlckZpbGVTeXN0ZW1Db250
ZXh0T2JzZXJ2ZXI7CiBzdHJ1Y3QgV2ViRmlsZUluZm87CiBzdHJ1Y3QgV2ViRmlsZVN5c3RlbUVu
dHJ5OwpAQCAtNzcsNyArNzgsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHN0b3AoKTsKIAotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U+IGNyZWF0
ZShXZWJDb3JlOjpXb3JrZXJMb2FkZXJQcm94eSogd29ya2VyTG9hZGVyUHJveHksIFdlYkNvcmU6
OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHdvcmtlckNvbnRleHQsIFdlYkZpbGVTeXN0ZW1DYWxs
YmFja3MqIGNhbGxiYWNrcykKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXb3JrZXJGaWxlU3lzdGVt
Q2FsbGJhY2tzQnJpZGdlPiBjcmVhdGUoV2ViQ29yZTo6V29ya2VyTG9hZGVyUHJveHkqIHdvcmtl
ckxvYWRlclByb3h5LCBXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiB3b3JrZXJDb250
ZXh0LCBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbCogY2FsbGJhY2tzKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlKHdv
cmtlckxvYWRlclByb3h5LCB3b3JrZXJDb250ZXh0LCBjYWxsYmFja3MpKTsKICAgICB9CkBAIC05
NCwxNyArOTUsMTggQEAgcHVibGljOgogICAgIHZvaWQgcG9zdEZpbGVFeGlzdHNUb01haW5UaHJl
YWQoV2ViRmlsZVN5c3RlbSosIGNvbnN0IFdlYkNvcmU6OktVUkwmIHBhdGgsIGNvbnN0IFN0cmlu
ZyYgbW9kZSk7CiAgICAgdm9pZCBwb3N0RGlyZWN0b3J5RXhpc3RzVG9NYWluVGhyZWFkKFdlYkZp
bGVTeXN0ZW0qLCBjb25zdCBXZWJDb3JlOjpLVVJMJiBwYXRoLCBjb25zdCBTdHJpbmcmIG1vZGUp
OwogICAgIHZvaWQgcG9zdFJlYWREaXJlY3RvcnlUb01haW5UaHJlYWQoV2ViRmlsZVN5c3RlbSos
IGNvbnN0IFdlYkNvcmU6OktVUkwmIHBhdGgsIGNvbnN0IFN0cmluZyYgbW9kZSk7Ci0gICAgdm9p
ZCBwb3N0Q3JlYXRlU25hcHNob3RGaWxlVG9NYWluVGhyZWFkKFdlYkZpbGVTeXN0ZW0qLCBjb25z
dCBXZWJDb3JlOjpLVVJMJiBpbnRlcm5hbEJsb2JVUkwsIGNvbnN0IFdlYkNvcmU6OktVUkwmIHBh
dGgsIGNvbnN0IFN0cmluZyYgbW9kZSk7CisgICAgdm9pZCBwb3N0Q3JlYXRlU25hcHNob3RGaWxl
VG9NYWluVGhyZWFkKFdlYkZpbGVTeXN0ZW0qLCBjb25zdCBXZWJDb3JlOjpLVVJMJiBwYXRoLCBj
b25zdCBTdHJpbmcmIG1vZGUpOwogCiAgICAgLy8gQ2FsbGJhY2sgbWV0aG9kcyB0aGF0IGFyZSBj
YWxsZWQgb24gdGhlIG1haW4gdGhyZWFkLgogICAgIHZvaWQgZGlkRmFpbE9uTWFpblRocmVhZChX
ZWJGaWxlRXJyb3IsIGNvbnN0IFN0cmluZyYgbW9kZSk7CiAgICAgdm9pZCBkaWRPcGVuRmlsZVN5
c3RlbU9uTWFpblRocmVhZChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYkNvcmU6OktVUkwm
IHJvb3RVUkwsIGNvbnN0IFN0cmluZyYgbW9kZSk7CiAgICAgdm9pZCBkaWRTdWNjZWVkT25NYWlu
VGhyZWFkKGNvbnN0IFN0cmluZyYgbW9kZSk7CiAgICAgdm9pZCBkaWRSZWFkTWV0YWRhdGFPbk1h
aW5UaHJlYWQoY29uc3QgV2ViRmlsZUluZm8mLCBjb25zdCBTdHJpbmcmIG1vZGUpOworICAgIHZv
aWQgZGlkQ3JlYXRlU25hcHNob3RGaWxlT25NYWluVGhyZWFkKGNvbnN0IFdlYkZpbGVJbmZvJiwg
Y29uc3QgU3RyaW5nJiBtb2RlLCBQYXNzUmVmUHRyPFdlYkNvcmU6OkJsb2JEYXRhSGFuZGxlPiBz
bmFwc2hvdEJsb2IpOwogICAgIHZvaWQgZGlkUmVhZERpcmVjdG9yeU9uTWFpblRocmVhZChjb25z
dCBXZWJWZWN0b3I8V2ViRmlsZVN5c3RlbUVudHJ5PiYsIGJvb2wgaGFzTW9yZSwgY29uc3QgU3Ry
aW5nJiBtb2RlKTsKIAogcHJpdmF0ZToKLSAgICBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJp
ZGdlKFdlYkNvcmU6OldvcmtlckxvYWRlclByb3h5KiwgV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3MqKTsKKyAgICBXb3JrZXJGaWxlU3lzdGVt
Q2FsbGJhY2tzQnJpZGdlKFdlYkNvcmU6OldvcmtlckxvYWRlclByb3h5KiwgV2ViQ29yZTo6U2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsKik7CiAKICAg
ICAvLyBNZXRob2RzIHRoYXQgYXJlIHRvIGJlIGNhbGxlZCBvbiB0aGUgbWFpbiB0aHJlYWQuCiAg
ICAgc3RhdGljIHZvaWQgb3BlbkZpbGVTeXN0ZW1Pbk1haW5UaHJlYWQoV2ViQ29yZTo6U2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFdlYkNvbW1vbldvcmtlckNsaWVudCosIFdlYkZpbGVTeXN0ZW06
OlR5cGUsIGxvbmcgbG9uZyBzaXplLCBib29sIGNyZWF0ZSwgUGFzc1JlZlB0cjxXb3JrZXJGaWxl
U3lzdGVtQ2FsbGJhY2tzQnJpZGdlPiwgY29uc3QgU3RyaW5nJiBtb2RlKTsKQEAgLTExOCw3ICsx
MjAsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIGZpbGVFeGlzdHNPbk1haW5UaHJlYWQo
V2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYkZpbGVTeXN0ZW0qLCBjb25zdCBX
ZWJDb3JlOjpLVVJMJiBwYXRoLCBQYXNzUmVmUHRyPFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NC
cmlkZ2U+LCBjb25zdCBTdHJpbmcmIG1vZGUpOwogICAgIHN0YXRpYyB2b2lkIGRpcmVjdG9yeUV4
aXN0c09uTWFpblRocmVhZChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViRmls
ZVN5c3RlbSosIGNvbnN0IFdlYkNvcmU6OktVUkwmIHBhdGgsIFBhc3NSZWZQdHI8V29ya2VyRmls
ZVN5c3RlbUNhbGxiYWNrc0JyaWRnZT4sIGNvbnN0IFN0cmluZyYgbW9kZSk7CiAgICAgc3RhdGlj
IHZvaWQgcmVhZERpcmVjdG9yeU9uTWFpblRocmVhZChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgV2ViRmlsZVN5c3RlbSosIGNvbnN0IFdlYkNvcmU6OktVUkwmIHBhdGgsIFBhc3NS
ZWZQdHI8V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZT4sIGNvbnN0IFN0cmluZyYgbW9k
ZSk7Ci0gICAgc3RhdGljIHZvaWQgY3JlYXRlU25hcHNob3RGaWxlT25NYWluVGhyZWFkKFdlYkNv
cmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJGaWxlU3lzdGVtKiwgY29uc3QgV2ViQ29y
ZTo6S1VSTCYgaW50ZXJuYWxCbG9iVVJMLCBjb25zdCBXZWJDb3JlOjpLVVJMJiBwYXRoLCBQYXNz
UmVmUHRyPFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U+LCBjb25zdCBTdHJpbmcmIG1v
ZGUpOworICAgIHN0YXRpYyB2b2lkIGNyZWF0ZVNuYXBzaG90RmlsZU9uTWFpblRocmVhZChXZWJD
b3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViRmlsZVN5c3RlbSosIGNvbnN0IFdlYkNv
cmU6OktVUkwmIHBhdGgsIFBhc3NSZWZQdHI8V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRn
ZT4sIGNvbnN0IFN0cmluZyYgbW9kZSk7CiAKICAgICBmcmllbmQgY2xhc3MgTWFpblRocmVhZEZp
bGVTeXN0ZW1DYWxsYmFja3M7CiAKQEAgLTEyNyw2ICsxMjksNyBAQCBwcml2YXRlOgogICAgIHN0
YXRpYyB2b2lkIGRpZE9wZW5GaWxlU3lzdGVtT25Xb3JrZXJUaHJlYWQoV2ViQ29yZTo6U2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0Jy
aWRnZT4sIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgV2ViQ29yZTo6S1VSTCYgcm9vdFBhdGgp
OwogICAgIHN0YXRpYyB2b2lkIGRpZFN1Y2NlZWRPbldvcmtlclRocmVhZChXZWJDb3JlOjpTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tz
QnJpZGdlPik7CiAgICAgc3RhdGljIHZvaWQgZGlkUmVhZE1ldGFkYXRhT25Xb3JrZXJUaHJlYWQo
V2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8V29ya2VyRmlsZVN5
c3RlbUNhbGxiYWNrc0JyaWRnZT4sIGNvbnN0IFdlYkZpbGVJbmZvJik7CisgICAgc3RhdGljIHZv
aWQgZGlkQ3JlYXRlU25hcHNob3RGaWxlT25Xb3JrZXJUaHJlYWQoV2ViQ29yZTo6U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRn
ZT4sIGNvbnN0IFdlYkZpbGVJbmZvJiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpCbG9iRGF0YUhhbmRs
ZT4gc25hcHNob3RCbG9iKTsKICAgICBzdGF0aWMgdm9pZCBkaWRSZWFkRGlyZWN0b3J5T25Xb3Jr
ZXJUaHJlYWQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8V29y
a2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZT4sIGNvbnN0IFdlYlZlY3RvcjxXZWJGaWxlU3lz
dGVtRW50cnk+JiwgYm9vbCBoYXNNb3JlKTsKIAogICAgIHN0YXRpYyB2b2lkIHJ1blRhc2tPbk1h
aW5UaHJlYWQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8V29y
a2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZT4sIFBhc3NPd25QdHI8V2ViQ29yZTo6U2NyaXB0
RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4pOwpAQCAtMTQ2LDcgKzE0OSw3IEBAIHByaXZhdGU6CiAg
ICAgV29ya2VyRmlsZVN5c3RlbUNvbnRleHRPYnNlcnZlciogbV93b3JrZXJDb250ZXh0T2JzZXJ2
ZXI7CiAKICAgICAvLyBUaGlzIGlzIHNlbGYtZGVzdHJ1Y3RlZCBhbmQgbXVzdCBiZSBmaXJlZCBv
biB0aGUgd29ya2VyIHRocmVhZC4KLSAgICBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzKiBtX2NhbGxi
YWNrc09uV29ya2VyVGhyZWFkOworICAgIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsKiBtX2Nh
bGxiYWNrc09uV29ya2VyVGhyZWFkOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>
<flag name="commit-queue"
          id="213882"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>193004</attachid>
            <date>2013-03-13 15:09:18 -0700</date>
            <delta_ts>2013-03-13 16:04:10 -0700</delta_ts>
            <desc>impl of new api</desc>
            <filename>impl4.txt</filename>
            <type>text/plain</type>
            <size>32520</size>
            <attacher name="Michael Nordman">michaeln</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0NTQ2NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBACisyMDEzLTAzLTExICBNaWNoYWVs
IE5vcmRtYW4gIDxtaWNoYWVsbkBnb29nbGUuY29tPgorCisgICAgICAgIEZpbGVTeXN0ZW0gbW9k
czogQ2hhbmdlcyB0byBzbmFwc2hvdCBmaWxlIGNyZWF0aW9uIHRvIHJlZHVjZSBkZXBlbmRlbmNp
ZXMgb24gYmxvYiBVUkxzLgorICAgICAgICBBZGRpbmcgYSBuZXcgbWluaW1hbCBCbG9iRGF0YUhh
bmRsZSBjbGFzcyB3aGljaCB3aWxsIGJlIHJlaW1wbGVtZW50ZWQvYnVpbHQgdXBvbiBpbiBsYXRl
ciBDTHMuIEluIHRoaXMKKyAgICAgICAgcGF0Y2gsIGl0J3MganVzdCBlbm91Z2ggdG8gcmVmYWN0
b3IgdGhlIEZpbGVTeXN0ZW0gY29kZSB0byBub3QgZnVuY3Rpb24gaW4gdGVybXMgb2YgYmxvYlVS
THMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDg4
NTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBu
ZXcgdGVzdHMuIFRoaXMgaXMgc3RyaWN0bHkgYSByZWZhY3RvcmluZyBvZiB0aGUgZXhpc3Rpbmcg
Y29kZS4KKworICAgICAgICAqIE1vZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxlU3lzdGVtLmNwcDoK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RE9NRmlsZVN5c3RlbTo6Y3Jl
YXRlRmlsZSk6CisgICAgICAgICogTW9kdWxlcy9maWxlc3lzdGVtL0RPTUZpbGVTeXN0ZW1TeW5j
LmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRmb3JtL0FzeW5jRmlsZVN5
c3RlbUNhbGxiYWNrcy5oOgorICAgICAgICAoQXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrczo6ZGlkQ3JlYXRlU25hcHNo
b3RGaWxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvQXN5bmNGaWxlU3lzdGVtR3RrLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkFzeW5jRmlsZVN5c3RlbUd0azo6Y3JlYXRlU25hcHNob3RGaWxl
QW5kUmVhZE1ldGFkYXRhKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRmb3Jt
L25ldHdvcmsvQmxvYkRhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJD
b3JlOjpCbG9iRGF0YUhhbmRsZTo6QmxvYkRhdGFIYW5kbGUpOgorICAgICAgICAoV2ViQ29yZTo6
QmxvYkRhdGFIYW5kbGU6On5CbG9iRGF0YUhhbmRsZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0
d29yay9CbG9iRGF0YS5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChCbG9iRGF0YUhh
bmRsZSk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iRGF0YUhhbmRsZTo6Y3JlYXRlKToKKwogMjAx
My0wMy0xMSAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIE1ha2Ug
QmFja2dyb3VuZEhUTUxQYXJzZXIgd29yayB3aXRoIGRvYy53cml0ZXMgdGhhdCBlbnRlciBvciBs
ZWF2ZSBmb3JlaWduIGNvbnRlbnQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmlsZXN5
c3RlbS9ET01GaWxlU3lzdGVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2ZpbGVzeXN0ZW0vRE9NRmlsZVN5c3RlbS5jcHAJKHJldmlzaW9uIDE0NTQ2NCkKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxlU3lzdGVtLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTQ4LDE5ICsxNDgsMjQgQEAgdm9pZCBET01GaWxlU3lzdGVtOjpjcmVhdGVX
cml0ZXIoY29uc3QgRgogCiBuYW1lc3BhY2UgewogCi1jbGFzcyBHZXRNZXRhZGF0YUNhbGxiYWNr
IDogcHVibGljIEZpbGVTeXN0ZW1DYWxsYmFja3NCYXNlIHsKK2NsYXNzIFNuYXBzaG90RmlsZUNh
bGxiYWNrIDogcHVibGljIEZpbGVTeXN0ZW1DYWxsYmFja3NCYXNlIHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUGFzc093blB0cjxHZXRNZXRhZGF0YUNhbGxiYWNrPiBjcmVhdGUoUGFzc1JlZlB0cjxE
T01GaWxlU3lzdGVtPiBmaWxlc3lzdGVtLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEtVUkwm
IHVybCwgUGFzc1JlZlB0cjxGaWxlQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0
cjxFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrKQorICAgIHN0YXRpYyBQYXNzT3duUHRyPFNu
YXBzaG90RmlsZUNhbGxiYWNrPiBjcmVhdGUoUGFzc1JlZlB0cjxET01GaWxlU3lzdGVtPiBmaWxl
c3lzdGVtLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEtVUkwmIHVybCwgUGFzc1JlZlB0cjxG
aWxlQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPiBl
cnJvckNhbGxiYWNrKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBHZXRNZXRh
ZGF0YUNhbGxiYWNrKGZpbGVzeXN0ZW0sIG5hbWUsIHVybCwgc3VjY2Vzc0NhbGxiYWNrLCBlcnJv
ckNhbGxiYWNrKSk7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgU25hcHNob3RGaWxlQ2Fs
bGJhY2soZmlsZXN5c3RlbSwgbmFtZSwgdXJsLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJh
Y2spKTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVhZE1ldGFkYXRhKGNvbnN0IEZp
bGVNZXRhZGF0YSYgbWV0YWRhdGEpCisgICAgdmlydHVhbCB2b2lkIGRpZENyZWF0ZVNuYXBzaG90
RmlsZShjb25zdCBGaWxlTWV0YWRhdGEmIG1ldGFkYXRhLCBQYXNzUmVmUHRyPEJsb2JEYXRhSGFu
ZGxlPiBzbmFwc2hvdCkKICAgICB7CiAgICAgICAgIEFTU0VSVCghbWV0YWRhdGEucGxhdGZvcm1Q
YXRoLmlzRW1wdHkoKSk7CiAgICAgICAgIGlmICghbV9zdWNjZXNzQ2FsbGJhY2spCiAgICAgICAg
ICAgICByZXR1cm47CiAKKyAgICAgICAgLy8gV2UgY2FuJ3QgZGlyZWN0bHkgdXNlIHRoZSBzbmFw
c2hvdCBibG9iIGRhdGEgaGFuZGxlIGJlY2F1c2UgdGhlIGNvbnRlbnQgdHlwZSBvbiBpdCBoYXNu
J3QgYmVlbiBzZXQuCisgICAgICAgIC8vIFRoZSB8c25hcHNob3R8IHBhcmFtIGlzIGhlcmUgdG8g
cHJvdmlkZSBhIGEgY2hhaW4gb2YgY3VzdG9keSB0aHJ1IHRocmVhZCBicmlkZ2luZyB0aGF0IGlz
IGhlbGQgb250byB1bnRpbAorICAgICAgICAvLyAqYWZ0ZXIqIHdlJ3ZlIGNvaW5lZCBhIEZpbGUg
d2l0aCBhIG5ldyBoYW5kbGUgdGhhdCBoYXMgdGhlIGNvcnJlY3QgdHlwZSBzZXQgb24gaXQuIFRo
aXMgYWxsb3dzIHRoZQorICAgICAgICAvLyBibG9iIHN0b3JhZ2Ugc3lzdGVtIHRvIHRyYWNrIHdo
ZW4gYSB0ZW1wIGZpbGUgY2FuIGFuZCBjYW4ndCBiZSBzYWZlbHkgZGVsZXRlZC4KKwogICAgICAg
ICAvLyBGb3IgcmVndWxhciBmaWxlc3lzdGVtIHR5cGVzICh0ZW1wb3Jhcnkgb3IgcGVyc2lzdGVu
dCksIHdlIHNob3VsZCBub3QgY2FjaGUgZmlsZSBtZXRhZGF0YSBhcyBpdCBjb3VsZCBjaGFuZ2Ug
RmlsZSBzZW1hbnRpY3MuCiAgICAgICAgIC8vIEZvciBvdGhlciBmaWxlc3lzdGVtIHR5cGVzICh3
aGljaCBjb3VsZCBiZSBwbGF0Zm9ybS1zcGVjaWZpYyBvbmVzKSwgdGhlcmUncyBhIGNoYW5jZSB0
aGF0IHRoZSBmaWxlcyBhcmUgb24gcmVtb3RlIGZpbGVzeXN0ZW0uIElmIHRoZSBwb3J0IGhhcyBy
ZXR1cm5lZCBtZXRhZGF0YSBqdXN0IHBhc3MgaXQgdG8gRmlsZSBjb25zdHJ1Y3RvciAoc28gd2Ug
bWF5IGNhY2hlIHRoZSBtZXRhZGF0YSkuCiAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgdXNl
IHRoZSBzbmFwc2hvdCBtZXRhZGF0YSBmb3IgYWxsIGZpbGVzLgpAQCAtMTc5LDcgKzE4NCw3IEBA
IHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgR2V0TWV0YWRhdGFDYWxsYmFjayhQYXNz
UmVmUHRyPERPTUZpbGVTeXN0ZW0+IGZpbGVzeXN0ZW0sIGNvbnN0IFN0cmluZyYgbmFtZSwgIGNv
bnN0IEtVUkwmIHVybCwgUGFzc1JlZlB0cjxGaWxlQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywg
UGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrKQorICAgIFNuYXBzaG90Rmls
ZUNhbGxiYWNrKFBhc3NSZWZQdHI8RE9NRmlsZVN5c3RlbT4gZmlsZXN5c3RlbSwgY29uc3QgU3Ry
aW5nJiBuYW1lLCAgY29uc3QgS1VSTCYgdXJsLCBQYXNzUmVmUHRyPEZpbGVDYWxsYmFjaz4gc3Vj
Y2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2spCiAg
ICAgICAgIDogRmlsZVN5c3RlbUNhbGxiYWNrc0Jhc2UoZXJyb3JDYWxsYmFjaykKICAgICAgICAg
LCBtX2ZpbGVzeXN0ZW0oZmlsZXN5c3RlbSkKICAgICAgICAgLCBtX25hbWUobmFtZSkKQEAgLTE5
OSw3ICsyMDQsNyBAQCBwcml2YXRlOgogdm9pZCBET01GaWxlU3lzdGVtOjpjcmVhdGVGaWxlKGNv
bnN0IEZpbGVFbnRyeSogZmlsZUVudHJ5LCBQYXNzUmVmUHRyPEZpbGVDYWxsYmFjaz4gc3VjY2Vz
c0NhbGxiYWNrLCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2spCiB7CiAg
ICAgS1VSTCBmaWxlU3lzdGVtVVJMID0gY3JlYXRlRmlsZVN5c3RlbVVSTChmaWxlRW50cnkpOwot
ICAgIG1fYXN5bmNGaWxlU3lzdGVtLT5jcmVhdGVTbmFwc2hvdEZpbGVBbmRSZWFkTWV0YWRhdGEo
ZmlsZVN5c3RlbVVSTCwgR2V0TWV0YWRhdGFDYWxsYmFjazo6Y3JlYXRlKHRoaXMsIGZpbGVFbnRy
eS0+bmFtZSgpLCBmaWxlU3lzdGVtVVJMLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2sp
KTsKKyAgICBtX2FzeW5jRmlsZVN5c3RlbS0+Y3JlYXRlU25hcHNob3RGaWxlQW5kUmVhZE1ldGFk
YXRhKGZpbGVTeXN0ZW1VUkwsIFNuYXBzaG90RmlsZUNhbGxiYWNrOjpjcmVhdGUodGhpcywgZmls
ZUVudHJ5LT5uYW1lKCksIGZpbGVTeXN0ZW1VUkwsIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxs
YmFjaykpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2ZpbGVzeXN0ZW0vRE9NRmlsZVN5c3RlbVN5bmMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxlU3lzdGVtU3luYy5jcHAJ
KHJldmlzaW9uIDE0NTQ2NCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmlsZXN5c3RlbS9E
T01GaWxlU3lzdGVtU3luYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMywxMCArMTEzLDE2IEBA
IHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAgdm9pZCBkaWRSZWFkTWV0YWRhdGEoY29uc3Qg
RmlsZU1ldGFkYXRhJiBtZXRhZGF0YSkKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ3JlYXRlU25hcHNo
b3RGaWxlKGNvbnN0IEZpbGVNZXRhZGF0YSYgbWV0YWRhdGEsIFBhc3NSZWZQdHI8QmxvYkRhdGFI
YW5kbGU+IHNuYXBzaG90KQogICAgIHsKKyAgICAgICAgLy8gV2UgY2FuJ3QgZGlyZWN0bHkgdXNl
IHRoZSBzbmFwc2hvdCBibG9iIGRhdGEgaGFuZGxlIGJlY2F1c2UgdGhlIGNvbnRlbnQgdHlwZSBv
biBpdCBoYXNuJ3QgYmVlbiBzZXQuCisgICAgICAgIC8vIFRoZSB8c25hcHNob3R8IHBhcmFtIGlz
IGhlcmUgdG8gcHJvdmlkZSBhIGEgY2hhaW4gb2YgY3VzdG9keSB0aHJ1IHRocmVhZCBicmlkZ2lu
ZyB0aGF0IGlzIGhlbGQgb250byB1bnRpbAorICAgICAgICAvLyAqYWZ0ZXIqIHdlJ3ZlIGNvaW5l
ZCBhIEZpbGUgd2l0aCBhIG5ldyBoYW5kbGUgdGhhdCBoYXMgdGhlIGNvcnJlY3QgdHlwZSBzZXQg
b24gaXQuIFRoaXMgYWxsb3dzIHRoZQorICAgICAgICAvLyBibG9iIHN0b3JhZ2Ugc3lzdGVtIHRv
IHRyYWNrIHdoZW4gYSB0ZW1wIGZpbGUgY2FuIGFuZCBjYW4ndCBiZSBzYWZlbHkgZGVsZXRlZC4K
KwogICAgICAgICAvLyBGb3IgcmVndWxhciBmaWxlc3lzdGVtIHR5cGVzICh0ZW1wb3Jhcnkgb3Ig
cGVyc2lzdGVudCksIHdlIHNob3VsZCBub3QgY2FjaGUgZmlsZSBtZXRhZGF0YSBhcyBpdCBjb3Vs
ZCBjaGFuZ2UgRmlsZSBzZW1hbnRpY3MuCi0gICAgICAgIC8vIEZvciBvdGhlciBmaWxlc3lzdGVt
IHR5cGVzICh3aGljaCBjb3VsZCBiZSBwbGF0Zm9ybS1zcGVjaWZpYyBvbmVzKSwgdGhlcmUncyBh
IGNoYW5jZSB0aGF0IHRoZSBmaWxlcyBhcmUgb24gcmVtb3RlIGZpbGVzeXN0ZW0uIElmIHRoZSBw
b3J0IGhhcyByZXR1cm5lZCBtZXRhZGF0YSBqdXN0IHBhc3MgaXQgdG8gRmlsZSBjb25zdHJ1Y3Rv
ciAoc28gd2UgbWF5IGNhY2hlIHRoZSBtZXRhZGF0YSkuCisgICAgICAgIC8vIEZvciBvdGhlciBm
aWxlc3lzdGVtIHR5cGVzICh3aGljaCBjb3VsZCBiZSBwbGF0Zm9ybS1zcGVjaWZpYyBvbmVzKSwg
dGhlcmUncyBhIGNoYW5jZSB0aGF0IHRoZSBmaWxlcyBhcmUgb24gcmVtb3RlIGZpbGVzeXN0ZW0u
CisgICAgICAgIC8vIElmIHRoZSBwb3J0IGhhcyByZXR1cm5lZCBtZXRhZGF0YSBqdXN0IHBhc3Mg
aXQgdG8gRmlsZSBjb25zdHJ1Y3RvciAoc28gd2UgbWF5IGNhY2hlIHRoZSBtZXRhZGF0YSkuCiAg
ICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgdXNlIHRoZSBzbmFwc2hvdCBtZXRhZGF0YSBmb3Ig
YWxsIGZpbGVzLgogICAgICAgICAvLyBodHRwczovL3d3dy53My5vcmcvQnVncy9QdWJsaWMvc2hv
d19idWcuY2dpP2lkPTE3NzQ2CiAgICAgICAgIGlmIChtX3R5cGUgPT0gRmlsZVN5c3RlbVR5cGVU
ZW1wb3JhcnkgfHwgbV90eXBlID09IEZpbGVTeXN0ZW1UeXBlUGVyc2lzdGVudCkgewpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tz
LmgJKHJldmlzaW9uIDE0NTQ2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0FzeW5jRmls
ZVN5c3RlbUNhbGxiYWNrcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAKICNp
bmNsdWRlICJBc3luY0ZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJBc3luY0ZpbGVXcml0ZXIuaCIK
KyNpbmNsdWRlICJCbG9iRGF0YS5oIgogI2luY2x1ZGUgIkZpbGVNZXRhZGF0YS5oIgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC01NCw2ICs1NSw5IEBAIHB1YmxpYzoKICAg
ICAvLyBDYWxsZWQgd2hlbiBhIGZpbGUgbWV0YWRhdGEgaXMgcmVhZCBzdWNjZXNzZnVsbHkuCiAg
ICAgdmlydHVhbCB2b2lkIGRpZFJlYWRNZXRhZGF0YShjb25zdCBGaWxlTWV0YWRhdGEmKSB7IEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAKKyAgICAvLyBDYWxsZWQgd2hlbiBhIHNuYXBzaG90IGZp
bGUgaXMgY3JlYXRlZCBzdWNjZXNzZnVsbHkuCisgICAgdmlydHVhbCB2b2lkIGRpZENyZWF0ZVNu
YXBzaG90RmlsZShjb25zdCBGaWxlTWV0YWRhdGEmLCBQYXNzUmVmUHRyPEJsb2JEYXRhSGFuZGxl
PiBzbmFwc2hvdCkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorCiAgICAgLy8gQ2FsbGVkIHdo
ZW4gYSBkaXJlY3RvcnkgZW50cnkgaXMgcmVhZC4KICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVhZERp
cmVjdG9yeUVudHJ5KGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCBpc0RpcmVjdG9yeSkgeyBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
QXN5bmNGaWxlU3lzdGVtR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvQXN5bmNGaWxlU3lzdGVtR3RrLmNwcAkocmV2aXNpb24gMTQ1NDY0KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0FzeW5jRmlsZVN5c3RlbUd0ay5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTExOCw2ICsxMTgsMTEgQEAgdm9pZCBBc3luY0ZpbGVTeXN0ZW1HdGs6OmNyZWF0
ZVdyaXRlcihBcwogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKK3ZvaWQgQXN5bmNGaWxlU3lz
dGVtR3RrOjpjcmVhdGVTbmFwc2hvdEZpbGVBbmRSZWFkTWV0YWRhdGEoY29uc3QgS1VSTCYsIFBh
c3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPikKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iRGF0YS5jcHAJKHJldmlzaW9uIDE0NTQ2
NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYkRhdGEuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCw2ICszMCw4IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJCbG9iRGF0YS5oIgorI2luY2x1ZGUgIkJsb2JVUkwuaCIKKyNpbmNsdWRlICJUaHJlYWRh
YmxlQmxvYlJlZ2lzdHJ5LmgiCiAKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8
d3RmL1Bhc3NPd25QdHIuaD4KQEAgLTEwMSw0ICsxMDMsMTcgQEAgdm9pZCBCbG9iRGF0YTo6c3dh
cEl0ZW1zKEJsb2JEYXRhSXRlbUxpcwogICAgIG1faXRlbXMuc3dhcChpdGVtcyk7CiB9CiAKKwor
QmxvYkRhdGFIYW5kbGU6OkJsb2JEYXRhSGFuZGxlKFBhc3NPd25QdHI8QmxvYkRhdGE+IGRhdGEs
IGxvbmcgbG9uZyBzaXplKQoreworICAgIFVOVVNFRF9QQVJBTShzaXplKTsKKyAgICBtX2ludGVy
bmFsVVJMID0gQmxvYlVSTDo6Y3JlYXRlSW50ZXJuYWxVUkwoKTsKKyAgICBUaHJlYWRhYmxlQmxv
YlJlZ2lzdHJ5OjpyZWdpc3RlckJsb2JVUkwobV9pbnRlcm5hbFVSTCwgZGF0YSk7Cit9CisKK0Js
b2JEYXRhSGFuZGxlOjp+QmxvYkRhdGFIYW5kbGUoKQoreworICAgIFRocmVhZGFibGVCbG9iUmVn
aXN0cnk6OnVucmVnaXN0ZXJCbG9iVVJMKG1faW50ZXJuYWxVUkwpOworfQorCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JE
YXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9i
RGF0YS5oCShyZXZpc2lvbiAxNDU0NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL0Jsb2JEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwMiw2ICsyMDIsMjMgQEAgcHJpdmF0
ZToKICAgICBCbG9iRGF0YUl0ZW1MaXN0IG1faXRlbXM7CiB9OwogCisvLyBGSVhNRTogVGhpcyBj
bGFzcyBpcyBtb3N0bHkgcGxhY2UgaG9sZGVyIHVudGlsIEkgZ2V0IGZhcnRoZXIgYWxvbmcgd2l0
aAorLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwODczMyBhbmQg
bW9yZSBzcGVjaWZpY2FsbHkgd2l0aCBsYW5kaW5nCisvLyBodHRwczovL2NvZGVyZXZpZXcuY2hy
b21pdW0ub3JnLzExMTkyMDE3Ly4KK2NsYXNzIEJsb2JEYXRhSGFuZGxlIDogcHVibGljIFRocmVh
ZFNhZmVSZWZDb3VudGVkPEJsb2JEYXRhSGFuZGxlPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8QmxvYkRhdGFIYW5kbGU+IGNyZWF0ZShQYXNzT3duUHRyPEJsb2JEYXRhPiBkYXRh
LCBsb25nIGxvbmcgc2l6ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQmxv
YkRhdGFIYW5kbGUoZGF0YSwgc2l6ZSkpOworICAgIH0KKworICAgIH5CbG9iRGF0YUhhbmRsZSgp
OworCitwcml2YXRlOgorICAgIEJsb2JEYXRhSGFuZGxlKFBhc3NPd25QdHI8QmxvYkRhdGE+LCBs
b25nIGxvbmcgc2l6ZSk7CisgICAgS1VSTCBtX2ludGVybmFsVVJMOworfTsKKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gQmxvYkRhdGFfaApJbmRleDogU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0NTQ2NCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDQgQEAKKzIwMTMtMDMtMTEgIE1p
Y2hhZWwgTm9yZG1hbiAgPG1pY2hhZWxuQGdvb2dsZS5jb20+CisKKyAgICAgICAgW0Nocm9taXVt
XSBGaWxlU3lzdGVtIG1vZHM6IENoYW5nZXMgdG8gc25hcHNob3QgZmlsZSBjcmVhdGlvbiB0byBy
ZWR1Y2UgZGVwZW5kZW5jaWVzIG9uIGJsb2JzLgorICAgICAgICBObyBsb25nZXIgc2VuZCBhIHxi
bG9iVVJMfCB0byB0aGUgYnJvd3NlciBwcm9jZXNzLCBubyBsb25nZXIgZXhwZWN0IHRoZSBicm93
c2VyIHByb2Nlc3MKKyAgICAgICAgdG8gaGF2ZSByZWdpc3RlcmVkIGEgYmxvYiB3aXRoIHRoYXQg
dXJsLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA4
ODUxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBz
cmMvQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWxlV3JpdGVySGVscGVyQ2FsbGJhY2tzOjpkaWRDcmVhdGVTbmFwc2hv
dEZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNGaWxlU3lzdGVtQ2hyb21pdW06OmNyZWF0
ZVNuYXBzaG90RmlsZUFuZFJlYWRNZXRhZGF0YSk6CisgICAgICAgICogc3JjL0FzeW5jRmlsZVN5
c3RlbUNocm9taXVtLmg6CisgICAgICAgIChBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bSk6CisgICAg
ICAgICogc3JjL0xvY2FsRmlsZVN5c3RlbUNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAqIHNyYy9XZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbC5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsOjpkaWRDcmVhdGVTbmFwc2hvdEZp
bGUpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKiBzcmMvV2ViRmlsZVN5c3RlbUNhbGxi
YWNrc0ltcGwuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViRmlsZVN5c3RlbUNh
bGxiYWNrc0ltcGwpOgorICAgICAgICAqIHNyYy9Xb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bTo6
Y3JlYXRlU25hcHNob3RGaWxlQW5kUmVhZE1ldGFkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Oldv
cmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVtOjpjcmVhdGVXb3JrZXJGaWxlU3lzdGVtQ2FsbGJh
Y2tzQnJpZGdlKToKKyAgICAgICAgKiBzcmMvV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRn
ZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok1haW5UaHJlYWRGaWxlU3lzdGVtQ2FsbGJhY2tzOjpk
aWRDcmVhdGVTbmFwc2hvdEZpbGUpOgorICAgICAgICAoTWFpblRocmVhZEZpbGVTeXN0ZW1DYWxs
YmFja3MpOgorICAgICAgICAoV2ViS2l0OjpXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdl
Ojpwb3N0Q3JlYXRlU25hcHNob3RGaWxlVG9NYWluVGhyZWFkKToKKyAgICAgICAgKFdlYktpdDo6
V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6Y3JlYXRlU25hcHNob3RGaWxlT25NYWlu
VGhyZWFkKToKKyAgICAgICAgKFdlYktpdDo6V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRn
ZTo6ZGlkQ3JlYXRlU25hcHNob3RGaWxlT25NYWluVGhyZWFkKToKKyAgICAgICAgKFdlYktpdCk6
CisgICAgICAgIChXZWJLaXQ6OldvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6Oldvcmtl
ckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UpOgorICAgICAgICAoV2ViS2l0OjpXb3JrZXJGaWxl
U3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpkaWRDcmVhdGVTbmFwc2hvdEZpbGVPbldvcmtlclRocmVh
ZCk6CisgICAgICAgICogc3JjL1dvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UuaDoKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6V29y
a2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6Y3JlYXRlKToKKyAgICAgICAgKFdvcmtlckZp
bGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UpOgorCiAyMDEzLTAzLTExICBBYmhpc2hlayBBcnlhICA8
aW5mZXJub0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmVwbGFjZSBzdGF0aWNfY2FzdHMgd2l0
aCB0byogZnVuY3Rpb25zLgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXN5bmNG
aWxlU3lzdGVtQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL0FzeW5jRmlsZVN5c3RlbUNocm9taXVtLmNwcAkocmV2aXNpb24gMTQ1NDY0KQorKysg
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00OCw0NiArNDgsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LW5hbWVzcGFjZSB7Ci0KLS8vIFNwZWNpYWxpemVkIGNhbGxiYWNrIGNsYXNzIGZvciBjcmVhdGVT
bmFwc2hvdEZpbGVBbmRSZWFkTWV0YWRhdGEuCi1jbGFzcyBTbmFwc2hvdEZpbGVDYWxsYmFja3Mg
OiBwdWJsaWMgQXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMg
UGFzc093blB0cjxTbmFwc2hvdEZpbGVDYWxsYmFja3M+IGNyZWF0ZShjb25zdCBLVVJMJiBpbnRl
cm5hbEJsb2JVUkwsIFBhc3NPd25QdHI8V2ViQ29yZTo6QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tz
PiBjYWxsYmFja3MpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFNuYXBzaG90
RmlsZUNhbGxiYWNrcyhpbnRlcm5hbEJsb2JVUkwsIGNhbGxiYWNrcykpOwotICAgIH0KLQotICAg
IHZpcnR1YWwgdm9pZCBkaWRSZWFkTWV0YWRhdGEoY29uc3QgRmlsZU1ldGFkYXRhJiBtZXRhZGF0
YSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX2NhbGxiYWNrcyk7Ci0KLSAgICAgICAgLy8gVGhp
cyB3aWxsIGNyZWF0ZSBhIG5ldyBGaWxlIG9iamVjdCB1c2luZyB0aGUgbWV0YWRhdGEuCi0gICAg
ICAgIG1fY2FsbGJhY2tzLT5kaWRSZWFkTWV0YWRhdGEobWV0YWRhdGEpOwotCi0gICAgICAgIC8v
IE5vdyB0aGF0IHdlJ3ZlIHJlZ2lzdGVyZWQgdGhlIHNuYXBzaG90IGZpbGUsIHdlIGNhbiB1bnJl
Z2lzdGVyIG91ciBpbnRlcm5hbEJsb2JVUkwgd2hpY2ggaGFzIHBsYXllZCBhIHBsYWNlaG9sZGVy
IGZvciB0aGUgZmlsZSBkdXJpbmcgdGhlIElQQy4KLSAgICAgICAgVGhyZWFkYWJsZUJsb2JSZWdp
c3RyeTo6dW5yZWdpc3RlckJsb2JVUkwobV9pbnRlcm5hbEJsb2JVUkwpOwotICAgIH0KLQotICAg
IHZpcnR1YWwgdm9pZCBkaWRGYWlsKGludCBlcnJvcikKLSAgICB7Ci0gICAgICAgIEFTU0VSVCht
X2NhbGxiYWNrcyk7Ci0gICAgICAgIG1fY2FsbGJhY2tzLT5kaWRGYWlsKGVycm9yKTsKLSAgICB9
Ci0KLXByaXZhdGU6Ci0gICAgU25hcHNob3RGaWxlQ2FsbGJhY2tzKGNvbnN0IEtVUkwmIGludGVy
bmFsQmxvYlVSTCwgUGFzc093blB0cjxXZWJDb3JlOjpBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+
IGNhbGxiYWNrcykKLSAgICAgICAgOiBtX2ludGVybmFsQmxvYlVSTChpbnRlcm5hbEJsb2JVUkwp
Ci0gICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQotICAgIHsKLSAgICB9Ci0KLSAgICBL
VVJMIG1faW50ZXJuYWxCbG9iVVJMOwotICAgIE93blB0cjxXZWJDb3JlOjpBc3luY0ZpbGVTeXN0
ZW1DYWxsYmFja3M+IG1fY2FsbGJhY2tzOwotfTsKLQotfSAvLyBuYW1lc3BhY2UKLQogYm9vbCBB
c3luY0ZpbGVTeXN0ZW06OmlzQXZhaWxhYmxlKCkKIHsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTE4
Niw3ICsxNDYsMTEgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgICAgIGRlbGV0ZSB0aGlzOwog
ICAgIH0KLQorICAgIHZpcnR1YWwgdm9pZCBkaWRDcmVhdGVTbmFwc2hvdEZpbGUoY29uc3QgV2Vi
S2l0OjpXZWJGaWxlSW5mbyYgaW5mbykKKyAgICB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICBkZWxldGUgdGhpczsKKyAgICB9CiAgICAgdmlydHVhbCB2b2lkIGRpZFJl
YWREaXJlY3RvcnkoY29uc3QgV2ViS2l0OjpXZWJWZWN0b3I8V2ViS2l0OjpXZWJGaWxlU3lzdGVt
RW50cnk+JiBlbnRyaWVzLCBib29sIGhhc01vcmUpCiAgICAgewogICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKQEAgLTIxOSwxNSArMTgzLDcgQEAgdm9pZCBBc3luY0ZpbGVTeXN0ZW1DaHJv
bWl1bTo6Y3JlYXRlV3JpdAogCiB2b2lkIEFzeW5jRmlsZVN5c3RlbUNocm9taXVtOjpjcmVhdGVT
bmFwc2hvdEZpbGVBbmRSZWFkTWV0YWRhdGEoY29uc3QgS1VSTCYgcGF0aCwgUGFzc093blB0cjxB
c3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+IGNhbGxiYWNrcykKIHsKLSAgICBLVVJMIGludGVybmFs
QmxvYlVSTCA9IEJsb2JVUkw6OmNyZWF0ZUludGVybmFsVVJMKCk7Ci0KLSAgICAvLyBUaGlzIHdp
bGwgY3JlYXRlIGEgc25hcHNob3QgZmlsZSBhbmQgcmVnaXN0ZXIgdGhlIGZpbGUgdG8gYSBibG9i
IHVzaW5nIHRoZSBnaXZlbiBpbnRlcm5hbEJsb2JVUkwuCi0gICAgbV93ZWJGaWxlU3lzdGVtLT5j
cmVhdGVTbmFwc2hvdEZpbGVBbmRSZWFkTWV0YWRhdGEoaW50ZXJuYWxCbG9iVVJMLCBwYXRoLCBu
ZXcgV2ViS2l0OjpXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbChjcmVhdGVTbmFwc2hvdEZpbGVD
YWxsYmFjayhpbnRlcm5hbEJsb2JVUkwsIGNhbGxiYWNrcykpKTsKLX0KLQotUGFzc093blB0cjxB
c3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+IEFzeW5jRmlsZVN5c3RlbUNocm9taXVtOjpjcmVhdGVT
bmFwc2hvdEZpbGVDYWxsYmFjayhjb25zdCBLVVJMJiBpbnRlcm5hbEJsb2JVUkwsIFBhc3NPd25Q
dHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPiBjYWxsYmFja3MpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIFNuYXBzaG90RmlsZUNhbGxiYWNrczo6Y3JlYXRlKGludGVybmFsQmxvYlVSTCwgY2FsbGJh
Y2tzKTsKKyAgICBtX3dlYkZpbGVTeXN0ZW0tPmNyZWF0ZVNuYXBzaG90RmlsZUFuZFJlYWRNZXRh
ZGF0YShwYXRoLCBuZXcgV2ViS2l0OjpXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbChjYWxsYmFj
a3MpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bS5oCShyZXZpc2lv
biAxNDU0NjQpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3luY0ZpbGVTeXN0ZW1D
aHJvbWl1bS5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSw4ICs2OSw2IEBAIHB1YmxpYzoKIHByb3Rl
Y3RlZDoKICAgICBBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bSgpOwogCi0gICAgUGFzc093blB0cjxB
c3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+IGNyZWF0ZVNuYXBzaG90RmlsZUNhbGxiYWNrKGNvbnN0
IEtVUkwmIGludGVybmFsQmxvYlVSTCwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFj
a3M+KSBjb25zdDsKLQogICAgIFdlYktpdDo6V2ViRmlsZVN5c3RlbSogbV93ZWJGaWxlU3lzdGVt
OwogfTsKIApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvTG9jYWxGaWxlU3lzdGVt
Q2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0xv
Y2FsRmlsZVN5c3RlbUNocm9taXVtLmNwcAkocmV2aXNpb24gMTQ1NDY0KQorKysgU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvTG9jYWxGaWxlU3lzdGVtQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNTMsNyArMTUzLDcgQEAgYm9vbCBhbGxvd0ZpbGVTeXN0ZW1Gb3JXb3JrZXIoV2Vi
Q29tbW9uVwogICAgIHJldHVybiBicmlkZ2UtPnJlc3VsdCgpOwogfQogCi12b2lkIG9wZW5GaWxl
U3lzdGVtRm9yV29ya2VyKFdlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50LCBXZWJG
aWxlU3lzdGVtOjpUeXBlIHR5cGUsIGxvbmcgbG9uZyBzaXplLCBib29sIGNyZWF0ZSwgV2ViRmls
ZVN5c3RlbUNhbGxiYWNrcyogY2FsbGJhY2tzLCBGaWxlU3lzdGVtU3luY2hyb25vdXNUeXBlIHN5
bmNocm9ub3VzVHlwZSkKK3ZvaWQgb3BlbkZpbGVTeXN0ZW1Gb3JXb3JrZXIoV2ViQ29tbW9uV29y
a2VyQ2xpZW50KiBjb21tb25DbGllbnQsIFdlYkZpbGVTeXN0ZW06OlR5cGUgdHlwZSwgbG9uZyBs
b25nIHNpemUsIGJvb2wgY3JlYXRlLCBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbCogY2FsbGJh
Y2tzLCBGaWxlU3lzdGVtU3luY2hyb25vdXNUeXBlIHN5bmNocm9ub3VzVHlwZSkKIHsKICAgICBX
b3JrZXJTY3JpcHRDb250cm9sbGVyKiBjb250cm9sbGVyID0gV29ya2VyU2NyaXB0Q29udHJvbGxl
cjo6Y29udHJvbGxlckZvckNvbnRleHQoKTsKICAgICBXb3JrZXJDb250ZXh0KiB3b3JrZXJDb250
ZXh0ID0gY29udHJvbGxlci0+d29ya2VyQ29udGV4dCgpOwpJbmRleDogU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsLmNw
cAkocmV2aXNpb24gMTQ1NDY0KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRmls
ZVN5c3RlbUNhbGxiYWNrc0ltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Niw2ICs3NiwyNyBA
QCB2b2lkIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsOjpkaWRSZWFkCiAgICAgZGVsZXRlIHRo
aXM7CiB9CiAKK3ZvaWQgV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGw6OmRpZENyZWF0ZVNuYXBz
aG90RmlsZShjb25zdCBXZWJGaWxlSW5mbyYgd2ViRmlsZUluZm8pCit7CisgICAgLy8gSXQncyBp
bXBvcnRhbnQgdG8gY3JlYXRlIGEgQmxvYkRhdGFIYW5kbGUgdGhhdCByZWZlcnMgdG8gdGhlIHBs
YXRmb3JtIGZpbGUgcGF0aCBwcmlvcgorICAgIC8vIHRvIHJldHVybiBmcm9tIHRoaXMgbWV0aG9k
IHNvIHRoZSB1bmRlcmx5aW5nIGZpbGUgd2lsbCBub3QgYmUgZGVsZXRlZC4KKyAgICBPd25QdHI8
QmxvYkRhdGE+IGJsb2JEYXRhID0gQmxvYkRhdGE6OmNyZWF0ZSgpOworICAgIGJsb2JEYXRhLT5h
cHBlbmRGaWxlKHdlYkZpbGVJbmZvLnBsYXRmb3JtUGF0aCk7CisgICAgUmVmUHRyPEJsb2JEYXRh
SGFuZGxlPiBzbmFwc2hvdEJsb2IgPSBCbG9iRGF0YUhhbmRsZTo6Y3JlYXRlKGJsb2JEYXRhLnJl
bGVhc2UoKSwgd2ViRmlsZUluZm8ubGVuZ3RoKTsKKyAgICBkaWRDcmVhdGVTbmFwc2hvdEZpbGUo
d2ViRmlsZUluZm8sIHNuYXBzaG90QmxvYik7Cit9CisKK3ZvaWQgV2ViRmlsZVN5c3RlbUNhbGxi
YWNrc0ltcGw6OmRpZENyZWF0ZVNuYXBzaG90RmlsZShjb25zdCBXZWJGaWxlSW5mbyYgd2ViRmls
ZUluZm8sIFBhc3NSZWZQdHI8V2ViQ29yZTo6QmxvYkRhdGFIYW5kbGU+IHNuYXBzaG90KQorewor
ICAgIEZpbGVNZXRhZGF0YSBmaWxlTWV0YWRhdGE7CisgICAgZmlsZU1ldGFkYXRhLm1vZGlmaWNh
dGlvblRpbWUgPSB3ZWJGaWxlSW5mby5tb2RpZmljYXRpb25UaW1lOworICAgIGZpbGVNZXRhZGF0
YS5sZW5ndGggPSB3ZWJGaWxlSW5mby5sZW5ndGg7CisgICAgZmlsZU1ldGFkYXRhLnR5cGUgPSBz
dGF0aWNfY2FzdDxGaWxlTWV0YWRhdGE6OlR5cGU+KHdlYkZpbGVJbmZvLnR5cGUpOworICAgIGZp
bGVNZXRhZGF0YS5wbGF0Zm9ybVBhdGggPSB3ZWJGaWxlSW5mby5wbGF0Zm9ybVBhdGg7CisgICAg
bV9jYWxsYmFja3MtPmRpZENyZWF0ZVNuYXBzaG90RmlsZShmaWxlTWV0YWRhdGEsIHNuYXBzaG90
KTsKKyAgICBkZWxldGUgdGhpczsKK30KKwogdm9pZCBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1w
bDo6ZGlkUmVhZERpcmVjdG9yeShjb25zdCBXZWJWZWN0b3I8V2ViRmlsZVN5c3RlbUVudHJ5PiYg
ZW50cmllcywgYm9vbCBoYXNNb3JlKQogewogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZW50
cmllcy5zaXplKCk7ICsraSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZp
bGVTeXN0ZW1DYWxsYmFja3NJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwuaAkocmV2aXNpb24gMTQ1NDY0KQor
KysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwu
aAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiBjbGFzcyBBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M7CitjbGFzcyBCbG9iRGF0YUhhbmRsZTsK
IGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiB9CiAKQEAgLTU2LDExICs1NywxNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB+V2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwoKTsKIAogICAg
IHZpcnR1YWwgdm9pZCBkaWRTdWNjZWVkKCk7Ci0gICAgdmlydHVhbCB2b2lkIGRpZFJlYWRNZXRh
ZGF0YShjb25zdCBXZWJGaWxlSW5mbyYgaW5mbyk7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlYWRN
ZXRhZGF0YShjb25zdCBXZWJGaWxlSW5mbyYpOworICAgIHZpcnR1YWwgdm9pZCBkaWRDcmVhdGVT
bmFwc2hvdEZpbGUoY29uc3QgV2ViRmlsZUluZm8mKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVh
ZERpcmVjdG9yeShjb25zdCBXZWJWZWN0b3I8V2ViRmlsZVN5c3RlbUVudHJ5PiYgZW50cmllcywg
Ym9vbCBoYXNNb3JlKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkT3BlbkZpbGVTeXN0ZW0oY29uc3Qg
V2ViU3RyaW5nJiBuYW1lLCBjb25zdCBXZWJVUkwmIHJvb3RVUkwpOwogICAgIHZpcnR1YWwgdm9p
ZCBkaWRGYWlsKFdlYkZpbGVFcnJvciBlcnJvcik7CiAKKyAgICAvLyBUaGlzIGludGVybmFsIG92
ZXJsb2FkIGlzIHVzZWQgYnkgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZSB0byBkZWxp
dmVyIGEgYmxvYiBkYXRhIGhhbmRsZQorICAgIC8vIGNyZWF0ZWQgb24gdGhlIG1haW4gdGhyZWFk
IHRvIGFuIEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrIG9uIGEgYmFja2dyb3VuZCB3b3JrZXIgdGhy
ZWFkLiBUaGUgb3RoZXIKKyAgICAvLyB2aXJ0dWFsIG1ldGhvZCBpcyBpbnZva2VkIGJ5IHRoZSBl
bWJlZGRlci4KKyAgICB2b2lkIGRpZENyZWF0ZVNuYXBzaG90RmlsZShjb25zdCBXZWJGaWxlSW5m
byYsIFBhc3NSZWZQdHI8V2ViQ29yZTo6QmxvYkRhdGFIYW5kbGU+IHNuYXBzaG90KTsKKwogcHJp
dmF0ZToKICAgICBPd25QdHI8V2ViQ29yZTo6QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPiBtX2Nh
bGxiYWNrczsKIApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyQXN5bmNG
aWxlU3lzdGVtQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVtLmNwcAkocmV2aXNpb24gMTQ1NDY0
KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hy
b21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzksMTUgKzE3OSwxMiBAQCB2b2lkIFdvcmtl
ckFzeW5jRmlsZVN5c3RlbUNocm9taXVtOjpjcmVhCiAKIHZvaWQgV29ya2VyQXN5bmNGaWxlU3lz
dGVtQ2hyb21pdW06OmNyZWF0ZVNuYXBzaG90RmlsZUFuZFJlYWRNZXRhZGF0YShjb25zdCBLVVJM
JiBwYXRoLCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4gY2FsbGJhY2tzKQog
ewotICAgIEtVUkwgaW50ZXJuYWxCbG9iVVJMID0gQmxvYlVSTDo6Y3JlYXRlSW50ZXJuYWxVUkwo
KTsKLQotICAgIGNyZWF0ZVdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UoY3JlYXRlU25h
cHNob3RGaWxlQ2FsbGJhY2soaW50ZXJuYWxCbG9iVVJMLCBjYWxsYmFja3MpKS0+cG9zdENyZWF0
ZVNuYXBzaG90RmlsZVRvTWFpblRocmVhZChtX3dlYkZpbGVTeXN0ZW0sIGludGVybmFsQmxvYlVS
TCwgcGF0aCwgbV9tb2RlRm9yQ3VycmVudE9wZXJhdGlvbik7CisgICAgY3JlYXRlV29ya2VyRmls
ZVN5c3RlbUNhbGxiYWNrc0JyaWRnZShjYWxsYmFja3MpLT5wb3N0Q3JlYXRlU25hcHNob3RGaWxl
VG9NYWluVGhyZWFkKG1fd2ViRmlsZVN5c3RlbSwgcGF0aCwgbV9tb2RlRm9yQ3VycmVudE9wZXJh
dGlvbik7CiB9CiAKIFBhc3NSZWZQdHI8V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZT4g
V29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW06OmNyZWF0ZVdvcmtlckZpbGVTeXN0ZW1DYWxs
YmFja3NCcmlkZ2UoUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+IGNhbGxiYWNr
cykKIHsKICAgICBBU1NFUlQobV9zeW5jaHJvbm91c1R5cGUgPT0gQXN5bmNocm9ub3VzRmlsZVN5
c3RlbSB8fCAhbV9icmlkZ2VGb3JDdXJyZW50T3BlcmF0aW9uKTsKLSAgICAodm9pZCltX3N5bmNo
cm9ub3VzVHlwZTsKIAogICAgIG1fbW9kZUZvckN1cnJlbnRPcGVyYXRpb24gPSBmaWxlU3lzdGVt
T3BlcmF0aW9uc01vZGU7CiAgICAgbV9tb2RlRm9yQ3VycmVudE9wZXJhdGlvbi5hcHBlbmQoU3Ry
aW5nOjpudW1iZXIobV93b3JrZXJDb250ZXh0LT50aHJlYWQoKS0+cnVuTG9vcCgpLmNyZWF0ZVVu
aXF1ZUlkKCkpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckZpbGVT
eXN0ZW1DYWxsYmFja3NCcmlkZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UuY3BwCShyZXZpc2lvbiAx
NDU0NjQpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJGaWxlU3lzdGVtQ2Fs
bGJhY2tzQnJpZGdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTYgKzMzLDE3IEBACiAKICNp
ZiBFTkFCTEUoRklMRV9TWVNURU0pICYmIEVOQUJMRShXT1JLRVJTKQogCisjaW5jbHVkZSAiQmxv
YkRhdGEuaCIKICNpbmNsdWRlICJDcm9zc1RocmVhZFRhc2suaCIKICNpbmNsdWRlICJLVVJMLmgi
CiAjaW5jbHVkZSAiV2ViQ29tbW9uV29ya2VyQ2xpZW50LmgiCisjaW5jbHVkZSAiV2ViRmlsZVN5
c3RlbUNhbGxiYWNrc0ltcGwuaCIKICNpbmNsdWRlICJXZWJXb3JrZXJCYXNlLmgiCiAjaW5jbHVk
ZSAiV29ya2VyQ29udGV4dC5oIgogI2luY2x1ZGUgIldvcmtlckxvYWRlclByb3h5LmgiCiAjaW5j
bHVkZSAiV29ya2VyU2NyaXB0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIldvcmtlclRocmVhZC5o
IgogI2luY2x1ZGUgPHB1YmxpYy9XZWJGaWxlSW5mby5oPgotI2luY2x1ZGUgPHB1YmxpYy9XZWJG
aWxlU3lzdGVtQ2FsbGJhY2tzLmg+CiAjaW5jbHVkZSA8cHVibGljL1dlYkZpbGVTeXN0ZW1FbnRy
eS5oPgogI2luY2x1ZGUgPHB1YmxpYy9XZWJTdHJpbmcuaD4KICNpbmNsdWRlIDxwdWJsaWMvV2Vi
VVJMLmg+CkBAIC0xMjQsNiArMTI1LDE3IEBAIHB1YmxpYzoKICAgICAgICAgZGVsZXRlIHRoaXM7
CiAgICAgfQogCisgICAgdmlydHVhbCB2b2lkIGRpZENyZWF0ZVNuYXBzaG90RmlsZShjb25zdCBX
ZWJGaWxlSW5mbyYgaW5mbykKKyAgICB7CisgICAgICAgIC8vIEl0J3MgaW1wb3J0YW50IHRvIGNy
ZWF0ZSBhIEJsb2JEYXRhSGFuZGxlIHRoYXQgcmVmZXJzIHRvIHRoZSBwbGF0Zm9ybSBmaWxlIHBh
dGggcHJpb3IKKyAgICAgICAgLy8gdG8gcmV0dXJuIGZyb20gdGhpcyBtZXRob2Qgc28gdGhlIHVu
ZGVybHlpbmcgZmlsZSB3aWxsIG5vdCBiZSBkZWxldGVkLgorICAgICAgICBPd25QdHI8QmxvYkRh
dGE+IGJsb2JEYXRhID0gQmxvYkRhdGE6OmNyZWF0ZSgpOworICAgICAgICBibG9iRGF0YS0+YXBw
ZW5kRmlsZShpbmZvLnBsYXRmb3JtUGF0aCk7CisgICAgICAgIFJlZlB0cjxCbG9iRGF0YUhhbmRs
ZT4gc25hcHNob3RCbG9iID0gQmxvYkRhdGFIYW5kbGU6OmNyZWF0ZShibG9iRGF0YS5yZWxlYXNl
KCksIGluZm8ubGVuZ3RoKTsKKyAgICAgICAgbV9icmlkZ2UtPmRpZENyZWF0ZVNuYXBzaG90Rmls
ZU9uTWFpblRocmVhZChpbmZvLCBtX21vZGUsIHNuYXBzaG90QmxvYik7CisgICAgICAgIGRlbGV0
ZSB0aGlzOworICAgIH0KKwogICAgIHZpcnR1YWwgdm9pZCBkaWRSZWFkRGlyZWN0b3J5KGNvbnN0
IFdlYlZlY3RvcjxXZWJGaWxlU3lzdGVtRW50cnk+JiBlbnRyaWVzLCBib29sIGhhc01vcmUpCiAg
ICAgewogICAgICAgICBtX2JyaWRnZS0+ZGlkUmVhZERpcmVjdG9yeU9uTWFpblRocmVhZChlbnRy
aWVzLCBoYXNNb3JlLCBtX21vZGUpOwpAQCAtMjg5LDEzICszMDEsMTMgQEAgdm9pZCBXb3JrZXJG
aWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpwbwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcywgbW9kZSkpOwogfQogCi12b2lkIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6
OnBvc3RDcmVhdGVTbmFwc2hvdEZpbGVUb01haW5UaHJlYWQoV2ViRmlsZVN5c3RlbSogZmlsZVN5
c3RlbSwgY29uc3QgS1VSTCYgaW50ZXJuYWxCbG9iVVJMLCBjb25zdCBLVVJMJiBwYXRoLCBjb25z
dCBTdHJpbmcmIG1vZGUpCit2b2lkIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OnBv
c3RDcmVhdGVTbmFwc2hvdEZpbGVUb01haW5UaHJlYWQoV2ViRmlsZVN5c3RlbSogZmlsZVN5c3Rl
bSwgY29uc3QgS1VSTCYgcGF0aCwgY29uc3QgU3RyaW5nJiBtb2RlKQogewogICAgIEFTU0VSVChm
aWxlU3lzdGVtKTsKICAgICBkaXNwYXRjaFRhc2tUb01haW5UaHJlYWQoCiAgICAgICAgIGNyZWF0
ZUNhbGxiYWNrVGFzaygmY3JlYXRlU25hcHNob3RGaWxlT25NYWluVGhyZWFkLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQWxsb3dDcm9zc1RocmVhZEFjY2VzcyhmaWxlU3lzdGVtKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludGVybmFsQmxvYlVSTCwgcGF0aCwgdGhpcywgbW9k
ZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCwgdGhpcywgbW9kZSkpOwogfQog
CiB2b2lkIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6Om9wZW5GaWxlU3lzdGVtT25N
YWluVGhyZWFkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJDb21tb25Xb3JrZXJDbGllbnQq
IGNvbW1vbkNsaWVudCwgV2ViRmlsZVN5c3RlbTo6VHlwZSB0eXBlLCBsb25nIGxvbmcgc2l6ZSwg
Ym9vbCBjcmVhdGUsIFBhc3NSZWZQdHI8V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZT4g
YnJpZGdlLCBjb25zdCBTdHJpbmcmIG1vZGUpCkBAIC0zNTcsOSArMzY5LDkgQEAgdm9pZCBXb3Jr
ZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpyZQogICAgIGZpbGVTeXN0ZW0tPnJlYWREaXJl
Y3RvcnkocGF0aCwgTWFpblRocmVhZEZpbGVTeXN0ZW1DYWxsYmFja3M6OmNyZWF0ZUxlYWtlZFB0
cihicmlkZ2UsIG1vZGUpKTsKIH0KIAotdm9pZCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJp
ZGdlOjpjcmVhdGVTbmFwc2hvdEZpbGVPbk1haW5UaHJlYWQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIFdlYkZpbGVTeXN0ZW0qIGZpbGVTeXN0ZW0sIGNvbnN0IEtVUkwmIGludGVy
bmFsQmxvYlVSTCwgY29uc3QgS1VSTCYgcGF0aCwgUGFzc1JlZlB0cjxXb3JrZXJGaWxlU3lzdGVt
Q2FsbGJhY2tzQnJpZGdlPiBicmlkZ2UsIGNvbnN0IFN0cmluZyYgbW9kZSkKK3ZvaWQgV29ya2Vy
RmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6Y3JlYXRlU25hcHNob3RGaWxlT25NYWluVGhyZWFk
KFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJGaWxlU3lzdGVtKiBmaWxlU3lz
dGVtLCBjb25zdCBLVVJMJiBwYXRoLCBQYXNzUmVmUHRyPFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFj
a3NCcmlkZ2U+IGJyaWRnZSwgY29uc3QgU3RyaW5nJiBtb2RlKQogewotICAgIGZpbGVTeXN0ZW0t
PmNyZWF0ZVNuYXBzaG90RmlsZUFuZFJlYWRNZXRhZGF0YShpbnRlcm5hbEJsb2JVUkwsIHBhdGgs
IE1haW5UaHJlYWRGaWxlU3lzdGVtQ2FsbGJhY2tzOjpjcmVhdGVMZWFrZWRQdHIoYnJpZGdlLCBt
b2RlKSk7CisgICAgZmlsZVN5c3RlbS0+Y3JlYXRlU25hcHNob3RGaWxlQW5kUmVhZE1ldGFkYXRh
KHBhdGgsIE1haW5UaHJlYWRGaWxlU3lzdGVtQ2FsbGJhY2tzOjpjcmVhdGVMZWFrZWRQdHIoYnJp
ZGdlLCBtb2RlKSk7CiB9CiAKIHZvaWQgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6
ZGlkRmFpbE9uTWFpblRocmVhZChXZWJGaWxlRXJyb3IgZXJyb3IsIGNvbnN0IFN0cmluZyYgbW9k
ZSkKQEAgLTM4Myw2ICszOTUsMTEgQEAgdm9pZCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJp
ZGdlOjpkaQogICAgIG1heVBvc3RUYXNrVG9Xb3JrZXIoY3JlYXRlQ2FsbGJhY2tUYXNrKCZkaWRS
ZWFkTWV0YWRhdGFPbldvcmtlclRocmVhZCwgdGhpcywgaW5mbyksIG1vZGUpOwogfQogCit2b2lk
IFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OmRpZENyZWF0ZVNuYXBzaG90RmlsZU9u
TWFpblRocmVhZChjb25zdCBXZWJGaWxlSW5mbyYgaW5mbywgY29uc3QgU3RyaW5nJiBtb2RlLCBQ
YXNzUmVmUHRyPEJsb2JEYXRhSGFuZGxlPiBzbmFwc2hvdEJsb2IpCit7CisgICAgbWF5UG9zdFRh
c2tUb1dvcmtlcihjcmVhdGVDYWxsYmFja1Rhc2soJmRpZENyZWF0ZVNuYXBzaG90RmlsZU9uV29y
a2VyVGhyZWFkLCB0aGlzLCBpbmZvLCBzbmFwc2hvdEJsb2IpLCBtb2RlKTsKK30KKwogdm9pZCBX
b3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpkaWRSZWFkRGlyZWN0b3J5T25NYWluVGhy
ZWFkKGNvbnN0IFdlYlZlY3RvcjxXZWJGaWxlU3lzdGVtRW50cnk+JiBlbnRyaWVzLCBib29sIGhh
c01vcmUsIGNvbnN0IFN0cmluZyYgbW9kZSkKIHsKICAgICBtYXlQb3N0VGFza1RvV29ya2VyKApA
QCAtMzkwLDcgKzQwNyw3IEBAIHZvaWQgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6
ZGkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMsIGVudHJpZXMsIGhhc01vcmUpLCBt
b2RlKTsKIH0KIAotV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6V29ya2VyRmlsZVN5
c3RlbUNhbGxiYWNrc0JyaWRnZShXZWJDb3JlOjpXb3JrZXJMb2FkZXJQcm94eSogd29ya2VyTG9h
ZGVyUHJveHksIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQs
IFdlYkZpbGVTeXN0ZW1DYWxsYmFja3MqIGNhbGxiYWNrcykKK1dvcmtlckZpbGVTeXN0ZW1DYWxs
YmFja3NCcmlkZ2U6OldvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UoV2ViQ29yZTo6V29y
a2VyTG9hZGVyUHJveHkqIHdvcmtlckxvYWRlclByb3h5LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbCogY2Fs
bGJhY2tzKQogICAgIDogbV93b3JrZXJMb2FkZXJQcm94eSh3b3JrZXJMb2FkZXJQcm94eSkKICAg
ICAsIG1fd29ya2VyQ29udGV4dChzY3JpcHRFeGVjdXRpb25Db250ZXh0KQogICAgICwgbV93b3Jr
ZXJDb250ZXh0T2JzZXJ2ZXIoV29ya2VyRmlsZVN5c3RlbUNvbnRleHRPYnNlcnZlcjo6Y3JlYXRl
KHN0YXRpY19jYXN0PFdvcmtlckNvbnRleHQqPihtX3dvcmtlckNvbnRleHQpLCB0aGlzKS5sZWFr
UHRyKCkpCkBAIC00MjQsNiArNDQxLDExIEBAIHZvaWQgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNr
c0JyaWRnZTo6ZGkKICAgICBicmlkZ2UtPm1fY2FsbGJhY2tzT25Xb3JrZXJUaHJlYWQtPmRpZFJl
YWRNZXRhZGF0YShpbmZvKTsKIH0KIAordm9pZCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJp
ZGdlOjpkaWRDcmVhdGVTbmFwc2hvdEZpbGVPbldvcmtlclRocmVhZChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgUGFzc1JlZlB0cjxXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlPiBicmlk
Z2UsIGNvbnN0IFdlYkZpbGVJbmZvJiBpbmZvLCBQYXNzUmVmUHRyPEJsb2JEYXRhSGFuZGxlPiBz
bmFwc2hvdEJsb2IpCit7CisgICAgYnJpZGdlLT5tX2NhbGxiYWNrc09uV29ya2VyVGhyZWFkLT5k
aWRDcmVhdGVTbmFwc2hvdEZpbGUoaW5mbywgc25hcHNob3RCbG9iKTsKK30KKwogdm9pZCBXb3Jr
ZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpkaWRSZWFkRGlyZWN0b3J5T25Xb3JrZXJUaHJl
YWQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8V29ya2VyRmlsZVN5c3RlbUNh
bGxiYWNrc0JyaWRnZT4gYnJpZGdlLCBjb25zdCBXZWJWZWN0b3I8V2ViRmlsZVN5c3RlbUVudHJ5
PiYgZW50cmllcywgYm9vbCBoYXNNb3JlKQogewogICAgIGJyaWRnZS0+bV9jYWxsYmFja3NPbldv
cmtlclRocmVhZC0+ZGlkUmVhZERpcmVjdG9yeShlbnRyaWVzLCBoYXNNb3JlKTsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJGaWxlU3lz
dGVtQ2FsbGJhY2tzQnJpZGdlLmgJKHJldmlzaW9uIDE0NTQ2NCkKKysrIFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UuaAkod29ya2luZyBj
b3B5KQpAQCAtNDMsNiArNDMsNyBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBCbG9iRGF0YUhhbmRsZTsKIGNsYXNzIFdvcmtl
ckxvYWRlclByb3h5OwogfQogCkBAIC01Miw3ICs1Myw3IEBAIGNsYXNzIEFzeW5jRmlsZVN5c3Rl
bTsKIGNsYXNzIE1haW5UaHJlYWRGaWxlU3lzdGVtQ2FsbGJhY2tzOwogY2xhc3MgV2ViQ29tbW9u
V29ya2VyQ2xpZW50OwogY2xhc3MgVGhyZWFkYWJsZUNhbGxiYWNrc0JyaWRnZVdyYXBwZXI7Ci1j
bGFzcyBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzOworY2xhc3MgV2ViRmlsZVN5c3RlbUNhbGxiYWNr
c0ltcGw7CiBjbGFzcyBXb3JrZXJGaWxlU3lzdGVtQ29udGV4dE9ic2VydmVyOwogc3RydWN0IFdl
YkZpbGVJbmZvOwogc3RydWN0IFdlYkZpbGVTeXN0ZW1FbnRyeTsKQEAgLTc3LDcgKzc4LDcgQEAg
cHVibGljOgogCiAgICAgdm9pZCBzdG9wKCk7CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxXb3Jr
ZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlPiBjcmVhdGUoV2ViQ29yZTo6V29ya2VyTG9hZGVy
UHJveHkqIHdvcmtlckxvYWRlclByb3h5LCBXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiB3b3JrZXJDb250ZXh0LCBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzKiBjYWxsYmFja3MpCisgICAg
c3RhdGljIFBhc3NSZWZQdHI8V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZT4gY3JlYXRl
KFdlYkNvcmU6OldvcmtlckxvYWRlclByb3h5KiB3b3JrZXJMb2FkZXJQcm94eSwgV2ViQ29yZTo6
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogd29ya2VyQ29udGV4dCwgV2ViRmlsZVN5c3RlbUNhbGxi
YWNrc0ltcGwqIGNhbGxiYWNrcykKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZSh3b3JrZXJMb2FkZXJQcm94eSwgd29ya2Vy
Q29udGV4dCwgY2FsbGJhY2tzKSk7CiAgICAgfQpAQCAtOTQsMTcgKzk1LDE4IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHBvc3RGaWxlRXhpc3RzVG9NYWluVGhyZWFkKFdlYkZpbGVTeXN0ZW0qLCBjb25z
dCBXZWJDb3JlOjpLVVJMJiBwYXRoLCBjb25zdCBTdHJpbmcmIG1vZGUpOwogICAgIHZvaWQgcG9z
dERpcmVjdG9yeUV4aXN0c1RvTWFpblRocmVhZChXZWJGaWxlU3lzdGVtKiwgY29uc3QgV2ViQ29y
ZTo6S1VSTCYgcGF0aCwgY29uc3QgU3RyaW5nJiBtb2RlKTsKICAgICB2b2lkIHBvc3RSZWFkRGly
ZWN0b3J5VG9NYWluVGhyZWFkKFdlYkZpbGVTeXN0ZW0qLCBjb25zdCBXZWJDb3JlOjpLVVJMJiBw
YXRoLCBjb25zdCBTdHJpbmcmIG1vZGUpOwotICAgIHZvaWQgcG9zdENyZWF0ZVNuYXBzaG90Rmls
ZVRvTWFpblRocmVhZChXZWJGaWxlU3lzdGVtKiwgY29uc3QgV2ViQ29yZTo6S1VSTCYgaW50ZXJu
YWxCbG9iVVJMLCBjb25zdCBXZWJDb3JlOjpLVVJMJiBwYXRoLCBjb25zdCBTdHJpbmcmIG1vZGUp
OworICAgIHZvaWQgcG9zdENyZWF0ZVNuYXBzaG90RmlsZVRvTWFpblRocmVhZChXZWJGaWxlU3lz
dGVtKiwgY29uc3QgV2ViQ29yZTo6S1VSTCYgcGF0aCwgY29uc3QgU3RyaW5nJiBtb2RlKTsKIAog
ICAgIC8vIENhbGxiYWNrIG1ldGhvZHMgdGhhdCBhcmUgY2FsbGVkIG9uIHRoZSBtYWluIHRocmVh
ZC4KICAgICB2b2lkIGRpZEZhaWxPbk1haW5UaHJlYWQoV2ViRmlsZUVycm9yLCBjb25zdCBTdHJp
bmcmIG1vZGUpOwogICAgIHZvaWQgZGlkT3BlbkZpbGVTeXN0ZW1Pbk1haW5UaHJlYWQoY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBXZWJDb3JlOjpLVVJMJiByb290VVJMLCBjb25zdCBTdHJpbmcm
IG1vZGUpOwogICAgIHZvaWQgZGlkU3VjY2VlZE9uTWFpblRocmVhZChjb25zdCBTdHJpbmcmIG1v
ZGUpOwogICAgIHZvaWQgZGlkUmVhZE1ldGFkYXRhT25NYWluVGhyZWFkKGNvbnN0IFdlYkZpbGVJ
bmZvJiwgY29uc3QgU3RyaW5nJiBtb2RlKTsKKyAgICB2b2lkIGRpZENyZWF0ZVNuYXBzaG90Rmls
ZU9uTWFpblRocmVhZChjb25zdCBXZWJGaWxlSW5mbyYsIGNvbnN0IFN0cmluZyYgbW9kZSwgUGFz
c1JlZlB0cjxXZWJDb3JlOjpCbG9iRGF0YUhhbmRsZT4gc25hcHNob3RCbG9iKTsKICAgICB2b2lk
IGRpZFJlYWREaXJlY3RvcnlPbk1haW5UaHJlYWQoY29uc3QgV2ViVmVjdG9yPFdlYkZpbGVTeXN0
ZW1FbnRyeT4mLCBib29sIGhhc01vcmUsIGNvbnN0IFN0cmluZyYgbW9kZSk7CiAKIHByaXZhdGU6
Ci0gICAgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZShXZWJDb3JlOjpXb3JrZXJMb2Fk
ZXJQcm94eSosIFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJGaWxlU3lzdGVt
Q2FsbGJhY2tzKik7CisgICAgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZShXZWJDb3Jl
OjpXb3JrZXJMb2FkZXJQcm94eSosIFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBX
ZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbCopOwogCiAgICAgLy8gTWV0aG9kcyB0aGF0IGFyZSB0
byBiZSBjYWxsZWQgb24gdGhlIG1haW4gdGhyZWFkLgogICAgIHN0YXRpYyB2b2lkIG9wZW5GaWxl
U3lzdGVtT25NYWluVGhyZWFkKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJD
b21tb25Xb3JrZXJDbGllbnQqLCBXZWJGaWxlU3lzdGVtOjpUeXBlLCBsb25nIGxvbmcgc2l6ZSwg
Ym9vbCBjcmVhdGUsIFBhc3NSZWZQdHI8V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZT4s
IGNvbnN0IFN0cmluZyYgbW9kZSk7CkBAIC0xMTgsNyArMTIwLDcgQEAgcHJpdmF0ZToKICAgICBz
dGF0aWMgdm9pZCBmaWxlRXhpc3RzT25NYWluVGhyZWFkKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBXZWJGaWxlU3lzdGVtKiwgY29uc3QgV2ViQ29yZTo6S1VSTCYgcGF0aCwgUGFz
c1JlZlB0cjxXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlPiwgY29uc3QgU3RyaW5nJiBt
b2RlKTsKICAgICBzdGF0aWMgdm9pZCBkaXJlY3RvcnlFeGlzdHNPbk1haW5UaHJlYWQoV2ViQ29y
ZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYkZpbGVTeXN0ZW0qLCBjb25zdCBXZWJDb3Jl
OjpLVVJMJiBwYXRoLCBQYXNzUmVmUHRyPFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U+
LCBjb25zdCBTdHJpbmcmIG1vZGUpOwogICAgIHN0YXRpYyB2b2lkIHJlYWREaXJlY3RvcnlPbk1h
aW5UaHJlYWQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYkZpbGVTeXN0ZW0q
LCBjb25zdCBXZWJDb3JlOjpLVVJMJiBwYXRoLCBQYXNzUmVmUHRyPFdvcmtlckZpbGVTeXN0ZW1D
YWxsYmFja3NCcmlkZ2U+LCBjb25zdCBTdHJpbmcmIG1vZGUpOwotICAgIHN0YXRpYyB2b2lkIGNy
ZWF0ZVNuYXBzaG90RmlsZU9uTWFpblRocmVhZChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgV2ViRmlsZVN5c3RlbSosIGNvbnN0IFdlYkNvcmU6OktVUkwmIGludGVybmFsQmxvYlVS
TCwgY29uc3QgV2ViQ29yZTo6S1VSTCYgcGF0aCwgUGFzc1JlZlB0cjxXb3JrZXJGaWxlU3lzdGVt
Q2FsbGJhY2tzQnJpZGdlPiwgY29uc3QgU3RyaW5nJiBtb2RlKTsKKyAgICBzdGF0aWMgdm9pZCBj
cmVhdGVTbmFwc2hvdEZpbGVPbk1haW5UaHJlYWQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFdlYkZpbGVTeXN0ZW0qLCBjb25zdCBXZWJDb3JlOjpLVVJMJiBwYXRoLCBQYXNzUmVm
UHRyPFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U+LCBjb25zdCBTdHJpbmcmIG1vZGUp
OwogCiAgICAgZnJpZW5kIGNsYXNzIE1haW5UaHJlYWRGaWxlU3lzdGVtQ2FsbGJhY2tzOwogCkBA
IC0xMjcsNiArMTI5LDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCBkaWRPcGVuRmlsZVN5
c3RlbU9uV29ya2VyVGhyZWFkKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNz
UmVmUHRyPFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U+LCBjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IFdlYkNvcmU6OktVUkwmIHJvb3RQYXRoKTsKICAgICBzdGF0aWMgdm9pZCBkaWRT
dWNjZWVkT25Xb3JrZXJUaHJlYWQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBh
c3NSZWZQdHI8V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZT4pOwogICAgIHN0YXRpYyB2
b2lkIGRpZFJlYWRNZXRhZGF0YU9uV29ya2VyVGhyZWFkKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBQYXNzUmVmUHRyPFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U+LCBj
b25zdCBXZWJGaWxlSW5mbyYpOworICAgIHN0YXRpYyB2b2lkIGRpZENyZWF0ZVNuYXBzaG90Rmls
ZU9uV29ya2VyVGhyZWFkKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVm
UHRyPFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U+LCBjb25zdCBXZWJGaWxlSW5mbyYs
IFBhc3NSZWZQdHI8V2ViQ29yZTo6QmxvYkRhdGFIYW5kbGU+IHNuYXBzaG90QmxvYik7CiAgICAg
c3RhdGljIHZvaWQgZGlkUmVhZERpcmVjdG9yeU9uV29ya2VyVGhyZWFkKFdlYkNvcmU6OlNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NC
cmlkZ2U+LCBjb25zdCBXZWJWZWN0b3I8V2ViRmlsZVN5c3RlbUVudHJ5PiYsIGJvb2wgaGFzTW9y
ZSk7CiAKICAgICBzdGF0aWMgdm9pZCBydW5UYXNrT25NYWluVGhyZWFkKFdlYkNvcmU6OlNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NC
cmlkZ2U+LCBQYXNzT3duUHRyPFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+
KTsKQEAgLTE0Niw3ICsxNDksNyBAQCBwcml2YXRlOgogICAgIFdvcmtlckZpbGVTeXN0ZW1Db250
ZXh0T2JzZXJ2ZXIqIG1fd29ya2VyQ29udGV4dE9ic2VydmVyOwogCiAgICAgLy8gVGhpcyBpcyBz
ZWxmLWRlc3RydWN0ZWQgYW5kIG11c3QgYmUgZmlyZWQgb24gdGhlIHdvcmtlciB0aHJlYWQuCi0g
ICAgV2ViRmlsZVN5c3RlbUNhbGxiYWNrcyogbV9jYWxsYmFja3NPbldvcmtlclRocmVhZDsKKyAg
ICBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbCogbV9jYWxsYmFja3NPbldvcmtlclRocmVhZDsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>
<flag name="commit-queue"
          id="214408"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>193016</attachid>
            <date>2013-03-13 16:04:10 -0700</date>
            <delta_ts>2013-03-13 17:03:43 -0700</delta_ts>
            <desc>impl of new api</desc>
            <filename>impl5.txt</filename>
            <type>text/plain</type>
            <size>32512</size>
            <attacher name="Michael Nordman">michaeln</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0NTQ2NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBACisyMDEzLTAzLTEzICBNaWNoYWVs
IE5vcmRtYW4gIDxtaWNoYWVsbkBnb29nbGUuY29tPgorCisgICAgICAgIEZpbGVTeXN0ZW0gbW9k
czogQ2hhbmdlcyB0byBzbmFwc2hvdCBmaWxlIGNyZWF0aW9uIHRvIHJlZHVjZSBkZXBlbmRlbmNp
ZXMgb24gYmxvYiBVUkxzLgorICAgICAgICBBZGRpbmcgYSBuZXcgbWluaW1hbCBCbG9iRGF0YUhh
bmRsZSBjbGFzcyB3aGljaCB3aWxsIGJlIHJlaW1wbGVtZW50ZWQvYnVpbHQgdXBvbiBpbiBsYXRl
ciBDTHMuIEluIHRoaXMKKyAgICAgICAgcGF0Y2gsIGl0J3MganVzdCBlbm91Z2ggdG8gcmVmYWN0
b3IgdGhlIEZpbGVTeXN0ZW0gY29kZSB0byBub3QgZnVuY3Rpb24gaW4gdGVybXMgb2YgYmxvYlVS
THMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDg4
NTEKKworICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgorCisgICAgICAgIE5vIG5ldyB0
ZXN0cy4gVGhpcyBpcyBzdHJpY3RseSBhIHJlZmFjdG9yaW5nIG9mIHRoZSBleGlzdGluZyBjb2Rl
LgorCisgICAgICAgICogTW9kdWxlcy9maWxlc3lzdGVtL0RPTUZpbGVTeXN0ZW0uY3BwOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpET01GaWxlU3lzdGVtOjpjcmVhdGVG
aWxlKToKKyAgICAgICAgKiBNb2R1bGVzL2ZpbGVzeXN0ZW0vRE9NRmlsZVN5c3RlbVN5bmMuY3Bw
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcGxhdGZvcm0vQXN5bmNGaWxlU3lzdGVt
Q2FsbGJhY2tzLmg6CisgICAgICAgIChBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3MpOgorICAgICAg
ICAoV2ViQ29yZTo6QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzOjpkaWRDcmVhdGVTbmFwc2hvdEZp
bGUpOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9Bc3luY0ZpbGVTeXN0ZW1HdGsuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6QXN5bmNGaWxlU3lzdGVtR3RrOjpjcmVhdGVTbmFwc2hvdEZpbGVBbmRS
ZWFkTWV0YWRhdGEpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0
d29yay9CbG9iRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OkJsb2JEYXRhSGFuZGxlOjpCbG9iRGF0YUhhbmRsZSk6CisgICAgICAgIChXZWJDb3JlOjpCbG9i
RGF0YUhhbmRsZTo6fkJsb2JEYXRhSGFuZGxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3Jr
L0Jsb2JEYXRhLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEJsb2JEYXRhSGFuZGxl
KToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2JEYXRhSGFuZGxlOjpjcmVhdGUpOgorCiAyMDEzLTAz
LTExICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgTWFrZSBCYWNr
Z3JvdW5kSFRNTFBhcnNlciB3b3JrIHdpdGggZG9jLndyaXRlcyB0aGF0IGVudGVyIG9yIGxlYXZl
IGZvcmVpZ24gY29udGVudApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9maWxlc3lzdGVt
L0RPTUZpbGVTeXN0ZW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
ZmlsZXN5c3RlbS9ET01GaWxlU3lzdGVtLmNwcAkocmV2aXNpb24gMTQ1NDY0KQorKysgU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9maWxlc3lzdGVtL0RPTUZpbGVTeXN0ZW0uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDgsMTkgKzE0OCwyNCBAQCB2b2lkIERPTUZpbGVTeXN0ZW06OmNyZWF0ZVdyaXRl
cihjb25zdCBGCiAKIG5hbWVzcGFjZSB7CiAKLWNsYXNzIEdldE1ldGFkYXRhQ2FsbGJhY2sgOiBw
dWJsaWMgRmlsZVN5c3RlbUNhbGxiYWNrc0Jhc2UgeworY2xhc3MgU25hcHNob3RGaWxlQ2FsbGJh
Y2sgOiBwdWJsaWMgRmlsZVN5c3RlbUNhbGxiYWNrc0Jhc2UgewogcHVibGljOgotICAgIHN0YXRp
YyBQYXNzT3duUHRyPEdldE1ldGFkYXRhQ2FsbGJhY2s+IGNyZWF0ZShQYXNzUmVmUHRyPERPTUZp
bGVTeXN0ZW0+IGZpbGVzeXN0ZW0sIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgS1VSTCYgdXJs
LCBQYXNzUmVmUHRyPEZpbGVDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPEVy
cm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2spCisgICAgc3RhdGljIFBhc3NPd25QdHI8U25hcHNo
b3RGaWxlQ2FsbGJhY2s+IGNyZWF0ZShQYXNzUmVmUHRyPERPTUZpbGVTeXN0ZW0+IGZpbGVzeXN0
ZW0sIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgS1VSTCYgdXJsLCBQYXNzUmVmUHRyPEZpbGVD
YWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+IGVycm9y
Q2FsbGJhY2spCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEdldE1ldGFkYXRh
Q2FsbGJhY2soZmlsZXN5c3RlbSwgbmFtZSwgdXJsLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2Fs
bGJhY2spKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTbmFwc2hvdEZpbGVDYWxsYmFj
ayhmaWxlc3lzdGVtLCBuYW1lLCB1cmwsIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaykp
OwogICAgIH0KIAotICAgIHZpcnR1YWwgdm9pZCBkaWRSZWFkTWV0YWRhdGEoY29uc3QgRmlsZU1l
dGFkYXRhJiBtZXRhZGF0YSkKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ3JlYXRlU25hcHNob3RGaWxl
KGNvbnN0IEZpbGVNZXRhZGF0YSYgbWV0YWRhdGEsIFBhc3NSZWZQdHI8QmxvYkRhdGFIYW5kbGU+
IHNuYXBzaG90KQogICAgIHsKICAgICAgICAgQVNTRVJUKCFtZXRhZGF0YS5wbGF0Zm9ybVBhdGgu
aXNFbXB0eSgpKTsKICAgICAgICAgaWYgKCFtX3N1Y2Nlc3NDYWxsYmFjaykKICAgICAgICAgICAg
IHJldHVybjsKIAorICAgICAgICAvLyBXZSBjYW4ndCBkaXJlY3RseSB1c2UgdGhlIHNuYXBzaG90
IGJsb2IgZGF0YSBoYW5kbGUgYmVjYXVzZSB0aGUgY29udGVudCB0eXBlIG9uIGl0IGhhc24ndCBi
ZWVuIHNldC4KKyAgICAgICAgLy8gVGhlIHxzbmFwc2hvdHwgcGFyYW0gaXMgaGVyZSB0byBwcm92
aWRlIGEgYSBjaGFpbiBvZiBjdXN0b2R5IHRocnUgdGhyZWFkIGJyaWRnaW5nIHRoYXQgaXMgaGVs
ZCBvbnRvIHVudGlsCisgICAgICAgIC8vICphZnRlciogd2UndmUgY29pbmVkIGEgRmlsZSB3aXRo
IGEgbmV3IGhhbmRsZSB0aGF0IGhhcyB0aGUgY29ycmVjdCB0eXBlIHNldCBvbiBpdC4gVGhpcyBh
bGxvd3MgdGhlCisgICAgICAgIC8vIGJsb2Igc3RvcmFnZSBzeXN0ZW0gdG8gdHJhY2sgd2hlbiBh
IHRlbXAgZmlsZSBjYW4gYW5kIGNhbid0IGJlIHNhZmVseSBkZWxldGVkLgorCiAgICAgICAgIC8v
IEZvciByZWd1bGFyIGZpbGVzeXN0ZW0gdHlwZXMgKHRlbXBvcmFyeSBvciBwZXJzaXN0ZW50KSwg
d2Ugc2hvdWxkIG5vdCBjYWNoZSBmaWxlIG1ldGFkYXRhIGFzIGl0IGNvdWxkIGNoYW5nZSBGaWxl
IHNlbWFudGljcy4KICAgICAgICAgLy8gRm9yIG90aGVyIGZpbGVzeXN0ZW0gdHlwZXMgKHdoaWNo
IGNvdWxkIGJlIHBsYXRmb3JtLXNwZWNpZmljIG9uZXMpLCB0aGVyZSdzIGEgY2hhbmNlIHRoYXQg
dGhlIGZpbGVzIGFyZSBvbiByZW1vdGUgZmlsZXN5c3RlbS4gSWYgdGhlIHBvcnQgaGFzIHJldHVy
bmVkIG1ldGFkYXRhIGp1c3QgcGFzcyBpdCB0byBGaWxlIGNvbnN0cnVjdG9yIChzbyB3ZSBtYXkg
Y2FjaGUgdGhlIG1ldGFkYXRhKS4KICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCB1c2UgdGhl
IHNuYXBzaG90IG1ldGFkYXRhIGZvciBhbGwgZmlsZXMuCkBAIC0xNzksNyArMTg0LDcgQEAgcHVi
bGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBHZXRNZXRhZGF0YUNhbGxiYWNrKFBhc3NSZWZQ
dHI8RE9NRmlsZVN5c3RlbT4gZmlsZXN5c3RlbSwgY29uc3QgU3RyaW5nJiBuYW1lLCAgY29uc3Qg
S1VSTCYgdXJsLCBQYXNzUmVmUHRyPEZpbGVDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNz
UmVmUHRyPEVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2spCisgICAgU25hcHNob3RGaWxlQ2Fs
bGJhY2soUGFzc1JlZlB0cjxET01GaWxlU3lzdGVtPiBmaWxlc3lzdGVtLCBjb25zdCBTdHJpbmcm
IG5hbWUsICBjb25zdCBLVVJMJiB1cmwsIFBhc3NSZWZQdHI8RmlsZUNhbGxiYWNrPiBzdWNjZXNz
Q2FsbGJhY2ssIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaykKICAgICAg
ICAgOiBGaWxlU3lzdGVtQ2FsbGJhY2tzQmFzZShlcnJvckNhbGxiYWNrKQogICAgICAgICAsIG1f
ZmlsZXN5c3RlbShmaWxlc3lzdGVtKQogICAgICAgICAsIG1fbmFtZShuYW1lKQpAQCAtMTk5LDcg
KzIwNCw3IEBAIHByaXZhdGU6CiB2b2lkIERPTUZpbGVTeXN0ZW06OmNyZWF0ZUZpbGUoY29uc3Qg
RmlsZUVudHJ5KiBmaWxlRW50cnksIFBhc3NSZWZQdHI8RmlsZUNhbGxiYWNrPiBzdWNjZXNzQ2Fs
bGJhY2ssIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaykKIHsKICAgICBL
VVJMIGZpbGVTeXN0ZW1VUkwgPSBjcmVhdGVGaWxlU3lzdGVtVVJMKGZpbGVFbnRyeSk7Ci0gICAg
bV9hc3luY0ZpbGVTeXN0ZW0tPmNyZWF0ZVNuYXBzaG90RmlsZUFuZFJlYWRNZXRhZGF0YShmaWxl
U3lzdGVtVVJMLCBHZXRNZXRhZGF0YUNhbGxiYWNrOjpjcmVhdGUodGhpcywgZmlsZUVudHJ5LT5u
YW1lKCksIGZpbGVTeXN0ZW1VUkwsIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaykpOwor
ICAgIG1fYXN5bmNGaWxlU3lzdGVtLT5jcmVhdGVTbmFwc2hvdEZpbGVBbmRSZWFkTWV0YWRhdGEo
ZmlsZVN5c3RlbVVSTCwgU25hcHNob3RGaWxlQ2FsbGJhY2s6OmNyZWF0ZSh0aGlzLCBmaWxlRW50
cnktPm5hbWUoKSwgZmlsZVN5c3RlbVVSTCwgc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNr
KSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvZmlsZXN5c3RlbS9ET01GaWxlU3lzdGVtU3luYy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9maWxlc3lzdGVtL0RPTUZpbGVTeXN0ZW1TeW5jLmNwcAkocmV2
aXNpb24gMTQ1NDY0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9maWxlc3lzdGVtL0RPTUZp
bGVTeXN0ZW1TeW5jLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDEwICsxMTMsMTYgQEAgcHVi
bGljOgogICAgIHsKICAgICB9CiAKLSAgICB2b2lkIGRpZFJlYWRNZXRhZGF0YShjb25zdCBGaWxl
TWV0YWRhdGEmIG1ldGFkYXRhKQorICAgIHZpcnR1YWwgdm9pZCBkaWRDcmVhdGVTbmFwc2hvdEZp
bGUoY29uc3QgRmlsZU1ldGFkYXRhJiBtZXRhZGF0YSwgUGFzc1JlZlB0cjxCbG9iRGF0YUhhbmRs
ZT4gc25hcHNob3QpCiAgICAgeworICAgICAgICAvLyBXZSBjYW4ndCBkaXJlY3RseSB1c2UgdGhl
IHNuYXBzaG90IGJsb2IgZGF0YSBoYW5kbGUgYmVjYXVzZSB0aGUgY29udGVudCB0eXBlIG9uIGl0
IGhhc24ndCBiZWVuIHNldC4KKyAgICAgICAgLy8gVGhlIHxzbmFwc2hvdHwgcGFyYW0gaXMgaGVy
ZSB0byBwcm92aWRlIGEgYSBjaGFpbiBvZiBjdXN0b2R5IHRocnUgdGhyZWFkIGJyaWRnaW5nIHRo
YXQgaXMgaGVsZCBvbnRvIHVudGlsCisgICAgICAgIC8vICphZnRlciogd2UndmUgY29pbmVkIGEg
RmlsZSB3aXRoIGEgbmV3IGhhbmRsZSB0aGF0IGhhcyB0aGUgY29ycmVjdCB0eXBlIHNldCBvbiBp
dC4gVGhpcyBhbGxvd3MgdGhlCisgICAgICAgIC8vIGJsb2Igc3RvcmFnZSBzeXN0ZW0gdG8gdHJh
Y2sgd2hlbiBhIHRlbXAgZmlsZSBjYW4gYW5kIGNhbid0IGJlIHNhZmVseSBkZWxldGVkLgorCiAg
ICAgICAgIC8vIEZvciByZWd1bGFyIGZpbGVzeXN0ZW0gdHlwZXMgKHRlbXBvcmFyeSBvciBwZXJz
aXN0ZW50KSwgd2Ugc2hvdWxkIG5vdCBjYWNoZSBmaWxlIG1ldGFkYXRhIGFzIGl0IGNvdWxkIGNo
YW5nZSBGaWxlIHNlbWFudGljcy4KLSAgICAgICAgLy8gRm9yIG90aGVyIGZpbGVzeXN0ZW0gdHlw
ZXMgKHdoaWNoIGNvdWxkIGJlIHBsYXRmb3JtLXNwZWNpZmljIG9uZXMpLCB0aGVyZSdzIGEgY2hh
bmNlIHRoYXQgdGhlIGZpbGVzIGFyZSBvbiByZW1vdGUgZmlsZXN5c3RlbS4gSWYgdGhlIHBvcnQg
aGFzIHJldHVybmVkIG1ldGFkYXRhIGp1c3QgcGFzcyBpdCB0byBGaWxlIGNvbnN0cnVjdG9yIChz
byB3ZSBtYXkgY2FjaGUgdGhlIG1ldGFkYXRhKS4KKyAgICAgICAgLy8gRm9yIG90aGVyIGZpbGVz
eXN0ZW0gdHlwZXMgKHdoaWNoIGNvdWxkIGJlIHBsYXRmb3JtLXNwZWNpZmljIG9uZXMpLCB0aGVy
ZSdzIGEgY2hhbmNlIHRoYXQgdGhlIGZpbGVzIGFyZSBvbiByZW1vdGUgZmlsZXN5c3RlbS4KKyAg
ICAgICAgLy8gSWYgdGhlIHBvcnQgaGFzIHJldHVybmVkIG1ldGFkYXRhIGp1c3QgcGFzcyBpdCB0
byBGaWxlIGNvbnN0cnVjdG9yIChzbyB3ZSBtYXkgY2FjaGUgdGhlIG1ldGFkYXRhKS4KICAgICAg
ICAgLy8gRklYTUU6IFdlIHNob3VsZCB1c2UgdGhlIHNuYXBzaG90IG1ldGFkYXRhIGZvciBhbGwg
ZmlsZXMuCiAgICAgICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9CdWdzL1B1YmxpYy9zaG93X2J1
Zy5jZ2k/aWQ9MTc3NDYKICAgICAgICAgaWYgKG1fdHlwZSA9PSBGaWxlU3lzdGVtVHlwZVRlbXBv
cmFyeSB8fCBtX3R5cGUgPT0gRmlsZVN5c3RlbVR5cGVQZXJzaXN0ZW50KSB7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9Bc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3MuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Bc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3MuaAko
cmV2aXNpb24gMTQ1NDY0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQXN5bmNGaWxlU3lz
dGVtQ2FsbGJhY2tzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKIAogI2luY2x1
ZGUgIkFzeW5jRmlsZVN5c3RlbS5oIgogI2luY2x1ZGUgIkFzeW5jRmlsZVdyaXRlci5oIgorI2lu
Y2x1ZGUgIkJsb2JEYXRhLmgiCiAjaW5jbHVkZSAiRmlsZU1ldGFkYXRhLmgiCiAjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTU0LDYgKzU1LDkgQEAgcHVibGljOgogICAgIC8v
IENhbGxlZCB3aGVuIGEgZmlsZSBtZXRhZGF0YSBpcyByZWFkIHN1Y2Nlc3NmdWxseS4KICAgICB2
aXJ0dWFsIHZvaWQgZGlkUmVhZE1ldGFkYXRhKGNvbnN0IEZpbGVNZXRhZGF0YSYpIHsgQVNTRVJU
X05PVF9SRUFDSEVEKCk7IH0KIAorICAgIC8vIENhbGxlZCB3aGVuIGEgc25hcHNob3QgZmlsZSBp
cyBjcmVhdGVkIHN1Y2Nlc3NmdWxseS4KKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ3JlYXRlU25hcHNo
b3RGaWxlKGNvbnN0IEZpbGVNZXRhZGF0YSYsIFBhc3NSZWZQdHI8QmxvYkRhdGFIYW5kbGU+IHNu
YXBzaG90KSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisKICAgICAvLyBDYWxsZWQgd2hlbiBh
IGRpcmVjdG9yeSBlbnRyeSBpcyByZWFkLgogICAgIHZpcnR1YWwgdm9pZCBkaWRSZWFkRGlyZWN0
b3J5RW50cnkoY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIGlzRGlyZWN0b3J5KSB7IEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Bc3lu
Y0ZpbGVTeXN0ZW1HdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9Bc3luY0ZpbGVTeXN0ZW1HdGsuY3BwCShyZXZpc2lvbiAxNDU0NjQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvQXN5bmNGaWxlU3lzdGVtR3RrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTE4LDYgKzExOCwxMSBAQCB2b2lkIEFzeW5jRmlsZVN5c3RlbUd0azo6Y3JlYXRlV3Jp
dGVyKEFzCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAordm9pZCBBc3luY0ZpbGVTeXN0ZW1H
dGs6OmNyZWF0ZVNuYXBzaG90RmlsZUFuZFJlYWRNZXRhZGF0YShjb25zdCBLVVJMJiwgUGFzc093
blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JEYXRhLmNwcAkocmV2aXNpb24gMTQ1NDY0KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iRGF0YS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMwLDYgKzMwLDggQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IkJsb2JEYXRhLmgiCisjaW5jbHVkZSAiQmxvYlVSTC5oIgorI2luY2x1ZGUgIlRocmVhZGFibGVC
bG9iUmVnaXN0cnkuaCIKIAogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYv
UGFzc093blB0ci5oPgpAQCAtMTAxLDQgKzEwMywxNyBAQCB2b2lkIEJsb2JEYXRhOjpzd2FwSXRl
bXMoQmxvYkRhdGFJdGVtTGlzCiAgICAgbV9pdGVtcy5zd2FwKGl0ZW1zKTsKIH0KIAorCitCbG9i
RGF0YUhhbmRsZTo6QmxvYkRhdGFIYW5kbGUoUGFzc093blB0cjxCbG9iRGF0YT4gZGF0YSwgbG9u
ZyBsb25nIHNpemUpCit7CisgICAgVU5VU0VEX1BBUkFNKHNpemUpOworICAgIG1faW50ZXJuYWxV
UkwgPSBCbG9iVVJMOjpjcmVhdGVJbnRlcm5hbFVSTCgpOworICAgIFRocmVhZGFibGVCbG9iUmVn
aXN0cnk6OnJlZ2lzdGVyQmxvYlVSTChtX2ludGVybmFsVVJMLCBkYXRhKTsKK30KKworQmxvYkRh
dGFIYW5kbGU6On5CbG9iRGF0YUhhbmRsZSgpCit7CisgICAgVGhyZWFkYWJsZUJsb2JSZWdpc3Ry
eTo6dW5yZWdpc3RlckJsb2JVUkwobV9pbnRlcm5hbFVSTCk7Cit9CisKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYkRhdGEu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JEYXRh
LmgJKHJldmlzaW9uIDE0NTQ2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
QmxvYkRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMjAyLDYgKzIwMiwyMyBAQCBwcml2YXRlOgog
ICAgIEJsb2JEYXRhSXRlbUxpc3QgbV9pdGVtczsKIH07CiAKKy8vIEZJWE1FOiBUaGlzIGNsYXNz
IGlzIG1vc3RseSBwbGFjZSBob2xkZXIgdW50aWwgSSBnZXQgZmFydGhlciBhbG9uZyB3aXRoCisv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA4NzMzIGFuZCBtb3Jl
IHNwZWNpZmljYWxseSB3aXRoIGxhbmRpbmcKKy8vIGh0dHBzOi8vY29kZXJldmlldy5jaHJvbWl1
bS5vcmcvMTExOTIwMTcvLgorY2xhc3MgQmxvYkRhdGFIYW5kbGUgOiBwdWJsaWMgVGhyZWFkU2Fm
ZVJlZkNvdW50ZWQ8QmxvYkRhdGFIYW5kbGU+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxCbG9iRGF0YUhhbmRsZT4gY3JlYXRlKFBhc3NPd25QdHI8QmxvYkRhdGE+IGRhdGEsIGxv
bmcgbG9uZyBzaXplKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBCbG9iRGF0
YUhhbmRsZShkYXRhLCBzaXplKSk7CisgICAgfQorCisgICAgfkJsb2JEYXRhSGFuZGxlKCk7CisK
K3ByaXZhdGU6CisgICAgQmxvYkRhdGFIYW5kbGUoUGFzc093blB0cjxCbG9iRGF0YT4sIGxvbmcg
bG9uZyBzaXplKTsKKyAgICBLVVJMIG1faW50ZXJuYWxVUkw7Cit9OworCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBCbG9iRGF0YV9oCkluZGV4OiBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZwkocmV2aXNpb24gMTQ1NDY0KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0NCBAQAorMjAxMy0wMy0xMyAgTWljaGFl
bCBOb3JkbWFuICA8bWljaGFlbG5AZ29vZ2xlLmNvbT4KKworICAgICAgICBbQ2hyb21pdW1dIEZp
bGVTeXN0ZW0gbW9kczogQ2hhbmdlcyB0byBzbmFwc2hvdCBmaWxlIGNyZWF0aW9uIHRvIHJlZHVj
ZSBkZXBlbmRlbmNpZXMgb24gYmxvYnMuCisgICAgICAgIE5vIGxvbmdlciBzZW5kIGEgfGJsb2JV
Ukx8IHRvIHRoZSBicm93c2VyIHByb2Nlc3MsIG5vIGxvbmdlciBleHBlY3QgdGhlIGJyb3dzZXIg
cHJvY2VzcworICAgICAgICB0byBoYXZlIHJlZ2lzdGVyZWQgYSBibG9iIHdpdGggdGhhdCB1cmwu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDg4NTEK
KworICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgorCisgICAgICAgICogc3JjL0FzeW5j
RmlsZVN5c3RlbUNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsZVdyaXRlckhlbHBlckNhbGxiYWNrczo6ZGlkQ3JlYXRlU25hcHNob3RGaWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OkFzeW5jRmlsZVN5c3RlbUNocm9taXVtOjpjcmVhdGVTbmFwc2hv
dEZpbGVBbmRSZWFkTWV0YWRhdGEpOgorICAgICAgICAqIHNyYy9Bc3luY0ZpbGVTeXN0ZW1DaHJv
bWl1bS5oOgorICAgICAgICAoQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0pOgorICAgICAgICAqIHNy
Yy9Mb2NhbEZpbGVTeXN0ZW1DaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKiBzcmMvV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbDo6ZGlkQ3JlYXRlU25hcHNob3RGaWxlKToKKyAg
ICAgICAgKFdlYktpdCk6CisgICAgICAgICogc3JjL1dlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBs
Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkZpbGVTeXN0ZW1DYWxsYmFja3NJ
bXBsKToKKyAgICAgICAgKiBzcmMvV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6V29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW06OmNyZWF0ZVNu
YXBzaG90RmlsZUFuZFJlYWRNZXRhZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJBc3lu
Y0ZpbGVTeXN0ZW1DaHJvbWl1bTo6Y3JlYXRlV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRn
ZSk6CisgICAgICAgICogc3JjL1dvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpNYWluVGhyZWFkRmlsZVN5c3RlbUNhbGxiYWNrczo6ZGlkQ3JlYXRl
U25hcHNob3RGaWxlKToKKyAgICAgICAgKE1haW5UaHJlYWRGaWxlU3lzdGVtQ2FsbGJhY2tzKToK
KyAgICAgICAgKFdlYktpdDo6V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6cG9zdENy
ZWF0ZVNuYXBzaG90RmlsZVRvTWFpblRocmVhZCk6CisgICAgICAgIChXZWJLaXQ6OldvcmtlckZp
bGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OmNyZWF0ZVNuYXBzaG90RmlsZU9uTWFpblRocmVhZCk6
CisgICAgICAgIChXZWJLaXQ6OldvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OmRpZENy
ZWF0ZVNuYXBzaG90RmlsZU9uTWFpblRocmVhZCk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAg
ICAoV2ViS2l0OjpXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpXb3JrZXJGaWxlU3lz
dGVtQ2FsbGJhY2tzQnJpZGdlKToKKyAgICAgICAgKFdlYktpdDo6V29ya2VyRmlsZVN5c3RlbUNh
bGxiYWNrc0JyaWRnZTo6ZGlkQ3JlYXRlU25hcHNob3RGaWxlT25Xb3JrZXJUaHJlYWQpOgorICAg
ICAgICAqIHNyYy9Xb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlLmg6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OldvcmtlckZpbGVT
eXN0ZW1DYWxsYmFja3NCcmlkZ2U6OmNyZWF0ZSk6CisgICAgICAgIChXb3JrZXJGaWxlU3lzdGVt
Q2FsbGJhY2tzQnJpZGdlKToKKwogMjAxMy0wMy0xMSAgQWJoaXNoZWsgQXJ5YSAgPGluZmVybm9A
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJlcGxhY2Ugc3RhdGljX2Nhc3RzIHdpdGggdG8qIGZ1
bmN0aW9ucy4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0FzeW5jRmlsZVN5c3Rl
bUNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9B
c3luY0ZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAJKHJldmlzaW9uIDE0NTQ2NCkKKysrIFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL0FzeW5jRmlsZVN5c3RlbUNocm9taXVtLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDgsNDYgKzQ4LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1uYW1lc3Bh
Y2UgewotCi0vLyBTcGVjaWFsaXplZCBjYWxsYmFjayBjbGFzcyBmb3IgY3JlYXRlU25hcHNob3RG
aWxlQW5kUmVhZE1ldGFkYXRhLgotY2xhc3MgU25hcHNob3RGaWxlQ2FsbGJhY2tzIDogcHVibGlj
IEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcyB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25Q
dHI8U25hcHNob3RGaWxlQ2FsbGJhY2tzPiBjcmVhdGUoY29uc3QgS1VSTCYgaW50ZXJuYWxCbG9i
VVJMLCBQYXNzT3duUHRyPFdlYkNvcmU6OkFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4gY2FsbGJh
Y2tzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTbmFwc2hvdEZpbGVDYWxs
YmFja3MoaW50ZXJuYWxCbG9iVVJMLCBjYWxsYmFja3MpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgZGlkUmVhZE1ldGFkYXRhKGNvbnN0IEZpbGVNZXRhZGF0YSYgbWV0YWRhdGEpCi0gICAg
ewotICAgICAgICBBU1NFUlQobV9jYWxsYmFja3MpOwotCi0gICAgICAgIC8vIFRoaXMgd2lsbCBj
cmVhdGUgYSBuZXcgRmlsZSBvYmplY3QgdXNpbmcgdGhlIG1ldGFkYXRhLgotICAgICAgICBtX2Nh
bGxiYWNrcy0+ZGlkUmVhZE1ldGFkYXRhKG1ldGFkYXRhKTsKLQotICAgICAgICAvLyBOb3cgdGhh
dCB3ZSd2ZSByZWdpc3RlcmVkIHRoZSBzbmFwc2hvdCBmaWxlLCB3ZSBjYW4gdW5yZWdpc3RlciBv
dXIgaW50ZXJuYWxCbG9iVVJMIHdoaWNoIGhhcyBwbGF5ZWQgYSBwbGFjZWhvbGRlciBmb3IgdGhl
IGZpbGUgZHVyaW5nIHRoZSBJUEMuCi0gICAgICAgIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnVu
cmVnaXN0ZXJCbG9iVVJMKG1faW50ZXJuYWxCbG9iVVJMKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgZGlkRmFpbChpbnQgZXJyb3IpCi0gICAgewotICAgICAgICBBU1NFUlQobV9jYWxsYmFj
a3MpOwotICAgICAgICBtX2NhbGxiYWNrcy0+ZGlkRmFpbChlcnJvcik7Ci0gICAgfQotCi1wcml2
YXRlOgotICAgIFNuYXBzaG90RmlsZUNhbGxiYWNrcyhjb25zdCBLVVJMJiBpbnRlcm5hbEJsb2JV
UkwsIFBhc3NPd25QdHI8V2ViQ29yZTo6QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPiBjYWxsYmFj
a3MpCi0gICAgICAgIDogbV9pbnRlcm5hbEJsb2JVUkwoaW50ZXJuYWxCbG9iVVJMKQotICAgICAg
ICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKLSAgICB7Ci0gICAgfQotCi0gICAgS1VSTCBtX2lu
dGVybmFsQmxvYlVSTDsKLSAgICBPd25QdHI8V2ViQ29yZTo6QXN5bmNGaWxlU3lzdGVtQ2FsbGJh
Y2tzPiBtX2NhbGxiYWNrczsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlCi0KIGJvb2wgQXN5bmNGaWxl
U3lzdGVtOjppc0F2YWlsYWJsZSgpCiB7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0xODYsNyArMTQ2
LDExIEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgICAgICBkZWxldGUgdGhpczsKICAgICB9Ci0K
KyAgICB2aXJ0dWFsIHZvaWQgZGlkQ3JlYXRlU25hcHNob3RGaWxlKGNvbnN0IFdlYktpdDo6V2Vi
RmlsZUluZm8mIGluZm8pCisgICAgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgZGVsZXRlIHRoaXM7CisgICAgfQogICAgIHZpcnR1YWwgdm9pZCBkaWRSZWFkRGlyZWN0
b3J5KGNvbnN0IFdlYktpdDo6V2ViVmVjdG9yPFdlYktpdDo6V2ViRmlsZVN5c3RlbUVudHJ5PiYg
ZW50cmllcywgYm9vbCBoYXNNb3JlKQogICAgIHsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CkBAIC0yMTksMTUgKzE4Myw3IEBAIHZvaWQgQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW06OmNy
ZWF0ZVdyaXQKIAogdm9pZCBBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bTo6Y3JlYXRlU25hcHNob3RG
aWxlQW5kUmVhZE1ldGFkYXRhKGNvbnN0IEtVUkwmIHBhdGgsIFBhc3NPd25QdHI8QXN5bmNGaWxl
U3lzdGVtQ2FsbGJhY2tzPiBjYWxsYmFja3MpCiB7Ci0gICAgS1VSTCBpbnRlcm5hbEJsb2JVUkwg
PSBCbG9iVVJMOjpjcmVhdGVJbnRlcm5hbFVSTCgpOwotCi0gICAgLy8gVGhpcyB3aWxsIGNyZWF0
ZSBhIHNuYXBzaG90IGZpbGUgYW5kIHJlZ2lzdGVyIHRoZSBmaWxlIHRvIGEgYmxvYiB1c2luZyB0
aGUgZ2l2ZW4gaW50ZXJuYWxCbG9iVVJMLgotICAgIG1fd2ViRmlsZVN5c3RlbS0+Y3JlYXRlU25h
cHNob3RGaWxlQW5kUmVhZE1ldGFkYXRhKGludGVybmFsQmxvYlVSTCwgcGF0aCwgbmV3IFdlYktp
dDo6V2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwoY3JlYXRlU25hcHNob3RGaWxlQ2FsbGJhY2so
aW50ZXJuYWxCbG9iVVJMLCBjYWxsYmFja3MpKSk7Ci19Ci0KLVBhc3NPd25QdHI8QXN5bmNGaWxl
U3lzdGVtQ2FsbGJhY2tzPiBBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bTo6Y3JlYXRlU25hcHNob3RG
aWxlQ2FsbGJhY2soY29uc3QgS1VSTCYgaW50ZXJuYWxCbG9iVVJMLCBQYXNzT3duUHRyPEFzeW5j
RmlsZVN5c3RlbUNhbGxiYWNrcz4gY2FsbGJhY2tzKSBjb25zdAotewotICAgIHJldHVybiBTbmFw
c2hvdEZpbGVDYWxsYmFja3M6OmNyZWF0ZShpbnRlcm5hbEJsb2JVUkwsIGNhbGxiYWNrcyk7Cisg
ICAgbV93ZWJGaWxlU3lzdGVtLT5jcmVhdGVTbmFwc2hvdEZpbGVBbmRSZWFkTWV0YWRhdGEocGF0
aCwgbmV3IFdlYktpdDo6V2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwoY2FsbGJhY2tzKSk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL0FzeW5jRmlsZVN5c3RlbUNocm9taXVtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uaAkocmV2aXNpb24gMTQ1NDY0
KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0u
aAkod29ya2luZyBjb3B5KQpAQCAtNjksOCArNjksNiBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAg
ICAgQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0oKTsKIAotICAgIFBhc3NPd25QdHI8QXN5bmNGaWxl
U3lzdGVtQ2FsbGJhY2tzPiBjcmVhdGVTbmFwc2hvdEZpbGVDYWxsYmFjayhjb25zdCBLVVJMJiBp
bnRlcm5hbEJsb2JVUkwsIFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPikgY29u
c3Q7Ci0KICAgICBXZWJLaXQ6OldlYkZpbGVTeXN0ZW0qIG1fd2ViRmlsZVN5c3RlbTsKIH07CiAK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0xvY2FsRmlsZVN5c3RlbUNocm9taXVt
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Mb2NhbEZpbGVT
eXN0ZW1DaHJvbWl1bS5jcHAJKHJldmlzaW9uIDE0NTQ2NCkKKysrIFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL0xvY2FsRmlsZVN5c3RlbUNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTUzLDcgKzE1Myw3IEBAIGJvb2wgYWxsb3dGaWxlU3lzdGVtRm9yV29ya2VyKFdlYkNvbW1vblcK
ICAgICByZXR1cm4gYnJpZGdlLT5yZXN1bHQoKTsKIH0KIAotdm9pZCBvcGVuRmlsZVN5c3RlbUZv
cldvcmtlcihXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1vbkNsaWVudCwgV2ViRmlsZVN5c3Rl
bTo6VHlwZSB0eXBlLCBsb25nIGxvbmcgc2l6ZSwgYm9vbCBjcmVhdGUsIFdlYkZpbGVTeXN0ZW1D
YWxsYmFja3MqIGNhbGxiYWNrcywgRmlsZVN5c3RlbVN5bmNocm9ub3VzVHlwZSBzeW5jaHJvbm91
c1R5cGUpCit2b2lkIG9wZW5GaWxlU3lzdGVtRm9yV29ya2VyKFdlYkNvbW1vbldvcmtlckNsaWVu
dCogY29tbW9uQ2xpZW50LCBXZWJGaWxlU3lzdGVtOjpUeXBlIHR5cGUsIGxvbmcgbG9uZyBzaXpl
LCBib29sIGNyZWF0ZSwgV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwqIGNhbGxiYWNrcywgRmls
ZVN5c3RlbVN5bmNocm9ub3VzVHlwZSBzeW5jaHJvbm91c1R5cGUpCiB7CiAgICAgV29ya2VyU2Ny
aXB0Q29udHJvbGxlciogY29udHJvbGxlciA9IFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OmNvbnRy
b2xsZXJGb3JDb250ZXh0KCk7CiAgICAgV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4dCA9IGNv
bnRyb2xsZXItPndvcmtlckNvbnRleHQoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbC5jcHAJKHJldmlz
aW9uIDE0NTQ2NCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZpbGVTeXN0ZW1D
YWxsYmFja3NJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYsNiArNzYsMjcgQEAgdm9pZCBX
ZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbDo6ZGlkUmVhZAogICAgIGRlbGV0ZSB0aGlzOwogfQog
Cit2b2lkIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsOjpkaWRDcmVhdGVTbmFwc2hvdEZpbGUo
Y29uc3QgV2ViRmlsZUluZm8mIHdlYkZpbGVJbmZvKQoreworICAgIC8vIEl0J3MgaW1wb3J0YW50
IHRvIGNyZWF0ZSBhIEJsb2JEYXRhSGFuZGxlIHRoYXQgcmVmZXJzIHRvIHRoZSBwbGF0Zm9ybSBm
aWxlIHBhdGggcHJpb3IKKyAgICAvLyB0byByZXR1cm4gZnJvbSB0aGlzIG1ldGhvZCBzbyB0aGUg
dW5kZXJseWluZyBmaWxlIHdpbGwgbm90IGJlIGRlbGV0ZWQuCisgICAgT3duUHRyPEJsb2JEYXRh
PiBibG9iRGF0YSA9IEJsb2JEYXRhOjpjcmVhdGUoKTsKKyAgICBibG9iRGF0YS0+YXBwZW5kRmls
ZSh3ZWJGaWxlSW5mby5wbGF0Zm9ybVBhdGgpOworICAgIFJlZlB0cjxCbG9iRGF0YUhhbmRsZT4g
c25hcHNob3RCbG9iID0gQmxvYkRhdGFIYW5kbGU6OmNyZWF0ZShibG9iRGF0YS5yZWxlYXNlKCks
IHdlYkZpbGVJbmZvLmxlbmd0aCk7CisgICAgZGlkQ3JlYXRlU25hcHNob3RGaWxlKHdlYkZpbGVJ
bmZvLCBzbmFwc2hvdEJsb2IpOworfQorCit2b2lkIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBs
OjpkaWRDcmVhdGVTbmFwc2hvdEZpbGUoY29uc3QgV2ViRmlsZUluZm8mIHdlYkZpbGVJbmZvLCBQ
YXNzUmVmUHRyPFdlYkNvcmU6OkJsb2JEYXRhSGFuZGxlPiBzbmFwc2hvdCkKK3sKKyAgICBGaWxl
TWV0YWRhdGEgZmlsZU1ldGFkYXRhOworICAgIGZpbGVNZXRhZGF0YS5tb2RpZmljYXRpb25UaW1l
ID0gd2ViRmlsZUluZm8ubW9kaWZpY2F0aW9uVGltZTsKKyAgICBmaWxlTWV0YWRhdGEubGVuZ3Ro
ID0gd2ViRmlsZUluZm8ubGVuZ3RoOworICAgIGZpbGVNZXRhZGF0YS50eXBlID0gc3RhdGljX2Nh
c3Q8RmlsZU1ldGFkYXRhOjpUeXBlPih3ZWJGaWxlSW5mby50eXBlKTsKKyAgICBmaWxlTWV0YWRh
dGEucGxhdGZvcm1QYXRoID0gd2ViRmlsZUluZm8ucGxhdGZvcm1QYXRoOworICAgIG1fY2FsbGJh
Y2tzLT5kaWRDcmVhdGVTbmFwc2hvdEZpbGUoZmlsZU1ldGFkYXRhLCBzbmFwc2hvdCk7CisgICAg
ZGVsZXRlIHRoaXM7Cit9CisKIHZvaWQgV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGw6OmRpZFJl
YWREaXJlY3RvcnkoY29uc3QgV2ViVmVjdG9yPFdlYkZpbGVTeXN0ZW1FbnRyeT4mIGVudHJpZXMs
IGJvb2wgaGFzTW9yZSkKIHsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGVudHJpZXMuc2l6
ZSgpOyArK2kpCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGaWxlU3lzdGVt
Q2FsbGJhY2tzSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsLmgJKHJldmlzaW9uIDE0NTQ2NCkKKysrIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3Mg
QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzOworY2xhc3MgQmxvYkRhdGFIYW5kbGU7CiBjbGFzcyBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0OwogfQogCkBAIC01NiwxMSArNTcsMTcgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgfldlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsKCk7CiAKICAgICB2aXJ0dWFs
IHZvaWQgZGlkU3VjY2VlZCgpOwotICAgIHZpcnR1YWwgdm9pZCBkaWRSZWFkTWV0YWRhdGEoY29u
c3QgV2ViRmlsZUluZm8mIGluZm8pOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWFkTWV0YWRhdGEo
Y29uc3QgV2ViRmlsZUluZm8mKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ3JlYXRlU25hcHNob3RG
aWxlKGNvbnN0IFdlYkZpbGVJbmZvJik7CiAgICAgdmlydHVhbCB2b2lkIGRpZFJlYWREaXJlY3Rv
cnkoY29uc3QgV2ViVmVjdG9yPFdlYkZpbGVTeXN0ZW1FbnRyeT4mIGVudHJpZXMsIGJvb2wgaGFz
TW9yZSk7CiAgICAgdmlydHVhbCB2b2lkIGRpZE9wZW5GaWxlU3lzdGVtKGNvbnN0IFdlYlN0cmlu
ZyYgbmFtZSwgY29uc3QgV2ViVVJMJiByb290VVJMKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFp
bChXZWJGaWxlRXJyb3IgZXJyb3IpOwogCisgICAgLy8gVGhpcyBpbnRlcm5hbCBvdmVybG9hZCBp
cyB1c2VkIGJ5IFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UgdG8gZGVsaXZlciBhIGJs
b2IgZGF0YSBoYW5kbGUKKyAgICAvLyBjcmVhdGVkIG9uIHRoZSBtYWluIHRocmVhZCB0byBhbiBB
c3luY0ZpbGVTeXN0ZW1DYWxsYmFjayBvbiBhIGJhY2tncm91bmQgd29ya2VyIHRocmVhZC4gVGhl
IG90aGVyCisgICAgLy8gdmlydHVhbCBtZXRob2QgaXMgaW52b2tlZCBieSB0aGUgZW1iZWRkZXIu
CisgICAgdm9pZCBkaWRDcmVhdGVTbmFwc2hvdEZpbGUoY29uc3QgV2ViRmlsZUluZm8mLCBQYXNz
UmVmUHRyPFdlYkNvcmU6OkJsb2JEYXRhSGFuZGxlPiBzbmFwc2hvdCk7CisKIHByaXZhdGU6CiAg
ICAgT3duUHRyPFdlYkNvcmU6OkFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcz4gbV9jYWxsYmFja3M7
CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckFzeW5jRmlsZVN5c3Rl
bUNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
b3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAJKHJldmlzaW9uIDE0NTQ2NCkKKysrIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVtLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTc5LDE1ICsxNzksMTIgQEAgdm9pZCBXb3JrZXJBc3luY0Zp
bGVTeXN0ZW1DaHJvbWl1bTo6Y3JlYQogCiB2b2lkIFdvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9t
aXVtOjpjcmVhdGVTbmFwc2hvdEZpbGVBbmRSZWFkTWV0YWRhdGEoY29uc3QgS1VSTCYgcGF0aCwg
UGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3M+IGNhbGxiYWNrcykKIHsKLSAgICBL
VVJMIGludGVybmFsQmxvYlVSTCA9IEJsb2JVUkw6OmNyZWF0ZUludGVybmFsVVJMKCk7Ci0KLSAg
ICBjcmVhdGVXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlKGNyZWF0ZVNuYXBzaG90Rmls
ZUNhbGxiYWNrKGludGVybmFsQmxvYlVSTCwgY2FsbGJhY2tzKSktPnBvc3RDcmVhdGVTbmFwc2hv
dEZpbGVUb01haW5UaHJlYWQobV93ZWJGaWxlU3lzdGVtLCBpbnRlcm5hbEJsb2JVUkwsIHBhdGgs
IG1fbW9kZUZvckN1cnJlbnRPcGVyYXRpb24pOworICAgIGNyZWF0ZVdvcmtlckZpbGVTeXN0ZW1D
YWxsYmFja3NCcmlkZ2UoY2FsbGJhY2tzKS0+cG9zdENyZWF0ZVNuYXBzaG90RmlsZVRvTWFpblRo
cmVhZChtX3dlYkZpbGVTeXN0ZW0sIHBhdGgsIG1fbW9kZUZvckN1cnJlbnRPcGVyYXRpb24pOwog
fQogCiBQYXNzUmVmUHRyPFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U+IFdvcmtlckFz
eW5jRmlsZVN5c3RlbUNocm9taXVtOjpjcmVhdGVXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJp
ZGdlKFBhc3NPd25QdHI8QXN5bmNGaWxlU3lzdGVtQ2FsbGJhY2tzPiBjYWxsYmFja3MpCiB7CiAg
ICAgQVNTRVJUKG1fc3luY2hyb25vdXNUeXBlID09IEFzeW5jaHJvbm91c0ZpbGVTeXN0ZW0gfHwg
IW1fYnJpZGdlRm9yQ3VycmVudE9wZXJhdGlvbik7Ci0gICAgKHZvaWQpbV9zeW5jaHJvbm91c1R5
cGU7CiAKICAgICBtX21vZGVGb3JDdXJyZW50T3BlcmF0aW9uID0gZmlsZVN5c3RlbU9wZXJhdGlv
bnNNb2RlOwogICAgIG1fbW9kZUZvckN1cnJlbnRPcGVyYXRpb24uYXBwZW5kKFN0cmluZzo6bnVt
YmVyKG1fd29ya2VyQ29udGV4dC0+dGhyZWFkKCktPnJ1bkxvb3AoKS5jcmVhdGVVbmlxdWVJZCgp
KSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJGaWxlU3lzdGVtQ2Fs
bGJhY2tzQnJpZGdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9Xb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlLmNwcAkocmV2aXNpb24gMTQ1NDY0KQor
KysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0Jy
aWRnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDE2ICszMywxNyBAQAogCiAjaWYgRU5BQkxF
KEZJTEVfU1lTVEVNKSAmJiBFTkFCTEUoV09SS0VSUykKIAorI2luY2x1ZGUgIkJsb2JEYXRhLmgi
CiAjaW5jbHVkZSAiQ3Jvc3NUaHJlYWRUYXNrLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1
ZGUgIldlYkNvbW1vbldvcmtlckNsaWVudC5oIgorI2luY2x1ZGUgIldlYkZpbGVTeXN0ZW1DYWxs
YmFja3NJbXBsLmgiCiAjaW5jbHVkZSAiV2ViV29ya2VyQmFzZS5oIgogI2luY2x1ZGUgIldvcmtl
ckNvbnRleHQuaCIKICNpbmNsdWRlICJXb3JrZXJMb2FkZXJQcm94eS5oIgogI2luY2x1ZGUgIldv
cmtlclNjcmlwdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJXb3JrZXJUaHJlYWQuaCIKICNpbmNs
dWRlIDxwdWJsaWMvV2ViRmlsZUluZm8uaD4KLSNpbmNsdWRlIDxwdWJsaWMvV2ViRmlsZVN5c3Rl
bUNhbGxiYWNrcy5oPgogI2luY2x1ZGUgPHB1YmxpYy9XZWJGaWxlU3lzdGVtRW50cnkuaD4KICNp
bmNsdWRlIDxwdWJsaWMvV2ViU3RyaW5nLmg+CiAjaW5jbHVkZSA8cHVibGljL1dlYlVSTC5oPgpA
QCAtMTI0LDYgKzEyNSwxNyBAQCBwdWJsaWM6CiAgICAgICAgIGRlbGV0ZSB0aGlzOwogICAgIH0K
IAorICAgIHZpcnR1YWwgdm9pZCBkaWRDcmVhdGVTbmFwc2hvdEZpbGUoY29uc3QgV2ViRmlsZUlu
Zm8mIGluZm8pCisgICAgeworICAgICAgICAvLyBJdCdzIGltcG9ydGFudCB0byBjcmVhdGUgYSBC
bG9iRGF0YUhhbmRsZSB0aGF0IHJlZmVycyB0byB0aGUgcGxhdGZvcm0gZmlsZSBwYXRoIHByaW9y
CisgICAgICAgIC8vIHRvIHJldHVybiBmcm9tIHRoaXMgbWV0aG9kIHNvIHRoZSB1bmRlcmx5aW5n
IGZpbGUgd2lsbCBub3QgYmUgZGVsZXRlZC4KKyAgICAgICAgT3duUHRyPEJsb2JEYXRhPiBibG9i
RGF0YSA9IEJsb2JEYXRhOjpjcmVhdGUoKTsKKyAgICAgICAgYmxvYkRhdGEtPmFwcGVuZEZpbGUo
aW5mby5wbGF0Zm9ybVBhdGgpOworICAgICAgICBSZWZQdHI8QmxvYkRhdGFIYW5kbGU+IHNuYXBz
aG90QmxvYiA9IEJsb2JEYXRhSGFuZGxlOjpjcmVhdGUoYmxvYkRhdGEucmVsZWFzZSgpLCBpbmZv
Lmxlbmd0aCk7CisgICAgICAgIG1fYnJpZGdlLT5kaWRDcmVhdGVTbmFwc2hvdEZpbGVPbk1haW5U
aHJlYWQoaW5mbywgbV9tb2RlLCBzbmFwc2hvdEJsb2IpOworICAgICAgICBkZWxldGUgdGhpczsK
KyAgICB9CisKICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVhZERpcmVjdG9yeShjb25zdCBXZWJWZWN0
b3I8V2ViRmlsZVN5c3RlbUVudHJ5PiYgZW50cmllcywgYm9vbCBoYXNNb3JlKQogICAgIHsKICAg
ICAgICAgbV9icmlkZ2UtPmRpZFJlYWREaXJlY3RvcnlPbk1haW5UaHJlYWQoZW50cmllcywgaGFz
TW9yZSwgbV9tb2RlKTsKQEAgLTI4OSwxMyArMzAxLDEzIEBAIHZvaWQgV29ya2VyRmlsZVN5c3Rl
bUNhbGxiYWNrc0JyaWRnZTo6cG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMsIG1v
ZGUpKTsKIH0KIAotdm9pZCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpwb3N0Q3Jl
YXRlU25hcHNob3RGaWxlVG9NYWluVGhyZWFkKFdlYkZpbGVTeXN0ZW0qIGZpbGVTeXN0ZW0sIGNv
bnN0IEtVUkwmIGludGVybmFsQmxvYlVSTCwgY29uc3QgS1VSTCYgcGF0aCwgY29uc3QgU3RyaW5n
JiBtb2RlKQordm9pZCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpwb3N0Q3JlYXRl
U25hcHNob3RGaWxlVG9NYWluVGhyZWFkKFdlYkZpbGVTeXN0ZW0qIGZpbGVTeXN0ZW0sIGNvbnN0
IEtVUkwmIHBhdGgsIGNvbnN0IFN0cmluZyYgbW9kZSkKIHsKICAgICBBU1NFUlQoZmlsZVN5c3Rl
bSk7CiAgICAgZGlzcGF0Y2hUYXNrVG9NYWluVGhyZWFkKAogICAgICAgICBjcmVhdGVDYWxsYmFj
a1Rhc2soJmNyZWF0ZVNuYXBzaG90RmlsZU9uTWFpblRocmVhZCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoZmlsZVN5c3RlbSksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnRlcm5hbEJsb2JVUkwsIHBhdGgsIHRoaXMsIG1vZGUpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGgsIHRoaXMsIG1vZGUpKTsKIH0KIAogdm9pZCBX
b3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpvcGVuRmlsZVN5c3RlbU9uTWFpblRocmVh
ZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25D
bGllbnQsIFdlYkZpbGVTeXN0ZW06OlR5cGUgdHlwZSwgbG9uZyBsb25nIHNpemUsIGJvb2wgY3Jl
YXRlLCBQYXNzUmVmUHRyPFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U+IGJyaWRnZSwg
Y29uc3QgU3RyaW5nJiBtb2RlKQpAQCAtMzU3LDkgKzM2OSw5IEBAIHZvaWQgV29ya2VyRmlsZVN5
c3RlbUNhbGxiYWNrc0JyaWRnZTo6cmUKICAgICBmaWxlU3lzdGVtLT5yZWFkRGlyZWN0b3J5KHBh
dGgsIE1haW5UaHJlYWRGaWxlU3lzdGVtQ2FsbGJhY2tzOjpjcmVhdGVMZWFrZWRQdHIoYnJpZGdl
LCBtb2RlKSk7CiB9CiAKLXZvaWQgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6Y3Jl
YXRlU25hcHNob3RGaWxlT25NYWluVGhyZWFkKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBXZWJGaWxlU3lzdGVtKiBmaWxlU3lzdGVtLCBjb25zdCBLVVJMJiBpbnRlcm5hbEJsb2JV
UkwsIGNvbnN0IEtVUkwmIHBhdGgsIFBhc3NSZWZQdHI8V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNr
c0JyaWRnZT4gYnJpZGdlLCBjb25zdCBTdHJpbmcmIG1vZGUpCit2b2lkIFdvcmtlckZpbGVTeXN0
ZW1DYWxsYmFja3NCcmlkZ2U6OmNyZWF0ZVNuYXBzaG90RmlsZU9uTWFpblRocmVhZChXZWJDb3Jl
OjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViRmlsZVN5c3RlbSogZmlsZVN5c3RlbSwgY29u
c3QgS1VSTCYgcGF0aCwgUGFzc1JlZlB0cjxXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdl
PiBicmlkZ2UsIGNvbnN0IFN0cmluZyYgbW9kZSkKIHsKLSAgICBmaWxlU3lzdGVtLT5jcmVhdGVT
bmFwc2hvdEZpbGVBbmRSZWFkTWV0YWRhdGEoaW50ZXJuYWxCbG9iVVJMLCBwYXRoLCBNYWluVGhy
ZWFkRmlsZVN5c3RlbUNhbGxiYWNrczo6Y3JlYXRlTGVha2VkUHRyKGJyaWRnZSwgbW9kZSkpOwor
ICAgIGZpbGVTeXN0ZW0tPmNyZWF0ZVNuYXBzaG90RmlsZUFuZFJlYWRNZXRhZGF0YShwYXRoLCBN
YWluVGhyZWFkRmlsZVN5c3RlbUNhbGxiYWNrczo6Y3JlYXRlTGVha2VkUHRyKGJyaWRnZSwgbW9k
ZSkpOwogfQogCiB2b2lkIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OmRpZEZhaWxP
bk1haW5UaHJlYWQoV2ViRmlsZUVycm9yIGVycm9yLCBjb25zdCBTdHJpbmcmIG1vZGUpCkBAIC0z
ODMsNiArMzk1LDExIEBAIHZvaWQgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6ZGkK
ICAgICBtYXlQb3N0VGFza1RvV29ya2VyKGNyZWF0ZUNhbGxiYWNrVGFzaygmZGlkUmVhZE1ldGFk
YXRhT25Xb3JrZXJUaHJlYWQsIHRoaXMsIGluZm8pLCBtb2RlKTsKIH0KIAordm9pZCBXb3JrZXJG
aWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpkaWRDcmVhdGVTbmFwc2hvdEZpbGVPbk1haW5UaHJl
YWQoY29uc3QgV2ViRmlsZUluZm8mIGluZm8sIGNvbnN0IFN0cmluZyYgbW9kZSwgUGFzc1JlZlB0
cjxCbG9iRGF0YUhhbmRsZT4gc25hcHNob3RCbG9iKQoreworICAgIG1heVBvc3RUYXNrVG9Xb3Jr
ZXIoY3JlYXRlQ2FsbGJhY2tUYXNrKCZkaWRDcmVhdGVTbmFwc2hvdEZpbGVPbldvcmtlclRocmVh
ZCwgdGhpcywgaW5mbywgc25hcHNob3RCbG9iKSwgbW9kZSk7Cit9CisKIHZvaWQgV29ya2VyRmls
ZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6ZGlkUmVhZERpcmVjdG9yeU9uTWFpblRocmVhZChjb25z
dCBXZWJWZWN0b3I8V2ViRmlsZVN5c3RlbUVudHJ5PiYgZW50cmllcywgYm9vbCBoYXNNb3JlLCBj
b25zdCBTdHJpbmcmIG1vZGUpCiB7CiAgICAgbWF5UG9zdFRhc2tUb1dvcmtlcigKQEAgLTM5MCw3
ICs0MDcsNyBAQCB2b2lkIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OmRpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLCBlbnRyaWVzLCBoYXNNb3JlKSwgbW9kZSk7CiB9
CiAKLVdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OldvcmtlckZpbGVTeXN0ZW1DYWxs
YmFja3NCcmlkZ2UoV2ViQ29yZTo6V29ya2VyTG9hZGVyUHJveHkqIHdvcmtlckxvYWRlclByb3h5
LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBXZWJGaWxl
U3lzdGVtQ2FsbGJhY2tzKiBjYWxsYmFja3MpCitXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJp
ZGdlOjpXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlKFdlYkNvcmU6OldvcmtlckxvYWRl
clByb3h5KiB3b3JrZXJMb2FkZXJQcm94eSwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCwgV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwqIGNhbGxiYWNrcykK
ICAgICA6IG1fd29ya2VyTG9hZGVyUHJveHkod29ya2VyTG9hZGVyUHJveHkpCiAgICAgLCBtX3dv
cmtlckNvbnRleHQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKICAgICAsIG1fd29ya2VyQ29udGV4
dE9ic2VydmVyKFdvcmtlckZpbGVTeXN0ZW1Db250ZXh0T2JzZXJ2ZXI6OmNyZWF0ZShzdGF0aWNf
Y2FzdDxXb3JrZXJDb250ZXh0Kj4obV93b3JrZXJDb250ZXh0KSwgdGhpcykubGVha1B0cigpKQpA
QCAtNDI0LDYgKzQ0MSwxMSBAQCB2b2lkIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6
OmRpCiAgICAgYnJpZGdlLT5tX2NhbGxiYWNrc09uV29ya2VyVGhyZWFkLT5kaWRSZWFkTWV0YWRh
dGEoaW5mbyk7CiB9CiAKK3ZvaWQgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6ZGlk
Q3JlYXRlU25hcHNob3RGaWxlT25Xb3JrZXJUaHJlYWQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IFBhc3NSZWZQdHI8V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZT4gYnJpZGdlLCBjb25z
dCBXZWJGaWxlSW5mbyYgaW5mbywgUGFzc1JlZlB0cjxCbG9iRGF0YUhhbmRsZT4gc25hcHNob3RC
bG9iKQoreworICAgIGJyaWRnZS0+bV9jYWxsYmFja3NPbldvcmtlclRocmVhZC0+ZGlkQ3JlYXRl
U25hcHNob3RGaWxlKGluZm8sIHNuYXBzaG90QmxvYik7Cit9CisKIHZvaWQgV29ya2VyRmlsZVN5
c3RlbUNhbGxiYWNrc0JyaWRnZTo6ZGlkUmVhZERpcmVjdG9yeU9uV29ya2VyVGhyZWFkKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NC
cmlkZ2U+IGJyaWRnZSwgY29uc3QgV2ViVmVjdG9yPFdlYkZpbGVTeXN0ZW1FbnRyeT4mIGVudHJp
ZXMsIGJvb2wgaGFzTW9yZSkKIHsKICAgICBicmlkZ2UtPm1fY2FsbGJhY2tzT25Xb3JrZXJUaHJl
YWQtPmRpZFJlYWREaXJlY3RvcnkoZW50cmllcywgaGFzTW9yZSk7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyRmlsZVN5c3RlbUNhbGxi
YWNrc0JyaWRnZS5oCShyZXZpc2lvbiAxNDU0NjQpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9Xb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgeworY2xhc3MgQmxvYkRhdGFIYW5kbGU7CiBjbGFzcyBXb3JrZXJMb2FkZXJQ
cm94eTsKIH0KIApAQCAtNTIsNyArNTMsNyBAQCBjbGFzcyBBc3luY0ZpbGVTeXN0ZW07CiBjbGFz
cyBNYWluVGhyZWFkRmlsZVN5c3RlbUNhbGxiYWNrczsKIGNsYXNzIFdlYkNvbW1vbldvcmtlckNs
aWVudDsKIGNsYXNzIFRocmVhZGFibGVDYWxsYmFja3NCcmlkZ2VXcmFwcGVyOwotY2xhc3MgV2Vi
RmlsZVN5c3RlbUNhbGxiYWNrczsKK2NsYXNzIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsOwog
Y2xhc3MgV29ya2VyRmlsZVN5c3RlbUNvbnRleHRPYnNlcnZlcjsKIHN0cnVjdCBXZWJGaWxlSW5m
bzsKIHN0cnVjdCBXZWJGaWxlU3lzdGVtRW50cnk7CkBAIC03Nyw3ICs3OCw3IEBAIHB1YmxpYzoK
IAogICAgIHZvaWQgc3RvcCgpOwogCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8V29ya2VyRmlsZVN5
c3RlbUNhbGxiYWNrc0JyaWRnZT4gY3JlYXRlKFdlYkNvcmU6OldvcmtlckxvYWRlclByb3h5KiB3
b3JrZXJMb2FkZXJQcm94eSwgV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogd29ya2Vy
Q29udGV4dCwgV2ViRmlsZVN5c3RlbUNhbGxiYWNrcyogY2FsbGJhY2tzKQorICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U+IGNyZWF0ZShXZWJDb3Jl
OjpXb3JrZXJMb2FkZXJQcm94eSogd29ya2VyTG9hZGVyUHJveHksIFdlYkNvcmU6OlNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIHdvcmtlckNvbnRleHQsIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBs
KiBjYWxsYmFja3MpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdvcmtlckZp
bGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2Uod29ya2VyTG9hZGVyUHJveHksIHdvcmtlckNvbnRleHQs
IGNhbGxiYWNrcykpOwogICAgIH0KQEAgLTk0LDE3ICs5NSwxOCBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBwb3N0RmlsZUV4aXN0c1RvTWFpblRocmVhZChXZWJGaWxlU3lzdGVtKiwgY29uc3QgV2ViQ29y
ZTo6S1VSTCYgcGF0aCwgY29uc3QgU3RyaW5nJiBtb2RlKTsKICAgICB2b2lkIHBvc3REaXJlY3Rv
cnlFeGlzdHNUb01haW5UaHJlYWQoV2ViRmlsZVN5c3RlbSosIGNvbnN0IFdlYkNvcmU6OktVUkwm
IHBhdGgsIGNvbnN0IFN0cmluZyYgbW9kZSk7CiAgICAgdm9pZCBwb3N0UmVhZERpcmVjdG9yeVRv
TWFpblRocmVhZChXZWJGaWxlU3lzdGVtKiwgY29uc3QgV2ViQ29yZTo6S1VSTCYgcGF0aCwgY29u
c3QgU3RyaW5nJiBtb2RlKTsKLSAgICB2b2lkIHBvc3RDcmVhdGVTbmFwc2hvdEZpbGVUb01haW5U
aHJlYWQoV2ViRmlsZVN5c3RlbSosIGNvbnN0IFdlYkNvcmU6OktVUkwmIGludGVybmFsQmxvYlVS
TCwgY29uc3QgV2ViQ29yZTo6S1VSTCYgcGF0aCwgY29uc3QgU3RyaW5nJiBtb2RlKTsKKyAgICB2
b2lkIHBvc3RDcmVhdGVTbmFwc2hvdEZpbGVUb01haW5UaHJlYWQoV2ViRmlsZVN5c3RlbSosIGNv
bnN0IFdlYkNvcmU6OktVUkwmIHBhdGgsIGNvbnN0IFN0cmluZyYgbW9kZSk7CiAKICAgICAvLyBD
YWxsYmFjayBtZXRob2RzIHRoYXQgYXJlIGNhbGxlZCBvbiB0aGUgbWFpbiB0aHJlYWQuCiAgICAg
dm9pZCBkaWRGYWlsT25NYWluVGhyZWFkKFdlYkZpbGVFcnJvciwgY29uc3QgU3RyaW5nJiBtb2Rl
KTsKICAgICB2b2lkIGRpZE9wZW5GaWxlU3lzdGVtT25NYWluVGhyZWFkKGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgV2ViQ29yZTo6S1VSTCYgcm9vdFVSTCwgY29uc3QgU3RyaW5nJiBtb2RlKTsK
ICAgICB2b2lkIGRpZFN1Y2NlZWRPbk1haW5UaHJlYWQoY29uc3QgU3RyaW5nJiBtb2RlKTsKICAg
ICB2b2lkIGRpZFJlYWRNZXRhZGF0YU9uTWFpblRocmVhZChjb25zdCBXZWJGaWxlSW5mbyYsIGNv
bnN0IFN0cmluZyYgbW9kZSk7CisgICAgdm9pZCBkaWRDcmVhdGVTbmFwc2hvdEZpbGVPbk1haW5U
aHJlYWQoY29uc3QgV2ViRmlsZUluZm8mLCBjb25zdCBTdHJpbmcmIG1vZGUsIFBhc3NSZWZQdHI8
V2ViQ29yZTo6QmxvYkRhdGFIYW5kbGU+IHNuYXBzaG90QmxvYik7CiAgICAgdm9pZCBkaWRSZWFk
RGlyZWN0b3J5T25NYWluVGhyZWFkKGNvbnN0IFdlYlZlY3RvcjxXZWJGaWxlU3lzdGVtRW50cnk+
JiwgYm9vbCBoYXNNb3JlLCBjb25zdCBTdHJpbmcmIG1vZGUpOwogCiBwcml2YXRlOgotICAgIFdv
cmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UoV2ViQ29yZTo6V29ya2VyTG9hZGVyUHJveHkq
LCBXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViRmlsZVN5c3RlbUNhbGxiYWNr
cyopOworICAgIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UoV2ViQ29yZTo6V29ya2Vy
TG9hZGVyUHJveHkqLCBXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViRmlsZVN5
c3RlbUNhbGxiYWNrc0ltcGwqKTsKIAogICAgIC8vIE1ldGhvZHMgdGhhdCBhcmUgdG8gYmUgY2Fs
bGVkIG9uIHRoZSBtYWluIHRocmVhZC4KICAgICBzdGF0aWMgdm9pZCBvcGVuRmlsZVN5c3RlbU9u
TWFpblRocmVhZChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViQ29tbW9uV29y
a2VyQ2xpZW50KiwgV2ViRmlsZVN5c3RlbTo6VHlwZSwgbG9uZyBsb25nIHNpemUsIGJvb2wgY3Jl
YXRlLCBQYXNzUmVmUHRyPFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U+LCBjb25zdCBT
dHJpbmcmIG1vZGUpOwpAQCAtMTE4LDcgKzEyMCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZv
aWQgZmlsZUV4aXN0c09uTWFpblRocmVhZChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgV2ViRmlsZVN5c3RlbSosIGNvbnN0IFdlYkNvcmU6OktVUkwmIHBhdGgsIFBhc3NSZWZQdHI8
V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZT4sIGNvbnN0IFN0cmluZyYgbW9kZSk7CiAg
ICAgc3RhdGljIHZvaWQgZGlyZWN0b3J5RXhpc3RzT25NYWluVGhyZWFkKFdlYkNvcmU6OlNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJGaWxlU3lzdGVtKiwgY29uc3QgV2ViQ29yZTo6S1VSTCYg
cGF0aCwgUGFzc1JlZlB0cjxXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlPiwgY29uc3Qg
U3RyaW5nJiBtb2RlKTsKICAgICBzdGF0aWMgdm9pZCByZWFkRGlyZWN0b3J5T25NYWluVGhyZWFk
KFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJGaWxlU3lzdGVtKiwgY29uc3Qg
V2ViQ29yZTo6S1VSTCYgcGF0aCwgUGFzc1JlZlB0cjxXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tz
QnJpZGdlPiwgY29uc3QgU3RyaW5nJiBtb2RlKTsKLSAgICBzdGF0aWMgdm9pZCBjcmVhdGVTbmFw
c2hvdEZpbGVPbk1haW5UaHJlYWQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdl
YkZpbGVTeXN0ZW0qLCBjb25zdCBXZWJDb3JlOjpLVVJMJiBpbnRlcm5hbEJsb2JVUkwsIGNvbnN0
IFdlYkNvcmU6OktVUkwmIHBhdGgsIFBhc3NSZWZQdHI8V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNr
c0JyaWRnZT4sIGNvbnN0IFN0cmluZyYgbW9kZSk7CisgICAgc3RhdGljIHZvaWQgY3JlYXRlU25h
cHNob3RGaWxlT25NYWluVGhyZWFkKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBX
ZWJGaWxlU3lzdGVtKiwgY29uc3QgV2ViQ29yZTo6S1VSTCYgcGF0aCwgUGFzc1JlZlB0cjxXb3Jr
ZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlPiwgY29uc3QgU3RyaW5nJiBtb2RlKTsKIAogICAg
IGZyaWVuZCBjbGFzcyBNYWluVGhyZWFkRmlsZVN5c3RlbUNhbGxiYWNrczsKIApAQCAtMTI3LDYg
KzEyOSw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgZGlkT3BlbkZpbGVTeXN0ZW1Pbldv
cmtlclRocmVhZChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxX
b3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlPiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBXZWJDb3JlOjpLVVJMJiByb290UGF0aCk7CiAgICAgc3RhdGljIHZvaWQgZGlkU3VjY2VlZE9u
V29ya2VyVGhyZWFkKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRy
PFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U+KTsKICAgICBzdGF0aWMgdm9pZCBkaWRS
ZWFkTWV0YWRhdGFPbldvcmtlclRocmVhZChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgUGFzc1JlZlB0cjxXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlPiwgY29uc3QgV2Vi
RmlsZUluZm8mKTsKKyAgICBzdGF0aWMgdm9pZCBkaWRDcmVhdGVTbmFwc2hvdEZpbGVPbldvcmtl
clRocmVhZChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxXb3Jr
ZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlPiwgY29uc3QgV2ViRmlsZUluZm8mLCBQYXNzUmVm
UHRyPFdlYkNvcmU6OkJsb2JEYXRhSGFuZGxlPiBzbmFwc2hvdEJsb2IpOwogICAgIHN0YXRpYyB2
b2lkIGRpZFJlYWREaXJlY3RvcnlPbldvcmtlclRocmVhZChXZWJDb3JlOjpTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgUGFzc1JlZlB0cjxXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlPiwg
Y29uc3QgV2ViVmVjdG9yPFdlYkZpbGVTeXN0ZW1FbnRyeT4mLCBib29sIGhhc01vcmUpOwogCiAg
ICAgc3RhdGljIHZvaWQgcnVuVGFza09uTWFpblRocmVhZChXZWJDb3JlOjpTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgUGFzc1JlZlB0cjxXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlPiwg
UGFzc093blB0cjxXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPik7CkBAIC0x
NDYsNyArMTQ5LDcgQEAgcHJpdmF0ZToKICAgICBXb3JrZXJGaWxlU3lzdGVtQ29udGV4dE9ic2Vy
dmVyKiBtX3dvcmtlckNvbnRleHRPYnNlcnZlcjsKIAogICAgIC8vIFRoaXMgaXMgc2VsZi1kZXN0
cnVjdGVkIGFuZCBtdXN0IGJlIGZpcmVkIG9uIHRoZSB3b3JrZXIgdGhyZWFkLgotICAgIFdlYkZp
bGVTeXN0ZW1DYWxsYmFja3MqIG1fY2FsbGJhY2tzT25Xb3JrZXJUaHJlYWQ7CisgICAgV2ViRmls
ZVN5c3RlbUNhbGxiYWNrc0ltcGwqIG1fY2FsbGJhY2tzT25Xb3JrZXJUaHJlYWQ7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>