<?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>66509</bug_id>
          
          <creation_ts>2011-08-18 16:21:57 -0700</creation_ts>
          <short_desc>[WebWorkers][Chromium] Remove remains of cross-process dedicated worker implementation</short_desc>
          <delta_ts>2011-12-28 18:54:13 -0800</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>61016</dependson>
    
    <dependson>75278</dependson>
    
    <dependson>75332</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dmitry Lomov">dslomov</reporter>
          <assigned_to name="Dmitry Lomov">dslomov</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>dimich</cc>
    
    <cc>fishd</cc>
    
    <cc>jam</cc>
    
    <cc>levin</cc>
    
    <cc>levin+threading</cc>
    
    <cc>rniwa</cc>
    
    <cc>tkent</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>453475</commentid>
    <comment_count>0</comment_count>
    <who name="Dmitry Lomov">dslomov</who>
    <bug_when>2011-08-18 16:21:57 -0700</bug_when>
    <thetext>1. NewWebWorkerBase and NewWebWorkerCommonClient should be renamed to WebWorkerBase and WebWorkerCommonClient
2. Currently existing WebWorkerBase and WebWorkerCommonClient should be merged into resp. shared worker interface/implementation classes.
3. Resulting dead code should be removed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526495</commentid>
    <comment_count>1</comment_count>
      <attachid>120377</attachid>
    <who name="Dmitry Lomov">dslomov</who>
    <bug_when>2011-12-22 13:54:37 -0800</bug_when>
    <thetext>Created attachment 120377
The fix

The patch looks massive but conceptually it is very simple - see ChangeLog for an overview</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526509</commentid>
    <comment_count>2</comment_count>
      <attachid>120377</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-22 14:20:46 -0800</bug_when>
    <thetext>Comment on attachment 120377
The fix

Attachment 120377 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10962039</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526534</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-22 14:45:47 -0800</bug_when>
    <thetext>Please wait for approval from fishd@chromium.org before submitting because this patch contains changes to the Chromium public API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526588</commentid>
    <comment_count>4</comment_count>
      <attachid>120395</attachid>
    <who name="Dmitry Lomov">dslomov</who>
    <bug_when>2011-12-22 15:45:14 -0800</bug_when>
    <thetext>Created attachment 120395
DumpRenderTree fixed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526596</commentid>
    <comment_count>5</comment_count>
      <attachid>120395</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-12-22 15:53:52 -0800</bug_when>
    <thetext>Comment on attachment 120395
DumpRenderTree fixed

WebKit API changes LGTM... probably should get levin / dimich / jianli to review the rest.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526609</commentid>
    <comment_count>6</comment_count>
      <attachid>120395</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2011-12-22 16:09:45 -0800</bug_when>
    <thetext>Comment on attachment 120395
DumpRenderTree fixed

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

&gt; Source/WebKit/chromium/src/WebSharedWorkerImpl.cpp:45
&gt; +

No need for blank line here.

&gt; Source/WebKit/chromium/src/WebSharedWorkerImpl.cpp:55
&gt; +

No need for blank line here. (Just sort all of these together.)

&gt; Source/WebKit/chromium/src/WebSharedWorkerImpl.cpp:59
&gt; +#include &lt;wtf/MainThread.h&gt;

&lt;wtf/... should be after other header includes.

&gt; Source/WebKit/chromium/src/WebSharedWorkerImpl.cpp:61
&gt;  #include &quot;WorkerDebuggerAgent.h&quot;

Should be with the other #include&apos;s.

&gt; Source/WebKit/chromium/src/WebSharedWorkerImpl.cpp:162
&gt; +                                              PassOwnPtr&lt;MessagePortChannelArray&gt; channels)

indent off. (in many places in this file).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526619</commentid>
    <comment_count>7</comment_count>
      <attachid>120402</attachid>
    <who name="Dmitry Lomov">dslomov</who>
    <bug_when>2011-12-22 16:17:53 -0800</bug_when>
    <thetext>Created attachment 120402
CR feedback</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526625</commentid>
    <comment_count>8</comment_count>
      <attachid>120405</attachid>
    <who name="Dmitry Lomov">dslomov</who>
    <bug_when>2011-12-22 16:27:13 -0800</bug_when>
    <thetext>Created attachment 120405
CR feedback</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526796</commentid>
    <comment_count>9</comment_count>
      <attachid>120405</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-23 02:59:18 -0800</bug_when>
    <thetext>Comment on attachment 120405
CR feedback

Clearing flags on attachment: 120405

Committed r103619: &lt;http://trac.webkit.org/changeset/103619&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526797</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-23 02:59:23 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526964</commentid>
    <comment_count>11</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-23 22:45:51 -0800</bug_when>
    <thetext>This broke Linux clang builds:

In file included from third_party/WebKit/Tools/DumpRenderTree/chromium/AccessibilityController.cpp:34:
In file included from third_party/WebKit/Tools/DumpRenderTree/chromium/TestShell.h:43:
third_party/WebKit/Tools/DumpRenderTree/chromium/WebViewHost.h:177:32: error: &apos;WebViewHost::createWorker&apos; hides overloaded virtual function [-Werror,-Woverloaded-virtual]
    virtual WebKit::WebWorker* createWorker(WebKit::WebFrame*, WebKit::WebSharedWorkerClient*);
                               ^
third_party/WebKit/Source/WebKit/chromium/public/WebFrameClient.h:86:24: note: hidden overloaded virtual function &apos;WebKit::WebFrameClient::createWorker&apos; declared here
    virtual WebWorker* createWorker(WebFrame*, WebWorkerClient*) { return 0; }
                       ^
1 error generated.
make: *** [out/Debug/obj.target/DumpRenderTree/third_party/WebKit/Tools/DumpRenderTree/chromium/AccessibilityController.o] Error 1
In file included from third_party/WebKit/Tools/DumpRenderTree/chromium/DumpRenderTree.cpp:33:
In file included from third_party/WebKit/Tools/DumpRenderTree/chromium/TestShell.h:43:
third_party/WebKit/Tools/DumpRenderTree/chromium/WebViewHost.h:177:32: error: &apos;WebViewHost::createWorker&apos; hides overloaded virtual function [-Werror,-Woverloaded-virtual]
    virtual WebKit::WebWorker* createWorker(WebKit::WebFrame*, WebKit::WebSharedWorkerClient*);
                               ^
third_party/WebKit/Source/WebKit/chromium/public/WebFrameClient.h:86:24: note: hidden overloaded virtual function &apos;WebKit::WebFrameClient::createWorker&apos; declared here
    virtual WebWorker* createWorker(WebFrame*, WebWorkerClient*) { return 0; }
                       ^
1 error generated.
make: *** [out/Debug/obj.target/DumpRenderTree/third_party/WebKit/Tools/DumpRenderTree/chromium/DumpRenderTree.o] Error 1
In file included from third_party/WebKit/Tools/DumpRenderTree/chromium/EventSender.cpp:46:
In file included from third_party/WebKit/Tools/DumpRenderTree/chromium/TestShell.h:43:
third_party/WebKit/Tools/DumpRenderTree/chromium/WebViewHost.h:177:32: error: &apos;WebViewHost::createWorker&apos; hides overloaded virtual function [-Werror,-Woverloaded-virtual]
    virtual WebKit::WebWorker* createWorker(WebKit::WebFrame*, WebKit::WebSharedWorkerClient*);
                               ^
third_party/WebKit/Source/WebKit/chromium/public/WebFrameClient.h:86:24: note: hidden overloaded virtual function &apos;WebKit::WebFrameClient::createWorker&apos; declared here
    virtual WebWorker* createWorker(WebFrame*, WebWorkerClient*) { return 0; }
                       ^
1 error generated.
make: *** [out/Debug/obj.target/DumpRenderTree/third_party/WebKit/Tools/DumpRenderTree/chromium/EventSender.o] Error 1
In file included from third_party/WebKit/Tools/DumpRenderTree/chromium/GamepadController.cpp:34:
In file included from third_party/WebKit/Tools/DumpRenderTree/chromium/TestShell.h:43:
third_party/WebKit/Tools/DumpRenderTree/chromium/WebViewHost.h:177:32: error: &apos;WebViewHost::createWorker&apos; hides overloaded virtual function [-Werror,-Woverloaded-virtual]
    virtual WebKit::WebWorker* createWorker(WebKit::WebFrame*, WebKit::WebSharedWorkerClient*);
                               ^
third_party/WebKit/Source/WebKit/chromium/public/WebFrameClient.h:86:24: note: hidden overloaded virtual function &apos;WebKit::WebFrameClient::createWorker&apos; declared here
    virtual WebWorker* createWorker(WebFrame*, WebWorkerClient*) { return 0; }
                       ^
1 error generated.
make: *** [out/Debug/obj.target/DumpRenderTree/third_party/WebKit/Tools/DumpRenderTree/chromium/GamepadController.o] Error 1
In file included from third_party/WebKit/Tools/DumpRenderTree/chromium/PlainTextController.cpp:35:
In file included from third_party/WebKit/Tools/DumpRenderTree/chromium/TestShell.h:43:
third_party/WebKit/Tools/DumpRenderTree/chromium/WebViewHost.h:177:32: error: &apos;WebViewHost::createWorker&apos; hides overloaded virtual function [-Werror,-Woverloaded-virtual]
    virtual WebKit::WebWorker* createWorker(WebKit::WebFrame*, WebKit::WebSharedWorkerClient*);
                               ^
third_party/WebKit/Source/WebKit/chromium/public/WebFrameClient.h:86:24: note: hidden overloaded virtual function &apos;WebKit::WebFrameClient::createWorker&apos; declared here
    virtual WebWorker* createWorker(WebFrame*, WebWorkerClient*) { return 0; }
                       ^
1 error generated.
make: *** [out/Debug/obj.target/DumpRenderTree/third_party/WebKit/Tools/DumpRenderTree/chromium/PlainTextController.o] Error 1
In file included from third_party/WebKit/Tools/DumpRenderTree/chromium/LayoutTestController.cpp:36:
In file included from third_party/WebKit/Tools/DumpRenderTree/chromium/TestShell.h:43:
third_party/WebKit/Tools/DumpRenderTree/chromium/WebViewHost.h:177:32: error: &apos;WebViewHost::createWorker&apos; hides overloaded virtual function [-Werror,-Woverloaded-virtual]
    virtual WebKit::WebWorker* createWorker(WebKit::WebFrame*, WebKit::WebSharedWorkerClient*);
                               ^
third_party/WebKit/Source/WebKit/chromium/public/WebFrameClient.h:86:24: note: hidden overloaded virtual function &apos;WebKit::WebFrameClient::createWorker&apos; declared here
    virtual WebWorker* createWorker(WebFrame*, WebWorkerClient*) { return 0; }
                       ^
1 error generated.
make: *** [out/Debug/obj.target/DumpRenderTree/third_party/WebKit/Tools/DumpRenderTree/chromium/LayoutTestController.o] Error 1
In file included from third_party/WebKit/Tools/DumpRenderTree/chromium/TestNavigationController.cpp:34:
In file included from third_party/WebKit/Tools/DumpRenderTree/chromium/TestShell.h:43:
third_party/WebKit/Tools/DumpRenderTree/chromium/WebViewHost.h:177:32: error: &apos;WebViewHost::createWorker&apos; hides overloaded virtual function [-Werror,-Woverloaded-virtual]
    virtual WebKit::WebWorker* createWorker(WebKit::WebFrame*, WebKit::WebSharedWorkerClient*);
                               ^
third_party/WebKit/Source/WebKit/chromium/public/WebFrameClient.h:86:24: note: hidden overloaded virtual function &apos;WebKit::WebFrameClient::createWorker&apos; declared here
    virtual WebWorker* createWorker(WebFrame*, WebWorkerClient*) { return 0; }
                       ^
1 error generated.
make: *** [out/Debug/obj.target/DumpRenderTree/third_party/WebKit/Tools/DumpRenderTree/chromium/TestNavigationController.o] Error 1
In file included from third_party/WebKit/Tools/DumpRenderTree/chromium/TestShell.cpp:32:
In file included from third_party/WebKit/Tools/DumpRenderTree/chromium/TestShell.h:43:
third_party/WebKit/Tools/DumpRenderTree/chromium/WebViewHost.h:177:32: error: &apos;WebViewHost::createWorker&apos; hides overloaded virtual function [-Werror,-Woverloaded-virtual]
    virtual WebKit::WebWorker* createWorker(WebKit::WebFrame*, WebKit::WebSharedWorkerClient*);
                               ^
third_party/WebKit/Source/WebKit/chromium/public/WebFrameClient.h:86:24: note: hidden overloaded virtual function &apos;WebKit::WebFrameClient::createWorker&apos; declared here
    virtual WebWorker* createWorker(WebFrame*, WebWorkerClient*) { return 0; }
                       ^
1 error generated.
make: *** [out/Debug/obj.target/DumpRenderTree/third_party/WebKit/Tools/DumpRenderTree/chromium/TestShell.o] Error 1
In file included from third_party/WebKit/Tools/DumpRenderTree/chromium/TestShellGtk.cpp:32:
In file included from third_party/WebKit/Tools/DumpRenderTree/chromium/TestShell.h:43:
third_party/WebKit/Tools/DumpRenderTree/chromium/WebViewHost.h:177:32: error: &apos;WebViewHost::createWorker&apos; hides overloaded virtual function [-Werror,-Woverloaded-virtual]
    virtual WebKit::WebWorker* createWorker(WebKit::WebFrame*, WebKit::WebSharedWorkerClient*);
                               ^
third_party/WebKit/Source/WebKit/chromium/public/WebFrameClient.h:86:24: note: hidden overloaded virtual function &apos;WebKit::WebFrameClient::createWorker&apos; declared here
    virtual WebWorker* createWorker(WebFrame*, WebWorkerClient*) { return 0; }
                       ^
1 error generated.
make: *** [out/Debug/obj.target/DumpRenderTree/third_party/WebKit/Tools/DumpRenderTree/chromium/TestShellGtk.o] Error 1
In file included from third_party/WebKit/Tools/DumpRenderTree/chromium/WebViewHost.cpp:32:
third_party/WebKit/Tools/DumpRenderTree/chromium/WebViewHost.h:177:32: error: &apos;WebViewHost::createWorker&apos; hides overloaded virtual function [-Werror,-Woverloaded-virtual]
    virtual WebKit::WebWorker* createWorker(WebKit::WebFrame*, WebKit::WebSharedWorkerClient*);
                               ^
third_party/WebKit/Source/WebKit/chromium/public/WebFrameClient.h:86:24: note: hidden overloaded virtual function &apos;WebKit::WebFrameClient::createWorker&apos; declared here
    virtual WebWorker* createWorker(WebFrame*, WebWorkerClient*) { return 0; }
                       ^
1 error generated.
make: *** [out/Debug/obj.target/DumpRenderTree/third_party/WebKit/Tools/DumpRenderTree/chromium/WebViewHost.o] Error 1
In file included from third_party/WebKit/Tools/DumpRenderTree/chromium/WebPermissions.cpp:35:
In file included from third_party/WebKit/Tools/DumpRenderTree/chromium/TestShell.h:43:
third_party/WebKit/Tools/DumpRenderTree/chromium/WebViewHost.h:177:32: error: &apos;WebViewHost::createWorker&apos; hides overloaded virtual function [-Werror,-Woverloaded-virtual]
    virtual WebKit::WebWorker* createWorker(WebKit::WebFrame*, WebKit::WebSharedWorkerClient*);
                               ^
third_party/WebKit/Source/WebKit/chromium/public/WebFrameClient.h:86:24: note: hidden overloaded virtual function &apos;WebKit::WebFrameClient::createWorker&apos; declared here
    virtual WebWorker* createWorker(WebFrame*, WebWorkerClient*) { return 0; }
                       ^
1 error generated.
make: *** [out/Debug/obj.target/DumpRenderTree/third_party/WebKit/Tools/DumpRenderTree/chromium/WebPermissions.o] Error 1
In file included from third_party/WebKit/Tools/DumpRenderTree/chromium/TextInputController.cpp:34:
In file included from third_party/WebKit/Tools/DumpRenderTree/chromium/TestShell.h:43:
third_party/WebKit/Tools/DumpRenderTree/chromium/WebViewHost.h:177:32: error: &apos;WebViewHost::createWorker&apos; hides overloaded virtual function [-Werror,-Woverloaded-virtual]
    virtual WebKit::WebWorker* createWorker(WebKit::WebFrame*, WebKit::WebSharedWorkerClient*);
                               ^
third_party/WebKit/Source/WebKit/chromium/public/WebFrameClient.h:86:24: note: hidden overloaded virtual function &apos;WebKit::WebFrameClient::createWorker&apos; declared here
    virtual WebWorker* createWorker(WebFrame*, WebWorkerClient*) { return 0; }
                       ^
1 error generated.
make: *** [out/Debug/obj.target/DumpRenderTree/third_party/WebKit/Tools/DumpRenderTree/chromium/TextInputController.o] Error 1
In file included from third_party/WebKit/Tools/DumpRenderTree/chromium/TestShellLinux.cpp:32:
In file included from third_party/WebKit/Tools/DumpRenderTree/chromium/TestShell.h:43:
third_party/WebKit/Tools/DumpRenderTree/chromium/WebViewHost.h:177:32: error: &apos;WebViewHost::createWorker&apos; hides overloaded virtual function [-Werror,-Woverloaded-virtual]
    virtual WebKit::WebWorker* createWorker(WebKit::WebFrame*, WebKit::WebSharedWorkerClient*);
                               ^
third_party/WebKit/Source/WebKit/chromium/public/WebFrameClient.h:86:24: note: hidden overloaded virtual function &apos;WebKit::WebFrameClient::createWorker&apos; declared here
    virtual WebWorker* createWorker(WebFrame*, WebWorkerClient*) { return 0; }
                       ^
1 error generated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527005</commentid>
    <comment_count>12</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-24 11:27:12 -0800</bug_when>
    <thetext>Reopen the bug since the patch was rolled out in http://trac.webkit.org/changeset/103658 per IRC discussion with Dmitry.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527032</commentid>
    <comment_count>13</comment_count>
    <who name="Dmitry Lomov">dslomov</who>
    <bug_when>2011-12-24 15:42:46 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; Reopen the bug since the patch was rolled out in http://trac.webkit.org/changeset/103658 per IRC discussion with Dmitry.

Thanks Ryosuke, will fix and reland.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527780</commentid>
    <comment_count>14</comment_count>
      <attachid>120702</attachid>
    <who name="Dmitry Lomov">dslomov</who>
    <bug_when>2011-12-28 15:30:27 -0800</bug_when>
    <thetext>Created attachment 120702
Reuploading the patch to use cq to commit.

Will probably need to clobber builders</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527785</commentid>
    <comment_count>15</comment_count>
      <attachid>120704</attachid>
    <who name="Dmitry Lomov">dslomov</who>
    <bug_when>2011-12-28 15:39:22 -0800</bug_when>
    <thetext>Created attachment 120704
Missing file</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527790</commentid>
    <comment_count>16</comment_count>
      <attachid>120704</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-28 16:01:16 -0800</bug_when>
    <thetext>Comment on attachment 120704
Missing file

Clearing flags on attachment: 120704

Committed r103785: &lt;http://trac.webkit.org/changeset/103785&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527791</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-28 16:01:22 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527809</commentid>
    <comment_count>18</comment_count>
    <who name="Dmitry Lomov">dslomov</who>
    <bug_when>2011-12-28 17:15:07 -0800</bug_when>
    <thetext>Patch broke build... Trying to figure out why...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527817</commentid>
    <comment_count>19</comment_count>
    <who name="Dmitry Lomov">dslomov</who>
    <bug_when>2011-12-28 18:54:13 -0800</bug_when>
    <thetext>Patch landed in http://trac.webkit.org/changeset/103789</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120377</attachid>
            <date>2011-12-22 13:54:37 -0800</date>
            <delta_ts>2011-12-22 15:45:14 -0800</delta_ts>
            <desc>The fix</desc>
            <filename>66509.patch</filename>
            <type>text/plain</type>
            <size>78150</size>
            <attacher name="Dmitry Lomov">dslomov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggZjQwNzFhMi4uYzUyNGM0OSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4NyBAQAorMjAxMS0xMi0yMiAgRG1pdHJ5IExv
bW92ICA8ZHNsb21vdkBnb29nbGUuY29tPgorCisgICAgICAgIFtXZWJXb3JrZXJzXVtDaHJvbWl1
bV0gUmVtb3ZlIHJlbWFpbnMgb2YgY3Jvc3MtcHJvY2VzcyBkZWRpY2F0ZWQgd29ya2VyIGltcGxl
bWVudGF0aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NjY1MDkKKyAgICAgICAgSnVzdCByZW5hbWVzLCBtZXJnZXMgYW5kIHJlbW92YWwgb2YgZGVh
ZCBjb2RlLiBIZXJlIGFyZSB0aGUgbGlzdCBvZiByZW5hbWVzOgorICAgICAgICAgIC0gV2ViQ29t
bW9uV29ya2VyQ2xpZW50IG1lcmdlZCB3aXRoIFdlYldvcmtlckNsaWVudCBhbmQgcmVuYW1lZCB0
byBXZWJTaGFyZWRXb3JrZXJDbGllbnQKKyAgICAgICAgICAtIE5ld1dlYkNvbW1vbldvcmtlckNs
aWVudCByZW5hbWVkIHRvIFdlYkNvbW1vbldvcmtlckNsaWVudAorICAgICAgICAgIC0gV2ViV29y
a2VyQmFzZSBtZXJnZWQgaW50byBXZWJTaGFyZWRXb3JrZXJJbXBsCisgICAgICAgICAgLSBOZXdX
ZWJXb3JrZXJCYXNlIHJlbmFtZWQgaW50byBXZWJXb3JrZXJCYXNlCisgICAgICAgIFdlYldvcmtl
ckNsaWVudC5oIGhhcyBhICIjZGVmaW5lIFdlYldvcmtlckNsaWVudCBXZWJTaGFyZWRXb3JrZXJD
bGllbnQiIHRvIGtlZXAgY2hyb21pdW0gYnVpbGRpbmcuCisgICAgICAgIFdpbGwgYmUgcmVtb3Zl
ZCBhZnRlciBjb29yZGluYXRlZCBwYXRjaCBpbiBjaHJvbWl1bS4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdC5neXA6CisgICAgICAgICog
cHVibGljL1dlYkNvbW1vbldvcmtlckNsaWVudC5oOgorICAgICAgICAqIHB1YmxpYy9XZWJTaGFy
ZWRXb3JrZXIuaDoKKyAgICAgICAgKiBwdWJsaWMvV2ViU2hhcmVkV29ya2VyQ2xpZW50Lmg6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNvbW1vbldvcmtlckNs
aWVudC5oLgorICAgICAgICAoV2ViS2l0OjpXZWJTaGFyZWRXb3JrZXJDbGllbnQ6OnBvc3RDb25z
b2xlTWVzc2FnZVRvV29ya2VyT2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViU2hhcmVkV29y
a2VyQ2xpZW50OjphbGxvd0ZpbGVTeXN0ZW0pOgorICAgICAgICAoV2ViS2l0OjpXZWJTaGFyZWRX
b3JrZXJDbGllbnQ6Om9wZW5GaWxlU3lzdGVtKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2hhcmVk
V29ya2VyQ2xpZW50OjpkaXNwYXRjaERldlRvb2xzTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYlNoYXJlZFdvcmtlckNsaWVudDo6c2F2ZURldlRvb2xzQWdlbnRTdGF0ZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYlNoYXJlZFdvcmtlckNsaWVudDo6fldlYlNoYXJlZFdvcmtlckNsaWVudCk6
CisgICAgICAgICogcHVibGljL1dlYldvcmtlckNsaWVudC5oOgorICAgICAgICAqIHNyYy9EYXRh
YmFzZU9ic2VydmVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6QWxsb3dEYXRhYmFzZU1haW5UaHJl
YWRCcmlkZ2U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkFsbG93RGF0YWJhc2VNYWluVGhy
ZWFkQnJpZGdlOjpBbGxvd0RhdGFiYXNlTWFpblRocmVhZEJyaWRnZSk6CisgICAgICAgIChXZWJL
aXQ6OkFsbG93RGF0YWJhc2VNYWluVGhyZWFkQnJpZGdlOjphbGxvd0RhdGFiYXNlVGFzayk6Cisg
ICAgICAgIChXZWJLaXQ6OmFsbG93RGF0YWJhc2VGb3JXb3JrZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0YWJhc2VPYnNlcnZlcjo6Y2FuRXN0YWJsaXNoRGF0YWJhc2UpOgorICAgICAgICAqIHNy
Yy9JREJGYWN0b3J5QmFja2VuZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6SURCRmFjdG9y
eUJhY2tlbmRQcm94eTo6b3BlbkZyb21Xb3JrZXIpOgorICAgICAgICAqIHNyYy9Mb2NhbEZpbGVT
eXN0ZW1DaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpvcGVuRmlsZVN5c3RlbUhlbHBl
cik6CisgICAgICAgICogc3JjL1dlYlNoYXJlZFdvcmtlckltcGwuY3BwOgorICAgICAgICAoV2Vi
S2l0Ojppbml0aWFsaXplV2ViS2l0U3RhdGljVmFsdWVzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
U2hhcmVkV29ya2VySW1wbDo6V2ViU2hhcmVkV29ya2VySW1wbCk6CisgICAgICAgIChXZWJLaXQ6
OldlYlNoYXJlZFdvcmtlckltcGw6On5XZWJTaGFyZWRXb3JrZXJJbXBsKToKKyAgICAgICAgKFdl
YktpdDo6V2ViU2hhcmVkV29ya2VySW1wbDo6c3RvcFdvcmtlclRocmVhZCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlNoYXJlZFdvcmtlckltcGw6OmluaXRpYWxpemVMb2FkZXIpOgorICAgICAgICAo
V2ViS2l0OjpXZWJTaGFyZWRXb3JrZXJJbXBsOjpkaWRDcmVhdGVEYXRhU291cmNlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViU2hhcmVkV29ya2VySW1wbDo6Y3JlYXRlQXBwbGljYXRpb25DYWNoZUhv
c3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJTaGFyZWRXb3JrZXJJbXBsOjpwb3N0TWVzc2FnZVRv
V29ya2VyT2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViU2hhcmVkV29ya2VySW1wbDo6cG9z
dE1lc3NhZ2VUYXNrKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2hhcmVkV29ya2VySW1wbDo6cG9z
dEV4Y2VwdGlvblRvV29ya2VyT2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViU2hhcmVkV29y
a2VySW1wbDo6cG9zdEV4Y2VwdGlvblRhc2spOgorICAgICAgICAoV2ViS2l0OjpXZWJTaGFyZWRX
b3JrZXJJbXBsOjpwb3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlNoYXJlZFdvcmtlckltcGw6OnBvc3RDb25zb2xlTWVzc2FnZVRhc2spOgorICAg
ICAgICAoV2ViS2l0OjpXZWJTaGFyZWRXb3JrZXJJbXBsOjpwb3N0TWVzc2FnZVRvUGFnZUluc3Bl
Y3Rvcik6CisgICAgICAgIChXZWJLaXQ6OldlYlNoYXJlZFdvcmtlckltcGw6OnBvc3RNZXNzYWdl
VG9QYWdlSW5zcGVjdG9yVGFzayk6CisgICAgICAgIChXZWJLaXQ6OldlYlNoYXJlZFdvcmtlcklt
cGw6OnVwZGF0ZUluc3BlY3RvclN0YXRlQ29va2llKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2hh
cmVkV29ya2VySW1wbDo6dXBkYXRlSW5zcGVjdG9yU3RhdGVDb29raWVUYXNrKToKKyAgICAgICAg
KFdlYktpdDo6V2ViU2hhcmVkV29ya2VySW1wbDo6Y29uZmlybU1lc3NhZ2VGcm9tV29ya2VyT2Jq
ZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViU2hhcmVkV29ya2VySW1wbDo6Y29uZmlybU1lc3Nh
Z2VUYXNrKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2hhcmVkV29ya2VySW1wbDo6cmVwb3J0UGVu
ZGluZ0FjdGl2aXR5KToKKyAgICAgICAgKFdlYktpdDo6V2ViU2hhcmVkV29ya2VySW1wbDo6cmVw
b3J0UGVuZGluZ0FjdGl2aXR5VGFzayk6CisgICAgICAgIChXZWJLaXQ6OldlYlNoYXJlZFdvcmtl
ckltcGw6OndvcmtlckNvbnRleHRDbG9zZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJTaGFyZWRX
b3JrZXJJbXBsOjp3b3JrZXJDb250ZXh0Q2xvc2VkVGFzayk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlNoYXJlZFdvcmtlckltcGw6OndvcmtlckNvbnRleHREZXN0cm95ZWQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJTaGFyZWRXb3JrZXJJbXBsOjp3b3JrZXJDb250ZXh0RGVzdHJveWVkVGFzayk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlNoYXJlZFdvcmtlckltcGw6OnBvc3RUYXNrVG9Mb2FkZXIpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJTaGFyZWRXb3JrZXJJbXBsOjpwb3N0VGFza0Zvck1vZGVUb1dv
cmtlckNvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJTaGFyZWRXb3JrZXI6OmNyZWF0ZSk6
CisgICAgICAgICogc3JjL1dlYlNoYXJlZFdvcmtlckltcGwuaDoKKyAgICAgICAgKFdlYktpdDo6
V2ViU2hhcmVkV29ya2VySW1wbDo6dmlldyk6CisgICAgICAgIChXZWJLaXQ6OldlYlNoYXJlZFdv
cmtlckltcGw6OmNvbW1vbkNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNoYXJlZFdvcmtl
ckltcGw6OmNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNoYXJlZFdvcmtlckltcGw6OnNl
dFdvcmtlclRocmVhZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNoYXJlZFdvcmtlckltcGw6Ondv
cmtlclRocmVhZCk6CisgICAgICAgICogc3JjL1dlYldvcmtlckJhc2UuY3BwOgorICAgICAgICAo
V2ViS2l0OjppbnZva2VUYXNrTWV0aG9kKToKKyAgICAgICAgKFdlYktpdDo6V2ViV29ya2VyQmFz
ZTo6ZGlzcGF0Y2hUYXNrVG9NYWluVGhyZWFkKToKKyAgICAgICAgKiBzcmMvV2ViV29ya2VyQmFz
ZS5oOgorICAgICAgICAqIHNyYy9XZWJXb3JrZXJDbGllbnRJbXBsLmNwcDoKKyAgICAgICAgKiBz
cmMvV2ViV29ya2VyQ2xpZW50SW1wbC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJXb3JrZXJDbGll
bnRJbXBsOjpjb21tb25DbGllbnQpOgorICAgICAgICAqIHNyYy9XZWJXb3JrZXJJbXBsLmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvV2ViV29ya2VySW1wbC5oOiBSZW1vdmVkLgorICAgICAg
ICAqIHNyYy9Xb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6cG9zdE9wZW5GaWxlU3lzdGVt
VG9NYWluVGhyZWFkKToKKyAgICAgICAgKFdlYktpdDo6V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNr
c0JyaWRnZTo6b3BlbkZpbGVTeXN0ZW1Pbk1haW5UaHJlYWQpOgorICAgICAgICAqIHNyYy9Xb3Jr
ZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlLmg6CisKIDIwMTEtMTItMjEgIFBldGVyIEtvdHdp
Y3ogIDxwa290d2ljekBnb29nbGUuY29tPgogCiAgICAgICAgIFBsdW1icyByZWZyZXNoIHJhdGUg
dGhyb3VnaCBXZWJMYXllclRyZWVWaWV3OjpTZXR0aW5ncwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQu
Z3lwCmluZGV4IDc0NzZiMjYuLjU3ZThhYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vV2ViS2l0Lmd5cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAK
QEAgLTIzNiw2ICsyMzYsNyBAQAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViU2VjdXJpdHlQ
b2xpY3kuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJTZWxlY3RFbGVtZW50LmgnLAog
ICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViU2V0dGluZ3MuaCcsCisgICAgICAgICAgICAgICAg
J3B1YmxpYy9XZWJTaGFyZWRXb3JrZXJDbGllbnQuaCcsCiAgICAgICAgICAgICAgICAgJ3B1Ymxp
Yy9XZWJTaGFyZWRXb3JrZXIuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJTaGFyZWRX
b3JrZXJSZXBvc2l0b3J5LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViU29ja2V0Lmgn
LApAQCAtNjY2LDggKzY2Nyw2IEBACiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJXb3JrZXJCYXNl
LmgnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViV29ya2VyQ2xpZW50SW1wbC5jcHAnLAogICAg
ICAgICAgICAgICAgICdzcmMvV2ViV29ya2VyQ2xpZW50SW1wbC5oJywKLSAgICAgICAgICAgICAg
ICAnc3JjL1dlYldvcmtlckltcGwuY3BwJywKLSAgICAgICAgICAgICAgICAnc3JjL1dlYldvcmtl
ckltcGwuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJXb3JrZXJSdW5Mb29wLmNwcCcsCiAg
ICAgICAgICAgICAgICAgJ3NyYy9Xb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAnLAog
ICAgICAgICAgICAgICAgICdzcmMvV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uaCcsCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDb21tb25Xb3JrZXJD
bGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNvbW1vbldvcmtlckNs
aWVudC5oCmluZGV4IGE3OTQ1MzkuLjJmZmI1NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYkNvbW1vbldvcmtlckNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYkNvbW1vbldvcmtlckNsaWVudC5oCkBAIC00NCw3ICs0NCw3
IEBAIGNsYXNzIFdlYlN0cmluZzsKIGNsYXNzIFdlYldvcmtlcjsKIGNsYXNzIFdlYldvcmtlckNs
aWVudDsKIAotY2xhc3MgTmV3V2ViQ29tbW9uV29ya2VyQ2xpZW50IHsKK2NsYXNzIFdlYkNvbW1v
bldvcmtlckNsaWVudCB7CiBwdWJsaWM6CiAgICAgLy8gQ2FsbGVkIG9uIHRoZSBtYWluIHdlYmtp
dCB0aHJlYWQgYmVmb3JlIG9wZW5pbmcgYSB3ZWIgZGF0YWJhc2UuCiAgICAgdmlydHVhbCBib29s
IGFsbG93RGF0YWJhc2UoV2ViRnJhbWUqLCBjb25zdCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdl
YlN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkgPSAwOwpA
QCAtNTYsNjYgKzU2LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBvcGVuRmlsZVN5c3Rl
bShXZWJGaWxlU3lzdGVtOjpUeXBlLCBsb25nIGxvbmcgc2l6ZSwgYm9vbCBjcmVhdGUsIFdlYkZp
bGVTeXN0ZW1DYWxsYmFja3MqKSA9IDA7CiB9OwogCi0vLyBQcm92aWRlcyBhbiBpbnRlcmZhY2Ug
YmFjayB0byB0aGUgaW4tcGFnZSBzY3JpcHQgb2JqZWN0IGZvciBhIHdvcmtlci4KLS8vIFRoaXMg
aW50ZXJmYWNlIGNvbnRhaW5zIGNvbW1vbiBBUElzIHVzZWQgYnkgYm90aCBzaGFyZWQgYW5kIGRl
ZGljYXRlZAotLy8gd29ya2Vycy4KLS8vIEFsbCBmdW5jdGlvbnMgYXJlIGV4cGVjdGVkIHRvIGJl
IGNhbGxlZCBiYWNrIG9uIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkCi0vLyB0aGUgV29ya2VyIG9i
amVjdCwgdW5sZXNzIG5vdGVkLgotY2xhc3MgV2ViQ29tbW9uV29ya2VyQ2xpZW50IDogcHVibGlj
IE5ld1dlYkNvbW1vbldvcmtlckNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIHBv
c3RFeGNlcHRpb25Ub1dvcmtlck9iamVjdCgKLSAgICAgICAgY29uc3QgV2ViU3RyaW5nJiBlcnJv
clN0cmluZywgaW50IGxpbmVOdW1iZXIsCi0gICAgICAgIGNvbnN0IFdlYlN0cmluZyYgc291cmNl
VVJMKSA9IDA7Ci0KLSAgICAvLyBGSVhNRTogdGhlIGJlbG93IGlzIGZvciBjb21wYXRpYmlsaXR5
IG9ubHkgYW5kIHNob3VsZCBiZSAgIAotICAgIC8vIHJlbW92ZWQgb25jZSBDaHJvbWl1bSBpcyB1
cGRhdGVkIHRvIHJlbW92ZSBtZXNzYWdlCi0gICAgLy8gZGVzdGluYXRpb24gcGFyYW1ldGVyIDxo
dHRwOi8vd2Via2l0Lm9yZy9iLzM3MTU1Pi4KLSAgICB2aXJ0dWFsIHZvaWQgcG9zdENvbnNvbGVN
ZXNzYWdlVG9Xb3JrZXJPYmplY3QoaW50LCBpbnQgc291cmNlSWRlbnRpZmllciwgaW50IG1lc3Nh
Z2VUeXBlLCBpbnQgbWVzc2FnZUxldmVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJTdHJpbmcmIG1lc3NhZ2UsIGludCBsaW5lTnVt
YmVyLCBjb25zdCBXZWJTdHJpbmcmIHNvdXJjZVVSTCkgPSAwOwotCi0gICAgdmlydHVhbCB2b2lk
IHBvc3RDb25zb2xlTWVzc2FnZVRvV29ya2VyT2JqZWN0KGludCBzb3VyY2VJZGVudGlmaWVyLCBp
bnQgbWVzc2FnZVR5cGUsIGludCBtZXNzYWdlTGV2ZWwsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlN0cmluZyYgbWVzc2FnZSwgaW50
IGxpbmVOdW1iZXIsIGNvbnN0IFdlYlN0cmluZyYgc291cmNlVVJMKQotICAgIHsKLSAgICAgICAg
cG9zdENvbnNvbGVNZXNzYWdlVG9Xb3JrZXJPYmplY3QoMCwgc291cmNlSWRlbnRpZmllciwgbWVz
c2FnZVR5cGUsIG1lc3NhZ2VMZXZlbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbWVzc2FnZSwgbGluZU51bWJlciwgc291cmNlVVJMKTsKLSAgICB9Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgd29ya2VyQ29udGV4dENsb3NlZCgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
d29ya2VyQ29udGV4dERlc3Ryb3llZCgpID0gMDsKLQotICAgIC8vIFJldHVybnMgdGhlIG5vdGlm
aWNhdGlvbiBwcmVzZW50ZXIgZm9yIHRoaXMgd29ya2VyIGNvbnRleHQuICBQb2ludGVyCi0gICAg
Ly8gaXMgb3duZWQgYnkgdGhlIG9iamVjdCBpbXBsZW1lbnRpbmcgV2ViQ29tbW9uV29ya2VyQ2xp
ZW50LgotICAgIHZpcnR1YWwgV2ViTm90aWZpY2F0aW9uUHJlc2VudGVyKiBub3RpZmljYXRpb25Q
cmVzZW50ZXIoKSA9IDA7Ci0KLSAgICAvLyBUaGlzIGNhbiBiZSBjYWxsZWQgb24gYW55IHRocmVh
ZCB0byBjcmVhdGUgYSBuZXN0ZWQgV2ViV29ya2VyLgotICAgIC8vIFdlYlNoYXJlZFdvcmtlcnMg
YXJlIG5vdCBpbnN0YW50aWF0ZWQgdmlhIHRoaXMgQVBJIC0gaW5zdGVhZAotICAgIC8vIHRoZXkg
YXJlIGNyZWF0ZWQgdmlhIHRoZSBXZWJTaGFyZWRXb3JrZXJSZXBvc2l0b3J5LgotICAgIHZpcnR1
YWwgV2ViV29ya2VyKiBjcmVhdGVXb3JrZXIoV2ViV29ya2VyQ2xpZW50KiBjbGllbnQpID0gMDsK
LQotICAgIC8vIENhbGxlZCBvbiB0aGUgbWFpbiB3ZWJraXQgdGhyZWFkIGluIHRoZSB3b3JrZXIg
cHJvY2VzcyBkdXJpbmcgaW5pdGlhbGl6YXRpb24uCi0gICAgdmlydHVhbCBXZWJBcHBsaWNhdGlv
bkNhY2hlSG9zdCogY3JlYXRlQXBwbGljYXRpb25DYWNoZUhvc3QoV2ViQXBwbGljYXRpb25DYWNo
ZUhvc3RDbGllbnQqKSA9IDA7Ci0KLSAgICAvLyBDYWxsZWQgb24gdGhlIG1haW4gd2Via2l0IHRo
cmVhZCBiZWZvcmUgb3BlbmluZyBhIHdlYiBkYXRhYmFzZS4KLSAgICB2aXJ0dWFsIGJvb2wgYWxs
b3dEYXRhYmFzZShXZWJGcmFtZSosIGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgY29uc3QgV2ViU3Ry
aW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKSA9IDA7Ci0KLSAg
ICAvLyBDYWxsZWQgb24gdGhlIG1haW4gd2Via2l0IHRocmVhZCBiZWZvcmUgb3BlbmluZyBhIGZp
bGUgc3lzdGVtLgotICAgIHZpcnR1YWwgYm9vbCBhbGxvd0ZpbGVTeXN0ZW0oKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLy8gQ2FsbGVkIG9uIHRoZSBtYWluIHdl
YmtpdCB0aHJlYWQgYmVmb3JlIG9wZW5pbmcgYSBmaWxlIHN5c3RlbS4KLSAgICB2aXJ0dWFsIHZv
aWQgb3BlbkZpbGVTeXN0ZW0oV2ViRmlsZVN5c3RlbTo6VHlwZSwgbG9uZyBsb25nIHNpemUsIGJv
b2wgY3JlYXRlLCBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzKikKLSAgICB7Ci0gICAgICAgIFdFQktJ
VF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0
Y2hEZXZUb29sc01lc3NhZ2UoY29uc3QgV2ViU3RyaW5nJikgeyB9Ci0gICAgdmlydHVhbCB2b2lk
IHNhdmVEZXZUb29sc0FnZW50U3RhdGUoY29uc3QgV2ViU3RyaW5nJikgeyB9Ci0KLXByb3RlY3Rl
ZDoKLSAgICB+V2ViQ29tbW9uV29ya2VyQ2xpZW50KCkgeyB9Ci19OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2Vi
U2hhcmVkV29ya2VyLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTaGFyZWRX
b3JrZXIuaAppbmRleCA3ZDVkMDAzLi40NDdmN2Y0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJTaGFyZWRXb3JrZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJTaGFyZWRXb3JrZXIuaApAQCAtNDEsNyArNDEsNyBAQCBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIAogY2xhc3MgV2ViU3RyaW5nOwogY2xhc3MgV2ViTWVzc2FnZVBvcnRDaGFu
bmVsOwotY2xhc3MgV2ViQ29tbW9uV29ya2VyQ2xpZW50OworY2xhc3MgV2ViU2hhcmVkV29ya2Vy
Q2xpZW50OwogY2xhc3MgV2ViVVJMOwogCiAvLyBUaGlzIGlzIHRoZSBpbnRlcmZhY2UgdG8gYSBT
aGFyZWRXb3JrZXIgdGhyZWFkLgpAQCAtNDksNyArNDksNyBAQCBjbGFzcyBXZWJVUkw7CiBjbGFz
cyBXZWJTaGFyZWRXb3JrZXIgewogcHVibGljOgogICAgIC8vIEludm9rZWQgZnJvbSB0aGUgd29y
a2VyIHRocmVhZCB0byBpbnN0YW50aWF0ZSBhIFdlYlNoYXJlZFdvcmtlciB0aGF0IGludGVyYWN0
cyB3aXRoIHRoZSBXZWJLaXQgd29ya2VyIGNvbXBvbmVudHMuCi0gICAgV0VCS0lUX0VYUE9SVCBz
dGF0aWMgV2ViU2hhcmVkV29ya2VyKiBjcmVhdGUoV2ViQ29tbW9uV29ya2VyQ2xpZW50Kik7Cisg
ICAgV0VCS0lUX0VYUE9SVCBzdGF0aWMgV2ViU2hhcmVkV29ya2VyKiBjcmVhdGUoV2ViU2hhcmVk
V29ya2VyQ2xpZW50Kik7CiAKICAgICB2aXJ0dWFsIH5XZWJTaGFyZWRXb3JrZXIoKSB7fTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2hhcmVkV29ya2Vy
Q2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTaGFyZWRXb3JrZXJD
bGllbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTcwMGM2Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2hhcmVkV29y
a2VyQ2xpZW50LmgKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlNoYXJlZFdvcmtlckNsaWVu
dF9oCisjZGVmaW5lIFdlYlNoYXJlZFdvcmtlckNsaWVudF9oCisKKyNpbmNsdWRlICJXZWJDb21t
b25Xb3JrZXJDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJNZXNzYWdlUG9ydENoYW5uZWwuaCIKKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYk5vdGlmaWNhdGlvblByZXNlbnRlcjsKK2Ns
YXNzIFdlYlN0cmluZzsKK2NsYXNzIFdlYldvcmtlcjsKKworLy8gUHJvdmlkZXMgYW4gaW50ZXJm
YWNlIGJhY2sgdG8gdGhlIGluLXBhZ2Ugc2NyaXB0IG9iamVjdCBmb3IgYSB3b3JrZXIuCisvLyBB
bGwgZnVuY3Rpb25zIGFyZSBleHBlY3RlZCB0byBiZSBjYWxsZWQgYmFjayBvbiB0aGUgdGhyZWFk
IHRoYXQgY3JlYXRlZAorLy8gdGhlIFdvcmtlciBvYmplY3QsIHVubGVzcyBub3RlZC4KK2NsYXNz
IFdlYlNoYXJlZFdvcmtlckNsaWVudCA6IHB1YmxpYyBXZWJDb21tb25Xb3JrZXJDbGllbnQgewor
cHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBwb3N0TWVzc2FnZVRvV29ya2VyT2JqZWN0KAorICAg
ICAgICBjb25zdCBXZWJTdHJpbmcmLAorICAgICAgICBjb25zdCBXZWJNZXNzYWdlUG9ydENoYW5u
ZWxBcnJheSYpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBjb25maXJtTWVzc2FnZUZyb21Xb3Jr
ZXJPYmplY3QoYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
cmVwb3J0UGVuZGluZ0FjdGl2aXR5KGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KSA9IDA7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgcG9zdEV4Y2VwdGlvblRvV29ya2VyT2JqZWN0KAorICAgICAgICBjb25z
dCBXZWJTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbGluZU51bWJlciwKKyAgICAgICAgY29uc3Qg
V2ViU3RyaW5nJiBzb3VyY2VVUkwpID0gMDsKKworICAgIC8vIEZJWE1FOiB0aGUgYmVsb3cgaXMg
Zm9yIGNvbXBhdGliaWxpdHkgb25seSBhbmQgc2hvdWxkIGJlICAgCisgICAgLy8gcmVtb3ZlZCBv
bmNlIENocm9taXVtIGlzIHVwZGF0ZWQgdG8gcmVtb3ZlIG1lc3NhZ2UKKyAgICAvLyBkZXN0aW5h
dGlvbiBwYXJhbWV0ZXIgPGh0dHA6Ly93ZWJraXQub3JnL2IvMzcxNTU+LgorICAgIHZpcnR1YWwg
dm9pZCBwb3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdChpbnQsIGludCBzb3VyY2VJZGVu
dGlmaWVyLCBpbnQgbWVzc2FnZVR5cGUsIGludCBtZXNzYWdlTGV2ZWwsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlN0cmluZyYgbWVz
c2FnZSwgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFdlYlN0cmluZyYgc291cmNlVVJMKSA9IDA7CisK
KyAgICB2aXJ0dWFsIHZvaWQgcG9zdENvbnNvbGVNZXNzYWdlVG9Xb3JrZXJPYmplY3QoaW50IHNv
dXJjZUlkZW50aWZpZXIsIGludCBtZXNzYWdlVHlwZSwgaW50IG1lc3NhZ2VMZXZlbCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViU3Ry
aW5nJiBtZXNzYWdlLCBpbnQgbGluZU51bWJlciwgY29uc3QgV2ViU3RyaW5nJiBzb3VyY2VVUkwp
CisgICAgeworICAgICAgICBwb3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdCgwLCBzb3Vy
Y2VJZGVudGlmaWVyLCBtZXNzYWdlVHlwZSwgbWVzc2FnZUxldmVsLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VVUkwp
OworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCB3b3JrZXJDb250ZXh0Q2xvc2VkKCkgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCB3b3JrZXJDb250ZXh0RGVzdHJveWVkKCkgPSAwOworCisgICAgLy8g
UmV0dXJucyB0aGUgbm90aWZpY2F0aW9uIHByZXNlbnRlciBmb3IgdGhpcyB3b3JrZXIgY29udGV4
dC4gUG9pbnRlcgorICAgIC8vIGlzIG93bmVkIGJ5IHRoZSBvYmplY3QgaW1wbGVtZW50aW5nIFdl
YkNvbW1vbldvcmtlckNsaWVudC4KKyAgICB2aXJ0dWFsIFdlYk5vdGlmaWNhdGlvblByZXNlbnRl
ciogbm90aWZpY2F0aW9uUHJlc2VudGVyKCkgPSAwOworCisgICAgLy8gVGhpcyBjYW4gYmUgY2Fs
bGVkIG9uIGFueSB0aHJlYWQgdG8gY3JlYXRlIGEgbmVzdGVkIFdlYldvcmtlci4KKyAgICAvLyBX
ZWJTaGFyZWRXb3JrZXJzIGFyZSBub3QgaW5zdGFudGlhdGVkIHZpYSB0aGlzIEFQSSAtIGluc3Rl
YWQKKyAgICAvLyB0aGV5IGFyZSBjcmVhdGVkIHZpYSB0aGUgV2ViU2hhcmVkV29ya2VyUmVwb3Np
dG9yeS4KKyAgICB2aXJ0dWFsIFdlYldvcmtlciogY3JlYXRlV29ya2VyKFdlYlNoYXJlZFdvcmtl
ckNsaWVudCopID0gMDsKKworICAgIC8vIENhbGxlZCBvbiB0aGUgbWFpbiB3ZWJraXQgdGhyZWFk
IGluIHRoZSB3b3JrZXIgcHJvY2VzcyBkdXJpbmcgaW5pdGlhbGl6YXRpb24uCisgICAgdmlydHVh
bCBXZWJBcHBsaWNhdGlvbkNhY2hlSG9zdCogY3JlYXRlQXBwbGljYXRpb25DYWNoZUhvc3QoV2Vi
QXBwbGljYXRpb25DYWNoZUhvc3RDbGllbnQqKSA9IDA7CisKKyAgICAvLyBDYWxsZWQgb24gdGhl
IG1haW4gd2Via2l0IHRocmVhZCBiZWZvcmUgb3BlbmluZyBhIHdlYiBkYXRhYmFzZS4KKyAgICB2
aXJ0dWFsIGJvb2wgYWxsb3dEYXRhYmFzZShXZWJGcmFtZSosIGNvbnN0IFdlYlN0cmluZyYgbmFt
ZSwgY29uc3QgV2ViU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRT
aXplKSA9IDA7CisKKyAgICAvLyBDYWxsZWQgb24gdGhlIG1haW4gd2Via2l0IHRocmVhZCBiZWZv
cmUgb3BlbmluZyBhIGZpbGUgc3lzdGVtLgorICAgIHZpcnR1YWwgYm9vbCBhbGxvd0ZpbGVTeXN0
ZW0oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgLy8gQ2FsbGVk
IG9uIHRoZSBtYWluIHdlYmtpdCB0aHJlYWQgYmVmb3JlIG9wZW5pbmcgYSBmaWxlIHN5c3RlbS4K
KyAgICB2aXJ0dWFsIHZvaWQgb3BlbkZpbGVTeXN0ZW0oV2ViRmlsZVN5c3RlbTo6VHlwZSwgbG9u
ZyBsb25nIHNpemUsIGJvb2wgY3JlYXRlLCBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzKikKKyAgICB7
CisgICAgICAgIFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICB2aXJ0
dWFsIHZvaWQgZGlzcGF0Y2hEZXZUb29sc01lc3NhZ2UoY29uc3QgV2ViU3RyaW5nJikgeyB9Cisg
ICAgdmlydHVhbCB2b2lkIHNhdmVEZXZUb29sc0FnZW50U3RhdGUoY29uc3QgV2ViU3RyaW5nJikg
eyB9CisKK3Byb3RlY3RlZDoKKyAgICB+V2ViU2hhcmVkV29ya2VyQ2xpZW50KCkgeyB9Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9XZWJXb3JrZXJDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vcHVibGljL1dlYldvcmtlckNsaWVudC5oCmluZGV4IGViMmU2M2UuLjU5Njk5OWQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldvcmtlckNsaWVudC5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldvcmtlckNsaWVudC5oCkBA
IC0zMSwzMSArMzEsOCBAQAogI2lmbmRlZiBXZWJXb3JrZXJDbGllbnRfaAogI2RlZmluZSBXZWJX
b3JrZXJDbGllbnRfaAogCi0jaW5jbHVkZSAiV2ViQ29tbW9uV29ya2VyQ2xpZW50LmgiCi0jaW5j
bHVkZSAiV2ViTWVzc2FnZVBvcnRDaGFubmVsLmgiCisjaW5jbHVkZSAiV2ViU2hhcmVkV29ya2Vy
Q2xpZW50LmgiCiAKLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJOb3RpZmljYXRpb25Q
cmVzZW50ZXI7Ci1jbGFzcyBXZWJTdHJpbmc7Ci1jbGFzcyBXZWJXb3JrZXI7Ci0KLS8vIFByb3Zp
ZGVzIGFuIGludGVyZmFjZSBiYWNrIHRvIHRoZSBpbi1wYWdlIHNjcmlwdCBvYmplY3QgZm9yIGEg
d29ya2VyLgotLy8gQWxsIGZ1bmN0aW9ucyBhcmUgZXhwZWN0ZWQgdG8gYmUgY2FsbGVkIGJhY2sg
b24gdGhlIHRocmVhZCB0aGF0IGNyZWF0ZWQKLS8vIHRoZSBXb3JrZXIgb2JqZWN0LCB1bmxlc3Mg
bm90ZWQuCi1jbGFzcyBXZWJXb3JrZXJDbGllbnQgOiBwdWJsaWMgV2ViQ29tbW9uV29ya2VyQ2xp
ZW50IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgcG9zdE1lc3NhZ2VUb1dvcmtlck9iamVj
dCgKLSAgICAgICAgY29uc3QgV2ViU3RyaW5nJiwKLSAgICAgICAgY29uc3QgV2ViTWVzc2FnZVBv
cnRDaGFubmVsQXJyYXkmKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY29uZmlybU1lc3NhZ2VG
cm9tV29ya2VyT2JqZWN0KGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIHJlcG9ydFBlbmRpbmdBY3Rpdml0eShib29sIGhhc1BlbmRpbmdBY3Rpdml0eSkgPSAw
OwotCi1wcm90ZWN0ZWQ6Ci0gICAgfldlYldvcmtlckNsaWVudCgpIHsgfQotfTsKLQotfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisjZGVmaW5lIFdlYldvcmtlckNsaWVudCBXZWJTaGFyZWRXb3JrZXJD
bGllbnQKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9E
YXRhYmFzZU9ic2VydmVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0RhdGFiYXNl
T2JzZXJ2ZXIuY3BwCmluZGV4IDE4N2I1NWUuLjQwYjUwNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL0RhdGFiYXNlT2JzZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL0RhdGFiYXNlT2JzZXJ2ZXIuY3BwCkBAIC02NCw3ICs2NCw3IEBAIHN0
YXRpYyBjb25zdCBjaGFyIGFsbG93RGF0YWJhc2VNb2RlW10gPSAiYWxsb3dEYXRhYmFzZU1vZGUi
OwogLy8gY2FsbCBiYWNrIHRvIHRoZSB3b3JrZXIgY29udGV4dC4KIGNsYXNzIEFsbG93RGF0YWJh
c2VNYWluVGhyZWFkQnJpZGdlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEFsbG93RGF0
YWJhc2VNYWluVGhyZWFkQnJpZGdlPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8
QWxsb3dEYXRhYmFzZU1haW5UaHJlYWRCcmlkZ2U+IGNyZWF0ZShXZWJDb3JlOjpXb3JrZXJMb2Fk
ZXJQcm94eSogd29ya2VyTG9hZGVyUHJveHksIGNvbnN0IFN0cmluZyYgbW9kZSwgTmV3V2ViQ29t
bW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQsIFdlYkZyYW1lKiBmcmFtZSwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGlt
YXRlZFNpemUpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8QWxsb3dEYXRhYmFzZU1haW5UaHJlYWRC
cmlkZ2U+IGNyZWF0ZShXZWJDb3JlOjpXb3JrZXJMb2FkZXJQcm94eSogd29ya2VyTG9hZGVyUHJv
eHksIGNvbnN0IFN0cmluZyYgbW9kZSwgV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGll
bnQsIFdlYkZyYW1lKiBmcmFtZSwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRp
c3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpCiAgICAgewogICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IEFsbG93RGF0YWJhc2VNYWluVGhyZWFkQnJpZGdlKHdvcmtlckxv
YWRlclByb3h5LCBtb2RlLCBjb21tb25DbGllbnQsIGZyYW1lLCBuYW1lLCBkaXNwbGF5TmFtZSwg
ZXN0aW1hdGVkU2l6ZSkpOwogICAgIH0KQEAgLTkxLDcgKzkxLDcgQEAgcHVibGljOgogICAgIH0K
IAogcHJpdmF0ZToKLSAgICBBbGxvd0RhdGFiYXNlTWFpblRocmVhZEJyaWRnZShXZWJDb3JlOjpX
b3JrZXJMb2FkZXJQcm94eSogd29ya2VyTG9hZGVyUHJveHksIGNvbnN0IFN0cmluZyYgbW9kZSwg
TmV3V2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQsIFdlYkZyYW1lKiBmcmFtZSwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBs
b25nIGVzdGltYXRlZFNpemUpCisgICAgQWxsb3dEYXRhYmFzZU1haW5UaHJlYWRCcmlkZ2UoV2Vi
Q29yZTo6V29ya2VyTG9hZGVyUHJveHkqIHdvcmtlckxvYWRlclByb3h5LCBjb25zdCBTdHJpbmcm
IG1vZGUsIFdlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50LCBXZWJGcmFtZSogZnJh
bWUsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWdu
ZWQgbG9uZyBlc3RpbWF0ZWRTaXplKQogICAgICAgICA6IG1fd29ya2VyTG9hZGVyUHJveHkod29y
a2VyTG9hZGVyUHJveHkpCiAgICAgewogICAgICAgICBXZWJXb3JrZXJCYXNlOjpkaXNwYXRjaFRh
c2tUb01haW5UaHJlYWQoCkBAIC0xMDEsNyArMTAxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0aGlzKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYWxs
b3dEYXRhYmFzZVRhc2soV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
Y29uc3QgU3RyaW5nIG1vZGUsIE5ld1dlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50
LCBXZWJGcmFtZSogZnJhbWUsIGNvbnN0IFN0cmluZyBuYW1lLCBjb25zdCBTdHJpbmcgZGlzcGxh
eU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1JlZlB0cjxBbGxvd0RhdGFi
YXNlTWFpblRocmVhZEJyaWRnZT4gYnJpZGdlKQorICAgIHN0YXRpYyB2b2lkIGFsbG93RGF0YWJh
c2VUYXNrKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0
cmluZyBtb2RlLCBXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1vbkNsaWVudCwgV2ViRnJhbWUq
IGZyYW1lLCBjb25zdCBTdHJpbmcgbmFtZSwgY29uc3QgU3RyaW5nIGRpc3BsYXlOYW1lLCB1bnNp
Z25lZCBsb25nIGVzdGltYXRlZFNpemUsIFBhc3NSZWZQdHI8QWxsb3dEYXRhYmFzZU1haW5UaHJl
YWRCcmlkZ2U+IGJyaWRnZSkKICAgICB7CiAgICAgICAgIGJvb2wgYWxsb3dEYXRhYmFzZSA9IGNv
bW1vbkNsaWVudCA/IGNvbW1vbkNsaWVudC0+YWxsb3dEYXRhYmFzZShmcmFtZSwgbmFtZSwgZGlz
cGxheU5hbWUsIGVzdGltYXRlZFNpemUpIDogZmFsc2U7CiAgICAgICAgIGJyaWRnZS0+c2lnbmFs
Q29tcGxldGVkKG1vZGUsIGFsbG93RGF0YWJhc2UpOwpAQCAtMTE3LDcgKzExNyw3IEBAIHByaXZh
dGU6CiAgICAgV2ViQ29yZTo6V29ya2VyTG9hZGVyUHJveHkqIG1fd29ya2VyTG9hZGVyUHJveHk7
CiB9OwogCi1ib29sIGFsbG93RGF0YWJhc2VGb3JXb3JrZXIoTmV3V2ViQ29tbW9uV29ya2VyQ2xp
ZW50KiBjb21tb25DbGllbnQsIFdlYkZyYW1lKiBmcmFtZSwgY29uc3QgV2ViU3RyaW5nJiBuYW1l
LCBjb25zdCBXZWJTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNp
emUpCitib29sIGFsbG93RGF0YWJhc2VGb3JXb3JrZXIoV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBj
b21tb25DbGllbnQsIFdlYkZyYW1lKiBmcmFtZSwgY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBjb25z
dCBXZWJTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpCiB7
CiAgICAgV2ViQ29yZTo6V29ya2VyU2NyaXB0Q29udHJvbGxlciogY29udHJvbGxlciA9IFdlYkNv
cmU6OldvcmtlclNjcmlwdENvbnRyb2xsZXI6OmNvbnRyb2xsZXJGb3JDb250ZXh0KCk7CiAgICAg
V2ViQ29yZTo6V29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4dCA9IGNvbnRyb2xsZXItPndvcmtl
ckNvbnRleHQoKTsKQEAgLTE2NCw4ICsxNjQsOCBAQCBib29sIERhdGFiYXNlT2JzZXJ2ZXI6OmNh
bkVzdGFibGlzaERhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dAog
I2lmIEVOQUJMRShXT1JLRVJTKQogICAgICAgICBXb3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0
ID0gc3RhdGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwog
ICAgICAgICBXb3JrZXJMb2FkZXJQcm94eSogd29ya2VyTG9hZGVyUHJveHkgPSAmd29ya2VyQ29u
dGV4dC0+dGhyZWFkKCktPndvcmtlckxvYWRlclByb3h5KCk7Ci0gICAgICAgIE5ld1dlYldvcmtl
ckJhc2UqIHdlYldvcmtlciA9IHN0YXRpY19jYXN0PE5ld1dlYldvcmtlckJhc2UqPih3b3JrZXJM
b2FkZXJQcm94eSk7Ci0gICAgICAgIHJldHVybiBhbGxvd0RhdGFiYXNlRm9yV29ya2VyKHdlYldv
cmtlci0+bmV3Q29tbW9uQ2xpZW50KCksIHdlYldvcmtlci0+dmlldygpLT5tYWluRnJhbWUoKSwg
bmFtZSwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUpOworICAgICAgICBXZWJXb3JrZXJCYXNl
KiB3ZWJXb3JrZXIgPSBzdGF0aWNfY2FzdDxXZWJXb3JrZXJCYXNlKj4od29ya2VyTG9hZGVyUHJv
eHkpOworICAgICAgICByZXR1cm4gYWxsb3dEYXRhYmFzZUZvcldvcmtlcih3ZWJXb3JrZXItPmNv
bW1vbkNsaWVudCgpLCB3ZWJXb3JrZXItPnZpZXcoKS0+bWFpbkZyYW1lKCksIG5hbWUsIGRpc3Bs
YXlOYW1lLCBlc3RpbWF0ZWRTaXplKTsKICNlbHNlCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJG
YWN0b3J5QmFja2VuZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZh
Y3RvcnlCYWNrZW5kUHJveHkuY3BwCmluZGV4IDdhZTZlNjEuLmMyMjMwOWIgMTAwNzU1Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuY3Bw
CkBAIC05OSw3ICs5OSw3IEBAIHZvaWQgSURCRmFjdG9yeUJhY2tlbmRQcm94eTo6b3BlbkZyb21X
b3JrZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJDYWxsYmFja3MqIGNhCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgV29ya2VyTG9hZGVyUHJveHkqIHdvcmtlckxvYWRlclByb3h5ID0gJmNv
bnRleHQtPnRocmVhZCgpLT53b3JrZXJMb2FkZXJQcm94eSgpOwotICAgIE5ld1dlYldvcmtlckJh
c2UqIHdlYldvcmtlciA9IHN0YXRpY19jYXN0PE5ld1dlYldvcmtlckJhc2UqPih3b3JrZXJMb2Fk
ZXJQcm94eSk7CisgICAgV2ViV29ya2VyQmFzZSogd2ViV29ya2VyID0gc3RhdGljX2Nhc3Q8V2Vi
V29ya2VyQmFzZSo+KHdvcmtlckxvYWRlclByb3h5KTsKICAgICBXZWJGcmFtZSogd2ViRnJhbWUg
PSB3ZWJXb3JrZXItPnZpZXcoKS0+bWFpbkZyYW1lKCk7CiAgICAgbV93ZWJJREJGYWN0b3J5LT5v
cGVuKG5hbWUsIG5ldyBXZWJJREJDYWxsYmFja3NJbXBsKGNhbGxiYWNrcyksIG9yaWdpbiwgd2Vi
RnJhbWUsIGRhdGFEaXIpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9Mb2NhbEZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9Mb2NhbEZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAKaW5kZXggNzU3ZWY4Mi4uOWUwZTcz
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvTG9jYWxGaWxlU3lzdGVt
Q2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0xvY2FsRmlsZVN5
c3RlbUNocm9taXVtLmNwcApAQCAtNzksNyArNzksNyBAQCBzdGF0aWMgY29uc3QgY2hhciBvcGVu
RmlsZVN5c3RlbU1vZGVbXSA9ICJvcGVuRmlsZVN5c3RlbU1vZGUiOwogLy8gY2FsbCBiYWNrIHRv
IHRoZSB3b3JrZXIgY29udGV4dC4KIGNsYXNzIEFsbG93RmlsZVN5c3RlbU1haW5UaHJlYWRCcmlk
Z2UgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8QWxsb3dGaWxlU3lzdGVtTWFpblRocmVh
ZEJyaWRnZT4gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEFsbG93RmlsZVN5c3Rl
bU1haW5UaHJlYWRCcmlkZ2U+IGNyZWF0ZShXZWJDb3JlOjpXb3JrZXJMb2FkZXJQcm94eSogd29y
a2VyTG9hZGVyUHJveHksIGNvbnN0IFdURjo6U3RyaW5nJiBtb2RlLCBOZXdXZWJDb21tb25Xb3Jr
ZXJDbGllbnQqIGNvbW1vbkNsaWVudCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxBbGxvd0ZpbGVT
eXN0ZW1NYWluVGhyZWFkQnJpZGdlPiBjcmVhdGUoV2ViQ29yZTo6V29ya2VyTG9hZGVyUHJveHkq
IHdvcmtlckxvYWRlclByb3h5LCBjb25zdCBXVEY6OlN0cmluZyYgbW9kZSwgV2ViQ29tbW9uV29y
a2VyQ2xpZW50KiBjb21tb25DbGllbnQpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEFsbG93RmlsZVN5c3RlbU1haW5UaHJlYWRCcmlkZ2Uod29ya2VyTG9hZGVyUHJveHksIG1v
ZGUsIGNvbW1vbkNsaWVudCkpOwogICAgIH0KQEAgLTEwNiw3ICsxMDYsNyBAQCBwdWJsaWM6CiAg
ICAgfQogCiBwcml2YXRlOgotICAgIEFsbG93RmlsZVN5c3RlbU1haW5UaHJlYWRCcmlkZ2UoV2Vi
Q29yZTo6V29ya2VyTG9hZGVyUHJveHkqIHdvcmtlckxvYWRlclByb3h5LCBjb25zdCBXVEY6OlN0
cmluZyYgbW9kZSwgTmV3V2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQpCisgICAg
QWxsb3dGaWxlU3lzdGVtTWFpblRocmVhZEJyaWRnZShXZWJDb3JlOjpXb3JrZXJMb2FkZXJQcm94
eSogd29ya2VyTG9hZGVyUHJveHksIGNvbnN0IFdURjo6U3RyaW5nJiBtb2RlLCBXZWJDb21tb25X
b3JrZXJDbGllbnQqIGNvbW1vbkNsaWVudCkKICAgICAgICAgOiBtX3dvcmtlckxvYWRlclByb3h5
KHdvcmtlckxvYWRlclByb3h5KQogICAgICAgICAsIG1fbW9kZShtb2RlKQogICAgIHsKQEAgLTEx
NSw3ICsxMTUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFs
bG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcykpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBh
bGxvd0ZpbGVTeXN0ZW1UYXNrKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQsIE5ld1dlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50LCBQYXNzUmVmUHRyPEFs
bG93RmlsZVN5c3RlbU1haW5UaHJlYWRCcmlkZ2U+IGJyaWRnZSkKKyAgICBzdGF0aWMgdm9pZCBh
bGxvd0ZpbGVTeXN0ZW1UYXNrKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQsIFdlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50LCBQYXNzUmVmUHRyPEFsbG93
RmlsZVN5c3RlbU1haW5UaHJlYWRCcmlkZ2U+IGJyaWRnZSkKICAgICB7CiAgICAgICAgIGlmIChj
b21tb25DbGllbnQpCiAgICAgICAgICAgICBicmlkZ2UtPnNpZ25hbENvbXBsZXRlZChjb21tb25D
bGllbnQtPmFsbG93RmlsZVN5c3RlbSgpKTsKQEAgLTEzNCw3ICsxMzQsNyBAQCBwcml2YXRlOgog
ICAgIFdURjo6U3RyaW5nIG1fbW9kZTsKIH07CiAKLWJvb2wgYWxsb3dGaWxlU3lzdGVtRm9yV29y
a2VyKE5ld1dlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50KQorYm9vbCBhbGxvd0Zp
bGVTeXN0ZW1Gb3JXb3JrZXIoV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQpCiB7
CiAgICAgV29ya2VyU2NyaXB0Q29udHJvbGxlciogY29udHJvbGxlciA9IFdvcmtlclNjcmlwdENv
bnRyb2xsZXI6OmNvbnRyb2xsZXJGb3JDb250ZXh0KCk7CiAgICAgV29ya2VyQ29udGV4dCogd29y
a2VyQ29udGV4dCA9IGNvbnRyb2xsZXItPndvcmtlckNvbnRleHQoKTsKQEAgLTE1Nyw3ICsxNTcs
NyBAQCBib29sIGFsbG93RmlsZVN5c3RlbUZvcldvcmtlcihOZXdXZWJDb21tb25Xb3JrZXJDbGll
bnQqIGNvbW1vbkNsaWVudCkKICAgICByZXR1cm4gYnJpZGdlLT5yZXN1bHQoKTsKIH0KIAotdm9p
ZCBvcGVuRmlsZVN5c3RlbUZvcldvcmtlcihOZXdXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1v
bkNsaWVudCwgV2ViRmlsZVN5c3RlbTo6VHlwZSB0eXBlLCBsb25nIGxvbmcgc2l6ZSwgYm9vbCBj
cmVhdGUsIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3MqIGNhbGxiYWNrcywgYm9vbCBzeW5jaHJvbm91
cykKK3ZvaWQgb3BlbkZpbGVTeXN0ZW1Gb3JXb3JrZXIoV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBj
b21tb25DbGllbnQsIFdlYkZpbGVTeXN0ZW06OlR5cGUgdHlwZSwgbG9uZyBsb25nIHNpemUsIGJv
b2wgY3JlYXRlLCBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzKiBjYWxsYmFja3MsIGJvb2wgc3luY2hy
b25vdXMpCiB7CiAgICAgV29ya2VyU2NyaXB0Q29udHJvbGxlciogY29udHJvbGxlciA9IFdvcmtl
clNjcmlwdENvbnRyb2xsZXI6OmNvbnRyb2xsZXJGb3JDb250ZXh0KCk7CiAgICAgV29ya2VyQ29u
dGV4dCogd29ya2VyQ29udGV4dCA9IGNvbnRyb2xsZXItPndvcmtlckNvbnRleHQoKTsKQEAgLTIw
MywxMSArMjAzLDExIEBAIHN0YXRpYyB2b2lkIG9wZW5GaWxlU3lzdGVtSGVscGVyKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEFzeW5jRmlsZVN5c3RlCiAjaWYgRU5BQkxFKFdPUktF
UlMpCiAgICAgICAgIFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQgPSBzdGF0aWNfY2FzdDxX
b3JrZXJDb250ZXh0Kj4oY29udGV4dCk7CiAgICAgICAgIFdvcmtlckxvYWRlclByb3h5KiB3b3Jr
ZXJMb2FkZXJQcm94eSA9ICZ3b3JrZXJDb250ZXh0LT50aHJlYWQoKS0+d29ya2VyTG9hZGVyUHJv
eHkoKTsKLSAgICAgICAgTmV3V2ViV29ya2VyQmFzZSogd2ViV29ya2VyID0gc3RhdGljX2Nhc3Q8
TmV3V2ViV29ya2VyQmFzZSo+KHdvcmtlckxvYWRlclByb3h5KTsKLSAgICAgICAgaWYgKCFhbGxv
d0ZpbGVTeXN0ZW1Gb3JXb3JrZXIod2ViV29ya2VyLT5uZXdDb21tb25DbGllbnQoKSkpCisgICAg
ICAgIFdlYldvcmtlckJhc2UqIHdlYldvcmtlciA9IHN0YXRpY19jYXN0PFdlYldvcmtlckJhc2Uq
Pih3b3JrZXJMb2FkZXJQcm94eSk7CisgICAgICAgIGlmICghYWxsb3dGaWxlU3lzdGVtRm9yV29y
a2VyKHdlYldvcmtlci0+Y29tbW9uQ2xpZW50KCkpKQogICAgICAgICAgICAgYWxsb3dlZCA9IGZh
bHNlOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBvcGVuRmlsZVN5c3RlbUZvcldvcmtlcih3
ZWJXb3JrZXItPm5ld0NvbW1vbkNsaWVudCgpLCBzdGF0aWNfY2FzdDxXZWJGaWxlU3lzdGVtOjpU
eXBlPih0eXBlKSwgc2l6ZSwgY3JlYXRlID09IENyZWF0ZUlmTm90UHJlc2VudCwgbmV3IFdlYkZp
bGVTeXN0ZW1DYWxsYmFja3NJbXBsKGNhbGxiYWNrcywgdHlwZSwgY29udGV4dCwgc3luY2hyb25v
dXMpLCBzeW5jaHJvbm91cyk7CisgICAgICAgICAgICBvcGVuRmlsZVN5c3RlbUZvcldvcmtlcih3
ZWJXb3JrZXItPmNvbW1vbkNsaWVudCgpLCBzdGF0aWNfY2FzdDxXZWJGaWxlU3lzdGVtOjpUeXBl
Pih0eXBlKSwgc2l6ZSwgY3JlYXRlID09IENyZWF0ZUlmTm90UHJlc2VudCwgbmV3IFdlYkZpbGVT
eXN0ZW1DYWxsYmFja3NJbXBsKGNhbGxiYWNrcywgdHlwZSwgY29udGV4dCwgc3luY2hyb25vdXMp
LCBzeW5jaHJvbm91cyk7CiAKICNlbHNlCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2hhcmVkV29ya2VySW1w
bC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTaGFyZWRXb3JrZXJJbXBsLmNw
cAppbmRleCAxNDQ1ZjhlLi5kMGRhNDk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJTaGFyZWRXb3JrZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJTaGFyZWRXb3JrZXJJbXBsLmNwcApAQCAtMzIsMTMgKzMyLDMyIEBACiAjaW5j
bHVkZSAiV2ViU2hhcmVkV29ya2VySW1wbC5oIgogCiAjaW5jbHVkZSAiQ3Jvc3NUaHJlYWRUYXNr
LmgiCisjaW5jbHVkZSAiRGF0YWJhc2VUYXNrLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNp
bmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiTWVzc2FnZUV2ZW50LmgiCiAjaW5jbHVkZSAiTWVz
c2FnZVBvcnRDaGFubmVsLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwu
aCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQuaCIKICNpbmNsdWRlICJTaGFyZWRXb3JrZXJDb250ZXh0LmgiCiAjaW5jbHVkZSAi
U2hhcmVkV29ya2VyVGhyZWFkLmgiCisKKyNpbmNsdWRlICJXZWJEYXRhU291cmNlSW1wbC5oIgor
I2luY2x1ZGUgIldlYkZpbGVFcnJvci5oIgorI2luY2x1ZGUgIldlYkZyYW1lQ2xpZW50LmgiCisj
aW5jbHVkZSAiV2ViRnJhbWVJbXBsLmgiCisjaW5jbHVkZSAiV2ViTWVzc2FnZVBvcnRDaGFubmVs
LmgiCisjaW5jbHVkZSAiV2ViUnVudGltZUZlYXR1cmVzLmgiCisjaW5jbHVkZSAiV2ViU2V0dGlu
Z3MuaCIKKyNpbmNsdWRlICJXZWJTaGFyZWRXb3JrZXJDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJW
aWV3LmgiCisKKyNpbmNsdWRlICJXb3JrZXJDb250ZXh0LmgiCisjaW5jbHVkZSAiV29ya2VyTG9h
ZGVyUHJveHkuaCIKKyNpbmNsdWRlICJXb3JrZXJUaHJlYWQuaCIKKyNpbmNsdWRlIDx3dGYvTWFp
blRocmVhZC5oPgorCiAjaW5jbHVkZSAiV29ya2VyRGVidWdnZXJBZ2VudC5oIgogI2luY2x1ZGUg
Ildvcmtlckluc3BlY3RvckNvbnRyb2xsZXIuaCIKIApAQCAtNTEsMTcgKzcwLDI2OSBAQCB1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKIG5hbWVzcGFjZSBXZWJLaXQgewogCiAjaWYgRU5BQkxFKFNI
QVJFRF9XT1JLRVJTKQorLy8gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgb24gdGhlIG1haW4gdGhy
ZWFkIHRvIGZvcmNlIHRvIGluaXRpYWxpemUgc29tZSBzdGF0aWMKKy8vIHZhbHVlcyB1c2VkIGlu
IFdlYktpdCBiZWZvcmUgYW55IHdvcmtlciB0aHJlYWQgaXMgc3RhcnRlZC4gVGhpcyBpcyBiZWNh
dXNlIGluCisvLyBvdXIgd29ya2VyIHByb2Nlc3NzLCB3ZSBkbyBub3QgcnVuIGFueSBXZWJLaXQg
Y29kZSBpbiBtYWluIHRocmVhZCBhbmQgdGh1cworLy8gd2hlbiBtdWx0aXBsZSB3b3JrZXJzIHRy
eSB0byBzdGFydCBhdCB0aGUgc2FtZSB0aW1lLCB3ZSBtaWdodCBoaXQgY3Jhc2ggZHVlCisvLyB0
byBjb250ZW50aW9uIGZvciBpbml0aWFsaXppbmcgc3RhdGljIHZhbHVlcy4KK3N0YXRpYyB2b2lk
IGluaXRpYWxpemVXZWJLaXRTdGF0aWNWYWx1ZXMoKQoreworICAgIHN0YXRpYyBib29sIGluaXRp
YWxpemVkID0gZmFsc2U7CisgICAgaWYgKCFpbml0aWFsaXplZCkgeworICAgICAgICBpbml0aWFs
aXplZCA9IHRydWU7CisgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBoYXZlIHRvIHBhc3MgYSBVUkwg
d2l0aCB2YWxpZCBwcm90b2NvbCBpbiBvcmRlciB0byBmb2xsb3cKKyAgICAgICAgLy8gdGhlIHBh
dGggdG8gZG8gc3RhdGljIHZhbHVlIGluaXRpYWxpemF0aW9ucy4KKyAgICAgICAgUmVmUHRyPFNl
Y3VyaXR5T3JpZ2luPiBvcmlnaW4gPQorICAgICAgICAgICAgU2VjdXJpdHlPcmlnaW46OmNyZWF0
ZShLVVJMKFBhcnNlZFVSTFN0cmluZywgImh0dHA6Ly9sb2NhbGhvc3QiKSk7CisgICAgICAgIG9y
aWdpbi5yZWxlYXNlKCk7CisgICAgfQorfQogCi1XZWJTaGFyZWRXb3JrZXJJbXBsOjpXZWJTaGFy
ZWRXb3JrZXJJbXBsKFdlYkNvbW1vbldvcmtlckNsaWVudCogY2xpZW50KQotICAgIDogbV9jbGll
bnQoY2xpZW50KQorV2ViU2hhcmVkV29ya2VySW1wbDo6V2ViU2hhcmVkV29ya2VySW1wbChXZWJT
aGFyZWRXb3JrZXJDbGllbnQqIGNsaWVudCkKKyAgICA6IG1fd2ViVmlldygwKQorICAgICwgbV9h
c2tlZFRvVGVybWluYXRlKGZhbHNlKQorICAgICwgbV9jbGllbnQoY2xpZW50KQogICAgICwgbV9w
YXVzZVdvcmtlckNvbnRleHRPblN0YXJ0KGZhbHNlKQogeworICAgIGluaXRpYWxpemVXZWJLaXRT
dGF0aWNWYWx1ZXMoKTsKIH0KIAogV2ViU2hhcmVkV29ya2VySW1wbDo6fldlYlNoYXJlZFdvcmtl
ckltcGwoKQogeworICAgIEFTU0VSVChtX3dlYlZpZXcpOworICAgIFdlYkZyYW1lSW1wbCogd2Vi
RnJhbWUgPSBzdGF0aWNfY2FzdDxXZWJGcmFtZUltcGwqPihtX3dlYlZpZXctPm1haW5GcmFtZSgp
KTsKKyAgICBpZiAod2ViRnJhbWUpCisgICAgICAgIHdlYkZyYW1lLT5zZXRDbGllbnQoMCk7Cisg
ICAgbV93ZWJWaWV3LT5jbG9zZSgpOworfQorCit2b2lkIFdlYlNoYXJlZFdvcmtlckltcGw6OnN0
b3BXb3JrZXJUaHJlYWQoKQoreworICAgIGlmIChtX2Fza2VkVG9UZXJtaW5hdGUpCisgICAgICAg
IHJldHVybjsKKyAgICBtX2Fza2VkVG9UZXJtaW5hdGUgPSB0cnVlOworICAgIGlmIChtX3dvcmtl
clRocmVhZCkKKyAgICAgICAgbV93b3JrZXJUaHJlYWQtPnN0b3AoKTsKK30KKwordm9pZCBXZWJT
aGFyZWRXb3JrZXJJbXBsOjppbml0aWFsaXplTG9hZGVyKGNvbnN0IFdlYlVSTCYgdXJsKQorewor
ICAgIC8vIENyZWF0ZSAnc2hhZG93IHBhZ2UnLiBUaGlzIHBhZ2UgaXMgbmV2ZXIgZGlzcGxheWVk
LCBpdCBpcyB1c2VkIHRvIHByb3h5IHRoZQorICAgIC8vIGxvYWRpbmcgcmVxdWVzdHMgZnJvbSB0
aGUgd29ya2VyIGNvbnRleHQgdG8gdGhlIHJlc3Qgb2YgV2ViS2l0IGFuZCBDaHJvbWl1bQorICAg
IC8vIGluZnJhc3RydWN0dXJlLgorICAgIEFTU0VSVCghbV93ZWJWaWV3KTsKKyAgICBtX3dlYlZp
ZXcgPSBXZWJWaWV3OjpjcmVhdGUoMCk7CisgICAgbV93ZWJWaWV3LT5zZXR0aW5ncygpLT5zZXRP
ZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZUVuYWJsZWQoV2ViUnVudGltZUZlYXR1cmVzOjppc0Fw
cGxpY2F0aW9uQ2FjaGVFbmFibGVkKCkpOworICAgIC8vIEZJWE1FOiBTZXR0aW5ncyBpbmZvcm1h
dGlvbiBzaG91bGQgYmUgcGFzc2VkIHRvIHRoZSBXb3JrZXIgcHJvY2VzcyBmcm9tIEJyb3dzZXIg
cHJvY2VzcyB3aGVuIHRoZSB3b3JrZXIKKyAgICAvLyBpcyBjcmVhdGVkIChzaW1pbGFyIHRvIFJl
bmRlclRocmVhZDo6T25DcmVhdGVOZXdWaWV3KS4KKyAgICBtX3dlYlZpZXctPnNldHRpbmdzKCkt
PnNldEhpeGllNzZXZWJTb2NrZXRQcm90b2NvbEVuYWJsZWQoZmFsc2UpOworICAgIG1fd2ViVmll
dy0+aW5pdGlhbGl6ZU1haW5GcmFtZSh0aGlzKTsKKworICAgIFdlYkZyYW1lSW1wbCogd2ViRnJh
bWUgPSBzdGF0aWNfY2FzdDxXZWJGcmFtZUltcGwqPihtX3dlYlZpZXctPm1haW5GcmFtZSgpKTsK
KworICAgIC8vIENvbnN0cnVjdCBzdWJzdGl0dXRlIGRhdGEgc291cmNlIGZvciB0aGUgJ3NoYWRv
dyBwYWdlJy4gV2Ugb25seSBuZWVkIGl0CisgICAgLy8gdG8gaGF2ZSBzYW1lIG9yaWdpbiBhcyB0
aGUgd29ya2VyIHNvIHRoZSBsb2FkaW5nIGNoZWNrcyB3b3JrIGNvcnJlY3RseS4KKyAgICBDU3Ry
aW5nIGNvbnRlbnQoIiIpOworICAgIGludCBsZW4gPSBzdGF0aWNfY2FzdDxpbnQ+KGNvbnRlbnQu
bGVuZ3RoKCkpOworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZihTaGFyZWRCdWZmZXI6OmNy
ZWF0ZShjb250ZW50LmRhdGEoKSwgbGVuKSk7CisgICAgU3Vic3RpdHV0ZURhdGEgc3Vic3REYXRh
KGJ1ZiwgU3RyaW5nKCJ0ZXh0L2h0bWwiKSwgU3RyaW5nKCJVVEYtOCIpLCBLVVJMKCkpOworICAg
IHdlYkZyYW1lLT5mcmFtZSgpLT5sb2FkZXIoKS0+bG9hZChSZXNvdXJjZVJlcXVlc3QodXJsKSwg
c3Vic3REYXRhLCBmYWxzZSk7CisKKyAgICAvLyBUaGlzIGRvY3VtZW50IHdpbGwgYmUgdXNlZCBh
cyAnbG9hZGluZyBjb250ZXh0JyBmb3IgdGhlIHdvcmtlci4KKyAgICBtX2xvYWRpbmdEb2N1bWVu
dCA9IHdlYkZyYW1lLT5mcmFtZSgpLT5kb2N1bWVudCgpOworfQorCit2b2lkIFdlYlNoYXJlZFdv
cmtlckltcGw6OmRpZENyZWF0ZURhdGFTb3VyY2UoV2ViRnJhbWUqLCBXZWJEYXRhU291cmNlKiBk
cykKK3sKKyAgICAvLyBUZWxsIHRoZSBsb2FkZXIgdG8gbG9hZCB0aGUgZGF0YSBpbnRvIHRoZSAn
c2hhZG93IHBhZ2UnIHN5bmNocm9ub3VzbHksCisgICAgLy8gc28gd2UgY2FuIGdyYWIgdGhlIHJl
c3VsdGluZyBEb2N1bWVudCByaWdodCBhZnRlciBsb2FkLgorICAgIHN0YXRpY19jYXN0PFdlYkRh
dGFTb3VyY2VJbXBsKj4oZHMpLT5zZXREZWZlck1haW5SZXNvdXJjZURhdGFMb2FkKGZhbHNlKTsK
K30KKworV2ViQXBwbGljYXRpb25DYWNoZUhvc3QqIFdlYlNoYXJlZFdvcmtlckltcGw6OmNyZWF0
ZUFwcGxpY2F0aW9uQ2FjaGVIb3N0KFdlYkZyYW1lKiwgV2ViQXBwbGljYXRpb25DYWNoZUhvc3RD
bGllbnQqIGFwcGNhY2hlSG9zdENsaWVudCkKK3sKKyAgICBpZiAoY2xpZW50KCkpCisgICAgICAg
IHJldHVybiBjbGllbnQoKS0+Y3JlYXRlQXBwbGljYXRpb25DYWNoZUhvc3QoYXBwY2FjaGVIb3N0
Q2xpZW50KTsKKyAgICByZXR1cm4gMDsKK30KKworLy8gV29ya2VyT2JqZWN0UHJveHkgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwor
dm9pZCBXZWJTaGFyZWRXb3JrZXJJbXBsOjpwb3N0TWVzc2FnZVRvV29ya2VyT2JqZWN0KFBhc3NS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBtZXNzYWdlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVs
QXJyYXk+IGNoYW5uZWxzKQoreworICAgIFdlYldvcmtlckJhc2U6OmRpc3BhdGNoVGFza1RvTWFp
blRocmVhZChjcmVhdGVDYWxsYmFja1Rhc2soJnBvc3RNZXNzYWdlVGFzaywgQWxsb3dDcm9zc1Ro
cmVhZEFjY2Vzcyh0aGlzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1lc3NhZ2UtPnRvV2lyZVN0cmluZygpLCBjaGFubmVscykpOworfQorCit2b2lk
IFdlYlNoYXJlZFdvcmtlckltcGw6OnBvc3RNZXNzYWdlVGFzayhTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViU2hh
cmVkV29ya2VySW1wbCogdGhpc1B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFN0cmluZyBtZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
UGFzc093blB0cjxNZXNzYWdlUG9ydENoYW5uZWxBcnJheT4gY2hhbm5lbHMpCit7CisgICAgaWYg
KCF0aGlzUHRyLT5jbGllbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViTWVzc2FnZVBv
cnRDaGFubmVsQXJyYXkgd2ViQ2hhbm5lbHMoY2hhbm5lbHMgPyBjaGFubmVscy0+c2l6ZSgpIDog
MCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3ZWJDaGFubmVscy5zaXplKCk7ICsraSkg
eworICAgICAgICB3ZWJDaGFubmVsc1tpXSA9ICgqY2hhbm5lbHMpW2ldLT5jaGFubmVsKCktPndl
YkNoYW5uZWxSZWxlYXNlKCk7CisgICAgICAgIHdlYkNoYW5uZWxzW2ldLT5zZXRDbGllbnQoMCk7
CisgICAgfQorCisgICAgdGhpc1B0ci0+Y2xpZW50KCktPnBvc3RNZXNzYWdlVG9Xb3JrZXJPYmpl
Y3QobWVzc2FnZSwgd2ViQ2hhbm5lbHMpOworfQorCit2b2lkIFdlYlNoYXJlZFdvcmtlckltcGw6
OnBvc3RFeGNlcHRpb25Ub1dvcmtlck9iamVjdChjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsaW5l
TnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpCit7CisgICAgV2ViV29ya2VyQmFzZTo6ZGlzcGF0Y2hU
YXNrVG9NYWluVGhyZWFkKAorICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJnBvc3RFeGNlcHRp
b25UYXNrLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHRoaXMpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZXJyb3JNZXNzYWdlLCBsaW5lTnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc291cmNlVVJMKSk7Cit9CisKK3ZvaWQgV2ViU2hhcmVkV29ya2VySW1wbDo6cG9zdEV4
Y2VwdGlvblRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViU2hhcmVkV29ya2VySW1wbCogdGhpc1B0ciwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBlcnJv
ck1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsaW5l
TnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCkKK3sKKyAgICBpZiAoIXRoaXNQdHItPmNs
aWVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICB0aGlzUHRyLT5jbGllbnQoKS0+cG9zdEV4
Y2VwdGlvblRvV29ya2VyT2JqZWN0KGVycm9yTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VV
UkwpOworfQorCit2b2lkIFdlYlNoYXJlZFdvcmtlckltcGw6OnBvc3RDb25zb2xlTWVzc2FnZVRv
V29ya2VyT2JqZWN0KE1lc3NhZ2VTb3VyY2Ugc291cmNlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlVHlwZSB0eXBlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlTGV2
ZWwgbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpbmVOdW1iZXIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgc291
cmNlVVJMKQoreworICAgIFdlYldvcmtlckJhc2U6OmRpc3BhdGNoVGFza1RvTWFpblRocmVhZChj
cmVhdGVDYWxsYmFja1Rhc2soJnBvc3RDb25zb2xlTWVzc2FnZVRhc2ssIEFsbG93Q3Jvc3NUaHJl
YWRBY2Nlc3ModGhpcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzb3VyY2UsIHR5cGUsIGxldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSwgbGluZU51bWJlciwgc291cmNlVVJMKSk7Cit9
CisKK3ZvaWQgV2ViU2hhcmVkV29ya2VySW1wbDo6cG9zdENvbnNvbGVNZXNzYWdlVGFzayhTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFdlYlNoYXJlZFdvcmtlckltcGwqIHRoaXNQdHIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvdXJjZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdHlwZSwgaW50IGxldmVsLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgbWVz
c2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGlu
ZU51bWJlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBTdHJpbmcmIHNvdXJjZVVSTCkKK3sKKyAgICBpZiAoIXRoaXNQdHItPmNsaWVudCgpKQorICAg
ICAgICByZXR1cm47CisgICAgdGhpc1B0ci0+Y2xpZW50KCktPnBvc3RDb25zb2xlTWVzc2FnZVRv
V29ya2VyT2JqZWN0KHNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSwgbGV2ZWwsIG1lc3NhZ2UsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxp
bmVOdW1iZXIsIHNvdXJjZVVSTCk7Cit9CisKK3ZvaWQgV2ViU2hhcmVkV29ya2VySW1wbDo6cG9z
dE1lc3NhZ2VUb1BhZ2VJbnNwZWN0b3IoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIFdl
YldvcmtlckJhc2U6OmRpc3BhdGNoVGFza1RvTWFpblRocmVhZChjcmVhdGVDYWxsYmFja1Rhc2so
JnBvc3RNZXNzYWdlVG9QYWdlSW5zcGVjdG9yVGFzaywgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyh0
aGlzKSwgbWVzc2FnZSkpOworfQorCit2b2lkIFdlYlNoYXJlZFdvcmtlckltcGw6OnBvc3RNZXNz
YWdlVG9QYWdlSW5zcGVjdG9yVGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViU2hhcmVk
V29ya2VySW1wbCogdGhpc1B0ciwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIGlmICgh
dGhpc1B0ci0+Y2xpZW50KCkpCisgICAgICAgIHJldHVybjsKKyAgICB0aGlzUHRyLT5jbGllbnQo
KS0+ZGlzcGF0Y2hEZXZUb29sc01lc3NhZ2UobWVzc2FnZSk7Cit9CisKK3ZvaWQgV2ViU2hhcmVk
V29ya2VySW1wbDo6dXBkYXRlSW5zcGVjdG9yU3RhdGVDb29raWUoY29uc3QgV1RGOjpTdHJpbmcm
IGNvb2tpZSkKK3sKKyAgICBXZWJXb3JrZXJCYXNlOjpkaXNwYXRjaFRhc2tUb01haW5UaHJlYWQo
Y3JlYXRlQ2FsbGJhY2tUYXNrKCZ1cGRhdGVJbnNwZWN0b3JTdGF0ZUNvb2tpZVRhc2ssIEFsbG93
Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcyksIGNvb2tpZSkpOworfQorCit2b2lkIFdlYlNoYXJlZFdv
cmtlckltcGw6OnVwZGF0ZUluc3BlY3RvclN0YXRlQ29va2llVGFzayhTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgV2ViU2hhcmVkV29ya2VySW1wbCogdGhpc1B0ciwgY29uc3QgU3RyaW5nJiBjb29r
aWUpCit7CisgICAgaWYgKCF0aGlzUHRyLT5jbGllbnQoKSkKKyAgICAgICAgcmV0dXJuOworICAg
IHRoaXNQdHItPmNsaWVudCgpLT5zYXZlRGV2VG9vbHNBZ2VudFN0YXRlKGNvb2tpZSk7Cit9CisK
K3ZvaWQgV2ViU2hhcmVkV29ya2VySW1wbDo6Y29uZmlybU1lc3NhZ2VGcm9tV29ya2VyT2JqZWN0
KGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KQoreworICAgIFdlYldvcmtlckJhc2U6OmRpc3BhdGNo
VGFza1RvTWFpblRocmVhZChjcmVhdGVDYWxsYmFja1Rhc2soJmNvbmZpcm1NZXNzYWdlVGFzaywg
QWxsb3dDcm9zc1RocmVhZEFjY2Vzcyh0aGlzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGhhc1BlbmRpbmdBY3Rpdml0eSkpOworfQorCit2b2lkIFdl
YlNoYXJlZFdvcmtlckltcGw6OmNvbmZpcm1NZXNzYWdlVGFzayhTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2Vi
U2hhcmVkV29ya2VySW1wbCogdGhpc1B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KQoreworICAgIGlmICghdGhpc1B0ci0+
Y2xpZW50KCkpCisgICAgICAgIHJldHVybjsKKyAgICB0aGlzUHRyLT5jbGllbnQoKS0+Y29uZmly
bU1lc3NhZ2VGcm9tV29ya2VyT2JqZWN0KGhhc1BlbmRpbmdBY3Rpdml0eSk7Cit9CisKK3ZvaWQg
V2ViU2hhcmVkV29ya2VySW1wbDo6cmVwb3J0UGVuZGluZ0FjdGl2aXR5KGJvb2wgaGFzUGVuZGlu
Z0FjdGl2aXR5KQoreworICAgIFdlYldvcmtlckJhc2U6OmRpc3BhdGNoVGFza1RvTWFpblRocmVh
ZChjcmVhdGVDYWxsYmFja1Rhc2soJnJlcG9ydFBlbmRpbmdBY3Rpdml0eVRhc2ssCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbGxvd0Nyb3NzVGhyZWFk
QWNjZXNzKHRoaXMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaGFzUGVuZGluZ0FjdGl2aXR5KSk7Cit9CisKK3ZvaWQgV2ViU2hhcmVkV29ya2VySW1w
bDo6cmVwb3J0UGVuZGluZ0FjdGl2aXR5VGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYlNo
YXJlZFdvcmtlckltcGwqIHRoaXNQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkpCit7CisgICAgaWYgKCF0aGlz
UHRyLT5jbGllbnQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIHRoaXNQdHItPmNsaWVudCgpLT5y
ZXBvcnRQZW5kaW5nQWN0aXZpdHkoaGFzUGVuZGluZ0FjdGl2aXR5KTsKK30KKwordm9pZCBXZWJT
aGFyZWRXb3JrZXJJbXBsOjp3b3JrZXJDb250ZXh0Q2xvc2VkKCkKK3sKKyAgICBXZWJXb3JrZXJC
YXNlOjpkaXNwYXRjaFRhc2tUb01haW5UaHJlYWQoY3JlYXRlQ2FsbGJhY2tUYXNrKCZ3b3JrZXJD
b250ZXh0Q2xvc2VkVGFzaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcykpKTsKK30KKwordm9pZCBXZWJT
aGFyZWRXb3JrZXJJbXBsOjp3b3JrZXJDb250ZXh0Q2xvc2VkVGFzayhTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBXZWJTaGFyZWRXb3JrZXJJbXBsKiB0aGlzUHRyKQoreworICAgIGlmICh0aGlzUHRyLT5j
bGllbnQoKSkKKyAgICAgICAgdGhpc1B0ci0+Y2xpZW50KCktPndvcmtlckNvbnRleHRDbG9zZWQo
KTsKKworICAgIHRoaXNQdHItPnN0b3BXb3JrZXJUaHJlYWQoKTsKK30KKwordm9pZCBXZWJTaGFy
ZWRXb3JrZXJJbXBsOjp3b3JrZXJDb250ZXh0RGVzdHJveWVkKCkKK3sKKyAgICBXZWJXb3JrZXJC
YXNlOjpkaXNwYXRjaFRhc2tUb01haW5UaHJlYWQoY3JlYXRlQ2FsbGJhY2tUYXNrKCZ3b3JrZXJD
b250ZXh0RGVzdHJveWVkVGFzaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcykpKTsKK30KKwordm9pZCBX
ZWJTaGFyZWRXb3JrZXJJbXBsOjp3b3JrZXJDb250ZXh0RGVzdHJveWVkVGFzayhTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBXZWJTaGFyZWRXb3JrZXJJbXBsKiB0aGlzUHRyKQoreworICAgIGlmICh0
aGlzUHRyLT5jbGllbnQoKSkKKyAgICAgICAgdGhpc1B0ci0+Y2xpZW50KCktPndvcmtlckNvbnRl
eHREZXN0cm95ZWQoKTsKKyAgICAvLyBUaGUgbGlmZXRpbWUgb2YgdGhpcyBwcm94eSBpcyBjb250
cm9sbGVkIGJ5IHRoZSB3b3JrZXIgY29udGV4dC4KKyAgICBkZWxldGUgdGhpc1B0cjsKK30KKwor
Ly8gV29ya2VyTG9hZGVyUHJveHkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordm9pZCBXZWJTaGFyZWRXb3JrZXJJbXBsOjpwb3N0
VGFza1RvTG9hZGVyKFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gdGFz
aykKK3sKKyAgICBBU1NFUlQobV9sb2FkaW5nRG9jdW1lbnQtPmlzRG9jdW1lbnQoKSk7CisgICAg
bV9sb2FkaW5nRG9jdW1lbnQtPnBvc3RUYXNrKHRhc2spOworfQorCit2b2lkIFdlYlNoYXJlZFdv
cmtlckltcGw6OnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyQ29udGV4dCgKKyAgICBQYXNzT3duUHRy
PFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2ssIGNvbnN0IFN0cmluZyYgbW9kZSkK
K3sKKyAgICBtX3dvcmtlclRocmVhZC0+cnVuTG9vcCgpLnBvc3RUYXNrRm9yTW9kZSh0YXNrLCBt
b2RlKTsKIH0KIAorCisKIGJvb2wgV2ViU2hhcmVkV29ya2VySW1wbDo6aXNTdGFydGVkKCkKIHsK
ICAgICAvLyBTaG91bGQgbm90IGV2ZXIgYmUgY2FsbGVkIGZyb20gdGhlIHdvcmtlciB0aHJlYWQg
KHRoaXMgQVBJIGlzIG9ubHkgY2FsbGVkIG9uIFdlYlNoYXJlZFdvcmtlclByb3h5IG9uIHRoZSBy
ZW5kZXJlciB0aHJlYWQpLgpAQCAtMTc3LDE5ICs0NDgsMTAgQEAgdm9pZCBXZWJTaGFyZWRXb3Jr
ZXJJbXBsOjpkaXNwYXRjaERldlRvb2xzTWVzc2FnZShjb25zdCBXZWJTdHJpbmcmIG1lc3NhZ2Up
CiAgICAgd29ya2VyVGhyZWFkKCktPnJ1bkxvb3AoKS5wb3N0VGFza0Zvck1vZGUoY3JlYXRlQ2Fs
bGJhY2tUYXNrKGRpc3BhdGNoT25JbnNwZWN0b3JCYWNrZW5kVGFzaywgU3RyaW5nKG1lc3NhZ2Up
KSwgV29ya2VyRGVidWdnZXJBZ2VudDo6ZGVidWdnZXJUYXNrTW9kZSk7CiB9CiAKLVdlYldvcmtl
ckNsaWVudCogV2ViU2hhcmVkV29ya2VySW1wbDo6Y2xpZW50KCkKLXsKLSAgICAvLyBXZSBzaG91
bGQgbmV2ZXIgYmUgYXNrZWQgZm9yIGEgV2ViV29ya2VyQ2xpZW50IChvbmx5IGRlZGljYXRlZCB3
b3JrZXJzIGhhdmUgYW4gYXNzb2NpYXRlZCBXZWJXb3JrZXJDbGllbnQpLgotICAgIC8vIEl0IHNo
b3VsZCBub3QgYmUgcG9zc2libGUgZm9yIFNoYXJlZFdvcmtlckNvbnRleHQgdG8gZ2VuZXJhdGUg
YW4gQVBJIGNhbGwgb3V0c2lkZSB0aG9zZSBzdXBwb3J0ZWQgYnkgV2ViQ29tbW9uV29ya2VyQ2xp
ZW50LgotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAwOwotfQotCi1XZWJT
aGFyZWRXb3JrZXIqIFdlYlNoYXJlZFdvcmtlcjo6Y3JlYXRlKFdlYkNvbW1vbldvcmtlckNsaWVu
dCogY2xpZW50KQorV2ViU2hhcmVkV29ya2VyKiBXZWJTaGFyZWRXb3JrZXI6OmNyZWF0ZShXZWJT
aGFyZWRXb3JrZXJDbGllbnQqIGNsaWVudCkKIHsKICAgICByZXR1cm4gbmV3IFdlYlNoYXJlZFdv
cmtlckltcGwoY2xpZW50KTsKIH0KLQogI2VuZGlmIC8vIEVOQUJMRShTSEFSRURfV09SS0VSUykK
IAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJTaGFyZWRXb3JrZXJJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJTaGFyZWRXb3JrZXJJbXBsLmgKaW5kZXggNDM3YmIyYi4uODNkMzYxYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2hhcmVkV29ya2VySW1wbC5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNoYXJlZFdvcmtlckltcGwuaApAQCAtMzQs
MjAgKzM0LDY0IEBACiAjaW5jbHVkZSAiV2ViU2hhcmVkV29ya2VyLmgiCiAKICNpZiBFTkFCTEUo
U0hBUkVEX1dPUktFUlMpCi0KICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCi0K
KyNpbmNsdWRlICJXZWJDb21tb25Xb3JrZXJDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJGcmFtZUNs
aWVudC5oIgogI2luY2x1ZGUgIldlYldvcmtlckJhc2UuaCIKKyNpbmNsdWRlICJXZWJXb3JrZXJD
bGllbnQuaCIKKyNpbmNsdWRlICJXb3JrZXJMb2FkZXJQcm94eS5oIgorI2luY2x1ZGUgIldvcmtl
ck9iamVjdFByb3h5LmgiCisjaW5jbHVkZSAiV29ya2VyVGhyZWFkLmgiCisjaW5jbHVkZSA8d3Rm
L1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKLW5hbWVzcGFjZSBXZWJL
aXQgewogCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYkFwcGxpY2F0aW9uQ2FjaGVIb3N0
OworY2xhc3MgV2ViQXBwbGljYXRpb25DYWNoZUhvc3RDbGllbnQ7CitjbGFzcyBXZWJXb3JrZXJD
bGllbnQ7CitjbGFzcyBXZWJTZWN1cml0eU9yaWdpbjsKK2NsYXNzIFdlYlN0cmluZzsKK2NsYXNz
IFdlYlVSTDsKK2NsYXNzIFdlYlZpZXc7CitjbGFzcyBXZWJXb3JrZXI7CitjbGFzcyBXZWJTaGFy
ZWRXb3JrZXJDbGllbnQ7CiAvLyBUaGlzIGNsYXNzIGlzIHVzZWQgYnkgdGhlIHdvcmtlciBwcm9j
ZXNzIGNvZGUgdG8gdGFsayB0byB0aGUgV2ViQ29yZTo6U2hhcmVkV29ya2VyIGltcGxlbWVudGF0
aW9uLgogLy8gSXQgY2FuJ3QgdXNlIGl0IGRpcmVjdGx5IHNpbmNlIGl0IHVzZXMgV2ViS2l0IHR5
cGVzLCBzbyB0aGlzIGNsYXNzIGNvbnZlcnRzIHRoZSBkYXRhIHR5cGVzLgogLy8gV2hlbiB0aGUg
V2ViQ29yZTo6U2hhcmVkV29ya2VyIG9iamVjdCB3YW50cyB0byBjYWxsIFdlYkNvcmU6Oldvcmtl
clJlcG9ydGluZ1Byb3h5LCB0aGlzIGNsYXNzIHdpbGwKIC8vIGNvbnZlcnQgdG8gQ2hyb21lIGRh
dGEgdHlwZXMgZmlyc3QgYW5kIHRoZW4gY2FsbCB0aGUgc3VwcGxpZWQgV2ViQ29tbW9uV29ya2Vy
Q2xpZW50LgotY2xhc3MgV2ViU2hhcmVkV29ya2VySW1wbCA6IHB1YmxpYyBXZWJXb3JrZXJCYXNl
LCBwdWJsaWMgV2ViU2hhcmVkV29ya2VyIHsKK2NsYXNzIFdlYlNoYXJlZFdvcmtlckltcGwgOiBw
dWJsaWMgV2ViQ29yZTo6V29ya2VyT2JqZWN0UHJveHkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgLCBwdWJsaWMgV2ViV29ya2VyQmFzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAsIHB1
YmxpYyBXZWJGcmFtZUNsaWVudAorICAgICAgICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBX
ZWJTaGFyZWRXb3JrZXIgewogcHVibGljOgotICAgIGV4cGxpY2l0IFdlYlNoYXJlZFdvcmtlcklt
cGwoV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjbGllbnQpOworICAgIGV4cGxpY2l0IFdlYlNoYXJl
ZFdvcmtlckltcGwoV2ViU2hhcmVkV29ya2VyQ2xpZW50Kik7CisKKyAgICB2aXJ0dWFsIHZvaWQg
cG9zdE1lc3NhZ2VUb1dvcmtlck9iamVjdCgKKyAgICAgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpT
ZXJpYWxpemVkU2NyaXB0VmFsdWU+LAorICAgICAgICBQYXNzT3duUHRyPFdlYkNvcmU6Ok1lc3Nh
Z2VQb3J0Q2hhbm5lbEFycmF5Pik7CisgICAgdmlydHVhbCB2b2lkIHBvc3RFeGNlcHRpb25Ub1dv
cmtlck9iamVjdCgKKyAgICAgICAgY29uc3QgV1RGOjpTdHJpbmcmLCBpbnQsIGNvbnN0IFdURjo6
U3RyaW5nJik7CisgICAgdmlydHVhbCB2b2lkIHBvc3RDb25zb2xlTWVzc2FnZVRvV29ya2VyT2Jq
ZWN0KAorICAgICAgICBXZWJDb3JlOjpNZXNzYWdlU291cmNlLCBXZWJDb3JlOjpNZXNzYWdlVHlw
ZSwKKyAgICAgICAgV2ViQ29yZTo6TWVzc2FnZUxldmVsLCBjb25zdCBXVEY6OlN0cmluZyYsIGlu
dCwgY29uc3QgV1RGOjpTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcG9zdE1lc3NhZ2VUb1Bh
Z2VJbnNwZWN0b3IoY29uc3QgV1RGOjpTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRl
SW5zcGVjdG9yU3RhdGVDb29raWUoY29uc3QgV1RGOjpTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZv
aWQgY29uZmlybU1lc3NhZ2VGcm9tV29ya2VyT2JqZWN0KGJvb2wpOworICAgIHZpcnR1YWwgdm9p
ZCByZXBvcnRQZW5kaW5nQWN0aXZpdHkoYm9vbCk7CisgICAgdmlydHVhbCB2b2lkIHdvcmtlckNv
bnRleHRDbG9zZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgd29ya2VyQ29udGV4dERlc3Ryb3llZCgp
OworICAgIHZpcnR1YWwgV2ViVmlldyogdmlldygpIGNvbnN0IHsgcmV0dXJuIG1fd2ViVmlldzsg
fQorCisgICAgLy8gV2ViQ29yZTo6V29ya2VyTG9hZGVyUHJveHkgbWV0aG9kczoKKyAgICB2aXJ0
dWFsIHZvaWQgcG9zdFRhc2tUb0xvYWRlcihQYXNzT3duUHRyPFdlYkNvcmU6OlNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQ6OlRhc2s+KTsKKyAgICB2aXJ0dWFsIHZvaWQgcG9zdFRhc2tGb3JNb2RlVG9X
b3JrZXJDb250ZXh0KAorICAgICAgICBQYXNzT3duUHRyPFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQ6OlRhc2s+LCBjb25zdCBXVEY6OlN0cmluZyYgbW9kZSk7CisKKyAgICAvLyBXZWJG
cmFtZUNsaWVudCBtZXRob2RzIHRvIHN1cHBvcnQgcmVzb3VyY2UgbG9hZGluZyB0aHJ1IHRoZSAn
c2hhZG93IHBhZ2UnLgorICAgIHZpcnR1YWwgdm9pZCBkaWRDcmVhdGVEYXRhU291cmNlKFdlYkZy
YW1lKiwgV2ViRGF0YVNvdXJjZSopOworICAgIHZpcnR1YWwgV2ViQXBwbGljYXRpb25DYWNoZUhv
c3QqIGNyZWF0ZUFwcGxpY2F0aW9uQ2FjaGVIb3N0KFdlYkZyYW1lKiwgV2ViQXBwbGljYXRpb25D
YWNoZUhvc3RDbGllbnQqKTsKKwogCiAgICAgLy8gV2ViU2hhcmVkV29ya2VyIG1ldGhvZHM6CiAg
ICAgdmlydHVhbCBib29sIGlzU3RhcnRlZCgpOwpAQCAtNjMsMTkgKzEwNyw3MiBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB2b2lkIGRldGFjaERldlRvb2xzKCk7CiAgICAgdmlydHVhbCB2b2lkIGRp
c3BhdGNoRGV2VG9vbHNNZXNzYWdlKGNvbnN0IFdlYlN0cmluZyYpOwogCi0gICAgLy8gV2ViV29y
a2VyQmFzZSBtZXRob2RzOgotICAgIFdlYldvcmtlckNsaWVudCogY2xpZW50KCk7Ci0gICAgV2Vi
Q29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQoKSB7IHJldHVybiBtX2NsaWVudDsgfQog
CiAgICAgLy8gTmV3V2ViV29ya2VyQmFzZSBtZXRob2RzOgotICAgIE5ld1dlYkNvbW1vbldvcmtl
ckNsaWVudCogbmV3Q29tbW9uQ2xpZW50KCkgeyByZXR1cm4gbV9jbGllbnQ7IH0KKyAgICBXZWJD
b21tb25Xb3JrZXJDbGllbnQqIGNvbW1vbkNsaWVudCgpIHsgcmV0dXJuIG1fY2xpZW50OyB9CiAK
IHByaXZhdGU6CiAgICAgdmlydHVhbCB+V2ViU2hhcmVkV29ya2VySW1wbCgpOwogCi0gICAgc3Rh
dGljIHZvaWQgY29ubmVjdFRhc2soV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBh
c3NPd25QdHI8V2ViQ29yZTo6TWVzc2FnZVBvcnRDaGFubmVsPik7CisgICAgV2ViU2hhcmVkV29y
a2VyQ2xpZW50KiBjbGllbnQoKSB7IHJldHVybiBtX2NsaWVudDsgfQorCisgICAgdm9pZCBzZXRX
b3JrZXJUaHJlYWQoUGFzc1JlZlB0cjxXZWJDb3JlOjpXb3JrZXJUaHJlYWQ+IHRocmVhZCkgeyBt
X3dvcmtlclRocmVhZCA9IHRocmVhZDsgfQorICAgIFdlYkNvcmU6OldvcmtlclRocmVhZCogd29y
a2VyVGhyZWFkKCkgeyByZXR1cm4gbV93b3JrZXJUaHJlYWQuZ2V0KCk7IH0KKworICAgIC8vIFNo
dXRzIGRvd24gdGhlIHdvcmtlciB0aHJlYWQuCisgICAgdm9pZCBzdG9wV29ya2VyVGhyZWFkKCk7
CiAKLSAgICBXZWJDb21tb25Xb3JrZXJDbGllbnQqIG1fY2xpZW50OworICAgIC8vIENyZWF0ZXMg
dGhlIHNoYWRvdyBsb2FkZXIgdXNlZCBmb3Igd29ya2VyIG5ldHdvcmsgcmVxdWVzdHMuCisgICAg
dm9pZCBpbml0aWFsaXplTG9hZGVyKGNvbnN0IFdlYlVSTCYpOworCisKKyAgICBzdGF0aWMgdm9p
ZCBjb25uZWN0VGFzayhXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc093blB0
cjxXZWJDb3JlOjpNZXNzYWdlUG9ydENoYW5uZWw+KTsKKyAgICAvLyBUYXNrcyB0aGF0IGFyZSBy
dW4gb24gdGhlIG1haW4gdGhyZWFkLgorICAgIHN0YXRpYyB2b2lkIHBvc3RNZXNzYWdlVGFzaygK
KyAgICAgICAgV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosCisgICAgICAgIFdlYlNo
YXJlZFdvcmtlckltcGwqIHRoaXNQdHIsCisgICAgICAgIFdURjo6U3RyaW5nIG1lc3NhZ2UsCisg
ICAgICAgIFBhc3NPd25QdHI8V2ViQ29yZTo6TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+IGNoYW5u
ZWxzKTsKKyAgICBzdGF0aWMgdm9pZCBwb3N0RXhjZXB0aW9uVGFzaygKKyAgICAgICAgV2ViQ29y
ZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosCisgICAgICAgIFdlYlNoYXJlZFdvcmtlckltcGwq
IHRoaXNQdHIsCisgICAgICAgIGNvbnN0IFdURjo6U3RyaW5nJiBtZXNzYWdlLAorICAgICAgICBp
bnQgbGluZU51bWJlciwKKyAgICAgICAgY29uc3QgV1RGOjpTdHJpbmcmIHNvdXJjZVVSTCk7Cisg
ICAgc3RhdGljIHZvaWQgcG9zdENvbnNvbGVNZXNzYWdlVGFzaygKKyAgICAgICAgV2ViQ29yZTo6
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosCisgICAgICAgIFdlYlNoYXJlZFdvcmtlckltcGwqIHRo
aXNQdHIsCisgICAgICAgIGludCBzb3VyY2UsCisgICAgICAgIGludCB0eXBlLAorICAgICAgICBp
bnQgbGV2ZWwsCisgICAgICAgIGNvbnN0IFdURjo6U3RyaW5nJiBtZXNzYWdlLAorICAgICAgICBp
bnQgbGluZU51bWJlciwKKyAgICAgICAgY29uc3QgV1RGOjpTdHJpbmcmIHNvdXJjZVVSTCk7Cisg
ICAgc3RhdGljIHZvaWQgcG9zdE1lc3NhZ2VUb1BhZ2VJbnNwZWN0b3JUYXNrKFdlYkNvcmU6OlNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJTaGFyZWRXb3JrZXJJbXBsKiwgY29uc3QgV1RGOjpT
dHJpbmcmKTsKKyAgICBzdGF0aWMgdm9pZCB1cGRhdGVJbnNwZWN0b3JTdGF0ZUNvb2tpZVRhc2so
V2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYlNoYXJlZFdvcmtlckltcGwqIHRo
aXNQdHIsIGNvbnN0IFdURjo6U3RyaW5nJiBjb29raWUpOworICAgIHN0YXRpYyB2b2lkIGNvbmZp
cm1NZXNzYWdlVGFzaygKKyAgICAgICAgV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
CisgICAgICAgIFdlYlNoYXJlZFdvcmtlckltcGwqIHRoaXNQdHIsCisgICAgICAgIGJvb2wgaGFz
UGVuZGluZ0FjdGl2aXR5KTsKKyAgICBzdGF0aWMgdm9pZCByZXBvcnRQZW5kaW5nQWN0aXZpdHlU
YXNrKAorICAgICAgICBXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwKKyAgICAgICAg
V2ViU2hhcmVkV29ya2VySW1wbCogdGhpc1B0ciwKKyAgICAgICAgYm9vbCBoYXNQZW5kaW5nQWN0
aXZpdHkpOworICAgIHN0YXRpYyB2b2lkIHdvcmtlckNvbnRleHRDbG9zZWRUYXNrKAorICAgICAg
ICBXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwKKyAgICAgICAgV2ViU2hhcmVkV29y
a2VySW1wbCogdGhpc1B0cik7CisgICAgc3RhdGljIHZvaWQgd29ya2VyQ29udGV4dERlc3Ryb3ll
ZFRhc2soCisgICAgICAgIFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLAorICAgICAg
ICBXZWJTaGFyZWRXb3JrZXJJbXBsKiB0aGlzUHRyKTsKKworICAgIC8vICdzaGFkb3cgcGFnZScg
LSBjcmVhdGVkIHRvIHByb3h5IGxvYWRpbmcgcmVxdWVzdHMgZnJvbSB0aGUgd29ya2VyLgorICAg
IFJlZlB0cjxXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0PiBtX2xvYWRpbmdEb2N1bWVu
dDsKKyAgICBXZWJWaWV3KiBtX3dlYlZpZXc7CisgICAgYm9vbCBtX2Fza2VkVG9UZXJtaW5hdGU7
CisKKyAgICBSZWZQdHI8V2ViQ29yZTo6V29ya2VyVGhyZWFkPiBtX3dvcmtlclRocmVhZDsKKwor
ICAgIFdlYlNoYXJlZFdvcmtlckNsaWVudCogbV9jbGllbnQ7CiAgICAgYm9vbCBtX3BhdXNlV29y
a2VyQ29udGV4dE9uU3RhcnQ7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJXb3JrZXJCYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YldvcmtlckJhc2UuY3BwCmluZGV4IDkzZjg0MGMuLmIxMmRiN2QgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckJhc2UuY3BwCkBAIC0zMiwyMCArMzIsNyBAQAogI2lu
Y2x1ZGUgIldlYldvcmtlckJhc2UuaCIKIAogI2luY2x1ZGUgIkNyb3NzVGhyZWFkVGFzay5oIgot
I2luY2x1ZGUgIkRhdGFiYXNlVGFzay5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVk
ZSAiTWVzc2FnZVBvcnRDaGFubmVsLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1NZXNzYWdlUG9ydENo
YW5uZWwuaCIKLSNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogCi0jaW5jbHVkZSAiV2ViRGF0
YVNvdXJjZUltcGwuaCIKLSNpbmNsdWRlICJXZWJGaWxlRXJyb3IuaCIKLSNpbmNsdWRlICJXZWJG
cmFtZUNsaWVudC5oIgotI2luY2x1ZGUgIldlYkZyYW1lSW1wbC5oIgotI2luY2x1ZGUgIldlYk1l
c3NhZ2VQb3J0Q2hhbm5lbC5oIgotI2luY2x1ZGUgIldlYlJ1bnRpbWVGZWF0dXJlcy5oIgotI2lu
Y2x1ZGUgIldlYlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiV2ViVmlldy5oIgogI2luY2x1ZGUgIldl
YldvcmtlckNsaWVudC5oIgogCiAjaW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgpAQCAtNTksODIg
KzQ2LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKICNpZiBFTkFCTEUoV09SS0VSUykKIAotLy8g
VGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgb24gdGhlIG1haW4gdGhyZWFkIHRvIGZvcmNlIHRvIGlu
aXRpYWxpemUgc29tZSBzdGF0aWMKLS8vIHZhbHVlcyB1c2VkIGluIFdlYktpdCBiZWZvcmUgYW55
IHdvcmtlciB0aHJlYWQgaXMgc3RhcnRlZC4gVGhpcyBpcyBiZWNhdXNlIGluCi0vLyBvdXIgd29y
a2VyIHByb2Nlc3NzLCB3ZSBkbyBub3QgcnVuIGFueSBXZWJLaXQgY29kZSBpbiBtYWluIHRocmVh
ZCBhbmQgdGh1cwotLy8gd2hlbiBtdWx0aXBsZSB3b3JrZXJzIHRyeSB0byBzdGFydCBhdCB0aGUg
c2FtZSB0aW1lLCB3ZSBtaWdodCBoaXQgY3Jhc2ggZHVlCi0vLyB0byBjb250ZW50aW9uIGZvciBp
bml0aWFsaXppbmcgc3RhdGljIHZhbHVlcy4KLXN0YXRpYyB2b2lkIGluaXRpYWxpemVXZWJLaXRT
dGF0aWNWYWx1ZXMoKQotewotICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVkID0gZmFsc2U7Ci0g
ICAgaWYgKCFpbml0aWFsaXplZCkgewotICAgICAgICBpbml0aWFsaXplZCA9IHRydWU7Ci0gICAg
ICAgIC8vIE5vdGUgdGhhdCB3ZSBoYXZlIHRvIHBhc3MgYSBVUkwgd2l0aCB2YWxpZCBwcm90b2Nv
bCBpbiBvcmRlciB0byBmb2xsb3cKLSAgICAgICAgLy8gdGhlIHBhdGggdG8gZG8gc3RhdGljIHZh
bHVlIGluaXRpYWxpemF0aW9ucy4KLSAgICAgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBvcmln
aW4gPQotICAgICAgICAgICAgU2VjdXJpdHlPcmlnaW46OmNyZWF0ZShLVVJMKFBhcnNlZFVSTFN0
cmluZywgImh0dHA6Ly9sb2NhbGhvc3QiKSk7Ci0gICAgICAgIG9yaWdpbi5yZWxlYXNlKCk7Ci0g
ICAgfQotfQotCi1XZWJXb3JrZXJCYXNlOjpXZWJXb3JrZXJCYXNlKCkKLSAgICA6IG1fd2ViVmll
dygwKQotICAgICwgbV9hc2tlZFRvVGVybWluYXRlKGZhbHNlKQotewotICAgIGluaXRpYWxpemVX
ZWJLaXRTdGF0aWNWYWx1ZXMoKTsKLX0KLQotV2ViV29ya2VyQmFzZTo6fldlYldvcmtlckJhc2Uo
KQotewotICAgIEFTU0VSVChtX3dlYlZpZXcpOwotICAgIFdlYkZyYW1lSW1wbCogd2ViRnJhbWUg
PSBzdGF0aWNfY2FzdDxXZWJGcmFtZUltcGwqPihtX3dlYlZpZXctPm1haW5GcmFtZSgpKTsKLSAg
ICBpZiAod2ViRnJhbWUpCi0gICAgICAgIHdlYkZyYW1lLT5zZXRDbGllbnQoMCk7Ci0gICAgbV93
ZWJWaWV3LT5jbG9zZSgpOwotfQotCi12b2lkIFdlYldvcmtlckJhc2U6OnN0b3BXb3JrZXJUaHJl
YWQoKQotewotICAgIGlmIChtX2Fza2VkVG9UZXJtaW5hdGUpCi0gICAgICAgIHJldHVybjsKLSAg
ICBtX2Fza2VkVG9UZXJtaW5hdGUgPSB0cnVlOwotICAgIGlmIChtX3dvcmtlclRocmVhZCkKLSAg
ICAgICAgbV93b3JrZXJUaHJlYWQtPnN0b3AoKTsKLX0KLQotdm9pZCBXZWJXb3JrZXJCYXNlOjpp
bml0aWFsaXplTG9hZGVyKGNvbnN0IFdlYlVSTCYgdXJsKQotewotICAgIC8vIENyZWF0ZSAnc2hh
ZG93IHBhZ2UnLiBUaGlzIHBhZ2UgaXMgbmV2ZXIgZGlzcGxheWVkLCBpdCBpcyB1c2VkIHRvIHBy
b3h5IHRoZQotICAgIC8vIGxvYWRpbmcgcmVxdWVzdHMgZnJvbSB0aGUgd29ya2VyIGNvbnRleHQg
dG8gdGhlIHJlc3Qgb2YgV2ViS2l0IGFuZCBDaHJvbWl1bQotICAgIC8vIGluZnJhc3RydWN0dXJl
LgotICAgIEFTU0VSVCghbV93ZWJWaWV3KTsKLSAgICBtX3dlYlZpZXcgPSBXZWJWaWV3OjpjcmVh
dGUoMCk7Ci0gICAgbV93ZWJWaWV3LT5zZXR0aW5ncygpLT5zZXRPZmZsaW5lV2ViQXBwbGljYXRp
b25DYWNoZUVuYWJsZWQoV2ViUnVudGltZUZlYXR1cmVzOjppc0FwcGxpY2F0aW9uQ2FjaGVFbmFi
bGVkKCkpOwotICAgIC8vIEZJWE1FOiBTZXR0aW5ncyBpbmZvcm1hdGlvbiBzaG91bGQgYmUgcGFz
c2VkIHRvIHRoZSBXb3JrZXIgcHJvY2VzcyBmcm9tIEJyb3dzZXIgcHJvY2VzcyB3aGVuIHRoZSB3
b3JrZXIKLSAgICAvLyBpcyBjcmVhdGVkIChzaW1pbGFyIHRvIFJlbmRlclRocmVhZDo6T25DcmVh
dGVOZXdWaWV3KS4KLSAgICBtX3dlYlZpZXctPnNldHRpbmdzKCktPnNldEhpeGllNzZXZWJTb2Nr
ZXRQcm90b2NvbEVuYWJsZWQoZmFsc2UpOwotICAgIG1fd2ViVmlldy0+aW5pdGlhbGl6ZU1haW5G
cmFtZSh0aGlzKTsKLQotICAgIFdlYkZyYW1lSW1wbCogd2ViRnJhbWUgPSBzdGF0aWNfY2FzdDxX
ZWJGcmFtZUltcGwqPihtX3dlYlZpZXctPm1haW5GcmFtZSgpKTsKLQotICAgIC8vIENvbnN0cnVj
dCBzdWJzdGl0dXRlIGRhdGEgc291cmNlIGZvciB0aGUgJ3NoYWRvdyBwYWdlJy4gV2Ugb25seSBu
ZWVkIGl0Ci0gICAgLy8gdG8gaGF2ZSBzYW1lIG9yaWdpbiBhcyB0aGUgd29ya2VyIHNvIHRoZSBs
b2FkaW5nIGNoZWNrcyB3b3JrIGNvcnJlY3RseS4KLSAgICBDU3RyaW5nIGNvbnRlbnQoIiIpOwot
ICAgIGludCBsZW4gPSBzdGF0aWNfY2FzdDxpbnQ+KGNvbnRlbnQubGVuZ3RoKCkpOwotICAgIFJl
ZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZihTaGFyZWRCdWZmZXI6OmNyZWF0ZShjb250ZW50LmRhdGEo
KSwgbGVuKSk7Ci0gICAgU3Vic3RpdHV0ZURhdGEgc3Vic3REYXRhKGJ1ZiwgU3RyaW5nKCJ0ZXh0
L2h0bWwiKSwgU3RyaW5nKCJVVEYtOCIpLCBLVVJMKCkpOwotICAgIHdlYkZyYW1lLT5mcmFtZSgp
LT5sb2FkZXIoKS0+bG9hZChSZXNvdXJjZVJlcXVlc3QodXJsKSwgc3Vic3REYXRhLCBmYWxzZSk7
Ci0KLSAgICAvLyBUaGlzIGRvY3VtZW50IHdpbGwgYmUgdXNlZCBhcyAnbG9hZGluZyBjb250ZXh0
JyBmb3IgdGhlIHdvcmtlci4KLSAgICBtX2xvYWRpbmdEb2N1bWVudCA9IHdlYkZyYW1lLT5mcmFt
ZSgpLT5kb2N1bWVudCgpOwotfQotCi12b2lkIFdlYldvcmtlckJhc2U6OmRpc3BhdGNoVGFza1Rv
TWFpblRocmVhZChQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2sp
Ci17Ci0gICAgY2FsbE9uTWFpblRocmVhZChpbnZva2VUYXNrTWV0aG9kLCB0YXNrLmxlYWtQdHIo
KSk7Ci19Ci0KLXZvaWQgV2ViV29ya2VyQmFzZTo6aW52b2tlVGFza01ldGhvZCh2b2lkKiBwYXJh
bSkKK3N0YXRpYyB2b2lkIGludm9rZVRhc2tNZXRob2Qodm9pZCogcGFyYW0pCiB7CiAgICAgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayogdGFzayA9CiAgICAgICAgIHN0YXRpY19jYXN0PFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2sqPihwYXJhbSk7CkBAIC0xNDIsMTkzICs1NCwxMCBA
QCB2b2lkIFdlYldvcmtlckJhc2U6Omludm9rZVRhc2tNZXRob2Qodm9pZCogcGFyYW0pCiAgICAg
ZGVsZXRlIHRhc2s7CiB9CiAKLXZvaWQgV2ViV29ya2VyQmFzZTo6ZGlkQ3JlYXRlRGF0YVNvdXJj
ZShXZWJGcmFtZSosIFdlYkRhdGFTb3VyY2UqIGRzKQotewotICAgIC8vIFRlbGwgdGhlIGxvYWRl
ciB0byBsb2FkIHRoZSBkYXRhIGludG8gdGhlICdzaGFkb3cgcGFnZScgc3luY2hyb25vdXNseSwK
LSAgICAvLyBzbyB3ZSBjYW4gZ3JhYiB0aGUgcmVzdWx0aW5nIERvY3VtZW50IHJpZ2h0IGFmdGVy
IGxvYWQuCi0gICAgc3RhdGljX2Nhc3Q8V2ViRGF0YVNvdXJjZUltcGwqPihkcyktPnNldERlZmVy
TWFpblJlc291cmNlRGF0YUxvYWQoZmFsc2UpOwotfQotCi1XZWJBcHBsaWNhdGlvbkNhY2hlSG9z
dCogV2ViV29ya2VyQmFzZTo6Y3JlYXRlQXBwbGljYXRpb25DYWNoZUhvc3QoV2ViRnJhbWUqLCBX
ZWJBcHBsaWNhdGlvbkNhY2hlSG9zdENsaWVudCogYXBwY2FjaGVIb3N0Q2xpZW50KQotewotICAg
IGlmIChjb21tb25DbGllbnQoKSkKLSAgICAgICAgcmV0dXJuIGNvbW1vbkNsaWVudCgpLT5jcmVh
dGVBcHBsaWNhdGlvbkNhY2hlSG9zdChhcHBjYWNoZUhvc3RDbGllbnQpOwotICAgIHJldHVybiAw
OwotfQotCi0vLyBXb3JrZXJPYmplY3RQcm94eSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi12b2lkIFdlYldvcmtlckJhc2U6OnBv
c3RNZXNzYWdlVG9Xb3JrZXJPYmplY3QoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
IG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
UGFzc093blB0cjxNZXNzYWdlUG9ydENoYW5uZWxBcnJheT4gY2hhbm5lbHMpCi17Ci0gICAgZGlz
cGF0Y2hUYXNrVG9NYWluVGhyZWFkKGNyZWF0ZUNhbGxiYWNrVGFzaygmcG9zdE1lc3NhZ2VUYXNr
LCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHRoaXMpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS0+dG9XaXJlU3RyaW5nKCksIGNoYW5uZWxz
KSk7Ci19Ci0KLXZvaWQgV2ViV29ya2VyQmFzZTo6cG9zdE1lc3NhZ2VUYXNrKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBXZWJXb3JrZXJCYXNlKiB0aGlzUHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgU3RyaW5nIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBQYXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBjaGFubmVscykKLXsKLSAgICBp
ZiAoIXRoaXNQdHItPmNsaWVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXZWJNZXNzYWdl
UG9ydENoYW5uZWxBcnJheSB3ZWJDaGFubmVscyhjaGFubmVscyA/IGNoYW5uZWxzLT5zaXplKCkg
OiAwKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdlYkNoYW5uZWxzLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgIHdlYkNoYW5uZWxzW2ldID0gKCpjaGFubmVscylbaV0tPmNoYW5uZWwoKS0+
d2ViQ2hhbm5lbFJlbGVhc2UoKTsKLSAgICAgICAgd2ViQ2hhbm5lbHNbaV0tPnNldENsaWVudCgw
KTsKLSAgICB9Ci0KLSAgICB0aGlzUHRyLT5jbGllbnQoKS0+cG9zdE1lc3NhZ2VUb1dvcmtlck9i
amVjdChtZXNzYWdlLCB3ZWJDaGFubmVscyk7Ci19Ci0KLXZvaWQgV2ViV29ya2VyQmFzZTo6cG9z
dEV4Y2VwdGlvblRvV29ya2VyT2JqZWN0KGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpbmVOdW1i
ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBTdHJpbmcmIHNvdXJjZVVSTCkKLXsKLSAgICBkaXNwYXRjaFRhc2tUb01haW5UaHJlYWQoCi0g
ICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmcG9zdEV4Y2VwdGlvblRhc2ssIEFsbG93Q3Jvc3NU
aHJlYWRBY2Nlc3ModGhpcyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3Nh
Z2UsIGxpbmVOdW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VVUkwpKTsK
LX0KLQotdm9pZCBXZWJXb3JrZXJCYXNlOjpwb3N0RXhjZXB0aW9uVGFzayhTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBXZWJXb3JrZXJCYXNlKiB0aGlzUHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlVVJM
KQotewotICAgIGlmICghdGhpc1B0ci0+Y29tbW9uQ2xpZW50KCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIHRoaXNQdHItPmNvbW1vbkNsaWVudCgpLT5wb3N0RXhjZXB0aW9uVG9Xb3JrZXJPYmpl
Y3QoZXJyb3JNZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbGluZU51bWJlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVVSTCk7Ci19Ci0KLXZvaWQgV2Vi
V29ya2VyQmFzZTo6cG9zdENvbnNvbGVNZXNzYWdlVG9Xb3JrZXJPYmplY3QoTWVzc2FnZVNvdXJj
ZSBzb3VyY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE1lc3NhZ2VUeXBlIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VMZXZlbCBsZXZlbCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBtZXNz
YWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgbGluZU51bWJlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpCi17Ci0gICAgZGlzcGF0Y2hU
YXNrVG9NYWluVGhyZWFkKGNyZWF0ZUNhbGxiYWNrVGFzaygmcG9zdENvbnNvbGVNZXNzYWdlVGFz
aywgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyh0aGlzKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSwgdHlwZSwgbGV2ZWwsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLCBsaW5lTnVtYmVy
LCBzb3VyY2VVUkwpKTsKLX0KIAotdm9pZCBXZWJXb3JrZXJCYXNlOjpwb3N0Q29uc29sZU1lc3Nh
Z2VUYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViV29ya2VyQmFzZSogdGhpc1B0ciwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc291cmNlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0eXBlLCBpbnQgbGV2ZWws
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5n
JiBtZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBsaW5lTnVtYmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFN0cmluZyYgc291cmNlVVJMKQotewotICAgIGlmICghdGhpc1B0ci0+Y29tbW9uQ2xp
ZW50KCkpCi0gICAgICAgIHJldHVybjsKLSAgICB0aGlzUHRyLT5jb21tb25DbGllbnQoKS0+cG9z
dENvbnNvbGVNZXNzYWdlVG9Xb3JrZXJPYmplY3Qoc291cmNlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLCBsZXZlbCwg
bWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbGluZU51bWJlciwgc291cmNlVVJMKTsKLX0KLQotdm9pZCBXZWJXb3Jr
ZXJCYXNlOjpwb3N0TWVzc2FnZVRvUGFnZUluc3BlY3Rvcihjb25zdCBTdHJpbmcmIG1lc3NhZ2Up
Ci17Ci0gICAgZGlzcGF0Y2hUYXNrVG9NYWluVGhyZWFkKGNyZWF0ZUNhbGxiYWNrVGFzaygmcG9z
dE1lc3NhZ2VUb1BhZ2VJbnNwZWN0b3JUYXNrLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHRoaXMp
LCBtZXNzYWdlKSk7Ci19Ci0KLXZvaWQgV2ViV29ya2VyQmFzZTo6cG9zdE1lc3NhZ2VUb1BhZ2VJ
bnNwZWN0b3JUYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJXb3JrZXJCYXNlKiB0aGlz
UHRyLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgaWYgKCF0aGlzUHRyLT5jb21tb25D
bGllbnQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHRoaXNQdHItPmNvbW1vbkNsaWVudCgpLT5k
aXNwYXRjaERldlRvb2xzTWVzc2FnZShtZXNzYWdlKTsKLX0KLQotdm9pZCBXZWJXb3JrZXJCYXNl
Ojp1cGRhdGVJbnNwZWN0b3JTdGF0ZUNvb2tpZShjb25zdCBXVEY6OlN0cmluZyYgY29va2llKQot
ewotICAgIGRpc3BhdGNoVGFza1RvTWFpblRocmVhZChjcmVhdGVDYWxsYmFja1Rhc2soJnVwZGF0
ZUluc3BlY3RvclN0YXRlQ29va2llVGFzaywgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyh0aGlzKSwg
Y29va2llKSk7Ci19Ci0KLXZvaWQgV2ViV29ya2VyQmFzZTo6dXBkYXRlSW5zcGVjdG9yU3RhdGVD
b29raWVUYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJXb3JrZXJCYXNlKiB0aGlzUHRy
LCBjb25zdCBTdHJpbmcmIGNvb2tpZSkKLXsKLSAgICBpZiAoIXRoaXNQdHItPmNvbW1vbkNsaWVu
dCgpKQotICAgICAgICByZXR1cm47Ci0gICAgdGhpc1B0ci0+Y29tbW9uQ2xpZW50KCktPnNhdmVE
ZXZUb29sc0FnZW50U3RhdGUoY29va2llKTsKLX0KLQotdm9pZCBXZWJXb3JrZXJCYXNlOjpjb25m
aXJtTWVzc2FnZUZyb21Xb3JrZXJPYmplY3QoYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkpCi17Ci0g
ICAgZGlzcGF0Y2hUYXNrVG9NYWluVGhyZWFkKGNyZWF0ZUNhbGxiYWNrVGFzaygmY29uZmlybU1l
c3NhZ2VUYXNrLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHRoaXMpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzUGVuZGluZ0FjdGl2aXR5KSk7Ci19
Ci0KLXZvaWQgV2ViV29ya2VyQmFzZTo6Y29uZmlybU1lc3NhZ2VUYXNrKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBXZWJXb3JrZXJCYXNlKiB0aGlzUHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkpCi17Ci0gICAgaWYgKCF0aGlzUHRyLT5j
bGllbnQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHRoaXNQdHItPmNsaWVudCgpLT5jb25maXJt
TWVzc2FnZUZyb21Xb3JrZXJPYmplY3QoaGFzUGVuZGluZ0FjdGl2aXR5KTsKLX0KLQotdm9pZCBX
ZWJXb3JrZXJCYXNlOjpyZXBvcnRQZW5kaW5nQWN0aXZpdHkoYm9vbCBoYXNQZW5kaW5nQWN0aXZp
dHkpCi17Ci0gICAgZGlzcGF0Y2hUYXNrVG9NYWluVGhyZWFkKGNyZWF0ZUNhbGxiYWNrVGFzaygm
cmVwb3J0UGVuZGluZ0FjdGl2aXR5VGFzaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcyksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNQZW5kaW5nQWN0aXZp
dHkpKTsKLX0KLQotdm9pZCBXZWJXb3JrZXJCYXNlOjpyZXBvcnRQZW5kaW5nQWN0aXZpdHlUYXNr
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgV2ViV29ya2VyQmFzZSogdGhpc1B0ciwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGhhc1BlbmRpbmdBY3Rp
dml0eSkKLXsKLSAgICBpZiAoIXRoaXNQdHItPmNsaWVudCgpKQotICAgICAgICByZXR1cm47Ci0g
ICAgdGhpc1B0ci0+Y2xpZW50KCktPnJlcG9ydFBlbmRpbmdBY3Rpdml0eShoYXNQZW5kaW5nQWN0
aXZpdHkpOwotfQotCi12b2lkIFdlYldvcmtlckJhc2U6OndvcmtlckNvbnRleHRDbG9zZWQoKQot
ewotICAgIGRpc3BhdGNoVGFza1RvTWFpblRocmVhZChjcmVhdGVDYWxsYmFja1Rhc2soJndvcmtl
ckNvbnRleHRDbG9zZWRUYXNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyh0aGlzKSkpOwotfQotCi12b2lkIFdl
YldvcmtlckJhc2U6OndvcmtlckNvbnRleHRDbG9zZWRUYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFdlYldvcmtlckJhc2UqIHRoaXNQdHIpCi17Ci0gICAgaWYgKHRoaXNQdHItPmNvbW1vbkNsaWVu
dCgpKQotICAgICAgICB0aGlzUHRyLT5jb21tb25DbGllbnQoKS0+d29ya2VyQ29udGV4dENsb3Nl
ZCgpOwotCi0gICAgdGhpc1B0ci0+c3RvcFdvcmtlclRocmVhZCgpOwotfQotCi12b2lkIFdlYldv
cmtlckJhc2U6OndvcmtlckNvbnRleHREZXN0cm95ZWQoKQotewotICAgIGRpc3BhdGNoVGFza1Rv
TWFpblRocmVhZChjcmVhdGVDYWxsYmFja1Rhc2soJndvcmtlckNvbnRleHREZXN0cm95ZWRUYXNr
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3dD
cm9zc1RocmVhZEFjY2Vzcyh0aGlzKSkpOwotfQotCi12b2lkIFdlYldvcmtlckJhc2U6Ondvcmtl
ckNvbnRleHREZXN0cm95ZWRUYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYldvcmtlckJh
c2UqIHRoaXNQdHIpCi17Ci0gICAgaWYgKHRoaXNQdHItPmNvbW1vbkNsaWVudCgpKQotICAgICAg
ICB0aGlzUHRyLT5jb21tb25DbGllbnQoKS0+d29ya2VyQ29udGV4dERlc3Ryb3llZCgpOwotICAg
IC8vIFRoZSBsaWZldGltZSBvZiB0aGlzIHByb3h5IGlzIGNvbnRyb2xsZWQgYnkgdGhlIHdvcmtl
ciBjb250ZXh0LgotICAgIGRlbGV0ZSB0aGlzUHRyOwotfQotCi0vLyBXb3JrZXJMb2FkZXJQcm94
eSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotCi12b2lkIFdlYldvcmtlckJhc2U6OnBvc3RUYXNrVG9Mb2FkZXIoUGFzc093blB0cjxT
Y3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNrKQotewotICAgIEFTU0VSVChtX2xvYWRp
bmdEb2N1bWVudC0+aXNEb2N1bWVudCgpKTsKLSAgICBtX2xvYWRpbmdEb2N1bWVudC0+cG9zdFRh
c2sodGFzayk7Ci19Ci0KLXZvaWQgV2ViV29ya2VyQmFzZTo6cG9zdFRhc2tGb3JNb2RlVG9Xb3Jr
ZXJDb250ZXh0KAotICAgIFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4g
dGFzaywgY29uc3QgU3RyaW5nJiBtb2RlKQordm9pZCBXZWJXb3JrZXJCYXNlOjpkaXNwYXRjaFRh
c2tUb01haW5UaHJlYWQoUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0
YXNrKQogewotICAgIG1fd29ya2VyVGhyZWFkLT5ydW5Mb29wKCkucG9zdFRhc2tGb3JNb2RlKHRh
c2ssIG1vZGUpOworICAgIGNhbGxPbk1haW5UaHJlYWQoaW52b2tlVGFza01ldGhvZCwgdGFzay5s
ZWFrUHRyKCkpOwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJCYXNlLmggYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJCYXNlLmgKaW5kZXggOTM1OTlmNC4uYzQzYzYzOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViV29ya2VyQmFzZS5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckJhc2UuaApAQCAtMzUsMTM4ICsz
NSwyNiBAQAogCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUg
IldlYkNvbW1vbldvcmtlckNsaWVudC5oIgotI2luY2x1ZGUgIldlYkZyYW1lQ2xpZW50LmgiCiAj
aW5jbHVkZSAiV29ya2VyTG9hZGVyUHJveHkuaCIKICNpbmNsdWRlICJXb3JrZXJPYmplY3RQcm94
eS5oIgotI2luY2x1ZGUgIldvcmtlclRocmVhZC5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRy
Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFz
cyBXb3JrZXJUaHJlYWQ7Ci19CiAKIG5hbWVzcGFjZSBXZWJLaXQgewotY2xhc3MgV2ViQXBwbGlj
YXRpb25DYWNoZUhvc3Q7Ci1jbGFzcyBXZWJBcHBsaWNhdGlvbkNhY2hlSG9zdENsaWVudDsKLWNs
YXNzIFdlYkNvbW1vbldvcmtlckNsaWVudDsKLWNsYXNzIFdlYlNlY3VyaXR5T3JpZ2luOwotY2xh
c3MgV2ViU3RyaW5nOwotY2xhc3MgV2ViVVJMOwogY2xhc3MgV2ViVmlldzsKLWNsYXNzIFdlYldv
cmtlcjsKLWNsYXNzIFdlYldvcmtlckNsaWVudDsKIAogLy8gQmFzZSBjbGFzcyBmb3IgV2ViU2hh
cmVkV29ya2VySW1wbCwgV2ViV29ya2VyQ2xpZW50SW1wbCBhbmQgKGRlZnVuY3QpIFdlYldvcmtl
ckltcGwKIC8vIGNvbnRhaW5pbmcgY29tbW9uIGludGVyZmFjZSBmb3Igc2hhcmVkIHdvcmtlcnMg
YW5kIGRlZGljYXRlZCBpbi1wcm9jIHdvcmtlcnMgaW1wbGVtZW50YXRpb24uCiAvLwogLy8gRklY
TUU6IFJlbmFtZSB0aGlzIGNsYXNzIGludG8gV2ViV29ya2VyQmFzZSwgbWVyZ2UgZXhpc3Rpbmcg
V2ViV29ya2VyQmFzZSBhbmQgV2ViU2hhcmVkV29ya2VyLgotY2xhc3MgTmV3V2ViV29ya2VyQmFz
ZSA6IHB1YmxpYyBXZWJDb3JlOjpXb3JrZXJMb2FkZXJQcm94eSB7CitjbGFzcyBXZWJXb3JrZXJC
YXNlIDogcHVibGljIFdlYkNvcmU6OldvcmtlckxvYWRlclByb3h5IHsKIHB1YmxpYzoKLSAgICB2
aXJ0dWFsIE5ld1dlYkNvbW1vbldvcmtlckNsaWVudCogbmV3Q29tbW9uQ2xpZW50KCkgPSAwOwor
ICAgIHZpcnR1YWwgV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQoKSA9IDA7CiAg
ICAgdmlydHVhbCBXZWJWaWV3KiB2aWV3KCkgY29uc3QgPSAwOwotfTsKLQotLy8gQmFzZSBjbGFz
cyBmb3IgV2ViU2hhcmVkV29ya2VySW1wbCBhbmQgV2ViV29ya2VySW1wbC4gSXQgY29udGFpbnMg
Y29tbW9uCi0vLyBjb2RlIHVzZWQgYnkgYm90aCBpbXBsZW1lbnRhdGlvbiBjbGFzc2VzLCBpbmNs
dWRpbmcgaW1wbGVtZW50YXRpb25zIG9mIHRoZQotLy8gV29ya2VyT2JqZWN0UHJveHkgYW5kIFdv
cmtlckxvYWRlclByb3h5IGludGVyZmFjZXMuCi1jbGFzcyBXZWJXb3JrZXJCYXNlIDogcHVibGlj
IFdlYkNvcmU6Oldvcmtlck9iamVjdFByb3h5Ci0gICAgICAgICAgICAgICAgICAgICwgcHVibGlj
IE5ld1dlYldvcmtlckJhc2UKLSAgICAgICAgICAgICAgICAgICAgLCBwdWJsaWMgV2ViRnJhbWVD
bGllbnQgewotcHVibGljOgotICAgIFdlYldvcmtlckJhc2UoKTsKLSAgICB2aXJ0dWFsIH5XZWJX
b3JrZXJCYXNlKCk7Ci0KLSAgICAvLyBXZWJDb21tb25Xb3JrZXJCYXNlIG1ldGhvZHM6Ci0gICAg
dmlydHVhbCB2b2lkIHBvc3RNZXNzYWdlVG9Xb3JrZXJPYmplY3QoCi0gICAgICAgIFBhc3NSZWZQ
dHI8V2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwKLSAgICAgICAgUGFzc093blB0cjxX
ZWJDb3JlOjpNZXNzYWdlUG9ydENoYW5uZWxBcnJheT4pOwotICAgIHZpcnR1YWwgdm9pZCBwb3N0
RXhjZXB0aW9uVG9Xb3JrZXJPYmplY3QoCi0gICAgICAgIGNvbnN0IFdURjo6U3RyaW5nJiwgaW50
LCBjb25zdCBXVEY6OlN0cmluZyYpOwotICAgIHZpcnR1YWwgdm9pZCBwb3N0Q29uc29sZU1lc3Nh
Z2VUb1dvcmtlck9iamVjdCgKLSAgICAgICAgV2ViQ29yZTo6TWVzc2FnZVNvdXJjZSwgV2ViQ29y
ZTo6TWVzc2FnZVR5cGUsCi0gICAgICAgIFdlYkNvcmU6Ok1lc3NhZ2VMZXZlbCwgY29uc3QgV1RG
OjpTdHJpbmcmLCBpbnQsIGNvbnN0IFdURjo6U3RyaW5nJik7Ci0gICAgdmlydHVhbCB2b2lkIHBv
c3RNZXNzYWdlVG9QYWdlSW5zcGVjdG9yKGNvbnN0IFdURjo6U3RyaW5nJik7Ci0gICAgdmlydHVh
bCB2b2lkIHVwZGF0ZUluc3BlY3RvclN0YXRlQ29va2llKGNvbnN0IFdURjo6U3RyaW5nJik7Ci0g
ICAgdmlydHVhbCB2b2lkIGNvbmZpcm1NZXNzYWdlRnJvbVdvcmtlck9iamVjdChib29sKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgcmVwb3J0UGVuZGluZ0FjdGl2aXR5KGJvb2wpOwotICAgIHZpcnR1YWwg
dm9pZCB3b3JrZXJDb250ZXh0Q2xvc2VkKCk7Ci0gICAgdmlydHVhbCB2b2lkIHdvcmtlckNvbnRl
eHREZXN0cm95ZWQoKTsKLSAgICB2aXJ0dWFsIFdlYlZpZXcqIHZpZXcoKSBjb25zdCB7IHJldHVy
biBtX3dlYlZpZXc7IH0KLQotICAgIC8vIFdlYkNvcmU6OldvcmtlckxvYWRlclByb3h5IG1ldGhv
ZHM6Ci0gICAgdmlydHVhbCB2b2lkIHBvc3RUYXNrVG9Mb2FkZXIoUGFzc093blB0cjxXZWJDb3Jl
OjpTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPik7Ci0gICAgdmlydHVhbCB2b2lkIHBvc3RU
YXNrRm9yTW9kZVRvV29ya2VyQ29udGV4dCgKLSAgICAgICAgUGFzc093blB0cjxXZWJDb3JlOjpT
Y3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiwgY29uc3QgV1RGOjpTdHJpbmcmIG1vZGUpOwot
Ci0gICAgLy8gV2ViRnJhbWVDbGllbnQgbWV0aG9kcyB0byBzdXBwb3J0IHJlc291cmNlIGxvYWRp
bmcgdGhydSB0aGUgJ3NoYWRvdyBwYWdlJy4KLSAgICB2aXJ0dWFsIHZvaWQgZGlkQ3JlYXRlRGF0
YVNvdXJjZShXZWJGcmFtZSosIFdlYkRhdGFTb3VyY2UqKTsKLSAgICB2aXJ0dWFsIFdlYkFwcGxp
Y2F0aW9uQ2FjaGVIb3N0KiBjcmVhdGVBcHBsaWNhdGlvbkNhY2hlSG9zdChXZWJGcmFtZSosIFdl
YkFwcGxpY2F0aW9uQ2FjaGVIb3N0Q2xpZW50Kik7CiAKICAgICAvLyBFeGVjdXRlcyB0aGUgZ2l2
ZW4gdGFzayBvbiB0aGUgbWFpbiB0aHJlYWQuCiAgICAgc3RhdGljIHZvaWQgZGlzcGF0Y2hUYXNr
VG9NYWluVGhyZWFkKFBhc3NPd25QdHI8V2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6
VGFzaz4pOwotCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCBXZWJDb21tb25Xb3JrZXJDbGllbnQq
IGNvbW1vbkNsaWVudCgpID0gMDsKLSAgICB2aXJ0dWFsIFdlYldvcmtlckNsaWVudCogY2xpZW50
KCkgPSAwOwotCi0gICAgdm9pZCBzZXRXb3JrZXJUaHJlYWQoUGFzc1JlZlB0cjxXZWJDb3JlOjpX
b3JrZXJUaHJlYWQ+IHRocmVhZCkgeyBtX3dvcmtlclRocmVhZCA9IHRocmVhZDsgfQotICAgIFdl
YkNvcmU6OldvcmtlclRocmVhZCogd29ya2VyVGhyZWFkKCkgeyByZXR1cm4gbV93b3JrZXJUaHJl
YWQuZ2V0KCk7IH0KLQotICAgIC8vIFNodXRzIGRvd24gdGhlIHdvcmtlciB0aHJlYWQuCi0gICAg
dm9pZCBzdG9wV29ya2VyVGhyZWFkKCk7Ci0KLSAgICAvLyBDcmVhdGVzIHRoZSBzaGFkb3cgbG9h
ZGVyIHVzZWQgZm9yIHdvcmtlciBuZXR3b3JrIHJlcXVlc3RzLgotICAgIHZvaWQgaW5pdGlhbGl6
ZUxvYWRlcihjb25zdCBXZWJVUkwmKTsKLQotcHJpdmF0ZToKLSAgICAvLyBGdW5jdGlvbiB1c2Vk
IHRvIGludm9rZSB0YXNrcyBvbiB0aGUgbWFpbiB0aHJlYWQuCi0gICAgc3RhdGljIHZvaWQgaW52
b2tlVGFza01ldGhvZCh2b2lkKik7Ci0KLSAgICAvLyBUYXNrcyB0aGF0IGFyZSBydW4gb24gdGhl
IG1haW4gdGhyZWFkLgotICAgIHN0YXRpYyB2b2lkIHBvc3RNZXNzYWdlVGFzaygKLSAgICAgICAg
V2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKLSAgICAgICAgV2ViV29y
a2VyQmFzZSogdGhpc1B0ciwKLSAgICAgICAgV1RGOjpTdHJpbmcgbWVzc2FnZSwKLSAgICAgICAg
UGFzc093blB0cjxXZWJDb3JlOjpNZXNzYWdlUG9ydENoYW5uZWxBcnJheT4gY2hhbm5lbHMpOwot
ICAgIHN0YXRpYyB2b2lkIHBvc3RFeGNlcHRpb25UYXNrKAotICAgICAgICBXZWJDb3JlOjpTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LAotICAgICAgICBXZWJXb3JrZXJCYXNlKiB0aGlz
UHRyLAotICAgICAgICBjb25zdCBXVEY6OlN0cmluZyYgbWVzc2FnZSwKLSAgICAgICAgaW50IGxp
bmVOdW1iZXIsCi0gICAgICAgIGNvbnN0IFdURjo6U3RyaW5nJiBzb3VyY2VVUkwpOwotICAgIHN0
YXRpYyB2b2lkIHBvc3RDb25zb2xlTWVzc2FnZVRhc2soCi0gICAgICAgIFdlYkNvcmU6OlNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCi0gICAgICAgIFdlYldvcmtlckJhc2UqIHRoaXNQ
dHIsCi0gICAgICAgIGludCBzb3VyY2UsCi0gICAgICAgIGludCB0eXBlLAotICAgICAgICBpbnQg
bGV2ZWwsCi0gICAgICAgIGNvbnN0IFdURjo6U3RyaW5nJiBtZXNzYWdlLAotICAgICAgICBpbnQg
bGluZU51bWJlciwKLSAgICAgICAgY29uc3QgV1RGOjpTdHJpbmcmIHNvdXJjZVVSTCk7Ci0gICAg
c3RhdGljIHZvaWQgcG9zdE1lc3NhZ2VUb1BhZ2VJbnNwZWN0b3JUYXNrKFdlYkNvcmU6OlNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJXb3JrZXJCYXNlKiwgY29uc3QgV1RGOjpTdHJpbmcmKTsK
LSAgICBzdGF0aWMgdm9pZCB1cGRhdGVJbnNwZWN0b3JTdGF0ZUNvb2tpZVRhc2soV2ViQ29yZTo6
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYldvcmtlckJhc2UqIHRoaXNQdHIsIGNvbnN0IFdU
Rjo6U3RyaW5nJiBjb29raWUpOwotICAgIHN0YXRpYyB2b2lkIGNvbmZpcm1NZXNzYWdlVGFzaygK
LSAgICAgICAgV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKLSAgICAg
ICAgV2ViV29ya2VyQmFzZSogdGhpc1B0ciwKLSAgICAgICAgYm9vbCBoYXNQZW5kaW5nQWN0aXZp
dHkpOwotICAgIHN0YXRpYyB2b2lkIHJlcG9ydFBlbmRpbmdBY3Rpdml0eVRhc2soCi0gICAgICAg
IFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCi0gICAgICAgIFdlYldv
cmtlckJhc2UqIHRoaXNQdHIsCi0gICAgICAgIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KTsKLSAg
ICBzdGF0aWMgdm9pZCB3b3JrZXJDb250ZXh0Q2xvc2VkVGFzaygKLSAgICAgICAgV2ViQ29yZTo6
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKLSAgICAgICAgV2ViV29ya2VyQmFzZSog
dGhpc1B0cik7Ci0gICAgc3RhdGljIHZvaWQgd29ya2VyQ29udGV4dERlc3Ryb3llZFRhc2soCi0g
ICAgICAgIFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCi0gICAgICAg
IFdlYldvcmtlckJhc2UqIHRoaXNQdHIpOwotCi0gICAgLy8gJ3NoYWRvdyBwYWdlJyAtIGNyZWF0
ZWQgdG8gcHJveHkgbG9hZGluZyByZXF1ZXN0cyBmcm9tIHRoZSB3b3JrZXIuCi0gICAgUmVmUHRy
PFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ+IG1fbG9hZGluZ0RvY3VtZW50OwotICAg
IFdlYlZpZXcqIG1fd2ViVmlldzsKLSAgICBib29sIG1fYXNrZWRUb1Rlcm1pbmF0ZTsKLQotICAg
IFJlZlB0cjxXZWJDb3JlOjpXb3JrZXJUaHJlYWQ+IG1fd29ya2VyVGhyZWFkOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJXb3JrZXJDbGllbnRJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YldvcmtlckNsaWVudEltcGwuY3BwCmluZGV4IDViOWYzMjAuLjUwOTBhZmYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckNsaWVudEltcGwuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckNsaWVudEltcGwuY3BwCkBAIC02
Myw3ICs2Myw2IEBACiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViVVJMLmgiCiAjaW5jbHVkZSAiV2Vi
Vmlld0ltcGwuaCIKICNpbmNsdWRlICJXZWJXb3JrZXIuaCIKLSNpbmNsdWRlICJXZWJXb3JrZXJJ
bXBsLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJDbGllbnRJbXBsLmggYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJDbGllbnRJbXBsLmgKaW5kZXggNzAwNmE5NC4uNTE4OWFk
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViV29ya2VyQ2xpZW50
SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckNsaWVudElt
cGwuaApAQCAtNTgsOCArNTgsOCBAQCBjbGFzcyBXZWJGcmFtZUltcGw7CiAvLyBJbiBlc3NlbmNl
LCB0aGlzIGNsYXNzIHdyYXBzIFdvcmtlck1lc3NhZ2luZ1Byb3h5LgogY2xhc3MgV2ViV29ya2Vy
Q2xpZW50SW1wbCA6IHB1YmxpYyBXZWJDb3JlOjpXb3JrZXJDb250ZXh0UHJveHkKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLCBwdWJsaWMgV2ViQ29yZTo6V29ya2VyT2JqZWN0UHJveHkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgLCBwdWJsaWMgTmV3V2ViV29ya2VyQmFzZQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBOZXdXZWJDb21tb25Xb3JrZXJDbGllbnQgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBXZWJXb3JrZXJCYXNlCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICwgcHVibGljIFdlYkNvbW1vbldvcmtlckNsaWVudCB7CiBwdWJs
aWM6CiAgICAgLy8gV2ViQ29yZTo6V29ya2VyQ29udGV4dFByb3h5IEZhY3RvcnkuCiAgICAgc3Rh
dGljIFdlYkNvcmU6OldvcmtlckNvbnRleHRQcm94eSogY3JlYXRlV29ya2VyQ29udGV4dFByb3h5
KFdlYkNvcmU6OldvcmtlciopOwpAQCAtMTA3LDcgKzEwNyw3IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgV2ViRmlsZVN5c3RlbUNhbGxiYWNrcyopOwogCiAgICAg
Ly8gV2ViQ29tbWVudFdvcmtlckJhc2UgbWV0aG9kczoKLSAgICB2aXJ0dWFsIE5ld1dlYkNvbW1v
bldvcmtlckNsaWVudCogbmV3Q29tbW9uQ2xpZW50KCkgeyByZXR1cm4gdGhpczsgfQorICAgIHZp
cnR1YWwgV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQoKSB7IHJldHVybiB0aGlz
OyB9CiAgICAgdmlydHVhbCBXZWJWaWV3KiB2aWV3KCkgY29uc3Q7CiAKIHByaXZhdGU6CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJJbXBsLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckltcGwuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBkY2JmZWVlLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYldvcmtlckltcGwuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTYzICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0g
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViV29ya2VySW1wbC5oIgotCi0jaW5j
bHVkZSAiQ3Jvc3NUaHJlYWRUYXNrLmgiCi0jaW5jbHVkZSAiRGVkaWNhdGVkV29ya2VyQ29udGV4
dC5oIgotI2luY2x1ZGUgIkRlZGljYXRlZFdvcmtlclRocmVhZC5oIgotI2luY2x1ZGUgIktVUkwu
aCIKLSNpbmNsdWRlICJNZXNzYWdlRXZlbnQuaCIKLSNpbmNsdWRlICJNZXNzYWdlUG9ydC5oIgot
I2luY2x1ZGUgIk1lc3NhZ2VQb3J0Q2hhbm5lbC5oIgotI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQuaCIKLSNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgotI2luY2x1ZGUgIlNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZS5oIgotI2luY2x1ZGUgIlN1YnN0aXR1dGVEYXRhLmgiCi0jaW5jbHVk
ZSA8d3RmL093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KLQotI2luY2x1ZGUg
IlBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmgiCi0jaW5jbHVkZSAiV2ViTWVzc2FnZVBvcnRD
aGFubmVsLmgiCi0jaW5jbHVkZSAicGxhdGZvcm0vV2ViU3RyaW5nLmgiCi0jaW5jbHVkZSAicGxh
dGZvcm0vV2ViVVJMLmgiCi0jaW5jbHVkZSAiV2ViV29ya2VyQ2xpZW50LmgiCi0KLXVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotI2lmIEVOQUJMRShXT1JL
RVJTKQotCi1XZWJXb3JrZXIqIFdlYldvcmtlcjo6Y3JlYXRlKFdlYldvcmtlckNsaWVudCogY2xp
ZW50KQotewotICAgIHJldHVybiBuZXcgV2ViV29ya2VySW1wbChjbGllbnQpOwotfQotCi0KLVdl
YldvcmtlckltcGw6OldlYldvcmtlckltcGwoV2ViV29ya2VyQ2xpZW50KiBjbGllbnQpCi0gICAg
OiBtX2NsaWVudChjbGllbnQpCi17Ci19Ci0KLVdlYldvcmtlckltcGw6On5XZWJXb3JrZXJJbXBs
KCkKLXsKLX0KLQotTmV3V2ViQ29tbW9uV29ya2VyQ2xpZW50KiBXZWJXb3JrZXJJbXBsOjpuZXdD
b21tb25DbGllbnQoKQotewotICAgIHJldHVybiBtX2NsaWVudDsKLX0KLQotV2ViQ29tbW9uV29y
a2VyQ2xpZW50KiBXZWJXb3JrZXJJbXBsOjpjb21tb25DbGllbnQoKQotewotICAgIHJldHVybiBt
X2NsaWVudDsKLX0KLQotdm9pZCBXZWJXb3JrZXJJbXBsOjpwb3N0TWVzc2FnZVRvV29ya2VyQ29u
dGV4dFRhc2soV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYldvcmtlcklt
cGwqIHRoaXNQdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFy
cmF5PiBjaGFubmVscykKLXsKLSAgICBBU1NFUlQoY29udGV4dC0+aXNXb3JrZXJDb250ZXh0KCkp
OwotICAgIERlZGljYXRlZFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQgPQotICAgICAgICBz
dGF0aWNfY2FzdDxEZWRpY2F0ZWRXb3JrZXJDb250ZXh0Kj4oY29udGV4dCk7Ci0KLSAgICBPd25Q
dHI8TWVzc2FnZVBvcnRBcnJheT4gcG9ydHMgPQotICAgICAgICBNZXNzYWdlUG9ydDo6ZW50YW5n
bGVQb3J0cygqY29udGV4dCwgY2hhbm5lbHMpOwotICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IHNlcmlhbGl6ZWRNZXNzYWdlID0KLSAgICAgICAgU2VyaWFsaXplZFNjcmlwdFZhbHVl
OjpjcmVhdGVGcm9tV2lyZShtZXNzYWdlKTsKLSAgICB3b3JrZXJDb250ZXh0LT5kaXNwYXRjaEV2
ZW50KE1lc3NhZ2VFdmVudDo6Y3JlYXRlKAotICAgICAgICBwb3J0cy5yZWxlYXNlKCksIHNlcmlh
bGl6ZWRNZXNzYWdlLnJlbGVhc2UoKSkpOwotICAgIHRoaXNQdHItPmNvbmZpcm1NZXNzYWdlRnJv
bVdvcmtlck9iamVjdCh3b3JrZXJDb250ZXh0LT5oYXNQZW5kaW5nQWN0aXZpdHkoKSk7Ci19Ci0K
LS8vIFdlYldvcmtlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXZvaWQgV2ViV29ya2VySW1wbDo6c3RhcnRXb3Jr
ZXJDb250ZXh0KGNvbnN0IFdlYlVSTCYgc2NyaXB0VXJsLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgV2ViU3RyaW5nJiB1c2VyQWdlbnQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJTdHJpbmcmIHNvdXJjZUNvZGUp
Ci17Ci0gICAgaW5pdGlhbGl6ZUxvYWRlcihzY3JpcHRVcmwpOwotICAgIHNldFdvcmtlclRocmVh
ZChEZWRpY2F0ZWRXb3JrZXJUaHJlYWQ6OmNyZWF0ZShzY3JpcHRVcmwsIHVzZXJBZ2VudCwgc291
cmNlQ29kZSwgKnRoaXMsICp0aGlzLCBEb250UGF1c2VXb3JrZXJDb250ZXh0T25TdGFydCkpOwot
ICAgIC8vIFdvcmtlciBpbml0aWFsaXphdGlvbiBtZWFucyBhIHBlbmRpbmcgYWN0aXZpdHkuCi0g
ICAgcmVwb3J0UGVuZGluZ0FjdGl2aXR5KHRydWUpOwotICAgIHdvcmtlclRocmVhZCgpLT5zdGFy
dCgpOwotfQotCi12b2lkIFdlYldvcmtlckltcGw6OnRlcm1pbmF0ZVdvcmtlckNvbnRleHQoKQot
ewotICAgIHN0b3BXb3JrZXJUaHJlYWQoKTsKLX0KLQotdm9pZCBXZWJXb3JrZXJJbXBsOjpwb3N0
TWVzc2FnZVRvV29ya2VyQ29udGV4dChjb25zdCBXZWJTdHJpbmcmIG1lc3NhZ2UsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYk1lc3NhZ2VQ
b3J0Q2hhbm5lbEFycmF5JiB3ZWJDaGFubmVscykKLXsKLSAgICBPd25QdHI8TWVzc2FnZVBvcnRD
aGFubmVsQXJyYXk+IGNoYW5uZWxzOwotICAgIGlmICh3ZWJDaGFubmVscy5zaXplKCkpIHsKLSAg
ICAgICAgY2hhbm5lbHMgPSBhZG9wdFB0cihuZXcgTWVzc2FnZVBvcnRDaGFubmVsQXJyYXkod2Vi
Q2hhbm5lbHMuc2l6ZSgpKSk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd2ViQ2hh
bm5lbHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIFJlZlB0cjxQbGF0Zm9ybU1lc3NhZ2VQ
b3J0Q2hhbm5lbD4gcGxhdGZvcm1fY2hhbm5lbCA9Ci0gICAgICAgICAgICAgICAgUGxhdGZvcm1N
ZXNzYWdlUG9ydENoYW5uZWw6OmNyZWF0ZSh3ZWJDaGFubmVsc1tpXSk7Ci0gICAgICAgICAgICB3
ZWJDaGFubmVsc1tpXS0+c2V0Q2xpZW50KHBsYXRmb3JtX2NoYW5uZWwuZ2V0KCkpOwotICAgICAg
ICAgICAgKCpjaGFubmVscylbaV0gPSBNZXNzYWdlUG9ydENoYW5uZWw6OmNyZWF0ZShwbGF0Zm9y
bV9jaGFubmVsKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHdvcmtlclRocmVhZCgpLT5ydW5M
b29wKCkucG9zdFRhc2soCi0gICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmcG9zdE1lc3NhZ2VU
b1dvcmtlckNvbnRleHRUYXNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3dDcm9z
c1RocmVhZEFjY2Vzcyh0aGlzKSwgU3RyaW5nKG1lc3NhZ2UpLCBjaGFubmVscy5yZWxlYXNlKCkp
KTsKLX0KLQotdm9pZCBXZWJXb3JrZXJJbXBsOjp3b3JrZXJPYmplY3REZXN0cm95ZWQoKQotewot
ICAgIC8vIFdvcmtlciBvYmplY3QgaW4gdGhlIHJlbmRlcmVyIHdhcyBkZXN0cm95ZWQsIHBlcmhh
cHMgYSByZXN1bHQgb2YgR0MuCi0gICAgLy8gRm9yIHVzLCBpdCdzIGEgc2lnbmFsIHRvIHN0YXJ0
IHRlcm1pbmF0aW5nIHRoZSBXb3JrZXJDb250ZXh0IHRvby4KLSAgICAvLyBGSVhNRTogd2hlbiAn
a2lsbCBhIHdvcmtlcicgaHRtbDUgc3BlYyBhbGdvcml0aG0gaXMgaW1wbGVtZW50ZWQsIGl0Ci0g
ICAgLy8gc2hvdWxkIGJlIHVzZWQgaGVyZSBpbnN0ZWFkIG9mICd0ZXJtaW5hdGUgYSB3b3JrZXIn
LgotICAgIHRlcm1pbmF0ZVdvcmtlckNvbnRleHQoKTsKLX0KLQotdm9pZCBXZWJXb3JrZXJJbXBs
OjpjbGllbnREZXN0cm95ZWQoKQotewotICAgIG1fY2xpZW50ID0gMDsKLX0KLQotI2Vsc2UKLQot
V2ViV29ya2VyKiBXZWJXb3JrZXI6OmNyZWF0ZShXZWJXb3JrZXJDbGllbnQqIGNsaWVudCkKLXsK
LSAgICByZXR1cm4gMDsKLX0KLQotI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQotCi19IC8vIG5h
bWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YldvcmtlckltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckltcGwu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGYwNTJhNy4uMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJJbXBsLmgKKysrIC9kZXYvbnVsbApA
QCAtMSw4NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0g
KiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0g
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAot
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2lmbmRlZiBXZWJXb3JrZXJJbXBsX2gKLSNkZWZpbmUgV2ViV29ya2Vy
SW1wbF9oCi0KLSNpbmNsdWRlICJXZWJXb3JrZXIuaCIKLQotI2lmIEVOQUJMRShXT1JLRVJTKQot
Ci0jaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgotCi0jaW5jbHVkZSAiV2ViV29y
a2VyQmFzZS5oIgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotLy8gVGhpcyBjbGFzcyBpcyB1c2Vk
IGJ5IHRoZSB3b3JrZXIgcHJvY2VzcyBjb2RlIHRvIHRhbGsgdG8gdGhlIFdlYkNvcmU6Oldvcmtl
cgotLy8gaW1wbGVtZW50YXRpb24uICBJdCBjYW4ndCB1c2UgaXQgZGlyZWN0bHkgc2luY2UgaXQg
dXNlcyBXZWJLaXQgdHlwZXMsIHNvIHRoaXMKLS8vIGNsYXNzIGNvbnZlcnRzIHRoZSBkYXRhIHR5
cGVzLiAgV2hlbiB0aGUgV2ViQ29yZTo6V29ya2VyIG9iamVjdCB3YW50cyB0byBjYWxsCi0vLyBX
ZWJDb3JlOjpXb3JrZXJPYmplY3RQcm94eSwgdGhpcyBjbGFzcyB3aWxsIGNvbnZlciB0byBDaHJv
bWUgZGF0YSB0eXBlcyBmaXJzdAotLy8gYW5kIHRoZW4gY2FsbCB0aGUgc3VwcGxpZWQgV2ViV29y
a2VyQ2xpZW50LgotY2xhc3MgV2ViV29ya2VySW1wbCA6IHB1YmxpYyBXZWJXb3JrZXJCYXNlLCBw
dWJsaWMgV2ViV29ya2VyIHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBXZWJXb3JrZXJJbXBsKFdl
YldvcmtlckNsaWVudCogY2xpZW50KTsKLQotICAgIC8vIFdlYldvcmtlciBtZXRob2RzOgotICAg
IHZpcnR1YWwgdm9pZCBzdGFydFdvcmtlckNvbnRleHQoY29uc3QgV2ViVVJMJiwgY29uc3QgV2Vi
U3RyaW5nJiwgY29uc3QgV2ViU3RyaW5nJik7Ci0gICAgdmlydHVhbCB2b2lkIHRlcm1pbmF0ZVdv
cmtlckNvbnRleHQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcG9zdE1lc3NhZ2VUb1dvcmtlckNvbnRl
eHQoY29uc3QgV2ViU3RyaW5nJiwgY29uc3QgV2ViTWVzc2FnZVBvcnRDaGFubmVsQXJyYXkmKTsK
LSAgICB2aXJ0dWFsIHZvaWQgd29ya2VyT2JqZWN0RGVzdHJveWVkKCk7Ci0gICAgdmlydHVhbCB2
b2lkIGNsaWVudERlc3Ryb3llZCgpOwotCi0gICAgLy8gV2ViV29ya2VyQmFzZSBtZXRob2RzOgot
ICAgIHZpcnR1YWwgV2ViV29ya2VyQ2xpZW50KiBjbGllbnQoKSB7IHJldHVybiBtX2NsaWVudDsg
fQotICAgIHZpcnR1YWwgV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQoKTsKLQot
ICAgIC8vIE5ld1dlYldvcmtlckJhc2UgbWV0aG9kczoKLSAgICB2aXJ0dWFsIE5ld1dlYkNvbW1v
bldvcmtlckNsaWVudCogbmV3Q29tbW9uQ2xpZW50KCk7Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVh
bCB+V2ViV29ya2VySW1wbCgpOwotCi0gICAgLy8gVGFza3MgdGhhdCBhcmUgcnVuIG9uIHRoZSB3
b3JrZXIgdGhyZWFkLgotICAgIHN0YXRpYyB2b2lkIHBvc3RNZXNzYWdlVG9Xb3JrZXJDb250ZXh0
VGFzaygKLSAgICAgICAgV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwK
LSAgICAgICAgV2ViV29ya2VySW1wbCogdGhpc1B0ciwKLSAgICAgICAgY29uc3QgV1RGOjpTdHJp
bmcmIG1lc3NhZ2UsCi0gICAgICAgIFBhc3NPd25QdHI8V2ViQ29yZTo6TWVzc2FnZVBvcnRDaGFu
bmVsQXJyYXk+IGNoYW5uZWxzKTsKLQotICAgIFdlYldvcmtlckNsaWVudCogbV9jbGllbnQ7Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQot
Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckZp
bGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZS5jcHAKaW5kZXggNTIzZWY3NS4uOGNlNWU2
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyRmlsZVN5c3Rl
bUNhbGxiYWNrc0JyaWRnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29y
a2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZS5jcHAKQEAgLTE1Niw3ICsxNTYsNyBAQCB2b2lk
IFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OnN0b3AoKQogICAgIH0KIH0KIAotdm9p
ZCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpwb3N0T3BlbkZpbGVTeXN0ZW1Ub01h
aW5UaHJlYWQoTmV3V2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQsIFdlYkZpbGVT
eXN0ZW06OlR5cGUgdHlwZSwgbG9uZyBsb25nIHNpemUsIGJvb2wgY3JlYXRlLCBjb25zdCBTdHJp
bmcmIG1vZGUpCit2b2lkIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OnBvc3RPcGVu
RmlsZVN5c3RlbVRvTWFpblRocmVhZChXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1vbkNsaWVu
dCwgV2ViRmlsZVN5c3RlbTo6VHlwZSB0eXBlLCBsb25nIGxvbmcgc2l6ZSwgYm9vbCBjcmVhdGUs
IGNvbnN0IFN0cmluZyYgbW9kZSkKIHsKICAgICBkaXNwYXRjaFRhc2tUb01haW5UaHJlYWQoCiAg
ICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmb3BlbkZpbGVTeXN0ZW1Pbk1haW5UaHJlYWQsCkBA
IC0yNTEsNyArMjUxLDcgQEAgdm9pZCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpw
b3N0UmVhZERpcmVjdG9yeVRvTWFpblRocmVhZChXZWJGaWxlU3lzdGUKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcyksIG1vZGUpKTsKIH0KIAot
dm9pZCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpvcGVuRmlsZVN5c3RlbU9uTWFp
blRocmVhZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgTmV3V2ViQ29tbW9uV29ya2VyQ2xpZW50
KiBjb21tb25DbGllbnQsIFdlYkZpbGVTeXN0ZW06OlR5cGUgdHlwZSwgbG9uZyBsb25nIHNpemUs
IGJvb2wgY3JlYXRlLCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlKiBicmlkZ2UsIGNv
bnN0IFN0cmluZyYgbW9kZSkKK3ZvaWQgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6
b3BlbkZpbGVTeXN0ZW1Pbk1haW5UaHJlYWQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYkNv
bW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50LCBXZWJGaWxlU3lzdGVtOjpUeXBlIHR5cGUs
IGxvbmcgbG9uZyBzaXplLCBib29sIGNyZWF0ZSwgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0Jy
aWRnZSogYnJpZGdlLCBjb25zdCBTdHJpbmcmIG1vZGUpCiB7CiAgICAgaWYgKCFjb21tb25DbGll
bnQpCiAgICAgICAgIGJyaWRnZS0+ZGlkRmFpbE9uTWFpblRocmVhZChXZWJGaWxlRXJyb3JBYm9y
dCwgbW9kZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJG
aWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
b3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlLmgKaW5kZXggOGFlN2ViMy4uOWM0NGNiMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyRmlsZVN5c3RlbUNh
bGxiYWNrc0JyaWRnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckZp
bGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UuaApAQCAtNTEsNyArNTEsNyBAQCBuYW1lc3BhY2UgV2Vi
S2l0IHsKIAogY2xhc3MgQXN5bmNGaWxlU3lzdGVtOwogY2xhc3MgTWFpblRocmVhZEZpbGVTeXN0
ZW1DYWxsYmFja3M7Ci1jbGFzcyBOZXdXZWJDb21tb25Xb3JrZXJDbGllbnQ7CitjbGFzcyBXZWJD
b21tb25Xb3JrZXJDbGllbnQ7CiBjbGFzcyBUaHJlYWRhYmxlQ2FsbGJhY2tzQnJpZGdlV3JhcHBl
cjsKIGNsYXNzIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3M7CiBzdHJ1Y3QgV2ViRmlsZUluZm87CkBA
IC04Nyw3ICs4Nyw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICAvLyBNZXRob2RzIHRoYXQgY3Jl
YXRlIGFuIGluc3RhbmNlIGFuZCBwb3N0IGFuIGluaXRpYWwgcmVxdWVzdCB0YXNrIHRvIHRoZSBt
YWluIHRocmVhZC4gVGhleSBtdXN0IGJlIGNhbGxlZCBvbiB0aGUgd29ya2VyIHRocmVhZC4KLSAg
ICB2b2lkIHBvc3RPcGVuRmlsZVN5c3RlbVRvTWFpblRocmVhZChOZXdXZWJDb21tb25Xb3JrZXJD
bGllbnQqLCBXZWJGaWxlU3lzdGVtOjpUeXBlLCBsb25nIGxvbmcgc2l6ZSwgYm9vbCBjcmVhdGUs
IGNvbnN0IFN0cmluZyYgbW9kZSk7CisgICAgdm9pZCBwb3N0T3BlbkZpbGVTeXN0ZW1Ub01haW5U
aHJlYWQoV2ViQ29tbW9uV29ya2VyQ2xpZW50KiwgV2ViRmlsZVN5c3RlbTo6VHlwZSwgbG9uZyBs
b25nIHNpemUsIGJvb2wgY3JlYXRlLCBjb25zdCBTdHJpbmcmIG1vZGUpOwogICAgIHZvaWQgcG9z
dE1vdmVUb01haW5UaHJlYWQoV2ViRmlsZVN5c3RlbSosIGNvbnN0IFdlYkNvcmU6OktVUkwmIHNy
Y1BhdGgsIGNvbnN0IFdlYkNvcmU6OktVUkwmIGRlc3RQYXRoLCBjb25zdCBTdHJpbmcmIG1vZGUp
OwogICAgIHZvaWQgcG9zdENvcHlUb01haW5UaHJlYWQoV2ViRmlsZVN5c3RlbSosIGNvbnN0IFdl
YkNvcmU6OktVUkwmIHNyY1BhdGgsIGNvbnN0IFdlYkNvcmU6OktVUkwmIGRlc3RQYXRoLCBjb25z
dCBTdHJpbmcmIG1vZGUpOwogICAgIHZvaWQgcG9zdFJlbW92ZVRvTWFpblRocmVhZChXZWJGaWxl
U3lzdGVtKiwgY29uc3QgV2ViQ29yZTo6S1VSTCYgcGF0aCwgY29uc3QgU3RyaW5nJiBtb2RlKTsK
QEAgLTExMCw3ICsxMTAsNyBAQCBwcml2YXRlOgogICAgIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFj
a3NCcmlkZ2UoV2ViQ29yZTo6V29ya2VyTG9hZGVyUHJveHkqLCBXZWJDb3JlOjpTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgV2ViRmlsZVN5c3RlbUNhbGxiYWNrcyopOwogCiAgICAgLy8gTWV0aG9k
cyB0aGF0IGFyZSB0byBiZSBjYWxsZWQgb24gdGhlIG1haW4gdGhyZWFkLgotICAgIHN0YXRpYyB2
b2lkIG9wZW5GaWxlU3lzdGVtT25NYWluVGhyZWFkKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBOZXdXZWJDb21tb25Xb3JrZXJDbGllbnQqLCBXZWJGaWxlU3lzdGVtOjpUeXBlLCBs
b25nIGxvbmcgc2l6ZSwgYm9vbCBjcmVhdGUsIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlk
Z2UqLCBjb25zdCBTdHJpbmcmIG1vZGUpOworICAgIHN0YXRpYyB2b2lkIG9wZW5GaWxlU3lzdGVt
T25NYWluVGhyZWFkKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJDb21tb25X
b3JrZXJDbGllbnQqLCBXZWJGaWxlU3lzdGVtOjpUeXBlLCBsb25nIGxvbmcgc2l6ZSwgYm9vbCBj
cmVhdGUsIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UqLCBjb25zdCBTdHJpbmcmIG1v
ZGUpOwogICAgIHN0YXRpYyB2b2lkIG1vdmVPbk1haW5UaHJlYWQoV2ViQ29yZTo6U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIFdlYkZpbGVTeXN0ZW0qLCBjb25zdCBXZWJDb3JlOjpLVVJMJiBzcmNQ
YXRoLCBjb25zdCBXZWJDb3JlOjpLVVJMJiBkZXN0UGF0aCwgV29ya2VyRmlsZVN5c3RlbUNhbGxi
YWNrc0JyaWRnZSosIGNvbnN0IFN0cmluZyYgbW9kZSk7CiAgICAgc3RhdGljIHZvaWQgY29weU9u
TWFpblRocmVhZChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViRmlsZVN5c3Rl
bSosIGNvbnN0IFdlYkNvcmU6OktVUkwmIHNyY1BhdGgsIGNvbnN0IFdlYkNvcmU6OktVUkwmIGRl
c3RQYXRoLCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlKiwgY29uc3QgU3RyaW5nJiBt
b2RlKTsKICAgICBzdGF0aWMgdm9pZCByZW1vdmVPbk1haW5UaHJlYWQoV2ViQ29yZTo6U2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFdlYkZpbGVTeXN0ZW0qLCBjb25zdCBXZWJDb3JlOjpLVVJMJiBw
YXRoLCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlKiwgY29uc3QgU3RyaW5nJiBtb2Rl
KTsK
</data>
<flag name="commit-queue"
          id="120636"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120395</attachid>
            <date>2011-12-22 15:45:14 -0800</date>
            <delta_ts>2011-12-22 16:17:53 -0800</delta_ts>
            <desc>DumpRenderTree fixed</desc>
            <filename>66509.patch</filename>
            <type>text/plain</type>
            <size>82490</size>
            <attacher name="Dmitry Lomov">dslomov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggZjQwNzFhMi4uYzUyNGM0OSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4NyBAQAorMjAxMS0xMi0yMiAgRG1pdHJ5IExv
bW92ICA8ZHNsb21vdkBnb29nbGUuY29tPgorCisgICAgICAgIFtXZWJXb3JrZXJzXVtDaHJvbWl1
bV0gUmVtb3ZlIHJlbWFpbnMgb2YgY3Jvc3MtcHJvY2VzcyBkZWRpY2F0ZWQgd29ya2VyIGltcGxl
bWVudGF0aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NjY1MDkKKyAgICAgICAgSnVzdCByZW5hbWVzLCBtZXJnZXMgYW5kIHJlbW92YWwgb2YgZGVh
ZCBjb2RlLiBIZXJlIGFyZSB0aGUgbGlzdCBvZiByZW5hbWVzOgorICAgICAgICAgIC0gV2ViQ29t
bW9uV29ya2VyQ2xpZW50IG1lcmdlZCB3aXRoIFdlYldvcmtlckNsaWVudCBhbmQgcmVuYW1lZCB0
byBXZWJTaGFyZWRXb3JrZXJDbGllbnQKKyAgICAgICAgICAtIE5ld1dlYkNvbW1vbldvcmtlckNs
aWVudCByZW5hbWVkIHRvIFdlYkNvbW1vbldvcmtlckNsaWVudAorICAgICAgICAgIC0gV2ViV29y
a2VyQmFzZSBtZXJnZWQgaW50byBXZWJTaGFyZWRXb3JrZXJJbXBsCisgICAgICAgICAgLSBOZXdX
ZWJXb3JrZXJCYXNlIHJlbmFtZWQgaW50byBXZWJXb3JrZXJCYXNlCisgICAgICAgIFdlYldvcmtl
ckNsaWVudC5oIGhhcyBhICIjZGVmaW5lIFdlYldvcmtlckNsaWVudCBXZWJTaGFyZWRXb3JrZXJD
bGllbnQiIHRvIGtlZXAgY2hyb21pdW0gYnVpbGRpbmcuCisgICAgICAgIFdpbGwgYmUgcmVtb3Zl
ZCBhZnRlciBjb29yZGluYXRlZCBwYXRjaCBpbiBjaHJvbWl1bS4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdC5neXA6CisgICAgICAgICog
cHVibGljL1dlYkNvbW1vbldvcmtlckNsaWVudC5oOgorICAgICAgICAqIHB1YmxpYy9XZWJTaGFy
ZWRXb3JrZXIuaDoKKyAgICAgICAgKiBwdWJsaWMvV2ViU2hhcmVkV29ya2VyQ2xpZW50Lmg6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNvbW1vbldvcmtlckNs
aWVudC5oLgorICAgICAgICAoV2ViS2l0OjpXZWJTaGFyZWRXb3JrZXJDbGllbnQ6OnBvc3RDb25z
b2xlTWVzc2FnZVRvV29ya2VyT2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViU2hhcmVkV29y
a2VyQ2xpZW50OjphbGxvd0ZpbGVTeXN0ZW0pOgorICAgICAgICAoV2ViS2l0OjpXZWJTaGFyZWRX
b3JrZXJDbGllbnQ6Om9wZW5GaWxlU3lzdGVtKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2hhcmVk
V29ya2VyQ2xpZW50OjpkaXNwYXRjaERldlRvb2xzTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYlNoYXJlZFdvcmtlckNsaWVudDo6c2F2ZURldlRvb2xzQWdlbnRTdGF0ZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYlNoYXJlZFdvcmtlckNsaWVudDo6fldlYlNoYXJlZFdvcmtlckNsaWVudCk6
CisgICAgICAgICogcHVibGljL1dlYldvcmtlckNsaWVudC5oOgorICAgICAgICAqIHNyYy9EYXRh
YmFzZU9ic2VydmVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6QWxsb3dEYXRhYmFzZU1haW5UaHJl
YWRCcmlkZ2U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkFsbG93RGF0YWJhc2VNYWluVGhy
ZWFkQnJpZGdlOjpBbGxvd0RhdGFiYXNlTWFpblRocmVhZEJyaWRnZSk6CisgICAgICAgIChXZWJL
aXQ6OkFsbG93RGF0YWJhc2VNYWluVGhyZWFkQnJpZGdlOjphbGxvd0RhdGFiYXNlVGFzayk6Cisg
ICAgICAgIChXZWJLaXQ6OmFsbG93RGF0YWJhc2VGb3JXb3JrZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0YWJhc2VPYnNlcnZlcjo6Y2FuRXN0YWJsaXNoRGF0YWJhc2UpOgorICAgICAgICAqIHNy
Yy9JREJGYWN0b3J5QmFja2VuZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6SURCRmFjdG9y
eUJhY2tlbmRQcm94eTo6b3BlbkZyb21Xb3JrZXIpOgorICAgICAgICAqIHNyYy9Mb2NhbEZpbGVT
eXN0ZW1DaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpvcGVuRmlsZVN5c3RlbUhlbHBl
cik6CisgICAgICAgICogc3JjL1dlYlNoYXJlZFdvcmtlckltcGwuY3BwOgorICAgICAgICAoV2Vi
S2l0Ojppbml0aWFsaXplV2ViS2l0U3RhdGljVmFsdWVzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
U2hhcmVkV29ya2VySW1wbDo6V2ViU2hhcmVkV29ya2VySW1wbCk6CisgICAgICAgIChXZWJLaXQ6
OldlYlNoYXJlZFdvcmtlckltcGw6On5XZWJTaGFyZWRXb3JrZXJJbXBsKToKKyAgICAgICAgKFdl
YktpdDo6V2ViU2hhcmVkV29ya2VySW1wbDo6c3RvcFdvcmtlclRocmVhZCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlNoYXJlZFdvcmtlckltcGw6OmluaXRpYWxpemVMb2FkZXIpOgorICAgICAgICAo
V2ViS2l0OjpXZWJTaGFyZWRXb3JrZXJJbXBsOjpkaWRDcmVhdGVEYXRhU291cmNlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViU2hhcmVkV29ya2VySW1wbDo6Y3JlYXRlQXBwbGljYXRpb25DYWNoZUhv
c3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJTaGFyZWRXb3JrZXJJbXBsOjpwb3N0TWVzc2FnZVRv
V29ya2VyT2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViU2hhcmVkV29ya2VySW1wbDo6cG9z
dE1lc3NhZ2VUYXNrKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2hhcmVkV29ya2VySW1wbDo6cG9z
dEV4Y2VwdGlvblRvV29ya2VyT2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViU2hhcmVkV29y
a2VySW1wbDo6cG9zdEV4Y2VwdGlvblRhc2spOgorICAgICAgICAoV2ViS2l0OjpXZWJTaGFyZWRX
b3JrZXJJbXBsOjpwb3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlNoYXJlZFdvcmtlckltcGw6OnBvc3RDb25zb2xlTWVzc2FnZVRhc2spOgorICAg
ICAgICAoV2ViS2l0OjpXZWJTaGFyZWRXb3JrZXJJbXBsOjpwb3N0TWVzc2FnZVRvUGFnZUluc3Bl
Y3Rvcik6CisgICAgICAgIChXZWJLaXQ6OldlYlNoYXJlZFdvcmtlckltcGw6OnBvc3RNZXNzYWdl
VG9QYWdlSW5zcGVjdG9yVGFzayk6CisgICAgICAgIChXZWJLaXQ6OldlYlNoYXJlZFdvcmtlcklt
cGw6OnVwZGF0ZUluc3BlY3RvclN0YXRlQ29va2llKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2hh
cmVkV29ya2VySW1wbDo6dXBkYXRlSW5zcGVjdG9yU3RhdGVDb29raWVUYXNrKToKKyAgICAgICAg
KFdlYktpdDo6V2ViU2hhcmVkV29ya2VySW1wbDo6Y29uZmlybU1lc3NhZ2VGcm9tV29ya2VyT2Jq
ZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViU2hhcmVkV29ya2VySW1wbDo6Y29uZmlybU1lc3Nh
Z2VUYXNrKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2hhcmVkV29ya2VySW1wbDo6cmVwb3J0UGVu
ZGluZ0FjdGl2aXR5KToKKyAgICAgICAgKFdlYktpdDo6V2ViU2hhcmVkV29ya2VySW1wbDo6cmVw
b3J0UGVuZGluZ0FjdGl2aXR5VGFzayk6CisgICAgICAgIChXZWJLaXQ6OldlYlNoYXJlZFdvcmtl
ckltcGw6OndvcmtlckNvbnRleHRDbG9zZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJTaGFyZWRX
b3JrZXJJbXBsOjp3b3JrZXJDb250ZXh0Q2xvc2VkVGFzayk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlNoYXJlZFdvcmtlckltcGw6OndvcmtlckNvbnRleHREZXN0cm95ZWQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJTaGFyZWRXb3JrZXJJbXBsOjp3b3JrZXJDb250ZXh0RGVzdHJveWVkVGFzayk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlNoYXJlZFdvcmtlckltcGw6OnBvc3RUYXNrVG9Mb2FkZXIpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJTaGFyZWRXb3JrZXJJbXBsOjpwb3N0VGFza0Zvck1vZGVUb1dv
cmtlckNvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJTaGFyZWRXb3JrZXI6OmNyZWF0ZSk6
CisgICAgICAgICogc3JjL1dlYlNoYXJlZFdvcmtlckltcGwuaDoKKyAgICAgICAgKFdlYktpdDo6
V2ViU2hhcmVkV29ya2VySW1wbDo6dmlldyk6CisgICAgICAgIChXZWJLaXQ6OldlYlNoYXJlZFdv
cmtlckltcGw6OmNvbW1vbkNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNoYXJlZFdvcmtl
ckltcGw6OmNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNoYXJlZFdvcmtlckltcGw6OnNl
dFdvcmtlclRocmVhZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNoYXJlZFdvcmtlckltcGw6Ondv
cmtlclRocmVhZCk6CisgICAgICAgICogc3JjL1dlYldvcmtlckJhc2UuY3BwOgorICAgICAgICAo
V2ViS2l0OjppbnZva2VUYXNrTWV0aG9kKToKKyAgICAgICAgKFdlYktpdDo6V2ViV29ya2VyQmFz
ZTo6ZGlzcGF0Y2hUYXNrVG9NYWluVGhyZWFkKToKKyAgICAgICAgKiBzcmMvV2ViV29ya2VyQmFz
ZS5oOgorICAgICAgICAqIHNyYy9XZWJXb3JrZXJDbGllbnRJbXBsLmNwcDoKKyAgICAgICAgKiBz
cmMvV2ViV29ya2VyQ2xpZW50SW1wbC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJXb3JrZXJDbGll
bnRJbXBsOjpjb21tb25DbGllbnQpOgorICAgICAgICAqIHNyYy9XZWJXb3JrZXJJbXBsLmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvV2ViV29ya2VySW1wbC5oOiBSZW1vdmVkLgorICAgICAg
ICAqIHNyYy9Xb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6cG9zdE9wZW5GaWxlU3lzdGVt
VG9NYWluVGhyZWFkKToKKyAgICAgICAgKFdlYktpdDo6V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNr
c0JyaWRnZTo6b3BlbkZpbGVTeXN0ZW1Pbk1haW5UaHJlYWQpOgorICAgICAgICAqIHNyYy9Xb3Jr
ZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlLmg6CisKIDIwMTEtMTItMjEgIFBldGVyIEtvdHdp
Y3ogIDxwa290d2ljekBnb29nbGUuY29tPgogCiAgICAgICAgIFBsdW1icyByZWZyZXNoIHJhdGUg
dGhyb3VnaCBXZWJMYXllclRyZWVWaWV3OjpTZXR0aW5ncwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQu
Z3lwCmluZGV4IDc0NzZiMjYuLjU3ZThhYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vV2ViS2l0Lmd5cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAK
QEAgLTIzNiw2ICsyMzYsNyBAQAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViU2VjdXJpdHlQ
b2xpY3kuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJTZWxlY3RFbGVtZW50LmgnLAog
ICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViU2V0dGluZ3MuaCcsCisgICAgICAgICAgICAgICAg
J3B1YmxpYy9XZWJTaGFyZWRXb3JrZXJDbGllbnQuaCcsCiAgICAgICAgICAgICAgICAgJ3B1Ymxp
Yy9XZWJTaGFyZWRXb3JrZXIuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJTaGFyZWRX
b3JrZXJSZXBvc2l0b3J5LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViU29ja2V0Lmgn
LApAQCAtNjY2LDggKzY2Nyw2IEBACiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJXb3JrZXJCYXNl
LmgnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViV29ya2VyQ2xpZW50SW1wbC5jcHAnLAogICAg
ICAgICAgICAgICAgICdzcmMvV2ViV29ya2VyQ2xpZW50SW1wbC5oJywKLSAgICAgICAgICAgICAg
ICAnc3JjL1dlYldvcmtlckltcGwuY3BwJywKLSAgICAgICAgICAgICAgICAnc3JjL1dlYldvcmtl
ckltcGwuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJXb3JrZXJSdW5Mb29wLmNwcCcsCiAg
ICAgICAgICAgICAgICAgJ3NyYy9Xb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAnLAog
ICAgICAgICAgICAgICAgICdzcmMvV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uaCcsCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDb21tb25Xb3JrZXJD
bGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNvbW1vbldvcmtlckNs
aWVudC5oCmluZGV4IGE3OTQ1MzkuLjJmZmI1NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYkNvbW1vbldvcmtlckNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYkNvbW1vbldvcmtlckNsaWVudC5oCkBAIC00NCw3ICs0NCw3
IEBAIGNsYXNzIFdlYlN0cmluZzsKIGNsYXNzIFdlYldvcmtlcjsKIGNsYXNzIFdlYldvcmtlckNs
aWVudDsKIAotY2xhc3MgTmV3V2ViQ29tbW9uV29ya2VyQ2xpZW50IHsKK2NsYXNzIFdlYkNvbW1v
bldvcmtlckNsaWVudCB7CiBwdWJsaWM6CiAgICAgLy8gQ2FsbGVkIG9uIHRoZSBtYWluIHdlYmtp
dCB0aHJlYWQgYmVmb3JlIG9wZW5pbmcgYSB3ZWIgZGF0YWJhc2UuCiAgICAgdmlydHVhbCBib29s
IGFsbG93RGF0YWJhc2UoV2ViRnJhbWUqLCBjb25zdCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdl
YlN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkgPSAwOwpA
QCAtNTYsNjYgKzU2LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBvcGVuRmlsZVN5c3Rl
bShXZWJGaWxlU3lzdGVtOjpUeXBlLCBsb25nIGxvbmcgc2l6ZSwgYm9vbCBjcmVhdGUsIFdlYkZp
bGVTeXN0ZW1DYWxsYmFja3MqKSA9IDA7CiB9OwogCi0vLyBQcm92aWRlcyBhbiBpbnRlcmZhY2Ug
YmFjayB0byB0aGUgaW4tcGFnZSBzY3JpcHQgb2JqZWN0IGZvciBhIHdvcmtlci4KLS8vIFRoaXMg
aW50ZXJmYWNlIGNvbnRhaW5zIGNvbW1vbiBBUElzIHVzZWQgYnkgYm90aCBzaGFyZWQgYW5kIGRl
ZGljYXRlZAotLy8gd29ya2Vycy4KLS8vIEFsbCBmdW5jdGlvbnMgYXJlIGV4cGVjdGVkIHRvIGJl
IGNhbGxlZCBiYWNrIG9uIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkCi0vLyB0aGUgV29ya2VyIG9i
amVjdCwgdW5sZXNzIG5vdGVkLgotY2xhc3MgV2ViQ29tbW9uV29ya2VyQ2xpZW50IDogcHVibGlj
IE5ld1dlYkNvbW1vbldvcmtlckNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIHBv
c3RFeGNlcHRpb25Ub1dvcmtlck9iamVjdCgKLSAgICAgICAgY29uc3QgV2ViU3RyaW5nJiBlcnJv
clN0cmluZywgaW50IGxpbmVOdW1iZXIsCi0gICAgICAgIGNvbnN0IFdlYlN0cmluZyYgc291cmNl
VVJMKSA9IDA7Ci0KLSAgICAvLyBGSVhNRTogdGhlIGJlbG93IGlzIGZvciBjb21wYXRpYmlsaXR5
IG9ubHkgYW5kIHNob3VsZCBiZSAgIAotICAgIC8vIHJlbW92ZWQgb25jZSBDaHJvbWl1bSBpcyB1
cGRhdGVkIHRvIHJlbW92ZSBtZXNzYWdlCi0gICAgLy8gZGVzdGluYXRpb24gcGFyYW1ldGVyIDxo
dHRwOi8vd2Via2l0Lm9yZy9iLzM3MTU1Pi4KLSAgICB2aXJ0dWFsIHZvaWQgcG9zdENvbnNvbGVN
ZXNzYWdlVG9Xb3JrZXJPYmplY3QoaW50LCBpbnQgc291cmNlSWRlbnRpZmllciwgaW50IG1lc3Nh
Z2VUeXBlLCBpbnQgbWVzc2FnZUxldmVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJTdHJpbmcmIG1lc3NhZ2UsIGludCBsaW5lTnVt
YmVyLCBjb25zdCBXZWJTdHJpbmcmIHNvdXJjZVVSTCkgPSAwOwotCi0gICAgdmlydHVhbCB2b2lk
IHBvc3RDb25zb2xlTWVzc2FnZVRvV29ya2VyT2JqZWN0KGludCBzb3VyY2VJZGVudGlmaWVyLCBp
bnQgbWVzc2FnZVR5cGUsIGludCBtZXNzYWdlTGV2ZWwsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlN0cmluZyYgbWVzc2FnZSwgaW50
IGxpbmVOdW1iZXIsIGNvbnN0IFdlYlN0cmluZyYgc291cmNlVVJMKQotICAgIHsKLSAgICAgICAg
cG9zdENvbnNvbGVNZXNzYWdlVG9Xb3JrZXJPYmplY3QoMCwgc291cmNlSWRlbnRpZmllciwgbWVz
c2FnZVR5cGUsIG1lc3NhZ2VMZXZlbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbWVzc2FnZSwgbGluZU51bWJlciwgc291cmNlVVJMKTsKLSAgICB9Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgd29ya2VyQ29udGV4dENsb3NlZCgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
d29ya2VyQ29udGV4dERlc3Ryb3llZCgpID0gMDsKLQotICAgIC8vIFJldHVybnMgdGhlIG5vdGlm
aWNhdGlvbiBwcmVzZW50ZXIgZm9yIHRoaXMgd29ya2VyIGNvbnRleHQuICBQb2ludGVyCi0gICAg
Ly8gaXMgb3duZWQgYnkgdGhlIG9iamVjdCBpbXBsZW1lbnRpbmcgV2ViQ29tbW9uV29ya2VyQ2xp
ZW50LgotICAgIHZpcnR1YWwgV2ViTm90aWZpY2F0aW9uUHJlc2VudGVyKiBub3RpZmljYXRpb25Q
cmVzZW50ZXIoKSA9IDA7Ci0KLSAgICAvLyBUaGlzIGNhbiBiZSBjYWxsZWQgb24gYW55IHRocmVh
ZCB0byBjcmVhdGUgYSBuZXN0ZWQgV2ViV29ya2VyLgotICAgIC8vIFdlYlNoYXJlZFdvcmtlcnMg
YXJlIG5vdCBpbnN0YW50aWF0ZWQgdmlhIHRoaXMgQVBJIC0gaW5zdGVhZAotICAgIC8vIHRoZXkg
YXJlIGNyZWF0ZWQgdmlhIHRoZSBXZWJTaGFyZWRXb3JrZXJSZXBvc2l0b3J5LgotICAgIHZpcnR1
YWwgV2ViV29ya2VyKiBjcmVhdGVXb3JrZXIoV2ViV29ya2VyQ2xpZW50KiBjbGllbnQpID0gMDsK
LQotICAgIC8vIENhbGxlZCBvbiB0aGUgbWFpbiB3ZWJraXQgdGhyZWFkIGluIHRoZSB3b3JrZXIg
cHJvY2VzcyBkdXJpbmcgaW5pdGlhbGl6YXRpb24uCi0gICAgdmlydHVhbCBXZWJBcHBsaWNhdGlv
bkNhY2hlSG9zdCogY3JlYXRlQXBwbGljYXRpb25DYWNoZUhvc3QoV2ViQXBwbGljYXRpb25DYWNo
ZUhvc3RDbGllbnQqKSA9IDA7Ci0KLSAgICAvLyBDYWxsZWQgb24gdGhlIG1haW4gd2Via2l0IHRo
cmVhZCBiZWZvcmUgb3BlbmluZyBhIHdlYiBkYXRhYmFzZS4KLSAgICB2aXJ0dWFsIGJvb2wgYWxs
b3dEYXRhYmFzZShXZWJGcmFtZSosIGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgY29uc3QgV2ViU3Ry
aW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKSA9IDA7Ci0KLSAg
ICAvLyBDYWxsZWQgb24gdGhlIG1haW4gd2Via2l0IHRocmVhZCBiZWZvcmUgb3BlbmluZyBhIGZp
bGUgc3lzdGVtLgotICAgIHZpcnR1YWwgYm9vbCBhbGxvd0ZpbGVTeXN0ZW0oKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLy8gQ2FsbGVkIG9uIHRoZSBtYWluIHdl
YmtpdCB0aHJlYWQgYmVmb3JlIG9wZW5pbmcgYSBmaWxlIHN5c3RlbS4KLSAgICB2aXJ0dWFsIHZv
aWQgb3BlbkZpbGVTeXN0ZW0oV2ViRmlsZVN5c3RlbTo6VHlwZSwgbG9uZyBsb25nIHNpemUsIGJv
b2wgY3JlYXRlLCBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzKikKLSAgICB7Ci0gICAgICAgIFdFQktJ
VF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0
Y2hEZXZUb29sc01lc3NhZ2UoY29uc3QgV2ViU3RyaW5nJikgeyB9Ci0gICAgdmlydHVhbCB2b2lk
IHNhdmVEZXZUb29sc0FnZW50U3RhdGUoY29uc3QgV2ViU3RyaW5nJikgeyB9Ci0KLXByb3RlY3Rl
ZDoKLSAgICB+V2ViQ29tbW9uV29ya2VyQ2xpZW50KCkgeyB9Ci19OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2Vi
U2hhcmVkV29ya2VyLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTaGFyZWRX
b3JrZXIuaAppbmRleCA3ZDVkMDAzLi40NDdmN2Y0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJTaGFyZWRXb3JrZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJTaGFyZWRXb3JrZXIuaApAQCAtNDEsNyArNDEsNyBAQCBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIAogY2xhc3MgV2ViU3RyaW5nOwogY2xhc3MgV2ViTWVzc2FnZVBvcnRDaGFu
bmVsOwotY2xhc3MgV2ViQ29tbW9uV29ya2VyQ2xpZW50OworY2xhc3MgV2ViU2hhcmVkV29ya2Vy
Q2xpZW50OwogY2xhc3MgV2ViVVJMOwogCiAvLyBUaGlzIGlzIHRoZSBpbnRlcmZhY2UgdG8gYSBT
aGFyZWRXb3JrZXIgdGhyZWFkLgpAQCAtNDksNyArNDksNyBAQCBjbGFzcyBXZWJVUkw7CiBjbGFz
cyBXZWJTaGFyZWRXb3JrZXIgewogcHVibGljOgogICAgIC8vIEludm9rZWQgZnJvbSB0aGUgd29y
a2VyIHRocmVhZCB0byBpbnN0YW50aWF0ZSBhIFdlYlNoYXJlZFdvcmtlciB0aGF0IGludGVyYWN0
cyB3aXRoIHRoZSBXZWJLaXQgd29ya2VyIGNvbXBvbmVudHMuCi0gICAgV0VCS0lUX0VYUE9SVCBz
dGF0aWMgV2ViU2hhcmVkV29ya2VyKiBjcmVhdGUoV2ViQ29tbW9uV29ya2VyQ2xpZW50Kik7Cisg
ICAgV0VCS0lUX0VYUE9SVCBzdGF0aWMgV2ViU2hhcmVkV29ya2VyKiBjcmVhdGUoV2ViU2hhcmVk
V29ya2VyQ2xpZW50Kik7CiAKICAgICB2aXJ0dWFsIH5XZWJTaGFyZWRXb3JrZXIoKSB7fTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2hhcmVkV29ya2Vy
Q2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTaGFyZWRXb3JrZXJD
bGllbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTcwMGM2Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2hhcmVkV29y
a2VyQ2xpZW50LmgKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlNoYXJlZFdvcmtlckNsaWVu
dF9oCisjZGVmaW5lIFdlYlNoYXJlZFdvcmtlckNsaWVudF9oCisKKyNpbmNsdWRlICJXZWJDb21t
b25Xb3JrZXJDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJNZXNzYWdlUG9ydENoYW5uZWwuaCIKKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYk5vdGlmaWNhdGlvblByZXNlbnRlcjsKK2Ns
YXNzIFdlYlN0cmluZzsKK2NsYXNzIFdlYldvcmtlcjsKKworLy8gUHJvdmlkZXMgYW4gaW50ZXJm
YWNlIGJhY2sgdG8gdGhlIGluLXBhZ2Ugc2NyaXB0IG9iamVjdCBmb3IgYSB3b3JrZXIuCisvLyBB
bGwgZnVuY3Rpb25zIGFyZSBleHBlY3RlZCB0byBiZSBjYWxsZWQgYmFjayBvbiB0aGUgdGhyZWFk
IHRoYXQgY3JlYXRlZAorLy8gdGhlIFdvcmtlciBvYmplY3QsIHVubGVzcyBub3RlZC4KK2NsYXNz
IFdlYlNoYXJlZFdvcmtlckNsaWVudCA6IHB1YmxpYyBXZWJDb21tb25Xb3JrZXJDbGllbnQgewor
cHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBwb3N0TWVzc2FnZVRvV29ya2VyT2JqZWN0KAorICAg
ICAgICBjb25zdCBXZWJTdHJpbmcmLAorICAgICAgICBjb25zdCBXZWJNZXNzYWdlUG9ydENoYW5u
ZWxBcnJheSYpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBjb25maXJtTWVzc2FnZUZyb21Xb3Jr
ZXJPYmplY3QoYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
cmVwb3J0UGVuZGluZ0FjdGl2aXR5KGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KSA9IDA7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgcG9zdEV4Y2VwdGlvblRvV29ya2VyT2JqZWN0KAorICAgICAgICBjb25z
dCBXZWJTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbGluZU51bWJlciwKKyAgICAgICAgY29uc3Qg
V2ViU3RyaW5nJiBzb3VyY2VVUkwpID0gMDsKKworICAgIC8vIEZJWE1FOiB0aGUgYmVsb3cgaXMg
Zm9yIGNvbXBhdGliaWxpdHkgb25seSBhbmQgc2hvdWxkIGJlICAgCisgICAgLy8gcmVtb3ZlZCBv
bmNlIENocm9taXVtIGlzIHVwZGF0ZWQgdG8gcmVtb3ZlIG1lc3NhZ2UKKyAgICAvLyBkZXN0aW5h
dGlvbiBwYXJhbWV0ZXIgPGh0dHA6Ly93ZWJraXQub3JnL2IvMzcxNTU+LgorICAgIHZpcnR1YWwg
dm9pZCBwb3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdChpbnQsIGludCBzb3VyY2VJZGVu
dGlmaWVyLCBpbnQgbWVzc2FnZVR5cGUsIGludCBtZXNzYWdlTGV2ZWwsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlN0cmluZyYgbWVz
c2FnZSwgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFdlYlN0cmluZyYgc291cmNlVVJMKSA9IDA7CisK
KyAgICB2aXJ0dWFsIHZvaWQgcG9zdENvbnNvbGVNZXNzYWdlVG9Xb3JrZXJPYmplY3QoaW50IHNv
dXJjZUlkZW50aWZpZXIsIGludCBtZXNzYWdlVHlwZSwgaW50IG1lc3NhZ2VMZXZlbCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViU3Ry
aW5nJiBtZXNzYWdlLCBpbnQgbGluZU51bWJlciwgY29uc3QgV2ViU3RyaW5nJiBzb3VyY2VVUkwp
CisgICAgeworICAgICAgICBwb3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdCgwLCBzb3Vy
Y2VJZGVudGlmaWVyLCBtZXNzYWdlVHlwZSwgbWVzc2FnZUxldmVsLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VVUkwp
OworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCB3b3JrZXJDb250ZXh0Q2xvc2VkKCkgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCB3b3JrZXJDb250ZXh0RGVzdHJveWVkKCkgPSAwOworCisgICAgLy8g
UmV0dXJucyB0aGUgbm90aWZpY2F0aW9uIHByZXNlbnRlciBmb3IgdGhpcyB3b3JrZXIgY29udGV4
dC4gUG9pbnRlcgorICAgIC8vIGlzIG93bmVkIGJ5IHRoZSBvYmplY3QgaW1wbGVtZW50aW5nIFdl
YkNvbW1vbldvcmtlckNsaWVudC4KKyAgICB2aXJ0dWFsIFdlYk5vdGlmaWNhdGlvblByZXNlbnRl
ciogbm90aWZpY2F0aW9uUHJlc2VudGVyKCkgPSAwOworCisgICAgLy8gVGhpcyBjYW4gYmUgY2Fs
bGVkIG9uIGFueSB0aHJlYWQgdG8gY3JlYXRlIGEgbmVzdGVkIFdlYldvcmtlci4KKyAgICAvLyBX
ZWJTaGFyZWRXb3JrZXJzIGFyZSBub3QgaW5zdGFudGlhdGVkIHZpYSB0aGlzIEFQSSAtIGluc3Rl
YWQKKyAgICAvLyB0aGV5IGFyZSBjcmVhdGVkIHZpYSB0aGUgV2ViU2hhcmVkV29ya2VyUmVwb3Np
dG9yeS4KKyAgICB2aXJ0dWFsIFdlYldvcmtlciogY3JlYXRlV29ya2VyKFdlYlNoYXJlZFdvcmtl
ckNsaWVudCopID0gMDsKKworICAgIC8vIENhbGxlZCBvbiB0aGUgbWFpbiB3ZWJraXQgdGhyZWFk
IGluIHRoZSB3b3JrZXIgcHJvY2VzcyBkdXJpbmcgaW5pdGlhbGl6YXRpb24uCisgICAgdmlydHVh
bCBXZWJBcHBsaWNhdGlvbkNhY2hlSG9zdCogY3JlYXRlQXBwbGljYXRpb25DYWNoZUhvc3QoV2Vi
QXBwbGljYXRpb25DYWNoZUhvc3RDbGllbnQqKSA9IDA7CisKKyAgICAvLyBDYWxsZWQgb24gdGhl
IG1haW4gd2Via2l0IHRocmVhZCBiZWZvcmUgb3BlbmluZyBhIHdlYiBkYXRhYmFzZS4KKyAgICB2
aXJ0dWFsIGJvb2wgYWxsb3dEYXRhYmFzZShXZWJGcmFtZSosIGNvbnN0IFdlYlN0cmluZyYgbmFt
ZSwgY29uc3QgV2ViU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRT
aXplKSA9IDA7CisKKyAgICAvLyBDYWxsZWQgb24gdGhlIG1haW4gd2Via2l0IHRocmVhZCBiZWZv
cmUgb3BlbmluZyBhIGZpbGUgc3lzdGVtLgorICAgIHZpcnR1YWwgYm9vbCBhbGxvd0ZpbGVTeXN0
ZW0oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgLy8gQ2FsbGVk
IG9uIHRoZSBtYWluIHdlYmtpdCB0aHJlYWQgYmVmb3JlIG9wZW5pbmcgYSBmaWxlIHN5c3RlbS4K
KyAgICB2aXJ0dWFsIHZvaWQgb3BlbkZpbGVTeXN0ZW0oV2ViRmlsZVN5c3RlbTo6VHlwZSwgbG9u
ZyBsb25nIHNpemUsIGJvb2wgY3JlYXRlLCBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzKikKKyAgICB7
CisgICAgICAgIFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICB2aXJ0
dWFsIHZvaWQgZGlzcGF0Y2hEZXZUb29sc01lc3NhZ2UoY29uc3QgV2ViU3RyaW5nJikgeyB9Cisg
ICAgdmlydHVhbCB2b2lkIHNhdmVEZXZUb29sc0FnZW50U3RhdGUoY29uc3QgV2ViU3RyaW5nJikg
eyB9CisKK3Byb3RlY3RlZDoKKyAgICB+V2ViU2hhcmVkV29ya2VyQ2xpZW50KCkgeyB9Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9XZWJXb3JrZXJDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vcHVibGljL1dlYldvcmtlckNsaWVudC5oCmluZGV4IGViMmU2M2UuLjU5Njk5OWQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldvcmtlckNsaWVudC5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldvcmtlckNsaWVudC5oCkBA
IC0zMSwzMSArMzEsOCBAQAogI2lmbmRlZiBXZWJXb3JrZXJDbGllbnRfaAogI2RlZmluZSBXZWJX
b3JrZXJDbGllbnRfaAogCi0jaW5jbHVkZSAiV2ViQ29tbW9uV29ya2VyQ2xpZW50LmgiCi0jaW5j
bHVkZSAiV2ViTWVzc2FnZVBvcnRDaGFubmVsLmgiCisjaW5jbHVkZSAiV2ViU2hhcmVkV29ya2Vy
Q2xpZW50LmgiCiAKLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJOb3RpZmljYXRpb25Q
cmVzZW50ZXI7Ci1jbGFzcyBXZWJTdHJpbmc7Ci1jbGFzcyBXZWJXb3JrZXI7Ci0KLS8vIFByb3Zp
ZGVzIGFuIGludGVyZmFjZSBiYWNrIHRvIHRoZSBpbi1wYWdlIHNjcmlwdCBvYmplY3QgZm9yIGEg
d29ya2VyLgotLy8gQWxsIGZ1bmN0aW9ucyBhcmUgZXhwZWN0ZWQgdG8gYmUgY2FsbGVkIGJhY2sg
b24gdGhlIHRocmVhZCB0aGF0IGNyZWF0ZWQKLS8vIHRoZSBXb3JrZXIgb2JqZWN0LCB1bmxlc3Mg
bm90ZWQuCi1jbGFzcyBXZWJXb3JrZXJDbGllbnQgOiBwdWJsaWMgV2ViQ29tbW9uV29ya2VyQ2xp
ZW50IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgcG9zdE1lc3NhZ2VUb1dvcmtlck9iamVj
dCgKLSAgICAgICAgY29uc3QgV2ViU3RyaW5nJiwKLSAgICAgICAgY29uc3QgV2ViTWVzc2FnZVBv
cnRDaGFubmVsQXJyYXkmKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY29uZmlybU1lc3NhZ2VG
cm9tV29ya2VyT2JqZWN0KGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIHJlcG9ydFBlbmRpbmdBY3Rpdml0eShib29sIGhhc1BlbmRpbmdBY3Rpdml0eSkgPSAw
OwotCi1wcm90ZWN0ZWQ6Ci0gICAgfldlYldvcmtlckNsaWVudCgpIHsgfQotfTsKLQotfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisjZGVmaW5lIFdlYldvcmtlckNsaWVudCBXZWJTaGFyZWRXb3JrZXJD
bGllbnQKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9E
YXRhYmFzZU9ic2VydmVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0RhdGFiYXNl
T2JzZXJ2ZXIuY3BwCmluZGV4IDE4N2I1NWUuLjQwYjUwNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL0RhdGFiYXNlT2JzZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL0RhdGFiYXNlT2JzZXJ2ZXIuY3BwCkBAIC02NCw3ICs2NCw3IEBAIHN0
YXRpYyBjb25zdCBjaGFyIGFsbG93RGF0YWJhc2VNb2RlW10gPSAiYWxsb3dEYXRhYmFzZU1vZGUi
OwogLy8gY2FsbCBiYWNrIHRvIHRoZSB3b3JrZXIgY29udGV4dC4KIGNsYXNzIEFsbG93RGF0YWJh
c2VNYWluVGhyZWFkQnJpZGdlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEFsbG93RGF0
YWJhc2VNYWluVGhyZWFkQnJpZGdlPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8
QWxsb3dEYXRhYmFzZU1haW5UaHJlYWRCcmlkZ2U+IGNyZWF0ZShXZWJDb3JlOjpXb3JrZXJMb2Fk
ZXJQcm94eSogd29ya2VyTG9hZGVyUHJveHksIGNvbnN0IFN0cmluZyYgbW9kZSwgTmV3V2ViQ29t
bW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQsIFdlYkZyYW1lKiBmcmFtZSwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGlt
YXRlZFNpemUpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8QWxsb3dEYXRhYmFzZU1haW5UaHJlYWRC
cmlkZ2U+IGNyZWF0ZShXZWJDb3JlOjpXb3JrZXJMb2FkZXJQcm94eSogd29ya2VyTG9hZGVyUHJv
eHksIGNvbnN0IFN0cmluZyYgbW9kZSwgV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGll
bnQsIFdlYkZyYW1lKiBmcmFtZSwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRp
c3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpCiAgICAgewogICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IEFsbG93RGF0YWJhc2VNYWluVGhyZWFkQnJpZGdlKHdvcmtlckxv
YWRlclByb3h5LCBtb2RlLCBjb21tb25DbGllbnQsIGZyYW1lLCBuYW1lLCBkaXNwbGF5TmFtZSwg
ZXN0aW1hdGVkU2l6ZSkpOwogICAgIH0KQEAgLTkxLDcgKzkxLDcgQEAgcHVibGljOgogICAgIH0K
IAogcHJpdmF0ZToKLSAgICBBbGxvd0RhdGFiYXNlTWFpblRocmVhZEJyaWRnZShXZWJDb3JlOjpX
b3JrZXJMb2FkZXJQcm94eSogd29ya2VyTG9hZGVyUHJveHksIGNvbnN0IFN0cmluZyYgbW9kZSwg
TmV3V2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQsIFdlYkZyYW1lKiBmcmFtZSwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBs
b25nIGVzdGltYXRlZFNpemUpCisgICAgQWxsb3dEYXRhYmFzZU1haW5UaHJlYWRCcmlkZ2UoV2Vi
Q29yZTo6V29ya2VyTG9hZGVyUHJveHkqIHdvcmtlckxvYWRlclByb3h5LCBjb25zdCBTdHJpbmcm
IG1vZGUsIFdlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50LCBXZWJGcmFtZSogZnJh
bWUsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWdu
ZWQgbG9uZyBlc3RpbWF0ZWRTaXplKQogICAgICAgICA6IG1fd29ya2VyTG9hZGVyUHJveHkod29y
a2VyTG9hZGVyUHJveHkpCiAgICAgewogICAgICAgICBXZWJXb3JrZXJCYXNlOjpkaXNwYXRjaFRh
c2tUb01haW5UaHJlYWQoCkBAIC0xMDEsNyArMTAxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0aGlzKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYWxs
b3dEYXRhYmFzZVRhc2soV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
Y29uc3QgU3RyaW5nIG1vZGUsIE5ld1dlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50
LCBXZWJGcmFtZSogZnJhbWUsIGNvbnN0IFN0cmluZyBuYW1lLCBjb25zdCBTdHJpbmcgZGlzcGxh
eU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1JlZlB0cjxBbGxvd0RhdGFi
YXNlTWFpblRocmVhZEJyaWRnZT4gYnJpZGdlKQorICAgIHN0YXRpYyB2b2lkIGFsbG93RGF0YWJh
c2VUYXNrKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0
cmluZyBtb2RlLCBXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1vbkNsaWVudCwgV2ViRnJhbWUq
IGZyYW1lLCBjb25zdCBTdHJpbmcgbmFtZSwgY29uc3QgU3RyaW5nIGRpc3BsYXlOYW1lLCB1bnNp
Z25lZCBsb25nIGVzdGltYXRlZFNpemUsIFBhc3NSZWZQdHI8QWxsb3dEYXRhYmFzZU1haW5UaHJl
YWRCcmlkZ2U+IGJyaWRnZSkKICAgICB7CiAgICAgICAgIGJvb2wgYWxsb3dEYXRhYmFzZSA9IGNv
bW1vbkNsaWVudCA/IGNvbW1vbkNsaWVudC0+YWxsb3dEYXRhYmFzZShmcmFtZSwgbmFtZSwgZGlz
cGxheU5hbWUsIGVzdGltYXRlZFNpemUpIDogZmFsc2U7CiAgICAgICAgIGJyaWRnZS0+c2lnbmFs
Q29tcGxldGVkKG1vZGUsIGFsbG93RGF0YWJhc2UpOwpAQCAtMTE3LDcgKzExNyw3IEBAIHByaXZh
dGU6CiAgICAgV2ViQ29yZTo6V29ya2VyTG9hZGVyUHJveHkqIG1fd29ya2VyTG9hZGVyUHJveHk7
CiB9OwogCi1ib29sIGFsbG93RGF0YWJhc2VGb3JXb3JrZXIoTmV3V2ViQ29tbW9uV29ya2VyQ2xp
ZW50KiBjb21tb25DbGllbnQsIFdlYkZyYW1lKiBmcmFtZSwgY29uc3QgV2ViU3RyaW5nJiBuYW1l
LCBjb25zdCBXZWJTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNp
emUpCitib29sIGFsbG93RGF0YWJhc2VGb3JXb3JrZXIoV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBj
b21tb25DbGllbnQsIFdlYkZyYW1lKiBmcmFtZSwgY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBjb25z
dCBXZWJTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpCiB7
CiAgICAgV2ViQ29yZTo6V29ya2VyU2NyaXB0Q29udHJvbGxlciogY29udHJvbGxlciA9IFdlYkNv
cmU6OldvcmtlclNjcmlwdENvbnRyb2xsZXI6OmNvbnRyb2xsZXJGb3JDb250ZXh0KCk7CiAgICAg
V2ViQ29yZTo6V29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4dCA9IGNvbnRyb2xsZXItPndvcmtl
ckNvbnRleHQoKTsKQEAgLTE2NCw4ICsxNjQsOCBAQCBib29sIERhdGFiYXNlT2JzZXJ2ZXI6OmNh
bkVzdGFibGlzaERhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dAog
I2lmIEVOQUJMRShXT1JLRVJTKQogICAgICAgICBXb3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0
ID0gc3RhdGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwog
ICAgICAgICBXb3JrZXJMb2FkZXJQcm94eSogd29ya2VyTG9hZGVyUHJveHkgPSAmd29ya2VyQ29u
dGV4dC0+dGhyZWFkKCktPndvcmtlckxvYWRlclByb3h5KCk7Ci0gICAgICAgIE5ld1dlYldvcmtl
ckJhc2UqIHdlYldvcmtlciA9IHN0YXRpY19jYXN0PE5ld1dlYldvcmtlckJhc2UqPih3b3JrZXJM
b2FkZXJQcm94eSk7Ci0gICAgICAgIHJldHVybiBhbGxvd0RhdGFiYXNlRm9yV29ya2VyKHdlYldv
cmtlci0+bmV3Q29tbW9uQ2xpZW50KCksIHdlYldvcmtlci0+dmlldygpLT5tYWluRnJhbWUoKSwg
bmFtZSwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUpOworICAgICAgICBXZWJXb3JrZXJCYXNl
KiB3ZWJXb3JrZXIgPSBzdGF0aWNfY2FzdDxXZWJXb3JrZXJCYXNlKj4od29ya2VyTG9hZGVyUHJv
eHkpOworICAgICAgICByZXR1cm4gYWxsb3dEYXRhYmFzZUZvcldvcmtlcih3ZWJXb3JrZXItPmNv
bW1vbkNsaWVudCgpLCB3ZWJXb3JrZXItPnZpZXcoKS0+bWFpbkZyYW1lKCksIG5hbWUsIGRpc3Bs
YXlOYW1lLCBlc3RpbWF0ZWRTaXplKTsKICNlbHNlCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJG
YWN0b3J5QmFja2VuZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZh
Y3RvcnlCYWNrZW5kUHJveHkuY3BwCmluZGV4IDdhZTZlNjEuLmMyMjMwOWIgMTAwNzU1Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuY3Bw
CkBAIC05OSw3ICs5OSw3IEBAIHZvaWQgSURCRmFjdG9yeUJhY2tlbmRQcm94eTo6b3BlbkZyb21X
b3JrZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJDYWxsYmFja3MqIGNhCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgV29ya2VyTG9hZGVyUHJveHkqIHdvcmtlckxvYWRlclByb3h5ID0gJmNv
bnRleHQtPnRocmVhZCgpLT53b3JrZXJMb2FkZXJQcm94eSgpOwotICAgIE5ld1dlYldvcmtlckJh
c2UqIHdlYldvcmtlciA9IHN0YXRpY19jYXN0PE5ld1dlYldvcmtlckJhc2UqPih3b3JrZXJMb2Fk
ZXJQcm94eSk7CisgICAgV2ViV29ya2VyQmFzZSogd2ViV29ya2VyID0gc3RhdGljX2Nhc3Q8V2Vi
V29ya2VyQmFzZSo+KHdvcmtlckxvYWRlclByb3h5KTsKICAgICBXZWJGcmFtZSogd2ViRnJhbWUg
PSB3ZWJXb3JrZXItPnZpZXcoKS0+bWFpbkZyYW1lKCk7CiAgICAgbV93ZWJJREJGYWN0b3J5LT5v
cGVuKG5hbWUsIG5ldyBXZWJJREJDYWxsYmFja3NJbXBsKGNhbGxiYWNrcyksIG9yaWdpbiwgd2Vi
RnJhbWUsIGRhdGFEaXIpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9Mb2NhbEZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9Mb2NhbEZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAKaW5kZXggNzU3ZWY4Mi4uOWUwZTcz
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvTG9jYWxGaWxlU3lzdGVt
Q2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0xvY2FsRmlsZVN5
c3RlbUNocm9taXVtLmNwcApAQCAtNzksNyArNzksNyBAQCBzdGF0aWMgY29uc3QgY2hhciBvcGVu
RmlsZVN5c3RlbU1vZGVbXSA9ICJvcGVuRmlsZVN5c3RlbU1vZGUiOwogLy8gY2FsbCBiYWNrIHRv
IHRoZSB3b3JrZXIgY29udGV4dC4KIGNsYXNzIEFsbG93RmlsZVN5c3RlbU1haW5UaHJlYWRCcmlk
Z2UgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8QWxsb3dGaWxlU3lzdGVtTWFpblRocmVh
ZEJyaWRnZT4gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEFsbG93RmlsZVN5c3Rl
bU1haW5UaHJlYWRCcmlkZ2U+IGNyZWF0ZShXZWJDb3JlOjpXb3JrZXJMb2FkZXJQcm94eSogd29y
a2VyTG9hZGVyUHJveHksIGNvbnN0IFdURjo6U3RyaW5nJiBtb2RlLCBOZXdXZWJDb21tb25Xb3Jr
ZXJDbGllbnQqIGNvbW1vbkNsaWVudCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxBbGxvd0ZpbGVT
eXN0ZW1NYWluVGhyZWFkQnJpZGdlPiBjcmVhdGUoV2ViQ29yZTo6V29ya2VyTG9hZGVyUHJveHkq
IHdvcmtlckxvYWRlclByb3h5LCBjb25zdCBXVEY6OlN0cmluZyYgbW9kZSwgV2ViQ29tbW9uV29y
a2VyQ2xpZW50KiBjb21tb25DbGllbnQpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEFsbG93RmlsZVN5c3RlbU1haW5UaHJlYWRCcmlkZ2Uod29ya2VyTG9hZGVyUHJveHksIG1v
ZGUsIGNvbW1vbkNsaWVudCkpOwogICAgIH0KQEAgLTEwNiw3ICsxMDYsNyBAQCBwdWJsaWM6CiAg
ICAgfQogCiBwcml2YXRlOgotICAgIEFsbG93RmlsZVN5c3RlbU1haW5UaHJlYWRCcmlkZ2UoV2Vi
Q29yZTo6V29ya2VyTG9hZGVyUHJveHkqIHdvcmtlckxvYWRlclByb3h5LCBjb25zdCBXVEY6OlN0
cmluZyYgbW9kZSwgTmV3V2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQpCisgICAg
QWxsb3dGaWxlU3lzdGVtTWFpblRocmVhZEJyaWRnZShXZWJDb3JlOjpXb3JrZXJMb2FkZXJQcm94
eSogd29ya2VyTG9hZGVyUHJveHksIGNvbnN0IFdURjo6U3RyaW5nJiBtb2RlLCBXZWJDb21tb25X
b3JrZXJDbGllbnQqIGNvbW1vbkNsaWVudCkKICAgICAgICAgOiBtX3dvcmtlckxvYWRlclByb3h5
KHdvcmtlckxvYWRlclByb3h5KQogICAgICAgICAsIG1fbW9kZShtb2RlKQogICAgIHsKQEAgLTEx
NSw3ICsxMTUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFs
bG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcykpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBh
bGxvd0ZpbGVTeXN0ZW1UYXNrKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQsIE5ld1dlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50LCBQYXNzUmVmUHRyPEFs
bG93RmlsZVN5c3RlbU1haW5UaHJlYWRCcmlkZ2U+IGJyaWRnZSkKKyAgICBzdGF0aWMgdm9pZCBh
bGxvd0ZpbGVTeXN0ZW1UYXNrKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQsIFdlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50LCBQYXNzUmVmUHRyPEFsbG93
RmlsZVN5c3RlbU1haW5UaHJlYWRCcmlkZ2U+IGJyaWRnZSkKICAgICB7CiAgICAgICAgIGlmIChj
b21tb25DbGllbnQpCiAgICAgICAgICAgICBicmlkZ2UtPnNpZ25hbENvbXBsZXRlZChjb21tb25D
bGllbnQtPmFsbG93RmlsZVN5c3RlbSgpKTsKQEAgLTEzNCw3ICsxMzQsNyBAQCBwcml2YXRlOgog
ICAgIFdURjo6U3RyaW5nIG1fbW9kZTsKIH07CiAKLWJvb2wgYWxsb3dGaWxlU3lzdGVtRm9yV29y
a2VyKE5ld1dlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50KQorYm9vbCBhbGxvd0Zp
bGVTeXN0ZW1Gb3JXb3JrZXIoV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQpCiB7
CiAgICAgV29ya2VyU2NyaXB0Q29udHJvbGxlciogY29udHJvbGxlciA9IFdvcmtlclNjcmlwdENv
bnRyb2xsZXI6OmNvbnRyb2xsZXJGb3JDb250ZXh0KCk7CiAgICAgV29ya2VyQ29udGV4dCogd29y
a2VyQ29udGV4dCA9IGNvbnRyb2xsZXItPndvcmtlckNvbnRleHQoKTsKQEAgLTE1Nyw3ICsxNTcs
NyBAQCBib29sIGFsbG93RmlsZVN5c3RlbUZvcldvcmtlcihOZXdXZWJDb21tb25Xb3JrZXJDbGll
bnQqIGNvbW1vbkNsaWVudCkKICAgICByZXR1cm4gYnJpZGdlLT5yZXN1bHQoKTsKIH0KIAotdm9p
ZCBvcGVuRmlsZVN5c3RlbUZvcldvcmtlcihOZXdXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1v
bkNsaWVudCwgV2ViRmlsZVN5c3RlbTo6VHlwZSB0eXBlLCBsb25nIGxvbmcgc2l6ZSwgYm9vbCBj
cmVhdGUsIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3MqIGNhbGxiYWNrcywgYm9vbCBzeW5jaHJvbm91
cykKK3ZvaWQgb3BlbkZpbGVTeXN0ZW1Gb3JXb3JrZXIoV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBj
b21tb25DbGllbnQsIFdlYkZpbGVTeXN0ZW06OlR5cGUgdHlwZSwgbG9uZyBsb25nIHNpemUsIGJv
b2wgY3JlYXRlLCBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzKiBjYWxsYmFja3MsIGJvb2wgc3luY2hy
b25vdXMpCiB7CiAgICAgV29ya2VyU2NyaXB0Q29udHJvbGxlciogY29udHJvbGxlciA9IFdvcmtl
clNjcmlwdENvbnRyb2xsZXI6OmNvbnRyb2xsZXJGb3JDb250ZXh0KCk7CiAgICAgV29ya2VyQ29u
dGV4dCogd29ya2VyQ29udGV4dCA9IGNvbnRyb2xsZXItPndvcmtlckNvbnRleHQoKTsKQEAgLTIw
MywxMSArMjAzLDExIEBAIHN0YXRpYyB2b2lkIG9wZW5GaWxlU3lzdGVtSGVscGVyKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEFzeW5jRmlsZVN5c3RlCiAjaWYgRU5BQkxFKFdPUktF
UlMpCiAgICAgICAgIFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQgPSBzdGF0aWNfY2FzdDxX
b3JrZXJDb250ZXh0Kj4oY29udGV4dCk7CiAgICAgICAgIFdvcmtlckxvYWRlclByb3h5KiB3b3Jr
ZXJMb2FkZXJQcm94eSA9ICZ3b3JrZXJDb250ZXh0LT50aHJlYWQoKS0+d29ya2VyTG9hZGVyUHJv
eHkoKTsKLSAgICAgICAgTmV3V2ViV29ya2VyQmFzZSogd2ViV29ya2VyID0gc3RhdGljX2Nhc3Q8
TmV3V2ViV29ya2VyQmFzZSo+KHdvcmtlckxvYWRlclByb3h5KTsKLSAgICAgICAgaWYgKCFhbGxv
d0ZpbGVTeXN0ZW1Gb3JXb3JrZXIod2ViV29ya2VyLT5uZXdDb21tb25DbGllbnQoKSkpCisgICAg
ICAgIFdlYldvcmtlckJhc2UqIHdlYldvcmtlciA9IHN0YXRpY19jYXN0PFdlYldvcmtlckJhc2Uq
Pih3b3JrZXJMb2FkZXJQcm94eSk7CisgICAgICAgIGlmICghYWxsb3dGaWxlU3lzdGVtRm9yV29y
a2VyKHdlYldvcmtlci0+Y29tbW9uQ2xpZW50KCkpKQogICAgICAgICAgICAgYWxsb3dlZCA9IGZh
bHNlOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBvcGVuRmlsZVN5c3RlbUZvcldvcmtlcih3
ZWJXb3JrZXItPm5ld0NvbW1vbkNsaWVudCgpLCBzdGF0aWNfY2FzdDxXZWJGaWxlU3lzdGVtOjpU
eXBlPih0eXBlKSwgc2l6ZSwgY3JlYXRlID09IENyZWF0ZUlmTm90UHJlc2VudCwgbmV3IFdlYkZp
bGVTeXN0ZW1DYWxsYmFja3NJbXBsKGNhbGxiYWNrcywgdHlwZSwgY29udGV4dCwgc3luY2hyb25v
dXMpLCBzeW5jaHJvbm91cyk7CisgICAgICAgICAgICBvcGVuRmlsZVN5c3RlbUZvcldvcmtlcih3
ZWJXb3JrZXItPmNvbW1vbkNsaWVudCgpLCBzdGF0aWNfY2FzdDxXZWJGaWxlU3lzdGVtOjpUeXBl
Pih0eXBlKSwgc2l6ZSwgY3JlYXRlID09IENyZWF0ZUlmTm90UHJlc2VudCwgbmV3IFdlYkZpbGVT
eXN0ZW1DYWxsYmFja3NJbXBsKGNhbGxiYWNrcywgdHlwZSwgY29udGV4dCwgc3luY2hyb25vdXMp
LCBzeW5jaHJvbm91cyk7CiAKICNlbHNlCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2hhcmVkV29ya2VySW1w
bC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTaGFyZWRXb3JrZXJJbXBsLmNw
cAppbmRleCAxNDQ1ZjhlLi5kMGRhNDk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJTaGFyZWRXb3JrZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJTaGFyZWRXb3JrZXJJbXBsLmNwcApAQCAtMzIsMTMgKzMyLDMyIEBACiAjaW5j
bHVkZSAiV2ViU2hhcmVkV29ya2VySW1wbC5oIgogCiAjaW5jbHVkZSAiQ3Jvc3NUaHJlYWRUYXNr
LmgiCisjaW5jbHVkZSAiRGF0YWJhc2VUYXNrLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNp
bmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiTWVzc2FnZUV2ZW50LmgiCiAjaW5jbHVkZSAiTWVz
c2FnZVBvcnRDaGFubmVsLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwu
aCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQuaCIKICNpbmNsdWRlICJTaGFyZWRXb3JrZXJDb250ZXh0LmgiCiAjaW5jbHVkZSAi
U2hhcmVkV29ya2VyVGhyZWFkLmgiCisKKyNpbmNsdWRlICJXZWJEYXRhU291cmNlSW1wbC5oIgor
I2luY2x1ZGUgIldlYkZpbGVFcnJvci5oIgorI2luY2x1ZGUgIldlYkZyYW1lQ2xpZW50LmgiCisj
aW5jbHVkZSAiV2ViRnJhbWVJbXBsLmgiCisjaW5jbHVkZSAiV2ViTWVzc2FnZVBvcnRDaGFubmVs
LmgiCisjaW5jbHVkZSAiV2ViUnVudGltZUZlYXR1cmVzLmgiCisjaW5jbHVkZSAiV2ViU2V0dGlu
Z3MuaCIKKyNpbmNsdWRlICJXZWJTaGFyZWRXb3JrZXJDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJW
aWV3LmgiCisKKyNpbmNsdWRlICJXb3JrZXJDb250ZXh0LmgiCisjaW5jbHVkZSAiV29ya2VyTG9h
ZGVyUHJveHkuaCIKKyNpbmNsdWRlICJXb3JrZXJUaHJlYWQuaCIKKyNpbmNsdWRlIDx3dGYvTWFp
blRocmVhZC5oPgorCiAjaW5jbHVkZSAiV29ya2VyRGVidWdnZXJBZ2VudC5oIgogI2luY2x1ZGUg
Ildvcmtlckluc3BlY3RvckNvbnRyb2xsZXIuaCIKIApAQCAtNTEsMTcgKzcwLDI2OSBAQCB1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKIG5hbWVzcGFjZSBXZWJLaXQgewogCiAjaWYgRU5BQkxFKFNI
QVJFRF9XT1JLRVJTKQorLy8gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgb24gdGhlIG1haW4gdGhy
ZWFkIHRvIGZvcmNlIHRvIGluaXRpYWxpemUgc29tZSBzdGF0aWMKKy8vIHZhbHVlcyB1c2VkIGlu
IFdlYktpdCBiZWZvcmUgYW55IHdvcmtlciB0aHJlYWQgaXMgc3RhcnRlZC4gVGhpcyBpcyBiZWNh
dXNlIGluCisvLyBvdXIgd29ya2VyIHByb2Nlc3NzLCB3ZSBkbyBub3QgcnVuIGFueSBXZWJLaXQg
Y29kZSBpbiBtYWluIHRocmVhZCBhbmQgdGh1cworLy8gd2hlbiBtdWx0aXBsZSB3b3JrZXJzIHRy
eSB0byBzdGFydCBhdCB0aGUgc2FtZSB0aW1lLCB3ZSBtaWdodCBoaXQgY3Jhc2ggZHVlCisvLyB0
byBjb250ZW50aW9uIGZvciBpbml0aWFsaXppbmcgc3RhdGljIHZhbHVlcy4KK3N0YXRpYyB2b2lk
IGluaXRpYWxpemVXZWJLaXRTdGF0aWNWYWx1ZXMoKQoreworICAgIHN0YXRpYyBib29sIGluaXRp
YWxpemVkID0gZmFsc2U7CisgICAgaWYgKCFpbml0aWFsaXplZCkgeworICAgICAgICBpbml0aWFs
aXplZCA9IHRydWU7CisgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBoYXZlIHRvIHBhc3MgYSBVUkwg
d2l0aCB2YWxpZCBwcm90b2NvbCBpbiBvcmRlciB0byBmb2xsb3cKKyAgICAgICAgLy8gdGhlIHBh
dGggdG8gZG8gc3RhdGljIHZhbHVlIGluaXRpYWxpemF0aW9ucy4KKyAgICAgICAgUmVmUHRyPFNl
Y3VyaXR5T3JpZ2luPiBvcmlnaW4gPQorICAgICAgICAgICAgU2VjdXJpdHlPcmlnaW46OmNyZWF0
ZShLVVJMKFBhcnNlZFVSTFN0cmluZywgImh0dHA6Ly9sb2NhbGhvc3QiKSk7CisgICAgICAgIG9y
aWdpbi5yZWxlYXNlKCk7CisgICAgfQorfQogCi1XZWJTaGFyZWRXb3JrZXJJbXBsOjpXZWJTaGFy
ZWRXb3JrZXJJbXBsKFdlYkNvbW1vbldvcmtlckNsaWVudCogY2xpZW50KQotICAgIDogbV9jbGll
bnQoY2xpZW50KQorV2ViU2hhcmVkV29ya2VySW1wbDo6V2ViU2hhcmVkV29ya2VySW1wbChXZWJT
aGFyZWRXb3JrZXJDbGllbnQqIGNsaWVudCkKKyAgICA6IG1fd2ViVmlldygwKQorICAgICwgbV9h
c2tlZFRvVGVybWluYXRlKGZhbHNlKQorICAgICwgbV9jbGllbnQoY2xpZW50KQogICAgICwgbV9w
YXVzZVdvcmtlckNvbnRleHRPblN0YXJ0KGZhbHNlKQogeworICAgIGluaXRpYWxpemVXZWJLaXRT
dGF0aWNWYWx1ZXMoKTsKIH0KIAogV2ViU2hhcmVkV29ya2VySW1wbDo6fldlYlNoYXJlZFdvcmtl
ckltcGwoKQogeworICAgIEFTU0VSVChtX3dlYlZpZXcpOworICAgIFdlYkZyYW1lSW1wbCogd2Vi
RnJhbWUgPSBzdGF0aWNfY2FzdDxXZWJGcmFtZUltcGwqPihtX3dlYlZpZXctPm1haW5GcmFtZSgp
KTsKKyAgICBpZiAod2ViRnJhbWUpCisgICAgICAgIHdlYkZyYW1lLT5zZXRDbGllbnQoMCk7Cisg
ICAgbV93ZWJWaWV3LT5jbG9zZSgpOworfQorCit2b2lkIFdlYlNoYXJlZFdvcmtlckltcGw6OnN0
b3BXb3JrZXJUaHJlYWQoKQoreworICAgIGlmIChtX2Fza2VkVG9UZXJtaW5hdGUpCisgICAgICAg
IHJldHVybjsKKyAgICBtX2Fza2VkVG9UZXJtaW5hdGUgPSB0cnVlOworICAgIGlmIChtX3dvcmtl
clRocmVhZCkKKyAgICAgICAgbV93b3JrZXJUaHJlYWQtPnN0b3AoKTsKK30KKwordm9pZCBXZWJT
aGFyZWRXb3JrZXJJbXBsOjppbml0aWFsaXplTG9hZGVyKGNvbnN0IFdlYlVSTCYgdXJsKQorewor
ICAgIC8vIENyZWF0ZSAnc2hhZG93IHBhZ2UnLiBUaGlzIHBhZ2UgaXMgbmV2ZXIgZGlzcGxheWVk
LCBpdCBpcyB1c2VkIHRvIHByb3h5IHRoZQorICAgIC8vIGxvYWRpbmcgcmVxdWVzdHMgZnJvbSB0
aGUgd29ya2VyIGNvbnRleHQgdG8gdGhlIHJlc3Qgb2YgV2ViS2l0IGFuZCBDaHJvbWl1bQorICAg
IC8vIGluZnJhc3RydWN0dXJlLgorICAgIEFTU0VSVCghbV93ZWJWaWV3KTsKKyAgICBtX3dlYlZp
ZXcgPSBXZWJWaWV3OjpjcmVhdGUoMCk7CisgICAgbV93ZWJWaWV3LT5zZXR0aW5ncygpLT5zZXRP
ZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZUVuYWJsZWQoV2ViUnVudGltZUZlYXR1cmVzOjppc0Fw
cGxpY2F0aW9uQ2FjaGVFbmFibGVkKCkpOworICAgIC8vIEZJWE1FOiBTZXR0aW5ncyBpbmZvcm1h
dGlvbiBzaG91bGQgYmUgcGFzc2VkIHRvIHRoZSBXb3JrZXIgcHJvY2VzcyBmcm9tIEJyb3dzZXIg
cHJvY2VzcyB3aGVuIHRoZSB3b3JrZXIKKyAgICAvLyBpcyBjcmVhdGVkIChzaW1pbGFyIHRvIFJl
bmRlclRocmVhZDo6T25DcmVhdGVOZXdWaWV3KS4KKyAgICBtX3dlYlZpZXctPnNldHRpbmdzKCkt
PnNldEhpeGllNzZXZWJTb2NrZXRQcm90b2NvbEVuYWJsZWQoZmFsc2UpOworICAgIG1fd2ViVmll
dy0+aW5pdGlhbGl6ZU1haW5GcmFtZSh0aGlzKTsKKworICAgIFdlYkZyYW1lSW1wbCogd2ViRnJh
bWUgPSBzdGF0aWNfY2FzdDxXZWJGcmFtZUltcGwqPihtX3dlYlZpZXctPm1haW5GcmFtZSgpKTsK
KworICAgIC8vIENvbnN0cnVjdCBzdWJzdGl0dXRlIGRhdGEgc291cmNlIGZvciB0aGUgJ3NoYWRv
dyBwYWdlJy4gV2Ugb25seSBuZWVkIGl0CisgICAgLy8gdG8gaGF2ZSBzYW1lIG9yaWdpbiBhcyB0
aGUgd29ya2VyIHNvIHRoZSBsb2FkaW5nIGNoZWNrcyB3b3JrIGNvcnJlY3RseS4KKyAgICBDU3Ry
aW5nIGNvbnRlbnQoIiIpOworICAgIGludCBsZW4gPSBzdGF0aWNfY2FzdDxpbnQ+KGNvbnRlbnQu
bGVuZ3RoKCkpOworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZihTaGFyZWRCdWZmZXI6OmNy
ZWF0ZShjb250ZW50LmRhdGEoKSwgbGVuKSk7CisgICAgU3Vic3RpdHV0ZURhdGEgc3Vic3REYXRh
KGJ1ZiwgU3RyaW5nKCJ0ZXh0L2h0bWwiKSwgU3RyaW5nKCJVVEYtOCIpLCBLVVJMKCkpOworICAg
IHdlYkZyYW1lLT5mcmFtZSgpLT5sb2FkZXIoKS0+bG9hZChSZXNvdXJjZVJlcXVlc3QodXJsKSwg
c3Vic3REYXRhLCBmYWxzZSk7CisKKyAgICAvLyBUaGlzIGRvY3VtZW50IHdpbGwgYmUgdXNlZCBh
cyAnbG9hZGluZyBjb250ZXh0JyBmb3IgdGhlIHdvcmtlci4KKyAgICBtX2xvYWRpbmdEb2N1bWVu
dCA9IHdlYkZyYW1lLT5mcmFtZSgpLT5kb2N1bWVudCgpOworfQorCit2b2lkIFdlYlNoYXJlZFdv
cmtlckltcGw6OmRpZENyZWF0ZURhdGFTb3VyY2UoV2ViRnJhbWUqLCBXZWJEYXRhU291cmNlKiBk
cykKK3sKKyAgICAvLyBUZWxsIHRoZSBsb2FkZXIgdG8gbG9hZCB0aGUgZGF0YSBpbnRvIHRoZSAn
c2hhZG93IHBhZ2UnIHN5bmNocm9ub3VzbHksCisgICAgLy8gc28gd2UgY2FuIGdyYWIgdGhlIHJl
c3VsdGluZyBEb2N1bWVudCByaWdodCBhZnRlciBsb2FkLgorICAgIHN0YXRpY19jYXN0PFdlYkRh
dGFTb3VyY2VJbXBsKj4oZHMpLT5zZXREZWZlck1haW5SZXNvdXJjZURhdGFMb2FkKGZhbHNlKTsK
K30KKworV2ViQXBwbGljYXRpb25DYWNoZUhvc3QqIFdlYlNoYXJlZFdvcmtlckltcGw6OmNyZWF0
ZUFwcGxpY2F0aW9uQ2FjaGVIb3N0KFdlYkZyYW1lKiwgV2ViQXBwbGljYXRpb25DYWNoZUhvc3RD
bGllbnQqIGFwcGNhY2hlSG9zdENsaWVudCkKK3sKKyAgICBpZiAoY2xpZW50KCkpCisgICAgICAg
IHJldHVybiBjbGllbnQoKS0+Y3JlYXRlQXBwbGljYXRpb25DYWNoZUhvc3QoYXBwY2FjaGVIb3N0
Q2xpZW50KTsKKyAgICByZXR1cm4gMDsKK30KKworLy8gV29ya2VyT2JqZWN0UHJveHkgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwor
dm9pZCBXZWJTaGFyZWRXb3JrZXJJbXBsOjpwb3N0TWVzc2FnZVRvV29ya2VyT2JqZWN0KFBhc3NS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBtZXNzYWdlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVs
QXJyYXk+IGNoYW5uZWxzKQoreworICAgIFdlYldvcmtlckJhc2U6OmRpc3BhdGNoVGFza1RvTWFp
blRocmVhZChjcmVhdGVDYWxsYmFja1Rhc2soJnBvc3RNZXNzYWdlVGFzaywgQWxsb3dDcm9zc1Ro
cmVhZEFjY2Vzcyh0aGlzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1lc3NhZ2UtPnRvV2lyZVN0cmluZygpLCBjaGFubmVscykpOworfQorCit2b2lk
IFdlYlNoYXJlZFdvcmtlckltcGw6OnBvc3RNZXNzYWdlVGFzayhTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViU2hh
cmVkV29ya2VySW1wbCogdGhpc1B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFN0cmluZyBtZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
UGFzc093blB0cjxNZXNzYWdlUG9ydENoYW5uZWxBcnJheT4gY2hhbm5lbHMpCit7CisgICAgaWYg
KCF0aGlzUHRyLT5jbGllbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViTWVzc2FnZVBv
cnRDaGFubmVsQXJyYXkgd2ViQ2hhbm5lbHMoY2hhbm5lbHMgPyBjaGFubmVscy0+c2l6ZSgpIDog
MCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3ZWJDaGFubmVscy5zaXplKCk7ICsraSkg
eworICAgICAgICB3ZWJDaGFubmVsc1tpXSA9ICgqY2hhbm5lbHMpW2ldLT5jaGFubmVsKCktPndl
YkNoYW5uZWxSZWxlYXNlKCk7CisgICAgICAgIHdlYkNoYW5uZWxzW2ldLT5zZXRDbGllbnQoMCk7
CisgICAgfQorCisgICAgdGhpc1B0ci0+Y2xpZW50KCktPnBvc3RNZXNzYWdlVG9Xb3JrZXJPYmpl
Y3QobWVzc2FnZSwgd2ViQ2hhbm5lbHMpOworfQorCit2b2lkIFdlYlNoYXJlZFdvcmtlckltcGw6
OnBvc3RFeGNlcHRpb25Ub1dvcmtlck9iamVjdChjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsaW5l
TnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpCit7CisgICAgV2ViV29ya2VyQmFzZTo6ZGlzcGF0Y2hU
YXNrVG9NYWluVGhyZWFkKAorICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJnBvc3RFeGNlcHRp
b25UYXNrLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHRoaXMpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZXJyb3JNZXNzYWdlLCBsaW5lTnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc291cmNlVVJMKSk7Cit9CisKK3ZvaWQgV2ViU2hhcmVkV29ya2VySW1wbDo6cG9zdEV4
Y2VwdGlvblRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViU2hhcmVkV29ya2VySW1wbCogdGhpc1B0ciwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBlcnJv
ck1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsaW5l
TnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCkKK3sKKyAgICBpZiAoIXRoaXNQdHItPmNs
aWVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICB0aGlzUHRyLT5jbGllbnQoKS0+cG9zdEV4
Y2VwdGlvblRvV29ya2VyT2JqZWN0KGVycm9yTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VV
UkwpOworfQorCit2b2lkIFdlYlNoYXJlZFdvcmtlckltcGw6OnBvc3RDb25zb2xlTWVzc2FnZVRv
V29ya2VyT2JqZWN0KE1lc3NhZ2VTb3VyY2Ugc291cmNlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlVHlwZSB0eXBlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlTGV2
ZWwgbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpbmVOdW1iZXIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgc291
cmNlVVJMKQoreworICAgIFdlYldvcmtlckJhc2U6OmRpc3BhdGNoVGFza1RvTWFpblRocmVhZChj
cmVhdGVDYWxsYmFja1Rhc2soJnBvc3RDb25zb2xlTWVzc2FnZVRhc2ssIEFsbG93Q3Jvc3NUaHJl
YWRBY2Nlc3ModGhpcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzb3VyY2UsIHR5cGUsIGxldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSwgbGluZU51bWJlciwgc291cmNlVVJMKSk7Cit9
CisKK3ZvaWQgV2ViU2hhcmVkV29ya2VySW1wbDo6cG9zdENvbnNvbGVNZXNzYWdlVGFzayhTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFdlYlNoYXJlZFdvcmtlckltcGwqIHRoaXNQdHIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvdXJjZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdHlwZSwgaW50IGxldmVsLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgbWVz
c2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGlu
ZU51bWJlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBTdHJpbmcmIHNvdXJjZVVSTCkKK3sKKyAgICBpZiAoIXRoaXNQdHItPmNsaWVudCgpKQorICAg
ICAgICByZXR1cm47CisgICAgdGhpc1B0ci0+Y2xpZW50KCktPnBvc3RDb25zb2xlTWVzc2FnZVRv
V29ya2VyT2JqZWN0KHNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSwgbGV2ZWwsIG1lc3NhZ2UsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxp
bmVOdW1iZXIsIHNvdXJjZVVSTCk7Cit9CisKK3ZvaWQgV2ViU2hhcmVkV29ya2VySW1wbDo6cG9z
dE1lc3NhZ2VUb1BhZ2VJbnNwZWN0b3IoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIFdl
YldvcmtlckJhc2U6OmRpc3BhdGNoVGFza1RvTWFpblRocmVhZChjcmVhdGVDYWxsYmFja1Rhc2so
JnBvc3RNZXNzYWdlVG9QYWdlSW5zcGVjdG9yVGFzaywgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyh0
aGlzKSwgbWVzc2FnZSkpOworfQorCit2b2lkIFdlYlNoYXJlZFdvcmtlckltcGw6OnBvc3RNZXNz
YWdlVG9QYWdlSW5zcGVjdG9yVGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViU2hhcmVk
V29ya2VySW1wbCogdGhpc1B0ciwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIGlmICgh
dGhpc1B0ci0+Y2xpZW50KCkpCisgICAgICAgIHJldHVybjsKKyAgICB0aGlzUHRyLT5jbGllbnQo
KS0+ZGlzcGF0Y2hEZXZUb29sc01lc3NhZ2UobWVzc2FnZSk7Cit9CisKK3ZvaWQgV2ViU2hhcmVk
V29ya2VySW1wbDo6dXBkYXRlSW5zcGVjdG9yU3RhdGVDb29raWUoY29uc3QgV1RGOjpTdHJpbmcm
IGNvb2tpZSkKK3sKKyAgICBXZWJXb3JrZXJCYXNlOjpkaXNwYXRjaFRhc2tUb01haW5UaHJlYWQo
Y3JlYXRlQ2FsbGJhY2tUYXNrKCZ1cGRhdGVJbnNwZWN0b3JTdGF0ZUNvb2tpZVRhc2ssIEFsbG93
Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcyksIGNvb2tpZSkpOworfQorCit2b2lkIFdlYlNoYXJlZFdv
cmtlckltcGw6OnVwZGF0ZUluc3BlY3RvclN0YXRlQ29va2llVGFzayhTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgV2ViU2hhcmVkV29ya2VySW1wbCogdGhpc1B0ciwgY29uc3QgU3RyaW5nJiBjb29r
aWUpCit7CisgICAgaWYgKCF0aGlzUHRyLT5jbGllbnQoKSkKKyAgICAgICAgcmV0dXJuOworICAg
IHRoaXNQdHItPmNsaWVudCgpLT5zYXZlRGV2VG9vbHNBZ2VudFN0YXRlKGNvb2tpZSk7Cit9CisK
K3ZvaWQgV2ViU2hhcmVkV29ya2VySW1wbDo6Y29uZmlybU1lc3NhZ2VGcm9tV29ya2VyT2JqZWN0
KGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KQoreworICAgIFdlYldvcmtlckJhc2U6OmRpc3BhdGNo
VGFza1RvTWFpblRocmVhZChjcmVhdGVDYWxsYmFja1Rhc2soJmNvbmZpcm1NZXNzYWdlVGFzaywg
QWxsb3dDcm9zc1RocmVhZEFjY2Vzcyh0aGlzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGhhc1BlbmRpbmdBY3Rpdml0eSkpOworfQorCit2b2lkIFdl
YlNoYXJlZFdvcmtlckltcGw6OmNvbmZpcm1NZXNzYWdlVGFzayhTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2Vi
U2hhcmVkV29ya2VySW1wbCogdGhpc1B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KQoreworICAgIGlmICghdGhpc1B0ci0+
Y2xpZW50KCkpCisgICAgICAgIHJldHVybjsKKyAgICB0aGlzUHRyLT5jbGllbnQoKS0+Y29uZmly
bU1lc3NhZ2VGcm9tV29ya2VyT2JqZWN0KGhhc1BlbmRpbmdBY3Rpdml0eSk7Cit9CisKK3ZvaWQg
V2ViU2hhcmVkV29ya2VySW1wbDo6cmVwb3J0UGVuZGluZ0FjdGl2aXR5KGJvb2wgaGFzUGVuZGlu
Z0FjdGl2aXR5KQoreworICAgIFdlYldvcmtlckJhc2U6OmRpc3BhdGNoVGFza1RvTWFpblRocmVh
ZChjcmVhdGVDYWxsYmFja1Rhc2soJnJlcG9ydFBlbmRpbmdBY3Rpdml0eVRhc2ssCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbGxvd0Nyb3NzVGhyZWFk
QWNjZXNzKHRoaXMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaGFzUGVuZGluZ0FjdGl2aXR5KSk7Cit9CisKK3ZvaWQgV2ViU2hhcmVkV29ya2VySW1w
bDo6cmVwb3J0UGVuZGluZ0FjdGl2aXR5VGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYlNo
YXJlZFdvcmtlckltcGwqIHRoaXNQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkpCit7CisgICAgaWYgKCF0aGlz
UHRyLT5jbGllbnQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIHRoaXNQdHItPmNsaWVudCgpLT5y
ZXBvcnRQZW5kaW5nQWN0aXZpdHkoaGFzUGVuZGluZ0FjdGl2aXR5KTsKK30KKwordm9pZCBXZWJT
aGFyZWRXb3JrZXJJbXBsOjp3b3JrZXJDb250ZXh0Q2xvc2VkKCkKK3sKKyAgICBXZWJXb3JrZXJC
YXNlOjpkaXNwYXRjaFRhc2tUb01haW5UaHJlYWQoY3JlYXRlQ2FsbGJhY2tUYXNrKCZ3b3JrZXJD
b250ZXh0Q2xvc2VkVGFzaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcykpKTsKK30KKwordm9pZCBXZWJT
aGFyZWRXb3JrZXJJbXBsOjp3b3JrZXJDb250ZXh0Q2xvc2VkVGFzayhTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBXZWJTaGFyZWRXb3JrZXJJbXBsKiB0aGlzUHRyKQoreworICAgIGlmICh0aGlzUHRyLT5j
bGllbnQoKSkKKyAgICAgICAgdGhpc1B0ci0+Y2xpZW50KCktPndvcmtlckNvbnRleHRDbG9zZWQo
KTsKKworICAgIHRoaXNQdHItPnN0b3BXb3JrZXJUaHJlYWQoKTsKK30KKwordm9pZCBXZWJTaGFy
ZWRXb3JrZXJJbXBsOjp3b3JrZXJDb250ZXh0RGVzdHJveWVkKCkKK3sKKyAgICBXZWJXb3JrZXJC
YXNlOjpkaXNwYXRjaFRhc2tUb01haW5UaHJlYWQoY3JlYXRlQ2FsbGJhY2tUYXNrKCZ3b3JrZXJD
b250ZXh0RGVzdHJveWVkVGFzaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcykpKTsKK30KKwordm9pZCBX
ZWJTaGFyZWRXb3JrZXJJbXBsOjp3b3JrZXJDb250ZXh0RGVzdHJveWVkVGFzayhTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBXZWJTaGFyZWRXb3JrZXJJbXBsKiB0aGlzUHRyKQoreworICAgIGlmICh0
aGlzUHRyLT5jbGllbnQoKSkKKyAgICAgICAgdGhpc1B0ci0+Y2xpZW50KCktPndvcmtlckNvbnRl
eHREZXN0cm95ZWQoKTsKKyAgICAvLyBUaGUgbGlmZXRpbWUgb2YgdGhpcyBwcm94eSBpcyBjb250
cm9sbGVkIGJ5IHRoZSB3b3JrZXIgY29udGV4dC4KKyAgICBkZWxldGUgdGhpc1B0cjsKK30KKwor
Ly8gV29ya2VyTG9hZGVyUHJveHkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordm9pZCBXZWJTaGFyZWRXb3JrZXJJbXBsOjpwb3N0
VGFza1RvTG9hZGVyKFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gdGFz
aykKK3sKKyAgICBBU1NFUlQobV9sb2FkaW5nRG9jdW1lbnQtPmlzRG9jdW1lbnQoKSk7CisgICAg
bV9sb2FkaW5nRG9jdW1lbnQtPnBvc3RUYXNrKHRhc2spOworfQorCit2b2lkIFdlYlNoYXJlZFdv
cmtlckltcGw6OnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyQ29udGV4dCgKKyAgICBQYXNzT3duUHRy
PFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2ssIGNvbnN0IFN0cmluZyYgbW9kZSkK
K3sKKyAgICBtX3dvcmtlclRocmVhZC0+cnVuTG9vcCgpLnBvc3RUYXNrRm9yTW9kZSh0YXNrLCBt
b2RlKTsKIH0KIAorCisKIGJvb2wgV2ViU2hhcmVkV29ya2VySW1wbDo6aXNTdGFydGVkKCkKIHsK
ICAgICAvLyBTaG91bGQgbm90IGV2ZXIgYmUgY2FsbGVkIGZyb20gdGhlIHdvcmtlciB0aHJlYWQg
KHRoaXMgQVBJIGlzIG9ubHkgY2FsbGVkIG9uIFdlYlNoYXJlZFdvcmtlclByb3h5IG9uIHRoZSBy
ZW5kZXJlciB0aHJlYWQpLgpAQCAtMTc3LDE5ICs0NDgsMTAgQEAgdm9pZCBXZWJTaGFyZWRXb3Jr
ZXJJbXBsOjpkaXNwYXRjaERldlRvb2xzTWVzc2FnZShjb25zdCBXZWJTdHJpbmcmIG1lc3NhZ2Up
CiAgICAgd29ya2VyVGhyZWFkKCktPnJ1bkxvb3AoKS5wb3N0VGFza0Zvck1vZGUoY3JlYXRlQ2Fs
bGJhY2tUYXNrKGRpc3BhdGNoT25JbnNwZWN0b3JCYWNrZW5kVGFzaywgU3RyaW5nKG1lc3NhZ2Up
KSwgV29ya2VyRGVidWdnZXJBZ2VudDo6ZGVidWdnZXJUYXNrTW9kZSk7CiB9CiAKLVdlYldvcmtl
ckNsaWVudCogV2ViU2hhcmVkV29ya2VySW1wbDo6Y2xpZW50KCkKLXsKLSAgICAvLyBXZSBzaG91
bGQgbmV2ZXIgYmUgYXNrZWQgZm9yIGEgV2ViV29ya2VyQ2xpZW50IChvbmx5IGRlZGljYXRlZCB3
b3JrZXJzIGhhdmUgYW4gYXNzb2NpYXRlZCBXZWJXb3JrZXJDbGllbnQpLgotICAgIC8vIEl0IHNo
b3VsZCBub3QgYmUgcG9zc2libGUgZm9yIFNoYXJlZFdvcmtlckNvbnRleHQgdG8gZ2VuZXJhdGUg
YW4gQVBJIGNhbGwgb3V0c2lkZSB0aG9zZSBzdXBwb3J0ZWQgYnkgV2ViQ29tbW9uV29ya2VyQ2xp
ZW50LgotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAwOwotfQotCi1XZWJT
aGFyZWRXb3JrZXIqIFdlYlNoYXJlZFdvcmtlcjo6Y3JlYXRlKFdlYkNvbW1vbldvcmtlckNsaWVu
dCogY2xpZW50KQorV2ViU2hhcmVkV29ya2VyKiBXZWJTaGFyZWRXb3JrZXI6OmNyZWF0ZShXZWJT
aGFyZWRXb3JrZXJDbGllbnQqIGNsaWVudCkKIHsKICAgICByZXR1cm4gbmV3IFdlYlNoYXJlZFdv
cmtlckltcGwoY2xpZW50KTsKIH0KLQogI2VuZGlmIC8vIEVOQUJMRShTSEFSRURfV09SS0VSUykK
IAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJTaGFyZWRXb3JrZXJJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJTaGFyZWRXb3JrZXJJbXBsLmgKaW5kZXggNDM3YmIyYi4uODNkMzYxYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2hhcmVkV29ya2VySW1wbC5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNoYXJlZFdvcmtlckltcGwuaApAQCAtMzQs
MjAgKzM0LDY0IEBACiAjaW5jbHVkZSAiV2ViU2hhcmVkV29ya2VyLmgiCiAKICNpZiBFTkFCTEUo
U0hBUkVEX1dPUktFUlMpCi0KICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCi0K
KyNpbmNsdWRlICJXZWJDb21tb25Xb3JrZXJDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJGcmFtZUNs
aWVudC5oIgogI2luY2x1ZGUgIldlYldvcmtlckJhc2UuaCIKKyNpbmNsdWRlICJXZWJXb3JrZXJD
bGllbnQuaCIKKyNpbmNsdWRlICJXb3JrZXJMb2FkZXJQcm94eS5oIgorI2luY2x1ZGUgIldvcmtl
ck9iamVjdFByb3h5LmgiCisjaW5jbHVkZSAiV29ya2VyVGhyZWFkLmgiCisjaW5jbHVkZSA8d3Rm
L1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKLW5hbWVzcGFjZSBXZWJL
aXQgewogCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYkFwcGxpY2F0aW9uQ2FjaGVIb3N0
OworY2xhc3MgV2ViQXBwbGljYXRpb25DYWNoZUhvc3RDbGllbnQ7CitjbGFzcyBXZWJXb3JrZXJD
bGllbnQ7CitjbGFzcyBXZWJTZWN1cml0eU9yaWdpbjsKK2NsYXNzIFdlYlN0cmluZzsKK2NsYXNz
IFdlYlVSTDsKK2NsYXNzIFdlYlZpZXc7CitjbGFzcyBXZWJXb3JrZXI7CitjbGFzcyBXZWJTaGFy
ZWRXb3JrZXJDbGllbnQ7CiAvLyBUaGlzIGNsYXNzIGlzIHVzZWQgYnkgdGhlIHdvcmtlciBwcm9j
ZXNzIGNvZGUgdG8gdGFsayB0byB0aGUgV2ViQ29yZTo6U2hhcmVkV29ya2VyIGltcGxlbWVudGF0
aW9uLgogLy8gSXQgY2FuJ3QgdXNlIGl0IGRpcmVjdGx5IHNpbmNlIGl0IHVzZXMgV2ViS2l0IHR5
cGVzLCBzbyB0aGlzIGNsYXNzIGNvbnZlcnRzIHRoZSBkYXRhIHR5cGVzLgogLy8gV2hlbiB0aGUg
V2ViQ29yZTo6U2hhcmVkV29ya2VyIG9iamVjdCB3YW50cyB0byBjYWxsIFdlYkNvcmU6Oldvcmtl
clJlcG9ydGluZ1Byb3h5LCB0aGlzIGNsYXNzIHdpbGwKIC8vIGNvbnZlcnQgdG8gQ2hyb21lIGRh
dGEgdHlwZXMgZmlyc3QgYW5kIHRoZW4gY2FsbCB0aGUgc3VwcGxpZWQgV2ViQ29tbW9uV29ya2Vy
Q2xpZW50LgotY2xhc3MgV2ViU2hhcmVkV29ya2VySW1wbCA6IHB1YmxpYyBXZWJXb3JrZXJCYXNl
LCBwdWJsaWMgV2ViU2hhcmVkV29ya2VyIHsKK2NsYXNzIFdlYlNoYXJlZFdvcmtlckltcGwgOiBw
dWJsaWMgV2ViQ29yZTo6V29ya2VyT2JqZWN0UHJveHkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgLCBwdWJsaWMgV2ViV29ya2VyQmFzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAsIHB1
YmxpYyBXZWJGcmFtZUNsaWVudAorICAgICAgICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBX
ZWJTaGFyZWRXb3JrZXIgewogcHVibGljOgotICAgIGV4cGxpY2l0IFdlYlNoYXJlZFdvcmtlcklt
cGwoV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjbGllbnQpOworICAgIGV4cGxpY2l0IFdlYlNoYXJl
ZFdvcmtlckltcGwoV2ViU2hhcmVkV29ya2VyQ2xpZW50Kik7CisKKyAgICB2aXJ0dWFsIHZvaWQg
cG9zdE1lc3NhZ2VUb1dvcmtlck9iamVjdCgKKyAgICAgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpT
ZXJpYWxpemVkU2NyaXB0VmFsdWU+LAorICAgICAgICBQYXNzT3duUHRyPFdlYkNvcmU6Ok1lc3Nh
Z2VQb3J0Q2hhbm5lbEFycmF5Pik7CisgICAgdmlydHVhbCB2b2lkIHBvc3RFeGNlcHRpb25Ub1dv
cmtlck9iamVjdCgKKyAgICAgICAgY29uc3QgV1RGOjpTdHJpbmcmLCBpbnQsIGNvbnN0IFdURjo6
U3RyaW5nJik7CisgICAgdmlydHVhbCB2b2lkIHBvc3RDb25zb2xlTWVzc2FnZVRvV29ya2VyT2Jq
ZWN0KAorICAgICAgICBXZWJDb3JlOjpNZXNzYWdlU291cmNlLCBXZWJDb3JlOjpNZXNzYWdlVHlw
ZSwKKyAgICAgICAgV2ViQ29yZTo6TWVzc2FnZUxldmVsLCBjb25zdCBXVEY6OlN0cmluZyYsIGlu
dCwgY29uc3QgV1RGOjpTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcG9zdE1lc3NhZ2VUb1Bh
Z2VJbnNwZWN0b3IoY29uc3QgV1RGOjpTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRl
SW5zcGVjdG9yU3RhdGVDb29raWUoY29uc3QgV1RGOjpTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZv
aWQgY29uZmlybU1lc3NhZ2VGcm9tV29ya2VyT2JqZWN0KGJvb2wpOworICAgIHZpcnR1YWwgdm9p
ZCByZXBvcnRQZW5kaW5nQWN0aXZpdHkoYm9vbCk7CisgICAgdmlydHVhbCB2b2lkIHdvcmtlckNv
bnRleHRDbG9zZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgd29ya2VyQ29udGV4dERlc3Ryb3llZCgp
OworICAgIHZpcnR1YWwgV2ViVmlldyogdmlldygpIGNvbnN0IHsgcmV0dXJuIG1fd2ViVmlldzsg
fQorCisgICAgLy8gV2ViQ29yZTo6V29ya2VyTG9hZGVyUHJveHkgbWV0aG9kczoKKyAgICB2aXJ0
dWFsIHZvaWQgcG9zdFRhc2tUb0xvYWRlcihQYXNzT3duUHRyPFdlYkNvcmU6OlNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQ6OlRhc2s+KTsKKyAgICB2aXJ0dWFsIHZvaWQgcG9zdFRhc2tGb3JNb2RlVG9X
b3JrZXJDb250ZXh0KAorICAgICAgICBQYXNzT3duUHRyPFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQ6OlRhc2s+LCBjb25zdCBXVEY6OlN0cmluZyYgbW9kZSk7CisKKyAgICAvLyBXZWJG
cmFtZUNsaWVudCBtZXRob2RzIHRvIHN1cHBvcnQgcmVzb3VyY2UgbG9hZGluZyB0aHJ1IHRoZSAn
c2hhZG93IHBhZ2UnLgorICAgIHZpcnR1YWwgdm9pZCBkaWRDcmVhdGVEYXRhU291cmNlKFdlYkZy
YW1lKiwgV2ViRGF0YVNvdXJjZSopOworICAgIHZpcnR1YWwgV2ViQXBwbGljYXRpb25DYWNoZUhv
c3QqIGNyZWF0ZUFwcGxpY2F0aW9uQ2FjaGVIb3N0KFdlYkZyYW1lKiwgV2ViQXBwbGljYXRpb25D
YWNoZUhvc3RDbGllbnQqKTsKKwogCiAgICAgLy8gV2ViU2hhcmVkV29ya2VyIG1ldGhvZHM6CiAg
ICAgdmlydHVhbCBib29sIGlzU3RhcnRlZCgpOwpAQCAtNjMsMTkgKzEwNyw3MiBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB2b2lkIGRldGFjaERldlRvb2xzKCk7CiAgICAgdmlydHVhbCB2b2lkIGRp
c3BhdGNoRGV2VG9vbHNNZXNzYWdlKGNvbnN0IFdlYlN0cmluZyYpOwogCi0gICAgLy8gV2ViV29y
a2VyQmFzZSBtZXRob2RzOgotICAgIFdlYldvcmtlckNsaWVudCogY2xpZW50KCk7Ci0gICAgV2Vi
Q29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQoKSB7IHJldHVybiBtX2NsaWVudDsgfQog
CiAgICAgLy8gTmV3V2ViV29ya2VyQmFzZSBtZXRob2RzOgotICAgIE5ld1dlYkNvbW1vbldvcmtl
ckNsaWVudCogbmV3Q29tbW9uQ2xpZW50KCkgeyByZXR1cm4gbV9jbGllbnQ7IH0KKyAgICBXZWJD
b21tb25Xb3JrZXJDbGllbnQqIGNvbW1vbkNsaWVudCgpIHsgcmV0dXJuIG1fY2xpZW50OyB9CiAK
IHByaXZhdGU6CiAgICAgdmlydHVhbCB+V2ViU2hhcmVkV29ya2VySW1wbCgpOwogCi0gICAgc3Rh
dGljIHZvaWQgY29ubmVjdFRhc2soV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBh
c3NPd25QdHI8V2ViQ29yZTo6TWVzc2FnZVBvcnRDaGFubmVsPik7CisgICAgV2ViU2hhcmVkV29y
a2VyQ2xpZW50KiBjbGllbnQoKSB7IHJldHVybiBtX2NsaWVudDsgfQorCisgICAgdm9pZCBzZXRX
b3JrZXJUaHJlYWQoUGFzc1JlZlB0cjxXZWJDb3JlOjpXb3JrZXJUaHJlYWQ+IHRocmVhZCkgeyBt
X3dvcmtlclRocmVhZCA9IHRocmVhZDsgfQorICAgIFdlYkNvcmU6OldvcmtlclRocmVhZCogd29y
a2VyVGhyZWFkKCkgeyByZXR1cm4gbV93b3JrZXJUaHJlYWQuZ2V0KCk7IH0KKworICAgIC8vIFNo
dXRzIGRvd24gdGhlIHdvcmtlciB0aHJlYWQuCisgICAgdm9pZCBzdG9wV29ya2VyVGhyZWFkKCk7
CiAKLSAgICBXZWJDb21tb25Xb3JrZXJDbGllbnQqIG1fY2xpZW50OworICAgIC8vIENyZWF0ZXMg
dGhlIHNoYWRvdyBsb2FkZXIgdXNlZCBmb3Igd29ya2VyIG5ldHdvcmsgcmVxdWVzdHMuCisgICAg
dm9pZCBpbml0aWFsaXplTG9hZGVyKGNvbnN0IFdlYlVSTCYpOworCisKKyAgICBzdGF0aWMgdm9p
ZCBjb25uZWN0VGFzayhXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc093blB0
cjxXZWJDb3JlOjpNZXNzYWdlUG9ydENoYW5uZWw+KTsKKyAgICAvLyBUYXNrcyB0aGF0IGFyZSBy
dW4gb24gdGhlIG1haW4gdGhyZWFkLgorICAgIHN0YXRpYyB2b2lkIHBvc3RNZXNzYWdlVGFzaygK
KyAgICAgICAgV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosCisgICAgICAgIFdlYlNo
YXJlZFdvcmtlckltcGwqIHRoaXNQdHIsCisgICAgICAgIFdURjo6U3RyaW5nIG1lc3NhZ2UsCisg
ICAgICAgIFBhc3NPd25QdHI8V2ViQ29yZTo6TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+IGNoYW5u
ZWxzKTsKKyAgICBzdGF0aWMgdm9pZCBwb3N0RXhjZXB0aW9uVGFzaygKKyAgICAgICAgV2ViQ29y
ZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosCisgICAgICAgIFdlYlNoYXJlZFdvcmtlckltcGwq
IHRoaXNQdHIsCisgICAgICAgIGNvbnN0IFdURjo6U3RyaW5nJiBtZXNzYWdlLAorICAgICAgICBp
bnQgbGluZU51bWJlciwKKyAgICAgICAgY29uc3QgV1RGOjpTdHJpbmcmIHNvdXJjZVVSTCk7Cisg
ICAgc3RhdGljIHZvaWQgcG9zdENvbnNvbGVNZXNzYWdlVGFzaygKKyAgICAgICAgV2ViQ29yZTo6
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosCisgICAgICAgIFdlYlNoYXJlZFdvcmtlckltcGwqIHRo
aXNQdHIsCisgICAgICAgIGludCBzb3VyY2UsCisgICAgICAgIGludCB0eXBlLAorICAgICAgICBp
bnQgbGV2ZWwsCisgICAgICAgIGNvbnN0IFdURjo6U3RyaW5nJiBtZXNzYWdlLAorICAgICAgICBp
bnQgbGluZU51bWJlciwKKyAgICAgICAgY29uc3QgV1RGOjpTdHJpbmcmIHNvdXJjZVVSTCk7Cisg
ICAgc3RhdGljIHZvaWQgcG9zdE1lc3NhZ2VUb1BhZ2VJbnNwZWN0b3JUYXNrKFdlYkNvcmU6OlNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJTaGFyZWRXb3JrZXJJbXBsKiwgY29uc3QgV1RGOjpT
dHJpbmcmKTsKKyAgICBzdGF0aWMgdm9pZCB1cGRhdGVJbnNwZWN0b3JTdGF0ZUNvb2tpZVRhc2so
V2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYlNoYXJlZFdvcmtlckltcGwqIHRo
aXNQdHIsIGNvbnN0IFdURjo6U3RyaW5nJiBjb29raWUpOworICAgIHN0YXRpYyB2b2lkIGNvbmZp
cm1NZXNzYWdlVGFzaygKKyAgICAgICAgV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
CisgICAgICAgIFdlYlNoYXJlZFdvcmtlckltcGwqIHRoaXNQdHIsCisgICAgICAgIGJvb2wgaGFz
UGVuZGluZ0FjdGl2aXR5KTsKKyAgICBzdGF0aWMgdm9pZCByZXBvcnRQZW5kaW5nQWN0aXZpdHlU
YXNrKAorICAgICAgICBXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwKKyAgICAgICAg
V2ViU2hhcmVkV29ya2VySW1wbCogdGhpc1B0ciwKKyAgICAgICAgYm9vbCBoYXNQZW5kaW5nQWN0
aXZpdHkpOworICAgIHN0YXRpYyB2b2lkIHdvcmtlckNvbnRleHRDbG9zZWRUYXNrKAorICAgICAg
ICBXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwKKyAgICAgICAgV2ViU2hhcmVkV29y
a2VySW1wbCogdGhpc1B0cik7CisgICAgc3RhdGljIHZvaWQgd29ya2VyQ29udGV4dERlc3Ryb3ll
ZFRhc2soCisgICAgICAgIFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLAorICAgICAg
ICBXZWJTaGFyZWRXb3JrZXJJbXBsKiB0aGlzUHRyKTsKKworICAgIC8vICdzaGFkb3cgcGFnZScg
LSBjcmVhdGVkIHRvIHByb3h5IGxvYWRpbmcgcmVxdWVzdHMgZnJvbSB0aGUgd29ya2VyLgorICAg
IFJlZlB0cjxXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0PiBtX2xvYWRpbmdEb2N1bWVu
dDsKKyAgICBXZWJWaWV3KiBtX3dlYlZpZXc7CisgICAgYm9vbCBtX2Fza2VkVG9UZXJtaW5hdGU7
CisKKyAgICBSZWZQdHI8V2ViQ29yZTo6V29ya2VyVGhyZWFkPiBtX3dvcmtlclRocmVhZDsKKwor
ICAgIFdlYlNoYXJlZFdvcmtlckNsaWVudCogbV9jbGllbnQ7CiAgICAgYm9vbCBtX3BhdXNlV29y
a2VyQ29udGV4dE9uU3RhcnQ7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJXb3JrZXJCYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YldvcmtlckJhc2UuY3BwCmluZGV4IDkzZjg0MGMuLmIxMmRiN2QgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckJhc2UuY3BwCkBAIC0zMiwyMCArMzIsNyBAQAogI2lu
Y2x1ZGUgIldlYldvcmtlckJhc2UuaCIKIAogI2luY2x1ZGUgIkNyb3NzVGhyZWFkVGFzay5oIgot
I2luY2x1ZGUgIkRhdGFiYXNlVGFzay5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVk
ZSAiTWVzc2FnZVBvcnRDaGFubmVsLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1NZXNzYWdlUG9ydENo
YW5uZWwuaCIKLSNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogCi0jaW5jbHVkZSAiV2ViRGF0
YVNvdXJjZUltcGwuaCIKLSNpbmNsdWRlICJXZWJGaWxlRXJyb3IuaCIKLSNpbmNsdWRlICJXZWJG
cmFtZUNsaWVudC5oIgotI2luY2x1ZGUgIldlYkZyYW1lSW1wbC5oIgotI2luY2x1ZGUgIldlYk1l
c3NhZ2VQb3J0Q2hhbm5lbC5oIgotI2luY2x1ZGUgIldlYlJ1bnRpbWVGZWF0dXJlcy5oIgotI2lu
Y2x1ZGUgIldlYlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiV2ViVmlldy5oIgogI2luY2x1ZGUgIldl
YldvcmtlckNsaWVudC5oIgogCiAjaW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgpAQCAtNTksODIg
KzQ2LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKICNpZiBFTkFCTEUoV09SS0VSUykKIAotLy8g
VGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgb24gdGhlIG1haW4gdGhyZWFkIHRvIGZvcmNlIHRvIGlu
aXRpYWxpemUgc29tZSBzdGF0aWMKLS8vIHZhbHVlcyB1c2VkIGluIFdlYktpdCBiZWZvcmUgYW55
IHdvcmtlciB0aHJlYWQgaXMgc3RhcnRlZC4gVGhpcyBpcyBiZWNhdXNlIGluCi0vLyBvdXIgd29y
a2VyIHByb2Nlc3NzLCB3ZSBkbyBub3QgcnVuIGFueSBXZWJLaXQgY29kZSBpbiBtYWluIHRocmVh
ZCBhbmQgdGh1cwotLy8gd2hlbiBtdWx0aXBsZSB3b3JrZXJzIHRyeSB0byBzdGFydCBhdCB0aGUg
c2FtZSB0aW1lLCB3ZSBtaWdodCBoaXQgY3Jhc2ggZHVlCi0vLyB0byBjb250ZW50aW9uIGZvciBp
bml0aWFsaXppbmcgc3RhdGljIHZhbHVlcy4KLXN0YXRpYyB2b2lkIGluaXRpYWxpemVXZWJLaXRT
dGF0aWNWYWx1ZXMoKQotewotICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVkID0gZmFsc2U7Ci0g
ICAgaWYgKCFpbml0aWFsaXplZCkgewotICAgICAgICBpbml0aWFsaXplZCA9IHRydWU7Ci0gICAg
ICAgIC8vIE5vdGUgdGhhdCB3ZSBoYXZlIHRvIHBhc3MgYSBVUkwgd2l0aCB2YWxpZCBwcm90b2Nv
bCBpbiBvcmRlciB0byBmb2xsb3cKLSAgICAgICAgLy8gdGhlIHBhdGggdG8gZG8gc3RhdGljIHZh
bHVlIGluaXRpYWxpemF0aW9ucy4KLSAgICAgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBvcmln
aW4gPQotICAgICAgICAgICAgU2VjdXJpdHlPcmlnaW46OmNyZWF0ZShLVVJMKFBhcnNlZFVSTFN0
cmluZywgImh0dHA6Ly9sb2NhbGhvc3QiKSk7Ci0gICAgICAgIG9yaWdpbi5yZWxlYXNlKCk7Ci0g
ICAgfQotfQotCi1XZWJXb3JrZXJCYXNlOjpXZWJXb3JrZXJCYXNlKCkKLSAgICA6IG1fd2ViVmll
dygwKQotICAgICwgbV9hc2tlZFRvVGVybWluYXRlKGZhbHNlKQotewotICAgIGluaXRpYWxpemVX
ZWJLaXRTdGF0aWNWYWx1ZXMoKTsKLX0KLQotV2ViV29ya2VyQmFzZTo6fldlYldvcmtlckJhc2Uo
KQotewotICAgIEFTU0VSVChtX3dlYlZpZXcpOwotICAgIFdlYkZyYW1lSW1wbCogd2ViRnJhbWUg
PSBzdGF0aWNfY2FzdDxXZWJGcmFtZUltcGwqPihtX3dlYlZpZXctPm1haW5GcmFtZSgpKTsKLSAg
ICBpZiAod2ViRnJhbWUpCi0gICAgICAgIHdlYkZyYW1lLT5zZXRDbGllbnQoMCk7Ci0gICAgbV93
ZWJWaWV3LT5jbG9zZSgpOwotfQotCi12b2lkIFdlYldvcmtlckJhc2U6OnN0b3BXb3JrZXJUaHJl
YWQoKQotewotICAgIGlmIChtX2Fza2VkVG9UZXJtaW5hdGUpCi0gICAgICAgIHJldHVybjsKLSAg
ICBtX2Fza2VkVG9UZXJtaW5hdGUgPSB0cnVlOwotICAgIGlmIChtX3dvcmtlclRocmVhZCkKLSAg
ICAgICAgbV93b3JrZXJUaHJlYWQtPnN0b3AoKTsKLX0KLQotdm9pZCBXZWJXb3JrZXJCYXNlOjpp
bml0aWFsaXplTG9hZGVyKGNvbnN0IFdlYlVSTCYgdXJsKQotewotICAgIC8vIENyZWF0ZSAnc2hh
ZG93IHBhZ2UnLiBUaGlzIHBhZ2UgaXMgbmV2ZXIgZGlzcGxheWVkLCBpdCBpcyB1c2VkIHRvIHBy
b3h5IHRoZQotICAgIC8vIGxvYWRpbmcgcmVxdWVzdHMgZnJvbSB0aGUgd29ya2VyIGNvbnRleHQg
dG8gdGhlIHJlc3Qgb2YgV2ViS2l0IGFuZCBDaHJvbWl1bQotICAgIC8vIGluZnJhc3RydWN0dXJl
LgotICAgIEFTU0VSVCghbV93ZWJWaWV3KTsKLSAgICBtX3dlYlZpZXcgPSBXZWJWaWV3OjpjcmVh
dGUoMCk7Ci0gICAgbV93ZWJWaWV3LT5zZXR0aW5ncygpLT5zZXRPZmZsaW5lV2ViQXBwbGljYXRp
b25DYWNoZUVuYWJsZWQoV2ViUnVudGltZUZlYXR1cmVzOjppc0FwcGxpY2F0aW9uQ2FjaGVFbmFi
bGVkKCkpOwotICAgIC8vIEZJWE1FOiBTZXR0aW5ncyBpbmZvcm1hdGlvbiBzaG91bGQgYmUgcGFz
c2VkIHRvIHRoZSBXb3JrZXIgcHJvY2VzcyBmcm9tIEJyb3dzZXIgcHJvY2VzcyB3aGVuIHRoZSB3
b3JrZXIKLSAgICAvLyBpcyBjcmVhdGVkIChzaW1pbGFyIHRvIFJlbmRlclRocmVhZDo6T25DcmVh
dGVOZXdWaWV3KS4KLSAgICBtX3dlYlZpZXctPnNldHRpbmdzKCktPnNldEhpeGllNzZXZWJTb2Nr
ZXRQcm90b2NvbEVuYWJsZWQoZmFsc2UpOwotICAgIG1fd2ViVmlldy0+aW5pdGlhbGl6ZU1haW5G
cmFtZSh0aGlzKTsKLQotICAgIFdlYkZyYW1lSW1wbCogd2ViRnJhbWUgPSBzdGF0aWNfY2FzdDxX
ZWJGcmFtZUltcGwqPihtX3dlYlZpZXctPm1haW5GcmFtZSgpKTsKLQotICAgIC8vIENvbnN0cnVj
dCBzdWJzdGl0dXRlIGRhdGEgc291cmNlIGZvciB0aGUgJ3NoYWRvdyBwYWdlJy4gV2Ugb25seSBu
ZWVkIGl0Ci0gICAgLy8gdG8gaGF2ZSBzYW1lIG9yaWdpbiBhcyB0aGUgd29ya2VyIHNvIHRoZSBs
b2FkaW5nIGNoZWNrcyB3b3JrIGNvcnJlY3RseS4KLSAgICBDU3RyaW5nIGNvbnRlbnQoIiIpOwot
ICAgIGludCBsZW4gPSBzdGF0aWNfY2FzdDxpbnQ+KGNvbnRlbnQubGVuZ3RoKCkpOwotICAgIFJl
ZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZihTaGFyZWRCdWZmZXI6OmNyZWF0ZShjb250ZW50LmRhdGEo
KSwgbGVuKSk7Ci0gICAgU3Vic3RpdHV0ZURhdGEgc3Vic3REYXRhKGJ1ZiwgU3RyaW5nKCJ0ZXh0
L2h0bWwiKSwgU3RyaW5nKCJVVEYtOCIpLCBLVVJMKCkpOwotICAgIHdlYkZyYW1lLT5mcmFtZSgp
LT5sb2FkZXIoKS0+bG9hZChSZXNvdXJjZVJlcXVlc3QodXJsKSwgc3Vic3REYXRhLCBmYWxzZSk7
Ci0KLSAgICAvLyBUaGlzIGRvY3VtZW50IHdpbGwgYmUgdXNlZCBhcyAnbG9hZGluZyBjb250ZXh0
JyBmb3IgdGhlIHdvcmtlci4KLSAgICBtX2xvYWRpbmdEb2N1bWVudCA9IHdlYkZyYW1lLT5mcmFt
ZSgpLT5kb2N1bWVudCgpOwotfQotCi12b2lkIFdlYldvcmtlckJhc2U6OmRpc3BhdGNoVGFza1Rv
TWFpblRocmVhZChQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2sp
Ci17Ci0gICAgY2FsbE9uTWFpblRocmVhZChpbnZva2VUYXNrTWV0aG9kLCB0YXNrLmxlYWtQdHIo
KSk7Ci19Ci0KLXZvaWQgV2ViV29ya2VyQmFzZTo6aW52b2tlVGFza01ldGhvZCh2b2lkKiBwYXJh
bSkKK3N0YXRpYyB2b2lkIGludm9rZVRhc2tNZXRob2Qodm9pZCogcGFyYW0pCiB7CiAgICAgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayogdGFzayA9CiAgICAgICAgIHN0YXRpY19jYXN0PFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2sqPihwYXJhbSk7CkBAIC0xNDIsMTkzICs1NCwxMCBA
QCB2b2lkIFdlYldvcmtlckJhc2U6Omludm9rZVRhc2tNZXRob2Qodm9pZCogcGFyYW0pCiAgICAg
ZGVsZXRlIHRhc2s7CiB9CiAKLXZvaWQgV2ViV29ya2VyQmFzZTo6ZGlkQ3JlYXRlRGF0YVNvdXJj
ZShXZWJGcmFtZSosIFdlYkRhdGFTb3VyY2UqIGRzKQotewotICAgIC8vIFRlbGwgdGhlIGxvYWRl
ciB0byBsb2FkIHRoZSBkYXRhIGludG8gdGhlICdzaGFkb3cgcGFnZScgc3luY2hyb25vdXNseSwK
LSAgICAvLyBzbyB3ZSBjYW4gZ3JhYiB0aGUgcmVzdWx0aW5nIERvY3VtZW50IHJpZ2h0IGFmdGVy
IGxvYWQuCi0gICAgc3RhdGljX2Nhc3Q8V2ViRGF0YVNvdXJjZUltcGwqPihkcyktPnNldERlZmVy
TWFpblJlc291cmNlRGF0YUxvYWQoZmFsc2UpOwotfQotCi1XZWJBcHBsaWNhdGlvbkNhY2hlSG9z
dCogV2ViV29ya2VyQmFzZTo6Y3JlYXRlQXBwbGljYXRpb25DYWNoZUhvc3QoV2ViRnJhbWUqLCBX
ZWJBcHBsaWNhdGlvbkNhY2hlSG9zdENsaWVudCogYXBwY2FjaGVIb3N0Q2xpZW50KQotewotICAg
IGlmIChjb21tb25DbGllbnQoKSkKLSAgICAgICAgcmV0dXJuIGNvbW1vbkNsaWVudCgpLT5jcmVh
dGVBcHBsaWNhdGlvbkNhY2hlSG9zdChhcHBjYWNoZUhvc3RDbGllbnQpOwotICAgIHJldHVybiAw
OwotfQotCi0vLyBXb3JrZXJPYmplY3RQcm94eSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi12b2lkIFdlYldvcmtlckJhc2U6OnBv
c3RNZXNzYWdlVG9Xb3JrZXJPYmplY3QoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
IG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
UGFzc093blB0cjxNZXNzYWdlUG9ydENoYW5uZWxBcnJheT4gY2hhbm5lbHMpCi17Ci0gICAgZGlz
cGF0Y2hUYXNrVG9NYWluVGhyZWFkKGNyZWF0ZUNhbGxiYWNrVGFzaygmcG9zdE1lc3NhZ2VUYXNr
LCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHRoaXMpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS0+dG9XaXJlU3RyaW5nKCksIGNoYW5uZWxz
KSk7Ci19Ci0KLXZvaWQgV2ViV29ya2VyQmFzZTo6cG9zdE1lc3NhZ2VUYXNrKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBXZWJXb3JrZXJCYXNlKiB0aGlzUHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgU3RyaW5nIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBQYXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBjaGFubmVscykKLXsKLSAgICBp
ZiAoIXRoaXNQdHItPmNsaWVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXZWJNZXNzYWdl
UG9ydENoYW5uZWxBcnJheSB3ZWJDaGFubmVscyhjaGFubmVscyA/IGNoYW5uZWxzLT5zaXplKCkg
OiAwKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdlYkNoYW5uZWxzLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgIHdlYkNoYW5uZWxzW2ldID0gKCpjaGFubmVscylbaV0tPmNoYW5uZWwoKS0+
d2ViQ2hhbm5lbFJlbGVhc2UoKTsKLSAgICAgICAgd2ViQ2hhbm5lbHNbaV0tPnNldENsaWVudCgw
KTsKLSAgICB9Ci0KLSAgICB0aGlzUHRyLT5jbGllbnQoKS0+cG9zdE1lc3NhZ2VUb1dvcmtlck9i
amVjdChtZXNzYWdlLCB3ZWJDaGFubmVscyk7Ci19Ci0KLXZvaWQgV2ViV29ya2VyQmFzZTo6cG9z
dEV4Y2VwdGlvblRvV29ya2VyT2JqZWN0KGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpbmVOdW1i
ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBTdHJpbmcmIHNvdXJjZVVSTCkKLXsKLSAgICBkaXNwYXRjaFRhc2tUb01haW5UaHJlYWQoCi0g
ICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmcG9zdEV4Y2VwdGlvblRhc2ssIEFsbG93Q3Jvc3NU
aHJlYWRBY2Nlc3ModGhpcyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3Nh
Z2UsIGxpbmVOdW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VVUkwpKTsK
LX0KLQotdm9pZCBXZWJXb3JrZXJCYXNlOjpwb3N0RXhjZXB0aW9uVGFzayhTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBXZWJXb3JrZXJCYXNlKiB0aGlzUHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlVVJM
KQotewotICAgIGlmICghdGhpc1B0ci0+Y29tbW9uQ2xpZW50KCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIHRoaXNQdHItPmNvbW1vbkNsaWVudCgpLT5wb3N0RXhjZXB0aW9uVG9Xb3JrZXJPYmpl
Y3QoZXJyb3JNZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbGluZU51bWJlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVVSTCk7Ci19Ci0KLXZvaWQgV2Vi
V29ya2VyQmFzZTo6cG9zdENvbnNvbGVNZXNzYWdlVG9Xb3JrZXJPYmplY3QoTWVzc2FnZVNvdXJj
ZSBzb3VyY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE1lc3NhZ2VUeXBlIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VMZXZlbCBsZXZlbCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBtZXNz
YWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgbGluZU51bWJlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpCi17Ci0gICAgZGlzcGF0Y2hU
YXNrVG9NYWluVGhyZWFkKGNyZWF0ZUNhbGxiYWNrVGFzaygmcG9zdENvbnNvbGVNZXNzYWdlVGFz
aywgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyh0aGlzKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSwgdHlwZSwgbGV2ZWwsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLCBsaW5lTnVtYmVy
LCBzb3VyY2VVUkwpKTsKLX0KIAotdm9pZCBXZWJXb3JrZXJCYXNlOjpwb3N0Q29uc29sZU1lc3Nh
Z2VUYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViV29ya2VyQmFzZSogdGhpc1B0ciwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc291cmNlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0eXBlLCBpbnQgbGV2ZWws
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5n
JiBtZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBsaW5lTnVtYmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFN0cmluZyYgc291cmNlVVJMKQotewotICAgIGlmICghdGhpc1B0ci0+Y29tbW9uQ2xp
ZW50KCkpCi0gICAgICAgIHJldHVybjsKLSAgICB0aGlzUHRyLT5jb21tb25DbGllbnQoKS0+cG9z
dENvbnNvbGVNZXNzYWdlVG9Xb3JrZXJPYmplY3Qoc291cmNlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLCBsZXZlbCwg
bWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbGluZU51bWJlciwgc291cmNlVVJMKTsKLX0KLQotdm9pZCBXZWJXb3Jr
ZXJCYXNlOjpwb3N0TWVzc2FnZVRvUGFnZUluc3BlY3Rvcihjb25zdCBTdHJpbmcmIG1lc3NhZ2Up
Ci17Ci0gICAgZGlzcGF0Y2hUYXNrVG9NYWluVGhyZWFkKGNyZWF0ZUNhbGxiYWNrVGFzaygmcG9z
dE1lc3NhZ2VUb1BhZ2VJbnNwZWN0b3JUYXNrLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHRoaXMp
LCBtZXNzYWdlKSk7Ci19Ci0KLXZvaWQgV2ViV29ya2VyQmFzZTo6cG9zdE1lc3NhZ2VUb1BhZ2VJ
bnNwZWN0b3JUYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJXb3JrZXJCYXNlKiB0aGlz
UHRyLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgaWYgKCF0aGlzUHRyLT5jb21tb25D
bGllbnQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHRoaXNQdHItPmNvbW1vbkNsaWVudCgpLT5k
aXNwYXRjaERldlRvb2xzTWVzc2FnZShtZXNzYWdlKTsKLX0KLQotdm9pZCBXZWJXb3JrZXJCYXNl
Ojp1cGRhdGVJbnNwZWN0b3JTdGF0ZUNvb2tpZShjb25zdCBXVEY6OlN0cmluZyYgY29va2llKQot
ewotICAgIGRpc3BhdGNoVGFza1RvTWFpblRocmVhZChjcmVhdGVDYWxsYmFja1Rhc2soJnVwZGF0
ZUluc3BlY3RvclN0YXRlQ29va2llVGFzaywgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyh0aGlzKSwg
Y29va2llKSk7Ci19Ci0KLXZvaWQgV2ViV29ya2VyQmFzZTo6dXBkYXRlSW5zcGVjdG9yU3RhdGVD
b29raWVUYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJXb3JrZXJCYXNlKiB0aGlzUHRy
LCBjb25zdCBTdHJpbmcmIGNvb2tpZSkKLXsKLSAgICBpZiAoIXRoaXNQdHItPmNvbW1vbkNsaWVu
dCgpKQotICAgICAgICByZXR1cm47Ci0gICAgdGhpc1B0ci0+Y29tbW9uQ2xpZW50KCktPnNhdmVE
ZXZUb29sc0FnZW50U3RhdGUoY29va2llKTsKLX0KLQotdm9pZCBXZWJXb3JrZXJCYXNlOjpjb25m
aXJtTWVzc2FnZUZyb21Xb3JrZXJPYmplY3QoYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkpCi17Ci0g
ICAgZGlzcGF0Y2hUYXNrVG9NYWluVGhyZWFkKGNyZWF0ZUNhbGxiYWNrVGFzaygmY29uZmlybU1l
c3NhZ2VUYXNrLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHRoaXMpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzUGVuZGluZ0FjdGl2aXR5KSk7Ci19
Ci0KLXZvaWQgV2ViV29ya2VyQmFzZTo6Y29uZmlybU1lc3NhZ2VUYXNrKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBXZWJXb3JrZXJCYXNlKiB0aGlzUHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkpCi17Ci0gICAgaWYgKCF0aGlzUHRyLT5j
bGllbnQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHRoaXNQdHItPmNsaWVudCgpLT5jb25maXJt
TWVzc2FnZUZyb21Xb3JrZXJPYmplY3QoaGFzUGVuZGluZ0FjdGl2aXR5KTsKLX0KLQotdm9pZCBX
ZWJXb3JrZXJCYXNlOjpyZXBvcnRQZW5kaW5nQWN0aXZpdHkoYm9vbCBoYXNQZW5kaW5nQWN0aXZp
dHkpCi17Ci0gICAgZGlzcGF0Y2hUYXNrVG9NYWluVGhyZWFkKGNyZWF0ZUNhbGxiYWNrVGFzaygm
cmVwb3J0UGVuZGluZ0FjdGl2aXR5VGFzaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcyksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNQZW5kaW5nQWN0aXZp
dHkpKTsKLX0KLQotdm9pZCBXZWJXb3JrZXJCYXNlOjpyZXBvcnRQZW5kaW5nQWN0aXZpdHlUYXNr
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgV2ViV29ya2VyQmFzZSogdGhpc1B0ciwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGhhc1BlbmRpbmdBY3Rp
dml0eSkKLXsKLSAgICBpZiAoIXRoaXNQdHItPmNsaWVudCgpKQotICAgICAgICByZXR1cm47Ci0g
ICAgdGhpc1B0ci0+Y2xpZW50KCktPnJlcG9ydFBlbmRpbmdBY3Rpdml0eShoYXNQZW5kaW5nQWN0
aXZpdHkpOwotfQotCi12b2lkIFdlYldvcmtlckJhc2U6OndvcmtlckNvbnRleHRDbG9zZWQoKQot
ewotICAgIGRpc3BhdGNoVGFza1RvTWFpblRocmVhZChjcmVhdGVDYWxsYmFja1Rhc2soJndvcmtl
ckNvbnRleHRDbG9zZWRUYXNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyh0aGlzKSkpOwotfQotCi12b2lkIFdl
YldvcmtlckJhc2U6OndvcmtlckNvbnRleHRDbG9zZWRUYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFdlYldvcmtlckJhc2UqIHRoaXNQdHIpCi17Ci0gICAgaWYgKHRoaXNQdHItPmNvbW1vbkNsaWVu
dCgpKQotICAgICAgICB0aGlzUHRyLT5jb21tb25DbGllbnQoKS0+d29ya2VyQ29udGV4dENsb3Nl
ZCgpOwotCi0gICAgdGhpc1B0ci0+c3RvcFdvcmtlclRocmVhZCgpOwotfQotCi12b2lkIFdlYldv
cmtlckJhc2U6OndvcmtlckNvbnRleHREZXN0cm95ZWQoKQotewotICAgIGRpc3BhdGNoVGFza1Rv
TWFpblRocmVhZChjcmVhdGVDYWxsYmFja1Rhc2soJndvcmtlckNvbnRleHREZXN0cm95ZWRUYXNr
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3dD
cm9zc1RocmVhZEFjY2Vzcyh0aGlzKSkpOwotfQotCi12b2lkIFdlYldvcmtlckJhc2U6Ondvcmtl
ckNvbnRleHREZXN0cm95ZWRUYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYldvcmtlckJh
c2UqIHRoaXNQdHIpCi17Ci0gICAgaWYgKHRoaXNQdHItPmNvbW1vbkNsaWVudCgpKQotICAgICAg
ICB0aGlzUHRyLT5jb21tb25DbGllbnQoKS0+d29ya2VyQ29udGV4dERlc3Ryb3llZCgpOwotICAg
IC8vIFRoZSBsaWZldGltZSBvZiB0aGlzIHByb3h5IGlzIGNvbnRyb2xsZWQgYnkgdGhlIHdvcmtl
ciBjb250ZXh0LgotICAgIGRlbGV0ZSB0aGlzUHRyOwotfQotCi0vLyBXb3JrZXJMb2FkZXJQcm94
eSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotCi12b2lkIFdlYldvcmtlckJhc2U6OnBvc3RUYXNrVG9Mb2FkZXIoUGFzc093blB0cjxT
Y3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNrKQotewotICAgIEFTU0VSVChtX2xvYWRp
bmdEb2N1bWVudC0+aXNEb2N1bWVudCgpKTsKLSAgICBtX2xvYWRpbmdEb2N1bWVudC0+cG9zdFRh
c2sodGFzayk7Ci19Ci0KLXZvaWQgV2ViV29ya2VyQmFzZTo6cG9zdFRhc2tGb3JNb2RlVG9Xb3Jr
ZXJDb250ZXh0KAotICAgIFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4g
dGFzaywgY29uc3QgU3RyaW5nJiBtb2RlKQordm9pZCBXZWJXb3JrZXJCYXNlOjpkaXNwYXRjaFRh
c2tUb01haW5UaHJlYWQoUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0
YXNrKQogewotICAgIG1fd29ya2VyVGhyZWFkLT5ydW5Mb29wKCkucG9zdFRhc2tGb3JNb2RlKHRh
c2ssIG1vZGUpOworICAgIGNhbGxPbk1haW5UaHJlYWQoaW52b2tlVGFza01ldGhvZCwgdGFzay5s
ZWFrUHRyKCkpOwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJCYXNlLmggYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJCYXNlLmgKaW5kZXggOTM1OTlmNC4uYzQzYzYzOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViV29ya2VyQmFzZS5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckJhc2UuaApAQCAtMzUsMTM4ICsz
NSwyNiBAQAogCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUg
IldlYkNvbW1vbldvcmtlckNsaWVudC5oIgotI2luY2x1ZGUgIldlYkZyYW1lQ2xpZW50LmgiCiAj
aW5jbHVkZSAiV29ya2VyTG9hZGVyUHJveHkuaCIKICNpbmNsdWRlICJXb3JrZXJPYmplY3RQcm94
eS5oIgotI2luY2x1ZGUgIldvcmtlclRocmVhZC5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRy
Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFz
cyBXb3JrZXJUaHJlYWQ7Ci19CiAKIG5hbWVzcGFjZSBXZWJLaXQgewotY2xhc3MgV2ViQXBwbGlj
YXRpb25DYWNoZUhvc3Q7Ci1jbGFzcyBXZWJBcHBsaWNhdGlvbkNhY2hlSG9zdENsaWVudDsKLWNs
YXNzIFdlYkNvbW1vbldvcmtlckNsaWVudDsKLWNsYXNzIFdlYlNlY3VyaXR5T3JpZ2luOwotY2xh
c3MgV2ViU3RyaW5nOwotY2xhc3MgV2ViVVJMOwogY2xhc3MgV2ViVmlldzsKLWNsYXNzIFdlYldv
cmtlcjsKLWNsYXNzIFdlYldvcmtlckNsaWVudDsKIAogLy8gQmFzZSBjbGFzcyBmb3IgV2ViU2hh
cmVkV29ya2VySW1wbCwgV2ViV29ya2VyQ2xpZW50SW1wbCBhbmQgKGRlZnVuY3QpIFdlYldvcmtl
ckltcGwKIC8vIGNvbnRhaW5pbmcgY29tbW9uIGludGVyZmFjZSBmb3Igc2hhcmVkIHdvcmtlcnMg
YW5kIGRlZGljYXRlZCBpbi1wcm9jIHdvcmtlcnMgaW1wbGVtZW50YXRpb24uCiAvLwogLy8gRklY
TUU6IFJlbmFtZSB0aGlzIGNsYXNzIGludG8gV2ViV29ya2VyQmFzZSwgbWVyZ2UgZXhpc3Rpbmcg
V2ViV29ya2VyQmFzZSBhbmQgV2ViU2hhcmVkV29ya2VyLgotY2xhc3MgTmV3V2ViV29ya2VyQmFz
ZSA6IHB1YmxpYyBXZWJDb3JlOjpXb3JrZXJMb2FkZXJQcm94eSB7CitjbGFzcyBXZWJXb3JrZXJC
YXNlIDogcHVibGljIFdlYkNvcmU6OldvcmtlckxvYWRlclByb3h5IHsKIHB1YmxpYzoKLSAgICB2
aXJ0dWFsIE5ld1dlYkNvbW1vbldvcmtlckNsaWVudCogbmV3Q29tbW9uQ2xpZW50KCkgPSAwOwor
ICAgIHZpcnR1YWwgV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQoKSA9IDA7CiAg
ICAgdmlydHVhbCBXZWJWaWV3KiB2aWV3KCkgY29uc3QgPSAwOwotfTsKLQotLy8gQmFzZSBjbGFz
cyBmb3IgV2ViU2hhcmVkV29ya2VySW1wbCBhbmQgV2ViV29ya2VySW1wbC4gSXQgY29udGFpbnMg
Y29tbW9uCi0vLyBjb2RlIHVzZWQgYnkgYm90aCBpbXBsZW1lbnRhdGlvbiBjbGFzc2VzLCBpbmNs
dWRpbmcgaW1wbGVtZW50YXRpb25zIG9mIHRoZQotLy8gV29ya2VyT2JqZWN0UHJveHkgYW5kIFdv
cmtlckxvYWRlclByb3h5IGludGVyZmFjZXMuCi1jbGFzcyBXZWJXb3JrZXJCYXNlIDogcHVibGlj
IFdlYkNvcmU6Oldvcmtlck9iamVjdFByb3h5Ci0gICAgICAgICAgICAgICAgICAgICwgcHVibGlj
IE5ld1dlYldvcmtlckJhc2UKLSAgICAgICAgICAgICAgICAgICAgLCBwdWJsaWMgV2ViRnJhbWVD
bGllbnQgewotcHVibGljOgotICAgIFdlYldvcmtlckJhc2UoKTsKLSAgICB2aXJ0dWFsIH5XZWJX
b3JrZXJCYXNlKCk7Ci0KLSAgICAvLyBXZWJDb21tb25Xb3JrZXJCYXNlIG1ldGhvZHM6Ci0gICAg
dmlydHVhbCB2b2lkIHBvc3RNZXNzYWdlVG9Xb3JrZXJPYmplY3QoCi0gICAgICAgIFBhc3NSZWZQ
dHI8V2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwKLSAgICAgICAgUGFzc093blB0cjxX
ZWJDb3JlOjpNZXNzYWdlUG9ydENoYW5uZWxBcnJheT4pOwotICAgIHZpcnR1YWwgdm9pZCBwb3N0
RXhjZXB0aW9uVG9Xb3JrZXJPYmplY3QoCi0gICAgICAgIGNvbnN0IFdURjo6U3RyaW5nJiwgaW50
LCBjb25zdCBXVEY6OlN0cmluZyYpOwotICAgIHZpcnR1YWwgdm9pZCBwb3N0Q29uc29sZU1lc3Nh
Z2VUb1dvcmtlck9iamVjdCgKLSAgICAgICAgV2ViQ29yZTo6TWVzc2FnZVNvdXJjZSwgV2ViQ29y
ZTo6TWVzc2FnZVR5cGUsCi0gICAgICAgIFdlYkNvcmU6Ok1lc3NhZ2VMZXZlbCwgY29uc3QgV1RG
OjpTdHJpbmcmLCBpbnQsIGNvbnN0IFdURjo6U3RyaW5nJik7Ci0gICAgdmlydHVhbCB2b2lkIHBv
c3RNZXNzYWdlVG9QYWdlSW5zcGVjdG9yKGNvbnN0IFdURjo6U3RyaW5nJik7Ci0gICAgdmlydHVh
bCB2b2lkIHVwZGF0ZUluc3BlY3RvclN0YXRlQ29va2llKGNvbnN0IFdURjo6U3RyaW5nJik7Ci0g
ICAgdmlydHVhbCB2b2lkIGNvbmZpcm1NZXNzYWdlRnJvbVdvcmtlck9iamVjdChib29sKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgcmVwb3J0UGVuZGluZ0FjdGl2aXR5KGJvb2wpOwotICAgIHZpcnR1YWwg
dm9pZCB3b3JrZXJDb250ZXh0Q2xvc2VkKCk7Ci0gICAgdmlydHVhbCB2b2lkIHdvcmtlckNvbnRl
eHREZXN0cm95ZWQoKTsKLSAgICB2aXJ0dWFsIFdlYlZpZXcqIHZpZXcoKSBjb25zdCB7IHJldHVy
biBtX3dlYlZpZXc7IH0KLQotICAgIC8vIFdlYkNvcmU6OldvcmtlckxvYWRlclByb3h5IG1ldGhv
ZHM6Ci0gICAgdmlydHVhbCB2b2lkIHBvc3RUYXNrVG9Mb2FkZXIoUGFzc093blB0cjxXZWJDb3Jl
OjpTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPik7Ci0gICAgdmlydHVhbCB2b2lkIHBvc3RU
YXNrRm9yTW9kZVRvV29ya2VyQ29udGV4dCgKLSAgICAgICAgUGFzc093blB0cjxXZWJDb3JlOjpT
Y3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiwgY29uc3QgV1RGOjpTdHJpbmcmIG1vZGUpOwot
Ci0gICAgLy8gV2ViRnJhbWVDbGllbnQgbWV0aG9kcyB0byBzdXBwb3J0IHJlc291cmNlIGxvYWRp
bmcgdGhydSB0aGUgJ3NoYWRvdyBwYWdlJy4KLSAgICB2aXJ0dWFsIHZvaWQgZGlkQ3JlYXRlRGF0
YVNvdXJjZShXZWJGcmFtZSosIFdlYkRhdGFTb3VyY2UqKTsKLSAgICB2aXJ0dWFsIFdlYkFwcGxp
Y2F0aW9uQ2FjaGVIb3N0KiBjcmVhdGVBcHBsaWNhdGlvbkNhY2hlSG9zdChXZWJGcmFtZSosIFdl
YkFwcGxpY2F0aW9uQ2FjaGVIb3N0Q2xpZW50Kik7CiAKICAgICAvLyBFeGVjdXRlcyB0aGUgZ2l2
ZW4gdGFzayBvbiB0aGUgbWFpbiB0aHJlYWQuCiAgICAgc3RhdGljIHZvaWQgZGlzcGF0Y2hUYXNr
VG9NYWluVGhyZWFkKFBhc3NPd25QdHI8V2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6
VGFzaz4pOwotCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCBXZWJDb21tb25Xb3JrZXJDbGllbnQq
IGNvbW1vbkNsaWVudCgpID0gMDsKLSAgICB2aXJ0dWFsIFdlYldvcmtlckNsaWVudCogY2xpZW50
KCkgPSAwOwotCi0gICAgdm9pZCBzZXRXb3JrZXJUaHJlYWQoUGFzc1JlZlB0cjxXZWJDb3JlOjpX
b3JrZXJUaHJlYWQ+IHRocmVhZCkgeyBtX3dvcmtlclRocmVhZCA9IHRocmVhZDsgfQotICAgIFdl
YkNvcmU6OldvcmtlclRocmVhZCogd29ya2VyVGhyZWFkKCkgeyByZXR1cm4gbV93b3JrZXJUaHJl
YWQuZ2V0KCk7IH0KLQotICAgIC8vIFNodXRzIGRvd24gdGhlIHdvcmtlciB0aHJlYWQuCi0gICAg
dm9pZCBzdG9wV29ya2VyVGhyZWFkKCk7Ci0KLSAgICAvLyBDcmVhdGVzIHRoZSBzaGFkb3cgbG9h
ZGVyIHVzZWQgZm9yIHdvcmtlciBuZXR3b3JrIHJlcXVlc3RzLgotICAgIHZvaWQgaW5pdGlhbGl6
ZUxvYWRlcihjb25zdCBXZWJVUkwmKTsKLQotcHJpdmF0ZToKLSAgICAvLyBGdW5jdGlvbiB1c2Vk
IHRvIGludm9rZSB0YXNrcyBvbiB0aGUgbWFpbiB0aHJlYWQuCi0gICAgc3RhdGljIHZvaWQgaW52
b2tlVGFza01ldGhvZCh2b2lkKik7Ci0KLSAgICAvLyBUYXNrcyB0aGF0IGFyZSBydW4gb24gdGhl
IG1haW4gdGhyZWFkLgotICAgIHN0YXRpYyB2b2lkIHBvc3RNZXNzYWdlVGFzaygKLSAgICAgICAg
V2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKLSAgICAgICAgV2ViV29y
a2VyQmFzZSogdGhpc1B0ciwKLSAgICAgICAgV1RGOjpTdHJpbmcgbWVzc2FnZSwKLSAgICAgICAg
UGFzc093blB0cjxXZWJDb3JlOjpNZXNzYWdlUG9ydENoYW5uZWxBcnJheT4gY2hhbm5lbHMpOwot
ICAgIHN0YXRpYyB2b2lkIHBvc3RFeGNlcHRpb25UYXNrKAotICAgICAgICBXZWJDb3JlOjpTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LAotICAgICAgICBXZWJXb3JrZXJCYXNlKiB0aGlz
UHRyLAotICAgICAgICBjb25zdCBXVEY6OlN0cmluZyYgbWVzc2FnZSwKLSAgICAgICAgaW50IGxp
bmVOdW1iZXIsCi0gICAgICAgIGNvbnN0IFdURjo6U3RyaW5nJiBzb3VyY2VVUkwpOwotICAgIHN0
YXRpYyB2b2lkIHBvc3RDb25zb2xlTWVzc2FnZVRhc2soCi0gICAgICAgIFdlYkNvcmU6OlNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCi0gICAgICAgIFdlYldvcmtlckJhc2UqIHRoaXNQ
dHIsCi0gICAgICAgIGludCBzb3VyY2UsCi0gICAgICAgIGludCB0eXBlLAotICAgICAgICBpbnQg
bGV2ZWwsCi0gICAgICAgIGNvbnN0IFdURjo6U3RyaW5nJiBtZXNzYWdlLAotICAgICAgICBpbnQg
bGluZU51bWJlciwKLSAgICAgICAgY29uc3QgV1RGOjpTdHJpbmcmIHNvdXJjZVVSTCk7Ci0gICAg
c3RhdGljIHZvaWQgcG9zdE1lc3NhZ2VUb1BhZ2VJbnNwZWN0b3JUYXNrKFdlYkNvcmU6OlNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJXb3JrZXJCYXNlKiwgY29uc3QgV1RGOjpTdHJpbmcmKTsK
LSAgICBzdGF0aWMgdm9pZCB1cGRhdGVJbnNwZWN0b3JTdGF0ZUNvb2tpZVRhc2soV2ViQ29yZTo6
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYldvcmtlckJhc2UqIHRoaXNQdHIsIGNvbnN0IFdU
Rjo6U3RyaW5nJiBjb29raWUpOwotICAgIHN0YXRpYyB2b2lkIGNvbmZpcm1NZXNzYWdlVGFzaygK
LSAgICAgICAgV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKLSAgICAg
ICAgV2ViV29ya2VyQmFzZSogdGhpc1B0ciwKLSAgICAgICAgYm9vbCBoYXNQZW5kaW5nQWN0aXZp
dHkpOwotICAgIHN0YXRpYyB2b2lkIHJlcG9ydFBlbmRpbmdBY3Rpdml0eVRhc2soCi0gICAgICAg
IFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCi0gICAgICAgIFdlYldv
cmtlckJhc2UqIHRoaXNQdHIsCi0gICAgICAgIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KTsKLSAg
ICBzdGF0aWMgdm9pZCB3b3JrZXJDb250ZXh0Q2xvc2VkVGFzaygKLSAgICAgICAgV2ViQ29yZTo6
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKLSAgICAgICAgV2ViV29ya2VyQmFzZSog
dGhpc1B0cik7Ci0gICAgc3RhdGljIHZvaWQgd29ya2VyQ29udGV4dERlc3Ryb3llZFRhc2soCi0g
ICAgICAgIFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCi0gICAgICAg
IFdlYldvcmtlckJhc2UqIHRoaXNQdHIpOwotCi0gICAgLy8gJ3NoYWRvdyBwYWdlJyAtIGNyZWF0
ZWQgdG8gcHJveHkgbG9hZGluZyByZXF1ZXN0cyBmcm9tIHRoZSB3b3JrZXIuCi0gICAgUmVmUHRy
PFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ+IG1fbG9hZGluZ0RvY3VtZW50OwotICAg
IFdlYlZpZXcqIG1fd2ViVmlldzsKLSAgICBib29sIG1fYXNrZWRUb1Rlcm1pbmF0ZTsKLQotICAg
IFJlZlB0cjxXZWJDb3JlOjpXb3JrZXJUaHJlYWQ+IG1fd29ya2VyVGhyZWFkOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJXb3JrZXJDbGllbnRJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YldvcmtlckNsaWVudEltcGwuY3BwCmluZGV4IDViOWYzMjAuLjUwOTBhZmYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckNsaWVudEltcGwuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckNsaWVudEltcGwuY3BwCkBAIC02
Myw3ICs2Myw2IEBACiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViVVJMLmgiCiAjaW5jbHVkZSAiV2Vi
Vmlld0ltcGwuaCIKICNpbmNsdWRlICJXZWJXb3JrZXIuaCIKLSNpbmNsdWRlICJXZWJXb3JrZXJJ
bXBsLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJDbGllbnRJbXBsLmggYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJDbGllbnRJbXBsLmgKaW5kZXggNzAwNmE5NC4uNTE4OWFk
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViV29ya2VyQ2xpZW50
SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckNsaWVudElt
cGwuaApAQCAtNTgsOCArNTgsOCBAQCBjbGFzcyBXZWJGcmFtZUltcGw7CiAvLyBJbiBlc3NlbmNl
LCB0aGlzIGNsYXNzIHdyYXBzIFdvcmtlck1lc3NhZ2luZ1Byb3h5LgogY2xhc3MgV2ViV29ya2Vy
Q2xpZW50SW1wbCA6IHB1YmxpYyBXZWJDb3JlOjpXb3JrZXJDb250ZXh0UHJveHkKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLCBwdWJsaWMgV2ViQ29yZTo6V29ya2VyT2JqZWN0UHJveHkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgLCBwdWJsaWMgTmV3V2ViV29ya2VyQmFzZQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBOZXdXZWJDb21tb25Xb3JrZXJDbGllbnQgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBXZWJXb3JrZXJCYXNlCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICwgcHVibGljIFdlYkNvbW1vbldvcmtlckNsaWVudCB7CiBwdWJs
aWM6CiAgICAgLy8gV2ViQ29yZTo6V29ya2VyQ29udGV4dFByb3h5IEZhY3RvcnkuCiAgICAgc3Rh
dGljIFdlYkNvcmU6OldvcmtlckNvbnRleHRQcm94eSogY3JlYXRlV29ya2VyQ29udGV4dFByb3h5
KFdlYkNvcmU6OldvcmtlciopOwpAQCAtMTA3LDcgKzEwNyw3IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgV2ViRmlsZVN5c3RlbUNhbGxiYWNrcyopOwogCiAgICAg
Ly8gV2ViQ29tbWVudFdvcmtlckJhc2UgbWV0aG9kczoKLSAgICB2aXJ0dWFsIE5ld1dlYkNvbW1v
bldvcmtlckNsaWVudCogbmV3Q29tbW9uQ2xpZW50KCkgeyByZXR1cm4gdGhpczsgfQorICAgIHZp
cnR1YWwgV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQoKSB7IHJldHVybiB0aGlz
OyB9CiAgICAgdmlydHVhbCBXZWJWaWV3KiB2aWV3KCkgY29uc3Q7CiAKIHByaXZhdGU6CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJJbXBsLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckltcGwuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBkY2JmZWVlLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYldvcmtlckltcGwuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTYzICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0g
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViV29ya2VySW1wbC5oIgotCi0jaW5j
bHVkZSAiQ3Jvc3NUaHJlYWRUYXNrLmgiCi0jaW5jbHVkZSAiRGVkaWNhdGVkV29ya2VyQ29udGV4
dC5oIgotI2luY2x1ZGUgIkRlZGljYXRlZFdvcmtlclRocmVhZC5oIgotI2luY2x1ZGUgIktVUkwu
aCIKLSNpbmNsdWRlICJNZXNzYWdlRXZlbnQuaCIKLSNpbmNsdWRlICJNZXNzYWdlUG9ydC5oIgot
I2luY2x1ZGUgIk1lc3NhZ2VQb3J0Q2hhbm5lbC5oIgotI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQuaCIKLSNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgotI2luY2x1ZGUgIlNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZS5oIgotI2luY2x1ZGUgIlN1YnN0aXR1dGVEYXRhLmgiCi0jaW5jbHVk
ZSA8d3RmL093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KLQotI2luY2x1ZGUg
IlBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmgiCi0jaW5jbHVkZSAiV2ViTWVzc2FnZVBvcnRD
aGFubmVsLmgiCi0jaW5jbHVkZSAicGxhdGZvcm0vV2ViU3RyaW5nLmgiCi0jaW5jbHVkZSAicGxh
dGZvcm0vV2ViVVJMLmgiCi0jaW5jbHVkZSAiV2ViV29ya2VyQ2xpZW50LmgiCi0KLXVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotI2lmIEVOQUJMRShXT1JL
RVJTKQotCi1XZWJXb3JrZXIqIFdlYldvcmtlcjo6Y3JlYXRlKFdlYldvcmtlckNsaWVudCogY2xp
ZW50KQotewotICAgIHJldHVybiBuZXcgV2ViV29ya2VySW1wbChjbGllbnQpOwotfQotCi0KLVdl
YldvcmtlckltcGw6OldlYldvcmtlckltcGwoV2ViV29ya2VyQ2xpZW50KiBjbGllbnQpCi0gICAg
OiBtX2NsaWVudChjbGllbnQpCi17Ci19Ci0KLVdlYldvcmtlckltcGw6On5XZWJXb3JrZXJJbXBs
KCkKLXsKLX0KLQotTmV3V2ViQ29tbW9uV29ya2VyQ2xpZW50KiBXZWJXb3JrZXJJbXBsOjpuZXdD
b21tb25DbGllbnQoKQotewotICAgIHJldHVybiBtX2NsaWVudDsKLX0KLQotV2ViQ29tbW9uV29y
a2VyQ2xpZW50KiBXZWJXb3JrZXJJbXBsOjpjb21tb25DbGllbnQoKQotewotICAgIHJldHVybiBt
X2NsaWVudDsKLX0KLQotdm9pZCBXZWJXb3JrZXJJbXBsOjpwb3N0TWVzc2FnZVRvV29ya2VyQ29u
dGV4dFRhc2soV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYldvcmtlcklt
cGwqIHRoaXNQdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFy
cmF5PiBjaGFubmVscykKLXsKLSAgICBBU1NFUlQoY29udGV4dC0+aXNXb3JrZXJDb250ZXh0KCkp
OwotICAgIERlZGljYXRlZFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQgPQotICAgICAgICBz
dGF0aWNfY2FzdDxEZWRpY2F0ZWRXb3JrZXJDb250ZXh0Kj4oY29udGV4dCk7Ci0KLSAgICBPd25Q
dHI8TWVzc2FnZVBvcnRBcnJheT4gcG9ydHMgPQotICAgICAgICBNZXNzYWdlUG9ydDo6ZW50YW5n
bGVQb3J0cygqY29udGV4dCwgY2hhbm5lbHMpOwotICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IHNlcmlhbGl6ZWRNZXNzYWdlID0KLSAgICAgICAgU2VyaWFsaXplZFNjcmlwdFZhbHVl
OjpjcmVhdGVGcm9tV2lyZShtZXNzYWdlKTsKLSAgICB3b3JrZXJDb250ZXh0LT5kaXNwYXRjaEV2
ZW50KE1lc3NhZ2VFdmVudDo6Y3JlYXRlKAotICAgICAgICBwb3J0cy5yZWxlYXNlKCksIHNlcmlh
bGl6ZWRNZXNzYWdlLnJlbGVhc2UoKSkpOwotICAgIHRoaXNQdHItPmNvbmZpcm1NZXNzYWdlRnJv
bVdvcmtlck9iamVjdCh3b3JrZXJDb250ZXh0LT5oYXNQZW5kaW5nQWN0aXZpdHkoKSk7Ci19Ci0K
LS8vIFdlYldvcmtlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXZvaWQgV2ViV29ya2VySW1wbDo6c3RhcnRXb3Jr
ZXJDb250ZXh0KGNvbnN0IFdlYlVSTCYgc2NyaXB0VXJsLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgV2ViU3RyaW5nJiB1c2VyQWdlbnQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJTdHJpbmcmIHNvdXJjZUNvZGUp
Ci17Ci0gICAgaW5pdGlhbGl6ZUxvYWRlcihzY3JpcHRVcmwpOwotICAgIHNldFdvcmtlclRocmVh
ZChEZWRpY2F0ZWRXb3JrZXJUaHJlYWQ6OmNyZWF0ZShzY3JpcHRVcmwsIHVzZXJBZ2VudCwgc291
cmNlQ29kZSwgKnRoaXMsICp0aGlzLCBEb250UGF1c2VXb3JrZXJDb250ZXh0T25TdGFydCkpOwot
ICAgIC8vIFdvcmtlciBpbml0aWFsaXphdGlvbiBtZWFucyBhIHBlbmRpbmcgYWN0aXZpdHkuCi0g
ICAgcmVwb3J0UGVuZGluZ0FjdGl2aXR5KHRydWUpOwotICAgIHdvcmtlclRocmVhZCgpLT5zdGFy
dCgpOwotfQotCi12b2lkIFdlYldvcmtlckltcGw6OnRlcm1pbmF0ZVdvcmtlckNvbnRleHQoKQot
ewotICAgIHN0b3BXb3JrZXJUaHJlYWQoKTsKLX0KLQotdm9pZCBXZWJXb3JrZXJJbXBsOjpwb3N0
TWVzc2FnZVRvV29ya2VyQ29udGV4dChjb25zdCBXZWJTdHJpbmcmIG1lc3NhZ2UsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYk1lc3NhZ2VQ
b3J0Q2hhbm5lbEFycmF5JiB3ZWJDaGFubmVscykKLXsKLSAgICBPd25QdHI8TWVzc2FnZVBvcnRD
aGFubmVsQXJyYXk+IGNoYW5uZWxzOwotICAgIGlmICh3ZWJDaGFubmVscy5zaXplKCkpIHsKLSAg
ICAgICAgY2hhbm5lbHMgPSBhZG9wdFB0cihuZXcgTWVzc2FnZVBvcnRDaGFubmVsQXJyYXkod2Vi
Q2hhbm5lbHMuc2l6ZSgpKSk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd2ViQ2hh
bm5lbHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIFJlZlB0cjxQbGF0Zm9ybU1lc3NhZ2VQ
b3J0Q2hhbm5lbD4gcGxhdGZvcm1fY2hhbm5lbCA9Ci0gICAgICAgICAgICAgICAgUGxhdGZvcm1N
ZXNzYWdlUG9ydENoYW5uZWw6OmNyZWF0ZSh3ZWJDaGFubmVsc1tpXSk7Ci0gICAgICAgICAgICB3
ZWJDaGFubmVsc1tpXS0+c2V0Q2xpZW50KHBsYXRmb3JtX2NoYW5uZWwuZ2V0KCkpOwotICAgICAg
ICAgICAgKCpjaGFubmVscylbaV0gPSBNZXNzYWdlUG9ydENoYW5uZWw6OmNyZWF0ZShwbGF0Zm9y
bV9jaGFubmVsKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHdvcmtlclRocmVhZCgpLT5ydW5M
b29wKCkucG9zdFRhc2soCi0gICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmcG9zdE1lc3NhZ2VU
b1dvcmtlckNvbnRleHRUYXNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3dDcm9z
c1RocmVhZEFjY2Vzcyh0aGlzKSwgU3RyaW5nKG1lc3NhZ2UpLCBjaGFubmVscy5yZWxlYXNlKCkp
KTsKLX0KLQotdm9pZCBXZWJXb3JrZXJJbXBsOjp3b3JrZXJPYmplY3REZXN0cm95ZWQoKQotewot
ICAgIC8vIFdvcmtlciBvYmplY3QgaW4gdGhlIHJlbmRlcmVyIHdhcyBkZXN0cm95ZWQsIHBlcmhh
cHMgYSByZXN1bHQgb2YgR0MuCi0gICAgLy8gRm9yIHVzLCBpdCdzIGEgc2lnbmFsIHRvIHN0YXJ0
IHRlcm1pbmF0aW5nIHRoZSBXb3JrZXJDb250ZXh0IHRvby4KLSAgICAvLyBGSVhNRTogd2hlbiAn
a2lsbCBhIHdvcmtlcicgaHRtbDUgc3BlYyBhbGdvcml0aG0gaXMgaW1wbGVtZW50ZWQsIGl0Ci0g
ICAgLy8gc2hvdWxkIGJlIHVzZWQgaGVyZSBpbnN0ZWFkIG9mICd0ZXJtaW5hdGUgYSB3b3JrZXIn
LgotICAgIHRlcm1pbmF0ZVdvcmtlckNvbnRleHQoKTsKLX0KLQotdm9pZCBXZWJXb3JrZXJJbXBs
OjpjbGllbnREZXN0cm95ZWQoKQotewotICAgIG1fY2xpZW50ID0gMDsKLX0KLQotI2Vsc2UKLQot
V2ViV29ya2VyKiBXZWJXb3JrZXI6OmNyZWF0ZShXZWJXb3JrZXJDbGllbnQqIGNsaWVudCkKLXsK
LSAgICByZXR1cm4gMDsKLX0KLQotI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQotCi19IC8vIG5h
bWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YldvcmtlckltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckltcGwu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGYwNTJhNy4uMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJJbXBsLmgKKysrIC9kZXYvbnVsbApA
QCAtMSw4NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0g
KiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0g
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAot
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2lmbmRlZiBXZWJXb3JrZXJJbXBsX2gKLSNkZWZpbmUgV2ViV29ya2Vy
SW1wbF9oCi0KLSNpbmNsdWRlICJXZWJXb3JrZXIuaCIKLQotI2lmIEVOQUJMRShXT1JLRVJTKQot
Ci0jaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgotCi0jaW5jbHVkZSAiV2ViV29y
a2VyQmFzZS5oIgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotLy8gVGhpcyBjbGFzcyBpcyB1c2Vk
IGJ5IHRoZSB3b3JrZXIgcHJvY2VzcyBjb2RlIHRvIHRhbGsgdG8gdGhlIFdlYkNvcmU6Oldvcmtl
cgotLy8gaW1wbGVtZW50YXRpb24uICBJdCBjYW4ndCB1c2UgaXQgZGlyZWN0bHkgc2luY2UgaXQg
dXNlcyBXZWJLaXQgdHlwZXMsIHNvIHRoaXMKLS8vIGNsYXNzIGNvbnZlcnRzIHRoZSBkYXRhIHR5
cGVzLiAgV2hlbiB0aGUgV2ViQ29yZTo6V29ya2VyIG9iamVjdCB3YW50cyB0byBjYWxsCi0vLyBX
ZWJDb3JlOjpXb3JrZXJPYmplY3RQcm94eSwgdGhpcyBjbGFzcyB3aWxsIGNvbnZlciB0byBDaHJv
bWUgZGF0YSB0eXBlcyBmaXJzdAotLy8gYW5kIHRoZW4gY2FsbCB0aGUgc3VwcGxpZWQgV2ViV29y
a2VyQ2xpZW50LgotY2xhc3MgV2ViV29ya2VySW1wbCA6IHB1YmxpYyBXZWJXb3JrZXJCYXNlLCBw
dWJsaWMgV2ViV29ya2VyIHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBXZWJXb3JrZXJJbXBsKFdl
YldvcmtlckNsaWVudCogY2xpZW50KTsKLQotICAgIC8vIFdlYldvcmtlciBtZXRob2RzOgotICAg
IHZpcnR1YWwgdm9pZCBzdGFydFdvcmtlckNvbnRleHQoY29uc3QgV2ViVVJMJiwgY29uc3QgV2Vi
U3RyaW5nJiwgY29uc3QgV2ViU3RyaW5nJik7Ci0gICAgdmlydHVhbCB2b2lkIHRlcm1pbmF0ZVdv
cmtlckNvbnRleHQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcG9zdE1lc3NhZ2VUb1dvcmtlckNvbnRl
eHQoY29uc3QgV2ViU3RyaW5nJiwgY29uc3QgV2ViTWVzc2FnZVBvcnRDaGFubmVsQXJyYXkmKTsK
LSAgICB2aXJ0dWFsIHZvaWQgd29ya2VyT2JqZWN0RGVzdHJveWVkKCk7Ci0gICAgdmlydHVhbCB2
b2lkIGNsaWVudERlc3Ryb3llZCgpOwotCi0gICAgLy8gV2ViV29ya2VyQmFzZSBtZXRob2RzOgot
ICAgIHZpcnR1YWwgV2ViV29ya2VyQ2xpZW50KiBjbGllbnQoKSB7IHJldHVybiBtX2NsaWVudDsg
fQotICAgIHZpcnR1YWwgV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQoKTsKLQot
ICAgIC8vIE5ld1dlYldvcmtlckJhc2UgbWV0aG9kczoKLSAgICB2aXJ0dWFsIE5ld1dlYkNvbW1v
bldvcmtlckNsaWVudCogbmV3Q29tbW9uQ2xpZW50KCk7Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVh
bCB+V2ViV29ya2VySW1wbCgpOwotCi0gICAgLy8gVGFza3MgdGhhdCBhcmUgcnVuIG9uIHRoZSB3
b3JrZXIgdGhyZWFkLgotICAgIHN0YXRpYyB2b2lkIHBvc3RNZXNzYWdlVG9Xb3JrZXJDb250ZXh0
VGFzaygKLSAgICAgICAgV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwK
LSAgICAgICAgV2ViV29ya2VySW1wbCogdGhpc1B0ciwKLSAgICAgICAgY29uc3QgV1RGOjpTdHJp
bmcmIG1lc3NhZ2UsCi0gICAgICAgIFBhc3NPd25QdHI8V2ViQ29yZTo6TWVzc2FnZVBvcnRDaGFu
bmVsQXJyYXk+IGNoYW5uZWxzKTsKLQotICAgIFdlYldvcmtlckNsaWVudCogbV9jbGllbnQ7Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQot
Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckZp
bGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZS5jcHAKaW5kZXggNTIzZWY3NS4uOGNlNWU2
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyRmlsZVN5c3Rl
bUNhbGxiYWNrc0JyaWRnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29y
a2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZS5jcHAKQEAgLTE1Niw3ICsxNTYsNyBAQCB2b2lk
IFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OnN0b3AoKQogICAgIH0KIH0KIAotdm9p
ZCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpwb3N0T3BlbkZpbGVTeXN0ZW1Ub01h
aW5UaHJlYWQoTmV3V2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQsIFdlYkZpbGVT
eXN0ZW06OlR5cGUgdHlwZSwgbG9uZyBsb25nIHNpemUsIGJvb2wgY3JlYXRlLCBjb25zdCBTdHJp
bmcmIG1vZGUpCit2b2lkIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OnBvc3RPcGVu
RmlsZVN5c3RlbVRvTWFpblRocmVhZChXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1vbkNsaWVu
dCwgV2ViRmlsZVN5c3RlbTo6VHlwZSB0eXBlLCBsb25nIGxvbmcgc2l6ZSwgYm9vbCBjcmVhdGUs
IGNvbnN0IFN0cmluZyYgbW9kZSkKIHsKICAgICBkaXNwYXRjaFRhc2tUb01haW5UaHJlYWQoCiAg
ICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmb3BlbkZpbGVTeXN0ZW1Pbk1haW5UaHJlYWQsCkBA
IC0yNTEsNyArMjUxLDcgQEAgdm9pZCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpw
b3N0UmVhZERpcmVjdG9yeVRvTWFpblRocmVhZChXZWJGaWxlU3lzdGUKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcyksIG1vZGUpKTsKIH0KIAot
dm9pZCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpvcGVuRmlsZVN5c3RlbU9uTWFp
blRocmVhZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgTmV3V2ViQ29tbW9uV29ya2VyQ2xpZW50
KiBjb21tb25DbGllbnQsIFdlYkZpbGVTeXN0ZW06OlR5cGUgdHlwZSwgbG9uZyBsb25nIHNpemUs
IGJvb2wgY3JlYXRlLCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlKiBicmlkZ2UsIGNv
bnN0IFN0cmluZyYgbW9kZSkKK3ZvaWQgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6
b3BlbkZpbGVTeXN0ZW1Pbk1haW5UaHJlYWQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYkNv
bW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50LCBXZWJGaWxlU3lzdGVtOjpUeXBlIHR5cGUs
IGxvbmcgbG9uZyBzaXplLCBib29sIGNyZWF0ZSwgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0Jy
aWRnZSogYnJpZGdlLCBjb25zdCBTdHJpbmcmIG1vZGUpCiB7CiAgICAgaWYgKCFjb21tb25DbGll
bnQpCiAgICAgICAgIGJyaWRnZS0+ZGlkRmFpbE9uTWFpblRocmVhZChXZWJGaWxlRXJyb3JBYm9y
dCwgbW9kZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJG
aWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
b3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlLmgKaW5kZXggOGFlN2ViMy4uOWM0NGNiMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyRmlsZVN5c3RlbUNh
bGxiYWNrc0JyaWRnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckZp
bGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UuaApAQCAtNTEsNyArNTEsNyBAQCBuYW1lc3BhY2UgV2Vi
S2l0IHsKIAogY2xhc3MgQXN5bmNGaWxlU3lzdGVtOwogY2xhc3MgTWFpblRocmVhZEZpbGVTeXN0
ZW1DYWxsYmFja3M7Ci1jbGFzcyBOZXdXZWJDb21tb25Xb3JrZXJDbGllbnQ7CitjbGFzcyBXZWJD
b21tb25Xb3JrZXJDbGllbnQ7CiBjbGFzcyBUaHJlYWRhYmxlQ2FsbGJhY2tzQnJpZGdlV3JhcHBl
cjsKIGNsYXNzIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3M7CiBzdHJ1Y3QgV2ViRmlsZUluZm87CkBA
IC04Nyw3ICs4Nyw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICAvLyBNZXRob2RzIHRoYXQgY3Jl
YXRlIGFuIGluc3RhbmNlIGFuZCBwb3N0IGFuIGluaXRpYWwgcmVxdWVzdCB0YXNrIHRvIHRoZSBt
YWluIHRocmVhZC4gVGhleSBtdXN0IGJlIGNhbGxlZCBvbiB0aGUgd29ya2VyIHRocmVhZC4KLSAg
ICB2b2lkIHBvc3RPcGVuRmlsZVN5c3RlbVRvTWFpblRocmVhZChOZXdXZWJDb21tb25Xb3JrZXJD
bGllbnQqLCBXZWJGaWxlU3lzdGVtOjpUeXBlLCBsb25nIGxvbmcgc2l6ZSwgYm9vbCBjcmVhdGUs
IGNvbnN0IFN0cmluZyYgbW9kZSk7CisgICAgdm9pZCBwb3N0T3BlbkZpbGVTeXN0ZW1Ub01haW5U
aHJlYWQoV2ViQ29tbW9uV29ya2VyQ2xpZW50KiwgV2ViRmlsZVN5c3RlbTo6VHlwZSwgbG9uZyBs
b25nIHNpemUsIGJvb2wgY3JlYXRlLCBjb25zdCBTdHJpbmcmIG1vZGUpOwogICAgIHZvaWQgcG9z
dE1vdmVUb01haW5UaHJlYWQoV2ViRmlsZVN5c3RlbSosIGNvbnN0IFdlYkNvcmU6OktVUkwmIHNy
Y1BhdGgsIGNvbnN0IFdlYkNvcmU6OktVUkwmIGRlc3RQYXRoLCBjb25zdCBTdHJpbmcmIG1vZGUp
OwogICAgIHZvaWQgcG9zdENvcHlUb01haW5UaHJlYWQoV2ViRmlsZVN5c3RlbSosIGNvbnN0IFdl
YkNvcmU6OktVUkwmIHNyY1BhdGgsIGNvbnN0IFdlYkNvcmU6OktVUkwmIGRlc3RQYXRoLCBjb25z
dCBTdHJpbmcmIG1vZGUpOwogICAgIHZvaWQgcG9zdFJlbW92ZVRvTWFpblRocmVhZChXZWJGaWxl
U3lzdGVtKiwgY29uc3QgV2ViQ29yZTo6S1VSTCYgcGF0aCwgY29uc3QgU3RyaW5nJiBtb2RlKTsK
QEAgLTExMCw3ICsxMTAsNyBAQCBwcml2YXRlOgogICAgIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFj
a3NCcmlkZ2UoV2ViQ29yZTo6V29ya2VyTG9hZGVyUHJveHkqLCBXZWJDb3JlOjpTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgV2ViRmlsZVN5c3RlbUNhbGxiYWNrcyopOwogCiAgICAgLy8gTWV0aG9k
cyB0aGF0IGFyZSB0byBiZSBjYWxsZWQgb24gdGhlIG1haW4gdGhyZWFkLgotICAgIHN0YXRpYyB2
b2lkIG9wZW5GaWxlU3lzdGVtT25NYWluVGhyZWFkKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBOZXdXZWJDb21tb25Xb3JrZXJDbGllbnQqLCBXZWJGaWxlU3lzdGVtOjpUeXBlLCBs
b25nIGxvbmcgc2l6ZSwgYm9vbCBjcmVhdGUsIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlk
Z2UqLCBjb25zdCBTdHJpbmcmIG1vZGUpOworICAgIHN0YXRpYyB2b2lkIG9wZW5GaWxlU3lzdGVt
T25NYWluVGhyZWFkKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJDb21tb25X
b3JrZXJDbGllbnQqLCBXZWJGaWxlU3lzdGVtOjpUeXBlLCBsb25nIGxvbmcgc2l6ZSwgYm9vbCBj
cmVhdGUsIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UqLCBjb25zdCBTdHJpbmcmIG1v
ZGUpOwogICAgIHN0YXRpYyB2b2lkIG1vdmVPbk1haW5UaHJlYWQoV2ViQ29yZTo6U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIFdlYkZpbGVTeXN0ZW0qLCBjb25zdCBXZWJDb3JlOjpLVVJMJiBzcmNQ
YXRoLCBjb25zdCBXZWJDb3JlOjpLVVJMJiBkZXN0UGF0aCwgV29ya2VyRmlsZVN5c3RlbUNhbGxi
YWNrc0JyaWRnZSosIGNvbnN0IFN0cmluZyYgbW9kZSk7CiAgICAgc3RhdGljIHZvaWQgY29weU9u
TWFpblRocmVhZChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViRmlsZVN5c3Rl
bSosIGNvbnN0IFdlYkNvcmU6OktVUkwmIHNyY1BhdGgsIGNvbnN0IFdlYkNvcmU6OktVUkwmIGRl
c3RQYXRoLCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlKiwgY29uc3QgU3RyaW5nJiBt
b2RlKTsKICAgICBzdGF0aWMgdm9pZCByZW1vdmVPbk1haW5UaHJlYWQoV2ViQ29yZTo6U2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFdlYkZpbGVTeXN0ZW0qLCBjb25zdCBXZWJDb3JlOjpLVVJMJiBw
YXRoLCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlKiwgY29uc3QgU3RyaW5nJiBtb2Rl
KTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA5
YWMwOThjLi45Y2FhZTE3IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTEtMTItMjIgIERtaXRyeSBMb21vdiAgPGRz
bG9tb3ZAZ29vZ2xlLmNvbT4KKworICAgICAgICBbV2ViV29ya2Vyc11bQ2hyb21pdW1dIFJlbW92
ZSByZW1haW5zIG9mIGNyb3NzLXByb2Nlc3MgZGVkaWNhdGVkIHdvcmtlciBpbXBsZW1lbnRhdGlv
bi4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2NTA5
CisgICAgICAgIEp1c3QgcmVuYW1lcywgbWVyZ2VzIGFuZCByZW1vdmFsIG9mIGRlYWQgY29kZS4g
SGVyZSBhcmUgdGhlIGxpc3Qgb2YgcmVuYW1lczoKKyAgICAgICAgICAtIFdlYkNvbW1vbldvcmtl
ckNsaWVudCBtZXJnZWQgd2l0aCBXZWJXb3JrZXJDbGllbnQgYW5kIHJlbmFtZWQgdG8gV2ViU2hh
cmVkV29ya2VyQ2xpZW50CisgICAgICAgICAgLSBOZXdXZWJDb21tb25Xb3JrZXJDbGllbnQgcmVu
YW1lZCB0byBXZWJDb21tb25Xb3JrZXJDbGllbnQKKyAgICAgICAgICAtIFdlYldvcmtlckJhc2Ug
bWVyZ2VkIGludG8gV2ViU2hhcmVkV29ya2VySW1wbAorICAgICAgICAgIC0gTmV3V2ViV29ya2Vy
QmFzZSByZW5hbWVkIGludG8gV2ViV29ya2VyQmFzZQorIAorICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RX
ZWJXb3JrZXIuaDoKKyAgICAgICAgKFRlc3RXZWJXb3JrZXI6OmNyZWF0ZVdvcmtlcik6CisgICAg
ICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuY3BwOgorICAgICAgICAo
V2ViVmlld0hvc3Q6OmNyZWF0ZVdvcmtlcik6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vV2ViVmlld0hvc3QuaDoKKwogMjAxMS0xMi0yMiAgQWRhbSBSb2JlbiAgPGFyb2JlbkBh
cHBsZS5jb20+CiAKICAgICAgICAgU25vdyBMZW9wYXJkIHRlc3QgZml4CmRpZmYgLS1naXQgYS9U
b29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0V2ViV29ya2VyLmggYi9Ub29scy9EdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0V2ViV29ya2VyLmgKaW5kZXggNzFiZmZjZS4uYWQ4MmE4
NyAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFdlYldvcmtl
ci5oCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RXZWJXb3JrZXIuaApA
QCAtMzIsOCArMzIsOCBAQAogI2RlZmluZSBUZXN0V2ViV29ya2VyX2gKIAogI2luY2x1ZGUgIldl
Yk1lc3NhZ2VQb3J0Q2hhbm5lbC5oIgorI2luY2x1ZGUgIldlYlNoYXJlZFdvcmtlckNsaWVudC5o
IgogI2luY2x1ZGUgIldlYldvcmtlci5oIgotI2luY2x1ZGUgIldlYldvcmtlckNsaWVudC5oIgog
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtNDMs
NyArNDMsNyBAQCBjbGFzcyBXZWJVUkw7CiB9CiAKIGNsYXNzIFRlc3RXZWJXb3JrZXIgOiBwdWJs
aWMgV2ViS2l0OjpXZWJXb3JrZXIsCi0gICAgICAgICAgICAgICAgICAgICAgcHVibGljIFdlYktp
dDo6V2ViV29ya2VyQ2xpZW50LAorICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBXZWJLaXQ6
OldlYlNoYXJlZFdvcmtlckNsaWVudCwKICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgV1RG
OjpSZWZDb3VudGVkPFRlc3RXZWJXb3JrZXI+IHsKIHB1YmxpYzoKICAgICBUZXN0V2ViV29ya2Vy
KCkKQEAgLTgwLDcgKzgwLDcgQEAgcHVibGljOgogICAgICAgICAvLyBSZWxlYXNlcyB0aGUgcmVm
ZXJlbmNlIGhlbGQgZm9yIHdvcmtlciBjb250ZXh0IG9iamVjdC4KICAgICAgICAgZGVyZWYoKTsK
ICAgICB9Ci0gICAgdmlydHVhbCBXZWJLaXQ6OldlYldvcmtlciogY3JlYXRlV29ya2VyKFdlYktp
dDo6V2ViV29ya2VyQ2xpZW50KikgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgV2ViS2l0OjpX
ZWJXb3JrZXIqIGNyZWF0ZVdvcmtlcihXZWJLaXQ6OldlYlNoYXJlZFdvcmtlckNsaWVudCopIHsg
cmV0dXJuIDA7IH0KICAgICB2aXJ0dWFsIFdlYktpdDo6V2ViTm90aWZpY2F0aW9uUHJlc2VudGVy
KiBub3RpZmljYXRpb25QcmVzZW50ZXIoKSB7IHJldHVybiAwOyB9CiAgICAgdmlydHVhbCBXZWJL
aXQ6OldlYkFwcGxpY2F0aW9uQ2FjaGVIb3N0KiBjcmVhdGVBcHBsaWNhdGlvbkNhY2hlSG9zdChX
ZWJLaXQ6OldlYkFwcGxpY2F0aW9uQ2FjaGVIb3N0Q2xpZW50KikgeyByZXR1cm4gMDsgfQogICAg
IHZpcnR1YWwgYm9vbCBhbGxvd0RhdGFiYXNlKFdlYktpdDo6V2ViRnJhbWUqLCBjb25zdCBXZWJL
aXQ6OldlYlN0cmluZyYsIGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiwgdW5zaWduZWQgbG9uZykg
eyByZXR1cm4gdHJ1ZTsgfQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vV2ViVmlld0hvc3QuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmll
d0hvc3QuY3BwCmluZGV4IGZmZTNiMTYuLjI0YmQ0OGYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5jcHAKQEAgLTgzNiw3ICs4MzYsNyBAQCBXZWJQbHVn
aW4qIFdlYlZpZXdIb3N0OjpjcmVhdGVQbHVnaW4oV2ViRnJhbWUqIGZyYW1lLCBjb25zdCBXZWJQ
bHVnaW5QYXJhbXMmIHBhcgogICAgIHJldHVybiB3ZWJraXRfc3VwcG9ydDo6Q3JlYXRlV2ViUGx1
Z2luKGZyYW1lLCBwYXJhbXMpOwogfQogCi1XZWJXb3JrZXIqIFdlYlZpZXdIb3N0OjpjcmVhdGVX
b3JrZXIoV2ViRnJhbWUqLCBXZWJXb3JrZXJDbGllbnQqKQorV2ViV29ya2VyKiBXZWJWaWV3SG9z
dDo6Y3JlYXRlV29ya2VyKFdlYkZyYW1lKiwgV2ViU2hhcmVkV29ya2VyQ2xpZW50KikKIHsKICAg
ICByZXR1cm4gbmV3IFRlc3RXZWJXb3JrZXIoKTsKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9XZWJWaWV3SG9zdC5oCmluZGV4IDkyMjE2M2EuLmEyZjdiY2EgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmgKKysrIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuaApAQCAtNTUsNiArNTUsNyBAQCBj
bGFzcyBXZWJEZXZpY2VPcmllbnRhdGlvbkNsaWVudE1vY2s7CiBjbGFzcyBXZWJHZW9sb2NhdGlv
bkNsaWVudDsKIGNsYXNzIFdlYkdlb2xvY2F0aW9uQ2xpZW50TW9jazsKIGNsYXNzIFdlYkdlb2xv
Y2F0aW9uU2VydmljZU1vY2s7CitjbGFzcyBXZWJTaGFyZWRXb3JrZXJDbGllbnQ7CiBjbGFzcyBX
ZWJTcGVlY2hJbnB1dENvbnRyb2xsZXI7CiBjbGFzcyBXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXJN
b2NrOwogY2xhc3MgV2ViU3BlZWNoSW5wdXRMaXN0ZW5lcjsKQEAgLTE3Myw3ICsxNzQsNyBAQCBj
bGFzcyBXZWJWaWV3SG9zdCA6IHB1YmxpYyBXZWJLaXQ6OldlYlNwZWxsQ2hlY2tDbGllbnQsIHB1
YmxpYyBXZWJLaXQ6OldlYlZpZXdDbAogCiAgICAgLy8gV2ViS2l0OjpXZWJGcmFtZUNsaWVudAog
ICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJQbHVnaW4qIGNyZWF0ZVBsdWdpbihXZWJLaXQ6OldlYkZy
YW1lKiwgY29uc3QgV2ViS2l0OjpXZWJQbHVnaW5QYXJhbXMmKTsKLSAgICB2aXJ0dWFsIFdlYktp
dDo6V2ViV29ya2VyKiBjcmVhdGVXb3JrZXIoV2ViS2l0OjpXZWJGcmFtZSosIFdlYktpdDo6V2Vi
V29ya2VyQ2xpZW50Kik7CisgICAgdmlydHVhbCBXZWJLaXQ6OldlYldvcmtlciogY3JlYXRlV29y
a2VyKFdlYktpdDo6V2ViRnJhbWUqLCBXZWJLaXQ6OldlYlNoYXJlZFdvcmtlckNsaWVudCopOwog
ICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJNZWRpYVBsYXllciogY3JlYXRlTWVkaWFQbGF5ZXIoV2Vi
S2l0OjpXZWJGcmFtZSosIFdlYktpdDo6V2ViTWVkaWFQbGF5ZXJDbGllbnQqKTsKICAgICB2aXJ0
dWFsIFdlYktpdDo6V2ViQXBwbGljYXRpb25DYWNoZUhvc3QqIGNyZWF0ZUFwcGxpY2F0aW9uQ2Fj
aGVIb3N0KFdlYktpdDo6V2ViRnJhbWUqLCBXZWJLaXQ6OldlYkFwcGxpY2F0aW9uQ2FjaGVIb3N0
Q2xpZW50Kik7CiAgICAgdmlydHVhbCB2b2lkIGxvYWRVUkxFeHRlcm5hbGx5KFdlYktpdDo6V2Vi
RnJhbWUqLCBjb25zdCBXZWJLaXQ6OldlYlVSTFJlcXVlc3QmLCBXZWJLaXQ6OldlYk5hdmlnYXRp
b25Qb2xpY3kpOwo=
</data>
<flag name="review"
          id="120655"
          type_id="1"
          status="+"
          setter="levin"
    />
    <flag name="commit-queue"
          id="120656"
          type_id="3"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120402</attachid>
            <date>2011-12-22 16:17:53 -0800</date>
            <delta_ts>2011-12-22 16:18:25 -0800</delta_ts>
            <desc>CR feedback</desc>
            <filename>66509.patch</filename>
            <type>text/plain</type>
            <size>82530</size>
            <attacher name="Dmitry Lomov">dslomov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggZjQwNzFhMi4uY2IzOGQ4NiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4NyBAQAorMjAxMS0xMi0yMiAgRG1pdHJ5IExv
bW92ICA8ZHNsb21vdkBnb29nbGUuY29tPgorCisgICAgICAgIFtXZWJXb3JrZXJzXVtDaHJvbWl1
bV0gUmVtb3ZlIHJlbWFpbnMgb2YgY3Jvc3MtcHJvY2VzcyBkZWRpY2F0ZWQgd29ya2VyIGltcGxl
bWVudGF0aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NjY1MDkKKyAgICAgICAgSnVzdCByZW5hbWVzLCBtZXJnZXMgYW5kIHJlbW92YWwgb2YgZGVh
ZCBjb2RlLiBIZXJlIGFyZSB0aGUgbGlzdCBvZiByZW5hbWVzOgorICAgICAgICAgIC0gV2ViQ29t
bW9uV29ya2VyQ2xpZW50IG1lcmdlZCB3aXRoIFdlYldvcmtlckNsaWVudCBhbmQgcmVuYW1lZCB0
byBXZWJTaGFyZWRXb3JrZXJDbGllbnQKKyAgICAgICAgICAtIE5ld1dlYkNvbW1vbldvcmtlckNs
aWVudCByZW5hbWVkIHRvIFdlYkNvbW1vbldvcmtlckNsaWVudAorICAgICAgICAgIC0gV2ViV29y
a2VyQmFzZSBtZXJnZWQgaW50byBXZWJTaGFyZWRXb3JrZXJJbXBsCisgICAgICAgICAgLSBOZXdX
ZWJXb3JrZXJCYXNlIHJlbmFtZWQgaW50byBXZWJXb3JrZXJCYXNlCisgICAgICAgIFdlYldvcmtl
ckNsaWVudC5oIGhhcyBhICIjZGVmaW5lIFdlYldvcmtlckNsaWVudCBXZWJTaGFyZWRXb3JrZXJD
bGllbnQiIHRvIGtlZXAgY2hyb21pdW0gYnVpbGRpbmcuCisgICAgICAgIFdpbGwgYmUgcmVtb3Zl
ZCBhZnRlciBjb29yZGluYXRlZCBwYXRjaCBpbiBjaHJvbWl1bS4KKworICAgICAgICBSZXZpZXdl
ZCBieSBEYXZpZCBMZXZpbi4KKworICAgICAgICAqIFdlYktpdC5neXA6CisgICAgICAgICogcHVi
bGljL1dlYkNvbW1vbldvcmtlckNsaWVudC5oOgorICAgICAgICAqIHB1YmxpYy9XZWJTaGFyZWRX
b3JrZXIuaDoKKyAgICAgICAgKiBwdWJsaWMvV2ViU2hhcmVkV29ya2VyQ2xpZW50Lmg6IENvcGll
ZCBmcm9tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNvbW1vbldvcmtlckNsaWVu
dC5oLgorICAgICAgICAoV2ViS2l0OjpXZWJTaGFyZWRXb3JrZXJDbGllbnQ6OnBvc3RDb25zb2xl
TWVzc2FnZVRvV29ya2VyT2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViU2hhcmVkV29ya2Vy
Q2xpZW50OjphbGxvd0ZpbGVTeXN0ZW0pOgorICAgICAgICAoV2ViS2l0OjpXZWJTaGFyZWRXb3Jr
ZXJDbGllbnQ6Om9wZW5GaWxlU3lzdGVtKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2hhcmVkV29y
a2VyQ2xpZW50OjpkaXNwYXRjaERldlRvb2xzTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlNoYXJlZFdvcmtlckNsaWVudDo6c2F2ZURldlRvb2xzQWdlbnRTdGF0ZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlNoYXJlZFdvcmtlckNsaWVudDo6fldlYlNoYXJlZFdvcmtlckNsaWVudCk6Cisg
ICAgICAgICogcHVibGljL1dlYldvcmtlckNsaWVudC5oOgorICAgICAgICAqIHNyYy9EYXRhYmFz
ZU9ic2VydmVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6QWxsb3dEYXRhYmFzZU1haW5UaHJlYWRC
cmlkZ2U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkFsbG93RGF0YWJhc2VNYWluVGhyZWFk
QnJpZGdlOjpBbGxvd0RhdGFiYXNlTWFpblRocmVhZEJyaWRnZSk6CisgICAgICAgIChXZWJLaXQ6
OkFsbG93RGF0YWJhc2VNYWluVGhyZWFkQnJpZGdlOjphbGxvd0RhdGFiYXNlVGFzayk6CisgICAg
ICAgIChXZWJLaXQ6OmFsbG93RGF0YWJhc2VGb3JXb3JrZXIpOgorICAgICAgICAoV2ViQ29yZTo6
RGF0YWJhc2VPYnNlcnZlcjo6Y2FuRXN0YWJsaXNoRGF0YWJhc2UpOgorICAgICAgICAqIHNyYy9J
REJGYWN0b3J5QmFja2VuZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6SURCRmFjdG9yeUJh
Y2tlbmRQcm94eTo6b3BlbkZyb21Xb3JrZXIpOgorICAgICAgICAqIHNyYy9Mb2NhbEZpbGVTeXN0
ZW1DaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpvcGVuRmlsZVN5c3RlbUhlbHBlcik6
CisgICAgICAgICogc3JjL1dlYlNoYXJlZFdvcmtlckltcGwuY3BwOgorICAgICAgICAoV2ViS2l0
Ojppbml0aWFsaXplV2ViS2l0U3RhdGljVmFsdWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2hh
cmVkV29ya2VySW1wbDo6V2ViU2hhcmVkV29ya2VySW1wbCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlNoYXJlZFdvcmtlckltcGw6On5XZWJTaGFyZWRXb3JrZXJJbXBsKToKKyAgICAgICAgKFdlYktp
dDo6V2ViU2hhcmVkV29ya2VySW1wbDo6c3RvcFdvcmtlclRocmVhZCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlNoYXJlZFdvcmtlckltcGw6OmluaXRpYWxpemVMb2FkZXIpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJTaGFyZWRXb3JrZXJJbXBsOjpkaWRDcmVhdGVEYXRhU291cmNlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViU2hhcmVkV29ya2VySW1wbDo6Y3JlYXRlQXBwbGljYXRpb25DYWNoZUhvc3Qp
OgorICAgICAgICAoV2ViS2l0OjpXZWJTaGFyZWRXb3JrZXJJbXBsOjpwb3N0TWVzc2FnZVRvV29y
a2VyT2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViU2hhcmVkV29ya2VySW1wbDo6cG9zdE1l
c3NhZ2VUYXNrKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2hhcmVkV29ya2VySW1wbDo6cG9zdEV4
Y2VwdGlvblRvV29ya2VyT2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViU2hhcmVkV29ya2Vy
SW1wbDo6cG9zdEV4Y2VwdGlvblRhc2spOgorICAgICAgICAoV2ViS2l0OjpXZWJTaGFyZWRXb3Jr
ZXJJbXBsOjpwb3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlNoYXJlZFdvcmtlckltcGw6OnBvc3RDb25zb2xlTWVzc2FnZVRhc2spOgorICAgICAg
ICAoV2ViS2l0OjpXZWJTaGFyZWRXb3JrZXJJbXBsOjpwb3N0TWVzc2FnZVRvUGFnZUluc3BlY3Rv
cik6CisgICAgICAgIChXZWJLaXQ6OldlYlNoYXJlZFdvcmtlckltcGw6OnBvc3RNZXNzYWdlVG9Q
YWdlSW5zcGVjdG9yVGFzayk6CisgICAgICAgIChXZWJLaXQ6OldlYlNoYXJlZFdvcmtlckltcGw6
OnVwZGF0ZUluc3BlY3RvclN0YXRlQ29va2llKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2hhcmVk
V29ya2VySW1wbDo6dXBkYXRlSW5zcGVjdG9yU3RhdGVDb29raWVUYXNrKToKKyAgICAgICAgKFdl
YktpdDo6V2ViU2hhcmVkV29ya2VySW1wbDo6Y29uZmlybU1lc3NhZ2VGcm9tV29ya2VyT2JqZWN0
KToKKyAgICAgICAgKFdlYktpdDo6V2ViU2hhcmVkV29ya2VySW1wbDo6Y29uZmlybU1lc3NhZ2VU
YXNrKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2hhcmVkV29ya2VySW1wbDo6cmVwb3J0UGVuZGlu
Z0FjdGl2aXR5KToKKyAgICAgICAgKFdlYktpdDo6V2ViU2hhcmVkV29ya2VySW1wbDo6cmVwb3J0
UGVuZGluZ0FjdGl2aXR5VGFzayk6CisgICAgICAgIChXZWJLaXQ6OldlYlNoYXJlZFdvcmtlcklt
cGw6OndvcmtlckNvbnRleHRDbG9zZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJTaGFyZWRXb3Jr
ZXJJbXBsOjp3b3JrZXJDb250ZXh0Q2xvc2VkVGFzayk6CisgICAgICAgIChXZWJLaXQ6OldlYlNo
YXJlZFdvcmtlckltcGw6OndvcmtlckNvbnRleHREZXN0cm95ZWQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJTaGFyZWRXb3JrZXJJbXBsOjp3b3JrZXJDb250ZXh0RGVzdHJveWVkVGFzayk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlNoYXJlZFdvcmtlckltcGw6OnBvc3RUYXNrVG9Mb2FkZXIpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJTaGFyZWRXb3JrZXJJbXBsOjpwb3N0VGFza0Zvck1vZGVUb1dvcmtl
ckNvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJTaGFyZWRXb3JrZXI6OmNyZWF0ZSk6Cisg
ICAgICAgICogc3JjL1dlYlNoYXJlZFdvcmtlckltcGwuaDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
U2hhcmVkV29ya2VySW1wbDo6dmlldyk6CisgICAgICAgIChXZWJLaXQ6OldlYlNoYXJlZFdvcmtl
ckltcGw6OmNvbW1vbkNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNoYXJlZFdvcmtlcklt
cGw6OmNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNoYXJlZFdvcmtlckltcGw6OnNldFdv
cmtlclRocmVhZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNoYXJlZFdvcmtlckltcGw6Ondvcmtl
clRocmVhZCk6CisgICAgICAgICogc3JjL1dlYldvcmtlckJhc2UuY3BwOgorICAgICAgICAoV2Vi
S2l0OjppbnZva2VUYXNrTWV0aG9kKToKKyAgICAgICAgKFdlYktpdDo6V2ViV29ya2VyQmFzZTo6
ZGlzcGF0Y2hUYXNrVG9NYWluVGhyZWFkKToKKyAgICAgICAgKiBzcmMvV2ViV29ya2VyQmFzZS5o
OgorICAgICAgICAqIHNyYy9XZWJXb3JrZXJDbGllbnRJbXBsLmNwcDoKKyAgICAgICAgKiBzcmMv
V2ViV29ya2VyQ2xpZW50SW1wbC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJXb3JrZXJDbGllbnRJ
bXBsOjpjb21tb25DbGllbnQpOgorICAgICAgICAqIHNyYy9XZWJXb3JrZXJJbXBsLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBzcmMvV2ViV29ya2VySW1wbC5oOiBSZW1vdmVkLgorICAgICAgICAq
IHNyYy9Xb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6cG9zdE9wZW5GaWxlU3lzdGVtVG9N
YWluVGhyZWFkKToKKyAgICAgICAgKFdlYktpdDo6V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0Jy
aWRnZTo6b3BlbkZpbGVTeXN0ZW1Pbk1haW5UaHJlYWQpOgorICAgICAgICAqIHNyYy9Xb3JrZXJG
aWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlLmg6CisKIDIwMTEtMTItMjEgIFBldGVyIEtvdHdpY3og
IDxwa290d2ljekBnb29nbGUuY29tPgogCiAgICAgICAgIFBsdW1icyByZWZyZXNoIHJhdGUgdGhy
b3VnaCBXZWJMYXllclRyZWVWaWV3OjpTZXR0aW5ncwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9XZWJLaXQuZ3lwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lw
CmluZGV4IDc0NzZiMjYuLjU3ZThhYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vV2ViS2l0Lmd5cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKQEAg
LTIzNiw2ICsyMzYsNyBAQAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViU2VjdXJpdHlQb2xp
Y3kuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJTZWxlY3RFbGVtZW50LmgnLAogICAg
ICAgICAgICAgICAgICdwdWJsaWMvV2ViU2V0dGluZ3MuaCcsCisgICAgICAgICAgICAgICAgJ3B1
YmxpYy9XZWJTaGFyZWRXb3JrZXJDbGllbnQuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9X
ZWJTaGFyZWRXb3JrZXIuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJTaGFyZWRXb3Jr
ZXJSZXBvc2l0b3J5LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViU29ja2V0LmgnLApA
QCAtNjY2LDggKzY2Nyw2IEBACiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJXb3JrZXJCYXNlLmgn
LAogICAgICAgICAgICAgICAgICdzcmMvV2ViV29ya2VyQ2xpZW50SW1wbC5jcHAnLAogICAgICAg
ICAgICAgICAgICdzcmMvV2ViV29ya2VyQ2xpZW50SW1wbC5oJywKLSAgICAgICAgICAgICAgICAn
c3JjL1dlYldvcmtlckltcGwuY3BwJywKLSAgICAgICAgICAgICAgICAnc3JjL1dlYldvcmtlcklt
cGwuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJXb3JrZXJSdW5Mb29wLmNwcCcsCiAgICAg
ICAgICAgICAgICAgJ3NyYy9Xb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAnLAogICAg
ICAgICAgICAgICAgICdzcmMvV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uaCcsCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDb21tb25Xb3JrZXJDbGll
bnQuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNvbW1vbldvcmtlckNsaWVu
dC5oCmluZGV4IGE3OTQ1MzkuLjJmZmI1NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vcHVibGljL1dlYkNvbW1vbldvcmtlckNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYkNvbW1vbldvcmtlckNsaWVudC5oCkBAIC00NCw3ICs0NCw3IEBA
IGNsYXNzIFdlYlN0cmluZzsKIGNsYXNzIFdlYldvcmtlcjsKIGNsYXNzIFdlYldvcmtlckNsaWVu
dDsKIAotY2xhc3MgTmV3V2ViQ29tbW9uV29ya2VyQ2xpZW50IHsKK2NsYXNzIFdlYkNvbW1vbldv
cmtlckNsaWVudCB7CiBwdWJsaWM6CiAgICAgLy8gQ2FsbGVkIG9uIHRoZSBtYWluIHdlYmtpdCB0
aHJlYWQgYmVmb3JlIG9wZW5pbmcgYSB3ZWIgZGF0YWJhc2UuCiAgICAgdmlydHVhbCBib29sIGFs
bG93RGF0YWJhc2UoV2ViRnJhbWUqLCBjb25zdCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYlN0
cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkgPSAwOwpAQCAt
NTYsNjYgKzU2LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBvcGVuRmlsZVN5c3RlbShX
ZWJGaWxlU3lzdGVtOjpUeXBlLCBsb25nIGxvbmcgc2l6ZSwgYm9vbCBjcmVhdGUsIFdlYkZpbGVT
eXN0ZW1DYWxsYmFja3MqKSA9IDA7CiB9OwogCi0vLyBQcm92aWRlcyBhbiBpbnRlcmZhY2UgYmFj
ayB0byB0aGUgaW4tcGFnZSBzY3JpcHQgb2JqZWN0IGZvciBhIHdvcmtlci4KLS8vIFRoaXMgaW50
ZXJmYWNlIGNvbnRhaW5zIGNvbW1vbiBBUElzIHVzZWQgYnkgYm90aCBzaGFyZWQgYW5kIGRlZGlj
YXRlZAotLy8gd29ya2Vycy4KLS8vIEFsbCBmdW5jdGlvbnMgYXJlIGV4cGVjdGVkIHRvIGJlIGNh
bGxlZCBiYWNrIG9uIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkCi0vLyB0aGUgV29ya2VyIG9iamVj
dCwgdW5sZXNzIG5vdGVkLgotY2xhc3MgV2ViQ29tbW9uV29ya2VyQ2xpZW50IDogcHVibGljIE5l
d1dlYkNvbW1vbldvcmtlckNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIHBvc3RF
eGNlcHRpb25Ub1dvcmtlck9iamVjdCgKLSAgICAgICAgY29uc3QgV2ViU3RyaW5nJiBlcnJvclN0
cmluZywgaW50IGxpbmVOdW1iZXIsCi0gICAgICAgIGNvbnN0IFdlYlN0cmluZyYgc291cmNlVVJM
KSA9IDA7Ci0KLSAgICAvLyBGSVhNRTogdGhlIGJlbG93IGlzIGZvciBjb21wYXRpYmlsaXR5IG9u
bHkgYW5kIHNob3VsZCBiZSAgIAotICAgIC8vIHJlbW92ZWQgb25jZSBDaHJvbWl1bSBpcyB1cGRh
dGVkIHRvIHJlbW92ZSBtZXNzYWdlCi0gICAgLy8gZGVzdGluYXRpb24gcGFyYW1ldGVyIDxodHRw
Oi8vd2Via2l0Lm9yZy9iLzM3MTU1Pi4KLSAgICB2aXJ0dWFsIHZvaWQgcG9zdENvbnNvbGVNZXNz
YWdlVG9Xb3JrZXJPYmplY3QoaW50LCBpbnQgc291cmNlSWRlbnRpZmllciwgaW50IG1lc3NhZ2VU
eXBlLCBpbnQgbWVzc2FnZUxldmVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBXZWJTdHJpbmcmIG1lc3NhZ2UsIGludCBsaW5lTnVtYmVy
LCBjb25zdCBXZWJTdHJpbmcmIHNvdXJjZVVSTCkgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHBv
c3RDb25zb2xlTWVzc2FnZVRvV29ya2VyT2JqZWN0KGludCBzb3VyY2VJZGVudGlmaWVyLCBpbnQg
bWVzc2FnZVR5cGUsIGludCBtZXNzYWdlTGV2ZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlN0cmluZyYgbWVzc2FnZSwgaW50IGxp
bmVOdW1iZXIsIGNvbnN0IFdlYlN0cmluZyYgc291cmNlVVJMKQotICAgIHsKLSAgICAgICAgcG9z
dENvbnNvbGVNZXNzYWdlVG9Xb3JrZXJPYmplY3QoMCwgc291cmNlSWRlbnRpZmllciwgbWVzc2Fn
ZVR5cGUsIG1lc3NhZ2VMZXZlbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbWVzc2FnZSwgbGluZU51bWJlciwgc291cmNlVVJMKTsKLSAgICB9Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgd29ya2VyQ29udGV4dENsb3NlZCgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgd29y
a2VyQ29udGV4dERlc3Ryb3llZCgpID0gMDsKLQotICAgIC8vIFJldHVybnMgdGhlIG5vdGlmaWNh
dGlvbiBwcmVzZW50ZXIgZm9yIHRoaXMgd29ya2VyIGNvbnRleHQuICBQb2ludGVyCi0gICAgLy8g
aXMgb3duZWQgYnkgdGhlIG9iamVjdCBpbXBsZW1lbnRpbmcgV2ViQ29tbW9uV29ya2VyQ2xpZW50
LgotICAgIHZpcnR1YWwgV2ViTm90aWZpY2F0aW9uUHJlc2VudGVyKiBub3RpZmljYXRpb25QcmVz
ZW50ZXIoKSA9IDA7Ci0KLSAgICAvLyBUaGlzIGNhbiBiZSBjYWxsZWQgb24gYW55IHRocmVhZCB0
byBjcmVhdGUgYSBuZXN0ZWQgV2ViV29ya2VyLgotICAgIC8vIFdlYlNoYXJlZFdvcmtlcnMgYXJl
IG5vdCBpbnN0YW50aWF0ZWQgdmlhIHRoaXMgQVBJIC0gaW5zdGVhZAotICAgIC8vIHRoZXkgYXJl
IGNyZWF0ZWQgdmlhIHRoZSBXZWJTaGFyZWRXb3JrZXJSZXBvc2l0b3J5LgotICAgIHZpcnR1YWwg
V2ViV29ya2VyKiBjcmVhdGVXb3JrZXIoV2ViV29ya2VyQ2xpZW50KiBjbGllbnQpID0gMDsKLQot
ICAgIC8vIENhbGxlZCBvbiB0aGUgbWFpbiB3ZWJraXQgdGhyZWFkIGluIHRoZSB3b3JrZXIgcHJv
Y2VzcyBkdXJpbmcgaW5pdGlhbGl6YXRpb24uCi0gICAgdmlydHVhbCBXZWJBcHBsaWNhdGlvbkNh
Y2hlSG9zdCogY3JlYXRlQXBwbGljYXRpb25DYWNoZUhvc3QoV2ViQXBwbGljYXRpb25DYWNoZUhv
c3RDbGllbnQqKSA9IDA7Ci0KLSAgICAvLyBDYWxsZWQgb24gdGhlIG1haW4gd2Via2l0IHRocmVh
ZCBiZWZvcmUgb3BlbmluZyBhIHdlYiBkYXRhYmFzZS4KLSAgICB2aXJ0dWFsIGJvb2wgYWxsb3dE
YXRhYmFzZShXZWJGcmFtZSosIGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgY29uc3QgV2ViU3RyaW5n
JiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKSA9IDA7Ci0KLSAgICAv
LyBDYWxsZWQgb24gdGhlIG1haW4gd2Via2l0IHRocmVhZCBiZWZvcmUgb3BlbmluZyBhIGZpbGUg
c3lzdGVtLgotICAgIHZpcnR1YWwgYm9vbCBhbGxvd0ZpbGVTeXN0ZW0oKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLy8gQ2FsbGVkIG9uIHRoZSBtYWluIHdlYmtp
dCB0aHJlYWQgYmVmb3JlIG9wZW5pbmcgYSBmaWxlIHN5c3RlbS4KLSAgICB2aXJ0dWFsIHZvaWQg
b3BlbkZpbGVTeXN0ZW0oV2ViRmlsZVN5c3RlbTo6VHlwZSwgbG9uZyBsb25nIHNpemUsIGJvb2wg
Y3JlYXRlLCBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzKikKLSAgICB7Ci0gICAgICAgIFdFQktJVF9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hE
ZXZUb29sc01lc3NhZ2UoY29uc3QgV2ViU3RyaW5nJikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHNh
dmVEZXZUb29sc0FnZW50U3RhdGUoY29uc3QgV2ViU3RyaW5nJikgeyB9Ci0KLXByb3RlY3RlZDoK
LSAgICB+V2ViQ29tbW9uV29ya2VyQ2xpZW50KCkgeyB9Ci19OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2hh
cmVkV29ya2VyLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTaGFyZWRXb3Jr
ZXIuaAppbmRleCA3ZDVkMDAzLi40NDdmN2Y0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJTaGFyZWRXb3JrZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJTaGFyZWRXb3JrZXIuaApAQCAtNDEsNyArNDEsNyBAQCBuYW1lc3BhY2Ug
V2ViS2l0IHsKIAogY2xhc3MgV2ViU3RyaW5nOwogY2xhc3MgV2ViTWVzc2FnZVBvcnRDaGFubmVs
OwotY2xhc3MgV2ViQ29tbW9uV29ya2VyQ2xpZW50OworY2xhc3MgV2ViU2hhcmVkV29ya2VyQ2xp
ZW50OwogY2xhc3MgV2ViVVJMOwogCiAvLyBUaGlzIGlzIHRoZSBpbnRlcmZhY2UgdG8gYSBTaGFy
ZWRXb3JrZXIgdGhyZWFkLgpAQCAtNDksNyArNDksNyBAQCBjbGFzcyBXZWJVUkw7CiBjbGFzcyBX
ZWJTaGFyZWRXb3JrZXIgewogcHVibGljOgogICAgIC8vIEludm9rZWQgZnJvbSB0aGUgd29ya2Vy
IHRocmVhZCB0byBpbnN0YW50aWF0ZSBhIFdlYlNoYXJlZFdvcmtlciB0aGF0IGludGVyYWN0cyB3
aXRoIHRoZSBXZWJLaXQgd29ya2VyIGNvbXBvbmVudHMuCi0gICAgV0VCS0lUX0VYUE9SVCBzdGF0
aWMgV2ViU2hhcmVkV29ya2VyKiBjcmVhdGUoV2ViQ29tbW9uV29ya2VyQ2xpZW50Kik7CisgICAg
V0VCS0lUX0VYUE9SVCBzdGF0aWMgV2ViU2hhcmVkV29ya2VyKiBjcmVhdGUoV2ViU2hhcmVkV29y
a2VyQ2xpZW50Kik7CiAKICAgICB2aXJ0dWFsIH5XZWJTaGFyZWRXb3JrZXIoKSB7fTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2hhcmVkV29ya2VyQ2xp
ZW50LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTaGFyZWRXb3JrZXJDbGll
bnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTcwMGM2Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2hhcmVkV29ya2Vy
Q2xpZW50LmgKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlNoYXJlZFdvcmtlckNsaWVudF9o
CisjZGVmaW5lIFdlYlNoYXJlZFdvcmtlckNsaWVudF9oCisKKyNpbmNsdWRlICJXZWJDb21tb25X
b3JrZXJDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJNZXNzYWdlUG9ydENoYW5uZWwuaCIKKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYk5vdGlmaWNhdGlvblByZXNlbnRlcjsKK2NsYXNz
IFdlYlN0cmluZzsKK2NsYXNzIFdlYldvcmtlcjsKKworLy8gUHJvdmlkZXMgYW4gaW50ZXJmYWNl
IGJhY2sgdG8gdGhlIGluLXBhZ2Ugc2NyaXB0IG9iamVjdCBmb3IgYSB3b3JrZXIuCisvLyBBbGwg
ZnVuY3Rpb25zIGFyZSBleHBlY3RlZCB0byBiZSBjYWxsZWQgYmFjayBvbiB0aGUgdGhyZWFkIHRo
YXQgY3JlYXRlZAorLy8gdGhlIFdvcmtlciBvYmplY3QsIHVubGVzcyBub3RlZC4KK2NsYXNzIFdl
YlNoYXJlZFdvcmtlckNsaWVudCA6IHB1YmxpYyBXZWJDb21tb25Xb3JrZXJDbGllbnQgeworcHVi
bGljOgorICAgIHZpcnR1YWwgdm9pZCBwb3N0TWVzc2FnZVRvV29ya2VyT2JqZWN0KAorICAgICAg
ICBjb25zdCBXZWJTdHJpbmcmLAorICAgICAgICBjb25zdCBXZWJNZXNzYWdlUG9ydENoYW5uZWxB
cnJheSYpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBjb25maXJtTWVzc2FnZUZyb21Xb3JrZXJP
YmplY3QoYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVw
b3J0UGVuZGluZ0FjdGl2aXR5KGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KSA9IDA7CisKKyAgICB2
aXJ0dWFsIHZvaWQgcG9zdEV4Y2VwdGlvblRvV29ya2VyT2JqZWN0KAorICAgICAgICBjb25zdCBX
ZWJTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbGluZU51bWJlciwKKyAgICAgICAgY29uc3QgV2Vi
U3RyaW5nJiBzb3VyY2VVUkwpID0gMDsKKworICAgIC8vIEZJWE1FOiB0aGUgYmVsb3cgaXMgZm9y
IGNvbXBhdGliaWxpdHkgb25seSBhbmQgc2hvdWxkIGJlICAgCisgICAgLy8gcmVtb3ZlZCBvbmNl
IENocm9taXVtIGlzIHVwZGF0ZWQgdG8gcmVtb3ZlIG1lc3NhZ2UKKyAgICAvLyBkZXN0aW5hdGlv
biBwYXJhbWV0ZXIgPGh0dHA6Ly93ZWJraXQub3JnL2IvMzcxNTU+LgorICAgIHZpcnR1YWwgdm9p
ZCBwb3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdChpbnQsIGludCBzb3VyY2VJZGVudGlm
aWVyLCBpbnQgbWVzc2FnZVR5cGUsIGludCBtZXNzYWdlTGV2ZWwsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlN0cmluZyYgbWVzc2Fn
ZSwgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFdlYlN0cmluZyYgc291cmNlVVJMKSA9IDA7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgcG9zdENvbnNvbGVNZXNzYWdlVG9Xb3JrZXJPYmplY3QoaW50IHNvdXJj
ZUlkZW50aWZpZXIsIGludCBtZXNzYWdlVHlwZSwgaW50IG1lc3NhZ2VMZXZlbCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViU3RyaW5n
JiBtZXNzYWdlLCBpbnQgbGluZU51bWJlciwgY29uc3QgV2ViU3RyaW5nJiBzb3VyY2VVUkwpCisg
ICAgeworICAgICAgICBwb3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdCgwLCBzb3VyY2VJ
ZGVudGlmaWVyLCBtZXNzYWdlVHlwZSwgbWVzc2FnZUxldmVsLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VVUkwpOwor
ICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCB3b3JrZXJDb250ZXh0Q2xvc2VkKCkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCB3b3JrZXJDb250ZXh0RGVzdHJveWVkKCkgPSAwOworCisgICAgLy8gUmV0
dXJucyB0aGUgbm90aWZpY2F0aW9uIHByZXNlbnRlciBmb3IgdGhpcyB3b3JrZXIgY29udGV4dC4g
UG9pbnRlcgorICAgIC8vIGlzIG93bmVkIGJ5IHRoZSBvYmplY3QgaW1wbGVtZW50aW5nIFdlYkNv
bW1vbldvcmtlckNsaWVudC4KKyAgICB2aXJ0dWFsIFdlYk5vdGlmaWNhdGlvblByZXNlbnRlciog
bm90aWZpY2F0aW9uUHJlc2VudGVyKCkgPSAwOworCisgICAgLy8gVGhpcyBjYW4gYmUgY2FsbGVk
IG9uIGFueSB0aHJlYWQgdG8gY3JlYXRlIGEgbmVzdGVkIFdlYldvcmtlci4KKyAgICAvLyBXZWJT
aGFyZWRXb3JrZXJzIGFyZSBub3QgaW5zdGFudGlhdGVkIHZpYSB0aGlzIEFQSSAtIGluc3RlYWQK
KyAgICAvLyB0aGV5IGFyZSBjcmVhdGVkIHZpYSB0aGUgV2ViU2hhcmVkV29ya2VyUmVwb3NpdG9y
eS4KKyAgICB2aXJ0dWFsIFdlYldvcmtlciogY3JlYXRlV29ya2VyKFdlYlNoYXJlZFdvcmtlckNs
aWVudCopID0gMDsKKworICAgIC8vIENhbGxlZCBvbiB0aGUgbWFpbiB3ZWJraXQgdGhyZWFkIGlu
IHRoZSB3b3JrZXIgcHJvY2VzcyBkdXJpbmcgaW5pdGlhbGl6YXRpb24uCisgICAgdmlydHVhbCBX
ZWJBcHBsaWNhdGlvbkNhY2hlSG9zdCogY3JlYXRlQXBwbGljYXRpb25DYWNoZUhvc3QoV2ViQXBw
bGljYXRpb25DYWNoZUhvc3RDbGllbnQqKSA9IDA7CisKKyAgICAvLyBDYWxsZWQgb24gdGhlIG1h
aW4gd2Via2l0IHRocmVhZCBiZWZvcmUgb3BlbmluZyBhIHdlYiBkYXRhYmFzZS4KKyAgICB2aXJ0
dWFsIGJvb2wgYWxsb3dEYXRhYmFzZShXZWJGcmFtZSosIGNvbnN0IFdlYlN0cmluZyYgbmFtZSwg
Y29uc3QgV2ViU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXpl
KSA9IDA7CisKKyAgICAvLyBDYWxsZWQgb24gdGhlIG1haW4gd2Via2l0IHRocmVhZCBiZWZvcmUg
b3BlbmluZyBhIGZpbGUgc3lzdGVtLgorICAgIHZpcnR1YWwgYm9vbCBhbGxvd0ZpbGVTeXN0ZW0o
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgLy8gQ2FsbGVkIG9u
IHRoZSBtYWluIHdlYmtpdCB0aHJlYWQgYmVmb3JlIG9wZW5pbmcgYSBmaWxlIHN5c3RlbS4KKyAg
ICB2aXJ0dWFsIHZvaWQgb3BlbkZpbGVTeXN0ZW0oV2ViRmlsZVN5c3RlbTo6VHlwZSwgbG9uZyBs
b25nIHNpemUsIGJvb2wgY3JlYXRlLCBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzKikKKyAgICB7Cisg
ICAgICAgIFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgZGlzcGF0Y2hEZXZUb29sc01lc3NhZ2UoY29uc3QgV2ViU3RyaW5nJikgeyB9CisgICAg
dmlydHVhbCB2b2lkIHNhdmVEZXZUb29sc0FnZW50U3RhdGUoY29uc3QgV2ViU3RyaW5nJikgeyB9
CisKK3Byb3RlY3RlZDoKKyAgICB+V2ViU2hhcmVkV29ya2VyQ2xpZW50KCkgeyB9Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJXb3JrZXJDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYldvcmtlckNsaWVudC5oCmluZGV4IGViMmU2M2UuLjU5Njk5OWQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldvcmtlckNsaWVudC5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldvcmtlckNsaWVudC5oCkBAIC0z
MSwzMSArMzEsOCBAQAogI2lmbmRlZiBXZWJXb3JrZXJDbGllbnRfaAogI2RlZmluZSBXZWJXb3Jr
ZXJDbGllbnRfaAogCi0jaW5jbHVkZSAiV2ViQ29tbW9uV29ya2VyQ2xpZW50LmgiCi0jaW5jbHVk
ZSAiV2ViTWVzc2FnZVBvcnRDaGFubmVsLmgiCisjaW5jbHVkZSAiV2ViU2hhcmVkV29ya2VyQ2xp
ZW50LmgiCiAKLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJOb3RpZmljYXRpb25QcmVz
ZW50ZXI7Ci1jbGFzcyBXZWJTdHJpbmc7Ci1jbGFzcyBXZWJXb3JrZXI7Ci0KLS8vIFByb3ZpZGVz
IGFuIGludGVyZmFjZSBiYWNrIHRvIHRoZSBpbi1wYWdlIHNjcmlwdCBvYmplY3QgZm9yIGEgd29y
a2VyLgotLy8gQWxsIGZ1bmN0aW9ucyBhcmUgZXhwZWN0ZWQgdG8gYmUgY2FsbGVkIGJhY2sgb24g
dGhlIHRocmVhZCB0aGF0IGNyZWF0ZWQKLS8vIHRoZSBXb3JrZXIgb2JqZWN0LCB1bmxlc3Mgbm90
ZWQuCi1jbGFzcyBXZWJXb3JrZXJDbGllbnQgOiBwdWJsaWMgV2ViQ29tbW9uV29ya2VyQ2xpZW50
IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgcG9zdE1lc3NhZ2VUb1dvcmtlck9iamVjdCgK
LSAgICAgICAgY29uc3QgV2ViU3RyaW5nJiwKLSAgICAgICAgY29uc3QgV2ViTWVzc2FnZVBvcnRD
aGFubmVsQXJyYXkmKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY29uZmlybU1lc3NhZ2VGcm9t
V29ya2VyT2JqZWN0KGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIHJlcG9ydFBlbmRpbmdBY3Rpdml0eShib29sIGhhc1BlbmRpbmdBY3Rpdml0eSkgPSAwOwot
Ci1wcm90ZWN0ZWQ6Ci0gICAgfldlYldvcmtlckNsaWVudCgpIHsgfQotfTsKLQotfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisjZGVmaW5lIFdlYldvcmtlckNsaWVudCBXZWJTaGFyZWRXb3JrZXJDbGll
bnQKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9EYXRh
YmFzZU9ic2VydmVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0RhdGFiYXNlT2Jz
ZXJ2ZXIuY3BwCmluZGV4IDE4N2I1NWUuLjQwYjUwNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL0RhdGFiYXNlT2JzZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL0RhdGFiYXNlT2JzZXJ2ZXIuY3BwCkBAIC02NCw3ICs2NCw3IEBAIHN0YXRp
YyBjb25zdCBjaGFyIGFsbG93RGF0YWJhc2VNb2RlW10gPSAiYWxsb3dEYXRhYmFzZU1vZGUiOwog
Ly8gY2FsbCBiYWNrIHRvIHRoZSB3b3JrZXIgY29udGV4dC4KIGNsYXNzIEFsbG93RGF0YWJhc2VN
YWluVGhyZWFkQnJpZGdlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEFsbG93RGF0YWJh
c2VNYWluVGhyZWFkQnJpZGdlPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8QWxs
b3dEYXRhYmFzZU1haW5UaHJlYWRCcmlkZ2U+IGNyZWF0ZShXZWJDb3JlOjpXb3JrZXJMb2FkZXJQ
cm94eSogd29ya2VyTG9hZGVyUHJveHksIGNvbnN0IFN0cmluZyYgbW9kZSwgTmV3V2ViQ29tbW9u
V29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQsIFdlYkZyYW1lKiBmcmFtZSwgY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRl
ZFNpemUpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8QWxsb3dEYXRhYmFzZU1haW5UaHJlYWRCcmlk
Z2U+IGNyZWF0ZShXZWJDb3JlOjpXb3JrZXJMb2FkZXJQcm94eSogd29ya2VyTG9hZGVyUHJveHks
IGNvbnN0IFN0cmluZyYgbW9kZSwgV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQs
IFdlYkZyYW1lKiBmcmFtZSwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRpc3Bs
YXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpCiAgICAgewogICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IEFsbG93RGF0YWJhc2VNYWluVGhyZWFkQnJpZGdlKHdvcmtlckxvYWRl
clByb3h5LCBtb2RlLCBjb21tb25DbGllbnQsIGZyYW1lLCBuYW1lLCBkaXNwbGF5TmFtZSwgZXN0
aW1hdGVkU2l6ZSkpOwogICAgIH0KQEAgLTkxLDcgKzkxLDcgQEAgcHVibGljOgogICAgIH0KIAog
cHJpdmF0ZToKLSAgICBBbGxvd0RhdGFiYXNlTWFpblRocmVhZEJyaWRnZShXZWJDb3JlOjpXb3Jr
ZXJMb2FkZXJQcm94eSogd29ya2VyTG9hZGVyUHJveHksIGNvbnN0IFN0cmluZyYgbW9kZSwgTmV3
V2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQsIFdlYkZyYW1lKiBmcmFtZSwgY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25n
IGVzdGltYXRlZFNpemUpCisgICAgQWxsb3dEYXRhYmFzZU1haW5UaHJlYWRCcmlkZ2UoV2ViQ29y
ZTo6V29ya2VyTG9hZGVyUHJveHkqIHdvcmtlckxvYWRlclByb3h5LCBjb25zdCBTdHJpbmcmIG1v
ZGUsIFdlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50LCBXZWJGcmFtZSogZnJhbWUs
IGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQg
bG9uZyBlc3RpbWF0ZWRTaXplKQogICAgICAgICA6IG1fd29ya2VyTG9hZGVyUHJveHkod29ya2Vy
TG9hZGVyUHJveHkpCiAgICAgewogICAgICAgICBXZWJXb3JrZXJCYXNlOjpkaXNwYXRjaFRhc2tU
b01haW5UaHJlYWQoCkBAIC0xMDEsNyArMTAxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0aGlzKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYWxsb3dE
YXRhYmFzZVRhc2soV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29u
c3QgU3RyaW5nIG1vZGUsIE5ld1dlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50LCBX
ZWJGcmFtZSogZnJhbWUsIGNvbnN0IFN0cmluZyBuYW1lLCBjb25zdCBTdHJpbmcgZGlzcGxheU5h
bWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1JlZlB0cjxBbGxvd0RhdGFiYXNl
TWFpblRocmVhZEJyaWRnZT4gYnJpZGdlKQorICAgIHN0YXRpYyB2b2lkIGFsbG93RGF0YWJhc2VU
YXNrKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmlu
ZyBtb2RlLCBXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1vbkNsaWVudCwgV2ViRnJhbWUqIGZy
YW1lLCBjb25zdCBTdHJpbmcgbmFtZSwgY29uc3QgU3RyaW5nIGRpc3BsYXlOYW1lLCB1bnNpZ25l
ZCBsb25nIGVzdGltYXRlZFNpemUsIFBhc3NSZWZQdHI8QWxsb3dEYXRhYmFzZU1haW5UaHJlYWRC
cmlkZ2U+IGJyaWRnZSkKICAgICB7CiAgICAgICAgIGJvb2wgYWxsb3dEYXRhYmFzZSA9IGNvbW1v
bkNsaWVudCA/IGNvbW1vbkNsaWVudC0+YWxsb3dEYXRhYmFzZShmcmFtZSwgbmFtZSwgZGlzcGxh
eU5hbWUsIGVzdGltYXRlZFNpemUpIDogZmFsc2U7CiAgICAgICAgIGJyaWRnZS0+c2lnbmFsQ29t
cGxldGVkKG1vZGUsIGFsbG93RGF0YWJhc2UpOwpAQCAtMTE3LDcgKzExNyw3IEBAIHByaXZhdGU6
CiAgICAgV2ViQ29yZTo6V29ya2VyTG9hZGVyUHJveHkqIG1fd29ya2VyTG9hZGVyUHJveHk7CiB9
OwogCi1ib29sIGFsbG93RGF0YWJhc2VGb3JXb3JrZXIoTmV3V2ViQ29tbW9uV29ya2VyQ2xpZW50
KiBjb21tb25DbGllbnQsIFdlYkZyYW1lKiBmcmFtZSwgY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBj
b25zdCBXZWJTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUp
Citib29sIGFsbG93RGF0YWJhc2VGb3JXb3JrZXIoV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21t
b25DbGllbnQsIFdlYkZyYW1lKiBmcmFtZSwgY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBjb25zdCBX
ZWJTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpCiB7CiAg
ICAgV2ViQ29yZTo6V29ya2VyU2NyaXB0Q29udHJvbGxlciogY29udHJvbGxlciA9IFdlYkNvcmU6
OldvcmtlclNjcmlwdENvbnRyb2xsZXI6OmNvbnRyb2xsZXJGb3JDb250ZXh0KCk7CiAgICAgV2Vi
Q29yZTo6V29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4dCA9IGNvbnRyb2xsZXItPndvcmtlckNv
bnRleHQoKTsKQEAgLTE2NCw4ICsxNjQsOCBAQCBib29sIERhdGFiYXNlT2JzZXJ2ZXI6OmNhbkVz
dGFibGlzaERhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dAogI2lm
IEVOQUJMRShXT1JLRVJTKQogICAgICAgICBXb3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0ID0g
c3RhdGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwogICAg
ICAgICBXb3JrZXJMb2FkZXJQcm94eSogd29ya2VyTG9hZGVyUHJveHkgPSAmd29ya2VyQ29udGV4
dC0+dGhyZWFkKCktPndvcmtlckxvYWRlclByb3h5KCk7Ci0gICAgICAgIE5ld1dlYldvcmtlckJh
c2UqIHdlYldvcmtlciA9IHN0YXRpY19jYXN0PE5ld1dlYldvcmtlckJhc2UqPih3b3JrZXJMb2Fk
ZXJQcm94eSk7Ci0gICAgICAgIHJldHVybiBhbGxvd0RhdGFiYXNlRm9yV29ya2VyKHdlYldvcmtl
ci0+bmV3Q29tbW9uQ2xpZW50KCksIHdlYldvcmtlci0+dmlldygpLT5tYWluRnJhbWUoKSwgbmFt
ZSwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUpOworICAgICAgICBXZWJXb3JrZXJCYXNlKiB3
ZWJXb3JrZXIgPSBzdGF0aWNfY2FzdDxXZWJXb3JrZXJCYXNlKj4od29ya2VyTG9hZGVyUHJveHkp
OworICAgICAgICByZXR1cm4gYWxsb3dEYXRhYmFzZUZvcldvcmtlcih3ZWJXb3JrZXItPmNvbW1v
bkNsaWVudCgpLCB3ZWJXb3JrZXItPnZpZXcoKS0+bWFpbkZyYW1lKCksIG5hbWUsIGRpc3BsYXlO
YW1lLCBlc3RpbWF0ZWRTaXplKTsKICNlbHNlCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJGYWN0
b3J5QmFja2VuZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3Rv
cnlCYWNrZW5kUHJveHkuY3BwCmluZGV4IDdhZTZlNjEuLmMyMjMwOWIgMTAwNzU1Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuY3BwCkBA
IC05OSw3ICs5OSw3IEBAIHZvaWQgSURCRmFjdG9yeUJhY2tlbmRQcm94eTo6b3BlbkZyb21Xb3Jr
ZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJDYWxsYmFja3MqIGNhCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgV29ya2VyTG9hZGVyUHJveHkqIHdvcmtlckxvYWRlclByb3h5ID0gJmNvbnRl
eHQtPnRocmVhZCgpLT53b3JrZXJMb2FkZXJQcm94eSgpOwotICAgIE5ld1dlYldvcmtlckJhc2Uq
IHdlYldvcmtlciA9IHN0YXRpY19jYXN0PE5ld1dlYldvcmtlckJhc2UqPih3b3JrZXJMb2FkZXJQ
cm94eSk7CisgICAgV2ViV29ya2VyQmFzZSogd2ViV29ya2VyID0gc3RhdGljX2Nhc3Q8V2ViV29y
a2VyQmFzZSo+KHdvcmtlckxvYWRlclByb3h5KTsKICAgICBXZWJGcmFtZSogd2ViRnJhbWUgPSB3
ZWJXb3JrZXItPnZpZXcoKS0+bWFpbkZyYW1lKCk7CiAgICAgbV93ZWJJREJGYWN0b3J5LT5vcGVu
KG5hbWUsIG5ldyBXZWJJREJDYWxsYmFja3NJbXBsKGNhbGxiYWNrcyksIG9yaWdpbiwgd2ViRnJh
bWUsIGRhdGFEaXIpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9Mb2NhbEZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9Mb2NhbEZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAKaW5kZXggNzU3ZWY4Mi4uOWUwZTczMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvTG9jYWxGaWxlU3lzdGVtQ2hy
b21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0xvY2FsRmlsZVN5c3Rl
bUNocm9taXVtLmNwcApAQCAtNzksNyArNzksNyBAQCBzdGF0aWMgY29uc3QgY2hhciBvcGVuRmls
ZVN5c3RlbU1vZGVbXSA9ICJvcGVuRmlsZVN5c3RlbU1vZGUiOwogLy8gY2FsbCBiYWNrIHRvIHRo
ZSB3b3JrZXIgY29udGV4dC4KIGNsYXNzIEFsbG93RmlsZVN5c3RlbU1haW5UaHJlYWRCcmlkZ2Ug
OiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8QWxsb3dGaWxlU3lzdGVtTWFpblRocmVhZEJy
aWRnZT4gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEFsbG93RmlsZVN5c3RlbU1h
aW5UaHJlYWRCcmlkZ2U+IGNyZWF0ZShXZWJDb3JlOjpXb3JrZXJMb2FkZXJQcm94eSogd29ya2Vy
TG9hZGVyUHJveHksIGNvbnN0IFdURjo6U3RyaW5nJiBtb2RlLCBOZXdXZWJDb21tb25Xb3JrZXJD
bGllbnQqIGNvbW1vbkNsaWVudCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxBbGxvd0ZpbGVTeXN0
ZW1NYWluVGhyZWFkQnJpZGdlPiBjcmVhdGUoV2ViQ29yZTo6V29ya2VyTG9hZGVyUHJveHkqIHdv
cmtlckxvYWRlclByb3h5LCBjb25zdCBXVEY6OlN0cmluZyYgbW9kZSwgV2ViQ29tbW9uV29ya2Vy
Q2xpZW50KiBjb21tb25DbGllbnQpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IEFsbG93RmlsZVN5c3RlbU1haW5UaHJlYWRCcmlkZ2Uod29ya2VyTG9hZGVyUHJveHksIG1vZGUs
IGNvbW1vbkNsaWVudCkpOwogICAgIH0KQEAgLTEwNiw3ICsxMDYsNyBAQCBwdWJsaWM6CiAgICAg
fQogCiBwcml2YXRlOgotICAgIEFsbG93RmlsZVN5c3RlbU1haW5UaHJlYWRCcmlkZ2UoV2ViQ29y
ZTo6V29ya2VyTG9hZGVyUHJveHkqIHdvcmtlckxvYWRlclByb3h5LCBjb25zdCBXVEY6OlN0cmlu
ZyYgbW9kZSwgTmV3V2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQpCisgICAgQWxs
b3dGaWxlU3lzdGVtTWFpblRocmVhZEJyaWRnZShXZWJDb3JlOjpXb3JrZXJMb2FkZXJQcm94eSog
d29ya2VyTG9hZGVyUHJveHksIGNvbnN0IFdURjo6U3RyaW5nJiBtb2RlLCBXZWJDb21tb25Xb3Jr
ZXJDbGllbnQqIGNvbW1vbkNsaWVudCkKICAgICAgICAgOiBtX3dvcmtlckxvYWRlclByb3h5KHdv
cmtlckxvYWRlclByb3h5KQogICAgICAgICAsIG1fbW9kZShtb2RlKQogICAgIHsKQEAgLTExNSw3
ICsxMTUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsbG93
Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcykpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhbGxv
d0ZpbGVTeXN0ZW1UYXNrKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQs
IE5ld1dlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50LCBQYXNzUmVmUHRyPEFsbG93
RmlsZVN5c3RlbU1haW5UaHJlYWRCcmlkZ2U+IGJyaWRnZSkKKyAgICBzdGF0aWMgdm9pZCBhbGxv
d0ZpbGVTeXN0ZW1UYXNrKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQs
IFdlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50LCBQYXNzUmVmUHRyPEFsbG93Rmls
ZVN5c3RlbU1haW5UaHJlYWRCcmlkZ2U+IGJyaWRnZSkKICAgICB7CiAgICAgICAgIGlmIChjb21t
b25DbGllbnQpCiAgICAgICAgICAgICBicmlkZ2UtPnNpZ25hbENvbXBsZXRlZChjb21tb25DbGll
bnQtPmFsbG93RmlsZVN5c3RlbSgpKTsKQEAgLTEzNCw3ICsxMzQsNyBAQCBwcml2YXRlOgogICAg
IFdURjo6U3RyaW5nIG1fbW9kZTsKIH07CiAKLWJvb2wgYWxsb3dGaWxlU3lzdGVtRm9yV29ya2Vy
KE5ld1dlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50KQorYm9vbCBhbGxvd0ZpbGVT
eXN0ZW1Gb3JXb3JrZXIoV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQpCiB7CiAg
ICAgV29ya2VyU2NyaXB0Q29udHJvbGxlciogY29udHJvbGxlciA9IFdvcmtlclNjcmlwdENvbnRy
b2xsZXI6OmNvbnRyb2xsZXJGb3JDb250ZXh0KCk7CiAgICAgV29ya2VyQ29udGV4dCogd29ya2Vy
Q29udGV4dCA9IGNvbnRyb2xsZXItPndvcmtlckNvbnRleHQoKTsKQEAgLTE1Nyw3ICsxNTcsNyBA
QCBib29sIGFsbG93RmlsZVN5c3RlbUZvcldvcmtlcihOZXdXZWJDb21tb25Xb3JrZXJDbGllbnQq
IGNvbW1vbkNsaWVudCkKICAgICByZXR1cm4gYnJpZGdlLT5yZXN1bHQoKTsKIH0KIAotdm9pZCBv
cGVuRmlsZVN5c3RlbUZvcldvcmtlcihOZXdXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1vbkNs
aWVudCwgV2ViRmlsZVN5c3RlbTo6VHlwZSB0eXBlLCBsb25nIGxvbmcgc2l6ZSwgYm9vbCBjcmVh
dGUsIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3MqIGNhbGxiYWNrcywgYm9vbCBzeW5jaHJvbm91cykK
K3ZvaWQgb3BlbkZpbGVTeXN0ZW1Gb3JXb3JrZXIoV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21t
b25DbGllbnQsIFdlYkZpbGVTeXN0ZW06OlR5cGUgdHlwZSwgbG9uZyBsb25nIHNpemUsIGJvb2wg
Y3JlYXRlLCBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzKiBjYWxsYmFja3MsIGJvb2wgc3luY2hyb25v
dXMpCiB7CiAgICAgV29ya2VyU2NyaXB0Q29udHJvbGxlciogY29udHJvbGxlciA9IFdvcmtlclNj
cmlwdENvbnRyb2xsZXI6OmNvbnRyb2xsZXJGb3JDb250ZXh0KCk7CiAgICAgV29ya2VyQ29udGV4
dCogd29ya2VyQ29udGV4dCA9IGNvbnRyb2xsZXItPndvcmtlckNvbnRleHQoKTsKQEAgLTIwMywx
MSArMjAzLDExIEBAIHN0YXRpYyB2b2lkIG9wZW5GaWxlU3lzdGVtSGVscGVyKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQsIEFzeW5jRmlsZVN5c3RlCiAjaWYgRU5BQkxFKFdPUktFUlMp
CiAgICAgICAgIFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQgPSBzdGF0aWNfY2FzdDxXb3Jr
ZXJDb250ZXh0Kj4oY29udGV4dCk7CiAgICAgICAgIFdvcmtlckxvYWRlclByb3h5KiB3b3JrZXJM
b2FkZXJQcm94eSA9ICZ3b3JrZXJDb250ZXh0LT50aHJlYWQoKS0+d29ya2VyTG9hZGVyUHJveHko
KTsKLSAgICAgICAgTmV3V2ViV29ya2VyQmFzZSogd2ViV29ya2VyID0gc3RhdGljX2Nhc3Q8TmV3
V2ViV29ya2VyQmFzZSo+KHdvcmtlckxvYWRlclByb3h5KTsKLSAgICAgICAgaWYgKCFhbGxvd0Zp
bGVTeXN0ZW1Gb3JXb3JrZXIod2ViV29ya2VyLT5uZXdDb21tb25DbGllbnQoKSkpCisgICAgICAg
IFdlYldvcmtlckJhc2UqIHdlYldvcmtlciA9IHN0YXRpY19jYXN0PFdlYldvcmtlckJhc2UqPih3
b3JrZXJMb2FkZXJQcm94eSk7CisgICAgICAgIGlmICghYWxsb3dGaWxlU3lzdGVtRm9yV29ya2Vy
KHdlYldvcmtlci0+Y29tbW9uQ2xpZW50KCkpKQogICAgICAgICAgICAgYWxsb3dlZCA9IGZhbHNl
OwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBvcGVuRmlsZVN5c3RlbUZvcldvcmtlcih3ZWJX
b3JrZXItPm5ld0NvbW1vbkNsaWVudCgpLCBzdGF0aWNfY2FzdDxXZWJGaWxlU3lzdGVtOjpUeXBl
Pih0eXBlKSwgc2l6ZSwgY3JlYXRlID09IENyZWF0ZUlmTm90UHJlc2VudCwgbmV3IFdlYkZpbGVT
eXN0ZW1DYWxsYmFja3NJbXBsKGNhbGxiYWNrcywgdHlwZSwgY29udGV4dCwgc3luY2hyb25vdXMp
LCBzeW5jaHJvbm91cyk7CisgICAgICAgICAgICBvcGVuRmlsZVN5c3RlbUZvcldvcmtlcih3ZWJX
b3JrZXItPmNvbW1vbkNsaWVudCgpLCBzdGF0aWNfY2FzdDxXZWJGaWxlU3lzdGVtOjpUeXBlPih0
eXBlKSwgc2l6ZSwgY3JlYXRlID09IENyZWF0ZUlmTm90UHJlc2VudCwgbmV3IFdlYkZpbGVTeXN0
ZW1DYWxsYmFja3NJbXBsKGNhbGxiYWNrcywgdHlwZSwgY29udGV4dCwgc3luY2hyb25vdXMpLCBz
eW5jaHJvbm91cyk7CiAKICNlbHNlCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2hhcmVkV29ya2VySW1wbC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTaGFyZWRXb3JrZXJJbXBsLmNwcApp
bmRleCAxNDQ1ZjhlLi5hNDc4NTVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJTaGFyZWRXb3JrZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJTaGFyZWRXb3JrZXJJbXBsLmNwcApAQCAtMzIsMzYgKzMyLDMwMiBAQAogI2luY2x1
ZGUgIldlYlNoYXJlZFdvcmtlckltcGwuaCIKIAogI2luY2x1ZGUgIkNyb3NzVGhyZWFkVGFzay5o
IgorI2luY2x1ZGUgIkRhdGFiYXNlVGFzay5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5j
bHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIk1lc3NhZ2VFdmVudC5oIgogI2luY2x1ZGUgIk1lc3Nh
Z2VQb3J0Q2hhbm5lbC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmgi
CisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25D
b250ZXh0LmgiCiAjaW5jbHVkZSAiU2hhcmVkV29ya2VyQ29udGV4dC5oIgogI2luY2x1ZGUgIlNo
YXJlZFdvcmtlclRocmVhZC5oIgotI2luY2x1ZGUgIldvcmtlckRlYnVnZ2VyQWdlbnQuaCIKLSNp
bmNsdWRlICJXb3JrZXJJbnNwZWN0b3JDb250cm9sbGVyLmgiCi0KKyNpbmNsdWRlICJXZWJEYXRh
U291cmNlSW1wbC5oIgorI2luY2x1ZGUgIldlYkZpbGVFcnJvci5oIgorI2luY2x1ZGUgIldlYkZy
YW1lQ2xpZW50LmgiCisjaW5jbHVkZSAiV2ViRnJhbWVJbXBsLmgiCiAjaW5jbHVkZSAiV2ViTWVz
c2FnZVBvcnRDaGFubmVsLmgiCisjaW5jbHVkZSAiV2ViUnVudGltZUZlYXR1cmVzLmgiCisjaW5j
bHVkZSAiV2ViU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJXZWJTaGFyZWRXb3JrZXJDbGllbnQuaCIK
KyNpbmNsdWRlICJXZWJWaWV3LmgiCisjaW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgorI2luY2x1
ZGUgIldvcmtlckxvYWRlclByb3h5LmgiCisjaW5jbHVkZSAiV29ya2VyVGhyZWFkLmgiCisKICNp
bmNsdWRlICJwbGF0Zm9ybS9XZWJTdHJpbmcuaCIKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJVUkwu
aCIKIAorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisKIHVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogI2lmIEVOQUJMRShTSEFSRURfV09SS0VSUykK
Ky8vIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG9uIHRoZSBtYWluIHRocmVhZCB0byBmb3JjZSB0
byBpbml0aWFsaXplIHNvbWUgc3RhdGljCisvLyB2YWx1ZXMgdXNlZCBpbiBXZWJLaXQgYmVmb3Jl
IGFueSB3b3JrZXIgdGhyZWFkIGlzIHN0YXJ0ZWQuIFRoaXMgaXMgYmVjYXVzZSBpbgorLy8gb3Vy
IHdvcmtlciBwcm9jZXNzcywgd2UgZG8gbm90IHJ1biBhbnkgV2ViS2l0IGNvZGUgaW4gbWFpbiB0
aHJlYWQgYW5kIHRodXMKKy8vIHdoZW4gbXVsdGlwbGUgd29ya2VycyB0cnkgdG8gc3RhcnQgYXQg
dGhlIHNhbWUgdGltZSwgd2UgbWlnaHQgaGl0IGNyYXNoIGR1ZQorLy8gdG8gY29udGVudGlvbiBm
b3IgaW5pdGlhbGl6aW5nIHN0YXRpYyB2YWx1ZXMuCitzdGF0aWMgdm9pZCBpbml0aWFsaXplV2Vi
S2l0U3RhdGljVmFsdWVzKCkKK3sKKyAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZCA9IGZhbHNl
OworICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKKyAgICAgICAgaW5pdGlhbGl6ZWQgPSB0cnVlOwor
ICAgICAgICAvLyBOb3RlIHRoYXQgd2UgaGF2ZSB0byBwYXNzIGEgVVJMIHdpdGggdmFsaWQgcHJv
dG9jb2wgaW4gb3JkZXIgdG8gZm9sbG93CisgICAgICAgIC8vIHRoZSBwYXRoIHRvIGRvIHN0YXRp
YyB2YWx1ZSBpbml0aWFsaXphdGlvbnMuCisgICAgICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4g
b3JpZ2luID0KKyAgICAgICAgICAgIFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUoS1VSTChQYXJzZWRV
UkxTdHJpbmcsICJodHRwOi8vbG9jYWxob3N0IikpOworICAgICAgICBvcmlnaW4ucmVsZWFzZSgp
OworICAgIH0KK30KIAotV2ViU2hhcmVkV29ya2VySW1wbDo6V2ViU2hhcmVkV29ya2VySW1wbChX
ZWJDb21tb25Xb3JrZXJDbGllbnQqIGNsaWVudCkKLSAgICA6IG1fY2xpZW50KGNsaWVudCkKK1dl
YlNoYXJlZFdvcmtlckltcGw6OldlYlNoYXJlZFdvcmtlckltcGwoV2ViU2hhcmVkV29ya2VyQ2xp
ZW50KiBjbGllbnQpCisgICAgOiBtX3dlYlZpZXcoMCkKKyAgICAsIG1fYXNrZWRUb1Rlcm1pbmF0
ZShmYWxzZSkKKyAgICAsIG1fY2xpZW50KGNsaWVudCkKICAgICAsIG1fcGF1c2VXb3JrZXJDb250
ZXh0T25TdGFydChmYWxzZSkKIHsKKyAgICBpbml0aWFsaXplV2ViS2l0U3RhdGljVmFsdWVzKCk7
CiB9CiAKIFdlYlNoYXJlZFdvcmtlckltcGw6On5XZWJTaGFyZWRXb3JrZXJJbXBsKCkKIHsKKyAg
ICBBU1NFUlQobV93ZWJWaWV3KTsKKyAgICBXZWJGcmFtZUltcGwqIHdlYkZyYW1lID0gc3RhdGlj
X2Nhc3Q8V2ViRnJhbWVJbXBsKj4obV93ZWJWaWV3LT5tYWluRnJhbWUoKSk7CisgICAgaWYgKHdl
YkZyYW1lKQorICAgICAgICB3ZWJGcmFtZS0+c2V0Q2xpZW50KDApOworICAgIG1fd2ViVmlldy0+
Y2xvc2UoKTsKK30KKwordm9pZCBXZWJTaGFyZWRXb3JrZXJJbXBsOjpzdG9wV29ya2VyVGhyZWFk
KCkKK3sKKyAgICBpZiAobV9hc2tlZFRvVGVybWluYXRlKQorICAgICAgICByZXR1cm47CisgICAg
bV9hc2tlZFRvVGVybWluYXRlID0gdHJ1ZTsKKyAgICBpZiAobV93b3JrZXJUaHJlYWQpCisgICAg
ICAgIG1fd29ya2VyVGhyZWFkLT5zdG9wKCk7Cit9CisKK3ZvaWQgV2ViU2hhcmVkV29ya2VySW1w
bDo6aW5pdGlhbGl6ZUxvYWRlcihjb25zdCBXZWJVUkwmIHVybCkKK3sKKyAgICAvLyBDcmVhdGUg
J3NoYWRvdyBwYWdlJy4gVGhpcyBwYWdlIGlzIG5ldmVyIGRpc3BsYXllZCwgaXQgaXMgdXNlZCB0
byBwcm94eSB0aGUKKyAgICAvLyBsb2FkaW5nIHJlcXVlc3RzIGZyb20gdGhlIHdvcmtlciBjb250
ZXh0IHRvIHRoZSByZXN0IG9mIFdlYktpdCBhbmQgQ2hyb21pdW0KKyAgICAvLyBpbmZyYXN0cnVj
dHVyZS4KKyAgICBBU1NFUlQoIW1fd2ViVmlldyk7CisgICAgbV93ZWJWaWV3ID0gV2ViVmlldzo6
Y3JlYXRlKDApOworICAgIG1fd2ViVmlldy0+c2V0dGluZ3MoKS0+c2V0T2ZmbGluZVdlYkFwcGxp
Y2F0aW9uQ2FjaGVFbmFibGVkKFdlYlJ1bnRpbWVGZWF0dXJlczo6aXNBcHBsaWNhdGlvbkNhY2hl
RW5hYmxlZCgpKTsKKyAgICAvLyBGSVhNRTogU2V0dGluZ3MgaW5mb3JtYXRpb24gc2hvdWxkIGJl
IHBhc3NlZCB0byB0aGUgV29ya2VyIHByb2Nlc3MgZnJvbSBCcm93c2VyIHByb2Nlc3Mgd2hlbiB0
aGUgd29ya2VyCisgICAgLy8gaXMgY3JlYXRlZCAoc2ltaWxhciB0byBSZW5kZXJUaHJlYWQ6Ok9u
Q3JlYXRlTmV3VmlldykuCisgICAgbV93ZWJWaWV3LT5zZXR0aW5ncygpLT5zZXRIaXhpZTc2V2Vi
U29ja2V0UHJvdG9jb2xFbmFibGVkKGZhbHNlKTsKKyAgICBtX3dlYlZpZXctPmluaXRpYWxpemVN
YWluRnJhbWUodGhpcyk7CisKKyAgICBXZWJGcmFtZUltcGwqIHdlYkZyYW1lID0gc3RhdGljX2Nh
c3Q8V2ViRnJhbWVJbXBsKj4obV93ZWJWaWV3LT5tYWluRnJhbWUoKSk7CisKKyAgICAvLyBDb25z
dHJ1Y3Qgc3Vic3RpdHV0ZSBkYXRhIHNvdXJjZSBmb3IgdGhlICdzaGFkb3cgcGFnZScuIFdlIG9u
bHkgbmVlZCBpdAorICAgIC8vIHRvIGhhdmUgc2FtZSBvcmlnaW4gYXMgdGhlIHdvcmtlciBzbyB0
aGUgbG9hZGluZyBjaGVja3Mgd29yayBjb3JyZWN0bHkuCisgICAgQ1N0cmluZyBjb250ZW50KCIi
KTsKKyAgICBpbnQgbGVuID0gc3RhdGljX2Nhc3Q8aW50Pihjb250ZW50Lmxlbmd0aCgpKTsKKyAg
ICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWYoU2hhcmVkQnVmZmVyOjpjcmVhdGUoY29udGVudC5k
YXRhKCksIGxlbikpOworICAgIFN1YnN0aXR1dGVEYXRhIHN1YnN0RGF0YShidWYsIFN0cmluZygi
dGV4dC9odG1sIiksIFN0cmluZygiVVRGLTgiKSwgS1VSTCgpKTsKKyAgICB3ZWJGcmFtZS0+ZnJh
bWUoKS0+bG9hZGVyKCktPmxvYWQoUmVzb3VyY2VSZXF1ZXN0KHVybCksIHN1YnN0RGF0YSwgZmFs
c2UpOworCisgICAgLy8gVGhpcyBkb2N1bWVudCB3aWxsIGJlIHVzZWQgYXMgJ2xvYWRpbmcgY29u
dGV4dCcgZm9yIHRoZSB3b3JrZXIuCisgICAgbV9sb2FkaW5nRG9jdW1lbnQgPSB3ZWJGcmFtZS0+
ZnJhbWUoKS0+ZG9jdW1lbnQoKTsKK30KKwordm9pZCBXZWJTaGFyZWRXb3JrZXJJbXBsOjpkaWRD
cmVhdGVEYXRhU291cmNlKFdlYkZyYW1lKiwgV2ViRGF0YVNvdXJjZSogZHMpCit7CisgICAgLy8g
VGVsbCB0aGUgbG9hZGVyIHRvIGxvYWQgdGhlIGRhdGEgaW50byB0aGUgJ3NoYWRvdyBwYWdlJyBz
eW5jaHJvbm91c2x5LAorICAgIC8vIHNvIHdlIGNhbiBncmFiIHRoZSByZXN1bHRpbmcgRG9jdW1l
bnQgcmlnaHQgYWZ0ZXIgbG9hZC4KKyAgICBzdGF0aWNfY2FzdDxXZWJEYXRhU291cmNlSW1wbCo+
KGRzKS0+c2V0RGVmZXJNYWluUmVzb3VyY2VEYXRhTG9hZChmYWxzZSk7Cit9CisKK1dlYkFwcGxp
Y2F0aW9uQ2FjaGVIb3N0KiBXZWJTaGFyZWRXb3JrZXJJbXBsOjpjcmVhdGVBcHBsaWNhdGlvbkNh
Y2hlSG9zdChXZWJGcmFtZSosIFdlYkFwcGxpY2F0aW9uQ2FjaGVIb3N0Q2xpZW50KiBhcHBjYWNo
ZUhvc3RDbGllbnQpCit7CisgICAgaWYgKGNsaWVudCgpKQorICAgICAgICByZXR1cm4gY2xpZW50
KCktPmNyZWF0ZUFwcGxpY2F0aW9uQ2FjaGVIb3N0KGFwcGNhY2hlSG9zdENsaWVudCk7CisgICAg
cmV0dXJuIDA7Cit9CisKKy8vIFdvcmtlck9iamVjdFByb3h5IC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3ZvaWQgV2ViU2hhcmVk
V29ya2VySW1wbDo6cG9zdE1lc3NhZ2VUb1dvcmtlck9iamVjdChQYXNzUmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4gbWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBQYXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBjaGFubmVs
cykKK3sKKyAgICBXZWJXb3JrZXJCYXNlOjpkaXNwYXRjaFRhc2tUb01haW5UaHJlYWQoY3JlYXRl
Q2FsbGJhY2tUYXNrKCZwb3N0TWVzc2FnZVRhc2ssIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhp
cyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNz
YWdlLT50b1dpcmVTdHJpbmcoKSwgY2hhbm5lbHMpKTsKK30KKwordm9pZCBXZWJTaGFyZWRXb3Jr
ZXJJbXBsOjpwb3N0TWVzc2FnZVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYlNoYXJlZFdvcmtlckltcGwq
IHRoaXNQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbWVz
c2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NPd25QdHI8TWVz
c2FnZVBvcnRDaGFubmVsQXJyYXk+IGNoYW5uZWxzKQoreworICAgIGlmICghdGhpc1B0ci0+Y2xp
ZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYk1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5
IHdlYkNoYW5uZWxzKGNoYW5uZWxzID8gY2hhbm5lbHMtPnNpemUoKSA6IDApOworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgd2ViQ2hhbm5lbHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgd2Vi
Q2hhbm5lbHNbaV0gPSAoKmNoYW5uZWxzKVtpXS0+Y2hhbm5lbCgpLT53ZWJDaGFubmVsUmVsZWFz
ZSgpOworICAgICAgICB3ZWJDaGFubmVsc1tpXS0+c2V0Q2xpZW50KDApOworICAgIH0KKworICAg
IHRoaXNQdHItPmNsaWVudCgpLT5wb3N0TWVzc2FnZVRvV29ya2VyT2JqZWN0KG1lc3NhZ2UsIHdl
YkNoYW5uZWxzKTsKK30KKwordm9pZCBXZWJTaGFyZWRXb3JrZXJJbXBsOjpwb3N0RXhjZXB0aW9u
VG9Xb3JrZXJPYmplY3QoY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGluZU51bWJlciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYg
c291cmNlVVJMKQoreworICAgIFdlYldvcmtlckJhc2U6OmRpc3BhdGNoVGFza1RvTWFpblRocmVh
ZCgKKyAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZwb3N0RXhjZXB0aW9uVGFzaywgQWxsb3dD
cm9zc1RocmVhZEFjY2Vzcyh0aGlzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9y
TWVzc2FnZSwgbGluZU51bWJlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVVS
TCkpOworfQorCit2b2lkIFdlYlNoYXJlZFdvcmtlckltcGw6OnBvc3RFeGNlcHRpb25UYXNrKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFdlYlNoYXJlZFdvcmtlckltcGwqIHRoaXNQdHIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGluZU51bWJlciwgY29uc3Qg
U3RyaW5nJiBzb3VyY2VVUkwpCit7CisgICAgaWYgKCF0aGlzUHRyLT5jbGllbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgdGhpc1B0ci0+Y2xpZW50KCktPnBvc3RFeGNlcHRpb25Ub1dvcmtl
ck9iamVjdChlcnJvck1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlVVJMKTsKK30KKwordm9p
ZCBXZWJTaGFyZWRXb3JrZXJJbXBsOjpwb3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdChN
ZXNzYWdlU291cmNlIHNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTWVzc2FnZVR5cGUgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZUxldmVsIGxldmVsLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBT
dHJpbmcmIG1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBsaW5lTnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCkKK3sKKyAg
ICBXZWJXb3JrZXJCYXNlOjpkaXNwYXRjaFRhc2tUb01haW5UaHJlYWQoY3JlYXRlQ2FsbGJhY2tU
YXNrKCZwb3N0Q29uc29sZU1lc3NhZ2VUYXNrLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHRoaXMp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNl
LCB0eXBlLCBsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZVVSTCkpOworfQorCit2b2lkIFdlYlNo
YXJlZFdvcmtlckltcGw6OnBvc3RDb25zb2xlTWVzc2FnZVRhc2soU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBXZWJTaGFyZWRXb3JrZXJJbXBsKiB0aGlzUHRyLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IHR5cGUsIGludCBsZXZlbCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpbmVOdW1iZXIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBzb3Vy
Y2VVUkwpCit7CisgICAgaWYgKCF0aGlzUHRyLT5jbGllbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIHRoaXNQdHItPmNsaWVudCgpLT5wb3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdChz
b3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHR5cGUsIGxldmVsLCBtZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyLCBzb3Vy
Y2VVUkwpOworfQorCit2b2lkIFdlYlNoYXJlZFdvcmtlckltcGw6OnBvc3RNZXNzYWdlVG9QYWdl
SW5zcGVjdG9yKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBXZWJXb3JrZXJCYXNlOjpk
aXNwYXRjaFRhc2tUb01haW5UaHJlYWQoY3JlYXRlQ2FsbGJhY2tUYXNrKCZwb3N0TWVzc2FnZVRv
UGFnZUluc3BlY3RvclRhc2ssIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcyksIG1lc3NhZ2Up
KTsKIH0KIAordm9pZCBXZWJTaGFyZWRXb3JrZXJJbXBsOjpwb3N0TWVzc2FnZVRvUGFnZUluc3Bl
Y3RvclRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYlNoYXJlZFdvcmtlckltcGwqIHRo
aXNQdHIsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBpZiAoIXRoaXNQdHItPmNsaWVu
dCgpKQorICAgICAgICByZXR1cm47CisgICAgdGhpc1B0ci0+Y2xpZW50KCktPmRpc3BhdGNoRGV2
VG9vbHNNZXNzYWdlKG1lc3NhZ2UpOworfQorCit2b2lkIFdlYlNoYXJlZFdvcmtlckltcGw6OnVw
ZGF0ZUluc3BlY3RvclN0YXRlQ29va2llKGNvbnN0IFdURjo6U3RyaW5nJiBjb29raWUpCit7Cisg
ICAgV2ViV29ya2VyQmFzZTo6ZGlzcGF0Y2hUYXNrVG9NYWluVGhyZWFkKGNyZWF0ZUNhbGxiYWNr
VGFzaygmdXBkYXRlSW5zcGVjdG9yU3RhdGVDb29raWVUYXNrLCBBbGxvd0Nyb3NzVGhyZWFkQWNj
ZXNzKHRoaXMpLCBjb29raWUpKTsKK30KKwordm9pZCBXZWJTaGFyZWRXb3JrZXJJbXBsOjp1cGRh
dGVJbnNwZWN0b3JTdGF0ZUNvb2tpZVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYlNo
YXJlZFdvcmtlckltcGwqIHRoaXNQdHIsIGNvbnN0IFN0cmluZyYgY29va2llKQoreworICAgIGlm
ICghdGhpc1B0ci0+Y2xpZW50KCkpCisgICAgICAgIHJldHVybjsKKyAgICB0aGlzUHRyLT5jbGll
bnQoKS0+c2F2ZURldlRvb2xzQWdlbnRTdGF0ZShjb29raWUpOworfQorCit2b2lkIFdlYlNoYXJl
ZFdvcmtlckltcGw6OmNvbmZpcm1NZXNzYWdlRnJvbVdvcmtlck9iamVjdChib29sIGhhc1BlbmRp
bmdBY3Rpdml0eSkKK3sKKyAgICBXZWJXb3JrZXJCYXNlOjpkaXNwYXRjaFRhc2tUb01haW5UaHJl
YWQoY3JlYXRlQ2FsbGJhY2tUYXNrKCZjb25maXJtTWVzc2FnZVRhc2ssIEFsbG93Q3Jvc3NUaHJl
YWRBY2Nlc3ModGhpcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBoYXNQZW5kaW5nQWN0aXZpdHkpKTsKK30KKwordm9pZCBXZWJTaGFyZWRXb3JrZXJJ
bXBsOjpjb25maXJtTWVzc2FnZVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYlNoYXJlZFdvcmtlcklt
cGwqIHRoaXNQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29s
IGhhc1BlbmRpbmdBY3Rpdml0eSkKK3sKKyAgICBpZiAoIXRoaXNQdHItPmNsaWVudCgpKQorICAg
ICAgICByZXR1cm47CisgICAgdGhpc1B0ci0+Y2xpZW50KCktPmNvbmZpcm1NZXNzYWdlRnJvbVdv
cmtlck9iamVjdChoYXNQZW5kaW5nQWN0aXZpdHkpOworfQorCit2b2lkIFdlYlNoYXJlZFdvcmtl
ckltcGw6OnJlcG9ydFBlbmRpbmdBY3Rpdml0eShib29sIGhhc1BlbmRpbmdBY3Rpdml0eSkKK3sK
KyAgICBXZWJXb3JrZXJCYXNlOjpkaXNwYXRjaFRhc2tUb01haW5UaHJlYWQoY3JlYXRlQ2FsbGJh
Y2tUYXNrKCZyZXBvcnRQZW5kaW5nQWN0aXZpdHlUYXNrLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyh0aGlzKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc1BlbmRp
bmdBY3Rpdml0eSkpOworfQorCit2b2lkIFdlYlNoYXJlZFdvcmtlckltcGw6OnJlcG9ydFBlbmRp
bmdBY3Rpdml0eVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJTaGFyZWRXb3JrZXJJbXBs
KiB0aGlzUHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KQoreworICAgIGlmICghdGhpc1B0ci0+Y2xpZW50KCkp
CisgICAgICAgIHJldHVybjsKKyAgICB0aGlzUHRyLT5jbGllbnQoKS0+cmVwb3J0UGVuZGluZ0Fj
dGl2aXR5KGhhc1BlbmRpbmdBY3Rpdml0eSk7Cit9CisKK3ZvaWQgV2ViU2hhcmVkV29ya2VySW1w
bDo6d29ya2VyQ29udGV4dENsb3NlZCgpCit7CisgICAgV2ViV29ya2VyQmFzZTo6ZGlzcGF0Y2hU
YXNrVG9NYWluVGhyZWFkKGNyZWF0ZUNhbGxiYWNrVGFzaygmd29ya2VyQ29udGV4dENsb3NlZFRh
c2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbGxv
d0Nyb3NzVGhyZWFkQWNjZXNzKHRoaXMpKSk7Cit9CisKK3ZvaWQgV2ViU2hhcmVkV29ya2VySW1w
bDo6d29ya2VyQ29udGV4dENsb3NlZFRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViU2hhcmVk
V29ya2VySW1wbCogdGhpc1B0cikKK3sKKyAgICBpZiAodGhpc1B0ci0+Y2xpZW50KCkpCisgICAg
ICAgIHRoaXNQdHItPmNsaWVudCgpLT53b3JrZXJDb250ZXh0Q2xvc2VkKCk7CisKKyAgICB0aGlz
UHRyLT5zdG9wV29ya2VyVGhyZWFkKCk7Cit9CisKK3ZvaWQgV2ViU2hhcmVkV29ya2VySW1wbDo6
d29ya2VyQ29udGV4dERlc3Ryb3llZCgpCit7CisgICAgV2ViV29ya2VyQmFzZTo6ZGlzcGF0Y2hU
YXNrVG9NYWluVGhyZWFkKGNyZWF0ZUNhbGxiYWNrVGFzaygmd29ya2VyQ29udGV4dERlc3Ryb3ll
ZFRhc2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBB
bGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHRoaXMpKSk7Cit9CisKK3ZvaWQgV2ViU2hhcmVkV29ya2Vy
SW1wbDo6d29ya2VyQ29udGV4dERlc3Ryb3llZFRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
V2ViU2hhcmVkV29ya2VySW1wbCogdGhpc1B0cikKK3sKKyAgICBpZiAodGhpc1B0ci0+Y2xpZW50
KCkpCisgICAgICAgIHRoaXNQdHItPmNsaWVudCgpLT53b3JrZXJDb250ZXh0RGVzdHJveWVkKCk7
CisgICAgLy8gVGhlIGxpZmV0aW1lIG9mIHRoaXMgcHJveHkgaXMgY29udHJvbGxlZCBieSB0aGUg
d29ya2VyIGNvbnRleHQuCisgICAgZGVsZXRlIHRoaXNQdHI7Cit9CisKKy8vIFdvcmtlckxvYWRl
clByb3h5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisKK3ZvaWQgV2ViU2hhcmVkV29ya2VySW1wbDo6cG9zdFRhc2tUb0xvYWRlcihQ
YXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2spCit7CisgICAgQVNT
RVJUKG1fbG9hZGluZ0RvY3VtZW50LT5pc0RvY3VtZW50KCkpOworICAgIG1fbG9hZGluZ0RvY3Vt
ZW50LT5wb3N0VGFzayh0YXNrKTsKK30KKwordm9pZCBXZWJTaGFyZWRXb3JrZXJJbXBsOjpwb3N0
VGFza0Zvck1vZGVUb1dvcmtlckNvbnRleHQoCisgICAgUGFzc093blB0cjxTY3JpcHRFeGVjdXRp
b25Db250ZXh0OjpUYXNrPiB0YXNrLCBjb25zdCBTdHJpbmcmIG1vZGUpCit7CisgICAgbV93b3Jr
ZXJUaHJlYWQtPnJ1bkxvb3AoKS5wb3N0VGFza0Zvck1vZGUodGFzaywgbW9kZSk7Cit9CisKKwor
CiBib29sIFdlYlNoYXJlZFdvcmtlckltcGw6OmlzU3RhcnRlZCgpCiB7CiAgICAgLy8gU2hvdWxk
IG5vdCBldmVyIGJlIGNhbGxlZCBmcm9tIHRoZSB3b3JrZXIgdGhyZWFkICh0aGlzIEFQSSBpcyBv
bmx5IGNhbGxlZCBvbiBXZWJTaGFyZWRXb3JrZXJQcm94eSBvbiB0aGUgcmVuZGVyZXIgdGhyZWFk
KS4KQEAgLTE3NywxOSArNDQzLDEwIEBAIHZvaWQgV2ViU2hhcmVkV29ya2VySW1wbDo6ZGlzcGF0
Y2hEZXZUb29sc01lc3NhZ2UoY29uc3QgV2ViU3RyaW5nJiBtZXNzYWdlKQogICAgIHdvcmtlclRo
cmVhZCgpLT5ydW5Mb29wKCkucG9zdFRhc2tGb3JNb2RlKGNyZWF0ZUNhbGxiYWNrVGFzayhkaXNw
YXRjaE9uSW5zcGVjdG9yQmFja2VuZFRhc2ssIFN0cmluZyhtZXNzYWdlKSksIFdvcmtlckRlYnVn
Z2VyQWdlbnQ6OmRlYnVnZ2VyVGFza01vZGUpOwogfQogCi1XZWJXb3JrZXJDbGllbnQqIFdlYlNo
YXJlZFdvcmtlckltcGw6OmNsaWVudCgpCi17Ci0gICAgLy8gV2Ugc2hvdWxkIG5ldmVyIGJlIGFz
a2VkIGZvciBhIFdlYldvcmtlckNsaWVudCAob25seSBkZWRpY2F0ZWQgd29ya2VycyBoYXZlIGFu
IGFzc29jaWF0ZWQgV2ViV29ya2VyQ2xpZW50KS4KLSAgICAvLyBJdCBzaG91bGQgbm90IGJlIHBv
c3NpYmxlIGZvciBTaGFyZWRXb3JrZXJDb250ZXh0IHRvIGdlbmVyYXRlIGFuIEFQSSBjYWxsIG91
dHNpZGUgdGhvc2Ugc3VwcG9ydGVkIGJ5IFdlYkNvbW1vbldvcmtlckNsaWVudC4KLSAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotV2ViU2hhcmVkV29ya2VyKiBX
ZWJTaGFyZWRXb3JrZXI6OmNyZWF0ZShXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNsaWVudCkKK1dl
YlNoYXJlZFdvcmtlciogV2ViU2hhcmVkV29ya2VyOjpjcmVhdGUoV2ViU2hhcmVkV29ya2VyQ2xp
ZW50KiBjbGllbnQpCiB7CiAgICAgcmV0dXJuIG5ldyBXZWJTaGFyZWRXb3JrZXJJbXBsKGNsaWVu
dCk7CiB9Ci0KICNlbmRpZiAvLyBFTkFCTEUoU0hBUkVEX1dPUktFUlMpCiAKIH0gLy8gbmFtZXNw
YWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2hh
cmVkV29ya2VySW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2hhcmVkV29y
a2VySW1wbC5oCmluZGV4IDQzN2JiMmIuLjgzZDM2MWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlNoYXJlZFdvcmtlckltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJTaGFyZWRXb3JrZXJJbXBsLmgKQEAgLTM0LDIwICszNCw2NCBAQAog
I2luY2x1ZGUgIldlYlNoYXJlZFdvcmtlci5oIgogCiAjaWYgRU5BQkxFKFNIQVJFRF9XT1JLRVJT
KQotCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgotCisjaW5jbHVkZSAiV2Vi
Q29tbW9uV29ya2VyQ2xpZW50LmgiCisjaW5jbHVkZSAiV2ViRnJhbWVDbGllbnQuaCIKICNpbmNs
dWRlICJXZWJXb3JrZXJCYXNlLmgiCisjaW5jbHVkZSAiV2ViV29ya2VyQ2xpZW50LmgiCisjaW5j
bHVkZSAiV29ya2VyTG9hZGVyUHJveHkuaCIKKyNpbmNsdWRlICJXb3JrZXJPYmplY3RQcm94eS5o
IgorI2luY2x1ZGUgIldvcmtlclRocmVhZC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+
CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCi1uYW1lc3BhY2UgV2ViS2l0IHsKIAorbmFtZXNw
YWNlIFdlYktpdCB7CitjbGFzcyBXZWJBcHBsaWNhdGlvbkNhY2hlSG9zdDsKK2NsYXNzIFdlYkFw
cGxpY2F0aW9uQ2FjaGVIb3N0Q2xpZW50OworY2xhc3MgV2ViV29ya2VyQ2xpZW50OworY2xhc3Mg
V2ViU2VjdXJpdHlPcmlnaW47CitjbGFzcyBXZWJTdHJpbmc7CitjbGFzcyBXZWJVUkw7CitjbGFz
cyBXZWJWaWV3OworY2xhc3MgV2ViV29ya2VyOworY2xhc3MgV2ViU2hhcmVkV29ya2VyQ2xpZW50
OwogLy8gVGhpcyBjbGFzcyBpcyB1c2VkIGJ5IHRoZSB3b3JrZXIgcHJvY2VzcyBjb2RlIHRvIHRh
bGsgdG8gdGhlIFdlYkNvcmU6OlNoYXJlZFdvcmtlciBpbXBsZW1lbnRhdGlvbi4KIC8vIEl0IGNh
bid0IHVzZSBpdCBkaXJlY3RseSBzaW5jZSBpdCB1c2VzIFdlYktpdCB0eXBlcywgc28gdGhpcyBj
bGFzcyBjb252ZXJ0cyB0aGUgZGF0YSB0eXBlcy4KIC8vIFdoZW4gdGhlIFdlYkNvcmU6OlNoYXJl
ZFdvcmtlciBvYmplY3Qgd2FudHMgdG8gY2FsbCBXZWJDb3JlOjpXb3JrZXJSZXBvcnRpbmdQcm94
eSwgdGhpcyBjbGFzcyB3aWxsCiAvLyBjb252ZXJ0IHRvIENocm9tZSBkYXRhIHR5cGVzIGZpcnN0
IGFuZCB0aGVuIGNhbGwgdGhlIHN1cHBsaWVkIFdlYkNvbW1vbldvcmtlckNsaWVudC4KLWNsYXNz
IFdlYlNoYXJlZFdvcmtlckltcGwgOiBwdWJsaWMgV2ViV29ya2VyQmFzZSwgcHVibGljIFdlYlNo
YXJlZFdvcmtlciB7CitjbGFzcyBXZWJTaGFyZWRXb3JrZXJJbXBsIDogcHVibGljIFdlYkNvcmU6
Oldvcmtlck9iamVjdFByb3h5CisgICAgICAgICAgICAgICAgICAgICAgICAgICwgcHVibGljIFdl
YldvcmtlckJhc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLCBwdWJsaWMgV2ViRnJhbWVD
bGllbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLCBwdWJsaWMgV2ViU2hhcmVkV29ya2Vy
IHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBXZWJTaGFyZWRXb3JrZXJJbXBsKFdlYkNvbW1vbldv
cmtlckNsaWVudCogY2xpZW50KTsKKyAgICBleHBsaWNpdCBXZWJTaGFyZWRXb3JrZXJJbXBsKFdl
YlNoYXJlZFdvcmtlckNsaWVudCopOworCisgICAgdmlydHVhbCB2b2lkIHBvc3RNZXNzYWdlVG9X
b3JrZXJPYmplY3QoCisgICAgICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2VyaWFsaXplZFNjcmlw
dFZhbHVlPiwKKyAgICAgICAgUGFzc093blB0cjxXZWJDb3JlOjpNZXNzYWdlUG9ydENoYW5uZWxB
cnJheT4pOworICAgIHZpcnR1YWwgdm9pZCBwb3N0RXhjZXB0aW9uVG9Xb3JrZXJPYmplY3QoCisg
ICAgICAgIGNvbnN0IFdURjo6U3RyaW5nJiwgaW50LCBjb25zdCBXVEY6OlN0cmluZyYpOworICAg
IHZpcnR1YWwgdm9pZCBwb3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdCgKKyAgICAgICAg
V2ViQ29yZTo6TWVzc2FnZVNvdXJjZSwgV2ViQ29yZTo6TWVzc2FnZVR5cGUsCisgICAgICAgIFdl
YkNvcmU6Ok1lc3NhZ2VMZXZlbCwgY29uc3QgV1RGOjpTdHJpbmcmLCBpbnQsIGNvbnN0IFdURjo6
U3RyaW5nJik7CisgICAgdmlydHVhbCB2b2lkIHBvc3RNZXNzYWdlVG9QYWdlSW5zcGVjdG9yKGNv
bnN0IFdURjo6U3RyaW5nJik7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUluc3BlY3RvclN0YXRl
Q29va2llKGNvbnN0IFdURjo6U3RyaW5nJik7CisgICAgdmlydHVhbCB2b2lkIGNvbmZpcm1NZXNz
YWdlRnJvbVdvcmtlck9iamVjdChib29sKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0UGVuZGlu
Z0FjdGl2aXR5KGJvb2wpOworICAgIHZpcnR1YWwgdm9pZCB3b3JrZXJDb250ZXh0Q2xvc2VkKCk7
CisgICAgdmlydHVhbCB2b2lkIHdvcmtlckNvbnRleHREZXN0cm95ZWQoKTsKKyAgICB2aXJ0dWFs
IFdlYlZpZXcqIHZpZXcoKSBjb25zdCB7IHJldHVybiBtX3dlYlZpZXc7IH0KKworICAgIC8vIFdl
YkNvcmU6OldvcmtlckxvYWRlclByb3h5IG1ldGhvZHM6CisgICAgdmlydHVhbCB2b2lkIHBvc3RU
YXNrVG9Mb2FkZXIoUGFzc093blB0cjxXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpU
YXNrPik7CisgICAgdmlydHVhbCB2b2lkIHBvc3RUYXNrRm9yTW9kZVRvV29ya2VyQ29udGV4dCgK
KyAgICAgICAgUGFzc093blB0cjxXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNr
PiwgY29uc3QgV1RGOjpTdHJpbmcmIG1vZGUpOworCisgICAgLy8gV2ViRnJhbWVDbGllbnQgbWV0
aG9kcyB0byBzdXBwb3J0IHJlc291cmNlIGxvYWRpbmcgdGhydSB0aGUgJ3NoYWRvdyBwYWdlJy4K
KyAgICB2aXJ0dWFsIHZvaWQgZGlkQ3JlYXRlRGF0YVNvdXJjZShXZWJGcmFtZSosIFdlYkRhdGFT
b3VyY2UqKTsKKyAgICB2aXJ0dWFsIFdlYkFwcGxpY2F0aW9uQ2FjaGVIb3N0KiBjcmVhdGVBcHBs
aWNhdGlvbkNhY2hlSG9zdChXZWJGcmFtZSosIFdlYkFwcGxpY2F0aW9uQ2FjaGVIb3N0Q2xpZW50
Kik7CisKIAogICAgIC8vIFdlYlNoYXJlZFdvcmtlciBtZXRob2RzOgogICAgIHZpcnR1YWwgYm9v
bCBpc1N0YXJ0ZWQoKTsKQEAgLTYzLDE5ICsxMDcsNzIgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCBkZXRhY2hEZXZUb29scygpOwogICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERldlRvb2xz
TWVzc2FnZShjb25zdCBXZWJTdHJpbmcmKTsKIAotICAgIC8vIFdlYldvcmtlckJhc2UgbWV0aG9k
czoKLSAgICBXZWJXb3JrZXJDbGllbnQqIGNsaWVudCgpOwotICAgIFdlYkNvbW1vbldvcmtlckNs
aWVudCogY29tbW9uQ2xpZW50KCkgeyByZXR1cm4gbV9jbGllbnQ7IH0KIAogICAgIC8vIE5ld1dl
YldvcmtlckJhc2UgbWV0aG9kczoKLSAgICBOZXdXZWJDb21tb25Xb3JrZXJDbGllbnQqIG5ld0Nv
bW1vbkNsaWVudCgpIHsgcmV0dXJuIG1fY2xpZW50OyB9CisgICAgV2ViQ29tbW9uV29ya2VyQ2xp
ZW50KiBjb21tb25DbGllbnQoKSB7IHJldHVybiBtX2NsaWVudDsgfQogCiBwcml2YXRlOgogICAg
IHZpcnR1YWwgfldlYlNoYXJlZFdvcmtlckltcGwoKTsKIAotICAgIHN0YXRpYyB2b2lkIGNvbm5l
Y3RUYXNrKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzT3duUHRyPFdlYkNv
cmU6Ok1lc3NhZ2VQb3J0Q2hhbm5lbD4pOworICAgIFdlYlNoYXJlZFdvcmtlckNsaWVudCogY2xp
ZW50KCkgeyByZXR1cm4gbV9jbGllbnQ7IH0KKworICAgIHZvaWQgc2V0V29ya2VyVGhyZWFkKFBh
c3NSZWZQdHI8V2ViQ29yZTo6V29ya2VyVGhyZWFkPiB0aHJlYWQpIHsgbV93b3JrZXJUaHJlYWQg
PSB0aHJlYWQ7IH0KKyAgICBXZWJDb3JlOjpXb3JrZXJUaHJlYWQqIHdvcmtlclRocmVhZCgpIHsg
cmV0dXJuIG1fd29ya2VyVGhyZWFkLmdldCgpOyB9CisKKyAgICAvLyBTaHV0cyBkb3duIHRoZSB3
b3JrZXIgdGhyZWFkLgorICAgIHZvaWQgc3RvcFdvcmtlclRocmVhZCgpOwogCi0gICAgV2ViQ29t
bW9uV29ya2VyQ2xpZW50KiBtX2NsaWVudDsKKyAgICAvLyBDcmVhdGVzIHRoZSBzaGFkb3cgbG9h
ZGVyIHVzZWQgZm9yIHdvcmtlciBuZXR3b3JrIHJlcXVlc3RzLgorICAgIHZvaWQgaW5pdGlhbGl6
ZUxvYWRlcihjb25zdCBXZWJVUkwmKTsKKworCisgICAgc3RhdGljIHZvaWQgY29ubmVjdFRhc2so
V2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NPd25QdHI8V2ViQ29yZTo6TWVz
c2FnZVBvcnRDaGFubmVsPik7CisgICAgLy8gVGFza3MgdGhhdCBhcmUgcnVuIG9uIHRoZSBtYWlu
IHRocmVhZC4KKyAgICBzdGF0aWMgdm9pZCBwb3N0TWVzc2FnZVRhc2soCisgICAgICAgIFdlYkNv
cmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLAorICAgICAgICBXZWJTaGFyZWRXb3JrZXJJbXBs
KiB0aGlzUHRyLAorICAgICAgICBXVEY6OlN0cmluZyBtZXNzYWdlLAorICAgICAgICBQYXNzT3du
UHRyPFdlYkNvcmU6Ok1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBjaGFubmVscyk7CisgICAgc3Rh
dGljIHZvaWQgcG9zdEV4Y2VwdGlvblRhc2soCisgICAgICAgIFdlYkNvcmU6OlNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLAorICAgICAgICBXZWJTaGFyZWRXb3JrZXJJbXBsKiB0aGlzUHRyLAorICAg
ICAgICBjb25zdCBXVEY6OlN0cmluZyYgbWVzc2FnZSwKKyAgICAgICAgaW50IGxpbmVOdW1iZXIs
CisgICAgICAgIGNvbnN0IFdURjo6U3RyaW5nJiBzb3VyY2VVUkwpOworICAgIHN0YXRpYyB2b2lk
IHBvc3RDb25zb2xlTWVzc2FnZVRhc2soCisgICAgICAgIFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLAorICAgICAgICBXZWJTaGFyZWRXb3JrZXJJbXBsKiB0aGlzUHRyLAorICAgICAg
ICBpbnQgc291cmNlLAorICAgICAgICBpbnQgdHlwZSwKKyAgICAgICAgaW50IGxldmVsLAorICAg
ICAgICBjb25zdCBXVEY6OlN0cmluZyYgbWVzc2FnZSwKKyAgICAgICAgaW50IGxpbmVOdW1iZXIs
CisgICAgICAgIGNvbnN0IFdURjo6U3RyaW5nJiBzb3VyY2VVUkwpOworICAgIHN0YXRpYyB2b2lk
IHBvc3RNZXNzYWdlVG9QYWdlSW5zcGVjdG9yVGFzayhXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgV2ViU2hhcmVkV29ya2VySW1wbCosIGNvbnN0IFdURjo6U3RyaW5nJik7CisgICAg
c3RhdGljIHZvaWQgdXBkYXRlSW5zcGVjdG9yU3RhdGVDb29raWVUYXNrKFdlYkNvcmU6OlNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJTaGFyZWRXb3JrZXJJbXBsKiB0aGlzUHRyLCBjb25zdCBX
VEY6OlN0cmluZyYgY29va2llKTsKKyAgICBzdGF0aWMgdm9pZCBjb25maXJtTWVzc2FnZVRhc2so
CisgICAgICAgIFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLAorICAgICAgICBXZWJT
aGFyZWRXb3JrZXJJbXBsKiB0aGlzUHRyLAorICAgICAgICBib29sIGhhc1BlbmRpbmdBY3Rpdml0
eSk7CisgICAgc3RhdGljIHZvaWQgcmVwb3J0UGVuZGluZ0FjdGl2aXR5VGFzaygKKyAgICAgICAg
V2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosCisgICAgICAgIFdlYlNoYXJlZFdvcmtl
ckltcGwqIHRoaXNQdHIsCisgICAgICAgIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KTsKKyAgICBz
dGF0aWMgdm9pZCB3b3JrZXJDb250ZXh0Q2xvc2VkVGFzaygKKyAgICAgICAgV2ViQ29yZTo6U2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosCisgICAgICAgIFdlYlNoYXJlZFdvcmtlckltcGwqIHRoaXNQ
dHIpOworICAgIHN0YXRpYyB2b2lkIHdvcmtlckNvbnRleHREZXN0cm95ZWRUYXNrKAorICAgICAg
ICBXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwKKyAgICAgICAgV2ViU2hhcmVkV29y
a2VySW1wbCogdGhpc1B0cik7CisKKyAgICAvLyAnc2hhZG93IHBhZ2UnIC0gY3JlYXRlZCB0byBw
cm94eSBsb2FkaW5nIHJlcXVlc3RzIGZyb20gdGhlIHdvcmtlci4KKyAgICBSZWZQdHI8V2ViQ29y
ZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dD4gbV9sb2FkaW5nRG9jdW1lbnQ7CisgICAgV2ViVmll
dyogbV93ZWJWaWV3OworICAgIGJvb2wgbV9hc2tlZFRvVGVybWluYXRlOworCisgICAgUmVmUHRy
PFdlYkNvcmU6OldvcmtlclRocmVhZD4gbV93b3JrZXJUaHJlYWQ7CisKKyAgICBXZWJTaGFyZWRX
b3JrZXJDbGllbnQqIG1fY2xpZW50OwogICAgIGJvb2wgbV9wYXVzZVdvcmtlckNvbnRleHRPblN0
YXJ0OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViV29y
a2VyQmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJCYXNlLmNw
cAppbmRleCA5M2Y4NDBjLi5iMTJkYjdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJXb3JrZXJCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJXb3JrZXJCYXNlLmNwcApAQCAtMzIsMjAgKzMyLDcgQEAKICNpbmNsdWRlICJXZWJXb3Jr
ZXJCYXNlLmgiCiAKICNpbmNsdWRlICJDcm9zc1RocmVhZFRhc2suaCIKLSNpbmNsdWRlICJEYXRh
YmFzZVRhc2suaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIk1lc3NhZ2VQb3J0
Q2hhbm5lbC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmgiCi0jaW5j
bHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKIAotI2luY2x1ZGUgIldlYkRhdGFTb3VyY2VJbXBsLmgi
Ci0jaW5jbHVkZSAiV2ViRmlsZUVycm9yLmgiCi0jaW5jbHVkZSAiV2ViRnJhbWVDbGllbnQuaCIK
LSNpbmNsdWRlICJXZWJGcmFtZUltcGwuaCIKLSNpbmNsdWRlICJXZWJNZXNzYWdlUG9ydENoYW5u
ZWwuaCIKLSNpbmNsdWRlICJXZWJSdW50aW1lRmVhdHVyZXMuaCIKLSNpbmNsdWRlICJXZWJTZXR0
aW5ncy5oIgotI2luY2x1ZGUgIldlYlZpZXcuaCIKICNpbmNsdWRlICJXZWJXb3JrZXJDbGllbnQu
aCIKIAogI2luY2x1ZGUgIldvcmtlckNvbnRleHQuaCIKQEAgLTU5LDgyICs0Niw3IEBAIG5hbWVz
cGFjZSBXZWJLaXQgewogCiAjaWYgRU5BQkxFKFdPUktFUlMpCiAKLS8vIFRoaXMgZnVuY3Rpb24g
aXMgY2FsbGVkIG9uIHRoZSBtYWluIHRocmVhZCB0byBmb3JjZSB0byBpbml0aWFsaXplIHNvbWUg
c3RhdGljCi0vLyB2YWx1ZXMgdXNlZCBpbiBXZWJLaXQgYmVmb3JlIGFueSB3b3JrZXIgdGhyZWFk
IGlzIHN0YXJ0ZWQuIFRoaXMgaXMgYmVjYXVzZSBpbgotLy8gb3VyIHdvcmtlciBwcm9jZXNzcywg
d2UgZG8gbm90IHJ1biBhbnkgV2ViS2l0IGNvZGUgaW4gbWFpbiB0aHJlYWQgYW5kIHRodXMKLS8v
IHdoZW4gbXVsdGlwbGUgd29ya2VycyB0cnkgdG8gc3RhcnQgYXQgdGhlIHNhbWUgdGltZSwgd2Ug
bWlnaHQgaGl0IGNyYXNoIGR1ZQotLy8gdG8gY29udGVudGlvbiBmb3IgaW5pdGlhbGl6aW5nIHN0
YXRpYyB2YWx1ZXMuCi1zdGF0aWMgdm9pZCBpbml0aWFsaXplV2ViS2l0U3RhdGljVmFsdWVzKCkK
LXsKLSAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZCA9IGZhbHNlOwotICAgIGlmICghaW5pdGlh
bGl6ZWQpIHsKLSAgICAgICAgaW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgICAgICAvLyBOb3RlIHRo
YXQgd2UgaGF2ZSB0byBwYXNzIGEgVVJMIHdpdGggdmFsaWQgcHJvdG9jb2wgaW4gb3JkZXIgdG8g
Zm9sbG93Ci0gICAgICAgIC8vIHRoZSBwYXRoIHRvIGRvIHN0YXRpYyB2YWx1ZSBpbml0aWFsaXph
dGlvbnMuCi0gICAgICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gb3JpZ2luID0KLSAgICAgICAg
ICAgIFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUoS1VSTChQYXJzZWRVUkxTdHJpbmcsICJodHRwOi8v
bG9jYWxob3N0IikpOwotICAgICAgICBvcmlnaW4ucmVsZWFzZSgpOwotICAgIH0KLX0KLQotV2Vi
V29ya2VyQmFzZTo6V2ViV29ya2VyQmFzZSgpCi0gICAgOiBtX3dlYlZpZXcoMCkKLSAgICAsIG1f
YXNrZWRUb1Rlcm1pbmF0ZShmYWxzZSkKLXsKLSAgICBpbml0aWFsaXplV2ViS2l0U3RhdGljVmFs
dWVzKCk7Ci19Ci0KLVdlYldvcmtlckJhc2U6On5XZWJXb3JrZXJCYXNlKCkKLXsKLSAgICBBU1NF
UlQobV93ZWJWaWV3KTsKLSAgICBXZWJGcmFtZUltcGwqIHdlYkZyYW1lID0gc3RhdGljX2Nhc3Q8
V2ViRnJhbWVJbXBsKj4obV93ZWJWaWV3LT5tYWluRnJhbWUoKSk7Ci0gICAgaWYgKHdlYkZyYW1l
KQotICAgICAgICB3ZWJGcmFtZS0+c2V0Q2xpZW50KDApOwotICAgIG1fd2ViVmlldy0+Y2xvc2Uo
KTsKLX0KLQotdm9pZCBXZWJXb3JrZXJCYXNlOjpzdG9wV29ya2VyVGhyZWFkKCkKLXsKLSAgICBp
ZiAobV9hc2tlZFRvVGVybWluYXRlKQotICAgICAgICByZXR1cm47Ci0gICAgbV9hc2tlZFRvVGVy
bWluYXRlID0gdHJ1ZTsKLSAgICBpZiAobV93b3JrZXJUaHJlYWQpCi0gICAgICAgIG1fd29ya2Vy
VGhyZWFkLT5zdG9wKCk7Ci19Ci0KLXZvaWQgV2ViV29ya2VyQmFzZTo6aW5pdGlhbGl6ZUxvYWRl
cihjb25zdCBXZWJVUkwmIHVybCkKLXsKLSAgICAvLyBDcmVhdGUgJ3NoYWRvdyBwYWdlJy4gVGhp
cyBwYWdlIGlzIG5ldmVyIGRpc3BsYXllZCwgaXQgaXMgdXNlZCB0byBwcm94eSB0aGUKLSAgICAv
LyBsb2FkaW5nIHJlcXVlc3RzIGZyb20gdGhlIHdvcmtlciBjb250ZXh0IHRvIHRoZSByZXN0IG9m
IFdlYktpdCBhbmQgQ2hyb21pdW0KLSAgICAvLyBpbmZyYXN0cnVjdHVyZS4KLSAgICBBU1NFUlQo
IW1fd2ViVmlldyk7Ci0gICAgbV93ZWJWaWV3ID0gV2ViVmlldzo6Y3JlYXRlKDApOwotICAgIG1f
d2ViVmlldy0+c2V0dGluZ3MoKS0+c2V0T2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGVFbmFibGVk
KFdlYlJ1bnRpbWVGZWF0dXJlczo6aXNBcHBsaWNhdGlvbkNhY2hlRW5hYmxlZCgpKTsKLSAgICAv
LyBGSVhNRTogU2V0dGluZ3MgaW5mb3JtYXRpb24gc2hvdWxkIGJlIHBhc3NlZCB0byB0aGUgV29y
a2VyIHByb2Nlc3MgZnJvbSBCcm93c2VyIHByb2Nlc3Mgd2hlbiB0aGUgd29ya2VyCi0gICAgLy8g
aXMgY3JlYXRlZCAoc2ltaWxhciB0byBSZW5kZXJUaHJlYWQ6Ok9uQ3JlYXRlTmV3VmlldykuCi0g
ICAgbV93ZWJWaWV3LT5zZXR0aW5ncygpLT5zZXRIaXhpZTc2V2ViU29ja2V0UHJvdG9jb2xFbmFi
bGVkKGZhbHNlKTsKLSAgICBtX3dlYlZpZXctPmluaXRpYWxpemVNYWluRnJhbWUodGhpcyk7Ci0K
LSAgICBXZWJGcmFtZUltcGwqIHdlYkZyYW1lID0gc3RhdGljX2Nhc3Q8V2ViRnJhbWVJbXBsKj4o
bV93ZWJWaWV3LT5tYWluRnJhbWUoKSk7Ci0KLSAgICAvLyBDb25zdHJ1Y3Qgc3Vic3RpdHV0ZSBk
YXRhIHNvdXJjZSBmb3IgdGhlICdzaGFkb3cgcGFnZScuIFdlIG9ubHkgbmVlZCBpdAotICAgIC8v
IHRvIGhhdmUgc2FtZSBvcmlnaW4gYXMgdGhlIHdvcmtlciBzbyB0aGUgbG9hZGluZyBjaGVja3Mg
d29yayBjb3JyZWN0bHkuCi0gICAgQ1N0cmluZyBjb250ZW50KCIiKTsKLSAgICBpbnQgbGVuID0g
c3RhdGljX2Nhc3Q8aW50Pihjb250ZW50Lmxlbmd0aCgpKTsKLSAgICBSZWZQdHI8U2hhcmVkQnVm
ZmVyPiBidWYoU2hhcmVkQnVmZmVyOjpjcmVhdGUoY29udGVudC5kYXRhKCksIGxlbikpOwotICAg
IFN1YnN0aXR1dGVEYXRhIHN1YnN0RGF0YShidWYsIFN0cmluZygidGV4dC9odG1sIiksIFN0cmlu
ZygiVVRGLTgiKSwgS1VSTCgpKTsKLSAgICB3ZWJGcmFtZS0+ZnJhbWUoKS0+bG9hZGVyKCktPmxv
YWQoUmVzb3VyY2VSZXF1ZXN0KHVybCksIHN1YnN0RGF0YSwgZmFsc2UpOwotCi0gICAgLy8gVGhp
cyBkb2N1bWVudCB3aWxsIGJlIHVzZWQgYXMgJ2xvYWRpbmcgY29udGV4dCcgZm9yIHRoZSB3b3Jr
ZXIuCi0gICAgbV9sb2FkaW5nRG9jdW1lbnQgPSB3ZWJGcmFtZS0+ZnJhbWUoKS0+ZG9jdW1lbnQo
KTsKLX0KLQotdm9pZCBXZWJXb3JrZXJCYXNlOjpkaXNwYXRjaFRhc2tUb01haW5UaHJlYWQoUGFz
c093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNrKQotewotICAgIGNhbGxP
bk1haW5UaHJlYWQoaW52b2tlVGFza01ldGhvZCwgdGFzay5sZWFrUHRyKCkpOwotfQotCi12b2lk
IFdlYldvcmtlckJhc2U6Omludm9rZVRhc2tNZXRob2Qodm9pZCogcGFyYW0pCitzdGF0aWMgdm9p
ZCBpbnZva2VUYXNrTWV0aG9kKHZvaWQqIHBhcmFtKQogewogICAgIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ6OlRhc2sqIHRhc2sgPQogICAgICAgICBzdGF0aWNfY2FzdDxTY3JpcHRFeGVjdXRpb25D
b250ZXh0OjpUYXNrKj4ocGFyYW0pOwpAQCAtMTQyLDE5MyArNTQsMTAgQEAgdm9pZCBXZWJXb3Jr
ZXJCYXNlOjppbnZva2VUYXNrTWV0aG9kKHZvaWQqIHBhcmFtKQogICAgIGRlbGV0ZSB0YXNrOwog
fQogCi12b2lkIFdlYldvcmtlckJhc2U6OmRpZENyZWF0ZURhdGFTb3VyY2UoV2ViRnJhbWUqLCBX
ZWJEYXRhU291cmNlKiBkcykKLXsKLSAgICAvLyBUZWxsIHRoZSBsb2FkZXIgdG8gbG9hZCB0aGUg
ZGF0YSBpbnRvIHRoZSAnc2hhZG93IHBhZ2UnIHN5bmNocm9ub3VzbHksCi0gICAgLy8gc28gd2Ug
Y2FuIGdyYWIgdGhlIHJlc3VsdGluZyBEb2N1bWVudCByaWdodCBhZnRlciBsb2FkLgotICAgIHN0
YXRpY19jYXN0PFdlYkRhdGFTb3VyY2VJbXBsKj4oZHMpLT5zZXREZWZlck1haW5SZXNvdXJjZURh
dGFMb2FkKGZhbHNlKTsKLX0KLQotV2ViQXBwbGljYXRpb25DYWNoZUhvc3QqIFdlYldvcmtlckJh
c2U6OmNyZWF0ZUFwcGxpY2F0aW9uQ2FjaGVIb3N0KFdlYkZyYW1lKiwgV2ViQXBwbGljYXRpb25D
YWNoZUhvc3RDbGllbnQqIGFwcGNhY2hlSG9zdENsaWVudCkKLXsKLSAgICBpZiAoY29tbW9uQ2xp
ZW50KCkpCi0gICAgICAgIHJldHVybiBjb21tb25DbGllbnQoKS0+Y3JlYXRlQXBwbGljYXRpb25D
YWNoZUhvc3QoYXBwY2FjaGVIb3N0Q2xpZW50KTsKLSAgICByZXR1cm4gMDsKLX0KLQotLy8gV29y
a2VyT2JqZWN0UHJveHkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLQotdm9pZCBXZWJXb3JrZXJCYXNlOjpwb3N0TWVzc2FnZVRvV29y
a2VyT2JqZWN0KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBtZXNzYWdlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NPd25QdHI8TWVz
c2FnZVBvcnRDaGFubmVsQXJyYXk+IGNoYW5uZWxzKQotewotICAgIGRpc3BhdGNoVGFza1RvTWFp
blRocmVhZChjcmVhdGVDYWxsYmFja1Rhc2soJnBvc3RNZXNzYWdlVGFzaywgQWxsb3dDcm9zc1Ro
cmVhZEFjY2Vzcyh0aGlzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1lc3NhZ2UtPnRvV2lyZVN0cmluZygpLCBjaGFubmVscykpOwotfQotCi12b2lk
IFdlYldvcmtlckJhc2U6OnBvc3RNZXNzYWdlVGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViV29ya2VyQmFz
ZSogdGhpc1B0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBt
ZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc093blB0cjxN
ZXNzYWdlUG9ydENoYW5uZWxBcnJheT4gY2hhbm5lbHMpCi17Ci0gICAgaWYgKCF0aGlzUHRyLT5j
bGllbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV2ViTWVzc2FnZVBvcnRDaGFubmVsQXJy
YXkgd2ViQ2hhbm5lbHMoY2hhbm5lbHMgPyBjaGFubmVscy0+c2l6ZSgpIDogMCk7Ci0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCB3ZWJDaGFubmVscy5zaXplKCk7ICsraSkgewotICAgICAgICB3
ZWJDaGFubmVsc1tpXSA9ICgqY2hhbm5lbHMpW2ldLT5jaGFubmVsKCktPndlYkNoYW5uZWxSZWxl
YXNlKCk7Ci0gICAgICAgIHdlYkNoYW5uZWxzW2ldLT5zZXRDbGllbnQoMCk7Ci0gICAgfQotCi0g
ICAgdGhpc1B0ci0+Y2xpZW50KCktPnBvc3RNZXNzYWdlVG9Xb3JrZXJPYmplY3QobWVzc2FnZSwg
d2ViQ2hhbm5lbHMpOwotfQotCi12b2lkIFdlYldvcmtlckJhc2U6OnBvc3RFeGNlcHRpb25Ub1dv
cmtlck9iamVjdChjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsaW5lTnVtYmVyLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBzb3Vy
Y2VVUkwpCi17Ci0gICAgZGlzcGF0Y2hUYXNrVG9NYWluVGhyZWFkKAotICAgICAgICBjcmVhdGVD
YWxsYmFja1Rhc2soJnBvc3RFeGNlcHRpb25UYXNrLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHRo
aXMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlLCBsaW5lTnVtYmVy
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlVVJMKSk7Ci19Ci0KLXZvaWQgV2Vi
V29ya2VyQmFzZTo6cG9zdEV4Y2VwdGlvblRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViV29ya2VyQmFz
ZSogdGhpc1B0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
U3RyaW5nJiBlcnJvck1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCkKLXsKLSAgICBpZiAo
IXRoaXNQdHItPmNvbW1vbkNsaWVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICB0aGlzUHRy
LT5jb21tb25DbGllbnQoKS0+cG9zdEV4Y2VwdGlvblRvV29ya2VyT2JqZWN0KGVycm9yTWVzc2Fn
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxpbmVOdW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzb3VyY2VVUkwpOwotfQotCi12b2lkIFdlYldvcmtlckJhc2U6OnBv
c3RDb25zb2xlTWVzc2FnZVRvV29ya2VyT2JqZWN0KE1lc3NhZ2VTb3VyY2Ugc291cmNlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdl
VHlwZSB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBNZXNzYWdlTGV2ZWwgbGV2ZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpbmVOdW1i
ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFN0cmluZyYgc291cmNlVVJMKQotewotICAgIGRpc3BhdGNoVGFza1RvTWFpblRocmVh
ZChjcmVhdGVDYWxsYmFja1Rhc2soJnBvc3RDb25zb2xlTWVzc2FnZVRhc2ssIEFsbG93Q3Jvc3NU
aHJlYWRBY2Nlc3ModGhpcyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzb3VyY2UsIHR5cGUsIGxldmVsLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSwgbGluZU51bWJlciwgc291cmNlVVJMKSk7
Ci19CiAKLXZvaWQgV2ViV29ya2VyQmFzZTo6cG9zdENvbnNvbGVNZXNzYWdlVGFzayhTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFdlYldvcmtlckJhc2UqIHRoaXNQdHIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgdHlwZSwgaW50IGxldmVsLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGluZU51bWJlciwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcm
IHNvdXJjZVVSTCkKLXsKLSAgICBpZiAoIXRoaXNQdHItPmNvbW1vbkNsaWVudCgpKQotICAgICAg
ICByZXR1cm47Ci0gICAgdGhpc1B0ci0+Y29tbW9uQ2xpZW50KCktPnBvc3RDb25zb2xlTWVzc2Fn
ZVRvV29ya2VyT2JqZWN0KHNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSwgbGV2ZWwsIG1lc3NhZ2UsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGxpbmVOdW1iZXIsIHNvdXJjZVVSTCk7Ci19Ci0KLXZvaWQgV2ViV29ya2VyQmFzZTo6cG9zdE1l
c3NhZ2VUb1BhZ2VJbnNwZWN0b3IoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIGRpc3Bh
dGNoVGFza1RvTWFpblRocmVhZChjcmVhdGVDYWxsYmFja1Rhc2soJnBvc3RNZXNzYWdlVG9QYWdl
SW5zcGVjdG9yVGFzaywgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyh0aGlzKSwgbWVzc2FnZSkpOwot
fQotCi12b2lkIFdlYldvcmtlckJhc2U6OnBvc3RNZXNzYWdlVG9QYWdlSW5zcGVjdG9yVGFzayhT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViV29ya2VyQmFzZSogdGhpc1B0ciwgY29uc3QgU3Ry
aW5nJiBtZXNzYWdlKQotewotICAgIGlmICghdGhpc1B0ci0+Y29tbW9uQ2xpZW50KCkpCi0gICAg
ICAgIHJldHVybjsKLSAgICB0aGlzUHRyLT5jb21tb25DbGllbnQoKS0+ZGlzcGF0Y2hEZXZUb29s
c01lc3NhZ2UobWVzc2FnZSk7Ci19Ci0KLXZvaWQgV2ViV29ya2VyQmFzZTo6dXBkYXRlSW5zcGVj
dG9yU3RhdGVDb29raWUoY29uc3QgV1RGOjpTdHJpbmcmIGNvb2tpZSkKLXsKLSAgICBkaXNwYXRj
aFRhc2tUb01haW5UaHJlYWQoY3JlYXRlQ2FsbGJhY2tUYXNrKCZ1cGRhdGVJbnNwZWN0b3JTdGF0
ZUNvb2tpZVRhc2ssIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcyksIGNvb2tpZSkpOwotfQot
Ci12b2lkIFdlYldvcmtlckJhc2U6OnVwZGF0ZUluc3BlY3RvclN0YXRlQ29va2llVGFzayhTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgV2ViV29ya2VyQmFzZSogdGhpc1B0ciwgY29uc3QgU3RyaW5n
JiBjb29raWUpCi17Ci0gICAgaWYgKCF0aGlzUHRyLT5jb21tb25DbGllbnQoKSkKLSAgICAgICAg
cmV0dXJuOwotICAgIHRoaXNQdHItPmNvbW1vbkNsaWVudCgpLT5zYXZlRGV2VG9vbHNBZ2VudFN0
YXRlKGNvb2tpZSk7Ci19Ci0KLXZvaWQgV2ViV29ya2VyQmFzZTo6Y29uZmlybU1lc3NhZ2VGcm9t
V29ya2VyT2JqZWN0KGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KQotewotICAgIGRpc3BhdGNoVGFz
a1RvTWFpblRocmVhZChjcmVhdGVDYWxsYmFja1Rhc2soJmNvbmZpcm1NZXNzYWdlVGFzaywgQWxs
b3dDcm9zc1RocmVhZEFjY2Vzcyh0aGlzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGhhc1BlbmRpbmdBY3Rpdml0eSkpOwotfQotCi12b2lkIFdlYldv
cmtlckJhc2U6OmNvbmZpcm1NZXNzYWdlVGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViV29ya2VyQmFz
ZSogdGhpc1B0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
aGFzUGVuZGluZ0FjdGl2aXR5KQotewotICAgIGlmICghdGhpc1B0ci0+Y2xpZW50KCkpCi0gICAg
ICAgIHJldHVybjsKLSAgICB0aGlzUHRyLT5jbGllbnQoKS0+Y29uZmlybU1lc3NhZ2VGcm9tV29y
a2VyT2JqZWN0KGhhc1BlbmRpbmdBY3Rpdml0eSk7Ci19Ci0KLXZvaWQgV2ViV29ya2VyQmFzZTo6
cmVwb3J0UGVuZGluZ0FjdGl2aXR5KGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KQotewotICAgIGRp
c3BhdGNoVGFza1RvTWFpblRocmVhZChjcmVhdGVDYWxsYmFja1Rhc2soJnJlcG9ydFBlbmRpbmdB
Y3Rpdml0eVRhc2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHRoaXMpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzUGVuZGluZ0FjdGl2aXR5KSk7Ci19Ci0KLXZv
aWQgV2ViV29ya2VyQmFzZTo6cmVwb3J0UGVuZGluZ0FjdGl2aXR5VGFzayhTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFdlYldvcmtlckJhc2UqIHRoaXNQdHIsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkpCi17Ci0gICAg
aWYgKCF0aGlzUHRyLT5jbGllbnQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHRoaXNQdHItPmNs
aWVudCgpLT5yZXBvcnRQZW5kaW5nQWN0aXZpdHkoaGFzUGVuZGluZ0FjdGl2aXR5KTsKLX0KLQot
dm9pZCBXZWJXb3JrZXJCYXNlOjp3b3JrZXJDb250ZXh0Q2xvc2VkKCkKLXsKLSAgICBkaXNwYXRj
aFRhc2tUb01haW5UaHJlYWQoY3JlYXRlQ2FsbGJhY2tUYXNrKCZ3b3JrZXJDb250ZXh0Q2xvc2Vk
VGFzaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFs
bG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcykpKTsKLX0KLQotdm9pZCBXZWJXb3JrZXJCYXNlOjp3
b3JrZXJDb250ZXh0Q2xvc2VkVGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJXb3JrZXJCYXNl
KiB0aGlzUHRyKQotewotICAgIGlmICh0aGlzUHRyLT5jb21tb25DbGllbnQoKSkKLSAgICAgICAg
dGhpc1B0ci0+Y29tbW9uQ2xpZW50KCktPndvcmtlckNvbnRleHRDbG9zZWQoKTsKLQotICAgIHRo
aXNQdHItPnN0b3BXb3JrZXJUaHJlYWQoKTsKLX0KLQotdm9pZCBXZWJXb3JrZXJCYXNlOjp3b3Jr
ZXJDb250ZXh0RGVzdHJveWVkKCkKLXsKLSAgICBkaXNwYXRjaFRhc2tUb01haW5UaHJlYWQoY3Jl
YXRlQ2FsbGJhY2tUYXNrKCZ3b3JrZXJDb250ZXh0RGVzdHJveWVkVGFzaywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsbG93Q3Jvc3NUaHJlYWRBY2Nl
c3ModGhpcykpKTsKLX0KLQotdm9pZCBXZWJXb3JrZXJCYXNlOjp3b3JrZXJDb250ZXh0RGVzdHJv
eWVkVGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJXb3JrZXJCYXNlKiB0aGlzUHRyKQot
ewotICAgIGlmICh0aGlzUHRyLT5jb21tb25DbGllbnQoKSkKLSAgICAgICAgdGhpc1B0ci0+Y29t
bW9uQ2xpZW50KCktPndvcmtlckNvbnRleHREZXN0cm95ZWQoKTsKLSAgICAvLyBUaGUgbGlmZXRp
bWUgb2YgdGhpcyBwcm94eSBpcyBjb250cm9sbGVkIGJ5IHRoZSB3b3JrZXIgY29udGV4dC4KLSAg
ICBkZWxldGUgdGhpc1B0cjsKLX0KLQotLy8gV29ya2VyTG9hZGVyUHJveHkgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotdm9pZCBX
ZWJXb3JrZXJCYXNlOjpwb3N0VGFza1RvTG9hZGVyKFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9u
Q29udGV4dDo6VGFzaz4gdGFzaykKLXsKLSAgICBBU1NFUlQobV9sb2FkaW5nRG9jdW1lbnQtPmlz
RG9jdW1lbnQoKSk7Ci0gICAgbV9sb2FkaW5nRG9jdW1lbnQtPnBvc3RUYXNrKHRhc2spOwotfQot
Ci12b2lkIFdlYldvcmtlckJhc2U6OnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyQ29udGV4dCgKLSAg
ICBQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2ssIGNvbnN0IFN0
cmluZyYgbW9kZSkKK3ZvaWQgV2ViV29ya2VyQmFzZTo6ZGlzcGF0Y2hUYXNrVG9NYWluVGhyZWFk
KFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gdGFzaykKIHsKLSAgICBt
X3dvcmtlclRocmVhZC0+cnVuTG9vcCgpLnBvc3RUYXNrRm9yTW9kZSh0YXNrLCBtb2RlKTsKKyAg
ICBjYWxsT25NYWluVGhyZWFkKGludm9rZVRhc2tNZXRob2QsIHRhc2subGVha1B0cigpKTsKIH0K
IAogI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViV29ya2VyQmFzZS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViV29ya2VyQmFzZS5oCmluZGV4IDkzNTk5ZjQuLmM0M2M2MzkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckJhc2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJCYXNlLmgKQEAgLTM1LDEzOCArMzUsMjYgQEAKIAogI2lu
Y2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJDb21tb25Xb3Jr
ZXJDbGllbnQuaCIKLSNpbmNsdWRlICJXZWJGcmFtZUNsaWVudC5oIgogI2luY2x1ZGUgIldvcmtl
ckxvYWRlclByb3h5LmgiCiAjaW5jbHVkZSAiV29ya2VyT2JqZWN0UHJveHkuaCIKLSNpbmNsdWRl
ICJXb3JrZXJUaHJlYWQuaCIKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KIAotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgV29ya2VyVGhyZWFk
OwotfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKLWNsYXNzIFdlYkFwcGxpY2F0aW9uQ2FjaGVIb3N0
OwotY2xhc3MgV2ViQXBwbGljYXRpb25DYWNoZUhvc3RDbGllbnQ7Ci1jbGFzcyBXZWJDb21tb25X
b3JrZXJDbGllbnQ7Ci1jbGFzcyBXZWJTZWN1cml0eU9yaWdpbjsKLWNsYXNzIFdlYlN0cmluZzsK
LWNsYXNzIFdlYlVSTDsKIGNsYXNzIFdlYlZpZXc7Ci1jbGFzcyBXZWJXb3JrZXI7Ci1jbGFzcyBX
ZWJXb3JrZXJDbGllbnQ7CiAKIC8vIEJhc2UgY2xhc3MgZm9yIFdlYlNoYXJlZFdvcmtlckltcGws
IFdlYldvcmtlckNsaWVudEltcGwgYW5kIChkZWZ1bmN0KSBXZWJXb3JrZXJJbXBsCiAvLyBjb250
YWluaW5nIGNvbW1vbiBpbnRlcmZhY2UgZm9yIHNoYXJlZCB3b3JrZXJzIGFuZCBkZWRpY2F0ZWQg
aW4tcHJvYyB3b3JrZXJzIGltcGxlbWVudGF0aW9uLgogLy8KIC8vIEZJWE1FOiBSZW5hbWUgdGhp
cyBjbGFzcyBpbnRvIFdlYldvcmtlckJhc2UsIG1lcmdlIGV4aXN0aW5nIFdlYldvcmtlckJhc2Ug
YW5kIFdlYlNoYXJlZFdvcmtlci4KLWNsYXNzIE5ld1dlYldvcmtlckJhc2UgOiBwdWJsaWMgV2Vi
Q29yZTo6V29ya2VyTG9hZGVyUHJveHkgeworY2xhc3MgV2ViV29ya2VyQmFzZSA6IHB1YmxpYyBX
ZWJDb3JlOjpXb3JrZXJMb2FkZXJQcm94eSB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCBOZXdXZWJD
b21tb25Xb3JrZXJDbGllbnQqIG5ld0NvbW1vbkNsaWVudCgpID0gMDsKKyAgICB2aXJ0dWFsIFdl
YkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50KCkgPSAwOwogICAgIHZpcnR1YWwgV2Vi
VmlldyogdmlldygpIGNvbnN0ID0gMDsKLX07Ci0KLS8vIEJhc2UgY2xhc3MgZm9yIFdlYlNoYXJl
ZFdvcmtlckltcGwgYW5kIFdlYldvcmtlckltcGwuIEl0IGNvbnRhaW5zIGNvbW1vbgotLy8gY29k
ZSB1c2VkIGJ5IGJvdGggaW1wbGVtZW50YXRpb24gY2xhc3NlcywgaW5jbHVkaW5nIGltcGxlbWVu
dGF0aW9ucyBvZiB0aGUKLS8vIFdvcmtlck9iamVjdFByb3h5IGFuZCBXb3JrZXJMb2FkZXJQcm94
eSBpbnRlcmZhY2VzLgotY2xhc3MgV2ViV29ya2VyQmFzZSA6IHB1YmxpYyBXZWJDb3JlOjpXb3Jr
ZXJPYmplY3RQcm94eQotICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBOZXdXZWJXb3JrZXJC
YXNlCi0gICAgICAgICAgICAgICAgICAgICwgcHVibGljIFdlYkZyYW1lQ2xpZW50IHsKLXB1Ymxp
YzoKLSAgICBXZWJXb3JrZXJCYXNlKCk7Ci0gICAgdmlydHVhbCB+V2ViV29ya2VyQmFzZSgpOwot
Ci0gICAgLy8gV2ViQ29tbW9uV29ya2VyQmFzZSBtZXRob2RzOgotICAgIHZpcnR1YWwgdm9pZCBw
b3N0TWVzc2FnZVRvV29ya2VyT2JqZWN0KAotICAgICAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OlNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4sCi0gICAgICAgIFBhc3NPd25QdHI8V2ViQ29yZTo6TWVzc2Fn
ZVBvcnRDaGFubmVsQXJyYXk+KTsKLSAgICB2aXJ0dWFsIHZvaWQgcG9zdEV4Y2VwdGlvblRvV29y
a2VyT2JqZWN0KAotICAgICAgICBjb25zdCBXVEY6OlN0cmluZyYsIGludCwgY29uc3QgV1RGOjpT
dHJpbmcmKTsKLSAgICB2aXJ0dWFsIHZvaWQgcG9zdENvbnNvbGVNZXNzYWdlVG9Xb3JrZXJPYmpl
Y3QoCi0gICAgICAgIFdlYkNvcmU6Ok1lc3NhZ2VTb3VyY2UsIFdlYkNvcmU6Ok1lc3NhZ2VUeXBl
LAotICAgICAgICBXZWJDb3JlOjpNZXNzYWdlTGV2ZWwsIGNvbnN0IFdURjo6U3RyaW5nJiwgaW50
LCBjb25zdCBXVEY6OlN0cmluZyYpOwotICAgIHZpcnR1YWwgdm9pZCBwb3N0TWVzc2FnZVRvUGFn
ZUluc3BlY3Rvcihjb25zdCBXVEY6OlN0cmluZyYpOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVJ
bnNwZWN0b3JTdGF0ZUNvb2tpZShjb25zdCBXVEY6OlN0cmluZyYpOwotICAgIHZpcnR1YWwgdm9p
ZCBjb25maXJtTWVzc2FnZUZyb21Xb3JrZXJPYmplY3QoYm9vbCk7Ci0gICAgdmlydHVhbCB2b2lk
IHJlcG9ydFBlbmRpbmdBY3Rpdml0eShib29sKTsKLSAgICB2aXJ0dWFsIHZvaWQgd29ya2VyQ29u
dGV4dENsb3NlZCgpOwotICAgIHZpcnR1YWwgdm9pZCB3b3JrZXJDb250ZXh0RGVzdHJveWVkKCk7
Ci0gICAgdmlydHVhbCBXZWJWaWV3KiB2aWV3KCkgY29uc3QgeyByZXR1cm4gbV93ZWJWaWV3OyB9
Ci0KLSAgICAvLyBXZWJDb3JlOjpXb3JrZXJMb2FkZXJQcm94eSBtZXRob2RzOgotICAgIHZpcnR1
YWwgdm9pZCBwb3N0VGFza1RvTG9hZGVyKFBhc3NPd25QdHI8V2ViQ29yZTo6U2NyaXB0RXhlY3V0
aW9uQ29udGV4dDo6VGFzaz4pOwotICAgIHZpcnR1YWwgdm9pZCBwb3N0VGFza0Zvck1vZGVUb1dv
cmtlckNvbnRleHQoCi0gICAgICAgIFBhc3NPd25QdHI8V2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9u
Q29udGV4dDo6VGFzaz4sIGNvbnN0IFdURjo6U3RyaW5nJiBtb2RlKTsKLQotICAgIC8vIFdlYkZy
YW1lQ2xpZW50IG1ldGhvZHMgdG8gc3VwcG9ydCByZXNvdXJjZSBsb2FkaW5nIHRocnUgdGhlICdz
aGFkb3cgcGFnZScuCi0gICAgdmlydHVhbCB2b2lkIGRpZENyZWF0ZURhdGFTb3VyY2UoV2ViRnJh
bWUqLCBXZWJEYXRhU291cmNlKik7Ci0gICAgdmlydHVhbCBXZWJBcHBsaWNhdGlvbkNhY2hlSG9z
dCogY3JlYXRlQXBwbGljYXRpb25DYWNoZUhvc3QoV2ViRnJhbWUqLCBXZWJBcHBsaWNhdGlvbkNh
Y2hlSG9zdENsaWVudCopOwogCiAgICAgLy8gRXhlY3V0ZXMgdGhlIGdpdmVuIHRhc2sgb24gdGhl
IG1haW4gdGhyZWFkLgogICAgIHN0YXRpYyB2b2lkIGRpc3BhdGNoVGFza1RvTWFpblRocmVhZChQ
YXNzT3duUHRyPFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+KTsKLQotcHJv
dGVjdGVkOgotICAgIHZpcnR1YWwgV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQo
KSA9IDA7Ci0gICAgdmlydHVhbCBXZWJXb3JrZXJDbGllbnQqIGNsaWVudCgpID0gMDsKLQotICAg
IHZvaWQgc2V0V29ya2VyVGhyZWFkKFBhc3NSZWZQdHI8V2ViQ29yZTo6V29ya2VyVGhyZWFkPiB0
aHJlYWQpIHsgbV93b3JrZXJUaHJlYWQgPSB0aHJlYWQ7IH0KLSAgICBXZWJDb3JlOjpXb3JrZXJU
aHJlYWQqIHdvcmtlclRocmVhZCgpIHsgcmV0dXJuIG1fd29ya2VyVGhyZWFkLmdldCgpOyB9Ci0K
LSAgICAvLyBTaHV0cyBkb3duIHRoZSB3b3JrZXIgdGhyZWFkLgotICAgIHZvaWQgc3RvcFdvcmtl
clRocmVhZCgpOwotCi0gICAgLy8gQ3JlYXRlcyB0aGUgc2hhZG93IGxvYWRlciB1c2VkIGZvciB3
b3JrZXIgbmV0d29yayByZXF1ZXN0cy4KLSAgICB2b2lkIGluaXRpYWxpemVMb2FkZXIoY29uc3Qg
V2ViVVJMJik7Ci0KLXByaXZhdGU6Ci0gICAgLy8gRnVuY3Rpb24gdXNlZCB0byBpbnZva2UgdGFz
a3Mgb24gdGhlIG1haW4gdGhyZWFkLgotICAgIHN0YXRpYyB2b2lkIGludm9rZVRhc2tNZXRob2Qo
dm9pZCopOwotCi0gICAgLy8gVGFza3MgdGhhdCBhcmUgcnVuIG9uIHRoZSBtYWluIHRocmVhZC4K
LSAgICBzdGF0aWMgdm9pZCBwb3N0TWVzc2FnZVRhc2soCi0gICAgICAgIFdlYkNvcmU6OlNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCi0gICAgICAgIFdlYldvcmtlckJhc2UqIHRoaXNQ
dHIsCi0gICAgICAgIFdURjo6U3RyaW5nIG1lc3NhZ2UsCi0gICAgICAgIFBhc3NPd25QdHI8V2Vi
Q29yZTo6TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+IGNoYW5uZWxzKTsKLSAgICBzdGF0aWMgdm9p
ZCBwb3N0RXhjZXB0aW9uVGFzaygKLSAgICAgICAgV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCwKLSAgICAgICAgV2ViV29ya2VyQmFzZSogdGhpc1B0ciwKLSAgICAgICAg
Y29uc3QgV1RGOjpTdHJpbmcmIG1lc3NhZ2UsCi0gICAgICAgIGludCBsaW5lTnVtYmVyLAotICAg
ICAgICBjb25zdCBXVEY6OlN0cmluZyYgc291cmNlVVJMKTsKLSAgICBzdGF0aWMgdm9pZCBwb3N0
Q29uc29sZU1lc3NhZ2VUYXNrKAotICAgICAgICBXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0LAotICAgICAgICBXZWJXb3JrZXJCYXNlKiB0aGlzUHRyLAotICAgICAgICBp
bnQgc291cmNlLAotICAgICAgICBpbnQgdHlwZSwKLSAgICAgICAgaW50IGxldmVsLAotICAgICAg
ICBjb25zdCBXVEY6OlN0cmluZyYgbWVzc2FnZSwKLSAgICAgICAgaW50IGxpbmVOdW1iZXIsCi0g
ICAgICAgIGNvbnN0IFdURjo6U3RyaW5nJiBzb3VyY2VVUkwpOwotICAgIHN0YXRpYyB2b2lkIHBv
c3RNZXNzYWdlVG9QYWdlSW5zcGVjdG9yVGFzayhXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgV2ViV29ya2VyQmFzZSosIGNvbnN0IFdURjo6U3RyaW5nJik7Ci0gICAgc3RhdGljIHZv
aWQgdXBkYXRlSW5zcGVjdG9yU3RhdGVDb29raWVUYXNrKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBXZWJXb3JrZXJCYXNlKiB0aGlzUHRyLCBjb25zdCBXVEY6OlN0cmluZyYgY29v
a2llKTsKLSAgICBzdGF0aWMgdm9pZCBjb25maXJtTWVzc2FnZVRhc2soCi0gICAgICAgIFdlYkNv
cmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCi0gICAgICAgIFdlYldvcmtlckJh
c2UqIHRoaXNQdHIsCi0gICAgICAgIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KTsKLSAgICBzdGF0
aWMgdm9pZCByZXBvcnRQZW5kaW5nQWN0aXZpdHlUYXNrKAotICAgICAgICBXZWJDb3JlOjpTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LAotICAgICAgICBXZWJXb3JrZXJCYXNlKiB0aGlz
UHRyLAotICAgICAgICBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSk7Ci0gICAgc3RhdGljIHZvaWQg
d29ya2VyQ29udGV4dENsb3NlZFRhc2soCi0gICAgICAgIFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQsCi0gICAgICAgIFdlYldvcmtlckJhc2UqIHRoaXNQdHIpOwotICAg
IHN0YXRpYyB2b2lkIHdvcmtlckNvbnRleHREZXN0cm95ZWRUYXNrKAotICAgICAgICBXZWJDb3Jl
OjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LAotICAgICAgICBXZWJXb3JrZXJCYXNl
KiB0aGlzUHRyKTsKLQotICAgIC8vICdzaGFkb3cgcGFnZScgLSBjcmVhdGVkIHRvIHByb3h5IGxv
YWRpbmcgcmVxdWVzdHMgZnJvbSB0aGUgd29ya2VyLgotICAgIFJlZlB0cjxXZWJDb3JlOjpTY3Jp
cHRFeGVjdXRpb25Db250ZXh0PiBtX2xvYWRpbmdEb2N1bWVudDsKLSAgICBXZWJWaWV3KiBtX3dl
YlZpZXc7Ci0gICAgYm9vbCBtX2Fza2VkVG9UZXJtaW5hdGU7Ci0KLSAgICBSZWZQdHI8V2ViQ29y
ZTo6V29ya2VyVGhyZWFkPiBtX3dvcmtlclRocmVhZDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViV29ya2VyQ2xp
ZW50SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJDbGllbnRJ
bXBsLmNwcAppbmRleCA1YjlmMzIwLi41MDkwYWZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJDbGllbnRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJDbGllbnRJbXBsLmNwcApAQCAtNjMsNyArNjMsNiBAQAog
I2luY2x1ZGUgInBsYXRmb3JtL1dlYlVSTC5oIgogI2luY2x1ZGUgIldlYlZpZXdJbXBsLmgiCiAj
aW5jbHVkZSAiV2ViV29ya2VyLmgiCi0jaW5jbHVkZSAiV2ViV29ya2VySW1wbC5oIgogCiB1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViV29ya2VyQ2xpZW50SW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViV29ya2VyQ2xpZW50SW1wbC5oCmluZGV4IDcwMDZhOTQuLjUxODlhZDEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckNsaWVudEltcGwuaAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJDbGllbnRJbXBsLmgKQEAgLTU4LDgg
KzU4LDggQEAgY2xhc3MgV2ViRnJhbWVJbXBsOwogLy8gSW4gZXNzZW5jZSwgdGhpcyBjbGFzcyB3
cmFwcyBXb3JrZXJNZXNzYWdpbmdQcm94eS4KIGNsYXNzIFdlYldvcmtlckNsaWVudEltcGwgOiBw
dWJsaWMgV2ViQ29yZTo6V29ya2VyQ29udGV4dFByb3h5CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICwgcHVibGljIFdlYkNvcmU6Oldvcmtlck9iamVjdFByb3h5Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICwgcHVibGljIE5ld1dlYldvcmtlckJhc2UKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgLCBwdWJsaWMgTmV3V2ViQ29tbW9uV29ya2VyQ2xpZW50IHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgLCBwdWJsaWMgV2ViV29ya2VyQmFzZQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAsIHB1YmxpYyBXZWJDb21tb25Xb3JrZXJDbGllbnQgewogcHVibGljOgogICAgIC8vIFdl
YkNvcmU6OldvcmtlckNvbnRleHRQcm94eSBGYWN0b3J5LgogICAgIHN0YXRpYyBXZWJDb3JlOjpX
b3JrZXJDb250ZXh0UHJveHkqIGNyZWF0ZVdvcmtlckNvbnRleHRQcm94eShXZWJDb3JlOjpXb3Jr
ZXIqKTsKQEAgLTEwNyw3ICsxMDcsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3MqKTsKIAogICAgIC8vIFdlYkNvbW1lbnRX
b3JrZXJCYXNlIG1ldGhvZHM6Ci0gICAgdmlydHVhbCBOZXdXZWJDb21tb25Xb3JrZXJDbGllbnQq
IG5ld0NvbW1vbkNsaWVudCgpIHsgcmV0dXJuIHRoaXM7IH0KKyAgICB2aXJ0dWFsIFdlYkNvbW1v
bldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50KCkgeyByZXR1cm4gdGhpczsgfQogICAgIHZpcnR1
YWwgV2ViVmlldyogdmlldygpIGNvbnN0OwogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViV29ya2VySW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJXb3JrZXJJbXBsLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggZGNiZmVlZS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJX
b3JrZXJJbXBsLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE2MyArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1
dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
LSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIldlYldvcmtlckltcGwuaCIKLQotI2luY2x1ZGUgIkNyb3NzVGhy
ZWFkVGFzay5oIgotI2luY2x1ZGUgIkRlZGljYXRlZFdvcmtlckNvbnRleHQuaCIKLSNpbmNsdWRl
ICJEZWRpY2F0ZWRXb3JrZXJUaHJlYWQuaCIKLSNpbmNsdWRlICJLVVJMLmgiCi0jaW5jbHVkZSAi
TWVzc2FnZUV2ZW50LmgiCi0jaW5jbHVkZSAiTWVzc2FnZVBvcnQuaCIKLSNpbmNsdWRlICJNZXNz
YWdlUG9ydENoYW5uZWwuaCIKLSNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCi0j
aW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKLSNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFs
dWUuaCIKLSNpbmNsdWRlICJTdWJzdGl0dXRlRGF0YS5oIgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIu
aD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+Ci0KLSNpbmNsdWRlICJQbGF0Zm9ybU1lc3Nh
Z2VQb3J0Q2hhbm5lbC5oIgotI2luY2x1ZGUgIldlYk1lc3NhZ2VQb3J0Q2hhbm5lbC5oIgotI2lu
Y2x1ZGUgInBsYXRmb3JtL1dlYlN0cmluZy5oIgotI2luY2x1ZGUgInBsYXRmb3JtL1dlYlVSTC5o
IgotI2luY2x1ZGUgIldlYldvcmtlckNsaWVudC5oIgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLSNpZiBFTkFCTEUoV09SS0VSUykKLQotV2ViV29y
a2VyKiBXZWJXb3JrZXI6OmNyZWF0ZShXZWJXb3JrZXJDbGllbnQqIGNsaWVudCkKLXsKLSAgICBy
ZXR1cm4gbmV3IFdlYldvcmtlckltcGwoY2xpZW50KTsKLX0KLQotCi1XZWJXb3JrZXJJbXBsOjpX
ZWJXb3JrZXJJbXBsKFdlYldvcmtlckNsaWVudCogY2xpZW50KQotICAgIDogbV9jbGllbnQoY2xp
ZW50KQotewotfQotCi1XZWJXb3JrZXJJbXBsOjp+V2ViV29ya2VySW1wbCgpCi17Ci19Ci0KLU5l
d1dlYkNvbW1vbldvcmtlckNsaWVudCogV2ViV29ya2VySW1wbDo6bmV3Q29tbW9uQ2xpZW50KCkK
LXsKLSAgICByZXR1cm4gbV9jbGllbnQ7Ci19Ci0KLVdlYkNvbW1vbldvcmtlckNsaWVudCogV2Vi
V29ya2VySW1wbDo6Y29tbW9uQ2xpZW50KCkKLXsKLSAgICByZXR1cm4gbV9jbGllbnQ7Ci19Ci0K
LXZvaWQgV2ViV29ya2VySW1wbDo6cG9zdE1lc3NhZ2VUb1dvcmtlckNvbnRleHRUYXNrKFdlYkNv
cmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJXb3JrZXJJbXBsKiB0aGlzUHRyLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
U3RyaW5nJiBtZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUGFzc093blB0cjxNZXNzYWdlUG9ydENoYW5uZWxBcnJheT4gY2hhbm5lbHMp
Ci17Ci0gICAgQVNTRVJUKGNvbnRleHQtPmlzV29ya2VyQ29udGV4dCgpKTsKLSAgICBEZWRpY2F0
ZWRXb3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0ID0KLSAgICAgICAgc3RhdGljX2Nhc3Q8RGVk
aWNhdGVkV29ya2VyQ29udGV4dCo+KGNvbnRleHQpOwotCi0gICAgT3duUHRyPE1lc3NhZ2VQb3J0
QXJyYXk+IHBvcnRzID0KLSAgICAgICAgTWVzc2FnZVBvcnQ6OmVudGFuZ2xlUG9ydHMoKmNvbnRl
eHQsIGNoYW5uZWxzKTsKLSAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxp
emVkTWVzc2FnZSA9Ci0gICAgICAgIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdp
cmUobWVzc2FnZSk7Ci0gICAgd29ya2VyQ29udGV4dC0+ZGlzcGF0Y2hFdmVudChNZXNzYWdlRXZl
bnQ6OmNyZWF0ZSgKLSAgICAgICAgcG9ydHMucmVsZWFzZSgpLCBzZXJpYWxpemVkTWVzc2FnZS5y
ZWxlYXNlKCkpKTsKLSAgICB0aGlzUHRyLT5jb25maXJtTWVzc2FnZUZyb21Xb3JrZXJPYmplY3Qo
d29ya2VyQ29udGV4dC0+aGFzUGVuZGluZ0FjdGl2aXR5KCkpOwotfQotCi0vLyBXZWJXb3JrZXIg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotCi12b2lkIFdlYldvcmtlckltcGw6OnN0YXJ0V29ya2VyQ29udGV4dChjb25z
dCBXZWJVUkwmIHNjcmlwdFVybCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFdlYlN0cmluZyYgdXNlckFnZW50LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgV2ViU3RyaW5nJiBzb3VyY2VDb2RlKQotewotICAgIGluaXRp
YWxpemVMb2FkZXIoc2NyaXB0VXJsKTsKLSAgICBzZXRXb3JrZXJUaHJlYWQoRGVkaWNhdGVkV29y
a2VyVGhyZWFkOjpjcmVhdGUoc2NyaXB0VXJsLCB1c2VyQWdlbnQsIHNvdXJjZUNvZGUsICp0aGlz
LCAqdGhpcywgRG9udFBhdXNlV29ya2VyQ29udGV4dE9uU3RhcnQpKTsKLSAgICAvLyBXb3JrZXIg
aW5pdGlhbGl6YXRpb24gbWVhbnMgYSBwZW5kaW5nIGFjdGl2aXR5LgotICAgIHJlcG9ydFBlbmRp
bmdBY3Rpdml0eSh0cnVlKTsKLSAgICB3b3JrZXJUaHJlYWQoKS0+c3RhcnQoKTsKLX0KLQotdm9p
ZCBXZWJXb3JrZXJJbXBsOjp0ZXJtaW5hdGVXb3JrZXJDb250ZXh0KCkKLXsKLSAgICBzdG9wV29y
a2VyVGhyZWFkKCk7Ci19Ci0KLXZvaWQgV2ViV29ya2VySW1wbDo6cG9zdE1lc3NhZ2VUb1dvcmtl
ckNvbnRleHQoY29uc3QgV2ViU3RyaW5nJiBtZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJNZXNzYWdlUG9ydENoYW5uZWxBcnJh
eSYgd2ViQ2hhbm5lbHMpCi17Ci0gICAgT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBj
aGFubmVsczsKLSAgICBpZiAod2ViQ2hhbm5lbHMuc2l6ZSgpKSB7Ci0gICAgICAgIGNoYW5uZWxz
ID0gYWRvcHRQdHIobmV3IE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5KHdlYkNoYW5uZWxzLnNpemUo
KSkpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdlYkNoYW5uZWxzLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgICAgICBSZWZQdHI8UGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWw+IHBs
YXRmb3JtX2NoYW5uZWwgPQotICAgICAgICAgICAgICAgIFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFu
bmVsOjpjcmVhdGUod2ViQ2hhbm5lbHNbaV0pOwotICAgICAgICAgICAgd2ViQ2hhbm5lbHNbaV0t
PnNldENsaWVudChwbGF0Zm9ybV9jaGFubmVsLmdldCgpKTsKLSAgICAgICAgICAgICgqY2hhbm5l
bHMpW2ldID0gTWVzc2FnZVBvcnRDaGFubmVsOjpjcmVhdGUocGxhdGZvcm1fY2hhbm5lbCk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICB3b3JrZXJUaHJlYWQoKS0+cnVuTG9vcCgpLnBvc3RUYXNr
KAotICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJnBvc3RNZXNzYWdlVG9Xb3JrZXJDb250ZXh0
VGFzaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3Mo
dGhpcyksIFN0cmluZyhtZXNzYWdlKSwgY2hhbm5lbHMucmVsZWFzZSgpKSk7Ci19Ci0KLXZvaWQg
V2ViV29ya2VySW1wbDo6d29ya2VyT2JqZWN0RGVzdHJveWVkKCkKLXsKLSAgICAvLyBXb3JrZXIg
b2JqZWN0IGluIHRoZSByZW5kZXJlciB3YXMgZGVzdHJveWVkLCBwZXJoYXBzIGEgcmVzdWx0IG9m
IEdDLgotICAgIC8vIEZvciB1cywgaXQncyBhIHNpZ25hbCB0byBzdGFydCB0ZXJtaW5hdGluZyB0
aGUgV29ya2VyQ29udGV4dCB0b28uCi0gICAgLy8gRklYTUU6IHdoZW4gJ2tpbGwgYSB3b3JrZXIn
IGh0bWw1IHNwZWMgYWxnb3JpdGhtIGlzIGltcGxlbWVudGVkLCBpdAotICAgIC8vIHNob3VsZCBi
ZSB1c2VkIGhlcmUgaW5zdGVhZCBvZiAndGVybWluYXRlIGEgd29ya2VyJy4KLSAgICB0ZXJtaW5h
dGVXb3JrZXJDb250ZXh0KCk7Ci19Ci0KLXZvaWQgV2ViV29ya2VySW1wbDo6Y2xpZW50RGVzdHJv
eWVkKCkKLXsKLSAgICBtX2NsaWVudCA9IDA7Ci19Ci0KLSNlbHNlCi0KLVdlYldvcmtlciogV2Vi
V29ya2VyOjpjcmVhdGUoV2ViV29ya2VyQ2xpZW50KiBjbGllbnQpCi17Ci0gICAgcmV0dXJuIDA7
Ci19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJJbXBsLmgg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJJbXBsLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDRmMDUyYTcuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViV29ya2VySW1wbC5oCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
Ci0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpZm5kZWYgV2ViV29ya2VySW1wbF9oCi0jZGVmaW5lIFdlYldvcmtlckltcGxfaAotCi0jaW5j
bHVkZSAiV2ViV29ya2VyLmgiCi0KLSNpZiBFTkFCTEUoV09SS0VSUykKLQotI2luY2x1ZGUgIlNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKLQotI2luY2x1ZGUgIldlYldvcmtlckJhc2UuaCIKLQot
bmFtZXNwYWNlIFdlYktpdCB7Ci0KLS8vIFRoaXMgY2xhc3MgaXMgdXNlZCBieSB0aGUgd29ya2Vy
IHByb2Nlc3MgY29kZSB0byB0YWxrIHRvIHRoZSBXZWJDb3JlOjpXb3JrZXIKLS8vIGltcGxlbWVu
dGF0aW9uLiAgSXQgY2FuJ3QgdXNlIGl0IGRpcmVjdGx5IHNpbmNlIGl0IHVzZXMgV2ViS2l0IHR5
cGVzLCBzbyB0aGlzCi0vLyBjbGFzcyBjb252ZXJ0cyB0aGUgZGF0YSB0eXBlcy4gIFdoZW4gdGhl
IFdlYkNvcmU6OldvcmtlciBvYmplY3Qgd2FudHMgdG8gY2FsbAotLy8gV2ViQ29yZTo6V29ya2Vy
T2JqZWN0UHJveHksIHRoaXMgY2xhc3Mgd2lsbCBjb252ZXIgdG8gQ2hyb21lIGRhdGEgdHlwZXMg
Zmlyc3QKLS8vIGFuZCB0aGVuIGNhbGwgdGhlIHN1cHBsaWVkIFdlYldvcmtlckNsaWVudC4KLWNs
YXNzIFdlYldvcmtlckltcGwgOiBwdWJsaWMgV2ViV29ya2VyQmFzZSwgcHVibGljIFdlYldvcmtl
ciB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgV2ViV29ya2VySW1wbChXZWJXb3JrZXJDbGllbnQq
IGNsaWVudCk7Ci0KLSAgICAvLyBXZWJXb3JrZXIgbWV0aG9kczoKLSAgICB2aXJ0dWFsIHZvaWQg
c3RhcnRXb3JrZXJDb250ZXh0KGNvbnN0IFdlYlVSTCYsIGNvbnN0IFdlYlN0cmluZyYsIGNvbnN0
IFdlYlN0cmluZyYpOwotICAgIHZpcnR1YWwgdm9pZCB0ZXJtaW5hdGVXb3JrZXJDb250ZXh0KCk7
Ci0gICAgdmlydHVhbCB2b2lkIHBvc3RNZXNzYWdlVG9Xb3JrZXJDb250ZXh0KGNvbnN0IFdlYlN0
cmluZyYsIGNvbnN0IFdlYk1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5Jik7Ci0gICAgdmlydHVhbCB2
b2lkIHdvcmtlck9iamVjdERlc3Ryb3llZCgpOwotICAgIHZpcnR1YWwgdm9pZCBjbGllbnREZXN0
cm95ZWQoKTsKLQotICAgIC8vIFdlYldvcmtlckJhc2UgbWV0aG9kczoKLSAgICB2aXJ0dWFsIFdl
YldvcmtlckNsaWVudCogY2xpZW50KCkgeyByZXR1cm4gbV9jbGllbnQ7IH0KLSAgICB2aXJ0dWFs
IFdlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50KCk7Ci0KLSAgICAvLyBOZXdXZWJX
b3JrZXJCYXNlIG1ldGhvZHM6Ci0gICAgdmlydHVhbCBOZXdXZWJDb21tb25Xb3JrZXJDbGllbnQq
IG5ld0NvbW1vbkNsaWVudCgpOwotCi1wcml2YXRlOgotICAgIHZpcnR1YWwgfldlYldvcmtlcklt
cGwoKTsKLQotICAgIC8vIFRhc2tzIHRoYXQgYXJlIHJ1biBvbiB0aGUgd29ya2VyIHRocmVhZC4K
LSAgICBzdGF0aWMgdm9pZCBwb3N0TWVzc2FnZVRvV29ya2VyQ29udGV4dFRhc2soCi0gICAgICAg
IFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCi0gICAgICAgIFdlYldv
cmtlckltcGwqIHRoaXNQdHIsCi0gICAgICAgIGNvbnN0IFdURjo6U3RyaW5nJiBtZXNzYWdlLAot
ICAgICAgICBQYXNzT3duUHRyPFdlYkNvcmU6Ok1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBjaGFu
bmVscyk7Ci0KLSAgICBXZWJXb3JrZXJDbGllbnQqIG1fY2xpZW50OwotfTsKLQotfSAvLyBuYW1l
c3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKLQotI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJGaWxlU3lzdGVtQ2FsbGJh
Y2tzQnJpZGdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckZpbGVTeXN0
ZW1DYWxsYmFja3NCcmlkZ2UuY3BwCmluZGV4IDUyM2VmNzUuLjhjZTVlNjkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlk
Z2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckZpbGVTeXN0ZW1D
YWxsYmFja3NCcmlkZ2UuY3BwCkBAIC0xNTYsNyArMTU2LDcgQEAgdm9pZCBXb3JrZXJGaWxlU3lz
dGVtQ2FsbGJhY2tzQnJpZGdlOjpzdG9wKCkKICAgICB9CiB9CiAKLXZvaWQgV29ya2VyRmlsZVN5
c3RlbUNhbGxiYWNrc0JyaWRnZTo6cG9zdE9wZW5GaWxlU3lzdGVtVG9NYWluVGhyZWFkKE5ld1dl
YkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50LCBXZWJGaWxlU3lzdGVtOjpUeXBlIHR5
cGUsIGxvbmcgbG9uZyBzaXplLCBib29sIGNyZWF0ZSwgY29uc3QgU3RyaW5nJiBtb2RlKQordm9p
ZCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpwb3N0T3BlbkZpbGVTeXN0ZW1Ub01h
aW5UaHJlYWQoV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQsIFdlYkZpbGVTeXN0
ZW06OlR5cGUgdHlwZSwgbG9uZyBsb25nIHNpemUsIGJvb2wgY3JlYXRlLCBjb25zdCBTdHJpbmcm
IG1vZGUpCiB7CiAgICAgZGlzcGF0Y2hUYXNrVG9NYWluVGhyZWFkKAogICAgICAgICBjcmVhdGVD
YWxsYmFja1Rhc2soJm9wZW5GaWxlU3lzdGVtT25NYWluVGhyZWFkLApAQCAtMjUxLDcgKzI1MSw3
IEBAIHZvaWQgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6cG9zdFJlYWREaXJlY3Rv
cnlUb01haW5UaHJlYWQoV2ViRmlsZVN5c3RlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBB
bGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHRoaXMpLCBtb2RlKSk7CiB9CiAKLXZvaWQgV29ya2VyRmls
ZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6b3BlbkZpbGVTeXN0ZW1Pbk1haW5UaHJlYWQoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIE5ld1dlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50
LCBXZWJGaWxlU3lzdGVtOjpUeXBlIHR5cGUsIGxvbmcgbG9uZyBzaXplLCBib29sIGNyZWF0ZSwg
V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZSogYnJpZGdlLCBjb25zdCBTdHJpbmcmIG1v
ZGUpCit2b2lkIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6Om9wZW5GaWxlU3lzdGVt
T25NYWluVGhyZWFkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJDb21tb25Xb3JrZXJDbGll
bnQqIGNvbW1vbkNsaWVudCwgV2ViRmlsZVN5c3RlbTo6VHlwZSB0eXBlLCBsb25nIGxvbmcgc2l6
ZSwgYm9vbCBjcmVhdGUsIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UqIGJyaWRnZSwg
Y29uc3QgU3RyaW5nJiBtb2RlKQogewogICAgIGlmICghY29tbW9uQ2xpZW50KQogICAgICAgICBi
cmlkZ2UtPmRpZEZhaWxPbk1haW5UaHJlYWQoV2ViRmlsZUVycm9yQWJvcnQsIG1vZGUpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyRmlsZVN5c3RlbUNhbGxi
YWNrc0JyaWRnZS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyRmlsZVN5c3Rl
bUNhbGxiYWNrc0JyaWRnZS5oCmluZGV4IDhhZTdlYjMuLjljNDRjYjEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2Uu
aAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJGaWxlU3lzdGVtQ2FsbGJh
Y2tzQnJpZGdlLmgKQEAgLTUxLDcgKzUxLDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNz
IEFzeW5jRmlsZVN5c3RlbTsKIGNsYXNzIE1haW5UaHJlYWRGaWxlU3lzdGVtQ2FsbGJhY2tzOwot
Y2xhc3MgTmV3V2ViQ29tbW9uV29ya2VyQ2xpZW50OworY2xhc3MgV2ViQ29tbW9uV29ya2VyQ2xp
ZW50OwogY2xhc3MgVGhyZWFkYWJsZUNhbGxiYWNrc0JyaWRnZVdyYXBwZXI7CiBjbGFzcyBXZWJG
aWxlU3lzdGVtQ2FsbGJhY2tzOwogc3RydWN0IFdlYkZpbGVJbmZvOwpAQCAtODcsNyArODcsNyBA
QCBwdWJsaWM6CiAgICAgfQogCiAgICAgLy8gTWV0aG9kcyB0aGF0IGNyZWF0ZSBhbiBpbnN0YW5j
ZSBhbmQgcG9zdCBhbiBpbml0aWFsIHJlcXVlc3QgdGFzayB0byB0aGUgbWFpbiB0aHJlYWQuIFRo
ZXkgbXVzdCBiZSBjYWxsZWQgb24gdGhlIHdvcmtlciB0aHJlYWQuCi0gICAgdm9pZCBwb3N0T3Bl
bkZpbGVTeXN0ZW1Ub01haW5UaHJlYWQoTmV3V2ViQ29tbW9uV29ya2VyQ2xpZW50KiwgV2ViRmls
ZVN5c3RlbTo6VHlwZSwgbG9uZyBsb25nIHNpemUsIGJvb2wgY3JlYXRlLCBjb25zdCBTdHJpbmcm
IG1vZGUpOworICAgIHZvaWQgcG9zdE9wZW5GaWxlU3lzdGVtVG9NYWluVGhyZWFkKFdlYkNvbW1v
bldvcmtlckNsaWVudCosIFdlYkZpbGVTeXN0ZW06OlR5cGUsIGxvbmcgbG9uZyBzaXplLCBib29s
IGNyZWF0ZSwgY29uc3QgU3RyaW5nJiBtb2RlKTsKICAgICB2b2lkIHBvc3RNb3ZlVG9NYWluVGhy
ZWFkKFdlYkZpbGVTeXN0ZW0qLCBjb25zdCBXZWJDb3JlOjpLVVJMJiBzcmNQYXRoLCBjb25zdCBX
ZWJDb3JlOjpLVVJMJiBkZXN0UGF0aCwgY29uc3QgU3RyaW5nJiBtb2RlKTsKICAgICB2b2lkIHBv
c3RDb3B5VG9NYWluVGhyZWFkKFdlYkZpbGVTeXN0ZW0qLCBjb25zdCBXZWJDb3JlOjpLVVJMJiBz
cmNQYXRoLCBjb25zdCBXZWJDb3JlOjpLVVJMJiBkZXN0UGF0aCwgY29uc3QgU3RyaW5nJiBtb2Rl
KTsKICAgICB2b2lkIHBvc3RSZW1vdmVUb01haW5UaHJlYWQoV2ViRmlsZVN5c3RlbSosIGNvbnN0
IFdlYkNvcmU6OktVUkwmIHBhdGgsIGNvbnN0IFN0cmluZyYgbW9kZSk7CkBAIC0xMTAsNyArMTEw
LDcgQEAgcHJpdmF0ZToKICAgICBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlKFdlYkNv
cmU6OldvcmtlckxvYWRlclByb3h5KiwgV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IFdlYkZpbGVTeXN0ZW1DYWxsYmFja3MqKTsKIAogICAgIC8vIE1ldGhvZHMgdGhhdCBhcmUgdG8g
YmUgY2FsbGVkIG9uIHRoZSBtYWluIHRocmVhZC4KLSAgICBzdGF0aWMgdm9pZCBvcGVuRmlsZVN5
c3RlbU9uTWFpblRocmVhZChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgTmV3V2Vi
Q29tbW9uV29ya2VyQ2xpZW50KiwgV2ViRmlsZVN5c3RlbTo6VHlwZSwgbG9uZyBsb25nIHNpemUs
IGJvb2wgY3JlYXRlLCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlKiwgY29uc3QgU3Ry
aW5nJiBtb2RlKTsKKyAgICBzdGF0aWMgdm9pZCBvcGVuRmlsZVN5c3RlbU9uTWFpblRocmVhZChX
ZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViQ29tbW9uV29ya2VyQ2xpZW50Kiwg
V2ViRmlsZVN5c3RlbTo6VHlwZSwgbG9uZyBsb25nIHNpemUsIGJvb2wgY3JlYXRlLCBXb3JrZXJG
aWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlKiwgY29uc3QgU3RyaW5nJiBtb2RlKTsKICAgICBzdGF0
aWMgdm9pZCBtb3ZlT25NYWluVGhyZWFkKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBXZWJGaWxlU3lzdGVtKiwgY29uc3QgV2ViQ29yZTo6S1VSTCYgc3JjUGF0aCwgY29uc3QgV2Vi
Q29yZTo6S1VSTCYgZGVzdFBhdGgsIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UqLCBj
b25zdCBTdHJpbmcmIG1vZGUpOwogICAgIHN0YXRpYyB2b2lkIGNvcHlPbk1haW5UaHJlYWQoV2Vi
Q29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYkZpbGVTeXN0ZW0qLCBjb25zdCBXZWJD
b3JlOjpLVVJMJiBzcmNQYXRoLCBjb25zdCBXZWJDb3JlOjpLVVJMJiBkZXN0UGF0aCwgV29ya2Vy
RmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZSosIGNvbnN0IFN0cmluZyYgbW9kZSk7CiAgICAgc3Rh
dGljIHZvaWQgcmVtb3ZlT25NYWluVGhyZWFkKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBXZWJGaWxlU3lzdGVtKiwgY29uc3QgV2ViQ29yZTo6S1VSTCYgcGF0aCwgV29ya2VyRmls
ZVN5c3RlbUNhbGxiYWNrc0JyaWRnZSosIGNvbnN0IFN0cmluZyYgbW9kZSk7CmRpZmYgLS1naXQg
YS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggOWFjMDk4Yy4uZjVhMTg4
NCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDIxIEBACisyMDExLTEyLTIyICBEbWl0cnkgTG9tb3YgIDxkc2xvbW92QGdvb2dsZS5j
b20+CisKKyAgICAgICAgW1dlYldvcmtlcnNdW0Nocm9taXVtXSBSZW1vdmUgcmVtYWlucyBvZiBj
cm9zcy1wcm9jZXNzIGRlZGljYXRlZCB3b3JrZXIgaW1wbGVtZW50YXRpb24uCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NjUwOQorICAgICAgICBKdXN0
IHJlbmFtZXMsIG1lcmdlcyBhbmQgcmVtb3ZhbCBvZiBkZWFkIGNvZGUuIEhlcmUgYXJlIHRoZSBs
aXN0IG9mIHJlbmFtZXM6CisgICAgICAgICAgLSBXZWJDb21tb25Xb3JrZXJDbGllbnQgbWVyZ2Vk
IHdpdGggV2ViV29ya2VyQ2xpZW50IGFuZCByZW5hbWVkIHRvIFdlYlNoYXJlZFdvcmtlckNsaWVu
dAorICAgICAgICAgIC0gTmV3V2ViQ29tbW9uV29ya2VyQ2xpZW50IHJlbmFtZWQgdG8gV2ViQ29t
bW9uV29ya2VyQ2xpZW50CisgICAgICAgICAgLSBXZWJXb3JrZXJCYXNlIG1lcmdlZCBpbnRvIFdl
YlNoYXJlZFdvcmtlckltcGwKKyAgICAgICAgICAtIE5ld1dlYldvcmtlckJhc2UgcmVuYW1lZCBp
bnRvIFdlYldvcmtlckJhc2UKKyAKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGF2aWQgTGV2aW4uCisK
KyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0V2ViV29ya2VyLmg6CisgICAg
ICAgIChUZXN0V2ViV29ya2VyOjpjcmVhdGVXb3JrZXIpOgorICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmNwcDoKKyAgICAgICAgKFdlYlZpZXdIb3N0OjpjcmVh
dGVXb3JrZXIpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0
Lmg6CisKIDIwMTEtMTItMjIgIEFkYW0gUm9iZW4gIDxhcm9iZW5AYXBwbGUuY29tPgogCiAgICAg
ICAgIFNub3cgTGVvcGFyZCB0ZXN0IGZpeApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vVGVzdFdlYldvcmtlci5oIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vVGVzdFdlYldvcmtlci5oCmluZGV4IDcxYmZmY2UuLmFkODJhODcgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RXZWJXb3JrZXIuaAorKysgYi9Ub29scy9E
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0V2ViV29ya2VyLmgKQEAgLTMyLDggKzMyLDggQEAK
ICNkZWZpbmUgVGVzdFdlYldvcmtlcl9oCiAKICNpbmNsdWRlICJXZWJNZXNzYWdlUG9ydENoYW5u
ZWwuaCIKKyNpbmNsdWRlICJXZWJTaGFyZWRXb3JrZXJDbGllbnQuaCIKICNpbmNsdWRlICJXZWJX
b3JrZXIuaCIKLSNpbmNsdWRlICJXZWJXb3JrZXJDbGllbnQuaCIKICNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTQzLDcgKzQzLDcgQEAgY2xhc3Mg
V2ViVVJMOwogfQogCiBjbGFzcyBUZXN0V2ViV29ya2VyIDogcHVibGljIFdlYktpdDo6V2ViV29y
a2VyLAotICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBXZWJLaXQ6OldlYldvcmtlckNsaWVu
dCwKKyAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgV2ViS2l0OjpXZWJTaGFyZWRXb3JrZXJD
bGllbnQsCiAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFdURjo6UmVmQ291bnRlZDxUZXN0
V2ViV29ya2VyPiB7CiBwdWJsaWM6CiAgICAgVGVzdFdlYldvcmtlcigpCkBAIC04MCw3ICs4MCw3
IEBAIHB1YmxpYzoKICAgICAgICAgLy8gUmVsZWFzZXMgdGhlIHJlZmVyZW5jZSBoZWxkIGZvciB3
b3JrZXIgY29udGV4dCBvYmplY3QuCiAgICAgICAgIGRlcmVmKCk7CiAgICAgfQotICAgIHZpcnR1
YWwgV2ViS2l0OjpXZWJXb3JrZXIqIGNyZWF0ZVdvcmtlcihXZWJLaXQ6OldlYldvcmtlckNsaWVu
dCopIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIFdlYktpdDo6V2ViV29ya2VyKiBjcmVhdGVX
b3JrZXIoV2ViS2l0OjpXZWJTaGFyZWRXb3JrZXJDbGllbnQqKSB7IHJldHVybiAwOyB9CiAgICAg
dmlydHVhbCBXZWJLaXQ6OldlYk5vdGlmaWNhdGlvblByZXNlbnRlciogbm90aWZpY2F0aW9uUHJl
c2VudGVyKCkgeyByZXR1cm4gMDsgfQogICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJBcHBsaWNhdGlv
bkNhY2hlSG9zdCogY3JlYXRlQXBwbGljYXRpb25DYWNoZUhvc3QoV2ViS2l0OjpXZWJBcHBsaWNh
dGlvbkNhY2hlSG9zdENsaWVudCopIHsgcmV0dXJuIDA7IH0KICAgICB2aXJ0dWFsIGJvb2wgYWxs
b3dEYXRhYmFzZShXZWJLaXQ6OldlYkZyYW1lKiwgY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmLCBj
b25zdCBXZWJLaXQ6OldlYlN0cmluZyYsIHVuc2lnbmVkIGxvbmcpIHsgcmV0dXJuIHRydWU7IH0K
ZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmNw
cCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmNwcAppbmRleCBm
ZmUzYjE2Li4yNGJkNDhmIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9XZWJWaWV3SG9zdC5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2Vi
Vmlld0hvc3QuY3BwCkBAIC04MzYsNyArODM2LDcgQEAgV2ViUGx1Z2luKiBXZWJWaWV3SG9zdDo6
Y3JlYXRlUGx1Z2luKFdlYkZyYW1lKiBmcmFtZSwgY29uc3QgV2ViUGx1Z2luUGFyYW1zJiBwYXIK
ICAgICByZXR1cm4gd2Via2l0X3N1cHBvcnQ6OkNyZWF0ZVdlYlBsdWdpbihmcmFtZSwgcGFyYW1z
KTsKIH0KIAotV2ViV29ya2VyKiBXZWJWaWV3SG9zdDo6Y3JlYXRlV29ya2VyKFdlYkZyYW1lKiwg
V2ViV29ya2VyQ2xpZW50KikKK1dlYldvcmtlciogV2ViVmlld0hvc3Q6OmNyZWF0ZVdvcmtlcihX
ZWJGcmFtZSosIFdlYlNoYXJlZFdvcmtlckNsaWVudCopCiB7CiAgICAgcmV0dXJuIG5ldyBUZXN0
V2ViV29ya2VyKCk7CiB9CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9XZWJWaWV3SG9zdC5oIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hv
c3QuaAppbmRleCA5MjIxNjNhLi5hMmY3YmNhIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5oCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL1dlYlZpZXdIb3N0LmgKQEAgLTU1LDYgKzU1LDcgQEAgY2xhc3MgV2ViRGV2aWNlT3Jp
ZW50YXRpb25DbGllbnRNb2NrOwogY2xhc3MgV2ViR2VvbG9jYXRpb25DbGllbnQ7CiBjbGFzcyBX
ZWJHZW9sb2NhdGlvbkNsaWVudE1vY2s7CiBjbGFzcyBXZWJHZW9sb2NhdGlvblNlcnZpY2VNb2Nr
OworY2xhc3MgV2ViU2hhcmVkV29ya2VyQ2xpZW50OwogY2xhc3MgV2ViU3BlZWNoSW5wdXRDb250
cm9sbGVyOwogY2xhc3MgV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyTW9jazsKIGNsYXNzIFdlYlNw
ZWVjaElucHV0TGlzdGVuZXI7CkBAIC0xNzMsNyArMTc0LDcgQEAgY2xhc3MgV2ViVmlld0hvc3Qg
OiBwdWJsaWMgV2ViS2l0OjpXZWJTcGVsbENoZWNrQ2xpZW50LCBwdWJsaWMgV2ViS2l0OjpXZWJW
aWV3Q2wKIAogICAgIC8vIFdlYktpdDo6V2ViRnJhbWVDbGllbnQKICAgICB2aXJ0dWFsIFdlYktp
dDo6V2ViUGx1Z2luKiBjcmVhdGVQbHVnaW4oV2ViS2l0OjpXZWJGcmFtZSosIGNvbnN0IFdlYktp
dDo6V2ViUGx1Z2luUGFyYW1zJik7Ci0gICAgdmlydHVhbCBXZWJLaXQ6OldlYldvcmtlciogY3Jl
YXRlV29ya2VyKFdlYktpdDo6V2ViRnJhbWUqLCBXZWJLaXQ6OldlYldvcmtlckNsaWVudCopOwor
ICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJXb3JrZXIqIGNyZWF0ZVdvcmtlcihXZWJLaXQ6OldlYkZy
YW1lKiwgV2ViS2l0OjpXZWJTaGFyZWRXb3JrZXJDbGllbnQqKTsKICAgICB2aXJ0dWFsIFdlYktp
dDo6V2ViTWVkaWFQbGF5ZXIqIGNyZWF0ZU1lZGlhUGxheWVyKFdlYktpdDo6V2ViRnJhbWUqLCBX
ZWJLaXQ6OldlYk1lZGlhUGxheWVyQ2xpZW50Kik7CiAgICAgdmlydHVhbCBXZWJLaXQ6OldlYkFw
cGxpY2F0aW9uQ2FjaGVIb3N0KiBjcmVhdGVBcHBsaWNhdGlvbkNhY2hlSG9zdChXZWJLaXQ6Oldl
YkZyYW1lKiwgV2ViS2l0OjpXZWJBcHBsaWNhdGlvbkNhY2hlSG9zdENsaWVudCopOwogICAgIHZp
cnR1YWwgdm9pZCBsb2FkVVJMRXh0ZXJuYWxseShXZWJLaXQ6OldlYkZyYW1lKiwgY29uc3QgV2Vi
S2l0OjpXZWJVUkxSZXF1ZXN0JiwgV2ViS2l0OjpXZWJOYXZpZ2F0aW9uUG9saWN5KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120405</attachid>
            <date>2011-12-22 16:27:13 -0800</date>
            <delta_ts>2011-12-28 15:30:27 -0800</delta_ts>
            <desc>CR feedback</desc>
            <filename>66509.patch</filename>
            <type>text/plain</type>
            <size>82697</size>
            <attacher name="Dmitry Lomov">dslomov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggZjQwNzFhMi4uY2IzOGQ4NiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4NyBAQAorMjAxMS0xMi0yMiAgRG1pdHJ5IExv
bW92ICA8ZHNsb21vdkBnb29nbGUuY29tPgorCisgICAgICAgIFtXZWJXb3JrZXJzXVtDaHJvbWl1
bV0gUmVtb3ZlIHJlbWFpbnMgb2YgY3Jvc3MtcHJvY2VzcyBkZWRpY2F0ZWQgd29ya2VyIGltcGxl
bWVudGF0aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NjY1MDkKKyAgICAgICAgSnVzdCByZW5hbWVzLCBtZXJnZXMgYW5kIHJlbW92YWwgb2YgZGVh
ZCBjb2RlLiBIZXJlIGFyZSB0aGUgbGlzdCBvZiByZW5hbWVzOgorICAgICAgICAgIC0gV2ViQ29t
bW9uV29ya2VyQ2xpZW50IG1lcmdlZCB3aXRoIFdlYldvcmtlckNsaWVudCBhbmQgcmVuYW1lZCB0
byBXZWJTaGFyZWRXb3JrZXJDbGllbnQKKyAgICAgICAgICAtIE5ld1dlYkNvbW1vbldvcmtlckNs
aWVudCByZW5hbWVkIHRvIFdlYkNvbW1vbldvcmtlckNsaWVudAorICAgICAgICAgIC0gV2ViV29y
a2VyQmFzZSBtZXJnZWQgaW50byBXZWJTaGFyZWRXb3JrZXJJbXBsCisgICAgICAgICAgLSBOZXdX
ZWJXb3JrZXJCYXNlIHJlbmFtZWQgaW50byBXZWJXb3JrZXJCYXNlCisgICAgICAgIFdlYldvcmtl
ckNsaWVudC5oIGhhcyBhICIjZGVmaW5lIFdlYldvcmtlckNsaWVudCBXZWJTaGFyZWRXb3JrZXJD
bGllbnQiIHRvIGtlZXAgY2hyb21pdW0gYnVpbGRpbmcuCisgICAgICAgIFdpbGwgYmUgcmVtb3Zl
ZCBhZnRlciBjb29yZGluYXRlZCBwYXRjaCBpbiBjaHJvbWl1bS4KKworICAgICAgICBSZXZpZXdl
ZCBieSBEYXZpZCBMZXZpbi4KKworICAgICAgICAqIFdlYktpdC5neXA6CisgICAgICAgICogcHVi
bGljL1dlYkNvbW1vbldvcmtlckNsaWVudC5oOgorICAgICAgICAqIHB1YmxpYy9XZWJTaGFyZWRX
b3JrZXIuaDoKKyAgICAgICAgKiBwdWJsaWMvV2ViU2hhcmVkV29ya2VyQ2xpZW50Lmg6IENvcGll
ZCBmcm9tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNvbW1vbldvcmtlckNsaWVu
dC5oLgorICAgICAgICAoV2ViS2l0OjpXZWJTaGFyZWRXb3JrZXJDbGllbnQ6OnBvc3RDb25zb2xl
TWVzc2FnZVRvV29ya2VyT2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViU2hhcmVkV29ya2Vy
Q2xpZW50OjphbGxvd0ZpbGVTeXN0ZW0pOgorICAgICAgICAoV2ViS2l0OjpXZWJTaGFyZWRXb3Jr
ZXJDbGllbnQ6Om9wZW5GaWxlU3lzdGVtKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2hhcmVkV29y
a2VyQ2xpZW50OjpkaXNwYXRjaERldlRvb2xzTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlNoYXJlZFdvcmtlckNsaWVudDo6c2F2ZURldlRvb2xzQWdlbnRTdGF0ZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlNoYXJlZFdvcmtlckNsaWVudDo6fldlYlNoYXJlZFdvcmtlckNsaWVudCk6Cisg
ICAgICAgICogcHVibGljL1dlYldvcmtlckNsaWVudC5oOgorICAgICAgICAqIHNyYy9EYXRhYmFz
ZU9ic2VydmVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6QWxsb3dEYXRhYmFzZU1haW5UaHJlYWRC
cmlkZ2U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkFsbG93RGF0YWJhc2VNYWluVGhyZWFk
QnJpZGdlOjpBbGxvd0RhdGFiYXNlTWFpblRocmVhZEJyaWRnZSk6CisgICAgICAgIChXZWJLaXQ6
OkFsbG93RGF0YWJhc2VNYWluVGhyZWFkQnJpZGdlOjphbGxvd0RhdGFiYXNlVGFzayk6CisgICAg
ICAgIChXZWJLaXQ6OmFsbG93RGF0YWJhc2VGb3JXb3JrZXIpOgorICAgICAgICAoV2ViQ29yZTo6
RGF0YWJhc2VPYnNlcnZlcjo6Y2FuRXN0YWJsaXNoRGF0YWJhc2UpOgorICAgICAgICAqIHNyYy9J
REJGYWN0b3J5QmFja2VuZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6SURCRmFjdG9yeUJh
Y2tlbmRQcm94eTo6b3BlbkZyb21Xb3JrZXIpOgorICAgICAgICAqIHNyYy9Mb2NhbEZpbGVTeXN0
ZW1DaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpvcGVuRmlsZVN5c3RlbUhlbHBlcik6
CisgICAgICAgICogc3JjL1dlYlNoYXJlZFdvcmtlckltcGwuY3BwOgorICAgICAgICAoV2ViS2l0
Ojppbml0aWFsaXplV2ViS2l0U3RhdGljVmFsdWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2hh
cmVkV29ya2VySW1wbDo6V2ViU2hhcmVkV29ya2VySW1wbCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlNoYXJlZFdvcmtlckltcGw6On5XZWJTaGFyZWRXb3JrZXJJbXBsKToKKyAgICAgICAgKFdlYktp
dDo6V2ViU2hhcmVkV29ya2VySW1wbDo6c3RvcFdvcmtlclRocmVhZCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlNoYXJlZFdvcmtlckltcGw6OmluaXRpYWxpemVMb2FkZXIpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJTaGFyZWRXb3JrZXJJbXBsOjpkaWRDcmVhdGVEYXRhU291cmNlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViU2hhcmVkV29ya2VySW1wbDo6Y3JlYXRlQXBwbGljYXRpb25DYWNoZUhvc3Qp
OgorICAgICAgICAoV2ViS2l0OjpXZWJTaGFyZWRXb3JrZXJJbXBsOjpwb3N0TWVzc2FnZVRvV29y
a2VyT2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViU2hhcmVkV29ya2VySW1wbDo6cG9zdE1l
c3NhZ2VUYXNrKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2hhcmVkV29ya2VySW1wbDo6cG9zdEV4
Y2VwdGlvblRvV29ya2VyT2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViU2hhcmVkV29ya2Vy
SW1wbDo6cG9zdEV4Y2VwdGlvblRhc2spOgorICAgICAgICAoV2ViS2l0OjpXZWJTaGFyZWRXb3Jr
ZXJJbXBsOjpwb3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlNoYXJlZFdvcmtlckltcGw6OnBvc3RDb25zb2xlTWVzc2FnZVRhc2spOgorICAgICAg
ICAoV2ViS2l0OjpXZWJTaGFyZWRXb3JrZXJJbXBsOjpwb3N0TWVzc2FnZVRvUGFnZUluc3BlY3Rv
cik6CisgICAgICAgIChXZWJLaXQ6OldlYlNoYXJlZFdvcmtlckltcGw6OnBvc3RNZXNzYWdlVG9Q
YWdlSW5zcGVjdG9yVGFzayk6CisgICAgICAgIChXZWJLaXQ6OldlYlNoYXJlZFdvcmtlckltcGw6
OnVwZGF0ZUluc3BlY3RvclN0YXRlQ29va2llKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2hhcmVk
V29ya2VySW1wbDo6dXBkYXRlSW5zcGVjdG9yU3RhdGVDb29raWVUYXNrKToKKyAgICAgICAgKFdl
YktpdDo6V2ViU2hhcmVkV29ya2VySW1wbDo6Y29uZmlybU1lc3NhZ2VGcm9tV29ya2VyT2JqZWN0
KToKKyAgICAgICAgKFdlYktpdDo6V2ViU2hhcmVkV29ya2VySW1wbDo6Y29uZmlybU1lc3NhZ2VU
YXNrKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2hhcmVkV29ya2VySW1wbDo6cmVwb3J0UGVuZGlu
Z0FjdGl2aXR5KToKKyAgICAgICAgKFdlYktpdDo6V2ViU2hhcmVkV29ya2VySW1wbDo6cmVwb3J0
UGVuZGluZ0FjdGl2aXR5VGFzayk6CisgICAgICAgIChXZWJLaXQ6OldlYlNoYXJlZFdvcmtlcklt
cGw6OndvcmtlckNvbnRleHRDbG9zZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJTaGFyZWRXb3Jr
ZXJJbXBsOjp3b3JrZXJDb250ZXh0Q2xvc2VkVGFzayk6CisgICAgICAgIChXZWJLaXQ6OldlYlNo
YXJlZFdvcmtlckltcGw6OndvcmtlckNvbnRleHREZXN0cm95ZWQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJTaGFyZWRXb3JrZXJJbXBsOjp3b3JrZXJDb250ZXh0RGVzdHJveWVkVGFzayk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlNoYXJlZFdvcmtlckltcGw6OnBvc3RUYXNrVG9Mb2FkZXIpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJTaGFyZWRXb3JrZXJJbXBsOjpwb3N0VGFza0Zvck1vZGVUb1dvcmtl
ckNvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJTaGFyZWRXb3JrZXI6OmNyZWF0ZSk6Cisg
ICAgICAgICogc3JjL1dlYlNoYXJlZFdvcmtlckltcGwuaDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
U2hhcmVkV29ya2VySW1wbDo6dmlldyk6CisgICAgICAgIChXZWJLaXQ6OldlYlNoYXJlZFdvcmtl
ckltcGw6OmNvbW1vbkNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNoYXJlZFdvcmtlcklt
cGw6OmNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNoYXJlZFdvcmtlckltcGw6OnNldFdv
cmtlclRocmVhZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNoYXJlZFdvcmtlckltcGw6Ondvcmtl
clRocmVhZCk6CisgICAgICAgICogc3JjL1dlYldvcmtlckJhc2UuY3BwOgorICAgICAgICAoV2Vi
S2l0OjppbnZva2VUYXNrTWV0aG9kKToKKyAgICAgICAgKFdlYktpdDo6V2ViV29ya2VyQmFzZTo6
ZGlzcGF0Y2hUYXNrVG9NYWluVGhyZWFkKToKKyAgICAgICAgKiBzcmMvV2ViV29ya2VyQmFzZS5o
OgorICAgICAgICAqIHNyYy9XZWJXb3JrZXJDbGllbnRJbXBsLmNwcDoKKyAgICAgICAgKiBzcmMv
V2ViV29ya2VyQ2xpZW50SW1wbC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJXb3JrZXJDbGllbnRJ
bXBsOjpjb21tb25DbGllbnQpOgorICAgICAgICAqIHNyYy9XZWJXb3JrZXJJbXBsLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBzcmMvV2ViV29ya2VySW1wbC5oOiBSZW1vdmVkLgorICAgICAgICAq
IHNyYy9Xb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6cG9zdE9wZW5GaWxlU3lzdGVtVG9N
YWluVGhyZWFkKToKKyAgICAgICAgKFdlYktpdDo6V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0Jy
aWRnZTo6b3BlbkZpbGVTeXN0ZW1Pbk1haW5UaHJlYWQpOgorICAgICAgICAqIHNyYy9Xb3JrZXJG
aWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlLmg6CisKIDIwMTEtMTItMjEgIFBldGVyIEtvdHdpY3og
IDxwa290d2ljekBnb29nbGUuY29tPgogCiAgICAgICAgIFBsdW1icyByZWZyZXNoIHJhdGUgdGhy
b3VnaCBXZWJMYXllclRyZWVWaWV3OjpTZXR0aW5ncwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9XZWJLaXQuZ3lwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lw
CmluZGV4IDc0NzZiMjYuLjU3ZThhYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vV2ViS2l0Lmd5cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKQEAg
LTIzNiw2ICsyMzYsNyBAQAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViU2VjdXJpdHlQb2xp
Y3kuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJTZWxlY3RFbGVtZW50LmgnLAogICAg
ICAgICAgICAgICAgICdwdWJsaWMvV2ViU2V0dGluZ3MuaCcsCisgICAgICAgICAgICAgICAgJ3B1
YmxpYy9XZWJTaGFyZWRXb3JrZXJDbGllbnQuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9X
ZWJTaGFyZWRXb3JrZXIuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJTaGFyZWRXb3Jr
ZXJSZXBvc2l0b3J5LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViU29ja2V0LmgnLApA
QCAtNjY2LDggKzY2Nyw2IEBACiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJXb3JrZXJCYXNlLmgn
LAogICAgICAgICAgICAgICAgICdzcmMvV2ViV29ya2VyQ2xpZW50SW1wbC5jcHAnLAogICAgICAg
ICAgICAgICAgICdzcmMvV2ViV29ya2VyQ2xpZW50SW1wbC5oJywKLSAgICAgICAgICAgICAgICAn
c3JjL1dlYldvcmtlckltcGwuY3BwJywKLSAgICAgICAgICAgICAgICAnc3JjL1dlYldvcmtlcklt
cGwuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJXb3JrZXJSdW5Mb29wLmNwcCcsCiAgICAg
ICAgICAgICAgICAgJ3NyYy9Xb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAnLAogICAg
ICAgICAgICAgICAgICdzcmMvV29ya2VyQXN5bmNGaWxlU3lzdGVtQ2hyb21pdW0uaCcsCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDb21tb25Xb3JrZXJDbGll
bnQuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNvbW1vbldvcmtlckNsaWVu
dC5oCmluZGV4IGE3OTQ1MzkuLjJmZmI1NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vcHVibGljL1dlYkNvbW1vbldvcmtlckNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYkNvbW1vbldvcmtlckNsaWVudC5oCkBAIC00NCw3ICs0NCw3IEBA
IGNsYXNzIFdlYlN0cmluZzsKIGNsYXNzIFdlYldvcmtlcjsKIGNsYXNzIFdlYldvcmtlckNsaWVu
dDsKIAotY2xhc3MgTmV3V2ViQ29tbW9uV29ya2VyQ2xpZW50IHsKK2NsYXNzIFdlYkNvbW1vbldv
cmtlckNsaWVudCB7CiBwdWJsaWM6CiAgICAgLy8gQ2FsbGVkIG9uIHRoZSBtYWluIHdlYmtpdCB0
aHJlYWQgYmVmb3JlIG9wZW5pbmcgYSB3ZWIgZGF0YWJhc2UuCiAgICAgdmlydHVhbCBib29sIGFs
bG93RGF0YWJhc2UoV2ViRnJhbWUqLCBjb25zdCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYlN0
cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkgPSAwOwpAQCAt
NTYsNjYgKzU2LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBvcGVuRmlsZVN5c3RlbShX
ZWJGaWxlU3lzdGVtOjpUeXBlLCBsb25nIGxvbmcgc2l6ZSwgYm9vbCBjcmVhdGUsIFdlYkZpbGVT
eXN0ZW1DYWxsYmFja3MqKSA9IDA7CiB9OwogCi0vLyBQcm92aWRlcyBhbiBpbnRlcmZhY2UgYmFj
ayB0byB0aGUgaW4tcGFnZSBzY3JpcHQgb2JqZWN0IGZvciBhIHdvcmtlci4KLS8vIFRoaXMgaW50
ZXJmYWNlIGNvbnRhaW5zIGNvbW1vbiBBUElzIHVzZWQgYnkgYm90aCBzaGFyZWQgYW5kIGRlZGlj
YXRlZAotLy8gd29ya2Vycy4KLS8vIEFsbCBmdW5jdGlvbnMgYXJlIGV4cGVjdGVkIHRvIGJlIGNh
bGxlZCBiYWNrIG9uIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkCi0vLyB0aGUgV29ya2VyIG9iamVj
dCwgdW5sZXNzIG5vdGVkLgotY2xhc3MgV2ViQ29tbW9uV29ya2VyQ2xpZW50IDogcHVibGljIE5l
d1dlYkNvbW1vbldvcmtlckNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIHBvc3RF
eGNlcHRpb25Ub1dvcmtlck9iamVjdCgKLSAgICAgICAgY29uc3QgV2ViU3RyaW5nJiBlcnJvclN0
cmluZywgaW50IGxpbmVOdW1iZXIsCi0gICAgICAgIGNvbnN0IFdlYlN0cmluZyYgc291cmNlVVJM
KSA9IDA7Ci0KLSAgICAvLyBGSVhNRTogdGhlIGJlbG93IGlzIGZvciBjb21wYXRpYmlsaXR5IG9u
bHkgYW5kIHNob3VsZCBiZSAgIAotICAgIC8vIHJlbW92ZWQgb25jZSBDaHJvbWl1bSBpcyB1cGRh
dGVkIHRvIHJlbW92ZSBtZXNzYWdlCi0gICAgLy8gZGVzdGluYXRpb24gcGFyYW1ldGVyIDxodHRw
Oi8vd2Via2l0Lm9yZy9iLzM3MTU1Pi4KLSAgICB2aXJ0dWFsIHZvaWQgcG9zdENvbnNvbGVNZXNz
YWdlVG9Xb3JrZXJPYmplY3QoaW50LCBpbnQgc291cmNlSWRlbnRpZmllciwgaW50IG1lc3NhZ2VU
eXBlLCBpbnQgbWVzc2FnZUxldmVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBXZWJTdHJpbmcmIG1lc3NhZ2UsIGludCBsaW5lTnVtYmVy
LCBjb25zdCBXZWJTdHJpbmcmIHNvdXJjZVVSTCkgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHBv
c3RDb25zb2xlTWVzc2FnZVRvV29ya2VyT2JqZWN0KGludCBzb3VyY2VJZGVudGlmaWVyLCBpbnQg
bWVzc2FnZVR5cGUsIGludCBtZXNzYWdlTGV2ZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlN0cmluZyYgbWVzc2FnZSwgaW50IGxp
bmVOdW1iZXIsIGNvbnN0IFdlYlN0cmluZyYgc291cmNlVVJMKQotICAgIHsKLSAgICAgICAgcG9z
dENvbnNvbGVNZXNzYWdlVG9Xb3JrZXJPYmplY3QoMCwgc291cmNlSWRlbnRpZmllciwgbWVzc2Fn
ZVR5cGUsIG1lc3NhZ2VMZXZlbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbWVzc2FnZSwgbGluZU51bWJlciwgc291cmNlVVJMKTsKLSAgICB9Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgd29ya2VyQ29udGV4dENsb3NlZCgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgd29y
a2VyQ29udGV4dERlc3Ryb3llZCgpID0gMDsKLQotICAgIC8vIFJldHVybnMgdGhlIG5vdGlmaWNh
dGlvbiBwcmVzZW50ZXIgZm9yIHRoaXMgd29ya2VyIGNvbnRleHQuICBQb2ludGVyCi0gICAgLy8g
aXMgb3duZWQgYnkgdGhlIG9iamVjdCBpbXBsZW1lbnRpbmcgV2ViQ29tbW9uV29ya2VyQ2xpZW50
LgotICAgIHZpcnR1YWwgV2ViTm90aWZpY2F0aW9uUHJlc2VudGVyKiBub3RpZmljYXRpb25QcmVz
ZW50ZXIoKSA9IDA7Ci0KLSAgICAvLyBUaGlzIGNhbiBiZSBjYWxsZWQgb24gYW55IHRocmVhZCB0
byBjcmVhdGUgYSBuZXN0ZWQgV2ViV29ya2VyLgotICAgIC8vIFdlYlNoYXJlZFdvcmtlcnMgYXJl
IG5vdCBpbnN0YW50aWF0ZWQgdmlhIHRoaXMgQVBJIC0gaW5zdGVhZAotICAgIC8vIHRoZXkgYXJl
IGNyZWF0ZWQgdmlhIHRoZSBXZWJTaGFyZWRXb3JrZXJSZXBvc2l0b3J5LgotICAgIHZpcnR1YWwg
V2ViV29ya2VyKiBjcmVhdGVXb3JrZXIoV2ViV29ya2VyQ2xpZW50KiBjbGllbnQpID0gMDsKLQot
ICAgIC8vIENhbGxlZCBvbiB0aGUgbWFpbiB3ZWJraXQgdGhyZWFkIGluIHRoZSB3b3JrZXIgcHJv
Y2VzcyBkdXJpbmcgaW5pdGlhbGl6YXRpb24uCi0gICAgdmlydHVhbCBXZWJBcHBsaWNhdGlvbkNh
Y2hlSG9zdCogY3JlYXRlQXBwbGljYXRpb25DYWNoZUhvc3QoV2ViQXBwbGljYXRpb25DYWNoZUhv
c3RDbGllbnQqKSA9IDA7Ci0KLSAgICAvLyBDYWxsZWQgb24gdGhlIG1haW4gd2Via2l0IHRocmVh
ZCBiZWZvcmUgb3BlbmluZyBhIHdlYiBkYXRhYmFzZS4KLSAgICB2aXJ0dWFsIGJvb2wgYWxsb3dE
YXRhYmFzZShXZWJGcmFtZSosIGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgY29uc3QgV2ViU3RyaW5n
JiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKSA9IDA7Ci0KLSAgICAv
LyBDYWxsZWQgb24gdGhlIG1haW4gd2Via2l0IHRocmVhZCBiZWZvcmUgb3BlbmluZyBhIGZpbGUg
c3lzdGVtLgotICAgIHZpcnR1YWwgYm9vbCBhbGxvd0ZpbGVTeXN0ZW0oKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLy8gQ2FsbGVkIG9uIHRoZSBtYWluIHdlYmtp
dCB0aHJlYWQgYmVmb3JlIG9wZW5pbmcgYSBmaWxlIHN5c3RlbS4KLSAgICB2aXJ0dWFsIHZvaWQg
b3BlbkZpbGVTeXN0ZW0oV2ViRmlsZVN5c3RlbTo6VHlwZSwgbG9uZyBsb25nIHNpemUsIGJvb2wg
Y3JlYXRlLCBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzKikKLSAgICB7Ci0gICAgICAgIFdFQktJVF9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hE
ZXZUb29sc01lc3NhZ2UoY29uc3QgV2ViU3RyaW5nJikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHNh
dmVEZXZUb29sc0FnZW50U3RhdGUoY29uc3QgV2ViU3RyaW5nJikgeyB9Ci0KLXByb3RlY3RlZDoK
LSAgICB+V2ViQ29tbW9uV29ya2VyQ2xpZW50KCkgeyB9Ci19OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2hh
cmVkV29ya2VyLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTaGFyZWRXb3Jr
ZXIuaAppbmRleCA3ZDVkMDAzLi40NDdmN2Y0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJTaGFyZWRXb3JrZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJTaGFyZWRXb3JrZXIuaApAQCAtNDEsNyArNDEsNyBAQCBuYW1lc3BhY2Ug
V2ViS2l0IHsKIAogY2xhc3MgV2ViU3RyaW5nOwogY2xhc3MgV2ViTWVzc2FnZVBvcnRDaGFubmVs
OwotY2xhc3MgV2ViQ29tbW9uV29ya2VyQ2xpZW50OworY2xhc3MgV2ViU2hhcmVkV29ya2VyQ2xp
ZW50OwogY2xhc3MgV2ViVVJMOwogCiAvLyBUaGlzIGlzIHRoZSBpbnRlcmZhY2UgdG8gYSBTaGFy
ZWRXb3JrZXIgdGhyZWFkLgpAQCAtNDksNyArNDksNyBAQCBjbGFzcyBXZWJVUkw7CiBjbGFzcyBX
ZWJTaGFyZWRXb3JrZXIgewogcHVibGljOgogICAgIC8vIEludm9rZWQgZnJvbSB0aGUgd29ya2Vy
IHRocmVhZCB0byBpbnN0YW50aWF0ZSBhIFdlYlNoYXJlZFdvcmtlciB0aGF0IGludGVyYWN0cyB3
aXRoIHRoZSBXZWJLaXQgd29ya2VyIGNvbXBvbmVudHMuCi0gICAgV0VCS0lUX0VYUE9SVCBzdGF0
aWMgV2ViU2hhcmVkV29ya2VyKiBjcmVhdGUoV2ViQ29tbW9uV29ya2VyQ2xpZW50Kik7CisgICAg
V0VCS0lUX0VYUE9SVCBzdGF0aWMgV2ViU2hhcmVkV29ya2VyKiBjcmVhdGUoV2ViU2hhcmVkV29y
a2VyQ2xpZW50Kik7CiAKICAgICB2aXJ0dWFsIH5XZWJTaGFyZWRXb3JrZXIoKSB7fTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2hhcmVkV29ya2VyQ2xp
ZW50LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTaGFyZWRXb3JrZXJDbGll
bnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTcwMGM2Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2hhcmVkV29ya2Vy
Q2xpZW50LmgKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlNoYXJlZFdvcmtlckNsaWVudF9o
CisjZGVmaW5lIFdlYlNoYXJlZFdvcmtlckNsaWVudF9oCisKKyNpbmNsdWRlICJXZWJDb21tb25X
b3JrZXJDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJNZXNzYWdlUG9ydENoYW5uZWwuaCIKKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYk5vdGlmaWNhdGlvblByZXNlbnRlcjsKK2NsYXNz
IFdlYlN0cmluZzsKK2NsYXNzIFdlYldvcmtlcjsKKworLy8gUHJvdmlkZXMgYW4gaW50ZXJmYWNl
IGJhY2sgdG8gdGhlIGluLXBhZ2Ugc2NyaXB0IG9iamVjdCBmb3IgYSB3b3JrZXIuCisvLyBBbGwg
ZnVuY3Rpb25zIGFyZSBleHBlY3RlZCB0byBiZSBjYWxsZWQgYmFjayBvbiB0aGUgdGhyZWFkIHRo
YXQgY3JlYXRlZAorLy8gdGhlIFdvcmtlciBvYmplY3QsIHVubGVzcyBub3RlZC4KK2NsYXNzIFdl
YlNoYXJlZFdvcmtlckNsaWVudCA6IHB1YmxpYyBXZWJDb21tb25Xb3JrZXJDbGllbnQgeworcHVi
bGljOgorICAgIHZpcnR1YWwgdm9pZCBwb3N0TWVzc2FnZVRvV29ya2VyT2JqZWN0KAorICAgICAg
ICBjb25zdCBXZWJTdHJpbmcmLAorICAgICAgICBjb25zdCBXZWJNZXNzYWdlUG9ydENoYW5uZWxB
cnJheSYpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBjb25maXJtTWVzc2FnZUZyb21Xb3JrZXJP
YmplY3QoYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVw
b3J0UGVuZGluZ0FjdGl2aXR5KGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KSA9IDA7CisKKyAgICB2
aXJ0dWFsIHZvaWQgcG9zdEV4Y2VwdGlvblRvV29ya2VyT2JqZWN0KAorICAgICAgICBjb25zdCBX
ZWJTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbGluZU51bWJlciwKKyAgICAgICAgY29uc3QgV2Vi
U3RyaW5nJiBzb3VyY2VVUkwpID0gMDsKKworICAgIC8vIEZJWE1FOiB0aGUgYmVsb3cgaXMgZm9y
IGNvbXBhdGliaWxpdHkgb25seSBhbmQgc2hvdWxkIGJlICAgCisgICAgLy8gcmVtb3ZlZCBvbmNl
IENocm9taXVtIGlzIHVwZGF0ZWQgdG8gcmVtb3ZlIG1lc3NhZ2UKKyAgICAvLyBkZXN0aW5hdGlv
biBwYXJhbWV0ZXIgPGh0dHA6Ly93ZWJraXQub3JnL2IvMzcxNTU+LgorICAgIHZpcnR1YWwgdm9p
ZCBwb3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdChpbnQsIGludCBzb3VyY2VJZGVudGlm
aWVyLCBpbnQgbWVzc2FnZVR5cGUsIGludCBtZXNzYWdlTGV2ZWwsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlN0cmluZyYgbWVzc2Fn
ZSwgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFdlYlN0cmluZyYgc291cmNlVVJMKSA9IDA7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgcG9zdENvbnNvbGVNZXNzYWdlVG9Xb3JrZXJPYmplY3QoaW50IHNvdXJj
ZUlkZW50aWZpZXIsIGludCBtZXNzYWdlVHlwZSwgaW50IG1lc3NhZ2VMZXZlbCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViU3RyaW5n
JiBtZXNzYWdlLCBpbnQgbGluZU51bWJlciwgY29uc3QgV2ViU3RyaW5nJiBzb3VyY2VVUkwpCisg
ICAgeworICAgICAgICBwb3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdCgwLCBzb3VyY2VJ
ZGVudGlmaWVyLCBtZXNzYWdlVHlwZSwgbWVzc2FnZUxldmVsLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VVUkwpOwor
ICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCB3b3JrZXJDb250ZXh0Q2xvc2VkKCkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCB3b3JrZXJDb250ZXh0RGVzdHJveWVkKCkgPSAwOworCisgICAgLy8gUmV0
dXJucyB0aGUgbm90aWZpY2F0aW9uIHByZXNlbnRlciBmb3IgdGhpcyB3b3JrZXIgY29udGV4dC4g
UG9pbnRlcgorICAgIC8vIGlzIG93bmVkIGJ5IHRoZSBvYmplY3QgaW1wbGVtZW50aW5nIFdlYkNv
bW1vbldvcmtlckNsaWVudC4KKyAgICB2aXJ0dWFsIFdlYk5vdGlmaWNhdGlvblByZXNlbnRlciog
bm90aWZpY2F0aW9uUHJlc2VudGVyKCkgPSAwOworCisgICAgLy8gVGhpcyBjYW4gYmUgY2FsbGVk
IG9uIGFueSB0aHJlYWQgdG8gY3JlYXRlIGEgbmVzdGVkIFdlYldvcmtlci4KKyAgICAvLyBXZWJT
aGFyZWRXb3JrZXJzIGFyZSBub3QgaW5zdGFudGlhdGVkIHZpYSB0aGlzIEFQSSAtIGluc3RlYWQK
KyAgICAvLyB0aGV5IGFyZSBjcmVhdGVkIHZpYSB0aGUgV2ViU2hhcmVkV29ya2VyUmVwb3NpdG9y
eS4KKyAgICB2aXJ0dWFsIFdlYldvcmtlciogY3JlYXRlV29ya2VyKFdlYlNoYXJlZFdvcmtlckNs
aWVudCopID0gMDsKKworICAgIC8vIENhbGxlZCBvbiB0aGUgbWFpbiB3ZWJraXQgdGhyZWFkIGlu
IHRoZSB3b3JrZXIgcHJvY2VzcyBkdXJpbmcgaW5pdGlhbGl6YXRpb24uCisgICAgdmlydHVhbCBX
ZWJBcHBsaWNhdGlvbkNhY2hlSG9zdCogY3JlYXRlQXBwbGljYXRpb25DYWNoZUhvc3QoV2ViQXBw
bGljYXRpb25DYWNoZUhvc3RDbGllbnQqKSA9IDA7CisKKyAgICAvLyBDYWxsZWQgb24gdGhlIG1h
aW4gd2Via2l0IHRocmVhZCBiZWZvcmUgb3BlbmluZyBhIHdlYiBkYXRhYmFzZS4KKyAgICB2aXJ0
dWFsIGJvb2wgYWxsb3dEYXRhYmFzZShXZWJGcmFtZSosIGNvbnN0IFdlYlN0cmluZyYgbmFtZSwg
Y29uc3QgV2ViU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXpl
KSA9IDA7CisKKyAgICAvLyBDYWxsZWQgb24gdGhlIG1haW4gd2Via2l0IHRocmVhZCBiZWZvcmUg
b3BlbmluZyBhIGZpbGUgc3lzdGVtLgorICAgIHZpcnR1YWwgYm9vbCBhbGxvd0ZpbGVTeXN0ZW0o
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgLy8gQ2FsbGVkIG9u
IHRoZSBtYWluIHdlYmtpdCB0aHJlYWQgYmVmb3JlIG9wZW5pbmcgYSBmaWxlIHN5c3RlbS4KKyAg
ICB2aXJ0dWFsIHZvaWQgb3BlbkZpbGVTeXN0ZW0oV2ViRmlsZVN5c3RlbTo6VHlwZSwgbG9uZyBs
b25nIHNpemUsIGJvb2wgY3JlYXRlLCBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzKikKKyAgICB7Cisg
ICAgICAgIFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgZGlzcGF0Y2hEZXZUb29sc01lc3NhZ2UoY29uc3QgV2ViU3RyaW5nJikgeyB9CisgICAg
dmlydHVhbCB2b2lkIHNhdmVEZXZUb29sc0FnZW50U3RhdGUoY29uc3QgV2ViU3RyaW5nJikgeyB9
CisKK3Byb3RlY3RlZDoKKyAgICB+V2ViU2hhcmVkV29ya2VyQ2xpZW50KCkgeyB9Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJXb3JrZXJDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYldvcmtlckNsaWVudC5oCmluZGV4IGViMmU2M2UuLjU5Njk5OWQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldvcmtlckNsaWVudC5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldvcmtlckNsaWVudC5oCkBAIC0z
MSwzMSArMzEsOCBAQAogI2lmbmRlZiBXZWJXb3JrZXJDbGllbnRfaAogI2RlZmluZSBXZWJXb3Jr
ZXJDbGllbnRfaAogCi0jaW5jbHVkZSAiV2ViQ29tbW9uV29ya2VyQ2xpZW50LmgiCi0jaW5jbHVk
ZSAiV2ViTWVzc2FnZVBvcnRDaGFubmVsLmgiCisjaW5jbHVkZSAiV2ViU2hhcmVkV29ya2VyQ2xp
ZW50LmgiCiAKLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJOb3RpZmljYXRpb25QcmVz
ZW50ZXI7Ci1jbGFzcyBXZWJTdHJpbmc7Ci1jbGFzcyBXZWJXb3JrZXI7Ci0KLS8vIFByb3ZpZGVz
IGFuIGludGVyZmFjZSBiYWNrIHRvIHRoZSBpbi1wYWdlIHNjcmlwdCBvYmplY3QgZm9yIGEgd29y
a2VyLgotLy8gQWxsIGZ1bmN0aW9ucyBhcmUgZXhwZWN0ZWQgdG8gYmUgY2FsbGVkIGJhY2sgb24g
dGhlIHRocmVhZCB0aGF0IGNyZWF0ZWQKLS8vIHRoZSBXb3JrZXIgb2JqZWN0LCB1bmxlc3Mgbm90
ZWQuCi1jbGFzcyBXZWJXb3JrZXJDbGllbnQgOiBwdWJsaWMgV2ViQ29tbW9uV29ya2VyQ2xpZW50
IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgcG9zdE1lc3NhZ2VUb1dvcmtlck9iamVjdCgK
LSAgICAgICAgY29uc3QgV2ViU3RyaW5nJiwKLSAgICAgICAgY29uc3QgV2ViTWVzc2FnZVBvcnRD
aGFubmVsQXJyYXkmKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY29uZmlybU1lc3NhZ2VGcm9t
V29ya2VyT2JqZWN0KGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIHJlcG9ydFBlbmRpbmdBY3Rpdml0eShib29sIGhhc1BlbmRpbmdBY3Rpdml0eSkgPSAwOwot
Ci1wcm90ZWN0ZWQ6Ci0gICAgfldlYldvcmtlckNsaWVudCgpIHsgfQotfTsKLQotfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisjZGVmaW5lIFdlYldvcmtlckNsaWVudCBXZWJTaGFyZWRXb3JrZXJDbGll
bnQKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9EYXRh
YmFzZU9ic2VydmVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0RhdGFiYXNlT2Jz
ZXJ2ZXIuY3BwCmluZGV4IDE4N2I1NWUuLjQwYjUwNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL0RhdGFiYXNlT2JzZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL0RhdGFiYXNlT2JzZXJ2ZXIuY3BwCkBAIC02NCw3ICs2NCw3IEBAIHN0YXRp
YyBjb25zdCBjaGFyIGFsbG93RGF0YWJhc2VNb2RlW10gPSAiYWxsb3dEYXRhYmFzZU1vZGUiOwog
Ly8gY2FsbCBiYWNrIHRvIHRoZSB3b3JrZXIgY29udGV4dC4KIGNsYXNzIEFsbG93RGF0YWJhc2VN
YWluVGhyZWFkQnJpZGdlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEFsbG93RGF0YWJh
c2VNYWluVGhyZWFkQnJpZGdlPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8QWxs
b3dEYXRhYmFzZU1haW5UaHJlYWRCcmlkZ2U+IGNyZWF0ZShXZWJDb3JlOjpXb3JrZXJMb2FkZXJQ
cm94eSogd29ya2VyTG9hZGVyUHJveHksIGNvbnN0IFN0cmluZyYgbW9kZSwgTmV3V2ViQ29tbW9u
V29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQsIFdlYkZyYW1lKiBmcmFtZSwgY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRl
ZFNpemUpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8QWxsb3dEYXRhYmFzZU1haW5UaHJlYWRCcmlk
Z2U+IGNyZWF0ZShXZWJDb3JlOjpXb3JrZXJMb2FkZXJQcm94eSogd29ya2VyTG9hZGVyUHJveHks
IGNvbnN0IFN0cmluZyYgbW9kZSwgV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQs
IFdlYkZyYW1lKiBmcmFtZSwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRpc3Bs
YXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpCiAgICAgewogICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IEFsbG93RGF0YWJhc2VNYWluVGhyZWFkQnJpZGdlKHdvcmtlckxvYWRl
clByb3h5LCBtb2RlLCBjb21tb25DbGllbnQsIGZyYW1lLCBuYW1lLCBkaXNwbGF5TmFtZSwgZXN0
aW1hdGVkU2l6ZSkpOwogICAgIH0KQEAgLTkxLDcgKzkxLDcgQEAgcHVibGljOgogICAgIH0KIAog
cHJpdmF0ZToKLSAgICBBbGxvd0RhdGFiYXNlTWFpblRocmVhZEJyaWRnZShXZWJDb3JlOjpXb3Jr
ZXJMb2FkZXJQcm94eSogd29ya2VyTG9hZGVyUHJveHksIGNvbnN0IFN0cmluZyYgbW9kZSwgTmV3
V2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQsIFdlYkZyYW1lKiBmcmFtZSwgY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25n
IGVzdGltYXRlZFNpemUpCisgICAgQWxsb3dEYXRhYmFzZU1haW5UaHJlYWRCcmlkZ2UoV2ViQ29y
ZTo6V29ya2VyTG9hZGVyUHJveHkqIHdvcmtlckxvYWRlclByb3h5LCBjb25zdCBTdHJpbmcmIG1v
ZGUsIFdlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50LCBXZWJGcmFtZSogZnJhbWUs
IGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQg
bG9uZyBlc3RpbWF0ZWRTaXplKQogICAgICAgICA6IG1fd29ya2VyTG9hZGVyUHJveHkod29ya2Vy
TG9hZGVyUHJveHkpCiAgICAgewogICAgICAgICBXZWJXb3JrZXJCYXNlOjpkaXNwYXRjaFRhc2tU
b01haW5UaHJlYWQoCkBAIC0xMDEsNyArMTAxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0aGlzKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYWxsb3dE
YXRhYmFzZVRhc2soV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29u
c3QgU3RyaW5nIG1vZGUsIE5ld1dlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50LCBX
ZWJGcmFtZSogZnJhbWUsIGNvbnN0IFN0cmluZyBuYW1lLCBjb25zdCBTdHJpbmcgZGlzcGxheU5h
bWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1JlZlB0cjxBbGxvd0RhdGFiYXNl
TWFpblRocmVhZEJyaWRnZT4gYnJpZGdlKQorICAgIHN0YXRpYyB2b2lkIGFsbG93RGF0YWJhc2VU
YXNrKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmlu
ZyBtb2RlLCBXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1vbkNsaWVudCwgV2ViRnJhbWUqIGZy
YW1lLCBjb25zdCBTdHJpbmcgbmFtZSwgY29uc3QgU3RyaW5nIGRpc3BsYXlOYW1lLCB1bnNpZ25l
ZCBsb25nIGVzdGltYXRlZFNpemUsIFBhc3NSZWZQdHI8QWxsb3dEYXRhYmFzZU1haW5UaHJlYWRC
cmlkZ2U+IGJyaWRnZSkKICAgICB7CiAgICAgICAgIGJvb2wgYWxsb3dEYXRhYmFzZSA9IGNvbW1v
bkNsaWVudCA/IGNvbW1vbkNsaWVudC0+YWxsb3dEYXRhYmFzZShmcmFtZSwgbmFtZSwgZGlzcGxh
eU5hbWUsIGVzdGltYXRlZFNpemUpIDogZmFsc2U7CiAgICAgICAgIGJyaWRnZS0+c2lnbmFsQ29t
cGxldGVkKG1vZGUsIGFsbG93RGF0YWJhc2UpOwpAQCAtMTE3LDcgKzExNyw3IEBAIHByaXZhdGU6
CiAgICAgV2ViQ29yZTo6V29ya2VyTG9hZGVyUHJveHkqIG1fd29ya2VyTG9hZGVyUHJveHk7CiB9
OwogCi1ib29sIGFsbG93RGF0YWJhc2VGb3JXb3JrZXIoTmV3V2ViQ29tbW9uV29ya2VyQ2xpZW50
KiBjb21tb25DbGllbnQsIFdlYkZyYW1lKiBmcmFtZSwgY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBj
b25zdCBXZWJTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUp
Citib29sIGFsbG93RGF0YWJhc2VGb3JXb3JrZXIoV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21t
b25DbGllbnQsIFdlYkZyYW1lKiBmcmFtZSwgY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBjb25zdCBX
ZWJTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpCiB7CiAg
ICAgV2ViQ29yZTo6V29ya2VyU2NyaXB0Q29udHJvbGxlciogY29udHJvbGxlciA9IFdlYkNvcmU6
OldvcmtlclNjcmlwdENvbnRyb2xsZXI6OmNvbnRyb2xsZXJGb3JDb250ZXh0KCk7CiAgICAgV2Vi
Q29yZTo6V29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4dCA9IGNvbnRyb2xsZXItPndvcmtlckNv
bnRleHQoKTsKQEAgLTE2NCw4ICsxNjQsOCBAQCBib29sIERhdGFiYXNlT2JzZXJ2ZXI6OmNhbkVz
dGFibGlzaERhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dAogI2lm
IEVOQUJMRShXT1JLRVJTKQogICAgICAgICBXb3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0ID0g
c3RhdGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwogICAg
ICAgICBXb3JrZXJMb2FkZXJQcm94eSogd29ya2VyTG9hZGVyUHJveHkgPSAmd29ya2VyQ29udGV4
dC0+dGhyZWFkKCktPndvcmtlckxvYWRlclByb3h5KCk7Ci0gICAgICAgIE5ld1dlYldvcmtlckJh
c2UqIHdlYldvcmtlciA9IHN0YXRpY19jYXN0PE5ld1dlYldvcmtlckJhc2UqPih3b3JrZXJMb2Fk
ZXJQcm94eSk7Ci0gICAgICAgIHJldHVybiBhbGxvd0RhdGFiYXNlRm9yV29ya2VyKHdlYldvcmtl
ci0+bmV3Q29tbW9uQ2xpZW50KCksIHdlYldvcmtlci0+dmlldygpLT5tYWluRnJhbWUoKSwgbmFt
ZSwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUpOworICAgICAgICBXZWJXb3JrZXJCYXNlKiB3
ZWJXb3JrZXIgPSBzdGF0aWNfY2FzdDxXZWJXb3JrZXJCYXNlKj4od29ya2VyTG9hZGVyUHJveHkp
OworICAgICAgICByZXR1cm4gYWxsb3dEYXRhYmFzZUZvcldvcmtlcih3ZWJXb3JrZXItPmNvbW1v
bkNsaWVudCgpLCB3ZWJXb3JrZXItPnZpZXcoKS0+bWFpbkZyYW1lKCksIG5hbWUsIGRpc3BsYXlO
YW1lLCBlc3RpbWF0ZWRTaXplKTsKICNlbHNlCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJGYWN0
b3J5QmFja2VuZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3Rv
cnlCYWNrZW5kUHJveHkuY3BwCmluZGV4IDdhZTZlNjEuLmMyMjMwOWIgMTAwNzU1Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuY3BwCkBA
IC05OSw3ICs5OSw3IEBAIHZvaWQgSURCRmFjdG9yeUJhY2tlbmRQcm94eTo6b3BlbkZyb21Xb3Jr
ZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJDYWxsYmFja3MqIGNhCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgV29ya2VyTG9hZGVyUHJveHkqIHdvcmtlckxvYWRlclByb3h5ID0gJmNvbnRl
eHQtPnRocmVhZCgpLT53b3JrZXJMb2FkZXJQcm94eSgpOwotICAgIE5ld1dlYldvcmtlckJhc2Uq
IHdlYldvcmtlciA9IHN0YXRpY19jYXN0PE5ld1dlYldvcmtlckJhc2UqPih3b3JrZXJMb2FkZXJQ
cm94eSk7CisgICAgV2ViV29ya2VyQmFzZSogd2ViV29ya2VyID0gc3RhdGljX2Nhc3Q8V2ViV29y
a2VyQmFzZSo+KHdvcmtlckxvYWRlclByb3h5KTsKICAgICBXZWJGcmFtZSogd2ViRnJhbWUgPSB3
ZWJXb3JrZXItPnZpZXcoKS0+bWFpbkZyYW1lKCk7CiAgICAgbV93ZWJJREJGYWN0b3J5LT5vcGVu
KG5hbWUsIG5ldyBXZWJJREJDYWxsYmFja3NJbXBsKGNhbGxiYWNrcyksIG9yaWdpbiwgd2ViRnJh
bWUsIGRhdGFEaXIpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9Mb2NhbEZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9Mb2NhbEZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAKaW5kZXggNzU3ZWY4Mi4uOWUwZTczMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvTG9jYWxGaWxlU3lzdGVtQ2hy
b21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0xvY2FsRmlsZVN5c3Rl
bUNocm9taXVtLmNwcApAQCAtNzksNyArNzksNyBAQCBzdGF0aWMgY29uc3QgY2hhciBvcGVuRmls
ZVN5c3RlbU1vZGVbXSA9ICJvcGVuRmlsZVN5c3RlbU1vZGUiOwogLy8gY2FsbCBiYWNrIHRvIHRo
ZSB3b3JrZXIgY29udGV4dC4KIGNsYXNzIEFsbG93RmlsZVN5c3RlbU1haW5UaHJlYWRCcmlkZ2Ug
OiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8QWxsb3dGaWxlU3lzdGVtTWFpblRocmVhZEJy
aWRnZT4gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEFsbG93RmlsZVN5c3RlbU1h
aW5UaHJlYWRCcmlkZ2U+IGNyZWF0ZShXZWJDb3JlOjpXb3JrZXJMb2FkZXJQcm94eSogd29ya2Vy
TG9hZGVyUHJveHksIGNvbnN0IFdURjo6U3RyaW5nJiBtb2RlLCBOZXdXZWJDb21tb25Xb3JrZXJD
bGllbnQqIGNvbW1vbkNsaWVudCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxBbGxvd0ZpbGVTeXN0
ZW1NYWluVGhyZWFkQnJpZGdlPiBjcmVhdGUoV2ViQ29yZTo6V29ya2VyTG9hZGVyUHJveHkqIHdv
cmtlckxvYWRlclByb3h5LCBjb25zdCBXVEY6OlN0cmluZyYgbW9kZSwgV2ViQ29tbW9uV29ya2Vy
Q2xpZW50KiBjb21tb25DbGllbnQpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IEFsbG93RmlsZVN5c3RlbU1haW5UaHJlYWRCcmlkZ2Uod29ya2VyTG9hZGVyUHJveHksIG1vZGUs
IGNvbW1vbkNsaWVudCkpOwogICAgIH0KQEAgLTEwNiw3ICsxMDYsNyBAQCBwdWJsaWM6CiAgICAg
fQogCiBwcml2YXRlOgotICAgIEFsbG93RmlsZVN5c3RlbU1haW5UaHJlYWRCcmlkZ2UoV2ViQ29y
ZTo6V29ya2VyTG9hZGVyUHJveHkqIHdvcmtlckxvYWRlclByb3h5LCBjb25zdCBXVEY6OlN0cmlu
ZyYgbW9kZSwgTmV3V2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQpCisgICAgQWxs
b3dGaWxlU3lzdGVtTWFpblRocmVhZEJyaWRnZShXZWJDb3JlOjpXb3JrZXJMb2FkZXJQcm94eSog
d29ya2VyTG9hZGVyUHJveHksIGNvbnN0IFdURjo6U3RyaW5nJiBtb2RlLCBXZWJDb21tb25Xb3Jr
ZXJDbGllbnQqIGNvbW1vbkNsaWVudCkKICAgICAgICAgOiBtX3dvcmtlckxvYWRlclByb3h5KHdv
cmtlckxvYWRlclByb3h5KQogICAgICAgICAsIG1fbW9kZShtb2RlKQogICAgIHsKQEAgLTExNSw3
ICsxMTUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsbG93
Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcykpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhbGxv
d0ZpbGVTeXN0ZW1UYXNrKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQs
IE5ld1dlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50LCBQYXNzUmVmUHRyPEFsbG93
RmlsZVN5c3RlbU1haW5UaHJlYWRCcmlkZ2U+IGJyaWRnZSkKKyAgICBzdGF0aWMgdm9pZCBhbGxv
d0ZpbGVTeXN0ZW1UYXNrKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQs
IFdlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50LCBQYXNzUmVmUHRyPEFsbG93Rmls
ZVN5c3RlbU1haW5UaHJlYWRCcmlkZ2U+IGJyaWRnZSkKICAgICB7CiAgICAgICAgIGlmIChjb21t
b25DbGllbnQpCiAgICAgICAgICAgICBicmlkZ2UtPnNpZ25hbENvbXBsZXRlZChjb21tb25DbGll
bnQtPmFsbG93RmlsZVN5c3RlbSgpKTsKQEAgLTEzNCw3ICsxMzQsNyBAQCBwcml2YXRlOgogICAg
IFdURjo6U3RyaW5nIG1fbW9kZTsKIH07CiAKLWJvb2wgYWxsb3dGaWxlU3lzdGVtRm9yV29ya2Vy
KE5ld1dlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50KQorYm9vbCBhbGxvd0ZpbGVT
eXN0ZW1Gb3JXb3JrZXIoV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQpCiB7CiAg
ICAgV29ya2VyU2NyaXB0Q29udHJvbGxlciogY29udHJvbGxlciA9IFdvcmtlclNjcmlwdENvbnRy
b2xsZXI6OmNvbnRyb2xsZXJGb3JDb250ZXh0KCk7CiAgICAgV29ya2VyQ29udGV4dCogd29ya2Vy
Q29udGV4dCA9IGNvbnRyb2xsZXItPndvcmtlckNvbnRleHQoKTsKQEAgLTE1Nyw3ICsxNTcsNyBA
QCBib29sIGFsbG93RmlsZVN5c3RlbUZvcldvcmtlcihOZXdXZWJDb21tb25Xb3JrZXJDbGllbnQq
IGNvbW1vbkNsaWVudCkKICAgICByZXR1cm4gYnJpZGdlLT5yZXN1bHQoKTsKIH0KIAotdm9pZCBv
cGVuRmlsZVN5c3RlbUZvcldvcmtlcihOZXdXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1vbkNs
aWVudCwgV2ViRmlsZVN5c3RlbTo6VHlwZSB0eXBlLCBsb25nIGxvbmcgc2l6ZSwgYm9vbCBjcmVh
dGUsIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3MqIGNhbGxiYWNrcywgYm9vbCBzeW5jaHJvbm91cykK
K3ZvaWQgb3BlbkZpbGVTeXN0ZW1Gb3JXb3JrZXIoV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21t
b25DbGllbnQsIFdlYkZpbGVTeXN0ZW06OlR5cGUgdHlwZSwgbG9uZyBsb25nIHNpemUsIGJvb2wg
Y3JlYXRlLCBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzKiBjYWxsYmFja3MsIGJvb2wgc3luY2hyb25v
dXMpCiB7CiAgICAgV29ya2VyU2NyaXB0Q29udHJvbGxlciogY29udHJvbGxlciA9IFdvcmtlclNj
cmlwdENvbnRyb2xsZXI6OmNvbnRyb2xsZXJGb3JDb250ZXh0KCk7CiAgICAgV29ya2VyQ29udGV4
dCogd29ya2VyQ29udGV4dCA9IGNvbnRyb2xsZXItPndvcmtlckNvbnRleHQoKTsKQEAgLTIwMywx
MSArMjAzLDExIEBAIHN0YXRpYyB2b2lkIG9wZW5GaWxlU3lzdGVtSGVscGVyKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQsIEFzeW5jRmlsZVN5c3RlCiAjaWYgRU5BQkxFKFdPUktFUlMp
CiAgICAgICAgIFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQgPSBzdGF0aWNfY2FzdDxXb3Jr
ZXJDb250ZXh0Kj4oY29udGV4dCk7CiAgICAgICAgIFdvcmtlckxvYWRlclByb3h5KiB3b3JrZXJM
b2FkZXJQcm94eSA9ICZ3b3JrZXJDb250ZXh0LT50aHJlYWQoKS0+d29ya2VyTG9hZGVyUHJveHko
KTsKLSAgICAgICAgTmV3V2ViV29ya2VyQmFzZSogd2ViV29ya2VyID0gc3RhdGljX2Nhc3Q8TmV3
V2ViV29ya2VyQmFzZSo+KHdvcmtlckxvYWRlclByb3h5KTsKLSAgICAgICAgaWYgKCFhbGxvd0Zp
bGVTeXN0ZW1Gb3JXb3JrZXIod2ViV29ya2VyLT5uZXdDb21tb25DbGllbnQoKSkpCisgICAgICAg
IFdlYldvcmtlckJhc2UqIHdlYldvcmtlciA9IHN0YXRpY19jYXN0PFdlYldvcmtlckJhc2UqPih3
b3JrZXJMb2FkZXJQcm94eSk7CisgICAgICAgIGlmICghYWxsb3dGaWxlU3lzdGVtRm9yV29ya2Vy
KHdlYldvcmtlci0+Y29tbW9uQ2xpZW50KCkpKQogICAgICAgICAgICAgYWxsb3dlZCA9IGZhbHNl
OwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBvcGVuRmlsZVN5c3RlbUZvcldvcmtlcih3ZWJX
b3JrZXItPm5ld0NvbW1vbkNsaWVudCgpLCBzdGF0aWNfY2FzdDxXZWJGaWxlU3lzdGVtOjpUeXBl
Pih0eXBlKSwgc2l6ZSwgY3JlYXRlID09IENyZWF0ZUlmTm90UHJlc2VudCwgbmV3IFdlYkZpbGVT
eXN0ZW1DYWxsYmFja3NJbXBsKGNhbGxiYWNrcywgdHlwZSwgY29udGV4dCwgc3luY2hyb25vdXMp
LCBzeW5jaHJvbm91cyk7CisgICAgICAgICAgICBvcGVuRmlsZVN5c3RlbUZvcldvcmtlcih3ZWJX
b3JrZXItPmNvbW1vbkNsaWVudCgpLCBzdGF0aWNfY2FzdDxXZWJGaWxlU3lzdGVtOjpUeXBlPih0
eXBlKSwgc2l6ZSwgY3JlYXRlID09IENyZWF0ZUlmTm90UHJlc2VudCwgbmV3IFdlYkZpbGVTeXN0
ZW1DYWxsYmFja3NJbXBsKGNhbGxiYWNrcywgdHlwZSwgY29udGV4dCwgc3luY2hyb25vdXMpLCBz
eW5jaHJvbm91cyk7CiAKICNlbHNlCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2hhcmVkV29ya2VySW1wbC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTaGFyZWRXb3JrZXJJbXBsLmNwcApp
bmRleCAxNDQ1ZjhlLi4yMzFhYWFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJTaGFyZWRXb3JrZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJTaGFyZWRXb3JrZXJJbXBsLmNwcApAQCAtMzIsMzYgKzMyLDMwMiBAQAogI2luY2x1
ZGUgIldlYlNoYXJlZFdvcmtlckltcGwuaCIKIAogI2luY2x1ZGUgIkNyb3NzVGhyZWFkVGFzay5o
IgorI2luY2x1ZGUgIkRhdGFiYXNlVGFzay5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5j
bHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIk1lc3NhZ2VFdmVudC5oIgogI2luY2x1ZGUgIk1lc3Nh
Z2VQb3J0Q2hhbm5lbC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmgi
CisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25D
b250ZXh0LmgiCiAjaW5jbHVkZSAiU2hhcmVkV29ya2VyQ29udGV4dC5oIgogI2luY2x1ZGUgIlNo
YXJlZFdvcmtlclRocmVhZC5oIgorI2luY2x1ZGUgIldlYkRhdGFTb3VyY2VJbXBsLmgiCisjaW5j
bHVkZSAiV2ViRmlsZUVycm9yLmgiCisjaW5jbHVkZSAiV2ViRnJhbWVDbGllbnQuaCIKKyNpbmNs
dWRlICJXZWJGcmFtZUltcGwuaCIKKyNpbmNsdWRlICJXZWJNZXNzYWdlUG9ydENoYW5uZWwuaCIK
KyNpbmNsdWRlICJXZWJSdW50aW1lRmVhdHVyZXMuaCIKKyNpbmNsdWRlICJXZWJTZXR0aW5ncy5o
IgorI2luY2x1ZGUgIldlYlNoYXJlZFdvcmtlckNsaWVudC5oIgorI2luY2x1ZGUgIldlYlZpZXcu
aCIKKyNpbmNsdWRlICJXb3JrZXJDb250ZXh0LmgiCiAjaW5jbHVkZSAiV29ya2VyRGVidWdnZXJB
Z2VudC5oIgogI2luY2x1ZGUgIldvcmtlckluc3BlY3RvckNvbnRyb2xsZXIuaCIKLQotI2luY2x1
ZGUgIldlYk1lc3NhZ2VQb3J0Q2hhbm5lbC5oIgorI2luY2x1ZGUgIldvcmtlckxvYWRlclByb3h5
LmgiCisjaW5jbHVkZSAiV29ya2VyVGhyZWFkLmgiCiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViU3Ry
aW5nLmgiCiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViVVJMLmgiCisjaW5jbHVkZSA8d3RmL01haW5U
aHJlYWQuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQg
ewogCiAjaWYgRU5BQkxFKFNIQVJFRF9XT1JLRVJTKQorLy8gVGhpcyBmdW5jdGlvbiBpcyBjYWxs
ZWQgb24gdGhlIG1haW4gdGhyZWFkIHRvIGZvcmNlIHRvIGluaXRpYWxpemUgc29tZSBzdGF0aWMK
Ky8vIHZhbHVlcyB1c2VkIGluIFdlYktpdCBiZWZvcmUgYW55IHdvcmtlciB0aHJlYWQgaXMgc3Rh
cnRlZC4gVGhpcyBpcyBiZWNhdXNlIGluCisvLyBvdXIgd29ya2VyIHByb2Nlc3NzLCB3ZSBkbyBu
b3QgcnVuIGFueSBXZWJLaXQgY29kZSBpbiBtYWluIHRocmVhZCBhbmQgdGh1cworLy8gd2hlbiBt
dWx0aXBsZSB3b3JrZXJzIHRyeSB0byBzdGFydCBhdCB0aGUgc2FtZSB0aW1lLCB3ZSBtaWdodCBo
aXQgY3Jhc2ggZHVlCisvLyB0byBjb250ZW50aW9uIGZvciBpbml0aWFsaXppbmcgc3RhdGljIHZh
bHVlcy4KK3N0YXRpYyB2b2lkIGluaXRpYWxpemVXZWJLaXRTdGF0aWNWYWx1ZXMoKQoreworICAg
IHN0YXRpYyBib29sIGluaXRpYWxpemVkID0gZmFsc2U7CisgICAgaWYgKCFpbml0aWFsaXplZCkg
eworICAgICAgICBpbml0aWFsaXplZCA9IHRydWU7CisgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBo
YXZlIHRvIHBhc3MgYSBVUkwgd2l0aCB2YWxpZCBwcm90b2NvbCBpbiBvcmRlciB0byBmb2xsb3cK
KyAgICAgICAgLy8gdGhlIHBhdGggdG8gZG8gc3RhdGljIHZhbHVlIGluaXRpYWxpemF0aW9ucy4K
KyAgICAgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBvcmlnaW4gPQorICAgICAgICAgICAgU2Vj
dXJpdHlPcmlnaW46OmNyZWF0ZShLVVJMKFBhcnNlZFVSTFN0cmluZywgImh0dHA6Ly9sb2NhbGhv
c3QiKSk7CisgICAgICAgIG9yaWdpbi5yZWxlYXNlKCk7CisgICAgfQorfQogCi1XZWJTaGFyZWRX
b3JrZXJJbXBsOjpXZWJTaGFyZWRXb3JrZXJJbXBsKFdlYkNvbW1vbldvcmtlckNsaWVudCogY2xp
ZW50KQotICAgIDogbV9jbGllbnQoY2xpZW50KQorV2ViU2hhcmVkV29ya2VySW1wbDo6V2ViU2hh
cmVkV29ya2VySW1wbChXZWJTaGFyZWRXb3JrZXJDbGllbnQqIGNsaWVudCkKKyAgICA6IG1fd2Vi
VmlldygwKQorICAgICwgbV9hc2tlZFRvVGVybWluYXRlKGZhbHNlKQorICAgICwgbV9jbGllbnQo
Y2xpZW50KQogICAgICwgbV9wYXVzZVdvcmtlckNvbnRleHRPblN0YXJ0KGZhbHNlKQogeworICAg
IGluaXRpYWxpemVXZWJLaXRTdGF0aWNWYWx1ZXMoKTsKIH0KIAogV2ViU2hhcmVkV29ya2VySW1w
bDo6fldlYlNoYXJlZFdvcmtlckltcGwoKQogeworICAgIEFTU0VSVChtX3dlYlZpZXcpOworICAg
IFdlYkZyYW1lSW1wbCogd2ViRnJhbWUgPSBzdGF0aWNfY2FzdDxXZWJGcmFtZUltcGwqPihtX3dl
YlZpZXctPm1haW5GcmFtZSgpKTsKKyAgICBpZiAod2ViRnJhbWUpCisgICAgICAgIHdlYkZyYW1l
LT5zZXRDbGllbnQoMCk7CisgICAgbV93ZWJWaWV3LT5jbG9zZSgpOworfQorCit2b2lkIFdlYlNo
YXJlZFdvcmtlckltcGw6OnN0b3BXb3JrZXJUaHJlYWQoKQoreworICAgIGlmIChtX2Fza2VkVG9U
ZXJtaW5hdGUpCisgICAgICAgIHJldHVybjsKKyAgICBtX2Fza2VkVG9UZXJtaW5hdGUgPSB0cnVl
OworICAgIGlmIChtX3dvcmtlclRocmVhZCkKKyAgICAgICAgbV93b3JrZXJUaHJlYWQtPnN0b3Ao
KTsKK30KKwordm9pZCBXZWJTaGFyZWRXb3JrZXJJbXBsOjppbml0aWFsaXplTG9hZGVyKGNvbnN0
IFdlYlVSTCYgdXJsKQoreworICAgIC8vIENyZWF0ZSAnc2hhZG93IHBhZ2UnLiBUaGlzIHBhZ2Ug
aXMgbmV2ZXIgZGlzcGxheWVkLCBpdCBpcyB1c2VkIHRvIHByb3h5IHRoZQorICAgIC8vIGxvYWRp
bmcgcmVxdWVzdHMgZnJvbSB0aGUgd29ya2VyIGNvbnRleHQgdG8gdGhlIHJlc3Qgb2YgV2ViS2l0
IGFuZCBDaHJvbWl1bQorICAgIC8vIGluZnJhc3RydWN0dXJlLgorICAgIEFTU0VSVCghbV93ZWJW
aWV3KTsKKyAgICBtX3dlYlZpZXcgPSBXZWJWaWV3OjpjcmVhdGUoMCk7CisgICAgbV93ZWJWaWV3
LT5zZXR0aW5ncygpLT5zZXRPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZUVuYWJsZWQoV2ViUnVu
dGltZUZlYXR1cmVzOjppc0FwcGxpY2F0aW9uQ2FjaGVFbmFibGVkKCkpOworICAgIC8vIEZJWE1F
OiBTZXR0aW5ncyBpbmZvcm1hdGlvbiBzaG91bGQgYmUgcGFzc2VkIHRvIHRoZSBXb3JrZXIgcHJv
Y2VzcyBmcm9tIEJyb3dzZXIgcHJvY2VzcyB3aGVuIHRoZSB3b3JrZXIKKyAgICAvLyBpcyBjcmVh
dGVkIChzaW1pbGFyIHRvIFJlbmRlclRocmVhZDo6T25DcmVhdGVOZXdWaWV3KS4KKyAgICBtX3dl
YlZpZXctPnNldHRpbmdzKCktPnNldEhpeGllNzZXZWJTb2NrZXRQcm90b2NvbEVuYWJsZWQoZmFs
c2UpOworICAgIG1fd2ViVmlldy0+aW5pdGlhbGl6ZU1haW5GcmFtZSh0aGlzKTsKKworICAgIFdl
YkZyYW1lSW1wbCogd2ViRnJhbWUgPSBzdGF0aWNfY2FzdDxXZWJGcmFtZUltcGwqPihtX3dlYlZp
ZXctPm1haW5GcmFtZSgpKTsKKworICAgIC8vIENvbnN0cnVjdCBzdWJzdGl0dXRlIGRhdGEgc291
cmNlIGZvciB0aGUgJ3NoYWRvdyBwYWdlJy4gV2Ugb25seSBuZWVkIGl0CisgICAgLy8gdG8gaGF2
ZSBzYW1lIG9yaWdpbiBhcyB0aGUgd29ya2VyIHNvIHRoZSBsb2FkaW5nIGNoZWNrcyB3b3JrIGNv
cnJlY3RseS4KKyAgICBDU3RyaW5nIGNvbnRlbnQoIiIpOworICAgIGludCBsZW4gPSBzdGF0aWNf
Y2FzdDxpbnQ+KGNvbnRlbnQubGVuZ3RoKCkpOworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1
ZihTaGFyZWRCdWZmZXI6OmNyZWF0ZShjb250ZW50LmRhdGEoKSwgbGVuKSk7CisgICAgU3Vic3Rp
dHV0ZURhdGEgc3Vic3REYXRhKGJ1ZiwgU3RyaW5nKCJ0ZXh0L2h0bWwiKSwgU3RyaW5nKCJVVEYt
OCIpLCBLVVJMKCkpOworICAgIHdlYkZyYW1lLT5mcmFtZSgpLT5sb2FkZXIoKS0+bG9hZChSZXNv
dXJjZVJlcXVlc3QodXJsKSwgc3Vic3REYXRhLCBmYWxzZSk7CisKKyAgICAvLyBUaGlzIGRvY3Vt
ZW50IHdpbGwgYmUgdXNlZCBhcyAnbG9hZGluZyBjb250ZXh0JyBmb3IgdGhlIHdvcmtlci4KKyAg
ICBtX2xvYWRpbmdEb2N1bWVudCA9IHdlYkZyYW1lLT5mcmFtZSgpLT5kb2N1bWVudCgpOworfQor
Cit2b2lkIFdlYlNoYXJlZFdvcmtlckltcGw6OmRpZENyZWF0ZURhdGFTb3VyY2UoV2ViRnJhbWUq
LCBXZWJEYXRhU291cmNlKiBkcykKK3sKKyAgICAvLyBUZWxsIHRoZSBsb2FkZXIgdG8gbG9hZCB0
aGUgZGF0YSBpbnRvIHRoZSAnc2hhZG93IHBhZ2UnIHN5bmNocm9ub3VzbHksCisgICAgLy8gc28g
d2UgY2FuIGdyYWIgdGhlIHJlc3VsdGluZyBEb2N1bWVudCByaWdodCBhZnRlciBsb2FkLgorICAg
IHN0YXRpY19jYXN0PFdlYkRhdGFTb3VyY2VJbXBsKj4oZHMpLT5zZXREZWZlck1haW5SZXNvdXJj
ZURhdGFMb2FkKGZhbHNlKTsKK30KKworV2ViQXBwbGljYXRpb25DYWNoZUhvc3QqIFdlYlNoYXJl
ZFdvcmtlckltcGw6OmNyZWF0ZUFwcGxpY2F0aW9uQ2FjaGVIb3N0KFdlYkZyYW1lKiwgV2ViQXBw
bGljYXRpb25DYWNoZUhvc3RDbGllbnQqIGFwcGNhY2hlSG9zdENsaWVudCkKK3sKKyAgICBpZiAo
Y2xpZW50KCkpCisgICAgICAgIHJldHVybiBjbGllbnQoKS0+Y3JlYXRlQXBwbGljYXRpb25DYWNo
ZUhvc3QoYXBwY2FjaGVIb3N0Q2xpZW50KTsKKyAgICByZXR1cm4gMDsKK30KKworLy8gV29ya2Vy
T2JqZWN0UHJveHkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKwordm9pZCBXZWJTaGFyZWRXb3JrZXJJbXBsOjpwb3N0TWVzc2FnZVRv
V29ya2VyT2JqZWN0KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBtZXNzYWdlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NP
d25QdHI8TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+IGNoYW5uZWxzKQoreworICAgIFdlYldvcmtl
ckJhc2U6OmRpc3BhdGNoVGFza1RvTWFpblRocmVhZChjcmVhdGVDYWxsYmFja1Rhc2soJnBvc3RN
ZXNzYWdlVGFzaywgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyh0aGlzKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UtPnRvV2lyZVN0cmluZygp
LCBjaGFubmVscykpOworfQorCit2b2lkIFdlYlNoYXJlZFdvcmtlckltcGw6OnBvc3RNZXNzYWdl
VGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgV2ViU2hhcmVkV29ya2VySW1wbCogdGhpc1B0ciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBtZXNzYWdlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc093blB0cjxNZXNz
YWdlUG9ydENoYW5uZWxBcnJheT4gY2hhbm5lbHMpCit7CisgICAgaWYgKCF0aGlzUHRyLT5jbGll
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViTWVzc2FnZVBvcnRDaGFubmVsQXJyYXkg
d2ViQ2hhbm5lbHMoY2hhbm5lbHMgPyBjaGFubmVscy0+c2l6ZSgpIDogMCk7CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCB3ZWJDaGFubmVscy5zaXplKCk7ICsraSkgeworICAgICAgICB3ZWJD
aGFubmVsc1tpXSA9ICgqY2hhbm5lbHMpW2ldLT5jaGFubmVsKCktPndlYkNoYW5uZWxSZWxlYXNl
KCk7CisgICAgICAgIHdlYkNoYW5uZWxzW2ldLT5zZXRDbGllbnQoMCk7CisgICAgfQorCisgICAg
dGhpc1B0ci0+Y2xpZW50KCktPnBvc3RNZXNzYWdlVG9Xb3JrZXJPYmplY3QobWVzc2FnZSwgd2Vi
Q2hhbm5lbHMpOworfQorCit2b2lkIFdlYlNoYXJlZFdvcmtlckltcGw6OnBvc3RFeGNlcHRpb25U
b1dvcmtlck9iamVjdChjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsaW5lTnVtYmVyLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgU3RyaW5nJiBzb3VyY2VVUkwpCit7CisgICAgV2ViV29ya2VyQmFzZTo6ZGlzcGF0Y2hUYXNr
VG9NYWluVGhyZWFkKAorICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJnBvc3RFeGNlcHRpb25U
YXNrLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHRoaXMpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZXJyb3JNZXNzYWdlLCBsaW5lTnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc291cmNlVVJMKSk7Cit9CisKK3ZvaWQgV2ViU2hhcmVkV29ya2VySW1wbDo6cG9zdEV4Y2Vw
dGlvblRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViU2hhcmVkV29ya2VySW1wbCogdGhpc1B0
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3Ry
aW5nJiBlcnJvck1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCkKK3sKKyAgICBp
ZiAoIXRoaXNQdHItPmNsaWVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICB0aGlzUHRyLT5j
bGllbnQoKS0+cG9zdEV4Y2VwdGlvblRvV29ya2VyT2JqZWN0KGVycm9yTWVzc2FnZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3Vy
Y2VVUkwpOworfQorCit2b2lkIFdlYlNoYXJlZFdvcmtlckltcGw6OnBvc3RDb25zb2xlTWVzc2Fn
ZVRvV29ya2VyT2JqZWN0KE1lc3NhZ2VTb3VyY2Ugc291cmNlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlVHlwZSB0eXBl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBNZXNzYWdlTGV2ZWwgbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IGxpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgc291cmNlVVJMKQoreworICAgIFdlYldvcmtl
ckJhc2U6OmRpc3BhdGNoVGFza1RvTWFpblRocmVhZChjcmVhdGVDYWxsYmFja1Rhc2soJnBvc3RD
b25zb2xlTWVzc2FnZVRhc2ssIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcyksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSwgdHlwZSwgbGV2ZWws
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UsIGxp
bmVOdW1iZXIsIHNvdXJjZVVSTCkpOworfQorCit2b2lkIFdlYlNoYXJlZFdvcmtlckltcGw6OnBv
c3RDb25zb2xlTWVzc2FnZVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJTaGFyZWRX
b3JrZXJJbXBsKiB0aGlzUHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IHR5cGUsIGludCBsZXZlbCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpbmVO
dW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpCit7CisgICAgaWYgKCF0aGlzUHRyLT5jbGllbnQoKSkK
KyAgICAgICAgcmV0dXJuOworICAgIHRoaXNQdHItPmNsaWVudCgpLT5wb3N0Q29uc29sZU1lc3Nh
Z2VUb1dvcmtlck9iamVjdChzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUsIGxldmVsLCBtZXNzYWdlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsaW5lTnVtYmVyLCBzb3VyY2VVUkwpOworfQorCit2b2lkIFdlYlNoYXJlZFdvcmtlckltcGw6
OnBvc3RNZXNzYWdlVG9QYWdlSW5zcGVjdG9yKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAg
ICBXZWJXb3JrZXJCYXNlOjpkaXNwYXRjaFRhc2tUb01haW5UaHJlYWQoY3JlYXRlQ2FsbGJhY2tU
YXNrKCZwb3N0TWVzc2FnZVRvUGFnZUluc3BlY3RvclRhc2ssIEFsbG93Q3Jvc3NUaHJlYWRBY2Nl
c3ModGhpcyksIG1lc3NhZ2UpKTsKIH0KIAordm9pZCBXZWJTaGFyZWRXb3JrZXJJbXBsOjpwb3N0
TWVzc2FnZVRvUGFnZUluc3BlY3RvclRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYlNo
YXJlZFdvcmtlckltcGwqIHRoaXNQdHIsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBp
ZiAoIXRoaXNQdHItPmNsaWVudCgpKQorICAgICAgICByZXR1cm47CisgICAgdGhpc1B0ci0+Y2xp
ZW50KCktPmRpc3BhdGNoRGV2VG9vbHNNZXNzYWdlKG1lc3NhZ2UpOworfQorCit2b2lkIFdlYlNo
YXJlZFdvcmtlckltcGw6OnVwZGF0ZUluc3BlY3RvclN0YXRlQ29va2llKGNvbnN0IFdURjo6U3Ry
aW5nJiBjb29raWUpCit7CisgICAgV2ViV29ya2VyQmFzZTo6ZGlzcGF0Y2hUYXNrVG9NYWluVGhy
ZWFkKGNyZWF0ZUNhbGxiYWNrVGFzaygmdXBkYXRlSW5zcGVjdG9yU3RhdGVDb29raWVUYXNrLCBB
bGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHRoaXMpLCBjb29raWUpKTsKK30KKwordm9pZCBXZWJTaGFy
ZWRXb3JrZXJJbXBsOjp1cGRhdGVJbnNwZWN0b3JTdGF0ZUNvb2tpZVRhc2soU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIFdlYlNoYXJlZFdvcmtlckltcGwqIHRoaXNQdHIsIGNvbnN0IFN0cmluZyYg
Y29va2llKQoreworICAgIGlmICghdGhpc1B0ci0+Y2xpZW50KCkpCisgICAgICAgIHJldHVybjsK
KyAgICB0aGlzUHRyLT5jbGllbnQoKS0+c2F2ZURldlRvb2xzQWdlbnRTdGF0ZShjb29raWUpOwor
fQorCit2b2lkIFdlYlNoYXJlZFdvcmtlckltcGw6OmNvbmZpcm1NZXNzYWdlRnJvbVdvcmtlck9i
amVjdChib29sIGhhc1BlbmRpbmdBY3Rpdml0eSkKK3sKKyAgICBXZWJXb3JrZXJCYXNlOjpkaXNw
YXRjaFRhc2tUb01haW5UaHJlYWQoY3JlYXRlQ2FsbGJhY2tUYXNrKCZjb25maXJtTWVzc2FnZVRh
c2ssIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcyksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGhhc1BlbmRpbmdBY3Rpdml0eSkpOworfQorCit2b2lkIFdl
YlNoYXJlZFdvcmtlckltcGw6OmNvbmZpcm1NZXNzYWdlVGFzayhTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgV2ViU2hhcmVkV29ya2VySW1wbCogdGhpc1B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KQoreworICAgIGlm
ICghdGhpc1B0ci0+Y2xpZW50KCkpCisgICAgICAgIHJldHVybjsKKyAgICB0aGlzUHRyLT5jbGll
bnQoKS0+Y29uZmlybU1lc3NhZ2VGcm9tV29ya2VyT2JqZWN0KGhhc1BlbmRpbmdBY3Rpdml0eSk7
Cit9CisKK3ZvaWQgV2ViU2hhcmVkV29ya2VySW1wbDo6cmVwb3J0UGVuZGluZ0FjdGl2aXR5KGJv
b2wgaGFzUGVuZGluZ0FjdGl2aXR5KQoreworICAgIFdlYldvcmtlckJhc2U6OmRpc3BhdGNoVGFz
a1RvTWFpblRocmVhZChjcmVhdGVDYWxsYmFja1Rhc2soJnJlcG9ydFBlbmRpbmdBY3Rpdml0eVRh
c2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsbG93Q3Jv
c3NUaHJlYWRBY2Nlc3ModGhpcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGhhc1BlbmRpbmdBY3Rpdml0eSkpOworfQorCit2b2lkIFdlYlNoYXJlZFdvcmtl
ckltcGw6OnJlcG9ydFBlbmRpbmdBY3Rpdml0eVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBXZWJTaGFyZWRXb3JrZXJJbXBsKiB0aGlzUHRyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KQor
eworICAgIGlmICghdGhpc1B0ci0+Y2xpZW50KCkpCisgICAgICAgIHJldHVybjsKKyAgICB0aGlz
UHRyLT5jbGllbnQoKS0+cmVwb3J0UGVuZGluZ0FjdGl2aXR5KGhhc1BlbmRpbmdBY3Rpdml0eSk7
Cit9CisKK3ZvaWQgV2ViU2hhcmVkV29ya2VySW1wbDo6d29ya2VyQ29udGV4dENsb3NlZCgpCit7
CisgICAgV2ViV29ya2VyQmFzZTo6ZGlzcGF0Y2hUYXNrVG9NYWluVGhyZWFkKGNyZWF0ZUNhbGxi
YWNrVGFzaygmd29ya2VyQ29udGV4dENsb3NlZFRhc2ssCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcykpKTsKK30K
Kwordm9pZCBXZWJTaGFyZWRXb3JrZXJJbXBsOjp3b3JrZXJDb250ZXh0Q2xvc2VkVGFzayhTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBXZWJTaGFyZWRXb3JrZXJJbXBsKiB0aGlzUHRyKQorewor
ICAgIGlmICh0aGlzUHRyLT5jbGllbnQoKSkKKyAgICAgICAgdGhpc1B0ci0+Y2xpZW50KCktPndv
cmtlckNvbnRleHRDbG9zZWQoKTsKKworICAgIHRoaXNQdHItPnN0b3BXb3JrZXJUaHJlYWQoKTsK
K30KKwordm9pZCBXZWJTaGFyZWRXb3JrZXJJbXBsOjp3b3JrZXJDb250ZXh0RGVzdHJveWVkKCkK
K3sKKyAgICBXZWJXb3JrZXJCYXNlOjpkaXNwYXRjaFRhc2tUb01haW5UaHJlYWQoY3JlYXRlQ2Fs
bGJhY2tUYXNrKCZ3b3JrZXJDb250ZXh0RGVzdHJveWVkVGFzaywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsbG93Q3Jvc3NU
aHJlYWRBY2Nlc3ModGhpcykpKTsKK30KKwordm9pZCBXZWJTaGFyZWRXb3JrZXJJbXBsOjp3b3Jr
ZXJDb250ZXh0RGVzdHJveWVkVGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJT
aGFyZWRXb3JrZXJJbXBsKiB0aGlzUHRyKQoreworICAgIGlmICh0aGlzUHRyLT5jbGllbnQoKSkK
KyAgICAgICAgdGhpc1B0ci0+Y2xpZW50KCktPndvcmtlckNvbnRleHREZXN0cm95ZWQoKTsKKyAg
ICAvLyBUaGUgbGlmZXRpbWUgb2YgdGhpcyBwcm94eSBpcyBjb250cm9sbGVkIGJ5IHRoZSB3b3Jr
ZXIgY29udGV4dC4KKyAgICBkZWxldGUgdGhpc1B0cjsKK30KKworLy8gV29ya2VyTG9hZGVyUHJv
eHkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKwordm9pZCBXZWJTaGFyZWRXb3JrZXJJbXBsOjpwb3N0VGFza1RvTG9hZGVyKFBhc3NP
d25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gdGFzaykKK3sKKyAgICBBU1NFUlQo
bV9sb2FkaW5nRG9jdW1lbnQtPmlzRG9jdW1lbnQoKSk7CisgICAgbV9sb2FkaW5nRG9jdW1lbnQt
PnBvc3RUYXNrKHRhc2spOworfQorCit2b2lkIFdlYlNoYXJlZFdvcmtlckltcGw6OnBvc3RUYXNr
Rm9yTW9kZVRvV29ya2VyQ29udGV4dCgKKyAgICBQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ6OlRhc2s+IHRhc2ssIGNvbnN0IFN0cmluZyYgbW9kZSkKK3sKKyAgICBtX3dvcmtlclRo
cmVhZC0+cnVuTG9vcCgpLnBvc3RUYXNrRm9yTW9kZSh0YXNrLCBtb2RlKTsKK30KKworCisKIGJv
b2wgV2ViU2hhcmVkV29ya2VySW1wbDo6aXNTdGFydGVkKCkKIHsKICAgICAvLyBTaG91bGQgbm90
IGV2ZXIgYmUgY2FsbGVkIGZyb20gdGhlIHdvcmtlciB0aHJlYWQgKHRoaXMgQVBJIGlzIG9ubHkg
Y2FsbGVkIG9uIFdlYlNoYXJlZFdvcmtlclByb3h5IG9uIHRoZSByZW5kZXJlciB0aHJlYWQpLgpA
QCAtMTc3LDE5ICs0NDMsMTAgQEAgdm9pZCBXZWJTaGFyZWRXb3JrZXJJbXBsOjpkaXNwYXRjaERl
dlRvb2xzTWVzc2FnZShjb25zdCBXZWJTdHJpbmcmIG1lc3NhZ2UpCiAgICAgd29ya2VyVGhyZWFk
KCktPnJ1bkxvb3AoKS5wb3N0VGFza0Zvck1vZGUoY3JlYXRlQ2FsbGJhY2tUYXNrKGRpc3BhdGNo
T25JbnNwZWN0b3JCYWNrZW5kVGFzaywgU3RyaW5nKG1lc3NhZ2UpKSwgV29ya2VyRGVidWdnZXJB
Z2VudDo6ZGVidWdnZXJUYXNrTW9kZSk7CiB9CiAKLVdlYldvcmtlckNsaWVudCogV2ViU2hhcmVk
V29ya2VySW1wbDo6Y2xpZW50KCkKLXsKLSAgICAvLyBXZSBzaG91bGQgbmV2ZXIgYmUgYXNrZWQg
Zm9yIGEgV2ViV29ya2VyQ2xpZW50IChvbmx5IGRlZGljYXRlZCB3b3JrZXJzIGhhdmUgYW4gYXNz
b2NpYXRlZCBXZWJXb3JrZXJDbGllbnQpLgotICAgIC8vIEl0IHNob3VsZCBub3QgYmUgcG9zc2li
bGUgZm9yIFNoYXJlZFdvcmtlckNvbnRleHQgdG8gZ2VuZXJhdGUgYW4gQVBJIGNhbGwgb3V0c2lk
ZSB0aG9zZSBzdXBwb3J0ZWQgYnkgV2ViQ29tbW9uV29ya2VyQ2xpZW50LgotICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAwOwotfQotCi1XZWJTaGFyZWRXb3JrZXIqIFdlYlNo
YXJlZFdvcmtlcjo6Y3JlYXRlKFdlYkNvbW1vbldvcmtlckNsaWVudCogY2xpZW50KQorV2ViU2hh
cmVkV29ya2VyKiBXZWJTaGFyZWRXb3JrZXI6OmNyZWF0ZShXZWJTaGFyZWRXb3JrZXJDbGllbnQq
IGNsaWVudCkKIHsKICAgICByZXR1cm4gbmV3IFdlYlNoYXJlZFdvcmtlckltcGwoY2xpZW50KTsK
IH0KLQogI2VuZGlmIC8vIEVOQUJMRShTSEFSRURfV09SS0VSUykKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTaGFyZWRX
b3JrZXJJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTaGFyZWRXb3JrZXJJ
bXBsLmgKaW5kZXggNDM3YmIyYi4uODNkMzYxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViU2hhcmVkV29ya2VySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYlNoYXJlZFdvcmtlckltcGwuaApAQCAtMzQsMjAgKzM0LDY0IEBACiAjaW5j
bHVkZSAiV2ViU2hhcmVkV29ya2VyLmgiCiAKICNpZiBFTkFCTEUoU0hBUkVEX1dPUktFUlMpCi0K
ICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCi0KKyNpbmNsdWRlICJXZWJDb21t
b25Xb3JrZXJDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJGcmFtZUNsaWVudC5oIgogI2luY2x1ZGUg
IldlYldvcmtlckJhc2UuaCIKKyNpbmNsdWRlICJXZWJXb3JrZXJDbGllbnQuaCIKKyNpbmNsdWRl
ICJXb3JrZXJMb2FkZXJQcm94eS5oIgorI2luY2x1ZGUgIldvcmtlck9iamVjdFByb3h5LmgiCisj
aW5jbHVkZSAiV29ya2VyVGhyZWFkLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKLW5hbWVzcGFjZSBXZWJLaXQgewogCituYW1lc3BhY2Ug
V2ViS2l0IHsKK2NsYXNzIFdlYkFwcGxpY2F0aW9uQ2FjaGVIb3N0OworY2xhc3MgV2ViQXBwbGlj
YXRpb25DYWNoZUhvc3RDbGllbnQ7CitjbGFzcyBXZWJXb3JrZXJDbGllbnQ7CitjbGFzcyBXZWJT
ZWN1cml0eU9yaWdpbjsKK2NsYXNzIFdlYlN0cmluZzsKK2NsYXNzIFdlYlVSTDsKK2NsYXNzIFdl
YlZpZXc7CitjbGFzcyBXZWJXb3JrZXI7CitjbGFzcyBXZWJTaGFyZWRXb3JrZXJDbGllbnQ7CiAv
LyBUaGlzIGNsYXNzIGlzIHVzZWQgYnkgdGhlIHdvcmtlciBwcm9jZXNzIGNvZGUgdG8gdGFsayB0
byB0aGUgV2ViQ29yZTo6U2hhcmVkV29ya2VyIGltcGxlbWVudGF0aW9uLgogLy8gSXQgY2FuJ3Qg
dXNlIGl0IGRpcmVjdGx5IHNpbmNlIGl0IHVzZXMgV2ViS2l0IHR5cGVzLCBzbyB0aGlzIGNsYXNz
IGNvbnZlcnRzIHRoZSBkYXRhIHR5cGVzLgogLy8gV2hlbiB0aGUgV2ViQ29yZTo6U2hhcmVkV29y
a2VyIG9iamVjdCB3YW50cyB0byBjYWxsIFdlYkNvcmU6OldvcmtlclJlcG9ydGluZ1Byb3h5LCB0
aGlzIGNsYXNzIHdpbGwKIC8vIGNvbnZlcnQgdG8gQ2hyb21lIGRhdGEgdHlwZXMgZmlyc3QgYW5k
IHRoZW4gY2FsbCB0aGUgc3VwcGxpZWQgV2ViQ29tbW9uV29ya2VyQ2xpZW50LgotY2xhc3MgV2Vi
U2hhcmVkV29ya2VySW1wbCA6IHB1YmxpYyBXZWJXb3JrZXJCYXNlLCBwdWJsaWMgV2ViU2hhcmVk
V29ya2VyIHsKK2NsYXNzIFdlYlNoYXJlZFdvcmtlckltcGwgOiBwdWJsaWMgV2ViQ29yZTo6V29y
a2VyT2JqZWN0UHJveHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLCBwdWJsaWMgV2ViV29y
a2VyQmFzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBXZWJGcmFtZUNsaWVu
dAorICAgICAgICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBXZWJTaGFyZWRXb3JrZXIgewog
cHVibGljOgotICAgIGV4cGxpY2l0IFdlYlNoYXJlZFdvcmtlckltcGwoV2ViQ29tbW9uV29ya2Vy
Q2xpZW50KiBjbGllbnQpOworICAgIGV4cGxpY2l0IFdlYlNoYXJlZFdvcmtlckltcGwoV2ViU2hh
cmVkV29ya2VyQ2xpZW50Kik7CisKKyAgICB2aXJ0dWFsIHZvaWQgcG9zdE1lc3NhZ2VUb1dvcmtl
ck9iamVjdCgKKyAgICAgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFs
dWU+LAorICAgICAgICBQYXNzT3duUHRyPFdlYkNvcmU6Ok1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5
Pik7CisgICAgdmlydHVhbCB2b2lkIHBvc3RFeGNlcHRpb25Ub1dvcmtlck9iamVjdCgKKyAgICAg
ICAgY29uc3QgV1RGOjpTdHJpbmcmLCBpbnQsIGNvbnN0IFdURjo6U3RyaW5nJik7CisgICAgdmly
dHVhbCB2b2lkIHBvc3RDb25zb2xlTWVzc2FnZVRvV29ya2VyT2JqZWN0KAorICAgICAgICBXZWJD
b3JlOjpNZXNzYWdlU291cmNlLCBXZWJDb3JlOjpNZXNzYWdlVHlwZSwKKyAgICAgICAgV2ViQ29y
ZTo6TWVzc2FnZUxldmVsLCBjb25zdCBXVEY6OlN0cmluZyYsIGludCwgY29uc3QgV1RGOjpTdHJp
bmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcG9zdE1lc3NhZ2VUb1BhZ2VJbnNwZWN0b3IoY29uc3Qg
V1RGOjpTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlSW5zcGVjdG9yU3RhdGVDb29r
aWUoY29uc3QgV1RGOjpTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29uZmlybU1lc3NhZ2VG
cm9tV29ya2VyT2JqZWN0KGJvb2wpOworICAgIHZpcnR1YWwgdm9pZCByZXBvcnRQZW5kaW5nQWN0
aXZpdHkoYm9vbCk7CisgICAgdmlydHVhbCB2b2lkIHdvcmtlckNvbnRleHRDbG9zZWQoKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgd29ya2VyQ29udGV4dERlc3Ryb3llZCgpOworICAgIHZpcnR1YWwgV2Vi
VmlldyogdmlldygpIGNvbnN0IHsgcmV0dXJuIG1fd2ViVmlldzsgfQorCisgICAgLy8gV2ViQ29y
ZTo6V29ya2VyTG9hZGVyUHJveHkgbWV0aG9kczoKKyAgICB2aXJ0dWFsIHZvaWQgcG9zdFRhc2tU
b0xvYWRlcihQYXNzT3duUHRyPFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+
KTsKKyAgICB2aXJ0dWFsIHZvaWQgcG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJDb250ZXh0KAorICAg
ICAgICBQYXNzT3duUHRyPFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+LCBj
b25zdCBXVEY6OlN0cmluZyYgbW9kZSk7CisKKyAgICAvLyBXZWJGcmFtZUNsaWVudCBtZXRob2Rz
IHRvIHN1cHBvcnQgcmVzb3VyY2UgbG9hZGluZyB0aHJ1IHRoZSAnc2hhZG93IHBhZ2UnLgorICAg
IHZpcnR1YWwgdm9pZCBkaWRDcmVhdGVEYXRhU291cmNlKFdlYkZyYW1lKiwgV2ViRGF0YVNvdXJj
ZSopOworICAgIHZpcnR1YWwgV2ViQXBwbGljYXRpb25DYWNoZUhvc3QqIGNyZWF0ZUFwcGxpY2F0
aW9uQ2FjaGVIb3N0KFdlYkZyYW1lKiwgV2ViQXBwbGljYXRpb25DYWNoZUhvc3RDbGllbnQqKTsK
KwogCiAgICAgLy8gV2ViU2hhcmVkV29ya2VyIG1ldGhvZHM6CiAgICAgdmlydHVhbCBib29sIGlz
U3RhcnRlZCgpOwpAQCAtNjMsMTkgKzEwNyw3MiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IGRldGFjaERldlRvb2xzKCk7CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGV2VG9vbHNNZXNz
YWdlKGNvbnN0IFdlYlN0cmluZyYpOwogCi0gICAgLy8gV2ViV29ya2VyQmFzZSBtZXRob2RzOgot
ICAgIFdlYldvcmtlckNsaWVudCogY2xpZW50KCk7Ci0gICAgV2ViQ29tbW9uV29ya2VyQ2xpZW50
KiBjb21tb25DbGllbnQoKSB7IHJldHVybiBtX2NsaWVudDsgfQogCiAgICAgLy8gTmV3V2ViV29y
a2VyQmFzZSBtZXRob2RzOgotICAgIE5ld1dlYkNvbW1vbldvcmtlckNsaWVudCogbmV3Q29tbW9u
Q2xpZW50KCkgeyByZXR1cm4gbV9jbGllbnQ7IH0KKyAgICBXZWJDb21tb25Xb3JrZXJDbGllbnQq
IGNvbW1vbkNsaWVudCgpIHsgcmV0dXJuIG1fY2xpZW50OyB9CiAKIHByaXZhdGU6CiAgICAgdmly
dHVhbCB+V2ViU2hhcmVkV29ya2VySW1wbCgpOwogCi0gICAgc3RhdGljIHZvaWQgY29ubmVjdFRh
c2soV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NPd25QdHI8V2ViQ29yZTo6
TWVzc2FnZVBvcnRDaGFubmVsPik7CisgICAgV2ViU2hhcmVkV29ya2VyQ2xpZW50KiBjbGllbnQo
KSB7IHJldHVybiBtX2NsaWVudDsgfQorCisgICAgdm9pZCBzZXRXb3JrZXJUaHJlYWQoUGFzc1Jl
ZlB0cjxXZWJDb3JlOjpXb3JrZXJUaHJlYWQ+IHRocmVhZCkgeyBtX3dvcmtlclRocmVhZCA9IHRo
cmVhZDsgfQorICAgIFdlYkNvcmU6OldvcmtlclRocmVhZCogd29ya2VyVGhyZWFkKCkgeyByZXR1
cm4gbV93b3JrZXJUaHJlYWQuZ2V0KCk7IH0KKworICAgIC8vIFNodXRzIGRvd24gdGhlIHdvcmtl
ciB0aHJlYWQuCisgICAgdm9pZCBzdG9wV29ya2VyVGhyZWFkKCk7CiAKLSAgICBXZWJDb21tb25X
b3JrZXJDbGllbnQqIG1fY2xpZW50OworICAgIC8vIENyZWF0ZXMgdGhlIHNoYWRvdyBsb2FkZXIg
dXNlZCBmb3Igd29ya2VyIG5ldHdvcmsgcmVxdWVzdHMuCisgICAgdm9pZCBpbml0aWFsaXplTG9h
ZGVyKGNvbnN0IFdlYlVSTCYpOworCisKKyAgICBzdGF0aWMgdm9pZCBjb25uZWN0VGFzayhXZWJD
b3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc093blB0cjxXZWJDb3JlOjpNZXNzYWdl
UG9ydENoYW5uZWw+KTsKKyAgICAvLyBUYXNrcyB0aGF0IGFyZSBydW4gb24gdGhlIG1haW4gdGhy
ZWFkLgorICAgIHN0YXRpYyB2b2lkIHBvc3RNZXNzYWdlVGFzaygKKyAgICAgICAgV2ViQ29yZTo6
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosCisgICAgICAgIFdlYlNoYXJlZFdvcmtlckltcGwqIHRo
aXNQdHIsCisgICAgICAgIFdURjo6U3RyaW5nIG1lc3NhZ2UsCisgICAgICAgIFBhc3NPd25QdHI8
V2ViQ29yZTo6TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+IGNoYW5uZWxzKTsKKyAgICBzdGF0aWMg
dm9pZCBwb3N0RXhjZXB0aW9uVGFzaygKKyAgICAgICAgV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosCisgICAgICAgIFdlYlNoYXJlZFdvcmtlckltcGwqIHRoaXNQdHIsCisgICAgICAg
IGNvbnN0IFdURjo6U3RyaW5nJiBtZXNzYWdlLAorICAgICAgICBpbnQgbGluZU51bWJlciwKKyAg
ICAgICAgY29uc3QgV1RGOjpTdHJpbmcmIHNvdXJjZVVSTCk7CisgICAgc3RhdGljIHZvaWQgcG9z
dENvbnNvbGVNZXNzYWdlVGFzaygKKyAgICAgICAgV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosCisgICAgICAgIFdlYlNoYXJlZFdvcmtlckltcGwqIHRoaXNQdHIsCisgICAgICAgIGlu
dCBzb3VyY2UsCisgICAgICAgIGludCB0eXBlLAorICAgICAgICBpbnQgbGV2ZWwsCisgICAgICAg
IGNvbnN0IFdURjo6U3RyaW5nJiBtZXNzYWdlLAorICAgICAgICBpbnQgbGluZU51bWJlciwKKyAg
ICAgICAgY29uc3QgV1RGOjpTdHJpbmcmIHNvdXJjZVVSTCk7CisgICAgc3RhdGljIHZvaWQgcG9z
dE1lc3NhZ2VUb1BhZ2VJbnNwZWN0b3JUYXNrKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBXZWJTaGFyZWRXb3JrZXJJbXBsKiwgY29uc3QgV1RGOjpTdHJpbmcmKTsKKyAgICBzdGF0
aWMgdm9pZCB1cGRhdGVJbnNwZWN0b3JTdGF0ZUNvb2tpZVRhc2soV2ViQ29yZTo6U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIFdlYlNoYXJlZFdvcmtlckltcGwqIHRoaXNQdHIsIGNvbnN0IFdURjo6
U3RyaW5nJiBjb29raWUpOworICAgIHN0YXRpYyB2b2lkIGNvbmZpcm1NZXNzYWdlVGFzaygKKyAg
ICAgICAgV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosCisgICAgICAgIFdlYlNoYXJl
ZFdvcmtlckltcGwqIHRoaXNQdHIsCisgICAgICAgIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KTsK
KyAgICBzdGF0aWMgdm9pZCByZXBvcnRQZW5kaW5nQWN0aXZpdHlUYXNrKAorICAgICAgICBXZWJD
b3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwKKyAgICAgICAgV2ViU2hhcmVkV29ya2VySW1w
bCogdGhpc1B0ciwKKyAgICAgICAgYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkpOworICAgIHN0YXRp
YyB2b2lkIHdvcmtlckNvbnRleHRDbG9zZWRUYXNrKAorICAgICAgICBXZWJDb3JlOjpTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwKKyAgICAgICAgV2ViU2hhcmVkV29ya2VySW1wbCogdGhpc1B0cik7
CisgICAgc3RhdGljIHZvaWQgd29ya2VyQ29udGV4dERlc3Ryb3llZFRhc2soCisgICAgICAgIFdl
YkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLAorICAgICAgICBXZWJTaGFyZWRXb3JrZXJJ
bXBsKiB0aGlzUHRyKTsKKworICAgIC8vICdzaGFkb3cgcGFnZScgLSBjcmVhdGVkIHRvIHByb3h5
IGxvYWRpbmcgcmVxdWVzdHMgZnJvbSB0aGUgd29ya2VyLgorICAgIFJlZlB0cjxXZWJDb3JlOjpT
Y3JpcHRFeGVjdXRpb25Db250ZXh0PiBtX2xvYWRpbmdEb2N1bWVudDsKKyAgICBXZWJWaWV3KiBt
X3dlYlZpZXc7CisgICAgYm9vbCBtX2Fza2VkVG9UZXJtaW5hdGU7CisKKyAgICBSZWZQdHI8V2Vi
Q29yZTo6V29ya2VyVGhyZWFkPiBtX3dvcmtlclRocmVhZDsKKworICAgIFdlYlNoYXJlZFdvcmtl
ckNsaWVudCogbV9jbGllbnQ7CiAgICAgYm9vbCBtX3BhdXNlV29ya2VyQ29udGV4dE9uU3RhcnQ7
CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJC
YXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckJhc2UuY3BwCmlu
ZGV4IDkzZjg0MGMuLmIxMmRiN2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYldvcmtlckJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YldvcmtlckJhc2UuY3BwCkBAIC0zMiwyMCArMzIsNyBAQAogI2luY2x1ZGUgIldlYldvcmtlckJh
c2UuaCIKIAogI2luY2x1ZGUgIkNyb3NzVGhyZWFkVGFzay5oIgotI2luY2x1ZGUgIkRhdGFiYXNl
VGFzay5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiTWVzc2FnZVBvcnRDaGFu
bmVsLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuaCIKLSNpbmNsdWRl
ICJTZWN1cml0eU9yaWdpbi5oIgogCi0jaW5jbHVkZSAiV2ViRGF0YVNvdXJjZUltcGwuaCIKLSNp
bmNsdWRlICJXZWJGaWxlRXJyb3IuaCIKLSNpbmNsdWRlICJXZWJGcmFtZUNsaWVudC5oIgotI2lu
Y2x1ZGUgIldlYkZyYW1lSW1wbC5oIgotI2luY2x1ZGUgIldlYk1lc3NhZ2VQb3J0Q2hhbm5lbC5o
IgotI2luY2x1ZGUgIldlYlJ1bnRpbWVGZWF0dXJlcy5oIgotI2luY2x1ZGUgIldlYlNldHRpbmdz
LmgiCi0jaW5jbHVkZSAiV2ViVmlldy5oIgogI2luY2x1ZGUgIldlYldvcmtlckNsaWVudC5oIgog
CiAjaW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgpAQCAtNTksODIgKzQ2LDcgQEAgbmFtZXNwYWNl
IFdlYktpdCB7CiAKICNpZiBFTkFCTEUoV09SS0VSUykKIAotLy8gVGhpcyBmdW5jdGlvbiBpcyBj
YWxsZWQgb24gdGhlIG1haW4gdGhyZWFkIHRvIGZvcmNlIHRvIGluaXRpYWxpemUgc29tZSBzdGF0
aWMKLS8vIHZhbHVlcyB1c2VkIGluIFdlYktpdCBiZWZvcmUgYW55IHdvcmtlciB0aHJlYWQgaXMg
c3RhcnRlZC4gVGhpcyBpcyBiZWNhdXNlIGluCi0vLyBvdXIgd29ya2VyIHByb2Nlc3NzLCB3ZSBk
byBub3QgcnVuIGFueSBXZWJLaXQgY29kZSBpbiBtYWluIHRocmVhZCBhbmQgdGh1cwotLy8gd2hl
biBtdWx0aXBsZSB3b3JrZXJzIHRyeSB0byBzdGFydCBhdCB0aGUgc2FtZSB0aW1lLCB3ZSBtaWdo
dCBoaXQgY3Jhc2ggZHVlCi0vLyB0byBjb250ZW50aW9uIGZvciBpbml0aWFsaXppbmcgc3RhdGlj
IHZhbHVlcy4KLXN0YXRpYyB2b2lkIGluaXRpYWxpemVXZWJLaXRTdGF0aWNWYWx1ZXMoKQotewot
ICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVkID0gZmFsc2U7Ci0gICAgaWYgKCFpbml0aWFsaXpl
ZCkgewotICAgICAgICBpbml0aWFsaXplZCA9IHRydWU7Ci0gICAgICAgIC8vIE5vdGUgdGhhdCB3
ZSBoYXZlIHRvIHBhc3MgYSBVUkwgd2l0aCB2YWxpZCBwcm90b2NvbCBpbiBvcmRlciB0byBmb2xs
b3cKLSAgICAgICAgLy8gdGhlIHBhdGggdG8gZG8gc3RhdGljIHZhbHVlIGluaXRpYWxpemF0aW9u
cy4KLSAgICAgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBvcmlnaW4gPQotICAgICAgICAgICAg
U2VjdXJpdHlPcmlnaW46OmNyZWF0ZShLVVJMKFBhcnNlZFVSTFN0cmluZywgImh0dHA6Ly9sb2Nh
bGhvc3QiKSk7Ci0gICAgICAgIG9yaWdpbi5yZWxlYXNlKCk7Ci0gICAgfQotfQotCi1XZWJXb3Jr
ZXJCYXNlOjpXZWJXb3JrZXJCYXNlKCkKLSAgICA6IG1fd2ViVmlldygwKQotICAgICwgbV9hc2tl
ZFRvVGVybWluYXRlKGZhbHNlKQotewotICAgIGluaXRpYWxpemVXZWJLaXRTdGF0aWNWYWx1ZXMo
KTsKLX0KLQotV2ViV29ya2VyQmFzZTo6fldlYldvcmtlckJhc2UoKQotewotICAgIEFTU0VSVCht
X3dlYlZpZXcpOwotICAgIFdlYkZyYW1lSW1wbCogd2ViRnJhbWUgPSBzdGF0aWNfY2FzdDxXZWJG
cmFtZUltcGwqPihtX3dlYlZpZXctPm1haW5GcmFtZSgpKTsKLSAgICBpZiAod2ViRnJhbWUpCi0g
ICAgICAgIHdlYkZyYW1lLT5zZXRDbGllbnQoMCk7Ci0gICAgbV93ZWJWaWV3LT5jbG9zZSgpOwot
fQotCi12b2lkIFdlYldvcmtlckJhc2U6OnN0b3BXb3JrZXJUaHJlYWQoKQotewotICAgIGlmICht
X2Fza2VkVG9UZXJtaW5hdGUpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2Fza2VkVG9UZXJtaW5h
dGUgPSB0cnVlOwotICAgIGlmIChtX3dvcmtlclRocmVhZCkKLSAgICAgICAgbV93b3JrZXJUaHJl
YWQtPnN0b3AoKTsKLX0KLQotdm9pZCBXZWJXb3JrZXJCYXNlOjppbml0aWFsaXplTG9hZGVyKGNv
bnN0IFdlYlVSTCYgdXJsKQotewotICAgIC8vIENyZWF0ZSAnc2hhZG93IHBhZ2UnLiBUaGlzIHBh
Z2UgaXMgbmV2ZXIgZGlzcGxheWVkLCBpdCBpcyB1c2VkIHRvIHByb3h5IHRoZQotICAgIC8vIGxv
YWRpbmcgcmVxdWVzdHMgZnJvbSB0aGUgd29ya2VyIGNvbnRleHQgdG8gdGhlIHJlc3Qgb2YgV2Vi
S2l0IGFuZCBDaHJvbWl1bQotICAgIC8vIGluZnJhc3RydWN0dXJlLgotICAgIEFTU0VSVCghbV93
ZWJWaWV3KTsKLSAgICBtX3dlYlZpZXcgPSBXZWJWaWV3OjpjcmVhdGUoMCk7Ci0gICAgbV93ZWJW
aWV3LT5zZXR0aW5ncygpLT5zZXRPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZUVuYWJsZWQoV2Vi
UnVudGltZUZlYXR1cmVzOjppc0FwcGxpY2F0aW9uQ2FjaGVFbmFibGVkKCkpOwotICAgIC8vIEZJ
WE1FOiBTZXR0aW5ncyBpbmZvcm1hdGlvbiBzaG91bGQgYmUgcGFzc2VkIHRvIHRoZSBXb3JrZXIg
cHJvY2VzcyBmcm9tIEJyb3dzZXIgcHJvY2VzcyB3aGVuIHRoZSB3b3JrZXIKLSAgICAvLyBpcyBj
cmVhdGVkIChzaW1pbGFyIHRvIFJlbmRlclRocmVhZDo6T25DcmVhdGVOZXdWaWV3KS4KLSAgICBt
X3dlYlZpZXctPnNldHRpbmdzKCktPnNldEhpeGllNzZXZWJTb2NrZXRQcm90b2NvbEVuYWJsZWQo
ZmFsc2UpOwotICAgIG1fd2ViVmlldy0+aW5pdGlhbGl6ZU1haW5GcmFtZSh0aGlzKTsKLQotICAg
IFdlYkZyYW1lSW1wbCogd2ViRnJhbWUgPSBzdGF0aWNfY2FzdDxXZWJGcmFtZUltcGwqPihtX3dl
YlZpZXctPm1haW5GcmFtZSgpKTsKLQotICAgIC8vIENvbnN0cnVjdCBzdWJzdGl0dXRlIGRhdGEg
c291cmNlIGZvciB0aGUgJ3NoYWRvdyBwYWdlJy4gV2Ugb25seSBuZWVkIGl0Ci0gICAgLy8gdG8g
aGF2ZSBzYW1lIG9yaWdpbiBhcyB0aGUgd29ya2VyIHNvIHRoZSBsb2FkaW5nIGNoZWNrcyB3b3Jr
IGNvcnJlY3RseS4KLSAgICBDU3RyaW5nIGNvbnRlbnQoIiIpOwotICAgIGludCBsZW4gPSBzdGF0
aWNfY2FzdDxpbnQ+KGNvbnRlbnQubGVuZ3RoKCkpOwotICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+
IGJ1ZihTaGFyZWRCdWZmZXI6OmNyZWF0ZShjb250ZW50LmRhdGEoKSwgbGVuKSk7Ci0gICAgU3Vi
c3RpdHV0ZURhdGEgc3Vic3REYXRhKGJ1ZiwgU3RyaW5nKCJ0ZXh0L2h0bWwiKSwgU3RyaW5nKCJV
VEYtOCIpLCBLVVJMKCkpOwotICAgIHdlYkZyYW1lLT5mcmFtZSgpLT5sb2FkZXIoKS0+bG9hZChS
ZXNvdXJjZVJlcXVlc3QodXJsKSwgc3Vic3REYXRhLCBmYWxzZSk7Ci0KLSAgICAvLyBUaGlzIGRv
Y3VtZW50IHdpbGwgYmUgdXNlZCBhcyAnbG9hZGluZyBjb250ZXh0JyBmb3IgdGhlIHdvcmtlci4K
LSAgICBtX2xvYWRpbmdEb2N1bWVudCA9IHdlYkZyYW1lLT5mcmFtZSgpLT5kb2N1bWVudCgpOwot
fQotCi12b2lkIFdlYldvcmtlckJhc2U6OmRpc3BhdGNoVGFza1RvTWFpblRocmVhZChQYXNzT3du
UHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2spCi17Ci0gICAgY2FsbE9uTWFp
blRocmVhZChpbnZva2VUYXNrTWV0aG9kLCB0YXNrLmxlYWtQdHIoKSk7Ci19Ci0KLXZvaWQgV2Vi
V29ya2VyQmFzZTo6aW52b2tlVGFza01ldGhvZCh2b2lkKiBwYXJhbSkKK3N0YXRpYyB2b2lkIGlu
dm9rZVRhc2tNZXRob2Qodm9pZCogcGFyYW0pCiB7CiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dDo6VGFzayogdGFzayA9CiAgICAgICAgIHN0YXRpY19jYXN0PFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQ6OlRhc2sqPihwYXJhbSk7CkBAIC0xNDIsMTkzICs1NCwxMCBAQCB2b2lkIFdlYldvcmtlckJh
c2U6Omludm9rZVRhc2tNZXRob2Qodm9pZCogcGFyYW0pCiAgICAgZGVsZXRlIHRhc2s7CiB9CiAK
LXZvaWQgV2ViV29ya2VyQmFzZTo6ZGlkQ3JlYXRlRGF0YVNvdXJjZShXZWJGcmFtZSosIFdlYkRh
dGFTb3VyY2UqIGRzKQotewotICAgIC8vIFRlbGwgdGhlIGxvYWRlciB0byBsb2FkIHRoZSBkYXRh
IGludG8gdGhlICdzaGFkb3cgcGFnZScgc3luY2hyb25vdXNseSwKLSAgICAvLyBzbyB3ZSBjYW4g
Z3JhYiB0aGUgcmVzdWx0aW5nIERvY3VtZW50IHJpZ2h0IGFmdGVyIGxvYWQuCi0gICAgc3RhdGlj
X2Nhc3Q8V2ViRGF0YVNvdXJjZUltcGwqPihkcyktPnNldERlZmVyTWFpblJlc291cmNlRGF0YUxv
YWQoZmFsc2UpOwotfQotCi1XZWJBcHBsaWNhdGlvbkNhY2hlSG9zdCogV2ViV29ya2VyQmFzZTo6
Y3JlYXRlQXBwbGljYXRpb25DYWNoZUhvc3QoV2ViRnJhbWUqLCBXZWJBcHBsaWNhdGlvbkNhY2hl
SG9zdENsaWVudCogYXBwY2FjaGVIb3N0Q2xpZW50KQotewotICAgIGlmIChjb21tb25DbGllbnQo
KSkKLSAgICAgICAgcmV0dXJuIGNvbW1vbkNsaWVudCgpLT5jcmVhdGVBcHBsaWNhdGlvbkNhY2hl
SG9zdChhcHBjYWNoZUhvc3RDbGllbnQpOwotICAgIHJldHVybiAwOwotfQotCi0vLyBXb3JrZXJP
YmplY3RQcm94eSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotCi12b2lkIFdlYldvcmtlckJhc2U6OnBvc3RNZXNzYWdlVG9Xb3JrZXJP
YmplY3QoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG1lc3NhZ2UsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc093blB0cjxNZXNzYWdl
UG9ydENoYW5uZWxBcnJheT4gY2hhbm5lbHMpCi17Ci0gICAgZGlzcGF0Y2hUYXNrVG9NYWluVGhy
ZWFkKGNyZWF0ZUNhbGxiYWNrVGFzaygmcG9zdE1lc3NhZ2VUYXNrLCBBbGxvd0Nyb3NzVGhyZWFk
QWNjZXNzKHRoaXMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbWVzc2FnZS0+dG9XaXJlU3RyaW5nKCksIGNoYW5uZWxzKSk7Ci19Ci0KLXZvaWQgV2Vi
V29ya2VyQmFzZTo6cG9zdE1lc3NhZ2VUYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJXb3JrZXJCYXNlKiB0
aGlzUHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIG1lc3Nh
Z2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNzT3duUHRyPE1lc3Nh
Z2VQb3J0Q2hhbm5lbEFycmF5PiBjaGFubmVscykKLXsKLSAgICBpZiAoIXRoaXNQdHItPmNsaWVu
dCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXZWJNZXNzYWdlUG9ydENoYW5uZWxBcnJheSB3
ZWJDaGFubmVscyhjaGFubmVscyA/IGNoYW5uZWxzLT5zaXplKCkgOiAwKTsKLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHdlYkNoYW5uZWxzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHdlYkNo
YW5uZWxzW2ldID0gKCpjaGFubmVscylbaV0tPmNoYW5uZWwoKS0+d2ViQ2hhbm5lbFJlbGVhc2Uo
KTsKLSAgICAgICAgd2ViQ2hhbm5lbHNbaV0tPnNldENsaWVudCgwKTsKLSAgICB9Ci0KLSAgICB0
aGlzUHRyLT5jbGllbnQoKS0+cG9zdE1lc3NhZ2VUb1dvcmtlck9iamVjdChtZXNzYWdlLCB3ZWJD
aGFubmVscyk7Ci19Ci0KLXZvaWQgV2ViV29ya2VyQmFzZTo6cG9zdEV4Y2VwdGlvblRvV29ya2Vy
T2JqZWN0KGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpbmVOdW1iZXIsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHNvdXJjZVVS
TCkKLXsKLSAgICBkaXNwYXRjaFRhc2tUb01haW5UaHJlYWQoCi0gICAgICAgIGNyZWF0ZUNhbGxi
YWNrVGFzaygmcG9zdEV4Y2VwdGlvblRhc2ssIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcyks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UsIGxpbmVOdW1iZXIsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VVUkwpKTsKLX0KLQotdm9pZCBXZWJXb3Jr
ZXJCYXNlOjpwb3N0RXhjZXB0aW9uVGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJXb3JrZXJCYXNlKiB0
aGlzUHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJp
bmcmIGVycm9yTWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMKQotewotICAgIGlmICghdGhp
c1B0ci0+Y29tbW9uQ2xpZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHRoaXNQdHItPmNv
bW1vbkNsaWVudCgpLT5wb3N0RXhjZXB0aW9uVG9Xb3JrZXJPYmplY3QoZXJyb3JNZXNzYWdlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bGluZU51bWJlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNvdXJjZVVSTCk7Ci19Ci0KLXZvaWQgV2ViV29ya2VyQmFzZTo6cG9zdENv
bnNvbGVNZXNzYWdlVG9Xb3JrZXJPYmplY3QoTWVzc2FnZVNvdXJjZSBzb3VyY2UsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VUeXBl
IHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIE1lc3NhZ2VMZXZlbCBsZXZlbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBtZXNzYWdlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGluZU51bWJlciwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgU3RyaW5nJiBzb3VyY2VVUkwpCi17Ci0gICAgZGlzcGF0Y2hUYXNrVG9NYWluVGhyZWFkKGNy
ZWF0ZUNhbGxiYWNrVGFzaygmcG9zdENvbnNvbGVNZXNzYWdlVGFzaywgQWxsb3dDcm9zc1RocmVh
ZEFjY2Vzcyh0aGlzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNvdXJjZSwgdHlwZSwgbGV2ZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VVUkwpKTsKLX0K
IAotdm9pZCBXZWJXb3JrZXJCYXNlOjpwb3N0Q29uc29sZU1lc3NhZ2VUYXNrKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgV2ViV29ya2VyQmFzZSogdGhpc1B0ciwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgc291cmNlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCB0eXBlLCBpbnQgbGV2ZWwsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBtZXNzYWdlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsaW5lTnVtYmVyLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgc291
cmNlVVJMKQotewotICAgIGlmICghdGhpc1B0ci0+Y29tbW9uQ2xpZW50KCkpCi0gICAgICAgIHJl
dHVybjsKLSAgICB0aGlzUHRyLT5jb21tb25DbGllbnQoKS0+cG9zdENvbnNvbGVNZXNzYWdlVG9X
b3JrZXJPYmplY3Qoc291cmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLCBsZXZlbCwgbWVzc2FnZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlu
ZU51bWJlciwgc291cmNlVVJMKTsKLX0KLQotdm9pZCBXZWJXb3JrZXJCYXNlOjpwb3N0TWVzc2Fn
ZVRvUGFnZUluc3BlY3Rvcihjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgZGlzcGF0Y2hU
YXNrVG9NYWluVGhyZWFkKGNyZWF0ZUNhbGxiYWNrVGFzaygmcG9zdE1lc3NhZ2VUb1BhZ2VJbnNw
ZWN0b3JUYXNrLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHRoaXMpLCBtZXNzYWdlKSk7Ci19Ci0K
LXZvaWQgV2ViV29ya2VyQmFzZTo6cG9zdE1lc3NhZ2VUb1BhZ2VJbnNwZWN0b3JUYXNrKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJXb3JrZXJCYXNlKiB0aGlzUHRyLCBjb25zdCBTdHJpbmcm
IG1lc3NhZ2UpCi17Ci0gICAgaWYgKCF0aGlzUHRyLT5jb21tb25DbGllbnQoKSkKLSAgICAgICAg
cmV0dXJuOwotICAgIHRoaXNQdHItPmNvbW1vbkNsaWVudCgpLT5kaXNwYXRjaERldlRvb2xzTWVz
c2FnZShtZXNzYWdlKTsKLX0KLQotdm9pZCBXZWJXb3JrZXJCYXNlOjp1cGRhdGVJbnNwZWN0b3JT
dGF0ZUNvb2tpZShjb25zdCBXVEY6OlN0cmluZyYgY29va2llKQotewotICAgIGRpc3BhdGNoVGFz
a1RvTWFpblRocmVhZChjcmVhdGVDYWxsYmFja1Rhc2soJnVwZGF0ZUluc3BlY3RvclN0YXRlQ29v
a2llVGFzaywgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyh0aGlzKSwgY29va2llKSk7Ci19Ci0KLXZv
aWQgV2ViV29ya2VyQmFzZTo6dXBkYXRlSW5zcGVjdG9yU3RhdGVDb29raWVUYXNrKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBXZWJXb3JrZXJCYXNlKiB0aGlzUHRyLCBjb25zdCBTdHJpbmcmIGNv
b2tpZSkKLXsKLSAgICBpZiAoIXRoaXNQdHItPmNvbW1vbkNsaWVudCgpKQotICAgICAgICByZXR1
cm47Ci0gICAgdGhpc1B0ci0+Y29tbW9uQ2xpZW50KCktPnNhdmVEZXZUb29sc0FnZW50U3RhdGUo
Y29va2llKTsKLX0KLQotdm9pZCBXZWJXb3JrZXJCYXNlOjpjb25maXJtTWVzc2FnZUZyb21Xb3Jr
ZXJPYmplY3QoYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkpCi17Ci0gICAgZGlzcGF0Y2hUYXNrVG9N
YWluVGhyZWFkKGNyZWF0ZUNhbGxiYWNrVGFzaygmY29uZmlybU1lc3NhZ2VUYXNrLCBBbGxvd0Ny
b3NzVGhyZWFkQWNjZXNzKHRoaXMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaGFzUGVuZGluZ0FjdGl2aXR5KSk7Ci19Ci0KLXZvaWQgV2ViV29ya2Vy
QmFzZTo6Y29uZmlybU1lc3NhZ2VUYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJXb3JrZXJCYXNlKiB0
aGlzUHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBoYXNQ
ZW5kaW5nQWN0aXZpdHkpCi17Ci0gICAgaWYgKCF0aGlzUHRyLT5jbGllbnQoKSkKLSAgICAgICAg
cmV0dXJuOwotICAgIHRoaXNQdHItPmNsaWVudCgpLT5jb25maXJtTWVzc2FnZUZyb21Xb3JrZXJP
YmplY3QoaGFzUGVuZGluZ0FjdGl2aXR5KTsKLX0KLQotdm9pZCBXZWJXb3JrZXJCYXNlOjpyZXBv
cnRQZW5kaW5nQWN0aXZpdHkoYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkpCi17Ci0gICAgZGlzcGF0
Y2hUYXNrVG9NYWluVGhyZWFkKGNyZWF0ZUNhbGxiYWNrVGFzaygmcmVwb3J0UGVuZGluZ0FjdGl2
aXR5VGFzaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcyksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBoYXNQZW5kaW5nQWN0aXZpdHkpKTsKLX0KLQotdm9pZCBX
ZWJXb3JrZXJCYXNlOjpyZXBvcnRQZW5kaW5nQWN0aXZpdHlUYXNrKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgV2ViV29ya2VyQmFzZSogdGhpc1B0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSkKLXsKLSAgICBpZiAo
IXRoaXNQdHItPmNsaWVudCgpKQotICAgICAgICByZXR1cm47Ci0gICAgdGhpc1B0ci0+Y2xpZW50
KCktPnJlcG9ydFBlbmRpbmdBY3Rpdml0eShoYXNQZW5kaW5nQWN0aXZpdHkpOwotfQotCi12b2lk
IFdlYldvcmtlckJhc2U6OndvcmtlckNvbnRleHRDbG9zZWQoKQotewotICAgIGRpc3BhdGNoVGFz
a1RvTWFpblRocmVhZChjcmVhdGVDYWxsYmFja1Rhc2soJndvcmtlckNvbnRleHRDbG9zZWRUYXNr
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3dD
cm9zc1RocmVhZEFjY2Vzcyh0aGlzKSkpOwotfQotCi12b2lkIFdlYldvcmtlckJhc2U6Ondvcmtl
ckNvbnRleHRDbG9zZWRUYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYldvcmtlckJhc2UqIHRo
aXNQdHIpCi17Ci0gICAgaWYgKHRoaXNQdHItPmNvbW1vbkNsaWVudCgpKQotICAgICAgICB0aGlz
UHRyLT5jb21tb25DbGllbnQoKS0+d29ya2VyQ29udGV4dENsb3NlZCgpOwotCi0gICAgdGhpc1B0
ci0+c3RvcFdvcmtlclRocmVhZCgpOwotfQotCi12b2lkIFdlYldvcmtlckJhc2U6OndvcmtlckNv
bnRleHREZXN0cm95ZWQoKQotewotICAgIGRpc3BhdGNoVGFza1RvTWFpblRocmVhZChjcmVhdGVD
YWxsYmFja1Rhc2soJndvcmtlckNvbnRleHREZXN0cm95ZWRUYXNrLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyh0
aGlzKSkpOwotfQotCi12b2lkIFdlYldvcmtlckJhc2U6OndvcmtlckNvbnRleHREZXN0cm95ZWRU
YXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYldvcmtlckJhc2UqIHRoaXNQdHIpCi17Ci0g
ICAgaWYgKHRoaXNQdHItPmNvbW1vbkNsaWVudCgpKQotICAgICAgICB0aGlzUHRyLT5jb21tb25D
bGllbnQoKS0+d29ya2VyQ29udGV4dERlc3Ryb3llZCgpOwotICAgIC8vIFRoZSBsaWZldGltZSBv
ZiB0aGlzIHByb3h5IGlzIGNvbnRyb2xsZWQgYnkgdGhlIHdvcmtlciBjb250ZXh0LgotICAgIGRl
bGV0ZSB0aGlzUHRyOwotfQotCi0vLyBXb3JrZXJMb2FkZXJQcm94eSAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi12b2lkIFdlYldv
cmtlckJhc2U6OnBvc3RUYXNrVG9Mb2FkZXIoUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250
ZXh0OjpUYXNrPiB0YXNrKQotewotICAgIEFTU0VSVChtX2xvYWRpbmdEb2N1bWVudC0+aXNEb2N1
bWVudCgpKTsKLSAgICBtX2xvYWRpbmdEb2N1bWVudC0+cG9zdFRhc2sodGFzayk7Ci19Ci0KLXZv
aWQgV2ViV29ya2VyQmFzZTo6cG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJDb250ZXh0KAotICAgIFBh
c3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gdGFzaywgY29uc3QgU3RyaW5n
JiBtb2RlKQordm9pZCBXZWJXb3JrZXJCYXNlOjpkaXNwYXRjaFRhc2tUb01haW5UaHJlYWQoUGFz
c093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNrKQogewotICAgIG1fd29y
a2VyVGhyZWFkLT5ydW5Mb29wKCkucG9zdFRhc2tGb3JNb2RlKHRhc2ssIG1vZGUpOworICAgIGNh
bGxPbk1haW5UaHJlYWQoaW52b2tlVGFza01ldGhvZCwgdGFzay5sZWFrUHRyKCkpOwogfQogCiAj
ZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJXb3JrZXJCYXNlLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJX
b3JrZXJCYXNlLmgKaW5kZXggOTM1OTlmNC4uYzQzYzYzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViV29ya2VyQmFzZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYldvcmtlckJhc2UuaApAQCAtMzUsMTM4ICszNSwyNiBAQAogCiAjaW5jbHVk
ZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYkNvbW1vbldvcmtlckNs
aWVudC5oIgotI2luY2x1ZGUgIldlYkZyYW1lQ2xpZW50LmgiCiAjaW5jbHVkZSAiV29ya2VyTG9h
ZGVyUHJveHkuaCIKICNpbmNsdWRlICJXb3JrZXJPYmplY3RQcm94eS5oIgotI2luY2x1ZGUgIldv
cmtlclRocmVhZC5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgogCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBXb3JrZXJUaHJlYWQ7Ci19
CiAKIG5hbWVzcGFjZSBXZWJLaXQgewotY2xhc3MgV2ViQXBwbGljYXRpb25DYWNoZUhvc3Q7Ci1j
bGFzcyBXZWJBcHBsaWNhdGlvbkNhY2hlSG9zdENsaWVudDsKLWNsYXNzIFdlYkNvbW1vbldvcmtl
ckNsaWVudDsKLWNsYXNzIFdlYlNlY3VyaXR5T3JpZ2luOwotY2xhc3MgV2ViU3RyaW5nOwotY2xh
c3MgV2ViVVJMOwogY2xhc3MgV2ViVmlldzsKLWNsYXNzIFdlYldvcmtlcjsKLWNsYXNzIFdlYldv
cmtlckNsaWVudDsKIAogLy8gQmFzZSBjbGFzcyBmb3IgV2ViU2hhcmVkV29ya2VySW1wbCwgV2Vi
V29ya2VyQ2xpZW50SW1wbCBhbmQgKGRlZnVuY3QpIFdlYldvcmtlckltcGwKIC8vIGNvbnRhaW5p
bmcgY29tbW9uIGludGVyZmFjZSBmb3Igc2hhcmVkIHdvcmtlcnMgYW5kIGRlZGljYXRlZCBpbi1w
cm9jIHdvcmtlcnMgaW1wbGVtZW50YXRpb24uCiAvLwogLy8gRklYTUU6IFJlbmFtZSB0aGlzIGNs
YXNzIGludG8gV2ViV29ya2VyQmFzZSwgbWVyZ2UgZXhpc3RpbmcgV2ViV29ya2VyQmFzZSBhbmQg
V2ViU2hhcmVkV29ya2VyLgotY2xhc3MgTmV3V2ViV29ya2VyQmFzZSA6IHB1YmxpYyBXZWJDb3Jl
OjpXb3JrZXJMb2FkZXJQcm94eSB7CitjbGFzcyBXZWJXb3JrZXJCYXNlIDogcHVibGljIFdlYkNv
cmU6OldvcmtlckxvYWRlclByb3h5IHsKIHB1YmxpYzoKLSAgICB2aXJ0dWFsIE5ld1dlYkNvbW1v
bldvcmtlckNsaWVudCogbmV3Q29tbW9uQ2xpZW50KCkgPSAwOworICAgIHZpcnR1YWwgV2ViQ29t
bW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQoKSA9IDA7CiAgICAgdmlydHVhbCBXZWJWaWV3
KiB2aWV3KCkgY29uc3QgPSAwOwotfTsKLQotLy8gQmFzZSBjbGFzcyBmb3IgV2ViU2hhcmVkV29y
a2VySW1wbCBhbmQgV2ViV29ya2VySW1wbC4gSXQgY29udGFpbnMgY29tbW9uCi0vLyBjb2RlIHVz
ZWQgYnkgYm90aCBpbXBsZW1lbnRhdGlvbiBjbGFzc2VzLCBpbmNsdWRpbmcgaW1wbGVtZW50YXRp
b25zIG9mIHRoZQotLy8gV29ya2VyT2JqZWN0UHJveHkgYW5kIFdvcmtlckxvYWRlclByb3h5IGlu
dGVyZmFjZXMuCi1jbGFzcyBXZWJXb3JrZXJCYXNlIDogcHVibGljIFdlYkNvcmU6Oldvcmtlck9i
amVjdFByb3h5Ci0gICAgICAgICAgICAgICAgICAgICwgcHVibGljIE5ld1dlYldvcmtlckJhc2UK
LSAgICAgICAgICAgICAgICAgICAgLCBwdWJsaWMgV2ViRnJhbWVDbGllbnQgewotcHVibGljOgot
ICAgIFdlYldvcmtlckJhc2UoKTsKLSAgICB2aXJ0dWFsIH5XZWJXb3JrZXJCYXNlKCk7Ci0KLSAg
ICAvLyBXZWJDb21tb25Xb3JrZXJCYXNlIG1ldGhvZHM6Ci0gICAgdmlydHVhbCB2b2lkIHBvc3RN
ZXNzYWdlVG9Xb3JrZXJPYmplY3QoCi0gICAgICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2VyaWFs
aXplZFNjcmlwdFZhbHVlPiwKLSAgICAgICAgUGFzc093blB0cjxXZWJDb3JlOjpNZXNzYWdlUG9y
dENoYW5uZWxBcnJheT4pOwotICAgIHZpcnR1YWwgdm9pZCBwb3N0RXhjZXB0aW9uVG9Xb3JrZXJP
YmplY3QoCi0gICAgICAgIGNvbnN0IFdURjo6U3RyaW5nJiwgaW50LCBjb25zdCBXVEY6OlN0cmlu
ZyYpOwotICAgIHZpcnR1YWwgdm9pZCBwb3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdCgK
LSAgICAgICAgV2ViQ29yZTo6TWVzc2FnZVNvdXJjZSwgV2ViQ29yZTo6TWVzc2FnZVR5cGUsCi0g
ICAgICAgIFdlYkNvcmU6Ok1lc3NhZ2VMZXZlbCwgY29uc3QgV1RGOjpTdHJpbmcmLCBpbnQsIGNv
bnN0IFdURjo6U3RyaW5nJik7Ci0gICAgdmlydHVhbCB2b2lkIHBvc3RNZXNzYWdlVG9QYWdlSW5z
cGVjdG9yKGNvbnN0IFdURjo6U3RyaW5nJik7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZUluc3Bl
Y3RvclN0YXRlQ29va2llKGNvbnN0IFdURjo6U3RyaW5nJik7Ci0gICAgdmlydHVhbCB2b2lkIGNv
bmZpcm1NZXNzYWdlRnJvbVdvcmtlck9iamVjdChib29sKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVw
b3J0UGVuZGluZ0FjdGl2aXR5KGJvb2wpOwotICAgIHZpcnR1YWwgdm9pZCB3b3JrZXJDb250ZXh0
Q2xvc2VkKCk7Ci0gICAgdmlydHVhbCB2b2lkIHdvcmtlckNvbnRleHREZXN0cm95ZWQoKTsKLSAg
ICB2aXJ0dWFsIFdlYlZpZXcqIHZpZXcoKSBjb25zdCB7IHJldHVybiBtX3dlYlZpZXc7IH0KLQot
ICAgIC8vIFdlYkNvcmU6OldvcmtlckxvYWRlclByb3h5IG1ldGhvZHM6Ci0gICAgdmlydHVhbCB2
b2lkIHBvc3RUYXNrVG9Mb2FkZXIoUGFzc093blB0cjxXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25D
b250ZXh0OjpUYXNrPik7Ci0gICAgdmlydHVhbCB2b2lkIHBvc3RUYXNrRm9yTW9kZVRvV29ya2Vy
Q29udGV4dCgKLSAgICAgICAgUGFzc093blB0cjxXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250
ZXh0OjpUYXNrPiwgY29uc3QgV1RGOjpTdHJpbmcmIG1vZGUpOwotCi0gICAgLy8gV2ViRnJhbWVD
bGllbnQgbWV0aG9kcyB0byBzdXBwb3J0IHJlc291cmNlIGxvYWRpbmcgdGhydSB0aGUgJ3NoYWRv
dyBwYWdlJy4KLSAgICB2aXJ0dWFsIHZvaWQgZGlkQ3JlYXRlRGF0YVNvdXJjZShXZWJGcmFtZSos
IFdlYkRhdGFTb3VyY2UqKTsKLSAgICB2aXJ0dWFsIFdlYkFwcGxpY2F0aW9uQ2FjaGVIb3N0KiBj
cmVhdGVBcHBsaWNhdGlvbkNhY2hlSG9zdChXZWJGcmFtZSosIFdlYkFwcGxpY2F0aW9uQ2FjaGVI
b3N0Q2xpZW50Kik7CiAKICAgICAvLyBFeGVjdXRlcyB0aGUgZ2l2ZW4gdGFzayBvbiB0aGUgbWFp
biB0aHJlYWQuCiAgICAgc3RhdGljIHZvaWQgZGlzcGF0Y2hUYXNrVG9NYWluVGhyZWFkKFBhc3NP
d25QdHI8V2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4pOwotCi1wcm90ZWN0
ZWQ6Ci0gICAgdmlydHVhbCBXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1vbkNsaWVudCgpID0g
MDsKLSAgICB2aXJ0dWFsIFdlYldvcmtlckNsaWVudCogY2xpZW50KCkgPSAwOwotCi0gICAgdm9p
ZCBzZXRXb3JrZXJUaHJlYWQoUGFzc1JlZlB0cjxXZWJDb3JlOjpXb3JrZXJUaHJlYWQ+IHRocmVh
ZCkgeyBtX3dvcmtlclRocmVhZCA9IHRocmVhZDsgfQotICAgIFdlYkNvcmU6OldvcmtlclRocmVh
ZCogd29ya2VyVGhyZWFkKCkgeyByZXR1cm4gbV93b3JrZXJUaHJlYWQuZ2V0KCk7IH0KLQotICAg
IC8vIFNodXRzIGRvd24gdGhlIHdvcmtlciB0aHJlYWQuCi0gICAgdm9pZCBzdG9wV29ya2VyVGhy
ZWFkKCk7Ci0KLSAgICAvLyBDcmVhdGVzIHRoZSBzaGFkb3cgbG9hZGVyIHVzZWQgZm9yIHdvcmtl
ciBuZXR3b3JrIHJlcXVlc3RzLgotICAgIHZvaWQgaW5pdGlhbGl6ZUxvYWRlcihjb25zdCBXZWJV
UkwmKTsKLQotcHJpdmF0ZToKLSAgICAvLyBGdW5jdGlvbiB1c2VkIHRvIGludm9rZSB0YXNrcyBv
biB0aGUgbWFpbiB0aHJlYWQuCi0gICAgc3RhdGljIHZvaWQgaW52b2tlVGFza01ldGhvZCh2b2lk
Kik7Ci0KLSAgICAvLyBUYXNrcyB0aGF0IGFyZSBydW4gb24gdGhlIG1haW4gdGhyZWFkLgotICAg
IHN0YXRpYyB2b2lkIHBvc3RNZXNzYWdlVGFzaygKLSAgICAgICAgV2ViQ29yZTo6U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwKLSAgICAgICAgV2ViV29ya2VyQmFzZSogdGhpc1B0ciwK
LSAgICAgICAgV1RGOjpTdHJpbmcgbWVzc2FnZSwKLSAgICAgICAgUGFzc093blB0cjxXZWJDb3Jl
OjpNZXNzYWdlUG9ydENoYW5uZWxBcnJheT4gY2hhbm5lbHMpOwotICAgIHN0YXRpYyB2b2lkIHBv
c3RFeGNlcHRpb25UYXNrKAotICAgICAgICBXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LAotICAgICAgICBXZWJXb3JrZXJCYXNlKiB0aGlzUHRyLAotICAgICAgICBjb25z
dCBXVEY6OlN0cmluZyYgbWVzc2FnZSwKLSAgICAgICAgaW50IGxpbmVOdW1iZXIsCi0gICAgICAg
IGNvbnN0IFdURjo6U3RyaW5nJiBzb3VyY2VVUkwpOwotICAgIHN0YXRpYyB2b2lkIHBvc3RDb25z
b2xlTWVzc2FnZVRhc2soCi0gICAgICAgIFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQsCi0gICAgICAgIFdlYldvcmtlckJhc2UqIHRoaXNQdHIsCi0gICAgICAgIGludCBz
b3VyY2UsCi0gICAgICAgIGludCB0eXBlLAotICAgICAgICBpbnQgbGV2ZWwsCi0gICAgICAgIGNv
bnN0IFdURjo6U3RyaW5nJiBtZXNzYWdlLAotICAgICAgICBpbnQgbGluZU51bWJlciwKLSAgICAg
ICAgY29uc3QgV1RGOjpTdHJpbmcmIHNvdXJjZVVSTCk7Ci0gICAgc3RhdGljIHZvaWQgcG9zdE1l
c3NhZ2VUb1BhZ2VJbnNwZWN0b3JUYXNrKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBXZWJXb3JrZXJCYXNlKiwgY29uc3QgV1RGOjpTdHJpbmcmKTsKLSAgICBzdGF0aWMgdm9pZCB1
cGRhdGVJbnNwZWN0b3JTdGF0ZUNvb2tpZVRhc2soV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFdlYldvcmtlckJhc2UqIHRoaXNQdHIsIGNvbnN0IFdURjo6U3RyaW5nJiBjb29raWUp
OwotICAgIHN0YXRpYyB2b2lkIGNvbmZpcm1NZXNzYWdlVGFzaygKLSAgICAgICAgV2ViQ29yZTo6
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKLSAgICAgICAgV2ViV29ya2VyQmFzZSog
dGhpc1B0ciwKLSAgICAgICAgYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkpOwotICAgIHN0YXRpYyB2
b2lkIHJlcG9ydFBlbmRpbmdBY3Rpdml0eVRhc2soCi0gICAgICAgIFdlYkNvcmU6OlNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCi0gICAgICAgIFdlYldvcmtlckJhc2UqIHRoaXNQdHIs
Ci0gICAgICAgIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KTsKLSAgICBzdGF0aWMgdm9pZCB3b3Jr
ZXJDb250ZXh0Q2xvc2VkVGFzaygKLSAgICAgICAgV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCwKLSAgICAgICAgV2ViV29ya2VyQmFzZSogdGhpc1B0cik7Ci0gICAgc3Rh
dGljIHZvaWQgd29ya2VyQ29udGV4dERlc3Ryb3llZFRhc2soCi0gICAgICAgIFdlYkNvcmU6OlNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCi0gICAgICAgIFdlYldvcmtlckJhc2UqIHRo
aXNQdHIpOwotCi0gICAgLy8gJ3NoYWRvdyBwYWdlJyAtIGNyZWF0ZWQgdG8gcHJveHkgbG9hZGlu
ZyByZXF1ZXN0cyBmcm9tIHRoZSB3b3JrZXIuCi0gICAgUmVmUHRyPFdlYkNvcmU6OlNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQ+IG1fbG9hZGluZ0RvY3VtZW50OwotICAgIFdlYlZpZXcqIG1fd2ViVmll
dzsKLSAgICBib29sIG1fYXNrZWRUb1Rlcm1pbmF0ZTsKLQotICAgIFJlZlB0cjxXZWJDb3JlOjpX
b3JrZXJUaHJlYWQ+IG1fd29ya2VyVGhyZWFkOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJDbGllbnRJ
bXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckNsaWVudEltcGwu
Y3BwCmluZGV4IDViOWYzMjAuLjUwOTBhZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYldvcmtlckNsaWVudEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYldvcmtlckNsaWVudEltcGwuY3BwCkBAIC02Myw3ICs2Myw2IEBACiAjaW5j
bHVkZSAicGxhdGZvcm0vV2ViVVJMLmgiCiAjaW5jbHVkZSAiV2ViVmlld0ltcGwuaCIKICNpbmNs
dWRlICJXZWJXb3JrZXIuaCIKLSNpbmNsdWRlICJXZWJXb3JrZXJJbXBsLmgiCiAKIHVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJXb3JrZXJDbGllbnRJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJX
b3JrZXJDbGllbnRJbXBsLmgKaW5kZXggNzAwNmE5NC4uNTE4OWFkMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViV29ya2VyQ2xpZW50SW1wbC5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckNsaWVudEltcGwuaApAQCAtNTgsOCArNTgs
OCBAQCBjbGFzcyBXZWJGcmFtZUltcGw7CiAvLyBJbiBlc3NlbmNlLCB0aGlzIGNsYXNzIHdyYXBz
IFdvcmtlck1lc3NhZ2luZ1Byb3h5LgogY2xhc3MgV2ViV29ya2VyQ2xpZW50SW1wbCA6IHB1Ymxp
YyBXZWJDb3JlOjpXb3JrZXJDb250ZXh0UHJveHkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
LCBwdWJsaWMgV2ViQ29yZTo6V29ya2VyT2JqZWN0UHJveHkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgLCBwdWJsaWMgTmV3V2ViV29ya2VyQmFzZQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAsIHB1YmxpYyBOZXdXZWJDb21tb25Xb3JrZXJDbGllbnQgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAsIHB1YmxpYyBXZWJXb3JrZXJCYXNlCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICwgcHVibGljIFdlYkNvbW1vbldvcmtlckNsaWVudCB7CiBwdWJsaWM6CiAgICAgLy8gV2ViQ29y
ZTo6V29ya2VyQ29udGV4dFByb3h5IEZhY3RvcnkuCiAgICAgc3RhdGljIFdlYkNvcmU6Oldvcmtl
ckNvbnRleHRQcm94eSogY3JlYXRlV29ya2VyQ29udGV4dFByb3h5KFdlYkNvcmU6Oldvcmtlciop
OwpAQCAtMTA3LDcgKzEwNyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgV2ViRmlsZVN5c3RlbUNhbGxiYWNrcyopOwogCiAgICAgLy8gV2ViQ29tbWVudFdvcmtl
ckJhc2UgbWV0aG9kczoKLSAgICB2aXJ0dWFsIE5ld1dlYkNvbW1vbldvcmtlckNsaWVudCogbmV3
Q29tbW9uQ2xpZW50KCkgeyByZXR1cm4gdGhpczsgfQorICAgIHZpcnR1YWwgV2ViQ29tbW9uV29y
a2VyQ2xpZW50KiBjb21tb25DbGllbnQoKSB7IHJldHVybiB0aGlzOyB9CiAgICAgdmlydHVhbCBX
ZWJWaWV3KiB2aWV3KCkgY29uc3Q7CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYldvcmtlckltcGwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBk
Y2JmZWVlLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtl
ckltcGwuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTYzICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9u
LgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiV2ViV29ya2VySW1wbC5oIgotCi0jaW5jbHVkZSAiQ3Jvc3NUaHJlYWRU
YXNrLmgiCi0jaW5jbHVkZSAiRGVkaWNhdGVkV29ya2VyQ29udGV4dC5oIgotI2luY2x1ZGUgIkRl
ZGljYXRlZFdvcmtlclRocmVhZC5oIgotI2luY2x1ZGUgIktVUkwuaCIKLSNpbmNsdWRlICJNZXNz
YWdlRXZlbnQuaCIKLSNpbmNsdWRlICJNZXNzYWdlUG9ydC5oIgotI2luY2x1ZGUgIk1lc3NhZ2VQ
b3J0Q2hhbm5lbC5oIgotI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKLSNpbmNs
dWRlICJTZWN1cml0eU9yaWdpbi5oIgotI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5o
IgotI2luY2x1ZGUgIlN1YnN0aXR1dGVEYXRhLmgiCi0jaW5jbHVkZSA8d3RmL093blB0ci5oPgot
I2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KLQotI2luY2x1ZGUgIlBsYXRmb3JtTWVzc2FnZVBv
cnRDaGFubmVsLmgiCi0jaW5jbHVkZSAiV2ViTWVzc2FnZVBvcnRDaGFubmVsLmgiCi0jaW5jbHVk
ZSAicGxhdGZvcm0vV2ViU3RyaW5nLmgiCi0jaW5jbHVkZSAicGxhdGZvcm0vV2ViVVJMLmgiCi0j
aW5jbHVkZSAiV2ViV29ya2VyQ2xpZW50LmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwot
Ci1uYW1lc3BhY2UgV2ViS2l0IHsKLQotI2lmIEVOQUJMRShXT1JLRVJTKQotCi1XZWJXb3JrZXIq
IFdlYldvcmtlcjo6Y3JlYXRlKFdlYldvcmtlckNsaWVudCogY2xpZW50KQotewotICAgIHJldHVy
biBuZXcgV2ViV29ya2VySW1wbChjbGllbnQpOwotfQotCi0KLVdlYldvcmtlckltcGw6OldlYldv
cmtlckltcGwoV2ViV29ya2VyQ2xpZW50KiBjbGllbnQpCi0gICAgOiBtX2NsaWVudChjbGllbnQp
Ci17Ci19Ci0KLVdlYldvcmtlckltcGw6On5XZWJXb3JrZXJJbXBsKCkKLXsKLX0KLQotTmV3V2Vi
Q29tbW9uV29ya2VyQ2xpZW50KiBXZWJXb3JrZXJJbXBsOjpuZXdDb21tb25DbGllbnQoKQotewot
ICAgIHJldHVybiBtX2NsaWVudDsKLX0KLQotV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBXZWJXb3Jr
ZXJJbXBsOjpjb21tb25DbGllbnQoKQotewotICAgIHJldHVybiBtX2NsaWVudDsKLX0KLQotdm9p
ZCBXZWJXb3JrZXJJbXBsOjpwb3N0TWVzc2FnZVRvV29ya2VyQ29udGV4dFRhc2soV2ViQ29yZTo6
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYldvcmtlckltcGwqIHRoaXNQdHIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJp
bmcmIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBQYXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBjaGFubmVscykKLXsK
LSAgICBBU1NFUlQoY29udGV4dC0+aXNXb3JrZXJDb250ZXh0KCkpOwotICAgIERlZGljYXRlZFdv
cmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQgPQotICAgICAgICBzdGF0aWNfY2FzdDxEZWRpY2F0
ZWRXb3JrZXJDb250ZXh0Kj4oY29udGV4dCk7Ci0KLSAgICBPd25QdHI8TWVzc2FnZVBvcnRBcnJh
eT4gcG9ydHMgPQotICAgICAgICBNZXNzYWdlUG9ydDo6ZW50YW5nbGVQb3J0cygqY29udGV4dCwg
Y2hhbm5lbHMpOwotICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWRN
ZXNzYWdlID0KLSAgICAgICAgU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9tV2lyZSht
ZXNzYWdlKTsKLSAgICB3b3JrZXJDb250ZXh0LT5kaXNwYXRjaEV2ZW50KE1lc3NhZ2VFdmVudDo6
Y3JlYXRlKAotICAgICAgICBwb3J0cy5yZWxlYXNlKCksIHNlcmlhbGl6ZWRNZXNzYWdlLnJlbGVh
c2UoKSkpOwotICAgIHRoaXNQdHItPmNvbmZpcm1NZXNzYWdlRnJvbVdvcmtlck9iamVjdCh3b3Jr
ZXJDb250ZXh0LT5oYXNQZW5kaW5nQWN0aXZpdHkoKSk7Ci19Ci0KLS8vIFdlYldvcmtlciAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0KLXZvaWQgV2ViV29ya2VySW1wbDo6c3RhcnRXb3JrZXJDb250ZXh0KGNvbnN0IFdl
YlVSTCYgc2NyaXB0VXJsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgV2ViU3RyaW5nJiB1c2VyQWdlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBXZWJTdHJpbmcmIHNvdXJjZUNvZGUpCi17Ci0gICAgaW5pdGlhbGl6
ZUxvYWRlcihzY3JpcHRVcmwpOwotICAgIHNldFdvcmtlclRocmVhZChEZWRpY2F0ZWRXb3JrZXJU
aHJlYWQ6OmNyZWF0ZShzY3JpcHRVcmwsIHVzZXJBZ2VudCwgc291cmNlQ29kZSwgKnRoaXMsICp0
aGlzLCBEb250UGF1c2VXb3JrZXJDb250ZXh0T25TdGFydCkpOwotICAgIC8vIFdvcmtlciBpbml0
aWFsaXphdGlvbiBtZWFucyBhIHBlbmRpbmcgYWN0aXZpdHkuCi0gICAgcmVwb3J0UGVuZGluZ0Fj
dGl2aXR5KHRydWUpOwotICAgIHdvcmtlclRocmVhZCgpLT5zdGFydCgpOwotfQotCi12b2lkIFdl
YldvcmtlckltcGw6OnRlcm1pbmF0ZVdvcmtlckNvbnRleHQoKQotewotICAgIHN0b3BXb3JrZXJU
aHJlYWQoKTsKLX0KLQotdm9pZCBXZWJXb3JrZXJJbXBsOjpwb3N0TWVzc2FnZVRvV29ya2VyQ29u
dGV4dChjb25zdCBXZWJTdHJpbmcmIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYk1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5JiB3
ZWJDaGFubmVscykKLXsKLSAgICBPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+IGNoYW5u
ZWxzOwotICAgIGlmICh3ZWJDaGFubmVscy5zaXplKCkpIHsKLSAgICAgICAgY2hhbm5lbHMgPSBh
ZG9wdFB0cihuZXcgTWVzc2FnZVBvcnRDaGFubmVsQXJyYXkod2ViQ2hhbm5lbHMuc2l6ZSgpKSk7
Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd2ViQ2hhbm5lbHMuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgICAgIFJlZlB0cjxQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbD4gcGxhdGZv
cm1fY2hhbm5lbCA9Ci0gICAgICAgICAgICAgICAgUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWw6
OmNyZWF0ZSh3ZWJDaGFubmVsc1tpXSk7Ci0gICAgICAgICAgICB3ZWJDaGFubmVsc1tpXS0+c2V0
Q2xpZW50KHBsYXRmb3JtX2NoYW5uZWwuZ2V0KCkpOwotICAgICAgICAgICAgKCpjaGFubmVscylb
aV0gPSBNZXNzYWdlUG9ydENoYW5uZWw6OmNyZWF0ZShwbGF0Zm9ybV9jaGFubmVsKTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIHdvcmtlclRocmVhZCgpLT5ydW5Mb29wKCkucG9zdFRhc2soCi0g
ICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmcG9zdE1lc3NhZ2VUb1dvcmtlckNvbnRleHRUYXNr
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyh0aGlz
KSwgU3RyaW5nKG1lc3NhZ2UpLCBjaGFubmVscy5yZWxlYXNlKCkpKTsKLX0KLQotdm9pZCBXZWJX
b3JrZXJJbXBsOjp3b3JrZXJPYmplY3REZXN0cm95ZWQoKQotewotICAgIC8vIFdvcmtlciBvYmpl
Y3QgaW4gdGhlIHJlbmRlcmVyIHdhcyBkZXN0cm95ZWQsIHBlcmhhcHMgYSByZXN1bHQgb2YgR0Mu
Ci0gICAgLy8gRm9yIHVzLCBpdCdzIGEgc2lnbmFsIHRvIHN0YXJ0IHRlcm1pbmF0aW5nIHRoZSBX
b3JrZXJDb250ZXh0IHRvby4KLSAgICAvLyBGSVhNRTogd2hlbiAna2lsbCBhIHdvcmtlcicgaHRt
bDUgc3BlYyBhbGdvcml0aG0gaXMgaW1wbGVtZW50ZWQsIGl0Ci0gICAgLy8gc2hvdWxkIGJlIHVz
ZWQgaGVyZSBpbnN0ZWFkIG9mICd0ZXJtaW5hdGUgYSB3b3JrZXInLgotICAgIHRlcm1pbmF0ZVdv
cmtlckNvbnRleHQoKTsKLX0KLQotdm9pZCBXZWJXb3JrZXJJbXBsOjpjbGllbnREZXN0cm95ZWQo
KQotewotICAgIG1fY2xpZW50ID0gMDsKLX0KLQotI2Vsc2UKLQotV2ViV29ya2VyKiBXZWJXb3Jr
ZXI6OmNyZWF0ZShXZWJXb3JrZXJDbGllbnQqIGNsaWVudCkKLXsKLSAgICByZXR1cm4gMDsKLX0K
LQotI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckltcGwuaCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckltcGwuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNGYwNTJhNy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJXb3JrZXJJbXBsLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAq
IGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0g
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lm
bmRlZiBXZWJXb3JrZXJJbXBsX2gKLSNkZWZpbmUgV2ViV29ya2VySW1wbF9oCi0KLSNpbmNsdWRl
ICJXZWJXb3JrZXIuaCIKLQotI2lmIEVOQUJMRShXT1JLRVJTKQotCi0jaW5jbHVkZSAiU2NyaXB0
RXhlY3V0aW9uQ29udGV4dC5oIgotCi0jaW5jbHVkZSAiV2ViV29ya2VyQmFzZS5oIgotCi1uYW1l
c3BhY2UgV2ViS2l0IHsKLQotLy8gVGhpcyBjbGFzcyBpcyB1c2VkIGJ5IHRoZSB3b3JrZXIgcHJv
Y2VzcyBjb2RlIHRvIHRhbGsgdG8gdGhlIFdlYkNvcmU6OldvcmtlcgotLy8gaW1wbGVtZW50YXRp
b24uICBJdCBjYW4ndCB1c2UgaXQgZGlyZWN0bHkgc2luY2UgaXQgdXNlcyBXZWJLaXQgdHlwZXMs
IHNvIHRoaXMKLS8vIGNsYXNzIGNvbnZlcnRzIHRoZSBkYXRhIHR5cGVzLiAgV2hlbiB0aGUgV2Vi
Q29yZTo6V29ya2VyIG9iamVjdCB3YW50cyB0byBjYWxsCi0vLyBXZWJDb3JlOjpXb3JrZXJPYmpl
Y3RQcm94eSwgdGhpcyBjbGFzcyB3aWxsIGNvbnZlciB0byBDaHJvbWUgZGF0YSB0eXBlcyBmaXJz
dAotLy8gYW5kIHRoZW4gY2FsbCB0aGUgc3VwcGxpZWQgV2ViV29ya2VyQ2xpZW50LgotY2xhc3Mg
V2ViV29ya2VySW1wbCA6IHB1YmxpYyBXZWJXb3JrZXJCYXNlLCBwdWJsaWMgV2ViV29ya2VyIHsK
LXB1YmxpYzoKLSAgICBleHBsaWNpdCBXZWJXb3JrZXJJbXBsKFdlYldvcmtlckNsaWVudCogY2xp
ZW50KTsKLQotICAgIC8vIFdlYldvcmtlciBtZXRob2RzOgotICAgIHZpcnR1YWwgdm9pZCBzdGFy
dFdvcmtlckNvbnRleHQoY29uc3QgV2ViVVJMJiwgY29uc3QgV2ViU3RyaW5nJiwgY29uc3QgV2Vi
U3RyaW5nJik7Ci0gICAgdmlydHVhbCB2b2lkIHRlcm1pbmF0ZVdvcmtlckNvbnRleHQoKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgcG9zdE1lc3NhZ2VUb1dvcmtlckNvbnRleHQoY29uc3QgV2ViU3RyaW5n
JiwgY29uc3QgV2ViTWVzc2FnZVBvcnRDaGFubmVsQXJyYXkmKTsKLSAgICB2aXJ0dWFsIHZvaWQg
d29ya2VyT2JqZWN0RGVzdHJveWVkKCk7Ci0gICAgdmlydHVhbCB2b2lkIGNsaWVudERlc3Ryb3ll
ZCgpOwotCi0gICAgLy8gV2ViV29ya2VyQmFzZSBtZXRob2RzOgotICAgIHZpcnR1YWwgV2ViV29y
a2VyQ2xpZW50KiBjbGllbnQoKSB7IHJldHVybiBtX2NsaWVudDsgfQotICAgIHZpcnR1YWwgV2Vi
Q29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQoKTsKLQotICAgIC8vIE5ld1dlYldvcmtl
ckJhc2UgbWV0aG9kczoKLSAgICB2aXJ0dWFsIE5ld1dlYkNvbW1vbldvcmtlckNsaWVudCogbmV3
Q29tbW9uQ2xpZW50KCk7Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCB+V2ViV29ya2VySW1wbCgp
OwotCi0gICAgLy8gVGFza3MgdGhhdCBhcmUgcnVuIG9uIHRoZSB3b3JrZXIgdGhyZWFkLgotICAg
IHN0YXRpYyB2b2lkIHBvc3RNZXNzYWdlVG9Xb3JrZXJDb250ZXh0VGFzaygKLSAgICAgICAgV2Vi
Q29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKLSAgICAgICAgV2ViV29ya2Vy
SW1wbCogdGhpc1B0ciwKLSAgICAgICAgY29uc3QgV1RGOjpTdHJpbmcmIG1lc3NhZ2UsCi0gICAg
ICAgIFBhc3NPd25QdHI8V2ViQ29yZTo6TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+IGNoYW5uZWxz
KTsKLQotICAgIFdlYldvcmtlckNsaWVudCogbV9jbGllbnQ7Ci19OwotCi19IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQotCi0jZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NC
cmlkZ2UuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyRmlsZVN5c3RlbUNh
bGxiYWNrc0JyaWRnZS5jcHAKaW5kZXggNTIzZWY3NS4uOGNlNWU2OSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZS5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyRmlsZVN5c3RlbUNhbGxi
YWNrc0JyaWRnZS5jcHAKQEAgLTE1Niw3ICsxNTYsNyBAQCB2b2lkIFdvcmtlckZpbGVTeXN0ZW1D
YWxsYmFja3NCcmlkZ2U6OnN0b3AoKQogICAgIH0KIH0KIAotdm9pZCBXb3JrZXJGaWxlU3lzdGVt
Q2FsbGJhY2tzQnJpZGdlOjpwb3N0T3BlbkZpbGVTeXN0ZW1Ub01haW5UaHJlYWQoTmV3V2ViQ29t
bW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQsIFdlYkZpbGVTeXN0ZW06OlR5cGUgdHlwZSwg
bG9uZyBsb25nIHNpemUsIGJvb2wgY3JlYXRlLCBjb25zdCBTdHJpbmcmIG1vZGUpCit2b2lkIFdv
cmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OnBvc3RPcGVuRmlsZVN5c3RlbVRvTWFpblRo
cmVhZChXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1vbkNsaWVudCwgV2ViRmlsZVN5c3RlbTo6
VHlwZSB0eXBlLCBsb25nIGxvbmcgc2l6ZSwgYm9vbCBjcmVhdGUsIGNvbnN0IFN0cmluZyYgbW9k
ZSkKIHsKICAgICBkaXNwYXRjaFRhc2tUb01haW5UaHJlYWQoCiAgICAgICAgIGNyZWF0ZUNhbGxi
YWNrVGFzaygmb3BlbkZpbGVTeXN0ZW1Pbk1haW5UaHJlYWQsCkBAIC0yNTEsNyArMjUxLDcgQEAg
dm9pZCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpwb3N0UmVhZERpcmVjdG9yeVRv
TWFpblRocmVhZChXZWJGaWxlU3lzdGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsbG93
Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcyksIG1vZGUpKTsKIH0KIAotdm9pZCBXb3JrZXJGaWxlU3lz
dGVtQ2FsbGJhY2tzQnJpZGdlOjpvcGVuRmlsZVN5c3RlbU9uTWFpblRocmVhZChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgTmV3V2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQsIFdl
YkZpbGVTeXN0ZW06OlR5cGUgdHlwZSwgbG9uZyBsb25nIHNpemUsIGJvb2wgY3JlYXRlLCBXb3Jr
ZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlKiBicmlkZ2UsIGNvbnN0IFN0cmluZyYgbW9kZSkK
K3ZvaWQgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6b3BlbkZpbGVTeXN0ZW1Pbk1h
aW5UaHJlYWQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYkNvbW1vbldvcmtlckNsaWVudCog
Y29tbW9uQ2xpZW50LCBXZWJGaWxlU3lzdGVtOjpUeXBlIHR5cGUsIGxvbmcgbG9uZyBzaXplLCBi
b29sIGNyZWF0ZSwgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZSogYnJpZGdlLCBjb25z
dCBTdHJpbmcmIG1vZGUpCiB7CiAgICAgaWYgKCFjb21tb25DbGllbnQpCiAgICAgICAgIGJyaWRn
ZS0+ZGlkRmFpbE9uTWFpblRocmVhZChXZWJGaWxlRXJyb3JBYm9ydCwgbW9kZSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tz
QnJpZGdlLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJGaWxlU3lzdGVtQ2Fs
bGJhY2tzQnJpZGdlLmgKaW5kZXggOGFlN2ViMy4uOWM0NGNiMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZS5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NC
cmlkZ2UuaApAQCAtNTEsNyArNTEsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgQXN5
bmNGaWxlU3lzdGVtOwogY2xhc3MgTWFpblRocmVhZEZpbGVTeXN0ZW1DYWxsYmFja3M7Ci1jbGFz
cyBOZXdXZWJDb21tb25Xb3JrZXJDbGllbnQ7CitjbGFzcyBXZWJDb21tb25Xb3JrZXJDbGllbnQ7
CiBjbGFzcyBUaHJlYWRhYmxlQ2FsbGJhY2tzQnJpZGdlV3JhcHBlcjsKIGNsYXNzIFdlYkZpbGVT
eXN0ZW1DYWxsYmFja3M7CiBzdHJ1Y3QgV2ViRmlsZUluZm87CkBAIC04Nyw3ICs4Nyw3IEBAIHB1
YmxpYzoKICAgICB9CiAKICAgICAvLyBNZXRob2RzIHRoYXQgY3JlYXRlIGFuIGluc3RhbmNlIGFu
ZCBwb3N0IGFuIGluaXRpYWwgcmVxdWVzdCB0YXNrIHRvIHRoZSBtYWluIHRocmVhZC4gVGhleSBt
dXN0IGJlIGNhbGxlZCBvbiB0aGUgd29ya2VyIHRocmVhZC4KLSAgICB2b2lkIHBvc3RPcGVuRmls
ZVN5c3RlbVRvTWFpblRocmVhZChOZXdXZWJDb21tb25Xb3JrZXJDbGllbnQqLCBXZWJGaWxlU3lz
dGVtOjpUeXBlLCBsb25nIGxvbmcgc2l6ZSwgYm9vbCBjcmVhdGUsIGNvbnN0IFN0cmluZyYgbW9k
ZSk7CisgICAgdm9pZCBwb3N0T3BlbkZpbGVTeXN0ZW1Ub01haW5UaHJlYWQoV2ViQ29tbW9uV29y
a2VyQ2xpZW50KiwgV2ViRmlsZVN5c3RlbTo6VHlwZSwgbG9uZyBsb25nIHNpemUsIGJvb2wgY3Jl
YXRlLCBjb25zdCBTdHJpbmcmIG1vZGUpOwogICAgIHZvaWQgcG9zdE1vdmVUb01haW5UaHJlYWQo
V2ViRmlsZVN5c3RlbSosIGNvbnN0IFdlYkNvcmU6OktVUkwmIHNyY1BhdGgsIGNvbnN0IFdlYkNv
cmU6OktVUkwmIGRlc3RQYXRoLCBjb25zdCBTdHJpbmcmIG1vZGUpOwogICAgIHZvaWQgcG9zdENv
cHlUb01haW5UaHJlYWQoV2ViRmlsZVN5c3RlbSosIGNvbnN0IFdlYkNvcmU6OktVUkwmIHNyY1Bh
dGgsIGNvbnN0IFdlYkNvcmU6OktVUkwmIGRlc3RQYXRoLCBjb25zdCBTdHJpbmcmIG1vZGUpOwog
ICAgIHZvaWQgcG9zdFJlbW92ZVRvTWFpblRocmVhZChXZWJGaWxlU3lzdGVtKiwgY29uc3QgV2Vi
Q29yZTo6S1VSTCYgcGF0aCwgY29uc3QgU3RyaW5nJiBtb2RlKTsKQEAgLTExMCw3ICsxMTAsNyBA
QCBwcml2YXRlOgogICAgIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UoV2ViQ29yZTo6
V29ya2VyTG9hZGVyUHJveHkqLCBXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2Vi
RmlsZVN5c3RlbUNhbGxiYWNrcyopOwogCiAgICAgLy8gTWV0aG9kcyB0aGF0IGFyZSB0byBiZSBj
YWxsZWQgb24gdGhlIG1haW4gdGhyZWFkLgotICAgIHN0YXRpYyB2b2lkIG9wZW5GaWxlU3lzdGVt
T25NYWluVGhyZWFkKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBOZXdXZWJDb21t
b25Xb3JrZXJDbGllbnQqLCBXZWJGaWxlU3lzdGVtOjpUeXBlLCBsb25nIGxvbmcgc2l6ZSwgYm9v
bCBjcmVhdGUsIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UqLCBjb25zdCBTdHJpbmcm
IG1vZGUpOworICAgIHN0YXRpYyB2b2lkIG9wZW5GaWxlU3lzdGVtT25NYWluVGhyZWFkKFdlYkNv
cmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJDb21tb25Xb3JrZXJDbGllbnQqLCBXZWJG
aWxlU3lzdGVtOjpUeXBlLCBsb25nIGxvbmcgc2l6ZSwgYm9vbCBjcmVhdGUsIFdvcmtlckZpbGVT
eXN0ZW1DYWxsYmFja3NCcmlkZ2UqLCBjb25zdCBTdHJpbmcmIG1vZGUpOwogICAgIHN0YXRpYyB2
b2lkIG1vdmVPbk1haW5UaHJlYWQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdl
YkZpbGVTeXN0ZW0qLCBjb25zdCBXZWJDb3JlOjpLVVJMJiBzcmNQYXRoLCBjb25zdCBXZWJDb3Jl
OjpLVVJMJiBkZXN0UGF0aCwgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZSosIGNvbnN0
IFN0cmluZyYgbW9kZSk7CiAgICAgc3RhdGljIHZvaWQgY29weU9uTWFpblRocmVhZChXZWJDb3Jl
OjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViRmlsZVN5c3RlbSosIGNvbnN0IFdlYkNvcmU6
OktVUkwmIHNyY1BhdGgsIGNvbnN0IFdlYkNvcmU6OktVUkwmIGRlc3RQYXRoLCBXb3JrZXJGaWxl
U3lzdGVtQ2FsbGJhY2tzQnJpZGdlKiwgY29uc3QgU3RyaW5nJiBtb2RlKTsKICAgICBzdGF0aWMg
dm9pZCByZW1vdmVPbk1haW5UaHJlYWQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IFdlYkZpbGVTeXN0ZW0qLCBjb25zdCBXZWJDb3JlOjpLVVJMJiBwYXRoLCBXb3JrZXJGaWxlU3lz
dGVtQ2FsbGJhY2tzQnJpZGdlKiwgY29uc3QgU3RyaW5nJiBtb2RlKTsKZGlmZiAtLWdpdCBhL1Rv
b2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA5YWMwOThjLi5mNWExODg0IDEw
MDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMjEgQEAKKzIwMTEtMTItMjIgIERtaXRyeSBMb21vdiAgPGRzbG9tb3ZAZ29vZ2xlLmNvbT4K
KworICAgICAgICBbV2ViV29ya2Vyc11bQ2hyb21pdW1dIFJlbW92ZSByZW1haW5zIG9mIGNyb3Nz
LXByb2Nlc3MgZGVkaWNhdGVkIHdvcmtlciBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2NTA5CisgICAgICAgIEp1c3QgcmVu
YW1lcywgbWVyZ2VzIGFuZCByZW1vdmFsIG9mIGRlYWQgY29kZS4gSGVyZSBhcmUgdGhlIGxpc3Qg
b2YgcmVuYW1lczoKKyAgICAgICAgICAtIFdlYkNvbW1vbldvcmtlckNsaWVudCBtZXJnZWQgd2l0
aCBXZWJXb3JrZXJDbGllbnQgYW5kIHJlbmFtZWQgdG8gV2ViU2hhcmVkV29ya2VyQ2xpZW50Cisg
ICAgICAgICAgLSBOZXdXZWJDb21tb25Xb3JrZXJDbGllbnQgcmVuYW1lZCB0byBXZWJDb21tb25X
b3JrZXJDbGllbnQKKyAgICAgICAgICAtIFdlYldvcmtlckJhc2UgbWVyZ2VkIGludG8gV2ViU2hh
cmVkV29ya2VySW1wbAorICAgICAgICAgIC0gTmV3V2ViV29ya2VyQmFzZSByZW5hbWVkIGludG8g
V2ViV29ya2VyQmFzZQorIAorICAgICAgICBSZXZpZXdlZCBieSBEYXZpZCBMZXZpbi4KKworICAg
ICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RXZWJXb3JrZXIuaDoKKyAgICAgICAg
KFRlc3RXZWJXb3JrZXI6OmNyZWF0ZVdvcmtlcik6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vV2ViVmlld0hvc3QuY3BwOgorICAgICAgICAoV2ViVmlld0hvc3Q6OmNyZWF0ZVdv
cmtlcik6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuaDoK
KwogMjAxMS0xMi0yMiAgQWRhbSBSb2JlbiAgPGFyb2JlbkBhcHBsZS5jb20+CiAKICAgICAgICAg
U25vdyBMZW9wYXJkIHRlc3QgZml4CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9UZXN0V2ViV29ya2VyLmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9U
ZXN0V2ViV29ya2VyLmgKaW5kZXggNzFiZmZjZS4uYWQ4MmE4NyAxMDA2NDQKLS0tIGEvVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFdlYldvcmtlci5oCisrKyBiL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RXZWJXb3JrZXIuaApAQCAtMzIsOCArMzIsOCBAQAogI2Rl
ZmluZSBUZXN0V2ViV29ya2VyX2gKIAogI2luY2x1ZGUgIldlYk1lc3NhZ2VQb3J0Q2hhbm5lbC5o
IgorI2luY2x1ZGUgIldlYlNoYXJlZFdvcmtlckNsaWVudC5oIgogI2luY2x1ZGUgIldlYldvcmtl
ci5oIgotI2luY2x1ZGUgIldlYldvcmtlckNsaWVudC5oIgogI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtNDMsNyArNDMsNyBAQCBjbGFzcyBXZWJV
Ukw7CiB9CiAKIGNsYXNzIFRlc3RXZWJXb3JrZXIgOiBwdWJsaWMgV2ViS2l0OjpXZWJXb3JrZXIs
Ci0gICAgICAgICAgICAgICAgICAgICAgcHVibGljIFdlYktpdDo6V2ViV29ya2VyQ2xpZW50LAor
ICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBXZWJLaXQ6OldlYlNoYXJlZFdvcmtlckNsaWVu
dCwKICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgV1RGOjpSZWZDb3VudGVkPFRlc3RXZWJX
b3JrZXI+IHsKIHB1YmxpYzoKICAgICBUZXN0V2ViV29ya2VyKCkKQEAgLTgwLDcgKzgwLDcgQEAg
cHVibGljOgogICAgICAgICAvLyBSZWxlYXNlcyB0aGUgcmVmZXJlbmNlIGhlbGQgZm9yIHdvcmtl
ciBjb250ZXh0IG9iamVjdC4KICAgICAgICAgZGVyZWYoKTsKICAgICB9Ci0gICAgdmlydHVhbCBX
ZWJLaXQ6OldlYldvcmtlciogY3JlYXRlV29ya2VyKFdlYktpdDo6V2ViV29ya2VyQ2xpZW50Kikg
eyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJXb3JrZXIqIGNyZWF0ZVdvcmtl
cihXZWJLaXQ6OldlYlNoYXJlZFdvcmtlckNsaWVudCopIHsgcmV0dXJuIDA7IH0KICAgICB2aXJ0
dWFsIFdlYktpdDo6V2ViTm90aWZpY2F0aW9uUHJlc2VudGVyKiBub3RpZmljYXRpb25QcmVzZW50
ZXIoKSB7IHJldHVybiAwOyB9CiAgICAgdmlydHVhbCBXZWJLaXQ6OldlYkFwcGxpY2F0aW9uQ2Fj
aGVIb3N0KiBjcmVhdGVBcHBsaWNhdGlvbkNhY2hlSG9zdChXZWJLaXQ6OldlYkFwcGxpY2F0aW9u
Q2FjaGVIb3N0Q2xpZW50KikgeyByZXR1cm4gMDsgfQogICAgIHZpcnR1YWwgYm9vbCBhbGxvd0Rh
dGFiYXNlKFdlYktpdDo6V2ViRnJhbWUqLCBjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYsIGNvbnN0
IFdlYktpdDo6V2ViU3RyaW5nJiwgdW5zaWduZWQgbG9uZykgeyByZXR1cm4gdHJ1ZTsgfQpkaWZm
IC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuY3BwIGIv
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuY3BwCmluZGV4IGZmZTNi
MTYuLjI0YmQ0OGYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dl
YlZpZXdIb3N0LmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3
SG9zdC5jcHAKQEAgLTgzNiw3ICs4MzYsNyBAQCBXZWJQbHVnaW4qIFdlYlZpZXdIb3N0OjpjcmVh
dGVQbHVnaW4oV2ViRnJhbWUqIGZyYW1lLCBjb25zdCBXZWJQbHVnaW5QYXJhbXMmIHBhcgogICAg
IHJldHVybiB3ZWJraXRfc3VwcG9ydDo6Q3JlYXRlV2ViUGx1Z2luKGZyYW1lLCBwYXJhbXMpOwog
fQogCi1XZWJXb3JrZXIqIFdlYlZpZXdIb3N0OjpjcmVhdGVXb3JrZXIoV2ViRnJhbWUqLCBXZWJX
b3JrZXJDbGllbnQqKQorV2ViV29ya2VyKiBXZWJWaWV3SG9zdDo6Y3JlYXRlV29ya2VyKFdlYkZy
YW1lKiwgV2ViU2hhcmVkV29ya2VyQ2xpZW50KikKIHsKICAgICByZXR1cm4gbmV3IFRlc3RXZWJX
b3JrZXIoKTsKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dl
YlZpZXdIb3N0LmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5o
CmluZGV4IDkyMjE2M2EuLmEyZjdiY2EgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1dlYlZpZXdIb3N0LmgKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vV2ViVmlld0hvc3QuaApAQCAtNTUsNiArNTUsNyBAQCBjbGFzcyBXZWJEZXZpY2VPcmllbnRh
dGlvbkNsaWVudE1vY2s7CiBjbGFzcyBXZWJHZW9sb2NhdGlvbkNsaWVudDsKIGNsYXNzIFdlYkdl
b2xvY2F0aW9uQ2xpZW50TW9jazsKIGNsYXNzIFdlYkdlb2xvY2F0aW9uU2VydmljZU1vY2s7Citj
bGFzcyBXZWJTaGFyZWRXb3JrZXJDbGllbnQ7CiBjbGFzcyBXZWJTcGVlY2hJbnB1dENvbnRyb2xs
ZXI7CiBjbGFzcyBXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXJNb2NrOwogY2xhc3MgV2ViU3BlZWNo
SW5wdXRMaXN0ZW5lcjsKQEAgLTE3Myw3ICsxNzQsNyBAQCBjbGFzcyBXZWJWaWV3SG9zdCA6IHB1
YmxpYyBXZWJLaXQ6OldlYlNwZWxsQ2hlY2tDbGllbnQsIHB1YmxpYyBXZWJLaXQ6OldlYlZpZXdD
bAogCiAgICAgLy8gV2ViS2l0OjpXZWJGcmFtZUNsaWVudAogICAgIHZpcnR1YWwgV2ViS2l0OjpX
ZWJQbHVnaW4qIGNyZWF0ZVBsdWdpbihXZWJLaXQ6OldlYkZyYW1lKiwgY29uc3QgV2ViS2l0OjpX
ZWJQbHVnaW5QYXJhbXMmKTsKLSAgICB2aXJ0dWFsIFdlYktpdDo6V2ViV29ya2VyKiBjcmVhdGVX
b3JrZXIoV2ViS2l0OjpXZWJGcmFtZSosIFdlYktpdDo6V2ViV29ya2VyQ2xpZW50Kik7CisgICAg
dmlydHVhbCBXZWJLaXQ6OldlYldvcmtlciogY3JlYXRlV29ya2VyKFdlYktpdDo6V2ViRnJhbWUq
LCBXZWJLaXQ6OldlYlNoYXJlZFdvcmtlckNsaWVudCopOwogICAgIHZpcnR1YWwgV2ViS2l0OjpX
ZWJNZWRpYVBsYXllciogY3JlYXRlTWVkaWFQbGF5ZXIoV2ViS2l0OjpXZWJGcmFtZSosIFdlYktp
dDo6V2ViTWVkaWFQbGF5ZXJDbGllbnQqKTsKICAgICB2aXJ0dWFsIFdlYktpdDo6V2ViQXBwbGlj
YXRpb25DYWNoZUhvc3QqIGNyZWF0ZUFwcGxpY2F0aW9uQ2FjaGVIb3N0KFdlYktpdDo6V2ViRnJh
bWUqLCBXZWJLaXQ6OldlYkFwcGxpY2F0aW9uQ2FjaGVIb3N0Q2xpZW50Kik7CiAgICAgdmlydHVh
bCB2b2lkIGxvYWRVUkxFeHRlcm5hbGx5KFdlYktpdDo6V2ViRnJhbWUqLCBjb25zdCBXZWJLaXQ6
OldlYlVSTFJlcXVlc3QmLCBXZWJLaXQ6OldlYk5hdmlnYXRpb25Qb2xpY3kpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120702</attachid>
            <date>2011-12-28 15:30:27 -0800</date>
            <delta_ts>2011-12-28 15:39:22 -0800</delta_ts>
            <desc>Reuploading the patch to use cq to commit.</desc>
            <filename>66509.patch</filename>
            <type>text/plain</type>
            <size>78459</size>
            <attacher name="Dmitry Lomov">dslomov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggMWE1MjAxZC4uMDJiY2NiOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4NyBAQAorMjAxMS0xMi0yOCAgRG1pdHJ5IExv
bW92ICA8ZHNsb21vdkBnb29nbGUuY29tPgorCisgICAgICAgIFtXZWJXb3JrZXJzXVtDaHJvbWl1
bV0gUmVtb3ZlIHJlbWFpbnMgb2YgY3Jvc3MtcHJvY2VzcyBkZWRpY2F0ZWQgd29ya2VyIGltcGxl
bWVudGF0aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NjY1MDkKKyAgICAgICAgSnVzdCByZW5hbWVzLCBtZXJnZXMgYW5kIHJlbW92YWwgb2YgZGVh
ZCBjb2RlLiBIZXJlIGFyZSB0aGUgbGlzdCBvZiByZW5hbWVzOgorICAgICAgICAgIC0gV2ViQ29t
bW9uV29ya2VyQ2xpZW50IG1lcmdlZCB3aXRoIFdlYldvcmtlckNsaWVudCBhbmQgcmVuYW1lZCB0
byBXZWJTaGFyZWRXb3JrZXJDbGllbnQKKyAgICAgICAgICAtIE5ld1dlYkNvbW1vbldvcmtlckNs
aWVudCByZW5hbWVkIHRvIFdlYkNvbW1vbldvcmtlckNsaWVudAorICAgICAgICAgIC0gV2ViV29y
a2VyQmFzZSBtZXJnZWQgaW50byBXZWJTaGFyZWRXb3JrZXJJbXBsCisgICAgICAgICAgLSBOZXdX
ZWJXb3JrZXJCYXNlIHJlbmFtZWQgaW50byBXZWJXb3JrZXJCYXNlCisgICAgICAgIFdlYldvcmtl
ckNsaWVudC5oIGhhcyBhICIjZGVmaW5lIFdlYldvcmtlckNsaWVudCBXZWJTaGFyZWRXb3JrZXJD
bGllbnQiIHRvIGtlZXAgY2hyb21pdW0gYnVpbGRpbmcuCisgICAgICAgIFdpbGwgYmUgcmVtb3Zl
ZCBhZnRlciBjb29yZGluYXRlZCBwYXRjaCBpbiBjaHJvbWl1bS4KKworICAgICAgICBSZXZpZXdl
ZCBieSBEYXZpZCBMZXZpbi4KKworICAgICAgICAqIFdlYktpdC5neXA6CisgICAgICAgICogcHVi
bGljL1dlYkNvbW1vbldvcmtlckNsaWVudC5oOgorICAgICAgICAqIHB1YmxpYy9XZWJTaGFyZWRX
b3JrZXIuaDoKKyAgICAgICAgKiBwdWJsaWMvV2ViU2hhcmVkV29ya2VyQ2xpZW50Lmg6IENvcGll
ZCBmcm9tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNvbW1vbldvcmtlckNsaWVu
dC5oLgorICAgICAgICAoV2ViS2l0OjpXZWJTaGFyZWRXb3JrZXJDbGllbnQ6OnBvc3RDb25zb2xl
TWVzc2FnZVRvV29ya2VyT2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViU2hhcmVkV29ya2Vy
Q2xpZW50OjphbGxvd0ZpbGVTeXN0ZW0pOgorICAgICAgICAoV2ViS2l0OjpXZWJTaGFyZWRXb3Jr
ZXJDbGllbnQ6Om9wZW5GaWxlU3lzdGVtKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2hhcmVkV29y
a2VyQ2xpZW50OjpkaXNwYXRjaERldlRvb2xzTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlNoYXJlZFdvcmtlckNsaWVudDo6c2F2ZURldlRvb2xzQWdlbnRTdGF0ZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlNoYXJlZFdvcmtlckNsaWVudDo6fldlYlNoYXJlZFdvcmtlckNsaWVudCk6Cisg
ICAgICAgICogcHVibGljL1dlYldvcmtlckNsaWVudC5oOgorICAgICAgICAqIHNyYy9EYXRhYmFz
ZU9ic2VydmVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6QWxsb3dEYXRhYmFzZU1haW5UaHJlYWRC
cmlkZ2U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkFsbG93RGF0YWJhc2VNYWluVGhyZWFk
QnJpZGdlOjpBbGxvd0RhdGFiYXNlTWFpblRocmVhZEJyaWRnZSk6CisgICAgICAgIChXZWJLaXQ6
OkFsbG93RGF0YWJhc2VNYWluVGhyZWFkQnJpZGdlOjphbGxvd0RhdGFiYXNlVGFzayk6CisgICAg
ICAgIChXZWJLaXQ6OmFsbG93RGF0YWJhc2VGb3JXb3JrZXIpOgorICAgICAgICAoV2ViQ29yZTo6
RGF0YWJhc2VPYnNlcnZlcjo6Y2FuRXN0YWJsaXNoRGF0YWJhc2UpOgorICAgICAgICAqIHNyYy9J
REJGYWN0b3J5QmFja2VuZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6SURCRmFjdG9yeUJh
Y2tlbmRQcm94eTo6b3BlbkZyb21Xb3JrZXIpOgorICAgICAgICAqIHNyYy9Mb2NhbEZpbGVTeXN0
ZW1DaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpvcGVuRmlsZVN5c3RlbUhlbHBlcik6
CisgICAgICAgICogc3JjL1dlYlNoYXJlZFdvcmtlckltcGwuY3BwOgorICAgICAgICAoV2ViS2l0
Ojppbml0aWFsaXplV2ViS2l0U3RhdGljVmFsdWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2hh
cmVkV29ya2VySW1wbDo6V2ViU2hhcmVkV29ya2VySW1wbCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlNoYXJlZFdvcmtlckltcGw6On5XZWJTaGFyZWRXb3JrZXJJbXBsKToKKyAgICAgICAgKFdlYktp
dDo6V2ViU2hhcmVkV29ya2VySW1wbDo6c3RvcFdvcmtlclRocmVhZCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlNoYXJlZFdvcmtlckltcGw6OmluaXRpYWxpemVMb2FkZXIpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJTaGFyZWRXb3JrZXJJbXBsOjpkaWRDcmVhdGVEYXRhU291cmNlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViU2hhcmVkV29ya2VySW1wbDo6Y3JlYXRlQXBwbGljYXRpb25DYWNoZUhvc3Qp
OgorICAgICAgICAoV2ViS2l0OjpXZWJTaGFyZWRXb3JrZXJJbXBsOjpwb3N0TWVzc2FnZVRvV29y
a2VyT2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViU2hhcmVkV29ya2VySW1wbDo6cG9zdE1l
c3NhZ2VUYXNrKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2hhcmVkV29ya2VySW1wbDo6cG9zdEV4
Y2VwdGlvblRvV29ya2VyT2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViU2hhcmVkV29ya2Vy
SW1wbDo6cG9zdEV4Y2VwdGlvblRhc2spOgorICAgICAgICAoV2ViS2l0OjpXZWJTaGFyZWRXb3Jr
ZXJJbXBsOjpwb3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlNoYXJlZFdvcmtlckltcGw6OnBvc3RDb25zb2xlTWVzc2FnZVRhc2spOgorICAgICAg
ICAoV2ViS2l0OjpXZWJTaGFyZWRXb3JrZXJJbXBsOjpwb3N0TWVzc2FnZVRvUGFnZUluc3BlY3Rv
cik6CisgICAgICAgIChXZWJLaXQ6OldlYlNoYXJlZFdvcmtlckltcGw6OnBvc3RNZXNzYWdlVG9Q
YWdlSW5zcGVjdG9yVGFzayk6CisgICAgICAgIChXZWJLaXQ6OldlYlNoYXJlZFdvcmtlckltcGw6
OnVwZGF0ZUluc3BlY3RvclN0YXRlQ29va2llKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2hhcmVk
V29ya2VySW1wbDo6dXBkYXRlSW5zcGVjdG9yU3RhdGVDb29raWVUYXNrKToKKyAgICAgICAgKFdl
YktpdDo6V2ViU2hhcmVkV29ya2VySW1wbDo6Y29uZmlybU1lc3NhZ2VGcm9tV29ya2VyT2JqZWN0
KToKKyAgICAgICAgKFdlYktpdDo6V2ViU2hhcmVkV29ya2VySW1wbDo6Y29uZmlybU1lc3NhZ2VU
YXNrKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2hhcmVkV29ya2VySW1wbDo6cmVwb3J0UGVuZGlu
Z0FjdGl2aXR5KToKKyAgICAgICAgKFdlYktpdDo6V2ViU2hhcmVkV29ya2VySW1wbDo6cmVwb3J0
UGVuZGluZ0FjdGl2aXR5VGFzayk6CisgICAgICAgIChXZWJLaXQ6OldlYlNoYXJlZFdvcmtlcklt
cGw6OndvcmtlckNvbnRleHRDbG9zZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJTaGFyZWRXb3Jr
ZXJJbXBsOjp3b3JrZXJDb250ZXh0Q2xvc2VkVGFzayk6CisgICAgICAgIChXZWJLaXQ6OldlYlNo
YXJlZFdvcmtlckltcGw6OndvcmtlckNvbnRleHREZXN0cm95ZWQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJTaGFyZWRXb3JrZXJJbXBsOjp3b3JrZXJDb250ZXh0RGVzdHJveWVkVGFzayk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlNoYXJlZFdvcmtlckltcGw6OnBvc3RUYXNrVG9Mb2FkZXIpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJTaGFyZWRXb3JrZXJJbXBsOjpwb3N0VGFza0Zvck1vZGVUb1dvcmtl
ckNvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJTaGFyZWRXb3JrZXI6OmNyZWF0ZSk6Cisg
ICAgICAgICogc3JjL1dlYlNoYXJlZFdvcmtlckltcGwuaDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
U2hhcmVkV29ya2VySW1wbDo6dmlldyk6CisgICAgICAgIChXZWJLaXQ6OldlYlNoYXJlZFdvcmtl
ckltcGw6OmNvbW1vbkNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNoYXJlZFdvcmtlcklt
cGw6OmNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNoYXJlZFdvcmtlckltcGw6OnNldFdv
cmtlclRocmVhZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNoYXJlZFdvcmtlckltcGw6Ondvcmtl
clRocmVhZCk6CisgICAgICAgICogc3JjL1dlYldvcmtlckJhc2UuY3BwOgorICAgICAgICAoV2Vi
S2l0OjppbnZva2VUYXNrTWV0aG9kKToKKyAgICAgICAgKFdlYktpdDo6V2ViV29ya2VyQmFzZTo6
ZGlzcGF0Y2hUYXNrVG9NYWluVGhyZWFkKToKKyAgICAgICAgKiBzcmMvV2ViV29ya2VyQmFzZS5o
OgorICAgICAgICAqIHNyYy9XZWJXb3JrZXJDbGllbnRJbXBsLmNwcDoKKyAgICAgICAgKiBzcmMv
V2ViV29ya2VyQ2xpZW50SW1wbC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJXb3JrZXJDbGllbnRJ
bXBsOjpjb21tb25DbGllbnQpOgorICAgICAgICAqIHNyYy9XZWJXb3JrZXJJbXBsLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBzcmMvV2ViV29ya2VySW1wbC5oOiBSZW1vdmVkLgorICAgICAgICAq
IHNyYy9Xb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6cG9zdE9wZW5GaWxlU3lzdGVtVG9N
YWluVGhyZWFkKToKKyAgICAgICAgKFdlYktpdDo6V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0Jy
aWRnZTo6b3BlbkZpbGVTeXN0ZW1Pbk1haW5UaHJlYWQpOgorICAgICAgICAqIHNyYy9Xb3JrZXJG
aWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlLmg6CisKIDIwMTEtMTItMjggIFNoZXJpZmYgQm90ICA8
d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxp
bmcgb3V0IHIxMDM2MjAuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktp
dC5neXAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKaW5kZXggMmJhNGY0NC4u
ZDJjMjcwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cApAQCAtMjM1LDYgKzIzNSw3IEBA
CiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJTZWN1cml0eVBvbGljeS5oJywKICAgICAgICAg
ICAgICAgICAncHVibGljL1dlYlNlbGVjdEVsZW1lbnQuaCcsCiAgICAgICAgICAgICAgICAgJ3B1
YmxpYy9XZWJTZXR0aW5ncy5oJywKKyAgICAgICAgICAgICAgICAncHVibGljL1dlYlNoYXJlZFdv
cmtlckNsaWVudC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYlNoYXJlZFdvcmtlci5o
JywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYlNoYXJlZFdvcmtlclJlcG9zaXRvcnkuaCcs
CiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJTb2NrZXQuaCcsCkBAIC02NjUsOCArNjY2LDYg
QEAKICAgICAgICAgICAgICAgICAnc3JjL1dlYldvcmtlckJhc2UuaCcsCiAgICAgICAgICAgICAg
ICAgJ3NyYy9XZWJXb3JrZXJDbGllbnRJbXBsLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9X
ZWJXb3JrZXJDbGllbnRJbXBsLmgnLAotICAgICAgICAgICAgICAgICdzcmMvV2ViV29ya2VySW1w
bC5jcHAnLAotICAgICAgICAgICAgICAgICdzcmMvV2ViV29ya2VySW1wbC5oJywKICAgICAgICAg
ICAgICAgICAnc3JjL1dlYldvcmtlclJ1bkxvb3AuY3BwJywKICAgICAgICAgICAgICAgICAnc3Jj
L1dvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3Ny
Yy9Xb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bS5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNvbW1vbldvcmtlckNsaWVudC5oIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ29tbW9uV29ya2VyQ2xpZW50LmgKaW5kZXggYTc5NDUz
OS4uMmZmYjU0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2Vi
Q29tbW9uV29ya2VyQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViQ29tbW9uV29ya2VyQ2xpZW50LmgKQEAgLTQ0LDcgKzQ0LDcgQEAgY2xhc3MgV2ViU3RyaW5n
OwogY2xhc3MgV2ViV29ya2VyOwogY2xhc3MgV2ViV29ya2VyQ2xpZW50OwogCi1jbGFzcyBOZXdX
ZWJDb21tb25Xb3JrZXJDbGllbnQgeworY2xhc3MgV2ViQ29tbW9uV29ya2VyQ2xpZW50IHsKIHB1
YmxpYzoKICAgICAvLyBDYWxsZWQgb24gdGhlIG1haW4gd2Via2l0IHRocmVhZCBiZWZvcmUgb3Bl
bmluZyBhIHdlYiBkYXRhYmFzZS4KICAgICB2aXJ0dWFsIGJvb2wgYWxsb3dEYXRhYmFzZShXZWJG
cmFtZSosIGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgY29uc3QgV2ViU3RyaW5nJiBkaXNwbGF5TmFt
ZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKSA9IDA7CkBAIC01Niw2NiArNTYsNiBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIG9wZW5GaWxlU3lzdGVtKFdlYkZpbGVTeXN0ZW06OlR5
cGUsIGxvbmcgbG9uZyBzaXplLCBib29sIGNyZWF0ZSwgV2ViRmlsZVN5c3RlbUNhbGxiYWNrcyop
ID0gMDsKIH07CiAKLS8vIFByb3ZpZGVzIGFuIGludGVyZmFjZSBiYWNrIHRvIHRoZSBpbi1wYWdl
IHNjcmlwdCBvYmplY3QgZm9yIGEgd29ya2VyLgotLy8gVGhpcyBpbnRlcmZhY2UgY29udGFpbnMg
Y29tbW9uIEFQSXMgdXNlZCBieSBib3RoIHNoYXJlZCBhbmQgZGVkaWNhdGVkCi0vLyB3b3JrZXJz
LgotLy8gQWxsIGZ1bmN0aW9ucyBhcmUgZXhwZWN0ZWQgdG8gYmUgY2FsbGVkIGJhY2sgb24gdGhl
IHRocmVhZCB0aGF0IGNyZWF0ZWQKLS8vIHRoZSBXb3JrZXIgb2JqZWN0LCB1bmxlc3Mgbm90ZWQu
Ci1jbGFzcyBXZWJDb21tb25Xb3JrZXJDbGllbnQgOiBwdWJsaWMgTmV3V2ViQ29tbW9uV29ya2Vy
Q2xpZW50IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgcG9zdEV4Y2VwdGlvblRvV29ya2Vy
T2JqZWN0KAotICAgICAgICBjb25zdCBXZWJTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbGluZU51
bWJlciwKLSAgICAgICAgY29uc3QgV2ViU3RyaW5nJiBzb3VyY2VVUkwpID0gMDsKLQotICAgIC8v
IEZJWE1FOiB0aGUgYmVsb3cgaXMgZm9yIGNvbXBhdGliaWxpdHkgb25seSBhbmQgc2hvdWxkIGJl
ICAgCi0gICAgLy8gcmVtb3ZlZCBvbmNlIENocm9taXVtIGlzIHVwZGF0ZWQgdG8gcmVtb3ZlIG1l
c3NhZ2UKLSAgICAvLyBkZXN0aW5hdGlvbiBwYXJhbWV0ZXIgPGh0dHA6Ly93ZWJraXQub3JnL2Iv
MzcxNTU+LgotICAgIHZpcnR1YWwgdm9pZCBwb3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVj
dChpbnQsIGludCBzb3VyY2VJZGVudGlmaWVyLCBpbnQgbWVzc2FnZVR5cGUsIGludCBtZXNzYWdl
TGV2ZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFdlYlN0cmluZyYgbWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFdlYlN0cmlu
ZyYgc291cmNlVVJMKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcG9zdENvbnNvbGVNZXNzYWdl
VG9Xb3JrZXJPYmplY3QoaW50IHNvdXJjZUlkZW50aWZpZXIsIGludCBtZXNzYWdlVHlwZSwgaW50
IG1lc3NhZ2VMZXZlbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgV2ViU3RyaW5nJiBtZXNzYWdlLCBpbnQgbGluZU51bWJlciwgY29uc3Qg
V2ViU3RyaW5nJiBzb3VyY2VVUkwpCi0gICAgewotICAgICAgICBwb3N0Q29uc29sZU1lc3NhZ2VU
b1dvcmtlck9iamVjdCgwLCBzb3VyY2VJZGVudGlmaWVyLCBtZXNzYWdlVHlwZSwgbWVzc2FnZUxl
dmVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLCBs
aW5lTnVtYmVyLCBzb3VyY2VVUkwpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB3b3JrZXJD
b250ZXh0Q2xvc2VkKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB3b3JrZXJDb250ZXh0RGVzdHJv
eWVkKCkgPSAwOwotCi0gICAgLy8gUmV0dXJucyB0aGUgbm90aWZpY2F0aW9uIHByZXNlbnRlciBm
b3IgdGhpcyB3b3JrZXIgY29udGV4dC4gIFBvaW50ZXIKLSAgICAvLyBpcyBvd25lZCBieSB0aGUg
b2JqZWN0IGltcGxlbWVudGluZyBXZWJDb21tb25Xb3JrZXJDbGllbnQuCi0gICAgdmlydHVhbCBX
ZWJOb3RpZmljYXRpb25QcmVzZW50ZXIqIG5vdGlmaWNhdGlvblByZXNlbnRlcigpID0gMDsKLQot
ICAgIC8vIFRoaXMgY2FuIGJlIGNhbGxlZCBvbiBhbnkgdGhyZWFkIHRvIGNyZWF0ZSBhIG5lc3Rl
ZCBXZWJXb3JrZXIuCi0gICAgLy8gV2ViU2hhcmVkV29ya2VycyBhcmUgbm90IGluc3RhbnRpYXRl
ZCB2aWEgdGhpcyBBUEkgLSBpbnN0ZWFkCi0gICAgLy8gdGhleSBhcmUgY3JlYXRlZCB2aWEgdGhl
IFdlYlNoYXJlZFdvcmtlclJlcG9zaXRvcnkuCi0gICAgdmlydHVhbCBXZWJXb3JrZXIqIGNyZWF0
ZVdvcmtlcihXZWJXb3JrZXJDbGllbnQqIGNsaWVudCkgPSAwOwotCi0gICAgLy8gQ2FsbGVkIG9u
IHRoZSBtYWluIHdlYmtpdCB0aHJlYWQgaW4gdGhlIHdvcmtlciBwcm9jZXNzIGR1cmluZyBpbml0
aWFsaXphdGlvbi4KLSAgICB2aXJ0dWFsIFdlYkFwcGxpY2F0aW9uQ2FjaGVIb3N0KiBjcmVhdGVB
cHBsaWNhdGlvbkNhY2hlSG9zdChXZWJBcHBsaWNhdGlvbkNhY2hlSG9zdENsaWVudCopID0gMDsK
LQotICAgIC8vIENhbGxlZCBvbiB0aGUgbWFpbiB3ZWJraXQgdGhyZWFkIGJlZm9yZSBvcGVuaW5n
IGEgd2ViIGRhdGFiYXNlLgotICAgIHZpcnR1YWwgYm9vbCBhbGxvd0RhdGFiYXNlKFdlYkZyYW1l
KiwgY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBjb25zdCBXZWJTdHJpbmcmIGRpc3BsYXlOYW1lLCB1
bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpID0gMDsKLQotICAgIC8vIENhbGxlZCBvbiB0aGUg
bWFpbiB3ZWJraXQgdGhyZWFkIGJlZm9yZSBvcGVuaW5nIGEgZmlsZSBzeXN0ZW0uCi0gICAgdmly
dHVhbCBib29sIGFsbG93RmlsZVN5c3RlbSgpCi0gICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0KLSAgICAvLyBDYWxsZWQgb24gdGhlIG1haW4gd2Via2l0IHRocmVhZCBiZWZvcmUg
b3BlbmluZyBhIGZpbGUgc3lzdGVtLgotICAgIHZpcnR1YWwgdm9pZCBvcGVuRmlsZVN5c3RlbShX
ZWJGaWxlU3lzdGVtOjpUeXBlLCBsb25nIGxvbmcgc2l6ZSwgYm9vbCBjcmVhdGUsIFdlYkZpbGVT
eXN0ZW1DYWxsYmFja3MqKQotICAgIHsKLSAgICAgICAgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERldlRvb2xzTWVzc2FnZShj
b25zdCBXZWJTdHJpbmcmKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2F2ZURldlRvb2xzQWdlbnRT
dGF0ZShjb25zdCBXZWJTdHJpbmcmKSB7IH0KLQotcHJvdGVjdGVkOgotICAgIH5XZWJDb21tb25X
b3JrZXJDbGllbnQoKSB7IH0KLX07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJGcmFtZUNsaWVudC5oIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRnJhbWVDbGllbnQuaAppbmRleCBiMjEzMjI5
Li4wYmYzMDU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJG
cmFtZUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkZyYW1l
Q2xpZW50LmgKQEAgLTY3LDcgKzY3LDcgQEAgY2xhc3MgV2ViVVJMTG9hZGVyOwogY2xhc3MgV2Vi
VVJMUmVxdWVzdDsKIGNsYXNzIFdlYlVSTFJlc3BvbnNlOwogY2xhc3MgV2ViV29ya2VyOwotY2xh
c3MgV2ViV29ya2VyQ2xpZW50OworY2xhc3MgV2ViU2hhcmVkV29ya2VyQ2xpZW50Owogc3RydWN0
IFdlYlBsdWdpblBhcmFtczsKIHN0cnVjdCBXZWJSZWN0Owogc3RydWN0IFdlYlNpemU7CkBAIC04
MSw3ICs4MSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFdlYlBsdWdpbiogY3JlYXRlUGx1Z2lu
KFdlYkZyYW1lKiwgY29uc3QgV2ViUGx1Z2luUGFyYW1zJikgeyByZXR1cm4gMDsgfQogCiAgICAg
Ly8gTWF5IHJldHVybiBudWxsLgotICAgIHZpcnR1YWwgV2ViV29ya2VyKiBjcmVhdGVXb3JrZXIo
V2ViRnJhbWUqLCBXZWJXb3JrZXJDbGllbnQqKSB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBX
ZWJXb3JrZXIqIGNyZWF0ZVdvcmtlcihXZWJGcmFtZSosIFdlYlNoYXJlZFdvcmtlckNsaWVudCop
IHsgcmV0dXJuIDA7IH0KIAogICAgIC8vIE1heSByZXR1cm4gbnVsbC4KICAgICB2aXJ0dWFsIFdl
YlNoYXJlZFdvcmtlciogY3JlYXRlU2hhcmVkV29ya2VyKFdlYkZyYW1lKiwgY29uc3QgV2ViVVJM
JiwgY29uc3QgV2ViU3RyaW5nJiwgdW5zaWduZWQgbG9uZyBsb25nKSB7IHJldHVybiAwOyB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTaGFyZWRXb3JrZXIu
aCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNoYXJlZFdvcmtlci5oCmluZGV4
IDdkNWQwMDMuLjQ0N2Y3ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYlNoYXJlZFdvcmtlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYlNoYXJlZFdvcmtlci5oCkBAIC00MSw3ICs0MSw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewog
CiBjbGFzcyBXZWJTdHJpbmc7CiBjbGFzcyBXZWJNZXNzYWdlUG9ydENoYW5uZWw7Ci1jbGFzcyBX
ZWJDb21tb25Xb3JrZXJDbGllbnQ7CitjbGFzcyBXZWJTaGFyZWRXb3JrZXJDbGllbnQ7CiBjbGFz
cyBXZWJVUkw7CiAKIC8vIFRoaXMgaXMgdGhlIGludGVyZmFjZSB0byBhIFNoYXJlZFdvcmtlciB0
aHJlYWQuCkBAIC00OSw3ICs0OSw3IEBAIGNsYXNzIFdlYlVSTDsKIGNsYXNzIFdlYlNoYXJlZFdv
cmtlciB7CiBwdWJsaWM6CiAgICAgLy8gSW52b2tlZCBmcm9tIHRoZSB3b3JrZXIgdGhyZWFkIHRv
IGluc3RhbnRpYXRlIGEgV2ViU2hhcmVkV29ya2VyIHRoYXQgaW50ZXJhY3RzIHdpdGggdGhlIFdl
YktpdCB3b3JrZXIgY29tcG9uZW50cy4KLSAgICBXRUJLSVRfRVhQT1JUIHN0YXRpYyBXZWJTaGFy
ZWRXb3JrZXIqIGNyZWF0ZShXZWJDb21tb25Xb3JrZXJDbGllbnQqKTsKKyAgICBXRUJLSVRfRVhQ
T1JUIHN0YXRpYyBXZWJTaGFyZWRXb3JrZXIqIGNyZWF0ZShXZWJTaGFyZWRXb3JrZXJDbGllbnQq
KTsKIAogICAgIHZpcnR1YWwgfldlYlNoYXJlZFdvcmtlcigpIHt9OwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJXb3JrZXJDbGllbnQuaCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldvcmtlckNsaWVudC5oCmluZGV4IGViMmU2M2UuLjU5
Njk5OWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldvcmtl
ckNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYldvcmtlckNs
aWVudC5oCkBAIC0zMSwzMSArMzEsOCBAQAogI2lmbmRlZiBXZWJXb3JrZXJDbGllbnRfaAogI2Rl
ZmluZSBXZWJXb3JrZXJDbGllbnRfaAogCi0jaW5jbHVkZSAiV2ViQ29tbW9uV29ya2VyQ2xpZW50
LmgiCi0jaW5jbHVkZSAiV2ViTWVzc2FnZVBvcnRDaGFubmVsLmgiCisjaW5jbHVkZSAiV2ViU2hh
cmVkV29ya2VyQ2xpZW50LmgiCiAKLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJOb3Rp
ZmljYXRpb25QcmVzZW50ZXI7Ci1jbGFzcyBXZWJTdHJpbmc7Ci1jbGFzcyBXZWJXb3JrZXI7Ci0K
LS8vIFByb3ZpZGVzIGFuIGludGVyZmFjZSBiYWNrIHRvIHRoZSBpbi1wYWdlIHNjcmlwdCBvYmpl
Y3QgZm9yIGEgd29ya2VyLgotLy8gQWxsIGZ1bmN0aW9ucyBhcmUgZXhwZWN0ZWQgdG8gYmUgY2Fs
bGVkIGJhY2sgb24gdGhlIHRocmVhZCB0aGF0IGNyZWF0ZWQKLS8vIHRoZSBXb3JrZXIgb2JqZWN0
LCB1bmxlc3Mgbm90ZWQuCi1jbGFzcyBXZWJXb3JrZXJDbGllbnQgOiBwdWJsaWMgV2ViQ29tbW9u
V29ya2VyQ2xpZW50IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgcG9zdE1lc3NhZ2VUb1dv
cmtlck9iamVjdCgKLSAgICAgICAgY29uc3QgV2ViU3RyaW5nJiwKLSAgICAgICAgY29uc3QgV2Vi
TWVzc2FnZVBvcnRDaGFubmVsQXJyYXkmKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY29uZmly
bU1lc3NhZ2VGcm9tV29ya2VyT2JqZWN0KGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIHJlcG9ydFBlbmRpbmdBY3Rpdml0eShib29sIGhhc1BlbmRpbmdBY3Rp
dml0eSkgPSAwOwotCi1wcm90ZWN0ZWQ6Ci0gICAgfldlYldvcmtlckNsaWVudCgpIHsgfQotfTsK
LQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisjZGVmaW5lIFdlYldvcmtlckNsaWVudCBXZWJTaGFy
ZWRXb3JrZXJDbGllbnQKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9EYXRhYmFzZU9ic2VydmVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L0RhdGFiYXNlT2JzZXJ2ZXIuY3BwCmluZGV4IDE4N2I1NWUuLjQwYjUwNDggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0RhdGFiYXNlT2JzZXJ2ZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0RhdGFiYXNlT2JzZXJ2ZXIuY3BwCkBAIC02NCw3ICs2
NCw3IEBAIHN0YXRpYyBjb25zdCBjaGFyIGFsbG93RGF0YWJhc2VNb2RlW10gPSAiYWxsb3dEYXRh
YmFzZU1vZGUiOwogLy8gY2FsbCBiYWNrIHRvIHRoZSB3b3JrZXIgY29udGV4dC4KIGNsYXNzIEFs
bG93RGF0YWJhc2VNYWluVGhyZWFkQnJpZGdlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVk
PEFsbG93RGF0YWJhc2VNYWluVGhyZWFkQnJpZGdlPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBh
c3NSZWZQdHI8QWxsb3dEYXRhYmFzZU1haW5UaHJlYWRCcmlkZ2U+IGNyZWF0ZShXZWJDb3JlOjpX
b3JrZXJMb2FkZXJQcm94eSogd29ya2VyTG9hZGVyUHJveHksIGNvbnN0IFN0cmluZyYgbW9kZSwg
TmV3V2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQsIFdlYkZyYW1lKiBmcmFtZSwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBs
b25nIGVzdGltYXRlZFNpemUpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8QWxsb3dEYXRhYmFzZU1h
aW5UaHJlYWRCcmlkZ2U+IGNyZWF0ZShXZWJDb3JlOjpXb3JrZXJMb2FkZXJQcm94eSogd29ya2Vy
TG9hZGVyUHJveHksIGNvbnN0IFN0cmluZyYgbW9kZSwgV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBj
b21tb25DbGllbnQsIFdlYkZyYW1lKiBmcmFtZSwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBT
dHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpCiAgICAgewog
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEFsbG93RGF0YWJhc2VNYWluVGhyZWFkQnJpZGdl
KHdvcmtlckxvYWRlclByb3h5LCBtb2RlLCBjb21tb25DbGllbnQsIGZyYW1lLCBuYW1lLCBkaXNw
bGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSkpOwogICAgIH0KQEAgLTkxLDcgKzkxLDcgQEAgcHVibGlj
OgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBBbGxvd0RhdGFiYXNlTWFpblRocmVhZEJyaWRnZShX
ZWJDb3JlOjpXb3JrZXJMb2FkZXJQcm94eSogd29ya2VyTG9hZGVyUHJveHksIGNvbnN0IFN0cmlu
ZyYgbW9kZSwgTmV3V2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQsIFdlYkZyYW1l
KiBmcmFtZSwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1
bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpCisgICAgQWxsb3dEYXRhYmFzZU1haW5UaHJlYWRC
cmlkZ2UoV2ViQ29yZTo6V29ya2VyTG9hZGVyUHJveHkqIHdvcmtlckxvYWRlclByb3h5LCBjb25z
dCBTdHJpbmcmIG1vZGUsIFdlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50LCBXZWJG
cmFtZSogZnJhbWUsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFt
ZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKQogICAgICAgICA6IG1fd29ya2VyTG9hZGVy
UHJveHkod29ya2VyTG9hZGVyUHJveHkpCiAgICAgewogICAgICAgICBXZWJXb3JrZXJCYXNlOjpk
aXNwYXRjaFRhc2tUb01haW5UaHJlYWQoCkBAIC0xMDEsNyArMTAxLDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzKSk7CiAgICAgfQogCi0gICAgc3RhdGlj
IHZvaWQgYWxsb3dEYXRhYmFzZVRhc2soV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCwgY29uc3QgU3RyaW5nIG1vZGUsIE5ld1dlYkNvbW1vbldvcmtlckNsaWVudCogY29t
bW9uQ2xpZW50LCBXZWJGcmFtZSogZnJhbWUsIGNvbnN0IFN0cmluZyBuYW1lLCBjb25zdCBTdHJp
bmcgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1JlZlB0cjxB
bGxvd0RhdGFiYXNlTWFpblRocmVhZEJyaWRnZT4gYnJpZGdlKQorICAgIHN0YXRpYyB2b2lkIGFs
bG93RGF0YWJhc2VUYXNrKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQs
IGNvbnN0IFN0cmluZyBtb2RlLCBXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1vbkNsaWVudCwg
V2ViRnJhbWUqIGZyYW1lLCBjb25zdCBTdHJpbmcgbmFtZSwgY29uc3QgU3RyaW5nIGRpc3BsYXlO
YW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIFBhc3NSZWZQdHI8QWxsb3dEYXRhYmFz
ZU1haW5UaHJlYWRCcmlkZ2U+IGJyaWRnZSkKICAgICB7CiAgICAgICAgIGJvb2wgYWxsb3dEYXRh
YmFzZSA9IGNvbW1vbkNsaWVudCA/IGNvbW1vbkNsaWVudC0+YWxsb3dEYXRhYmFzZShmcmFtZSwg
bmFtZSwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUpIDogZmFsc2U7CiAgICAgICAgIGJyaWRn
ZS0+c2lnbmFsQ29tcGxldGVkKG1vZGUsIGFsbG93RGF0YWJhc2UpOwpAQCAtMTE3LDcgKzExNyw3
IEBAIHByaXZhdGU6CiAgICAgV2ViQ29yZTo6V29ya2VyTG9hZGVyUHJveHkqIG1fd29ya2VyTG9h
ZGVyUHJveHk7CiB9OwogCi1ib29sIGFsbG93RGF0YWJhc2VGb3JXb3JrZXIoTmV3V2ViQ29tbW9u
V29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQsIFdlYkZyYW1lKiBmcmFtZSwgY29uc3QgV2ViU3Ry
aW5nJiBuYW1lLCBjb25zdCBXZWJTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVz
dGltYXRlZFNpemUpCitib29sIGFsbG93RGF0YWJhc2VGb3JXb3JrZXIoV2ViQ29tbW9uV29ya2Vy
Q2xpZW50KiBjb21tb25DbGllbnQsIFdlYkZyYW1lKiBmcmFtZSwgY29uc3QgV2ViU3RyaW5nJiBu
YW1lLCBjb25zdCBXZWJTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRl
ZFNpemUpCiB7CiAgICAgV2ViQ29yZTo6V29ya2VyU2NyaXB0Q29udHJvbGxlciogY29udHJvbGxl
ciA9IFdlYkNvcmU6OldvcmtlclNjcmlwdENvbnRyb2xsZXI6OmNvbnRyb2xsZXJGb3JDb250ZXh0
KCk7CiAgICAgV2ViQ29yZTo6V29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4dCA9IGNvbnRyb2xs
ZXItPndvcmtlckNvbnRleHQoKTsKQEAgLTE2NCw4ICsxNjQsOCBAQCBib29sIERhdGFiYXNlT2Jz
ZXJ2ZXI6OmNhbkVzdGFibGlzaERhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlw
dEV4ZWN1dAogI2lmIEVOQUJMRShXT1JLRVJTKQogICAgICAgICBXb3JrZXJDb250ZXh0KiB3b3Jr
ZXJDb250ZXh0ID0gc3RhdGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQpOwogICAgICAgICBXb3JrZXJMb2FkZXJQcm94eSogd29ya2VyTG9hZGVyUHJveHkgPSAm
d29ya2VyQ29udGV4dC0+dGhyZWFkKCktPndvcmtlckxvYWRlclByb3h5KCk7Ci0gICAgICAgIE5l
d1dlYldvcmtlckJhc2UqIHdlYldvcmtlciA9IHN0YXRpY19jYXN0PE5ld1dlYldvcmtlckJhc2Uq
Pih3b3JrZXJMb2FkZXJQcm94eSk7Ci0gICAgICAgIHJldHVybiBhbGxvd0RhdGFiYXNlRm9yV29y
a2VyKHdlYldvcmtlci0+bmV3Q29tbW9uQ2xpZW50KCksIHdlYldvcmtlci0+dmlldygpLT5tYWlu
RnJhbWUoKSwgbmFtZSwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUpOworICAgICAgICBXZWJX
b3JrZXJCYXNlKiB3ZWJXb3JrZXIgPSBzdGF0aWNfY2FzdDxXZWJXb3JrZXJCYXNlKj4od29ya2Vy
TG9hZGVyUHJveHkpOworICAgICAgICByZXR1cm4gYWxsb3dEYXRhYmFzZUZvcldvcmtlcih3ZWJX
b3JrZXItPmNvbW1vbkNsaWVudCgpLCB3ZWJXb3JrZXItPnZpZXcoKS0+bWFpbkZyYW1lKCksIG5h
bWUsIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplKTsKICNlbHNlCiAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9JREJGYWN0b3J5QmFja2VuZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuY3BwCmluZGV4IDdhZTZlNjEuLmMyMjMwOWIgMTAw
NzU1Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJv
eHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5k
UHJveHkuY3BwCkBAIC05OSw3ICs5OSw3IEBAIHZvaWQgSURCRmFjdG9yeUJhY2tlbmRQcm94eTo6
b3BlbkZyb21Xb3JrZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJDYWxsYmFja3MqIGNhCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgV29ya2VyTG9hZGVyUHJveHkqIHdvcmtlckxvYWRlclBy
b3h5ID0gJmNvbnRleHQtPnRocmVhZCgpLT53b3JrZXJMb2FkZXJQcm94eSgpOwotICAgIE5ld1dl
YldvcmtlckJhc2UqIHdlYldvcmtlciA9IHN0YXRpY19jYXN0PE5ld1dlYldvcmtlckJhc2UqPih3
b3JrZXJMb2FkZXJQcm94eSk7CisgICAgV2ViV29ya2VyQmFzZSogd2ViV29ya2VyID0gc3RhdGlj
X2Nhc3Q8V2ViV29ya2VyQmFzZSo+KHdvcmtlckxvYWRlclByb3h5KTsKICAgICBXZWJGcmFtZSog
d2ViRnJhbWUgPSB3ZWJXb3JrZXItPnZpZXcoKS0+bWFpbkZyYW1lKCk7CiAgICAgbV93ZWJJREJG
YWN0b3J5LT5vcGVuKG5hbWUsIG5ldyBXZWJJREJDYWxsYmFja3NJbXBsKGNhbGxiYWNrcyksIG9y
aWdpbiwgd2ViRnJhbWUsIGRhdGFEaXIpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9Mb2NhbEZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9Mb2NhbEZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAKaW5kZXggNzU3ZWY4
Mi4uOWUwZTczMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvTG9jYWxG
aWxlU3lzdGVtQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0xv
Y2FsRmlsZVN5c3RlbUNocm9taXVtLmNwcApAQCAtNzksNyArNzksNyBAQCBzdGF0aWMgY29uc3Qg
Y2hhciBvcGVuRmlsZVN5c3RlbU1vZGVbXSA9ICJvcGVuRmlsZVN5c3RlbU1vZGUiOwogLy8gY2Fs
bCBiYWNrIHRvIHRoZSB3b3JrZXIgY29udGV4dC4KIGNsYXNzIEFsbG93RmlsZVN5c3RlbU1haW5U
aHJlYWRCcmlkZ2UgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8QWxsb3dGaWxlU3lzdGVt
TWFpblRocmVhZEJyaWRnZT4gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEFsbG93
RmlsZVN5c3RlbU1haW5UaHJlYWRCcmlkZ2U+IGNyZWF0ZShXZWJDb3JlOjpXb3JrZXJMb2FkZXJQ
cm94eSogd29ya2VyTG9hZGVyUHJveHksIGNvbnN0IFdURjo6U3RyaW5nJiBtb2RlLCBOZXdXZWJD
b21tb25Xb3JrZXJDbGllbnQqIGNvbW1vbkNsaWVudCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxB
bGxvd0ZpbGVTeXN0ZW1NYWluVGhyZWFkQnJpZGdlPiBjcmVhdGUoV2ViQ29yZTo6V29ya2VyTG9h
ZGVyUHJveHkqIHdvcmtlckxvYWRlclByb3h5LCBjb25zdCBXVEY6OlN0cmluZyYgbW9kZSwgV2Vi
Q29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQpCiAgICAgewogICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IEFsbG93RmlsZVN5c3RlbU1haW5UaHJlYWRCcmlkZ2Uod29ya2VyTG9hZGVy
UHJveHksIG1vZGUsIGNvbW1vbkNsaWVudCkpOwogICAgIH0KQEAgLTEwNiw3ICsxMDYsNyBAQCBw
dWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIEFsbG93RmlsZVN5c3RlbU1haW5UaHJlYWRC
cmlkZ2UoV2ViQ29yZTo6V29ya2VyTG9hZGVyUHJveHkqIHdvcmtlckxvYWRlclByb3h5LCBjb25z
dCBXVEY6OlN0cmluZyYgbW9kZSwgTmV3V2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGll
bnQpCisgICAgQWxsb3dGaWxlU3lzdGVtTWFpblRocmVhZEJyaWRnZShXZWJDb3JlOjpXb3JrZXJM
b2FkZXJQcm94eSogd29ya2VyTG9hZGVyUHJveHksIGNvbnN0IFdURjo6U3RyaW5nJiBtb2RlLCBX
ZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1vbkNsaWVudCkKICAgICAgICAgOiBtX3dvcmtlckxv
YWRlclByb3h5KHdvcmtlckxvYWRlclByb3h5KQogICAgICAgICAsIG1fbW9kZShtb2RlKQogICAg
IHsKQEAgLTExNSw3ICsxMTUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcykpKTsKICAgICB9CiAKLSAgICBzdGF0
aWMgdm9pZCBhbGxvd0ZpbGVTeXN0ZW1UYXNrKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQsIE5ld1dlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50LCBQYXNz
UmVmUHRyPEFsbG93RmlsZVN5c3RlbU1haW5UaHJlYWRCcmlkZ2U+IGJyaWRnZSkKKyAgICBzdGF0
aWMgdm9pZCBhbGxvd0ZpbGVTeXN0ZW1UYXNrKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQsIFdlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50LCBQYXNzUmVm
UHRyPEFsbG93RmlsZVN5c3RlbU1haW5UaHJlYWRCcmlkZ2U+IGJyaWRnZSkKICAgICB7CiAgICAg
ICAgIGlmIChjb21tb25DbGllbnQpCiAgICAgICAgICAgICBicmlkZ2UtPnNpZ25hbENvbXBsZXRl
ZChjb21tb25DbGllbnQtPmFsbG93RmlsZVN5c3RlbSgpKTsKQEAgLTEzNCw3ICsxMzQsNyBAQCBw
cml2YXRlOgogICAgIFdURjo6U3RyaW5nIG1fbW9kZTsKIH07CiAKLWJvb2wgYWxsb3dGaWxlU3lz
dGVtRm9yV29ya2VyKE5ld1dlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50KQorYm9v
bCBhbGxvd0ZpbGVTeXN0ZW1Gb3JXb3JrZXIoV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25D
bGllbnQpCiB7CiAgICAgV29ya2VyU2NyaXB0Q29udHJvbGxlciogY29udHJvbGxlciA9IFdvcmtl
clNjcmlwdENvbnRyb2xsZXI6OmNvbnRyb2xsZXJGb3JDb250ZXh0KCk7CiAgICAgV29ya2VyQ29u
dGV4dCogd29ya2VyQ29udGV4dCA9IGNvbnRyb2xsZXItPndvcmtlckNvbnRleHQoKTsKQEAgLTE1
Nyw3ICsxNTcsNyBAQCBib29sIGFsbG93RmlsZVN5c3RlbUZvcldvcmtlcihOZXdXZWJDb21tb25X
b3JrZXJDbGllbnQqIGNvbW1vbkNsaWVudCkKICAgICByZXR1cm4gYnJpZGdlLT5yZXN1bHQoKTsK
IH0KIAotdm9pZCBvcGVuRmlsZVN5c3RlbUZvcldvcmtlcihOZXdXZWJDb21tb25Xb3JrZXJDbGll
bnQqIGNvbW1vbkNsaWVudCwgV2ViRmlsZVN5c3RlbTo6VHlwZSB0eXBlLCBsb25nIGxvbmcgc2l6
ZSwgYm9vbCBjcmVhdGUsIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3MqIGNhbGxiYWNrcywgYm9vbCBz
eW5jaHJvbm91cykKK3ZvaWQgb3BlbkZpbGVTeXN0ZW1Gb3JXb3JrZXIoV2ViQ29tbW9uV29ya2Vy
Q2xpZW50KiBjb21tb25DbGllbnQsIFdlYkZpbGVTeXN0ZW06OlR5cGUgdHlwZSwgbG9uZyBsb25n
IHNpemUsIGJvb2wgY3JlYXRlLCBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzKiBjYWxsYmFja3MsIGJv
b2wgc3luY2hyb25vdXMpCiB7CiAgICAgV29ya2VyU2NyaXB0Q29udHJvbGxlciogY29udHJvbGxl
ciA9IFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OmNvbnRyb2xsZXJGb3JDb250ZXh0KCk7CiAgICAg
V29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4dCA9IGNvbnRyb2xsZXItPndvcmtlckNvbnRleHQo
KTsKQEAgLTIwMywxMSArMjAzLDExIEBAIHN0YXRpYyB2b2lkIG9wZW5GaWxlU3lzdGVtSGVscGVy
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEFzeW5jRmlsZVN5c3RlCiAjaWYgRU5B
QkxFKFdPUktFUlMpCiAgICAgICAgIFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQgPSBzdGF0
aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4oY29udGV4dCk7CiAgICAgICAgIFdvcmtlckxvYWRlclBy
b3h5KiB3b3JrZXJMb2FkZXJQcm94eSA9ICZ3b3JrZXJDb250ZXh0LT50aHJlYWQoKS0+d29ya2Vy
TG9hZGVyUHJveHkoKTsKLSAgICAgICAgTmV3V2ViV29ya2VyQmFzZSogd2ViV29ya2VyID0gc3Rh
dGljX2Nhc3Q8TmV3V2ViV29ya2VyQmFzZSo+KHdvcmtlckxvYWRlclByb3h5KTsKLSAgICAgICAg
aWYgKCFhbGxvd0ZpbGVTeXN0ZW1Gb3JXb3JrZXIod2ViV29ya2VyLT5uZXdDb21tb25DbGllbnQo
KSkpCisgICAgICAgIFdlYldvcmtlckJhc2UqIHdlYldvcmtlciA9IHN0YXRpY19jYXN0PFdlYldv
cmtlckJhc2UqPih3b3JrZXJMb2FkZXJQcm94eSk7CisgICAgICAgIGlmICghYWxsb3dGaWxlU3lz
dGVtRm9yV29ya2VyKHdlYldvcmtlci0+Y29tbW9uQ2xpZW50KCkpKQogICAgICAgICAgICAgYWxs
b3dlZCA9IGZhbHNlOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBvcGVuRmlsZVN5c3RlbUZv
cldvcmtlcih3ZWJXb3JrZXItPm5ld0NvbW1vbkNsaWVudCgpLCBzdGF0aWNfY2FzdDxXZWJGaWxl
U3lzdGVtOjpUeXBlPih0eXBlKSwgc2l6ZSwgY3JlYXRlID09IENyZWF0ZUlmTm90UHJlc2VudCwg
bmV3IFdlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsKGNhbGxiYWNrcywgdHlwZSwgY29udGV4dCwg
c3luY2hyb25vdXMpLCBzeW5jaHJvbm91cyk7CisgICAgICAgICAgICBvcGVuRmlsZVN5c3RlbUZv
cldvcmtlcih3ZWJXb3JrZXItPmNvbW1vbkNsaWVudCgpLCBzdGF0aWNfY2FzdDxXZWJGaWxlU3lz
dGVtOjpUeXBlPih0eXBlKSwgc2l6ZSwgY3JlYXRlID09IENyZWF0ZUlmTm90UHJlc2VudCwgbmV3
IFdlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsKGNhbGxiYWNrcywgdHlwZSwgY29udGV4dCwgc3lu
Y2hyb25vdXMpLCBzeW5jaHJvbm91cyk7CiAKICNlbHNlCiAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2hhcmVk
V29ya2VySW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTaGFyZWRXb3Jr
ZXJJbXBsLmNwcAppbmRleCAxNDQ1ZjhlLi4yMzFhYWFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJTaGFyZWRXb3JrZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJTaGFyZWRXb3JrZXJJbXBsLmNwcApAQCAtMzIsMzYgKzMyLDMw
MiBAQAogI2luY2x1ZGUgIldlYlNoYXJlZFdvcmtlckltcGwuaCIKIAogI2luY2x1ZGUgIkNyb3Nz
VGhyZWFkVGFzay5oIgorI2luY2x1ZGUgIkRhdGFiYXNlVGFzay5oIgorI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIk1lc3NhZ2VFdmVudC5oIgogI2lu
Y2x1ZGUgIk1lc3NhZ2VQb3J0Q2hhbm5lbC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTWVzc2FnZVBv
cnRDaGFubmVsLmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJTY3Jp
cHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiU2hhcmVkV29ya2VyQ29udGV4dC5oIgog
I2luY2x1ZGUgIlNoYXJlZFdvcmtlclRocmVhZC5oIgorI2luY2x1ZGUgIldlYkRhdGFTb3VyY2VJ
bXBsLmgiCisjaW5jbHVkZSAiV2ViRmlsZUVycm9yLmgiCisjaW5jbHVkZSAiV2ViRnJhbWVDbGll
bnQuaCIKKyNpbmNsdWRlICJXZWJGcmFtZUltcGwuaCIKKyNpbmNsdWRlICJXZWJNZXNzYWdlUG9y
dENoYW5uZWwuaCIKKyNpbmNsdWRlICJXZWJSdW50aW1lRmVhdHVyZXMuaCIKKyNpbmNsdWRlICJX
ZWJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIldlYlNoYXJlZFdvcmtlckNsaWVudC5oIgorI2luY2x1
ZGUgIldlYlZpZXcuaCIKKyNpbmNsdWRlICJXb3JrZXJDb250ZXh0LmgiCiAjaW5jbHVkZSAiV29y
a2VyRGVidWdnZXJBZ2VudC5oIgogI2luY2x1ZGUgIldvcmtlckluc3BlY3RvckNvbnRyb2xsZXIu
aCIKLQotI2luY2x1ZGUgIldlYk1lc3NhZ2VQb3J0Q2hhbm5lbC5oIgorI2luY2x1ZGUgIldvcmtl
ckxvYWRlclByb3h5LmgiCisjaW5jbHVkZSAiV29ya2VyVGhyZWFkLmgiCiAjaW5jbHVkZSAicGxh
dGZvcm0vV2ViU3RyaW5nLmgiCiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViVVJMLmgiCisjaW5jbHVk
ZSA8d3RmL01haW5UaHJlYWQuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVz
cGFjZSBXZWJLaXQgewogCiAjaWYgRU5BQkxFKFNIQVJFRF9XT1JLRVJTKQorLy8gVGhpcyBmdW5j
dGlvbiBpcyBjYWxsZWQgb24gdGhlIG1haW4gdGhyZWFkIHRvIGZvcmNlIHRvIGluaXRpYWxpemUg
c29tZSBzdGF0aWMKKy8vIHZhbHVlcyB1c2VkIGluIFdlYktpdCBiZWZvcmUgYW55IHdvcmtlciB0
aHJlYWQgaXMgc3RhcnRlZC4gVGhpcyBpcyBiZWNhdXNlIGluCisvLyBvdXIgd29ya2VyIHByb2Nl
c3NzLCB3ZSBkbyBub3QgcnVuIGFueSBXZWJLaXQgY29kZSBpbiBtYWluIHRocmVhZCBhbmQgdGh1
cworLy8gd2hlbiBtdWx0aXBsZSB3b3JrZXJzIHRyeSB0byBzdGFydCBhdCB0aGUgc2FtZSB0aW1l
LCB3ZSBtaWdodCBoaXQgY3Jhc2ggZHVlCisvLyB0byBjb250ZW50aW9uIGZvciBpbml0aWFsaXpp
bmcgc3RhdGljIHZhbHVlcy4KK3N0YXRpYyB2b2lkIGluaXRpYWxpemVXZWJLaXRTdGF0aWNWYWx1
ZXMoKQoreworICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVkID0gZmFsc2U7CisgICAgaWYgKCFp
bml0aWFsaXplZCkgeworICAgICAgICBpbml0aWFsaXplZCA9IHRydWU7CisgICAgICAgIC8vIE5v
dGUgdGhhdCB3ZSBoYXZlIHRvIHBhc3MgYSBVUkwgd2l0aCB2YWxpZCBwcm90b2NvbCBpbiBvcmRl
ciB0byBmb2xsb3cKKyAgICAgICAgLy8gdGhlIHBhdGggdG8gZG8gc3RhdGljIHZhbHVlIGluaXRp
YWxpemF0aW9ucy4KKyAgICAgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBvcmlnaW4gPQorICAg
ICAgICAgICAgU2VjdXJpdHlPcmlnaW46OmNyZWF0ZShLVVJMKFBhcnNlZFVSTFN0cmluZywgImh0
dHA6Ly9sb2NhbGhvc3QiKSk7CisgICAgICAgIG9yaWdpbi5yZWxlYXNlKCk7CisgICAgfQorfQog
Ci1XZWJTaGFyZWRXb3JrZXJJbXBsOjpXZWJTaGFyZWRXb3JrZXJJbXBsKFdlYkNvbW1vbldvcmtl
ckNsaWVudCogY2xpZW50KQotICAgIDogbV9jbGllbnQoY2xpZW50KQorV2ViU2hhcmVkV29ya2Vy
SW1wbDo6V2ViU2hhcmVkV29ya2VySW1wbChXZWJTaGFyZWRXb3JrZXJDbGllbnQqIGNsaWVudCkK
KyAgICA6IG1fd2ViVmlldygwKQorICAgICwgbV9hc2tlZFRvVGVybWluYXRlKGZhbHNlKQorICAg
ICwgbV9jbGllbnQoY2xpZW50KQogICAgICwgbV9wYXVzZVdvcmtlckNvbnRleHRPblN0YXJ0KGZh
bHNlKQogeworICAgIGluaXRpYWxpemVXZWJLaXRTdGF0aWNWYWx1ZXMoKTsKIH0KIAogV2ViU2hh
cmVkV29ya2VySW1wbDo6fldlYlNoYXJlZFdvcmtlckltcGwoKQogeworICAgIEFTU0VSVChtX3dl
YlZpZXcpOworICAgIFdlYkZyYW1lSW1wbCogd2ViRnJhbWUgPSBzdGF0aWNfY2FzdDxXZWJGcmFt
ZUltcGwqPihtX3dlYlZpZXctPm1haW5GcmFtZSgpKTsKKyAgICBpZiAod2ViRnJhbWUpCisgICAg
ICAgIHdlYkZyYW1lLT5zZXRDbGllbnQoMCk7CisgICAgbV93ZWJWaWV3LT5jbG9zZSgpOworfQor
Cit2b2lkIFdlYlNoYXJlZFdvcmtlckltcGw6OnN0b3BXb3JrZXJUaHJlYWQoKQoreworICAgIGlm
IChtX2Fza2VkVG9UZXJtaW5hdGUpCisgICAgICAgIHJldHVybjsKKyAgICBtX2Fza2VkVG9UZXJt
aW5hdGUgPSB0cnVlOworICAgIGlmIChtX3dvcmtlclRocmVhZCkKKyAgICAgICAgbV93b3JrZXJU
aHJlYWQtPnN0b3AoKTsKK30KKwordm9pZCBXZWJTaGFyZWRXb3JrZXJJbXBsOjppbml0aWFsaXpl
TG9hZGVyKGNvbnN0IFdlYlVSTCYgdXJsKQoreworICAgIC8vIENyZWF0ZSAnc2hhZG93IHBhZ2Un
LiBUaGlzIHBhZ2UgaXMgbmV2ZXIgZGlzcGxheWVkLCBpdCBpcyB1c2VkIHRvIHByb3h5IHRoZQor
ICAgIC8vIGxvYWRpbmcgcmVxdWVzdHMgZnJvbSB0aGUgd29ya2VyIGNvbnRleHQgdG8gdGhlIHJl
c3Qgb2YgV2ViS2l0IGFuZCBDaHJvbWl1bQorICAgIC8vIGluZnJhc3RydWN0dXJlLgorICAgIEFT
U0VSVCghbV93ZWJWaWV3KTsKKyAgICBtX3dlYlZpZXcgPSBXZWJWaWV3OjpjcmVhdGUoMCk7Cisg
ICAgbV93ZWJWaWV3LT5zZXR0aW5ncygpLT5zZXRPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZUVu
YWJsZWQoV2ViUnVudGltZUZlYXR1cmVzOjppc0FwcGxpY2F0aW9uQ2FjaGVFbmFibGVkKCkpOwor
ICAgIC8vIEZJWE1FOiBTZXR0aW5ncyBpbmZvcm1hdGlvbiBzaG91bGQgYmUgcGFzc2VkIHRvIHRo
ZSBXb3JrZXIgcHJvY2VzcyBmcm9tIEJyb3dzZXIgcHJvY2VzcyB3aGVuIHRoZSB3b3JrZXIKKyAg
ICAvLyBpcyBjcmVhdGVkIChzaW1pbGFyIHRvIFJlbmRlclRocmVhZDo6T25DcmVhdGVOZXdWaWV3
KS4KKyAgICBtX3dlYlZpZXctPnNldHRpbmdzKCktPnNldEhpeGllNzZXZWJTb2NrZXRQcm90b2Nv
bEVuYWJsZWQoZmFsc2UpOworICAgIG1fd2ViVmlldy0+aW5pdGlhbGl6ZU1haW5GcmFtZSh0aGlz
KTsKKworICAgIFdlYkZyYW1lSW1wbCogd2ViRnJhbWUgPSBzdGF0aWNfY2FzdDxXZWJGcmFtZUlt
cGwqPihtX3dlYlZpZXctPm1haW5GcmFtZSgpKTsKKworICAgIC8vIENvbnN0cnVjdCBzdWJzdGl0
dXRlIGRhdGEgc291cmNlIGZvciB0aGUgJ3NoYWRvdyBwYWdlJy4gV2Ugb25seSBuZWVkIGl0Cisg
ICAgLy8gdG8gaGF2ZSBzYW1lIG9yaWdpbiBhcyB0aGUgd29ya2VyIHNvIHRoZSBsb2FkaW5nIGNo
ZWNrcyB3b3JrIGNvcnJlY3RseS4KKyAgICBDU3RyaW5nIGNvbnRlbnQoIiIpOworICAgIGludCBs
ZW4gPSBzdGF0aWNfY2FzdDxpbnQ+KGNvbnRlbnQubGVuZ3RoKCkpOworICAgIFJlZlB0cjxTaGFy
ZWRCdWZmZXI+IGJ1ZihTaGFyZWRCdWZmZXI6OmNyZWF0ZShjb250ZW50LmRhdGEoKSwgbGVuKSk7
CisgICAgU3Vic3RpdHV0ZURhdGEgc3Vic3REYXRhKGJ1ZiwgU3RyaW5nKCJ0ZXh0L2h0bWwiKSwg
U3RyaW5nKCJVVEYtOCIpLCBLVVJMKCkpOworICAgIHdlYkZyYW1lLT5mcmFtZSgpLT5sb2FkZXIo
KS0+bG9hZChSZXNvdXJjZVJlcXVlc3QodXJsKSwgc3Vic3REYXRhLCBmYWxzZSk7CisKKyAgICAv
LyBUaGlzIGRvY3VtZW50IHdpbGwgYmUgdXNlZCBhcyAnbG9hZGluZyBjb250ZXh0JyBmb3IgdGhl
IHdvcmtlci4KKyAgICBtX2xvYWRpbmdEb2N1bWVudCA9IHdlYkZyYW1lLT5mcmFtZSgpLT5kb2N1
bWVudCgpOworfQorCit2b2lkIFdlYlNoYXJlZFdvcmtlckltcGw6OmRpZENyZWF0ZURhdGFTb3Vy
Y2UoV2ViRnJhbWUqLCBXZWJEYXRhU291cmNlKiBkcykKK3sKKyAgICAvLyBUZWxsIHRoZSBsb2Fk
ZXIgdG8gbG9hZCB0aGUgZGF0YSBpbnRvIHRoZSAnc2hhZG93IHBhZ2UnIHN5bmNocm9ub3VzbHks
CisgICAgLy8gc28gd2UgY2FuIGdyYWIgdGhlIHJlc3VsdGluZyBEb2N1bWVudCByaWdodCBhZnRl
ciBsb2FkLgorICAgIHN0YXRpY19jYXN0PFdlYkRhdGFTb3VyY2VJbXBsKj4oZHMpLT5zZXREZWZl
ck1haW5SZXNvdXJjZURhdGFMb2FkKGZhbHNlKTsKK30KKworV2ViQXBwbGljYXRpb25DYWNoZUhv
c3QqIFdlYlNoYXJlZFdvcmtlckltcGw6OmNyZWF0ZUFwcGxpY2F0aW9uQ2FjaGVIb3N0KFdlYkZy
YW1lKiwgV2ViQXBwbGljYXRpb25DYWNoZUhvc3RDbGllbnQqIGFwcGNhY2hlSG9zdENsaWVudCkK
K3sKKyAgICBpZiAoY2xpZW50KCkpCisgICAgICAgIHJldHVybiBjbGllbnQoKS0+Y3JlYXRlQXBw
bGljYXRpb25DYWNoZUhvc3QoYXBwY2FjaGVIb3N0Q2xpZW50KTsKKyAgICByZXR1cm4gMDsKK30K
KworLy8gV29ya2VyT2JqZWN0UHJveHkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordm9pZCBXZWJTaGFyZWRXb3JrZXJJbXBsOjpw
b3N0TWVzc2FnZVRvV29ya2VyT2JqZWN0KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiBtZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFBhc3NPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+IGNoYW5uZWxzKQorewor
ICAgIFdlYldvcmtlckJhc2U6OmRpc3BhdGNoVGFza1RvTWFpblRocmVhZChjcmVhdGVDYWxsYmFj
a1Rhc2soJnBvc3RNZXNzYWdlVGFzaywgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyh0aGlzKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UtPnRv
V2lyZVN0cmluZygpLCBjaGFubmVscykpOworfQorCit2b2lkIFdlYlNoYXJlZFdvcmtlckltcGw6
OnBvc3RNZXNzYWdlVGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViU2hhcmVkV29ya2VySW1wbCog
dGhpc1B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmlu
ZyBtZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFz
c093blB0cjxNZXNzYWdlUG9ydENoYW5uZWxBcnJheT4gY2hhbm5lbHMpCit7CisgICAgaWYgKCF0
aGlzUHRyLT5jbGllbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViTWVzc2FnZVBvcnRD
aGFubmVsQXJyYXkgd2ViQ2hhbm5lbHMoY2hhbm5lbHMgPyBjaGFubmVscy0+c2l6ZSgpIDogMCk7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3ZWJDaGFubmVscy5zaXplKCk7ICsraSkgewor
ICAgICAgICB3ZWJDaGFubmVsc1tpXSA9ICgqY2hhbm5lbHMpW2ldLT5jaGFubmVsKCktPndlYkNo
YW5uZWxSZWxlYXNlKCk7CisgICAgICAgIHdlYkNoYW5uZWxzW2ldLT5zZXRDbGllbnQoMCk7Cisg
ICAgfQorCisgICAgdGhpc1B0ci0+Y2xpZW50KCktPnBvc3RNZXNzYWdlVG9Xb3JrZXJPYmplY3Qo
bWVzc2FnZSwgd2ViQ2hhbm5lbHMpOworfQorCit2b2lkIFdlYlNoYXJlZFdvcmtlckltcGw6OnBv
c3RFeGNlcHRpb25Ub1dvcmtlck9iamVjdChjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBs
aW5lTnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpCit7CisgICAgV2ViV29ya2VyQmFzZTo6
ZGlzcGF0Y2hUYXNrVG9NYWluVGhyZWFkKAorICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJnBv
c3RFeGNlcHRpb25UYXNrLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHRoaXMpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlLCBsaW5lTnVtYmVyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc291cmNlVVJMKSk7Cit9CisKK3ZvaWQgV2ViU2hhcmVkV29ya2VySW1w
bDo6cG9zdEV4Y2VwdGlvblRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViU2hhcmVkV29ya2Vy
SW1wbCogdGhpc1B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVS
TCkKK3sKKyAgICBpZiAoIXRoaXNQdHItPmNsaWVudCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICB0aGlzUHRyLT5jbGllbnQoKS0+cG9zdEV4Y2VwdGlvblRvV29ya2VyT2JqZWN0KGVycm9yTWVz
c2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGxpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzb3VyY2VVUkwpOworfQorCit2b2lkIFdlYlNoYXJlZFdvcmtlckltcGw6OnBvc3RD
b25zb2xlTWVzc2FnZVRvV29ya2VyT2JqZWN0KE1lc3NhZ2VTb3VyY2Ugc291cmNlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNz
YWdlVHlwZSB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBNZXNzYWdlTGV2ZWwgbGV2ZWwsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgbWVz
c2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IGxpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgc291cmNlVVJMKQorewor
ICAgIFdlYldvcmtlckJhc2U6OmRpc3BhdGNoVGFza1RvTWFpblRocmVhZChjcmVhdGVDYWxsYmFj
a1Rhc2soJnBvc3RDb25zb2xlTWVzc2FnZVRhc2ssIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhp
cyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSwg
dHlwZSwgbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZVVSTCkpOworfQorCit2b2lkIFdlYlNoYXJlZFdv
cmtlckltcGw6OnBvc3RDb25zb2xlTWVzc2FnZVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBXZWJTaGFyZWRXb3JrZXJJbXBsKiB0aGlzUHRyLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzb3VyY2UsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHR5cGUsIGludCBsZXZlbCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcm
IG1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGxpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpCit7CisgICAgaWYgKCF0aGlzUHRy
LT5jbGllbnQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIHRoaXNQdHItPmNsaWVudCgpLT5wb3N0
Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdChzb3VyY2UsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUsIGxldmVsLCBt
ZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBsaW5lTnVtYmVyLCBzb3VyY2VVUkwpOworfQorCit2b2lkIFdlYlNoYXJl
ZFdvcmtlckltcGw6OnBvc3RNZXNzYWdlVG9QYWdlSW5zcGVjdG9yKGNvbnN0IFN0cmluZyYgbWVz
c2FnZSkKK3sKKyAgICBXZWJXb3JrZXJCYXNlOjpkaXNwYXRjaFRhc2tUb01haW5UaHJlYWQoY3Jl
YXRlQ2FsbGJhY2tUYXNrKCZwb3N0TWVzc2FnZVRvUGFnZUluc3BlY3RvclRhc2ssIEFsbG93Q3Jv
c3NUaHJlYWRBY2Nlc3ModGhpcyksIG1lc3NhZ2UpKTsKIH0KIAordm9pZCBXZWJTaGFyZWRXb3Jr
ZXJJbXBsOjpwb3N0TWVzc2FnZVRvUGFnZUluc3BlY3RvclRhc2soU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFdlYlNoYXJlZFdvcmtlckltcGwqIHRoaXNQdHIsIGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSkKK3sKKyAgICBpZiAoIXRoaXNQdHItPmNsaWVudCgpKQorICAgICAgICByZXR1cm47CisgICAg
dGhpc1B0ci0+Y2xpZW50KCktPmRpc3BhdGNoRGV2VG9vbHNNZXNzYWdlKG1lc3NhZ2UpOworfQor
Cit2b2lkIFdlYlNoYXJlZFdvcmtlckltcGw6OnVwZGF0ZUluc3BlY3RvclN0YXRlQ29va2llKGNv
bnN0IFdURjo6U3RyaW5nJiBjb29raWUpCit7CisgICAgV2ViV29ya2VyQmFzZTo6ZGlzcGF0Y2hU
YXNrVG9NYWluVGhyZWFkKGNyZWF0ZUNhbGxiYWNrVGFzaygmdXBkYXRlSW5zcGVjdG9yU3RhdGVD
b29raWVUYXNrLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHRoaXMpLCBjb29raWUpKTsKK30KKwor
dm9pZCBXZWJTaGFyZWRXb3JrZXJJbXBsOjp1cGRhdGVJbnNwZWN0b3JTdGF0ZUNvb2tpZVRhc2so
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYlNoYXJlZFdvcmtlckltcGwqIHRoaXNQdHIsIGNv
bnN0IFN0cmluZyYgY29va2llKQoreworICAgIGlmICghdGhpc1B0ci0+Y2xpZW50KCkpCisgICAg
ICAgIHJldHVybjsKKyAgICB0aGlzUHRyLT5jbGllbnQoKS0+c2F2ZURldlRvb2xzQWdlbnRTdGF0
ZShjb29raWUpOworfQorCit2b2lkIFdlYlNoYXJlZFdvcmtlckltcGw6OmNvbmZpcm1NZXNzYWdl
RnJvbVdvcmtlck9iamVjdChib29sIGhhc1BlbmRpbmdBY3Rpdml0eSkKK3sKKyAgICBXZWJXb3Jr
ZXJCYXNlOjpkaXNwYXRjaFRhc2tUb01haW5UaHJlYWQoY3JlYXRlQ2FsbGJhY2tUYXNrKCZjb25m
aXJtTWVzc2FnZVRhc2ssIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcyksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc1BlbmRpbmdBY3Rpdml0eSkpOwor
fQorCit2b2lkIFdlYlNoYXJlZFdvcmtlckltcGw6OmNvbmZpcm1NZXNzYWdlVGFzayhTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgV2ViU2hhcmVkV29ya2VySW1wbCogdGhpc1B0ciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5
KQoreworICAgIGlmICghdGhpc1B0ci0+Y2xpZW50KCkpCisgICAgICAgIHJldHVybjsKKyAgICB0
aGlzUHRyLT5jbGllbnQoKS0+Y29uZmlybU1lc3NhZ2VGcm9tV29ya2VyT2JqZWN0KGhhc1BlbmRp
bmdBY3Rpdml0eSk7Cit9CisKK3ZvaWQgV2ViU2hhcmVkV29ya2VySW1wbDo6cmVwb3J0UGVuZGlu
Z0FjdGl2aXR5KGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KQoreworICAgIFdlYldvcmtlckJhc2U6
OmRpc3BhdGNoVGFza1RvTWFpblRocmVhZChjcmVhdGVDYWxsYmFja1Rhc2soJnJlcG9ydFBlbmRp
bmdBY3Rpdml0eVRhc2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcyksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGhhc1BlbmRpbmdBY3Rpdml0eSkpOworfQorCit2b2lkIFdl
YlNoYXJlZFdvcmtlckltcGw6OnJlcG9ydFBlbmRpbmdBY3Rpdml0eVRhc2soU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBXZWJTaGFyZWRXb3JrZXJJbXBsKiB0aGlzUHRyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaGFzUGVuZGlu
Z0FjdGl2aXR5KQoreworICAgIGlmICghdGhpc1B0ci0+Y2xpZW50KCkpCisgICAgICAgIHJldHVy
bjsKKyAgICB0aGlzUHRyLT5jbGllbnQoKS0+cmVwb3J0UGVuZGluZ0FjdGl2aXR5KGhhc1BlbmRp
bmdBY3Rpdml0eSk7Cit9CisKK3ZvaWQgV2ViU2hhcmVkV29ya2VySW1wbDo6d29ya2VyQ29udGV4
dENsb3NlZCgpCit7CisgICAgV2ViV29ya2VyQmFzZTo6ZGlzcGF0Y2hUYXNrVG9NYWluVGhyZWFk
KGNyZWF0ZUNhbGxiYWNrVGFzaygmd29ya2VyQ29udGV4dENsb3NlZFRhc2ssCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3Mo
dGhpcykpKTsKK30KKwordm9pZCBXZWJTaGFyZWRXb3JrZXJJbXBsOjp3b3JrZXJDb250ZXh0Q2xv
c2VkVGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJTaGFyZWRXb3JrZXJJbXBsKiB0
aGlzUHRyKQoreworICAgIGlmICh0aGlzUHRyLT5jbGllbnQoKSkKKyAgICAgICAgdGhpc1B0ci0+
Y2xpZW50KCktPndvcmtlckNvbnRleHRDbG9zZWQoKTsKKworICAgIHRoaXNQdHItPnN0b3BXb3Jr
ZXJUaHJlYWQoKTsKK30KKwordm9pZCBXZWJTaGFyZWRXb3JrZXJJbXBsOjp3b3JrZXJDb250ZXh0
RGVzdHJveWVkKCkKK3sKKyAgICBXZWJXb3JrZXJCYXNlOjpkaXNwYXRjaFRhc2tUb01haW5UaHJl
YWQoY3JlYXRlQ2FsbGJhY2tUYXNrKCZ3b3JrZXJDb250ZXh0RGVzdHJveWVkVGFzaywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcykpKTsKK30KKwordm9pZCBXZWJTaGFyZWRXb3Jr
ZXJJbXBsOjp3b3JrZXJDb250ZXh0RGVzdHJveWVkVGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBXZWJTaGFyZWRXb3JrZXJJbXBsKiB0aGlzUHRyKQoreworICAgIGlmICh0aGlzUHRy
LT5jbGllbnQoKSkKKyAgICAgICAgdGhpc1B0ci0+Y2xpZW50KCktPndvcmtlckNvbnRleHREZXN0
cm95ZWQoKTsKKyAgICAvLyBUaGUgbGlmZXRpbWUgb2YgdGhpcyBwcm94eSBpcyBjb250cm9sbGVk
IGJ5IHRoZSB3b3JrZXIgY29udGV4dC4KKyAgICBkZWxldGUgdGhpc1B0cjsKK30KKworLy8gV29y
a2VyTG9hZGVyUHJveHkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKwordm9pZCBXZWJTaGFyZWRXb3JrZXJJbXBsOjpwb3N0VGFza1Rv
TG9hZGVyKFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gdGFzaykKK3sK
KyAgICBBU1NFUlQobV9sb2FkaW5nRG9jdW1lbnQtPmlzRG9jdW1lbnQoKSk7CisgICAgbV9sb2Fk
aW5nRG9jdW1lbnQtPnBvc3RUYXNrKHRhc2spOworfQorCit2b2lkIFdlYlNoYXJlZFdvcmtlcklt
cGw6OnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyQ29udGV4dCgKKyAgICBQYXNzT3duUHRyPFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2ssIGNvbnN0IFN0cmluZyYgbW9kZSkKK3sKKyAg
ICBtX3dvcmtlclRocmVhZC0+cnVuTG9vcCgpLnBvc3RUYXNrRm9yTW9kZSh0YXNrLCBtb2RlKTsK
K30KKworCisKIGJvb2wgV2ViU2hhcmVkV29ya2VySW1wbDo6aXNTdGFydGVkKCkKIHsKICAgICAv
LyBTaG91bGQgbm90IGV2ZXIgYmUgY2FsbGVkIGZyb20gdGhlIHdvcmtlciB0aHJlYWQgKHRoaXMg
QVBJIGlzIG9ubHkgY2FsbGVkIG9uIFdlYlNoYXJlZFdvcmtlclByb3h5IG9uIHRoZSByZW5kZXJl
ciB0aHJlYWQpLgpAQCAtMTc3LDE5ICs0NDMsMTAgQEAgdm9pZCBXZWJTaGFyZWRXb3JrZXJJbXBs
OjpkaXNwYXRjaERldlRvb2xzTWVzc2FnZShjb25zdCBXZWJTdHJpbmcmIG1lc3NhZ2UpCiAgICAg
d29ya2VyVGhyZWFkKCktPnJ1bkxvb3AoKS5wb3N0VGFza0Zvck1vZGUoY3JlYXRlQ2FsbGJhY2tU
YXNrKGRpc3BhdGNoT25JbnNwZWN0b3JCYWNrZW5kVGFzaywgU3RyaW5nKG1lc3NhZ2UpKSwgV29y
a2VyRGVidWdnZXJBZ2VudDo6ZGVidWdnZXJUYXNrTW9kZSk7CiB9CiAKLVdlYldvcmtlckNsaWVu
dCogV2ViU2hhcmVkV29ya2VySW1wbDo6Y2xpZW50KCkKLXsKLSAgICAvLyBXZSBzaG91bGQgbmV2
ZXIgYmUgYXNrZWQgZm9yIGEgV2ViV29ya2VyQ2xpZW50IChvbmx5IGRlZGljYXRlZCB3b3JrZXJz
IGhhdmUgYW4gYXNzb2NpYXRlZCBXZWJXb3JrZXJDbGllbnQpLgotICAgIC8vIEl0IHNob3VsZCBu
b3QgYmUgcG9zc2libGUgZm9yIFNoYXJlZFdvcmtlckNvbnRleHQgdG8gZ2VuZXJhdGUgYW4gQVBJ
IGNhbGwgb3V0c2lkZSB0aG9zZSBzdXBwb3J0ZWQgYnkgV2ViQ29tbW9uV29ya2VyQ2xpZW50Lgot
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAwOwotfQotCi1XZWJTaGFyZWRX
b3JrZXIqIFdlYlNoYXJlZFdvcmtlcjo6Y3JlYXRlKFdlYkNvbW1vbldvcmtlckNsaWVudCogY2xp
ZW50KQorV2ViU2hhcmVkV29ya2VyKiBXZWJTaGFyZWRXb3JrZXI6OmNyZWF0ZShXZWJTaGFyZWRX
b3JrZXJDbGllbnQqIGNsaWVudCkKIHsKICAgICByZXR1cm4gbmV3IFdlYlNoYXJlZFdvcmtlcklt
cGwoY2xpZW50KTsKIH0KLQogI2VuZGlmIC8vIEVOQUJMRShTSEFSRURfV09SS0VSUykKIAogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJTaGFyZWRXb3JrZXJJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJT
aGFyZWRXb3JrZXJJbXBsLmgKaW5kZXggNDM3YmIyYi4uODNkMzYxYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2hhcmVkV29ya2VySW1wbC5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNoYXJlZFdvcmtlckltcGwuaApAQCAtMzQsMjAgKzM0
LDY0IEBACiAjaW5jbHVkZSAiV2ViU2hhcmVkV29ya2VyLmgiCiAKICNpZiBFTkFCTEUoU0hBUkVE
X1dPUktFUlMpCi0KICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCi0KKyNpbmNs
dWRlICJXZWJDb21tb25Xb3JrZXJDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJGcmFtZUNsaWVudC5o
IgogI2luY2x1ZGUgIldlYldvcmtlckJhc2UuaCIKKyNpbmNsdWRlICJXZWJXb3JrZXJDbGllbnQu
aCIKKyNpbmNsdWRlICJXb3JrZXJMb2FkZXJQcm94eS5oIgorI2luY2x1ZGUgIldvcmtlck9iamVj
dFByb3h5LmgiCisjaW5jbHVkZSAiV29ya2VyVGhyZWFkLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NP
d25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKLW5hbWVzcGFjZSBXZWJLaXQgewog
CituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYkFwcGxpY2F0aW9uQ2FjaGVIb3N0OworY2xh
c3MgV2ViQXBwbGljYXRpb25DYWNoZUhvc3RDbGllbnQ7CitjbGFzcyBXZWJXb3JrZXJDbGllbnQ7
CitjbGFzcyBXZWJTZWN1cml0eU9yaWdpbjsKK2NsYXNzIFdlYlN0cmluZzsKK2NsYXNzIFdlYlVS
TDsKK2NsYXNzIFdlYlZpZXc7CitjbGFzcyBXZWJXb3JrZXI7CitjbGFzcyBXZWJTaGFyZWRXb3Jr
ZXJDbGllbnQ7CiAvLyBUaGlzIGNsYXNzIGlzIHVzZWQgYnkgdGhlIHdvcmtlciBwcm9jZXNzIGNv
ZGUgdG8gdGFsayB0byB0aGUgV2ViQ29yZTo6U2hhcmVkV29ya2VyIGltcGxlbWVudGF0aW9uLgog
Ly8gSXQgY2FuJ3QgdXNlIGl0IGRpcmVjdGx5IHNpbmNlIGl0IHVzZXMgV2ViS2l0IHR5cGVzLCBz
byB0aGlzIGNsYXNzIGNvbnZlcnRzIHRoZSBkYXRhIHR5cGVzLgogLy8gV2hlbiB0aGUgV2ViQ29y
ZTo6U2hhcmVkV29ya2VyIG9iamVjdCB3YW50cyB0byBjYWxsIFdlYkNvcmU6OldvcmtlclJlcG9y
dGluZ1Byb3h5LCB0aGlzIGNsYXNzIHdpbGwKIC8vIGNvbnZlcnQgdG8gQ2hyb21lIGRhdGEgdHlw
ZXMgZmlyc3QgYW5kIHRoZW4gY2FsbCB0aGUgc3VwcGxpZWQgV2ViQ29tbW9uV29ya2VyQ2xpZW50
LgotY2xhc3MgV2ViU2hhcmVkV29ya2VySW1wbCA6IHB1YmxpYyBXZWJXb3JrZXJCYXNlLCBwdWJs
aWMgV2ViU2hhcmVkV29ya2VyIHsKK2NsYXNzIFdlYlNoYXJlZFdvcmtlckltcGwgOiBwdWJsaWMg
V2ViQ29yZTo6V29ya2VyT2JqZWN0UHJveHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLCBw
dWJsaWMgV2ViV29ya2VyQmFzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBX
ZWJGcmFtZUNsaWVudAorICAgICAgICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBXZWJTaGFy
ZWRXb3JrZXIgewogcHVibGljOgotICAgIGV4cGxpY2l0IFdlYlNoYXJlZFdvcmtlckltcGwoV2Vi
Q29tbW9uV29ya2VyQ2xpZW50KiBjbGllbnQpOworICAgIGV4cGxpY2l0IFdlYlNoYXJlZFdvcmtl
ckltcGwoV2ViU2hhcmVkV29ya2VyQ2xpZW50Kik7CisKKyAgICB2aXJ0dWFsIHZvaWQgcG9zdE1l
c3NhZ2VUb1dvcmtlck9iamVjdCgKKyAgICAgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpTZXJpYWxp
emVkU2NyaXB0VmFsdWU+LAorICAgICAgICBQYXNzT3duUHRyPFdlYkNvcmU6Ok1lc3NhZ2VQb3J0
Q2hhbm5lbEFycmF5Pik7CisgICAgdmlydHVhbCB2b2lkIHBvc3RFeGNlcHRpb25Ub1dvcmtlck9i
amVjdCgKKyAgICAgICAgY29uc3QgV1RGOjpTdHJpbmcmLCBpbnQsIGNvbnN0IFdURjo6U3RyaW5n
Jik7CisgICAgdmlydHVhbCB2b2lkIHBvc3RDb25zb2xlTWVzc2FnZVRvV29ya2VyT2JqZWN0KAor
ICAgICAgICBXZWJDb3JlOjpNZXNzYWdlU291cmNlLCBXZWJDb3JlOjpNZXNzYWdlVHlwZSwKKyAg
ICAgICAgV2ViQ29yZTo6TWVzc2FnZUxldmVsLCBjb25zdCBXVEY6OlN0cmluZyYsIGludCwgY29u
c3QgV1RGOjpTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcG9zdE1lc3NhZ2VUb1BhZ2VJbnNw
ZWN0b3IoY29uc3QgV1RGOjpTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlSW5zcGVj
dG9yU3RhdGVDb29raWUoY29uc3QgV1RGOjpTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29u
ZmlybU1lc3NhZ2VGcm9tV29ya2VyT2JqZWN0KGJvb2wpOworICAgIHZpcnR1YWwgdm9pZCByZXBv
cnRQZW5kaW5nQWN0aXZpdHkoYm9vbCk7CisgICAgdmlydHVhbCB2b2lkIHdvcmtlckNvbnRleHRD
bG9zZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgd29ya2VyQ29udGV4dERlc3Ryb3llZCgpOworICAg
IHZpcnR1YWwgV2ViVmlldyogdmlldygpIGNvbnN0IHsgcmV0dXJuIG1fd2ViVmlldzsgfQorCisg
ICAgLy8gV2ViQ29yZTo6V29ya2VyTG9hZGVyUHJveHkgbWV0aG9kczoKKyAgICB2aXJ0dWFsIHZv
aWQgcG9zdFRhc2tUb0xvYWRlcihQYXNzT3duUHRyPFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ6OlRhc2s+KTsKKyAgICB2aXJ0dWFsIHZvaWQgcG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJD
b250ZXh0KAorICAgICAgICBQYXNzT3duUHRyPFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQ6OlRhc2s+LCBjb25zdCBXVEY6OlN0cmluZyYgbW9kZSk7CisKKyAgICAvLyBXZWJGcmFtZUNs
aWVudCBtZXRob2RzIHRvIHN1cHBvcnQgcmVzb3VyY2UgbG9hZGluZyB0aHJ1IHRoZSAnc2hhZG93
IHBhZ2UnLgorICAgIHZpcnR1YWwgdm9pZCBkaWRDcmVhdGVEYXRhU291cmNlKFdlYkZyYW1lKiwg
V2ViRGF0YVNvdXJjZSopOworICAgIHZpcnR1YWwgV2ViQXBwbGljYXRpb25DYWNoZUhvc3QqIGNy
ZWF0ZUFwcGxpY2F0aW9uQ2FjaGVIb3N0KFdlYkZyYW1lKiwgV2ViQXBwbGljYXRpb25DYWNoZUhv
c3RDbGllbnQqKTsKKwogCiAgICAgLy8gV2ViU2hhcmVkV29ya2VyIG1ldGhvZHM6CiAgICAgdmly
dHVhbCBib29sIGlzU3RhcnRlZCgpOwpAQCAtNjMsMTkgKzEwNyw3MiBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCB2b2lkIGRldGFjaERldlRvb2xzKCk7CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNo
RGV2VG9vbHNNZXNzYWdlKGNvbnN0IFdlYlN0cmluZyYpOwogCi0gICAgLy8gV2ViV29ya2VyQmFz
ZSBtZXRob2RzOgotICAgIFdlYldvcmtlckNsaWVudCogY2xpZW50KCk7Ci0gICAgV2ViQ29tbW9u
V29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQoKSB7IHJldHVybiBtX2NsaWVudDsgfQogCiAgICAg
Ly8gTmV3V2ViV29ya2VyQmFzZSBtZXRob2RzOgotICAgIE5ld1dlYkNvbW1vbldvcmtlckNsaWVu
dCogbmV3Q29tbW9uQ2xpZW50KCkgeyByZXR1cm4gbV9jbGllbnQ7IH0KKyAgICBXZWJDb21tb25X
b3JrZXJDbGllbnQqIGNvbW1vbkNsaWVudCgpIHsgcmV0dXJuIG1fY2xpZW50OyB9CiAKIHByaXZh
dGU6CiAgICAgdmlydHVhbCB+V2ViU2hhcmVkV29ya2VySW1wbCgpOwogCi0gICAgc3RhdGljIHZv
aWQgY29ubmVjdFRhc2soV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NPd25Q
dHI8V2ViQ29yZTo6TWVzc2FnZVBvcnRDaGFubmVsPik7CisgICAgV2ViU2hhcmVkV29ya2VyQ2xp
ZW50KiBjbGllbnQoKSB7IHJldHVybiBtX2NsaWVudDsgfQorCisgICAgdm9pZCBzZXRXb3JrZXJU
aHJlYWQoUGFzc1JlZlB0cjxXZWJDb3JlOjpXb3JrZXJUaHJlYWQ+IHRocmVhZCkgeyBtX3dvcmtl
clRocmVhZCA9IHRocmVhZDsgfQorICAgIFdlYkNvcmU6OldvcmtlclRocmVhZCogd29ya2VyVGhy
ZWFkKCkgeyByZXR1cm4gbV93b3JrZXJUaHJlYWQuZ2V0KCk7IH0KKworICAgIC8vIFNodXRzIGRv
d24gdGhlIHdvcmtlciB0aHJlYWQuCisgICAgdm9pZCBzdG9wV29ya2VyVGhyZWFkKCk7CiAKLSAg
ICBXZWJDb21tb25Xb3JrZXJDbGllbnQqIG1fY2xpZW50OworICAgIC8vIENyZWF0ZXMgdGhlIHNo
YWRvdyBsb2FkZXIgdXNlZCBmb3Igd29ya2VyIG5ldHdvcmsgcmVxdWVzdHMuCisgICAgdm9pZCBp
bml0aWFsaXplTG9hZGVyKGNvbnN0IFdlYlVSTCYpOworCisKKyAgICBzdGF0aWMgdm9pZCBjb25u
ZWN0VGFzayhXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc093blB0cjxXZWJD
b3JlOjpNZXNzYWdlUG9ydENoYW5uZWw+KTsKKyAgICAvLyBUYXNrcyB0aGF0IGFyZSBydW4gb24g
dGhlIG1haW4gdGhyZWFkLgorICAgIHN0YXRpYyB2b2lkIHBvc3RNZXNzYWdlVGFzaygKKyAgICAg
ICAgV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosCisgICAgICAgIFdlYlNoYXJlZFdv
cmtlckltcGwqIHRoaXNQdHIsCisgICAgICAgIFdURjo6U3RyaW5nIG1lc3NhZ2UsCisgICAgICAg
IFBhc3NPd25QdHI8V2ViQ29yZTo6TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+IGNoYW5uZWxzKTsK
KyAgICBzdGF0aWMgdm9pZCBwb3N0RXhjZXB0aW9uVGFzaygKKyAgICAgICAgV2ViQ29yZTo6U2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosCisgICAgICAgIFdlYlNoYXJlZFdvcmtlckltcGwqIHRoaXNQ
dHIsCisgICAgICAgIGNvbnN0IFdURjo6U3RyaW5nJiBtZXNzYWdlLAorICAgICAgICBpbnQgbGlu
ZU51bWJlciwKKyAgICAgICAgY29uc3QgV1RGOjpTdHJpbmcmIHNvdXJjZVVSTCk7CisgICAgc3Rh
dGljIHZvaWQgcG9zdENvbnNvbGVNZXNzYWdlVGFzaygKKyAgICAgICAgV2ViQ29yZTo6U2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosCisgICAgICAgIFdlYlNoYXJlZFdvcmtlckltcGwqIHRoaXNQdHIs
CisgICAgICAgIGludCBzb3VyY2UsCisgICAgICAgIGludCB0eXBlLAorICAgICAgICBpbnQgbGV2
ZWwsCisgICAgICAgIGNvbnN0IFdURjo6U3RyaW5nJiBtZXNzYWdlLAorICAgICAgICBpbnQgbGlu
ZU51bWJlciwKKyAgICAgICAgY29uc3QgV1RGOjpTdHJpbmcmIHNvdXJjZVVSTCk7CisgICAgc3Rh
dGljIHZvaWQgcG9zdE1lc3NhZ2VUb1BhZ2VJbnNwZWN0b3JUYXNrKFdlYkNvcmU6OlNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBXZWJTaGFyZWRXb3JrZXJJbXBsKiwgY29uc3QgV1RGOjpTdHJpbmcm
KTsKKyAgICBzdGF0aWMgdm9pZCB1cGRhdGVJbnNwZWN0b3JTdGF0ZUNvb2tpZVRhc2soV2ViQ29y
ZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYlNoYXJlZFdvcmtlckltcGwqIHRoaXNQdHIs
IGNvbnN0IFdURjo6U3RyaW5nJiBjb29raWUpOworICAgIHN0YXRpYyB2b2lkIGNvbmZpcm1NZXNz
YWdlVGFzaygKKyAgICAgICAgV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosCisgICAg
ICAgIFdlYlNoYXJlZFdvcmtlckltcGwqIHRoaXNQdHIsCisgICAgICAgIGJvb2wgaGFzUGVuZGlu
Z0FjdGl2aXR5KTsKKyAgICBzdGF0aWMgdm9pZCByZXBvcnRQZW5kaW5nQWN0aXZpdHlUYXNrKAor
ICAgICAgICBXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwKKyAgICAgICAgV2ViU2hh
cmVkV29ya2VySW1wbCogdGhpc1B0ciwKKyAgICAgICAgYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkp
OworICAgIHN0YXRpYyB2b2lkIHdvcmtlckNvbnRleHRDbG9zZWRUYXNrKAorICAgICAgICBXZWJD
b3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwKKyAgICAgICAgV2ViU2hhcmVkV29ya2VySW1w
bCogdGhpc1B0cik7CisgICAgc3RhdGljIHZvaWQgd29ya2VyQ29udGV4dERlc3Ryb3llZFRhc2so
CisgICAgICAgIFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLAorICAgICAgICBXZWJT
aGFyZWRXb3JrZXJJbXBsKiB0aGlzUHRyKTsKKworICAgIC8vICdzaGFkb3cgcGFnZScgLSBjcmVh
dGVkIHRvIHByb3h5IGxvYWRpbmcgcmVxdWVzdHMgZnJvbSB0aGUgd29ya2VyLgorICAgIFJlZlB0
cjxXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0PiBtX2xvYWRpbmdEb2N1bWVudDsKKyAg
ICBXZWJWaWV3KiBtX3dlYlZpZXc7CisgICAgYm9vbCBtX2Fza2VkVG9UZXJtaW5hdGU7CisKKyAg
ICBSZWZQdHI8V2ViQ29yZTo6V29ya2VyVGhyZWFkPiBtX3dvcmtlclRocmVhZDsKKworICAgIFdl
YlNoYXJlZFdvcmtlckNsaWVudCogbV9jbGllbnQ7CiAgICAgYm9vbCBtX3BhdXNlV29ya2VyQ29u
dGV4dE9uU3RhcnQ7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJXb3JrZXJCYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtl
ckJhc2UuY3BwCmluZGV4IDkzZjg0MGMuLmIxMmRiN2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYldvcmtlckJhc2UuY3BwCkBAIC0zMiwyMCArMzIsNyBAQAogI2luY2x1ZGUg
IldlYldvcmtlckJhc2UuaCIKIAogI2luY2x1ZGUgIkNyb3NzVGhyZWFkVGFzay5oIgotI2luY2x1
ZGUgIkRhdGFiYXNlVGFzay5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiTWVz
c2FnZVBvcnRDaGFubmVsLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwu
aCIKLSNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogCi0jaW5jbHVkZSAiV2ViRGF0YVNvdXJj
ZUltcGwuaCIKLSNpbmNsdWRlICJXZWJGaWxlRXJyb3IuaCIKLSNpbmNsdWRlICJXZWJGcmFtZUNs
aWVudC5oIgotI2luY2x1ZGUgIldlYkZyYW1lSW1wbC5oIgotI2luY2x1ZGUgIldlYk1lc3NhZ2VQ
b3J0Q2hhbm5lbC5oIgotI2luY2x1ZGUgIldlYlJ1bnRpbWVGZWF0dXJlcy5oIgotI2luY2x1ZGUg
IldlYlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiV2ViVmlldy5oIgogI2luY2x1ZGUgIldlYldvcmtl
ckNsaWVudC5oIgogCiAjaW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgpAQCAtNTksODIgKzQ2LDcg
QEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKICNpZiBFTkFCTEUoV09SS0VSUykKIAotLy8gVGhpcyBm
dW5jdGlvbiBpcyBjYWxsZWQgb24gdGhlIG1haW4gdGhyZWFkIHRvIGZvcmNlIHRvIGluaXRpYWxp
emUgc29tZSBzdGF0aWMKLS8vIHZhbHVlcyB1c2VkIGluIFdlYktpdCBiZWZvcmUgYW55IHdvcmtl
ciB0aHJlYWQgaXMgc3RhcnRlZC4gVGhpcyBpcyBiZWNhdXNlIGluCi0vLyBvdXIgd29ya2VyIHBy
b2Nlc3NzLCB3ZSBkbyBub3QgcnVuIGFueSBXZWJLaXQgY29kZSBpbiBtYWluIHRocmVhZCBhbmQg
dGh1cwotLy8gd2hlbiBtdWx0aXBsZSB3b3JrZXJzIHRyeSB0byBzdGFydCBhdCB0aGUgc2FtZSB0
aW1lLCB3ZSBtaWdodCBoaXQgY3Jhc2ggZHVlCi0vLyB0byBjb250ZW50aW9uIGZvciBpbml0aWFs
aXppbmcgc3RhdGljIHZhbHVlcy4KLXN0YXRpYyB2b2lkIGluaXRpYWxpemVXZWJLaXRTdGF0aWNW
YWx1ZXMoKQotewotICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVkID0gZmFsc2U7Ci0gICAgaWYg
KCFpbml0aWFsaXplZCkgewotICAgICAgICBpbml0aWFsaXplZCA9IHRydWU7Ci0gICAgICAgIC8v
IE5vdGUgdGhhdCB3ZSBoYXZlIHRvIHBhc3MgYSBVUkwgd2l0aCB2YWxpZCBwcm90b2NvbCBpbiBv
cmRlciB0byBmb2xsb3cKLSAgICAgICAgLy8gdGhlIHBhdGggdG8gZG8gc3RhdGljIHZhbHVlIGlu
aXRpYWxpemF0aW9ucy4KLSAgICAgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBvcmlnaW4gPQot
ICAgICAgICAgICAgU2VjdXJpdHlPcmlnaW46OmNyZWF0ZShLVVJMKFBhcnNlZFVSTFN0cmluZywg
Imh0dHA6Ly9sb2NhbGhvc3QiKSk7Ci0gICAgICAgIG9yaWdpbi5yZWxlYXNlKCk7Ci0gICAgfQot
fQotCi1XZWJXb3JrZXJCYXNlOjpXZWJXb3JrZXJCYXNlKCkKLSAgICA6IG1fd2ViVmlldygwKQot
ICAgICwgbV9hc2tlZFRvVGVybWluYXRlKGZhbHNlKQotewotICAgIGluaXRpYWxpemVXZWJLaXRT
dGF0aWNWYWx1ZXMoKTsKLX0KLQotV2ViV29ya2VyQmFzZTo6fldlYldvcmtlckJhc2UoKQotewot
ICAgIEFTU0VSVChtX3dlYlZpZXcpOwotICAgIFdlYkZyYW1lSW1wbCogd2ViRnJhbWUgPSBzdGF0
aWNfY2FzdDxXZWJGcmFtZUltcGwqPihtX3dlYlZpZXctPm1haW5GcmFtZSgpKTsKLSAgICBpZiAo
d2ViRnJhbWUpCi0gICAgICAgIHdlYkZyYW1lLT5zZXRDbGllbnQoMCk7Ci0gICAgbV93ZWJWaWV3
LT5jbG9zZSgpOwotfQotCi12b2lkIFdlYldvcmtlckJhc2U6OnN0b3BXb3JrZXJUaHJlYWQoKQot
ewotICAgIGlmIChtX2Fza2VkVG9UZXJtaW5hdGUpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2Fz
a2VkVG9UZXJtaW5hdGUgPSB0cnVlOwotICAgIGlmIChtX3dvcmtlclRocmVhZCkKLSAgICAgICAg
bV93b3JrZXJUaHJlYWQtPnN0b3AoKTsKLX0KLQotdm9pZCBXZWJXb3JrZXJCYXNlOjppbml0aWFs
aXplTG9hZGVyKGNvbnN0IFdlYlVSTCYgdXJsKQotewotICAgIC8vIENyZWF0ZSAnc2hhZG93IHBh
Z2UnLiBUaGlzIHBhZ2UgaXMgbmV2ZXIgZGlzcGxheWVkLCBpdCBpcyB1c2VkIHRvIHByb3h5IHRo
ZQotICAgIC8vIGxvYWRpbmcgcmVxdWVzdHMgZnJvbSB0aGUgd29ya2VyIGNvbnRleHQgdG8gdGhl
IHJlc3Qgb2YgV2ViS2l0IGFuZCBDaHJvbWl1bQotICAgIC8vIGluZnJhc3RydWN0dXJlLgotICAg
IEFTU0VSVCghbV93ZWJWaWV3KTsKLSAgICBtX3dlYlZpZXcgPSBXZWJWaWV3OjpjcmVhdGUoMCk7
Ci0gICAgbV93ZWJWaWV3LT5zZXR0aW5ncygpLT5zZXRPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNo
ZUVuYWJsZWQoV2ViUnVudGltZUZlYXR1cmVzOjppc0FwcGxpY2F0aW9uQ2FjaGVFbmFibGVkKCkp
OwotICAgIC8vIEZJWE1FOiBTZXR0aW5ncyBpbmZvcm1hdGlvbiBzaG91bGQgYmUgcGFzc2VkIHRv
IHRoZSBXb3JrZXIgcHJvY2VzcyBmcm9tIEJyb3dzZXIgcHJvY2VzcyB3aGVuIHRoZSB3b3JrZXIK
LSAgICAvLyBpcyBjcmVhdGVkIChzaW1pbGFyIHRvIFJlbmRlclRocmVhZDo6T25DcmVhdGVOZXdW
aWV3KS4KLSAgICBtX3dlYlZpZXctPnNldHRpbmdzKCktPnNldEhpeGllNzZXZWJTb2NrZXRQcm90
b2NvbEVuYWJsZWQoZmFsc2UpOwotICAgIG1fd2ViVmlldy0+aW5pdGlhbGl6ZU1haW5GcmFtZSh0
aGlzKTsKLQotICAgIFdlYkZyYW1lSW1wbCogd2ViRnJhbWUgPSBzdGF0aWNfY2FzdDxXZWJGcmFt
ZUltcGwqPihtX3dlYlZpZXctPm1haW5GcmFtZSgpKTsKLQotICAgIC8vIENvbnN0cnVjdCBzdWJz
dGl0dXRlIGRhdGEgc291cmNlIGZvciB0aGUgJ3NoYWRvdyBwYWdlJy4gV2Ugb25seSBuZWVkIGl0
Ci0gICAgLy8gdG8gaGF2ZSBzYW1lIG9yaWdpbiBhcyB0aGUgd29ya2VyIHNvIHRoZSBsb2FkaW5n
IGNoZWNrcyB3b3JrIGNvcnJlY3RseS4KLSAgICBDU3RyaW5nIGNvbnRlbnQoIiIpOwotICAgIGlu
dCBsZW4gPSBzdGF0aWNfY2FzdDxpbnQ+KGNvbnRlbnQubGVuZ3RoKCkpOwotICAgIFJlZlB0cjxT
aGFyZWRCdWZmZXI+IGJ1ZihTaGFyZWRCdWZmZXI6OmNyZWF0ZShjb250ZW50LmRhdGEoKSwgbGVu
KSk7Ci0gICAgU3Vic3RpdHV0ZURhdGEgc3Vic3REYXRhKGJ1ZiwgU3RyaW5nKCJ0ZXh0L2h0bWwi
KSwgU3RyaW5nKCJVVEYtOCIpLCBLVVJMKCkpOwotICAgIHdlYkZyYW1lLT5mcmFtZSgpLT5sb2Fk
ZXIoKS0+bG9hZChSZXNvdXJjZVJlcXVlc3QodXJsKSwgc3Vic3REYXRhLCBmYWxzZSk7Ci0KLSAg
ICAvLyBUaGlzIGRvY3VtZW50IHdpbGwgYmUgdXNlZCBhcyAnbG9hZGluZyBjb250ZXh0JyBmb3Ig
dGhlIHdvcmtlci4KLSAgICBtX2xvYWRpbmdEb2N1bWVudCA9IHdlYkZyYW1lLT5mcmFtZSgpLT5k
b2N1bWVudCgpOwotfQotCi12b2lkIFdlYldvcmtlckJhc2U6OmRpc3BhdGNoVGFza1RvTWFpblRo
cmVhZChQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2spCi17Ci0g
ICAgY2FsbE9uTWFpblRocmVhZChpbnZva2VUYXNrTWV0aG9kLCB0YXNrLmxlYWtQdHIoKSk7Ci19
Ci0KLXZvaWQgV2ViV29ya2VyQmFzZTo6aW52b2tlVGFza01ldGhvZCh2b2lkKiBwYXJhbSkKK3N0
YXRpYyB2b2lkIGludm9rZVRhc2tNZXRob2Qodm9pZCogcGFyYW0pCiB7CiAgICAgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dDo6VGFzayogdGFzayA9CiAgICAgICAgIHN0YXRpY19jYXN0PFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQ6OlRhc2sqPihwYXJhbSk7CkBAIC0xNDIsMTkzICs1NCwxMCBAQCB2b2lk
IFdlYldvcmtlckJhc2U6Omludm9rZVRhc2tNZXRob2Qodm9pZCogcGFyYW0pCiAgICAgZGVsZXRl
IHRhc2s7CiB9CiAKLXZvaWQgV2ViV29ya2VyQmFzZTo6ZGlkQ3JlYXRlRGF0YVNvdXJjZShXZWJG
cmFtZSosIFdlYkRhdGFTb3VyY2UqIGRzKQotewotICAgIC8vIFRlbGwgdGhlIGxvYWRlciB0byBs
b2FkIHRoZSBkYXRhIGludG8gdGhlICdzaGFkb3cgcGFnZScgc3luY2hyb25vdXNseSwKLSAgICAv
LyBzbyB3ZSBjYW4gZ3JhYiB0aGUgcmVzdWx0aW5nIERvY3VtZW50IHJpZ2h0IGFmdGVyIGxvYWQu
Ci0gICAgc3RhdGljX2Nhc3Q8V2ViRGF0YVNvdXJjZUltcGwqPihkcyktPnNldERlZmVyTWFpblJl
c291cmNlRGF0YUxvYWQoZmFsc2UpOwotfQotCi1XZWJBcHBsaWNhdGlvbkNhY2hlSG9zdCogV2Vi
V29ya2VyQmFzZTo6Y3JlYXRlQXBwbGljYXRpb25DYWNoZUhvc3QoV2ViRnJhbWUqLCBXZWJBcHBs
aWNhdGlvbkNhY2hlSG9zdENsaWVudCogYXBwY2FjaGVIb3N0Q2xpZW50KQotewotICAgIGlmIChj
b21tb25DbGllbnQoKSkKLSAgICAgICAgcmV0dXJuIGNvbW1vbkNsaWVudCgpLT5jcmVhdGVBcHBs
aWNhdGlvbkNhY2hlSG9zdChhcHBjYWNoZUhvc3RDbGllbnQpOwotICAgIHJldHVybiAwOwotfQot
Ci0vLyBXb3JrZXJPYmplY3RQcm94eSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi12b2lkIFdlYldvcmtlckJhc2U6OnBvc3RNZXNz
YWdlVG9Xb3JrZXJPYmplY3QoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG1lc3Nh
Z2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc093
blB0cjxNZXNzYWdlUG9ydENoYW5uZWxBcnJheT4gY2hhbm5lbHMpCi17Ci0gICAgZGlzcGF0Y2hU
YXNrVG9NYWluVGhyZWFkKGNyZWF0ZUNhbGxiYWNrVGFzaygmcG9zdE1lc3NhZ2VUYXNrLCBBbGxv
d0Nyb3NzVGhyZWFkQWNjZXNzKHRoaXMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbWVzc2FnZS0+dG9XaXJlU3RyaW5nKCksIGNoYW5uZWxzKSk7Ci19
Ci0KLXZvaWQgV2ViV29ya2VyQmFzZTo6cG9zdE1lc3NhZ2VUYXNrKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJX
b3JrZXJCYXNlKiB0aGlzUHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
U3RyaW5nIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNz
T3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBjaGFubmVscykKLXsKLSAgICBpZiAoIXRo
aXNQdHItPmNsaWVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXZWJNZXNzYWdlUG9ydENo
YW5uZWxBcnJheSB3ZWJDaGFubmVscyhjaGFubmVscyA/IGNoYW5uZWxzLT5zaXplKCkgOiAwKTsK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdlYkNoYW5uZWxzLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgIHdlYkNoYW5uZWxzW2ldID0gKCpjaGFubmVscylbaV0tPmNoYW5uZWwoKS0+d2ViQ2hh
bm5lbFJlbGVhc2UoKTsKLSAgICAgICAgd2ViQ2hhbm5lbHNbaV0tPnNldENsaWVudCgwKTsKLSAg
ICB9Ci0KLSAgICB0aGlzUHRyLT5jbGllbnQoKS0+cG9zdE1lc3NhZ2VUb1dvcmtlck9iamVjdCht
ZXNzYWdlLCB3ZWJDaGFubmVscyk7Ci19Ci0KLXZvaWQgV2ViV29ya2VyQmFzZTo6cG9zdEV4Y2Vw
dGlvblRvV29ya2VyT2JqZWN0KGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpbmVOdW1iZXIsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJp
bmcmIHNvdXJjZVVSTCkKLXsKLSAgICBkaXNwYXRjaFRhc2tUb01haW5UaHJlYWQoCi0gICAgICAg
IGNyZWF0ZUNhbGxiYWNrVGFzaygmcG9zdEV4Y2VwdGlvblRhc2ssIEFsbG93Q3Jvc3NUaHJlYWRB
Y2Nlc3ModGhpcyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UsIGxp
bmVOdW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VVUkwpKTsKLX0KLQot
dm9pZCBXZWJXb3JrZXJCYXNlOjpwb3N0RXhjZXB0aW9uVGFzayhTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJX
b3JrZXJCYXNlKiB0aGlzUHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMKQotewot
ICAgIGlmICghdGhpc1B0ci0+Y29tbW9uQ2xpZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IHRoaXNQdHItPmNvbW1vbkNsaWVudCgpLT5wb3N0RXhjZXB0aW9uVG9Xb3JrZXJPYmplY3QoZXJy
b3JNZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbGluZU51bWJlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVVSTCk7Ci19Ci0KLXZvaWQgV2ViV29ya2Vy
QmFzZTo6cG9zdENvbnNvbGVNZXNzYWdlVG9Xb3JrZXJPYmplY3QoTWVzc2FnZVNvdXJjZSBzb3Vy
Y2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IE1lc3NhZ2VUeXBlIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIE1lc3NhZ2VMZXZlbCBsZXZlbCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBtZXNzYWdlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
bGluZU51bWJlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpCi17Ci0gICAgZGlzcGF0Y2hUYXNrVG9N
YWluVGhyZWFkKGNyZWF0ZUNhbGxiYWNrVGFzaygmcG9zdENvbnNvbGVNZXNzYWdlVGFzaywgQWxs
b3dDcm9zc1RocmVhZEFjY2Vzcyh0aGlzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNvdXJjZSwgdHlwZSwgbGV2ZWwsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3Vy
Y2VVUkwpKTsKLX0KIAotdm9pZCBXZWJXb3JrZXJCYXNlOjpwb3N0Q29uc29sZU1lc3NhZ2VUYXNr
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgV2ViV29ya2VyQmFzZSogdGhpc1B0ciwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc291cmNlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0eXBlLCBpbnQgbGV2ZWwsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBtZXNz
YWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsaW5l
TnVtYmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFN0cmluZyYgc291cmNlVVJMKQotewotICAgIGlmICghdGhpc1B0ci0+Y29tbW9uQ2xpZW50KCkp
Ci0gICAgICAgIHJldHVybjsKLSAgICB0aGlzUHRyLT5jb21tb25DbGllbnQoKS0+cG9zdENvbnNv
bGVNZXNzYWdlVG9Xb3JrZXJPYmplY3Qoc291cmNlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLCBsZXZlbCwgbWVzc2Fn
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbGluZU51bWJlciwgc291cmNlVVJMKTsKLX0KLQotdm9pZCBXZWJXb3JrZXJCYXNl
Ojpwb3N0TWVzc2FnZVRvUGFnZUluc3BlY3Rvcihjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0g
ICAgZGlzcGF0Y2hUYXNrVG9NYWluVGhyZWFkKGNyZWF0ZUNhbGxiYWNrVGFzaygmcG9zdE1lc3Nh
Z2VUb1BhZ2VJbnNwZWN0b3JUYXNrLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHRoaXMpLCBtZXNz
YWdlKSk7Ci19Ci0KLXZvaWQgV2ViV29ya2VyQmFzZTo6cG9zdE1lc3NhZ2VUb1BhZ2VJbnNwZWN0
b3JUYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJXb3JrZXJCYXNlKiB0aGlzUHRyLCBj
b25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgaWYgKCF0aGlzUHRyLT5jb21tb25DbGllbnQo
KSkKLSAgICAgICAgcmV0dXJuOwotICAgIHRoaXNQdHItPmNvbW1vbkNsaWVudCgpLT5kaXNwYXRj
aERldlRvb2xzTWVzc2FnZShtZXNzYWdlKTsKLX0KLQotdm9pZCBXZWJXb3JrZXJCYXNlOjp1cGRh
dGVJbnNwZWN0b3JTdGF0ZUNvb2tpZShjb25zdCBXVEY6OlN0cmluZyYgY29va2llKQotewotICAg
IGRpc3BhdGNoVGFza1RvTWFpblRocmVhZChjcmVhdGVDYWxsYmFja1Rhc2soJnVwZGF0ZUluc3Bl
Y3RvclN0YXRlQ29va2llVGFzaywgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyh0aGlzKSwgY29va2ll
KSk7Ci19Ci0KLXZvaWQgV2ViV29ya2VyQmFzZTo6dXBkYXRlSW5zcGVjdG9yU3RhdGVDb29raWVU
YXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJXb3JrZXJCYXNlKiB0aGlzUHRyLCBjb25z
dCBTdHJpbmcmIGNvb2tpZSkKLXsKLSAgICBpZiAoIXRoaXNQdHItPmNvbW1vbkNsaWVudCgpKQot
ICAgICAgICByZXR1cm47Ci0gICAgdGhpc1B0ci0+Y29tbW9uQ2xpZW50KCktPnNhdmVEZXZUb29s
c0FnZW50U3RhdGUoY29va2llKTsKLX0KLQotdm9pZCBXZWJXb3JrZXJCYXNlOjpjb25maXJtTWVz
c2FnZUZyb21Xb3JrZXJPYmplY3QoYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkpCi17Ci0gICAgZGlz
cGF0Y2hUYXNrVG9NYWluVGhyZWFkKGNyZWF0ZUNhbGxiYWNrVGFzaygmY29uZmlybU1lc3NhZ2VU
YXNrLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHRoaXMpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzUGVuZGluZ0FjdGl2aXR5KSk7Ci19Ci0KLXZv
aWQgV2ViV29ya2VyQmFzZTo6Y29uZmlybU1lc3NhZ2VUYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJX
b3JrZXJCYXNlKiB0aGlzUHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkpCi17Ci0gICAgaWYgKCF0aGlzUHRyLT5jbGllbnQo
KSkKLSAgICAgICAgcmV0dXJuOwotICAgIHRoaXNQdHItPmNsaWVudCgpLT5jb25maXJtTWVzc2Fn
ZUZyb21Xb3JrZXJPYmplY3QoaGFzUGVuZGluZ0FjdGl2aXR5KTsKLX0KLQotdm9pZCBXZWJXb3Jr
ZXJCYXNlOjpyZXBvcnRQZW5kaW5nQWN0aXZpdHkoYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkpCi17
Ci0gICAgZGlzcGF0Y2hUYXNrVG9NYWluVGhyZWFkKGNyZWF0ZUNhbGxiYWNrVGFzaygmcmVwb3J0
UGVuZGluZ0FjdGl2aXR5VGFzaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcyksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNQZW5kaW5nQWN0aXZpdHkpKTsK
LX0KLQotdm9pZCBXZWJXb3JrZXJCYXNlOjpyZXBvcnRQZW5kaW5nQWN0aXZpdHlUYXNrKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgV2ViV29ya2VyQmFzZSogdGhpc1B0ciwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSkK
LXsKLSAgICBpZiAoIXRoaXNQdHItPmNsaWVudCgpKQotICAgICAgICByZXR1cm47Ci0gICAgdGhp
c1B0ci0+Y2xpZW50KCktPnJlcG9ydFBlbmRpbmdBY3Rpdml0eShoYXNQZW5kaW5nQWN0aXZpdHkp
OwotfQotCi12b2lkIFdlYldvcmtlckJhc2U6OndvcmtlckNvbnRleHRDbG9zZWQoKQotewotICAg
IGRpc3BhdGNoVGFza1RvTWFpblRocmVhZChjcmVhdGVDYWxsYmFja1Rhc2soJndvcmtlckNvbnRl
eHRDbG9zZWRUYXNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyh0aGlzKSkpOwotfQotCi12b2lkIFdlYldvcmtl
ckJhc2U6OndvcmtlckNvbnRleHRDbG9zZWRUYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYldv
cmtlckJhc2UqIHRoaXNQdHIpCi17Ci0gICAgaWYgKHRoaXNQdHItPmNvbW1vbkNsaWVudCgpKQot
ICAgICAgICB0aGlzUHRyLT5jb21tb25DbGllbnQoKS0+d29ya2VyQ29udGV4dENsb3NlZCgpOwot
Ci0gICAgdGhpc1B0ci0+c3RvcFdvcmtlclRocmVhZCgpOwotfQotCi12b2lkIFdlYldvcmtlckJh
c2U6OndvcmtlckNvbnRleHREZXN0cm95ZWQoKQotewotICAgIGRpc3BhdGNoVGFza1RvTWFpblRo
cmVhZChjcmVhdGVDYWxsYmFja1Rhc2soJndvcmtlckNvbnRleHREZXN0cm95ZWRUYXNrLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3dDcm9zc1Ro
cmVhZEFjY2Vzcyh0aGlzKSkpOwotfQotCi12b2lkIFdlYldvcmtlckJhc2U6OndvcmtlckNvbnRl
eHREZXN0cm95ZWRUYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYldvcmtlckJhc2UqIHRo
aXNQdHIpCi17Ci0gICAgaWYgKHRoaXNQdHItPmNvbW1vbkNsaWVudCgpKQotICAgICAgICB0aGlz
UHRyLT5jb21tb25DbGllbnQoKS0+d29ya2VyQ29udGV4dERlc3Ryb3llZCgpOwotICAgIC8vIFRo
ZSBsaWZldGltZSBvZiB0aGlzIHByb3h5IGlzIGNvbnRyb2xsZWQgYnkgdGhlIHdvcmtlciBjb250
ZXh0LgotICAgIGRlbGV0ZSB0aGlzUHRyOwotfQotCi0vLyBXb3JrZXJMb2FkZXJQcm94eSAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ci12b2lkIFdlYldvcmtlckJhc2U6OnBvc3RUYXNrVG9Mb2FkZXIoUGFzc093blB0cjxTY3JpcHRF
eGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNrKQotewotICAgIEFTU0VSVChtX2xvYWRpbmdEb2N1
bWVudC0+aXNEb2N1bWVudCgpKTsKLSAgICBtX2xvYWRpbmdEb2N1bWVudC0+cG9zdFRhc2sodGFz
ayk7Ci19Ci0KLXZvaWQgV2ViV29ya2VyQmFzZTo6cG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJDb250
ZXh0KAotICAgIFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gdGFzaywg
Y29uc3QgU3RyaW5nJiBtb2RlKQordm9pZCBXZWJXb3JrZXJCYXNlOjpkaXNwYXRjaFRhc2tUb01h
aW5UaHJlYWQoUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNrKQog
ewotICAgIG1fd29ya2VyVGhyZWFkLT5ydW5Mb29wKCkucG9zdFRhc2tGb3JNb2RlKHRhc2ssIG1v
ZGUpOworICAgIGNhbGxPbk1haW5UaHJlYWQoaW52b2tlVGFza01ldGhvZCwgdGFzay5sZWFrUHRy
KCkpOwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJCYXNlLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJXb3JrZXJCYXNlLmgKaW5kZXggOTM1OTlmNC4uYzQzYzYzOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViV29ya2VyQmFzZS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckJhc2UuaApAQCAtMzUsMTM4ICszNSwyNiBA
QAogCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYkNv
bW1vbldvcmtlckNsaWVudC5oIgotI2luY2x1ZGUgIldlYkZyYW1lQ2xpZW50LmgiCiAjaW5jbHVk
ZSAiV29ya2VyTG9hZGVyUHJveHkuaCIKICNpbmNsdWRlICJXb3JrZXJPYmplY3RQcm94eS5oIgot
I2luY2x1ZGUgIldvcmtlclRocmVhZC5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBXb3Jr
ZXJUaHJlYWQ7Ci19CiAKIG5hbWVzcGFjZSBXZWJLaXQgewotY2xhc3MgV2ViQXBwbGljYXRpb25D
YWNoZUhvc3Q7Ci1jbGFzcyBXZWJBcHBsaWNhdGlvbkNhY2hlSG9zdENsaWVudDsKLWNsYXNzIFdl
YkNvbW1vbldvcmtlckNsaWVudDsKLWNsYXNzIFdlYlNlY3VyaXR5T3JpZ2luOwotY2xhc3MgV2Vi
U3RyaW5nOwotY2xhc3MgV2ViVVJMOwogY2xhc3MgV2ViVmlldzsKLWNsYXNzIFdlYldvcmtlcjsK
LWNsYXNzIFdlYldvcmtlckNsaWVudDsKIAogLy8gQmFzZSBjbGFzcyBmb3IgV2ViU2hhcmVkV29y
a2VySW1wbCwgV2ViV29ya2VyQ2xpZW50SW1wbCBhbmQgKGRlZnVuY3QpIFdlYldvcmtlckltcGwK
IC8vIGNvbnRhaW5pbmcgY29tbW9uIGludGVyZmFjZSBmb3Igc2hhcmVkIHdvcmtlcnMgYW5kIGRl
ZGljYXRlZCBpbi1wcm9jIHdvcmtlcnMgaW1wbGVtZW50YXRpb24uCiAvLwogLy8gRklYTUU6IFJl
bmFtZSB0aGlzIGNsYXNzIGludG8gV2ViV29ya2VyQmFzZSwgbWVyZ2UgZXhpc3RpbmcgV2ViV29y
a2VyQmFzZSBhbmQgV2ViU2hhcmVkV29ya2VyLgotY2xhc3MgTmV3V2ViV29ya2VyQmFzZSA6IHB1
YmxpYyBXZWJDb3JlOjpXb3JrZXJMb2FkZXJQcm94eSB7CitjbGFzcyBXZWJXb3JrZXJCYXNlIDog
cHVibGljIFdlYkNvcmU6OldvcmtlckxvYWRlclByb3h5IHsKIHB1YmxpYzoKLSAgICB2aXJ0dWFs
IE5ld1dlYkNvbW1vbldvcmtlckNsaWVudCogbmV3Q29tbW9uQ2xpZW50KCkgPSAwOworICAgIHZp
cnR1YWwgV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQoKSA9IDA7CiAgICAgdmly
dHVhbCBXZWJWaWV3KiB2aWV3KCkgY29uc3QgPSAwOwotfTsKLQotLy8gQmFzZSBjbGFzcyBmb3Ig
V2ViU2hhcmVkV29ya2VySW1wbCBhbmQgV2ViV29ya2VySW1wbC4gSXQgY29udGFpbnMgY29tbW9u
Ci0vLyBjb2RlIHVzZWQgYnkgYm90aCBpbXBsZW1lbnRhdGlvbiBjbGFzc2VzLCBpbmNsdWRpbmcg
aW1wbGVtZW50YXRpb25zIG9mIHRoZQotLy8gV29ya2VyT2JqZWN0UHJveHkgYW5kIFdvcmtlckxv
YWRlclByb3h5IGludGVyZmFjZXMuCi1jbGFzcyBXZWJXb3JrZXJCYXNlIDogcHVibGljIFdlYkNv
cmU6Oldvcmtlck9iamVjdFByb3h5Ci0gICAgICAgICAgICAgICAgICAgICwgcHVibGljIE5ld1dl
YldvcmtlckJhc2UKLSAgICAgICAgICAgICAgICAgICAgLCBwdWJsaWMgV2ViRnJhbWVDbGllbnQg
ewotcHVibGljOgotICAgIFdlYldvcmtlckJhc2UoKTsKLSAgICB2aXJ0dWFsIH5XZWJXb3JrZXJC
YXNlKCk7Ci0KLSAgICAvLyBXZWJDb21tb25Xb3JrZXJCYXNlIG1ldGhvZHM6Ci0gICAgdmlydHVh
bCB2b2lkIHBvc3RNZXNzYWdlVG9Xb3JrZXJPYmplY3QoCi0gICAgICAgIFBhc3NSZWZQdHI8V2Vi
Q29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwKLSAgICAgICAgUGFzc093blB0cjxXZWJDb3Jl
OjpNZXNzYWdlUG9ydENoYW5uZWxBcnJheT4pOwotICAgIHZpcnR1YWwgdm9pZCBwb3N0RXhjZXB0
aW9uVG9Xb3JrZXJPYmplY3QoCi0gICAgICAgIGNvbnN0IFdURjo6U3RyaW5nJiwgaW50LCBjb25z
dCBXVEY6OlN0cmluZyYpOwotICAgIHZpcnR1YWwgdm9pZCBwb3N0Q29uc29sZU1lc3NhZ2VUb1dv
cmtlck9iamVjdCgKLSAgICAgICAgV2ViQ29yZTo6TWVzc2FnZVNvdXJjZSwgV2ViQ29yZTo6TWVz
c2FnZVR5cGUsCi0gICAgICAgIFdlYkNvcmU6Ok1lc3NhZ2VMZXZlbCwgY29uc3QgV1RGOjpTdHJp
bmcmLCBpbnQsIGNvbnN0IFdURjo6U3RyaW5nJik7Ci0gICAgdmlydHVhbCB2b2lkIHBvc3RNZXNz
YWdlVG9QYWdlSW5zcGVjdG9yKGNvbnN0IFdURjo6U3RyaW5nJik7Ci0gICAgdmlydHVhbCB2b2lk
IHVwZGF0ZUluc3BlY3RvclN0YXRlQ29va2llKGNvbnN0IFdURjo6U3RyaW5nJik7Ci0gICAgdmly
dHVhbCB2b2lkIGNvbmZpcm1NZXNzYWdlRnJvbVdvcmtlck9iamVjdChib29sKTsKLSAgICB2aXJ0
dWFsIHZvaWQgcmVwb3J0UGVuZGluZ0FjdGl2aXR5KGJvb2wpOwotICAgIHZpcnR1YWwgdm9pZCB3
b3JrZXJDb250ZXh0Q2xvc2VkKCk7Ci0gICAgdmlydHVhbCB2b2lkIHdvcmtlckNvbnRleHREZXN0
cm95ZWQoKTsKLSAgICB2aXJ0dWFsIFdlYlZpZXcqIHZpZXcoKSBjb25zdCB7IHJldHVybiBtX3dl
YlZpZXc7IH0KLQotICAgIC8vIFdlYkNvcmU6OldvcmtlckxvYWRlclByb3h5IG1ldGhvZHM6Ci0g
ICAgdmlydHVhbCB2b2lkIHBvc3RUYXNrVG9Mb2FkZXIoUGFzc093blB0cjxXZWJDb3JlOjpTY3Jp
cHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPik7Ci0gICAgdmlydHVhbCB2b2lkIHBvc3RUYXNrRm9y
TW9kZVRvV29ya2VyQ29udGV4dCgKLSAgICAgICAgUGFzc093blB0cjxXZWJDb3JlOjpTY3JpcHRF
eGVjdXRpb25Db250ZXh0OjpUYXNrPiwgY29uc3QgV1RGOjpTdHJpbmcmIG1vZGUpOwotCi0gICAg
Ly8gV2ViRnJhbWVDbGllbnQgbWV0aG9kcyB0byBzdXBwb3J0IHJlc291cmNlIGxvYWRpbmcgdGhy
dSB0aGUgJ3NoYWRvdyBwYWdlJy4KLSAgICB2aXJ0dWFsIHZvaWQgZGlkQ3JlYXRlRGF0YVNvdXJj
ZShXZWJGcmFtZSosIFdlYkRhdGFTb3VyY2UqKTsKLSAgICB2aXJ0dWFsIFdlYkFwcGxpY2F0aW9u
Q2FjaGVIb3N0KiBjcmVhdGVBcHBsaWNhdGlvbkNhY2hlSG9zdChXZWJGcmFtZSosIFdlYkFwcGxp
Y2F0aW9uQ2FjaGVIb3N0Q2xpZW50Kik7CiAKICAgICAvLyBFeGVjdXRlcyB0aGUgZ2l2ZW4gdGFz
ayBvbiB0aGUgbWFpbiB0aHJlYWQuCiAgICAgc3RhdGljIHZvaWQgZGlzcGF0Y2hUYXNrVG9NYWlu
VGhyZWFkKFBhc3NPd25QdHI8V2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4p
OwotCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCBXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1v
bkNsaWVudCgpID0gMDsKLSAgICB2aXJ0dWFsIFdlYldvcmtlckNsaWVudCogY2xpZW50KCkgPSAw
OwotCi0gICAgdm9pZCBzZXRXb3JrZXJUaHJlYWQoUGFzc1JlZlB0cjxXZWJDb3JlOjpXb3JrZXJU
aHJlYWQ+IHRocmVhZCkgeyBtX3dvcmtlclRocmVhZCA9IHRocmVhZDsgfQotICAgIFdlYkNvcmU6
OldvcmtlclRocmVhZCogd29ya2VyVGhyZWFkKCkgeyByZXR1cm4gbV93b3JrZXJUaHJlYWQuZ2V0
KCk7IH0KLQotICAgIC8vIFNodXRzIGRvd24gdGhlIHdvcmtlciB0aHJlYWQuCi0gICAgdm9pZCBz
dG9wV29ya2VyVGhyZWFkKCk7Ci0KLSAgICAvLyBDcmVhdGVzIHRoZSBzaGFkb3cgbG9hZGVyIHVz
ZWQgZm9yIHdvcmtlciBuZXR3b3JrIHJlcXVlc3RzLgotICAgIHZvaWQgaW5pdGlhbGl6ZUxvYWRl
cihjb25zdCBXZWJVUkwmKTsKLQotcHJpdmF0ZToKLSAgICAvLyBGdW5jdGlvbiB1c2VkIHRvIGlu
dm9rZSB0YXNrcyBvbiB0aGUgbWFpbiB0aHJlYWQuCi0gICAgc3RhdGljIHZvaWQgaW52b2tlVGFz
a01ldGhvZCh2b2lkKik7Ci0KLSAgICAvLyBUYXNrcyB0aGF0IGFyZSBydW4gb24gdGhlIG1haW4g
dGhyZWFkLgotICAgIHN0YXRpYyB2b2lkIHBvc3RNZXNzYWdlVGFzaygKLSAgICAgICAgV2ViQ29y
ZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKLSAgICAgICAgV2ViV29ya2VyQmFz
ZSogdGhpc1B0ciwKLSAgICAgICAgV1RGOjpTdHJpbmcgbWVzc2FnZSwKLSAgICAgICAgUGFzc093
blB0cjxXZWJDb3JlOjpNZXNzYWdlUG9ydENoYW5uZWxBcnJheT4gY2hhbm5lbHMpOwotICAgIHN0
YXRpYyB2b2lkIHBvc3RFeGNlcHRpb25UYXNrKAotICAgICAgICBXZWJDb3JlOjpTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0LAotICAgICAgICBXZWJXb3JrZXJCYXNlKiB0aGlzUHRyLAot
ICAgICAgICBjb25zdCBXVEY6OlN0cmluZyYgbWVzc2FnZSwKLSAgICAgICAgaW50IGxpbmVOdW1i
ZXIsCi0gICAgICAgIGNvbnN0IFdURjo6U3RyaW5nJiBzb3VyY2VVUkwpOwotICAgIHN0YXRpYyB2
b2lkIHBvc3RDb25zb2xlTWVzc2FnZVRhc2soCi0gICAgICAgIFdlYkNvcmU6OlNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQsCi0gICAgICAgIFdlYldvcmtlckJhc2UqIHRoaXNQdHIsCi0g
ICAgICAgIGludCBzb3VyY2UsCi0gICAgICAgIGludCB0eXBlLAotICAgICAgICBpbnQgbGV2ZWws
Ci0gICAgICAgIGNvbnN0IFdURjo6U3RyaW5nJiBtZXNzYWdlLAotICAgICAgICBpbnQgbGluZU51
bWJlciwKLSAgICAgICAgY29uc3QgV1RGOjpTdHJpbmcmIHNvdXJjZVVSTCk7Ci0gICAgc3RhdGlj
IHZvaWQgcG9zdE1lc3NhZ2VUb1BhZ2VJbnNwZWN0b3JUYXNrKFdlYkNvcmU6OlNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBXZWJXb3JrZXJCYXNlKiwgY29uc3QgV1RGOjpTdHJpbmcmKTsKLSAgICBz
dGF0aWMgdm9pZCB1cGRhdGVJbnNwZWN0b3JTdGF0ZUNvb2tpZVRhc2soV2ViQ29yZTo6U2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFdlYldvcmtlckJhc2UqIHRoaXNQdHIsIGNvbnN0IFdURjo6U3Ry
aW5nJiBjb29raWUpOwotICAgIHN0YXRpYyB2b2lkIGNvbmZpcm1NZXNzYWdlVGFzaygKLSAgICAg
ICAgV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKLSAgICAgICAgV2Vi
V29ya2VyQmFzZSogdGhpc1B0ciwKLSAgICAgICAgYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkpOwot
ICAgIHN0YXRpYyB2b2lkIHJlcG9ydFBlbmRpbmdBY3Rpdml0eVRhc2soCi0gICAgICAgIFdlYkNv
cmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCi0gICAgICAgIFdlYldvcmtlckJh
c2UqIHRoaXNQdHIsCi0gICAgICAgIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KTsKLSAgICBzdGF0
aWMgdm9pZCB3b3JrZXJDb250ZXh0Q2xvc2VkVGFzaygKLSAgICAgICAgV2ViQ29yZTo6U2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKLSAgICAgICAgV2ViV29ya2VyQmFzZSogdGhpc1B0
cik7Ci0gICAgc3RhdGljIHZvaWQgd29ya2VyQ29udGV4dERlc3Ryb3llZFRhc2soCi0gICAgICAg
IFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCi0gICAgICAgIFdlYldv
cmtlckJhc2UqIHRoaXNQdHIpOwotCi0gICAgLy8gJ3NoYWRvdyBwYWdlJyAtIGNyZWF0ZWQgdG8g
cHJveHkgbG9hZGluZyByZXF1ZXN0cyBmcm9tIHRoZSB3b3JrZXIuCi0gICAgUmVmUHRyPFdlYkNv
cmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ+IG1fbG9hZGluZ0RvY3VtZW50OwotICAgIFdlYlZp
ZXcqIG1fd2ViVmlldzsKLSAgICBib29sIG1fYXNrZWRUb1Rlcm1pbmF0ZTsKLQotICAgIFJlZlB0
cjxXZWJDb3JlOjpXb3JrZXJUaHJlYWQ+IG1fd29ya2VyVGhyZWFkOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJX
b3JrZXJDbGllbnRJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtl
ckNsaWVudEltcGwuY3BwCmluZGV4IDViOWYzMjAuLjUwOTBhZmYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckNsaWVudEltcGwuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckNsaWVudEltcGwuY3BwCkBAIC02Myw3ICs2
Myw2IEBACiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViVVJMLmgiCiAjaW5jbHVkZSAiV2ViVmlld0lt
cGwuaCIKICNpbmNsdWRlICJXZWJXb3JrZXIuaCIKLSNpbmNsdWRlICJXZWJXb3JrZXJJbXBsLmgi
CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJDbGllbnRJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJXb3JrZXJDbGllbnRJbXBsLmgKaW5kZXggNzAwNmE5NC4uNTE4OWFkMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViV29ya2VyQ2xpZW50SW1wbC5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckNsaWVudEltcGwuaApA
QCAtNTgsOCArNTgsOCBAQCBjbGFzcyBXZWJGcmFtZUltcGw7CiAvLyBJbiBlc3NlbmNlLCB0aGlz
IGNsYXNzIHdyYXBzIFdvcmtlck1lc3NhZ2luZ1Byb3h5LgogY2xhc3MgV2ViV29ya2VyQ2xpZW50
SW1wbCA6IHB1YmxpYyBXZWJDb3JlOjpXb3JrZXJDb250ZXh0UHJveHkKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLCBwdWJsaWMgV2ViQ29yZTo6V29ya2VyT2JqZWN0UHJveHkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgLCBwdWJsaWMgTmV3V2ViV29ya2VyQmFzZQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAsIHB1YmxpYyBOZXdXZWJDb21tb25Xb3JrZXJDbGllbnQgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBXZWJXb3JrZXJCYXNlCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICwgcHVibGljIFdlYkNvbW1vbldvcmtlckNsaWVudCB7CiBwdWJsaWM6CiAg
ICAgLy8gV2ViQ29yZTo6V29ya2VyQ29udGV4dFByb3h5IEZhY3RvcnkuCiAgICAgc3RhdGljIFdl
YkNvcmU6OldvcmtlckNvbnRleHRQcm94eSogY3JlYXRlV29ya2VyQ29udGV4dFByb3h5KFdlYkNv
cmU6OldvcmtlciopOwpAQCAtMTA3LDcgKzEwNyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgV2ViRmlsZVN5c3RlbUNhbGxiYWNrcyopOwogCiAgICAgLy8gV2Vi
Q29tbWVudFdvcmtlckJhc2UgbWV0aG9kczoKLSAgICB2aXJ0dWFsIE5ld1dlYkNvbW1vbldvcmtl
ckNsaWVudCogbmV3Q29tbW9uQ2xpZW50KCkgeyByZXR1cm4gdGhpczsgfQorICAgIHZpcnR1YWwg
V2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQoKSB7IHJldHVybiB0aGlzOyB9CiAg
ICAgdmlydHVhbCBXZWJWaWV3KiB2aWV3KCkgY29uc3Q7CiAKIHByaXZhdGU6CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJJbXBsLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckltcGwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBkY2JmZWVlLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYldvcmtlckltcGwuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTYzICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICog
ZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViV29ya2VySW1wbC5oIgotCi0jaW5jbHVkZSAi
Q3Jvc3NUaHJlYWRUYXNrLmgiCi0jaW5jbHVkZSAiRGVkaWNhdGVkV29ya2VyQ29udGV4dC5oIgot
I2luY2x1ZGUgIkRlZGljYXRlZFdvcmtlclRocmVhZC5oIgotI2luY2x1ZGUgIktVUkwuaCIKLSNp
bmNsdWRlICJNZXNzYWdlRXZlbnQuaCIKLSNpbmNsdWRlICJNZXNzYWdlUG9ydC5oIgotI2luY2x1
ZGUgIk1lc3NhZ2VQb3J0Q2hhbm5lbC5oIgotI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQuaCIKLSNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgotI2luY2x1ZGUgIlNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZS5oIgotI2luY2x1ZGUgIlN1YnN0aXR1dGVEYXRhLmgiCi0jaW5jbHVkZSA8d3Rm
L093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KLQotI2luY2x1ZGUgIlBsYXRm
b3JtTWVzc2FnZVBvcnRDaGFubmVsLmgiCi0jaW5jbHVkZSAiV2ViTWVzc2FnZVBvcnRDaGFubmVs
LmgiCi0jaW5jbHVkZSAicGxhdGZvcm0vV2ViU3RyaW5nLmgiCi0jaW5jbHVkZSAicGxhdGZvcm0v
V2ViVVJMLmgiCi0jaW5jbHVkZSAiV2ViV29ya2VyQ2xpZW50LmgiCi0KLXVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotI2lmIEVOQUJMRShXT1JLRVJTKQot
Ci1XZWJXb3JrZXIqIFdlYldvcmtlcjo6Y3JlYXRlKFdlYldvcmtlckNsaWVudCogY2xpZW50KQot
ewotICAgIHJldHVybiBuZXcgV2ViV29ya2VySW1wbChjbGllbnQpOwotfQotCi0KLVdlYldvcmtl
ckltcGw6OldlYldvcmtlckltcGwoV2ViV29ya2VyQ2xpZW50KiBjbGllbnQpCi0gICAgOiBtX2Ns
aWVudChjbGllbnQpCi17Ci19Ci0KLVdlYldvcmtlckltcGw6On5XZWJXb3JrZXJJbXBsKCkKLXsK
LX0KLQotTmV3V2ViQ29tbW9uV29ya2VyQ2xpZW50KiBXZWJXb3JrZXJJbXBsOjpuZXdDb21tb25D
bGllbnQoKQotewotICAgIHJldHVybiBtX2NsaWVudDsKLX0KLQotV2ViQ29tbW9uV29ya2VyQ2xp
ZW50KiBXZWJXb3JrZXJJbXBsOjpjb21tb25DbGllbnQoKQotewotICAgIHJldHVybiBtX2NsaWVu
dDsKLX0KLQotdm9pZCBXZWJXb3JrZXJJbXBsOjpwb3N0TWVzc2FnZVRvV29ya2VyQ29udGV4dFRh
c2soV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYldvcmtlckltcGwqIHRo
aXNQdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBQYXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5PiBj
aGFubmVscykKLXsKLSAgICBBU1NFUlQoY29udGV4dC0+aXNXb3JrZXJDb250ZXh0KCkpOwotICAg
IERlZGljYXRlZFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQgPQotICAgICAgICBzdGF0aWNf
Y2FzdDxEZWRpY2F0ZWRXb3JrZXJDb250ZXh0Kj4oY29udGV4dCk7Ci0KLSAgICBPd25QdHI8TWVz
c2FnZVBvcnRBcnJheT4gcG9ydHMgPQotICAgICAgICBNZXNzYWdlUG9ydDo6ZW50YW5nbGVQb3J0
cygqY29udGV4dCwgY2hhbm5lbHMpOwotICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
IHNlcmlhbGl6ZWRNZXNzYWdlID0KLSAgICAgICAgU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVh
dGVGcm9tV2lyZShtZXNzYWdlKTsKLSAgICB3b3JrZXJDb250ZXh0LT5kaXNwYXRjaEV2ZW50KE1l
c3NhZ2VFdmVudDo6Y3JlYXRlKAotICAgICAgICBwb3J0cy5yZWxlYXNlKCksIHNlcmlhbGl6ZWRN
ZXNzYWdlLnJlbGVhc2UoKSkpOwotICAgIHRoaXNQdHItPmNvbmZpcm1NZXNzYWdlRnJvbVdvcmtl
ck9iamVjdCh3b3JrZXJDb250ZXh0LT5oYXNQZW5kaW5nQWN0aXZpdHkoKSk7Ci19Ci0KLS8vIFdl
YldvcmtlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0KLXZvaWQgV2ViV29ya2VySW1wbDo6c3RhcnRXb3JrZXJDb250
ZXh0KGNvbnN0IFdlYlVSTCYgc2NyaXB0VXJsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgV2ViU3RyaW5nJiB1c2VyQWdlbnQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJTdHJpbmcmIHNvdXJjZUNvZGUpCi17Ci0g
ICAgaW5pdGlhbGl6ZUxvYWRlcihzY3JpcHRVcmwpOwotICAgIHNldFdvcmtlclRocmVhZChEZWRp
Y2F0ZWRXb3JrZXJUaHJlYWQ6OmNyZWF0ZShzY3JpcHRVcmwsIHVzZXJBZ2VudCwgc291cmNlQ29k
ZSwgKnRoaXMsICp0aGlzLCBEb250UGF1c2VXb3JrZXJDb250ZXh0T25TdGFydCkpOwotICAgIC8v
IFdvcmtlciBpbml0aWFsaXphdGlvbiBtZWFucyBhIHBlbmRpbmcgYWN0aXZpdHkuCi0gICAgcmVw
b3J0UGVuZGluZ0FjdGl2aXR5KHRydWUpOwotICAgIHdvcmtlclRocmVhZCgpLT5zdGFydCgpOwot
fQotCi12b2lkIFdlYldvcmtlckltcGw6OnRlcm1pbmF0ZVdvcmtlckNvbnRleHQoKQotewotICAg
IHN0b3BXb3JrZXJUaHJlYWQoKTsKLX0KLQotdm9pZCBXZWJXb3JrZXJJbXBsOjpwb3N0TWVzc2Fn
ZVRvV29ya2VyQ29udGV4dChjb25zdCBXZWJTdHJpbmcmIG1lc3NhZ2UsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYk1lc3NhZ2VQb3J0Q2hh
bm5lbEFycmF5JiB3ZWJDaGFubmVscykKLXsKLSAgICBPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVs
QXJyYXk+IGNoYW5uZWxzOwotICAgIGlmICh3ZWJDaGFubmVscy5zaXplKCkpIHsKLSAgICAgICAg
Y2hhbm5lbHMgPSBhZG9wdFB0cihuZXcgTWVzc2FnZVBvcnRDaGFubmVsQXJyYXkod2ViQ2hhbm5l
bHMuc2l6ZSgpKSk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd2ViQ2hhbm5lbHMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIFJlZlB0cjxQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hh
bm5lbD4gcGxhdGZvcm1fY2hhbm5lbCA9Ci0gICAgICAgICAgICAgICAgUGxhdGZvcm1NZXNzYWdl
UG9ydENoYW5uZWw6OmNyZWF0ZSh3ZWJDaGFubmVsc1tpXSk7Ci0gICAgICAgICAgICB3ZWJDaGFu
bmVsc1tpXS0+c2V0Q2xpZW50KHBsYXRmb3JtX2NoYW5uZWwuZ2V0KCkpOwotICAgICAgICAgICAg
KCpjaGFubmVscylbaV0gPSBNZXNzYWdlUG9ydENoYW5uZWw6OmNyZWF0ZShwbGF0Zm9ybV9jaGFu
bmVsKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHdvcmtlclRocmVhZCgpLT5ydW5Mb29wKCku
cG9zdFRhc2soCi0gICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmcG9zdE1lc3NhZ2VUb1dvcmtl
ckNvbnRleHRUYXNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3dDcm9zc1RocmVh
ZEFjY2Vzcyh0aGlzKSwgU3RyaW5nKG1lc3NhZ2UpLCBjaGFubmVscy5yZWxlYXNlKCkpKTsKLX0K
LQotdm9pZCBXZWJXb3JrZXJJbXBsOjp3b3JrZXJPYmplY3REZXN0cm95ZWQoKQotewotICAgIC8v
IFdvcmtlciBvYmplY3QgaW4gdGhlIHJlbmRlcmVyIHdhcyBkZXN0cm95ZWQsIHBlcmhhcHMgYSBy
ZXN1bHQgb2YgR0MuCi0gICAgLy8gRm9yIHVzLCBpdCdzIGEgc2lnbmFsIHRvIHN0YXJ0IHRlcm1p
bmF0aW5nIHRoZSBXb3JrZXJDb250ZXh0IHRvby4KLSAgICAvLyBGSVhNRTogd2hlbiAna2lsbCBh
IHdvcmtlcicgaHRtbDUgc3BlYyBhbGdvcml0aG0gaXMgaW1wbGVtZW50ZWQsIGl0Ci0gICAgLy8g
c2hvdWxkIGJlIHVzZWQgaGVyZSBpbnN0ZWFkIG9mICd0ZXJtaW5hdGUgYSB3b3JrZXInLgotICAg
IHRlcm1pbmF0ZVdvcmtlckNvbnRleHQoKTsKLX0KLQotdm9pZCBXZWJXb3JrZXJJbXBsOjpjbGll
bnREZXN0cm95ZWQoKQotewotICAgIG1fY2xpZW50ID0gMDsKLX0KLQotI2Vsc2UKLQotV2ViV29y
a2VyKiBXZWJXb3JrZXI6OmNyZWF0ZShXZWJXb3JrZXJDbGllbnQqIGNsaWVudCkKLXsKLSAgICBy
ZXR1cm4gMDsKLX0KLQotI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQotCi19IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtl
ckltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckltcGwuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGYwNTJhNy4uMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJJbXBsLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4
NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6
Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
LSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2lmbmRlZiBXZWJXb3JrZXJJbXBsX2gKLSNkZWZpbmUgV2ViV29ya2VySW1wbF9o
Ci0KLSNpbmNsdWRlICJXZWJXb3JrZXIuaCIKLQotI2lmIEVOQUJMRShXT1JLRVJTKQotCi0jaW5j
bHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgotCi0jaW5jbHVkZSAiV2ViV29ya2VyQmFz
ZS5oIgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotLy8gVGhpcyBjbGFzcyBpcyB1c2VkIGJ5IHRo
ZSB3b3JrZXIgcHJvY2VzcyBjb2RlIHRvIHRhbGsgdG8gdGhlIFdlYkNvcmU6OldvcmtlcgotLy8g
aW1wbGVtZW50YXRpb24uICBJdCBjYW4ndCB1c2UgaXQgZGlyZWN0bHkgc2luY2UgaXQgdXNlcyBX
ZWJLaXQgdHlwZXMsIHNvIHRoaXMKLS8vIGNsYXNzIGNvbnZlcnRzIHRoZSBkYXRhIHR5cGVzLiAg
V2hlbiB0aGUgV2ViQ29yZTo6V29ya2VyIG9iamVjdCB3YW50cyB0byBjYWxsCi0vLyBXZWJDb3Jl
OjpXb3JrZXJPYmplY3RQcm94eSwgdGhpcyBjbGFzcyB3aWxsIGNvbnZlciB0byBDaHJvbWUgZGF0
YSB0eXBlcyBmaXJzdAotLy8gYW5kIHRoZW4gY2FsbCB0aGUgc3VwcGxpZWQgV2ViV29ya2VyQ2xp
ZW50LgotY2xhc3MgV2ViV29ya2VySW1wbCA6IHB1YmxpYyBXZWJXb3JrZXJCYXNlLCBwdWJsaWMg
V2ViV29ya2VyIHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBXZWJXb3JrZXJJbXBsKFdlYldvcmtl
ckNsaWVudCogY2xpZW50KTsKLQotICAgIC8vIFdlYldvcmtlciBtZXRob2RzOgotICAgIHZpcnR1
YWwgdm9pZCBzdGFydFdvcmtlckNvbnRleHQoY29uc3QgV2ViVVJMJiwgY29uc3QgV2ViU3RyaW5n
JiwgY29uc3QgV2ViU3RyaW5nJik7Ci0gICAgdmlydHVhbCB2b2lkIHRlcm1pbmF0ZVdvcmtlckNv
bnRleHQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcG9zdE1lc3NhZ2VUb1dvcmtlckNvbnRleHQoY29u
c3QgV2ViU3RyaW5nJiwgY29uc3QgV2ViTWVzc2FnZVBvcnRDaGFubmVsQXJyYXkmKTsKLSAgICB2
aXJ0dWFsIHZvaWQgd29ya2VyT2JqZWN0RGVzdHJveWVkKCk7Ci0gICAgdmlydHVhbCB2b2lkIGNs
aWVudERlc3Ryb3llZCgpOwotCi0gICAgLy8gV2ViV29ya2VyQmFzZSBtZXRob2RzOgotICAgIHZp
cnR1YWwgV2ViV29ya2VyQ2xpZW50KiBjbGllbnQoKSB7IHJldHVybiBtX2NsaWVudDsgfQotICAg
IHZpcnR1YWwgV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQoKTsKLQotICAgIC8v
IE5ld1dlYldvcmtlckJhc2UgbWV0aG9kczoKLSAgICB2aXJ0dWFsIE5ld1dlYkNvbW1vbldvcmtl
ckNsaWVudCogbmV3Q29tbW9uQ2xpZW50KCk7Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCB+V2Vi
V29ya2VySW1wbCgpOwotCi0gICAgLy8gVGFza3MgdGhhdCBhcmUgcnVuIG9uIHRoZSB3b3JrZXIg
dGhyZWFkLgotICAgIHN0YXRpYyB2b2lkIHBvc3RNZXNzYWdlVG9Xb3JrZXJDb250ZXh0VGFzaygK
LSAgICAgICAgV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKLSAgICAg
ICAgV2ViV29ya2VySW1wbCogdGhpc1B0ciwKLSAgICAgICAgY29uc3QgV1RGOjpTdHJpbmcmIG1l
c3NhZ2UsCi0gICAgICAgIFBhc3NPd25QdHI8V2ViQ29yZTo6TWVzc2FnZVBvcnRDaGFubmVsQXJy
YXk+IGNoYW5uZWxzKTsKLQotICAgIFdlYldvcmtlckNsaWVudCogbV9jbGllbnQ7Ci19OwotCi19
IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQotCi0jZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckZpbGVTeXN0
ZW1DYWxsYmFja3NCcmlkZ2UuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2Vy
RmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZS5jcHAKaW5kZXggNTIzZWY3NS4uOGNlNWU2OSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyRmlsZVN5c3RlbUNhbGxi
YWNrc0JyaWRnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyRmls
ZVN5c3RlbUNhbGxiYWNrc0JyaWRnZS5jcHAKQEAgLTE1Niw3ICsxNTYsNyBAQCB2b2lkIFdvcmtl
ckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OnN0b3AoKQogICAgIH0KIH0KIAotdm9pZCBXb3Jr
ZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpwb3N0T3BlbkZpbGVTeXN0ZW1Ub01haW5UaHJl
YWQoTmV3V2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQsIFdlYkZpbGVTeXN0ZW06
OlR5cGUgdHlwZSwgbG9uZyBsb25nIHNpemUsIGJvb2wgY3JlYXRlLCBjb25zdCBTdHJpbmcmIG1v
ZGUpCit2b2lkIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OnBvc3RPcGVuRmlsZVN5
c3RlbVRvTWFpblRocmVhZChXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1vbkNsaWVudCwgV2Vi
RmlsZVN5c3RlbTo6VHlwZSB0eXBlLCBsb25nIGxvbmcgc2l6ZSwgYm9vbCBjcmVhdGUsIGNvbnN0
IFN0cmluZyYgbW9kZSkKIHsKICAgICBkaXNwYXRjaFRhc2tUb01haW5UaHJlYWQoCiAgICAgICAg
IGNyZWF0ZUNhbGxiYWNrVGFzaygmb3BlbkZpbGVTeXN0ZW1Pbk1haW5UaHJlYWQsCkBAIC0yNTEs
NyArMjUxLDcgQEAgdm9pZCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpwb3N0UmVh
ZERpcmVjdG9yeVRvTWFpblRocmVhZChXZWJGaWxlU3lzdGUKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcyksIG1vZGUpKTsKIH0KIAotdm9pZCBX
b3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpvcGVuRmlsZVN5c3RlbU9uTWFpblRocmVh
ZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgTmV3V2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21t
b25DbGllbnQsIFdlYkZpbGVTeXN0ZW06OlR5cGUgdHlwZSwgbG9uZyBsb25nIHNpemUsIGJvb2wg
Y3JlYXRlLCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlKiBicmlkZ2UsIGNvbnN0IFN0
cmluZyYgbW9kZSkKK3ZvaWQgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6b3BlbkZp
bGVTeXN0ZW1Pbk1haW5UaHJlYWQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYkNvbW1vbldv
cmtlckNsaWVudCogY29tbW9uQ2xpZW50LCBXZWJGaWxlU3lzdGVtOjpUeXBlIHR5cGUsIGxvbmcg
bG9uZyBzaXplLCBib29sIGNyZWF0ZSwgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZSog
YnJpZGdlLCBjb25zdCBTdHJpbmcmIG1vZGUpCiB7CiAgICAgaWYgKCFjb21tb25DbGllbnQpCiAg
ICAgICAgIGJyaWRnZS0+ZGlkRmFpbE9uTWFpblRocmVhZChXZWJGaWxlRXJyb3JBYm9ydCwgbW9k
ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJGaWxlU3lz
dGVtQ2FsbGJhY2tzQnJpZGdlLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJG
aWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlLmgKaW5kZXggOGFlN2ViMy4uOWM0NGNiMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNr
c0JyaWRnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckZpbGVTeXN0
ZW1DYWxsYmFja3NCcmlkZ2UuaApAQCAtNTEsNyArNTEsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsK
IAogY2xhc3MgQXN5bmNGaWxlU3lzdGVtOwogY2xhc3MgTWFpblRocmVhZEZpbGVTeXN0ZW1DYWxs
YmFja3M7Ci1jbGFzcyBOZXdXZWJDb21tb25Xb3JrZXJDbGllbnQ7CitjbGFzcyBXZWJDb21tb25X
b3JrZXJDbGllbnQ7CiBjbGFzcyBUaHJlYWRhYmxlQ2FsbGJhY2tzQnJpZGdlV3JhcHBlcjsKIGNs
YXNzIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3M7CiBzdHJ1Y3QgV2ViRmlsZUluZm87CkBAIC04Nyw3
ICs4Nyw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICAvLyBNZXRob2RzIHRoYXQgY3JlYXRlIGFu
IGluc3RhbmNlIGFuZCBwb3N0IGFuIGluaXRpYWwgcmVxdWVzdCB0YXNrIHRvIHRoZSBtYWluIHRo
cmVhZC4gVGhleSBtdXN0IGJlIGNhbGxlZCBvbiB0aGUgd29ya2VyIHRocmVhZC4KLSAgICB2b2lk
IHBvc3RPcGVuRmlsZVN5c3RlbVRvTWFpblRocmVhZChOZXdXZWJDb21tb25Xb3JrZXJDbGllbnQq
LCBXZWJGaWxlU3lzdGVtOjpUeXBlLCBsb25nIGxvbmcgc2l6ZSwgYm9vbCBjcmVhdGUsIGNvbnN0
IFN0cmluZyYgbW9kZSk7CisgICAgdm9pZCBwb3N0T3BlbkZpbGVTeXN0ZW1Ub01haW5UaHJlYWQo
V2ViQ29tbW9uV29ya2VyQ2xpZW50KiwgV2ViRmlsZVN5c3RlbTo6VHlwZSwgbG9uZyBsb25nIHNp
emUsIGJvb2wgY3JlYXRlLCBjb25zdCBTdHJpbmcmIG1vZGUpOwogICAgIHZvaWQgcG9zdE1vdmVU
b01haW5UaHJlYWQoV2ViRmlsZVN5c3RlbSosIGNvbnN0IFdlYkNvcmU6OktVUkwmIHNyY1BhdGgs
IGNvbnN0IFdlYkNvcmU6OktVUkwmIGRlc3RQYXRoLCBjb25zdCBTdHJpbmcmIG1vZGUpOwogICAg
IHZvaWQgcG9zdENvcHlUb01haW5UaHJlYWQoV2ViRmlsZVN5c3RlbSosIGNvbnN0IFdlYkNvcmU6
OktVUkwmIHNyY1BhdGgsIGNvbnN0IFdlYkNvcmU6OktVUkwmIGRlc3RQYXRoLCBjb25zdCBTdHJp
bmcmIG1vZGUpOwogICAgIHZvaWQgcG9zdFJlbW92ZVRvTWFpblRocmVhZChXZWJGaWxlU3lzdGVt
KiwgY29uc3QgV2ViQ29yZTo6S1VSTCYgcGF0aCwgY29uc3QgU3RyaW5nJiBtb2RlKTsKQEAgLTEx
MCw3ICsxMTAsNyBAQCBwcml2YXRlOgogICAgIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlk
Z2UoV2ViQ29yZTo6V29ya2VyTG9hZGVyUHJveHkqLCBXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgV2ViRmlsZVN5c3RlbUNhbGxiYWNrcyopOwogCiAgICAgLy8gTWV0aG9kcyB0aGF0
IGFyZSB0byBiZSBjYWxsZWQgb24gdGhlIG1haW4gdGhyZWFkLgotICAgIHN0YXRpYyB2b2lkIG9w
ZW5GaWxlU3lzdGVtT25NYWluVGhyZWFkKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBOZXdXZWJDb21tb25Xb3JrZXJDbGllbnQqLCBXZWJGaWxlU3lzdGVtOjpUeXBlLCBsb25nIGxv
bmcgc2l6ZSwgYm9vbCBjcmVhdGUsIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UqLCBj
b25zdCBTdHJpbmcmIG1vZGUpOworICAgIHN0YXRpYyB2b2lkIG9wZW5GaWxlU3lzdGVtT25NYWlu
VGhyZWFkKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJDb21tb25Xb3JrZXJD
bGllbnQqLCBXZWJGaWxlU3lzdGVtOjpUeXBlLCBsb25nIGxvbmcgc2l6ZSwgYm9vbCBjcmVhdGUs
IFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UqLCBjb25zdCBTdHJpbmcmIG1vZGUpOwog
ICAgIHN0YXRpYyB2b2lkIG1vdmVPbk1haW5UaHJlYWQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIFdlYkZpbGVTeXN0ZW0qLCBjb25zdCBXZWJDb3JlOjpLVVJMJiBzcmNQYXRoLCBj
b25zdCBXZWJDb3JlOjpLVVJMJiBkZXN0UGF0aCwgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0Jy
aWRnZSosIGNvbnN0IFN0cmluZyYgbW9kZSk7CiAgICAgc3RhdGljIHZvaWQgY29weU9uTWFpblRo
cmVhZChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViRmlsZVN5c3RlbSosIGNv
bnN0IFdlYkNvcmU6OktVUkwmIHNyY1BhdGgsIGNvbnN0IFdlYkNvcmU6OktVUkwmIGRlc3RQYXRo
LCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlKiwgY29uc3QgU3RyaW5nJiBtb2RlKTsK
ICAgICBzdGF0aWMgdm9pZCByZW1vdmVPbk1haW5UaHJlYWQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIFdlYkZpbGVTeXN0ZW0qLCBjb25zdCBXZWJDb3JlOjpLVVJMJiBwYXRoLCBX
b3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlKiwgY29uc3QgU3RyaW5nJiBtb2RlKTsKZGlm
ZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBkMjk0YmVm
Li5mMzE1ZTExIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTEtMTItMjggIERtaXRyeSBMb21vdiAgPGRzbG9tb3ZA
Z29vZ2xlLmNvbT4KKworCisgICAgICAgIFtXZWJXb3JrZXJzXVtDaHJvbWl1bV0gUmVtb3ZlIHJl
bWFpbnMgb2YgY3Jvc3MtcHJvY2VzcyBkZWRpY2F0ZWQgd29ya2VyIGltcGxlbWVudGF0aW9uLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY1MDkKKyAg
ICAgICAgSnVzdCByZW5hbWVzLCBtZXJnZXMgYW5kIHJlbW92YWwgb2YgZGVhZCBjb2RlLiBIZXJl
IGFyZSB0aGUgbGlzdCBvZiByZW5hbWVzOgorICAgICAgICAgIC0gV2ViQ29tbW9uV29ya2VyQ2xp
ZW50IG1lcmdlZCB3aXRoIFdlYldvcmtlckNsaWVudCBhbmQgcmVuYW1lZCB0byBXZWJTaGFyZWRX
b3JrZXJDbGllbnQKKyAgICAgICAgICAtIE5ld1dlYkNvbW1vbldvcmtlckNsaWVudCByZW5hbWVk
IHRvIFdlYkNvbW1vbldvcmtlckNsaWVudAorICAgICAgICAgIC0gV2ViV29ya2VyQmFzZSBtZXJn
ZWQgaW50byBXZWJTaGFyZWRXb3JrZXJJbXBsCisgICAgICAgICAgLSBOZXdXZWJXb3JrZXJCYXNl
IHJlbmFtZWQgaW50byBXZWJXb3JrZXJCYXNlCisgCisgICAgICAgIFJldmlld2VkIGJ5IERhdmlk
IExldmluLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFdlYldvcmtl
ci5oOgorICAgICAgICAoVGVzdFdlYldvcmtlcjo6Y3JlYXRlV29ya2VyKToKKyAgICAgICAgKiBE
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5jcHA6CisgICAgICAgIChXZWJWaWV3
SG9zdDo6Y3JlYXRlV29ya2VyKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9X
ZWJWaWV3SG9zdC5oOgorCiAyMDExLTEyLTI4ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcu
Ym90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTAzNjIw
LgpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFdlYldvcmtl
ci5oIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFdlYldvcmtlci5oCmluZGV4
IDcxYmZmY2UuLmFkODJhODcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL1Rlc3RXZWJXb3JrZXIuaAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9U
ZXN0V2ViV29ya2VyLmgKQEAgLTMyLDggKzMyLDggQEAKICNkZWZpbmUgVGVzdFdlYldvcmtlcl9o
CiAKICNpbmNsdWRlICJXZWJNZXNzYWdlUG9ydENoYW5uZWwuaCIKKyNpbmNsdWRlICJXZWJTaGFy
ZWRXb3JrZXJDbGllbnQuaCIKICNpbmNsdWRlICJXZWJXb3JrZXIuaCIKLSNpbmNsdWRlICJXZWJX
b3JrZXJDbGllbnQuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2Ug
V2ViS2l0IHsKQEAgLTQzLDcgKzQzLDcgQEAgY2xhc3MgV2ViVVJMOwogfQogCiBjbGFzcyBUZXN0
V2ViV29ya2VyIDogcHVibGljIFdlYktpdDo6V2ViV29ya2VyLAotICAgICAgICAgICAgICAgICAg
ICAgIHB1YmxpYyBXZWJLaXQ6OldlYldvcmtlckNsaWVudCwKKyAgICAgICAgICAgICAgICAgICAg
ICBwdWJsaWMgV2ViS2l0OjpXZWJTaGFyZWRXb3JrZXJDbGllbnQsCiAgICAgICAgICAgICAgICAg
ICAgICAgcHVibGljIFdURjo6UmVmQ291bnRlZDxUZXN0V2ViV29ya2VyPiB7CiBwdWJsaWM6CiAg
ICAgVGVzdFdlYldvcmtlcigpCkBAIC04MCw3ICs4MCw3IEBAIHB1YmxpYzoKICAgICAgICAgLy8g
UmVsZWFzZXMgdGhlIHJlZmVyZW5jZSBoZWxkIGZvciB3b3JrZXIgY29udGV4dCBvYmplY3QuCiAg
ICAgICAgIGRlcmVmKCk7CiAgICAgfQotICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJXb3JrZXIqIGNy
ZWF0ZVdvcmtlcihXZWJLaXQ6OldlYldvcmtlckNsaWVudCopIHsgcmV0dXJuIDA7IH0KKyAgICB2
aXJ0dWFsIFdlYktpdDo6V2ViV29ya2VyKiBjcmVhdGVXb3JrZXIoV2ViS2l0OjpXZWJTaGFyZWRX
b3JrZXJDbGllbnQqKSB7IHJldHVybiAwOyB9CiAgICAgdmlydHVhbCBXZWJLaXQ6OldlYk5vdGlm
aWNhdGlvblByZXNlbnRlciogbm90aWZpY2F0aW9uUHJlc2VudGVyKCkgeyByZXR1cm4gMDsgfQog
ICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJBcHBsaWNhdGlvbkNhY2hlSG9zdCogY3JlYXRlQXBwbGlj
YXRpb25DYWNoZUhvc3QoV2ViS2l0OjpXZWJBcHBsaWNhdGlvbkNhY2hlSG9zdENsaWVudCopIHsg
cmV0dXJuIDA7IH0KICAgICB2aXJ0dWFsIGJvb2wgYWxsb3dEYXRhYmFzZShXZWJLaXQ6OldlYkZy
YW1lKiwgY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmLCBjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYs
IHVuc2lnbmVkIGxvbmcpIHsgcmV0dXJuIHRydWU7IH0KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1dlYlZpZXdIb3N0LmNwcAppbmRleCBmZmUzYjE2Li4yNGJkNDhmIDEwMDY0NAot
LS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5jcHAKKysrIGIv
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuY3BwCkBAIC04MzYsNyAr
ODM2LDcgQEAgV2ViUGx1Z2luKiBXZWJWaWV3SG9zdDo6Y3JlYXRlUGx1Z2luKFdlYkZyYW1lKiBm
cmFtZSwgY29uc3QgV2ViUGx1Z2luUGFyYW1zJiBwYXIKICAgICByZXR1cm4gd2Via2l0X3N1cHBv
cnQ6OkNyZWF0ZVdlYlBsdWdpbihmcmFtZSwgcGFyYW1zKTsKIH0KIAotV2ViV29ya2VyKiBXZWJW
aWV3SG9zdDo6Y3JlYXRlV29ya2VyKFdlYkZyYW1lKiwgV2ViV29ya2VyQ2xpZW50KikKK1dlYldv
cmtlciogV2ViVmlld0hvc3Q6OmNyZWF0ZVdvcmtlcihXZWJGcmFtZSosIFdlYlNoYXJlZFdvcmtl
ckNsaWVudCopCiB7CiAgICAgcmV0dXJuIG5ldyBUZXN0V2ViV29ya2VyKCk7CiB9CmRpZmYgLS1n
aXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5oIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuaAppbmRleCA5MjIxNjNhLi5hMmY3
YmNhIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9z
dC5oCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmgKQEAg
LTU1LDYgKzU1LDcgQEAgY2xhc3MgV2ViRGV2aWNlT3JpZW50YXRpb25DbGllbnRNb2NrOwogY2xh
c3MgV2ViR2VvbG9jYXRpb25DbGllbnQ7CiBjbGFzcyBXZWJHZW9sb2NhdGlvbkNsaWVudE1vY2s7
CiBjbGFzcyBXZWJHZW9sb2NhdGlvblNlcnZpY2VNb2NrOworY2xhc3MgV2ViU2hhcmVkV29ya2Vy
Q2xpZW50OwogY2xhc3MgV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyOwogY2xhc3MgV2ViU3BlZWNo
SW5wdXRDb250cm9sbGVyTW9jazsKIGNsYXNzIFdlYlNwZWVjaElucHV0TGlzdGVuZXI7CkBAIC0x
NzMsNyArMTc0LDcgQEAgY2xhc3MgV2ViVmlld0hvc3QgOiBwdWJsaWMgV2ViS2l0OjpXZWJTcGVs
bENoZWNrQ2xpZW50LCBwdWJsaWMgV2ViS2l0OjpXZWJWaWV3Q2wKIAogICAgIC8vIFdlYktpdDo6
V2ViRnJhbWVDbGllbnQKICAgICB2aXJ0dWFsIFdlYktpdDo6V2ViUGx1Z2luKiBjcmVhdGVQbHVn
aW4oV2ViS2l0OjpXZWJGcmFtZSosIGNvbnN0IFdlYktpdDo6V2ViUGx1Z2luUGFyYW1zJik7Ci0g
ICAgdmlydHVhbCBXZWJLaXQ6OldlYldvcmtlciogY3JlYXRlV29ya2VyKFdlYktpdDo6V2ViRnJh
bWUqLCBXZWJLaXQ6OldlYldvcmtlckNsaWVudCopOworICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJX
b3JrZXIqIGNyZWF0ZVdvcmtlcihXZWJLaXQ6OldlYkZyYW1lKiwgV2ViS2l0OjpXZWJTaGFyZWRX
b3JrZXJDbGllbnQqKTsKICAgICB2aXJ0dWFsIFdlYktpdDo6V2ViTWVkaWFQbGF5ZXIqIGNyZWF0
ZU1lZGlhUGxheWVyKFdlYktpdDo6V2ViRnJhbWUqLCBXZWJLaXQ6OldlYk1lZGlhUGxheWVyQ2xp
ZW50Kik7CiAgICAgdmlydHVhbCBXZWJLaXQ6OldlYkFwcGxpY2F0aW9uQ2FjaGVIb3N0KiBjcmVh
dGVBcHBsaWNhdGlvbkNhY2hlSG9zdChXZWJLaXQ6OldlYkZyYW1lKiwgV2ViS2l0OjpXZWJBcHBs
aWNhdGlvbkNhY2hlSG9zdENsaWVudCopOwogICAgIHZpcnR1YWwgdm9pZCBsb2FkVVJMRXh0ZXJu
YWxseShXZWJLaXQ6OldlYkZyYW1lKiwgY29uc3QgV2ViS2l0OjpXZWJVUkxSZXF1ZXN0JiwgV2Vi
S2l0OjpXZWJOYXZpZ2F0aW9uUG9saWN5KTsK
</data>
<flag name="commit-queue"
          id="121020"
          type_id="3"
          status="-"
          setter="dslomov"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120704</attachid>
            <date>2011-12-28 15:39:22 -0800</date>
            <delta_ts>2011-12-28 16:01:16 -0800</delta_ts>
            <desc>Missing file</desc>
            <filename>66509.patch</filename>
            <type>text/plain</type>
            <size>83624</size>
            <attacher name="Dmitry Lomov">dslomov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggMWE1MjAxZC4uMDJiY2NiOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4NyBAQAorMjAxMS0xMi0yOCAgRG1pdHJ5IExv
bW92ICA8ZHNsb21vdkBnb29nbGUuY29tPgorCisgICAgICAgIFtXZWJXb3JrZXJzXVtDaHJvbWl1
bV0gUmVtb3ZlIHJlbWFpbnMgb2YgY3Jvc3MtcHJvY2VzcyBkZWRpY2F0ZWQgd29ya2VyIGltcGxl
bWVudGF0aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NjY1MDkKKyAgICAgICAgSnVzdCByZW5hbWVzLCBtZXJnZXMgYW5kIHJlbW92YWwgb2YgZGVh
ZCBjb2RlLiBIZXJlIGFyZSB0aGUgbGlzdCBvZiByZW5hbWVzOgorICAgICAgICAgIC0gV2ViQ29t
bW9uV29ya2VyQ2xpZW50IG1lcmdlZCB3aXRoIFdlYldvcmtlckNsaWVudCBhbmQgcmVuYW1lZCB0
byBXZWJTaGFyZWRXb3JrZXJDbGllbnQKKyAgICAgICAgICAtIE5ld1dlYkNvbW1vbldvcmtlckNs
aWVudCByZW5hbWVkIHRvIFdlYkNvbW1vbldvcmtlckNsaWVudAorICAgICAgICAgIC0gV2ViV29y
a2VyQmFzZSBtZXJnZWQgaW50byBXZWJTaGFyZWRXb3JrZXJJbXBsCisgICAgICAgICAgLSBOZXdX
ZWJXb3JrZXJCYXNlIHJlbmFtZWQgaW50byBXZWJXb3JrZXJCYXNlCisgICAgICAgIFdlYldvcmtl
ckNsaWVudC5oIGhhcyBhICIjZGVmaW5lIFdlYldvcmtlckNsaWVudCBXZWJTaGFyZWRXb3JrZXJD
bGllbnQiIHRvIGtlZXAgY2hyb21pdW0gYnVpbGRpbmcuCisgICAgICAgIFdpbGwgYmUgcmVtb3Zl
ZCBhZnRlciBjb29yZGluYXRlZCBwYXRjaCBpbiBjaHJvbWl1bS4KKworICAgICAgICBSZXZpZXdl
ZCBieSBEYXZpZCBMZXZpbi4KKworICAgICAgICAqIFdlYktpdC5neXA6CisgICAgICAgICogcHVi
bGljL1dlYkNvbW1vbldvcmtlckNsaWVudC5oOgorICAgICAgICAqIHB1YmxpYy9XZWJTaGFyZWRX
b3JrZXIuaDoKKyAgICAgICAgKiBwdWJsaWMvV2ViU2hhcmVkV29ya2VyQ2xpZW50Lmg6IENvcGll
ZCBmcm9tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNvbW1vbldvcmtlckNsaWVu
dC5oLgorICAgICAgICAoV2ViS2l0OjpXZWJTaGFyZWRXb3JrZXJDbGllbnQ6OnBvc3RDb25zb2xl
TWVzc2FnZVRvV29ya2VyT2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViU2hhcmVkV29ya2Vy
Q2xpZW50OjphbGxvd0ZpbGVTeXN0ZW0pOgorICAgICAgICAoV2ViS2l0OjpXZWJTaGFyZWRXb3Jr
ZXJDbGllbnQ6Om9wZW5GaWxlU3lzdGVtKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2hhcmVkV29y
a2VyQ2xpZW50OjpkaXNwYXRjaERldlRvb2xzTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlNoYXJlZFdvcmtlckNsaWVudDo6c2F2ZURldlRvb2xzQWdlbnRTdGF0ZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlNoYXJlZFdvcmtlckNsaWVudDo6fldlYlNoYXJlZFdvcmtlckNsaWVudCk6Cisg
ICAgICAgICogcHVibGljL1dlYldvcmtlckNsaWVudC5oOgorICAgICAgICAqIHNyYy9EYXRhYmFz
ZU9ic2VydmVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6QWxsb3dEYXRhYmFzZU1haW5UaHJlYWRC
cmlkZ2U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkFsbG93RGF0YWJhc2VNYWluVGhyZWFk
QnJpZGdlOjpBbGxvd0RhdGFiYXNlTWFpblRocmVhZEJyaWRnZSk6CisgICAgICAgIChXZWJLaXQ6
OkFsbG93RGF0YWJhc2VNYWluVGhyZWFkQnJpZGdlOjphbGxvd0RhdGFiYXNlVGFzayk6CisgICAg
ICAgIChXZWJLaXQ6OmFsbG93RGF0YWJhc2VGb3JXb3JrZXIpOgorICAgICAgICAoV2ViQ29yZTo6
RGF0YWJhc2VPYnNlcnZlcjo6Y2FuRXN0YWJsaXNoRGF0YWJhc2UpOgorICAgICAgICAqIHNyYy9J
REJGYWN0b3J5QmFja2VuZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6SURCRmFjdG9yeUJh
Y2tlbmRQcm94eTo6b3BlbkZyb21Xb3JrZXIpOgorICAgICAgICAqIHNyYy9Mb2NhbEZpbGVTeXN0
ZW1DaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpvcGVuRmlsZVN5c3RlbUhlbHBlcik6
CisgICAgICAgICogc3JjL1dlYlNoYXJlZFdvcmtlckltcGwuY3BwOgorICAgICAgICAoV2ViS2l0
Ojppbml0aWFsaXplV2ViS2l0U3RhdGljVmFsdWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2hh
cmVkV29ya2VySW1wbDo6V2ViU2hhcmVkV29ya2VySW1wbCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlNoYXJlZFdvcmtlckltcGw6On5XZWJTaGFyZWRXb3JrZXJJbXBsKToKKyAgICAgICAgKFdlYktp
dDo6V2ViU2hhcmVkV29ya2VySW1wbDo6c3RvcFdvcmtlclRocmVhZCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlNoYXJlZFdvcmtlckltcGw6OmluaXRpYWxpemVMb2FkZXIpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJTaGFyZWRXb3JrZXJJbXBsOjpkaWRDcmVhdGVEYXRhU291cmNlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViU2hhcmVkV29ya2VySW1wbDo6Y3JlYXRlQXBwbGljYXRpb25DYWNoZUhvc3Qp
OgorICAgICAgICAoV2ViS2l0OjpXZWJTaGFyZWRXb3JrZXJJbXBsOjpwb3N0TWVzc2FnZVRvV29y
a2VyT2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViU2hhcmVkV29ya2VySW1wbDo6cG9zdE1l
c3NhZ2VUYXNrKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2hhcmVkV29ya2VySW1wbDo6cG9zdEV4
Y2VwdGlvblRvV29ya2VyT2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViU2hhcmVkV29ya2Vy
SW1wbDo6cG9zdEV4Y2VwdGlvblRhc2spOgorICAgICAgICAoV2ViS2l0OjpXZWJTaGFyZWRXb3Jr
ZXJJbXBsOjpwb3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlNoYXJlZFdvcmtlckltcGw6OnBvc3RDb25zb2xlTWVzc2FnZVRhc2spOgorICAgICAg
ICAoV2ViS2l0OjpXZWJTaGFyZWRXb3JrZXJJbXBsOjpwb3N0TWVzc2FnZVRvUGFnZUluc3BlY3Rv
cik6CisgICAgICAgIChXZWJLaXQ6OldlYlNoYXJlZFdvcmtlckltcGw6OnBvc3RNZXNzYWdlVG9Q
YWdlSW5zcGVjdG9yVGFzayk6CisgICAgICAgIChXZWJLaXQ6OldlYlNoYXJlZFdvcmtlckltcGw6
OnVwZGF0ZUluc3BlY3RvclN0YXRlQ29va2llKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2hhcmVk
V29ya2VySW1wbDo6dXBkYXRlSW5zcGVjdG9yU3RhdGVDb29raWVUYXNrKToKKyAgICAgICAgKFdl
YktpdDo6V2ViU2hhcmVkV29ya2VySW1wbDo6Y29uZmlybU1lc3NhZ2VGcm9tV29ya2VyT2JqZWN0
KToKKyAgICAgICAgKFdlYktpdDo6V2ViU2hhcmVkV29ya2VySW1wbDo6Y29uZmlybU1lc3NhZ2VU
YXNrKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2hhcmVkV29ya2VySW1wbDo6cmVwb3J0UGVuZGlu
Z0FjdGl2aXR5KToKKyAgICAgICAgKFdlYktpdDo6V2ViU2hhcmVkV29ya2VySW1wbDo6cmVwb3J0
UGVuZGluZ0FjdGl2aXR5VGFzayk6CisgICAgICAgIChXZWJLaXQ6OldlYlNoYXJlZFdvcmtlcklt
cGw6OndvcmtlckNvbnRleHRDbG9zZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJTaGFyZWRXb3Jr
ZXJJbXBsOjp3b3JrZXJDb250ZXh0Q2xvc2VkVGFzayk6CisgICAgICAgIChXZWJLaXQ6OldlYlNo
YXJlZFdvcmtlckltcGw6OndvcmtlckNvbnRleHREZXN0cm95ZWQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJTaGFyZWRXb3JrZXJJbXBsOjp3b3JrZXJDb250ZXh0RGVzdHJveWVkVGFzayk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlNoYXJlZFdvcmtlckltcGw6OnBvc3RUYXNrVG9Mb2FkZXIpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJTaGFyZWRXb3JrZXJJbXBsOjpwb3N0VGFza0Zvck1vZGVUb1dvcmtl
ckNvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJTaGFyZWRXb3JrZXI6OmNyZWF0ZSk6Cisg
ICAgICAgICogc3JjL1dlYlNoYXJlZFdvcmtlckltcGwuaDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
U2hhcmVkV29ya2VySW1wbDo6dmlldyk6CisgICAgICAgIChXZWJLaXQ6OldlYlNoYXJlZFdvcmtl
ckltcGw6OmNvbW1vbkNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNoYXJlZFdvcmtlcklt
cGw6OmNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNoYXJlZFdvcmtlckltcGw6OnNldFdv
cmtlclRocmVhZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNoYXJlZFdvcmtlckltcGw6Ondvcmtl
clRocmVhZCk6CisgICAgICAgICogc3JjL1dlYldvcmtlckJhc2UuY3BwOgorICAgICAgICAoV2Vi
S2l0OjppbnZva2VUYXNrTWV0aG9kKToKKyAgICAgICAgKFdlYktpdDo6V2ViV29ya2VyQmFzZTo6
ZGlzcGF0Y2hUYXNrVG9NYWluVGhyZWFkKToKKyAgICAgICAgKiBzcmMvV2ViV29ya2VyQmFzZS5o
OgorICAgICAgICAqIHNyYy9XZWJXb3JrZXJDbGllbnRJbXBsLmNwcDoKKyAgICAgICAgKiBzcmMv
V2ViV29ya2VyQ2xpZW50SW1wbC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJXb3JrZXJDbGllbnRJ
bXBsOjpjb21tb25DbGllbnQpOgorICAgICAgICAqIHNyYy9XZWJXb3JrZXJJbXBsLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBzcmMvV2ViV29ya2VySW1wbC5oOiBSZW1vdmVkLgorICAgICAgICAq
IHNyYy9Xb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZTo6cG9zdE9wZW5GaWxlU3lzdGVtVG9N
YWluVGhyZWFkKToKKyAgICAgICAgKFdlYktpdDo6V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0Jy
aWRnZTo6b3BlbkZpbGVTeXN0ZW1Pbk1haW5UaHJlYWQpOgorICAgICAgICAqIHNyYy9Xb3JrZXJG
aWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlLmg6CisKIDIwMTEtMTItMjggIFNoZXJpZmYgQm90ICA8
d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxp
bmcgb3V0IHIxMDM2MjAuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktp
dC5neXAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKaW5kZXggMmJhNGY0NC4u
ZDJjMjcwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cApAQCAtMjM1LDYgKzIzNSw3IEBA
CiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJTZWN1cml0eVBvbGljeS5oJywKICAgICAgICAg
ICAgICAgICAncHVibGljL1dlYlNlbGVjdEVsZW1lbnQuaCcsCiAgICAgICAgICAgICAgICAgJ3B1
YmxpYy9XZWJTZXR0aW5ncy5oJywKKyAgICAgICAgICAgICAgICAncHVibGljL1dlYlNoYXJlZFdv
cmtlckNsaWVudC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYlNoYXJlZFdvcmtlci5o
JywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYlNoYXJlZFdvcmtlclJlcG9zaXRvcnkuaCcs
CiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJTb2NrZXQuaCcsCkBAIC02NjUsOCArNjY2LDYg
QEAKICAgICAgICAgICAgICAgICAnc3JjL1dlYldvcmtlckJhc2UuaCcsCiAgICAgICAgICAgICAg
ICAgJ3NyYy9XZWJXb3JrZXJDbGllbnRJbXBsLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9X
ZWJXb3JrZXJDbGllbnRJbXBsLmgnLAotICAgICAgICAgICAgICAgICdzcmMvV2ViV29ya2VySW1w
bC5jcHAnLAotICAgICAgICAgICAgICAgICdzcmMvV2ViV29ya2VySW1wbC5oJywKICAgICAgICAg
ICAgICAgICAnc3JjL1dlYldvcmtlclJ1bkxvb3AuY3BwJywKICAgICAgICAgICAgICAgICAnc3Jj
L1dvcmtlckFzeW5jRmlsZVN5c3RlbUNocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3Ny
Yy9Xb3JrZXJBc3luY0ZpbGVTeXN0ZW1DaHJvbWl1bS5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNvbW1vbldvcmtlckNsaWVudC5oIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ29tbW9uV29ya2VyQ2xpZW50LmgKaW5kZXggYTc5NDUz
OS4uMmZmYjU0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2Vi
Q29tbW9uV29ya2VyQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViQ29tbW9uV29ya2VyQ2xpZW50LmgKQEAgLTQ0LDcgKzQ0LDcgQEAgY2xhc3MgV2ViU3RyaW5n
OwogY2xhc3MgV2ViV29ya2VyOwogY2xhc3MgV2ViV29ya2VyQ2xpZW50OwogCi1jbGFzcyBOZXdX
ZWJDb21tb25Xb3JrZXJDbGllbnQgeworY2xhc3MgV2ViQ29tbW9uV29ya2VyQ2xpZW50IHsKIHB1
YmxpYzoKICAgICAvLyBDYWxsZWQgb24gdGhlIG1haW4gd2Via2l0IHRocmVhZCBiZWZvcmUgb3Bl
bmluZyBhIHdlYiBkYXRhYmFzZS4KICAgICB2aXJ0dWFsIGJvb2wgYWxsb3dEYXRhYmFzZShXZWJG
cmFtZSosIGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgY29uc3QgV2ViU3RyaW5nJiBkaXNwbGF5TmFt
ZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKSA9IDA7CkBAIC01Niw2NiArNTYsNiBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIG9wZW5GaWxlU3lzdGVtKFdlYkZpbGVTeXN0ZW06OlR5
cGUsIGxvbmcgbG9uZyBzaXplLCBib29sIGNyZWF0ZSwgV2ViRmlsZVN5c3RlbUNhbGxiYWNrcyop
ID0gMDsKIH07CiAKLS8vIFByb3ZpZGVzIGFuIGludGVyZmFjZSBiYWNrIHRvIHRoZSBpbi1wYWdl
IHNjcmlwdCBvYmplY3QgZm9yIGEgd29ya2VyLgotLy8gVGhpcyBpbnRlcmZhY2UgY29udGFpbnMg
Y29tbW9uIEFQSXMgdXNlZCBieSBib3RoIHNoYXJlZCBhbmQgZGVkaWNhdGVkCi0vLyB3b3JrZXJz
LgotLy8gQWxsIGZ1bmN0aW9ucyBhcmUgZXhwZWN0ZWQgdG8gYmUgY2FsbGVkIGJhY2sgb24gdGhl
IHRocmVhZCB0aGF0IGNyZWF0ZWQKLS8vIHRoZSBXb3JrZXIgb2JqZWN0LCB1bmxlc3Mgbm90ZWQu
Ci1jbGFzcyBXZWJDb21tb25Xb3JrZXJDbGllbnQgOiBwdWJsaWMgTmV3V2ViQ29tbW9uV29ya2Vy
Q2xpZW50IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgcG9zdEV4Y2VwdGlvblRvV29ya2Vy
T2JqZWN0KAotICAgICAgICBjb25zdCBXZWJTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbGluZU51
bWJlciwKLSAgICAgICAgY29uc3QgV2ViU3RyaW5nJiBzb3VyY2VVUkwpID0gMDsKLQotICAgIC8v
IEZJWE1FOiB0aGUgYmVsb3cgaXMgZm9yIGNvbXBhdGliaWxpdHkgb25seSBhbmQgc2hvdWxkIGJl
ICAgCi0gICAgLy8gcmVtb3ZlZCBvbmNlIENocm9taXVtIGlzIHVwZGF0ZWQgdG8gcmVtb3ZlIG1l
c3NhZ2UKLSAgICAvLyBkZXN0aW5hdGlvbiBwYXJhbWV0ZXIgPGh0dHA6Ly93ZWJraXQub3JnL2Iv
MzcxNTU+LgotICAgIHZpcnR1YWwgdm9pZCBwb3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVj
dChpbnQsIGludCBzb3VyY2VJZGVudGlmaWVyLCBpbnQgbWVzc2FnZVR5cGUsIGludCBtZXNzYWdl
TGV2ZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFdlYlN0cmluZyYgbWVzc2FnZSwgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFdlYlN0cmlu
ZyYgc291cmNlVVJMKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcG9zdENvbnNvbGVNZXNzYWdl
VG9Xb3JrZXJPYmplY3QoaW50IHNvdXJjZUlkZW50aWZpZXIsIGludCBtZXNzYWdlVHlwZSwgaW50
IG1lc3NhZ2VMZXZlbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgV2ViU3RyaW5nJiBtZXNzYWdlLCBpbnQgbGluZU51bWJlciwgY29uc3Qg
V2ViU3RyaW5nJiBzb3VyY2VVUkwpCi0gICAgewotICAgICAgICBwb3N0Q29uc29sZU1lc3NhZ2VU
b1dvcmtlck9iamVjdCgwLCBzb3VyY2VJZGVudGlmaWVyLCBtZXNzYWdlVHlwZSwgbWVzc2FnZUxl
dmVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLCBs
aW5lTnVtYmVyLCBzb3VyY2VVUkwpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB3b3JrZXJD
b250ZXh0Q2xvc2VkKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB3b3JrZXJDb250ZXh0RGVzdHJv
eWVkKCkgPSAwOwotCi0gICAgLy8gUmV0dXJucyB0aGUgbm90aWZpY2F0aW9uIHByZXNlbnRlciBm
b3IgdGhpcyB3b3JrZXIgY29udGV4dC4gIFBvaW50ZXIKLSAgICAvLyBpcyBvd25lZCBieSB0aGUg
b2JqZWN0IGltcGxlbWVudGluZyBXZWJDb21tb25Xb3JrZXJDbGllbnQuCi0gICAgdmlydHVhbCBX
ZWJOb3RpZmljYXRpb25QcmVzZW50ZXIqIG5vdGlmaWNhdGlvblByZXNlbnRlcigpID0gMDsKLQot
ICAgIC8vIFRoaXMgY2FuIGJlIGNhbGxlZCBvbiBhbnkgdGhyZWFkIHRvIGNyZWF0ZSBhIG5lc3Rl
ZCBXZWJXb3JrZXIuCi0gICAgLy8gV2ViU2hhcmVkV29ya2VycyBhcmUgbm90IGluc3RhbnRpYXRl
ZCB2aWEgdGhpcyBBUEkgLSBpbnN0ZWFkCi0gICAgLy8gdGhleSBhcmUgY3JlYXRlZCB2aWEgdGhl
IFdlYlNoYXJlZFdvcmtlclJlcG9zaXRvcnkuCi0gICAgdmlydHVhbCBXZWJXb3JrZXIqIGNyZWF0
ZVdvcmtlcihXZWJXb3JrZXJDbGllbnQqIGNsaWVudCkgPSAwOwotCi0gICAgLy8gQ2FsbGVkIG9u
IHRoZSBtYWluIHdlYmtpdCB0aHJlYWQgaW4gdGhlIHdvcmtlciBwcm9jZXNzIGR1cmluZyBpbml0
aWFsaXphdGlvbi4KLSAgICB2aXJ0dWFsIFdlYkFwcGxpY2F0aW9uQ2FjaGVIb3N0KiBjcmVhdGVB
cHBsaWNhdGlvbkNhY2hlSG9zdChXZWJBcHBsaWNhdGlvbkNhY2hlSG9zdENsaWVudCopID0gMDsK
LQotICAgIC8vIENhbGxlZCBvbiB0aGUgbWFpbiB3ZWJraXQgdGhyZWFkIGJlZm9yZSBvcGVuaW5n
IGEgd2ViIGRhdGFiYXNlLgotICAgIHZpcnR1YWwgYm9vbCBhbGxvd0RhdGFiYXNlKFdlYkZyYW1l
KiwgY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBjb25zdCBXZWJTdHJpbmcmIGRpc3BsYXlOYW1lLCB1
bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpID0gMDsKLQotICAgIC8vIENhbGxlZCBvbiB0aGUg
bWFpbiB3ZWJraXQgdGhyZWFkIGJlZm9yZSBvcGVuaW5nIGEgZmlsZSBzeXN0ZW0uCi0gICAgdmly
dHVhbCBib29sIGFsbG93RmlsZVN5c3RlbSgpCi0gICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0KLSAgICAvLyBDYWxsZWQgb24gdGhlIG1haW4gd2Via2l0IHRocmVhZCBiZWZvcmUg
b3BlbmluZyBhIGZpbGUgc3lzdGVtLgotICAgIHZpcnR1YWwgdm9pZCBvcGVuRmlsZVN5c3RlbShX
ZWJGaWxlU3lzdGVtOjpUeXBlLCBsb25nIGxvbmcgc2l6ZSwgYm9vbCBjcmVhdGUsIFdlYkZpbGVT
eXN0ZW1DYWxsYmFja3MqKQotICAgIHsKLSAgICAgICAgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERldlRvb2xzTWVzc2FnZShj
b25zdCBXZWJTdHJpbmcmKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2F2ZURldlRvb2xzQWdlbnRT
dGF0ZShjb25zdCBXZWJTdHJpbmcmKSB7IH0KLQotcHJvdGVjdGVkOgotICAgIH5XZWJDb21tb25X
b3JrZXJDbGllbnQoKSB7IH0KLX07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJGcmFtZUNsaWVudC5oIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRnJhbWVDbGllbnQuaAppbmRleCBiMjEzMjI5
Li4wYmYzMDU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJG
cmFtZUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkZyYW1l
Q2xpZW50LmgKQEAgLTY3LDcgKzY3LDcgQEAgY2xhc3MgV2ViVVJMTG9hZGVyOwogY2xhc3MgV2Vi
VVJMUmVxdWVzdDsKIGNsYXNzIFdlYlVSTFJlc3BvbnNlOwogY2xhc3MgV2ViV29ya2VyOwotY2xh
c3MgV2ViV29ya2VyQ2xpZW50OworY2xhc3MgV2ViU2hhcmVkV29ya2VyQ2xpZW50Owogc3RydWN0
IFdlYlBsdWdpblBhcmFtczsKIHN0cnVjdCBXZWJSZWN0Owogc3RydWN0IFdlYlNpemU7CkBAIC04
MSw3ICs4MSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFdlYlBsdWdpbiogY3JlYXRlUGx1Z2lu
KFdlYkZyYW1lKiwgY29uc3QgV2ViUGx1Z2luUGFyYW1zJikgeyByZXR1cm4gMDsgfQogCiAgICAg
Ly8gTWF5IHJldHVybiBudWxsLgotICAgIHZpcnR1YWwgV2ViV29ya2VyKiBjcmVhdGVXb3JrZXIo
V2ViRnJhbWUqLCBXZWJXb3JrZXJDbGllbnQqKSB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBX
ZWJXb3JrZXIqIGNyZWF0ZVdvcmtlcihXZWJGcmFtZSosIFdlYlNoYXJlZFdvcmtlckNsaWVudCop
IHsgcmV0dXJuIDA7IH0KIAogICAgIC8vIE1heSByZXR1cm4gbnVsbC4KICAgICB2aXJ0dWFsIFdl
YlNoYXJlZFdvcmtlciogY3JlYXRlU2hhcmVkV29ya2VyKFdlYkZyYW1lKiwgY29uc3QgV2ViVVJM
JiwgY29uc3QgV2ViU3RyaW5nJiwgdW5zaWduZWQgbG9uZyBsb25nKSB7IHJldHVybiAwOyB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTaGFyZWRXb3JrZXIu
aCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNoYXJlZFdvcmtlci5oCmluZGV4
IDdkNWQwMDMuLjQ0N2Y3ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYlNoYXJlZFdvcmtlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYlNoYXJlZFdvcmtlci5oCkBAIC00MSw3ICs0MSw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewog
CiBjbGFzcyBXZWJTdHJpbmc7CiBjbGFzcyBXZWJNZXNzYWdlUG9ydENoYW5uZWw7Ci1jbGFzcyBX
ZWJDb21tb25Xb3JrZXJDbGllbnQ7CitjbGFzcyBXZWJTaGFyZWRXb3JrZXJDbGllbnQ7CiBjbGFz
cyBXZWJVUkw7CiAKIC8vIFRoaXMgaXMgdGhlIGludGVyZmFjZSB0byBhIFNoYXJlZFdvcmtlciB0
aHJlYWQuCkBAIC00OSw3ICs0OSw3IEBAIGNsYXNzIFdlYlVSTDsKIGNsYXNzIFdlYlNoYXJlZFdv
cmtlciB7CiBwdWJsaWM6CiAgICAgLy8gSW52b2tlZCBmcm9tIHRoZSB3b3JrZXIgdGhyZWFkIHRv
IGluc3RhbnRpYXRlIGEgV2ViU2hhcmVkV29ya2VyIHRoYXQgaW50ZXJhY3RzIHdpdGggdGhlIFdl
YktpdCB3b3JrZXIgY29tcG9uZW50cy4KLSAgICBXRUJLSVRfRVhQT1JUIHN0YXRpYyBXZWJTaGFy
ZWRXb3JrZXIqIGNyZWF0ZShXZWJDb21tb25Xb3JrZXJDbGllbnQqKTsKKyAgICBXRUJLSVRfRVhQ
T1JUIHN0YXRpYyBXZWJTaGFyZWRXb3JrZXIqIGNyZWF0ZShXZWJTaGFyZWRXb3JrZXJDbGllbnQq
KTsKIAogICAgIHZpcnR1YWwgfldlYlNoYXJlZFdvcmtlcigpIHt9OwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTaGFyZWRXb3JrZXJDbGllbnQuaCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNoYXJlZFdvcmtlckNsaWVudC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxNzAwYzYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTaGFyZWRXb3JrZXJDbGllbnQuaApA
QCAtMCwwICsxLDExMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
ICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViU2hhcmVkV29ya2VyQ2xpZW50X2gKKyNkZWZpbmUg
V2ViU2hhcmVkV29ya2VyQ2xpZW50X2gKKworI2luY2x1ZGUgIldlYkNvbW1vbldvcmtlckNsaWVu
dC5oIgorI2luY2x1ZGUgIldlYk1lc3NhZ2VQb3J0Q2hhbm5lbC5oIgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworY2xhc3MgV2ViTm90aWZpY2F0aW9uUHJlc2VudGVyOworY2xhc3MgV2ViU3RyaW5n
OworY2xhc3MgV2ViV29ya2VyOworCisvLyBQcm92aWRlcyBhbiBpbnRlcmZhY2UgYmFjayB0byB0
aGUgaW4tcGFnZSBzY3JpcHQgb2JqZWN0IGZvciBhIHdvcmtlci4KKy8vIEFsbCBmdW5jdGlvbnMg
YXJlIGV4cGVjdGVkIHRvIGJlIGNhbGxlZCBiYWNrIG9uIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVk
CisvLyB0aGUgV29ya2VyIG9iamVjdCwgdW5sZXNzIG5vdGVkLgorY2xhc3MgV2ViU2hhcmVkV29y
a2VyQ2xpZW50IDogcHVibGljIFdlYkNvbW1vbldvcmtlckNsaWVudCB7CitwdWJsaWM6CisgICAg
dmlydHVhbCB2b2lkIHBvc3RNZXNzYWdlVG9Xb3JrZXJPYmplY3QoCisgICAgICAgIGNvbnN0IFdl
YlN0cmluZyYsCisgICAgICAgIGNvbnN0IFdlYk1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5JikgPSAw
OworCisgICAgdmlydHVhbCB2b2lkIGNvbmZpcm1NZXNzYWdlRnJvbVdvcmtlck9iamVjdChib29s
IGhhc1BlbmRpbmdBY3Rpdml0eSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZXBvcnRQZW5kaW5n
QWN0aXZpdHkoYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkpID0gMDsKKworICAgIHZpcnR1YWwgdm9p
ZCBwb3N0RXhjZXB0aW9uVG9Xb3JrZXJPYmplY3QoCisgICAgICAgIGNvbnN0IFdlYlN0cmluZyYg
ZXJyb3JTdHJpbmcsIGludCBsaW5lTnVtYmVyLAorICAgICAgICBjb25zdCBXZWJTdHJpbmcmIHNv
dXJjZVVSTCkgPSAwOworCisgICAgLy8gRklYTUU6IHRoZSBiZWxvdyBpcyBmb3IgY29tcGF0aWJp
bGl0eSBvbmx5IGFuZCBzaG91bGQgYmUgICAKKyAgICAvLyByZW1vdmVkIG9uY2UgQ2hyb21pdW0g
aXMgdXBkYXRlZCB0byByZW1vdmUgbWVzc2FnZQorICAgIC8vIGRlc3RpbmF0aW9uIHBhcmFtZXRl
ciA8aHR0cDovL3dlYmtpdC5vcmcvYi8zNzE1NT4uCisgICAgdmlydHVhbCB2b2lkIHBvc3RDb25z
b2xlTWVzc2FnZVRvV29ya2VyT2JqZWN0KGludCwgaW50IHNvdXJjZUlkZW50aWZpZXIsIGludCBt
ZXNzYWdlVHlwZSwgaW50IG1lc3NhZ2VMZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViU3RyaW5nJiBtZXNzYWdlLCBpbnQgbGlu
ZU51bWJlciwgY29uc3QgV2ViU3RyaW5nJiBzb3VyY2VVUkwpID0gMDsKKworICAgIHZpcnR1YWwg
dm9pZCBwb3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdChpbnQgc291cmNlSWRlbnRpZmll
ciwgaW50IG1lc3NhZ2VUeXBlLCBpbnQgbWVzc2FnZUxldmVsLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJTdHJpbmcmIG1lc3NhZ2Us
IGludCBsaW5lTnVtYmVyLCBjb25zdCBXZWJTdHJpbmcmIHNvdXJjZVVSTCkKKyAgICB7CisgICAg
ICAgIHBvc3RDb25zb2xlTWVzc2FnZVRvV29ya2VyT2JqZWN0KDAsIHNvdXJjZUlkZW50aWZpZXIs
IG1lc3NhZ2VUeXBlLCBtZXNzYWdlTGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZVVSTCk7CisgICAgfQorCisg
ICAgdmlydHVhbCB2b2lkIHdvcmtlckNvbnRleHRDbG9zZWQoKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIHdvcmtlckNvbnRleHREZXN0cm95ZWQoKSA9IDA7CisKKyAgICAvLyBSZXR1cm5zIHRoZSBu
b3RpZmljYXRpb24gcHJlc2VudGVyIGZvciB0aGlzIHdvcmtlciBjb250ZXh0LiBQb2ludGVyCisg
ICAgLy8gaXMgb3duZWQgYnkgdGhlIG9iamVjdCBpbXBsZW1lbnRpbmcgV2ViQ29tbW9uV29ya2Vy
Q2xpZW50LgorICAgIHZpcnR1YWwgV2ViTm90aWZpY2F0aW9uUHJlc2VudGVyKiBub3RpZmljYXRp
b25QcmVzZW50ZXIoKSA9IDA7CisKKyAgICAvLyBUaGlzIGNhbiBiZSBjYWxsZWQgb24gYW55IHRo
cmVhZCB0byBjcmVhdGUgYSBuZXN0ZWQgV2ViV29ya2VyLgorICAgIC8vIFdlYlNoYXJlZFdvcmtl
cnMgYXJlIG5vdCBpbnN0YW50aWF0ZWQgdmlhIHRoaXMgQVBJIC0gaW5zdGVhZAorICAgIC8vIHRo
ZXkgYXJlIGNyZWF0ZWQgdmlhIHRoZSBXZWJTaGFyZWRXb3JrZXJSZXBvc2l0b3J5LgorICAgIHZp
cnR1YWwgV2ViV29ya2VyKiBjcmVhdGVXb3JrZXIoV2ViU2hhcmVkV29ya2VyQ2xpZW50KikgPSAw
OworCisgICAgLy8gQ2FsbGVkIG9uIHRoZSBtYWluIHdlYmtpdCB0aHJlYWQgaW4gdGhlIHdvcmtl
ciBwcm9jZXNzIGR1cmluZyBpbml0aWFsaXphdGlvbi4KKyAgICB2aXJ0dWFsIFdlYkFwcGxpY2F0
aW9uQ2FjaGVIb3N0KiBjcmVhdGVBcHBsaWNhdGlvbkNhY2hlSG9zdChXZWJBcHBsaWNhdGlvbkNh
Y2hlSG9zdENsaWVudCopID0gMDsKKworICAgIC8vIENhbGxlZCBvbiB0aGUgbWFpbiB3ZWJraXQg
dGhyZWFkIGJlZm9yZSBvcGVuaW5nIGEgd2ViIGRhdGFiYXNlLgorICAgIHZpcnR1YWwgYm9vbCBh
bGxvd0RhdGFiYXNlKFdlYkZyYW1lKiwgY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBjb25zdCBXZWJT
dHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpID0gMDsKKwor
ICAgIC8vIENhbGxlZCBvbiB0aGUgbWFpbiB3ZWJraXQgdGhyZWFkIGJlZm9yZSBvcGVuaW5nIGEg
ZmlsZSBzeXN0ZW0uCisgICAgdmlydHVhbCBib29sIGFsbG93RmlsZVN5c3RlbSgpCisgICAgewor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBDYWxsZWQgb24gdGhlIG1haW4g
d2Via2l0IHRocmVhZCBiZWZvcmUgb3BlbmluZyBhIGZpbGUgc3lzdGVtLgorICAgIHZpcnR1YWwg
dm9pZCBvcGVuRmlsZVN5c3RlbShXZWJGaWxlU3lzdGVtOjpUeXBlLCBsb25nIGxvbmcgc2l6ZSwg
Ym9vbCBjcmVhdGUsIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3MqKQorICAgIHsKKyAgICAgICAgV0VC
S0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBkaXNw
YXRjaERldlRvb2xzTWVzc2FnZShjb25zdCBXZWJTdHJpbmcmKSB7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgc2F2ZURldlRvb2xzQWdlbnRTdGF0ZShjb25zdCBXZWJTdHJpbmcmKSB7IH0KKworcHJvdGVj
dGVkOgorICAgIH5XZWJTaGFyZWRXb3JrZXJDbGllbnQoKSB7IH0KK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYldvcmtlckNsaWVudC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViV29ya2VyQ2xpZW50LmgKaW5kZXggZWIyZTYzZS4uNTk2OTk5ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV29ya2VyQ2xpZW50LmgKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViV29ya2VyQ2xpZW50LmgKQEAgLTMxLDMxICszMSw4
IEBACiAjaWZuZGVmIFdlYldvcmtlckNsaWVudF9oCiAjZGVmaW5lIFdlYldvcmtlckNsaWVudF9o
CiAKLSNpbmNsdWRlICJXZWJDb21tb25Xb3JrZXJDbGllbnQuaCIKLSNpbmNsdWRlICJXZWJNZXNz
YWdlUG9ydENoYW5uZWwuaCIKKyNpbmNsdWRlICJXZWJTaGFyZWRXb3JrZXJDbGllbnQuaCIKIAot
bmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYk5vdGlmaWNhdGlvblByZXNlbnRlcjsKLWNs
YXNzIFdlYlN0cmluZzsKLWNsYXNzIFdlYldvcmtlcjsKLQotLy8gUHJvdmlkZXMgYW4gaW50ZXJm
YWNlIGJhY2sgdG8gdGhlIGluLXBhZ2Ugc2NyaXB0IG9iamVjdCBmb3IgYSB3b3JrZXIuCi0vLyBB
bGwgZnVuY3Rpb25zIGFyZSBleHBlY3RlZCB0byBiZSBjYWxsZWQgYmFjayBvbiB0aGUgdGhyZWFk
IHRoYXQgY3JlYXRlZAotLy8gdGhlIFdvcmtlciBvYmplY3QsIHVubGVzcyBub3RlZC4KLWNsYXNz
IFdlYldvcmtlckNsaWVudCA6IHB1YmxpYyBXZWJDb21tb25Xb3JrZXJDbGllbnQgewotcHVibGlj
OgotICAgIHZpcnR1YWwgdm9pZCBwb3N0TWVzc2FnZVRvV29ya2VyT2JqZWN0KAotICAgICAgICBj
b25zdCBXZWJTdHJpbmcmLAotICAgICAgICBjb25zdCBXZWJNZXNzYWdlUG9ydENoYW5uZWxBcnJh
eSYpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBjb25maXJtTWVzc2FnZUZyb21Xb3JrZXJPYmpl
Y3QoYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0
UGVuZGluZ0FjdGl2aXR5KGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KSA9IDA7Ci0KLXByb3RlY3Rl
ZDoKLSAgICB+V2ViV29ya2VyQ2xpZW50KCkgeyB9Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJL
aXQKKyNkZWZpbmUgV2ViV29ya2VyQ2xpZW50IFdlYlNoYXJlZFdvcmtlckNsaWVudAogCiAjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0RhdGFiYXNlT2JzZXJ2
ZXIuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRGF0YWJhc2VPYnNlcnZlci5jcHAK
aW5kZXggMTg3YjU1ZS4uNDBiNTA0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvRGF0YWJhc2VPYnNlcnZlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvRGF0YWJhc2VPYnNlcnZlci5jcHAKQEAgLTY0LDcgKzY0LDcgQEAgc3RhdGljIGNvbnN0IGNo
YXIgYWxsb3dEYXRhYmFzZU1vZGVbXSA9ICJhbGxvd0RhdGFiYXNlTW9kZSI7CiAvLyBjYWxsIGJh
Y2sgdG8gdGhlIHdvcmtlciBjb250ZXh0LgogY2xhc3MgQWxsb3dEYXRhYmFzZU1haW5UaHJlYWRC
cmlkZ2UgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8QWxsb3dEYXRhYmFzZU1haW5UaHJl
YWRCcmlkZ2U+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxBbGxvd0RhdGFiYXNl
TWFpblRocmVhZEJyaWRnZT4gY3JlYXRlKFdlYkNvcmU6OldvcmtlckxvYWRlclByb3h5KiB3b3Jr
ZXJMb2FkZXJQcm94eSwgY29uc3QgU3RyaW5nJiBtb2RlLCBOZXdXZWJDb21tb25Xb3JrZXJDbGll
bnQqIGNvbW1vbkNsaWVudCwgV2ViRnJhbWUqIGZyYW1lLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNv
bnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxBbGxvd0RhdGFiYXNlTWFpblRocmVhZEJyaWRnZT4gY3JlYXRl
KFdlYkNvcmU6OldvcmtlckxvYWRlclByb3h5KiB3b3JrZXJMb2FkZXJQcm94eSwgY29uc3QgU3Ry
aW5nJiBtb2RlLCBXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1vbkNsaWVudCwgV2ViRnJhbWUq
IGZyYW1lLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVu
c2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgQWxsb3dEYXRhYmFzZU1haW5UaHJlYWRCcmlkZ2Uod29ya2VyTG9hZGVyUHJveHksIG1v
ZGUsIGNvbW1vbkNsaWVudCwgZnJhbWUsIG5hbWUsIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXpl
KSk7CiAgICAgfQpAQCAtOTEsNyArOTEsNyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgot
ICAgIEFsbG93RGF0YWJhc2VNYWluVGhyZWFkQnJpZGdlKFdlYkNvcmU6OldvcmtlckxvYWRlclBy
b3h5KiB3b3JrZXJMb2FkZXJQcm94eSwgY29uc3QgU3RyaW5nJiBtb2RlLCBOZXdXZWJDb21tb25X
b3JrZXJDbGllbnQqIGNvbW1vbkNsaWVudCwgV2ViRnJhbWUqIGZyYW1lLCBjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVk
U2l6ZSkKKyAgICBBbGxvd0RhdGFiYXNlTWFpblRocmVhZEJyaWRnZShXZWJDb3JlOjpXb3JrZXJM
b2FkZXJQcm94eSogd29ya2VyTG9hZGVyUHJveHksIGNvbnN0IFN0cmluZyYgbW9kZSwgV2ViQ29t
bW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQsIFdlYkZyYW1lKiBmcmFtZSwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGlt
YXRlZFNpemUpCiAgICAgICAgIDogbV93b3JrZXJMb2FkZXJQcm94eSh3b3JrZXJMb2FkZXJQcm94
eSkKICAgICB7CiAgICAgICAgIFdlYldvcmtlckJhc2U6OmRpc3BhdGNoVGFza1RvTWFpblRocmVh
ZCgKQEAgLTEwMSw3ICsxMDEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRoaXMpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhbGxvd0RhdGFiYXNlVGFz
ayhXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcg
bW9kZSwgTmV3V2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQsIFdlYkZyYW1lKiBm
cmFtZSwgY29uc3QgU3RyaW5nIG5hbWUsIGNvbnN0IFN0cmluZyBkaXNwbGF5TmFtZSwgdW5zaWdu
ZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBQYXNzUmVmUHRyPEFsbG93RGF0YWJhc2VNYWluVGhyZWFk
QnJpZGdlPiBicmlkZ2UpCisgICAgc3RhdGljIHZvaWQgYWxsb3dEYXRhYmFzZVRhc2soV2ViQ29y
ZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nIG1vZGUsIFdl
YkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50LCBXZWJGcmFtZSogZnJhbWUsIGNvbnN0
IFN0cmluZyBuYW1lLCBjb25zdCBTdHJpbmcgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0
aW1hdGVkU2l6ZSwgUGFzc1JlZlB0cjxBbGxvd0RhdGFiYXNlTWFpblRocmVhZEJyaWRnZT4gYnJp
ZGdlKQogICAgIHsKICAgICAgICAgYm9vbCBhbGxvd0RhdGFiYXNlID0gY29tbW9uQ2xpZW50ID8g
Y29tbW9uQ2xpZW50LT5hbGxvd0RhdGFiYXNlKGZyYW1lLCBuYW1lLCBkaXNwbGF5TmFtZSwgZXN0
aW1hdGVkU2l6ZSkgOiBmYWxzZTsKICAgICAgICAgYnJpZGdlLT5zaWduYWxDb21wbGV0ZWQobW9k
ZSwgYWxsb3dEYXRhYmFzZSk7CkBAIC0xMTcsNyArMTE3LDcgQEAgcHJpdmF0ZToKICAgICBXZWJD
b3JlOjpXb3JrZXJMb2FkZXJQcm94eSogbV93b3JrZXJMb2FkZXJQcm94eTsKIH07CiAKLWJvb2wg
YWxsb3dEYXRhYmFzZUZvcldvcmtlcihOZXdXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1vbkNs
aWVudCwgV2ViRnJhbWUqIGZyYW1lLCBjb25zdCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYlN0
cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkKK2Jvb2wgYWxs
b3dEYXRhYmFzZUZvcldvcmtlcihXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1vbkNsaWVudCwg
V2ViRnJhbWUqIGZyYW1lLCBjb25zdCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYlN0cmluZyYg
ZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSkKIHsKICAgICBXZWJDb3Jl
OjpXb3JrZXJTY3JpcHRDb250cm9sbGVyKiBjb250cm9sbGVyID0gV2ViQ29yZTo6V29ya2VyU2Ny
aXB0Q29udHJvbGxlcjo6Y29udHJvbGxlckZvckNvbnRleHQoKTsKICAgICBXZWJDb3JlOjpXb3Jr
ZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0ID0gY29udHJvbGxlci0+d29ya2VyQ29udGV4dCgpOwpA
QCAtMTY0LDggKzE2NCw4IEBAIGJvb2wgRGF0YWJhc2VPYnNlcnZlcjo6Y2FuRXN0YWJsaXNoRGF0
YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0CiAjaWYgRU5BQkxFKFdP
UktFUlMpCiAgICAgICAgIFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQgPSBzdGF0aWNfY2Fz
dDxXb3JrZXJDb250ZXh0Kj4oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CiAgICAgICAgIFdvcmtl
ckxvYWRlclByb3h5KiB3b3JrZXJMb2FkZXJQcm94eSA9ICZ3b3JrZXJDb250ZXh0LT50aHJlYWQo
KS0+d29ya2VyTG9hZGVyUHJveHkoKTsKLSAgICAgICAgTmV3V2ViV29ya2VyQmFzZSogd2ViV29y
a2VyID0gc3RhdGljX2Nhc3Q8TmV3V2ViV29ya2VyQmFzZSo+KHdvcmtlckxvYWRlclByb3h5KTsK
LSAgICAgICAgcmV0dXJuIGFsbG93RGF0YWJhc2VGb3JXb3JrZXIod2ViV29ya2VyLT5uZXdDb21t
b25DbGllbnQoKSwgd2ViV29ya2VyLT52aWV3KCktPm1haW5GcmFtZSgpLCBuYW1lLCBkaXNwbGF5
TmFtZSwgZXN0aW1hdGVkU2l6ZSk7CisgICAgICAgIFdlYldvcmtlckJhc2UqIHdlYldvcmtlciA9
IHN0YXRpY19jYXN0PFdlYldvcmtlckJhc2UqPih3b3JrZXJMb2FkZXJQcm94eSk7CisgICAgICAg
IHJldHVybiBhbGxvd0RhdGFiYXNlRm9yV29ya2VyKHdlYldvcmtlci0+Y29tbW9uQ2xpZW50KCks
IHdlYldvcmtlci0+dmlldygpLT5tYWluRnJhbWUoKSwgbmFtZSwgZGlzcGxheU5hbWUsIGVzdGlt
YXRlZFNpemUpOwogI2Vsc2UKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5k
UHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRmFjdG9yeUJhY2tlbmRQ
cm94eS5jcHAKaW5kZXggN2FlNmU2MS4uYzIyMzA5YiAxMDA3NTUKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvSURCRmFjdG9yeUJhY2tlbmRQcm94eS5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvSURCRmFjdG9yeUJhY2tlbmRQcm94eS5jcHAKQEAgLTk5LDcgKzk5
LDcgQEAgdm9pZCBJREJGYWN0b3J5QmFja2VuZFByb3h5OjpvcGVuRnJvbVdvcmtlcihjb25zdCBT
dHJpbmcmIG5hbWUsIElEQkNhbGxiYWNrcyogY2EKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICBXb3JrZXJMb2FkZXJQcm94eSogd29ya2VyTG9hZGVyUHJveHkgPSAmY29udGV4dC0+dGhyZWFk
KCktPndvcmtlckxvYWRlclByb3h5KCk7Ci0gICAgTmV3V2ViV29ya2VyQmFzZSogd2ViV29ya2Vy
ID0gc3RhdGljX2Nhc3Q8TmV3V2ViV29ya2VyQmFzZSo+KHdvcmtlckxvYWRlclByb3h5KTsKKyAg
ICBXZWJXb3JrZXJCYXNlKiB3ZWJXb3JrZXIgPSBzdGF0aWNfY2FzdDxXZWJXb3JrZXJCYXNlKj4o
d29ya2VyTG9hZGVyUHJveHkpOwogICAgIFdlYkZyYW1lKiB3ZWJGcmFtZSA9IHdlYldvcmtlci0+
dmlldygpLT5tYWluRnJhbWUoKTsKICAgICBtX3dlYklEQkZhY3RvcnktPm9wZW4obmFtZSwgbmV3
IFdlYklEQkNhbGxiYWNrc0ltcGwoY2FsbGJhY2tzKSwgb3JpZ2luLCB3ZWJGcmFtZSwgZGF0YURp
cik7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0xvY2Fs
RmlsZVN5c3RlbUNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0xvY2Fs
RmlsZVN5c3RlbUNocm9taXVtLmNwcAppbmRleCA3NTdlZjgyLi45ZTBlNzMwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Mb2NhbEZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvTG9jYWxGaWxlU3lzdGVtQ2hyb21pdW0u
Y3BwCkBAIC03OSw3ICs3OSw3IEBAIHN0YXRpYyBjb25zdCBjaGFyIG9wZW5GaWxlU3lzdGVtTW9k
ZVtdID0gIm9wZW5GaWxlU3lzdGVtTW9kZSI7CiAvLyBjYWxsIGJhY2sgdG8gdGhlIHdvcmtlciBj
b250ZXh0LgogY2xhc3MgQWxsb3dGaWxlU3lzdGVtTWFpblRocmVhZEJyaWRnZSA6IHB1YmxpYyBU
aHJlYWRTYWZlUmVmQ291bnRlZDxBbGxvd0ZpbGVTeXN0ZW1NYWluVGhyZWFkQnJpZGdlPiB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8QWxsb3dGaWxlU3lzdGVtTWFpblRocmVhZEJy
aWRnZT4gY3JlYXRlKFdlYkNvcmU6OldvcmtlckxvYWRlclByb3h5KiB3b3JrZXJMb2FkZXJQcm94
eSwgY29uc3QgV1RGOjpTdHJpbmcmIG1vZGUsIE5ld1dlYkNvbW1vbldvcmtlckNsaWVudCogY29t
bW9uQ2xpZW50KQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEFsbG93RmlsZVN5c3RlbU1haW5UaHJl
YWRCcmlkZ2U+IGNyZWF0ZShXZWJDb3JlOjpXb3JrZXJMb2FkZXJQcm94eSogd29ya2VyTG9hZGVy
UHJveHksIGNvbnN0IFdURjo6U3RyaW5nJiBtb2RlLCBXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNv
bW1vbkNsaWVudCkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQWxsb3dGaWxl
U3lzdGVtTWFpblRocmVhZEJyaWRnZSh3b3JrZXJMb2FkZXJQcm94eSwgbW9kZSwgY29tbW9uQ2xp
ZW50KSk7CiAgICAgfQpAQCAtMTA2LDcgKzEwNiw3IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZh
dGU6Ci0gICAgQWxsb3dGaWxlU3lzdGVtTWFpblRocmVhZEJyaWRnZShXZWJDb3JlOjpXb3JrZXJM
b2FkZXJQcm94eSogd29ya2VyTG9hZGVyUHJveHksIGNvbnN0IFdURjo6U3RyaW5nJiBtb2RlLCBO
ZXdXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1vbkNsaWVudCkKKyAgICBBbGxvd0ZpbGVTeXN0
ZW1NYWluVGhyZWFkQnJpZGdlKFdlYkNvcmU6OldvcmtlckxvYWRlclByb3h5KiB3b3JrZXJMb2Fk
ZXJQcm94eSwgY29uc3QgV1RGOjpTdHJpbmcmIG1vZGUsIFdlYkNvbW1vbldvcmtlckNsaWVudCog
Y29tbW9uQ2xpZW50KQogICAgICAgICA6IG1fd29ya2VyTG9hZGVyUHJveHkod29ya2VyTG9hZGVy
UHJveHkpCiAgICAgICAgICwgbV9tb2RlKG1vZGUpCiAgICAgewpAQCAtMTE1LDcgKzExNSw3IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3dDcm9zc1RocmVh
ZEFjY2Vzcyh0aGlzKSkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFsbG93RmlsZVN5c3Rl
bVRhc2soV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgTmV3V2ViQ29t
bW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQsIFBhc3NSZWZQdHI8QWxsb3dGaWxlU3lzdGVt
TWFpblRocmVhZEJyaWRnZT4gYnJpZGdlKQorICAgIHN0YXRpYyB2b2lkIGFsbG93RmlsZVN5c3Rl
bVRhc2soV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgV2ViQ29tbW9u
V29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQsIFBhc3NSZWZQdHI8QWxsb3dGaWxlU3lzdGVtTWFp
blRocmVhZEJyaWRnZT4gYnJpZGdlKQogICAgIHsKICAgICAgICAgaWYgKGNvbW1vbkNsaWVudCkK
ICAgICAgICAgICAgIGJyaWRnZS0+c2lnbmFsQ29tcGxldGVkKGNvbW1vbkNsaWVudC0+YWxsb3dG
aWxlU3lzdGVtKCkpOwpAQCAtMTM0LDcgKzEzNCw3IEBAIHByaXZhdGU6CiAgICAgV1RGOjpTdHJp
bmcgbV9tb2RlOwogfTsKIAotYm9vbCBhbGxvd0ZpbGVTeXN0ZW1Gb3JXb3JrZXIoTmV3V2ViQ29t
bW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGllbnQpCitib29sIGFsbG93RmlsZVN5c3RlbUZvcldv
cmtlcihXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1vbkNsaWVudCkKIHsKICAgICBXb3JrZXJT
Y3JpcHRDb250cm9sbGVyKiBjb250cm9sbGVyID0gV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6Y29u
dHJvbGxlckZvckNvbnRleHQoKTsKICAgICBXb3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0ID0g
Y29udHJvbGxlci0+d29ya2VyQ29udGV4dCgpOwpAQCAtMTU3LDcgKzE1Nyw3IEBAIGJvb2wgYWxs
b3dGaWxlU3lzdGVtRm9yV29ya2VyKE5ld1dlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xp
ZW50KQogICAgIHJldHVybiBicmlkZ2UtPnJlc3VsdCgpOwogfQogCi12b2lkIG9wZW5GaWxlU3lz
dGVtRm9yV29ya2VyKE5ld1dlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50LCBXZWJG
aWxlU3lzdGVtOjpUeXBlIHR5cGUsIGxvbmcgbG9uZyBzaXplLCBib29sIGNyZWF0ZSwgV2ViRmls
ZVN5c3RlbUNhbGxiYWNrcyogY2FsbGJhY2tzLCBib29sIHN5bmNocm9ub3VzKQordm9pZCBvcGVu
RmlsZVN5c3RlbUZvcldvcmtlcihXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1vbkNsaWVudCwg
V2ViRmlsZVN5c3RlbTo6VHlwZSB0eXBlLCBsb25nIGxvbmcgc2l6ZSwgYm9vbCBjcmVhdGUsIFdl
YkZpbGVTeXN0ZW1DYWxsYmFja3MqIGNhbGxiYWNrcywgYm9vbCBzeW5jaHJvbm91cykKIHsKICAg
ICBXb3JrZXJTY3JpcHRDb250cm9sbGVyKiBjb250cm9sbGVyID0gV29ya2VyU2NyaXB0Q29udHJv
bGxlcjo6Y29udHJvbGxlckZvckNvbnRleHQoKTsKICAgICBXb3JrZXJDb250ZXh0KiB3b3JrZXJD
b250ZXh0ID0gY29udHJvbGxlci0+d29ya2VyQ29udGV4dCgpOwpAQCAtMjAzLDExICsyMDMsMTEg
QEAgc3RhdGljIHZvaWQgb3BlbkZpbGVTeXN0ZW1IZWxwZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCwgQXN5bmNGaWxlU3lzdGUKICNpZiBFTkFCTEUoV09SS0VSUykKICAgICAgICAg
V29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4dCA9IHN0YXRpY19jYXN0PFdvcmtlckNvbnRleHQq
Pihjb250ZXh0KTsKICAgICAgICAgV29ya2VyTG9hZGVyUHJveHkqIHdvcmtlckxvYWRlclByb3h5
ID0gJndvcmtlckNvbnRleHQtPnRocmVhZCgpLT53b3JrZXJMb2FkZXJQcm94eSgpOwotICAgICAg
ICBOZXdXZWJXb3JrZXJCYXNlKiB3ZWJXb3JrZXIgPSBzdGF0aWNfY2FzdDxOZXdXZWJXb3JrZXJC
YXNlKj4od29ya2VyTG9hZGVyUHJveHkpOwotICAgICAgICBpZiAoIWFsbG93RmlsZVN5c3RlbUZv
cldvcmtlcih3ZWJXb3JrZXItPm5ld0NvbW1vbkNsaWVudCgpKSkKKyAgICAgICAgV2ViV29ya2Vy
QmFzZSogd2ViV29ya2VyID0gc3RhdGljX2Nhc3Q8V2ViV29ya2VyQmFzZSo+KHdvcmtlckxvYWRl
clByb3h5KTsKKyAgICAgICAgaWYgKCFhbGxvd0ZpbGVTeXN0ZW1Gb3JXb3JrZXIod2ViV29ya2Vy
LT5jb21tb25DbGllbnQoKSkpCiAgICAgICAgICAgICBhbGxvd2VkID0gZmFsc2U7CiAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIG9wZW5GaWxlU3lzdGVtRm9yV29ya2VyKHdlYldvcmtlci0+bmV3
Q29tbW9uQ2xpZW50KCksIHN0YXRpY19jYXN0PFdlYkZpbGVTeXN0ZW06OlR5cGU+KHR5cGUpLCBz
aXplLCBjcmVhdGUgPT0gQ3JlYXRlSWZOb3RQcmVzZW50LCBuZXcgV2ViRmlsZVN5c3RlbUNhbGxi
YWNrc0ltcGwoY2FsbGJhY2tzLCB0eXBlLCBjb250ZXh0LCBzeW5jaHJvbm91cyksIHN5bmNocm9u
b3VzKTsKKyAgICAgICAgICAgIG9wZW5GaWxlU3lzdGVtRm9yV29ya2VyKHdlYldvcmtlci0+Y29t
bW9uQ2xpZW50KCksIHN0YXRpY19jYXN0PFdlYkZpbGVTeXN0ZW06OlR5cGU+KHR5cGUpLCBzaXpl
LCBjcmVhdGUgPT0gQ3JlYXRlSWZOb3RQcmVzZW50LCBuZXcgV2ViRmlsZVN5c3RlbUNhbGxiYWNr
c0ltcGwoY2FsbGJhY2tzLCB0eXBlLCBjb250ZXh0LCBzeW5jaHJvbm91cyksIHN5bmNocm9ub3Vz
KTsKIAogI2Vsc2UKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTaGFyZWRXb3JrZXJJbXBsLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNoYXJlZFdvcmtlckltcGwuY3BwCmluZGV4IDE0NDVm
OGUuLjIzMWFhYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNo
YXJlZFdvcmtlckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNo
YXJlZFdvcmtlckltcGwuY3BwCkBAIC0zMiwzNiArMzIsMzAyIEBACiAjaW5jbHVkZSAiV2ViU2hh
cmVkV29ya2VySW1wbC5oIgogCiAjaW5jbHVkZSAiQ3Jvc3NUaHJlYWRUYXNrLmgiCisjaW5jbHVk
ZSAiRGF0YWJhc2VUYXNrLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJLVVJM
LmgiCiAjaW5jbHVkZSAiTWVzc2FnZUV2ZW50LmgiCiAjaW5jbHVkZSAiTWVzc2FnZVBvcnRDaGFu
bmVsLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuaCIKKyNpbmNsdWRl
ICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIK
ICNpbmNsdWRlICJTaGFyZWRXb3JrZXJDb250ZXh0LmgiCiAjaW5jbHVkZSAiU2hhcmVkV29ya2Vy
VGhyZWFkLmgiCisjaW5jbHVkZSAiV2ViRGF0YVNvdXJjZUltcGwuaCIKKyNpbmNsdWRlICJXZWJG
aWxlRXJyb3IuaCIKKyNpbmNsdWRlICJXZWJGcmFtZUNsaWVudC5oIgorI2luY2x1ZGUgIldlYkZy
YW1lSW1wbC5oIgorI2luY2x1ZGUgIldlYk1lc3NhZ2VQb3J0Q2hhbm5lbC5oIgorI2luY2x1ZGUg
IldlYlJ1bnRpbWVGZWF0dXJlcy5oIgorI2luY2x1ZGUgIldlYlNldHRpbmdzLmgiCisjaW5jbHVk
ZSAiV2ViU2hhcmVkV29ya2VyQ2xpZW50LmgiCisjaW5jbHVkZSAiV2ViVmlldy5oIgorI2luY2x1
ZGUgIldvcmtlckNvbnRleHQuaCIKICNpbmNsdWRlICJXb3JrZXJEZWJ1Z2dlckFnZW50LmgiCiAj
aW5jbHVkZSAiV29ya2VySW5zcGVjdG9yQ29udHJvbGxlci5oIgotCi0jaW5jbHVkZSAiV2ViTWVz
c2FnZVBvcnRDaGFubmVsLmgiCisjaW5jbHVkZSAiV29ya2VyTG9hZGVyUHJveHkuaCIKKyNpbmNs
dWRlICJXb3JrZXJUaHJlYWQuaCIKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJTdHJpbmcuaCIKICNp
bmNsdWRlICJwbGF0Zm9ybS9XZWJVUkwuaCIKKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgog
CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKICNpZiBF
TkFCTEUoU0hBUkVEX1dPUktFUlMpCisvLyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbiB0aGUg
bWFpbiB0aHJlYWQgdG8gZm9yY2UgdG8gaW5pdGlhbGl6ZSBzb21lIHN0YXRpYworLy8gdmFsdWVz
IHVzZWQgaW4gV2ViS2l0IGJlZm9yZSBhbnkgd29ya2VyIHRocmVhZCBpcyBzdGFydGVkLiBUaGlz
IGlzIGJlY2F1c2UgaW4KKy8vIG91ciB3b3JrZXIgcHJvY2Vzc3MsIHdlIGRvIG5vdCBydW4gYW55
IFdlYktpdCBjb2RlIGluIG1haW4gdGhyZWFkIGFuZCB0aHVzCisvLyB3aGVuIG11bHRpcGxlIHdv
cmtlcnMgdHJ5IHRvIHN0YXJ0IGF0IHRoZSBzYW1lIHRpbWUsIHdlIG1pZ2h0IGhpdCBjcmFzaCBk
dWUKKy8vIHRvIGNvbnRlbnRpb24gZm9yIGluaXRpYWxpemluZyBzdGF0aWMgdmFsdWVzLgorc3Rh
dGljIHZvaWQgaW5pdGlhbGl6ZVdlYktpdFN0YXRpY1ZhbHVlcygpCit7CisgICAgc3RhdGljIGJv
b2wgaW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAgICBpZiAoIWluaXRpYWxpemVkKSB7CisgICAgICAg
IGluaXRpYWxpemVkID0gdHJ1ZTsKKyAgICAgICAgLy8gTm90ZSB0aGF0IHdlIGhhdmUgdG8gcGFz
cyBhIFVSTCB3aXRoIHZhbGlkIHByb3RvY29sIGluIG9yZGVyIHRvIGZvbGxvdworICAgICAgICAv
LyB0aGUgcGF0aCB0byBkbyBzdGF0aWMgdmFsdWUgaW5pdGlhbGl6YXRpb25zLgorICAgICAgICBS
ZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG9yaWdpbiA9CisgICAgICAgICAgICBTZWN1cml0eU9yaWdp
bjo6Y3JlYXRlKEtVUkwoUGFyc2VkVVJMU3RyaW5nLCAiaHR0cDovL2xvY2FsaG9zdCIpKTsKKyAg
ICAgICAgb3JpZ2luLnJlbGVhc2UoKTsKKyAgICB9Cit9CiAKLVdlYlNoYXJlZFdvcmtlckltcGw6
OldlYlNoYXJlZFdvcmtlckltcGwoV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjbGllbnQpCi0gICAg
OiBtX2NsaWVudChjbGllbnQpCitXZWJTaGFyZWRXb3JrZXJJbXBsOjpXZWJTaGFyZWRXb3JrZXJJ
bXBsKFdlYlNoYXJlZFdvcmtlckNsaWVudCogY2xpZW50KQorICAgIDogbV93ZWJWaWV3KDApCisg
ICAgLCBtX2Fza2VkVG9UZXJtaW5hdGUoZmFsc2UpCisgICAgLCBtX2NsaWVudChjbGllbnQpCiAg
ICAgLCBtX3BhdXNlV29ya2VyQ29udGV4dE9uU3RhcnQoZmFsc2UpCiB7CisgICAgaW5pdGlhbGl6
ZVdlYktpdFN0YXRpY1ZhbHVlcygpOwogfQogCiBXZWJTaGFyZWRXb3JrZXJJbXBsOjp+V2ViU2hh
cmVkV29ya2VySW1wbCgpCiB7CisgICAgQVNTRVJUKG1fd2ViVmlldyk7CisgICAgV2ViRnJhbWVJ
bXBsKiB3ZWJGcmFtZSA9IHN0YXRpY19jYXN0PFdlYkZyYW1lSW1wbCo+KG1fd2ViVmlldy0+bWFp
bkZyYW1lKCkpOworICAgIGlmICh3ZWJGcmFtZSkKKyAgICAgICAgd2ViRnJhbWUtPnNldENsaWVu
dCgwKTsKKyAgICBtX3dlYlZpZXctPmNsb3NlKCk7Cit9CisKK3ZvaWQgV2ViU2hhcmVkV29ya2Vy
SW1wbDo6c3RvcFdvcmtlclRocmVhZCgpCit7CisgICAgaWYgKG1fYXNrZWRUb1Rlcm1pbmF0ZSkK
KyAgICAgICAgcmV0dXJuOworICAgIG1fYXNrZWRUb1Rlcm1pbmF0ZSA9IHRydWU7CisgICAgaWYg
KG1fd29ya2VyVGhyZWFkKQorICAgICAgICBtX3dvcmtlclRocmVhZC0+c3RvcCgpOworfQorCit2
b2lkIFdlYlNoYXJlZFdvcmtlckltcGw6OmluaXRpYWxpemVMb2FkZXIoY29uc3QgV2ViVVJMJiB1
cmwpCit7CisgICAgLy8gQ3JlYXRlICdzaGFkb3cgcGFnZScuIFRoaXMgcGFnZSBpcyBuZXZlciBk
aXNwbGF5ZWQsIGl0IGlzIHVzZWQgdG8gcHJveHkgdGhlCisgICAgLy8gbG9hZGluZyByZXF1ZXN0
cyBmcm9tIHRoZSB3b3JrZXIgY29udGV4dCB0byB0aGUgcmVzdCBvZiBXZWJLaXQgYW5kIENocm9t
aXVtCisgICAgLy8gaW5mcmFzdHJ1Y3R1cmUuCisgICAgQVNTRVJUKCFtX3dlYlZpZXcpOworICAg
IG1fd2ViVmlldyA9IFdlYlZpZXc6OmNyZWF0ZSgwKTsKKyAgICBtX3dlYlZpZXctPnNldHRpbmdz
KCktPnNldE9mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hlRW5hYmxlZChXZWJSdW50aW1lRmVhdHVy
ZXM6OmlzQXBwbGljYXRpb25DYWNoZUVuYWJsZWQoKSk7CisgICAgLy8gRklYTUU6IFNldHRpbmdz
IGluZm9ybWF0aW9uIHNob3VsZCBiZSBwYXNzZWQgdG8gdGhlIFdvcmtlciBwcm9jZXNzIGZyb20g
QnJvd3NlciBwcm9jZXNzIHdoZW4gdGhlIHdvcmtlcgorICAgIC8vIGlzIGNyZWF0ZWQgKHNpbWls
YXIgdG8gUmVuZGVyVGhyZWFkOjpPbkNyZWF0ZU5ld1ZpZXcpLgorICAgIG1fd2ViVmlldy0+c2V0
dGluZ3MoKS0+c2V0SGl4aWU3NldlYlNvY2tldFByb3RvY29sRW5hYmxlZChmYWxzZSk7CisgICAg
bV93ZWJWaWV3LT5pbml0aWFsaXplTWFpbkZyYW1lKHRoaXMpOworCisgICAgV2ViRnJhbWVJbXBs
KiB3ZWJGcmFtZSA9IHN0YXRpY19jYXN0PFdlYkZyYW1lSW1wbCo+KG1fd2ViVmlldy0+bWFpbkZy
YW1lKCkpOworCisgICAgLy8gQ29uc3RydWN0IHN1YnN0aXR1dGUgZGF0YSBzb3VyY2UgZm9yIHRo
ZSAnc2hhZG93IHBhZ2UnLiBXZSBvbmx5IG5lZWQgaXQKKyAgICAvLyB0byBoYXZlIHNhbWUgb3Jp
Z2luIGFzIHRoZSB3b3JrZXIgc28gdGhlIGxvYWRpbmcgY2hlY2tzIHdvcmsgY29ycmVjdGx5Lgor
ICAgIENTdHJpbmcgY29udGVudCgiIik7CisgICAgaW50IGxlbiA9IHN0YXRpY19jYXN0PGludD4o
Y29udGVudC5sZW5ndGgoKSk7CisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmKFNoYXJlZEJ1
ZmZlcjo6Y3JlYXRlKGNvbnRlbnQuZGF0YSgpLCBsZW4pKTsKKyAgICBTdWJzdGl0dXRlRGF0YSBz
dWJzdERhdGEoYnVmLCBTdHJpbmcoInRleHQvaHRtbCIpLCBTdHJpbmcoIlVURi04IiksIEtVUkwo
KSk7CisgICAgd2ViRnJhbWUtPmZyYW1lKCktPmxvYWRlcigpLT5sb2FkKFJlc291cmNlUmVxdWVz
dCh1cmwpLCBzdWJzdERhdGEsIGZhbHNlKTsKKworICAgIC8vIFRoaXMgZG9jdW1lbnQgd2lsbCBi
ZSB1c2VkIGFzICdsb2FkaW5nIGNvbnRleHQnIGZvciB0aGUgd29ya2VyLgorICAgIG1fbG9hZGlu
Z0RvY3VtZW50ID0gd2ViRnJhbWUtPmZyYW1lKCktPmRvY3VtZW50KCk7Cit9CisKK3ZvaWQgV2Vi
U2hhcmVkV29ya2VySW1wbDo6ZGlkQ3JlYXRlRGF0YVNvdXJjZShXZWJGcmFtZSosIFdlYkRhdGFT
b3VyY2UqIGRzKQoreworICAgIC8vIFRlbGwgdGhlIGxvYWRlciB0byBsb2FkIHRoZSBkYXRhIGlu
dG8gdGhlICdzaGFkb3cgcGFnZScgc3luY2hyb25vdXNseSwKKyAgICAvLyBzbyB3ZSBjYW4gZ3Jh
YiB0aGUgcmVzdWx0aW5nIERvY3VtZW50IHJpZ2h0IGFmdGVyIGxvYWQuCisgICAgc3RhdGljX2Nh
c3Q8V2ViRGF0YVNvdXJjZUltcGwqPihkcyktPnNldERlZmVyTWFpblJlc291cmNlRGF0YUxvYWQo
ZmFsc2UpOworfQorCitXZWJBcHBsaWNhdGlvbkNhY2hlSG9zdCogV2ViU2hhcmVkV29ya2VySW1w
bDo6Y3JlYXRlQXBwbGljYXRpb25DYWNoZUhvc3QoV2ViRnJhbWUqLCBXZWJBcHBsaWNhdGlvbkNh
Y2hlSG9zdENsaWVudCogYXBwY2FjaGVIb3N0Q2xpZW50KQoreworICAgIGlmIChjbGllbnQoKSkK
KyAgICAgICAgcmV0dXJuIGNsaWVudCgpLT5jcmVhdGVBcHBsaWNhdGlvbkNhY2hlSG9zdChhcHBj
YWNoZUhvc3RDbGllbnQpOworICAgIHJldHVybiAwOworfQorCisvLyBXb3JrZXJPYmplY3RQcm94
eSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorCit2b2lkIFdlYlNoYXJlZFdvcmtlckltcGw6OnBvc3RNZXNzYWdlVG9Xb3JrZXJPYmpl
Y3QoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG1lc3NhZ2UsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc093blB0cjxNZXNz
YWdlUG9ydENoYW5uZWxBcnJheT4gY2hhbm5lbHMpCit7CisgICAgV2ViV29ya2VyQmFzZTo6ZGlz
cGF0Y2hUYXNrVG9NYWluVGhyZWFkKGNyZWF0ZUNhbGxiYWNrVGFzaygmcG9zdE1lc3NhZ2VUYXNr
LCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHRoaXMpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS0+dG9XaXJlU3RyaW5nKCksIGNoYW5uZWxz
KSk7Cit9CisKK3ZvaWQgV2ViU2hhcmVkV29ya2VySW1wbDo6cG9zdE1lc3NhZ2VUYXNrKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBXZWJTaGFyZWRXb3JrZXJJbXBsKiB0aGlzUHRyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIG1lc3NhZ2UsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hh
bm5lbEFycmF5PiBjaGFubmVscykKK3sKKyAgICBpZiAoIXRoaXNQdHItPmNsaWVudCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBXZWJNZXNzYWdlUG9ydENoYW5uZWxBcnJheSB3ZWJDaGFubmVs
cyhjaGFubmVscyA/IGNoYW5uZWxzLT5zaXplKCkgOiAwKTsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHdlYkNoYW5uZWxzLnNpemUoKTsgKytpKSB7CisgICAgICAgIHdlYkNoYW5uZWxzW2ld
ID0gKCpjaGFubmVscylbaV0tPmNoYW5uZWwoKS0+d2ViQ2hhbm5lbFJlbGVhc2UoKTsKKyAgICAg
ICAgd2ViQ2hhbm5lbHNbaV0tPnNldENsaWVudCgwKTsKKyAgICB9CisKKyAgICB0aGlzUHRyLT5j
bGllbnQoKS0+cG9zdE1lc3NhZ2VUb1dvcmtlck9iamVjdChtZXNzYWdlLCB3ZWJDaGFubmVscyk7
Cit9CisKK3ZvaWQgV2ViU2hhcmVkV29ya2VySW1wbDo6cG9zdEV4Y2VwdGlvblRvV29ya2VyT2Jq
ZWN0KGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpbmVOdW1iZXIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcm
IHNvdXJjZVVSTCkKK3sKKyAgICBXZWJXb3JrZXJCYXNlOjpkaXNwYXRjaFRhc2tUb01haW5UaHJl
YWQoCisgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmcG9zdEV4Y2VwdGlvblRhc2ssIEFsbG93
Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJv
ck1lc3NhZ2UsIGxpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VV
UkwpKTsKK30KKwordm9pZCBXZWJTaGFyZWRXb3JrZXJJbXBsOjpwb3N0RXhjZXB0aW9uVGFzayhT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBXZWJTaGFyZWRXb3JrZXJJbXBsKiB0aGlzUHRyLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGVycm9y
TWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMKQoreworICAgIGlmICghdGhpc1B0
ci0+Y2xpZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIHRoaXNQdHItPmNsaWVudCgpLT5w
b3N0RXhjZXB0aW9uVG9Xb3JrZXJPYmplY3QoZXJyb3JNZXNzYWdlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVVSTCk7Cit9
CisKK3ZvaWQgV2ViU2hhcmVkV29ya2VySW1wbDo6cG9zdENvbnNvbGVNZXNzYWdlVG9Xb3JrZXJP
YmplY3QoTWVzc2FnZVNvdXJjZSBzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VUeXBlIHR5cGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3Nh
Z2VMZXZlbCBsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBtZXNzYWdlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGluZU51bWJl
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpCit7CisgICAgV2ViV29ya2VyQmFzZTo6ZGlz
cGF0Y2hUYXNrVG9NYWluVGhyZWFkKGNyZWF0ZUNhbGxiYWNrVGFzaygmcG9zdENvbnNvbGVNZXNz
YWdlVGFzaywgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyh0aGlzKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLCB0eXBlLCBsZXZlbCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSwgbGluZU51bWJlciwg
c291cmNlVVJMKSk7Cit9CisKK3ZvaWQgV2ViU2hhcmVkV29ya2VySW1wbDo6cG9zdENvbnNvbGVN
ZXNzYWdlVGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYlNoYXJlZFdvcmtlckltcGwq
IHRoaXNQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IHNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgdHlwZSwgaW50IGxldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGluZU51bWJlciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJp
bmcmIHNvdXJjZVVSTCkKK3sKKyAgICBpZiAoIXRoaXNQdHItPmNsaWVudCgpKQorICAgICAgICBy
ZXR1cm47CisgICAgdGhpc1B0ci0+Y2xpZW50KCktPnBvc3RDb25zb2xlTWVzc2FnZVRvV29ya2Vy
T2JqZWN0KHNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdHlwZSwgbGV2ZWwsIG1lc3NhZ2UsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1i
ZXIsIHNvdXJjZVVSTCk7Cit9CisKK3ZvaWQgV2ViU2hhcmVkV29ya2VySW1wbDo6cG9zdE1lc3Nh
Z2VUb1BhZ2VJbnNwZWN0b3IoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIFdlYldvcmtl
ckJhc2U6OmRpc3BhdGNoVGFza1RvTWFpblRocmVhZChjcmVhdGVDYWxsYmFja1Rhc2soJnBvc3RN
ZXNzYWdlVG9QYWdlSW5zcGVjdG9yVGFzaywgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyh0aGlzKSwg
bWVzc2FnZSkpOwogfQogCit2b2lkIFdlYlNoYXJlZFdvcmtlckltcGw6OnBvc3RNZXNzYWdlVG9Q
YWdlSW5zcGVjdG9yVGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViU2hhcmVkV29ya2Vy
SW1wbCogdGhpc1B0ciwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIGlmICghdGhpc1B0
ci0+Y2xpZW50KCkpCisgICAgICAgIHJldHVybjsKKyAgICB0aGlzUHRyLT5jbGllbnQoKS0+ZGlz
cGF0Y2hEZXZUb29sc01lc3NhZ2UobWVzc2FnZSk7Cit9CisKK3ZvaWQgV2ViU2hhcmVkV29ya2Vy
SW1wbDo6dXBkYXRlSW5zcGVjdG9yU3RhdGVDb29raWUoY29uc3QgV1RGOjpTdHJpbmcmIGNvb2tp
ZSkKK3sKKyAgICBXZWJXb3JrZXJCYXNlOjpkaXNwYXRjaFRhc2tUb01haW5UaHJlYWQoY3JlYXRl
Q2FsbGJhY2tUYXNrKCZ1cGRhdGVJbnNwZWN0b3JTdGF0ZUNvb2tpZVRhc2ssIEFsbG93Q3Jvc3NU
aHJlYWRBY2Nlc3ModGhpcyksIGNvb2tpZSkpOworfQorCit2b2lkIFdlYlNoYXJlZFdvcmtlcklt
cGw6OnVwZGF0ZUluc3BlY3RvclN0YXRlQ29va2llVGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgV2ViU2hhcmVkV29ya2VySW1wbCogdGhpc1B0ciwgY29uc3QgU3RyaW5nJiBjb29raWUpCit7
CisgICAgaWYgKCF0aGlzUHRyLT5jbGllbnQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIHRoaXNQ
dHItPmNsaWVudCgpLT5zYXZlRGV2VG9vbHNBZ2VudFN0YXRlKGNvb2tpZSk7Cit9CisKK3ZvaWQg
V2ViU2hhcmVkV29ya2VySW1wbDo6Y29uZmlybU1lc3NhZ2VGcm9tV29ya2VyT2JqZWN0KGJvb2wg
aGFzUGVuZGluZ0FjdGl2aXR5KQoreworICAgIFdlYldvcmtlckJhc2U6OmRpc3BhdGNoVGFza1Rv
TWFpblRocmVhZChjcmVhdGVDYWxsYmFja1Rhc2soJmNvbmZpcm1NZXNzYWdlVGFzaywgQWxsb3dD
cm9zc1RocmVhZEFjY2Vzcyh0aGlzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaGFzUGVuZGluZ0FjdGl2aXR5KSk7Cit9CisKK3ZvaWQgV2ViU2hhcmVkV29y
a2VySW1wbDo6Y29uZmlybU1lc3NhZ2VUYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJTaGFy
ZWRXb3JrZXJJbXBsKiB0aGlzUHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkpCit7CisgICAgaWYgKCF0aGlzUHRy
LT5jbGllbnQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIHRoaXNQdHItPmNsaWVudCgpLT5jb25m
aXJtTWVzc2FnZUZyb21Xb3JrZXJPYmplY3QoaGFzUGVuZGluZ0FjdGl2aXR5KTsKK30KKwordm9p
ZCBXZWJTaGFyZWRXb3JrZXJJbXBsOjpyZXBvcnRQZW5kaW5nQWN0aXZpdHkoYm9vbCBoYXNQZW5k
aW5nQWN0aXZpdHkpCit7CisgICAgV2ViV29ya2VyQmFzZTo6ZGlzcGF0Y2hUYXNrVG9NYWluVGhy
ZWFkKGNyZWF0ZUNhbGxiYWNrVGFzaygmcmVwb3J0UGVuZGluZ0FjdGl2aXR5VGFzaywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3dDcm9zc1RocmVhZEFj
Y2Vzcyh0aGlzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aGFzUGVuZGluZ0FjdGl2aXR5KSk7Cit9CisKK3ZvaWQgV2ViU2hhcmVkV29ya2VySW1wbDo6cmVw
b3J0UGVuZGluZ0FjdGl2aXR5VGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYlNo
YXJlZFdvcmtlckltcGwqIHRoaXNQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkpCit7CisgICAgaWYg
KCF0aGlzUHRyLT5jbGllbnQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIHRoaXNQdHItPmNsaWVu
dCgpLT5yZXBvcnRQZW5kaW5nQWN0aXZpdHkoaGFzUGVuZGluZ0FjdGl2aXR5KTsKK30KKwordm9p
ZCBXZWJTaGFyZWRXb3JrZXJJbXBsOjp3b3JrZXJDb250ZXh0Q2xvc2VkKCkKK3sKKyAgICBXZWJX
b3JrZXJCYXNlOjpkaXNwYXRjaFRhc2tUb01haW5UaHJlYWQoY3JlYXRlQ2FsbGJhY2tUYXNrKCZ3
b3JrZXJDb250ZXh0Q2xvc2VkVGFzaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyh0aGlzKSkpOworfQorCit2b2lkIFdl
YlNoYXJlZFdvcmtlckltcGw6OndvcmtlckNvbnRleHRDbG9zZWRUYXNrKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFdlYlNoYXJlZFdvcmtlckltcGwqIHRoaXNQdHIpCit7CisgICAgaWYgKHRo
aXNQdHItPmNsaWVudCgpKQorICAgICAgICB0aGlzUHRyLT5jbGllbnQoKS0+d29ya2VyQ29udGV4
dENsb3NlZCgpOworCisgICAgdGhpc1B0ci0+c3RvcFdvcmtlclRocmVhZCgpOworfQorCit2b2lk
IFdlYlNoYXJlZFdvcmtlckltcGw6OndvcmtlckNvbnRleHREZXN0cm95ZWQoKQoreworICAgIFdl
YldvcmtlckJhc2U6OmRpc3BhdGNoVGFza1RvTWFpblRocmVhZChjcmVhdGVDYWxsYmFja1Rhc2so
JndvcmtlckNvbnRleHREZXN0cm95ZWRUYXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3dDcm9zc1RocmVhZEFjY2Vz
cyh0aGlzKSkpOworfQorCit2b2lkIFdlYlNoYXJlZFdvcmtlckltcGw6OndvcmtlckNvbnRleHRE
ZXN0cm95ZWRUYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYlNoYXJlZFdvcmtl
ckltcGwqIHRoaXNQdHIpCit7CisgICAgaWYgKHRoaXNQdHItPmNsaWVudCgpKQorICAgICAgICB0
aGlzUHRyLT5jbGllbnQoKS0+d29ya2VyQ29udGV4dERlc3Ryb3llZCgpOworICAgIC8vIFRoZSBs
aWZldGltZSBvZiB0aGlzIHByb3h5IGlzIGNvbnRyb2xsZWQgYnkgdGhlIHdvcmtlciBjb250ZXh0
LgorICAgIGRlbGV0ZSB0aGlzUHRyOworfQorCisvLyBXb3JrZXJMb2FkZXJQcm94eSAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit2
b2lkIFdlYlNoYXJlZFdvcmtlckltcGw6OnBvc3RUYXNrVG9Mb2FkZXIoUGFzc093blB0cjxTY3Jp
cHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNrKQoreworICAgIEFTU0VSVChtX2xvYWRpbmdE
b2N1bWVudC0+aXNEb2N1bWVudCgpKTsKKyAgICBtX2xvYWRpbmdEb2N1bWVudC0+cG9zdFRhc2so
dGFzayk7Cit9CisKK3ZvaWQgV2ViU2hhcmVkV29ya2VySW1wbDo6cG9zdFRhc2tGb3JNb2RlVG9X
b3JrZXJDb250ZXh0KAorICAgIFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFz
az4gdGFzaywgY29uc3QgU3RyaW5nJiBtb2RlKQoreworICAgIG1fd29ya2VyVGhyZWFkLT5ydW5M
b29wKCkucG9zdFRhc2tGb3JNb2RlKHRhc2ssIG1vZGUpOworfQorCisKKwogYm9vbCBXZWJTaGFy
ZWRXb3JrZXJJbXBsOjppc1N0YXJ0ZWQoKQogewogICAgIC8vIFNob3VsZCBub3QgZXZlciBiZSBj
YWxsZWQgZnJvbSB0aGUgd29ya2VyIHRocmVhZCAodGhpcyBBUEkgaXMgb25seSBjYWxsZWQgb24g
V2ViU2hhcmVkV29ya2VyUHJveHkgb24gdGhlIHJlbmRlcmVyIHRocmVhZCkuCkBAIC0xNzcsMTkg
KzQ0MywxMCBAQCB2b2lkIFdlYlNoYXJlZFdvcmtlckltcGw6OmRpc3BhdGNoRGV2VG9vbHNNZXNz
YWdlKGNvbnN0IFdlYlN0cmluZyYgbWVzc2FnZSkKICAgICB3b3JrZXJUaHJlYWQoKS0+cnVuTG9v
cCgpLnBvc3RUYXNrRm9yTW9kZShjcmVhdGVDYWxsYmFja1Rhc2soZGlzcGF0Y2hPbkluc3BlY3Rv
ckJhY2tlbmRUYXNrLCBTdHJpbmcobWVzc2FnZSkpLCBXb3JrZXJEZWJ1Z2dlckFnZW50OjpkZWJ1
Z2dlclRhc2tNb2RlKTsKIH0KIAotV2ViV29ya2VyQ2xpZW50KiBXZWJTaGFyZWRXb3JrZXJJbXBs
OjpjbGllbnQoKQotewotICAgIC8vIFdlIHNob3VsZCBuZXZlciBiZSBhc2tlZCBmb3IgYSBXZWJX
b3JrZXJDbGllbnQgKG9ubHkgZGVkaWNhdGVkIHdvcmtlcnMgaGF2ZSBhbiBhc3NvY2lhdGVkIFdl
YldvcmtlckNsaWVudCkuCi0gICAgLy8gSXQgc2hvdWxkIG5vdCBiZSBwb3NzaWJsZSBmb3IgU2hh
cmVkV29ya2VyQ29udGV4dCB0byBnZW5lcmF0ZSBhbiBBUEkgY2FsbCBvdXRzaWRlIHRob3NlIHN1
cHBvcnRlZCBieSBXZWJDb21tb25Xb3JrZXJDbGllbnQuCi0gICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLVdlYlNoYXJlZFdvcmtlciogV2ViU2hhcmVkV29ya2Vy
OjpjcmVhdGUoV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjbGllbnQpCitXZWJTaGFyZWRXb3JrZXIq
IFdlYlNoYXJlZFdvcmtlcjo6Y3JlYXRlKFdlYlNoYXJlZFdvcmtlckNsaWVudCogY2xpZW50KQog
ewogICAgIHJldHVybiBuZXcgV2ViU2hhcmVkV29ya2VySW1wbChjbGllbnQpOwogfQotCiAjZW5k
aWYgLy8gRU5BQkxFKFNIQVJFRF9XT1JLRVJTKQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNoYXJlZFdvcmtlckltcGwu
aCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNoYXJlZFdvcmtlckltcGwuaAppbmRl
eCA0MzdiYjJiLi44M2QzNjFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJTaGFyZWRXb3JrZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViU2hhcmVkV29ya2VySW1wbC5oCkBAIC0zNCwyMCArMzQsNjQgQEAKICNpbmNsdWRlICJXZWJT
aGFyZWRXb3JrZXIuaCIKIAogI2lmIEVOQUJMRShTSEFSRURfV09SS0VSUykKLQogI2luY2x1ZGUg
IlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKLQorI2luY2x1ZGUgIldlYkNvbW1vbldvcmtlckNs
aWVudC5oIgorI2luY2x1ZGUgIldlYkZyYW1lQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViV29ya2Vy
QmFzZS5oIgorI2luY2x1ZGUgIldlYldvcmtlckNsaWVudC5oIgorI2luY2x1ZGUgIldvcmtlckxv
YWRlclByb3h5LmgiCisjaW5jbHVkZSAiV29ya2VyT2JqZWN0UHJveHkuaCIKKyNpbmNsdWRlICJX
b3JrZXJUaHJlYWQuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KIAotbmFtZXNwYWNlIFdlYktpdCB7CiAKK25hbWVzcGFjZSBXZWJLaXQgewor
Y2xhc3MgV2ViQXBwbGljYXRpb25DYWNoZUhvc3Q7CitjbGFzcyBXZWJBcHBsaWNhdGlvbkNhY2hl
SG9zdENsaWVudDsKK2NsYXNzIFdlYldvcmtlckNsaWVudDsKK2NsYXNzIFdlYlNlY3VyaXR5T3Jp
Z2luOworY2xhc3MgV2ViU3RyaW5nOworY2xhc3MgV2ViVVJMOworY2xhc3MgV2ViVmlldzsKK2Ns
YXNzIFdlYldvcmtlcjsKK2NsYXNzIFdlYlNoYXJlZFdvcmtlckNsaWVudDsKIC8vIFRoaXMgY2xh
c3MgaXMgdXNlZCBieSB0aGUgd29ya2VyIHByb2Nlc3MgY29kZSB0byB0YWxrIHRvIHRoZSBXZWJD
b3JlOjpTaGFyZWRXb3JrZXIgaW1wbGVtZW50YXRpb24uCiAvLyBJdCBjYW4ndCB1c2UgaXQgZGly
ZWN0bHkgc2luY2UgaXQgdXNlcyBXZWJLaXQgdHlwZXMsIHNvIHRoaXMgY2xhc3MgY29udmVydHMg
dGhlIGRhdGEgdHlwZXMuCiAvLyBXaGVuIHRoZSBXZWJDb3JlOjpTaGFyZWRXb3JrZXIgb2JqZWN0
IHdhbnRzIHRvIGNhbGwgV2ViQ29yZTo6V29ya2VyUmVwb3J0aW5nUHJveHksIHRoaXMgY2xhc3Mg
d2lsbAogLy8gY29udmVydCB0byBDaHJvbWUgZGF0YSB0eXBlcyBmaXJzdCBhbmQgdGhlbiBjYWxs
IHRoZSBzdXBwbGllZCBXZWJDb21tb25Xb3JrZXJDbGllbnQuCi1jbGFzcyBXZWJTaGFyZWRXb3Jr
ZXJJbXBsIDogcHVibGljIFdlYldvcmtlckJhc2UsIHB1YmxpYyBXZWJTaGFyZWRXb3JrZXIgewor
Y2xhc3MgV2ViU2hhcmVkV29ya2VySW1wbCA6IHB1YmxpYyBXZWJDb3JlOjpXb3JrZXJPYmplY3RQ
cm94eQorICAgICAgICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBXZWJXb3JrZXJCYXNlCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICwgcHVibGljIFdlYkZyYW1lQ2xpZW50CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICwgcHVibGljIFdlYlNoYXJlZFdvcmtlciB7CiBwdWJsaWM6Ci0g
ICAgZXhwbGljaXQgV2ViU2hhcmVkV29ya2VySW1wbChXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNs
aWVudCk7CisgICAgZXhwbGljaXQgV2ViU2hhcmVkV29ya2VySW1wbChXZWJTaGFyZWRXb3JrZXJD
bGllbnQqKTsKKworICAgIHZpcnR1YWwgdm9pZCBwb3N0TWVzc2FnZVRvV29ya2VyT2JqZWN0KAor
ICAgICAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sCisgICAg
ICAgIFBhc3NPd25QdHI8V2ViQ29yZTo6TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+KTsKKyAgICB2
aXJ0dWFsIHZvaWQgcG9zdEV4Y2VwdGlvblRvV29ya2VyT2JqZWN0KAorICAgICAgICBjb25zdCBX
VEY6OlN0cmluZyYsIGludCwgY29uc3QgV1RGOjpTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQg
cG9zdENvbnNvbGVNZXNzYWdlVG9Xb3JrZXJPYmplY3QoCisgICAgICAgIFdlYkNvcmU6Ok1lc3Nh
Z2VTb3VyY2UsIFdlYkNvcmU6Ok1lc3NhZ2VUeXBlLAorICAgICAgICBXZWJDb3JlOjpNZXNzYWdl
TGV2ZWwsIGNvbnN0IFdURjo6U3RyaW5nJiwgaW50LCBjb25zdCBXVEY6OlN0cmluZyYpOworICAg
IHZpcnR1YWwgdm9pZCBwb3N0TWVzc2FnZVRvUGFnZUluc3BlY3Rvcihjb25zdCBXVEY6OlN0cmlu
ZyYpOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVJbnNwZWN0b3JTdGF0ZUNvb2tpZShjb25zdCBX
VEY6OlN0cmluZyYpOworICAgIHZpcnR1YWwgdm9pZCBjb25maXJtTWVzc2FnZUZyb21Xb3JrZXJP
YmplY3QoYm9vbCk7CisgICAgdmlydHVhbCB2b2lkIHJlcG9ydFBlbmRpbmdBY3Rpdml0eShib29s
KTsKKyAgICB2aXJ0dWFsIHZvaWQgd29ya2VyQ29udGV4dENsb3NlZCgpOworICAgIHZpcnR1YWwg
dm9pZCB3b3JrZXJDb250ZXh0RGVzdHJveWVkKCk7CisgICAgdmlydHVhbCBXZWJWaWV3KiB2aWV3
KCkgY29uc3QgeyByZXR1cm4gbV93ZWJWaWV3OyB9CisKKyAgICAvLyBXZWJDb3JlOjpXb3JrZXJM
b2FkZXJQcm94eSBtZXRob2RzOgorICAgIHZpcnR1YWwgdm9pZCBwb3N0VGFza1RvTG9hZGVyKFBh
c3NPd25QdHI8V2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4pOworICAgIHZp
cnR1YWwgdm9pZCBwb3N0VGFza0Zvck1vZGVUb1dvcmtlckNvbnRleHQoCisgICAgICAgIFBhc3NP
d25QdHI8V2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4sIGNvbnN0IFdURjo6
U3RyaW5nJiBtb2RlKTsKKworICAgIC8vIFdlYkZyYW1lQ2xpZW50IG1ldGhvZHMgdG8gc3VwcG9y
dCByZXNvdXJjZSBsb2FkaW5nIHRocnUgdGhlICdzaGFkb3cgcGFnZScuCisgICAgdmlydHVhbCB2
b2lkIGRpZENyZWF0ZURhdGFTb3VyY2UoV2ViRnJhbWUqLCBXZWJEYXRhU291cmNlKik7CisgICAg
dmlydHVhbCBXZWJBcHBsaWNhdGlvbkNhY2hlSG9zdCogY3JlYXRlQXBwbGljYXRpb25DYWNoZUhv
c3QoV2ViRnJhbWUqLCBXZWJBcHBsaWNhdGlvbkNhY2hlSG9zdENsaWVudCopOworCiAKICAgICAv
LyBXZWJTaGFyZWRXb3JrZXIgbWV0aG9kczoKICAgICB2aXJ0dWFsIGJvb2wgaXNTdGFydGVkKCk7
CkBAIC02MywxOSArMTA3LDcyIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoRGV2
VG9vbHMoKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEZXZUb29sc01lc3NhZ2UoY29uc3Qg
V2ViU3RyaW5nJik7CiAKLSAgICAvLyBXZWJXb3JrZXJCYXNlIG1ldGhvZHM6Ci0gICAgV2ViV29y
a2VyQ2xpZW50KiBjbGllbnQoKTsKLSAgICBXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1vbkNs
aWVudCgpIHsgcmV0dXJuIG1fY2xpZW50OyB9CiAKICAgICAvLyBOZXdXZWJXb3JrZXJCYXNlIG1l
dGhvZHM6Ci0gICAgTmV3V2ViQ29tbW9uV29ya2VyQ2xpZW50KiBuZXdDb21tb25DbGllbnQoKSB7
IHJldHVybiBtX2NsaWVudDsgfQorICAgIFdlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xp
ZW50KCkgeyByZXR1cm4gbV9jbGllbnQ7IH0KIAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIH5XZWJT
aGFyZWRXb3JrZXJJbXBsKCk7CiAKLSAgICBzdGF0aWMgdm9pZCBjb25uZWN0VGFzayhXZWJDb3Jl
OjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc093blB0cjxXZWJDb3JlOjpNZXNzYWdlUG9y
dENoYW5uZWw+KTsKKyAgICBXZWJTaGFyZWRXb3JrZXJDbGllbnQqIGNsaWVudCgpIHsgcmV0dXJu
IG1fY2xpZW50OyB9CisKKyAgICB2b2lkIHNldFdvcmtlclRocmVhZChQYXNzUmVmUHRyPFdlYkNv
cmU6OldvcmtlclRocmVhZD4gdGhyZWFkKSB7IG1fd29ya2VyVGhyZWFkID0gdGhyZWFkOyB9Cisg
ICAgV2ViQ29yZTo6V29ya2VyVGhyZWFkKiB3b3JrZXJUaHJlYWQoKSB7IHJldHVybiBtX3dvcmtl
clRocmVhZC5nZXQoKTsgfQorCisgICAgLy8gU2h1dHMgZG93biB0aGUgd29ya2VyIHRocmVhZC4K
KyAgICB2b2lkIHN0b3BXb3JrZXJUaHJlYWQoKTsKIAotICAgIFdlYkNvbW1vbldvcmtlckNsaWVu
dCogbV9jbGllbnQ7CisgICAgLy8gQ3JlYXRlcyB0aGUgc2hhZG93IGxvYWRlciB1c2VkIGZvciB3
b3JrZXIgbmV0d29yayByZXF1ZXN0cy4KKyAgICB2b2lkIGluaXRpYWxpemVMb2FkZXIoY29uc3Qg
V2ViVVJMJik7CisKKworICAgIHN0YXRpYyB2b2lkIGNvbm5lY3RUYXNrKFdlYkNvcmU6OlNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzT3duUHRyPFdlYkNvcmU6Ok1lc3NhZ2VQb3J0Q2hhbm5l
bD4pOworICAgIC8vIFRhc2tzIHRoYXQgYXJlIHJ1biBvbiB0aGUgbWFpbiB0aHJlYWQuCisgICAg
c3RhdGljIHZvaWQgcG9zdE1lc3NhZ2VUYXNrKAorICAgICAgICBXZWJDb3JlOjpTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwKKyAgICAgICAgV2ViU2hhcmVkV29ya2VySW1wbCogdGhpc1B0ciwKKyAg
ICAgICAgV1RGOjpTdHJpbmcgbWVzc2FnZSwKKyAgICAgICAgUGFzc093blB0cjxXZWJDb3JlOjpN
ZXNzYWdlUG9ydENoYW5uZWxBcnJheT4gY2hhbm5lbHMpOworICAgIHN0YXRpYyB2b2lkIHBvc3RF
eGNlcHRpb25UYXNrKAorICAgICAgICBXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwK
KyAgICAgICAgV2ViU2hhcmVkV29ya2VySW1wbCogdGhpc1B0ciwKKyAgICAgICAgY29uc3QgV1RG
OjpTdHJpbmcmIG1lc3NhZ2UsCisgICAgICAgIGludCBsaW5lTnVtYmVyLAorICAgICAgICBjb25z
dCBXVEY6OlN0cmluZyYgc291cmNlVVJMKTsKKyAgICBzdGF0aWMgdm9pZCBwb3N0Q29uc29sZU1l
c3NhZ2VUYXNrKAorICAgICAgICBXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwKKyAg
ICAgICAgV2ViU2hhcmVkV29ya2VySW1wbCogdGhpc1B0ciwKKyAgICAgICAgaW50IHNvdXJjZSwK
KyAgICAgICAgaW50IHR5cGUsCisgICAgICAgIGludCBsZXZlbCwKKyAgICAgICAgY29uc3QgV1RG
OjpTdHJpbmcmIG1lc3NhZ2UsCisgICAgICAgIGludCBsaW5lTnVtYmVyLAorICAgICAgICBjb25z
dCBXVEY6OlN0cmluZyYgc291cmNlVVJMKTsKKyAgICBzdGF0aWMgdm9pZCBwb3N0TWVzc2FnZVRv
UGFnZUluc3BlY3RvclRhc2soV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYlNo
YXJlZFdvcmtlckltcGwqLCBjb25zdCBXVEY6OlN0cmluZyYpOworICAgIHN0YXRpYyB2b2lkIHVw
ZGF0ZUluc3BlY3RvclN0YXRlQ29va2llVGFzayhXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgV2ViU2hhcmVkV29ya2VySW1wbCogdGhpc1B0ciwgY29uc3QgV1RGOjpTdHJpbmcmIGNv
b2tpZSk7CisgICAgc3RhdGljIHZvaWQgY29uZmlybU1lc3NhZ2VUYXNrKAorICAgICAgICBXZWJD
b3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwKKyAgICAgICAgV2ViU2hhcmVkV29ya2VySW1w
bCogdGhpc1B0ciwKKyAgICAgICAgYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkpOworICAgIHN0YXRp
YyB2b2lkIHJlcG9ydFBlbmRpbmdBY3Rpdml0eVRhc2soCisgICAgICAgIFdlYkNvcmU6OlNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLAorICAgICAgICBXZWJTaGFyZWRXb3JrZXJJbXBsKiB0aGlzUHRy
LAorICAgICAgICBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSk7CisgICAgc3RhdGljIHZvaWQgd29y
a2VyQ29udGV4dENsb3NlZFRhc2soCisgICAgICAgIFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLAorICAgICAgICBXZWJTaGFyZWRXb3JrZXJJbXBsKiB0aGlzUHRyKTsKKyAgICBzdGF0
aWMgdm9pZCB3b3JrZXJDb250ZXh0RGVzdHJveWVkVGFzaygKKyAgICAgICAgV2ViQ29yZTo6U2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosCisgICAgICAgIFdlYlNoYXJlZFdvcmtlckltcGwqIHRoaXNQ
dHIpOworCisgICAgLy8gJ3NoYWRvdyBwYWdlJyAtIGNyZWF0ZWQgdG8gcHJveHkgbG9hZGluZyBy
ZXF1ZXN0cyBmcm9tIHRoZSB3b3JrZXIuCisgICAgUmVmUHRyPFdlYkNvcmU6OlNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQ+IG1fbG9hZGluZ0RvY3VtZW50OworICAgIFdlYlZpZXcqIG1fd2ViVmlldzsK
KyAgICBib29sIG1fYXNrZWRUb1Rlcm1pbmF0ZTsKKworICAgIFJlZlB0cjxXZWJDb3JlOjpXb3Jr
ZXJUaHJlYWQ+IG1fd29ya2VyVGhyZWFkOworCisgICAgV2ViU2hhcmVkV29ya2VyQ2xpZW50KiBt
X2NsaWVudDsKICAgICBib29sIG1fcGF1c2VXb3JrZXJDb250ZXh0T25TdGFydDsKIH07CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckJhc2UuY3BwIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViV29ya2VyQmFzZS5jcHAKaW5kZXggOTNmODQw
Yy4uYjEyZGI3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViV29y
a2VyQmFzZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViV29ya2VyQmFz
ZS5jcHAKQEAgLTMyLDIwICszMiw3IEBACiAjaW5jbHVkZSAiV2ViV29ya2VyQmFzZS5oIgogCiAj
aW5jbHVkZSAiQ3Jvc3NUaHJlYWRUYXNrLmgiCi0jaW5jbHVkZSAiRGF0YWJhc2VUYXNrLmgiCi0j
aW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJNZXNzYWdlUG9ydENoYW5uZWwuaCIKLSNp
bmNsdWRlICJQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5oIgotI2luY2x1ZGUgIlNlY3VyaXR5
T3JpZ2luLmgiCiAKLSNpbmNsdWRlICJXZWJEYXRhU291cmNlSW1wbC5oIgotI2luY2x1ZGUgIldl
YkZpbGVFcnJvci5oIgotI2luY2x1ZGUgIldlYkZyYW1lQ2xpZW50LmgiCi0jaW5jbHVkZSAiV2Vi
RnJhbWVJbXBsLmgiCi0jaW5jbHVkZSAiV2ViTWVzc2FnZVBvcnRDaGFubmVsLmgiCi0jaW5jbHVk
ZSAiV2ViUnVudGltZUZlYXR1cmVzLmgiCi0jaW5jbHVkZSAiV2ViU2V0dGluZ3MuaCIKLSNpbmNs
dWRlICJXZWJWaWV3LmgiCiAjaW5jbHVkZSAiV2ViV29ya2VyQ2xpZW50LmgiCiAKICNpbmNsdWRl
ICJXb3JrZXJDb250ZXh0LmgiCkBAIC01OSw4MiArNDYsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsK
IAogI2lmIEVOQUJMRShXT1JLRVJTKQogCi0vLyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbiB0
aGUgbWFpbiB0aHJlYWQgdG8gZm9yY2UgdG8gaW5pdGlhbGl6ZSBzb21lIHN0YXRpYwotLy8gdmFs
dWVzIHVzZWQgaW4gV2ViS2l0IGJlZm9yZSBhbnkgd29ya2VyIHRocmVhZCBpcyBzdGFydGVkLiBU
aGlzIGlzIGJlY2F1c2UgaW4KLS8vIG91ciB3b3JrZXIgcHJvY2Vzc3MsIHdlIGRvIG5vdCBydW4g
YW55IFdlYktpdCBjb2RlIGluIG1haW4gdGhyZWFkIGFuZCB0aHVzCi0vLyB3aGVuIG11bHRpcGxl
IHdvcmtlcnMgdHJ5IHRvIHN0YXJ0IGF0IHRoZSBzYW1lIHRpbWUsIHdlIG1pZ2h0IGhpdCBjcmFz
aCBkdWUKLS8vIHRvIGNvbnRlbnRpb24gZm9yIGluaXRpYWxpemluZyBzdGF0aWMgdmFsdWVzLgot
c3RhdGljIHZvaWQgaW5pdGlhbGl6ZVdlYktpdFN0YXRpY1ZhbHVlcygpCi17Ci0gICAgc3RhdGlj
IGJvb2wgaW5pdGlhbGl6ZWQgPSBmYWxzZTsKLSAgICBpZiAoIWluaXRpYWxpemVkKSB7Ci0gICAg
ICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKLSAgICAgICAgLy8gTm90ZSB0aGF0IHdlIGhhdmUgdG8g
cGFzcyBhIFVSTCB3aXRoIHZhbGlkIHByb3RvY29sIGluIG9yZGVyIHRvIGZvbGxvdwotICAgICAg
ICAvLyB0aGUgcGF0aCB0byBkbyBzdGF0aWMgdmFsdWUgaW5pdGlhbGl6YXRpb25zLgotICAgICAg
ICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG9yaWdpbiA9Ci0gICAgICAgICAgICBTZWN1cml0eU9y
aWdpbjo6Y3JlYXRlKEtVUkwoUGFyc2VkVVJMU3RyaW5nLCAiaHR0cDovL2xvY2FsaG9zdCIpKTsK
LSAgICAgICAgb3JpZ2luLnJlbGVhc2UoKTsKLSAgICB9Ci19Ci0KLVdlYldvcmtlckJhc2U6Oldl
YldvcmtlckJhc2UoKQotICAgIDogbV93ZWJWaWV3KDApCi0gICAgLCBtX2Fza2VkVG9UZXJtaW5h
dGUoZmFsc2UpCi17Ci0gICAgaW5pdGlhbGl6ZVdlYktpdFN0YXRpY1ZhbHVlcygpOwotfQotCi1X
ZWJXb3JrZXJCYXNlOjp+V2ViV29ya2VyQmFzZSgpCi17Ci0gICAgQVNTRVJUKG1fd2ViVmlldyk7
Ci0gICAgV2ViRnJhbWVJbXBsKiB3ZWJGcmFtZSA9IHN0YXRpY19jYXN0PFdlYkZyYW1lSW1wbCo+
KG1fd2ViVmlldy0+bWFpbkZyYW1lKCkpOwotICAgIGlmICh3ZWJGcmFtZSkKLSAgICAgICAgd2Vi
RnJhbWUtPnNldENsaWVudCgwKTsKLSAgICBtX3dlYlZpZXctPmNsb3NlKCk7Ci19Ci0KLXZvaWQg
V2ViV29ya2VyQmFzZTo6c3RvcFdvcmtlclRocmVhZCgpCi17Ci0gICAgaWYgKG1fYXNrZWRUb1Rl
cm1pbmF0ZSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fYXNrZWRUb1Rlcm1pbmF0ZSA9IHRydWU7
Ci0gICAgaWYgKG1fd29ya2VyVGhyZWFkKQotICAgICAgICBtX3dvcmtlclRocmVhZC0+c3RvcCgp
OwotfQotCi12b2lkIFdlYldvcmtlckJhc2U6OmluaXRpYWxpemVMb2FkZXIoY29uc3QgV2ViVVJM
JiB1cmwpCi17Ci0gICAgLy8gQ3JlYXRlICdzaGFkb3cgcGFnZScuIFRoaXMgcGFnZSBpcyBuZXZl
ciBkaXNwbGF5ZWQsIGl0IGlzIHVzZWQgdG8gcHJveHkgdGhlCi0gICAgLy8gbG9hZGluZyByZXF1
ZXN0cyBmcm9tIHRoZSB3b3JrZXIgY29udGV4dCB0byB0aGUgcmVzdCBvZiBXZWJLaXQgYW5kIENo
cm9taXVtCi0gICAgLy8gaW5mcmFzdHJ1Y3R1cmUuCi0gICAgQVNTRVJUKCFtX3dlYlZpZXcpOwot
ICAgIG1fd2ViVmlldyA9IFdlYlZpZXc6OmNyZWF0ZSgwKTsKLSAgICBtX3dlYlZpZXctPnNldHRp
bmdzKCktPnNldE9mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hlRW5hYmxlZChXZWJSdW50aW1lRmVh
dHVyZXM6OmlzQXBwbGljYXRpb25DYWNoZUVuYWJsZWQoKSk7Ci0gICAgLy8gRklYTUU6IFNldHRp
bmdzIGluZm9ybWF0aW9uIHNob3VsZCBiZSBwYXNzZWQgdG8gdGhlIFdvcmtlciBwcm9jZXNzIGZy
b20gQnJvd3NlciBwcm9jZXNzIHdoZW4gdGhlIHdvcmtlcgotICAgIC8vIGlzIGNyZWF0ZWQgKHNp
bWlsYXIgdG8gUmVuZGVyVGhyZWFkOjpPbkNyZWF0ZU5ld1ZpZXcpLgotICAgIG1fd2ViVmlldy0+
c2V0dGluZ3MoKS0+c2V0SGl4aWU3NldlYlNvY2tldFByb3RvY29sRW5hYmxlZChmYWxzZSk7Ci0g
ICAgbV93ZWJWaWV3LT5pbml0aWFsaXplTWFpbkZyYW1lKHRoaXMpOwotCi0gICAgV2ViRnJhbWVJ
bXBsKiB3ZWJGcmFtZSA9IHN0YXRpY19jYXN0PFdlYkZyYW1lSW1wbCo+KG1fd2ViVmlldy0+bWFp
bkZyYW1lKCkpOwotCi0gICAgLy8gQ29uc3RydWN0IHN1YnN0aXR1dGUgZGF0YSBzb3VyY2UgZm9y
IHRoZSAnc2hhZG93IHBhZ2UnLiBXZSBvbmx5IG5lZWQgaXQKLSAgICAvLyB0byBoYXZlIHNhbWUg
b3JpZ2luIGFzIHRoZSB3b3JrZXIgc28gdGhlIGxvYWRpbmcgY2hlY2tzIHdvcmsgY29ycmVjdGx5
LgotICAgIENTdHJpbmcgY29udGVudCgiIik7Ci0gICAgaW50IGxlbiA9IHN0YXRpY19jYXN0PGlu
dD4oY29udGVudC5sZW5ndGgoKSk7Ci0gICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmKFNoYXJl
ZEJ1ZmZlcjo6Y3JlYXRlKGNvbnRlbnQuZGF0YSgpLCBsZW4pKTsKLSAgICBTdWJzdGl0dXRlRGF0
YSBzdWJzdERhdGEoYnVmLCBTdHJpbmcoInRleHQvaHRtbCIpLCBTdHJpbmcoIlVURi04IiksIEtV
UkwoKSk7Ci0gICAgd2ViRnJhbWUtPmZyYW1lKCktPmxvYWRlcigpLT5sb2FkKFJlc291cmNlUmVx
dWVzdCh1cmwpLCBzdWJzdERhdGEsIGZhbHNlKTsKLQotICAgIC8vIFRoaXMgZG9jdW1lbnQgd2ls
bCBiZSB1c2VkIGFzICdsb2FkaW5nIGNvbnRleHQnIGZvciB0aGUgd29ya2VyLgotICAgIG1fbG9h
ZGluZ0RvY3VtZW50ID0gd2ViRnJhbWUtPmZyYW1lKCktPmRvY3VtZW50KCk7Ci19Ci0KLXZvaWQg
V2ViV29ya2VyQmFzZTo6ZGlzcGF0Y2hUYXNrVG9NYWluVGhyZWFkKFBhc3NPd25QdHI8U2NyaXB0
RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gdGFzaykKLXsKLSAgICBjYWxsT25NYWluVGhyZWFkKGlu
dm9rZVRhc2tNZXRob2QsIHRhc2subGVha1B0cigpKTsKLX0KLQotdm9pZCBXZWJXb3JrZXJCYXNl
OjppbnZva2VUYXNrTWV0aG9kKHZvaWQqIHBhcmFtKQorc3RhdGljIHZvaWQgaW52b2tlVGFza01l
dGhvZCh2b2lkKiBwYXJhbSkKIHsKICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrKiB0
YXNrID0KICAgICAgICAgc3RhdGljX2Nhc3Q8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayo+
KHBhcmFtKTsKQEAgLTE0MiwxOTMgKzU0LDEwIEBAIHZvaWQgV2ViV29ya2VyQmFzZTo6aW52b2tl
VGFza01ldGhvZCh2b2lkKiBwYXJhbSkKICAgICBkZWxldGUgdGFzazsKIH0KIAotdm9pZCBXZWJX
b3JrZXJCYXNlOjpkaWRDcmVhdGVEYXRhU291cmNlKFdlYkZyYW1lKiwgV2ViRGF0YVNvdXJjZSog
ZHMpCi17Ci0gICAgLy8gVGVsbCB0aGUgbG9hZGVyIHRvIGxvYWQgdGhlIGRhdGEgaW50byB0aGUg
J3NoYWRvdyBwYWdlJyBzeW5jaHJvbm91c2x5LAotICAgIC8vIHNvIHdlIGNhbiBncmFiIHRoZSBy
ZXN1bHRpbmcgRG9jdW1lbnQgcmlnaHQgYWZ0ZXIgbG9hZC4KLSAgICBzdGF0aWNfY2FzdDxXZWJE
YXRhU291cmNlSW1wbCo+KGRzKS0+c2V0RGVmZXJNYWluUmVzb3VyY2VEYXRhTG9hZChmYWxzZSk7
Ci19Ci0KLVdlYkFwcGxpY2F0aW9uQ2FjaGVIb3N0KiBXZWJXb3JrZXJCYXNlOjpjcmVhdGVBcHBs
aWNhdGlvbkNhY2hlSG9zdChXZWJGcmFtZSosIFdlYkFwcGxpY2F0aW9uQ2FjaGVIb3N0Q2xpZW50
KiBhcHBjYWNoZUhvc3RDbGllbnQpCi17Ci0gICAgaWYgKGNvbW1vbkNsaWVudCgpKQotICAgICAg
ICByZXR1cm4gY29tbW9uQ2xpZW50KCktPmNyZWF0ZUFwcGxpY2F0aW9uQ2FjaGVIb3N0KGFwcGNh
Y2hlSG9zdENsaWVudCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLS8vIFdvcmtlck9iamVjdFByb3h5
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0KLXZvaWQgV2ViV29ya2VyQmFzZTo6cG9zdE1lc3NhZ2VUb1dvcmtlck9iamVjdChQYXNz
UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5l
bEFycmF5PiBjaGFubmVscykKLXsKLSAgICBkaXNwYXRjaFRhc2tUb01haW5UaHJlYWQoY3JlYXRl
Q2FsbGJhY2tUYXNrKCZwb3N0TWVzc2FnZVRhc2ssIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhp
cyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNz
YWdlLT50b1dpcmVTdHJpbmcoKSwgY2hhbm5lbHMpKTsKLX0KLQotdm9pZCBXZWJXb3JrZXJCYXNl
Ojpwb3N0TWVzc2FnZVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYldvcmtlckJhc2UqIHRoaXNQdHIsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbWVzc2FnZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NPd25QdHI8TWVzc2FnZVBvcnRDaGFu
bmVsQXJyYXk+IGNoYW5uZWxzKQotewotICAgIGlmICghdGhpc1B0ci0+Y2xpZW50KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIFdlYk1lc3NhZ2VQb3J0Q2hhbm5lbEFycmF5IHdlYkNoYW5uZWxz
KGNoYW5uZWxzID8gY2hhbm5lbHMtPnNpemUoKSA6IDApOwotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgd2ViQ2hhbm5lbHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgd2ViQ2hhbm5lbHNbaV0g
PSAoKmNoYW5uZWxzKVtpXS0+Y2hhbm5lbCgpLT53ZWJDaGFubmVsUmVsZWFzZSgpOwotICAgICAg
ICB3ZWJDaGFubmVsc1tpXS0+c2V0Q2xpZW50KDApOwotICAgIH0KLQotICAgIHRoaXNQdHItPmNs
aWVudCgpLT5wb3N0TWVzc2FnZVRvV29ya2VyT2JqZWN0KG1lc3NhZ2UsIHdlYkNoYW5uZWxzKTsK
LX0KLQotdm9pZCBXZWJXb3JrZXJCYXNlOjpwb3N0RXhjZXB0aW9uVG9Xb3JrZXJPYmplY3QoY29u
c3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgbGluZU51bWJlciwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgc291cmNlVVJMKQotewotICAg
IGRpc3BhdGNoVGFza1RvTWFpblRocmVhZCgKLSAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZw
b3N0RXhjZXB0aW9uVGFzaywgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyh0aGlzKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSwgbGluZU51bWJlciwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNvdXJjZVVSTCkpOwotfQotCi12b2lkIFdlYldvcmtlckJhc2U6OnBv
c3RFeGNlcHRpb25UYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYldvcmtlckJhc2UqIHRoaXNQdHIsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgZXJyb3JN
ZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGluZU51
bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpCi17Ci0gICAgaWYgKCF0aGlzUHRyLT5jb21t
b25DbGllbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdGhpc1B0ci0+Y29tbW9uQ2xpZW50
KCktPnBvc3RFeGNlcHRpb25Ub1dvcmtlck9iamVjdChlcnJvck1lc3NhZ2UsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVy
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc291cmNlVVJMKTsKLX0KLQotdm9pZCBXZWJXb3JrZXJCYXNlOjpwb3N0Q29uc29sZU1lc3Nh
Z2VUb1dvcmtlck9iamVjdChNZXNzYWdlU291cmNlIHNvdXJjZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZVR5cGUgdHlwZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2Fn
ZUxldmVsIGxldmVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsaW5lTnVtYmVyLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcm
IHNvdXJjZVVSTCkKLXsKLSAgICBkaXNwYXRjaFRhc2tUb01haW5UaHJlYWQoY3JlYXRlQ2FsbGJh
Y2tUYXNrKCZwb3N0Q29uc29sZU1lc3NhZ2VUYXNrLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHRo
aXMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291
cmNlLCB0eXBlLCBsZXZlbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZVVSTCkpOwotfQogCi12b2lkIFdl
YldvcmtlckJhc2U6OnBvc3RDb25zb2xlTWVzc2FnZVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBX
ZWJXb3JrZXJCYXNlKiB0aGlzUHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBzb3VyY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IHR5cGUsIGludCBsZXZlbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpbmVOdW1iZXIsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpCi17
Ci0gICAgaWYgKCF0aGlzUHRyLT5jb21tb25DbGllbnQoKSkKLSAgICAgICAgcmV0dXJuOwotICAg
IHRoaXNQdHItPmNvbW1vbkNsaWVudCgpLT5wb3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVj
dChzb3VyY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHR5cGUsIGxldmVsLCBtZXNzYWdlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyLCBz
b3VyY2VVUkwpOwotfQotCi12b2lkIFdlYldvcmtlckJhc2U6OnBvc3RNZXNzYWdlVG9QYWdlSW5z
cGVjdG9yKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICBkaXNwYXRjaFRhc2tUb01haW5U
aHJlYWQoY3JlYXRlQ2FsbGJhY2tUYXNrKCZwb3N0TWVzc2FnZVRvUGFnZUluc3BlY3RvclRhc2ss
IEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcyksIG1lc3NhZ2UpKTsKLX0KLQotdm9pZCBXZWJX
b3JrZXJCYXNlOjpwb3N0TWVzc2FnZVRvUGFnZUluc3BlY3RvclRhc2soU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIFdlYldvcmtlckJhc2UqIHRoaXNQdHIsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkK
LXsKLSAgICBpZiAoIXRoaXNQdHItPmNvbW1vbkNsaWVudCgpKQotICAgICAgICByZXR1cm47Ci0g
ICAgdGhpc1B0ci0+Y29tbW9uQ2xpZW50KCktPmRpc3BhdGNoRGV2VG9vbHNNZXNzYWdlKG1lc3Nh
Z2UpOwotfQotCi12b2lkIFdlYldvcmtlckJhc2U6OnVwZGF0ZUluc3BlY3RvclN0YXRlQ29va2ll
KGNvbnN0IFdURjo6U3RyaW5nJiBjb29raWUpCi17Ci0gICAgZGlzcGF0Y2hUYXNrVG9NYWluVGhy
ZWFkKGNyZWF0ZUNhbGxiYWNrVGFzaygmdXBkYXRlSW5zcGVjdG9yU3RhdGVDb29raWVUYXNrLCBB
bGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHRoaXMpLCBjb29raWUpKTsKLX0KLQotdm9pZCBXZWJXb3Jr
ZXJCYXNlOjp1cGRhdGVJbnNwZWN0b3JTdGF0ZUNvb2tpZVRhc2soU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFdlYldvcmtlckJhc2UqIHRoaXNQdHIsIGNvbnN0IFN0cmluZyYgY29va2llKQotewot
ICAgIGlmICghdGhpc1B0ci0+Y29tbW9uQ2xpZW50KCkpCi0gICAgICAgIHJldHVybjsKLSAgICB0
aGlzUHRyLT5jb21tb25DbGllbnQoKS0+c2F2ZURldlRvb2xzQWdlbnRTdGF0ZShjb29raWUpOwot
fQotCi12b2lkIFdlYldvcmtlckJhc2U6OmNvbmZpcm1NZXNzYWdlRnJvbVdvcmtlck9iamVjdChi
b29sIGhhc1BlbmRpbmdBY3Rpdml0eSkKLXsKLSAgICBkaXNwYXRjaFRhc2tUb01haW5UaHJlYWQo
Y3JlYXRlQ2FsbGJhY2tUYXNrKCZjb25maXJtTWVzc2FnZVRhc2ssIEFsbG93Q3Jvc3NUaHJlYWRB
Y2Nlc3ModGhpcyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBoYXNQZW5kaW5nQWN0aXZpdHkpKTsKLX0KLQotdm9pZCBXZWJXb3JrZXJCYXNlOjpjb25m
aXJtTWVzc2FnZVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYldvcmtlckJhc2UqIHRoaXNQdHIsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGhhc1BlbmRpbmdBY3Rp
dml0eSkKLXsKLSAgICBpZiAoIXRoaXNQdHItPmNsaWVudCgpKQotICAgICAgICByZXR1cm47Ci0g
ICAgdGhpc1B0ci0+Y2xpZW50KCktPmNvbmZpcm1NZXNzYWdlRnJvbVdvcmtlck9iamVjdChoYXNQ
ZW5kaW5nQWN0aXZpdHkpOwotfQotCi12b2lkIFdlYldvcmtlckJhc2U6OnJlcG9ydFBlbmRpbmdB
Y3Rpdml0eShib29sIGhhc1BlbmRpbmdBY3Rpdml0eSkKLXsKLSAgICBkaXNwYXRjaFRhc2tUb01h
aW5UaHJlYWQoY3JlYXRlQ2FsbGJhY2tUYXNrKCZyZXBvcnRQZW5kaW5nQWN0aXZpdHlUYXNrLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3dDcm9z
c1RocmVhZEFjY2Vzcyh0aGlzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGhhc1BlbmRpbmdBY3Rpdml0eSkpOwotfQotCi12b2lkIFdlYldvcmtlckJh
c2U6OnJlcG9ydFBlbmRpbmdBY3Rpdml0eVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJX
b3JrZXJCYXNlKiB0aGlzUHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KQotewotICAgIGlmICghdGhpc1B0ci0+
Y2xpZW50KCkpCi0gICAgICAgIHJldHVybjsKLSAgICB0aGlzUHRyLT5jbGllbnQoKS0+cmVwb3J0
UGVuZGluZ0FjdGl2aXR5KGhhc1BlbmRpbmdBY3Rpdml0eSk7Ci19Ci0KLXZvaWQgV2ViV29ya2Vy
QmFzZTo6d29ya2VyQ29udGV4dENsb3NlZCgpCi17Ci0gICAgZGlzcGF0Y2hUYXNrVG9NYWluVGhy
ZWFkKGNyZWF0ZUNhbGxiYWNrVGFzaygmd29ya2VyQ29udGV4dENsb3NlZFRhc2ssCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbGxvd0Nyb3NzVGhyZWFk
QWNjZXNzKHRoaXMpKSk7Ci19Ci0KLXZvaWQgV2ViV29ya2VyQmFzZTo6d29ya2VyQ29udGV4dENs
b3NlZFRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViV29ya2VyQmFzZSogdGhpc1B0cikKLXsK
LSAgICBpZiAodGhpc1B0ci0+Y29tbW9uQ2xpZW50KCkpCi0gICAgICAgIHRoaXNQdHItPmNvbW1v
bkNsaWVudCgpLT53b3JrZXJDb250ZXh0Q2xvc2VkKCk7Ci0KLSAgICB0aGlzUHRyLT5zdG9wV29y
a2VyVGhyZWFkKCk7Ci19Ci0KLXZvaWQgV2ViV29ya2VyQmFzZTo6d29ya2VyQ29udGV4dERlc3Ry
b3llZCgpCi17Ci0gICAgZGlzcGF0Y2hUYXNrVG9NYWluVGhyZWFkKGNyZWF0ZUNhbGxiYWNrVGFz
aygmd29ya2VyQ29udGV4dERlc3Ryb3llZFRhc2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHRoaXMpKSk7Ci19
Ci0KLXZvaWQgV2ViV29ya2VyQmFzZTo6d29ya2VyQ29udGV4dERlc3Ryb3llZFRhc2soU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgV2ViV29ya2VyQmFzZSogdGhpc1B0cikKLXsKLSAgICBpZiAodGhp
c1B0ci0+Y29tbW9uQ2xpZW50KCkpCi0gICAgICAgIHRoaXNQdHItPmNvbW1vbkNsaWVudCgpLT53
b3JrZXJDb250ZXh0RGVzdHJveWVkKCk7Ci0gICAgLy8gVGhlIGxpZmV0aW1lIG9mIHRoaXMgcHJv
eHkgaXMgY29udHJvbGxlZCBieSB0aGUgd29ya2VyIGNvbnRleHQuCi0gICAgZGVsZXRlIHRoaXNQ
dHI7Ci19Ci0KLS8vIFdvcmtlckxvYWRlclByb3h5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXZvaWQgV2ViV29ya2VyQmFzZTo6
cG9zdFRhc2tUb0xvYWRlcihQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+
IHRhc2spCi17Ci0gICAgQVNTRVJUKG1fbG9hZGluZ0RvY3VtZW50LT5pc0RvY3VtZW50KCkpOwot
ICAgIG1fbG9hZGluZ0RvY3VtZW50LT5wb3N0VGFzayh0YXNrKTsKLX0KLQotdm9pZCBXZWJXb3Jr
ZXJCYXNlOjpwb3N0VGFza0Zvck1vZGVUb1dvcmtlckNvbnRleHQoCi0gICAgUGFzc093blB0cjxT
Y3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNrLCBjb25zdCBTdHJpbmcmIG1vZGUpCit2
b2lkIFdlYldvcmtlckJhc2U6OmRpc3BhdGNoVGFza1RvTWFpblRocmVhZChQYXNzT3duUHRyPFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2spCiB7Ci0gICAgbV93b3JrZXJUaHJlYWQt
PnJ1bkxvb3AoKS5wb3N0VGFza0Zvck1vZGUodGFzaywgbW9kZSk7CisgICAgY2FsbE9uTWFpblRo
cmVhZChpbnZva2VUYXNrTWV0aG9kLCB0YXNrLmxlYWtQdHIoKSk7CiB9CiAKICNlbmRpZiAvLyBF
TkFCTEUoV09SS0VSUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YldvcmtlckJhc2UuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckJhc2Uu
aAppbmRleCA5MzU5OWY0Li5jNDNjNjM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJXb3JrZXJCYXNlLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViV29ya2VyQmFzZS5oCkBAIC0zNSwxMzggKzM1LDI2IEBACiAKICNpbmNsdWRlICJTY3JpcHRF
eGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViQ29tbW9uV29ya2VyQ2xpZW50LmgiCi0j
aW5jbHVkZSAiV2ViRnJhbWVDbGllbnQuaCIKICNpbmNsdWRlICJXb3JrZXJMb2FkZXJQcm94eS5o
IgogI2luY2x1ZGUgIldvcmtlck9iamVjdFByb3h5LmgiCi0jaW5jbHVkZSAiV29ya2VyVGhyZWFk
LmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CiAKLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIFdvcmtlclRocmVhZDsKLX0KIAogbmFtZXNw
YWNlIFdlYktpdCB7Ci1jbGFzcyBXZWJBcHBsaWNhdGlvbkNhY2hlSG9zdDsKLWNsYXNzIFdlYkFw
cGxpY2F0aW9uQ2FjaGVIb3N0Q2xpZW50OwotY2xhc3MgV2ViQ29tbW9uV29ya2VyQ2xpZW50Owot
Y2xhc3MgV2ViU2VjdXJpdHlPcmlnaW47Ci1jbGFzcyBXZWJTdHJpbmc7Ci1jbGFzcyBXZWJVUkw7
CiBjbGFzcyBXZWJWaWV3OwotY2xhc3MgV2ViV29ya2VyOwotY2xhc3MgV2ViV29ya2VyQ2xpZW50
OwogCiAvLyBCYXNlIGNsYXNzIGZvciBXZWJTaGFyZWRXb3JrZXJJbXBsLCBXZWJXb3JrZXJDbGll
bnRJbXBsIGFuZCAoZGVmdW5jdCkgV2ViV29ya2VySW1wbAogLy8gY29udGFpbmluZyBjb21tb24g
aW50ZXJmYWNlIGZvciBzaGFyZWQgd29ya2VycyBhbmQgZGVkaWNhdGVkIGluLXByb2Mgd29ya2Vy
cyBpbXBsZW1lbnRhdGlvbi4KIC8vCiAvLyBGSVhNRTogUmVuYW1lIHRoaXMgY2xhc3MgaW50byBX
ZWJXb3JrZXJCYXNlLCBtZXJnZSBleGlzdGluZyBXZWJXb3JrZXJCYXNlIGFuZCBXZWJTaGFyZWRX
b3JrZXIuCi1jbGFzcyBOZXdXZWJXb3JrZXJCYXNlIDogcHVibGljIFdlYkNvcmU6Oldvcmtlckxv
YWRlclByb3h5IHsKK2NsYXNzIFdlYldvcmtlckJhc2UgOiBwdWJsaWMgV2ViQ29yZTo6V29ya2Vy
TG9hZGVyUHJveHkgewogcHVibGljOgotICAgIHZpcnR1YWwgTmV3V2ViQ29tbW9uV29ya2VyQ2xp
ZW50KiBuZXdDb21tb25DbGllbnQoKSA9IDA7CisgICAgdmlydHVhbCBXZWJDb21tb25Xb3JrZXJD
bGllbnQqIGNvbW1vbkNsaWVudCgpID0gMDsKICAgICB2aXJ0dWFsIFdlYlZpZXcqIHZpZXcoKSBj
b25zdCA9IDA7Ci19OwotCi0vLyBCYXNlIGNsYXNzIGZvciBXZWJTaGFyZWRXb3JrZXJJbXBsIGFu
ZCBXZWJXb3JrZXJJbXBsLiBJdCBjb250YWlucyBjb21tb24KLS8vIGNvZGUgdXNlZCBieSBib3Ro
IGltcGxlbWVudGF0aW9uIGNsYXNzZXMsIGluY2x1ZGluZyBpbXBsZW1lbnRhdGlvbnMgb2YgdGhl
Ci0vLyBXb3JrZXJPYmplY3RQcm94eSBhbmQgV29ya2VyTG9hZGVyUHJveHkgaW50ZXJmYWNlcy4K
LWNsYXNzIFdlYldvcmtlckJhc2UgOiBwdWJsaWMgV2ViQ29yZTo6V29ya2VyT2JqZWN0UHJveHkK
LSAgICAgICAgICAgICAgICAgICAgLCBwdWJsaWMgTmV3V2ViV29ya2VyQmFzZQotICAgICAgICAg
ICAgICAgICAgICAsIHB1YmxpYyBXZWJGcmFtZUNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgV2ViV29y
a2VyQmFzZSgpOwotICAgIHZpcnR1YWwgfldlYldvcmtlckJhc2UoKTsKLQotICAgIC8vIFdlYkNv
bW1vbldvcmtlckJhc2UgbWV0aG9kczoKLSAgICB2aXJ0dWFsIHZvaWQgcG9zdE1lc3NhZ2VUb1dv
cmtlck9iamVjdCgKLSAgICAgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0
VmFsdWU+LAotICAgICAgICBQYXNzT3duUHRyPFdlYkNvcmU6Ok1lc3NhZ2VQb3J0Q2hhbm5lbEFy
cmF5Pik7Ci0gICAgdmlydHVhbCB2b2lkIHBvc3RFeGNlcHRpb25Ub1dvcmtlck9iamVjdCgKLSAg
ICAgICAgY29uc3QgV1RGOjpTdHJpbmcmLCBpbnQsIGNvbnN0IFdURjo6U3RyaW5nJik7Ci0gICAg
dmlydHVhbCB2b2lkIHBvc3RDb25zb2xlTWVzc2FnZVRvV29ya2VyT2JqZWN0KAotICAgICAgICBX
ZWJDb3JlOjpNZXNzYWdlU291cmNlLCBXZWJDb3JlOjpNZXNzYWdlVHlwZSwKLSAgICAgICAgV2Vi
Q29yZTo6TWVzc2FnZUxldmVsLCBjb25zdCBXVEY6OlN0cmluZyYsIGludCwgY29uc3QgV1RGOjpT
dHJpbmcmKTsKLSAgICB2aXJ0dWFsIHZvaWQgcG9zdE1lc3NhZ2VUb1BhZ2VJbnNwZWN0b3IoY29u
c3QgV1RGOjpTdHJpbmcmKTsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlSW5zcGVjdG9yU3RhdGVD
b29raWUoY29uc3QgV1RGOjpTdHJpbmcmKTsKLSAgICB2aXJ0dWFsIHZvaWQgY29uZmlybU1lc3Nh
Z2VGcm9tV29ya2VyT2JqZWN0KGJvb2wpOwotICAgIHZpcnR1YWwgdm9pZCByZXBvcnRQZW5kaW5n
QWN0aXZpdHkoYm9vbCk7Ci0gICAgdmlydHVhbCB2b2lkIHdvcmtlckNvbnRleHRDbG9zZWQoKTsK
LSAgICB2aXJ0dWFsIHZvaWQgd29ya2VyQ29udGV4dERlc3Ryb3llZCgpOwotICAgIHZpcnR1YWwg
V2ViVmlldyogdmlldygpIGNvbnN0IHsgcmV0dXJuIG1fd2ViVmlldzsgfQotCi0gICAgLy8gV2Vi
Q29yZTo6V29ya2VyTG9hZGVyUHJveHkgbWV0aG9kczoKLSAgICB2aXJ0dWFsIHZvaWQgcG9zdFRh
c2tUb0xvYWRlcihQYXNzT3duUHRyPFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRh
c2s+KTsKLSAgICB2aXJ0dWFsIHZvaWQgcG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJDb250ZXh0KAot
ICAgICAgICBQYXNzT3duUHRyPFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+
LCBjb25zdCBXVEY6OlN0cmluZyYgbW9kZSk7Ci0KLSAgICAvLyBXZWJGcmFtZUNsaWVudCBtZXRo
b2RzIHRvIHN1cHBvcnQgcmVzb3VyY2UgbG9hZGluZyB0aHJ1IHRoZSAnc2hhZG93IHBhZ2UnLgot
ICAgIHZpcnR1YWwgdm9pZCBkaWRDcmVhdGVEYXRhU291cmNlKFdlYkZyYW1lKiwgV2ViRGF0YVNv
dXJjZSopOwotICAgIHZpcnR1YWwgV2ViQXBwbGljYXRpb25DYWNoZUhvc3QqIGNyZWF0ZUFwcGxp
Y2F0aW9uQ2FjaGVIb3N0KFdlYkZyYW1lKiwgV2ViQXBwbGljYXRpb25DYWNoZUhvc3RDbGllbnQq
KTsKIAogICAgIC8vIEV4ZWN1dGVzIHRoZSBnaXZlbiB0YXNrIG9uIHRoZSBtYWluIHRocmVhZC4K
ICAgICBzdGF0aWMgdm9pZCBkaXNwYXRjaFRhc2tUb01haW5UaHJlYWQoUGFzc093blB0cjxXZWJD
b3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPik7Ci0KLXByb3RlY3RlZDoKLSAgICB2
aXJ0dWFsIFdlYkNvbW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50KCkgPSAwOwotICAgIHZp
cnR1YWwgV2ViV29ya2VyQ2xpZW50KiBjbGllbnQoKSA9IDA7Ci0KLSAgICB2b2lkIHNldFdvcmtl
clRocmVhZChQYXNzUmVmUHRyPFdlYkNvcmU6OldvcmtlclRocmVhZD4gdGhyZWFkKSB7IG1fd29y
a2VyVGhyZWFkID0gdGhyZWFkOyB9Ci0gICAgV2ViQ29yZTo6V29ya2VyVGhyZWFkKiB3b3JrZXJU
aHJlYWQoKSB7IHJldHVybiBtX3dvcmtlclRocmVhZC5nZXQoKTsgfQotCi0gICAgLy8gU2h1dHMg
ZG93biB0aGUgd29ya2VyIHRocmVhZC4KLSAgICB2b2lkIHN0b3BXb3JrZXJUaHJlYWQoKTsKLQot
ICAgIC8vIENyZWF0ZXMgdGhlIHNoYWRvdyBsb2FkZXIgdXNlZCBmb3Igd29ya2VyIG5ldHdvcmsg
cmVxdWVzdHMuCi0gICAgdm9pZCBpbml0aWFsaXplTG9hZGVyKGNvbnN0IFdlYlVSTCYpOwotCi1w
cml2YXRlOgotICAgIC8vIEZ1bmN0aW9uIHVzZWQgdG8gaW52b2tlIHRhc2tzIG9uIHRoZSBtYWlu
IHRocmVhZC4KLSAgICBzdGF0aWMgdm9pZCBpbnZva2VUYXNrTWV0aG9kKHZvaWQqKTsKLQotICAg
IC8vIFRhc2tzIHRoYXQgYXJlIHJ1biBvbiB0aGUgbWFpbiB0aHJlYWQuCi0gICAgc3RhdGljIHZv
aWQgcG9zdE1lc3NhZ2VUYXNrKAotICAgICAgICBXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0LAotICAgICAgICBXZWJXb3JrZXJCYXNlKiB0aGlzUHRyLAotICAgICAgICBX
VEY6OlN0cmluZyBtZXNzYWdlLAotICAgICAgICBQYXNzT3duUHRyPFdlYkNvcmU6Ok1lc3NhZ2VQ
b3J0Q2hhbm5lbEFycmF5PiBjaGFubmVscyk7Ci0gICAgc3RhdGljIHZvaWQgcG9zdEV4Y2VwdGlv
blRhc2soCi0gICAgICAgIFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQs
Ci0gICAgICAgIFdlYldvcmtlckJhc2UqIHRoaXNQdHIsCi0gICAgICAgIGNvbnN0IFdURjo6U3Ry
aW5nJiBtZXNzYWdlLAotICAgICAgICBpbnQgbGluZU51bWJlciwKLSAgICAgICAgY29uc3QgV1RG
OjpTdHJpbmcmIHNvdXJjZVVSTCk7Ci0gICAgc3RhdGljIHZvaWQgcG9zdENvbnNvbGVNZXNzYWdl
VGFzaygKLSAgICAgICAgV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwK
LSAgICAgICAgV2ViV29ya2VyQmFzZSogdGhpc1B0ciwKLSAgICAgICAgaW50IHNvdXJjZSwKLSAg
ICAgICAgaW50IHR5cGUsCi0gICAgICAgIGludCBsZXZlbCwKLSAgICAgICAgY29uc3QgV1RGOjpT
dHJpbmcmIG1lc3NhZ2UsCi0gICAgICAgIGludCBsaW5lTnVtYmVyLAotICAgICAgICBjb25zdCBX
VEY6OlN0cmluZyYgc291cmNlVVJMKTsKLSAgICBzdGF0aWMgdm9pZCBwb3N0TWVzc2FnZVRvUGFn
ZUluc3BlY3RvclRhc2soV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYldvcmtl
ckJhc2UqLCBjb25zdCBXVEY6OlN0cmluZyYpOwotICAgIHN0YXRpYyB2b2lkIHVwZGF0ZUluc3Bl
Y3RvclN0YXRlQ29va2llVGFzayhXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2Vi
V29ya2VyQmFzZSogdGhpc1B0ciwgY29uc3QgV1RGOjpTdHJpbmcmIGNvb2tpZSk7Ci0gICAgc3Rh
dGljIHZvaWQgY29uZmlybU1lc3NhZ2VUYXNrKAotICAgICAgICBXZWJDb3JlOjpTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0LAotICAgICAgICBXZWJXb3JrZXJCYXNlKiB0aGlzUHRyLAot
ICAgICAgICBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSk7Ci0gICAgc3RhdGljIHZvaWQgcmVwb3J0
UGVuZGluZ0FjdGl2aXR5VGFzaygKLSAgICAgICAgV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCwKLSAgICAgICAgV2ViV29ya2VyQmFzZSogdGhpc1B0ciwKLSAgICAgICAg
Ym9vbCBoYXNQZW5kaW5nQWN0aXZpdHkpOwotICAgIHN0YXRpYyB2b2lkIHdvcmtlckNvbnRleHRD
bG9zZWRUYXNrKAotICAgICAgICBXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0LAotICAgICAgICBXZWJXb3JrZXJCYXNlKiB0aGlzUHRyKTsKLSAgICBzdGF0aWMgdm9pZCB3
b3JrZXJDb250ZXh0RGVzdHJveWVkVGFzaygKLSAgICAgICAgV2ViQ29yZTo6U2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwKLSAgICAgICAgV2ViV29ya2VyQmFzZSogdGhpc1B0cik7Ci0K
LSAgICAvLyAnc2hhZG93IHBhZ2UnIC0gY3JlYXRlZCB0byBwcm94eSBsb2FkaW5nIHJlcXVlc3Rz
IGZyb20gdGhlIHdvcmtlci4KLSAgICBSZWZQdHI8V2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29u
dGV4dD4gbV9sb2FkaW5nRG9jdW1lbnQ7Ci0gICAgV2ViVmlldyogbV93ZWJWaWV3OwotICAgIGJv
b2wgbV9hc2tlZFRvVGVybWluYXRlOwotCi0gICAgUmVmUHRyPFdlYkNvcmU6OldvcmtlclRocmVh
ZD4gbV93b3JrZXJUaHJlYWQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckNsaWVudEltcGwuY3BwIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViV29ya2VyQ2xpZW50SW1wbC5jcHAKaW5kZXgg
NWI5ZjMyMC4uNTA5MGFmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViV29ya2VyQ2xpZW50SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViV29ya2VyQ2xpZW50SW1wbC5jcHAKQEAgLTYzLDcgKzYzLDYgQEAKICNpbmNsdWRlICJwbGF0
Zm9ybS9XZWJVUkwuaCIKICNpbmNsdWRlICJXZWJWaWV3SW1wbC5oIgogI2luY2x1ZGUgIldlYldv
cmtlci5oIgotI2luY2x1ZGUgIldlYldvcmtlckltcGwuaCIKIAogdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtl
ckNsaWVudEltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYldvcmtlckNsaWVu
dEltcGwuaAppbmRleCA3MDA2YTk0Li41MTg5YWQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJXb3JrZXJDbGllbnRJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViV29ya2VyQ2xpZW50SW1wbC5oCkBAIC01OCw4ICs1OCw4IEBAIGNsYXNz
IFdlYkZyYW1lSW1wbDsKIC8vIEluIGVzc2VuY2UsIHRoaXMgY2xhc3Mgd3JhcHMgV29ya2VyTWVz
c2FnaW5nUHJveHkuCiBjbGFzcyBXZWJXb3JrZXJDbGllbnRJbXBsIDogcHVibGljIFdlYkNvcmU6
OldvcmtlckNvbnRleHRQcm94eQogICAgICAgICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBX
ZWJDb3JlOjpXb3JrZXJPYmplY3RQcm94eQotICAgICAgICAgICAgICAgICAgICAgICAgICAsIHB1
YmxpYyBOZXdXZWJXb3JrZXJCYXNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICwgcHVibGlj
IE5ld1dlYkNvbW1vbldvcmtlckNsaWVudCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICwg
cHVibGljIFdlYldvcmtlckJhc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLCBwdWJsaWMg
V2ViQ29tbW9uV29ya2VyQ2xpZW50IHsKIHB1YmxpYzoKICAgICAvLyBXZWJDb3JlOjpXb3JrZXJD
b250ZXh0UHJveHkgRmFjdG9yeS4KICAgICBzdGF0aWMgV2ViQ29yZTo6V29ya2VyQ29udGV4dFBy
b3h5KiBjcmVhdGVXb3JrZXJDb250ZXh0UHJveHkoV2ViQ29yZTo6V29ya2VyKik7CkBAIC0xMDcs
NyArMTA3LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJG
aWxlU3lzdGVtQ2FsbGJhY2tzKik7CiAKICAgICAvLyBXZWJDb21tZW50V29ya2VyQmFzZSBtZXRo
b2RzOgotICAgIHZpcnR1YWwgTmV3V2ViQ29tbW9uV29ya2VyQ2xpZW50KiBuZXdDb21tb25DbGll
bnQoKSB7IHJldHVybiB0aGlzOyB9CisgICAgdmlydHVhbCBXZWJDb21tb25Xb3JrZXJDbGllbnQq
IGNvbW1vbkNsaWVudCgpIHsgcmV0dXJuIHRoaXM7IH0KICAgICB2aXJ0dWFsIFdlYlZpZXcqIHZp
ZXcoKSBjb25zdDsKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYldvcmtlckltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
V29ya2VySW1wbC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjYmZlZWUuLjAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViV29ya2VySW1wbC5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSwxNjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
OSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0g
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0g
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJXZWJXb3JrZXJJbXBsLmgiCi0KLSNpbmNsdWRlICJDcm9zc1RocmVhZFRhc2suaCIKLSNp
bmNsdWRlICJEZWRpY2F0ZWRXb3JrZXJDb250ZXh0LmgiCi0jaW5jbHVkZSAiRGVkaWNhdGVkV29y
a2VyVGhyZWFkLmgiCi0jaW5jbHVkZSAiS1VSTC5oIgotI2luY2x1ZGUgIk1lc3NhZ2VFdmVudC5o
IgotI2luY2x1ZGUgIk1lc3NhZ2VQb3J0LmgiCi0jaW5jbHVkZSAiTWVzc2FnZVBvcnRDaGFubmVs
LmgiCi0jaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgotI2luY2x1ZGUgIlNlY3Vy
aXR5T3JpZ2luLmgiCi0jaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCi0jaW5jbHVk
ZSAiU3Vic3RpdHV0ZURhdGEuaCIKLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0jaW5jbHVkZSA8
d3RmL1RocmVhZGluZy5oPgotCi0jaW5jbHVkZSAiUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwu
aCIKLSNpbmNsdWRlICJXZWJNZXNzYWdlUG9ydENoYW5uZWwuaCIKLSNpbmNsdWRlICJwbGF0Zm9y
bS9XZWJTdHJpbmcuaCIKLSNpbmNsdWRlICJwbGF0Zm9ybS9XZWJVUkwuaCIKLSNpbmNsdWRlICJX
ZWJXb3JrZXJDbGllbnQuaCIKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFj
ZSBXZWJLaXQgewotCi0jaWYgRU5BQkxFKFdPUktFUlMpCi0KLVdlYldvcmtlciogV2ViV29ya2Vy
OjpjcmVhdGUoV2ViV29ya2VyQ2xpZW50KiBjbGllbnQpCi17Ci0gICAgcmV0dXJuIG5ldyBXZWJX
b3JrZXJJbXBsKGNsaWVudCk7Ci19Ci0KLQotV2ViV29ya2VySW1wbDo6V2ViV29ya2VySW1wbChX
ZWJXb3JrZXJDbGllbnQqIGNsaWVudCkKLSAgICA6IG1fY2xpZW50KGNsaWVudCkKLXsKLX0KLQot
V2ViV29ya2VySW1wbDo6fldlYldvcmtlckltcGwoKQotewotfQotCi1OZXdXZWJDb21tb25Xb3Jr
ZXJDbGllbnQqIFdlYldvcmtlckltcGw6Om5ld0NvbW1vbkNsaWVudCgpCi17Ci0gICAgcmV0dXJu
IG1fY2xpZW50OwotfQotCi1XZWJDb21tb25Xb3JrZXJDbGllbnQqIFdlYldvcmtlckltcGw6OmNv
bW1vbkNsaWVudCgpCi17Ci0gICAgcmV0dXJuIG1fY2xpZW50OwotfQotCi12b2lkIFdlYldvcmtl
ckltcGw6OnBvc3RNZXNzYWdlVG9Xb3JrZXJDb250ZXh0VGFzayhXZWJDb3JlOjpTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgV2ViV29ya2VySW1wbCogdGhpc1B0ciwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBh
c3NPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsQXJyYXk+IGNoYW5uZWxzKQotewotICAgIEFTU0VS
VChjb250ZXh0LT5pc1dvcmtlckNvbnRleHQoKSk7Ci0gICAgRGVkaWNhdGVkV29ya2VyQ29udGV4
dCogd29ya2VyQ29udGV4dCA9Ci0gICAgICAgIHN0YXRpY19jYXN0PERlZGljYXRlZFdvcmtlckNv
bnRleHQqPihjb250ZXh0KTsKLQotICAgIE93blB0cjxNZXNzYWdlUG9ydEFycmF5PiBwb3J0cyA9
Ci0gICAgICAgIE1lc3NhZ2VQb3J0OjplbnRhbmdsZVBvcnRzKCpjb250ZXh0LCBjaGFubmVscyk7
Ci0gICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZE1lc3NhZ2UgPQot
ICAgICAgICBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZUZyb21XaXJlKG1lc3NhZ2UpOwot
ICAgIHdvcmtlckNvbnRleHQtPmRpc3BhdGNoRXZlbnQoTWVzc2FnZUV2ZW50OjpjcmVhdGUoCi0g
ICAgICAgIHBvcnRzLnJlbGVhc2UoKSwgc2VyaWFsaXplZE1lc3NhZ2UucmVsZWFzZSgpKSk7Ci0g
ICAgdGhpc1B0ci0+Y29uZmlybU1lc3NhZ2VGcm9tV29ya2VyT2JqZWN0KHdvcmtlckNvbnRleHQt
Pmhhc1BlbmRpbmdBY3Rpdml0eSgpKTsKLX0KLQotLy8gV2ViV29ya2VyIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQot
dm9pZCBXZWJXb3JrZXJJbXBsOjpzdGFydFdvcmtlckNvbnRleHQoY29uc3QgV2ViVVJMJiBzY3Jp
cHRVcmwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJT
dHJpbmcmIHVzZXJBZ2VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFdlYlN0cmluZyYgc291cmNlQ29kZSkKLXsKLSAgICBpbml0aWFsaXplTG9hZGVyKHNj
cmlwdFVybCk7Ci0gICAgc2V0V29ya2VyVGhyZWFkKERlZGljYXRlZFdvcmtlclRocmVhZDo6Y3Jl
YXRlKHNjcmlwdFVybCwgdXNlckFnZW50LCBzb3VyY2VDb2RlLCAqdGhpcywgKnRoaXMsIERvbnRQ
YXVzZVdvcmtlckNvbnRleHRPblN0YXJ0KSk7Ci0gICAgLy8gV29ya2VyIGluaXRpYWxpemF0aW9u
IG1lYW5zIGEgcGVuZGluZyBhY3Rpdml0eS4KLSAgICByZXBvcnRQZW5kaW5nQWN0aXZpdHkodHJ1
ZSk7Ci0gICAgd29ya2VyVGhyZWFkKCktPnN0YXJ0KCk7Ci19Ci0KLXZvaWQgV2ViV29ya2VySW1w
bDo6dGVybWluYXRlV29ya2VyQ29udGV4dCgpCi17Ci0gICAgc3RvcFdvcmtlclRocmVhZCgpOwot
fQotCi12b2lkIFdlYldvcmtlckltcGw6OnBvc3RNZXNzYWdlVG9Xb3JrZXJDb250ZXh0KGNvbnN0
IFdlYlN0cmluZyYgbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgV2ViTWVzc2FnZVBvcnRDaGFubmVsQXJyYXkmIHdlYkNoYW5uZWxz
KQotewotICAgIE93blB0cjxNZXNzYWdlUG9ydENoYW5uZWxBcnJheT4gY2hhbm5lbHM7Ci0gICAg
aWYgKHdlYkNoYW5uZWxzLnNpemUoKSkgewotICAgICAgICBjaGFubmVscyA9IGFkb3B0UHRyKG5l
dyBNZXNzYWdlUG9ydENoYW5uZWxBcnJheSh3ZWJDaGFubmVscy5zaXplKCkpKTsKLSAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCB3ZWJDaGFubmVscy5zaXplKCk7ICsraSkgewotICAgICAg
ICAgICAgUmVmUHRyPFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsPiBwbGF0Zm9ybV9jaGFubmVs
ID0KLSAgICAgICAgICAgICAgICBQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbDo6Y3JlYXRlKHdl
YkNoYW5uZWxzW2ldKTsKLSAgICAgICAgICAgIHdlYkNoYW5uZWxzW2ldLT5zZXRDbGllbnQocGxh
dGZvcm1fY2hhbm5lbC5nZXQoKSk7Ci0gICAgICAgICAgICAoKmNoYW5uZWxzKVtpXSA9IE1lc3Nh
Z2VQb3J0Q2hhbm5lbDo6Y3JlYXRlKHBsYXRmb3JtX2NoYW5uZWwpOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgd29ya2VyVGhyZWFkKCktPnJ1bkxvb3AoKS5wb3N0VGFzaygKLSAgICAgICAgY3Jl
YXRlQ2FsbGJhY2tUYXNrKCZwb3N0TWVzc2FnZVRvV29ya2VyQ29udGV4dFRhc2ssCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHRoaXMpLCBTdHJpbmco
bWVzc2FnZSksIGNoYW5uZWxzLnJlbGVhc2UoKSkpOwotfQotCi12b2lkIFdlYldvcmtlckltcGw6
Ondvcmtlck9iamVjdERlc3Ryb3llZCgpCi17Ci0gICAgLy8gV29ya2VyIG9iamVjdCBpbiB0aGUg
cmVuZGVyZXIgd2FzIGRlc3Ryb3llZCwgcGVyaGFwcyBhIHJlc3VsdCBvZiBHQy4KLSAgICAvLyBG
b3IgdXMsIGl0J3MgYSBzaWduYWwgdG8gc3RhcnQgdGVybWluYXRpbmcgdGhlIFdvcmtlckNvbnRl
eHQgdG9vLgotICAgIC8vIEZJWE1FOiB3aGVuICdraWxsIGEgd29ya2VyJyBodG1sNSBzcGVjIGFs
Z29yaXRobSBpcyBpbXBsZW1lbnRlZCwgaXQKLSAgICAvLyBzaG91bGQgYmUgdXNlZCBoZXJlIGlu
c3RlYWQgb2YgJ3Rlcm1pbmF0ZSBhIHdvcmtlcicuCi0gICAgdGVybWluYXRlV29ya2VyQ29udGV4
dCgpOwotfQotCi12b2lkIFdlYldvcmtlckltcGw6OmNsaWVudERlc3Ryb3llZCgpCi17Ci0gICAg
bV9jbGllbnQgPSAwOwotfQotCi0jZWxzZQotCi1XZWJXb3JrZXIqIFdlYldvcmtlcjo6Y3JlYXRl
KFdlYldvcmtlckNsaWVudCogY2xpZW50KQotewotICAgIHJldHVybiAwOwotfQotCi0jZW5kaWYg
Ly8gRU5BQkxFKFdPUktFUlMpCi0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViV29ya2VySW1wbC5oIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViV29ya2VySW1wbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA0ZjA1MmE3Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YldvcmtlckltcGwuaAorKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0
aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFdlYldv
cmtlckltcGxfaAotI2RlZmluZSBXZWJXb3JrZXJJbXBsX2gKLQotI2luY2x1ZGUgIldlYldvcmtl
ci5oIgotCi0jaWYgRU5BQkxFKFdPUktFUlMpCi0KLSNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25D
b250ZXh0LmgiCi0KLSNpbmNsdWRlICJXZWJXb3JrZXJCYXNlLmgiCi0KLW5hbWVzcGFjZSBXZWJL
aXQgewotCi0vLyBUaGlzIGNsYXNzIGlzIHVzZWQgYnkgdGhlIHdvcmtlciBwcm9jZXNzIGNvZGUg
dG8gdGFsayB0byB0aGUgV2ViQ29yZTo6V29ya2VyCi0vLyBpbXBsZW1lbnRhdGlvbi4gIEl0IGNh
bid0IHVzZSBpdCBkaXJlY3RseSBzaW5jZSBpdCB1c2VzIFdlYktpdCB0eXBlcywgc28gdGhpcwot
Ly8gY2xhc3MgY29udmVydHMgdGhlIGRhdGEgdHlwZXMuICBXaGVuIHRoZSBXZWJDb3JlOjpXb3Jr
ZXIgb2JqZWN0IHdhbnRzIHRvIGNhbGwKLS8vIFdlYkNvcmU6Oldvcmtlck9iamVjdFByb3h5LCB0
aGlzIGNsYXNzIHdpbGwgY29udmVyIHRvIENocm9tZSBkYXRhIHR5cGVzIGZpcnN0Ci0vLyBhbmQg
dGhlbiBjYWxsIHRoZSBzdXBwbGllZCBXZWJXb3JrZXJDbGllbnQuCi1jbGFzcyBXZWJXb3JrZXJJ
bXBsIDogcHVibGljIFdlYldvcmtlckJhc2UsIHB1YmxpYyBXZWJXb3JrZXIgewotcHVibGljOgot
ICAgIGV4cGxpY2l0IFdlYldvcmtlckltcGwoV2ViV29ya2VyQ2xpZW50KiBjbGllbnQpOwotCi0g
ICAgLy8gV2ViV29ya2VyIG1ldGhvZHM6Ci0gICAgdmlydHVhbCB2b2lkIHN0YXJ0V29ya2VyQ29u
dGV4dChjb25zdCBXZWJVUkwmLCBjb25zdCBXZWJTdHJpbmcmLCBjb25zdCBXZWJTdHJpbmcmKTsK
LSAgICB2aXJ0dWFsIHZvaWQgdGVybWluYXRlV29ya2VyQ29udGV4dCgpOwotICAgIHZpcnR1YWwg
dm9pZCBwb3N0TWVzc2FnZVRvV29ya2VyQ29udGV4dChjb25zdCBXZWJTdHJpbmcmLCBjb25zdCBX
ZWJNZXNzYWdlUG9ydENoYW5uZWxBcnJheSYpOwotICAgIHZpcnR1YWwgdm9pZCB3b3JrZXJPYmpl
Y3REZXN0cm95ZWQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgY2xpZW50RGVzdHJveWVkKCk7Ci0KLSAg
ICAvLyBXZWJXb3JrZXJCYXNlIG1ldGhvZHM6Ci0gICAgdmlydHVhbCBXZWJXb3JrZXJDbGllbnQq
IGNsaWVudCgpIHsgcmV0dXJuIG1fY2xpZW50OyB9Ci0gICAgdmlydHVhbCBXZWJDb21tb25Xb3Jr
ZXJDbGllbnQqIGNvbW1vbkNsaWVudCgpOwotCi0gICAgLy8gTmV3V2ViV29ya2VyQmFzZSBtZXRo
b2RzOgotICAgIHZpcnR1YWwgTmV3V2ViQ29tbW9uV29ya2VyQ2xpZW50KiBuZXdDb21tb25DbGll
bnQoKTsKLQotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIH5XZWJXb3JrZXJJbXBsKCk7Ci0KLSAgICAv
LyBUYXNrcyB0aGF0IGFyZSBydW4gb24gdGhlIHdvcmtlciB0aHJlYWQuCi0gICAgc3RhdGljIHZv
aWQgcG9zdE1lc3NhZ2VUb1dvcmtlckNvbnRleHRUYXNrKAotICAgICAgICBXZWJDb3JlOjpTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LAotICAgICAgICBXZWJXb3JrZXJJbXBsKiB0aGlz
UHRyLAotICAgICAgICBjb25zdCBXVEY6OlN0cmluZyYgbWVzc2FnZSwKLSAgICAgICAgUGFzc093
blB0cjxXZWJDb3JlOjpNZXNzYWdlUG9ydENoYW5uZWxBcnJheT4gY2hhbm5lbHMpOwotCi0gICAg
V2ViV29ya2VyQ2xpZW50KiBtX2NsaWVudDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAot
Ci0jZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJp
ZGdlLmNwcAppbmRleCA1MjNlZjc1Li44Y2U1ZTY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9Xb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Xb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdl
LmNwcApAQCAtMTU2LDcgKzE1Niw3IEBAIHZvaWQgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0Jy
aWRnZTo6c3RvcCgpCiAgICAgfQogfQogCi12b2lkIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NC
cmlkZ2U6OnBvc3RPcGVuRmlsZVN5c3RlbVRvTWFpblRocmVhZChOZXdXZWJDb21tb25Xb3JrZXJD
bGllbnQqIGNvbW1vbkNsaWVudCwgV2ViRmlsZVN5c3RlbTo6VHlwZSB0eXBlLCBsb25nIGxvbmcg
c2l6ZSwgYm9vbCBjcmVhdGUsIGNvbnN0IFN0cmluZyYgbW9kZSkKK3ZvaWQgV29ya2VyRmlsZVN5
c3RlbUNhbGxiYWNrc0JyaWRnZTo6cG9zdE9wZW5GaWxlU3lzdGVtVG9NYWluVGhyZWFkKFdlYkNv
bW1vbldvcmtlckNsaWVudCogY29tbW9uQ2xpZW50LCBXZWJGaWxlU3lzdGVtOjpUeXBlIHR5cGUs
IGxvbmcgbG9uZyBzaXplLCBib29sIGNyZWF0ZSwgY29uc3QgU3RyaW5nJiBtb2RlKQogewogICAg
IGRpc3BhdGNoVGFza1RvTWFpblRocmVhZCgKICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZv
cGVuRmlsZVN5c3RlbU9uTWFpblRocmVhZCwKQEAgLTI1MSw3ICsyNTEsNyBAQCB2b2lkIFdvcmtl
ckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2U6OnBvc3RSZWFkRGlyZWN0b3J5VG9NYWluVGhyZWFk
KFdlYkZpbGVTeXN0ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3dDcm9zc1RocmVh
ZEFjY2Vzcyh0aGlzKSwgbW9kZSkpOwogfQogCi12b2lkIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFj
a3NCcmlkZ2U6Om9wZW5GaWxlU3lzdGVtT25NYWluVGhyZWFkKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBOZXdXZWJDb21tb25Xb3JrZXJDbGllbnQqIGNvbW1vbkNsaWVudCwgV2ViRmlsZVN5c3Rl
bTo6VHlwZSB0eXBlLCBsb25nIGxvbmcgc2l6ZSwgYm9vbCBjcmVhdGUsIFdvcmtlckZpbGVTeXN0
ZW1DYWxsYmFja3NCcmlkZ2UqIGJyaWRnZSwgY29uc3QgU3RyaW5nJiBtb2RlKQordm9pZCBXb3Jr
ZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlOjpvcGVuRmlsZVN5c3RlbU9uTWFpblRocmVhZChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViQ29tbW9uV29ya2VyQ2xpZW50KiBjb21tb25DbGll
bnQsIFdlYkZpbGVTeXN0ZW06OlR5cGUgdHlwZSwgbG9uZyBsb25nIHNpemUsIGJvb2wgY3JlYXRl
LCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlKiBicmlkZ2UsIGNvbnN0IFN0cmluZyYg
bW9kZSkKIHsKICAgICBpZiAoIWNvbW1vbkNsaWVudCkKICAgICAgICAgYnJpZGdlLT5kaWRGYWls
T25NYWluVGhyZWFkKFdlYkZpbGVFcnJvckFib3J0LCBtb2RlKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlkZ2UuaCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dvcmtlckZpbGVTeXN0ZW1DYWxsYmFja3NCcmlk
Z2UuaAppbmRleCA4YWU3ZWIzLi45YzQ0Y2IxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9Xb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlLmgKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZS5oCkBA
IC01MSw3ICs1MSw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBBc3luY0ZpbGVTeXN0
ZW07CiBjbGFzcyBNYWluVGhyZWFkRmlsZVN5c3RlbUNhbGxiYWNrczsKLWNsYXNzIE5ld1dlYkNv
bW1vbldvcmtlckNsaWVudDsKK2NsYXNzIFdlYkNvbW1vbldvcmtlckNsaWVudDsKIGNsYXNzIFRo
cmVhZGFibGVDYWxsYmFja3NCcmlkZ2VXcmFwcGVyOwogY2xhc3MgV2ViRmlsZVN5c3RlbUNhbGxi
YWNrczsKIHN0cnVjdCBXZWJGaWxlSW5mbzsKQEAgLTg3LDcgKzg3LDcgQEAgcHVibGljOgogICAg
IH0KIAogICAgIC8vIE1ldGhvZHMgdGhhdCBjcmVhdGUgYW4gaW5zdGFuY2UgYW5kIHBvc3QgYW4g
aW5pdGlhbCByZXF1ZXN0IHRhc2sgdG8gdGhlIG1haW4gdGhyZWFkLiBUaGV5IG11c3QgYmUgY2Fs
bGVkIG9uIHRoZSB3b3JrZXIgdGhyZWFkLgotICAgIHZvaWQgcG9zdE9wZW5GaWxlU3lzdGVtVG9N
YWluVGhyZWFkKE5ld1dlYkNvbW1vbldvcmtlckNsaWVudCosIFdlYkZpbGVTeXN0ZW06OlR5cGUs
IGxvbmcgbG9uZyBzaXplLCBib29sIGNyZWF0ZSwgY29uc3QgU3RyaW5nJiBtb2RlKTsKKyAgICB2
b2lkIHBvc3RPcGVuRmlsZVN5c3RlbVRvTWFpblRocmVhZChXZWJDb21tb25Xb3JrZXJDbGllbnQq
LCBXZWJGaWxlU3lzdGVtOjpUeXBlLCBsb25nIGxvbmcgc2l6ZSwgYm9vbCBjcmVhdGUsIGNvbnN0
IFN0cmluZyYgbW9kZSk7CiAgICAgdm9pZCBwb3N0TW92ZVRvTWFpblRocmVhZChXZWJGaWxlU3lz
dGVtKiwgY29uc3QgV2ViQ29yZTo6S1VSTCYgc3JjUGF0aCwgY29uc3QgV2ViQ29yZTo6S1VSTCYg
ZGVzdFBhdGgsIGNvbnN0IFN0cmluZyYgbW9kZSk7CiAgICAgdm9pZCBwb3N0Q29weVRvTWFpblRo
cmVhZChXZWJGaWxlU3lzdGVtKiwgY29uc3QgV2ViQ29yZTo6S1VSTCYgc3JjUGF0aCwgY29uc3Qg
V2ViQ29yZTo6S1VSTCYgZGVzdFBhdGgsIGNvbnN0IFN0cmluZyYgbW9kZSk7CiAgICAgdm9pZCBw
b3N0UmVtb3ZlVG9NYWluVGhyZWFkKFdlYkZpbGVTeXN0ZW0qLCBjb25zdCBXZWJDb3JlOjpLVVJM
JiBwYXRoLCBjb25zdCBTdHJpbmcmIG1vZGUpOwpAQCAtMTEwLDcgKzExMCw3IEBAIHByaXZhdGU6
CiAgICAgV29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZShXZWJDb3JlOjpXb3JrZXJMb2Fk
ZXJQcm94eSosIFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJGaWxlU3lzdGVt
Q2FsbGJhY2tzKik7CiAKICAgICAvLyBNZXRob2RzIHRoYXQgYXJlIHRvIGJlIGNhbGxlZCBvbiB0
aGUgbWFpbiB0aHJlYWQuCi0gICAgc3RhdGljIHZvaWQgb3BlbkZpbGVTeXN0ZW1Pbk1haW5UaHJl
YWQoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIE5ld1dlYkNvbW1vbldvcmtlckNs
aWVudCosIFdlYkZpbGVTeXN0ZW06OlR5cGUsIGxvbmcgbG9uZyBzaXplLCBib29sIGNyZWF0ZSwg
V29ya2VyRmlsZVN5c3RlbUNhbGxiYWNrc0JyaWRnZSosIGNvbnN0IFN0cmluZyYgbW9kZSk7Cisg
ICAgc3RhdGljIHZvaWQgb3BlbkZpbGVTeXN0ZW1Pbk1haW5UaHJlYWQoV2ViQ29yZTo6U2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFdlYkNvbW1vbldvcmtlckNsaWVudCosIFdlYkZpbGVTeXN0ZW06
OlR5cGUsIGxvbmcgbG9uZyBzaXplLCBib29sIGNyZWF0ZSwgV29ya2VyRmlsZVN5c3RlbUNhbGxi
YWNrc0JyaWRnZSosIGNvbnN0IFN0cmluZyYgbW9kZSk7CiAgICAgc3RhdGljIHZvaWQgbW92ZU9u
TWFpblRocmVhZChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViRmlsZVN5c3Rl
bSosIGNvbnN0IFdlYkNvcmU6OktVUkwmIHNyY1BhdGgsIGNvbnN0IFdlYkNvcmU6OktVUkwmIGRl
c3RQYXRoLCBXb3JrZXJGaWxlU3lzdGVtQ2FsbGJhY2tzQnJpZGdlKiwgY29uc3QgU3RyaW5nJiBt
b2RlKTsKICAgICBzdGF0aWMgdm9pZCBjb3B5T25NYWluVGhyZWFkKFdlYkNvcmU6OlNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBXZWJGaWxlU3lzdGVtKiwgY29uc3QgV2ViQ29yZTo6S1VSTCYgc3Jj
UGF0aCwgY29uc3QgV2ViQ29yZTo6S1VSTCYgZGVzdFBhdGgsIFdvcmtlckZpbGVTeXN0ZW1DYWxs
YmFja3NCcmlkZ2UqLCBjb25zdCBTdHJpbmcmIG1vZGUpOwogICAgIHN0YXRpYyB2b2lkIHJlbW92
ZU9uTWFpblRocmVhZChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViRmlsZVN5
c3RlbSosIGNvbnN0IFdlYkNvcmU6OktVUkwmIHBhdGgsIFdvcmtlckZpbGVTeXN0ZW1DYWxsYmFj
a3NCcmlkZ2UqLCBjb25zdCBTdHJpbmcmIG1vZGUpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdl
TG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGQyOTRiZWYuLmYzMTVlMTEgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAor
MjAxMS0xMi0yOCAgRG1pdHJ5IExvbW92ICA8ZHNsb21vdkBnb29nbGUuY29tPgorCisKKyAgICAg
ICAgW1dlYldvcmtlcnNdW0Nocm9taXVtXSBSZW1vdmUgcmVtYWlucyBvZiBjcm9zcy1wcm9jZXNz
IGRlZGljYXRlZCB3b3JrZXIgaW1wbGVtZW50YXRpb24uCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NjUwOQorICAgICAgICBKdXN0IHJlbmFtZXMsIG1l
cmdlcyBhbmQgcmVtb3ZhbCBvZiBkZWFkIGNvZGUuIEhlcmUgYXJlIHRoZSBsaXN0IG9mIHJlbmFt
ZXM6CisgICAgICAgICAgLSBXZWJDb21tb25Xb3JrZXJDbGllbnQgbWVyZ2VkIHdpdGggV2ViV29y
a2VyQ2xpZW50IGFuZCByZW5hbWVkIHRvIFdlYlNoYXJlZFdvcmtlckNsaWVudAorICAgICAgICAg
IC0gTmV3V2ViQ29tbW9uV29ya2VyQ2xpZW50IHJlbmFtZWQgdG8gV2ViQ29tbW9uV29ya2VyQ2xp
ZW50CisgICAgICAgICAgLSBXZWJXb3JrZXJCYXNlIG1lcmdlZCBpbnRvIFdlYlNoYXJlZFdvcmtl
ckltcGwKKyAgICAgICAgICAtIE5ld1dlYldvcmtlckJhc2UgcmVuYW1lZCBpbnRvIFdlYldvcmtl
ckJhc2UKKyAKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGF2aWQgTGV2aW4uCisKKyAgICAgICAgKiBE
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0V2ViV29ya2VyLmg6CisgICAgICAgIChUZXN0V2Vi
V29ya2VyOjpjcmVhdGVXb3JrZXIpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L1dlYlZpZXdIb3N0LmNwcDoKKyAgICAgICAgKFdlYlZpZXdIb3N0OjpjcmVhdGVXb3JrZXIpOgor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0Lmg6CisKIDIwMTEt
MTItMjggIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAg
ICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMDM2MjAuCmRpZmYgLS1naXQgYS9Ub29scy9E
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0V2ViV29ya2VyLmggYi9Ub29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9UZXN0V2ViV29ya2VyLmgKaW5kZXggNzFiZmZjZS4uYWQ4MmE4NyAxMDA2
NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFdlYldvcmtlci5oCisr
KyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RXZWJXb3JrZXIuaApAQCAtMzIs
OCArMzIsOCBAQAogI2RlZmluZSBUZXN0V2ViV29ya2VyX2gKIAogI2luY2x1ZGUgIldlYk1lc3Nh
Z2VQb3J0Q2hhbm5lbC5oIgorI2luY2x1ZGUgIldlYlNoYXJlZFdvcmtlckNsaWVudC5oIgogI2lu
Y2x1ZGUgIldlYldvcmtlci5oIgotI2luY2x1ZGUgIldlYldvcmtlckNsaWVudC5oIgogI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtNDMsNyArNDMs
NyBAQCBjbGFzcyBXZWJVUkw7CiB9CiAKIGNsYXNzIFRlc3RXZWJXb3JrZXIgOiBwdWJsaWMgV2Vi
S2l0OjpXZWJXb3JrZXIsCi0gICAgICAgICAgICAgICAgICAgICAgcHVibGljIFdlYktpdDo6V2Vi
V29ya2VyQ2xpZW50LAorICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBXZWJLaXQ6OldlYlNo
YXJlZFdvcmtlckNsaWVudCwKICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgV1RGOjpSZWZD
b3VudGVkPFRlc3RXZWJXb3JrZXI+IHsKIHB1YmxpYzoKICAgICBUZXN0V2ViV29ya2VyKCkKQEAg
LTgwLDcgKzgwLDcgQEAgcHVibGljOgogICAgICAgICAvLyBSZWxlYXNlcyB0aGUgcmVmZXJlbmNl
IGhlbGQgZm9yIHdvcmtlciBjb250ZXh0IG9iamVjdC4KICAgICAgICAgZGVyZWYoKTsKICAgICB9
Ci0gICAgdmlydHVhbCBXZWJLaXQ6OldlYldvcmtlciogY3JlYXRlV29ya2VyKFdlYktpdDo6V2Vi
V29ya2VyQ2xpZW50KikgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJXb3Jr
ZXIqIGNyZWF0ZVdvcmtlcihXZWJLaXQ6OldlYlNoYXJlZFdvcmtlckNsaWVudCopIHsgcmV0dXJu
IDA7IH0KICAgICB2aXJ0dWFsIFdlYktpdDo6V2ViTm90aWZpY2F0aW9uUHJlc2VudGVyKiBub3Rp
ZmljYXRpb25QcmVzZW50ZXIoKSB7IHJldHVybiAwOyB9CiAgICAgdmlydHVhbCBXZWJLaXQ6Oldl
YkFwcGxpY2F0aW9uQ2FjaGVIb3N0KiBjcmVhdGVBcHBsaWNhdGlvbkNhY2hlSG9zdChXZWJLaXQ6
OldlYkFwcGxpY2F0aW9uQ2FjaGVIb3N0Q2xpZW50KikgeyByZXR1cm4gMDsgfQogICAgIHZpcnR1
YWwgYm9vbCBhbGxvd0RhdGFiYXNlKFdlYktpdDo6V2ViRnJhbWUqLCBjb25zdCBXZWJLaXQ6Oldl
YlN0cmluZyYsIGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiwgdW5zaWduZWQgbG9uZykgeyByZXR1
cm4gdHJ1ZTsgfQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2Vi
Vmlld0hvc3QuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3Qu
Y3BwCmluZGV4IGZmZTNiMTYuLjI0YmQ0OGYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9XZWJWaWV3SG9zdC5jcHAKQEAgLTgzNiw3ICs4MzYsNyBAQCBXZWJQbHVnaW4qIFdl
YlZpZXdIb3N0OjpjcmVhdGVQbHVnaW4oV2ViRnJhbWUqIGZyYW1lLCBjb25zdCBXZWJQbHVnaW5Q
YXJhbXMmIHBhcgogICAgIHJldHVybiB3ZWJraXRfc3VwcG9ydDo6Q3JlYXRlV2ViUGx1Z2luKGZy
YW1lLCBwYXJhbXMpOwogfQogCi1XZWJXb3JrZXIqIFdlYlZpZXdIb3N0OjpjcmVhdGVXb3JrZXIo
V2ViRnJhbWUqLCBXZWJXb3JrZXJDbGllbnQqKQorV2ViV29ya2VyKiBXZWJWaWV3SG9zdDo6Y3Jl
YXRlV29ya2VyKFdlYkZyYW1lKiwgV2ViU2hhcmVkV29ya2VyQ2xpZW50KikKIHsKICAgICByZXR1
cm4gbmV3IFRlc3RXZWJXb3JrZXIoKTsKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9XZWJWaWV3SG9zdC5oCmluZGV4IDkyMjE2M2EuLmEyZjdiY2EgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmgKKysrIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuaApAQCAtNTUsNiArNTUsNyBAQCBjbGFzcyBX
ZWJEZXZpY2VPcmllbnRhdGlvbkNsaWVudE1vY2s7CiBjbGFzcyBXZWJHZW9sb2NhdGlvbkNsaWVu
dDsKIGNsYXNzIFdlYkdlb2xvY2F0aW9uQ2xpZW50TW9jazsKIGNsYXNzIFdlYkdlb2xvY2F0aW9u
U2VydmljZU1vY2s7CitjbGFzcyBXZWJTaGFyZWRXb3JrZXJDbGllbnQ7CiBjbGFzcyBXZWJTcGVl
Y2hJbnB1dENvbnRyb2xsZXI7CiBjbGFzcyBXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXJNb2NrOwog
Y2xhc3MgV2ViU3BlZWNoSW5wdXRMaXN0ZW5lcjsKQEAgLTE3Myw3ICsxNzQsNyBAQCBjbGFzcyBX
ZWJWaWV3SG9zdCA6IHB1YmxpYyBXZWJLaXQ6OldlYlNwZWxsQ2hlY2tDbGllbnQsIHB1YmxpYyBX
ZWJLaXQ6OldlYlZpZXdDbAogCiAgICAgLy8gV2ViS2l0OjpXZWJGcmFtZUNsaWVudAogICAgIHZp
cnR1YWwgV2ViS2l0OjpXZWJQbHVnaW4qIGNyZWF0ZVBsdWdpbihXZWJLaXQ6OldlYkZyYW1lKiwg
Y29uc3QgV2ViS2l0OjpXZWJQbHVnaW5QYXJhbXMmKTsKLSAgICB2aXJ0dWFsIFdlYktpdDo6V2Vi
V29ya2VyKiBjcmVhdGVXb3JrZXIoV2ViS2l0OjpXZWJGcmFtZSosIFdlYktpdDo6V2ViV29ya2Vy
Q2xpZW50Kik7CisgICAgdmlydHVhbCBXZWJLaXQ6OldlYldvcmtlciogY3JlYXRlV29ya2VyKFdl
YktpdDo6V2ViRnJhbWUqLCBXZWJLaXQ6OldlYlNoYXJlZFdvcmtlckNsaWVudCopOwogICAgIHZp
cnR1YWwgV2ViS2l0OjpXZWJNZWRpYVBsYXllciogY3JlYXRlTWVkaWFQbGF5ZXIoV2ViS2l0OjpX
ZWJGcmFtZSosIFdlYktpdDo6V2ViTWVkaWFQbGF5ZXJDbGllbnQqKTsKICAgICB2aXJ0dWFsIFdl
YktpdDo6V2ViQXBwbGljYXRpb25DYWNoZUhvc3QqIGNyZWF0ZUFwcGxpY2F0aW9uQ2FjaGVIb3N0
KFdlYktpdDo6V2ViRnJhbWUqLCBXZWJLaXQ6OldlYkFwcGxpY2F0aW9uQ2FjaGVIb3N0Q2xpZW50
Kik7CiAgICAgdmlydHVhbCB2b2lkIGxvYWRVUkxFeHRlcm5hbGx5KFdlYktpdDo6V2ViRnJhbWUq
LCBjb25zdCBXZWJLaXQ6OldlYlVSTFJlcXVlc3QmLCBXZWJLaXQ6OldlYk5hdmlnYXRpb25Qb2xp
Y3kpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>