<?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>50586</bug_id>
          
          <creation_ts>2010-12-06 13:33:33 -0800</creation_ts>
          <short_desc>Layering Violation in ContextMenu - member variable of type HitTestResult</short_desc>
          <delta_ts>2010-12-20 07:23:41 -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>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>50676</dependson>
    
    <dependson>51331</dependson>
          <blocked>50514</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brian Weinstein">bweinstein</reporter>
          <assigned_to name="Brian Weinstein">bweinstein</assigned_to>
          <cc>aroben</cc>
    
    <cc>bdakin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>leandro</cc>
    
    <cc>mrobinson</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>317824</commentid>
    <comment_count>0</comment_count>
    <who name="Brian Weinstein">bweinstein</who>
    <bug_when>2010-12-06 13:33:33 -0800</bug_when>
    <thetext>There is a layering violation in ContextMenu. It currently has a member variable:

HitTestResult m_hitTestResult;

Which is a layering violation because classes in WebCore/platform can&apos;t know about classes in WebCore.

The planned fix for this is to move ContextMenu::populate from ContextMenu into ContextMenuController.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317825</commentid>
    <comment_count>1</comment_count>
    <who name="Brian Weinstein">bweinstein</who>
    <bug_when>2010-12-06 13:33:58 -0800</bug_when>
    <thetext>&lt;rdar://problem/8734497&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318019</commentid>
    <comment_count>2</comment_count>
      <attachid>75776</attachid>
    <who name="Brian Weinstein">bweinstein</who>
    <bug_when>2010-12-06 19:46:56 -0800</bug_when>
    <thetext>Created attachment 75776
[PATCH] Layering violation fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318020</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-06 19:49:35 -0800</bug_when>
    <thetext>Attachment 75776 did not pass style-queue:

Failed to run &quot;[u&apos;git&apos;, u&apos;reset&apos;, u&apos;--hard&apos;, u&apos;HEAD&apos;]&quot; exit_code: 128
error: Could not write new index file.
fatal: Could not reset index file to revision &apos;HEAD&apos;.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318021</commentid>
    <comment_count>4</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-12-06 19:57:55 -0800</bug_when>
    <thetext>Attachment 75776 did not build on qt:
Build output: http://queues.webkit.org/results/6717083</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318027</commentid>
    <comment_count>5</comment_count>
      <attachid>75778</attachid>
    <who name="Brian Weinstein">bweinstein</who>
    <bug_when>2010-12-06 20:16:22 -0800</bug_when>
    <thetext>Created attachment 75778
[PATCH] Fix + Qt</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318028</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-06 20:18:10 -0800</bug_when>
    <thetext>Attachment 75778 did not pass style-queue:

Failed to run &quot;[u&apos;git&apos;, u&apos;reset&apos;, u&apos;--hard&apos;, u&apos;HEAD&apos;]&quot; exit_code: 128
error: git checkout-index: unable to write file LayoutTests/ChangeLog
fatal: Could not reset index file to revision &apos;HEAD&apos;.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318033</commentid>
    <comment_count>7</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-12-06 20:27:56 -0800</bug_when>
    <thetext>Attachment 75778 did not build on qt:
Build output: http://queues.webkit.org/results/6880002</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318038</commentid>
    <comment_count>8</comment_count>
      <attachid>75781</attachid>
    <who name="Brian Weinstein">bweinstein</who>
    <bug_when>2010-12-06 20:34:51 -0800</bug_when>
    <thetext>Created attachment 75781
[PATCH] Fix + Qt (Take 2)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318199</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-07 08:25:36 -0800</bug_when>
    <thetext>Attachment 75776 did not pass style-queue:

Failed to run &quot;[u&apos;git&apos;, u&apos;reset&apos;, u&apos;--hard&apos;, u&apos;refs/remotes/trunk&apos;]&quot; exit_code: 128
error: Could not write new index file.
fatal: Could not reset index file to revision &apos;refs/remotes/trunk&apos;.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318203</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-07 08:29:50 -0800</bug_when>
    <thetext>Attachment 75778 did not pass style-queue:

Failed to run &quot;[u&apos;git&apos;, u&apos;reset&apos;, u&apos;--hard&apos;, u&apos;refs/remotes/trunk&apos;]&quot; exit_code: 128
error: Could not write new index file.
fatal: Could not reset index file to revision &apos;refs/remotes/trunk&apos;.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318215</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-07 08:47:03 -0800</bug_when>
    <thetext>Attachment 75781 did not pass style-queue:

Failed to run &quot;[u&apos;git&apos;, u&apos;reset&apos;, u&apos;--hard&apos;, u&apos;refs/remotes/trunk&apos;]&quot; exit_code: 128
error: Could not write new index file.
fatal: Could not reset index file to revision &apos;refs/remotes/trunk&apos;.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318218</commentid>
    <comment_count>12</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2010-12-07 08:49:28 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; Attachment 75781 [details] did not pass style-queue:
&gt; 
&gt; Failed to run &quot;[u&apos;git&apos;, u&apos;reset&apos;, u&apos;--hard&apos;, u&apos;refs/remotes/trunk&apos;]&quot; exit_code: 128
&gt; error: Could not write new index file.
&gt; fatal: Could not reset index file to revision &apos;refs/remotes/trunk&apos;.
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against check-webkit-style.

Eric, any idea what&apos;s going on here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318247</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-07 09:27:10 -0800</bug_when>
    <thetext>Attachment 75776 did not pass style-queue:

Failed to run &quot;[u&apos;git&apos;, u&apos;reset&apos;, u&apos;--hard&apos;, u&apos;refs/remotes/trunk&apos;]&quot; exit_code: 128
error: Could not write new index file.
fatal: Could not reset index file to revision &apos;refs/remotes/trunk&apos;.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318251</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-07 09:31:21 -0800</bug_when>
    <thetext>Attachment 75778 did not pass style-queue:

Failed to run &quot;[u&apos;git&apos;, u&apos;reset&apos;, u&apos;--hard&apos;, u&apos;refs/remotes/trunk&apos;]&quot; exit_code: 128
error: Could not write new index file.
fatal: Could not reset index file to revision &apos;refs/remotes/trunk&apos;.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318265</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-07 09:48:10 -0800</bug_when>
    <thetext>Attachment 75781 did not pass style-queue:

Failed to run &quot;[u&apos;git&apos;, u&apos;reset&apos;, u&apos;--hard&apos;, u&apos;refs/remotes/trunk&apos;]&quot; exit_code: 128
error: Could not write new index file.
fatal: Could not reset index file to revision &apos;refs/remotes/trunk&apos;.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318266</commentid>
    <comment_count>16</comment_count>
      <attachid>75781</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-12-07 09:48:21 -0800</bug_when>
    <thetext>Comment on attachment 75781
[PATCH] Fix + Qt (Take 2)

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

&gt; WebCore/page/ContextMenuController.cpp:79
&gt; +    , m_hitTestResult(HitTestResult(IntPoint()))

This seems a little strange. Do we really want to initialize a hit test result with the point 0,0? Should we add a default constructor for HitTestResult? Or maybe we should use OwnPtr&lt;HitTestResult&gt; and have it be 0 until we can actually do the hit test.

&gt; WebCore/page/ContextMenuController.cpp:139
&gt; +    return new ContextMenu();

No parentheses needed here when calling new with a constructor with no arguments.

Can we change this function’s return type to PassOwnPtr?

&gt; WebCore/page/ContextMenuController.h:79
&gt; +        void createAndAppendFontSubMenu(ContextMenuItem&amp; fontMenuItem);
&gt; +        void createAndAppendSpellingAndGrammarSubMenu(ContextMenuItem&amp; spellingAndGrammarMenuItem);
&gt; +        void createAndAppendSpellingSubMenu(ContextMenuItem&amp; spellingMenuItem);
&gt; +        void createAndAppendSpeechSubMenu(ContextMenuItem&amp; speechMenuItem);
&gt; +        void createAndAppendWritingDirectionSubMenu(ContextMenuItem&amp; writingDirectionMenuItem);
&gt; +        void createAndAppendTextDirectionSubMenu(ContextMenuItem&amp; textDirectionMenuItem);
&gt; +        void createAndAppendSubstitutionsSubMenu(ContextMenuItem&amp; substitutionsMenuItem);
&gt; +        void createAndAppendTransformationsSubMenu(ContextMenuItem&amp; transformationsMenuItem);

I’m not sure these arguments benefit from the names here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318297</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-07 10:28:16 -0800</bug_when>
    <thetext>Attachment 75776 did not pass style-queue:

Failed to run &quot;[u&apos;git&apos;, u&apos;reset&apos;, u&apos;--hard&apos;, u&apos;refs/remotes/trunk&apos;]&quot; exit_code: 128
error: Could not write new index file.
fatal: Could not reset index file to revision &apos;refs/remotes/trunk&apos;.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318303</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-07 10:32:26 -0800</bug_when>
    <thetext>Attachment 75778 did not pass style-queue:

Failed to run &quot;[u&apos;git&apos;, u&apos;reset&apos;, u&apos;--hard&apos;, u&apos;refs/remotes/trunk&apos;]&quot; exit_code: 128
error: Could not write new index file.
fatal: Could not reset index file to revision &apos;refs/remotes/trunk&apos;.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318315</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-07 10:49:24 -0800</bug_when>
    <thetext>Attachment 75781 did not pass style-queue:

Failed to run &quot;[u&apos;git&apos;, u&apos;reset&apos;, u&apos;--hard&apos;, u&apos;refs/remotes/trunk&apos;]&quot; exit_code: 128
error: Could not write new index file.
fatal: Could not reset index file to revision &apos;refs/remotes/trunk&apos;.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318349</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-07 11:29:28 -0800</bug_when>
    <thetext>Attachment 75776 did not pass style-queue:

Failed to run &quot;[u&apos;git&apos;, u&apos;reset&apos;, u&apos;--hard&apos;, u&apos;refs/remotes/trunk&apos;]&quot; exit_code: 128
error: Could not write new index file.
fatal: Could not reset index file to revision &apos;refs/remotes/trunk&apos;.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318352</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-07 11:33:37 -0800</bug_when>
    <thetext>Attachment 75778 did not pass style-queue:

Failed to run &quot;[u&apos;git&apos;, u&apos;reset&apos;, u&apos;--hard&apos;, u&apos;refs/remotes/trunk&apos;]&quot; exit_code: 128
error: Could not write new index file.
fatal: Could not reset index file to revision &apos;refs/remotes/trunk&apos;.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318364</commentid>
    <comment_count>22</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-07 11:50:37 -0800</bug_when>
    <thetext>Attachment 75781 did not pass style-queue:

Failed to run &quot;[u&apos;git&apos;, u&apos;reset&apos;, u&apos;--hard&apos;, u&apos;refs/remotes/trunk&apos;]&quot; exit_code: 128
error: Could not write new index file.
fatal: Could not reset index file to revision &apos;refs/remotes/trunk&apos;.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318394</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-07 12:30:36 -0800</bug_when>
    <thetext>Attachment 75776 did not pass style-queue:

Failed to run &quot;[u&apos;git&apos;, u&apos;reset&apos;, u&apos;--hard&apos;, u&apos;refs/remotes/trunk&apos;]&quot; exit_code: 128
error: Could not write new index file.
fatal: Could not reset index file to revision &apos;refs/remotes/trunk&apos;.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318416</commentid>
    <comment_count>24</comment_count>
      <attachid>75839</attachid>
    <who name="Brian Weinstein">bweinstein</who>
    <bug_when>2010-12-07 13:46:26 -0800</bug_when>
    <thetext>Created attachment 75839
[PATCH] Mac layering violation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318421</commentid>
    <comment_count>25</comment_count>
      <attachid>75839</attachid>
    <who name="John Sullivan">sullivan</who>
    <bug_when>2010-12-07 13:58:37 -0800</bug_when>
    <thetext>Comment on attachment 75839
[PATCH] Mac layering violation

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

&gt; WebKit/mac/WebView/WebHTMLView.mm:3281
&gt; +    for (NSInteger i = 0; i &lt; [menu numberOfItems]; ++i) {

You should use a local variable for the result of [menu numberOfItems] to avoid unnecessary ObjC dispatch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318447</commentid>
    <comment_count>26</comment_count>
      <attachid>75839</attachid>
    <who name="Brian Weinstein">bweinstein</who>
    <bug_when>2010-12-07 14:48:05 -0800</bug_when>
    <thetext>Comment on attachment 75839
[PATCH] Mac layering violation

Landed in r73469.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318502</commentid>
    <comment_count>27</comment_count>
      <attachid>75850</attachid>
    <who name="Brian Weinstein">bweinstein</who>
    <bug_when>2010-12-07 16:55:06 -0800</bug_when>
    <thetext>Created attachment 75850
[PATCH] Fix - Win, Qt, Mac</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318563</commentid>
    <comment_count>28</comment_count>
      <attachid>75864</attachid>
    <who name="Brian Weinstein">bweinstein</who>
    <bug_when>2010-12-07 20:15:03 -0800</bug_when>
    <thetext>Created attachment 75864
[PATCH] Fix - Win, Mac, Qt, Chromium</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318583</commentid>
    <comment_count>29</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-07 21:29:14 -0800</bug_when>
    <thetext>Attachment 75776 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/update-webkit&apos;]&quot; exit_code: 2
Updating OpenSource
Incomplete data: Delta source ended unexpectedly at /usr/lib/git-core/git-svn line 5061

Died at WebKitTools/Scripts/update-webkit line 132.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318585</commentid>
    <comment_count>30</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-07 21:30:14 -0800</bug_when>
    <thetext>Attachment 75778 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/update-webkit&apos;]&quot; exit_code: 2
Updating OpenSource
Incomplete data: Delta source ended unexpectedly at /usr/lib/git-core/git-svn line 5061

Died at WebKitTools/Scripts/update-webkit line 132.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318594</commentid>
    <comment_count>31</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-07 21:34:22 -0800</bug_when>
    <thetext>Attachment 75781 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/update-webkit&apos;]&quot; exit_code: 2
Updating OpenSource
Incomplete data: Delta source ended unexpectedly at /usr/lib/git-core/git-svn line 5061

Died at WebKitTools/Scripts/update-webkit line 132.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318595</commentid>
    <comment_count>32</comment_count>
      <attachid>75868</attachid>
    <who name="Brian Weinstein">bweinstein</who>
    <bug_when>2010-12-07 21:34:33 -0800</bug_when>
    <thetext>Created attachment 75868
[PATCH] Fix - Win, Mac, Qt, Chromium - w/ Darin&apos;s feedback

Forgot to incorporate Darin&apos;s feedback into previous versions of the patch - this patch adds:

- createContextMenu returns a PassOwnPtr
- Default constructor for HitTestResult
- Removed variable names from ContextMenuController.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318626</commentid>
    <comment_count>33</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-07 21:52:23 -0800</bug_when>
    <thetext>Attachment 75839 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/update-webkit&apos;]&quot; exit_code: 2
Updating OpenSource
Incomplete data: Delta source ended unexpectedly at /usr/lib/git-core/git-svn line 5061

Died at WebKitTools/Scripts/update-webkit line 132.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318641</commentid>
    <comment_count>34</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-07 21:59:14 -0800</bug_when>
    <thetext>Attachment 75864 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/update-webkit&apos;]&quot; exit_code: 2
Updating OpenSource
Incomplete data: Delta source ended unexpectedly at /usr/lib/git-core/git-svn line 5061

Died at WebKitTools/Scripts/update-webkit line 132.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318645</commentid>
    <comment_count>35</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-07 22:00:37 -0800</bug_when>
    <thetext>Attachment 75868 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/update-webkit&apos;]&quot; exit_code: 2
Updating OpenSource
Incomplete data: Delta source ended unexpectedly at /usr/lib/git-core/git-svn line 5061

Died at WebKitTools/Scripts/update-webkit line 132.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318668</commentid>
    <comment_count>36</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-07 23:14:57 -0800</bug_when>
    <thetext>Attachment 75868 did not build on chromium:
Build output: http://queues.webkit.org/results/6758099</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318671</commentid>
    <comment_count>37</comment_count>
      <attachid>75877</attachid>
    <who name="Brian Weinstein">bweinstein</who>
    <bug_when>2010-12-07 23:23:16 -0800</bug_when>
    <thetext>Created attachment 75877
[PATCH] Fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318682</commentid>
    <comment_count>38</comment_count>
      <attachid>75879</attachid>
    <who name="Brian Weinstein">bweinstein</who>
    <bug_when>2010-12-08 00:07:20 -0800</bug_when>
    <thetext>Created attachment 75879
[PATCH] Fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318860</commentid>
    <comment_count>39</comment_count>
      <attachid>75920</attachid>
    <who name="Brian Weinstein">bweinstein</who>
    <bug_when>2010-12-08 10:14:23 -0800</bug_when>
    <thetext>Created attachment 75920
[PATCH] Fix - all platforms</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318868</commentid>
    <comment_count>40</comment_count>
      <attachid>75925</attachid>
    <who name="Brian Weinstein">bweinstein</who>
    <bug_when>2010-12-08 10:30:01 -0800</bug_when>
    <thetext>Created attachment 75925
Diff between reviewed version and latest version

I implemented Darin&apos;s feedback (adding a default constructor for HitTestResult, removing the function arguments in ContextMenuController.h), and I fixed more platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318873</commentid>
    <comment_count>41</comment_count>
      <attachid>75920</attachid>
    <who name="John Sullivan">sullivan</who>
    <bug_when>2010-12-08 10:36:32 -0800</bug_when>
    <thetext>Comment on attachment 75920
[PATCH] Fix - all platforms

I only read through the parts that changed since Darin reviewed this earlier. Those parts look good, so r+.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318938</commentid>
    <comment_count>42</comment_count>
    <who name="Brian Weinstein">bweinstein</who>
    <bug_when>2010-12-08 12:20:04 -0800</bug_when>
    <thetext>Landed in r73535.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75776</attachid>
            <date>2010-12-06 19:46:56 -0800</date>
            <delta_ts>2010-12-06 20:35:47 -0800</delta_ts>
            <desc>[PATCH] Layering violation fix</desc>
            <filename>context_menu_layering_violation_fix.patch</filename>
            <type>text/plain</type>
            <size>117286</size>
            <attacher name="Brian Weinstein">bweinstein</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MzQyMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODMgQEAKKzIwMTAtMTItMDYgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5A
YXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIExheWVyaW5nIFZpb2xhdGlvbiBpbiBDb250ZXh0TWVudSAtIG1lbWJlciB2YXJpYWJsZSBv
ZiB0eXBlIEhpdFRlc3RSZXN1bHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTUwNTg2CisgICAgICAgIAorICAgICAgICBDb250ZXh0TWVudSBoYWQgYSBs
YXllcmluZyB2aW9sYXRpb24gYnkgaGF2aW5nIGEgbWVtYmVyIHZhcmlhYmxlIG9mIHR5cGUgSGl0
VGVzdFJlc3VsdCwgYmVjYXVzZQorICAgICAgICBjbGFzc2VzIGluIFdlYkNvcmUvcGxhdGZvcm0g
Y2FuJ3Qga25vdyBhYm91dCBjbGFzc2VzIGluIFdlYkNvcmUuCisgICAgICAgIAorICAgICAgICBU
aGlzIHBhdGNoIG1vdmVzIHRoZSBIaXRUZXN0UmVzdWx0IGFuZCBhbGwgZnVuY3Rpb25zIHRoYXQg
dXNlIGl0IG91dCBvZiBDb250ZXh0TWVudSBpbnRvIENvbnRleHRNZW51Q29udHJvbGxlci4KKyAg
ICAgICAgQWxsIG9mIHRoZSBmdW5jdGlvbnMgdGhhdCBkZWFsdCB3aXRoIHBvcHVsYXRpbmcgdGhl
IENvbnRleHRNZW51IGFyZSBub3cgaW4gQ29udGV4dE1lbnVDb250cm9sbGVyLCBhbmQgdGhpcwor
ICAgICAgICBhbGxvd2VkIHVzIHRvIGRlbGV0ZSB0aGUgQ29udGV4dE1lbnUgZmlsZSwgcHV0dGlu
ZyBhbGwgb2YgdGhlIGNyb3NzLXBsYXRmb3JtIGNvZGUgdGhhdCB1c2VkIHRvIGJlIGl0CisgICAg
ICAgIGluIENvbnRleHRNZW51Q29udHJvbGxlciwgYW5kIHRoZSByZXN0IG9mIHRoZSBjb2RlIGlz
IGluIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBmaWxlcy4KKworICAgICAgICBObyBjaGFuZ2UgaW4g
YmVoYXZpb3IsIG5vIG5ldyB0ZXN0cy4KKworICAgICAgICAqIEFuZHJvaWQubWs6IFJlbW92ZWQg
Q29udGV4dE1lbnUuY3BwLgorICAgICAgICAqIENNYWtlTGlzdHMudHh0OiBEaXR0by4KKyAgICAg
ICAgKiBHTlVtYWtlZmlsZS5hbTogRGl0dG8uCisgICAgICAgICogV2ViQ29yZS5neXBpOiBEaXR0
by4KKyAgICAgICAgKiBXZWJDb3JlLnBybzogRGl0dG8uCisgICAgICAgICogV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2o6IERpdHRvLgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajogRGl0dG8uCisKKyAgICAgICAgKiBwYWdlL0NvbnRleHRNZW51Q29udHJv
bGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0TWVudUNvbnRyb2xsZXI6OkNvbnRl
eHRNZW51Q29udHJvbGxlcik6IEluaXRpYWxpemVkIG1faGl0VGVzdFJlc3VsdCB0byBhbiBlbXB0
eSBIaXRUZXN0UmVzdWx0LgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVDb250cm9sbGVy
OjpoYW5kbGVDb250ZXh0TWVudUV2ZW50KTogQ2FsbCBwb3B1bGF0ZSBvbiB0aGUgQ29udGV4dE1l
bnVDb250cm9sbGVyIGluc3RlYWQKKyAgICAgICAgICAgIG9mIHRoZSBDb250ZXh0TWVudS4KKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51Q29udHJvbGxlcjo6Y3JlYXRlQ29udGV4dE1lbnUp
OiBGaXggc29tZSBpbmRpbmF0aW9uLCBhbmQgc3RvcmUgdGhlIEhpdFRlc3RSZXN1bHQgaW4gYSBt
ZW1iZXIKKyAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1l
bnVDb250cm9sbGVyOjpzaG93Q29udGV4dE1lbnUpOiBDYWxsIGFkZEluc3BlY3RFbGVtZW50SXRl
bSBvbiB0aGUgQ29udGV4dE1lbnVDb250cm9sbGVyLgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4
dE1lbnVDb250cm9sbGVyOjpjb250ZXh0TWVudUl0ZW1TZWxlY3RlZCk6IFVzZSBtX2hpdFRlc3RS
ZXN1bHQgd2hlbmV2ZXIgd2UgbmVlZCBhIEhpdFRlc3RSZXN1bHQuCisgICAgICAgIChXZWJDb3Jl
OjpDb250ZXh0TWVudUNvbnRyb2xsZXI6OmFwcGVuZEl0ZW0pOiBWYWxpZGF0ZXMgdGhlIGl0ZW0g
Zm9yIGl0cyBzdGF0ZSwgYW5kIHRoZW4gYXBwZW5kcyBpdCB0byB0aGUgcGFyZW50IG1lbnUuCisg
ICAgICAgICAgICBUaGlzIGFsbG93ZWQgdXMgdG8gbW92ZSBjaGVja09yRW5hYmxlSWZOZWVkZWQg
ZnJvbSBDb250ZXh0TWVudS4KKworICAgICAgICBUaGVzZSBmdW5jdGlvbnMgd2VyZSBhbGwgbW92
ZWQgZnJvbSBDb250ZXh0TWVudSwgYW5kIGNoYW5nZWQgc2xpZ2h0bHkgdG8gZml0IGluIENvbnRl
eHRNZW51Q29udHJvbGxlci4KKyAgICAgICAgQWxsIGNhbGxzIHRvIENvbnRleHRNZW51OjphcHBl
bmRJdGVtIHdlcmUgY2hhbmdlZCB0byBDb250ZXh0TWVudUNvbnRyb2xsZXI6OmFwcGVuZEl0ZW0s
IHdoaWNoIHRha2VzIGNhcmUKKyAgICAgICAgb2YgdmFsaWRhdGluZyB0aGUgbWVudS4KKyAgICAg
ICAgKFdlYkNvcmU6OnNlcGFyYXRvckl0ZW0pOiBNb3ZlZCBmcm9tIENvbnRleHRNZW51LgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVDb250cm9sbGVyOjpjcmVhdGVBbmRBcHBlbmRGb250
U3ViTWVudSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVDb250cm9sbGVy
OjpjcmVhdGVBbmRBcHBlbmRTcGVsbGluZ0FuZEdyYW1tYXJTdWJNZW51KTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNyZWF0ZUFuZEFwcGVuZFNwZWVj
aFN1Yk1lbnUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51Q29udHJvbGxl
cjo6Y3JlYXRlQW5kQXBwZW5kV3JpdGluZ0RpcmVjdGlvblN1Yk1lbnUpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRleHRNZW51Q29udHJvbGxlcjo6Y3JlYXRlQW5kQXBwZW5kVGV4dERp
cmVjdGlvblN1Yk1lbnUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51Q29u
dHJvbGxlcjo6Y3JlYXRlQW5kQXBwZW5kU3Vic3RpdHV0aW9uc1N1Yk1lbnUpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51Q29udHJvbGxlcjo6Y3JlYXRlQW5kQXBwZW5kVHJh
bnNmb3JtYXRpb25zU3ViTWVudSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6c2VsZWN0aW9u
Q29udGFpbnNQb3NzaWJsZVdvcmQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRN
ZW51Q29udHJvbGxlcjo6cG9wdWxhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
eHRNZW51Q29udHJvbGxlcjo6YWRkSW5zcGVjdEVsZW1lbnRJdGVtKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNoZWNrT3JFbmFibGVJZk5lZWRlZCk6
IERpdHRvLgorICAgICAgICAKKyAgICAgICAgKiBwYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5o
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVDb250cm9sbGVyOjpoaXRUZXN0UmVzdWx0
KTogUmV0dXJucyB0aGUgSGl0VGVzdFJlc3VsdCBvZiB0aGUgY3VycmVudCBDb250ZXh0TWVudS4K
KworICAgICAgICAqIHBsYXRmb3JtL0NvbnRleHRNZW51LmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9Db250ZXh0TWVudS5oOgorICAgICAgICAqIHBsYXRmb3JtL2VmbC9Db250ZXh0
TWVudUVmbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0TWVudTo6Q29udGV4dE1lbnUp
OiBSZW1vdmVkIG1faGl0VGVzdFJlc3VsdCBmcm9tIHRoZSBjb25zdHJ1Y3Rvci4KKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRleHRNZW51OjphcHBlbmRJdGVtKTogUmVtb3ZlZCB0aGUgY2FsbCB0byBj
aGVja09yRW5hYmxlSWZOZWVkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3RrL0NvbnRleHRNZW51
R3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51OjpDb250ZXh0TWVudSk6IFJl
bW92ZWQgbV9oaXRUZXN0UmVzdWx0IGZyb20gdGhlIGNvbnN0cnVjdG9yLgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGV4dE1lbnU6OmFwcGVuZEl0ZW0pOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9y
bS9oYWlrdS9Db250ZXh0TWVudUhhaWt1LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRN
ZW51OjpDb250ZXh0TWVudSk6IFJlbW92ZWQgbV9oaXRUZXN0UmVzdWx0IGZyb20gdGhlIGNvbnN0
cnVjdG9yLgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnU6OmFwcGVuZEl0ZW0pOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51OjppbnNlcnRJdGVtKTogRGl0dG8uCisg
ICAgICAgICogcGxhdGZvcm0vbWFjL0NvbnRleHRNZW51TWFjLm1tOgorICAgICAgICAoLVtXZWJD
b3JlTWVudVRhcmdldCB2YWxpZGF0ZU1lbnVJdGVtOl0pOiBDYWxscyBjaGVja09yRW5hYmxlSWZO
ZWVkZWQgb24gdGhlIGNvbnRyb2xsZXIgaW5zdGVhZCBvZgorICAgICAgICAgICAgdGhlIGNvbnRl
eHQgbWVudS4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51OjpDb250ZXh0TWVudSk6IFJl
bW92ZWQgbV9oaXRUZXN0UmVzdWx0IGZyb20gdGhlIGNvbnN0cnVjdG9yLgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGV4dE1lbnU6OmFwcGVuZEl0ZW0pOiBSZW1vdmVkIHRoZSBjYWxsIHRvIGNoZWNr
T3JFbmFibGVJZk5lZWRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51OjppbnNlcnRJ
dGVtKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vd2luL0NvbnRleHRNZW51V2luLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51OjpDb250ZXh0TWVudSk6IFJlbW92ZWQgbV9o
aXRUZXN0UmVzdWx0IGZyb20gdGhlIGNvbnN0cnVjdG9yLgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGV4dE1lbnU6Omluc2VydEl0ZW0pOiBSZW1vdmVkIHRoZSBjYWxsIHRvIGNoZWNrT3JFbmFibGVJ
Zk5lZWRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS93eC9Db250ZXh0TWVudVd4LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRleHRNZW51OjpDb250ZXh0TWVudSk6IFJlbW92ZWQgbV9oaXRUZXN0
UmVzdWx0IGZyb20gdGhlIGNvbnN0cnVjdG9yLgorICAgICAgICAoQ29udGV4dE1lbnU6OmFwcGVu
ZEl0ZW0pOiBEaXR0by4KKwogMjAxMC0xMi0wNiAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0
Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBUb255IENoYW5nLgpJbmRleDogV2ViQ29yZS9B
bmRyb2lkLm1rCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQW5kcm9pZC5tawkocmV2aXNpb24gNzMx
NjkpCisrKyBXZWJDb3JlL0FuZHJvaWQubWsJKHdvcmtpbmcgY29weSkKQEAgLTQ0OSw3ICs0NDks
NiBAQCBMT0NBTF9TUkNfRklMRVMgOj0gJChMT0NBTF9TUkNfRklMRVMpIFwKIAlcCiAJcGxhdGZv
cm0vQXJlbmEuY3BwIFwKIAlwbGF0Zm9ybS9Db250ZW50VHlwZS5jcHAgXAotCXBsYXRmb3JtL0Nv
bnRleHRNZW51LmNwcCBcCiAJcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwIFwKIAlwbGF0
Zm9ybS9EZXByZWNhdGVkUHRyTGlzdEltcGwuY3BwIFwKIAlwbGF0Zm9ybS9EcmFnRGF0YS5jcHAg
XApJbmRleDogV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NN
YWtlTGlzdHMudHh0CShyZXZpc2lvbiA3MzE2OSkKKysrIFdlYkNvcmUvQ01ha2VMaXN0cy50eHQJ
KHdvcmtpbmcgY29weSkKQEAgLTEyNTksNyArMTI1OSw2IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMK
IAogICAgIHBsYXRmb3JtL0FyZW5hLmNwcAogICAgIHBsYXRmb3JtL0NvbnRlbnRUeXBlLmNwcAot
ICAgIHBsYXRmb3JtL0NvbnRleHRNZW51LmNwcAogICAgIHBsYXRmb3JtL0Nyb3NzVGhyZWFkQ29w
aWVyLmNwcAogICAgIHBsYXRmb3JtL0RlcHJlY2F0ZWRQdHJMaXN0SW1wbC5jcHAKICAgICBwbGF0
Zm9ybS9EcmFnRGF0YS5jcHAKSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gNzMxNjkpCisrKyBXZWJDb3Jl
L0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0yMjQ2LDcgKzIyNDYsNiBAQCB3ZWJj
b3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvcGxhdGZvcm0vQXV0b2RyYWluZWRQb29sLmggXAog
CVdlYkNvcmUvcGxhdGZvcm0vQ29udGVudFR5cGUuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL0Nv
bnRlbnRUeXBlLmggXAotCVdlYkNvcmUvcGxhdGZvcm0vQ29udGV4dE1lbnUuY3BwIFwKIAlXZWJD
b3JlL3BsYXRmb3JtL0NvbnRleHRNZW51LmggXAogCVdlYkNvcmUvcGxhdGZvcm0vQ29udGV4dE1l
bnVJdGVtLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vQ29va2llLmggXApJbmRleDogV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9u
IDczMTY5KQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTMzMzQs
NyArMzMzNCw2IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vQXV0b2RyYWluZWRQb29sLmgnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL0NvbnRlbnRUeXBlLmNwcCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vQ29udGVudFR5cGUuaCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vQ29udGV4dE1lbnUu
Y3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9Db250ZXh0TWVudS5oJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9Db250ZXh0TWVudUl0ZW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vQ29v
a2llLmgnLApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L1dlYkNvcmUucHJvCShyZXZpc2lvbiA3MzE2OSkKKysrIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdv
cmtpbmcgY29weSkKQEAgLTExNDcsNyArMTE0Nyw2IEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRm
b3JtL3RleHQvQmlkaUNvbnRleHQuY3BwIFwKICAgICBwbGF0Zm9ybS90ZXh0L0h5cGhlbmF0aW9u
LmNwcCBcCiAgICAgcGxhdGZvcm0vQ29udGVudFR5cGUuY3BwIFwKLSAgICBwbGF0Zm9ybS9Db250
ZXh0TWVudS5jcHAgXAogICAgIHBsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmNwcCBcCiAgICAg
cGxhdGZvcm0vRGVwcmVjYXRlZFB0ckxpc3RJbXBsLmNwcCBcCiAgICAgcGxhdGZvcm0vRHJhZ0Rh
dGEuY3BwIFwKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNp
b24gNzMxNjkpCisrKyBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNTI1OCwxMCArMjUyNTgsNiBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJ
CTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxDb250ZXh0TWVudS5jcHAiCi0J
CQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3Jt
XENvbnRleHRNZW51LmgiCiAJCQkJPgogCQkJPC9GaWxlPgpJbmRleDogV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDczMTY5KQorKysgV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI4MzMs
NyArMjgzMyw2IEBACiAJCTkzQjJEODE2MEY5OTIwRDIwMDZBRTZCMiAvKiBTdWRkZW5UZXJtaW5h
dGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNC
MkQ4MTUwRjk5MjBEMjAwNkFFNkIyIC8qIFN1ZGRlblRlcm1pbmF0aW9uLmggKi87IH07CiAJCTkz
QjJEODE4MEY5OTIwRUUwMDZBRTZCMiAvKiBTdWRkZW5UZXJtaW5hdGlvbi5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQjJEODE3MEY5OTIwRUUwMDZB
RTZCMiAvKiBTdWRkZW5UZXJtaW5hdGlvbi5tbSAqLzsgfTsKIAkJOTNCNkEwRTYwQjBCQ0E1QzAw
RjUwMjdBIC8qIENvbnRleHRNZW51LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5M0I2QTBFNTBCMEJDQTVDMDBGNTAyN0EgLyogQ29udGV4dE1lbnUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk5M0I2QTBF
ODBCMEJDQTY3MDBGNTAyN0EgLyogQ29udGV4dE1lbnUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNCNkEwRTcwQjBCQ0E2NzAwRjUwMjdBIC8qIENv
bnRleHRNZW51LmNwcCAqLzsgfTsKIAkJOTNCNkEwRUEwQjBCQ0E4NDAwRjUwMjdBIC8qIENvbnRl
eHRNZW51TWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTNCNkEwRTkwQjBCQ0E4NDAwRjUwMjdBIC8qIENvbnRleHRNZW51TWFjLm1tICovOyB9Owog
CQk5M0I3MEQ2MzA5RUIwQzdDMDA5RDg0NjggLyogSlNET01CaW5kaW5nLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQjcwRDQ3MDlFQjBDN0MwMDlE
ODQ2OCAvKiBKU0RPTUJpbmRpbmcuY3BwICovOyB9OwogCQk5M0I3MEQ2NDA5RUIwQzdDMDA5RDg0
NjggLyogSlNET01CaW5kaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5M0I3MEQ0ODA5RUIwQzdDMDA5RDg0NjggLyogSlNET01CaW5kaW5nLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTg5ODIsNyAr
ODk4MSw2IEBACiAJCTkzQjJEODE1MEY5OTIwRDIwMDZBRTZCMiAvKiBTdWRkZW5UZXJtaW5hdGlv
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdWRkZW5UZXJtaW5hdGlvbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0IyRDgxNzBGOTkyMEVFMDA2QUU2QjIg
LyogU3VkZGVuVGVybWluYXRpb24ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBTdWRkZW5UZXJtaW5hdGlvbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJOTNCNkEwRTUwQjBCQ0E1QzAwRjUwMjdBIC8qIENvbnRleHRNZW51LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDb250ZXh0TWVudS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk5M0I2QTBFNzBCMEJDQTY3MDBGNTAyN0EgLyogQ29udGV4dE1lbnUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbnRleHRNZW51LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNCNkEwRTkwQjBCQ0E4NDAwRjUwMjdBIC8qIENv
bnRleHRNZW51TWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IENvbnRleHRNZW51TWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0I3MEQ0
NzA5RUIwQzdDMDA5RDg0NjggLyogSlNET01CaW5kaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKU0RPTUJpbmRpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk5M0I3MEQ0ODA5RUIwQzdDMDA5RDg0NjggLyogSlNET01CaW5kaW5nLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0RPTUJpbmRpbmcuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE3NTA1LDcgKzE3NTAzLDYgQEAKIAkJCQlCQ0M4Q0ZDQTA5
ODZDRDI0MDAxNDBCRjIgLyogQ29sb3JEYXRhLmdwZXJmICovLAogCQkJCTQxRDAxNUM5MEY0QjVD
NzEwMDRBNjYyRiAvKiBDb250ZW50VHlwZS5jcHAgKi8sCiAJCQkJNDFEMDE1QzgwRjRCNUM3MTAw
NEE2NjJGIC8qIENvbnRlbnRUeXBlLmggKi8sCi0JCQkJOTNCNkEwRTcwQjBCQ0E2NzAwRjUwMjdB
IC8qIENvbnRleHRNZW51LmNwcCAqLywKIAkJCQk5M0I2QTBFNTBCMEJDQTVDMDBGNTAyN0EgLyog
Q29udGV4dE1lbnUuaCAqLywKIAkJCQkwNjAyN0NBQzBCMUNCRkMwMDA4ODRCMkQgLyogQ29udGV4
dE1lbnVJdGVtLmggKi8sCiAJCQkJRDhCNjE1MkUxMDMyNDk1MTAwQzg1NTRBIC8qIENvb2tpZS5o
ICovLApAQCAtMjE4NzEsNyArMjE4NjgsNiBAQAogCQkJCUE4MTg3MjFGMDk3N0QzQzAwMDU4MjZE
OSAvKiBDb250YWluZXJOb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNUVCOTgwMEU4MjA3
MjUwMEIyNTk2NSAvKiBDb250ZW50RGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MUQwMTVD
QjBGNEI1QzcxMDA0QTY2MkYgLyogQ29udGVudFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJ
OTNCNkEwRTgwQjBCQ0E2NzAwRjUwMjdBIC8qIENvbnRleHRNZW51LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTA2NUFENEY2MEIwQzJFREEwMDVBMkIxRCAvKiBDb250ZXh0TWVudUNvbnRyb2xsZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDYwMjdDQjMwQjFDQzAzRDAwODg0QjJEIC8qIENvbnRl
eHRNZW51SXRlbU1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzQjZBMEVBMEIwQkNBODQwMEY1
MDI3QSAvKiBDb250ZXh0TWVudU1hYy5tbSBpbiBTb3VyY2VzICovLApJbmRleDogV2ViQ29yZS9w
YWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdl
L0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDczMTY5KQorKysgV2ViQ29yZS9w
YWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMz
LDcgQEAKICNpbmNsdWRlICJDaHJvbWUuaCIKICNpbmNsdWRlICJDb250ZXh0TWVudS5oIgogI2lu
Y2x1ZGUgIkNvbnRleHRNZW51Q2xpZW50LmgiCisjaW5jbHVkZSAiQ29udGV4dE1lbnVJdGVtLmgi
CiAjaW5jbHVkZSAiQ29udGV4dE1lbnVQcm92aWRlci5oIgogI2luY2x1ZGUgIkRvY3VtZW50Lmgi
CiAjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgpAQCAtNTAsNiArNTEsNyBAQAogI2luY2x1
ZGUgIkhpdFRlc3RSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1
ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgi
CiAjaW5jbHVkZSAiTW91c2VFdmVudC5oIgogI2luY2x1ZGUgIk5hdmlnYXRpb25BY3Rpb24uaCIK
ICNpbmNsdWRlICJOb2RlLmgiCkBAIC02Myw2ICs2NSwxMCBAQAogI2luY2x1ZGUgIlRleHRJdGVy
YXRvci5oIgogI2luY2x1ZGUgIldpbmRvd0ZlYXR1cmVzLmgiCiAjaW5jbHVkZSAibWFya3VwLmgi
CisjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVW5pY29kZS5oPgorCit1c2luZyBuYW1lc3BhY2UgV1RG
OwordXNpbmcgbmFtZXNwYWNlIFVuaWNvZGU7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
NzAsNiArNzYsNyBAQCBDb250ZXh0TWVudUNvbnRyb2xsZXI6OkNvbnRleHRNZW51Q29udHJvCiAg
ICAgOiBtX3BhZ2UocGFnZSkKICAgICAsIG1fY2xpZW50KGNsaWVudCkKICAgICAsIG1fY29udGV4
dE1lbnUoMCkKKyAgICAsIG1faGl0VGVzdFJlc3VsdChIaXRUZXN0UmVzdWx0KEludFBvaW50KCkp
KQogewogICAgIEFTU0VSVF9BUkcocGFnZSwgcGFnZSk7CiAgICAgQVNTRVJUX0FSRyhjbGllbnQs
IGNsaWVudCk7CkBAIC05Myw3ICsxMDAsOSBAQCB2b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6
aGFuZGxlQ29udGV4CiAgICAgbV9jb250ZXh0TWVudS5zZXQoY3JlYXRlQ29udGV4dE1lbnUoZXZl
bnQpKTsKICAgICBpZiAoIW1fY29udGV4dE1lbnUpCiAgICAgICAgIHJldHVybjsKLSAgICBtX2Nv
bnRleHRNZW51LT5wb3B1bGF0ZSgpOworCisgICAgcG9wdWxhdGUoKTsKKwogICAgIHNob3dDb250
ZXh0TWVudShldmVudCk7CiB9CiAKQEAgLTExMyw4ICsxMjIsOSBAQCB2b2lkIENvbnRleHRNZW51
Q29udHJvbGxlcjo6c2hvd0NvbnRleHRNCiAKIENvbnRleHRNZW51KiBDb250ZXh0TWVudUNvbnRy
b2xsZXI6OmNyZWF0ZUNvbnRleHRNZW51KEV2ZW50KiBldmVudCkKIHsKLSAgIGlmICghZXZlbnQt
PmlzTW91c2VFdmVudCgpKQorICAgIGlmICghZXZlbnQtPmlzTW91c2VFdmVudCgpKQogICAgICAg
ICByZXR1cm4gMDsKKwogICAgIE1vdXNlRXZlbnQqIG1vdXNlRXZlbnQgPSBzdGF0aWNfY2FzdDxN
b3VzZUV2ZW50Kj4oZXZlbnQpOwogICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0KG1vdXNlRXZlbnQt
PmFic29sdXRlTG9jYXRpb24oKSk7CiAKQEAgLTEyMywxNCArMTMzLDE3IEBAIENvbnRleHRNZW51
KiBDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNyZWEKIAogICAgIGlmICghcmVzdWx0LmlubmVyTm9u
U2hhcmVkTm9kZSgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gbmV3IENvbnRleHRN
ZW51KHJlc3VsdCk7CisKKyAgICBtX2hpdFRlc3RSZXN1bHQgPSByZXN1bHQ7CisKKyAgICByZXR1
cm4gbmV3IENvbnRleHRNZW51KCk7CiB9CiAKIHZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjpz
aG93Q29udGV4dE1lbnUoRXZlbnQqIGV2ZW50KQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAg
ICAgaWYgKG1fcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5lbmFibGVkKCkpCi0gICAgICAg
IG1fY29udGV4dE1lbnUtPmFkZEluc3BlY3RFbGVtZW50SXRlbSgpOworICAgICAgICBhZGRJbnNw
ZWN0RWxlbWVudEl0ZW0oKTsKICNlbmRpZgogICAgIFBsYXRmb3JtTWVudURlc2NyaXB0aW9uIGN1
c3RvbU1lbnUgPSBtX2NsaWVudC0+Z2V0Q3VzdG9tTWVudUZyb21EZWZhdWx0SXRlbXMobV9jb250
ZXh0TWVudS5nZXQoKSk7CiAgICAgbV9jb250ZXh0TWVudS0+c2V0UGxhdGZvcm1EZXNjcmlwdGlv
bihjdXN0b21NZW51KTsKQEAgLTE2MSw1NCArMTc0LDUzIEBAIHZvaWQgQ29udGV4dE1lbnVDb250
cm9sbGVyOjpjb250ZXh0TWVudUkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIEhpdFRl
c3RSZXN1bHQgcmVzdWx0ID0gbV9jb250ZXh0TWVudS0+aGl0VGVzdFJlc3VsdCgpOwotICAgIEZy
YW1lKiBmcmFtZSA9IHJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKS0+ZG9jdW1lbnQoKS0+ZnJh
bWUoKTsKKyAgICBGcmFtZSogZnJhbWUgPSBtX2hpdFRlc3RSZXN1bHQuaW5uZXJOb25TaGFyZWRO
b2RlKCktPmRvY3VtZW50KCktPmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgc3dpdGNoIChpdGVtLT5hY3Rpb24oKSkgewogICAgIGNhc2UgQ29udGV4dE1l
bnVJdGVtVGFnT3BlbkxpbmtJbk5ld1dpbmRvdzoKLSAgICAgICAgb3Blbk5ld1dpbmRvdyhyZXN1
bHQuYWJzb2x1dGVMaW5rVVJMKCksIGZyYW1lKTsKKyAgICAgICAgb3Blbk5ld1dpbmRvdyhtX2hp
dFRlc3RSZXN1bHQuYWJzb2x1dGVMaW5rVVJMKCksIGZyYW1lKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdEb3dubG9hZExpbmtUb0Rpc2s6CiAgICAgICAgIC8v
IEZJWE1FOiBTb21lIGRheSB3ZSBzaG91bGQgYmUgYWJsZSB0byBkbyB0aGlzIGZyb20gd2l0aGlu
IFdlYkNvcmUuCi0gICAgICAgIG1fY2xpZW50LT5kb3dubG9hZFVSTChyZXN1bHQuYWJzb2x1dGVM
aW5rVVJMKCkpOworICAgICAgICBtX2NsaWVudC0+ZG93bmxvYWRVUkwobV9oaXRUZXN0UmVzdWx0
LmFic29sdXRlTGlua1VSTCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDb250ZXh0TWVu
dUl0ZW1UYWdDb3B5TGlua1RvQ2xpcGJvYXJkOgotICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPmNv
cHlVUkwocmVzdWx0LmFic29sdXRlTGlua1VSTCgpLCByZXN1bHQudGV4dENvbnRlbnQoKSk7Cisg
ICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+Y29weVVSTChtX2hpdFRlc3RSZXN1bHQuYWJzb2x1dGVM
aW5rVVJMKCksIG1faGl0VGVzdFJlc3VsdC50ZXh0Q29udGVudCgpKTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdPcGVuSW1hZ2VJbk5ld1dpbmRvdzoKLSAgICAg
ICAgb3Blbk5ld1dpbmRvdyhyZXN1bHQuYWJzb2x1dGVJbWFnZVVSTCgpLCBmcmFtZSk7CisgICAg
ICAgIG9wZW5OZXdXaW5kb3cobV9oaXRUZXN0UmVzdWx0LmFic29sdXRlSW1hZ2VVUkwoKSwgZnJh
bWUpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0Rvd25sb2Fk
SW1hZ2VUb0Rpc2s6CiAgICAgICAgIC8vIEZJWE1FOiBTb21lIGRheSB3ZSBzaG91bGQgYmUgYWJs
ZSB0byBkbyB0aGlzIGZyb20gd2l0aGluIFdlYkNvcmUuCi0gICAgICAgIG1fY2xpZW50LT5kb3du
bG9hZFVSTChyZXN1bHQuYWJzb2x1dGVJbWFnZVVSTCgpKTsKKyAgICAgICAgbV9jbGllbnQtPmRv
d25sb2FkVVJMKG1faGl0VGVzdFJlc3VsdC5hYnNvbHV0ZUltYWdlVVJMKCkpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0NvcHlJbWFnZVRvQ2xpcGJvYXJkOgog
ICAgICAgICAvLyBGSVhNRTogVGhlIFBhc3RlYm9hcmQgY2xhc3MgaXMgbm90IHdyaXR0ZW4geWV0
CiAgICAgICAgIC8vIEZvciBub3csIGNhbGwgaW50byB0aGUgY2xpZW50LiBUaGlzIGlzIHRlbXBv
cmFyeSEKLSAgICAgICAgZnJhbWUtPmVkaXRvcigpLT5jb3B5SW1hZ2UocmVzdWx0KTsKKyAgICAg
ICAgZnJhbWUtPmVkaXRvcigpLT5jb3B5SW1hZ2UobV9oaXRUZXN0UmVzdWx0KTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdPcGVuTWVkaWFJbk5ld1dpbmRvdzoK
LSAgICAgICAgb3Blbk5ld1dpbmRvdyhyZXN1bHQuYWJzb2x1dGVNZWRpYVVSTCgpLCBmcmFtZSk7
CisgICAgICAgIG9wZW5OZXdXaW5kb3cobV9oaXRUZXN0UmVzdWx0LmFic29sdXRlTWVkaWFVUkwo
KSwgZnJhbWUpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0Nv
cHlNZWRpYUxpbmtUb0NsaXBib2FyZDoKLSAgICAgICAgZnJhbWUtPmVkaXRvcigpLT5jb3B5VVJM
KHJlc3VsdC5hYnNvbHV0ZU1lZGlhVVJMKCksIHJlc3VsdC50ZXh0Q29udGVudCgpKTsKKyAgICAg
ICAgZnJhbWUtPmVkaXRvcigpLT5jb3B5VVJMKG1faGl0VGVzdFJlc3VsdC5hYnNvbHV0ZU1lZGlh
VVJMKCksIG1faGl0VGVzdFJlc3VsdC50ZXh0Q29udGVudCgpKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdUb2dnbGVNZWRpYUNvbnRyb2xzOgotICAgICAgICBy
ZXN1bHQudG9nZ2xlTWVkaWFDb250cm9sc0Rpc3BsYXkoKTsKKyAgICAgICAgbV9oaXRUZXN0UmVz
dWx0LnRvZ2dsZU1lZGlhQ29udHJvbHNEaXNwbGF5KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgQ29udGV4dE1lbnVJdGVtVGFnVG9nZ2xlTWVkaWFMb29wOgotICAgICAgICByZXN1bHQudG9n
Z2xlTWVkaWFMb29wUGxheWJhY2soKTsKKyAgICAgICAgbV9oaXRUZXN0UmVzdWx0LnRvZ2dsZU1l
ZGlhTG9vcFBsYXliYWNrKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ29udGV4dE1lbnVJ
dGVtVGFnRW50ZXJWaWRlb0Z1bGxzY3JlZW46Ci0gICAgICAgIHJlc3VsdC5lbnRlckZ1bGxzY3Jl
ZW5Gb3JWaWRlbygpOworICAgICAgICBtX2hpdFRlc3RSZXN1bHQuZW50ZXJGdWxsc2NyZWVuRm9y
VmlkZW8oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdNZWRp
YVBsYXlQYXVzZToKLSAgICAgICAgcmVzdWx0LnRvZ2dsZU1lZGlhUGxheVN0YXRlKCk7CisgICAg
ICAgIG1faGl0VGVzdFJlc3VsdC50b2dnbGVNZWRpYVBsYXlTdGF0ZSgpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ01lZGlhTXV0ZToKLSAgICAgICAgcmVzdWx0
LnRvZ2dsZU1lZGlhTXV0ZVN0YXRlKCk7CisgICAgICAgIG1faGl0VGVzdFJlc3VsdC50b2dnbGVN
ZWRpYU11dGVTdGF0ZSgpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENvbnRleHRNZW51SXRl
bVRhZ09wZW5GcmFtZUluTmV3V2luZG93OiB7CiAgICAgICAgIERvY3VtZW50TG9hZGVyKiBsb2Fk
ZXIgPSBmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCk7CkBAIC0yNzIsMTAgKzI4NCwx
MCBAQCB2b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6Y29udGV4dE1lbnVJCiAgICAgICAgIG1f
Y2xpZW50LT5sb29rVXBJbkRpY3Rpb25hcnkoZnJhbWUpOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5MaW5rOgotICAgICAgICBpZiAoRnJhbWUqIHRhcmdl
dEZyYW1lID0gcmVzdWx0LnRhcmdldEZyYW1lKCkpCi0gICAgICAgICAgICB0YXJnZXRGcmFtZS0+
bG9hZGVyKCktPmxvYWRGcmFtZVJlcXVlc3QoRnJhbWVMb2FkUmVxdWVzdChSZXNvdXJjZVJlcXVl
c3QocmVzdWx0LmFic29sdXRlTGlua1VSTCgpLCBmcmFtZS0+bG9hZGVyKCktPm91dGdvaW5nUmVm
ZXJyZXIoKSkpLCBmYWxzZSwgZmFsc2UsIDAsIDAsIFNlbmRSZWZlcnJlcik7CisgICAgICAgIGlm
IChGcmFtZSogdGFyZ2V0RnJhbWUgPSBtX2hpdFRlc3RSZXN1bHQudGFyZ2V0RnJhbWUoKSkKKyAg
ICAgICAgICAgIHRhcmdldEZyYW1lLT5sb2FkZXIoKS0+bG9hZEZyYW1lUmVxdWVzdChGcmFtZUxv
YWRSZXF1ZXN0KFJlc291cmNlUmVxdWVzdChtX2hpdFRlc3RSZXN1bHQuYWJzb2x1dGVMaW5rVVJM
KCksIGZyYW1lLT5sb2FkZXIoKS0+b3V0Z29pbmdSZWZlcnJlcigpKSksIGZhbHNlLCBmYWxzZSwg
MCwgMCwgU2VuZFJlZmVycmVyKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgb3Blbk5ld1dp
bmRvdyhyZXN1bHQuYWJzb2x1dGVMaW5rVVJMKCksIGZyYW1lKTsKKyAgICAgICAgICAgIG9wZW5O
ZXdXaW5kb3cobV9oaXRUZXN0UmVzdWx0LmFic29sdXRlTGlua1VSTCgpLCBmcmFtZSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQm9sZDoKICAgICAgICAgZnJh
bWUtPmVkaXRvcigpLT5jb21tYW5kKCJUb2dnbGVCb2xkIikuZXhlY3V0ZSgpOwpAQCAtMjk0LDcg
KzMwNiw3IEBAIHZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjpjb250ZXh0TWVudUkKICAgICAg
ICAgRXhjZXB0aW9uQ29kZSBlYzsKICAgICAgICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdl
ID0gZnJhbWUtPnNlbGVjdGlvbigpLT50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgICAgICBpZiAo
IXNlbGVjdGVkUmFuZ2UgfHwgc2VsZWN0ZWRSYW5nZS0+Y29sbGFwc2VkKGVjKSkgewotICAgICAg
ICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpLT5k
b2N1bWVudCgpOworICAgICAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9oaXRUZXN0UmVz
dWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpLT5kb2N1bWVudCgpOwogICAgICAgICAgICAgc2VsZWN0
ZWRSYW5nZSA9IGRvY3VtZW50LT5jcmVhdGVSYW5nZSgpOwogICAgICAgICAgICAgc2VsZWN0ZWRS
YW5nZS0+c2VsZWN0Tm9kZShkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCksIGVjKTsKICAgICAg
ICAgfQpAQCAtMzg0LDEzICszOTYsMTMgQEAgdm9pZCBDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNv
bnRleHRNZW51SQogICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPnRvZ2dsZUF1dG9tYXRpY1NwZWxs
aW5nQ29ycmVjdGlvbigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENvbnRleHRNZW51SXRl
bVRhZ0NoYW5nZUJhY2s6Ci0gICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+Y2hhbmdlQmFja1RvUmVw
bGFjZWRTdHJpbmcocmVzdWx0LnJlcGxhY2VkU3RyaW5nKCkpOworICAgICAgICBmcmFtZS0+ZWRp
dG9yKCktPmNoYW5nZUJhY2tUb1JlcGxhY2VkU3RyaW5nKG1faGl0VGVzdFJlc3VsdC5yZXBsYWNl
ZFN0cmluZygpKTsKICAgICAgICAgYnJlYWs7CiAjZW5kaWYKICNpZiBFTkFCTEUoSU5TUEVDVE9S
KQogICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnSW5zcGVjdEVsZW1lbnQ6CiAgICAgICAgIGlm
IChQYWdlKiBwYWdlID0gZnJhbWUtPnBhZ2UoKSkKLSAgICAgICAgICAgIHBhZ2UtPmluc3BlY3Rv
ckNvbnRyb2xsZXIoKS0+aW5zcGVjdChyZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCkpOworICAg
ICAgICAgICAgcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5pbnNwZWN0KG1faGl0VGVzdFJl
c3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKSk7CiAgICAgICAgIGJyZWFrOwogI2VuZGlmCiAgICAg
ZGVmYXVsdDoKQEAgLTM5OCw2ICs0MTAsODI5IEBAIHZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVy
Ojpjb250ZXh0TWVudUkKICAgICB9CiB9CiAKK3ZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjph
cHBlbmRJdGVtKENvbnRleHRNZW51SXRlbSYgbWVudUl0ZW0sIENvbnRleHRNZW51KiBwYXJlbnRN
ZW51KQoreworICAgIGNoZWNrT3JFbmFibGVJZk5lZWRlZChtZW51SXRlbSk7CisgICAgaWYgKHBh
cmVudE1lbnUpCisgICAgICAgIHBhcmVudE1lbnUtPmFwcGVuZEl0ZW0obWVudUl0ZW0pOworfQor
CitzdGF0aWMgUGFzc093blB0cjxDb250ZXh0TWVudUl0ZW0+IHNlcGFyYXRvckl0ZW0oKQorewor
ICAgIHJldHVybiBuZXcgQ29udGV4dE1lbnVJdGVtKFNlcGFyYXRvclR5cGUsIENvbnRleHRNZW51
SXRlbVRhZ05vQWN0aW9uLCBTdHJpbmcoKSk7Cit9CisKK3ZvaWQgQ29udGV4dE1lbnVDb250cm9s
bGVyOjpjcmVhdGVBbmRBcHBlbmRGb250U3ViTWVudShDb250ZXh0TWVudUl0ZW0mIGZvbnRNZW51
SXRlbSkKK3sKKyAgICBDb250ZXh0TWVudSBmb250TWVudTsKKworI2lmIFBMQVRGT1JNKE1BQykK
KyAgICBDb250ZXh0TWVudUl0ZW0gc2hvd0ZvbnRzKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRl
bVRhZ1Nob3dGb250cywgY29udGV4dE1lbnVJdGVtVGFnU2hvd0ZvbnRzKCkpOworI2VuZGlmCisg
ICAgQ29udGV4dE1lbnVJdGVtIGJvbGQoQ2hlY2thYmxlQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJ
dGVtVGFnQm9sZCwgY29udGV4dE1lbnVJdGVtVGFnQm9sZCgpKTsKKyAgICBDb250ZXh0TWVudUl0
ZW0gaXRhbGljKENoZWNrYWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0l0YWxpYywg
Y29udGV4dE1lbnVJdGVtVGFnSXRhbGljKCkpOworICAgIENvbnRleHRNZW51SXRlbSB1bmRlcmxp
bmUoQ2hlY2thYmxlQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnVW5kZXJsaW5lLCBjb250
ZXh0TWVudUl0ZW1UYWdVbmRlcmxpbmUoKSk7CisgICAgQ29udGV4dE1lbnVJdGVtIG91dGxpbmUo
QWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnT3V0bGluZSwgY29udGV4dE1lbnVJdGVtVGFn
T3V0bGluZSgpKTsKKyNpZiBQTEFURk9STShNQUMpCisgICAgQ29udGV4dE1lbnVJdGVtIHN0eWxl
cyhBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTdHlsZXMsIGNvbnRleHRNZW51SXRlbVRh
Z1N0eWxlcygpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gc2hvd0NvbG9ycyhBY3Rpb25UeXBlLCBD
b250ZXh0TWVudUl0ZW1UYWdTaG93Q29sb3JzLCBjb250ZXh0TWVudUl0ZW1UYWdTaG93Q29sb3Jz
KCkpOworI2VuZGlmCisKKyNpZiBQTEFURk9STShNQUMpCisgICAgYXBwZW5kSXRlbShzaG93Rm9u
dHMsICZmb250TWVudSk7CisjZW5kaWYKKyAgICBhcHBlbmRJdGVtKGJvbGQsICZmb250TWVudSk7
CisgICAgYXBwZW5kSXRlbShpdGFsaWMsICZmb250TWVudSk7CisgICAgYXBwZW5kSXRlbSh1bmRl
cmxpbmUsICZmb250TWVudSk7CisgICAgYXBwZW5kSXRlbShvdXRsaW5lLCAmZm9udE1lbnUpOwor
I2lmIFBMQVRGT1JNKE1BQykKKyAgICBhcHBlbmRJdGVtKHN0eWxlcywgJmZvbnRNZW51KTsKKyAg
ICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCksICZmb250TWVudSk7CisgICAgYXBwZW5kSXRl
bShzaG93Q29sb3JzLCAmZm9udE1lbnUpOworI2VuZGlmCisKKyAgICBmb250TWVudUl0ZW0uc2V0
U3ViTWVudSgmZm9udE1lbnUpOworfQorCisjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIp
CisKKyNpZiAhUExBVEZPUk0oR1RLKQorCit2b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6Y3Jl
YXRlQW5kQXBwZW5kU3BlbGxpbmdBbmRHcmFtbWFyU3ViTWVudShDb250ZXh0TWVudUl0ZW0mIHNw
ZWxsaW5nQW5kR3JhbW1hck1lbnVJdGVtKQoreworICAgIENvbnRleHRNZW51IHNwZWxsaW5nQW5k
R3JhbW1hck1lbnU7CisKKyAgICBDb250ZXh0TWVudUl0ZW0gc2hvd1NwZWxsaW5nUGFuZWwoQWN0
aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU2hvd1NwZWxsaW5nUGFuZWwsIAorICAgICAgICBj
b250ZXh0TWVudUl0ZW1UYWdTaG93U3BlbGxpbmdQYW5lbCh0cnVlKSk7CisgICAgQ29udGV4dE1l
bnVJdGVtIGNoZWNrU3BlbGxpbmcoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnQ2hlY2tT
cGVsbGluZywgCisgICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ0NoZWNrU3BlbGxpbmcoKSk7Cisg
ICAgQ29udGV4dE1lbnVJdGVtIGNoZWNrQXNZb3VUeXBlKENoZWNrYWJsZUFjdGlvblR5cGUsIENv
bnRleHRNZW51SXRlbVRhZ0NoZWNrU3BlbGxpbmdXaGlsZVR5cGluZywgCisgICAgICAgIGNvbnRl
eHRNZW51SXRlbVRhZ0NoZWNrU3BlbGxpbmdXaGlsZVR5cGluZygpKTsKKyAgICBDb250ZXh0TWVu
dUl0ZW0gZ3JhbW1hcldpdGhTcGVsbGluZyhDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVu
dUl0ZW1UYWdDaGVja0dyYW1tYXJXaXRoU3BlbGxpbmcsIAorICAgICAgICBjb250ZXh0TWVudUl0
ZW1UYWdDaGVja0dyYW1tYXJXaXRoU3BlbGxpbmcoKSk7CisjaWYgUExBVEZPUk0oTUFDKSAmJiAh
ZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQorICAgIENvbnRleHRNZW51SXRlbSBjb3JyZWN0
U3BlbGxpbmcoQ2hlY2thYmxlQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnQ29ycmVjdFNw
ZWxsaW5nQXV0b21hdGljYWxseSwgCisgICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ0NvcnJlY3RT
cGVsbGluZ0F1dG9tYXRpY2FsbHkoKSk7CisjZW5kaWYKKworICAgIGFwcGVuZEl0ZW0oc2hvd1Nw
ZWxsaW5nUGFuZWwsICZzcGVsbGluZ0FuZEdyYW1tYXJNZW51KTsKKyAgICBhcHBlbmRJdGVtKGNo
ZWNrU3BlbGxpbmcsICZzcGVsbGluZ0FuZEdyYW1tYXJNZW51KTsKKyNpZiBQTEFURk9STShNQUMp
ICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpCisgICAgYXBwZW5kSXRlbSgqc2VwYXJh
dG9ySXRlbSgpLCAmc3BlbGxpbmdBbmRHcmFtbWFyTWVudSk7CisjZW5kaWYKKyAgICBhcHBlbmRJ
dGVtKGNoZWNrQXNZb3VUeXBlLCAmc3BlbGxpbmdBbmRHcmFtbWFyTWVudSk7CisgICAgYXBwZW5k
SXRlbShncmFtbWFyV2l0aFNwZWxsaW5nLCAmc3BlbGxpbmdBbmRHcmFtbWFyTWVudSk7CisjaWYg
UExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQorICAgIGFwcGVu
ZEl0ZW0oY29ycmVjdFNwZWxsaW5nLCAmc3BlbGxpbmdBbmRHcmFtbWFyTWVudSk7CisjZW5kaWYK
KworICAgIHNwZWxsaW5nQW5kR3JhbW1hck1lbnVJdGVtLnNldFN1Yk1lbnUoJnNwZWxsaW5nQW5k
R3JhbW1hck1lbnUpOworfQorCisjZW5kaWYgLy8gIVBMQVRGT1JNKEdUSykKKworI2Vsc2UKKwor
dm9pZCBDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNyZWF0ZUFuZEFwcGVuZFNwZWxsaW5nQW5kR3Jh
bW1hclN1Yk1lbnUoQ29udGV4dE1lbnVJdGVtJiBzcGVsbGluZ0FuZEdyYW1tYXJNZW51SXRlbSkK
K3sKKyAgICBDb250ZXh0TWVudSBzcGVsbGluZ01lbnU7CisKKyAgICBDb250ZXh0TWVudUl0ZW0g
c2hvd1NwZWxsaW5nUGFuZWwoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU2hvd1NwZWxs
aW5nUGFuZWwsIAorICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdTaG93U3BlbGxpbmdQYW5lbCh0
cnVlKSk7CisgICAgQ29udGV4dE1lbnVJdGVtIGNoZWNrU3BlbGxpbmcoQWN0aW9uVHlwZSwgQ29u
dGV4dE1lbnVJdGVtVGFnQ2hlY2tTcGVsbGluZywgCisgICAgICAgIGNvbnRleHRNZW51SXRlbVRh
Z0NoZWNrU3BlbGxpbmcoKSk7CisgICAgQ29udGV4dE1lbnVJdGVtIGNoZWNrQXNZb3VUeXBlKENo
ZWNrYWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0NoZWNrU3BlbGxpbmdXaGlsZVR5
cGluZywgCisgICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ0NoZWNrU3BlbGxpbmdXaGlsZVR5cGlu
ZygpKTsKKworICAgIGFwcGVuZEl0ZW0oc2hvd1NwZWxsaW5nUGFuZWwsICZzcGVsbGluZ01lbnUp
OworICAgIGFwcGVuZEl0ZW0oY2hlY2tTcGVsbGluZywgJnNwZWxsaW5nTWVudSk7CisgICAgYXBw
ZW5kSXRlbShjaGVja0FzWW91VHlwZSwgJnNwZWxsaW5nTWVudSk7CisKKyAgICBzcGVsbGluZ01l
bnVJdGVtLnNldFN1Yk1lbnUoJnNwZWxsaW5nTWVudSk7Cit9CisKKyNlbmRpZgorCisjaWYgUExB
VEZPUk0oTUFDKQorCit2b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6Y3JlYXRlQW5kQXBwZW5k
U3BlZWNoU3ViTWVudShDb250ZXh0TWVudUl0ZW0mIHNwZWVjaE1lbnVJdGVtKQoreworICAgIENv
bnRleHRNZW51IHNwZWVjaE1lbnU7CisKKyAgICBDb250ZXh0TWVudUl0ZW0gc3RhcnQoQWN0aW9u
VHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU3RhcnRTcGVha2luZywgY29udGV4dE1lbnVJdGVtVGFn
U3RhcnRTcGVha2luZygpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gc3RvcChBY3Rpb25UeXBlLCBD
b250ZXh0TWVudUl0ZW1UYWdTdG9wU3BlYWtpbmcsIGNvbnRleHRNZW51SXRlbVRhZ1N0b3BTcGVh
a2luZygpKTsKKworICAgIGFwcGVuZEl0ZW0oc3RhcnQsICZzcGVlY2hNZW51KTsKKyAgICBhcHBl
bmRJdGVtKHN0b3AsICZzcGVlY2hNZW51KTsKKworICAgIHNwZWVjaE1lbnVJdGVtLnNldFN1Yk1l
bnUoJnNwZWVjaE1lbnUpOworfQorCisjZW5kaWYKKyAKKyNpZiAhUExBVEZPUk0oR1RLKQorCit2
b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6Y3JlYXRlQW5kQXBwZW5kV3JpdGluZ0RpcmVjdGlv
blN1Yk1lbnUoQ29udGV4dE1lbnVJdGVtJiB3cml0aW5nRGlyZWN0aW9uTWVudUl0ZW0pCit7Cisg
ICAgQ29udGV4dE1lbnUgd3JpdGluZ0RpcmVjdGlvbk1lbnU7CisKKyAgICBDb250ZXh0TWVudUl0
ZW0gZGVmYXVsdEl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnRGVmYXVsdERpcmVj
dGlvbiwgCisgICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ0RlZmF1bHREaXJlY3Rpb24oKSk7Cisg
ICAgQ29udGV4dE1lbnVJdGVtIGx0cihDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0
ZW1UYWdMZWZ0VG9SaWdodCwgY29udGV4dE1lbnVJdGVtVGFnTGVmdFRvUmlnaHQoKSk7CisgICAg
Q29udGV4dE1lbnVJdGVtIHJ0bChDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1U
YWdSaWdodFRvTGVmdCwgY29udGV4dE1lbnVJdGVtVGFnUmlnaHRUb0xlZnQoKSk7CisKKyAgICBh
cHBlbmRJdGVtKGRlZmF1bHRJdGVtLCAmd3JpdGluZ0RpcmVjdGlvbk1lbnUpOworICAgIGFwcGVu
ZEl0ZW0obHRyLCAmd3JpdGluZ0RpcmVjdGlvbk1lbnUpOworICAgIGFwcGVuZEl0ZW0ocnRsLCAm
d3JpdGluZ0RpcmVjdGlvbk1lbnUpOworCisgICAgd3JpdGluZ0RpcmVjdGlvbk1lbnVJdGVtLnNl
dFN1Yk1lbnUoJndyaXRpbmdEaXJlY3Rpb25NZW51KTsKK30KKwordm9pZCBDb250ZXh0TWVudUNv
bnRyb2xsZXI6OmNyZWF0ZUFuZEFwcGVuZFRleHREaXJlY3Rpb25TdWJNZW51KENvbnRleHRNZW51
SXRlbSYgdGV4dERpcmVjdGlvbk1lbnVJdGVtKQoreworICAgIENvbnRleHRNZW51IHRleHREaXJl
Y3Rpb25NZW51OworCisgICAgQ29udGV4dE1lbnVJdGVtIGRlZmF1bHRJdGVtKEFjdGlvblR5cGUs
IENvbnRleHRNZW51SXRlbVRhZ1RleHREaXJlY3Rpb25EZWZhdWx0LCBjb250ZXh0TWVudUl0ZW1U
YWdEZWZhdWx0RGlyZWN0aW9uKCkpOworICAgIENvbnRleHRNZW51SXRlbSBsdHIoQ2hlY2thYmxl
QWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnVGV4dERpcmVjdGlvbkxlZnRUb1JpZ2h0LCBj
b250ZXh0TWVudUl0ZW1UYWdMZWZ0VG9SaWdodCgpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gcnRs
KENoZWNrYWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1RleHREaXJlY3Rpb25SaWdo
dFRvTGVmdCwgY29udGV4dE1lbnVJdGVtVGFnUmlnaHRUb0xlZnQoKSk7CisKKyAgICBhcHBlbmRJ
dGVtKGRlZmF1bHRJdGVtLCAmdGV4dERpcmVjdGlvbk1lbnUpOworICAgIGFwcGVuZEl0ZW0obHRy
LCAmdGV4dERpcmVjdGlvbk1lbnUpOworICAgIGFwcGVuZEl0ZW0ocnRsLCAmdGV4dERpcmVjdGlv
bk1lbnUpOworCisgICAgdGV4dERpcmVjdGlvbk1lbnVJdGVtLnNldFN1Yk1lbnUoJnRleHREaXJl
Y3Rpb25NZW51KTsKK30KKworI2VuZGlmCisKKyNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVk
KEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQorCit2
b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6Y3JlYXRlQW5kQXBwZW5kU3Vic3RpdHV0aW9uc1N1
Yk1lbnUoQ29udGV4dE1lbnVJdGVtJiBzdWJzdGl0dXRpb25zTWVudUl0ZW0pCit7CisgICAgQ29u
dGV4dE1lbnUgc3Vic3RpdHV0aW9uc01lbnU7CisKKyAgICBDb250ZXh0TWVudUl0ZW0gc2hvd1N1
YnN0aXR1dGlvbnMoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU2hvd1N1YnN0aXR1dGlv
bnMsIGNvbnRleHRNZW51SXRlbVRhZ1Nob3dTdWJzdGl0dXRpb25zKHRydWUpKTsKKyAgICBDb250
ZXh0TWVudUl0ZW0gc21hcnRDb3B5UGFzdGUoQ2hlY2thYmxlQWN0aW9uVHlwZSwgQ29udGV4dE1l
bnVJdGVtVGFnU21hcnRDb3B5UGFzdGUsIGNvbnRleHRNZW51SXRlbVRhZ1NtYXJ0Q29weVBhc3Rl
KCkpOworICAgIENvbnRleHRNZW51SXRlbSBzbWFydFF1b3RlcyhDaGVja2FibGVBY3Rpb25UeXBl
LCBDb250ZXh0TWVudUl0ZW1UYWdTbWFydFF1b3RlcywgY29udGV4dE1lbnVJdGVtVGFnU21hcnRR
dW90ZXMoKSk7CisgICAgQ29udGV4dE1lbnVJdGVtIHNtYXJ0RGFzaGVzKENoZWNrYWJsZUFjdGlv
blR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1NtYXJ0RGFzaGVzLCBjb250ZXh0TWVudUl0ZW1UYWdT
bWFydERhc2hlcygpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gc21hcnRMaW5rcyhDaGVja2FibGVB
Y3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTbWFydExpbmtzLCBjb250ZXh0TWVudUl0ZW1U
YWdTbWFydExpbmtzKCkpOworICAgIENvbnRleHRNZW51SXRlbSB0ZXh0UmVwbGFjZW1lbnQoQ2hl
Y2thYmxlQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnVGV4dFJlcGxhY2VtZW50LCBjb250
ZXh0TWVudUl0ZW1UYWdUZXh0UmVwbGFjZW1lbnQoKSk7CisKKyAgICBhcHBlbmRJdGVtKHNob3dT
dWJzdGl0dXRpb25zLCAmc3Vic3RpdHV0aW9uc01lbnUpOworICAgIGFwcGVuZEl0ZW0oKnNlcGFy
YXRvckl0ZW0oKSwgJnN1YnN0aXR1dGlvbnNNZW51KTsKKyAgICBhcHBlbmRJdGVtKHNtYXJ0Q29w
eVBhc3RlLCAmc3Vic3RpdHV0aW9uc01lbnUpOworICAgIGFwcGVuZEl0ZW0oc21hcnRRdW90ZXMs
ICZzdWJzdGl0dXRpb25zTWVudSk7CisgICAgYXBwZW5kSXRlbShzbWFydERhc2hlcywgJnN1YnN0
aXR1dGlvbnNNZW51KTsKKyAgICBhcHBlbmRJdGVtKHNtYXJ0TGlua3MsICZzdWJzdGl0dXRpb25z
TWVudSk7CisgICAgYXBwZW5kSXRlbSh0ZXh0UmVwbGFjZW1lbnQsICZzdWJzdGl0dXRpb25zTWVu
dSk7CisKKyAgICBzdWJzdGl0dXRpb25zTWVudUl0ZW0uc2V0U3ViTWVudSgmc3Vic3RpdHV0aW9u
c01lbnUpOworfQorCit2b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6Y3JlYXRlQW5kQXBwZW5k
VHJhbnNmb3JtYXRpb25zU3ViTWVudShDb250ZXh0TWVudUl0ZW0mIHRyYW5zZm9ybWF0aW9uc01l
bnVJdGVtKQoreworICAgIENvbnRleHRNZW51IHRyYW5zZm9ybWF0aW9uc01lbnU7CisKKyAgICBD
b250ZXh0TWVudUl0ZW0gbWFrZVVwcGVyQ2FzZShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1U
YWdNYWtlVXBwZXJDYXNlLCBjb250ZXh0TWVudUl0ZW1UYWdNYWtlVXBwZXJDYXNlKCkpOworICAg
IENvbnRleHRNZW51SXRlbSBtYWtlTG93ZXJDYXNlKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRl
bVRhZ01ha2VMb3dlckNhc2UsIGNvbnRleHRNZW51SXRlbVRhZ01ha2VMb3dlckNhc2UoKSk7Cisg
ICAgQ29udGV4dE1lbnVJdGVtIGNhcGl0YWxpemUoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVt
VGFnQ2FwaXRhbGl6ZSwgY29udGV4dE1lbnVJdGVtVGFnQ2FwaXRhbGl6ZSgpKTsKKworICAgIGFw
cGVuZEl0ZW0obWFrZVVwcGVyQ2FzZSwgJnRyYW5zZm9ybWF0aW9uc01lbnUpOworICAgIGFwcGVu
ZEl0ZW0obWFrZUxvd2VyQ2FzZSwgJnRyYW5zZm9ybWF0aW9uc01lbnUpOworICAgIGFwcGVuZEl0
ZW0oY2FwaXRhbGl6ZSwgJnRyYW5zZm9ybWF0aW9uc01lbnUpOworCisgICAgdHJhbnNmb3JtYXRp
b25zTWVudUl0ZW0uc2V0U3ViTWVudSgmdHJhbnNmb3JtYXRpb25zTWVudSk7Cit9CisKKyNlbmRp
ZgorCitzdGF0aWMgYm9vbCBzZWxlY3Rpb25Db250YWluc1Bvc3NpYmxlV29yZChGcmFtZSogZnJh
bWUpCit7CisgICAgLy8gQ3VycmVudCBhbGdvcml0aG06IGxvb2sgZm9yIGEgY2hhcmFjdGVyIHRo
YXQncyBub3QganVzdCBhIHNlcGFyYXRvci4KKyAgICBmb3IgKFRleHRJdGVyYXRvciBpdChmcmFt
ZS0+c2VsZWN0aW9uKCktPnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOyAhaXQuYXRFbmQoKTsg
aXQuYWR2YW5jZSgpKSB7CisgICAgICAgIGludCBsZW5ndGggPSBpdC5sZW5ndGgoKTsKKyAgICAg
ICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSBpdC5jaGFyYWN0ZXJzKCk7CisgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCisgICAgICAgICAgICBpZiAoIShjYXRlZ29y
eShjaGFyYWN0ZXJzW2ldKSAmIChTZXBhcmF0b3JfU3BhY2UgfCBTZXBhcmF0b3JfTGluZSB8IFNl
cGFyYXRvcl9QYXJhZ3JhcGgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6cG9w
dWxhdGUoKQoreworICAgIENvbnRleHRNZW51SXRlbSBPcGVuTGlua0l0ZW0oQWN0aW9uVHlwZSwg
Q29udGV4dE1lbnVJdGVtVGFnT3BlbkxpbmssIGNvbnRleHRNZW51SXRlbVRhZ09wZW5MaW5rKCkp
OworICAgIENvbnRleHRNZW51SXRlbSBPcGVuTGlua0luTmV3V2luZG93SXRlbShBY3Rpb25UeXBl
LCBDb250ZXh0TWVudUl0ZW1UYWdPcGVuTGlua0luTmV3V2luZG93LCAKKyAgICAgICAgY29udGV4
dE1lbnVJdGVtVGFnT3BlbkxpbmtJbk5ld1dpbmRvdygpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0g
RG93bmxvYWRGaWxlSXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdEb3dubG9hZExp
bmtUb0Rpc2ssIAorICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdEb3dubG9hZExpbmtUb0Rpc2so
KSk7CisgICAgQ29udGV4dE1lbnVJdGVtIENvcHlMaW5rSXRlbShBY3Rpb25UeXBlLCBDb250ZXh0
TWVudUl0ZW1UYWdDb3B5TGlua1RvQ2xpcGJvYXJkLCAKKyAgICAgICAgY29udGV4dE1lbnVJdGVt
VGFnQ29weUxpbmtUb0NsaXBib2FyZCgpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gT3BlbkltYWdl
SW5OZXdXaW5kb3dJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ09wZW5JbWFnZUlu
TmV3V2luZG93LCAKKyAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnT3BlbkltYWdlSW5OZXdXaW5k
b3coKSk7CisgICAgQ29udGV4dE1lbnVJdGVtIERvd25sb2FkSW1hZ2VJdGVtKEFjdGlvblR5cGUs
IENvbnRleHRNZW51SXRlbVRhZ0Rvd25sb2FkSW1hZ2VUb0Rpc2ssIAorICAgICAgICBjb250ZXh0
TWVudUl0ZW1UYWdEb3dubG9hZEltYWdlVG9EaXNrKCkpOworICAgIENvbnRleHRNZW51SXRlbSBD
b3B5SW1hZ2VJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0NvcHlJbWFnZVRvQ2xp
cGJvYXJkLCAKKyAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnQ29weUltYWdlVG9DbGlwYm9hcmQo
KSk7CisgICAgQ29udGV4dE1lbnVJdGVtIE9wZW5NZWRpYUluTmV3V2luZG93SXRlbShBY3Rpb25U
eXBlLCBDb250ZXh0TWVudUl0ZW1UYWdPcGVuTWVkaWFJbk5ld1dpbmRvdywgU3RyaW5nKCkpOwor
ICAgIENvbnRleHRNZW51SXRlbSBDb3B5TWVkaWFMaW5rSXRlbShBY3Rpb25UeXBlLCBDb250ZXh0
TWVudUl0ZW1UYWdDb3B5TWVkaWFMaW5rVG9DbGlwYm9hcmQsIAorICAgICAgICBTdHJpbmcoKSk7
CisgICAgQ29udGV4dE1lbnVJdGVtIE1lZGlhUGxheVBhdXNlKEFjdGlvblR5cGUsIENvbnRleHRN
ZW51SXRlbVRhZ01lZGlhUGxheVBhdXNlLCAKKyAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnTWVk
aWFQbGF5KCkpOworICAgIENvbnRleHRNZW51SXRlbSBNZWRpYU11dGUoQWN0aW9uVHlwZSwgQ29u
dGV4dE1lbnVJdGVtVGFnTWVkaWFNdXRlLCAKKyAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnTWVk
aWFNdXRlKCkpOworICAgIENvbnRleHRNZW51SXRlbSBUb2dnbGVNZWRpYUNvbnRyb2xzKENoZWNr
YWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1RvZ2dsZU1lZGlhQ29udHJvbHMsIAor
ICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdUb2dnbGVNZWRpYUNvbnRyb2xzKCkpOworICAgIENv
bnRleHRNZW51SXRlbSBUb2dnbGVNZWRpYUxvb3AoQ2hlY2thYmxlQWN0aW9uVHlwZSwgQ29udGV4
dE1lbnVJdGVtVGFnVG9nZ2xlTWVkaWFMb29wLCAKKyAgICAgICAgY29udGV4dE1lbnVJdGVtVGFn
VG9nZ2xlTWVkaWFMb29wKCkpOworICAgIENvbnRleHRNZW51SXRlbSBFbnRlclZpZGVvRnVsbHNj
cmVlbihBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdFbnRlclZpZGVvRnVsbHNjcmVlbiwg
CisgICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ0VudGVyVmlkZW9GdWxsc2NyZWVuKCkpOworI2lm
IFBMQVRGT1JNKE1BQykKKyAgICBDb250ZXh0TWVudUl0ZW0gU2VhcmNoU3BvdGxpZ2h0SXRlbShB
Y3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTZWFyY2hJblNwb3RsaWdodCwgCisgICAgICAg
IGNvbnRleHRNZW51SXRlbVRhZ1NlYXJjaEluU3BvdGxpZ2h0KCkpOworICAgIENvbnRleHRNZW51
SXRlbSBMb29rSW5EaWN0aW9uYXJ5SXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdM
b29rVXBJbkRpY3Rpb25hcnksIAorICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdMb29rVXBJbkRp
Y3Rpb25hcnkoKSk7CisjZW5kaWYKKyNpZiAhUExBVEZPUk0oR1RLKQorICAgIENvbnRleHRNZW51
SXRlbSBTZWFyY2hXZWJJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1NlYXJjaFdl
YiwgY29udGV4dE1lbnVJdGVtVGFnU2VhcmNoV2ViKCkpOworI2VuZGlmCisgICAgQ29udGV4dE1l
bnVJdGVtIENvcHlJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0NvcHksIGNvbnRl
eHRNZW51SXRlbVRhZ0NvcHkoKSk7CisgICAgQ29udGV4dE1lbnVJdGVtIEJhY2tJdGVtKEFjdGlv
blR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0dvQmFjaywgY29udGV4dE1lbnVJdGVtVGFnR29CYWNr
KCkpOworICAgIENvbnRleHRNZW51SXRlbSBGb3J3YXJkSXRlbShBY3Rpb25UeXBlLCBDb250ZXh0
TWVudUl0ZW1UYWdHb0ZvcndhcmQsICBjb250ZXh0TWVudUl0ZW1UYWdHb0ZvcndhcmQoKSk7Cisg
ICAgQ29udGV4dE1lbnVJdGVtIFN0b3BJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRh
Z1N0b3AsIGNvbnRleHRNZW51SXRlbVRhZ1N0b3AoKSk7CisgICAgQ29udGV4dE1lbnVJdGVtIFJl
bG9hZEl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnUmVsb2FkLCBjb250ZXh0TWVu
dUl0ZW1UYWdSZWxvYWQoKSk7CisgICAgQ29udGV4dE1lbnVJdGVtIE9wZW5GcmFtZUl0ZW0oQWN0
aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnT3BlbkZyYW1lSW5OZXdXaW5kb3csIAorICAgICAg
ICBjb250ZXh0TWVudUl0ZW1UYWdPcGVuRnJhbWVJbk5ld1dpbmRvdygpKTsKKyAgICBDb250ZXh0
TWVudUl0ZW0gTm9HdWVzc2VzSXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdOb0d1
ZXNzZXNGb3VuZCwgCisgICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ05vR3Vlc3Nlc0ZvdW5kKCkp
OworICAgIENvbnRleHRNZW51SXRlbSBJZ25vcmVTcGVsbGluZ0l0ZW0oQWN0aW9uVHlwZSwgQ29u
dGV4dE1lbnVJdGVtVGFnSWdub3JlU3BlbGxpbmcsIAorICAgICAgICBjb250ZXh0TWVudUl0ZW1U
YWdJZ25vcmVTcGVsbGluZygpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gTGVhcm5TcGVsbGluZ0l0
ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnTGVhcm5TcGVsbGluZywgCisgICAgICAg
IGNvbnRleHRNZW51SXRlbVRhZ0xlYXJuU3BlbGxpbmcoKSk7CisgICAgQ29udGV4dE1lbnVJdGVt
IElnbm9yZUdyYW1tYXJJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0lnbm9yZUdy
YW1tYXIsIAorICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdJZ25vcmVHcmFtbWFyKCkpOworICAg
IENvbnRleHRNZW51SXRlbSBDdXRJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0N1
dCwgY29udGV4dE1lbnVJdGVtVGFnQ3V0KCkpOworICAgIENvbnRleHRNZW51SXRlbSBQYXN0ZUl0
ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnUGFzdGUsIGNvbnRleHRNZW51SXRlbVRh
Z1Bhc3RlKCkpOworI2lmIFBMQVRGT1JNKEdUSykKKyAgICBDb250ZXh0TWVudUl0ZW0gRGVsZXRl
SXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdEZWxldGUsIGNvbnRleHRNZW51SXRl
bVRhZ0RlbGV0ZSgpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gU2VsZWN0QWxsSXRlbShBY3Rpb25U
eXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTZWxlY3RBbGwsIGNvbnRleHRNZW51SXRlbVRhZ1NlbGVj
dEFsbCgpKTsKKyNlbmRpZgorCisgICAgTm9kZSogbm9kZSA9IG1faGl0VGVzdFJlc3VsdC5pbm5l
ck5vblNoYXJlZE5vZGUoKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybjsKKyNpZiBQ
TEFURk9STShHVEspCisgICAgaWYgKCFtX2hpdFRlc3RSZXN1bHQuaXNDb250ZW50RWRpdGFibGUo
KSAmJiAobm9kZS0+aXNFbGVtZW50Tm9kZSgpICYmIHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2Rl
KS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkpCisgICAgICAgIHJldHVybjsKKyNlbmRpZgorICAg
IEZyYW1lKiBmcmFtZSA9IG5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCk7CisgICAgaWYgKCFmcmFt
ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX2hpdFRlc3RSZXN1bHQuaXNDb250ZW50
RWRpdGFibGUoKSkgeworICAgICAgICBGcmFtZUxvYWRlciogbG9hZGVyID0gZnJhbWUtPmxvYWRl
cigpOworICAgICAgICBLVVJMIGxpbmtVUkwgPSBtX2hpdFRlc3RSZXN1bHQuYWJzb2x1dGVMaW5r
VVJMKCk7CisgICAgICAgIGlmICghbGlua1VSTC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGlm
IChsb2FkZXItPmNhbkhhbmRsZVJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0KGxpbmtVUkwpKSkgewor
ICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oT3BlbkxpbmtJdGVtLCBtX2NvbnRleHRNZW51Lmdl
dCgpKTsKKyAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKE9wZW5MaW5rSW5OZXdXaW5kb3dJdGVt
LCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKERvd25s
b2FkRmlsZUl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgYXBwZW5kSXRlbShDb3B5TGlua0l0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOworICAg
ICAgICB9CisKKyAgICAgICAgS1VSTCBpbWFnZVVSTCA9IG1faGl0VGVzdFJlc3VsdC5hYnNvbHV0
ZUltYWdlVVJMKCk7CisgICAgICAgIGlmICghaW1hZ2VVUkwuaXNFbXB0eSgpKSB7CisgICAgICAg
ICAgICBpZiAoIWxpbmtVUkwuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0o
KnNlcGFyYXRvckl0ZW0oKSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisKKyAgICAgICAgICAgIGFw
cGVuZEl0ZW0oT3BlbkltYWdlSW5OZXdXaW5kb3dJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsK
KyAgICAgICAgICAgIGFwcGVuZEl0ZW0oRG93bmxvYWRJbWFnZUl0ZW0sIG1fY29udGV4dE1lbnUu
Z2V0KCkpOworICAgICAgICAgICAgaWYgKGltYWdlVVJMLmlzTG9jYWxGaWxlKCkgfHwgbV9oaXRU
ZXN0UmVzdWx0LmltYWdlKCkpCisgICAgICAgICAgICAgICAgYXBwZW5kSXRlbShDb3B5SW1hZ2VJ
dGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIEtVUkwgbWVk
aWFVUkwgPSBtX2hpdFRlc3RSZXN1bHQuYWJzb2x1dGVNZWRpYVVSTCgpOworICAgICAgICBpZiAo
IW1lZGlhVVJMLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgaWYgKCFsaW5rVVJMLmlzRW1wdHko
KSB8fCAhaW1hZ2VVUkwuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oKnNl
cGFyYXRvckl0ZW0oKSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisKKyAgICAgICAgICAgIGFwcGVu
ZEl0ZW0oTWVkaWFQbGF5UGF1c2UsIG1fY29udGV4dE1lbnUuZ2V0KCkpOworICAgICAgICAgICAg
YXBwZW5kSXRlbShNZWRpYU11dGUsIG1fY29udGV4dE1lbnUuZ2V0KCkpOworICAgICAgICAgICAg
YXBwZW5kSXRlbShUb2dnbGVNZWRpYUNvbnRyb2xzLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAg
ICAgICAgICAgIGFwcGVuZEl0ZW0oVG9nZ2xlTWVkaWFMb29wLCBtX2NvbnRleHRNZW51LmdldCgp
KTsKKyAgICAgICAgICAgIGFwcGVuZEl0ZW0oRW50ZXJWaWRlb0Z1bGxzY3JlZW4sIG1fY29udGV4
dE1lbnUuZ2V0KCkpOworCisgICAgICAgICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCks
IG1fY29udGV4dE1lbnUuZ2V0KCkpOworICAgICAgICAgICAgYXBwZW5kSXRlbShDb3B5TWVkaWFM
aW5rSXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAgICAgICBhcHBlbmRJdGVtKE9w
ZW5NZWRpYUluTmV3V2luZG93SXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAgIH0K
KworICAgICAgICBpZiAoaW1hZ2VVUkwuaXNFbXB0eSgpICYmIGxpbmtVUkwuaXNFbXB0eSgpICYm
IG1lZGlhVVJMLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgaWYgKG1faGl0VGVzdFJlc3VsdC5p
c1NlbGVjdGVkKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uQ29udGFpbnNQb3Nz
aWJsZVdvcmQoZnJhbWUpKSB7CisjaWYgUExBVEZPUk0oTUFDKQorICAgICAgICAgICAgICAgICAg
ICBhcHBlbmRJdGVtKFNlYXJjaFNwb3RsaWdodEl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOwor
I2VuZGlmCisjaWYgIVBMQVRGT1JNKEdUSykKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kSXRl
bShTZWFyY2hXZWJJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgYXBwZW5kSXRlbSgqc2VwYXJhdG9ySXRlbSgpLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyNl
bmRpZgorI2lmIFBMQVRGT1JNKE1BQykKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kSXRlbShM
b29rSW5EaWN0aW9uYXJ5SXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAgICAgICAg
ICAgICAgIGFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSwgbV9jb250ZXh0TWVudS5nZXQoKSk7
CisjZW5kaWYKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYXBwZW5kSXRlbShD
b3B5SXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisjaWYgUExBVEZPUk0oTUFDKQorICAgICAg
ICAgICAgICAgIGFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSwgbV9jb250ZXh0TWVudS5nZXQo
KSk7CisgICAgICAgICAgICAgICAgQ29udGV4dE1lbnVJdGVtIFNwZWVjaE1lbnVJdGVtKFN1Ym1l
bnVUeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTcGVlY2hNZW51LCBjb250ZXh0TWVudUl0ZW1UYWdT
cGVlY2hNZW51KCkpOworICAgICAgICAgICAgICAgIGNyZWF0ZUFuZEFwcGVuZFNwZWVjaFN1Yk1l
bnUoU3BlZWNoTWVudUl0ZW0pOworICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oU3BlZWNoTWVu
dUl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOworI2VuZGlmICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgfSBlbHNlIHsKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorICAgICAgICAgICAgICAg
IGlmICghKGZyYW1lLT5wYWdlKCkgJiYgZnJhbWUtPnBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxl
cigpLT5oYXNJbnNwZWN0b3JGcm9udGVuZENsaWVudCgpKSkgeworI2VuZGlmCisgICAgICAgICAg
ICAgICAgaWYgKGZyYW1lLT5wYWdlKCkgJiYgZnJhbWUtPnBhZ2UoKS0+YmFja0ZvcndhcmQoKS0+
Y2FuR29CYWNrT3JGb3J3YXJkKC0xKSkKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kSXRlbShC
YWNrSXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisKKyAgICAgICAgICAgICAgICBpZiAoZnJh
bWUtPnBhZ2UoKSAmJiBmcmFtZS0+cGFnZSgpLT5iYWNrRm9yd2FyZCgpLT5jYW5Hb0JhY2tPckZv
cndhcmQoMSkpCisgICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oRm9yd2FyZEl0ZW0sIG1f
Y29udGV4dE1lbnUuZ2V0KCkpOworCisgICAgICAgICAgICAgICAgLy8gdXNlIGlzTG9hZGluZ0lu
QVBJU2Vuc2UgcmF0aGVyIHRoYW4gaXNMb2FkaW5nIGJlY2F1c2UgU3RvcC9SZWxvYWQgYXJlCisg
ICAgICAgICAgICAgICAgLy8gaW50ZW5kZWQgdG8gbWF0Y2ggV2ViS2l0J3MgQVBJLCBub3QgV2Vi
Q29yZSdzIGludGVybmFsIG5vdGlvbiBvZiBsb2FkaW5nIHN0YXR1cworICAgICAgICAgICAgICAg
IGlmIChsb2FkZXItPmRvY3VtZW50TG9hZGVyKCktPmlzTG9hZGluZ0luQVBJU2Vuc2UoKSkKKyAg
ICAgICAgICAgICAgICAgICAgYXBwZW5kSXRlbShTdG9wSXRlbSwgbV9jb250ZXh0TWVudS5nZXQo
KSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBhcHBlbmRJdGVt
KFJlbG9hZEl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOworI2lmIEVOQUJMRShJTlNQRUNUT1Ip
CisgICAgICAgICAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgICAgICAgICBpZiAoZnJhbWUt
PnBhZ2UoKSAmJiBmcmFtZSAhPSBmcmFtZS0+cGFnZSgpLT5tYWluRnJhbWUoKSkKKyAgICAgICAg
ICAgICAgICAgICAgYXBwZW5kSXRlbShPcGVuRnJhbWVJdGVtLCBtX2NvbnRleHRNZW51LmdldCgp
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gZWxzZSB7IC8vIE1ha2UgYW4gZWRp
dGluZyBjb250ZXh0IG1lbnUKKyAgICAgICAgU2VsZWN0aW9uQ29udHJvbGxlciogc2VsZWN0aW9u
ID0gZnJhbWUtPnNlbGVjdGlvbigpOworICAgICAgICBib29sIGluUGFzc3dvcmRGaWVsZCA9IHNl
bGVjdGlvbi0+aXNJblBhc3N3b3JkRmllbGQoKTsKKyAgICAgICAgYm9vbCBzcGVsbENoZWNraW5n
RW5hYmxlZCA9IGZyYW1lLT5lZGl0b3IoKS0+aXNTcGVsbENoZWNraW5nRW5hYmxlZEZvcihub2Rl
KTsKKyAgICAgICAgCisgICAgICAgIGlmICghaW5QYXNzd29yZEZpZWxkICYmIHNwZWxsQ2hlY2tp
bmdFbmFibGVkKSB7CisgICAgICAgICAgICAvLyBDb25zaWRlciBhZGRpbmcgc3BlbGxpbmctcmVs
YXRlZCBvciBncmFtbWFyLXJlbGF0ZWQgY29udGV4dCBtZW51IGl0ZW1zIChuZXZlciBib3RoLCBz
aW5jZSBhIHNpbmdsZSBzZWxlY3RlZCByYW5nZQorICAgICAgICAgICAgLy8gaXMgbmV2ZXIgY29u
c2lkZXJlZCBhIG1pc3NwZWxsaW5nIGFuZCBiYWQgZ3JhbW1hciBhdCB0aGUgc2FtZSB0aW1lKQor
ICAgICAgICAgICAgYm9vbCBtaXNzcGVsbGluZzsKKyAgICAgICAgICAgIGJvb2wgYmFkR3JhbW1h
cjsKKyAgICAgICAgICAgIFZlY3RvcjxTdHJpbmc+IGd1ZXNzZXMgPSBmcmFtZS0+ZWRpdG9yKCkt
Pmd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsU2VsZWN0aW9uKG1pc3NwZWxsaW5n
LCBiYWRHcmFtbWFyKTsKKyAgICAgICAgICAgIGlmIChtaXNzcGVsbGluZyB8fCBiYWRHcmFtbWFy
KSB7CisgICAgICAgICAgICAgICAgc2l6ZV90IHNpemUgPSBndWVzc2VzLnNpemUoKTsKKyAgICAg
ICAgICAgICAgICBpZiAoc2l6ZSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIElmIHRo
ZXJlJ3MgYmFkIGdyYW1tYXIgYnV0IG5vIHN1Z2dlc3Rpb25zIChlLmcuLCByZXBlYXRlZCB3b3Jk
KSwganVzdCBsZWF2ZSBvZmYgdGhlIHN1Z2dlc3Rpb25zCisgICAgICAgICAgICAgICAgICAgIC8v
IGxpc3QgYW5kIHRyYWlsaW5nIHNlcGFyYXRvciByYXRoZXIgdGhhbiBhZGRpbmcgYSAiTm8gR3Vl
c3NlcyBGb3VuZCIgaXRlbSAobWF0Y2hlcyBBcHBLaXQpCisgICAgICAgICAgICAgICAgICAgIGlm
IChtaXNzcGVsbGluZykgeworICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kSXRlbShOb0d1
ZXNzZXNJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBTdHJpbmcgJmd1ZXNzID0gZ3Vlc3Nlc1tpXTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICghZ3Vlc3MuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ29udGV4dE1lbnVJdGVtIGl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJ
dGVtVGFnU3BlbGxpbmdHdWVzcywgZ3Vlc3MpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGFwcGVuZEl0ZW0oaXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYXBw
ZW5kSXRlbSgqc2VwYXJhdG9ySXRlbSgpLCBtX2NvbnRleHRNZW51LmdldCgpKTsgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBpZiAobWlzc3BlbGxpbmcpIHsKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kSXRl
bShJZ25vcmVTcGVsbGluZ0l0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOworICAgICAgICAgICAg
ICAgICAgICBhcHBlbmRJdGVtKExlYXJuU3BlbGxpbmdJdGVtLCBtX2NvbnRleHRNZW51LmdldCgp
KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kSXRl
bShJZ25vcmVHcmFtbWFySXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAgICAgICAg
ICAgYXBwZW5kSXRlbSgqc2VwYXJhdG9ySXRlbSgpLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyNp
ZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5l
ZChCVUlMRElOR19PTl9MRU9QQVJEKQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAvLyBJZiB0aGUgc3RyaW5nIHdhcyBhdXRvY29ycmVjdGVkLCBnZW5lcmF0ZSBhIGNvbnRl
eHR1YWwgbWVudSBpdGVtIGFsbG93aW5nIGl0IHRvIGJlIGNoYW5nZWQgYmFjay4KKyAgICAgICAg
ICAgICAgICBTdHJpbmcgcmVwbGFjZWRTdHJpbmcgPSBtX2hpdFRlc3RSZXN1bHQucmVwbGFjZWRT
dHJpbmcoKTsKKyAgICAgICAgICAgICAgICBpZiAoIXJlcGxhY2VkU3RyaW5nLmlzRW1wdHkoKSkg
eworICAgICAgICAgICAgICAgICAgICBDb250ZXh0TWVudUl0ZW0gaXRlbShBY3Rpb25UeXBlLCBD
b250ZXh0TWVudUl0ZW1UYWdDaGFuZ2VCYWNrLCBjb250ZXh0TWVudUl0ZW1UYWdDaGFuZ2VCYWNr
KHJlcGxhY2VkU3RyaW5nKSk7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oaXRlbSwg
bV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oKnNl
cGFyYXRvckl0ZW0oKSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAgICAgICAgICAgfQor
I2VuZGlmCisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBGcmFtZUxvYWRlciog
bG9hZGVyID0gZnJhbWUtPmxvYWRlcigpOworICAgICAgICBLVVJMIGxpbmtVUkwgPSBtX2hpdFRl
c3RSZXN1bHQuYWJzb2x1dGVMaW5rVVJMKCk7CisgICAgICAgIGlmICghbGlua1VSTC5pc0VtcHR5
KCkpIHsKKyAgICAgICAgICAgIGlmIChsb2FkZXItPmNhbkhhbmRsZVJlcXVlc3QoUmVzb3VyY2VS
ZXF1ZXN0KGxpbmtVUkwpKSkgeworICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oT3BlbkxpbmtJ
dGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKE9w
ZW5MaW5rSW5OZXdXaW5kb3dJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgICAg
ICAgICBhcHBlbmRJdGVtKERvd25sb2FkRmlsZUl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgYXBwZW5kSXRlbShDb3B5TGlua0l0ZW0sIG1fY29u
dGV4dE1lbnUuZ2V0KCkpOworICAgICAgICAgICAgYXBwZW5kSXRlbSgqc2VwYXJhdG9ySXRlbSgp
LCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtX2hpdFRl
c3RSZXN1bHQuaXNTZWxlY3RlZCgpICYmICFpblBhc3N3b3JkRmllbGQgJiYgc2VsZWN0aW9uQ29u
dGFpbnNQb3NzaWJsZVdvcmQoZnJhbWUpKSB7CisjaWYgUExBVEZPUk0oTUFDKQorICAgICAgICAg
ICAgYXBwZW5kSXRlbShTZWFyY2hTcG90bGlnaHRJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsK
KyNlbmRpZgorI2lmICFQTEFURk9STShHVEspCisgICAgICAgICAgICBhcHBlbmRJdGVtKFNlYXJj
aFdlYkl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOworICAgICAgICAgICAgYXBwZW5kSXRlbSgq
c2VwYXJhdG9ySXRlbSgpLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyNlbmRpZgorICAgICAKKyNp
ZiBQTEFURk9STShNQUMpCisgICAgICAgICAgICBhcHBlbmRJdGVtKExvb2tJbkRpY3Rpb25hcnlJ
dGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgICAgIGFwcGVuZEl0ZW0oKnNlcGFy
YXRvckl0ZW0oKSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisjZW5kaWYKKyAgICAgICAgfQorCisg
ICAgICAgIGFwcGVuZEl0ZW0oQ3V0SXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAg
IGFwcGVuZEl0ZW0oQ29weUl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOworICAgICAgICBhcHBl
bmRJdGVtKFBhc3RlSXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisjaWYgUExBVEZPUk0oR1RL
KQorICAgICAgICBhcHBlbmRJdGVtKERlbGV0ZUl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOwor
ICAgICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCksIG1fY29udGV4dE1lbnUuZ2V0KCkp
OworICAgICAgICBhcHBlbmRJdGVtKFNlbGVjdEFsbEl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkp
OworI2VuZGlmCisKKyAgICAgICAgaWYgKCFpblBhc3N3b3JkRmllbGQpIHsKKyAgICAgICAgICAg
IGFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisjaWZu
ZGVmIEJVSUxESU5HX09OX1RJR0VSCisjaWYgIVBMQVRGT1JNKEdUSykKKyAgICAgICAgICAgIENv
bnRleHRNZW51SXRlbSBTcGVsbGluZ0FuZEdyYW1tYXJNZW51SXRlbShTdWJtZW51VHlwZSwgQ29u
dGV4dE1lbnVJdGVtVGFnU3BlbGxpbmdNZW51LCAKKyAgICAgICAgICAgICAgICBjb250ZXh0TWVu
dUl0ZW1UYWdTcGVsbGluZ01lbnUoKSk7CisgICAgICAgICAgICBjcmVhdGVBbmRBcHBlbmRTcGVs
bGluZ0FuZEdyYW1tYXJTdWJNZW51KFNwZWxsaW5nQW5kR3JhbW1hck1lbnVJdGVtKTsKKyAgICAg
ICAgICAgIGFwcGVuZEl0ZW0oU3BlbGxpbmdBbmRHcmFtbWFyTWVudUl0ZW0sIG1fY29udGV4dE1l
bnUuZ2V0KCkpOworI2VuZGlmCisjZWxzZQorICAgICAgICAgICAgQ29udGV4dE1lbnVJdGVtIFNw
ZWxsaW5nTWVudUl0ZW0oU3VibWVudVR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1NwZWxsaW5nTWVu
dSwgCisgICAgICAgICAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnU3BlbGxpbmdNZW51KCkpOwor
ICAgICAgICAgICAgY3JlYXRlQW5kQXBwZW5kU3BlbGxpbmdTdWJNZW51KFNwZWxsaW5nTWVudUl0
ZW0pOworICAgICAgICAgICAgYXBwZW5kSXRlbShTcGVsbGluZ01lbnVJdGVtLCBtX2NvbnRleHRN
ZW51LmdldCgpKTsKKyNlbmRpZgorI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJ
TkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpCisgICAgICAgICAg
ICBDb250ZXh0TWVudUl0ZW0gc3Vic3RpdHV0aW9uc01lbnVJdGVtKFN1Ym1lbnVUeXBlLCBDb250
ZXh0TWVudUl0ZW1UYWdTdWJzdGl0dXRpb25zTWVudSwgCisgICAgICAgICAgICAgICAgY29udGV4
dE1lbnVJdGVtVGFnU3Vic3RpdHV0aW9uc01lbnUoKSk7CisgICAgICAgICAgICBjcmVhdGVBbmRB
cHBlbmRTdWJzdGl0dXRpb25zU3ViTWVudShzdWJzdGl0dXRpb25zTWVudUl0ZW0pOworICAgICAg
ICAgICAgYXBwZW5kSXRlbShzdWJzdGl0dXRpb25zTWVudUl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0
KCkpOworICAgICAgICAgICAgQ29udGV4dE1lbnVJdGVtIHRyYW5zZm9ybWF0aW9uc01lbnVJdGVt
KFN1Ym1lbnVUeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdUcmFuc2Zvcm1hdGlvbnNNZW51LCAKKyAg
ICAgICAgICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdUcmFuc2Zvcm1hdGlvbnNNZW51KCkpOwor
ICAgICAgICAgICAgY3JlYXRlQW5kQXBwZW5kVHJhbnNmb3JtYXRpb25zU3ViTWVudSh0cmFuc2Zv
cm1hdGlvbnNNZW51SXRlbSk7CisgICAgICAgICAgICBhcHBlbmRJdGVtKHRyYW5zZm9ybWF0aW9u
c01lbnVJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyNlbmRpZgorI2lmIFBMQVRGT1JNKEdU
SykKKyAgICAgICAgICAgIGJvb2wgc2hvdWxkU2hvd0ZvbnRNZW51ID0gZnJhbWUtPmVkaXRvcigp
LT5jYW5FZGl0UmljaGx5KCk7CisjZWxzZQorICAgICAgICAgICAgYm9vbCBzaG91bGRTaG93Rm9u
dE1lbnUgPSB0cnVlOworI2VuZGlmCisgICAgICAgICAgICBpZiAoc2hvdWxkU2hvd0ZvbnRNZW51
KSB7CisgICAgICAgICAgICAgICAgQ29udGV4dE1lbnVJdGVtIEZvbnRNZW51SXRlbShTdWJtZW51
VHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnRm9udE1lbnUsIAorICAgICAgICAgICAgICAgICAgICBj
b250ZXh0TWVudUl0ZW1UYWdGb250TWVudSgpKTsKKyAgICAgICAgICAgICAgICBjcmVhdGVBbmRB
cHBlbmRGb250U3ViTWVudShGb250TWVudUl0ZW0pOworICAgICAgICAgICAgICAgIGFwcGVuZEl0
ZW0oRm9udE1lbnVJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgICAgIH0KKyNp
ZiBQTEFURk9STShNQUMpCisgICAgICAgICAgICBDb250ZXh0TWVudUl0ZW0gU3BlZWNoTWVudUl0
ZW0oU3VibWVudVR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1NwZWVjaE1lbnUsIGNvbnRleHRNZW51
SXRlbVRhZ1NwZWVjaE1lbnUoKSk7CisgICAgICAgICAgICBjcmVhdGVBbmRBcHBlbmRTcGVlY2hT
dWJNZW51KFNwZWVjaE1lbnVJdGVtKTsKKyAgICAgICAgICAgIGFwcGVuZEl0ZW0oU3BlZWNoTWVu
dUl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOworI2VuZGlmCisjaWYgIVBMQVRGT1JNKEdUSykK
KyAgICAgICAgICAgIENvbnRleHRNZW51SXRlbSBXcml0aW5nRGlyZWN0aW9uTWVudUl0ZW0oU3Vi
bWVudVR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1dyaXRpbmdEaXJlY3Rpb25NZW51LCAKKyAgICAg
ICAgICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdXcml0aW5nRGlyZWN0aW9uTWVudSgpKTsKKyAg
ICAgICAgICAgIGNyZWF0ZUFuZEFwcGVuZFdyaXRpbmdEaXJlY3Rpb25TdWJNZW51KFdyaXRpbmdE
aXJlY3Rpb25NZW51SXRlbSk7CisgICAgICAgICAgICBhcHBlbmRJdGVtKFdyaXRpbmdEaXJlY3Rp
b25NZW51SXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAgICAgICBpZiAoUGFnZSog
cGFnZSA9IGZyYW1lLT5wYWdlKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoU2V0dGluZ3MqIHNl
dHRpbmdzID0gcGFnZS0+c2V0dGluZ3MoKSkgeworICAgICAgICAgICAgICAgICAgICBib29sIGlu
Y2x1ZGVUZXh0RGlyZWN0aW9uU3VibWVudSA9IHNldHRpbmdzLT50ZXh0RGlyZWN0aW9uU3VibWVu
dUluY2x1c2lvbkJlaGF2aW9yKCkgPT0gVGV4dERpcmVjdGlvblN1Ym1lbnVBbHdheXNJbmNsdWRl
ZAorICAgICAgICAgICAgICAgICAgICAgICAgfHwgKHNldHRpbmdzLT50ZXh0RGlyZWN0aW9uU3Vi
bWVudUluY2x1c2lvbkJlaGF2aW9yKCkgPT0gVGV4dERpcmVjdGlvblN1Ym1lbnVBdXRvbWF0aWNh
bGx5SW5jbHVkZWQgJiYgZnJhbWUtPmVkaXRvcigpLT5oYXNCaWRpU2VsZWN0aW9uKCkpOworICAg
ICAgICAgICAgICAgICAgICBpZiAoaW5jbHVkZVRleHREaXJlY3Rpb25TdWJtZW51KSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBDb250ZXh0TWVudUl0ZW0gVGV4dERpcmVjdGlvbk1lbnVJdGVt
KFN1Ym1lbnVUeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdUZXh0RGlyZWN0aW9uTWVudSwgCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnVGV4dERpcmVjdGlvbk1l
bnUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVBbmRBcHBlbmRUZXh0RGlyZWN0
aW9uU3ViTWVudShUZXh0RGlyZWN0aW9uTWVudUl0ZW0pOworICAgICAgICAgICAgICAgICAgICAg
ICAgYXBwZW5kSXRlbShUZXh0RGlyZWN0aW9uTWVudUl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkp
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorI2VuZGlmCisgICAgICAgIH0KKyAgICB9Cit9CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQor
dm9pZCBDb250ZXh0TWVudUNvbnRyb2xsZXI6OmFkZEluc3BlY3RFbGVtZW50SXRlbSgpCit7Cisg
ICAgTm9kZSogbm9kZSA9IG1faGl0VGVzdFJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKTsKKyAg
ICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybjsKKworICAgIEZyYW1lKiBmcmFtZSA9IG5vZGUt
PmRvY3VtZW50KCktPmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgUGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCk7CisgICAgaWYgKCFwYWdlKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoIXBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgQ29udGV4dE1lbnVJdGVtIEluc3BlY3RFbGVtZW50SXRlbShBY3Rp
b25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdJbnNwZWN0RWxlbWVudCwgY29udGV4dE1lbnVJdGVt
VGFnSW5zcGVjdEVsZW1lbnQoKSk7CisgICAgYXBwZW5kSXRlbSgqc2VwYXJhdG9ySXRlbSgpLCBt
X2NvbnRleHRNZW51LmdldCgpKTsKKyAgICBhcHBlbmRJdGVtKEluc3BlY3RFbGVtZW50SXRlbSwg
bV9jb250ZXh0TWVudS5nZXQoKSk7Cit9CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKwor
dm9pZCBDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNoZWNrT3JFbmFibGVJZk5lZWRlZChDb250ZXh0
TWVudUl0ZW0mIGl0ZW0pIGNvbnN0Cit7CisgICAgaWYgKGl0ZW0udHlwZSgpID09IFNlcGFyYXRv
clR5cGUpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBGcmFtZSogZnJhbWUgPSBtX2hpdFRl
c3RSZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCktPmRvY3VtZW50KCktPmZyYW1lKCk7CisgICAg
aWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gQ3VzdG9tIGl0ZW1zIGFscmVh
ZHkgaGF2ZSBwcm9wZXIgY2hlY2tlZCBhbmQgZW5hYmxlZCB2YWx1ZXMuCisgICAgaWYgKENvbnRl
eHRNZW51SXRlbUJhc2VDdXN0b21UYWcgPD0gaXRlbS5hY3Rpb24oKSAmJiBpdGVtLmFjdGlvbigp
IDw9IENvbnRleHRNZW51SXRlbUxhc3RDdXN0b21UYWcpCisgICAgICAgIHJldHVybjsKKworICAg
IGJvb2wgc2hvdWxkRW5hYmxlID0gdHJ1ZTsKKyAgICBib29sIHNob3VsZENoZWNrID0gZmFsc2U7
IAorCisgICAgc3dpdGNoIChpdGVtLmFjdGlvbigpKSB7CisgICAgICAgIGNhc2UgQ29udGV4dE1l
bnVJdGVtVGFnQ2hlY2tTcGVsbGluZzoKKyAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGZyYW1l
LT5lZGl0b3IoKS0+Y2FuRWRpdCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtVGFnRGVmYXVsdERpcmVjdGlvbjoKKyAgICAgICAgICAgIHNob3VsZENo
ZWNrID0gZmFsc2U7CisgICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmYWxzZTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0xlZnRUb1JpZ2h0Ogor
ICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1JpZ2h0VG9MZWZ0OiB7CisgICAgICAgICAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAgICAgIFJlZlB0cjxDU1NTdHlsZURlY2xh
cmF0aW9uPiBzdHlsZSA9IGZyYW1lLT5kb2N1bWVudCgpLT5jcmVhdGVDU1NTdHlsZURlY2xhcmF0
aW9uKCk7CisgICAgICAgICAgICBTdHJpbmcgZGlyZWN0aW9uID0gaXRlbS5hY3Rpb24oKSA9PSBD
b250ZXh0TWVudUl0ZW1UYWdMZWZ0VG9SaWdodCA/ICJsdHIiIDogInJ0bCI7CisgICAgICAgICAg
ICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlEaXJlY3Rpb24sIGRpcmVjdGlvbiwgZmFs
c2UsIGVjKTsKKyAgICAgICAgICAgIHNob3VsZENoZWNrID0gZnJhbWUtPmVkaXRvcigpLT5zZWxl
Y3Rpb25IYXNTdHlsZShzdHlsZS5nZXQoKSkgIT0gRmFsc2VUcmlTdGF0ZTsKKyAgICAgICAgICAg
IHNob3VsZEVuYWJsZSA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1RleHREaXJlY3Rpb25EZWZhdWx0OiB7CisgICAg
ICAgICAgICBFZGl0b3I6OkNvbW1hbmQgY29tbWFuZCA9IGZyYW1lLT5lZGl0b3IoKS0+Y29tbWFu
ZCgiTWFrZVRleHRXcml0aW5nRGlyZWN0aW9uTmF0dXJhbCIpOworICAgICAgICAgICAgc2hvdWxk
Q2hlY2sgPSBjb21tYW5kLnN0YXRlKCkgPT0gVHJ1ZVRyaVN0YXRlOworICAgICAgICAgICAgc2hv
dWxkRW5hYmxlID0gY29tbWFuZC5pc0VuYWJsZWQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnVGV4dERpcmVjdGlvbkxlZnRU
b1JpZ2h0OiB7CisgICAgICAgICAgICBFZGl0b3I6OkNvbW1hbmQgY29tbWFuZCA9IGZyYW1lLT5l
ZGl0b3IoKS0+Y29tbWFuZCgiTWFrZVRleHRXcml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQiKTsK
KyAgICAgICAgICAgIHNob3VsZENoZWNrID0gY29tbWFuZC5zdGF0ZSgpID09IFRydWVUcmlTdGF0
ZTsKKyAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGNvbW1hbmQuaXNFbmFibGVkKCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRh
Z1RleHREaXJlY3Rpb25SaWdodFRvTGVmdDogeworICAgICAgICAgICAgRWRpdG9yOjpDb21tYW5k
IGNvbW1hbmQgPSBmcmFtZS0+ZWRpdG9yKCktPmNvbW1hbmQoIk1ha2VUZXh0V3JpdGluZ0RpcmVj
dGlvblJpZ2h0VG9MZWZ0Iik7CisgICAgICAgICAgICBzaG91bGRDaGVjayA9IGNvbW1hbmQuc3Rh
dGUoKSA9PSBUcnVlVHJpU3RhdGU7CisgICAgICAgICAgICBzaG91bGRFbmFibGUgPSBjb21tYW5k
LmlzRW5hYmxlZCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBDb250ZXh0TWVudUl0ZW1UYWdDb3B5OgorICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gZnJh
bWUtPmVkaXRvcigpLT5jYW5ESFRNTENvcHkoKSB8fCBmcmFtZS0+ZWRpdG9yKCktPmNhbkNvcHko
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0N1
dDoKKyAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGZyYW1lLT5lZGl0b3IoKS0+Y2FuREhUTUxD
dXQoKSB8fCBmcmFtZS0+ZWRpdG9yKCktPmNhbkN1dCgpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnSWdub3JlU3BlbGxpbmc6CisgICAgICAgIGNh
c2UgQ29udGV4dE1lbnVJdGVtVGFnTGVhcm5TcGVsbGluZzoKKyAgICAgICAgICAgIHNob3VsZEVu
YWJsZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS0+aXNSYW5nZSgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnUGFzdGU6CisgICAgICAgICAgICBzaG91
bGRFbmFibGUgPSBmcmFtZS0+ZWRpdG9yKCktPmNhbkRIVE1MUGFzdGUoKSB8fCBmcmFtZS0+ZWRp
dG9yKCktPmNhblBhc3RlKCk7CisgICAgICAgICAgICBicmVhazsKKyNpZiBQTEFURk9STShHVEsp
CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnRGVsZXRlOgorICAgICAgICAgICAgc2hv
dWxkRW5hYmxlID0gZnJhbWUtPmVkaXRvcigpLT5jYW5EZWxldGUoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1NlbGVjdEFsbDoKKyAgICAgICAg
Y2FzZSBDb250ZXh0TWVudUl0ZW1UYWdJbnB1dE1ldGhvZHM6CisgICAgICAgIGNhc2UgQ29udGV4
dE1lbnVJdGVtVGFnVW5pY29kZToKKyAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IHRydWU7Cisg
ICAgICAgICAgICBicmVhazsKKyNlbmRpZgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRh
Z1VuZGVybGluZTogeworICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgICAg
ICAgICBSZWZQdHI8Q1NTU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUgPSBmcmFtZS0+ZG9jdW1lbnQo
KS0+Y3JlYXRlQ1NTU3R5bGVEZWNsYXJhdGlvbigpOworICAgICAgICAgICAgc3R5bGUtPnNldFBy
b3BlcnR5KENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25zSW5FZmZlY3QsICJ1bmRlcmxp
bmUiLCBmYWxzZSwgZWMpOworICAgICAgICAgICAgc2hvdWxkQ2hlY2sgPSBmcmFtZS0+ZWRpdG9y
KCktPnNlbGVjdGlvbkhhc1N0eWxlKHN0eWxlLmdldCgpKSAhPSBGYWxzZVRyaVN0YXRlOworICAg
ICAgICAgICAgc2hvdWxkRW5hYmxlID0gZnJhbWUtPmVkaXRvcigpLT5jYW5FZGl0UmljaGx5KCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENvbnRleHRNZW51
SXRlbVRhZ0xvb2tVcEluRGljdGlvbmFyeToKKyAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGZy
YW1lLT5zZWxlY3Rpb24oKS0+aXNSYW5nZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQ2hlY2tHcmFtbWFyV2l0aFNwZWxsaW5nOgorI2lmbmRl
ZiBCVUlMRElOR19PTl9USUdFUgorICAgICAgICAgICAgaWYgKGZyYW1lLT5lZGl0b3IoKS0+aXNH
cmFtbWFyQ2hlY2tpbmdFbmFibGVkKCkpCisgICAgICAgICAgICAgICAgc2hvdWxkQ2hlY2sgPSB0
cnVlOworICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gdHJ1ZTsKKyNlbmRpZgorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnSXRhbGljOiB7CisgICAg
ICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAgICAgIFJlZlB0cjxDU1NTdHls
ZURlY2xhcmF0aW9uPiBzdHlsZSA9IGZyYW1lLT5kb2N1bWVudCgpLT5jcmVhdGVDU1NTdHlsZURl
Y2xhcmF0aW9uKCk7CisgICAgICAgICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlG
b250U3R5bGUsICJpdGFsaWMiLCBmYWxzZSwgZWMpOworICAgICAgICAgICAgc2hvdWxkQ2hlY2sg
PSBmcmFtZS0+ZWRpdG9yKCktPnNlbGVjdGlvbkhhc1N0eWxlKHN0eWxlLmdldCgpKSAhPSBGYWxz
ZVRyaVN0YXRlOworICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gZnJhbWUtPmVkaXRvcigpLT5j
YW5FZGl0UmljaGx5KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBj
YXNlIENvbnRleHRNZW51SXRlbVRhZ0JvbGQ6IHsKKyAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOworICAgICAgICAgICAgUmVmUHRyPENTU1N0eWxlRGVjbGFyYXRpb24+IHN0eWxlID0g
ZnJhbWUtPmRvY3VtZW50KCktPmNyZWF0ZUNTU1N0eWxlRGVjbGFyYXRpb24oKTsKKyAgICAgICAg
ICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRXZWlnaHQsICJib2xkIiwgZmFs
c2UsIGVjKTsKKyAgICAgICAgICAgIHNob3VsZENoZWNrID0gZnJhbWUtPmVkaXRvcigpLT5zZWxl
Y3Rpb25IYXNTdHlsZShzdHlsZS5nZXQoKSkgIT0gRmFsc2VUcmlTdGF0ZTsKKyAgICAgICAgICAg
IHNob3VsZEVuYWJsZSA9IGZyYW1lLT5lZGl0b3IoKS0+Y2FuRWRpdFJpY2hseSgpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdP
dXRsaW5lOgorICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gZmFsc2U7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTaG93U3BlbGxpbmdQYW5lbDoK
KyNpZm5kZWYgQlVJTERJTkdfT05fVElHRVIKKyAgICAgICAgICAgIGlmIChmcmFtZS0+ZWRpdG9y
KCktPnNwZWxsaW5nUGFuZWxJc1Nob3dpbmcoKSkKKyAgICAgICAgICAgICAgICBpdGVtLnNldFRp
dGxlKGNvbnRleHRNZW51SXRlbVRhZ1Nob3dTcGVsbGluZ1BhbmVsKGZhbHNlKSk7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgaXRlbS5zZXRUaXRsZShjb250ZXh0TWVudUl0ZW1U
YWdTaG93U3BlbGxpbmdQYW5lbCh0cnVlKSk7CisjZW5kaWYKKyAgICAgICAgICAgIHNob3VsZEVu
YWJsZSA9IGZyYW1lLT5lZGl0b3IoKS0+Y2FuRWRpdCgpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnTm9HdWVzc2VzRm91bmQ6CisgICAgICAgICAg
ICBzaG91bGRFbmFibGUgPSBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IENvbnRleHRNZW51SXRlbVRhZ0NoZWNrU3BlbGxpbmdXaGlsZVR5cGluZzoKKyAgICAgICAgICAg
IHNob3VsZENoZWNrID0gZnJhbWUtPmVkaXRvcigpLT5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5n
RW5hYmxlZCgpOworICAgICAgICAgICAgYnJlYWs7CisjaWYgUExBVEZPUk0oTUFDKQorICAgICAg
ICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1N1YnN0aXR1dGlvbnNNZW51OgorICAgICAgICBjYXNl
IENvbnRleHRNZW51SXRlbVRhZ1RyYW5zZm9ybWF0aW9uc01lbnU6CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTaG93U3Vic3RpdHV0aW9uczoKKyNp
ZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVP
UEFSRCkKKyAgICAgICAgICAgIGlmIChmcmFtZS0+ZWRpdG9yKCktPnN1YnN0aXR1dGlvbnNQYW5l
bElzU2hvd2luZygpKQorICAgICAgICAgICAgICAgIGl0ZW0uc2V0VGl0bGUoY29udGV4dE1lbnVJ
dGVtVGFnU2hvd1N1YnN0aXR1dGlvbnMoZmFsc2UpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBpdGVtLnNldFRpdGxlKGNvbnRleHRNZW51SXRlbVRhZ1Nob3dTdWJzdGl0dXRp
b25zKHRydWUpKTsKKyAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGZyYW1lLT5lZGl0b3IoKS0+
Y2FuRWRpdCgpOworI2VuZGlmCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb250
ZXh0TWVudUl0ZW1UYWdNYWtlVXBwZXJDYXNlOgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRl
bVRhZ01ha2VMb3dlckNhc2U6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQ2FwaXRh
bGl6ZToKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdDaGFuZ2VCYWNrOgorICAgICAg
ICAgICAgc2hvdWxkRW5hYmxlID0gZnJhbWUtPmVkaXRvcigpLT5jYW5FZGl0KCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdDb3JyZWN0U3BlbGxp
bmdBdXRvbWF0aWNhbGx5OgorI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVm
aW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQorICAgICAgICAgICAgc2hvdWxkQ2hlY2sgPSBmcmFt
ZS0+ZWRpdG9yKCktPmlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZCgpOworI2Vu
ZGlmCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdT
bWFydENvcHlQYXN0ZToKKyNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmlu
ZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKKyAgICAgICAgICAgIHNob3VsZENoZWNrID0gZnJhbWUt
PmVkaXRvcigpLT5zbWFydEluc2VydERlbGV0ZUVuYWJsZWQoKTsKKyNlbmRpZgorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU21hcnRRdW90ZXM6Cisj
aWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xF
T1BBUkQpCisgICAgICAgICAgICBzaG91bGRDaGVjayA9IGZyYW1lLT5lZGl0b3IoKS0+aXNBdXRv
bWF0aWNRdW90ZVN1YnN0aXR1dGlvbkVuYWJsZWQoKTsKKyNlbmRpZgorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU21hcnREYXNoZXM6CisjaWYgIWRl
ZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQp
CisgICAgICAgICAgICBzaG91bGRDaGVjayA9IGZyYW1lLT5lZGl0b3IoKS0+aXNBdXRvbWF0aWNE
YXNoU3Vic3RpdHV0aW9uRW5hYmxlZCgpOworI2VuZGlmCisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTbWFydExpbmtzOgorI2lmICFkZWZpbmVkKEJV
SUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQorICAgICAg
ICAgICAgc2hvdWxkQ2hlY2sgPSBmcmFtZS0+ZWRpdG9yKCktPmlzQXV0b21hdGljTGlua0RldGVj
dGlvbkVuYWJsZWQoKTsKKyNlbmRpZgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtVGFnVGV4dFJlcGxhY2VtZW50OgorI2lmICFkZWZpbmVkKEJVSUxESU5H
X09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQorICAgICAgICAgICAg
c2hvdWxkQ2hlY2sgPSBmcmFtZS0+ZWRpdG9yKCktPmlzQXV0b21hdGljVGV4dFJlcGxhY2VtZW50
RW5hYmxlZCgpOworI2VuZGlmCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb250
ZXh0TWVudUl0ZW1UYWdTdG9wU3BlYWtpbmc6CisgICAgICAgICAgICBzaG91bGRFbmFibGUgPSBj
b250cm9sbGVyKCkgJiYgY29udHJvbGxlcigpLT5jbGllbnQoKSAmJiBjb250cm9sbGVyKCktPmNs
aWVudCgpLT5pc1NwZWFraW5nKCk7CisgICAgICAgICAgICBicmVhazsKKyNlbHNlIC8vIFBMQVRG
T1JNKE1BQykgZW5kcyBoZXJlCisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU3RvcFNw
ZWFraW5nOgorICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKyNpZiBQTEFURk9STShHVEspCisg
ICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnR29CYWNrOgorICAgICAgICAgICAgc2hvdWxk
RW5hYmxlID0gZnJhbWUtPnBhZ2UoKSAmJiBmcmFtZS0+cGFnZSgpLT5iYWNrRm9yd2FyZCgpLT5j
YW5Hb0JhY2tPckZvcndhcmQoLTEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtVGFnR29Gb3J3YXJkOgorICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0g
ZnJhbWUtPnBhZ2UoKSAmJiBmcmFtZS0+cGFnZSgpLT5iYWNrRm9yd2FyZCgpLT5jYW5Hb0JhY2tP
ckZvcndhcmQoMSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb250ZXh0TWVu
dUl0ZW1UYWdTdG9wOgorICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gZnJhbWUtPmxvYWRlcigp
LT5kb2N1bWVudExvYWRlcigpLT5pc0xvYWRpbmdJbkFQSVNlbnNlKCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdSZWxvYWQ6CisgICAgICAgICAg
ICBzaG91bGRFbmFibGUgPSAhZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5pc0xv
YWRpbmdJbkFQSVNlbnNlKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb250
ZXh0TWVudUl0ZW1UYWdGb250TWVudToKKyAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGZyYW1l
LT5lZGl0b3IoKS0+Y2FuRWRpdFJpY2hseSgpOworICAgICAgICAgICAgYnJlYWs7CisjZWxzZQor
ICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0dvQmFjazoKKyAgICAgICAgY2FzZSBDb250
ZXh0TWVudUl0ZW1UYWdHb0ZvcndhcmQ6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFn
U3RvcDoKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdSZWxvYWQ6CisgICAgICAgIGNh
c2UgQ29udGV4dE1lbnVJdGVtVGFnRm9udE1lbnU6CisjZW5kaWYKKyAgICAgICAgY2FzZSBDb250
ZXh0TWVudUl0ZW1UYWdOb0FjdGlvbjoKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdP
cGVuTGlua0luTmV3V2luZG93OgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0Rvd25s
b2FkTGlua1RvRGlzazoKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdDb3B5TGlua1Rv
Q2xpcGJvYXJkOgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5JbWFnZUluTmV3
V2luZG93OgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0Rvd25sb2FkSW1hZ2VUb0Rp
c2s6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQ29weUltYWdlVG9DbGlwYm9hcmQ6
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdPcGVu
TWVkaWFJbk5ld1dpbmRvdzoKKyAgICAgICAgICAgIGlmIChtX2hpdFRlc3RSZXN1bHQubWVkaWFJ
c1ZpZGVvKCkpCisgICAgICAgICAgICAgICAgaXRlbS5zZXRUaXRsZShjb250ZXh0TWVudUl0ZW1U
YWdPcGVuVmlkZW9Jbk5ld1dpbmRvdygpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBpdGVtLnNldFRpdGxlKGNvbnRleHRNZW51SXRlbVRhZ09wZW5BdWRpb0luTmV3V2luZG93
KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFn
Q29weU1lZGlhTGlua1RvQ2xpcGJvYXJkOgorICAgICAgICAgICAgaWYgKG1faGl0VGVzdFJlc3Vs
dC5tZWRpYUlzVmlkZW8oKSkKKyAgICAgICAgICAgICAgICBpdGVtLnNldFRpdGxlKGNvbnRleHRN
ZW51SXRlbVRhZ0NvcHlWaWRlb0xpbmtUb0NsaXBib2FyZCgpKTsKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICBpdGVtLnNldFRpdGxlKGNvbnRleHRNZW51SXRlbVRhZ0NvcHlBdWRp
b0xpbmtUb0NsaXBib2FyZCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENv
bnRleHRNZW51SXRlbVRhZ1RvZ2dsZU1lZGlhQ29udHJvbHM6CisgICAgICAgICAgICBzaG91bGRD
aGVjayA9IG1faGl0VGVzdFJlc3VsdC5tZWRpYUNvbnRyb2xzRW5hYmxlZCgpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnVG9nZ2xlTWVkaWFMb29w
OgorICAgICAgICAgICAgc2hvdWxkQ2hlY2sgPSBtX2hpdFRlc3RSZXN1bHQubWVkaWFMb29wRW5h
YmxlZCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVt
VGFnRW50ZXJWaWRlb0Z1bGxzY3JlZW46CisgICAgICAgICAgICBzaG91bGRFbmFibGUgPSBtX2hp
dFRlc3RSZXN1bHQubWVkaWFTdXBwb3J0c0Z1bGxzY3JlZW4oKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5GcmFtZUluTmV3V2luZG93Ogor
ICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1NwZWxsaW5nR3Vlc3M6CisgICAgICAgIGNh
c2UgQ29udGV4dE1lbnVJdGVtVGFnT3RoZXI6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVt
VGFnU2VhcmNoSW5TcG90bGlnaHQ6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU2Vh
cmNoV2ViOgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5XaXRoRGVmYXVsdEFw
cGxpY2F0aW9uOgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVBERkFjdHVhbFNpemU6Cisg
ICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtUERGWm9vbUluOgorICAgICAgICBjYXNlIENvbnRl
eHRNZW51SXRlbVBERlpvb21PdXQ6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtUERGQXV0
b1NpemU6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtUERGU2luZ2xlUGFnZToKKyAgICAg
ICAgY2FzZSBDb250ZXh0TWVudUl0ZW1QREZGYWNpbmdQYWdlczoKKyAgICAgICAgY2FzZSBDb250
ZXh0TWVudUl0ZW1QREZDb250aW51b3VzOgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVBE
Rk5leHRQYWdlOgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVBERlByZXZpb3VzUGFnZToK
KyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdPcGVuTGluazoKKyAgICAgICAgY2FzZSBD
b250ZXh0TWVudUl0ZW1UYWdJZ25vcmVHcmFtbWFyOgorICAgICAgICBjYXNlIENvbnRleHRNZW51
SXRlbVRhZ1NwZWxsaW5nTWVudToKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTaG93
Rm9udHM6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU3R5bGVzOgorICAgICAgICBj
YXNlIENvbnRleHRNZW51SXRlbVRhZ1Nob3dDb2xvcnM6CisgICAgICAgIGNhc2UgQ29udGV4dE1l
bnVJdGVtVGFnU3BlZWNoTWVudToKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTdGFy
dFNwZWFraW5nOgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1dyaXRpbmdEaXJlY3Rp
b25NZW51OgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1RleHREaXJlY3Rpb25NZW51
OgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1BERlNpbmdsZVBhZ2VTY3JvbGxpbmc6
CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnUERGRmFjaW5nUGFnZXNTY3JvbGxpbmc6
CisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdJ
bnNwZWN0RWxlbWVudDoKKyNlbmRpZgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbUJhc2VD
dXN0b21UYWc6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtQ3VzdG9tVGFnTm9BY3Rpb246
CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtTGFzdEN1c3RvbVRhZzoKKyAgICAgICAgY2Fz
ZSBDb250ZXh0TWVudUl0ZW1CYXNlQXBwbGljYXRpb25UYWc6CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdNZWRpYVBsYXlQYXVzZToKKyAgICAgICAg
ICAgIGlmIChtX2hpdFRlc3RSZXN1bHQubWVkaWFQbGF5aW5nKCkpCisgICAgICAgICAgICAgICAg
aXRlbS5zZXRUaXRsZShjb250ZXh0TWVudUl0ZW1UYWdNZWRpYVBhdXNlKCkpOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIGl0ZW0uc2V0VGl0bGUoY29udGV4dE1lbnVJdGVtVGFn
TWVkaWFQbGF5KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29udGV4dE1l
bnVJdGVtVGFnTWVkaWFNdXRlOgorICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gbV9oaXRUZXN0
UmVzdWx0Lm1lZGlhSGFzQXVkaW8oKTsKKyAgICAgICAgICAgIHNob3VsZENoZWNrID0gc2hvdWxk
RW5hYmxlICYmICBtX2hpdFRlc3RSZXN1bHQubWVkaWFNdXRlZCgpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgaXRlbS5zZXRDaGVja2VkKHNob3VsZENoZWNrKTsKKyAgICBpdGVt
LnNldEVuYWJsZWQoc2hvdWxkRW5hYmxlKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CiAjZW5kaWYgLy8gRU5BQkxFKENPTlRFWFRfTUVOVVMpCkluZGV4OiBXZWJDb3JlL3BhZ2UvQ29u
dGV4dE1lbnVDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0NvbnRleHRN
ZW51Q29udHJvbGxlci5oCShyZXZpc2lvbiA3MzE2OSkKKysrIFdlYkNvcmUvcGFnZS9Db250ZXh0
TWVudUNvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRl
ZiBDb250ZXh0TWVudUNvbnRyb2xsZXJfaAogI2RlZmluZSBDb250ZXh0TWVudUNvbnRyb2xsZXJf
aAogCisjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJs
ZS5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgpAQCAtNTUsMTQgKzU2LDMzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2b2lk
IGNvbnRleHRNZW51SXRlbVNlbGVjdGVkKENvbnRleHRNZW51SXRlbSopOwogCisgICAgICAgIHZv
aWQgY2hlY2tPckVuYWJsZUlmTmVlZGVkKENvbnRleHRNZW51SXRlbSYpIGNvbnN0OworCisgICAg
ICAgIGNvbnN0IEhpdFRlc3RSZXN1bHQmIGhpdFRlc3RSZXN1bHQoKSB7IHJldHVybiBtX2hpdFRl
c3RSZXN1bHQ7IH0KKwogICAgIHByaXZhdGU6CiAgICAgICAgIENvbnRleHRNZW51KiBjcmVhdGVD
b250ZXh0TWVudShFdmVudCopOwogICAgICAgICB2b2lkIHNob3dDb250ZXh0TWVudShFdmVudCop
OworICAgICAgICAKKyAgICAgICAgdm9pZCBwb3B1bGF0ZSgpOworICAgICAgICB2b2lkIGFwcGVu
ZEl0ZW0oQ29udGV4dE1lbnVJdGVtJiwgQ29udGV4dE1lbnUqIHBhcmVudE1lbnUpOworCisgICAg
ICAgIHZvaWQgYWRkSW5zcGVjdEVsZW1lbnRJdGVtKCk7CisKKyAgICAgICAgdm9pZCBjcmVhdGVB
bmRBcHBlbmRGb250U3ViTWVudShDb250ZXh0TWVudUl0ZW0mIGZvbnRNZW51SXRlbSk7CisgICAg
ICAgIHZvaWQgY3JlYXRlQW5kQXBwZW5kU3BlbGxpbmdBbmRHcmFtbWFyU3ViTWVudShDb250ZXh0
TWVudUl0ZW0mIHNwZWxsaW5nQW5kR3JhbW1hck1lbnVJdGVtKTsKKyAgICAgICAgdm9pZCBjcmVh
dGVBbmRBcHBlbmRTcGVsbGluZ1N1Yk1lbnUoQ29udGV4dE1lbnVJdGVtJiBzcGVsbGluZ01lbnVJ
dGVtKTsKKyAgICAgICAgdm9pZCBjcmVhdGVBbmRBcHBlbmRTcGVlY2hTdWJNZW51KENvbnRleHRN
ZW51SXRlbSYgc3BlZWNoTWVudUl0ZW0pOworICAgICAgICB2b2lkIGNyZWF0ZUFuZEFwcGVuZFdy
aXRpbmdEaXJlY3Rpb25TdWJNZW51KENvbnRleHRNZW51SXRlbSYgd3JpdGluZ0RpcmVjdGlvbk1l
bnVJdGVtKTsKKyAgICAgICAgdm9pZCBjcmVhdGVBbmRBcHBlbmRUZXh0RGlyZWN0aW9uU3ViTWVu
dShDb250ZXh0TWVudUl0ZW0mIHRleHREaXJlY3Rpb25NZW51SXRlbSk7CisgICAgICAgIHZvaWQg
Y3JlYXRlQW5kQXBwZW5kU3Vic3RpdHV0aW9uc1N1Yk1lbnUoQ29udGV4dE1lbnVJdGVtJiBzdWJz
dGl0dXRpb25zTWVudUl0ZW0pOworICAgICAgICB2b2lkIGNyZWF0ZUFuZEFwcGVuZFRyYW5zZm9y
bWF0aW9uc1N1Yk1lbnUoQ29udGV4dE1lbnVJdGVtJiB0cmFuc2Zvcm1hdGlvbnNNZW51SXRlbSk7
CiAKICAgICAgICAgUGFnZSogbV9wYWdlOwogICAgICAgICBDb250ZXh0TWVudUNsaWVudCogbV9j
bGllbnQ7CiAgICAgICAgIE93blB0cjxDb250ZXh0TWVudT4gbV9jb250ZXh0TWVudTsKICAgICAg
ICAgUmVmUHRyPENvbnRleHRNZW51UHJvdmlkZXI+IG1fbWVudVByb3ZpZGVyOworICAgICAgICBI
aXRUZXN0UmVzdWx0IG1faGl0VGVzdFJlc3VsdDsKICAgICB9OwogCiB9CkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL0NvbnRleHRNZW51LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L0NvbnRleHRNZW51LmNwcAkocmV2aXNpb24gNzMxNjkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL0Nv
bnRleHRNZW51LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw4OTAgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDggQ2hyaXN0aWFuIER5d2FuIDxjaHJpc3RpYW5AaW1lbmRpby5j
b20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTAotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiQ29udGV4dE1lbnUuaCIKLQotI2lmIEVOQUJMRShDT05URVhU
X01FTlVTKQotCi0jaW5jbHVkZSAiQmFja0ZvcndhcmRDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAi
Q29udGV4dE1lbnVDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiQ29udGV4dE1lbnVDbGllbnQuaCIK
LSNpbmNsdWRlICJDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaCIKLSNpbmNsdWRlICJDU1NQ
cm9wZXJ0eS5oIgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKLSNpbmNsdWRlICJEb2N1
bWVudC5oIgotI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCi0jaW5jbHVkZSAiRWRpdG9yLmgi
Ci0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgotI2luY2x1ZGUg
Ikluc3BlY3RvckNvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJLVVJMLmgiCi0jaW5jbHVkZSAiTG9j
YWxpemVkU3RyaW5ncy5oIgotI2luY2x1ZGUgIk5vZGUuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0j
aW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCi0jaW5jbHVkZSAiU2VsZWN0aW9uQ29udHJvbGxl
ci5oIgotI2luY2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCi0j
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi11c2luZyBuYW1lc3BhY2Ugc3RkOwotdXNp
bmcgbmFtZXNwYWNlIFdURjsKLXVzaW5nIG5hbWVzcGFjZSBVbmljb2RlOwotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLUNvbnRleHRNZW51Q29udHJvbGxlciogQ29udGV4dE1lbnU6OmNvbnRyb2xs
ZXIoKSBjb25zdAotewotICAgIGlmIChOb2RlKiBub2RlID0gbV9oaXRUZXN0UmVzdWx0LmlubmVy
Tm9uU2hhcmVkTm9kZSgpKQotICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gbm9kZS0+ZG9jdW1l
bnQoKS0+ZnJhbWUoKSkKLSAgICAgICAgICAgIGlmIChQYWdlKiBwYWdlID0gZnJhbWUtPnBhZ2Uo
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gcGFnZS0+Y29udGV4dE1lbnVDb250cm9sbGVyKCk7
Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBQYXNzT3duUHRyPENvbnRleHRNZW51SXRlbT4g
c2VwYXJhdG9ySXRlbSgpCi17Ci0gICAgcmV0dXJuIG5ldyBDb250ZXh0TWVudUl0ZW0oU2VwYXJh
dG9yVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnTm9BY3Rpb24sIFN0cmluZygpKTsKLX0KLQotc3Rh
dGljIHZvaWQgY3JlYXRlQW5kQXBwZW5kRm9udFN1Yk1lbnUoY29uc3QgSGl0VGVzdFJlc3VsdCYg
cmVzdWx0LCBDb250ZXh0TWVudUl0ZW0mIGZvbnRNZW51SXRlbSkKLXsKLSAgICBDb250ZXh0TWVu
dSBmb250TWVudShyZXN1bHQpOwotCi0jaWYgUExBVEZPUk0oTUFDKQotICAgIENvbnRleHRNZW51
SXRlbSBzaG93Rm9udHMoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU2hvd0ZvbnRzLCBj
b250ZXh0TWVudUl0ZW1UYWdTaG93Rm9udHMoKSk7Ci0jZW5kaWYKLSAgICBDb250ZXh0TWVudUl0
ZW0gYm9sZChDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdCb2xkLCBjb250
ZXh0TWVudUl0ZW1UYWdCb2xkKCkpOwotICAgIENvbnRleHRNZW51SXRlbSBpdGFsaWMoQ2hlY2th
YmxlQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnSXRhbGljLCBjb250ZXh0TWVudUl0ZW1U
YWdJdGFsaWMoKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIHVuZGVybGluZShDaGVja2FibGVBY3Rp
b25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdVbmRlcmxpbmUsIGNvbnRleHRNZW51SXRlbVRhZ1Vu
ZGVybGluZSgpKTsKLSAgICBDb250ZXh0TWVudUl0ZW0gb3V0bGluZShBY3Rpb25UeXBlLCBDb250
ZXh0TWVudUl0ZW1UYWdPdXRsaW5lLCBjb250ZXh0TWVudUl0ZW1UYWdPdXRsaW5lKCkpOwotI2lm
IFBMQVRGT1JNKE1BQykKLSAgICBDb250ZXh0TWVudUl0ZW0gc3R5bGVzKEFjdGlvblR5cGUsIENv
bnRleHRNZW51SXRlbVRhZ1N0eWxlcywgY29udGV4dE1lbnVJdGVtVGFnU3R5bGVzKCkpOwotICAg
IENvbnRleHRNZW51SXRlbSBzaG93Q29sb3JzKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRh
Z1Nob3dDb2xvcnMsIGNvbnRleHRNZW51SXRlbVRhZ1Nob3dDb2xvcnMoKSk7Ci0jZW5kaWYKLQot
I2lmIFBMQVRGT1JNKE1BQykKLSAgICBmb250TWVudS5hcHBlbmRJdGVtKHNob3dGb250cyk7Ci0j
ZW5kaWYKLSAgICBmb250TWVudS5hcHBlbmRJdGVtKGJvbGQpOwotICAgIGZvbnRNZW51LmFwcGVu
ZEl0ZW0oaXRhbGljKTsKLSAgICBmb250TWVudS5hcHBlbmRJdGVtKHVuZGVybGluZSk7Ci0gICAg
Zm9udE1lbnUuYXBwZW5kSXRlbShvdXRsaW5lKTsKLSNpZiBQTEFURk9STShNQUMpCi0gICAgZm9u
dE1lbnUuYXBwZW5kSXRlbShzdHlsZXMpOwotICAgIGZvbnRNZW51LmFwcGVuZEl0ZW0oKnNlcGFy
YXRvckl0ZW0oKSk7Ci0gICAgZm9udE1lbnUuYXBwZW5kSXRlbShzaG93Q29sb3JzKTsKLSNlbmRp
ZgotCi0gICAgZm9udE1lbnVJdGVtLnNldFN1Yk1lbnUoJmZvbnRNZW51KTsKLX0KLQotI2lmICFk
ZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKQotCi0jaWYgIVBMQVRGT1JNKEdUSykKLQotc3RhdGlj
IHZvaWQgY3JlYXRlQW5kQXBwZW5kU3BlbGxpbmdBbmRHcmFtbWFyU3ViTWVudShjb25zdCBIaXRU
ZXN0UmVzdWx0JiByZXN1bHQsIENvbnRleHRNZW51SXRlbSYgc3BlbGxpbmdBbmRHcmFtbWFyTWVu
dUl0ZW0pCi17Ci0gICAgQ29udGV4dE1lbnUgc3BlbGxpbmdBbmRHcmFtbWFyTWVudShyZXN1bHQp
OwotCi0gICAgQ29udGV4dE1lbnVJdGVtIHNob3dTcGVsbGluZ1BhbmVsKEFjdGlvblR5cGUsIENv
bnRleHRNZW51SXRlbVRhZ1Nob3dTcGVsbGluZ1BhbmVsLCAKLSAgICAgICAgY29udGV4dE1lbnVJ
dGVtVGFnU2hvd1NwZWxsaW5nUGFuZWwodHJ1ZSkpOwotICAgIENvbnRleHRNZW51SXRlbSBjaGVj
a1NwZWxsaW5nKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0NoZWNrU3BlbGxpbmcsIAot
ICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdDaGVja1NwZWxsaW5nKCkpOwotICAgIENvbnRleHRN
ZW51SXRlbSBjaGVja0FzWW91VHlwZShDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0
ZW1UYWdDaGVja1NwZWxsaW5nV2hpbGVUeXBpbmcsIAotICAgICAgICBjb250ZXh0TWVudUl0ZW1U
YWdDaGVja1NwZWxsaW5nV2hpbGVUeXBpbmcoKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIGdyYW1t
YXJXaXRoU3BlbGxpbmcoQ2hlY2thYmxlQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnQ2hl
Y2tHcmFtbWFyV2l0aFNwZWxsaW5nLCAKLSAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnQ2hlY2tH
cmFtbWFyV2l0aFNwZWxsaW5nKCkpOwotI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJ
TERJTkdfT05fTEVPUEFSRCkKLSAgICBDb250ZXh0TWVudUl0ZW0gY29ycmVjdFNwZWxsaW5nKENo
ZWNrYWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0NvcnJlY3RTcGVsbGluZ0F1dG9t
YXRpY2FsbHksIAotICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdDb3JyZWN0U3BlbGxpbmdBdXRv
bWF0aWNhbGx5KCkpOwotI2VuZGlmCi0KLSAgICBzcGVsbGluZ0FuZEdyYW1tYXJNZW51LmFwcGVu
ZEl0ZW0oc2hvd1NwZWxsaW5nUGFuZWwpOwotICAgIHNwZWxsaW5nQW5kR3JhbW1hck1lbnUuYXBw
ZW5kSXRlbShjaGVja1NwZWxsaW5nKTsKLSNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJV
SUxESU5HX09OX0xFT1BBUkQpCi0gICAgc3BlbGxpbmdBbmRHcmFtbWFyTWVudS5hcHBlbmRJdGVt
KCpzZXBhcmF0b3JJdGVtKCkpOwotI2VuZGlmCi0gICAgc3BlbGxpbmdBbmRHcmFtbWFyTWVudS5h
cHBlbmRJdGVtKGNoZWNrQXNZb3VUeXBlKTsKLSAgICBzcGVsbGluZ0FuZEdyYW1tYXJNZW51LmFw
cGVuZEl0ZW0oZ3JhbW1hcldpdGhTcGVsbGluZyk7Ci0jaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVm
aW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQotICAgIHNwZWxsaW5nQW5kR3JhbW1hck1lbnUuYXBw
ZW5kSXRlbShjb3JyZWN0U3BlbGxpbmcpOwotI2VuZGlmCi0KLSAgICBzcGVsbGluZ0FuZEdyYW1t
YXJNZW51SXRlbS5zZXRTdWJNZW51KCZzcGVsbGluZ0FuZEdyYW1tYXJNZW51KTsKLX0KLQotI2Vu
ZGlmIC8vICFQTEFURk9STShHVEspCi0KLSNlbHNlCi0KLXN0YXRpYyB2b2lkIGNyZWF0ZUFuZEFw
cGVuZFNwZWxsaW5nU3ViTWVudShjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIENvbnRleHRN
ZW51SXRlbSYgc3BlbGxpbmdNZW51SXRlbSkKLXsKLSAgICBDb250ZXh0TWVudSBzcGVsbGluZ01l
bnUocmVzdWx0KTsKLQotICAgIENvbnRleHRNZW51SXRlbSBzaG93U3BlbGxpbmdQYW5lbChBY3Rp
b25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTaG93U3BlbGxpbmdQYW5lbCwgCi0gICAgICAgIGNv
bnRleHRNZW51SXRlbVRhZ1Nob3dTcGVsbGluZ1BhbmVsKHRydWUpKTsKLSAgICBDb250ZXh0TWVu
dUl0ZW0gY2hlY2tTcGVsbGluZyhBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdDaGVja1Nw
ZWxsaW5nLCAKLSAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnQ2hlY2tTcGVsbGluZygpKTsKLSAg
ICBDb250ZXh0TWVudUl0ZW0gY2hlY2tBc1lvdVR5cGUoQ2hlY2thYmxlQWN0aW9uVHlwZSwgQ29u
dGV4dE1lbnVJdGVtVGFnQ2hlY2tTcGVsbGluZ1doaWxlVHlwaW5nLCAKLSAgICAgICAgY29udGV4
dE1lbnVJdGVtVGFnQ2hlY2tTcGVsbGluZ1doaWxlVHlwaW5nKCkpOwotCi0gICAgc3BlbGxpbmdN
ZW51LmFwcGVuZEl0ZW0oc2hvd1NwZWxsaW5nUGFuZWwpOwotICAgIHNwZWxsaW5nTWVudS5hcHBl
bmRJdGVtKGNoZWNrU3BlbGxpbmcpOwotICAgIHNwZWxsaW5nTWVudS5hcHBlbmRJdGVtKGNoZWNr
QXNZb3VUeXBlKTsKLQotICAgIHNwZWxsaW5nTWVudUl0ZW0uc2V0U3ViTWVudSgmc3BlbGxpbmdN
ZW51KTsKLX0KLQotI2VuZGlmCi0KLSNpZiBQTEFURk9STShNQUMpCi0KLXN0YXRpYyB2b2lkIGNy
ZWF0ZUFuZEFwcGVuZFNwZWVjaFN1Yk1lbnUoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBD
b250ZXh0TWVudUl0ZW0mIHNwZWVjaE1lbnVJdGVtKQotewotICAgIENvbnRleHRNZW51IHNwZWVj
aE1lbnUocmVzdWx0KTsKLQotICAgIENvbnRleHRNZW51SXRlbSBzdGFydChBY3Rpb25UeXBlLCBD
b250ZXh0TWVudUl0ZW1UYWdTdGFydFNwZWFraW5nLCBjb250ZXh0TWVudUl0ZW1UYWdTdGFydFNw
ZWFraW5nKCkpOwotICAgIENvbnRleHRNZW51SXRlbSBzdG9wKEFjdGlvblR5cGUsIENvbnRleHRN
ZW51SXRlbVRhZ1N0b3BTcGVha2luZywgY29udGV4dE1lbnVJdGVtVGFnU3RvcFNwZWFraW5nKCkp
OwotCi0gICAgc3BlZWNoTWVudS5hcHBlbmRJdGVtKHN0YXJ0KTsKLSAgICBzcGVlY2hNZW51LmFw
cGVuZEl0ZW0oc3RvcCk7Ci0KLSAgICBzcGVlY2hNZW51SXRlbS5zZXRTdWJNZW51KCZzcGVlY2hN
ZW51KTsKLX0KLQotI2VuZGlmCi0gCi0jaWYgIVBMQVRGT1JNKEdUSykKLQotc3RhdGljIHZvaWQg
Y3JlYXRlQW5kQXBwZW5kV3JpdGluZ0RpcmVjdGlvblN1Yk1lbnUoY29uc3QgSGl0VGVzdFJlc3Vs
dCYgcmVzdWx0LCBDb250ZXh0TWVudUl0ZW0mIHdyaXRpbmdEaXJlY3Rpb25NZW51SXRlbSkKLXsK
LSAgICBDb250ZXh0TWVudSB3cml0aW5nRGlyZWN0aW9uTWVudShyZXN1bHQpOwotCi0gICAgQ29u
dGV4dE1lbnVJdGVtIGRlZmF1bHRJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0Rl
ZmF1bHREaXJlY3Rpb24sIAotICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdEZWZhdWx0RGlyZWN0
aW9uKCkpOwotICAgIENvbnRleHRNZW51SXRlbSBsdHIoQ2hlY2thYmxlQWN0aW9uVHlwZSwgQ29u
dGV4dE1lbnVJdGVtVGFnTGVmdFRvUmlnaHQsIGNvbnRleHRNZW51SXRlbVRhZ0xlZnRUb1JpZ2h0
KCkpOwotICAgIENvbnRleHRNZW51SXRlbSBydGwoQ2hlY2thYmxlQWN0aW9uVHlwZSwgQ29udGV4
dE1lbnVJdGVtVGFnUmlnaHRUb0xlZnQsIGNvbnRleHRNZW51SXRlbVRhZ1JpZ2h0VG9MZWZ0KCkp
OwotCi0gICAgd3JpdGluZ0RpcmVjdGlvbk1lbnUuYXBwZW5kSXRlbShkZWZhdWx0SXRlbSk7Ci0g
ICAgd3JpdGluZ0RpcmVjdGlvbk1lbnUuYXBwZW5kSXRlbShsdHIpOwotICAgIHdyaXRpbmdEaXJl
Y3Rpb25NZW51LmFwcGVuZEl0ZW0ocnRsKTsKLQotICAgIHdyaXRpbmdEaXJlY3Rpb25NZW51SXRl
bS5zZXRTdWJNZW51KCZ3cml0aW5nRGlyZWN0aW9uTWVudSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNy
ZWF0ZUFuZEFwcGVuZFRleHREaXJlY3Rpb25TdWJNZW51KGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJl
c3VsdCwgQ29udGV4dE1lbnVJdGVtJiB0ZXh0RGlyZWN0aW9uTWVudUl0ZW0pCi17Ci0gICAgQ29u
dGV4dE1lbnUgdGV4dERpcmVjdGlvbk1lbnUocmVzdWx0KTsKLQotICAgIENvbnRleHRNZW51SXRl
bSBkZWZhdWx0SXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdUZXh0RGlyZWN0aW9u
RGVmYXVsdCwgY29udGV4dE1lbnVJdGVtVGFnRGVmYXVsdERpcmVjdGlvbigpKTsKLSAgICBDb250
ZXh0TWVudUl0ZW0gbHRyKENoZWNrYWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1Rl
eHREaXJlY3Rpb25MZWZ0VG9SaWdodCwgY29udGV4dE1lbnVJdGVtVGFnTGVmdFRvUmlnaHQoKSk7
Ci0gICAgQ29udGV4dE1lbnVJdGVtIHJ0bChDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVu
dUl0ZW1UYWdUZXh0RGlyZWN0aW9uUmlnaHRUb0xlZnQsIGNvbnRleHRNZW51SXRlbVRhZ1JpZ2h0
VG9MZWZ0KCkpOwotCi0gICAgdGV4dERpcmVjdGlvbk1lbnUuYXBwZW5kSXRlbShkZWZhdWx0SXRl
bSk7Ci0gICAgdGV4dERpcmVjdGlvbk1lbnUuYXBwZW5kSXRlbShsdHIpOwotICAgIHRleHREaXJl
Y3Rpb25NZW51LmFwcGVuZEl0ZW0ocnRsKTsKLQotICAgIHRleHREaXJlY3Rpb25NZW51SXRlbS5z
ZXRTdWJNZW51KCZ0ZXh0RGlyZWN0aW9uTWVudSk7Ci19Ci0KLSNlbmRpZgotCi0jaWYgUExBVEZP
Uk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJ
TkdfT05fTEVPUEFSRCkKLQotc3RhdGljIHZvaWQgY3JlYXRlQW5kQXBwZW5kU3Vic3RpdHV0aW9u
c1N1Yk1lbnUoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBDb250ZXh0TWVudUl0ZW0mIHN1
YnN0aXR1dGlvbnNNZW51SXRlbSkKLXsKLSAgICBDb250ZXh0TWVudSBzdWJzdGl0dXRpb25zTWVu
dShyZXN1bHQpOwotCi0gICAgQ29udGV4dE1lbnVJdGVtIHNob3dTdWJzdGl0dXRpb25zKEFjdGlv
blR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1Nob3dTdWJzdGl0dXRpb25zLCBjb250ZXh0TWVudUl0
ZW1UYWdTaG93U3Vic3RpdHV0aW9ucyh0cnVlKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIHNtYXJ0
Q29weVBhc3RlKENoZWNrYWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1NtYXJ0Q29w
eVBhc3RlLCBjb250ZXh0TWVudUl0ZW1UYWdTbWFydENvcHlQYXN0ZSgpKTsKLSAgICBDb250ZXh0
TWVudUl0ZW0gc21hcnRRdW90ZXMoQ2hlY2thYmxlQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVt
VGFnU21hcnRRdW90ZXMsIGNvbnRleHRNZW51SXRlbVRhZ1NtYXJ0UXVvdGVzKCkpOwotICAgIENv
bnRleHRNZW51SXRlbSBzbWFydERhc2hlcyhDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVu
dUl0ZW1UYWdTbWFydERhc2hlcywgY29udGV4dE1lbnVJdGVtVGFnU21hcnREYXNoZXMoKSk7Ci0g
ICAgQ29udGV4dE1lbnVJdGVtIHNtYXJ0TGlua3MoQ2hlY2thYmxlQWN0aW9uVHlwZSwgQ29udGV4
dE1lbnVJdGVtVGFnU21hcnRMaW5rcywgY29udGV4dE1lbnVJdGVtVGFnU21hcnRMaW5rcygpKTsK
LSAgICBDb250ZXh0TWVudUl0ZW0gdGV4dFJlcGxhY2VtZW50KENoZWNrYWJsZUFjdGlvblR5cGUs
IENvbnRleHRNZW51SXRlbVRhZ1RleHRSZXBsYWNlbWVudCwgY29udGV4dE1lbnVJdGVtVGFnVGV4
dFJlcGxhY2VtZW50KCkpOwotCi0gICAgc3Vic3RpdHV0aW9uc01lbnUuYXBwZW5kSXRlbShzaG93
U3Vic3RpdHV0aW9ucyk7Ci0gICAgc3Vic3RpdHV0aW9uc01lbnUuYXBwZW5kSXRlbSgqc2VwYXJh
dG9ySXRlbSgpKTsKLSAgICBzdWJzdGl0dXRpb25zTWVudS5hcHBlbmRJdGVtKHNtYXJ0Q29weVBh
c3RlKTsKLSAgICBzdWJzdGl0dXRpb25zTWVudS5hcHBlbmRJdGVtKHNtYXJ0UXVvdGVzKTsKLSAg
ICBzdWJzdGl0dXRpb25zTWVudS5hcHBlbmRJdGVtKHNtYXJ0RGFzaGVzKTsKLSAgICBzdWJzdGl0
dXRpb25zTWVudS5hcHBlbmRJdGVtKHNtYXJ0TGlua3MpOwotICAgIHN1YnN0aXR1dGlvbnNNZW51
LmFwcGVuZEl0ZW0odGV4dFJlcGxhY2VtZW50KTsKLQotICAgIHN1YnN0aXR1dGlvbnNNZW51SXRl
bS5zZXRTdWJNZW51KCZzdWJzdGl0dXRpb25zTWVudSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNyZWF0
ZUFuZEFwcGVuZFRyYW5zZm9ybWF0aW9uc1N1Yk1lbnUoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVz
dWx0LCBDb250ZXh0TWVudUl0ZW0mIHRyYW5zZm9ybWF0aW9uc01lbnVJdGVtKQotewotICAgIENv
bnRleHRNZW51IHRyYW5zZm9ybWF0aW9uc01lbnUocmVzdWx0KTsKLQotICAgIENvbnRleHRNZW51
SXRlbSBtYWtlVXBwZXJDYXNlKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ01ha2VVcHBl
ckNhc2UsIGNvbnRleHRNZW51SXRlbVRhZ01ha2VVcHBlckNhc2UoKSk7Ci0gICAgQ29udGV4dE1l
bnVJdGVtIG1ha2VMb3dlckNhc2UoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnTWFrZUxv
d2VyQ2FzZSwgY29udGV4dE1lbnVJdGVtVGFnTWFrZUxvd2VyQ2FzZSgpKTsKLSAgICBDb250ZXh0
TWVudUl0ZW0gY2FwaXRhbGl6ZShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdDYXBpdGFs
aXplLCBjb250ZXh0TWVudUl0ZW1UYWdDYXBpdGFsaXplKCkpOwotCi0gICAgdHJhbnNmb3JtYXRp
b25zTWVudS5hcHBlbmRJdGVtKG1ha2VVcHBlckNhc2UpOwotICAgIHRyYW5zZm9ybWF0aW9uc01l
bnUuYXBwZW5kSXRlbShtYWtlTG93ZXJDYXNlKTsKLSAgICB0cmFuc2Zvcm1hdGlvbnNNZW51LmFw
cGVuZEl0ZW0oY2FwaXRhbGl6ZSk7Ci0KLSAgICB0cmFuc2Zvcm1hdGlvbnNNZW51SXRlbS5zZXRT
dWJNZW51KCZ0cmFuc2Zvcm1hdGlvbnNNZW51KTsKLX0KLQotI2VuZGlmCi0KLXN0YXRpYyBib29s
IHNlbGVjdGlvbkNvbnRhaW5zUG9zc2libGVXb3JkKEZyYW1lKiBmcmFtZSkKLXsKLSAgICAvLyBD
dXJyZW50IGFsZ29yaXRobTogbG9vayBmb3IgYSBjaGFyYWN0ZXIgdGhhdCdzIG5vdCBqdXN0IGEg
c2VwYXJhdG9yLgotICAgIGZvciAoVGV4dEl0ZXJhdG9yIGl0KGZyYW1lLT5zZWxlY3Rpb24oKS0+
dG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7ICFpdC5hdEVuZCgpOyBpdC5hZHZhbmNlKCkpIHsK
LSAgICAgICAgaW50IGxlbmd0aCA9IGl0Lmxlbmd0aCgpOwotICAgICAgICBjb25zdCBVQ2hhciog
Y2hhcmFjdGVycyA9IGl0LmNoYXJhY3RlcnMoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBsZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGlmICghKGNhdGVnb3J5KGNoYXJhY3RlcnNbaV0p
ICYgKFNlcGFyYXRvcl9TcGFjZSB8IFNlcGFyYXRvcl9MaW5lIHwgU2VwYXJhdG9yX1BhcmFncmFw
aCkpKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLXZvaWQgQ29udGV4dE1lbnU6OnBvcHVsYXRlKCkKLXsKLSAgICBDb250ZXh0TWVu
dUl0ZW0gT3BlbkxpbmtJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ09wZW5MaW5r
LCBjb250ZXh0TWVudUl0ZW1UYWdPcGVuTGluaygpKTsKLSAgICBDb250ZXh0TWVudUl0ZW0gT3Bl
bkxpbmtJbk5ld1dpbmRvd0l0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnT3Blbkxp
bmtJbk5ld1dpbmRvdywgCi0gICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ09wZW5MaW5rSW5OZXdX
aW5kb3coKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIERvd25sb2FkRmlsZUl0ZW0oQWN0aW9uVHlw
ZSwgQ29udGV4dE1lbnVJdGVtVGFnRG93bmxvYWRMaW5rVG9EaXNrLCAKLSAgICAgICAgY29udGV4
dE1lbnVJdGVtVGFnRG93bmxvYWRMaW5rVG9EaXNrKCkpOwotICAgIENvbnRleHRNZW51SXRlbSBD
b3B5TGlua0l0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnQ29weUxpbmtUb0NsaXBi
b2FyZCwgCi0gICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ0NvcHlMaW5rVG9DbGlwYm9hcmQoKSk7
Ci0gICAgQ29udGV4dE1lbnVJdGVtIE9wZW5JbWFnZUluTmV3V2luZG93SXRlbShBY3Rpb25UeXBl
LCBDb250ZXh0TWVudUl0ZW1UYWdPcGVuSW1hZ2VJbk5ld1dpbmRvdywgCi0gICAgICAgIGNvbnRl
eHRNZW51SXRlbVRhZ09wZW5JbWFnZUluTmV3V2luZG93KCkpOwotICAgIENvbnRleHRNZW51SXRl
bSBEb3dubG9hZEltYWdlSXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdEb3dubG9h
ZEltYWdlVG9EaXNrLCAKLSAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnRG93bmxvYWRJbWFnZVRv
RGlzaygpKTsKLSAgICBDb250ZXh0TWVudUl0ZW0gQ29weUltYWdlSXRlbShBY3Rpb25UeXBlLCBD
b250ZXh0TWVudUl0ZW1UYWdDb3B5SW1hZ2VUb0NsaXBib2FyZCwgCi0gICAgICAgIGNvbnRleHRN
ZW51SXRlbVRhZ0NvcHlJbWFnZVRvQ2xpcGJvYXJkKCkpOwotICAgIENvbnRleHRNZW51SXRlbSBP
cGVuTWVkaWFJbk5ld1dpbmRvd0l0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnT3Bl
bk1lZGlhSW5OZXdXaW5kb3csIFN0cmluZygpKTsKLSAgICBDb250ZXh0TWVudUl0ZW0gQ29weU1l
ZGlhTGlua0l0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnQ29weU1lZGlhTGlua1Rv
Q2xpcGJvYXJkLCAKLSAgICAgICAgU3RyaW5nKCkpOwotICAgIENvbnRleHRNZW51SXRlbSBNZWRp
YVBsYXlQYXVzZShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdNZWRpYVBsYXlQYXVzZSwg
Ci0gICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ01lZGlhUGxheSgpKTsKLSAgICBDb250ZXh0TWVu
dUl0ZW0gTWVkaWFNdXRlKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ01lZGlhTXV0ZSwg
Ci0gICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ01lZGlhTXV0ZSgpKTsKLSAgICBDb250ZXh0TWVu
dUl0ZW0gVG9nZ2xlTWVkaWFDb250cm9scyhDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVu
dUl0ZW1UYWdUb2dnbGVNZWRpYUNvbnRyb2xzLCAKLSAgICAgICAgY29udGV4dE1lbnVJdGVtVGFn
VG9nZ2xlTWVkaWFDb250cm9scygpKTsKLSAgICBDb250ZXh0TWVudUl0ZW0gVG9nZ2xlTWVkaWFM
b29wKENoZWNrYWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1RvZ2dsZU1lZGlhTG9v
cCwgCi0gICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ1RvZ2dsZU1lZGlhTG9vcCgpKTsKLSAgICBD
b250ZXh0TWVudUl0ZW0gRW50ZXJWaWRlb0Z1bGxzY3JlZW4oQWN0aW9uVHlwZSwgQ29udGV4dE1l
bnVJdGVtVGFnRW50ZXJWaWRlb0Z1bGxzY3JlZW4sIAotICAgICAgICBjb250ZXh0TWVudUl0ZW1U
YWdFbnRlclZpZGVvRnVsbHNjcmVlbigpKTsKLSNpZiBQTEFURk9STShNQUMpCi0gICAgQ29udGV4
dE1lbnVJdGVtIFNlYXJjaFNwb3RsaWdodEl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVt
VGFnU2VhcmNoSW5TcG90bGlnaHQsIAotICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdTZWFyY2hJ
blNwb3RsaWdodCgpKTsKLSAgICBDb250ZXh0TWVudUl0ZW0gTG9va0luRGljdGlvbmFyeUl0ZW0o
QWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnTG9va1VwSW5EaWN0aW9uYXJ5LCAKLSAgICAg
ICAgY29udGV4dE1lbnVJdGVtVGFnTG9va1VwSW5EaWN0aW9uYXJ5KCkpOwotI2VuZGlmCi0jaWYg
IVBMQVRGT1JNKEdUSykKLSAgICBDb250ZXh0TWVudUl0ZW0gU2VhcmNoV2ViSXRlbShBY3Rpb25U
eXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTZWFyY2hXZWIsIGNvbnRleHRNZW51SXRlbVRhZ1NlYXJj
aFdlYigpKTsKLSNlbmRpZgotICAgIENvbnRleHRNZW51SXRlbSBDb3B5SXRlbShBY3Rpb25UeXBl
LCBDb250ZXh0TWVudUl0ZW1UYWdDb3B5LCBjb250ZXh0TWVudUl0ZW1UYWdDb3B5KCkpOwotICAg
IENvbnRleHRNZW51SXRlbSBCYWNrSXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdH
b0JhY2ssIGNvbnRleHRNZW51SXRlbVRhZ0dvQmFjaygpKTsKLSAgICBDb250ZXh0TWVudUl0ZW0g
Rm9yd2FyZEl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnR29Gb3J3YXJkLCAgY29u
dGV4dE1lbnVJdGVtVGFnR29Gb3J3YXJkKCkpOwotICAgIENvbnRleHRNZW51SXRlbSBTdG9wSXRl
bShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTdG9wLCBjb250ZXh0TWVudUl0ZW1UYWdT
dG9wKCkpOwotICAgIENvbnRleHRNZW51SXRlbSBSZWxvYWRJdGVtKEFjdGlvblR5cGUsIENvbnRl
eHRNZW51SXRlbVRhZ1JlbG9hZCwgY29udGV4dE1lbnVJdGVtVGFnUmVsb2FkKCkpOwotICAgIENv
bnRleHRNZW51SXRlbSBPcGVuRnJhbWVJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRh
Z09wZW5GcmFtZUluTmV3V2luZG93LCAKLSAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnT3BlbkZy
YW1lSW5OZXdXaW5kb3coKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIE5vR3Vlc3Nlc0l0ZW0oQWN0
aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnTm9HdWVzc2VzRm91bmQsIAotICAgICAgICBjb250
ZXh0TWVudUl0ZW1UYWdOb0d1ZXNzZXNGb3VuZCgpKTsKLSAgICBDb250ZXh0TWVudUl0ZW0gSWdu
b3JlU3BlbGxpbmdJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0lnbm9yZVNwZWxs
aW5nLCAKLSAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnSWdub3JlU3BlbGxpbmcoKSk7Ci0gICAg
Q29udGV4dE1lbnVJdGVtIExlYXJuU3BlbGxpbmdJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51
SXRlbVRhZ0xlYXJuU3BlbGxpbmcsIAotICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdMZWFyblNw
ZWxsaW5nKCkpOwotICAgIENvbnRleHRNZW51SXRlbSBJZ25vcmVHcmFtbWFySXRlbShBY3Rpb25U
eXBlLCBDb250ZXh0TWVudUl0ZW1UYWdJZ25vcmVHcmFtbWFyLCAKLSAgICAgICAgY29udGV4dE1l
bnVJdGVtVGFnSWdub3JlR3JhbW1hcigpKTsKLSAgICBDb250ZXh0TWVudUl0ZW0gQ3V0SXRlbShB
Y3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdDdXQsIGNvbnRleHRNZW51SXRlbVRhZ0N1dCgp
KTsKLSAgICBDb250ZXh0TWVudUl0ZW0gUGFzdGVJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51
SXRlbVRhZ1Bhc3RlLCBjb250ZXh0TWVudUl0ZW1UYWdQYXN0ZSgpKTsKLSNpZiBQTEFURk9STShH
VEspCi0gICAgQ29udGV4dE1lbnVJdGVtIERlbGV0ZUl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1l
bnVJdGVtVGFnRGVsZXRlLCBjb250ZXh0TWVudUl0ZW1UYWdEZWxldGUoKSk7Ci0gICAgQ29udGV4
dE1lbnVJdGVtIFNlbGVjdEFsbEl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU2Vs
ZWN0QWxsLCBjb250ZXh0TWVudUl0ZW1UYWdTZWxlY3RBbGwoKSk7Ci0jZW5kaWYKLSAgICAKLSAg
ICBIaXRUZXN0UmVzdWx0IHJlc3VsdCA9IGhpdFRlc3RSZXN1bHQoKTsKLSAgICAKLSAgICBOb2Rl
KiBub2RlID0gbV9oaXRUZXN0UmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpOwotICAgIGlmICgh
bm9kZSkKLSAgICAgICAgcmV0dXJuOwotI2lmIFBMQVRGT1JNKEdUSykKLSAgICBpZiAoIXJlc3Vs
dC5pc0NvbnRlbnRFZGl0YWJsZSgpICYmIChub2RlLT5pc0VsZW1lbnROb2RlKCkgJiYgc3RhdGlj
X2Nhc3Q8RWxlbWVudCo+KG5vZGUpLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKSkKLSAgICAgICAg
cmV0dXJuOwotI2VuZGlmCi0gICAgRnJhbWUqIGZyYW1lID0gbm9kZS0+ZG9jdW1lbnQoKS0+ZnJh
bWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXJlc3Vs
dC5pc0NvbnRlbnRFZGl0YWJsZSgpKSB7Ci0gICAgICAgIEZyYW1lTG9hZGVyKiBsb2FkZXIgPSBm
cmFtZS0+bG9hZGVyKCk7Ci0gICAgICAgIEtVUkwgbGlua1VSTCA9IHJlc3VsdC5hYnNvbHV0ZUxp
bmtVUkwoKTsKLSAgICAgICAgaWYgKCFsaW5rVVJMLmlzRW1wdHkoKSkgewotICAgICAgICAgICAg
aWYgKGxvYWRlci0+Y2FuSGFuZGxlUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QobGlua1VSTCkpKSB7
Ci0gICAgICAgICAgICAgICAgYXBwZW5kSXRlbShPcGVuTGlua0l0ZW0pOwotICAgICAgICAgICAg
ICAgIGFwcGVuZEl0ZW0oT3BlbkxpbmtJbk5ld1dpbmRvd0l0ZW0pOwotICAgICAgICAgICAgICAg
IGFwcGVuZEl0ZW0oRG93bmxvYWRGaWxlSXRlbSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBhcHBlbmRJdGVtKENvcHlMaW5rSXRlbSk7Ci0gICAgICAgIH0KLQotICAgICAgICBLVVJMIGlt
YWdlVVJMID0gcmVzdWx0LmFic29sdXRlSW1hZ2VVUkwoKTsKLSAgICAgICAgaWYgKCFpbWFnZVVS
TC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGlmICghbGlua1VSTC5pc0VtcHR5KCkpCi0gICAg
ICAgICAgICAgICAgYXBwZW5kSXRlbSgqc2VwYXJhdG9ySXRlbSgpKTsKLQotICAgICAgICAgICAg
YXBwZW5kSXRlbShPcGVuSW1hZ2VJbk5ld1dpbmRvd0l0ZW0pOwotICAgICAgICAgICAgYXBwZW5k
SXRlbShEb3dubG9hZEltYWdlSXRlbSk7Ci0gICAgICAgICAgICBpZiAoaW1hZ2VVUkwuaXNMb2Nh
bEZpbGUoKSB8fCBtX2hpdFRlc3RSZXN1bHQuaW1hZ2UoKSkKLSAgICAgICAgICAgICAgICBhcHBl
bmRJdGVtKENvcHlJbWFnZUl0ZW0pOwotICAgICAgICB9Ci0KLSAgICAgICAgS1VSTCBtZWRpYVVS
TCA9IHJlc3VsdC5hYnNvbHV0ZU1lZGlhVVJMKCk7Ci0gICAgICAgIGlmICghbWVkaWFVUkwuaXNF
bXB0eSgpKSB7Ci0gICAgICAgICAgICBpZiAoIWxpbmtVUkwuaXNFbXB0eSgpIHx8ICFpbWFnZVVS
TC5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgYXBwZW5kSXRlbSgqc2VwYXJhdG9ySXRlbSgp
KTsKLQotICAgICAgICAgICAgYXBwZW5kSXRlbShNZWRpYVBsYXlQYXVzZSk7Ci0gICAgICAgICAg
ICBhcHBlbmRJdGVtKE1lZGlhTXV0ZSk7Ci0gICAgICAgICAgICBhcHBlbmRJdGVtKFRvZ2dsZU1l
ZGlhQ29udHJvbHMpOwotICAgICAgICAgICAgYXBwZW5kSXRlbShUb2dnbGVNZWRpYUxvb3ApOwot
ICAgICAgICAgICAgYXBwZW5kSXRlbShFbnRlclZpZGVvRnVsbHNjcmVlbik7Ci0KLSAgICAgICAg
ICAgIGFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSk7Ci0gICAgICAgICAgICBhcHBlbmRJdGVt
KENvcHlNZWRpYUxpbmtJdGVtKTsKLSAgICAgICAgICAgIGFwcGVuZEl0ZW0oT3Blbk1lZGlhSW5O
ZXdXaW5kb3dJdGVtKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChpbWFnZVVSTC5pc0VtcHR5
KCkgJiYgbGlua1VSTC5pc0VtcHR5KCkgJiYgbWVkaWFVUkwuaXNFbXB0eSgpKSB7Ci0gICAgICAg
ICAgICBpZiAocmVzdWx0LmlzU2VsZWN0ZWQoKSkgewotICAgICAgICAgICAgICAgIGlmIChzZWxl
Y3Rpb25Db250YWluc1Bvc3NpYmxlV29yZChmcmFtZSkpIHsKLSNpZiBQTEFURk9STShNQUMpCi0g
ICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oU2VhcmNoU3BvdGxpZ2h0SXRlbSk7Ci0jZW5k
aWYKLSNpZiAhUExBVEZPUk0oR1RLKQotICAgICAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKFNl
YXJjaFdlYkl0ZW0pOwotICAgICAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJ
dGVtKCkpOwotI2VuZGlmCi0jaWYgUExBVEZPUk0oTUFDKQotICAgICAgICAgICAgICAgICAgICBh
cHBlbmRJdGVtKExvb2tJbkRpY3Rpb25hcnlJdGVtKTsKLSAgICAgICAgICAgICAgICAgICAgYXBw
ZW5kSXRlbSgqc2VwYXJhdG9ySXRlbSgpKTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBhcHBlbmRJdGVtKENvcHlJdGVtKTsKLSNpZiBQTEFURk9STShNQUMpCi0g
ICAgICAgICAgICAgICAgYXBwZW5kSXRlbSgqc2VwYXJhdG9ySXRlbSgpKTsKLSAgICAgICAgICAg
ICAgICBDb250ZXh0TWVudUl0ZW0gU3BlZWNoTWVudUl0ZW0oU3VibWVudVR5cGUsIENvbnRleHRN
ZW51SXRlbVRhZ1NwZWVjaE1lbnUsIGNvbnRleHRNZW51SXRlbVRhZ1NwZWVjaE1lbnUoKSk7Ci0g
ICAgICAgICAgICAgICAgY3JlYXRlQW5kQXBwZW5kU3BlZWNoU3ViTWVudShtX2hpdFRlc3RSZXN1
bHQsIFNwZWVjaE1lbnVJdGVtKTsKLSAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKFNwZWVjaE1l
bnVJdGVtKTsKLSNlbmRpZiAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0j
aWYgRU5BQkxFKElOU1BFQ1RPUikKLSAgICAgICAgICAgICAgICBpZiAoIShmcmFtZS0+cGFnZSgp
ICYmIGZyYW1lLT5wYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+aGFzSW5zcGVjdG9yRnJv
bnRlbmRDbGllbnQoKSkpIHsKLSNlbmRpZgotICAgICAgICAgICAgICAgIGlmIChmcmFtZS0+cGFn
ZSgpICYmIGZyYW1lLT5wYWdlKCktPmJhY2tGb3J3YXJkKCktPmNhbkdvQmFja09yRm9yd2FyZCgt
MSkpCi0gICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oQmFja0l0ZW0pOwotCi0gICAgICAg
ICAgICAgICAgaWYgKGZyYW1lLT5wYWdlKCkgJiYgZnJhbWUtPnBhZ2UoKS0+YmFja0ZvcndhcmQo
KS0+Y2FuR29CYWNrT3JGb3J3YXJkKDEpKQotICAgICAgICAgICAgICAgICAgICBhcHBlbmRJdGVt
KEZvcndhcmRJdGVtKTsKLQotICAgICAgICAgICAgICAgIC8vIHVzZSBpc0xvYWRpbmdJbkFQSVNl
bnNlIHJhdGhlciB0aGFuIGlzTG9hZGluZyBiZWNhdXNlIFN0b3AvUmVsb2FkIGFyZQotICAgICAg
ICAgICAgICAgIC8vIGludGVuZGVkIHRvIG1hdGNoIFdlYktpdCdzIEFQSSwgbm90IFdlYkNvcmUn
cyBpbnRlcm5hbCBub3Rpb24gb2YgbG9hZGluZyBzdGF0dXMKLSAgICAgICAgICAgICAgICBpZiAo
bG9hZGVyLT5kb2N1bWVudExvYWRlcigpLT5pc0xvYWRpbmdJbkFQSVNlbnNlKCkpCi0gICAgICAg
ICAgICAgICAgICAgIGFwcGVuZEl0ZW0oU3RvcEl0ZW0pOwotICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgYXBwZW5kSXRlbShSZWxvYWRJdGVtKTsKLSNpZiBFTkFCTEUo
SU5TUEVDVE9SKQotICAgICAgICAgICAgICAgIH0KLSNlbmRpZgotCi0gICAgICAgICAgICAgICAg
aWYgKGZyYW1lLT5wYWdlKCkgJiYgZnJhbWUgIT0gZnJhbWUtPnBhZ2UoKS0+bWFpbkZyYW1lKCkp
Ci0gICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oT3BlbkZyYW1lSXRlbSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgeyAvLyBNYWtlIGFuIGVkaXRpbmcgY29udGV4
dCBtZW51Ci0gICAgICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIqIHNlbGVjdGlvbiA9IGZyYW1lLT5z
ZWxlY3Rpb24oKTsKLSAgICAgICAgYm9vbCBpblBhc3N3b3JkRmllbGQgPSBzZWxlY3Rpb24tPmlz
SW5QYXNzd29yZEZpZWxkKCk7Ci0gICAgICAgIGJvb2wgc3BlbGxDaGVja2luZ0VuYWJsZWQgPSBm
cmFtZS0+ZWRpdG9yKCktPmlzU3BlbGxDaGVja2luZ0VuYWJsZWRGb3Iobm9kZSk7Ci0gICAgICAg
IAotICAgICAgICBpZiAoIWluUGFzc3dvcmRGaWVsZCAmJiBzcGVsbENoZWNraW5nRW5hYmxlZCkg
ewotICAgICAgICAgICAgLy8gQ29uc2lkZXIgYWRkaW5nIHNwZWxsaW5nLXJlbGF0ZWQgb3IgZ3Jh
bW1hci1yZWxhdGVkIGNvbnRleHQgbWVudSBpdGVtcyAobmV2ZXIgYm90aCwgc2luY2UgYSBzaW5n
bGUgc2VsZWN0ZWQgcmFuZ2UKLSAgICAgICAgICAgIC8vIGlzIG5ldmVyIGNvbnNpZGVyZWQgYSBt
aXNzcGVsbGluZyBhbmQgYmFkIGdyYW1tYXIgYXQgdGhlIHNhbWUgdGltZSkKLSAgICAgICAgICAg
IGJvb2wgbWlzc3BlbGxpbmc7Ci0gICAgICAgICAgICBib29sIGJhZEdyYW1tYXI7Ci0gICAgICAg
ICAgICBWZWN0b3I8U3RyaW5nPiBndWVzc2VzID0gZnJhbWUtPmVkaXRvcigpLT5ndWVzc2VzRm9y
TWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbFNlbGVjdGlvbihtaXNzcGVsbGluZywgYmFkR3JhbW1h
cik7Ci0gICAgICAgICAgICBpZiAobWlzc3BlbGxpbmcgfHwgYmFkR3JhbW1hcikgewotICAgICAg
ICAgICAgICAgIHNpemVfdCBzaXplID0gZ3Vlc3Nlcy5zaXplKCk7Ci0gICAgICAgICAgICAgICAg
aWYgKHNpemUgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSdzIGJhZCBn
cmFtbWFyIGJ1dCBubyBzdWdnZXN0aW9ucyAoZS5nLiwgcmVwZWF0ZWQgd29yZCksIGp1c3QgbGVh
dmUgb2ZmIHRoZSBzdWdnZXN0aW9ucwotICAgICAgICAgICAgICAgICAgICAvLyBsaXN0IGFuZCB0
cmFpbGluZyBzZXBhcmF0b3IgcmF0aGVyIHRoYW4gYWRkaW5nIGEgIk5vIEd1ZXNzZXMgRm91bmQi
IGl0ZW0gKG1hdGNoZXMgQXBwS2l0KQotICAgICAgICAgICAgICAgICAgICBpZiAobWlzc3BlbGxp
bmcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oTm9HdWVzc2VzSXRlbSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCkpOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7IGkrKykgewotICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nICZndWVzcyA9IGd1ZXNzZXNbaV07Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIWd1ZXNzLmlzRW1wdHkoKSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIENvbnRleHRNZW51SXRlbSBpdGVtKEFjdGlvblR5cGUsIENvbnRleHRN
ZW51SXRlbVRhZ1NwZWxsaW5nR3Vlc3MsIGd1ZXNzKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhcHBlbmRJdGVtKGl0ZW0pOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oKnNlcGFyYXRv
ckl0ZW0oKSk7ICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKG1pc3NwZWxsaW5nKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGFwcGVuZEl0ZW0oSWdub3JlU3BlbGxpbmdJdGVtKTsKLSAgICAgICAgICAgICAg
ICAgICAgYXBwZW5kSXRlbShMZWFyblNwZWxsaW5nSXRlbSk7Ci0gICAgICAgICAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oSWdub3JlR3JhbW1hckl0ZW0pOwot
ICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSk7Ci0jaWYgUExBVEZP
Uk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJ
TkdfT05fTEVPUEFSRCkKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8g
SWYgdGhlIHN0cmluZyB3YXMgYXV0b2NvcnJlY3RlZCwgZ2VuZXJhdGUgYSBjb250ZXh0dWFsIG1l
bnUgaXRlbSBhbGxvd2luZyBpdCB0byBiZSBjaGFuZ2VkIGJhY2suCi0gICAgICAgICAgICAgICAg
U3RyaW5nIHJlcGxhY2VkU3RyaW5nID0gcmVzdWx0LnJlcGxhY2VkU3RyaW5nKCk7Ci0gICAgICAg
ICAgICAgICAgaWYgKCFyZXBsYWNlZFN0cmluZy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgQ29udGV4dE1lbnVJdGVtIGl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFn
Q2hhbmdlQmFjaywgY29udGV4dE1lbnVJdGVtVGFnQ2hhbmdlQmFjayhyZXBsYWNlZFN0cmluZykp
OwotICAgICAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKGl0ZW0pOwotICAgICAgICAgICAgICAg
ICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCkpOwotICAgICAgICAgICAgICAgIH0KLSNl
bmRpZgotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgRnJhbWVMb2FkZXIqIGxv
YWRlciA9IGZyYW1lLT5sb2FkZXIoKTsKLSAgICAgICAgS1VSTCBsaW5rVVJMID0gcmVzdWx0LmFi
c29sdXRlTGlua1VSTCgpOwotICAgICAgICBpZiAoIWxpbmtVUkwuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgICAgICBpZiAobG9hZGVyLT5jYW5IYW5kbGVSZXF1ZXN0KFJlc291cmNlUmVxdWVzdChsaW5r
VVJMKSkpIHsKLSAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKE9wZW5MaW5rSXRlbSk7Ci0gICAg
ICAgICAgICAgICAgYXBwZW5kSXRlbShPcGVuTGlua0luTmV3V2luZG93SXRlbSk7Ci0gICAgICAg
ICAgICAgICAgYXBwZW5kSXRlbShEb3dubG9hZEZpbGVJdGVtKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGFwcGVuZEl0ZW0oQ29weUxpbmtJdGVtKTsKLSAgICAgICAgICAgIGFwcGVuZEl0
ZW0oKnNlcGFyYXRvckl0ZW0oKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocmVzdWx0Lmlz
U2VsZWN0ZWQoKSAmJiAhaW5QYXNzd29yZEZpZWxkICYmIHNlbGVjdGlvbkNvbnRhaW5zUG9zc2li
bGVXb3JkKGZyYW1lKSkgewotI2lmIFBMQVRGT1JNKE1BQykKLSAgICAgICAgICAgIGFwcGVuZEl0
ZW0oU2VhcmNoU3BvdGxpZ2h0SXRlbSk7Ci0jZW5kaWYKLSNpZiAhUExBVEZPUk0oR1RLKQotICAg
ICAgICAgICAgYXBwZW5kSXRlbShTZWFyY2hXZWJJdGVtKTsKLSAgICAgICAgICAgIGFwcGVuZEl0
ZW0oKnNlcGFyYXRvckl0ZW0oKSk7Ci0jZW5kaWYKLSAgICAgCi0jaWYgUExBVEZPUk0oTUFDKQot
ICAgICAgICAgICAgYXBwZW5kSXRlbShMb29rSW5EaWN0aW9uYXJ5SXRlbSk7Ci0gICAgICAgICAg
ICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCkpOwotI2VuZGlmCi0gICAgICAgIH0KLQotICAg
ICAgICBhcHBlbmRJdGVtKEN1dEl0ZW0pOwotICAgICAgICBhcHBlbmRJdGVtKENvcHlJdGVtKTsK
LSAgICAgICAgYXBwZW5kSXRlbShQYXN0ZUl0ZW0pOwotI2lmIFBMQVRGT1JNKEdUSykKLSAgICAg
ICAgYXBwZW5kSXRlbShEZWxldGVJdGVtKTsKLSAgICAgICAgYXBwZW5kSXRlbSgqc2VwYXJhdG9y
SXRlbSgpKTsKLSAgICAgICAgYXBwZW5kSXRlbShTZWxlY3RBbGxJdGVtKTsKLSNlbmRpZgotCi0g
ICAgICAgIGlmICghaW5QYXNzd29yZEZpZWxkKSB7Ci0gICAgICAgICAgICBhcHBlbmRJdGVtKCpz
ZXBhcmF0b3JJdGVtKCkpOwotI2lmbmRlZiBCVUlMRElOR19PTl9USUdFUgotI2lmICFQTEFURk9S
TShHVEspCi0gICAgICAgICAgICBDb250ZXh0TWVudUl0ZW0gU3BlbGxpbmdBbmRHcmFtbWFyTWVu
dUl0ZW0oU3VibWVudVR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1NwZWxsaW5nTWVudSwgCi0gICAg
ICAgICAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnU3BlbGxpbmdNZW51KCkpOwotICAgICAgICAg
ICAgY3JlYXRlQW5kQXBwZW5kU3BlbGxpbmdBbmRHcmFtbWFyU3ViTWVudShtX2hpdFRlc3RSZXN1
bHQsIFNwZWxsaW5nQW5kR3JhbW1hck1lbnVJdGVtKTsKLSAgICAgICAgICAgIGFwcGVuZEl0ZW0o
U3BlbGxpbmdBbmRHcmFtbWFyTWVudUl0ZW0pOwotI2VuZGlmCi0jZWxzZQotICAgICAgICAgICAg
Q29udGV4dE1lbnVJdGVtIFNwZWxsaW5nTWVudUl0ZW0oU3VibWVudVR5cGUsIENvbnRleHRNZW51
SXRlbVRhZ1NwZWxsaW5nTWVudSwgCi0gICAgICAgICAgICAgICAgY29udGV4dE1lbnVJdGVtVGFn
U3BlbGxpbmdNZW51KCkpOwotICAgICAgICAgICAgY3JlYXRlQW5kQXBwZW5kU3BlbGxpbmdTdWJN
ZW51KG1faGl0VGVzdFJlc3VsdCwgU3BlbGxpbmdNZW51SXRlbSk7Ci0gICAgICAgICAgICBhcHBl
bmRJdGVtKFNwZWxsaW5nTWVudUl0ZW0pOwotI2VuZGlmCi0jaWYgUExBVEZPUk0oTUFDKSAmJiAh
ZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFS
RCkKLSAgICAgICAgICAgIENvbnRleHRNZW51SXRlbSBzdWJzdGl0dXRpb25zTWVudUl0ZW0oU3Vi
bWVudVR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1N1YnN0aXR1dGlvbnNNZW51LCAKLSAgICAgICAg
ICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdTdWJzdGl0dXRpb25zTWVudSgpKTsKLSAgICAgICAg
ICAgIGNyZWF0ZUFuZEFwcGVuZFN1YnN0aXR1dGlvbnNTdWJNZW51KG1faGl0VGVzdFJlc3VsdCwg
c3Vic3RpdHV0aW9uc01lbnVJdGVtKTsKLSAgICAgICAgICAgIGFwcGVuZEl0ZW0oc3Vic3RpdHV0
aW9uc01lbnVJdGVtKTsKLSAgICAgICAgICAgIENvbnRleHRNZW51SXRlbSB0cmFuc2Zvcm1hdGlv
bnNNZW51SXRlbShTdWJtZW51VHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnVHJhbnNmb3JtYXRpb25z
TWVudSwgCi0gICAgICAgICAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnVHJhbnNmb3JtYXRpb25z
TWVudSgpKTsKLSAgICAgICAgICAgIGNyZWF0ZUFuZEFwcGVuZFRyYW5zZm9ybWF0aW9uc1N1Yk1l
bnUobV9oaXRUZXN0UmVzdWx0LCB0cmFuc2Zvcm1hdGlvbnNNZW51SXRlbSk7Ci0gICAgICAgICAg
ICBhcHBlbmRJdGVtKHRyYW5zZm9ybWF0aW9uc01lbnVJdGVtKTsKLSNlbmRpZgotI2lmIFBMQVRG
T1JNKEdUSykKLSAgICAgICAgICAgIGJvb2wgc2hvdWxkU2hvd0ZvbnRNZW51ID0gZnJhbWUtPmVk
aXRvcigpLT5jYW5FZGl0UmljaGx5KCk7Ci0jZWxzZQotICAgICAgICAgICAgYm9vbCBzaG91bGRT
aG93Rm9udE1lbnUgPSB0cnVlOwotI2VuZGlmCi0gICAgICAgICAgICBpZiAoc2hvdWxkU2hvd0Zv
bnRNZW51KSB7Ci0gICAgICAgICAgICAgICAgQ29udGV4dE1lbnVJdGVtIEZvbnRNZW51SXRlbShT
dWJtZW51VHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnRm9udE1lbnUsIAotICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0TWVudUl0ZW1UYWdGb250TWVudSgpKTsKLSAgICAgICAgICAgICAgICBjcmVh
dGVBbmRBcHBlbmRGb250U3ViTWVudShtX2hpdFRlc3RSZXN1bHQsIEZvbnRNZW51SXRlbSk7Ci0g
ICAgICAgICAgICAgICAgYXBwZW5kSXRlbShGb250TWVudUl0ZW0pOwotICAgICAgICAgICAgfQot
I2lmIFBMQVRGT1JNKE1BQykKLSAgICAgICAgICAgIENvbnRleHRNZW51SXRlbSBTcGVlY2hNZW51
SXRlbShTdWJtZW51VHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU3BlZWNoTWVudSwgY29udGV4dE1l
bnVJdGVtVGFnU3BlZWNoTWVudSgpKTsKLSAgICAgICAgICAgIGNyZWF0ZUFuZEFwcGVuZFNwZWVj
aFN1Yk1lbnUobV9oaXRUZXN0UmVzdWx0LCBTcGVlY2hNZW51SXRlbSk7Ci0gICAgICAgICAgICBh
cHBlbmRJdGVtKFNwZWVjaE1lbnVJdGVtKTsKLSNlbmRpZgotI2lmICFQTEFURk9STShHVEspCi0g
ICAgICAgICAgICBDb250ZXh0TWVudUl0ZW0gV3JpdGluZ0RpcmVjdGlvbk1lbnVJdGVtKFN1Ym1l
bnVUeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdXcml0aW5nRGlyZWN0aW9uTWVudSwgCi0gICAgICAg
ICAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnV3JpdGluZ0RpcmVjdGlvbk1lbnUoKSk7Ci0gICAg
ICAgICAgICBjcmVhdGVBbmRBcHBlbmRXcml0aW5nRGlyZWN0aW9uU3ViTWVudShtX2hpdFRlc3RS
ZXN1bHQsIFdyaXRpbmdEaXJlY3Rpb25NZW51SXRlbSk7Ci0gICAgICAgICAgICBhcHBlbmRJdGVt
KFdyaXRpbmdEaXJlY3Rpb25NZW51SXRlbSk7Ci0gICAgICAgICAgICBpZiAoUGFnZSogcGFnZSA9
IGZyYW1lLT5wYWdlKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoU2V0dGluZ3MqIHNldHRpbmdz
ID0gcGFnZS0+c2V0dGluZ3MoKSkgewotICAgICAgICAgICAgICAgICAgICBib29sIGluY2x1ZGVU
ZXh0RGlyZWN0aW9uU3VibWVudSA9IHNldHRpbmdzLT50ZXh0RGlyZWN0aW9uU3VibWVudUluY2x1
c2lvbkJlaGF2aW9yKCkgPT0gVGV4dERpcmVjdGlvblN1Ym1lbnVBbHdheXNJbmNsdWRlZAotICAg
ICAgICAgICAgICAgICAgICAgICAgfHwgKHNldHRpbmdzLT50ZXh0RGlyZWN0aW9uU3VibWVudUlu
Y2x1c2lvbkJlaGF2aW9yKCkgPT0gVGV4dERpcmVjdGlvblN1Ym1lbnVBdXRvbWF0aWNhbGx5SW5j
bHVkZWQgJiYgZnJhbWUtPmVkaXRvcigpLT5oYXNCaWRpU2VsZWN0aW9uKCkpOwotICAgICAgICAg
ICAgICAgICAgICBpZiAoaW5jbHVkZVRleHREaXJlY3Rpb25TdWJtZW51KSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBDb250ZXh0TWVudUl0ZW0gVGV4dERpcmVjdGlvbk1lbnVJdGVtKFN1Ym1l
bnVUeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdUZXh0RGlyZWN0aW9uTWVudSwgCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnVGV4dERpcmVjdGlvbk1lbnUoKSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVBbmRBcHBlbmRUZXh0RGlyZWN0aW9uU3Vi
TWVudShtX2hpdFRlc3RSZXN1bHQsIFRleHREaXJlY3Rpb25NZW51SXRlbSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBhcHBlbmRJdGVtKFRleHREaXJlY3Rpb25NZW51SXRlbSk7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0jZW5kaWYK
LSAgICAgICAgfQotICAgIH0KLX0KLQotI2lmIEVOQUJMRShJTlNQRUNUT1IpCi12b2lkIENvbnRl
eHRNZW51OjphZGRJbnNwZWN0RWxlbWVudEl0ZW0oKQotewotICAgIE5vZGUqIG5vZGUgPSBtX2hp
dFRlc3RSZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCk7Ci0gICAgaWYgKCFub2RlKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBGcmFtZSogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgp
OwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIFBhZ2UqIHBhZ2UgPSBm
cmFtZS0+cGFnZSgpOwotICAgIGlmICghcGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KCFwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIENv
bnRleHRNZW51SXRlbSBJbnNwZWN0RWxlbWVudEl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJ
dGVtVGFnSW5zcGVjdEVsZW1lbnQsIGNvbnRleHRNZW51SXRlbVRhZ0luc3BlY3RFbGVtZW50KCkp
OwotICAgIGFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSk7Ci0gICAgYXBwZW5kSXRlbShJbnNw
ZWN0RWxlbWVudEl0ZW0pOwotfQotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCi0KLXZvaWQg
Q29udGV4dE1lbnU6OmNoZWNrT3JFbmFibGVJZk5lZWRlZChDb250ZXh0TWVudUl0ZW0mIGl0ZW0p
IGNvbnN0Ci17Ci0gICAgaWYgKGl0ZW0udHlwZSgpID09IFNlcGFyYXRvclR5cGUpCi0gICAgICAg
IHJldHVybjsKLSAgICAKLSAgICBGcmFtZSogZnJhbWUgPSBtX2hpdFRlc3RSZXN1bHQuaW5uZXJO
b25TaGFyZWROb2RlKCktPmRvY3VtZW50KCktPmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgLy8gQ3VzdG9tIGl0ZW1zIGFscmVhZHkgaGF2ZSBwcm9wZXIg
Y2hlY2tlZCBhbmQgZW5hYmxlZCB2YWx1ZXMuCi0gICAgaWYgKENvbnRleHRNZW51SXRlbUJhc2VD
dXN0b21UYWcgPD0gaXRlbS5hY3Rpb24oKSAmJiBpdGVtLmFjdGlvbigpIDw9IENvbnRleHRNZW51
SXRlbUxhc3RDdXN0b21UYWcpCi0gICAgICAgIHJldHVybjsKLQotICAgIGJvb2wgc2hvdWxkRW5h
YmxlID0gdHJ1ZTsKLSAgICBib29sIHNob3VsZENoZWNrID0gZmFsc2U7IAotCi0gICAgc3dpdGNo
IChpdGVtLmFjdGlvbigpKSB7Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQ2hlY2tT
cGVsbGluZzoKLSAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGZyYW1lLT5lZGl0b3IoKS0+Y2Fu
RWRpdCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVt
VGFnRGVmYXVsdERpcmVjdGlvbjoKLSAgICAgICAgICAgIHNob3VsZENoZWNrID0gZmFsc2U7Ci0g
ICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0xlZnRUb1JpZ2h0OgotICAgICAgICBjYXNlIENv
bnRleHRNZW51SXRlbVRhZ1JpZ2h0VG9MZWZ0OiB7Ci0gICAgICAgICAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKLSAgICAgICAgICAgIFJlZlB0cjxDU1NTdHlsZURlY2xhcmF0aW9uPiBzdHlsZSA9
IGZyYW1lLT5kb2N1bWVudCgpLT5jcmVhdGVDU1NTdHlsZURlY2xhcmF0aW9uKCk7Ci0gICAgICAg
ICAgICBTdHJpbmcgZGlyZWN0aW9uID0gaXRlbS5hY3Rpb24oKSA9PSBDb250ZXh0TWVudUl0ZW1U
YWdMZWZ0VG9SaWdodCA/ICJsdHIiIDogInJ0bCI7Ci0gICAgICAgICAgICBzdHlsZS0+c2V0UHJv
cGVydHkoQ1NTUHJvcGVydHlEaXJlY3Rpb24sIGRpcmVjdGlvbiwgZmFsc2UsIGVjKTsKLSAgICAg
ICAgICAgIHNob3VsZENoZWNrID0gZnJhbWUtPmVkaXRvcigpLT5zZWxlY3Rpb25IYXNTdHlsZShz
dHlsZS5nZXQoKSkgIT0gRmFsc2VUcmlTdGF0ZTsKLSAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9
IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIENvbnRl
eHRNZW51SXRlbVRhZ1RleHREaXJlY3Rpb25EZWZhdWx0OiB7Ci0gICAgICAgICAgICBFZGl0b3I6
OkNvbW1hbmQgY29tbWFuZCA9IGZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZCgiTWFrZVRleHRXcml0
aW5nRGlyZWN0aW9uTmF0dXJhbCIpOwotICAgICAgICAgICAgc2hvdWxkQ2hlY2sgPSBjb21tYW5k
LnN0YXRlKCkgPT0gVHJ1ZVRyaVN0YXRlOwotICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gY29t
bWFuZC5pc0VuYWJsZWQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnVGV4dERpcmVjdGlvbkxlZnRUb1JpZ2h0OiB7Ci0gICAg
ICAgICAgICBFZGl0b3I6OkNvbW1hbmQgY29tbWFuZCA9IGZyYW1lLT5lZGl0b3IoKS0+Y29tbWFu
ZCgiTWFrZVRleHRXcml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQiKTsKLSAgICAgICAgICAgIHNo
b3VsZENoZWNrID0gY29tbWFuZC5zdGF0ZSgpID09IFRydWVUcmlTdGF0ZTsKLSAgICAgICAgICAg
IHNob3VsZEVuYWJsZSA9IGNvbW1hbmQuaXNFbmFibGVkKCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1RleHREaXJlY3Rpb25S
aWdodFRvTGVmdDogewotICAgICAgICAgICAgRWRpdG9yOjpDb21tYW5kIGNvbW1hbmQgPSBmcmFt
ZS0+ZWRpdG9yKCktPmNvbW1hbmQoIk1ha2VUZXh0V3JpdGluZ0RpcmVjdGlvblJpZ2h0VG9MZWZ0
Iik7Ci0gICAgICAgICAgICBzaG91bGRDaGVjayA9IGNvbW1hbmQuc3RhdGUoKSA9PSBUcnVlVHJp
U3RhdGU7Ci0gICAgICAgICAgICBzaG91bGRFbmFibGUgPSBjb21tYW5kLmlzRW5hYmxlZCgpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0
ZW1UYWdDb3B5OgotICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gZnJhbWUtPmVkaXRvcigpLT5j
YW5ESFRNTENvcHkoKSB8fCBmcmFtZS0+ZWRpdG9yKCktPmNhbkNvcHkoKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0N1dDoKLSAgICAgICAgICAg
IHNob3VsZEVuYWJsZSA9IGZyYW1lLT5lZGl0b3IoKS0+Y2FuREhUTUxDdXQoKSB8fCBmcmFtZS0+
ZWRpdG9yKCktPmNhbkN1dCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29u
dGV4dE1lbnVJdGVtVGFnSWdub3JlU3BlbGxpbmc6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJ
dGVtVGFnTGVhcm5TcGVsbGluZzoKLSAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGZyYW1lLT5z
ZWxlY3Rpb24oKS0+aXNSYW5nZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtVGFnUGFzdGU6Ci0gICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFt
ZS0+ZWRpdG9yKCktPmNhbkRIVE1MUGFzdGUoKSB8fCBmcmFtZS0+ZWRpdG9yKCktPmNhblBhc3Rl
KCk7Ci0gICAgICAgICAgICBicmVhazsKLSNpZiBQTEFURk9STShHVEspCi0gICAgICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtVGFnRGVsZXRlOgotICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gZnJh
bWUtPmVkaXRvcigpLT5jYW5EZWxldGUoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIENvbnRleHRNZW51SXRlbVRhZ1NlbGVjdEFsbDoKLSAgICAgICAgY2FzZSBDb250ZXh0TWVu
dUl0ZW1UYWdJbnB1dE1ldGhvZHM6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnVW5p
Y29kZToKLSAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IHRydWU7Ci0gICAgICAgICAgICBicmVh
azsKLSNlbmRpZgotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1VuZGVybGluZTogewot
ICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgICAgICAgICBSZWZQdHI8Q1NT
U3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+Y3JlYXRlQ1NTU3R5
bGVEZWNsYXJhdGlvbigpOwotICAgICAgICAgICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3Bl
cnR5V2Via2l0VGV4dERlY29yYXRpb25zSW5FZmZlY3QsICJ1bmRlcmxpbmUiLCBmYWxzZSwgZWMp
OwotICAgICAgICAgICAgc2hvdWxkQ2hlY2sgPSBmcmFtZS0+ZWRpdG9yKCktPnNlbGVjdGlvbkhh
c1N0eWxlKHN0eWxlLmdldCgpKSAhPSBGYWxzZVRyaVN0YXRlOwotICAgICAgICAgICAgc2hvdWxk
RW5hYmxlID0gZnJhbWUtPmVkaXRvcigpLT5jYW5FZGl0UmljaGx5KCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0xvb2tVcElu
RGljdGlvbmFyeToKLSAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGZyYW1lLT5zZWxlY3Rpb24o
KS0+aXNSYW5nZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29udGV4dE1l
bnVJdGVtVGFnQ2hlY2tHcmFtbWFyV2l0aFNwZWxsaW5nOgotI2lmbmRlZiBCVUlMRElOR19PTl9U
SUdFUgotICAgICAgICAgICAgaWYgKGZyYW1lLT5lZGl0b3IoKS0+aXNHcmFtbWFyQ2hlY2tpbmdF
bmFibGVkKCkpCi0gICAgICAgICAgICAgICAgc2hvdWxkQ2hlY2sgPSB0cnVlOwotICAgICAgICAg
ICAgc2hvdWxkRW5hYmxlID0gdHJ1ZTsKLSNlbmRpZgotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnSXRhbGljOiB7Ci0gICAgICAgICAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKLSAgICAgICAgICAgIFJlZlB0cjxDU1NTdHlsZURlY2xhcmF0aW9uPiBz
dHlsZSA9IGZyYW1lLT5kb2N1bWVudCgpLT5jcmVhdGVDU1NTdHlsZURlY2xhcmF0aW9uKCk7Ci0g
ICAgICAgICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlGb250U3R5bGUsICJpdGFs
aWMiLCBmYWxzZSwgZWMpOwotICAgICAgICAgICAgc2hvdWxkQ2hlY2sgPSBmcmFtZS0+ZWRpdG9y
KCktPnNlbGVjdGlvbkhhc1N0eWxlKHN0eWxlLmdldCgpKSAhPSBGYWxzZVRyaVN0YXRlOwotICAg
ICAgICAgICAgc2hvdWxkRW5hYmxlID0gZnJhbWUtPmVkaXRvcigpLT5jYW5FZGl0UmljaGx5KCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIENvbnRleHRNZW51
SXRlbVRhZ0JvbGQ6IHsKLSAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgICAg
ICAgICAgUmVmUHRyPENTU1N0eWxlRGVjbGFyYXRpb24+IHN0eWxlID0gZnJhbWUtPmRvY3VtZW50
KCktPmNyZWF0ZUNTU1N0eWxlRGVjbGFyYXRpb24oKTsKLSAgICAgICAgICAgIHN0eWxlLT5zZXRQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRXZWlnaHQsICJib2xkIiwgZmFsc2UsIGVjKTsKLSAgICAg
ICAgICAgIHNob3VsZENoZWNrID0gZnJhbWUtPmVkaXRvcigpLT5zZWxlY3Rpb25IYXNTdHlsZShz
dHlsZS5nZXQoKSkgIT0gRmFsc2VUcmlTdGF0ZTsKLSAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9
IGZyYW1lLT5lZGl0b3IoKS0+Y2FuRWRpdFJpY2hseSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdPdXRsaW5lOgotICAgICAg
ICAgICAgc2hvdWxkRW5hYmxlID0gZmFsc2U7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTaG93U3BlbGxpbmdQYW5lbDoKLSNpZm5kZWYgQlVJTERJ
TkdfT05fVElHRVIKLSAgICAgICAgICAgIGlmIChmcmFtZS0+ZWRpdG9yKCktPnNwZWxsaW5nUGFu
ZWxJc1Nob3dpbmcoKSkKLSAgICAgICAgICAgICAgICBpdGVtLnNldFRpdGxlKGNvbnRleHRNZW51
SXRlbVRhZ1Nob3dTcGVsbGluZ1BhbmVsKGZhbHNlKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgaXRlbS5zZXRUaXRsZShjb250ZXh0TWVudUl0ZW1UYWdTaG93U3BlbGxpbmdQ
YW5lbCh0cnVlKSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGZyYW1lLT5l
ZGl0b3IoKS0+Y2FuRWRpdCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29u
dGV4dE1lbnVJdGVtVGFnTm9HdWVzc2VzRm91bmQ6Ci0gICAgICAgICAgICBzaG91bGRFbmFibGUg
PSBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRl
bVRhZ0NoZWNrU3BlbGxpbmdXaGlsZVR5cGluZzoKLSAgICAgICAgICAgIHNob3VsZENoZWNrID0g
ZnJhbWUtPmVkaXRvcigpLT5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgICAgICBjYXNlIENvbnRleHRN
ZW51SXRlbVRhZ1N1YnN0aXR1dGlvbnNNZW51OgotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRl
bVRhZ1RyYW5zZm9ybWF0aW9uc01lbnU6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBDb250ZXh0TWVudUl0ZW1UYWdTaG93U3Vic3RpdHV0aW9uczoKLSNpZiAhZGVmaW5lZChCVUlM
RElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKLSAgICAgICAg
ICAgIGlmIChmcmFtZS0+ZWRpdG9yKCktPnN1YnN0aXR1dGlvbnNQYW5lbElzU2hvd2luZygpKQot
ICAgICAgICAgICAgICAgIGl0ZW0uc2V0VGl0bGUoY29udGV4dE1lbnVJdGVtVGFnU2hvd1N1YnN0
aXR1dGlvbnMoZmFsc2UpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBpdGVt
LnNldFRpdGxlKGNvbnRleHRNZW51SXRlbVRhZ1Nob3dTdWJzdGl0dXRpb25zKHRydWUpKTsKLSAg
ICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGZyYW1lLT5lZGl0b3IoKS0+Y2FuRWRpdCgpOwotI2Vu
ZGlmCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdN
YWtlVXBwZXJDYXNlOgotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ01ha2VMb3dlckNh
c2U6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQ2FwaXRhbGl6ZToKLSAgICAgICAg
Y2FzZSBDb250ZXh0TWVudUl0ZW1UYWdDaGFuZ2VCYWNrOgotICAgICAgICAgICAgc2hvdWxkRW5h
YmxlID0gZnJhbWUtPmVkaXRvcigpLT5jYW5FZGl0KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdDb3JyZWN0U3BlbGxpbmdBdXRvbWF0aWNhbGx5
OgotI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19P
Tl9MRU9QQVJEKQotICAgICAgICAgICAgc2hvdWxkQ2hlY2sgPSBmcmFtZS0+ZWRpdG9yKCktPmlz
QXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZCgpOwotI2VuZGlmCi0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTbWFydENvcHlQYXN0ZToK
LSNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05f
TEVPUEFSRCkKLSAgICAgICAgICAgIHNob3VsZENoZWNrID0gZnJhbWUtPmVkaXRvcigpLT5zbWFy
dEluc2VydERlbGV0ZUVuYWJsZWQoKTsKLSNlbmRpZgotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU21hcnRRdW90ZXM6Ci0jaWYgIWRlZmluZWQoQlVJ
TERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpCi0gICAgICAg
ICAgICBzaG91bGRDaGVjayA9IGZyYW1lLT5lZGl0b3IoKS0+aXNBdXRvbWF0aWNRdW90ZVN1YnN0
aXR1dGlvbkVuYWJsZWQoKTsKLSNlbmRpZgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgQ29udGV4dE1lbnVJdGVtVGFnU21hcnREYXNoZXM6Ci0jaWYgIWRlZmluZWQoQlVJTERJTkdf
T05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpCi0gICAgICAgICAgICBz
aG91bGRDaGVjayA9IGZyYW1lLT5lZGl0b3IoKS0+aXNBdXRvbWF0aWNEYXNoU3Vic3RpdHV0aW9u
RW5hYmxlZCgpOwotI2VuZGlmCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb250
ZXh0TWVudUl0ZW1UYWdTbWFydExpbmtzOgotI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VS
KSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQotICAgICAgICAgICAgc2hvdWxkQ2hl
Y2sgPSBmcmFtZS0+ZWRpdG9yKCktPmlzQXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQoKTsK
LSNlbmRpZgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVt
VGFnVGV4dFJlcGxhY2VtZW50OgotI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAh
ZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQotICAgICAgICAgICAgc2hvdWxkQ2hlY2sgPSBm
cmFtZS0+ZWRpdG9yKCktPmlzQXV0b21hdGljVGV4dFJlcGxhY2VtZW50RW5hYmxlZCgpOwotI2Vu
ZGlmCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdT
dG9wU3BlYWtpbmc6Ci0gICAgICAgICAgICBzaG91bGRFbmFibGUgPSBjb250cm9sbGVyKCkgJiYg
Y29udHJvbGxlcigpLT5jbGllbnQoKSAmJiBjb250cm9sbGVyKCktPmNsaWVudCgpLT5pc1NwZWFr
aW5nKCk7Ci0gICAgICAgICAgICBicmVhazsKLSNlbHNlIC8vIFBMQVRGT1JNKE1BQykgZW5kcyBo
ZXJlCi0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU3RvcFNwZWFraW5nOgotICAgICAg
ICAgICAgYnJlYWs7Ci0jZW5kaWYKLSNpZiBQTEFURk9STShHVEspCi0gICAgICAgIGNhc2UgQ29u
dGV4dE1lbnVJdGVtVGFnR29CYWNrOgotICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gZnJhbWUt
PnBhZ2UoKSAmJiBmcmFtZS0+cGFnZSgpLT5iYWNrRm9yd2FyZCgpLT5jYW5Hb0JhY2tPckZvcndh
cmQoLTEpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVt
VGFnR29Gb3J3YXJkOgotICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gZnJhbWUtPnBhZ2UoKSAm
JiBmcmFtZS0+cGFnZSgpLT5iYWNrRm9yd2FyZCgpLT5jYW5Hb0JhY2tPckZvcndhcmQoMSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTdG9wOgot
ICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRl
cigpLT5pc0xvYWRpbmdJbkFQSVNlbnNlKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBDb250ZXh0TWVudUl0ZW1UYWdSZWxvYWQ6Ci0gICAgICAgICAgICBzaG91bGRFbmFibGUg
PSAhZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5pc0xvYWRpbmdJbkFQSVNlbnNl
KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdG
b250TWVudToKLSAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGZyYW1lLT5lZGl0b3IoKS0+Y2Fu
RWRpdFJpY2hseSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0jZWxzZQotICAgICAgICBjYXNlIENv
bnRleHRNZW51SXRlbVRhZ0dvQmFjazoKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdH
b0ZvcndhcmQ6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU3RvcDoKLSAgICAgICAg
Y2FzZSBDb250ZXh0TWVudUl0ZW1UYWdSZWxvYWQ6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJ
dGVtVGFnRm9udE1lbnU6Ci0jZW5kaWYKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdO
b0FjdGlvbjoKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdPcGVuTGlua0luTmV3V2lu
ZG93OgotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0Rvd25sb2FkTGlua1RvRGlzazoK
LSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdDb3B5TGlua1RvQ2xpcGJvYXJkOgotICAg
ICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5JbWFnZUluTmV3V2luZG93OgotICAgICAg
ICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0Rvd25sb2FkSW1hZ2VUb0Rpc2s6Ci0gICAgICAgIGNh
c2UgQ29udGV4dE1lbnVJdGVtVGFnQ29weUltYWdlVG9DbGlwYm9hcmQ6Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdPcGVuTWVkaWFJbk5ld1dpbmRv
dzoKLSAgICAgICAgICAgIGlmIChtX2hpdFRlc3RSZXN1bHQubWVkaWFJc1ZpZGVvKCkpCi0gICAg
ICAgICAgICAgICAgaXRlbS5zZXRUaXRsZShjb250ZXh0TWVudUl0ZW1UYWdPcGVuVmlkZW9Jbk5l
d1dpbmRvdygpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBpdGVtLnNldFRp
dGxlKGNvbnRleHRNZW51SXRlbVRhZ09wZW5BdWRpb0luTmV3V2luZG93KCkpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQ29weU1lZGlhTGlua1Rv
Q2xpcGJvYXJkOgotICAgICAgICAgICAgaWYgKG1faGl0VGVzdFJlc3VsdC5tZWRpYUlzVmlkZW8o
KSkKLSAgICAgICAgICAgICAgICBpdGVtLnNldFRpdGxlKGNvbnRleHRNZW51SXRlbVRhZ0NvcHlW
aWRlb0xpbmtUb0NsaXBib2FyZCgpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICBpdGVtLnNldFRpdGxlKGNvbnRleHRNZW51SXRlbVRhZ0NvcHlBdWRpb0xpbmtUb0NsaXBib2Fy
ZCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRh
Z1RvZ2dsZU1lZGlhQ29udHJvbHM6Ci0gICAgICAgICAgICBzaG91bGRDaGVjayA9IG1faGl0VGVz
dFJlc3VsdC5tZWRpYUNvbnRyb2xzRW5hYmxlZCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnVG9nZ2xlTWVkaWFMb29wOgotICAgICAgICAgICAg
c2hvdWxkQ2hlY2sgPSBtX2hpdFRlc3RSZXN1bHQubWVkaWFMb29wRW5hYmxlZCgpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnRW50ZXJWaWRlb0Z1
bGxzY3JlZW46Ci0gICAgICAgICAgICBzaG91bGRFbmFibGUgPSBtX2hpdFRlc3RSZXN1bHQubWVk
aWFTdXBwb3J0c0Z1bGxzY3JlZW4oKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IENvbnRleHRNZW51SXRlbVRhZ09wZW5GcmFtZUluTmV3V2luZG93OgotICAgICAgICBjYXNlIENv
bnRleHRNZW51SXRlbVRhZ1NwZWxsaW5nR3Vlc3M6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJ
dGVtVGFnT3RoZXI6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU2VhcmNoSW5TcG90
bGlnaHQ6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU2VhcmNoV2ViOgotICAgICAg
ICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5XaXRoRGVmYXVsdEFwcGxpY2F0aW9uOgotICAg
ICAgICBjYXNlIENvbnRleHRNZW51SXRlbVBERkFjdHVhbFNpemU6Ci0gICAgICAgIGNhc2UgQ29u
dGV4dE1lbnVJdGVtUERGWm9vbUluOgotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVBERlpv
b21PdXQ6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtUERGQXV0b1NpemU6Ci0gICAgICAg
IGNhc2UgQ29udGV4dE1lbnVJdGVtUERGU2luZ2xlUGFnZToKLSAgICAgICAgY2FzZSBDb250ZXh0
TWVudUl0ZW1QREZGYWNpbmdQYWdlczoKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1QREZD
b250aW51b3VzOgotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVBERk5leHRQYWdlOgotICAg
ICAgICBjYXNlIENvbnRleHRNZW51SXRlbVBERlByZXZpb3VzUGFnZToKLSAgICAgICAgY2FzZSBD
b250ZXh0TWVudUl0ZW1UYWdPcGVuTGluazoKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1U
YWdJZ25vcmVHcmFtbWFyOgotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1NwZWxsaW5n
TWVudToKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTaG93Rm9udHM6Ci0gICAgICAg
IGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU3R5bGVzOgotICAgICAgICBjYXNlIENvbnRleHRNZW51
SXRlbVRhZ1Nob3dDb2xvcnM6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU3BlZWNo
TWVudToKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTdGFydFNwZWFraW5nOgotICAg
ICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1dyaXRpbmdEaXJlY3Rpb25NZW51OgotICAgICAg
ICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1RleHREaXJlY3Rpb25NZW51OgotICAgICAgICBjYXNl
IENvbnRleHRNZW51SXRlbVRhZ1BERlNpbmdsZVBhZ2VTY3JvbGxpbmc6Ci0gICAgICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtVGFnUERGRmFjaW5nUGFnZXNTY3JvbGxpbmc6Ci0jaWYgRU5BQkxFKElO
U1BFQ1RPUikKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdJbnNwZWN0RWxlbWVudDoK
LSNlbmRpZgotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbUJhc2VDdXN0b21UYWc6Ci0gICAg
ICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtQ3VzdG9tVGFnTm9BY3Rpb246Ci0gICAgICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtTGFzdEN1c3RvbVRhZzoKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0
ZW1CYXNlQXBwbGljYXRpb25UYWc6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBD
b250ZXh0TWVudUl0ZW1UYWdNZWRpYVBsYXlQYXVzZToKLSAgICAgICAgICAgIGlmIChtX2hpdFRl
c3RSZXN1bHQubWVkaWFQbGF5aW5nKCkpCi0gICAgICAgICAgICAgICAgaXRlbS5zZXRUaXRsZShj
b250ZXh0TWVudUl0ZW1UYWdNZWRpYVBhdXNlKCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIGl0ZW0uc2V0VGl0bGUoY29udGV4dE1lbnVJdGVtVGFnTWVkaWFQbGF5KCkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnTWVkaWFN
dXRlOgotICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gbV9oaXRUZXN0UmVzdWx0Lm1lZGlhSGFz
QXVkaW8oKTsKLSAgICAgICAgICAgIHNob3VsZENoZWNrID0gc2hvdWxkRW5hYmxlICYmICBtX2hp
dFRlc3RSZXN1bHQubWVkaWFNdXRlZCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0g
ICAgaXRlbS5zZXRDaGVja2VkKHNob3VsZENoZWNrKTsKLSAgICBpdGVtLnNldEVuYWJsZWQoc2hv
dWxkRW5hYmxlKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5B
QkxFKENPTlRFWFRfTUVOVVMpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0NvbnRleHRNZW51LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9Db250ZXh0TWVudS5oCShyZXZpc2lvbiA3
MzE2OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vQ29udGV4dE1lbnUuaAkod29ya2luZyBjb3B5KQpA
QCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogCiAjaW5jbHVk
ZSAiQ29udGV4dE1lbnVJdGVtLmgiCi0jaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1
ZGUgIlBsYXRmb3JtTWVudURlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcu
aCIKICNpZiBQTEFURk9STShNQUMpCkBAIC00OCwxNCArNDcsMTAgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgIGNsYXNzIENvbnRleHRNZW51IDogcHVibGljIE5vbmNvcHlhYmxlCiAgICAgewog
ICAgIHB1YmxpYzoKLSAgICAgICAgQ29udGV4dE1lbnUoY29uc3QgSGl0VGVzdFJlc3VsdCYpOwot
ICAgICAgICBDb250ZXh0TWVudShjb25zdCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgUGxhdGZvcm1N
ZW51RGVzY3JpcHRpb24pOworICAgICAgICBDb250ZXh0TWVudSgpOworICAgICAgICBDb250ZXh0
TWVudShjb25zdCBQbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbik7CiAgICAgICAgIH5Db250ZXh0TWVu
dSgpOwogCi0gICAgICAgIHZvaWQgcG9wdWxhdGUoKTsKLSAgICAgICAgdm9pZCBhZGRJbnNwZWN0
RWxlbWVudEl0ZW0oKTsKLSAgICAgICAgdm9pZCBjaGVja09yRW5hYmxlSWZOZWVkZWQoQ29udGV4
dE1lbnVJdGVtJikgY29uc3Q7Ci0KICAgICAgICAgdm9pZCBpbnNlcnRJdGVtKHVuc2lnbmVkIHBv
c2l0aW9uLCBDb250ZXh0TWVudUl0ZW0mKTsKICAgICAgICAgdm9pZCBhcHBlbmRJdGVtKENvbnRl
eHRNZW51SXRlbSYpOwogICAgICAgICAKQEAgLTY0LDkgKzU5LDYgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiAgICAgICAgIHVuc2lnbmVkIGl0ZW1Db3VudCgpIGNvbnN0OwogCi0gICAgICAgIEhp
dFRlc3RSZXN1bHQgaGl0VGVzdFJlc3VsdCgpIGNvbnN0IHsgcmV0dXJuIG1faGl0VGVzdFJlc3Vs
dDsgfQotICAgICAgICBDb250ZXh0TWVudUNvbnRyb2xsZXIqIGNvbnRyb2xsZXIoKSBjb25zdDsK
LQogICAgICAgICBQbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbiBwbGF0Zm9ybURlc2NyaXB0aW9uKCkg
Y29uc3Q7CiAgICAgICAgIHZvaWQgc2V0UGxhdGZvcm1EZXNjcmlwdGlvbihQbGF0Zm9ybU1lbnVE
ZXNjcmlwdGlvbik7CiAKQEAgLTc1LDcgKzY3LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICBzdGF0aWMgQ29udGV4dE1lbnVJdGVtKiBpdGVtV2l0aElkKGludCk7CiAjZW5kaWYKICAg
ICBwcml2YXRlOgotICAgICAgICBIaXRUZXN0UmVzdWx0IG1faGl0VGVzdFJlc3VsdDsKICNpZiBQ
TEFURk9STShNQUMpCiAgICAgICAgIC8vIEtlZXAgdGhpcyBpbiBzeW5jIHdpdGggdGhlIFBsYXRm
b3JtTWVudURlc2NyaXB0aW9uIHR5cGVkZWYKICAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFy
cmF5PiBtX3BsYXRmb3JtRGVzY3JpcHRpb247CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2FuZHJv
aWQvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2FuZHJvaWQvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAkocmV2aXNpb24gNzMxNjkpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2FuZHJvaWQvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTY3LDcgKzE2Nyw3IEBAIFBhc3RlYm9hcmQ6On5QYXN0ZWJvYXJkKCkKIH0KIAogCi1D
b250ZXh0TWVudTo6Q29udGV4dE1lbnUoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0KSA6IG1f
aGl0VGVzdFJlc3VsdChyZXN1bHQpCitDb250ZXh0TWVudTo6Q29udGV4dE1lbnUoKQogewogICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIG5vdEltcGxlbWVudGVkKCk7CkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2JyZXcvQ29udGV4dE1lbnVCcmV3LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2JyZXcvQ29udGV4dE1lbnVCcmV3LmNwcAkocmV2aXNpb24gNzMxNjkpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2JyZXcvQ29udGV4dE1lbnVCcmV3LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzIsMTUgKzMyLDEzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ29udGV4dE1l
bnU6OkNvbnRleHRNZW51KGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCkKLSAgICA6IG1faGl0
VGVzdFJlc3VsdChyZXN1bHQpCitDb250ZXh0TWVudTo6Q29udGV4dE1lbnUoKQogewogICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLUNvbnRleHRN
ZW51OjpDb250ZXh0TWVudShjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IFBsYXRm
b3JtTWVudURlc2NyaXB0aW9uIG1lbnUpCi0gICAgOiBtX2hpdFRlc3RSZXN1bHQocmVzdWx0KQor
Q29udGV4dE1lbnU6OkNvbnRleHRNZW51KGNvbnN0IFBsYXRmb3JtTWVudURlc2NyaXB0aW9uIG1l
bnUpCiB7CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ29udGV4dE1lbnVDaHJvbWl1bS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9Db250ZXh0TWVudUNocm9t
aXVtLmNwcAkocmV2aXNpb24gNzMxNjkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nv
bnRleHRNZW51Q2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxMyArMzYsMTEgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogLy8gVGhpcyBpcyBhIHN0dWIgaW1wbGVtZW50YXRpb24gb2Yg
V2ViS2l0J3MgQ29udGV4dE1lbnUgY2xhc3MgdGhhdCBkb2VzCiAvLyBub3RoaW5nLgogCi1Db250
ZXh0TWVudTo6Q29udGV4dE1lbnUoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0KQotICAgIDog
bV9oaXRUZXN0UmVzdWx0KHJlc3VsdCkKK0NvbnRleHRNZW51OjpDb250ZXh0TWVudSgpCiB7CiB9
CiAKLUNvbnRleHRNZW51OjpDb250ZXh0TWVudShjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQs
IGNvbnN0IFBsYXRmb3JtTWVudURlc2NyaXB0aW9uIG1lbnUpCi0gICAgOiBtX2hpdFRlc3RSZXN1
bHQocmVzdWx0KQorQ29udGV4dE1lbnU6OkNvbnRleHRNZW51KGNvbnN0IFBsYXRmb3JtTWVudURl
c2NyaXB0aW9uIG1lbnUpCiB7CiB9CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZWZsL0NvbnRl
eHRNZW51RWZsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2VmbC9Db250ZXh0
TWVudUVmbC5jcHAJKHJldmlzaW9uIDczMTY5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9lZmwvQ29u
dGV4dE1lbnVFZmwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxNiArMjksMTQgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1Db250ZXh0TWVudTo6Q29udGV4dE1lbnUoY29uc3QgSGl0VGVz
dFJlc3VsdCYgcmVzdWx0KQotICAgIDogbV9oaXRUZXN0UmVzdWx0KHJlc3VsdCkKK0NvbnRleHRN
ZW51OjpDb250ZXh0TWVudSgpCiB7CiAgICAgbV9jb250ZXh0TWVudUNsaWVudCA9IHN0YXRpY19j
YXN0PENvbnRleHRNZW51Q2xpZW50RWZsKj4oY29udHJvbGxlcigpLT5jbGllbnQoKSk7CiAgICAg
bV9wbGF0Zm9ybURlc2NyaXB0aW9uID0gbV9jb250ZXh0TWVudUNsaWVudC0+Y3JlYXRlUGxhdGZv
cm1EZXNjcmlwdGlvbih0aGlzKTsKIH0KIAotQ29udGV4dE1lbnU6OkNvbnRleHRNZW51KGNvbnN0
IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gbWVu
dSkKLSAgICA6IG1faGl0VGVzdFJlc3VsdChyZXN1bHQpCi0gICAgLCBtX3BsYXRmb3JtRGVzY3Jp
cHRpb24obWVudSkKK0NvbnRleHRNZW51OjpDb250ZXh0TWVudShjb25zdCBQbGF0Zm9ybU1lbnVE
ZXNjcmlwdGlvbiBtZW51KQorICAgIDogbV9wbGF0Zm9ybURlc2NyaXB0aW9uKG1lbnUpCiB7CiAg
ICAgbV9jb250ZXh0TWVudUNsaWVudCA9IHN0YXRpY19jYXN0PENvbnRleHRNZW51Q2xpZW50RWZs
Kj4oY29udHJvbGxlcigpLT5jbGllbnQoKSk7CiB9CkBAIC01MSw3ICs0OSw2IEBAIENvbnRleHRN
ZW51Ojp+Q29udGV4dE1lbnUoKQogCiB2b2lkIENvbnRleHRNZW51OjphcHBlbmRJdGVtKENvbnRl
eHRNZW51SXRlbSYgaXRlbSkKIHsKLSAgICBjaGVja09yRW5hYmxlSWZOZWVkZWQoaXRlbSk7CiAg
ICAgbV9jb250ZXh0TWVudUNsaWVudC0+YXBwZW5kSXRlbShtX3BsYXRmb3JtRGVzY3JpcHRpb24s
IGl0ZW0pOwogfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2VmbC9Db250ZXh0TWVudUl0ZW1F
ZmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZWZsL0NvbnRleHRNZW51SXRl
bUVmbC5jcHAJKHJldmlzaW9uIDczMTY5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9lZmwvQ29udGV4
dE1lbnVJdGVtRWZsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDggKzExNiw3IEBAIHZvaWQg
Q29udGV4dE1lbnVJdGVtOjpzZXRTdWJNZW51KENvbnRleHQKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9uLnR5cGUgPSBTdWJtZW51VHlwZTsKLSAgICBtX3BsYXRm
b3JtRGVzY3JpcHRpb24uc3ViTWVudSA9IG5ldyBDb250ZXh0TWVudShzdWJNZW51LT5oaXRUZXN0
UmVzdWx0KCksCi0gICAgICAgICAgICBzdWJNZW51LT5yZWxlYXNlUGxhdGZvcm1EZXNjcmlwdGlv
bigpKTsKKyAgICBtX3BsYXRmb3JtRGVzY3JpcHRpb24uc3ViTWVudSA9IG5ldyBDb250ZXh0TWVu
dShzdWJNZW51LT5yZWxlYXNlUGxhdGZvcm1EZXNjcmlwdGlvbigpKTsKIH0KIAogYm9vbCBDb250
ZXh0TWVudUl0ZW06OmNoZWNrZWQoKSBjb25zdApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
Q29udGV4dE1lbnVHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL0Nv
bnRleHRNZW51R3RrLmNwcAkocmV2aXNpb24gNzMxNjkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2d0
ay9Db250ZXh0TWVudUd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDggKzM0LDcgQEAgc3Rh
dGljIHZvaWQgbWVudUl0ZW1BY3RpdmF0ZWQoR3RrTWVudUl0ZQogICAgIGNvbnRyb2xsZXItPmNv
bnRleHRNZW51SXRlbVNlbGVjdGVkKCZjb250ZXh0SXRlbSk7CiB9CiAKLUNvbnRleHRNZW51OjpD
b250ZXh0TWVudShjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQpCi0gICAgOiBtX2hpdFRlc3RS
ZXN1bHQocmVzdWx0KQorQ29udGV4dE1lbnU6OkNvbnRleHRNZW51KCkKIHsKICAgICBtX3BsYXRm
b3JtRGVzY3JpcHRpb24gPSBHVEtfTUVOVShndGtfbWVudV9uZXcoKSk7CiAKQEAgLTUxLDcgKzUw
LDYgQEAgQ29udGV4dE1lbnU6On5Db250ZXh0TWVudSgpCiB2b2lkIENvbnRleHRNZW51OjphcHBl
bmRJdGVtKENvbnRleHRNZW51SXRlbSYgaXRlbSkKIHsKICAgICBBU1NFUlQobV9wbGF0Zm9ybURl
c2NyaXB0aW9uKTsKLSAgICBjaGVja09yRW5hYmxlSWZOZWVkZWQoaXRlbSk7CiAKICAgICBDb250
ZXh0TWVudUl0ZW1UeXBlIHR5cGUgPSBpdGVtLnR5cGUoKTsKICAgICBHdGtNZW51SXRlbSogcGxh
dGZvcm1JdGVtID0gQ29udGV4dE1lbnVJdGVtOjpjcmVhdGVOYXRpdmVNZW51SXRlbShpdGVtLnJl
bGVhc2VQbGF0Zm9ybURlc2NyaXB0aW9uKCkpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9oYWlr
dS9Db250ZXh0TWVudUhhaWt1LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2hh
aWt1L0NvbnRleHRNZW51SGFpa3UuY3BwCShyZXZpc2lvbiA3MzE2OSkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vaGFpa3UvQ29udGV4dE1lbnVIYWlrdS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1LDkg
Kzc1LDggQEAgcHJpdmF0ZToKICAgICBpbnQgbV9yZXN1bHQ7CiB9OwogCi1Db250ZXh0TWVudTo6
Q29udGV4dE1lbnUoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0KQotICAgIDogbV9oaXRUZXN0
UmVzdWx0KHJlc3VsdCkKLSAgICAsIG1fcGxhdGZvcm1EZXNjcmlwdGlvbihuZXcgQk1lbnUoImNv
bnRleHRfbWVudSIpKQorQ29udGV4dE1lbnU6OkNvbnRleHRNZW51KCkKKyAgICA6IG1fcGxhdGZv
cm1EZXNjcmlwdGlvbihuZXcgQk1lbnUoImNvbnRleHRfbWVudSIpKQogewogfQogCkBAIC04OCw4
ICs4Nyw2IEBAIENvbnRleHRNZW51Ojp+Q29udGV4dE1lbnUoKQogCiB2b2lkIENvbnRleHRNZW51
OjphcHBlbmRJdGVtKENvbnRleHRNZW51SXRlbSYgaXRlbSkKIHsKLSAgICBjaGVja09yRW5hYmxl
SWZOZWVkZWQoaXRlbSk7Ci0KICAgICBCTWVudUl0ZW0qIG1lbnVJdGVtID0gaXRlbS5yZWxlYXNl
UGxhdGZvcm1EZXNjcmlwdGlvbigpOwogICAgIGlmIChtZW51SXRlbSkKICAgICAgICAgbV9wbGF0
Zm9ybURlc2NyaXB0aW9uLT5BZGRJdGVtKG1lbnVJdGVtKTsKQEAgLTEwMiw4ICs5OSw2IEBAIHVu
c2lnbmVkIENvbnRleHRNZW51OjppdGVtQ291bnQoKSBjb25zdAogCiB2b2lkIENvbnRleHRNZW51
OjppbnNlcnRJdGVtKHVuc2lnbmVkIHBvc2l0aW9uLCBDb250ZXh0TWVudUl0ZW0mIGl0ZW0pCiB7
Ci0gICAgY2hlY2tPckVuYWJsZUlmTmVlZGVkKGl0ZW0pOwotCiAgICAgQk1lbnVJdGVtKiBtZW51
SXRlbSA9IGl0ZW0ucmVsZWFzZVBsYXRmb3JtRGVzY3JpcHRpb24oKTsKICAgICBpZiAobWVudUl0
ZW0pCiAgICAgICAgIG1fcGxhdGZvcm1EZXNjcmlwdGlvbi0+QWRkSXRlbShtZW51SXRlbSwgcG9z
aXRpb24pOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ29udGV4dE1lbnVNYWMubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ29udGV4dE1lbnVNYWMubW0JKHJldmlz
aW9uIDczMTY5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ29udGV4dE1lbnVNYWMubW0JKHdv
cmtpbmcgY29weSkKQEAgLTcxLDcgKzcxLDcgQEAgLSAoQk9PTCl2YWxpZGF0ZU1lbnVJdGVtOihO
U01lbnVJdGVtICopaQogewogICAgIFdlYkNvcmU6OkNvbnRleHRNZW51SXRlbSBjb3JlSXRlbShp
dGVtKTsKICAgICBBU1NFUlQoX21lbnVDb250cm9sbGVyLT5jb250ZXh0TWVudSgpKTsKLSAgICBf
bWVudUNvbnRyb2xsZXItPmNvbnRleHRNZW51KCktPmNoZWNrT3JFbmFibGVJZk5lZWRlZChjb3Jl
SXRlbSk7CisgICAgX21lbnVDb250cm9sbGVyLT5jaGVja09yRW5hYmxlSWZOZWVkZWQoY29yZUl0
ZW0pOwogICAgIHJldHVybiBjb3JlSXRlbS5lbmFibGVkKCk7CiB9CiAKQEAgLTc5LDggKzc5LDcg
QEAgLSAoQk9PTCl2YWxpZGF0ZU1lbnVJdGVtOihOU01lbnVJdGVtICopaQogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLUNvbnRleHRNZW51OjpDb250ZXh0TWVudShjb25zdCBIaXRUZXN0UmVzdWx0
JiByZXN1bHQpCi0gICAgOiBtX2hpdFRlc3RSZXN1bHQocmVzdWx0KQorQ29udGV4dE1lbnU6OkNv
bnRleHRNZW51KCkKIHsKICAgICBOU011dGFibGVBcnJheSogYXJyYXkgPSBbW05TTXV0YWJsZUFy
cmF5IGFsbG9jXSBpbml0XTsKICAgICBtX3BsYXRmb3JtRGVzY3JpcHRpb24gPSBhcnJheTsKQEAg
LTg5LDkgKzg4LDggQEAgQ29udGV4dE1lbnU6OkNvbnRleHRNZW51KGNvbnN0IEhpdFRlc3RSZQog
ICAgIFtbV2ViQ29yZU1lbnVUYXJnZXQgc2hhcmVkTWVudVRhcmdldF0gc2V0TWVudUNvbnRyb2xs
ZXI6Y29udHJvbGxlcigpXTsKIH0KIAotQ29udGV4dE1lbnU6OkNvbnRleHRNZW51KGNvbnN0IEhp
dFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gbWVudSkK
LSAgICA6IG1faGl0VGVzdFJlc3VsdChyZXN1bHQpCi0gICAgLCBtX3BsYXRmb3JtRGVzY3JpcHRp
b24obWVudSkKK0NvbnRleHRNZW51OjpDb250ZXh0TWVudShjb25zdCBQbGF0Zm9ybU1lbnVEZXNj
cmlwdGlvbiBtZW51KQorICAgIDogbV9wbGF0Zm9ybURlc2NyaXB0aW9uKG1lbnUpCiB7CiAgICAg
W1tXZWJDb3JlTWVudVRhcmdldCBzaGFyZWRNZW51VGFyZ2V0XSBzZXRNZW51Q29udHJvbGxlcjpj
b250cm9sbGVyKCldOwogfQpAQCAtMTA4LDggKzEwNiw2IEBAIHN0YXRpYyB2b2lkIHNldE1lbnVJ
dGVtVGFyZ2V0KE5TTWVudUl0ZW0KIAogdm9pZCBDb250ZXh0TWVudTo6YXBwZW5kSXRlbShDb250
ZXh0TWVudUl0ZW0mIGl0ZW0pCiB7Ci0gICAgY2hlY2tPckVuYWJsZUlmTmVlZGVkKGl0ZW0pOwot
CiAgICAgQ29udGV4dE1lbnVJdGVtVHlwZSB0eXBlID0gaXRlbS50eXBlKCk7CiAgICAgTlNNZW51
SXRlbSogcGxhdGZvcm1JdGVtID0gaXRlbS5yZWxlYXNlUGxhdGZvcm1EZXNjcmlwdGlvbigpOwog
ICAgIGlmICh0eXBlID09IEFjdGlvblR5cGUpCkBAIC0xMjEsOCArMTE3LDYgQEAgdm9pZCBDb250
ZXh0TWVudTo6YXBwZW5kSXRlbShDb250ZXh0TWVudQogCiB2b2lkIENvbnRleHRNZW51OjppbnNl
cnRJdGVtKHVuc2lnbmVkIHBvc2l0aW9uLCBDb250ZXh0TWVudUl0ZW0mIGl0ZW0pCiB7Ci0gICAg
Y2hlY2tPckVuYWJsZUlmTmVlZGVkKGl0ZW0pOwotCiAgICAgQ29udGV4dE1lbnVJdGVtVHlwZSB0
eXBlID0gaXRlbS50eXBlKCk7CiAgICAgTlNNZW51SXRlbSogcGxhdGZvcm1JdGVtID0gaXRlbS5y
ZWxlYXNlUGxhdGZvcm1EZXNjcmlwdGlvbigpOwogICAgIGlmICh0eXBlID09IEFjdGlvblR5cGUp
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3F0L0NvbnRleHRNZW51UXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vcXQvQ29udGV4dE1lbnVRdC5jcHAJKHJldmlzaW9uIDczMTY5
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9xdC9Db250ZXh0TWVudVF0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzUsOCArMzUsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNvbnRleHRNZW51
OjpDb250ZXh0TWVudShjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQpCi0gICAgOiBtX2hpdFRl
c3RSZXN1bHQocmVzdWx0KQorQ29udGV4dE1lbnU6OkNvbnRleHRNZW51KCkKIHsKIH0KIApJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ29udGV4dE1lbnVXaW4uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vd2luL0NvbnRleHRNZW51V2luLmNwcAkocmV2aXNpb24gNzMxNjkp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL3dpbi9Db250ZXh0TWVudVdpbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQzLDkgKzQzLDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1Db250ZXh0TWVu
dTo6Q29udGV4dE1lbnUoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0KQotICAgIDogbV9oaXRU
ZXN0UmVzdWx0KHJlc3VsdCkKLSAgICAsIG1fcGxhdGZvcm1EZXNjcmlwdGlvbigwKQorQ29udGV4
dE1lbnU6OkNvbnRleHRNZW51KCkKKyAgICA6IG1fcGxhdGZvcm1EZXNjcmlwdGlvbigwKQogI2lm
IE9TKFdJTkNFKQogICAgICwgbV9pdGVtQ291bnQoMCkKICNlbmRpZgpAQCAtNTMsOSArNTIsOCBA
QCBDb250ZXh0TWVudTo6Q29udGV4dE1lbnUoY29uc3QgSGl0VGVzdFJlCiAgICAgc2V0UGxhdGZv
cm1EZXNjcmlwdGlvbig6OkNyZWF0ZVBvcHVwTWVudSgpKTsKIH0KIAotQ29udGV4dE1lbnU6OkNv
bnRleHRNZW51KGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgUGxhdGZvcm1NZW51
RGVzY3JpcHRpb24gbWVudSkKLSAgICA6IG1faGl0VGVzdFJlc3VsdChyZXN1bHQpCi0gICAgLCBt
X3BsYXRmb3JtRGVzY3JpcHRpb24oMCkKK0NvbnRleHRNZW51OjpDb250ZXh0TWVudShjb25zdCBQ
bGF0Zm9ybU1lbnVEZXNjcmlwdGlvbiBtZW51KQorICAgIDogbV9wbGF0Zm9ybURlc2NyaXB0aW9u
KDApCiAjaWYgT1MoV0lOQ0UpCiAgICAgLCBtX2l0ZW1Db3VudCgwKQogI2VuZGlmCkBAIC0xMTgs
OCArMTE2LDYgQEAgdm9pZCBDb250ZXh0TWVudTo6aW5zZXJ0SXRlbSh1bnNpZ25lZCBpbgogICAg
IGlmICghbV9wbGF0Zm9ybURlc2NyaXB0aW9uKQogICAgICAgICByZXR1cm47CiAKLSAgICBjaGVj
a09yRW5hYmxlSWZOZWVkZWQoaXRlbSk7Ci0KICNpZiBPUyhXSU5DRSkKICAgICBpZiAoaW5zZXJ0
TWVudUl0ZW0obV9wbGF0Zm9ybURlc2NyaXB0aW9uLCBwb3NpdGlvbiwgaXRlbSkpCiAgICAgICAg
ICsrbV9pdGVtQ291bnQ7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3d4L0NvbnRleHRNZW51V3gu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vd3gvQ29udGV4dE1lbnVXeC5jcHAJ
KHJldmlzaW9uIDczMTY5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS93eC9Db250ZXh0TWVudVd4LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBDb250ZXh0TWVudUl0ZW0qIENvbnRl
eHRNZW51OjppdGVtV2l0aElkCiAgICAgcmV0dXJuIG5ldyBDb250ZXh0TWVudUl0ZW0oQWN0aW9u
VHlwZSwgc19pdGVtQWN0aW9ucy5nZXQoaWQpLCAiIik7CiB9CiAKLUNvbnRleHRNZW51OjpDb250
ZXh0TWVudShjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQpIDogbV9oaXRUZXN0UmVzdWx0KHJl
c3VsdCkKK0NvbnRleHRNZW51OjpDb250ZXh0TWVudSgpCiB7CiAgICAgbV9wbGF0Zm9ybURlc2Ny
aXB0aW9uID0gbmV3IHd4TWVudSgwKTsKIH0KQEAgLTU3LDggKzU3LDYgQEAgdm9pZCBDb250ZXh0
TWVudTo6YXBwZW5kSXRlbShDb250ZXh0TWVudQogewogICAgIGlmICghbV9wbGF0Zm9ybURlc2Ny
aXB0aW9uKQogICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgY2hlY2tPckVuYWJsZUlmTmVlZGVk
KGl0ZW0pOwogICAgICAgICAKICAgICBQbGF0Zm9ybU1lbnVJdGVtRGVzY3JpcHRpb24gaXRlbURl
c2NyaXB0aW9uID0gaXRlbS5yZWxlYXNlUGxhdGZvcm1EZXNjcmlwdGlvbigpOyAgICAKICAgICB3
eEl0ZW1LaW5kIG1lbnVLaW5kV3ggPSAoIGl0ZW1EZXNjcmlwdGlvbi50eXBlID09IENoZWNrYWJs
ZUFjdGlvblR5cGUgKSA/IHd4SVRFTV9DSEVDSyA6IHd4SVRFTV9OT1JNQUw7CkluZGV4OiBXZWJL
aXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24g
NzM0MjApCisrKyBXZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5
IEBACisyMDEwLTEyLTA2ICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFwcGxlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBMYXllcmlu
ZyBWaW9sYXRpb24gaW4gQ29udGV4dE1lbnUgLSBtZW1iZXIgdmFyaWFibGUgb2YgdHlwZSBIaXRU
ZXN0UmVzdWx0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD01MDU4NgorICAgICAgICAKKyAgICAgICAgVXBkYXRlIHVzZXJzIG9mIENvbnRleHRNZW51IGFu
ZCBDb250ZXh0TWVudUNvbnRyb2xsZXIgdG8gbWF0Y2ggd2hlcmUgdGhlIG5ldyBmdW5jdGlvbnMg
CisgICAgICAgIGFyZSBsb2NhdGVkLgorCisgICAgICAgICogU2hhcmVkL1dlYkNvbnRleHRNZW51
SXRlbURhdGEuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZXh0TWVudUl0ZW1EYXRhOjpX
ZWJDb250ZXh0TWVudUl0ZW1EYXRhKTogUmVtb3ZlIHRoZSBjYWxsIHRvIGNoZWNrT3JFbmFibGVJ
dGVtLCB0aGF0IGNhbGwgd2lsbCBiZSBtYWRlIHdoZW4KKyAgICAgICAgICAgIHRoZSBDb250ZXh0
TWVudUl0ZW0gaXMgYWRkZWQgdG8gdGhlIENvbnRleHRNZW51IHRocm91Z2ggdGhlIENvbnRleHRN
ZW51Q29udHJvbGxlci4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQ29udGV4dE1l
bnUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZXh0TWVudTo6c2hvdyk6CisKIDIwMTAt
MTItMDYgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBTYW0gV2VpbmlnLgpJbmRleDogV2ViS2l0Mi9TaGFyZWQvV2ViQ29udGV4dE1l
bnVJdGVtRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9TaGFyZWQvV2ViQ29udGV4dE1l
bnVJdGVtRGF0YS5jcHAJKHJldmlzaW9uIDczMTY5KQorKysgV2ViS2l0Mi9TaGFyZWQvV2ViQ29u
dGV4dE1lbnVJdGVtRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDggKzczLDYgQEAgV2Vi
Q29udGV4dE1lbnVJdGVtRGF0YTo6V2ViQ29udGV4dE1lbnVJdAogICAgICAgICBtX3N1Ym1lbnUg
PSBraXRJdGVtcyhjb3JlU3VibWVudSwgbWVudSk7CiAgICAgfQogICAgIAotICAgIG1lbnUtPmNo
ZWNrT3JFbmFibGVJZk5lZWRlZChpdGVtKTsKLSAgICAKICAgICBtX2VuYWJsZWQgPSBpdGVtLmVu
YWJsZWQoKTsKICAgICBtX2NoZWNrZWQgPSBpdGVtLmNoZWNrZWQoKTsKIH0KSW5kZXg6IFdlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkNvbnRleHRNZW51LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJDb250ZXh0TWVudS5jcHAJKHJldmlzaW9uIDcz
MTY5KQorKysgV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQ29udGV4dE1lbnUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00NywxMCArNDcsMTMgQEAgV2ViQ29udGV4dE1lbnU6On5XZWJDb250
ZXh0TWVudSgpCiAKIHZvaWQgV2ViQ29udGV4dE1lbnU6OnNob3coKQogewotICAgIENvbnRleHRN
ZW51KiBtZW51ID0gbV9wYWdlLT5jb3JlUGFnZSgpLT5jb250ZXh0TWVudUNvbnRyb2xsZXIoKS0+
Y29udGV4dE1lbnUoKTsKKyAgICBDb250ZXh0TWVudUNvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBt
X3BhZ2UtPmNvcmVQYWdlKCktPmNvbnRleHRNZW51Q29udHJvbGxlcigpOworICAgIGlmICghY29u
dHJvbGxlcikKKyAgICAgICAgcmV0dXJuOworICAgIENvbnRleHRNZW51KiBtZW51ID0gY29udHJv
bGxlci0+Y29udGV4dE1lbnUoKTsKICAgICBpZiAoIW1lbnUpCiAgICAgICAgIHJldHVybjsKLSAg
ICBOb2RlKiBub2RlID0gbWVudS0+aGl0VGVzdFJlc3VsdCgpLmlubmVyTm9uU2hhcmVkTm9kZSgp
OworICAgIE5vZGUqIG5vZGUgPSBjb250cm9sbGVyLT5oaXRUZXN0UmVzdWx0KCkuaW5uZXJOb25T
aGFyZWROb2RlKCk7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm47CiAgICAgRnJhbWUq
IGZyYW1lID0gbm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKQEAgLTY1LDEyICs2OCwxMiBAQCB2
b2lkIFdlYkNvbnRleHRNZW51OjpzaG93KCkKICAgICBWZWN0b3I8V2ViQ29udGV4dE1lbnVJdGVt
RGF0YT4gcHJvcG9zZWRNZW51ID0ga2l0SXRlbXMoY29yZUl0ZW1zLCBtZW51KTsKICAgICBWZWN0
b3I8V2ViQ29udGV4dE1lbnVJdGVtRGF0YT4gbmV3TWVudTsKICAgICBSZWZQdHI8QVBJT2JqZWN0
PiB1c2VyRGF0YTsKLSAgICBSZWZQdHI8SW5qZWN0ZWRCdW5kbGVIaXRUZXN0UmVzdWx0PiBoaXRU
ZXN0UmVzdWx0ID0gSW5qZWN0ZWRCdW5kbGVIaXRUZXN0UmVzdWx0OjpjcmVhdGUobWVudS0+aGl0
VGVzdFJlc3VsdCgpKTsKKyAgICBSZWZQdHI8SW5qZWN0ZWRCdW5kbGVIaXRUZXN0UmVzdWx0PiBo
aXRUZXN0UmVzdWx0ID0gSW5qZWN0ZWRCdW5kbGVIaXRUZXN0UmVzdWx0OjpjcmVhdGUoY29udHJv
bGxlci0+aGl0VGVzdFJlc3VsdCgpKTsKICAgICBpZiAobV9wYWdlLT5pbmplY3RlZEJ1bmRsZUNv
bnRleHRNZW51Q2xpZW50KCkuZ2V0Q3VzdG9tTWVudUZyb21EZWZhdWx0SXRlbXMobV9wYWdlLCBo
aXRUZXN0UmVzdWx0LmdldCgpLCBwcm9wb3NlZE1lbnUsIG5ld01lbnUsIHVzZXJEYXRhKSkKICAg
ICAgICAgcHJvcG9zZWRNZW51ID0gbmV3TWVudTsKIAogICAgIC8vIE5vdGlmeSB0aGUgVUlQcm9j
ZXNzLgotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTaG93Q29udGV4
dE1lbnUodmlldy0+Y29udGVudHNUb1dpbmRvdyhtZW51LT5oaXRUZXN0UmVzdWx0KCkucG9pbnQo
KSksIHByb3Bvc2VkTWVudSwgSW5qZWN0ZWRCdW5kbGVVc2VyTWVzc2FnZUVuY29kZXIodXNlckRh
dGEuZ2V0KCkpKSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNo
b3dDb250ZXh0TWVudSh2aWV3LT5jb250ZW50c1RvV2luZG93KGNvbnRyb2xsZXItPmhpdFRlc3RS
ZXN1bHQoKS5wb2ludCgpKSwgcHJvcG9zZWRNZW51LCBJbmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdl
RW5jb2Rlcih1c2VyRGF0YS5nZXQoKSkpKTsKIH0KIAogdm9pZCBXZWJDb250ZXh0TWVudTo6aXRl
bVNlbGVjdGVkKGNvbnN0IFdlYkNvbnRleHRNZW51SXRlbURhdGEmIGl0ZW0pCkluZGV4OiBXZWJL
aXQvd2luL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL0NoYW5nZUxvZwkocmV2
aXNpb24gNzM0MjApCisrKyBXZWJLaXQvd2luL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDIwIEBACisyMDEwLTEyLTA2ICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFw
cGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBMYXllcmluZyBWaW9sYXRpb24gaW4gQ29udGV4dE1lbnUgLSBtZW1iZXIgdmFyaWFibGUgb2Yg
dHlwZSBIaXRUZXN0UmVzdWx0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD01MDU4NgorICAgICAgICAKKyAgICAgICAgVXBkYXRlIHVzZXJzIG9mIENvbnRl
eHRNZW51IGFuZCBDb250ZXh0TWVudUNvbnRyb2xsZXIgdG8gbWF0Y2ggd2hlcmUgdGhlIG5ldyBm
dW5jdGlvbnMgCisgICAgICAgIGFyZSBsb2NhdGVkLgorCisgICAgICAgICogV2ViQ29yZVN1cHBv
cnQvV2ViQ29udGV4dE1lbnVDbGllbnQuY3BwOgorICAgICAgICAoV2ViQ29udGV4dE1lbnVDbGll
bnQ6OmdldEN1c3RvbU1lbnVGcm9tRGVmYXVsdEl0ZW1zKTogR2V0IHRoZSBIaXRUZXN0UmVzdWx0
IGFuZCBDb250ZXh0TWVudSBmcm9tIHRoZSAKKyAgICAgICAgICAgIENvbnRleHRNZW51Q29udHJv
bGxlciAoZnJvbSB0aGUgcGFnZSkuCisgICAgICAgIChXZWJDb250ZXh0TWVudUNsaWVudDo6Y29u
dGV4dE1lbnVJdGVtU2VsZWN0ZWQpOiBHZXQgdGhlIEhpdFRlc3RSZXN1bHQgZnJvbSB0aGUgQ29u
dGV4dE1lbnVDb250cm9sbGVyLgorICAgICAgICAqIFdlYlZpZXcuY3BwOgorICAgICAgICAoV2Vi
Vmlldzo6aGFuZGxlQ29udGV4dE1lbnVFdmVudCk6IERpdHRvLgorCiAyMDEwLTEyLTA1ICBBZGFt
IFJvYmVuICA8YXJvYmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBXaW5kb3dzIHByb2R1Y3Rpb24g
YnVpbGQgZml4CkluZGV4OiBXZWJLaXQvd2luL1dlYlZpZXcuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC93aW4vV2ViVmlldy5jcHAJKHJldmlzaW9uIDczMTY5KQorKysgV2ViS2l0L3dpbi9XZWJW
aWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI0NSwxMiArMTI0NSwxNCBAQCBib29sIFdlYlZp
ZXc6OmhhbmRsZUNvbnRleHRNZW51RXZlbnQoV1BBCiAgICAgaWYgKCFoYW5kbGVkRXZlbnQpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIENvbnRleHRNZW51Q29udHJvbGxlciogY29udGV4
dE1lbnVDb250cm9sbGVyID0gbV9wYWdlLT5jb250ZXh0TWVudUNvbnRyb2xsZXIoKTsKKwogICAg
IC8vIFNob3cgdGhlIG1lbnUKLSAgICBDb250ZXh0TWVudSogY29yZU1lbnUgPSBtX3BhZ2UtPmNv
bnRleHRNZW51Q29udHJvbGxlcigpLT5jb250ZXh0TWVudSgpOworICAgIENvbnRleHRNZW51KiBj
b3JlTWVudSA9IGNvbnRleHRNZW51Q29udHJvbGxlci0+Y29udGV4dE1lbnUoKTsKICAgICBpZiAo
IWNvcmVNZW51KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBOb2RlKiBub2RlID0gY29y
ZU1lbnUtPmhpdFRlc3RSZXN1bHQoKS5pbm5lck5vblNoYXJlZE5vZGUoKTsKKyAgICBOb2RlKiBu
b2RlID0gY29udGV4dE1lbnVDb250cm9sbGVyLT5oaXRUZXN0UmVzdWx0KCkuaW5uZXJOb25TaGFy
ZWROb2RlKCk7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTEy
NjIsNyArMTI2NCw3IEBAIGJvb2wgV2ViVmlldzo6aGFuZGxlQ29udGV4dE1lbnVFdmVudChXUEEK
ICAgICBpZiAoIXZpZXcpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFBPSU5UIHBvaW50
KHZpZXctPmNvbnRlbnRzVG9XaW5kb3coY29yZU1lbnUtPmhpdFRlc3RSZXN1bHQoKS5wb2ludCgp
KSk7CisgICAgUE9JTlQgcG9pbnQodmlldy0+Y29udGVudHNUb1dpbmRvdyhjb250ZXh0TWVudUNv
bnRyb2xsZXItPmhpdFRlc3RSZXN1bHQoKS5wb2ludCgpKSk7CiAKICAgICAvLyBUcmFuc2xhdGUg
dGhlIHBvaW50IHRvIHNjcmVlbiBjb29yZGluYXRlcwogICAgIGlmICghOjpDbGllbnRUb1NjcmVl
bihtX3ZpZXdXaW5kb3csICZwb2ludCkpCkluZGV4OiBXZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0
L1dlYkNvbnRleHRNZW51Q2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL1dlYkNv
cmVTdXBwb3J0L1dlYkNvbnRleHRNZW51Q2xpZW50LmNwcAkocmV2aXNpb24gNzMzMDYpCisrKyBX
ZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNvbnRleHRNZW51Q2xpZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIldlYlZpZXcuaCIKIAogI2luY2x1
ZGUgPFdlYkNvcmUvQ29udGV4dE1lbnUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0NvbnRleHRNZW51
Q29udHJvbGxlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRXZlbnQuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL0ZyYW1lLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZUxvYWRlci5oPgpAQCAtNjQsNyAr
NjUsNyBAQCBITUVOVSBXZWJDb250ZXh0TWVudUNsaWVudDo6Z2V0Q3VzdG9tTWVuCiAKICAgICBI
TUVOVSBuZXdNZW51ID0gMDsKICAgICBDT01QdHI8V2ViRWxlbWVudFByb3BlcnR5QmFnPiBwcm9w
ZXJ0eUJhZzsKLSAgICBwcm9wZXJ0eUJhZy5hZG9wdFJlZihXZWJFbGVtZW50UHJvcGVydHlCYWc6
OmNyZWF0ZUluc3RhbmNlKG1lbnUtPmhpdFRlc3RSZXN1bHQoKSkpOworICAgIHByb3BlcnR5QmFn
LmFkb3B0UmVmKFdlYkVsZW1lbnRQcm9wZXJ0eUJhZzo6Y3JlYXRlSW5zdGFuY2UobV93ZWJWaWV3
LT5wYWdlKCktPmNvbnRleHRNZW51Q29udHJvbGxlcigpLT5oaXRUZXN0UmVzdWx0KCkpKTsKICAg
ICAvLyBGSVhNRTogV2UgbmVlZCB0byBkZWNpZGUgd2hldGhlciB0byBkbyB0aGUgZGVmYXVsdCBi
ZWZvcmUgY2FsbGluZyB0aGlzIGRlbGVnYXRlIG1ldGhvZAogICAgIGlmIChGQUlMRUQodWlEZWxl
Z2F0ZS0+Y29udGV4dE1lbnVJdGVtc0ZvckVsZW1lbnQobV93ZWJWaWV3LCBwcm9wZXJ0eUJhZy5n
ZXQoKSwgKE9MRV9IQU5ETEUpKFVMT05HNjQpbWVudS0+cGxhdGZvcm1EZXNjcmlwdGlvbigpLCAo
T0xFX0hBTkRMRSopJm5ld01lbnUpKSkKICAgICAgICAgcmV0dXJuIG1lbnUtPnBsYXRmb3JtRGVz
Y3JpcHRpb24oKTsKQEAgLTgyLDcgKzgzLDcgQEAgdm9pZCBXZWJDb250ZXh0TWVudUNsaWVudDo6
Y29udGV4dE1lbnVJdAogICAgIEFTU0VSVCh1aURlbGVnYXRlKTsKIAogICAgIENPTVB0cjxXZWJF
bGVtZW50UHJvcGVydHlCYWc+IHByb3BlcnR5QmFnOwotICAgIHByb3BlcnR5QmFnLmFkb3B0UmVm
KFdlYkVsZW1lbnRQcm9wZXJ0eUJhZzo6Y3JlYXRlSW5zdGFuY2UocGFyZW50TWVudS0+aGl0VGVz
dFJlc3VsdCgpKSk7CisgICAgcHJvcGVydHlCYWcuYWRvcHRSZWYoV2ViRWxlbWVudFByb3BlcnR5
QmFnOjpjcmVhdGVJbnN0YW5jZShtX3dlYlZpZXctPnBhZ2UoKS0+Y29udGV4dE1lbnVDb250cm9s
bGVyKCktPmhpdFRlc3RSZXN1bHQoKSkpOwogICAgICAgICAgICAgCiAgICAgdWlEZWxlZ2F0ZS0+
Y29udGV4dE1lbnVJdGVtU2VsZWN0ZWQobV93ZWJWaWV3LCBpdGVtLT5yZWxlYXNlUGxhdGZvcm1E
ZXNjcmlwdGlvbigpLCBwcm9wZXJ0eUJhZy5nZXQoKSk7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75778</attachid>
            <date>2010-12-06 20:16:22 -0800</date>
            <delta_ts>2010-12-06 20:35:57 -0800</delta_ts>
            <desc>[PATCH] Fix + Qt</desc>
            <filename>context_menu_layering_violation_fix.patch</filename>
            <type>text/plain</type>
            <size>120156</size>
            <attacher name="Brian Weinstein">bweinstein</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MzQyMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODMgQEAKKzIwMTAtMTItMDYgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5A
YXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIExheWVyaW5nIFZpb2xhdGlvbiBpbiBDb250ZXh0TWVudSAtIG1lbWJlciB2YXJpYWJsZSBv
ZiB0eXBlIEhpdFRlc3RSZXN1bHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTUwNTg2CisgICAgICAgIAorICAgICAgICBDb250ZXh0TWVudSBoYWQgYSBs
YXllcmluZyB2aW9sYXRpb24gYnkgaGF2aW5nIGEgbWVtYmVyIHZhcmlhYmxlIG9mIHR5cGUgSGl0
VGVzdFJlc3VsdCwgYmVjYXVzZQorICAgICAgICBjbGFzc2VzIGluIFdlYkNvcmUvcGxhdGZvcm0g
Y2FuJ3Qga25vdyBhYm91dCBjbGFzc2VzIGluIFdlYkNvcmUuCisgICAgICAgIAorICAgICAgICBU
aGlzIHBhdGNoIG1vdmVzIHRoZSBIaXRUZXN0UmVzdWx0IGFuZCBhbGwgZnVuY3Rpb25zIHRoYXQg
dXNlIGl0IG91dCBvZiBDb250ZXh0TWVudSBpbnRvIENvbnRleHRNZW51Q29udHJvbGxlci4KKyAg
ICAgICAgQWxsIG9mIHRoZSBmdW5jdGlvbnMgdGhhdCBkZWFsdCB3aXRoIHBvcHVsYXRpbmcgdGhl
IENvbnRleHRNZW51IGFyZSBub3cgaW4gQ29udGV4dE1lbnVDb250cm9sbGVyLCBhbmQgdGhpcwor
ICAgICAgICBhbGxvd2VkIHVzIHRvIGRlbGV0ZSB0aGUgQ29udGV4dE1lbnUgZmlsZSwgcHV0dGlu
ZyBhbGwgb2YgdGhlIGNyb3NzLXBsYXRmb3JtIGNvZGUgdGhhdCB1c2VkIHRvIGJlIGl0CisgICAg
ICAgIGluIENvbnRleHRNZW51Q29udHJvbGxlciwgYW5kIHRoZSByZXN0IG9mIHRoZSBjb2RlIGlz
IGluIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBmaWxlcy4KKworICAgICAgICBObyBjaGFuZ2UgaW4g
YmVoYXZpb3IsIG5vIG5ldyB0ZXN0cy4KKworICAgICAgICAqIEFuZHJvaWQubWs6IFJlbW92ZWQg
Q29udGV4dE1lbnUuY3BwLgorICAgICAgICAqIENNYWtlTGlzdHMudHh0OiBEaXR0by4KKyAgICAg
ICAgKiBHTlVtYWtlZmlsZS5hbTogRGl0dG8uCisgICAgICAgICogV2ViQ29yZS5neXBpOiBEaXR0
by4KKyAgICAgICAgKiBXZWJDb3JlLnBybzogRGl0dG8uCisgICAgICAgICogV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2o6IERpdHRvLgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajogRGl0dG8uCisKKyAgICAgICAgKiBwYWdlL0NvbnRleHRNZW51Q29udHJv
bGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0TWVudUNvbnRyb2xsZXI6OkNvbnRl
eHRNZW51Q29udHJvbGxlcik6IEluaXRpYWxpemVkIG1faGl0VGVzdFJlc3VsdCB0byBhbiBlbXB0
eSBIaXRUZXN0UmVzdWx0LgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVDb250cm9sbGVy
OjpoYW5kbGVDb250ZXh0TWVudUV2ZW50KTogQ2FsbCBwb3B1bGF0ZSBvbiB0aGUgQ29udGV4dE1l
bnVDb250cm9sbGVyIGluc3RlYWQKKyAgICAgICAgICAgIG9mIHRoZSBDb250ZXh0TWVudS4KKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51Q29udHJvbGxlcjo6Y3JlYXRlQ29udGV4dE1lbnUp
OiBGaXggc29tZSBpbmRpbmF0aW9uLCBhbmQgc3RvcmUgdGhlIEhpdFRlc3RSZXN1bHQgaW4gYSBt
ZW1iZXIKKyAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1l
bnVDb250cm9sbGVyOjpzaG93Q29udGV4dE1lbnUpOiBDYWxsIGFkZEluc3BlY3RFbGVtZW50SXRl
bSBvbiB0aGUgQ29udGV4dE1lbnVDb250cm9sbGVyLgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4
dE1lbnVDb250cm9sbGVyOjpjb250ZXh0TWVudUl0ZW1TZWxlY3RlZCk6IFVzZSBtX2hpdFRlc3RS
ZXN1bHQgd2hlbmV2ZXIgd2UgbmVlZCBhIEhpdFRlc3RSZXN1bHQuCisgICAgICAgIChXZWJDb3Jl
OjpDb250ZXh0TWVudUNvbnRyb2xsZXI6OmFwcGVuZEl0ZW0pOiBWYWxpZGF0ZXMgdGhlIGl0ZW0g
Zm9yIGl0cyBzdGF0ZSwgYW5kIHRoZW4gYXBwZW5kcyBpdCB0byB0aGUgcGFyZW50IG1lbnUuCisg
ICAgICAgICAgICBUaGlzIGFsbG93ZWQgdXMgdG8gbW92ZSBjaGVja09yRW5hYmxlSWZOZWVkZWQg
ZnJvbSBDb250ZXh0TWVudS4KKworICAgICAgICBUaGVzZSBmdW5jdGlvbnMgd2VyZSBhbGwgbW92
ZWQgZnJvbSBDb250ZXh0TWVudSwgYW5kIGNoYW5nZWQgc2xpZ2h0bHkgdG8gZml0IGluIENvbnRl
eHRNZW51Q29udHJvbGxlci4KKyAgICAgICAgQWxsIGNhbGxzIHRvIENvbnRleHRNZW51OjphcHBl
bmRJdGVtIHdlcmUgY2hhbmdlZCB0byBDb250ZXh0TWVudUNvbnRyb2xsZXI6OmFwcGVuZEl0ZW0s
IHdoaWNoIHRha2VzIGNhcmUKKyAgICAgICAgb2YgdmFsaWRhdGluZyB0aGUgbWVudS4KKyAgICAg
ICAgKFdlYkNvcmU6OnNlcGFyYXRvckl0ZW0pOiBNb3ZlZCBmcm9tIENvbnRleHRNZW51LgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVDb250cm9sbGVyOjpjcmVhdGVBbmRBcHBlbmRGb250
U3ViTWVudSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVDb250cm9sbGVy
OjpjcmVhdGVBbmRBcHBlbmRTcGVsbGluZ0FuZEdyYW1tYXJTdWJNZW51KTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNyZWF0ZUFuZEFwcGVuZFNwZWVj
aFN1Yk1lbnUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51Q29udHJvbGxl
cjo6Y3JlYXRlQW5kQXBwZW5kV3JpdGluZ0RpcmVjdGlvblN1Yk1lbnUpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRleHRNZW51Q29udHJvbGxlcjo6Y3JlYXRlQW5kQXBwZW5kVGV4dERp
cmVjdGlvblN1Yk1lbnUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51Q29u
dHJvbGxlcjo6Y3JlYXRlQW5kQXBwZW5kU3Vic3RpdHV0aW9uc1N1Yk1lbnUpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51Q29udHJvbGxlcjo6Y3JlYXRlQW5kQXBwZW5kVHJh
bnNmb3JtYXRpb25zU3ViTWVudSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6c2VsZWN0aW9u
Q29udGFpbnNQb3NzaWJsZVdvcmQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRN
ZW51Q29udHJvbGxlcjo6cG9wdWxhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
eHRNZW51Q29udHJvbGxlcjo6YWRkSW5zcGVjdEVsZW1lbnRJdGVtKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNoZWNrT3JFbmFibGVJZk5lZWRlZCk6
IERpdHRvLgorICAgICAgICAKKyAgICAgICAgKiBwYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5o
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVDb250cm9sbGVyOjpoaXRUZXN0UmVzdWx0
KTogUmV0dXJucyB0aGUgSGl0VGVzdFJlc3VsdCBvZiB0aGUgY3VycmVudCBDb250ZXh0TWVudS4K
KworICAgICAgICAqIHBsYXRmb3JtL0NvbnRleHRNZW51LmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9Db250ZXh0TWVudS5oOgorICAgICAgICAqIHBsYXRmb3JtL2VmbC9Db250ZXh0
TWVudUVmbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0TWVudTo6Q29udGV4dE1lbnUp
OiBSZW1vdmVkIG1faGl0VGVzdFJlc3VsdCBmcm9tIHRoZSBjb25zdHJ1Y3Rvci4KKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRleHRNZW51OjphcHBlbmRJdGVtKTogUmVtb3ZlZCB0aGUgY2FsbCB0byBj
aGVja09yRW5hYmxlSWZOZWVkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3RrL0NvbnRleHRNZW51
R3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51OjpDb250ZXh0TWVudSk6IFJl
bW92ZWQgbV9oaXRUZXN0UmVzdWx0IGZyb20gdGhlIGNvbnN0cnVjdG9yLgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGV4dE1lbnU6OmFwcGVuZEl0ZW0pOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9y
bS9oYWlrdS9Db250ZXh0TWVudUhhaWt1LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRN
ZW51OjpDb250ZXh0TWVudSk6IFJlbW92ZWQgbV9oaXRUZXN0UmVzdWx0IGZyb20gdGhlIGNvbnN0
cnVjdG9yLgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnU6OmFwcGVuZEl0ZW0pOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51OjppbnNlcnRJdGVtKTogRGl0dG8uCisg
ICAgICAgICogcGxhdGZvcm0vbWFjL0NvbnRleHRNZW51TWFjLm1tOgorICAgICAgICAoLVtXZWJD
b3JlTWVudVRhcmdldCB2YWxpZGF0ZU1lbnVJdGVtOl0pOiBDYWxscyBjaGVja09yRW5hYmxlSWZO
ZWVkZWQgb24gdGhlIGNvbnRyb2xsZXIgaW5zdGVhZCBvZgorICAgICAgICAgICAgdGhlIGNvbnRl
eHQgbWVudS4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51OjpDb250ZXh0TWVudSk6IFJl
bW92ZWQgbV9oaXRUZXN0UmVzdWx0IGZyb20gdGhlIGNvbnN0cnVjdG9yLgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGV4dE1lbnU6OmFwcGVuZEl0ZW0pOiBSZW1vdmVkIHRoZSBjYWxsIHRvIGNoZWNr
T3JFbmFibGVJZk5lZWRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51OjppbnNlcnRJ
dGVtKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vd2luL0NvbnRleHRNZW51V2luLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51OjpDb250ZXh0TWVudSk6IFJlbW92ZWQgbV9o
aXRUZXN0UmVzdWx0IGZyb20gdGhlIGNvbnN0cnVjdG9yLgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGV4dE1lbnU6Omluc2VydEl0ZW0pOiBSZW1vdmVkIHRoZSBjYWxsIHRvIGNoZWNrT3JFbmFibGVJ
Zk5lZWRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS93eC9Db250ZXh0TWVudVd4LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRleHRNZW51OjpDb250ZXh0TWVudSk6IFJlbW92ZWQgbV9oaXRUZXN0
UmVzdWx0IGZyb20gdGhlIGNvbnN0cnVjdG9yLgorICAgICAgICAoQ29udGV4dE1lbnU6OmFwcGVu
ZEl0ZW0pOiBEaXR0by4KKwogMjAxMC0xMi0wNiAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0
Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBUb255IENoYW5nLgpJbmRleDogV2ViQ29yZS9B
bmRyb2lkLm1rCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQW5kcm9pZC5tawkocmV2aXNpb24gNzMx
NjkpCisrKyBXZWJDb3JlL0FuZHJvaWQubWsJKHdvcmtpbmcgY29weSkKQEAgLTQ0OSw3ICs0NDks
NiBAQCBMT0NBTF9TUkNfRklMRVMgOj0gJChMT0NBTF9TUkNfRklMRVMpIFwKIAlcCiAJcGxhdGZv
cm0vQXJlbmEuY3BwIFwKIAlwbGF0Zm9ybS9Db250ZW50VHlwZS5jcHAgXAotCXBsYXRmb3JtL0Nv
bnRleHRNZW51LmNwcCBcCiAJcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwIFwKIAlwbGF0
Zm9ybS9EZXByZWNhdGVkUHRyTGlzdEltcGwuY3BwIFwKIAlwbGF0Zm9ybS9EcmFnRGF0YS5jcHAg
XApJbmRleDogV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NN
YWtlTGlzdHMudHh0CShyZXZpc2lvbiA3MzE2OSkKKysrIFdlYkNvcmUvQ01ha2VMaXN0cy50eHQJ
KHdvcmtpbmcgY29weSkKQEAgLTEyNTksNyArMTI1OSw2IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMK
IAogICAgIHBsYXRmb3JtL0FyZW5hLmNwcAogICAgIHBsYXRmb3JtL0NvbnRlbnRUeXBlLmNwcAot
ICAgIHBsYXRmb3JtL0NvbnRleHRNZW51LmNwcAogICAgIHBsYXRmb3JtL0Nyb3NzVGhyZWFkQ29w
aWVyLmNwcAogICAgIHBsYXRmb3JtL0RlcHJlY2F0ZWRQdHJMaXN0SW1wbC5jcHAKICAgICBwbGF0
Zm9ybS9EcmFnRGF0YS5jcHAKSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gNzMxNjkpCisrKyBXZWJDb3Jl
L0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0yMjQ2LDcgKzIyNDYsNiBAQCB3ZWJj
b3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvcGxhdGZvcm0vQXV0b2RyYWluZWRQb29sLmggXAog
CVdlYkNvcmUvcGxhdGZvcm0vQ29udGVudFR5cGUuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL0Nv
bnRlbnRUeXBlLmggXAotCVdlYkNvcmUvcGxhdGZvcm0vQ29udGV4dE1lbnUuY3BwIFwKIAlXZWJD
b3JlL3BsYXRmb3JtL0NvbnRleHRNZW51LmggXAogCVdlYkNvcmUvcGxhdGZvcm0vQ29udGV4dE1l
bnVJdGVtLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vQ29va2llLmggXApJbmRleDogV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9u
IDczMTY5KQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTMzMzQs
NyArMzMzNCw2IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vQXV0b2RyYWluZWRQb29sLmgnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL0NvbnRlbnRUeXBlLmNwcCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vQ29udGVudFR5cGUuaCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vQ29udGV4dE1lbnUu
Y3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9Db250ZXh0TWVudS5oJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9Db250ZXh0TWVudUl0ZW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vQ29v
a2llLmgnLApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L1dlYkNvcmUucHJvCShyZXZpc2lvbiA3MzE2OSkKKysrIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdv
cmtpbmcgY29weSkKQEAgLTExNDcsNyArMTE0Nyw2IEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRm
b3JtL3RleHQvQmlkaUNvbnRleHQuY3BwIFwKICAgICBwbGF0Zm9ybS90ZXh0L0h5cGhlbmF0aW9u
LmNwcCBcCiAgICAgcGxhdGZvcm0vQ29udGVudFR5cGUuY3BwIFwKLSAgICBwbGF0Zm9ybS9Db250
ZXh0TWVudS5jcHAgXAogICAgIHBsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmNwcCBcCiAgICAg
cGxhdGZvcm0vRGVwcmVjYXRlZFB0ckxpc3RJbXBsLmNwcCBcCiAgICAgcGxhdGZvcm0vRHJhZ0Rh
dGEuY3BwIFwKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNp
b24gNzMxNjkpCisrKyBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNTI1OCwxMCArMjUyNTgsNiBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJ
CTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxDb250ZXh0TWVudS5jcHAiCi0J
CQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3Jt
XENvbnRleHRNZW51LmgiCiAJCQkJPgogCQkJPC9GaWxlPgpJbmRleDogV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDczMTY5KQorKysgV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI4MzMs
NyArMjgzMyw2IEBACiAJCTkzQjJEODE2MEY5OTIwRDIwMDZBRTZCMiAvKiBTdWRkZW5UZXJtaW5h
dGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNC
MkQ4MTUwRjk5MjBEMjAwNkFFNkIyIC8qIFN1ZGRlblRlcm1pbmF0aW9uLmggKi87IH07CiAJCTkz
QjJEODE4MEY5OTIwRUUwMDZBRTZCMiAvKiBTdWRkZW5UZXJtaW5hdGlvbi5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQjJEODE3MEY5OTIwRUUwMDZB
RTZCMiAvKiBTdWRkZW5UZXJtaW5hdGlvbi5tbSAqLzsgfTsKIAkJOTNCNkEwRTYwQjBCQ0E1QzAw
RjUwMjdBIC8qIENvbnRleHRNZW51LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5M0I2QTBFNTBCMEJDQTVDMDBGNTAyN0EgLyogQ29udGV4dE1lbnUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk5M0I2QTBF
ODBCMEJDQTY3MDBGNTAyN0EgLyogQ29udGV4dE1lbnUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNCNkEwRTcwQjBCQ0E2NzAwRjUwMjdBIC8qIENv
bnRleHRNZW51LmNwcCAqLzsgfTsKIAkJOTNCNkEwRUEwQjBCQ0E4NDAwRjUwMjdBIC8qIENvbnRl
eHRNZW51TWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTNCNkEwRTkwQjBCQ0E4NDAwRjUwMjdBIC8qIENvbnRleHRNZW51TWFjLm1tICovOyB9Owog
CQk5M0I3MEQ2MzA5RUIwQzdDMDA5RDg0NjggLyogSlNET01CaW5kaW5nLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQjcwRDQ3MDlFQjBDN0MwMDlE
ODQ2OCAvKiBKU0RPTUJpbmRpbmcuY3BwICovOyB9OwogCQk5M0I3MEQ2NDA5RUIwQzdDMDA5RDg0
NjggLyogSlNET01CaW5kaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5M0I3MEQ0ODA5RUIwQzdDMDA5RDg0NjggLyogSlNET01CaW5kaW5nLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTg5ODIsNyAr
ODk4MSw2IEBACiAJCTkzQjJEODE1MEY5OTIwRDIwMDZBRTZCMiAvKiBTdWRkZW5UZXJtaW5hdGlv
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdWRkZW5UZXJtaW5hdGlvbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0IyRDgxNzBGOTkyMEVFMDA2QUU2QjIg
LyogU3VkZGVuVGVybWluYXRpb24ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBTdWRkZW5UZXJtaW5hdGlvbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJOTNCNkEwRTUwQjBCQ0E1QzAwRjUwMjdBIC8qIENvbnRleHRNZW51LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDb250ZXh0TWVudS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk5M0I2QTBFNzBCMEJDQTY3MDBGNTAyN0EgLyogQ29udGV4dE1lbnUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbnRleHRNZW51LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNCNkEwRTkwQjBCQ0E4NDAwRjUwMjdBIC8qIENv
bnRleHRNZW51TWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IENvbnRleHRNZW51TWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0I3MEQ0
NzA5RUIwQzdDMDA5RDg0NjggLyogSlNET01CaW5kaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKU0RPTUJpbmRpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk5M0I3MEQ0ODA5RUIwQzdDMDA5RDg0NjggLyogSlNET01CaW5kaW5nLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0RPTUJpbmRpbmcuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE3NTA1LDcgKzE3NTAzLDYgQEAKIAkJCQlCQ0M4Q0ZDQTA5
ODZDRDI0MDAxNDBCRjIgLyogQ29sb3JEYXRhLmdwZXJmICovLAogCQkJCTQxRDAxNUM5MEY0QjVD
NzEwMDRBNjYyRiAvKiBDb250ZW50VHlwZS5jcHAgKi8sCiAJCQkJNDFEMDE1QzgwRjRCNUM3MTAw
NEE2NjJGIC8qIENvbnRlbnRUeXBlLmggKi8sCi0JCQkJOTNCNkEwRTcwQjBCQ0E2NzAwRjUwMjdB
IC8qIENvbnRleHRNZW51LmNwcCAqLywKIAkJCQk5M0I2QTBFNTBCMEJDQTVDMDBGNTAyN0EgLyog
Q29udGV4dE1lbnUuaCAqLywKIAkJCQkwNjAyN0NBQzBCMUNCRkMwMDA4ODRCMkQgLyogQ29udGV4
dE1lbnVJdGVtLmggKi8sCiAJCQkJRDhCNjE1MkUxMDMyNDk1MTAwQzg1NTRBIC8qIENvb2tpZS5o
ICovLApAQCAtMjE4NzEsNyArMjE4NjgsNiBAQAogCQkJCUE4MTg3MjFGMDk3N0QzQzAwMDU4MjZE
OSAvKiBDb250YWluZXJOb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNUVCOTgwMEU4MjA3
MjUwMEIyNTk2NSAvKiBDb250ZW50RGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MUQwMTVD
QjBGNEI1QzcxMDA0QTY2MkYgLyogQ29udGVudFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJ
OTNCNkEwRTgwQjBCQ0E2NzAwRjUwMjdBIC8qIENvbnRleHRNZW51LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTA2NUFENEY2MEIwQzJFREEwMDVBMkIxRCAvKiBDb250ZXh0TWVudUNvbnRyb2xsZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDYwMjdDQjMwQjFDQzAzRDAwODg0QjJEIC8qIENvbnRl
eHRNZW51SXRlbU1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzQjZBMEVBMEIwQkNBODQwMEY1
MDI3QSAvKiBDb250ZXh0TWVudU1hYy5tbSBpbiBTb3VyY2VzICovLApJbmRleDogV2ViQ29yZS9w
YWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdl
L0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDczMTY5KQorKysgV2ViQ29yZS9w
YWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMz
LDcgQEAKICNpbmNsdWRlICJDaHJvbWUuaCIKICNpbmNsdWRlICJDb250ZXh0TWVudS5oIgogI2lu
Y2x1ZGUgIkNvbnRleHRNZW51Q2xpZW50LmgiCisjaW5jbHVkZSAiQ29udGV4dE1lbnVJdGVtLmgi
CiAjaW5jbHVkZSAiQ29udGV4dE1lbnVQcm92aWRlci5oIgogI2luY2x1ZGUgIkRvY3VtZW50Lmgi
CiAjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgpAQCAtNTAsNiArNTEsNyBAQAogI2luY2x1
ZGUgIkhpdFRlc3RSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1
ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgi
CiAjaW5jbHVkZSAiTW91c2VFdmVudC5oIgogI2luY2x1ZGUgIk5hdmlnYXRpb25BY3Rpb24uaCIK
ICNpbmNsdWRlICJOb2RlLmgiCkBAIC02Myw2ICs2NSwxMCBAQAogI2luY2x1ZGUgIlRleHRJdGVy
YXRvci5oIgogI2luY2x1ZGUgIldpbmRvd0ZlYXR1cmVzLmgiCiAjaW5jbHVkZSAibWFya3VwLmgi
CisjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVW5pY29kZS5oPgorCit1c2luZyBuYW1lc3BhY2UgV1RG
OwordXNpbmcgbmFtZXNwYWNlIFVuaWNvZGU7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
NzAsNiArNzYsNyBAQCBDb250ZXh0TWVudUNvbnRyb2xsZXI6OkNvbnRleHRNZW51Q29udHJvCiAg
ICAgOiBtX3BhZ2UocGFnZSkKICAgICAsIG1fY2xpZW50KGNsaWVudCkKICAgICAsIG1fY29udGV4
dE1lbnUoMCkKKyAgICAsIG1faGl0VGVzdFJlc3VsdChIaXRUZXN0UmVzdWx0KEludFBvaW50KCkp
KQogewogICAgIEFTU0VSVF9BUkcocGFnZSwgcGFnZSk7CiAgICAgQVNTRVJUX0FSRyhjbGllbnQs
IGNsaWVudCk7CkBAIC05Myw3ICsxMDAsOSBAQCB2b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6
aGFuZGxlQ29udGV4CiAgICAgbV9jb250ZXh0TWVudS5zZXQoY3JlYXRlQ29udGV4dE1lbnUoZXZl
bnQpKTsKICAgICBpZiAoIW1fY29udGV4dE1lbnUpCiAgICAgICAgIHJldHVybjsKLSAgICBtX2Nv
bnRleHRNZW51LT5wb3B1bGF0ZSgpOworCisgICAgcG9wdWxhdGUoKTsKKwogICAgIHNob3dDb250
ZXh0TWVudShldmVudCk7CiB9CiAKQEAgLTExMyw4ICsxMjIsOSBAQCB2b2lkIENvbnRleHRNZW51
Q29udHJvbGxlcjo6c2hvd0NvbnRleHRNCiAKIENvbnRleHRNZW51KiBDb250ZXh0TWVudUNvbnRy
b2xsZXI6OmNyZWF0ZUNvbnRleHRNZW51KEV2ZW50KiBldmVudCkKIHsKLSAgIGlmICghZXZlbnQt
PmlzTW91c2VFdmVudCgpKQorICAgIGlmICghZXZlbnQtPmlzTW91c2VFdmVudCgpKQogICAgICAg
ICByZXR1cm4gMDsKKwogICAgIE1vdXNlRXZlbnQqIG1vdXNlRXZlbnQgPSBzdGF0aWNfY2FzdDxN
b3VzZUV2ZW50Kj4oZXZlbnQpOwogICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0KG1vdXNlRXZlbnQt
PmFic29sdXRlTG9jYXRpb24oKSk7CiAKQEAgLTEyMywxNCArMTMzLDE3IEBAIENvbnRleHRNZW51
KiBDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNyZWEKIAogICAgIGlmICghcmVzdWx0LmlubmVyTm9u
U2hhcmVkTm9kZSgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gbmV3IENvbnRleHRN
ZW51KHJlc3VsdCk7CisKKyAgICBtX2hpdFRlc3RSZXN1bHQgPSByZXN1bHQ7CisKKyAgICByZXR1
cm4gbmV3IENvbnRleHRNZW51KCk7CiB9CiAKIHZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjpz
aG93Q29udGV4dE1lbnUoRXZlbnQqIGV2ZW50KQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAg
ICAgaWYgKG1fcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5lbmFibGVkKCkpCi0gICAgICAg
IG1fY29udGV4dE1lbnUtPmFkZEluc3BlY3RFbGVtZW50SXRlbSgpOworICAgICAgICBhZGRJbnNw
ZWN0RWxlbWVudEl0ZW0oKTsKICNlbmRpZgogICAgIFBsYXRmb3JtTWVudURlc2NyaXB0aW9uIGN1
c3RvbU1lbnUgPSBtX2NsaWVudC0+Z2V0Q3VzdG9tTWVudUZyb21EZWZhdWx0SXRlbXMobV9jb250
ZXh0TWVudS5nZXQoKSk7CiAgICAgbV9jb250ZXh0TWVudS0+c2V0UGxhdGZvcm1EZXNjcmlwdGlv
bihjdXN0b21NZW51KTsKQEAgLTE2MSw1NCArMTc0LDUzIEBAIHZvaWQgQ29udGV4dE1lbnVDb250
cm9sbGVyOjpjb250ZXh0TWVudUkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIEhpdFRl
c3RSZXN1bHQgcmVzdWx0ID0gbV9jb250ZXh0TWVudS0+aGl0VGVzdFJlc3VsdCgpOwotICAgIEZy
YW1lKiBmcmFtZSA9IHJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKS0+ZG9jdW1lbnQoKS0+ZnJh
bWUoKTsKKyAgICBGcmFtZSogZnJhbWUgPSBtX2hpdFRlc3RSZXN1bHQuaW5uZXJOb25TaGFyZWRO
b2RlKCktPmRvY3VtZW50KCktPmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgc3dpdGNoIChpdGVtLT5hY3Rpb24oKSkgewogICAgIGNhc2UgQ29udGV4dE1l
bnVJdGVtVGFnT3BlbkxpbmtJbk5ld1dpbmRvdzoKLSAgICAgICAgb3Blbk5ld1dpbmRvdyhyZXN1
bHQuYWJzb2x1dGVMaW5rVVJMKCksIGZyYW1lKTsKKyAgICAgICAgb3Blbk5ld1dpbmRvdyhtX2hp
dFRlc3RSZXN1bHQuYWJzb2x1dGVMaW5rVVJMKCksIGZyYW1lKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdEb3dubG9hZExpbmtUb0Rpc2s6CiAgICAgICAgIC8v
IEZJWE1FOiBTb21lIGRheSB3ZSBzaG91bGQgYmUgYWJsZSB0byBkbyB0aGlzIGZyb20gd2l0aGlu
IFdlYkNvcmUuCi0gICAgICAgIG1fY2xpZW50LT5kb3dubG9hZFVSTChyZXN1bHQuYWJzb2x1dGVM
aW5rVVJMKCkpOworICAgICAgICBtX2NsaWVudC0+ZG93bmxvYWRVUkwobV9oaXRUZXN0UmVzdWx0
LmFic29sdXRlTGlua1VSTCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDb250ZXh0TWVu
dUl0ZW1UYWdDb3B5TGlua1RvQ2xpcGJvYXJkOgotICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPmNv
cHlVUkwocmVzdWx0LmFic29sdXRlTGlua1VSTCgpLCByZXN1bHQudGV4dENvbnRlbnQoKSk7Cisg
ICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+Y29weVVSTChtX2hpdFRlc3RSZXN1bHQuYWJzb2x1dGVM
aW5rVVJMKCksIG1faGl0VGVzdFJlc3VsdC50ZXh0Q29udGVudCgpKTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdPcGVuSW1hZ2VJbk5ld1dpbmRvdzoKLSAgICAg
ICAgb3Blbk5ld1dpbmRvdyhyZXN1bHQuYWJzb2x1dGVJbWFnZVVSTCgpLCBmcmFtZSk7CisgICAg
ICAgIG9wZW5OZXdXaW5kb3cobV9oaXRUZXN0UmVzdWx0LmFic29sdXRlSW1hZ2VVUkwoKSwgZnJh
bWUpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0Rvd25sb2Fk
SW1hZ2VUb0Rpc2s6CiAgICAgICAgIC8vIEZJWE1FOiBTb21lIGRheSB3ZSBzaG91bGQgYmUgYWJs
ZSB0byBkbyB0aGlzIGZyb20gd2l0aGluIFdlYkNvcmUuCi0gICAgICAgIG1fY2xpZW50LT5kb3du
bG9hZFVSTChyZXN1bHQuYWJzb2x1dGVJbWFnZVVSTCgpKTsKKyAgICAgICAgbV9jbGllbnQtPmRv
d25sb2FkVVJMKG1faGl0VGVzdFJlc3VsdC5hYnNvbHV0ZUltYWdlVVJMKCkpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0NvcHlJbWFnZVRvQ2xpcGJvYXJkOgog
ICAgICAgICAvLyBGSVhNRTogVGhlIFBhc3RlYm9hcmQgY2xhc3MgaXMgbm90IHdyaXR0ZW4geWV0
CiAgICAgICAgIC8vIEZvciBub3csIGNhbGwgaW50byB0aGUgY2xpZW50LiBUaGlzIGlzIHRlbXBv
cmFyeSEKLSAgICAgICAgZnJhbWUtPmVkaXRvcigpLT5jb3B5SW1hZ2UocmVzdWx0KTsKKyAgICAg
ICAgZnJhbWUtPmVkaXRvcigpLT5jb3B5SW1hZ2UobV9oaXRUZXN0UmVzdWx0KTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdPcGVuTWVkaWFJbk5ld1dpbmRvdzoK
LSAgICAgICAgb3Blbk5ld1dpbmRvdyhyZXN1bHQuYWJzb2x1dGVNZWRpYVVSTCgpLCBmcmFtZSk7
CisgICAgICAgIG9wZW5OZXdXaW5kb3cobV9oaXRUZXN0UmVzdWx0LmFic29sdXRlTWVkaWFVUkwo
KSwgZnJhbWUpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0Nv
cHlNZWRpYUxpbmtUb0NsaXBib2FyZDoKLSAgICAgICAgZnJhbWUtPmVkaXRvcigpLT5jb3B5VVJM
KHJlc3VsdC5hYnNvbHV0ZU1lZGlhVVJMKCksIHJlc3VsdC50ZXh0Q29udGVudCgpKTsKKyAgICAg
ICAgZnJhbWUtPmVkaXRvcigpLT5jb3B5VVJMKG1faGl0VGVzdFJlc3VsdC5hYnNvbHV0ZU1lZGlh
VVJMKCksIG1faGl0VGVzdFJlc3VsdC50ZXh0Q29udGVudCgpKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdUb2dnbGVNZWRpYUNvbnRyb2xzOgotICAgICAgICBy
ZXN1bHQudG9nZ2xlTWVkaWFDb250cm9sc0Rpc3BsYXkoKTsKKyAgICAgICAgbV9oaXRUZXN0UmVz
dWx0LnRvZ2dsZU1lZGlhQ29udHJvbHNEaXNwbGF5KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgQ29udGV4dE1lbnVJdGVtVGFnVG9nZ2xlTWVkaWFMb29wOgotICAgICAgICByZXN1bHQudG9n
Z2xlTWVkaWFMb29wUGxheWJhY2soKTsKKyAgICAgICAgbV9oaXRUZXN0UmVzdWx0LnRvZ2dsZU1l
ZGlhTG9vcFBsYXliYWNrKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ29udGV4dE1lbnVJ
dGVtVGFnRW50ZXJWaWRlb0Z1bGxzY3JlZW46Ci0gICAgICAgIHJlc3VsdC5lbnRlckZ1bGxzY3Jl
ZW5Gb3JWaWRlbygpOworICAgICAgICBtX2hpdFRlc3RSZXN1bHQuZW50ZXJGdWxsc2NyZWVuRm9y
VmlkZW8oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdNZWRp
YVBsYXlQYXVzZToKLSAgICAgICAgcmVzdWx0LnRvZ2dsZU1lZGlhUGxheVN0YXRlKCk7CisgICAg
ICAgIG1faGl0VGVzdFJlc3VsdC50b2dnbGVNZWRpYVBsYXlTdGF0ZSgpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ01lZGlhTXV0ZToKLSAgICAgICAgcmVzdWx0
LnRvZ2dsZU1lZGlhTXV0ZVN0YXRlKCk7CisgICAgICAgIG1faGl0VGVzdFJlc3VsdC50b2dnbGVN
ZWRpYU11dGVTdGF0ZSgpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENvbnRleHRNZW51SXRl
bVRhZ09wZW5GcmFtZUluTmV3V2luZG93OiB7CiAgICAgICAgIERvY3VtZW50TG9hZGVyKiBsb2Fk
ZXIgPSBmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCk7CkBAIC0yNzIsMTAgKzI4NCwx
MCBAQCB2b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6Y29udGV4dE1lbnVJCiAgICAgICAgIG1f
Y2xpZW50LT5sb29rVXBJbkRpY3Rpb25hcnkoZnJhbWUpOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5MaW5rOgotICAgICAgICBpZiAoRnJhbWUqIHRhcmdl
dEZyYW1lID0gcmVzdWx0LnRhcmdldEZyYW1lKCkpCi0gICAgICAgICAgICB0YXJnZXRGcmFtZS0+
bG9hZGVyKCktPmxvYWRGcmFtZVJlcXVlc3QoRnJhbWVMb2FkUmVxdWVzdChSZXNvdXJjZVJlcXVl
c3QocmVzdWx0LmFic29sdXRlTGlua1VSTCgpLCBmcmFtZS0+bG9hZGVyKCktPm91dGdvaW5nUmVm
ZXJyZXIoKSkpLCBmYWxzZSwgZmFsc2UsIDAsIDAsIFNlbmRSZWZlcnJlcik7CisgICAgICAgIGlm
IChGcmFtZSogdGFyZ2V0RnJhbWUgPSBtX2hpdFRlc3RSZXN1bHQudGFyZ2V0RnJhbWUoKSkKKyAg
ICAgICAgICAgIHRhcmdldEZyYW1lLT5sb2FkZXIoKS0+bG9hZEZyYW1lUmVxdWVzdChGcmFtZUxv
YWRSZXF1ZXN0KFJlc291cmNlUmVxdWVzdChtX2hpdFRlc3RSZXN1bHQuYWJzb2x1dGVMaW5rVVJM
KCksIGZyYW1lLT5sb2FkZXIoKS0+b3V0Z29pbmdSZWZlcnJlcigpKSksIGZhbHNlLCBmYWxzZSwg
MCwgMCwgU2VuZFJlZmVycmVyKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgb3Blbk5ld1dp
bmRvdyhyZXN1bHQuYWJzb2x1dGVMaW5rVVJMKCksIGZyYW1lKTsKKyAgICAgICAgICAgIG9wZW5O
ZXdXaW5kb3cobV9oaXRUZXN0UmVzdWx0LmFic29sdXRlTGlua1VSTCgpLCBmcmFtZSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQm9sZDoKICAgICAgICAgZnJh
bWUtPmVkaXRvcigpLT5jb21tYW5kKCJUb2dnbGVCb2xkIikuZXhlY3V0ZSgpOwpAQCAtMjk0LDcg
KzMwNiw3IEBAIHZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjpjb250ZXh0TWVudUkKICAgICAg
ICAgRXhjZXB0aW9uQ29kZSBlYzsKICAgICAgICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdl
ID0gZnJhbWUtPnNlbGVjdGlvbigpLT50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgICAgICBpZiAo
IXNlbGVjdGVkUmFuZ2UgfHwgc2VsZWN0ZWRSYW5nZS0+Y29sbGFwc2VkKGVjKSkgewotICAgICAg
ICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpLT5k
b2N1bWVudCgpOworICAgICAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9oaXRUZXN0UmVz
dWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpLT5kb2N1bWVudCgpOwogICAgICAgICAgICAgc2VsZWN0
ZWRSYW5nZSA9IGRvY3VtZW50LT5jcmVhdGVSYW5nZSgpOwogICAgICAgICAgICAgc2VsZWN0ZWRS
YW5nZS0+c2VsZWN0Tm9kZShkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCksIGVjKTsKICAgICAg
ICAgfQpAQCAtMzg0LDEzICszOTYsMTMgQEAgdm9pZCBDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNv
bnRleHRNZW51SQogICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPnRvZ2dsZUF1dG9tYXRpY1NwZWxs
aW5nQ29ycmVjdGlvbigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENvbnRleHRNZW51SXRl
bVRhZ0NoYW5nZUJhY2s6Ci0gICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+Y2hhbmdlQmFja1RvUmVw
bGFjZWRTdHJpbmcocmVzdWx0LnJlcGxhY2VkU3RyaW5nKCkpOworICAgICAgICBmcmFtZS0+ZWRp
dG9yKCktPmNoYW5nZUJhY2tUb1JlcGxhY2VkU3RyaW5nKG1faGl0VGVzdFJlc3VsdC5yZXBsYWNl
ZFN0cmluZygpKTsKICAgICAgICAgYnJlYWs7CiAjZW5kaWYKICNpZiBFTkFCTEUoSU5TUEVDVE9S
KQogICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnSW5zcGVjdEVsZW1lbnQ6CiAgICAgICAgIGlm
IChQYWdlKiBwYWdlID0gZnJhbWUtPnBhZ2UoKSkKLSAgICAgICAgICAgIHBhZ2UtPmluc3BlY3Rv
ckNvbnRyb2xsZXIoKS0+aW5zcGVjdChyZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCkpOworICAg
ICAgICAgICAgcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5pbnNwZWN0KG1faGl0VGVzdFJl
c3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKSk7CiAgICAgICAgIGJyZWFrOwogI2VuZGlmCiAgICAg
ZGVmYXVsdDoKQEAgLTM5OCw2ICs0MTAsODI5IEBAIHZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVy
Ojpjb250ZXh0TWVudUkKICAgICB9CiB9CiAKK3ZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjph
cHBlbmRJdGVtKENvbnRleHRNZW51SXRlbSYgbWVudUl0ZW0sIENvbnRleHRNZW51KiBwYXJlbnRN
ZW51KQoreworICAgIGNoZWNrT3JFbmFibGVJZk5lZWRlZChtZW51SXRlbSk7CisgICAgaWYgKHBh
cmVudE1lbnUpCisgICAgICAgIHBhcmVudE1lbnUtPmFwcGVuZEl0ZW0obWVudUl0ZW0pOworfQor
CitzdGF0aWMgUGFzc093blB0cjxDb250ZXh0TWVudUl0ZW0+IHNlcGFyYXRvckl0ZW0oKQorewor
ICAgIHJldHVybiBuZXcgQ29udGV4dE1lbnVJdGVtKFNlcGFyYXRvclR5cGUsIENvbnRleHRNZW51
SXRlbVRhZ05vQWN0aW9uLCBTdHJpbmcoKSk7Cit9CisKK3ZvaWQgQ29udGV4dE1lbnVDb250cm9s
bGVyOjpjcmVhdGVBbmRBcHBlbmRGb250U3ViTWVudShDb250ZXh0TWVudUl0ZW0mIGZvbnRNZW51
SXRlbSkKK3sKKyAgICBDb250ZXh0TWVudSBmb250TWVudTsKKworI2lmIFBMQVRGT1JNKE1BQykK
KyAgICBDb250ZXh0TWVudUl0ZW0gc2hvd0ZvbnRzKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRl
bVRhZ1Nob3dGb250cywgY29udGV4dE1lbnVJdGVtVGFnU2hvd0ZvbnRzKCkpOworI2VuZGlmCisg
ICAgQ29udGV4dE1lbnVJdGVtIGJvbGQoQ2hlY2thYmxlQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJ
dGVtVGFnQm9sZCwgY29udGV4dE1lbnVJdGVtVGFnQm9sZCgpKTsKKyAgICBDb250ZXh0TWVudUl0
ZW0gaXRhbGljKENoZWNrYWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0l0YWxpYywg
Y29udGV4dE1lbnVJdGVtVGFnSXRhbGljKCkpOworICAgIENvbnRleHRNZW51SXRlbSB1bmRlcmxp
bmUoQ2hlY2thYmxlQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnVW5kZXJsaW5lLCBjb250
ZXh0TWVudUl0ZW1UYWdVbmRlcmxpbmUoKSk7CisgICAgQ29udGV4dE1lbnVJdGVtIG91dGxpbmUo
QWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnT3V0bGluZSwgY29udGV4dE1lbnVJdGVtVGFn
T3V0bGluZSgpKTsKKyNpZiBQTEFURk9STShNQUMpCisgICAgQ29udGV4dE1lbnVJdGVtIHN0eWxl
cyhBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTdHlsZXMsIGNvbnRleHRNZW51SXRlbVRh
Z1N0eWxlcygpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gc2hvd0NvbG9ycyhBY3Rpb25UeXBlLCBD
b250ZXh0TWVudUl0ZW1UYWdTaG93Q29sb3JzLCBjb250ZXh0TWVudUl0ZW1UYWdTaG93Q29sb3Jz
KCkpOworI2VuZGlmCisKKyNpZiBQTEFURk9STShNQUMpCisgICAgYXBwZW5kSXRlbShzaG93Rm9u
dHMsICZmb250TWVudSk7CisjZW5kaWYKKyAgICBhcHBlbmRJdGVtKGJvbGQsICZmb250TWVudSk7
CisgICAgYXBwZW5kSXRlbShpdGFsaWMsICZmb250TWVudSk7CisgICAgYXBwZW5kSXRlbSh1bmRl
cmxpbmUsICZmb250TWVudSk7CisgICAgYXBwZW5kSXRlbShvdXRsaW5lLCAmZm9udE1lbnUpOwor
I2lmIFBMQVRGT1JNKE1BQykKKyAgICBhcHBlbmRJdGVtKHN0eWxlcywgJmZvbnRNZW51KTsKKyAg
ICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCksICZmb250TWVudSk7CisgICAgYXBwZW5kSXRl
bShzaG93Q29sb3JzLCAmZm9udE1lbnUpOworI2VuZGlmCisKKyAgICBmb250TWVudUl0ZW0uc2V0
U3ViTWVudSgmZm9udE1lbnUpOworfQorCisjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIp
CisKKyNpZiAhUExBVEZPUk0oR1RLKQorCit2b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6Y3Jl
YXRlQW5kQXBwZW5kU3BlbGxpbmdBbmRHcmFtbWFyU3ViTWVudShDb250ZXh0TWVudUl0ZW0mIHNw
ZWxsaW5nQW5kR3JhbW1hck1lbnVJdGVtKQoreworICAgIENvbnRleHRNZW51IHNwZWxsaW5nQW5k
R3JhbW1hck1lbnU7CisKKyAgICBDb250ZXh0TWVudUl0ZW0gc2hvd1NwZWxsaW5nUGFuZWwoQWN0
aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU2hvd1NwZWxsaW5nUGFuZWwsIAorICAgICAgICBj
b250ZXh0TWVudUl0ZW1UYWdTaG93U3BlbGxpbmdQYW5lbCh0cnVlKSk7CisgICAgQ29udGV4dE1l
bnVJdGVtIGNoZWNrU3BlbGxpbmcoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnQ2hlY2tT
cGVsbGluZywgCisgICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ0NoZWNrU3BlbGxpbmcoKSk7Cisg
ICAgQ29udGV4dE1lbnVJdGVtIGNoZWNrQXNZb3VUeXBlKENoZWNrYWJsZUFjdGlvblR5cGUsIENv
bnRleHRNZW51SXRlbVRhZ0NoZWNrU3BlbGxpbmdXaGlsZVR5cGluZywgCisgICAgICAgIGNvbnRl
eHRNZW51SXRlbVRhZ0NoZWNrU3BlbGxpbmdXaGlsZVR5cGluZygpKTsKKyAgICBDb250ZXh0TWVu
dUl0ZW0gZ3JhbW1hcldpdGhTcGVsbGluZyhDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVu
dUl0ZW1UYWdDaGVja0dyYW1tYXJXaXRoU3BlbGxpbmcsIAorICAgICAgICBjb250ZXh0TWVudUl0
ZW1UYWdDaGVja0dyYW1tYXJXaXRoU3BlbGxpbmcoKSk7CisjaWYgUExBVEZPUk0oTUFDKSAmJiAh
ZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQorICAgIENvbnRleHRNZW51SXRlbSBjb3JyZWN0
U3BlbGxpbmcoQ2hlY2thYmxlQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnQ29ycmVjdFNw
ZWxsaW5nQXV0b21hdGljYWxseSwgCisgICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ0NvcnJlY3RT
cGVsbGluZ0F1dG9tYXRpY2FsbHkoKSk7CisjZW5kaWYKKworICAgIGFwcGVuZEl0ZW0oc2hvd1Nw
ZWxsaW5nUGFuZWwsICZzcGVsbGluZ0FuZEdyYW1tYXJNZW51KTsKKyAgICBhcHBlbmRJdGVtKGNo
ZWNrU3BlbGxpbmcsICZzcGVsbGluZ0FuZEdyYW1tYXJNZW51KTsKKyNpZiBQTEFURk9STShNQUMp
ICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpCisgICAgYXBwZW5kSXRlbSgqc2VwYXJh
dG9ySXRlbSgpLCAmc3BlbGxpbmdBbmRHcmFtbWFyTWVudSk7CisjZW5kaWYKKyAgICBhcHBlbmRJ
dGVtKGNoZWNrQXNZb3VUeXBlLCAmc3BlbGxpbmdBbmRHcmFtbWFyTWVudSk7CisgICAgYXBwZW5k
SXRlbShncmFtbWFyV2l0aFNwZWxsaW5nLCAmc3BlbGxpbmdBbmRHcmFtbWFyTWVudSk7CisjaWYg
UExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQorICAgIGFwcGVu
ZEl0ZW0oY29ycmVjdFNwZWxsaW5nLCAmc3BlbGxpbmdBbmRHcmFtbWFyTWVudSk7CisjZW5kaWYK
KworICAgIHNwZWxsaW5nQW5kR3JhbW1hck1lbnVJdGVtLnNldFN1Yk1lbnUoJnNwZWxsaW5nQW5k
R3JhbW1hck1lbnUpOworfQorCisjZW5kaWYgLy8gIVBMQVRGT1JNKEdUSykKKworI2Vsc2UKKwor
dm9pZCBDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNyZWF0ZUFuZEFwcGVuZFNwZWxsaW5nQW5kR3Jh
bW1hclN1Yk1lbnUoQ29udGV4dE1lbnVJdGVtJiBzcGVsbGluZ0FuZEdyYW1tYXJNZW51SXRlbSkK
K3sKKyAgICBDb250ZXh0TWVudSBzcGVsbGluZ01lbnU7CisKKyAgICBDb250ZXh0TWVudUl0ZW0g
c2hvd1NwZWxsaW5nUGFuZWwoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU2hvd1NwZWxs
aW5nUGFuZWwsIAorICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdTaG93U3BlbGxpbmdQYW5lbCh0
cnVlKSk7CisgICAgQ29udGV4dE1lbnVJdGVtIGNoZWNrU3BlbGxpbmcoQWN0aW9uVHlwZSwgQ29u
dGV4dE1lbnVJdGVtVGFnQ2hlY2tTcGVsbGluZywgCisgICAgICAgIGNvbnRleHRNZW51SXRlbVRh
Z0NoZWNrU3BlbGxpbmcoKSk7CisgICAgQ29udGV4dE1lbnVJdGVtIGNoZWNrQXNZb3VUeXBlKENo
ZWNrYWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0NoZWNrU3BlbGxpbmdXaGlsZVR5
cGluZywgCisgICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ0NoZWNrU3BlbGxpbmdXaGlsZVR5cGlu
ZygpKTsKKworICAgIGFwcGVuZEl0ZW0oc2hvd1NwZWxsaW5nUGFuZWwsICZzcGVsbGluZ01lbnUp
OworICAgIGFwcGVuZEl0ZW0oY2hlY2tTcGVsbGluZywgJnNwZWxsaW5nTWVudSk7CisgICAgYXBw
ZW5kSXRlbShjaGVja0FzWW91VHlwZSwgJnNwZWxsaW5nTWVudSk7CisKKyAgICBzcGVsbGluZ01l
bnVJdGVtLnNldFN1Yk1lbnUoJnNwZWxsaW5nTWVudSk7Cit9CisKKyNlbmRpZgorCisjaWYgUExB
VEZPUk0oTUFDKQorCit2b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6Y3JlYXRlQW5kQXBwZW5k
U3BlZWNoU3ViTWVudShDb250ZXh0TWVudUl0ZW0mIHNwZWVjaE1lbnVJdGVtKQoreworICAgIENv
bnRleHRNZW51IHNwZWVjaE1lbnU7CisKKyAgICBDb250ZXh0TWVudUl0ZW0gc3RhcnQoQWN0aW9u
VHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU3RhcnRTcGVha2luZywgY29udGV4dE1lbnVJdGVtVGFn
U3RhcnRTcGVha2luZygpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gc3RvcChBY3Rpb25UeXBlLCBD
b250ZXh0TWVudUl0ZW1UYWdTdG9wU3BlYWtpbmcsIGNvbnRleHRNZW51SXRlbVRhZ1N0b3BTcGVh
a2luZygpKTsKKworICAgIGFwcGVuZEl0ZW0oc3RhcnQsICZzcGVlY2hNZW51KTsKKyAgICBhcHBl
bmRJdGVtKHN0b3AsICZzcGVlY2hNZW51KTsKKworICAgIHNwZWVjaE1lbnVJdGVtLnNldFN1Yk1l
bnUoJnNwZWVjaE1lbnUpOworfQorCisjZW5kaWYKKyAKKyNpZiAhUExBVEZPUk0oR1RLKQorCit2
b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6Y3JlYXRlQW5kQXBwZW5kV3JpdGluZ0RpcmVjdGlv
blN1Yk1lbnUoQ29udGV4dE1lbnVJdGVtJiB3cml0aW5nRGlyZWN0aW9uTWVudUl0ZW0pCit7Cisg
ICAgQ29udGV4dE1lbnUgd3JpdGluZ0RpcmVjdGlvbk1lbnU7CisKKyAgICBDb250ZXh0TWVudUl0
ZW0gZGVmYXVsdEl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnRGVmYXVsdERpcmVj
dGlvbiwgCisgICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ0RlZmF1bHREaXJlY3Rpb24oKSk7Cisg
ICAgQ29udGV4dE1lbnVJdGVtIGx0cihDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0
ZW1UYWdMZWZ0VG9SaWdodCwgY29udGV4dE1lbnVJdGVtVGFnTGVmdFRvUmlnaHQoKSk7CisgICAg
Q29udGV4dE1lbnVJdGVtIHJ0bChDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1U
YWdSaWdodFRvTGVmdCwgY29udGV4dE1lbnVJdGVtVGFnUmlnaHRUb0xlZnQoKSk7CisKKyAgICBh
cHBlbmRJdGVtKGRlZmF1bHRJdGVtLCAmd3JpdGluZ0RpcmVjdGlvbk1lbnUpOworICAgIGFwcGVu
ZEl0ZW0obHRyLCAmd3JpdGluZ0RpcmVjdGlvbk1lbnUpOworICAgIGFwcGVuZEl0ZW0ocnRsLCAm
d3JpdGluZ0RpcmVjdGlvbk1lbnUpOworCisgICAgd3JpdGluZ0RpcmVjdGlvbk1lbnVJdGVtLnNl
dFN1Yk1lbnUoJndyaXRpbmdEaXJlY3Rpb25NZW51KTsKK30KKwordm9pZCBDb250ZXh0TWVudUNv
bnRyb2xsZXI6OmNyZWF0ZUFuZEFwcGVuZFRleHREaXJlY3Rpb25TdWJNZW51KENvbnRleHRNZW51
SXRlbSYgdGV4dERpcmVjdGlvbk1lbnVJdGVtKQoreworICAgIENvbnRleHRNZW51IHRleHREaXJl
Y3Rpb25NZW51OworCisgICAgQ29udGV4dE1lbnVJdGVtIGRlZmF1bHRJdGVtKEFjdGlvblR5cGUs
IENvbnRleHRNZW51SXRlbVRhZ1RleHREaXJlY3Rpb25EZWZhdWx0LCBjb250ZXh0TWVudUl0ZW1U
YWdEZWZhdWx0RGlyZWN0aW9uKCkpOworICAgIENvbnRleHRNZW51SXRlbSBsdHIoQ2hlY2thYmxl
QWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnVGV4dERpcmVjdGlvbkxlZnRUb1JpZ2h0LCBj
b250ZXh0TWVudUl0ZW1UYWdMZWZ0VG9SaWdodCgpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gcnRs
KENoZWNrYWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1RleHREaXJlY3Rpb25SaWdo
dFRvTGVmdCwgY29udGV4dE1lbnVJdGVtVGFnUmlnaHRUb0xlZnQoKSk7CisKKyAgICBhcHBlbmRJ
dGVtKGRlZmF1bHRJdGVtLCAmdGV4dERpcmVjdGlvbk1lbnUpOworICAgIGFwcGVuZEl0ZW0obHRy
LCAmdGV4dERpcmVjdGlvbk1lbnUpOworICAgIGFwcGVuZEl0ZW0ocnRsLCAmdGV4dERpcmVjdGlv
bk1lbnUpOworCisgICAgdGV4dERpcmVjdGlvbk1lbnVJdGVtLnNldFN1Yk1lbnUoJnRleHREaXJl
Y3Rpb25NZW51KTsKK30KKworI2VuZGlmCisKKyNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVk
KEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQorCit2
b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6Y3JlYXRlQW5kQXBwZW5kU3Vic3RpdHV0aW9uc1N1
Yk1lbnUoQ29udGV4dE1lbnVJdGVtJiBzdWJzdGl0dXRpb25zTWVudUl0ZW0pCit7CisgICAgQ29u
dGV4dE1lbnUgc3Vic3RpdHV0aW9uc01lbnU7CisKKyAgICBDb250ZXh0TWVudUl0ZW0gc2hvd1N1
YnN0aXR1dGlvbnMoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU2hvd1N1YnN0aXR1dGlv
bnMsIGNvbnRleHRNZW51SXRlbVRhZ1Nob3dTdWJzdGl0dXRpb25zKHRydWUpKTsKKyAgICBDb250
ZXh0TWVudUl0ZW0gc21hcnRDb3B5UGFzdGUoQ2hlY2thYmxlQWN0aW9uVHlwZSwgQ29udGV4dE1l
bnVJdGVtVGFnU21hcnRDb3B5UGFzdGUsIGNvbnRleHRNZW51SXRlbVRhZ1NtYXJ0Q29weVBhc3Rl
KCkpOworICAgIENvbnRleHRNZW51SXRlbSBzbWFydFF1b3RlcyhDaGVja2FibGVBY3Rpb25UeXBl
LCBDb250ZXh0TWVudUl0ZW1UYWdTbWFydFF1b3RlcywgY29udGV4dE1lbnVJdGVtVGFnU21hcnRR
dW90ZXMoKSk7CisgICAgQ29udGV4dE1lbnVJdGVtIHNtYXJ0RGFzaGVzKENoZWNrYWJsZUFjdGlv
blR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1NtYXJ0RGFzaGVzLCBjb250ZXh0TWVudUl0ZW1UYWdT
bWFydERhc2hlcygpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gc21hcnRMaW5rcyhDaGVja2FibGVB
Y3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTbWFydExpbmtzLCBjb250ZXh0TWVudUl0ZW1U
YWdTbWFydExpbmtzKCkpOworICAgIENvbnRleHRNZW51SXRlbSB0ZXh0UmVwbGFjZW1lbnQoQ2hl
Y2thYmxlQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnVGV4dFJlcGxhY2VtZW50LCBjb250
ZXh0TWVudUl0ZW1UYWdUZXh0UmVwbGFjZW1lbnQoKSk7CisKKyAgICBhcHBlbmRJdGVtKHNob3dT
dWJzdGl0dXRpb25zLCAmc3Vic3RpdHV0aW9uc01lbnUpOworICAgIGFwcGVuZEl0ZW0oKnNlcGFy
YXRvckl0ZW0oKSwgJnN1YnN0aXR1dGlvbnNNZW51KTsKKyAgICBhcHBlbmRJdGVtKHNtYXJ0Q29w
eVBhc3RlLCAmc3Vic3RpdHV0aW9uc01lbnUpOworICAgIGFwcGVuZEl0ZW0oc21hcnRRdW90ZXMs
ICZzdWJzdGl0dXRpb25zTWVudSk7CisgICAgYXBwZW5kSXRlbShzbWFydERhc2hlcywgJnN1YnN0
aXR1dGlvbnNNZW51KTsKKyAgICBhcHBlbmRJdGVtKHNtYXJ0TGlua3MsICZzdWJzdGl0dXRpb25z
TWVudSk7CisgICAgYXBwZW5kSXRlbSh0ZXh0UmVwbGFjZW1lbnQsICZzdWJzdGl0dXRpb25zTWVu
dSk7CisKKyAgICBzdWJzdGl0dXRpb25zTWVudUl0ZW0uc2V0U3ViTWVudSgmc3Vic3RpdHV0aW9u
c01lbnUpOworfQorCit2b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6Y3JlYXRlQW5kQXBwZW5k
VHJhbnNmb3JtYXRpb25zU3ViTWVudShDb250ZXh0TWVudUl0ZW0mIHRyYW5zZm9ybWF0aW9uc01l
bnVJdGVtKQoreworICAgIENvbnRleHRNZW51IHRyYW5zZm9ybWF0aW9uc01lbnU7CisKKyAgICBD
b250ZXh0TWVudUl0ZW0gbWFrZVVwcGVyQ2FzZShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1U
YWdNYWtlVXBwZXJDYXNlLCBjb250ZXh0TWVudUl0ZW1UYWdNYWtlVXBwZXJDYXNlKCkpOworICAg
IENvbnRleHRNZW51SXRlbSBtYWtlTG93ZXJDYXNlKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRl
bVRhZ01ha2VMb3dlckNhc2UsIGNvbnRleHRNZW51SXRlbVRhZ01ha2VMb3dlckNhc2UoKSk7Cisg
ICAgQ29udGV4dE1lbnVJdGVtIGNhcGl0YWxpemUoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVt
VGFnQ2FwaXRhbGl6ZSwgY29udGV4dE1lbnVJdGVtVGFnQ2FwaXRhbGl6ZSgpKTsKKworICAgIGFw
cGVuZEl0ZW0obWFrZVVwcGVyQ2FzZSwgJnRyYW5zZm9ybWF0aW9uc01lbnUpOworICAgIGFwcGVu
ZEl0ZW0obWFrZUxvd2VyQ2FzZSwgJnRyYW5zZm9ybWF0aW9uc01lbnUpOworICAgIGFwcGVuZEl0
ZW0oY2FwaXRhbGl6ZSwgJnRyYW5zZm9ybWF0aW9uc01lbnUpOworCisgICAgdHJhbnNmb3JtYXRp
b25zTWVudUl0ZW0uc2V0U3ViTWVudSgmdHJhbnNmb3JtYXRpb25zTWVudSk7Cit9CisKKyNlbmRp
ZgorCitzdGF0aWMgYm9vbCBzZWxlY3Rpb25Db250YWluc1Bvc3NpYmxlV29yZChGcmFtZSogZnJh
bWUpCit7CisgICAgLy8gQ3VycmVudCBhbGdvcml0aG06IGxvb2sgZm9yIGEgY2hhcmFjdGVyIHRo
YXQncyBub3QganVzdCBhIHNlcGFyYXRvci4KKyAgICBmb3IgKFRleHRJdGVyYXRvciBpdChmcmFt
ZS0+c2VsZWN0aW9uKCktPnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOyAhaXQuYXRFbmQoKTsg
aXQuYWR2YW5jZSgpKSB7CisgICAgICAgIGludCBsZW5ndGggPSBpdC5sZW5ndGgoKTsKKyAgICAg
ICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSBpdC5jaGFyYWN0ZXJzKCk7CisgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCisgICAgICAgICAgICBpZiAoIShjYXRlZ29y
eShjaGFyYWN0ZXJzW2ldKSAmIChTZXBhcmF0b3JfU3BhY2UgfCBTZXBhcmF0b3JfTGluZSB8IFNl
cGFyYXRvcl9QYXJhZ3JhcGgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6cG9w
dWxhdGUoKQoreworICAgIENvbnRleHRNZW51SXRlbSBPcGVuTGlua0l0ZW0oQWN0aW9uVHlwZSwg
Q29udGV4dE1lbnVJdGVtVGFnT3BlbkxpbmssIGNvbnRleHRNZW51SXRlbVRhZ09wZW5MaW5rKCkp
OworICAgIENvbnRleHRNZW51SXRlbSBPcGVuTGlua0luTmV3V2luZG93SXRlbShBY3Rpb25UeXBl
LCBDb250ZXh0TWVudUl0ZW1UYWdPcGVuTGlua0luTmV3V2luZG93LCAKKyAgICAgICAgY29udGV4
dE1lbnVJdGVtVGFnT3BlbkxpbmtJbk5ld1dpbmRvdygpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0g
RG93bmxvYWRGaWxlSXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdEb3dubG9hZExp
bmtUb0Rpc2ssIAorICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdEb3dubG9hZExpbmtUb0Rpc2so
KSk7CisgICAgQ29udGV4dE1lbnVJdGVtIENvcHlMaW5rSXRlbShBY3Rpb25UeXBlLCBDb250ZXh0
TWVudUl0ZW1UYWdDb3B5TGlua1RvQ2xpcGJvYXJkLCAKKyAgICAgICAgY29udGV4dE1lbnVJdGVt
VGFnQ29weUxpbmtUb0NsaXBib2FyZCgpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gT3BlbkltYWdl
SW5OZXdXaW5kb3dJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ09wZW5JbWFnZUlu
TmV3V2luZG93LCAKKyAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnT3BlbkltYWdlSW5OZXdXaW5k
b3coKSk7CisgICAgQ29udGV4dE1lbnVJdGVtIERvd25sb2FkSW1hZ2VJdGVtKEFjdGlvblR5cGUs
IENvbnRleHRNZW51SXRlbVRhZ0Rvd25sb2FkSW1hZ2VUb0Rpc2ssIAorICAgICAgICBjb250ZXh0
TWVudUl0ZW1UYWdEb3dubG9hZEltYWdlVG9EaXNrKCkpOworICAgIENvbnRleHRNZW51SXRlbSBD
b3B5SW1hZ2VJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0NvcHlJbWFnZVRvQ2xp
cGJvYXJkLCAKKyAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnQ29weUltYWdlVG9DbGlwYm9hcmQo
KSk7CisgICAgQ29udGV4dE1lbnVJdGVtIE9wZW5NZWRpYUluTmV3V2luZG93SXRlbShBY3Rpb25U
eXBlLCBDb250ZXh0TWVudUl0ZW1UYWdPcGVuTWVkaWFJbk5ld1dpbmRvdywgU3RyaW5nKCkpOwor
ICAgIENvbnRleHRNZW51SXRlbSBDb3B5TWVkaWFMaW5rSXRlbShBY3Rpb25UeXBlLCBDb250ZXh0
TWVudUl0ZW1UYWdDb3B5TWVkaWFMaW5rVG9DbGlwYm9hcmQsIAorICAgICAgICBTdHJpbmcoKSk7
CisgICAgQ29udGV4dE1lbnVJdGVtIE1lZGlhUGxheVBhdXNlKEFjdGlvblR5cGUsIENvbnRleHRN
ZW51SXRlbVRhZ01lZGlhUGxheVBhdXNlLCAKKyAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnTWVk
aWFQbGF5KCkpOworICAgIENvbnRleHRNZW51SXRlbSBNZWRpYU11dGUoQWN0aW9uVHlwZSwgQ29u
dGV4dE1lbnVJdGVtVGFnTWVkaWFNdXRlLCAKKyAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnTWVk
aWFNdXRlKCkpOworICAgIENvbnRleHRNZW51SXRlbSBUb2dnbGVNZWRpYUNvbnRyb2xzKENoZWNr
YWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1RvZ2dsZU1lZGlhQ29udHJvbHMsIAor
ICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdUb2dnbGVNZWRpYUNvbnRyb2xzKCkpOworICAgIENv
bnRleHRNZW51SXRlbSBUb2dnbGVNZWRpYUxvb3AoQ2hlY2thYmxlQWN0aW9uVHlwZSwgQ29udGV4
dE1lbnVJdGVtVGFnVG9nZ2xlTWVkaWFMb29wLCAKKyAgICAgICAgY29udGV4dE1lbnVJdGVtVGFn
VG9nZ2xlTWVkaWFMb29wKCkpOworICAgIENvbnRleHRNZW51SXRlbSBFbnRlclZpZGVvRnVsbHNj
cmVlbihBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdFbnRlclZpZGVvRnVsbHNjcmVlbiwg
CisgICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ0VudGVyVmlkZW9GdWxsc2NyZWVuKCkpOworI2lm
IFBMQVRGT1JNKE1BQykKKyAgICBDb250ZXh0TWVudUl0ZW0gU2VhcmNoU3BvdGxpZ2h0SXRlbShB
Y3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTZWFyY2hJblNwb3RsaWdodCwgCisgICAgICAg
IGNvbnRleHRNZW51SXRlbVRhZ1NlYXJjaEluU3BvdGxpZ2h0KCkpOworICAgIENvbnRleHRNZW51
SXRlbSBMb29rSW5EaWN0aW9uYXJ5SXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdM
b29rVXBJbkRpY3Rpb25hcnksIAorICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdMb29rVXBJbkRp
Y3Rpb25hcnkoKSk7CisjZW5kaWYKKyNpZiAhUExBVEZPUk0oR1RLKQorICAgIENvbnRleHRNZW51
SXRlbSBTZWFyY2hXZWJJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1NlYXJjaFdl
YiwgY29udGV4dE1lbnVJdGVtVGFnU2VhcmNoV2ViKCkpOworI2VuZGlmCisgICAgQ29udGV4dE1l
bnVJdGVtIENvcHlJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0NvcHksIGNvbnRl
eHRNZW51SXRlbVRhZ0NvcHkoKSk7CisgICAgQ29udGV4dE1lbnVJdGVtIEJhY2tJdGVtKEFjdGlv
blR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0dvQmFjaywgY29udGV4dE1lbnVJdGVtVGFnR29CYWNr
KCkpOworICAgIENvbnRleHRNZW51SXRlbSBGb3J3YXJkSXRlbShBY3Rpb25UeXBlLCBDb250ZXh0
TWVudUl0ZW1UYWdHb0ZvcndhcmQsICBjb250ZXh0TWVudUl0ZW1UYWdHb0ZvcndhcmQoKSk7Cisg
ICAgQ29udGV4dE1lbnVJdGVtIFN0b3BJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRh
Z1N0b3AsIGNvbnRleHRNZW51SXRlbVRhZ1N0b3AoKSk7CisgICAgQ29udGV4dE1lbnVJdGVtIFJl
bG9hZEl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnUmVsb2FkLCBjb250ZXh0TWVu
dUl0ZW1UYWdSZWxvYWQoKSk7CisgICAgQ29udGV4dE1lbnVJdGVtIE9wZW5GcmFtZUl0ZW0oQWN0
aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnT3BlbkZyYW1lSW5OZXdXaW5kb3csIAorICAgICAg
ICBjb250ZXh0TWVudUl0ZW1UYWdPcGVuRnJhbWVJbk5ld1dpbmRvdygpKTsKKyAgICBDb250ZXh0
TWVudUl0ZW0gTm9HdWVzc2VzSXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdOb0d1
ZXNzZXNGb3VuZCwgCisgICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ05vR3Vlc3Nlc0ZvdW5kKCkp
OworICAgIENvbnRleHRNZW51SXRlbSBJZ25vcmVTcGVsbGluZ0l0ZW0oQWN0aW9uVHlwZSwgQ29u
dGV4dE1lbnVJdGVtVGFnSWdub3JlU3BlbGxpbmcsIAorICAgICAgICBjb250ZXh0TWVudUl0ZW1U
YWdJZ25vcmVTcGVsbGluZygpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gTGVhcm5TcGVsbGluZ0l0
ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnTGVhcm5TcGVsbGluZywgCisgICAgICAg
IGNvbnRleHRNZW51SXRlbVRhZ0xlYXJuU3BlbGxpbmcoKSk7CisgICAgQ29udGV4dE1lbnVJdGVt
IElnbm9yZUdyYW1tYXJJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0lnbm9yZUdy
YW1tYXIsIAorICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdJZ25vcmVHcmFtbWFyKCkpOworICAg
IENvbnRleHRNZW51SXRlbSBDdXRJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0N1
dCwgY29udGV4dE1lbnVJdGVtVGFnQ3V0KCkpOworICAgIENvbnRleHRNZW51SXRlbSBQYXN0ZUl0
ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnUGFzdGUsIGNvbnRleHRNZW51SXRlbVRh
Z1Bhc3RlKCkpOworI2lmIFBMQVRGT1JNKEdUSykKKyAgICBDb250ZXh0TWVudUl0ZW0gRGVsZXRl
SXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdEZWxldGUsIGNvbnRleHRNZW51SXRl
bVRhZ0RlbGV0ZSgpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gU2VsZWN0QWxsSXRlbShBY3Rpb25U
eXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTZWxlY3RBbGwsIGNvbnRleHRNZW51SXRlbVRhZ1NlbGVj
dEFsbCgpKTsKKyNlbmRpZgorCisgICAgTm9kZSogbm9kZSA9IG1faGl0VGVzdFJlc3VsdC5pbm5l
ck5vblNoYXJlZE5vZGUoKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybjsKKyNpZiBQ
TEFURk9STShHVEspCisgICAgaWYgKCFtX2hpdFRlc3RSZXN1bHQuaXNDb250ZW50RWRpdGFibGUo
KSAmJiAobm9kZS0+aXNFbGVtZW50Tm9kZSgpICYmIHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2Rl
KS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkpCisgICAgICAgIHJldHVybjsKKyNlbmRpZgorICAg
IEZyYW1lKiBmcmFtZSA9IG5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCk7CisgICAgaWYgKCFmcmFt
ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX2hpdFRlc3RSZXN1bHQuaXNDb250ZW50
RWRpdGFibGUoKSkgeworICAgICAgICBGcmFtZUxvYWRlciogbG9hZGVyID0gZnJhbWUtPmxvYWRl
cigpOworICAgICAgICBLVVJMIGxpbmtVUkwgPSBtX2hpdFRlc3RSZXN1bHQuYWJzb2x1dGVMaW5r
VVJMKCk7CisgICAgICAgIGlmICghbGlua1VSTC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGlm
IChsb2FkZXItPmNhbkhhbmRsZVJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0KGxpbmtVUkwpKSkgewor
ICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oT3BlbkxpbmtJdGVtLCBtX2NvbnRleHRNZW51Lmdl
dCgpKTsKKyAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKE9wZW5MaW5rSW5OZXdXaW5kb3dJdGVt
LCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKERvd25s
b2FkRmlsZUl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgYXBwZW5kSXRlbShDb3B5TGlua0l0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOworICAg
ICAgICB9CisKKyAgICAgICAgS1VSTCBpbWFnZVVSTCA9IG1faGl0VGVzdFJlc3VsdC5hYnNvbHV0
ZUltYWdlVVJMKCk7CisgICAgICAgIGlmICghaW1hZ2VVUkwuaXNFbXB0eSgpKSB7CisgICAgICAg
ICAgICBpZiAoIWxpbmtVUkwuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0o
KnNlcGFyYXRvckl0ZW0oKSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisKKyAgICAgICAgICAgIGFw
cGVuZEl0ZW0oT3BlbkltYWdlSW5OZXdXaW5kb3dJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsK
KyAgICAgICAgICAgIGFwcGVuZEl0ZW0oRG93bmxvYWRJbWFnZUl0ZW0sIG1fY29udGV4dE1lbnUu
Z2V0KCkpOworICAgICAgICAgICAgaWYgKGltYWdlVVJMLmlzTG9jYWxGaWxlKCkgfHwgbV9oaXRU
ZXN0UmVzdWx0LmltYWdlKCkpCisgICAgICAgICAgICAgICAgYXBwZW5kSXRlbShDb3B5SW1hZ2VJ
dGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIEtVUkwgbWVk
aWFVUkwgPSBtX2hpdFRlc3RSZXN1bHQuYWJzb2x1dGVNZWRpYVVSTCgpOworICAgICAgICBpZiAo
IW1lZGlhVVJMLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgaWYgKCFsaW5rVVJMLmlzRW1wdHko
KSB8fCAhaW1hZ2VVUkwuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oKnNl
cGFyYXRvckl0ZW0oKSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisKKyAgICAgICAgICAgIGFwcGVu
ZEl0ZW0oTWVkaWFQbGF5UGF1c2UsIG1fY29udGV4dE1lbnUuZ2V0KCkpOworICAgICAgICAgICAg
YXBwZW5kSXRlbShNZWRpYU11dGUsIG1fY29udGV4dE1lbnUuZ2V0KCkpOworICAgICAgICAgICAg
YXBwZW5kSXRlbShUb2dnbGVNZWRpYUNvbnRyb2xzLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAg
ICAgICAgICAgIGFwcGVuZEl0ZW0oVG9nZ2xlTWVkaWFMb29wLCBtX2NvbnRleHRNZW51LmdldCgp
KTsKKyAgICAgICAgICAgIGFwcGVuZEl0ZW0oRW50ZXJWaWRlb0Z1bGxzY3JlZW4sIG1fY29udGV4
dE1lbnUuZ2V0KCkpOworCisgICAgICAgICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCks
IG1fY29udGV4dE1lbnUuZ2V0KCkpOworICAgICAgICAgICAgYXBwZW5kSXRlbShDb3B5TWVkaWFM
aW5rSXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAgICAgICBhcHBlbmRJdGVtKE9w
ZW5NZWRpYUluTmV3V2luZG93SXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAgIH0K
KworICAgICAgICBpZiAoaW1hZ2VVUkwuaXNFbXB0eSgpICYmIGxpbmtVUkwuaXNFbXB0eSgpICYm
IG1lZGlhVVJMLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgaWYgKG1faGl0VGVzdFJlc3VsdC5p
c1NlbGVjdGVkKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uQ29udGFpbnNQb3Nz
aWJsZVdvcmQoZnJhbWUpKSB7CisjaWYgUExBVEZPUk0oTUFDKQorICAgICAgICAgICAgICAgICAg
ICBhcHBlbmRJdGVtKFNlYXJjaFNwb3RsaWdodEl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOwor
I2VuZGlmCisjaWYgIVBMQVRGT1JNKEdUSykKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kSXRl
bShTZWFyY2hXZWJJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgYXBwZW5kSXRlbSgqc2VwYXJhdG9ySXRlbSgpLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyNl
bmRpZgorI2lmIFBMQVRGT1JNKE1BQykKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kSXRlbShM
b29rSW5EaWN0aW9uYXJ5SXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAgICAgICAg
ICAgICAgIGFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSwgbV9jb250ZXh0TWVudS5nZXQoKSk7
CisjZW5kaWYKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYXBwZW5kSXRlbShD
b3B5SXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisjaWYgUExBVEZPUk0oTUFDKQorICAgICAg
ICAgICAgICAgIGFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSwgbV9jb250ZXh0TWVudS5nZXQo
KSk7CisgICAgICAgICAgICAgICAgQ29udGV4dE1lbnVJdGVtIFNwZWVjaE1lbnVJdGVtKFN1Ym1l
bnVUeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTcGVlY2hNZW51LCBjb250ZXh0TWVudUl0ZW1UYWdT
cGVlY2hNZW51KCkpOworICAgICAgICAgICAgICAgIGNyZWF0ZUFuZEFwcGVuZFNwZWVjaFN1Yk1l
bnUoU3BlZWNoTWVudUl0ZW0pOworICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oU3BlZWNoTWVu
dUl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOworI2VuZGlmICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgfSBlbHNlIHsKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorICAgICAgICAgICAgICAg
IGlmICghKGZyYW1lLT5wYWdlKCkgJiYgZnJhbWUtPnBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxl
cigpLT5oYXNJbnNwZWN0b3JGcm9udGVuZENsaWVudCgpKSkgeworI2VuZGlmCisgICAgICAgICAg
ICAgICAgaWYgKGZyYW1lLT5wYWdlKCkgJiYgZnJhbWUtPnBhZ2UoKS0+YmFja0ZvcndhcmQoKS0+
Y2FuR29CYWNrT3JGb3J3YXJkKC0xKSkKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kSXRlbShC
YWNrSXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisKKyAgICAgICAgICAgICAgICBpZiAoZnJh
bWUtPnBhZ2UoKSAmJiBmcmFtZS0+cGFnZSgpLT5iYWNrRm9yd2FyZCgpLT5jYW5Hb0JhY2tPckZv
cndhcmQoMSkpCisgICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oRm9yd2FyZEl0ZW0sIG1f
Y29udGV4dE1lbnUuZ2V0KCkpOworCisgICAgICAgICAgICAgICAgLy8gdXNlIGlzTG9hZGluZ0lu
QVBJU2Vuc2UgcmF0aGVyIHRoYW4gaXNMb2FkaW5nIGJlY2F1c2UgU3RvcC9SZWxvYWQgYXJlCisg
ICAgICAgICAgICAgICAgLy8gaW50ZW5kZWQgdG8gbWF0Y2ggV2ViS2l0J3MgQVBJLCBub3QgV2Vi
Q29yZSdzIGludGVybmFsIG5vdGlvbiBvZiBsb2FkaW5nIHN0YXR1cworICAgICAgICAgICAgICAg
IGlmIChsb2FkZXItPmRvY3VtZW50TG9hZGVyKCktPmlzTG9hZGluZ0luQVBJU2Vuc2UoKSkKKyAg
ICAgICAgICAgICAgICAgICAgYXBwZW5kSXRlbShTdG9wSXRlbSwgbV9jb250ZXh0TWVudS5nZXQo
KSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBhcHBlbmRJdGVt
KFJlbG9hZEl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOworI2lmIEVOQUJMRShJTlNQRUNUT1Ip
CisgICAgICAgICAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgICAgICAgICBpZiAoZnJhbWUt
PnBhZ2UoKSAmJiBmcmFtZSAhPSBmcmFtZS0+cGFnZSgpLT5tYWluRnJhbWUoKSkKKyAgICAgICAg
ICAgICAgICAgICAgYXBwZW5kSXRlbShPcGVuRnJhbWVJdGVtLCBtX2NvbnRleHRNZW51LmdldCgp
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gZWxzZSB7IC8vIE1ha2UgYW4gZWRp
dGluZyBjb250ZXh0IG1lbnUKKyAgICAgICAgU2VsZWN0aW9uQ29udHJvbGxlciogc2VsZWN0aW9u
ID0gZnJhbWUtPnNlbGVjdGlvbigpOworICAgICAgICBib29sIGluUGFzc3dvcmRGaWVsZCA9IHNl
bGVjdGlvbi0+aXNJblBhc3N3b3JkRmllbGQoKTsKKyAgICAgICAgYm9vbCBzcGVsbENoZWNraW5n
RW5hYmxlZCA9IGZyYW1lLT5lZGl0b3IoKS0+aXNTcGVsbENoZWNraW5nRW5hYmxlZEZvcihub2Rl
KTsKKyAgICAgICAgCisgICAgICAgIGlmICghaW5QYXNzd29yZEZpZWxkICYmIHNwZWxsQ2hlY2tp
bmdFbmFibGVkKSB7CisgICAgICAgICAgICAvLyBDb25zaWRlciBhZGRpbmcgc3BlbGxpbmctcmVs
YXRlZCBvciBncmFtbWFyLXJlbGF0ZWQgY29udGV4dCBtZW51IGl0ZW1zIChuZXZlciBib3RoLCBz
aW5jZSBhIHNpbmdsZSBzZWxlY3RlZCByYW5nZQorICAgICAgICAgICAgLy8gaXMgbmV2ZXIgY29u
c2lkZXJlZCBhIG1pc3NwZWxsaW5nIGFuZCBiYWQgZ3JhbW1hciBhdCB0aGUgc2FtZSB0aW1lKQor
ICAgICAgICAgICAgYm9vbCBtaXNzcGVsbGluZzsKKyAgICAgICAgICAgIGJvb2wgYmFkR3JhbW1h
cjsKKyAgICAgICAgICAgIFZlY3RvcjxTdHJpbmc+IGd1ZXNzZXMgPSBmcmFtZS0+ZWRpdG9yKCkt
Pmd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsU2VsZWN0aW9uKG1pc3NwZWxsaW5n
LCBiYWRHcmFtbWFyKTsKKyAgICAgICAgICAgIGlmIChtaXNzcGVsbGluZyB8fCBiYWRHcmFtbWFy
KSB7CisgICAgICAgICAgICAgICAgc2l6ZV90IHNpemUgPSBndWVzc2VzLnNpemUoKTsKKyAgICAg
ICAgICAgICAgICBpZiAoc2l6ZSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIElmIHRo
ZXJlJ3MgYmFkIGdyYW1tYXIgYnV0IG5vIHN1Z2dlc3Rpb25zIChlLmcuLCByZXBlYXRlZCB3b3Jk
KSwganVzdCBsZWF2ZSBvZmYgdGhlIHN1Z2dlc3Rpb25zCisgICAgICAgICAgICAgICAgICAgIC8v
IGxpc3QgYW5kIHRyYWlsaW5nIHNlcGFyYXRvciByYXRoZXIgdGhhbiBhZGRpbmcgYSAiTm8gR3Vl
c3NlcyBGb3VuZCIgaXRlbSAobWF0Y2hlcyBBcHBLaXQpCisgICAgICAgICAgICAgICAgICAgIGlm
IChtaXNzcGVsbGluZykgeworICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kSXRlbShOb0d1
ZXNzZXNJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBTdHJpbmcgJmd1ZXNzID0gZ3Vlc3Nlc1tpXTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICghZ3Vlc3MuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ29udGV4dE1lbnVJdGVtIGl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJ
dGVtVGFnU3BlbGxpbmdHdWVzcywgZ3Vlc3MpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGFwcGVuZEl0ZW0oaXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYXBw
ZW5kSXRlbSgqc2VwYXJhdG9ySXRlbSgpLCBtX2NvbnRleHRNZW51LmdldCgpKTsgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBpZiAobWlzc3BlbGxpbmcpIHsKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kSXRl
bShJZ25vcmVTcGVsbGluZ0l0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOworICAgICAgICAgICAg
ICAgICAgICBhcHBlbmRJdGVtKExlYXJuU3BlbGxpbmdJdGVtLCBtX2NvbnRleHRNZW51LmdldCgp
KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kSXRl
bShJZ25vcmVHcmFtbWFySXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAgICAgICAg
ICAgYXBwZW5kSXRlbSgqc2VwYXJhdG9ySXRlbSgpLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyNp
ZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5l
ZChCVUlMRElOR19PTl9MRU9QQVJEKQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAvLyBJZiB0aGUgc3RyaW5nIHdhcyBhdXRvY29ycmVjdGVkLCBnZW5lcmF0ZSBhIGNvbnRl
eHR1YWwgbWVudSBpdGVtIGFsbG93aW5nIGl0IHRvIGJlIGNoYW5nZWQgYmFjay4KKyAgICAgICAg
ICAgICAgICBTdHJpbmcgcmVwbGFjZWRTdHJpbmcgPSBtX2hpdFRlc3RSZXN1bHQucmVwbGFjZWRT
dHJpbmcoKTsKKyAgICAgICAgICAgICAgICBpZiAoIXJlcGxhY2VkU3RyaW5nLmlzRW1wdHkoKSkg
eworICAgICAgICAgICAgICAgICAgICBDb250ZXh0TWVudUl0ZW0gaXRlbShBY3Rpb25UeXBlLCBD
b250ZXh0TWVudUl0ZW1UYWdDaGFuZ2VCYWNrLCBjb250ZXh0TWVudUl0ZW1UYWdDaGFuZ2VCYWNr
KHJlcGxhY2VkU3RyaW5nKSk7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oaXRlbSwg
bV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oKnNl
cGFyYXRvckl0ZW0oKSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAgICAgICAgICAgfQor
I2VuZGlmCisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBGcmFtZUxvYWRlciog
bG9hZGVyID0gZnJhbWUtPmxvYWRlcigpOworICAgICAgICBLVVJMIGxpbmtVUkwgPSBtX2hpdFRl
c3RSZXN1bHQuYWJzb2x1dGVMaW5rVVJMKCk7CisgICAgICAgIGlmICghbGlua1VSTC5pc0VtcHR5
KCkpIHsKKyAgICAgICAgICAgIGlmIChsb2FkZXItPmNhbkhhbmRsZVJlcXVlc3QoUmVzb3VyY2VS
ZXF1ZXN0KGxpbmtVUkwpKSkgeworICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oT3BlbkxpbmtJ
dGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKE9w
ZW5MaW5rSW5OZXdXaW5kb3dJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgICAg
ICAgICBhcHBlbmRJdGVtKERvd25sb2FkRmlsZUl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgYXBwZW5kSXRlbShDb3B5TGlua0l0ZW0sIG1fY29u
dGV4dE1lbnUuZ2V0KCkpOworICAgICAgICAgICAgYXBwZW5kSXRlbSgqc2VwYXJhdG9ySXRlbSgp
LCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtX2hpdFRl
c3RSZXN1bHQuaXNTZWxlY3RlZCgpICYmICFpblBhc3N3b3JkRmllbGQgJiYgc2VsZWN0aW9uQ29u
dGFpbnNQb3NzaWJsZVdvcmQoZnJhbWUpKSB7CisjaWYgUExBVEZPUk0oTUFDKQorICAgICAgICAg
ICAgYXBwZW5kSXRlbShTZWFyY2hTcG90bGlnaHRJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsK
KyNlbmRpZgorI2lmICFQTEFURk9STShHVEspCisgICAgICAgICAgICBhcHBlbmRJdGVtKFNlYXJj
aFdlYkl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOworICAgICAgICAgICAgYXBwZW5kSXRlbSgq
c2VwYXJhdG9ySXRlbSgpLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyNlbmRpZgorICAgICAKKyNp
ZiBQTEFURk9STShNQUMpCisgICAgICAgICAgICBhcHBlbmRJdGVtKExvb2tJbkRpY3Rpb25hcnlJ
dGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgICAgIGFwcGVuZEl0ZW0oKnNlcGFy
YXRvckl0ZW0oKSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisjZW5kaWYKKyAgICAgICAgfQorCisg
ICAgICAgIGFwcGVuZEl0ZW0oQ3V0SXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAg
IGFwcGVuZEl0ZW0oQ29weUl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOworICAgICAgICBhcHBl
bmRJdGVtKFBhc3RlSXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisjaWYgUExBVEZPUk0oR1RL
KQorICAgICAgICBhcHBlbmRJdGVtKERlbGV0ZUl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOwor
ICAgICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCksIG1fY29udGV4dE1lbnUuZ2V0KCkp
OworICAgICAgICBhcHBlbmRJdGVtKFNlbGVjdEFsbEl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkp
OworI2VuZGlmCisKKyAgICAgICAgaWYgKCFpblBhc3N3b3JkRmllbGQpIHsKKyAgICAgICAgICAg
IGFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisjaWZu
ZGVmIEJVSUxESU5HX09OX1RJR0VSCisjaWYgIVBMQVRGT1JNKEdUSykKKyAgICAgICAgICAgIENv
bnRleHRNZW51SXRlbSBTcGVsbGluZ0FuZEdyYW1tYXJNZW51SXRlbShTdWJtZW51VHlwZSwgQ29u
dGV4dE1lbnVJdGVtVGFnU3BlbGxpbmdNZW51LCAKKyAgICAgICAgICAgICAgICBjb250ZXh0TWVu
dUl0ZW1UYWdTcGVsbGluZ01lbnUoKSk7CisgICAgICAgICAgICBjcmVhdGVBbmRBcHBlbmRTcGVs
bGluZ0FuZEdyYW1tYXJTdWJNZW51KFNwZWxsaW5nQW5kR3JhbW1hck1lbnVJdGVtKTsKKyAgICAg
ICAgICAgIGFwcGVuZEl0ZW0oU3BlbGxpbmdBbmRHcmFtbWFyTWVudUl0ZW0sIG1fY29udGV4dE1l
bnUuZ2V0KCkpOworI2VuZGlmCisjZWxzZQorICAgICAgICAgICAgQ29udGV4dE1lbnVJdGVtIFNw
ZWxsaW5nTWVudUl0ZW0oU3VibWVudVR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1NwZWxsaW5nTWVu
dSwgCisgICAgICAgICAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnU3BlbGxpbmdNZW51KCkpOwor
ICAgICAgICAgICAgY3JlYXRlQW5kQXBwZW5kU3BlbGxpbmdTdWJNZW51KFNwZWxsaW5nTWVudUl0
ZW0pOworICAgICAgICAgICAgYXBwZW5kSXRlbShTcGVsbGluZ01lbnVJdGVtLCBtX2NvbnRleHRN
ZW51LmdldCgpKTsKKyNlbmRpZgorI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJ
TkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpCisgICAgICAgICAg
ICBDb250ZXh0TWVudUl0ZW0gc3Vic3RpdHV0aW9uc01lbnVJdGVtKFN1Ym1lbnVUeXBlLCBDb250
ZXh0TWVudUl0ZW1UYWdTdWJzdGl0dXRpb25zTWVudSwgCisgICAgICAgICAgICAgICAgY29udGV4
dE1lbnVJdGVtVGFnU3Vic3RpdHV0aW9uc01lbnUoKSk7CisgICAgICAgICAgICBjcmVhdGVBbmRB
cHBlbmRTdWJzdGl0dXRpb25zU3ViTWVudShzdWJzdGl0dXRpb25zTWVudUl0ZW0pOworICAgICAg
ICAgICAgYXBwZW5kSXRlbShzdWJzdGl0dXRpb25zTWVudUl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0
KCkpOworICAgICAgICAgICAgQ29udGV4dE1lbnVJdGVtIHRyYW5zZm9ybWF0aW9uc01lbnVJdGVt
KFN1Ym1lbnVUeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdUcmFuc2Zvcm1hdGlvbnNNZW51LCAKKyAg
ICAgICAgICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdUcmFuc2Zvcm1hdGlvbnNNZW51KCkpOwor
ICAgICAgICAgICAgY3JlYXRlQW5kQXBwZW5kVHJhbnNmb3JtYXRpb25zU3ViTWVudSh0cmFuc2Zv
cm1hdGlvbnNNZW51SXRlbSk7CisgICAgICAgICAgICBhcHBlbmRJdGVtKHRyYW5zZm9ybWF0aW9u
c01lbnVJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyNlbmRpZgorI2lmIFBMQVRGT1JNKEdU
SykKKyAgICAgICAgICAgIGJvb2wgc2hvdWxkU2hvd0ZvbnRNZW51ID0gZnJhbWUtPmVkaXRvcigp
LT5jYW5FZGl0UmljaGx5KCk7CisjZWxzZQorICAgICAgICAgICAgYm9vbCBzaG91bGRTaG93Rm9u
dE1lbnUgPSB0cnVlOworI2VuZGlmCisgICAgICAgICAgICBpZiAoc2hvdWxkU2hvd0ZvbnRNZW51
KSB7CisgICAgICAgICAgICAgICAgQ29udGV4dE1lbnVJdGVtIEZvbnRNZW51SXRlbShTdWJtZW51
VHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnRm9udE1lbnUsIAorICAgICAgICAgICAgICAgICAgICBj
b250ZXh0TWVudUl0ZW1UYWdGb250TWVudSgpKTsKKyAgICAgICAgICAgICAgICBjcmVhdGVBbmRB
cHBlbmRGb250U3ViTWVudShGb250TWVudUl0ZW0pOworICAgICAgICAgICAgICAgIGFwcGVuZEl0
ZW0oRm9udE1lbnVJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgICAgIH0KKyNp
ZiBQTEFURk9STShNQUMpCisgICAgICAgICAgICBDb250ZXh0TWVudUl0ZW0gU3BlZWNoTWVudUl0
ZW0oU3VibWVudVR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1NwZWVjaE1lbnUsIGNvbnRleHRNZW51
SXRlbVRhZ1NwZWVjaE1lbnUoKSk7CisgICAgICAgICAgICBjcmVhdGVBbmRBcHBlbmRTcGVlY2hT
dWJNZW51KFNwZWVjaE1lbnVJdGVtKTsKKyAgICAgICAgICAgIGFwcGVuZEl0ZW0oU3BlZWNoTWVu
dUl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOworI2VuZGlmCisjaWYgIVBMQVRGT1JNKEdUSykK
KyAgICAgICAgICAgIENvbnRleHRNZW51SXRlbSBXcml0aW5nRGlyZWN0aW9uTWVudUl0ZW0oU3Vi
bWVudVR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1dyaXRpbmdEaXJlY3Rpb25NZW51LCAKKyAgICAg
ICAgICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdXcml0aW5nRGlyZWN0aW9uTWVudSgpKTsKKyAg
ICAgICAgICAgIGNyZWF0ZUFuZEFwcGVuZFdyaXRpbmdEaXJlY3Rpb25TdWJNZW51KFdyaXRpbmdE
aXJlY3Rpb25NZW51SXRlbSk7CisgICAgICAgICAgICBhcHBlbmRJdGVtKFdyaXRpbmdEaXJlY3Rp
b25NZW51SXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAgICAgICBpZiAoUGFnZSog
cGFnZSA9IGZyYW1lLT5wYWdlKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoU2V0dGluZ3MqIHNl
dHRpbmdzID0gcGFnZS0+c2V0dGluZ3MoKSkgeworICAgICAgICAgICAgICAgICAgICBib29sIGlu
Y2x1ZGVUZXh0RGlyZWN0aW9uU3VibWVudSA9IHNldHRpbmdzLT50ZXh0RGlyZWN0aW9uU3VibWVu
dUluY2x1c2lvbkJlaGF2aW9yKCkgPT0gVGV4dERpcmVjdGlvblN1Ym1lbnVBbHdheXNJbmNsdWRl
ZAorICAgICAgICAgICAgICAgICAgICAgICAgfHwgKHNldHRpbmdzLT50ZXh0RGlyZWN0aW9uU3Vi
bWVudUluY2x1c2lvbkJlaGF2aW9yKCkgPT0gVGV4dERpcmVjdGlvblN1Ym1lbnVBdXRvbWF0aWNh
bGx5SW5jbHVkZWQgJiYgZnJhbWUtPmVkaXRvcigpLT5oYXNCaWRpU2VsZWN0aW9uKCkpOworICAg
ICAgICAgICAgICAgICAgICBpZiAoaW5jbHVkZVRleHREaXJlY3Rpb25TdWJtZW51KSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBDb250ZXh0TWVudUl0ZW0gVGV4dERpcmVjdGlvbk1lbnVJdGVt
KFN1Ym1lbnVUeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdUZXh0RGlyZWN0aW9uTWVudSwgCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnVGV4dERpcmVjdGlvbk1l
bnUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVBbmRBcHBlbmRUZXh0RGlyZWN0
aW9uU3ViTWVudShUZXh0RGlyZWN0aW9uTWVudUl0ZW0pOworICAgICAgICAgICAgICAgICAgICAg
ICAgYXBwZW5kSXRlbShUZXh0RGlyZWN0aW9uTWVudUl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkp
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorI2VuZGlmCisgICAgICAgIH0KKyAgICB9Cit9CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQor
dm9pZCBDb250ZXh0TWVudUNvbnRyb2xsZXI6OmFkZEluc3BlY3RFbGVtZW50SXRlbSgpCit7Cisg
ICAgTm9kZSogbm9kZSA9IG1faGl0VGVzdFJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKTsKKyAg
ICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybjsKKworICAgIEZyYW1lKiBmcmFtZSA9IG5vZGUt
PmRvY3VtZW50KCktPmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgUGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCk7CisgICAgaWYgKCFwYWdlKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoIXBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgQ29udGV4dE1lbnVJdGVtIEluc3BlY3RFbGVtZW50SXRlbShBY3Rp
b25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdJbnNwZWN0RWxlbWVudCwgY29udGV4dE1lbnVJdGVt
VGFnSW5zcGVjdEVsZW1lbnQoKSk7CisgICAgYXBwZW5kSXRlbSgqc2VwYXJhdG9ySXRlbSgpLCBt
X2NvbnRleHRNZW51LmdldCgpKTsKKyAgICBhcHBlbmRJdGVtKEluc3BlY3RFbGVtZW50SXRlbSwg
bV9jb250ZXh0TWVudS5nZXQoKSk7Cit9CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKwor
dm9pZCBDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNoZWNrT3JFbmFibGVJZk5lZWRlZChDb250ZXh0
TWVudUl0ZW0mIGl0ZW0pIGNvbnN0Cit7CisgICAgaWYgKGl0ZW0udHlwZSgpID09IFNlcGFyYXRv
clR5cGUpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBGcmFtZSogZnJhbWUgPSBtX2hpdFRl
c3RSZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCktPmRvY3VtZW50KCktPmZyYW1lKCk7CisgICAg
aWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gQ3VzdG9tIGl0ZW1zIGFscmVh
ZHkgaGF2ZSBwcm9wZXIgY2hlY2tlZCBhbmQgZW5hYmxlZCB2YWx1ZXMuCisgICAgaWYgKENvbnRl
eHRNZW51SXRlbUJhc2VDdXN0b21UYWcgPD0gaXRlbS5hY3Rpb24oKSAmJiBpdGVtLmFjdGlvbigp
IDw9IENvbnRleHRNZW51SXRlbUxhc3RDdXN0b21UYWcpCisgICAgICAgIHJldHVybjsKKworICAg
IGJvb2wgc2hvdWxkRW5hYmxlID0gdHJ1ZTsKKyAgICBib29sIHNob3VsZENoZWNrID0gZmFsc2U7
IAorCisgICAgc3dpdGNoIChpdGVtLmFjdGlvbigpKSB7CisgICAgICAgIGNhc2UgQ29udGV4dE1l
bnVJdGVtVGFnQ2hlY2tTcGVsbGluZzoKKyAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGZyYW1l
LT5lZGl0b3IoKS0+Y2FuRWRpdCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtVGFnRGVmYXVsdERpcmVjdGlvbjoKKyAgICAgICAgICAgIHNob3VsZENo
ZWNrID0gZmFsc2U7CisgICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmYWxzZTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0xlZnRUb1JpZ2h0Ogor
ICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1JpZ2h0VG9MZWZ0OiB7CisgICAgICAgICAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAgICAgIFJlZlB0cjxDU1NTdHlsZURlY2xh
cmF0aW9uPiBzdHlsZSA9IGZyYW1lLT5kb2N1bWVudCgpLT5jcmVhdGVDU1NTdHlsZURlY2xhcmF0
aW9uKCk7CisgICAgICAgICAgICBTdHJpbmcgZGlyZWN0aW9uID0gaXRlbS5hY3Rpb24oKSA9PSBD
b250ZXh0TWVudUl0ZW1UYWdMZWZ0VG9SaWdodCA/ICJsdHIiIDogInJ0bCI7CisgICAgICAgICAg
ICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlEaXJlY3Rpb24sIGRpcmVjdGlvbiwgZmFs
c2UsIGVjKTsKKyAgICAgICAgICAgIHNob3VsZENoZWNrID0gZnJhbWUtPmVkaXRvcigpLT5zZWxl
Y3Rpb25IYXNTdHlsZShzdHlsZS5nZXQoKSkgIT0gRmFsc2VUcmlTdGF0ZTsKKyAgICAgICAgICAg
IHNob3VsZEVuYWJsZSA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1RleHREaXJlY3Rpb25EZWZhdWx0OiB7CisgICAg
ICAgICAgICBFZGl0b3I6OkNvbW1hbmQgY29tbWFuZCA9IGZyYW1lLT5lZGl0b3IoKS0+Y29tbWFu
ZCgiTWFrZVRleHRXcml0aW5nRGlyZWN0aW9uTmF0dXJhbCIpOworICAgICAgICAgICAgc2hvdWxk
Q2hlY2sgPSBjb21tYW5kLnN0YXRlKCkgPT0gVHJ1ZVRyaVN0YXRlOworICAgICAgICAgICAgc2hv
dWxkRW5hYmxlID0gY29tbWFuZC5pc0VuYWJsZWQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnVGV4dERpcmVjdGlvbkxlZnRU
b1JpZ2h0OiB7CisgICAgICAgICAgICBFZGl0b3I6OkNvbW1hbmQgY29tbWFuZCA9IGZyYW1lLT5l
ZGl0b3IoKS0+Y29tbWFuZCgiTWFrZVRleHRXcml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQiKTsK
KyAgICAgICAgICAgIHNob3VsZENoZWNrID0gY29tbWFuZC5zdGF0ZSgpID09IFRydWVUcmlTdGF0
ZTsKKyAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGNvbW1hbmQuaXNFbmFibGVkKCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRh
Z1RleHREaXJlY3Rpb25SaWdodFRvTGVmdDogeworICAgICAgICAgICAgRWRpdG9yOjpDb21tYW5k
IGNvbW1hbmQgPSBmcmFtZS0+ZWRpdG9yKCktPmNvbW1hbmQoIk1ha2VUZXh0V3JpdGluZ0RpcmVj
dGlvblJpZ2h0VG9MZWZ0Iik7CisgICAgICAgICAgICBzaG91bGRDaGVjayA9IGNvbW1hbmQuc3Rh
dGUoKSA9PSBUcnVlVHJpU3RhdGU7CisgICAgICAgICAgICBzaG91bGRFbmFibGUgPSBjb21tYW5k
LmlzRW5hYmxlZCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBDb250ZXh0TWVudUl0ZW1UYWdDb3B5OgorICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gZnJh
bWUtPmVkaXRvcigpLT5jYW5ESFRNTENvcHkoKSB8fCBmcmFtZS0+ZWRpdG9yKCktPmNhbkNvcHko
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0N1
dDoKKyAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGZyYW1lLT5lZGl0b3IoKS0+Y2FuREhUTUxD
dXQoKSB8fCBmcmFtZS0+ZWRpdG9yKCktPmNhbkN1dCgpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnSWdub3JlU3BlbGxpbmc6CisgICAgICAgIGNh
c2UgQ29udGV4dE1lbnVJdGVtVGFnTGVhcm5TcGVsbGluZzoKKyAgICAgICAgICAgIHNob3VsZEVu
YWJsZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS0+aXNSYW5nZSgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnUGFzdGU6CisgICAgICAgICAgICBzaG91
bGRFbmFibGUgPSBmcmFtZS0+ZWRpdG9yKCktPmNhbkRIVE1MUGFzdGUoKSB8fCBmcmFtZS0+ZWRp
dG9yKCktPmNhblBhc3RlKCk7CisgICAgICAgICAgICBicmVhazsKKyNpZiBQTEFURk9STShHVEsp
CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnRGVsZXRlOgorICAgICAgICAgICAgc2hv
dWxkRW5hYmxlID0gZnJhbWUtPmVkaXRvcigpLT5jYW5EZWxldGUoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1NlbGVjdEFsbDoKKyAgICAgICAg
Y2FzZSBDb250ZXh0TWVudUl0ZW1UYWdJbnB1dE1ldGhvZHM6CisgICAgICAgIGNhc2UgQ29udGV4
dE1lbnVJdGVtVGFnVW5pY29kZToKKyAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IHRydWU7Cisg
ICAgICAgICAgICBicmVhazsKKyNlbmRpZgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRh
Z1VuZGVybGluZTogeworICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgICAg
ICAgICBSZWZQdHI8Q1NTU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUgPSBmcmFtZS0+ZG9jdW1lbnQo
KS0+Y3JlYXRlQ1NTU3R5bGVEZWNsYXJhdGlvbigpOworICAgICAgICAgICAgc3R5bGUtPnNldFBy
b3BlcnR5KENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25zSW5FZmZlY3QsICJ1bmRlcmxp
bmUiLCBmYWxzZSwgZWMpOworICAgICAgICAgICAgc2hvdWxkQ2hlY2sgPSBmcmFtZS0+ZWRpdG9y
KCktPnNlbGVjdGlvbkhhc1N0eWxlKHN0eWxlLmdldCgpKSAhPSBGYWxzZVRyaVN0YXRlOworICAg
ICAgICAgICAgc2hvdWxkRW5hYmxlID0gZnJhbWUtPmVkaXRvcigpLT5jYW5FZGl0UmljaGx5KCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENvbnRleHRNZW51
SXRlbVRhZ0xvb2tVcEluRGljdGlvbmFyeToKKyAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGZy
YW1lLT5zZWxlY3Rpb24oKS0+aXNSYW5nZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQ2hlY2tHcmFtbWFyV2l0aFNwZWxsaW5nOgorI2lmbmRl
ZiBCVUlMRElOR19PTl9USUdFUgorICAgICAgICAgICAgaWYgKGZyYW1lLT5lZGl0b3IoKS0+aXNH
cmFtbWFyQ2hlY2tpbmdFbmFibGVkKCkpCisgICAgICAgICAgICAgICAgc2hvdWxkQ2hlY2sgPSB0
cnVlOworICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gdHJ1ZTsKKyNlbmRpZgorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnSXRhbGljOiB7CisgICAg
ICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAgICAgIFJlZlB0cjxDU1NTdHls
ZURlY2xhcmF0aW9uPiBzdHlsZSA9IGZyYW1lLT5kb2N1bWVudCgpLT5jcmVhdGVDU1NTdHlsZURl
Y2xhcmF0aW9uKCk7CisgICAgICAgICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlG
b250U3R5bGUsICJpdGFsaWMiLCBmYWxzZSwgZWMpOworICAgICAgICAgICAgc2hvdWxkQ2hlY2sg
PSBmcmFtZS0+ZWRpdG9yKCktPnNlbGVjdGlvbkhhc1N0eWxlKHN0eWxlLmdldCgpKSAhPSBGYWxz
ZVRyaVN0YXRlOworICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gZnJhbWUtPmVkaXRvcigpLT5j
YW5FZGl0UmljaGx5KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBj
YXNlIENvbnRleHRNZW51SXRlbVRhZ0JvbGQ6IHsKKyAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOworICAgICAgICAgICAgUmVmUHRyPENTU1N0eWxlRGVjbGFyYXRpb24+IHN0eWxlID0g
ZnJhbWUtPmRvY3VtZW50KCktPmNyZWF0ZUNTU1N0eWxlRGVjbGFyYXRpb24oKTsKKyAgICAgICAg
ICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRXZWlnaHQsICJib2xkIiwgZmFs
c2UsIGVjKTsKKyAgICAgICAgICAgIHNob3VsZENoZWNrID0gZnJhbWUtPmVkaXRvcigpLT5zZWxl
Y3Rpb25IYXNTdHlsZShzdHlsZS5nZXQoKSkgIT0gRmFsc2VUcmlTdGF0ZTsKKyAgICAgICAgICAg
IHNob3VsZEVuYWJsZSA9IGZyYW1lLT5lZGl0b3IoKS0+Y2FuRWRpdFJpY2hseSgpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdP
dXRsaW5lOgorICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gZmFsc2U7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTaG93U3BlbGxpbmdQYW5lbDoK
KyNpZm5kZWYgQlVJTERJTkdfT05fVElHRVIKKyAgICAgICAgICAgIGlmIChmcmFtZS0+ZWRpdG9y
KCktPnNwZWxsaW5nUGFuZWxJc1Nob3dpbmcoKSkKKyAgICAgICAgICAgICAgICBpdGVtLnNldFRp
dGxlKGNvbnRleHRNZW51SXRlbVRhZ1Nob3dTcGVsbGluZ1BhbmVsKGZhbHNlKSk7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgaXRlbS5zZXRUaXRsZShjb250ZXh0TWVudUl0ZW1U
YWdTaG93U3BlbGxpbmdQYW5lbCh0cnVlKSk7CisjZW5kaWYKKyAgICAgICAgICAgIHNob3VsZEVu
YWJsZSA9IGZyYW1lLT5lZGl0b3IoKS0+Y2FuRWRpdCgpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnTm9HdWVzc2VzRm91bmQ6CisgICAgICAgICAg
ICBzaG91bGRFbmFibGUgPSBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IENvbnRleHRNZW51SXRlbVRhZ0NoZWNrU3BlbGxpbmdXaGlsZVR5cGluZzoKKyAgICAgICAgICAg
IHNob3VsZENoZWNrID0gZnJhbWUtPmVkaXRvcigpLT5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5n
RW5hYmxlZCgpOworICAgICAgICAgICAgYnJlYWs7CisjaWYgUExBVEZPUk0oTUFDKQorICAgICAg
ICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1N1YnN0aXR1dGlvbnNNZW51OgorICAgICAgICBjYXNl
IENvbnRleHRNZW51SXRlbVRhZ1RyYW5zZm9ybWF0aW9uc01lbnU6CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTaG93U3Vic3RpdHV0aW9uczoKKyNp
ZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVP
UEFSRCkKKyAgICAgICAgICAgIGlmIChmcmFtZS0+ZWRpdG9yKCktPnN1YnN0aXR1dGlvbnNQYW5l
bElzU2hvd2luZygpKQorICAgICAgICAgICAgICAgIGl0ZW0uc2V0VGl0bGUoY29udGV4dE1lbnVJ
dGVtVGFnU2hvd1N1YnN0aXR1dGlvbnMoZmFsc2UpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBpdGVtLnNldFRpdGxlKGNvbnRleHRNZW51SXRlbVRhZ1Nob3dTdWJzdGl0dXRp
b25zKHRydWUpKTsKKyAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGZyYW1lLT5lZGl0b3IoKS0+
Y2FuRWRpdCgpOworI2VuZGlmCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb250
ZXh0TWVudUl0ZW1UYWdNYWtlVXBwZXJDYXNlOgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRl
bVRhZ01ha2VMb3dlckNhc2U6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQ2FwaXRh
bGl6ZToKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdDaGFuZ2VCYWNrOgorICAgICAg
ICAgICAgc2hvdWxkRW5hYmxlID0gZnJhbWUtPmVkaXRvcigpLT5jYW5FZGl0KCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdDb3JyZWN0U3BlbGxp
bmdBdXRvbWF0aWNhbGx5OgorI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVm
aW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQorICAgICAgICAgICAgc2hvdWxkQ2hlY2sgPSBmcmFt
ZS0+ZWRpdG9yKCktPmlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZCgpOworI2Vu
ZGlmCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdT
bWFydENvcHlQYXN0ZToKKyNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmlu
ZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKKyAgICAgICAgICAgIHNob3VsZENoZWNrID0gZnJhbWUt
PmVkaXRvcigpLT5zbWFydEluc2VydERlbGV0ZUVuYWJsZWQoKTsKKyNlbmRpZgorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU21hcnRRdW90ZXM6Cisj
aWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xF
T1BBUkQpCisgICAgICAgICAgICBzaG91bGRDaGVjayA9IGZyYW1lLT5lZGl0b3IoKS0+aXNBdXRv
bWF0aWNRdW90ZVN1YnN0aXR1dGlvbkVuYWJsZWQoKTsKKyNlbmRpZgorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU21hcnREYXNoZXM6CisjaWYgIWRl
ZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQp
CisgICAgICAgICAgICBzaG91bGRDaGVjayA9IGZyYW1lLT5lZGl0b3IoKS0+aXNBdXRvbWF0aWNE
YXNoU3Vic3RpdHV0aW9uRW5hYmxlZCgpOworI2VuZGlmCisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTbWFydExpbmtzOgorI2lmICFkZWZpbmVkKEJV
SUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQorICAgICAg
ICAgICAgc2hvdWxkQ2hlY2sgPSBmcmFtZS0+ZWRpdG9yKCktPmlzQXV0b21hdGljTGlua0RldGVj
dGlvbkVuYWJsZWQoKTsKKyNlbmRpZgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtVGFnVGV4dFJlcGxhY2VtZW50OgorI2lmICFkZWZpbmVkKEJVSUxESU5H
X09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQorICAgICAgICAgICAg
c2hvdWxkQ2hlY2sgPSBmcmFtZS0+ZWRpdG9yKCktPmlzQXV0b21hdGljVGV4dFJlcGxhY2VtZW50
RW5hYmxlZCgpOworI2VuZGlmCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb250
ZXh0TWVudUl0ZW1UYWdTdG9wU3BlYWtpbmc6CisgICAgICAgICAgICBzaG91bGRFbmFibGUgPSBj
b250cm9sbGVyKCkgJiYgY29udHJvbGxlcigpLT5jbGllbnQoKSAmJiBjb250cm9sbGVyKCktPmNs
aWVudCgpLT5pc1NwZWFraW5nKCk7CisgICAgICAgICAgICBicmVhazsKKyNlbHNlIC8vIFBMQVRG
T1JNKE1BQykgZW5kcyBoZXJlCisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU3RvcFNw
ZWFraW5nOgorICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKyNpZiBQTEFURk9STShHVEspCisg
ICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnR29CYWNrOgorICAgICAgICAgICAgc2hvdWxk
RW5hYmxlID0gZnJhbWUtPnBhZ2UoKSAmJiBmcmFtZS0+cGFnZSgpLT5iYWNrRm9yd2FyZCgpLT5j
YW5Hb0JhY2tPckZvcndhcmQoLTEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtVGFnR29Gb3J3YXJkOgorICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0g
ZnJhbWUtPnBhZ2UoKSAmJiBmcmFtZS0+cGFnZSgpLT5iYWNrRm9yd2FyZCgpLT5jYW5Hb0JhY2tP
ckZvcndhcmQoMSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb250ZXh0TWVu
dUl0ZW1UYWdTdG9wOgorICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gZnJhbWUtPmxvYWRlcigp
LT5kb2N1bWVudExvYWRlcigpLT5pc0xvYWRpbmdJbkFQSVNlbnNlKCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdSZWxvYWQ6CisgICAgICAgICAg
ICBzaG91bGRFbmFibGUgPSAhZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5pc0xv
YWRpbmdJbkFQSVNlbnNlKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb250
ZXh0TWVudUl0ZW1UYWdGb250TWVudToKKyAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGZyYW1l
LT5lZGl0b3IoKS0+Y2FuRWRpdFJpY2hseSgpOworICAgICAgICAgICAgYnJlYWs7CisjZWxzZQor
ICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0dvQmFjazoKKyAgICAgICAgY2FzZSBDb250
ZXh0TWVudUl0ZW1UYWdHb0ZvcndhcmQ6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFn
U3RvcDoKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdSZWxvYWQ6CisgICAgICAgIGNh
c2UgQ29udGV4dE1lbnVJdGVtVGFnRm9udE1lbnU6CisjZW5kaWYKKyAgICAgICAgY2FzZSBDb250
ZXh0TWVudUl0ZW1UYWdOb0FjdGlvbjoKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdP
cGVuTGlua0luTmV3V2luZG93OgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0Rvd25s
b2FkTGlua1RvRGlzazoKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdDb3B5TGlua1Rv
Q2xpcGJvYXJkOgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5JbWFnZUluTmV3
V2luZG93OgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0Rvd25sb2FkSW1hZ2VUb0Rp
c2s6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQ29weUltYWdlVG9DbGlwYm9hcmQ6
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdPcGVu
TWVkaWFJbk5ld1dpbmRvdzoKKyAgICAgICAgICAgIGlmIChtX2hpdFRlc3RSZXN1bHQubWVkaWFJ
c1ZpZGVvKCkpCisgICAgICAgICAgICAgICAgaXRlbS5zZXRUaXRsZShjb250ZXh0TWVudUl0ZW1U
YWdPcGVuVmlkZW9Jbk5ld1dpbmRvdygpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBpdGVtLnNldFRpdGxlKGNvbnRleHRNZW51SXRlbVRhZ09wZW5BdWRpb0luTmV3V2luZG93
KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFn
Q29weU1lZGlhTGlua1RvQ2xpcGJvYXJkOgorICAgICAgICAgICAgaWYgKG1faGl0VGVzdFJlc3Vs
dC5tZWRpYUlzVmlkZW8oKSkKKyAgICAgICAgICAgICAgICBpdGVtLnNldFRpdGxlKGNvbnRleHRN
ZW51SXRlbVRhZ0NvcHlWaWRlb0xpbmtUb0NsaXBib2FyZCgpKTsKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICBpdGVtLnNldFRpdGxlKGNvbnRleHRNZW51SXRlbVRhZ0NvcHlBdWRp
b0xpbmtUb0NsaXBib2FyZCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENv
bnRleHRNZW51SXRlbVRhZ1RvZ2dsZU1lZGlhQ29udHJvbHM6CisgICAgICAgICAgICBzaG91bGRD
aGVjayA9IG1faGl0VGVzdFJlc3VsdC5tZWRpYUNvbnRyb2xzRW5hYmxlZCgpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnVG9nZ2xlTWVkaWFMb29w
OgorICAgICAgICAgICAgc2hvdWxkQ2hlY2sgPSBtX2hpdFRlc3RSZXN1bHQubWVkaWFMb29wRW5h
YmxlZCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVt
VGFnRW50ZXJWaWRlb0Z1bGxzY3JlZW46CisgICAgICAgICAgICBzaG91bGRFbmFibGUgPSBtX2hp
dFRlc3RSZXN1bHQubWVkaWFTdXBwb3J0c0Z1bGxzY3JlZW4oKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5GcmFtZUluTmV3V2luZG93Ogor
ICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1NwZWxsaW5nR3Vlc3M6CisgICAgICAgIGNh
c2UgQ29udGV4dE1lbnVJdGVtVGFnT3RoZXI6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVt
VGFnU2VhcmNoSW5TcG90bGlnaHQ6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU2Vh
cmNoV2ViOgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5XaXRoRGVmYXVsdEFw
cGxpY2F0aW9uOgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVBERkFjdHVhbFNpemU6Cisg
ICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtUERGWm9vbUluOgorICAgICAgICBjYXNlIENvbnRl
eHRNZW51SXRlbVBERlpvb21PdXQ6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtUERGQXV0
b1NpemU6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtUERGU2luZ2xlUGFnZToKKyAgICAg
ICAgY2FzZSBDb250ZXh0TWVudUl0ZW1QREZGYWNpbmdQYWdlczoKKyAgICAgICAgY2FzZSBDb250
ZXh0TWVudUl0ZW1QREZDb250aW51b3VzOgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVBE
Rk5leHRQYWdlOgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVBERlByZXZpb3VzUGFnZToK
KyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdPcGVuTGluazoKKyAgICAgICAgY2FzZSBD
b250ZXh0TWVudUl0ZW1UYWdJZ25vcmVHcmFtbWFyOgorICAgICAgICBjYXNlIENvbnRleHRNZW51
SXRlbVRhZ1NwZWxsaW5nTWVudToKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTaG93
Rm9udHM6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU3R5bGVzOgorICAgICAgICBj
YXNlIENvbnRleHRNZW51SXRlbVRhZ1Nob3dDb2xvcnM6CisgICAgICAgIGNhc2UgQ29udGV4dE1l
bnVJdGVtVGFnU3BlZWNoTWVudToKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTdGFy
dFNwZWFraW5nOgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1dyaXRpbmdEaXJlY3Rp
b25NZW51OgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1RleHREaXJlY3Rpb25NZW51
OgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1BERlNpbmdsZVBhZ2VTY3JvbGxpbmc6
CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnUERGRmFjaW5nUGFnZXNTY3JvbGxpbmc6
CisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdJ
bnNwZWN0RWxlbWVudDoKKyNlbmRpZgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbUJhc2VD
dXN0b21UYWc6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtQ3VzdG9tVGFnTm9BY3Rpb246
CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtTGFzdEN1c3RvbVRhZzoKKyAgICAgICAgY2Fz
ZSBDb250ZXh0TWVudUl0ZW1CYXNlQXBwbGljYXRpb25UYWc6CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdNZWRpYVBsYXlQYXVzZToKKyAgICAgICAg
ICAgIGlmIChtX2hpdFRlc3RSZXN1bHQubWVkaWFQbGF5aW5nKCkpCisgICAgICAgICAgICAgICAg
aXRlbS5zZXRUaXRsZShjb250ZXh0TWVudUl0ZW1UYWdNZWRpYVBhdXNlKCkpOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIGl0ZW0uc2V0VGl0bGUoY29udGV4dE1lbnVJdGVtVGFn
TWVkaWFQbGF5KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29udGV4dE1l
bnVJdGVtVGFnTWVkaWFNdXRlOgorICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gbV9oaXRUZXN0
UmVzdWx0Lm1lZGlhSGFzQXVkaW8oKTsKKyAgICAgICAgICAgIHNob3VsZENoZWNrID0gc2hvdWxk
RW5hYmxlICYmICBtX2hpdFRlc3RSZXN1bHQubWVkaWFNdXRlZCgpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgaXRlbS5zZXRDaGVja2VkKHNob3VsZENoZWNrKTsKKyAgICBpdGVt
LnNldEVuYWJsZWQoc2hvdWxkRW5hYmxlKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CiAjZW5kaWYgLy8gRU5BQkxFKENPTlRFWFRfTUVOVVMpCkluZGV4OiBXZWJDb3JlL3BhZ2UvQ29u
dGV4dE1lbnVDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0NvbnRleHRN
ZW51Q29udHJvbGxlci5oCShyZXZpc2lvbiA3MzE2OSkKKysrIFdlYkNvcmUvcGFnZS9Db250ZXh0
TWVudUNvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRl
ZiBDb250ZXh0TWVudUNvbnRyb2xsZXJfaAogI2RlZmluZSBDb250ZXh0TWVudUNvbnRyb2xsZXJf
aAogCisjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJs
ZS5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgpAQCAtNTMsMTYgKzU0LDM1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBo
YW5kbGVDb250ZXh0TWVudUV2ZW50KEV2ZW50Kik7CiAgICAgICAgIHZvaWQgc2hvd0NvbnRleHRN
ZW51KEV2ZW50KiwgUGFzc1JlZlB0cjxDb250ZXh0TWVudVByb3ZpZGVyPik7CiAKKyAgICAgICAg
dm9pZCBwb3B1bGF0ZSgpOwogICAgICAgICB2b2lkIGNvbnRleHRNZW51SXRlbVNlbGVjdGVkKENv
bnRleHRNZW51SXRlbSopOworICAgICAgICB2b2lkIGFkZEluc3BlY3RFbGVtZW50SXRlbSgpOwor
CisgICAgICAgIHZvaWQgY2hlY2tPckVuYWJsZUlmTmVlZGVkKENvbnRleHRNZW51SXRlbSYpIGNv
bnN0OworCisgICAgICAgIHZvaWQgc2V0SGl0VGVzdFJlc3VsdChjb25zdCBIaXRUZXN0UmVzdWx0
JiByZXN1bHQpIHsgbV9oaXRUZXN0UmVzdWx0ID0gcmVzdWx0OyB9CisgICAgICAgIGNvbnN0IEhp
dFRlc3RSZXN1bHQmIGhpdFRlc3RSZXN1bHQoKSB7IHJldHVybiBtX2hpdFRlc3RSZXN1bHQ7IH0K
IAogICAgIHByaXZhdGU6CiAgICAgICAgIENvbnRleHRNZW51KiBjcmVhdGVDb250ZXh0TWVudShF
dmVudCopOwogICAgICAgICB2b2lkIHNob3dDb250ZXh0TWVudShFdmVudCopOworICAgICAgICAK
KyAgICAgICAgdm9pZCBhcHBlbmRJdGVtKENvbnRleHRNZW51SXRlbSYsIENvbnRleHRNZW51KiBw
YXJlbnRNZW51KTsKKworICAgICAgICB2b2lkIGNyZWF0ZUFuZEFwcGVuZEZvbnRTdWJNZW51KENv
bnRleHRNZW51SXRlbSYgZm9udE1lbnVJdGVtKTsKKyAgICAgICAgdm9pZCBjcmVhdGVBbmRBcHBl
bmRTcGVsbGluZ0FuZEdyYW1tYXJTdWJNZW51KENvbnRleHRNZW51SXRlbSYgc3BlbGxpbmdBbmRH
cmFtbWFyTWVudUl0ZW0pOworICAgICAgICB2b2lkIGNyZWF0ZUFuZEFwcGVuZFNwZWxsaW5nU3Vi
TWVudShDb250ZXh0TWVudUl0ZW0mIHNwZWxsaW5nTWVudUl0ZW0pOworICAgICAgICB2b2lkIGNy
ZWF0ZUFuZEFwcGVuZFNwZWVjaFN1Yk1lbnUoQ29udGV4dE1lbnVJdGVtJiBzcGVlY2hNZW51SXRl
bSk7CisgICAgICAgIHZvaWQgY3JlYXRlQW5kQXBwZW5kV3JpdGluZ0RpcmVjdGlvblN1Yk1lbnUo
Q29udGV4dE1lbnVJdGVtJiB3cml0aW5nRGlyZWN0aW9uTWVudUl0ZW0pOworICAgICAgICB2b2lk
IGNyZWF0ZUFuZEFwcGVuZFRleHREaXJlY3Rpb25TdWJNZW51KENvbnRleHRNZW51SXRlbSYgdGV4
dERpcmVjdGlvbk1lbnVJdGVtKTsKKyAgICAgICAgdm9pZCBjcmVhdGVBbmRBcHBlbmRTdWJzdGl0
dXRpb25zU3ViTWVudShDb250ZXh0TWVudUl0ZW0mIHN1YnN0aXR1dGlvbnNNZW51SXRlbSk7Cisg
ICAgICAgIHZvaWQgY3JlYXRlQW5kQXBwZW5kVHJhbnNmb3JtYXRpb25zU3ViTWVudShDb250ZXh0
TWVudUl0ZW0mIHRyYW5zZm9ybWF0aW9uc01lbnVJdGVtKTsKIAogICAgICAgICBQYWdlKiBtX3Bh
Z2U7CiAgICAgICAgIENvbnRleHRNZW51Q2xpZW50KiBtX2NsaWVudDsKICAgICAgICAgT3duUHRy
PENvbnRleHRNZW51PiBtX2NvbnRleHRNZW51OwogICAgICAgICBSZWZQdHI8Q29udGV4dE1lbnVQ
cm92aWRlcj4gbV9tZW51UHJvdmlkZXI7CisgICAgICAgIEhpdFRlc3RSZXN1bHQgbV9oaXRUZXN0
UmVzdWx0OwogICAgIH07CiAKIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vQ29udGV4dE1lbnUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vQ29udGV4dE1lbnUuY3BwCShyZXZp
c2lvbiA3MzE2OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vQ29udGV4dE1lbnUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDg5MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBD
aHJpc3RpYW4gRHl3YW4gPGNocmlzdGlhbkBpbWVuZGlvLmNvbT4KLSAqIENvcHlyaWdodCAoQykg
MjAxMCBJZ2FsaWEgUy5MCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJD
b250ZXh0TWVudS5oIgotCi0jaWYgRU5BQkxFKENPTlRFWFRfTUVOVVMpCi0KLSNpbmNsdWRlICJC
YWNrRm9yd2FyZENvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJDb250ZXh0TWVudUNvbnRyb2xsZXIu
aCIKLSNpbmNsdWRlICJDb250ZXh0TWVudUNsaWVudC5oIgotI2luY2x1ZGUgIkNTU0NvbXB1dGVk
U3R5bGVEZWNsYXJhdGlvbi5oIgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5LmgiCi0jaW5jbHVkZSAi
Q1NTUHJvcGVydHlOYW1lcy5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRG9j
dW1lbnRMb2FkZXIuaCIKLSNpbmNsdWRlICJFZGl0b3IuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgot
I2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5o
IgotI2luY2x1ZGUgIktVUkwuaCIKLSNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgiCi0jaW5j
bHVkZSAiTm9kZS5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJSZXNvdXJjZVJlcXVl
c3QuaCIKLSNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCi0jaW5jbHVkZSAiU2V0dGlu
Z3MuaCIKLSNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci11c2luZyBuYW1lc3BhY2UgV1RGOwotdXNp
bmcgbmFtZXNwYWNlIFVuaWNvZGU7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotQ29udGV4dE1l
bnVDb250cm9sbGVyKiBDb250ZXh0TWVudTo6Y29udHJvbGxlcigpIGNvbnN0Ci17Ci0gICAgaWYg
KE5vZGUqIG5vZGUgPSBtX2hpdFRlc3RSZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCkpCi0gICAg
ICAgIGlmIChGcmFtZSogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpKQotICAgICAg
ICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpKQotICAgICAgICAgICAgICAgIHJl
dHVybiBwYWdlLT5jb250ZXh0TWVudUNvbnRyb2xsZXIoKTsKLSAgICByZXR1cm4gMDsKLX0KLQot
c3RhdGljIFBhc3NPd25QdHI8Q29udGV4dE1lbnVJdGVtPiBzZXBhcmF0b3JJdGVtKCkKLXsKLSAg
ICByZXR1cm4gbmV3IENvbnRleHRNZW51SXRlbShTZXBhcmF0b3JUeXBlLCBDb250ZXh0TWVudUl0
ZW1UYWdOb0FjdGlvbiwgU3RyaW5nKCkpOwotfQotCi1zdGF0aWMgdm9pZCBjcmVhdGVBbmRBcHBl
bmRGb250U3ViTWVudShjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIENvbnRleHRNZW51SXRl
bSYgZm9udE1lbnVJdGVtKQotewotICAgIENvbnRleHRNZW51IGZvbnRNZW51KHJlc3VsdCk7Ci0K
LSNpZiBQTEFURk9STShNQUMpCi0gICAgQ29udGV4dE1lbnVJdGVtIHNob3dGb250cyhBY3Rpb25U
eXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTaG93Rm9udHMsIGNvbnRleHRNZW51SXRlbVRhZ1Nob3dG
b250cygpKTsKLSNlbmRpZgotICAgIENvbnRleHRNZW51SXRlbSBib2xkKENoZWNrYWJsZUFjdGlv
blR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0JvbGQsIGNvbnRleHRNZW51SXRlbVRhZ0JvbGQoKSk7
Ci0gICAgQ29udGV4dE1lbnVJdGVtIGl0YWxpYyhDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0
TWVudUl0ZW1UYWdJdGFsaWMsIGNvbnRleHRNZW51SXRlbVRhZ0l0YWxpYygpKTsKLSAgICBDb250
ZXh0TWVudUl0ZW0gdW5kZXJsaW5lKENoZWNrYWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRl
bVRhZ1VuZGVybGluZSwgY29udGV4dE1lbnVJdGVtVGFnVW5kZXJsaW5lKCkpOwotICAgIENvbnRl
eHRNZW51SXRlbSBvdXRsaW5lKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ091dGxpbmUs
IGNvbnRleHRNZW51SXRlbVRhZ091dGxpbmUoKSk7Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgIENv
bnRleHRNZW51SXRlbSBzdHlsZXMoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU3R5bGVz
LCBjb250ZXh0TWVudUl0ZW1UYWdTdHlsZXMoKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIHNob3dD
b2xvcnMoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU2hvd0NvbG9ycywgY29udGV4dE1l
bnVJdGVtVGFnU2hvd0NvbG9ycygpKTsKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oTUFDKQotICAg
IGZvbnRNZW51LmFwcGVuZEl0ZW0oc2hvd0ZvbnRzKTsKLSNlbmRpZgotICAgIGZvbnRNZW51LmFw
cGVuZEl0ZW0oYm9sZCk7Ci0gICAgZm9udE1lbnUuYXBwZW5kSXRlbShpdGFsaWMpOwotICAgIGZv
bnRNZW51LmFwcGVuZEl0ZW0odW5kZXJsaW5lKTsKLSAgICBmb250TWVudS5hcHBlbmRJdGVtKG91
dGxpbmUpOwotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBmb250TWVudS5hcHBlbmRJdGVtKHN0eWxl
cyk7Ci0gICAgZm9udE1lbnUuYXBwZW5kSXRlbSgqc2VwYXJhdG9ySXRlbSgpKTsKLSAgICBmb250
TWVudS5hcHBlbmRJdGVtKHNob3dDb2xvcnMpOwotI2VuZGlmCi0KLSAgICBmb250TWVudUl0ZW0u
c2V0U3ViTWVudSgmZm9udE1lbnUpOwotfQotCi0jaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElH
RVIpCi0KLSNpZiAhUExBVEZPUk0oR1RLKQotCi1zdGF0aWMgdm9pZCBjcmVhdGVBbmRBcHBlbmRT
cGVsbGluZ0FuZEdyYW1tYXJTdWJNZW51KGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgQ29u
dGV4dE1lbnVJdGVtJiBzcGVsbGluZ0FuZEdyYW1tYXJNZW51SXRlbSkKLXsKLSAgICBDb250ZXh0
TWVudSBzcGVsbGluZ0FuZEdyYW1tYXJNZW51KHJlc3VsdCk7Ci0KLSAgICBDb250ZXh0TWVudUl0
ZW0gc2hvd1NwZWxsaW5nUGFuZWwoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU2hvd1Nw
ZWxsaW5nUGFuZWwsIAotICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdTaG93U3BlbGxpbmdQYW5l
bCh0cnVlKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIGNoZWNrU3BlbGxpbmcoQWN0aW9uVHlwZSwg
Q29udGV4dE1lbnVJdGVtVGFnQ2hlY2tTcGVsbGluZywgCi0gICAgICAgIGNvbnRleHRNZW51SXRl
bVRhZ0NoZWNrU3BlbGxpbmcoKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIGNoZWNrQXNZb3VUeXBl
KENoZWNrYWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0NoZWNrU3BlbGxpbmdXaGls
ZVR5cGluZywgCi0gICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ0NoZWNrU3BlbGxpbmdXaGlsZVR5
cGluZygpKTsKLSAgICBDb250ZXh0TWVudUl0ZW0gZ3JhbW1hcldpdGhTcGVsbGluZyhDaGVja2Fi
bGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdDaGVja0dyYW1tYXJXaXRoU3BlbGxpbmcs
IAotICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdDaGVja0dyYW1tYXJXaXRoU3BlbGxpbmcoKSk7
Ci0jaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQotICAg
IENvbnRleHRNZW51SXRlbSBjb3JyZWN0U3BlbGxpbmcoQ2hlY2thYmxlQWN0aW9uVHlwZSwgQ29u
dGV4dE1lbnVJdGVtVGFnQ29ycmVjdFNwZWxsaW5nQXV0b21hdGljYWxseSwgCi0gICAgICAgIGNv
bnRleHRNZW51SXRlbVRhZ0NvcnJlY3RTcGVsbGluZ0F1dG9tYXRpY2FsbHkoKSk7Ci0jZW5kaWYK
LQotICAgIHNwZWxsaW5nQW5kR3JhbW1hck1lbnUuYXBwZW5kSXRlbShzaG93U3BlbGxpbmdQYW5l
bCk7Ci0gICAgc3BlbGxpbmdBbmRHcmFtbWFyTWVudS5hcHBlbmRJdGVtKGNoZWNrU3BlbGxpbmcp
OwotI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKLSAg
ICBzcGVsbGluZ0FuZEdyYW1tYXJNZW51LmFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSk7Ci0j
ZW5kaWYKLSAgICBzcGVsbGluZ0FuZEdyYW1tYXJNZW51LmFwcGVuZEl0ZW0oY2hlY2tBc1lvdVR5
cGUpOwotICAgIHNwZWxsaW5nQW5kR3JhbW1hck1lbnUuYXBwZW5kSXRlbShncmFtbWFyV2l0aFNw
ZWxsaW5nKTsKLSNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BB
UkQpCi0gICAgc3BlbGxpbmdBbmRHcmFtbWFyTWVudS5hcHBlbmRJdGVtKGNvcnJlY3RTcGVsbGlu
Zyk7Ci0jZW5kaWYKLQotICAgIHNwZWxsaW5nQW5kR3JhbW1hck1lbnVJdGVtLnNldFN1Yk1lbnUo
JnNwZWxsaW5nQW5kR3JhbW1hck1lbnUpOwotfQotCi0jZW5kaWYgLy8gIVBMQVRGT1JNKEdUSykK
LQotI2Vsc2UKLQotc3RhdGljIHZvaWQgY3JlYXRlQW5kQXBwZW5kU3BlbGxpbmdTdWJNZW51KGNv
bnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgQ29udGV4dE1lbnVJdGVtJiBzcGVsbGluZ01lbnVJ
dGVtKQotewotICAgIENvbnRleHRNZW51IHNwZWxsaW5nTWVudShyZXN1bHQpOwotCi0gICAgQ29u
dGV4dE1lbnVJdGVtIHNob3dTcGVsbGluZ1BhbmVsKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRl
bVRhZ1Nob3dTcGVsbGluZ1BhbmVsLCAKLSAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnU2hvd1Nw
ZWxsaW5nUGFuZWwodHJ1ZSkpOwotICAgIENvbnRleHRNZW51SXRlbSBjaGVja1NwZWxsaW5nKEFj
dGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0NoZWNrU3BlbGxpbmcsIAotICAgICAgICBjb250
ZXh0TWVudUl0ZW1UYWdDaGVja1NwZWxsaW5nKCkpOwotICAgIENvbnRleHRNZW51SXRlbSBjaGVj
a0FzWW91VHlwZShDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdDaGVja1Nw
ZWxsaW5nV2hpbGVUeXBpbmcsIAotICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdDaGVja1NwZWxs
aW5nV2hpbGVUeXBpbmcoKSk7Ci0KLSAgICBzcGVsbGluZ01lbnUuYXBwZW5kSXRlbShzaG93U3Bl
bGxpbmdQYW5lbCk7Ci0gICAgc3BlbGxpbmdNZW51LmFwcGVuZEl0ZW0oY2hlY2tTcGVsbGluZyk7
Ci0gICAgc3BlbGxpbmdNZW51LmFwcGVuZEl0ZW0oY2hlY2tBc1lvdVR5cGUpOwotCi0gICAgc3Bl
bGxpbmdNZW51SXRlbS5zZXRTdWJNZW51KCZzcGVsbGluZ01lbnUpOwotfQotCi0jZW5kaWYKLQot
I2lmIFBMQVRGT1JNKE1BQykKLQotc3RhdGljIHZvaWQgY3JlYXRlQW5kQXBwZW5kU3BlZWNoU3Vi
TWVudShjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIENvbnRleHRNZW51SXRlbSYgc3BlZWNo
TWVudUl0ZW0pCi17Ci0gICAgQ29udGV4dE1lbnUgc3BlZWNoTWVudShyZXN1bHQpOwotCi0gICAg
Q29udGV4dE1lbnVJdGVtIHN0YXJ0KEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1N0YXJ0
U3BlYWtpbmcsIGNvbnRleHRNZW51SXRlbVRhZ1N0YXJ0U3BlYWtpbmcoKSk7Ci0gICAgQ29udGV4
dE1lbnVJdGVtIHN0b3AoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU3RvcFNwZWFraW5n
LCBjb250ZXh0TWVudUl0ZW1UYWdTdG9wU3BlYWtpbmcoKSk7Ci0KLSAgICBzcGVlY2hNZW51LmFw
cGVuZEl0ZW0oc3RhcnQpOwotICAgIHNwZWVjaE1lbnUuYXBwZW5kSXRlbShzdG9wKTsKLQotICAg
IHNwZWVjaE1lbnVJdGVtLnNldFN1Yk1lbnUoJnNwZWVjaE1lbnUpOwotfQotCi0jZW5kaWYKLSAK
LSNpZiAhUExBVEZPUk0oR1RLKQotCi1zdGF0aWMgdm9pZCBjcmVhdGVBbmRBcHBlbmRXcml0aW5n
RGlyZWN0aW9uU3ViTWVudShjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIENvbnRleHRNZW51
SXRlbSYgd3JpdGluZ0RpcmVjdGlvbk1lbnVJdGVtKQotewotICAgIENvbnRleHRNZW51IHdyaXRp
bmdEaXJlY3Rpb25NZW51KHJlc3VsdCk7Ci0KLSAgICBDb250ZXh0TWVudUl0ZW0gZGVmYXVsdEl0
ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnRGVmYXVsdERpcmVjdGlvbiwgCi0gICAg
ICAgIGNvbnRleHRNZW51SXRlbVRhZ0RlZmF1bHREaXJlY3Rpb24oKSk7Ci0gICAgQ29udGV4dE1l
bnVJdGVtIGx0cihDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdMZWZ0VG9S
aWdodCwgY29udGV4dE1lbnVJdGVtVGFnTGVmdFRvUmlnaHQoKSk7Ci0gICAgQ29udGV4dE1lbnVJ
dGVtIHJ0bChDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdSaWdodFRvTGVm
dCwgY29udGV4dE1lbnVJdGVtVGFnUmlnaHRUb0xlZnQoKSk7Ci0KLSAgICB3cml0aW5nRGlyZWN0
aW9uTWVudS5hcHBlbmRJdGVtKGRlZmF1bHRJdGVtKTsKLSAgICB3cml0aW5nRGlyZWN0aW9uTWVu
dS5hcHBlbmRJdGVtKGx0cik7Ci0gICAgd3JpdGluZ0RpcmVjdGlvbk1lbnUuYXBwZW5kSXRlbShy
dGwpOwotCi0gICAgd3JpdGluZ0RpcmVjdGlvbk1lbnVJdGVtLnNldFN1Yk1lbnUoJndyaXRpbmdE
aXJlY3Rpb25NZW51KTsKLX0KLQotc3RhdGljIHZvaWQgY3JlYXRlQW5kQXBwZW5kVGV4dERpcmVj
dGlvblN1Yk1lbnUoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBDb250ZXh0TWVudUl0ZW0m
IHRleHREaXJlY3Rpb25NZW51SXRlbSkKLXsKLSAgICBDb250ZXh0TWVudSB0ZXh0RGlyZWN0aW9u
TWVudShyZXN1bHQpOwotCi0gICAgQ29udGV4dE1lbnVJdGVtIGRlZmF1bHRJdGVtKEFjdGlvblR5
cGUsIENvbnRleHRNZW51SXRlbVRhZ1RleHREaXJlY3Rpb25EZWZhdWx0LCBjb250ZXh0TWVudUl0
ZW1UYWdEZWZhdWx0RGlyZWN0aW9uKCkpOwotICAgIENvbnRleHRNZW51SXRlbSBsdHIoQ2hlY2th
YmxlQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnVGV4dERpcmVjdGlvbkxlZnRUb1JpZ2h0
LCBjb250ZXh0TWVudUl0ZW1UYWdMZWZ0VG9SaWdodCgpKTsKLSAgICBDb250ZXh0TWVudUl0ZW0g
cnRsKENoZWNrYWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1RleHREaXJlY3Rpb25S
aWdodFRvTGVmdCwgY29udGV4dE1lbnVJdGVtVGFnUmlnaHRUb0xlZnQoKSk7Ci0KLSAgICB0ZXh0
RGlyZWN0aW9uTWVudS5hcHBlbmRJdGVtKGRlZmF1bHRJdGVtKTsKLSAgICB0ZXh0RGlyZWN0aW9u
TWVudS5hcHBlbmRJdGVtKGx0cik7Ci0gICAgdGV4dERpcmVjdGlvbk1lbnUuYXBwZW5kSXRlbShy
dGwpOwotCi0gICAgdGV4dERpcmVjdGlvbk1lbnVJdGVtLnNldFN1Yk1lbnUoJnRleHREaXJlY3Rp
b25NZW51KTsKLX0KLQotI2VuZGlmCi0KLSNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJV
SUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQotCi1zdGF0
aWMgdm9pZCBjcmVhdGVBbmRBcHBlbmRTdWJzdGl0dXRpb25zU3ViTWVudShjb25zdCBIaXRUZXN0
UmVzdWx0JiByZXN1bHQsIENvbnRleHRNZW51SXRlbSYgc3Vic3RpdHV0aW9uc01lbnVJdGVtKQot
ewotICAgIENvbnRleHRNZW51IHN1YnN0aXR1dGlvbnNNZW51KHJlc3VsdCk7Ci0KLSAgICBDb250
ZXh0TWVudUl0ZW0gc2hvd1N1YnN0aXR1dGlvbnMoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVt
VGFnU2hvd1N1YnN0aXR1dGlvbnMsIGNvbnRleHRNZW51SXRlbVRhZ1Nob3dTdWJzdGl0dXRpb25z
KHRydWUpKTsKLSAgICBDb250ZXh0TWVudUl0ZW0gc21hcnRDb3B5UGFzdGUoQ2hlY2thYmxlQWN0
aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU21hcnRDb3B5UGFzdGUsIGNvbnRleHRNZW51SXRl
bVRhZ1NtYXJ0Q29weVBhc3RlKCkpOwotICAgIENvbnRleHRNZW51SXRlbSBzbWFydFF1b3RlcyhD
aGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTbWFydFF1b3RlcywgY29udGV4
dE1lbnVJdGVtVGFnU21hcnRRdW90ZXMoKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIHNtYXJ0RGFz
aGVzKENoZWNrYWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1NtYXJ0RGFzaGVzLCBj
b250ZXh0TWVudUl0ZW1UYWdTbWFydERhc2hlcygpKTsKLSAgICBDb250ZXh0TWVudUl0ZW0gc21h
cnRMaW5rcyhDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTbWFydExpbmtz
LCBjb250ZXh0TWVudUl0ZW1UYWdTbWFydExpbmtzKCkpOwotICAgIENvbnRleHRNZW51SXRlbSB0
ZXh0UmVwbGFjZW1lbnQoQ2hlY2thYmxlQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnVGV4
dFJlcGxhY2VtZW50LCBjb250ZXh0TWVudUl0ZW1UYWdUZXh0UmVwbGFjZW1lbnQoKSk7Ci0KLSAg
ICBzdWJzdGl0dXRpb25zTWVudS5hcHBlbmRJdGVtKHNob3dTdWJzdGl0dXRpb25zKTsKLSAgICBz
dWJzdGl0dXRpb25zTWVudS5hcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCkpOwotICAgIHN1YnN0
aXR1dGlvbnNNZW51LmFwcGVuZEl0ZW0oc21hcnRDb3B5UGFzdGUpOwotICAgIHN1YnN0aXR1dGlv
bnNNZW51LmFwcGVuZEl0ZW0oc21hcnRRdW90ZXMpOwotICAgIHN1YnN0aXR1dGlvbnNNZW51LmFw
cGVuZEl0ZW0oc21hcnREYXNoZXMpOwotICAgIHN1YnN0aXR1dGlvbnNNZW51LmFwcGVuZEl0ZW0o
c21hcnRMaW5rcyk7Ci0gICAgc3Vic3RpdHV0aW9uc01lbnUuYXBwZW5kSXRlbSh0ZXh0UmVwbGFj
ZW1lbnQpOwotCi0gICAgc3Vic3RpdHV0aW9uc01lbnVJdGVtLnNldFN1Yk1lbnUoJnN1YnN0aXR1
dGlvbnNNZW51KTsKLX0KLQotc3RhdGljIHZvaWQgY3JlYXRlQW5kQXBwZW5kVHJhbnNmb3JtYXRp
b25zU3ViTWVudShjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIENvbnRleHRNZW51SXRlbSYg
dHJhbnNmb3JtYXRpb25zTWVudUl0ZW0pCi17Ci0gICAgQ29udGV4dE1lbnUgdHJhbnNmb3JtYXRp
b25zTWVudShyZXN1bHQpOwotCi0gICAgQ29udGV4dE1lbnVJdGVtIG1ha2VVcHBlckNhc2UoQWN0
aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnTWFrZVVwcGVyQ2FzZSwgY29udGV4dE1lbnVJdGVt
VGFnTWFrZVVwcGVyQ2FzZSgpKTsKLSAgICBDb250ZXh0TWVudUl0ZW0gbWFrZUxvd2VyQ2FzZShB
Y3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdNYWtlTG93ZXJDYXNlLCBjb250ZXh0TWVudUl0
ZW1UYWdNYWtlTG93ZXJDYXNlKCkpOwotICAgIENvbnRleHRNZW51SXRlbSBjYXBpdGFsaXplKEFj
dGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0NhcGl0YWxpemUsIGNvbnRleHRNZW51SXRlbVRh
Z0NhcGl0YWxpemUoKSk7Ci0KLSAgICB0cmFuc2Zvcm1hdGlvbnNNZW51LmFwcGVuZEl0ZW0obWFr
ZVVwcGVyQ2FzZSk7Ci0gICAgdHJhbnNmb3JtYXRpb25zTWVudS5hcHBlbmRJdGVtKG1ha2VMb3dl
ckNhc2UpOwotICAgIHRyYW5zZm9ybWF0aW9uc01lbnUuYXBwZW5kSXRlbShjYXBpdGFsaXplKTsK
LQotICAgIHRyYW5zZm9ybWF0aW9uc01lbnVJdGVtLnNldFN1Yk1lbnUoJnRyYW5zZm9ybWF0aW9u
c01lbnUpOwotfQotCi0jZW5kaWYKLQotc3RhdGljIGJvb2wgc2VsZWN0aW9uQ29udGFpbnNQb3Nz
aWJsZVdvcmQoRnJhbWUqIGZyYW1lKQotewotICAgIC8vIEN1cnJlbnQgYWxnb3JpdGhtOiBsb29r
IGZvciBhIGNoYXJhY3RlciB0aGF0J3Mgbm90IGp1c3QgYSBzZXBhcmF0b3IuCi0gICAgZm9yIChU
ZXh0SXRlcmF0b3IgaXQoZnJhbWUtPnNlbGVjdGlvbigpLT50b05vcm1hbGl6ZWRSYW5nZSgpLmdl
dCgpKTsgIWl0LmF0RW5kKCk7IGl0LmFkdmFuY2UoKSkgewotICAgICAgICBpbnQgbGVuZ3RoID0g
aXQubGVuZ3RoKCk7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0gaXQuY2hhcmFj
dGVycygpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAg
ICAgICAgaWYgKCEoY2F0ZWdvcnkoY2hhcmFjdGVyc1tpXSkgJiAoU2VwYXJhdG9yX1NwYWNlIHwg
U2VwYXJhdG9yX0xpbmUgfCBTZXBhcmF0b3JfUGFyYWdyYXBoKSkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBDb250ZXh0
TWVudTo6cG9wdWxhdGUoKQotewotICAgIENvbnRleHRNZW51SXRlbSBPcGVuTGlua0l0ZW0oQWN0
aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnT3BlbkxpbmssIGNvbnRleHRNZW51SXRlbVRhZ09w
ZW5MaW5rKCkpOwotICAgIENvbnRleHRNZW51SXRlbSBPcGVuTGlua0luTmV3V2luZG93SXRlbShB
Y3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdPcGVuTGlua0luTmV3V2luZG93LCAKLSAgICAg
ICAgY29udGV4dE1lbnVJdGVtVGFnT3BlbkxpbmtJbk5ld1dpbmRvdygpKTsKLSAgICBDb250ZXh0
TWVudUl0ZW0gRG93bmxvYWRGaWxlSXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdE
b3dubG9hZExpbmtUb0Rpc2ssIAotICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdEb3dubG9hZExp
bmtUb0Rpc2soKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIENvcHlMaW5rSXRlbShBY3Rpb25UeXBl
LCBDb250ZXh0TWVudUl0ZW1UYWdDb3B5TGlua1RvQ2xpcGJvYXJkLCAKLSAgICAgICAgY29udGV4
dE1lbnVJdGVtVGFnQ29weUxpbmtUb0NsaXBib2FyZCgpKTsKLSAgICBDb250ZXh0TWVudUl0ZW0g
T3BlbkltYWdlSW5OZXdXaW5kb3dJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ09w
ZW5JbWFnZUluTmV3V2luZG93LCAKLSAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnT3BlbkltYWdl
SW5OZXdXaW5kb3coKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIERvd25sb2FkSW1hZ2VJdGVtKEFj
dGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0Rvd25sb2FkSW1hZ2VUb0Rpc2ssIAotICAgICAg
ICBjb250ZXh0TWVudUl0ZW1UYWdEb3dubG9hZEltYWdlVG9EaXNrKCkpOwotICAgIENvbnRleHRN
ZW51SXRlbSBDb3B5SW1hZ2VJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0NvcHlJ
bWFnZVRvQ2xpcGJvYXJkLCAKLSAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnQ29weUltYWdlVG9D
bGlwYm9hcmQoKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIE9wZW5NZWRpYUluTmV3V2luZG93SXRl
bShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdPcGVuTWVkaWFJbk5ld1dpbmRvdywgU3Ry
aW5nKCkpOwotICAgIENvbnRleHRNZW51SXRlbSBDb3B5TWVkaWFMaW5rSXRlbShBY3Rpb25UeXBl
LCBDb250ZXh0TWVudUl0ZW1UYWdDb3B5TWVkaWFMaW5rVG9DbGlwYm9hcmQsIAotICAgICAgICBT
dHJpbmcoKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIE1lZGlhUGxheVBhdXNlKEFjdGlvblR5cGUs
IENvbnRleHRNZW51SXRlbVRhZ01lZGlhUGxheVBhdXNlLCAKLSAgICAgICAgY29udGV4dE1lbnVJ
dGVtVGFnTWVkaWFQbGF5KCkpOwotICAgIENvbnRleHRNZW51SXRlbSBNZWRpYU11dGUoQWN0aW9u
VHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnTWVkaWFNdXRlLCAKLSAgICAgICAgY29udGV4dE1lbnVJ
dGVtVGFnTWVkaWFNdXRlKCkpOwotICAgIENvbnRleHRNZW51SXRlbSBUb2dnbGVNZWRpYUNvbnRy
b2xzKENoZWNrYWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1RvZ2dsZU1lZGlhQ29u
dHJvbHMsIAotICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdUb2dnbGVNZWRpYUNvbnRyb2xzKCkp
OwotICAgIENvbnRleHRNZW51SXRlbSBUb2dnbGVNZWRpYUxvb3AoQ2hlY2thYmxlQWN0aW9uVHlw
ZSwgQ29udGV4dE1lbnVJdGVtVGFnVG9nZ2xlTWVkaWFMb29wLCAKLSAgICAgICAgY29udGV4dE1l
bnVJdGVtVGFnVG9nZ2xlTWVkaWFMb29wKCkpOwotICAgIENvbnRleHRNZW51SXRlbSBFbnRlclZp
ZGVvRnVsbHNjcmVlbihBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdFbnRlclZpZGVvRnVs
bHNjcmVlbiwgCi0gICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ0VudGVyVmlkZW9GdWxsc2NyZWVu
KCkpOwotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBDb250ZXh0TWVudUl0ZW0gU2VhcmNoU3BvdGxp
Z2h0SXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTZWFyY2hJblNwb3RsaWdodCwg
Ci0gICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ1NlYXJjaEluU3BvdGxpZ2h0KCkpOwotICAgIENv
bnRleHRNZW51SXRlbSBMb29rSW5EaWN0aW9uYXJ5SXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVu
dUl0ZW1UYWdMb29rVXBJbkRpY3Rpb25hcnksIAotICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdM
b29rVXBJbkRpY3Rpb25hcnkoKSk7Ci0jZW5kaWYKLSNpZiAhUExBVEZPUk0oR1RLKQotICAgIENv
bnRleHRNZW51SXRlbSBTZWFyY2hXZWJJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRh
Z1NlYXJjaFdlYiwgY29udGV4dE1lbnVJdGVtVGFnU2VhcmNoV2ViKCkpOwotI2VuZGlmCi0gICAg
Q29udGV4dE1lbnVJdGVtIENvcHlJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0Nv
cHksIGNvbnRleHRNZW51SXRlbVRhZ0NvcHkoKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIEJhY2tJ
dGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0dvQmFjaywgY29udGV4dE1lbnVJdGVt
VGFnR29CYWNrKCkpOwotICAgIENvbnRleHRNZW51SXRlbSBGb3J3YXJkSXRlbShBY3Rpb25UeXBl
LCBDb250ZXh0TWVudUl0ZW1UYWdHb0ZvcndhcmQsICBjb250ZXh0TWVudUl0ZW1UYWdHb0Zvcndh
cmQoKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIFN0b3BJdGVtKEFjdGlvblR5cGUsIENvbnRleHRN
ZW51SXRlbVRhZ1N0b3AsIGNvbnRleHRNZW51SXRlbVRhZ1N0b3AoKSk7Ci0gICAgQ29udGV4dE1l
bnVJdGVtIFJlbG9hZEl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnUmVsb2FkLCBj
b250ZXh0TWVudUl0ZW1UYWdSZWxvYWQoKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIE9wZW5GcmFt
ZUl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnT3BlbkZyYW1lSW5OZXdXaW5kb3cs
IAotICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdPcGVuRnJhbWVJbk5ld1dpbmRvdygpKTsKLSAg
ICBDb250ZXh0TWVudUl0ZW0gTm9HdWVzc2VzSXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0
ZW1UYWdOb0d1ZXNzZXNGb3VuZCwgCi0gICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ05vR3Vlc3Nl
c0ZvdW5kKCkpOwotICAgIENvbnRleHRNZW51SXRlbSBJZ25vcmVTcGVsbGluZ0l0ZW0oQWN0aW9u
VHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnSWdub3JlU3BlbGxpbmcsIAotICAgICAgICBjb250ZXh0
TWVudUl0ZW1UYWdJZ25vcmVTcGVsbGluZygpKTsKLSAgICBDb250ZXh0TWVudUl0ZW0gTGVhcm5T
cGVsbGluZ0l0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnTGVhcm5TcGVsbGluZywg
Ci0gICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ0xlYXJuU3BlbGxpbmcoKSk7Ci0gICAgQ29udGV4
dE1lbnVJdGVtIElnbm9yZUdyYW1tYXJJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRh
Z0lnbm9yZUdyYW1tYXIsIAotICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdJZ25vcmVHcmFtbWFy
KCkpOwotICAgIENvbnRleHRNZW51SXRlbSBDdXRJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51
SXRlbVRhZ0N1dCwgY29udGV4dE1lbnVJdGVtVGFnQ3V0KCkpOwotICAgIENvbnRleHRNZW51SXRl
bSBQYXN0ZUl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnUGFzdGUsIGNvbnRleHRN
ZW51SXRlbVRhZ1Bhc3RlKCkpOwotI2lmIFBMQVRGT1JNKEdUSykKLSAgICBDb250ZXh0TWVudUl0
ZW0gRGVsZXRlSXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdEZWxldGUsIGNvbnRl
eHRNZW51SXRlbVRhZ0RlbGV0ZSgpKTsKLSAgICBDb250ZXh0TWVudUl0ZW0gU2VsZWN0QWxsSXRl
bShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTZWxlY3RBbGwsIGNvbnRleHRNZW51SXRl
bVRhZ1NlbGVjdEFsbCgpKTsKLSNlbmRpZgotICAgIAotICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0
ID0gaGl0VGVzdFJlc3VsdCgpOwotICAgIAotICAgIE5vZGUqIG5vZGUgPSBtX2hpdFRlc3RSZXN1
bHQuaW5uZXJOb25TaGFyZWROb2RlKCk7Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm47
Ci0jaWYgUExBVEZPUk0oR1RLKQotICAgIGlmICghcmVzdWx0LmlzQ29udGVudEVkaXRhYmxlKCkg
JiYgKG5vZGUtPmlzRWxlbWVudE5vZGUoKSAmJiBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSkt
PmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpKQotICAgICAgICByZXR1cm47Ci0jZW5kaWYKLSAgICBG
cmFtZSogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpOwotICAgIGlmICghZnJhbWUp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghcmVzdWx0LmlzQ29udGVudEVkaXRhYmxlKCkp
IHsKLSAgICAgICAgRnJhbWVMb2FkZXIqIGxvYWRlciA9IGZyYW1lLT5sb2FkZXIoKTsKLSAgICAg
ICAgS1VSTCBsaW5rVVJMID0gcmVzdWx0LmFic29sdXRlTGlua1VSTCgpOwotICAgICAgICBpZiAo
IWxpbmtVUkwuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBpZiAobG9hZGVyLT5jYW5IYW5kbGVS
ZXF1ZXN0KFJlc291cmNlUmVxdWVzdChsaW5rVVJMKSkpIHsKLSAgICAgICAgICAgICAgICBhcHBl
bmRJdGVtKE9wZW5MaW5rSXRlbSk7Ci0gICAgICAgICAgICAgICAgYXBwZW5kSXRlbShPcGVuTGlu
a0luTmV3V2luZG93SXRlbSk7Ci0gICAgICAgICAgICAgICAgYXBwZW5kSXRlbShEb3dubG9hZEZp
bGVJdGVtKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGFwcGVuZEl0ZW0oQ29weUxpbmtJ
dGVtKTsKLSAgICAgICAgfQotCi0gICAgICAgIEtVUkwgaW1hZ2VVUkwgPSByZXN1bHQuYWJzb2x1
dGVJbWFnZVVSTCgpOwotICAgICAgICBpZiAoIWltYWdlVVJMLmlzRW1wdHkoKSkgewotICAgICAg
ICAgICAgaWYgKCFsaW5rVVJMLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBhcHBlbmRJdGVt
KCpzZXBhcmF0b3JJdGVtKCkpOwotCi0gICAgICAgICAgICBhcHBlbmRJdGVtKE9wZW5JbWFnZUlu
TmV3V2luZG93SXRlbSk7Ci0gICAgICAgICAgICBhcHBlbmRJdGVtKERvd25sb2FkSW1hZ2VJdGVt
KTsKLSAgICAgICAgICAgIGlmIChpbWFnZVVSTC5pc0xvY2FsRmlsZSgpIHx8IG1faGl0VGVzdFJl
c3VsdC5pbWFnZSgpKQotICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oQ29weUltYWdlSXRlbSk7
Ci0gICAgICAgIH0KLQotICAgICAgICBLVVJMIG1lZGlhVVJMID0gcmVzdWx0LmFic29sdXRlTWVk
aWFVUkwoKTsKLSAgICAgICAgaWYgKCFtZWRpYVVSTC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAg
IGlmICghbGlua1VSTC5pc0VtcHR5KCkgfHwgIWltYWdlVVJMLmlzRW1wdHkoKSkKLSAgICAgICAg
ICAgICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCkpOwotCi0gICAgICAgICAgICBhcHBl
bmRJdGVtKE1lZGlhUGxheVBhdXNlKTsKLSAgICAgICAgICAgIGFwcGVuZEl0ZW0oTWVkaWFNdXRl
KTsKLSAgICAgICAgICAgIGFwcGVuZEl0ZW0oVG9nZ2xlTWVkaWFDb250cm9scyk7Ci0gICAgICAg
ICAgICBhcHBlbmRJdGVtKFRvZ2dsZU1lZGlhTG9vcCk7Ci0gICAgICAgICAgICBhcHBlbmRJdGVt
KEVudGVyVmlkZW9GdWxsc2NyZWVuKTsKLQotICAgICAgICAgICAgYXBwZW5kSXRlbSgqc2VwYXJh
dG9ySXRlbSgpKTsKLSAgICAgICAgICAgIGFwcGVuZEl0ZW0oQ29weU1lZGlhTGlua0l0ZW0pOwot
ICAgICAgICAgICAgYXBwZW5kSXRlbShPcGVuTWVkaWFJbk5ld1dpbmRvd0l0ZW0pOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKGltYWdlVVJMLmlzRW1wdHkoKSAmJiBsaW5rVVJMLmlzRW1wdHko
KSAmJiBtZWRpYVVSTC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGlmIChyZXN1bHQuaXNTZWxl
Y3RlZCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGlvbkNvbnRhaW5zUG9zc2libGVX
b3JkKGZyYW1lKSkgewotI2lmIFBMQVRGT1JNKE1BQykKLSAgICAgICAgICAgICAgICAgICAgYXBw
ZW5kSXRlbShTZWFyY2hTcG90bGlnaHRJdGVtKTsKLSNlbmRpZgotI2lmICFQTEFURk9STShHVEsp
Ci0gICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oU2VhcmNoV2ViSXRlbSk7Ci0gICAgICAg
ICAgICAgICAgICAgIGFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSk7Ci0jZW5kaWYKLSNpZiBQ
TEFURk9STShNQUMpCi0gICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oTG9va0luRGljdGlv
bmFyeUl0ZW0pOwotICAgICAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVt
KCkpOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGFwcGVuZEl0
ZW0oQ29weUl0ZW0pOwotI2lmIFBMQVRGT1JNKE1BQykKLSAgICAgICAgICAgICAgICBhcHBlbmRJ
dGVtKCpzZXBhcmF0b3JJdGVtKCkpOwotICAgICAgICAgICAgICAgIENvbnRleHRNZW51SXRlbSBT
cGVlY2hNZW51SXRlbShTdWJtZW51VHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU3BlZWNoTWVudSwg
Y29udGV4dE1lbnVJdGVtVGFnU3BlZWNoTWVudSgpKTsKLSAgICAgICAgICAgICAgICBjcmVhdGVB
bmRBcHBlbmRTcGVlY2hTdWJNZW51KG1faGl0VGVzdFJlc3VsdCwgU3BlZWNoTWVudUl0ZW0pOwot
ICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oU3BlZWNoTWVudUl0ZW0pOwotI2VuZGlmICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgfSBlbHNlIHsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SKQot
ICAgICAgICAgICAgICAgIGlmICghKGZyYW1lLT5wYWdlKCkgJiYgZnJhbWUtPnBhZ2UoKS0+aW5z
cGVjdG9yQ29udHJvbGxlcigpLT5oYXNJbnNwZWN0b3JGcm9udGVuZENsaWVudCgpKSkgewotI2Vu
ZGlmCi0gICAgICAgICAgICAgICAgaWYgKGZyYW1lLT5wYWdlKCkgJiYgZnJhbWUtPnBhZ2UoKS0+
YmFja0ZvcndhcmQoKS0+Y2FuR29CYWNrT3JGb3J3YXJkKC0xKSkKLSAgICAgICAgICAgICAgICAg
ICAgYXBwZW5kSXRlbShCYWNrSXRlbSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoZnJhbWUtPnBh
Z2UoKSAmJiBmcmFtZS0+cGFnZSgpLT5iYWNrRm9yd2FyZCgpLT5jYW5Hb0JhY2tPckZvcndhcmQo
MSkpCi0gICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oRm9yd2FyZEl0ZW0pOwotCi0gICAg
ICAgICAgICAgICAgLy8gdXNlIGlzTG9hZGluZ0luQVBJU2Vuc2UgcmF0aGVyIHRoYW4gaXNMb2Fk
aW5nIGJlY2F1c2UgU3RvcC9SZWxvYWQgYXJlCi0gICAgICAgICAgICAgICAgLy8gaW50ZW5kZWQg
dG8gbWF0Y2ggV2ViS2l0J3MgQVBJLCBub3QgV2ViQ29yZSdzIGludGVybmFsIG5vdGlvbiBvZiBs
b2FkaW5nIHN0YXR1cwotICAgICAgICAgICAgICAgIGlmIChsb2FkZXItPmRvY3VtZW50TG9hZGVy
KCktPmlzTG9hZGluZ0luQVBJU2Vuc2UoKSkKLSAgICAgICAgICAgICAgICAgICAgYXBwZW5kSXRl
bShTdG9wSXRlbSk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBh
cHBlbmRJdGVtKFJlbG9hZEl0ZW0pOwotI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgICAgICAg
ICAgICAgfQotI2VuZGlmCi0KLSAgICAgICAgICAgICAgICBpZiAoZnJhbWUtPnBhZ2UoKSAmJiBm
cmFtZSAhPSBmcmFtZS0+cGFnZSgpLT5tYWluRnJhbWUoKSkKLSAgICAgICAgICAgICAgICAgICAg
YXBwZW5kSXRlbShPcGVuRnJhbWVJdGVtKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0gZWxzZSB7IC8vIE1ha2UgYW4gZWRpdGluZyBjb250ZXh0IG1lbnUKLSAgICAgICAgU2VsZWN0
aW9uQ29udHJvbGxlciogc2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigpOwotICAgICAgICBi
b29sIGluUGFzc3dvcmRGaWVsZCA9IHNlbGVjdGlvbi0+aXNJblBhc3N3b3JkRmllbGQoKTsKLSAg
ICAgICAgYm9vbCBzcGVsbENoZWNraW5nRW5hYmxlZCA9IGZyYW1lLT5lZGl0b3IoKS0+aXNTcGVs
bENoZWNraW5nRW5hYmxlZEZvcihub2RlKTsKLSAgICAgICAgCi0gICAgICAgIGlmICghaW5QYXNz
d29yZEZpZWxkICYmIHNwZWxsQ2hlY2tpbmdFbmFibGVkKSB7Ci0gICAgICAgICAgICAvLyBDb25z
aWRlciBhZGRpbmcgc3BlbGxpbmctcmVsYXRlZCBvciBncmFtbWFyLXJlbGF0ZWQgY29udGV4dCBt
ZW51IGl0ZW1zIChuZXZlciBib3RoLCBzaW5jZSBhIHNpbmdsZSBzZWxlY3RlZCByYW5nZQotICAg
ICAgICAgICAgLy8gaXMgbmV2ZXIgY29uc2lkZXJlZCBhIG1pc3NwZWxsaW5nIGFuZCBiYWQgZ3Jh
bW1hciBhdCB0aGUgc2FtZSB0aW1lKQotICAgICAgICAgICAgYm9vbCBtaXNzcGVsbGluZzsKLSAg
ICAgICAgICAgIGJvb2wgYmFkR3JhbW1hcjsKLSAgICAgICAgICAgIFZlY3RvcjxTdHJpbmc+IGd1
ZXNzZXMgPSBmcmFtZS0+ZWRpdG9yKCktPmd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRp
Y2FsU2VsZWN0aW9uKG1pc3NwZWxsaW5nLCBiYWRHcmFtbWFyKTsKLSAgICAgICAgICAgIGlmICht
aXNzcGVsbGluZyB8fCBiYWRHcmFtbWFyKSB7Ci0gICAgICAgICAgICAgICAgc2l6ZV90IHNpemUg
PSBndWVzc2VzLnNpemUoKTsKLSAgICAgICAgICAgICAgICBpZiAoc2l6ZSA9PSAwKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlJ3MgYmFkIGdyYW1tYXIgYnV0IG5vIHN1Z2dlc3Rp
b25zIChlLmcuLCByZXBlYXRlZCB3b3JkKSwganVzdCBsZWF2ZSBvZmYgdGhlIHN1Z2dlc3Rpb25z
Ci0gICAgICAgICAgICAgICAgICAgIC8vIGxpc3QgYW5kIHRyYWlsaW5nIHNlcGFyYXRvciByYXRo
ZXIgdGhhbiBhZGRpbmcgYSAiTm8gR3Vlc3NlcyBGb3VuZCIgaXRlbSAobWF0Y2hlcyBBcHBLaXQp
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtaXNzcGVsbGluZykgewotICAgICAgICAgICAgICAg
ICAgICAgICAgYXBwZW5kSXRlbShOb0d1ZXNzZXNJdGVtKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBTdHJpbmcgJmd1ZXNzID0gZ3Vlc3Nlc1tpXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICghZ3Vlc3MuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGV4
dE1lbnVJdGVtIGl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU3BlbGxpbmdHdWVz
cywgZ3Vlc3MpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oaXRlbSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgYXBwZW5kSXRlbSgqc2VwYXJhdG9ySXRlbSgpKTsgICAgICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBpZiAobWlzc3BlbGxpbmcpIHsKLSAgICAgICAgICAgICAgICAgICAgYXBwZW5kSXRlbShJ
Z25vcmVTcGVsbGluZ0l0ZW0pOwotICAgICAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKExlYXJu
U3BlbGxpbmdJdGVtKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgYXBwZW5kSXRlbShJZ25vcmVHcmFtbWFySXRlbSk7Ci0gICAgICAgICAgICAgICAgYXBwZW5k
SXRlbSgqc2VwYXJhdG9ySXRlbSgpKTsKLSNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJV
SUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQotICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBJZiB0aGUgc3RyaW5nIHdhcyBhdXRv
Y29ycmVjdGVkLCBnZW5lcmF0ZSBhIGNvbnRleHR1YWwgbWVudSBpdGVtIGFsbG93aW5nIGl0IHRv
IGJlIGNoYW5nZWQgYmFjay4KLSAgICAgICAgICAgICAgICBTdHJpbmcgcmVwbGFjZWRTdHJpbmcg
PSByZXN1bHQucmVwbGFjZWRTdHJpbmcoKTsKLSAgICAgICAgICAgICAgICBpZiAoIXJlcGxhY2Vk
U3RyaW5nLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgICAgICBDb250ZXh0TWVudUl0ZW0g
aXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdDaGFuZ2VCYWNrLCBjb250ZXh0TWVu
dUl0ZW1UYWdDaGFuZ2VCYWNrKHJlcGxhY2VkU3RyaW5nKSk7Ci0gICAgICAgICAgICAgICAgICAg
IGFwcGVuZEl0ZW0oaXRlbSk7Ci0gICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oKnNlcGFy
YXRvckl0ZW0oKSk7Ci0gICAgICAgICAgICAgICAgfQotI2VuZGlmCi0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLQotICAgICAgICBGcmFtZUxvYWRlciogbG9hZGVyID0gZnJhbWUtPmxvYWRlcigp
OwotICAgICAgICBLVVJMIGxpbmtVUkwgPSByZXN1bHQuYWJzb2x1dGVMaW5rVVJMKCk7Ci0gICAg
ICAgIGlmICghbGlua1VSTC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGlmIChsb2FkZXItPmNh
bkhhbmRsZVJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0KGxpbmtVUkwpKSkgewotICAgICAgICAgICAg
ICAgIGFwcGVuZEl0ZW0oT3BlbkxpbmtJdGVtKTsKLSAgICAgICAgICAgICAgICBhcHBlbmRJdGVt
KE9wZW5MaW5rSW5OZXdXaW5kb3dJdGVtKTsKLSAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKERv
d25sb2FkRmlsZUl0ZW0pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYXBwZW5kSXRlbShD
b3B5TGlua0l0ZW0pOwotICAgICAgICAgICAgYXBwZW5kSXRlbSgqc2VwYXJhdG9ySXRlbSgpKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmIChyZXN1bHQuaXNTZWxlY3RlZCgpICYmICFpblBhc3N3
b3JkRmllbGQgJiYgc2VsZWN0aW9uQ29udGFpbnNQb3NzaWJsZVdvcmQoZnJhbWUpKSB7Ci0jaWYg
UExBVEZPUk0oTUFDKQotICAgICAgICAgICAgYXBwZW5kSXRlbShTZWFyY2hTcG90bGlnaHRJdGVt
KTsKLSNlbmRpZgotI2lmICFQTEFURk9STShHVEspCi0gICAgICAgICAgICBhcHBlbmRJdGVtKFNl
YXJjaFdlYkl0ZW0pOwotICAgICAgICAgICAgYXBwZW5kSXRlbSgqc2VwYXJhdG9ySXRlbSgpKTsK
LSNlbmRpZgotICAgICAKLSNpZiBQTEFURk9STShNQUMpCi0gICAgICAgICAgICBhcHBlbmRJdGVt
KExvb2tJbkRpY3Rpb25hcnlJdGVtKTsKLSAgICAgICAgICAgIGFwcGVuZEl0ZW0oKnNlcGFyYXRv
ckl0ZW0oKSk7Ci0jZW5kaWYKLSAgICAgICAgfQotCi0gICAgICAgIGFwcGVuZEl0ZW0oQ3V0SXRl
bSk7Ci0gICAgICAgIGFwcGVuZEl0ZW0oQ29weUl0ZW0pOwotICAgICAgICBhcHBlbmRJdGVtKFBh
c3RlSXRlbSk7Ci0jaWYgUExBVEZPUk0oR1RLKQotICAgICAgICBhcHBlbmRJdGVtKERlbGV0ZUl0
ZW0pOwotICAgICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCkpOwotICAgICAgICBhcHBl
bmRJdGVtKFNlbGVjdEFsbEl0ZW0pOwotI2VuZGlmCi0KLSAgICAgICAgaWYgKCFpblBhc3N3b3Jk
RmllbGQpIHsKLSAgICAgICAgICAgIGFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSk7Ci0jaWZu
ZGVmIEJVSUxESU5HX09OX1RJR0VSCi0jaWYgIVBMQVRGT1JNKEdUSykKLSAgICAgICAgICAgIENv
bnRleHRNZW51SXRlbSBTcGVsbGluZ0FuZEdyYW1tYXJNZW51SXRlbShTdWJtZW51VHlwZSwgQ29u
dGV4dE1lbnVJdGVtVGFnU3BlbGxpbmdNZW51LCAKLSAgICAgICAgICAgICAgICBjb250ZXh0TWVu
dUl0ZW1UYWdTcGVsbGluZ01lbnUoKSk7Ci0gICAgICAgICAgICBjcmVhdGVBbmRBcHBlbmRTcGVs
bGluZ0FuZEdyYW1tYXJTdWJNZW51KG1faGl0VGVzdFJlc3VsdCwgU3BlbGxpbmdBbmRHcmFtbWFy
TWVudUl0ZW0pOwotICAgICAgICAgICAgYXBwZW5kSXRlbShTcGVsbGluZ0FuZEdyYW1tYXJNZW51
SXRlbSk7Ci0jZW5kaWYKLSNlbHNlCi0gICAgICAgICAgICBDb250ZXh0TWVudUl0ZW0gU3BlbGxp
bmdNZW51SXRlbShTdWJtZW51VHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU3BlbGxpbmdNZW51LCAK
LSAgICAgICAgICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdTcGVsbGluZ01lbnUoKSk7Ci0gICAg
ICAgICAgICBjcmVhdGVBbmRBcHBlbmRTcGVsbGluZ1N1Yk1lbnUobV9oaXRUZXN0UmVzdWx0LCBT
cGVsbGluZ01lbnVJdGVtKTsKLSAgICAgICAgICAgIGFwcGVuZEl0ZW0oU3BlbGxpbmdNZW51SXRl
bSk7Ci0jZW5kaWYKLSNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJ
R0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQotICAgICAgICAgICAgQ29udGV4
dE1lbnVJdGVtIHN1YnN0aXR1dGlvbnNNZW51SXRlbShTdWJtZW51VHlwZSwgQ29udGV4dE1lbnVJ
dGVtVGFnU3Vic3RpdHV0aW9uc01lbnUsIAotICAgICAgICAgICAgICAgIGNvbnRleHRNZW51SXRl
bVRhZ1N1YnN0aXR1dGlvbnNNZW51KCkpOwotICAgICAgICAgICAgY3JlYXRlQW5kQXBwZW5kU3Vi
c3RpdHV0aW9uc1N1Yk1lbnUobV9oaXRUZXN0UmVzdWx0LCBzdWJzdGl0dXRpb25zTWVudUl0ZW0p
OwotICAgICAgICAgICAgYXBwZW5kSXRlbShzdWJzdGl0dXRpb25zTWVudUl0ZW0pOwotICAgICAg
ICAgICAgQ29udGV4dE1lbnVJdGVtIHRyYW5zZm9ybWF0aW9uc01lbnVJdGVtKFN1Ym1lbnVUeXBl
LCBDb250ZXh0TWVudUl0ZW1UYWdUcmFuc2Zvcm1hdGlvbnNNZW51LCAKLSAgICAgICAgICAgICAg
ICBjb250ZXh0TWVudUl0ZW1UYWdUcmFuc2Zvcm1hdGlvbnNNZW51KCkpOwotICAgICAgICAgICAg
Y3JlYXRlQW5kQXBwZW5kVHJhbnNmb3JtYXRpb25zU3ViTWVudShtX2hpdFRlc3RSZXN1bHQsIHRy
YW5zZm9ybWF0aW9uc01lbnVJdGVtKTsKLSAgICAgICAgICAgIGFwcGVuZEl0ZW0odHJhbnNmb3Jt
YXRpb25zTWVudUl0ZW0pOwotI2VuZGlmCi0jaWYgUExBVEZPUk0oR1RLKQotICAgICAgICAgICAg
Ym9vbCBzaG91bGRTaG93Rm9udE1lbnUgPSBmcmFtZS0+ZWRpdG9yKCktPmNhbkVkaXRSaWNobHko
KTsKLSNlbHNlCi0gICAgICAgICAgICBib29sIHNob3VsZFNob3dGb250TWVudSA9IHRydWU7Ci0j
ZW5kaWYKLSAgICAgICAgICAgIGlmIChzaG91bGRTaG93Rm9udE1lbnUpIHsKLSAgICAgICAgICAg
ICAgICBDb250ZXh0TWVudUl0ZW0gRm9udE1lbnVJdGVtKFN1Ym1lbnVUeXBlLCBDb250ZXh0TWVu
dUl0ZW1UYWdGb250TWVudSwgCi0gICAgICAgICAgICAgICAgICAgIGNvbnRleHRNZW51SXRlbVRh
Z0ZvbnRNZW51KCkpOwotICAgICAgICAgICAgICAgIGNyZWF0ZUFuZEFwcGVuZEZvbnRTdWJNZW51
KG1faGl0VGVzdFJlc3VsdCwgRm9udE1lbnVJdGVtKTsKLSAgICAgICAgICAgICAgICBhcHBlbmRJ
dGVtKEZvbnRNZW51SXRlbSk7Ci0gICAgICAgICAgICB9Ci0jaWYgUExBVEZPUk0oTUFDKQotICAg
ICAgICAgICAgQ29udGV4dE1lbnVJdGVtIFNwZWVjaE1lbnVJdGVtKFN1Ym1lbnVUeXBlLCBDb250
ZXh0TWVudUl0ZW1UYWdTcGVlY2hNZW51LCBjb250ZXh0TWVudUl0ZW1UYWdTcGVlY2hNZW51KCkp
OwotICAgICAgICAgICAgY3JlYXRlQW5kQXBwZW5kU3BlZWNoU3ViTWVudShtX2hpdFRlc3RSZXN1
bHQsIFNwZWVjaE1lbnVJdGVtKTsKLSAgICAgICAgICAgIGFwcGVuZEl0ZW0oU3BlZWNoTWVudUl0
ZW0pOwotI2VuZGlmCi0jaWYgIVBMQVRGT1JNKEdUSykKLSAgICAgICAgICAgIENvbnRleHRNZW51
SXRlbSBXcml0aW5nRGlyZWN0aW9uTWVudUl0ZW0oU3VibWVudVR5cGUsIENvbnRleHRNZW51SXRl
bVRhZ1dyaXRpbmdEaXJlY3Rpb25NZW51LCAKLSAgICAgICAgICAgICAgICBjb250ZXh0TWVudUl0
ZW1UYWdXcml0aW5nRGlyZWN0aW9uTWVudSgpKTsKLSAgICAgICAgICAgIGNyZWF0ZUFuZEFwcGVu
ZFdyaXRpbmdEaXJlY3Rpb25TdWJNZW51KG1faGl0VGVzdFJlc3VsdCwgV3JpdGluZ0RpcmVjdGlv
bk1lbnVJdGVtKTsKLSAgICAgICAgICAgIGFwcGVuZEl0ZW0oV3JpdGluZ0RpcmVjdGlvbk1lbnVJ
dGVtKTsKLSAgICAgICAgICAgIGlmIChQYWdlKiBwYWdlID0gZnJhbWUtPnBhZ2UoKSkgewotICAg
ICAgICAgICAgICAgIGlmIChTZXR0aW5ncyogc2V0dGluZ3MgPSBwYWdlLT5zZXR0aW5ncygpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGJvb2wgaW5jbHVkZVRleHREaXJlY3Rpb25TdWJtZW51ID0g
c2V0dGluZ3MtPnRleHREaXJlY3Rpb25TdWJtZW51SW5jbHVzaW9uQmVoYXZpb3IoKSA9PSBUZXh0
RGlyZWN0aW9uU3VibWVudUFsd2F5c0luY2x1ZGVkCi0gICAgICAgICAgICAgICAgICAgICAgICB8
fCAoc2V0dGluZ3MtPnRleHREaXJlY3Rpb25TdWJtZW51SW5jbHVzaW9uQmVoYXZpb3IoKSA9PSBU
ZXh0RGlyZWN0aW9uU3VibWVudUF1dG9tYXRpY2FsbHlJbmNsdWRlZCAmJiBmcmFtZS0+ZWRpdG9y
KCktPmhhc0JpZGlTZWxlY3Rpb24oKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpbmNsdWRl
VGV4dERpcmVjdGlvblN1Ym1lbnUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIENvbnRleHRN
ZW51SXRlbSBUZXh0RGlyZWN0aW9uTWVudUl0ZW0oU3VibWVudVR5cGUsIENvbnRleHRNZW51SXRl
bVRhZ1RleHREaXJlY3Rpb25NZW51LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250
ZXh0TWVudUl0ZW1UYWdUZXh0RGlyZWN0aW9uTWVudSgpKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGNyZWF0ZUFuZEFwcGVuZFRleHREaXJlY3Rpb25TdWJNZW51KG1faGl0VGVzdFJlc3VsdCwg
VGV4dERpcmVjdGlvbk1lbnVJdGVtKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0
ZW0oVGV4dERpcmVjdGlvbk1lbnVJdGVtKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSNlbmRpZgotICAgICAgICB9Ci0gICAgfQotfQot
Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUikKLXZvaWQgQ29udGV4dE1lbnU6OmFkZEluc3BlY3RFbGVt
ZW50SXRlbSgpCi17Ci0gICAgTm9kZSogbm9kZSA9IG1faGl0VGVzdFJlc3VsdC5pbm5lck5vblNo
YXJlZE5vZGUoKTsKLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIEZyYW1l
KiBmcmFtZSA9IG5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgUGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCk7Ci0gICAgaWYg
KCFwYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXBhZ2UtPmluc3BlY3RvckNvbnRy
b2xsZXIoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ29udGV4dE1lbnVJdGVtIEluc3BlY3RF
bGVtZW50SXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdJbnNwZWN0RWxlbWVudCwg
Y29udGV4dE1lbnVJdGVtVGFnSW5zcGVjdEVsZW1lbnQoKSk7Ci0gICAgYXBwZW5kSXRlbSgqc2Vw
YXJhdG9ySXRlbSgpKTsKLSAgICBhcHBlbmRJdGVtKEluc3BlY3RFbGVtZW50SXRlbSk7Ci19Ci0j
ZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKLQotdm9pZCBDb250ZXh0TWVudTo6Y2hlY2tPckVu
YWJsZUlmTmVlZGVkKENvbnRleHRNZW51SXRlbSYgaXRlbSkgY29uc3QKLXsKLSAgICBpZiAoaXRl
bS50eXBlKCkgPT0gU2VwYXJhdG9yVHlwZSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIEZy
YW1lKiBmcmFtZSA9IG1faGl0VGVzdFJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKS0+ZG9jdW1l
bnQoKS0+ZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm47Ci0KLSAgICAv
LyBDdXN0b20gaXRlbXMgYWxyZWFkeSBoYXZlIHByb3BlciBjaGVja2VkIGFuZCBlbmFibGVkIHZh
bHVlcy4KLSAgICBpZiAoQ29udGV4dE1lbnVJdGVtQmFzZUN1c3RvbVRhZyA8PSBpdGVtLmFjdGlv
bigpICYmIGl0ZW0uYWN0aW9uKCkgPD0gQ29udGV4dE1lbnVJdGVtTGFzdEN1c3RvbVRhZykKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgYm9vbCBzaG91bGRFbmFibGUgPSB0cnVlOwotICAgIGJvb2wg
c2hvdWxkQ2hlY2sgPSBmYWxzZTsgCi0KLSAgICBzd2l0Y2ggKGl0ZW0uYWN0aW9uKCkpIHsKLSAg
ICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdDaGVja1NwZWxsaW5nOgotICAgICAgICAgICAg
c2hvdWxkRW5hYmxlID0gZnJhbWUtPmVkaXRvcigpLT5jYW5FZGl0KCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdEZWZhdWx0RGlyZWN0aW9uOgot
ICAgICAgICAgICAgc2hvdWxkQ2hlY2sgPSBmYWxzZTsKLSAgICAgICAgICAgIHNob3VsZEVuYWJs
ZSA9IGZhbHNlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJ
dGVtVGFnTGVmdFRvUmlnaHQ6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnUmlnaHRU
b0xlZnQ6IHsKLSAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgICAgICAgICAg
UmVmUHRyPENTU1N0eWxlRGVjbGFyYXRpb24+IHN0eWxlID0gZnJhbWUtPmRvY3VtZW50KCktPmNy
ZWF0ZUNTU1N0eWxlRGVjbGFyYXRpb24oKTsKLSAgICAgICAgICAgIFN0cmluZyBkaXJlY3Rpb24g
PSBpdGVtLmFjdGlvbigpID09IENvbnRleHRNZW51SXRlbVRhZ0xlZnRUb1JpZ2h0ID8gImx0ciIg
OiAicnRsIjsKLSAgICAgICAgICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eURpcmVj
dGlvbiwgZGlyZWN0aW9uLCBmYWxzZSwgZWMpOwotICAgICAgICAgICAgc2hvdWxkQ2hlY2sgPSBm
cmFtZS0+ZWRpdG9yKCktPnNlbGVjdGlvbkhhc1N0eWxlKHN0eWxlLmdldCgpKSAhPSBGYWxzZVRy
aVN0YXRlOwotICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gdHJ1ZTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnVGV4dERpcmVj
dGlvbkRlZmF1bHQ6IHsKLSAgICAgICAgICAgIEVkaXRvcjo6Q29tbWFuZCBjb21tYW5kID0gZnJh
bWUtPmVkaXRvcigpLT5jb21tYW5kKCJNYWtlVGV4dFdyaXRpbmdEaXJlY3Rpb25OYXR1cmFsIik7
Ci0gICAgICAgICAgICBzaG91bGRDaGVjayA9IGNvbW1hbmQuc3RhdGUoKSA9PSBUcnVlVHJpU3Rh
dGU7Ci0gICAgICAgICAgICBzaG91bGRFbmFibGUgPSBjb21tYW5kLmlzRW5hYmxlZCgpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1U
YWdUZXh0RGlyZWN0aW9uTGVmdFRvUmlnaHQ6IHsKLSAgICAgICAgICAgIEVkaXRvcjo6Q29tbWFu
ZCBjb21tYW5kID0gZnJhbWUtPmVkaXRvcigpLT5jb21tYW5kKCJNYWtlVGV4dFdyaXRpbmdEaXJl
Y3Rpb25MZWZ0VG9SaWdodCIpOwotICAgICAgICAgICAgc2hvdWxkQ2hlY2sgPSBjb21tYW5kLnN0
YXRlKCkgPT0gVHJ1ZVRyaVN0YXRlOwotICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gY29tbWFu
ZC5pc0VuYWJsZWQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNh
c2UgQ29udGV4dE1lbnVJdGVtVGFnVGV4dERpcmVjdGlvblJpZ2h0VG9MZWZ0OiB7Ci0gICAgICAg
ICAgICBFZGl0b3I6OkNvbW1hbmQgY29tbWFuZCA9IGZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZCgi
TWFrZVRleHRXcml0aW5nRGlyZWN0aW9uUmlnaHRUb0xlZnQiKTsKLSAgICAgICAgICAgIHNob3Vs
ZENoZWNrID0gY29tbWFuZC5zdGF0ZSgpID09IFRydWVUcmlTdGF0ZTsKLSAgICAgICAgICAgIHNo
b3VsZEVuYWJsZSA9IGNvbW1hbmQuaXNFbmFibGVkKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0NvcHk6Ci0gICAgICAgICAg
ICBzaG91bGRFbmFibGUgPSBmcmFtZS0+ZWRpdG9yKCktPmNhbkRIVE1MQ29weSgpIHx8IGZyYW1l
LT5lZGl0b3IoKS0+Y2FuQ29weSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtVGFnQ3V0OgotICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gZnJhbWUt
PmVkaXRvcigpLT5jYW5ESFRNTEN1dCgpIHx8IGZyYW1lLT5lZGl0b3IoKS0+Y2FuQ3V0KCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdJZ25vcmVT
cGVsbGluZzoKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdMZWFyblNwZWxsaW5nOgot
ICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gZnJhbWUtPnNlbGVjdGlvbigpLT5pc1JhbmdlKCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdQYXN0
ZToKLSAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGZyYW1lLT5lZGl0b3IoKS0+Y2FuREhUTUxQ
YXN0ZSgpIHx8IGZyYW1lLT5lZGl0b3IoKS0+Y2FuUGFzdGUoKTsKLSAgICAgICAgICAgIGJyZWFr
OwotI2lmIFBMQVRGT1JNKEdUSykKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdEZWxl
dGU6Ci0gICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+ZWRpdG9yKCktPmNhbkRlbGV0
ZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFn
U2VsZWN0QWxsOgotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0lucHV0TWV0aG9kczoK
LSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdVbmljb2RlOgotICAgICAgICAgICAgc2hv
dWxkRW5hYmxlID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmCi0gICAgICAgIGNh
c2UgQ29udGV4dE1lbnVJdGVtVGFnVW5kZXJsaW5lOiB7Ci0gICAgICAgICAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKLSAgICAgICAgICAgIFJlZlB0cjxDU1NTdHlsZURlY2xhcmF0aW9uPiBzdHls
ZSA9IGZyYW1lLT5kb2N1bWVudCgpLT5jcmVhdGVDU1NTdHlsZURlY2xhcmF0aW9uKCk7Ci0gICAg
ICAgICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlv
bnNJbkVmZmVjdCwgInVuZGVybGluZSIsIGZhbHNlLCBlYyk7Ci0gICAgICAgICAgICBzaG91bGRD
aGVjayA9IGZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0aW9uSGFzU3R5bGUoc3R5bGUuZ2V0KCkpICE9
IEZhbHNlVHJpU3RhdGU7Ci0gICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+ZWRpdG9y
KCktPmNhbkVkaXRSaWNobHkoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnTG9va1VwSW5EaWN0aW9uYXJ5OgotICAgICAgICAg
ICAgc2hvdWxkRW5hYmxlID0gZnJhbWUtPnNlbGVjdGlvbigpLT5pc1JhbmdlKCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdDaGVja0dyYW1tYXJX
aXRoU3BlbGxpbmc6Ci0jaWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCi0gICAgICAgICAgICBpZiAo
ZnJhbWUtPmVkaXRvcigpLT5pc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSkKLSAgICAgICAgICAg
ICAgICBzaG91bGRDaGVjayA9IHRydWU7Ci0gICAgICAgICAgICBzaG91bGRFbmFibGUgPSB0cnVl
OwotI2VuZGlmCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0
ZW1UYWdJdGFsaWM6IHsKLSAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgICAg
ICAgICAgUmVmUHRyPENTU1N0eWxlRGVjbGFyYXRpb24+IHN0eWxlID0gZnJhbWUtPmRvY3VtZW50
KCktPmNyZWF0ZUNTU1N0eWxlRGVjbGFyYXRpb24oKTsKLSAgICAgICAgICAgIHN0eWxlLT5zZXRQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRTdHlsZSwgIml0YWxpYyIsIGZhbHNlLCBlYyk7Ci0gICAg
ICAgICAgICBzaG91bGRDaGVjayA9IGZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0aW9uSGFzU3R5bGUo
c3R5bGUuZ2V0KCkpICE9IEZhbHNlVHJpU3RhdGU7Ci0gICAgICAgICAgICBzaG91bGRFbmFibGUg
PSBmcmFtZS0+ZWRpdG9yKCktPmNhbkVkaXRSaWNobHkoKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQm9sZDogewotICAgICAg
ICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgICAgICAgICBSZWZQdHI8Q1NTU3R5bGVE
ZWNsYXJhdGlvbj4gc3R5bGUgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+Y3JlYXRlQ1NTU3R5bGVEZWNs
YXJhdGlvbigpOwotICAgICAgICAgICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5Rm9u
dFdlaWdodCwgImJvbGQiLCBmYWxzZSwgZWMpOwotICAgICAgICAgICAgc2hvdWxkQ2hlY2sgPSBm
cmFtZS0+ZWRpdG9yKCktPnNlbGVjdGlvbkhhc1N0eWxlKHN0eWxlLmdldCgpKSAhPSBGYWxzZVRy
aVN0YXRlOwotICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gZnJhbWUtPmVkaXRvcigpLT5jYW5F
ZGl0UmljaGx5KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNl
IENvbnRleHRNZW51SXRlbVRhZ091dGxpbmU6Ci0gICAgICAgICAgICBzaG91bGRFbmFibGUgPSBm
YWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRh
Z1Nob3dTcGVsbGluZ1BhbmVsOgotI2lmbmRlZiBCVUlMRElOR19PTl9USUdFUgotICAgICAgICAg
ICAgaWYgKGZyYW1lLT5lZGl0b3IoKS0+c3BlbGxpbmdQYW5lbElzU2hvd2luZygpKQotICAgICAg
ICAgICAgICAgIGl0ZW0uc2V0VGl0bGUoY29udGV4dE1lbnVJdGVtVGFnU2hvd1NwZWxsaW5nUGFu
ZWwoZmFsc2UpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBpdGVtLnNldFRp
dGxlKGNvbnRleHRNZW51SXRlbVRhZ1Nob3dTcGVsbGluZ1BhbmVsKHRydWUpKTsKLSNlbmRpZgot
ICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gZnJhbWUtPmVkaXRvcigpLT5jYW5FZGl0KCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdOb0d1ZXNz
ZXNGb3VuZDoKLSAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGZhbHNlOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQ2hlY2tTcGVsbGluZ1doaWxl
VHlwaW5nOgotICAgICAgICAgICAgc2hvdWxkQ2hlY2sgPSBmcmFtZS0+ZWRpdG9yKCktPmlzQ29u
dGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCk7Ci0gICAgICAgICAgICBicmVhazsKLSNpZiBQ
TEFURk9STShNQUMpCi0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU3Vic3RpdHV0aW9u
c01lbnU6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnVHJhbnNmb3JtYXRpb25zTWVu
dToKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1No
b3dTdWJzdGl0dXRpb25zOgotI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVm
aW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQotICAgICAgICAgICAgaWYgKGZyYW1lLT5lZGl0b3Io
KS0+c3Vic3RpdHV0aW9uc1BhbmVsSXNTaG93aW5nKCkpCi0gICAgICAgICAgICAgICAgaXRlbS5z
ZXRUaXRsZShjb250ZXh0TWVudUl0ZW1UYWdTaG93U3Vic3RpdHV0aW9ucyhmYWxzZSkpOwotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGl0ZW0uc2V0VGl0bGUoY29udGV4dE1lbnVJ
dGVtVGFnU2hvd1N1YnN0aXR1dGlvbnModHJ1ZSkpOwotICAgICAgICAgICAgc2hvdWxkRW5hYmxl
ID0gZnJhbWUtPmVkaXRvcigpLT5jYW5FZGl0KCk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ01ha2VVcHBlckNhc2U6Ci0gICAgICAg
IGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnTWFrZUxvd2VyQ2FzZToKLSAgICAgICAgY2FzZSBDb250
ZXh0TWVudUl0ZW1UYWdDYXBpdGFsaXplOgotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRh
Z0NoYW5nZUJhY2s6Ci0gICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+ZWRpdG9yKCkt
PmNhbkVkaXQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbnRleHRNZW51
SXRlbVRhZ0NvcnJlY3RTcGVsbGluZ0F1dG9tYXRpY2FsbHk6Ci0jaWYgIWRlZmluZWQoQlVJTERJ
TkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpCi0gICAgICAgICAg
ICBzaG91bGRDaGVjayA9IGZyYW1lLT5lZGl0b3IoKS0+aXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJl
Y3Rpb25FbmFibGVkKCk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IENvbnRleHRNZW51SXRlbVRhZ1NtYXJ0Q29weVBhc3RlOgotI2lmICFkZWZpbmVkKEJVSUxESU5H
X09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQotICAgICAgICAgICAg
c2hvdWxkQ2hlY2sgPSBmcmFtZS0+ZWRpdG9yKCktPnNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCgp
OwotI2VuZGlmCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0
ZW1UYWdTbWFydFF1b3RlczoKLSNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRl
ZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKLSAgICAgICAgICAgIHNob3VsZENoZWNrID0gZnJh
bWUtPmVkaXRvcigpLT5pc0F1dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uRW5hYmxlZCgpOwotI2Vu
ZGlmCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdT
bWFydERhc2hlczoKLSNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQo
QlVJTERJTkdfT05fTEVPUEFSRCkKLSAgICAgICAgICAgIHNob3VsZENoZWNrID0gZnJhbWUtPmVk
aXRvcigpLT5pc0F1dG9tYXRpY0Rhc2hTdWJzdGl0dXRpb25FbmFibGVkKCk7Ci0jZW5kaWYKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1NtYXJ0TGlu
a3M6Ci0jaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5H
X09OX0xFT1BBUkQpCi0gICAgICAgICAgICBzaG91bGRDaGVjayA9IGZyYW1lLT5lZGl0b3IoKS0+
aXNBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZCgpOwotI2VuZGlmCi0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdUZXh0UmVwbGFjZW1lbnQ6Ci0j
aWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xF
T1BBUkQpCi0gICAgICAgICAgICBzaG91bGRDaGVjayA9IGZyYW1lLT5lZGl0b3IoKS0+aXNBdXRv
bWF0aWNUZXh0UmVwbGFjZW1lbnRFbmFibGVkKCk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1N0b3BTcGVha2luZzoKLSAgICAgICAg
ICAgIHNob3VsZEVuYWJsZSA9IGNvbnRyb2xsZXIoKSAmJiBjb250cm9sbGVyKCktPmNsaWVudCgp
ICYmIGNvbnRyb2xsZXIoKS0+Y2xpZW50KCktPmlzU3BlYWtpbmcoKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotI2Vsc2UgLy8gUExBVEZPUk0oTUFDKSBlbmRzIGhlcmUKLSAgICAgICAgY2FzZSBDb250
ZXh0TWVudUl0ZW1UYWdTdG9wU3BlYWtpbmc6Ci0gICAgICAgICAgICBicmVhazsKLSNlbmRpZgot
I2lmIFBMQVRGT1JNKEdUSykKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdHb0JhY2s6
Ci0gICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+cGFnZSgpICYmIGZyYW1lLT5wYWdl
KCktPmJhY2tGb3J3YXJkKCktPmNhbkdvQmFja09yRm9yd2FyZCgtMSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdHb0ZvcndhcmQ6Ci0gICAgICAg
ICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+cGFnZSgpICYmIGZyYW1lLT5wYWdlKCktPmJhY2tG
b3J3YXJkKCktPmNhbkdvQmFja09yRm9yd2FyZCgxKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1N0b3A6Ci0gICAgICAgICAgICBzaG91bGRFbmFi
bGUgPSBmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPmlzTG9hZGluZ0luQVBJU2Vu
c2UoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRh
Z1JlbG9hZDoKLSAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9ICFmcmFtZS0+bG9hZGVyKCktPmRv
Y3VtZW50TG9hZGVyKCktPmlzTG9hZGluZ0luQVBJU2Vuc2UoKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0ZvbnRNZW51OgotICAgICAgICAgICAg
c2hvdWxkRW5hYmxlID0gZnJhbWUtPmVkaXRvcigpLT5jYW5FZGl0UmljaGx5KCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSNlbHNlCi0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnR29CYWNr
OgotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0dvRm9yd2FyZDoKLSAgICAgICAgY2Fz
ZSBDb250ZXh0TWVudUl0ZW1UYWdTdG9wOgotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRh
Z1JlbG9hZDoKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdGb250TWVudToKLSNlbmRp
ZgotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ05vQWN0aW9uOgotICAgICAgICBjYXNl
IENvbnRleHRNZW51SXRlbVRhZ09wZW5MaW5rSW5OZXdXaW5kb3c6Ci0gICAgICAgIGNhc2UgQ29u
dGV4dE1lbnVJdGVtVGFnRG93bmxvYWRMaW5rVG9EaXNrOgotICAgICAgICBjYXNlIENvbnRleHRN
ZW51SXRlbVRhZ0NvcHlMaW5rVG9DbGlwYm9hcmQ6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJ
dGVtVGFnT3BlbkltYWdlSW5OZXdXaW5kb3c6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVt
VGFnRG93bmxvYWRJbWFnZVRvRGlzazoKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdD
b3B5SW1hZ2VUb0NsaXBib2FyZDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENv
bnRleHRNZW51SXRlbVRhZ09wZW5NZWRpYUluTmV3V2luZG93OgotICAgICAgICAgICAgaWYgKG1f
aGl0VGVzdFJlc3VsdC5tZWRpYUlzVmlkZW8oKSkKLSAgICAgICAgICAgICAgICBpdGVtLnNldFRp
dGxlKGNvbnRleHRNZW51SXRlbVRhZ09wZW5WaWRlb0luTmV3V2luZG93KCkpOwotICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIGl0ZW0uc2V0VGl0bGUoY29udGV4dE1lbnVJdGVtVGFn
T3BlbkF1ZGlvSW5OZXdXaW5kb3coKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBDb250ZXh0TWVudUl0ZW1UYWdDb3B5TWVkaWFMaW5rVG9DbGlwYm9hcmQ6Ci0gICAgICAgICAg
ICBpZiAobV9oaXRUZXN0UmVzdWx0Lm1lZGlhSXNWaWRlbygpKQotICAgICAgICAgICAgICAgIGl0
ZW0uc2V0VGl0bGUoY29udGV4dE1lbnVJdGVtVGFnQ29weVZpZGVvTGlua1RvQ2xpcGJvYXJkKCkp
OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGl0ZW0uc2V0VGl0bGUoY29udGV4
dE1lbnVJdGVtVGFnQ29weUF1ZGlvTGlua1RvQ2xpcGJvYXJkKCkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnVG9nZ2xlTWVkaWFDb250cm9sczoK
LSAgICAgICAgICAgIHNob3VsZENoZWNrID0gbV9oaXRUZXN0UmVzdWx0Lm1lZGlhQ29udHJvbHNF
bmFibGVkKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0
ZW1UYWdUb2dnbGVNZWRpYUxvb3A6Ci0gICAgICAgICAgICBzaG91bGRDaGVjayA9IG1faGl0VGVz
dFJlc3VsdC5tZWRpYUxvb3BFbmFibGVkKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBDb250ZXh0TWVudUl0ZW1UYWdFbnRlclZpZGVvRnVsbHNjcmVlbjoKLSAgICAgICAgICAg
IHNob3VsZEVuYWJsZSA9IG1faGl0VGVzdFJlc3VsdC5tZWRpYVN1cHBvcnRzRnVsbHNjcmVlbigp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnT3Bl
bkZyYW1lSW5OZXdXaW5kb3c6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU3BlbGxp
bmdHdWVzczoKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdPdGhlcjoKLSAgICAgICAg
Y2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTZWFyY2hJblNwb3RsaWdodDoKLSAgICAgICAgY2FzZSBD
b250ZXh0TWVudUl0ZW1UYWdTZWFyY2hXZWI6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVt
VGFnT3BlbldpdGhEZWZhdWx0QXBwbGljYXRpb246Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJ
dGVtUERGQWN0dWFsU2l6ZToKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1QREZab29tSW46
Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtUERGWm9vbU91dDoKLSAgICAgICAgY2FzZSBD
b250ZXh0TWVudUl0ZW1QREZBdXRvU2l6ZToKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1Q
REZTaW5nbGVQYWdlOgotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVBERkZhY2luZ1BhZ2Vz
OgotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVBERkNvbnRpbnVvdXM6Ci0gICAgICAgIGNh
c2UgQ29udGV4dE1lbnVJdGVtUERGTmV4dFBhZ2U6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJ
dGVtUERGUHJldmlvdXNQYWdlOgotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5M
aW5rOgotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0lnbm9yZUdyYW1tYXI6Ci0gICAg
ICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU3BlbGxpbmdNZW51OgotICAgICAgICBjYXNlIENv
bnRleHRNZW51SXRlbVRhZ1Nob3dGb250czoKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1U
YWdTdHlsZXM6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU2hvd0NvbG9yczoKLSAg
ICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTcGVlY2hNZW51OgotICAgICAgICBjYXNlIENv
bnRleHRNZW51SXRlbVRhZ1N0YXJ0U3BlYWtpbmc6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJ
dGVtVGFnV3JpdGluZ0RpcmVjdGlvbk1lbnU6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVt
VGFnVGV4dERpcmVjdGlvbk1lbnU6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnUERG
U2luZ2xlUGFnZVNjcm9sbGluZzoKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdQREZG
YWNpbmdQYWdlc1Njcm9sbGluZzoKLSNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgICAgICBjYXNl
IENvbnRleHRNZW51SXRlbVRhZ0luc3BlY3RFbGVtZW50OgotI2VuZGlmCi0gICAgICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtQmFzZUN1c3RvbVRhZzoKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0
ZW1DdXN0b21UYWdOb0FjdGlvbjoKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1MYXN0Q3Vz
dG9tVGFnOgotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbUJhc2VBcHBsaWNhdGlvblRhZzoK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ01lZGlh
UGxheVBhdXNlOgotICAgICAgICAgICAgaWYgKG1faGl0VGVzdFJlc3VsdC5tZWRpYVBsYXlpbmco
KSkKLSAgICAgICAgICAgICAgICBpdGVtLnNldFRpdGxlKGNvbnRleHRNZW51SXRlbVRhZ01lZGlh
UGF1c2UoKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgaXRlbS5zZXRUaXRs
ZShjb250ZXh0TWVudUl0ZW1UYWdNZWRpYVBsYXkoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdNZWRpYU11dGU6Ci0gICAgICAgICAgICBzaG91
bGRFbmFibGUgPSBtX2hpdFRlc3RSZXN1bHQubWVkaWFIYXNBdWRpbygpOwotICAgICAgICAgICAg
c2hvdWxkQ2hlY2sgPSBzaG91bGRFbmFibGUgJiYgIG1faGl0VGVzdFJlc3VsdC5tZWRpYU11dGVk
KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBpdGVtLnNldENoZWNrZWQoc2hv
dWxkQ2hlY2spOwotICAgIGl0ZW0uc2V0RW5hYmxlZChzaG91bGRFbmFibGUpOwotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoQ09OVEVYVF9NRU5VUykKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vQ29udGV4dE1lbnUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL0NvbnRleHRNZW51LmgJKHJldmlzaW9uIDczMTY5KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9Db250ZXh0TWVudS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw2IEBACiAjaW5j
bHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAKICNpbmNsdWRlICJDb250ZXh0TWVudUl0ZW0uaCIK
LSNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1NZW51RGVzY3Jp
cHRpb24uaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2lmIFBMQVRGT1JNKE1BQykK
QEAgLTQ4LDE0ICs0NywxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgQ29udGV4
dE1lbnUgOiBwdWJsaWMgTm9uY29weWFibGUKICAgICB7CiAgICAgcHVibGljOgotICAgICAgICBD
b250ZXh0TWVudShjb25zdCBIaXRUZXN0UmVzdWx0Jik7Ci0gICAgICAgIENvbnRleHRNZW51KGNv
bnN0IEhpdFRlc3RSZXN1bHQmLCBjb25zdCBQbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbik7CisgICAg
ICAgIENvbnRleHRNZW51KCk7CisgICAgICAgIENvbnRleHRNZW51KGNvbnN0IFBsYXRmb3JtTWVu
dURlc2NyaXB0aW9uKTsKICAgICAgICAgfkNvbnRleHRNZW51KCk7CiAKLSAgICAgICAgdm9pZCBw
b3B1bGF0ZSgpOwotICAgICAgICB2b2lkIGFkZEluc3BlY3RFbGVtZW50SXRlbSgpOwotICAgICAg
ICB2b2lkIGNoZWNrT3JFbmFibGVJZk5lZWRlZChDb250ZXh0TWVudUl0ZW0mKSBjb25zdDsKLQog
ICAgICAgICB2b2lkIGluc2VydEl0ZW0odW5zaWduZWQgcG9zaXRpb24sIENvbnRleHRNZW51SXRl
bSYpOwogICAgICAgICB2b2lkIGFwcGVuZEl0ZW0oQ29udGV4dE1lbnVJdGVtJik7CiAgICAgICAg
IApAQCAtNjQsOSArNTksNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdW5zaWdu
ZWQgaXRlbUNvdW50KCkgY29uc3Q7CiAKLSAgICAgICAgSGl0VGVzdFJlc3VsdCBoaXRUZXN0UmVz
dWx0KCkgY29uc3QgeyByZXR1cm4gbV9oaXRUZXN0UmVzdWx0OyB9Ci0gICAgICAgIENvbnRleHRN
ZW51Q29udHJvbGxlciogY29udHJvbGxlcigpIGNvbnN0OwotCiAgICAgICAgIFBsYXRmb3JtTWVu
dURlc2NyaXB0aW9uIHBsYXRmb3JtRGVzY3JpcHRpb24oKSBjb25zdDsKICAgICAgICAgdm9pZCBz
ZXRQbGF0Zm9ybURlc2NyaXB0aW9uKFBsYXRmb3JtTWVudURlc2NyaXB0aW9uKTsKIApAQCAtNzUs
NyArNjcsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHN0YXRpYyBDb250ZXh0TWVu
dUl0ZW0qIGl0ZW1XaXRoSWQoaW50KTsKICNlbmRpZgogICAgIHByaXZhdGU6Ci0gICAgICAgIEhp
dFRlc3RSZXN1bHQgbV9oaXRUZXN0UmVzdWx0OwogI2lmIFBMQVRGT1JNKE1BQykKICAgICAgICAg
Ly8gS2VlcCB0aGlzIGluIHN5bmMgd2l0aCB0aGUgUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gdHlw
ZWRlZgogICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IG1fcGxhdGZvcm1EZXNjcmlw
dGlvbjsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9UZW1wb3JhcnlMaW5rU3R1YnMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9UZW1wb3JhcnlMaW5r
U3R1YnMuY3BwCShyZXZpc2lvbiA3MzE2OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9U
ZW1wb3JhcnlMaW5rU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjcsNyArMTY3LDcgQEAg
UGFzdGVib2FyZDo6flBhc3RlYm9hcmQoKQogfQogCiAKLUNvbnRleHRNZW51OjpDb250ZXh0TWVu
dShjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQpIDogbV9oaXRUZXN0UmVzdWx0KHJlc3VsdCkK
K0NvbnRleHRNZW51OjpDb250ZXh0TWVudSgpCiB7CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vYnJldy9Db250
ZXh0TWVudUJyZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vYnJldy9Db250
ZXh0TWVudUJyZXcuY3BwCShyZXZpc2lvbiA3MzE2OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vYnJl
dy9Db250ZXh0TWVudUJyZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxNSArMzIsMTMgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1Db250ZXh0TWVudTo6Q29udGV4dE1lbnUoY29uc3Qg
SGl0VGVzdFJlc3VsdCYgcmVzdWx0KQotICAgIDogbV9oaXRUZXN0UmVzdWx0KHJlc3VsdCkKK0Nv
bnRleHRNZW51OjpDb250ZXh0TWVudSgpCiB7CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotQ29udGV4dE1lbnU6OkNvbnRleHRNZW51KGNvbnN0
IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gbWVu
dSkKLSAgICA6IG1faGl0VGVzdFJlc3VsdChyZXN1bHQpCitDb250ZXh0TWVudTo6Q29udGV4dE1l
bnUoY29uc3QgUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gbWVudSkKIHsKICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICBub3RJbXBsZW1lbnRlZCgpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9jaHJvbWl1bS9Db250ZXh0TWVudUNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2Nocm9taXVtL0NvbnRleHRNZW51Q2hyb21pdW0uY3BwCShyZXZpc2lvbiA3MzE2
OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ29udGV4dE1lbnVDaHJvbWl1bS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM2LDEzICszNiwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAv
LyBUaGlzIGlzIGEgc3R1YiBpbXBsZW1lbnRhdGlvbiBvZiBXZWJLaXQncyBDb250ZXh0TWVudSBj
bGFzcyB0aGF0IGRvZXMKIC8vIG5vdGhpbmcuCiAKLUNvbnRleHRNZW51OjpDb250ZXh0TWVudShj
b25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQpCi0gICAgOiBtX2hpdFRlc3RSZXN1bHQocmVzdWx0
KQorQ29udGV4dE1lbnU6OkNvbnRleHRNZW51KCkKIHsKIH0KIAotQ29udGV4dE1lbnU6OkNvbnRl
eHRNZW51KGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgUGxhdGZvcm1NZW51RGVz
Y3JpcHRpb24gbWVudSkKLSAgICA6IG1faGl0VGVzdFJlc3VsdChyZXN1bHQpCitDb250ZXh0TWVu
dTo6Q29udGV4dE1lbnUoY29uc3QgUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gbWVudSkKIHsKIH0K
IApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9lZmwvQ29udGV4dE1lbnVFZmwuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZWZsL0NvbnRleHRNZW51RWZsLmNwcAkocmV2aXNpb24g
NzMxNjkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2VmbC9Db250ZXh0TWVudUVmbC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI5LDE2ICsyOSwxNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNv
bnRleHRNZW51OjpDb250ZXh0TWVudShjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQpCi0gICAg
OiBtX2hpdFRlc3RSZXN1bHQocmVzdWx0KQorQ29udGV4dE1lbnU6OkNvbnRleHRNZW51KCkKIHsK
ICAgICBtX2NvbnRleHRNZW51Q2xpZW50ID0gc3RhdGljX2Nhc3Q8Q29udGV4dE1lbnVDbGllbnRF
ZmwqPihjb250cm9sbGVyKCktPmNsaWVudCgpKTsKICAgICBtX3BsYXRmb3JtRGVzY3JpcHRpb24g
PSBtX2NvbnRleHRNZW51Q2xpZW50LT5jcmVhdGVQbGF0Zm9ybURlc2NyaXB0aW9uKHRoaXMpOwog
fQogCi1Db250ZXh0TWVudTo6Q29udGV4dE1lbnUoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0
LCBjb25zdCBQbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbiBtZW51KQotICAgIDogbV9oaXRUZXN0UmVz
dWx0KHJlc3VsdCkKLSAgICAsIG1fcGxhdGZvcm1EZXNjcmlwdGlvbihtZW51KQorQ29udGV4dE1l
bnU6OkNvbnRleHRNZW51KGNvbnN0IFBsYXRmb3JtTWVudURlc2NyaXB0aW9uIG1lbnUpCisgICAg
OiBtX3BsYXRmb3JtRGVzY3JpcHRpb24obWVudSkKIHsKICAgICBtX2NvbnRleHRNZW51Q2xpZW50
ID0gc3RhdGljX2Nhc3Q8Q29udGV4dE1lbnVDbGllbnRFZmwqPihjb250cm9sbGVyKCktPmNsaWVu
dCgpKTsKIH0KQEAgLTUxLDcgKzQ5LDYgQEAgQ29udGV4dE1lbnU6On5Db250ZXh0TWVudSgpCiAK
IHZvaWQgQ29udGV4dE1lbnU6OmFwcGVuZEl0ZW0oQ29udGV4dE1lbnVJdGVtJiBpdGVtKQogewot
ICAgIGNoZWNrT3JFbmFibGVJZk5lZWRlZChpdGVtKTsKICAgICBtX2NvbnRleHRNZW51Q2xpZW50
LT5hcHBlbmRJdGVtKG1fcGxhdGZvcm1EZXNjcmlwdGlvbiwgaXRlbSk7CiB9CiAKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZWZsL0NvbnRleHRNZW51SXRlbUVmbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9lZmwvQ29udGV4dE1lbnVJdGVtRWZsLmNwcAkocmV2aXNpb24gNzMx
NjkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2VmbC9Db250ZXh0TWVudUl0ZW1FZmwuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTYsOCArMTE2LDcgQEAgdm9pZCBDb250ZXh0TWVudUl0ZW06OnNldFN1
Yk1lbnUoQ29udGV4dAogICAgICAgICByZXR1cm47CiAKICAgICBtX3BsYXRmb3JtRGVzY3JpcHRp
b24udHlwZSA9IFN1Ym1lbnVUeXBlOwotICAgIG1fcGxhdGZvcm1EZXNjcmlwdGlvbi5zdWJNZW51
ID0gbmV3IENvbnRleHRNZW51KHN1Yk1lbnUtPmhpdFRlc3RSZXN1bHQoKSwKLSAgICAgICAgICAg
IHN1Yk1lbnUtPnJlbGVhc2VQbGF0Zm9ybURlc2NyaXB0aW9uKCkpOworICAgIG1fcGxhdGZvcm1E
ZXNjcmlwdGlvbi5zdWJNZW51ID0gbmV3IENvbnRleHRNZW51KHN1Yk1lbnUtPnJlbGVhc2VQbGF0
Zm9ybURlc2NyaXB0aW9uKCkpOwogfQogCiBib29sIENvbnRleHRNZW51SXRlbTo6Y2hlY2tlZCgp
IGNvbnN0CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2d0ay9Db250ZXh0TWVudUd0ay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ29udGV4dE1lbnVHdGsuY3BwCShyZXZp
c2lvbiA3MzE2OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL0NvbnRleHRNZW51R3RrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzQsOCArMzQsNyBAQCBzdGF0aWMgdm9pZCBtZW51SXRlbUFjdGl2
YXRlZChHdGtNZW51SXRlCiAgICAgY29udHJvbGxlci0+Y29udGV4dE1lbnVJdGVtU2VsZWN0ZWQo
JmNvbnRleHRJdGVtKTsKIH0KIAotQ29udGV4dE1lbnU6OkNvbnRleHRNZW51KGNvbnN0IEhpdFRl
c3RSZXN1bHQmIHJlc3VsdCkKLSAgICA6IG1faGl0VGVzdFJlc3VsdChyZXN1bHQpCitDb250ZXh0
TWVudTo6Q29udGV4dE1lbnUoKQogewogICAgIG1fcGxhdGZvcm1EZXNjcmlwdGlvbiA9IEdUS19N
RU5VKGd0a19tZW51X25ldygpKTsKIApAQCAtNTEsNyArNTAsNiBAQCBDb250ZXh0TWVudTo6fkNv
bnRleHRNZW51KCkKIHZvaWQgQ29udGV4dE1lbnU6OmFwcGVuZEl0ZW0oQ29udGV4dE1lbnVJdGVt
JiBpdGVtKQogewogICAgIEFTU0VSVChtX3BsYXRmb3JtRGVzY3JpcHRpb24pOwotICAgIGNoZWNr
T3JFbmFibGVJZk5lZWRlZChpdGVtKTsKIAogICAgIENvbnRleHRNZW51SXRlbVR5cGUgdHlwZSA9
IGl0ZW0udHlwZSgpOwogICAgIEd0a01lbnVJdGVtKiBwbGF0Zm9ybUl0ZW0gPSBDb250ZXh0TWVu
dUl0ZW06OmNyZWF0ZU5hdGl2ZU1lbnVJdGVtKGl0ZW0ucmVsZWFzZVBsYXRmb3JtRGVzY3JpcHRp
b24oKSk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0NvbnRleHRNZW51SGFpa3UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvQ29udGV4dE1lbnVIYWlrdS5j
cHAJKHJldmlzaW9uIDczMTY5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9Db250ZXh0TWVu
dUhhaWt1LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUsOSArNzUsOCBAQCBwcml2YXRlOgogICAg
IGludCBtX3Jlc3VsdDsKIH07CiAKLUNvbnRleHRNZW51OjpDb250ZXh0TWVudShjb25zdCBIaXRU
ZXN0UmVzdWx0JiByZXN1bHQpCi0gICAgOiBtX2hpdFRlc3RSZXN1bHQocmVzdWx0KQotICAgICwg
bV9wbGF0Zm9ybURlc2NyaXB0aW9uKG5ldyBCTWVudSgiY29udGV4dF9tZW51IikpCitDb250ZXh0
TWVudTo6Q29udGV4dE1lbnUoKQorICAgIDogbV9wbGF0Zm9ybURlc2NyaXB0aW9uKG5ldyBCTWVu
dSgiY29udGV4dF9tZW51IikpCiB7CiB9CiAKQEAgLTg4LDggKzg3LDYgQEAgQ29udGV4dE1lbnU6
On5Db250ZXh0TWVudSgpCiAKIHZvaWQgQ29udGV4dE1lbnU6OmFwcGVuZEl0ZW0oQ29udGV4dE1l
bnVJdGVtJiBpdGVtKQogewotICAgIGNoZWNrT3JFbmFibGVJZk5lZWRlZChpdGVtKTsKLQogICAg
IEJNZW51SXRlbSogbWVudUl0ZW0gPSBpdGVtLnJlbGVhc2VQbGF0Zm9ybURlc2NyaXB0aW9uKCk7
CiAgICAgaWYgKG1lbnVJdGVtKQogICAgICAgICBtX3BsYXRmb3JtRGVzY3JpcHRpb24tPkFkZEl0
ZW0obWVudUl0ZW0pOwpAQCAtMTAyLDggKzk5LDYgQEAgdW5zaWduZWQgQ29udGV4dE1lbnU6Oml0
ZW1Db3VudCgpIGNvbnN0CiAKIHZvaWQgQ29udGV4dE1lbnU6Omluc2VydEl0ZW0odW5zaWduZWQg
cG9zaXRpb24sIENvbnRleHRNZW51SXRlbSYgaXRlbSkKIHsKLSAgICBjaGVja09yRW5hYmxlSWZO
ZWVkZWQoaXRlbSk7Ci0KICAgICBCTWVudUl0ZW0qIG1lbnVJdGVtID0gaXRlbS5yZWxlYXNlUGxh
dGZvcm1EZXNjcmlwdGlvbigpOwogICAgIGlmIChtZW51SXRlbSkKICAgICAgICAgbV9wbGF0Zm9y
bURlc2NyaXB0aW9uLT5BZGRJdGVtKG1lbnVJdGVtLCBwb3NpdGlvbik7CkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL21hYy9Db250ZXh0TWVudU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL21hYy9Db250ZXh0TWVudU1hYy5tbQkocmV2aXNpb24gNzMxNjkpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL21hYy9Db250ZXh0TWVudU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNzEsNyAr
NzEsNyBAQCAtIChCT09MKXZhbGlkYXRlTWVudUl0ZW06KE5TTWVudUl0ZW0gKilpCiB7CiAgICAg
V2ViQ29yZTo6Q29udGV4dE1lbnVJdGVtIGNvcmVJdGVtKGl0ZW0pOwogICAgIEFTU0VSVChfbWVu
dUNvbnRyb2xsZXItPmNvbnRleHRNZW51KCkpOwotICAgIF9tZW51Q29udHJvbGxlci0+Y29udGV4
dE1lbnUoKS0+Y2hlY2tPckVuYWJsZUlmTmVlZGVkKGNvcmVJdGVtKTsKKyAgICBfbWVudUNvbnRy
b2xsZXItPmNoZWNrT3JFbmFibGVJZk5lZWRlZChjb3JlSXRlbSk7CiAgICAgcmV0dXJuIGNvcmVJ
dGVtLmVuYWJsZWQoKTsKIH0KIApAQCAtNzksOCArNzksNyBAQCAtIChCT09MKXZhbGlkYXRlTWVu
dUl0ZW06KE5TTWVudUl0ZW0gKilpCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ29udGV4dE1l
bnU6OkNvbnRleHRNZW51KGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCkKLSAgICA6IG1faGl0
VGVzdFJlc3VsdChyZXN1bHQpCitDb250ZXh0TWVudTo6Q29udGV4dE1lbnUoKQogewogICAgIE5T
TXV0YWJsZUFycmF5KiBhcnJheSA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdOwogICAg
IG1fcGxhdGZvcm1EZXNjcmlwdGlvbiA9IGFycmF5OwpAQCAtODksOSArODgsOCBAQCBDb250ZXh0
TWVudTo6Q29udGV4dE1lbnUoY29uc3QgSGl0VGVzdFJlCiAgICAgW1tXZWJDb3JlTWVudVRhcmdl
dCBzaGFyZWRNZW51VGFyZ2V0XSBzZXRNZW51Q29udHJvbGxlcjpjb250cm9sbGVyKCldOwogfQog
Ci1Db250ZXh0TWVudTo6Q29udGV4dE1lbnUoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBj
b25zdCBQbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbiBtZW51KQotICAgIDogbV9oaXRUZXN0UmVzdWx0
KHJlc3VsdCkKLSAgICAsIG1fcGxhdGZvcm1EZXNjcmlwdGlvbihtZW51KQorQ29udGV4dE1lbnU6
OkNvbnRleHRNZW51KGNvbnN0IFBsYXRmb3JtTWVudURlc2NyaXB0aW9uIG1lbnUpCisgICAgOiBt
X3BsYXRmb3JtRGVzY3JpcHRpb24obWVudSkKIHsKICAgICBbW1dlYkNvcmVNZW51VGFyZ2V0IHNo
YXJlZE1lbnVUYXJnZXRdIHNldE1lbnVDb250cm9sbGVyOmNvbnRyb2xsZXIoKV07CiB9CkBAIC0x
MDgsOCArMTA2LDYgQEAgc3RhdGljIHZvaWQgc2V0TWVudUl0ZW1UYXJnZXQoTlNNZW51SXRlbQog
CiB2b2lkIENvbnRleHRNZW51OjphcHBlbmRJdGVtKENvbnRleHRNZW51SXRlbSYgaXRlbSkKIHsK
LSAgICBjaGVja09yRW5hYmxlSWZOZWVkZWQoaXRlbSk7Ci0KICAgICBDb250ZXh0TWVudUl0ZW1U
eXBlIHR5cGUgPSBpdGVtLnR5cGUoKTsKICAgICBOU01lbnVJdGVtKiBwbGF0Zm9ybUl0ZW0gPSBp
dGVtLnJlbGVhc2VQbGF0Zm9ybURlc2NyaXB0aW9uKCk7CiAgICAgaWYgKHR5cGUgPT0gQWN0aW9u
VHlwZSkKQEAgLTEyMSw4ICsxMTcsNiBAQCB2b2lkIENvbnRleHRNZW51OjphcHBlbmRJdGVtKENv
bnRleHRNZW51CiAKIHZvaWQgQ29udGV4dE1lbnU6Omluc2VydEl0ZW0odW5zaWduZWQgcG9zaXRp
b24sIENvbnRleHRNZW51SXRlbSYgaXRlbSkKIHsKLSAgICBjaGVja09yRW5hYmxlSWZOZWVkZWQo
aXRlbSk7Ci0KICAgICBDb250ZXh0TWVudUl0ZW1UeXBlIHR5cGUgPSBpdGVtLnR5cGUoKTsKICAg
ICBOU01lbnVJdGVtKiBwbGF0Zm9ybUl0ZW0gPSBpdGVtLnJlbGVhc2VQbGF0Zm9ybURlc2NyaXB0
aW9uKCk7CiAgICAgaWYgKHR5cGUgPT0gQWN0aW9uVHlwZSkKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vcXQvQ29udGV4dE1lbnVRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9x
dC9Db250ZXh0TWVudVF0LmNwcAkocmV2aXNpb24gNzMxNjkpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L3F0L0NvbnRleHRNZW51UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw4ICszNSw3IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ29udGV4dE1lbnU6OkNvbnRleHRNZW51KGNvbnN0IEhp
dFRlc3RSZXN1bHQmIHJlc3VsdCkKLSAgICA6IG1faGl0VGVzdFJlc3VsdChyZXN1bHQpCitDb250
ZXh0TWVudTo6Q29udGV4dE1lbnUoKQogewogfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3dp
bi9Db250ZXh0TWVudVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS93aW4v
Q29udGV4dE1lbnVXaW4uY3BwCShyZXZpc2lvbiA3MzE2OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
d2luL0NvbnRleHRNZW51V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsOSArNDMsOCBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNvbnRleHRNZW51OjpDb250ZXh0TWVudShjb25zdCBI
aXRUZXN0UmVzdWx0JiByZXN1bHQpCi0gICAgOiBtX2hpdFRlc3RSZXN1bHQocmVzdWx0KQotICAg
ICwgbV9wbGF0Zm9ybURlc2NyaXB0aW9uKDApCitDb250ZXh0TWVudTo6Q29udGV4dE1lbnUoKQor
ICAgIDogbV9wbGF0Zm9ybURlc2NyaXB0aW9uKDApCiAjaWYgT1MoV0lOQ0UpCiAgICAgLCBtX2l0
ZW1Db3VudCgwKQogI2VuZGlmCkBAIC01Myw5ICs1Miw4IEBAIENvbnRleHRNZW51OjpDb250ZXh0
TWVudShjb25zdCBIaXRUZXN0UmUKICAgICBzZXRQbGF0Zm9ybURlc2NyaXB0aW9uKDo6Q3JlYXRl
UG9wdXBNZW51KCkpOwogfQogCi1Db250ZXh0TWVudTo6Q29udGV4dE1lbnUoY29uc3QgSGl0VGVz
dFJlc3VsdCYgcmVzdWx0LCBjb25zdCBQbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbiBtZW51KQotICAg
IDogbV9oaXRUZXN0UmVzdWx0KHJlc3VsdCkKLSAgICAsIG1fcGxhdGZvcm1EZXNjcmlwdGlvbigw
KQorQ29udGV4dE1lbnU6OkNvbnRleHRNZW51KGNvbnN0IFBsYXRmb3JtTWVudURlc2NyaXB0aW9u
IG1lbnUpCisgICAgOiBtX3BsYXRmb3JtRGVzY3JpcHRpb24oMCkKICNpZiBPUyhXSU5DRSkKICAg
ICAsIG1faXRlbUNvdW50KDApCiAjZW5kaWYKQEAgLTExOCw4ICsxMTYsNiBAQCB2b2lkIENvbnRl
eHRNZW51OjppbnNlcnRJdGVtKHVuc2lnbmVkIGluCiAgICAgaWYgKCFtX3BsYXRmb3JtRGVzY3Jp
cHRpb24pCiAgICAgICAgIHJldHVybjsKIAotICAgIGNoZWNrT3JFbmFibGVJZk5lZWRlZChpdGVt
KTsKLQogI2lmIE9TKFdJTkNFKQogICAgIGlmIChpbnNlcnRNZW51SXRlbShtX3BsYXRmb3JtRGVz
Y3JpcHRpb24sIHBvc2l0aW9uLCBpdGVtKSkKICAgICAgICAgKyttX2l0ZW1Db3VudDsKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vd3gvQ29udGV4dE1lbnVXeC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS93eC9Db250ZXh0TWVudVd4LmNwcAkocmV2aXNpb24gNzMxNjkpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL3d4L0NvbnRleHRNZW51V3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
Miw3ICs0Miw3IEBAIENvbnRleHRNZW51SXRlbSogQ29udGV4dE1lbnU6Oml0ZW1XaXRoSWQKICAg
ICByZXR1cm4gbmV3IENvbnRleHRNZW51SXRlbShBY3Rpb25UeXBlLCBzX2l0ZW1BY3Rpb25zLmdl
dChpZCksICIiKTsKIH0KIAotQ29udGV4dE1lbnU6OkNvbnRleHRNZW51KGNvbnN0IEhpdFRlc3RS
ZXN1bHQmIHJlc3VsdCkgOiBtX2hpdFRlc3RSZXN1bHQocmVzdWx0KQorQ29udGV4dE1lbnU6OkNv
bnRleHRNZW51KCkKIHsKICAgICBtX3BsYXRmb3JtRGVzY3JpcHRpb24gPSBuZXcgd3hNZW51KDAp
OwogfQpAQCAtNTcsOCArNTcsNiBAQCB2b2lkIENvbnRleHRNZW51OjphcHBlbmRJdGVtKENvbnRl
eHRNZW51CiB7CiAgICAgaWYgKCFtX3BsYXRmb3JtRGVzY3JpcHRpb24pCiAgICAgICAgIHJldHVy
bjsKLSAgICAKLSAgICBjaGVja09yRW5hYmxlSWZOZWVkZWQoaXRlbSk7CiAgICAgICAgIAogICAg
IFBsYXRmb3JtTWVudUl0ZW1EZXNjcmlwdGlvbiBpdGVtRGVzY3JpcHRpb24gPSBpdGVtLnJlbGVh
c2VQbGF0Zm9ybURlc2NyaXB0aW9uKCk7ICAgIAogICAgIHd4SXRlbUtpbmQgbWVudUtpbmRXeCA9
ICggaXRlbURlc2NyaXB0aW9uLnR5cGUgPT0gQ2hlY2thYmxlQWN0aW9uVHlwZSApID8gd3hJVEVN
X0NIRUNLIDogd3hJVEVNX05PUk1BTDsKSW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiA3MzQyMCkKKysrIFdlYktpdDIvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTAtMTItMDYgIEJyaWFu
IFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIExheWVyaW5nIFZpb2xhdGlvbiBpbiBDb250ZXh0
TWVudSAtIG1lbWJlciB2YXJpYWJsZSBvZiB0eXBlIEhpdFRlc3RSZXN1bHQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUwNTg2CisgICAgICAgIAorICAg
ICAgICBVcGRhdGUgdXNlcnMgb2YgQ29udGV4dE1lbnUgYW5kIENvbnRleHRNZW51Q29udHJvbGxl
ciB0byBtYXRjaCB3aGVyZSB0aGUgbmV3IGZ1bmN0aW9ucyAKKyAgICAgICAgYXJlIGxvY2F0ZWQu
CisKKyAgICAgICAgKiBTaGFyZWQvV2ViQ29udGV4dE1lbnVJdGVtRGF0YS5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYkNvbnRleHRNZW51SXRlbURhdGE6OldlYkNvbnRleHRNZW51SXRlbURhdGEp
OiBSZW1vdmUgdGhlIGNhbGwgdG8gY2hlY2tPckVuYWJsZUl0ZW0sIHRoYXQgY2FsbCB3aWxsIGJl
IG1hZGUgd2hlbgorICAgICAgICAgICAgdGhlIENvbnRleHRNZW51SXRlbSBpcyBhZGRlZCB0byB0
aGUgQ29udGV4dE1lbnUgdGhyb3VnaCB0aGUgQ29udGV4dE1lbnVDb250cm9sbGVyLgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJDb250ZXh0TWVudS5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYkNvbnRleHRNZW51OjpzaG93KToKKwogMjAxMC0xMi0wNiAgQW5kZXJzIENhcmxzc29u
ICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcu
CkluZGV4OiBXZWJLaXQyL1NoYXJlZC9XZWJDb250ZXh0TWVudUl0ZW1EYXRhLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQyL1NoYXJlZC9XZWJDb250ZXh0TWVudUl0ZW1EYXRhLmNwcAkocmV2aXNp
b24gNzMxNjkpCisrKyBXZWJLaXQyL1NoYXJlZC9XZWJDb250ZXh0TWVudUl0ZW1EYXRhLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzMsOCArNzMsNiBAQCBXZWJDb250ZXh0TWVudUl0ZW1EYXRhOjpX
ZWJDb250ZXh0TWVudUl0CiAgICAgICAgIG1fc3VibWVudSA9IGtpdEl0ZW1zKGNvcmVTdWJtZW51
LCBtZW51KTsKICAgICB9CiAgICAgCi0gICAgbWVudS0+Y2hlY2tPckVuYWJsZUlmTmVlZGVkKGl0
ZW0pOwotICAgIAogICAgIG1fZW5hYmxlZCA9IGl0ZW0uZW5hYmxlZCgpOwogICAgIG1fY2hlY2tl
ZCA9IGl0ZW0uY2hlY2tlZCgpOwogfQpJbmRleDogV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViQ29udGV4dE1lbnUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYkNvbnRleHRNZW51LmNwcAkocmV2aXNpb24gNzMxNjkpCisrKyBXZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJDb250ZXh0TWVudS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDEw
ICs0NywxMyBAQCBXZWJDb250ZXh0TWVudTo6fldlYkNvbnRleHRNZW51KCkKIAogdm9pZCBXZWJD
b250ZXh0TWVudTo6c2hvdygpCiB7Ci0gICAgQ29udGV4dE1lbnUqIG1lbnUgPSBtX3BhZ2UtPmNv
cmVQYWdlKCktPmNvbnRleHRNZW51Q29udHJvbGxlcigpLT5jb250ZXh0TWVudSgpOworICAgIENv
bnRleHRNZW51Q29udHJvbGxlciogY29udHJvbGxlciA9IG1fcGFnZS0+Y29yZVBhZ2UoKS0+Y29u
dGV4dE1lbnVDb250cm9sbGVyKCk7CisgICAgaWYgKCFjb250cm9sbGVyKQorICAgICAgICByZXR1
cm47CisgICAgQ29udGV4dE1lbnUqIG1lbnUgPSBjb250cm9sbGVyLT5jb250ZXh0TWVudSgpOwog
ICAgIGlmICghbWVudSkKICAgICAgICAgcmV0dXJuOwotICAgIE5vZGUqIG5vZGUgPSBtZW51LT5o
aXRUZXN0UmVzdWx0KCkuaW5uZXJOb25TaGFyZWROb2RlKCk7CisgICAgTm9kZSogbm9kZSA9IGNv
bnRyb2xsZXItPmhpdFRlc3RSZXN1bHQoKS5pbm5lck5vblNoYXJlZE5vZGUoKTsKICAgICBpZiAo
IW5vZGUpCiAgICAgICAgIHJldHVybjsKICAgICBGcmFtZSogZnJhbWUgPSBub2RlLT5kb2N1bWVu
dCgpLT5mcmFtZSgpOwpAQCAtNjUsMTIgKzY4LDEyIEBAIHZvaWQgV2ViQ29udGV4dE1lbnU6OnNo
b3coKQogICAgIFZlY3RvcjxXZWJDb250ZXh0TWVudUl0ZW1EYXRhPiBwcm9wb3NlZE1lbnUgPSBr
aXRJdGVtcyhjb3JlSXRlbXMsIG1lbnUpOwogICAgIFZlY3RvcjxXZWJDb250ZXh0TWVudUl0ZW1E
YXRhPiBuZXdNZW51OwogICAgIFJlZlB0cjxBUElPYmplY3Q+IHVzZXJEYXRhOwotICAgIFJlZlB0
cjxJbmplY3RlZEJ1bmRsZUhpdFRlc3RSZXN1bHQ+IGhpdFRlc3RSZXN1bHQgPSBJbmplY3RlZEJ1
bmRsZUhpdFRlc3RSZXN1bHQ6OmNyZWF0ZShtZW51LT5oaXRUZXN0UmVzdWx0KCkpOworICAgIFJl
ZlB0cjxJbmplY3RlZEJ1bmRsZUhpdFRlc3RSZXN1bHQ+IGhpdFRlc3RSZXN1bHQgPSBJbmplY3Rl
ZEJ1bmRsZUhpdFRlc3RSZXN1bHQ6OmNyZWF0ZShjb250cm9sbGVyLT5oaXRUZXN0UmVzdWx0KCkp
OwogICAgIGlmIChtX3BhZ2UtPmluamVjdGVkQnVuZGxlQ29udGV4dE1lbnVDbGllbnQoKS5nZXRD
dXN0b21NZW51RnJvbURlZmF1bHRJdGVtcyhtX3BhZ2UsIGhpdFRlc3RSZXN1bHQuZ2V0KCksIHBy
b3Bvc2VkTWVudSwgbmV3TWVudSwgdXNlckRhdGEpKQogICAgICAgICBwcm9wb3NlZE1lbnUgPSBu
ZXdNZW51OwogCiAgICAgLy8gTm90aWZ5IHRoZSBVSVByb2Nlc3MuCi0gICAgbV9wYWdlLT5zZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNob3dDb250ZXh0TWVudSh2aWV3LT5jb250ZW50c1Rv
V2luZG93KG1lbnUtPmhpdFRlc3RSZXN1bHQoKS5wb2ludCgpKSwgcHJvcG9zZWRNZW51LCBJbmpl
Y3RlZEJ1bmRsZVVzZXJNZXNzYWdlRW5jb2Rlcih1c2VyRGF0YS5nZXQoKSkpKTsKKyAgICBtX3Bh
Z2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2hvd0NvbnRleHRNZW51KHZpZXctPmNv
bnRlbnRzVG9XaW5kb3coY29udHJvbGxlci0+aGl0VGVzdFJlc3VsdCgpLnBvaW50KCkpLCBwcm9w
b3NlZE1lbnUsIEluamVjdGVkQnVuZGxlVXNlck1lc3NhZ2VFbmNvZGVyKHVzZXJEYXRhLmdldCgp
KSkpOwogfQogCiB2b2lkIFdlYkNvbnRleHRNZW51OjppdGVtU2VsZWN0ZWQoY29uc3QgV2ViQ29u
dGV4dE1lbnVJdGVtRGF0YSYgaXRlbSkKSW5kZXg6IFdlYktpdC9xdC9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0L3F0L0NoYW5nZUxvZwkocmV2aXNpb24gNzM0MjMpCisrKyBXZWJLaXQv
cXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTAtMTItMDYg
IEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIExheWVyaW5nIFZpb2xhdGlvbiBpbiBD
b250ZXh0TWVudSAtIG1lbWJlciB2YXJpYWJsZSBvZiB0eXBlIEhpdFRlc3RSZXN1bHQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUwNTg2CisgICAgICAg
IAorICAgICAgICBVcGRhdGUgdXNlcnMgb2YgQ29udGV4dE1lbnUgYW5kIENvbnRleHRNZW51Q29u
dHJvbGxlciB0byBtYXRjaCB3aGVyZSB0aGUgbmV3IGZ1bmN0aW9ucyAKKyAgICAgICAgYXJlIGxv
Y2F0ZWQuCisKKyAgICAgICAgKiBBcGkvcXdlYnBhZ2UuY3BwOgorICAgICAgICAoUVdlYlBhZ2VQ
cml2YXRlOjpjcmVhdGVDb250ZXh0TWVudSk6CisgICAgICAgIChRV2ViUGFnZTo6dXBkYXRlUG9z
aXRpb25EZXBlbmRlbnRBY3Rpb25zKToKKwogMjAxMC0xMi0wNiAgTmF0ZSBDaGFwaW4gIDxqYXBo
ZXRAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCkluZGV4
OiBXZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvQXBp
L3F3ZWJwYWdlLmNwcAkocmV2aXNpb24gNzMxNjkpCisrKyBXZWJLaXQvcXQvQXBpL3F3ZWJwYWdl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQzLDcgKzQ0Myw3IEBAIFFNZW51ICpRV2ViUGFnZVBy
aXZhdGU6OmNyZWF0ZUNvbnRleHRNZW4KICAgICAgICAgICAgICAgICBRQWN0aW9uICphID0gcS0+
YWN0aW9uKGFjdGlvbik7CiAgICAgICAgICAgICAgICAgaWYgKGEpIHsKICAgICAgICAgICAgICAg
ICAgICAgQ29udGV4dE1lbnVJdGVtIGl0KGl0ZW0pOwotICAgICAgICAgICAgICAgICAgICB3ZWJj
b3JlTWVudS0+Y2hlY2tPckVuYWJsZUlmTmVlZGVkKGl0KTsKKyAgICAgICAgICAgICAgICAgICAg
ZC0+cGFnZS0+Y29udGV4dE1lbnVDb250cm9sbGVyKCktPmNoZWNrT3JFbmFibGVJZk5lZWRlZChp
dCk7CiAgICAgICAgICAgICAgICAgICAgIFBsYXRmb3JtTWVudUl0ZW1EZXNjcmlwdGlvbiBkZXNj
ID0gaXQucmVsZWFzZVBsYXRmb3JtRGVzY3JpcHRpb24oKTsKICAgICAgICAgICAgICAgICAgICAg
YS0+c2V0RW5hYmxlZChkZXNjLmVuYWJsZWQpOwogICAgICAgICAgICAgICAgICAgICBhLT5zZXRD
aGVja2VkKGRlc2MuY2hlY2tlZCk7CkBAIC0zMjA5LDEyICszMjA5LDEzIEBAIHZvaWQgUVdlYlBh
Z2U6OnVwZGF0ZVBvc2l0aW9uRGVwZW5kZW50QWMKICAgICAgICAgZC0+aGl0VGVzdFJlc3VsdCA9
IFFXZWJIaXRUZXN0UmVzdWx0KCk7CiAgICAgZWxzZQogICAgICAgICBkLT5oaXRUZXN0UmVzdWx0
ID0gUVdlYkhpdFRlc3RSZXN1bHQobmV3IFFXZWJIaXRUZXN0UmVzdWx0UHJpdmF0ZShyZXN1bHQp
KTsKLSAgICBXZWJDb3JlOjpDb250ZXh0TWVudSBtZW51KHJlc3VsdCk7Ci0gICAgbWVudS5wb3B1
bGF0ZSgpOworCisgICAgZC0+cGFnZS0+Y29udGV4dE1lbnVDb250cm9sbGVyKCktPnNldEhpdFRl
c3RSZXN1bHQocmVzdWx0KTsKKyAgICBkLT5wYWdlLT5jb250ZXh0TWVudUNvbnRyb2xsZXIoKS0+
cG9wdWxhdGUoKTsKICAgICAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogICAgIGlmIChkLT5wYWdl
LT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmVuYWJsZWQoKSkKLSAgICAgICAgbWVudS5hZGRJbnNw
ZWN0RWxlbWVudEl0ZW0oKTsKKyAgICAgICAgZC0+cGFnZS0+Y29udGV4dE1lbnVDb250cm9sbGVy
KCktPmFkZEluc3BlY3RFbGVtZW50SXRlbSgpOwogI2VuZGlmCiAKICAgICBRQml0QXJyYXkgdmlz
aXRlZFdlYkFjdGlvbnMoUVdlYlBhZ2U6OldlYkFjdGlvbkNvdW50KTsKQEAgLTMyMjMsNyArMzIy
NCw3IEBAIHZvaWQgUVdlYlBhZ2U6OnVwZGF0ZVBvc2l0aW9uRGVwZW5kZW50QWMKICAgICBkZWxl
dGUgZC0+Y3VycmVudENvbnRleHRNZW51OwogCiAgICAgLy8gVGhlbiB3ZSBsZXQgY3JlYXRlQ29u
dGV4dE1lbnUoKSBlbmFibGUgdGhlIGFjdGlvbnMgdGhhdCBhcmUgcHV0IGludG8gdGhlIG1lbnUK
LSAgICBkLT5jdXJyZW50Q29udGV4dE1lbnUgPSBkLT5jcmVhdGVDb250ZXh0TWVudSgmbWVudSwg
bWVudS5wbGF0Zm9ybURlc2NyaXB0aW9uKCksICZ2aXNpdGVkV2ViQWN0aW9ucyk7CisgICAgZC0+
Y3VycmVudENvbnRleHRNZW51ID0gZC0+Y3JlYXRlQ29udGV4dE1lbnUoZC0+cGFnZS0+Y29udGV4
dE1lbnVDb250cm9sbGVyKCktPmNvbnRleHRNZW51KCksIGQtPnBhZ2UtPmNvbnRleHRNZW51Q29u
dHJvbGxlcigpLT5jb250ZXh0TWVudSgpLT5wbGF0Zm9ybURlc2NyaXB0aW9uKCksICZ2aXNpdGVk
V2ViQWN0aW9ucyk7CiAjZW5kaWYgLy8gUVRfTk9fQ09OVEVYVE1FTlUKIAogI2lmbmRlZiBRVF9O
T19BQ1RJT04KSW5kZXg6IFdlYktpdC93aW4vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC93aW4vQ2hhbmdlTG9nCShyZXZpc2lvbiA3MzQyMCkKKysrIFdlYktpdC93aW4vQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTAtMTItMDYgIEJyaWFuIFdlaW5z
dGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIExheWVyaW5nIFZpb2xhdGlvbiBpbiBDb250ZXh0TWVudSAt
IG1lbWJlciB2YXJpYWJsZSBvZiB0eXBlIEhpdFRlc3RSZXN1bHQKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUwNTg2CisgICAgICAgIAorICAgICAgICBV
cGRhdGUgdXNlcnMgb2YgQ29udGV4dE1lbnUgYW5kIENvbnRleHRNZW51Q29udHJvbGxlciB0byBt
YXRjaCB3aGVyZSB0aGUgbmV3IGZ1bmN0aW9ucyAKKyAgICAgICAgYXJlIGxvY2F0ZWQuCisKKyAg
ICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5jcHA6CisgICAgICAg
IChXZWJDb250ZXh0TWVudUNsaWVudDo6Z2V0Q3VzdG9tTWVudUZyb21EZWZhdWx0SXRlbXMpOiBH
ZXQgdGhlIEhpdFRlc3RSZXN1bHQgYW5kIENvbnRleHRNZW51IGZyb20gdGhlIAorICAgICAgICAg
ICAgQ29udGV4dE1lbnVDb250cm9sbGVyIChmcm9tIHRoZSBwYWdlKS4KKyAgICAgICAgKFdlYkNv
bnRleHRNZW51Q2xpZW50Ojpjb250ZXh0TWVudUl0ZW1TZWxlY3RlZCk6IEdldCB0aGUgSGl0VGVz
dFJlc3VsdCBmcm9tIHRoZSBDb250ZXh0TWVudUNvbnRyb2xsZXIuCisgICAgICAgICogV2ViVmll
dy5jcHA6CisgICAgICAgIChXZWJWaWV3OjpoYW5kbGVDb250ZXh0TWVudUV2ZW50KTogRGl0dG8u
CisKIDIwMTAtMTItMDUgIEFkYW0gUm9iZW4gIDxhcm9iZW5AYXBwbGUuY29tPgogCiAgICAgICAg
IFdpbmRvd3MgcHJvZHVjdGlvbiBidWlsZCBmaXgKSW5kZXg6IFdlYktpdC93aW4vV2ViVmlldy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAkocmV2aXNpb24gNzMxNjkp
CisrKyBXZWJLaXQvd2luL1dlYlZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQ1LDEyICsx
MjQ1LDE0IEBAIGJvb2wgV2ViVmlldzo6aGFuZGxlQ29udGV4dE1lbnVFdmVudChXUEEKICAgICBp
ZiAoIWhhbmRsZWRFdmVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgQ29udGV4dE1l
bnVDb250cm9sbGVyKiBjb250ZXh0TWVudUNvbnRyb2xsZXIgPSBtX3BhZ2UtPmNvbnRleHRNZW51
Q29udHJvbGxlcigpOworCiAgICAgLy8gU2hvdyB0aGUgbWVudQotICAgIENvbnRleHRNZW51KiBj
b3JlTWVudSA9IG1fcGFnZS0+Y29udGV4dE1lbnVDb250cm9sbGVyKCktPmNvbnRleHRNZW51KCk7
CisgICAgQ29udGV4dE1lbnUqIGNvcmVNZW51ID0gY29udGV4dE1lbnVDb250cm9sbGVyLT5jb250
ZXh0TWVudSgpOwogICAgIGlmICghY29yZU1lbnUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIE5vZGUqIG5vZGUgPSBjb3JlTWVudS0+aGl0VGVzdFJlc3VsdCgpLmlubmVyTm9uU2hhcmVk
Tm9kZSgpOworICAgIE5vZGUqIG5vZGUgPSBjb250ZXh0TWVudUNvbnRyb2xsZXItPmhpdFRlc3RS
ZXN1bHQoKS5pbm5lck5vblNoYXJlZE5vZGUoKTsKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIApAQCAtMTI2Miw3ICsxMjY0LDcgQEAgYm9vbCBXZWJWaWV3OjpoYW5kbGVD
b250ZXh0TWVudUV2ZW50KFdQQQogICAgIGlmICghdmlldykKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgUE9JTlQgcG9pbnQodmlldy0+Y29udGVudHNUb1dpbmRvdyhjb3JlTWVudS0+aGl0
VGVzdFJlc3VsdCgpLnBvaW50KCkpKTsKKyAgICBQT0lOVCBwb2ludCh2aWV3LT5jb250ZW50c1Rv
V2luZG93KGNvbnRleHRNZW51Q29udHJvbGxlci0+aGl0VGVzdFJlc3VsdCgpLnBvaW50KCkpKTsK
IAogICAgIC8vIFRyYW5zbGF0ZSB0aGUgcG9pbnQgdG8gc2NyZWVuIGNvb3JkaW5hdGVzCiAgICAg
aWYgKCE6OkNsaWVudFRvU2NyZWVuKG1fdmlld1dpbmRvdywgJnBvaW50KSkKSW5kZXg6IFdlYktp
dC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ29udGV4dE1lbnVDbGllbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ29udGV4dE1lbnVDbGllbnQuY3BwCShy
ZXZpc2lvbiA3MzMwNikKKysrIFdlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ29udGV4dE1l
bnVDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAi
V2ViVmlldy5oIgogCiAjaW5jbHVkZSA8V2ViQ29yZS9Db250ZXh0TWVudS5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvQ29udGV4dE1lbnVDb250cm9sbGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9FdmVu
dC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1l
TG9hZGVyLmg+CkBAIC02NCw3ICs2NSw3IEBAIEhNRU5VIFdlYkNvbnRleHRNZW51Q2xpZW50Ojpn
ZXRDdXN0b21NZW4KIAogICAgIEhNRU5VIG5ld01lbnUgPSAwOwogICAgIENPTVB0cjxXZWJFbGVt
ZW50UHJvcGVydHlCYWc+IHByb3BlcnR5QmFnOwotICAgIHByb3BlcnR5QmFnLmFkb3B0UmVmKFdl
YkVsZW1lbnRQcm9wZXJ0eUJhZzo6Y3JlYXRlSW5zdGFuY2UobWVudS0+aGl0VGVzdFJlc3VsdCgp
KSk7CisgICAgcHJvcGVydHlCYWcuYWRvcHRSZWYoV2ViRWxlbWVudFByb3BlcnR5QmFnOjpjcmVh
dGVJbnN0YW5jZShtX3dlYlZpZXctPnBhZ2UoKS0+Y29udGV4dE1lbnVDb250cm9sbGVyKCktPmhp
dFRlc3RSZXN1bHQoKSkpOwogICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIGRlY2lkZSB3aGV0aGVy
IHRvIGRvIHRoZSBkZWZhdWx0IGJlZm9yZSBjYWxsaW5nIHRoaXMgZGVsZWdhdGUgbWV0aG9kCiAg
ICAgaWYgKEZBSUxFRCh1aURlbGVnYXRlLT5jb250ZXh0TWVudUl0ZW1zRm9yRWxlbWVudChtX3dl
YlZpZXcsIHByb3BlcnR5QmFnLmdldCgpLCAoT0xFX0hBTkRMRSkoVUxPTkc2NCltZW51LT5wbGF0
Zm9ybURlc2NyaXB0aW9uKCksIChPTEVfSEFORExFKikmbmV3TWVudSkpKQogICAgICAgICByZXR1
cm4gbWVudS0+cGxhdGZvcm1EZXNjcmlwdGlvbigpOwpAQCAtODIsNyArODMsNyBAQCB2b2lkIFdl
YkNvbnRleHRNZW51Q2xpZW50Ojpjb250ZXh0TWVudUl0CiAgICAgQVNTRVJUKHVpRGVsZWdhdGUp
OwogCiAgICAgQ09NUHRyPFdlYkVsZW1lbnRQcm9wZXJ0eUJhZz4gcHJvcGVydHlCYWc7Ci0gICAg
cHJvcGVydHlCYWcuYWRvcHRSZWYoV2ViRWxlbWVudFByb3BlcnR5QmFnOjpjcmVhdGVJbnN0YW5j
ZShwYXJlbnRNZW51LT5oaXRUZXN0UmVzdWx0KCkpKTsKKyAgICBwcm9wZXJ0eUJhZy5hZG9wdFJl
ZihXZWJFbGVtZW50UHJvcGVydHlCYWc6OmNyZWF0ZUluc3RhbmNlKG1fd2ViVmlldy0+cGFnZSgp
LT5jb250ZXh0TWVudUNvbnRyb2xsZXIoKS0+aGl0VGVzdFJlc3VsdCgpKSk7CiAgICAgICAgICAg
ICAKICAgICB1aURlbGVnYXRlLT5jb250ZXh0TWVudUl0ZW1TZWxlY3RlZChtX3dlYlZpZXcsIGl0
ZW0tPnJlbGVhc2VQbGF0Zm9ybURlc2NyaXB0aW9uKCksIHByb3BlcnR5QmFnLmdldCgpKTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75781</attachid>
            <date>2010-12-06 20:34:51 -0800</date>
            <delta_ts>2010-12-07 20:15:52 -0800</delta_ts>
            <desc>[PATCH] Fix + Qt (Take 2)</desc>
            <filename>context_menu_layering_violation_fix.patch</filename>
            <type>text/plain</type>
            <size>120153</size>
            <attacher name="Brian Weinstein">bweinstein</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MzQyMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODMgQEAKKzIwMTAtMTItMDYgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5A
YXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIExheWVyaW5nIFZpb2xhdGlvbiBpbiBDb250ZXh0TWVudSAtIG1lbWJlciB2YXJpYWJsZSBv
ZiB0eXBlIEhpdFRlc3RSZXN1bHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTUwNTg2CisgICAgICAgIAorICAgICAgICBDb250ZXh0TWVudSBoYWQgYSBs
YXllcmluZyB2aW9sYXRpb24gYnkgaGF2aW5nIGEgbWVtYmVyIHZhcmlhYmxlIG9mIHR5cGUgSGl0
VGVzdFJlc3VsdCwgYmVjYXVzZQorICAgICAgICBjbGFzc2VzIGluIFdlYkNvcmUvcGxhdGZvcm0g
Y2FuJ3Qga25vdyBhYm91dCBjbGFzc2VzIGluIFdlYkNvcmUuCisgICAgICAgIAorICAgICAgICBU
aGlzIHBhdGNoIG1vdmVzIHRoZSBIaXRUZXN0UmVzdWx0IGFuZCBhbGwgZnVuY3Rpb25zIHRoYXQg
dXNlIGl0IG91dCBvZiBDb250ZXh0TWVudSBpbnRvIENvbnRleHRNZW51Q29udHJvbGxlci4KKyAg
ICAgICAgQWxsIG9mIHRoZSBmdW5jdGlvbnMgdGhhdCBkZWFsdCB3aXRoIHBvcHVsYXRpbmcgdGhl
IENvbnRleHRNZW51IGFyZSBub3cgaW4gQ29udGV4dE1lbnVDb250cm9sbGVyLCBhbmQgdGhpcwor
ICAgICAgICBhbGxvd2VkIHVzIHRvIGRlbGV0ZSB0aGUgQ29udGV4dE1lbnUgZmlsZSwgcHV0dGlu
ZyBhbGwgb2YgdGhlIGNyb3NzLXBsYXRmb3JtIGNvZGUgdGhhdCB1c2VkIHRvIGJlIGl0CisgICAg
ICAgIGluIENvbnRleHRNZW51Q29udHJvbGxlciwgYW5kIHRoZSByZXN0IG9mIHRoZSBjb2RlIGlz
IGluIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBmaWxlcy4KKworICAgICAgICBObyBjaGFuZ2UgaW4g
YmVoYXZpb3IsIG5vIG5ldyB0ZXN0cy4KKworICAgICAgICAqIEFuZHJvaWQubWs6IFJlbW92ZWQg
Q29udGV4dE1lbnUuY3BwLgorICAgICAgICAqIENNYWtlTGlzdHMudHh0OiBEaXR0by4KKyAgICAg
ICAgKiBHTlVtYWtlZmlsZS5hbTogRGl0dG8uCisgICAgICAgICogV2ViQ29yZS5neXBpOiBEaXR0
by4KKyAgICAgICAgKiBXZWJDb3JlLnBybzogRGl0dG8uCisgICAgICAgICogV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2o6IERpdHRvLgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajogRGl0dG8uCisKKyAgICAgICAgKiBwYWdlL0NvbnRleHRNZW51Q29udHJv
bGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0TWVudUNvbnRyb2xsZXI6OkNvbnRl
eHRNZW51Q29udHJvbGxlcik6IEluaXRpYWxpemVkIG1faGl0VGVzdFJlc3VsdCB0byBhbiBlbXB0
eSBIaXRUZXN0UmVzdWx0LgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVDb250cm9sbGVy
OjpoYW5kbGVDb250ZXh0TWVudUV2ZW50KTogQ2FsbCBwb3B1bGF0ZSBvbiB0aGUgQ29udGV4dE1l
bnVDb250cm9sbGVyIGluc3RlYWQKKyAgICAgICAgICAgIG9mIHRoZSBDb250ZXh0TWVudS4KKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51Q29udHJvbGxlcjo6Y3JlYXRlQ29udGV4dE1lbnUp
OiBGaXggc29tZSBpbmRpbmF0aW9uLCBhbmQgc3RvcmUgdGhlIEhpdFRlc3RSZXN1bHQgaW4gYSBt
ZW1iZXIKKyAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1l
bnVDb250cm9sbGVyOjpzaG93Q29udGV4dE1lbnUpOiBDYWxsIGFkZEluc3BlY3RFbGVtZW50SXRl
bSBvbiB0aGUgQ29udGV4dE1lbnVDb250cm9sbGVyLgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4
dE1lbnVDb250cm9sbGVyOjpjb250ZXh0TWVudUl0ZW1TZWxlY3RlZCk6IFVzZSBtX2hpdFRlc3RS
ZXN1bHQgd2hlbmV2ZXIgd2UgbmVlZCBhIEhpdFRlc3RSZXN1bHQuCisgICAgICAgIChXZWJDb3Jl
OjpDb250ZXh0TWVudUNvbnRyb2xsZXI6OmFwcGVuZEl0ZW0pOiBWYWxpZGF0ZXMgdGhlIGl0ZW0g
Zm9yIGl0cyBzdGF0ZSwgYW5kIHRoZW4gYXBwZW5kcyBpdCB0byB0aGUgcGFyZW50IG1lbnUuCisg
ICAgICAgICAgICBUaGlzIGFsbG93ZWQgdXMgdG8gbW92ZSBjaGVja09yRW5hYmxlSWZOZWVkZWQg
ZnJvbSBDb250ZXh0TWVudS4KKworICAgICAgICBUaGVzZSBmdW5jdGlvbnMgd2VyZSBhbGwgbW92
ZWQgZnJvbSBDb250ZXh0TWVudSwgYW5kIGNoYW5nZWQgc2xpZ2h0bHkgdG8gZml0IGluIENvbnRl
eHRNZW51Q29udHJvbGxlci4KKyAgICAgICAgQWxsIGNhbGxzIHRvIENvbnRleHRNZW51OjphcHBl
bmRJdGVtIHdlcmUgY2hhbmdlZCB0byBDb250ZXh0TWVudUNvbnRyb2xsZXI6OmFwcGVuZEl0ZW0s
IHdoaWNoIHRha2VzIGNhcmUKKyAgICAgICAgb2YgdmFsaWRhdGluZyB0aGUgbWVudS4KKyAgICAg
ICAgKFdlYkNvcmU6OnNlcGFyYXRvckl0ZW0pOiBNb3ZlZCBmcm9tIENvbnRleHRNZW51LgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVDb250cm9sbGVyOjpjcmVhdGVBbmRBcHBlbmRGb250
U3ViTWVudSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVDb250cm9sbGVy
OjpjcmVhdGVBbmRBcHBlbmRTcGVsbGluZ0FuZEdyYW1tYXJTdWJNZW51KTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNyZWF0ZUFuZEFwcGVuZFNwZWVj
aFN1Yk1lbnUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51Q29udHJvbGxl
cjo6Y3JlYXRlQW5kQXBwZW5kV3JpdGluZ0RpcmVjdGlvblN1Yk1lbnUpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRleHRNZW51Q29udHJvbGxlcjo6Y3JlYXRlQW5kQXBwZW5kVGV4dERp
cmVjdGlvblN1Yk1lbnUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51Q29u
dHJvbGxlcjo6Y3JlYXRlQW5kQXBwZW5kU3Vic3RpdHV0aW9uc1N1Yk1lbnUpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51Q29udHJvbGxlcjo6Y3JlYXRlQW5kQXBwZW5kVHJh
bnNmb3JtYXRpb25zU3ViTWVudSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6c2VsZWN0aW9u
Q29udGFpbnNQb3NzaWJsZVdvcmQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRN
ZW51Q29udHJvbGxlcjo6cG9wdWxhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
eHRNZW51Q29udHJvbGxlcjo6YWRkSW5zcGVjdEVsZW1lbnRJdGVtKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNoZWNrT3JFbmFibGVJZk5lZWRlZCk6
IERpdHRvLgorICAgICAgICAKKyAgICAgICAgKiBwYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5o
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVDb250cm9sbGVyOjpoaXRUZXN0UmVzdWx0
KTogUmV0dXJucyB0aGUgSGl0VGVzdFJlc3VsdCBvZiB0aGUgY3VycmVudCBDb250ZXh0TWVudS4K
KworICAgICAgICAqIHBsYXRmb3JtL0NvbnRleHRNZW51LmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9Db250ZXh0TWVudS5oOgorICAgICAgICAqIHBsYXRmb3JtL2VmbC9Db250ZXh0
TWVudUVmbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0TWVudTo6Q29udGV4dE1lbnUp
OiBSZW1vdmVkIG1faGl0VGVzdFJlc3VsdCBmcm9tIHRoZSBjb25zdHJ1Y3Rvci4KKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRleHRNZW51OjphcHBlbmRJdGVtKTogUmVtb3ZlZCB0aGUgY2FsbCB0byBj
aGVja09yRW5hYmxlSWZOZWVkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3RrL0NvbnRleHRNZW51
R3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51OjpDb250ZXh0TWVudSk6IFJl
bW92ZWQgbV9oaXRUZXN0UmVzdWx0IGZyb20gdGhlIGNvbnN0cnVjdG9yLgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGV4dE1lbnU6OmFwcGVuZEl0ZW0pOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9y
bS9oYWlrdS9Db250ZXh0TWVudUhhaWt1LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRN
ZW51OjpDb250ZXh0TWVudSk6IFJlbW92ZWQgbV9oaXRUZXN0UmVzdWx0IGZyb20gdGhlIGNvbnN0
cnVjdG9yLgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnU6OmFwcGVuZEl0ZW0pOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51OjppbnNlcnRJdGVtKTogRGl0dG8uCisg
ICAgICAgICogcGxhdGZvcm0vbWFjL0NvbnRleHRNZW51TWFjLm1tOgorICAgICAgICAoLVtXZWJD
b3JlTWVudVRhcmdldCB2YWxpZGF0ZU1lbnVJdGVtOl0pOiBDYWxscyBjaGVja09yRW5hYmxlSWZO
ZWVkZWQgb24gdGhlIGNvbnRyb2xsZXIgaW5zdGVhZCBvZgorICAgICAgICAgICAgdGhlIGNvbnRl
eHQgbWVudS4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51OjpDb250ZXh0TWVudSk6IFJl
bW92ZWQgbV9oaXRUZXN0UmVzdWx0IGZyb20gdGhlIGNvbnN0cnVjdG9yLgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGV4dE1lbnU6OmFwcGVuZEl0ZW0pOiBSZW1vdmVkIHRoZSBjYWxsIHRvIGNoZWNr
T3JFbmFibGVJZk5lZWRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51OjppbnNlcnRJ
dGVtKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vd2luL0NvbnRleHRNZW51V2luLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51OjpDb250ZXh0TWVudSk6IFJlbW92ZWQgbV9o
aXRUZXN0UmVzdWx0IGZyb20gdGhlIGNvbnN0cnVjdG9yLgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGV4dE1lbnU6Omluc2VydEl0ZW0pOiBSZW1vdmVkIHRoZSBjYWxsIHRvIGNoZWNrT3JFbmFibGVJ
Zk5lZWRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS93eC9Db250ZXh0TWVudVd4LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRleHRNZW51OjpDb250ZXh0TWVudSk6IFJlbW92ZWQgbV9oaXRUZXN0
UmVzdWx0IGZyb20gdGhlIGNvbnN0cnVjdG9yLgorICAgICAgICAoQ29udGV4dE1lbnU6OmFwcGVu
ZEl0ZW0pOiBEaXR0by4KKwogMjAxMC0xMi0wNiAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0
Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBUb255IENoYW5nLgpJbmRleDogV2ViQ29yZS9B
bmRyb2lkLm1rCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQW5kcm9pZC5tawkocmV2aXNpb24gNzMx
NjkpCisrKyBXZWJDb3JlL0FuZHJvaWQubWsJKHdvcmtpbmcgY29weSkKQEAgLTQ0OSw3ICs0NDks
NiBAQCBMT0NBTF9TUkNfRklMRVMgOj0gJChMT0NBTF9TUkNfRklMRVMpIFwKIAlcCiAJcGxhdGZv
cm0vQXJlbmEuY3BwIFwKIAlwbGF0Zm9ybS9Db250ZW50VHlwZS5jcHAgXAotCXBsYXRmb3JtL0Nv
bnRleHRNZW51LmNwcCBcCiAJcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwIFwKIAlwbGF0
Zm9ybS9EZXByZWNhdGVkUHRyTGlzdEltcGwuY3BwIFwKIAlwbGF0Zm9ybS9EcmFnRGF0YS5jcHAg
XApJbmRleDogV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NN
YWtlTGlzdHMudHh0CShyZXZpc2lvbiA3MzE2OSkKKysrIFdlYkNvcmUvQ01ha2VMaXN0cy50eHQJ
KHdvcmtpbmcgY29weSkKQEAgLTEyNTksNyArMTI1OSw2IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMK
IAogICAgIHBsYXRmb3JtL0FyZW5hLmNwcAogICAgIHBsYXRmb3JtL0NvbnRlbnRUeXBlLmNwcAot
ICAgIHBsYXRmb3JtL0NvbnRleHRNZW51LmNwcAogICAgIHBsYXRmb3JtL0Nyb3NzVGhyZWFkQ29w
aWVyLmNwcAogICAgIHBsYXRmb3JtL0RlcHJlY2F0ZWRQdHJMaXN0SW1wbC5jcHAKICAgICBwbGF0
Zm9ybS9EcmFnRGF0YS5jcHAKSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gNzMxNjkpCisrKyBXZWJDb3Jl
L0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0yMjQ2LDcgKzIyNDYsNiBAQCB3ZWJj
b3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvcGxhdGZvcm0vQXV0b2RyYWluZWRQb29sLmggXAog
CVdlYkNvcmUvcGxhdGZvcm0vQ29udGVudFR5cGUuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL0Nv
bnRlbnRUeXBlLmggXAotCVdlYkNvcmUvcGxhdGZvcm0vQ29udGV4dE1lbnUuY3BwIFwKIAlXZWJD
b3JlL3BsYXRmb3JtL0NvbnRleHRNZW51LmggXAogCVdlYkNvcmUvcGxhdGZvcm0vQ29udGV4dE1l
bnVJdGVtLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vQ29va2llLmggXApJbmRleDogV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9u
IDczMTY5KQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTMzMzQs
NyArMzMzNCw2IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vQXV0b2RyYWluZWRQb29sLmgnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL0NvbnRlbnRUeXBlLmNwcCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vQ29udGVudFR5cGUuaCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vQ29udGV4dE1lbnUu
Y3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9Db250ZXh0TWVudS5oJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9Db250ZXh0TWVudUl0ZW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vQ29v
a2llLmgnLApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L1dlYkNvcmUucHJvCShyZXZpc2lvbiA3MzE2OSkKKysrIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdv
cmtpbmcgY29weSkKQEAgLTExNDcsNyArMTE0Nyw2IEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRm
b3JtL3RleHQvQmlkaUNvbnRleHQuY3BwIFwKICAgICBwbGF0Zm9ybS90ZXh0L0h5cGhlbmF0aW9u
LmNwcCBcCiAgICAgcGxhdGZvcm0vQ29udGVudFR5cGUuY3BwIFwKLSAgICBwbGF0Zm9ybS9Db250
ZXh0TWVudS5jcHAgXAogICAgIHBsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmNwcCBcCiAgICAg
cGxhdGZvcm0vRGVwcmVjYXRlZFB0ckxpc3RJbXBsLmNwcCBcCiAgICAgcGxhdGZvcm0vRHJhZ0Rh
dGEuY3BwIFwKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNp
b24gNzMxNjkpCisrKyBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNTI1OCwxMCArMjUyNTgsNiBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJ
CTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxDb250ZXh0TWVudS5jcHAiCi0J
CQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3Jt
XENvbnRleHRNZW51LmgiCiAJCQkJPgogCQkJPC9GaWxlPgpJbmRleDogV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDczMTY5KQorKysgV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI4MzMs
NyArMjgzMyw2IEBACiAJCTkzQjJEODE2MEY5OTIwRDIwMDZBRTZCMiAvKiBTdWRkZW5UZXJtaW5h
dGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNC
MkQ4MTUwRjk5MjBEMjAwNkFFNkIyIC8qIFN1ZGRlblRlcm1pbmF0aW9uLmggKi87IH07CiAJCTkz
QjJEODE4MEY5OTIwRUUwMDZBRTZCMiAvKiBTdWRkZW5UZXJtaW5hdGlvbi5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQjJEODE3MEY5OTIwRUUwMDZB
RTZCMiAvKiBTdWRkZW5UZXJtaW5hdGlvbi5tbSAqLzsgfTsKIAkJOTNCNkEwRTYwQjBCQ0E1QzAw
RjUwMjdBIC8qIENvbnRleHRNZW51LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5M0I2QTBFNTBCMEJDQTVDMDBGNTAyN0EgLyogQ29udGV4dE1lbnUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk5M0I2QTBF
ODBCMEJDQTY3MDBGNTAyN0EgLyogQ29udGV4dE1lbnUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNCNkEwRTcwQjBCQ0E2NzAwRjUwMjdBIC8qIENv
bnRleHRNZW51LmNwcCAqLzsgfTsKIAkJOTNCNkEwRUEwQjBCQ0E4NDAwRjUwMjdBIC8qIENvbnRl
eHRNZW51TWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTNCNkEwRTkwQjBCQ0E4NDAwRjUwMjdBIC8qIENvbnRleHRNZW51TWFjLm1tICovOyB9Owog
CQk5M0I3MEQ2MzA5RUIwQzdDMDA5RDg0NjggLyogSlNET01CaW5kaW5nLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQjcwRDQ3MDlFQjBDN0MwMDlE
ODQ2OCAvKiBKU0RPTUJpbmRpbmcuY3BwICovOyB9OwogCQk5M0I3MEQ2NDA5RUIwQzdDMDA5RDg0
NjggLyogSlNET01CaW5kaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5M0I3MEQ0ODA5RUIwQzdDMDA5RDg0NjggLyogSlNET01CaW5kaW5nLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTg5ODIsNyAr
ODk4MSw2IEBACiAJCTkzQjJEODE1MEY5OTIwRDIwMDZBRTZCMiAvKiBTdWRkZW5UZXJtaW5hdGlv
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdWRkZW5UZXJtaW5hdGlvbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0IyRDgxNzBGOTkyMEVFMDA2QUU2QjIg
LyogU3VkZGVuVGVybWluYXRpb24ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBTdWRkZW5UZXJtaW5hdGlvbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJOTNCNkEwRTUwQjBCQ0E1QzAwRjUwMjdBIC8qIENvbnRleHRNZW51LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDb250ZXh0TWVudS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk5M0I2QTBFNzBCMEJDQTY3MDBGNTAyN0EgLyogQ29udGV4dE1lbnUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbnRleHRNZW51LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNCNkEwRTkwQjBCQ0E4NDAwRjUwMjdBIC8qIENv
bnRleHRNZW51TWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IENvbnRleHRNZW51TWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0I3MEQ0
NzA5RUIwQzdDMDA5RDg0NjggLyogSlNET01CaW5kaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKU0RPTUJpbmRpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk5M0I3MEQ0ODA5RUIwQzdDMDA5RDg0NjggLyogSlNET01CaW5kaW5nLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0RPTUJpbmRpbmcuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE3NTA1LDcgKzE3NTAzLDYgQEAKIAkJCQlCQ0M4Q0ZDQTA5
ODZDRDI0MDAxNDBCRjIgLyogQ29sb3JEYXRhLmdwZXJmICovLAogCQkJCTQxRDAxNUM5MEY0QjVD
NzEwMDRBNjYyRiAvKiBDb250ZW50VHlwZS5jcHAgKi8sCiAJCQkJNDFEMDE1QzgwRjRCNUM3MTAw
NEE2NjJGIC8qIENvbnRlbnRUeXBlLmggKi8sCi0JCQkJOTNCNkEwRTcwQjBCQ0E2NzAwRjUwMjdB
IC8qIENvbnRleHRNZW51LmNwcCAqLywKIAkJCQk5M0I2QTBFNTBCMEJDQTVDMDBGNTAyN0EgLyog
Q29udGV4dE1lbnUuaCAqLywKIAkJCQkwNjAyN0NBQzBCMUNCRkMwMDA4ODRCMkQgLyogQ29udGV4
dE1lbnVJdGVtLmggKi8sCiAJCQkJRDhCNjE1MkUxMDMyNDk1MTAwQzg1NTRBIC8qIENvb2tpZS5o
ICovLApAQCAtMjE4NzEsNyArMjE4NjgsNiBAQAogCQkJCUE4MTg3MjFGMDk3N0QzQzAwMDU4MjZE
OSAvKiBDb250YWluZXJOb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNUVCOTgwMEU4MjA3
MjUwMEIyNTk2NSAvKiBDb250ZW50RGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MUQwMTVD
QjBGNEI1QzcxMDA0QTY2MkYgLyogQ29udGVudFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJ
OTNCNkEwRTgwQjBCQ0E2NzAwRjUwMjdBIC8qIENvbnRleHRNZW51LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTA2NUFENEY2MEIwQzJFREEwMDVBMkIxRCAvKiBDb250ZXh0TWVudUNvbnRyb2xsZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDYwMjdDQjMwQjFDQzAzRDAwODg0QjJEIC8qIENvbnRl
eHRNZW51SXRlbU1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzQjZBMEVBMEIwQkNBODQwMEY1
MDI3QSAvKiBDb250ZXh0TWVudU1hYy5tbSBpbiBTb3VyY2VzICovLApJbmRleDogV2ViQ29yZS9w
YWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdl
L0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDczMTY5KQorKysgV2ViQ29yZS9w
YWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMz
LDcgQEAKICNpbmNsdWRlICJDaHJvbWUuaCIKICNpbmNsdWRlICJDb250ZXh0TWVudS5oIgogI2lu
Y2x1ZGUgIkNvbnRleHRNZW51Q2xpZW50LmgiCisjaW5jbHVkZSAiQ29udGV4dE1lbnVJdGVtLmgi
CiAjaW5jbHVkZSAiQ29udGV4dE1lbnVQcm92aWRlci5oIgogI2luY2x1ZGUgIkRvY3VtZW50Lmgi
CiAjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgpAQCAtNTAsNiArNTEsNyBAQAogI2luY2x1
ZGUgIkhpdFRlc3RSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1
ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgi
CiAjaW5jbHVkZSAiTW91c2VFdmVudC5oIgogI2luY2x1ZGUgIk5hdmlnYXRpb25BY3Rpb24uaCIK
ICNpbmNsdWRlICJOb2RlLmgiCkBAIC02Myw2ICs2NSwxMCBAQAogI2luY2x1ZGUgIlRleHRJdGVy
YXRvci5oIgogI2luY2x1ZGUgIldpbmRvd0ZlYXR1cmVzLmgiCiAjaW5jbHVkZSAibWFya3VwLmgi
CisjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVW5pY29kZS5oPgorCit1c2luZyBuYW1lc3BhY2UgV1RG
OwordXNpbmcgbmFtZXNwYWNlIFVuaWNvZGU7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
NzAsNiArNzYsNyBAQCBDb250ZXh0TWVudUNvbnRyb2xsZXI6OkNvbnRleHRNZW51Q29udHJvCiAg
ICAgOiBtX3BhZ2UocGFnZSkKICAgICAsIG1fY2xpZW50KGNsaWVudCkKICAgICAsIG1fY29udGV4
dE1lbnUoMCkKKyAgICAsIG1faGl0VGVzdFJlc3VsdChIaXRUZXN0UmVzdWx0KEludFBvaW50KCkp
KQogewogICAgIEFTU0VSVF9BUkcocGFnZSwgcGFnZSk7CiAgICAgQVNTRVJUX0FSRyhjbGllbnQs
IGNsaWVudCk7CkBAIC05Myw3ICsxMDAsOSBAQCB2b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6
aGFuZGxlQ29udGV4CiAgICAgbV9jb250ZXh0TWVudS5zZXQoY3JlYXRlQ29udGV4dE1lbnUoZXZl
bnQpKTsKICAgICBpZiAoIW1fY29udGV4dE1lbnUpCiAgICAgICAgIHJldHVybjsKLSAgICBtX2Nv
bnRleHRNZW51LT5wb3B1bGF0ZSgpOworCisgICAgcG9wdWxhdGUoKTsKKwogICAgIHNob3dDb250
ZXh0TWVudShldmVudCk7CiB9CiAKQEAgLTExMyw4ICsxMjIsOSBAQCB2b2lkIENvbnRleHRNZW51
Q29udHJvbGxlcjo6c2hvd0NvbnRleHRNCiAKIENvbnRleHRNZW51KiBDb250ZXh0TWVudUNvbnRy
b2xsZXI6OmNyZWF0ZUNvbnRleHRNZW51KEV2ZW50KiBldmVudCkKIHsKLSAgIGlmICghZXZlbnQt
PmlzTW91c2VFdmVudCgpKQorICAgIGlmICghZXZlbnQtPmlzTW91c2VFdmVudCgpKQogICAgICAg
ICByZXR1cm4gMDsKKwogICAgIE1vdXNlRXZlbnQqIG1vdXNlRXZlbnQgPSBzdGF0aWNfY2FzdDxN
b3VzZUV2ZW50Kj4oZXZlbnQpOwogICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0KG1vdXNlRXZlbnQt
PmFic29sdXRlTG9jYXRpb24oKSk7CiAKQEAgLTEyMywxNCArMTMzLDE3IEBAIENvbnRleHRNZW51
KiBDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNyZWEKIAogICAgIGlmICghcmVzdWx0LmlubmVyTm9u
U2hhcmVkTm9kZSgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gbmV3IENvbnRleHRN
ZW51KHJlc3VsdCk7CisKKyAgICBtX2hpdFRlc3RSZXN1bHQgPSByZXN1bHQ7CisKKyAgICByZXR1
cm4gbmV3IENvbnRleHRNZW51KCk7CiB9CiAKIHZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjpz
aG93Q29udGV4dE1lbnUoRXZlbnQqIGV2ZW50KQogewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAg
ICAgaWYgKG1fcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5lbmFibGVkKCkpCi0gICAgICAg
IG1fY29udGV4dE1lbnUtPmFkZEluc3BlY3RFbGVtZW50SXRlbSgpOworICAgICAgICBhZGRJbnNw
ZWN0RWxlbWVudEl0ZW0oKTsKICNlbmRpZgogICAgIFBsYXRmb3JtTWVudURlc2NyaXB0aW9uIGN1
c3RvbU1lbnUgPSBtX2NsaWVudC0+Z2V0Q3VzdG9tTWVudUZyb21EZWZhdWx0SXRlbXMobV9jb250
ZXh0TWVudS5nZXQoKSk7CiAgICAgbV9jb250ZXh0TWVudS0+c2V0UGxhdGZvcm1EZXNjcmlwdGlv
bihjdXN0b21NZW51KTsKQEAgLTE2MSw1NCArMTc0LDUzIEBAIHZvaWQgQ29udGV4dE1lbnVDb250
cm9sbGVyOjpjb250ZXh0TWVudUkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIEhpdFRl
c3RSZXN1bHQgcmVzdWx0ID0gbV9jb250ZXh0TWVudS0+aGl0VGVzdFJlc3VsdCgpOwotICAgIEZy
YW1lKiBmcmFtZSA9IHJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKS0+ZG9jdW1lbnQoKS0+ZnJh
bWUoKTsKKyAgICBGcmFtZSogZnJhbWUgPSBtX2hpdFRlc3RSZXN1bHQuaW5uZXJOb25TaGFyZWRO
b2RlKCktPmRvY3VtZW50KCktPmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgc3dpdGNoIChpdGVtLT5hY3Rpb24oKSkgewogICAgIGNhc2UgQ29udGV4dE1l
bnVJdGVtVGFnT3BlbkxpbmtJbk5ld1dpbmRvdzoKLSAgICAgICAgb3Blbk5ld1dpbmRvdyhyZXN1
bHQuYWJzb2x1dGVMaW5rVVJMKCksIGZyYW1lKTsKKyAgICAgICAgb3Blbk5ld1dpbmRvdyhtX2hp
dFRlc3RSZXN1bHQuYWJzb2x1dGVMaW5rVVJMKCksIGZyYW1lKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdEb3dubG9hZExpbmtUb0Rpc2s6CiAgICAgICAgIC8v
IEZJWE1FOiBTb21lIGRheSB3ZSBzaG91bGQgYmUgYWJsZSB0byBkbyB0aGlzIGZyb20gd2l0aGlu
IFdlYkNvcmUuCi0gICAgICAgIG1fY2xpZW50LT5kb3dubG9hZFVSTChyZXN1bHQuYWJzb2x1dGVM
aW5rVVJMKCkpOworICAgICAgICBtX2NsaWVudC0+ZG93bmxvYWRVUkwobV9oaXRUZXN0UmVzdWx0
LmFic29sdXRlTGlua1VSTCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDb250ZXh0TWVu
dUl0ZW1UYWdDb3B5TGlua1RvQ2xpcGJvYXJkOgotICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPmNv
cHlVUkwocmVzdWx0LmFic29sdXRlTGlua1VSTCgpLCByZXN1bHQudGV4dENvbnRlbnQoKSk7Cisg
ICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+Y29weVVSTChtX2hpdFRlc3RSZXN1bHQuYWJzb2x1dGVM
aW5rVVJMKCksIG1faGl0VGVzdFJlc3VsdC50ZXh0Q29udGVudCgpKTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdPcGVuSW1hZ2VJbk5ld1dpbmRvdzoKLSAgICAg
ICAgb3Blbk5ld1dpbmRvdyhyZXN1bHQuYWJzb2x1dGVJbWFnZVVSTCgpLCBmcmFtZSk7CisgICAg
ICAgIG9wZW5OZXdXaW5kb3cobV9oaXRUZXN0UmVzdWx0LmFic29sdXRlSW1hZ2VVUkwoKSwgZnJh
bWUpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0Rvd25sb2Fk
SW1hZ2VUb0Rpc2s6CiAgICAgICAgIC8vIEZJWE1FOiBTb21lIGRheSB3ZSBzaG91bGQgYmUgYWJs
ZSB0byBkbyB0aGlzIGZyb20gd2l0aGluIFdlYkNvcmUuCi0gICAgICAgIG1fY2xpZW50LT5kb3du
bG9hZFVSTChyZXN1bHQuYWJzb2x1dGVJbWFnZVVSTCgpKTsKKyAgICAgICAgbV9jbGllbnQtPmRv
d25sb2FkVVJMKG1faGl0VGVzdFJlc3VsdC5hYnNvbHV0ZUltYWdlVVJMKCkpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0NvcHlJbWFnZVRvQ2xpcGJvYXJkOgog
ICAgICAgICAvLyBGSVhNRTogVGhlIFBhc3RlYm9hcmQgY2xhc3MgaXMgbm90IHdyaXR0ZW4geWV0
CiAgICAgICAgIC8vIEZvciBub3csIGNhbGwgaW50byB0aGUgY2xpZW50LiBUaGlzIGlzIHRlbXBv
cmFyeSEKLSAgICAgICAgZnJhbWUtPmVkaXRvcigpLT5jb3B5SW1hZ2UocmVzdWx0KTsKKyAgICAg
ICAgZnJhbWUtPmVkaXRvcigpLT5jb3B5SW1hZ2UobV9oaXRUZXN0UmVzdWx0KTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdPcGVuTWVkaWFJbk5ld1dpbmRvdzoK
LSAgICAgICAgb3Blbk5ld1dpbmRvdyhyZXN1bHQuYWJzb2x1dGVNZWRpYVVSTCgpLCBmcmFtZSk7
CisgICAgICAgIG9wZW5OZXdXaW5kb3cobV9oaXRUZXN0UmVzdWx0LmFic29sdXRlTWVkaWFVUkwo
KSwgZnJhbWUpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0Nv
cHlNZWRpYUxpbmtUb0NsaXBib2FyZDoKLSAgICAgICAgZnJhbWUtPmVkaXRvcigpLT5jb3B5VVJM
KHJlc3VsdC5hYnNvbHV0ZU1lZGlhVVJMKCksIHJlc3VsdC50ZXh0Q29udGVudCgpKTsKKyAgICAg
ICAgZnJhbWUtPmVkaXRvcigpLT5jb3B5VVJMKG1faGl0VGVzdFJlc3VsdC5hYnNvbHV0ZU1lZGlh
VVJMKCksIG1faGl0VGVzdFJlc3VsdC50ZXh0Q29udGVudCgpKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdUb2dnbGVNZWRpYUNvbnRyb2xzOgotICAgICAgICBy
ZXN1bHQudG9nZ2xlTWVkaWFDb250cm9sc0Rpc3BsYXkoKTsKKyAgICAgICAgbV9oaXRUZXN0UmVz
dWx0LnRvZ2dsZU1lZGlhQ29udHJvbHNEaXNwbGF5KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgQ29udGV4dE1lbnVJdGVtVGFnVG9nZ2xlTWVkaWFMb29wOgotICAgICAgICByZXN1bHQudG9n
Z2xlTWVkaWFMb29wUGxheWJhY2soKTsKKyAgICAgICAgbV9oaXRUZXN0UmVzdWx0LnRvZ2dsZU1l
ZGlhTG9vcFBsYXliYWNrKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ29udGV4dE1lbnVJ
dGVtVGFnRW50ZXJWaWRlb0Z1bGxzY3JlZW46Ci0gICAgICAgIHJlc3VsdC5lbnRlckZ1bGxzY3Jl
ZW5Gb3JWaWRlbygpOworICAgICAgICBtX2hpdFRlc3RSZXN1bHQuZW50ZXJGdWxsc2NyZWVuRm9y
VmlkZW8oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdNZWRp
YVBsYXlQYXVzZToKLSAgICAgICAgcmVzdWx0LnRvZ2dsZU1lZGlhUGxheVN0YXRlKCk7CisgICAg
ICAgIG1faGl0VGVzdFJlc3VsdC50b2dnbGVNZWRpYVBsYXlTdGF0ZSgpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ01lZGlhTXV0ZToKLSAgICAgICAgcmVzdWx0
LnRvZ2dsZU1lZGlhTXV0ZVN0YXRlKCk7CisgICAgICAgIG1faGl0VGVzdFJlc3VsdC50b2dnbGVN
ZWRpYU11dGVTdGF0ZSgpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENvbnRleHRNZW51SXRl
bVRhZ09wZW5GcmFtZUluTmV3V2luZG93OiB7CiAgICAgICAgIERvY3VtZW50TG9hZGVyKiBsb2Fk
ZXIgPSBmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCk7CkBAIC0yNzIsMTAgKzI4NCwx
MCBAQCB2b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6Y29udGV4dE1lbnVJCiAgICAgICAgIG1f
Y2xpZW50LT5sb29rVXBJbkRpY3Rpb25hcnkoZnJhbWUpOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5MaW5rOgotICAgICAgICBpZiAoRnJhbWUqIHRhcmdl
dEZyYW1lID0gcmVzdWx0LnRhcmdldEZyYW1lKCkpCi0gICAgICAgICAgICB0YXJnZXRGcmFtZS0+
bG9hZGVyKCktPmxvYWRGcmFtZVJlcXVlc3QoRnJhbWVMb2FkUmVxdWVzdChSZXNvdXJjZVJlcXVl
c3QocmVzdWx0LmFic29sdXRlTGlua1VSTCgpLCBmcmFtZS0+bG9hZGVyKCktPm91dGdvaW5nUmVm
ZXJyZXIoKSkpLCBmYWxzZSwgZmFsc2UsIDAsIDAsIFNlbmRSZWZlcnJlcik7CisgICAgICAgIGlm
IChGcmFtZSogdGFyZ2V0RnJhbWUgPSBtX2hpdFRlc3RSZXN1bHQudGFyZ2V0RnJhbWUoKSkKKyAg
ICAgICAgICAgIHRhcmdldEZyYW1lLT5sb2FkZXIoKS0+bG9hZEZyYW1lUmVxdWVzdChGcmFtZUxv
YWRSZXF1ZXN0KFJlc291cmNlUmVxdWVzdChtX2hpdFRlc3RSZXN1bHQuYWJzb2x1dGVMaW5rVVJM
KCksIGZyYW1lLT5sb2FkZXIoKS0+b3V0Z29pbmdSZWZlcnJlcigpKSksIGZhbHNlLCBmYWxzZSwg
MCwgMCwgU2VuZFJlZmVycmVyKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgb3Blbk5ld1dp
bmRvdyhyZXN1bHQuYWJzb2x1dGVMaW5rVVJMKCksIGZyYW1lKTsKKyAgICAgICAgICAgIG9wZW5O
ZXdXaW5kb3cobV9oaXRUZXN0UmVzdWx0LmFic29sdXRlTGlua1VSTCgpLCBmcmFtZSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQm9sZDoKICAgICAgICAgZnJh
bWUtPmVkaXRvcigpLT5jb21tYW5kKCJUb2dnbGVCb2xkIikuZXhlY3V0ZSgpOwpAQCAtMjk0LDcg
KzMwNiw3IEBAIHZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjpjb250ZXh0TWVudUkKICAgICAg
ICAgRXhjZXB0aW9uQ29kZSBlYzsKICAgICAgICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdl
ID0gZnJhbWUtPnNlbGVjdGlvbigpLT50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgICAgICBpZiAo
IXNlbGVjdGVkUmFuZ2UgfHwgc2VsZWN0ZWRSYW5nZS0+Y29sbGFwc2VkKGVjKSkgewotICAgICAg
ICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpLT5k
b2N1bWVudCgpOworICAgICAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9oaXRUZXN0UmVz
dWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpLT5kb2N1bWVudCgpOwogICAgICAgICAgICAgc2VsZWN0
ZWRSYW5nZSA9IGRvY3VtZW50LT5jcmVhdGVSYW5nZSgpOwogICAgICAgICAgICAgc2VsZWN0ZWRS
YW5nZS0+c2VsZWN0Tm9kZShkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCksIGVjKTsKICAgICAg
ICAgfQpAQCAtMzg0LDEzICszOTYsMTMgQEAgdm9pZCBDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNv
bnRleHRNZW51SQogICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPnRvZ2dsZUF1dG9tYXRpY1NwZWxs
aW5nQ29ycmVjdGlvbigpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENvbnRleHRNZW51SXRl
bVRhZ0NoYW5nZUJhY2s6Ci0gICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+Y2hhbmdlQmFja1RvUmVw
bGFjZWRTdHJpbmcocmVzdWx0LnJlcGxhY2VkU3RyaW5nKCkpOworICAgICAgICBmcmFtZS0+ZWRp
dG9yKCktPmNoYW5nZUJhY2tUb1JlcGxhY2VkU3RyaW5nKG1faGl0VGVzdFJlc3VsdC5yZXBsYWNl
ZFN0cmluZygpKTsKICAgICAgICAgYnJlYWs7CiAjZW5kaWYKICNpZiBFTkFCTEUoSU5TUEVDVE9S
KQogICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnSW5zcGVjdEVsZW1lbnQ6CiAgICAgICAgIGlm
IChQYWdlKiBwYWdlID0gZnJhbWUtPnBhZ2UoKSkKLSAgICAgICAgICAgIHBhZ2UtPmluc3BlY3Rv
ckNvbnRyb2xsZXIoKS0+aW5zcGVjdChyZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCkpOworICAg
ICAgICAgICAgcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5pbnNwZWN0KG1faGl0VGVzdFJl
c3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKSk7CiAgICAgICAgIGJyZWFrOwogI2VuZGlmCiAgICAg
ZGVmYXVsdDoKQEAgLTM5OCw2ICs0MTAsODI5IEBAIHZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVy
Ojpjb250ZXh0TWVudUkKICAgICB9CiB9CiAKK3ZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjph
cHBlbmRJdGVtKENvbnRleHRNZW51SXRlbSYgbWVudUl0ZW0sIENvbnRleHRNZW51KiBwYXJlbnRN
ZW51KQoreworICAgIGNoZWNrT3JFbmFibGVJZk5lZWRlZChtZW51SXRlbSk7CisgICAgaWYgKHBh
cmVudE1lbnUpCisgICAgICAgIHBhcmVudE1lbnUtPmFwcGVuZEl0ZW0obWVudUl0ZW0pOworfQor
CitzdGF0aWMgUGFzc093blB0cjxDb250ZXh0TWVudUl0ZW0+IHNlcGFyYXRvckl0ZW0oKQorewor
ICAgIHJldHVybiBuZXcgQ29udGV4dE1lbnVJdGVtKFNlcGFyYXRvclR5cGUsIENvbnRleHRNZW51
SXRlbVRhZ05vQWN0aW9uLCBTdHJpbmcoKSk7Cit9CisKK3ZvaWQgQ29udGV4dE1lbnVDb250cm9s
bGVyOjpjcmVhdGVBbmRBcHBlbmRGb250U3ViTWVudShDb250ZXh0TWVudUl0ZW0mIGZvbnRNZW51
SXRlbSkKK3sKKyAgICBDb250ZXh0TWVudSBmb250TWVudTsKKworI2lmIFBMQVRGT1JNKE1BQykK
KyAgICBDb250ZXh0TWVudUl0ZW0gc2hvd0ZvbnRzKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRl
bVRhZ1Nob3dGb250cywgY29udGV4dE1lbnVJdGVtVGFnU2hvd0ZvbnRzKCkpOworI2VuZGlmCisg
ICAgQ29udGV4dE1lbnVJdGVtIGJvbGQoQ2hlY2thYmxlQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJ
dGVtVGFnQm9sZCwgY29udGV4dE1lbnVJdGVtVGFnQm9sZCgpKTsKKyAgICBDb250ZXh0TWVudUl0
ZW0gaXRhbGljKENoZWNrYWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0l0YWxpYywg
Y29udGV4dE1lbnVJdGVtVGFnSXRhbGljKCkpOworICAgIENvbnRleHRNZW51SXRlbSB1bmRlcmxp
bmUoQ2hlY2thYmxlQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnVW5kZXJsaW5lLCBjb250
ZXh0TWVudUl0ZW1UYWdVbmRlcmxpbmUoKSk7CisgICAgQ29udGV4dE1lbnVJdGVtIG91dGxpbmUo
QWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnT3V0bGluZSwgY29udGV4dE1lbnVJdGVtVGFn
T3V0bGluZSgpKTsKKyNpZiBQTEFURk9STShNQUMpCisgICAgQ29udGV4dE1lbnVJdGVtIHN0eWxl
cyhBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTdHlsZXMsIGNvbnRleHRNZW51SXRlbVRh
Z1N0eWxlcygpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gc2hvd0NvbG9ycyhBY3Rpb25UeXBlLCBD
b250ZXh0TWVudUl0ZW1UYWdTaG93Q29sb3JzLCBjb250ZXh0TWVudUl0ZW1UYWdTaG93Q29sb3Jz
KCkpOworI2VuZGlmCisKKyNpZiBQTEFURk9STShNQUMpCisgICAgYXBwZW5kSXRlbShzaG93Rm9u
dHMsICZmb250TWVudSk7CisjZW5kaWYKKyAgICBhcHBlbmRJdGVtKGJvbGQsICZmb250TWVudSk7
CisgICAgYXBwZW5kSXRlbShpdGFsaWMsICZmb250TWVudSk7CisgICAgYXBwZW5kSXRlbSh1bmRl
cmxpbmUsICZmb250TWVudSk7CisgICAgYXBwZW5kSXRlbShvdXRsaW5lLCAmZm9udE1lbnUpOwor
I2lmIFBMQVRGT1JNKE1BQykKKyAgICBhcHBlbmRJdGVtKHN0eWxlcywgJmZvbnRNZW51KTsKKyAg
ICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCksICZmb250TWVudSk7CisgICAgYXBwZW5kSXRl
bShzaG93Q29sb3JzLCAmZm9udE1lbnUpOworI2VuZGlmCisKKyAgICBmb250TWVudUl0ZW0uc2V0
U3ViTWVudSgmZm9udE1lbnUpOworfQorCisjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIp
CisKKyNpZiAhUExBVEZPUk0oR1RLKQorCit2b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6Y3Jl
YXRlQW5kQXBwZW5kU3BlbGxpbmdBbmRHcmFtbWFyU3ViTWVudShDb250ZXh0TWVudUl0ZW0mIHNw
ZWxsaW5nQW5kR3JhbW1hck1lbnVJdGVtKQoreworICAgIENvbnRleHRNZW51IHNwZWxsaW5nQW5k
R3JhbW1hck1lbnU7CisKKyAgICBDb250ZXh0TWVudUl0ZW0gc2hvd1NwZWxsaW5nUGFuZWwoQWN0
aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU2hvd1NwZWxsaW5nUGFuZWwsIAorICAgICAgICBj
b250ZXh0TWVudUl0ZW1UYWdTaG93U3BlbGxpbmdQYW5lbCh0cnVlKSk7CisgICAgQ29udGV4dE1l
bnVJdGVtIGNoZWNrU3BlbGxpbmcoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnQ2hlY2tT
cGVsbGluZywgCisgICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ0NoZWNrU3BlbGxpbmcoKSk7Cisg
ICAgQ29udGV4dE1lbnVJdGVtIGNoZWNrQXNZb3VUeXBlKENoZWNrYWJsZUFjdGlvblR5cGUsIENv
bnRleHRNZW51SXRlbVRhZ0NoZWNrU3BlbGxpbmdXaGlsZVR5cGluZywgCisgICAgICAgIGNvbnRl
eHRNZW51SXRlbVRhZ0NoZWNrU3BlbGxpbmdXaGlsZVR5cGluZygpKTsKKyAgICBDb250ZXh0TWVu
dUl0ZW0gZ3JhbW1hcldpdGhTcGVsbGluZyhDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVu
dUl0ZW1UYWdDaGVja0dyYW1tYXJXaXRoU3BlbGxpbmcsIAorICAgICAgICBjb250ZXh0TWVudUl0
ZW1UYWdDaGVja0dyYW1tYXJXaXRoU3BlbGxpbmcoKSk7CisjaWYgUExBVEZPUk0oTUFDKSAmJiAh
ZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQorICAgIENvbnRleHRNZW51SXRlbSBjb3JyZWN0
U3BlbGxpbmcoQ2hlY2thYmxlQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnQ29ycmVjdFNw
ZWxsaW5nQXV0b21hdGljYWxseSwgCisgICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ0NvcnJlY3RT
cGVsbGluZ0F1dG9tYXRpY2FsbHkoKSk7CisjZW5kaWYKKworICAgIGFwcGVuZEl0ZW0oc2hvd1Nw
ZWxsaW5nUGFuZWwsICZzcGVsbGluZ0FuZEdyYW1tYXJNZW51KTsKKyAgICBhcHBlbmRJdGVtKGNo
ZWNrU3BlbGxpbmcsICZzcGVsbGluZ0FuZEdyYW1tYXJNZW51KTsKKyNpZiBQTEFURk9STShNQUMp
ICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpCisgICAgYXBwZW5kSXRlbSgqc2VwYXJh
dG9ySXRlbSgpLCAmc3BlbGxpbmdBbmRHcmFtbWFyTWVudSk7CisjZW5kaWYKKyAgICBhcHBlbmRJ
dGVtKGNoZWNrQXNZb3VUeXBlLCAmc3BlbGxpbmdBbmRHcmFtbWFyTWVudSk7CisgICAgYXBwZW5k
SXRlbShncmFtbWFyV2l0aFNwZWxsaW5nLCAmc3BlbGxpbmdBbmRHcmFtbWFyTWVudSk7CisjaWYg
UExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQorICAgIGFwcGVu
ZEl0ZW0oY29ycmVjdFNwZWxsaW5nLCAmc3BlbGxpbmdBbmRHcmFtbWFyTWVudSk7CisjZW5kaWYK
KworICAgIHNwZWxsaW5nQW5kR3JhbW1hck1lbnVJdGVtLnNldFN1Yk1lbnUoJnNwZWxsaW5nQW5k
R3JhbW1hck1lbnUpOworfQorCisjZW5kaWYgLy8gIVBMQVRGT1JNKEdUSykKKworI2Vsc2UKKwor
dm9pZCBDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNyZWF0ZUFuZEFwcGVuZFNwZWxsaW5nQW5kR3Jh
bW1hclN1Yk1lbnUoQ29udGV4dE1lbnVJdGVtJiBzcGVsbGluZ0FuZEdyYW1tYXJNZW51SXRlbSkK
K3sKKyAgICBDb250ZXh0TWVudSBzcGVsbGluZ01lbnU7CisKKyAgICBDb250ZXh0TWVudUl0ZW0g
c2hvd1NwZWxsaW5nUGFuZWwoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU2hvd1NwZWxs
aW5nUGFuZWwsIAorICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdTaG93U3BlbGxpbmdQYW5lbCh0
cnVlKSk7CisgICAgQ29udGV4dE1lbnVJdGVtIGNoZWNrU3BlbGxpbmcoQWN0aW9uVHlwZSwgQ29u
dGV4dE1lbnVJdGVtVGFnQ2hlY2tTcGVsbGluZywgCisgICAgICAgIGNvbnRleHRNZW51SXRlbVRh
Z0NoZWNrU3BlbGxpbmcoKSk7CisgICAgQ29udGV4dE1lbnVJdGVtIGNoZWNrQXNZb3VUeXBlKENo
ZWNrYWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0NoZWNrU3BlbGxpbmdXaGlsZVR5
cGluZywgCisgICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ0NoZWNrU3BlbGxpbmdXaGlsZVR5cGlu
ZygpKTsKKworICAgIGFwcGVuZEl0ZW0oc2hvd1NwZWxsaW5nUGFuZWwsICZzcGVsbGluZ01lbnUp
OworICAgIGFwcGVuZEl0ZW0oY2hlY2tTcGVsbGluZywgJnNwZWxsaW5nTWVudSk7CisgICAgYXBw
ZW5kSXRlbShjaGVja0FzWW91VHlwZSwgJnNwZWxsaW5nTWVudSk7CisKKyAgICBzcGVsbGluZ01l
bnVJdGVtLnNldFN1Yk1lbnUoJnNwZWxsaW5nTWVudSk7Cit9CisKKyNlbmRpZgorCisjaWYgUExB
VEZPUk0oTUFDKQorCit2b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6Y3JlYXRlQW5kQXBwZW5k
U3BlZWNoU3ViTWVudShDb250ZXh0TWVudUl0ZW0mIHNwZWVjaE1lbnVJdGVtKQoreworICAgIENv
bnRleHRNZW51IHNwZWVjaE1lbnU7CisKKyAgICBDb250ZXh0TWVudUl0ZW0gc3RhcnQoQWN0aW9u
VHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU3RhcnRTcGVha2luZywgY29udGV4dE1lbnVJdGVtVGFn
U3RhcnRTcGVha2luZygpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gc3RvcChBY3Rpb25UeXBlLCBD
b250ZXh0TWVudUl0ZW1UYWdTdG9wU3BlYWtpbmcsIGNvbnRleHRNZW51SXRlbVRhZ1N0b3BTcGVh
a2luZygpKTsKKworICAgIGFwcGVuZEl0ZW0oc3RhcnQsICZzcGVlY2hNZW51KTsKKyAgICBhcHBl
bmRJdGVtKHN0b3AsICZzcGVlY2hNZW51KTsKKworICAgIHNwZWVjaE1lbnVJdGVtLnNldFN1Yk1l
bnUoJnNwZWVjaE1lbnUpOworfQorCisjZW5kaWYKKyAKKyNpZiAhUExBVEZPUk0oR1RLKQorCit2
b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6Y3JlYXRlQW5kQXBwZW5kV3JpdGluZ0RpcmVjdGlv
blN1Yk1lbnUoQ29udGV4dE1lbnVJdGVtJiB3cml0aW5nRGlyZWN0aW9uTWVudUl0ZW0pCit7Cisg
ICAgQ29udGV4dE1lbnUgd3JpdGluZ0RpcmVjdGlvbk1lbnU7CisKKyAgICBDb250ZXh0TWVudUl0
ZW0gZGVmYXVsdEl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnRGVmYXVsdERpcmVj
dGlvbiwgCisgICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ0RlZmF1bHREaXJlY3Rpb24oKSk7Cisg
ICAgQ29udGV4dE1lbnVJdGVtIGx0cihDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0
ZW1UYWdMZWZ0VG9SaWdodCwgY29udGV4dE1lbnVJdGVtVGFnTGVmdFRvUmlnaHQoKSk7CisgICAg
Q29udGV4dE1lbnVJdGVtIHJ0bChDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1U
YWdSaWdodFRvTGVmdCwgY29udGV4dE1lbnVJdGVtVGFnUmlnaHRUb0xlZnQoKSk7CisKKyAgICBh
cHBlbmRJdGVtKGRlZmF1bHRJdGVtLCAmd3JpdGluZ0RpcmVjdGlvbk1lbnUpOworICAgIGFwcGVu
ZEl0ZW0obHRyLCAmd3JpdGluZ0RpcmVjdGlvbk1lbnUpOworICAgIGFwcGVuZEl0ZW0ocnRsLCAm
d3JpdGluZ0RpcmVjdGlvbk1lbnUpOworCisgICAgd3JpdGluZ0RpcmVjdGlvbk1lbnVJdGVtLnNl
dFN1Yk1lbnUoJndyaXRpbmdEaXJlY3Rpb25NZW51KTsKK30KKwordm9pZCBDb250ZXh0TWVudUNv
bnRyb2xsZXI6OmNyZWF0ZUFuZEFwcGVuZFRleHREaXJlY3Rpb25TdWJNZW51KENvbnRleHRNZW51
SXRlbSYgdGV4dERpcmVjdGlvbk1lbnVJdGVtKQoreworICAgIENvbnRleHRNZW51IHRleHREaXJl
Y3Rpb25NZW51OworCisgICAgQ29udGV4dE1lbnVJdGVtIGRlZmF1bHRJdGVtKEFjdGlvblR5cGUs
IENvbnRleHRNZW51SXRlbVRhZ1RleHREaXJlY3Rpb25EZWZhdWx0LCBjb250ZXh0TWVudUl0ZW1U
YWdEZWZhdWx0RGlyZWN0aW9uKCkpOworICAgIENvbnRleHRNZW51SXRlbSBsdHIoQ2hlY2thYmxl
QWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnVGV4dERpcmVjdGlvbkxlZnRUb1JpZ2h0LCBj
b250ZXh0TWVudUl0ZW1UYWdMZWZ0VG9SaWdodCgpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gcnRs
KENoZWNrYWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1RleHREaXJlY3Rpb25SaWdo
dFRvTGVmdCwgY29udGV4dE1lbnVJdGVtVGFnUmlnaHRUb0xlZnQoKSk7CisKKyAgICBhcHBlbmRJ
dGVtKGRlZmF1bHRJdGVtLCAmdGV4dERpcmVjdGlvbk1lbnUpOworICAgIGFwcGVuZEl0ZW0obHRy
LCAmdGV4dERpcmVjdGlvbk1lbnUpOworICAgIGFwcGVuZEl0ZW0ocnRsLCAmdGV4dERpcmVjdGlv
bk1lbnUpOworCisgICAgdGV4dERpcmVjdGlvbk1lbnVJdGVtLnNldFN1Yk1lbnUoJnRleHREaXJl
Y3Rpb25NZW51KTsKK30KKworI2VuZGlmCisKKyNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVk
KEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQorCit2
b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6Y3JlYXRlQW5kQXBwZW5kU3Vic3RpdHV0aW9uc1N1
Yk1lbnUoQ29udGV4dE1lbnVJdGVtJiBzdWJzdGl0dXRpb25zTWVudUl0ZW0pCit7CisgICAgQ29u
dGV4dE1lbnUgc3Vic3RpdHV0aW9uc01lbnU7CisKKyAgICBDb250ZXh0TWVudUl0ZW0gc2hvd1N1
YnN0aXR1dGlvbnMoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU2hvd1N1YnN0aXR1dGlv
bnMsIGNvbnRleHRNZW51SXRlbVRhZ1Nob3dTdWJzdGl0dXRpb25zKHRydWUpKTsKKyAgICBDb250
ZXh0TWVudUl0ZW0gc21hcnRDb3B5UGFzdGUoQ2hlY2thYmxlQWN0aW9uVHlwZSwgQ29udGV4dE1l
bnVJdGVtVGFnU21hcnRDb3B5UGFzdGUsIGNvbnRleHRNZW51SXRlbVRhZ1NtYXJ0Q29weVBhc3Rl
KCkpOworICAgIENvbnRleHRNZW51SXRlbSBzbWFydFF1b3RlcyhDaGVja2FibGVBY3Rpb25UeXBl
LCBDb250ZXh0TWVudUl0ZW1UYWdTbWFydFF1b3RlcywgY29udGV4dE1lbnVJdGVtVGFnU21hcnRR
dW90ZXMoKSk7CisgICAgQ29udGV4dE1lbnVJdGVtIHNtYXJ0RGFzaGVzKENoZWNrYWJsZUFjdGlv
blR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1NtYXJ0RGFzaGVzLCBjb250ZXh0TWVudUl0ZW1UYWdT
bWFydERhc2hlcygpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gc21hcnRMaW5rcyhDaGVja2FibGVB
Y3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTbWFydExpbmtzLCBjb250ZXh0TWVudUl0ZW1U
YWdTbWFydExpbmtzKCkpOworICAgIENvbnRleHRNZW51SXRlbSB0ZXh0UmVwbGFjZW1lbnQoQ2hl
Y2thYmxlQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnVGV4dFJlcGxhY2VtZW50LCBjb250
ZXh0TWVudUl0ZW1UYWdUZXh0UmVwbGFjZW1lbnQoKSk7CisKKyAgICBhcHBlbmRJdGVtKHNob3dT
dWJzdGl0dXRpb25zLCAmc3Vic3RpdHV0aW9uc01lbnUpOworICAgIGFwcGVuZEl0ZW0oKnNlcGFy
YXRvckl0ZW0oKSwgJnN1YnN0aXR1dGlvbnNNZW51KTsKKyAgICBhcHBlbmRJdGVtKHNtYXJ0Q29w
eVBhc3RlLCAmc3Vic3RpdHV0aW9uc01lbnUpOworICAgIGFwcGVuZEl0ZW0oc21hcnRRdW90ZXMs
ICZzdWJzdGl0dXRpb25zTWVudSk7CisgICAgYXBwZW5kSXRlbShzbWFydERhc2hlcywgJnN1YnN0
aXR1dGlvbnNNZW51KTsKKyAgICBhcHBlbmRJdGVtKHNtYXJ0TGlua3MsICZzdWJzdGl0dXRpb25z
TWVudSk7CisgICAgYXBwZW5kSXRlbSh0ZXh0UmVwbGFjZW1lbnQsICZzdWJzdGl0dXRpb25zTWVu
dSk7CisKKyAgICBzdWJzdGl0dXRpb25zTWVudUl0ZW0uc2V0U3ViTWVudSgmc3Vic3RpdHV0aW9u
c01lbnUpOworfQorCit2b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6Y3JlYXRlQW5kQXBwZW5k
VHJhbnNmb3JtYXRpb25zU3ViTWVudShDb250ZXh0TWVudUl0ZW0mIHRyYW5zZm9ybWF0aW9uc01l
bnVJdGVtKQoreworICAgIENvbnRleHRNZW51IHRyYW5zZm9ybWF0aW9uc01lbnU7CisKKyAgICBD
b250ZXh0TWVudUl0ZW0gbWFrZVVwcGVyQ2FzZShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1U
YWdNYWtlVXBwZXJDYXNlLCBjb250ZXh0TWVudUl0ZW1UYWdNYWtlVXBwZXJDYXNlKCkpOworICAg
IENvbnRleHRNZW51SXRlbSBtYWtlTG93ZXJDYXNlKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRl
bVRhZ01ha2VMb3dlckNhc2UsIGNvbnRleHRNZW51SXRlbVRhZ01ha2VMb3dlckNhc2UoKSk7Cisg
ICAgQ29udGV4dE1lbnVJdGVtIGNhcGl0YWxpemUoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVt
VGFnQ2FwaXRhbGl6ZSwgY29udGV4dE1lbnVJdGVtVGFnQ2FwaXRhbGl6ZSgpKTsKKworICAgIGFw
cGVuZEl0ZW0obWFrZVVwcGVyQ2FzZSwgJnRyYW5zZm9ybWF0aW9uc01lbnUpOworICAgIGFwcGVu
ZEl0ZW0obWFrZUxvd2VyQ2FzZSwgJnRyYW5zZm9ybWF0aW9uc01lbnUpOworICAgIGFwcGVuZEl0
ZW0oY2FwaXRhbGl6ZSwgJnRyYW5zZm9ybWF0aW9uc01lbnUpOworCisgICAgdHJhbnNmb3JtYXRp
b25zTWVudUl0ZW0uc2V0U3ViTWVudSgmdHJhbnNmb3JtYXRpb25zTWVudSk7Cit9CisKKyNlbmRp
ZgorCitzdGF0aWMgYm9vbCBzZWxlY3Rpb25Db250YWluc1Bvc3NpYmxlV29yZChGcmFtZSogZnJh
bWUpCit7CisgICAgLy8gQ3VycmVudCBhbGdvcml0aG06IGxvb2sgZm9yIGEgY2hhcmFjdGVyIHRo
YXQncyBub3QganVzdCBhIHNlcGFyYXRvci4KKyAgICBmb3IgKFRleHRJdGVyYXRvciBpdChmcmFt
ZS0+c2VsZWN0aW9uKCktPnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOyAhaXQuYXRFbmQoKTsg
aXQuYWR2YW5jZSgpKSB7CisgICAgICAgIGludCBsZW5ndGggPSBpdC5sZW5ndGgoKTsKKyAgICAg
ICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSBpdC5jaGFyYWN0ZXJzKCk7CisgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCisgICAgICAgICAgICBpZiAoIShjYXRlZ29y
eShjaGFyYWN0ZXJzW2ldKSAmIChTZXBhcmF0b3JfU3BhY2UgfCBTZXBhcmF0b3JfTGluZSB8IFNl
cGFyYXRvcl9QYXJhZ3JhcGgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6cG9w
dWxhdGUoKQoreworICAgIENvbnRleHRNZW51SXRlbSBPcGVuTGlua0l0ZW0oQWN0aW9uVHlwZSwg
Q29udGV4dE1lbnVJdGVtVGFnT3BlbkxpbmssIGNvbnRleHRNZW51SXRlbVRhZ09wZW5MaW5rKCkp
OworICAgIENvbnRleHRNZW51SXRlbSBPcGVuTGlua0luTmV3V2luZG93SXRlbShBY3Rpb25UeXBl
LCBDb250ZXh0TWVudUl0ZW1UYWdPcGVuTGlua0luTmV3V2luZG93LCAKKyAgICAgICAgY29udGV4
dE1lbnVJdGVtVGFnT3BlbkxpbmtJbk5ld1dpbmRvdygpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0g
RG93bmxvYWRGaWxlSXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdEb3dubG9hZExp
bmtUb0Rpc2ssIAorICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdEb3dubG9hZExpbmtUb0Rpc2so
KSk7CisgICAgQ29udGV4dE1lbnVJdGVtIENvcHlMaW5rSXRlbShBY3Rpb25UeXBlLCBDb250ZXh0
TWVudUl0ZW1UYWdDb3B5TGlua1RvQ2xpcGJvYXJkLCAKKyAgICAgICAgY29udGV4dE1lbnVJdGVt
VGFnQ29weUxpbmtUb0NsaXBib2FyZCgpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gT3BlbkltYWdl
SW5OZXdXaW5kb3dJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ09wZW5JbWFnZUlu
TmV3V2luZG93LCAKKyAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnT3BlbkltYWdlSW5OZXdXaW5k
b3coKSk7CisgICAgQ29udGV4dE1lbnVJdGVtIERvd25sb2FkSW1hZ2VJdGVtKEFjdGlvblR5cGUs
IENvbnRleHRNZW51SXRlbVRhZ0Rvd25sb2FkSW1hZ2VUb0Rpc2ssIAorICAgICAgICBjb250ZXh0
TWVudUl0ZW1UYWdEb3dubG9hZEltYWdlVG9EaXNrKCkpOworICAgIENvbnRleHRNZW51SXRlbSBD
b3B5SW1hZ2VJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0NvcHlJbWFnZVRvQ2xp
cGJvYXJkLCAKKyAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnQ29weUltYWdlVG9DbGlwYm9hcmQo
KSk7CisgICAgQ29udGV4dE1lbnVJdGVtIE9wZW5NZWRpYUluTmV3V2luZG93SXRlbShBY3Rpb25U
eXBlLCBDb250ZXh0TWVudUl0ZW1UYWdPcGVuTWVkaWFJbk5ld1dpbmRvdywgU3RyaW5nKCkpOwor
ICAgIENvbnRleHRNZW51SXRlbSBDb3B5TWVkaWFMaW5rSXRlbShBY3Rpb25UeXBlLCBDb250ZXh0
TWVudUl0ZW1UYWdDb3B5TWVkaWFMaW5rVG9DbGlwYm9hcmQsIAorICAgICAgICBTdHJpbmcoKSk7
CisgICAgQ29udGV4dE1lbnVJdGVtIE1lZGlhUGxheVBhdXNlKEFjdGlvblR5cGUsIENvbnRleHRN
ZW51SXRlbVRhZ01lZGlhUGxheVBhdXNlLCAKKyAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnTWVk
aWFQbGF5KCkpOworICAgIENvbnRleHRNZW51SXRlbSBNZWRpYU11dGUoQWN0aW9uVHlwZSwgQ29u
dGV4dE1lbnVJdGVtVGFnTWVkaWFNdXRlLCAKKyAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnTWVk
aWFNdXRlKCkpOworICAgIENvbnRleHRNZW51SXRlbSBUb2dnbGVNZWRpYUNvbnRyb2xzKENoZWNr
YWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1RvZ2dsZU1lZGlhQ29udHJvbHMsIAor
ICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdUb2dnbGVNZWRpYUNvbnRyb2xzKCkpOworICAgIENv
bnRleHRNZW51SXRlbSBUb2dnbGVNZWRpYUxvb3AoQ2hlY2thYmxlQWN0aW9uVHlwZSwgQ29udGV4
dE1lbnVJdGVtVGFnVG9nZ2xlTWVkaWFMb29wLCAKKyAgICAgICAgY29udGV4dE1lbnVJdGVtVGFn
VG9nZ2xlTWVkaWFMb29wKCkpOworICAgIENvbnRleHRNZW51SXRlbSBFbnRlclZpZGVvRnVsbHNj
cmVlbihBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdFbnRlclZpZGVvRnVsbHNjcmVlbiwg
CisgICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ0VudGVyVmlkZW9GdWxsc2NyZWVuKCkpOworI2lm
IFBMQVRGT1JNKE1BQykKKyAgICBDb250ZXh0TWVudUl0ZW0gU2VhcmNoU3BvdGxpZ2h0SXRlbShB
Y3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTZWFyY2hJblNwb3RsaWdodCwgCisgICAgICAg
IGNvbnRleHRNZW51SXRlbVRhZ1NlYXJjaEluU3BvdGxpZ2h0KCkpOworICAgIENvbnRleHRNZW51
SXRlbSBMb29rSW5EaWN0aW9uYXJ5SXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdM
b29rVXBJbkRpY3Rpb25hcnksIAorICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdMb29rVXBJbkRp
Y3Rpb25hcnkoKSk7CisjZW5kaWYKKyNpZiAhUExBVEZPUk0oR1RLKQorICAgIENvbnRleHRNZW51
SXRlbSBTZWFyY2hXZWJJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1NlYXJjaFdl
YiwgY29udGV4dE1lbnVJdGVtVGFnU2VhcmNoV2ViKCkpOworI2VuZGlmCisgICAgQ29udGV4dE1l
bnVJdGVtIENvcHlJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0NvcHksIGNvbnRl
eHRNZW51SXRlbVRhZ0NvcHkoKSk7CisgICAgQ29udGV4dE1lbnVJdGVtIEJhY2tJdGVtKEFjdGlv
blR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0dvQmFjaywgY29udGV4dE1lbnVJdGVtVGFnR29CYWNr
KCkpOworICAgIENvbnRleHRNZW51SXRlbSBGb3J3YXJkSXRlbShBY3Rpb25UeXBlLCBDb250ZXh0
TWVudUl0ZW1UYWdHb0ZvcndhcmQsICBjb250ZXh0TWVudUl0ZW1UYWdHb0ZvcndhcmQoKSk7Cisg
ICAgQ29udGV4dE1lbnVJdGVtIFN0b3BJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRh
Z1N0b3AsIGNvbnRleHRNZW51SXRlbVRhZ1N0b3AoKSk7CisgICAgQ29udGV4dE1lbnVJdGVtIFJl
bG9hZEl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnUmVsb2FkLCBjb250ZXh0TWVu
dUl0ZW1UYWdSZWxvYWQoKSk7CisgICAgQ29udGV4dE1lbnVJdGVtIE9wZW5GcmFtZUl0ZW0oQWN0
aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnT3BlbkZyYW1lSW5OZXdXaW5kb3csIAorICAgICAg
ICBjb250ZXh0TWVudUl0ZW1UYWdPcGVuRnJhbWVJbk5ld1dpbmRvdygpKTsKKyAgICBDb250ZXh0
TWVudUl0ZW0gTm9HdWVzc2VzSXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdOb0d1
ZXNzZXNGb3VuZCwgCisgICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ05vR3Vlc3Nlc0ZvdW5kKCkp
OworICAgIENvbnRleHRNZW51SXRlbSBJZ25vcmVTcGVsbGluZ0l0ZW0oQWN0aW9uVHlwZSwgQ29u
dGV4dE1lbnVJdGVtVGFnSWdub3JlU3BlbGxpbmcsIAorICAgICAgICBjb250ZXh0TWVudUl0ZW1U
YWdJZ25vcmVTcGVsbGluZygpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gTGVhcm5TcGVsbGluZ0l0
ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnTGVhcm5TcGVsbGluZywgCisgICAgICAg
IGNvbnRleHRNZW51SXRlbVRhZ0xlYXJuU3BlbGxpbmcoKSk7CisgICAgQ29udGV4dE1lbnVJdGVt
IElnbm9yZUdyYW1tYXJJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0lnbm9yZUdy
YW1tYXIsIAorICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdJZ25vcmVHcmFtbWFyKCkpOworICAg
IENvbnRleHRNZW51SXRlbSBDdXRJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0N1
dCwgY29udGV4dE1lbnVJdGVtVGFnQ3V0KCkpOworICAgIENvbnRleHRNZW51SXRlbSBQYXN0ZUl0
ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnUGFzdGUsIGNvbnRleHRNZW51SXRlbVRh
Z1Bhc3RlKCkpOworI2lmIFBMQVRGT1JNKEdUSykKKyAgICBDb250ZXh0TWVudUl0ZW0gRGVsZXRl
SXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdEZWxldGUsIGNvbnRleHRNZW51SXRl
bVRhZ0RlbGV0ZSgpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gU2VsZWN0QWxsSXRlbShBY3Rpb25U
eXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTZWxlY3RBbGwsIGNvbnRleHRNZW51SXRlbVRhZ1NlbGVj
dEFsbCgpKTsKKyNlbmRpZgorCisgICAgTm9kZSogbm9kZSA9IG1faGl0VGVzdFJlc3VsdC5pbm5l
ck5vblNoYXJlZE5vZGUoKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybjsKKyNpZiBQ
TEFURk9STShHVEspCisgICAgaWYgKCFtX2hpdFRlc3RSZXN1bHQuaXNDb250ZW50RWRpdGFibGUo
KSAmJiAobm9kZS0+aXNFbGVtZW50Tm9kZSgpICYmIHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2Rl
KS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkpCisgICAgICAgIHJldHVybjsKKyNlbmRpZgorICAg
IEZyYW1lKiBmcmFtZSA9IG5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCk7CisgICAgaWYgKCFmcmFt
ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX2hpdFRlc3RSZXN1bHQuaXNDb250ZW50
RWRpdGFibGUoKSkgeworICAgICAgICBGcmFtZUxvYWRlciogbG9hZGVyID0gZnJhbWUtPmxvYWRl
cigpOworICAgICAgICBLVVJMIGxpbmtVUkwgPSBtX2hpdFRlc3RSZXN1bHQuYWJzb2x1dGVMaW5r
VVJMKCk7CisgICAgICAgIGlmICghbGlua1VSTC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGlm
IChsb2FkZXItPmNhbkhhbmRsZVJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0KGxpbmtVUkwpKSkgewor
ICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oT3BlbkxpbmtJdGVtLCBtX2NvbnRleHRNZW51Lmdl
dCgpKTsKKyAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKE9wZW5MaW5rSW5OZXdXaW5kb3dJdGVt
LCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKERvd25s
b2FkRmlsZUl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgYXBwZW5kSXRlbShDb3B5TGlua0l0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOworICAg
ICAgICB9CisKKyAgICAgICAgS1VSTCBpbWFnZVVSTCA9IG1faGl0VGVzdFJlc3VsdC5hYnNvbHV0
ZUltYWdlVVJMKCk7CisgICAgICAgIGlmICghaW1hZ2VVUkwuaXNFbXB0eSgpKSB7CisgICAgICAg
ICAgICBpZiAoIWxpbmtVUkwuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0o
KnNlcGFyYXRvckl0ZW0oKSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisKKyAgICAgICAgICAgIGFw
cGVuZEl0ZW0oT3BlbkltYWdlSW5OZXdXaW5kb3dJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsK
KyAgICAgICAgICAgIGFwcGVuZEl0ZW0oRG93bmxvYWRJbWFnZUl0ZW0sIG1fY29udGV4dE1lbnUu
Z2V0KCkpOworICAgICAgICAgICAgaWYgKGltYWdlVVJMLmlzTG9jYWxGaWxlKCkgfHwgbV9oaXRU
ZXN0UmVzdWx0LmltYWdlKCkpCisgICAgICAgICAgICAgICAgYXBwZW5kSXRlbShDb3B5SW1hZ2VJ
dGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIEtVUkwgbWVk
aWFVUkwgPSBtX2hpdFRlc3RSZXN1bHQuYWJzb2x1dGVNZWRpYVVSTCgpOworICAgICAgICBpZiAo
IW1lZGlhVVJMLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgaWYgKCFsaW5rVVJMLmlzRW1wdHko
KSB8fCAhaW1hZ2VVUkwuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oKnNl
cGFyYXRvckl0ZW0oKSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisKKyAgICAgICAgICAgIGFwcGVu
ZEl0ZW0oTWVkaWFQbGF5UGF1c2UsIG1fY29udGV4dE1lbnUuZ2V0KCkpOworICAgICAgICAgICAg
YXBwZW5kSXRlbShNZWRpYU11dGUsIG1fY29udGV4dE1lbnUuZ2V0KCkpOworICAgICAgICAgICAg
YXBwZW5kSXRlbShUb2dnbGVNZWRpYUNvbnRyb2xzLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAg
ICAgICAgICAgIGFwcGVuZEl0ZW0oVG9nZ2xlTWVkaWFMb29wLCBtX2NvbnRleHRNZW51LmdldCgp
KTsKKyAgICAgICAgICAgIGFwcGVuZEl0ZW0oRW50ZXJWaWRlb0Z1bGxzY3JlZW4sIG1fY29udGV4
dE1lbnUuZ2V0KCkpOworCisgICAgICAgICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCks
IG1fY29udGV4dE1lbnUuZ2V0KCkpOworICAgICAgICAgICAgYXBwZW5kSXRlbShDb3B5TWVkaWFM
aW5rSXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAgICAgICBhcHBlbmRJdGVtKE9w
ZW5NZWRpYUluTmV3V2luZG93SXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAgIH0K
KworICAgICAgICBpZiAoaW1hZ2VVUkwuaXNFbXB0eSgpICYmIGxpbmtVUkwuaXNFbXB0eSgpICYm
IG1lZGlhVVJMLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgaWYgKG1faGl0VGVzdFJlc3VsdC5p
c1NlbGVjdGVkKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uQ29udGFpbnNQb3Nz
aWJsZVdvcmQoZnJhbWUpKSB7CisjaWYgUExBVEZPUk0oTUFDKQorICAgICAgICAgICAgICAgICAg
ICBhcHBlbmRJdGVtKFNlYXJjaFNwb3RsaWdodEl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOwor
I2VuZGlmCisjaWYgIVBMQVRGT1JNKEdUSykKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kSXRl
bShTZWFyY2hXZWJJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgYXBwZW5kSXRlbSgqc2VwYXJhdG9ySXRlbSgpLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyNl
bmRpZgorI2lmIFBMQVRGT1JNKE1BQykKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kSXRlbShM
b29rSW5EaWN0aW9uYXJ5SXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAgICAgICAg
ICAgICAgIGFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSwgbV9jb250ZXh0TWVudS5nZXQoKSk7
CisjZW5kaWYKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYXBwZW5kSXRlbShD
b3B5SXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisjaWYgUExBVEZPUk0oTUFDKQorICAgICAg
ICAgICAgICAgIGFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSwgbV9jb250ZXh0TWVudS5nZXQo
KSk7CisgICAgICAgICAgICAgICAgQ29udGV4dE1lbnVJdGVtIFNwZWVjaE1lbnVJdGVtKFN1Ym1l
bnVUeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTcGVlY2hNZW51LCBjb250ZXh0TWVudUl0ZW1UYWdT
cGVlY2hNZW51KCkpOworICAgICAgICAgICAgICAgIGNyZWF0ZUFuZEFwcGVuZFNwZWVjaFN1Yk1l
bnUoU3BlZWNoTWVudUl0ZW0pOworICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oU3BlZWNoTWVu
dUl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOworI2VuZGlmICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgfSBlbHNlIHsKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorICAgICAgICAgICAgICAg
IGlmICghKGZyYW1lLT5wYWdlKCkgJiYgZnJhbWUtPnBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxl
cigpLT5oYXNJbnNwZWN0b3JGcm9udGVuZENsaWVudCgpKSkgeworI2VuZGlmCisgICAgICAgICAg
ICAgICAgaWYgKGZyYW1lLT5wYWdlKCkgJiYgZnJhbWUtPnBhZ2UoKS0+YmFja0ZvcndhcmQoKS0+
Y2FuR29CYWNrT3JGb3J3YXJkKC0xKSkKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kSXRlbShC
YWNrSXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisKKyAgICAgICAgICAgICAgICBpZiAoZnJh
bWUtPnBhZ2UoKSAmJiBmcmFtZS0+cGFnZSgpLT5iYWNrRm9yd2FyZCgpLT5jYW5Hb0JhY2tPckZv
cndhcmQoMSkpCisgICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oRm9yd2FyZEl0ZW0sIG1f
Y29udGV4dE1lbnUuZ2V0KCkpOworCisgICAgICAgICAgICAgICAgLy8gdXNlIGlzTG9hZGluZ0lu
QVBJU2Vuc2UgcmF0aGVyIHRoYW4gaXNMb2FkaW5nIGJlY2F1c2UgU3RvcC9SZWxvYWQgYXJlCisg
ICAgICAgICAgICAgICAgLy8gaW50ZW5kZWQgdG8gbWF0Y2ggV2ViS2l0J3MgQVBJLCBub3QgV2Vi
Q29yZSdzIGludGVybmFsIG5vdGlvbiBvZiBsb2FkaW5nIHN0YXR1cworICAgICAgICAgICAgICAg
IGlmIChsb2FkZXItPmRvY3VtZW50TG9hZGVyKCktPmlzTG9hZGluZ0luQVBJU2Vuc2UoKSkKKyAg
ICAgICAgICAgICAgICAgICAgYXBwZW5kSXRlbShTdG9wSXRlbSwgbV9jb250ZXh0TWVudS5nZXQo
KSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBhcHBlbmRJdGVt
KFJlbG9hZEl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOworI2lmIEVOQUJMRShJTlNQRUNUT1Ip
CisgICAgICAgICAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgICAgICAgICBpZiAoZnJhbWUt
PnBhZ2UoKSAmJiBmcmFtZSAhPSBmcmFtZS0+cGFnZSgpLT5tYWluRnJhbWUoKSkKKyAgICAgICAg
ICAgICAgICAgICAgYXBwZW5kSXRlbShPcGVuRnJhbWVJdGVtLCBtX2NvbnRleHRNZW51LmdldCgp
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gZWxzZSB7IC8vIE1ha2UgYW4gZWRp
dGluZyBjb250ZXh0IG1lbnUKKyAgICAgICAgU2VsZWN0aW9uQ29udHJvbGxlciogc2VsZWN0aW9u
ID0gZnJhbWUtPnNlbGVjdGlvbigpOworICAgICAgICBib29sIGluUGFzc3dvcmRGaWVsZCA9IHNl
bGVjdGlvbi0+aXNJblBhc3N3b3JkRmllbGQoKTsKKyAgICAgICAgYm9vbCBzcGVsbENoZWNraW5n
RW5hYmxlZCA9IGZyYW1lLT5lZGl0b3IoKS0+aXNTcGVsbENoZWNraW5nRW5hYmxlZEZvcihub2Rl
KTsKKyAgICAgICAgCisgICAgICAgIGlmICghaW5QYXNzd29yZEZpZWxkICYmIHNwZWxsQ2hlY2tp
bmdFbmFibGVkKSB7CisgICAgICAgICAgICAvLyBDb25zaWRlciBhZGRpbmcgc3BlbGxpbmctcmVs
YXRlZCBvciBncmFtbWFyLXJlbGF0ZWQgY29udGV4dCBtZW51IGl0ZW1zIChuZXZlciBib3RoLCBz
aW5jZSBhIHNpbmdsZSBzZWxlY3RlZCByYW5nZQorICAgICAgICAgICAgLy8gaXMgbmV2ZXIgY29u
c2lkZXJlZCBhIG1pc3NwZWxsaW5nIGFuZCBiYWQgZ3JhbW1hciBhdCB0aGUgc2FtZSB0aW1lKQor
ICAgICAgICAgICAgYm9vbCBtaXNzcGVsbGluZzsKKyAgICAgICAgICAgIGJvb2wgYmFkR3JhbW1h
cjsKKyAgICAgICAgICAgIFZlY3RvcjxTdHJpbmc+IGd1ZXNzZXMgPSBmcmFtZS0+ZWRpdG9yKCkt
Pmd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsU2VsZWN0aW9uKG1pc3NwZWxsaW5n
LCBiYWRHcmFtbWFyKTsKKyAgICAgICAgICAgIGlmIChtaXNzcGVsbGluZyB8fCBiYWRHcmFtbWFy
KSB7CisgICAgICAgICAgICAgICAgc2l6ZV90IHNpemUgPSBndWVzc2VzLnNpemUoKTsKKyAgICAg
ICAgICAgICAgICBpZiAoc2l6ZSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIElmIHRo
ZXJlJ3MgYmFkIGdyYW1tYXIgYnV0IG5vIHN1Z2dlc3Rpb25zIChlLmcuLCByZXBlYXRlZCB3b3Jk
KSwganVzdCBsZWF2ZSBvZmYgdGhlIHN1Z2dlc3Rpb25zCisgICAgICAgICAgICAgICAgICAgIC8v
IGxpc3QgYW5kIHRyYWlsaW5nIHNlcGFyYXRvciByYXRoZXIgdGhhbiBhZGRpbmcgYSAiTm8gR3Vl
c3NlcyBGb3VuZCIgaXRlbSAobWF0Y2hlcyBBcHBLaXQpCisgICAgICAgICAgICAgICAgICAgIGlm
IChtaXNzcGVsbGluZykgeworICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kSXRlbShOb0d1
ZXNzZXNJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBTdHJpbmcgJmd1ZXNzID0gZ3Vlc3Nlc1tpXTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICghZ3Vlc3MuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ29udGV4dE1lbnVJdGVtIGl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJ
dGVtVGFnU3BlbGxpbmdHdWVzcywgZ3Vlc3MpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGFwcGVuZEl0ZW0oaXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYXBw
ZW5kSXRlbSgqc2VwYXJhdG9ySXRlbSgpLCBtX2NvbnRleHRNZW51LmdldCgpKTsgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBpZiAobWlzc3BlbGxpbmcpIHsKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kSXRl
bShJZ25vcmVTcGVsbGluZ0l0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOworICAgICAgICAgICAg
ICAgICAgICBhcHBlbmRJdGVtKExlYXJuU3BlbGxpbmdJdGVtLCBtX2NvbnRleHRNZW51LmdldCgp
KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kSXRl
bShJZ25vcmVHcmFtbWFySXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAgICAgICAg
ICAgYXBwZW5kSXRlbSgqc2VwYXJhdG9ySXRlbSgpLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyNp
ZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5l
ZChCVUlMRElOR19PTl9MRU9QQVJEKQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAvLyBJZiB0aGUgc3RyaW5nIHdhcyBhdXRvY29ycmVjdGVkLCBnZW5lcmF0ZSBhIGNvbnRl
eHR1YWwgbWVudSBpdGVtIGFsbG93aW5nIGl0IHRvIGJlIGNoYW5nZWQgYmFjay4KKyAgICAgICAg
ICAgICAgICBTdHJpbmcgcmVwbGFjZWRTdHJpbmcgPSBtX2hpdFRlc3RSZXN1bHQucmVwbGFjZWRT
dHJpbmcoKTsKKyAgICAgICAgICAgICAgICBpZiAoIXJlcGxhY2VkU3RyaW5nLmlzRW1wdHkoKSkg
eworICAgICAgICAgICAgICAgICAgICBDb250ZXh0TWVudUl0ZW0gaXRlbShBY3Rpb25UeXBlLCBD
b250ZXh0TWVudUl0ZW1UYWdDaGFuZ2VCYWNrLCBjb250ZXh0TWVudUl0ZW1UYWdDaGFuZ2VCYWNr
KHJlcGxhY2VkU3RyaW5nKSk7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oaXRlbSwg
bV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oKnNl
cGFyYXRvckl0ZW0oKSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAgICAgICAgICAgfQor
I2VuZGlmCisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBGcmFtZUxvYWRlciog
bG9hZGVyID0gZnJhbWUtPmxvYWRlcigpOworICAgICAgICBLVVJMIGxpbmtVUkwgPSBtX2hpdFRl
c3RSZXN1bHQuYWJzb2x1dGVMaW5rVVJMKCk7CisgICAgICAgIGlmICghbGlua1VSTC5pc0VtcHR5
KCkpIHsKKyAgICAgICAgICAgIGlmIChsb2FkZXItPmNhbkhhbmRsZVJlcXVlc3QoUmVzb3VyY2VS
ZXF1ZXN0KGxpbmtVUkwpKSkgeworICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oT3BlbkxpbmtJ
dGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKE9w
ZW5MaW5rSW5OZXdXaW5kb3dJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgICAg
ICAgICBhcHBlbmRJdGVtKERvd25sb2FkRmlsZUl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgYXBwZW5kSXRlbShDb3B5TGlua0l0ZW0sIG1fY29u
dGV4dE1lbnUuZ2V0KCkpOworICAgICAgICAgICAgYXBwZW5kSXRlbSgqc2VwYXJhdG9ySXRlbSgp
LCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtX2hpdFRl
c3RSZXN1bHQuaXNTZWxlY3RlZCgpICYmICFpblBhc3N3b3JkRmllbGQgJiYgc2VsZWN0aW9uQ29u
dGFpbnNQb3NzaWJsZVdvcmQoZnJhbWUpKSB7CisjaWYgUExBVEZPUk0oTUFDKQorICAgICAgICAg
ICAgYXBwZW5kSXRlbShTZWFyY2hTcG90bGlnaHRJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsK
KyNlbmRpZgorI2lmICFQTEFURk9STShHVEspCisgICAgICAgICAgICBhcHBlbmRJdGVtKFNlYXJj
aFdlYkl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOworICAgICAgICAgICAgYXBwZW5kSXRlbSgq
c2VwYXJhdG9ySXRlbSgpLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyNlbmRpZgorICAgICAKKyNp
ZiBQTEFURk9STShNQUMpCisgICAgICAgICAgICBhcHBlbmRJdGVtKExvb2tJbkRpY3Rpb25hcnlJ
dGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgICAgIGFwcGVuZEl0ZW0oKnNlcGFy
YXRvckl0ZW0oKSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisjZW5kaWYKKyAgICAgICAgfQorCisg
ICAgICAgIGFwcGVuZEl0ZW0oQ3V0SXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAg
IGFwcGVuZEl0ZW0oQ29weUl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOworICAgICAgICBhcHBl
bmRJdGVtKFBhc3RlSXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisjaWYgUExBVEZPUk0oR1RL
KQorICAgICAgICBhcHBlbmRJdGVtKERlbGV0ZUl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOwor
ICAgICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCksIG1fY29udGV4dE1lbnUuZ2V0KCkp
OworICAgICAgICBhcHBlbmRJdGVtKFNlbGVjdEFsbEl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkp
OworI2VuZGlmCisKKyAgICAgICAgaWYgKCFpblBhc3N3b3JkRmllbGQpIHsKKyAgICAgICAgICAg
IGFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisjaWZu
ZGVmIEJVSUxESU5HX09OX1RJR0VSCisjaWYgIVBMQVRGT1JNKEdUSykKKyAgICAgICAgICAgIENv
bnRleHRNZW51SXRlbSBTcGVsbGluZ0FuZEdyYW1tYXJNZW51SXRlbShTdWJtZW51VHlwZSwgQ29u
dGV4dE1lbnVJdGVtVGFnU3BlbGxpbmdNZW51LCAKKyAgICAgICAgICAgICAgICBjb250ZXh0TWVu
dUl0ZW1UYWdTcGVsbGluZ01lbnUoKSk7CisgICAgICAgICAgICBjcmVhdGVBbmRBcHBlbmRTcGVs
bGluZ0FuZEdyYW1tYXJTdWJNZW51KFNwZWxsaW5nQW5kR3JhbW1hck1lbnVJdGVtKTsKKyAgICAg
ICAgICAgIGFwcGVuZEl0ZW0oU3BlbGxpbmdBbmRHcmFtbWFyTWVudUl0ZW0sIG1fY29udGV4dE1l
bnUuZ2V0KCkpOworI2VuZGlmCisjZWxzZQorICAgICAgICAgICAgQ29udGV4dE1lbnVJdGVtIFNw
ZWxsaW5nTWVudUl0ZW0oU3VibWVudVR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1NwZWxsaW5nTWVu
dSwgCisgICAgICAgICAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnU3BlbGxpbmdNZW51KCkpOwor
ICAgICAgICAgICAgY3JlYXRlQW5kQXBwZW5kU3BlbGxpbmdTdWJNZW51KFNwZWxsaW5nTWVudUl0
ZW0pOworICAgICAgICAgICAgYXBwZW5kSXRlbShTcGVsbGluZ01lbnVJdGVtLCBtX2NvbnRleHRN
ZW51LmdldCgpKTsKKyNlbmRpZgorI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJ
TkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpCisgICAgICAgICAg
ICBDb250ZXh0TWVudUl0ZW0gc3Vic3RpdHV0aW9uc01lbnVJdGVtKFN1Ym1lbnVUeXBlLCBDb250
ZXh0TWVudUl0ZW1UYWdTdWJzdGl0dXRpb25zTWVudSwgCisgICAgICAgICAgICAgICAgY29udGV4
dE1lbnVJdGVtVGFnU3Vic3RpdHV0aW9uc01lbnUoKSk7CisgICAgICAgICAgICBjcmVhdGVBbmRB
cHBlbmRTdWJzdGl0dXRpb25zU3ViTWVudShzdWJzdGl0dXRpb25zTWVudUl0ZW0pOworICAgICAg
ICAgICAgYXBwZW5kSXRlbShzdWJzdGl0dXRpb25zTWVudUl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0
KCkpOworICAgICAgICAgICAgQ29udGV4dE1lbnVJdGVtIHRyYW5zZm9ybWF0aW9uc01lbnVJdGVt
KFN1Ym1lbnVUeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdUcmFuc2Zvcm1hdGlvbnNNZW51LCAKKyAg
ICAgICAgICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdUcmFuc2Zvcm1hdGlvbnNNZW51KCkpOwor
ICAgICAgICAgICAgY3JlYXRlQW5kQXBwZW5kVHJhbnNmb3JtYXRpb25zU3ViTWVudSh0cmFuc2Zv
cm1hdGlvbnNNZW51SXRlbSk7CisgICAgICAgICAgICBhcHBlbmRJdGVtKHRyYW5zZm9ybWF0aW9u
c01lbnVJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyNlbmRpZgorI2lmIFBMQVRGT1JNKEdU
SykKKyAgICAgICAgICAgIGJvb2wgc2hvdWxkU2hvd0ZvbnRNZW51ID0gZnJhbWUtPmVkaXRvcigp
LT5jYW5FZGl0UmljaGx5KCk7CisjZWxzZQorICAgICAgICAgICAgYm9vbCBzaG91bGRTaG93Rm9u
dE1lbnUgPSB0cnVlOworI2VuZGlmCisgICAgICAgICAgICBpZiAoc2hvdWxkU2hvd0ZvbnRNZW51
KSB7CisgICAgICAgICAgICAgICAgQ29udGV4dE1lbnVJdGVtIEZvbnRNZW51SXRlbShTdWJtZW51
VHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnRm9udE1lbnUsIAorICAgICAgICAgICAgICAgICAgICBj
b250ZXh0TWVudUl0ZW1UYWdGb250TWVudSgpKTsKKyAgICAgICAgICAgICAgICBjcmVhdGVBbmRB
cHBlbmRGb250U3ViTWVudShGb250TWVudUl0ZW0pOworICAgICAgICAgICAgICAgIGFwcGVuZEl0
ZW0oRm9udE1lbnVJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgICAgIH0KKyNp
ZiBQTEFURk9STShNQUMpCisgICAgICAgICAgICBDb250ZXh0TWVudUl0ZW0gU3BlZWNoTWVudUl0
ZW0oU3VibWVudVR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1NwZWVjaE1lbnUsIGNvbnRleHRNZW51
SXRlbVRhZ1NwZWVjaE1lbnUoKSk7CisgICAgICAgICAgICBjcmVhdGVBbmRBcHBlbmRTcGVlY2hT
dWJNZW51KFNwZWVjaE1lbnVJdGVtKTsKKyAgICAgICAgICAgIGFwcGVuZEl0ZW0oU3BlZWNoTWVu
dUl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOworI2VuZGlmCisjaWYgIVBMQVRGT1JNKEdUSykK
KyAgICAgICAgICAgIENvbnRleHRNZW51SXRlbSBXcml0aW5nRGlyZWN0aW9uTWVudUl0ZW0oU3Vi
bWVudVR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1dyaXRpbmdEaXJlY3Rpb25NZW51LCAKKyAgICAg
ICAgICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdXcml0aW5nRGlyZWN0aW9uTWVudSgpKTsKKyAg
ICAgICAgICAgIGNyZWF0ZUFuZEFwcGVuZFdyaXRpbmdEaXJlY3Rpb25TdWJNZW51KFdyaXRpbmdE
aXJlY3Rpb25NZW51SXRlbSk7CisgICAgICAgICAgICBhcHBlbmRJdGVtKFdyaXRpbmdEaXJlY3Rp
b25NZW51SXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAgICAgICBpZiAoUGFnZSog
cGFnZSA9IGZyYW1lLT5wYWdlKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoU2V0dGluZ3MqIHNl
dHRpbmdzID0gcGFnZS0+c2V0dGluZ3MoKSkgeworICAgICAgICAgICAgICAgICAgICBib29sIGlu
Y2x1ZGVUZXh0RGlyZWN0aW9uU3VibWVudSA9IHNldHRpbmdzLT50ZXh0RGlyZWN0aW9uU3VibWVu
dUluY2x1c2lvbkJlaGF2aW9yKCkgPT0gVGV4dERpcmVjdGlvblN1Ym1lbnVBbHdheXNJbmNsdWRl
ZAorICAgICAgICAgICAgICAgICAgICAgICAgfHwgKHNldHRpbmdzLT50ZXh0RGlyZWN0aW9uU3Vi
bWVudUluY2x1c2lvbkJlaGF2aW9yKCkgPT0gVGV4dERpcmVjdGlvblN1Ym1lbnVBdXRvbWF0aWNh
bGx5SW5jbHVkZWQgJiYgZnJhbWUtPmVkaXRvcigpLT5oYXNCaWRpU2VsZWN0aW9uKCkpOworICAg
ICAgICAgICAgICAgICAgICBpZiAoaW5jbHVkZVRleHREaXJlY3Rpb25TdWJtZW51KSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBDb250ZXh0TWVudUl0ZW0gVGV4dERpcmVjdGlvbk1lbnVJdGVt
KFN1Ym1lbnVUeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdUZXh0RGlyZWN0aW9uTWVudSwgCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnVGV4dERpcmVjdGlvbk1l
bnUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVBbmRBcHBlbmRUZXh0RGlyZWN0
aW9uU3ViTWVudShUZXh0RGlyZWN0aW9uTWVudUl0ZW0pOworICAgICAgICAgICAgICAgICAgICAg
ICAgYXBwZW5kSXRlbShUZXh0RGlyZWN0aW9uTWVudUl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkp
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorI2VuZGlmCisgICAgICAgIH0KKyAgICB9Cit9CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQor
dm9pZCBDb250ZXh0TWVudUNvbnRyb2xsZXI6OmFkZEluc3BlY3RFbGVtZW50SXRlbSgpCit7Cisg
ICAgTm9kZSogbm9kZSA9IG1faGl0VGVzdFJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKTsKKyAg
ICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybjsKKworICAgIEZyYW1lKiBmcmFtZSA9IG5vZGUt
PmRvY3VtZW50KCktPmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgUGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCk7CisgICAgaWYgKCFwYWdlKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoIXBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgQ29udGV4dE1lbnVJdGVtIEluc3BlY3RFbGVtZW50SXRlbShBY3Rp
b25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdJbnNwZWN0RWxlbWVudCwgY29udGV4dE1lbnVJdGVt
VGFnSW5zcGVjdEVsZW1lbnQoKSk7CisgICAgYXBwZW5kSXRlbSgqc2VwYXJhdG9ySXRlbSgpLCBt
X2NvbnRleHRNZW51LmdldCgpKTsKKyAgICBhcHBlbmRJdGVtKEluc3BlY3RFbGVtZW50SXRlbSwg
bV9jb250ZXh0TWVudS5nZXQoKSk7Cit9CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKwor
dm9pZCBDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNoZWNrT3JFbmFibGVJZk5lZWRlZChDb250ZXh0
TWVudUl0ZW0mIGl0ZW0pIGNvbnN0Cit7CisgICAgaWYgKGl0ZW0udHlwZSgpID09IFNlcGFyYXRv
clR5cGUpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBGcmFtZSogZnJhbWUgPSBtX2hpdFRl
c3RSZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCktPmRvY3VtZW50KCktPmZyYW1lKCk7CisgICAg
aWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gQ3VzdG9tIGl0ZW1zIGFscmVh
ZHkgaGF2ZSBwcm9wZXIgY2hlY2tlZCBhbmQgZW5hYmxlZCB2YWx1ZXMuCisgICAgaWYgKENvbnRl
eHRNZW51SXRlbUJhc2VDdXN0b21UYWcgPD0gaXRlbS5hY3Rpb24oKSAmJiBpdGVtLmFjdGlvbigp
IDw9IENvbnRleHRNZW51SXRlbUxhc3RDdXN0b21UYWcpCisgICAgICAgIHJldHVybjsKKworICAg
IGJvb2wgc2hvdWxkRW5hYmxlID0gdHJ1ZTsKKyAgICBib29sIHNob3VsZENoZWNrID0gZmFsc2U7
IAorCisgICAgc3dpdGNoIChpdGVtLmFjdGlvbigpKSB7CisgICAgICAgIGNhc2UgQ29udGV4dE1l
bnVJdGVtVGFnQ2hlY2tTcGVsbGluZzoKKyAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGZyYW1l
LT5lZGl0b3IoKS0+Y2FuRWRpdCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtVGFnRGVmYXVsdERpcmVjdGlvbjoKKyAgICAgICAgICAgIHNob3VsZENo
ZWNrID0gZmFsc2U7CisgICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmYWxzZTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0xlZnRUb1JpZ2h0Ogor
ICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1JpZ2h0VG9MZWZ0OiB7CisgICAgICAgICAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAgICAgIFJlZlB0cjxDU1NTdHlsZURlY2xh
cmF0aW9uPiBzdHlsZSA9IGZyYW1lLT5kb2N1bWVudCgpLT5jcmVhdGVDU1NTdHlsZURlY2xhcmF0
aW9uKCk7CisgICAgICAgICAgICBTdHJpbmcgZGlyZWN0aW9uID0gaXRlbS5hY3Rpb24oKSA9PSBD
b250ZXh0TWVudUl0ZW1UYWdMZWZ0VG9SaWdodCA/ICJsdHIiIDogInJ0bCI7CisgICAgICAgICAg
ICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlEaXJlY3Rpb24sIGRpcmVjdGlvbiwgZmFs
c2UsIGVjKTsKKyAgICAgICAgICAgIHNob3VsZENoZWNrID0gZnJhbWUtPmVkaXRvcigpLT5zZWxl
Y3Rpb25IYXNTdHlsZShzdHlsZS5nZXQoKSkgIT0gRmFsc2VUcmlTdGF0ZTsKKyAgICAgICAgICAg
IHNob3VsZEVuYWJsZSA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1RleHREaXJlY3Rpb25EZWZhdWx0OiB7CisgICAg
ICAgICAgICBFZGl0b3I6OkNvbW1hbmQgY29tbWFuZCA9IGZyYW1lLT5lZGl0b3IoKS0+Y29tbWFu
ZCgiTWFrZVRleHRXcml0aW5nRGlyZWN0aW9uTmF0dXJhbCIpOworICAgICAgICAgICAgc2hvdWxk
Q2hlY2sgPSBjb21tYW5kLnN0YXRlKCkgPT0gVHJ1ZVRyaVN0YXRlOworICAgICAgICAgICAgc2hv
dWxkRW5hYmxlID0gY29tbWFuZC5pc0VuYWJsZWQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnVGV4dERpcmVjdGlvbkxlZnRU
b1JpZ2h0OiB7CisgICAgICAgICAgICBFZGl0b3I6OkNvbW1hbmQgY29tbWFuZCA9IGZyYW1lLT5l
ZGl0b3IoKS0+Y29tbWFuZCgiTWFrZVRleHRXcml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQiKTsK
KyAgICAgICAgICAgIHNob3VsZENoZWNrID0gY29tbWFuZC5zdGF0ZSgpID09IFRydWVUcmlTdGF0
ZTsKKyAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGNvbW1hbmQuaXNFbmFibGVkKCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRh
Z1RleHREaXJlY3Rpb25SaWdodFRvTGVmdDogeworICAgICAgICAgICAgRWRpdG9yOjpDb21tYW5k
IGNvbW1hbmQgPSBmcmFtZS0+ZWRpdG9yKCktPmNvbW1hbmQoIk1ha2VUZXh0V3JpdGluZ0RpcmVj
dGlvblJpZ2h0VG9MZWZ0Iik7CisgICAgICAgICAgICBzaG91bGRDaGVjayA9IGNvbW1hbmQuc3Rh
dGUoKSA9PSBUcnVlVHJpU3RhdGU7CisgICAgICAgICAgICBzaG91bGRFbmFibGUgPSBjb21tYW5k
LmlzRW5hYmxlZCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBDb250ZXh0TWVudUl0ZW1UYWdDb3B5OgorICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gZnJh
bWUtPmVkaXRvcigpLT5jYW5ESFRNTENvcHkoKSB8fCBmcmFtZS0+ZWRpdG9yKCktPmNhbkNvcHko
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0N1
dDoKKyAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGZyYW1lLT5lZGl0b3IoKS0+Y2FuREhUTUxD
dXQoKSB8fCBmcmFtZS0+ZWRpdG9yKCktPmNhbkN1dCgpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnSWdub3JlU3BlbGxpbmc6CisgICAgICAgIGNh
c2UgQ29udGV4dE1lbnVJdGVtVGFnTGVhcm5TcGVsbGluZzoKKyAgICAgICAgICAgIHNob3VsZEVu
YWJsZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS0+aXNSYW5nZSgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnUGFzdGU6CisgICAgICAgICAgICBzaG91
bGRFbmFibGUgPSBmcmFtZS0+ZWRpdG9yKCktPmNhbkRIVE1MUGFzdGUoKSB8fCBmcmFtZS0+ZWRp
dG9yKCktPmNhblBhc3RlKCk7CisgICAgICAgICAgICBicmVhazsKKyNpZiBQTEFURk9STShHVEsp
CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnRGVsZXRlOgorICAgICAgICAgICAgc2hv
dWxkRW5hYmxlID0gZnJhbWUtPmVkaXRvcigpLT5jYW5EZWxldGUoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1NlbGVjdEFsbDoKKyAgICAgICAg
Y2FzZSBDb250ZXh0TWVudUl0ZW1UYWdJbnB1dE1ldGhvZHM6CisgICAgICAgIGNhc2UgQ29udGV4
dE1lbnVJdGVtVGFnVW5pY29kZToKKyAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IHRydWU7Cisg
ICAgICAgICAgICBicmVhazsKKyNlbmRpZgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRh
Z1VuZGVybGluZTogeworICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgICAg
ICAgICBSZWZQdHI8Q1NTU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUgPSBmcmFtZS0+ZG9jdW1lbnQo
KS0+Y3JlYXRlQ1NTU3R5bGVEZWNsYXJhdGlvbigpOworICAgICAgICAgICAgc3R5bGUtPnNldFBy
b3BlcnR5KENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25zSW5FZmZlY3QsICJ1bmRlcmxp
bmUiLCBmYWxzZSwgZWMpOworICAgICAgICAgICAgc2hvdWxkQ2hlY2sgPSBmcmFtZS0+ZWRpdG9y
KCktPnNlbGVjdGlvbkhhc1N0eWxlKHN0eWxlLmdldCgpKSAhPSBGYWxzZVRyaVN0YXRlOworICAg
ICAgICAgICAgc2hvdWxkRW5hYmxlID0gZnJhbWUtPmVkaXRvcigpLT5jYW5FZGl0UmljaGx5KCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENvbnRleHRNZW51
SXRlbVRhZ0xvb2tVcEluRGljdGlvbmFyeToKKyAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGZy
YW1lLT5zZWxlY3Rpb24oKS0+aXNSYW5nZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQ2hlY2tHcmFtbWFyV2l0aFNwZWxsaW5nOgorI2lmbmRl
ZiBCVUlMRElOR19PTl9USUdFUgorICAgICAgICAgICAgaWYgKGZyYW1lLT5lZGl0b3IoKS0+aXNH
cmFtbWFyQ2hlY2tpbmdFbmFibGVkKCkpCisgICAgICAgICAgICAgICAgc2hvdWxkQ2hlY2sgPSB0
cnVlOworICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gdHJ1ZTsKKyNlbmRpZgorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnSXRhbGljOiB7CisgICAg
ICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAgICAgIFJlZlB0cjxDU1NTdHls
ZURlY2xhcmF0aW9uPiBzdHlsZSA9IGZyYW1lLT5kb2N1bWVudCgpLT5jcmVhdGVDU1NTdHlsZURl
Y2xhcmF0aW9uKCk7CisgICAgICAgICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlG
b250U3R5bGUsICJpdGFsaWMiLCBmYWxzZSwgZWMpOworICAgICAgICAgICAgc2hvdWxkQ2hlY2sg
PSBmcmFtZS0+ZWRpdG9yKCktPnNlbGVjdGlvbkhhc1N0eWxlKHN0eWxlLmdldCgpKSAhPSBGYWxz
ZVRyaVN0YXRlOworICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gZnJhbWUtPmVkaXRvcigpLT5j
YW5FZGl0UmljaGx5KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBj
YXNlIENvbnRleHRNZW51SXRlbVRhZ0JvbGQ6IHsKKyAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOworICAgICAgICAgICAgUmVmUHRyPENTU1N0eWxlRGVjbGFyYXRpb24+IHN0eWxlID0g
ZnJhbWUtPmRvY3VtZW50KCktPmNyZWF0ZUNTU1N0eWxlRGVjbGFyYXRpb24oKTsKKyAgICAgICAg
ICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRXZWlnaHQsICJib2xkIiwgZmFs
c2UsIGVjKTsKKyAgICAgICAgICAgIHNob3VsZENoZWNrID0gZnJhbWUtPmVkaXRvcigpLT5zZWxl
Y3Rpb25IYXNTdHlsZShzdHlsZS5nZXQoKSkgIT0gRmFsc2VUcmlTdGF0ZTsKKyAgICAgICAgICAg
IHNob3VsZEVuYWJsZSA9IGZyYW1lLT5lZGl0b3IoKS0+Y2FuRWRpdFJpY2hseSgpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdP
dXRsaW5lOgorICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gZmFsc2U7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTaG93U3BlbGxpbmdQYW5lbDoK
KyNpZm5kZWYgQlVJTERJTkdfT05fVElHRVIKKyAgICAgICAgICAgIGlmIChmcmFtZS0+ZWRpdG9y
KCktPnNwZWxsaW5nUGFuZWxJc1Nob3dpbmcoKSkKKyAgICAgICAgICAgICAgICBpdGVtLnNldFRp
dGxlKGNvbnRleHRNZW51SXRlbVRhZ1Nob3dTcGVsbGluZ1BhbmVsKGZhbHNlKSk7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgaXRlbS5zZXRUaXRsZShjb250ZXh0TWVudUl0ZW1U
YWdTaG93U3BlbGxpbmdQYW5lbCh0cnVlKSk7CisjZW5kaWYKKyAgICAgICAgICAgIHNob3VsZEVu
YWJsZSA9IGZyYW1lLT5lZGl0b3IoKS0+Y2FuRWRpdCgpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnTm9HdWVzc2VzRm91bmQ6CisgICAgICAgICAg
ICBzaG91bGRFbmFibGUgPSBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IENvbnRleHRNZW51SXRlbVRhZ0NoZWNrU3BlbGxpbmdXaGlsZVR5cGluZzoKKyAgICAgICAgICAg
IHNob3VsZENoZWNrID0gZnJhbWUtPmVkaXRvcigpLT5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5n
RW5hYmxlZCgpOworICAgICAgICAgICAgYnJlYWs7CisjaWYgUExBVEZPUk0oTUFDKQorICAgICAg
ICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1N1YnN0aXR1dGlvbnNNZW51OgorICAgICAgICBjYXNl
IENvbnRleHRNZW51SXRlbVRhZ1RyYW5zZm9ybWF0aW9uc01lbnU6CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTaG93U3Vic3RpdHV0aW9uczoKKyNp
ZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVP
UEFSRCkKKyAgICAgICAgICAgIGlmIChmcmFtZS0+ZWRpdG9yKCktPnN1YnN0aXR1dGlvbnNQYW5l
bElzU2hvd2luZygpKQorICAgICAgICAgICAgICAgIGl0ZW0uc2V0VGl0bGUoY29udGV4dE1lbnVJ
dGVtVGFnU2hvd1N1YnN0aXR1dGlvbnMoZmFsc2UpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBpdGVtLnNldFRpdGxlKGNvbnRleHRNZW51SXRlbVRhZ1Nob3dTdWJzdGl0dXRp
b25zKHRydWUpKTsKKyAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGZyYW1lLT5lZGl0b3IoKS0+
Y2FuRWRpdCgpOworI2VuZGlmCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb250
ZXh0TWVudUl0ZW1UYWdNYWtlVXBwZXJDYXNlOgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRl
bVRhZ01ha2VMb3dlckNhc2U6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQ2FwaXRh
bGl6ZToKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdDaGFuZ2VCYWNrOgorICAgICAg
ICAgICAgc2hvdWxkRW5hYmxlID0gZnJhbWUtPmVkaXRvcigpLT5jYW5FZGl0KCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdDb3JyZWN0U3BlbGxp
bmdBdXRvbWF0aWNhbGx5OgorI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVm
aW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQorICAgICAgICAgICAgc2hvdWxkQ2hlY2sgPSBmcmFt
ZS0+ZWRpdG9yKCktPmlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZCgpOworI2Vu
ZGlmCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdT
bWFydENvcHlQYXN0ZToKKyNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmlu
ZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKKyAgICAgICAgICAgIHNob3VsZENoZWNrID0gZnJhbWUt
PmVkaXRvcigpLT5zbWFydEluc2VydERlbGV0ZUVuYWJsZWQoKTsKKyNlbmRpZgorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU21hcnRRdW90ZXM6Cisj
aWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xF
T1BBUkQpCisgICAgICAgICAgICBzaG91bGRDaGVjayA9IGZyYW1lLT5lZGl0b3IoKS0+aXNBdXRv
bWF0aWNRdW90ZVN1YnN0aXR1dGlvbkVuYWJsZWQoKTsKKyNlbmRpZgorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU21hcnREYXNoZXM6CisjaWYgIWRl
ZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQp
CisgICAgICAgICAgICBzaG91bGRDaGVjayA9IGZyYW1lLT5lZGl0b3IoKS0+aXNBdXRvbWF0aWNE
YXNoU3Vic3RpdHV0aW9uRW5hYmxlZCgpOworI2VuZGlmCisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTbWFydExpbmtzOgorI2lmICFkZWZpbmVkKEJV
SUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQorICAgICAg
ICAgICAgc2hvdWxkQ2hlY2sgPSBmcmFtZS0+ZWRpdG9yKCktPmlzQXV0b21hdGljTGlua0RldGVj
dGlvbkVuYWJsZWQoKTsKKyNlbmRpZgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtVGFnVGV4dFJlcGxhY2VtZW50OgorI2lmICFkZWZpbmVkKEJVSUxESU5H
X09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQorICAgICAgICAgICAg
c2hvdWxkQ2hlY2sgPSBmcmFtZS0+ZWRpdG9yKCktPmlzQXV0b21hdGljVGV4dFJlcGxhY2VtZW50
RW5hYmxlZCgpOworI2VuZGlmCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb250
ZXh0TWVudUl0ZW1UYWdTdG9wU3BlYWtpbmc6CisgICAgICAgICAgICBzaG91bGRFbmFibGUgPSBj
b250cm9sbGVyKCkgJiYgY29udHJvbGxlcigpLT5jbGllbnQoKSAmJiBjb250cm9sbGVyKCktPmNs
aWVudCgpLT5pc1NwZWFraW5nKCk7CisgICAgICAgICAgICBicmVhazsKKyNlbHNlIC8vIFBMQVRG
T1JNKE1BQykgZW5kcyBoZXJlCisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU3RvcFNw
ZWFraW5nOgorICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKyNpZiBQTEFURk9STShHVEspCisg
ICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnR29CYWNrOgorICAgICAgICAgICAgc2hvdWxk
RW5hYmxlID0gZnJhbWUtPnBhZ2UoKSAmJiBmcmFtZS0+cGFnZSgpLT5iYWNrRm9yd2FyZCgpLT5j
YW5Hb0JhY2tPckZvcndhcmQoLTEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtVGFnR29Gb3J3YXJkOgorICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0g
ZnJhbWUtPnBhZ2UoKSAmJiBmcmFtZS0+cGFnZSgpLT5iYWNrRm9yd2FyZCgpLT5jYW5Hb0JhY2tP
ckZvcndhcmQoMSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb250ZXh0TWVu
dUl0ZW1UYWdTdG9wOgorICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gZnJhbWUtPmxvYWRlcigp
LT5kb2N1bWVudExvYWRlcigpLT5pc0xvYWRpbmdJbkFQSVNlbnNlKCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdSZWxvYWQ6CisgICAgICAgICAg
ICBzaG91bGRFbmFibGUgPSAhZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5pc0xv
YWRpbmdJbkFQSVNlbnNlKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb250
ZXh0TWVudUl0ZW1UYWdGb250TWVudToKKyAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGZyYW1l
LT5lZGl0b3IoKS0+Y2FuRWRpdFJpY2hseSgpOworICAgICAgICAgICAgYnJlYWs7CisjZWxzZQor
ICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0dvQmFjazoKKyAgICAgICAgY2FzZSBDb250
ZXh0TWVudUl0ZW1UYWdHb0ZvcndhcmQ6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFn
U3RvcDoKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdSZWxvYWQ6CisgICAgICAgIGNh
c2UgQ29udGV4dE1lbnVJdGVtVGFnRm9udE1lbnU6CisjZW5kaWYKKyAgICAgICAgY2FzZSBDb250
ZXh0TWVudUl0ZW1UYWdOb0FjdGlvbjoKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdP
cGVuTGlua0luTmV3V2luZG93OgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0Rvd25s
b2FkTGlua1RvRGlzazoKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdDb3B5TGlua1Rv
Q2xpcGJvYXJkOgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5JbWFnZUluTmV3
V2luZG93OgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0Rvd25sb2FkSW1hZ2VUb0Rp
c2s6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQ29weUltYWdlVG9DbGlwYm9hcmQ6
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdPcGVu
TWVkaWFJbk5ld1dpbmRvdzoKKyAgICAgICAgICAgIGlmIChtX2hpdFRlc3RSZXN1bHQubWVkaWFJ
c1ZpZGVvKCkpCisgICAgICAgICAgICAgICAgaXRlbS5zZXRUaXRsZShjb250ZXh0TWVudUl0ZW1U
YWdPcGVuVmlkZW9Jbk5ld1dpbmRvdygpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBpdGVtLnNldFRpdGxlKGNvbnRleHRNZW51SXRlbVRhZ09wZW5BdWRpb0luTmV3V2luZG93
KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFn
Q29weU1lZGlhTGlua1RvQ2xpcGJvYXJkOgorICAgICAgICAgICAgaWYgKG1faGl0VGVzdFJlc3Vs
dC5tZWRpYUlzVmlkZW8oKSkKKyAgICAgICAgICAgICAgICBpdGVtLnNldFRpdGxlKGNvbnRleHRN
ZW51SXRlbVRhZ0NvcHlWaWRlb0xpbmtUb0NsaXBib2FyZCgpKTsKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICBpdGVtLnNldFRpdGxlKGNvbnRleHRNZW51SXRlbVRhZ0NvcHlBdWRp
b0xpbmtUb0NsaXBib2FyZCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENv
bnRleHRNZW51SXRlbVRhZ1RvZ2dsZU1lZGlhQ29udHJvbHM6CisgICAgICAgICAgICBzaG91bGRD
aGVjayA9IG1faGl0VGVzdFJlc3VsdC5tZWRpYUNvbnRyb2xzRW5hYmxlZCgpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnVG9nZ2xlTWVkaWFMb29w
OgorICAgICAgICAgICAgc2hvdWxkQ2hlY2sgPSBtX2hpdFRlc3RSZXN1bHQubWVkaWFMb29wRW5h
YmxlZCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVt
VGFnRW50ZXJWaWRlb0Z1bGxzY3JlZW46CisgICAgICAgICAgICBzaG91bGRFbmFibGUgPSBtX2hp
dFRlc3RSZXN1bHQubWVkaWFTdXBwb3J0c0Z1bGxzY3JlZW4oKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5GcmFtZUluTmV3V2luZG93Ogor
ICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1NwZWxsaW5nR3Vlc3M6CisgICAgICAgIGNh
c2UgQ29udGV4dE1lbnVJdGVtVGFnT3RoZXI6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVt
VGFnU2VhcmNoSW5TcG90bGlnaHQ6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU2Vh
cmNoV2ViOgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5XaXRoRGVmYXVsdEFw
cGxpY2F0aW9uOgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVBERkFjdHVhbFNpemU6Cisg
ICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtUERGWm9vbUluOgorICAgICAgICBjYXNlIENvbnRl
eHRNZW51SXRlbVBERlpvb21PdXQ6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtUERGQXV0
b1NpemU6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtUERGU2luZ2xlUGFnZToKKyAgICAg
ICAgY2FzZSBDb250ZXh0TWVudUl0ZW1QREZGYWNpbmdQYWdlczoKKyAgICAgICAgY2FzZSBDb250
ZXh0TWVudUl0ZW1QREZDb250aW51b3VzOgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVBE
Rk5leHRQYWdlOgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVBERlByZXZpb3VzUGFnZToK
KyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdPcGVuTGluazoKKyAgICAgICAgY2FzZSBD
b250ZXh0TWVudUl0ZW1UYWdJZ25vcmVHcmFtbWFyOgorICAgICAgICBjYXNlIENvbnRleHRNZW51
SXRlbVRhZ1NwZWxsaW5nTWVudToKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTaG93
Rm9udHM6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU3R5bGVzOgorICAgICAgICBj
YXNlIENvbnRleHRNZW51SXRlbVRhZ1Nob3dDb2xvcnM6CisgICAgICAgIGNhc2UgQ29udGV4dE1l
bnVJdGVtVGFnU3BlZWNoTWVudToKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTdGFy
dFNwZWFraW5nOgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1dyaXRpbmdEaXJlY3Rp
b25NZW51OgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1RleHREaXJlY3Rpb25NZW51
OgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1BERlNpbmdsZVBhZ2VTY3JvbGxpbmc6
CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnUERGRmFjaW5nUGFnZXNTY3JvbGxpbmc6
CisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdJ
bnNwZWN0RWxlbWVudDoKKyNlbmRpZgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbUJhc2VD
dXN0b21UYWc6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtQ3VzdG9tVGFnTm9BY3Rpb246
CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtTGFzdEN1c3RvbVRhZzoKKyAgICAgICAgY2Fz
ZSBDb250ZXh0TWVudUl0ZW1CYXNlQXBwbGljYXRpb25UYWc6CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdNZWRpYVBsYXlQYXVzZToKKyAgICAgICAg
ICAgIGlmIChtX2hpdFRlc3RSZXN1bHQubWVkaWFQbGF5aW5nKCkpCisgICAgICAgICAgICAgICAg
aXRlbS5zZXRUaXRsZShjb250ZXh0TWVudUl0ZW1UYWdNZWRpYVBhdXNlKCkpOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIGl0ZW0uc2V0VGl0bGUoY29udGV4dE1lbnVJdGVtVGFn
TWVkaWFQbGF5KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29udGV4dE1l
bnVJdGVtVGFnTWVkaWFNdXRlOgorICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gbV9oaXRUZXN0
UmVzdWx0Lm1lZGlhSGFzQXVkaW8oKTsKKyAgICAgICAgICAgIHNob3VsZENoZWNrID0gc2hvdWxk
RW5hYmxlICYmICBtX2hpdFRlc3RSZXN1bHQubWVkaWFNdXRlZCgpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgaXRlbS5zZXRDaGVja2VkKHNob3VsZENoZWNrKTsKKyAgICBpdGVt
LnNldEVuYWJsZWQoc2hvdWxkRW5hYmxlKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CiAjZW5kaWYgLy8gRU5BQkxFKENPTlRFWFRfTUVOVVMpCkluZGV4OiBXZWJDb3JlL3BhZ2UvQ29u
dGV4dE1lbnVDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0NvbnRleHRN
ZW51Q29udHJvbGxlci5oCShyZXZpc2lvbiA3MzE2OSkKKysrIFdlYkNvcmUvcGFnZS9Db250ZXh0
TWVudUNvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRl
ZiBDb250ZXh0TWVudUNvbnRyb2xsZXJfaAogI2RlZmluZSBDb250ZXh0TWVudUNvbnRyb2xsZXJf
aAogCisjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJs
ZS5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgpAQCAtNTMsMTYgKzU0LDM1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBo
YW5kbGVDb250ZXh0TWVudUV2ZW50KEV2ZW50Kik7CiAgICAgICAgIHZvaWQgc2hvd0NvbnRleHRN
ZW51KEV2ZW50KiwgUGFzc1JlZlB0cjxDb250ZXh0TWVudVByb3ZpZGVyPik7CiAKKyAgICAgICAg
dm9pZCBwb3B1bGF0ZSgpOwogICAgICAgICB2b2lkIGNvbnRleHRNZW51SXRlbVNlbGVjdGVkKENv
bnRleHRNZW51SXRlbSopOworICAgICAgICB2b2lkIGFkZEluc3BlY3RFbGVtZW50SXRlbSgpOwor
CisgICAgICAgIHZvaWQgY2hlY2tPckVuYWJsZUlmTmVlZGVkKENvbnRleHRNZW51SXRlbSYpIGNv
bnN0OworCisgICAgICAgIHZvaWQgc2V0SGl0VGVzdFJlc3VsdChjb25zdCBIaXRUZXN0UmVzdWx0
JiByZXN1bHQpIHsgbV9oaXRUZXN0UmVzdWx0ID0gcmVzdWx0OyB9CisgICAgICAgIGNvbnN0IEhp
dFRlc3RSZXN1bHQmIGhpdFRlc3RSZXN1bHQoKSB7IHJldHVybiBtX2hpdFRlc3RSZXN1bHQ7IH0K
IAogICAgIHByaXZhdGU6CiAgICAgICAgIENvbnRleHRNZW51KiBjcmVhdGVDb250ZXh0TWVudShF
dmVudCopOwogICAgICAgICB2b2lkIHNob3dDb250ZXh0TWVudShFdmVudCopOworICAgICAgICAK
KyAgICAgICAgdm9pZCBhcHBlbmRJdGVtKENvbnRleHRNZW51SXRlbSYsIENvbnRleHRNZW51KiBw
YXJlbnRNZW51KTsKKworICAgICAgICB2b2lkIGNyZWF0ZUFuZEFwcGVuZEZvbnRTdWJNZW51KENv
bnRleHRNZW51SXRlbSYgZm9udE1lbnVJdGVtKTsKKyAgICAgICAgdm9pZCBjcmVhdGVBbmRBcHBl
bmRTcGVsbGluZ0FuZEdyYW1tYXJTdWJNZW51KENvbnRleHRNZW51SXRlbSYgc3BlbGxpbmdBbmRH
cmFtbWFyTWVudUl0ZW0pOworICAgICAgICB2b2lkIGNyZWF0ZUFuZEFwcGVuZFNwZWxsaW5nU3Vi
TWVudShDb250ZXh0TWVudUl0ZW0mIHNwZWxsaW5nTWVudUl0ZW0pOworICAgICAgICB2b2lkIGNy
ZWF0ZUFuZEFwcGVuZFNwZWVjaFN1Yk1lbnUoQ29udGV4dE1lbnVJdGVtJiBzcGVlY2hNZW51SXRl
bSk7CisgICAgICAgIHZvaWQgY3JlYXRlQW5kQXBwZW5kV3JpdGluZ0RpcmVjdGlvblN1Yk1lbnUo
Q29udGV4dE1lbnVJdGVtJiB3cml0aW5nRGlyZWN0aW9uTWVudUl0ZW0pOworICAgICAgICB2b2lk
IGNyZWF0ZUFuZEFwcGVuZFRleHREaXJlY3Rpb25TdWJNZW51KENvbnRleHRNZW51SXRlbSYgdGV4
dERpcmVjdGlvbk1lbnVJdGVtKTsKKyAgICAgICAgdm9pZCBjcmVhdGVBbmRBcHBlbmRTdWJzdGl0
dXRpb25zU3ViTWVudShDb250ZXh0TWVudUl0ZW0mIHN1YnN0aXR1dGlvbnNNZW51SXRlbSk7Cisg
ICAgICAgIHZvaWQgY3JlYXRlQW5kQXBwZW5kVHJhbnNmb3JtYXRpb25zU3ViTWVudShDb250ZXh0
TWVudUl0ZW0mIHRyYW5zZm9ybWF0aW9uc01lbnVJdGVtKTsKIAogICAgICAgICBQYWdlKiBtX3Bh
Z2U7CiAgICAgICAgIENvbnRleHRNZW51Q2xpZW50KiBtX2NsaWVudDsKICAgICAgICAgT3duUHRy
PENvbnRleHRNZW51PiBtX2NvbnRleHRNZW51OwogICAgICAgICBSZWZQdHI8Q29udGV4dE1lbnVQ
cm92aWRlcj4gbV9tZW51UHJvdmlkZXI7CisgICAgICAgIEhpdFRlc3RSZXN1bHQgbV9oaXRUZXN0
UmVzdWx0OwogICAgIH07CiAKIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vQ29udGV4dE1lbnUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vQ29udGV4dE1lbnUuY3BwCShyZXZp
c2lvbiA3MzE2OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vQ29udGV4dE1lbnUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDg5MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBD
aHJpc3RpYW4gRHl3YW4gPGNocmlzdGlhbkBpbWVuZGlvLmNvbT4KLSAqIENvcHlyaWdodCAoQykg
MjAxMCBJZ2FsaWEgUy5MCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJD
b250ZXh0TWVudS5oIgotCi0jaWYgRU5BQkxFKENPTlRFWFRfTUVOVVMpCi0KLSNpbmNsdWRlICJC
YWNrRm9yd2FyZENvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJDb250ZXh0TWVudUNvbnRyb2xsZXIu
aCIKLSNpbmNsdWRlICJDb250ZXh0TWVudUNsaWVudC5oIgotI2luY2x1ZGUgIkNTU0NvbXB1dGVk
U3R5bGVEZWNsYXJhdGlvbi5oIgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5LmgiCi0jaW5jbHVkZSAi
Q1NTUHJvcGVydHlOYW1lcy5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRG9j
dW1lbnRMb2FkZXIuaCIKLSNpbmNsdWRlICJFZGl0b3IuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgot
I2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5o
IgotI2luY2x1ZGUgIktVUkwuaCIKLSNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgiCi0jaW5j
bHVkZSAiTm9kZS5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJSZXNvdXJjZVJlcXVl
c3QuaCIKLSNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCi0jaW5jbHVkZSAiU2V0dGlu
Z3MuaCIKLSNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci11c2luZyBuYW1lc3BhY2UgV1RGOwotdXNp
bmcgbmFtZXNwYWNlIFVuaWNvZGU7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotQ29udGV4dE1l
bnVDb250cm9sbGVyKiBDb250ZXh0TWVudTo6Y29udHJvbGxlcigpIGNvbnN0Ci17Ci0gICAgaWYg
KE5vZGUqIG5vZGUgPSBtX2hpdFRlc3RSZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCkpCi0gICAg
ICAgIGlmIChGcmFtZSogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpKQotICAgICAg
ICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpKQotICAgICAgICAgICAgICAgIHJl
dHVybiBwYWdlLT5jb250ZXh0TWVudUNvbnRyb2xsZXIoKTsKLSAgICByZXR1cm4gMDsKLX0KLQot
c3RhdGljIFBhc3NPd25QdHI8Q29udGV4dE1lbnVJdGVtPiBzZXBhcmF0b3JJdGVtKCkKLXsKLSAg
ICByZXR1cm4gbmV3IENvbnRleHRNZW51SXRlbShTZXBhcmF0b3JUeXBlLCBDb250ZXh0TWVudUl0
ZW1UYWdOb0FjdGlvbiwgU3RyaW5nKCkpOwotfQotCi1zdGF0aWMgdm9pZCBjcmVhdGVBbmRBcHBl
bmRGb250U3ViTWVudShjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIENvbnRleHRNZW51SXRl
bSYgZm9udE1lbnVJdGVtKQotewotICAgIENvbnRleHRNZW51IGZvbnRNZW51KHJlc3VsdCk7Ci0K
LSNpZiBQTEFURk9STShNQUMpCi0gICAgQ29udGV4dE1lbnVJdGVtIHNob3dGb250cyhBY3Rpb25U
eXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTaG93Rm9udHMsIGNvbnRleHRNZW51SXRlbVRhZ1Nob3dG
b250cygpKTsKLSNlbmRpZgotICAgIENvbnRleHRNZW51SXRlbSBib2xkKENoZWNrYWJsZUFjdGlv
blR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0JvbGQsIGNvbnRleHRNZW51SXRlbVRhZ0JvbGQoKSk7
Ci0gICAgQ29udGV4dE1lbnVJdGVtIGl0YWxpYyhDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0
TWVudUl0ZW1UYWdJdGFsaWMsIGNvbnRleHRNZW51SXRlbVRhZ0l0YWxpYygpKTsKLSAgICBDb250
ZXh0TWVudUl0ZW0gdW5kZXJsaW5lKENoZWNrYWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRl
bVRhZ1VuZGVybGluZSwgY29udGV4dE1lbnVJdGVtVGFnVW5kZXJsaW5lKCkpOwotICAgIENvbnRl
eHRNZW51SXRlbSBvdXRsaW5lKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ091dGxpbmUs
IGNvbnRleHRNZW51SXRlbVRhZ091dGxpbmUoKSk7Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgIENv
bnRleHRNZW51SXRlbSBzdHlsZXMoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU3R5bGVz
LCBjb250ZXh0TWVudUl0ZW1UYWdTdHlsZXMoKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIHNob3dD
b2xvcnMoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU2hvd0NvbG9ycywgY29udGV4dE1l
bnVJdGVtVGFnU2hvd0NvbG9ycygpKTsKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oTUFDKQotICAg
IGZvbnRNZW51LmFwcGVuZEl0ZW0oc2hvd0ZvbnRzKTsKLSNlbmRpZgotICAgIGZvbnRNZW51LmFw
cGVuZEl0ZW0oYm9sZCk7Ci0gICAgZm9udE1lbnUuYXBwZW5kSXRlbShpdGFsaWMpOwotICAgIGZv
bnRNZW51LmFwcGVuZEl0ZW0odW5kZXJsaW5lKTsKLSAgICBmb250TWVudS5hcHBlbmRJdGVtKG91
dGxpbmUpOwotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBmb250TWVudS5hcHBlbmRJdGVtKHN0eWxl
cyk7Ci0gICAgZm9udE1lbnUuYXBwZW5kSXRlbSgqc2VwYXJhdG9ySXRlbSgpKTsKLSAgICBmb250
TWVudS5hcHBlbmRJdGVtKHNob3dDb2xvcnMpOwotI2VuZGlmCi0KLSAgICBmb250TWVudUl0ZW0u
c2V0U3ViTWVudSgmZm9udE1lbnUpOwotfQotCi0jaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElH
RVIpCi0KLSNpZiAhUExBVEZPUk0oR1RLKQotCi1zdGF0aWMgdm9pZCBjcmVhdGVBbmRBcHBlbmRT
cGVsbGluZ0FuZEdyYW1tYXJTdWJNZW51KGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgQ29u
dGV4dE1lbnVJdGVtJiBzcGVsbGluZ0FuZEdyYW1tYXJNZW51SXRlbSkKLXsKLSAgICBDb250ZXh0
TWVudSBzcGVsbGluZ0FuZEdyYW1tYXJNZW51KHJlc3VsdCk7Ci0KLSAgICBDb250ZXh0TWVudUl0
ZW0gc2hvd1NwZWxsaW5nUGFuZWwoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU2hvd1Nw
ZWxsaW5nUGFuZWwsIAotICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdTaG93U3BlbGxpbmdQYW5l
bCh0cnVlKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIGNoZWNrU3BlbGxpbmcoQWN0aW9uVHlwZSwg
Q29udGV4dE1lbnVJdGVtVGFnQ2hlY2tTcGVsbGluZywgCi0gICAgICAgIGNvbnRleHRNZW51SXRl
bVRhZ0NoZWNrU3BlbGxpbmcoKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIGNoZWNrQXNZb3VUeXBl
KENoZWNrYWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0NoZWNrU3BlbGxpbmdXaGls
ZVR5cGluZywgCi0gICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ0NoZWNrU3BlbGxpbmdXaGlsZVR5
cGluZygpKTsKLSAgICBDb250ZXh0TWVudUl0ZW0gZ3JhbW1hcldpdGhTcGVsbGluZyhDaGVja2Fi
bGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdDaGVja0dyYW1tYXJXaXRoU3BlbGxpbmcs
IAotICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdDaGVja0dyYW1tYXJXaXRoU3BlbGxpbmcoKSk7
Ci0jaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQotICAg
IENvbnRleHRNZW51SXRlbSBjb3JyZWN0U3BlbGxpbmcoQ2hlY2thYmxlQWN0aW9uVHlwZSwgQ29u
dGV4dE1lbnVJdGVtVGFnQ29ycmVjdFNwZWxsaW5nQXV0b21hdGljYWxseSwgCi0gICAgICAgIGNv
bnRleHRNZW51SXRlbVRhZ0NvcnJlY3RTcGVsbGluZ0F1dG9tYXRpY2FsbHkoKSk7Ci0jZW5kaWYK
LQotICAgIHNwZWxsaW5nQW5kR3JhbW1hck1lbnUuYXBwZW5kSXRlbShzaG93U3BlbGxpbmdQYW5l
bCk7Ci0gICAgc3BlbGxpbmdBbmRHcmFtbWFyTWVudS5hcHBlbmRJdGVtKGNoZWNrU3BlbGxpbmcp
OwotI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKLSAg
ICBzcGVsbGluZ0FuZEdyYW1tYXJNZW51LmFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSk7Ci0j
ZW5kaWYKLSAgICBzcGVsbGluZ0FuZEdyYW1tYXJNZW51LmFwcGVuZEl0ZW0oY2hlY2tBc1lvdVR5
cGUpOwotICAgIHNwZWxsaW5nQW5kR3JhbW1hck1lbnUuYXBwZW5kSXRlbShncmFtbWFyV2l0aFNw
ZWxsaW5nKTsKLSNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BB
UkQpCi0gICAgc3BlbGxpbmdBbmRHcmFtbWFyTWVudS5hcHBlbmRJdGVtKGNvcnJlY3RTcGVsbGlu
Zyk7Ci0jZW5kaWYKLQotICAgIHNwZWxsaW5nQW5kR3JhbW1hck1lbnVJdGVtLnNldFN1Yk1lbnUo
JnNwZWxsaW5nQW5kR3JhbW1hck1lbnUpOwotfQotCi0jZW5kaWYgLy8gIVBMQVRGT1JNKEdUSykK
LQotI2Vsc2UKLQotc3RhdGljIHZvaWQgY3JlYXRlQW5kQXBwZW5kU3BlbGxpbmdTdWJNZW51KGNv
bnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgQ29udGV4dE1lbnVJdGVtJiBzcGVsbGluZ01lbnVJ
dGVtKQotewotICAgIENvbnRleHRNZW51IHNwZWxsaW5nTWVudShyZXN1bHQpOwotCi0gICAgQ29u
dGV4dE1lbnVJdGVtIHNob3dTcGVsbGluZ1BhbmVsKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRl
bVRhZ1Nob3dTcGVsbGluZ1BhbmVsLCAKLSAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnU2hvd1Nw
ZWxsaW5nUGFuZWwodHJ1ZSkpOwotICAgIENvbnRleHRNZW51SXRlbSBjaGVja1NwZWxsaW5nKEFj
dGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0NoZWNrU3BlbGxpbmcsIAotICAgICAgICBjb250
ZXh0TWVudUl0ZW1UYWdDaGVja1NwZWxsaW5nKCkpOwotICAgIENvbnRleHRNZW51SXRlbSBjaGVj
a0FzWW91VHlwZShDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdDaGVja1Nw
ZWxsaW5nV2hpbGVUeXBpbmcsIAotICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdDaGVja1NwZWxs
aW5nV2hpbGVUeXBpbmcoKSk7Ci0KLSAgICBzcGVsbGluZ01lbnUuYXBwZW5kSXRlbShzaG93U3Bl
bGxpbmdQYW5lbCk7Ci0gICAgc3BlbGxpbmdNZW51LmFwcGVuZEl0ZW0oY2hlY2tTcGVsbGluZyk7
Ci0gICAgc3BlbGxpbmdNZW51LmFwcGVuZEl0ZW0oY2hlY2tBc1lvdVR5cGUpOwotCi0gICAgc3Bl
bGxpbmdNZW51SXRlbS5zZXRTdWJNZW51KCZzcGVsbGluZ01lbnUpOwotfQotCi0jZW5kaWYKLQot
I2lmIFBMQVRGT1JNKE1BQykKLQotc3RhdGljIHZvaWQgY3JlYXRlQW5kQXBwZW5kU3BlZWNoU3Vi
TWVudShjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIENvbnRleHRNZW51SXRlbSYgc3BlZWNo
TWVudUl0ZW0pCi17Ci0gICAgQ29udGV4dE1lbnUgc3BlZWNoTWVudShyZXN1bHQpOwotCi0gICAg
Q29udGV4dE1lbnVJdGVtIHN0YXJ0KEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1N0YXJ0
U3BlYWtpbmcsIGNvbnRleHRNZW51SXRlbVRhZ1N0YXJ0U3BlYWtpbmcoKSk7Ci0gICAgQ29udGV4
dE1lbnVJdGVtIHN0b3AoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU3RvcFNwZWFraW5n
LCBjb250ZXh0TWVudUl0ZW1UYWdTdG9wU3BlYWtpbmcoKSk7Ci0KLSAgICBzcGVlY2hNZW51LmFw
cGVuZEl0ZW0oc3RhcnQpOwotICAgIHNwZWVjaE1lbnUuYXBwZW5kSXRlbShzdG9wKTsKLQotICAg
IHNwZWVjaE1lbnVJdGVtLnNldFN1Yk1lbnUoJnNwZWVjaE1lbnUpOwotfQotCi0jZW5kaWYKLSAK
LSNpZiAhUExBVEZPUk0oR1RLKQotCi1zdGF0aWMgdm9pZCBjcmVhdGVBbmRBcHBlbmRXcml0aW5n
RGlyZWN0aW9uU3ViTWVudShjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIENvbnRleHRNZW51
SXRlbSYgd3JpdGluZ0RpcmVjdGlvbk1lbnVJdGVtKQotewotICAgIENvbnRleHRNZW51IHdyaXRp
bmdEaXJlY3Rpb25NZW51KHJlc3VsdCk7Ci0KLSAgICBDb250ZXh0TWVudUl0ZW0gZGVmYXVsdEl0
ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnRGVmYXVsdERpcmVjdGlvbiwgCi0gICAg
ICAgIGNvbnRleHRNZW51SXRlbVRhZ0RlZmF1bHREaXJlY3Rpb24oKSk7Ci0gICAgQ29udGV4dE1l
bnVJdGVtIGx0cihDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdMZWZ0VG9S
aWdodCwgY29udGV4dE1lbnVJdGVtVGFnTGVmdFRvUmlnaHQoKSk7Ci0gICAgQ29udGV4dE1lbnVJ
dGVtIHJ0bChDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdSaWdodFRvTGVm
dCwgY29udGV4dE1lbnVJdGVtVGFnUmlnaHRUb0xlZnQoKSk7Ci0KLSAgICB3cml0aW5nRGlyZWN0
aW9uTWVudS5hcHBlbmRJdGVtKGRlZmF1bHRJdGVtKTsKLSAgICB3cml0aW5nRGlyZWN0aW9uTWVu
dS5hcHBlbmRJdGVtKGx0cik7Ci0gICAgd3JpdGluZ0RpcmVjdGlvbk1lbnUuYXBwZW5kSXRlbShy
dGwpOwotCi0gICAgd3JpdGluZ0RpcmVjdGlvbk1lbnVJdGVtLnNldFN1Yk1lbnUoJndyaXRpbmdE
aXJlY3Rpb25NZW51KTsKLX0KLQotc3RhdGljIHZvaWQgY3JlYXRlQW5kQXBwZW5kVGV4dERpcmVj
dGlvblN1Yk1lbnUoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBDb250ZXh0TWVudUl0ZW0m
IHRleHREaXJlY3Rpb25NZW51SXRlbSkKLXsKLSAgICBDb250ZXh0TWVudSB0ZXh0RGlyZWN0aW9u
TWVudShyZXN1bHQpOwotCi0gICAgQ29udGV4dE1lbnVJdGVtIGRlZmF1bHRJdGVtKEFjdGlvblR5
cGUsIENvbnRleHRNZW51SXRlbVRhZ1RleHREaXJlY3Rpb25EZWZhdWx0LCBjb250ZXh0TWVudUl0
ZW1UYWdEZWZhdWx0RGlyZWN0aW9uKCkpOwotICAgIENvbnRleHRNZW51SXRlbSBsdHIoQ2hlY2th
YmxlQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnVGV4dERpcmVjdGlvbkxlZnRUb1JpZ2h0
LCBjb250ZXh0TWVudUl0ZW1UYWdMZWZ0VG9SaWdodCgpKTsKLSAgICBDb250ZXh0TWVudUl0ZW0g
cnRsKENoZWNrYWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1RleHREaXJlY3Rpb25S
aWdodFRvTGVmdCwgY29udGV4dE1lbnVJdGVtVGFnUmlnaHRUb0xlZnQoKSk7Ci0KLSAgICB0ZXh0
RGlyZWN0aW9uTWVudS5hcHBlbmRJdGVtKGRlZmF1bHRJdGVtKTsKLSAgICB0ZXh0RGlyZWN0aW9u
TWVudS5hcHBlbmRJdGVtKGx0cik7Ci0gICAgdGV4dERpcmVjdGlvbk1lbnUuYXBwZW5kSXRlbShy
dGwpOwotCi0gICAgdGV4dERpcmVjdGlvbk1lbnVJdGVtLnNldFN1Yk1lbnUoJnRleHREaXJlY3Rp
b25NZW51KTsKLX0KLQotI2VuZGlmCi0KLSNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJV
SUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQotCi1zdGF0
aWMgdm9pZCBjcmVhdGVBbmRBcHBlbmRTdWJzdGl0dXRpb25zU3ViTWVudShjb25zdCBIaXRUZXN0
UmVzdWx0JiByZXN1bHQsIENvbnRleHRNZW51SXRlbSYgc3Vic3RpdHV0aW9uc01lbnVJdGVtKQot
ewotICAgIENvbnRleHRNZW51IHN1YnN0aXR1dGlvbnNNZW51KHJlc3VsdCk7Ci0KLSAgICBDb250
ZXh0TWVudUl0ZW0gc2hvd1N1YnN0aXR1dGlvbnMoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVt
VGFnU2hvd1N1YnN0aXR1dGlvbnMsIGNvbnRleHRNZW51SXRlbVRhZ1Nob3dTdWJzdGl0dXRpb25z
KHRydWUpKTsKLSAgICBDb250ZXh0TWVudUl0ZW0gc21hcnRDb3B5UGFzdGUoQ2hlY2thYmxlQWN0
aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU21hcnRDb3B5UGFzdGUsIGNvbnRleHRNZW51SXRl
bVRhZ1NtYXJ0Q29weVBhc3RlKCkpOwotICAgIENvbnRleHRNZW51SXRlbSBzbWFydFF1b3RlcyhD
aGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTbWFydFF1b3RlcywgY29udGV4
dE1lbnVJdGVtVGFnU21hcnRRdW90ZXMoKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIHNtYXJ0RGFz
aGVzKENoZWNrYWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1NtYXJ0RGFzaGVzLCBj
b250ZXh0TWVudUl0ZW1UYWdTbWFydERhc2hlcygpKTsKLSAgICBDb250ZXh0TWVudUl0ZW0gc21h
cnRMaW5rcyhDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTbWFydExpbmtz
LCBjb250ZXh0TWVudUl0ZW1UYWdTbWFydExpbmtzKCkpOwotICAgIENvbnRleHRNZW51SXRlbSB0
ZXh0UmVwbGFjZW1lbnQoQ2hlY2thYmxlQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnVGV4
dFJlcGxhY2VtZW50LCBjb250ZXh0TWVudUl0ZW1UYWdUZXh0UmVwbGFjZW1lbnQoKSk7Ci0KLSAg
ICBzdWJzdGl0dXRpb25zTWVudS5hcHBlbmRJdGVtKHNob3dTdWJzdGl0dXRpb25zKTsKLSAgICBz
dWJzdGl0dXRpb25zTWVudS5hcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCkpOwotICAgIHN1YnN0
aXR1dGlvbnNNZW51LmFwcGVuZEl0ZW0oc21hcnRDb3B5UGFzdGUpOwotICAgIHN1YnN0aXR1dGlv
bnNNZW51LmFwcGVuZEl0ZW0oc21hcnRRdW90ZXMpOwotICAgIHN1YnN0aXR1dGlvbnNNZW51LmFw
cGVuZEl0ZW0oc21hcnREYXNoZXMpOwotICAgIHN1YnN0aXR1dGlvbnNNZW51LmFwcGVuZEl0ZW0o
c21hcnRMaW5rcyk7Ci0gICAgc3Vic3RpdHV0aW9uc01lbnUuYXBwZW5kSXRlbSh0ZXh0UmVwbGFj
ZW1lbnQpOwotCi0gICAgc3Vic3RpdHV0aW9uc01lbnVJdGVtLnNldFN1Yk1lbnUoJnN1YnN0aXR1
dGlvbnNNZW51KTsKLX0KLQotc3RhdGljIHZvaWQgY3JlYXRlQW5kQXBwZW5kVHJhbnNmb3JtYXRp
b25zU3ViTWVudShjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIENvbnRleHRNZW51SXRlbSYg
dHJhbnNmb3JtYXRpb25zTWVudUl0ZW0pCi17Ci0gICAgQ29udGV4dE1lbnUgdHJhbnNmb3JtYXRp
b25zTWVudShyZXN1bHQpOwotCi0gICAgQ29udGV4dE1lbnVJdGVtIG1ha2VVcHBlckNhc2UoQWN0
aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnTWFrZVVwcGVyQ2FzZSwgY29udGV4dE1lbnVJdGVt
VGFnTWFrZVVwcGVyQ2FzZSgpKTsKLSAgICBDb250ZXh0TWVudUl0ZW0gbWFrZUxvd2VyQ2FzZShB
Y3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdNYWtlTG93ZXJDYXNlLCBjb250ZXh0TWVudUl0
ZW1UYWdNYWtlTG93ZXJDYXNlKCkpOwotICAgIENvbnRleHRNZW51SXRlbSBjYXBpdGFsaXplKEFj
dGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0NhcGl0YWxpemUsIGNvbnRleHRNZW51SXRlbVRh
Z0NhcGl0YWxpemUoKSk7Ci0KLSAgICB0cmFuc2Zvcm1hdGlvbnNNZW51LmFwcGVuZEl0ZW0obWFr
ZVVwcGVyQ2FzZSk7Ci0gICAgdHJhbnNmb3JtYXRpb25zTWVudS5hcHBlbmRJdGVtKG1ha2VMb3dl
ckNhc2UpOwotICAgIHRyYW5zZm9ybWF0aW9uc01lbnUuYXBwZW5kSXRlbShjYXBpdGFsaXplKTsK
LQotICAgIHRyYW5zZm9ybWF0aW9uc01lbnVJdGVtLnNldFN1Yk1lbnUoJnRyYW5zZm9ybWF0aW9u
c01lbnUpOwotfQotCi0jZW5kaWYKLQotc3RhdGljIGJvb2wgc2VsZWN0aW9uQ29udGFpbnNQb3Nz
aWJsZVdvcmQoRnJhbWUqIGZyYW1lKQotewotICAgIC8vIEN1cnJlbnQgYWxnb3JpdGhtOiBsb29r
IGZvciBhIGNoYXJhY3RlciB0aGF0J3Mgbm90IGp1c3QgYSBzZXBhcmF0b3IuCi0gICAgZm9yIChU
ZXh0SXRlcmF0b3IgaXQoZnJhbWUtPnNlbGVjdGlvbigpLT50b05vcm1hbGl6ZWRSYW5nZSgpLmdl
dCgpKTsgIWl0LmF0RW5kKCk7IGl0LmFkdmFuY2UoKSkgewotICAgICAgICBpbnQgbGVuZ3RoID0g
aXQubGVuZ3RoKCk7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0gaXQuY2hhcmFj
dGVycygpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAg
ICAgICAgaWYgKCEoY2F0ZWdvcnkoY2hhcmFjdGVyc1tpXSkgJiAoU2VwYXJhdG9yX1NwYWNlIHwg
U2VwYXJhdG9yX0xpbmUgfCBTZXBhcmF0b3JfUGFyYWdyYXBoKSkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBDb250ZXh0
TWVudTo6cG9wdWxhdGUoKQotewotICAgIENvbnRleHRNZW51SXRlbSBPcGVuTGlua0l0ZW0oQWN0
aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnT3BlbkxpbmssIGNvbnRleHRNZW51SXRlbVRhZ09w
ZW5MaW5rKCkpOwotICAgIENvbnRleHRNZW51SXRlbSBPcGVuTGlua0luTmV3V2luZG93SXRlbShB
Y3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdPcGVuTGlua0luTmV3V2luZG93LCAKLSAgICAg
ICAgY29udGV4dE1lbnVJdGVtVGFnT3BlbkxpbmtJbk5ld1dpbmRvdygpKTsKLSAgICBDb250ZXh0
TWVudUl0ZW0gRG93bmxvYWRGaWxlSXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdE
b3dubG9hZExpbmtUb0Rpc2ssIAotICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdEb3dubG9hZExp
bmtUb0Rpc2soKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIENvcHlMaW5rSXRlbShBY3Rpb25UeXBl
LCBDb250ZXh0TWVudUl0ZW1UYWdDb3B5TGlua1RvQ2xpcGJvYXJkLCAKLSAgICAgICAgY29udGV4
dE1lbnVJdGVtVGFnQ29weUxpbmtUb0NsaXBib2FyZCgpKTsKLSAgICBDb250ZXh0TWVudUl0ZW0g
T3BlbkltYWdlSW5OZXdXaW5kb3dJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ09w
ZW5JbWFnZUluTmV3V2luZG93LCAKLSAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnT3BlbkltYWdl
SW5OZXdXaW5kb3coKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIERvd25sb2FkSW1hZ2VJdGVtKEFj
dGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0Rvd25sb2FkSW1hZ2VUb0Rpc2ssIAotICAgICAg
ICBjb250ZXh0TWVudUl0ZW1UYWdEb3dubG9hZEltYWdlVG9EaXNrKCkpOwotICAgIENvbnRleHRN
ZW51SXRlbSBDb3B5SW1hZ2VJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0NvcHlJ
bWFnZVRvQ2xpcGJvYXJkLCAKLSAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnQ29weUltYWdlVG9D
bGlwYm9hcmQoKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIE9wZW5NZWRpYUluTmV3V2luZG93SXRl
bShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdPcGVuTWVkaWFJbk5ld1dpbmRvdywgU3Ry
aW5nKCkpOwotICAgIENvbnRleHRNZW51SXRlbSBDb3B5TWVkaWFMaW5rSXRlbShBY3Rpb25UeXBl
LCBDb250ZXh0TWVudUl0ZW1UYWdDb3B5TWVkaWFMaW5rVG9DbGlwYm9hcmQsIAotICAgICAgICBT
dHJpbmcoKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIE1lZGlhUGxheVBhdXNlKEFjdGlvblR5cGUs
IENvbnRleHRNZW51SXRlbVRhZ01lZGlhUGxheVBhdXNlLCAKLSAgICAgICAgY29udGV4dE1lbnVJ
dGVtVGFnTWVkaWFQbGF5KCkpOwotICAgIENvbnRleHRNZW51SXRlbSBNZWRpYU11dGUoQWN0aW9u
VHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnTWVkaWFNdXRlLCAKLSAgICAgICAgY29udGV4dE1lbnVJ
dGVtVGFnTWVkaWFNdXRlKCkpOwotICAgIENvbnRleHRNZW51SXRlbSBUb2dnbGVNZWRpYUNvbnRy
b2xzKENoZWNrYWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1RvZ2dsZU1lZGlhQ29u
dHJvbHMsIAotICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdUb2dnbGVNZWRpYUNvbnRyb2xzKCkp
OwotICAgIENvbnRleHRNZW51SXRlbSBUb2dnbGVNZWRpYUxvb3AoQ2hlY2thYmxlQWN0aW9uVHlw
ZSwgQ29udGV4dE1lbnVJdGVtVGFnVG9nZ2xlTWVkaWFMb29wLCAKLSAgICAgICAgY29udGV4dE1l
bnVJdGVtVGFnVG9nZ2xlTWVkaWFMb29wKCkpOwotICAgIENvbnRleHRNZW51SXRlbSBFbnRlclZp
ZGVvRnVsbHNjcmVlbihBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdFbnRlclZpZGVvRnVs
bHNjcmVlbiwgCi0gICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ0VudGVyVmlkZW9GdWxsc2NyZWVu
KCkpOwotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBDb250ZXh0TWVudUl0ZW0gU2VhcmNoU3BvdGxp
Z2h0SXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTZWFyY2hJblNwb3RsaWdodCwg
Ci0gICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ1NlYXJjaEluU3BvdGxpZ2h0KCkpOwotICAgIENv
bnRleHRNZW51SXRlbSBMb29rSW5EaWN0aW9uYXJ5SXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVu
dUl0ZW1UYWdMb29rVXBJbkRpY3Rpb25hcnksIAotICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdM
b29rVXBJbkRpY3Rpb25hcnkoKSk7Ci0jZW5kaWYKLSNpZiAhUExBVEZPUk0oR1RLKQotICAgIENv
bnRleHRNZW51SXRlbSBTZWFyY2hXZWJJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRh
Z1NlYXJjaFdlYiwgY29udGV4dE1lbnVJdGVtVGFnU2VhcmNoV2ViKCkpOwotI2VuZGlmCi0gICAg
Q29udGV4dE1lbnVJdGVtIENvcHlJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0Nv
cHksIGNvbnRleHRNZW51SXRlbVRhZ0NvcHkoKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIEJhY2tJ
dGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0dvQmFjaywgY29udGV4dE1lbnVJdGVt
VGFnR29CYWNrKCkpOwotICAgIENvbnRleHRNZW51SXRlbSBGb3J3YXJkSXRlbShBY3Rpb25UeXBl
LCBDb250ZXh0TWVudUl0ZW1UYWdHb0ZvcndhcmQsICBjb250ZXh0TWVudUl0ZW1UYWdHb0Zvcndh
cmQoKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIFN0b3BJdGVtKEFjdGlvblR5cGUsIENvbnRleHRN
ZW51SXRlbVRhZ1N0b3AsIGNvbnRleHRNZW51SXRlbVRhZ1N0b3AoKSk7Ci0gICAgQ29udGV4dE1l
bnVJdGVtIFJlbG9hZEl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnUmVsb2FkLCBj
b250ZXh0TWVudUl0ZW1UYWdSZWxvYWQoKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIE9wZW5GcmFt
ZUl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnT3BlbkZyYW1lSW5OZXdXaW5kb3cs
IAotICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdPcGVuRnJhbWVJbk5ld1dpbmRvdygpKTsKLSAg
ICBDb250ZXh0TWVudUl0ZW0gTm9HdWVzc2VzSXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0
ZW1UYWdOb0d1ZXNzZXNGb3VuZCwgCi0gICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ05vR3Vlc3Nl
c0ZvdW5kKCkpOwotICAgIENvbnRleHRNZW51SXRlbSBJZ25vcmVTcGVsbGluZ0l0ZW0oQWN0aW9u
VHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnSWdub3JlU3BlbGxpbmcsIAotICAgICAgICBjb250ZXh0
TWVudUl0ZW1UYWdJZ25vcmVTcGVsbGluZygpKTsKLSAgICBDb250ZXh0TWVudUl0ZW0gTGVhcm5T
cGVsbGluZ0l0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnTGVhcm5TcGVsbGluZywg
Ci0gICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ0xlYXJuU3BlbGxpbmcoKSk7Ci0gICAgQ29udGV4
dE1lbnVJdGVtIElnbm9yZUdyYW1tYXJJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRh
Z0lnbm9yZUdyYW1tYXIsIAotICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdJZ25vcmVHcmFtbWFy
KCkpOwotICAgIENvbnRleHRNZW51SXRlbSBDdXRJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51
SXRlbVRhZ0N1dCwgY29udGV4dE1lbnVJdGVtVGFnQ3V0KCkpOwotICAgIENvbnRleHRNZW51SXRl
bSBQYXN0ZUl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnUGFzdGUsIGNvbnRleHRN
ZW51SXRlbVRhZ1Bhc3RlKCkpOwotI2lmIFBMQVRGT1JNKEdUSykKLSAgICBDb250ZXh0TWVudUl0
ZW0gRGVsZXRlSXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdEZWxldGUsIGNvbnRl
eHRNZW51SXRlbVRhZ0RlbGV0ZSgpKTsKLSAgICBDb250ZXh0TWVudUl0ZW0gU2VsZWN0QWxsSXRl
bShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTZWxlY3RBbGwsIGNvbnRleHRNZW51SXRl
bVRhZ1NlbGVjdEFsbCgpKTsKLSNlbmRpZgotICAgIAotICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0
ID0gaGl0VGVzdFJlc3VsdCgpOwotICAgIAotICAgIE5vZGUqIG5vZGUgPSBtX2hpdFRlc3RSZXN1
bHQuaW5uZXJOb25TaGFyZWROb2RlKCk7Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm47
Ci0jaWYgUExBVEZPUk0oR1RLKQotICAgIGlmICghcmVzdWx0LmlzQ29udGVudEVkaXRhYmxlKCkg
JiYgKG5vZGUtPmlzRWxlbWVudE5vZGUoKSAmJiBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSkt
PmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpKQotICAgICAgICByZXR1cm47Ci0jZW5kaWYKLSAgICBG
cmFtZSogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpOwotICAgIGlmICghZnJhbWUp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghcmVzdWx0LmlzQ29udGVudEVkaXRhYmxlKCkp
IHsKLSAgICAgICAgRnJhbWVMb2FkZXIqIGxvYWRlciA9IGZyYW1lLT5sb2FkZXIoKTsKLSAgICAg
ICAgS1VSTCBsaW5rVVJMID0gcmVzdWx0LmFic29sdXRlTGlua1VSTCgpOwotICAgICAgICBpZiAo
IWxpbmtVUkwuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBpZiAobG9hZGVyLT5jYW5IYW5kbGVS
ZXF1ZXN0KFJlc291cmNlUmVxdWVzdChsaW5rVVJMKSkpIHsKLSAgICAgICAgICAgICAgICBhcHBl
bmRJdGVtKE9wZW5MaW5rSXRlbSk7Ci0gICAgICAgICAgICAgICAgYXBwZW5kSXRlbShPcGVuTGlu
a0luTmV3V2luZG93SXRlbSk7Ci0gICAgICAgICAgICAgICAgYXBwZW5kSXRlbShEb3dubG9hZEZp
bGVJdGVtKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGFwcGVuZEl0ZW0oQ29weUxpbmtJ
dGVtKTsKLSAgICAgICAgfQotCi0gICAgICAgIEtVUkwgaW1hZ2VVUkwgPSByZXN1bHQuYWJzb2x1
dGVJbWFnZVVSTCgpOwotICAgICAgICBpZiAoIWltYWdlVVJMLmlzRW1wdHkoKSkgewotICAgICAg
ICAgICAgaWYgKCFsaW5rVVJMLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBhcHBlbmRJdGVt
KCpzZXBhcmF0b3JJdGVtKCkpOwotCi0gICAgICAgICAgICBhcHBlbmRJdGVtKE9wZW5JbWFnZUlu
TmV3V2luZG93SXRlbSk7Ci0gICAgICAgICAgICBhcHBlbmRJdGVtKERvd25sb2FkSW1hZ2VJdGVt
KTsKLSAgICAgICAgICAgIGlmIChpbWFnZVVSTC5pc0xvY2FsRmlsZSgpIHx8IG1faGl0VGVzdFJl
c3VsdC5pbWFnZSgpKQotICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oQ29weUltYWdlSXRlbSk7
Ci0gICAgICAgIH0KLQotICAgICAgICBLVVJMIG1lZGlhVVJMID0gcmVzdWx0LmFic29sdXRlTWVk
aWFVUkwoKTsKLSAgICAgICAgaWYgKCFtZWRpYVVSTC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAg
IGlmICghbGlua1VSTC5pc0VtcHR5KCkgfHwgIWltYWdlVVJMLmlzRW1wdHkoKSkKLSAgICAgICAg
ICAgICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCkpOwotCi0gICAgICAgICAgICBhcHBl
bmRJdGVtKE1lZGlhUGxheVBhdXNlKTsKLSAgICAgICAgICAgIGFwcGVuZEl0ZW0oTWVkaWFNdXRl
KTsKLSAgICAgICAgICAgIGFwcGVuZEl0ZW0oVG9nZ2xlTWVkaWFDb250cm9scyk7Ci0gICAgICAg
ICAgICBhcHBlbmRJdGVtKFRvZ2dsZU1lZGlhTG9vcCk7Ci0gICAgICAgICAgICBhcHBlbmRJdGVt
KEVudGVyVmlkZW9GdWxsc2NyZWVuKTsKLQotICAgICAgICAgICAgYXBwZW5kSXRlbSgqc2VwYXJh
dG9ySXRlbSgpKTsKLSAgICAgICAgICAgIGFwcGVuZEl0ZW0oQ29weU1lZGlhTGlua0l0ZW0pOwot
ICAgICAgICAgICAgYXBwZW5kSXRlbShPcGVuTWVkaWFJbk5ld1dpbmRvd0l0ZW0pOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKGltYWdlVVJMLmlzRW1wdHkoKSAmJiBsaW5rVVJMLmlzRW1wdHko
KSAmJiBtZWRpYVVSTC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGlmIChyZXN1bHQuaXNTZWxl
Y3RlZCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGlvbkNvbnRhaW5zUG9zc2libGVX
b3JkKGZyYW1lKSkgewotI2lmIFBMQVRGT1JNKE1BQykKLSAgICAgICAgICAgICAgICAgICAgYXBw
ZW5kSXRlbShTZWFyY2hTcG90bGlnaHRJdGVtKTsKLSNlbmRpZgotI2lmICFQTEFURk9STShHVEsp
Ci0gICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oU2VhcmNoV2ViSXRlbSk7Ci0gICAgICAg
ICAgICAgICAgICAgIGFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSk7Ci0jZW5kaWYKLSNpZiBQ
TEFURk9STShNQUMpCi0gICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oTG9va0luRGljdGlv
bmFyeUl0ZW0pOwotICAgICAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVt
KCkpOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGFwcGVuZEl0
ZW0oQ29weUl0ZW0pOwotI2lmIFBMQVRGT1JNKE1BQykKLSAgICAgICAgICAgICAgICBhcHBlbmRJ
dGVtKCpzZXBhcmF0b3JJdGVtKCkpOwotICAgICAgICAgICAgICAgIENvbnRleHRNZW51SXRlbSBT
cGVlY2hNZW51SXRlbShTdWJtZW51VHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU3BlZWNoTWVudSwg
Y29udGV4dE1lbnVJdGVtVGFnU3BlZWNoTWVudSgpKTsKLSAgICAgICAgICAgICAgICBjcmVhdGVB
bmRBcHBlbmRTcGVlY2hTdWJNZW51KG1faGl0VGVzdFJlc3VsdCwgU3BlZWNoTWVudUl0ZW0pOwot
ICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oU3BlZWNoTWVudUl0ZW0pOwotI2VuZGlmICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgfSBlbHNlIHsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SKQot
ICAgICAgICAgICAgICAgIGlmICghKGZyYW1lLT5wYWdlKCkgJiYgZnJhbWUtPnBhZ2UoKS0+aW5z
cGVjdG9yQ29udHJvbGxlcigpLT5oYXNJbnNwZWN0b3JGcm9udGVuZENsaWVudCgpKSkgewotI2Vu
ZGlmCi0gICAgICAgICAgICAgICAgaWYgKGZyYW1lLT5wYWdlKCkgJiYgZnJhbWUtPnBhZ2UoKS0+
YmFja0ZvcndhcmQoKS0+Y2FuR29CYWNrT3JGb3J3YXJkKC0xKSkKLSAgICAgICAgICAgICAgICAg
ICAgYXBwZW5kSXRlbShCYWNrSXRlbSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoZnJhbWUtPnBh
Z2UoKSAmJiBmcmFtZS0+cGFnZSgpLT5iYWNrRm9yd2FyZCgpLT5jYW5Hb0JhY2tPckZvcndhcmQo
MSkpCi0gICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oRm9yd2FyZEl0ZW0pOwotCi0gICAg
ICAgICAgICAgICAgLy8gdXNlIGlzTG9hZGluZ0luQVBJU2Vuc2UgcmF0aGVyIHRoYW4gaXNMb2Fk
aW5nIGJlY2F1c2UgU3RvcC9SZWxvYWQgYXJlCi0gICAgICAgICAgICAgICAgLy8gaW50ZW5kZWQg
dG8gbWF0Y2ggV2ViS2l0J3MgQVBJLCBub3QgV2ViQ29yZSdzIGludGVybmFsIG5vdGlvbiBvZiBs
b2FkaW5nIHN0YXR1cwotICAgICAgICAgICAgICAgIGlmIChsb2FkZXItPmRvY3VtZW50TG9hZGVy
KCktPmlzTG9hZGluZ0luQVBJU2Vuc2UoKSkKLSAgICAgICAgICAgICAgICAgICAgYXBwZW5kSXRl
bShTdG9wSXRlbSk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBh
cHBlbmRJdGVtKFJlbG9hZEl0ZW0pOwotI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgICAgICAg
ICAgICAgfQotI2VuZGlmCi0KLSAgICAgICAgICAgICAgICBpZiAoZnJhbWUtPnBhZ2UoKSAmJiBm
cmFtZSAhPSBmcmFtZS0+cGFnZSgpLT5tYWluRnJhbWUoKSkKLSAgICAgICAgICAgICAgICAgICAg
YXBwZW5kSXRlbShPcGVuRnJhbWVJdGVtKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0gZWxzZSB7IC8vIE1ha2UgYW4gZWRpdGluZyBjb250ZXh0IG1lbnUKLSAgICAgICAgU2VsZWN0
aW9uQ29udHJvbGxlciogc2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigpOwotICAgICAgICBi
b29sIGluUGFzc3dvcmRGaWVsZCA9IHNlbGVjdGlvbi0+aXNJblBhc3N3b3JkRmllbGQoKTsKLSAg
ICAgICAgYm9vbCBzcGVsbENoZWNraW5nRW5hYmxlZCA9IGZyYW1lLT5lZGl0b3IoKS0+aXNTcGVs
bENoZWNraW5nRW5hYmxlZEZvcihub2RlKTsKLSAgICAgICAgCi0gICAgICAgIGlmICghaW5QYXNz
d29yZEZpZWxkICYmIHNwZWxsQ2hlY2tpbmdFbmFibGVkKSB7Ci0gICAgICAgICAgICAvLyBDb25z
aWRlciBhZGRpbmcgc3BlbGxpbmctcmVsYXRlZCBvciBncmFtbWFyLXJlbGF0ZWQgY29udGV4dCBt
ZW51IGl0ZW1zIChuZXZlciBib3RoLCBzaW5jZSBhIHNpbmdsZSBzZWxlY3RlZCByYW5nZQotICAg
ICAgICAgICAgLy8gaXMgbmV2ZXIgY29uc2lkZXJlZCBhIG1pc3NwZWxsaW5nIGFuZCBiYWQgZ3Jh
bW1hciBhdCB0aGUgc2FtZSB0aW1lKQotICAgICAgICAgICAgYm9vbCBtaXNzcGVsbGluZzsKLSAg
ICAgICAgICAgIGJvb2wgYmFkR3JhbW1hcjsKLSAgICAgICAgICAgIFZlY3RvcjxTdHJpbmc+IGd1
ZXNzZXMgPSBmcmFtZS0+ZWRpdG9yKCktPmd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRp
Y2FsU2VsZWN0aW9uKG1pc3NwZWxsaW5nLCBiYWRHcmFtbWFyKTsKLSAgICAgICAgICAgIGlmICht
aXNzcGVsbGluZyB8fCBiYWRHcmFtbWFyKSB7Ci0gICAgICAgICAgICAgICAgc2l6ZV90IHNpemUg
PSBndWVzc2VzLnNpemUoKTsKLSAgICAgICAgICAgICAgICBpZiAoc2l6ZSA9PSAwKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlJ3MgYmFkIGdyYW1tYXIgYnV0IG5vIHN1Z2dlc3Rp
b25zIChlLmcuLCByZXBlYXRlZCB3b3JkKSwganVzdCBsZWF2ZSBvZmYgdGhlIHN1Z2dlc3Rpb25z
Ci0gICAgICAgICAgICAgICAgICAgIC8vIGxpc3QgYW5kIHRyYWlsaW5nIHNlcGFyYXRvciByYXRo
ZXIgdGhhbiBhZGRpbmcgYSAiTm8gR3Vlc3NlcyBGb3VuZCIgaXRlbSAobWF0Y2hlcyBBcHBLaXQp
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtaXNzcGVsbGluZykgewotICAgICAgICAgICAgICAg
ICAgICAgICAgYXBwZW5kSXRlbShOb0d1ZXNzZXNJdGVtKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBTdHJpbmcgJmd1ZXNzID0gZ3Vlc3Nlc1tpXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICghZ3Vlc3MuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGV4
dE1lbnVJdGVtIGl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU3BlbGxpbmdHdWVz
cywgZ3Vlc3MpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oaXRlbSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgYXBwZW5kSXRlbSgqc2VwYXJhdG9ySXRlbSgpKTsgICAgICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBpZiAobWlzc3BlbGxpbmcpIHsKLSAgICAgICAgICAgICAgICAgICAgYXBwZW5kSXRlbShJ
Z25vcmVTcGVsbGluZ0l0ZW0pOwotICAgICAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKExlYXJu
U3BlbGxpbmdJdGVtKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgYXBwZW5kSXRlbShJZ25vcmVHcmFtbWFySXRlbSk7Ci0gICAgICAgICAgICAgICAgYXBwZW5k
SXRlbSgqc2VwYXJhdG9ySXRlbSgpKTsKLSNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJV
SUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQotICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBJZiB0aGUgc3RyaW5nIHdhcyBhdXRv
Y29ycmVjdGVkLCBnZW5lcmF0ZSBhIGNvbnRleHR1YWwgbWVudSBpdGVtIGFsbG93aW5nIGl0IHRv
IGJlIGNoYW5nZWQgYmFjay4KLSAgICAgICAgICAgICAgICBTdHJpbmcgcmVwbGFjZWRTdHJpbmcg
PSByZXN1bHQucmVwbGFjZWRTdHJpbmcoKTsKLSAgICAgICAgICAgICAgICBpZiAoIXJlcGxhY2Vk
U3RyaW5nLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgICAgICBDb250ZXh0TWVudUl0ZW0g
aXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdDaGFuZ2VCYWNrLCBjb250ZXh0TWVu
dUl0ZW1UYWdDaGFuZ2VCYWNrKHJlcGxhY2VkU3RyaW5nKSk7Ci0gICAgICAgICAgICAgICAgICAg
IGFwcGVuZEl0ZW0oaXRlbSk7Ci0gICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oKnNlcGFy
YXRvckl0ZW0oKSk7Ci0gICAgICAgICAgICAgICAgfQotI2VuZGlmCi0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLQotICAgICAgICBGcmFtZUxvYWRlciogbG9hZGVyID0gZnJhbWUtPmxvYWRlcigp
OwotICAgICAgICBLVVJMIGxpbmtVUkwgPSByZXN1bHQuYWJzb2x1dGVMaW5rVVJMKCk7Ci0gICAg
ICAgIGlmICghbGlua1VSTC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGlmIChsb2FkZXItPmNh
bkhhbmRsZVJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0KGxpbmtVUkwpKSkgewotICAgICAgICAgICAg
ICAgIGFwcGVuZEl0ZW0oT3BlbkxpbmtJdGVtKTsKLSAgICAgICAgICAgICAgICBhcHBlbmRJdGVt
KE9wZW5MaW5rSW5OZXdXaW5kb3dJdGVtKTsKLSAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKERv
d25sb2FkRmlsZUl0ZW0pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYXBwZW5kSXRlbShD
b3B5TGlua0l0ZW0pOwotICAgICAgICAgICAgYXBwZW5kSXRlbSgqc2VwYXJhdG9ySXRlbSgpKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmIChyZXN1bHQuaXNTZWxlY3RlZCgpICYmICFpblBhc3N3
b3JkRmllbGQgJiYgc2VsZWN0aW9uQ29udGFpbnNQb3NzaWJsZVdvcmQoZnJhbWUpKSB7Ci0jaWYg
UExBVEZPUk0oTUFDKQotICAgICAgICAgICAgYXBwZW5kSXRlbShTZWFyY2hTcG90bGlnaHRJdGVt
KTsKLSNlbmRpZgotI2lmICFQTEFURk9STShHVEspCi0gICAgICAgICAgICBhcHBlbmRJdGVtKFNl
YXJjaFdlYkl0ZW0pOwotICAgICAgICAgICAgYXBwZW5kSXRlbSgqc2VwYXJhdG9ySXRlbSgpKTsK
LSNlbmRpZgotICAgICAKLSNpZiBQTEFURk9STShNQUMpCi0gICAgICAgICAgICBhcHBlbmRJdGVt
KExvb2tJbkRpY3Rpb25hcnlJdGVtKTsKLSAgICAgICAgICAgIGFwcGVuZEl0ZW0oKnNlcGFyYXRv
ckl0ZW0oKSk7Ci0jZW5kaWYKLSAgICAgICAgfQotCi0gICAgICAgIGFwcGVuZEl0ZW0oQ3V0SXRl
bSk7Ci0gICAgICAgIGFwcGVuZEl0ZW0oQ29weUl0ZW0pOwotICAgICAgICBhcHBlbmRJdGVtKFBh
c3RlSXRlbSk7Ci0jaWYgUExBVEZPUk0oR1RLKQotICAgICAgICBhcHBlbmRJdGVtKERlbGV0ZUl0
ZW0pOwotICAgICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCkpOwotICAgICAgICBhcHBl
bmRJdGVtKFNlbGVjdEFsbEl0ZW0pOwotI2VuZGlmCi0KLSAgICAgICAgaWYgKCFpblBhc3N3b3Jk
RmllbGQpIHsKLSAgICAgICAgICAgIGFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSk7Ci0jaWZu
ZGVmIEJVSUxESU5HX09OX1RJR0VSCi0jaWYgIVBMQVRGT1JNKEdUSykKLSAgICAgICAgICAgIENv
bnRleHRNZW51SXRlbSBTcGVsbGluZ0FuZEdyYW1tYXJNZW51SXRlbShTdWJtZW51VHlwZSwgQ29u
dGV4dE1lbnVJdGVtVGFnU3BlbGxpbmdNZW51LCAKLSAgICAgICAgICAgICAgICBjb250ZXh0TWVu
dUl0ZW1UYWdTcGVsbGluZ01lbnUoKSk7Ci0gICAgICAgICAgICBjcmVhdGVBbmRBcHBlbmRTcGVs
bGluZ0FuZEdyYW1tYXJTdWJNZW51KG1faGl0VGVzdFJlc3VsdCwgU3BlbGxpbmdBbmRHcmFtbWFy
TWVudUl0ZW0pOwotICAgICAgICAgICAgYXBwZW5kSXRlbShTcGVsbGluZ0FuZEdyYW1tYXJNZW51
SXRlbSk7Ci0jZW5kaWYKLSNlbHNlCi0gICAgICAgICAgICBDb250ZXh0TWVudUl0ZW0gU3BlbGxp
bmdNZW51SXRlbShTdWJtZW51VHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU3BlbGxpbmdNZW51LCAK
LSAgICAgICAgICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdTcGVsbGluZ01lbnUoKSk7Ci0gICAg
ICAgICAgICBjcmVhdGVBbmRBcHBlbmRTcGVsbGluZ1N1Yk1lbnUobV9oaXRUZXN0UmVzdWx0LCBT
cGVsbGluZ01lbnVJdGVtKTsKLSAgICAgICAgICAgIGFwcGVuZEl0ZW0oU3BlbGxpbmdNZW51SXRl
bSk7Ci0jZW5kaWYKLSNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJ
R0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQotICAgICAgICAgICAgQ29udGV4
dE1lbnVJdGVtIHN1YnN0aXR1dGlvbnNNZW51SXRlbShTdWJtZW51VHlwZSwgQ29udGV4dE1lbnVJ
dGVtVGFnU3Vic3RpdHV0aW9uc01lbnUsIAotICAgICAgICAgICAgICAgIGNvbnRleHRNZW51SXRl
bVRhZ1N1YnN0aXR1dGlvbnNNZW51KCkpOwotICAgICAgICAgICAgY3JlYXRlQW5kQXBwZW5kU3Vi
c3RpdHV0aW9uc1N1Yk1lbnUobV9oaXRUZXN0UmVzdWx0LCBzdWJzdGl0dXRpb25zTWVudUl0ZW0p
OwotICAgICAgICAgICAgYXBwZW5kSXRlbShzdWJzdGl0dXRpb25zTWVudUl0ZW0pOwotICAgICAg
ICAgICAgQ29udGV4dE1lbnVJdGVtIHRyYW5zZm9ybWF0aW9uc01lbnVJdGVtKFN1Ym1lbnVUeXBl
LCBDb250ZXh0TWVudUl0ZW1UYWdUcmFuc2Zvcm1hdGlvbnNNZW51LCAKLSAgICAgICAgICAgICAg
ICBjb250ZXh0TWVudUl0ZW1UYWdUcmFuc2Zvcm1hdGlvbnNNZW51KCkpOwotICAgICAgICAgICAg
Y3JlYXRlQW5kQXBwZW5kVHJhbnNmb3JtYXRpb25zU3ViTWVudShtX2hpdFRlc3RSZXN1bHQsIHRy
YW5zZm9ybWF0aW9uc01lbnVJdGVtKTsKLSAgICAgICAgICAgIGFwcGVuZEl0ZW0odHJhbnNmb3Jt
YXRpb25zTWVudUl0ZW0pOwotI2VuZGlmCi0jaWYgUExBVEZPUk0oR1RLKQotICAgICAgICAgICAg
Ym9vbCBzaG91bGRTaG93Rm9udE1lbnUgPSBmcmFtZS0+ZWRpdG9yKCktPmNhbkVkaXRSaWNobHko
KTsKLSNlbHNlCi0gICAgICAgICAgICBib29sIHNob3VsZFNob3dGb250TWVudSA9IHRydWU7Ci0j
ZW5kaWYKLSAgICAgICAgICAgIGlmIChzaG91bGRTaG93Rm9udE1lbnUpIHsKLSAgICAgICAgICAg
ICAgICBDb250ZXh0TWVudUl0ZW0gRm9udE1lbnVJdGVtKFN1Ym1lbnVUeXBlLCBDb250ZXh0TWVu
dUl0ZW1UYWdGb250TWVudSwgCi0gICAgICAgICAgICAgICAgICAgIGNvbnRleHRNZW51SXRlbVRh
Z0ZvbnRNZW51KCkpOwotICAgICAgICAgICAgICAgIGNyZWF0ZUFuZEFwcGVuZEZvbnRTdWJNZW51
KG1faGl0VGVzdFJlc3VsdCwgRm9udE1lbnVJdGVtKTsKLSAgICAgICAgICAgICAgICBhcHBlbmRJ
dGVtKEZvbnRNZW51SXRlbSk7Ci0gICAgICAgICAgICB9Ci0jaWYgUExBVEZPUk0oTUFDKQotICAg
ICAgICAgICAgQ29udGV4dE1lbnVJdGVtIFNwZWVjaE1lbnVJdGVtKFN1Ym1lbnVUeXBlLCBDb250
ZXh0TWVudUl0ZW1UYWdTcGVlY2hNZW51LCBjb250ZXh0TWVudUl0ZW1UYWdTcGVlY2hNZW51KCkp
OwotICAgICAgICAgICAgY3JlYXRlQW5kQXBwZW5kU3BlZWNoU3ViTWVudShtX2hpdFRlc3RSZXN1
bHQsIFNwZWVjaE1lbnVJdGVtKTsKLSAgICAgICAgICAgIGFwcGVuZEl0ZW0oU3BlZWNoTWVudUl0
ZW0pOwotI2VuZGlmCi0jaWYgIVBMQVRGT1JNKEdUSykKLSAgICAgICAgICAgIENvbnRleHRNZW51
SXRlbSBXcml0aW5nRGlyZWN0aW9uTWVudUl0ZW0oU3VibWVudVR5cGUsIENvbnRleHRNZW51SXRl
bVRhZ1dyaXRpbmdEaXJlY3Rpb25NZW51LCAKLSAgICAgICAgICAgICAgICBjb250ZXh0TWVudUl0
ZW1UYWdXcml0aW5nRGlyZWN0aW9uTWVudSgpKTsKLSAgICAgICAgICAgIGNyZWF0ZUFuZEFwcGVu
ZFdyaXRpbmdEaXJlY3Rpb25TdWJNZW51KG1faGl0VGVzdFJlc3VsdCwgV3JpdGluZ0RpcmVjdGlv
bk1lbnVJdGVtKTsKLSAgICAgICAgICAgIGFwcGVuZEl0ZW0oV3JpdGluZ0RpcmVjdGlvbk1lbnVJ
dGVtKTsKLSAgICAgICAgICAgIGlmIChQYWdlKiBwYWdlID0gZnJhbWUtPnBhZ2UoKSkgewotICAg
ICAgICAgICAgICAgIGlmIChTZXR0aW5ncyogc2V0dGluZ3MgPSBwYWdlLT5zZXR0aW5ncygpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGJvb2wgaW5jbHVkZVRleHREaXJlY3Rpb25TdWJtZW51ID0g
c2V0dGluZ3MtPnRleHREaXJlY3Rpb25TdWJtZW51SW5jbHVzaW9uQmVoYXZpb3IoKSA9PSBUZXh0
RGlyZWN0aW9uU3VibWVudUFsd2F5c0luY2x1ZGVkCi0gICAgICAgICAgICAgICAgICAgICAgICB8
fCAoc2V0dGluZ3MtPnRleHREaXJlY3Rpb25TdWJtZW51SW5jbHVzaW9uQmVoYXZpb3IoKSA9PSBU
ZXh0RGlyZWN0aW9uU3VibWVudUF1dG9tYXRpY2FsbHlJbmNsdWRlZCAmJiBmcmFtZS0+ZWRpdG9y
KCktPmhhc0JpZGlTZWxlY3Rpb24oKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpbmNsdWRl
VGV4dERpcmVjdGlvblN1Ym1lbnUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIENvbnRleHRN
ZW51SXRlbSBUZXh0RGlyZWN0aW9uTWVudUl0ZW0oU3VibWVudVR5cGUsIENvbnRleHRNZW51SXRl
bVRhZ1RleHREaXJlY3Rpb25NZW51LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250
ZXh0TWVudUl0ZW1UYWdUZXh0RGlyZWN0aW9uTWVudSgpKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGNyZWF0ZUFuZEFwcGVuZFRleHREaXJlY3Rpb25TdWJNZW51KG1faGl0VGVzdFJlc3VsdCwg
VGV4dERpcmVjdGlvbk1lbnVJdGVtKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0
ZW0oVGV4dERpcmVjdGlvbk1lbnVJdGVtKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSNlbmRpZgotICAgICAgICB9Ci0gICAgfQotfQot
Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUikKLXZvaWQgQ29udGV4dE1lbnU6OmFkZEluc3BlY3RFbGVt
ZW50SXRlbSgpCi17Ci0gICAgTm9kZSogbm9kZSA9IG1faGl0VGVzdFJlc3VsdC5pbm5lck5vblNo
YXJlZE5vZGUoKTsKLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIEZyYW1l
KiBmcmFtZSA9IG5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgUGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCk7Ci0gICAgaWYg
KCFwYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXBhZ2UtPmluc3BlY3RvckNvbnRy
b2xsZXIoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ29udGV4dE1lbnVJdGVtIEluc3BlY3RF
bGVtZW50SXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdJbnNwZWN0RWxlbWVudCwg
Y29udGV4dE1lbnVJdGVtVGFnSW5zcGVjdEVsZW1lbnQoKSk7Ci0gICAgYXBwZW5kSXRlbSgqc2Vw
YXJhdG9ySXRlbSgpKTsKLSAgICBhcHBlbmRJdGVtKEluc3BlY3RFbGVtZW50SXRlbSk7Ci19Ci0j
ZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKLQotdm9pZCBDb250ZXh0TWVudTo6Y2hlY2tPckVu
YWJsZUlmTmVlZGVkKENvbnRleHRNZW51SXRlbSYgaXRlbSkgY29uc3QKLXsKLSAgICBpZiAoaXRl
bS50eXBlKCkgPT0gU2VwYXJhdG9yVHlwZSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIEZy
YW1lKiBmcmFtZSA9IG1faGl0VGVzdFJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKS0+ZG9jdW1l
bnQoKS0+ZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm47Ci0KLSAgICAv
LyBDdXN0b20gaXRlbXMgYWxyZWFkeSBoYXZlIHByb3BlciBjaGVja2VkIGFuZCBlbmFibGVkIHZh
bHVlcy4KLSAgICBpZiAoQ29udGV4dE1lbnVJdGVtQmFzZUN1c3RvbVRhZyA8PSBpdGVtLmFjdGlv
bigpICYmIGl0ZW0uYWN0aW9uKCkgPD0gQ29udGV4dE1lbnVJdGVtTGFzdEN1c3RvbVRhZykKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgYm9vbCBzaG91bGRFbmFibGUgPSB0cnVlOwotICAgIGJvb2wg
c2hvdWxkQ2hlY2sgPSBmYWxzZTsgCi0KLSAgICBzd2l0Y2ggKGl0ZW0uYWN0aW9uKCkpIHsKLSAg
ICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdDaGVja1NwZWxsaW5nOgotICAgICAgICAgICAg
c2hvdWxkRW5hYmxlID0gZnJhbWUtPmVkaXRvcigpLT5jYW5FZGl0KCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdEZWZhdWx0RGlyZWN0aW9uOgot
ICAgICAgICAgICAgc2hvdWxkQ2hlY2sgPSBmYWxzZTsKLSAgICAgICAgICAgIHNob3VsZEVuYWJs
ZSA9IGZhbHNlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJ
dGVtVGFnTGVmdFRvUmlnaHQ6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnUmlnaHRU
b0xlZnQ6IHsKLSAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgICAgICAgICAg
UmVmUHRyPENTU1N0eWxlRGVjbGFyYXRpb24+IHN0eWxlID0gZnJhbWUtPmRvY3VtZW50KCktPmNy
ZWF0ZUNTU1N0eWxlRGVjbGFyYXRpb24oKTsKLSAgICAgICAgICAgIFN0cmluZyBkaXJlY3Rpb24g
PSBpdGVtLmFjdGlvbigpID09IENvbnRleHRNZW51SXRlbVRhZ0xlZnRUb1JpZ2h0ID8gImx0ciIg
OiAicnRsIjsKLSAgICAgICAgICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eURpcmVj
dGlvbiwgZGlyZWN0aW9uLCBmYWxzZSwgZWMpOwotICAgICAgICAgICAgc2hvdWxkQ2hlY2sgPSBm
cmFtZS0+ZWRpdG9yKCktPnNlbGVjdGlvbkhhc1N0eWxlKHN0eWxlLmdldCgpKSAhPSBGYWxzZVRy
aVN0YXRlOwotICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gdHJ1ZTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnVGV4dERpcmVj
dGlvbkRlZmF1bHQ6IHsKLSAgICAgICAgICAgIEVkaXRvcjo6Q29tbWFuZCBjb21tYW5kID0gZnJh
bWUtPmVkaXRvcigpLT5jb21tYW5kKCJNYWtlVGV4dFdyaXRpbmdEaXJlY3Rpb25OYXR1cmFsIik7
Ci0gICAgICAgICAgICBzaG91bGRDaGVjayA9IGNvbW1hbmQuc3RhdGUoKSA9PSBUcnVlVHJpU3Rh
dGU7Ci0gICAgICAgICAgICBzaG91bGRFbmFibGUgPSBjb21tYW5kLmlzRW5hYmxlZCgpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1U
YWdUZXh0RGlyZWN0aW9uTGVmdFRvUmlnaHQ6IHsKLSAgICAgICAgICAgIEVkaXRvcjo6Q29tbWFu
ZCBjb21tYW5kID0gZnJhbWUtPmVkaXRvcigpLT5jb21tYW5kKCJNYWtlVGV4dFdyaXRpbmdEaXJl
Y3Rpb25MZWZ0VG9SaWdodCIpOwotICAgICAgICAgICAgc2hvdWxkQ2hlY2sgPSBjb21tYW5kLnN0
YXRlKCkgPT0gVHJ1ZVRyaVN0YXRlOwotICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gY29tbWFu
ZC5pc0VuYWJsZWQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNh
c2UgQ29udGV4dE1lbnVJdGVtVGFnVGV4dERpcmVjdGlvblJpZ2h0VG9MZWZ0OiB7Ci0gICAgICAg
ICAgICBFZGl0b3I6OkNvbW1hbmQgY29tbWFuZCA9IGZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZCgi
TWFrZVRleHRXcml0aW5nRGlyZWN0aW9uUmlnaHRUb0xlZnQiKTsKLSAgICAgICAgICAgIHNob3Vs
ZENoZWNrID0gY29tbWFuZC5zdGF0ZSgpID09IFRydWVUcmlTdGF0ZTsKLSAgICAgICAgICAgIHNo
b3VsZEVuYWJsZSA9IGNvbW1hbmQuaXNFbmFibGVkKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0NvcHk6Ci0gICAgICAgICAg
ICBzaG91bGRFbmFibGUgPSBmcmFtZS0+ZWRpdG9yKCktPmNhbkRIVE1MQ29weSgpIHx8IGZyYW1l
LT5lZGl0b3IoKS0+Y2FuQ29weSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtVGFnQ3V0OgotICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gZnJhbWUt
PmVkaXRvcigpLT5jYW5ESFRNTEN1dCgpIHx8IGZyYW1lLT5lZGl0b3IoKS0+Y2FuQ3V0KCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdJZ25vcmVT
cGVsbGluZzoKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdMZWFyblNwZWxsaW5nOgot
ICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gZnJhbWUtPnNlbGVjdGlvbigpLT5pc1JhbmdlKCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdQYXN0
ZToKLSAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGZyYW1lLT5lZGl0b3IoKS0+Y2FuREhUTUxQ
YXN0ZSgpIHx8IGZyYW1lLT5lZGl0b3IoKS0+Y2FuUGFzdGUoKTsKLSAgICAgICAgICAgIGJyZWFr
OwotI2lmIFBMQVRGT1JNKEdUSykKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdEZWxl
dGU6Ci0gICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+ZWRpdG9yKCktPmNhbkRlbGV0
ZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFn
U2VsZWN0QWxsOgotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0lucHV0TWV0aG9kczoK
LSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdVbmljb2RlOgotICAgICAgICAgICAgc2hv
dWxkRW5hYmxlID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmCi0gICAgICAgIGNh
c2UgQ29udGV4dE1lbnVJdGVtVGFnVW5kZXJsaW5lOiB7Ci0gICAgICAgICAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKLSAgICAgICAgICAgIFJlZlB0cjxDU1NTdHlsZURlY2xhcmF0aW9uPiBzdHls
ZSA9IGZyYW1lLT5kb2N1bWVudCgpLT5jcmVhdGVDU1NTdHlsZURlY2xhcmF0aW9uKCk7Ci0gICAg
ICAgICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlv
bnNJbkVmZmVjdCwgInVuZGVybGluZSIsIGZhbHNlLCBlYyk7Ci0gICAgICAgICAgICBzaG91bGRD
aGVjayA9IGZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0aW9uSGFzU3R5bGUoc3R5bGUuZ2V0KCkpICE9
IEZhbHNlVHJpU3RhdGU7Ci0gICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+ZWRpdG9y
KCktPmNhbkVkaXRSaWNobHkoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnTG9va1VwSW5EaWN0aW9uYXJ5OgotICAgICAgICAg
ICAgc2hvdWxkRW5hYmxlID0gZnJhbWUtPnNlbGVjdGlvbigpLT5pc1JhbmdlKCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdDaGVja0dyYW1tYXJX
aXRoU3BlbGxpbmc6Ci0jaWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCi0gICAgICAgICAgICBpZiAo
ZnJhbWUtPmVkaXRvcigpLT5pc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSkKLSAgICAgICAgICAg
ICAgICBzaG91bGRDaGVjayA9IHRydWU7Ci0gICAgICAgICAgICBzaG91bGRFbmFibGUgPSB0cnVl
OwotI2VuZGlmCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0
ZW1UYWdJdGFsaWM6IHsKLSAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgICAg
ICAgICAgUmVmUHRyPENTU1N0eWxlRGVjbGFyYXRpb24+IHN0eWxlID0gZnJhbWUtPmRvY3VtZW50
KCktPmNyZWF0ZUNTU1N0eWxlRGVjbGFyYXRpb24oKTsKLSAgICAgICAgICAgIHN0eWxlLT5zZXRQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRTdHlsZSwgIml0YWxpYyIsIGZhbHNlLCBlYyk7Ci0gICAg
ICAgICAgICBzaG91bGRDaGVjayA9IGZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0aW9uSGFzU3R5bGUo
c3R5bGUuZ2V0KCkpICE9IEZhbHNlVHJpU3RhdGU7Ci0gICAgICAgICAgICBzaG91bGRFbmFibGUg
PSBmcmFtZS0+ZWRpdG9yKCktPmNhbkVkaXRSaWNobHkoKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQm9sZDogewotICAgICAg
ICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgICAgICAgICBSZWZQdHI8Q1NTU3R5bGVE
ZWNsYXJhdGlvbj4gc3R5bGUgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+Y3JlYXRlQ1NTU3R5bGVEZWNs
YXJhdGlvbigpOwotICAgICAgICAgICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5Rm9u
dFdlaWdodCwgImJvbGQiLCBmYWxzZSwgZWMpOwotICAgICAgICAgICAgc2hvdWxkQ2hlY2sgPSBm
cmFtZS0+ZWRpdG9yKCktPnNlbGVjdGlvbkhhc1N0eWxlKHN0eWxlLmdldCgpKSAhPSBGYWxzZVRy
aVN0YXRlOwotICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gZnJhbWUtPmVkaXRvcigpLT5jYW5F
ZGl0UmljaGx5KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNl
IENvbnRleHRNZW51SXRlbVRhZ091dGxpbmU6Ci0gICAgICAgICAgICBzaG91bGRFbmFibGUgPSBm
YWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRh
Z1Nob3dTcGVsbGluZ1BhbmVsOgotI2lmbmRlZiBCVUlMRElOR19PTl9USUdFUgotICAgICAgICAg
ICAgaWYgKGZyYW1lLT5lZGl0b3IoKS0+c3BlbGxpbmdQYW5lbElzU2hvd2luZygpKQotICAgICAg
ICAgICAgICAgIGl0ZW0uc2V0VGl0bGUoY29udGV4dE1lbnVJdGVtVGFnU2hvd1NwZWxsaW5nUGFu
ZWwoZmFsc2UpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBpdGVtLnNldFRp
dGxlKGNvbnRleHRNZW51SXRlbVRhZ1Nob3dTcGVsbGluZ1BhbmVsKHRydWUpKTsKLSNlbmRpZgot
ICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gZnJhbWUtPmVkaXRvcigpLT5jYW5FZGl0KCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdOb0d1ZXNz
ZXNGb3VuZDoKLSAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGZhbHNlOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQ2hlY2tTcGVsbGluZ1doaWxl
VHlwaW5nOgotICAgICAgICAgICAgc2hvdWxkQ2hlY2sgPSBmcmFtZS0+ZWRpdG9yKCktPmlzQ29u
dGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCk7Ci0gICAgICAgICAgICBicmVhazsKLSNpZiBQ
TEFURk9STShNQUMpCi0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU3Vic3RpdHV0aW9u
c01lbnU6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnVHJhbnNmb3JtYXRpb25zTWVu
dToKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1No
b3dTdWJzdGl0dXRpb25zOgotI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVm
aW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQotICAgICAgICAgICAgaWYgKGZyYW1lLT5lZGl0b3Io
KS0+c3Vic3RpdHV0aW9uc1BhbmVsSXNTaG93aW5nKCkpCi0gICAgICAgICAgICAgICAgaXRlbS5z
ZXRUaXRsZShjb250ZXh0TWVudUl0ZW1UYWdTaG93U3Vic3RpdHV0aW9ucyhmYWxzZSkpOwotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGl0ZW0uc2V0VGl0bGUoY29udGV4dE1lbnVJ
dGVtVGFnU2hvd1N1YnN0aXR1dGlvbnModHJ1ZSkpOwotICAgICAgICAgICAgc2hvdWxkRW5hYmxl
ID0gZnJhbWUtPmVkaXRvcigpLT5jYW5FZGl0KCk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ01ha2VVcHBlckNhc2U6Ci0gICAgICAg
IGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnTWFrZUxvd2VyQ2FzZToKLSAgICAgICAgY2FzZSBDb250
ZXh0TWVudUl0ZW1UYWdDYXBpdGFsaXplOgotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRh
Z0NoYW5nZUJhY2s6Ci0gICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+ZWRpdG9yKCkt
PmNhbkVkaXQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbnRleHRNZW51
SXRlbVRhZ0NvcnJlY3RTcGVsbGluZ0F1dG9tYXRpY2FsbHk6Ci0jaWYgIWRlZmluZWQoQlVJTERJ
TkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpCi0gICAgICAgICAg
ICBzaG91bGRDaGVjayA9IGZyYW1lLT5lZGl0b3IoKS0+aXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJl
Y3Rpb25FbmFibGVkKCk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IENvbnRleHRNZW51SXRlbVRhZ1NtYXJ0Q29weVBhc3RlOgotI2lmICFkZWZpbmVkKEJVSUxESU5H
X09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQotICAgICAgICAgICAg
c2hvdWxkQ2hlY2sgPSBmcmFtZS0+ZWRpdG9yKCktPnNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCgp
OwotI2VuZGlmCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0
ZW1UYWdTbWFydFF1b3RlczoKLSNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRl
ZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKLSAgICAgICAgICAgIHNob3VsZENoZWNrID0gZnJh
bWUtPmVkaXRvcigpLT5pc0F1dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uRW5hYmxlZCgpOwotI2Vu
ZGlmCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdT
bWFydERhc2hlczoKLSNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQo
QlVJTERJTkdfT05fTEVPUEFSRCkKLSAgICAgICAgICAgIHNob3VsZENoZWNrID0gZnJhbWUtPmVk
aXRvcigpLT5pc0F1dG9tYXRpY0Rhc2hTdWJzdGl0dXRpb25FbmFibGVkKCk7Ci0jZW5kaWYKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1NtYXJ0TGlu
a3M6Ci0jaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5H
X09OX0xFT1BBUkQpCi0gICAgICAgICAgICBzaG91bGRDaGVjayA9IGZyYW1lLT5lZGl0b3IoKS0+
aXNBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZCgpOwotI2VuZGlmCi0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdUZXh0UmVwbGFjZW1lbnQ6Ci0j
aWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xF
T1BBUkQpCi0gICAgICAgICAgICBzaG91bGRDaGVjayA9IGZyYW1lLT5lZGl0b3IoKS0+aXNBdXRv
bWF0aWNUZXh0UmVwbGFjZW1lbnRFbmFibGVkKCk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1N0b3BTcGVha2luZzoKLSAgICAgICAg
ICAgIHNob3VsZEVuYWJsZSA9IGNvbnRyb2xsZXIoKSAmJiBjb250cm9sbGVyKCktPmNsaWVudCgp
ICYmIGNvbnRyb2xsZXIoKS0+Y2xpZW50KCktPmlzU3BlYWtpbmcoKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotI2Vsc2UgLy8gUExBVEZPUk0oTUFDKSBlbmRzIGhlcmUKLSAgICAgICAgY2FzZSBDb250
ZXh0TWVudUl0ZW1UYWdTdG9wU3BlYWtpbmc6Ci0gICAgICAgICAgICBicmVhazsKLSNlbmRpZgot
I2lmIFBMQVRGT1JNKEdUSykKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdHb0JhY2s6
Ci0gICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+cGFnZSgpICYmIGZyYW1lLT5wYWdl
KCktPmJhY2tGb3J3YXJkKCktPmNhbkdvQmFja09yRm9yd2FyZCgtMSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdHb0ZvcndhcmQ6Ci0gICAgICAg
ICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+cGFnZSgpICYmIGZyYW1lLT5wYWdlKCktPmJhY2tG
b3J3YXJkKCktPmNhbkdvQmFja09yRm9yd2FyZCgxKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1N0b3A6Ci0gICAgICAgICAgICBzaG91bGRFbmFi
bGUgPSBmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPmlzTG9hZGluZ0luQVBJU2Vu
c2UoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRh
Z1JlbG9hZDoKLSAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9ICFmcmFtZS0+bG9hZGVyKCktPmRv
Y3VtZW50TG9hZGVyKCktPmlzTG9hZGluZ0luQVBJU2Vuc2UoKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0ZvbnRNZW51OgotICAgICAgICAgICAg
c2hvdWxkRW5hYmxlID0gZnJhbWUtPmVkaXRvcigpLT5jYW5FZGl0UmljaGx5KCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSNlbHNlCi0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnR29CYWNr
OgotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0dvRm9yd2FyZDoKLSAgICAgICAgY2Fz
ZSBDb250ZXh0TWVudUl0ZW1UYWdTdG9wOgotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRh
Z1JlbG9hZDoKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdGb250TWVudToKLSNlbmRp
ZgotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ05vQWN0aW9uOgotICAgICAgICBjYXNl
IENvbnRleHRNZW51SXRlbVRhZ09wZW5MaW5rSW5OZXdXaW5kb3c6Ci0gICAgICAgIGNhc2UgQ29u
dGV4dE1lbnVJdGVtVGFnRG93bmxvYWRMaW5rVG9EaXNrOgotICAgICAgICBjYXNlIENvbnRleHRN
ZW51SXRlbVRhZ0NvcHlMaW5rVG9DbGlwYm9hcmQ6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJ
dGVtVGFnT3BlbkltYWdlSW5OZXdXaW5kb3c6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVt
VGFnRG93bmxvYWRJbWFnZVRvRGlzazoKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdD
b3B5SW1hZ2VUb0NsaXBib2FyZDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENv
bnRleHRNZW51SXRlbVRhZ09wZW5NZWRpYUluTmV3V2luZG93OgotICAgICAgICAgICAgaWYgKG1f
aGl0VGVzdFJlc3VsdC5tZWRpYUlzVmlkZW8oKSkKLSAgICAgICAgICAgICAgICBpdGVtLnNldFRp
dGxlKGNvbnRleHRNZW51SXRlbVRhZ09wZW5WaWRlb0luTmV3V2luZG93KCkpOwotICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIGl0ZW0uc2V0VGl0bGUoY29udGV4dE1lbnVJdGVtVGFn
T3BlbkF1ZGlvSW5OZXdXaW5kb3coKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBDb250ZXh0TWVudUl0ZW1UYWdDb3B5TWVkaWFMaW5rVG9DbGlwYm9hcmQ6Ci0gICAgICAgICAg
ICBpZiAobV9oaXRUZXN0UmVzdWx0Lm1lZGlhSXNWaWRlbygpKQotICAgICAgICAgICAgICAgIGl0
ZW0uc2V0VGl0bGUoY29udGV4dE1lbnVJdGVtVGFnQ29weVZpZGVvTGlua1RvQ2xpcGJvYXJkKCkp
OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGl0ZW0uc2V0VGl0bGUoY29udGV4
dE1lbnVJdGVtVGFnQ29weUF1ZGlvTGlua1RvQ2xpcGJvYXJkKCkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnVG9nZ2xlTWVkaWFDb250cm9sczoK
LSAgICAgICAgICAgIHNob3VsZENoZWNrID0gbV9oaXRUZXN0UmVzdWx0Lm1lZGlhQ29udHJvbHNF
bmFibGVkKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0
ZW1UYWdUb2dnbGVNZWRpYUxvb3A6Ci0gICAgICAgICAgICBzaG91bGRDaGVjayA9IG1faGl0VGVz
dFJlc3VsdC5tZWRpYUxvb3BFbmFibGVkKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBDb250ZXh0TWVudUl0ZW1UYWdFbnRlclZpZGVvRnVsbHNjcmVlbjoKLSAgICAgICAgICAg
IHNob3VsZEVuYWJsZSA9IG1faGl0VGVzdFJlc3VsdC5tZWRpYVN1cHBvcnRzRnVsbHNjcmVlbigp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnT3Bl
bkZyYW1lSW5OZXdXaW5kb3c6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU3BlbGxp
bmdHdWVzczoKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdPdGhlcjoKLSAgICAgICAg
Y2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTZWFyY2hJblNwb3RsaWdodDoKLSAgICAgICAgY2FzZSBD
b250ZXh0TWVudUl0ZW1UYWdTZWFyY2hXZWI6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVt
VGFnT3BlbldpdGhEZWZhdWx0QXBwbGljYXRpb246Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJ
dGVtUERGQWN0dWFsU2l6ZToKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1QREZab29tSW46
Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtUERGWm9vbU91dDoKLSAgICAgICAgY2FzZSBD
b250ZXh0TWVudUl0ZW1QREZBdXRvU2l6ZToKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1Q
REZTaW5nbGVQYWdlOgotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVBERkZhY2luZ1BhZ2Vz
OgotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVBERkNvbnRpbnVvdXM6Ci0gICAgICAgIGNh
c2UgQ29udGV4dE1lbnVJdGVtUERGTmV4dFBhZ2U6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJ
dGVtUERGUHJldmlvdXNQYWdlOgotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5M
aW5rOgotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0lnbm9yZUdyYW1tYXI6Ci0gICAg
ICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU3BlbGxpbmdNZW51OgotICAgICAgICBjYXNlIENv
bnRleHRNZW51SXRlbVRhZ1Nob3dGb250czoKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1U
YWdTdHlsZXM6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU2hvd0NvbG9yczoKLSAg
ICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTcGVlY2hNZW51OgotICAgICAgICBjYXNlIENv
bnRleHRNZW51SXRlbVRhZ1N0YXJ0U3BlYWtpbmc6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJ
dGVtVGFnV3JpdGluZ0RpcmVjdGlvbk1lbnU6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVt
VGFnVGV4dERpcmVjdGlvbk1lbnU6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnUERG
U2luZ2xlUGFnZVNjcm9sbGluZzoKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdQREZG
YWNpbmdQYWdlc1Njcm9sbGluZzoKLSNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgICAgICBjYXNl
IENvbnRleHRNZW51SXRlbVRhZ0luc3BlY3RFbGVtZW50OgotI2VuZGlmCi0gICAgICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtQmFzZUN1c3RvbVRhZzoKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0
ZW1DdXN0b21UYWdOb0FjdGlvbjoKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1MYXN0Q3Vz
dG9tVGFnOgotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbUJhc2VBcHBsaWNhdGlvblRhZzoK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ01lZGlh
UGxheVBhdXNlOgotICAgICAgICAgICAgaWYgKG1faGl0VGVzdFJlc3VsdC5tZWRpYVBsYXlpbmco
KSkKLSAgICAgICAgICAgICAgICBpdGVtLnNldFRpdGxlKGNvbnRleHRNZW51SXRlbVRhZ01lZGlh
UGF1c2UoKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgaXRlbS5zZXRUaXRs
ZShjb250ZXh0TWVudUl0ZW1UYWdNZWRpYVBsYXkoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdNZWRpYU11dGU6Ci0gICAgICAgICAgICBzaG91
bGRFbmFibGUgPSBtX2hpdFRlc3RSZXN1bHQubWVkaWFIYXNBdWRpbygpOwotICAgICAgICAgICAg
c2hvdWxkQ2hlY2sgPSBzaG91bGRFbmFibGUgJiYgIG1faGl0VGVzdFJlc3VsdC5tZWRpYU11dGVk
KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBpdGVtLnNldENoZWNrZWQoc2hv
dWxkQ2hlY2spOwotICAgIGl0ZW0uc2V0RW5hYmxlZChzaG91bGRFbmFibGUpOwotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoQ09OVEVYVF9NRU5VUykKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vQ29udGV4dE1lbnUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL0NvbnRleHRNZW51LmgJKHJldmlzaW9uIDczMTY5KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9Db250ZXh0TWVudS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw2IEBACiAjaW5j
bHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAKICNpbmNsdWRlICJDb250ZXh0TWVudUl0ZW0uaCIK
LSNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1NZW51RGVzY3Jp
cHRpb24uaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2lmIFBMQVRGT1JNKE1BQykK
QEAgLTQ4LDE0ICs0NywxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgQ29udGV4
dE1lbnUgOiBwdWJsaWMgTm9uY29weWFibGUKICAgICB7CiAgICAgcHVibGljOgotICAgICAgICBD
b250ZXh0TWVudShjb25zdCBIaXRUZXN0UmVzdWx0Jik7Ci0gICAgICAgIENvbnRleHRNZW51KGNv
bnN0IEhpdFRlc3RSZXN1bHQmLCBjb25zdCBQbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbik7CisgICAg
ICAgIENvbnRleHRNZW51KCk7CisgICAgICAgIENvbnRleHRNZW51KGNvbnN0IFBsYXRmb3JtTWVu
dURlc2NyaXB0aW9uKTsKICAgICAgICAgfkNvbnRleHRNZW51KCk7CiAKLSAgICAgICAgdm9pZCBw
b3B1bGF0ZSgpOwotICAgICAgICB2b2lkIGFkZEluc3BlY3RFbGVtZW50SXRlbSgpOwotICAgICAg
ICB2b2lkIGNoZWNrT3JFbmFibGVJZk5lZWRlZChDb250ZXh0TWVudUl0ZW0mKSBjb25zdDsKLQog
ICAgICAgICB2b2lkIGluc2VydEl0ZW0odW5zaWduZWQgcG9zaXRpb24sIENvbnRleHRNZW51SXRl
bSYpOwogICAgICAgICB2b2lkIGFwcGVuZEl0ZW0oQ29udGV4dE1lbnVJdGVtJik7CiAgICAgICAg
IApAQCAtNjQsOSArNTksNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdW5zaWdu
ZWQgaXRlbUNvdW50KCkgY29uc3Q7CiAKLSAgICAgICAgSGl0VGVzdFJlc3VsdCBoaXRUZXN0UmVz
dWx0KCkgY29uc3QgeyByZXR1cm4gbV9oaXRUZXN0UmVzdWx0OyB9Ci0gICAgICAgIENvbnRleHRN
ZW51Q29udHJvbGxlciogY29udHJvbGxlcigpIGNvbnN0OwotCiAgICAgICAgIFBsYXRmb3JtTWVu
dURlc2NyaXB0aW9uIHBsYXRmb3JtRGVzY3JpcHRpb24oKSBjb25zdDsKICAgICAgICAgdm9pZCBz
ZXRQbGF0Zm9ybURlc2NyaXB0aW9uKFBsYXRmb3JtTWVudURlc2NyaXB0aW9uKTsKIApAQCAtNzUs
NyArNjcsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHN0YXRpYyBDb250ZXh0TWVu
dUl0ZW0qIGl0ZW1XaXRoSWQoaW50KTsKICNlbmRpZgogICAgIHByaXZhdGU6Ci0gICAgICAgIEhp
dFRlc3RSZXN1bHQgbV9oaXRUZXN0UmVzdWx0OwogI2lmIFBMQVRGT1JNKE1BQykKICAgICAgICAg
Ly8gS2VlcCB0aGlzIGluIHN5bmMgd2l0aCB0aGUgUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gdHlw
ZWRlZgogICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IG1fcGxhdGZvcm1EZXNjcmlw
dGlvbjsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9UZW1wb3JhcnlMaW5rU3R1YnMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9UZW1wb3JhcnlMaW5r
U3R1YnMuY3BwCShyZXZpc2lvbiA3MzE2OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9U
ZW1wb3JhcnlMaW5rU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjcsNyArMTY3LDcgQEAg
UGFzdGVib2FyZDo6flBhc3RlYm9hcmQoKQogfQogCiAKLUNvbnRleHRNZW51OjpDb250ZXh0TWVu
dShjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQpIDogbV9oaXRUZXN0UmVzdWx0KHJlc3VsdCkK
K0NvbnRleHRNZW51OjpDb250ZXh0TWVudSgpCiB7CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vYnJldy9Db250
ZXh0TWVudUJyZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vYnJldy9Db250
ZXh0TWVudUJyZXcuY3BwCShyZXZpc2lvbiA3MzE2OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vYnJl
dy9Db250ZXh0TWVudUJyZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxNSArMzIsMTMgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1Db250ZXh0TWVudTo6Q29udGV4dE1lbnUoY29uc3Qg
SGl0VGVzdFJlc3VsdCYgcmVzdWx0KQotICAgIDogbV9oaXRUZXN0UmVzdWx0KHJlc3VsdCkKK0Nv
bnRleHRNZW51OjpDb250ZXh0TWVudSgpCiB7CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotQ29udGV4dE1lbnU6OkNvbnRleHRNZW51KGNvbnN0
IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gbWVu
dSkKLSAgICA6IG1faGl0VGVzdFJlc3VsdChyZXN1bHQpCitDb250ZXh0TWVudTo6Q29udGV4dE1l
bnUoY29uc3QgUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gbWVudSkKIHsKICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICBub3RJbXBsZW1lbnRlZCgpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9jaHJvbWl1bS9Db250ZXh0TWVudUNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2Nocm9taXVtL0NvbnRleHRNZW51Q2hyb21pdW0uY3BwCShyZXZpc2lvbiA3MzE2
OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ29udGV4dE1lbnVDaHJvbWl1bS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM2LDEzICszNiwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAv
LyBUaGlzIGlzIGEgc3R1YiBpbXBsZW1lbnRhdGlvbiBvZiBXZWJLaXQncyBDb250ZXh0TWVudSBj
bGFzcyB0aGF0IGRvZXMKIC8vIG5vdGhpbmcuCiAKLUNvbnRleHRNZW51OjpDb250ZXh0TWVudShj
b25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQpCi0gICAgOiBtX2hpdFRlc3RSZXN1bHQocmVzdWx0
KQorQ29udGV4dE1lbnU6OkNvbnRleHRNZW51KCkKIHsKIH0KIAotQ29udGV4dE1lbnU6OkNvbnRl
eHRNZW51KGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgUGxhdGZvcm1NZW51RGVz
Y3JpcHRpb24gbWVudSkKLSAgICA6IG1faGl0VGVzdFJlc3VsdChyZXN1bHQpCitDb250ZXh0TWVu
dTo6Q29udGV4dE1lbnUoY29uc3QgUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gbWVudSkKIHsKIH0K
IApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9lZmwvQ29udGV4dE1lbnVFZmwuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZWZsL0NvbnRleHRNZW51RWZsLmNwcAkocmV2aXNpb24g
NzMxNjkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2VmbC9Db250ZXh0TWVudUVmbC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI5LDE2ICsyOSwxNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNv
bnRleHRNZW51OjpDb250ZXh0TWVudShjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQpCi0gICAg
OiBtX2hpdFRlc3RSZXN1bHQocmVzdWx0KQorQ29udGV4dE1lbnU6OkNvbnRleHRNZW51KCkKIHsK
ICAgICBtX2NvbnRleHRNZW51Q2xpZW50ID0gc3RhdGljX2Nhc3Q8Q29udGV4dE1lbnVDbGllbnRF
ZmwqPihjb250cm9sbGVyKCktPmNsaWVudCgpKTsKICAgICBtX3BsYXRmb3JtRGVzY3JpcHRpb24g
PSBtX2NvbnRleHRNZW51Q2xpZW50LT5jcmVhdGVQbGF0Zm9ybURlc2NyaXB0aW9uKHRoaXMpOwog
fQogCi1Db250ZXh0TWVudTo6Q29udGV4dE1lbnUoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0
LCBjb25zdCBQbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbiBtZW51KQotICAgIDogbV9oaXRUZXN0UmVz
dWx0KHJlc3VsdCkKLSAgICAsIG1fcGxhdGZvcm1EZXNjcmlwdGlvbihtZW51KQorQ29udGV4dE1l
bnU6OkNvbnRleHRNZW51KGNvbnN0IFBsYXRmb3JtTWVudURlc2NyaXB0aW9uIG1lbnUpCisgICAg
OiBtX3BsYXRmb3JtRGVzY3JpcHRpb24obWVudSkKIHsKICAgICBtX2NvbnRleHRNZW51Q2xpZW50
ID0gc3RhdGljX2Nhc3Q8Q29udGV4dE1lbnVDbGllbnRFZmwqPihjb250cm9sbGVyKCktPmNsaWVu
dCgpKTsKIH0KQEAgLTUxLDcgKzQ5LDYgQEAgQ29udGV4dE1lbnU6On5Db250ZXh0TWVudSgpCiAK
IHZvaWQgQ29udGV4dE1lbnU6OmFwcGVuZEl0ZW0oQ29udGV4dE1lbnVJdGVtJiBpdGVtKQogewot
ICAgIGNoZWNrT3JFbmFibGVJZk5lZWRlZChpdGVtKTsKICAgICBtX2NvbnRleHRNZW51Q2xpZW50
LT5hcHBlbmRJdGVtKG1fcGxhdGZvcm1EZXNjcmlwdGlvbiwgaXRlbSk7CiB9CiAKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZWZsL0NvbnRleHRNZW51SXRlbUVmbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9lZmwvQ29udGV4dE1lbnVJdGVtRWZsLmNwcAkocmV2aXNpb24gNzMx
NjkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2VmbC9Db250ZXh0TWVudUl0ZW1FZmwuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTYsOCArMTE2LDcgQEAgdm9pZCBDb250ZXh0TWVudUl0ZW06OnNldFN1
Yk1lbnUoQ29udGV4dAogICAgICAgICByZXR1cm47CiAKICAgICBtX3BsYXRmb3JtRGVzY3JpcHRp
b24udHlwZSA9IFN1Ym1lbnVUeXBlOwotICAgIG1fcGxhdGZvcm1EZXNjcmlwdGlvbi5zdWJNZW51
ID0gbmV3IENvbnRleHRNZW51KHN1Yk1lbnUtPmhpdFRlc3RSZXN1bHQoKSwKLSAgICAgICAgICAg
IHN1Yk1lbnUtPnJlbGVhc2VQbGF0Zm9ybURlc2NyaXB0aW9uKCkpOworICAgIG1fcGxhdGZvcm1E
ZXNjcmlwdGlvbi5zdWJNZW51ID0gbmV3IENvbnRleHRNZW51KHN1Yk1lbnUtPnJlbGVhc2VQbGF0
Zm9ybURlc2NyaXB0aW9uKCkpOwogfQogCiBib29sIENvbnRleHRNZW51SXRlbTo6Y2hlY2tlZCgp
IGNvbnN0CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2d0ay9Db250ZXh0TWVudUd0ay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ29udGV4dE1lbnVHdGsuY3BwCShyZXZp
c2lvbiA3MzE2OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL0NvbnRleHRNZW51R3RrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzQsOCArMzQsNyBAQCBzdGF0aWMgdm9pZCBtZW51SXRlbUFjdGl2
YXRlZChHdGtNZW51SXRlCiAgICAgY29udHJvbGxlci0+Y29udGV4dE1lbnVJdGVtU2VsZWN0ZWQo
JmNvbnRleHRJdGVtKTsKIH0KIAotQ29udGV4dE1lbnU6OkNvbnRleHRNZW51KGNvbnN0IEhpdFRl
c3RSZXN1bHQmIHJlc3VsdCkKLSAgICA6IG1faGl0VGVzdFJlc3VsdChyZXN1bHQpCitDb250ZXh0
TWVudTo6Q29udGV4dE1lbnUoKQogewogICAgIG1fcGxhdGZvcm1EZXNjcmlwdGlvbiA9IEdUS19N
RU5VKGd0a19tZW51X25ldygpKTsKIApAQCAtNTEsNyArNTAsNiBAQCBDb250ZXh0TWVudTo6fkNv
bnRleHRNZW51KCkKIHZvaWQgQ29udGV4dE1lbnU6OmFwcGVuZEl0ZW0oQ29udGV4dE1lbnVJdGVt
JiBpdGVtKQogewogICAgIEFTU0VSVChtX3BsYXRmb3JtRGVzY3JpcHRpb24pOwotICAgIGNoZWNr
T3JFbmFibGVJZk5lZWRlZChpdGVtKTsKIAogICAgIENvbnRleHRNZW51SXRlbVR5cGUgdHlwZSA9
IGl0ZW0udHlwZSgpOwogICAgIEd0a01lbnVJdGVtKiBwbGF0Zm9ybUl0ZW0gPSBDb250ZXh0TWVu
dUl0ZW06OmNyZWF0ZU5hdGl2ZU1lbnVJdGVtKGl0ZW0ucmVsZWFzZVBsYXRmb3JtRGVzY3JpcHRp
b24oKSk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0NvbnRleHRNZW51SGFpa3UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvQ29udGV4dE1lbnVIYWlrdS5j
cHAJKHJldmlzaW9uIDczMTY5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9Db250ZXh0TWVu
dUhhaWt1LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUsOSArNzUsOCBAQCBwcml2YXRlOgogICAg
IGludCBtX3Jlc3VsdDsKIH07CiAKLUNvbnRleHRNZW51OjpDb250ZXh0TWVudShjb25zdCBIaXRU
ZXN0UmVzdWx0JiByZXN1bHQpCi0gICAgOiBtX2hpdFRlc3RSZXN1bHQocmVzdWx0KQotICAgICwg
bV9wbGF0Zm9ybURlc2NyaXB0aW9uKG5ldyBCTWVudSgiY29udGV4dF9tZW51IikpCitDb250ZXh0
TWVudTo6Q29udGV4dE1lbnUoKQorICAgIDogbV9wbGF0Zm9ybURlc2NyaXB0aW9uKG5ldyBCTWVu
dSgiY29udGV4dF9tZW51IikpCiB7CiB9CiAKQEAgLTg4LDggKzg3LDYgQEAgQ29udGV4dE1lbnU6
On5Db250ZXh0TWVudSgpCiAKIHZvaWQgQ29udGV4dE1lbnU6OmFwcGVuZEl0ZW0oQ29udGV4dE1l
bnVJdGVtJiBpdGVtKQogewotICAgIGNoZWNrT3JFbmFibGVJZk5lZWRlZChpdGVtKTsKLQogICAg
IEJNZW51SXRlbSogbWVudUl0ZW0gPSBpdGVtLnJlbGVhc2VQbGF0Zm9ybURlc2NyaXB0aW9uKCk7
CiAgICAgaWYgKG1lbnVJdGVtKQogICAgICAgICBtX3BsYXRmb3JtRGVzY3JpcHRpb24tPkFkZEl0
ZW0obWVudUl0ZW0pOwpAQCAtMTAyLDggKzk5LDYgQEAgdW5zaWduZWQgQ29udGV4dE1lbnU6Oml0
ZW1Db3VudCgpIGNvbnN0CiAKIHZvaWQgQ29udGV4dE1lbnU6Omluc2VydEl0ZW0odW5zaWduZWQg
cG9zaXRpb24sIENvbnRleHRNZW51SXRlbSYgaXRlbSkKIHsKLSAgICBjaGVja09yRW5hYmxlSWZO
ZWVkZWQoaXRlbSk7Ci0KICAgICBCTWVudUl0ZW0qIG1lbnVJdGVtID0gaXRlbS5yZWxlYXNlUGxh
dGZvcm1EZXNjcmlwdGlvbigpOwogICAgIGlmIChtZW51SXRlbSkKICAgICAgICAgbV9wbGF0Zm9y
bURlc2NyaXB0aW9uLT5BZGRJdGVtKG1lbnVJdGVtLCBwb3NpdGlvbik7CkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL21hYy9Db250ZXh0TWVudU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL21hYy9Db250ZXh0TWVudU1hYy5tbQkocmV2aXNpb24gNzMxNjkpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL21hYy9Db250ZXh0TWVudU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNzEsNyAr
NzEsNyBAQCAtIChCT09MKXZhbGlkYXRlTWVudUl0ZW06KE5TTWVudUl0ZW0gKilpCiB7CiAgICAg
V2ViQ29yZTo6Q29udGV4dE1lbnVJdGVtIGNvcmVJdGVtKGl0ZW0pOwogICAgIEFTU0VSVChfbWVu
dUNvbnRyb2xsZXItPmNvbnRleHRNZW51KCkpOwotICAgIF9tZW51Q29udHJvbGxlci0+Y29udGV4
dE1lbnUoKS0+Y2hlY2tPckVuYWJsZUlmTmVlZGVkKGNvcmVJdGVtKTsKKyAgICBfbWVudUNvbnRy
b2xsZXItPmNoZWNrT3JFbmFibGVJZk5lZWRlZChjb3JlSXRlbSk7CiAgICAgcmV0dXJuIGNvcmVJ
dGVtLmVuYWJsZWQoKTsKIH0KIApAQCAtNzksOCArNzksNyBAQCAtIChCT09MKXZhbGlkYXRlTWVu
dUl0ZW06KE5TTWVudUl0ZW0gKilpCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ29udGV4dE1l
bnU6OkNvbnRleHRNZW51KGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCkKLSAgICA6IG1faGl0
VGVzdFJlc3VsdChyZXN1bHQpCitDb250ZXh0TWVudTo6Q29udGV4dE1lbnUoKQogewogICAgIE5T
TXV0YWJsZUFycmF5KiBhcnJheSA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdOwogICAg
IG1fcGxhdGZvcm1EZXNjcmlwdGlvbiA9IGFycmF5OwpAQCAtODksOSArODgsOCBAQCBDb250ZXh0
TWVudTo6Q29udGV4dE1lbnUoY29uc3QgSGl0VGVzdFJlCiAgICAgW1tXZWJDb3JlTWVudVRhcmdl
dCBzaGFyZWRNZW51VGFyZ2V0XSBzZXRNZW51Q29udHJvbGxlcjpjb250cm9sbGVyKCldOwogfQog
Ci1Db250ZXh0TWVudTo6Q29udGV4dE1lbnUoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBj
b25zdCBQbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbiBtZW51KQotICAgIDogbV9oaXRUZXN0UmVzdWx0
KHJlc3VsdCkKLSAgICAsIG1fcGxhdGZvcm1EZXNjcmlwdGlvbihtZW51KQorQ29udGV4dE1lbnU6
OkNvbnRleHRNZW51KGNvbnN0IFBsYXRmb3JtTWVudURlc2NyaXB0aW9uIG1lbnUpCisgICAgOiBt
X3BsYXRmb3JtRGVzY3JpcHRpb24obWVudSkKIHsKICAgICBbW1dlYkNvcmVNZW51VGFyZ2V0IHNo
YXJlZE1lbnVUYXJnZXRdIHNldE1lbnVDb250cm9sbGVyOmNvbnRyb2xsZXIoKV07CiB9CkBAIC0x
MDgsOCArMTA2LDYgQEAgc3RhdGljIHZvaWQgc2V0TWVudUl0ZW1UYXJnZXQoTlNNZW51SXRlbQog
CiB2b2lkIENvbnRleHRNZW51OjphcHBlbmRJdGVtKENvbnRleHRNZW51SXRlbSYgaXRlbSkKIHsK
LSAgICBjaGVja09yRW5hYmxlSWZOZWVkZWQoaXRlbSk7Ci0KICAgICBDb250ZXh0TWVudUl0ZW1U
eXBlIHR5cGUgPSBpdGVtLnR5cGUoKTsKICAgICBOU01lbnVJdGVtKiBwbGF0Zm9ybUl0ZW0gPSBp
dGVtLnJlbGVhc2VQbGF0Zm9ybURlc2NyaXB0aW9uKCk7CiAgICAgaWYgKHR5cGUgPT0gQWN0aW9u
VHlwZSkKQEAgLTEyMSw4ICsxMTcsNiBAQCB2b2lkIENvbnRleHRNZW51OjphcHBlbmRJdGVtKENv
bnRleHRNZW51CiAKIHZvaWQgQ29udGV4dE1lbnU6Omluc2VydEl0ZW0odW5zaWduZWQgcG9zaXRp
b24sIENvbnRleHRNZW51SXRlbSYgaXRlbSkKIHsKLSAgICBjaGVja09yRW5hYmxlSWZOZWVkZWQo
aXRlbSk7Ci0KICAgICBDb250ZXh0TWVudUl0ZW1UeXBlIHR5cGUgPSBpdGVtLnR5cGUoKTsKICAg
ICBOU01lbnVJdGVtKiBwbGF0Zm9ybUl0ZW0gPSBpdGVtLnJlbGVhc2VQbGF0Zm9ybURlc2NyaXB0
aW9uKCk7CiAgICAgaWYgKHR5cGUgPT0gQWN0aW9uVHlwZSkKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vcXQvQ29udGV4dE1lbnVRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9x
dC9Db250ZXh0TWVudVF0LmNwcAkocmV2aXNpb24gNzMxNjkpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L3F0L0NvbnRleHRNZW51UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw4ICszNSw3IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ29udGV4dE1lbnU6OkNvbnRleHRNZW51KGNvbnN0IEhp
dFRlc3RSZXN1bHQmIHJlc3VsdCkKLSAgICA6IG1faGl0VGVzdFJlc3VsdChyZXN1bHQpCitDb250
ZXh0TWVudTo6Q29udGV4dE1lbnUoKQogewogfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3dp
bi9Db250ZXh0TWVudVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS93aW4v
Q29udGV4dE1lbnVXaW4uY3BwCShyZXZpc2lvbiA3MzE2OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
d2luL0NvbnRleHRNZW51V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsOSArNDMsOCBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNvbnRleHRNZW51OjpDb250ZXh0TWVudShjb25zdCBI
aXRUZXN0UmVzdWx0JiByZXN1bHQpCi0gICAgOiBtX2hpdFRlc3RSZXN1bHQocmVzdWx0KQotICAg
ICwgbV9wbGF0Zm9ybURlc2NyaXB0aW9uKDApCitDb250ZXh0TWVudTo6Q29udGV4dE1lbnUoKQor
ICAgIDogbV9wbGF0Zm9ybURlc2NyaXB0aW9uKDApCiAjaWYgT1MoV0lOQ0UpCiAgICAgLCBtX2l0
ZW1Db3VudCgwKQogI2VuZGlmCkBAIC01Myw5ICs1Miw4IEBAIENvbnRleHRNZW51OjpDb250ZXh0
TWVudShjb25zdCBIaXRUZXN0UmUKICAgICBzZXRQbGF0Zm9ybURlc2NyaXB0aW9uKDo6Q3JlYXRl
UG9wdXBNZW51KCkpOwogfQogCi1Db250ZXh0TWVudTo6Q29udGV4dE1lbnUoY29uc3QgSGl0VGVz
dFJlc3VsdCYgcmVzdWx0LCBjb25zdCBQbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbiBtZW51KQotICAg
IDogbV9oaXRUZXN0UmVzdWx0KHJlc3VsdCkKLSAgICAsIG1fcGxhdGZvcm1EZXNjcmlwdGlvbigw
KQorQ29udGV4dE1lbnU6OkNvbnRleHRNZW51KGNvbnN0IFBsYXRmb3JtTWVudURlc2NyaXB0aW9u
IG1lbnUpCisgICAgOiBtX3BsYXRmb3JtRGVzY3JpcHRpb24oMCkKICNpZiBPUyhXSU5DRSkKICAg
ICAsIG1faXRlbUNvdW50KDApCiAjZW5kaWYKQEAgLTExOCw4ICsxMTYsNiBAQCB2b2lkIENvbnRl
eHRNZW51OjppbnNlcnRJdGVtKHVuc2lnbmVkIGluCiAgICAgaWYgKCFtX3BsYXRmb3JtRGVzY3Jp
cHRpb24pCiAgICAgICAgIHJldHVybjsKIAotICAgIGNoZWNrT3JFbmFibGVJZk5lZWRlZChpdGVt
KTsKLQogI2lmIE9TKFdJTkNFKQogICAgIGlmIChpbnNlcnRNZW51SXRlbShtX3BsYXRmb3JtRGVz
Y3JpcHRpb24sIHBvc2l0aW9uLCBpdGVtKSkKICAgICAgICAgKyttX2l0ZW1Db3VudDsKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vd3gvQ29udGV4dE1lbnVXeC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS93eC9Db250ZXh0TWVudVd4LmNwcAkocmV2aXNpb24gNzMxNjkpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL3d4L0NvbnRleHRNZW51V3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
Miw3ICs0Miw3IEBAIENvbnRleHRNZW51SXRlbSogQ29udGV4dE1lbnU6Oml0ZW1XaXRoSWQKICAg
ICByZXR1cm4gbmV3IENvbnRleHRNZW51SXRlbShBY3Rpb25UeXBlLCBzX2l0ZW1BY3Rpb25zLmdl
dChpZCksICIiKTsKIH0KIAotQ29udGV4dE1lbnU6OkNvbnRleHRNZW51KGNvbnN0IEhpdFRlc3RS
ZXN1bHQmIHJlc3VsdCkgOiBtX2hpdFRlc3RSZXN1bHQocmVzdWx0KQorQ29udGV4dE1lbnU6OkNv
bnRleHRNZW51KCkKIHsKICAgICBtX3BsYXRmb3JtRGVzY3JpcHRpb24gPSBuZXcgd3hNZW51KDAp
OwogfQpAQCAtNTcsOCArNTcsNiBAQCB2b2lkIENvbnRleHRNZW51OjphcHBlbmRJdGVtKENvbnRl
eHRNZW51CiB7CiAgICAgaWYgKCFtX3BsYXRmb3JtRGVzY3JpcHRpb24pCiAgICAgICAgIHJldHVy
bjsKLSAgICAKLSAgICBjaGVja09yRW5hYmxlSWZOZWVkZWQoaXRlbSk7CiAgICAgICAgIAogICAg
IFBsYXRmb3JtTWVudUl0ZW1EZXNjcmlwdGlvbiBpdGVtRGVzY3JpcHRpb24gPSBpdGVtLnJlbGVh
c2VQbGF0Zm9ybURlc2NyaXB0aW9uKCk7ICAgIAogICAgIHd4SXRlbUtpbmQgbWVudUtpbmRXeCA9
ICggaXRlbURlc2NyaXB0aW9uLnR5cGUgPT0gQ2hlY2thYmxlQWN0aW9uVHlwZSApID8gd3hJVEVN
X0NIRUNLIDogd3hJVEVNX05PUk1BTDsKSW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiA3MzQyMCkKKysrIFdlYktpdDIvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTAtMTItMDYgIEJyaWFu
IFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIExheWVyaW5nIFZpb2xhdGlvbiBpbiBDb250ZXh0
TWVudSAtIG1lbWJlciB2YXJpYWJsZSBvZiB0eXBlIEhpdFRlc3RSZXN1bHQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUwNTg2CisgICAgICAgIAorICAg
ICAgICBVcGRhdGUgdXNlcnMgb2YgQ29udGV4dE1lbnUgYW5kIENvbnRleHRNZW51Q29udHJvbGxl
ciB0byBtYXRjaCB3aGVyZSB0aGUgbmV3IGZ1bmN0aW9ucyAKKyAgICAgICAgYXJlIGxvY2F0ZWQu
CisKKyAgICAgICAgKiBTaGFyZWQvV2ViQ29udGV4dE1lbnVJdGVtRGF0YS5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYkNvbnRleHRNZW51SXRlbURhdGE6OldlYkNvbnRleHRNZW51SXRlbURhdGEp
OiBSZW1vdmUgdGhlIGNhbGwgdG8gY2hlY2tPckVuYWJsZUl0ZW0sIHRoYXQgY2FsbCB3aWxsIGJl
IG1hZGUgd2hlbgorICAgICAgICAgICAgdGhlIENvbnRleHRNZW51SXRlbSBpcyBhZGRlZCB0byB0
aGUgQ29udGV4dE1lbnUgdGhyb3VnaCB0aGUgQ29udGV4dE1lbnVDb250cm9sbGVyLgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJDb250ZXh0TWVudS5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYkNvbnRleHRNZW51OjpzaG93KToKKwogMjAxMC0xMi0wNiAgQW5kZXJzIENhcmxzc29u
ICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcu
CkluZGV4OiBXZWJLaXQyL1NoYXJlZC9XZWJDb250ZXh0TWVudUl0ZW1EYXRhLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQyL1NoYXJlZC9XZWJDb250ZXh0TWVudUl0ZW1EYXRhLmNwcAkocmV2aXNp
b24gNzMxNjkpCisrKyBXZWJLaXQyL1NoYXJlZC9XZWJDb250ZXh0TWVudUl0ZW1EYXRhLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzMsOCArNzMsNiBAQCBXZWJDb250ZXh0TWVudUl0ZW1EYXRhOjpX
ZWJDb250ZXh0TWVudUl0CiAgICAgICAgIG1fc3VibWVudSA9IGtpdEl0ZW1zKGNvcmVTdWJtZW51
LCBtZW51KTsKICAgICB9CiAgICAgCi0gICAgbWVudS0+Y2hlY2tPckVuYWJsZUlmTmVlZGVkKGl0
ZW0pOwotICAgIAogICAgIG1fZW5hYmxlZCA9IGl0ZW0uZW5hYmxlZCgpOwogICAgIG1fY2hlY2tl
ZCA9IGl0ZW0uY2hlY2tlZCgpOwogfQpJbmRleDogV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViQ29udGV4dE1lbnUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYkNvbnRleHRNZW51LmNwcAkocmV2aXNpb24gNzMxNjkpCisrKyBXZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJDb250ZXh0TWVudS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDEw
ICs0NywxMyBAQCBXZWJDb250ZXh0TWVudTo6fldlYkNvbnRleHRNZW51KCkKIAogdm9pZCBXZWJD
b250ZXh0TWVudTo6c2hvdygpCiB7Ci0gICAgQ29udGV4dE1lbnUqIG1lbnUgPSBtX3BhZ2UtPmNv
cmVQYWdlKCktPmNvbnRleHRNZW51Q29udHJvbGxlcigpLT5jb250ZXh0TWVudSgpOworICAgIENv
bnRleHRNZW51Q29udHJvbGxlciogY29udHJvbGxlciA9IG1fcGFnZS0+Y29yZVBhZ2UoKS0+Y29u
dGV4dE1lbnVDb250cm9sbGVyKCk7CisgICAgaWYgKCFjb250cm9sbGVyKQorICAgICAgICByZXR1
cm47CisgICAgQ29udGV4dE1lbnUqIG1lbnUgPSBjb250cm9sbGVyLT5jb250ZXh0TWVudSgpOwog
ICAgIGlmICghbWVudSkKICAgICAgICAgcmV0dXJuOwotICAgIE5vZGUqIG5vZGUgPSBtZW51LT5o
aXRUZXN0UmVzdWx0KCkuaW5uZXJOb25TaGFyZWROb2RlKCk7CisgICAgTm9kZSogbm9kZSA9IGNv
bnRyb2xsZXItPmhpdFRlc3RSZXN1bHQoKS5pbm5lck5vblNoYXJlZE5vZGUoKTsKICAgICBpZiAo
IW5vZGUpCiAgICAgICAgIHJldHVybjsKICAgICBGcmFtZSogZnJhbWUgPSBub2RlLT5kb2N1bWVu
dCgpLT5mcmFtZSgpOwpAQCAtNjUsMTIgKzY4LDEyIEBAIHZvaWQgV2ViQ29udGV4dE1lbnU6OnNo
b3coKQogICAgIFZlY3RvcjxXZWJDb250ZXh0TWVudUl0ZW1EYXRhPiBwcm9wb3NlZE1lbnUgPSBr
aXRJdGVtcyhjb3JlSXRlbXMsIG1lbnUpOwogICAgIFZlY3RvcjxXZWJDb250ZXh0TWVudUl0ZW1E
YXRhPiBuZXdNZW51OwogICAgIFJlZlB0cjxBUElPYmplY3Q+IHVzZXJEYXRhOwotICAgIFJlZlB0
cjxJbmplY3RlZEJ1bmRsZUhpdFRlc3RSZXN1bHQ+IGhpdFRlc3RSZXN1bHQgPSBJbmplY3RlZEJ1
bmRsZUhpdFRlc3RSZXN1bHQ6OmNyZWF0ZShtZW51LT5oaXRUZXN0UmVzdWx0KCkpOworICAgIFJl
ZlB0cjxJbmplY3RlZEJ1bmRsZUhpdFRlc3RSZXN1bHQ+IGhpdFRlc3RSZXN1bHQgPSBJbmplY3Rl
ZEJ1bmRsZUhpdFRlc3RSZXN1bHQ6OmNyZWF0ZShjb250cm9sbGVyLT5oaXRUZXN0UmVzdWx0KCkp
OwogICAgIGlmIChtX3BhZ2UtPmluamVjdGVkQnVuZGxlQ29udGV4dE1lbnVDbGllbnQoKS5nZXRD
dXN0b21NZW51RnJvbURlZmF1bHRJdGVtcyhtX3BhZ2UsIGhpdFRlc3RSZXN1bHQuZ2V0KCksIHBy
b3Bvc2VkTWVudSwgbmV3TWVudSwgdXNlckRhdGEpKQogICAgICAgICBwcm9wb3NlZE1lbnUgPSBu
ZXdNZW51OwogCiAgICAgLy8gTm90aWZ5IHRoZSBVSVByb2Nlc3MuCi0gICAgbV9wYWdlLT5zZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNob3dDb250ZXh0TWVudSh2aWV3LT5jb250ZW50c1Rv
V2luZG93KG1lbnUtPmhpdFRlc3RSZXN1bHQoKS5wb2ludCgpKSwgcHJvcG9zZWRNZW51LCBJbmpl
Y3RlZEJ1bmRsZVVzZXJNZXNzYWdlRW5jb2Rlcih1c2VyRGF0YS5nZXQoKSkpKTsKKyAgICBtX3Bh
Z2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2hvd0NvbnRleHRNZW51KHZpZXctPmNv
bnRlbnRzVG9XaW5kb3coY29udHJvbGxlci0+aGl0VGVzdFJlc3VsdCgpLnBvaW50KCkpLCBwcm9w
b3NlZE1lbnUsIEluamVjdGVkQnVuZGxlVXNlck1lc3NhZ2VFbmNvZGVyKHVzZXJEYXRhLmdldCgp
KSkpOwogfQogCiB2b2lkIFdlYkNvbnRleHRNZW51OjppdGVtU2VsZWN0ZWQoY29uc3QgV2ViQ29u
dGV4dE1lbnVJdGVtRGF0YSYgaXRlbSkKSW5kZXg6IFdlYktpdC9xdC9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0L3F0L0NoYW5nZUxvZwkocmV2aXNpb24gNzM0MjMpCisrKyBXZWJLaXQv
cXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTAtMTItMDYg
IEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIExheWVyaW5nIFZpb2xhdGlvbiBpbiBD
b250ZXh0TWVudSAtIG1lbWJlciB2YXJpYWJsZSBvZiB0eXBlIEhpdFRlc3RSZXN1bHQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUwNTg2CisgICAgICAg
IAorICAgICAgICBVcGRhdGUgdXNlcnMgb2YgQ29udGV4dE1lbnUgYW5kIENvbnRleHRNZW51Q29u
dHJvbGxlciB0byBtYXRjaCB3aGVyZSB0aGUgbmV3IGZ1bmN0aW9ucyAKKyAgICAgICAgYXJlIGxv
Y2F0ZWQuCisKKyAgICAgICAgKiBBcGkvcXdlYnBhZ2UuY3BwOgorICAgICAgICAoUVdlYlBhZ2VQ
cml2YXRlOjpjcmVhdGVDb250ZXh0TWVudSk6CisgICAgICAgIChRV2ViUGFnZTo6dXBkYXRlUG9z
aXRpb25EZXBlbmRlbnRBY3Rpb25zKToKKwogMjAxMC0xMi0wNiAgTmF0ZSBDaGFwaW4gIDxqYXBo
ZXRAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCkluZGV4
OiBXZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvQXBp
L3F3ZWJwYWdlLmNwcAkocmV2aXNpb24gNzMxNjkpCisrKyBXZWJLaXQvcXQvQXBpL3F3ZWJwYWdl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQzLDcgKzQ0Myw3IEBAIFFNZW51ICpRV2ViUGFnZVBy
aXZhdGU6OmNyZWF0ZUNvbnRleHRNZW4KICAgICAgICAgICAgICAgICBRQWN0aW9uICphID0gcS0+
YWN0aW9uKGFjdGlvbik7CiAgICAgICAgICAgICAgICAgaWYgKGEpIHsKICAgICAgICAgICAgICAg
ICAgICAgQ29udGV4dE1lbnVJdGVtIGl0KGl0ZW0pOwotICAgICAgICAgICAgICAgICAgICB3ZWJj
b3JlTWVudS0+Y2hlY2tPckVuYWJsZUlmTmVlZGVkKGl0KTsKKyAgICAgICAgICAgICAgICAgICAg
cGFnZS0+Y29udGV4dE1lbnVDb250cm9sbGVyKCktPmNoZWNrT3JFbmFibGVJZk5lZWRlZChpdCk7
CiAgICAgICAgICAgICAgICAgICAgIFBsYXRmb3JtTWVudUl0ZW1EZXNjcmlwdGlvbiBkZXNjID0g
aXQucmVsZWFzZVBsYXRmb3JtRGVzY3JpcHRpb24oKTsKICAgICAgICAgICAgICAgICAgICAgYS0+
c2V0RW5hYmxlZChkZXNjLmVuYWJsZWQpOwogICAgICAgICAgICAgICAgICAgICBhLT5zZXRDaGVj
a2VkKGRlc2MuY2hlY2tlZCk7CkBAIC0zMjA5LDEyICszMjA5LDEzIEBAIHZvaWQgUVdlYlBhZ2U6
OnVwZGF0ZVBvc2l0aW9uRGVwZW5kZW50QWMKICAgICAgICAgZC0+aGl0VGVzdFJlc3VsdCA9IFFX
ZWJIaXRUZXN0UmVzdWx0KCk7CiAgICAgZWxzZQogICAgICAgICBkLT5oaXRUZXN0UmVzdWx0ID0g
UVdlYkhpdFRlc3RSZXN1bHQobmV3IFFXZWJIaXRUZXN0UmVzdWx0UHJpdmF0ZShyZXN1bHQpKTsK
LSAgICBXZWJDb3JlOjpDb250ZXh0TWVudSBtZW51KHJlc3VsdCk7Ci0gICAgbWVudS5wb3B1bGF0
ZSgpOworCisgICAgZC0+cGFnZS0+Y29udGV4dE1lbnVDb250cm9sbGVyKCktPnNldEhpdFRlc3RS
ZXN1bHQocmVzdWx0KTsKKyAgICBkLT5wYWdlLT5jb250ZXh0TWVudUNvbnRyb2xsZXIoKS0+cG9w
dWxhdGUoKTsKICAgICAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogICAgIGlmIChkLT5wYWdlLT5p
bnNwZWN0b3JDb250cm9sbGVyKCktPmVuYWJsZWQoKSkKLSAgICAgICAgbWVudS5hZGRJbnNwZWN0
RWxlbWVudEl0ZW0oKTsKKyAgICAgICAgZC0+cGFnZS0+Y29udGV4dE1lbnVDb250cm9sbGVyKCkt
PmFkZEluc3BlY3RFbGVtZW50SXRlbSgpOwogI2VuZGlmCiAKICAgICBRQml0QXJyYXkgdmlzaXRl
ZFdlYkFjdGlvbnMoUVdlYlBhZ2U6OldlYkFjdGlvbkNvdW50KTsKQEAgLTMyMjMsNyArMzIyNCw3
IEBAIHZvaWQgUVdlYlBhZ2U6OnVwZGF0ZVBvc2l0aW9uRGVwZW5kZW50QWMKICAgICBkZWxldGUg
ZC0+Y3VycmVudENvbnRleHRNZW51OwogCiAgICAgLy8gVGhlbiB3ZSBsZXQgY3JlYXRlQ29udGV4
dE1lbnUoKSBlbmFibGUgdGhlIGFjdGlvbnMgdGhhdCBhcmUgcHV0IGludG8gdGhlIG1lbnUKLSAg
ICBkLT5jdXJyZW50Q29udGV4dE1lbnUgPSBkLT5jcmVhdGVDb250ZXh0TWVudSgmbWVudSwgbWVu
dS5wbGF0Zm9ybURlc2NyaXB0aW9uKCksICZ2aXNpdGVkV2ViQWN0aW9ucyk7CisgICAgZC0+Y3Vy
cmVudENvbnRleHRNZW51ID0gZC0+Y3JlYXRlQ29udGV4dE1lbnUoZC0+cGFnZS0+Y29udGV4dE1l
bnVDb250cm9sbGVyKCktPmNvbnRleHRNZW51KCksIGQtPnBhZ2UtPmNvbnRleHRNZW51Q29udHJv
bGxlcigpLT5jb250ZXh0TWVudSgpLT5wbGF0Zm9ybURlc2NyaXB0aW9uKCksICZ2aXNpdGVkV2Vi
QWN0aW9ucyk7CiAjZW5kaWYgLy8gUVRfTk9fQ09OVEVYVE1FTlUKIAogI2lmbmRlZiBRVF9OT19B
Q1RJT04KSW5kZXg6IFdlYktpdC93aW4vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93
aW4vQ2hhbmdlTG9nCShyZXZpc2lvbiA3MzQyMCkKKysrIFdlYktpdC93aW4vQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTAtMTItMDYgIEJyaWFuIFdlaW5zdGVp
biAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIExheWVyaW5nIFZpb2xhdGlvbiBpbiBDb250ZXh0TWVudSAtIG1l
bWJlciB2YXJpYWJsZSBvZiB0eXBlIEhpdFRlc3RSZXN1bHQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUwNTg2CisgICAgICAgIAorICAgICAgICBVcGRh
dGUgdXNlcnMgb2YgQ29udGV4dE1lbnUgYW5kIENvbnRleHRNZW51Q29udHJvbGxlciB0byBtYXRj
aCB3aGVyZSB0aGUgbmV3IGZ1bmN0aW9ucyAKKyAgICAgICAgYXJlIGxvY2F0ZWQuCisKKyAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5jcHA6CisgICAgICAgIChX
ZWJDb250ZXh0TWVudUNsaWVudDo6Z2V0Q3VzdG9tTWVudUZyb21EZWZhdWx0SXRlbXMpOiBHZXQg
dGhlIEhpdFRlc3RSZXN1bHQgYW5kIENvbnRleHRNZW51IGZyb20gdGhlIAorICAgICAgICAgICAg
Q29udGV4dE1lbnVDb250cm9sbGVyIChmcm9tIHRoZSBwYWdlKS4KKyAgICAgICAgKFdlYkNvbnRl
eHRNZW51Q2xpZW50Ojpjb250ZXh0TWVudUl0ZW1TZWxlY3RlZCk6IEdldCB0aGUgSGl0VGVzdFJl
c3VsdCBmcm9tIHRoZSBDb250ZXh0TWVudUNvbnRyb2xsZXIuCisgICAgICAgICogV2ViVmlldy5j
cHA6CisgICAgICAgIChXZWJWaWV3OjpoYW5kbGVDb250ZXh0TWVudUV2ZW50KTogRGl0dG8uCisK
IDIwMTAtMTItMDUgIEFkYW0gUm9iZW4gIDxhcm9iZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFdp
bmRvd3MgcHJvZHVjdGlvbiBidWlsZCBmaXgKSW5kZXg6IFdlYktpdC93aW4vV2ViVmlldy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAkocmV2aXNpb24gNzMxNjkpCisr
KyBXZWJLaXQvd2luL1dlYlZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQ1LDEyICsxMjQ1
LDE0IEBAIGJvb2wgV2ViVmlldzo6aGFuZGxlQ29udGV4dE1lbnVFdmVudChXUEEKICAgICBpZiAo
IWhhbmRsZWRFdmVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgQ29udGV4dE1lbnVD
b250cm9sbGVyKiBjb250ZXh0TWVudUNvbnRyb2xsZXIgPSBtX3BhZ2UtPmNvbnRleHRNZW51Q29u
dHJvbGxlcigpOworCiAgICAgLy8gU2hvdyB0aGUgbWVudQotICAgIENvbnRleHRNZW51KiBjb3Jl
TWVudSA9IG1fcGFnZS0+Y29udGV4dE1lbnVDb250cm9sbGVyKCktPmNvbnRleHRNZW51KCk7Cisg
ICAgQ29udGV4dE1lbnUqIGNvcmVNZW51ID0gY29udGV4dE1lbnVDb250cm9sbGVyLT5jb250ZXh0
TWVudSgpOwogICAgIGlmICghY29yZU1lbnUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IE5vZGUqIG5vZGUgPSBjb3JlTWVudS0+aGl0VGVzdFJlc3VsdCgpLmlubmVyTm9uU2hhcmVkTm9k
ZSgpOworICAgIE5vZGUqIG5vZGUgPSBjb250ZXh0TWVudUNvbnRyb2xsZXItPmhpdFRlc3RSZXN1
bHQoKS5pbm5lck5vblNoYXJlZE5vZGUoKTsKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIApAQCAtMTI2Miw3ICsxMjY0LDcgQEAgYm9vbCBXZWJWaWV3OjpoYW5kbGVDb250
ZXh0TWVudUV2ZW50KFdQQQogICAgIGlmICghdmlldykKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgUE9JTlQgcG9pbnQodmlldy0+Y29udGVudHNUb1dpbmRvdyhjb3JlTWVudS0+aGl0VGVz
dFJlc3VsdCgpLnBvaW50KCkpKTsKKyAgICBQT0lOVCBwb2ludCh2aWV3LT5jb250ZW50c1RvV2lu
ZG93KGNvbnRleHRNZW51Q29udHJvbGxlci0+aGl0VGVzdFJlc3VsdCgpLnBvaW50KCkpKTsKIAog
ICAgIC8vIFRyYW5zbGF0ZSB0aGUgcG9pbnQgdG8gc2NyZWVuIGNvb3JkaW5hdGVzCiAgICAgaWYg
KCE6OkNsaWVudFRvU2NyZWVuKG1fdmlld1dpbmRvdywgJnBvaW50KSkKSW5kZXg6IFdlYktpdC93
aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ29udGV4dE1lbnVDbGllbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ29udGV4dE1lbnVDbGllbnQuY3BwCShyZXZp
c2lvbiA3MzMwNikKKysrIFdlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ29udGV4dE1lbnVD
bGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiV2Vi
Vmlldy5oIgogCiAjaW5jbHVkZSA8V2ViQ29yZS9Db250ZXh0TWVudS5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvQ29udGV4dE1lbnVDb250cm9sbGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9FdmVudC5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lTG9h
ZGVyLmg+CkBAIC02NCw3ICs2NSw3IEBAIEhNRU5VIFdlYkNvbnRleHRNZW51Q2xpZW50OjpnZXRD
dXN0b21NZW4KIAogICAgIEhNRU5VIG5ld01lbnUgPSAwOwogICAgIENPTVB0cjxXZWJFbGVtZW50
UHJvcGVydHlCYWc+IHByb3BlcnR5QmFnOwotICAgIHByb3BlcnR5QmFnLmFkb3B0UmVmKFdlYkVs
ZW1lbnRQcm9wZXJ0eUJhZzo6Y3JlYXRlSW5zdGFuY2UobWVudS0+aGl0VGVzdFJlc3VsdCgpKSk7
CisgICAgcHJvcGVydHlCYWcuYWRvcHRSZWYoV2ViRWxlbWVudFByb3BlcnR5QmFnOjpjcmVhdGVJ
bnN0YW5jZShtX3dlYlZpZXctPnBhZ2UoKS0+Y29udGV4dE1lbnVDb250cm9sbGVyKCktPmhpdFRl
c3RSZXN1bHQoKSkpOwogICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIGRlY2lkZSB3aGV0aGVyIHRv
IGRvIHRoZSBkZWZhdWx0IGJlZm9yZSBjYWxsaW5nIHRoaXMgZGVsZWdhdGUgbWV0aG9kCiAgICAg
aWYgKEZBSUxFRCh1aURlbGVnYXRlLT5jb250ZXh0TWVudUl0ZW1zRm9yRWxlbWVudChtX3dlYlZp
ZXcsIHByb3BlcnR5QmFnLmdldCgpLCAoT0xFX0hBTkRMRSkoVUxPTkc2NCltZW51LT5wbGF0Zm9y
bURlc2NyaXB0aW9uKCksIChPTEVfSEFORExFKikmbmV3TWVudSkpKQogICAgICAgICByZXR1cm4g
bWVudS0+cGxhdGZvcm1EZXNjcmlwdGlvbigpOwpAQCAtODIsNyArODMsNyBAQCB2b2lkIFdlYkNv
bnRleHRNZW51Q2xpZW50Ojpjb250ZXh0TWVudUl0CiAgICAgQVNTRVJUKHVpRGVsZWdhdGUpOwog
CiAgICAgQ09NUHRyPFdlYkVsZW1lbnRQcm9wZXJ0eUJhZz4gcHJvcGVydHlCYWc7Ci0gICAgcHJv
cGVydHlCYWcuYWRvcHRSZWYoV2ViRWxlbWVudFByb3BlcnR5QmFnOjpjcmVhdGVJbnN0YW5jZShw
YXJlbnRNZW51LT5oaXRUZXN0UmVzdWx0KCkpKTsKKyAgICBwcm9wZXJ0eUJhZy5hZG9wdFJlZihX
ZWJFbGVtZW50UHJvcGVydHlCYWc6OmNyZWF0ZUluc3RhbmNlKG1fd2ViVmlldy0+cGFnZSgpLT5j
b250ZXh0TWVudUNvbnRyb2xsZXIoKS0+aGl0VGVzdFJlc3VsdCgpKSk7CiAgICAgICAgICAgICAK
ICAgICB1aURlbGVnYXRlLT5jb250ZXh0TWVudUl0ZW1TZWxlY3RlZChtX3dlYlZpZXcsIGl0ZW0t
PnJlbGVhc2VQbGF0Zm9ybURlc2NyaXB0aW9uKCksIHByb3BlcnR5QmFnLmdldCgpKTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75839</attachid>
            <date>2010-12-07 13:46:26 -0800</date>
            <delta_ts>2010-12-07 14:48:19 -0800</delta_ts>
            <desc>[PATCH] Mac layering violation</desc>
            <filename>mac_menutarget_layering.patch</filename>
            <type>text/plain</type>
            <size>9588</size>
            <attacher name="Brian Weinstein">bweinstein</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MzQ1NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjggQEAKKzIwMTAtMTItMDcgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5A
YXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFBhcnQgb2YgTGF5ZXJpbmcgVmlvbGF0aW9uIGluIENvbnRleHRNZW51CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MDU4NgorICAgICAgICAKKyAg
ICAgICAgQ29udGV4dE1lbnVNYWMubW0gaGFkIGEgV2ViQ29yZU1lbnVUYXJnZXQgY2xhc3MsIHdo
aWNoIHdhcyByZXNwb25zaWJsZSBmb3Igd3JhcHBpbmcKKyAgICAgICAgYSBDb250ZXh0TWVudUl0
ZW0sIGFuZCBjYWxsaW5nIHRocm91Z2ggdG8gdGhlIENvbnRleHRNZW51Q29udHJvbGxlciB0byB2
YWxpZGF0ZSBpdAorICAgICAgICBhbmQgY2FsbCBhIGZ1bmN0aW9uIHdoZW4gaXQgd2FzIHNlbGVj
dGVkLgorICAgICAgICAKKyAgICAgICAgSXQgd2FzIGEgbGF5ZXJpbmcgdmlvbGF0aW9uIHRvIGhh
dmUgdGhpcyBjbGFzcyBoZXJlLCBiZWNhdXNlIENvbnRleHRNZW51IGNhbid0IGtub3cKKyAgICAg
ICAgYWJvdXQgQ29udGV4dE1lbnVDb250cm9sbGVyLgorICAgICAgICAKKyAgICAgICAgVGhpcyBw
YXRjaCBtb3ZlcyB0aGUgY2xhc3MgdGhhdCB3cmFwcyB0aGUgQ29udGV4dE1lbnVJdGVtcyB0byBX
ZWJLaXQvbWFjL1dlYkhUTUxWaWV3Lm1tLAorICAgICAgICBhbmQgc2V0cyB1cCB0aGUgbWVudSB0
YXJnZXRzIHRoZXJlLgorCisgICAgICAgIE5vIGNoYW5nZSBpbiBiZWhhdmlvciwgbm8gbmV3IHRl
c3RzLgorCisgICAgICAgICogV2ViQ29yZS5leHAuaW46IEFkZGVkIGZ1bmN0aW9uIHRoYXQgbmVl
ZHMgdG8gYmUgZXhwb3J0ZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjL0NvbnRleHRNZW51TWFj
Lm1tOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnU6OkNvbnRleHRNZW51KTogRG9uJ3Qg
c2V0IHRoZSBzaGFyZWRNZW51VGFyZ2V0IGFueW1vcmUuCisgICAgICAgIChXZWJDb3JlOjpDb250
ZXh0TWVudTo6YXBwZW5kSXRlbSk6IERvbid0IGNhbGwgc2V0TWVudUl0ZW1UYXJnZXQgKHRoaXMg
aXMgZG9uZSBpbiBXZWJLaXQgbm93KS4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51Ojpp
bnNlcnRJdGVtKTogRGl0dG8uCisKIDIwMTAtMTItMDcgIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9y
bWFuZEBpZ2FsaWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEd1c3Rhdm8gTm9yb25oYSBT
aWx2YS4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gNzM0NTEpCisrKyBXZWJDb3JlL1dlYkNvcmUuZXhw
LmluCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQ5LDYgKzEyNDksNyBAQCBfX1pON1dlYkNvcmUxNUNv
bnRleHRNZW51SXRlbTI2cmVsZWFzZVBsCiBfX1pON1dlYkNvcmUxNUNvbnRleHRNZW51SXRlbUMx
RU5TXzE3Q29udGV4dE1lbnVBY3Rpb25FUktOM1dURjZTdHJpbmdFYmJSTlMyXzZWZWN0b3JJUzBf
TG0wRUVFCiBfX1pON1dlYkNvcmUxNUNvbnRleHRNZW51SXRlbUMxRU5TXzE5Q29udGV4dE1lbnVJ
dGVtVHlwZUVOU18xN0NvbnRleHRNZW51QWN0aW9uRVJLTjNXVEY2U3RyaW5nRVBOU18xMUNvbnRl
eHRNZW51RQogX19aTjdXZWJDb3JlMTVDb250ZXh0TWVudUl0ZW1DMUVOU18xOUNvbnRleHRNZW51
SXRlbVR5cGVFTlNfMTdDb250ZXh0TWVudUFjdGlvbkVSS04zV1RGNlN0cmluZ0ViYgorX19aTjdX
ZWJDb3JlMTVDb250ZXh0TWVudUl0ZW1DMUVQMTBOU01lbnVJdGVtCiBfX1pON1dlYkNvcmUxNUNv
bnRleHRNZW51SXRlbUQxRXYKIF9fWk43V2ViQ29yZTIxQ29udGV4dE1lbnVDb250cm9sbGVyMTZj
bGVhckNvbnRleHRNZW51RXYKIF9fWk43V2ViQ29yZTIxQ29udGV4dE1lbnVDb250cm9sbGVyMjNj
b250ZXh0TWVudUl0ZW1TZWxlY3RlZEVQTlNfMTVDb250ZXh0TWVudUl0ZW1FCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL21hYy9Db250ZXh0TWVudU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL21hYy9Db250ZXh0TWVudU1hYy5tbQkocmV2aXNpb24gNzM0NTEpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL21hYy9Db250ZXh0TWVudU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjgs
NTUgKzI4LDYgQEAKIAogI2lmIEVOQUJMRShDT05URVhUX01FTlVTKQogCi0jaW5jbHVkZSAiQ29u
dGV4dE1lbnVDb250cm9sbGVyLmgiCi0KLUBpbnRlcmZhY2UgV2ViQ29yZU1lbnVUYXJnZXQgOiBO
U09iamVjdCB7Ci0gICAgV2ViQ29yZTo6Q29udGV4dE1lbnVDb250cm9sbGVyKiBfbWVudUNvbnRy
b2xsZXI7Ci19Ci0rIChXZWJDb3JlTWVudVRhcmdldCopc2hhcmVkTWVudVRhcmdldDsKLS0gKFdl
YkNvcmU6OkNvbnRleHRNZW51Q29udHJvbGxlciopbWVudUNvbnRyb2xsZXI7Ci0tICh2b2lkKXNl
dE1lbnVDb250cm9sbGVyOihXZWJDb3JlOjpDb250ZXh0TWVudUNvbnRyb2xsZXIqKW1lbnVDb250
cm9sbGVyOwotLSAodm9pZClmb3J3YXJkQ29udGV4dE1lbnVBY3Rpb246KGlkKXNlbmRlcjsKLS0g
KEJPT0wpdmFsaWRhdGVNZW51SXRlbTooTlNNZW51SXRlbSAqKWl0ZW07Ci1AZW5kCi0KLXN0YXRp
YyBXZWJDb3JlTWVudVRhcmdldCogdGFyZ2V0OwotCi1AaW1wbGVtZW50YXRpb24gV2ViQ29yZU1l
bnVUYXJnZXQKLQotKyAoV2ViQ29yZU1lbnVUYXJnZXQqKXNoYXJlZE1lbnVUYXJnZXQKLXsKLSAg
ICBpZiAoIXRhcmdldCkKLSAgICAgICAgdGFyZ2V0ID0gW1tXZWJDb3JlTWVudVRhcmdldCBhbGxv
Y10gaW5pdF07Ci0gICAgcmV0dXJuIHRhcmdldDsKLX0KLQotLSAoV2ViQ29yZTo6Q29udGV4dE1l
bnVDb250cm9sbGVyKiltZW51Q29udHJvbGxlcgotewotICAgIHJldHVybiBfbWVudUNvbnRyb2xs
ZXI7Ci19Ci0KLS0gKHZvaWQpc2V0TWVudUNvbnRyb2xsZXI6KFdlYkNvcmU6OkNvbnRleHRNZW51
Q29udHJvbGxlciopbWVudUNvbnRyb2xsZXIKLXsKLSAgICBfbWVudUNvbnRyb2xsZXIgPSBtZW51
Q29udHJvbGxlcjsKLX0KLQotLSAodm9pZClmb3J3YXJkQ29udGV4dE1lbnVBY3Rpb246KGlkKXNl
bmRlcgotewotICAgIFdlYkNvcmU6OkNvbnRleHRNZW51SXRlbSBpdGVtKFdlYkNvcmU6OkFjdGlv
blR5cGUsIHN0YXRpY19jYXN0PFdlYkNvcmU6OkNvbnRleHRNZW51QWN0aW9uPihbc2VuZGVyIHRh
Z10pLCBbc2VuZGVyIHRpdGxlXSk7Ci0gICAgX21lbnVDb250cm9sbGVyLT5jb250ZXh0TWVudUl0
ZW1TZWxlY3RlZCgmaXRlbSk7Ci19Ci0KLS0gKEJPT0wpdmFsaWRhdGVNZW51SXRlbTooTlNNZW51
SXRlbSAqKWl0ZW0KLXsKLSAgICBXZWJDb3JlOjpDb250ZXh0TWVudUl0ZW0gY29yZUl0ZW0oaXRl
bSk7Ci0gICAgQVNTRVJUKF9tZW51Q29udHJvbGxlci0+Y29udGV4dE1lbnUoKSk7Ci0gICAgX21l
bnVDb250cm9sbGVyLT5jb250ZXh0TWVudSgpLT5jaGVja09yRW5hYmxlSWZOZWVkZWQoY29yZUl0
ZW0pOwotICAgIHJldHVybiBjb3JlSXRlbS5lbmFibGVkKCk7Ci19Ci0KLUBlbmQKLQogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBDb250ZXh0TWVudTo6Q29udGV4dE1lbnUoY29uc3QgSGl0VGVzdFJl
c3VsdCYgcmVzdWx0KQpAQCAtODUsMzUgKzM2LDIzIEBAIENvbnRleHRNZW51OjpDb250ZXh0TWVu
dShjb25zdCBIaXRUZXN0UmUKICAgICBOU011dGFibGVBcnJheSogYXJyYXkgPSBbW05TTXV0YWJs
ZUFycmF5IGFsbG9jXSBpbml0XTsKICAgICBtX3BsYXRmb3JtRGVzY3JpcHRpb24gPSBhcnJheTsK
ICAgICBbYXJyYXkgcmVsZWFzZV07Ci0KLSAgICBbW1dlYkNvcmVNZW51VGFyZ2V0IHNoYXJlZE1l
bnVUYXJnZXRdIHNldE1lbnVDb250cm9sbGVyOmNvbnRyb2xsZXIoKV07CiB9CiAKIENvbnRleHRN
ZW51OjpDb250ZXh0TWVudShjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IFBsYXRm
b3JtTWVudURlc2NyaXB0aW9uIG1lbnUpCiAgICAgOiBtX2hpdFRlc3RSZXN1bHQocmVzdWx0KQog
ICAgICwgbV9wbGF0Zm9ybURlc2NyaXB0aW9uKG1lbnUpCiB7Ci0gICAgW1tXZWJDb3JlTWVudVRh
cmdldCBzaGFyZWRNZW51VGFyZ2V0XSBzZXRNZW51Q29udHJvbGxlcjpjb250cm9sbGVyKCldOwog
fQogCiBDb250ZXh0TWVudTo6fkNvbnRleHRNZW51KCkKIHsKIH0KLSAKLXN0YXRpYyB2b2lkIHNl
dE1lbnVJdGVtVGFyZ2V0KE5TTWVudUl0ZW0qIG1lbnVJdGVtKQotewotICAgIFttZW51SXRlbSBz
ZXRUYXJnZXQ6W1dlYkNvcmVNZW51VGFyZ2V0IHNoYXJlZE1lbnVUYXJnZXRdXTsKLSAgICBbbWVu
dUl0ZW0gc2V0QWN0aW9uOkBzZWxlY3Rvcihmb3J3YXJkQ29udGV4dE1lbnVBY3Rpb246KV07Ci19
CiAKIHZvaWQgQ29udGV4dE1lbnU6OmFwcGVuZEl0ZW0oQ29udGV4dE1lbnVJdGVtJiBpdGVtKQog
ewogICAgIGNoZWNrT3JFbmFibGVJZk5lZWRlZChpdGVtKTsKIAotICAgIENvbnRleHRNZW51SXRl
bVR5cGUgdHlwZSA9IGl0ZW0udHlwZSgpOwogICAgIE5TTWVudUl0ZW0qIHBsYXRmb3JtSXRlbSA9
IGl0ZW0ucmVsZWFzZVBsYXRmb3JtRGVzY3JpcHRpb24oKTsKLSAgICBpZiAodHlwZSA9PSBBY3Rp
b25UeXBlKQotICAgICAgICBzZXRNZW51SXRlbVRhcmdldChwbGF0Zm9ybUl0ZW0pOwogCiAgICAg
W21fcGxhdGZvcm1EZXNjcmlwdGlvbi5nZXQoKSBhZGRPYmplY3Q6cGxhdGZvcm1JdGVtXTsKICAg
ICBbcGxhdGZvcm1JdGVtIHJlbGVhc2VdOwpAQCAtMTIzLDEwICs2Miw3IEBAIHZvaWQgQ29udGV4
dE1lbnU6Omluc2VydEl0ZW0odW5zaWduZWQgcG8KIHsKICAgICBjaGVja09yRW5hYmxlSWZOZWVk
ZWQoaXRlbSk7CiAKLSAgICBDb250ZXh0TWVudUl0ZW1UeXBlIHR5cGUgPSBpdGVtLnR5cGUoKTsK
ICAgICBOU01lbnVJdGVtKiBwbGF0Zm9ybUl0ZW0gPSBpdGVtLnJlbGVhc2VQbGF0Zm9ybURlc2Ny
aXB0aW9uKCk7Ci0gICAgaWYgKHR5cGUgPT0gQWN0aW9uVHlwZSkKLSAgICAgICAgc2V0TWVudUl0
ZW1UYXJnZXQocGxhdGZvcm1JdGVtKTsKIAogICAgIFttX3BsYXRmb3JtRGVzY3JpcHRpb24uZ2V0
KCkgaW5zZXJ0T2JqZWN0OnBsYXRmb3JtSXRlbSBhdEluZGV4OnBvc2l0aW9uXTsKICAgICBbcGxh
dGZvcm1JdGVtIHJlbGVhc2VdOwpJbmRleDogV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDczNDU2KQorKysgV2ViS2l0L21h
Yy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNyBAQAorMjAxMC0xMi0wNyAg
QnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUGFydCBvZiBMYXllcmluZyBWaW9sYXRp
b24gaW4gQ29udGV4dE1lbnUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTUwNTg2CisgICAgICAgIAorICAgICAgICBNb3ZlIFdlYk1lbnVUYXJnZXQgZnJv
bSBDb250ZXh0TWVudU1hYyB0byBoZXJlLCBiZWNhdXNlIGhhdmluZyBpdCBpbiBDb250ZXh0TWVu
dU1hYworICAgICAgICB3YXMgYSBsYXllcmluZyB2aW9sYXRpb24uIEFsc28sIG1ha2Ugc3VyZSB3
ZSBzZXQgdGhlIG1lbnUgaXRlbSB0YXJnZXRzIGZvciBhbGwgbWVudQorICAgICAgICBpdGVtcyBi
ZWZvcmUgc2hvd2luZyB0aGVtLCBiZWNhdXNlIHRoZSBDb250ZXh0TWVudSBjb25zdHJ1Y3RvciBk
b2Vzbid0IGRvIHRoYXQgYW55bW9yZS4KKworICAgICAgICAqIFdlYlZpZXcvV2ViSFRNTFZpZXcu
bW06CisgICAgICAgICgrW1dlYk1lbnVUYXJnZXQgc2hhcmVkTWVudVRhcmdldF0pOiBNb3ZlZCBm
cm9tIENvbnRleHRNZW51TWFjLm1tLgorICAgICAgICAoLVtXZWJNZW51VGFyZ2V0IFdlYkNvcmU6
Ol0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViTWVudVRhcmdldCBzZXRNZW51Q29udHJvbGxlcjpX
ZWJDb3JlOjpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYk1lbnVUYXJnZXQgZm9yd2FyZENvbnRl
eHRNZW51QWN0aW9uOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViTWVudVRhcmdldCB2YWxpZGF0
ZU1lbnVJdGVtOl0pOiBEaXR0by4KKworICAgICAgICAoc2V0TWVudUl0ZW1UYXJnZXQpOiBTZXRz
IHRoZSB0YXJnZXQgb2YgdGhlIE5TTWVudUl0ZW0gdG8gdGhlIHNoYXJlZCBXZWJNZW51VGFyZ2V0
LgorICAgICAgICAoc2V0TWVudVRhcmdldHMpOiBSZWN1cnNpdmVseSBpdGVyYXRlcyBvdmVyIGFs
bCBOU01lbnVJdGVtcyBpbiBhbiBOU01lbnUgKGluY2x1ZGluZworICAgICAgICAgICAgc3VibWVu
dXMpLCBhbmQgY2FsbHMgc2V0TWVudUl0ZW1UYXJnZXQgb24gdGhlbS4KKyAgICAgICAgKC1bV2Vi
SFRNTFZpZXcgbWVudUZvckV2ZW50Ol0pOiBDYWxsIHNldE1lbnVUYXJnZXQgb24gYWxsIHRoZSBt
ZW51IGl0ZW1zIGJlZm9yZSBhZGRpbmcKKyAgICAgICAgICAgIHRoZW0gdG8gdGhlIG1lbnUuCisK
IDIwMTAtMTItMDYgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IFNhbSBXZWluaWcuCkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZp
ZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCShy
ZXZpc2lvbiA3MzQ1MSkKKysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQkod29y
a2luZyBjb3B5KQpAQCAtMTI5LDYgKzEyOSw1MyBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVz
OwogdXNpbmcgbmFtZXNwYWNlIFdURjsKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKK0BpbnRlcmZh
Y2UgV2ViTWVudVRhcmdldCA6IE5TT2JqZWN0IHsKKyAgICBXZWJDb3JlOjpDb250ZXh0TWVudUNv
bnRyb2xsZXIqIF9tZW51Q29udHJvbGxlcjsKK30KKysgKFdlYk1lbnVUYXJnZXQqKXNoYXJlZE1l
bnVUYXJnZXQ7CistIChXZWJDb3JlOjpDb250ZXh0TWVudUNvbnRyb2xsZXIqKW1lbnVDb250cm9s
bGVyOworLSAodm9pZClzZXRNZW51Q29udHJvbGxlcjooV2ViQ29yZTo6Q29udGV4dE1lbnVDb250
cm9sbGVyKiltZW51Q29udHJvbGxlcjsKKy0gKHZvaWQpZm9yd2FyZENvbnRleHRNZW51QWN0aW9u
OihpZClzZW5kZXI7CistIChCT09MKXZhbGlkYXRlTWVudUl0ZW06KE5TTWVudUl0ZW0gKilpdGVt
OworQGVuZAorCitzdGF0aWMgV2ViTWVudVRhcmdldCogdGFyZ2V0OworCitAaW1wbGVtZW50YXRp
b24gV2ViTWVudVRhcmdldAorCisrIChXZWJNZW51VGFyZ2V0KilzaGFyZWRNZW51VGFyZ2V0Cit7
CisgICAgaWYgKCF0YXJnZXQpCisgICAgICAgIHRhcmdldCA9IFtbV2ViTWVudVRhcmdldCBhbGxv
Y10gaW5pdF07CisgICAgcmV0dXJuIHRhcmdldDsKK30KKworLSAoV2ViQ29yZTo6Q29udGV4dE1l
bnVDb250cm9sbGVyKiltZW51Q29udHJvbGxlcgoreworICAgIHJldHVybiBfbWVudUNvbnRyb2xs
ZXI7Cit9CisKKy0gKHZvaWQpc2V0TWVudUNvbnRyb2xsZXI6KFdlYkNvcmU6OkNvbnRleHRNZW51
Q29udHJvbGxlciopbWVudUNvbnRyb2xsZXIKK3sKKyAgICBfbWVudUNvbnRyb2xsZXIgPSBtZW51
Q29udHJvbGxlcjsKK30KKworLSAodm9pZClmb3J3YXJkQ29udGV4dE1lbnVBY3Rpb246KGlkKXNl
bmRlcgoreworICAgIFdlYkNvcmU6OkNvbnRleHRNZW51SXRlbSBpdGVtKFdlYkNvcmU6OkFjdGlv
blR5cGUsIHN0YXRpY19jYXN0PFdlYkNvcmU6OkNvbnRleHRNZW51QWN0aW9uPihbc2VuZGVyIHRh
Z10pLCBbc2VuZGVyIHRpdGxlXSk7CisgICAgX21lbnVDb250cm9sbGVyLT5jb250ZXh0TWVudUl0
ZW1TZWxlY3RlZCgmaXRlbSk7Cit9CisKKy0gKEJPT0wpdmFsaWRhdGVNZW51SXRlbTooTlNNZW51
SXRlbSAqKWl0ZW0KK3sKKyAgICBXZWJDb3JlOjpDb250ZXh0TWVudUl0ZW0gY29yZUl0ZW0oaXRl
bSk7CisgICAgQVNTRVJUKF9tZW51Q29udHJvbGxlci0+Y29udGV4dE1lbnUoKSk7CisgICAgX21l
bnVDb250cm9sbGVyLT5jb250ZXh0TWVudSgpLT5jaGVja09yRW5hYmxlSWZOZWVkZWQoY29yZUl0
ZW0pOworICAgIHJldHVybiBjb3JlSXRlbS5lbmFibGVkKCk7Cit9CisKK0BlbmQKKwogQGludGVy
ZmFjZSBOU1dpbmRvdyAoQm9yZGVyVmlld0FjY2VzcykKIC0gKE5TVmlldyopX3dlYl9ib3JkZXJW
aWV3OwogQGVuZApAQCAtMzIyMyw2ICszMjcwLDIyIEBAIC0gKHZvaWQpcmlnaHRNb3VzZVVwOihO
U0V2ZW50ICopZXZlbnQKICAgICAgICAgY29yZWZyYW1lLT5ldmVudEhhbmRsZXIoKS0+bW91c2VV
cChldmVudCk7CiB9CiAKK3N0YXRpYyB2b2lkIHNldE1lbnVJdGVtVGFyZ2V0KE5TTWVudUl0ZW0q
IG1lbnVJdGVtKQoreworICAgIFttZW51SXRlbSBzZXRUYXJnZXQ6W1dlYk1lbnVUYXJnZXQgc2hh
cmVkTWVudVRhcmdldF1dOworICAgIFttZW51SXRlbSBzZXRBY3Rpb246QHNlbGVjdG9yKGZvcndh
cmRDb250ZXh0TWVudUFjdGlvbjopXTsKK30KKworc3RhdGljIHZvaWQgc2V0TWVudVRhcmdldHMo
TlNNZW51KiBtZW51KQoreworICAgIGZvciAoTlNJbnRlZ2VyIGkgPSAwOyBpIDwgW21lbnUgbnVt
YmVyT2ZJdGVtc107ICsraSkgeworICAgICAgICBOU01lbnVJdGVtICppdGVtID0gW21lbnUgaXRl
bUF0SW5kZXg6aV07CisgICAgICAgIHNldE1lbnVJdGVtVGFyZ2V0KGl0ZW0pOworICAgICAgICBp
ZiAoW2l0ZW0gaGFzU3VibWVudV0pCisgICAgICAgICAgICBzZXRNZW51VGFyZ2V0cyhbaXRlbSBz
dWJtZW51XSk7CisgICAgfQorfQorCiAtIChOU01lbnUgKiltZW51Rm9yRXZlbnQ6KE5TRXZlbnQg
KilldmVudAogewogICAgIC8vIFRoZXJlJ3MgYSBjaGFuY2UgdGhhdCBpZiB3ZSBydW4gYSBuZXN0
ZWQgZXZlbnQgbG9vcCB0aGUgZXZlbnQgd2lsbCBiZSByZWxlYXNlZC4KQEAgLTMyNzAsNiArMzMz
MywxMCBAQCAtIChOU01lbnUgKiltZW51Rm9yRXZlbnQ6KE5TRXZlbnQgKilldmVuCiAgICAgTlNN
ZW51KiBtZW51ID0gW1tbTlNNZW51IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CiAgICAgZm9y
IChOU1VJbnRlZ2VyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykKICAgICAgICAgW21lbnUgYWRkSXRl
bTpbbWVudUl0ZW1zIG9iamVjdEF0SW5kZXg6aV1dOworICAgIHNldE1lbnVUYXJnZXRzKG1lbnUp
OworICAgIAorICAgIFtbV2ViTWVudVRhcmdldCBzaGFyZWRNZW51VGFyZ2V0XSBzZXRNZW51Q29u
dHJvbGxlcjpwYWdlLT5jb250ZXh0TWVudUNvbnRyb2xsZXIoKV07CisgICAgCiAgICAgcmV0dXJu
IG1lbnU7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75850</attachid>
            <date>2010-12-07 16:55:06 -0800</date>
            <delta_ts>2010-12-07 20:15:29 -0800</delta_ts>
            <desc>[PATCH] Fix - Win, Qt, Mac</desc>
            <filename>context_menu_layering_violation_fix.patch</filename>
            <type>text/plain</type>
            <size>124164</size>
            <attacher name="Brian Weinstein">bweinstein</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MzQ2OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODMgQEAKKzIwMTAtMTItMDcgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5A
YXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIExheWVyaW5nIFZpb2xhdGlvbiBpbiBDb250ZXh0TWVudSAtIG1lbWJlciB2YXJpYWJsZSBv
ZiB0eXBlIEhpdFRlc3RSZXN1bHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTUwNTg2CisgICAgICAgIAorICAgICAgICBDb250ZXh0TWVudSBoYWQgYSBs
YXllcmluZyB2aW9sYXRpb24gYnkgaGF2aW5nIGEgbWVtYmVyIHZhcmlhYmxlIG9mIHR5cGUgSGl0
VGVzdFJlc3VsdCwgYmVjYXVzZQorICAgICAgICBjbGFzc2VzIGluIFdlYkNvcmUvcGxhdGZvcm0g
Y2FuJ3Qga25vdyBhYm91dCBjbGFzc2VzIGluIFdlYkNvcmUuCisgICAgICAgIAorICAgICAgICBU
aGlzIHBhdGNoIG1vdmVzIHRoZSBIaXRUZXN0UmVzdWx0IGFuZCBhbGwgZnVuY3Rpb25zIHRoYXQg
dXNlIGl0IG91dCBvZiBDb250ZXh0TWVudSBpbnRvIENvbnRleHRNZW51Q29udHJvbGxlci4KKyAg
ICAgICAgQWxsIG9mIHRoZSBmdW5jdGlvbnMgdGhhdCBkZWFsdCB3aXRoIHBvcHVsYXRpbmcgdGhl
IENvbnRleHRNZW51IGFyZSBub3cgaW4gQ29udGV4dE1lbnVDb250cm9sbGVyLCBhbmQgdGhpcwor
ICAgICAgICBhbGxvd2VkIHVzIHRvIGRlbGV0ZSB0aGUgQ29udGV4dE1lbnUgZmlsZSwgcHV0dGlu
ZyBhbGwgb2YgdGhlIGNyb3NzLXBsYXRmb3JtIGNvZGUgdGhhdCB1c2VkIHRvIGJlIGl0CisgICAg
ICAgIGluIENvbnRleHRNZW51Q29udHJvbGxlciwgYW5kIHRoZSByZXN0IG9mIHRoZSBjb2RlIGlz
IGluIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBmaWxlcy4KKworICAgICAgICBObyBjaGFuZ2UgaW4g
YmVoYXZpb3IsIG5vIG5ldyB0ZXN0cy4KKworICAgICAgICAqIEFuZHJvaWQubWs6IFJlbW92ZWQg
Q29udGV4dE1lbnUuY3BwLgorICAgICAgICAqIENNYWtlTGlzdHMudHh0OiBEaXR0by4KKyAgICAg
ICAgKiBHTlVtYWtlZmlsZS5hbTogRGl0dG8uCisgICAgICAgICogV2ViQ29yZS5neXBpOiBEaXR0
by4KKyAgICAgICAgKiBXZWJDb3JlLnBybzogRGl0dG8uCisgICAgICAgICogV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2o6IERpdHRvLgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajogRGl0dG8uCisKKyAgICAgICAgKiBwYWdlL0NvbnRleHRNZW51Q29udHJv
bGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0TWVudUNvbnRyb2xsZXI6OkNvbnRl
eHRNZW51Q29udHJvbGxlcik6IEluaXRpYWxpemVkIG1faGl0VGVzdFJlc3VsdCB0byBhbiBlbXB0
eSBIaXRUZXN0UmVzdWx0LgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVDb250cm9sbGVy
OjpoYW5kbGVDb250ZXh0TWVudUV2ZW50KTogQ2FsbCBwb3B1bGF0ZSBvbiB0aGUgQ29udGV4dE1l
bnVDb250cm9sbGVyIGluc3RlYWQKKyAgICAgICAgICAgIG9mIHRoZSBDb250ZXh0TWVudS4KKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51Q29udHJvbGxlcjo6Y3JlYXRlQ29udGV4dE1lbnUp
OiBGaXggc29tZSBpbmRpbmF0aW9uLCBhbmQgc3RvcmUgdGhlIEhpdFRlc3RSZXN1bHQgaW4gYSBt
ZW1iZXIKKyAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1l
bnVDb250cm9sbGVyOjpzaG93Q29udGV4dE1lbnUpOiBDYWxsIGFkZEluc3BlY3RFbGVtZW50SXRl
bSBvbiB0aGUgQ29udGV4dE1lbnVDb250cm9sbGVyLgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4
dE1lbnVDb250cm9sbGVyOjpjb250ZXh0TWVudUl0ZW1TZWxlY3RlZCk6IFVzZSBtX2hpdFRlc3RS
ZXN1bHQgd2hlbmV2ZXIgd2UgbmVlZCBhIEhpdFRlc3RSZXN1bHQuCisgICAgICAgIChXZWJDb3Jl
OjpDb250ZXh0TWVudUNvbnRyb2xsZXI6OmFwcGVuZEl0ZW0pOiBWYWxpZGF0ZXMgdGhlIGl0ZW0g
Zm9yIGl0cyBzdGF0ZSwgYW5kIHRoZW4gYXBwZW5kcyBpdCB0byB0aGUgcGFyZW50IG1lbnUuCisg
ICAgICAgICAgICBUaGlzIGFsbG93ZWQgdXMgdG8gbW92ZSBjaGVja09yRW5hYmxlSWZOZWVkZWQg
ZnJvbSBDb250ZXh0TWVudS4KKworICAgICAgICBUaGVzZSBmdW5jdGlvbnMgd2VyZSBhbGwgbW92
ZWQgZnJvbSBDb250ZXh0TWVudSwgYW5kIGNoYW5nZWQgc2xpZ2h0bHkgdG8gZml0IGluIENvbnRl
eHRNZW51Q29udHJvbGxlci4KKyAgICAgICAgQWxsIGNhbGxzIHRvIENvbnRleHRNZW51OjphcHBl
bmRJdGVtIHdlcmUgY2hhbmdlZCB0byBDb250ZXh0TWVudUNvbnRyb2xsZXI6OmFwcGVuZEl0ZW0s
IHdoaWNoIHRha2VzIGNhcmUKKyAgICAgICAgb2YgdmFsaWRhdGluZyB0aGUgbWVudS4KKyAgICAg
ICAgKFdlYkNvcmU6OnNlcGFyYXRvckl0ZW0pOiBNb3ZlZCBmcm9tIENvbnRleHRNZW51LgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVDb250cm9sbGVyOjpjcmVhdGVBbmRBcHBlbmRGb250
U3ViTWVudSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVDb250cm9sbGVy
OjpjcmVhdGVBbmRBcHBlbmRTcGVsbGluZ0FuZEdyYW1tYXJTdWJNZW51KTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNyZWF0ZUFuZEFwcGVuZFNwZWVj
aFN1Yk1lbnUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51Q29udHJvbGxl
cjo6Y3JlYXRlQW5kQXBwZW5kV3JpdGluZ0RpcmVjdGlvblN1Yk1lbnUpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRleHRNZW51Q29udHJvbGxlcjo6Y3JlYXRlQW5kQXBwZW5kVGV4dERp
cmVjdGlvblN1Yk1lbnUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51Q29u
dHJvbGxlcjo6Y3JlYXRlQW5kQXBwZW5kU3Vic3RpdHV0aW9uc1N1Yk1lbnUpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51Q29udHJvbGxlcjo6Y3JlYXRlQW5kQXBwZW5kVHJh
bnNmb3JtYXRpb25zU3ViTWVudSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6c2VsZWN0aW9u
Q29udGFpbnNQb3NzaWJsZVdvcmQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRN
ZW51Q29udHJvbGxlcjo6cG9wdWxhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
eHRNZW51Q29udHJvbGxlcjo6YWRkSW5zcGVjdEVsZW1lbnRJdGVtKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNoZWNrT3JFbmFibGVJZk5lZWRlZCk6
IERpdHRvLgorICAgICAgICAKKyAgICAgICAgKiBwYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5o
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVDb250cm9sbGVyOjpoaXRUZXN0UmVzdWx0
KTogUmV0dXJucyB0aGUgSGl0VGVzdFJlc3VsdCBvZiB0aGUgY3VycmVudCBDb250ZXh0TWVudS4K
KworICAgICAgICAqIHBsYXRmb3JtL0NvbnRleHRNZW51LmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9Db250ZXh0TWVudS5oOgorICAgICAgICAqIHBsYXRmb3JtL2VmbC9Db250ZXh0
TWVudUVmbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0TWVudTo6Q29udGV4dE1lbnUp
OiBSZW1vdmVkIG1faGl0VGVzdFJlc3VsdCBmcm9tIHRoZSBjb25zdHJ1Y3Rvci4KKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRleHRNZW51OjphcHBlbmRJdGVtKTogUmVtb3ZlZCB0aGUgY2FsbCB0byBj
aGVja09yRW5hYmxlSWZOZWVkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3RrL0NvbnRleHRNZW51
R3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51OjpDb250ZXh0TWVudSk6IFJl
bW92ZWQgbV9oaXRUZXN0UmVzdWx0IGZyb20gdGhlIGNvbnN0cnVjdG9yLgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGV4dE1lbnU6OmFwcGVuZEl0ZW0pOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9y
bS9oYWlrdS9Db250ZXh0TWVudUhhaWt1LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRN
ZW51OjpDb250ZXh0TWVudSk6IFJlbW92ZWQgbV9oaXRUZXN0UmVzdWx0IGZyb20gdGhlIGNvbnN0
cnVjdG9yLgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnU6OmFwcGVuZEl0ZW0pOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51OjppbnNlcnRJdGVtKTogRGl0dG8uCisg
ICAgICAgICogcGxhdGZvcm0vbWFjL0NvbnRleHRNZW51TWFjLm1tOgorICAgICAgICAoLVtXZWJD
b3JlTWVudVRhcmdldCB2YWxpZGF0ZU1lbnVJdGVtOl0pOiBDYWxscyBjaGVja09yRW5hYmxlSWZO
ZWVkZWQgb24gdGhlIGNvbnRyb2xsZXIgaW5zdGVhZCBvZgorICAgICAgICAgICAgdGhlIGNvbnRl
eHQgbWVudS4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51OjpDb250ZXh0TWVudSk6IFJl
bW92ZWQgbV9oaXRUZXN0UmVzdWx0IGZyb20gdGhlIGNvbnN0cnVjdG9yLgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGV4dE1lbnU6OmFwcGVuZEl0ZW0pOiBSZW1vdmVkIHRoZSBjYWxsIHRvIGNoZWNr
T3JFbmFibGVJZk5lZWRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51OjppbnNlcnRJ
dGVtKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vd2luL0NvbnRleHRNZW51V2luLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51OjpDb250ZXh0TWVudSk6IFJlbW92ZWQgbV9o
aXRUZXN0UmVzdWx0IGZyb20gdGhlIGNvbnN0cnVjdG9yLgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGV4dE1lbnU6Omluc2VydEl0ZW0pOiBSZW1vdmVkIHRoZSBjYWxsIHRvIGNoZWNrT3JFbmFibGVJ
Zk5lZWRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS93eC9Db250ZXh0TWVudVd4LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRleHRNZW51OjpDb250ZXh0TWVudSk6IFJlbW92ZWQgbV9oaXRUZXN0
UmVzdWx0IGZyb20gdGhlIGNvbnN0cnVjdG9yLgorICAgICAgICAoQ29udGV4dE1lbnU6OmFwcGVu
ZEl0ZW0pOiBEaXR0by4KKwogMjAxMC0xMi0wNyAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVp
bkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSm9obiBTdWxsaXZhbi4KSW5kZXg6
IFdlYkNvcmUvQW5kcm9pZC5tawo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0FuZHJvaWQubWsJKHJl
dmlzaW9uIDczNDY5KQorKysgV2ViQ29yZS9BbmRyb2lkLm1rCSh3b3JraW5nIGNvcHkpCkBAIC00
NTAsNyArNDUwLDYgQEAgTE9DQUxfU1JDX0ZJTEVTIDo9ICQoTE9DQUxfU1JDX0ZJTEVTKSBcCiAJ
XAogCXBsYXRmb3JtL0FyZW5hLmNwcCBcCiAJcGxhdGZvcm0vQ29udGVudFR5cGUuY3BwIFwKLQlw
bGF0Zm9ybS9Db250ZXh0TWVudS5jcHAgXAogCXBsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmNw
cCBcCiAJcGxhdGZvcm0vRGVwcmVjYXRlZFB0ckxpc3RJbXBsLmNwcCBcCiAJcGxhdGZvcm0vRHJh
Z0RhdGEuY3BwIFwKSW5kZXg6IFdlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gNzM0NjkpCisrKyBXZWJDb3JlL0NNYWtl
TGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMjcwLDcgKzEyNzAsNiBAQCBTRVQoV2ViQ29y
ZV9TT1VSQ0VTCiAKICAgICBwbGF0Zm9ybS9BcmVuYS5jcHAKICAgICBwbGF0Zm9ybS9Db250ZW50
VHlwZS5jcHAKLSAgICBwbGF0Zm9ybS9Db250ZXh0TWVudS5jcHAKICAgICBwbGF0Zm9ybS9Dcm9z
c1RocmVhZENvcGllci5jcHAKICAgICBwbGF0Zm9ybS9EZXByZWNhdGVkUHRyTGlzdEltcGwuY3Bw
CiAgICAgcGxhdGZvcm0vRHJhZ0RhdGEuY3BwCkluZGV4OiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFt
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDczNDY5KQor
KysgV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMjI1OCw3ICsyMjU4
LDYgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3BsYXRmb3JtL0F1dG9kcmFpbmVk
UG9vbC5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL0NvbnRlbnRUeXBlLmNwcCBcCiAJV2ViQ29yZS9w
bGF0Zm9ybS9Db250ZW50VHlwZS5oIFwKLQlXZWJDb3JlL3BsYXRmb3JtL0NvbnRleHRNZW51LmNw
cCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9Db250ZXh0TWVudS5oIFwKIAlXZWJDb3JlL3BsYXRmb3Jt
L0NvbnRleHRNZW51SXRlbS5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL0Nvb2tpZS5oIFwKSW5kZXg6
IFdlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmV4
cC5pbgkocmV2aXNpb24gNzM0NjkpCisrKyBXZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjUyLDEyICsxMjUyLDEyIEBAIF9fWk43V2ViQ29yZTE1Q29udGV4dE1lbnVJ
dGVtQzFFTlNfMTlDb24KIF9fWk43V2ViQ29yZTE1Q29udGV4dE1lbnVJdGVtQzFFUDEwTlNNZW51
SXRlbQogX19aTjdXZWJDb3JlMTVDb250ZXh0TWVudUl0ZW1EMUV2CiBfX1pON1dlYkNvcmUyMUNv
bnRleHRNZW51Q29udHJvbGxlcjE2Y2xlYXJDb250ZXh0TWVudUV2CitfX1pOSzdXZWJDb3JlMjFD
b250ZXh0TWVudUNvbnRyb2xsZXIyMWNoZWNrT3JFbmFibGVJZk5lZWRlZEVSTlNfMTVDb250ZXh0
TWVudUl0ZW1FCiBfX1pON1dlYkNvcmUyMUNvbnRleHRNZW51Q29udHJvbGxlcjIzY29udGV4dE1l
bnVJdGVtU2VsZWN0ZWRFUE5TXzE1Q29udGV4dE1lbnVJdGVtRQogX19aTjdXZWJDb3JlMjFjb250
ZXh0TWVudUl0ZW1WZWN0b3JFUDE0TlNNdXRhYmxlQXJyYXkKIF9fWk43V2ViQ29yZTIzcGxhdGZv
cm1NZW51RGVzY3JpcHRpb25FUk4zV1RGNlZlY3RvcklOU18xNUNvbnRleHRNZW51SXRlbUVMbTBF
RUUKIF9fWk43V2ViQ29yZTZDaHJvbWUxNXNob3dDb250ZXh0TWVudUV2CiBfX1pOSzdXZWJDb3Jl
MTFDb250ZXh0TWVudTE5cGxhdGZvcm1EZXNjcmlwdGlvbkV2Ci1fX1pOSzdXZWJDb3JlMTFDb250
ZXh0TWVudTIxY2hlY2tPckVuYWJsZUlmTmVlZGVkRVJOU18xNUNvbnRleHRNZW51SXRlbUUKIF9f
Wk5LN1dlYkNvcmUxNUNvbnRleHRNZW51SXRlbTE1cGxhdGZvcm1TdWJNZW51RXYKIF9fWk5LN1dl
YkNvcmUxNUNvbnRleHRNZW51SXRlbTR0eXBlRXYKIF9fWk5LN1dlYkNvcmUxNUNvbnRleHRNZW51
SXRlbTV0aXRsZUV2CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gNzM0NjkpCisrKyBXZWJDb3JlL1dlYkNvcmUu
Z3lwaQkod29ya2luZyBjb3B5KQpAQCAtMzQyMSw3ICszNDIxLDYgQEAKICAgICAgICAgICAgICdw
bGF0Zm9ybS9BdXRvZHJhaW5lZFBvb2wuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vQ29udGVu
dFR5cGUuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9Db250ZW50VHlwZS5oJywKLSAgICAg
ICAgICAgICdwbGF0Zm9ybS9Db250ZXh0TWVudS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L0NvbnRleHRNZW51LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL0NvbnRleHRNZW51SXRlbS5o
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9Db29raWUuaCcsCkluZGV4OiBXZWJDb3JlL1dlYkNv
cmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDczNDY5
KQorKysgV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtMTE1MSw3ICsxMTUx
LDYgQEAgU09VUkNFUyArPSBcCiAgICAgcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5jcHAgXAog
ICAgIHBsYXRmb3JtL3RleHQvSHlwaGVuYXRpb24uY3BwIFwKICAgICBwbGF0Zm9ybS9Db250ZW50
VHlwZS5jcHAgXAotICAgIHBsYXRmb3JtL0NvbnRleHRNZW51LmNwcCBcCiAgICAgcGxhdGZvcm0v
Q3Jvc3NUaHJlYWRDb3BpZXIuY3BwIFwKICAgICBwbGF0Zm9ybS9EZXByZWNhdGVkUHRyTGlzdElt
cGwuY3BwIFwKICAgICBwbGF0Zm9ybS9EcmFnRGF0YS5jcHAgXApJbmRleDogV2ViQ29yZS9XZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA3MzQ2OSkKKysrIFdlYkNvcmUvV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTI1MzE0LDEwICsyNTMx
NCw2IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XHBsYXRmb3JtXENvbnRleHRNZW51LmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQog
CQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cQ29udGV4dE1lbnUuaCIKIAkJCQk+CiAJCQk8
L0ZpbGU+CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
cmV2aXNpb24gNzM0NjkpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjgzOSw3ICsyODM5LDYgQEAKIAkJOTNCMkQ4MTYwRjk5
MjBEMjAwNkFFNkIyIC8qIFN1ZGRlblRlcm1pbmF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0IyRDgxNTBGOTkyMEQyMDA2QUU2QjIgLyogU3Vk
ZGVuVGVybWluYXRpb24uaCAqLzsgfTsKIAkJOTNCMkQ4MTgwRjk5MjBFRTAwNkFFNkIyIC8qIFN1
ZGRlblRlcm1pbmF0aW9uLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTNCMkQ4MTcwRjk5MjBFRTAwNkFFNkIyIC8qIFN1ZGRlblRlcm1pbmF0aW9uLm1t
ICovOyB9OwogCQk5M0I2QTBFNjBCMEJDQTVDMDBGNTAyN0EgLyogQ29udGV4dE1lbnUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQjZBMEU1MEIwQkNB
NUMwMEY1MDI3QSAvKiBDb250ZXh0TWVudS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07Ci0JCTkzQjZBMEU4MEIwQkNBNjcwMEY1MDI3QSAvKiBDb250ZXh0
TWVudS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
M0I2QTBFNzBCMEJDQTY3MDBGNTAyN0EgLyogQ29udGV4dE1lbnUuY3BwICovOyB9OwogCQk5M0I2
QTBFQTBCMEJDQTg0MDBGNTAyN0EgLyogQ29udGV4dE1lbnVNYWMubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0I2QTBFOTBCMEJDQTg0MDBGNTAyN0Eg
LyogQ29udGV4dE1lbnVNYWMubW0gKi87IH07CiAJCTkzQjcwRDYzMDlFQjBDN0MwMDlEODQ2OCAv
KiBKU0RPTUJpbmRpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTNCNzBENDcwOUVCMEM3QzAwOUQ4NDY4IC8qIEpTRE9NQmluZGluZy5jcHAgKi87
IH07CiAJCTkzQjcwRDY0MDlFQjBDN0MwMDlEODQ2OCAvKiBKU0RPTUJpbmRpbmcuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQjcwRDQ4MDlFQjBDN0Mw
MDlEODQ2OCAvKiBKU0RPTUJpbmRpbmcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwpAQCAtOTAwNyw3ICs5MDA2LDYgQEAKIAkJOTNCMkQ4MTUwRjk5MjBE
MjAwNkFFNkIyIC8qIFN1ZGRlblRlcm1pbmF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFN1ZGRlblRlcm1pbmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTkzQjJEODE3MEY5OTIwRUUwMDZBRTZCMiAvKiBTdWRkZW5UZXJtaW5hdGlvbi5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFN1ZGRlblRlcm1pbmF0aW9uLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0I2QTBFNTBCMEJDQTVDMDBGNTAyN0Eg
LyogQ29udGV4dE1lbnUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnRl
eHRNZW51Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTkzQjZBMEU3MEIwQkNBNjcw
MEY1MDI3QSAvKiBDb250ZXh0TWVudS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gQ29udGV4dE1lbnUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5
M0I2QTBFOTBCMEJDQTg0MDBGNTAyN0EgLyogQ29udGV4dE1lbnVNYWMubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQ29udGV4dE1lbnVNYWMubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzQjcwRDQ3MDlFQjBDN0MwMDlEODQ2OCAvKiBKU0RPTUJp
bmRpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRE9NQmlu
ZGluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzQjcwRDQ4MDlFQjBDN0Mw
MDlEODQ2OCAvKiBKU0RPTUJpbmRpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTRE9NQmluZGluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTc1NzQs
NyArMTc1NzIsNiBAQAogCQkJCUJDQzhDRkNBMDk4NkNEMjQwMDE0MEJGMiAvKiBDb2xvckRhdGEu
Z3BlcmYgKi8sCiAJCQkJNDFEMDE1QzkwRjRCNUM3MTAwNEE2NjJGIC8qIENvbnRlbnRUeXBlLmNw
cCAqLywKIAkJCQk0MUQwMTVDODBGNEI1QzcxMDA0QTY2MkYgLyogQ29udGVudFR5cGUuaCAqLywK
LQkJCQk5M0I2QTBFNzBCMEJDQTY3MDBGNTAyN0EgLyogQ29udGV4dE1lbnUuY3BwICovLAogCQkJ
CTkzQjZBMEU1MEIwQkNBNUMwMEY1MDI3QSAvKiBDb250ZXh0TWVudS5oICovLAogCQkJCTA2MDI3
Q0FDMEIxQ0JGQzAwMDg4NEIyRCAvKiBDb250ZXh0TWVudUl0ZW0uaCAqLywKIAkJCQlEOEI2MTUy
RTEwMzI0OTUxMDBDODU1NEEgLyogQ29va2llLmggKi8sCkBAIC0yMTk1Niw3ICsyMTk1Myw2IEBA
CiAJCQkJQTgxODcyMUYwOTc3RDNDMDAwNTgyNkQ5IC8qIENvbnRhaW5lck5vZGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQkM1RUI5ODAwRTgyMDcyNTAwQjI1OTY1IC8qIENvbnRlbnREYXRhLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTQxRDAxNUNCMEY0QjVDNzEwMDRBNjYyRiAvKiBDb250ZW50
VHlwZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk5M0I2QTBFODBCMEJDQTY3MDBGNTAyN0EgLyog
Q29udGV4dE1lbnUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDY1QUQ0RjYwQjBDMkVEQTAwNUEy
QjFEIC8qIENvbnRleHRNZW51Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwNjAy
N0NCMzBCMUNDMDNEMDA4ODRCMkQgLyogQ29udGV4dE1lbnVJdGVtTWFjLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJOTNCNkEwRUEwQjBCQ0E4NDAwRjUwMjdBIC8qIENvbnRleHRNZW51TWFjLm1tIGlu
IFNvdXJjZXMgKi8sCkluZGV4OiBXZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcAko
cmV2aXNpb24gNzM0NjkpCisrKyBXZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkNocm9tZS5oIgog
I2luY2x1ZGUgIkNvbnRleHRNZW51LmgiCiAjaW5jbHVkZSAiQ29udGV4dE1lbnVDbGllbnQuaCIK
KyNpbmNsdWRlICJDb250ZXh0TWVudUl0ZW0uaCIKICNpbmNsdWRlICJDb250ZXh0TWVudVByb3Zp
ZGVyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50
LmgiCkBAIC01MCw2ICs1MSw3IEBACiAjaW5jbHVkZSAiSGl0VGVzdFJlcXVlc3QuaCIKICNpbmNs
dWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgor
I2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKICNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCiAj
aW5jbHVkZSAiTmF2aWdhdGlvbkFjdGlvbi5oIgogI2luY2x1ZGUgIk5vZGUuaCIKQEAgLTYzLDYg
KzY1LDEwIEBACiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiV2luZG93RmVh
dHVyZXMuaCIKICNpbmNsdWRlICJtYXJrdXAuaCIKKyNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmlj
b2RlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXVEY7Cit1c2luZyBuYW1lc3BhY2UgVW5pY29kZTsK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC03MCw2ICs3Niw3IEBAIENvbnRleHRNZW51Q29u
dHJvbGxlcjo6Q29udGV4dE1lbnVDb250cm8KICAgICA6IG1fcGFnZShwYWdlKQogICAgICwgbV9j
bGllbnQoY2xpZW50KQogICAgICwgbV9jb250ZXh0TWVudSgwKQorICAgICwgbV9oaXRUZXN0UmVz
dWx0KEhpdFRlc3RSZXN1bHQoSW50UG9pbnQoKSkpCiB7CiAgICAgQVNTRVJUX0FSRyhwYWdlLCBw
YWdlKTsKICAgICBBU1NFUlRfQVJHKGNsaWVudCwgY2xpZW50KTsKQEAgLTkzLDcgKzEwMCw5IEBA
IHZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjpoYW5kbGVDb250ZXgKICAgICBtX2NvbnRleHRN
ZW51LnNldChjcmVhdGVDb250ZXh0TWVudShldmVudCkpOwogICAgIGlmICghbV9jb250ZXh0TWVu
dSkKICAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dE1lbnUtPnBvcHVsYXRlKCk7CisKKyAg
ICBwb3B1bGF0ZSgpOworCiAgICAgc2hvd0NvbnRleHRNZW51KGV2ZW50KTsKIH0KIApAQCAtMTEz
LDggKzEyMiw5IEBAIHZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjpzaG93Q29udGV4dE0KIAog
Q29udGV4dE1lbnUqIENvbnRleHRNZW51Q29udHJvbGxlcjo6Y3JlYXRlQ29udGV4dE1lbnUoRXZl
bnQqIGV2ZW50KQogewotICAgaWYgKCFldmVudC0+aXNNb3VzZUV2ZW50KCkpCisgICAgaWYgKCFl
dmVudC0+aXNNb3VzZUV2ZW50KCkpCiAgICAgICAgIHJldHVybiAwOworCiAgICAgTW91c2VFdmVu
dCogbW91c2VFdmVudCA9IHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVudCk7CiAgICAgSGl0
VGVzdFJlc3VsdCByZXN1bHQobW91c2VFdmVudC0+YWJzb2x1dGVMb2NhdGlvbigpKTsKIApAQCAt
MTIzLDE0ICsxMzMsMTcgQEAgQ29udGV4dE1lbnUqIENvbnRleHRNZW51Q29udHJvbGxlcjo6Y3Jl
YQogCiAgICAgaWYgKCFyZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCkpCiAgICAgICAgIHJldHVy
biAwOwotICAgIHJldHVybiBuZXcgQ29udGV4dE1lbnUocmVzdWx0KTsKKworICAgIG1faGl0VGVz
dFJlc3VsdCA9IHJlc3VsdDsKKworICAgIHJldHVybiBuZXcgQ29udGV4dE1lbnUoKTsKIH0KIAog
dm9pZCBDb250ZXh0TWVudUNvbnRyb2xsZXI6OnNob3dDb250ZXh0TWVudShFdmVudCogZXZlbnQp
CiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKICAgICBpZiAobV9wYWdlLT5pbnNwZWN0b3JDb250
cm9sbGVyKCktPmVuYWJsZWQoKSkKLSAgICAgICAgbV9jb250ZXh0TWVudS0+YWRkSW5zcGVjdEVs
ZW1lbnRJdGVtKCk7CisgICAgICAgIGFkZEluc3BlY3RFbGVtZW50SXRlbSgpOwogI2VuZGlmCiAg
ICAgUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gY3VzdG9tTWVudSA9IG1fY2xpZW50LT5nZXRDdXN0
b21NZW51RnJvbURlZmF1bHRJdGVtcyhtX2NvbnRleHRNZW51LmdldCgpKTsKICAgICBtX2NvbnRl
eHRNZW51LT5zZXRQbGF0Zm9ybURlc2NyaXB0aW9uKGN1c3RvbU1lbnUpOwpAQCAtMTYyLDU0ICsx
NzUsNTMgQEAgdm9pZCBDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNvbnRleHRNZW51SQogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgSGl0VGVzdFJlc3VsdCByZXN1bHQgPSBtX2NvbnRleHRN
ZW51LT5oaXRUZXN0UmVzdWx0KCk7Ci0gICAgRnJhbWUqIGZyYW1lID0gcmVzdWx0LmlubmVyTm9u
U2hhcmVkTm9kZSgpLT5kb2N1bWVudCgpLT5mcmFtZSgpOworICAgIEZyYW1lKiBmcmFtZSA9IG1f
aGl0VGVzdFJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsK
ICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm47CiAKICAgICBzd2l0Y2ggKGl0ZW0tPmFj
dGlvbigpKSB7CiAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdPcGVuTGlua0luTmV3V2luZG93
OgotICAgICAgICBvcGVuTmV3V2luZG93KHJlc3VsdC5hYnNvbHV0ZUxpbmtVUkwoKSwgZnJhbWUp
OworICAgICAgICBvcGVuTmV3V2luZG93KG1faGl0VGVzdFJlc3VsdC5hYnNvbHV0ZUxpbmtVUkwo
KSwgZnJhbWUpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0Rv
d25sb2FkTGlua1RvRGlzazoKICAgICAgICAgLy8gRklYTUU6IFNvbWUgZGF5IHdlIHNob3VsZCBi
ZSBhYmxlIHRvIGRvIHRoaXMgZnJvbSB3aXRoaW4gV2ViQ29yZS4KLSAgICAgICAgbV9jbGllbnQt
PmRvd25sb2FkVVJMKHJlc3VsdC5hYnNvbHV0ZUxpbmtVUkwoKSk7CisgICAgICAgIG1fY2xpZW50
LT5kb3dubG9hZFVSTChtX2hpdFRlc3RSZXN1bHQuYWJzb2x1dGVMaW5rVVJMKCkpOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0NvcHlMaW5rVG9DbGlwYm9hcmQ6
Ci0gICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+Y29weVVSTChyZXN1bHQuYWJzb2x1dGVMaW5rVVJM
KCksIHJlc3VsdC50ZXh0Q29udGVudCgpKTsKKyAgICAgICAgZnJhbWUtPmVkaXRvcigpLT5jb3B5
VVJMKG1faGl0VGVzdFJlc3VsdC5hYnNvbHV0ZUxpbmtVUkwoKSwgbV9oaXRUZXN0UmVzdWx0LnRl
eHRDb250ZW50KCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRh
Z09wZW5JbWFnZUluTmV3V2luZG93OgotICAgICAgICBvcGVuTmV3V2luZG93KHJlc3VsdC5hYnNv
bHV0ZUltYWdlVVJMKCksIGZyYW1lKTsKKyAgICAgICAgb3Blbk5ld1dpbmRvdyhtX2hpdFRlc3RS
ZXN1bHQuYWJzb2x1dGVJbWFnZVVSTCgpLCBmcmFtZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgQ29udGV4dE1lbnVJdGVtVGFnRG93bmxvYWRJbWFnZVRvRGlzazoKICAgICAgICAgLy8gRklY
TUU6IFNvbWUgZGF5IHdlIHNob3VsZCBiZSBhYmxlIHRvIGRvIHRoaXMgZnJvbSB3aXRoaW4gV2Vi
Q29yZS4KLSAgICAgICAgbV9jbGllbnQtPmRvd25sb2FkVVJMKHJlc3VsdC5hYnNvbHV0ZUltYWdl
VVJMKCkpOworICAgICAgICBtX2NsaWVudC0+ZG93bmxvYWRVUkwobV9oaXRUZXN0UmVzdWx0LmFi
c29sdXRlSW1hZ2VVUkwoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ29udGV4dE1lbnVJ
dGVtVGFnQ29weUltYWdlVG9DbGlwYm9hcmQ6CiAgICAgICAgIC8vIEZJWE1FOiBUaGUgUGFzdGVi
b2FyZCBjbGFzcyBpcyBub3Qgd3JpdHRlbiB5ZXQKICAgICAgICAgLy8gRm9yIG5vdywgY2FsbCBp
bnRvIHRoZSBjbGllbnQuIFRoaXMgaXMgdGVtcG9yYXJ5IQotICAgICAgICBmcmFtZS0+ZWRpdG9y
KCktPmNvcHlJbWFnZShyZXN1bHQpOworICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPmNvcHlJbWFn
ZShtX2hpdFRlc3RSZXN1bHQpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENvbnRleHRNZW51
SXRlbVRhZ09wZW5NZWRpYUluTmV3V2luZG93OgotICAgICAgICBvcGVuTmV3V2luZG93KHJlc3Vs
dC5hYnNvbHV0ZU1lZGlhVVJMKCksIGZyYW1lKTsKKyAgICAgICAgb3Blbk5ld1dpbmRvdyhtX2hp
dFRlc3RSZXN1bHQuYWJzb2x1dGVNZWRpYVVSTCgpLCBmcmFtZSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQ29weU1lZGlhTGlua1RvQ2xpcGJvYXJkOgotICAg
ICAgICBmcmFtZS0+ZWRpdG9yKCktPmNvcHlVUkwocmVzdWx0LmFic29sdXRlTWVkaWFVUkwoKSwg
cmVzdWx0LnRleHRDb250ZW50KCkpOworICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPmNvcHlVUkwo
bV9oaXRUZXN0UmVzdWx0LmFic29sdXRlTWVkaWFVUkwoKSwgbV9oaXRUZXN0UmVzdWx0LnRleHRD
b250ZW50KCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1Rv
Z2dsZU1lZGlhQ29udHJvbHM6Ci0gICAgICAgIHJlc3VsdC50b2dnbGVNZWRpYUNvbnRyb2xzRGlz
cGxheSgpOworICAgICAgICBtX2hpdFRlc3RSZXN1bHQudG9nZ2xlTWVkaWFDb250cm9sc0Rpc3Bs
YXkoKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdUb2dnbGVN
ZWRpYUxvb3A6Ci0gICAgICAgIHJlc3VsdC50b2dnbGVNZWRpYUxvb3BQbGF5YmFjaygpOworICAg
ICAgICBtX2hpdFRlc3RSZXN1bHQudG9nZ2xlTWVkaWFMb29wUGxheWJhY2soKTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdFbnRlclZpZGVvRnVsbHNjcmVlbjoK
LSAgICAgICAgcmVzdWx0LmVudGVyRnVsbHNjcmVlbkZvclZpZGVvKCk7CisgICAgICAgIG1faGl0
VGVzdFJlc3VsdC5lbnRlckZ1bGxzY3JlZW5Gb3JWaWRlbygpOwogICAgICAgICBicmVhazsKICAg
ICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ01lZGlhUGxheVBhdXNlOgotICAgICAgICByZXN1bHQu
dG9nZ2xlTWVkaWFQbGF5U3RhdGUoKTsKKyAgICAgICAgbV9oaXRUZXN0UmVzdWx0LnRvZ2dsZU1l
ZGlhUGxheVN0YXRlKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ29udGV4dE1lbnVJdGVt
VGFnTWVkaWFNdXRlOgotICAgICAgICByZXN1bHQudG9nZ2xlTWVkaWFNdXRlU3RhdGUoKTsKKyAg
ICAgICAgbV9oaXRUZXN0UmVzdWx0LnRvZ2dsZU1lZGlhTXV0ZVN0YXRlKCk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnT3BlbkZyYW1lSW5OZXdXaW5kb3c6IHsK
ICAgICAgICAgRG9jdW1lbnRMb2FkZXIqIGxvYWRlciA9IGZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1l
bnRMb2FkZXIoKTsKQEAgLTI3MywxMCArMjg1LDEwIEBAIHZvaWQgQ29udGV4dE1lbnVDb250cm9s
bGVyOjpjb250ZXh0TWVudUkKICAgICAgICAgbV9jbGllbnQtPmxvb2tVcEluRGljdGlvbmFyeShm
cmFtZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnT3Blbkxp
bms6Ci0gICAgICAgIGlmIChGcmFtZSogdGFyZ2V0RnJhbWUgPSByZXN1bHQudGFyZ2V0RnJhbWUo
KSkKLSAgICAgICAgICAgIHRhcmdldEZyYW1lLT5sb2FkZXIoKS0+bG9hZEZyYW1lUmVxdWVzdChG
cmFtZUxvYWRSZXF1ZXN0KGZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLCBSZXNv
dXJjZVJlcXVlc3QocmVzdWx0LmFic29sdXRlTGlua1VSTCgpLCBmcmFtZS0+bG9hZGVyKCktPm91
dGdvaW5nUmVmZXJyZXIoKSkpLCBmYWxzZSwgZmFsc2UsIDAsIDAsIFNlbmRSZWZlcnJlcik7Cisg
ICAgICAgIGlmIChGcmFtZSogdGFyZ2V0RnJhbWUgPSBtX2hpdFRlc3RSZXN1bHQudGFyZ2V0RnJh
bWUoKSkKKyAgICAgICAgICAgIHRhcmdldEZyYW1lLT5sb2FkZXIoKS0+bG9hZEZyYW1lUmVxdWVz
dChGcmFtZUxvYWRSZXF1ZXN0KGZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLCBS
ZXNvdXJjZVJlcXVlc3QobV9oaXRUZXN0UmVzdWx0LmFic29sdXRlTGlua1VSTCgpLCBmcmFtZS0+
bG9hZGVyKCktPm91dGdvaW5nUmVmZXJyZXIoKSkpLCBmYWxzZSwgZmFsc2UsIDAsIDAsIFNlbmRS
ZWZlcnJlcik7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG9wZW5OZXdXaW5kb3cocmVzdWx0
LmFic29sdXRlTGlua1VSTCgpLCBmcmFtZSk7CisgICAgICAgICAgICBvcGVuTmV3V2luZG93KG1f
aGl0VGVzdFJlc3VsdC5hYnNvbHV0ZUxpbmtVUkwoKSwgZnJhbWUpOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0JvbGQ6CiAgICAgICAgIGZyYW1lLT5lZGl0b3Io
KS0+Y29tbWFuZCgiVG9nZ2xlQm9sZCIpLmV4ZWN1dGUoKTsKQEAgLTI5NSw3ICszMDcsNyBAQCB2
b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6Y29udGV4dE1lbnVJCiAgICAgICAgIEV4Y2VwdGlv
bkNvZGUgZWM7CiAgICAgICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZSA9IGZyYW1lLT5z
ZWxlY3Rpb24oKS0+dG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICAgICAgaWYgKCFzZWxlY3RlZFJh
bmdlIHx8IHNlbGVjdGVkUmFuZ2UtPmNvbGxhcHNlZChlYykpIHsKLSAgICAgICAgICAgIERvY3Vt
ZW50KiBkb2N1bWVudCA9IHJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKS0+ZG9jdW1lbnQoKTsK
KyAgICAgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1faGl0VGVzdFJlc3VsdC5pbm5lck5v
blNoYXJlZE5vZGUoKS0+ZG9jdW1lbnQoKTsKICAgICAgICAgICAgIHNlbGVjdGVkUmFuZ2UgPSBk
b2N1bWVudC0+Y3JlYXRlUmFuZ2UoKTsKICAgICAgICAgICAgIHNlbGVjdGVkUmFuZ2UtPnNlbGVj
dE5vZGUoZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpLCBlYyk7CiAgICAgICAgIH0KQEAgLTM4
NSwxMyArMzk3LDEzIEBAIHZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjpjb250ZXh0TWVudUkK
ICAgICAgICAgZnJhbWUtPmVkaXRvcigpLT50b2dnbGVBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rp
b24oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdDaGFuZ2VC
YWNrOgotICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPmNoYW5nZUJhY2tUb1JlcGxhY2VkU3RyaW5n
KHJlc3VsdC5yZXBsYWNlZFN0cmluZygpKTsKKyAgICAgICAgZnJhbWUtPmVkaXRvcigpLT5jaGFu
Z2VCYWNrVG9SZXBsYWNlZFN0cmluZyhtX2hpdFRlc3RSZXN1bHQucmVwbGFjZWRTdHJpbmcoKSk7
CiAgICAgICAgIGJyZWFrOwogI2VuZGlmCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKICAgICBjYXNl
IENvbnRleHRNZW51SXRlbVRhZ0luc3BlY3RFbGVtZW50OgogICAgICAgICBpZiAoUGFnZSogcGFn
ZSA9IGZyYW1lLT5wYWdlKCkpCi0gICAgICAgICAgICBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVy
KCktPmluc3BlY3QocmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpKTsKKyAgICAgICAgICAgIHBh
Z2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+aW5zcGVjdChtX2hpdFRlc3RSZXN1bHQuaW5uZXJO
b25TaGFyZWROb2RlKCkpOwogICAgICAgICBicmVhazsKICNlbmRpZgogICAgIGRlZmF1bHQ6CkBA
IC0zOTksNiArNDExLDgyOSBAQCB2b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6Y29udGV4dE1l
bnVJCiAgICAgfQogfQogCit2b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6YXBwZW5kSXRlbShD
b250ZXh0TWVudUl0ZW0mIG1lbnVJdGVtLCBDb250ZXh0TWVudSogcGFyZW50TWVudSkKK3sKKyAg
ICBjaGVja09yRW5hYmxlSWZOZWVkZWQobWVudUl0ZW0pOworICAgIGlmIChwYXJlbnRNZW51KQor
ICAgICAgICBwYXJlbnRNZW51LT5hcHBlbmRJdGVtKG1lbnVJdGVtKTsKK30KKworc3RhdGljIFBh
c3NPd25QdHI8Q29udGV4dE1lbnVJdGVtPiBzZXBhcmF0b3JJdGVtKCkKK3sKKyAgICByZXR1cm4g
bmV3IENvbnRleHRNZW51SXRlbShTZXBhcmF0b3JUeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdOb0Fj
dGlvbiwgU3RyaW5nKCkpOworfQorCit2b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6Y3JlYXRl
QW5kQXBwZW5kRm9udFN1Yk1lbnUoQ29udGV4dE1lbnVJdGVtJiBmb250TWVudUl0ZW0pCit7Cisg
ICAgQ29udGV4dE1lbnUgZm9udE1lbnU7CisKKyNpZiBQTEFURk9STShNQUMpCisgICAgQ29udGV4
dE1lbnVJdGVtIHNob3dGb250cyhBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTaG93Rm9u
dHMsIGNvbnRleHRNZW51SXRlbVRhZ1Nob3dGb250cygpKTsKKyNlbmRpZgorICAgIENvbnRleHRN
ZW51SXRlbSBib2xkKENoZWNrYWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0JvbGQs
IGNvbnRleHRNZW51SXRlbVRhZ0JvbGQoKSk7CisgICAgQ29udGV4dE1lbnVJdGVtIGl0YWxpYyhD
aGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdJdGFsaWMsIGNvbnRleHRNZW51
SXRlbVRhZ0l0YWxpYygpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gdW5kZXJsaW5lKENoZWNrYWJs
ZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1VuZGVybGluZSwgY29udGV4dE1lbnVJdGVt
VGFnVW5kZXJsaW5lKCkpOworICAgIENvbnRleHRNZW51SXRlbSBvdXRsaW5lKEFjdGlvblR5cGUs
IENvbnRleHRNZW51SXRlbVRhZ091dGxpbmUsIGNvbnRleHRNZW51SXRlbVRhZ091dGxpbmUoKSk7
CisjaWYgUExBVEZPUk0oTUFDKQorICAgIENvbnRleHRNZW51SXRlbSBzdHlsZXMoQWN0aW9uVHlw
ZSwgQ29udGV4dE1lbnVJdGVtVGFnU3R5bGVzLCBjb250ZXh0TWVudUl0ZW1UYWdTdHlsZXMoKSk7
CisgICAgQ29udGV4dE1lbnVJdGVtIHNob3dDb2xvcnMoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJ
dGVtVGFnU2hvd0NvbG9ycywgY29udGV4dE1lbnVJdGVtVGFnU2hvd0NvbG9ycygpKTsKKyNlbmRp
ZgorCisjaWYgUExBVEZPUk0oTUFDKQorICAgIGFwcGVuZEl0ZW0oc2hvd0ZvbnRzLCAmZm9udE1l
bnUpOworI2VuZGlmCisgICAgYXBwZW5kSXRlbShib2xkLCAmZm9udE1lbnUpOworICAgIGFwcGVu
ZEl0ZW0oaXRhbGljLCAmZm9udE1lbnUpOworICAgIGFwcGVuZEl0ZW0odW5kZXJsaW5lLCAmZm9u
dE1lbnUpOworICAgIGFwcGVuZEl0ZW0ob3V0bGluZSwgJmZvbnRNZW51KTsKKyNpZiBQTEFURk9S
TShNQUMpCisgICAgYXBwZW5kSXRlbShzdHlsZXMsICZmb250TWVudSk7CisgICAgYXBwZW5kSXRl
bSgqc2VwYXJhdG9ySXRlbSgpLCAmZm9udE1lbnUpOworICAgIGFwcGVuZEl0ZW0oc2hvd0NvbG9y
cywgJmZvbnRNZW51KTsKKyNlbmRpZgorCisgICAgZm9udE1lbnVJdGVtLnNldFN1Yk1lbnUoJmZv
bnRNZW51KTsKK30KKworI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKQorCisjaWYgIVBM
QVRGT1JNKEdUSykKKwordm9pZCBDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNyZWF0ZUFuZEFwcGVu
ZFNwZWxsaW5nQW5kR3JhbW1hclN1Yk1lbnUoQ29udGV4dE1lbnVJdGVtJiBzcGVsbGluZ0FuZEdy
YW1tYXJNZW51SXRlbSkKK3sKKyAgICBDb250ZXh0TWVudSBzcGVsbGluZ0FuZEdyYW1tYXJNZW51
OworCisgICAgQ29udGV4dE1lbnVJdGVtIHNob3dTcGVsbGluZ1BhbmVsKEFjdGlvblR5cGUsIENv
bnRleHRNZW51SXRlbVRhZ1Nob3dTcGVsbGluZ1BhbmVsLCAKKyAgICAgICAgY29udGV4dE1lbnVJ
dGVtVGFnU2hvd1NwZWxsaW5nUGFuZWwodHJ1ZSkpOworICAgIENvbnRleHRNZW51SXRlbSBjaGVj
a1NwZWxsaW5nKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0NoZWNrU3BlbGxpbmcsIAor
ICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdDaGVja1NwZWxsaW5nKCkpOworICAgIENvbnRleHRN
ZW51SXRlbSBjaGVja0FzWW91VHlwZShDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0
ZW1UYWdDaGVja1NwZWxsaW5nV2hpbGVUeXBpbmcsIAorICAgICAgICBjb250ZXh0TWVudUl0ZW1U
YWdDaGVja1NwZWxsaW5nV2hpbGVUeXBpbmcoKSk7CisgICAgQ29udGV4dE1lbnVJdGVtIGdyYW1t
YXJXaXRoU3BlbGxpbmcoQ2hlY2thYmxlQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnQ2hl
Y2tHcmFtbWFyV2l0aFNwZWxsaW5nLCAKKyAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnQ2hlY2tH
cmFtbWFyV2l0aFNwZWxsaW5nKCkpOworI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJ
TERJTkdfT05fTEVPUEFSRCkKKyAgICBDb250ZXh0TWVudUl0ZW0gY29ycmVjdFNwZWxsaW5nKENo
ZWNrYWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0NvcnJlY3RTcGVsbGluZ0F1dG9t
YXRpY2FsbHksIAorICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdDb3JyZWN0U3BlbGxpbmdBdXRv
bWF0aWNhbGx5KCkpOworI2VuZGlmCisKKyAgICBhcHBlbmRJdGVtKHNob3dTcGVsbGluZ1BhbmVs
LCAmc3BlbGxpbmdBbmRHcmFtbWFyTWVudSk7CisgICAgYXBwZW5kSXRlbShjaGVja1NwZWxsaW5n
LCAmc3BlbGxpbmdBbmRHcmFtbWFyTWVudSk7CisjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5l
ZChCVUlMRElOR19PTl9MRU9QQVJEKQorICAgIGFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSwg
JnNwZWxsaW5nQW5kR3JhbW1hck1lbnUpOworI2VuZGlmCisgICAgYXBwZW5kSXRlbShjaGVja0Fz
WW91VHlwZSwgJnNwZWxsaW5nQW5kR3JhbW1hck1lbnUpOworICAgIGFwcGVuZEl0ZW0oZ3JhbW1h
cldpdGhTcGVsbGluZywgJnNwZWxsaW5nQW5kR3JhbW1hck1lbnUpOworI2lmIFBMQVRGT1JNKE1B
QykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKKyAgICBhcHBlbmRJdGVtKGNvcnJl
Y3RTcGVsbGluZywgJnNwZWxsaW5nQW5kR3JhbW1hck1lbnUpOworI2VuZGlmCisKKyAgICBzcGVs
bGluZ0FuZEdyYW1tYXJNZW51SXRlbS5zZXRTdWJNZW51KCZzcGVsbGluZ0FuZEdyYW1tYXJNZW51
KTsKK30KKworI2VuZGlmIC8vICFQTEFURk9STShHVEspCisKKyNlbHNlCisKK3ZvaWQgQ29udGV4
dE1lbnVDb250cm9sbGVyOjpjcmVhdGVBbmRBcHBlbmRTcGVsbGluZ0FuZEdyYW1tYXJTdWJNZW51
KENvbnRleHRNZW51SXRlbSYgc3BlbGxpbmdBbmRHcmFtbWFyTWVudUl0ZW0pCit7CisgICAgQ29u
dGV4dE1lbnUgc3BlbGxpbmdNZW51OworCisgICAgQ29udGV4dE1lbnVJdGVtIHNob3dTcGVsbGlu
Z1BhbmVsKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1Nob3dTcGVsbGluZ1BhbmVsLCAK
KyAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnU2hvd1NwZWxsaW5nUGFuZWwodHJ1ZSkpOworICAg
IENvbnRleHRNZW51SXRlbSBjaGVja1NwZWxsaW5nKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRl
bVRhZ0NoZWNrU3BlbGxpbmcsIAorICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdDaGVja1NwZWxs
aW5nKCkpOworICAgIENvbnRleHRNZW51SXRlbSBjaGVja0FzWW91VHlwZShDaGVja2FibGVBY3Rp
b25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdDaGVja1NwZWxsaW5nV2hpbGVUeXBpbmcsIAorICAg
ICAgICBjb250ZXh0TWVudUl0ZW1UYWdDaGVja1NwZWxsaW5nV2hpbGVUeXBpbmcoKSk7CisKKyAg
ICBhcHBlbmRJdGVtKHNob3dTcGVsbGluZ1BhbmVsLCAmc3BlbGxpbmdNZW51KTsKKyAgICBhcHBl
bmRJdGVtKGNoZWNrU3BlbGxpbmcsICZzcGVsbGluZ01lbnUpOworICAgIGFwcGVuZEl0ZW0oY2hl
Y2tBc1lvdVR5cGUsICZzcGVsbGluZ01lbnUpOworCisgICAgc3BlbGxpbmdNZW51SXRlbS5zZXRT
dWJNZW51KCZzcGVsbGluZ01lbnUpOworfQorCisjZW5kaWYKKworI2lmIFBMQVRGT1JNKE1BQykK
Kwordm9pZCBDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNyZWF0ZUFuZEFwcGVuZFNwZWVjaFN1Yk1l
bnUoQ29udGV4dE1lbnVJdGVtJiBzcGVlY2hNZW51SXRlbSkKK3sKKyAgICBDb250ZXh0TWVudSBz
cGVlY2hNZW51OworCisgICAgQ29udGV4dE1lbnVJdGVtIHN0YXJ0KEFjdGlvblR5cGUsIENvbnRl
eHRNZW51SXRlbVRhZ1N0YXJ0U3BlYWtpbmcsIGNvbnRleHRNZW51SXRlbVRhZ1N0YXJ0U3BlYWtp
bmcoKSk7CisgICAgQ29udGV4dE1lbnVJdGVtIHN0b3AoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJ
dGVtVGFnU3RvcFNwZWFraW5nLCBjb250ZXh0TWVudUl0ZW1UYWdTdG9wU3BlYWtpbmcoKSk7CisK
KyAgICBhcHBlbmRJdGVtKHN0YXJ0LCAmc3BlZWNoTWVudSk7CisgICAgYXBwZW5kSXRlbShzdG9w
LCAmc3BlZWNoTWVudSk7CisKKyAgICBzcGVlY2hNZW51SXRlbS5zZXRTdWJNZW51KCZzcGVlY2hN
ZW51KTsKK30KKworI2VuZGlmCisgCisjaWYgIVBMQVRGT1JNKEdUSykKKwordm9pZCBDb250ZXh0
TWVudUNvbnRyb2xsZXI6OmNyZWF0ZUFuZEFwcGVuZFdyaXRpbmdEaXJlY3Rpb25TdWJNZW51KENv
bnRleHRNZW51SXRlbSYgd3JpdGluZ0RpcmVjdGlvbk1lbnVJdGVtKQoreworICAgIENvbnRleHRN
ZW51IHdyaXRpbmdEaXJlY3Rpb25NZW51OworCisgICAgQ29udGV4dE1lbnVJdGVtIGRlZmF1bHRJ
dGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0RlZmF1bHREaXJlY3Rpb24sIAorICAg
ICAgICBjb250ZXh0TWVudUl0ZW1UYWdEZWZhdWx0RGlyZWN0aW9uKCkpOworICAgIENvbnRleHRN
ZW51SXRlbSBsdHIoQ2hlY2thYmxlQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnTGVmdFRv
UmlnaHQsIGNvbnRleHRNZW51SXRlbVRhZ0xlZnRUb1JpZ2h0KCkpOworICAgIENvbnRleHRNZW51
SXRlbSBydGwoQ2hlY2thYmxlQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnUmlnaHRUb0xl
ZnQsIGNvbnRleHRNZW51SXRlbVRhZ1JpZ2h0VG9MZWZ0KCkpOworCisgICAgYXBwZW5kSXRlbShk
ZWZhdWx0SXRlbSwgJndyaXRpbmdEaXJlY3Rpb25NZW51KTsKKyAgICBhcHBlbmRJdGVtKGx0ciwg
JndyaXRpbmdEaXJlY3Rpb25NZW51KTsKKyAgICBhcHBlbmRJdGVtKHJ0bCwgJndyaXRpbmdEaXJl
Y3Rpb25NZW51KTsKKworICAgIHdyaXRpbmdEaXJlY3Rpb25NZW51SXRlbS5zZXRTdWJNZW51KCZ3
cml0aW5nRGlyZWN0aW9uTWVudSk7Cit9CisKK3ZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjpj
cmVhdGVBbmRBcHBlbmRUZXh0RGlyZWN0aW9uU3ViTWVudShDb250ZXh0TWVudUl0ZW0mIHRleHRE
aXJlY3Rpb25NZW51SXRlbSkKK3sKKyAgICBDb250ZXh0TWVudSB0ZXh0RGlyZWN0aW9uTWVudTsK
KworICAgIENvbnRleHRNZW51SXRlbSBkZWZhdWx0SXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVu
dUl0ZW1UYWdUZXh0RGlyZWN0aW9uRGVmYXVsdCwgY29udGV4dE1lbnVJdGVtVGFnRGVmYXVsdERp
cmVjdGlvbigpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gbHRyKENoZWNrYWJsZUFjdGlvblR5cGUs
IENvbnRleHRNZW51SXRlbVRhZ1RleHREaXJlY3Rpb25MZWZ0VG9SaWdodCwgY29udGV4dE1lbnVJ
dGVtVGFnTGVmdFRvUmlnaHQoKSk7CisgICAgQ29udGV4dE1lbnVJdGVtIHJ0bChDaGVja2FibGVB
Y3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdUZXh0RGlyZWN0aW9uUmlnaHRUb0xlZnQsIGNv
bnRleHRNZW51SXRlbVRhZ1JpZ2h0VG9MZWZ0KCkpOworCisgICAgYXBwZW5kSXRlbShkZWZhdWx0
SXRlbSwgJnRleHREaXJlY3Rpb25NZW51KTsKKyAgICBhcHBlbmRJdGVtKGx0ciwgJnRleHREaXJl
Y3Rpb25NZW51KTsKKyAgICBhcHBlbmRJdGVtKHJ0bCwgJnRleHREaXJlY3Rpb25NZW51KTsKKwor
ICAgIHRleHREaXJlY3Rpb25NZW51SXRlbS5zZXRTdWJNZW51KCZ0ZXh0RGlyZWN0aW9uTWVudSk7
Cit9CisKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19P
Tl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKKwordm9pZCBDb250ZXh0
TWVudUNvbnRyb2xsZXI6OmNyZWF0ZUFuZEFwcGVuZFN1YnN0aXR1dGlvbnNTdWJNZW51KENvbnRl
eHRNZW51SXRlbSYgc3Vic3RpdHV0aW9uc01lbnVJdGVtKQoreworICAgIENvbnRleHRNZW51IHN1
YnN0aXR1dGlvbnNNZW51OworCisgICAgQ29udGV4dE1lbnVJdGVtIHNob3dTdWJzdGl0dXRpb25z
KEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1Nob3dTdWJzdGl0dXRpb25zLCBjb250ZXh0
TWVudUl0ZW1UYWdTaG93U3Vic3RpdHV0aW9ucyh0cnVlKSk7CisgICAgQ29udGV4dE1lbnVJdGVt
IHNtYXJ0Q29weVBhc3RlKENoZWNrYWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1Nt
YXJ0Q29weVBhc3RlLCBjb250ZXh0TWVudUl0ZW1UYWdTbWFydENvcHlQYXN0ZSgpKTsKKyAgICBD
b250ZXh0TWVudUl0ZW0gc21hcnRRdW90ZXMoQ2hlY2thYmxlQWN0aW9uVHlwZSwgQ29udGV4dE1l
bnVJdGVtVGFnU21hcnRRdW90ZXMsIGNvbnRleHRNZW51SXRlbVRhZ1NtYXJ0UXVvdGVzKCkpOwor
ICAgIENvbnRleHRNZW51SXRlbSBzbWFydERhc2hlcyhDaGVja2FibGVBY3Rpb25UeXBlLCBDb250
ZXh0TWVudUl0ZW1UYWdTbWFydERhc2hlcywgY29udGV4dE1lbnVJdGVtVGFnU21hcnREYXNoZXMo
KSk7CisgICAgQ29udGV4dE1lbnVJdGVtIHNtYXJ0TGlua3MoQ2hlY2thYmxlQWN0aW9uVHlwZSwg
Q29udGV4dE1lbnVJdGVtVGFnU21hcnRMaW5rcywgY29udGV4dE1lbnVJdGVtVGFnU21hcnRMaW5r
cygpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gdGV4dFJlcGxhY2VtZW50KENoZWNrYWJsZUFjdGlv
blR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1RleHRSZXBsYWNlbWVudCwgY29udGV4dE1lbnVJdGVt
VGFnVGV4dFJlcGxhY2VtZW50KCkpOworCisgICAgYXBwZW5kSXRlbShzaG93U3Vic3RpdHV0aW9u
cywgJnN1YnN0aXR1dGlvbnNNZW51KTsKKyAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCks
ICZzdWJzdGl0dXRpb25zTWVudSk7CisgICAgYXBwZW5kSXRlbShzbWFydENvcHlQYXN0ZSwgJnN1
YnN0aXR1dGlvbnNNZW51KTsKKyAgICBhcHBlbmRJdGVtKHNtYXJ0UXVvdGVzLCAmc3Vic3RpdHV0
aW9uc01lbnUpOworICAgIGFwcGVuZEl0ZW0oc21hcnREYXNoZXMsICZzdWJzdGl0dXRpb25zTWVu
dSk7CisgICAgYXBwZW5kSXRlbShzbWFydExpbmtzLCAmc3Vic3RpdHV0aW9uc01lbnUpOworICAg
IGFwcGVuZEl0ZW0odGV4dFJlcGxhY2VtZW50LCAmc3Vic3RpdHV0aW9uc01lbnUpOworCisgICAg
c3Vic3RpdHV0aW9uc01lbnVJdGVtLnNldFN1Yk1lbnUoJnN1YnN0aXR1dGlvbnNNZW51KTsKK30K
Kwordm9pZCBDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNyZWF0ZUFuZEFwcGVuZFRyYW5zZm9ybWF0
aW9uc1N1Yk1lbnUoQ29udGV4dE1lbnVJdGVtJiB0cmFuc2Zvcm1hdGlvbnNNZW51SXRlbSkKK3sK
KyAgICBDb250ZXh0TWVudSB0cmFuc2Zvcm1hdGlvbnNNZW51OworCisgICAgQ29udGV4dE1lbnVJ
dGVtIG1ha2VVcHBlckNhc2UoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnTWFrZVVwcGVy
Q2FzZSwgY29udGV4dE1lbnVJdGVtVGFnTWFrZVVwcGVyQ2FzZSgpKTsKKyAgICBDb250ZXh0TWVu
dUl0ZW0gbWFrZUxvd2VyQ2FzZShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdNYWtlTG93
ZXJDYXNlLCBjb250ZXh0TWVudUl0ZW1UYWdNYWtlTG93ZXJDYXNlKCkpOworICAgIENvbnRleHRN
ZW51SXRlbSBjYXBpdGFsaXplKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0NhcGl0YWxp
emUsIGNvbnRleHRNZW51SXRlbVRhZ0NhcGl0YWxpemUoKSk7CisKKyAgICBhcHBlbmRJdGVtKG1h
a2VVcHBlckNhc2UsICZ0cmFuc2Zvcm1hdGlvbnNNZW51KTsKKyAgICBhcHBlbmRJdGVtKG1ha2VM
b3dlckNhc2UsICZ0cmFuc2Zvcm1hdGlvbnNNZW51KTsKKyAgICBhcHBlbmRJdGVtKGNhcGl0YWxp
emUsICZ0cmFuc2Zvcm1hdGlvbnNNZW51KTsKKworICAgIHRyYW5zZm9ybWF0aW9uc01lbnVJdGVt
LnNldFN1Yk1lbnUoJnRyYW5zZm9ybWF0aW9uc01lbnUpOworfQorCisjZW5kaWYKKworc3RhdGlj
IGJvb2wgc2VsZWN0aW9uQ29udGFpbnNQb3NzaWJsZVdvcmQoRnJhbWUqIGZyYW1lKQoreworICAg
IC8vIEN1cnJlbnQgYWxnb3JpdGhtOiBsb29rIGZvciBhIGNoYXJhY3RlciB0aGF0J3Mgbm90IGp1
c3QgYSBzZXBhcmF0b3IuCisgICAgZm9yIChUZXh0SXRlcmF0b3IgaXQoZnJhbWUtPnNlbGVjdGlv
bigpLT50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsgIWl0LmF0RW5kKCk7IGl0LmFkdmFuY2Uo
KSkgeworICAgICAgICBpbnQgbGVuZ3RoID0gaXQubGVuZ3RoKCk7CisgICAgICAgIGNvbnN0IFVD
aGFyKiBjaGFyYWN0ZXJzID0gaXQuY2hhcmFjdGVycygpOworICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IGxlbmd0aDsgKytpKQorICAgICAgICAgICAgaWYgKCEoY2F0ZWdvcnkoY2hhcmFjdGVy
c1tpXSkgJiAoU2VwYXJhdG9yX1NwYWNlIHwgU2VwYXJhdG9yX0xpbmUgfCBTZXBhcmF0b3JfUGFy
YWdyYXBoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVy
biBmYWxzZTsKK30KKwordm9pZCBDb250ZXh0TWVudUNvbnRyb2xsZXI6OnBvcHVsYXRlKCkKK3sK
KyAgICBDb250ZXh0TWVudUl0ZW0gT3BlbkxpbmtJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51
SXRlbVRhZ09wZW5MaW5rLCBjb250ZXh0TWVudUl0ZW1UYWdPcGVuTGluaygpKTsKKyAgICBDb250
ZXh0TWVudUl0ZW0gT3BlbkxpbmtJbk5ld1dpbmRvd0l0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1l
bnVJdGVtVGFnT3BlbkxpbmtJbk5ld1dpbmRvdywgCisgICAgICAgIGNvbnRleHRNZW51SXRlbVRh
Z09wZW5MaW5rSW5OZXdXaW5kb3coKSk7CisgICAgQ29udGV4dE1lbnVJdGVtIERvd25sb2FkRmls
ZUl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnRG93bmxvYWRMaW5rVG9EaXNrLCAK
KyAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnRG93bmxvYWRMaW5rVG9EaXNrKCkpOworICAgIENv
bnRleHRNZW51SXRlbSBDb3B5TGlua0l0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFn
Q29weUxpbmtUb0NsaXBib2FyZCwgCisgICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ0NvcHlMaW5r
VG9DbGlwYm9hcmQoKSk7CisgICAgQ29udGV4dE1lbnVJdGVtIE9wZW5JbWFnZUluTmV3V2luZG93
SXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdPcGVuSW1hZ2VJbk5ld1dpbmRvdywg
CisgICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ09wZW5JbWFnZUluTmV3V2luZG93KCkpOworICAg
IENvbnRleHRNZW51SXRlbSBEb3dubG9hZEltYWdlSXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVu
dUl0ZW1UYWdEb3dubG9hZEltYWdlVG9EaXNrLCAKKyAgICAgICAgY29udGV4dE1lbnVJdGVtVGFn
RG93bmxvYWRJbWFnZVRvRGlzaygpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gQ29weUltYWdlSXRl
bShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdDb3B5SW1hZ2VUb0NsaXBib2FyZCwgCisg
ICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ0NvcHlJbWFnZVRvQ2xpcGJvYXJkKCkpOworICAgIENv
bnRleHRNZW51SXRlbSBPcGVuTWVkaWFJbk5ld1dpbmRvd0l0ZW0oQWN0aW9uVHlwZSwgQ29udGV4
dE1lbnVJdGVtVGFnT3Blbk1lZGlhSW5OZXdXaW5kb3csIFN0cmluZygpKTsKKyAgICBDb250ZXh0
TWVudUl0ZW0gQ29weU1lZGlhTGlua0l0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFn
Q29weU1lZGlhTGlua1RvQ2xpcGJvYXJkLCAKKyAgICAgICAgU3RyaW5nKCkpOworICAgIENvbnRl
eHRNZW51SXRlbSBNZWRpYVBsYXlQYXVzZShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdN
ZWRpYVBsYXlQYXVzZSwgCisgICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ01lZGlhUGxheSgpKTsK
KyAgICBDb250ZXh0TWVudUl0ZW0gTWVkaWFNdXRlKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRl
bVRhZ01lZGlhTXV0ZSwgCisgICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ01lZGlhTXV0ZSgpKTsK
KyAgICBDb250ZXh0TWVudUl0ZW0gVG9nZ2xlTWVkaWFDb250cm9scyhDaGVja2FibGVBY3Rpb25U
eXBlLCBDb250ZXh0TWVudUl0ZW1UYWdUb2dnbGVNZWRpYUNvbnRyb2xzLCAKKyAgICAgICAgY29u
dGV4dE1lbnVJdGVtVGFnVG9nZ2xlTWVkaWFDb250cm9scygpKTsKKyAgICBDb250ZXh0TWVudUl0
ZW0gVG9nZ2xlTWVkaWFMb29wKENoZWNrYWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRh
Z1RvZ2dsZU1lZGlhTG9vcCwgCisgICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ1RvZ2dsZU1lZGlh
TG9vcCgpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gRW50ZXJWaWRlb0Z1bGxzY3JlZW4oQWN0aW9u
VHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnRW50ZXJWaWRlb0Z1bGxzY3JlZW4sIAorICAgICAgICBj
b250ZXh0TWVudUl0ZW1UYWdFbnRlclZpZGVvRnVsbHNjcmVlbigpKTsKKyNpZiBQTEFURk9STShN
QUMpCisgICAgQ29udGV4dE1lbnVJdGVtIFNlYXJjaFNwb3RsaWdodEl0ZW0oQWN0aW9uVHlwZSwg
Q29udGV4dE1lbnVJdGVtVGFnU2VhcmNoSW5TcG90bGlnaHQsIAorICAgICAgICBjb250ZXh0TWVu
dUl0ZW1UYWdTZWFyY2hJblNwb3RsaWdodCgpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gTG9va0lu
RGljdGlvbmFyeUl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnTG9va1VwSW5EaWN0
aW9uYXJ5LCAKKyAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnTG9va1VwSW5EaWN0aW9uYXJ5KCkp
OworI2VuZGlmCisjaWYgIVBMQVRGT1JNKEdUSykKKyAgICBDb250ZXh0TWVudUl0ZW0gU2VhcmNo
V2ViSXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTZWFyY2hXZWIsIGNvbnRleHRN
ZW51SXRlbVRhZ1NlYXJjaFdlYigpKTsKKyNlbmRpZgorICAgIENvbnRleHRNZW51SXRlbSBDb3B5
SXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdDb3B5LCBjb250ZXh0TWVudUl0ZW1U
YWdDb3B5KCkpOworICAgIENvbnRleHRNZW51SXRlbSBCYWNrSXRlbShBY3Rpb25UeXBlLCBDb250
ZXh0TWVudUl0ZW1UYWdHb0JhY2ssIGNvbnRleHRNZW51SXRlbVRhZ0dvQmFjaygpKTsKKyAgICBD
b250ZXh0TWVudUl0ZW0gRm9yd2FyZEl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFn
R29Gb3J3YXJkLCAgY29udGV4dE1lbnVJdGVtVGFnR29Gb3J3YXJkKCkpOworICAgIENvbnRleHRN
ZW51SXRlbSBTdG9wSXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTdG9wLCBjb250
ZXh0TWVudUl0ZW1UYWdTdG9wKCkpOworICAgIENvbnRleHRNZW51SXRlbSBSZWxvYWRJdGVtKEFj
dGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1JlbG9hZCwgY29udGV4dE1lbnVJdGVtVGFnUmVs
b2FkKCkpOworICAgIENvbnRleHRNZW51SXRlbSBPcGVuRnJhbWVJdGVtKEFjdGlvblR5cGUsIENv
bnRleHRNZW51SXRlbVRhZ09wZW5GcmFtZUluTmV3V2luZG93LCAKKyAgICAgICAgY29udGV4dE1l
bnVJdGVtVGFnT3BlbkZyYW1lSW5OZXdXaW5kb3coKSk7CisgICAgQ29udGV4dE1lbnVJdGVtIE5v
R3Vlc3Nlc0l0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnTm9HdWVzc2VzRm91bmQs
IAorICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdOb0d1ZXNzZXNGb3VuZCgpKTsKKyAgICBDb250
ZXh0TWVudUl0ZW0gSWdub3JlU3BlbGxpbmdJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRl
bVRhZ0lnbm9yZVNwZWxsaW5nLCAKKyAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnSWdub3JlU3Bl
bGxpbmcoKSk7CisgICAgQ29udGV4dE1lbnVJdGVtIExlYXJuU3BlbGxpbmdJdGVtKEFjdGlvblR5
cGUsIENvbnRleHRNZW51SXRlbVRhZ0xlYXJuU3BlbGxpbmcsIAorICAgICAgICBjb250ZXh0TWVu
dUl0ZW1UYWdMZWFyblNwZWxsaW5nKCkpOworICAgIENvbnRleHRNZW51SXRlbSBJZ25vcmVHcmFt
bWFySXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdJZ25vcmVHcmFtbWFyLCAKKyAg
ICAgICAgY29udGV4dE1lbnVJdGVtVGFnSWdub3JlR3JhbW1hcigpKTsKKyAgICBDb250ZXh0TWVu
dUl0ZW0gQ3V0SXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdDdXQsIGNvbnRleHRN
ZW51SXRlbVRhZ0N1dCgpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gUGFzdGVJdGVtKEFjdGlvblR5
cGUsIENvbnRleHRNZW51SXRlbVRhZ1Bhc3RlLCBjb250ZXh0TWVudUl0ZW1UYWdQYXN0ZSgpKTsK
KyNpZiBQTEFURk9STShHVEspCisgICAgQ29udGV4dE1lbnVJdGVtIERlbGV0ZUl0ZW0oQWN0aW9u
VHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnRGVsZXRlLCBjb250ZXh0TWVudUl0ZW1UYWdEZWxldGUo
KSk7CisgICAgQ29udGV4dE1lbnVJdGVtIFNlbGVjdEFsbEl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4
dE1lbnVJdGVtVGFnU2VsZWN0QWxsLCBjb250ZXh0TWVudUl0ZW1UYWdTZWxlY3RBbGwoKSk7Cisj
ZW5kaWYKKworICAgIE5vZGUqIG5vZGUgPSBtX2hpdFRlc3RSZXN1bHQuaW5uZXJOb25TaGFyZWRO
b2RlKCk7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm47CisjaWYgUExBVEZPUk0oR1RL
KQorICAgIGlmICghbV9oaXRUZXN0UmVzdWx0LmlzQ29udGVudEVkaXRhYmxlKCkgJiYgKG5vZGUt
PmlzRWxlbWVudE5vZGUoKSAmJiBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSktPmlzRm9ybUNv
bnRyb2xFbGVtZW50KCkpKQorICAgICAgICByZXR1cm47CisjZW5kaWYKKyAgICBGcmFtZSogZnJh
bWUgPSBub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmICghbV9oaXRUZXN0UmVzdWx0LmlzQ29udGVudEVkaXRhYmxlKCkp
IHsKKyAgICAgICAgRnJhbWVMb2FkZXIqIGxvYWRlciA9IGZyYW1lLT5sb2FkZXIoKTsKKyAgICAg
ICAgS1VSTCBsaW5rVVJMID0gbV9oaXRUZXN0UmVzdWx0LmFic29sdXRlTGlua1VSTCgpOworICAg
ICAgICBpZiAoIWxpbmtVUkwuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBpZiAobG9hZGVyLT5j
YW5IYW5kbGVSZXF1ZXN0KFJlc291cmNlUmVxdWVzdChsaW5rVVJMKSkpIHsKKyAgICAgICAgICAg
ICAgICBhcHBlbmRJdGVtKE9wZW5MaW5rSXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAg
ICAgICAgICAgICAgYXBwZW5kSXRlbShPcGVuTGlua0luTmV3V2luZG93SXRlbSwgbV9jb250ZXh0
TWVudS5nZXQoKSk7CisgICAgICAgICAgICAgICAgYXBwZW5kSXRlbShEb3dubG9hZEZpbGVJdGVt
LCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFwcGVu
ZEl0ZW0oQ29weUxpbmtJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgfQorCisg
ICAgICAgIEtVUkwgaW1hZ2VVUkwgPSBtX2hpdFRlc3RSZXN1bHQuYWJzb2x1dGVJbWFnZVVSTCgp
OworICAgICAgICBpZiAoIWltYWdlVVJMLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgaWYgKCFs
aW5rVVJMLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJ
dGVtKCksIG1fY29udGV4dE1lbnUuZ2V0KCkpOworCisgICAgICAgICAgICBhcHBlbmRJdGVtKE9w
ZW5JbWFnZUluTmV3V2luZG93SXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAgICAg
ICBhcHBlbmRJdGVtKERvd25sb2FkSW1hZ2VJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAg
ICAgICAgICAgIGlmIChpbWFnZVVSTC5pc0xvY2FsRmlsZSgpIHx8IG1faGl0VGVzdFJlc3VsdC5p
bWFnZSgpKQorICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oQ29weUltYWdlSXRlbSwgbV9jb250
ZXh0TWVudS5nZXQoKSk7CisgICAgICAgIH0KKworICAgICAgICBLVVJMIG1lZGlhVVJMID0gbV9o
aXRUZXN0UmVzdWx0LmFic29sdXRlTWVkaWFVUkwoKTsKKyAgICAgICAgaWYgKCFtZWRpYVVSTC5p
c0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGlmICghbGlua1VSTC5pc0VtcHR5KCkgfHwgIWltYWdl
VVJMLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVt
KCksIG1fY29udGV4dE1lbnUuZ2V0KCkpOworCisgICAgICAgICAgICBhcHBlbmRJdGVtKE1lZGlh
UGxheVBhdXNlLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgICAgIGFwcGVuZEl0ZW0o
TWVkaWFNdXRlLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgICAgIGFwcGVuZEl0ZW0o
VG9nZ2xlTWVkaWFDb250cm9scywgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAgICAgICBh
cHBlbmRJdGVtKFRvZ2dsZU1lZGlhTG9vcCwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAg
ICAgICBhcHBlbmRJdGVtKEVudGVyVmlkZW9GdWxsc2NyZWVuLCBtX2NvbnRleHRNZW51LmdldCgp
KTsKKworICAgICAgICAgICAgYXBwZW5kSXRlbSgqc2VwYXJhdG9ySXRlbSgpLCBtX2NvbnRleHRN
ZW51LmdldCgpKTsKKyAgICAgICAgICAgIGFwcGVuZEl0ZW0oQ29weU1lZGlhTGlua0l0ZW0sIG1f
Y29udGV4dE1lbnUuZ2V0KCkpOworICAgICAgICAgICAgYXBwZW5kSXRlbShPcGVuTWVkaWFJbk5l
d1dpbmRvd0l0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKGltYWdlVVJMLmlzRW1wdHkoKSAmJiBsaW5rVVJMLmlzRW1wdHkoKSAmJiBtZWRpYVVSTC5p
c0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGlmIChtX2hpdFRlc3RSZXN1bHQuaXNTZWxlY3RlZCgp
KSB7CisgICAgICAgICAgICAgICAgaWYgKHNlbGVjdGlvbkNvbnRhaW5zUG9zc2libGVXb3JkKGZy
YW1lKSkgeworI2lmIFBMQVRGT1JNKE1BQykKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kSXRl
bShTZWFyY2hTcG90bGlnaHRJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyNlbmRpZgorI2lm
ICFQTEFURk9STShHVEspCisgICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oU2VhcmNoV2Vi
SXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0
ZW0oKnNlcGFyYXRvckl0ZW0oKSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisjZW5kaWYKKyNpZiBQ
TEFURk9STShNQUMpCisgICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oTG9va0luRGljdGlv
bmFyeUl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOworICAgICAgICAgICAgICAgICAgICBhcHBl
bmRJdGVtKCpzZXBhcmF0b3JJdGVtKCksIG1fY29udGV4dE1lbnUuZ2V0KCkpOworI2VuZGlmCisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oQ29weUl0ZW0sIG1f
Y29udGV4dE1lbnUuZ2V0KCkpOworI2lmIFBMQVRGT1JNKE1BQykKKyAgICAgICAgICAgICAgICBh
cHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCksIG1fY29udGV4dE1lbnUuZ2V0KCkpOworICAgICAg
ICAgICAgICAgIENvbnRleHRNZW51SXRlbSBTcGVlY2hNZW51SXRlbShTdWJtZW51VHlwZSwgQ29u
dGV4dE1lbnVJdGVtVGFnU3BlZWNoTWVudSwgY29udGV4dE1lbnVJdGVtVGFnU3BlZWNoTWVudSgp
KTsKKyAgICAgICAgICAgICAgICBjcmVhdGVBbmRBcHBlbmRTcGVlY2hTdWJNZW51KFNwZWVjaE1l
bnVJdGVtKTsKKyAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKFNwZWVjaE1lbnVJdGVtLCBtX2Nv
bnRleHRNZW51LmdldCgpKTsKKyNlbmRpZiAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKyAgICAgICAgICAgICAgICBpZiAoIShmcmFt
ZS0+cGFnZSgpICYmIGZyYW1lLT5wYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+aGFzSW5z
cGVjdG9yRnJvbnRlbmRDbGllbnQoKSkpIHsKKyNlbmRpZgorICAgICAgICAgICAgICAgIGlmIChm
cmFtZS0+cGFnZSgpICYmIGZyYW1lLT5wYWdlKCktPmJhY2tGb3J3YXJkKCktPmNhbkdvQmFja09y
Rm9yd2FyZCgtMSkpCisgICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oQmFja0l0ZW0sIG1f
Y29udGV4dE1lbnUuZ2V0KCkpOworCisgICAgICAgICAgICAgICAgaWYgKGZyYW1lLT5wYWdlKCkg
JiYgZnJhbWUtPnBhZ2UoKS0+YmFja0ZvcndhcmQoKS0+Y2FuR29CYWNrT3JGb3J3YXJkKDEpKQor
ICAgICAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKEZvcndhcmRJdGVtLCBtX2NvbnRleHRNZW51
LmdldCgpKTsKKworICAgICAgICAgICAgICAgIC8vIHVzZSBpc0xvYWRpbmdJbkFQSVNlbnNlIHJh
dGhlciB0aGFuIGlzTG9hZGluZyBiZWNhdXNlIFN0b3AvUmVsb2FkIGFyZQorICAgICAgICAgICAg
ICAgIC8vIGludGVuZGVkIHRvIG1hdGNoIFdlYktpdCdzIEFQSSwgbm90IFdlYkNvcmUncyBpbnRl
cm5hbCBub3Rpb24gb2YgbG9hZGluZyBzdGF0dXMKKyAgICAgICAgICAgICAgICBpZiAobG9hZGVy
LT5kb2N1bWVudExvYWRlcigpLT5pc0xvYWRpbmdJbkFQSVNlbnNlKCkpCisgICAgICAgICAgICAg
ICAgICAgIGFwcGVuZEl0ZW0oU3RvcEl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOworICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kSXRlbShSZWxvYWRJdGVt
LCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorICAgICAgICAg
ICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgICAgICAgICAgaWYgKGZyYW1lLT5wYWdlKCkgJiYg
ZnJhbWUgIT0gZnJhbWUtPnBhZ2UoKS0+bWFpbkZyYW1lKCkpCisgICAgICAgICAgICAgICAgICAg
IGFwcGVuZEl0ZW0oT3BlbkZyYW1lSXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9IGVsc2UgeyAvLyBNYWtlIGFuIGVkaXRpbmcgY29udGV4
dCBtZW51CisgICAgICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIqIHNlbGVjdGlvbiA9IGZyYW1lLT5z
ZWxlY3Rpb24oKTsKKyAgICAgICAgYm9vbCBpblBhc3N3b3JkRmllbGQgPSBzZWxlY3Rpb24tPmlz
SW5QYXNzd29yZEZpZWxkKCk7CisgICAgICAgIGJvb2wgc3BlbGxDaGVja2luZ0VuYWJsZWQgPSBm
cmFtZS0+ZWRpdG9yKCktPmlzU3BlbGxDaGVja2luZ0VuYWJsZWRGb3Iobm9kZSk7CisgICAgICAg
IAorICAgICAgICBpZiAoIWluUGFzc3dvcmRGaWVsZCAmJiBzcGVsbENoZWNraW5nRW5hYmxlZCkg
eworICAgICAgICAgICAgLy8gQ29uc2lkZXIgYWRkaW5nIHNwZWxsaW5nLXJlbGF0ZWQgb3IgZ3Jh
bW1hci1yZWxhdGVkIGNvbnRleHQgbWVudSBpdGVtcyAobmV2ZXIgYm90aCwgc2luY2UgYSBzaW5n
bGUgc2VsZWN0ZWQgcmFuZ2UKKyAgICAgICAgICAgIC8vIGlzIG5ldmVyIGNvbnNpZGVyZWQgYSBt
aXNzcGVsbGluZyBhbmQgYmFkIGdyYW1tYXIgYXQgdGhlIHNhbWUgdGltZSkKKyAgICAgICAgICAg
IGJvb2wgbWlzc3BlbGxpbmc7CisgICAgICAgICAgICBib29sIGJhZEdyYW1tYXI7CisgICAgICAg
ICAgICBWZWN0b3I8U3RyaW5nPiBndWVzc2VzID0gZnJhbWUtPmVkaXRvcigpLT5ndWVzc2VzRm9y
TWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbFNlbGVjdGlvbihtaXNzcGVsbGluZywgYmFkR3JhbW1h
cik7CisgICAgICAgICAgICBpZiAobWlzc3BlbGxpbmcgfHwgYmFkR3JhbW1hcikgeworICAgICAg
ICAgICAgICAgIHNpemVfdCBzaXplID0gZ3Vlc3Nlcy5zaXplKCk7CisgICAgICAgICAgICAgICAg
aWYgKHNpemUgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSdzIGJhZCBn
cmFtbWFyIGJ1dCBubyBzdWdnZXN0aW9ucyAoZS5nLiwgcmVwZWF0ZWQgd29yZCksIGp1c3QgbGVh
dmUgb2ZmIHRoZSBzdWdnZXN0aW9ucworICAgICAgICAgICAgICAgICAgICAvLyBsaXN0IGFuZCB0
cmFpbGluZyBzZXBhcmF0b3IgcmF0aGVyIHRoYW4gYWRkaW5nIGEgIk5vIEd1ZXNzZXMgRm91bmQi
IGl0ZW0gKG1hdGNoZXMgQXBwS2l0KQorICAgICAgICAgICAgICAgICAgICBpZiAobWlzc3BlbGxp
bmcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oTm9HdWVzc2VzSXRlbSwg
bV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRJdGVt
KCpzZXBhcmF0b3JJdGVtKCksIG1fY29udGV4dE1lbnUuZ2V0KCkpOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgU3RyaW5nICZndWVzcyA9IGd1ZXNzZXNbaV07CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIWd1ZXNzLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IENvbnRleHRNZW51SXRlbSBpdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1NwZWxs
aW5nR3Vlc3MsIGd1ZXNzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRJdGVt
KGl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oKnNl
cGFyYXRvckl0ZW0oKSwgbV9jb250ZXh0TWVudS5nZXQoKSk7ICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYg
KG1pc3NwZWxsaW5nKSB7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oSWdub3JlU3Bl
bGxpbmdJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgYXBw
ZW5kSXRlbShMZWFyblNwZWxsaW5nSXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAg
ICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oSWdub3JlR3Jh
bW1hckl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOworICAgICAgICAgICAgICAgIGFwcGVuZEl0
ZW0oKnNlcGFyYXRvckl0ZW0oKSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisjaWYgUExBVEZPUk0o
TUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdf
T05fTEVPUEFSRCkKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gSWYg
dGhlIHN0cmluZyB3YXMgYXV0b2NvcnJlY3RlZCwgZ2VuZXJhdGUgYSBjb250ZXh0dWFsIG1lbnUg
aXRlbSBhbGxvd2luZyBpdCB0byBiZSBjaGFuZ2VkIGJhY2suCisgICAgICAgICAgICAgICAgU3Ry
aW5nIHJlcGxhY2VkU3RyaW5nID0gbV9oaXRUZXN0UmVzdWx0LnJlcGxhY2VkU3RyaW5nKCk7Cisg
ICAgICAgICAgICAgICAgaWYgKCFyZXBsYWNlZFN0cmluZy5pc0VtcHR5KCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgQ29udGV4dE1lbnVJdGVtIGl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJ
dGVtVGFnQ2hhbmdlQmFjaywgY29udGV4dE1lbnVJdGVtVGFnQ2hhbmdlQmFjayhyZXBsYWNlZFN0
cmluZykpOworICAgICAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKGl0ZW0sIG1fY29udGV4dE1l
bnUuZ2V0KCkpOworICAgICAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVt
KCksIG1fY29udGV4dE1lbnUuZ2V0KCkpOworICAgICAgICAgICAgICAgIH0KKyNlbmRpZgorICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgRnJhbWVMb2FkZXIqIGxvYWRlciA9IGZy
YW1lLT5sb2FkZXIoKTsKKyAgICAgICAgS1VSTCBsaW5rVVJMID0gbV9oaXRUZXN0UmVzdWx0LmFi
c29sdXRlTGlua1VSTCgpOworICAgICAgICBpZiAoIWxpbmtVUkwuaXNFbXB0eSgpKSB7CisgICAg
ICAgICAgICBpZiAobG9hZGVyLT5jYW5IYW5kbGVSZXF1ZXN0KFJlc291cmNlUmVxdWVzdChsaW5r
VVJMKSkpIHsKKyAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKE9wZW5MaW5rSXRlbSwgbV9jb250
ZXh0TWVudS5nZXQoKSk7CisgICAgICAgICAgICAgICAgYXBwZW5kSXRlbShPcGVuTGlua0luTmV3
V2luZG93SXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAgICAgICAgICAgYXBwZW5k
SXRlbShEb3dubG9hZEZpbGVJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGFwcGVuZEl0ZW0oQ29weUxpbmtJdGVtLCBtX2NvbnRleHRNZW51Lmdl
dCgpKTsKKyAgICAgICAgICAgIGFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSwgbV9jb250ZXh0
TWVudS5nZXQoKSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobV9oaXRUZXN0UmVzdWx0Lmlz
U2VsZWN0ZWQoKSAmJiAhaW5QYXNzd29yZEZpZWxkICYmIHNlbGVjdGlvbkNvbnRhaW5zUG9zc2li
bGVXb3JkKGZyYW1lKSkgeworI2lmIFBMQVRGT1JNKE1BQykKKyAgICAgICAgICAgIGFwcGVuZEl0
ZW0oU2VhcmNoU3BvdGxpZ2h0SXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisjZW5kaWYKKyNp
ZiAhUExBVEZPUk0oR1RLKQorICAgICAgICAgICAgYXBwZW5kSXRlbShTZWFyY2hXZWJJdGVtLCBt
X2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgICAgIGFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0
ZW0oKSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisjZW5kaWYKKyAgICAgCisjaWYgUExBVEZPUk0o
TUFDKQorICAgICAgICAgICAgYXBwZW5kSXRlbShMb29rSW5EaWN0aW9uYXJ5SXRlbSwgbV9jb250
ZXh0TWVudS5nZXQoKSk7CisgICAgICAgICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCks
IG1fY29udGV4dE1lbnUuZ2V0KCkpOworI2VuZGlmCisgICAgICAgIH0KKworICAgICAgICBhcHBl
bmRJdGVtKEN1dEl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOworICAgICAgICBhcHBlbmRJdGVt
KENvcHlJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgYXBwZW5kSXRlbShQYXN0
ZUl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOworI2lmIFBMQVRGT1JNKEdUSykKKyAgICAgICAg
YXBwZW5kSXRlbShEZWxldGVJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgYXBw
ZW5kSXRlbSgqc2VwYXJhdG9ySXRlbSgpLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAg
YXBwZW5kSXRlbShTZWxlY3RBbGxJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyNlbmRpZgor
CisgICAgICAgIGlmICghaW5QYXNzd29yZEZpZWxkKSB7CisgICAgICAgICAgICBhcHBlbmRJdGVt
KCpzZXBhcmF0b3JJdGVtKCksIG1fY29udGV4dE1lbnUuZ2V0KCkpOworI2lmbmRlZiBCVUlMRElO
R19PTl9USUdFUgorI2lmICFQTEFURk9STShHVEspCisgICAgICAgICAgICBDb250ZXh0TWVudUl0
ZW0gU3BlbGxpbmdBbmRHcmFtbWFyTWVudUl0ZW0oU3VibWVudVR5cGUsIENvbnRleHRNZW51SXRl
bVRhZ1NwZWxsaW5nTWVudSwgCisgICAgICAgICAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnU3Bl
bGxpbmdNZW51KCkpOworICAgICAgICAgICAgY3JlYXRlQW5kQXBwZW5kU3BlbGxpbmdBbmRHcmFt
bWFyU3ViTWVudShTcGVsbGluZ0FuZEdyYW1tYXJNZW51SXRlbSk7CisgICAgICAgICAgICBhcHBl
bmRJdGVtKFNwZWxsaW5nQW5kR3JhbW1hck1lbnVJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsK
KyNlbmRpZgorI2Vsc2UKKyAgICAgICAgICAgIENvbnRleHRNZW51SXRlbSBTcGVsbGluZ01lbnVJ
dGVtKFN1Ym1lbnVUeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTcGVsbGluZ01lbnUsIAorICAgICAg
ICAgICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ1NwZWxsaW5nTWVudSgpKTsKKyAgICAgICAgICAg
IGNyZWF0ZUFuZEFwcGVuZFNwZWxsaW5nU3ViTWVudShTcGVsbGluZ01lbnVJdGVtKTsKKyAgICAg
ICAgICAgIGFwcGVuZEl0ZW0oU3BlbGxpbmdNZW51SXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7
CisjZW5kaWYKKyNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VS
KSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQorICAgICAgICAgICAgQ29udGV4dE1l
bnVJdGVtIHN1YnN0aXR1dGlvbnNNZW51SXRlbShTdWJtZW51VHlwZSwgQ29udGV4dE1lbnVJdGVt
VGFnU3Vic3RpdHV0aW9uc01lbnUsIAorICAgICAgICAgICAgICAgIGNvbnRleHRNZW51SXRlbVRh
Z1N1YnN0aXR1dGlvbnNNZW51KCkpOworICAgICAgICAgICAgY3JlYXRlQW5kQXBwZW5kU3Vic3Rp
dHV0aW9uc1N1Yk1lbnUoc3Vic3RpdHV0aW9uc01lbnVJdGVtKTsKKyAgICAgICAgICAgIGFwcGVu
ZEl0ZW0oc3Vic3RpdHV0aW9uc01lbnVJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAg
ICAgICAgIENvbnRleHRNZW51SXRlbSB0cmFuc2Zvcm1hdGlvbnNNZW51SXRlbShTdWJtZW51VHlw
ZSwgQ29udGV4dE1lbnVJdGVtVGFnVHJhbnNmb3JtYXRpb25zTWVudSwgCisgICAgICAgICAgICAg
ICAgY29udGV4dE1lbnVJdGVtVGFnVHJhbnNmb3JtYXRpb25zTWVudSgpKTsKKyAgICAgICAgICAg
IGNyZWF0ZUFuZEFwcGVuZFRyYW5zZm9ybWF0aW9uc1N1Yk1lbnUodHJhbnNmb3JtYXRpb25zTWVu
dUl0ZW0pOworICAgICAgICAgICAgYXBwZW5kSXRlbSh0cmFuc2Zvcm1hdGlvbnNNZW51SXRlbSwg
bV9jb250ZXh0TWVudS5nZXQoKSk7CisjZW5kaWYKKyNpZiBQTEFURk9STShHVEspCisgICAgICAg
ICAgICBib29sIHNob3VsZFNob3dGb250TWVudSA9IGZyYW1lLT5lZGl0b3IoKS0+Y2FuRWRpdFJp
Y2hseSgpOworI2Vsc2UKKyAgICAgICAgICAgIGJvb2wgc2hvdWxkU2hvd0ZvbnRNZW51ID0gdHJ1
ZTsKKyNlbmRpZgorICAgICAgICAgICAgaWYgKHNob3VsZFNob3dGb250TWVudSkgeworICAgICAg
ICAgICAgICAgIENvbnRleHRNZW51SXRlbSBGb250TWVudUl0ZW0oU3VibWVudVR5cGUsIENvbnRl
eHRNZW51SXRlbVRhZ0ZvbnRNZW51LCAKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dE1lbnVJ
dGVtVGFnRm9udE1lbnUoKSk7CisgICAgICAgICAgICAgICAgY3JlYXRlQW5kQXBwZW5kRm9udFN1
Yk1lbnUoRm9udE1lbnVJdGVtKTsKKyAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKEZvbnRNZW51
SXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAgICAgICB9CisjaWYgUExBVEZPUk0o
TUFDKQorICAgICAgICAgICAgQ29udGV4dE1lbnVJdGVtIFNwZWVjaE1lbnVJdGVtKFN1Ym1lbnVU
eXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTcGVlY2hNZW51LCBjb250ZXh0TWVudUl0ZW1UYWdTcGVl
Y2hNZW51KCkpOworICAgICAgICAgICAgY3JlYXRlQW5kQXBwZW5kU3BlZWNoU3ViTWVudShTcGVl
Y2hNZW51SXRlbSk7CisgICAgICAgICAgICBhcHBlbmRJdGVtKFNwZWVjaE1lbnVJdGVtLCBtX2Nv
bnRleHRNZW51LmdldCgpKTsKKyNlbmRpZgorI2lmICFQTEFURk9STShHVEspCisgICAgICAgICAg
ICBDb250ZXh0TWVudUl0ZW0gV3JpdGluZ0RpcmVjdGlvbk1lbnVJdGVtKFN1Ym1lbnVUeXBlLCBD
b250ZXh0TWVudUl0ZW1UYWdXcml0aW5nRGlyZWN0aW9uTWVudSwgCisgICAgICAgICAgICAgICAg
Y29udGV4dE1lbnVJdGVtVGFnV3JpdGluZ0RpcmVjdGlvbk1lbnUoKSk7CisgICAgICAgICAgICBj
cmVhdGVBbmRBcHBlbmRXcml0aW5nRGlyZWN0aW9uU3ViTWVudShXcml0aW5nRGlyZWN0aW9uTWVu
dUl0ZW0pOworICAgICAgICAgICAgYXBwZW5kSXRlbShXcml0aW5nRGlyZWN0aW9uTWVudUl0ZW0s
IG1fY29udGV4dE1lbnUuZ2V0KCkpOworICAgICAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBmcmFt
ZS0+cGFnZSgpKSB7CisgICAgICAgICAgICAgICAgaWYgKFNldHRpbmdzKiBzZXR0aW5ncyA9IHBh
Z2UtPnNldHRpbmdzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBpbmNsdWRlVGV4dERp
cmVjdGlvblN1Ym1lbnUgPSBzZXR0aW5ncy0+dGV4dERpcmVjdGlvblN1Ym1lbnVJbmNsdXNpb25C
ZWhhdmlvcigpID09IFRleHREaXJlY3Rpb25TdWJtZW51QWx3YXlzSW5jbHVkZWQKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHx8IChzZXR0aW5ncy0+dGV4dERpcmVjdGlvblN1Ym1lbnVJbmNsdXNp
b25CZWhhdmlvcigpID09IFRleHREaXJlY3Rpb25TdWJtZW51QXV0b21hdGljYWxseUluY2x1ZGVk
ICYmIGZyYW1lLT5lZGl0b3IoKS0+aGFzQmlkaVNlbGVjdGlvbigpKTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGluY2x1ZGVUZXh0RGlyZWN0aW9uU3VibWVudSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgQ29udGV4dE1lbnVJdGVtIFRleHREaXJlY3Rpb25NZW51SXRlbShTdWJtZW51VHlw
ZSwgQ29udGV4dE1lbnVJdGVtVGFnVGV4dERpcmVjdGlvbk1lbnUsIAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ1RleHREaXJlY3Rpb25NZW51KCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgY3JlYXRlQW5kQXBwZW5kVGV4dERpcmVjdGlvblN1Yk1lbnUo
VGV4dERpcmVjdGlvbk1lbnVJdGVtKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0
ZW0oVGV4dERpcmVjdGlvbk1lbnVJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyNlbmRpZgor
ICAgICAgICB9CisgICAgfQorfQorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKK3ZvaWQgQ29udGV4
dE1lbnVDb250cm9sbGVyOjphZGRJbnNwZWN0RWxlbWVudEl0ZW0oKQoreworICAgIE5vZGUqIG5v
ZGUgPSBtX2hpdFRlc3RSZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCk7CisgICAgaWYgKCFub2Rl
KQorICAgICAgICByZXR1cm47CisKKyAgICBGcmFtZSogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgp
LT5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIFBhZ2Uq
IHBhZ2UgPSBmcmFtZS0+cGFnZSgpOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKCFwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIENvbnRleHRNZW51SXRlbSBJbnNwZWN0RWxlbWVudEl0ZW0oQWN0aW9uVHlwZSwgQ29u
dGV4dE1lbnVJdGVtVGFnSW5zcGVjdEVsZW1lbnQsIGNvbnRleHRNZW51SXRlbVRhZ0luc3BlY3RF
bGVtZW50KCkpOworICAgIGFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSwgbV9jb250ZXh0TWVu
dS5nZXQoKSk7CisgICAgYXBwZW5kSXRlbShJbnNwZWN0RWxlbWVudEl0ZW0sIG1fY29udGV4dE1l
bnUuZ2V0KCkpOworfQorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKK3ZvaWQgQ29udGV4
dE1lbnVDb250cm9sbGVyOjpjaGVja09yRW5hYmxlSWZOZWVkZWQoQ29udGV4dE1lbnVJdGVtJiBp
dGVtKSBjb25zdAoreworICAgIGlmIChpdGVtLnR5cGUoKSA9PSBTZXBhcmF0b3JUeXBlKQorICAg
ICAgICByZXR1cm47CisgICAgCisgICAgRnJhbWUqIGZyYW1lID0gbV9oaXRUZXN0UmVzdWx0Lmlu
bmVyTm9uU2hhcmVkTm9kZSgpLT5kb2N1bWVudCgpLT5mcmFtZSgpOworICAgIGlmICghZnJhbWUp
CisgICAgICAgIHJldHVybjsKKworICAgIC8vIEN1c3RvbSBpdGVtcyBhbHJlYWR5IGhhdmUgcHJv
cGVyIGNoZWNrZWQgYW5kIGVuYWJsZWQgdmFsdWVzLgorICAgIGlmIChDb250ZXh0TWVudUl0ZW1C
YXNlQ3VzdG9tVGFnIDw9IGl0ZW0uYWN0aW9uKCkgJiYgaXRlbS5hY3Rpb24oKSA8PSBDb250ZXh0
TWVudUl0ZW1MYXN0Q3VzdG9tVGFnKQorICAgICAgICByZXR1cm47CisKKyAgICBib29sIHNob3Vs
ZEVuYWJsZSA9IHRydWU7CisgICAgYm9vbCBzaG91bGRDaGVjayA9IGZhbHNlOyAKKworICAgIHN3
aXRjaCAoaXRlbS5hY3Rpb24oKSkgeworICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0No
ZWNrU3BlbGxpbmc6CisgICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+ZWRpdG9yKCkt
PmNhbkVkaXQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbnRleHRNZW51
SXRlbVRhZ0RlZmF1bHREaXJlY3Rpb246CisgICAgICAgICAgICBzaG91bGRDaGVjayA9IGZhbHNl
OworICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gZmFsc2U7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdMZWZ0VG9SaWdodDoKKyAgICAgICAgY2Fz
ZSBDb250ZXh0TWVudUl0ZW1UYWdSaWdodFRvTGVmdDogeworICAgICAgICAgICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7CisgICAgICAgICAgICBSZWZQdHI8Q1NTU3R5bGVEZWNsYXJhdGlvbj4gc3R5
bGUgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+Y3JlYXRlQ1NTU3R5bGVEZWNsYXJhdGlvbigpOworICAg
ICAgICAgICAgU3RyaW5nIGRpcmVjdGlvbiA9IGl0ZW0uYWN0aW9uKCkgPT0gQ29udGV4dE1lbnVJ
dGVtVGFnTGVmdFRvUmlnaHQgPyAibHRyIiA6ICJydGwiOworICAgICAgICAgICAgc3R5bGUtPnNl
dFByb3BlcnR5KENTU1Byb3BlcnR5RGlyZWN0aW9uLCBkaXJlY3Rpb24sIGZhbHNlLCBlYyk7Cisg
ICAgICAgICAgICBzaG91bGRDaGVjayA9IGZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0aW9uSGFzU3R5
bGUoc3R5bGUuZ2V0KCkpICE9IEZhbHNlVHJpU3RhdGU7CisgICAgICAgICAgICBzaG91bGRFbmFi
bGUgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBD
b250ZXh0TWVudUl0ZW1UYWdUZXh0RGlyZWN0aW9uRGVmYXVsdDogeworICAgICAgICAgICAgRWRp
dG9yOjpDb21tYW5kIGNvbW1hbmQgPSBmcmFtZS0+ZWRpdG9yKCktPmNvbW1hbmQoIk1ha2VUZXh0
V3JpdGluZ0RpcmVjdGlvbk5hdHVyYWwiKTsKKyAgICAgICAgICAgIHNob3VsZENoZWNrID0gY29t
bWFuZC5zdGF0ZSgpID09IFRydWVUcmlTdGF0ZTsKKyAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9
IGNvbW1hbmQuaXNFbmFibGVkKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1RleHREaXJlY3Rpb25MZWZ0VG9SaWdodDogewor
ICAgICAgICAgICAgRWRpdG9yOjpDb21tYW5kIGNvbW1hbmQgPSBmcmFtZS0+ZWRpdG9yKCktPmNv
bW1hbmQoIk1ha2VUZXh0V3JpdGluZ0RpcmVjdGlvbkxlZnRUb1JpZ2h0Iik7CisgICAgICAgICAg
ICBzaG91bGRDaGVjayA9IGNvbW1hbmQuc3RhdGUoKSA9PSBUcnVlVHJpU3RhdGU7CisgICAgICAg
ICAgICBzaG91bGRFbmFibGUgPSBjb21tYW5kLmlzRW5hYmxlZCgpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdUZXh0RGlyZWN0
aW9uUmlnaHRUb0xlZnQ6IHsKKyAgICAgICAgICAgIEVkaXRvcjo6Q29tbWFuZCBjb21tYW5kID0g
ZnJhbWUtPmVkaXRvcigpLT5jb21tYW5kKCJNYWtlVGV4dFdyaXRpbmdEaXJlY3Rpb25SaWdodFRv
TGVmdCIpOworICAgICAgICAgICAgc2hvdWxkQ2hlY2sgPSBjb21tYW5kLnN0YXRlKCkgPT0gVHJ1
ZVRyaVN0YXRlOworICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gY29tbWFuZC5pc0VuYWJsZWQo
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ29udGV4dE1l
bnVJdGVtVGFnQ29weToKKyAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGZyYW1lLT5lZGl0b3Io
KS0+Y2FuREhUTUxDb3B5KCkgfHwgZnJhbWUtPmVkaXRvcigpLT5jYW5Db3B5KCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdDdXQ6CisgICAgICAg
ICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+ZWRpdG9yKCktPmNhbkRIVE1MQ3V0KCkgfHwgZnJh
bWUtPmVkaXRvcigpLT5jYW5DdXQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IENvbnRleHRNZW51SXRlbVRhZ0lnbm9yZVNwZWxsaW5nOgorICAgICAgICBjYXNlIENvbnRleHRN
ZW51SXRlbVRhZ0xlYXJuU3BlbGxpbmc6CisgICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFt
ZS0+c2VsZWN0aW9uKCktPmlzUmFuZ2UoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIENvbnRleHRNZW51SXRlbVRhZ1Bhc3RlOgorICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0g
ZnJhbWUtPmVkaXRvcigpLT5jYW5ESFRNTFBhc3RlKCkgfHwgZnJhbWUtPmVkaXRvcigpLT5jYW5Q
YXN0ZSgpOworICAgICAgICAgICAgYnJlYWs7CisjaWYgUExBVEZPUk0oR1RLKQorICAgICAgICBj
YXNlIENvbnRleHRNZW51SXRlbVRhZ0RlbGV0ZToKKyAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9
IGZyYW1lLT5lZGl0b3IoKS0+Y2FuRGVsZXRlKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTZWxlY3RBbGw6CisgICAgICAgIGNhc2UgQ29udGV4
dE1lbnVJdGVtVGFnSW5wdXRNZXRob2RzOgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRh
Z1VuaWNvZGU6CisgICAgICAgICAgICBzaG91bGRFbmFibGUgPSB0cnVlOworICAgICAgICAgICAg
YnJlYWs7CisjZW5kaWYKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdVbmRlcmxpbmU6
IHsKKyAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgICAgICAgICAgUmVmUHRy
PENTU1N0eWxlRGVjbGFyYXRpb24+IHN0eWxlID0gZnJhbWUtPmRvY3VtZW50KCktPmNyZWF0ZUNT
U1N0eWxlRGVjbGFyYXRpb24oKTsKKyAgICAgICAgICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQ
cm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uc0luRWZmZWN0LCAidW5kZXJsaW5lIiwgZmFsc2Us
IGVjKTsKKyAgICAgICAgICAgIHNob3VsZENoZWNrID0gZnJhbWUtPmVkaXRvcigpLT5zZWxlY3Rp
b25IYXNTdHlsZShzdHlsZS5nZXQoKSkgIT0gRmFsc2VUcmlTdGF0ZTsKKyAgICAgICAgICAgIHNo
b3VsZEVuYWJsZSA9IGZyYW1lLT5lZGl0b3IoKS0+Y2FuRWRpdFJpY2hseSgpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdMb29r
VXBJbkRpY3Rpb25hcnk6CisgICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+c2VsZWN0
aW9uKCktPmlzUmFuZ2UoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbnRl
eHRNZW51SXRlbVRhZ0NoZWNrR3JhbW1hcldpdGhTcGVsbGluZzoKKyNpZm5kZWYgQlVJTERJTkdf
T05fVElHRVIKKyAgICAgICAgICAgIGlmIChmcmFtZS0+ZWRpdG9yKCktPmlzR3JhbW1hckNoZWNr
aW5nRW5hYmxlZCgpKQorICAgICAgICAgICAgICAgIHNob3VsZENoZWNrID0gdHJ1ZTsKKyAgICAg
ICAgICAgIHNob3VsZEVuYWJsZSA9IHRydWU7CisjZW5kaWYKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0l0YWxpYzogeworICAgICAgICAgICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgICAgICAgICBSZWZQdHI8Q1NTU3R5bGVEZWNsYXJhdGlv
bj4gc3R5bGUgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+Y3JlYXRlQ1NTU3R5bGVEZWNsYXJhdGlvbigp
OworICAgICAgICAgICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFN0eWxlLCAi
aXRhbGljIiwgZmFsc2UsIGVjKTsKKyAgICAgICAgICAgIHNob3VsZENoZWNrID0gZnJhbWUtPmVk
aXRvcigpLT5zZWxlY3Rpb25IYXNTdHlsZShzdHlsZS5nZXQoKSkgIT0gRmFsc2VUcmlTdGF0ZTsK
KyAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGZyYW1lLT5lZGl0b3IoKS0+Y2FuRWRpdFJpY2hs
eSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDb250ZXh0
TWVudUl0ZW1UYWdCb2xkOiB7CisgICAgICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAg
ICAgICAgICAgIFJlZlB0cjxDU1NTdHlsZURlY2xhcmF0aW9uPiBzdHlsZSA9IGZyYW1lLT5kb2N1
bWVudCgpLT5jcmVhdGVDU1NTdHlsZURlY2xhcmF0aW9uKCk7CisgICAgICAgICAgICBzdHlsZS0+
c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlGb250V2VpZ2h0LCAiYm9sZCIsIGZhbHNlLCBlYyk7Cisg
ICAgICAgICAgICBzaG91bGRDaGVjayA9IGZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0aW9uSGFzU3R5
bGUoc3R5bGUuZ2V0KCkpICE9IEZhbHNlVHJpU3RhdGU7CisgICAgICAgICAgICBzaG91bGRFbmFi
bGUgPSBmcmFtZS0+ZWRpdG9yKCktPmNhbkVkaXRSaWNobHkoKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnT3V0bGluZToKKyAg
ICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU2hvd1NwZWxsaW5nUGFuZWw6CisjaWZuZGVmIEJV
SUxESU5HX09OX1RJR0VSCisgICAgICAgICAgICBpZiAoZnJhbWUtPmVkaXRvcigpLT5zcGVsbGlu
Z1BhbmVsSXNTaG93aW5nKCkpCisgICAgICAgICAgICAgICAgaXRlbS5zZXRUaXRsZShjb250ZXh0
TWVudUl0ZW1UYWdTaG93U3BlbGxpbmdQYW5lbChmYWxzZSkpOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIGl0ZW0uc2V0VGl0bGUoY29udGV4dE1lbnVJdGVtVGFnU2hvd1NwZWxs
aW5nUGFuZWwodHJ1ZSkpOworI2VuZGlmCisgICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFt
ZS0+ZWRpdG9yKCktPmNhbkVkaXQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IENvbnRleHRNZW51SXRlbVRhZ05vR3Vlc3Nlc0ZvdW5kOgorICAgICAgICAgICAgc2hvdWxkRW5h
YmxlID0gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb250ZXh0TWVu
dUl0ZW1UYWdDaGVja1NwZWxsaW5nV2hpbGVUeXBpbmc6CisgICAgICAgICAgICBzaG91bGRDaGVj
ayA9IGZyYW1lLT5lZGl0b3IoKS0+aXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKTsK
KyAgICAgICAgICAgIGJyZWFrOworI2lmIFBMQVRGT1JNKE1BQykKKyAgICAgICAgY2FzZSBDb250
ZXh0TWVudUl0ZW1UYWdTdWJzdGl0dXRpb25zTWVudToKKyAgICAgICAgY2FzZSBDb250ZXh0TWVu
dUl0ZW1UYWdUcmFuc2Zvcm1hdGlvbnNNZW51OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU2hvd1N1YnN0aXR1dGlvbnM6CisjaWYgIWRlZmluZWQo
QlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpCisgICAg
ICAgICAgICBpZiAoZnJhbWUtPmVkaXRvcigpLT5zdWJzdGl0dXRpb25zUGFuZWxJc1Nob3dpbmco
KSkKKyAgICAgICAgICAgICAgICBpdGVtLnNldFRpdGxlKGNvbnRleHRNZW51SXRlbVRhZ1Nob3dT
dWJzdGl0dXRpb25zKGZhbHNlKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
aXRlbS5zZXRUaXRsZShjb250ZXh0TWVudUl0ZW1UYWdTaG93U3Vic3RpdHV0aW9ucyh0cnVlKSk7
CisgICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+ZWRpdG9yKCktPmNhbkVkaXQoKTsK
KyNlbmRpZgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVt
VGFnTWFrZVVwcGVyQ2FzZToKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdNYWtlTG93
ZXJDYXNlOgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0NhcGl0YWxpemU6CisgICAg
ICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQ2hhbmdlQmFjazoKKyAgICAgICAgICAgIHNob3Vs
ZEVuYWJsZSA9IGZyYW1lLT5lZGl0b3IoKS0+Y2FuRWRpdCgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQ29ycmVjdFNwZWxsaW5nQXV0b21hdGlj
YWxseToKKyNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJ
TkdfT05fTEVPUEFSRCkKKyAgICAgICAgICAgIHNob3VsZENoZWNrID0gZnJhbWUtPmVkaXRvcigp
LT5pc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQoKTsKKyNlbmRpZgorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU21hcnRDb3B5UGFz
dGU6CisjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5H
X09OX0xFT1BBUkQpCisgICAgICAgICAgICBzaG91bGRDaGVjayA9IGZyYW1lLT5lZGl0b3IoKS0+
c21hcnRJbnNlcnREZWxldGVFbmFibGVkKCk7CisjZW5kaWYKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1NtYXJ0UXVvdGVzOgorI2lmICFkZWZpbmVk
KEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQorICAg
ICAgICAgICAgc2hvdWxkQ2hlY2sgPSBmcmFtZS0+ZWRpdG9yKCktPmlzQXV0b21hdGljUXVvdGVT
dWJzdGl0dXRpb25FbmFibGVkKCk7CisjZW5kaWYKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1NtYXJ0RGFzaGVzOgorI2lmICFkZWZpbmVkKEJVSUxE
SU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQorICAgICAgICAg
ICAgc2hvdWxkQ2hlY2sgPSBmcmFtZS0+ZWRpdG9yKCktPmlzQXV0b21hdGljRGFzaFN1YnN0aXR1
dGlvbkVuYWJsZWQoKTsKKyNlbmRpZgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtVGFnU21hcnRMaW5rczoKKyNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9U
SUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKKyAgICAgICAgICAgIHNob3Vs
ZENoZWNrID0gZnJhbWUtPmVkaXRvcigpLT5pc0F1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVk
KCk7CisjZW5kaWYKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbnRleHRNZW51
SXRlbVRhZ1RleHRSZXBsYWNlbWVudDoKKyNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikg
JiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKKyAgICAgICAgICAgIHNob3VsZENoZWNr
ID0gZnJhbWUtPmVkaXRvcigpLT5pc0F1dG9tYXRpY1RleHRSZXBsYWNlbWVudEVuYWJsZWQoKTsK
KyNlbmRpZgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVt
VGFnU3RvcFNwZWFraW5nOgorICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gY2xpZW50KCkgJiYg
Y2xpZW50KCktPmlzU3BlYWtpbmcoKTsKKyAgICAgICAgICAgIGJyZWFrOworI2Vsc2UgLy8gUExB
VEZPUk0oTUFDKSBlbmRzIGhlcmUKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTdG9w
U3BlYWtpbmc6CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZgorI2lmIFBMQVRGT1JNKEdUSykK
KyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdHb0JhY2s6CisgICAgICAgICAgICBzaG91
bGRFbmFibGUgPSBmcmFtZS0+cGFnZSgpICYmIGZyYW1lLT5wYWdlKCktPmJhY2tGb3J3YXJkKCkt
PmNhbkdvQmFja09yRm9yd2FyZCgtMSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBDb250ZXh0TWVudUl0ZW1UYWdHb0ZvcndhcmQ6CisgICAgICAgICAgICBzaG91bGRFbmFibGUg
PSBmcmFtZS0+cGFnZSgpICYmIGZyYW1lLT5wYWdlKCktPmJhY2tGb3J3YXJkKCktPmNhbkdvQmFj
a09yRm9yd2FyZCgxKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbnRleHRN
ZW51SXRlbVRhZ1N0b3A6CisgICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+bG9hZGVy
KCktPmRvY3VtZW50TG9hZGVyKCktPmlzTG9hZGluZ0luQVBJU2Vuc2UoKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1JlbG9hZDoKKyAgICAgICAg
ICAgIHNob3VsZEVuYWJsZSA9ICFmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPmlz
TG9hZGluZ0luQVBJU2Vuc2UoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENv
bnRleHRNZW51SXRlbVRhZ0ZvbnRNZW51OgorICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gZnJh
bWUtPmVkaXRvcigpLT5jYW5FZGl0UmljaGx5KCk7CisgICAgICAgICAgICBicmVhazsKKyNlbHNl
CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnR29CYWNrOgorICAgICAgICBjYXNlIENv
bnRleHRNZW51SXRlbVRhZ0dvRm9yd2FyZDoKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1U
YWdTdG9wOgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1JlbG9hZDoKKyAgICAgICAg
Y2FzZSBDb250ZXh0TWVudUl0ZW1UYWdGb250TWVudToKKyNlbmRpZgorICAgICAgICBjYXNlIENv
bnRleHRNZW51SXRlbVRhZ05vQWN0aW9uOgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRh
Z09wZW5MaW5rSW5OZXdXaW5kb3c6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnRG93
bmxvYWRMaW5rVG9EaXNrOgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0NvcHlMaW5r
VG9DbGlwYm9hcmQ6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnT3BlbkltYWdlSW5O
ZXdXaW5kb3c6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnRG93bmxvYWRJbWFnZVRv
RGlzazoKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdDb3B5SW1hZ2VUb0NsaXBib2Fy
ZDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ09w
ZW5NZWRpYUluTmV3V2luZG93OgorICAgICAgICAgICAgaWYgKG1faGl0VGVzdFJlc3VsdC5tZWRp
YUlzVmlkZW8oKSkKKyAgICAgICAgICAgICAgICBpdGVtLnNldFRpdGxlKGNvbnRleHRNZW51SXRl
bVRhZ09wZW5WaWRlb0luTmV3V2luZG93KCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIGl0ZW0uc2V0VGl0bGUoY29udGV4dE1lbnVJdGVtVGFnT3BlbkF1ZGlvSW5OZXdXaW5k
b3coKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1U
YWdDb3B5TWVkaWFMaW5rVG9DbGlwYm9hcmQ6CisgICAgICAgICAgICBpZiAobV9oaXRUZXN0UmVz
dWx0Lm1lZGlhSXNWaWRlbygpKQorICAgICAgICAgICAgICAgIGl0ZW0uc2V0VGl0bGUoY29udGV4
dE1lbnVJdGVtVGFnQ29weVZpZGVvTGlua1RvQ2xpcGJvYXJkKCkpOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIGl0ZW0uc2V0VGl0bGUoY29udGV4dE1lbnVJdGVtVGFnQ29weUF1
ZGlvTGlua1RvQ2xpcGJvYXJkKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtVGFnVG9nZ2xlTWVkaWFDb250cm9sczoKKyAgICAgICAgICAgIHNob3Vs
ZENoZWNrID0gbV9oaXRUZXN0UmVzdWx0Lm1lZGlhQ29udHJvbHNFbmFibGVkKCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdUb2dnbGVNZWRpYUxv
b3A6CisgICAgICAgICAgICBzaG91bGRDaGVjayA9IG1faGl0VGVzdFJlc3VsdC5tZWRpYUxvb3BF
bmFibGVkKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0
ZW1UYWdFbnRlclZpZGVvRnVsbHNjcmVlbjoKKyAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IG1f
aGl0VGVzdFJlc3VsdC5tZWRpYVN1cHBvcnRzRnVsbHNjcmVlbigpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnT3BlbkZyYW1lSW5OZXdXaW5kb3c6
CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU3BlbGxpbmdHdWVzczoKKyAgICAgICAg
Y2FzZSBDb250ZXh0TWVudUl0ZW1UYWdPdGhlcjoKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0
ZW1UYWdTZWFyY2hJblNwb3RsaWdodDoKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdT
ZWFyY2hXZWI6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnT3BlbldpdGhEZWZhdWx0
QXBwbGljYXRpb246CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtUERGQWN0dWFsU2l6ZToK
KyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1QREZab29tSW46CisgICAgICAgIGNhc2UgQ29u
dGV4dE1lbnVJdGVtUERGWm9vbU91dDoKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1QREZB
dXRvU2l6ZToKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1QREZTaW5nbGVQYWdlOgorICAg
ICAgICBjYXNlIENvbnRleHRNZW51SXRlbVBERkZhY2luZ1BhZ2VzOgorICAgICAgICBjYXNlIENv
bnRleHRNZW51SXRlbVBERkNvbnRpbnVvdXM6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVt
UERGTmV4dFBhZ2U6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtUERGUHJldmlvdXNQYWdl
OgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5MaW5rOgorICAgICAgICBjYXNl
IENvbnRleHRNZW51SXRlbVRhZ0lnbm9yZUdyYW1tYXI6CisgICAgICAgIGNhc2UgQ29udGV4dE1l
bnVJdGVtVGFnU3BlbGxpbmdNZW51OgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1No
b3dGb250czoKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTdHlsZXM6CisgICAgICAg
IGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU2hvd0NvbG9yczoKKyAgICAgICAgY2FzZSBDb250ZXh0
TWVudUl0ZW1UYWdTcGVlY2hNZW51OgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1N0
YXJ0U3BlYWtpbmc6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnV3JpdGluZ0RpcmVj
dGlvbk1lbnU6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnVGV4dERpcmVjdGlvbk1l
bnU6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnUERGU2luZ2xlUGFnZVNjcm9sbGlu
ZzoKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdQREZGYWNpbmdQYWdlc1Njcm9sbGlu
ZzoKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRh
Z0luc3BlY3RFbGVtZW50OgorI2VuZGlmCisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtQmFz
ZUN1c3RvbVRhZzoKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1DdXN0b21UYWdOb0FjdGlv
bjoKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1MYXN0Q3VzdG9tVGFnOgorICAgICAgICBj
YXNlIENvbnRleHRNZW51SXRlbUJhc2VBcHBsaWNhdGlvblRhZzoKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ01lZGlhUGxheVBhdXNlOgorICAgICAg
ICAgICAgaWYgKG1faGl0VGVzdFJlc3VsdC5tZWRpYVBsYXlpbmcoKSkKKyAgICAgICAgICAgICAg
ICBpdGVtLnNldFRpdGxlKGNvbnRleHRNZW51SXRlbVRhZ01lZGlhUGF1c2UoKSk7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgaXRlbS5zZXRUaXRsZShjb250ZXh0TWVudUl0ZW1U
YWdNZWRpYVBsYXkoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb250ZXh0
TWVudUl0ZW1UYWdNZWRpYU11dGU6CisgICAgICAgICAgICBzaG91bGRFbmFibGUgPSBtX2hpdFRl
c3RSZXN1bHQubWVkaWFIYXNBdWRpbygpOworICAgICAgICAgICAgc2hvdWxkQ2hlY2sgPSBzaG91
bGRFbmFibGUgJiYgIG1faGl0VGVzdFJlc3VsdC5tZWRpYU11dGVkKCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICB9CisKKyAgICBpdGVtLnNldENoZWNrZWQoc2hvdWxkQ2hlY2spOworICAgIGl0
ZW0uc2V0RW5hYmxlZChzaG91bGRFbmFibGUpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKICNlbmRpZiAvLyBFTkFCTEUoQ09OVEVYVF9NRU5VUykKSW5kZXg6IFdlYkNvcmUvcGFnZS9D
b250ZXh0TWVudUNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvQ29udGV4
dE1lbnVDb250cm9sbGVyLmgJKHJldmlzaW9uIDczNDY5KQorKysgV2ViQ29yZS9wYWdlL0NvbnRl
eHRNZW51Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZu
ZGVmIENvbnRleHRNZW51Q29udHJvbGxlcl9oCiAjZGVmaW5lIENvbnRleHRNZW51Q29udHJvbGxl
cl9oCiAKKyNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlh
YmxlLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+CkBAIC00NSw3ICs0Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgQ29udGV4
dE1lbnVDb250cm9sbGVyKFBhZ2UqLCBDb250ZXh0TWVudUNsaWVudCopOwogICAgICAgICB+Q29u
dGV4dE1lbnVDb250cm9sbGVyKCk7CiAKLSAgICAgICAgQ29udGV4dE1lbnVDbGllbnQqIGNsaWVu
dCgpIHsgcmV0dXJuIG1fY2xpZW50OyB9CisgICAgICAgIENvbnRleHRNZW51Q2xpZW50KiBjbGll
bnQoKSBjb25zdCB7IHJldHVybiBtX2NsaWVudDsgfQogCiAgICAgICAgIENvbnRleHRNZW51KiBj
b250ZXh0TWVudSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dE1lbnUuZ2V0KCk7IH0KICAgICAg
ICAgdm9pZCBjbGVhckNvbnRleHRNZW51KCk7CkBAIC01MywxNiArNTQsMzUgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICB2b2lkIGhhbmRsZUNvbnRleHRNZW51RXZlbnQoRXZlbnQqKTsK
ICAgICAgICAgdm9pZCBzaG93Q29udGV4dE1lbnUoRXZlbnQqLCBQYXNzUmVmUHRyPENvbnRleHRN
ZW51UHJvdmlkZXI+KTsKIAorICAgICAgICB2b2lkIHBvcHVsYXRlKCk7CiAgICAgICAgIHZvaWQg
Y29udGV4dE1lbnVJdGVtU2VsZWN0ZWQoQ29udGV4dE1lbnVJdGVtKik7CisgICAgICAgIHZvaWQg
YWRkSW5zcGVjdEVsZW1lbnRJdGVtKCk7CisKKyAgICAgICAgdm9pZCBjaGVja09yRW5hYmxlSWZO
ZWVkZWQoQ29udGV4dE1lbnVJdGVtJikgY29uc3Q7CisKKyAgICAgICAgdm9pZCBzZXRIaXRUZXN0
UmVzdWx0KGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCkgeyBtX2hpdFRlc3RSZXN1bHQgPSBy
ZXN1bHQ7IH0KKyAgICAgICAgY29uc3QgSGl0VGVzdFJlc3VsdCYgaGl0VGVzdFJlc3VsdCgpIHsg
cmV0dXJuIG1faGl0VGVzdFJlc3VsdDsgfQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgQ29udGV4
dE1lbnUqIGNyZWF0ZUNvbnRleHRNZW51KEV2ZW50Kik7CiAgICAgICAgIHZvaWQgc2hvd0NvbnRl
eHRNZW51KEV2ZW50Kik7CisgICAgICAgIAorICAgICAgICB2b2lkIGFwcGVuZEl0ZW0oQ29udGV4
dE1lbnVJdGVtJiwgQ29udGV4dE1lbnUqIHBhcmVudE1lbnUpOworCisgICAgICAgIHZvaWQgY3Jl
YXRlQW5kQXBwZW5kRm9udFN1Yk1lbnUoQ29udGV4dE1lbnVJdGVtJiBmb250TWVudUl0ZW0pOwor
ICAgICAgICB2b2lkIGNyZWF0ZUFuZEFwcGVuZFNwZWxsaW5nQW5kR3JhbW1hclN1Yk1lbnUoQ29u
dGV4dE1lbnVJdGVtJiBzcGVsbGluZ0FuZEdyYW1tYXJNZW51SXRlbSk7CisgICAgICAgIHZvaWQg
Y3JlYXRlQW5kQXBwZW5kU3BlbGxpbmdTdWJNZW51KENvbnRleHRNZW51SXRlbSYgc3BlbGxpbmdN
ZW51SXRlbSk7CisgICAgICAgIHZvaWQgY3JlYXRlQW5kQXBwZW5kU3BlZWNoU3ViTWVudShDb250
ZXh0TWVudUl0ZW0mIHNwZWVjaE1lbnVJdGVtKTsKKyAgICAgICAgdm9pZCBjcmVhdGVBbmRBcHBl
bmRXcml0aW5nRGlyZWN0aW9uU3ViTWVudShDb250ZXh0TWVudUl0ZW0mIHdyaXRpbmdEaXJlY3Rp
b25NZW51SXRlbSk7CisgICAgICAgIHZvaWQgY3JlYXRlQW5kQXBwZW5kVGV4dERpcmVjdGlvblN1
Yk1lbnUoQ29udGV4dE1lbnVJdGVtJiB0ZXh0RGlyZWN0aW9uTWVudUl0ZW0pOworICAgICAgICB2
b2lkIGNyZWF0ZUFuZEFwcGVuZFN1YnN0aXR1dGlvbnNTdWJNZW51KENvbnRleHRNZW51SXRlbSYg
c3Vic3RpdHV0aW9uc01lbnVJdGVtKTsKKyAgICAgICAgdm9pZCBjcmVhdGVBbmRBcHBlbmRUcmFu
c2Zvcm1hdGlvbnNTdWJNZW51KENvbnRleHRNZW51SXRlbSYgdHJhbnNmb3JtYXRpb25zTWVudUl0
ZW0pOwogCiAgICAgICAgIFBhZ2UqIG1fcGFnZTsKICAgICAgICAgQ29udGV4dE1lbnVDbGllbnQq
IG1fY2xpZW50OwogICAgICAgICBPd25QdHI8Q29udGV4dE1lbnU+IG1fY29udGV4dE1lbnU7CiAg
ICAgICAgIFJlZlB0cjxDb250ZXh0TWVudVByb3ZpZGVyPiBtX21lbnVQcm92aWRlcjsKKyAgICAg
ICAgSGl0VGVzdFJlc3VsdCBtX2hpdFRlc3RSZXN1bHQ7CiAgICAgfTsKIAogfQpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9Db250ZXh0TWVudS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9Db250ZXh0TWVudS5jcHAJKHJldmlzaW9uIDczNDY5KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9Db250ZXh0TWVudS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsODkwICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDA4IENocmlzdGlhbiBEeXdhbiA8Y2hyaXN0aWFuQGltZW5k
aW8uY29tPgotICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwKLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNvbnRleHRNZW51LmgiCi0KLSNpZiBFTkFCTEUoQ09O
VEVYVF9NRU5VUykKLQotI2luY2x1ZGUgIkJhY2tGb3J3YXJkQ29udHJvbGxlci5oIgotI2luY2x1
ZGUgIkNvbnRleHRNZW51Q29udHJvbGxlci5oIgotI2luY2x1ZGUgIkNvbnRleHRNZW51Q2xpZW50
LmgiCi0jaW5jbHVkZSAiQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgiCi0jaW5jbHVkZSAi
Q1NTUHJvcGVydHkuaCIKLSNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCi0jaW5jbHVkZSAi
RG9jdW1lbnQuaCIKLSNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgotI2luY2x1ZGUgIkVkaXRv
ci5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKLSNpbmNs
dWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiS1VSTC5oIgotI2luY2x1ZGUg
IkxvY2FsaXplZFN0cmluZ3MuaCIKLSNpbmNsdWRlICJOb2RlLmgiCi0jaW5jbHVkZSAiUGFnZS5o
IgotI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgotI2luY2x1ZGUgIlNlbGVjdGlvbkNvbnRy
b2xsZXIuaCIKLSNpbmNsdWRlICJTZXR0aW5ncy5oIgotI2luY2x1ZGUgIlRleHRJdGVyYXRvci5o
IgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotdXNpbmcgbmFtZXNwYWNlIHN0ZDsK
LXVzaW5nIG5hbWVzcGFjZSBXVEY7Ci11c2luZyBuYW1lc3BhY2UgVW5pY29kZTsKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1Db250ZXh0TWVudUNvbnRyb2xsZXIqIENvbnRleHRNZW51Ojpjb250
cm9sbGVyKCkgY29uc3QKLXsKLSAgICBpZiAoTm9kZSogbm9kZSA9IG1faGl0VGVzdFJlc3VsdC5p
bm5lck5vblNoYXJlZE5vZGUoKSkKLSAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IG5vZGUtPmRv
Y3VtZW50KCktPmZyYW1lKCkpCi0gICAgICAgICAgICBpZiAoUGFnZSogcGFnZSA9IGZyYW1lLT5w
YWdlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHBhZ2UtPmNvbnRleHRNZW51Q29udHJvbGxl
cigpOwotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgUGFzc093blB0cjxDb250ZXh0TWVudUl0
ZW0+IHNlcGFyYXRvckl0ZW0oKQotewotICAgIHJldHVybiBuZXcgQ29udGV4dE1lbnVJdGVtKFNl
cGFyYXRvclR5cGUsIENvbnRleHRNZW51SXRlbVRhZ05vQWN0aW9uLCBTdHJpbmcoKSk7Ci19Ci0K
LXN0YXRpYyB2b2lkIGNyZWF0ZUFuZEFwcGVuZEZvbnRTdWJNZW51KGNvbnN0IEhpdFRlc3RSZXN1
bHQmIHJlc3VsdCwgQ29udGV4dE1lbnVJdGVtJiBmb250TWVudUl0ZW0pCi17Ci0gICAgQ29udGV4
dE1lbnUgZm9udE1lbnUocmVzdWx0KTsKLQotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBDb250ZXh0
TWVudUl0ZW0gc2hvd0ZvbnRzKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1Nob3dGb250
cywgY29udGV4dE1lbnVJdGVtVGFnU2hvd0ZvbnRzKCkpOwotI2VuZGlmCi0gICAgQ29udGV4dE1l
bnVJdGVtIGJvbGQoQ2hlY2thYmxlQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnQm9sZCwg
Y29udGV4dE1lbnVJdGVtVGFnQm9sZCgpKTsKLSAgICBDb250ZXh0TWVudUl0ZW0gaXRhbGljKENo
ZWNrYWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0l0YWxpYywgY29udGV4dE1lbnVJ
dGVtVGFnSXRhbGljKCkpOwotICAgIENvbnRleHRNZW51SXRlbSB1bmRlcmxpbmUoQ2hlY2thYmxl
QWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnVW5kZXJsaW5lLCBjb250ZXh0TWVudUl0ZW1U
YWdVbmRlcmxpbmUoKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIG91dGxpbmUoQWN0aW9uVHlwZSwg
Q29udGV4dE1lbnVJdGVtVGFnT3V0bGluZSwgY29udGV4dE1lbnVJdGVtVGFnT3V0bGluZSgpKTsK
LSNpZiBQTEFURk9STShNQUMpCi0gICAgQ29udGV4dE1lbnVJdGVtIHN0eWxlcyhBY3Rpb25UeXBl
LCBDb250ZXh0TWVudUl0ZW1UYWdTdHlsZXMsIGNvbnRleHRNZW51SXRlbVRhZ1N0eWxlcygpKTsK
LSAgICBDb250ZXh0TWVudUl0ZW0gc2hvd0NvbG9ycyhBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0
ZW1UYWdTaG93Q29sb3JzLCBjb250ZXh0TWVudUl0ZW1UYWdTaG93Q29sb3JzKCkpOwotI2VuZGlm
Ci0KLSNpZiBQTEFURk9STShNQUMpCi0gICAgZm9udE1lbnUuYXBwZW5kSXRlbShzaG93Rm9udHMp
OwotI2VuZGlmCi0gICAgZm9udE1lbnUuYXBwZW5kSXRlbShib2xkKTsKLSAgICBmb250TWVudS5h
cHBlbmRJdGVtKGl0YWxpYyk7Ci0gICAgZm9udE1lbnUuYXBwZW5kSXRlbSh1bmRlcmxpbmUpOwot
ICAgIGZvbnRNZW51LmFwcGVuZEl0ZW0ob3V0bGluZSk7Ci0jaWYgUExBVEZPUk0oTUFDKQotICAg
IGZvbnRNZW51LmFwcGVuZEl0ZW0oc3R5bGVzKTsKLSAgICBmb250TWVudS5hcHBlbmRJdGVtKCpz
ZXBhcmF0b3JJdGVtKCkpOwotICAgIGZvbnRNZW51LmFwcGVuZEl0ZW0oc2hvd0NvbG9ycyk7Ci0j
ZW5kaWYKLQotICAgIGZvbnRNZW51SXRlbS5zZXRTdWJNZW51KCZmb250TWVudSk7Ci19Ci0KLSNp
ZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikKLQotI2lmICFQTEFURk9STShHVEspCi0KLXN0
YXRpYyB2b2lkIGNyZWF0ZUFuZEFwcGVuZFNwZWxsaW5nQW5kR3JhbW1hclN1Yk1lbnUoY29uc3Qg
SGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBDb250ZXh0TWVudUl0ZW0mIHNwZWxsaW5nQW5kR3JhbW1h
ck1lbnVJdGVtKQotewotICAgIENvbnRleHRNZW51IHNwZWxsaW5nQW5kR3JhbW1hck1lbnUocmVz
dWx0KTsKLQotICAgIENvbnRleHRNZW51SXRlbSBzaG93U3BlbGxpbmdQYW5lbChBY3Rpb25UeXBl
LCBDb250ZXh0TWVudUl0ZW1UYWdTaG93U3BlbGxpbmdQYW5lbCwgCi0gICAgICAgIGNvbnRleHRN
ZW51SXRlbVRhZ1Nob3dTcGVsbGluZ1BhbmVsKHRydWUpKTsKLSAgICBDb250ZXh0TWVudUl0ZW0g
Y2hlY2tTcGVsbGluZyhBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdDaGVja1NwZWxsaW5n
LCAKLSAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnQ2hlY2tTcGVsbGluZygpKTsKLSAgICBDb250
ZXh0TWVudUl0ZW0gY2hlY2tBc1lvdVR5cGUoQ2hlY2thYmxlQWN0aW9uVHlwZSwgQ29udGV4dE1l
bnVJdGVtVGFnQ2hlY2tTcGVsbGluZ1doaWxlVHlwaW5nLCAKLSAgICAgICAgY29udGV4dE1lbnVJ
dGVtVGFnQ2hlY2tTcGVsbGluZ1doaWxlVHlwaW5nKCkpOwotICAgIENvbnRleHRNZW51SXRlbSBn
cmFtbWFyV2l0aFNwZWxsaW5nKENoZWNrYWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRh
Z0NoZWNrR3JhbW1hcldpdGhTcGVsbGluZywgCi0gICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ0No
ZWNrR3JhbW1hcldpdGhTcGVsbGluZygpKTsKLSNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVk
KEJVSUxESU5HX09OX0xFT1BBUkQpCi0gICAgQ29udGV4dE1lbnVJdGVtIGNvcnJlY3RTcGVsbGlu
ZyhDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdDb3JyZWN0U3BlbGxpbmdB
dXRvbWF0aWNhbGx5LCAKLSAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnQ29ycmVjdFNwZWxsaW5n
QXV0b21hdGljYWxseSgpKTsKLSNlbmRpZgotCi0gICAgc3BlbGxpbmdBbmRHcmFtbWFyTWVudS5h
cHBlbmRJdGVtKHNob3dTcGVsbGluZ1BhbmVsKTsKLSAgICBzcGVsbGluZ0FuZEdyYW1tYXJNZW51
LmFwcGVuZEl0ZW0oY2hlY2tTcGVsbGluZyk7Ci0jaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5l
ZChCVUlMRElOR19PTl9MRU9QQVJEKQotICAgIHNwZWxsaW5nQW5kR3JhbW1hck1lbnUuYXBwZW5k
SXRlbSgqc2VwYXJhdG9ySXRlbSgpKTsKLSNlbmRpZgotICAgIHNwZWxsaW5nQW5kR3JhbW1hck1l
bnUuYXBwZW5kSXRlbShjaGVja0FzWW91VHlwZSk7Ci0gICAgc3BlbGxpbmdBbmRHcmFtbWFyTWVu
dS5hcHBlbmRJdGVtKGdyYW1tYXJXaXRoU3BlbGxpbmcpOwotI2lmIFBMQVRGT1JNKE1BQykgJiYg
IWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKLSAgICBzcGVsbGluZ0FuZEdyYW1tYXJNZW51
LmFwcGVuZEl0ZW0oY29ycmVjdFNwZWxsaW5nKTsKLSNlbmRpZgotCi0gICAgc3BlbGxpbmdBbmRH
cmFtbWFyTWVudUl0ZW0uc2V0U3ViTWVudSgmc3BlbGxpbmdBbmRHcmFtbWFyTWVudSk7Ci19Ci0K
LSNlbmRpZiAvLyAhUExBVEZPUk0oR1RLKQotCi0jZWxzZQotCi1zdGF0aWMgdm9pZCBjcmVhdGVB
bmRBcHBlbmRTcGVsbGluZ1N1Yk1lbnUoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBDb250
ZXh0TWVudUl0ZW0mIHNwZWxsaW5nTWVudUl0ZW0pCi17Ci0gICAgQ29udGV4dE1lbnUgc3BlbGxp
bmdNZW51KHJlc3VsdCk7Ci0KLSAgICBDb250ZXh0TWVudUl0ZW0gc2hvd1NwZWxsaW5nUGFuZWwo
QWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU2hvd1NwZWxsaW5nUGFuZWwsIAotICAgICAg
ICBjb250ZXh0TWVudUl0ZW1UYWdTaG93U3BlbGxpbmdQYW5lbCh0cnVlKSk7Ci0gICAgQ29udGV4
dE1lbnVJdGVtIGNoZWNrU3BlbGxpbmcoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnQ2hl
Y2tTcGVsbGluZywgCi0gICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ0NoZWNrU3BlbGxpbmcoKSk7
Ci0gICAgQ29udGV4dE1lbnVJdGVtIGNoZWNrQXNZb3VUeXBlKENoZWNrYWJsZUFjdGlvblR5cGUs
IENvbnRleHRNZW51SXRlbVRhZ0NoZWNrU3BlbGxpbmdXaGlsZVR5cGluZywgCi0gICAgICAgIGNv
bnRleHRNZW51SXRlbVRhZ0NoZWNrU3BlbGxpbmdXaGlsZVR5cGluZygpKTsKLQotICAgIHNwZWxs
aW5nTWVudS5hcHBlbmRJdGVtKHNob3dTcGVsbGluZ1BhbmVsKTsKLSAgICBzcGVsbGluZ01lbnUu
YXBwZW5kSXRlbShjaGVja1NwZWxsaW5nKTsKLSAgICBzcGVsbGluZ01lbnUuYXBwZW5kSXRlbShj
aGVja0FzWW91VHlwZSk7Ci0KLSAgICBzcGVsbGluZ01lbnVJdGVtLnNldFN1Yk1lbnUoJnNwZWxs
aW5nTWVudSk7Ci19Ci0KLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oTUFDKQotCi1zdGF0aWMgdm9p
ZCBjcmVhdGVBbmRBcHBlbmRTcGVlY2hTdWJNZW51KGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3Vs
dCwgQ29udGV4dE1lbnVJdGVtJiBzcGVlY2hNZW51SXRlbSkKLXsKLSAgICBDb250ZXh0TWVudSBz
cGVlY2hNZW51KHJlc3VsdCk7Ci0KLSAgICBDb250ZXh0TWVudUl0ZW0gc3RhcnQoQWN0aW9uVHlw
ZSwgQ29udGV4dE1lbnVJdGVtVGFnU3RhcnRTcGVha2luZywgY29udGV4dE1lbnVJdGVtVGFnU3Rh
cnRTcGVha2luZygpKTsKLSAgICBDb250ZXh0TWVudUl0ZW0gc3RvcChBY3Rpb25UeXBlLCBDb250
ZXh0TWVudUl0ZW1UYWdTdG9wU3BlYWtpbmcsIGNvbnRleHRNZW51SXRlbVRhZ1N0b3BTcGVha2lu
ZygpKTsKLQotICAgIHNwZWVjaE1lbnUuYXBwZW5kSXRlbShzdGFydCk7Ci0gICAgc3BlZWNoTWVu
dS5hcHBlbmRJdGVtKHN0b3ApOwotCi0gICAgc3BlZWNoTWVudUl0ZW0uc2V0U3ViTWVudSgmc3Bl
ZWNoTWVudSk7Ci19Ci0KLSNlbmRpZgotIAotI2lmICFQTEFURk9STShHVEspCi0KLXN0YXRpYyB2
b2lkIGNyZWF0ZUFuZEFwcGVuZFdyaXRpbmdEaXJlY3Rpb25TdWJNZW51KGNvbnN0IEhpdFRlc3RS
ZXN1bHQmIHJlc3VsdCwgQ29udGV4dE1lbnVJdGVtJiB3cml0aW5nRGlyZWN0aW9uTWVudUl0ZW0p
Ci17Ci0gICAgQ29udGV4dE1lbnUgd3JpdGluZ0RpcmVjdGlvbk1lbnUocmVzdWx0KTsKLQotICAg
IENvbnRleHRNZW51SXRlbSBkZWZhdWx0SXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1U
YWdEZWZhdWx0RGlyZWN0aW9uLCAKLSAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnRGVmYXVsdERp
cmVjdGlvbigpKTsKLSAgICBDb250ZXh0TWVudUl0ZW0gbHRyKENoZWNrYWJsZUFjdGlvblR5cGUs
IENvbnRleHRNZW51SXRlbVRhZ0xlZnRUb1JpZ2h0LCBjb250ZXh0TWVudUl0ZW1UYWdMZWZ0VG9S
aWdodCgpKTsKLSAgICBDb250ZXh0TWVudUl0ZW0gcnRsKENoZWNrYWJsZUFjdGlvblR5cGUsIENv
bnRleHRNZW51SXRlbVRhZ1JpZ2h0VG9MZWZ0LCBjb250ZXh0TWVudUl0ZW1UYWdSaWdodFRvTGVm
dCgpKTsKLQotICAgIHdyaXRpbmdEaXJlY3Rpb25NZW51LmFwcGVuZEl0ZW0oZGVmYXVsdEl0ZW0p
OwotICAgIHdyaXRpbmdEaXJlY3Rpb25NZW51LmFwcGVuZEl0ZW0obHRyKTsKLSAgICB3cml0aW5n
RGlyZWN0aW9uTWVudS5hcHBlbmRJdGVtKHJ0bCk7Ci0KLSAgICB3cml0aW5nRGlyZWN0aW9uTWVu
dUl0ZW0uc2V0U3ViTWVudSgmd3JpdGluZ0RpcmVjdGlvbk1lbnUpOwotfQotCi1zdGF0aWMgdm9p
ZCBjcmVhdGVBbmRBcHBlbmRUZXh0RGlyZWN0aW9uU3ViTWVudShjb25zdCBIaXRUZXN0UmVzdWx0
JiByZXN1bHQsIENvbnRleHRNZW51SXRlbSYgdGV4dERpcmVjdGlvbk1lbnVJdGVtKQotewotICAg
IENvbnRleHRNZW51IHRleHREaXJlY3Rpb25NZW51KHJlc3VsdCk7Ci0KLSAgICBDb250ZXh0TWVu
dUl0ZW0gZGVmYXVsdEl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnVGV4dERpcmVj
dGlvbkRlZmF1bHQsIGNvbnRleHRNZW51SXRlbVRhZ0RlZmF1bHREaXJlY3Rpb24oKSk7Ci0gICAg
Q29udGV4dE1lbnVJdGVtIGx0cihDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1U
YWdUZXh0RGlyZWN0aW9uTGVmdFRvUmlnaHQsIGNvbnRleHRNZW51SXRlbVRhZ0xlZnRUb1JpZ2h0
KCkpOwotICAgIENvbnRleHRNZW51SXRlbSBydGwoQ2hlY2thYmxlQWN0aW9uVHlwZSwgQ29udGV4
dE1lbnVJdGVtVGFnVGV4dERpcmVjdGlvblJpZ2h0VG9MZWZ0LCBjb250ZXh0TWVudUl0ZW1UYWdS
aWdodFRvTGVmdCgpKTsKLQotICAgIHRleHREaXJlY3Rpb25NZW51LmFwcGVuZEl0ZW0oZGVmYXVs
dEl0ZW0pOwotICAgIHRleHREaXJlY3Rpb25NZW51LmFwcGVuZEl0ZW0obHRyKTsKLSAgICB0ZXh0
RGlyZWN0aW9uTWVudS5hcHBlbmRJdGVtKHJ0bCk7Ci0KLSAgICB0ZXh0RGlyZWN0aW9uTWVudUl0
ZW0uc2V0U3ViTWVudSgmdGV4dERpcmVjdGlvbk1lbnUpOwotfQotCi0jZW5kaWYKLQotI2lmIFBM
QVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJV
SUxESU5HX09OX0xFT1BBUkQpCi0KLXN0YXRpYyB2b2lkIGNyZWF0ZUFuZEFwcGVuZFN1YnN0aXR1
dGlvbnNTdWJNZW51KGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgQ29udGV4dE1lbnVJdGVt
JiBzdWJzdGl0dXRpb25zTWVudUl0ZW0pCi17Ci0gICAgQ29udGV4dE1lbnUgc3Vic3RpdHV0aW9u
c01lbnUocmVzdWx0KTsKLQotICAgIENvbnRleHRNZW51SXRlbSBzaG93U3Vic3RpdHV0aW9ucyhB
Y3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTaG93U3Vic3RpdHV0aW9ucywgY29udGV4dE1l
bnVJdGVtVGFnU2hvd1N1YnN0aXR1dGlvbnModHJ1ZSkpOwotICAgIENvbnRleHRNZW51SXRlbSBz
bWFydENvcHlQYXN0ZShDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTbWFy
dENvcHlQYXN0ZSwgY29udGV4dE1lbnVJdGVtVGFnU21hcnRDb3B5UGFzdGUoKSk7Ci0gICAgQ29u
dGV4dE1lbnVJdGVtIHNtYXJ0UXVvdGVzKENoZWNrYWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51
SXRlbVRhZ1NtYXJ0UXVvdGVzLCBjb250ZXh0TWVudUl0ZW1UYWdTbWFydFF1b3RlcygpKTsKLSAg
ICBDb250ZXh0TWVudUl0ZW0gc21hcnREYXNoZXMoQ2hlY2thYmxlQWN0aW9uVHlwZSwgQ29udGV4
dE1lbnVJdGVtVGFnU21hcnREYXNoZXMsIGNvbnRleHRNZW51SXRlbVRhZ1NtYXJ0RGFzaGVzKCkp
OwotICAgIENvbnRleHRNZW51SXRlbSBzbWFydExpbmtzKENoZWNrYWJsZUFjdGlvblR5cGUsIENv
bnRleHRNZW51SXRlbVRhZ1NtYXJ0TGlua3MsIGNvbnRleHRNZW51SXRlbVRhZ1NtYXJ0TGlua3Mo
KSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIHRleHRSZXBsYWNlbWVudChDaGVja2FibGVBY3Rpb25U
eXBlLCBDb250ZXh0TWVudUl0ZW1UYWdUZXh0UmVwbGFjZW1lbnQsIGNvbnRleHRNZW51SXRlbVRh
Z1RleHRSZXBsYWNlbWVudCgpKTsKLQotICAgIHN1YnN0aXR1dGlvbnNNZW51LmFwcGVuZEl0ZW0o
c2hvd1N1YnN0aXR1dGlvbnMpOwotICAgIHN1YnN0aXR1dGlvbnNNZW51LmFwcGVuZEl0ZW0oKnNl
cGFyYXRvckl0ZW0oKSk7Ci0gICAgc3Vic3RpdHV0aW9uc01lbnUuYXBwZW5kSXRlbShzbWFydENv
cHlQYXN0ZSk7Ci0gICAgc3Vic3RpdHV0aW9uc01lbnUuYXBwZW5kSXRlbShzbWFydFF1b3Rlcyk7
Ci0gICAgc3Vic3RpdHV0aW9uc01lbnUuYXBwZW5kSXRlbShzbWFydERhc2hlcyk7Ci0gICAgc3Vi
c3RpdHV0aW9uc01lbnUuYXBwZW5kSXRlbShzbWFydExpbmtzKTsKLSAgICBzdWJzdGl0dXRpb25z
TWVudS5hcHBlbmRJdGVtKHRleHRSZXBsYWNlbWVudCk7Ci0KLSAgICBzdWJzdGl0dXRpb25zTWVu
dUl0ZW0uc2V0U3ViTWVudSgmc3Vic3RpdHV0aW9uc01lbnUpOwotfQotCi1zdGF0aWMgdm9pZCBj
cmVhdGVBbmRBcHBlbmRUcmFuc2Zvcm1hdGlvbnNTdWJNZW51KGNvbnN0IEhpdFRlc3RSZXN1bHQm
IHJlc3VsdCwgQ29udGV4dE1lbnVJdGVtJiB0cmFuc2Zvcm1hdGlvbnNNZW51SXRlbSkKLXsKLSAg
ICBDb250ZXh0TWVudSB0cmFuc2Zvcm1hdGlvbnNNZW51KHJlc3VsdCk7Ci0KLSAgICBDb250ZXh0
TWVudUl0ZW0gbWFrZVVwcGVyQ2FzZShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdNYWtl
VXBwZXJDYXNlLCBjb250ZXh0TWVudUl0ZW1UYWdNYWtlVXBwZXJDYXNlKCkpOwotICAgIENvbnRl
eHRNZW51SXRlbSBtYWtlTG93ZXJDYXNlKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ01h
a2VMb3dlckNhc2UsIGNvbnRleHRNZW51SXRlbVRhZ01ha2VMb3dlckNhc2UoKSk7Ci0gICAgQ29u
dGV4dE1lbnVJdGVtIGNhcGl0YWxpemUoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnQ2Fw
aXRhbGl6ZSwgY29udGV4dE1lbnVJdGVtVGFnQ2FwaXRhbGl6ZSgpKTsKLQotICAgIHRyYW5zZm9y
bWF0aW9uc01lbnUuYXBwZW5kSXRlbShtYWtlVXBwZXJDYXNlKTsKLSAgICB0cmFuc2Zvcm1hdGlv
bnNNZW51LmFwcGVuZEl0ZW0obWFrZUxvd2VyQ2FzZSk7Ci0gICAgdHJhbnNmb3JtYXRpb25zTWVu
dS5hcHBlbmRJdGVtKGNhcGl0YWxpemUpOwotCi0gICAgdHJhbnNmb3JtYXRpb25zTWVudUl0ZW0u
c2V0U3ViTWVudSgmdHJhbnNmb3JtYXRpb25zTWVudSk7Ci19Ci0KLSNlbmRpZgotCi1zdGF0aWMg
Ym9vbCBzZWxlY3Rpb25Db250YWluc1Bvc3NpYmxlV29yZChGcmFtZSogZnJhbWUpCi17Ci0gICAg
Ly8gQ3VycmVudCBhbGdvcml0aG06IGxvb2sgZm9yIGEgY2hhcmFjdGVyIHRoYXQncyBub3QganVz
dCBhIHNlcGFyYXRvci4KLSAgICBmb3IgKFRleHRJdGVyYXRvciBpdChmcmFtZS0+c2VsZWN0aW9u
KCktPnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOyAhaXQuYXRFbmQoKTsgaXQuYWR2YW5jZSgp
KSB7Ci0gICAgICAgIGludCBsZW5ndGggPSBpdC5sZW5ndGgoKTsKLSAgICAgICAgY29uc3QgVUNo
YXIqIGNoYXJhY3RlcnMgPSBpdC5jaGFyYWN0ZXJzKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgICAgICBpZiAoIShjYXRlZ29yeShjaGFyYWN0ZXJz
W2ldKSAmIChTZXBhcmF0b3JfU3BhY2UgfCBTZXBhcmF0b3JfTGluZSB8IFNlcGFyYXRvcl9QYXJh
Z3JhcGgpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi12b2lkIENvbnRleHRNZW51Ojpwb3B1bGF0ZSgpCi17Ci0gICAgQ29udGV4
dE1lbnVJdGVtIE9wZW5MaW5rSXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdPcGVu
TGluaywgY29udGV4dE1lbnVJdGVtVGFnT3BlbkxpbmsoKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVt
IE9wZW5MaW5rSW5OZXdXaW5kb3dJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ09w
ZW5MaW5rSW5OZXdXaW5kb3csIAotICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdPcGVuTGlua0lu
TmV3V2luZG93KCkpOwotICAgIENvbnRleHRNZW51SXRlbSBEb3dubG9hZEZpbGVJdGVtKEFjdGlv
blR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0Rvd25sb2FkTGlua1RvRGlzaywgCi0gICAgICAgIGNv
bnRleHRNZW51SXRlbVRhZ0Rvd25sb2FkTGlua1RvRGlzaygpKTsKLSAgICBDb250ZXh0TWVudUl0
ZW0gQ29weUxpbmtJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0NvcHlMaW5rVG9D
bGlwYm9hcmQsIAotICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdDb3B5TGlua1RvQ2xpcGJvYXJk
KCkpOwotICAgIENvbnRleHRNZW51SXRlbSBPcGVuSW1hZ2VJbk5ld1dpbmRvd0l0ZW0oQWN0aW9u
VHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnT3BlbkltYWdlSW5OZXdXaW5kb3csIAotICAgICAgICBj
b250ZXh0TWVudUl0ZW1UYWdPcGVuSW1hZ2VJbk5ld1dpbmRvdygpKTsKLSAgICBDb250ZXh0TWVu
dUl0ZW0gRG93bmxvYWRJbWFnZUl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnRG93
bmxvYWRJbWFnZVRvRGlzaywgCi0gICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ0Rvd25sb2FkSW1h
Z2VUb0Rpc2soKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIENvcHlJbWFnZUl0ZW0oQWN0aW9uVHlw
ZSwgQ29udGV4dE1lbnVJdGVtVGFnQ29weUltYWdlVG9DbGlwYm9hcmQsIAotICAgICAgICBjb250
ZXh0TWVudUl0ZW1UYWdDb3B5SW1hZ2VUb0NsaXBib2FyZCgpKTsKLSAgICBDb250ZXh0TWVudUl0
ZW0gT3Blbk1lZGlhSW5OZXdXaW5kb3dJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRh
Z09wZW5NZWRpYUluTmV3V2luZG93LCBTdHJpbmcoKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIENv
cHlNZWRpYUxpbmtJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0NvcHlNZWRpYUxp
bmtUb0NsaXBib2FyZCwgCi0gICAgICAgIFN0cmluZygpKTsKLSAgICBDb250ZXh0TWVudUl0ZW0g
TWVkaWFQbGF5UGF1c2UoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnTWVkaWFQbGF5UGF1
c2UsIAotICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdNZWRpYVBsYXkoKSk7Ci0gICAgQ29udGV4
dE1lbnVJdGVtIE1lZGlhTXV0ZShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdNZWRpYU11
dGUsIAotICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdNZWRpYU11dGUoKSk7Ci0gICAgQ29udGV4
dE1lbnVJdGVtIFRvZ2dsZU1lZGlhQ29udHJvbHMoQ2hlY2thYmxlQWN0aW9uVHlwZSwgQ29udGV4
dE1lbnVJdGVtVGFnVG9nZ2xlTWVkaWFDb250cm9scywgCi0gICAgICAgIGNvbnRleHRNZW51SXRl
bVRhZ1RvZ2dsZU1lZGlhQ29udHJvbHMoKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIFRvZ2dsZU1l
ZGlhTG9vcChDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdUb2dnbGVNZWRp
YUxvb3AsIAotICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdUb2dnbGVNZWRpYUxvb3AoKSk7Ci0g
ICAgQ29udGV4dE1lbnVJdGVtIEVudGVyVmlkZW9GdWxsc2NyZWVuKEFjdGlvblR5cGUsIENvbnRl
eHRNZW51SXRlbVRhZ0VudGVyVmlkZW9GdWxsc2NyZWVuLCAKLSAgICAgICAgY29udGV4dE1lbnVJ
dGVtVGFnRW50ZXJWaWRlb0Z1bGxzY3JlZW4oKSk7Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgIENv
bnRleHRNZW51SXRlbSBTZWFyY2hTcG90bGlnaHRJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51
SXRlbVRhZ1NlYXJjaEluU3BvdGxpZ2h0LCAKLSAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnU2Vh
cmNoSW5TcG90bGlnaHQoKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIExvb2tJbkRpY3Rpb25hcnlJ
dGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0xvb2tVcEluRGljdGlvbmFyeSwgCi0g
ICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ0xvb2tVcEluRGljdGlvbmFyeSgpKTsKLSNlbmRpZgot
I2lmICFQTEFURk9STShHVEspCi0gICAgQ29udGV4dE1lbnVJdGVtIFNlYXJjaFdlYkl0ZW0oQWN0
aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU2VhcmNoV2ViLCBjb250ZXh0TWVudUl0ZW1UYWdT
ZWFyY2hXZWIoKSk7Ci0jZW5kaWYKLSAgICBDb250ZXh0TWVudUl0ZW0gQ29weUl0ZW0oQWN0aW9u
VHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnQ29weSwgY29udGV4dE1lbnVJdGVtVGFnQ29weSgpKTsK
LSAgICBDb250ZXh0TWVudUl0ZW0gQmFja0l0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVt
VGFnR29CYWNrLCBjb250ZXh0TWVudUl0ZW1UYWdHb0JhY2soKSk7Ci0gICAgQ29udGV4dE1lbnVJ
dGVtIEZvcndhcmRJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0dvRm9yd2FyZCwg
IGNvbnRleHRNZW51SXRlbVRhZ0dvRm9yd2FyZCgpKTsKLSAgICBDb250ZXh0TWVudUl0ZW0gU3Rv
cEl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU3RvcCwgY29udGV4dE1lbnVJdGVt
VGFnU3RvcCgpKTsKLSAgICBDb250ZXh0TWVudUl0ZW0gUmVsb2FkSXRlbShBY3Rpb25UeXBlLCBD
b250ZXh0TWVudUl0ZW1UYWdSZWxvYWQsIGNvbnRleHRNZW51SXRlbVRhZ1JlbG9hZCgpKTsKLSAg
ICBDb250ZXh0TWVudUl0ZW0gT3BlbkZyYW1lSXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0
ZW1UYWdPcGVuRnJhbWVJbk5ld1dpbmRvdywgCi0gICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ09w
ZW5GcmFtZUluTmV3V2luZG93KCkpOwotICAgIENvbnRleHRNZW51SXRlbSBOb0d1ZXNzZXNJdGVt
KEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ05vR3Vlc3Nlc0ZvdW5kLCAKLSAgICAgICAg
Y29udGV4dE1lbnVJdGVtVGFnTm9HdWVzc2VzRm91bmQoKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVt
IElnbm9yZVNwZWxsaW5nSXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdJZ25vcmVT
cGVsbGluZywgCi0gICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ0lnbm9yZVNwZWxsaW5nKCkpOwot
ICAgIENvbnRleHRNZW51SXRlbSBMZWFyblNwZWxsaW5nSXRlbShBY3Rpb25UeXBlLCBDb250ZXh0
TWVudUl0ZW1UYWdMZWFyblNwZWxsaW5nLCAKLSAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnTGVh
cm5TcGVsbGluZygpKTsKLSAgICBDb250ZXh0TWVudUl0ZW0gSWdub3JlR3JhbW1hckl0ZW0oQWN0
aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnSWdub3JlR3JhbW1hciwgCi0gICAgICAgIGNvbnRl
eHRNZW51SXRlbVRhZ0lnbm9yZUdyYW1tYXIoKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIEN1dEl0
ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnQ3V0LCBjb250ZXh0TWVudUl0ZW1UYWdD
dXQoKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIFBhc3RlSXRlbShBY3Rpb25UeXBlLCBDb250ZXh0
TWVudUl0ZW1UYWdQYXN0ZSwgY29udGV4dE1lbnVJdGVtVGFnUGFzdGUoKSk7Ci0jaWYgUExBVEZP
Uk0oR1RLKQotICAgIENvbnRleHRNZW51SXRlbSBEZWxldGVJdGVtKEFjdGlvblR5cGUsIENvbnRl
eHRNZW51SXRlbVRhZ0RlbGV0ZSwgY29udGV4dE1lbnVJdGVtVGFnRGVsZXRlKCkpOwotICAgIENv
bnRleHRNZW51SXRlbSBTZWxlY3RBbGxJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRh
Z1NlbGVjdEFsbCwgY29udGV4dE1lbnVJdGVtVGFnU2VsZWN0QWxsKCkpOwotI2VuZGlmCi0gICAg
Ci0gICAgSGl0VGVzdFJlc3VsdCByZXN1bHQgPSBoaXRUZXN0UmVzdWx0KCk7Ci0gICAgCi0gICAg
Tm9kZSogbm9kZSA9IG1faGl0VGVzdFJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKTsKLSAgICBp
ZiAoIW5vZGUpCi0gICAgICAgIHJldHVybjsKLSNpZiBQTEFURk9STShHVEspCi0gICAgaWYgKCFy
ZXN1bHQuaXNDb250ZW50RWRpdGFibGUoKSAmJiAobm9kZS0+aXNFbGVtZW50Tm9kZSgpICYmIHN0
YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkpCi0gICAg
ICAgIHJldHVybjsKLSNlbmRpZgotICAgIEZyYW1lKiBmcmFtZSA9IG5vZGUtPmRvY3VtZW50KCkt
PmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFy
ZXN1bHQuaXNDb250ZW50RWRpdGFibGUoKSkgewotICAgICAgICBGcmFtZUxvYWRlciogbG9hZGVy
ID0gZnJhbWUtPmxvYWRlcigpOwotICAgICAgICBLVVJMIGxpbmtVUkwgPSByZXN1bHQuYWJzb2x1
dGVMaW5rVVJMKCk7Ci0gICAgICAgIGlmICghbGlua1VSTC5pc0VtcHR5KCkpIHsKLSAgICAgICAg
ICAgIGlmIChsb2FkZXItPmNhbkhhbmRsZVJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0KGxpbmtVUkwp
KSkgewotICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oT3BlbkxpbmtJdGVtKTsKLSAgICAgICAg
ICAgICAgICBhcHBlbmRJdGVtKE9wZW5MaW5rSW5OZXdXaW5kb3dJdGVtKTsKLSAgICAgICAgICAg
ICAgICBhcHBlbmRJdGVtKERvd25sb2FkRmlsZUl0ZW0pOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgYXBwZW5kSXRlbShDb3B5TGlua0l0ZW0pOwotICAgICAgICB9Ci0KLSAgICAgICAgS1VS
TCBpbWFnZVVSTCA9IHJlc3VsdC5hYnNvbHV0ZUltYWdlVVJMKCk7Ci0gICAgICAgIGlmICghaW1h
Z2VVUkwuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBpZiAoIWxpbmtVUkwuaXNFbXB0eSgpKQot
ICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSk7Ci0KLSAgICAgICAg
ICAgIGFwcGVuZEl0ZW0oT3BlbkltYWdlSW5OZXdXaW5kb3dJdGVtKTsKLSAgICAgICAgICAgIGFw
cGVuZEl0ZW0oRG93bmxvYWRJbWFnZUl0ZW0pOwotICAgICAgICAgICAgaWYgKGltYWdlVVJMLmlz
TG9jYWxGaWxlKCkgfHwgbV9oaXRUZXN0UmVzdWx0LmltYWdlKCkpCi0gICAgICAgICAgICAgICAg
YXBwZW5kSXRlbShDb3B5SW1hZ2VJdGVtKTsKLSAgICAgICAgfQotCi0gICAgICAgIEtVUkwgbWVk
aWFVUkwgPSByZXN1bHQuYWJzb2x1dGVNZWRpYVVSTCgpOwotICAgICAgICBpZiAoIW1lZGlhVVJM
LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgaWYgKCFsaW5rVVJMLmlzRW1wdHkoKSB8fCAhaW1h
Z2VVUkwuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0
ZW0oKSk7Ci0KLSAgICAgICAgICAgIGFwcGVuZEl0ZW0oTWVkaWFQbGF5UGF1c2UpOwotICAgICAg
ICAgICAgYXBwZW5kSXRlbShNZWRpYU11dGUpOwotICAgICAgICAgICAgYXBwZW5kSXRlbShUb2dn
bGVNZWRpYUNvbnRyb2xzKTsKLSAgICAgICAgICAgIGFwcGVuZEl0ZW0oVG9nZ2xlTWVkaWFMb29w
KTsKLSAgICAgICAgICAgIGFwcGVuZEl0ZW0oRW50ZXJWaWRlb0Z1bGxzY3JlZW4pOwotCi0gICAg
ICAgICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCkpOwotICAgICAgICAgICAgYXBwZW5k
SXRlbShDb3B5TWVkaWFMaW5rSXRlbSk7Ci0gICAgICAgICAgICBhcHBlbmRJdGVtKE9wZW5NZWRp
YUluTmV3V2luZG93SXRlbSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaW1hZ2VVUkwuaXNF
bXB0eSgpICYmIGxpbmtVUkwuaXNFbXB0eSgpICYmIG1lZGlhVVJMLmlzRW1wdHkoKSkgewotICAg
ICAgICAgICAgaWYgKHJlc3VsdC5pc1NlbGVjdGVkKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAo
c2VsZWN0aW9uQ29udGFpbnNQb3NzaWJsZVdvcmQoZnJhbWUpKSB7Ci0jaWYgUExBVEZPUk0oTUFD
KQotICAgICAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKFNlYXJjaFNwb3RsaWdodEl0ZW0pOwot
I2VuZGlmCi0jaWYgIVBMQVRGT1JNKEdUSykKLSAgICAgICAgICAgICAgICAgICAgYXBwZW5kSXRl
bShTZWFyY2hXZWJJdGVtKTsKLSAgICAgICAgICAgICAgICAgICAgYXBwZW5kSXRlbSgqc2VwYXJh
dG9ySXRlbSgpKTsKLSNlbmRpZgotI2lmIFBMQVRGT1JNKE1BQykKLSAgICAgICAgICAgICAgICAg
ICAgYXBwZW5kSXRlbShMb29rSW5EaWN0aW9uYXJ5SXRlbSk7Ci0gICAgICAgICAgICAgICAgICAg
IGFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSk7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgYXBwZW5kSXRlbShDb3B5SXRlbSk7Ci0jaWYgUExBVEZPUk0oTUFD
KQotICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSk7Ci0gICAgICAg
ICAgICAgICAgQ29udGV4dE1lbnVJdGVtIFNwZWVjaE1lbnVJdGVtKFN1Ym1lbnVUeXBlLCBDb250
ZXh0TWVudUl0ZW1UYWdTcGVlY2hNZW51LCBjb250ZXh0TWVudUl0ZW1UYWdTcGVlY2hNZW51KCkp
OwotICAgICAgICAgICAgICAgIGNyZWF0ZUFuZEFwcGVuZFNwZWVjaFN1Yk1lbnUobV9oaXRUZXN0
UmVzdWx0LCBTcGVlY2hNZW51SXRlbSk7Ci0gICAgICAgICAgICAgICAgYXBwZW5kSXRlbShTcGVl
Y2hNZW51SXRlbSk7Ci0jZW5kaWYgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICB9IGVsc2Ug
ewotI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgICAgICAgICAgICAgaWYgKCEoZnJhbWUtPnBh
Z2UoKSAmJiBmcmFtZS0+cGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmhhc0luc3BlY3Rv
ckZyb250ZW5kQ2xpZW50KCkpKSB7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBpZiAoZnJhbWUt
PnBhZ2UoKSAmJiBmcmFtZS0+cGFnZSgpLT5iYWNrRm9yd2FyZCgpLT5jYW5Hb0JhY2tPckZvcndh
cmQoLTEpKQotICAgICAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKEJhY2tJdGVtKTsKLQotICAg
ICAgICAgICAgICAgIGlmIChmcmFtZS0+cGFnZSgpICYmIGZyYW1lLT5wYWdlKCktPmJhY2tGb3J3
YXJkKCktPmNhbkdvQmFja09yRm9yd2FyZCgxKSkKLSAgICAgICAgICAgICAgICAgICAgYXBwZW5k
SXRlbShGb3J3YXJkSXRlbSk7Ci0KLSAgICAgICAgICAgICAgICAvLyB1c2UgaXNMb2FkaW5nSW5B
UElTZW5zZSByYXRoZXIgdGhhbiBpc0xvYWRpbmcgYmVjYXVzZSBTdG9wL1JlbG9hZCBhcmUKLSAg
ICAgICAgICAgICAgICAvLyBpbnRlbmRlZCB0byBtYXRjaCBXZWJLaXQncyBBUEksIG5vdCBXZWJD
b3JlJ3MgaW50ZXJuYWwgbm90aW9uIG9mIGxvYWRpbmcgc3RhdHVzCi0gICAgICAgICAgICAgICAg
aWYgKGxvYWRlci0+ZG9jdW1lbnRMb2FkZXIoKS0+aXNMb2FkaW5nSW5BUElTZW5zZSgpKQotICAg
ICAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKFN0b3BJdGVtKTsKLSAgICAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oUmVsb2FkSXRlbSk7Ci0jaWYgRU5B
QkxFKElOU1BFQ1RPUikKLSAgICAgICAgICAgICAgICB9Ci0jZW5kaWYKLQotICAgICAgICAgICAg
ICAgIGlmIChmcmFtZS0+cGFnZSgpICYmIGZyYW1lICE9IGZyYW1lLT5wYWdlKCktPm1haW5GcmFt
ZSgpKQotICAgICAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKE9wZW5GcmFtZUl0ZW0pOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSBlbHNlIHsgLy8gTWFrZSBhbiBlZGl0aW5nIGNv
bnRleHQgbWVudQotICAgICAgICBTZWxlY3Rpb25Db250cm9sbGVyKiBzZWxlY3Rpb24gPSBmcmFt
ZS0+c2VsZWN0aW9uKCk7Ci0gICAgICAgIGJvb2wgaW5QYXNzd29yZEZpZWxkID0gc2VsZWN0aW9u
LT5pc0luUGFzc3dvcmRGaWVsZCgpOwotICAgICAgICBib29sIHNwZWxsQ2hlY2tpbmdFbmFibGVk
ID0gZnJhbWUtPmVkaXRvcigpLT5pc1NwZWxsQ2hlY2tpbmdFbmFibGVkRm9yKG5vZGUpOwotICAg
ICAgICAKLSAgICAgICAgaWYgKCFpblBhc3N3b3JkRmllbGQgJiYgc3BlbGxDaGVja2luZ0VuYWJs
ZWQpIHsKLSAgICAgICAgICAgIC8vIENvbnNpZGVyIGFkZGluZyBzcGVsbGluZy1yZWxhdGVkIG9y
IGdyYW1tYXItcmVsYXRlZCBjb250ZXh0IG1lbnUgaXRlbXMgKG5ldmVyIGJvdGgsIHNpbmNlIGEg
c2luZ2xlIHNlbGVjdGVkIHJhbmdlCi0gICAgICAgICAgICAvLyBpcyBuZXZlciBjb25zaWRlcmVk
IGEgbWlzc3BlbGxpbmcgYW5kIGJhZCBncmFtbWFyIGF0IHRoZSBzYW1lIHRpbWUpCi0gICAgICAg
ICAgICBib29sIG1pc3NwZWxsaW5nOwotICAgICAgICAgICAgYm9vbCBiYWRHcmFtbWFyOwotICAg
ICAgICAgICAgVmVjdG9yPFN0cmluZz4gZ3Vlc3NlcyA9IGZyYW1lLT5lZGl0b3IoKS0+Z3Vlc3Nl
c0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWxTZWxlY3Rpb24obWlzc3BlbGxpbmcsIGJhZEdy
YW1tYXIpOwotICAgICAgICAgICAgaWYgKG1pc3NwZWxsaW5nIHx8IGJhZEdyYW1tYXIpIHsKLSAg
ICAgICAgICAgICAgICBzaXplX3Qgc2l6ZSA9IGd1ZXNzZXMuc2l6ZSgpOwotICAgICAgICAgICAg
ICAgIGlmIChzaXplID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUncyBi
YWQgZ3JhbW1hciBidXQgbm8gc3VnZ2VzdGlvbnMgKGUuZy4sIHJlcGVhdGVkIHdvcmQpLCBqdXN0
IGxlYXZlIG9mZiB0aGUgc3VnZ2VzdGlvbnMKLSAgICAgICAgICAgICAgICAgICAgLy8gbGlzdCBh
bmQgdHJhaWxpbmcgc2VwYXJhdG9yIHJhdGhlciB0aGFuIGFkZGluZyBhICJObyBHdWVzc2VzIEZv
dW5kIiBpdGVtIChtYXRjaGVzIEFwcEtpdCkKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1pc3Nw
ZWxsaW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKE5vR3Vlc3Nlc0l0
ZW0pOwotICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kSXRlbSgqc2VwYXJhdG9ySXRlbSgp
KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyAmZ3Vlc3MgPSBndWVzc2VzW2ldOwot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFndWVzcy5pc0VtcHR5KCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBDb250ZXh0TWVudUl0ZW0gaXRlbShBY3Rpb25UeXBlLCBDb250
ZXh0TWVudUl0ZW1UYWdTcGVsbGluZ0d1ZXNzLCBndWVzcyk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXBwZW5kSXRlbShpdGVtKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKCpzZXBh
cmF0b3JJdGVtKCkpOyAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChtaXNzcGVsbGluZykgewotICAgICAg
ICAgICAgICAgICAgICBhcHBlbmRJdGVtKElnbm9yZVNwZWxsaW5nSXRlbSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGFwcGVuZEl0ZW0oTGVhcm5TcGVsbGluZ0l0ZW0pOwotICAgICAgICAgICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKElnbm9yZUdyYW1tYXJJdGVt
KTsKLSAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCkpOwotI2lmIFBM
QVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJV
SUxESU5HX09OX0xFT1BBUkQpCi0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
IC8vIElmIHRoZSBzdHJpbmcgd2FzIGF1dG9jb3JyZWN0ZWQsIGdlbmVyYXRlIGEgY29udGV4dHVh
bCBtZW51IGl0ZW0gYWxsb3dpbmcgaXQgdG8gYmUgY2hhbmdlZCBiYWNrLgotICAgICAgICAgICAg
ICAgIFN0cmluZyByZXBsYWNlZFN0cmluZyA9IHJlc3VsdC5yZXBsYWNlZFN0cmluZygpOwotICAg
ICAgICAgICAgICAgIGlmICghcmVwbGFjZWRTdHJpbmcuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIENvbnRleHRNZW51SXRlbSBpdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRl
bVRhZ0NoYW5nZUJhY2ssIGNvbnRleHRNZW51SXRlbVRhZ0NoYW5nZUJhY2socmVwbGFjZWRTdHJp
bmcpKTsKLSAgICAgICAgICAgICAgICAgICAgYXBwZW5kSXRlbShpdGVtKTsKLSAgICAgICAgICAg
ICAgICAgICAgYXBwZW5kSXRlbSgqc2VwYXJhdG9ySXRlbSgpKTsKLSAgICAgICAgICAgICAgICB9
Ci0jZW5kaWYKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIEZyYW1lTG9hZGVy
KiBsb2FkZXIgPSBmcmFtZS0+bG9hZGVyKCk7Ci0gICAgICAgIEtVUkwgbGlua1VSTCA9IHJlc3Vs
dC5hYnNvbHV0ZUxpbmtVUkwoKTsKLSAgICAgICAgaWYgKCFsaW5rVVJMLmlzRW1wdHkoKSkgewot
ICAgICAgICAgICAgaWYgKGxvYWRlci0+Y2FuSGFuZGxlUmVxdWVzdChSZXNvdXJjZVJlcXVlc3Qo
bGlua1VSTCkpKSB7Ci0gICAgICAgICAgICAgICAgYXBwZW5kSXRlbShPcGVuTGlua0l0ZW0pOwot
ICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oT3BlbkxpbmtJbk5ld1dpbmRvd0l0ZW0pOwotICAg
ICAgICAgICAgICAgIGFwcGVuZEl0ZW0oRG93bmxvYWRGaWxlSXRlbSk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBhcHBlbmRJdGVtKENvcHlMaW5rSXRlbSk7Ci0gICAgICAgICAgICBhcHBl
bmRJdGVtKCpzZXBhcmF0b3JJdGVtKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJlc3Vs
dC5pc1NlbGVjdGVkKCkgJiYgIWluUGFzc3dvcmRGaWVsZCAmJiBzZWxlY3Rpb25Db250YWluc1Bv
c3NpYmxlV29yZChmcmFtZSkpIHsKLSNpZiBQTEFURk9STShNQUMpCi0gICAgICAgICAgICBhcHBl
bmRJdGVtKFNlYXJjaFNwb3RsaWdodEl0ZW0pOwotI2VuZGlmCi0jaWYgIVBMQVRGT1JNKEdUSykK
LSAgICAgICAgICAgIGFwcGVuZEl0ZW0oU2VhcmNoV2ViSXRlbSk7Ci0gICAgICAgICAgICBhcHBl
bmRJdGVtKCpzZXBhcmF0b3JJdGVtKCkpOwotI2VuZGlmCi0gICAgIAotI2lmIFBMQVRGT1JNKE1B
QykKLSAgICAgICAgICAgIGFwcGVuZEl0ZW0oTG9va0luRGljdGlvbmFyeUl0ZW0pOwotICAgICAg
ICAgICAgYXBwZW5kSXRlbSgqc2VwYXJhdG9ySXRlbSgpKTsKLSNlbmRpZgotICAgICAgICB9Ci0K
LSAgICAgICAgYXBwZW5kSXRlbShDdXRJdGVtKTsKLSAgICAgICAgYXBwZW5kSXRlbShDb3B5SXRl
bSk7Ci0gICAgICAgIGFwcGVuZEl0ZW0oUGFzdGVJdGVtKTsKLSNpZiBQTEFURk9STShHVEspCi0g
ICAgICAgIGFwcGVuZEl0ZW0oRGVsZXRlSXRlbSk7Ci0gICAgICAgIGFwcGVuZEl0ZW0oKnNlcGFy
YXRvckl0ZW0oKSk7Ci0gICAgICAgIGFwcGVuZEl0ZW0oU2VsZWN0QWxsSXRlbSk7Ci0jZW5kaWYK
LQotICAgICAgICBpZiAoIWluUGFzc3dvcmRGaWVsZCkgewotICAgICAgICAgICAgYXBwZW5kSXRl
bSgqc2VwYXJhdG9ySXRlbSgpKTsKLSNpZm5kZWYgQlVJTERJTkdfT05fVElHRVIKLSNpZiAhUExB
VEZPUk0oR1RLKQotICAgICAgICAgICAgQ29udGV4dE1lbnVJdGVtIFNwZWxsaW5nQW5kR3JhbW1h
ck1lbnVJdGVtKFN1Ym1lbnVUeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTcGVsbGluZ01lbnUsIAot
ICAgICAgICAgICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ1NwZWxsaW5nTWVudSgpKTsKLSAgICAg
ICAgICAgIGNyZWF0ZUFuZEFwcGVuZFNwZWxsaW5nQW5kR3JhbW1hclN1Yk1lbnUobV9oaXRUZXN0
UmVzdWx0LCBTcGVsbGluZ0FuZEdyYW1tYXJNZW51SXRlbSk7Ci0gICAgICAgICAgICBhcHBlbmRJ
dGVtKFNwZWxsaW5nQW5kR3JhbW1hck1lbnVJdGVtKTsKLSNlbmRpZgotI2Vsc2UKLSAgICAgICAg
ICAgIENvbnRleHRNZW51SXRlbSBTcGVsbGluZ01lbnVJdGVtKFN1Ym1lbnVUeXBlLCBDb250ZXh0
TWVudUl0ZW1UYWdTcGVsbGluZ01lbnUsIAotICAgICAgICAgICAgICAgIGNvbnRleHRNZW51SXRl
bVRhZ1NwZWxsaW5nTWVudSgpKTsKLSAgICAgICAgICAgIGNyZWF0ZUFuZEFwcGVuZFNwZWxsaW5n
U3ViTWVudShtX2hpdFRlc3RSZXN1bHQsIFNwZWxsaW5nTWVudUl0ZW0pOwotICAgICAgICAgICAg
YXBwZW5kSXRlbShTcGVsbGluZ01lbnVJdGVtKTsKLSNlbmRpZgotI2lmIFBMQVRGT1JNKE1BQykg
JiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xF
T1BBUkQpCi0gICAgICAgICAgICBDb250ZXh0TWVudUl0ZW0gc3Vic3RpdHV0aW9uc01lbnVJdGVt
KFN1Ym1lbnVUeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTdWJzdGl0dXRpb25zTWVudSwgCi0gICAg
ICAgICAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnU3Vic3RpdHV0aW9uc01lbnUoKSk7Ci0gICAg
ICAgICAgICBjcmVhdGVBbmRBcHBlbmRTdWJzdGl0dXRpb25zU3ViTWVudShtX2hpdFRlc3RSZXN1
bHQsIHN1YnN0aXR1dGlvbnNNZW51SXRlbSk7Ci0gICAgICAgICAgICBhcHBlbmRJdGVtKHN1YnN0
aXR1dGlvbnNNZW51SXRlbSk7Ci0gICAgICAgICAgICBDb250ZXh0TWVudUl0ZW0gdHJhbnNmb3Jt
YXRpb25zTWVudUl0ZW0oU3VibWVudVR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1RyYW5zZm9ybWF0
aW9uc01lbnUsIAotICAgICAgICAgICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ1RyYW5zZm9ybWF0
aW9uc01lbnUoKSk7Ci0gICAgICAgICAgICBjcmVhdGVBbmRBcHBlbmRUcmFuc2Zvcm1hdGlvbnNT
dWJNZW51KG1faGl0VGVzdFJlc3VsdCwgdHJhbnNmb3JtYXRpb25zTWVudUl0ZW0pOwotICAgICAg
ICAgICAgYXBwZW5kSXRlbSh0cmFuc2Zvcm1hdGlvbnNNZW51SXRlbSk7Ci0jZW5kaWYKLSNpZiBQ
TEFURk9STShHVEspCi0gICAgICAgICAgICBib29sIHNob3VsZFNob3dGb250TWVudSA9IGZyYW1l
LT5lZGl0b3IoKS0+Y2FuRWRpdFJpY2hseSgpOwotI2Vsc2UKLSAgICAgICAgICAgIGJvb2wgc2hv
dWxkU2hvd0ZvbnRNZW51ID0gdHJ1ZTsKLSNlbmRpZgotICAgICAgICAgICAgaWYgKHNob3VsZFNo
b3dGb250TWVudSkgewotICAgICAgICAgICAgICAgIENvbnRleHRNZW51SXRlbSBGb250TWVudUl0
ZW0oU3VibWVudVR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0ZvbnRNZW51LCAKLSAgICAgICAgICAg
ICAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnRm9udE1lbnUoKSk7Ci0gICAgICAgICAgICAgICAg
Y3JlYXRlQW5kQXBwZW5kRm9udFN1Yk1lbnUobV9oaXRUZXN0UmVzdWx0LCBGb250TWVudUl0ZW0p
OwotICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oRm9udE1lbnVJdGVtKTsKLSAgICAgICAgICAg
IH0KLSNpZiBQTEFURk9STShNQUMpCi0gICAgICAgICAgICBDb250ZXh0TWVudUl0ZW0gU3BlZWNo
TWVudUl0ZW0oU3VibWVudVR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1NwZWVjaE1lbnUsIGNvbnRl
eHRNZW51SXRlbVRhZ1NwZWVjaE1lbnUoKSk7Ci0gICAgICAgICAgICBjcmVhdGVBbmRBcHBlbmRT
cGVlY2hTdWJNZW51KG1faGl0VGVzdFJlc3VsdCwgU3BlZWNoTWVudUl0ZW0pOwotICAgICAgICAg
ICAgYXBwZW5kSXRlbShTcGVlY2hNZW51SXRlbSk7Ci0jZW5kaWYKLSNpZiAhUExBVEZPUk0oR1RL
KQotICAgICAgICAgICAgQ29udGV4dE1lbnVJdGVtIFdyaXRpbmdEaXJlY3Rpb25NZW51SXRlbShT
dWJtZW51VHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnV3JpdGluZ0RpcmVjdGlvbk1lbnUsIAotICAg
ICAgICAgICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ1dyaXRpbmdEaXJlY3Rpb25NZW51KCkpOwot
ICAgICAgICAgICAgY3JlYXRlQW5kQXBwZW5kV3JpdGluZ0RpcmVjdGlvblN1Yk1lbnUobV9oaXRU
ZXN0UmVzdWx0LCBXcml0aW5nRGlyZWN0aW9uTWVudUl0ZW0pOwotICAgICAgICAgICAgYXBwZW5k
SXRlbShXcml0aW5nRGlyZWN0aW9uTWVudUl0ZW0pOwotICAgICAgICAgICAgaWYgKFBhZ2UqIHBh
Z2UgPSBmcmFtZS0+cGFnZSgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKFNldHRpbmdzKiBzZXR0
aW5ncyA9IHBhZ2UtPnNldHRpbmdzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgYm9vbCBpbmNs
dWRlVGV4dERpcmVjdGlvblN1Ym1lbnUgPSBzZXR0aW5ncy0+dGV4dERpcmVjdGlvblN1Ym1lbnVJ
bmNsdXNpb25CZWhhdmlvcigpID09IFRleHREaXJlY3Rpb25TdWJtZW51QWx3YXlzSW5jbHVkZWQK
LSAgICAgICAgICAgICAgICAgICAgICAgIHx8IChzZXR0aW5ncy0+dGV4dERpcmVjdGlvblN1Ym1l
bnVJbmNsdXNpb25CZWhhdmlvcigpID09IFRleHREaXJlY3Rpb25TdWJtZW51QXV0b21hdGljYWxs
eUluY2x1ZGVkICYmIGZyYW1lLT5lZGl0b3IoKS0+aGFzQmlkaVNlbGVjdGlvbigpKTsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKGluY2x1ZGVUZXh0RGlyZWN0aW9uU3VibWVudSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgQ29udGV4dE1lbnVJdGVtIFRleHREaXJlY3Rpb25NZW51SXRlbShT
dWJtZW51VHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnVGV4dERpcmVjdGlvbk1lbnUsIAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ1RleHREaXJlY3Rpb25NZW51
KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlQW5kQXBwZW5kVGV4dERpcmVjdGlv
blN1Yk1lbnUobV9oaXRUZXN0UmVzdWx0LCBUZXh0RGlyZWN0aW9uTWVudUl0ZW0pOwotICAgICAg
ICAgICAgICAgICAgICAgICAgYXBwZW5kSXRlbShUZXh0RGlyZWN0aW9uTWVudUl0ZW0pOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotI2Vu
ZGlmCi0gICAgICAgIH0KLSAgICB9Ci19Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SKQotdm9pZCBD
b250ZXh0TWVudTo6YWRkSW5zcGVjdEVsZW1lbnRJdGVtKCkKLXsKLSAgICBOb2RlKiBub2RlID0g
bV9oaXRUZXN0UmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpOwotICAgIGlmICghbm9kZSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgRnJhbWUqIGZyYW1lID0gbm9kZS0+ZG9jdW1lbnQoKS0+ZnJh
bWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBQYWdlKiBwYWdl
ID0gZnJhbWUtPnBhZ2UoKTsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmICghcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBDb250ZXh0TWVudUl0ZW0gSW5zcGVjdEVsZW1lbnRJdGVtKEFjdGlvblR5cGUsIENvbnRleHRN
ZW51SXRlbVRhZ0luc3BlY3RFbGVtZW50LCBjb250ZXh0TWVudUl0ZW1UYWdJbnNwZWN0RWxlbWVu
dCgpKTsKLSAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCkpOwotICAgIGFwcGVuZEl0ZW0o
SW5zcGVjdEVsZW1lbnRJdGVtKTsKLX0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQotCi12
b2lkIENvbnRleHRNZW51OjpjaGVja09yRW5hYmxlSWZOZWVkZWQoQ29udGV4dE1lbnVJdGVtJiBp
dGVtKSBjb25zdAotewotICAgIGlmIChpdGVtLnR5cGUoKSA9PSBTZXBhcmF0b3JUeXBlKQotICAg
ICAgICByZXR1cm47Ci0gICAgCi0gICAgRnJhbWUqIGZyYW1lID0gbV9oaXRUZXN0UmVzdWx0Lmlu
bmVyTm9uU2hhcmVkTm9kZSgpLT5kb2N1bWVudCgpLT5mcmFtZSgpOwotICAgIGlmICghZnJhbWUp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEN1c3RvbSBpdGVtcyBhbHJlYWR5IGhhdmUgcHJv
cGVyIGNoZWNrZWQgYW5kIGVuYWJsZWQgdmFsdWVzLgotICAgIGlmIChDb250ZXh0TWVudUl0ZW1C
YXNlQ3VzdG9tVGFnIDw9IGl0ZW0uYWN0aW9uKCkgJiYgaXRlbS5hY3Rpb24oKSA8PSBDb250ZXh0
TWVudUl0ZW1MYXN0Q3VzdG9tVGFnKQotICAgICAgICByZXR1cm47Ci0KLSAgICBib29sIHNob3Vs
ZEVuYWJsZSA9IHRydWU7Ci0gICAgYm9vbCBzaG91bGRDaGVjayA9IGZhbHNlOyAKLQotICAgIHN3
aXRjaCAoaXRlbS5hY3Rpb24oKSkgewotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0No
ZWNrU3BlbGxpbmc6Ci0gICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+ZWRpdG9yKCkt
PmNhbkVkaXQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbnRleHRNZW51
SXRlbVRhZ0RlZmF1bHREaXJlY3Rpb246Ci0gICAgICAgICAgICBzaG91bGRDaGVjayA9IGZhbHNl
OwotICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gZmFsc2U7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdMZWZ0VG9SaWdodDoKLSAgICAgICAgY2Fz
ZSBDb250ZXh0TWVudUl0ZW1UYWdSaWdodFRvTGVmdDogewotICAgICAgICAgICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7Ci0gICAgICAgICAgICBSZWZQdHI8Q1NTU3R5bGVEZWNsYXJhdGlvbj4gc3R5
bGUgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+Y3JlYXRlQ1NTU3R5bGVEZWNsYXJhdGlvbigpOwotICAg
ICAgICAgICAgU3RyaW5nIGRpcmVjdGlvbiA9IGl0ZW0uYWN0aW9uKCkgPT0gQ29udGV4dE1lbnVJ
dGVtVGFnTGVmdFRvUmlnaHQgPyAibHRyIiA6ICJydGwiOwotICAgICAgICAgICAgc3R5bGUtPnNl
dFByb3BlcnR5KENTU1Byb3BlcnR5RGlyZWN0aW9uLCBkaXJlY3Rpb24sIGZhbHNlLCBlYyk7Ci0g
ICAgICAgICAgICBzaG91bGRDaGVjayA9IGZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0aW9uSGFzU3R5
bGUoc3R5bGUuZ2V0KCkpICE9IEZhbHNlVHJpU3RhdGU7Ci0gICAgICAgICAgICBzaG91bGRFbmFi
bGUgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBD
b250ZXh0TWVudUl0ZW1UYWdUZXh0RGlyZWN0aW9uRGVmYXVsdDogewotICAgICAgICAgICAgRWRp
dG9yOjpDb21tYW5kIGNvbW1hbmQgPSBmcmFtZS0+ZWRpdG9yKCktPmNvbW1hbmQoIk1ha2VUZXh0
V3JpdGluZ0RpcmVjdGlvbk5hdHVyYWwiKTsKLSAgICAgICAgICAgIHNob3VsZENoZWNrID0gY29t
bWFuZC5zdGF0ZSgpID09IFRydWVUcmlTdGF0ZTsKLSAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9
IGNvbW1hbmQuaXNFbmFibGVkKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1RleHREaXJlY3Rpb25MZWZ0VG9SaWdodDogewot
ICAgICAgICAgICAgRWRpdG9yOjpDb21tYW5kIGNvbW1hbmQgPSBmcmFtZS0+ZWRpdG9yKCktPmNv
bW1hbmQoIk1ha2VUZXh0V3JpdGluZ0RpcmVjdGlvbkxlZnRUb1JpZ2h0Iik7Ci0gICAgICAgICAg
ICBzaG91bGRDaGVjayA9IGNvbW1hbmQuc3RhdGUoKSA9PSBUcnVlVHJpU3RhdGU7Ci0gICAgICAg
ICAgICBzaG91bGRFbmFibGUgPSBjb21tYW5kLmlzRW5hYmxlZCgpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdUZXh0RGlyZWN0
aW9uUmlnaHRUb0xlZnQ6IHsKLSAgICAgICAgICAgIEVkaXRvcjo6Q29tbWFuZCBjb21tYW5kID0g
ZnJhbWUtPmVkaXRvcigpLT5jb21tYW5kKCJNYWtlVGV4dFdyaXRpbmdEaXJlY3Rpb25SaWdodFRv
TGVmdCIpOwotICAgICAgICAgICAgc2hvdWxkQ2hlY2sgPSBjb21tYW5kLnN0YXRlKCkgPT0gVHJ1
ZVRyaVN0YXRlOwotICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gY29tbWFuZC5pc0VuYWJsZWQo
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ29udGV4dE1l
bnVJdGVtVGFnQ29weToKLSAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGZyYW1lLT5lZGl0b3Io
KS0+Y2FuREhUTUxDb3B5KCkgfHwgZnJhbWUtPmVkaXRvcigpLT5jYW5Db3B5KCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdDdXQ6Ci0gICAgICAg
ICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+ZWRpdG9yKCktPmNhbkRIVE1MQ3V0KCkgfHwgZnJh
bWUtPmVkaXRvcigpLT5jYW5DdXQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IENvbnRleHRNZW51SXRlbVRhZ0lnbm9yZVNwZWxsaW5nOgotICAgICAgICBjYXNlIENvbnRleHRN
ZW51SXRlbVRhZ0xlYXJuU3BlbGxpbmc6Ci0gICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFt
ZS0+c2VsZWN0aW9uKCktPmlzUmFuZ2UoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIENvbnRleHRNZW51SXRlbVRhZ1Bhc3RlOgotICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0g
ZnJhbWUtPmVkaXRvcigpLT5jYW5ESFRNTFBhc3RlKCkgfHwgZnJhbWUtPmVkaXRvcigpLT5jYW5Q
YXN0ZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0jaWYgUExBVEZPUk0oR1RLKQotICAgICAgICBj
YXNlIENvbnRleHRNZW51SXRlbVRhZ0RlbGV0ZToKLSAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9
IGZyYW1lLT5lZGl0b3IoKS0+Y2FuRGVsZXRlKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTZWxlY3RBbGw6Ci0gICAgICAgIGNhc2UgQ29udGV4
dE1lbnVJdGVtVGFnSW5wdXRNZXRob2RzOgotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRh
Z1VuaWNvZGU6Ci0gICAgICAgICAgICBzaG91bGRFbmFibGUgPSB0cnVlOwotICAgICAgICAgICAg
YnJlYWs7Ci0jZW5kaWYKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdVbmRlcmxpbmU6
IHsKLSAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgICAgICAgICAgUmVmUHRy
PENTU1N0eWxlRGVjbGFyYXRpb24+IHN0eWxlID0gZnJhbWUtPmRvY3VtZW50KCktPmNyZWF0ZUNT
U1N0eWxlRGVjbGFyYXRpb24oKTsKLSAgICAgICAgICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQ
cm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uc0luRWZmZWN0LCAidW5kZXJsaW5lIiwgZmFsc2Us
IGVjKTsKLSAgICAgICAgICAgIHNob3VsZENoZWNrID0gZnJhbWUtPmVkaXRvcigpLT5zZWxlY3Rp
b25IYXNTdHlsZShzdHlsZS5nZXQoKSkgIT0gRmFsc2VUcmlTdGF0ZTsKLSAgICAgICAgICAgIHNo
b3VsZEVuYWJsZSA9IGZyYW1lLT5lZGl0b3IoKS0+Y2FuRWRpdFJpY2hseSgpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdMb29r
VXBJbkRpY3Rpb25hcnk6Ci0gICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+c2VsZWN0
aW9uKCktPmlzUmFuZ2UoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbnRl
eHRNZW51SXRlbVRhZ0NoZWNrR3JhbW1hcldpdGhTcGVsbGluZzoKLSNpZm5kZWYgQlVJTERJTkdf
T05fVElHRVIKLSAgICAgICAgICAgIGlmIChmcmFtZS0+ZWRpdG9yKCktPmlzR3JhbW1hckNoZWNr
aW5nRW5hYmxlZCgpKQotICAgICAgICAgICAgICAgIHNob3VsZENoZWNrID0gdHJ1ZTsKLSAgICAg
ICAgICAgIHNob3VsZEVuYWJsZSA9IHRydWU7Ci0jZW5kaWYKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0l0YWxpYzogewotICAgICAgICAgICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgICAgICAgICBSZWZQdHI8Q1NTU3R5bGVEZWNsYXJhdGlv
bj4gc3R5bGUgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+Y3JlYXRlQ1NTU3R5bGVEZWNsYXJhdGlvbigp
OwotICAgICAgICAgICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFN0eWxlLCAi
aXRhbGljIiwgZmFsc2UsIGVjKTsKLSAgICAgICAgICAgIHNob3VsZENoZWNrID0gZnJhbWUtPmVk
aXRvcigpLT5zZWxlY3Rpb25IYXNTdHlsZShzdHlsZS5nZXQoKSkgIT0gRmFsc2VUcmlTdGF0ZTsK
LSAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGZyYW1lLT5lZGl0b3IoKS0+Y2FuRWRpdFJpY2hs
eSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBDb250ZXh0
TWVudUl0ZW1UYWdCb2xkOiB7Ci0gICAgICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAg
ICAgICAgICAgIFJlZlB0cjxDU1NTdHlsZURlY2xhcmF0aW9uPiBzdHlsZSA9IGZyYW1lLT5kb2N1
bWVudCgpLT5jcmVhdGVDU1NTdHlsZURlY2xhcmF0aW9uKCk7Ci0gICAgICAgICAgICBzdHlsZS0+
c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlGb250V2VpZ2h0LCAiYm9sZCIsIGZhbHNlLCBlYyk7Ci0g
ICAgICAgICAgICBzaG91bGRDaGVjayA9IGZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0aW9uSGFzU3R5
bGUoc3R5bGUuZ2V0KCkpICE9IEZhbHNlVHJpU3RhdGU7Ci0gICAgICAgICAgICBzaG91bGRFbmFi
bGUgPSBmcmFtZS0+ZWRpdG9yKCktPmNhbkVkaXRSaWNobHkoKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnT3V0bGluZToKLSAg
ICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGZhbHNlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU2hvd1NwZWxsaW5nUGFuZWw6Ci0jaWZuZGVmIEJV
SUxESU5HX09OX1RJR0VSCi0gICAgICAgICAgICBpZiAoZnJhbWUtPmVkaXRvcigpLT5zcGVsbGlu
Z1BhbmVsSXNTaG93aW5nKCkpCi0gICAgICAgICAgICAgICAgaXRlbS5zZXRUaXRsZShjb250ZXh0
TWVudUl0ZW1UYWdTaG93U3BlbGxpbmdQYW5lbChmYWxzZSkpOwotICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgIGl0ZW0uc2V0VGl0bGUoY29udGV4dE1lbnVJdGVtVGFnU2hvd1NwZWxs
aW5nUGFuZWwodHJ1ZSkpOwotI2VuZGlmCi0gICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFt
ZS0+ZWRpdG9yKCktPmNhbkVkaXQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IENvbnRleHRNZW51SXRlbVRhZ05vR3Vlc3Nlc0ZvdW5kOgotICAgICAgICAgICAgc2hvdWxkRW5h
YmxlID0gZmFsc2U7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVu
dUl0ZW1UYWdDaGVja1NwZWxsaW5nV2hpbGVUeXBpbmc6Ci0gICAgICAgICAgICBzaG91bGRDaGVj
ayA9IGZyYW1lLT5lZGl0b3IoKS0+aXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKTsK
LSAgICAgICAgICAgIGJyZWFrOwotI2lmIFBMQVRGT1JNKE1BQykKLSAgICAgICAgY2FzZSBDb250
ZXh0TWVudUl0ZW1UYWdTdWJzdGl0dXRpb25zTWVudToKLSAgICAgICAgY2FzZSBDb250ZXh0TWVu
dUl0ZW1UYWdUcmFuc2Zvcm1hdGlvbnNNZW51OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU2hvd1N1YnN0aXR1dGlvbnM6Ci0jaWYgIWRlZmluZWQo
QlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpCi0gICAg
ICAgICAgICBpZiAoZnJhbWUtPmVkaXRvcigpLT5zdWJzdGl0dXRpb25zUGFuZWxJc1Nob3dpbmco
KSkKLSAgICAgICAgICAgICAgICBpdGVtLnNldFRpdGxlKGNvbnRleHRNZW51SXRlbVRhZ1Nob3dT
dWJzdGl0dXRpb25zKGZhbHNlKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
aXRlbS5zZXRUaXRsZShjb250ZXh0TWVudUl0ZW1UYWdTaG93U3Vic3RpdHV0aW9ucyh0cnVlKSk7
Ci0gICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+ZWRpdG9yKCktPmNhbkVkaXQoKTsK
LSNlbmRpZgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVt
VGFnTWFrZVVwcGVyQ2FzZToKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdNYWtlTG93
ZXJDYXNlOgotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0NhcGl0YWxpemU6Ci0gICAg
ICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQ2hhbmdlQmFjazoKLSAgICAgICAgICAgIHNob3Vs
ZEVuYWJsZSA9IGZyYW1lLT5lZGl0b3IoKS0+Y2FuRWRpdCgpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQ29ycmVjdFNwZWxsaW5nQXV0b21hdGlj
YWxseToKLSNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJ
TkdfT05fTEVPUEFSRCkKLSAgICAgICAgICAgIHNob3VsZENoZWNrID0gZnJhbWUtPmVkaXRvcigp
LT5pc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQoKTsKLSNlbmRpZgotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU21hcnRDb3B5UGFz
dGU6Ci0jaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5H
X09OX0xFT1BBUkQpCi0gICAgICAgICAgICBzaG91bGRDaGVjayA9IGZyYW1lLT5lZGl0b3IoKS0+
c21hcnRJbnNlcnREZWxldGVFbmFibGVkKCk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1NtYXJ0UXVvdGVzOgotI2lmICFkZWZpbmVk
KEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQotICAg
ICAgICAgICAgc2hvdWxkQ2hlY2sgPSBmcmFtZS0+ZWRpdG9yKCktPmlzQXV0b21hdGljUXVvdGVT
dWJzdGl0dXRpb25FbmFibGVkKCk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1NtYXJ0RGFzaGVzOgotI2lmICFkZWZpbmVkKEJVSUxE
SU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQotICAgICAgICAg
ICAgc2hvdWxkQ2hlY2sgPSBmcmFtZS0+ZWRpdG9yKCktPmlzQXV0b21hdGljRGFzaFN1YnN0aXR1
dGlvbkVuYWJsZWQoKTsKLSNlbmRpZgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtVGFnU21hcnRMaW5rczoKLSNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9U
SUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKLSAgICAgICAgICAgIHNob3Vs
ZENoZWNrID0gZnJhbWUtPmVkaXRvcigpLT5pc0F1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVk
KCk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbnRleHRNZW51
SXRlbVRhZ1RleHRSZXBsYWNlbWVudDoKLSNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikg
JiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKLSAgICAgICAgICAgIHNob3VsZENoZWNr
ID0gZnJhbWUtPmVkaXRvcigpLT5pc0F1dG9tYXRpY1RleHRSZXBsYWNlbWVudEVuYWJsZWQoKTsK
LSNlbmRpZgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVt
VGFnU3RvcFNwZWFraW5nOgotICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gY29udHJvbGxlcigp
ICYmIGNvbnRyb2xsZXIoKS0+Y2xpZW50KCkgJiYgY29udHJvbGxlcigpLT5jbGllbnQoKS0+aXNT
cGVha2luZygpOwotICAgICAgICAgICAgYnJlYWs7Ci0jZWxzZSAvLyBQTEFURk9STShNQUMpIGVu
ZHMgaGVyZQotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1N0b3BTcGVha2luZzoKLSAg
ICAgICAgICAgIGJyZWFrOwotI2VuZGlmCi0jaWYgUExBVEZPUk0oR1RLKQotICAgICAgICBjYXNl
IENvbnRleHRNZW51SXRlbVRhZ0dvQmFjazoKLSAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGZy
YW1lLT5wYWdlKCkgJiYgZnJhbWUtPnBhZ2UoKS0+YmFja0ZvcndhcmQoKS0+Y2FuR29CYWNrT3JG
b3J3YXJkKC0xKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbnRleHRNZW51
SXRlbVRhZ0dvRm9yd2FyZDoKLSAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGZyYW1lLT5wYWdl
KCkgJiYgZnJhbWUtPnBhZ2UoKS0+YmFja0ZvcndhcmQoKS0+Y2FuR29CYWNrT3JGb3J3YXJkKDEp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU3Rv
cDoKLSAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRM
b2FkZXIoKS0+aXNMb2FkaW5nSW5BUElTZW5zZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnUmVsb2FkOgotICAgICAgICAgICAgc2hvdWxkRW5h
YmxlID0gIWZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+aXNMb2FkaW5nSW5BUElT
ZW5zZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVt
VGFnRm9udE1lbnU6Ci0gICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+ZWRpdG9yKCkt
PmNhbkVkaXRSaWNobHkoKTsKLSAgICAgICAgICAgIGJyZWFrOwotI2Vsc2UKLSAgICAgICAgY2Fz
ZSBDb250ZXh0TWVudUl0ZW1UYWdHb0JhY2s6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVt
VGFnR29Gb3J3YXJkOgotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1N0b3A6Ci0gICAg
ICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnUmVsb2FkOgotICAgICAgICBjYXNlIENvbnRleHRN
ZW51SXRlbVRhZ0ZvbnRNZW51OgotI2VuZGlmCi0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVt
VGFnTm9BY3Rpb246Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnT3BlbkxpbmtJbk5l
d1dpbmRvdzoKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdEb3dubG9hZExpbmtUb0Rp
c2s6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQ29weUxpbmtUb0NsaXBib2FyZDoK
LSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdPcGVuSW1hZ2VJbk5ld1dpbmRvdzoKLSAg
ICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdEb3dubG9hZEltYWdlVG9EaXNrOgotICAgICAg
ICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0NvcHlJbWFnZVRvQ2xpcGJvYXJkOgotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnT3Blbk1lZGlhSW5OZXdX
aW5kb3c6Ci0gICAgICAgICAgICBpZiAobV9oaXRUZXN0UmVzdWx0Lm1lZGlhSXNWaWRlbygpKQot
ICAgICAgICAgICAgICAgIGl0ZW0uc2V0VGl0bGUoY29udGV4dE1lbnVJdGVtVGFnT3BlblZpZGVv
SW5OZXdXaW5kb3coKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgaXRlbS5z
ZXRUaXRsZShjb250ZXh0TWVudUl0ZW1UYWdPcGVuQXVkaW9Jbk5ld1dpbmRvdygpKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0NvcHlNZWRpYUxp
bmtUb0NsaXBib2FyZDoKLSAgICAgICAgICAgIGlmIChtX2hpdFRlc3RSZXN1bHQubWVkaWFJc1Zp
ZGVvKCkpCi0gICAgICAgICAgICAgICAgaXRlbS5zZXRUaXRsZShjb250ZXh0TWVudUl0ZW1UYWdD
b3B5VmlkZW9MaW5rVG9DbGlwYm9hcmQoKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgaXRlbS5zZXRUaXRsZShjb250ZXh0TWVudUl0ZW1UYWdDb3B5QXVkaW9MaW5rVG9DbGlw
Ym9hcmQoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0
ZW1UYWdUb2dnbGVNZWRpYUNvbnRyb2xzOgotICAgICAgICAgICAgc2hvdWxkQ2hlY2sgPSBtX2hp
dFRlc3RSZXN1bHQubWVkaWFDb250cm9sc0VuYWJsZWQoKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1RvZ2dsZU1lZGlhTG9vcDoKLSAgICAgICAg
ICAgIHNob3VsZENoZWNrID0gbV9oaXRUZXN0UmVzdWx0Lm1lZGlhTG9vcEVuYWJsZWQoKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0VudGVyVmlk
ZW9GdWxsc2NyZWVuOgotICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gbV9oaXRUZXN0UmVzdWx0
Lm1lZGlhU3VwcG9ydHNGdWxsc2NyZWVuKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBDb250ZXh0TWVudUl0ZW1UYWdPcGVuRnJhbWVJbk5ld1dpbmRvdzoKLSAgICAgICAgY2Fz
ZSBDb250ZXh0TWVudUl0ZW1UYWdTcGVsbGluZ0d1ZXNzOgotICAgICAgICBjYXNlIENvbnRleHRN
ZW51SXRlbVRhZ090aGVyOgotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1NlYXJjaElu
U3BvdGxpZ2h0OgotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1NlYXJjaFdlYjoKLSAg
ICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdPcGVuV2l0aERlZmF1bHRBcHBsaWNhdGlvbjoK
LSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1QREZBY3R1YWxTaXplOgotICAgICAgICBjYXNl
IENvbnRleHRNZW51SXRlbVBERlpvb21JbjoKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1Q
REZab29tT3V0OgotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVBERkF1dG9TaXplOgotICAg
ICAgICBjYXNlIENvbnRleHRNZW51SXRlbVBERlNpbmdsZVBhZ2U6Ci0gICAgICAgIGNhc2UgQ29u
dGV4dE1lbnVJdGVtUERGRmFjaW5nUGFnZXM6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVt
UERGQ29udGludW91czoKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1QREZOZXh0UGFnZToK
LSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1QREZQcmV2aW91c1BhZ2U6Ci0gICAgICAgIGNh
c2UgQ29udGV4dE1lbnVJdGVtVGFnT3Blbkxpbms6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJ
dGVtVGFnSWdub3JlR3JhbW1hcjoKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTcGVs
bGluZ01lbnU6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU2hvd0ZvbnRzOgotICAg
ICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1N0eWxlczoKLSAgICAgICAgY2FzZSBDb250ZXh0
TWVudUl0ZW1UYWdTaG93Q29sb3JzOgotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1Nw
ZWVjaE1lbnU6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU3RhcnRTcGVha2luZzoK
LSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdXcml0aW5nRGlyZWN0aW9uTWVudToKLSAg
ICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdUZXh0RGlyZWN0aW9uTWVudToKLSAgICAgICAg
Y2FzZSBDb250ZXh0TWVudUl0ZW1UYWdQREZTaW5nbGVQYWdlU2Nyb2xsaW5nOgotICAgICAgICBj
YXNlIENvbnRleHRNZW51SXRlbVRhZ1BERkZhY2luZ1BhZ2VzU2Nyb2xsaW5nOgotI2lmIEVOQUJM
RShJTlNQRUNUT1IpCi0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnSW5zcGVjdEVsZW1l
bnQ6Ci0jZW5kaWYKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1CYXNlQ3VzdG9tVGFnOgot
ICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbUN1c3RvbVRhZ05vQWN0aW9uOgotICAgICAgICBj
YXNlIENvbnRleHRNZW51SXRlbUxhc3RDdXN0b21UYWc6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1l
bnVJdGVtQmFzZUFwcGxpY2F0aW9uVGFnOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgQ29udGV4dE1lbnVJdGVtVGFnTWVkaWFQbGF5UGF1c2U6Ci0gICAgICAgICAgICBpZiAobV9o
aXRUZXN0UmVzdWx0Lm1lZGlhUGxheWluZygpKQotICAgICAgICAgICAgICAgIGl0ZW0uc2V0VGl0
bGUoY29udGV4dE1lbnVJdGVtVGFnTWVkaWFQYXVzZSgpKTsKLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBpdGVtLnNldFRpdGxlKGNvbnRleHRNZW51SXRlbVRhZ01lZGlhUGxheSgp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ01l
ZGlhTXV0ZToKLSAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IG1faGl0VGVzdFJlc3VsdC5tZWRp
YUhhc0F1ZGlvKCk7Ci0gICAgICAgICAgICBzaG91bGRDaGVjayA9IHNob3VsZEVuYWJsZSAmJiAg
bV9oaXRUZXN0UmVzdWx0Lm1lZGlhTXV0ZWQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0K
LQotICAgIGl0ZW0uc2V0Q2hlY2tlZChzaG91bGRDaGVjayk7Ci0gICAgaXRlbS5zZXRFbmFibGVk
KHNob3VsZEVuYWJsZSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8v
IEVOQUJMRShDT05URVhUX01FTlVTKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9Db250ZXh0TWVu
dS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vQ29udGV4dE1lbnUuaAkocmV2aXNp
b24gNzM0NjkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL0NvbnRleHRNZW51LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KIAogI2lu
Y2x1ZGUgIkNvbnRleHRNZW51SXRlbS5oIgotI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNp
bmNsdWRlICJQbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3Ry
aW5nLmgiCiAjaWYgUExBVEZPUk0oTUFDKQpAQCAtNDgsMTQgKzQ3LDEwIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICBjbGFzcyBDb250ZXh0TWVudSA6IHB1YmxpYyBOb25jb3B5YWJsZQogICAg
IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIENvbnRleHRNZW51KGNvbnN0IEhpdFRlc3RSZXN1bHQm
KTsKLSAgICAgICAgQ29udGV4dE1lbnUoY29uc3QgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IFBsYXRm
b3JtTWVudURlc2NyaXB0aW9uKTsKKyAgICAgICAgQ29udGV4dE1lbnUoKTsKKyAgICAgICAgQ29u
dGV4dE1lbnUoY29uc3QgUGxhdGZvcm1NZW51RGVzY3JpcHRpb24pOwogICAgICAgICB+Q29udGV4
dE1lbnUoKTsKIAotICAgICAgICB2b2lkIHBvcHVsYXRlKCk7Ci0gICAgICAgIHZvaWQgYWRkSW5z
cGVjdEVsZW1lbnRJdGVtKCk7Ci0gICAgICAgIHZvaWQgY2hlY2tPckVuYWJsZUlmTmVlZGVkKENv
bnRleHRNZW51SXRlbSYpIGNvbnN0OwotCiAgICAgICAgIHZvaWQgaW5zZXJ0SXRlbSh1bnNpZ25l
ZCBwb3NpdGlvbiwgQ29udGV4dE1lbnVJdGVtJik7CiAgICAgICAgIHZvaWQgYXBwZW5kSXRlbShD
b250ZXh0TWVudUl0ZW0mKTsKICAgICAgICAgCkBAIC02NCw5ICs1OSw2IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogICAgICAgICB1bnNpZ25lZCBpdGVtQ291bnQoKSBjb25zdDsKIAotICAgICAg
ICBIaXRUZXN0UmVzdWx0IGhpdFRlc3RSZXN1bHQoKSBjb25zdCB7IHJldHVybiBtX2hpdFRlc3RS
ZXN1bHQ7IH0KLSAgICAgICAgQ29udGV4dE1lbnVDb250cm9sbGVyKiBjb250cm9sbGVyKCkgY29u
c3Q7Ci0KICAgICAgICAgUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gcGxhdGZvcm1EZXNjcmlwdGlv
bigpIGNvbnN0OwogICAgICAgICB2b2lkIHNldFBsYXRmb3JtRGVzY3JpcHRpb24oUGxhdGZvcm1N
ZW51RGVzY3JpcHRpb24pOwogCkBAIC03NSw3ICs2Nyw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgc3RhdGljIENvbnRleHRNZW51SXRlbSogaXRlbVdpdGhJZChpbnQpOwogI2VuZGlm
CiAgICAgcHJpdmF0ZToKLSAgICAgICAgSGl0VGVzdFJlc3VsdCBtX2hpdFRlc3RSZXN1bHQ7CiAj
aWYgUExBVEZPUk0oTUFDKQogICAgICAgICAvLyBLZWVwIHRoaXMgaW4gc3luYyB3aXRoIHRoZSBQ
bGF0Zm9ybU1lbnVEZXNjcmlwdGlvbiB0eXBlZGVmCiAgICAgICAgIFJldGFpblB0cjxOU011dGFi
bGVBcnJheT4gbV9wbGF0Zm9ybURlc2NyaXB0aW9uOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9h
bmRyb2lkL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9hbmRyb2lkL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAJKHJldmlzaW9uIDczNDY5KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE2Nyw3ICsxNjcsNyBAQCBQYXN0ZWJvYXJkOjp+UGFzdGVib2FyZCgpCiB9CiAK
IAotQ29udGV4dE1lbnU6OkNvbnRleHRNZW51KGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCkg
OiBtX2hpdFRlc3RSZXN1bHQocmVzdWx0KQorQ29udGV4dE1lbnU6OkNvbnRleHRNZW51KCkKIHsK
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICBub3RJbXBsZW1lbnRlZCgpOwpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9icmV3L0NvbnRleHRNZW51QnJldy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9icmV3L0NvbnRleHRNZW51QnJldy5jcHAJKHJldmlzaW9uIDczNDY5
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9icmV3L0NvbnRleHRNZW51QnJldy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMyLDE1ICszMiwxMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNvbnRl
eHRNZW51OjpDb250ZXh0TWVudShjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQpCi0gICAgOiBt
X2hpdFRlc3RSZXN1bHQocmVzdWx0KQorQ29udGV4dE1lbnU6OkNvbnRleHRNZW51KCkKIHsKICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi1Db250
ZXh0TWVudTo6Q29udGV4dE1lbnUoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBQ
bGF0Zm9ybU1lbnVEZXNjcmlwdGlvbiBtZW51KQotICAgIDogbV9oaXRUZXN0UmVzdWx0KHJlc3Vs
dCkKK0NvbnRleHRNZW51OjpDb250ZXh0TWVudShjb25zdCBQbGF0Zm9ybU1lbnVEZXNjcmlwdGlv
biBtZW51KQogewogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIG5vdEltcGxlbWVudGVk
KCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NvbnRleHRNZW51Q2hyb21pdW0u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ29udGV4dE1lbnVD
aHJvbWl1bS5jcHAJKHJldmlzaW9uIDczNDY5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9Db250ZXh0TWVudUNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTMgKzM2LDEx
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIC8vIFRoaXMgaXMgYSBzdHViIGltcGxlbWVudGF0aW9u
IG9mIFdlYktpdCdzIENvbnRleHRNZW51IGNsYXNzIHRoYXQgZG9lcwogLy8gbm90aGluZy4KIAot
Q29udGV4dE1lbnU6OkNvbnRleHRNZW51KGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCkKLSAg
ICA6IG1faGl0VGVzdFJlc3VsdChyZXN1bHQpCitDb250ZXh0TWVudTo6Q29udGV4dE1lbnUoKQog
ewogfQogCi1Db250ZXh0TWVudTo6Q29udGV4dE1lbnUoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVz
dWx0LCBjb25zdCBQbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbiBtZW51KQotICAgIDogbV9oaXRUZXN0
UmVzdWx0KHJlc3VsdCkKK0NvbnRleHRNZW51OjpDb250ZXh0TWVudShjb25zdCBQbGF0Zm9ybU1l
bnVEZXNjcmlwdGlvbiBtZW51KQogewogfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2VmbC9D
b250ZXh0TWVudUVmbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9lZmwvQ29u
dGV4dE1lbnVFZmwuY3BwCShyZXZpc2lvbiA3MzQ2OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZWZs
L0NvbnRleHRNZW51RWZsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMTYgKzI5LDE0IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ29udGV4dE1lbnU6OkNvbnRleHRNZW51KGNvbnN0IEhp
dFRlc3RSZXN1bHQmIHJlc3VsdCkKLSAgICA6IG1faGl0VGVzdFJlc3VsdChyZXN1bHQpCitDb250
ZXh0TWVudTo6Q29udGV4dE1lbnUoKQogewogICAgIG1fY29udGV4dE1lbnVDbGllbnQgPSBzdGF0
aWNfY2FzdDxDb250ZXh0TWVudUNsaWVudEVmbCo+KGNvbnRyb2xsZXIoKS0+Y2xpZW50KCkpOwog
ICAgIG1fcGxhdGZvcm1EZXNjcmlwdGlvbiA9IG1fY29udGV4dE1lbnVDbGllbnQtPmNyZWF0ZVBs
YXRmb3JtRGVzY3JpcHRpb24odGhpcyk7CiB9CiAKLUNvbnRleHRNZW51OjpDb250ZXh0TWVudShj
b25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IFBsYXRmb3JtTWVudURlc2NyaXB0aW9u
IG1lbnUpCi0gICAgOiBtX2hpdFRlc3RSZXN1bHQocmVzdWx0KQotICAgICwgbV9wbGF0Zm9ybURl
c2NyaXB0aW9uKG1lbnUpCitDb250ZXh0TWVudTo6Q29udGV4dE1lbnUoY29uc3QgUGxhdGZvcm1N
ZW51RGVzY3JpcHRpb24gbWVudSkKKyAgICA6IG1fcGxhdGZvcm1EZXNjcmlwdGlvbihtZW51KQog
ewogICAgIG1fY29udGV4dE1lbnVDbGllbnQgPSBzdGF0aWNfY2FzdDxDb250ZXh0TWVudUNsaWVu
dEVmbCo+KGNvbnRyb2xsZXIoKS0+Y2xpZW50KCkpOwogfQpAQCAtNTEsNyArNDksNiBAQCBDb250
ZXh0TWVudTo6fkNvbnRleHRNZW51KCkKIAogdm9pZCBDb250ZXh0TWVudTo6YXBwZW5kSXRlbShD
b250ZXh0TWVudUl0ZW0mIGl0ZW0pCiB7Ci0gICAgY2hlY2tPckVuYWJsZUlmTmVlZGVkKGl0ZW0p
OwogICAgIG1fY29udGV4dE1lbnVDbGllbnQtPmFwcGVuZEl0ZW0obV9wbGF0Zm9ybURlc2NyaXB0
aW9uLCBpdGVtKTsKIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9lZmwvQ29udGV4dE1lbnVJ
dGVtRWZsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2VmbC9Db250ZXh0TWVu
dUl0ZW1FZmwuY3BwCShyZXZpc2lvbiA3MzQ2OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZWZsL0Nv
bnRleHRNZW51SXRlbUVmbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNiw4ICsxMTYsNyBAQCB2
b2lkIENvbnRleHRNZW51SXRlbTo6c2V0U3ViTWVudShDb250ZXh0CiAgICAgICAgIHJldHVybjsK
IAogICAgIG1fcGxhdGZvcm1EZXNjcmlwdGlvbi50eXBlID0gU3VibWVudVR5cGU7Ci0gICAgbV9w
bGF0Zm9ybURlc2NyaXB0aW9uLnN1Yk1lbnUgPSBuZXcgQ29udGV4dE1lbnUoc3ViTWVudS0+aGl0
VGVzdFJlc3VsdCgpLAotICAgICAgICAgICAgc3ViTWVudS0+cmVsZWFzZVBsYXRmb3JtRGVzY3Jp
cHRpb24oKSk7CisgICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9uLnN1Yk1lbnUgPSBuZXcgQ29udGV4
dE1lbnUoc3ViTWVudS0+cmVsZWFzZVBsYXRmb3JtRGVzY3JpcHRpb24oKSk7CiB9CiAKIGJvb2wg
Q29udGV4dE1lbnVJdGVtOjpjaGVja2VkKCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3RrL0NvbnRleHRNZW51R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2d0
ay9Db250ZXh0TWVudUd0ay5jcHAJKHJldmlzaW9uIDczNDY5KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvQ29udGV4dE1lbnVHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw4ICszNCw3IEBA
IHN0YXRpYyB2b2lkIG1lbnVJdGVtQWN0aXZhdGVkKEd0a01lbnVJdGUKICAgICBjb250cm9sbGVy
LT5jb250ZXh0TWVudUl0ZW1TZWxlY3RlZCgmY29udGV4dEl0ZW0pOwogfQogCi1Db250ZXh0TWVu
dTo6Q29udGV4dE1lbnUoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0KQotICAgIDogbV9oaXRU
ZXN0UmVzdWx0KHJlc3VsdCkKK0NvbnRleHRNZW51OjpDb250ZXh0TWVudSgpCiB7CiAgICAgbV9w
bGF0Zm9ybURlc2NyaXB0aW9uID0gR1RLX01FTlUoZ3RrX21lbnVfbmV3KCkpOwogCkBAIC01MSw3
ICs1MCw2IEBAIENvbnRleHRNZW51Ojp+Q29udGV4dE1lbnUoKQogdm9pZCBDb250ZXh0TWVudTo6
YXBwZW5kSXRlbShDb250ZXh0TWVudUl0ZW0mIGl0ZW0pCiB7CiAgICAgQVNTRVJUKG1fcGxhdGZv
cm1EZXNjcmlwdGlvbik7Ci0gICAgY2hlY2tPckVuYWJsZUlmTmVlZGVkKGl0ZW0pOwogCiAgICAg
Q29udGV4dE1lbnVJdGVtVHlwZSB0eXBlID0gaXRlbS50eXBlKCk7CiAgICAgR3RrTWVudUl0ZW0q
IHBsYXRmb3JtSXRlbSA9IENvbnRleHRNZW51SXRlbTo6Y3JlYXRlTmF0aXZlTWVudUl0ZW0oaXRl
bS5yZWxlYXNlUGxhdGZvcm1EZXNjcmlwdGlvbigpKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
aGFpa3UvQ29udGV4dE1lbnVIYWlrdS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9oYWlrdS9Db250ZXh0TWVudUhhaWt1LmNwcAkocmV2aXNpb24gNzM0NjkpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2hhaWt1L0NvbnRleHRNZW51SGFpa3UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
NSw5ICs3NSw4IEBAIHByaXZhdGU6CiAgICAgaW50IG1fcmVzdWx0OwogfTsKIAotQ29udGV4dE1l
bnU6OkNvbnRleHRNZW51KGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCkKLSAgICA6IG1faGl0
VGVzdFJlc3VsdChyZXN1bHQpCi0gICAgLCBtX3BsYXRmb3JtRGVzY3JpcHRpb24obmV3IEJNZW51
KCJjb250ZXh0X21lbnUiKSkKK0NvbnRleHRNZW51OjpDb250ZXh0TWVudSgpCisgICAgOiBtX3Bs
YXRmb3JtRGVzY3JpcHRpb24obmV3IEJNZW51KCJjb250ZXh0X21lbnUiKSkKIHsKIH0KIApAQCAt
ODgsOCArODcsNiBAQCBDb250ZXh0TWVudTo6fkNvbnRleHRNZW51KCkKIAogdm9pZCBDb250ZXh0
TWVudTo6YXBwZW5kSXRlbShDb250ZXh0TWVudUl0ZW0mIGl0ZW0pCiB7Ci0gICAgY2hlY2tPckVu
YWJsZUlmTmVlZGVkKGl0ZW0pOwotCiAgICAgQk1lbnVJdGVtKiBtZW51SXRlbSA9IGl0ZW0ucmVs
ZWFzZVBsYXRmb3JtRGVzY3JpcHRpb24oKTsKICAgICBpZiAobWVudUl0ZW0pCiAgICAgICAgIG1f
cGxhdGZvcm1EZXNjcmlwdGlvbi0+QWRkSXRlbShtZW51SXRlbSk7CkBAIC0xMDIsOCArOTksNiBA
QCB1bnNpZ25lZCBDb250ZXh0TWVudTo6aXRlbUNvdW50KCkgY29uc3QKIAogdm9pZCBDb250ZXh0
TWVudTo6aW5zZXJ0SXRlbSh1bnNpZ25lZCBwb3NpdGlvbiwgQ29udGV4dE1lbnVJdGVtJiBpdGVt
KQogewotICAgIGNoZWNrT3JFbmFibGVJZk5lZWRlZChpdGVtKTsKLQogICAgIEJNZW51SXRlbSog
bWVudUl0ZW0gPSBpdGVtLnJlbGVhc2VQbGF0Zm9ybURlc2NyaXB0aW9uKCk7CiAgICAgaWYgKG1l
bnVJdGVtKQogICAgICAgICBtX3BsYXRmb3JtRGVzY3JpcHRpb24tPkFkZEl0ZW0obWVudUl0ZW0s
IHBvc2l0aW9uKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbWFjL0NvbnRleHRNZW51TWFjLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbWFjL0NvbnRleHRNZW51TWFjLm1tCShy
ZXZpc2lvbiA3MzQ2OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vbWFjL0NvbnRleHRNZW51TWFjLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxNyArMzAsMTUgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1Db250ZXh0TWVudTo6Q29udGV4dE1lbnUoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0
KQotICAgIDogbV9oaXRUZXN0UmVzdWx0KHJlc3VsdCkKK0NvbnRleHRNZW51OjpDb250ZXh0TWVu
dSgpCiB7CiAgICAgTlNNdXRhYmxlQXJyYXkqIGFycmF5ID0gW1tOU011dGFibGVBcnJheSBhbGxv
Y10gaW5pdF07CiAgICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9uID0gYXJyYXk7CiAgICAgW2FycmF5
IHJlbGVhc2VdOwogfQogCi1Db250ZXh0TWVudTo6Q29udGV4dE1lbnUoY29uc3QgSGl0VGVzdFJl
c3VsdCYgcmVzdWx0LCBjb25zdCBQbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbiBtZW51KQotICAgIDog
bV9oaXRUZXN0UmVzdWx0KHJlc3VsdCkKLSAgICAsIG1fcGxhdGZvcm1EZXNjcmlwdGlvbihtZW51
KQorQ29udGV4dE1lbnU6OkNvbnRleHRNZW51KGNvbnN0IFBsYXRmb3JtTWVudURlc2NyaXB0aW9u
IG1lbnUpCisgICAgOiBtX3BsYXRmb3JtRGVzY3JpcHRpb24obWVudSkKIHsKIH0KIApAQCAtNTAs
OCArNDgsNiBAQCBDb250ZXh0TWVudTo6fkNvbnRleHRNZW51KCkKIAogdm9pZCBDb250ZXh0TWVu
dTo6YXBwZW5kSXRlbShDb250ZXh0TWVudUl0ZW0mIGl0ZW0pCiB7Ci0gICAgY2hlY2tPckVuYWJs
ZUlmTmVlZGVkKGl0ZW0pOwotCiAgICAgTlNNZW51SXRlbSogcGxhdGZvcm1JdGVtID0gaXRlbS5y
ZWxlYXNlUGxhdGZvcm1EZXNjcmlwdGlvbigpOwogCiAgICAgW21fcGxhdGZvcm1EZXNjcmlwdGlv
bi5nZXQoKSBhZGRPYmplY3Q6cGxhdGZvcm1JdGVtXTsKQEAgLTYwLDggKzU2LDYgQEAgdm9pZCBD
b250ZXh0TWVudTo6YXBwZW5kSXRlbShDb250ZXh0TWVudQogCiB2b2lkIENvbnRleHRNZW51Ojpp
bnNlcnRJdGVtKHVuc2lnbmVkIHBvc2l0aW9uLCBDb250ZXh0TWVudUl0ZW0mIGl0ZW0pCiB7Ci0g
ICAgY2hlY2tPckVuYWJsZUlmTmVlZGVkKGl0ZW0pOwotCiAgICAgTlNNZW51SXRlbSogcGxhdGZv
cm1JdGVtID0gaXRlbS5yZWxlYXNlUGxhdGZvcm1EZXNjcmlwdGlvbigpOwogCiAgICAgW21fcGxh
dGZvcm1EZXNjcmlwdGlvbi5nZXQoKSBpbnNlcnRPYmplY3Q6cGxhdGZvcm1JdGVtIGF0SW5kZXg6
cG9zaXRpb25dOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9xdC9Db250ZXh0TWVudVF0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3F0L0NvbnRleHRNZW51UXQuY3BwCShyZXZp
c2lvbiA3MzQ2OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vcXQvQ29udGV4dE1lbnVRdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM1LDggKzM1LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1D
b250ZXh0TWVudTo6Q29udGV4dE1lbnUoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0KQotICAg
IDogbV9oaXRUZXN0UmVzdWx0KHJlc3VsdCkKK0NvbnRleHRNZW51OjpDb250ZXh0TWVudSgpCiB7
CiB9CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vd2luL0NvbnRleHRNZW51V2luLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3dpbi9Db250ZXh0TWVudVdpbi5jcHAJKHJldmlz
aW9uIDczNDY5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ29udGV4dE1lbnVXaW4uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00Myw5ICs0Myw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
Q29udGV4dE1lbnU6OkNvbnRleHRNZW51KGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCkKLSAg
ICA6IG1faGl0VGVzdFJlc3VsdChyZXN1bHQpCi0gICAgLCBtX3BsYXRmb3JtRGVzY3JpcHRpb24o
MCkKK0NvbnRleHRNZW51OjpDb250ZXh0TWVudSgpCisgICAgOiBtX3BsYXRmb3JtRGVzY3JpcHRp
b24oMCkKICNpZiBPUyhXSU5DRSkKICAgICAsIG1faXRlbUNvdW50KDApCiAjZW5kaWYKQEAgLTUz
LDkgKzUyLDggQEAgQ29udGV4dE1lbnU6OkNvbnRleHRNZW51KGNvbnN0IEhpdFRlc3RSZQogICAg
IHNldFBsYXRmb3JtRGVzY3JpcHRpb24oOjpDcmVhdGVQb3B1cE1lbnUoKSk7CiB9CiAKLUNvbnRl
eHRNZW51OjpDb250ZXh0TWVudShjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IFBs
YXRmb3JtTWVudURlc2NyaXB0aW9uIG1lbnUpCi0gICAgOiBtX2hpdFRlc3RSZXN1bHQocmVzdWx0
KQotICAgICwgbV9wbGF0Zm9ybURlc2NyaXB0aW9uKDApCitDb250ZXh0TWVudTo6Q29udGV4dE1l
bnUoY29uc3QgUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gbWVudSkKKyAgICA6IG1fcGxhdGZvcm1E
ZXNjcmlwdGlvbigwKQogI2lmIE9TKFdJTkNFKQogICAgICwgbV9pdGVtQ291bnQoMCkKICNlbmRp
ZgpAQCAtMTE4LDggKzExNiw2IEBAIHZvaWQgQ29udGV4dE1lbnU6Omluc2VydEl0ZW0odW5zaWdu
ZWQgaW4KICAgICBpZiAoIW1fcGxhdGZvcm1EZXNjcmlwdGlvbikKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgY2hlY2tPckVuYWJsZUlmTmVlZGVkKGl0ZW0pOwotCiAjaWYgT1MoV0lOQ0UpCiAgICAg
aWYgKGluc2VydE1lbnVJdGVtKG1fcGxhdGZvcm1EZXNjcmlwdGlvbiwgcG9zaXRpb24sIGl0ZW0p
KQogICAgICAgICArK21faXRlbUNvdW50OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS93eC9Db250
ZXh0TWVudVd4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3d4L0NvbnRleHRN
ZW51V3guY3BwCShyZXZpc2lvbiA3MzQ2OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vd3gvQ29udGV4
dE1lbnVXeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgQ29udGV4dE1lbnVJ
dGVtKiBDb250ZXh0TWVudTo6aXRlbVdpdGhJZAogICAgIHJldHVybiBuZXcgQ29udGV4dE1lbnVJ
dGVtKEFjdGlvblR5cGUsIHNfaXRlbUFjdGlvbnMuZ2V0KGlkKSwgIiIpOwogfQogCi1Db250ZXh0
TWVudTo6Q29udGV4dE1lbnUoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0KSA6IG1faGl0VGVz
dFJlc3VsdChyZXN1bHQpCitDb250ZXh0TWVudTo6Q29udGV4dE1lbnUoKQogewogICAgIG1fcGxh
dGZvcm1EZXNjcmlwdGlvbiA9IG5ldyB3eE1lbnUoMCk7CiB9CkBAIC01Nyw4ICs1Nyw2IEBAIHZv
aWQgQ29udGV4dE1lbnU6OmFwcGVuZEl0ZW0oQ29udGV4dE1lbnUKIHsKICAgICBpZiAoIW1fcGxh
dGZvcm1EZXNjcmlwdGlvbikKICAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGNoZWNrT3JFbmFi
bGVJZk5lZWRlZChpdGVtKTsKICAgICAgICAgCiAgICAgUGxhdGZvcm1NZW51SXRlbURlc2NyaXB0
aW9uIGl0ZW1EZXNjcmlwdGlvbiA9IGl0ZW0ucmVsZWFzZVBsYXRmb3JtRGVzY3JpcHRpb24oKTsg
ICAgCiAgICAgd3hJdGVtS2luZCBtZW51S2luZFd4ID0gKCBpdGVtRGVzY3JpcHRpb24udHlwZSA9
PSBDaGVja2FibGVBY3Rpb25UeXBlICkgPyB3eElURU1fQ0hFQ0sgOiB3eElURU1fTk9STUFMOwpJ
bmRleDogV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDczNDY5KQorKysgV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxOSBAQAorMjAxMC0xMi0wNyAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBh
cHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgTGF5ZXJpbmcgVmlvbGF0aW9uIGluIENvbnRleHRNZW51IC0gbWVtYmVyIHZhcmlhYmxlIG9m
IHR5cGUgSGl0VGVzdFJlc3VsdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NTA1ODYKKyAgICAgICAgCisgICAgICAgIFVwZGF0ZSB1c2VycyBvZiBDb250
ZXh0TWVudSBhbmQgQ29udGV4dE1lbnVDb250cm9sbGVyIHRvIG1hdGNoIHdoZXJlIHRoZSBuZXcg
ZnVuY3Rpb25zIAorICAgICAgICBhcmUgbG9jYXRlZC4KKworICAgICAgICAqIFNoYXJlZC9XZWJD
b250ZXh0TWVudUl0ZW1EYXRhLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4dE1lbnVJ
dGVtRGF0YTo6V2ViQ29udGV4dE1lbnVJdGVtRGF0YSk6IFJlbW92ZSB0aGUgY2FsbCB0byBjaGVj
a09yRW5hYmxlSXRlbSwgdGhhdCBjYWxsIHdpbGwgYmUgbWFkZSB3aGVuCisgICAgICAgICAgICB0
aGUgQ29udGV4dE1lbnVJdGVtIGlzIGFkZGVkIHRvIHRoZSBDb250ZXh0TWVudSB0aHJvdWdoIHRo
ZSBDb250ZXh0TWVudUNvbnRyb2xsZXIuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YkNvbnRleHRNZW51LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4dE1lbnU6OnNob3cp
OgorCiAyMDEwLTEyLTA3ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KSW5kZXg6IFdlYktpdDIvU2hhcmVkL1dl
YkNvbnRleHRNZW51SXRlbURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvU2hhcmVkL1dl
YkNvbnRleHRNZW51SXRlbURhdGEuY3BwCShyZXZpc2lvbiA3MzQ2OSkKKysrIFdlYktpdDIvU2hh
cmVkL1dlYkNvbnRleHRNZW51SXRlbURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw4ICs3
Myw2IEBAIFdlYkNvbnRleHRNZW51SXRlbURhdGE6OldlYkNvbnRleHRNZW51SXQKICAgICAgICAg
bV9zdWJtZW51ID0ga2l0SXRlbXMoY29yZVN1Ym1lbnUsIG1lbnUpOwogICAgIH0KICAgICAKLSAg
ICBtZW51LT5jaGVja09yRW5hYmxlSWZOZWVkZWQoaXRlbSk7Ci0gICAgCiAgICAgbV9lbmFibGVk
ID0gaXRlbS5lbmFibGVkKCk7CiAgICAgbV9jaGVja2VkID0gaXRlbS5jaGVja2VkKCk7CiB9Cklu
ZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJDb250ZXh0TWVudS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQ29udGV4dE1lbnUuY3BwCShy
ZXZpc2lvbiA3MzQ2OSkKKysrIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkNvbnRleHRN
ZW51LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsMTAgKzQ3LDEzIEBAIFdlYkNvbnRleHRNZW51
Ojp+V2ViQ29udGV4dE1lbnUoKQogCiB2b2lkIFdlYkNvbnRleHRNZW51OjpzaG93KCkKIHsKLSAg
ICBDb250ZXh0TWVudSogbWVudSA9IG1fcGFnZS0+Y29yZVBhZ2UoKS0+Y29udGV4dE1lbnVDb250
cm9sbGVyKCktPmNvbnRleHRNZW51KCk7CisgICAgQ29udGV4dE1lbnVDb250cm9sbGVyKiBjb250
cm9sbGVyID0gbV9wYWdlLT5jb3JlUGFnZSgpLT5jb250ZXh0TWVudUNvbnRyb2xsZXIoKTsKKyAg
ICBpZiAoIWNvbnRyb2xsZXIpCisgICAgICAgIHJldHVybjsKKyAgICBDb250ZXh0TWVudSogbWVu
dSA9IGNvbnRyb2xsZXItPmNvbnRleHRNZW51KCk7CiAgICAgaWYgKCFtZW51KQogICAgICAgICBy
ZXR1cm47Ci0gICAgTm9kZSogbm9kZSA9IG1lbnUtPmhpdFRlc3RSZXN1bHQoKS5pbm5lck5vblNo
YXJlZE5vZGUoKTsKKyAgICBOb2RlKiBub2RlID0gY29udHJvbGxlci0+aGl0VGVzdFJlc3VsdCgp
LmlubmVyTm9uU2hhcmVkTm9kZSgpOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuOwog
ICAgIEZyYW1lKiBmcmFtZSA9IG5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCk7CkBAIC02NSwxMiAr
NjgsMTIgQEAgdm9pZCBXZWJDb250ZXh0TWVudTo6c2hvdygpCiAgICAgVmVjdG9yPFdlYkNvbnRl
eHRNZW51SXRlbURhdGE+IHByb3Bvc2VkTWVudSA9IGtpdEl0ZW1zKGNvcmVJdGVtcywgbWVudSk7
CiAgICAgVmVjdG9yPFdlYkNvbnRleHRNZW51SXRlbURhdGE+IG5ld01lbnU7CiAgICAgUmVmUHRy
PEFQSU9iamVjdD4gdXNlckRhdGE7Ci0gICAgUmVmUHRyPEluamVjdGVkQnVuZGxlSGl0VGVzdFJl
c3VsdD4gaGl0VGVzdFJlc3VsdCA9IEluamVjdGVkQnVuZGxlSGl0VGVzdFJlc3VsdDo6Y3JlYXRl
KG1lbnUtPmhpdFRlc3RSZXN1bHQoKSk7CisgICAgUmVmUHRyPEluamVjdGVkQnVuZGxlSGl0VGVz
dFJlc3VsdD4gaGl0VGVzdFJlc3VsdCA9IEluamVjdGVkQnVuZGxlSGl0VGVzdFJlc3VsdDo6Y3Jl
YXRlKGNvbnRyb2xsZXItPmhpdFRlc3RSZXN1bHQoKSk7CiAgICAgaWYgKG1fcGFnZS0+aW5qZWN0
ZWRCdW5kbGVDb250ZXh0TWVudUNsaWVudCgpLmdldEN1c3RvbU1lbnVGcm9tRGVmYXVsdEl0ZW1z
KG1fcGFnZSwgaGl0VGVzdFJlc3VsdC5nZXQoKSwgcHJvcG9zZWRNZW51LCBuZXdNZW51LCB1c2Vy
RGF0YSkpCiAgICAgICAgIHByb3Bvc2VkTWVudSA9IG5ld01lbnU7CiAKICAgICAvLyBOb3RpZnkg
dGhlIFVJUHJvY2Vzcy4KLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6
U2hvd0NvbnRleHRNZW51KHZpZXctPmNvbnRlbnRzVG9XaW5kb3cobWVudS0+aGl0VGVzdFJlc3Vs
dCgpLnBvaW50KCkpLCBwcm9wb3NlZE1lbnUsIEluamVjdGVkQnVuZGxlVXNlck1lc3NhZ2VFbmNv
ZGVyKHVzZXJEYXRhLmdldCgpKSkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFn
ZVByb3h5OjpTaG93Q29udGV4dE1lbnUodmlldy0+Y29udGVudHNUb1dpbmRvdyhjb250cm9sbGVy
LT5oaXRUZXN0UmVzdWx0KCkucG9pbnQoKSksIHByb3Bvc2VkTWVudSwgSW5qZWN0ZWRCdW5kbGVV
c2VyTWVzc2FnZUVuY29kZXIodXNlckRhdGEuZ2V0KCkpKSk7CiB9CiAKIHZvaWQgV2ViQ29udGV4
dE1lbnU6Oml0ZW1TZWxlY3RlZChjb25zdCBXZWJDb250ZXh0TWVudUl0ZW1EYXRhJiBpdGVtKQpJ
bmRleDogV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9DaGFu
Z2VMb2cJKHJldmlzaW9uIDczNDc4KQorKysgV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwxOSBAQAorMjAxMC0xMi0wNyAgQnJpYW4gV2VpbnN0ZWluICA8Yndl
aW5zdGVpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgTGF5ZXJpbmcgVmlvbGF0aW9uIGluIENvbnRleHRNZW51IC0gbWVtYmVyIHZh
cmlhYmxlIG9mIHR5cGUgSGl0VGVzdFJlc3VsdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTA1ODYKKyAgICAgICAgCisgICAgICAgIFVwZGF0ZSB1c2Vy
cyBvZiBDb250ZXh0TWVudSBhbmQgQ29udGV4dE1lbnVDb250cm9sbGVyIHRvIG1hdGNoIHdoZXJl
IHRoZSBuZXcgZnVuY3Rpb25zIAorICAgICAgICBhcmUgbG9jYXRlZC4KKworICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L1dlYkNvbnRleHRNZW51Q2xpZW50Lm1tOgorICAgICAgICAoV2ViQ29udGV4
dE1lbnVDbGllbnQ6OmdldEN1c3RvbU1lbnVGcm9tRGVmYXVsdEl0ZW1zKToKKyAgICAgICAgKFdl
YkNvbnRleHRNZW51Q2xpZW50Ojpjb250ZXh0TWVudUl0ZW1TZWxlY3RlZCk6CisgICAgICAgICog
V2ViVmlldy9XZWJIVE1MVmlldy5tbToKKyAgICAgICAgKC1bV2ViTWVudVRhcmdldCB2YWxpZGF0
ZU1lbnVJdGVtOl0pOgorCiAyMDEwLTEyLTA3ICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWlu
QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBKb2huIFN1bGxpdmFuLgpJbmRleDog
V2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNvbnRleHRNZW51Q2xpZW50Lm1t
CShyZXZpc2lvbiA3MzQ2OSkKKysrIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ29udGV4
dE1lbnVDbGllbnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTQyLDggKzQyLDEwIEBACiAjaW1wb3J0
ICJXZWJWaWV3RmFjdG9yeS5oIgogI2ltcG9ydCAiV2ViVmlld0ludGVybmFsLmgiCiAjaW1wb3J0
IDxXZWJDb3JlL0NvbnRleHRNZW51Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0NvbnRleHRNZW51Q29u
dHJvbGxlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9LVVJMLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0xv
Y2FsaXplZFN0cmluZ3MuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUGFnZS5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9SdW50aW1lQXBwbGljYXRpb25DaGVja3MuaD4KICNpbXBvcnQgPFdlYktpdC9ET01Qcml2
YXRlLmg+CiAKQEAgLTI3OCw3ICsyODAsNyBAQCBOU011dGFibGVBcnJheSogV2ViQ29udGV4dE1l
bnVDbGllbnQ6OmdlCiAgICAgaWYgKCFbZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOnNlbGVj
dG9yXSkKICAgICAgICAgcmV0dXJuIGRlZmF1bHRNZW51LT5wbGF0Zm9ybURlc2NyaXB0aW9uKCk7
CiAKLSAgICBOU0RpY3Rpb25hcnkgKmVsZW1lbnQgPSBbW1tXZWJFbGVtZW50RGljdGlvbmFyeSBh
bGxvY10gaW5pdFdpdGhIaXRUZXN0UmVzdWx0OmRlZmF1bHRNZW51LT5oaXRUZXN0UmVzdWx0KCld
IGF1dG9yZWxlYXNlXTsKKyAgICBOU0RpY3Rpb25hcnkgKmVsZW1lbnQgPSBbW1tXZWJFbGVtZW50
RGljdGlvbmFyeSBhbGxvY10gaW5pdFdpdGhIaXRUZXN0UmVzdWx0OlttX3dlYlZpZXcgcGFnZV0t
PmNvbnRleHRNZW51Q29udHJvbGxlcigpLT5oaXRUZXN0UmVzdWx0KCldIGF1dG9yZWxlYXNlXTsK
IAogICAgIEJPT0wgcHJlVmVyc2lvbjNDbGllbnQgPSBpc1ByZVZlcnNpb24zQ2xpZW50KCk7CiAg
ICAgaWYgKHByZVZlcnNpb24zQ2xpZW50KSB7CkBAIC0zMDgsNyArMzEwLDcgQEAgdm9pZCBXZWJD
b250ZXh0TWVudUNsaWVudDo6Y29udGV4dE1lbnVJdAogICAgIGlkIGRlbGVnYXRlID0gW21fd2Vi
VmlldyBVSURlbGVnYXRlXTsKICAgICBTRUwgc2VsZWN0b3IgPSBAc2VsZWN0b3Iod2ViVmlldzpj
b250ZXh0TWVudUl0ZW1TZWxlY3RlZDpmb3JFbGVtZW50Oik7CiAgICAgaWYgKFtkZWxlZ2F0ZSBy
ZXNwb25kc1RvU2VsZWN0b3I6c2VsZWN0b3JdKSB7Ci0gICAgICAgIE5TRGljdGlvbmFyeSAqZWxl
bWVudCA9IFtbV2ViRWxlbWVudERpY3Rpb25hcnkgYWxsb2NdIGluaXRXaXRoSGl0VGVzdFJlc3Vs
dDpwYXJlbnRNZW51LT5oaXRUZXN0UmVzdWx0KCldOworICAgICAgICBOU0RpY3Rpb25hcnkgKmVs
ZW1lbnQgPSBbW1dlYkVsZW1lbnREaWN0aW9uYXJ5IGFsbG9jXSBpbml0V2l0aEhpdFRlc3RSZXN1
bHQ6W21fd2ViVmlldyBwYWdlXS0+Y29udGV4dE1lbnVDb250cm9sbGVyKCktPmhpdFRlc3RSZXN1
bHQoKV07CiAgICAgICAgIE5TTWVudUl0ZW0gKnBsYXRmb3JtSXRlbSA9IGl0ZW0tPnJlbGVhc2VQ
bGF0Zm9ybURlc2NyaXB0aW9uKCk7CiAKICAgICAgICAgQ2FsbFVJRGVsZWdhdGUobV93ZWJWaWV3
LCBzZWxlY3RvciwgcGxhdGZvcm1JdGVtLCBlbGVtZW50KTsKSW5kZXg6IFdlYktpdC9tYWMvV2Vi
Vmlldy9XZWJIVE1MVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcvV2Vi
SFRNTFZpZXcubW0JKHJldmlzaW9uIDczNDY5KQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhU
TUxWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNzAsNyArMTcwLDcgQEAgLSAoQk9PTCl2YWxp
ZGF0ZU1lbnVJdGVtOihOU01lbnVJdGVtICopaQogewogICAgIFdlYkNvcmU6OkNvbnRleHRNZW51
SXRlbSBjb3JlSXRlbShpdGVtKTsKICAgICBBU1NFUlQoX21lbnVDb250cm9sbGVyLT5jb250ZXh0
TWVudSgpKTsKLSAgICBfbWVudUNvbnRyb2xsZXItPmNvbnRleHRNZW51KCktPmNoZWNrT3JFbmFi
bGVJZk5lZWRlZChjb3JlSXRlbSk7CisgICAgX21lbnVDb250cm9sbGVyLT5jaGVja09yRW5hYmxl
SWZOZWVkZWQoY29yZUl0ZW0pOwogICAgIHJldHVybiBjb3JlSXRlbS5lbmFibGVkKCk7CiB9CiAK
SW5kZXg6IFdlYktpdC9xdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L0NoYW5n
ZUxvZwkocmV2aXNpb24gNzM0NjkpCisrKyBXZWJLaXQvcXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTAtMTItMDcgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWlu
c3RlaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIExheWVyaW5nIFZpb2xhdGlvbiBpbiBDb250ZXh0TWVudSAtIG1lbWJlciB2YXJp
YWJsZSBvZiB0eXBlIEhpdFRlc3RSZXN1bHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTUwNTg2CisgICAgICAgIAorICAgICAgICBVcGRhdGUgdXNlcnMg
b2YgQ29udGV4dE1lbnUgYW5kIENvbnRleHRNZW51Q29udHJvbGxlciB0byBtYXRjaCB3aGVyZSB0
aGUgbmV3IGZ1bmN0aW9ucyAKKyAgICAgICAgYXJlIGxvY2F0ZWQuCisKKyAgICAgICAgKiBBcGkv
cXdlYnBhZ2UuY3BwOgorICAgICAgICAoUVdlYlBhZ2VQcml2YXRlOjpjcmVhdGVDb250ZXh0TWVu
dSk6CisgICAgICAgIChRV2ViUGFnZTo6dXBkYXRlUG9zaXRpb25EZXBlbmRlbnRBY3Rpb25zKToK
KwogMjAxMC0xMi0wNyAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAg
VHJ5IHRvIGZpeCBidWlsZC4KSW5kZXg6IFdlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCShyZXZpc2lvbiA3MzQ2OSkKKysr
IFdlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NDMsNyArNDQz
LDcgQEAgUU1lbnUgKlFXZWJQYWdlUHJpdmF0ZTo6Y3JlYXRlQ29udGV4dE1lbgogICAgICAgICAg
ICAgICAgIFFBY3Rpb24gKmEgPSBxLT5hY3Rpb24oYWN0aW9uKTsKICAgICAgICAgICAgICAgICBp
ZiAoYSkgewogICAgICAgICAgICAgICAgICAgICBDb250ZXh0TWVudUl0ZW0gaXQoaXRlbSk7Ci0g
ICAgICAgICAgICAgICAgICAgIHdlYmNvcmVNZW51LT5jaGVja09yRW5hYmxlSWZOZWVkZWQoaXQp
OworICAgICAgICAgICAgICAgICAgICBwYWdlLT5jb250ZXh0TWVudUNvbnRyb2xsZXIoKS0+Y2hl
Y2tPckVuYWJsZUlmTmVlZGVkKGl0KTsKICAgICAgICAgICAgICAgICAgICAgUGxhdGZvcm1NZW51
SXRlbURlc2NyaXB0aW9uIGRlc2MgPSBpdC5yZWxlYXNlUGxhdGZvcm1EZXNjcmlwdGlvbigpOwog
ICAgICAgICAgICAgICAgICAgICBhLT5zZXRFbmFibGVkKGRlc2MuZW5hYmxlZCk7CiAgICAgICAg
ICAgICAgICAgICAgIGEtPnNldENoZWNrZWQoZGVzYy5jaGVja2VkKTsKQEAgLTMyMDksMTIgKzMy
MDksMTMgQEAgdm9pZCBRV2ViUGFnZTo6dXBkYXRlUG9zaXRpb25EZXBlbmRlbnRBYwogICAgICAg
ICBkLT5oaXRUZXN0UmVzdWx0ID0gUVdlYkhpdFRlc3RSZXN1bHQoKTsKICAgICBlbHNlCiAgICAg
ICAgIGQtPmhpdFRlc3RSZXN1bHQgPSBRV2ViSGl0VGVzdFJlc3VsdChuZXcgUVdlYkhpdFRlc3RS
ZXN1bHRQcml2YXRlKHJlc3VsdCkpOwotICAgIFdlYkNvcmU6OkNvbnRleHRNZW51IG1lbnUocmVz
dWx0KTsKLSAgICBtZW51LnBvcHVsYXRlKCk7CisKKyAgICBkLT5wYWdlLT5jb250ZXh0TWVudUNv
bnRyb2xsZXIoKS0+c2V0SGl0VGVzdFJlc3VsdChyZXN1bHQpOworICAgIGQtPnBhZ2UtPmNvbnRl
eHRNZW51Q29udHJvbGxlcigpLT5wb3B1bGF0ZSgpOwogICAgIAogI2lmIEVOQUJMRShJTlNQRUNU
T1IpCiAgICAgaWYgKGQtPnBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+ZW5hYmxlZCgpKQot
ICAgICAgICBtZW51LmFkZEluc3BlY3RFbGVtZW50SXRlbSgpOworICAgICAgICBkLT5wYWdlLT5j
b250ZXh0TWVudUNvbnRyb2xsZXIoKS0+YWRkSW5zcGVjdEVsZW1lbnRJdGVtKCk7CiAjZW5kaWYK
IAogICAgIFFCaXRBcnJheSB2aXNpdGVkV2ViQWN0aW9ucyhRV2ViUGFnZTo6V2ViQWN0aW9uQ291
bnQpOwpAQCAtMzIyMyw3ICszMjI0LDcgQEAgdm9pZCBRV2ViUGFnZTo6dXBkYXRlUG9zaXRpb25E
ZXBlbmRlbnRBYwogICAgIGRlbGV0ZSBkLT5jdXJyZW50Q29udGV4dE1lbnU7CiAKICAgICAvLyBU
aGVuIHdlIGxldCBjcmVhdGVDb250ZXh0TWVudSgpIGVuYWJsZSB0aGUgYWN0aW9ucyB0aGF0IGFy
ZSBwdXQgaW50byB0aGUgbWVudQotICAgIGQtPmN1cnJlbnRDb250ZXh0TWVudSA9IGQtPmNyZWF0
ZUNvbnRleHRNZW51KCZtZW51LCBtZW51LnBsYXRmb3JtRGVzY3JpcHRpb24oKSwgJnZpc2l0ZWRX
ZWJBY3Rpb25zKTsKKyAgICBkLT5jdXJyZW50Q29udGV4dE1lbnUgPSBkLT5jcmVhdGVDb250ZXh0
TWVudShkLT5wYWdlLT5jb250ZXh0TWVudUNvbnRyb2xsZXIoKS0+Y29udGV4dE1lbnUoKSwgZC0+
cGFnZS0+Y29udGV4dE1lbnVDb250cm9sbGVyKCktPmNvbnRleHRNZW51KCktPnBsYXRmb3JtRGVz
Y3JpcHRpb24oKSwgJnZpc2l0ZWRXZWJBY3Rpb25zKTsKICNlbmRpZiAvLyBRVF9OT19DT05URVhU
TUVOVQogCiAjaWZuZGVmIFFUX05PX0FDVElPTgpJbmRleDogV2ViS2l0L3dpbi9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHJldmlzaW9uIDczNDY5KQorKysg
V2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMCBAQAorMjAx
MC0xMi0wNyAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTGF5ZXJpbmcgVmlvbGF0
aW9uIGluIENvbnRleHRNZW51IC0gbWVtYmVyIHZhcmlhYmxlIG9mIHR5cGUgSGl0VGVzdFJlc3Vs
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTA1ODYK
KyAgICAgICAgCisgICAgICAgIFVwZGF0ZSB1c2VycyBvZiBDb250ZXh0TWVudSBhbmQgQ29udGV4
dE1lbnVDb250cm9sbGVyIHRvIG1hdGNoIHdoZXJlIHRoZSBuZXcgZnVuY3Rpb25zIAorICAgICAg
ICBhcmUgbG9jYXRlZC4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkNvbnRleHRNZW51
Q2xpZW50LmNwcDoKKyAgICAgICAgKFdlYkNvbnRleHRNZW51Q2xpZW50OjpnZXRDdXN0b21NZW51
RnJvbURlZmF1bHRJdGVtcyk6IEdldCB0aGUgSGl0VGVzdFJlc3VsdCBhbmQgQ29udGV4dE1lbnUg
ZnJvbSB0aGUgCisgICAgICAgICAgICBDb250ZXh0TWVudUNvbnRyb2xsZXIgKGZyb20gdGhlIHBh
Z2UpLgorICAgICAgICAoV2ViQ29udGV4dE1lbnVDbGllbnQ6OmNvbnRleHRNZW51SXRlbVNlbGVj
dGVkKTogR2V0IHRoZSBIaXRUZXN0UmVzdWx0IGZyb20gdGhlIENvbnRleHRNZW51Q29udHJvbGxl
ci4KKyAgICAgICAgKiBXZWJWaWV3LmNwcDoKKyAgICAgICAgKFdlYlZpZXc6OmhhbmRsZUNvbnRl
eHRNZW51RXZlbnQpOiBEaXR0by4KKwogMjAxMC0xMi0wNyAgSmVzc2llIEJlcmxpbiAgPGpiZXJs
aW5AYXBwbGUuY29tPgogCiAgICAgICAgIEJ1aWxkIGZpeC4gVW5yZXZpZXdlZC4KSW5kZXg6IFdl
YktpdC93aW4vV2ViVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9XZWJWaWV3LmNw
cAkocmV2aXNpb24gNzM0NjkpCisrKyBXZWJLaXQvd2luL1dlYlZpZXcuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjQ1LDEyICsxMjQ1LDE0IEBAIGJvb2wgV2ViVmlldzo6aGFuZGxlQ29udGV4dE1l
bnVFdmVudChXUEEKICAgICBpZiAoIWhhbmRsZWRFdmVudCkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCisgICAgQ29udGV4dE1lbnVDb250cm9sbGVyKiBjb250ZXh0TWVudUNvbnRyb2xsZXIgPSBt
X3BhZ2UtPmNvbnRleHRNZW51Q29udHJvbGxlcigpOworCiAgICAgLy8gU2hvdyB0aGUgbWVudQot
ICAgIENvbnRleHRNZW51KiBjb3JlTWVudSA9IG1fcGFnZS0+Y29udGV4dE1lbnVDb250cm9sbGVy
KCktPmNvbnRleHRNZW51KCk7CisgICAgQ29udGV4dE1lbnUqIGNvcmVNZW51ID0gY29udGV4dE1l
bnVDb250cm9sbGVyLT5jb250ZXh0TWVudSgpOwogICAgIGlmICghY29yZU1lbnUpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIE5vZGUqIG5vZGUgPSBjb3JlTWVudS0+aGl0VGVzdFJlc3Vs
dCgpLmlubmVyTm9uU2hhcmVkTm9kZSgpOworICAgIE5vZGUqIG5vZGUgPSBjb250ZXh0TWVudUNv
bnRyb2xsZXItPmhpdFRlc3RSZXN1bHQoKS5pbm5lck5vblNoYXJlZE5vZGUoKTsKICAgICBpZiAo
IW5vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMTI2Miw3ICsxMjY0LDcgQEAgYm9v
bCBXZWJWaWV3OjpoYW5kbGVDb250ZXh0TWVudUV2ZW50KFdQQQogICAgIGlmICghdmlldykKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUE9JTlQgcG9pbnQodmlldy0+Y29udGVudHNUb1dp
bmRvdyhjb3JlTWVudS0+aGl0VGVzdFJlc3VsdCgpLnBvaW50KCkpKTsKKyAgICBQT0lOVCBwb2lu
dCh2aWV3LT5jb250ZW50c1RvV2luZG93KGNvbnRleHRNZW51Q29udHJvbGxlci0+aGl0VGVzdFJl
c3VsdCgpLnBvaW50KCkpKTsKIAogICAgIC8vIFRyYW5zbGF0ZSB0aGUgcG9pbnQgdG8gc2NyZWVu
IGNvb3JkaW5hdGVzCiAgICAgaWYgKCE6OkNsaWVudFRvU2NyZWVuKG1fdmlld1dpbmRvdywgJnBv
aW50KSkKSW5kZXg6IFdlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ29udGV4dE1lbnVDbGll
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ29udGV4
dE1lbnVDbGllbnQuY3BwCShyZXZpc2lvbiA3MzQ2OSkKKysrIFdlYktpdC93aW4vV2ViQ29yZVN1
cHBvcnQvV2ViQ29udGV4dE1lbnVDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICsz
Miw3IEBACiAjaW5jbHVkZSAiV2ViVmlldy5oIgogCiAjaW5jbHVkZSA8V2ViQ29yZS9Db250ZXh0
TWVudS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvQ29udGV4dE1lbnVDb250cm9sbGVyLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9FdmVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL0ZyYW1lTG9hZGVyLmg+CkBAIC02NCw3ICs2NSw3IEBAIEhNRU5VIFdlYkNv
bnRleHRNZW51Q2xpZW50OjpnZXRDdXN0b21NZW4KIAogICAgIEhNRU5VIG5ld01lbnUgPSAwOwog
ICAgIENPTVB0cjxXZWJFbGVtZW50UHJvcGVydHlCYWc+IHByb3BlcnR5QmFnOwotICAgIHByb3Bl
cnR5QmFnLmFkb3B0UmVmKFdlYkVsZW1lbnRQcm9wZXJ0eUJhZzo6Y3JlYXRlSW5zdGFuY2UobWVu
dS0+aGl0VGVzdFJlc3VsdCgpKSk7CisgICAgcHJvcGVydHlCYWcuYWRvcHRSZWYoV2ViRWxlbWVu
dFByb3BlcnR5QmFnOjpjcmVhdGVJbnN0YW5jZShtX3dlYlZpZXctPnBhZ2UoKS0+Y29udGV4dE1l
bnVDb250cm9sbGVyKCktPmhpdFRlc3RSZXN1bHQoKSkpOwogICAgIC8vIEZJWE1FOiBXZSBuZWVk
IHRvIGRlY2lkZSB3aGV0aGVyIHRvIGRvIHRoZSBkZWZhdWx0IGJlZm9yZSBjYWxsaW5nIHRoaXMg
ZGVsZWdhdGUgbWV0aG9kCiAgICAgaWYgKEZBSUxFRCh1aURlbGVnYXRlLT5jb250ZXh0TWVudUl0
ZW1zRm9yRWxlbWVudChtX3dlYlZpZXcsIHByb3BlcnR5QmFnLmdldCgpLCAoT0xFX0hBTkRMRSko
VUxPTkc2NCltZW51LT5wbGF0Zm9ybURlc2NyaXB0aW9uKCksIChPTEVfSEFORExFKikmbmV3TWVu
dSkpKQogICAgICAgICByZXR1cm4gbWVudS0+cGxhdGZvcm1EZXNjcmlwdGlvbigpOwpAQCAtODIs
NyArODMsNyBAQCB2b2lkIFdlYkNvbnRleHRNZW51Q2xpZW50Ojpjb250ZXh0TWVudUl0CiAgICAg
QVNTRVJUKHVpRGVsZWdhdGUpOwogCiAgICAgQ09NUHRyPFdlYkVsZW1lbnRQcm9wZXJ0eUJhZz4g
cHJvcGVydHlCYWc7Ci0gICAgcHJvcGVydHlCYWcuYWRvcHRSZWYoV2ViRWxlbWVudFByb3BlcnR5
QmFnOjpjcmVhdGVJbnN0YW5jZShwYXJlbnRNZW51LT5oaXRUZXN0UmVzdWx0KCkpKTsKKyAgICBw
cm9wZXJ0eUJhZy5hZG9wdFJlZihXZWJFbGVtZW50UHJvcGVydHlCYWc6OmNyZWF0ZUluc3RhbmNl
KG1fd2ViVmlldy0+cGFnZSgpLT5jb250ZXh0TWVudUNvbnRyb2xsZXIoKS0+aGl0VGVzdFJlc3Vs
dCgpKSk7CiAgICAgICAgICAgICAKICAgICB1aURlbGVnYXRlLT5jb250ZXh0TWVudUl0ZW1TZWxl
Y3RlZChtX3dlYlZpZXcsIGl0ZW0tPnJlbGVhc2VQbGF0Zm9ybURlc2NyaXB0aW9uKCksIHByb3Bl
cnR5QmFnLmdldCgpKTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75864</attachid>
            <date>2010-12-07 20:15:03 -0800</date>
            <delta_ts>2010-12-07 21:34:33 -0800</delta_ts>
            <desc>[PATCH] Fix - Win, Mac, Qt, Chromium</desc>
            <filename>context_menu_layering_violation_fix.patch</filename>
            <type>text/plain</type>
            <size>126553</size>
            <attacher name="Brian Weinstein">bweinstein</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MzQ2OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODMgQEAKKzIwMTAtMTItMDcgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5A
YXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIExheWVyaW5nIFZpb2xhdGlvbiBpbiBDb250ZXh0TWVudSAtIG1lbWJlciB2YXJpYWJsZSBv
ZiB0eXBlIEhpdFRlc3RSZXN1bHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTUwNTg2CisgICAgICAgIAorICAgICAgICBDb250ZXh0TWVudSBoYWQgYSBs
YXllcmluZyB2aW9sYXRpb24gYnkgaGF2aW5nIGEgbWVtYmVyIHZhcmlhYmxlIG9mIHR5cGUgSGl0
VGVzdFJlc3VsdCwgYmVjYXVzZQorICAgICAgICBjbGFzc2VzIGluIFdlYkNvcmUvcGxhdGZvcm0g
Y2FuJ3Qga25vdyBhYm91dCBjbGFzc2VzIGluIFdlYkNvcmUuCisgICAgICAgIAorICAgICAgICBU
aGlzIHBhdGNoIG1vdmVzIHRoZSBIaXRUZXN0UmVzdWx0IGFuZCBhbGwgZnVuY3Rpb25zIHRoYXQg
dXNlIGl0IG91dCBvZiBDb250ZXh0TWVudSBpbnRvIENvbnRleHRNZW51Q29udHJvbGxlci4KKyAg
ICAgICAgQWxsIG9mIHRoZSBmdW5jdGlvbnMgdGhhdCBkZWFsdCB3aXRoIHBvcHVsYXRpbmcgdGhl
IENvbnRleHRNZW51IGFyZSBub3cgaW4gQ29udGV4dE1lbnVDb250cm9sbGVyLCBhbmQgdGhpcwor
ICAgICAgICBhbGxvd2VkIHVzIHRvIGRlbGV0ZSB0aGUgQ29udGV4dE1lbnUgZmlsZSwgcHV0dGlu
ZyBhbGwgb2YgdGhlIGNyb3NzLXBsYXRmb3JtIGNvZGUgdGhhdCB1c2VkIHRvIGJlIGl0CisgICAg
ICAgIGluIENvbnRleHRNZW51Q29udHJvbGxlciwgYW5kIHRoZSByZXN0IG9mIHRoZSBjb2RlIGlz
IGluIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBmaWxlcy4KKworICAgICAgICBObyBjaGFuZ2UgaW4g
YmVoYXZpb3IsIG5vIG5ldyB0ZXN0cy4KKworICAgICAgICAqIEFuZHJvaWQubWs6IFJlbW92ZWQg
Q29udGV4dE1lbnUuY3BwLgorICAgICAgICAqIENNYWtlTGlzdHMudHh0OiBEaXR0by4KKyAgICAg
ICAgKiBHTlVtYWtlZmlsZS5hbTogRGl0dG8uCisgICAgICAgICogV2ViQ29yZS5neXBpOiBEaXR0
by4KKyAgICAgICAgKiBXZWJDb3JlLnBybzogRGl0dG8uCisgICAgICAgICogV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2o6IERpdHRvLgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajogRGl0dG8uCisKKyAgICAgICAgKiBwYWdlL0NvbnRleHRNZW51Q29udHJv
bGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0TWVudUNvbnRyb2xsZXI6OkNvbnRl
eHRNZW51Q29udHJvbGxlcik6IEluaXRpYWxpemVkIG1faGl0VGVzdFJlc3VsdCB0byBhbiBlbXB0
eSBIaXRUZXN0UmVzdWx0LgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVDb250cm9sbGVy
OjpoYW5kbGVDb250ZXh0TWVudUV2ZW50KTogQ2FsbCBwb3B1bGF0ZSBvbiB0aGUgQ29udGV4dE1l
bnVDb250cm9sbGVyIGluc3RlYWQKKyAgICAgICAgICAgIG9mIHRoZSBDb250ZXh0TWVudS4KKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51Q29udHJvbGxlcjo6Y3JlYXRlQ29udGV4dE1lbnUp
OiBGaXggc29tZSBpbmRpbmF0aW9uLCBhbmQgc3RvcmUgdGhlIEhpdFRlc3RSZXN1bHQgaW4gYSBt
ZW1iZXIKKyAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1l
bnVDb250cm9sbGVyOjpzaG93Q29udGV4dE1lbnUpOiBDYWxsIGFkZEluc3BlY3RFbGVtZW50SXRl
bSBvbiB0aGUgQ29udGV4dE1lbnVDb250cm9sbGVyLgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4
dE1lbnVDb250cm9sbGVyOjpjb250ZXh0TWVudUl0ZW1TZWxlY3RlZCk6IFVzZSBtX2hpdFRlc3RS
ZXN1bHQgd2hlbmV2ZXIgd2UgbmVlZCBhIEhpdFRlc3RSZXN1bHQuCisgICAgICAgIChXZWJDb3Jl
OjpDb250ZXh0TWVudUNvbnRyb2xsZXI6OmFwcGVuZEl0ZW0pOiBWYWxpZGF0ZXMgdGhlIGl0ZW0g
Zm9yIGl0cyBzdGF0ZSwgYW5kIHRoZW4gYXBwZW5kcyBpdCB0byB0aGUgcGFyZW50IG1lbnUuCisg
ICAgICAgICAgICBUaGlzIGFsbG93ZWQgdXMgdG8gbW92ZSBjaGVja09yRW5hYmxlSWZOZWVkZWQg
ZnJvbSBDb250ZXh0TWVudS4KKworICAgICAgICBUaGVzZSBmdW5jdGlvbnMgd2VyZSBhbGwgbW92
ZWQgZnJvbSBDb250ZXh0TWVudSwgYW5kIGNoYW5nZWQgc2xpZ2h0bHkgdG8gZml0IGluIENvbnRl
eHRNZW51Q29udHJvbGxlci4KKyAgICAgICAgQWxsIGNhbGxzIHRvIENvbnRleHRNZW51OjphcHBl
bmRJdGVtIHdlcmUgY2hhbmdlZCB0byBDb250ZXh0TWVudUNvbnRyb2xsZXI6OmFwcGVuZEl0ZW0s
IHdoaWNoIHRha2VzIGNhcmUKKyAgICAgICAgb2YgdmFsaWRhdGluZyB0aGUgbWVudS4KKyAgICAg
ICAgKFdlYkNvcmU6OnNlcGFyYXRvckl0ZW0pOiBNb3ZlZCBmcm9tIENvbnRleHRNZW51LgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVDb250cm9sbGVyOjpjcmVhdGVBbmRBcHBlbmRGb250
U3ViTWVudSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVDb250cm9sbGVy
OjpjcmVhdGVBbmRBcHBlbmRTcGVsbGluZ0FuZEdyYW1tYXJTdWJNZW51KTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNyZWF0ZUFuZEFwcGVuZFNwZWVj
aFN1Yk1lbnUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51Q29udHJvbGxl
cjo6Y3JlYXRlQW5kQXBwZW5kV3JpdGluZ0RpcmVjdGlvblN1Yk1lbnUpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRleHRNZW51Q29udHJvbGxlcjo6Y3JlYXRlQW5kQXBwZW5kVGV4dERp
cmVjdGlvblN1Yk1lbnUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51Q29u
dHJvbGxlcjo6Y3JlYXRlQW5kQXBwZW5kU3Vic3RpdHV0aW9uc1N1Yk1lbnUpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51Q29udHJvbGxlcjo6Y3JlYXRlQW5kQXBwZW5kVHJh
bnNmb3JtYXRpb25zU3ViTWVudSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6c2VsZWN0aW9u
Q29udGFpbnNQb3NzaWJsZVdvcmQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRN
ZW51Q29udHJvbGxlcjo6cG9wdWxhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
eHRNZW51Q29udHJvbGxlcjo6YWRkSW5zcGVjdEVsZW1lbnRJdGVtKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNoZWNrT3JFbmFibGVJZk5lZWRlZCk6
IERpdHRvLgorICAgICAgICAKKyAgICAgICAgKiBwYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5o
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVDb250cm9sbGVyOjpoaXRUZXN0UmVzdWx0
KTogUmV0dXJucyB0aGUgSGl0VGVzdFJlc3VsdCBvZiB0aGUgY3VycmVudCBDb250ZXh0TWVudS4K
KworICAgICAgICAqIHBsYXRmb3JtL0NvbnRleHRNZW51LmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9Db250ZXh0TWVudS5oOgorICAgICAgICAqIHBsYXRmb3JtL2VmbC9Db250ZXh0
TWVudUVmbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0TWVudTo6Q29udGV4dE1lbnUp
OiBSZW1vdmVkIG1faGl0VGVzdFJlc3VsdCBmcm9tIHRoZSBjb25zdHJ1Y3Rvci4KKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRleHRNZW51OjphcHBlbmRJdGVtKTogUmVtb3ZlZCB0aGUgY2FsbCB0byBj
aGVja09yRW5hYmxlSWZOZWVkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3RrL0NvbnRleHRNZW51
R3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51OjpDb250ZXh0TWVudSk6IFJl
bW92ZWQgbV9oaXRUZXN0UmVzdWx0IGZyb20gdGhlIGNvbnN0cnVjdG9yLgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGV4dE1lbnU6OmFwcGVuZEl0ZW0pOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9y
bS9oYWlrdS9Db250ZXh0TWVudUhhaWt1LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRN
ZW51OjpDb250ZXh0TWVudSk6IFJlbW92ZWQgbV9oaXRUZXN0UmVzdWx0IGZyb20gdGhlIGNvbnN0
cnVjdG9yLgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnU6OmFwcGVuZEl0ZW0pOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51OjppbnNlcnRJdGVtKTogRGl0dG8uCisg
ICAgICAgICogcGxhdGZvcm0vbWFjL0NvbnRleHRNZW51TWFjLm1tOgorICAgICAgICAoLVtXZWJD
b3JlTWVudVRhcmdldCB2YWxpZGF0ZU1lbnVJdGVtOl0pOiBDYWxscyBjaGVja09yRW5hYmxlSWZO
ZWVkZWQgb24gdGhlIGNvbnRyb2xsZXIgaW5zdGVhZCBvZgorICAgICAgICAgICAgdGhlIGNvbnRl
eHQgbWVudS4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51OjpDb250ZXh0TWVudSk6IFJl
bW92ZWQgbV9oaXRUZXN0UmVzdWx0IGZyb20gdGhlIGNvbnN0cnVjdG9yLgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGV4dE1lbnU6OmFwcGVuZEl0ZW0pOiBSZW1vdmVkIHRoZSBjYWxsIHRvIGNoZWNr
T3JFbmFibGVJZk5lZWRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51OjppbnNlcnRJ
dGVtKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vd2luL0NvbnRleHRNZW51V2luLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51OjpDb250ZXh0TWVudSk6IFJlbW92ZWQgbV9o
aXRUZXN0UmVzdWx0IGZyb20gdGhlIGNvbnN0cnVjdG9yLgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGV4dE1lbnU6Omluc2VydEl0ZW0pOiBSZW1vdmVkIHRoZSBjYWxsIHRvIGNoZWNrT3JFbmFibGVJ
Zk5lZWRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS93eC9Db250ZXh0TWVudVd4LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRleHRNZW51OjpDb250ZXh0TWVudSk6IFJlbW92ZWQgbV9oaXRUZXN0
UmVzdWx0IGZyb20gdGhlIGNvbnN0cnVjdG9yLgorICAgICAgICAoQ29udGV4dE1lbnU6OmFwcGVu
ZEl0ZW0pOiBEaXR0by4KKwogMjAxMC0xMi0wNyAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVp
bkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSm9obiBTdWxsaXZhbi4KSW5kZXg6
IFdlYkNvcmUvQW5kcm9pZC5tawo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0FuZHJvaWQubWsJKHJl
dmlzaW9uIDczNDY5KQorKysgV2ViQ29yZS9BbmRyb2lkLm1rCSh3b3JraW5nIGNvcHkpCkBAIC00
NTAsNyArNDUwLDYgQEAgTE9DQUxfU1JDX0ZJTEVTIDo9ICQoTE9DQUxfU1JDX0ZJTEVTKSBcCiAJ
XAogCXBsYXRmb3JtL0FyZW5hLmNwcCBcCiAJcGxhdGZvcm0vQ29udGVudFR5cGUuY3BwIFwKLQlw
bGF0Zm9ybS9Db250ZXh0TWVudS5jcHAgXAogCXBsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmNw
cCBcCiAJcGxhdGZvcm0vRGVwcmVjYXRlZFB0ckxpc3RJbXBsLmNwcCBcCiAJcGxhdGZvcm0vRHJh
Z0RhdGEuY3BwIFwKSW5kZXg6IFdlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gNzM0NjkpCisrKyBXZWJDb3JlL0NNYWtl
TGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMjcwLDcgKzEyNzAsNiBAQCBTRVQoV2ViQ29y
ZV9TT1VSQ0VTCiAKICAgICBwbGF0Zm9ybS9BcmVuYS5jcHAKICAgICBwbGF0Zm9ybS9Db250ZW50
VHlwZS5jcHAKLSAgICBwbGF0Zm9ybS9Db250ZXh0TWVudS5jcHAKICAgICBwbGF0Zm9ybS9Dcm9z
c1RocmVhZENvcGllci5jcHAKICAgICBwbGF0Zm9ybS9EZXByZWNhdGVkUHRyTGlzdEltcGwuY3Bw
CiAgICAgcGxhdGZvcm0vRHJhZ0RhdGEuY3BwCkluZGV4OiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFt
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDczNDY5KQor
KysgV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMjI1OCw3ICsyMjU4
LDYgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3BsYXRmb3JtL0F1dG9kcmFpbmVk
UG9vbC5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL0NvbnRlbnRUeXBlLmNwcCBcCiAJV2ViQ29yZS9w
bGF0Zm9ybS9Db250ZW50VHlwZS5oIFwKLQlXZWJDb3JlL3BsYXRmb3JtL0NvbnRleHRNZW51LmNw
cCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9Db250ZXh0TWVudS5oIFwKIAlXZWJDb3JlL3BsYXRmb3Jt
L0NvbnRleHRNZW51SXRlbS5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL0Nvb2tpZS5oIFwKSW5kZXg6
IFdlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmV4
cC5pbgkocmV2aXNpb24gNzM0NjkpCisrKyBXZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjUyLDEyICsxMjUyLDEyIEBAIF9fWk43V2ViQ29yZTE1Q29udGV4dE1lbnVJ
dGVtQzFFTlNfMTlDb24KIF9fWk43V2ViQ29yZTE1Q29udGV4dE1lbnVJdGVtQzFFUDEwTlNNZW51
SXRlbQogX19aTjdXZWJDb3JlMTVDb250ZXh0TWVudUl0ZW1EMUV2CiBfX1pON1dlYkNvcmUyMUNv
bnRleHRNZW51Q29udHJvbGxlcjE2Y2xlYXJDb250ZXh0TWVudUV2CitfX1pOSzdXZWJDb3JlMjFD
b250ZXh0TWVudUNvbnRyb2xsZXIyMWNoZWNrT3JFbmFibGVJZk5lZWRlZEVSTlNfMTVDb250ZXh0
TWVudUl0ZW1FCiBfX1pON1dlYkNvcmUyMUNvbnRleHRNZW51Q29udHJvbGxlcjIzY29udGV4dE1l
bnVJdGVtU2VsZWN0ZWRFUE5TXzE1Q29udGV4dE1lbnVJdGVtRQogX19aTjdXZWJDb3JlMjFjb250
ZXh0TWVudUl0ZW1WZWN0b3JFUDE0TlNNdXRhYmxlQXJyYXkKIF9fWk43V2ViQ29yZTIzcGxhdGZv
cm1NZW51RGVzY3JpcHRpb25FUk4zV1RGNlZlY3RvcklOU18xNUNvbnRleHRNZW51SXRlbUVMbTBF
RUUKIF9fWk43V2ViQ29yZTZDaHJvbWUxNXNob3dDb250ZXh0TWVudUV2CiBfX1pOSzdXZWJDb3Jl
MTFDb250ZXh0TWVudTE5cGxhdGZvcm1EZXNjcmlwdGlvbkV2Ci1fX1pOSzdXZWJDb3JlMTFDb250
ZXh0TWVudTIxY2hlY2tPckVuYWJsZUlmTmVlZGVkRVJOU18xNUNvbnRleHRNZW51SXRlbUUKIF9f
Wk5LN1dlYkNvcmUxNUNvbnRleHRNZW51SXRlbTE1cGxhdGZvcm1TdWJNZW51RXYKIF9fWk5LN1dl
YkNvcmUxNUNvbnRleHRNZW51SXRlbTR0eXBlRXYKIF9fWk5LN1dlYkNvcmUxNUNvbnRleHRNZW51
SXRlbTV0aXRsZUV2CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gNzM0NjkpCisrKyBXZWJDb3JlL1dlYkNvcmUu
Z3lwaQkod29ya2luZyBjb3B5KQpAQCAtMzQyMSw3ICszNDIxLDYgQEAKICAgICAgICAgICAgICdw
bGF0Zm9ybS9BdXRvZHJhaW5lZFBvb2wuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vQ29udGVu
dFR5cGUuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9Db250ZW50VHlwZS5oJywKLSAgICAg
ICAgICAgICdwbGF0Zm9ybS9Db250ZXh0TWVudS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L0NvbnRleHRNZW51LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL0NvbnRleHRNZW51SXRlbS5o
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9Db29raWUuaCcsCkluZGV4OiBXZWJDb3JlL1dlYkNv
cmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDczNDY5
KQorKysgV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtMTE1MSw3ICsxMTUx
LDYgQEAgU09VUkNFUyArPSBcCiAgICAgcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5jcHAgXAog
ICAgIHBsYXRmb3JtL3RleHQvSHlwaGVuYXRpb24uY3BwIFwKICAgICBwbGF0Zm9ybS9Db250ZW50
VHlwZS5jcHAgXAotICAgIHBsYXRmb3JtL0NvbnRleHRNZW51LmNwcCBcCiAgICAgcGxhdGZvcm0v
Q3Jvc3NUaHJlYWRDb3BpZXIuY3BwIFwKICAgICBwbGF0Zm9ybS9EZXByZWNhdGVkUHRyTGlzdElt
cGwuY3BwIFwKICAgICBwbGF0Zm9ybS9EcmFnRGF0YS5jcHAgXApJbmRleDogV2ViQ29yZS9XZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA3MzQ2OSkKKysrIFdlYkNvcmUvV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTI1MzE0LDEwICsyNTMx
NCw2IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XHBsYXRmb3JtXENvbnRleHRNZW51LmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQog
CQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cQ29udGV4dE1lbnUuaCIKIAkJCQk+CiAJCQk8
L0ZpbGU+CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
cmV2aXNpb24gNzM0NjkpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjgzOSw3ICsyODM5LDYgQEAKIAkJOTNCMkQ4MTYwRjk5
MjBEMjAwNkFFNkIyIC8qIFN1ZGRlblRlcm1pbmF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0IyRDgxNTBGOTkyMEQyMDA2QUU2QjIgLyogU3Vk
ZGVuVGVybWluYXRpb24uaCAqLzsgfTsKIAkJOTNCMkQ4MTgwRjk5MjBFRTAwNkFFNkIyIC8qIFN1
ZGRlblRlcm1pbmF0aW9uLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTNCMkQ4MTcwRjk5MjBFRTAwNkFFNkIyIC8qIFN1ZGRlblRlcm1pbmF0aW9uLm1t
ICovOyB9OwogCQk5M0I2QTBFNjBCMEJDQTVDMDBGNTAyN0EgLyogQ29udGV4dE1lbnUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQjZBMEU1MEIwQkNB
NUMwMEY1MDI3QSAvKiBDb250ZXh0TWVudS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07Ci0JCTkzQjZBMEU4MEIwQkNBNjcwMEY1MDI3QSAvKiBDb250ZXh0
TWVudS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
M0I2QTBFNzBCMEJDQTY3MDBGNTAyN0EgLyogQ29udGV4dE1lbnUuY3BwICovOyB9OwogCQk5M0I2
QTBFQTBCMEJDQTg0MDBGNTAyN0EgLyogQ29udGV4dE1lbnVNYWMubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0I2QTBFOTBCMEJDQTg0MDBGNTAyN0Eg
LyogQ29udGV4dE1lbnVNYWMubW0gKi87IH07CiAJCTkzQjcwRDYzMDlFQjBDN0MwMDlEODQ2OCAv
KiBKU0RPTUJpbmRpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTNCNzBENDcwOUVCMEM3QzAwOUQ4NDY4IC8qIEpTRE9NQmluZGluZy5jcHAgKi87
IH07CiAJCTkzQjcwRDY0MDlFQjBDN0MwMDlEODQ2OCAvKiBKU0RPTUJpbmRpbmcuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQjcwRDQ4MDlFQjBDN0Mw
MDlEODQ2OCAvKiBKU0RPTUJpbmRpbmcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwpAQCAtOTAwNyw3ICs5MDA2LDYgQEAKIAkJOTNCMkQ4MTUwRjk5MjBE
MjAwNkFFNkIyIC8qIFN1ZGRlblRlcm1pbmF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFN1ZGRlblRlcm1pbmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTkzQjJEODE3MEY5OTIwRUUwMDZBRTZCMiAvKiBTdWRkZW5UZXJtaW5hdGlvbi5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFN1ZGRlblRlcm1pbmF0aW9uLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0I2QTBFNTBCMEJDQTVDMDBGNTAyN0Eg
LyogQ29udGV4dE1lbnUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnRl
eHRNZW51Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTkzQjZBMEU3MEIwQkNBNjcw
MEY1MDI3QSAvKiBDb250ZXh0TWVudS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gQ29udGV4dE1lbnUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5
M0I2QTBFOTBCMEJDQTg0MDBGNTAyN0EgLyogQ29udGV4dE1lbnVNYWMubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQ29udGV4dE1lbnVNYWMubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzQjcwRDQ3MDlFQjBDN0MwMDlEODQ2OCAvKiBKU0RPTUJp
bmRpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRE9NQmlu
ZGluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzQjcwRDQ4MDlFQjBDN0Mw
MDlEODQ2OCAvKiBKU0RPTUJpbmRpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTRE9NQmluZGluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTc1NzQs
NyArMTc1NzIsNiBAQAogCQkJCUJDQzhDRkNBMDk4NkNEMjQwMDE0MEJGMiAvKiBDb2xvckRhdGEu
Z3BlcmYgKi8sCiAJCQkJNDFEMDE1QzkwRjRCNUM3MTAwNEE2NjJGIC8qIENvbnRlbnRUeXBlLmNw
cCAqLywKIAkJCQk0MUQwMTVDODBGNEI1QzcxMDA0QTY2MkYgLyogQ29udGVudFR5cGUuaCAqLywK
LQkJCQk5M0I2QTBFNzBCMEJDQTY3MDBGNTAyN0EgLyogQ29udGV4dE1lbnUuY3BwICovLAogCQkJ
CTkzQjZBMEU1MEIwQkNBNUMwMEY1MDI3QSAvKiBDb250ZXh0TWVudS5oICovLAogCQkJCTA2MDI3
Q0FDMEIxQ0JGQzAwMDg4NEIyRCAvKiBDb250ZXh0TWVudUl0ZW0uaCAqLywKIAkJCQlEOEI2MTUy
RTEwMzI0OTUxMDBDODU1NEEgLyogQ29va2llLmggKi8sCkBAIC0yMTk1Niw3ICsyMTk1Myw2IEBA
CiAJCQkJQTgxODcyMUYwOTc3RDNDMDAwNTgyNkQ5IC8qIENvbnRhaW5lck5vZGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQkM1RUI5ODAwRTgyMDcyNTAwQjI1OTY1IC8qIENvbnRlbnREYXRhLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTQxRDAxNUNCMEY0QjVDNzEwMDRBNjYyRiAvKiBDb250ZW50
VHlwZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk5M0I2QTBFODBCMEJDQTY3MDBGNTAyN0EgLyog
Q29udGV4dE1lbnUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDY1QUQ0RjYwQjBDMkVEQTAwNUEy
QjFEIC8qIENvbnRleHRNZW51Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwNjAy
N0NCMzBCMUNDMDNEMDA4ODRCMkQgLyogQ29udGV4dE1lbnVJdGVtTWFjLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJOTNCNkEwRUEwQjBCQ0E4NDAwRjUwMjdBIC8qIENvbnRleHRNZW51TWFjLm1tIGlu
IFNvdXJjZXMgKi8sCkluZGV4OiBXZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcAko
cmV2aXNpb24gNzM0NjkpCisrKyBXZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkNocm9tZS5oIgog
I2luY2x1ZGUgIkNvbnRleHRNZW51LmgiCiAjaW5jbHVkZSAiQ29udGV4dE1lbnVDbGllbnQuaCIK
KyNpbmNsdWRlICJDb250ZXh0TWVudUl0ZW0uaCIKICNpbmNsdWRlICJDb250ZXh0TWVudVByb3Zp
ZGVyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50
LmgiCkBAIC01MCw2ICs1MSw3IEBACiAjaW5jbHVkZSAiSGl0VGVzdFJlcXVlc3QuaCIKICNpbmNs
dWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgor
I2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKICNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCiAj
aW5jbHVkZSAiTmF2aWdhdGlvbkFjdGlvbi5oIgogI2luY2x1ZGUgIk5vZGUuaCIKQEAgLTYzLDYg
KzY1LDEwIEBACiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiV2luZG93RmVh
dHVyZXMuaCIKICNpbmNsdWRlICJtYXJrdXAuaCIKKyNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmlj
b2RlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXVEY7Cit1c2luZyBuYW1lc3BhY2UgVW5pY29kZTsK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC03MCw2ICs3Niw3IEBAIENvbnRleHRNZW51Q29u
dHJvbGxlcjo6Q29udGV4dE1lbnVDb250cm8KICAgICA6IG1fcGFnZShwYWdlKQogICAgICwgbV9j
bGllbnQoY2xpZW50KQogICAgICwgbV9jb250ZXh0TWVudSgwKQorICAgICwgbV9oaXRUZXN0UmVz
dWx0KEhpdFRlc3RSZXN1bHQoSW50UG9pbnQoKSkpCiB7CiAgICAgQVNTRVJUX0FSRyhwYWdlLCBw
YWdlKTsKICAgICBBU1NFUlRfQVJHKGNsaWVudCwgY2xpZW50KTsKQEAgLTkzLDcgKzEwMCw5IEBA
IHZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjpoYW5kbGVDb250ZXgKICAgICBtX2NvbnRleHRN
ZW51LnNldChjcmVhdGVDb250ZXh0TWVudShldmVudCkpOwogICAgIGlmICghbV9jb250ZXh0TWVu
dSkKICAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dE1lbnUtPnBvcHVsYXRlKCk7CisKKyAg
ICBwb3B1bGF0ZSgpOworCiAgICAgc2hvd0NvbnRleHRNZW51KGV2ZW50KTsKIH0KIApAQCAtMTEz
LDggKzEyMiw5IEBAIHZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjpzaG93Q29udGV4dE0KIAog
Q29udGV4dE1lbnUqIENvbnRleHRNZW51Q29udHJvbGxlcjo6Y3JlYXRlQ29udGV4dE1lbnUoRXZl
bnQqIGV2ZW50KQogewotICAgaWYgKCFldmVudC0+aXNNb3VzZUV2ZW50KCkpCisgICAgaWYgKCFl
dmVudC0+aXNNb3VzZUV2ZW50KCkpCiAgICAgICAgIHJldHVybiAwOworCiAgICAgTW91c2VFdmVu
dCogbW91c2VFdmVudCA9IHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVudCk7CiAgICAgSGl0
VGVzdFJlc3VsdCByZXN1bHQobW91c2VFdmVudC0+YWJzb2x1dGVMb2NhdGlvbigpKTsKIApAQCAt
MTIzLDE0ICsxMzMsMTcgQEAgQ29udGV4dE1lbnUqIENvbnRleHRNZW51Q29udHJvbGxlcjo6Y3Jl
YQogCiAgICAgaWYgKCFyZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCkpCiAgICAgICAgIHJldHVy
biAwOwotICAgIHJldHVybiBuZXcgQ29udGV4dE1lbnUocmVzdWx0KTsKKworICAgIG1faGl0VGVz
dFJlc3VsdCA9IHJlc3VsdDsKKworICAgIHJldHVybiBuZXcgQ29udGV4dE1lbnUoKTsKIH0KIAog
dm9pZCBDb250ZXh0TWVudUNvbnRyb2xsZXI6OnNob3dDb250ZXh0TWVudShFdmVudCogZXZlbnQp
CiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKICAgICBpZiAobV9wYWdlLT5pbnNwZWN0b3JDb250
cm9sbGVyKCktPmVuYWJsZWQoKSkKLSAgICAgICAgbV9jb250ZXh0TWVudS0+YWRkSW5zcGVjdEVs
ZW1lbnRJdGVtKCk7CisgICAgICAgIGFkZEluc3BlY3RFbGVtZW50SXRlbSgpOwogI2VuZGlmCiAg
ICAgUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gY3VzdG9tTWVudSA9IG1fY2xpZW50LT5nZXRDdXN0
b21NZW51RnJvbURlZmF1bHRJdGVtcyhtX2NvbnRleHRNZW51LmdldCgpKTsKICAgICBtX2NvbnRl
eHRNZW51LT5zZXRQbGF0Zm9ybURlc2NyaXB0aW9uKGN1c3RvbU1lbnUpOwpAQCAtMTYyLDU0ICsx
NzUsNTMgQEAgdm9pZCBDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNvbnRleHRNZW51SQogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgSGl0VGVzdFJlc3VsdCByZXN1bHQgPSBtX2NvbnRleHRN
ZW51LT5oaXRUZXN0UmVzdWx0KCk7Ci0gICAgRnJhbWUqIGZyYW1lID0gcmVzdWx0LmlubmVyTm9u
U2hhcmVkTm9kZSgpLT5kb2N1bWVudCgpLT5mcmFtZSgpOworICAgIEZyYW1lKiBmcmFtZSA9IG1f
aGl0VGVzdFJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsK
ICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm47CiAKICAgICBzd2l0Y2ggKGl0ZW0tPmFj
dGlvbigpKSB7CiAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdPcGVuTGlua0luTmV3V2luZG93
OgotICAgICAgICBvcGVuTmV3V2luZG93KHJlc3VsdC5hYnNvbHV0ZUxpbmtVUkwoKSwgZnJhbWUp
OworICAgICAgICBvcGVuTmV3V2luZG93KG1faGl0VGVzdFJlc3VsdC5hYnNvbHV0ZUxpbmtVUkwo
KSwgZnJhbWUpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0Rv
d25sb2FkTGlua1RvRGlzazoKICAgICAgICAgLy8gRklYTUU6IFNvbWUgZGF5IHdlIHNob3VsZCBi
ZSBhYmxlIHRvIGRvIHRoaXMgZnJvbSB3aXRoaW4gV2ViQ29yZS4KLSAgICAgICAgbV9jbGllbnQt
PmRvd25sb2FkVVJMKHJlc3VsdC5hYnNvbHV0ZUxpbmtVUkwoKSk7CisgICAgICAgIG1fY2xpZW50
LT5kb3dubG9hZFVSTChtX2hpdFRlc3RSZXN1bHQuYWJzb2x1dGVMaW5rVVJMKCkpOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0NvcHlMaW5rVG9DbGlwYm9hcmQ6
Ci0gICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+Y29weVVSTChyZXN1bHQuYWJzb2x1dGVMaW5rVVJM
KCksIHJlc3VsdC50ZXh0Q29udGVudCgpKTsKKyAgICAgICAgZnJhbWUtPmVkaXRvcigpLT5jb3B5
VVJMKG1faGl0VGVzdFJlc3VsdC5hYnNvbHV0ZUxpbmtVUkwoKSwgbV9oaXRUZXN0UmVzdWx0LnRl
eHRDb250ZW50KCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRh
Z09wZW5JbWFnZUluTmV3V2luZG93OgotICAgICAgICBvcGVuTmV3V2luZG93KHJlc3VsdC5hYnNv
bHV0ZUltYWdlVVJMKCksIGZyYW1lKTsKKyAgICAgICAgb3Blbk5ld1dpbmRvdyhtX2hpdFRlc3RS
ZXN1bHQuYWJzb2x1dGVJbWFnZVVSTCgpLCBmcmFtZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgQ29udGV4dE1lbnVJdGVtVGFnRG93bmxvYWRJbWFnZVRvRGlzazoKICAgICAgICAgLy8gRklY
TUU6IFNvbWUgZGF5IHdlIHNob3VsZCBiZSBhYmxlIHRvIGRvIHRoaXMgZnJvbSB3aXRoaW4gV2Vi
Q29yZS4KLSAgICAgICAgbV9jbGllbnQtPmRvd25sb2FkVVJMKHJlc3VsdC5hYnNvbHV0ZUltYWdl
VVJMKCkpOworICAgICAgICBtX2NsaWVudC0+ZG93bmxvYWRVUkwobV9oaXRUZXN0UmVzdWx0LmFi
c29sdXRlSW1hZ2VVUkwoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ29udGV4dE1lbnVJ
dGVtVGFnQ29weUltYWdlVG9DbGlwYm9hcmQ6CiAgICAgICAgIC8vIEZJWE1FOiBUaGUgUGFzdGVi
b2FyZCBjbGFzcyBpcyBub3Qgd3JpdHRlbiB5ZXQKICAgICAgICAgLy8gRm9yIG5vdywgY2FsbCBp
bnRvIHRoZSBjbGllbnQuIFRoaXMgaXMgdGVtcG9yYXJ5IQotICAgICAgICBmcmFtZS0+ZWRpdG9y
KCktPmNvcHlJbWFnZShyZXN1bHQpOworICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPmNvcHlJbWFn
ZShtX2hpdFRlc3RSZXN1bHQpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENvbnRleHRNZW51
SXRlbVRhZ09wZW5NZWRpYUluTmV3V2luZG93OgotICAgICAgICBvcGVuTmV3V2luZG93KHJlc3Vs
dC5hYnNvbHV0ZU1lZGlhVVJMKCksIGZyYW1lKTsKKyAgICAgICAgb3Blbk5ld1dpbmRvdyhtX2hp
dFRlc3RSZXN1bHQuYWJzb2x1dGVNZWRpYVVSTCgpLCBmcmFtZSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQ29weU1lZGlhTGlua1RvQ2xpcGJvYXJkOgotICAg
ICAgICBmcmFtZS0+ZWRpdG9yKCktPmNvcHlVUkwocmVzdWx0LmFic29sdXRlTWVkaWFVUkwoKSwg
cmVzdWx0LnRleHRDb250ZW50KCkpOworICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPmNvcHlVUkwo
bV9oaXRUZXN0UmVzdWx0LmFic29sdXRlTWVkaWFVUkwoKSwgbV9oaXRUZXN0UmVzdWx0LnRleHRD
b250ZW50KCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1Rv
Z2dsZU1lZGlhQ29udHJvbHM6Ci0gICAgICAgIHJlc3VsdC50b2dnbGVNZWRpYUNvbnRyb2xzRGlz
cGxheSgpOworICAgICAgICBtX2hpdFRlc3RSZXN1bHQudG9nZ2xlTWVkaWFDb250cm9sc0Rpc3Bs
YXkoKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdUb2dnbGVN
ZWRpYUxvb3A6Ci0gICAgICAgIHJlc3VsdC50b2dnbGVNZWRpYUxvb3BQbGF5YmFjaygpOworICAg
ICAgICBtX2hpdFRlc3RSZXN1bHQudG9nZ2xlTWVkaWFMb29wUGxheWJhY2soKTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdFbnRlclZpZGVvRnVsbHNjcmVlbjoK
LSAgICAgICAgcmVzdWx0LmVudGVyRnVsbHNjcmVlbkZvclZpZGVvKCk7CisgICAgICAgIG1faGl0
VGVzdFJlc3VsdC5lbnRlckZ1bGxzY3JlZW5Gb3JWaWRlbygpOwogICAgICAgICBicmVhazsKICAg
ICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ01lZGlhUGxheVBhdXNlOgotICAgICAgICByZXN1bHQu
dG9nZ2xlTWVkaWFQbGF5U3RhdGUoKTsKKyAgICAgICAgbV9oaXRUZXN0UmVzdWx0LnRvZ2dsZU1l
ZGlhUGxheVN0YXRlKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ29udGV4dE1lbnVJdGVt
VGFnTWVkaWFNdXRlOgotICAgICAgICByZXN1bHQudG9nZ2xlTWVkaWFNdXRlU3RhdGUoKTsKKyAg
ICAgICAgbV9oaXRUZXN0UmVzdWx0LnRvZ2dsZU1lZGlhTXV0ZVN0YXRlKCk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnT3BlbkZyYW1lSW5OZXdXaW5kb3c6IHsK
ICAgICAgICAgRG9jdW1lbnRMb2FkZXIqIGxvYWRlciA9IGZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1l
bnRMb2FkZXIoKTsKQEAgLTI3MywxMCArMjg1LDEwIEBAIHZvaWQgQ29udGV4dE1lbnVDb250cm9s
bGVyOjpjb250ZXh0TWVudUkKICAgICAgICAgbV9jbGllbnQtPmxvb2tVcEluRGljdGlvbmFyeShm
cmFtZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnT3Blbkxp
bms6Ci0gICAgICAgIGlmIChGcmFtZSogdGFyZ2V0RnJhbWUgPSByZXN1bHQudGFyZ2V0RnJhbWUo
KSkKLSAgICAgICAgICAgIHRhcmdldEZyYW1lLT5sb2FkZXIoKS0+bG9hZEZyYW1lUmVxdWVzdChG
cmFtZUxvYWRSZXF1ZXN0KGZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLCBSZXNv
dXJjZVJlcXVlc3QocmVzdWx0LmFic29sdXRlTGlua1VSTCgpLCBmcmFtZS0+bG9hZGVyKCktPm91
dGdvaW5nUmVmZXJyZXIoKSkpLCBmYWxzZSwgZmFsc2UsIDAsIDAsIFNlbmRSZWZlcnJlcik7Cisg
ICAgICAgIGlmIChGcmFtZSogdGFyZ2V0RnJhbWUgPSBtX2hpdFRlc3RSZXN1bHQudGFyZ2V0RnJh
bWUoKSkKKyAgICAgICAgICAgIHRhcmdldEZyYW1lLT5sb2FkZXIoKS0+bG9hZEZyYW1lUmVxdWVz
dChGcmFtZUxvYWRSZXF1ZXN0KGZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLCBS
ZXNvdXJjZVJlcXVlc3QobV9oaXRUZXN0UmVzdWx0LmFic29sdXRlTGlua1VSTCgpLCBmcmFtZS0+
bG9hZGVyKCktPm91dGdvaW5nUmVmZXJyZXIoKSkpLCBmYWxzZSwgZmFsc2UsIDAsIDAsIFNlbmRS
ZWZlcnJlcik7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG9wZW5OZXdXaW5kb3cocmVzdWx0
LmFic29sdXRlTGlua1VSTCgpLCBmcmFtZSk7CisgICAgICAgICAgICBvcGVuTmV3V2luZG93KG1f
aGl0VGVzdFJlc3VsdC5hYnNvbHV0ZUxpbmtVUkwoKSwgZnJhbWUpOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0JvbGQ6CiAgICAgICAgIGZyYW1lLT5lZGl0b3Io
KS0+Y29tbWFuZCgiVG9nZ2xlQm9sZCIpLmV4ZWN1dGUoKTsKQEAgLTI5NSw3ICszMDcsNyBAQCB2
b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6Y29udGV4dE1lbnVJCiAgICAgICAgIEV4Y2VwdGlv
bkNvZGUgZWM7CiAgICAgICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZSA9IGZyYW1lLT5z
ZWxlY3Rpb24oKS0+dG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICAgICAgaWYgKCFzZWxlY3RlZFJh
bmdlIHx8IHNlbGVjdGVkUmFuZ2UtPmNvbGxhcHNlZChlYykpIHsKLSAgICAgICAgICAgIERvY3Vt
ZW50KiBkb2N1bWVudCA9IHJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKS0+ZG9jdW1lbnQoKTsK
KyAgICAgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1faGl0VGVzdFJlc3VsdC5pbm5lck5v
blNoYXJlZE5vZGUoKS0+ZG9jdW1lbnQoKTsKICAgICAgICAgICAgIHNlbGVjdGVkUmFuZ2UgPSBk
b2N1bWVudC0+Y3JlYXRlUmFuZ2UoKTsKICAgICAgICAgICAgIHNlbGVjdGVkUmFuZ2UtPnNlbGVj
dE5vZGUoZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpLCBlYyk7CiAgICAgICAgIH0KQEAgLTM4
NSwxMyArMzk3LDEzIEBAIHZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjpjb250ZXh0TWVudUkK
ICAgICAgICAgZnJhbWUtPmVkaXRvcigpLT50b2dnbGVBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rp
b24oKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdDaGFuZ2VC
YWNrOgotICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPmNoYW5nZUJhY2tUb1JlcGxhY2VkU3RyaW5n
KHJlc3VsdC5yZXBsYWNlZFN0cmluZygpKTsKKyAgICAgICAgZnJhbWUtPmVkaXRvcigpLT5jaGFu
Z2VCYWNrVG9SZXBsYWNlZFN0cmluZyhtX2hpdFRlc3RSZXN1bHQucmVwbGFjZWRTdHJpbmcoKSk7
CiAgICAgICAgIGJyZWFrOwogI2VuZGlmCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKICAgICBjYXNl
IENvbnRleHRNZW51SXRlbVRhZ0luc3BlY3RFbGVtZW50OgogICAgICAgICBpZiAoUGFnZSogcGFn
ZSA9IGZyYW1lLT5wYWdlKCkpCi0gICAgICAgICAgICBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVy
KCktPmluc3BlY3QocmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpKTsKKyAgICAgICAgICAgIHBh
Z2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+aW5zcGVjdChtX2hpdFRlc3RSZXN1bHQuaW5uZXJO
b25TaGFyZWROb2RlKCkpOwogICAgICAgICBicmVhazsKICNlbmRpZgogICAgIGRlZmF1bHQ6CkBA
IC0zOTksNiArNDExLDgyOSBAQCB2b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6Y29udGV4dE1l
bnVJCiAgICAgfQogfQogCit2b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6YXBwZW5kSXRlbShD
b250ZXh0TWVudUl0ZW0mIG1lbnVJdGVtLCBDb250ZXh0TWVudSogcGFyZW50TWVudSkKK3sKKyAg
ICBjaGVja09yRW5hYmxlSWZOZWVkZWQobWVudUl0ZW0pOworICAgIGlmIChwYXJlbnRNZW51KQor
ICAgICAgICBwYXJlbnRNZW51LT5hcHBlbmRJdGVtKG1lbnVJdGVtKTsKK30KKworc3RhdGljIFBh
c3NPd25QdHI8Q29udGV4dE1lbnVJdGVtPiBzZXBhcmF0b3JJdGVtKCkKK3sKKyAgICByZXR1cm4g
bmV3IENvbnRleHRNZW51SXRlbShTZXBhcmF0b3JUeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdOb0Fj
dGlvbiwgU3RyaW5nKCkpOworfQorCit2b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6Y3JlYXRl
QW5kQXBwZW5kRm9udFN1Yk1lbnUoQ29udGV4dE1lbnVJdGVtJiBmb250TWVudUl0ZW0pCit7Cisg
ICAgQ29udGV4dE1lbnUgZm9udE1lbnU7CisKKyNpZiBQTEFURk9STShNQUMpCisgICAgQ29udGV4
dE1lbnVJdGVtIHNob3dGb250cyhBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTaG93Rm9u
dHMsIGNvbnRleHRNZW51SXRlbVRhZ1Nob3dGb250cygpKTsKKyNlbmRpZgorICAgIENvbnRleHRN
ZW51SXRlbSBib2xkKENoZWNrYWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0JvbGQs
IGNvbnRleHRNZW51SXRlbVRhZ0JvbGQoKSk7CisgICAgQ29udGV4dE1lbnVJdGVtIGl0YWxpYyhD
aGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdJdGFsaWMsIGNvbnRleHRNZW51
SXRlbVRhZ0l0YWxpYygpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gdW5kZXJsaW5lKENoZWNrYWJs
ZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1VuZGVybGluZSwgY29udGV4dE1lbnVJdGVt
VGFnVW5kZXJsaW5lKCkpOworICAgIENvbnRleHRNZW51SXRlbSBvdXRsaW5lKEFjdGlvblR5cGUs
IENvbnRleHRNZW51SXRlbVRhZ091dGxpbmUsIGNvbnRleHRNZW51SXRlbVRhZ091dGxpbmUoKSk7
CisjaWYgUExBVEZPUk0oTUFDKQorICAgIENvbnRleHRNZW51SXRlbSBzdHlsZXMoQWN0aW9uVHlw
ZSwgQ29udGV4dE1lbnVJdGVtVGFnU3R5bGVzLCBjb250ZXh0TWVudUl0ZW1UYWdTdHlsZXMoKSk7
CisgICAgQ29udGV4dE1lbnVJdGVtIHNob3dDb2xvcnMoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJ
dGVtVGFnU2hvd0NvbG9ycywgY29udGV4dE1lbnVJdGVtVGFnU2hvd0NvbG9ycygpKTsKKyNlbmRp
ZgorCisjaWYgUExBVEZPUk0oTUFDKQorICAgIGFwcGVuZEl0ZW0oc2hvd0ZvbnRzLCAmZm9udE1l
bnUpOworI2VuZGlmCisgICAgYXBwZW5kSXRlbShib2xkLCAmZm9udE1lbnUpOworICAgIGFwcGVu
ZEl0ZW0oaXRhbGljLCAmZm9udE1lbnUpOworICAgIGFwcGVuZEl0ZW0odW5kZXJsaW5lLCAmZm9u
dE1lbnUpOworICAgIGFwcGVuZEl0ZW0ob3V0bGluZSwgJmZvbnRNZW51KTsKKyNpZiBQTEFURk9S
TShNQUMpCisgICAgYXBwZW5kSXRlbShzdHlsZXMsICZmb250TWVudSk7CisgICAgYXBwZW5kSXRl
bSgqc2VwYXJhdG9ySXRlbSgpLCAmZm9udE1lbnUpOworICAgIGFwcGVuZEl0ZW0oc2hvd0NvbG9y
cywgJmZvbnRNZW51KTsKKyNlbmRpZgorCisgICAgZm9udE1lbnVJdGVtLnNldFN1Yk1lbnUoJmZv
bnRNZW51KTsKK30KKworI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKQorCisjaWYgIVBM
QVRGT1JNKEdUSykKKwordm9pZCBDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNyZWF0ZUFuZEFwcGVu
ZFNwZWxsaW5nQW5kR3JhbW1hclN1Yk1lbnUoQ29udGV4dE1lbnVJdGVtJiBzcGVsbGluZ0FuZEdy
YW1tYXJNZW51SXRlbSkKK3sKKyAgICBDb250ZXh0TWVudSBzcGVsbGluZ0FuZEdyYW1tYXJNZW51
OworCisgICAgQ29udGV4dE1lbnVJdGVtIHNob3dTcGVsbGluZ1BhbmVsKEFjdGlvblR5cGUsIENv
bnRleHRNZW51SXRlbVRhZ1Nob3dTcGVsbGluZ1BhbmVsLCAKKyAgICAgICAgY29udGV4dE1lbnVJ
dGVtVGFnU2hvd1NwZWxsaW5nUGFuZWwodHJ1ZSkpOworICAgIENvbnRleHRNZW51SXRlbSBjaGVj
a1NwZWxsaW5nKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0NoZWNrU3BlbGxpbmcsIAor
ICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdDaGVja1NwZWxsaW5nKCkpOworICAgIENvbnRleHRN
ZW51SXRlbSBjaGVja0FzWW91VHlwZShDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0
ZW1UYWdDaGVja1NwZWxsaW5nV2hpbGVUeXBpbmcsIAorICAgICAgICBjb250ZXh0TWVudUl0ZW1U
YWdDaGVja1NwZWxsaW5nV2hpbGVUeXBpbmcoKSk7CisgICAgQ29udGV4dE1lbnVJdGVtIGdyYW1t
YXJXaXRoU3BlbGxpbmcoQ2hlY2thYmxlQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnQ2hl
Y2tHcmFtbWFyV2l0aFNwZWxsaW5nLCAKKyAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnQ2hlY2tH
cmFtbWFyV2l0aFNwZWxsaW5nKCkpOworI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJ
TERJTkdfT05fTEVPUEFSRCkKKyAgICBDb250ZXh0TWVudUl0ZW0gY29ycmVjdFNwZWxsaW5nKENo
ZWNrYWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0NvcnJlY3RTcGVsbGluZ0F1dG9t
YXRpY2FsbHksIAorICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdDb3JyZWN0U3BlbGxpbmdBdXRv
bWF0aWNhbGx5KCkpOworI2VuZGlmCisKKyAgICBhcHBlbmRJdGVtKHNob3dTcGVsbGluZ1BhbmVs
LCAmc3BlbGxpbmdBbmRHcmFtbWFyTWVudSk7CisgICAgYXBwZW5kSXRlbShjaGVja1NwZWxsaW5n
LCAmc3BlbGxpbmdBbmRHcmFtbWFyTWVudSk7CisjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5l
ZChCVUlMRElOR19PTl9MRU9QQVJEKQorICAgIGFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSwg
JnNwZWxsaW5nQW5kR3JhbW1hck1lbnUpOworI2VuZGlmCisgICAgYXBwZW5kSXRlbShjaGVja0Fz
WW91VHlwZSwgJnNwZWxsaW5nQW5kR3JhbW1hck1lbnUpOworICAgIGFwcGVuZEl0ZW0oZ3JhbW1h
cldpdGhTcGVsbGluZywgJnNwZWxsaW5nQW5kR3JhbW1hck1lbnUpOworI2lmIFBMQVRGT1JNKE1B
QykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKKyAgICBhcHBlbmRJdGVtKGNvcnJl
Y3RTcGVsbGluZywgJnNwZWxsaW5nQW5kR3JhbW1hck1lbnUpOworI2VuZGlmCisKKyAgICBzcGVs
bGluZ0FuZEdyYW1tYXJNZW51SXRlbS5zZXRTdWJNZW51KCZzcGVsbGluZ0FuZEdyYW1tYXJNZW51
KTsKK30KKworI2VuZGlmIC8vICFQTEFURk9STShHVEspCisKKyNlbHNlCisKK3ZvaWQgQ29udGV4
dE1lbnVDb250cm9sbGVyOjpjcmVhdGVBbmRBcHBlbmRTcGVsbGluZ0FuZEdyYW1tYXJTdWJNZW51
KENvbnRleHRNZW51SXRlbSYgc3BlbGxpbmdBbmRHcmFtbWFyTWVudUl0ZW0pCit7CisgICAgQ29u
dGV4dE1lbnUgc3BlbGxpbmdNZW51OworCisgICAgQ29udGV4dE1lbnVJdGVtIHNob3dTcGVsbGlu
Z1BhbmVsKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1Nob3dTcGVsbGluZ1BhbmVsLCAK
KyAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnU2hvd1NwZWxsaW5nUGFuZWwodHJ1ZSkpOworICAg
IENvbnRleHRNZW51SXRlbSBjaGVja1NwZWxsaW5nKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRl
bVRhZ0NoZWNrU3BlbGxpbmcsIAorICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdDaGVja1NwZWxs
aW5nKCkpOworICAgIENvbnRleHRNZW51SXRlbSBjaGVja0FzWW91VHlwZShDaGVja2FibGVBY3Rp
b25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdDaGVja1NwZWxsaW5nV2hpbGVUeXBpbmcsIAorICAg
ICAgICBjb250ZXh0TWVudUl0ZW1UYWdDaGVja1NwZWxsaW5nV2hpbGVUeXBpbmcoKSk7CisKKyAg
ICBhcHBlbmRJdGVtKHNob3dTcGVsbGluZ1BhbmVsLCAmc3BlbGxpbmdNZW51KTsKKyAgICBhcHBl
bmRJdGVtKGNoZWNrU3BlbGxpbmcsICZzcGVsbGluZ01lbnUpOworICAgIGFwcGVuZEl0ZW0oY2hl
Y2tBc1lvdVR5cGUsICZzcGVsbGluZ01lbnUpOworCisgICAgc3BlbGxpbmdNZW51SXRlbS5zZXRT
dWJNZW51KCZzcGVsbGluZ01lbnUpOworfQorCisjZW5kaWYKKworI2lmIFBMQVRGT1JNKE1BQykK
Kwordm9pZCBDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNyZWF0ZUFuZEFwcGVuZFNwZWVjaFN1Yk1l
bnUoQ29udGV4dE1lbnVJdGVtJiBzcGVlY2hNZW51SXRlbSkKK3sKKyAgICBDb250ZXh0TWVudSBz
cGVlY2hNZW51OworCisgICAgQ29udGV4dE1lbnVJdGVtIHN0YXJ0KEFjdGlvblR5cGUsIENvbnRl
eHRNZW51SXRlbVRhZ1N0YXJ0U3BlYWtpbmcsIGNvbnRleHRNZW51SXRlbVRhZ1N0YXJ0U3BlYWtp
bmcoKSk7CisgICAgQ29udGV4dE1lbnVJdGVtIHN0b3AoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJ
dGVtVGFnU3RvcFNwZWFraW5nLCBjb250ZXh0TWVudUl0ZW1UYWdTdG9wU3BlYWtpbmcoKSk7CisK
KyAgICBhcHBlbmRJdGVtKHN0YXJ0LCAmc3BlZWNoTWVudSk7CisgICAgYXBwZW5kSXRlbShzdG9w
LCAmc3BlZWNoTWVudSk7CisKKyAgICBzcGVlY2hNZW51SXRlbS5zZXRTdWJNZW51KCZzcGVlY2hN
ZW51KTsKK30KKworI2VuZGlmCisgCisjaWYgIVBMQVRGT1JNKEdUSykKKwordm9pZCBDb250ZXh0
TWVudUNvbnRyb2xsZXI6OmNyZWF0ZUFuZEFwcGVuZFdyaXRpbmdEaXJlY3Rpb25TdWJNZW51KENv
bnRleHRNZW51SXRlbSYgd3JpdGluZ0RpcmVjdGlvbk1lbnVJdGVtKQoreworICAgIENvbnRleHRN
ZW51IHdyaXRpbmdEaXJlY3Rpb25NZW51OworCisgICAgQ29udGV4dE1lbnVJdGVtIGRlZmF1bHRJ
dGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0RlZmF1bHREaXJlY3Rpb24sIAorICAg
ICAgICBjb250ZXh0TWVudUl0ZW1UYWdEZWZhdWx0RGlyZWN0aW9uKCkpOworICAgIENvbnRleHRN
ZW51SXRlbSBsdHIoQ2hlY2thYmxlQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnTGVmdFRv
UmlnaHQsIGNvbnRleHRNZW51SXRlbVRhZ0xlZnRUb1JpZ2h0KCkpOworICAgIENvbnRleHRNZW51
SXRlbSBydGwoQ2hlY2thYmxlQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnUmlnaHRUb0xl
ZnQsIGNvbnRleHRNZW51SXRlbVRhZ1JpZ2h0VG9MZWZ0KCkpOworCisgICAgYXBwZW5kSXRlbShk
ZWZhdWx0SXRlbSwgJndyaXRpbmdEaXJlY3Rpb25NZW51KTsKKyAgICBhcHBlbmRJdGVtKGx0ciwg
JndyaXRpbmdEaXJlY3Rpb25NZW51KTsKKyAgICBhcHBlbmRJdGVtKHJ0bCwgJndyaXRpbmdEaXJl
Y3Rpb25NZW51KTsKKworICAgIHdyaXRpbmdEaXJlY3Rpb25NZW51SXRlbS5zZXRTdWJNZW51KCZ3
cml0aW5nRGlyZWN0aW9uTWVudSk7Cit9CisKK3ZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjpj
cmVhdGVBbmRBcHBlbmRUZXh0RGlyZWN0aW9uU3ViTWVudShDb250ZXh0TWVudUl0ZW0mIHRleHRE
aXJlY3Rpb25NZW51SXRlbSkKK3sKKyAgICBDb250ZXh0TWVudSB0ZXh0RGlyZWN0aW9uTWVudTsK
KworICAgIENvbnRleHRNZW51SXRlbSBkZWZhdWx0SXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVu
dUl0ZW1UYWdUZXh0RGlyZWN0aW9uRGVmYXVsdCwgY29udGV4dE1lbnVJdGVtVGFnRGVmYXVsdERp
cmVjdGlvbigpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gbHRyKENoZWNrYWJsZUFjdGlvblR5cGUs
IENvbnRleHRNZW51SXRlbVRhZ1RleHREaXJlY3Rpb25MZWZ0VG9SaWdodCwgY29udGV4dE1lbnVJ
dGVtVGFnTGVmdFRvUmlnaHQoKSk7CisgICAgQ29udGV4dE1lbnVJdGVtIHJ0bChDaGVja2FibGVB
Y3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdUZXh0RGlyZWN0aW9uUmlnaHRUb0xlZnQsIGNv
bnRleHRNZW51SXRlbVRhZ1JpZ2h0VG9MZWZ0KCkpOworCisgICAgYXBwZW5kSXRlbShkZWZhdWx0
SXRlbSwgJnRleHREaXJlY3Rpb25NZW51KTsKKyAgICBhcHBlbmRJdGVtKGx0ciwgJnRleHREaXJl
Y3Rpb25NZW51KTsKKyAgICBhcHBlbmRJdGVtKHJ0bCwgJnRleHREaXJlY3Rpb25NZW51KTsKKwor
ICAgIHRleHREaXJlY3Rpb25NZW51SXRlbS5zZXRTdWJNZW51KCZ0ZXh0RGlyZWN0aW9uTWVudSk7
Cit9CisKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19P
Tl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKKwordm9pZCBDb250ZXh0
TWVudUNvbnRyb2xsZXI6OmNyZWF0ZUFuZEFwcGVuZFN1YnN0aXR1dGlvbnNTdWJNZW51KENvbnRl
eHRNZW51SXRlbSYgc3Vic3RpdHV0aW9uc01lbnVJdGVtKQoreworICAgIENvbnRleHRNZW51IHN1
YnN0aXR1dGlvbnNNZW51OworCisgICAgQ29udGV4dE1lbnVJdGVtIHNob3dTdWJzdGl0dXRpb25z
KEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1Nob3dTdWJzdGl0dXRpb25zLCBjb250ZXh0
TWVudUl0ZW1UYWdTaG93U3Vic3RpdHV0aW9ucyh0cnVlKSk7CisgICAgQ29udGV4dE1lbnVJdGVt
IHNtYXJ0Q29weVBhc3RlKENoZWNrYWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1Nt
YXJ0Q29weVBhc3RlLCBjb250ZXh0TWVudUl0ZW1UYWdTbWFydENvcHlQYXN0ZSgpKTsKKyAgICBD
b250ZXh0TWVudUl0ZW0gc21hcnRRdW90ZXMoQ2hlY2thYmxlQWN0aW9uVHlwZSwgQ29udGV4dE1l
bnVJdGVtVGFnU21hcnRRdW90ZXMsIGNvbnRleHRNZW51SXRlbVRhZ1NtYXJ0UXVvdGVzKCkpOwor
ICAgIENvbnRleHRNZW51SXRlbSBzbWFydERhc2hlcyhDaGVja2FibGVBY3Rpb25UeXBlLCBDb250
ZXh0TWVudUl0ZW1UYWdTbWFydERhc2hlcywgY29udGV4dE1lbnVJdGVtVGFnU21hcnREYXNoZXMo
KSk7CisgICAgQ29udGV4dE1lbnVJdGVtIHNtYXJ0TGlua3MoQ2hlY2thYmxlQWN0aW9uVHlwZSwg
Q29udGV4dE1lbnVJdGVtVGFnU21hcnRMaW5rcywgY29udGV4dE1lbnVJdGVtVGFnU21hcnRMaW5r
cygpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gdGV4dFJlcGxhY2VtZW50KENoZWNrYWJsZUFjdGlv
blR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1RleHRSZXBsYWNlbWVudCwgY29udGV4dE1lbnVJdGVt
VGFnVGV4dFJlcGxhY2VtZW50KCkpOworCisgICAgYXBwZW5kSXRlbShzaG93U3Vic3RpdHV0aW9u
cywgJnN1YnN0aXR1dGlvbnNNZW51KTsKKyAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCks
ICZzdWJzdGl0dXRpb25zTWVudSk7CisgICAgYXBwZW5kSXRlbShzbWFydENvcHlQYXN0ZSwgJnN1
YnN0aXR1dGlvbnNNZW51KTsKKyAgICBhcHBlbmRJdGVtKHNtYXJ0UXVvdGVzLCAmc3Vic3RpdHV0
aW9uc01lbnUpOworICAgIGFwcGVuZEl0ZW0oc21hcnREYXNoZXMsICZzdWJzdGl0dXRpb25zTWVu
dSk7CisgICAgYXBwZW5kSXRlbShzbWFydExpbmtzLCAmc3Vic3RpdHV0aW9uc01lbnUpOworICAg
IGFwcGVuZEl0ZW0odGV4dFJlcGxhY2VtZW50LCAmc3Vic3RpdHV0aW9uc01lbnUpOworCisgICAg
c3Vic3RpdHV0aW9uc01lbnVJdGVtLnNldFN1Yk1lbnUoJnN1YnN0aXR1dGlvbnNNZW51KTsKK30K
Kwordm9pZCBDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNyZWF0ZUFuZEFwcGVuZFRyYW5zZm9ybWF0
aW9uc1N1Yk1lbnUoQ29udGV4dE1lbnVJdGVtJiB0cmFuc2Zvcm1hdGlvbnNNZW51SXRlbSkKK3sK
KyAgICBDb250ZXh0TWVudSB0cmFuc2Zvcm1hdGlvbnNNZW51OworCisgICAgQ29udGV4dE1lbnVJ
dGVtIG1ha2VVcHBlckNhc2UoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnTWFrZVVwcGVy
Q2FzZSwgY29udGV4dE1lbnVJdGVtVGFnTWFrZVVwcGVyQ2FzZSgpKTsKKyAgICBDb250ZXh0TWVu
dUl0ZW0gbWFrZUxvd2VyQ2FzZShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdNYWtlTG93
ZXJDYXNlLCBjb250ZXh0TWVudUl0ZW1UYWdNYWtlTG93ZXJDYXNlKCkpOworICAgIENvbnRleHRN
ZW51SXRlbSBjYXBpdGFsaXplKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0NhcGl0YWxp
emUsIGNvbnRleHRNZW51SXRlbVRhZ0NhcGl0YWxpemUoKSk7CisKKyAgICBhcHBlbmRJdGVtKG1h
a2VVcHBlckNhc2UsICZ0cmFuc2Zvcm1hdGlvbnNNZW51KTsKKyAgICBhcHBlbmRJdGVtKG1ha2VM
b3dlckNhc2UsICZ0cmFuc2Zvcm1hdGlvbnNNZW51KTsKKyAgICBhcHBlbmRJdGVtKGNhcGl0YWxp
emUsICZ0cmFuc2Zvcm1hdGlvbnNNZW51KTsKKworICAgIHRyYW5zZm9ybWF0aW9uc01lbnVJdGVt
LnNldFN1Yk1lbnUoJnRyYW5zZm9ybWF0aW9uc01lbnUpOworfQorCisjZW5kaWYKKworc3RhdGlj
IGJvb2wgc2VsZWN0aW9uQ29udGFpbnNQb3NzaWJsZVdvcmQoRnJhbWUqIGZyYW1lKQoreworICAg
IC8vIEN1cnJlbnQgYWxnb3JpdGhtOiBsb29rIGZvciBhIGNoYXJhY3RlciB0aGF0J3Mgbm90IGp1
c3QgYSBzZXBhcmF0b3IuCisgICAgZm9yIChUZXh0SXRlcmF0b3IgaXQoZnJhbWUtPnNlbGVjdGlv
bigpLT50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsgIWl0LmF0RW5kKCk7IGl0LmFkdmFuY2Uo
KSkgeworICAgICAgICBpbnQgbGVuZ3RoID0gaXQubGVuZ3RoKCk7CisgICAgICAgIGNvbnN0IFVD
aGFyKiBjaGFyYWN0ZXJzID0gaXQuY2hhcmFjdGVycygpOworICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IGxlbmd0aDsgKytpKQorICAgICAgICAgICAgaWYgKCEoY2F0ZWdvcnkoY2hhcmFjdGVy
c1tpXSkgJiAoU2VwYXJhdG9yX1NwYWNlIHwgU2VwYXJhdG9yX0xpbmUgfCBTZXBhcmF0b3JfUGFy
YWdyYXBoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVy
biBmYWxzZTsKK30KKwordm9pZCBDb250ZXh0TWVudUNvbnRyb2xsZXI6OnBvcHVsYXRlKCkKK3sK
KyAgICBDb250ZXh0TWVudUl0ZW0gT3BlbkxpbmtJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51
SXRlbVRhZ09wZW5MaW5rLCBjb250ZXh0TWVudUl0ZW1UYWdPcGVuTGluaygpKTsKKyAgICBDb250
ZXh0TWVudUl0ZW0gT3BlbkxpbmtJbk5ld1dpbmRvd0l0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1l
bnVJdGVtVGFnT3BlbkxpbmtJbk5ld1dpbmRvdywgCisgICAgICAgIGNvbnRleHRNZW51SXRlbVRh
Z09wZW5MaW5rSW5OZXdXaW5kb3coKSk7CisgICAgQ29udGV4dE1lbnVJdGVtIERvd25sb2FkRmls
ZUl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnRG93bmxvYWRMaW5rVG9EaXNrLCAK
KyAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnRG93bmxvYWRMaW5rVG9EaXNrKCkpOworICAgIENv
bnRleHRNZW51SXRlbSBDb3B5TGlua0l0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFn
Q29weUxpbmtUb0NsaXBib2FyZCwgCisgICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ0NvcHlMaW5r
VG9DbGlwYm9hcmQoKSk7CisgICAgQ29udGV4dE1lbnVJdGVtIE9wZW5JbWFnZUluTmV3V2luZG93
SXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdPcGVuSW1hZ2VJbk5ld1dpbmRvdywg
CisgICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ09wZW5JbWFnZUluTmV3V2luZG93KCkpOworICAg
IENvbnRleHRNZW51SXRlbSBEb3dubG9hZEltYWdlSXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVu
dUl0ZW1UYWdEb3dubG9hZEltYWdlVG9EaXNrLCAKKyAgICAgICAgY29udGV4dE1lbnVJdGVtVGFn
RG93bmxvYWRJbWFnZVRvRGlzaygpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gQ29weUltYWdlSXRl
bShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdDb3B5SW1hZ2VUb0NsaXBib2FyZCwgCisg
ICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ0NvcHlJbWFnZVRvQ2xpcGJvYXJkKCkpOworICAgIENv
bnRleHRNZW51SXRlbSBPcGVuTWVkaWFJbk5ld1dpbmRvd0l0ZW0oQWN0aW9uVHlwZSwgQ29udGV4
dE1lbnVJdGVtVGFnT3Blbk1lZGlhSW5OZXdXaW5kb3csIFN0cmluZygpKTsKKyAgICBDb250ZXh0
TWVudUl0ZW0gQ29weU1lZGlhTGlua0l0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFn
Q29weU1lZGlhTGlua1RvQ2xpcGJvYXJkLCAKKyAgICAgICAgU3RyaW5nKCkpOworICAgIENvbnRl
eHRNZW51SXRlbSBNZWRpYVBsYXlQYXVzZShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdN
ZWRpYVBsYXlQYXVzZSwgCisgICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ01lZGlhUGxheSgpKTsK
KyAgICBDb250ZXh0TWVudUl0ZW0gTWVkaWFNdXRlKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRl
bVRhZ01lZGlhTXV0ZSwgCisgICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ01lZGlhTXV0ZSgpKTsK
KyAgICBDb250ZXh0TWVudUl0ZW0gVG9nZ2xlTWVkaWFDb250cm9scyhDaGVja2FibGVBY3Rpb25U
eXBlLCBDb250ZXh0TWVudUl0ZW1UYWdUb2dnbGVNZWRpYUNvbnRyb2xzLCAKKyAgICAgICAgY29u
dGV4dE1lbnVJdGVtVGFnVG9nZ2xlTWVkaWFDb250cm9scygpKTsKKyAgICBDb250ZXh0TWVudUl0
ZW0gVG9nZ2xlTWVkaWFMb29wKENoZWNrYWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRh
Z1RvZ2dsZU1lZGlhTG9vcCwgCisgICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ1RvZ2dsZU1lZGlh
TG9vcCgpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gRW50ZXJWaWRlb0Z1bGxzY3JlZW4oQWN0aW9u
VHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnRW50ZXJWaWRlb0Z1bGxzY3JlZW4sIAorICAgICAgICBj
b250ZXh0TWVudUl0ZW1UYWdFbnRlclZpZGVvRnVsbHNjcmVlbigpKTsKKyNpZiBQTEFURk9STShN
QUMpCisgICAgQ29udGV4dE1lbnVJdGVtIFNlYXJjaFNwb3RsaWdodEl0ZW0oQWN0aW9uVHlwZSwg
Q29udGV4dE1lbnVJdGVtVGFnU2VhcmNoSW5TcG90bGlnaHQsIAorICAgICAgICBjb250ZXh0TWVu
dUl0ZW1UYWdTZWFyY2hJblNwb3RsaWdodCgpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gTG9va0lu
RGljdGlvbmFyeUl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnTG9va1VwSW5EaWN0
aW9uYXJ5LCAKKyAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnTG9va1VwSW5EaWN0aW9uYXJ5KCkp
OworI2VuZGlmCisjaWYgIVBMQVRGT1JNKEdUSykKKyAgICBDb250ZXh0TWVudUl0ZW0gU2VhcmNo
V2ViSXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTZWFyY2hXZWIsIGNvbnRleHRN
ZW51SXRlbVRhZ1NlYXJjaFdlYigpKTsKKyNlbmRpZgorICAgIENvbnRleHRNZW51SXRlbSBDb3B5
SXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdDb3B5LCBjb250ZXh0TWVudUl0ZW1U
YWdDb3B5KCkpOworICAgIENvbnRleHRNZW51SXRlbSBCYWNrSXRlbShBY3Rpb25UeXBlLCBDb250
ZXh0TWVudUl0ZW1UYWdHb0JhY2ssIGNvbnRleHRNZW51SXRlbVRhZ0dvQmFjaygpKTsKKyAgICBD
b250ZXh0TWVudUl0ZW0gRm9yd2FyZEl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFn
R29Gb3J3YXJkLCAgY29udGV4dE1lbnVJdGVtVGFnR29Gb3J3YXJkKCkpOworICAgIENvbnRleHRN
ZW51SXRlbSBTdG9wSXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTdG9wLCBjb250
ZXh0TWVudUl0ZW1UYWdTdG9wKCkpOworICAgIENvbnRleHRNZW51SXRlbSBSZWxvYWRJdGVtKEFj
dGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1JlbG9hZCwgY29udGV4dE1lbnVJdGVtVGFnUmVs
b2FkKCkpOworICAgIENvbnRleHRNZW51SXRlbSBPcGVuRnJhbWVJdGVtKEFjdGlvblR5cGUsIENv
bnRleHRNZW51SXRlbVRhZ09wZW5GcmFtZUluTmV3V2luZG93LCAKKyAgICAgICAgY29udGV4dE1l
bnVJdGVtVGFnT3BlbkZyYW1lSW5OZXdXaW5kb3coKSk7CisgICAgQ29udGV4dE1lbnVJdGVtIE5v
R3Vlc3Nlc0l0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnTm9HdWVzc2VzRm91bmQs
IAorICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdOb0d1ZXNzZXNGb3VuZCgpKTsKKyAgICBDb250
ZXh0TWVudUl0ZW0gSWdub3JlU3BlbGxpbmdJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRl
bVRhZ0lnbm9yZVNwZWxsaW5nLCAKKyAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnSWdub3JlU3Bl
bGxpbmcoKSk7CisgICAgQ29udGV4dE1lbnVJdGVtIExlYXJuU3BlbGxpbmdJdGVtKEFjdGlvblR5
cGUsIENvbnRleHRNZW51SXRlbVRhZ0xlYXJuU3BlbGxpbmcsIAorICAgICAgICBjb250ZXh0TWVu
dUl0ZW1UYWdMZWFyblNwZWxsaW5nKCkpOworICAgIENvbnRleHRNZW51SXRlbSBJZ25vcmVHcmFt
bWFySXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdJZ25vcmVHcmFtbWFyLCAKKyAg
ICAgICAgY29udGV4dE1lbnVJdGVtVGFnSWdub3JlR3JhbW1hcigpKTsKKyAgICBDb250ZXh0TWVu
dUl0ZW0gQ3V0SXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdDdXQsIGNvbnRleHRN
ZW51SXRlbVRhZ0N1dCgpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gUGFzdGVJdGVtKEFjdGlvblR5
cGUsIENvbnRleHRNZW51SXRlbVRhZ1Bhc3RlLCBjb250ZXh0TWVudUl0ZW1UYWdQYXN0ZSgpKTsK
KyNpZiBQTEFURk9STShHVEspCisgICAgQ29udGV4dE1lbnVJdGVtIERlbGV0ZUl0ZW0oQWN0aW9u
VHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnRGVsZXRlLCBjb250ZXh0TWVudUl0ZW1UYWdEZWxldGUo
KSk7CisgICAgQ29udGV4dE1lbnVJdGVtIFNlbGVjdEFsbEl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4
dE1lbnVJdGVtVGFnU2VsZWN0QWxsLCBjb250ZXh0TWVudUl0ZW1UYWdTZWxlY3RBbGwoKSk7Cisj
ZW5kaWYKKworICAgIE5vZGUqIG5vZGUgPSBtX2hpdFRlc3RSZXN1bHQuaW5uZXJOb25TaGFyZWRO
b2RlKCk7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm47CisjaWYgUExBVEZPUk0oR1RL
KQorICAgIGlmICghbV9oaXRUZXN0UmVzdWx0LmlzQ29udGVudEVkaXRhYmxlKCkgJiYgKG5vZGUt
PmlzRWxlbWVudE5vZGUoKSAmJiBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSktPmlzRm9ybUNv
bnRyb2xFbGVtZW50KCkpKQorICAgICAgICByZXR1cm47CisjZW5kaWYKKyAgICBGcmFtZSogZnJh
bWUgPSBub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmICghbV9oaXRUZXN0UmVzdWx0LmlzQ29udGVudEVkaXRhYmxlKCkp
IHsKKyAgICAgICAgRnJhbWVMb2FkZXIqIGxvYWRlciA9IGZyYW1lLT5sb2FkZXIoKTsKKyAgICAg
ICAgS1VSTCBsaW5rVVJMID0gbV9oaXRUZXN0UmVzdWx0LmFic29sdXRlTGlua1VSTCgpOworICAg
ICAgICBpZiAoIWxpbmtVUkwuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBpZiAobG9hZGVyLT5j
YW5IYW5kbGVSZXF1ZXN0KFJlc291cmNlUmVxdWVzdChsaW5rVVJMKSkpIHsKKyAgICAgICAgICAg
ICAgICBhcHBlbmRJdGVtKE9wZW5MaW5rSXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAg
ICAgICAgICAgICAgYXBwZW5kSXRlbShPcGVuTGlua0luTmV3V2luZG93SXRlbSwgbV9jb250ZXh0
TWVudS5nZXQoKSk7CisgICAgICAgICAgICAgICAgYXBwZW5kSXRlbShEb3dubG9hZEZpbGVJdGVt
LCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFwcGVu
ZEl0ZW0oQ29weUxpbmtJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgfQorCisg
ICAgICAgIEtVUkwgaW1hZ2VVUkwgPSBtX2hpdFRlc3RSZXN1bHQuYWJzb2x1dGVJbWFnZVVSTCgp
OworICAgICAgICBpZiAoIWltYWdlVVJMLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgaWYgKCFs
aW5rVVJMLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJ
dGVtKCksIG1fY29udGV4dE1lbnUuZ2V0KCkpOworCisgICAgICAgICAgICBhcHBlbmRJdGVtKE9w
ZW5JbWFnZUluTmV3V2luZG93SXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAgICAg
ICBhcHBlbmRJdGVtKERvd25sb2FkSW1hZ2VJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAg
ICAgICAgICAgIGlmIChpbWFnZVVSTC5pc0xvY2FsRmlsZSgpIHx8IG1faGl0VGVzdFJlc3VsdC5p
bWFnZSgpKQorICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oQ29weUltYWdlSXRlbSwgbV9jb250
ZXh0TWVudS5nZXQoKSk7CisgICAgICAgIH0KKworICAgICAgICBLVVJMIG1lZGlhVVJMID0gbV9o
aXRUZXN0UmVzdWx0LmFic29sdXRlTWVkaWFVUkwoKTsKKyAgICAgICAgaWYgKCFtZWRpYVVSTC5p
c0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGlmICghbGlua1VSTC5pc0VtcHR5KCkgfHwgIWltYWdl
VVJMLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVt
KCksIG1fY29udGV4dE1lbnUuZ2V0KCkpOworCisgICAgICAgICAgICBhcHBlbmRJdGVtKE1lZGlh
UGxheVBhdXNlLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgICAgIGFwcGVuZEl0ZW0o
TWVkaWFNdXRlLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgICAgIGFwcGVuZEl0ZW0o
VG9nZ2xlTWVkaWFDb250cm9scywgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAgICAgICBh
cHBlbmRJdGVtKFRvZ2dsZU1lZGlhTG9vcCwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAg
ICAgICBhcHBlbmRJdGVtKEVudGVyVmlkZW9GdWxsc2NyZWVuLCBtX2NvbnRleHRNZW51LmdldCgp
KTsKKworICAgICAgICAgICAgYXBwZW5kSXRlbSgqc2VwYXJhdG9ySXRlbSgpLCBtX2NvbnRleHRN
ZW51LmdldCgpKTsKKyAgICAgICAgICAgIGFwcGVuZEl0ZW0oQ29weU1lZGlhTGlua0l0ZW0sIG1f
Y29udGV4dE1lbnUuZ2V0KCkpOworICAgICAgICAgICAgYXBwZW5kSXRlbShPcGVuTWVkaWFJbk5l
d1dpbmRvd0l0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKGltYWdlVVJMLmlzRW1wdHkoKSAmJiBsaW5rVVJMLmlzRW1wdHkoKSAmJiBtZWRpYVVSTC5p
c0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGlmIChtX2hpdFRlc3RSZXN1bHQuaXNTZWxlY3RlZCgp
KSB7CisgICAgICAgICAgICAgICAgaWYgKHNlbGVjdGlvbkNvbnRhaW5zUG9zc2libGVXb3JkKGZy
YW1lKSkgeworI2lmIFBMQVRGT1JNKE1BQykKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kSXRl
bShTZWFyY2hTcG90bGlnaHRJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyNlbmRpZgorI2lm
ICFQTEFURk9STShHVEspCisgICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oU2VhcmNoV2Vi
SXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0
ZW0oKnNlcGFyYXRvckl0ZW0oKSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisjZW5kaWYKKyNpZiBQ
TEFURk9STShNQUMpCisgICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oTG9va0luRGljdGlv
bmFyeUl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOworICAgICAgICAgICAgICAgICAgICBhcHBl
bmRJdGVtKCpzZXBhcmF0b3JJdGVtKCksIG1fY29udGV4dE1lbnUuZ2V0KCkpOworI2VuZGlmCisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oQ29weUl0ZW0sIG1f
Y29udGV4dE1lbnUuZ2V0KCkpOworI2lmIFBMQVRGT1JNKE1BQykKKyAgICAgICAgICAgICAgICBh
cHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCksIG1fY29udGV4dE1lbnUuZ2V0KCkpOworICAgICAg
ICAgICAgICAgIENvbnRleHRNZW51SXRlbSBTcGVlY2hNZW51SXRlbShTdWJtZW51VHlwZSwgQ29u
dGV4dE1lbnVJdGVtVGFnU3BlZWNoTWVudSwgY29udGV4dE1lbnVJdGVtVGFnU3BlZWNoTWVudSgp
KTsKKyAgICAgICAgICAgICAgICBjcmVhdGVBbmRBcHBlbmRTcGVlY2hTdWJNZW51KFNwZWVjaE1l
bnVJdGVtKTsKKyAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKFNwZWVjaE1lbnVJdGVtLCBtX2Nv
bnRleHRNZW51LmdldCgpKTsKKyNlbmRpZiAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKyAgICAgICAgICAgICAgICBpZiAoIShmcmFt
ZS0+cGFnZSgpICYmIGZyYW1lLT5wYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+aGFzSW5z
cGVjdG9yRnJvbnRlbmRDbGllbnQoKSkpIHsKKyNlbmRpZgorICAgICAgICAgICAgICAgIGlmIChm
cmFtZS0+cGFnZSgpICYmIGZyYW1lLT5wYWdlKCktPmJhY2tGb3J3YXJkKCktPmNhbkdvQmFja09y
Rm9yd2FyZCgtMSkpCisgICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oQmFja0l0ZW0sIG1f
Y29udGV4dE1lbnUuZ2V0KCkpOworCisgICAgICAgICAgICAgICAgaWYgKGZyYW1lLT5wYWdlKCkg
JiYgZnJhbWUtPnBhZ2UoKS0+YmFja0ZvcndhcmQoKS0+Y2FuR29CYWNrT3JGb3J3YXJkKDEpKQor
ICAgICAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKEZvcndhcmRJdGVtLCBtX2NvbnRleHRNZW51
LmdldCgpKTsKKworICAgICAgICAgICAgICAgIC8vIHVzZSBpc0xvYWRpbmdJbkFQSVNlbnNlIHJh
dGhlciB0aGFuIGlzTG9hZGluZyBiZWNhdXNlIFN0b3AvUmVsb2FkIGFyZQorICAgICAgICAgICAg
ICAgIC8vIGludGVuZGVkIHRvIG1hdGNoIFdlYktpdCdzIEFQSSwgbm90IFdlYkNvcmUncyBpbnRl
cm5hbCBub3Rpb24gb2YgbG9hZGluZyBzdGF0dXMKKyAgICAgICAgICAgICAgICBpZiAobG9hZGVy
LT5kb2N1bWVudExvYWRlcigpLT5pc0xvYWRpbmdJbkFQSVNlbnNlKCkpCisgICAgICAgICAgICAg
ICAgICAgIGFwcGVuZEl0ZW0oU3RvcEl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOworICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kSXRlbShSZWxvYWRJdGVt
LCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorICAgICAgICAg
ICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgICAgICAgICAgaWYgKGZyYW1lLT5wYWdlKCkgJiYg
ZnJhbWUgIT0gZnJhbWUtPnBhZ2UoKS0+bWFpbkZyYW1lKCkpCisgICAgICAgICAgICAgICAgICAg
IGFwcGVuZEl0ZW0oT3BlbkZyYW1lSXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9IGVsc2UgeyAvLyBNYWtlIGFuIGVkaXRpbmcgY29udGV4
dCBtZW51CisgICAgICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIqIHNlbGVjdGlvbiA9IGZyYW1lLT5z
ZWxlY3Rpb24oKTsKKyAgICAgICAgYm9vbCBpblBhc3N3b3JkRmllbGQgPSBzZWxlY3Rpb24tPmlz
SW5QYXNzd29yZEZpZWxkKCk7CisgICAgICAgIGJvb2wgc3BlbGxDaGVja2luZ0VuYWJsZWQgPSBm
cmFtZS0+ZWRpdG9yKCktPmlzU3BlbGxDaGVja2luZ0VuYWJsZWRGb3Iobm9kZSk7CisgICAgICAg
IAorICAgICAgICBpZiAoIWluUGFzc3dvcmRGaWVsZCAmJiBzcGVsbENoZWNraW5nRW5hYmxlZCkg
eworICAgICAgICAgICAgLy8gQ29uc2lkZXIgYWRkaW5nIHNwZWxsaW5nLXJlbGF0ZWQgb3IgZ3Jh
bW1hci1yZWxhdGVkIGNvbnRleHQgbWVudSBpdGVtcyAobmV2ZXIgYm90aCwgc2luY2UgYSBzaW5n
bGUgc2VsZWN0ZWQgcmFuZ2UKKyAgICAgICAgICAgIC8vIGlzIG5ldmVyIGNvbnNpZGVyZWQgYSBt
aXNzcGVsbGluZyBhbmQgYmFkIGdyYW1tYXIgYXQgdGhlIHNhbWUgdGltZSkKKyAgICAgICAgICAg
IGJvb2wgbWlzc3BlbGxpbmc7CisgICAgICAgICAgICBib29sIGJhZEdyYW1tYXI7CisgICAgICAg
ICAgICBWZWN0b3I8U3RyaW5nPiBndWVzc2VzID0gZnJhbWUtPmVkaXRvcigpLT5ndWVzc2VzRm9y
TWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbFNlbGVjdGlvbihtaXNzcGVsbGluZywgYmFkR3JhbW1h
cik7CisgICAgICAgICAgICBpZiAobWlzc3BlbGxpbmcgfHwgYmFkR3JhbW1hcikgeworICAgICAg
ICAgICAgICAgIHNpemVfdCBzaXplID0gZ3Vlc3Nlcy5zaXplKCk7CisgICAgICAgICAgICAgICAg
aWYgKHNpemUgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSdzIGJhZCBn
cmFtbWFyIGJ1dCBubyBzdWdnZXN0aW9ucyAoZS5nLiwgcmVwZWF0ZWQgd29yZCksIGp1c3QgbGVh
dmUgb2ZmIHRoZSBzdWdnZXN0aW9ucworICAgICAgICAgICAgICAgICAgICAvLyBsaXN0IGFuZCB0
cmFpbGluZyBzZXBhcmF0b3IgcmF0aGVyIHRoYW4gYWRkaW5nIGEgIk5vIEd1ZXNzZXMgRm91bmQi
IGl0ZW0gKG1hdGNoZXMgQXBwS2l0KQorICAgICAgICAgICAgICAgICAgICBpZiAobWlzc3BlbGxp
bmcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oTm9HdWVzc2VzSXRlbSwg
bV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRJdGVt
KCpzZXBhcmF0b3JJdGVtKCksIG1fY29udGV4dE1lbnUuZ2V0KCkpOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgU3RyaW5nICZndWVzcyA9IGd1ZXNzZXNbaV07CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIWd1ZXNzLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IENvbnRleHRNZW51SXRlbSBpdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1NwZWxs
aW5nR3Vlc3MsIGd1ZXNzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRJdGVt
KGl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oKnNl
cGFyYXRvckl0ZW0oKSwgbV9jb250ZXh0TWVudS5nZXQoKSk7ICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYg
KG1pc3NwZWxsaW5nKSB7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oSWdub3JlU3Bl
bGxpbmdJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgYXBw
ZW5kSXRlbShMZWFyblNwZWxsaW5nSXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAg
ICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oSWdub3JlR3Jh
bW1hckl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOworICAgICAgICAgICAgICAgIGFwcGVuZEl0
ZW0oKnNlcGFyYXRvckl0ZW0oKSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisjaWYgUExBVEZPUk0o
TUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdf
T05fTEVPUEFSRCkKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gSWYg
dGhlIHN0cmluZyB3YXMgYXV0b2NvcnJlY3RlZCwgZ2VuZXJhdGUgYSBjb250ZXh0dWFsIG1lbnUg
aXRlbSBhbGxvd2luZyBpdCB0byBiZSBjaGFuZ2VkIGJhY2suCisgICAgICAgICAgICAgICAgU3Ry
aW5nIHJlcGxhY2VkU3RyaW5nID0gbV9oaXRUZXN0UmVzdWx0LnJlcGxhY2VkU3RyaW5nKCk7Cisg
ICAgICAgICAgICAgICAgaWYgKCFyZXBsYWNlZFN0cmluZy5pc0VtcHR5KCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgQ29udGV4dE1lbnVJdGVtIGl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJ
dGVtVGFnQ2hhbmdlQmFjaywgY29udGV4dE1lbnVJdGVtVGFnQ2hhbmdlQmFjayhyZXBsYWNlZFN0
cmluZykpOworICAgICAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKGl0ZW0sIG1fY29udGV4dE1l
bnUuZ2V0KCkpOworICAgICAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVt
KCksIG1fY29udGV4dE1lbnUuZ2V0KCkpOworICAgICAgICAgICAgICAgIH0KKyNlbmRpZgorICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgRnJhbWVMb2FkZXIqIGxvYWRlciA9IGZy
YW1lLT5sb2FkZXIoKTsKKyAgICAgICAgS1VSTCBsaW5rVVJMID0gbV9oaXRUZXN0UmVzdWx0LmFi
c29sdXRlTGlua1VSTCgpOworICAgICAgICBpZiAoIWxpbmtVUkwuaXNFbXB0eSgpKSB7CisgICAg
ICAgICAgICBpZiAobG9hZGVyLT5jYW5IYW5kbGVSZXF1ZXN0KFJlc291cmNlUmVxdWVzdChsaW5r
VVJMKSkpIHsKKyAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKE9wZW5MaW5rSXRlbSwgbV9jb250
ZXh0TWVudS5nZXQoKSk7CisgICAgICAgICAgICAgICAgYXBwZW5kSXRlbShPcGVuTGlua0luTmV3
V2luZG93SXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAgICAgICAgICAgYXBwZW5k
SXRlbShEb3dubG9hZEZpbGVJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGFwcGVuZEl0ZW0oQ29weUxpbmtJdGVtLCBtX2NvbnRleHRNZW51Lmdl
dCgpKTsKKyAgICAgICAgICAgIGFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSwgbV9jb250ZXh0
TWVudS5nZXQoKSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobV9oaXRUZXN0UmVzdWx0Lmlz
U2VsZWN0ZWQoKSAmJiAhaW5QYXNzd29yZEZpZWxkICYmIHNlbGVjdGlvbkNvbnRhaW5zUG9zc2li
bGVXb3JkKGZyYW1lKSkgeworI2lmIFBMQVRGT1JNKE1BQykKKyAgICAgICAgICAgIGFwcGVuZEl0
ZW0oU2VhcmNoU3BvdGxpZ2h0SXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisjZW5kaWYKKyNp
ZiAhUExBVEZPUk0oR1RLKQorICAgICAgICAgICAgYXBwZW5kSXRlbShTZWFyY2hXZWJJdGVtLCBt
X2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgICAgIGFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0
ZW0oKSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisjZW5kaWYKKyAgICAgCisjaWYgUExBVEZPUk0o
TUFDKQorICAgICAgICAgICAgYXBwZW5kSXRlbShMb29rSW5EaWN0aW9uYXJ5SXRlbSwgbV9jb250
ZXh0TWVudS5nZXQoKSk7CisgICAgICAgICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCks
IG1fY29udGV4dE1lbnUuZ2V0KCkpOworI2VuZGlmCisgICAgICAgIH0KKworICAgICAgICBhcHBl
bmRJdGVtKEN1dEl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOworICAgICAgICBhcHBlbmRJdGVt
KENvcHlJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgYXBwZW5kSXRlbShQYXN0
ZUl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOworI2lmIFBMQVRGT1JNKEdUSykKKyAgICAgICAg
YXBwZW5kSXRlbShEZWxldGVJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgYXBw
ZW5kSXRlbSgqc2VwYXJhdG9ySXRlbSgpLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAg
YXBwZW5kSXRlbShTZWxlY3RBbGxJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyNlbmRpZgor
CisgICAgICAgIGlmICghaW5QYXNzd29yZEZpZWxkKSB7CisgICAgICAgICAgICBhcHBlbmRJdGVt
KCpzZXBhcmF0b3JJdGVtKCksIG1fY29udGV4dE1lbnUuZ2V0KCkpOworI2lmbmRlZiBCVUlMRElO
R19PTl9USUdFUgorI2lmICFQTEFURk9STShHVEspCisgICAgICAgICAgICBDb250ZXh0TWVudUl0
ZW0gU3BlbGxpbmdBbmRHcmFtbWFyTWVudUl0ZW0oU3VibWVudVR5cGUsIENvbnRleHRNZW51SXRl
bVRhZ1NwZWxsaW5nTWVudSwgCisgICAgICAgICAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnU3Bl
bGxpbmdNZW51KCkpOworICAgICAgICAgICAgY3JlYXRlQW5kQXBwZW5kU3BlbGxpbmdBbmRHcmFt
bWFyU3ViTWVudShTcGVsbGluZ0FuZEdyYW1tYXJNZW51SXRlbSk7CisgICAgICAgICAgICBhcHBl
bmRJdGVtKFNwZWxsaW5nQW5kR3JhbW1hck1lbnVJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsK
KyNlbmRpZgorI2Vsc2UKKyAgICAgICAgICAgIENvbnRleHRNZW51SXRlbSBTcGVsbGluZ01lbnVJ
dGVtKFN1Ym1lbnVUeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTcGVsbGluZ01lbnUsIAorICAgICAg
ICAgICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ1NwZWxsaW5nTWVudSgpKTsKKyAgICAgICAgICAg
IGNyZWF0ZUFuZEFwcGVuZFNwZWxsaW5nU3ViTWVudShTcGVsbGluZ01lbnVJdGVtKTsKKyAgICAg
ICAgICAgIGFwcGVuZEl0ZW0oU3BlbGxpbmdNZW51SXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7
CisjZW5kaWYKKyNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VS
KSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQorICAgICAgICAgICAgQ29udGV4dE1l
bnVJdGVtIHN1YnN0aXR1dGlvbnNNZW51SXRlbShTdWJtZW51VHlwZSwgQ29udGV4dE1lbnVJdGVt
VGFnU3Vic3RpdHV0aW9uc01lbnUsIAorICAgICAgICAgICAgICAgIGNvbnRleHRNZW51SXRlbVRh
Z1N1YnN0aXR1dGlvbnNNZW51KCkpOworICAgICAgICAgICAgY3JlYXRlQW5kQXBwZW5kU3Vic3Rp
dHV0aW9uc1N1Yk1lbnUoc3Vic3RpdHV0aW9uc01lbnVJdGVtKTsKKyAgICAgICAgICAgIGFwcGVu
ZEl0ZW0oc3Vic3RpdHV0aW9uc01lbnVJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAg
ICAgICAgIENvbnRleHRNZW51SXRlbSB0cmFuc2Zvcm1hdGlvbnNNZW51SXRlbShTdWJtZW51VHlw
ZSwgQ29udGV4dE1lbnVJdGVtVGFnVHJhbnNmb3JtYXRpb25zTWVudSwgCisgICAgICAgICAgICAg
ICAgY29udGV4dE1lbnVJdGVtVGFnVHJhbnNmb3JtYXRpb25zTWVudSgpKTsKKyAgICAgICAgICAg
IGNyZWF0ZUFuZEFwcGVuZFRyYW5zZm9ybWF0aW9uc1N1Yk1lbnUodHJhbnNmb3JtYXRpb25zTWVu
dUl0ZW0pOworICAgICAgICAgICAgYXBwZW5kSXRlbSh0cmFuc2Zvcm1hdGlvbnNNZW51SXRlbSwg
bV9jb250ZXh0TWVudS5nZXQoKSk7CisjZW5kaWYKKyNpZiBQTEFURk9STShHVEspCisgICAgICAg
ICAgICBib29sIHNob3VsZFNob3dGb250TWVudSA9IGZyYW1lLT5lZGl0b3IoKS0+Y2FuRWRpdFJp
Y2hseSgpOworI2Vsc2UKKyAgICAgICAgICAgIGJvb2wgc2hvdWxkU2hvd0ZvbnRNZW51ID0gdHJ1
ZTsKKyNlbmRpZgorICAgICAgICAgICAgaWYgKHNob3VsZFNob3dGb250TWVudSkgeworICAgICAg
ICAgICAgICAgIENvbnRleHRNZW51SXRlbSBGb250TWVudUl0ZW0oU3VibWVudVR5cGUsIENvbnRl
eHRNZW51SXRlbVRhZ0ZvbnRNZW51LCAKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dE1lbnVJ
dGVtVGFnRm9udE1lbnUoKSk7CisgICAgICAgICAgICAgICAgY3JlYXRlQW5kQXBwZW5kRm9udFN1
Yk1lbnUoRm9udE1lbnVJdGVtKTsKKyAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKEZvbnRNZW51
SXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAgICAgICB9CisjaWYgUExBVEZPUk0o
TUFDKQorICAgICAgICAgICAgQ29udGV4dE1lbnVJdGVtIFNwZWVjaE1lbnVJdGVtKFN1Ym1lbnVU
eXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTcGVlY2hNZW51LCBjb250ZXh0TWVudUl0ZW1UYWdTcGVl
Y2hNZW51KCkpOworICAgICAgICAgICAgY3JlYXRlQW5kQXBwZW5kU3BlZWNoU3ViTWVudShTcGVl
Y2hNZW51SXRlbSk7CisgICAgICAgICAgICBhcHBlbmRJdGVtKFNwZWVjaE1lbnVJdGVtLCBtX2Nv
bnRleHRNZW51LmdldCgpKTsKKyNlbmRpZgorI2lmICFQTEFURk9STShHVEspCisgICAgICAgICAg
ICBDb250ZXh0TWVudUl0ZW0gV3JpdGluZ0RpcmVjdGlvbk1lbnVJdGVtKFN1Ym1lbnVUeXBlLCBD
b250ZXh0TWVudUl0ZW1UYWdXcml0aW5nRGlyZWN0aW9uTWVudSwgCisgICAgICAgICAgICAgICAg
Y29udGV4dE1lbnVJdGVtVGFnV3JpdGluZ0RpcmVjdGlvbk1lbnUoKSk7CisgICAgICAgICAgICBj
cmVhdGVBbmRBcHBlbmRXcml0aW5nRGlyZWN0aW9uU3ViTWVudShXcml0aW5nRGlyZWN0aW9uTWVu
dUl0ZW0pOworICAgICAgICAgICAgYXBwZW5kSXRlbShXcml0aW5nRGlyZWN0aW9uTWVudUl0ZW0s
IG1fY29udGV4dE1lbnUuZ2V0KCkpOworICAgICAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBmcmFt
ZS0+cGFnZSgpKSB7CisgICAgICAgICAgICAgICAgaWYgKFNldHRpbmdzKiBzZXR0aW5ncyA9IHBh
Z2UtPnNldHRpbmdzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBpbmNsdWRlVGV4dERp
cmVjdGlvblN1Ym1lbnUgPSBzZXR0aW5ncy0+dGV4dERpcmVjdGlvblN1Ym1lbnVJbmNsdXNpb25C
ZWhhdmlvcigpID09IFRleHREaXJlY3Rpb25TdWJtZW51QWx3YXlzSW5jbHVkZWQKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHx8IChzZXR0aW5ncy0+dGV4dERpcmVjdGlvblN1Ym1lbnVJbmNsdXNp
b25CZWhhdmlvcigpID09IFRleHREaXJlY3Rpb25TdWJtZW51QXV0b21hdGljYWxseUluY2x1ZGVk
ICYmIGZyYW1lLT5lZGl0b3IoKS0+aGFzQmlkaVNlbGVjdGlvbigpKTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGluY2x1ZGVUZXh0RGlyZWN0aW9uU3VibWVudSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgQ29udGV4dE1lbnVJdGVtIFRleHREaXJlY3Rpb25NZW51SXRlbShTdWJtZW51VHlw
ZSwgQ29udGV4dE1lbnVJdGVtVGFnVGV4dERpcmVjdGlvbk1lbnUsIAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ1RleHREaXJlY3Rpb25NZW51KCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgY3JlYXRlQW5kQXBwZW5kVGV4dERpcmVjdGlvblN1Yk1lbnUo
VGV4dERpcmVjdGlvbk1lbnVJdGVtKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0
ZW0oVGV4dERpcmVjdGlvbk1lbnVJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyNlbmRpZgor
ICAgICAgICB9CisgICAgfQorfQorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKK3ZvaWQgQ29udGV4
dE1lbnVDb250cm9sbGVyOjphZGRJbnNwZWN0RWxlbWVudEl0ZW0oKQoreworICAgIE5vZGUqIG5v
ZGUgPSBtX2hpdFRlc3RSZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCk7CisgICAgaWYgKCFub2Rl
KQorICAgICAgICByZXR1cm47CisKKyAgICBGcmFtZSogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgp
LT5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIFBhZ2Uq
IHBhZ2UgPSBmcmFtZS0+cGFnZSgpOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKCFwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIENvbnRleHRNZW51SXRlbSBJbnNwZWN0RWxlbWVudEl0ZW0oQWN0aW9uVHlwZSwgQ29u
dGV4dE1lbnVJdGVtVGFnSW5zcGVjdEVsZW1lbnQsIGNvbnRleHRNZW51SXRlbVRhZ0luc3BlY3RF
bGVtZW50KCkpOworICAgIGFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSwgbV9jb250ZXh0TWVu
dS5nZXQoKSk7CisgICAgYXBwZW5kSXRlbShJbnNwZWN0RWxlbWVudEl0ZW0sIG1fY29udGV4dE1l
bnUuZ2V0KCkpOworfQorI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKK3ZvaWQgQ29udGV4
dE1lbnVDb250cm9sbGVyOjpjaGVja09yRW5hYmxlSWZOZWVkZWQoQ29udGV4dE1lbnVJdGVtJiBp
dGVtKSBjb25zdAoreworICAgIGlmIChpdGVtLnR5cGUoKSA9PSBTZXBhcmF0b3JUeXBlKQorICAg
ICAgICByZXR1cm47CisgICAgCisgICAgRnJhbWUqIGZyYW1lID0gbV9oaXRUZXN0UmVzdWx0Lmlu
bmVyTm9uU2hhcmVkTm9kZSgpLT5kb2N1bWVudCgpLT5mcmFtZSgpOworICAgIGlmICghZnJhbWUp
CisgICAgICAgIHJldHVybjsKKworICAgIC8vIEN1c3RvbSBpdGVtcyBhbHJlYWR5IGhhdmUgcHJv
cGVyIGNoZWNrZWQgYW5kIGVuYWJsZWQgdmFsdWVzLgorICAgIGlmIChDb250ZXh0TWVudUl0ZW1C
YXNlQ3VzdG9tVGFnIDw9IGl0ZW0uYWN0aW9uKCkgJiYgaXRlbS5hY3Rpb24oKSA8PSBDb250ZXh0
TWVudUl0ZW1MYXN0Q3VzdG9tVGFnKQorICAgICAgICByZXR1cm47CisKKyAgICBib29sIHNob3Vs
ZEVuYWJsZSA9IHRydWU7CisgICAgYm9vbCBzaG91bGRDaGVjayA9IGZhbHNlOyAKKworICAgIHN3
aXRjaCAoaXRlbS5hY3Rpb24oKSkgeworICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0No
ZWNrU3BlbGxpbmc6CisgICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+ZWRpdG9yKCkt
PmNhbkVkaXQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbnRleHRNZW51
SXRlbVRhZ0RlZmF1bHREaXJlY3Rpb246CisgICAgICAgICAgICBzaG91bGRDaGVjayA9IGZhbHNl
OworICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gZmFsc2U7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdMZWZ0VG9SaWdodDoKKyAgICAgICAgY2Fz
ZSBDb250ZXh0TWVudUl0ZW1UYWdSaWdodFRvTGVmdDogeworICAgICAgICAgICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7CisgICAgICAgICAgICBSZWZQdHI8Q1NTU3R5bGVEZWNsYXJhdGlvbj4gc3R5
bGUgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+Y3JlYXRlQ1NTU3R5bGVEZWNsYXJhdGlvbigpOworICAg
ICAgICAgICAgU3RyaW5nIGRpcmVjdGlvbiA9IGl0ZW0uYWN0aW9uKCkgPT0gQ29udGV4dE1lbnVJ
dGVtVGFnTGVmdFRvUmlnaHQgPyAibHRyIiA6ICJydGwiOworICAgICAgICAgICAgc3R5bGUtPnNl
dFByb3BlcnR5KENTU1Byb3BlcnR5RGlyZWN0aW9uLCBkaXJlY3Rpb24sIGZhbHNlLCBlYyk7Cisg
ICAgICAgICAgICBzaG91bGRDaGVjayA9IGZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0aW9uSGFzU3R5
bGUoc3R5bGUuZ2V0KCkpICE9IEZhbHNlVHJpU3RhdGU7CisgICAgICAgICAgICBzaG91bGRFbmFi
bGUgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBD
b250ZXh0TWVudUl0ZW1UYWdUZXh0RGlyZWN0aW9uRGVmYXVsdDogeworICAgICAgICAgICAgRWRp
dG9yOjpDb21tYW5kIGNvbW1hbmQgPSBmcmFtZS0+ZWRpdG9yKCktPmNvbW1hbmQoIk1ha2VUZXh0
V3JpdGluZ0RpcmVjdGlvbk5hdHVyYWwiKTsKKyAgICAgICAgICAgIHNob3VsZENoZWNrID0gY29t
bWFuZC5zdGF0ZSgpID09IFRydWVUcmlTdGF0ZTsKKyAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9
IGNvbW1hbmQuaXNFbmFibGVkKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1RleHREaXJlY3Rpb25MZWZ0VG9SaWdodDogewor
ICAgICAgICAgICAgRWRpdG9yOjpDb21tYW5kIGNvbW1hbmQgPSBmcmFtZS0+ZWRpdG9yKCktPmNv
bW1hbmQoIk1ha2VUZXh0V3JpdGluZ0RpcmVjdGlvbkxlZnRUb1JpZ2h0Iik7CisgICAgICAgICAg
ICBzaG91bGRDaGVjayA9IGNvbW1hbmQuc3RhdGUoKSA9PSBUcnVlVHJpU3RhdGU7CisgICAgICAg
ICAgICBzaG91bGRFbmFibGUgPSBjb21tYW5kLmlzRW5hYmxlZCgpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdUZXh0RGlyZWN0
aW9uUmlnaHRUb0xlZnQ6IHsKKyAgICAgICAgICAgIEVkaXRvcjo6Q29tbWFuZCBjb21tYW5kID0g
ZnJhbWUtPmVkaXRvcigpLT5jb21tYW5kKCJNYWtlVGV4dFdyaXRpbmdEaXJlY3Rpb25SaWdodFRv
TGVmdCIpOworICAgICAgICAgICAgc2hvdWxkQ2hlY2sgPSBjb21tYW5kLnN0YXRlKCkgPT0gVHJ1
ZVRyaVN0YXRlOworICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gY29tbWFuZC5pc0VuYWJsZWQo
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ29udGV4dE1l
bnVJdGVtVGFnQ29weToKKyAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGZyYW1lLT5lZGl0b3Io
KS0+Y2FuREhUTUxDb3B5KCkgfHwgZnJhbWUtPmVkaXRvcigpLT5jYW5Db3B5KCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdDdXQ6CisgICAgICAg
ICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+ZWRpdG9yKCktPmNhbkRIVE1MQ3V0KCkgfHwgZnJh
bWUtPmVkaXRvcigpLT5jYW5DdXQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IENvbnRleHRNZW51SXRlbVRhZ0lnbm9yZVNwZWxsaW5nOgorICAgICAgICBjYXNlIENvbnRleHRN
ZW51SXRlbVRhZ0xlYXJuU3BlbGxpbmc6CisgICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFt
ZS0+c2VsZWN0aW9uKCktPmlzUmFuZ2UoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIENvbnRleHRNZW51SXRlbVRhZ1Bhc3RlOgorICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0g
ZnJhbWUtPmVkaXRvcigpLT5jYW5ESFRNTFBhc3RlKCkgfHwgZnJhbWUtPmVkaXRvcigpLT5jYW5Q
YXN0ZSgpOworICAgICAgICAgICAgYnJlYWs7CisjaWYgUExBVEZPUk0oR1RLKQorICAgICAgICBj
YXNlIENvbnRleHRNZW51SXRlbVRhZ0RlbGV0ZToKKyAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9
IGZyYW1lLT5lZGl0b3IoKS0+Y2FuRGVsZXRlKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTZWxlY3RBbGw6CisgICAgICAgIGNhc2UgQ29udGV4
dE1lbnVJdGVtVGFnSW5wdXRNZXRob2RzOgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRh
Z1VuaWNvZGU6CisgICAgICAgICAgICBzaG91bGRFbmFibGUgPSB0cnVlOworICAgICAgICAgICAg
YnJlYWs7CisjZW5kaWYKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdVbmRlcmxpbmU6
IHsKKyAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgICAgICAgICAgUmVmUHRy
PENTU1N0eWxlRGVjbGFyYXRpb24+IHN0eWxlID0gZnJhbWUtPmRvY3VtZW50KCktPmNyZWF0ZUNT
U1N0eWxlRGVjbGFyYXRpb24oKTsKKyAgICAgICAgICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQ
cm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uc0luRWZmZWN0LCAidW5kZXJsaW5lIiwgZmFsc2Us
IGVjKTsKKyAgICAgICAgICAgIHNob3VsZENoZWNrID0gZnJhbWUtPmVkaXRvcigpLT5zZWxlY3Rp
b25IYXNTdHlsZShzdHlsZS5nZXQoKSkgIT0gRmFsc2VUcmlTdGF0ZTsKKyAgICAgICAgICAgIHNo
b3VsZEVuYWJsZSA9IGZyYW1lLT5lZGl0b3IoKS0+Y2FuRWRpdFJpY2hseSgpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdMb29r
VXBJbkRpY3Rpb25hcnk6CisgICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+c2VsZWN0
aW9uKCktPmlzUmFuZ2UoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbnRl
eHRNZW51SXRlbVRhZ0NoZWNrR3JhbW1hcldpdGhTcGVsbGluZzoKKyNpZm5kZWYgQlVJTERJTkdf
T05fVElHRVIKKyAgICAgICAgICAgIGlmIChmcmFtZS0+ZWRpdG9yKCktPmlzR3JhbW1hckNoZWNr
aW5nRW5hYmxlZCgpKQorICAgICAgICAgICAgICAgIHNob3VsZENoZWNrID0gdHJ1ZTsKKyAgICAg
ICAgICAgIHNob3VsZEVuYWJsZSA9IHRydWU7CisjZW5kaWYKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0l0YWxpYzogeworICAgICAgICAgICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgICAgICAgICBSZWZQdHI8Q1NTU3R5bGVEZWNsYXJhdGlv
bj4gc3R5bGUgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+Y3JlYXRlQ1NTU3R5bGVEZWNsYXJhdGlvbigp
OworICAgICAgICAgICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFN0eWxlLCAi
aXRhbGljIiwgZmFsc2UsIGVjKTsKKyAgICAgICAgICAgIHNob3VsZENoZWNrID0gZnJhbWUtPmVk
aXRvcigpLT5zZWxlY3Rpb25IYXNTdHlsZShzdHlsZS5nZXQoKSkgIT0gRmFsc2VUcmlTdGF0ZTsK
KyAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGZyYW1lLT5lZGl0b3IoKS0+Y2FuRWRpdFJpY2hs
eSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDb250ZXh0
TWVudUl0ZW1UYWdCb2xkOiB7CisgICAgICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAg
ICAgICAgICAgIFJlZlB0cjxDU1NTdHlsZURlY2xhcmF0aW9uPiBzdHlsZSA9IGZyYW1lLT5kb2N1
bWVudCgpLT5jcmVhdGVDU1NTdHlsZURlY2xhcmF0aW9uKCk7CisgICAgICAgICAgICBzdHlsZS0+
c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlGb250V2VpZ2h0LCAiYm9sZCIsIGZhbHNlLCBlYyk7Cisg
ICAgICAgICAgICBzaG91bGRDaGVjayA9IGZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0aW9uSGFzU3R5
bGUoc3R5bGUuZ2V0KCkpICE9IEZhbHNlVHJpU3RhdGU7CisgICAgICAgICAgICBzaG91bGRFbmFi
bGUgPSBmcmFtZS0+ZWRpdG9yKCktPmNhbkVkaXRSaWNobHkoKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnT3V0bGluZToKKyAg
ICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU2hvd1NwZWxsaW5nUGFuZWw6CisjaWZuZGVmIEJV
SUxESU5HX09OX1RJR0VSCisgICAgICAgICAgICBpZiAoZnJhbWUtPmVkaXRvcigpLT5zcGVsbGlu
Z1BhbmVsSXNTaG93aW5nKCkpCisgICAgICAgICAgICAgICAgaXRlbS5zZXRUaXRsZShjb250ZXh0
TWVudUl0ZW1UYWdTaG93U3BlbGxpbmdQYW5lbChmYWxzZSkpOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIGl0ZW0uc2V0VGl0bGUoY29udGV4dE1lbnVJdGVtVGFnU2hvd1NwZWxs
aW5nUGFuZWwodHJ1ZSkpOworI2VuZGlmCisgICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFt
ZS0+ZWRpdG9yKCktPmNhbkVkaXQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IENvbnRleHRNZW51SXRlbVRhZ05vR3Vlc3Nlc0ZvdW5kOgorICAgICAgICAgICAgc2hvdWxkRW5h
YmxlID0gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb250ZXh0TWVu
dUl0ZW1UYWdDaGVja1NwZWxsaW5nV2hpbGVUeXBpbmc6CisgICAgICAgICAgICBzaG91bGRDaGVj
ayA9IGZyYW1lLT5lZGl0b3IoKS0+aXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKTsK
KyAgICAgICAgICAgIGJyZWFrOworI2lmIFBMQVRGT1JNKE1BQykKKyAgICAgICAgY2FzZSBDb250
ZXh0TWVudUl0ZW1UYWdTdWJzdGl0dXRpb25zTWVudToKKyAgICAgICAgY2FzZSBDb250ZXh0TWVu
dUl0ZW1UYWdUcmFuc2Zvcm1hdGlvbnNNZW51OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU2hvd1N1YnN0aXR1dGlvbnM6CisjaWYgIWRlZmluZWQo
QlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpCisgICAg
ICAgICAgICBpZiAoZnJhbWUtPmVkaXRvcigpLT5zdWJzdGl0dXRpb25zUGFuZWxJc1Nob3dpbmco
KSkKKyAgICAgICAgICAgICAgICBpdGVtLnNldFRpdGxlKGNvbnRleHRNZW51SXRlbVRhZ1Nob3dT
dWJzdGl0dXRpb25zKGZhbHNlKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
aXRlbS5zZXRUaXRsZShjb250ZXh0TWVudUl0ZW1UYWdTaG93U3Vic3RpdHV0aW9ucyh0cnVlKSk7
CisgICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+ZWRpdG9yKCktPmNhbkVkaXQoKTsK
KyNlbmRpZgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVt
VGFnTWFrZVVwcGVyQ2FzZToKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdNYWtlTG93
ZXJDYXNlOgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0NhcGl0YWxpemU6CisgICAg
ICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQ2hhbmdlQmFjazoKKyAgICAgICAgICAgIHNob3Vs
ZEVuYWJsZSA9IGZyYW1lLT5lZGl0b3IoKS0+Y2FuRWRpdCgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQ29ycmVjdFNwZWxsaW5nQXV0b21hdGlj
YWxseToKKyNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJ
TkdfT05fTEVPUEFSRCkKKyAgICAgICAgICAgIHNob3VsZENoZWNrID0gZnJhbWUtPmVkaXRvcigp
LT5pc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQoKTsKKyNlbmRpZgorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU21hcnRDb3B5UGFz
dGU6CisjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5H
X09OX0xFT1BBUkQpCisgICAgICAgICAgICBzaG91bGRDaGVjayA9IGZyYW1lLT5lZGl0b3IoKS0+
c21hcnRJbnNlcnREZWxldGVFbmFibGVkKCk7CisjZW5kaWYKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1NtYXJ0UXVvdGVzOgorI2lmICFkZWZpbmVk
KEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQorICAg
ICAgICAgICAgc2hvdWxkQ2hlY2sgPSBmcmFtZS0+ZWRpdG9yKCktPmlzQXV0b21hdGljUXVvdGVT
dWJzdGl0dXRpb25FbmFibGVkKCk7CisjZW5kaWYKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1NtYXJ0RGFzaGVzOgorI2lmICFkZWZpbmVkKEJVSUxE
SU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQorICAgICAgICAg
ICAgc2hvdWxkQ2hlY2sgPSBmcmFtZS0+ZWRpdG9yKCktPmlzQXV0b21hdGljRGFzaFN1YnN0aXR1
dGlvbkVuYWJsZWQoKTsKKyNlbmRpZgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtVGFnU21hcnRMaW5rczoKKyNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9U
SUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKKyAgICAgICAgICAgIHNob3Vs
ZENoZWNrID0gZnJhbWUtPmVkaXRvcigpLT5pc0F1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVk
KCk7CisjZW5kaWYKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbnRleHRNZW51
SXRlbVRhZ1RleHRSZXBsYWNlbWVudDoKKyNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikg
JiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKKyAgICAgICAgICAgIHNob3VsZENoZWNr
ID0gZnJhbWUtPmVkaXRvcigpLT5pc0F1dG9tYXRpY1RleHRSZXBsYWNlbWVudEVuYWJsZWQoKTsK
KyNlbmRpZgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVt
VGFnU3RvcFNwZWFraW5nOgorICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gY2xpZW50KCkgJiYg
Y2xpZW50KCktPmlzU3BlYWtpbmcoKTsKKyAgICAgICAgICAgIGJyZWFrOworI2Vsc2UgLy8gUExB
VEZPUk0oTUFDKSBlbmRzIGhlcmUKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTdG9w
U3BlYWtpbmc6CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZgorI2lmIFBMQVRGT1JNKEdUSykK
KyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdHb0JhY2s6CisgICAgICAgICAgICBzaG91
bGRFbmFibGUgPSBmcmFtZS0+cGFnZSgpICYmIGZyYW1lLT5wYWdlKCktPmJhY2tGb3J3YXJkKCkt
PmNhbkdvQmFja09yRm9yd2FyZCgtMSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBDb250ZXh0TWVudUl0ZW1UYWdHb0ZvcndhcmQ6CisgICAgICAgICAgICBzaG91bGRFbmFibGUg
PSBmcmFtZS0+cGFnZSgpICYmIGZyYW1lLT5wYWdlKCktPmJhY2tGb3J3YXJkKCktPmNhbkdvQmFj
a09yRm9yd2FyZCgxKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbnRleHRN
ZW51SXRlbVRhZ1N0b3A6CisgICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+bG9hZGVy
KCktPmRvY3VtZW50TG9hZGVyKCktPmlzTG9hZGluZ0luQVBJU2Vuc2UoKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1JlbG9hZDoKKyAgICAgICAg
ICAgIHNob3VsZEVuYWJsZSA9ICFmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPmlz
TG9hZGluZ0luQVBJU2Vuc2UoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENv
bnRleHRNZW51SXRlbVRhZ0ZvbnRNZW51OgorICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gZnJh
bWUtPmVkaXRvcigpLT5jYW5FZGl0UmljaGx5KCk7CisgICAgICAgICAgICBicmVhazsKKyNlbHNl
CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnR29CYWNrOgorICAgICAgICBjYXNlIENv
bnRleHRNZW51SXRlbVRhZ0dvRm9yd2FyZDoKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1U
YWdTdG9wOgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1JlbG9hZDoKKyAgICAgICAg
Y2FzZSBDb250ZXh0TWVudUl0ZW1UYWdGb250TWVudToKKyNlbmRpZgorICAgICAgICBjYXNlIENv
bnRleHRNZW51SXRlbVRhZ05vQWN0aW9uOgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRh
Z09wZW5MaW5rSW5OZXdXaW5kb3c6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnRG93
bmxvYWRMaW5rVG9EaXNrOgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0NvcHlMaW5r
VG9DbGlwYm9hcmQ6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnT3BlbkltYWdlSW5O
ZXdXaW5kb3c6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnRG93bmxvYWRJbWFnZVRv
RGlzazoKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdDb3B5SW1hZ2VUb0NsaXBib2Fy
ZDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ09w
ZW5NZWRpYUluTmV3V2luZG93OgorICAgICAgICAgICAgaWYgKG1faGl0VGVzdFJlc3VsdC5tZWRp
YUlzVmlkZW8oKSkKKyAgICAgICAgICAgICAgICBpdGVtLnNldFRpdGxlKGNvbnRleHRNZW51SXRl
bVRhZ09wZW5WaWRlb0luTmV3V2luZG93KCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIGl0ZW0uc2V0VGl0bGUoY29udGV4dE1lbnVJdGVtVGFnT3BlbkF1ZGlvSW5OZXdXaW5k
b3coKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1U
YWdDb3B5TWVkaWFMaW5rVG9DbGlwYm9hcmQ6CisgICAgICAgICAgICBpZiAobV9oaXRUZXN0UmVz
dWx0Lm1lZGlhSXNWaWRlbygpKQorICAgICAgICAgICAgICAgIGl0ZW0uc2V0VGl0bGUoY29udGV4
dE1lbnVJdGVtVGFnQ29weVZpZGVvTGlua1RvQ2xpcGJvYXJkKCkpOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIGl0ZW0uc2V0VGl0bGUoY29udGV4dE1lbnVJdGVtVGFnQ29weUF1
ZGlvTGlua1RvQ2xpcGJvYXJkKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtVGFnVG9nZ2xlTWVkaWFDb250cm9sczoKKyAgICAgICAgICAgIHNob3Vs
ZENoZWNrID0gbV9oaXRUZXN0UmVzdWx0Lm1lZGlhQ29udHJvbHNFbmFibGVkKCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdUb2dnbGVNZWRpYUxv
b3A6CisgICAgICAgICAgICBzaG91bGRDaGVjayA9IG1faGl0VGVzdFJlc3VsdC5tZWRpYUxvb3BF
bmFibGVkKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0
ZW1UYWdFbnRlclZpZGVvRnVsbHNjcmVlbjoKKyAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IG1f
aGl0VGVzdFJlc3VsdC5tZWRpYVN1cHBvcnRzRnVsbHNjcmVlbigpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnT3BlbkZyYW1lSW5OZXdXaW5kb3c6
CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU3BlbGxpbmdHdWVzczoKKyAgICAgICAg
Y2FzZSBDb250ZXh0TWVudUl0ZW1UYWdPdGhlcjoKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0
ZW1UYWdTZWFyY2hJblNwb3RsaWdodDoKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdT
ZWFyY2hXZWI6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnT3BlbldpdGhEZWZhdWx0
QXBwbGljYXRpb246CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtUERGQWN0dWFsU2l6ZToK
KyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1QREZab29tSW46CisgICAgICAgIGNhc2UgQ29u
dGV4dE1lbnVJdGVtUERGWm9vbU91dDoKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1QREZB
dXRvU2l6ZToKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1QREZTaW5nbGVQYWdlOgorICAg
ICAgICBjYXNlIENvbnRleHRNZW51SXRlbVBERkZhY2luZ1BhZ2VzOgorICAgICAgICBjYXNlIENv
bnRleHRNZW51SXRlbVBERkNvbnRpbnVvdXM6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVt
UERGTmV4dFBhZ2U6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtUERGUHJldmlvdXNQYWdl
OgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5MaW5rOgorICAgICAgICBjYXNl
IENvbnRleHRNZW51SXRlbVRhZ0lnbm9yZUdyYW1tYXI6CisgICAgICAgIGNhc2UgQ29udGV4dE1l
bnVJdGVtVGFnU3BlbGxpbmdNZW51OgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1No
b3dGb250czoKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTdHlsZXM6CisgICAgICAg
IGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU2hvd0NvbG9yczoKKyAgICAgICAgY2FzZSBDb250ZXh0
TWVudUl0ZW1UYWdTcGVlY2hNZW51OgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1N0
YXJ0U3BlYWtpbmc6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnV3JpdGluZ0RpcmVj
dGlvbk1lbnU6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnVGV4dERpcmVjdGlvbk1l
bnU6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnUERGU2luZ2xlUGFnZVNjcm9sbGlu
ZzoKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdQREZGYWNpbmdQYWdlc1Njcm9sbGlu
ZzoKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRh
Z0luc3BlY3RFbGVtZW50OgorI2VuZGlmCisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtQmFz
ZUN1c3RvbVRhZzoKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1DdXN0b21UYWdOb0FjdGlv
bjoKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1MYXN0Q3VzdG9tVGFnOgorICAgICAgICBj
YXNlIENvbnRleHRNZW51SXRlbUJhc2VBcHBsaWNhdGlvblRhZzoKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ01lZGlhUGxheVBhdXNlOgorICAgICAg
ICAgICAgaWYgKG1faGl0VGVzdFJlc3VsdC5tZWRpYVBsYXlpbmcoKSkKKyAgICAgICAgICAgICAg
ICBpdGVtLnNldFRpdGxlKGNvbnRleHRNZW51SXRlbVRhZ01lZGlhUGF1c2UoKSk7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgaXRlbS5zZXRUaXRsZShjb250ZXh0TWVudUl0ZW1U
YWdNZWRpYVBsYXkoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb250ZXh0
TWVudUl0ZW1UYWdNZWRpYU11dGU6CisgICAgICAgICAgICBzaG91bGRFbmFibGUgPSBtX2hpdFRl
c3RSZXN1bHQubWVkaWFIYXNBdWRpbygpOworICAgICAgICAgICAgc2hvdWxkQ2hlY2sgPSBzaG91
bGRFbmFibGUgJiYgIG1faGl0VGVzdFJlc3VsdC5tZWRpYU11dGVkKCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICB9CisKKyAgICBpdGVtLnNldENoZWNrZWQoc2hvdWxkQ2hlY2spOworICAgIGl0
ZW0uc2V0RW5hYmxlZChzaG91bGRFbmFibGUpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKICNlbmRpZiAvLyBFTkFCTEUoQ09OVEVYVF9NRU5VUykKSW5kZXg6IFdlYkNvcmUvcGFnZS9D
b250ZXh0TWVudUNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvQ29udGV4
dE1lbnVDb250cm9sbGVyLmgJKHJldmlzaW9uIDczNDY5KQorKysgV2ViQ29yZS9wYWdlL0NvbnRl
eHRNZW51Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZu
ZGVmIENvbnRleHRNZW51Q29udHJvbGxlcl9oCiAjZGVmaW5lIENvbnRleHRNZW51Q29udHJvbGxl
cl9oCiAKKyNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlh
YmxlLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+CkBAIC00NSw3ICs0Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgQ29udGV4
dE1lbnVDb250cm9sbGVyKFBhZ2UqLCBDb250ZXh0TWVudUNsaWVudCopOwogICAgICAgICB+Q29u
dGV4dE1lbnVDb250cm9sbGVyKCk7CiAKLSAgICAgICAgQ29udGV4dE1lbnVDbGllbnQqIGNsaWVu
dCgpIHsgcmV0dXJuIG1fY2xpZW50OyB9CisgICAgICAgIENvbnRleHRNZW51Q2xpZW50KiBjbGll
bnQoKSBjb25zdCB7IHJldHVybiBtX2NsaWVudDsgfQogCiAgICAgICAgIENvbnRleHRNZW51KiBj
b250ZXh0TWVudSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dE1lbnUuZ2V0KCk7IH0KICAgICAg
ICAgdm9pZCBjbGVhckNvbnRleHRNZW51KCk7CkBAIC01MywxNiArNTQsMzUgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICB2b2lkIGhhbmRsZUNvbnRleHRNZW51RXZlbnQoRXZlbnQqKTsK
ICAgICAgICAgdm9pZCBzaG93Q29udGV4dE1lbnUoRXZlbnQqLCBQYXNzUmVmUHRyPENvbnRleHRN
ZW51UHJvdmlkZXI+KTsKIAorICAgICAgICB2b2lkIHBvcHVsYXRlKCk7CiAgICAgICAgIHZvaWQg
Y29udGV4dE1lbnVJdGVtU2VsZWN0ZWQoQ29udGV4dE1lbnVJdGVtKik7CisgICAgICAgIHZvaWQg
YWRkSW5zcGVjdEVsZW1lbnRJdGVtKCk7CisKKyAgICAgICAgdm9pZCBjaGVja09yRW5hYmxlSWZO
ZWVkZWQoQ29udGV4dE1lbnVJdGVtJikgY29uc3Q7CisKKyAgICAgICAgdm9pZCBzZXRIaXRUZXN0
UmVzdWx0KGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCkgeyBtX2hpdFRlc3RSZXN1bHQgPSBy
ZXN1bHQ7IH0KKyAgICAgICAgY29uc3QgSGl0VGVzdFJlc3VsdCYgaGl0VGVzdFJlc3VsdCgpIHsg
cmV0dXJuIG1faGl0VGVzdFJlc3VsdDsgfQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgQ29udGV4
dE1lbnUqIGNyZWF0ZUNvbnRleHRNZW51KEV2ZW50Kik7CiAgICAgICAgIHZvaWQgc2hvd0NvbnRl
eHRNZW51KEV2ZW50Kik7CisgICAgICAgIAorICAgICAgICB2b2lkIGFwcGVuZEl0ZW0oQ29udGV4
dE1lbnVJdGVtJiwgQ29udGV4dE1lbnUqIHBhcmVudE1lbnUpOworCisgICAgICAgIHZvaWQgY3Jl
YXRlQW5kQXBwZW5kRm9udFN1Yk1lbnUoQ29udGV4dE1lbnVJdGVtJiBmb250TWVudUl0ZW0pOwor
ICAgICAgICB2b2lkIGNyZWF0ZUFuZEFwcGVuZFNwZWxsaW5nQW5kR3JhbW1hclN1Yk1lbnUoQ29u
dGV4dE1lbnVJdGVtJiBzcGVsbGluZ0FuZEdyYW1tYXJNZW51SXRlbSk7CisgICAgICAgIHZvaWQg
Y3JlYXRlQW5kQXBwZW5kU3BlbGxpbmdTdWJNZW51KENvbnRleHRNZW51SXRlbSYgc3BlbGxpbmdN
ZW51SXRlbSk7CisgICAgICAgIHZvaWQgY3JlYXRlQW5kQXBwZW5kU3BlZWNoU3ViTWVudShDb250
ZXh0TWVudUl0ZW0mIHNwZWVjaE1lbnVJdGVtKTsKKyAgICAgICAgdm9pZCBjcmVhdGVBbmRBcHBl
bmRXcml0aW5nRGlyZWN0aW9uU3ViTWVudShDb250ZXh0TWVudUl0ZW0mIHdyaXRpbmdEaXJlY3Rp
b25NZW51SXRlbSk7CisgICAgICAgIHZvaWQgY3JlYXRlQW5kQXBwZW5kVGV4dERpcmVjdGlvblN1
Yk1lbnUoQ29udGV4dE1lbnVJdGVtJiB0ZXh0RGlyZWN0aW9uTWVudUl0ZW0pOworICAgICAgICB2
b2lkIGNyZWF0ZUFuZEFwcGVuZFN1YnN0aXR1dGlvbnNTdWJNZW51KENvbnRleHRNZW51SXRlbSYg
c3Vic3RpdHV0aW9uc01lbnVJdGVtKTsKKyAgICAgICAgdm9pZCBjcmVhdGVBbmRBcHBlbmRUcmFu
c2Zvcm1hdGlvbnNTdWJNZW51KENvbnRleHRNZW51SXRlbSYgdHJhbnNmb3JtYXRpb25zTWVudUl0
ZW0pOwogCiAgICAgICAgIFBhZ2UqIG1fcGFnZTsKICAgICAgICAgQ29udGV4dE1lbnVDbGllbnQq
IG1fY2xpZW50OwogICAgICAgICBPd25QdHI8Q29udGV4dE1lbnU+IG1fY29udGV4dE1lbnU7CiAg
ICAgICAgIFJlZlB0cjxDb250ZXh0TWVudVByb3ZpZGVyPiBtX21lbnVQcm92aWRlcjsKKyAgICAg
ICAgSGl0VGVzdFJlc3VsdCBtX2hpdFRlc3RSZXN1bHQ7CiAgICAgfTsKIAogfQpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9Db250ZXh0TWVudS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9Db250ZXh0TWVudS5jcHAJKHJldmlzaW9uIDczNDY5KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9Db250ZXh0TWVudS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsODkwICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDA4IENocmlzdGlhbiBEeXdhbiA8Y2hyaXN0aWFuQGltZW5k
aW8uY29tPgotICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwKLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNvbnRleHRNZW51LmgiCi0KLSNpZiBFTkFCTEUoQ09O
VEVYVF9NRU5VUykKLQotI2luY2x1ZGUgIkJhY2tGb3J3YXJkQ29udHJvbGxlci5oIgotI2luY2x1
ZGUgIkNvbnRleHRNZW51Q29udHJvbGxlci5oIgotI2luY2x1ZGUgIkNvbnRleHRNZW51Q2xpZW50
LmgiCi0jaW5jbHVkZSAiQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgiCi0jaW5jbHVkZSAi
Q1NTUHJvcGVydHkuaCIKLSNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCi0jaW5jbHVkZSAi
RG9jdW1lbnQuaCIKLSNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgotI2luY2x1ZGUgIkVkaXRv
ci5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKLSNpbmNs
dWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiS1VSTC5oIgotI2luY2x1ZGUg
IkxvY2FsaXplZFN0cmluZ3MuaCIKLSNpbmNsdWRlICJOb2RlLmgiCi0jaW5jbHVkZSAiUGFnZS5o
IgotI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgotI2luY2x1ZGUgIlNlbGVjdGlvbkNvbnRy
b2xsZXIuaCIKLSNpbmNsdWRlICJTZXR0aW5ncy5oIgotI2luY2x1ZGUgIlRleHRJdGVyYXRvci5o
IgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotdXNpbmcgbmFtZXNwYWNlIHN0ZDsK
LXVzaW5nIG5hbWVzcGFjZSBXVEY7Ci11c2luZyBuYW1lc3BhY2UgVW5pY29kZTsKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1Db250ZXh0TWVudUNvbnRyb2xsZXIqIENvbnRleHRNZW51Ojpjb250
cm9sbGVyKCkgY29uc3QKLXsKLSAgICBpZiAoTm9kZSogbm9kZSA9IG1faGl0VGVzdFJlc3VsdC5p
bm5lck5vblNoYXJlZE5vZGUoKSkKLSAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IG5vZGUtPmRv
Y3VtZW50KCktPmZyYW1lKCkpCi0gICAgICAgICAgICBpZiAoUGFnZSogcGFnZSA9IGZyYW1lLT5w
YWdlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHBhZ2UtPmNvbnRleHRNZW51Q29udHJvbGxl
cigpOwotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgUGFzc093blB0cjxDb250ZXh0TWVudUl0
ZW0+IHNlcGFyYXRvckl0ZW0oKQotewotICAgIHJldHVybiBuZXcgQ29udGV4dE1lbnVJdGVtKFNl
cGFyYXRvclR5cGUsIENvbnRleHRNZW51SXRlbVRhZ05vQWN0aW9uLCBTdHJpbmcoKSk7Ci19Ci0K
LXN0YXRpYyB2b2lkIGNyZWF0ZUFuZEFwcGVuZEZvbnRTdWJNZW51KGNvbnN0IEhpdFRlc3RSZXN1
bHQmIHJlc3VsdCwgQ29udGV4dE1lbnVJdGVtJiBmb250TWVudUl0ZW0pCi17Ci0gICAgQ29udGV4
dE1lbnUgZm9udE1lbnUocmVzdWx0KTsKLQotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBDb250ZXh0
TWVudUl0ZW0gc2hvd0ZvbnRzKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1Nob3dGb250
cywgY29udGV4dE1lbnVJdGVtVGFnU2hvd0ZvbnRzKCkpOwotI2VuZGlmCi0gICAgQ29udGV4dE1l
bnVJdGVtIGJvbGQoQ2hlY2thYmxlQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnQm9sZCwg
Y29udGV4dE1lbnVJdGVtVGFnQm9sZCgpKTsKLSAgICBDb250ZXh0TWVudUl0ZW0gaXRhbGljKENo
ZWNrYWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0l0YWxpYywgY29udGV4dE1lbnVJ
dGVtVGFnSXRhbGljKCkpOwotICAgIENvbnRleHRNZW51SXRlbSB1bmRlcmxpbmUoQ2hlY2thYmxl
QWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnVW5kZXJsaW5lLCBjb250ZXh0TWVudUl0ZW1U
YWdVbmRlcmxpbmUoKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIG91dGxpbmUoQWN0aW9uVHlwZSwg
Q29udGV4dE1lbnVJdGVtVGFnT3V0bGluZSwgY29udGV4dE1lbnVJdGVtVGFnT3V0bGluZSgpKTsK
LSNpZiBQTEFURk9STShNQUMpCi0gICAgQ29udGV4dE1lbnVJdGVtIHN0eWxlcyhBY3Rpb25UeXBl
LCBDb250ZXh0TWVudUl0ZW1UYWdTdHlsZXMsIGNvbnRleHRNZW51SXRlbVRhZ1N0eWxlcygpKTsK
LSAgICBDb250ZXh0TWVudUl0ZW0gc2hvd0NvbG9ycyhBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0
ZW1UYWdTaG93Q29sb3JzLCBjb250ZXh0TWVudUl0ZW1UYWdTaG93Q29sb3JzKCkpOwotI2VuZGlm
Ci0KLSNpZiBQTEFURk9STShNQUMpCi0gICAgZm9udE1lbnUuYXBwZW5kSXRlbShzaG93Rm9udHMp
OwotI2VuZGlmCi0gICAgZm9udE1lbnUuYXBwZW5kSXRlbShib2xkKTsKLSAgICBmb250TWVudS5h
cHBlbmRJdGVtKGl0YWxpYyk7Ci0gICAgZm9udE1lbnUuYXBwZW5kSXRlbSh1bmRlcmxpbmUpOwot
ICAgIGZvbnRNZW51LmFwcGVuZEl0ZW0ob3V0bGluZSk7Ci0jaWYgUExBVEZPUk0oTUFDKQotICAg
IGZvbnRNZW51LmFwcGVuZEl0ZW0oc3R5bGVzKTsKLSAgICBmb250TWVudS5hcHBlbmRJdGVtKCpz
ZXBhcmF0b3JJdGVtKCkpOwotICAgIGZvbnRNZW51LmFwcGVuZEl0ZW0oc2hvd0NvbG9ycyk7Ci0j
ZW5kaWYKLQotICAgIGZvbnRNZW51SXRlbS5zZXRTdWJNZW51KCZmb250TWVudSk7Ci19Ci0KLSNp
ZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikKLQotI2lmICFQTEFURk9STShHVEspCi0KLXN0
YXRpYyB2b2lkIGNyZWF0ZUFuZEFwcGVuZFNwZWxsaW5nQW5kR3JhbW1hclN1Yk1lbnUoY29uc3Qg
SGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBDb250ZXh0TWVudUl0ZW0mIHNwZWxsaW5nQW5kR3JhbW1h
ck1lbnVJdGVtKQotewotICAgIENvbnRleHRNZW51IHNwZWxsaW5nQW5kR3JhbW1hck1lbnUocmVz
dWx0KTsKLQotICAgIENvbnRleHRNZW51SXRlbSBzaG93U3BlbGxpbmdQYW5lbChBY3Rpb25UeXBl
LCBDb250ZXh0TWVudUl0ZW1UYWdTaG93U3BlbGxpbmdQYW5lbCwgCi0gICAgICAgIGNvbnRleHRN
ZW51SXRlbVRhZ1Nob3dTcGVsbGluZ1BhbmVsKHRydWUpKTsKLSAgICBDb250ZXh0TWVudUl0ZW0g
Y2hlY2tTcGVsbGluZyhBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdDaGVja1NwZWxsaW5n
LCAKLSAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnQ2hlY2tTcGVsbGluZygpKTsKLSAgICBDb250
ZXh0TWVudUl0ZW0gY2hlY2tBc1lvdVR5cGUoQ2hlY2thYmxlQWN0aW9uVHlwZSwgQ29udGV4dE1l
bnVJdGVtVGFnQ2hlY2tTcGVsbGluZ1doaWxlVHlwaW5nLCAKLSAgICAgICAgY29udGV4dE1lbnVJ
dGVtVGFnQ2hlY2tTcGVsbGluZ1doaWxlVHlwaW5nKCkpOwotICAgIENvbnRleHRNZW51SXRlbSBn
cmFtbWFyV2l0aFNwZWxsaW5nKENoZWNrYWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRh
Z0NoZWNrR3JhbW1hcldpdGhTcGVsbGluZywgCi0gICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ0No
ZWNrR3JhbW1hcldpdGhTcGVsbGluZygpKTsKLSNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVk
KEJVSUxESU5HX09OX0xFT1BBUkQpCi0gICAgQ29udGV4dE1lbnVJdGVtIGNvcnJlY3RTcGVsbGlu
ZyhDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdDb3JyZWN0U3BlbGxpbmdB
dXRvbWF0aWNhbGx5LCAKLSAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnQ29ycmVjdFNwZWxsaW5n
QXV0b21hdGljYWxseSgpKTsKLSNlbmRpZgotCi0gICAgc3BlbGxpbmdBbmRHcmFtbWFyTWVudS5h
cHBlbmRJdGVtKHNob3dTcGVsbGluZ1BhbmVsKTsKLSAgICBzcGVsbGluZ0FuZEdyYW1tYXJNZW51
LmFwcGVuZEl0ZW0oY2hlY2tTcGVsbGluZyk7Ci0jaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5l
ZChCVUlMRElOR19PTl9MRU9QQVJEKQotICAgIHNwZWxsaW5nQW5kR3JhbW1hck1lbnUuYXBwZW5k
SXRlbSgqc2VwYXJhdG9ySXRlbSgpKTsKLSNlbmRpZgotICAgIHNwZWxsaW5nQW5kR3JhbW1hck1l
bnUuYXBwZW5kSXRlbShjaGVja0FzWW91VHlwZSk7Ci0gICAgc3BlbGxpbmdBbmRHcmFtbWFyTWVu
dS5hcHBlbmRJdGVtKGdyYW1tYXJXaXRoU3BlbGxpbmcpOwotI2lmIFBMQVRGT1JNKE1BQykgJiYg
IWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKLSAgICBzcGVsbGluZ0FuZEdyYW1tYXJNZW51
LmFwcGVuZEl0ZW0oY29ycmVjdFNwZWxsaW5nKTsKLSNlbmRpZgotCi0gICAgc3BlbGxpbmdBbmRH
cmFtbWFyTWVudUl0ZW0uc2V0U3ViTWVudSgmc3BlbGxpbmdBbmRHcmFtbWFyTWVudSk7Ci19Ci0K
LSNlbmRpZiAvLyAhUExBVEZPUk0oR1RLKQotCi0jZWxzZQotCi1zdGF0aWMgdm9pZCBjcmVhdGVB
bmRBcHBlbmRTcGVsbGluZ1N1Yk1lbnUoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBDb250
ZXh0TWVudUl0ZW0mIHNwZWxsaW5nTWVudUl0ZW0pCi17Ci0gICAgQ29udGV4dE1lbnUgc3BlbGxp
bmdNZW51KHJlc3VsdCk7Ci0KLSAgICBDb250ZXh0TWVudUl0ZW0gc2hvd1NwZWxsaW5nUGFuZWwo
QWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU2hvd1NwZWxsaW5nUGFuZWwsIAotICAgICAg
ICBjb250ZXh0TWVudUl0ZW1UYWdTaG93U3BlbGxpbmdQYW5lbCh0cnVlKSk7Ci0gICAgQ29udGV4
dE1lbnVJdGVtIGNoZWNrU3BlbGxpbmcoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnQ2hl
Y2tTcGVsbGluZywgCi0gICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ0NoZWNrU3BlbGxpbmcoKSk7
Ci0gICAgQ29udGV4dE1lbnVJdGVtIGNoZWNrQXNZb3VUeXBlKENoZWNrYWJsZUFjdGlvblR5cGUs
IENvbnRleHRNZW51SXRlbVRhZ0NoZWNrU3BlbGxpbmdXaGlsZVR5cGluZywgCi0gICAgICAgIGNv
bnRleHRNZW51SXRlbVRhZ0NoZWNrU3BlbGxpbmdXaGlsZVR5cGluZygpKTsKLQotICAgIHNwZWxs
aW5nTWVudS5hcHBlbmRJdGVtKHNob3dTcGVsbGluZ1BhbmVsKTsKLSAgICBzcGVsbGluZ01lbnUu
YXBwZW5kSXRlbShjaGVja1NwZWxsaW5nKTsKLSAgICBzcGVsbGluZ01lbnUuYXBwZW5kSXRlbShj
aGVja0FzWW91VHlwZSk7Ci0KLSAgICBzcGVsbGluZ01lbnVJdGVtLnNldFN1Yk1lbnUoJnNwZWxs
aW5nTWVudSk7Ci19Ci0KLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oTUFDKQotCi1zdGF0aWMgdm9p
ZCBjcmVhdGVBbmRBcHBlbmRTcGVlY2hTdWJNZW51KGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3Vs
dCwgQ29udGV4dE1lbnVJdGVtJiBzcGVlY2hNZW51SXRlbSkKLXsKLSAgICBDb250ZXh0TWVudSBz
cGVlY2hNZW51KHJlc3VsdCk7Ci0KLSAgICBDb250ZXh0TWVudUl0ZW0gc3RhcnQoQWN0aW9uVHlw
ZSwgQ29udGV4dE1lbnVJdGVtVGFnU3RhcnRTcGVha2luZywgY29udGV4dE1lbnVJdGVtVGFnU3Rh
cnRTcGVha2luZygpKTsKLSAgICBDb250ZXh0TWVudUl0ZW0gc3RvcChBY3Rpb25UeXBlLCBDb250
ZXh0TWVudUl0ZW1UYWdTdG9wU3BlYWtpbmcsIGNvbnRleHRNZW51SXRlbVRhZ1N0b3BTcGVha2lu
ZygpKTsKLQotICAgIHNwZWVjaE1lbnUuYXBwZW5kSXRlbShzdGFydCk7Ci0gICAgc3BlZWNoTWVu
dS5hcHBlbmRJdGVtKHN0b3ApOwotCi0gICAgc3BlZWNoTWVudUl0ZW0uc2V0U3ViTWVudSgmc3Bl
ZWNoTWVudSk7Ci19Ci0KLSNlbmRpZgotIAotI2lmICFQTEFURk9STShHVEspCi0KLXN0YXRpYyB2
b2lkIGNyZWF0ZUFuZEFwcGVuZFdyaXRpbmdEaXJlY3Rpb25TdWJNZW51KGNvbnN0IEhpdFRlc3RS
ZXN1bHQmIHJlc3VsdCwgQ29udGV4dE1lbnVJdGVtJiB3cml0aW5nRGlyZWN0aW9uTWVudUl0ZW0p
Ci17Ci0gICAgQ29udGV4dE1lbnUgd3JpdGluZ0RpcmVjdGlvbk1lbnUocmVzdWx0KTsKLQotICAg
IENvbnRleHRNZW51SXRlbSBkZWZhdWx0SXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1U
YWdEZWZhdWx0RGlyZWN0aW9uLCAKLSAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnRGVmYXVsdERp
cmVjdGlvbigpKTsKLSAgICBDb250ZXh0TWVudUl0ZW0gbHRyKENoZWNrYWJsZUFjdGlvblR5cGUs
IENvbnRleHRNZW51SXRlbVRhZ0xlZnRUb1JpZ2h0LCBjb250ZXh0TWVudUl0ZW1UYWdMZWZ0VG9S
aWdodCgpKTsKLSAgICBDb250ZXh0TWVudUl0ZW0gcnRsKENoZWNrYWJsZUFjdGlvblR5cGUsIENv
bnRleHRNZW51SXRlbVRhZ1JpZ2h0VG9MZWZ0LCBjb250ZXh0TWVudUl0ZW1UYWdSaWdodFRvTGVm
dCgpKTsKLQotICAgIHdyaXRpbmdEaXJlY3Rpb25NZW51LmFwcGVuZEl0ZW0oZGVmYXVsdEl0ZW0p
OwotICAgIHdyaXRpbmdEaXJlY3Rpb25NZW51LmFwcGVuZEl0ZW0obHRyKTsKLSAgICB3cml0aW5n
RGlyZWN0aW9uTWVudS5hcHBlbmRJdGVtKHJ0bCk7Ci0KLSAgICB3cml0aW5nRGlyZWN0aW9uTWVu
dUl0ZW0uc2V0U3ViTWVudSgmd3JpdGluZ0RpcmVjdGlvbk1lbnUpOwotfQotCi1zdGF0aWMgdm9p
ZCBjcmVhdGVBbmRBcHBlbmRUZXh0RGlyZWN0aW9uU3ViTWVudShjb25zdCBIaXRUZXN0UmVzdWx0
JiByZXN1bHQsIENvbnRleHRNZW51SXRlbSYgdGV4dERpcmVjdGlvbk1lbnVJdGVtKQotewotICAg
IENvbnRleHRNZW51IHRleHREaXJlY3Rpb25NZW51KHJlc3VsdCk7Ci0KLSAgICBDb250ZXh0TWVu
dUl0ZW0gZGVmYXVsdEl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnVGV4dERpcmVj
dGlvbkRlZmF1bHQsIGNvbnRleHRNZW51SXRlbVRhZ0RlZmF1bHREaXJlY3Rpb24oKSk7Ci0gICAg
Q29udGV4dE1lbnVJdGVtIGx0cihDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1U
YWdUZXh0RGlyZWN0aW9uTGVmdFRvUmlnaHQsIGNvbnRleHRNZW51SXRlbVRhZ0xlZnRUb1JpZ2h0
KCkpOwotICAgIENvbnRleHRNZW51SXRlbSBydGwoQ2hlY2thYmxlQWN0aW9uVHlwZSwgQ29udGV4
dE1lbnVJdGVtVGFnVGV4dERpcmVjdGlvblJpZ2h0VG9MZWZ0LCBjb250ZXh0TWVudUl0ZW1UYWdS
aWdodFRvTGVmdCgpKTsKLQotICAgIHRleHREaXJlY3Rpb25NZW51LmFwcGVuZEl0ZW0oZGVmYXVs
dEl0ZW0pOwotICAgIHRleHREaXJlY3Rpb25NZW51LmFwcGVuZEl0ZW0obHRyKTsKLSAgICB0ZXh0
RGlyZWN0aW9uTWVudS5hcHBlbmRJdGVtKHJ0bCk7Ci0KLSAgICB0ZXh0RGlyZWN0aW9uTWVudUl0
ZW0uc2V0U3ViTWVudSgmdGV4dERpcmVjdGlvbk1lbnUpOwotfQotCi0jZW5kaWYKLQotI2lmIFBM
QVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJV
SUxESU5HX09OX0xFT1BBUkQpCi0KLXN0YXRpYyB2b2lkIGNyZWF0ZUFuZEFwcGVuZFN1YnN0aXR1
dGlvbnNTdWJNZW51KGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgQ29udGV4dE1lbnVJdGVt
JiBzdWJzdGl0dXRpb25zTWVudUl0ZW0pCi17Ci0gICAgQ29udGV4dE1lbnUgc3Vic3RpdHV0aW9u
c01lbnUocmVzdWx0KTsKLQotICAgIENvbnRleHRNZW51SXRlbSBzaG93U3Vic3RpdHV0aW9ucyhB
Y3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTaG93U3Vic3RpdHV0aW9ucywgY29udGV4dE1l
bnVJdGVtVGFnU2hvd1N1YnN0aXR1dGlvbnModHJ1ZSkpOwotICAgIENvbnRleHRNZW51SXRlbSBz
bWFydENvcHlQYXN0ZShDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTbWFy
dENvcHlQYXN0ZSwgY29udGV4dE1lbnVJdGVtVGFnU21hcnRDb3B5UGFzdGUoKSk7Ci0gICAgQ29u
dGV4dE1lbnVJdGVtIHNtYXJ0UXVvdGVzKENoZWNrYWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51
SXRlbVRhZ1NtYXJ0UXVvdGVzLCBjb250ZXh0TWVudUl0ZW1UYWdTbWFydFF1b3RlcygpKTsKLSAg
ICBDb250ZXh0TWVudUl0ZW0gc21hcnREYXNoZXMoQ2hlY2thYmxlQWN0aW9uVHlwZSwgQ29udGV4
dE1lbnVJdGVtVGFnU21hcnREYXNoZXMsIGNvbnRleHRNZW51SXRlbVRhZ1NtYXJ0RGFzaGVzKCkp
OwotICAgIENvbnRleHRNZW51SXRlbSBzbWFydExpbmtzKENoZWNrYWJsZUFjdGlvblR5cGUsIENv
bnRleHRNZW51SXRlbVRhZ1NtYXJ0TGlua3MsIGNvbnRleHRNZW51SXRlbVRhZ1NtYXJ0TGlua3Mo
KSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIHRleHRSZXBsYWNlbWVudChDaGVja2FibGVBY3Rpb25U
eXBlLCBDb250ZXh0TWVudUl0ZW1UYWdUZXh0UmVwbGFjZW1lbnQsIGNvbnRleHRNZW51SXRlbVRh
Z1RleHRSZXBsYWNlbWVudCgpKTsKLQotICAgIHN1YnN0aXR1dGlvbnNNZW51LmFwcGVuZEl0ZW0o
c2hvd1N1YnN0aXR1dGlvbnMpOwotICAgIHN1YnN0aXR1dGlvbnNNZW51LmFwcGVuZEl0ZW0oKnNl
cGFyYXRvckl0ZW0oKSk7Ci0gICAgc3Vic3RpdHV0aW9uc01lbnUuYXBwZW5kSXRlbShzbWFydENv
cHlQYXN0ZSk7Ci0gICAgc3Vic3RpdHV0aW9uc01lbnUuYXBwZW5kSXRlbShzbWFydFF1b3Rlcyk7
Ci0gICAgc3Vic3RpdHV0aW9uc01lbnUuYXBwZW5kSXRlbShzbWFydERhc2hlcyk7Ci0gICAgc3Vi
c3RpdHV0aW9uc01lbnUuYXBwZW5kSXRlbShzbWFydExpbmtzKTsKLSAgICBzdWJzdGl0dXRpb25z
TWVudS5hcHBlbmRJdGVtKHRleHRSZXBsYWNlbWVudCk7Ci0KLSAgICBzdWJzdGl0dXRpb25zTWVu
dUl0ZW0uc2V0U3ViTWVudSgmc3Vic3RpdHV0aW9uc01lbnUpOwotfQotCi1zdGF0aWMgdm9pZCBj
cmVhdGVBbmRBcHBlbmRUcmFuc2Zvcm1hdGlvbnNTdWJNZW51KGNvbnN0IEhpdFRlc3RSZXN1bHQm
IHJlc3VsdCwgQ29udGV4dE1lbnVJdGVtJiB0cmFuc2Zvcm1hdGlvbnNNZW51SXRlbSkKLXsKLSAg
ICBDb250ZXh0TWVudSB0cmFuc2Zvcm1hdGlvbnNNZW51KHJlc3VsdCk7Ci0KLSAgICBDb250ZXh0
TWVudUl0ZW0gbWFrZVVwcGVyQ2FzZShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdNYWtl
VXBwZXJDYXNlLCBjb250ZXh0TWVudUl0ZW1UYWdNYWtlVXBwZXJDYXNlKCkpOwotICAgIENvbnRl
eHRNZW51SXRlbSBtYWtlTG93ZXJDYXNlKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ01h
a2VMb3dlckNhc2UsIGNvbnRleHRNZW51SXRlbVRhZ01ha2VMb3dlckNhc2UoKSk7Ci0gICAgQ29u
dGV4dE1lbnVJdGVtIGNhcGl0YWxpemUoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnQ2Fw
aXRhbGl6ZSwgY29udGV4dE1lbnVJdGVtVGFnQ2FwaXRhbGl6ZSgpKTsKLQotICAgIHRyYW5zZm9y
bWF0aW9uc01lbnUuYXBwZW5kSXRlbShtYWtlVXBwZXJDYXNlKTsKLSAgICB0cmFuc2Zvcm1hdGlv
bnNNZW51LmFwcGVuZEl0ZW0obWFrZUxvd2VyQ2FzZSk7Ci0gICAgdHJhbnNmb3JtYXRpb25zTWVu
dS5hcHBlbmRJdGVtKGNhcGl0YWxpemUpOwotCi0gICAgdHJhbnNmb3JtYXRpb25zTWVudUl0ZW0u
c2V0U3ViTWVudSgmdHJhbnNmb3JtYXRpb25zTWVudSk7Ci19Ci0KLSNlbmRpZgotCi1zdGF0aWMg
Ym9vbCBzZWxlY3Rpb25Db250YWluc1Bvc3NpYmxlV29yZChGcmFtZSogZnJhbWUpCi17Ci0gICAg
Ly8gQ3VycmVudCBhbGdvcml0aG06IGxvb2sgZm9yIGEgY2hhcmFjdGVyIHRoYXQncyBub3QganVz
dCBhIHNlcGFyYXRvci4KLSAgICBmb3IgKFRleHRJdGVyYXRvciBpdChmcmFtZS0+c2VsZWN0aW9u
KCktPnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOyAhaXQuYXRFbmQoKTsgaXQuYWR2YW5jZSgp
KSB7Ci0gICAgICAgIGludCBsZW5ndGggPSBpdC5sZW5ndGgoKTsKLSAgICAgICAgY29uc3QgVUNo
YXIqIGNoYXJhY3RlcnMgPSBpdC5jaGFyYWN0ZXJzKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgICAgICBpZiAoIShjYXRlZ29yeShjaGFyYWN0ZXJz
W2ldKSAmIChTZXBhcmF0b3JfU3BhY2UgfCBTZXBhcmF0b3JfTGluZSB8IFNlcGFyYXRvcl9QYXJh
Z3JhcGgpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi12b2lkIENvbnRleHRNZW51Ojpwb3B1bGF0ZSgpCi17Ci0gICAgQ29udGV4
dE1lbnVJdGVtIE9wZW5MaW5rSXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdPcGVu
TGluaywgY29udGV4dE1lbnVJdGVtVGFnT3BlbkxpbmsoKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVt
IE9wZW5MaW5rSW5OZXdXaW5kb3dJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ09w
ZW5MaW5rSW5OZXdXaW5kb3csIAotICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdPcGVuTGlua0lu
TmV3V2luZG93KCkpOwotICAgIENvbnRleHRNZW51SXRlbSBEb3dubG9hZEZpbGVJdGVtKEFjdGlv
blR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0Rvd25sb2FkTGlua1RvRGlzaywgCi0gICAgICAgIGNv
bnRleHRNZW51SXRlbVRhZ0Rvd25sb2FkTGlua1RvRGlzaygpKTsKLSAgICBDb250ZXh0TWVudUl0
ZW0gQ29weUxpbmtJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0NvcHlMaW5rVG9D
bGlwYm9hcmQsIAotICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdDb3B5TGlua1RvQ2xpcGJvYXJk
KCkpOwotICAgIENvbnRleHRNZW51SXRlbSBPcGVuSW1hZ2VJbk5ld1dpbmRvd0l0ZW0oQWN0aW9u
VHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnT3BlbkltYWdlSW5OZXdXaW5kb3csIAotICAgICAgICBj
b250ZXh0TWVudUl0ZW1UYWdPcGVuSW1hZ2VJbk5ld1dpbmRvdygpKTsKLSAgICBDb250ZXh0TWVu
dUl0ZW0gRG93bmxvYWRJbWFnZUl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnRG93
bmxvYWRJbWFnZVRvRGlzaywgCi0gICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ0Rvd25sb2FkSW1h
Z2VUb0Rpc2soKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIENvcHlJbWFnZUl0ZW0oQWN0aW9uVHlw
ZSwgQ29udGV4dE1lbnVJdGVtVGFnQ29weUltYWdlVG9DbGlwYm9hcmQsIAotICAgICAgICBjb250
ZXh0TWVudUl0ZW1UYWdDb3B5SW1hZ2VUb0NsaXBib2FyZCgpKTsKLSAgICBDb250ZXh0TWVudUl0
ZW0gT3Blbk1lZGlhSW5OZXdXaW5kb3dJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRh
Z09wZW5NZWRpYUluTmV3V2luZG93LCBTdHJpbmcoKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIENv
cHlNZWRpYUxpbmtJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0NvcHlNZWRpYUxp
bmtUb0NsaXBib2FyZCwgCi0gICAgICAgIFN0cmluZygpKTsKLSAgICBDb250ZXh0TWVudUl0ZW0g
TWVkaWFQbGF5UGF1c2UoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnTWVkaWFQbGF5UGF1
c2UsIAotICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdNZWRpYVBsYXkoKSk7Ci0gICAgQ29udGV4
dE1lbnVJdGVtIE1lZGlhTXV0ZShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdNZWRpYU11
dGUsIAotICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdNZWRpYU11dGUoKSk7Ci0gICAgQ29udGV4
dE1lbnVJdGVtIFRvZ2dsZU1lZGlhQ29udHJvbHMoQ2hlY2thYmxlQWN0aW9uVHlwZSwgQ29udGV4
dE1lbnVJdGVtVGFnVG9nZ2xlTWVkaWFDb250cm9scywgCi0gICAgICAgIGNvbnRleHRNZW51SXRl
bVRhZ1RvZ2dsZU1lZGlhQ29udHJvbHMoKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIFRvZ2dsZU1l
ZGlhTG9vcChDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdUb2dnbGVNZWRp
YUxvb3AsIAotICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdUb2dnbGVNZWRpYUxvb3AoKSk7Ci0g
ICAgQ29udGV4dE1lbnVJdGVtIEVudGVyVmlkZW9GdWxsc2NyZWVuKEFjdGlvblR5cGUsIENvbnRl
eHRNZW51SXRlbVRhZ0VudGVyVmlkZW9GdWxsc2NyZWVuLCAKLSAgICAgICAgY29udGV4dE1lbnVJ
dGVtVGFnRW50ZXJWaWRlb0Z1bGxzY3JlZW4oKSk7Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgIENv
bnRleHRNZW51SXRlbSBTZWFyY2hTcG90bGlnaHRJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51
SXRlbVRhZ1NlYXJjaEluU3BvdGxpZ2h0LCAKLSAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnU2Vh
cmNoSW5TcG90bGlnaHQoKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIExvb2tJbkRpY3Rpb25hcnlJ
dGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0xvb2tVcEluRGljdGlvbmFyeSwgCi0g
ICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ0xvb2tVcEluRGljdGlvbmFyeSgpKTsKLSNlbmRpZgot
I2lmICFQTEFURk9STShHVEspCi0gICAgQ29udGV4dE1lbnVJdGVtIFNlYXJjaFdlYkl0ZW0oQWN0
aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU2VhcmNoV2ViLCBjb250ZXh0TWVudUl0ZW1UYWdT
ZWFyY2hXZWIoKSk7Ci0jZW5kaWYKLSAgICBDb250ZXh0TWVudUl0ZW0gQ29weUl0ZW0oQWN0aW9u
VHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnQ29weSwgY29udGV4dE1lbnVJdGVtVGFnQ29weSgpKTsK
LSAgICBDb250ZXh0TWVudUl0ZW0gQmFja0l0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVt
VGFnR29CYWNrLCBjb250ZXh0TWVudUl0ZW1UYWdHb0JhY2soKSk7Ci0gICAgQ29udGV4dE1lbnVJ
dGVtIEZvcndhcmRJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0dvRm9yd2FyZCwg
IGNvbnRleHRNZW51SXRlbVRhZ0dvRm9yd2FyZCgpKTsKLSAgICBDb250ZXh0TWVudUl0ZW0gU3Rv
cEl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU3RvcCwgY29udGV4dE1lbnVJdGVt
VGFnU3RvcCgpKTsKLSAgICBDb250ZXh0TWVudUl0ZW0gUmVsb2FkSXRlbShBY3Rpb25UeXBlLCBD
b250ZXh0TWVudUl0ZW1UYWdSZWxvYWQsIGNvbnRleHRNZW51SXRlbVRhZ1JlbG9hZCgpKTsKLSAg
ICBDb250ZXh0TWVudUl0ZW0gT3BlbkZyYW1lSXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0
ZW1UYWdPcGVuRnJhbWVJbk5ld1dpbmRvdywgCi0gICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ09w
ZW5GcmFtZUluTmV3V2luZG93KCkpOwotICAgIENvbnRleHRNZW51SXRlbSBOb0d1ZXNzZXNJdGVt
KEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ05vR3Vlc3Nlc0ZvdW5kLCAKLSAgICAgICAg
Y29udGV4dE1lbnVJdGVtVGFnTm9HdWVzc2VzRm91bmQoKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVt
IElnbm9yZVNwZWxsaW5nSXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdJZ25vcmVT
cGVsbGluZywgCi0gICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ0lnbm9yZVNwZWxsaW5nKCkpOwot
ICAgIENvbnRleHRNZW51SXRlbSBMZWFyblNwZWxsaW5nSXRlbShBY3Rpb25UeXBlLCBDb250ZXh0
TWVudUl0ZW1UYWdMZWFyblNwZWxsaW5nLCAKLSAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnTGVh
cm5TcGVsbGluZygpKTsKLSAgICBDb250ZXh0TWVudUl0ZW0gSWdub3JlR3JhbW1hckl0ZW0oQWN0
aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnSWdub3JlR3JhbW1hciwgCi0gICAgICAgIGNvbnRl
eHRNZW51SXRlbVRhZ0lnbm9yZUdyYW1tYXIoKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIEN1dEl0
ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnQ3V0LCBjb250ZXh0TWVudUl0ZW1UYWdD
dXQoKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIFBhc3RlSXRlbShBY3Rpb25UeXBlLCBDb250ZXh0
TWVudUl0ZW1UYWdQYXN0ZSwgY29udGV4dE1lbnVJdGVtVGFnUGFzdGUoKSk7Ci0jaWYgUExBVEZP
Uk0oR1RLKQotICAgIENvbnRleHRNZW51SXRlbSBEZWxldGVJdGVtKEFjdGlvblR5cGUsIENvbnRl
eHRNZW51SXRlbVRhZ0RlbGV0ZSwgY29udGV4dE1lbnVJdGVtVGFnRGVsZXRlKCkpOwotICAgIENv
bnRleHRNZW51SXRlbSBTZWxlY3RBbGxJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRh
Z1NlbGVjdEFsbCwgY29udGV4dE1lbnVJdGVtVGFnU2VsZWN0QWxsKCkpOwotI2VuZGlmCi0gICAg
Ci0gICAgSGl0VGVzdFJlc3VsdCByZXN1bHQgPSBoaXRUZXN0UmVzdWx0KCk7Ci0gICAgCi0gICAg
Tm9kZSogbm9kZSA9IG1faGl0VGVzdFJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKTsKLSAgICBp
ZiAoIW5vZGUpCi0gICAgICAgIHJldHVybjsKLSNpZiBQTEFURk9STShHVEspCi0gICAgaWYgKCFy
ZXN1bHQuaXNDb250ZW50RWRpdGFibGUoKSAmJiAobm9kZS0+aXNFbGVtZW50Tm9kZSgpICYmIHN0
YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkpCi0gICAg
ICAgIHJldHVybjsKLSNlbmRpZgotICAgIEZyYW1lKiBmcmFtZSA9IG5vZGUtPmRvY3VtZW50KCkt
PmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFy
ZXN1bHQuaXNDb250ZW50RWRpdGFibGUoKSkgewotICAgICAgICBGcmFtZUxvYWRlciogbG9hZGVy
ID0gZnJhbWUtPmxvYWRlcigpOwotICAgICAgICBLVVJMIGxpbmtVUkwgPSByZXN1bHQuYWJzb2x1
dGVMaW5rVVJMKCk7Ci0gICAgICAgIGlmICghbGlua1VSTC5pc0VtcHR5KCkpIHsKLSAgICAgICAg
ICAgIGlmIChsb2FkZXItPmNhbkhhbmRsZVJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0KGxpbmtVUkwp
KSkgewotICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oT3BlbkxpbmtJdGVtKTsKLSAgICAgICAg
ICAgICAgICBhcHBlbmRJdGVtKE9wZW5MaW5rSW5OZXdXaW5kb3dJdGVtKTsKLSAgICAgICAgICAg
ICAgICBhcHBlbmRJdGVtKERvd25sb2FkRmlsZUl0ZW0pOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgYXBwZW5kSXRlbShDb3B5TGlua0l0ZW0pOwotICAgICAgICB9Ci0KLSAgICAgICAgS1VS
TCBpbWFnZVVSTCA9IHJlc3VsdC5hYnNvbHV0ZUltYWdlVVJMKCk7Ci0gICAgICAgIGlmICghaW1h
Z2VVUkwuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBpZiAoIWxpbmtVUkwuaXNFbXB0eSgpKQot
ICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSk7Ci0KLSAgICAgICAg
ICAgIGFwcGVuZEl0ZW0oT3BlbkltYWdlSW5OZXdXaW5kb3dJdGVtKTsKLSAgICAgICAgICAgIGFw
cGVuZEl0ZW0oRG93bmxvYWRJbWFnZUl0ZW0pOwotICAgICAgICAgICAgaWYgKGltYWdlVVJMLmlz
TG9jYWxGaWxlKCkgfHwgbV9oaXRUZXN0UmVzdWx0LmltYWdlKCkpCi0gICAgICAgICAgICAgICAg
YXBwZW5kSXRlbShDb3B5SW1hZ2VJdGVtKTsKLSAgICAgICAgfQotCi0gICAgICAgIEtVUkwgbWVk
aWFVUkwgPSByZXN1bHQuYWJzb2x1dGVNZWRpYVVSTCgpOwotICAgICAgICBpZiAoIW1lZGlhVVJM
LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgaWYgKCFsaW5rVVJMLmlzRW1wdHkoKSB8fCAhaW1h
Z2VVUkwuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0
ZW0oKSk7Ci0KLSAgICAgICAgICAgIGFwcGVuZEl0ZW0oTWVkaWFQbGF5UGF1c2UpOwotICAgICAg
ICAgICAgYXBwZW5kSXRlbShNZWRpYU11dGUpOwotICAgICAgICAgICAgYXBwZW5kSXRlbShUb2dn
bGVNZWRpYUNvbnRyb2xzKTsKLSAgICAgICAgICAgIGFwcGVuZEl0ZW0oVG9nZ2xlTWVkaWFMb29w
KTsKLSAgICAgICAgICAgIGFwcGVuZEl0ZW0oRW50ZXJWaWRlb0Z1bGxzY3JlZW4pOwotCi0gICAg
ICAgICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCkpOwotICAgICAgICAgICAgYXBwZW5k
SXRlbShDb3B5TWVkaWFMaW5rSXRlbSk7Ci0gICAgICAgICAgICBhcHBlbmRJdGVtKE9wZW5NZWRp
YUluTmV3V2luZG93SXRlbSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaW1hZ2VVUkwuaXNF
bXB0eSgpICYmIGxpbmtVUkwuaXNFbXB0eSgpICYmIG1lZGlhVVJMLmlzRW1wdHkoKSkgewotICAg
ICAgICAgICAgaWYgKHJlc3VsdC5pc1NlbGVjdGVkKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAo
c2VsZWN0aW9uQ29udGFpbnNQb3NzaWJsZVdvcmQoZnJhbWUpKSB7Ci0jaWYgUExBVEZPUk0oTUFD
KQotICAgICAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKFNlYXJjaFNwb3RsaWdodEl0ZW0pOwot
I2VuZGlmCi0jaWYgIVBMQVRGT1JNKEdUSykKLSAgICAgICAgICAgICAgICAgICAgYXBwZW5kSXRl
bShTZWFyY2hXZWJJdGVtKTsKLSAgICAgICAgICAgICAgICAgICAgYXBwZW5kSXRlbSgqc2VwYXJh
dG9ySXRlbSgpKTsKLSNlbmRpZgotI2lmIFBMQVRGT1JNKE1BQykKLSAgICAgICAgICAgICAgICAg
ICAgYXBwZW5kSXRlbShMb29rSW5EaWN0aW9uYXJ5SXRlbSk7Ci0gICAgICAgICAgICAgICAgICAg
IGFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSk7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgYXBwZW5kSXRlbShDb3B5SXRlbSk7Ci0jaWYgUExBVEZPUk0oTUFD
KQotICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSk7Ci0gICAgICAg
ICAgICAgICAgQ29udGV4dE1lbnVJdGVtIFNwZWVjaE1lbnVJdGVtKFN1Ym1lbnVUeXBlLCBDb250
ZXh0TWVudUl0ZW1UYWdTcGVlY2hNZW51LCBjb250ZXh0TWVudUl0ZW1UYWdTcGVlY2hNZW51KCkp
OwotICAgICAgICAgICAgICAgIGNyZWF0ZUFuZEFwcGVuZFNwZWVjaFN1Yk1lbnUobV9oaXRUZXN0
UmVzdWx0LCBTcGVlY2hNZW51SXRlbSk7Ci0gICAgICAgICAgICAgICAgYXBwZW5kSXRlbShTcGVl
Y2hNZW51SXRlbSk7Ci0jZW5kaWYgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICB9IGVsc2Ug
ewotI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgICAgICAgICAgICAgaWYgKCEoZnJhbWUtPnBh
Z2UoKSAmJiBmcmFtZS0+cGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmhhc0luc3BlY3Rv
ckZyb250ZW5kQ2xpZW50KCkpKSB7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBpZiAoZnJhbWUt
PnBhZ2UoKSAmJiBmcmFtZS0+cGFnZSgpLT5iYWNrRm9yd2FyZCgpLT5jYW5Hb0JhY2tPckZvcndh
cmQoLTEpKQotICAgICAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKEJhY2tJdGVtKTsKLQotICAg
ICAgICAgICAgICAgIGlmIChmcmFtZS0+cGFnZSgpICYmIGZyYW1lLT5wYWdlKCktPmJhY2tGb3J3
YXJkKCktPmNhbkdvQmFja09yRm9yd2FyZCgxKSkKLSAgICAgICAgICAgICAgICAgICAgYXBwZW5k
SXRlbShGb3J3YXJkSXRlbSk7Ci0KLSAgICAgICAgICAgICAgICAvLyB1c2UgaXNMb2FkaW5nSW5B
UElTZW5zZSByYXRoZXIgdGhhbiBpc0xvYWRpbmcgYmVjYXVzZSBTdG9wL1JlbG9hZCBhcmUKLSAg
ICAgICAgICAgICAgICAvLyBpbnRlbmRlZCB0byBtYXRjaCBXZWJLaXQncyBBUEksIG5vdCBXZWJD
b3JlJ3MgaW50ZXJuYWwgbm90aW9uIG9mIGxvYWRpbmcgc3RhdHVzCi0gICAgICAgICAgICAgICAg
aWYgKGxvYWRlci0+ZG9jdW1lbnRMb2FkZXIoKS0+aXNMb2FkaW5nSW5BUElTZW5zZSgpKQotICAg
ICAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKFN0b3BJdGVtKTsKLSAgICAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oUmVsb2FkSXRlbSk7Ci0jaWYgRU5B
QkxFKElOU1BFQ1RPUikKLSAgICAgICAgICAgICAgICB9Ci0jZW5kaWYKLQotICAgICAgICAgICAg
ICAgIGlmIChmcmFtZS0+cGFnZSgpICYmIGZyYW1lICE9IGZyYW1lLT5wYWdlKCktPm1haW5GcmFt
ZSgpKQotICAgICAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKE9wZW5GcmFtZUl0ZW0pOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSBlbHNlIHsgLy8gTWFrZSBhbiBlZGl0aW5nIGNv
bnRleHQgbWVudQotICAgICAgICBTZWxlY3Rpb25Db250cm9sbGVyKiBzZWxlY3Rpb24gPSBmcmFt
ZS0+c2VsZWN0aW9uKCk7Ci0gICAgICAgIGJvb2wgaW5QYXNzd29yZEZpZWxkID0gc2VsZWN0aW9u
LT5pc0luUGFzc3dvcmRGaWVsZCgpOwotICAgICAgICBib29sIHNwZWxsQ2hlY2tpbmdFbmFibGVk
ID0gZnJhbWUtPmVkaXRvcigpLT5pc1NwZWxsQ2hlY2tpbmdFbmFibGVkRm9yKG5vZGUpOwotICAg
ICAgICAKLSAgICAgICAgaWYgKCFpblBhc3N3b3JkRmllbGQgJiYgc3BlbGxDaGVja2luZ0VuYWJs
ZWQpIHsKLSAgICAgICAgICAgIC8vIENvbnNpZGVyIGFkZGluZyBzcGVsbGluZy1yZWxhdGVkIG9y
IGdyYW1tYXItcmVsYXRlZCBjb250ZXh0IG1lbnUgaXRlbXMgKG5ldmVyIGJvdGgsIHNpbmNlIGEg
c2luZ2xlIHNlbGVjdGVkIHJhbmdlCi0gICAgICAgICAgICAvLyBpcyBuZXZlciBjb25zaWRlcmVk
IGEgbWlzc3BlbGxpbmcgYW5kIGJhZCBncmFtbWFyIGF0IHRoZSBzYW1lIHRpbWUpCi0gICAgICAg
ICAgICBib29sIG1pc3NwZWxsaW5nOwotICAgICAgICAgICAgYm9vbCBiYWRHcmFtbWFyOwotICAg
ICAgICAgICAgVmVjdG9yPFN0cmluZz4gZ3Vlc3NlcyA9IGZyYW1lLT5lZGl0b3IoKS0+Z3Vlc3Nl
c0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWxTZWxlY3Rpb24obWlzc3BlbGxpbmcsIGJhZEdy
YW1tYXIpOwotICAgICAgICAgICAgaWYgKG1pc3NwZWxsaW5nIHx8IGJhZEdyYW1tYXIpIHsKLSAg
ICAgICAgICAgICAgICBzaXplX3Qgc2l6ZSA9IGd1ZXNzZXMuc2l6ZSgpOwotICAgICAgICAgICAg
ICAgIGlmIChzaXplID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUncyBi
YWQgZ3JhbW1hciBidXQgbm8gc3VnZ2VzdGlvbnMgKGUuZy4sIHJlcGVhdGVkIHdvcmQpLCBqdXN0
IGxlYXZlIG9mZiB0aGUgc3VnZ2VzdGlvbnMKLSAgICAgICAgICAgICAgICAgICAgLy8gbGlzdCBh
bmQgdHJhaWxpbmcgc2VwYXJhdG9yIHJhdGhlciB0aGFuIGFkZGluZyBhICJObyBHdWVzc2VzIEZv
dW5kIiBpdGVtIChtYXRjaGVzIEFwcEtpdCkKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1pc3Nw
ZWxsaW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKE5vR3Vlc3Nlc0l0
ZW0pOwotICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kSXRlbSgqc2VwYXJhdG9ySXRlbSgp
KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyAmZ3Vlc3MgPSBndWVzc2VzW2ldOwot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFndWVzcy5pc0VtcHR5KCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBDb250ZXh0TWVudUl0ZW0gaXRlbShBY3Rpb25UeXBlLCBDb250
ZXh0TWVudUl0ZW1UYWdTcGVsbGluZ0d1ZXNzLCBndWVzcyk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXBwZW5kSXRlbShpdGVtKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKCpzZXBh
cmF0b3JJdGVtKCkpOyAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChtaXNzcGVsbGluZykgewotICAgICAg
ICAgICAgICAgICAgICBhcHBlbmRJdGVtKElnbm9yZVNwZWxsaW5nSXRlbSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGFwcGVuZEl0ZW0oTGVhcm5TcGVsbGluZ0l0ZW0pOwotICAgICAgICAgICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKElnbm9yZUdyYW1tYXJJdGVt
KTsKLSAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCkpOwotI2lmIFBM
QVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJV
SUxESU5HX09OX0xFT1BBUkQpCi0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
IC8vIElmIHRoZSBzdHJpbmcgd2FzIGF1dG9jb3JyZWN0ZWQsIGdlbmVyYXRlIGEgY29udGV4dHVh
bCBtZW51IGl0ZW0gYWxsb3dpbmcgaXQgdG8gYmUgY2hhbmdlZCBiYWNrLgotICAgICAgICAgICAg
ICAgIFN0cmluZyByZXBsYWNlZFN0cmluZyA9IHJlc3VsdC5yZXBsYWNlZFN0cmluZygpOwotICAg
ICAgICAgICAgICAgIGlmICghcmVwbGFjZWRTdHJpbmcuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIENvbnRleHRNZW51SXRlbSBpdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRl
bVRhZ0NoYW5nZUJhY2ssIGNvbnRleHRNZW51SXRlbVRhZ0NoYW5nZUJhY2socmVwbGFjZWRTdHJp
bmcpKTsKLSAgICAgICAgICAgICAgICAgICAgYXBwZW5kSXRlbShpdGVtKTsKLSAgICAgICAgICAg
ICAgICAgICAgYXBwZW5kSXRlbSgqc2VwYXJhdG9ySXRlbSgpKTsKLSAgICAgICAgICAgICAgICB9
Ci0jZW5kaWYKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIEZyYW1lTG9hZGVy
KiBsb2FkZXIgPSBmcmFtZS0+bG9hZGVyKCk7Ci0gICAgICAgIEtVUkwgbGlua1VSTCA9IHJlc3Vs
dC5hYnNvbHV0ZUxpbmtVUkwoKTsKLSAgICAgICAgaWYgKCFsaW5rVVJMLmlzRW1wdHkoKSkgewot
ICAgICAgICAgICAgaWYgKGxvYWRlci0+Y2FuSGFuZGxlUmVxdWVzdChSZXNvdXJjZVJlcXVlc3Qo
bGlua1VSTCkpKSB7Ci0gICAgICAgICAgICAgICAgYXBwZW5kSXRlbShPcGVuTGlua0l0ZW0pOwot
ICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oT3BlbkxpbmtJbk5ld1dpbmRvd0l0ZW0pOwotICAg
ICAgICAgICAgICAgIGFwcGVuZEl0ZW0oRG93bmxvYWRGaWxlSXRlbSk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBhcHBlbmRJdGVtKENvcHlMaW5rSXRlbSk7Ci0gICAgICAgICAgICBhcHBl
bmRJdGVtKCpzZXBhcmF0b3JJdGVtKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJlc3Vs
dC5pc1NlbGVjdGVkKCkgJiYgIWluUGFzc3dvcmRGaWVsZCAmJiBzZWxlY3Rpb25Db250YWluc1Bv
c3NpYmxlV29yZChmcmFtZSkpIHsKLSNpZiBQTEFURk9STShNQUMpCi0gICAgICAgICAgICBhcHBl
bmRJdGVtKFNlYXJjaFNwb3RsaWdodEl0ZW0pOwotI2VuZGlmCi0jaWYgIVBMQVRGT1JNKEdUSykK
LSAgICAgICAgICAgIGFwcGVuZEl0ZW0oU2VhcmNoV2ViSXRlbSk7Ci0gICAgICAgICAgICBhcHBl
bmRJdGVtKCpzZXBhcmF0b3JJdGVtKCkpOwotI2VuZGlmCi0gICAgIAotI2lmIFBMQVRGT1JNKE1B
QykKLSAgICAgICAgICAgIGFwcGVuZEl0ZW0oTG9va0luRGljdGlvbmFyeUl0ZW0pOwotICAgICAg
ICAgICAgYXBwZW5kSXRlbSgqc2VwYXJhdG9ySXRlbSgpKTsKLSNlbmRpZgotICAgICAgICB9Ci0K
LSAgICAgICAgYXBwZW5kSXRlbShDdXRJdGVtKTsKLSAgICAgICAgYXBwZW5kSXRlbShDb3B5SXRl
bSk7Ci0gICAgICAgIGFwcGVuZEl0ZW0oUGFzdGVJdGVtKTsKLSNpZiBQTEFURk9STShHVEspCi0g
ICAgICAgIGFwcGVuZEl0ZW0oRGVsZXRlSXRlbSk7Ci0gICAgICAgIGFwcGVuZEl0ZW0oKnNlcGFy
YXRvckl0ZW0oKSk7Ci0gICAgICAgIGFwcGVuZEl0ZW0oU2VsZWN0QWxsSXRlbSk7Ci0jZW5kaWYK
LQotICAgICAgICBpZiAoIWluUGFzc3dvcmRGaWVsZCkgewotICAgICAgICAgICAgYXBwZW5kSXRl
bSgqc2VwYXJhdG9ySXRlbSgpKTsKLSNpZm5kZWYgQlVJTERJTkdfT05fVElHRVIKLSNpZiAhUExB
VEZPUk0oR1RLKQotICAgICAgICAgICAgQ29udGV4dE1lbnVJdGVtIFNwZWxsaW5nQW5kR3JhbW1h
ck1lbnVJdGVtKFN1Ym1lbnVUeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTcGVsbGluZ01lbnUsIAot
ICAgICAgICAgICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ1NwZWxsaW5nTWVudSgpKTsKLSAgICAg
ICAgICAgIGNyZWF0ZUFuZEFwcGVuZFNwZWxsaW5nQW5kR3JhbW1hclN1Yk1lbnUobV9oaXRUZXN0
UmVzdWx0LCBTcGVsbGluZ0FuZEdyYW1tYXJNZW51SXRlbSk7Ci0gICAgICAgICAgICBhcHBlbmRJ
dGVtKFNwZWxsaW5nQW5kR3JhbW1hck1lbnVJdGVtKTsKLSNlbmRpZgotI2Vsc2UKLSAgICAgICAg
ICAgIENvbnRleHRNZW51SXRlbSBTcGVsbGluZ01lbnVJdGVtKFN1Ym1lbnVUeXBlLCBDb250ZXh0
TWVudUl0ZW1UYWdTcGVsbGluZ01lbnUsIAotICAgICAgICAgICAgICAgIGNvbnRleHRNZW51SXRl
bVRhZ1NwZWxsaW5nTWVudSgpKTsKLSAgICAgICAgICAgIGNyZWF0ZUFuZEFwcGVuZFNwZWxsaW5n
U3ViTWVudShtX2hpdFRlc3RSZXN1bHQsIFNwZWxsaW5nTWVudUl0ZW0pOwotICAgICAgICAgICAg
YXBwZW5kSXRlbShTcGVsbGluZ01lbnVJdGVtKTsKLSNlbmRpZgotI2lmIFBMQVRGT1JNKE1BQykg
JiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xF
T1BBUkQpCi0gICAgICAgICAgICBDb250ZXh0TWVudUl0ZW0gc3Vic3RpdHV0aW9uc01lbnVJdGVt
KFN1Ym1lbnVUeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTdWJzdGl0dXRpb25zTWVudSwgCi0gICAg
ICAgICAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnU3Vic3RpdHV0aW9uc01lbnUoKSk7Ci0gICAg
ICAgICAgICBjcmVhdGVBbmRBcHBlbmRTdWJzdGl0dXRpb25zU3ViTWVudShtX2hpdFRlc3RSZXN1
bHQsIHN1YnN0aXR1dGlvbnNNZW51SXRlbSk7Ci0gICAgICAgICAgICBhcHBlbmRJdGVtKHN1YnN0
aXR1dGlvbnNNZW51SXRlbSk7Ci0gICAgICAgICAgICBDb250ZXh0TWVudUl0ZW0gdHJhbnNmb3Jt
YXRpb25zTWVudUl0ZW0oU3VibWVudVR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1RyYW5zZm9ybWF0
aW9uc01lbnUsIAotICAgICAgICAgICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ1RyYW5zZm9ybWF0
aW9uc01lbnUoKSk7Ci0gICAgICAgICAgICBjcmVhdGVBbmRBcHBlbmRUcmFuc2Zvcm1hdGlvbnNT
dWJNZW51KG1faGl0VGVzdFJlc3VsdCwgdHJhbnNmb3JtYXRpb25zTWVudUl0ZW0pOwotICAgICAg
ICAgICAgYXBwZW5kSXRlbSh0cmFuc2Zvcm1hdGlvbnNNZW51SXRlbSk7Ci0jZW5kaWYKLSNpZiBQ
TEFURk9STShHVEspCi0gICAgICAgICAgICBib29sIHNob3VsZFNob3dGb250TWVudSA9IGZyYW1l
LT5lZGl0b3IoKS0+Y2FuRWRpdFJpY2hseSgpOwotI2Vsc2UKLSAgICAgICAgICAgIGJvb2wgc2hv
dWxkU2hvd0ZvbnRNZW51ID0gdHJ1ZTsKLSNlbmRpZgotICAgICAgICAgICAgaWYgKHNob3VsZFNo
b3dGb250TWVudSkgewotICAgICAgICAgICAgICAgIENvbnRleHRNZW51SXRlbSBGb250TWVudUl0
ZW0oU3VibWVudVR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0ZvbnRNZW51LCAKLSAgICAgICAgICAg
ICAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnRm9udE1lbnUoKSk7Ci0gICAgICAgICAgICAgICAg
Y3JlYXRlQW5kQXBwZW5kRm9udFN1Yk1lbnUobV9oaXRUZXN0UmVzdWx0LCBGb250TWVudUl0ZW0p
OwotICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oRm9udE1lbnVJdGVtKTsKLSAgICAgICAgICAg
IH0KLSNpZiBQTEFURk9STShNQUMpCi0gICAgICAgICAgICBDb250ZXh0TWVudUl0ZW0gU3BlZWNo
TWVudUl0ZW0oU3VibWVudVR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1NwZWVjaE1lbnUsIGNvbnRl
eHRNZW51SXRlbVRhZ1NwZWVjaE1lbnUoKSk7Ci0gICAgICAgICAgICBjcmVhdGVBbmRBcHBlbmRT
cGVlY2hTdWJNZW51KG1faGl0VGVzdFJlc3VsdCwgU3BlZWNoTWVudUl0ZW0pOwotICAgICAgICAg
ICAgYXBwZW5kSXRlbShTcGVlY2hNZW51SXRlbSk7Ci0jZW5kaWYKLSNpZiAhUExBVEZPUk0oR1RL
KQotICAgICAgICAgICAgQ29udGV4dE1lbnVJdGVtIFdyaXRpbmdEaXJlY3Rpb25NZW51SXRlbShT
dWJtZW51VHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnV3JpdGluZ0RpcmVjdGlvbk1lbnUsIAotICAg
ICAgICAgICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ1dyaXRpbmdEaXJlY3Rpb25NZW51KCkpOwot
ICAgICAgICAgICAgY3JlYXRlQW5kQXBwZW5kV3JpdGluZ0RpcmVjdGlvblN1Yk1lbnUobV9oaXRU
ZXN0UmVzdWx0LCBXcml0aW5nRGlyZWN0aW9uTWVudUl0ZW0pOwotICAgICAgICAgICAgYXBwZW5k
SXRlbShXcml0aW5nRGlyZWN0aW9uTWVudUl0ZW0pOwotICAgICAgICAgICAgaWYgKFBhZ2UqIHBh
Z2UgPSBmcmFtZS0+cGFnZSgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKFNldHRpbmdzKiBzZXR0
aW5ncyA9IHBhZ2UtPnNldHRpbmdzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgYm9vbCBpbmNs
dWRlVGV4dERpcmVjdGlvblN1Ym1lbnUgPSBzZXR0aW5ncy0+dGV4dERpcmVjdGlvblN1Ym1lbnVJ
bmNsdXNpb25CZWhhdmlvcigpID09IFRleHREaXJlY3Rpb25TdWJtZW51QWx3YXlzSW5jbHVkZWQK
LSAgICAgICAgICAgICAgICAgICAgICAgIHx8IChzZXR0aW5ncy0+dGV4dERpcmVjdGlvblN1Ym1l
bnVJbmNsdXNpb25CZWhhdmlvcigpID09IFRleHREaXJlY3Rpb25TdWJtZW51QXV0b21hdGljYWxs
eUluY2x1ZGVkICYmIGZyYW1lLT5lZGl0b3IoKS0+aGFzQmlkaVNlbGVjdGlvbigpKTsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKGluY2x1ZGVUZXh0RGlyZWN0aW9uU3VibWVudSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgQ29udGV4dE1lbnVJdGVtIFRleHREaXJlY3Rpb25NZW51SXRlbShT
dWJtZW51VHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnVGV4dERpcmVjdGlvbk1lbnUsIAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ1RleHREaXJlY3Rpb25NZW51
KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlQW5kQXBwZW5kVGV4dERpcmVjdGlv
blN1Yk1lbnUobV9oaXRUZXN0UmVzdWx0LCBUZXh0RGlyZWN0aW9uTWVudUl0ZW0pOwotICAgICAg
ICAgICAgICAgICAgICAgICAgYXBwZW5kSXRlbShUZXh0RGlyZWN0aW9uTWVudUl0ZW0pOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotI2Vu
ZGlmCi0gICAgICAgIH0KLSAgICB9Ci19Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SKQotdm9pZCBD
b250ZXh0TWVudTo6YWRkSW5zcGVjdEVsZW1lbnRJdGVtKCkKLXsKLSAgICBOb2RlKiBub2RlID0g
bV9oaXRUZXN0UmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpOwotICAgIGlmICghbm9kZSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgRnJhbWUqIGZyYW1lID0gbm9kZS0+ZG9jdW1lbnQoKS0+ZnJh
bWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBQYWdlKiBwYWdl
ID0gZnJhbWUtPnBhZ2UoKTsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmICghcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBDb250ZXh0TWVudUl0ZW0gSW5zcGVjdEVsZW1lbnRJdGVtKEFjdGlvblR5cGUsIENvbnRleHRN
ZW51SXRlbVRhZ0luc3BlY3RFbGVtZW50LCBjb250ZXh0TWVudUl0ZW1UYWdJbnNwZWN0RWxlbWVu
dCgpKTsKLSAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCkpOwotICAgIGFwcGVuZEl0ZW0o
SW5zcGVjdEVsZW1lbnRJdGVtKTsKLX0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQotCi12
b2lkIENvbnRleHRNZW51OjpjaGVja09yRW5hYmxlSWZOZWVkZWQoQ29udGV4dE1lbnVJdGVtJiBp
dGVtKSBjb25zdAotewotICAgIGlmIChpdGVtLnR5cGUoKSA9PSBTZXBhcmF0b3JUeXBlKQotICAg
ICAgICByZXR1cm47Ci0gICAgCi0gICAgRnJhbWUqIGZyYW1lID0gbV9oaXRUZXN0UmVzdWx0Lmlu
bmVyTm9uU2hhcmVkTm9kZSgpLT5kb2N1bWVudCgpLT5mcmFtZSgpOwotICAgIGlmICghZnJhbWUp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEN1c3RvbSBpdGVtcyBhbHJlYWR5IGhhdmUgcHJv
cGVyIGNoZWNrZWQgYW5kIGVuYWJsZWQgdmFsdWVzLgotICAgIGlmIChDb250ZXh0TWVudUl0ZW1C
YXNlQ3VzdG9tVGFnIDw9IGl0ZW0uYWN0aW9uKCkgJiYgaXRlbS5hY3Rpb24oKSA8PSBDb250ZXh0
TWVudUl0ZW1MYXN0Q3VzdG9tVGFnKQotICAgICAgICByZXR1cm47Ci0KLSAgICBib29sIHNob3Vs
ZEVuYWJsZSA9IHRydWU7Ci0gICAgYm9vbCBzaG91bGRDaGVjayA9IGZhbHNlOyAKLQotICAgIHN3
aXRjaCAoaXRlbS5hY3Rpb24oKSkgewotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0No
ZWNrU3BlbGxpbmc6Ci0gICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+ZWRpdG9yKCkt
PmNhbkVkaXQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbnRleHRNZW51
SXRlbVRhZ0RlZmF1bHREaXJlY3Rpb246Ci0gICAgICAgICAgICBzaG91bGRDaGVjayA9IGZhbHNl
OwotICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gZmFsc2U7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdMZWZ0VG9SaWdodDoKLSAgICAgICAgY2Fz
ZSBDb250ZXh0TWVudUl0ZW1UYWdSaWdodFRvTGVmdDogewotICAgICAgICAgICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7Ci0gICAgICAgICAgICBSZWZQdHI8Q1NTU3R5bGVEZWNsYXJhdGlvbj4gc3R5
bGUgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+Y3JlYXRlQ1NTU3R5bGVEZWNsYXJhdGlvbigpOwotICAg
ICAgICAgICAgU3RyaW5nIGRpcmVjdGlvbiA9IGl0ZW0uYWN0aW9uKCkgPT0gQ29udGV4dE1lbnVJ
dGVtVGFnTGVmdFRvUmlnaHQgPyAibHRyIiA6ICJydGwiOwotICAgICAgICAgICAgc3R5bGUtPnNl
dFByb3BlcnR5KENTU1Byb3BlcnR5RGlyZWN0aW9uLCBkaXJlY3Rpb24sIGZhbHNlLCBlYyk7Ci0g
ICAgICAgICAgICBzaG91bGRDaGVjayA9IGZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0aW9uSGFzU3R5
bGUoc3R5bGUuZ2V0KCkpICE9IEZhbHNlVHJpU3RhdGU7Ci0gICAgICAgICAgICBzaG91bGRFbmFi
bGUgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBD
b250ZXh0TWVudUl0ZW1UYWdUZXh0RGlyZWN0aW9uRGVmYXVsdDogewotICAgICAgICAgICAgRWRp
dG9yOjpDb21tYW5kIGNvbW1hbmQgPSBmcmFtZS0+ZWRpdG9yKCktPmNvbW1hbmQoIk1ha2VUZXh0
V3JpdGluZ0RpcmVjdGlvbk5hdHVyYWwiKTsKLSAgICAgICAgICAgIHNob3VsZENoZWNrID0gY29t
bWFuZC5zdGF0ZSgpID09IFRydWVUcmlTdGF0ZTsKLSAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9
IGNvbW1hbmQuaXNFbmFibGVkKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1RleHREaXJlY3Rpb25MZWZ0VG9SaWdodDogewot
ICAgICAgICAgICAgRWRpdG9yOjpDb21tYW5kIGNvbW1hbmQgPSBmcmFtZS0+ZWRpdG9yKCktPmNv
bW1hbmQoIk1ha2VUZXh0V3JpdGluZ0RpcmVjdGlvbkxlZnRUb1JpZ2h0Iik7Ci0gICAgICAgICAg
ICBzaG91bGRDaGVjayA9IGNvbW1hbmQuc3RhdGUoKSA9PSBUcnVlVHJpU3RhdGU7Ci0gICAgICAg
ICAgICBzaG91bGRFbmFibGUgPSBjb21tYW5kLmlzRW5hYmxlZCgpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdUZXh0RGlyZWN0
aW9uUmlnaHRUb0xlZnQ6IHsKLSAgICAgICAgICAgIEVkaXRvcjo6Q29tbWFuZCBjb21tYW5kID0g
ZnJhbWUtPmVkaXRvcigpLT5jb21tYW5kKCJNYWtlVGV4dFdyaXRpbmdEaXJlY3Rpb25SaWdodFRv
TGVmdCIpOwotICAgICAgICAgICAgc2hvdWxkQ2hlY2sgPSBjb21tYW5kLnN0YXRlKCkgPT0gVHJ1
ZVRyaVN0YXRlOwotICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gY29tbWFuZC5pc0VuYWJsZWQo
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ29udGV4dE1l
bnVJdGVtVGFnQ29weToKLSAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGZyYW1lLT5lZGl0b3Io
KS0+Y2FuREhUTUxDb3B5KCkgfHwgZnJhbWUtPmVkaXRvcigpLT5jYW5Db3B5KCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdDdXQ6Ci0gICAgICAg
ICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+ZWRpdG9yKCktPmNhbkRIVE1MQ3V0KCkgfHwgZnJh
bWUtPmVkaXRvcigpLT5jYW5DdXQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IENvbnRleHRNZW51SXRlbVRhZ0lnbm9yZVNwZWxsaW5nOgotICAgICAgICBjYXNlIENvbnRleHRN
ZW51SXRlbVRhZ0xlYXJuU3BlbGxpbmc6Ci0gICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFt
ZS0+c2VsZWN0aW9uKCktPmlzUmFuZ2UoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIENvbnRleHRNZW51SXRlbVRhZ1Bhc3RlOgotICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0g
ZnJhbWUtPmVkaXRvcigpLT5jYW5ESFRNTFBhc3RlKCkgfHwgZnJhbWUtPmVkaXRvcigpLT5jYW5Q
YXN0ZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0jaWYgUExBVEZPUk0oR1RLKQotICAgICAgICBj
YXNlIENvbnRleHRNZW51SXRlbVRhZ0RlbGV0ZToKLSAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9
IGZyYW1lLT5lZGl0b3IoKS0+Y2FuRGVsZXRlKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTZWxlY3RBbGw6Ci0gICAgICAgIGNhc2UgQ29udGV4
dE1lbnVJdGVtVGFnSW5wdXRNZXRob2RzOgotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRh
Z1VuaWNvZGU6Ci0gICAgICAgICAgICBzaG91bGRFbmFibGUgPSB0cnVlOwotICAgICAgICAgICAg
YnJlYWs7Ci0jZW5kaWYKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdVbmRlcmxpbmU6
IHsKLSAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgICAgICAgICAgUmVmUHRy
PENTU1N0eWxlRGVjbGFyYXRpb24+IHN0eWxlID0gZnJhbWUtPmRvY3VtZW50KCktPmNyZWF0ZUNT
U1N0eWxlRGVjbGFyYXRpb24oKTsKLSAgICAgICAgICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQ
cm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uc0luRWZmZWN0LCAidW5kZXJsaW5lIiwgZmFsc2Us
IGVjKTsKLSAgICAgICAgICAgIHNob3VsZENoZWNrID0gZnJhbWUtPmVkaXRvcigpLT5zZWxlY3Rp
b25IYXNTdHlsZShzdHlsZS5nZXQoKSkgIT0gRmFsc2VUcmlTdGF0ZTsKLSAgICAgICAgICAgIHNo
b3VsZEVuYWJsZSA9IGZyYW1lLT5lZGl0b3IoKS0+Y2FuRWRpdFJpY2hseSgpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdMb29r
VXBJbkRpY3Rpb25hcnk6Ci0gICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+c2VsZWN0
aW9uKCktPmlzUmFuZ2UoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbnRl
eHRNZW51SXRlbVRhZ0NoZWNrR3JhbW1hcldpdGhTcGVsbGluZzoKLSNpZm5kZWYgQlVJTERJTkdf
T05fVElHRVIKLSAgICAgICAgICAgIGlmIChmcmFtZS0+ZWRpdG9yKCktPmlzR3JhbW1hckNoZWNr
aW5nRW5hYmxlZCgpKQotICAgICAgICAgICAgICAgIHNob3VsZENoZWNrID0gdHJ1ZTsKLSAgICAg
ICAgICAgIHNob3VsZEVuYWJsZSA9IHRydWU7Ci0jZW5kaWYKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0l0YWxpYzogewotICAgICAgICAgICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgICAgICAgICBSZWZQdHI8Q1NTU3R5bGVEZWNsYXJhdGlv
bj4gc3R5bGUgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+Y3JlYXRlQ1NTU3R5bGVEZWNsYXJhdGlvbigp
OwotICAgICAgICAgICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFN0eWxlLCAi
aXRhbGljIiwgZmFsc2UsIGVjKTsKLSAgICAgICAgICAgIHNob3VsZENoZWNrID0gZnJhbWUtPmVk
aXRvcigpLT5zZWxlY3Rpb25IYXNTdHlsZShzdHlsZS5nZXQoKSkgIT0gRmFsc2VUcmlTdGF0ZTsK
LSAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGZyYW1lLT5lZGl0b3IoKS0+Y2FuRWRpdFJpY2hs
eSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBDb250ZXh0
TWVudUl0ZW1UYWdCb2xkOiB7Ci0gICAgICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAg
ICAgICAgICAgIFJlZlB0cjxDU1NTdHlsZURlY2xhcmF0aW9uPiBzdHlsZSA9IGZyYW1lLT5kb2N1
bWVudCgpLT5jcmVhdGVDU1NTdHlsZURlY2xhcmF0aW9uKCk7Ci0gICAgICAgICAgICBzdHlsZS0+
c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlGb250V2VpZ2h0LCAiYm9sZCIsIGZhbHNlLCBlYyk7Ci0g
ICAgICAgICAgICBzaG91bGRDaGVjayA9IGZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0aW9uSGFzU3R5
bGUoc3R5bGUuZ2V0KCkpICE9IEZhbHNlVHJpU3RhdGU7Ci0gICAgICAgICAgICBzaG91bGRFbmFi
bGUgPSBmcmFtZS0+ZWRpdG9yKCktPmNhbkVkaXRSaWNobHkoKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnT3V0bGluZToKLSAg
ICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGZhbHNlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU2hvd1NwZWxsaW5nUGFuZWw6Ci0jaWZuZGVmIEJV
SUxESU5HX09OX1RJR0VSCi0gICAgICAgICAgICBpZiAoZnJhbWUtPmVkaXRvcigpLT5zcGVsbGlu
Z1BhbmVsSXNTaG93aW5nKCkpCi0gICAgICAgICAgICAgICAgaXRlbS5zZXRUaXRsZShjb250ZXh0
TWVudUl0ZW1UYWdTaG93U3BlbGxpbmdQYW5lbChmYWxzZSkpOwotICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgIGl0ZW0uc2V0VGl0bGUoY29udGV4dE1lbnVJdGVtVGFnU2hvd1NwZWxs
aW5nUGFuZWwodHJ1ZSkpOwotI2VuZGlmCi0gICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFt
ZS0+ZWRpdG9yKCktPmNhbkVkaXQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IENvbnRleHRNZW51SXRlbVRhZ05vR3Vlc3Nlc0ZvdW5kOgotICAgICAgICAgICAgc2hvdWxkRW5h
YmxlID0gZmFsc2U7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVu
dUl0ZW1UYWdDaGVja1NwZWxsaW5nV2hpbGVUeXBpbmc6Ci0gICAgICAgICAgICBzaG91bGRDaGVj
ayA9IGZyYW1lLT5lZGl0b3IoKS0+aXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKTsK
LSAgICAgICAgICAgIGJyZWFrOwotI2lmIFBMQVRGT1JNKE1BQykKLSAgICAgICAgY2FzZSBDb250
ZXh0TWVudUl0ZW1UYWdTdWJzdGl0dXRpb25zTWVudToKLSAgICAgICAgY2FzZSBDb250ZXh0TWVu
dUl0ZW1UYWdUcmFuc2Zvcm1hdGlvbnNNZW51OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU2hvd1N1YnN0aXR1dGlvbnM6Ci0jaWYgIWRlZmluZWQo
QlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpCi0gICAg
ICAgICAgICBpZiAoZnJhbWUtPmVkaXRvcigpLT5zdWJzdGl0dXRpb25zUGFuZWxJc1Nob3dpbmco
KSkKLSAgICAgICAgICAgICAgICBpdGVtLnNldFRpdGxlKGNvbnRleHRNZW51SXRlbVRhZ1Nob3dT
dWJzdGl0dXRpb25zKGZhbHNlKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
aXRlbS5zZXRUaXRsZShjb250ZXh0TWVudUl0ZW1UYWdTaG93U3Vic3RpdHV0aW9ucyh0cnVlKSk7
Ci0gICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+ZWRpdG9yKCktPmNhbkVkaXQoKTsK
LSNlbmRpZgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVt
VGFnTWFrZVVwcGVyQ2FzZToKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdNYWtlTG93
ZXJDYXNlOgotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0NhcGl0YWxpemU6Ci0gICAg
ICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQ2hhbmdlQmFjazoKLSAgICAgICAgICAgIHNob3Vs
ZEVuYWJsZSA9IGZyYW1lLT5lZGl0b3IoKS0+Y2FuRWRpdCgpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQ29ycmVjdFNwZWxsaW5nQXV0b21hdGlj
YWxseToKLSNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJ
TkdfT05fTEVPUEFSRCkKLSAgICAgICAgICAgIHNob3VsZENoZWNrID0gZnJhbWUtPmVkaXRvcigp
LT5pc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQoKTsKLSNlbmRpZgotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU21hcnRDb3B5UGFz
dGU6Ci0jaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5H
X09OX0xFT1BBUkQpCi0gICAgICAgICAgICBzaG91bGRDaGVjayA9IGZyYW1lLT5lZGl0b3IoKS0+
c21hcnRJbnNlcnREZWxldGVFbmFibGVkKCk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1NtYXJ0UXVvdGVzOgotI2lmICFkZWZpbmVk
KEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQotICAg
ICAgICAgICAgc2hvdWxkQ2hlY2sgPSBmcmFtZS0+ZWRpdG9yKCktPmlzQXV0b21hdGljUXVvdGVT
dWJzdGl0dXRpb25FbmFibGVkKCk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1NtYXJ0RGFzaGVzOgotI2lmICFkZWZpbmVkKEJVSUxE
SU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQotICAgICAgICAg
ICAgc2hvdWxkQ2hlY2sgPSBmcmFtZS0+ZWRpdG9yKCktPmlzQXV0b21hdGljRGFzaFN1YnN0aXR1
dGlvbkVuYWJsZWQoKTsKLSNlbmRpZgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtVGFnU21hcnRMaW5rczoKLSNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9U
SUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKLSAgICAgICAgICAgIHNob3Vs
ZENoZWNrID0gZnJhbWUtPmVkaXRvcigpLT5pc0F1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVk
KCk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbnRleHRNZW51
SXRlbVRhZ1RleHRSZXBsYWNlbWVudDoKLSNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikg
JiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKLSAgICAgICAgICAgIHNob3VsZENoZWNr
ID0gZnJhbWUtPmVkaXRvcigpLT5pc0F1dG9tYXRpY1RleHRSZXBsYWNlbWVudEVuYWJsZWQoKTsK
LSNlbmRpZgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVt
VGFnU3RvcFNwZWFraW5nOgotICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gY29udHJvbGxlcigp
ICYmIGNvbnRyb2xsZXIoKS0+Y2xpZW50KCkgJiYgY29udHJvbGxlcigpLT5jbGllbnQoKS0+aXNT
cGVha2luZygpOwotICAgICAgICAgICAgYnJlYWs7Ci0jZWxzZSAvLyBQTEFURk9STShNQUMpIGVu
ZHMgaGVyZQotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1N0b3BTcGVha2luZzoKLSAg
ICAgICAgICAgIGJyZWFrOwotI2VuZGlmCi0jaWYgUExBVEZPUk0oR1RLKQotICAgICAgICBjYXNl
IENvbnRleHRNZW51SXRlbVRhZ0dvQmFjazoKLSAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGZy
YW1lLT5wYWdlKCkgJiYgZnJhbWUtPnBhZ2UoKS0+YmFja0ZvcndhcmQoKS0+Y2FuR29CYWNrT3JG
b3J3YXJkKC0xKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbnRleHRNZW51
SXRlbVRhZ0dvRm9yd2FyZDoKLSAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGZyYW1lLT5wYWdl
KCkgJiYgZnJhbWUtPnBhZ2UoKS0+YmFja0ZvcndhcmQoKS0+Y2FuR29CYWNrT3JGb3J3YXJkKDEp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU3Rv
cDoKLSAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRM
b2FkZXIoKS0+aXNMb2FkaW5nSW5BUElTZW5zZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnUmVsb2FkOgotICAgICAgICAgICAgc2hvdWxkRW5h
YmxlID0gIWZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+aXNMb2FkaW5nSW5BUElT
ZW5zZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVt
VGFnRm9udE1lbnU6Ci0gICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+ZWRpdG9yKCkt
PmNhbkVkaXRSaWNobHkoKTsKLSAgICAgICAgICAgIGJyZWFrOwotI2Vsc2UKLSAgICAgICAgY2Fz
ZSBDb250ZXh0TWVudUl0ZW1UYWdHb0JhY2s6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVt
VGFnR29Gb3J3YXJkOgotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1N0b3A6Ci0gICAg
ICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnUmVsb2FkOgotICAgICAgICBjYXNlIENvbnRleHRN
ZW51SXRlbVRhZ0ZvbnRNZW51OgotI2VuZGlmCi0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVt
VGFnTm9BY3Rpb246Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnT3BlbkxpbmtJbk5l
d1dpbmRvdzoKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdEb3dubG9hZExpbmtUb0Rp
c2s6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQ29weUxpbmtUb0NsaXBib2FyZDoK
LSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdPcGVuSW1hZ2VJbk5ld1dpbmRvdzoKLSAg
ICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdEb3dubG9hZEltYWdlVG9EaXNrOgotICAgICAg
ICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0NvcHlJbWFnZVRvQ2xpcGJvYXJkOgotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnT3Blbk1lZGlhSW5OZXdX
aW5kb3c6Ci0gICAgICAgICAgICBpZiAobV9oaXRUZXN0UmVzdWx0Lm1lZGlhSXNWaWRlbygpKQot
ICAgICAgICAgICAgICAgIGl0ZW0uc2V0VGl0bGUoY29udGV4dE1lbnVJdGVtVGFnT3BlblZpZGVv
SW5OZXdXaW5kb3coKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgaXRlbS5z
ZXRUaXRsZShjb250ZXh0TWVudUl0ZW1UYWdPcGVuQXVkaW9Jbk5ld1dpbmRvdygpKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0NvcHlNZWRpYUxp
bmtUb0NsaXBib2FyZDoKLSAgICAgICAgICAgIGlmIChtX2hpdFRlc3RSZXN1bHQubWVkaWFJc1Zp
ZGVvKCkpCi0gICAgICAgICAgICAgICAgaXRlbS5zZXRUaXRsZShjb250ZXh0TWVudUl0ZW1UYWdD
b3B5VmlkZW9MaW5rVG9DbGlwYm9hcmQoKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgaXRlbS5zZXRUaXRsZShjb250ZXh0TWVudUl0ZW1UYWdDb3B5QXVkaW9MaW5rVG9DbGlw
Ym9hcmQoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0
ZW1UYWdUb2dnbGVNZWRpYUNvbnRyb2xzOgotICAgICAgICAgICAgc2hvdWxkQ2hlY2sgPSBtX2hp
dFRlc3RSZXN1bHQubWVkaWFDb250cm9sc0VuYWJsZWQoKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1RvZ2dsZU1lZGlhTG9vcDoKLSAgICAgICAg
ICAgIHNob3VsZENoZWNrID0gbV9oaXRUZXN0UmVzdWx0Lm1lZGlhTG9vcEVuYWJsZWQoKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0VudGVyVmlk
ZW9GdWxsc2NyZWVuOgotICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gbV9oaXRUZXN0UmVzdWx0
Lm1lZGlhU3VwcG9ydHNGdWxsc2NyZWVuKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBDb250ZXh0TWVudUl0ZW1UYWdPcGVuRnJhbWVJbk5ld1dpbmRvdzoKLSAgICAgICAgY2Fz
ZSBDb250ZXh0TWVudUl0ZW1UYWdTcGVsbGluZ0d1ZXNzOgotICAgICAgICBjYXNlIENvbnRleHRN
ZW51SXRlbVRhZ090aGVyOgotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1NlYXJjaElu
U3BvdGxpZ2h0OgotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1NlYXJjaFdlYjoKLSAg
ICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdPcGVuV2l0aERlZmF1bHRBcHBsaWNhdGlvbjoK
LSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1QREZBY3R1YWxTaXplOgotICAgICAgICBjYXNl
IENvbnRleHRNZW51SXRlbVBERlpvb21JbjoKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1Q
REZab29tT3V0OgotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVBERkF1dG9TaXplOgotICAg
ICAgICBjYXNlIENvbnRleHRNZW51SXRlbVBERlNpbmdsZVBhZ2U6Ci0gICAgICAgIGNhc2UgQ29u
dGV4dE1lbnVJdGVtUERGRmFjaW5nUGFnZXM6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVt
UERGQ29udGludW91czoKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1QREZOZXh0UGFnZToK
LSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1QREZQcmV2aW91c1BhZ2U6Ci0gICAgICAgIGNh
c2UgQ29udGV4dE1lbnVJdGVtVGFnT3Blbkxpbms6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJ
dGVtVGFnSWdub3JlR3JhbW1hcjoKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTcGVs
bGluZ01lbnU6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU2hvd0ZvbnRzOgotICAg
ICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1N0eWxlczoKLSAgICAgICAgY2FzZSBDb250ZXh0
TWVudUl0ZW1UYWdTaG93Q29sb3JzOgotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1Nw
ZWVjaE1lbnU6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU3RhcnRTcGVha2luZzoK
LSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdXcml0aW5nRGlyZWN0aW9uTWVudToKLSAg
ICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdUZXh0RGlyZWN0aW9uTWVudToKLSAgICAgICAg
Y2FzZSBDb250ZXh0TWVudUl0ZW1UYWdQREZTaW5nbGVQYWdlU2Nyb2xsaW5nOgotICAgICAgICBj
YXNlIENvbnRleHRNZW51SXRlbVRhZ1BERkZhY2luZ1BhZ2VzU2Nyb2xsaW5nOgotI2lmIEVOQUJM
RShJTlNQRUNUT1IpCi0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnSW5zcGVjdEVsZW1l
bnQ6Ci0jZW5kaWYKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1CYXNlQ3VzdG9tVGFnOgot
ICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbUN1c3RvbVRhZ05vQWN0aW9uOgotICAgICAgICBj
YXNlIENvbnRleHRNZW51SXRlbUxhc3RDdXN0b21UYWc6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1l
bnVJdGVtQmFzZUFwcGxpY2F0aW9uVGFnOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgQ29udGV4dE1lbnVJdGVtVGFnTWVkaWFQbGF5UGF1c2U6Ci0gICAgICAgICAgICBpZiAobV9o
aXRUZXN0UmVzdWx0Lm1lZGlhUGxheWluZygpKQotICAgICAgICAgICAgICAgIGl0ZW0uc2V0VGl0
bGUoY29udGV4dE1lbnVJdGVtVGFnTWVkaWFQYXVzZSgpKTsKLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBpdGVtLnNldFRpdGxlKGNvbnRleHRNZW51SXRlbVRhZ01lZGlhUGxheSgp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ01l
ZGlhTXV0ZToKLSAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IG1faGl0VGVzdFJlc3VsdC5tZWRp
YUhhc0F1ZGlvKCk7Ci0gICAgICAgICAgICBzaG91bGRDaGVjayA9IHNob3VsZEVuYWJsZSAmJiAg
bV9oaXRUZXN0UmVzdWx0Lm1lZGlhTXV0ZWQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0K
LQotICAgIGl0ZW0uc2V0Q2hlY2tlZChzaG91bGRDaGVjayk7Ci0gICAgaXRlbS5zZXRFbmFibGVk
KHNob3VsZEVuYWJsZSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8v
IEVOQUJMRShDT05URVhUX01FTlVTKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9Db250ZXh0TWVu
dS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vQ29udGV4dE1lbnUuaAkocmV2aXNp
b24gNzM0NjkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL0NvbnRleHRNZW51LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KIAogI2lu
Y2x1ZGUgIkNvbnRleHRNZW51SXRlbS5oIgotI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNp
bmNsdWRlICJQbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3Ry
aW5nLmgiCiAjaWYgUExBVEZPUk0oTUFDKQpAQCAtNDgsMTQgKzQ3LDEwIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICBjbGFzcyBDb250ZXh0TWVudSA6IHB1YmxpYyBOb25jb3B5YWJsZQogICAg
IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIENvbnRleHRNZW51KGNvbnN0IEhpdFRlc3RSZXN1bHQm
KTsKLSAgICAgICAgQ29udGV4dE1lbnUoY29uc3QgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IFBsYXRm
b3JtTWVudURlc2NyaXB0aW9uKTsKKyAgICAgICAgQ29udGV4dE1lbnUoKTsKKyAgICAgICAgQ29u
dGV4dE1lbnUoY29uc3QgUGxhdGZvcm1NZW51RGVzY3JpcHRpb24pOwogICAgICAgICB+Q29udGV4
dE1lbnUoKTsKIAotICAgICAgICB2b2lkIHBvcHVsYXRlKCk7Ci0gICAgICAgIHZvaWQgYWRkSW5z
cGVjdEVsZW1lbnRJdGVtKCk7Ci0gICAgICAgIHZvaWQgY2hlY2tPckVuYWJsZUlmTmVlZGVkKENv
bnRleHRNZW51SXRlbSYpIGNvbnN0OwotCiAgICAgICAgIHZvaWQgaW5zZXJ0SXRlbSh1bnNpZ25l
ZCBwb3NpdGlvbiwgQ29udGV4dE1lbnVJdGVtJik7CiAgICAgICAgIHZvaWQgYXBwZW5kSXRlbShD
b250ZXh0TWVudUl0ZW0mKTsKICAgICAgICAgCkBAIC02NCw5ICs1OSw2IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogICAgICAgICB1bnNpZ25lZCBpdGVtQ291bnQoKSBjb25zdDsKIAotICAgICAg
ICBIaXRUZXN0UmVzdWx0IGhpdFRlc3RSZXN1bHQoKSBjb25zdCB7IHJldHVybiBtX2hpdFRlc3RS
ZXN1bHQ7IH0KLSAgICAgICAgQ29udGV4dE1lbnVDb250cm9sbGVyKiBjb250cm9sbGVyKCkgY29u
c3Q7Ci0KICAgICAgICAgUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gcGxhdGZvcm1EZXNjcmlwdGlv
bigpIGNvbnN0OwogICAgICAgICB2b2lkIHNldFBsYXRmb3JtRGVzY3JpcHRpb24oUGxhdGZvcm1N
ZW51RGVzY3JpcHRpb24pOwogCkBAIC03NSw3ICs2Nyw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgc3RhdGljIENvbnRleHRNZW51SXRlbSogaXRlbVdpdGhJZChpbnQpOwogI2VuZGlm
CiAgICAgcHJpdmF0ZToKLSAgICAgICAgSGl0VGVzdFJlc3VsdCBtX2hpdFRlc3RSZXN1bHQ7CiAj
aWYgUExBVEZPUk0oTUFDKQogICAgICAgICAvLyBLZWVwIHRoaXMgaW4gc3luYyB3aXRoIHRoZSBQ
bGF0Zm9ybU1lbnVEZXNjcmlwdGlvbiB0eXBlZGVmCiAgICAgICAgIFJldGFpblB0cjxOU011dGFi
bGVBcnJheT4gbV9wbGF0Zm9ybURlc2NyaXB0aW9uOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9h
bmRyb2lkL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9hbmRyb2lkL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAJKHJldmlzaW9uIDczNDY5KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE2Nyw3ICsxNjcsNyBAQCBQYXN0ZWJvYXJkOjp+UGFzdGVib2FyZCgpCiB9CiAK
IAotQ29udGV4dE1lbnU6OkNvbnRleHRNZW51KGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCkg
OiBtX2hpdFRlc3RSZXN1bHQocmVzdWx0KQorQ29udGV4dE1lbnU6OkNvbnRleHRNZW51KCkKIHsK
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICBub3RJbXBsZW1lbnRlZCgpOwpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9icmV3L0NvbnRleHRNZW51QnJldy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9icmV3L0NvbnRleHRNZW51QnJldy5jcHAJKHJldmlzaW9uIDczNDY5
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9icmV3L0NvbnRleHRNZW51QnJldy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMyLDE1ICszMiwxMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNvbnRl
eHRNZW51OjpDb250ZXh0TWVudShjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQpCi0gICAgOiBt
X2hpdFRlc3RSZXN1bHQocmVzdWx0KQorQ29udGV4dE1lbnU6OkNvbnRleHRNZW51KCkKIHsKICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi1Db250
ZXh0TWVudTo6Q29udGV4dE1lbnUoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBQ
bGF0Zm9ybU1lbnVEZXNjcmlwdGlvbiBtZW51KQotICAgIDogbV9oaXRUZXN0UmVzdWx0KHJlc3Vs
dCkKK0NvbnRleHRNZW51OjpDb250ZXh0TWVudShjb25zdCBQbGF0Zm9ybU1lbnVEZXNjcmlwdGlv
biBtZW51KQogewogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIG5vdEltcGxlbWVudGVk
KCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NvbnRleHRNZW51Q2hyb21pdW0u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ29udGV4dE1lbnVD
aHJvbWl1bS5jcHAJKHJldmlzaW9uIDczNDY5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9Db250ZXh0TWVudUNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTMgKzM2LDEx
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIC8vIFRoaXMgaXMgYSBzdHViIGltcGxlbWVudGF0aW9u
IG9mIFdlYktpdCdzIENvbnRleHRNZW51IGNsYXNzIHRoYXQgZG9lcwogLy8gbm90aGluZy4KIAot
Q29udGV4dE1lbnU6OkNvbnRleHRNZW51KGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCkKLSAg
ICA6IG1faGl0VGVzdFJlc3VsdChyZXN1bHQpCitDb250ZXh0TWVudTo6Q29udGV4dE1lbnUoKQog
ewogfQogCi1Db250ZXh0TWVudTo6Q29udGV4dE1lbnUoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVz
dWx0LCBjb25zdCBQbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbiBtZW51KQotICAgIDogbV9oaXRUZXN0
UmVzdWx0KHJlc3VsdCkKK0NvbnRleHRNZW51OjpDb250ZXh0TWVudShjb25zdCBQbGF0Zm9ybU1l
bnVEZXNjcmlwdGlvbiBtZW51KQogewogfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2VmbC9D
b250ZXh0TWVudUVmbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9lZmwvQ29u
dGV4dE1lbnVFZmwuY3BwCShyZXZpc2lvbiA3MzQ2OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZWZs
L0NvbnRleHRNZW51RWZsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMTYgKzI5LDE0IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ29udGV4dE1lbnU6OkNvbnRleHRNZW51KGNvbnN0IEhp
dFRlc3RSZXN1bHQmIHJlc3VsdCkKLSAgICA6IG1faGl0VGVzdFJlc3VsdChyZXN1bHQpCitDb250
ZXh0TWVudTo6Q29udGV4dE1lbnUoKQogewogICAgIG1fY29udGV4dE1lbnVDbGllbnQgPSBzdGF0
aWNfY2FzdDxDb250ZXh0TWVudUNsaWVudEVmbCo+KGNvbnRyb2xsZXIoKS0+Y2xpZW50KCkpOwog
ICAgIG1fcGxhdGZvcm1EZXNjcmlwdGlvbiA9IG1fY29udGV4dE1lbnVDbGllbnQtPmNyZWF0ZVBs
YXRmb3JtRGVzY3JpcHRpb24odGhpcyk7CiB9CiAKLUNvbnRleHRNZW51OjpDb250ZXh0TWVudShj
b25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IFBsYXRmb3JtTWVudURlc2NyaXB0aW9u
IG1lbnUpCi0gICAgOiBtX2hpdFRlc3RSZXN1bHQocmVzdWx0KQotICAgICwgbV9wbGF0Zm9ybURl
c2NyaXB0aW9uKG1lbnUpCitDb250ZXh0TWVudTo6Q29udGV4dE1lbnUoY29uc3QgUGxhdGZvcm1N
ZW51RGVzY3JpcHRpb24gbWVudSkKKyAgICA6IG1fcGxhdGZvcm1EZXNjcmlwdGlvbihtZW51KQog
ewogICAgIG1fY29udGV4dE1lbnVDbGllbnQgPSBzdGF0aWNfY2FzdDxDb250ZXh0TWVudUNsaWVu
dEVmbCo+KGNvbnRyb2xsZXIoKS0+Y2xpZW50KCkpOwogfQpAQCAtNTEsNyArNDksNiBAQCBDb250
ZXh0TWVudTo6fkNvbnRleHRNZW51KCkKIAogdm9pZCBDb250ZXh0TWVudTo6YXBwZW5kSXRlbShD
b250ZXh0TWVudUl0ZW0mIGl0ZW0pCiB7Ci0gICAgY2hlY2tPckVuYWJsZUlmTmVlZGVkKGl0ZW0p
OwogICAgIG1fY29udGV4dE1lbnVDbGllbnQtPmFwcGVuZEl0ZW0obV9wbGF0Zm9ybURlc2NyaXB0
aW9uLCBpdGVtKTsKIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9lZmwvQ29udGV4dE1lbnVJ
dGVtRWZsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2VmbC9Db250ZXh0TWVu
dUl0ZW1FZmwuY3BwCShyZXZpc2lvbiA3MzQ2OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZWZsL0Nv
bnRleHRNZW51SXRlbUVmbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNiw4ICsxMTYsNyBAQCB2
b2lkIENvbnRleHRNZW51SXRlbTo6c2V0U3ViTWVudShDb250ZXh0CiAgICAgICAgIHJldHVybjsK
IAogICAgIG1fcGxhdGZvcm1EZXNjcmlwdGlvbi50eXBlID0gU3VibWVudVR5cGU7Ci0gICAgbV9w
bGF0Zm9ybURlc2NyaXB0aW9uLnN1Yk1lbnUgPSBuZXcgQ29udGV4dE1lbnUoc3ViTWVudS0+aGl0
VGVzdFJlc3VsdCgpLAotICAgICAgICAgICAgc3ViTWVudS0+cmVsZWFzZVBsYXRmb3JtRGVzY3Jp
cHRpb24oKSk7CisgICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9uLnN1Yk1lbnUgPSBuZXcgQ29udGV4
dE1lbnUoc3ViTWVudS0+cmVsZWFzZVBsYXRmb3JtRGVzY3JpcHRpb24oKSk7CiB9CiAKIGJvb2wg
Q29udGV4dE1lbnVJdGVtOjpjaGVja2VkKCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3RrL0NvbnRleHRNZW51R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2d0
ay9Db250ZXh0TWVudUd0ay5jcHAJKHJldmlzaW9uIDczNDY5KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvQ29udGV4dE1lbnVHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw4ICszNCw3IEBA
IHN0YXRpYyB2b2lkIG1lbnVJdGVtQWN0aXZhdGVkKEd0a01lbnVJdGUKICAgICBjb250cm9sbGVy
LT5jb250ZXh0TWVudUl0ZW1TZWxlY3RlZCgmY29udGV4dEl0ZW0pOwogfQogCi1Db250ZXh0TWVu
dTo6Q29udGV4dE1lbnUoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0KQotICAgIDogbV9oaXRU
ZXN0UmVzdWx0KHJlc3VsdCkKK0NvbnRleHRNZW51OjpDb250ZXh0TWVudSgpCiB7CiAgICAgbV9w
bGF0Zm9ybURlc2NyaXB0aW9uID0gR1RLX01FTlUoZ3RrX21lbnVfbmV3KCkpOwogCkBAIC01MSw3
ICs1MCw2IEBAIENvbnRleHRNZW51Ojp+Q29udGV4dE1lbnUoKQogdm9pZCBDb250ZXh0TWVudTo6
YXBwZW5kSXRlbShDb250ZXh0TWVudUl0ZW0mIGl0ZW0pCiB7CiAgICAgQVNTRVJUKG1fcGxhdGZv
cm1EZXNjcmlwdGlvbik7Ci0gICAgY2hlY2tPckVuYWJsZUlmTmVlZGVkKGl0ZW0pOwogCiAgICAg
Q29udGV4dE1lbnVJdGVtVHlwZSB0eXBlID0gaXRlbS50eXBlKCk7CiAgICAgR3RrTWVudUl0ZW0q
IHBsYXRmb3JtSXRlbSA9IENvbnRleHRNZW51SXRlbTo6Y3JlYXRlTmF0aXZlTWVudUl0ZW0oaXRl
bS5yZWxlYXNlUGxhdGZvcm1EZXNjcmlwdGlvbigpKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
aGFpa3UvQ29udGV4dE1lbnVIYWlrdS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9oYWlrdS9Db250ZXh0TWVudUhhaWt1LmNwcAkocmV2aXNpb24gNzM0NjkpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2hhaWt1L0NvbnRleHRNZW51SGFpa3UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
NSw5ICs3NSw4IEBAIHByaXZhdGU6CiAgICAgaW50IG1fcmVzdWx0OwogfTsKIAotQ29udGV4dE1l
bnU6OkNvbnRleHRNZW51KGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCkKLSAgICA6IG1faGl0
VGVzdFJlc3VsdChyZXN1bHQpCi0gICAgLCBtX3BsYXRmb3JtRGVzY3JpcHRpb24obmV3IEJNZW51
KCJjb250ZXh0X21lbnUiKSkKK0NvbnRleHRNZW51OjpDb250ZXh0TWVudSgpCisgICAgOiBtX3Bs
YXRmb3JtRGVzY3JpcHRpb24obmV3IEJNZW51KCJjb250ZXh0X21lbnUiKSkKIHsKIH0KIApAQCAt
ODgsOCArODcsNiBAQCBDb250ZXh0TWVudTo6fkNvbnRleHRNZW51KCkKIAogdm9pZCBDb250ZXh0
TWVudTo6YXBwZW5kSXRlbShDb250ZXh0TWVudUl0ZW0mIGl0ZW0pCiB7Ci0gICAgY2hlY2tPckVu
YWJsZUlmTmVlZGVkKGl0ZW0pOwotCiAgICAgQk1lbnVJdGVtKiBtZW51SXRlbSA9IGl0ZW0ucmVs
ZWFzZVBsYXRmb3JtRGVzY3JpcHRpb24oKTsKICAgICBpZiAobWVudUl0ZW0pCiAgICAgICAgIG1f
cGxhdGZvcm1EZXNjcmlwdGlvbi0+QWRkSXRlbShtZW51SXRlbSk7CkBAIC0xMDIsOCArOTksNiBA
QCB1bnNpZ25lZCBDb250ZXh0TWVudTo6aXRlbUNvdW50KCkgY29uc3QKIAogdm9pZCBDb250ZXh0
TWVudTo6aW5zZXJ0SXRlbSh1bnNpZ25lZCBwb3NpdGlvbiwgQ29udGV4dE1lbnVJdGVtJiBpdGVt
KQogewotICAgIGNoZWNrT3JFbmFibGVJZk5lZWRlZChpdGVtKTsKLQogICAgIEJNZW51SXRlbSog
bWVudUl0ZW0gPSBpdGVtLnJlbGVhc2VQbGF0Zm9ybURlc2NyaXB0aW9uKCk7CiAgICAgaWYgKG1l
bnVJdGVtKQogICAgICAgICBtX3BsYXRmb3JtRGVzY3JpcHRpb24tPkFkZEl0ZW0obWVudUl0ZW0s
IHBvc2l0aW9uKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbWFjL0NvbnRleHRNZW51TWFjLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbWFjL0NvbnRleHRNZW51TWFjLm1tCShy
ZXZpc2lvbiA3MzQ2OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vbWFjL0NvbnRleHRNZW51TWFjLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxNyArMzAsMTUgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1Db250ZXh0TWVudTo6Q29udGV4dE1lbnUoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0
KQotICAgIDogbV9oaXRUZXN0UmVzdWx0KHJlc3VsdCkKK0NvbnRleHRNZW51OjpDb250ZXh0TWVu
dSgpCiB7CiAgICAgTlNNdXRhYmxlQXJyYXkqIGFycmF5ID0gW1tOU011dGFibGVBcnJheSBhbGxv
Y10gaW5pdF07CiAgICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9uID0gYXJyYXk7CiAgICAgW2FycmF5
IHJlbGVhc2VdOwogfQogCi1Db250ZXh0TWVudTo6Q29udGV4dE1lbnUoY29uc3QgSGl0VGVzdFJl
c3VsdCYgcmVzdWx0LCBjb25zdCBQbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbiBtZW51KQotICAgIDog
bV9oaXRUZXN0UmVzdWx0KHJlc3VsdCkKLSAgICAsIG1fcGxhdGZvcm1EZXNjcmlwdGlvbihtZW51
KQorQ29udGV4dE1lbnU6OkNvbnRleHRNZW51KGNvbnN0IFBsYXRmb3JtTWVudURlc2NyaXB0aW9u
IG1lbnUpCisgICAgOiBtX3BsYXRmb3JtRGVzY3JpcHRpb24obWVudSkKIHsKIH0KIApAQCAtNTAs
OCArNDgsNiBAQCBDb250ZXh0TWVudTo6fkNvbnRleHRNZW51KCkKIAogdm9pZCBDb250ZXh0TWVu
dTo6YXBwZW5kSXRlbShDb250ZXh0TWVudUl0ZW0mIGl0ZW0pCiB7Ci0gICAgY2hlY2tPckVuYWJs
ZUlmTmVlZGVkKGl0ZW0pOwotCiAgICAgTlNNZW51SXRlbSogcGxhdGZvcm1JdGVtID0gaXRlbS5y
ZWxlYXNlUGxhdGZvcm1EZXNjcmlwdGlvbigpOwogCiAgICAgW21fcGxhdGZvcm1EZXNjcmlwdGlv
bi5nZXQoKSBhZGRPYmplY3Q6cGxhdGZvcm1JdGVtXTsKQEAgLTYwLDggKzU2LDYgQEAgdm9pZCBD
b250ZXh0TWVudTo6YXBwZW5kSXRlbShDb250ZXh0TWVudQogCiB2b2lkIENvbnRleHRNZW51Ojpp
bnNlcnRJdGVtKHVuc2lnbmVkIHBvc2l0aW9uLCBDb250ZXh0TWVudUl0ZW0mIGl0ZW0pCiB7Ci0g
ICAgY2hlY2tPckVuYWJsZUlmTmVlZGVkKGl0ZW0pOwotCiAgICAgTlNNZW51SXRlbSogcGxhdGZv
cm1JdGVtID0gaXRlbS5yZWxlYXNlUGxhdGZvcm1EZXNjcmlwdGlvbigpOwogCiAgICAgW21fcGxh
dGZvcm1EZXNjcmlwdGlvbi5nZXQoKSBpbnNlcnRPYmplY3Q6cGxhdGZvcm1JdGVtIGF0SW5kZXg6
cG9zaXRpb25dOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9xdC9Db250ZXh0TWVudVF0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3F0L0NvbnRleHRNZW51UXQuY3BwCShyZXZp
c2lvbiA3MzQ2OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vcXQvQ29udGV4dE1lbnVRdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM1LDggKzM1LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1D
b250ZXh0TWVudTo6Q29udGV4dE1lbnUoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0KQotICAg
IDogbV9oaXRUZXN0UmVzdWx0KHJlc3VsdCkKK0NvbnRleHRNZW51OjpDb250ZXh0TWVudSgpCiB7
CiB9CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vd2luL0NvbnRleHRNZW51V2luLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3dpbi9Db250ZXh0TWVudVdpbi5jcHAJKHJldmlz
aW9uIDczNDY5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ29udGV4dE1lbnVXaW4uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00Myw5ICs0Myw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
Q29udGV4dE1lbnU6OkNvbnRleHRNZW51KGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCkKLSAg
ICA6IG1faGl0VGVzdFJlc3VsdChyZXN1bHQpCi0gICAgLCBtX3BsYXRmb3JtRGVzY3JpcHRpb24o
MCkKK0NvbnRleHRNZW51OjpDb250ZXh0TWVudSgpCisgICAgOiBtX3BsYXRmb3JtRGVzY3JpcHRp
b24oMCkKICNpZiBPUyhXSU5DRSkKICAgICAsIG1faXRlbUNvdW50KDApCiAjZW5kaWYKQEAgLTUz
LDkgKzUyLDggQEAgQ29udGV4dE1lbnU6OkNvbnRleHRNZW51KGNvbnN0IEhpdFRlc3RSZQogICAg
IHNldFBsYXRmb3JtRGVzY3JpcHRpb24oOjpDcmVhdGVQb3B1cE1lbnUoKSk7CiB9CiAKLUNvbnRl
eHRNZW51OjpDb250ZXh0TWVudShjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IFBs
YXRmb3JtTWVudURlc2NyaXB0aW9uIG1lbnUpCi0gICAgOiBtX2hpdFRlc3RSZXN1bHQocmVzdWx0
KQotICAgICwgbV9wbGF0Zm9ybURlc2NyaXB0aW9uKDApCitDb250ZXh0TWVudTo6Q29udGV4dE1l
bnUoY29uc3QgUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gbWVudSkKKyAgICA6IG1fcGxhdGZvcm1E
ZXNjcmlwdGlvbigwKQogI2lmIE9TKFdJTkNFKQogICAgICwgbV9pdGVtQ291bnQoMCkKICNlbmRp
ZgpAQCAtMTE4LDggKzExNiw2IEBAIHZvaWQgQ29udGV4dE1lbnU6Omluc2VydEl0ZW0odW5zaWdu
ZWQgaW4KICAgICBpZiAoIW1fcGxhdGZvcm1EZXNjcmlwdGlvbikKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgY2hlY2tPckVuYWJsZUlmTmVlZGVkKGl0ZW0pOwotCiAjaWYgT1MoV0lOQ0UpCiAgICAg
aWYgKGluc2VydE1lbnVJdGVtKG1fcGxhdGZvcm1EZXNjcmlwdGlvbiwgcG9zaXRpb24sIGl0ZW0p
KQogICAgICAgICArK21faXRlbUNvdW50OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS93eC9Db250
ZXh0TWVudVd4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3d4L0NvbnRleHRN
ZW51V3guY3BwCShyZXZpc2lvbiA3MzQ2OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vd3gvQ29udGV4
dE1lbnVXeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgQ29udGV4dE1lbnVJ
dGVtKiBDb250ZXh0TWVudTo6aXRlbVdpdGhJZAogICAgIHJldHVybiBuZXcgQ29udGV4dE1lbnVJ
dGVtKEFjdGlvblR5cGUsIHNfaXRlbUFjdGlvbnMuZ2V0KGlkKSwgIiIpOwogfQogCi1Db250ZXh0
TWVudTo6Q29udGV4dE1lbnUoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0KSA6IG1faGl0VGVz
dFJlc3VsdChyZXN1bHQpCitDb250ZXh0TWVudTo6Q29udGV4dE1lbnUoKQogewogICAgIG1fcGxh
dGZvcm1EZXNjcmlwdGlvbiA9IG5ldyB3eE1lbnUoMCk7CiB9CkBAIC01Nyw4ICs1Nyw2IEBAIHZv
aWQgQ29udGV4dE1lbnU6OmFwcGVuZEl0ZW0oQ29udGV4dE1lbnUKIHsKICAgICBpZiAoIW1fcGxh
dGZvcm1EZXNjcmlwdGlvbikKICAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGNoZWNrT3JFbmFi
bGVJZk5lZWRlZChpdGVtKTsKICAgICAgICAgCiAgICAgUGxhdGZvcm1NZW51SXRlbURlc2NyaXB0
aW9uIGl0ZW1EZXNjcmlwdGlvbiA9IGl0ZW0ucmVsZWFzZVBsYXRmb3JtRGVzY3JpcHRpb24oKTsg
ICAgCiAgICAgd3hJdGVtS2luZCBtZW51S2luZFd4ID0gKCBpdGVtRGVzY3JpcHRpb24udHlwZSA9
PSBDaGVja2FibGVBY3Rpb25UeXBlICkgPyB3eElURU1fQ0hFQ0sgOiB3eElURU1fTk9STUFMOwpJ
bmRleDogV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDczNDY5KQorKysgV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxOSBAQAorMjAxMC0xMi0wNyAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBh
cHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgTGF5ZXJpbmcgVmlvbGF0aW9uIGluIENvbnRleHRNZW51IC0gbWVtYmVyIHZhcmlhYmxlIG9m
IHR5cGUgSGl0VGVzdFJlc3VsdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NTA1ODYKKyAgICAgICAgCisgICAgICAgIFVwZGF0ZSB1c2VycyBvZiBDb250
ZXh0TWVudSBhbmQgQ29udGV4dE1lbnVDb250cm9sbGVyIHRvIG1hdGNoIHdoZXJlIHRoZSBuZXcg
ZnVuY3Rpb25zIAorICAgICAgICBhcmUgbG9jYXRlZC4KKworICAgICAgICAqIFNoYXJlZC9XZWJD
b250ZXh0TWVudUl0ZW1EYXRhLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4dE1lbnVJ
dGVtRGF0YTo6V2ViQ29udGV4dE1lbnVJdGVtRGF0YSk6IFJlbW92ZSB0aGUgY2FsbCB0byBjaGVj
a09yRW5hYmxlSXRlbSwgdGhhdCBjYWxsIHdpbGwgYmUgbWFkZSB3aGVuCisgICAgICAgICAgICB0
aGUgQ29udGV4dE1lbnVJdGVtIGlzIGFkZGVkIHRvIHRoZSBDb250ZXh0TWVudSB0aHJvdWdoIHRo
ZSBDb250ZXh0TWVudUNvbnRyb2xsZXIuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YkNvbnRleHRNZW51LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4dE1lbnU6OnNob3cp
OgorCiAyMDEwLTEyLTA3ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KSW5kZXg6IFdlYktpdDIvU2hhcmVkL1dl
YkNvbnRleHRNZW51SXRlbURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvU2hhcmVkL1dl
YkNvbnRleHRNZW51SXRlbURhdGEuY3BwCShyZXZpc2lvbiA3MzQ2OSkKKysrIFdlYktpdDIvU2hh
cmVkL1dlYkNvbnRleHRNZW51SXRlbURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw4ICs3
Myw2IEBAIFdlYkNvbnRleHRNZW51SXRlbURhdGE6OldlYkNvbnRleHRNZW51SXQKICAgICAgICAg
bV9zdWJtZW51ID0ga2l0SXRlbXMoY29yZVN1Ym1lbnUsIG1lbnUpOwogICAgIH0KICAgICAKLSAg
ICBtZW51LT5jaGVja09yRW5hYmxlSWZOZWVkZWQoaXRlbSk7Ci0gICAgCiAgICAgbV9lbmFibGVk
ID0gaXRlbS5lbmFibGVkKCk7CiAgICAgbV9jaGVja2VkID0gaXRlbS5jaGVja2VkKCk7CiB9Cklu
ZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJDb250ZXh0TWVudS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQ29udGV4dE1lbnUuY3BwCShy
ZXZpc2lvbiA3MzQ2OSkKKysrIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkNvbnRleHRN
ZW51LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsMTAgKzQ3LDEzIEBAIFdlYkNvbnRleHRNZW51
Ojp+V2ViQ29udGV4dE1lbnUoKQogCiB2b2lkIFdlYkNvbnRleHRNZW51OjpzaG93KCkKIHsKLSAg
ICBDb250ZXh0TWVudSogbWVudSA9IG1fcGFnZS0+Y29yZVBhZ2UoKS0+Y29udGV4dE1lbnVDb250
cm9sbGVyKCktPmNvbnRleHRNZW51KCk7CisgICAgQ29udGV4dE1lbnVDb250cm9sbGVyKiBjb250
cm9sbGVyID0gbV9wYWdlLT5jb3JlUGFnZSgpLT5jb250ZXh0TWVudUNvbnRyb2xsZXIoKTsKKyAg
ICBpZiAoIWNvbnRyb2xsZXIpCisgICAgICAgIHJldHVybjsKKyAgICBDb250ZXh0TWVudSogbWVu
dSA9IGNvbnRyb2xsZXItPmNvbnRleHRNZW51KCk7CiAgICAgaWYgKCFtZW51KQogICAgICAgICBy
ZXR1cm47Ci0gICAgTm9kZSogbm9kZSA9IG1lbnUtPmhpdFRlc3RSZXN1bHQoKS5pbm5lck5vblNo
YXJlZE5vZGUoKTsKKyAgICBOb2RlKiBub2RlID0gY29udHJvbGxlci0+aGl0VGVzdFJlc3VsdCgp
LmlubmVyTm9uU2hhcmVkTm9kZSgpOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuOwog
ICAgIEZyYW1lKiBmcmFtZSA9IG5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCk7CkBAIC02NSwxMiAr
NjgsMTIgQEAgdm9pZCBXZWJDb250ZXh0TWVudTo6c2hvdygpCiAgICAgVmVjdG9yPFdlYkNvbnRl
eHRNZW51SXRlbURhdGE+IHByb3Bvc2VkTWVudSA9IGtpdEl0ZW1zKGNvcmVJdGVtcywgbWVudSk7
CiAgICAgVmVjdG9yPFdlYkNvbnRleHRNZW51SXRlbURhdGE+IG5ld01lbnU7CiAgICAgUmVmUHRy
PEFQSU9iamVjdD4gdXNlckRhdGE7Ci0gICAgUmVmUHRyPEluamVjdGVkQnVuZGxlSGl0VGVzdFJl
c3VsdD4gaGl0VGVzdFJlc3VsdCA9IEluamVjdGVkQnVuZGxlSGl0VGVzdFJlc3VsdDo6Y3JlYXRl
KG1lbnUtPmhpdFRlc3RSZXN1bHQoKSk7CisgICAgUmVmUHRyPEluamVjdGVkQnVuZGxlSGl0VGVz
dFJlc3VsdD4gaGl0VGVzdFJlc3VsdCA9IEluamVjdGVkQnVuZGxlSGl0VGVzdFJlc3VsdDo6Y3Jl
YXRlKGNvbnRyb2xsZXItPmhpdFRlc3RSZXN1bHQoKSk7CiAgICAgaWYgKG1fcGFnZS0+aW5qZWN0
ZWRCdW5kbGVDb250ZXh0TWVudUNsaWVudCgpLmdldEN1c3RvbU1lbnVGcm9tRGVmYXVsdEl0ZW1z
KG1fcGFnZSwgaGl0VGVzdFJlc3VsdC5nZXQoKSwgcHJvcG9zZWRNZW51LCBuZXdNZW51LCB1c2Vy
RGF0YSkpCiAgICAgICAgIHByb3Bvc2VkTWVudSA9IG5ld01lbnU7CiAKICAgICAvLyBOb3RpZnkg
dGhlIFVJUHJvY2Vzcy4KLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6
U2hvd0NvbnRleHRNZW51KHZpZXctPmNvbnRlbnRzVG9XaW5kb3cobWVudS0+aGl0VGVzdFJlc3Vs
dCgpLnBvaW50KCkpLCBwcm9wb3NlZE1lbnUsIEluamVjdGVkQnVuZGxlVXNlck1lc3NhZ2VFbmNv
ZGVyKHVzZXJEYXRhLmdldCgpKSkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFn
ZVByb3h5OjpTaG93Q29udGV4dE1lbnUodmlldy0+Y29udGVudHNUb1dpbmRvdyhjb250cm9sbGVy
LT5oaXRUZXN0UmVzdWx0KCkucG9pbnQoKSksIHByb3Bvc2VkTWVudSwgSW5qZWN0ZWRCdW5kbGVV
c2VyTWVzc2FnZUVuY29kZXIodXNlckRhdGEuZ2V0KCkpKSk7CiB9CiAKIHZvaWQgV2ViQ29udGV4
dE1lbnU6Oml0ZW1TZWxlY3RlZChjb25zdCBXZWJDb250ZXh0TWVudUl0ZW1EYXRhJiBpdGVtKQpJ
bmRleDogV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA3MzQ4NykKKysrIFdlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAxMC0xMi0wNyAgQnJpYW4g
V2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTGF5ZXJpbmcgVmlvbGF0aW9uIGluIENvbnRleHRN
ZW51IC0gbWVtYmVyIHZhcmlhYmxlIG9mIHR5cGUgSGl0VGVzdFJlc3VsdAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTA1ODYKKyAgICAgICAgCisgICAg
ICAgIFVwZGF0ZSB1c2VycyBvZiBDb250ZXh0TWVudSBhbmQgQ29udGV4dE1lbnVDb250cm9sbGVy
IHRvIG1hdGNoIHdoZXJlIHRoZSBuZXcgZnVuY3Rpb25zIAorICAgICAgICBhcmUgbG9jYXRlZC4K
KworICAgICAgICAqIHNyYy9Db250ZXh0TWVudUNsaWVudEltcGwuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpzZWxlY3RNaXNzcGVsbGVkV29yZCk6CisgICAgICAgIChXZWJLaXQ6OkNvbnRleHRNZW51
Q2xpZW50SW1wbDo6Z2V0Q3VzdG9tTWVudUZyb21EZWZhdWx0SXRlbXMpOgorCiAyMDEwLTEyLTA2
ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBT
YW0gV2VpbmlnLgpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9Db250ZXh0TWVudUNsaWVudElt
cGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvQ29udGV4dE1lbnVDbGll
bnRJbXBsLmNwcAkocmV2aXNpb24gNzM0NjkpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL0NvbnRl
eHRNZW51Q2xpZW50SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNp
bmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiQ1NTU3R5bGVEZWNsYXJhdGlv
bi5oIgogI2luY2x1ZGUgIkNvbnRleHRNZW51LmgiCisjaW5jbHVkZSAiQ29udGV4dE1lbnVDb250
cm9sbGVyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRl
ci5oIgogI2luY2x1ZGUgIkVkaXRvci5oIgpAQCAtNDUsNiArNDYsNyBAQAogI2luY2x1ZGUgIkhU
TUxOYW1lcy5oIgogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJNZWRpYUVycm9yLmgiCisj
aW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAi
UmVuZGVyV2lkZ2V0LmgiCiAjaW5jbHVkZSAiVGV4dEJyZWFrSXRlcmF0b3IuaCIKQEAgLTExMCw3
ICsxMTIsNyBAQCBzdGF0aWMgU3RyaW5nIHNlbGVjdE1pc3NwZWxsZWRXb3JkKGNvbnN0CiAKICAg
ICAvLyBTZWxlY3Rpb24gaXMgZW1wdHksIHNvIGNoYW5nZSB0aGUgc2VsZWN0aW9uIHRvIHRoZSB3
b3JkIHVuZGVyIHRoZSBjdXJzb3IuCiAgICAgSGl0VGVzdFJlc3VsdCBoaXRUZXN0UmVzdWx0ID0g
c2VsZWN0ZWRGcmFtZS0+ZXZlbnRIYW5kbGVyKCktPgotICAgICAgICBoaXRUZXN0UmVzdWx0QXRQ
b2ludChkZWZhdWx0TWVudS0+aGl0VGVzdFJlc3VsdCgpLnBvaW50KCksIHRydWUpOworICAgICAg
ICBoaXRUZXN0UmVzdWx0QXRQb2ludChtX3dlYlZpZXctPnBhZ2UoKS0+Y29udGV4dE1lbnVDb250
cm9sbGVyKCktPmhpdFRlc3RSZXN1bHQoKS5wb2ludCgpLCB0cnVlKTsKICAgICBOb2RlKiBpbm5l
ck5vZGUgPSBoaXRUZXN0UmVzdWx0LmlubmVyTm9kZSgpOwogICAgIFZpc2libGVQb3NpdGlvbiBw
b3MoaW5uZXJOb2RlLT5yZW5kZXJlcigpLT5wb3NpdGlvbkZvclBvaW50KAogICAgICAgICBoaXRU
ZXN0UmVzdWx0LmxvY2FsUG9pbnQoKSkpOwpAQCAtMTQ0LDcgKzE0Niw3IEBAIFBsYXRmb3JtTWVu
dURlc2NyaXB0aW9uIENvbnRleHRNZW51Q2xpZW4KICAgICBpZiAoIW1fd2ViVmlldy0+Y29udGV4
dE1lbnVBbGxvd2VkKCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgSGl0VGVzdFJlc3VsdCBy
ID0gZGVmYXVsdE1lbnUtPmhpdFRlc3RSZXN1bHQoKTsKKyAgICBIaXRUZXN0UmVzdWx0IHIgPSBt
X3dlYlZpZXctPnBhZ2UoKS0+Y29udGV4dE1lbnVDb250cm9sbGVyKCktPmhpdFRlc3RSZXN1bHQo
KTsKICAgICBGcmFtZSogc2VsZWN0ZWRGcmFtZSA9IHIuaW5uZXJOb25TaGFyZWROb2RlKCktPmRv
Y3VtZW50KCktPmZyYW1lKCk7CiAKICAgICBXZWJDb250ZXh0TWVudURhdGEgZGF0YTsKSW5kZXg6
IFdlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MzQ3OCkKKysrIFdlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMTkgQEAKKzIwMTAtMTItMDcgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3Rl
aW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIExheWVyaW5nIFZpb2xhdGlvbiBpbiBDb250ZXh0TWVudSAtIG1lbWJlciB2YXJpYWJs
ZSBvZiB0eXBlIEhpdFRlc3RSZXN1bHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTUwNTg2CisgICAgICAgIAorICAgICAgICBVcGRhdGUgdXNlcnMgb2Yg
Q29udGV4dE1lbnUgYW5kIENvbnRleHRNZW51Q29udHJvbGxlciB0byBtYXRjaCB3aGVyZSB0aGUg
bmV3IGZ1bmN0aW9ucyAKKyAgICAgICAgYXJlIGxvY2F0ZWQuCisKKyAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5tbToKKyAgICAgICAgKFdlYkNvbnRleHRNZW51
Q2xpZW50OjpnZXRDdXN0b21NZW51RnJvbURlZmF1bHRJdGVtcyk6CisgICAgICAgIChXZWJDb250
ZXh0TWVudUNsaWVudDo6Y29udGV4dE1lbnVJdGVtU2VsZWN0ZWQpOgorICAgICAgICAqIFdlYlZp
ZXcvV2ViSFRNTFZpZXcubW06CisgICAgICAgICgtW1dlYk1lbnVUYXJnZXQgdmFsaWRhdGVNZW51
SXRlbTpdKToKKwogMjAxMC0xMi0wNyAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSm9obiBTdWxsaXZhbi4KSW5kZXg6IFdlYktp
dC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ29udGV4dE1lbnVDbGllbnQubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5tbQkocmV2
aXNpb24gNzM0NjkpCisrKyBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNvbnRleHRNZW51
Q2xpZW50Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC00Miw4ICs0MiwxMCBAQAogI2ltcG9ydCAiV2Vi
Vmlld0ZhY3RvcnkuaCIKICNpbXBvcnQgIldlYlZpZXdJbnRlcm5hbC5oIgogI2ltcG9ydCA8V2Vi
Q29yZS9Db250ZXh0TWVudS5oPgorI2ltcG9ydCA8V2ViQ29yZS9Db250ZXh0TWVudUNvbnRyb2xs
ZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvS1VSTC5oPgogI2ltcG9ydCA8V2ViQ29yZS9Mb2NhbGl6
ZWRTdHJpbmdzLmg+CisjaW1wb3J0IDxXZWJDb3JlL1BhZ2UuaD4KICNpbXBvcnQgPFdlYkNvcmUv
UnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmg+CiAjaW1wb3J0IDxXZWJLaXQvRE9NUHJpdmF0ZS5o
PgogCkBAIC0yNzgsNyArMjgwLDcgQEAgTlNNdXRhYmxlQXJyYXkqIFdlYkNvbnRleHRNZW51Q2xp
ZW50OjpnZQogICAgIGlmICghW2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpzZWxlY3Rvcl0p
CiAgICAgICAgIHJldHVybiBkZWZhdWx0TWVudS0+cGxhdGZvcm1EZXNjcmlwdGlvbigpOwogCi0g
ICAgTlNEaWN0aW9uYXJ5ICplbGVtZW50ID0gW1tbV2ViRWxlbWVudERpY3Rpb25hcnkgYWxsb2Nd
IGluaXRXaXRoSGl0VGVzdFJlc3VsdDpkZWZhdWx0TWVudS0+aGl0VGVzdFJlc3VsdCgpXSBhdXRv
cmVsZWFzZV07CisgICAgTlNEaWN0aW9uYXJ5ICplbGVtZW50ID0gW1tbV2ViRWxlbWVudERpY3Rp
b25hcnkgYWxsb2NdIGluaXRXaXRoSGl0VGVzdFJlc3VsdDpbbV93ZWJWaWV3IHBhZ2VdLT5jb250
ZXh0TWVudUNvbnRyb2xsZXIoKS0+aGl0VGVzdFJlc3VsdCgpXSBhdXRvcmVsZWFzZV07CiAKICAg
ICBCT09MIHByZVZlcnNpb24zQ2xpZW50ID0gaXNQcmVWZXJzaW9uM0NsaWVudCgpOwogICAgIGlm
IChwcmVWZXJzaW9uM0NsaWVudCkgewpAQCAtMzA4LDcgKzMxMCw3IEBAIHZvaWQgV2ViQ29udGV4
dE1lbnVDbGllbnQ6OmNvbnRleHRNZW51SXQKICAgICBpZCBkZWxlZ2F0ZSA9IFttX3dlYlZpZXcg
VUlEZWxlZ2F0ZV07CiAgICAgU0VMIHNlbGVjdG9yID0gQHNlbGVjdG9yKHdlYlZpZXc6Y29udGV4
dE1lbnVJdGVtU2VsZWN0ZWQ6Zm9yRWxlbWVudDopOwogICAgIGlmIChbZGVsZWdhdGUgcmVzcG9u
ZHNUb1NlbGVjdG9yOnNlbGVjdG9yXSkgewotICAgICAgICBOU0RpY3Rpb25hcnkgKmVsZW1lbnQg
PSBbW1dlYkVsZW1lbnREaWN0aW9uYXJ5IGFsbG9jXSBpbml0V2l0aEhpdFRlc3RSZXN1bHQ6cGFy
ZW50TWVudS0+aGl0VGVzdFJlc3VsdCgpXTsKKyAgICAgICAgTlNEaWN0aW9uYXJ5ICplbGVtZW50
ID0gW1tXZWJFbGVtZW50RGljdGlvbmFyeSBhbGxvY10gaW5pdFdpdGhIaXRUZXN0UmVzdWx0Oltt
X3dlYlZpZXcgcGFnZV0tPmNvbnRleHRNZW51Q29udHJvbGxlcigpLT5oaXRUZXN0UmVzdWx0KCld
OwogICAgICAgICBOU01lbnVJdGVtICpwbGF0Zm9ybUl0ZW0gPSBpdGVtLT5yZWxlYXNlUGxhdGZv
cm1EZXNjcmlwdGlvbigpOwogCiAgICAgICAgIENhbGxVSURlbGVnYXRlKG1fd2ViVmlldywgc2Vs
ZWN0b3IsIHBsYXRmb3JtSXRlbSwgZWxlbWVudCk7CkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcv
V2ViSFRNTFZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxW
aWV3Lm1tCShyZXZpc2lvbiA3MzQ2OSkKKysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmll
dy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTcwLDcgKzE3MCw3IEBAIC0gKEJPT0wpdmFsaWRhdGVN
ZW51SXRlbTooTlNNZW51SXRlbSAqKWkKIHsKICAgICBXZWJDb3JlOjpDb250ZXh0TWVudUl0ZW0g
Y29yZUl0ZW0oaXRlbSk7CiAgICAgQVNTRVJUKF9tZW51Q29udHJvbGxlci0+Y29udGV4dE1lbnUo
KSk7Ci0gICAgX21lbnVDb250cm9sbGVyLT5jb250ZXh0TWVudSgpLT5jaGVja09yRW5hYmxlSWZO
ZWVkZWQoY29yZUl0ZW0pOworICAgIF9tZW51Q29udHJvbGxlci0+Y2hlY2tPckVuYWJsZUlmTmVl
ZGVkKGNvcmVJdGVtKTsKICAgICByZXR1cm4gY29yZUl0ZW0uZW5hYmxlZCgpOwogfQogCkluZGV4
OiBXZWJLaXQvcXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDczNDY5KQorKysgV2ViS2l0L3F0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE3IEBACisyMDEwLTEyLTA3ICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWlu
QGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBMYXllcmluZyBWaW9sYXRpb24gaW4gQ29udGV4dE1lbnUgLSBtZW1iZXIgdmFyaWFibGUg
b2YgdHlwZSBIaXRUZXN0UmVzdWx0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD01MDU4NgorICAgICAgICAKKyAgICAgICAgVXBkYXRlIHVzZXJzIG9mIENv
bnRleHRNZW51IGFuZCBDb250ZXh0TWVudUNvbnRyb2xsZXIgdG8gbWF0Y2ggd2hlcmUgdGhlIG5l
dyBmdW5jdGlvbnMgCisgICAgICAgIGFyZSBsb2NhdGVkLgorCisgICAgICAgICogQXBpL3F3ZWJw
YWdlLmNwcDoKKyAgICAgICAgKFFXZWJQYWdlUHJpdmF0ZTo6Y3JlYXRlQ29udGV4dE1lbnUpOgor
ICAgICAgICAoUVdlYlBhZ2U6OnVwZGF0ZVBvc2l0aW9uRGVwZW5kZW50QWN0aW9ucyk6CisKIDIw
MTAtMTItMDcgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFRyeSB0
byBmaXggYnVpbGQuCkluZGV4OiBXZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAkocmV2aXNpb24gNzM0NjkpCisrKyBXZWJL
aXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQzLDcgKzQ0Myw3IEBA
IFFNZW51ICpRV2ViUGFnZVByaXZhdGU6OmNyZWF0ZUNvbnRleHRNZW4KICAgICAgICAgICAgICAg
ICBRQWN0aW9uICphID0gcS0+YWN0aW9uKGFjdGlvbik7CiAgICAgICAgICAgICAgICAgaWYgKGEp
IHsKICAgICAgICAgICAgICAgICAgICAgQ29udGV4dE1lbnVJdGVtIGl0KGl0ZW0pOwotICAgICAg
ICAgICAgICAgICAgICB3ZWJjb3JlTWVudS0+Y2hlY2tPckVuYWJsZUlmTmVlZGVkKGl0KTsKKyAg
ICAgICAgICAgICAgICAgICAgcGFnZS0+Y29udGV4dE1lbnVDb250cm9sbGVyKCktPmNoZWNrT3JF
bmFibGVJZk5lZWRlZChpdCk7CiAgICAgICAgICAgICAgICAgICAgIFBsYXRmb3JtTWVudUl0ZW1E
ZXNjcmlwdGlvbiBkZXNjID0gaXQucmVsZWFzZVBsYXRmb3JtRGVzY3JpcHRpb24oKTsKICAgICAg
ICAgICAgICAgICAgICAgYS0+c2V0RW5hYmxlZChkZXNjLmVuYWJsZWQpOwogICAgICAgICAgICAg
ICAgICAgICBhLT5zZXRDaGVja2VkKGRlc2MuY2hlY2tlZCk7CkBAIC0zMjA5LDEyICszMjA5LDEz
IEBAIHZvaWQgUVdlYlBhZ2U6OnVwZGF0ZVBvc2l0aW9uRGVwZW5kZW50QWMKICAgICAgICAgZC0+
aGl0VGVzdFJlc3VsdCA9IFFXZWJIaXRUZXN0UmVzdWx0KCk7CiAgICAgZWxzZQogICAgICAgICBk
LT5oaXRUZXN0UmVzdWx0ID0gUVdlYkhpdFRlc3RSZXN1bHQobmV3IFFXZWJIaXRUZXN0UmVzdWx0
UHJpdmF0ZShyZXN1bHQpKTsKLSAgICBXZWJDb3JlOjpDb250ZXh0TWVudSBtZW51KHJlc3VsdCk7
Ci0gICAgbWVudS5wb3B1bGF0ZSgpOworCisgICAgZC0+cGFnZS0+Y29udGV4dE1lbnVDb250cm9s
bGVyKCktPnNldEhpdFRlc3RSZXN1bHQocmVzdWx0KTsKKyAgICBkLT5wYWdlLT5jb250ZXh0TWVu
dUNvbnRyb2xsZXIoKS0+cG9wdWxhdGUoKTsKICAgICAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQog
ICAgIGlmIChkLT5wYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmVuYWJsZWQoKSkKLSAgICAg
ICAgbWVudS5hZGRJbnNwZWN0RWxlbWVudEl0ZW0oKTsKKyAgICAgICAgZC0+cGFnZS0+Y29udGV4
dE1lbnVDb250cm9sbGVyKCktPmFkZEluc3BlY3RFbGVtZW50SXRlbSgpOwogI2VuZGlmCiAKICAg
ICBRQml0QXJyYXkgdmlzaXRlZFdlYkFjdGlvbnMoUVdlYlBhZ2U6OldlYkFjdGlvbkNvdW50KTsK
QEAgLTMyMjMsNyArMzIyNCw3IEBAIHZvaWQgUVdlYlBhZ2U6OnVwZGF0ZVBvc2l0aW9uRGVwZW5k
ZW50QWMKICAgICBkZWxldGUgZC0+Y3VycmVudENvbnRleHRNZW51OwogCiAgICAgLy8gVGhlbiB3
ZSBsZXQgY3JlYXRlQ29udGV4dE1lbnUoKSBlbmFibGUgdGhlIGFjdGlvbnMgdGhhdCBhcmUgcHV0
IGludG8gdGhlIG1lbnUKLSAgICBkLT5jdXJyZW50Q29udGV4dE1lbnUgPSBkLT5jcmVhdGVDb250
ZXh0TWVudSgmbWVudSwgbWVudS5wbGF0Zm9ybURlc2NyaXB0aW9uKCksICZ2aXNpdGVkV2ViQWN0
aW9ucyk7CisgICAgZC0+Y3VycmVudENvbnRleHRNZW51ID0gZC0+Y3JlYXRlQ29udGV4dE1lbnUo
ZC0+cGFnZS0+Y29udGV4dE1lbnVDb250cm9sbGVyKCktPmNvbnRleHRNZW51KCksIGQtPnBhZ2Ut
PmNvbnRleHRNZW51Q29udHJvbGxlcigpLT5jb250ZXh0TWVudSgpLT5wbGF0Zm9ybURlc2NyaXB0
aW9uKCksICZ2aXNpdGVkV2ViQWN0aW9ucyk7CiAjZW5kaWYgLy8gUVRfTk9fQ09OVEVYVE1FTlUK
IAogI2lmbmRlZiBRVF9OT19BQ1RJT04KSW5kZXg6IFdlYktpdC93aW4vQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdC93aW4vQ2hhbmdlTG9nCShyZXZpc2lvbiA3MzQ2OSkKKysrIFdlYktp
dC93aW4vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTAtMTIt
MDcgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIExheWVyaW5nIFZpb2xhdGlvbiBp
biBDb250ZXh0TWVudSAtIG1lbWJlciB2YXJpYWJsZSBvZiB0eXBlIEhpdFRlc3RSZXN1bHQKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUwNTg2CisgICAg
ICAgIAorICAgICAgICBVcGRhdGUgdXNlcnMgb2YgQ29udGV4dE1lbnUgYW5kIENvbnRleHRNZW51
Q29udHJvbGxlciB0byBtYXRjaCB3aGVyZSB0aGUgbmV3IGZ1bmN0aW9ucyAKKyAgICAgICAgYXJl
IGxvY2F0ZWQuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJDb250ZXh0TWVudUNsaWVu
dC5jcHA6CisgICAgICAgIChXZWJDb250ZXh0TWVudUNsaWVudDo6Z2V0Q3VzdG9tTWVudUZyb21E
ZWZhdWx0SXRlbXMpOiBHZXQgdGhlIEhpdFRlc3RSZXN1bHQgYW5kIENvbnRleHRNZW51IGZyb20g
dGhlIAorICAgICAgICAgICAgQ29udGV4dE1lbnVDb250cm9sbGVyIChmcm9tIHRoZSBwYWdlKS4K
KyAgICAgICAgKFdlYkNvbnRleHRNZW51Q2xpZW50Ojpjb250ZXh0TWVudUl0ZW1TZWxlY3RlZCk6
IEdldCB0aGUgSGl0VGVzdFJlc3VsdCBmcm9tIHRoZSBDb250ZXh0TWVudUNvbnRyb2xsZXIuCisg
ICAgICAgICogV2ViVmlldy5jcHA6CisgICAgICAgIChXZWJWaWV3OjpoYW5kbGVDb250ZXh0TWVu
dUV2ZW50KTogRGl0dG8uCisKIDIwMTAtMTItMDcgIEplc3NpZSBCZXJsaW4gIDxqYmVybGluQGFw
cGxlLmNvbT4KIAogICAgICAgICBCdWlsZCBmaXguIFVucmV2aWV3ZWQuCkluZGV4OiBXZWJLaXQv
d2luL1dlYlZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4vV2ViVmlldy5jcHAJKHJl
dmlzaW9uIDczNDY5KQorKysgV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTI0NSwxMiArMTI0NSwxNCBAQCBib29sIFdlYlZpZXc6OmhhbmRsZUNvbnRleHRNZW51RXZl
bnQoV1BBCiAgICAgaWYgKCFoYW5kbGVkRXZlbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAor
ICAgIENvbnRleHRNZW51Q29udHJvbGxlciogY29udGV4dE1lbnVDb250cm9sbGVyID0gbV9wYWdl
LT5jb250ZXh0TWVudUNvbnRyb2xsZXIoKTsKKwogICAgIC8vIFNob3cgdGhlIG1lbnUKLSAgICBD
b250ZXh0TWVudSogY29yZU1lbnUgPSBtX3BhZ2UtPmNvbnRleHRNZW51Q29udHJvbGxlcigpLT5j
b250ZXh0TWVudSgpOworICAgIENvbnRleHRNZW51KiBjb3JlTWVudSA9IGNvbnRleHRNZW51Q29u
dHJvbGxlci0+Y29udGV4dE1lbnUoKTsKICAgICBpZiAoIWNvcmVNZW51KQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBOb2RlKiBub2RlID0gY29yZU1lbnUtPmhpdFRlc3RSZXN1bHQoKS5p
bm5lck5vblNoYXJlZE5vZGUoKTsKKyAgICBOb2RlKiBub2RlID0gY29udGV4dE1lbnVDb250cm9s
bGVyLT5oaXRUZXN0UmVzdWx0KCkuaW5uZXJOb25TaGFyZWROb2RlKCk7CiAgICAgaWYgKCFub2Rl
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTEyNjIsNyArMTI2NCw3IEBAIGJvb2wgV2Vi
Vmlldzo6aGFuZGxlQ29udGV4dE1lbnVFdmVudChXUEEKICAgICBpZiAoIXZpZXcpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIFBPSU5UIHBvaW50KHZpZXctPmNvbnRlbnRzVG9XaW5kb3co
Y29yZU1lbnUtPmhpdFRlc3RSZXN1bHQoKS5wb2ludCgpKSk7CisgICAgUE9JTlQgcG9pbnQodmll
dy0+Y29udGVudHNUb1dpbmRvdyhjb250ZXh0TWVudUNvbnRyb2xsZXItPmhpdFRlc3RSZXN1bHQo
KS5wb2ludCgpKSk7CiAKICAgICAvLyBUcmFuc2xhdGUgdGhlIHBvaW50IHRvIHNjcmVlbiBjb29y
ZGluYXRlcwogICAgIGlmICghOjpDbGllbnRUb1NjcmVlbihtX3ZpZXdXaW5kb3csICZwb2ludCkp
CkluZGV4OiBXZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNvbnRleHRNZW51Q2xpZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNvbnRleHRNZW51
Q2xpZW50LmNwcAkocmV2aXNpb24gNzM0NjkpCisrKyBXZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0
L1dlYkNvbnRleHRNZW51Q2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBA
QAogI2luY2x1ZGUgIldlYlZpZXcuaCIKIAogI2luY2x1ZGUgPFdlYkNvcmUvQ29udGV4dE1lbnUu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0NvbnRleHRNZW51Q29udHJvbGxlci5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvRXZlbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9GcmFtZUxvYWRlci5oPgpAQCAtNjQsNyArNjUsNyBAQCBITUVOVSBXZWJDb250ZXh0
TWVudUNsaWVudDo6Z2V0Q3VzdG9tTWVuCiAKICAgICBITUVOVSBuZXdNZW51ID0gMDsKICAgICBD
T01QdHI8V2ViRWxlbWVudFByb3BlcnR5QmFnPiBwcm9wZXJ0eUJhZzsKLSAgICBwcm9wZXJ0eUJh
Zy5hZG9wdFJlZihXZWJFbGVtZW50UHJvcGVydHlCYWc6OmNyZWF0ZUluc3RhbmNlKG1lbnUtPmhp
dFRlc3RSZXN1bHQoKSkpOworICAgIHByb3BlcnR5QmFnLmFkb3B0UmVmKFdlYkVsZW1lbnRQcm9w
ZXJ0eUJhZzo6Y3JlYXRlSW5zdGFuY2UobV93ZWJWaWV3LT5wYWdlKCktPmNvbnRleHRNZW51Q29u
dHJvbGxlcigpLT5oaXRUZXN0UmVzdWx0KCkpKTsKICAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBk
ZWNpZGUgd2hldGhlciB0byBkbyB0aGUgZGVmYXVsdCBiZWZvcmUgY2FsbGluZyB0aGlzIGRlbGVn
YXRlIG1ldGhvZAogICAgIGlmIChGQUlMRUQodWlEZWxlZ2F0ZS0+Y29udGV4dE1lbnVJdGVtc0Zv
ckVsZW1lbnQobV93ZWJWaWV3LCBwcm9wZXJ0eUJhZy5nZXQoKSwgKE9MRV9IQU5ETEUpKFVMT05H
NjQpbWVudS0+cGxhdGZvcm1EZXNjcmlwdGlvbigpLCAoT0xFX0hBTkRMRSopJm5ld01lbnUpKSkK
ICAgICAgICAgcmV0dXJuIG1lbnUtPnBsYXRmb3JtRGVzY3JpcHRpb24oKTsKQEAgLTgyLDcgKzgz
LDcgQEAgdm9pZCBXZWJDb250ZXh0TWVudUNsaWVudDo6Y29udGV4dE1lbnVJdAogICAgIEFTU0VS
VCh1aURlbGVnYXRlKTsKIAogICAgIENPTVB0cjxXZWJFbGVtZW50UHJvcGVydHlCYWc+IHByb3Bl
cnR5QmFnOwotICAgIHByb3BlcnR5QmFnLmFkb3B0UmVmKFdlYkVsZW1lbnRQcm9wZXJ0eUJhZzo6
Y3JlYXRlSW5zdGFuY2UocGFyZW50TWVudS0+aGl0VGVzdFJlc3VsdCgpKSk7CisgICAgcHJvcGVy
dHlCYWcuYWRvcHRSZWYoV2ViRWxlbWVudFByb3BlcnR5QmFnOjpjcmVhdGVJbnN0YW5jZShtX3dl
YlZpZXctPnBhZ2UoKS0+Y29udGV4dE1lbnVDb250cm9sbGVyKCktPmhpdFRlc3RSZXN1bHQoKSkp
OwogICAgICAgICAgICAgCiAgICAgdWlEZWxlZ2F0ZS0+Y29udGV4dE1lbnVJdGVtU2VsZWN0ZWQo
bV93ZWJWaWV3LCBpdGVtLT5yZWxlYXNlUGxhdGZvcm1EZXNjcmlwdGlvbigpLCBwcm9wZXJ0eUJh
Zy5nZXQoKSk7CiB9Cg==
</data>
<flag name="commit-queue"
          id="66720"
          type_id="3"
          status="-"
          setter="bweinstein"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75868</attachid>
            <date>2010-12-07 21:34:33 -0800</date>
            <delta_ts>2010-12-07 23:23:16 -0800</delta_ts>
            <desc>[PATCH] Fix - Win, Mac, Qt, Chromium - w/ Darin&apos;s feedback</desc>
            <filename>context_menu_layering_violation_fix.patch</filename>
            <type>text/plain</type>
            <size>127862</size>
            <attacher name="Brian Weinstein">bweinstein</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MzQ2OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODMgQEAKKzIwMTAtMTItMDcgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5A
YXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIExheWVyaW5nIFZpb2xhdGlvbiBpbiBDb250ZXh0TWVudSAtIG1lbWJlciB2YXJpYWJsZSBv
ZiB0eXBlIEhpdFRlc3RSZXN1bHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTUwNTg2CisgICAgICAgIAorICAgICAgICBDb250ZXh0TWVudSBoYWQgYSBs
YXllcmluZyB2aW9sYXRpb24gYnkgaGF2aW5nIGEgbWVtYmVyIHZhcmlhYmxlIG9mIHR5cGUgSGl0
VGVzdFJlc3VsdCwgYmVjYXVzZQorICAgICAgICBjbGFzc2VzIGluIFdlYkNvcmUvcGxhdGZvcm0g
Y2FuJ3Qga25vdyBhYm91dCBjbGFzc2VzIGluIFdlYkNvcmUuCisgICAgICAgIAorICAgICAgICBU
aGlzIHBhdGNoIG1vdmVzIHRoZSBIaXRUZXN0UmVzdWx0IGFuZCBhbGwgZnVuY3Rpb25zIHRoYXQg
dXNlIGl0IG91dCBvZiBDb250ZXh0TWVudSBpbnRvIENvbnRleHRNZW51Q29udHJvbGxlci4KKyAg
ICAgICAgQWxsIG9mIHRoZSBmdW5jdGlvbnMgdGhhdCBkZWFsdCB3aXRoIHBvcHVsYXRpbmcgdGhl
IENvbnRleHRNZW51IGFyZSBub3cgaW4gQ29udGV4dE1lbnVDb250cm9sbGVyLCBhbmQgdGhpcwor
ICAgICAgICBhbGxvd2VkIHVzIHRvIGRlbGV0ZSB0aGUgQ29udGV4dE1lbnUgZmlsZSwgcHV0dGlu
ZyBhbGwgb2YgdGhlIGNyb3NzLXBsYXRmb3JtIGNvZGUgdGhhdCB1c2VkIHRvIGJlIGl0CisgICAg
ICAgIGluIENvbnRleHRNZW51Q29udHJvbGxlciwgYW5kIHRoZSByZXN0IG9mIHRoZSBjb2RlIGlz
IGluIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBmaWxlcy4KKworICAgICAgICBObyBjaGFuZ2UgaW4g
YmVoYXZpb3IsIG5vIG5ldyB0ZXN0cy4KKworICAgICAgICAqIEFuZHJvaWQubWs6IFJlbW92ZWQg
Q29udGV4dE1lbnUuY3BwLgorICAgICAgICAqIENNYWtlTGlzdHMudHh0OiBEaXR0by4KKyAgICAg
ICAgKiBHTlVtYWtlZmlsZS5hbTogRGl0dG8uCisgICAgICAgICogV2ViQ29yZS5neXBpOiBEaXR0
by4KKyAgICAgICAgKiBXZWJDb3JlLnBybzogRGl0dG8uCisgICAgICAgICogV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2o6IERpdHRvLgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajogRGl0dG8uCisKKyAgICAgICAgKiBwYWdlL0NvbnRleHRNZW51Q29udHJv
bGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0TWVudUNvbnRyb2xsZXI6OkNvbnRl
eHRNZW51Q29udHJvbGxlcik6IEluaXRpYWxpemVkIG1faGl0VGVzdFJlc3VsdCB0byBhbiBlbXB0
eSBIaXRUZXN0UmVzdWx0LgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVDb250cm9sbGVy
OjpoYW5kbGVDb250ZXh0TWVudUV2ZW50KTogQ2FsbCBwb3B1bGF0ZSBvbiB0aGUgQ29udGV4dE1l
bnVDb250cm9sbGVyIGluc3RlYWQKKyAgICAgICAgICAgIG9mIHRoZSBDb250ZXh0TWVudS4KKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51Q29udHJvbGxlcjo6Y3JlYXRlQ29udGV4dE1lbnUp
OiBGaXggc29tZSBpbmRpbmF0aW9uLCBhbmQgc3RvcmUgdGhlIEhpdFRlc3RSZXN1bHQgaW4gYSBt
ZW1iZXIKKyAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1l
bnVDb250cm9sbGVyOjpzaG93Q29udGV4dE1lbnUpOiBDYWxsIGFkZEluc3BlY3RFbGVtZW50SXRl
bSBvbiB0aGUgQ29udGV4dE1lbnVDb250cm9sbGVyLgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4
dE1lbnVDb250cm9sbGVyOjpjb250ZXh0TWVudUl0ZW1TZWxlY3RlZCk6IFVzZSBtX2hpdFRlc3RS
ZXN1bHQgd2hlbmV2ZXIgd2UgbmVlZCBhIEhpdFRlc3RSZXN1bHQuCisgICAgICAgIChXZWJDb3Jl
OjpDb250ZXh0TWVudUNvbnRyb2xsZXI6OmFwcGVuZEl0ZW0pOiBWYWxpZGF0ZXMgdGhlIGl0ZW0g
Zm9yIGl0cyBzdGF0ZSwgYW5kIHRoZW4gYXBwZW5kcyBpdCB0byB0aGUgcGFyZW50IG1lbnUuCisg
ICAgICAgICAgICBUaGlzIGFsbG93ZWQgdXMgdG8gbW92ZSBjaGVja09yRW5hYmxlSWZOZWVkZWQg
ZnJvbSBDb250ZXh0TWVudS4KKworICAgICAgICBUaGVzZSBmdW5jdGlvbnMgd2VyZSBhbGwgbW92
ZWQgZnJvbSBDb250ZXh0TWVudSwgYW5kIGNoYW5nZWQgc2xpZ2h0bHkgdG8gZml0IGluIENvbnRl
eHRNZW51Q29udHJvbGxlci4KKyAgICAgICAgQWxsIGNhbGxzIHRvIENvbnRleHRNZW51OjphcHBl
bmRJdGVtIHdlcmUgY2hhbmdlZCB0byBDb250ZXh0TWVudUNvbnRyb2xsZXI6OmFwcGVuZEl0ZW0s
IHdoaWNoIHRha2VzIGNhcmUKKyAgICAgICAgb2YgdmFsaWRhdGluZyB0aGUgbWVudS4KKyAgICAg
ICAgKFdlYkNvcmU6OnNlcGFyYXRvckl0ZW0pOiBNb3ZlZCBmcm9tIENvbnRleHRNZW51LgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVDb250cm9sbGVyOjpjcmVhdGVBbmRBcHBlbmRGb250
U3ViTWVudSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVDb250cm9sbGVy
OjpjcmVhdGVBbmRBcHBlbmRTcGVsbGluZ0FuZEdyYW1tYXJTdWJNZW51KTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNyZWF0ZUFuZEFwcGVuZFNwZWVj
aFN1Yk1lbnUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51Q29udHJvbGxl
cjo6Y3JlYXRlQW5kQXBwZW5kV3JpdGluZ0RpcmVjdGlvblN1Yk1lbnUpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRleHRNZW51Q29udHJvbGxlcjo6Y3JlYXRlQW5kQXBwZW5kVGV4dERp
cmVjdGlvblN1Yk1lbnUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51Q29u
dHJvbGxlcjo6Y3JlYXRlQW5kQXBwZW5kU3Vic3RpdHV0aW9uc1N1Yk1lbnUpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51Q29udHJvbGxlcjo6Y3JlYXRlQW5kQXBwZW5kVHJh
bnNmb3JtYXRpb25zU3ViTWVudSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6c2VsZWN0aW9u
Q29udGFpbnNQb3NzaWJsZVdvcmQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRN
ZW51Q29udHJvbGxlcjo6cG9wdWxhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
eHRNZW51Q29udHJvbGxlcjo6YWRkSW5zcGVjdEVsZW1lbnRJdGVtKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNoZWNrT3JFbmFibGVJZk5lZWRlZCk6
IERpdHRvLgorICAgICAgICAKKyAgICAgICAgKiBwYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5o
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVDb250cm9sbGVyOjpoaXRUZXN0UmVzdWx0
KTogUmV0dXJucyB0aGUgSGl0VGVzdFJlc3VsdCBvZiB0aGUgY3VycmVudCBDb250ZXh0TWVudS4K
KworICAgICAgICAqIHBsYXRmb3JtL0NvbnRleHRNZW51LmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9Db250ZXh0TWVudS5oOgorICAgICAgICAqIHBsYXRmb3JtL2VmbC9Db250ZXh0
TWVudUVmbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0TWVudTo6Q29udGV4dE1lbnUp
OiBSZW1vdmVkIG1faGl0VGVzdFJlc3VsdCBmcm9tIHRoZSBjb25zdHJ1Y3Rvci4KKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRleHRNZW51OjphcHBlbmRJdGVtKTogUmVtb3ZlZCB0aGUgY2FsbCB0byBj
aGVja09yRW5hYmxlSWZOZWVkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3RrL0NvbnRleHRNZW51
R3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51OjpDb250ZXh0TWVudSk6IFJl
bW92ZWQgbV9oaXRUZXN0UmVzdWx0IGZyb20gdGhlIGNvbnN0cnVjdG9yLgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGV4dE1lbnU6OmFwcGVuZEl0ZW0pOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9y
bS9oYWlrdS9Db250ZXh0TWVudUhhaWt1LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRN
ZW51OjpDb250ZXh0TWVudSk6IFJlbW92ZWQgbV9oaXRUZXN0UmVzdWx0IGZyb20gdGhlIGNvbnN0
cnVjdG9yLgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnU6OmFwcGVuZEl0ZW0pOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51OjppbnNlcnRJdGVtKTogRGl0dG8uCisg
ICAgICAgICogcGxhdGZvcm0vbWFjL0NvbnRleHRNZW51TWFjLm1tOgorICAgICAgICAoLVtXZWJD
b3JlTWVudVRhcmdldCB2YWxpZGF0ZU1lbnVJdGVtOl0pOiBDYWxscyBjaGVja09yRW5hYmxlSWZO
ZWVkZWQgb24gdGhlIGNvbnRyb2xsZXIgaW5zdGVhZCBvZgorICAgICAgICAgICAgdGhlIGNvbnRl
eHQgbWVudS4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51OjpDb250ZXh0TWVudSk6IFJl
bW92ZWQgbV9oaXRUZXN0UmVzdWx0IGZyb20gdGhlIGNvbnN0cnVjdG9yLgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGV4dE1lbnU6OmFwcGVuZEl0ZW0pOiBSZW1vdmVkIHRoZSBjYWxsIHRvIGNoZWNr
T3JFbmFibGVJZk5lZWRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51OjppbnNlcnRJ
dGVtKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vd2luL0NvbnRleHRNZW51V2luLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51OjpDb250ZXh0TWVudSk6IFJlbW92ZWQgbV9o
aXRUZXN0UmVzdWx0IGZyb20gdGhlIGNvbnN0cnVjdG9yLgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGV4dE1lbnU6Omluc2VydEl0ZW0pOiBSZW1vdmVkIHRoZSBjYWxsIHRvIGNoZWNrT3JFbmFibGVJ
Zk5lZWRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS93eC9Db250ZXh0TWVudVd4LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRleHRNZW51OjpDb250ZXh0TWVudSk6IFJlbW92ZWQgbV9oaXRUZXN0
UmVzdWx0IGZyb20gdGhlIGNvbnN0cnVjdG9yLgorICAgICAgICAoQ29udGV4dE1lbnU6OmFwcGVu
ZEl0ZW0pOiBEaXR0by4KKwogMjAxMC0xMi0wNyAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVp
bkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSm9obiBTdWxsaXZhbi4KSW5kZXg6
IFdlYkNvcmUvQW5kcm9pZC5tawo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0FuZHJvaWQubWsJKHJl
dmlzaW9uIDczNDY5KQorKysgV2ViQ29yZS9BbmRyb2lkLm1rCSh3b3JraW5nIGNvcHkpCkBAIC00
NTAsNyArNDUwLDYgQEAgTE9DQUxfU1JDX0ZJTEVTIDo9ICQoTE9DQUxfU1JDX0ZJTEVTKSBcCiAJ
XAogCXBsYXRmb3JtL0FyZW5hLmNwcCBcCiAJcGxhdGZvcm0vQ29udGVudFR5cGUuY3BwIFwKLQlw
bGF0Zm9ybS9Db250ZXh0TWVudS5jcHAgXAogCXBsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmNw
cCBcCiAJcGxhdGZvcm0vRGVwcmVjYXRlZFB0ckxpc3RJbXBsLmNwcCBcCiAJcGxhdGZvcm0vRHJh
Z0RhdGEuY3BwIFwKSW5kZXg6IFdlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gNzM0NjkpCisrKyBXZWJDb3JlL0NNYWtl
TGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMjcwLDcgKzEyNzAsNiBAQCBTRVQoV2ViQ29y
ZV9TT1VSQ0VTCiAKICAgICBwbGF0Zm9ybS9BcmVuYS5jcHAKICAgICBwbGF0Zm9ybS9Db250ZW50
VHlwZS5jcHAKLSAgICBwbGF0Zm9ybS9Db250ZXh0TWVudS5jcHAKICAgICBwbGF0Zm9ybS9Dcm9z
c1RocmVhZENvcGllci5jcHAKICAgICBwbGF0Zm9ybS9EZXByZWNhdGVkUHRyTGlzdEltcGwuY3Bw
CiAgICAgcGxhdGZvcm0vRHJhZ0RhdGEuY3BwCkluZGV4OiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFt
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDczNDY5KQor
KysgV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMjI1OCw3ICsyMjU4
LDYgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3BsYXRmb3JtL0F1dG9kcmFpbmVk
UG9vbC5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL0NvbnRlbnRUeXBlLmNwcCBcCiAJV2ViQ29yZS9w
bGF0Zm9ybS9Db250ZW50VHlwZS5oIFwKLQlXZWJDb3JlL3BsYXRmb3JtL0NvbnRleHRNZW51LmNw
cCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9Db250ZXh0TWVudS5oIFwKIAlXZWJDb3JlL3BsYXRmb3Jt
L0NvbnRleHRNZW51SXRlbS5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL0Nvb2tpZS5oIFwKSW5kZXg6
IFdlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmV4
cC5pbgkocmV2aXNpb24gNzM0NjkpCisrKyBXZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjUyLDEyICsxMjUyLDEyIEBAIF9fWk43V2ViQ29yZTE1Q29udGV4dE1lbnVJ
dGVtQzFFTlNfMTlDb24KIF9fWk43V2ViQ29yZTE1Q29udGV4dE1lbnVJdGVtQzFFUDEwTlNNZW51
SXRlbQogX19aTjdXZWJDb3JlMTVDb250ZXh0TWVudUl0ZW1EMUV2CiBfX1pON1dlYkNvcmUyMUNv
bnRleHRNZW51Q29udHJvbGxlcjE2Y2xlYXJDb250ZXh0TWVudUV2CitfX1pOSzdXZWJDb3JlMjFD
b250ZXh0TWVudUNvbnRyb2xsZXIyMWNoZWNrT3JFbmFibGVJZk5lZWRlZEVSTlNfMTVDb250ZXh0
TWVudUl0ZW1FCiBfX1pON1dlYkNvcmUyMUNvbnRleHRNZW51Q29udHJvbGxlcjIzY29udGV4dE1l
bnVJdGVtU2VsZWN0ZWRFUE5TXzE1Q29udGV4dE1lbnVJdGVtRQogX19aTjdXZWJDb3JlMjFjb250
ZXh0TWVudUl0ZW1WZWN0b3JFUDE0TlNNdXRhYmxlQXJyYXkKIF9fWk43V2ViQ29yZTIzcGxhdGZv
cm1NZW51RGVzY3JpcHRpb25FUk4zV1RGNlZlY3RvcklOU18xNUNvbnRleHRNZW51SXRlbUVMbTBF
RUUKIF9fWk43V2ViQ29yZTZDaHJvbWUxNXNob3dDb250ZXh0TWVudUV2CiBfX1pOSzdXZWJDb3Jl
MTFDb250ZXh0TWVudTE5cGxhdGZvcm1EZXNjcmlwdGlvbkV2Ci1fX1pOSzdXZWJDb3JlMTFDb250
ZXh0TWVudTIxY2hlY2tPckVuYWJsZUlmTmVlZGVkRVJOU18xNUNvbnRleHRNZW51SXRlbUUKIF9f
Wk5LN1dlYkNvcmUxNUNvbnRleHRNZW51SXRlbTE1cGxhdGZvcm1TdWJNZW51RXYKIF9fWk5LN1dl
YkNvcmUxNUNvbnRleHRNZW51SXRlbTR0eXBlRXYKIF9fWk5LN1dlYkNvcmUxNUNvbnRleHRNZW51
SXRlbTV0aXRsZUV2CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gNzM0NjkpCisrKyBXZWJDb3JlL1dlYkNvcmUu
Z3lwaQkod29ya2luZyBjb3B5KQpAQCAtMzQyMSw3ICszNDIxLDYgQEAKICAgICAgICAgICAgICdw
bGF0Zm9ybS9BdXRvZHJhaW5lZFBvb2wuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vQ29udGVu
dFR5cGUuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9Db250ZW50VHlwZS5oJywKLSAgICAg
ICAgICAgICdwbGF0Zm9ybS9Db250ZXh0TWVudS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L0NvbnRleHRNZW51LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL0NvbnRleHRNZW51SXRlbS5o
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9Db29raWUuaCcsCkluZGV4OiBXZWJDb3JlL1dlYkNv
cmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDczNDY5
KQorKysgV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtMTE1MSw3ICsxMTUx
LDYgQEAgU09VUkNFUyArPSBcCiAgICAgcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5jcHAgXAog
ICAgIHBsYXRmb3JtL3RleHQvSHlwaGVuYXRpb24uY3BwIFwKICAgICBwbGF0Zm9ybS9Db250ZW50
VHlwZS5jcHAgXAotICAgIHBsYXRmb3JtL0NvbnRleHRNZW51LmNwcCBcCiAgICAgcGxhdGZvcm0v
Q3Jvc3NUaHJlYWRDb3BpZXIuY3BwIFwKICAgICBwbGF0Zm9ybS9EZXByZWNhdGVkUHRyTGlzdElt
cGwuY3BwIFwKICAgICBwbGF0Zm9ybS9EcmFnRGF0YS5jcHAgXApJbmRleDogV2ViQ29yZS9XZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA3MzQ2OSkKKysrIFdlYkNvcmUvV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTI1MzE0LDEwICsyNTMx
NCw2IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XHBsYXRmb3JtXENvbnRleHRNZW51LmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQog
CQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cQ29udGV4dE1lbnUuaCIKIAkJCQk+CiAJCQk8
L0ZpbGU+CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
cmV2aXNpb24gNzM0NjkpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjgzOSw3ICsyODM5LDYgQEAKIAkJOTNCMkQ4MTYwRjk5
MjBEMjAwNkFFNkIyIC8qIFN1ZGRlblRlcm1pbmF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0IyRDgxNTBGOTkyMEQyMDA2QUU2QjIgLyogU3Vk
ZGVuVGVybWluYXRpb24uaCAqLzsgfTsKIAkJOTNCMkQ4MTgwRjk5MjBFRTAwNkFFNkIyIC8qIFN1
ZGRlblRlcm1pbmF0aW9uLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTNCMkQ4MTcwRjk5MjBFRTAwNkFFNkIyIC8qIFN1ZGRlblRlcm1pbmF0aW9uLm1t
ICovOyB9OwogCQk5M0I2QTBFNjBCMEJDQTVDMDBGNTAyN0EgLyogQ29udGV4dE1lbnUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQjZBMEU1MEIwQkNB
NUMwMEY1MDI3QSAvKiBDb250ZXh0TWVudS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07Ci0JCTkzQjZBMEU4MEIwQkNBNjcwMEY1MDI3QSAvKiBDb250ZXh0
TWVudS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
M0I2QTBFNzBCMEJDQTY3MDBGNTAyN0EgLyogQ29udGV4dE1lbnUuY3BwICovOyB9OwogCQk5M0I2
QTBFQTBCMEJDQTg0MDBGNTAyN0EgLyogQ29udGV4dE1lbnVNYWMubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0I2QTBFOTBCMEJDQTg0MDBGNTAyN0Eg
LyogQ29udGV4dE1lbnVNYWMubW0gKi87IH07CiAJCTkzQjcwRDYzMDlFQjBDN0MwMDlEODQ2OCAv
KiBKU0RPTUJpbmRpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTNCNzBENDcwOUVCMEM3QzAwOUQ4NDY4IC8qIEpTRE9NQmluZGluZy5jcHAgKi87
IH07CiAJCTkzQjcwRDY0MDlFQjBDN0MwMDlEODQ2OCAvKiBKU0RPTUJpbmRpbmcuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQjcwRDQ4MDlFQjBDN0Mw
MDlEODQ2OCAvKiBKU0RPTUJpbmRpbmcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwpAQCAtOTAwNyw3ICs5MDA2LDYgQEAKIAkJOTNCMkQ4MTUwRjk5MjBE
MjAwNkFFNkIyIC8qIFN1ZGRlblRlcm1pbmF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFN1ZGRlblRlcm1pbmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTkzQjJEODE3MEY5OTIwRUUwMDZBRTZCMiAvKiBTdWRkZW5UZXJtaW5hdGlvbi5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFN1ZGRlblRlcm1pbmF0aW9uLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0I2QTBFNTBCMEJDQTVDMDBGNTAyN0Eg
LyogQ29udGV4dE1lbnUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnRl
eHRNZW51Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTkzQjZBMEU3MEIwQkNBNjcw
MEY1MDI3QSAvKiBDb250ZXh0TWVudS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gQ29udGV4dE1lbnUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5
M0I2QTBFOTBCMEJDQTg0MDBGNTAyN0EgLyogQ29udGV4dE1lbnVNYWMubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQ29udGV4dE1lbnVNYWMubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzQjcwRDQ3MDlFQjBDN0MwMDlEODQ2OCAvKiBKU0RPTUJp
bmRpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRE9NQmlu
ZGluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzQjcwRDQ4MDlFQjBDN0Mw
MDlEODQ2OCAvKiBKU0RPTUJpbmRpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTRE9NQmluZGluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTc1NzQs
NyArMTc1NzIsNiBAQAogCQkJCUJDQzhDRkNBMDk4NkNEMjQwMDE0MEJGMiAvKiBDb2xvckRhdGEu
Z3BlcmYgKi8sCiAJCQkJNDFEMDE1QzkwRjRCNUM3MTAwNEE2NjJGIC8qIENvbnRlbnRUeXBlLmNw
cCAqLywKIAkJCQk0MUQwMTVDODBGNEI1QzcxMDA0QTY2MkYgLyogQ29udGVudFR5cGUuaCAqLywK
LQkJCQk5M0I2QTBFNzBCMEJDQTY3MDBGNTAyN0EgLyogQ29udGV4dE1lbnUuY3BwICovLAogCQkJ
CTkzQjZBMEU1MEIwQkNBNUMwMEY1MDI3QSAvKiBDb250ZXh0TWVudS5oICovLAogCQkJCTA2MDI3
Q0FDMEIxQ0JGQzAwMDg4NEIyRCAvKiBDb250ZXh0TWVudUl0ZW0uaCAqLywKIAkJCQlEOEI2MTUy
RTEwMzI0OTUxMDBDODU1NEEgLyogQ29va2llLmggKi8sCkBAIC0yMTk1Niw3ICsyMTk1Myw2IEBA
CiAJCQkJQTgxODcyMUYwOTc3RDNDMDAwNTgyNkQ5IC8qIENvbnRhaW5lck5vZGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQkM1RUI5ODAwRTgyMDcyNTAwQjI1OTY1IC8qIENvbnRlbnREYXRhLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTQxRDAxNUNCMEY0QjVDNzEwMDRBNjYyRiAvKiBDb250ZW50
VHlwZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk5M0I2QTBFODBCMEJDQTY3MDBGNTAyN0EgLyog
Q29udGV4dE1lbnUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDY1QUQ0RjYwQjBDMkVEQTAwNUEy
QjFEIC8qIENvbnRleHRNZW51Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwNjAy
N0NCMzBCMUNDMDNEMDA4ODRCMkQgLyogQ29udGV4dE1lbnVJdGVtTWFjLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJOTNCNkEwRUEwQjBCQ0E4NDAwRjUwMjdBIC8qIENvbnRleHRNZW51TWFjLm1tIGlu
IFNvdXJjZXMgKi8sCkluZGV4OiBXZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcAko
cmV2aXNpb24gNzM0NjkpCisrKyBXZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkNocm9tZS5oIgog
I2luY2x1ZGUgIkNvbnRleHRNZW51LmgiCiAjaW5jbHVkZSAiQ29udGV4dE1lbnVDbGllbnQuaCIK
KyNpbmNsdWRlICJDb250ZXh0TWVudUl0ZW0uaCIKICNpbmNsdWRlICJDb250ZXh0TWVudVByb3Zp
ZGVyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50
LmgiCkBAIC01MCw2ICs1MSw3IEBACiAjaW5jbHVkZSAiSGl0VGVzdFJlcXVlc3QuaCIKICNpbmNs
dWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgor
I2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKICNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCiAj
aW5jbHVkZSAiTmF2aWdhdGlvbkFjdGlvbi5oIgogI2luY2x1ZGUgIk5vZGUuaCIKQEAgLTYzLDYg
KzY1LDEwIEBACiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiV2luZG93RmVh
dHVyZXMuaCIKICNpbmNsdWRlICJtYXJrdXAuaCIKKyNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmlj
b2RlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXVEY7Cit1c2luZyBuYW1lc3BhY2UgVW5pY29kZTsK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC05MCwxMCArOTYsMTIgQEAgdm9pZCBDb250ZXh0
TWVudUNvbnRyb2xsZXI6OmNsZWFyQ29udGV4dAogCiB2b2lkIENvbnRleHRNZW51Q29udHJvbGxl
cjo6aGFuZGxlQ29udGV4dE1lbnVFdmVudChFdmVudCogZXZlbnQpCiB7Ci0gICAgbV9jb250ZXh0
TWVudS5zZXQoY3JlYXRlQ29udGV4dE1lbnUoZXZlbnQpKTsKKyAgICBtX2NvbnRleHRNZW51ID0g
Y3JlYXRlQ29udGV4dE1lbnUoZXZlbnQpOwogICAgIGlmICghbV9jb250ZXh0TWVudSkKICAgICAg
ICAgcmV0dXJuOwotICAgIG1fY29udGV4dE1lbnUtPnBvcHVsYXRlKCk7CisKKyAgICBwb3B1bGF0
ZSgpOworCiAgICAgc2hvd0NvbnRleHRNZW51KGV2ZW50KTsKIH0KIApAQCAtMTAxLDcgKzEwOSw3
IEBAIHZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjpzaG93Q29udGV4dE0KIHsKICAgICBtX21l
bnVQcm92aWRlciA9IG1lbnVQcm92aWRlcjsKIAotICAgIG1fY29udGV4dE1lbnUuc2V0KGNyZWF0
ZUNvbnRleHRNZW51KGV2ZW50KSk7CisgICAgbV9jb250ZXh0TWVudSA9IGNyZWF0ZUNvbnRleHRN
ZW51KGV2ZW50KTsKICAgICBpZiAoIW1fY29udGV4dE1lbnUpIHsKICAgICAgICAgY2xlYXJDb250
ZXh0TWVudSgpOwogICAgICAgICByZXR1cm47CkBAIC0xMTEsMTAgKzExOSwxMSBAQCB2b2lkIENv
bnRleHRNZW51Q29udHJvbGxlcjo6c2hvd0NvbnRleHRNCiAgICAgc2hvd0NvbnRleHRNZW51KGV2
ZW50KTsKIH0KIAotQ29udGV4dE1lbnUqIENvbnRleHRNZW51Q29udHJvbGxlcjo6Y3JlYXRlQ29u
dGV4dE1lbnUoRXZlbnQqIGV2ZW50KQorUGFzc093blB0cjxDb250ZXh0TWVudT4gQ29udGV4dE1l
bnVDb250cm9sbGVyOjpjcmVhdGVDb250ZXh0TWVudShFdmVudCogZXZlbnQpCiB7Ci0gICBpZiAo
IWV2ZW50LT5pc01vdXNlRXZlbnQoKSkKKyAgICBpZiAoIWV2ZW50LT5pc01vdXNlRXZlbnQoKSkK
ICAgICAgICAgcmV0dXJuIDA7CisKICAgICBNb3VzZUV2ZW50KiBtb3VzZUV2ZW50ID0gc3RhdGlj
X2Nhc3Q8TW91c2VFdmVudCo+KGV2ZW50KTsKICAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdChtb3Vz
ZUV2ZW50LT5hYnNvbHV0ZUxvY2F0aW9uKCkpOwogCkBAIC0xMjMsMTQgKzEzMiwxNyBAQCBDb250
ZXh0TWVudSogQ29udGV4dE1lbnVDb250cm9sbGVyOjpjcmVhCiAKICAgICBpZiAoIXJlc3VsdC5p
bm5lck5vblNoYXJlZE5vZGUoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIG5ldyBD
b250ZXh0TWVudShyZXN1bHQpOworCisgICAgbV9oaXRUZXN0UmVzdWx0ID0gcmVzdWx0OworCisg
ICAgcmV0dXJuIG5ldyBDb250ZXh0TWVudTsKIH0KIAogdm9pZCBDb250ZXh0TWVudUNvbnRyb2xs
ZXI6OnNob3dDb250ZXh0TWVudShFdmVudCogZXZlbnQpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RP
UikKICAgICBpZiAobV9wYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmVuYWJsZWQoKSkKLSAg
ICAgICAgbV9jb250ZXh0TWVudS0+YWRkSW5zcGVjdEVsZW1lbnRJdGVtKCk7CisgICAgICAgIGFk
ZEluc3BlY3RFbGVtZW50SXRlbSgpOwogI2VuZGlmCiAgICAgUGxhdGZvcm1NZW51RGVzY3JpcHRp
b24gY3VzdG9tTWVudSA9IG1fY2xpZW50LT5nZXRDdXN0b21NZW51RnJvbURlZmF1bHRJdGVtcyht
X2NvbnRleHRNZW51LmdldCgpKTsKICAgICBtX2NvbnRleHRNZW51LT5zZXRQbGF0Zm9ybURlc2Ny
aXB0aW9uKGN1c3RvbU1lbnUpOwpAQCAtMTYyLDU0ICsxNzQsNTMgQEAgdm9pZCBDb250ZXh0TWVu
dUNvbnRyb2xsZXI6OmNvbnRleHRNZW51SQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
SGl0VGVzdFJlc3VsdCByZXN1bHQgPSBtX2NvbnRleHRNZW51LT5oaXRUZXN0UmVzdWx0KCk7Ci0g
ICAgRnJhbWUqIGZyYW1lID0gcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpLT5kb2N1bWVudCgp
LT5mcmFtZSgpOworICAgIEZyYW1lKiBmcmFtZSA9IG1faGl0VGVzdFJlc3VsdC5pbm5lck5vblNo
YXJlZE5vZGUoKS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAg
ICByZXR1cm47CiAKICAgICBzd2l0Y2ggKGl0ZW0tPmFjdGlvbigpKSB7CiAgICAgY2FzZSBDb250
ZXh0TWVudUl0ZW1UYWdPcGVuTGlua0luTmV3V2luZG93OgotICAgICAgICBvcGVuTmV3V2luZG93
KHJlc3VsdC5hYnNvbHV0ZUxpbmtVUkwoKSwgZnJhbWUpOworICAgICAgICBvcGVuTmV3V2luZG93
KG1faGl0VGVzdFJlc3VsdC5hYnNvbHV0ZUxpbmtVUkwoKSwgZnJhbWUpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0Rvd25sb2FkTGlua1RvRGlzazoKICAgICAg
ICAgLy8gRklYTUU6IFNvbWUgZGF5IHdlIHNob3VsZCBiZSBhYmxlIHRvIGRvIHRoaXMgZnJvbSB3
aXRoaW4gV2ViQ29yZS4KLSAgICAgICAgbV9jbGllbnQtPmRvd25sb2FkVVJMKHJlc3VsdC5hYnNv
bHV0ZUxpbmtVUkwoKSk7CisgICAgICAgIG1fY2xpZW50LT5kb3dubG9hZFVSTChtX2hpdFRlc3RS
ZXN1bHQuYWJzb2x1dGVMaW5rVVJMKCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENvbnRl
eHRNZW51SXRlbVRhZ0NvcHlMaW5rVG9DbGlwYm9hcmQ6Ci0gICAgICAgIGZyYW1lLT5lZGl0b3Io
KS0+Y29weVVSTChyZXN1bHQuYWJzb2x1dGVMaW5rVVJMKCksIHJlc3VsdC50ZXh0Q29udGVudCgp
KTsKKyAgICAgICAgZnJhbWUtPmVkaXRvcigpLT5jb3B5VVJMKG1faGl0VGVzdFJlc3VsdC5hYnNv
bHV0ZUxpbmtVUkwoKSwgbV9oaXRUZXN0UmVzdWx0LnRleHRDb250ZW50KCkpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5JbWFnZUluTmV3V2luZG93Ogot
ICAgICAgICBvcGVuTmV3V2luZG93KHJlc3VsdC5hYnNvbHV0ZUltYWdlVVJMKCksIGZyYW1lKTsK
KyAgICAgICAgb3Blbk5ld1dpbmRvdyhtX2hpdFRlc3RSZXN1bHQuYWJzb2x1dGVJbWFnZVVSTCgp
LCBmcmFtZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnRG93
bmxvYWRJbWFnZVRvRGlzazoKICAgICAgICAgLy8gRklYTUU6IFNvbWUgZGF5IHdlIHNob3VsZCBi
ZSBhYmxlIHRvIGRvIHRoaXMgZnJvbSB3aXRoaW4gV2ViQ29yZS4KLSAgICAgICAgbV9jbGllbnQt
PmRvd25sb2FkVVJMKHJlc3VsdC5hYnNvbHV0ZUltYWdlVVJMKCkpOworICAgICAgICBtX2NsaWVu
dC0+ZG93bmxvYWRVUkwobV9oaXRUZXN0UmVzdWx0LmFic29sdXRlSW1hZ2VVUkwoKSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQ29weUltYWdlVG9DbGlwYm9h
cmQ6CiAgICAgICAgIC8vIEZJWE1FOiBUaGUgUGFzdGVib2FyZCBjbGFzcyBpcyBub3Qgd3JpdHRl
biB5ZXQKICAgICAgICAgLy8gRm9yIG5vdywgY2FsbCBpbnRvIHRoZSBjbGllbnQuIFRoaXMgaXMg
dGVtcG9yYXJ5IQotICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPmNvcHlJbWFnZShyZXN1bHQpOwor
ICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPmNvcHlJbWFnZShtX2hpdFRlc3RSZXN1bHQpOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5NZWRpYUluTmV3V2lu
ZG93OgotICAgICAgICBvcGVuTmV3V2luZG93KHJlc3VsdC5hYnNvbHV0ZU1lZGlhVVJMKCksIGZy
YW1lKTsKKyAgICAgICAgb3Blbk5ld1dpbmRvdyhtX2hpdFRlc3RSZXN1bHQuYWJzb2x1dGVNZWRp
YVVSTCgpLCBmcmFtZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ29udGV4dE1lbnVJdGVt
VGFnQ29weU1lZGlhTGlua1RvQ2xpcGJvYXJkOgotICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPmNv
cHlVUkwocmVzdWx0LmFic29sdXRlTWVkaWFVUkwoKSwgcmVzdWx0LnRleHRDb250ZW50KCkpOwor
ICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPmNvcHlVUkwobV9oaXRUZXN0UmVzdWx0LmFic29sdXRl
TWVkaWFVUkwoKSwgbV9oaXRUZXN0UmVzdWx0LnRleHRDb250ZW50KCkpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1RvZ2dsZU1lZGlhQ29udHJvbHM6Ci0gICAg
ICAgIHJlc3VsdC50b2dnbGVNZWRpYUNvbnRyb2xzRGlzcGxheSgpOworICAgICAgICBtX2hpdFRl
c3RSZXN1bHQudG9nZ2xlTWVkaWFDb250cm9sc0Rpc3BsYXkoKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdUb2dnbGVNZWRpYUxvb3A6Ci0gICAgICAgIHJlc3Vs
dC50b2dnbGVNZWRpYUxvb3BQbGF5YmFjaygpOworICAgICAgICBtX2hpdFRlc3RSZXN1bHQudG9n
Z2xlTWVkaWFMb29wUGxheWJhY2soKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDb250ZXh0
TWVudUl0ZW1UYWdFbnRlclZpZGVvRnVsbHNjcmVlbjoKLSAgICAgICAgcmVzdWx0LmVudGVyRnVs
bHNjcmVlbkZvclZpZGVvKCk7CisgICAgICAgIG1faGl0VGVzdFJlc3VsdC5lbnRlckZ1bGxzY3Jl
ZW5Gb3JWaWRlbygpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRh
Z01lZGlhUGxheVBhdXNlOgotICAgICAgICByZXN1bHQudG9nZ2xlTWVkaWFQbGF5U3RhdGUoKTsK
KyAgICAgICAgbV9oaXRUZXN0UmVzdWx0LnRvZ2dsZU1lZGlhUGxheVN0YXRlKCk7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnTWVkaWFNdXRlOgotICAgICAgICBy
ZXN1bHQudG9nZ2xlTWVkaWFNdXRlU3RhdGUoKTsKKyAgICAgICAgbV9oaXRUZXN0UmVzdWx0LnRv
Z2dsZU1lZGlhTXV0ZVN0YXRlKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ29udGV4dE1l
bnVJdGVtVGFnT3BlbkZyYW1lSW5OZXdXaW5kb3c6IHsKICAgICAgICAgRG9jdW1lbnRMb2FkZXIq
IGxvYWRlciA9IGZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKTsKQEAgLTI3MywxMCAr
Mjg0LDEwIEBAIHZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjpjb250ZXh0TWVudUkKICAgICAg
ICAgbV9jbGllbnQtPmxvb2tVcEluRGljdGlvbmFyeShmcmFtZSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnT3Blbkxpbms6Ci0gICAgICAgIGlmIChGcmFtZSog
dGFyZ2V0RnJhbWUgPSByZXN1bHQudGFyZ2V0RnJhbWUoKSkKLSAgICAgICAgICAgIHRhcmdldEZy
YW1lLT5sb2FkZXIoKS0+bG9hZEZyYW1lUmVxdWVzdChGcmFtZUxvYWRSZXF1ZXN0KGZyYW1lLT5k
b2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLCBSZXNvdXJjZVJlcXVlc3QocmVzdWx0LmFic29s
dXRlTGlua1VSTCgpLCBmcmFtZS0+bG9hZGVyKCktPm91dGdvaW5nUmVmZXJyZXIoKSkpLCBmYWxz
ZSwgZmFsc2UsIDAsIDAsIFNlbmRSZWZlcnJlcik7CisgICAgICAgIGlmIChGcmFtZSogdGFyZ2V0
RnJhbWUgPSBtX2hpdFRlc3RSZXN1bHQudGFyZ2V0RnJhbWUoKSkKKyAgICAgICAgICAgIHRhcmdl
dEZyYW1lLT5sb2FkZXIoKS0+bG9hZEZyYW1lUmVxdWVzdChGcmFtZUxvYWRSZXF1ZXN0KGZyYW1l
LT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLCBSZXNvdXJjZVJlcXVlc3QobV9oaXRUZXN0
UmVzdWx0LmFic29sdXRlTGlua1VSTCgpLCBmcmFtZS0+bG9hZGVyKCktPm91dGdvaW5nUmVmZXJy
ZXIoKSkpLCBmYWxzZSwgZmFsc2UsIDAsIDAsIFNlbmRSZWZlcnJlcik7CiAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgIG9wZW5OZXdXaW5kb3cocmVzdWx0LmFic29sdXRlTGlua1VSTCgpLCBmcmFt
ZSk7CisgICAgICAgICAgICBvcGVuTmV3V2luZG93KG1faGl0VGVzdFJlc3VsdC5hYnNvbHV0ZUxp
bmtVUkwoKSwgZnJhbWUpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENvbnRleHRNZW51SXRl
bVRhZ0JvbGQ6CiAgICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZCgiVG9nZ2xlQm9sZCIp
LmV4ZWN1dGUoKTsKQEAgLTI5NSw3ICszMDYsNyBAQCB2b2lkIENvbnRleHRNZW51Q29udHJvbGxl
cjo6Y29udGV4dE1lbnVJCiAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7CiAgICAgICAgIFJlZlB0
cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS0+dG9Ob3JtYWxpemVk
UmFuZ2UoKTsKICAgICAgICAgaWYgKCFzZWxlY3RlZFJhbmdlIHx8IHNlbGVjdGVkUmFuZ2UtPmNv
bGxhcHNlZChlYykpIHsKLSAgICAgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHJlc3VsdC5p
bm5lck5vblNoYXJlZE5vZGUoKS0+ZG9jdW1lbnQoKTsKKyAgICAgICAgICAgIERvY3VtZW50KiBk
b2N1bWVudCA9IG1faGl0VGVzdFJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKS0+ZG9jdW1lbnQo
KTsKICAgICAgICAgICAgIHNlbGVjdGVkUmFuZ2UgPSBkb2N1bWVudC0+Y3JlYXRlUmFuZ2UoKTsK
ICAgICAgICAgICAgIHNlbGVjdGVkUmFuZ2UtPnNlbGVjdE5vZGUoZG9jdW1lbnQtPmRvY3VtZW50
RWxlbWVudCgpLCBlYyk7CiAgICAgICAgIH0KQEAgLTM4NSwxMyArMzk2LDEzIEBAIHZvaWQgQ29u
dGV4dE1lbnVDb250cm9sbGVyOjpjb250ZXh0TWVudUkKICAgICAgICAgZnJhbWUtPmVkaXRvcigp
LT50b2dnbGVBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb24oKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdDaGFuZ2VCYWNrOgotICAgICAgICBmcmFtZS0+ZWRp
dG9yKCktPmNoYW5nZUJhY2tUb1JlcGxhY2VkU3RyaW5nKHJlc3VsdC5yZXBsYWNlZFN0cmluZygp
KTsKKyAgICAgICAgZnJhbWUtPmVkaXRvcigpLT5jaGFuZ2VCYWNrVG9SZXBsYWNlZFN0cmluZyht
X2hpdFRlc3RSZXN1bHQucmVwbGFjZWRTdHJpbmcoKSk7CiAgICAgICAgIGJyZWFrOwogI2VuZGlm
CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0luc3Bl
Y3RFbGVtZW50OgogICAgICAgICBpZiAoUGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCkpCi0gICAg
ICAgICAgICBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmluc3BlY3QocmVzdWx0LmlubmVy
Tm9uU2hhcmVkTm9kZSgpKTsKKyAgICAgICAgICAgIHBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIo
KS0+aW5zcGVjdChtX2hpdFRlc3RSZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCkpOwogICAgICAg
ICBicmVhazsKICNlbmRpZgogICAgIGRlZmF1bHQ6CkBAIC0zOTksNiArNDEwLDgyOSBAQCB2b2lk
IENvbnRleHRNZW51Q29udHJvbGxlcjo6Y29udGV4dE1lbnVJCiAgICAgfQogfQogCit2b2lkIENv
bnRleHRNZW51Q29udHJvbGxlcjo6YXBwZW5kSXRlbShDb250ZXh0TWVudUl0ZW0mIG1lbnVJdGVt
LCBDb250ZXh0TWVudSogcGFyZW50TWVudSkKK3sKKyAgICBjaGVja09yRW5hYmxlSWZOZWVkZWQo
bWVudUl0ZW0pOworICAgIGlmIChwYXJlbnRNZW51KQorICAgICAgICBwYXJlbnRNZW51LT5hcHBl
bmRJdGVtKG1lbnVJdGVtKTsKK30KKworc3RhdGljIFBhc3NPd25QdHI8Q29udGV4dE1lbnVJdGVt
PiBzZXBhcmF0b3JJdGVtKCkKK3sKKyAgICByZXR1cm4gbmV3IENvbnRleHRNZW51SXRlbShTZXBh
cmF0b3JUeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdOb0FjdGlvbiwgU3RyaW5nKCkpOworfQorCit2
b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6Y3JlYXRlQW5kQXBwZW5kRm9udFN1Yk1lbnUoQ29u
dGV4dE1lbnVJdGVtJiBmb250TWVudUl0ZW0pCit7CisgICAgQ29udGV4dE1lbnUgZm9udE1lbnU7
CisKKyNpZiBQTEFURk9STShNQUMpCisgICAgQ29udGV4dE1lbnVJdGVtIHNob3dGb250cyhBY3Rp
b25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTaG93Rm9udHMsIGNvbnRleHRNZW51SXRlbVRhZ1No
b3dGb250cygpKTsKKyNlbmRpZgorICAgIENvbnRleHRNZW51SXRlbSBib2xkKENoZWNrYWJsZUFj
dGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0JvbGQsIGNvbnRleHRNZW51SXRlbVRhZ0JvbGQo
KSk7CisgICAgQ29udGV4dE1lbnVJdGVtIGl0YWxpYyhDaGVja2FibGVBY3Rpb25UeXBlLCBDb250
ZXh0TWVudUl0ZW1UYWdJdGFsaWMsIGNvbnRleHRNZW51SXRlbVRhZ0l0YWxpYygpKTsKKyAgICBD
b250ZXh0TWVudUl0ZW0gdW5kZXJsaW5lKENoZWNrYWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51
SXRlbVRhZ1VuZGVybGluZSwgY29udGV4dE1lbnVJdGVtVGFnVW5kZXJsaW5lKCkpOworICAgIENv
bnRleHRNZW51SXRlbSBvdXRsaW5lKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ091dGxp
bmUsIGNvbnRleHRNZW51SXRlbVRhZ091dGxpbmUoKSk7CisjaWYgUExBVEZPUk0oTUFDKQorICAg
IENvbnRleHRNZW51SXRlbSBzdHlsZXMoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU3R5
bGVzLCBjb250ZXh0TWVudUl0ZW1UYWdTdHlsZXMoKSk7CisgICAgQ29udGV4dE1lbnVJdGVtIHNo
b3dDb2xvcnMoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU2hvd0NvbG9ycywgY29udGV4
dE1lbnVJdGVtVGFnU2hvd0NvbG9ycygpKTsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oTUFDKQor
ICAgIGFwcGVuZEl0ZW0oc2hvd0ZvbnRzLCAmZm9udE1lbnUpOworI2VuZGlmCisgICAgYXBwZW5k
SXRlbShib2xkLCAmZm9udE1lbnUpOworICAgIGFwcGVuZEl0ZW0oaXRhbGljLCAmZm9udE1lbnUp
OworICAgIGFwcGVuZEl0ZW0odW5kZXJsaW5lLCAmZm9udE1lbnUpOworICAgIGFwcGVuZEl0ZW0o
b3V0bGluZSwgJmZvbnRNZW51KTsKKyNpZiBQTEFURk9STShNQUMpCisgICAgYXBwZW5kSXRlbShz
dHlsZXMsICZmb250TWVudSk7CisgICAgYXBwZW5kSXRlbSgqc2VwYXJhdG9ySXRlbSgpLCAmZm9u
dE1lbnUpOworICAgIGFwcGVuZEl0ZW0oc2hvd0NvbG9ycywgJmZvbnRNZW51KTsKKyNlbmRpZgor
CisgICAgZm9udE1lbnVJdGVtLnNldFN1Yk1lbnUoJmZvbnRNZW51KTsKK30KKworI2lmICFkZWZp
bmVkKEJVSUxESU5HX09OX1RJR0VSKQorCisjaWYgIVBMQVRGT1JNKEdUSykKKwordm9pZCBDb250
ZXh0TWVudUNvbnRyb2xsZXI6OmNyZWF0ZUFuZEFwcGVuZFNwZWxsaW5nQW5kR3JhbW1hclN1Yk1l
bnUoQ29udGV4dE1lbnVJdGVtJiBzcGVsbGluZ0FuZEdyYW1tYXJNZW51SXRlbSkKK3sKKyAgICBD
b250ZXh0TWVudSBzcGVsbGluZ0FuZEdyYW1tYXJNZW51OworCisgICAgQ29udGV4dE1lbnVJdGVt
IHNob3dTcGVsbGluZ1BhbmVsKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1Nob3dTcGVs
bGluZ1BhbmVsLCAKKyAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnU2hvd1NwZWxsaW5nUGFuZWwo
dHJ1ZSkpOworICAgIENvbnRleHRNZW51SXRlbSBjaGVja1NwZWxsaW5nKEFjdGlvblR5cGUsIENv
bnRleHRNZW51SXRlbVRhZ0NoZWNrU3BlbGxpbmcsIAorICAgICAgICBjb250ZXh0TWVudUl0ZW1U
YWdDaGVja1NwZWxsaW5nKCkpOworICAgIENvbnRleHRNZW51SXRlbSBjaGVja0FzWW91VHlwZShD
aGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdDaGVja1NwZWxsaW5nV2hpbGVU
eXBpbmcsIAorICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdDaGVja1NwZWxsaW5nV2hpbGVUeXBp
bmcoKSk7CisgICAgQ29udGV4dE1lbnVJdGVtIGdyYW1tYXJXaXRoU3BlbGxpbmcoQ2hlY2thYmxl
QWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnQ2hlY2tHcmFtbWFyV2l0aFNwZWxsaW5nLCAK
KyAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnQ2hlY2tHcmFtbWFyV2l0aFNwZWxsaW5nKCkpOwor
I2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKKyAgICBD
b250ZXh0TWVudUl0ZW0gY29ycmVjdFNwZWxsaW5nKENoZWNrYWJsZUFjdGlvblR5cGUsIENvbnRl
eHRNZW51SXRlbVRhZ0NvcnJlY3RTcGVsbGluZ0F1dG9tYXRpY2FsbHksIAorICAgICAgICBjb250
ZXh0TWVudUl0ZW1UYWdDb3JyZWN0U3BlbGxpbmdBdXRvbWF0aWNhbGx5KCkpOworI2VuZGlmCisK
KyAgICBhcHBlbmRJdGVtKHNob3dTcGVsbGluZ1BhbmVsLCAmc3BlbGxpbmdBbmRHcmFtbWFyTWVu
dSk7CisgICAgYXBwZW5kSXRlbShjaGVja1NwZWxsaW5nLCAmc3BlbGxpbmdBbmRHcmFtbWFyTWVu
dSk7CisjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQor
ICAgIGFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSwgJnNwZWxsaW5nQW5kR3JhbW1hck1lbnUp
OworI2VuZGlmCisgICAgYXBwZW5kSXRlbShjaGVja0FzWW91VHlwZSwgJnNwZWxsaW5nQW5kR3Jh
bW1hck1lbnUpOworICAgIGFwcGVuZEl0ZW0oZ3JhbW1hcldpdGhTcGVsbGluZywgJnNwZWxsaW5n
QW5kR3JhbW1hck1lbnUpOworI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdf
T05fTEVPUEFSRCkKKyAgICBhcHBlbmRJdGVtKGNvcnJlY3RTcGVsbGluZywgJnNwZWxsaW5nQW5k
R3JhbW1hck1lbnUpOworI2VuZGlmCisKKyAgICBzcGVsbGluZ0FuZEdyYW1tYXJNZW51SXRlbS5z
ZXRTdWJNZW51KCZzcGVsbGluZ0FuZEdyYW1tYXJNZW51KTsKK30KKworI2VuZGlmIC8vICFQTEFU
Rk9STShHVEspCisKKyNlbHNlCisKK3ZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjpjcmVhdGVB
bmRBcHBlbmRTcGVsbGluZ0FuZEdyYW1tYXJTdWJNZW51KENvbnRleHRNZW51SXRlbSYgc3BlbGxp
bmdBbmRHcmFtbWFyTWVudUl0ZW0pCit7CisgICAgQ29udGV4dE1lbnUgc3BlbGxpbmdNZW51Owor
CisgICAgQ29udGV4dE1lbnVJdGVtIHNob3dTcGVsbGluZ1BhbmVsKEFjdGlvblR5cGUsIENvbnRl
eHRNZW51SXRlbVRhZ1Nob3dTcGVsbGluZ1BhbmVsLCAKKyAgICAgICAgY29udGV4dE1lbnVJdGVt
VGFnU2hvd1NwZWxsaW5nUGFuZWwodHJ1ZSkpOworICAgIENvbnRleHRNZW51SXRlbSBjaGVja1Nw
ZWxsaW5nKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0NoZWNrU3BlbGxpbmcsIAorICAg
ICAgICBjb250ZXh0TWVudUl0ZW1UYWdDaGVja1NwZWxsaW5nKCkpOworICAgIENvbnRleHRNZW51
SXRlbSBjaGVja0FzWW91VHlwZShDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1U
YWdDaGVja1NwZWxsaW5nV2hpbGVUeXBpbmcsIAorICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdD
aGVja1NwZWxsaW5nV2hpbGVUeXBpbmcoKSk7CisKKyAgICBhcHBlbmRJdGVtKHNob3dTcGVsbGlu
Z1BhbmVsLCAmc3BlbGxpbmdNZW51KTsKKyAgICBhcHBlbmRJdGVtKGNoZWNrU3BlbGxpbmcsICZz
cGVsbGluZ01lbnUpOworICAgIGFwcGVuZEl0ZW0oY2hlY2tBc1lvdVR5cGUsICZzcGVsbGluZ01l
bnUpOworCisgICAgc3BlbGxpbmdNZW51SXRlbS5zZXRTdWJNZW51KCZzcGVsbGluZ01lbnUpOwor
fQorCisjZW5kaWYKKworI2lmIFBMQVRGT1JNKE1BQykKKwordm9pZCBDb250ZXh0TWVudUNvbnRy
b2xsZXI6OmNyZWF0ZUFuZEFwcGVuZFNwZWVjaFN1Yk1lbnUoQ29udGV4dE1lbnVJdGVtJiBzcGVl
Y2hNZW51SXRlbSkKK3sKKyAgICBDb250ZXh0TWVudSBzcGVlY2hNZW51OworCisgICAgQ29udGV4
dE1lbnVJdGVtIHN0YXJ0KEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1N0YXJ0U3BlYWtp
bmcsIGNvbnRleHRNZW51SXRlbVRhZ1N0YXJ0U3BlYWtpbmcoKSk7CisgICAgQ29udGV4dE1lbnVJ
dGVtIHN0b3AoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU3RvcFNwZWFraW5nLCBjb250
ZXh0TWVudUl0ZW1UYWdTdG9wU3BlYWtpbmcoKSk7CisKKyAgICBhcHBlbmRJdGVtKHN0YXJ0LCAm
c3BlZWNoTWVudSk7CisgICAgYXBwZW5kSXRlbShzdG9wLCAmc3BlZWNoTWVudSk7CisKKyAgICBz
cGVlY2hNZW51SXRlbS5zZXRTdWJNZW51KCZzcGVlY2hNZW51KTsKK30KKworI2VuZGlmCisgCisj
aWYgIVBMQVRGT1JNKEdUSykKKwordm9pZCBDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNyZWF0ZUFu
ZEFwcGVuZFdyaXRpbmdEaXJlY3Rpb25TdWJNZW51KENvbnRleHRNZW51SXRlbSYgd3JpdGluZ0Rp
cmVjdGlvbk1lbnVJdGVtKQoreworICAgIENvbnRleHRNZW51IHdyaXRpbmdEaXJlY3Rpb25NZW51
OworCisgICAgQ29udGV4dE1lbnVJdGVtIGRlZmF1bHRJdGVtKEFjdGlvblR5cGUsIENvbnRleHRN
ZW51SXRlbVRhZ0RlZmF1bHREaXJlY3Rpb24sIAorICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdE
ZWZhdWx0RGlyZWN0aW9uKCkpOworICAgIENvbnRleHRNZW51SXRlbSBsdHIoQ2hlY2thYmxlQWN0
aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnTGVmdFRvUmlnaHQsIGNvbnRleHRNZW51SXRlbVRh
Z0xlZnRUb1JpZ2h0KCkpOworICAgIENvbnRleHRNZW51SXRlbSBydGwoQ2hlY2thYmxlQWN0aW9u
VHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnUmlnaHRUb0xlZnQsIGNvbnRleHRNZW51SXRlbVRhZ1Jp
Z2h0VG9MZWZ0KCkpOworCisgICAgYXBwZW5kSXRlbShkZWZhdWx0SXRlbSwgJndyaXRpbmdEaXJl
Y3Rpb25NZW51KTsKKyAgICBhcHBlbmRJdGVtKGx0ciwgJndyaXRpbmdEaXJlY3Rpb25NZW51KTsK
KyAgICBhcHBlbmRJdGVtKHJ0bCwgJndyaXRpbmdEaXJlY3Rpb25NZW51KTsKKworICAgIHdyaXRp
bmdEaXJlY3Rpb25NZW51SXRlbS5zZXRTdWJNZW51KCZ3cml0aW5nRGlyZWN0aW9uTWVudSk7Cit9
CisKK3ZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjpjcmVhdGVBbmRBcHBlbmRUZXh0RGlyZWN0
aW9uU3ViTWVudShDb250ZXh0TWVudUl0ZW0mIHRleHREaXJlY3Rpb25NZW51SXRlbSkKK3sKKyAg
ICBDb250ZXh0TWVudSB0ZXh0RGlyZWN0aW9uTWVudTsKKworICAgIENvbnRleHRNZW51SXRlbSBk
ZWZhdWx0SXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdUZXh0RGlyZWN0aW9uRGVm
YXVsdCwgY29udGV4dE1lbnVJdGVtVGFnRGVmYXVsdERpcmVjdGlvbigpKTsKKyAgICBDb250ZXh0
TWVudUl0ZW0gbHRyKENoZWNrYWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1RleHRE
aXJlY3Rpb25MZWZ0VG9SaWdodCwgY29udGV4dE1lbnVJdGVtVGFnTGVmdFRvUmlnaHQoKSk7Cisg
ICAgQ29udGV4dE1lbnVJdGVtIHJ0bChDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0
ZW1UYWdUZXh0RGlyZWN0aW9uUmlnaHRUb0xlZnQsIGNvbnRleHRNZW51SXRlbVRhZ1JpZ2h0VG9M
ZWZ0KCkpOworCisgICAgYXBwZW5kSXRlbShkZWZhdWx0SXRlbSwgJnRleHREaXJlY3Rpb25NZW51
KTsKKyAgICBhcHBlbmRJdGVtKGx0ciwgJnRleHREaXJlY3Rpb25NZW51KTsKKyAgICBhcHBlbmRJ
dGVtKHJ0bCwgJnRleHREaXJlY3Rpb25NZW51KTsKKworICAgIHRleHREaXJlY3Rpb25NZW51SXRl
bS5zZXRTdWJNZW51KCZ0ZXh0RGlyZWN0aW9uTWVudSk7Cit9CisKKyNlbmRpZgorCisjaWYgUExB
VEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJ
TERJTkdfT05fTEVPUEFSRCkKKwordm9pZCBDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNyZWF0ZUFu
ZEFwcGVuZFN1YnN0aXR1dGlvbnNTdWJNZW51KENvbnRleHRNZW51SXRlbSYgc3Vic3RpdHV0aW9u
c01lbnVJdGVtKQoreworICAgIENvbnRleHRNZW51IHN1YnN0aXR1dGlvbnNNZW51OworCisgICAg
Q29udGV4dE1lbnVJdGVtIHNob3dTdWJzdGl0dXRpb25zKEFjdGlvblR5cGUsIENvbnRleHRNZW51
SXRlbVRhZ1Nob3dTdWJzdGl0dXRpb25zLCBjb250ZXh0TWVudUl0ZW1UYWdTaG93U3Vic3RpdHV0
aW9ucyh0cnVlKSk7CisgICAgQ29udGV4dE1lbnVJdGVtIHNtYXJ0Q29weVBhc3RlKENoZWNrYWJs
ZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1NtYXJ0Q29weVBhc3RlLCBjb250ZXh0TWVu
dUl0ZW1UYWdTbWFydENvcHlQYXN0ZSgpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gc21hcnRRdW90
ZXMoQ2hlY2thYmxlQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU21hcnRRdW90ZXMsIGNv
bnRleHRNZW51SXRlbVRhZ1NtYXJ0UXVvdGVzKCkpOworICAgIENvbnRleHRNZW51SXRlbSBzbWFy
dERhc2hlcyhDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTbWFydERhc2hl
cywgY29udGV4dE1lbnVJdGVtVGFnU21hcnREYXNoZXMoKSk7CisgICAgQ29udGV4dE1lbnVJdGVt
IHNtYXJ0TGlua3MoQ2hlY2thYmxlQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU21hcnRM
aW5rcywgY29udGV4dE1lbnVJdGVtVGFnU21hcnRMaW5rcygpKTsKKyAgICBDb250ZXh0TWVudUl0
ZW0gdGV4dFJlcGxhY2VtZW50KENoZWNrYWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRh
Z1RleHRSZXBsYWNlbWVudCwgY29udGV4dE1lbnVJdGVtVGFnVGV4dFJlcGxhY2VtZW50KCkpOwor
CisgICAgYXBwZW5kSXRlbShzaG93U3Vic3RpdHV0aW9ucywgJnN1YnN0aXR1dGlvbnNNZW51KTsK
KyAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCksICZzdWJzdGl0dXRpb25zTWVudSk7Cisg
ICAgYXBwZW5kSXRlbShzbWFydENvcHlQYXN0ZSwgJnN1YnN0aXR1dGlvbnNNZW51KTsKKyAgICBh
cHBlbmRJdGVtKHNtYXJ0UXVvdGVzLCAmc3Vic3RpdHV0aW9uc01lbnUpOworICAgIGFwcGVuZEl0
ZW0oc21hcnREYXNoZXMsICZzdWJzdGl0dXRpb25zTWVudSk7CisgICAgYXBwZW5kSXRlbShzbWFy
dExpbmtzLCAmc3Vic3RpdHV0aW9uc01lbnUpOworICAgIGFwcGVuZEl0ZW0odGV4dFJlcGxhY2Vt
ZW50LCAmc3Vic3RpdHV0aW9uc01lbnUpOworCisgICAgc3Vic3RpdHV0aW9uc01lbnVJdGVtLnNl
dFN1Yk1lbnUoJnN1YnN0aXR1dGlvbnNNZW51KTsKK30KKwordm9pZCBDb250ZXh0TWVudUNvbnRy
b2xsZXI6OmNyZWF0ZUFuZEFwcGVuZFRyYW5zZm9ybWF0aW9uc1N1Yk1lbnUoQ29udGV4dE1lbnVJ
dGVtJiB0cmFuc2Zvcm1hdGlvbnNNZW51SXRlbSkKK3sKKyAgICBDb250ZXh0TWVudSB0cmFuc2Zv
cm1hdGlvbnNNZW51OworCisgICAgQ29udGV4dE1lbnVJdGVtIG1ha2VVcHBlckNhc2UoQWN0aW9u
VHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnTWFrZVVwcGVyQ2FzZSwgY29udGV4dE1lbnVJdGVtVGFn
TWFrZVVwcGVyQ2FzZSgpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gbWFrZUxvd2VyQ2FzZShBY3Rp
b25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdNYWtlTG93ZXJDYXNlLCBjb250ZXh0TWVudUl0ZW1U
YWdNYWtlTG93ZXJDYXNlKCkpOworICAgIENvbnRleHRNZW51SXRlbSBjYXBpdGFsaXplKEFjdGlv
blR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0NhcGl0YWxpemUsIGNvbnRleHRNZW51SXRlbVRhZ0Nh
cGl0YWxpemUoKSk7CisKKyAgICBhcHBlbmRJdGVtKG1ha2VVcHBlckNhc2UsICZ0cmFuc2Zvcm1h
dGlvbnNNZW51KTsKKyAgICBhcHBlbmRJdGVtKG1ha2VMb3dlckNhc2UsICZ0cmFuc2Zvcm1hdGlv
bnNNZW51KTsKKyAgICBhcHBlbmRJdGVtKGNhcGl0YWxpemUsICZ0cmFuc2Zvcm1hdGlvbnNNZW51
KTsKKworICAgIHRyYW5zZm9ybWF0aW9uc01lbnVJdGVtLnNldFN1Yk1lbnUoJnRyYW5zZm9ybWF0
aW9uc01lbnUpOworfQorCisjZW5kaWYKKworc3RhdGljIGJvb2wgc2VsZWN0aW9uQ29udGFpbnNQ
b3NzaWJsZVdvcmQoRnJhbWUqIGZyYW1lKQoreworICAgIC8vIEN1cnJlbnQgYWxnb3JpdGhtOiBs
b29rIGZvciBhIGNoYXJhY3RlciB0aGF0J3Mgbm90IGp1c3QgYSBzZXBhcmF0b3IuCisgICAgZm9y
IChUZXh0SXRlcmF0b3IgaXQoZnJhbWUtPnNlbGVjdGlvbigpLT50b05vcm1hbGl6ZWRSYW5nZSgp
LmdldCgpKTsgIWl0LmF0RW5kKCk7IGl0LmFkdmFuY2UoKSkgeworICAgICAgICBpbnQgbGVuZ3Ro
ID0gaXQubGVuZ3RoKCk7CisgICAgICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0gaXQuY2hh
cmFjdGVycygpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQorICAg
ICAgICAgICAgaWYgKCEoY2F0ZWdvcnkoY2hhcmFjdGVyc1tpXSkgJiAoU2VwYXJhdG9yX1NwYWNl
IHwgU2VwYXJhdG9yX0xpbmUgfCBTZXBhcmF0b3JfUGFyYWdyYXBoKSkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBDb250
ZXh0TWVudUNvbnRyb2xsZXI6OnBvcHVsYXRlKCkKK3sKKyAgICBDb250ZXh0TWVudUl0ZW0gT3Bl
bkxpbmtJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ09wZW5MaW5rLCBjb250ZXh0
TWVudUl0ZW1UYWdPcGVuTGluaygpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gT3BlbkxpbmtJbk5l
d1dpbmRvd0l0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnT3BlbkxpbmtJbk5ld1dp
bmRvdywgCisgICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ09wZW5MaW5rSW5OZXdXaW5kb3coKSk7
CisgICAgQ29udGV4dE1lbnVJdGVtIERvd25sb2FkRmlsZUl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4
dE1lbnVJdGVtVGFnRG93bmxvYWRMaW5rVG9EaXNrLCAKKyAgICAgICAgY29udGV4dE1lbnVJdGVt
VGFnRG93bmxvYWRMaW5rVG9EaXNrKCkpOworICAgIENvbnRleHRNZW51SXRlbSBDb3B5TGlua0l0
ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnQ29weUxpbmtUb0NsaXBib2FyZCwgCisg
ICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ0NvcHlMaW5rVG9DbGlwYm9hcmQoKSk7CisgICAgQ29u
dGV4dE1lbnVJdGVtIE9wZW5JbWFnZUluTmV3V2luZG93SXRlbShBY3Rpb25UeXBlLCBDb250ZXh0
TWVudUl0ZW1UYWdPcGVuSW1hZ2VJbk5ld1dpbmRvdywgCisgICAgICAgIGNvbnRleHRNZW51SXRl
bVRhZ09wZW5JbWFnZUluTmV3V2luZG93KCkpOworICAgIENvbnRleHRNZW51SXRlbSBEb3dubG9h
ZEltYWdlSXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdEb3dubG9hZEltYWdlVG9E
aXNrLCAKKyAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnRG93bmxvYWRJbWFnZVRvRGlzaygpKTsK
KyAgICBDb250ZXh0TWVudUl0ZW0gQ29weUltYWdlSXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVu
dUl0ZW1UYWdDb3B5SW1hZ2VUb0NsaXBib2FyZCwgCisgICAgICAgIGNvbnRleHRNZW51SXRlbVRh
Z0NvcHlJbWFnZVRvQ2xpcGJvYXJkKCkpOworICAgIENvbnRleHRNZW51SXRlbSBPcGVuTWVkaWFJ
bk5ld1dpbmRvd0l0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnT3Blbk1lZGlhSW5O
ZXdXaW5kb3csIFN0cmluZygpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gQ29weU1lZGlhTGlua0l0
ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnQ29weU1lZGlhTGlua1RvQ2xpcGJvYXJk
LCAKKyAgICAgICAgU3RyaW5nKCkpOworICAgIENvbnRleHRNZW51SXRlbSBNZWRpYVBsYXlQYXVz
ZShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdNZWRpYVBsYXlQYXVzZSwgCisgICAgICAg
IGNvbnRleHRNZW51SXRlbVRhZ01lZGlhUGxheSgpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gTWVk
aWFNdXRlKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ01lZGlhTXV0ZSwgCisgICAgICAg
IGNvbnRleHRNZW51SXRlbVRhZ01lZGlhTXV0ZSgpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gVG9n
Z2xlTWVkaWFDb250cm9scyhDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdU
b2dnbGVNZWRpYUNvbnRyb2xzLCAKKyAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnVG9nZ2xlTWVk
aWFDb250cm9scygpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gVG9nZ2xlTWVkaWFMb29wKENoZWNr
YWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1RvZ2dsZU1lZGlhTG9vcCwgCisgICAg
ICAgIGNvbnRleHRNZW51SXRlbVRhZ1RvZ2dsZU1lZGlhTG9vcCgpKTsKKyAgICBDb250ZXh0TWVu
dUl0ZW0gRW50ZXJWaWRlb0Z1bGxzY3JlZW4oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFn
RW50ZXJWaWRlb0Z1bGxzY3JlZW4sIAorICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdFbnRlclZp
ZGVvRnVsbHNjcmVlbigpKTsKKyNpZiBQTEFURk9STShNQUMpCisgICAgQ29udGV4dE1lbnVJdGVt
IFNlYXJjaFNwb3RsaWdodEl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU2VhcmNo
SW5TcG90bGlnaHQsIAorICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdTZWFyY2hJblNwb3RsaWdo
dCgpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gTG9va0luRGljdGlvbmFyeUl0ZW0oQWN0aW9uVHlw
ZSwgQ29udGV4dE1lbnVJdGVtVGFnTG9va1VwSW5EaWN0aW9uYXJ5LCAKKyAgICAgICAgY29udGV4
dE1lbnVJdGVtVGFnTG9va1VwSW5EaWN0aW9uYXJ5KCkpOworI2VuZGlmCisjaWYgIVBMQVRGT1JN
KEdUSykKKyAgICBDb250ZXh0TWVudUl0ZW0gU2VhcmNoV2ViSXRlbShBY3Rpb25UeXBlLCBDb250
ZXh0TWVudUl0ZW1UYWdTZWFyY2hXZWIsIGNvbnRleHRNZW51SXRlbVRhZ1NlYXJjaFdlYigpKTsK
KyNlbmRpZgorICAgIENvbnRleHRNZW51SXRlbSBDb3B5SXRlbShBY3Rpb25UeXBlLCBDb250ZXh0
TWVudUl0ZW1UYWdDb3B5LCBjb250ZXh0TWVudUl0ZW1UYWdDb3B5KCkpOworICAgIENvbnRleHRN
ZW51SXRlbSBCYWNrSXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdHb0JhY2ssIGNv
bnRleHRNZW51SXRlbVRhZ0dvQmFjaygpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gRm9yd2FyZEl0
ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnR29Gb3J3YXJkLCAgY29udGV4dE1lbnVJ
dGVtVGFnR29Gb3J3YXJkKCkpOworICAgIENvbnRleHRNZW51SXRlbSBTdG9wSXRlbShBY3Rpb25U
eXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTdG9wLCBjb250ZXh0TWVudUl0ZW1UYWdTdG9wKCkpOwor
ICAgIENvbnRleHRNZW51SXRlbSBSZWxvYWRJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRl
bVRhZ1JlbG9hZCwgY29udGV4dE1lbnVJdGVtVGFnUmVsb2FkKCkpOworICAgIENvbnRleHRNZW51
SXRlbSBPcGVuRnJhbWVJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ09wZW5GcmFt
ZUluTmV3V2luZG93LCAKKyAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnT3BlbkZyYW1lSW5OZXdX
aW5kb3coKSk7CisgICAgQ29udGV4dE1lbnVJdGVtIE5vR3Vlc3Nlc0l0ZW0oQWN0aW9uVHlwZSwg
Q29udGV4dE1lbnVJdGVtVGFnTm9HdWVzc2VzRm91bmQsIAorICAgICAgICBjb250ZXh0TWVudUl0
ZW1UYWdOb0d1ZXNzZXNGb3VuZCgpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gSWdub3JlU3BlbGxp
bmdJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0lnbm9yZVNwZWxsaW5nLCAKKyAg
ICAgICAgY29udGV4dE1lbnVJdGVtVGFnSWdub3JlU3BlbGxpbmcoKSk7CisgICAgQ29udGV4dE1l
bnVJdGVtIExlYXJuU3BlbGxpbmdJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0xl
YXJuU3BlbGxpbmcsIAorICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdMZWFyblNwZWxsaW5nKCkp
OworICAgIENvbnRleHRNZW51SXRlbSBJZ25vcmVHcmFtbWFySXRlbShBY3Rpb25UeXBlLCBDb250
ZXh0TWVudUl0ZW1UYWdJZ25vcmVHcmFtbWFyLCAKKyAgICAgICAgY29udGV4dE1lbnVJdGVtVGFn
SWdub3JlR3JhbW1hcigpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gQ3V0SXRlbShBY3Rpb25UeXBl
LCBDb250ZXh0TWVudUl0ZW1UYWdDdXQsIGNvbnRleHRNZW51SXRlbVRhZ0N1dCgpKTsKKyAgICBD
b250ZXh0TWVudUl0ZW0gUGFzdGVJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1Bh
c3RlLCBjb250ZXh0TWVudUl0ZW1UYWdQYXN0ZSgpKTsKKyNpZiBQTEFURk9STShHVEspCisgICAg
Q29udGV4dE1lbnVJdGVtIERlbGV0ZUl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFn
RGVsZXRlLCBjb250ZXh0TWVudUl0ZW1UYWdEZWxldGUoKSk7CisgICAgQ29udGV4dE1lbnVJdGVt
IFNlbGVjdEFsbEl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU2VsZWN0QWxsLCBj
b250ZXh0TWVudUl0ZW1UYWdTZWxlY3RBbGwoKSk7CisjZW5kaWYKKworICAgIE5vZGUqIG5vZGUg
PSBtX2hpdFRlc3RSZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCk7CisgICAgaWYgKCFub2RlKQor
ICAgICAgICByZXR1cm47CisjaWYgUExBVEZPUk0oR1RLKQorICAgIGlmICghbV9oaXRUZXN0UmVz
dWx0LmlzQ29udGVudEVkaXRhYmxlKCkgJiYgKG5vZGUtPmlzRWxlbWVudE5vZGUoKSAmJiBzdGF0
aWNfY2FzdDxFbGVtZW50Kj4obm9kZSktPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpKQorICAgICAg
ICByZXR1cm47CisjZW5kaWYKKyAgICBGcmFtZSogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLT5m
cmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9o
aXRUZXN0UmVzdWx0LmlzQ29udGVudEVkaXRhYmxlKCkpIHsKKyAgICAgICAgRnJhbWVMb2FkZXIq
IGxvYWRlciA9IGZyYW1lLT5sb2FkZXIoKTsKKyAgICAgICAgS1VSTCBsaW5rVVJMID0gbV9oaXRU
ZXN0UmVzdWx0LmFic29sdXRlTGlua1VSTCgpOworICAgICAgICBpZiAoIWxpbmtVUkwuaXNFbXB0
eSgpKSB7CisgICAgICAgICAgICBpZiAobG9hZGVyLT5jYW5IYW5kbGVSZXF1ZXN0KFJlc291cmNl
UmVxdWVzdChsaW5rVVJMKSkpIHsKKyAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKE9wZW5MaW5r
SXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAgICAgICAgICAgYXBwZW5kSXRlbShP
cGVuTGlua0luTmV3V2luZG93SXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAgICAg
ICAgICAgYXBwZW5kSXRlbShEb3dubG9hZEZpbGVJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFwcGVuZEl0ZW0oQ29weUxpbmtJdGVtLCBtX2Nv
bnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIEtVUkwgaW1hZ2VVUkwgPSBt
X2hpdFRlc3RSZXN1bHQuYWJzb2x1dGVJbWFnZVVSTCgpOworICAgICAgICBpZiAoIWltYWdlVVJM
LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgaWYgKCFsaW5rVVJMLmlzRW1wdHkoKSkKKyAgICAg
ICAgICAgICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCksIG1fY29udGV4dE1lbnUuZ2V0
KCkpOworCisgICAgICAgICAgICBhcHBlbmRJdGVtKE9wZW5JbWFnZUluTmV3V2luZG93SXRlbSwg
bV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAgICAgICBhcHBlbmRJdGVtKERvd25sb2FkSW1h
Z2VJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgICAgIGlmIChpbWFnZVVSTC5p
c0xvY2FsRmlsZSgpIHx8IG1faGl0VGVzdFJlc3VsdC5pbWFnZSgpKQorICAgICAgICAgICAgICAg
IGFwcGVuZEl0ZW0oQ29weUltYWdlSXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAg
IH0KKworICAgICAgICBLVVJMIG1lZGlhVVJMID0gbV9oaXRUZXN0UmVzdWx0LmFic29sdXRlTWVk
aWFVUkwoKTsKKyAgICAgICAgaWYgKCFtZWRpYVVSTC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAg
IGlmICghbGlua1VSTC5pc0VtcHR5KCkgfHwgIWltYWdlVVJMLmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCksIG1fY29udGV4dE1lbnUuZ2V0KCkp
OworCisgICAgICAgICAgICBhcHBlbmRJdGVtKE1lZGlhUGxheVBhdXNlLCBtX2NvbnRleHRNZW51
LmdldCgpKTsKKyAgICAgICAgICAgIGFwcGVuZEl0ZW0oTWVkaWFNdXRlLCBtX2NvbnRleHRNZW51
LmdldCgpKTsKKyAgICAgICAgICAgIGFwcGVuZEl0ZW0oVG9nZ2xlTWVkaWFDb250cm9scywgbV9j
b250ZXh0TWVudS5nZXQoKSk7CisgICAgICAgICAgICBhcHBlbmRJdGVtKFRvZ2dsZU1lZGlhTG9v
cCwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAgICAgICBhcHBlbmRJdGVtKEVudGVyVmlk
ZW9GdWxsc2NyZWVuLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKworICAgICAgICAgICAgYXBwZW5k
SXRlbSgqc2VwYXJhdG9ySXRlbSgpLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgICAg
IGFwcGVuZEl0ZW0oQ29weU1lZGlhTGlua0l0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOworICAg
ICAgICAgICAgYXBwZW5kSXRlbShPcGVuTWVkaWFJbk5ld1dpbmRvd0l0ZW0sIG1fY29udGV4dE1l
bnUuZ2V0KCkpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGltYWdlVVJMLmlzRW1wdHkoKSAm
JiBsaW5rVVJMLmlzRW1wdHkoKSAmJiBtZWRpYVVSTC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAg
IGlmIChtX2hpdFRlc3RSZXN1bHQuaXNTZWxlY3RlZCgpKSB7CisgICAgICAgICAgICAgICAgaWYg
KHNlbGVjdGlvbkNvbnRhaW5zUG9zc2libGVXb3JkKGZyYW1lKSkgeworI2lmIFBMQVRGT1JNKE1B
QykKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kSXRlbShTZWFyY2hTcG90bGlnaHRJdGVtLCBt
X2NvbnRleHRNZW51LmdldCgpKTsKKyNlbmRpZgorI2lmICFQTEFURk9STShHVEspCisgICAgICAg
ICAgICAgICAgICAgIGFwcGVuZEl0ZW0oU2VhcmNoV2ViSXRlbSwgbV9jb250ZXh0TWVudS5nZXQo
KSk7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSwgbV9j
b250ZXh0TWVudS5nZXQoKSk7CisjZW5kaWYKKyNpZiBQTEFURk9STShNQUMpCisgICAgICAgICAg
ICAgICAgICAgIGFwcGVuZEl0ZW0oTG9va0luRGljdGlvbmFyeUl0ZW0sIG1fY29udGV4dE1lbnUu
Z2V0KCkpOworICAgICAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCks
IG1fY29udGV4dE1lbnUuZ2V0KCkpOworI2VuZGlmCisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGFwcGVuZEl0ZW0oQ29weUl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOworI2lm
IFBMQVRGT1JNKE1BQykKKyAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVt
KCksIG1fY29udGV4dE1lbnUuZ2V0KCkpOworICAgICAgICAgICAgICAgIENvbnRleHRNZW51SXRl
bSBTcGVlY2hNZW51SXRlbShTdWJtZW51VHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU3BlZWNoTWVu
dSwgY29udGV4dE1lbnVJdGVtVGFnU3BlZWNoTWVudSgpKTsKKyAgICAgICAgICAgICAgICBjcmVh
dGVBbmRBcHBlbmRTcGVlY2hTdWJNZW51KFNwZWVjaE1lbnVJdGVtKTsKKyAgICAgICAgICAgICAg
ICBhcHBlbmRJdGVtKFNwZWVjaE1lbnVJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyNlbmRp
ZiAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIH0gZWxzZSB7CisjaWYgRU5BQkxFKElOU1BF
Q1RPUikKKyAgICAgICAgICAgICAgICBpZiAoIShmcmFtZS0+cGFnZSgpICYmIGZyYW1lLT5wYWdl
KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+aGFzSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQoKSkp
IHsKKyNlbmRpZgorICAgICAgICAgICAgICAgIGlmIChmcmFtZS0+cGFnZSgpICYmIGZyYW1lLT5w
YWdlKCktPmJhY2tGb3J3YXJkKCktPmNhbkdvQmFja09yRm9yd2FyZCgtMSkpCisgICAgICAgICAg
ICAgICAgICAgIGFwcGVuZEl0ZW0oQmFja0l0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOworCisg
ICAgICAgICAgICAgICAgaWYgKGZyYW1lLT5wYWdlKCkgJiYgZnJhbWUtPnBhZ2UoKS0+YmFja0Zv
cndhcmQoKS0+Y2FuR29CYWNrT3JGb3J3YXJkKDEpKQorICAgICAgICAgICAgICAgICAgICBhcHBl
bmRJdGVtKEZvcndhcmRJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKworICAgICAgICAgICAg
ICAgIC8vIHVzZSBpc0xvYWRpbmdJbkFQSVNlbnNlIHJhdGhlciB0aGFuIGlzTG9hZGluZyBiZWNh
dXNlIFN0b3AvUmVsb2FkIGFyZQorICAgICAgICAgICAgICAgIC8vIGludGVuZGVkIHRvIG1hdGNo
IFdlYktpdCdzIEFQSSwgbm90IFdlYkNvcmUncyBpbnRlcm5hbCBub3Rpb24gb2YgbG9hZGluZyBz
dGF0dXMKKyAgICAgICAgICAgICAgICBpZiAobG9hZGVyLT5kb2N1bWVudExvYWRlcigpLT5pc0xv
YWRpbmdJbkFQSVNlbnNlKCkpCisgICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oU3RvcEl0
ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgYXBwZW5kSXRlbShSZWxvYWRJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsK
KyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorICAgICAgICAgICAgICAgIH0KKyNlbmRpZgorCisgICAg
ICAgICAgICAgICAgaWYgKGZyYW1lLT5wYWdlKCkgJiYgZnJhbWUgIT0gZnJhbWUtPnBhZ2UoKS0+
bWFpbkZyYW1lKCkpCisgICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oT3BlbkZyYW1lSXRl
bSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
IGVsc2UgeyAvLyBNYWtlIGFuIGVkaXRpbmcgY29udGV4dCBtZW51CisgICAgICAgIFNlbGVjdGlv
bkNvbnRyb2xsZXIqIHNlbGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKTsKKyAgICAgICAgYm9v
bCBpblBhc3N3b3JkRmllbGQgPSBzZWxlY3Rpb24tPmlzSW5QYXNzd29yZEZpZWxkKCk7CisgICAg
ICAgIGJvb2wgc3BlbGxDaGVja2luZ0VuYWJsZWQgPSBmcmFtZS0+ZWRpdG9yKCktPmlzU3BlbGxD
aGVja2luZ0VuYWJsZWRGb3Iobm9kZSk7CisgICAgICAgIAorICAgICAgICBpZiAoIWluUGFzc3dv
cmRGaWVsZCAmJiBzcGVsbENoZWNraW5nRW5hYmxlZCkgeworICAgICAgICAgICAgLy8gQ29uc2lk
ZXIgYWRkaW5nIHNwZWxsaW5nLXJlbGF0ZWQgb3IgZ3JhbW1hci1yZWxhdGVkIGNvbnRleHQgbWVu
dSBpdGVtcyAobmV2ZXIgYm90aCwgc2luY2UgYSBzaW5nbGUgc2VsZWN0ZWQgcmFuZ2UKKyAgICAg
ICAgICAgIC8vIGlzIG5ldmVyIGNvbnNpZGVyZWQgYSBtaXNzcGVsbGluZyBhbmQgYmFkIGdyYW1t
YXIgYXQgdGhlIHNhbWUgdGltZSkKKyAgICAgICAgICAgIGJvb2wgbWlzc3BlbGxpbmc7CisgICAg
ICAgICAgICBib29sIGJhZEdyYW1tYXI7CisgICAgICAgICAgICBWZWN0b3I8U3RyaW5nPiBndWVz
c2VzID0gZnJhbWUtPmVkaXRvcigpLT5ndWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNh
bFNlbGVjdGlvbihtaXNzcGVsbGluZywgYmFkR3JhbW1hcik7CisgICAgICAgICAgICBpZiAobWlz
c3BlbGxpbmcgfHwgYmFkR3JhbW1hcikgeworICAgICAgICAgICAgICAgIHNpemVfdCBzaXplID0g
Z3Vlc3Nlcy5zaXplKCk7CisgICAgICAgICAgICAgICAgaWYgKHNpemUgPT0gMCkgeworICAgICAg
ICAgICAgICAgICAgICAvLyBJZiB0aGVyZSdzIGJhZCBncmFtbWFyIGJ1dCBubyBzdWdnZXN0aW9u
cyAoZS5nLiwgcmVwZWF0ZWQgd29yZCksIGp1c3QgbGVhdmUgb2ZmIHRoZSBzdWdnZXN0aW9ucwor
ICAgICAgICAgICAgICAgICAgICAvLyBsaXN0IGFuZCB0cmFpbGluZyBzZXBhcmF0b3IgcmF0aGVy
IHRoYW4gYWRkaW5nIGEgIk5vIEd1ZXNzZXMgRm91bmQiIGl0ZW0gKG1hdGNoZXMgQXBwS2l0KQor
ICAgICAgICAgICAgICAgICAgICBpZiAobWlzc3BlbGxpbmcpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGFwcGVuZEl0ZW0oTm9HdWVzc2VzSXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCksIG1fY29u
dGV4dE1lbnUuZ2V0KCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNp
emU7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nICZndWVzcyA9
IGd1ZXNzZXNbaV07CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWd1ZXNzLmlzRW1wdHko
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRleHRNZW51SXRlbSBpdGVtKEFj
dGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1NwZWxsaW5nR3Vlc3MsIGd1ZXNzKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKGl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0
KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSwgbV9jb250ZXh0
TWVudS5nZXQoKSk7ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKG1pc3NwZWxsaW5nKSB7CisgICAgICAg
ICAgICAgICAgICAgIGFwcGVuZEl0ZW0oSWdub3JlU3BlbGxpbmdJdGVtLCBtX2NvbnRleHRNZW51
LmdldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kSXRlbShMZWFyblNwZWxsaW5nSXRl
bSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICAgICAgICAgIGFwcGVuZEl0ZW0oSWdub3JlR3JhbW1hckl0ZW0sIG1fY29udGV4dE1lbnUu
Z2V0KCkpOworICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSwgbV9j
b250ZXh0TWVudS5nZXQoKSk7CisjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElO
R19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHN0cmluZyB3YXMgYXV0b2NvcnJl
Y3RlZCwgZ2VuZXJhdGUgYSBjb250ZXh0dWFsIG1lbnUgaXRlbSBhbGxvd2luZyBpdCB0byBiZSBj
aGFuZ2VkIGJhY2suCisgICAgICAgICAgICAgICAgU3RyaW5nIHJlcGxhY2VkU3RyaW5nID0gbV9o
aXRUZXN0UmVzdWx0LnJlcGxhY2VkU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgaWYgKCFyZXBs
YWNlZFN0cmluZy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgQ29udGV4dE1lbnVJ
dGVtIGl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnQ2hhbmdlQmFjaywgY29udGV4
dE1lbnVJdGVtVGFnQ2hhbmdlQmFjayhyZXBsYWNlZFN0cmluZykpOworICAgICAgICAgICAgICAg
ICAgICBhcHBlbmRJdGVtKGl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOworICAgICAgICAgICAg
ICAgICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCksIG1fY29udGV4dE1lbnUuZ2V0KCkp
OworICAgICAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgRnJhbWVMb2FkZXIqIGxvYWRlciA9IGZyYW1lLT5sb2FkZXIoKTsKKyAgICAgICAg
S1VSTCBsaW5rVVJMID0gbV9oaXRUZXN0UmVzdWx0LmFic29sdXRlTGlua1VSTCgpOworICAgICAg
ICBpZiAoIWxpbmtVUkwuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBpZiAobG9hZGVyLT5jYW5I
YW5kbGVSZXF1ZXN0KFJlc291cmNlUmVxdWVzdChsaW5rVVJMKSkpIHsKKyAgICAgICAgICAgICAg
ICBhcHBlbmRJdGVtKE9wZW5MaW5rSXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAg
ICAgICAgICAgYXBwZW5kSXRlbShPcGVuTGlua0luTmV3V2luZG93SXRlbSwgbV9jb250ZXh0TWVu
dS5nZXQoKSk7CisgICAgICAgICAgICAgICAgYXBwZW5kSXRlbShEb3dubG9hZEZpbGVJdGVtLCBt
X2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFwcGVuZEl0
ZW0oQ29weUxpbmtJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgICAgIGFwcGVu
ZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAgIH0K
KworICAgICAgICBpZiAobV9oaXRUZXN0UmVzdWx0LmlzU2VsZWN0ZWQoKSAmJiAhaW5QYXNzd29y
ZEZpZWxkICYmIHNlbGVjdGlvbkNvbnRhaW5zUG9zc2libGVXb3JkKGZyYW1lKSkgeworI2lmIFBM
QVRGT1JNKE1BQykKKyAgICAgICAgICAgIGFwcGVuZEl0ZW0oU2VhcmNoU3BvdGxpZ2h0SXRlbSwg
bV9jb250ZXh0TWVudS5nZXQoKSk7CisjZW5kaWYKKyNpZiAhUExBVEZPUk0oR1RLKQorICAgICAg
ICAgICAgYXBwZW5kSXRlbShTZWFyY2hXZWJJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAg
ICAgICAgICAgIGFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSwgbV9jb250ZXh0TWVudS5nZXQo
KSk7CisjZW5kaWYKKyAgICAgCisjaWYgUExBVEZPUk0oTUFDKQorICAgICAgICAgICAgYXBwZW5k
SXRlbShMb29rSW5EaWN0aW9uYXJ5SXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAg
ICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCksIG1fY29udGV4dE1lbnUuZ2V0KCkpOwor
I2VuZGlmCisgICAgICAgIH0KKworICAgICAgICBhcHBlbmRJdGVtKEN1dEl0ZW0sIG1fY29udGV4
dE1lbnUuZ2V0KCkpOworICAgICAgICBhcHBlbmRJdGVtKENvcHlJdGVtLCBtX2NvbnRleHRNZW51
LmdldCgpKTsKKyAgICAgICAgYXBwZW5kSXRlbShQYXN0ZUl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0
KCkpOworI2lmIFBMQVRGT1JNKEdUSykKKyAgICAgICAgYXBwZW5kSXRlbShEZWxldGVJdGVtLCBt
X2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgYXBwZW5kSXRlbSgqc2VwYXJhdG9ySXRlbSgp
LCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgYXBwZW5kSXRlbShTZWxlY3RBbGxJdGVt
LCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyNlbmRpZgorCisgICAgICAgIGlmICghaW5QYXNzd29y
ZEZpZWxkKSB7CisgICAgICAgICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCksIG1fY29u
dGV4dE1lbnUuZ2V0KCkpOworI2lmbmRlZiBCVUlMRElOR19PTl9USUdFUgorI2lmICFQTEFURk9S
TShHVEspCisgICAgICAgICAgICBDb250ZXh0TWVudUl0ZW0gU3BlbGxpbmdBbmRHcmFtbWFyTWVu
dUl0ZW0oU3VibWVudVR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1NwZWxsaW5nTWVudSwgCisgICAg
ICAgICAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnU3BlbGxpbmdNZW51KCkpOworICAgICAgICAg
ICAgY3JlYXRlQW5kQXBwZW5kU3BlbGxpbmdBbmRHcmFtbWFyU3ViTWVudShTcGVsbGluZ0FuZEdy
YW1tYXJNZW51SXRlbSk7CisgICAgICAgICAgICBhcHBlbmRJdGVtKFNwZWxsaW5nQW5kR3JhbW1h
ck1lbnVJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyNlbmRpZgorI2Vsc2UKKyAgICAgICAg
ICAgIENvbnRleHRNZW51SXRlbSBTcGVsbGluZ01lbnVJdGVtKFN1Ym1lbnVUeXBlLCBDb250ZXh0
TWVudUl0ZW1UYWdTcGVsbGluZ01lbnUsIAorICAgICAgICAgICAgICAgIGNvbnRleHRNZW51SXRl
bVRhZ1NwZWxsaW5nTWVudSgpKTsKKyAgICAgICAgICAgIGNyZWF0ZUFuZEFwcGVuZFNwZWxsaW5n
U3ViTWVudShTcGVsbGluZ01lbnVJdGVtKTsKKyAgICAgICAgICAgIGFwcGVuZEl0ZW0oU3BlbGxp
bmdNZW51SXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisjZW5kaWYKKyNpZiBQTEFURk9STShN
QUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19P
Tl9MRU9QQVJEKQorICAgICAgICAgICAgQ29udGV4dE1lbnVJdGVtIHN1YnN0aXR1dGlvbnNNZW51
SXRlbShTdWJtZW51VHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU3Vic3RpdHV0aW9uc01lbnUsIAor
ICAgICAgICAgICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ1N1YnN0aXR1dGlvbnNNZW51KCkpOwor
ICAgICAgICAgICAgY3JlYXRlQW5kQXBwZW5kU3Vic3RpdHV0aW9uc1N1Yk1lbnUoc3Vic3RpdHV0
aW9uc01lbnVJdGVtKTsKKyAgICAgICAgICAgIGFwcGVuZEl0ZW0oc3Vic3RpdHV0aW9uc01lbnVJ
dGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgICAgIENvbnRleHRNZW51SXRlbSB0
cmFuc2Zvcm1hdGlvbnNNZW51SXRlbShTdWJtZW51VHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnVHJh
bnNmb3JtYXRpb25zTWVudSwgCisgICAgICAgICAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnVHJh
bnNmb3JtYXRpb25zTWVudSgpKTsKKyAgICAgICAgICAgIGNyZWF0ZUFuZEFwcGVuZFRyYW5zZm9y
bWF0aW9uc1N1Yk1lbnUodHJhbnNmb3JtYXRpb25zTWVudUl0ZW0pOworICAgICAgICAgICAgYXBw
ZW5kSXRlbSh0cmFuc2Zvcm1hdGlvbnNNZW51SXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7Cisj
ZW5kaWYKKyNpZiBQTEFURk9STShHVEspCisgICAgICAgICAgICBib29sIHNob3VsZFNob3dGb250
TWVudSA9IGZyYW1lLT5lZGl0b3IoKS0+Y2FuRWRpdFJpY2hseSgpOworI2Vsc2UKKyAgICAgICAg
ICAgIGJvb2wgc2hvdWxkU2hvd0ZvbnRNZW51ID0gdHJ1ZTsKKyNlbmRpZgorICAgICAgICAgICAg
aWYgKHNob3VsZFNob3dGb250TWVudSkgeworICAgICAgICAgICAgICAgIENvbnRleHRNZW51SXRl
bSBGb250TWVudUl0ZW0oU3VibWVudVR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0ZvbnRNZW51LCAK
KyAgICAgICAgICAgICAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnRm9udE1lbnUoKSk7CisgICAg
ICAgICAgICAgICAgY3JlYXRlQW5kQXBwZW5kRm9udFN1Yk1lbnUoRm9udE1lbnVJdGVtKTsKKyAg
ICAgICAgICAgICAgICBhcHBlbmRJdGVtKEZvbnRNZW51SXRlbSwgbV9jb250ZXh0TWVudS5nZXQo
KSk7CisgICAgICAgICAgICB9CisjaWYgUExBVEZPUk0oTUFDKQorICAgICAgICAgICAgQ29udGV4
dE1lbnVJdGVtIFNwZWVjaE1lbnVJdGVtKFN1Ym1lbnVUeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdT
cGVlY2hNZW51LCBjb250ZXh0TWVudUl0ZW1UYWdTcGVlY2hNZW51KCkpOworICAgICAgICAgICAg
Y3JlYXRlQW5kQXBwZW5kU3BlZWNoU3ViTWVudShTcGVlY2hNZW51SXRlbSk7CisgICAgICAgICAg
ICBhcHBlbmRJdGVtKFNwZWVjaE1lbnVJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyNlbmRp
ZgorI2lmICFQTEFURk9STShHVEspCisgICAgICAgICAgICBDb250ZXh0TWVudUl0ZW0gV3JpdGlu
Z0RpcmVjdGlvbk1lbnVJdGVtKFN1Ym1lbnVUeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdXcml0aW5n
RGlyZWN0aW9uTWVudSwgCisgICAgICAgICAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnV3JpdGlu
Z0RpcmVjdGlvbk1lbnUoKSk7CisgICAgICAgICAgICBjcmVhdGVBbmRBcHBlbmRXcml0aW5nRGly
ZWN0aW9uU3ViTWVudShXcml0aW5nRGlyZWN0aW9uTWVudUl0ZW0pOworICAgICAgICAgICAgYXBw
ZW5kSXRlbShXcml0aW5nRGlyZWN0aW9uTWVudUl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOwor
ICAgICAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKFNldHRpbmdzKiBzZXR0aW5ncyA9IHBhZ2UtPnNldHRpbmdzKCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgYm9vbCBpbmNsdWRlVGV4dERpcmVjdGlvblN1Ym1lbnUgPSBzZXR0aW5n
cy0+dGV4dERpcmVjdGlvblN1Ym1lbnVJbmNsdXNpb25CZWhhdmlvcigpID09IFRleHREaXJlY3Rp
b25TdWJtZW51QWx3YXlzSW5jbHVkZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IChzZXR0
aW5ncy0+dGV4dERpcmVjdGlvblN1Ym1lbnVJbmNsdXNpb25CZWhhdmlvcigpID09IFRleHREaXJl
Y3Rpb25TdWJtZW51QXV0b21hdGljYWxseUluY2x1ZGVkICYmIGZyYW1lLT5lZGl0b3IoKS0+aGFz
QmlkaVNlbGVjdGlvbigpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGluY2x1ZGVUZXh0RGly
ZWN0aW9uU3VibWVudSkgeworICAgICAgICAgICAgICAgICAgICAgICAgQ29udGV4dE1lbnVJdGVt
IFRleHREaXJlY3Rpb25NZW51SXRlbShTdWJtZW51VHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnVGV4
dERpcmVjdGlvbk1lbnUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHRNZW51
SXRlbVRhZ1RleHREaXJlY3Rpb25NZW51KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgY3Jl
YXRlQW5kQXBwZW5kVGV4dERpcmVjdGlvblN1Yk1lbnUoVGV4dERpcmVjdGlvbk1lbnVJdGVtKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oVGV4dERpcmVjdGlvbk1lbnVJdGVt
LCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICB9CisgICAgfQorfQorCisj
aWYgRU5BQkxFKElOU1BFQ1RPUikKK3ZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjphZGRJbnNw
ZWN0RWxlbWVudEl0ZW0oKQoreworICAgIE5vZGUqIG5vZGUgPSBtX2hpdFRlc3RSZXN1bHQuaW5u
ZXJOb25TaGFyZWROb2RlKCk7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm47CisKKyAg
ICBGcmFtZSogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpOworICAgIGlmICghZnJh
bWUpCisgICAgICAgIHJldHVybjsKKworICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpOwor
ICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFwYWdlLT5pbnNwZWN0
b3JDb250cm9sbGVyKCkpCisgICAgICAgIHJldHVybjsKKworICAgIENvbnRleHRNZW51SXRlbSBJ
bnNwZWN0RWxlbWVudEl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnSW5zcGVjdEVs
ZW1lbnQsIGNvbnRleHRNZW51SXRlbVRhZ0luc3BlY3RFbGVtZW50KCkpOworICAgIGFwcGVuZEl0
ZW0oKnNlcGFyYXRvckl0ZW0oKSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgYXBwZW5kSXRl
bShJbnNwZWN0RWxlbWVudEl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOworfQorI2VuZGlmIC8v
IEVOQUJMRShJTlNQRUNUT1IpCisKK3ZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjpjaGVja09y
RW5hYmxlSWZOZWVkZWQoQ29udGV4dE1lbnVJdGVtJiBpdGVtKSBjb25zdAoreworICAgIGlmIChp
dGVtLnR5cGUoKSA9PSBTZXBhcmF0b3JUeXBlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
RnJhbWUqIGZyYW1lID0gbV9oaXRUZXN0UmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpLT5kb2N1
bWVudCgpLT5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAg
IC8vIEN1c3RvbSBpdGVtcyBhbHJlYWR5IGhhdmUgcHJvcGVyIGNoZWNrZWQgYW5kIGVuYWJsZWQg
dmFsdWVzLgorICAgIGlmIChDb250ZXh0TWVudUl0ZW1CYXNlQ3VzdG9tVGFnIDw9IGl0ZW0uYWN0
aW9uKCkgJiYgaXRlbS5hY3Rpb24oKSA8PSBDb250ZXh0TWVudUl0ZW1MYXN0Q3VzdG9tVGFnKQor
ICAgICAgICByZXR1cm47CisKKyAgICBib29sIHNob3VsZEVuYWJsZSA9IHRydWU7CisgICAgYm9v
bCBzaG91bGRDaGVjayA9IGZhbHNlOyAKKworICAgIHN3aXRjaCAoaXRlbS5hY3Rpb24oKSkgewor
ICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0NoZWNrU3BlbGxpbmc6CisgICAgICAgICAg
ICBzaG91bGRFbmFibGUgPSBmcmFtZS0+ZWRpdG9yKCktPmNhbkVkaXQoKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0RlZmF1bHREaXJlY3Rpb246
CisgICAgICAgICAgICBzaG91bGRDaGVjayA9IGZhbHNlOworICAgICAgICAgICAgc2hvdWxkRW5h
YmxlID0gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb250ZXh0TWVu
dUl0ZW1UYWdMZWZ0VG9SaWdodDoKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdSaWdo
dFRvTGVmdDogeworICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgICAgICAg
ICBSZWZQdHI8Q1NTU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+
Y3JlYXRlQ1NTU3R5bGVEZWNsYXJhdGlvbigpOworICAgICAgICAgICAgU3RyaW5nIGRpcmVjdGlv
biA9IGl0ZW0uYWN0aW9uKCkgPT0gQ29udGV4dE1lbnVJdGVtVGFnTGVmdFRvUmlnaHQgPyAibHRy
IiA6ICJydGwiOworICAgICAgICAgICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5RGly
ZWN0aW9uLCBkaXJlY3Rpb24sIGZhbHNlLCBlYyk7CisgICAgICAgICAgICBzaG91bGRDaGVjayA9
IGZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0aW9uSGFzU3R5bGUoc3R5bGUuZ2V0KCkpICE9IEZhbHNl
VHJpU3RhdGU7CisgICAgICAgICAgICBzaG91bGRFbmFibGUgPSB0cnVlOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdUZXh0RGly
ZWN0aW9uRGVmYXVsdDogeworICAgICAgICAgICAgRWRpdG9yOjpDb21tYW5kIGNvbW1hbmQgPSBm
cmFtZS0+ZWRpdG9yKCktPmNvbW1hbmQoIk1ha2VUZXh0V3JpdGluZ0RpcmVjdGlvbk5hdHVyYWwi
KTsKKyAgICAgICAgICAgIHNob3VsZENoZWNrID0gY29tbWFuZC5zdGF0ZSgpID09IFRydWVUcmlT
dGF0ZTsKKyAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGNvbW1hbmQuaXNFbmFibGVkKCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRl
bVRhZ1RleHREaXJlY3Rpb25MZWZ0VG9SaWdodDogeworICAgICAgICAgICAgRWRpdG9yOjpDb21t
YW5kIGNvbW1hbmQgPSBmcmFtZS0+ZWRpdG9yKCktPmNvbW1hbmQoIk1ha2VUZXh0V3JpdGluZ0Rp
cmVjdGlvbkxlZnRUb1JpZ2h0Iik7CisgICAgICAgICAgICBzaG91bGRDaGVjayA9IGNvbW1hbmQu
c3RhdGUoKSA9PSBUcnVlVHJpU3RhdGU7CisgICAgICAgICAgICBzaG91bGRFbmFibGUgPSBjb21t
YW5kLmlzRW5hYmxlZCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBDb250ZXh0TWVudUl0ZW1UYWdUZXh0RGlyZWN0aW9uUmlnaHRUb0xlZnQ6IHsKKyAgICAg
ICAgICAgIEVkaXRvcjo6Q29tbWFuZCBjb21tYW5kID0gZnJhbWUtPmVkaXRvcigpLT5jb21tYW5k
KCJNYWtlVGV4dFdyaXRpbmdEaXJlY3Rpb25SaWdodFRvTGVmdCIpOworICAgICAgICAgICAgc2hv
dWxkQ2hlY2sgPSBjb21tYW5kLnN0YXRlKCkgPT0gVHJ1ZVRyaVN0YXRlOworICAgICAgICAgICAg
c2hvdWxkRW5hYmxlID0gY29tbWFuZC5pc0VuYWJsZWQoKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQ29weToKKyAgICAgICAg
ICAgIHNob3VsZEVuYWJsZSA9IGZyYW1lLT5lZGl0b3IoKS0+Y2FuREhUTUxDb3B5KCkgfHwgZnJh
bWUtPmVkaXRvcigpLT5jYW5Db3B5KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBDb250ZXh0TWVudUl0ZW1UYWdDdXQ6CisgICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFt
ZS0+ZWRpdG9yKCktPmNhbkRIVE1MQ3V0KCkgfHwgZnJhbWUtPmVkaXRvcigpLT5jYW5DdXQoKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0lnbm9y
ZVNwZWxsaW5nOgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0xlYXJuU3BlbGxpbmc6
CisgICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+c2VsZWN0aW9uKCktPmlzUmFuZ2Uo
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1Bh
c3RlOgorICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gZnJhbWUtPmVkaXRvcigpLT5jYW5ESFRN
TFBhc3RlKCkgfHwgZnJhbWUtPmVkaXRvcigpLT5jYW5QYXN0ZSgpOworICAgICAgICAgICAgYnJl
YWs7CisjaWYgUExBVEZPUk0oR1RLKQorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0Rl
bGV0ZToKKyAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGZyYW1lLT5lZGl0b3IoKS0+Y2FuRGVs
ZXRlKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1U
YWdTZWxlY3RBbGw6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnSW5wdXRNZXRob2Rz
OgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1VuaWNvZGU6CisgICAgICAgICAgICBz
aG91bGRFbmFibGUgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICAgICAg
Y2FzZSBDb250ZXh0TWVudUl0ZW1UYWdVbmRlcmxpbmU6IHsKKyAgICAgICAgICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOworICAgICAgICAgICAgUmVmUHRyPENTU1N0eWxlRGVjbGFyYXRpb24+IHN0
eWxlID0gZnJhbWUtPmRvY3VtZW50KCktPmNyZWF0ZUNTU1N0eWxlRGVjbGFyYXRpb24oKTsKKyAg
ICAgICAgICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0
aW9uc0luRWZmZWN0LCAidW5kZXJsaW5lIiwgZmFsc2UsIGVjKTsKKyAgICAgICAgICAgIHNob3Vs
ZENoZWNrID0gZnJhbWUtPmVkaXRvcigpLT5zZWxlY3Rpb25IYXNTdHlsZShzdHlsZS5nZXQoKSkg
IT0gRmFsc2VUcmlTdGF0ZTsKKyAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGZyYW1lLT5lZGl0
b3IoKS0+Y2FuRWRpdFJpY2hseSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdMb29rVXBJbkRpY3Rpb25hcnk6CisgICAgICAg
ICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+c2VsZWN0aW9uKCktPmlzUmFuZ2UoKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0NoZWNrR3JhbW1h
cldpdGhTcGVsbGluZzoKKyNpZm5kZWYgQlVJTERJTkdfT05fVElHRVIKKyAgICAgICAgICAgIGlm
IChmcmFtZS0+ZWRpdG9yKCktPmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpKQorICAgICAgICAg
ICAgICAgIHNob3VsZENoZWNrID0gdHJ1ZTsKKyAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IHRy
dWU7CisjZW5kaWYKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbnRleHRNZW51
SXRlbVRhZ0l0YWxpYzogeworICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAg
ICAgICAgICBSZWZQdHI8Q1NTU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUgPSBmcmFtZS0+ZG9jdW1l
bnQoKS0+Y3JlYXRlQ1NTU3R5bGVEZWNsYXJhdGlvbigpOworICAgICAgICAgICAgc3R5bGUtPnNl
dFByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFN0eWxlLCAiaXRhbGljIiwgZmFsc2UsIGVjKTsKKyAg
ICAgICAgICAgIHNob3VsZENoZWNrID0gZnJhbWUtPmVkaXRvcigpLT5zZWxlY3Rpb25IYXNTdHls
ZShzdHlsZS5nZXQoKSkgIT0gRmFsc2VUcmlTdGF0ZTsKKyAgICAgICAgICAgIHNob3VsZEVuYWJs
ZSA9IGZyYW1lLT5lZGl0b3IoKS0+Y2FuRWRpdFJpY2hseSgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdCb2xkOiB7CisgICAg
ICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAgICAgIFJlZlB0cjxDU1NTdHls
ZURlY2xhcmF0aW9uPiBzdHlsZSA9IGZyYW1lLT5kb2N1bWVudCgpLT5jcmVhdGVDU1NTdHlsZURl
Y2xhcmF0aW9uKCk7CisgICAgICAgICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlG
b250V2VpZ2h0LCAiYm9sZCIsIGZhbHNlLCBlYyk7CisgICAgICAgICAgICBzaG91bGRDaGVjayA9
IGZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0aW9uSGFzU3R5bGUoc3R5bGUuZ2V0KCkpICE9IEZhbHNl
VHJpU3RhdGU7CisgICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+ZWRpdG9yKCktPmNh
bkVkaXRSaWNobHkoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNh
c2UgQ29udGV4dE1lbnVJdGVtVGFnT3V0bGluZToKKyAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9
IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVt
VGFnU2hvd1NwZWxsaW5nUGFuZWw6CisjaWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCisgICAgICAg
ICAgICBpZiAoZnJhbWUtPmVkaXRvcigpLT5zcGVsbGluZ1BhbmVsSXNTaG93aW5nKCkpCisgICAg
ICAgICAgICAgICAgaXRlbS5zZXRUaXRsZShjb250ZXh0TWVudUl0ZW1UYWdTaG93U3BlbGxpbmdQ
YW5lbChmYWxzZSkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGl0ZW0uc2V0
VGl0bGUoY29udGV4dE1lbnVJdGVtVGFnU2hvd1NwZWxsaW5nUGFuZWwodHJ1ZSkpOworI2VuZGlm
CisgICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+ZWRpdG9yKCktPmNhbkVkaXQoKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ05vR3Vl
c3Nlc0ZvdW5kOgorICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gZmFsc2U7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdDaGVja1NwZWxsaW5nV2hp
bGVUeXBpbmc6CisgICAgICAgICAgICBzaG91bGRDaGVjayA9IGZyYW1lLT5lZGl0b3IoKS0+aXND
b250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKTsKKyAgICAgICAgICAgIGJyZWFrOworI2lm
IFBMQVRGT1JNKE1BQykKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTdWJzdGl0dXRp
b25zTWVudToKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdUcmFuc2Zvcm1hdGlvbnNN
ZW51OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFn
U2hvd1N1YnN0aXR1dGlvbnM6CisjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFk
ZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpCisgICAgICAgICAgICBpZiAoZnJhbWUtPmVkaXRv
cigpLT5zdWJzdGl0dXRpb25zUGFuZWxJc1Nob3dpbmcoKSkKKyAgICAgICAgICAgICAgICBpdGVt
LnNldFRpdGxlKGNvbnRleHRNZW51SXRlbVRhZ1Nob3dTdWJzdGl0dXRpb25zKGZhbHNlKSk7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgaXRlbS5zZXRUaXRsZShjb250ZXh0TWVu
dUl0ZW1UYWdTaG93U3Vic3RpdHV0aW9ucyh0cnVlKSk7CisgICAgICAgICAgICBzaG91bGRFbmFi
bGUgPSBmcmFtZS0+ZWRpdG9yKCktPmNhbkVkaXQoKTsKKyNlbmRpZgorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnTWFrZVVwcGVyQ2FzZToKKyAgICAg
ICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdNYWtlTG93ZXJDYXNlOgorICAgICAgICBjYXNlIENv
bnRleHRNZW51SXRlbVRhZ0NhcGl0YWxpemU6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVt
VGFnQ2hhbmdlQmFjazoKKyAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGZyYW1lLT5lZGl0b3Io
KS0+Y2FuRWRpdCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29udGV4dE1l
bnVJdGVtVGFnQ29ycmVjdFNwZWxsaW5nQXV0b21hdGljYWxseToKKyNpZiAhZGVmaW5lZChCVUlM
RElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKKyAgICAgICAg
ICAgIHNob3VsZENoZWNrID0gZnJhbWUtPmVkaXRvcigpLT5pc0F1dG9tYXRpY1NwZWxsaW5nQ29y
cmVjdGlvbkVuYWJsZWQoKTsKKyNlbmRpZgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgQ29udGV4dE1lbnVJdGVtVGFnU21hcnRDb3B5UGFzdGU6CisjaWYgIWRlZmluZWQoQlVJTERJ
TkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpCisgICAgICAgICAg
ICBzaG91bGRDaGVjayA9IGZyYW1lLT5lZGl0b3IoKS0+c21hcnRJbnNlcnREZWxldGVFbmFibGVk
KCk7CisjZW5kaWYKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbnRleHRNZW51
SXRlbVRhZ1NtYXJ0UXVvdGVzOgorI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAh
ZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQorICAgICAgICAgICAgc2hvdWxkQ2hlY2sgPSBm
cmFtZS0+ZWRpdG9yKCktPmlzQXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb25FbmFibGVkKCk7Cisj
ZW5kaWYKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRh
Z1NtYXJ0RGFzaGVzOgorI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5l
ZChCVUlMRElOR19PTl9MRU9QQVJEKQorICAgICAgICAgICAgc2hvdWxkQ2hlY2sgPSBmcmFtZS0+
ZWRpdG9yKCktPmlzQXV0b21hdGljRGFzaFN1YnN0aXR1dGlvbkVuYWJsZWQoKTsKKyNlbmRpZgor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU21hcnRM
aW5rczoKKyNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJ
TkdfT05fTEVPUEFSRCkKKyAgICAgICAgICAgIHNob3VsZENoZWNrID0gZnJhbWUtPmVkaXRvcigp
LT5pc0F1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkKCk7CisjZW5kaWYKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1RleHRSZXBsYWNlbWVudDoK
KyNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05f
TEVPUEFSRCkKKyAgICAgICAgICAgIHNob3VsZENoZWNrID0gZnJhbWUtPmVkaXRvcigpLT5pc0F1
dG9tYXRpY1RleHRSZXBsYWNlbWVudEVuYWJsZWQoKTsKKyNlbmRpZgorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU3RvcFNwZWFraW5nOgorICAgICAg
ICAgICAgc2hvdWxkRW5hYmxlID0gY2xpZW50KCkgJiYgY2xpZW50KCktPmlzU3BlYWtpbmcoKTsK
KyAgICAgICAgICAgIGJyZWFrOworI2Vsc2UgLy8gUExBVEZPUk0oTUFDKSBlbmRzIGhlcmUKKyAg
ICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTdG9wU3BlYWtpbmc6CisgICAgICAgICAgICBi
cmVhazsKKyNlbmRpZgorI2lmIFBMQVRGT1JNKEdUSykKKyAgICAgICAgY2FzZSBDb250ZXh0TWVu
dUl0ZW1UYWdHb0JhY2s6CisgICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+cGFnZSgp
ICYmIGZyYW1lLT5wYWdlKCktPmJhY2tGb3J3YXJkKCktPmNhbkdvQmFja09yRm9yd2FyZCgtMSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdHb0Zv
cndhcmQ6CisgICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+cGFnZSgpICYmIGZyYW1l
LT5wYWdlKCktPmJhY2tGb3J3YXJkKCktPmNhbkdvQmFja09yRm9yd2FyZCgxKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1N0b3A6CisgICAgICAg
ICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPmlz
TG9hZGluZ0luQVBJU2Vuc2UoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENv
bnRleHRNZW51SXRlbVRhZ1JlbG9hZDoKKyAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9ICFmcmFt
ZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPmlzTG9hZGluZ0luQVBJU2Vuc2UoKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0ZvbnRNZW51
OgorICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gZnJhbWUtPmVkaXRvcigpLT5jYW5FZGl0Umlj
aGx5KCk7CisgICAgICAgICAgICBicmVhazsKKyNlbHNlCisgICAgICAgIGNhc2UgQ29udGV4dE1l
bnVJdGVtVGFnR29CYWNrOgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0dvRm9yd2Fy
ZDoKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTdG9wOgorICAgICAgICBjYXNlIENv
bnRleHRNZW51SXRlbVRhZ1JlbG9hZDoKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdG
b250TWVudToKKyNlbmRpZgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ05vQWN0aW9u
OgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5MaW5rSW5OZXdXaW5kb3c6Cisg
ICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnRG93bmxvYWRMaW5rVG9EaXNrOgorICAgICAg
ICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0NvcHlMaW5rVG9DbGlwYm9hcmQ6CisgICAgICAgIGNh
c2UgQ29udGV4dE1lbnVJdGVtVGFnT3BlbkltYWdlSW5OZXdXaW5kb3c6CisgICAgICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtVGFnRG93bmxvYWRJbWFnZVRvRGlzazoKKyAgICAgICAgY2FzZSBDb250
ZXh0TWVudUl0ZW1UYWdDb3B5SW1hZ2VUb0NsaXBib2FyZDoKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5NZWRpYUluTmV3V2luZG93OgorICAg
ICAgICAgICAgaWYgKG1faGl0VGVzdFJlc3VsdC5tZWRpYUlzVmlkZW8oKSkKKyAgICAgICAgICAg
ICAgICBpdGVtLnNldFRpdGxlKGNvbnRleHRNZW51SXRlbVRhZ09wZW5WaWRlb0luTmV3V2luZG93
KCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGl0ZW0uc2V0VGl0bGUoY29u
dGV4dE1lbnVJdGVtVGFnT3BlbkF1ZGlvSW5OZXdXaW5kb3coKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdDb3B5TWVkaWFMaW5rVG9DbGlwYm9h
cmQ6CisgICAgICAgICAgICBpZiAobV9oaXRUZXN0UmVzdWx0Lm1lZGlhSXNWaWRlbygpKQorICAg
ICAgICAgICAgICAgIGl0ZW0uc2V0VGl0bGUoY29udGV4dE1lbnVJdGVtVGFnQ29weVZpZGVvTGlu
a1RvQ2xpcGJvYXJkKCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGl0ZW0u
c2V0VGl0bGUoY29udGV4dE1lbnVJdGVtVGFnQ29weUF1ZGlvTGlua1RvQ2xpcGJvYXJkKCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnVG9nZ2xl
TWVkaWFDb250cm9sczoKKyAgICAgICAgICAgIHNob3VsZENoZWNrID0gbV9oaXRUZXN0UmVzdWx0
Lm1lZGlhQ29udHJvbHNFbmFibGVkKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBDb250ZXh0TWVudUl0ZW1UYWdUb2dnbGVNZWRpYUxvb3A6CisgICAgICAgICAgICBzaG91bGRD
aGVjayA9IG1faGl0VGVzdFJlc3VsdC5tZWRpYUxvb3BFbmFibGVkKCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdFbnRlclZpZGVvRnVsbHNjcmVl
bjoKKyAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IG1faGl0VGVzdFJlc3VsdC5tZWRpYVN1cHBv
cnRzRnVsbHNjcmVlbigpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29udGV4
dE1lbnVJdGVtVGFnT3BlbkZyYW1lSW5OZXdXaW5kb3c6CisgICAgICAgIGNhc2UgQ29udGV4dE1l
bnVJdGVtVGFnU3BlbGxpbmdHdWVzczoKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdP
dGhlcjoKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTZWFyY2hJblNwb3RsaWdodDoK
KyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTZWFyY2hXZWI6CisgICAgICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtVGFnT3BlbldpdGhEZWZhdWx0QXBwbGljYXRpb246CisgICAgICAgIGNh
c2UgQ29udGV4dE1lbnVJdGVtUERGQWN0dWFsU2l6ZToKKyAgICAgICAgY2FzZSBDb250ZXh0TWVu
dUl0ZW1QREZab29tSW46CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtUERGWm9vbU91dDoK
KyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1QREZBdXRvU2l6ZToKKyAgICAgICAgY2FzZSBD
b250ZXh0TWVudUl0ZW1QREZTaW5nbGVQYWdlOgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRl
bVBERkZhY2luZ1BhZ2VzOgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVBERkNvbnRpbnVv
dXM6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtUERGTmV4dFBhZ2U6CisgICAgICAgIGNh
c2UgQ29udGV4dE1lbnVJdGVtUERGUHJldmlvdXNQYWdlOgorICAgICAgICBjYXNlIENvbnRleHRN
ZW51SXRlbVRhZ09wZW5MaW5rOgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0lnbm9y
ZUdyYW1tYXI6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU3BlbGxpbmdNZW51Ogor
ICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1Nob3dGb250czoKKyAgICAgICAgY2FzZSBD
b250ZXh0TWVudUl0ZW1UYWdTdHlsZXM6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFn
U2hvd0NvbG9yczoKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTcGVlY2hNZW51Ogor
ICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1N0YXJ0U3BlYWtpbmc6CisgICAgICAgIGNh
c2UgQ29udGV4dE1lbnVJdGVtVGFnV3JpdGluZ0RpcmVjdGlvbk1lbnU6CisgICAgICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtVGFnVGV4dERpcmVjdGlvbk1lbnU6CisgICAgICAgIGNhc2UgQ29udGV4
dE1lbnVJdGVtVGFnUERGU2luZ2xlUGFnZVNjcm9sbGluZzoKKyAgICAgICAgY2FzZSBDb250ZXh0
TWVudUl0ZW1UYWdQREZGYWNpbmdQYWdlc1Njcm9sbGluZzoKKyNpZiBFTkFCTEUoSU5TUEVDVE9S
KQorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0luc3BlY3RFbGVtZW50OgorI2VuZGlm
CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtQmFzZUN1c3RvbVRhZzoKKyAgICAgICAgY2Fz
ZSBDb250ZXh0TWVudUl0ZW1DdXN0b21UYWdOb0FjdGlvbjoKKyAgICAgICAgY2FzZSBDb250ZXh0
TWVudUl0ZW1MYXN0Q3VzdG9tVGFnOgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbUJhc2VB
cHBsaWNhdGlvblRhZzoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbnRleHRN
ZW51SXRlbVRhZ01lZGlhUGxheVBhdXNlOgorICAgICAgICAgICAgaWYgKG1faGl0VGVzdFJlc3Vs
dC5tZWRpYVBsYXlpbmcoKSkKKyAgICAgICAgICAgICAgICBpdGVtLnNldFRpdGxlKGNvbnRleHRN
ZW51SXRlbVRhZ01lZGlhUGF1c2UoKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgaXRlbS5zZXRUaXRsZShjb250ZXh0TWVudUl0ZW1UYWdNZWRpYVBsYXkoKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdNZWRpYU11dGU6Cisg
ICAgICAgICAgICBzaG91bGRFbmFibGUgPSBtX2hpdFRlc3RSZXN1bHQubWVkaWFIYXNBdWRpbygp
OworICAgICAgICAgICAgc2hvdWxkQ2hlY2sgPSBzaG91bGRFbmFibGUgJiYgIG1faGl0VGVzdFJl
c3VsdC5tZWRpYU11dGVkKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpdGVt
LnNldENoZWNrZWQoc2hvdWxkQ2hlY2spOworICAgIGl0ZW0uc2V0RW5hYmxlZChzaG91bGRFbmFi
bGUpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoQ09O
VEVYVF9NRU5VUykKSW5kZXg6IFdlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmgJKHJldmlz
aW9uIDczNDY5KQorKysgV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIENvbnRleHRNZW51Q29udHJvbGxl
cl9oCiAjZGVmaW5lIENvbnRleHRNZW51Q29udHJvbGxlcl9oCiAKKyNpbmNsdWRlICJIaXRUZXN0
UmVzdWx0LmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL093
blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CkBAIC00NSw3ICs0Niw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgQ29udGV4dE1lbnVDb250cm9sbGVyKFBhZ2UqLCBD
b250ZXh0TWVudUNsaWVudCopOwogICAgICAgICB+Q29udGV4dE1lbnVDb250cm9sbGVyKCk7CiAK
LSAgICAgICAgQ29udGV4dE1lbnVDbGllbnQqIGNsaWVudCgpIHsgcmV0dXJuIG1fY2xpZW50OyB9
CisgICAgICAgIENvbnRleHRNZW51Q2xpZW50KiBjbGllbnQoKSBjb25zdCB7IHJldHVybiBtX2Ns
aWVudDsgfQogCiAgICAgICAgIENvbnRleHRNZW51KiBjb250ZXh0TWVudSgpIGNvbnN0IHsgcmV0
dXJuIG1fY29udGV4dE1lbnUuZ2V0KCk7IH0KICAgICAgICAgdm9pZCBjbGVhckNvbnRleHRNZW51
KCk7CkBAIC01MywxNiArNTQsMzUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lk
IGhhbmRsZUNvbnRleHRNZW51RXZlbnQoRXZlbnQqKTsKICAgICAgICAgdm9pZCBzaG93Q29udGV4
dE1lbnUoRXZlbnQqLCBQYXNzUmVmUHRyPENvbnRleHRNZW51UHJvdmlkZXI+KTsKIAorICAgICAg
ICB2b2lkIHBvcHVsYXRlKCk7CiAgICAgICAgIHZvaWQgY29udGV4dE1lbnVJdGVtU2VsZWN0ZWQo
Q29udGV4dE1lbnVJdGVtKik7CisgICAgICAgIHZvaWQgYWRkSW5zcGVjdEVsZW1lbnRJdGVtKCk7
CisKKyAgICAgICAgdm9pZCBjaGVja09yRW5hYmxlSWZOZWVkZWQoQ29udGV4dE1lbnVJdGVtJikg
Y29uc3Q7CisKKyAgICAgICAgdm9pZCBzZXRIaXRUZXN0UmVzdWx0KGNvbnN0IEhpdFRlc3RSZXN1
bHQmIHJlc3VsdCkgeyBtX2hpdFRlc3RSZXN1bHQgPSByZXN1bHQ7IH0KKyAgICAgICAgY29uc3Qg
SGl0VGVzdFJlc3VsdCYgaGl0VGVzdFJlc3VsdCgpIHsgcmV0dXJuIG1faGl0VGVzdFJlc3VsdDsg
fQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgQ29udGV4dE1lbnUqIGNyZWF0ZUNvbnRleHRNZW51
KEV2ZW50Kik7CisgICAgICAgIFBhc3NPd25QdHI8Q29udGV4dE1lbnU+IGNyZWF0ZUNvbnRleHRN
ZW51KEV2ZW50Kik7CiAgICAgICAgIHZvaWQgc2hvd0NvbnRleHRNZW51KEV2ZW50Kik7CisgICAg
ICAgIAorICAgICAgICB2b2lkIGFwcGVuZEl0ZW0oQ29udGV4dE1lbnVJdGVtJiwgQ29udGV4dE1l
bnUqIHBhcmVudE1lbnUpOworCisgICAgICAgIHZvaWQgY3JlYXRlQW5kQXBwZW5kRm9udFN1Yk1l
bnUoQ29udGV4dE1lbnVJdGVtJik7CisgICAgICAgIHZvaWQgY3JlYXRlQW5kQXBwZW5kU3BlbGxp
bmdBbmRHcmFtbWFyU3ViTWVudShDb250ZXh0TWVudUl0ZW0mKTsKKyAgICAgICAgdm9pZCBjcmVh
dGVBbmRBcHBlbmRTcGVsbGluZ1N1Yk1lbnUoQ29udGV4dE1lbnVJdGVtJik7CisgICAgICAgIHZv
aWQgY3JlYXRlQW5kQXBwZW5kU3BlZWNoU3ViTWVudShDb250ZXh0TWVudUl0ZW0mICk7CisgICAg
ICAgIHZvaWQgY3JlYXRlQW5kQXBwZW5kV3JpdGluZ0RpcmVjdGlvblN1Yk1lbnUoQ29udGV4dE1l
bnVJdGVtJik7CisgICAgICAgIHZvaWQgY3JlYXRlQW5kQXBwZW5kVGV4dERpcmVjdGlvblN1Yk1l
bnUoQ29udGV4dE1lbnVJdGVtJik7CisgICAgICAgIHZvaWQgY3JlYXRlQW5kQXBwZW5kU3Vic3Rp
dHV0aW9uc1N1Yk1lbnUoQ29udGV4dE1lbnVJdGVtJik7CisgICAgICAgIHZvaWQgY3JlYXRlQW5k
QXBwZW5kVHJhbnNmb3JtYXRpb25zU3ViTWVudShDb250ZXh0TWVudUl0ZW0mKTsKIAogICAgICAg
ICBQYWdlKiBtX3BhZ2U7CiAgICAgICAgIENvbnRleHRNZW51Q2xpZW50KiBtX2NsaWVudDsKICAg
ICAgICAgT3duUHRyPENvbnRleHRNZW51PiBtX2NvbnRleHRNZW51OwogICAgICAgICBSZWZQdHI8
Q29udGV4dE1lbnVQcm92aWRlcj4gbV9tZW51UHJvdmlkZXI7CisgICAgICAgIEhpdFRlc3RSZXN1
bHQgbV9oaXRUZXN0UmVzdWx0OwogICAgIH07CiAKIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Q29udGV4dE1lbnUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vQ29udGV4dE1l
bnUuY3BwCShyZXZpc2lvbiA3MzQ2OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vQ29udGV4dE1lbnUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDg5MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAwOCBDaHJpc3RpYW4gRHl3YW4gPGNocmlzdGlhbkBpbWVuZGlvLmNvbT4KLSAqIENv
cHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJDb250ZXh0TWVudS5oIgotCi0jaWYgRU5BQkxFKENPTlRFWFRfTUVOVVMpCi0K
LSNpbmNsdWRlICJCYWNrRm9yd2FyZENvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJDb250ZXh0TWVu
dUNvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJDb250ZXh0TWVudUNsaWVudC5oIgotI2luY2x1ZGUg
IkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oIgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5Lmgi
Ci0jaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0j
aW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKLSNpbmNsdWRlICJFZGl0b3IuaCIKLSNpbmNsdWRl
ICJGcmFtZS5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9y
Q29udHJvbGxlci5oIgotI2luY2x1ZGUgIktVUkwuaCIKLSNpbmNsdWRlICJMb2NhbGl6ZWRTdHJp
bmdzLmgiCi0jaW5jbHVkZSAiTm9kZS5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJS
ZXNvdXJjZVJlcXVlc3QuaCIKLSNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCi0jaW5j
bHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKLSNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci11c2luZyBuYW1lc3Bh
Y2UgV1RGOwotdXNpbmcgbmFtZXNwYWNlIFVuaWNvZGU7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotQ29udGV4dE1lbnVDb250cm9sbGVyKiBDb250ZXh0TWVudTo6Y29udHJvbGxlcigpIGNvbnN0
Ci17Ci0gICAgaWYgKE5vZGUqIG5vZGUgPSBtX2hpdFRlc3RSZXN1bHQuaW5uZXJOb25TaGFyZWRO
b2RlKCkpCi0gICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLT5mcmFt
ZSgpKQotICAgICAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBwYWdlLT5jb250ZXh0TWVudUNvbnRyb2xsZXIoKTsKLSAgICByZXR1
cm4gMDsKLX0KLQotc3RhdGljIFBhc3NPd25QdHI8Q29udGV4dE1lbnVJdGVtPiBzZXBhcmF0b3JJ
dGVtKCkKLXsKLSAgICByZXR1cm4gbmV3IENvbnRleHRNZW51SXRlbShTZXBhcmF0b3JUeXBlLCBD
b250ZXh0TWVudUl0ZW1UYWdOb0FjdGlvbiwgU3RyaW5nKCkpOwotfQotCi1zdGF0aWMgdm9pZCBj
cmVhdGVBbmRBcHBlbmRGb250U3ViTWVudShjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIENv
bnRleHRNZW51SXRlbSYgZm9udE1lbnVJdGVtKQotewotICAgIENvbnRleHRNZW51IGZvbnRNZW51
KHJlc3VsdCk7Ci0KLSNpZiBQTEFURk9STShNQUMpCi0gICAgQ29udGV4dE1lbnVJdGVtIHNob3dG
b250cyhBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTaG93Rm9udHMsIGNvbnRleHRNZW51
SXRlbVRhZ1Nob3dGb250cygpKTsKLSNlbmRpZgotICAgIENvbnRleHRNZW51SXRlbSBib2xkKENo
ZWNrYWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0JvbGQsIGNvbnRleHRNZW51SXRl
bVRhZ0JvbGQoKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIGl0YWxpYyhDaGVja2FibGVBY3Rpb25U
eXBlLCBDb250ZXh0TWVudUl0ZW1UYWdJdGFsaWMsIGNvbnRleHRNZW51SXRlbVRhZ0l0YWxpYygp
KTsKLSAgICBDb250ZXh0TWVudUl0ZW0gdW5kZXJsaW5lKENoZWNrYWJsZUFjdGlvblR5cGUsIENv
bnRleHRNZW51SXRlbVRhZ1VuZGVybGluZSwgY29udGV4dE1lbnVJdGVtVGFnVW5kZXJsaW5lKCkp
OwotICAgIENvbnRleHRNZW51SXRlbSBvdXRsaW5lKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRl
bVRhZ091dGxpbmUsIGNvbnRleHRNZW51SXRlbVRhZ091dGxpbmUoKSk7Ci0jaWYgUExBVEZPUk0o
TUFDKQotICAgIENvbnRleHRNZW51SXRlbSBzdHlsZXMoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJ
dGVtVGFnU3R5bGVzLCBjb250ZXh0TWVudUl0ZW1UYWdTdHlsZXMoKSk7Ci0gICAgQ29udGV4dE1l
bnVJdGVtIHNob3dDb2xvcnMoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU2hvd0NvbG9y
cywgY29udGV4dE1lbnVJdGVtVGFnU2hvd0NvbG9ycygpKTsKLSNlbmRpZgotCi0jaWYgUExBVEZP
Uk0oTUFDKQotICAgIGZvbnRNZW51LmFwcGVuZEl0ZW0oc2hvd0ZvbnRzKTsKLSNlbmRpZgotICAg
IGZvbnRNZW51LmFwcGVuZEl0ZW0oYm9sZCk7Ci0gICAgZm9udE1lbnUuYXBwZW5kSXRlbShpdGFs
aWMpOwotICAgIGZvbnRNZW51LmFwcGVuZEl0ZW0odW5kZXJsaW5lKTsKLSAgICBmb250TWVudS5h
cHBlbmRJdGVtKG91dGxpbmUpOwotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBmb250TWVudS5hcHBl
bmRJdGVtKHN0eWxlcyk7Ci0gICAgZm9udE1lbnUuYXBwZW5kSXRlbSgqc2VwYXJhdG9ySXRlbSgp
KTsKLSAgICBmb250TWVudS5hcHBlbmRJdGVtKHNob3dDb2xvcnMpOwotI2VuZGlmCi0KLSAgICBm
b250TWVudUl0ZW0uc2V0U3ViTWVudSgmZm9udE1lbnUpOwotfQotCi0jaWYgIWRlZmluZWQoQlVJ
TERJTkdfT05fVElHRVIpCi0KLSNpZiAhUExBVEZPUk0oR1RLKQotCi1zdGF0aWMgdm9pZCBjcmVh
dGVBbmRBcHBlbmRTcGVsbGluZ0FuZEdyYW1tYXJTdWJNZW51KGNvbnN0IEhpdFRlc3RSZXN1bHQm
IHJlc3VsdCwgQ29udGV4dE1lbnVJdGVtJiBzcGVsbGluZ0FuZEdyYW1tYXJNZW51SXRlbSkKLXsK
LSAgICBDb250ZXh0TWVudSBzcGVsbGluZ0FuZEdyYW1tYXJNZW51KHJlc3VsdCk7Ci0KLSAgICBD
b250ZXh0TWVudUl0ZW0gc2hvd1NwZWxsaW5nUGFuZWwoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJ
dGVtVGFnU2hvd1NwZWxsaW5nUGFuZWwsIAotICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdTaG93
U3BlbGxpbmdQYW5lbCh0cnVlKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIGNoZWNrU3BlbGxpbmco
QWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnQ2hlY2tTcGVsbGluZywgCi0gICAgICAgIGNv
bnRleHRNZW51SXRlbVRhZ0NoZWNrU3BlbGxpbmcoKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIGNo
ZWNrQXNZb3VUeXBlKENoZWNrYWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0NoZWNr
U3BlbGxpbmdXaGlsZVR5cGluZywgCi0gICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ0NoZWNrU3Bl
bGxpbmdXaGlsZVR5cGluZygpKTsKLSAgICBDb250ZXh0TWVudUl0ZW0gZ3JhbW1hcldpdGhTcGVs
bGluZyhDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdDaGVja0dyYW1tYXJX
aXRoU3BlbGxpbmcsIAotICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdDaGVja0dyYW1tYXJXaXRo
U3BlbGxpbmcoKSk7Ci0jaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9M
RU9QQVJEKQotICAgIENvbnRleHRNZW51SXRlbSBjb3JyZWN0U3BlbGxpbmcoQ2hlY2thYmxlQWN0
aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnQ29ycmVjdFNwZWxsaW5nQXV0b21hdGljYWxseSwg
Ci0gICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ0NvcnJlY3RTcGVsbGluZ0F1dG9tYXRpY2FsbHko
KSk7Ci0jZW5kaWYKLQotICAgIHNwZWxsaW5nQW5kR3JhbW1hck1lbnUuYXBwZW5kSXRlbShzaG93
U3BlbGxpbmdQYW5lbCk7Ci0gICAgc3BlbGxpbmdBbmRHcmFtbWFyTWVudS5hcHBlbmRJdGVtKGNo
ZWNrU3BlbGxpbmcpOwotI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05f
TEVPUEFSRCkKLSAgICBzcGVsbGluZ0FuZEdyYW1tYXJNZW51LmFwcGVuZEl0ZW0oKnNlcGFyYXRv
ckl0ZW0oKSk7Ci0jZW5kaWYKLSAgICBzcGVsbGluZ0FuZEdyYW1tYXJNZW51LmFwcGVuZEl0ZW0o
Y2hlY2tBc1lvdVR5cGUpOwotICAgIHNwZWxsaW5nQW5kR3JhbW1hck1lbnUuYXBwZW5kSXRlbShn
cmFtbWFyV2l0aFNwZWxsaW5nKTsKLSNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxE
SU5HX09OX0xFT1BBUkQpCi0gICAgc3BlbGxpbmdBbmRHcmFtbWFyTWVudS5hcHBlbmRJdGVtKGNv
cnJlY3RTcGVsbGluZyk7Ci0jZW5kaWYKLQotICAgIHNwZWxsaW5nQW5kR3JhbW1hck1lbnVJdGVt
LnNldFN1Yk1lbnUoJnNwZWxsaW5nQW5kR3JhbW1hck1lbnUpOwotfQotCi0jZW5kaWYgLy8gIVBM
QVRGT1JNKEdUSykKLQotI2Vsc2UKLQotc3RhdGljIHZvaWQgY3JlYXRlQW5kQXBwZW5kU3BlbGxp
bmdTdWJNZW51KGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgQ29udGV4dE1lbnVJdGVtJiBz
cGVsbGluZ01lbnVJdGVtKQotewotICAgIENvbnRleHRNZW51IHNwZWxsaW5nTWVudShyZXN1bHQp
OwotCi0gICAgQ29udGV4dE1lbnVJdGVtIHNob3dTcGVsbGluZ1BhbmVsKEFjdGlvblR5cGUsIENv
bnRleHRNZW51SXRlbVRhZ1Nob3dTcGVsbGluZ1BhbmVsLCAKLSAgICAgICAgY29udGV4dE1lbnVJ
dGVtVGFnU2hvd1NwZWxsaW5nUGFuZWwodHJ1ZSkpOwotICAgIENvbnRleHRNZW51SXRlbSBjaGVj
a1NwZWxsaW5nKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0NoZWNrU3BlbGxpbmcsIAot
ICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdDaGVja1NwZWxsaW5nKCkpOwotICAgIENvbnRleHRN
ZW51SXRlbSBjaGVja0FzWW91VHlwZShDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0
ZW1UYWdDaGVja1NwZWxsaW5nV2hpbGVUeXBpbmcsIAotICAgICAgICBjb250ZXh0TWVudUl0ZW1U
YWdDaGVja1NwZWxsaW5nV2hpbGVUeXBpbmcoKSk7Ci0KLSAgICBzcGVsbGluZ01lbnUuYXBwZW5k
SXRlbShzaG93U3BlbGxpbmdQYW5lbCk7Ci0gICAgc3BlbGxpbmdNZW51LmFwcGVuZEl0ZW0oY2hl
Y2tTcGVsbGluZyk7Ci0gICAgc3BlbGxpbmdNZW51LmFwcGVuZEl0ZW0oY2hlY2tBc1lvdVR5cGUp
OwotCi0gICAgc3BlbGxpbmdNZW51SXRlbS5zZXRTdWJNZW51KCZzcGVsbGluZ01lbnUpOwotfQot
Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKE1BQykKLQotc3RhdGljIHZvaWQgY3JlYXRlQW5kQXBw
ZW5kU3BlZWNoU3ViTWVudShjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIENvbnRleHRNZW51
SXRlbSYgc3BlZWNoTWVudUl0ZW0pCi17Ci0gICAgQ29udGV4dE1lbnUgc3BlZWNoTWVudShyZXN1
bHQpOwotCi0gICAgQ29udGV4dE1lbnVJdGVtIHN0YXJ0KEFjdGlvblR5cGUsIENvbnRleHRNZW51
SXRlbVRhZ1N0YXJ0U3BlYWtpbmcsIGNvbnRleHRNZW51SXRlbVRhZ1N0YXJ0U3BlYWtpbmcoKSk7
Ci0gICAgQ29udGV4dE1lbnVJdGVtIHN0b3AoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFn
U3RvcFNwZWFraW5nLCBjb250ZXh0TWVudUl0ZW1UYWdTdG9wU3BlYWtpbmcoKSk7Ci0KLSAgICBz
cGVlY2hNZW51LmFwcGVuZEl0ZW0oc3RhcnQpOwotICAgIHNwZWVjaE1lbnUuYXBwZW5kSXRlbShz
dG9wKTsKLQotICAgIHNwZWVjaE1lbnVJdGVtLnNldFN1Yk1lbnUoJnNwZWVjaE1lbnUpOwotfQot
Ci0jZW5kaWYKLSAKLSNpZiAhUExBVEZPUk0oR1RLKQotCi1zdGF0aWMgdm9pZCBjcmVhdGVBbmRB
cHBlbmRXcml0aW5nRGlyZWN0aW9uU3ViTWVudShjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQs
IENvbnRleHRNZW51SXRlbSYgd3JpdGluZ0RpcmVjdGlvbk1lbnVJdGVtKQotewotICAgIENvbnRl
eHRNZW51IHdyaXRpbmdEaXJlY3Rpb25NZW51KHJlc3VsdCk7Ci0KLSAgICBDb250ZXh0TWVudUl0
ZW0gZGVmYXVsdEl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnRGVmYXVsdERpcmVj
dGlvbiwgCi0gICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ0RlZmF1bHREaXJlY3Rpb24oKSk7Ci0g
ICAgQ29udGV4dE1lbnVJdGVtIGx0cihDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0
ZW1UYWdMZWZ0VG9SaWdodCwgY29udGV4dE1lbnVJdGVtVGFnTGVmdFRvUmlnaHQoKSk7Ci0gICAg
Q29udGV4dE1lbnVJdGVtIHJ0bChDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1U
YWdSaWdodFRvTGVmdCwgY29udGV4dE1lbnVJdGVtVGFnUmlnaHRUb0xlZnQoKSk7Ci0KLSAgICB3
cml0aW5nRGlyZWN0aW9uTWVudS5hcHBlbmRJdGVtKGRlZmF1bHRJdGVtKTsKLSAgICB3cml0aW5n
RGlyZWN0aW9uTWVudS5hcHBlbmRJdGVtKGx0cik7Ci0gICAgd3JpdGluZ0RpcmVjdGlvbk1lbnUu
YXBwZW5kSXRlbShydGwpOwotCi0gICAgd3JpdGluZ0RpcmVjdGlvbk1lbnVJdGVtLnNldFN1Yk1l
bnUoJndyaXRpbmdEaXJlY3Rpb25NZW51KTsKLX0KLQotc3RhdGljIHZvaWQgY3JlYXRlQW5kQXBw
ZW5kVGV4dERpcmVjdGlvblN1Yk1lbnUoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBDb250
ZXh0TWVudUl0ZW0mIHRleHREaXJlY3Rpb25NZW51SXRlbSkKLXsKLSAgICBDb250ZXh0TWVudSB0
ZXh0RGlyZWN0aW9uTWVudShyZXN1bHQpOwotCi0gICAgQ29udGV4dE1lbnVJdGVtIGRlZmF1bHRJ
dGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1RleHREaXJlY3Rpb25EZWZhdWx0LCBj
b250ZXh0TWVudUl0ZW1UYWdEZWZhdWx0RGlyZWN0aW9uKCkpOwotICAgIENvbnRleHRNZW51SXRl
bSBsdHIoQ2hlY2thYmxlQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnVGV4dERpcmVjdGlv
bkxlZnRUb1JpZ2h0LCBjb250ZXh0TWVudUl0ZW1UYWdMZWZ0VG9SaWdodCgpKTsKLSAgICBDb250
ZXh0TWVudUl0ZW0gcnRsKENoZWNrYWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1Rl
eHREaXJlY3Rpb25SaWdodFRvTGVmdCwgY29udGV4dE1lbnVJdGVtVGFnUmlnaHRUb0xlZnQoKSk7
Ci0KLSAgICB0ZXh0RGlyZWN0aW9uTWVudS5hcHBlbmRJdGVtKGRlZmF1bHRJdGVtKTsKLSAgICB0
ZXh0RGlyZWN0aW9uTWVudS5hcHBlbmRJdGVtKGx0cik7Ci0gICAgdGV4dERpcmVjdGlvbk1lbnUu
YXBwZW5kSXRlbShydGwpOwotCi0gICAgdGV4dERpcmVjdGlvbk1lbnVJdGVtLnNldFN1Yk1lbnUo
JnRleHREaXJlY3Rpb25NZW51KTsKLX0KLQotI2VuZGlmCi0KLSNpZiBQTEFURk9STShNQUMpICYm
ICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9Q
QVJEKQotCi1zdGF0aWMgdm9pZCBjcmVhdGVBbmRBcHBlbmRTdWJzdGl0dXRpb25zU3ViTWVudShj
b25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIENvbnRleHRNZW51SXRlbSYgc3Vic3RpdHV0aW9u
c01lbnVJdGVtKQotewotICAgIENvbnRleHRNZW51IHN1YnN0aXR1dGlvbnNNZW51KHJlc3VsdCk7
Ci0KLSAgICBDb250ZXh0TWVudUl0ZW0gc2hvd1N1YnN0aXR1dGlvbnMoQWN0aW9uVHlwZSwgQ29u
dGV4dE1lbnVJdGVtVGFnU2hvd1N1YnN0aXR1dGlvbnMsIGNvbnRleHRNZW51SXRlbVRhZ1Nob3dT
dWJzdGl0dXRpb25zKHRydWUpKTsKLSAgICBDb250ZXh0TWVudUl0ZW0gc21hcnRDb3B5UGFzdGUo
Q2hlY2thYmxlQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU21hcnRDb3B5UGFzdGUsIGNv
bnRleHRNZW51SXRlbVRhZ1NtYXJ0Q29weVBhc3RlKCkpOwotICAgIENvbnRleHRNZW51SXRlbSBz
bWFydFF1b3RlcyhDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTbWFydFF1
b3RlcywgY29udGV4dE1lbnVJdGVtVGFnU21hcnRRdW90ZXMoKSk7Ci0gICAgQ29udGV4dE1lbnVJ
dGVtIHNtYXJ0RGFzaGVzKENoZWNrYWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1Nt
YXJ0RGFzaGVzLCBjb250ZXh0TWVudUl0ZW1UYWdTbWFydERhc2hlcygpKTsKLSAgICBDb250ZXh0
TWVudUl0ZW0gc21hcnRMaW5rcyhDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1U
YWdTbWFydExpbmtzLCBjb250ZXh0TWVudUl0ZW1UYWdTbWFydExpbmtzKCkpOwotICAgIENvbnRl
eHRNZW51SXRlbSB0ZXh0UmVwbGFjZW1lbnQoQ2hlY2thYmxlQWN0aW9uVHlwZSwgQ29udGV4dE1l
bnVJdGVtVGFnVGV4dFJlcGxhY2VtZW50LCBjb250ZXh0TWVudUl0ZW1UYWdUZXh0UmVwbGFjZW1l
bnQoKSk7Ci0KLSAgICBzdWJzdGl0dXRpb25zTWVudS5hcHBlbmRJdGVtKHNob3dTdWJzdGl0dXRp
b25zKTsKLSAgICBzdWJzdGl0dXRpb25zTWVudS5hcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCkp
OwotICAgIHN1YnN0aXR1dGlvbnNNZW51LmFwcGVuZEl0ZW0oc21hcnRDb3B5UGFzdGUpOwotICAg
IHN1YnN0aXR1dGlvbnNNZW51LmFwcGVuZEl0ZW0oc21hcnRRdW90ZXMpOwotICAgIHN1YnN0aXR1
dGlvbnNNZW51LmFwcGVuZEl0ZW0oc21hcnREYXNoZXMpOwotICAgIHN1YnN0aXR1dGlvbnNNZW51
LmFwcGVuZEl0ZW0oc21hcnRMaW5rcyk7Ci0gICAgc3Vic3RpdHV0aW9uc01lbnUuYXBwZW5kSXRl
bSh0ZXh0UmVwbGFjZW1lbnQpOwotCi0gICAgc3Vic3RpdHV0aW9uc01lbnVJdGVtLnNldFN1Yk1l
bnUoJnN1YnN0aXR1dGlvbnNNZW51KTsKLX0KLQotc3RhdGljIHZvaWQgY3JlYXRlQW5kQXBwZW5k
VHJhbnNmb3JtYXRpb25zU3ViTWVudShjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIENvbnRl
eHRNZW51SXRlbSYgdHJhbnNmb3JtYXRpb25zTWVudUl0ZW0pCi17Ci0gICAgQ29udGV4dE1lbnUg
dHJhbnNmb3JtYXRpb25zTWVudShyZXN1bHQpOwotCi0gICAgQ29udGV4dE1lbnVJdGVtIG1ha2VV
cHBlckNhc2UoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnTWFrZVVwcGVyQ2FzZSwgY29u
dGV4dE1lbnVJdGVtVGFnTWFrZVVwcGVyQ2FzZSgpKTsKLSAgICBDb250ZXh0TWVudUl0ZW0gbWFr
ZUxvd2VyQ2FzZShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdNYWtlTG93ZXJDYXNlLCBj
b250ZXh0TWVudUl0ZW1UYWdNYWtlTG93ZXJDYXNlKCkpOwotICAgIENvbnRleHRNZW51SXRlbSBj
YXBpdGFsaXplKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0NhcGl0YWxpemUsIGNvbnRl
eHRNZW51SXRlbVRhZ0NhcGl0YWxpemUoKSk7Ci0KLSAgICB0cmFuc2Zvcm1hdGlvbnNNZW51LmFw
cGVuZEl0ZW0obWFrZVVwcGVyQ2FzZSk7Ci0gICAgdHJhbnNmb3JtYXRpb25zTWVudS5hcHBlbmRJ
dGVtKG1ha2VMb3dlckNhc2UpOwotICAgIHRyYW5zZm9ybWF0aW9uc01lbnUuYXBwZW5kSXRlbShj
YXBpdGFsaXplKTsKLQotICAgIHRyYW5zZm9ybWF0aW9uc01lbnVJdGVtLnNldFN1Yk1lbnUoJnRy
YW5zZm9ybWF0aW9uc01lbnUpOwotfQotCi0jZW5kaWYKLQotc3RhdGljIGJvb2wgc2VsZWN0aW9u
Q29udGFpbnNQb3NzaWJsZVdvcmQoRnJhbWUqIGZyYW1lKQotewotICAgIC8vIEN1cnJlbnQgYWxn
b3JpdGhtOiBsb29rIGZvciBhIGNoYXJhY3RlciB0aGF0J3Mgbm90IGp1c3QgYSBzZXBhcmF0b3Iu
Ci0gICAgZm9yIChUZXh0SXRlcmF0b3IgaXQoZnJhbWUtPnNlbGVjdGlvbigpLT50b05vcm1hbGl6
ZWRSYW5nZSgpLmdldCgpKTsgIWl0LmF0RW5kKCk7IGl0LmFkdmFuY2UoKSkgewotICAgICAgICBp
bnQgbGVuZ3RoID0gaXQubGVuZ3RoKCk7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJz
ID0gaXQuY2hhcmFjdGVycygpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsg
KytpKQotICAgICAgICAgICAgaWYgKCEoY2F0ZWdvcnkoY2hhcmFjdGVyc1tpXSkgJiAoU2VwYXJh
dG9yX1NwYWNlIHwgU2VwYXJhdG9yX0xpbmUgfCBTZXBhcmF0b3JfUGFyYWdyYXBoKSkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
dm9pZCBDb250ZXh0TWVudTo6cG9wdWxhdGUoKQotewotICAgIENvbnRleHRNZW51SXRlbSBPcGVu
TGlua0l0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnT3BlbkxpbmssIGNvbnRleHRN
ZW51SXRlbVRhZ09wZW5MaW5rKCkpOwotICAgIENvbnRleHRNZW51SXRlbSBPcGVuTGlua0luTmV3
V2luZG93SXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdPcGVuTGlua0luTmV3V2lu
ZG93LCAKLSAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnT3BlbkxpbmtJbk5ld1dpbmRvdygpKTsK
LSAgICBDb250ZXh0TWVudUl0ZW0gRG93bmxvYWRGaWxlSXRlbShBY3Rpb25UeXBlLCBDb250ZXh0
TWVudUl0ZW1UYWdEb3dubG9hZExpbmtUb0Rpc2ssIAotICAgICAgICBjb250ZXh0TWVudUl0ZW1U
YWdEb3dubG9hZExpbmtUb0Rpc2soKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIENvcHlMaW5rSXRl
bShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdDb3B5TGlua1RvQ2xpcGJvYXJkLCAKLSAg
ICAgICAgY29udGV4dE1lbnVJdGVtVGFnQ29weUxpbmtUb0NsaXBib2FyZCgpKTsKLSAgICBDb250
ZXh0TWVudUl0ZW0gT3BlbkltYWdlSW5OZXdXaW5kb3dJdGVtKEFjdGlvblR5cGUsIENvbnRleHRN
ZW51SXRlbVRhZ09wZW5JbWFnZUluTmV3V2luZG93LCAKLSAgICAgICAgY29udGV4dE1lbnVJdGVt
VGFnT3BlbkltYWdlSW5OZXdXaW5kb3coKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIERvd25sb2Fk
SW1hZ2VJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0Rvd25sb2FkSW1hZ2VUb0Rp
c2ssIAotICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdEb3dubG9hZEltYWdlVG9EaXNrKCkpOwot
ICAgIENvbnRleHRNZW51SXRlbSBDb3B5SW1hZ2VJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51
SXRlbVRhZ0NvcHlJbWFnZVRvQ2xpcGJvYXJkLCAKLSAgICAgICAgY29udGV4dE1lbnVJdGVtVGFn
Q29weUltYWdlVG9DbGlwYm9hcmQoKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIE9wZW5NZWRpYUlu
TmV3V2luZG93SXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdPcGVuTWVkaWFJbk5l
d1dpbmRvdywgU3RyaW5nKCkpOwotICAgIENvbnRleHRNZW51SXRlbSBDb3B5TWVkaWFMaW5rSXRl
bShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdDb3B5TWVkaWFMaW5rVG9DbGlwYm9hcmQs
IAotICAgICAgICBTdHJpbmcoKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIE1lZGlhUGxheVBhdXNl
KEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ01lZGlhUGxheVBhdXNlLCAKLSAgICAgICAg
Y29udGV4dE1lbnVJdGVtVGFnTWVkaWFQbGF5KCkpOwotICAgIENvbnRleHRNZW51SXRlbSBNZWRp
YU11dGUoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnTWVkaWFNdXRlLCAKLSAgICAgICAg
Y29udGV4dE1lbnVJdGVtVGFnTWVkaWFNdXRlKCkpOwotICAgIENvbnRleHRNZW51SXRlbSBUb2dn
bGVNZWRpYUNvbnRyb2xzKENoZWNrYWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1Rv
Z2dsZU1lZGlhQ29udHJvbHMsIAotICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdUb2dnbGVNZWRp
YUNvbnRyb2xzKCkpOwotICAgIENvbnRleHRNZW51SXRlbSBUb2dnbGVNZWRpYUxvb3AoQ2hlY2th
YmxlQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnVG9nZ2xlTWVkaWFMb29wLCAKLSAgICAg
ICAgY29udGV4dE1lbnVJdGVtVGFnVG9nZ2xlTWVkaWFMb29wKCkpOwotICAgIENvbnRleHRNZW51
SXRlbSBFbnRlclZpZGVvRnVsbHNjcmVlbihBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdF
bnRlclZpZGVvRnVsbHNjcmVlbiwgCi0gICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ0VudGVyVmlk
ZW9GdWxsc2NyZWVuKCkpOwotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBDb250ZXh0TWVudUl0ZW0g
U2VhcmNoU3BvdGxpZ2h0SXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTZWFyY2hJ
blNwb3RsaWdodCwgCi0gICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ1NlYXJjaEluU3BvdGxpZ2h0
KCkpOwotICAgIENvbnRleHRNZW51SXRlbSBMb29rSW5EaWN0aW9uYXJ5SXRlbShBY3Rpb25UeXBl
LCBDb250ZXh0TWVudUl0ZW1UYWdMb29rVXBJbkRpY3Rpb25hcnksIAotICAgICAgICBjb250ZXh0
TWVudUl0ZW1UYWdMb29rVXBJbkRpY3Rpb25hcnkoKSk7Ci0jZW5kaWYKLSNpZiAhUExBVEZPUk0o
R1RLKQotICAgIENvbnRleHRNZW51SXRlbSBTZWFyY2hXZWJJdGVtKEFjdGlvblR5cGUsIENvbnRl
eHRNZW51SXRlbVRhZ1NlYXJjaFdlYiwgY29udGV4dE1lbnVJdGVtVGFnU2VhcmNoV2ViKCkpOwot
I2VuZGlmCi0gICAgQ29udGV4dE1lbnVJdGVtIENvcHlJdGVtKEFjdGlvblR5cGUsIENvbnRleHRN
ZW51SXRlbVRhZ0NvcHksIGNvbnRleHRNZW51SXRlbVRhZ0NvcHkoKSk7Ci0gICAgQ29udGV4dE1l
bnVJdGVtIEJhY2tJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0dvQmFjaywgY29u
dGV4dE1lbnVJdGVtVGFnR29CYWNrKCkpOwotICAgIENvbnRleHRNZW51SXRlbSBGb3J3YXJkSXRl
bShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdHb0ZvcndhcmQsICBjb250ZXh0TWVudUl0
ZW1UYWdHb0ZvcndhcmQoKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIFN0b3BJdGVtKEFjdGlvblR5
cGUsIENvbnRleHRNZW51SXRlbVRhZ1N0b3AsIGNvbnRleHRNZW51SXRlbVRhZ1N0b3AoKSk7Ci0g
ICAgQ29udGV4dE1lbnVJdGVtIFJlbG9hZEl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVt
VGFnUmVsb2FkLCBjb250ZXh0TWVudUl0ZW1UYWdSZWxvYWQoKSk7Ci0gICAgQ29udGV4dE1lbnVJ
dGVtIE9wZW5GcmFtZUl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnT3BlbkZyYW1l
SW5OZXdXaW5kb3csIAotICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdPcGVuRnJhbWVJbk5ld1dp
bmRvdygpKTsKLSAgICBDb250ZXh0TWVudUl0ZW0gTm9HdWVzc2VzSXRlbShBY3Rpb25UeXBlLCBD
b250ZXh0TWVudUl0ZW1UYWdOb0d1ZXNzZXNGb3VuZCwgCi0gICAgICAgIGNvbnRleHRNZW51SXRl
bVRhZ05vR3Vlc3Nlc0ZvdW5kKCkpOwotICAgIENvbnRleHRNZW51SXRlbSBJZ25vcmVTcGVsbGlu
Z0l0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnSWdub3JlU3BlbGxpbmcsIAotICAg
ICAgICBjb250ZXh0TWVudUl0ZW1UYWdJZ25vcmVTcGVsbGluZygpKTsKLSAgICBDb250ZXh0TWVu
dUl0ZW0gTGVhcm5TcGVsbGluZ0l0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnTGVh
cm5TcGVsbGluZywgCi0gICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ0xlYXJuU3BlbGxpbmcoKSk7
Ci0gICAgQ29udGV4dE1lbnVJdGVtIElnbm9yZUdyYW1tYXJJdGVtKEFjdGlvblR5cGUsIENvbnRl
eHRNZW51SXRlbVRhZ0lnbm9yZUdyYW1tYXIsIAotICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdJ
Z25vcmVHcmFtbWFyKCkpOwotICAgIENvbnRleHRNZW51SXRlbSBDdXRJdGVtKEFjdGlvblR5cGUs
IENvbnRleHRNZW51SXRlbVRhZ0N1dCwgY29udGV4dE1lbnVJdGVtVGFnQ3V0KCkpOwotICAgIENv
bnRleHRNZW51SXRlbSBQYXN0ZUl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnUGFz
dGUsIGNvbnRleHRNZW51SXRlbVRhZ1Bhc3RlKCkpOwotI2lmIFBMQVRGT1JNKEdUSykKLSAgICBD
b250ZXh0TWVudUl0ZW0gRGVsZXRlSXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdE
ZWxldGUsIGNvbnRleHRNZW51SXRlbVRhZ0RlbGV0ZSgpKTsKLSAgICBDb250ZXh0TWVudUl0ZW0g
U2VsZWN0QWxsSXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTZWxlY3RBbGwsIGNv
bnRleHRNZW51SXRlbVRhZ1NlbGVjdEFsbCgpKTsKLSNlbmRpZgotICAgIAotICAgIEhpdFRlc3RS
ZXN1bHQgcmVzdWx0ID0gaGl0VGVzdFJlc3VsdCgpOwotICAgIAotICAgIE5vZGUqIG5vZGUgPSBt
X2hpdFRlc3RSZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCk7Ci0gICAgaWYgKCFub2RlKQotICAg
ICAgICByZXR1cm47Ci0jaWYgUExBVEZPUk0oR1RLKQotICAgIGlmICghcmVzdWx0LmlzQ29udGVu
dEVkaXRhYmxlKCkgJiYgKG5vZGUtPmlzRWxlbWVudE5vZGUoKSAmJiBzdGF0aWNfY2FzdDxFbGVt
ZW50Kj4obm9kZSktPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpKQotICAgICAgICByZXR1cm47Ci0j
ZW5kaWYKLSAgICBGcmFtZSogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpOwotICAg
IGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghcmVzdWx0LmlzQ29udGVu
dEVkaXRhYmxlKCkpIHsKLSAgICAgICAgRnJhbWVMb2FkZXIqIGxvYWRlciA9IGZyYW1lLT5sb2Fk
ZXIoKTsKLSAgICAgICAgS1VSTCBsaW5rVVJMID0gcmVzdWx0LmFic29sdXRlTGlua1VSTCgpOwot
ICAgICAgICBpZiAoIWxpbmtVUkwuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBpZiAobG9hZGVy
LT5jYW5IYW5kbGVSZXF1ZXN0KFJlc291cmNlUmVxdWVzdChsaW5rVVJMKSkpIHsKLSAgICAgICAg
ICAgICAgICBhcHBlbmRJdGVtKE9wZW5MaW5rSXRlbSk7Ci0gICAgICAgICAgICAgICAgYXBwZW5k
SXRlbShPcGVuTGlua0luTmV3V2luZG93SXRlbSk7Ci0gICAgICAgICAgICAgICAgYXBwZW5kSXRl
bShEb3dubG9hZEZpbGVJdGVtKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGFwcGVuZEl0
ZW0oQ29weUxpbmtJdGVtKTsKLSAgICAgICAgfQotCi0gICAgICAgIEtVUkwgaW1hZ2VVUkwgPSBy
ZXN1bHQuYWJzb2x1dGVJbWFnZVVSTCgpOwotICAgICAgICBpZiAoIWltYWdlVVJMLmlzRW1wdHko
KSkgewotICAgICAgICAgICAgaWYgKCFsaW5rVVJMLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAg
ICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCkpOwotCi0gICAgICAgICAgICBhcHBlbmRJdGVt
KE9wZW5JbWFnZUluTmV3V2luZG93SXRlbSk7Ci0gICAgICAgICAgICBhcHBlbmRJdGVtKERvd25s
b2FkSW1hZ2VJdGVtKTsKLSAgICAgICAgICAgIGlmIChpbWFnZVVSTC5pc0xvY2FsRmlsZSgpIHx8
IG1faGl0VGVzdFJlc3VsdC5pbWFnZSgpKQotICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oQ29w
eUltYWdlSXRlbSk7Ci0gICAgICAgIH0KLQotICAgICAgICBLVVJMIG1lZGlhVVJMID0gcmVzdWx0
LmFic29sdXRlTWVkaWFVUkwoKTsKLSAgICAgICAgaWYgKCFtZWRpYVVSTC5pc0VtcHR5KCkpIHsK
LSAgICAgICAgICAgIGlmICghbGlua1VSTC5pc0VtcHR5KCkgfHwgIWltYWdlVVJMLmlzRW1wdHko
KSkKLSAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCkpOwotCi0gICAg
ICAgICAgICBhcHBlbmRJdGVtKE1lZGlhUGxheVBhdXNlKTsKLSAgICAgICAgICAgIGFwcGVuZEl0
ZW0oTWVkaWFNdXRlKTsKLSAgICAgICAgICAgIGFwcGVuZEl0ZW0oVG9nZ2xlTWVkaWFDb250cm9s
cyk7Ci0gICAgICAgICAgICBhcHBlbmRJdGVtKFRvZ2dsZU1lZGlhTG9vcCk7Ci0gICAgICAgICAg
ICBhcHBlbmRJdGVtKEVudGVyVmlkZW9GdWxsc2NyZWVuKTsKLQotICAgICAgICAgICAgYXBwZW5k
SXRlbSgqc2VwYXJhdG9ySXRlbSgpKTsKLSAgICAgICAgICAgIGFwcGVuZEl0ZW0oQ29weU1lZGlh
TGlua0l0ZW0pOwotICAgICAgICAgICAgYXBwZW5kSXRlbShPcGVuTWVkaWFJbk5ld1dpbmRvd0l0
ZW0pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGltYWdlVVJMLmlzRW1wdHkoKSAmJiBsaW5r
VVJMLmlzRW1wdHkoKSAmJiBtZWRpYVVSTC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGlmIChy
ZXN1bHQuaXNTZWxlY3RlZCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGlvbkNvbnRh
aW5zUG9zc2libGVXb3JkKGZyYW1lKSkgewotI2lmIFBMQVRGT1JNKE1BQykKLSAgICAgICAgICAg
ICAgICAgICAgYXBwZW5kSXRlbShTZWFyY2hTcG90bGlnaHRJdGVtKTsKLSNlbmRpZgotI2lmICFQ
TEFURk9STShHVEspCi0gICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oU2VhcmNoV2ViSXRl
bSk7Ci0gICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSk7Ci0j
ZW5kaWYKLSNpZiBQTEFURk9STShNQUMpCi0gICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0o
TG9va0luRGljdGlvbmFyeUl0ZW0pOwotICAgICAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKCpz
ZXBhcmF0b3JJdGVtKCkpOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGFwcGVuZEl0ZW0oQ29weUl0ZW0pOwotI2lmIFBMQVRGT1JNKE1BQykKLSAgICAgICAgICAg
ICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCkpOwotICAgICAgICAgICAgICAgIENvbnRl
eHRNZW51SXRlbSBTcGVlY2hNZW51SXRlbShTdWJtZW51VHlwZSwgQ29udGV4dE1lbnVJdGVtVGFn
U3BlZWNoTWVudSwgY29udGV4dE1lbnVJdGVtVGFnU3BlZWNoTWVudSgpKTsKLSAgICAgICAgICAg
ICAgICBjcmVhdGVBbmRBcHBlbmRTcGVlY2hTdWJNZW51KG1faGl0VGVzdFJlc3VsdCwgU3BlZWNo
TWVudUl0ZW0pOwotICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oU3BlZWNoTWVudUl0ZW0pOwot
I2VuZGlmICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgfSBlbHNlIHsKLSNpZiBFTkFCTEUo
SU5TUEVDVE9SKQotICAgICAgICAgICAgICAgIGlmICghKGZyYW1lLT5wYWdlKCkgJiYgZnJhbWUt
PnBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5oYXNJbnNwZWN0b3JGcm9udGVuZENsaWVu
dCgpKSkgewotI2VuZGlmCi0gICAgICAgICAgICAgICAgaWYgKGZyYW1lLT5wYWdlKCkgJiYgZnJh
bWUtPnBhZ2UoKS0+YmFja0ZvcndhcmQoKS0+Y2FuR29CYWNrT3JGb3J3YXJkKC0xKSkKLSAgICAg
ICAgICAgICAgICAgICAgYXBwZW5kSXRlbShCYWNrSXRlbSk7Ci0KLSAgICAgICAgICAgICAgICBp
ZiAoZnJhbWUtPnBhZ2UoKSAmJiBmcmFtZS0+cGFnZSgpLT5iYWNrRm9yd2FyZCgpLT5jYW5Hb0Jh
Y2tPckZvcndhcmQoMSkpCi0gICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oRm9yd2FyZEl0
ZW0pOwotCi0gICAgICAgICAgICAgICAgLy8gdXNlIGlzTG9hZGluZ0luQVBJU2Vuc2UgcmF0aGVy
IHRoYW4gaXNMb2FkaW5nIGJlY2F1c2UgU3RvcC9SZWxvYWQgYXJlCi0gICAgICAgICAgICAgICAg
Ly8gaW50ZW5kZWQgdG8gbWF0Y2ggV2ViS2l0J3MgQVBJLCBub3QgV2ViQ29yZSdzIGludGVybmFs
IG5vdGlvbiBvZiBsb2FkaW5nIHN0YXR1cwotICAgICAgICAgICAgICAgIGlmIChsb2FkZXItPmRv
Y3VtZW50TG9hZGVyKCktPmlzTG9hZGluZ0luQVBJU2Vuc2UoKSkKLSAgICAgICAgICAgICAgICAg
ICAgYXBwZW5kSXRlbShTdG9wSXRlbSk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgICAgICBhcHBlbmRJdGVtKFJlbG9hZEl0ZW0pOwotI2lmIEVOQUJMRShJTlNQRUNUT1Ip
Ci0gICAgICAgICAgICAgICAgfQotI2VuZGlmCi0KLSAgICAgICAgICAgICAgICBpZiAoZnJhbWUt
PnBhZ2UoKSAmJiBmcmFtZSAhPSBmcmFtZS0+cGFnZSgpLT5tYWluRnJhbWUoKSkKLSAgICAgICAg
ICAgICAgICAgICAgYXBwZW5kSXRlbShPcGVuRnJhbWVJdGVtKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0gZWxzZSB7IC8vIE1ha2UgYW4gZWRpdGluZyBjb250ZXh0IG1lbnUKLSAg
ICAgICAgU2VsZWN0aW9uQ29udHJvbGxlciogc2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigp
OwotICAgICAgICBib29sIGluUGFzc3dvcmRGaWVsZCA9IHNlbGVjdGlvbi0+aXNJblBhc3N3b3Jk
RmllbGQoKTsKLSAgICAgICAgYm9vbCBzcGVsbENoZWNraW5nRW5hYmxlZCA9IGZyYW1lLT5lZGl0
b3IoKS0+aXNTcGVsbENoZWNraW5nRW5hYmxlZEZvcihub2RlKTsKLSAgICAgICAgCi0gICAgICAg
IGlmICghaW5QYXNzd29yZEZpZWxkICYmIHNwZWxsQ2hlY2tpbmdFbmFibGVkKSB7Ci0gICAgICAg
ICAgICAvLyBDb25zaWRlciBhZGRpbmcgc3BlbGxpbmctcmVsYXRlZCBvciBncmFtbWFyLXJlbGF0
ZWQgY29udGV4dCBtZW51IGl0ZW1zIChuZXZlciBib3RoLCBzaW5jZSBhIHNpbmdsZSBzZWxlY3Rl
ZCByYW5nZQotICAgICAgICAgICAgLy8gaXMgbmV2ZXIgY29uc2lkZXJlZCBhIG1pc3NwZWxsaW5n
IGFuZCBiYWQgZ3JhbW1hciBhdCB0aGUgc2FtZSB0aW1lKQotICAgICAgICAgICAgYm9vbCBtaXNz
cGVsbGluZzsKLSAgICAgICAgICAgIGJvb2wgYmFkR3JhbW1hcjsKLSAgICAgICAgICAgIFZlY3Rv
cjxTdHJpbmc+IGd1ZXNzZXMgPSBmcmFtZS0+ZWRpdG9yKCktPmd1ZXNzZXNGb3JNaXNzcGVsbGVk
T3JVbmdyYW1tYXRpY2FsU2VsZWN0aW9uKG1pc3NwZWxsaW5nLCBiYWRHcmFtbWFyKTsKLSAgICAg
ICAgICAgIGlmIChtaXNzcGVsbGluZyB8fCBiYWRHcmFtbWFyKSB7Ci0gICAgICAgICAgICAgICAg
c2l6ZV90IHNpemUgPSBndWVzc2VzLnNpemUoKTsKLSAgICAgICAgICAgICAgICBpZiAoc2l6ZSA9
PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlJ3MgYmFkIGdyYW1tYXIgYnV0
IG5vIHN1Z2dlc3Rpb25zIChlLmcuLCByZXBlYXRlZCB3b3JkKSwganVzdCBsZWF2ZSBvZmYgdGhl
IHN1Z2dlc3Rpb25zCi0gICAgICAgICAgICAgICAgICAgIC8vIGxpc3QgYW5kIHRyYWlsaW5nIHNl
cGFyYXRvciByYXRoZXIgdGhhbiBhZGRpbmcgYSAiTm8gR3Vlc3NlcyBGb3VuZCIgaXRlbSAobWF0
Y2hlcyBBcHBLaXQpCi0gICAgICAgICAgICAgICAgICAgIGlmIChtaXNzcGVsbGluZykgewotICAg
ICAgICAgICAgICAgICAgICAgICAgYXBwZW5kSXRlbShOb0d1ZXNzZXNJdGVtKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBTdHJpbmcgJmd1ZXNzID0gZ3Vlc3Nlc1tpXTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICghZ3Vlc3MuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ29udGV4dE1lbnVJdGVtIGl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFn
U3BlbGxpbmdHdWVzcywgZ3Vlc3MpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVu
ZEl0ZW0oaXRlbSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYXBwZW5kSXRlbSgqc2VwYXJhdG9ySXRlbSgpKTsg
ICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICBpZiAobWlzc3BlbGxpbmcpIHsKLSAgICAgICAgICAgICAgICAgICAg
YXBwZW5kSXRlbShJZ25vcmVTcGVsbGluZ0l0ZW0pOwotICAgICAgICAgICAgICAgICAgICBhcHBl
bmRJdGVtKExlYXJuU3BlbGxpbmdJdGVtKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgICAgICAgICAgYXBwZW5kSXRlbShJZ25vcmVHcmFtbWFySXRlbSk7Ci0gICAgICAgICAg
ICAgICAgYXBwZW5kSXRlbSgqc2VwYXJhdG9ySXRlbSgpKTsKLSNpZiBQTEFURk9STShNQUMpICYm
ICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9Q
QVJEKQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBJZiB0aGUgc3Ry
aW5nIHdhcyBhdXRvY29ycmVjdGVkLCBnZW5lcmF0ZSBhIGNvbnRleHR1YWwgbWVudSBpdGVtIGFs
bG93aW5nIGl0IHRvIGJlIGNoYW5nZWQgYmFjay4KLSAgICAgICAgICAgICAgICBTdHJpbmcgcmVw
bGFjZWRTdHJpbmcgPSByZXN1bHQucmVwbGFjZWRTdHJpbmcoKTsKLSAgICAgICAgICAgICAgICBp
ZiAoIXJlcGxhY2VkU3RyaW5nLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgICAgICBDb250
ZXh0TWVudUl0ZW0gaXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdDaGFuZ2VCYWNr
LCBjb250ZXh0TWVudUl0ZW1UYWdDaGFuZ2VCYWNrKHJlcGxhY2VkU3RyaW5nKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIGFwcGVuZEl0ZW0oaXRlbSk7Ci0gICAgICAgICAgICAgICAgICAgIGFwcGVu
ZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSk7Ci0gICAgICAgICAgICAgICAgfQotI2VuZGlmCi0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBGcmFtZUxvYWRlciogbG9hZGVyID0gZnJh
bWUtPmxvYWRlcigpOwotICAgICAgICBLVVJMIGxpbmtVUkwgPSByZXN1bHQuYWJzb2x1dGVMaW5r
VVJMKCk7Ci0gICAgICAgIGlmICghbGlua1VSTC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGlm
IChsb2FkZXItPmNhbkhhbmRsZVJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0KGxpbmtVUkwpKSkgewot
ICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oT3BlbkxpbmtJdGVtKTsKLSAgICAgICAgICAgICAg
ICBhcHBlbmRJdGVtKE9wZW5MaW5rSW5OZXdXaW5kb3dJdGVtKTsKLSAgICAgICAgICAgICAgICBh
cHBlbmRJdGVtKERvd25sb2FkRmlsZUl0ZW0pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
YXBwZW5kSXRlbShDb3B5TGlua0l0ZW0pOwotICAgICAgICAgICAgYXBwZW5kSXRlbSgqc2VwYXJh
dG9ySXRlbSgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChyZXN1bHQuaXNTZWxlY3RlZCgp
ICYmICFpblBhc3N3b3JkRmllbGQgJiYgc2VsZWN0aW9uQ29udGFpbnNQb3NzaWJsZVdvcmQoZnJh
bWUpKSB7Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgICAgICAgICAgYXBwZW5kSXRlbShTZWFyY2hT
cG90bGlnaHRJdGVtKTsKLSNlbmRpZgotI2lmICFQTEFURk9STShHVEspCi0gICAgICAgICAgICBh
cHBlbmRJdGVtKFNlYXJjaFdlYkl0ZW0pOwotICAgICAgICAgICAgYXBwZW5kSXRlbSgqc2VwYXJh
dG9ySXRlbSgpKTsKLSNlbmRpZgotICAgICAKLSNpZiBQTEFURk9STShNQUMpCi0gICAgICAgICAg
ICBhcHBlbmRJdGVtKExvb2tJbkRpY3Rpb25hcnlJdGVtKTsKLSAgICAgICAgICAgIGFwcGVuZEl0
ZW0oKnNlcGFyYXRvckl0ZW0oKSk7Ci0jZW5kaWYKLSAgICAgICAgfQotCi0gICAgICAgIGFwcGVu
ZEl0ZW0oQ3V0SXRlbSk7Ci0gICAgICAgIGFwcGVuZEl0ZW0oQ29weUl0ZW0pOwotICAgICAgICBh
cHBlbmRJdGVtKFBhc3RlSXRlbSk7Ci0jaWYgUExBVEZPUk0oR1RLKQotICAgICAgICBhcHBlbmRJ
dGVtKERlbGV0ZUl0ZW0pOwotICAgICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCkpOwot
ICAgICAgICBhcHBlbmRJdGVtKFNlbGVjdEFsbEl0ZW0pOwotI2VuZGlmCi0KLSAgICAgICAgaWYg
KCFpblBhc3N3b3JkRmllbGQpIHsKLSAgICAgICAgICAgIGFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0
ZW0oKSk7Ci0jaWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCi0jaWYgIVBMQVRGT1JNKEdUSykKLSAg
ICAgICAgICAgIENvbnRleHRNZW51SXRlbSBTcGVsbGluZ0FuZEdyYW1tYXJNZW51SXRlbShTdWJt
ZW51VHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU3BlbGxpbmdNZW51LCAKLSAgICAgICAgICAgICAg
ICBjb250ZXh0TWVudUl0ZW1UYWdTcGVsbGluZ01lbnUoKSk7Ci0gICAgICAgICAgICBjcmVhdGVB
bmRBcHBlbmRTcGVsbGluZ0FuZEdyYW1tYXJTdWJNZW51KG1faGl0VGVzdFJlc3VsdCwgU3BlbGxp
bmdBbmRHcmFtbWFyTWVudUl0ZW0pOwotICAgICAgICAgICAgYXBwZW5kSXRlbShTcGVsbGluZ0Fu
ZEdyYW1tYXJNZW51SXRlbSk7Ci0jZW5kaWYKLSNlbHNlCi0gICAgICAgICAgICBDb250ZXh0TWVu
dUl0ZW0gU3BlbGxpbmdNZW51SXRlbShTdWJtZW51VHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU3Bl
bGxpbmdNZW51LCAKLSAgICAgICAgICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdTcGVsbGluZ01l
bnUoKSk7Ci0gICAgICAgICAgICBjcmVhdGVBbmRBcHBlbmRTcGVsbGluZ1N1Yk1lbnUobV9oaXRU
ZXN0UmVzdWx0LCBTcGVsbGluZ01lbnVJdGVtKTsKLSAgICAgICAgICAgIGFwcGVuZEl0ZW0oU3Bl
bGxpbmdNZW51SXRlbSk7Ci0jZW5kaWYKLSNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJV
SUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQotICAgICAg
ICAgICAgQ29udGV4dE1lbnVJdGVtIHN1YnN0aXR1dGlvbnNNZW51SXRlbShTdWJtZW51VHlwZSwg
Q29udGV4dE1lbnVJdGVtVGFnU3Vic3RpdHV0aW9uc01lbnUsIAotICAgICAgICAgICAgICAgIGNv
bnRleHRNZW51SXRlbVRhZ1N1YnN0aXR1dGlvbnNNZW51KCkpOwotICAgICAgICAgICAgY3JlYXRl
QW5kQXBwZW5kU3Vic3RpdHV0aW9uc1N1Yk1lbnUobV9oaXRUZXN0UmVzdWx0LCBzdWJzdGl0dXRp
b25zTWVudUl0ZW0pOwotICAgICAgICAgICAgYXBwZW5kSXRlbShzdWJzdGl0dXRpb25zTWVudUl0
ZW0pOwotICAgICAgICAgICAgQ29udGV4dE1lbnVJdGVtIHRyYW5zZm9ybWF0aW9uc01lbnVJdGVt
KFN1Ym1lbnVUeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdUcmFuc2Zvcm1hdGlvbnNNZW51LCAKLSAg
ICAgICAgICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdUcmFuc2Zvcm1hdGlvbnNNZW51KCkpOwot
ICAgICAgICAgICAgY3JlYXRlQW5kQXBwZW5kVHJhbnNmb3JtYXRpb25zU3ViTWVudShtX2hpdFRl
c3RSZXN1bHQsIHRyYW5zZm9ybWF0aW9uc01lbnVJdGVtKTsKLSAgICAgICAgICAgIGFwcGVuZEl0
ZW0odHJhbnNmb3JtYXRpb25zTWVudUl0ZW0pOwotI2VuZGlmCi0jaWYgUExBVEZPUk0oR1RLKQot
ICAgICAgICAgICAgYm9vbCBzaG91bGRTaG93Rm9udE1lbnUgPSBmcmFtZS0+ZWRpdG9yKCktPmNh
bkVkaXRSaWNobHkoKTsKLSNlbHNlCi0gICAgICAgICAgICBib29sIHNob3VsZFNob3dGb250TWVu
dSA9IHRydWU7Ci0jZW5kaWYKLSAgICAgICAgICAgIGlmIChzaG91bGRTaG93Rm9udE1lbnUpIHsK
LSAgICAgICAgICAgICAgICBDb250ZXh0TWVudUl0ZW0gRm9udE1lbnVJdGVtKFN1Ym1lbnVUeXBl
LCBDb250ZXh0TWVudUl0ZW1UYWdGb250TWVudSwgCi0gICAgICAgICAgICAgICAgICAgIGNvbnRl
eHRNZW51SXRlbVRhZ0ZvbnRNZW51KCkpOwotICAgICAgICAgICAgICAgIGNyZWF0ZUFuZEFwcGVu
ZEZvbnRTdWJNZW51KG1faGl0VGVzdFJlc3VsdCwgRm9udE1lbnVJdGVtKTsKLSAgICAgICAgICAg
ICAgICBhcHBlbmRJdGVtKEZvbnRNZW51SXRlbSk7Ci0gICAgICAgICAgICB9Ci0jaWYgUExBVEZP
Uk0oTUFDKQotICAgICAgICAgICAgQ29udGV4dE1lbnVJdGVtIFNwZWVjaE1lbnVJdGVtKFN1Ym1l
bnVUeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTcGVlY2hNZW51LCBjb250ZXh0TWVudUl0ZW1UYWdT
cGVlY2hNZW51KCkpOwotICAgICAgICAgICAgY3JlYXRlQW5kQXBwZW5kU3BlZWNoU3ViTWVudSht
X2hpdFRlc3RSZXN1bHQsIFNwZWVjaE1lbnVJdGVtKTsKLSAgICAgICAgICAgIGFwcGVuZEl0ZW0o
U3BlZWNoTWVudUl0ZW0pOwotI2VuZGlmCi0jaWYgIVBMQVRGT1JNKEdUSykKLSAgICAgICAgICAg
IENvbnRleHRNZW51SXRlbSBXcml0aW5nRGlyZWN0aW9uTWVudUl0ZW0oU3VibWVudVR5cGUsIENv
bnRleHRNZW51SXRlbVRhZ1dyaXRpbmdEaXJlY3Rpb25NZW51LCAKLSAgICAgICAgICAgICAgICBj
b250ZXh0TWVudUl0ZW1UYWdXcml0aW5nRGlyZWN0aW9uTWVudSgpKTsKLSAgICAgICAgICAgIGNy
ZWF0ZUFuZEFwcGVuZFdyaXRpbmdEaXJlY3Rpb25TdWJNZW51KG1faGl0VGVzdFJlc3VsdCwgV3Jp
dGluZ0RpcmVjdGlvbk1lbnVJdGVtKTsKLSAgICAgICAgICAgIGFwcGVuZEl0ZW0oV3JpdGluZ0Rp
cmVjdGlvbk1lbnVJdGVtKTsKLSAgICAgICAgICAgIGlmIChQYWdlKiBwYWdlID0gZnJhbWUtPnBh
Z2UoKSkgewotICAgICAgICAgICAgICAgIGlmIChTZXR0aW5ncyogc2V0dGluZ3MgPSBwYWdlLT5z
ZXR0aW5ncygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJvb2wgaW5jbHVkZVRleHREaXJlY3Rp
b25TdWJtZW51ID0gc2V0dGluZ3MtPnRleHREaXJlY3Rpb25TdWJtZW51SW5jbHVzaW9uQmVoYXZp
b3IoKSA9PSBUZXh0RGlyZWN0aW9uU3VibWVudUFsd2F5c0luY2x1ZGVkCi0gICAgICAgICAgICAg
ICAgICAgICAgICB8fCAoc2V0dGluZ3MtPnRleHREaXJlY3Rpb25TdWJtZW51SW5jbHVzaW9uQmVo
YXZpb3IoKSA9PSBUZXh0RGlyZWN0aW9uU3VibWVudUF1dG9tYXRpY2FsbHlJbmNsdWRlZCAmJiBm
cmFtZS0+ZWRpdG9yKCktPmhhc0JpZGlTZWxlY3Rpb24oKSk7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChpbmNsdWRlVGV4dERpcmVjdGlvblN1Ym1lbnUpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIENvbnRleHRNZW51SXRlbSBUZXh0RGlyZWN0aW9uTWVudUl0ZW0oU3VibWVudVR5cGUsIENv
bnRleHRNZW51SXRlbVRhZ1RleHREaXJlY3Rpb25NZW51LCAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdUZXh0RGlyZWN0aW9uTWVudSgpKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGNyZWF0ZUFuZEFwcGVuZFRleHREaXJlY3Rpb25TdWJNZW51KG1faGl0
VGVzdFJlc3VsdCwgVGV4dERpcmVjdGlvbk1lbnVJdGVtKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGFwcGVuZEl0ZW0oVGV4dERpcmVjdGlvbk1lbnVJdGVtKTsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSNlbmRpZgotICAgICAgICB9
Ci0gICAgfQotfQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUikKLXZvaWQgQ29udGV4dE1lbnU6OmFk
ZEluc3BlY3RFbGVtZW50SXRlbSgpCi17Ci0gICAgTm9kZSogbm9kZSA9IG1faGl0VGVzdFJlc3Vs
dC5pbm5lck5vblNoYXJlZE5vZGUoKTsKLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybjsK
LQotICAgIEZyYW1lKiBmcmFtZSA9IG5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCk7Ci0gICAgaWYg
KCFmcmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUGFnZSogcGFnZSA9IGZyYW1lLT5wYWdl
KCk7Ci0gICAgaWYgKCFwYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXBhZ2UtPmlu
c3BlY3RvckNvbnRyb2xsZXIoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ29udGV4dE1lbnVJ
dGVtIEluc3BlY3RFbGVtZW50SXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdJbnNw
ZWN0RWxlbWVudCwgY29udGV4dE1lbnVJdGVtVGFnSW5zcGVjdEVsZW1lbnQoKSk7Ci0gICAgYXBw
ZW5kSXRlbSgqc2VwYXJhdG9ySXRlbSgpKTsKLSAgICBhcHBlbmRJdGVtKEluc3BlY3RFbGVtZW50
SXRlbSk7Ci19Ci0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKLQotdm9pZCBDb250ZXh0TWVu
dTo6Y2hlY2tPckVuYWJsZUlmTmVlZGVkKENvbnRleHRNZW51SXRlbSYgaXRlbSkgY29uc3QKLXsK
LSAgICBpZiAoaXRlbS50eXBlKCkgPT0gU2VwYXJhdG9yVHlwZSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIAotICAgIEZyYW1lKiBmcmFtZSA9IG1faGl0VGVzdFJlc3VsdC5pbm5lck5vblNoYXJlZE5v
ZGUoKS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1
cm47Ci0KLSAgICAvLyBDdXN0b20gaXRlbXMgYWxyZWFkeSBoYXZlIHByb3BlciBjaGVja2VkIGFu
ZCBlbmFibGVkIHZhbHVlcy4KLSAgICBpZiAoQ29udGV4dE1lbnVJdGVtQmFzZUN1c3RvbVRhZyA8
PSBpdGVtLmFjdGlvbigpICYmIGl0ZW0uYWN0aW9uKCkgPD0gQ29udGV4dE1lbnVJdGVtTGFzdEN1
c3RvbVRhZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYm9vbCBzaG91bGRFbmFibGUgPSB0cnVl
OwotICAgIGJvb2wgc2hvdWxkQ2hlY2sgPSBmYWxzZTsgCi0KLSAgICBzd2l0Y2ggKGl0ZW0uYWN0
aW9uKCkpIHsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdDaGVja1NwZWxsaW5nOgot
ICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gZnJhbWUtPmVkaXRvcigpLT5jYW5FZGl0KCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdEZWZhdWx0
RGlyZWN0aW9uOgotICAgICAgICAgICAgc2hvdWxkQ2hlY2sgPSBmYWxzZTsKLSAgICAgICAgICAg
IHNob3VsZEVuYWJsZSA9IGZhbHNlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtVGFnTGVmdFRvUmlnaHQ6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJ
dGVtVGFnUmlnaHRUb0xlZnQ6IHsKLSAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwot
ICAgICAgICAgICAgUmVmUHRyPENTU1N0eWxlRGVjbGFyYXRpb24+IHN0eWxlID0gZnJhbWUtPmRv
Y3VtZW50KCktPmNyZWF0ZUNTU1N0eWxlRGVjbGFyYXRpb24oKTsKLSAgICAgICAgICAgIFN0cmlu
ZyBkaXJlY3Rpb24gPSBpdGVtLmFjdGlvbigpID09IENvbnRleHRNZW51SXRlbVRhZ0xlZnRUb1Jp
Z2h0ID8gImx0ciIgOiAicnRsIjsKLSAgICAgICAgICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQ
cm9wZXJ0eURpcmVjdGlvbiwgZGlyZWN0aW9uLCBmYWxzZSwgZWMpOwotICAgICAgICAgICAgc2hv
dWxkQ2hlY2sgPSBmcmFtZS0+ZWRpdG9yKCktPnNlbGVjdGlvbkhhc1N0eWxlKHN0eWxlLmdldCgp
KSAhPSBGYWxzZVRyaVN0YXRlOwotICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gdHJ1ZTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVt
VGFnVGV4dERpcmVjdGlvbkRlZmF1bHQ6IHsKLSAgICAgICAgICAgIEVkaXRvcjo6Q29tbWFuZCBj
b21tYW5kID0gZnJhbWUtPmVkaXRvcigpLT5jb21tYW5kKCJNYWtlVGV4dFdyaXRpbmdEaXJlY3Rp
b25OYXR1cmFsIik7Ci0gICAgICAgICAgICBzaG91bGRDaGVjayA9IGNvbW1hbmQuc3RhdGUoKSA9
PSBUcnVlVHJpU3RhdGU7Ci0gICAgICAgICAgICBzaG91bGRFbmFibGUgPSBjb21tYW5kLmlzRW5h
YmxlZCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBDb250
ZXh0TWVudUl0ZW1UYWdUZXh0RGlyZWN0aW9uTGVmdFRvUmlnaHQ6IHsKLSAgICAgICAgICAgIEVk
aXRvcjo6Q29tbWFuZCBjb21tYW5kID0gZnJhbWUtPmVkaXRvcigpLT5jb21tYW5kKCJNYWtlVGV4
dFdyaXRpbmdEaXJlY3Rpb25MZWZ0VG9SaWdodCIpOwotICAgICAgICAgICAgc2hvdWxkQ2hlY2sg
PSBjb21tYW5kLnN0YXRlKCkgPT0gVHJ1ZVRyaVN0YXRlOwotICAgICAgICAgICAgc2hvdWxkRW5h
YmxlID0gY29tbWFuZC5pc0VuYWJsZWQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnVGV4dERpcmVjdGlvblJpZ2h0VG9MZWZ0
OiB7Ci0gICAgICAgICAgICBFZGl0b3I6OkNvbW1hbmQgY29tbWFuZCA9IGZyYW1lLT5lZGl0b3Io
KS0+Y29tbWFuZCgiTWFrZVRleHRXcml0aW5nRGlyZWN0aW9uUmlnaHRUb0xlZnQiKTsKLSAgICAg
ICAgICAgIHNob3VsZENoZWNrID0gY29tbWFuZC5zdGF0ZSgpID09IFRydWVUcmlTdGF0ZTsKLSAg
ICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGNvbW1hbmQuaXNFbmFibGVkKCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0NvcHk6
Ci0gICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+ZWRpdG9yKCktPmNhbkRIVE1MQ29w
eSgpIHx8IGZyYW1lLT5lZGl0b3IoKS0+Y2FuQ29weSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQ3V0OgotICAgICAgICAgICAgc2hvdWxkRW5h
YmxlID0gZnJhbWUtPmVkaXRvcigpLT5jYW5ESFRNTEN1dCgpIHx8IGZyYW1lLT5lZGl0b3IoKS0+
Y2FuQ3V0KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0
ZW1UYWdJZ25vcmVTcGVsbGluZzoKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdMZWFy
blNwZWxsaW5nOgotICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gZnJhbWUtPnNlbGVjdGlvbigp
LT5pc1JhbmdlKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVu
dUl0ZW1UYWdQYXN0ZToKLSAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGZyYW1lLT5lZGl0b3Io
KS0+Y2FuREhUTUxQYXN0ZSgpIHx8IGZyYW1lLT5lZGl0b3IoKS0+Y2FuUGFzdGUoKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotI2lmIFBMQVRGT1JNKEdUSykKLSAgICAgICAgY2FzZSBDb250ZXh0TWVu
dUl0ZW1UYWdEZWxldGU6Ci0gICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+ZWRpdG9y
KCktPmNhbkRlbGV0ZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29udGV4
dE1lbnVJdGVtVGFnU2VsZWN0QWxsOgotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0lu
cHV0TWV0aG9kczoKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdVbmljb2RlOgotICAg
ICAgICAgICAgc2hvdWxkRW5hYmxlID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotI2VuZGlm
Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnVW5kZXJsaW5lOiB7Ci0gICAgICAgICAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICAgICAgICAgIFJlZlB0cjxDU1NTdHlsZURlY2xh
cmF0aW9uPiBzdHlsZSA9IGZyYW1lLT5kb2N1bWVudCgpLT5jcmVhdGVDU1NTdHlsZURlY2xhcmF0
aW9uKCk7Ci0gICAgICAgICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRU
ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCwgInVuZGVybGluZSIsIGZhbHNlLCBlYyk7Ci0gICAgICAg
ICAgICBzaG91bGRDaGVjayA9IGZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0aW9uSGFzU3R5bGUoc3R5
bGUuZ2V0KCkpICE9IEZhbHNlVHJpU3RhdGU7Ci0gICAgICAgICAgICBzaG91bGRFbmFibGUgPSBm
cmFtZS0+ZWRpdG9yKCktPmNhbkVkaXRSaWNobHkoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnTG9va1VwSW5EaWN0aW9uYXJ5
OgotICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gZnJhbWUtPnNlbGVjdGlvbigpLT5pc1Jhbmdl
KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdD
aGVja0dyYW1tYXJXaXRoU3BlbGxpbmc6Ci0jaWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCi0gICAg
ICAgICAgICBpZiAoZnJhbWUtPmVkaXRvcigpLT5pc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSkK
LSAgICAgICAgICAgICAgICBzaG91bGRDaGVjayA9IHRydWU7Ci0gICAgICAgICAgICBzaG91bGRF
bmFibGUgPSB0cnVlOwotI2VuZGlmCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBD
b250ZXh0TWVudUl0ZW1UYWdJdGFsaWM6IHsKLSAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOwotICAgICAgICAgICAgUmVmUHRyPENTU1N0eWxlRGVjbGFyYXRpb24+IHN0eWxlID0gZnJh
bWUtPmRvY3VtZW50KCktPmNyZWF0ZUNTU1N0eWxlRGVjbGFyYXRpb24oKTsKLSAgICAgICAgICAg
IHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRTdHlsZSwgIml0YWxpYyIsIGZhbHNl
LCBlYyk7Ci0gICAgICAgICAgICBzaG91bGRDaGVjayA9IGZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0
aW9uSGFzU3R5bGUoc3R5bGUuZ2V0KCkpICE9IEZhbHNlVHJpU3RhdGU7Ci0gICAgICAgICAgICBz
aG91bGRFbmFibGUgPSBmcmFtZS0+ZWRpdG9yKCktPmNhbkVkaXRSaWNobHkoKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQm9s
ZDogewotICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgICAgICAgICBSZWZQ
dHI8Q1NTU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+Y3JlYXRl
Q1NTU3R5bGVEZWNsYXJhdGlvbigpOwotICAgICAgICAgICAgc3R5bGUtPnNldFByb3BlcnR5KENT
U1Byb3BlcnR5Rm9udFdlaWdodCwgImJvbGQiLCBmYWxzZSwgZWMpOwotICAgICAgICAgICAgc2hv
dWxkQ2hlY2sgPSBmcmFtZS0+ZWRpdG9yKCktPnNlbGVjdGlvbkhhc1N0eWxlKHN0eWxlLmdldCgp
KSAhPSBGYWxzZVRyaVN0YXRlOwotICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gZnJhbWUtPmVk
aXRvcigpLT5jYW5FZGl0UmljaGx5KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ091dGxpbmU6Ci0gICAgICAgICAgICBzaG91
bGRFbmFibGUgPSBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbnRl
eHRNZW51SXRlbVRhZ1Nob3dTcGVsbGluZ1BhbmVsOgotI2lmbmRlZiBCVUlMRElOR19PTl9USUdF
UgotICAgICAgICAgICAgaWYgKGZyYW1lLT5lZGl0b3IoKS0+c3BlbGxpbmdQYW5lbElzU2hvd2lu
ZygpKQotICAgICAgICAgICAgICAgIGl0ZW0uc2V0VGl0bGUoY29udGV4dE1lbnVJdGVtVGFnU2hv
d1NwZWxsaW5nUGFuZWwoZmFsc2UpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICBpdGVtLnNldFRpdGxlKGNvbnRleHRNZW51SXRlbVRhZ1Nob3dTcGVsbGluZ1BhbmVsKHRydWUp
KTsKLSNlbmRpZgotICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gZnJhbWUtPmVkaXRvcigpLT5j
YW5FZGl0KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0
ZW1UYWdOb0d1ZXNzZXNGb3VuZDoKLSAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGZhbHNlOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQ2hlY2tT
cGVsbGluZ1doaWxlVHlwaW5nOgotICAgICAgICAgICAgc2hvdWxkQ2hlY2sgPSBmcmFtZS0+ZWRp
dG9yKCktPmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSNpZiBQTEFURk9STShNQUMpCi0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFn
U3Vic3RpdHV0aW9uc01lbnU6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnVHJhbnNm
b3JtYXRpb25zTWVudToKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbnRleHRN
ZW51SXRlbVRhZ1Nob3dTdWJzdGl0dXRpb25zOgotI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJ
R0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQotICAgICAgICAgICAgaWYgKGZy
YW1lLT5lZGl0b3IoKS0+c3Vic3RpdHV0aW9uc1BhbmVsSXNTaG93aW5nKCkpCi0gICAgICAgICAg
ICAgICAgaXRlbS5zZXRUaXRsZShjb250ZXh0TWVudUl0ZW1UYWdTaG93U3Vic3RpdHV0aW9ucyhm
YWxzZSkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGl0ZW0uc2V0VGl0bGUo
Y29udGV4dE1lbnVJdGVtVGFnU2hvd1N1YnN0aXR1dGlvbnModHJ1ZSkpOwotICAgICAgICAgICAg
c2hvdWxkRW5hYmxlID0gZnJhbWUtPmVkaXRvcigpLT5jYW5FZGl0KCk7Ci0jZW5kaWYKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ01ha2VVcHBlckNh
c2U6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnTWFrZUxvd2VyQ2FzZToKLSAgICAg
ICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdDYXBpdGFsaXplOgotICAgICAgICBjYXNlIENvbnRl
eHRNZW51SXRlbVRhZ0NoYW5nZUJhY2s6Ci0gICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFt
ZS0+ZWRpdG9yKCktPmNhbkVkaXQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IENvbnRleHRNZW51SXRlbVRhZ0NvcnJlY3RTcGVsbGluZ0F1dG9tYXRpY2FsbHk6Ci0jaWYgIWRl
ZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQp
Ci0gICAgICAgICAgICBzaG91bGRDaGVjayA9IGZyYW1lLT5lZGl0b3IoKS0+aXNBdXRvbWF0aWNT
cGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1NtYXJ0Q29weVBhc3RlOgotI2lmICFkZWZp
bmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQot
ICAgICAgICAgICAgc2hvdWxkQ2hlY2sgPSBmcmFtZS0+ZWRpdG9yKCktPnNtYXJ0SW5zZXJ0RGVs
ZXRlRW5hYmxlZCgpOwotI2VuZGlmCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBD
b250ZXh0TWVudUl0ZW1UYWdTbWFydFF1b3RlczoKLSNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9U
SUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKLSAgICAgICAgICAgIHNob3Vs
ZENoZWNrID0gZnJhbWUtPmVkaXRvcigpLT5pc0F1dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uRW5h
YmxlZCgpOwotI2VuZGlmCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb250ZXh0
TWVudUl0ZW1UYWdTbWFydERhc2hlczoKLSNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikg
JiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKLSAgICAgICAgICAgIHNob3VsZENoZWNr
ID0gZnJhbWUtPmVkaXRvcigpLT5pc0F1dG9tYXRpY0Rhc2hTdWJzdGl0dXRpb25FbmFibGVkKCk7
Ci0jZW5kaWYKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRl
bVRhZ1NtYXJ0TGlua3M6Ci0jaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZp
bmVkKEJVSUxESU5HX09OX0xFT1BBUkQpCi0gICAgICAgICAgICBzaG91bGRDaGVjayA9IGZyYW1l
LT5lZGl0b3IoKS0+aXNBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZCgpOwotI2VuZGlmCi0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdUZXh0UmVw
bGFjZW1lbnQ6Ci0jaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJV
SUxESU5HX09OX0xFT1BBUkQpCi0gICAgICAgICAgICBzaG91bGRDaGVjayA9IGZyYW1lLT5lZGl0
b3IoKS0+aXNBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnRFbmFibGVkKCk7Ci0jZW5kaWYKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1N0b3BTcGVha2lu
ZzoKLSAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGNvbnRyb2xsZXIoKSAmJiBjb250cm9sbGVy
KCktPmNsaWVudCgpICYmIGNvbnRyb2xsZXIoKS0+Y2xpZW50KCktPmlzU3BlYWtpbmcoKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotI2Vsc2UgLy8gUExBVEZPUk0oTUFDKSBlbmRzIGhlcmUKLSAgICAg
ICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTdG9wU3BlYWtpbmc6Ci0gICAgICAgICAgICBicmVh
azsKLSNlbmRpZgotI2lmIFBMQVRGT1JNKEdUSykKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0
ZW1UYWdHb0JhY2s6Ci0gICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+cGFnZSgpICYm
IGZyYW1lLT5wYWdlKCktPmJhY2tGb3J3YXJkKCktPmNhbkdvQmFja09yRm9yd2FyZCgtMSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdHb0Zvcndh
cmQ6Ci0gICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+cGFnZSgpICYmIGZyYW1lLT5w
YWdlKCktPmJhY2tGb3J3YXJkKCktPmNhbkdvQmFja09yRm9yd2FyZCgxKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1N0b3A6Ci0gICAgICAgICAg
ICBzaG91bGRFbmFibGUgPSBmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPmlzTG9h
ZGluZ0luQVBJU2Vuc2UoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbnRl
eHRNZW51SXRlbVRhZ1JlbG9hZDoKLSAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9ICFmcmFtZS0+
bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPmlzTG9hZGluZ0luQVBJU2Vuc2UoKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0ZvbnRNZW51Ogot
ICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gZnJhbWUtPmVkaXRvcigpLT5jYW5FZGl0UmljaGx5
KCk7Ci0gICAgICAgICAgICBicmVhazsKLSNlbHNlCi0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJ
dGVtVGFnR29CYWNrOgotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0dvRm9yd2FyZDoK
LSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTdG9wOgotICAgICAgICBjYXNlIENvbnRl
eHRNZW51SXRlbVRhZ1JlbG9hZDoKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdGb250
TWVudToKLSNlbmRpZgotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ05vQWN0aW9uOgot
ICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5MaW5rSW5OZXdXaW5kb3c6Ci0gICAg
ICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnRG93bmxvYWRMaW5rVG9EaXNrOgotICAgICAgICBj
YXNlIENvbnRleHRNZW51SXRlbVRhZ0NvcHlMaW5rVG9DbGlwYm9hcmQ6Ci0gICAgICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtVGFnT3BlbkltYWdlSW5OZXdXaW5kb3c6Ci0gICAgICAgIGNhc2UgQ29u
dGV4dE1lbnVJdGVtVGFnRG93bmxvYWRJbWFnZVRvRGlzazoKLSAgICAgICAgY2FzZSBDb250ZXh0
TWVudUl0ZW1UYWdDb3B5SW1hZ2VUb0NsaXBib2FyZDoKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5NZWRpYUluTmV3V2luZG93OgotICAgICAg
ICAgICAgaWYgKG1faGl0VGVzdFJlc3VsdC5tZWRpYUlzVmlkZW8oKSkKLSAgICAgICAgICAgICAg
ICBpdGVtLnNldFRpdGxlKGNvbnRleHRNZW51SXRlbVRhZ09wZW5WaWRlb0luTmV3V2luZG93KCkp
OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGl0ZW0uc2V0VGl0bGUoY29udGV4
dE1lbnVJdGVtVGFnT3BlbkF1ZGlvSW5OZXdXaW5kb3coKSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdDb3B5TWVkaWFMaW5rVG9DbGlwYm9hcmQ6
Ci0gICAgICAgICAgICBpZiAobV9oaXRUZXN0UmVzdWx0Lm1lZGlhSXNWaWRlbygpKQotICAgICAg
ICAgICAgICAgIGl0ZW0uc2V0VGl0bGUoY29udGV4dE1lbnVJdGVtVGFnQ29weVZpZGVvTGlua1Rv
Q2xpcGJvYXJkKCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGl0ZW0uc2V0
VGl0bGUoY29udGV4dE1lbnVJdGVtVGFnQ29weUF1ZGlvTGlua1RvQ2xpcGJvYXJkKCkpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnVG9nZ2xlTWVk
aWFDb250cm9sczoKLSAgICAgICAgICAgIHNob3VsZENoZWNrID0gbV9oaXRUZXN0UmVzdWx0Lm1l
ZGlhQ29udHJvbHNFbmFibGVkKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBD
b250ZXh0TWVudUl0ZW1UYWdUb2dnbGVNZWRpYUxvb3A6Ci0gICAgICAgICAgICBzaG91bGRDaGVj
ayA9IG1faGl0VGVzdFJlc3VsdC5tZWRpYUxvb3BFbmFibGVkKCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdFbnRlclZpZGVvRnVsbHNjcmVlbjoK
LSAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IG1faGl0VGVzdFJlc3VsdC5tZWRpYVN1cHBvcnRz
RnVsbHNjcmVlbigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29udGV4dE1l
bnVJdGVtVGFnT3BlbkZyYW1lSW5OZXdXaW5kb3c6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJ
dGVtVGFnU3BlbGxpbmdHdWVzczoKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdPdGhl
cjoKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTZWFyY2hJblNwb3RsaWdodDoKLSAg
ICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTZWFyY2hXZWI6Ci0gICAgICAgIGNhc2UgQ29u
dGV4dE1lbnVJdGVtVGFnT3BlbldpdGhEZWZhdWx0QXBwbGljYXRpb246Ci0gICAgICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtUERGQWN0dWFsU2l6ZToKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0
ZW1QREZab29tSW46Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtUERGWm9vbU91dDoKLSAg
ICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1QREZBdXRvU2l6ZToKLSAgICAgICAgY2FzZSBDb250
ZXh0TWVudUl0ZW1QREZTaW5nbGVQYWdlOgotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVBE
RkZhY2luZ1BhZ2VzOgotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVBERkNvbnRpbnVvdXM6
Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtUERGTmV4dFBhZ2U6Ci0gICAgICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtUERGUHJldmlvdXNQYWdlOgotICAgICAgICBjYXNlIENvbnRleHRNZW51
SXRlbVRhZ09wZW5MaW5rOgotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0lnbm9yZUdy
YW1tYXI6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU3BlbGxpbmdNZW51OgotICAg
ICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1Nob3dGb250czoKLSAgICAgICAgY2FzZSBDb250
ZXh0TWVudUl0ZW1UYWdTdHlsZXM6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU2hv
d0NvbG9yczoKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTcGVlY2hNZW51OgotICAg
ICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1N0YXJ0U3BlYWtpbmc6Ci0gICAgICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtVGFnV3JpdGluZ0RpcmVjdGlvbk1lbnU6Ci0gICAgICAgIGNhc2UgQ29u
dGV4dE1lbnVJdGVtVGFnVGV4dERpcmVjdGlvbk1lbnU6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1l
bnVJdGVtVGFnUERGU2luZ2xlUGFnZVNjcm9sbGluZzoKLSAgICAgICAgY2FzZSBDb250ZXh0TWVu
dUl0ZW1UYWdQREZGYWNpbmdQYWdlc1Njcm9sbGluZzoKLSNpZiBFTkFCTEUoSU5TUEVDVE9SKQot
ICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0luc3BlY3RFbGVtZW50OgotI2VuZGlmCi0g
ICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtQmFzZUN1c3RvbVRhZzoKLSAgICAgICAgY2FzZSBD
b250ZXh0TWVudUl0ZW1DdXN0b21UYWdOb0FjdGlvbjoKLSAgICAgICAgY2FzZSBDb250ZXh0TWVu
dUl0ZW1MYXN0Q3VzdG9tVGFnOgotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbUJhc2VBcHBs
aWNhdGlvblRhZzoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbnRleHRNZW51
SXRlbVRhZ01lZGlhUGxheVBhdXNlOgotICAgICAgICAgICAgaWYgKG1faGl0VGVzdFJlc3VsdC5t
ZWRpYVBsYXlpbmcoKSkKLSAgICAgICAgICAgICAgICBpdGVtLnNldFRpdGxlKGNvbnRleHRNZW51
SXRlbVRhZ01lZGlhUGF1c2UoKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
aXRlbS5zZXRUaXRsZShjb250ZXh0TWVudUl0ZW1UYWdNZWRpYVBsYXkoKSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdNZWRpYU11dGU6Ci0gICAg
ICAgICAgICBzaG91bGRFbmFibGUgPSBtX2hpdFRlc3RSZXN1bHQubWVkaWFIYXNBdWRpbygpOwot
ICAgICAgICAgICAgc2hvdWxkQ2hlY2sgPSBzaG91bGRFbmFibGUgJiYgIG1faGl0VGVzdFJlc3Vs
dC5tZWRpYU11dGVkKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBpdGVtLnNl
dENoZWNrZWQoc2hvdWxkQ2hlY2spOwotICAgIGl0ZW0uc2V0RW5hYmxlZChzaG91bGRFbmFibGUp
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoQ09OVEVY
VF9NRU5VUykKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vQ29udGV4dE1lbnUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL0NvbnRleHRNZW51LmgJKHJldmlzaW9uIDczNDY5KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9Db250ZXh0TWVudS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsy
OSw2IEBACiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAKICNpbmNsdWRlICJDb250ZXh0
TWVudUl0ZW0uaCIKLSNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiUGxhdGZv
cm1NZW51RGVzY3JpcHRpb24uaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2lmIFBM
QVRGT1JNKE1BQykKQEAgLTQ4LDE0ICs0NywxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
Y2xhc3MgQ29udGV4dE1lbnUgOiBwdWJsaWMgTm9uY29weWFibGUKICAgICB7CiAgICAgcHVibGlj
OgotICAgICAgICBDb250ZXh0TWVudShjb25zdCBIaXRUZXN0UmVzdWx0Jik7Ci0gICAgICAgIENv
bnRleHRNZW51KGNvbnN0IEhpdFRlc3RSZXN1bHQmLCBjb25zdCBQbGF0Zm9ybU1lbnVEZXNjcmlw
dGlvbik7CisgICAgICAgIENvbnRleHRNZW51KCk7CisgICAgICAgIENvbnRleHRNZW51KGNvbnN0
IFBsYXRmb3JtTWVudURlc2NyaXB0aW9uKTsKICAgICAgICAgfkNvbnRleHRNZW51KCk7CiAKLSAg
ICAgICAgdm9pZCBwb3B1bGF0ZSgpOwotICAgICAgICB2b2lkIGFkZEluc3BlY3RFbGVtZW50SXRl
bSgpOwotICAgICAgICB2b2lkIGNoZWNrT3JFbmFibGVJZk5lZWRlZChDb250ZXh0TWVudUl0ZW0m
KSBjb25zdDsKLQogICAgICAgICB2b2lkIGluc2VydEl0ZW0odW5zaWduZWQgcG9zaXRpb24sIENv
bnRleHRNZW51SXRlbSYpOwogICAgICAgICB2b2lkIGFwcGVuZEl0ZW0oQ29udGV4dE1lbnVJdGVt
Jik7CiAgICAgICAgIApAQCAtNjQsOSArNTksNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAg
ICAgICAgdW5zaWduZWQgaXRlbUNvdW50KCkgY29uc3Q7CiAKLSAgICAgICAgSGl0VGVzdFJlc3Vs
dCBoaXRUZXN0UmVzdWx0KCkgY29uc3QgeyByZXR1cm4gbV9oaXRUZXN0UmVzdWx0OyB9Ci0gICAg
ICAgIENvbnRleHRNZW51Q29udHJvbGxlciogY29udHJvbGxlcigpIGNvbnN0OwotCiAgICAgICAg
IFBsYXRmb3JtTWVudURlc2NyaXB0aW9uIHBsYXRmb3JtRGVzY3JpcHRpb24oKSBjb25zdDsKICAg
ICAgICAgdm9pZCBzZXRQbGF0Zm9ybURlc2NyaXB0aW9uKFBsYXRmb3JtTWVudURlc2NyaXB0aW9u
KTsKIApAQCAtNzUsNyArNjcsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHN0YXRp
YyBDb250ZXh0TWVudUl0ZW0qIGl0ZW1XaXRoSWQoaW50KTsKICNlbmRpZgogICAgIHByaXZhdGU6
Ci0gICAgICAgIEhpdFRlc3RSZXN1bHQgbV9oaXRUZXN0UmVzdWx0OwogI2lmIFBMQVRGT1JNKE1B
QykKICAgICAgICAgLy8gS2VlcCB0aGlzIGluIHN5bmMgd2l0aCB0aGUgUGxhdGZvcm1NZW51RGVz
Y3JpcHRpb24gdHlwZWRlZgogICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IG1fcGxh
dGZvcm1EZXNjcmlwdGlvbjsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9UZW1wb3Jh
cnlMaW5rU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9U
ZW1wb3JhcnlMaW5rU3R1YnMuY3BwCShyZXZpc2lvbiA3MzQ2OSkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vYW5kcm9pZC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjcs
NyArMTY3LDcgQEAgUGFzdGVib2FyZDo6flBhc3RlYm9hcmQoKQogfQogCiAKLUNvbnRleHRNZW51
OjpDb250ZXh0TWVudShjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQpIDogbV9oaXRUZXN0UmVz
dWx0KHJlc3VsdCkKK0NvbnRleHRNZW51OjpDb250ZXh0TWVudSgpCiB7CiAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vYnJldy9Db250ZXh0TWVudUJyZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vYnJldy9Db250ZXh0TWVudUJyZXcuY3BwCShyZXZpc2lvbiA3MzQ2OSkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vYnJldy9Db250ZXh0TWVudUJyZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwx
NSArMzIsMTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1Db250ZXh0TWVudTo6Q29udGV4
dE1lbnUoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0KQotICAgIDogbV9oaXRUZXN0UmVzdWx0
KHJlc3VsdCkKK0NvbnRleHRNZW51OjpDb250ZXh0TWVudSgpCiB7CiAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotQ29udGV4dE1lbnU6OkNvbnRl
eHRNZW51KGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgUGxhdGZvcm1NZW51RGVz
Y3JpcHRpb24gbWVudSkKLSAgICA6IG1faGl0VGVzdFJlc3VsdChyZXN1bHQpCitDb250ZXh0TWVu
dTo6Q29udGV4dE1lbnUoY29uc3QgUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gbWVudSkKIHsKICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICBub3RJbXBsZW1lbnRlZCgpOwpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9Db250ZXh0TWVudUNocm9taXVtLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NvbnRleHRNZW51Q2hyb21pdW0uY3BwCShy
ZXZpc2lvbiA3MzQ2OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ29udGV4dE1lbnVD
aHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDEzICszNiwxMSBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAvLyBUaGlzIGlzIGEgc3R1YiBpbXBsZW1lbnRhdGlvbiBvZiBXZWJLaXQncyBD
b250ZXh0TWVudSBjbGFzcyB0aGF0IGRvZXMKIC8vIG5vdGhpbmcuCiAKLUNvbnRleHRNZW51OjpD
b250ZXh0TWVudShjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQpCi0gICAgOiBtX2hpdFRlc3RS
ZXN1bHQocmVzdWx0KQorQ29udGV4dE1lbnU6OkNvbnRleHRNZW51KCkKIHsKIH0KIAotQ29udGV4
dE1lbnU6OkNvbnRleHRNZW51KGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgUGxh
dGZvcm1NZW51RGVzY3JpcHRpb24gbWVudSkKLSAgICA6IG1faGl0VGVzdFJlc3VsdChyZXN1bHQp
CitDb250ZXh0TWVudTo6Q29udGV4dE1lbnUoY29uc3QgUGxhdGZvcm1NZW51RGVzY3JpcHRpb24g
bWVudSkKIHsKIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9lZmwvQ29udGV4dE1lbnVFZmwu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZWZsL0NvbnRleHRNZW51RWZsLmNw
cAkocmV2aXNpb24gNzM0NjkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2VmbC9Db250ZXh0TWVudUVm
bC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDE2ICsyOSwxNCBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLUNvbnRleHRNZW51OjpDb250ZXh0TWVudShjb25zdCBIaXRUZXN0UmVzdWx0JiBy
ZXN1bHQpCi0gICAgOiBtX2hpdFRlc3RSZXN1bHQocmVzdWx0KQorQ29udGV4dE1lbnU6OkNvbnRl
eHRNZW51KCkKIHsKICAgICBtX2NvbnRleHRNZW51Q2xpZW50ID0gc3RhdGljX2Nhc3Q8Q29udGV4
dE1lbnVDbGllbnRFZmwqPihjb250cm9sbGVyKCktPmNsaWVudCgpKTsKICAgICBtX3BsYXRmb3Jt
RGVzY3JpcHRpb24gPSBtX2NvbnRleHRNZW51Q2xpZW50LT5jcmVhdGVQbGF0Zm9ybURlc2NyaXB0
aW9uKHRoaXMpOwogfQogCi1Db250ZXh0TWVudTo6Q29udGV4dE1lbnUoY29uc3QgSGl0VGVzdFJl
c3VsdCYgcmVzdWx0LCBjb25zdCBQbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbiBtZW51KQotICAgIDog
bV9oaXRUZXN0UmVzdWx0KHJlc3VsdCkKLSAgICAsIG1fcGxhdGZvcm1EZXNjcmlwdGlvbihtZW51
KQorQ29udGV4dE1lbnU6OkNvbnRleHRNZW51KGNvbnN0IFBsYXRmb3JtTWVudURlc2NyaXB0aW9u
IG1lbnUpCisgICAgOiBtX3BsYXRmb3JtRGVzY3JpcHRpb24obWVudSkKIHsKICAgICBtX2NvbnRl
eHRNZW51Q2xpZW50ID0gc3RhdGljX2Nhc3Q8Q29udGV4dE1lbnVDbGllbnRFZmwqPihjb250cm9s
bGVyKCktPmNsaWVudCgpKTsKIH0KQEAgLTUxLDcgKzQ5LDYgQEAgQ29udGV4dE1lbnU6On5Db250
ZXh0TWVudSgpCiAKIHZvaWQgQ29udGV4dE1lbnU6OmFwcGVuZEl0ZW0oQ29udGV4dE1lbnVJdGVt
JiBpdGVtKQogewotICAgIGNoZWNrT3JFbmFibGVJZk5lZWRlZChpdGVtKTsKICAgICBtX2NvbnRl
eHRNZW51Q2xpZW50LT5hcHBlbmRJdGVtKG1fcGxhdGZvcm1EZXNjcmlwdGlvbiwgaXRlbSk7CiB9
CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZWZsL0NvbnRleHRNZW51SXRlbUVmbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9lZmwvQ29udGV4dE1lbnVJdGVtRWZsLmNwcAko
cmV2aXNpb24gNzM0NjkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2VmbC9Db250ZXh0TWVudUl0ZW1F
ZmwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsOCArMTE2LDcgQEAgdm9pZCBDb250ZXh0TWVu
dUl0ZW06OnNldFN1Yk1lbnUoQ29udGV4dAogICAgICAgICByZXR1cm47CiAKICAgICBtX3BsYXRm
b3JtRGVzY3JpcHRpb24udHlwZSA9IFN1Ym1lbnVUeXBlOwotICAgIG1fcGxhdGZvcm1EZXNjcmlw
dGlvbi5zdWJNZW51ID0gbmV3IENvbnRleHRNZW51KHN1Yk1lbnUtPmhpdFRlc3RSZXN1bHQoKSwK
LSAgICAgICAgICAgIHN1Yk1lbnUtPnJlbGVhc2VQbGF0Zm9ybURlc2NyaXB0aW9uKCkpOworICAg
IG1fcGxhdGZvcm1EZXNjcmlwdGlvbi5zdWJNZW51ID0gbmV3IENvbnRleHRNZW51KHN1Yk1lbnUt
PnJlbGVhc2VQbGF0Zm9ybURlc2NyaXB0aW9uKCkpOwogfQogCiBib29sIENvbnRleHRNZW51SXRl
bTo6Y2hlY2tlZCgpIGNvbnN0CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2d0ay9Db250ZXh0TWVu
dUd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ29udGV4dE1lbnVH
dGsuY3BwCShyZXZpc2lvbiA3MzQ2OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL0NvbnRleHRN
ZW51R3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsOCArMzQsNyBAQCBzdGF0aWMgdm9pZCBt
ZW51SXRlbUFjdGl2YXRlZChHdGtNZW51SXRlCiAgICAgY29udHJvbGxlci0+Y29udGV4dE1lbnVJ
dGVtU2VsZWN0ZWQoJmNvbnRleHRJdGVtKTsKIH0KIAotQ29udGV4dE1lbnU6OkNvbnRleHRNZW51
KGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCkKLSAgICA6IG1faGl0VGVzdFJlc3VsdChyZXN1
bHQpCitDb250ZXh0TWVudTo6Q29udGV4dE1lbnUoKQogewogICAgIG1fcGxhdGZvcm1EZXNjcmlw
dGlvbiA9IEdUS19NRU5VKGd0a19tZW51X25ldygpKTsKIApAQCAtNTEsNyArNTAsNiBAQCBDb250
ZXh0TWVudTo6fkNvbnRleHRNZW51KCkKIHZvaWQgQ29udGV4dE1lbnU6OmFwcGVuZEl0ZW0oQ29u
dGV4dE1lbnVJdGVtJiBpdGVtKQogewogICAgIEFTU0VSVChtX3BsYXRmb3JtRGVzY3JpcHRpb24p
OwotICAgIGNoZWNrT3JFbmFibGVJZk5lZWRlZChpdGVtKTsKIAogICAgIENvbnRleHRNZW51SXRl
bVR5cGUgdHlwZSA9IGl0ZW0udHlwZSgpOwogICAgIEd0a01lbnVJdGVtKiBwbGF0Zm9ybUl0ZW0g
PSBDb250ZXh0TWVudUl0ZW06OmNyZWF0ZU5hdGl2ZU1lbnVJdGVtKGl0ZW0ucmVsZWFzZVBsYXRm
b3JtRGVzY3JpcHRpb24oKSk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0NvbnRleHRN
ZW51SGFpa3UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvQ29udGV4
dE1lbnVIYWlrdS5jcHAJKHJldmlzaW9uIDczNDY5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9oYWlr
dS9Db250ZXh0TWVudUhhaWt1LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUsOSArNzUsOCBAQCBw
cml2YXRlOgogICAgIGludCBtX3Jlc3VsdDsKIH07CiAKLUNvbnRleHRNZW51OjpDb250ZXh0TWVu
dShjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQpCi0gICAgOiBtX2hpdFRlc3RSZXN1bHQocmVz
dWx0KQotICAgICwgbV9wbGF0Zm9ybURlc2NyaXB0aW9uKG5ldyBCTWVudSgiY29udGV4dF9tZW51
IikpCitDb250ZXh0TWVudTo6Q29udGV4dE1lbnUoKQorICAgIDogbV9wbGF0Zm9ybURlc2NyaXB0
aW9uKG5ldyBCTWVudSgiY29udGV4dF9tZW51IikpCiB7CiB9CiAKQEAgLTg4LDggKzg3LDYgQEAg
Q29udGV4dE1lbnU6On5Db250ZXh0TWVudSgpCiAKIHZvaWQgQ29udGV4dE1lbnU6OmFwcGVuZEl0
ZW0oQ29udGV4dE1lbnVJdGVtJiBpdGVtKQogewotICAgIGNoZWNrT3JFbmFibGVJZk5lZWRlZChp
dGVtKTsKLQogICAgIEJNZW51SXRlbSogbWVudUl0ZW0gPSBpdGVtLnJlbGVhc2VQbGF0Zm9ybURl
c2NyaXB0aW9uKCk7CiAgICAgaWYgKG1lbnVJdGVtKQogICAgICAgICBtX3BsYXRmb3JtRGVzY3Jp
cHRpb24tPkFkZEl0ZW0obWVudUl0ZW0pOwpAQCAtMTAyLDggKzk5LDYgQEAgdW5zaWduZWQgQ29u
dGV4dE1lbnU6Oml0ZW1Db3VudCgpIGNvbnN0CiAKIHZvaWQgQ29udGV4dE1lbnU6Omluc2VydEl0
ZW0odW5zaWduZWQgcG9zaXRpb24sIENvbnRleHRNZW51SXRlbSYgaXRlbSkKIHsKLSAgICBjaGVj
a09yRW5hYmxlSWZOZWVkZWQoaXRlbSk7Ci0KICAgICBCTWVudUl0ZW0qIG1lbnVJdGVtID0gaXRl
bS5yZWxlYXNlUGxhdGZvcm1EZXNjcmlwdGlvbigpOwogICAgIGlmIChtZW51SXRlbSkKICAgICAg
ICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9uLT5BZGRJdGVtKG1lbnVJdGVtLCBwb3NpdGlvbik7Cklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL21hYy9Db250ZXh0TWVudU1hYy5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL21hYy9Db250ZXh0TWVudU1hYy5tbQkocmV2aXNpb24gNzM0Njkp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL21hYy9Db250ZXh0TWVudU1hYy5tbQkod29ya2luZyBjb3B5
KQpAQCAtMzAsMTcgKzMwLDE1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ29udGV4dE1l
bnU6OkNvbnRleHRNZW51KGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCkKLSAgICA6IG1faGl0
VGVzdFJlc3VsdChyZXN1bHQpCitDb250ZXh0TWVudTo6Q29udGV4dE1lbnUoKQogewogICAgIE5T
TXV0YWJsZUFycmF5KiBhcnJheSA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdOwogICAg
IG1fcGxhdGZvcm1EZXNjcmlwdGlvbiA9IGFycmF5OwogICAgIFthcnJheSByZWxlYXNlXTsKIH0K
IAotQ29udGV4dE1lbnU6OkNvbnRleHRNZW51KGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwg
Y29uc3QgUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gbWVudSkKLSAgICA6IG1faGl0VGVzdFJlc3Vs
dChyZXN1bHQpCi0gICAgLCBtX3BsYXRmb3JtRGVzY3JpcHRpb24obWVudSkKK0NvbnRleHRNZW51
OjpDb250ZXh0TWVudShjb25zdCBQbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbiBtZW51KQorICAgIDog
bV9wbGF0Zm9ybURlc2NyaXB0aW9uKG1lbnUpCiB7CiB9CiAKQEAgLTUwLDggKzQ4LDYgQEAgQ29u
dGV4dE1lbnU6On5Db250ZXh0TWVudSgpCiAKIHZvaWQgQ29udGV4dE1lbnU6OmFwcGVuZEl0ZW0o
Q29udGV4dE1lbnVJdGVtJiBpdGVtKQogewotICAgIGNoZWNrT3JFbmFibGVJZk5lZWRlZChpdGVt
KTsKLQogICAgIE5TTWVudUl0ZW0qIHBsYXRmb3JtSXRlbSA9IGl0ZW0ucmVsZWFzZVBsYXRmb3Jt
RGVzY3JpcHRpb24oKTsKIAogICAgIFttX3BsYXRmb3JtRGVzY3JpcHRpb24uZ2V0KCkgYWRkT2Jq
ZWN0OnBsYXRmb3JtSXRlbV07CkBAIC02MCw4ICs1Niw2IEBAIHZvaWQgQ29udGV4dE1lbnU6OmFw
cGVuZEl0ZW0oQ29udGV4dE1lbnUKIAogdm9pZCBDb250ZXh0TWVudTo6aW5zZXJ0SXRlbSh1bnNp
Z25lZCBwb3NpdGlvbiwgQ29udGV4dE1lbnVJdGVtJiBpdGVtKQogewotICAgIGNoZWNrT3JFbmFi
bGVJZk5lZWRlZChpdGVtKTsKLQogICAgIE5TTWVudUl0ZW0qIHBsYXRmb3JtSXRlbSA9IGl0ZW0u
cmVsZWFzZVBsYXRmb3JtRGVzY3JpcHRpb24oKTsKIAogICAgIFttX3BsYXRmb3JtRGVzY3JpcHRp
b24uZ2V0KCkgaW5zZXJ0T2JqZWN0OnBsYXRmb3JtSXRlbSBhdEluZGV4OnBvc2l0aW9uXTsKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vcXQvQ29udGV4dE1lbnVRdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9xdC9Db250ZXh0TWVudVF0LmNwcAkocmV2aXNpb24gNzM0NjkpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL3F0L0NvbnRleHRNZW51UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNSw4ICszNSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ29udGV4dE1lbnU6OkNv
bnRleHRNZW51KGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCkKLSAgICA6IG1faGl0VGVzdFJl
c3VsdChyZXN1bHQpCitDb250ZXh0TWVudTo6Q29udGV4dE1lbnUoKQogewogfQogCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL3dpbi9Db250ZXh0TWVudVdpbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS93aW4vQ29udGV4dE1lbnVXaW4uY3BwCShyZXZpc2lvbiA3MzQ2OSkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vd2luL0NvbnRleHRNZW51V2luLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDMsOSArNDMsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNvbnRleHRNZW51OjpD
b250ZXh0TWVudShjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQpCi0gICAgOiBtX2hpdFRlc3RS
ZXN1bHQocmVzdWx0KQotICAgICwgbV9wbGF0Zm9ybURlc2NyaXB0aW9uKDApCitDb250ZXh0TWVu
dTo6Q29udGV4dE1lbnUoKQorICAgIDogbV9wbGF0Zm9ybURlc2NyaXB0aW9uKDApCiAjaWYgT1Mo
V0lOQ0UpCiAgICAgLCBtX2l0ZW1Db3VudCgwKQogI2VuZGlmCkBAIC01Myw5ICs1Miw4IEBAIENv
bnRleHRNZW51OjpDb250ZXh0TWVudShjb25zdCBIaXRUZXN0UmUKICAgICBzZXRQbGF0Zm9ybURl
c2NyaXB0aW9uKDo6Q3JlYXRlUG9wdXBNZW51KCkpOwogfQogCi1Db250ZXh0TWVudTo6Q29udGV4
dE1lbnUoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBQbGF0Zm9ybU1lbnVEZXNj
cmlwdGlvbiBtZW51KQotICAgIDogbV9oaXRUZXN0UmVzdWx0KHJlc3VsdCkKLSAgICAsIG1fcGxh
dGZvcm1EZXNjcmlwdGlvbigwKQorQ29udGV4dE1lbnU6OkNvbnRleHRNZW51KGNvbnN0IFBsYXRm
b3JtTWVudURlc2NyaXB0aW9uIG1lbnUpCisgICAgOiBtX3BsYXRmb3JtRGVzY3JpcHRpb24oMCkK
ICNpZiBPUyhXSU5DRSkKICAgICAsIG1faXRlbUNvdW50KDApCiAjZW5kaWYKQEAgLTExOCw4ICsx
MTYsNiBAQCB2b2lkIENvbnRleHRNZW51OjppbnNlcnRJdGVtKHVuc2lnbmVkIGluCiAgICAgaWYg
KCFtX3BsYXRmb3JtRGVzY3JpcHRpb24pCiAgICAgICAgIHJldHVybjsKIAotICAgIGNoZWNrT3JF
bmFibGVJZk5lZWRlZChpdGVtKTsKLQogI2lmIE9TKFdJTkNFKQogICAgIGlmIChpbnNlcnRNZW51
SXRlbShtX3BsYXRmb3JtRGVzY3JpcHRpb24sIHBvc2l0aW9uLCBpdGVtKSkKICAgICAgICAgKytt
X2l0ZW1Db3VudDsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vd3gvQ29udGV4dE1lbnVXeC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS93eC9Db250ZXh0TWVudVd4LmNwcAkocmV2
aXNpb24gNzM0NjkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3d4L0NvbnRleHRNZW51V3guY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIENvbnRleHRNZW51SXRlbSogQ29udGV4dE1l
bnU6Oml0ZW1XaXRoSWQKICAgICByZXR1cm4gbmV3IENvbnRleHRNZW51SXRlbShBY3Rpb25UeXBl
LCBzX2l0ZW1BY3Rpb25zLmdldChpZCksICIiKTsKIH0KIAotQ29udGV4dE1lbnU6OkNvbnRleHRN
ZW51KGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCkgOiBtX2hpdFRlc3RSZXN1bHQocmVzdWx0
KQorQ29udGV4dE1lbnU6OkNvbnRleHRNZW51KCkKIHsKICAgICBtX3BsYXRmb3JtRGVzY3JpcHRp
b24gPSBuZXcgd3hNZW51KDApOwogfQpAQCAtNTcsOCArNTcsNiBAQCB2b2lkIENvbnRleHRNZW51
OjphcHBlbmRJdGVtKENvbnRleHRNZW51CiB7CiAgICAgaWYgKCFtX3BsYXRmb3JtRGVzY3JpcHRp
b24pCiAgICAgICAgIHJldHVybjsKLSAgICAKLSAgICBjaGVja09yRW5hYmxlSWZOZWVkZWQoaXRl
bSk7CiAgICAgICAgIAogICAgIFBsYXRmb3JtTWVudUl0ZW1EZXNjcmlwdGlvbiBpdGVtRGVzY3Jp
cHRpb24gPSBpdGVtLnJlbGVhc2VQbGF0Zm9ybURlc2NyaXB0aW9uKCk7ICAgIAogICAgIHd4SXRl
bUtpbmQgbWVudUtpbmRXeCA9ICggaXRlbURlc2NyaXB0aW9uLnR5cGUgPT0gQ2hlY2thYmxlQWN0
aW9uVHlwZSApID8gd3hJVEVNX0NIRUNLIDogd3hJVEVNX05PUk1BTDsKSW5kZXg6IFdlYkNvcmUv
cmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL0hpdFRlc3RSZXN1bHQuY3BwCShyZXZpc2lvbiA3MzQ2OSkKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL0hpdFRlc3RSZXN1bHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCwxNiBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKK0hpdFRl
c3RSZXN1bHQ6OkhpdFRlc3RSZXN1bHQoKQorICAgIDogbV9pc092ZXJXaWRnZXQoZmFsc2UpCisg
ICAgLCBtX2lzUmVjdEJhc2VkKGZhbHNlKQorICAgICwgbV90b3BQYWRkaW5nKDApCisgICAgLCBt
X3JpZ2h0UGFkZGluZygwKQorICAgICwgbV9ib3R0b21QYWRkaW5nKDApCisgICAgLCBtX2xlZnRQ
YWRkaW5nKDApCit7Cit9CisKIEhpdFRlc3RSZXN1bHQ6OkhpdFRlc3RSZXN1bHQoY29uc3QgSW50
UG9pbnQmIHBvaW50KQogICAgIDogbV9wb2ludChwb2ludCkKICAgICAsIG1faXNPdmVyV2lkZ2V0
KGZhbHNlKQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuaAkocmV2aXNpb24gNzM0Njkp
CisrKyBXZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTQzLDYgKzQzLDcgQEAgY2xhc3MgU2Nyb2xsYmFyOwogCiBjbGFzcyBIaXRUZXN0UmVzdWx0IHsK
IHB1YmxpYzoKKyAgICBIaXRUZXN0UmVzdWx0KCk7CiAgICAgSGl0VGVzdFJlc3VsdChjb25zdCBJ
bnRQb2ludCYpOwogICAgIC8vIFBhc3Mgbm9uLW5lZ2F0aXZlIHBhZGRpbmcgdmFsdWVzIHRvIHBl
cmZvcm0gYSByZWN0LWJhc2VkIGhpdCB0ZXN0LgogICAgIEhpdFRlc3RSZXN1bHQoY29uc3QgSW50
UG9pbnQmIGNlbnRlclBvaW50LCB1bnNpZ25lZCB0b3BQYWRkaW5nLCB1bnNpZ25lZCByaWdodFBh
ZGRpbmcsIHVuc2lnbmVkIGJvdHRvbVBhZGRpbmcsIHVuc2lnbmVkIGxlZnRQYWRkaW5nKTsKSW5k
ZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9nCShy
ZXZpc2lvbiA3MzQ2OSkKKysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTkgQEAKKzIwMTAtMTItMDcgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBw
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IExheWVyaW5nIFZpb2xhdGlvbiBpbiBDb250ZXh0TWVudSAtIG1lbWJlciB2YXJpYWJsZSBvZiB0
eXBlIEhpdFRlc3RSZXN1bHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTUwNTg2CisgICAgICAgIAorICAgICAgICBVcGRhdGUgdXNlcnMgb2YgQ29udGV4
dE1lbnUgYW5kIENvbnRleHRNZW51Q29udHJvbGxlciB0byBtYXRjaCB3aGVyZSB0aGUgbmV3IGZ1
bmN0aW9ucyAKKyAgICAgICAgYXJlIGxvY2F0ZWQuCisKKyAgICAgICAgKiBTaGFyZWQvV2ViQ29u
dGV4dE1lbnVJdGVtRGF0YS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHRNZW51SXRl
bURhdGE6OldlYkNvbnRleHRNZW51SXRlbURhdGEpOiBSZW1vdmUgdGhlIGNhbGwgdG8gY2hlY2tP
ckVuYWJsZUl0ZW0sIHRoYXQgY2FsbCB3aWxsIGJlIG1hZGUgd2hlbgorICAgICAgICAgICAgdGhl
IENvbnRleHRNZW51SXRlbSBpcyBhZGRlZCB0byB0aGUgQ29udGV4dE1lbnUgdGhyb3VnaCB0aGUg
Q29udGV4dE1lbnVDb250cm9sbGVyLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJD
b250ZXh0TWVudS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHRNZW51OjpzaG93KToK
KwogMjAxMC0xMi0wNyAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCkluZGV4OiBXZWJLaXQyL1NoYXJlZC9XZWJD
b250ZXh0TWVudUl0ZW1EYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1NoYXJlZC9XZWJD
b250ZXh0TWVudUl0ZW1EYXRhLmNwcAkocmV2aXNpb24gNzM0NjkpCisrKyBXZWJLaXQyL1NoYXJl
ZC9XZWJDb250ZXh0TWVudUl0ZW1EYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsOCArNzMs
NiBAQCBXZWJDb250ZXh0TWVudUl0ZW1EYXRhOjpXZWJDb250ZXh0TWVudUl0CiAgICAgICAgIG1f
c3VibWVudSA9IGtpdEl0ZW1zKGNvcmVTdWJtZW51LCBtZW51KTsKICAgICB9CiAgICAgCi0gICAg
bWVudS0+Y2hlY2tPckVuYWJsZUlmTmVlZGVkKGl0ZW0pOwotICAgIAogICAgIG1fZW5hYmxlZCA9
IGl0ZW0uZW5hYmxlZCgpOwogICAgIG1fY2hlY2tlZCA9IGl0ZW0uY2hlY2tlZCgpOwogfQpJbmRl
eDogV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQ29udGV4dE1lbnUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkNvbnRleHRNZW51LmNwcAkocmV2
aXNpb24gNzM0NjkpCisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJDb250ZXh0TWVu
dS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDEwICs0NywxMyBAQCBXZWJDb250ZXh0TWVudTo6
fldlYkNvbnRleHRNZW51KCkKIAogdm9pZCBXZWJDb250ZXh0TWVudTo6c2hvdygpCiB7Ci0gICAg
Q29udGV4dE1lbnUqIG1lbnUgPSBtX3BhZ2UtPmNvcmVQYWdlKCktPmNvbnRleHRNZW51Q29udHJv
bGxlcigpLT5jb250ZXh0TWVudSgpOworICAgIENvbnRleHRNZW51Q29udHJvbGxlciogY29udHJv
bGxlciA9IG1fcGFnZS0+Y29yZVBhZ2UoKS0+Y29udGV4dE1lbnVDb250cm9sbGVyKCk7CisgICAg
aWYgKCFjb250cm9sbGVyKQorICAgICAgICByZXR1cm47CisgICAgQ29udGV4dE1lbnUqIG1lbnUg
PSBjb250cm9sbGVyLT5jb250ZXh0TWVudSgpOwogICAgIGlmICghbWVudSkKICAgICAgICAgcmV0
dXJuOwotICAgIE5vZGUqIG5vZGUgPSBtZW51LT5oaXRUZXN0UmVzdWx0KCkuaW5uZXJOb25TaGFy
ZWROb2RlKCk7CisgICAgTm9kZSogbm9kZSA9IGNvbnRyb2xsZXItPmhpdFRlc3RSZXN1bHQoKS5p
bm5lck5vblNoYXJlZE5vZGUoKTsKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybjsKICAg
ICBGcmFtZSogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpOwpAQCAtNjUsMTIgKzY4
LDEyIEBAIHZvaWQgV2ViQ29udGV4dE1lbnU6OnNob3coKQogICAgIFZlY3RvcjxXZWJDb250ZXh0
TWVudUl0ZW1EYXRhPiBwcm9wb3NlZE1lbnUgPSBraXRJdGVtcyhjb3JlSXRlbXMsIG1lbnUpOwog
ICAgIFZlY3RvcjxXZWJDb250ZXh0TWVudUl0ZW1EYXRhPiBuZXdNZW51OwogICAgIFJlZlB0cjxB
UElPYmplY3Q+IHVzZXJEYXRhOwotICAgIFJlZlB0cjxJbmplY3RlZEJ1bmRsZUhpdFRlc3RSZXN1
bHQ+IGhpdFRlc3RSZXN1bHQgPSBJbmplY3RlZEJ1bmRsZUhpdFRlc3RSZXN1bHQ6OmNyZWF0ZSht
ZW51LT5oaXRUZXN0UmVzdWx0KCkpOworICAgIFJlZlB0cjxJbmplY3RlZEJ1bmRsZUhpdFRlc3RS
ZXN1bHQ+IGhpdFRlc3RSZXN1bHQgPSBJbmplY3RlZEJ1bmRsZUhpdFRlc3RSZXN1bHQ6OmNyZWF0
ZShjb250cm9sbGVyLT5oaXRUZXN0UmVzdWx0KCkpOwogICAgIGlmIChtX3BhZ2UtPmluamVjdGVk
QnVuZGxlQ29udGV4dE1lbnVDbGllbnQoKS5nZXRDdXN0b21NZW51RnJvbURlZmF1bHRJdGVtcyht
X3BhZ2UsIGhpdFRlc3RSZXN1bHQuZ2V0KCksIHByb3Bvc2VkTWVudSwgbmV3TWVudSwgdXNlckRh
dGEpKQogICAgICAgICBwcm9wb3NlZE1lbnUgPSBuZXdNZW51OwogCiAgICAgLy8gTm90aWZ5IHRo
ZSBVSVByb2Nlc3MuCi0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNo
b3dDb250ZXh0TWVudSh2aWV3LT5jb250ZW50c1RvV2luZG93KG1lbnUtPmhpdFRlc3RSZXN1bHQo
KS5wb2ludCgpKSwgcHJvcG9zZWRNZW51LCBJbmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdlRW5jb2Rl
cih1c2VyRGF0YS5nZXQoKSkpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6U2hvd0NvbnRleHRNZW51KHZpZXctPmNvbnRlbnRzVG9XaW5kb3coY29udHJvbGxlci0+
aGl0VGVzdFJlc3VsdCgpLnBvaW50KCkpLCBwcm9wb3NlZE1lbnUsIEluamVjdGVkQnVuZGxlVXNl
ck1lc3NhZ2VFbmNvZGVyKHVzZXJEYXRhLmdldCgpKSkpOwogfQogCiB2b2lkIFdlYkNvbnRleHRN
ZW51OjppdGVtU2VsZWN0ZWQoY29uc3QgV2ViQ29udGV4dE1lbnVJdGVtRGF0YSYgaXRlbSkKSW5k
ZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNzM0ODcpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTAtMTItMDcgIEJyaWFuIFdl
aW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIExheWVyaW5nIFZpb2xhdGlvbiBpbiBDb250ZXh0TWVu
dSAtIG1lbWJlciB2YXJpYWJsZSBvZiB0eXBlIEhpdFRlc3RSZXN1bHQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUwNTg2CisgICAgICAgIAorICAgICAg
ICBVcGRhdGUgdXNlcnMgb2YgQ29udGV4dE1lbnUgYW5kIENvbnRleHRNZW51Q29udHJvbGxlciB0
byBtYXRjaCB3aGVyZSB0aGUgbmV3IGZ1bmN0aW9ucyAKKyAgICAgICAgYXJlIGxvY2F0ZWQuCisK
KyAgICAgICAgKiBzcmMvQ29udGV4dE1lbnVDbGllbnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6c2VsZWN0TWlzc3BlbGxlZFdvcmQpOgorICAgICAgICAoV2ViS2l0OjpDb250ZXh0TWVudUNs
aWVudEltcGw6OmdldEN1c3RvbU1lbnVGcm9tRGVmYXVsdEl0ZW1zKToKKwogMjAxMC0xMi0wNiAg
RGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2Ft
IFdlaW5pZy4KSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvQ29udGV4dE1lbnVDbGllbnRJbXBs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL0NvbnRleHRNZW51Q2xpZW50
SW1wbC5jcHAJKHJldmlzaW9uIDczNDY5KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9Db250ZXh0
TWVudUNsaWVudEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5j
bHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgogI2luY2x1ZGUgIkNTU1N0eWxlRGVjbGFyYXRpb24u
aCIKICNpbmNsdWRlICJDb250ZXh0TWVudS5oIgorI2luY2x1ZGUgIkNvbnRleHRNZW51Q29udHJv
bGxlci5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIu
aCIKICNpbmNsdWRlICJFZGl0b3IuaCIKQEAgLTQ1LDYgKzQ2LDcgQEAKICNpbmNsdWRlICJIVE1M
TmFtZXMuaCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiTWVkaWFFcnJvci5oIgorI2lu
Y2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlJl
bmRlcldpZGdldC5oIgogI2luY2x1ZGUgIlRleHRCcmVha0l0ZXJhdG9yLmgiCkBAIC0xMTAsNyAr
MTEyLDcgQEAgc3RhdGljIFN0cmluZyBzZWxlY3RNaXNzcGVsbGVkV29yZChjb25zdAogCiAgICAg
Ly8gU2VsZWN0aW9uIGlzIGVtcHR5LCBzbyBjaGFuZ2UgdGhlIHNlbGVjdGlvbiB0byB0aGUgd29y
ZCB1bmRlciB0aGUgY3Vyc29yLgogICAgIEhpdFRlc3RSZXN1bHQgaGl0VGVzdFJlc3VsdCA9IHNl
bGVjdGVkRnJhbWUtPmV2ZW50SGFuZGxlcigpLT4KLSAgICAgICAgaGl0VGVzdFJlc3VsdEF0UG9p
bnQoZGVmYXVsdE1lbnUtPmhpdFRlc3RSZXN1bHQoKS5wb2ludCgpLCB0cnVlKTsKKyAgICAgICAg
aGl0VGVzdFJlc3VsdEF0UG9pbnQobV93ZWJWaWV3LT5wYWdlKCktPmNvbnRleHRNZW51Q29udHJv
bGxlcigpLT5oaXRUZXN0UmVzdWx0KCkucG9pbnQoKSwgdHJ1ZSk7CiAgICAgTm9kZSogaW5uZXJO
b2RlID0gaGl0VGVzdFJlc3VsdC5pbm5lck5vZGUoKTsKICAgICBWaXNpYmxlUG9zaXRpb24gcG9z
KGlubmVyTm9kZS0+cmVuZGVyZXIoKS0+cG9zaXRpb25Gb3JQb2ludCgKICAgICAgICAgaGl0VGVz
dFJlc3VsdC5sb2NhbFBvaW50KCkpKTsKQEAgLTE0NCw3ICsxNDYsNyBAQCBQbGF0Zm9ybU1lbnVE
ZXNjcmlwdGlvbiBDb250ZXh0TWVudUNsaWVuCiAgICAgaWYgKCFtX3dlYlZpZXctPmNvbnRleHRN
ZW51QWxsb3dlZCgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIEhpdFRlc3RSZXN1bHQgciA9
IGRlZmF1bHRNZW51LT5oaXRUZXN0UmVzdWx0KCk7CisgICAgSGl0VGVzdFJlc3VsdCByID0gbV93
ZWJWaWV3LT5wYWdlKCktPmNvbnRleHRNZW51Q29udHJvbGxlcigpLT5oaXRUZXN0UmVzdWx0KCk7
CiAgICAgRnJhbWUqIHNlbGVjdGVkRnJhbWUgPSByLmlubmVyTm9uU2hhcmVkTm9kZSgpLT5kb2N1
bWVudCgpLT5mcmFtZSgpOwogCiAgICAgV2ViQ29udGV4dE1lbnVEYXRhIGRhdGE7CkluZGV4OiBX
ZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL0NoYW5nZUxvZwko
cmV2aXNpb24gNzM0NzgpCisrKyBXZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE5IEBACisyMDEwLTEyLTA3ICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWlu
QGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBMYXllcmluZyBWaW9sYXRpb24gaW4gQ29udGV4dE1lbnUgLSBtZW1iZXIgdmFyaWFibGUg
b2YgdHlwZSBIaXRUZXN0UmVzdWx0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD01MDU4NgorICAgICAgICAKKyAgICAgICAgVXBkYXRlIHVzZXJzIG9mIENv
bnRleHRNZW51IGFuZCBDb250ZXh0TWVudUNvbnRyb2xsZXIgdG8gbWF0Y2ggd2hlcmUgdGhlIG5l
dyBmdW5jdGlvbnMgCisgICAgICAgIGFyZSBsb2NhdGVkLgorCisgICAgICAgICogV2ViQ29yZVN1
cHBvcnQvV2ViQ29udGV4dE1lbnVDbGllbnQubW06CisgICAgICAgIChXZWJDb250ZXh0TWVudUNs
aWVudDo6Z2V0Q3VzdG9tTWVudUZyb21EZWZhdWx0SXRlbXMpOgorICAgICAgICAoV2ViQ29udGV4
dE1lbnVDbGllbnQ6OmNvbnRleHRNZW51SXRlbVNlbGVjdGVkKToKKyAgICAgICAgKiBXZWJWaWV3
L1dlYkhUTUxWaWV3Lm1tOgorICAgICAgICAoLVtXZWJNZW51VGFyZ2V0IHZhbGlkYXRlTWVudUl0
ZW06XSk6CisKIDIwMTAtMTItMDcgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUu
Y29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEpvaG4gU3VsbGl2YW4uCkluZGV4OiBXZWJLaXQv
bWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNvbnRleHRNZW51Q2xpZW50Lm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ29udGV4dE1lbnVDbGllbnQubW0JKHJldmlz
aW9uIDczNDY5KQorKysgV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDb250ZXh0TWVudUNs
aWVudC5tbQkod29ya2luZyBjb3B5KQpAQCAtNDIsOCArNDIsMTAgQEAKICNpbXBvcnQgIldlYlZp
ZXdGYWN0b3J5LmgiCiAjaW1wb3J0ICJXZWJWaWV3SW50ZXJuYWwuaCIKICNpbXBvcnQgPFdlYkNv
cmUvQ29udGV4dE1lbnUuaD4KKyNpbXBvcnQgPFdlYkNvcmUvQ29udGV4dE1lbnVDb250cm9sbGVy
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0tVUkwuaD4KICNpbXBvcnQgPFdlYkNvcmUvTG9jYWxpemVk
U3RyaW5ncy5oPgorI2ltcG9ydCA8V2ViQ29yZS9QYWdlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1J1
bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5oPgogI2ltcG9ydCA8V2ViS2l0L0RPTVByaXZhdGUuaD4K
IApAQCAtMjc4LDcgKzI4MCw3IEBAIE5TTXV0YWJsZUFycmF5KiBXZWJDb250ZXh0TWVudUNsaWVu
dDo6Z2UKICAgICBpZiAoIVtkZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6c2VsZWN0b3JdKQog
ICAgICAgICByZXR1cm4gZGVmYXVsdE1lbnUtPnBsYXRmb3JtRGVzY3JpcHRpb24oKTsKIAotICAg
IE5TRGljdGlvbmFyeSAqZWxlbWVudCA9IFtbW1dlYkVsZW1lbnREaWN0aW9uYXJ5IGFsbG9jXSBp
bml0V2l0aEhpdFRlc3RSZXN1bHQ6ZGVmYXVsdE1lbnUtPmhpdFRlc3RSZXN1bHQoKV0gYXV0b3Jl
bGVhc2VdOworICAgIE5TRGljdGlvbmFyeSAqZWxlbWVudCA9IFtbW1dlYkVsZW1lbnREaWN0aW9u
YXJ5IGFsbG9jXSBpbml0V2l0aEhpdFRlc3RSZXN1bHQ6W21fd2ViVmlldyBwYWdlXS0+Y29udGV4
dE1lbnVDb250cm9sbGVyKCktPmhpdFRlc3RSZXN1bHQoKV0gYXV0b3JlbGVhc2VdOwogCiAgICAg
Qk9PTCBwcmVWZXJzaW9uM0NsaWVudCA9IGlzUHJlVmVyc2lvbjNDbGllbnQoKTsKICAgICBpZiAo
cHJlVmVyc2lvbjNDbGllbnQpIHsKQEAgLTMwOCw3ICszMTAsNyBAQCB2b2lkIFdlYkNvbnRleHRN
ZW51Q2xpZW50Ojpjb250ZXh0TWVudUl0CiAgICAgaWQgZGVsZWdhdGUgPSBbbV93ZWJWaWV3IFVJ
RGVsZWdhdGVdOwogICAgIFNFTCBzZWxlY3RvciA9IEBzZWxlY3Rvcih3ZWJWaWV3OmNvbnRleHRN
ZW51SXRlbVNlbGVjdGVkOmZvckVsZW1lbnQ6KTsKICAgICBpZiAoW2RlbGVnYXRlIHJlc3BvbmRz
VG9TZWxlY3RvcjpzZWxlY3Rvcl0pIHsKLSAgICAgICAgTlNEaWN0aW9uYXJ5ICplbGVtZW50ID0g
W1tXZWJFbGVtZW50RGljdGlvbmFyeSBhbGxvY10gaW5pdFdpdGhIaXRUZXN0UmVzdWx0OnBhcmVu
dE1lbnUtPmhpdFRlc3RSZXN1bHQoKV07CisgICAgICAgIE5TRGljdGlvbmFyeSAqZWxlbWVudCA9
IFtbV2ViRWxlbWVudERpY3Rpb25hcnkgYWxsb2NdIGluaXRXaXRoSGl0VGVzdFJlc3VsdDpbbV93
ZWJWaWV3IHBhZ2VdLT5jb250ZXh0TWVudUNvbnRyb2xsZXIoKS0+aGl0VGVzdFJlc3VsdCgpXTsK
ICAgICAgICAgTlNNZW51SXRlbSAqcGxhdGZvcm1JdGVtID0gaXRlbS0+cmVsZWFzZVBsYXRmb3Jt
RGVzY3JpcHRpb24oKTsKIAogICAgICAgICBDYWxsVUlEZWxlZ2F0ZShtX3dlYlZpZXcsIHNlbGVj
dG9yLCBwbGF0Zm9ybUl0ZW0sIGVsZW1lbnQpOwpJbmRleDogV2ViS2l0L21hYy9XZWJWaWV3L1dl
YkhUTUxWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmll
dy5tbQkocmV2aXNpb24gNzM0NjkpCisrKyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTE3MCw3ICsxNzAsNyBAQCAtIChCT09MKXZhbGlkYXRlTWVu
dUl0ZW06KE5TTWVudUl0ZW0gKilpCiB7CiAgICAgV2ViQ29yZTo6Q29udGV4dE1lbnVJdGVtIGNv
cmVJdGVtKGl0ZW0pOwogICAgIEFTU0VSVChfbWVudUNvbnRyb2xsZXItPmNvbnRleHRNZW51KCkp
OwotICAgIF9tZW51Q29udHJvbGxlci0+Y29udGV4dE1lbnUoKS0+Y2hlY2tPckVuYWJsZUlmTmVl
ZGVkKGNvcmVJdGVtKTsKKyAgICBfbWVudUNvbnRyb2xsZXItPmNoZWNrT3JFbmFibGVJZk5lZWRl
ZChjb3JlSXRlbSk7CiAgICAgcmV0dXJuIGNvcmVJdGVtLmVuYWJsZWQoKTsKIH0KIApJbmRleDog
V2ViS2l0L3F0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvQ2hhbmdlTG9nCShy
ZXZpc2lvbiA3MzQ2OSkKKysrIFdlYktpdC9xdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxNyBAQAorMjAxMC0xMi0wNyAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBh
cHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgTGF5ZXJpbmcgVmlvbGF0aW9uIGluIENvbnRleHRNZW51IC0gbWVtYmVyIHZhcmlhYmxlIG9m
IHR5cGUgSGl0VGVzdFJlc3VsdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NTA1ODYKKyAgICAgICAgCisgICAgICAgIFVwZGF0ZSB1c2VycyBvZiBDb250
ZXh0TWVudSBhbmQgQ29udGV4dE1lbnVDb250cm9sbGVyIHRvIG1hdGNoIHdoZXJlIHRoZSBuZXcg
ZnVuY3Rpb25zIAorICAgICAgICBhcmUgbG9jYXRlZC4KKworICAgICAgICAqIEFwaS9xd2VicGFn
ZS5jcHA6CisgICAgICAgIChRV2ViUGFnZVByaXZhdGU6OmNyZWF0ZUNvbnRleHRNZW51KToKKyAg
ICAgICAgKFFXZWJQYWdlOjp1cGRhdGVQb3NpdGlvbkRlcGVuZGVudEFjdGlvbnMpOgorCiAyMDEw
LTEyLTA3ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBUcnkgdG8g
Zml4IGJ1aWxkLgpJbmRleDogV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAJKHJldmlzaW9uIDczNDY5KQorKysgV2ViS2l0
L3F0L0FwaS9xd2VicGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0Myw3ICs0NDMsNyBAQCBR
TWVudSAqUVdlYlBhZ2VQcml2YXRlOjpjcmVhdGVDb250ZXh0TWVuCiAgICAgICAgICAgICAgICAg
UUFjdGlvbiAqYSA9IHEtPmFjdGlvbihhY3Rpb24pOwogICAgICAgICAgICAgICAgIGlmIChhKSB7
CiAgICAgICAgICAgICAgICAgICAgIENvbnRleHRNZW51SXRlbSBpdChpdGVtKTsKLSAgICAgICAg
ICAgICAgICAgICAgd2ViY29yZU1lbnUtPmNoZWNrT3JFbmFibGVJZk5lZWRlZChpdCk7CisgICAg
ICAgICAgICAgICAgICAgIHBhZ2UtPmNvbnRleHRNZW51Q29udHJvbGxlcigpLT5jaGVja09yRW5h
YmxlSWZOZWVkZWQoaXQpOwogICAgICAgICAgICAgICAgICAgICBQbGF0Zm9ybU1lbnVJdGVtRGVz
Y3JpcHRpb24gZGVzYyA9IGl0LnJlbGVhc2VQbGF0Zm9ybURlc2NyaXB0aW9uKCk7CiAgICAgICAg
ICAgICAgICAgICAgIGEtPnNldEVuYWJsZWQoZGVzYy5lbmFibGVkKTsKICAgICAgICAgICAgICAg
ICAgICAgYS0+c2V0Q2hlY2tlZChkZXNjLmNoZWNrZWQpOwpAQCAtMzIwOSwxMiArMzIwOSwxMyBA
QCB2b2lkIFFXZWJQYWdlOjp1cGRhdGVQb3NpdGlvbkRlcGVuZGVudEFjCiAgICAgICAgIGQtPmhp
dFRlc3RSZXN1bHQgPSBRV2ViSGl0VGVzdFJlc3VsdCgpOwogICAgIGVsc2UKICAgICAgICAgZC0+
aGl0VGVzdFJlc3VsdCA9IFFXZWJIaXRUZXN0UmVzdWx0KG5ldyBRV2ViSGl0VGVzdFJlc3VsdFBy
aXZhdGUocmVzdWx0KSk7Ci0gICAgV2ViQ29yZTo6Q29udGV4dE1lbnUgbWVudShyZXN1bHQpOwot
ICAgIG1lbnUucG9wdWxhdGUoKTsKKworICAgIGQtPnBhZ2UtPmNvbnRleHRNZW51Q29udHJvbGxl
cigpLT5zZXRIaXRUZXN0UmVzdWx0KHJlc3VsdCk7CisgICAgZC0+cGFnZS0+Y29udGV4dE1lbnVD
b250cm9sbGVyKCktPnBvcHVsYXRlKCk7CiAgICAgCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKICAg
ICBpZiAoZC0+cGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5lbmFibGVkKCkpCi0gICAgICAg
IG1lbnUuYWRkSW5zcGVjdEVsZW1lbnRJdGVtKCk7CisgICAgICAgIGQtPnBhZ2UtPmNvbnRleHRN
ZW51Q29udHJvbGxlcigpLT5hZGRJbnNwZWN0RWxlbWVudEl0ZW0oKTsKICNlbmRpZgogCiAgICAg
UUJpdEFycmF5IHZpc2l0ZWRXZWJBY3Rpb25zKFFXZWJQYWdlOjpXZWJBY3Rpb25Db3VudCk7CkBA
IC0zMjIzLDcgKzMyMjQsNyBAQCB2b2lkIFFXZWJQYWdlOjp1cGRhdGVQb3NpdGlvbkRlcGVuZGVu
dEFjCiAgICAgZGVsZXRlIGQtPmN1cnJlbnRDb250ZXh0TWVudTsKIAogICAgIC8vIFRoZW4gd2Ug
bGV0IGNyZWF0ZUNvbnRleHRNZW51KCkgZW5hYmxlIHRoZSBhY3Rpb25zIHRoYXQgYXJlIHB1dCBp
bnRvIHRoZSBtZW51Ci0gICAgZC0+Y3VycmVudENvbnRleHRNZW51ID0gZC0+Y3JlYXRlQ29udGV4
dE1lbnUoJm1lbnUsIG1lbnUucGxhdGZvcm1EZXNjcmlwdGlvbigpLCAmdmlzaXRlZFdlYkFjdGlv
bnMpOworICAgIGQtPmN1cnJlbnRDb250ZXh0TWVudSA9IGQtPmNyZWF0ZUNvbnRleHRNZW51KGQt
PnBhZ2UtPmNvbnRleHRNZW51Q29udHJvbGxlcigpLT5jb250ZXh0TWVudSgpLCBkLT5wYWdlLT5j
b250ZXh0TWVudUNvbnRyb2xsZXIoKS0+Y29udGV4dE1lbnUoKS0+cGxhdGZvcm1EZXNjcmlwdGlv
bigpLCAmdmlzaXRlZFdlYkFjdGlvbnMpOwogI2VuZGlmIC8vIFFUX05PX0NPTlRFWFRNRU5VCiAK
ICNpZm5kZWYgUVRfTk9fQUNUSU9OCkluZGV4OiBXZWJLaXQvd2luL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvd2luL0NoYW5nZUxvZwkocmV2aXNpb24gNzM0NjkpCisrKyBXZWJLaXQv
d2luL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDEwLTEyLTA3
ICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBMYXllcmluZyBWaW9sYXRpb24gaW4g
Q29udGV4dE1lbnUgLSBtZW1iZXIgdmFyaWFibGUgb2YgdHlwZSBIaXRUZXN0UmVzdWx0CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MDU4NgorICAgICAg
ICAKKyAgICAgICAgVXBkYXRlIHVzZXJzIG9mIENvbnRleHRNZW51IGFuZCBDb250ZXh0TWVudUNv
bnRyb2xsZXIgdG8gbWF0Y2ggd2hlcmUgdGhlIG5ldyBmdW5jdGlvbnMgCisgICAgICAgIGFyZSBs
b2NhdGVkLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViQ29udGV4dE1lbnVDbGllbnQu
Y3BwOgorICAgICAgICAoV2ViQ29udGV4dE1lbnVDbGllbnQ6OmdldEN1c3RvbU1lbnVGcm9tRGVm
YXVsdEl0ZW1zKTogR2V0IHRoZSBIaXRUZXN0UmVzdWx0IGFuZCBDb250ZXh0TWVudSBmcm9tIHRo
ZSAKKyAgICAgICAgICAgIENvbnRleHRNZW51Q29udHJvbGxlciAoZnJvbSB0aGUgcGFnZSkuCisg
ICAgICAgIChXZWJDb250ZXh0TWVudUNsaWVudDo6Y29udGV4dE1lbnVJdGVtU2VsZWN0ZWQpOiBH
ZXQgdGhlIEhpdFRlc3RSZXN1bHQgZnJvbSB0aGUgQ29udGV4dE1lbnVDb250cm9sbGVyLgorICAg
ICAgICAqIFdlYlZpZXcuY3BwOgorICAgICAgICAoV2ViVmlldzo6aGFuZGxlQ29udGV4dE1lbnVF
dmVudCk6IERpdHRvLgorCiAyMDEwLTEyLTA3ICBKZXNzaWUgQmVybGluICA8amJlcmxpbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgQnVpbGQgZml4LiBVbnJldmlld2VkLgpJbmRleDogV2ViS2l0L3dp
bi9XZWJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL1dlYlZpZXcuY3BwCShyZXZp
c2lvbiA3MzQ2OSkKKysrIFdlYktpdC93aW4vV2ViVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEyNDUsMTIgKzEyNDUsMTQgQEAgYm9vbCBXZWJWaWV3OjpoYW5kbGVDb250ZXh0TWVudUV2ZW50
KFdQQQogICAgIGlmICghaGFuZGxlZEV2ZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAg
ICBDb250ZXh0TWVudUNvbnRyb2xsZXIqIGNvbnRleHRNZW51Q29udHJvbGxlciA9IG1fcGFnZS0+
Y29udGV4dE1lbnVDb250cm9sbGVyKCk7CisKICAgICAvLyBTaG93IHRoZSBtZW51Ci0gICAgQ29u
dGV4dE1lbnUqIGNvcmVNZW51ID0gbV9wYWdlLT5jb250ZXh0TWVudUNvbnRyb2xsZXIoKS0+Y29u
dGV4dE1lbnUoKTsKKyAgICBDb250ZXh0TWVudSogY29yZU1lbnUgPSBjb250ZXh0TWVudUNvbnRy
b2xsZXItPmNvbnRleHRNZW51KCk7CiAgICAgaWYgKCFjb3JlTWVudSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgTm9kZSogbm9kZSA9IGNvcmVNZW51LT5oaXRUZXN0UmVzdWx0KCkuaW5u
ZXJOb25TaGFyZWROb2RlKCk7CisgICAgTm9kZSogbm9kZSA9IGNvbnRleHRNZW51Q29udHJvbGxl
ci0+aGl0VGVzdFJlc3VsdCgpLmlubmVyTm9uU2hhcmVkTm9kZSgpOwogICAgIGlmICghbm9kZSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0xMjYyLDcgKzEyNjQsNyBAQCBib29sIFdlYlZp
ZXc6OmhhbmRsZUNvbnRleHRNZW51RXZlbnQoV1BBCiAgICAgaWYgKCF2aWV3KQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBQT0lOVCBwb2ludCh2aWV3LT5jb250ZW50c1RvV2luZG93KGNv
cmVNZW51LT5oaXRUZXN0UmVzdWx0KCkucG9pbnQoKSkpOworICAgIFBPSU5UIHBvaW50KHZpZXct
PmNvbnRlbnRzVG9XaW5kb3coY29udGV4dE1lbnVDb250cm9sbGVyLT5oaXRUZXN0UmVzdWx0KCku
cG9pbnQoKSkpOwogCiAgICAgLy8gVHJhbnNsYXRlIHRoZSBwb2ludCB0byBzY3JlZW4gY29vcmRp
bmF0ZXMKICAgICBpZiAoITo6Q2xpZW50VG9TY3JlZW4obV92aWV3V2luZG93LCAmcG9pbnQpKQpJ
bmRleDogV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJDb250ZXh0TWVudUNs
aWVudC5jcHAJKHJldmlzaW9uIDczNDY5KQorKysgV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9X
ZWJDb250ZXh0TWVudUNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAK
ICNpbmNsdWRlICJXZWJWaWV3LmgiCiAKICNpbmNsdWRlIDxXZWJDb3JlL0NvbnRleHRNZW51Lmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL0V2ZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvRnJhbWVMb2FkZXIuaD4KQEAgLTY0LDcgKzY1LDcgQEAgSE1FTlUgV2ViQ29udGV4dE1l
bnVDbGllbnQ6OmdldEN1c3RvbU1lbgogCiAgICAgSE1FTlUgbmV3TWVudSA9IDA7CiAgICAgQ09N
UHRyPFdlYkVsZW1lbnRQcm9wZXJ0eUJhZz4gcHJvcGVydHlCYWc7Ci0gICAgcHJvcGVydHlCYWcu
YWRvcHRSZWYoV2ViRWxlbWVudFByb3BlcnR5QmFnOjpjcmVhdGVJbnN0YW5jZShtZW51LT5oaXRU
ZXN0UmVzdWx0KCkpKTsKKyAgICBwcm9wZXJ0eUJhZy5hZG9wdFJlZihXZWJFbGVtZW50UHJvcGVy
dHlCYWc6OmNyZWF0ZUluc3RhbmNlKG1fd2ViVmlldy0+cGFnZSgpLT5jb250ZXh0TWVudUNvbnRy
b2xsZXIoKS0+aGl0VGVzdFJlc3VsdCgpKSk7CiAgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gZGVj
aWRlIHdoZXRoZXIgdG8gZG8gdGhlIGRlZmF1bHQgYmVmb3JlIGNhbGxpbmcgdGhpcyBkZWxlZ2F0
ZSBtZXRob2QKICAgICBpZiAoRkFJTEVEKHVpRGVsZWdhdGUtPmNvbnRleHRNZW51SXRlbXNGb3JF
bGVtZW50KG1fd2ViVmlldywgcHJvcGVydHlCYWcuZ2V0KCksIChPTEVfSEFORExFKShVTE9ORzY0
KW1lbnUtPnBsYXRmb3JtRGVzY3JpcHRpb24oKSwgKE9MRV9IQU5ETEUqKSZuZXdNZW51KSkpCiAg
ICAgICAgIHJldHVybiBtZW51LT5wbGF0Zm9ybURlc2NyaXB0aW9uKCk7CkBAIC04Miw3ICs4Myw3
IEBAIHZvaWQgV2ViQ29udGV4dE1lbnVDbGllbnQ6OmNvbnRleHRNZW51SXQKICAgICBBU1NFUlQo
dWlEZWxlZ2F0ZSk7CiAKICAgICBDT01QdHI8V2ViRWxlbWVudFByb3BlcnR5QmFnPiBwcm9wZXJ0
eUJhZzsKLSAgICBwcm9wZXJ0eUJhZy5hZG9wdFJlZihXZWJFbGVtZW50UHJvcGVydHlCYWc6OmNy
ZWF0ZUluc3RhbmNlKHBhcmVudE1lbnUtPmhpdFRlc3RSZXN1bHQoKSkpOworICAgIHByb3BlcnR5
QmFnLmFkb3B0UmVmKFdlYkVsZW1lbnRQcm9wZXJ0eUJhZzo6Y3JlYXRlSW5zdGFuY2UobV93ZWJW
aWV3LT5wYWdlKCktPmNvbnRleHRNZW51Q29udHJvbGxlcigpLT5oaXRUZXN0UmVzdWx0KCkpKTsK
ICAgICAgICAgICAgIAogICAgIHVpRGVsZWdhdGUtPmNvbnRleHRNZW51SXRlbVNlbGVjdGVkKG1f
d2ViVmlldywgaXRlbS0+cmVsZWFzZVBsYXRmb3JtRGVzY3JpcHRpb24oKSwgcHJvcGVydHlCYWcu
Z2V0KCkpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75877</attachid>
            <date>2010-12-07 23:23:16 -0800</date>
            <delta_ts>2010-12-08 00:07:20 -0800</delta_ts>
            <desc>[PATCH] Fix</desc>
            <filename>context_menu_layering_violation_fix.patch</filename>
            <type>text/plain</type>
            <size>127866</size>
            <attacher name="Brian Weinstein">bweinstein</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MzQ2OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODMgQEAKKzIwMTAtMTItMDcgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5A
YXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIExheWVyaW5nIFZpb2xhdGlvbiBpbiBDb250ZXh0TWVudSAtIG1lbWJlciB2YXJpYWJsZSBv
ZiB0eXBlIEhpdFRlc3RSZXN1bHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTUwNTg2CisgICAgICAgIAorICAgICAgICBDb250ZXh0TWVudSBoYWQgYSBs
YXllcmluZyB2aW9sYXRpb24gYnkgaGF2aW5nIGEgbWVtYmVyIHZhcmlhYmxlIG9mIHR5cGUgSGl0
VGVzdFJlc3VsdCwgYmVjYXVzZQorICAgICAgICBjbGFzc2VzIGluIFdlYkNvcmUvcGxhdGZvcm0g
Y2FuJ3Qga25vdyBhYm91dCBjbGFzc2VzIGluIFdlYkNvcmUuCisgICAgICAgIAorICAgICAgICBU
aGlzIHBhdGNoIG1vdmVzIHRoZSBIaXRUZXN0UmVzdWx0IGFuZCBhbGwgZnVuY3Rpb25zIHRoYXQg
dXNlIGl0IG91dCBvZiBDb250ZXh0TWVudSBpbnRvIENvbnRleHRNZW51Q29udHJvbGxlci4KKyAg
ICAgICAgQWxsIG9mIHRoZSBmdW5jdGlvbnMgdGhhdCBkZWFsdCB3aXRoIHBvcHVsYXRpbmcgdGhl
IENvbnRleHRNZW51IGFyZSBub3cgaW4gQ29udGV4dE1lbnVDb250cm9sbGVyLCBhbmQgdGhpcwor
ICAgICAgICBhbGxvd2VkIHVzIHRvIGRlbGV0ZSB0aGUgQ29udGV4dE1lbnUgZmlsZSwgcHV0dGlu
ZyBhbGwgb2YgdGhlIGNyb3NzLXBsYXRmb3JtIGNvZGUgdGhhdCB1c2VkIHRvIGJlIGl0CisgICAg
ICAgIGluIENvbnRleHRNZW51Q29udHJvbGxlciwgYW5kIHRoZSByZXN0IG9mIHRoZSBjb2RlIGlz
IGluIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBmaWxlcy4KKworICAgICAgICBObyBjaGFuZ2UgaW4g
YmVoYXZpb3IsIG5vIG5ldyB0ZXN0cy4KKworICAgICAgICAqIEFuZHJvaWQubWs6IFJlbW92ZWQg
Q29udGV4dE1lbnUuY3BwLgorICAgICAgICAqIENNYWtlTGlzdHMudHh0OiBEaXR0by4KKyAgICAg
ICAgKiBHTlVtYWtlZmlsZS5hbTogRGl0dG8uCisgICAgICAgICogV2ViQ29yZS5neXBpOiBEaXR0
by4KKyAgICAgICAgKiBXZWJDb3JlLnBybzogRGl0dG8uCisgICAgICAgICogV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2o6IERpdHRvLgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajogRGl0dG8uCisKKyAgICAgICAgKiBwYWdlL0NvbnRleHRNZW51Q29udHJv
bGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0TWVudUNvbnRyb2xsZXI6OkNvbnRl
eHRNZW51Q29udHJvbGxlcik6IEluaXRpYWxpemVkIG1faGl0VGVzdFJlc3VsdCB0byBhbiBlbXB0
eSBIaXRUZXN0UmVzdWx0LgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVDb250cm9sbGVy
OjpoYW5kbGVDb250ZXh0TWVudUV2ZW50KTogQ2FsbCBwb3B1bGF0ZSBvbiB0aGUgQ29udGV4dE1l
bnVDb250cm9sbGVyIGluc3RlYWQKKyAgICAgICAgICAgIG9mIHRoZSBDb250ZXh0TWVudS4KKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51Q29udHJvbGxlcjo6Y3JlYXRlQ29udGV4dE1lbnUp
OiBGaXggc29tZSBpbmRpbmF0aW9uLCBhbmQgc3RvcmUgdGhlIEhpdFRlc3RSZXN1bHQgaW4gYSBt
ZW1iZXIKKyAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1l
bnVDb250cm9sbGVyOjpzaG93Q29udGV4dE1lbnUpOiBDYWxsIGFkZEluc3BlY3RFbGVtZW50SXRl
bSBvbiB0aGUgQ29udGV4dE1lbnVDb250cm9sbGVyLgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4
dE1lbnVDb250cm9sbGVyOjpjb250ZXh0TWVudUl0ZW1TZWxlY3RlZCk6IFVzZSBtX2hpdFRlc3RS
ZXN1bHQgd2hlbmV2ZXIgd2UgbmVlZCBhIEhpdFRlc3RSZXN1bHQuCisgICAgICAgIChXZWJDb3Jl
OjpDb250ZXh0TWVudUNvbnRyb2xsZXI6OmFwcGVuZEl0ZW0pOiBWYWxpZGF0ZXMgdGhlIGl0ZW0g
Zm9yIGl0cyBzdGF0ZSwgYW5kIHRoZW4gYXBwZW5kcyBpdCB0byB0aGUgcGFyZW50IG1lbnUuCisg
ICAgICAgICAgICBUaGlzIGFsbG93ZWQgdXMgdG8gbW92ZSBjaGVja09yRW5hYmxlSWZOZWVkZWQg
ZnJvbSBDb250ZXh0TWVudS4KKworICAgICAgICBUaGVzZSBmdW5jdGlvbnMgd2VyZSBhbGwgbW92
ZWQgZnJvbSBDb250ZXh0TWVudSwgYW5kIGNoYW5nZWQgc2xpZ2h0bHkgdG8gZml0IGluIENvbnRl
eHRNZW51Q29udHJvbGxlci4KKyAgICAgICAgQWxsIGNhbGxzIHRvIENvbnRleHRNZW51OjphcHBl
bmRJdGVtIHdlcmUgY2hhbmdlZCB0byBDb250ZXh0TWVudUNvbnRyb2xsZXI6OmFwcGVuZEl0ZW0s
IHdoaWNoIHRha2VzIGNhcmUKKyAgICAgICAgb2YgdmFsaWRhdGluZyB0aGUgbWVudS4KKyAgICAg
ICAgKFdlYkNvcmU6OnNlcGFyYXRvckl0ZW0pOiBNb3ZlZCBmcm9tIENvbnRleHRNZW51LgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVDb250cm9sbGVyOjpjcmVhdGVBbmRBcHBlbmRGb250
U3ViTWVudSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVDb250cm9sbGVy
OjpjcmVhdGVBbmRBcHBlbmRTcGVsbGluZ0FuZEdyYW1tYXJTdWJNZW51KTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNyZWF0ZUFuZEFwcGVuZFNwZWVj
aFN1Yk1lbnUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51Q29udHJvbGxl
cjo6Y3JlYXRlQW5kQXBwZW5kV3JpdGluZ0RpcmVjdGlvblN1Yk1lbnUpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRleHRNZW51Q29udHJvbGxlcjo6Y3JlYXRlQW5kQXBwZW5kVGV4dERp
cmVjdGlvblN1Yk1lbnUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51Q29u
dHJvbGxlcjo6Y3JlYXRlQW5kQXBwZW5kU3Vic3RpdHV0aW9uc1N1Yk1lbnUpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51Q29udHJvbGxlcjo6Y3JlYXRlQW5kQXBwZW5kVHJh
bnNmb3JtYXRpb25zU3ViTWVudSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6c2VsZWN0aW9u
Q29udGFpbnNQb3NzaWJsZVdvcmQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRN
ZW51Q29udHJvbGxlcjo6cG9wdWxhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
eHRNZW51Q29udHJvbGxlcjo6YWRkSW5zcGVjdEVsZW1lbnRJdGVtKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNoZWNrT3JFbmFibGVJZk5lZWRlZCk6
IERpdHRvLgorICAgICAgICAKKyAgICAgICAgKiBwYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5o
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVDb250cm9sbGVyOjpoaXRUZXN0UmVzdWx0
KTogUmV0dXJucyB0aGUgSGl0VGVzdFJlc3VsdCBvZiB0aGUgY3VycmVudCBDb250ZXh0TWVudS4K
KworICAgICAgICAqIHBsYXRmb3JtL0NvbnRleHRNZW51LmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9Db250ZXh0TWVudS5oOgorICAgICAgICAqIHBsYXRmb3JtL2VmbC9Db250ZXh0
TWVudUVmbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0TWVudTo6Q29udGV4dE1lbnUp
OiBSZW1vdmVkIG1faGl0VGVzdFJlc3VsdCBmcm9tIHRoZSBjb25zdHJ1Y3Rvci4KKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRleHRNZW51OjphcHBlbmRJdGVtKTogUmVtb3ZlZCB0aGUgY2FsbCB0byBj
aGVja09yRW5hYmxlSWZOZWVkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3RrL0NvbnRleHRNZW51
R3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51OjpDb250ZXh0TWVudSk6IFJl
bW92ZWQgbV9oaXRUZXN0UmVzdWx0IGZyb20gdGhlIGNvbnN0cnVjdG9yLgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGV4dE1lbnU6OmFwcGVuZEl0ZW0pOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9y
bS9oYWlrdS9Db250ZXh0TWVudUhhaWt1LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRN
ZW51OjpDb250ZXh0TWVudSk6IFJlbW92ZWQgbV9oaXRUZXN0UmVzdWx0IGZyb20gdGhlIGNvbnN0
cnVjdG9yLgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnU6OmFwcGVuZEl0ZW0pOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51OjppbnNlcnRJdGVtKTogRGl0dG8uCisg
ICAgICAgICogcGxhdGZvcm0vbWFjL0NvbnRleHRNZW51TWFjLm1tOgorICAgICAgICAoLVtXZWJD
b3JlTWVudVRhcmdldCB2YWxpZGF0ZU1lbnVJdGVtOl0pOiBDYWxscyBjaGVja09yRW5hYmxlSWZO
ZWVkZWQgb24gdGhlIGNvbnRyb2xsZXIgaW5zdGVhZCBvZgorICAgICAgICAgICAgdGhlIGNvbnRl
eHQgbWVudS4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51OjpDb250ZXh0TWVudSk6IFJl
bW92ZWQgbV9oaXRUZXN0UmVzdWx0IGZyb20gdGhlIGNvbnN0cnVjdG9yLgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGV4dE1lbnU6OmFwcGVuZEl0ZW0pOiBSZW1vdmVkIHRoZSBjYWxsIHRvIGNoZWNr
T3JFbmFibGVJZk5lZWRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51OjppbnNlcnRJ
dGVtKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vd2luL0NvbnRleHRNZW51V2luLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51OjpDb250ZXh0TWVudSk6IFJlbW92ZWQgbV9o
aXRUZXN0UmVzdWx0IGZyb20gdGhlIGNvbnN0cnVjdG9yLgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGV4dE1lbnU6Omluc2VydEl0ZW0pOiBSZW1vdmVkIHRoZSBjYWxsIHRvIGNoZWNrT3JFbmFibGVJ
Zk5lZWRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS93eC9Db250ZXh0TWVudVd4LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRleHRNZW51OjpDb250ZXh0TWVudSk6IFJlbW92ZWQgbV9oaXRUZXN0
UmVzdWx0IGZyb20gdGhlIGNvbnN0cnVjdG9yLgorICAgICAgICAoQ29udGV4dE1lbnU6OmFwcGVu
ZEl0ZW0pOiBEaXR0by4KKwogMjAxMC0xMi0wNyAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVp
bkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSm9obiBTdWxsaXZhbi4KSW5kZXg6
IFdlYkNvcmUvQW5kcm9pZC5tawo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0FuZHJvaWQubWsJKHJl
dmlzaW9uIDczNDY5KQorKysgV2ViQ29yZS9BbmRyb2lkLm1rCSh3b3JraW5nIGNvcHkpCkBAIC00
NTAsNyArNDUwLDYgQEAgTE9DQUxfU1JDX0ZJTEVTIDo9ICQoTE9DQUxfU1JDX0ZJTEVTKSBcCiAJ
XAogCXBsYXRmb3JtL0FyZW5hLmNwcCBcCiAJcGxhdGZvcm0vQ29udGVudFR5cGUuY3BwIFwKLQlw
bGF0Zm9ybS9Db250ZXh0TWVudS5jcHAgXAogCXBsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmNw
cCBcCiAJcGxhdGZvcm0vRGVwcmVjYXRlZFB0ckxpc3RJbXBsLmNwcCBcCiAJcGxhdGZvcm0vRHJh
Z0RhdGEuY3BwIFwKSW5kZXg6IFdlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gNzM0NjkpCisrKyBXZWJDb3JlL0NNYWtl
TGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMjcwLDcgKzEyNzAsNiBAQCBTRVQoV2ViQ29y
ZV9TT1VSQ0VTCiAKICAgICBwbGF0Zm9ybS9BcmVuYS5jcHAKICAgICBwbGF0Zm9ybS9Db250ZW50
VHlwZS5jcHAKLSAgICBwbGF0Zm9ybS9Db250ZXh0TWVudS5jcHAKICAgICBwbGF0Zm9ybS9Dcm9z
c1RocmVhZENvcGllci5jcHAKICAgICBwbGF0Zm9ybS9EZXByZWNhdGVkUHRyTGlzdEltcGwuY3Bw
CiAgICAgcGxhdGZvcm0vRHJhZ0RhdGEuY3BwCkluZGV4OiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFt
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDczNDY5KQor
KysgV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMjI1OCw3ICsyMjU4
LDYgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3BsYXRmb3JtL0F1dG9kcmFpbmVk
UG9vbC5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL0NvbnRlbnRUeXBlLmNwcCBcCiAJV2ViQ29yZS9w
bGF0Zm9ybS9Db250ZW50VHlwZS5oIFwKLQlXZWJDb3JlL3BsYXRmb3JtL0NvbnRleHRNZW51LmNw
cCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9Db250ZXh0TWVudS5oIFwKIAlXZWJDb3JlL3BsYXRmb3Jt
L0NvbnRleHRNZW51SXRlbS5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL0Nvb2tpZS5oIFwKSW5kZXg6
IFdlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmV4
cC5pbgkocmV2aXNpb24gNzM0NjkpCisrKyBXZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjUyLDEyICsxMjUyLDEyIEBAIF9fWk43V2ViQ29yZTE1Q29udGV4dE1lbnVJ
dGVtQzFFTlNfMTlDb24KIF9fWk43V2ViQ29yZTE1Q29udGV4dE1lbnVJdGVtQzFFUDEwTlNNZW51
SXRlbQogX19aTjdXZWJDb3JlMTVDb250ZXh0TWVudUl0ZW1EMUV2CiBfX1pON1dlYkNvcmUyMUNv
bnRleHRNZW51Q29udHJvbGxlcjE2Y2xlYXJDb250ZXh0TWVudUV2CitfX1pOSzdXZWJDb3JlMjFD
b250ZXh0TWVudUNvbnRyb2xsZXIyMWNoZWNrT3JFbmFibGVJZk5lZWRlZEVSTlNfMTVDb250ZXh0
TWVudUl0ZW1FCiBfX1pON1dlYkNvcmUyMUNvbnRleHRNZW51Q29udHJvbGxlcjIzY29udGV4dE1l
bnVJdGVtU2VsZWN0ZWRFUE5TXzE1Q29udGV4dE1lbnVJdGVtRQogX19aTjdXZWJDb3JlMjFjb250
ZXh0TWVudUl0ZW1WZWN0b3JFUDE0TlNNdXRhYmxlQXJyYXkKIF9fWk43V2ViQ29yZTIzcGxhdGZv
cm1NZW51RGVzY3JpcHRpb25FUk4zV1RGNlZlY3RvcklOU18xNUNvbnRleHRNZW51SXRlbUVMbTBF
RUUKIF9fWk43V2ViQ29yZTZDaHJvbWUxNXNob3dDb250ZXh0TWVudUV2CiBfX1pOSzdXZWJDb3Jl
MTFDb250ZXh0TWVudTE5cGxhdGZvcm1EZXNjcmlwdGlvbkV2Ci1fX1pOSzdXZWJDb3JlMTFDb250
ZXh0TWVudTIxY2hlY2tPckVuYWJsZUlmTmVlZGVkRVJOU18xNUNvbnRleHRNZW51SXRlbUUKIF9f
Wk5LN1dlYkNvcmUxNUNvbnRleHRNZW51SXRlbTE1cGxhdGZvcm1TdWJNZW51RXYKIF9fWk5LN1dl
YkNvcmUxNUNvbnRleHRNZW51SXRlbTR0eXBlRXYKIF9fWk5LN1dlYkNvcmUxNUNvbnRleHRNZW51
SXRlbTV0aXRsZUV2CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gNzM0NjkpCisrKyBXZWJDb3JlL1dlYkNvcmUu
Z3lwaQkod29ya2luZyBjb3B5KQpAQCAtMzQyMSw3ICszNDIxLDYgQEAKICAgICAgICAgICAgICdw
bGF0Zm9ybS9BdXRvZHJhaW5lZFBvb2wuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vQ29udGVu
dFR5cGUuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9Db250ZW50VHlwZS5oJywKLSAgICAg
ICAgICAgICdwbGF0Zm9ybS9Db250ZXh0TWVudS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L0NvbnRleHRNZW51LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL0NvbnRleHRNZW51SXRlbS5o
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9Db29raWUuaCcsCkluZGV4OiBXZWJDb3JlL1dlYkNv
cmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDczNDY5
KQorKysgV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtMTE1MSw3ICsxMTUx
LDYgQEAgU09VUkNFUyArPSBcCiAgICAgcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5jcHAgXAog
ICAgIHBsYXRmb3JtL3RleHQvSHlwaGVuYXRpb24uY3BwIFwKICAgICBwbGF0Zm9ybS9Db250ZW50
VHlwZS5jcHAgXAotICAgIHBsYXRmb3JtL0NvbnRleHRNZW51LmNwcCBcCiAgICAgcGxhdGZvcm0v
Q3Jvc3NUaHJlYWRDb3BpZXIuY3BwIFwKICAgICBwbGF0Zm9ybS9EZXByZWNhdGVkUHRyTGlzdElt
cGwuY3BwIFwKICAgICBwbGF0Zm9ybS9EcmFnRGF0YS5jcHAgXApJbmRleDogV2ViQ29yZS9XZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA3MzQ2OSkKKysrIFdlYkNvcmUvV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTI1MzE0LDEwICsyNTMx
NCw2IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XHBsYXRmb3JtXENvbnRleHRNZW51LmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQog
CQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cQ29udGV4dE1lbnUuaCIKIAkJCQk+CiAJCQk8
L0ZpbGU+CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
cmV2aXNpb24gNzM0NjkpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjgzOSw3ICsyODM5LDYgQEAKIAkJOTNCMkQ4MTYwRjk5
MjBEMjAwNkFFNkIyIC8qIFN1ZGRlblRlcm1pbmF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0IyRDgxNTBGOTkyMEQyMDA2QUU2QjIgLyogU3Vk
ZGVuVGVybWluYXRpb24uaCAqLzsgfTsKIAkJOTNCMkQ4MTgwRjk5MjBFRTAwNkFFNkIyIC8qIFN1
ZGRlblRlcm1pbmF0aW9uLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTNCMkQ4MTcwRjk5MjBFRTAwNkFFNkIyIC8qIFN1ZGRlblRlcm1pbmF0aW9uLm1t
ICovOyB9OwogCQk5M0I2QTBFNjBCMEJDQTVDMDBGNTAyN0EgLyogQ29udGV4dE1lbnUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQjZBMEU1MEIwQkNB
NUMwMEY1MDI3QSAvKiBDb250ZXh0TWVudS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07Ci0JCTkzQjZBMEU4MEIwQkNBNjcwMEY1MDI3QSAvKiBDb250ZXh0
TWVudS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
M0I2QTBFNzBCMEJDQTY3MDBGNTAyN0EgLyogQ29udGV4dE1lbnUuY3BwICovOyB9OwogCQk5M0I2
QTBFQTBCMEJDQTg0MDBGNTAyN0EgLyogQ29udGV4dE1lbnVNYWMubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0I2QTBFOTBCMEJDQTg0MDBGNTAyN0Eg
LyogQ29udGV4dE1lbnVNYWMubW0gKi87IH07CiAJCTkzQjcwRDYzMDlFQjBDN0MwMDlEODQ2OCAv
KiBKU0RPTUJpbmRpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTNCNzBENDcwOUVCMEM3QzAwOUQ4NDY4IC8qIEpTRE9NQmluZGluZy5jcHAgKi87
IH07CiAJCTkzQjcwRDY0MDlFQjBDN0MwMDlEODQ2OCAvKiBKU0RPTUJpbmRpbmcuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQjcwRDQ4MDlFQjBDN0Mw
MDlEODQ2OCAvKiBKU0RPTUJpbmRpbmcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwpAQCAtOTAwNyw3ICs5MDA2LDYgQEAKIAkJOTNCMkQ4MTUwRjk5MjBE
MjAwNkFFNkIyIC8qIFN1ZGRlblRlcm1pbmF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFN1ZGRlblRlcm1pbmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTkzQjJEODE3MEY5OTIwRUUwMDZBRTZCMiAvKiBTdWRkZW5UZXJtaW5hdGlvbi5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFN1ZGRlblRlcm1pbmF0aW9uLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0I2QTBFNTBCMEJDQTVDMDBGNTAyN0Eg
LyogQ29udGV4dE1lbnUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnRl
eHRNZW51Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTkzQjZBMEU3MEIwQkNBNjcw
MEY1MDI3QSAvKiBDb250ZXh0TWVudS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gQ29udGV4dE1lbnUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5
M0I2QTBFOTBCMEJDQTg0MDBGNTAyN0EgLyogQ29udGV4dE1lbnVNYWMubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQ29udGV4dE1lbnVNYWMubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzQjcwRDQ3MDlFQjBDN0MwMDlEODQ2OCAvKiBKU0RPTUJp
bmRpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRE9NQmlu
ZGluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzQjcwRDQ4MDlFQjBDN0Mw
MDlEODQ2OCAvKiBKU0RPTUJpbmRpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTRE9NQmluZGluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTc1NzQs
NyArMTc1NzIsNiBAQAogCQkJCUJDQzhDRkNBMDk4NkNEMjQwMDE0MEJGMiAvKiBDb2xvckRhdGEu
Z3BlcmYgKi8sCiAJCQkJNDFEMDE1QzkwRjRCNUM3MTAwNEE2NjJGIC8qIENvbnRlbnRUeXBlLmNw
cCAqLywKIAkJCQk0MUQwMTVDODBGNEI1QzcxMDA0QTY2MkYgLyogQ29udGVudFR5cGUuaCAqLywK
LQkJCQk5M0I2QTBFNzBCMEJDQTY3MDBGNTAyN0EgLyogQ29udGV4dE1lbnUuY3BwICovLAogCQkJ
CTkzQjZBMEU1MEIwQkNBNUMwMEY1MDI3QSAvKiBDb250ZXh0TWVudS5oICovLAogCQkJCTA2MDI3
Q0FDMEIxQ0JGQzAwMDg4NEIyRCAvKiBDb250ZXh0TWVudUl0ZW0uaCAqLywKIAkJCQlEOEI2MTUy
RTEwMzI0OTUxMDBDODU1NEEgLyogQ29va2llLmggKi8sCkBAIC0yMTk1Niw3ICsyMTk1Myw2IEBA
CiAJCQkJQTgxODcyMUYwOTc3RDNDMDAwNTgyNkQ5IC8qIENvbnRhaW5lck5vZGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQkM1RUI5ODAwRTgyMDcyNTAwQjI1OTY1IC8qIENvbnRlbnREYXRhLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTQxRDAxNUNCMEY0QjVDNzEwMDRBNjYyRiAvKiBDb250ZW50
VHlwZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk5M0I2QTBFODBCMEJDQTY3MDBGNTAyN0EgLyog
Q29udGV4dE1lbnUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDY1QUQ0RjYwQjBDMkVEQTAwNUEy
QjFEIC8qIENvbnRleHRNZW51Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwNjAy
N0NCMzBCMUNDMDNEMDA4ODRCMkQgLyogQ29udGV4dE1lbnVJdGVtTWFjLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJOTNCNkEwRUEwQjBCQ0E4NDAwRjUwMjdBIC8qIENvbnRleHRNZW51TWFjLm1tIGlu
IFNvdXJjZXMgKi8sCkluZGV4OiBXZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcAko
cmV2aXNpb24gNzM0NjkpCisrKyBXZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkNocm9tZS5oIgog
I2luY2x1ZGUgIkNvbnRleHRNZW51LmgiCiAjaW5jbHVkZSAiQ29udGV4dE1lbnVDbGllbnQuaCIK
KyNpbmNsdWRlICJDb250ZXh0TWVudUl0ZW0uaCIKICNpbmNsdWRlICJDb250ZXh0TWVudVByb3Zp
ZGVyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50
LmgiCkBAIC01MCw2ICs1MSw3IEBACiAjaW5jbHVkZSAiSGl0VGVzdFJlcXVlc3QuaCIKICNpbmNs
dWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgor
I2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKICNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCiAj
aW5jbHVkZSAiTmF2aWdhdGlvbkFjdGlvbi5oIgogI2luY2x1ZGUgIk5vZGUuaCIKQEAgLTYzLDYg
KzY1LDEwIEBACiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiV2luZG93RmVh
dHVyZXMuaCIKICNpbmNsdWRlICJtYXJrdXAuaCIKKyNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmlj
b2RlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXVEY7Cit1c2luZyBuYW1lc3BhY2UgVW5pY29kZTsK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC05MCwxMCArOTYsMTIgQEAgdm9pZCBDb250ZXh0
TWVudUNvbnRyb2xsZXI6OmNsZWFyQ29udGV4dAogCiB2b2lkIENvbnRleHRNZW51Q29udHJvbGxl
cjo6aGFuZGxlQ29udGV4dE1lbnVFdmVudChFdmVudCogZXZlbnQpCiB7Ci0gICAgbV9jb250ZXh0
TWVudS5zZXQoY3JlYXRlQ29udGV4dE1lbnUoZXZlbnQpKTsKKyAgICBtX2NvbnRleHRNZW51ID0g
Y3JlYXRlQ29udGV4dE1lbnUoZXZlbnQpOwogICAgIGlmICghbV9jb250ZXh0TWVudSkKICAgICAg
ICAgcmV0dXJuOwotICAgIG1fY29udGV4dE1lbnUtPnBvcHVsYXRlKCk7CisKKyAgICBwb3B1bGF0
ZSgpOworCiAgICAgc2hvd0NvbnRleHRNZW51KGV2ZW50KTsKIH0KIApAQCAtMTAxLDcgKzEwOSw3
IEBAIHZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjpzaG93Q29udGV4dE0KIHsKICAgICBtX21l
bnVQcm92aWRlciA9IG1lbnVQcm92aWRlcjsKIAotICAgIG1fY29udGV4dE1lbnUuc2V0KGNyZWF0
ZUNvbnRleHRNZW51KGV2ZW50KSk7CisgICAgbV9jb250ZXh0TWVudSA9IGNyZWF0ZUNvbnRleHRN
ZW51KGV2ZW50KTsKICAgICBpZiAoIW1fY29udGV4dE1lbnUpIHsKICAgICAgICAgY2xlYXJDb250
ZXh0TWVudSgpOwogICAgICAgICByZXR1cm47CkBAIC0xMTEsMTAgKzExOSwxMSBAQCB2b2lkIENv
bnRleHRNZW51Q29udHJvbGxlcjo6c2hvd0NvbnRleHRNCiAgICAgc2hvd0NvbnRleHRNZW51KGV2
ZW50KTsKIH0KIAotQ29udGV4dE1lbnUqIENvbnRleHRNZW51Q29udHJvbGxlcjo6Y3JlYXRlQ29u
dGV4dE1lbnUoRXZlbnQqIGV2ZW50KQorUGFzc093blB0cjxDb250ZXh0TWVudT4gQ29udGV4dE1l
bnVDb250cm9sbGVyOjpjcmVhdGVDb250ZXh0TWVudShFdmVudCogZXZlbnQpCiB7Ci0gICBpZiAo
IWV2ZW50LT5pc01vdXNlRXZlbnQoKSkKKyAgICBpZiAoIWV2ZW50LT5pc01vdXNlRXZlbnQoKSkK
ICAgICAgICAgcmV0dXJuIDA7CisKICAgICBNb3VzZUV2ZW50KiBtb3VzZUV2ZW50ID0gc3RhdGlj
X2Nhc3Q8TW91c2VFdmVudCo+KGV2ZW50KTsKICAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdChtb3Vz
ZUV2ZW50LT5hYnNvbHV0ZUxvY2F0aW9uKCkpOwogCkBAIC0xMjMsMTQgKzEzMiwxNyBAQCBDb250
ZXh0TWVudSogQ29udGV4dE1lbnVDb250cm9sbGVyOjpjcmVhCiAKICAgICBpZiAoIXJlc3VsdC5p
bm5lck5vblNoYXJlZE5vZGUoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIG5ldyBD
b250ZXh0TWVudShyZXN1bHQpOworCisgICAgbV9oaXRUZXN0UmVzdWx0ID0gcmVzdWx0OworCisg
ICAgcmV0dXJuIG5ldyBDb250ZXh0TWVudTsKIH0KIAogdm9pZCBDb250ZXh0TWVudUNvbnRyb2xs
ZXI6OnNob3dDb250ZXh0TWVudShFdmVudCogZXZlbnQpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RP
UikKICAgICBpZiAobV9wYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmVuYWJsZWQoKSkKLSAg
ICAgICAgbV9jb250ZXh0TWVudS0+YWRkSW5zcGVjdEVsZW1lbnRJdGVtKCk7CisgICAgICAgIGFk
ZEluc3BlY3RFbGVtZW50SXRlbSgpOwogI2VuZGlmCiAgICAgUGxhdGZvcm1NZW51RGVzY3JpcHRp
b24gY3VzdG9tTWVudSA9IG1fY2xpZW50LT5nZXRDdXN0b21NZW51RnJvbURlZmF1bHRJdGVtcyht
X2NvbnRleHRNZW51LmdldCgpKTsKICAgICBtX2NvbnRleHRNZW51LT5zZXRQbGF0Zm9ybURlc2Ny
aXB0aW9uKGN1c3RvbU1lbnUpOwpAQCAtMTYyLDU0ICsxNzQsNTMgQEAgdm9pZCBDb250ZXh0TWVu
dUNvbnRyb2xsZXI6OmNvbnRleHRNZW51SQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
SGl0VGVzdFJlc3VsdCByZXN1bHQgPSBtX2NvbnRleHRNZW51LT5oaXRUZXN0UmVzdWx0KCk7Ci0g
ICAgRnJhbWUqIGZyYW1lID0gcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpLT5kb2N1bWVudCgp
LT5mcmFtZSgpOworICAgIEZyYW1lKiBmcmFtZSA9IG1faGl0VGVzdFJlc3VsdC5pbm5lck5vblNo
YXJlZE5vZGUoKS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAg
ICByZXR1cm47CiAKICAgICBzd2l0Y2ggKGl0ZW0tPmFjdGlvbigpKSB7CiAgICAgY2FzZSBDb250
ZXh0TWVudUl0ZW1UYWdPcGVuTGlua0luTmV3V2luZG93OgotICAgICAgICBvcGVuTmV3V2luZG93
KHJlc3VsdC5hYnNvbHV0ZUxpbmtVUkwoKSwgZnJhbWUpOworICAgICAgICBvcGVuTmV3V2luZG93
KG1faGl0VGVzdFJlc3VsdC5hYnNvbHV0ZUxpbmtVUkwoKSwgZnJhbWUpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0Rvd25sb2FkTGlua1RvRGlzazoKICAgICAg
ICAgLy8gRklYTUU6IFNvbWUgZGF5IHdlIHNob3VsZCBiZSBhYmxlIHRvIGRvIHRoaXMgZnJvbSB3
aXRoaW4gV2ViQ29yZS4KLSAgICAgICAgbV9jbGllbnQtPmRvd25sb2FkVVJMKHJlc3VsdC5hYnNv
bHV0ZUxpbmtVUkwoKSk7CisgICAgICAgIG1fY2xpZW50LT5kb3dubG9hZFVSTChtX2hpdFRlc3RS
ZXN1bHQuYWJzb2x1dGVMaW5rVVJMKCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENvbnRl
eHRNZW51SXRlbVRhZ0NvcHlMaW5rVG9DbGlwYm9hcmQ6Ci0gICAgICAgIGZyYW1lLT5lZGl0b3Io
KS0+Y29weVVSTChyZXN1bHQuYWJzb2x1dGVMaW5rVVJMKCksIHJlc3VsdC50ZXh0Q29udGVudCgp
KTsKKyAgICAgICAgZnJhbWUtPmVkaXRvcigpLT5jb3B5VVJMKG1faGl0VGVzdFJlc3VsdC5hYnNv
bHV0ZUxpbmtVUkwoKSwgbV9oaXRUZXN0UmVzdWx0LnRleHRDb250ZW50KCkpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5JbWFnZUluTmV3V2luZG93Ogot
ICAgICAgICBvcGVuTmV3V2luZG93KHJlc3VsdC5hYnNvbHV0ZUltYWdlVVJMKCksIGZyYW1lKTsK
KyAgICAgICAgb3Blbk5ld1dpbmRvdyhtX2hpdFRlc3RSZXN1bHQuYWJzb2x1dGVJbWFnZVVSTCgp
LCBmcmFtZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnRG93
bmxvYWRJbWFnZVRvRGlzazoKICAgICAgICAgLy8gRklYTUU6IFNvbWUgZGF5IHdlIHNob3VsZCBi
ZSBhYmxlIHRvIGRvIHRoaXMgZnJvbSB3aXRoaW4gV2ViQ29yZS4KLSAgICAgICAgbV9jbGllbnQt
PmRvd25sb2FkVVJMKHJlc3VsdC5hYnNvbHV0ZUltYWdlVVJMKCkpOworICAgICAgICBtX2NsaWVu
dC0+ZG93bmxvYWRVUkwobV9oaXRUZXN0UmVzdWx0LmFic29sdXRlSW1hZ2VVUkwoKSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQ29weUltYWdlVG9DbGlwYm9h
cmQ6CiAgICAgICAgIC8vIEZJWE1FOiBUaGUgUGFzdGVib2FyZCBjbGFzcyBpcyBub3Qgd3JpdHRl
biB5ZXQKICAgICAgICAgLy8gRm9yIG5vdywgY2FsbCBpbnRvIHRoZSBjbGllbnQuIFRoaXMgaXMg
dGVtcG9yYXJ5IQotICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPmNvcHlJbWFnZShyZXN1bHQpOwor
ICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPmNvcHlJbWFnZShtX2hpdFRlc3RSZXN1bHQpOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5NZWRpYUluTmV3V2lu
ZG93OgotICAgICAgICBvcGVuTmV3V2luZG93KHJlc3VsdC5hYnNvbHV0ZU1lZGlhVVJMKCksIGZy
YW1lKTsKKyAgICAgICAgb3Blbk5ld1dpbmRvdyhtX2hpdFRlc3RSZXN1bHQuYWJzb2x1dGVNZWRp
YVVSTCgpLCBmcmFtZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ29udGV4dE1lbnVJdGVt
VGFnQ29weU1lZGlhTGlua1RvQ2xpcGJvYXJkOgotICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPmNv
cHlVUkwocmVzdWx0LmFic29sdXRlTWVkaWFVUkwoKSwgcmVzdWx0LnRleHRDb250ZW50KCkpOwor
ICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPmNvcHlVUkwobV9oaXRUZXN0UmVzdWx0LmFic29sdXRl
TWVkaWFVUkwoKSwgbV9oaXRUZXN0UmVzdWx0LnRleHRDb250ZW50KCkpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1RvZ2dsZU1lZGlhQ29udHJvbHM6Ci0gICAg
ICAgIHJlc3VsdC50b2dnbGVNZWRpYUNvbnRyb2xzRGlzcGxheSgpOworICAgICAgICBtX2hpdFRl
c3RSZXN1bHQudG9nZ2xlTWVkaWFDb250cm9sc0Rpc3BsYXkoKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdUb2dnbGVNZWRpYUxvb3A6Ci0gICAgICAgIHJlc3Vs
dC50b2dnbGVNZWRpYUxvb3BQbGF5YmFjaygpOworICAgICAgICBtX2hpdFRlc3RSZXN1bHQudG9n
Z2xlTWVkaWFMb29wUGxheWJhY2soKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDb250ZXh0
TWVudUl0ZW1UYWdFbnRlclZpZGVvRnVsbHNjcmVlbjoKLSAgICAgICAgcmVzdWx0LmVudGVyRnVs
bHNjcmVlbkZvclZpZGVvKCk7CisgICAgICAgIG1faGl0VGVzdFJlc3VsdC5lbnRlckZ1bGxzY3Jl
ZW5Gb3JWaWRlbygpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRh
Z01lZGlhUGxheVBhdXNlOgotICAgICAgICByZXN1bHQudG9nZ2xlTWVkaWFQbGF5U3RhdGUoKTsK
KyAgICAgICAgbV9oaXRUZXN0UmVzdWx0LnRvZ2dsZU1lZGlhUGxheVN0YXRlKCk7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnTWVkaWFNdXRlOgotICAgICAgICBy
ZXN1bHQudG9nZ2xlTWVkaWFNdXRlU3RhdGUoKTsKKyAgICAgICAgbV9oaXRUZXN0UmVzdWx0LnRv
Z2dsZU1lZGlhTXV0ZVN0YXRlKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ29udGV4dE1l
bnVJdGVtVGFnT3BlbkZyYW1lSW5OZXdXaW5kb3c6IHsKICAgICAgICAgRG9jdW1lbnRMb2FkZXIq
IGxvYWRlciA9IGZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKTsKQEAgLTI3MywxMCAr
Mjg0LDEwIEBAIHZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjpjb250ZXh0TWVudUkKICAgICAg
ICAgbV9jbGllbnQtPmxvb2tVcEluRGljdGlvbmFyeShmcmFtZSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnT3Blbkxpbms6Ci0gICAgICAgIGlmIChGcmFtZSog
dGFyZ2V0RnJhbWUgPSByZXN1bHQudGFyZ2V0RnJhbWUoKSkKLSAgICAgICAgICAgIHRhcmdldEZy
YW1lLT5sb2FkZXIoKS0+bG9hZEZyYW1lUmVxdWVzdChGcmFtZUxvYWRSZXF1ZXN0KGZyYW1lLT5k
b2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLCBSZXNvdXJjZVJlcXVlc3QocmVzdWx0LmFic29s
dXRlTGlua1VSTCgpLCBmcmFtZS0+bG9hZGVyKCktPm91dGdvaW5nUmVmZXJyZXIoKSkpLCBmYWxz
ZSwgZmFsc2UsIDAsIDAsIFNlbmRSZWZlcnJlcik7CisgICAgICAgIGlmIChGcmFtZSogdGFyZ2V0
RnJhbWUgPSBtX2hpdFRlc3RSZXN1bHQudGFyZ2V0RnJhbWUoKSkKKyAgICAgICAgICAgIHRhcmdl
dEZyYW1lLT5sb2FkZXIoKS0+bG9hZEZyYW1lUmVxdWVzdChGcmFtZUxvYWRSZXF1ZXN0KGZyYW1l
LT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLCBSZXNvdXJjZVJlcXVlc3QobV9oaXRUZXN0
UmVzdWx0LmFic29sdXRlTGlua1VSTCgpLCBmcmFtZS0+bG9hZGVyKCktPm91dGdvaW5nUmVmZXJy
ZXIoKSkpLCBmYWxzZSwgZmFsc2UsIDAsIDAsIFNlbmRSZWZlcnJlcik7CiAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgIG9wZW5OZXdXaW5kb3cocmVzdWx0LmFic29sdXRlTGlua1VSTCgpLCBmcmFt
ZSk7CisgICAgICAgICAgICBvcGVuTmV3V2luZG93KG1faGl0VGVzdFJlc3VsdC5hYnNvbHV0ZUxp
bmtVUkwoKSwgZnJhbWUpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENvbnRleHRNZW51SXRl
bVRhZ0JvbGQ6CiAgICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZCgiVG9nZ2xlQm9sZCIp
LmV4ZWN1dGUoKTsKQEAgLTI5NSw3ICszMDYsNyBAQCB2b2lkIENvbnRleHRNZW51Q29udHJvbGxl
cjo6Y29udGV4dE1lbnVJCiAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7CiAgICAgICAgIFJlZlB0
cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS0+dG9Ob3JtYWxpemVk
UmFuZ2UoKTsKICAgICAgICAgaWYgKCFzZWxlY3RlZFJhbmdlIHx8IHNlbGVjdGVkUmFuZ2UtPmNv
bGxhcHNlZChlYykpIHsKLSAgICAgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHJlc3VsdC5p
bm5lck5vblNoYXJlZE5vZGUoKS0+ZG9jdW1lbnQoKTsKKyAgICAgICAgICAgIERvY3VtZW50KiBk
b2N1bWVudCA9IG1faGl0VGVzdFJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKS0+ZG9jdW1lbnQo
KTsKICAgICAgICAgICAgIHNlbGVjdGVkUmFuZ2UgPSBkb2N1bWVudC0+Y3JlYXRlUmFuZ2UoKTsK
ICAgICAgICAgICAgIHNlbGVjdGVkUmFuZ2UtPnNlbGVjdE5vZGUoZG9jdW1lbnQtPmRvY3VtZW50
RWxlbWVudCgpLCBlYyk7CiAgICAgICAgIH0KQEAgLTM4NSwxMyArMzk2LDEzIEBAIHZvaWQgQ29u
dGV4dE1lbnVDb250cm9sbGVyOjpjb250ZXh0TWVudUkKICAgICAgICAgZnJhbWUtPmVkaXRvcigp
LT50b2dnbGVBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb24oKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdDaGFuZ2VCYWNrOgotICAgICAgICBmcmFtZS0+ZWRp
dG9yKCktPmNoYW5nZUJhY2tUb1JlcGxhY2VkU3RyaW5nKHJlc3VsdC5yZXBsYWNlZFN0cmluZygp
KTsKKyAgICAgICAgZnJhbWUtPmVkaXRvcigpLT5jaGFuZ2VCYWNrVG9SZXBsYWNlZFN0cmluZyht
X2hpdFRlc3RSZXN1bHQucmVwbGFjZWRTdHJpbmcoKSk7CiAgICAgICAgIGJyZWFrOwogI2VuZGlm
CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0luc3Bl
Y3RFbGVtZW50OgogICAgICAgICBpZiAoUGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCkpCi0gICAg
ICAgICAgICBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmluc3BlY3QocmVzdWx0LmlubmVy
Tm9uU2hhcmVkTm9kZSgpKTsKKyAgICAgICAgICAgIHBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIo
KS0+aW5zcGVjdChtX2hpdFRlc3RSZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCkpOwogICAgICAg
ICBicmVhazsKICNlbmRpZgogICAgIGRlZmF1bHQ6CkBAIC0zOTksNiArNDEwLDgyOSBAQCB2b2lk
IENvbnRleHRNZW51Q29udHJvbGxlcjo6Y29udGV4dE1lbnVJCiAgICAgfQogfQogCit2b2lkIENv
bnRleHRNZW51Q29udHJvbGxlcjo6YXBwZW5kSXRlbShDb250ZXh0TWVudUl0ZW0mIG1lbnVJdGVt
LCBDb250ZXh0TWVudSogcGFyZW50TWVudSkKK3sKKyAgICBjaGVja09yRW5hYmxlSWZOZWVkZWQo
bWVudUl0ZW0pOworICAgIGlmIChwYXJlbnRNZW51KQorICAgICAgICBwYXJlbnRNZW51LT5hcHBl
bmRJdGVtKG1lbnVJdGVtKTsKK30KKworc3RhdGljIFBhc3NPd25QdHI8Q29udGV4dE1lbnVJdGVt
PiBzZXBhcmF0b3JJdGVtKCkKK3sKKyAgICByZXR1cm4gbmV3IENvbnRleHRNZW51SXRlbShTZXBh
cmF0b3JUeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdOb0FjdGlvbiwgU3RyaW5nKCkpOworfQorCit2
b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6Y3JlYXRlQW5kQXBwZW5kRm9udFN1Yk1lbnUoQ29u
dGV4dE1lbnVJdGVtJiBmb250TWVudUl0ZW0pCit7CisgICAgQ29udGV4dE1lbnUgZm9udE1lbnU7
CisKKyNpZiBQTEFURk9STShNQUMpCisgICAgQ29udGV4dE1lbnVJdGVtIHNob3dGb250cyhBY3Rp
b25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTaG93Rm9udHMsIGNvbnRleHRNZW51SXRlbVRhZ1No
b3dGb250cygpKTsKKyNlbmRpZgorICAgIENvbnRleHRNZW51SXRlbSBib2xkKENoZWNrYWJsZUFj
dGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0JvbGQsIGNvbnRleHRNZW51SXRlbVRhZ0JvbGQo
KSk7CisgICAgQ29udGV4dE1lbnVJdGVtIGl0YWxpYyhDaGVja2FibGVBY3Rpb25UeXBlLCBDb250
ZXh0TWVudUl0ZW1UYWdJdGFsaWMsIGNvbnRleHRNZW51SXRlbVRhZ0l0YWxpYygpKTsKKyAgICBD
b250ZXh0TWVudUl0ZW0gdW5kZXJsaW5lKENoZWNrYWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51
SXRlbVRhZ1VuZGVybGluZSwgY29udGV4dE1lbnVJdGVtVGFnVW5kZXJsaW5lKCkpOworICAgIENv
bnRleHRNZW51SXRlbSBvdXRsaW5lKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ091dGxp
bmUsIGNvbnRleHRNZW51SXRlbVRhZ091dGxpbmUoKSk7CisjaWYgUExBVEZPUk0oTUFDKQorICAg
IENvbnRleHRNZW51SXRlbSBzdHlsZXMoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU3R5
bGVzLCBjb250ZXh0TWVudUl0ZW1UYWdTdHlsZXMoKSk7CisgICAgQ29udGV4dE1lbnVJdGVtIHNo
b3dDb2xvcnMoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU2hvd0NvbG9ycywgY29udGV4
dE1lbnVJdGVtVGFnU2hvd0NvbG9ycygpKTsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oTUFDKQor
ICAgIGFwcGVuZEl0ZW0oc2hvd0ZvbnRzLCAmZm9udE1lbnUpOworI2VuZGlmCisgICAgYXBwZW5k
SXRlbShib2xkLCAmZm9udE1lbnUpOworICAgIGFwcGVuZEl0ZW0oaXRhbGljLCAmZm9udE1lbnUp
OworICAgIGFwcGVuZEl0ZW0odW5kZXJsaW5lLCAmZm9udE1lbnUpOworICAgIGFwcGVuZEl0ZW0o
b3V0bGluZSwgJmZvbnRNZW51KTsKKyNpZiBQTEFURk9STShNQUMpCisgICAgYXBwZW5kSXRlbShz
dHlsZXMsICZmb250TWVudSk7CisgICAgYXBwZW5kSXRlbSgqc2VwYXJhdG9ySXRlbSgpLCAmZm9u
dE1lbnUpOworICAgIGFwcGVuZEl0ZW0oc2hvd0NvbG9ycywgJmZvbnRNZW51KTsKKyNlbmRpZgor
CisgICAgZm9udE1lbnVJdGVtLnNldFN1Yk1lbnUoJmZvbnRNZW51KTsKK30KKworI2lmICFkZWZp
bmVkKEJVSUxESU5HX09OX1RJR0VSKQorCisjaWYgIVBMQVRGT1JNKEdUSykKKwordm9pZCBDb250
ZXh0TWVudUNvbnRyb2xsZXI6OmNyZWF0ZUFuZEFwcGVuZFNwZWxsaW5nQW5kR3JhbW1hclN1Yk1l
bnUoQ29udGV4dE1lbnVJdGVtJiBzcGVsbGluZ0FuZEdyYW1tYXJNZW51SXRlbSkKK3sKKyAgICBD
b250ZXh0TWVudSBzcGVsbGluZ0FuZEdyYW1tYXJNZW51OworCisgICAgQ29udGV4dE1lbnVJdGVt
IHNob3dTcGVsbGluZ1BhbmVsKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1Nob3dTcGVs
bGluZ1BhbmVsLCAKKyAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnU2hvd1NwZWxsaW5nUGFuZWwo
dHJ1ZSkpOworICAgIENvbnRleHRNZW51SXRlbSBjaGVja1NwZWxsaW5nKEFjdGlvblR5cGUsIENv
bnRleHRNZW51SXRlbVRhZ0NoZWNrU3BlbGxpbmcsIAorICAgICAgICBjb250ZXh0TWVudUl0ZW1U
YWdDaGVja1NwZWxsaW5nKCkpOworICAgIENvbnRleHRNZW51SXRlbSBjaGVja0FzWW91VHlwZShD
aGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdDaGVja1NwZWxsaW5nV2hpbGVU
eXBpbmcsIAorICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdDaGVja1NwZWxsaW5nV2hpbGVUeXBp
bmcoKSk7CisgICAgQ29udGV4dE1lbnVJdGVtIGdyYW1tYXJXaXRoU3BlbGxpbmcoQ2hlY2thYmxl
QWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnQ2hlY2tHcmFtbWFyV2l0aFNwZWxsaW5nLCAK
KyAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnQ2hlY2tHcmFtbWFyV2l0aFNwZWxsaW5nKCkpOwor
I2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKKyAgICBD
b250ZXh0TWVudUl0ZW0gY29ycmVjdFNwZWxsaW5nKENoZWNrYWJsZUFjdGlvblR5cGUsIENvbnRl
eHRNZW51SXRlbVRhZ0NvcnJlY3RTcGVsbGluZ0F1dG9tYXRpY2FsbHksIAorICAgICAgICBjb250
ZXh0TWVudUl0ZW1UYWdDb3JyZWN0U3BlbGxpbmdBdXRvbWF0aWNhbGx5KCkpOworI2VuZGlmCisK
KyAgICBhcHBlbmRJdGVtKHNob3dTcGVsbGluZ1BhbmVsLCAmc3BlbGxpbmdBbmRHcmFtbWFyTWVu
dSk7CisgICAgYXBwZW5kSXRlbShjaGVja1NwZWxsaW5nLCAmc3BlbGxpbmdBbmRHcmFtbWFyTWVu
dSk7CisjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQor
ICAgIGFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSwgJnNwZWxsaW5nQW5kR3JhbW1hck1lbnUp
OworI2VuZGlmCisgICAgYXBwZW5kSXRlbShjaGVja0FzWW91VHlwZSwgJnNwZWxsaW5nQW5kR3Jh
bW1hck1lbnUpOworICAgIGFwcGVuZEl0ZW0oZ3JhbW1hcldpdGhTcGVsbGluZywgJnNwZWxsaW5n
QW5kR3JhbW1hck1lbnUpOworI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdf
T05fTEVPUEFSRCkKKyAgICBhcHBlbmRJdGVtKGNvcnJlY3RTcGVsbGluZywgJnNwZWxsaW5nQW5k
R3JhbW1hck1lbnUpOworI2VuZGlmCisKKyAgICBzcGVsbGluZ0FuZEdyYW1tYXJNZW51SXRlbS5z
ZXRTdWJNZW51KCZzcGVsbGluZ0FuZEdyYW1tYXJNZW51KTsKK30KKworI2VuZGlmIC8vICFQTEFU
Rk9STShHVEspCisKKyNlbHNlCisKK3ZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjpjcmVhdGVB
bmRBcHBlbmRTcGVsbGluZ0FuZEdyYW1tYXJTdWJNZW51KENvbnRleHRNZW51SXRlbSYgc3BlbGxp
bmdBbmRHcmFtbWFyTWVudUl0ZW0pCit7CisgICAgQ29udGV4dE1lbnUgc3BlbGxpbmdNZW51Owor
CisgICAgQ29udGV4dE1lbnVJdGVtIHNob3dTcGVsbGluZ1BhbmVsKEFjdGlvblR5cGUsIENvbnRl
eHRNZW51SXRlbVRhZ1Nob3dTcGVsbGluZ1BhbmVsLCAKKyAgICAgICAgY29udGV4dE1lbnVJdGVt
VGFnU2hvd1NwZWxsaW5nUGFuZWwodHJ1ZSkpOworICAgIENvbnRleHRNZW51SXRlbSBjaGVja1Nw
ZWxsaW5nKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0NoZWNrU3BlbGxpbmcsIAorICAg
ICAgICBjb250ZXh0TWVudUl0ZW1UYWdDaGVja1NwZWxsaW5nKCkpOworICAgIENvbnRleHRNZW51
SXRlbSBjaGVja0FzWW91VHlwZShDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1U
YWdDaGVja1NwZWxsaW5nV2hpbGVUeXBpbmcsIAorICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdD
aGVja1NwZWxsaW5nV2hpbGVUeXBpbmcoKSk7CisKKyAgICBhcHBlbmRJdGVtKHNob3dTcGVsbGlu
Z1BhbmVsLCAmc3BlbGxpbmdNZW51KTsKKyAgICBhcHBlbmRJdGVtKGNoZWNrU3BlbGxpbmcsICZz
cGVsbGluZ01lbnUpOworICAgIGFwcGVuZEl0ZW0oY2hlY2tBc1lvdVR5cGUsICZzcGVsbGluZ01l
bnUpOworCisgICAgc3BlbGxpbmdNZW51SXRlbS5zZXRTdWJNZW51KCZzcGVsbGluZ01lbnUpOwor
fQorCisjZW5kaWYKKworI2lmIFBMQVRGT1JNKE1BQykKKwordm9pZCBDb250ZXh0TWVudUNvbnRy
b2xsZXI6OmNyZWF0ZUFuZEFwcGVuZFNwZWVjaFN1Yk1lbnUoQ29udGV4dE1lbnVJdGVtJiBzcGVl
Y2hNZW51SXRlbSkKK3sKKyAgICBDb250ZXh0TWVudSBzcGVlY2hNZW51OworCisgICAgQ29udGV4
dE1lbnVJdGVtIHN0YXJ0KEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1N0YXJ0U3BlYWtp
bmcsIGNvbnRleHRNZW51SXRlbVRhZ1N0YXJ0U3BlYWtpbmcoKSk7CisgICAgQ29udGV4dE1lbnVJ
dGVtIHN0b3AoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU3RvcFNwZWFraW5nLCBjb250
ZXh0TWVudUl0ZW1UYWdTdG9wU3BlYWtpbmcoKSk7CisKKyAgICBhcHBlbmRJdGVtKHN0YXJ0LCAm
c3BlZWNoTWVudSk7CisgICAgYXBwZW5kSXRlbShzdG9wLCAmc3BlZWNoTWVudSk7CisKKyAgICBz
cGVlY2hNZW51SXRlbS5zZXRTdWJNZW51KCZzcGVlY2hNZW51KTsKK30KKworI2VuZGlmCisgCisj
aWYgIVBMQVRGT1JNKEdUSykKKwordm9pZCBDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNyZWF0ZUFu
ZEFwcGVuZFdyaXRpbmdEaXJlY3Rpb25TdWJNZW51KENvbnRleHRNZW51SXRlbSYgd3JpdGluZ0Rp
cmVjdGlvbk1lbnVJdGVtKQoreworICAgIENvbnRleHRNZW51IHdyaXRpbmdEaXJlY3Rpb25NZW51
OworCisgICAgQ29udGV4dE1lbnVJdGVtIGRlZmF1bHRJdGVtKEFjdGlvblR5cGUsIENvbnRleHRN
ZW51SXRlbVRhZ0RlZmF1bHREaXJlY3Rpb24sIAorICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdE
ZWZhdWx0RGlyZWN0aW9uKCkpOworICAgIENvbnRleHRNZW51SXRlbSBsdHIoQ2hlY2thYmxlQWN0
aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnTGVmdFRvUmlnaHQsIGNvbnRleHRNZW51SXRlbVRh
Z0xlZnRUb1JpZ2h0KCkpOworICAgIENvbnRleHRNZW51SXRlbSBydGwoQ2hlY2thYmxlQWN0aW9u
VHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnUmlnaHRUb0xlZnQsIGNvbnRleHRNZW51SXRlbVRhZ1Jp
Z2h0VG9MZWZ0KCkpOworCisgICAgYXBwZW5kSXRlbShkZWZhdWx0SXRlbSwgJndyaXRpbmdEaXJl
Y3Rpb25NZW51KTsKKyAgICBhcHBlbmRJdGVtKGx0ciwgJndyaXRpbmdEaXJlY3Rpb25NZW51KTsK
KyAgICBhcHBlbmRJdGVtKHJ0bCwgJndyaXRpbmdEaXJlY3Rpb25NZW51KTsKKworICAgIHdyaXRp
bmdEaXJlY3Rpb25NZW51SXRlbS5zZXRTdWJNZW51KCZ3cml0aW5nRGlyZWN0aW9uTWVudSk7Cit9
CisKK3ZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjpjcmVhdGVBbmRBcHBlbmRUZXh0RGlyZWN0
aW9uU3ViTWVudShDb250ZXh0TWVudUl0ZW0mIHRleHREaXJlY3Rpb25NZW51SXRlbSkKK3sKKyAg
ICBDb250ZXh0TWVudSB0ZXh0RGlyZWN0aW9uTWVudTsKKworICAgIENvbnRleHRNZW51SXRlbSBk
ZWZhdWx0SXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdUZXh0RGlyZWN0aW9uRGVm
YXVsdCwgY29udGV4dE1lbnVJdGVtVGFnRGVmYXVsdERpcmVjdGlvbigpKTsKKyAgICBDb250ZXh0
TWVudUl0ZW0gbHRyKENoZWNrYWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1RleHRE
aXJlY3Rpb25MZWZ0VG9SaWdodCwgY29udGV4dE1lbnVJdGVtVGFnTGVmdFRvUmlnaHQoKSk7Cisg
ICAgQ29udGV4dE1lbnVJdGVtIHJ0bChDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0
ZW1UYWdUZXh0RGlyZWN0aW9uUmlnaHRUb0xlZnQsIGNvbnRleHRNZW51SXRlbVRhZ1JpZ2h0VG9M
ZWZ0KCkpOworCisgICAgYXBwZW5kSXRlbShkZWZhdWx0SXRlbSwgJnRleHREaXJlY3Rpb25NZW51
KTsKKyAgICBhcHBlbmRJdGVtKGx0ciwgJnRleHREaXJlY3Rpb25NZW51KTsKKyAgICBhcHBlbmRJ
dGVtKHJ0bCwgJnRleHREaXJlY3Rpb25NZW51KTsKKworICAgIHRleHREaXJlY3Rpb25NZW51SXRl
bS5zZXRTdWJNZW51KCZ0ZXh0RGlyZWN0aW9uTWVudSk7Cit9CisKKyNlbmRpZgorCisjaWYgUExB
VEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJ
TERJTkdfT05fTEVPUEFSRCkKKwordm9pZCBDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNyZWF0ZUFu
ZEFwcGVuZFN1YnN0aXR1dGlvbnNTdWJNZW51KENvbnRleHRNZW51SXRlbSYgc3Vic3RpdHV0aW9u
c01lbnVJdGVtKQoreworICAgIENvbnRleHRNZW51IHN1YnN0aXR1dGlvbnNNZW51OworCisgICAg
Q29udGV4dE1lbnVJdGVtIHNob3dTdWJzdGl0dXRpb25zKEFjdGlvblR5cGUsIENvbnRleHRNZW51
SXRlbVRhZ1Nob3dTdWJzdGl0dXRpb25zLCBjb250ZXh0TWVudUl0ZW1UYWdTaG93U3Vic3RpdHV0
aW9ucyh0cnVlKSk7CisgICAgQ29udGV4dE1lbnVJdGVtIHNtYXJ0Q29weVBhc3RlKENoZWNrYWJs
ZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1NtYXJ0Q29weVBhc3RlLCBjb250ZXh0TWVu
dUl0ZW1UYWdTbWFydENvcHlQYXN0ZSgpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gc21hcnRRdW90
ZXMoQ2hlY2thYmxlQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU21hcnRRdW90ZXMsIGNv
bnRleHRNZW51SXRlbVRhZ1NtYXJ0UXVvdGVzKCkpOworICAgIENvbnRleHRNZW51SXRlbSBzbWFy
dERhc2hlcyhDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTbWFydERhc2hl
cywgY29udGV4dE1lbnVJdGVtVGFnU21hcnREYXNoZXMoKSk7CisgICAgQ29udGV4dE1lbnVJdGVt
IHNtYXJ0TGlua3MoQ2hlY2thYmxlQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU21hcnRM
aW5rcywgY29udGV4dE1lbnVJdGVtVGFnU21hcnRMaW5rcygpKTsKKyAgICBDb250ZXh0TWVudUl0
ZW0gdGV4dFJlcGxhY2VtZW50KENoZWNrYWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRh
Z1RleHRSZXBsYWNlbWVudCwgY29udGV4dE1lbnVJdGVtVGFnVGV4dFJlcGxhY2VtZW50KCkpOwor
CisgICAgYXBwZW5kSXRlbShzaG93U3Vic3RpdHV0aW9ucywgJnN1YnN0aXR1dGlvbnNNZW51KTsK
KyAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCksICZzdWJzdGl0dXRpb25zTWVudSk7Cisg
ICAgYXBwZW5kSXRlbShzbWFydENvcHlQYXN0ZSwgJnN1YnN0aXR1dGlvbnNNZW51KTsKKyAgICBh
cHBlbmRJdGVtKHNtYXJ0UXVvdGVzLCAmc3Vic3RpdHV0aW9uc01lbnUpOworICAgIGFwcGVuZEl0
ZW0oc21hcnREYXNoZXMsICZzdWJzdGl0dXRpb25zTWVudSk7CisgICAgYXBwZW5kSXRlbShzbWFy
dExpbmtzLCAmc3Vic3RpdHV0aW9uc01lbnUpOworICAgIGFwcGVuZEl0ZW0odGV4dFJlcGxhY2Vt
ZW50LCAmc3Vic3RpdHV0aW9uc01lbnUpOworCisgICAgc3Vic3RpdHV0aW9uc01lbnVJdGVtLnNl
dFN1Yk1lbnUoJnN1YnN0aXR1dGlvbnNNZW51KTsKK30KKwordm9pZCBDb250ZXh0TWVudUNvbnRy
b2xsZXI6OmNyZWF0ZUFuZEFwcGVuZFRyYW5zZm9ybWF0aW9uc1N1Yk1lbnUoQ29udGV4dE1lbnVJ
dGVtJiB0cmFuc2Zvcm1hdGlvbnNNZW51SXRlbSkKK3sKKyAgICBDb250ZXh0TWVudSB0cmFuc2Zv
cm1hdGlvbnNNZW51OworCisgICAgQ29udGV4dE1lbnVJdGVtIG1ha2VVcHBlckNhc2UoQWN0aW9u
VHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnTWFrZVVwcGVyQ2FzZSwgY29udGV4dE1lbnVJdGVtVGFn
TWFrZVVwcGVyQ2FzZSgpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gbWFrZUxvd2VyQ2FzZShBY3Rp
b25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdNYWtlTG93ZXJDYXNlLCBjb250ZXh0TWVudUl0ZW1U
YWdNYWtlTG93ZXJDYXNlKCkpOworICAgIENvbnRleHRNZW51SXRlbSBjYXBpdGFsaXplKEFjdGlv
blR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0NhcGl0YWxpemUsIGNvbnRleHRNZW51SXRlbVRhZ0Nh
cGl0YWxpemUoKSk7CisKKyAgICBhcHBlbmRJdGVtKG1ha2VVcHBlckNhc2UsICZ0cmFuc2Zvcm1h
dGlvbnNNZW51KTsKKyAgICBhcHBlbmRJdGVtKG1ha2VMb3dlckNhc2UsICZ0cmFuc2Zvcm1hdGlv
bnNNZW51KTsKKyAgICBhcHBlbmRJdGVtKGNhcGl0YWxpemUsICZ0cmFuc2Zvcm1hdGlvbnNNZW51
KTsKKworICAgIHRyYW5zZm9ybWF0aW9uc01lbnVJdGVtLnNldFN1Yk1lbnUoJnRyYW5zZm9ybWF0
aW9uc01lbnUpOworfQorCisjZW5kaWYKKworc3RhdGljIGJvb2wgc2VsZWN0aW9uQ29udGFpbnNQ
b3NzaWJsZVdvcmQoRnJhbWUqIGZyYW1lKQoreworICAgIC8vIEN1cnJlbnQgYWxnb3JpdGhtOiBs
b29rIGZvciBhIGNoYXJhY3RlciB0aGF0J3Mgbm90IGp1c3QgYSBzZXBhcmF0b3IuCisgICAgZm9y
IChUZXh0SXRlcmF0b3IgaXQoZnJhbWUtPnNlbGVjdGlvbigpLT50b05vcm1hbGl6ZWRSYW5nZSgp
LmdldCgpKTsgIWl0LmF0RW5kKCk7IGl0LmFkdmFuY2UoKSkgeworICAgICAgICBpbnQgbGVuZ3Ro
ID0gaXQubGVuZ3RoKCk7CisgICAgICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0gaXQuY2hh
cmFjdGVycygpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQorICAg
ICAgICAgICAgaWYgKCEoY2F0ZWdvcnkoY2hhcmFjdGVyc1tpXSkgJiAoU2VwYXJhdG9yX1NwYWNl
IHwgU2VwYXJhdG9yX0xpbmUgfCBTZXBhcmF0b3JfUGFyYWdyYXBoKSkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBDb250
ZXh0TWVudUNvbnRyb2xsZXI6OnBvcHVsYXRlKCkKK3sKKyAgICBDb250ZXh0TWVudUl0ZW0gT3Bl
bkxpbmtJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ09wZW5MaW5rLCBjb250ZXh0
TWVudUl0ZW1UYWdPcGVuTGluaygpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gT3BlbkxpbmtJbk5l
d1dpbmRvd0l0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnT3BlbkxpbmtJbk5ld1dp
bmRvdywgCisgICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ09wZW5MaW5rSW5OZXdXaW5kb3coKSk7
CisgICAgQ29udGV4dE1lbnVJdGVtIERvd25sb2FkRmlsZUl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4
dE1lbnVJdGVtVGFnRG93bmxvYWRMaW5rVG9EaXNrLCAKKyAgICAgICAgY29udGV4dE1lbnVJdGVt
VGFnRG93bmxvYWRMaW5rVG9EaXNrKCkpOworICAgIENvbnRleHRNZW51SXRlbSBDb3B5TGlua0l0
ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnQ29weUxpbmtUb0NsaXBib2FyZCwgCisg
ICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ0NvcHlMaW5rVG9DbGlwYm9hcmQoKSk7CisgICAgQ29u
dGV4dE1lbnVJdGVtIE9wZW5JbWFnZUluTmV3V2luZG93SXRlbShBY3Rpb25UeXBlLCBDb250ZXh0
TWVudUl0ZW1UYWdPcGVuSW1hZ2VJbk5ld1dpbmRvdywgCisgICAgICAgIGNvbnRleHRNZW51SXRl
bVRhZ09wZW5JbWFnZUluTmV3V2luZG93KCkpOworICAgIENvbnRleHRNZW51SXRlbSBEb3dubG9h
ZEltYWdlSXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdEb3dubG9hZEltYWdlVG9E
aXNrLCAKKyAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnRG93bmxvYWRJbWFnZVRvRGlzaygpKTsK
KyAgICBDb250ZXh0TWVudUl0ZW0gQ29weUltYWdlSXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVu
dUl0ZW1UYWdDb3B5SW1hZ2VUb0NsaXBib2FyZCwgCisgICAgICAgIGNvbnRleHRNZW51SXRlbVRh
Z0NvcHlJbWFnZVRvQ2xpcGJvYXJkKCkpOworICAgIENvbnRleHRNZW51SXRlbSBPcGVuTWVkaWFJ
bk5ld1dpbmRvd0l0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnT3Blbk1lZGlhSW5O
ZXdXaW5kb3csIFN0cmluZygpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gQ29weU1lZGlhTGlua0l0
ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnQ29weU1lZGlhTGlua1RvQ2xpcGJvYXJk
LCAKKyAgICAgICAgU3RyaW5nKCkpOworICAgIENvbnRleHRNZW51SXRlbSBNZWRpYVBsYXlQYXVz
ZShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdNZWRpYVBsYXlQYXVzZSwgCisgICAgICAg
IGNvbnRleHRNZW51SXRlbVRhZ01lZGlhUGxheSgpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gTWVk
aWFNdXRlKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ01lZGlhTXV0ZSwgCisgICAgICAg
IGNvbnRleHRNZW51SXRlbVRhZ01lZGlhTXV0ZSgpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gVG9n
Z2xlTWVkaWFDb250cm9scyhDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdU
b2dnbGVNZWRpYUNvbnRyb2xzLCAKKyAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnVG9nZ2xlTWVk
aWFDb250cm9scygpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gVG9nZ2xlTWVkaWFMb29wKENoZWNr
YWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1RvZ2dsZU1lZGlhTG9vcCwgCisgICAg
ICAgIGNvbnRleHRNZW51SXRlbVRhZ1RvZ2dsZU1lZGlhTG9vcCgpKTsKKyAgICBDb250ZXh0TWVu
dUl0ZW0gRW50ZXJWaWRlb0Z1bGxzY3JlZW4oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFn
RW50ZXJWaWRlb0Z1bGxzY3JlZW4sIAorICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdFbnRlclZp
ZGVvRnVsbHNjcmVlbigpKTsKKyNpZiBQTEFURk9STShNQUMpCisgICAgQ29udGV4dE1lbnVJdGVt
IFNlYXJjaFNwb3RsaWdodEl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU2VhcmNo
SW5TcG90bGlnaHQsIAorICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdTZWFyY2hJblNwb3RsaWdo
dCgpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gTG9va0luRGljdGlvbmFyeUl0ZW0oQWN0aW9uVHlw
ZSwgQ29udGV4dE1lbnVJdGVtVGFnTG9va1VwSW5EaWN0aW9uYXJ5LCAKKyAgICAgICAgY29udGV4
dE1lbnVJdGVtVGFnTG9va1VwSW5EaWN0aW9uYXJ5KCkpOworI2VuZGlmCisjaWYgIVBMQVRGT1JN
KEdUSykKKyAgICBDb250ZXh0TWVudUl0ZW0gU2VhcmNoV2ViSXRlbShBY3Rpb25UeXBlLCBDb250
ZXh0TWVudUl0ZW1UYWdTZWFyY2hXZWIsIGNvbnRleHRNZW51SXRlbVRhZ1NlYXJjaFdlYigpKTsK
KyNlbmRpZgorICAgIENvbnRleHRNZW51SXRlbSBDb3B5SXRlbShBY3Rpb25UeXBlLCBDb250ZXh0
TWVudUl0ZW1UYWdDb3B5LCBjb250ZXh0TWVudUl0ZW1UYWdDb3B5KCkpOworICAgIENvbnRleHRN
ZW51SXRlbSBCYWNrSXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdHb0JhY2ssIGNv
bnRleHRNZW51SXRlbVRhZ0dvQmFjaygpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gRm9yd2FyZEl0
ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnR29Gb3J3YXJkLCAgY29udGV4dE1lbnVJ
dGVtVGFnR29Gb3J3YXJkKCkpOworICAgIENvbnRleHRNZW51SXRlbSBTdG9wSXRlbShBY3Rpb25U
eXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTdG9wLCBjb250ZXh0TWVudUl0ZW1UYWdTdG9wKCkpOwor
ICAgIENvbnRleHRNZW51SXRlbSBSZWxvYWRJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRl
bVRhZ1JlbG9hZCwgY29udGV4dE1lbnVJdGVtVGFnUmVsb2FkKCkpOworICAgIENvbnRleHRNZW51
SXRlbSBPcGVuRnJhbWVJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ09wZW5GcmFt
ZUluTmV3V2luZG93LCAKKyAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnT3BlbkZyYW1lSW5OZXdX
aW5kb3coKSk7CisgICAgQ29udGV4dE1lbnVJdGVtIE5vR3Vlc3Nlc0l0ZW0oQWN0aW9uVHlwZSwg
Q29udGV4dE1lbnVJdGVtVGFnTm9HdWVzc2VzRm91bmQsIAorICAgICAgICBjb250ZXh0TWVudUl0
ZW1UYWdOb0d1ZXNzZXNGb3VuZCgpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gSWdub3JlU3BlbGxp
bmdJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0lnbm9yZVNwZWxsaW5nLCAKKyAg
ICAgICAgY29udGV4dE1lbnVJdGVtVGFnSWdub3JlU3BlbGxpbmcoKSk7CisgICAgQ29udGV4dE1l
bnVJdGVtIExlYXJuU3BlbGxpbmdJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0xl
YXJuU3BlbGxpbmcsIAorICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdMZWFyblNwZWxsaW5nKCkp
OworICAgIENvbnRleHRNZW51SXRlbSBJZ25vcmVHcmFtbWFySXRlbShBY3Rpb25UeXBlLCBDb250
ZXh0TWVudUl0ZW1UYWdJZ25vcmVHcmFtbWFyLCAKKyAgICAgICAgY29udGV4dE1lbnVJdGVtVGFn
SWdub3JlR3JhbW1hcigpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gQ3V0SXRlbShBY3Rpb25UeXBl
LCBDb250ZXh0TWVudUl0ZW1UYWdDdXQsIGNvbnRleHRNZW51SXRlbVRhZ0N1dCgpKTsKKyAgICBD
b250ZXh0TWVudUl0ZW0gUGFzdGVJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1Bh
c3RlLCBjb250ZXh0TWVudUl0ZW1UYWdQYXN0ZSgpKTsKKyNpZiBQTEFURk9STShHVEspCisgICAg
Q29udGV4dE1lbnVJdGVtIERlbGV0ZUl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFn
RGVsZXRlLCBjb250ZXh0TWVudUl0ZW1UYWdEZWxldGUoKSk7CisgICAgQ29udGV4dE1lbnVJdGVt
IFNlbGVjdEFsbEl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU2VsZWN0QWxsLCBj
b250ZXh0TWVudUl0ZW1UYWdTZWxlY3RBbGwoKSk7CisjZW5kaWYKKworICAgIE5vZGUqIG5vZGUg
PSBtX2hpdFRlc3RSZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCk7CisgICAgaWYgKCFub2RlKQor
ICAgICAgICByZXR1cm47CisjaWYgUExBVEZPUk0oR1RLKQorICAgIGlmICghbV9oaXRUZXN0UmVz
dWx0LmlzQ29udGVudEVkaXRhYmxlKCkgJiYgKG5vZGUtPmlzRWxlbWVudE5vZGUoKSAmJiBzdGF0
aWNfY2FzdDxFbGVtZW50Kj4obm9kZSktPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpKQorICAgICAg
ICByZXR1cm47CisjZW5kaWYKKyAgICBGcmFtZSogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLT5m
cmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9o
aXRUZXN0UmVzdWx0LmlzQ29udGVudEVkaXRhYmxlKCkpIHsKKyAgICAgICAgRnJhbWVMb2FkZXIq
IGxvYWRlciA9IGZyYW1lLT5sb2FkZXIoKTsKKyAgICAgICAgS1VSTCBsaW5rVVJMID0gbV9oaXRU
ZXN0UmVzdWx0LmFic29sdXRlTGlua1VSTCgpOworICAgICAgICBpZiAoIWxpbmtVUkwuaXNFbXB0
eSgpKSB7CisgICAgICAgICAgICBpZiAobG9hZGVyLT5jYW5IYW5kbGVSZXF1ZXN0KFJlc291cmNl
UmVxdWVzdChsaW5rVVJMKSkpIHsKKyAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKE9wZW5MaW5r
SXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAgICAgICAgICAgYXBwZW5kSXRlbShP
cGVuTGlua0luTmV3V2luZG93SXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAgICAg
ICAgICAgYXBwZW5kSXRlbShEb3dubG9hZEZpbGVJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFwcGVuZEl0ZW0oQ29weUxpbmtJdGVtLCBtX2Nv
bnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIEtVUkwgaW1hZ2VVUkwgPSBt
X2hpdFRlc3RSZXN1bHQuYWJzb2x1dGVJbWFnZVVSTCgpOworICAgICAgICBpZiAoIWltYWdlVVJM
LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgaWYgKCFsaW5rVVJMLmlzRW1wdHkoKSkKKyAgICAg
ICAgICAgICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCksIG1fY29udGV4dE1lbnUuZ2V0
KCkpOworCisgICAgICAgICAgICBhcHBlbmRJdGVtKE9wZW5JbWFnZUluTmV3V2luZG93SXRlbSwg
bV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAgICAgICBhcHBlbmRJdGVtKERvd25sb2FkSW1h
Z2VJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgICAgIGlmIChpbWFnZVVSTC5p
c0xvY2FsRmlsZSgpIHx8IG1faGl0VGVzdFJlc3VsdC5pbWFnZSgpKQorICAgICAgICAgICAgICAg
IGFwcGVuZEl0ZW0oQ29weUltYWdlSXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAg
IH0KKworICAgICAgICBLVVJMIG1lZGlhVVJMID0gbV9oaXRUZXN0UmVzdWx0LmFic29sdXRlTWVk
aWFVUkwoKTsKKyAgICAgICAgaWYgKCFtZWRpYVVSTC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAg
IGlmICghbGlua1VSTC5pc0VtcHR5KCkgfHwgIWltYWdlVVJMLmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCksIG1fY29udGV4dE1lbnUuZ2V0KCkp
OworCisgICAgICAgICAgICBhcHBlbmRJdGVtKE1lZGlhUGxheVBhdXNlLCBtX2NvbnRleHRNZW51
LmdldCgpKTsKKyAgICAgICAgICAgIGFwcGVuZEl0ZW0oTWVkaWFNdXRlLCBtX2NvbnRleHRNZW51
LmdldCgpKTsKKyAgICAgICAgICAgIGFwcGVuZEl0ZW0oVG9nZ2xlTWVkaWFDb250cm9scywgbV9j
b250ZXh0TWVudS5nZXQoKSk7CisgICAgICAgICAgICBhcHBlbmRJdGVtKFRvZ2dsZU1lZGlhTG9v
cCwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAgICAgICBhcHBlbmRJdGVtKEVudGVyVmlk
ZW9GdWxsc2NyZWVuLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKworICAgICAgICAgICAgYXBwZW5k
SXRlbSgqc2VwYXJhdG9ySXRlbSgpLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgICAg
IGFwcGVuZEl0ZW0oQ29weU1lZGlhTGlua0l0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOworICAg
ICAgICAgICAgYXBwZW5kSXRlbShPcGVuTWVkaWFJbk5ld1dpbmRvd0l0ZW0sIG1fY29udGV4dE1l
bnUuZ2V0KCkpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGltYWdlVVJMLmlzRW1wdHkoKSAm
JiBsaW5rVVJMLmlzRW1wdHkoKSAmJiBtZWRpYVVSTC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAg
IGlmIChtX2hpdFRlc3RSZXN1bHQuaXNTZWxlY3RlZCgpKSB7CisgICAgICAgICAgICAgICAgaWYg
KHNlbGVjdGlvbkNvbnRhaW5zUG9zc2libGVXb3JkKGZyYW1lKSkgeworI2lmIFBMQVRGT1JNKE1B
QykKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kSXRlbShTZWFyY2hTcG90bGlnaHRJdGVtLCBt
X2NvbnRleHRNZW51LmdldCgpKTsKKyNlbmRpZgorI2lmICFQTEFURk9STShHVEspCisgICAgICAg
ICAgICAgICAgICAgIGFwcGVuZEl0ZW0oU2VhcmNoV2ViSXRlbSwgbV9jb250ZXh0TWVudS5nZXQo
KSk7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSwgbV9j
b250ZXh0TWVudS5nZXQoKSk7CisjZW5kaWYKKyNpZiBQTEFURk9STShNQUMpCisgICAgICAgICAg
ICAgICAgICAgIGFwcGVuZEl0ZW0oTG9va0luRGljdGlvbmFyeUl0ZW0sIG1fY29udGV4dE1lbnUu
Z2V0KCkpOworICAgICAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCks
IG1fY29udGV4dE1lbnUuZ2V0KCkpOworI2VuZGlmCisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGFwcGVuZEl0ZW0oQ29weUl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOworI2lm
IFBMQVRGT1JNKE1BQykKKyAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVt
KCksIG1fY29udGV4dE1lbnUuZ2V0KCkpOworICAgICAgICAgICAgICAgIENvbnRleHRNZW51SXRl
bSBTcGVlY2hNZW51SXRlbShTdWJtZW51VHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU3BlZWNoTWVu
dSwgY29udGV4dE1lbnVJdGVtVGFnU3BlZWNoTWVudSgpKTsKKyAgICAgICAgICAgICAgICBjcmVh
dGVBbmRBcHBlbmRTcGVlY2hTdWJNZW51KFNwZWVjaE1lbnVJdGVtKTsKKyAgICAgICAgICAgICAg
ICBhcHBlbmRJdGVtKFNwZWVjaE1lbnVJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyNlbmRp
ZiAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIH0gZWxzZSB7CisjaWYgRU5BQkxFKElOU1BF
Q1RPUikKKyAgICAgICAgICAgICAgICBpZiAoIShmcmFtZS0+cGFnZSgpICYmIGZyYW1lLT5wYWdl
KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+aGFzSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQoKSkp
IHsKKyNlbmRpZgorICAgICAgICAgICAgICAgIGlmIChmcmFtZS0+cGFnZSgpICYmIGZyYW1lLT5w
YWdlKCktPmJhY2tGb3J3YXJkKCktPmNhbkdvQmFja09yRm9yd2FyZCgtMSkpCisgICAgICAgICAg
ICAgICAgICAgIGFwcGVuZEl0ZW0oQmFja0l0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOworCisg
ICAgICAgICAgICAgICAgaWYgKGZyYW1lLT5wYWdlKCkgJiYgZnJhbWUtPnBhZ2UoKS0+YmFja0Zv
cndhcmQoKS0+Y2FuR29CYWNrT3JGb3J3YXJkKDEpKQorICAgICAgICAgICAgICAgICAgICBhcHBl
bmRJdGVtKEZvcndhcmRJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKworICAgICAgICAgICAg
ICAgIC8vIHVzZSBpc0xvYWRpbmdJbkFQSVNlbnNlIHJhdGhlciB0aGFuIGlzTG9hZGluZyBiZWNh
dXNlIFN0b3AvUmVsb2FkIGFyZQorICAgICAgICAgICAgICAgIC8vIGludGVuZGVkIHRvIG1hdGNo
IFdlYktpdCdzIEFQSSwgbm90IFdlYkNvcmUncyBpbnRlcm5hbCBub3Rpb24gb2YgbG9hZGluZyBz
dGF0dXMKKyAgICAgICAgICAgICAgICBpZiAobG9hZGVyLT5kb2N1bWVudExvYWRlcigpLT5pc0xv
YWRpbmdJbkFQSVNlbnNlKCkpCisgICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oU3RvcEl0
ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgYXBwZW5kSXRlbShSZWxvYWRJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsK
KyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorICAgICAgICAgICAgICAgIH0KKyNlbmRpZgorCisgICAg
ICAgICAgICAgICAgaWYgKGZyYW1lLT5wYWdlKCkgJiYgZnJhbWUgIT0gZnJhbWUtPnBhZ2UoKS0+
bWFpbkZyYW1lKCkpCisgICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oT3BlbkZyYW1lSXRl
bSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
IGVsc2UgeyAvLyBNYWtlIGFuIGVkaXRpbmcgY29udGV4dCBtZW51CisgICAgICAgIFNlbGVjdGlv
bkNvbnRyb2xsZXIqIHNlbGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKTsKKyAgICAgICAgYm9v
bCBpblBhc3N3b3JkRmllbGQgPSBzZWxlY3Rpb24tPmlzSW5QYXNzd29yZEZpZWxkKCk7CisgICAg
ICAgIGJvb2wgc3BlbGxDaGVja2luZ0VuYWJsZWQgPSBmcmFtZS0+ZWRpdG9yKCktPmlzU3BlbGxD
aGVja2luZ0VuYWJsZWRGb3Iobm9kZSk7CisgICAgICAgIAorICAgICAgICBpZiAoIWluUGFzc3dv
cmRGaWVsZCAmJiBzcGVsbENoZWNraW5nRW5hYmxlZCkgeworICAgICAgICAgICAgLy8gQ29uc2lk
ZXIgYWRkaW5nIHNwZWxsaW5nLXJlbGF0ZWQgb3IgZ3JhbW1hci1yZWxhdGVkIGNvbnRleHQgbWVu
dSBpdGVtcyAobmV2ZXIgYm90aCwgc2luY2UgYSBzaW5nbGUgc2VsZWN0ZWQgcmFuZ2UKKyAgICAg
ICAgICAgIC8vIGlzIG5ldmVyIGNvbnNpZGVyZWQgYSBtaXNzcGVsbGluZyBhbmQgYmFkIGdyYW1t
YXIgYXQgdGhlIHNhbWUgdGltZSkKKyAgICAgICAgICAgIGJvb2wgbWlzc3BlbGxpbmc7CisgICAg
ICAgICAgICBib29sIGJhZEdyYW1tYXI7CisgICAgICAgICAgICBWZWN0b3I8U3RyaW5nPiBndWVz
c2VzID0gZnJhbWUtPmVkaXRvcigpLT5ndWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNh
bFNlbGVjdGlvbihtaXNzcGVsbGluZywgYmFkR3JhbW1hcik7CisgICAgICAgICAgICBpZiAobWlz
c3BlbGxpbmcgfHwgYmFkR3JhbW1hcikgeworICAgICAgICAgICAgICAgIHNpemVfdCBzaXplID0g
Z3Vlc3Nlcy5zaXplKCk7CisgICAgICAgICAgICAgICAgaWYgKHNpemUgPT0gMCkgeworICAgICAg
ICAgICAgICAgICAgICAvLyBJZiB0aGVyZSdzIGJhZCBncmFtbWFyIGJ1dCBubyBzdWdnZXN0aW9u
cyAoZS5nLiwgcmVwZWF0ZWQgd29yZCksIGp1c3QgbGVhdmUgb2ZmIHRoZSBzdWdnZXN0aW9ucwor
ICAgICAgICAgICAgICAgICAgICAvLyBsaXN0IGFuZCB0cmFpbGluZyBzZXBhcmF0b3IgcmF0aGVy
IHRoYW4gYWRkaW5nIGEgIk5vIEd1ZXNzZXMgRm91bmQiIGl0ZW0gKG1hdGNoZXMgQXBwS2l0KQor
ICAgICAgICAgICAgICAgICAgICBpZiAobWlzc3BlbGxpbmcpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGFwcGVuZEl0ZW0oTm9HdWVzc2VzSXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCksIG1fY29u
dGV4dE1lbnUuZ2V0KCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNp
emU7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nICZndWVzcyA9
IGd1ZXNzZXNbaV07CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWd1ZXNzLmlzRW1wdHko
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRleHRNZW51SXRlbSBpdGVtKEFj
dGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1NwZWxsaW5nR3Vlc3MsIGd1ZXNzKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKGl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0
KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSwgbV9jb250ZXh0
TWVudS5nZXQoKSk7ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKG1pc3NwZWxsaW5nKSB7CisgICAgICAg
ICAgICAgICAgICAgIGFwcGVuZEl0ZW0oSWdub3JlU3BlbGxpbmdJdGVtLCBtX2NvbnRleHRNZW51
LmdldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kSXRlbShMZWFyblNwZWxsaW5nSXRl
bSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICAgICAgICAgIGFwcGVuZEl0ZW0oSWdub3JlR3JhbW1hckl0ZW0sIG1fY29udGV4dE1lbnUu
Z2V0KCkpOworICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSwgbV9j
b250ZXh0TWVudS5nZXQoKSk7CisjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElO
R19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHN0cmluZyB3YXMgYXV0b2NvcnJl
Y3RlZCwgZ2VuZXJhdGUgYSBjb250ZXh0dWFsIG1lbnUgaXRlbSBhbGxvd2luZyBpdCB0byBiZSBj
aGFuZ2VkIGJhY2suCisgICAgICAgICAgICAgICAgU3RyaW5nIHJlcGxhY2VkU3RyaW5nID0gbV9o
aXRUZXN0UmVzdWx0LnJlcGxhY2VkU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgaWYgKCFyZXBs
YWNlZFN0cmluZy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgQ29udGV4dE1lbnVJ
dGVtIGl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnQ2hhbmdlQmFjaywgY29udGV4
dE1lbnVJdGVtVGFnQ2hhbmdlQmFjayhyZXBsYWNlZFN0cmluZykpOworICAgICAgICAgICAgICAg
ICAgICBhcHBlbmRJdGVtKGl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOworICAgICAgICAgICAg
ICAgICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCksIG1fY29udGV4dE1lbnUuZ2V0KCkp
OworICAgICAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgRnJhbWVMb2FkZXIqIGxvYWRlciA9IGZyYW1lLT5sb2FkZXIoKTsKKyAgICAgICAg
S1VSTCBsaW5rVVJMID0gbV9oaXRUZXN0UmVzdWx0LmFic29sdXRlTGlua1VSTCgpOworICAgICAg
ICBpZiAoIWxpbmtVUkwuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBpZiAobG9hZGVyLT5jYW5I
YW5kbGVSZXF1ZXN0KFJlc291cmNlUmVxdWVzdChsaW5rVVJMKSkpIHsKKyAgICAgICAgICAgICAg
ICBhcHBlbmRJdGVtKE9wZW5MaW5rSXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAg
ICAgICAgICAgYXBwZW5kSXRlbShPcGVuTGlua0luTmV3V2luZG93SXRlbSwgbV9jb250ZXh0TWVu
dS5nZXQoKSk7CisgICAgICAgICAgICAgICAgYXBwZW5kSXRlbShEb3dubG9hZEZpbGVJdGVtLCBt
X2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFwcGVuZEl0
ZW0oQ29weUxpbmtJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgICAgIGFwcGVu
ZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAgIH0K
KworICAgICAgICBpZiAobV9oaXRUZXN0UmVzdWx0LmlzU2VsZWN0ZWQoKSAmJiAhaW5QYXNzd29y
ZEZpZWxkICYmIHNlbGVjdGlvbkNvbnRhaW5zUG9zc2libGVXb3JkKGZyYW1lKSkgeworI2lmIFBM
QVRGT1JNKE1BQykKKyAgICAgICAgICAgIGFwcGVuZEl0ZW0oU2VhcmNoU3BvdGxpZ2h0SXRlbSwg
bV9jb250ZXh0TWVudS5nZXQoKSk7CisjZW5kaWYKKyNpZiAhUExBVEZPUk0oR1RLKQorICAgICAg
ICAgICAgYXBwZW5kSXRlbShTZWFyY2hXZWJJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAg
ICAgICAgICAgIGFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSwgbV9jb250ZXh0TWVudS5nZXQo
KSk7CisjZW5kaWYKKyAgICAgCisjaWYgUExBVEZPUk0oTUFDKQorICAgICAgICAgICAgYXBwZW5k
SXRlbShMb29rSW5EaWN0aW9uYXJ5SXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAg
ICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCksIG1fY29udGV4dE1lbnUuZ2V0KCkpOwor
I2VuZGlmCisgICAgICAgIH0KKworICAgICAgICBhcHBlbmRJdGVtKEN1dEl0ZW0sIG1fY29udGV4
dE1lbnUuZ2V0KCkpOworICAgICAgICBhcHBlbmRJdGVtKENvcHlJdGVtLCBtX2NvbnRleHRNZW51
LmdldCgpKTsKKyAgICAgICAgYXBwZW5kSXRlbShQYXN0ZUl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0
KCkpOworI2lmIFBMQVRGT1JNKEdUSykKKyAgICAgICAgYXBwZW5kSXRlbShEZWxldGVJdGVtLCBt
X2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgYXBwZW5kSXRlbSgqc2VwYXJhdG9ySXRlbSgp
LCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgYXBwZW5kSXRlbShTZWxlY3RBbGxJdGVt
LCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyNlbmRpZgorCisgICAgICAgIGlmICghaW5QYXNzd29y
ZEZpZWxkKSB7CisgICAgICAgICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCksIG1fY29u
dGV4dE1lbnUuZ2V0KCkpOworI2lmbmRlZiBCVUlMRElOR19PTl9USUdFUgorI2lmICFQTEFURk9S
TShHVEspCisgICAgICAgICAgICBDb250ZXh0TWVudUl0ZW0gU3BlbGxpbmdBbmRHcmFtbWFyTWVu
dUl0ZW0oU3VibWVudVR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1NwZWxsaW5nTWVudSwgCisgICAg
ICAgICAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnU3BlbGxpbmdNZW51KCkpOworICAgICAgICAg
ICAgY3JlYXRlQW5kQXBwZW5kU3BlbGxpbmdBbmRHcmFtbWFyU3ViTWVudShTcGVsbGluZ0FuZEdy
YW1tYXJNZW51SXRlbSk7CisgICAgICAgICAgICBhcHBlbmRJdGVtKFNwZWxsaW5nQW5kR3JhbW1h
ck1lbnVJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyNlbmRpZgorI2Vsc2UKKyAgICAgICAg
ICAgIENvbnRleHRNZW51SXRlbSBTcGVsbGluZ01lbnVJdGVtKFN1Ym1lbnVUeXBlLCBDb250ZXh0
TWVudUl0ZW1UYWdTcGVsbGluZ01lbnUsIAorICAgICAgICAgICAgICAgIGNvbnRleHRNZW51SXRl
bVRhZ1NwZWxsaW5nTWVudSgpKTsKKyAgICAgICAgICAgIGNyZWF0ZUFuZEFwcGVuZFNwZWxsaW5n
U3ViTWVudShTcGVsbGluZ01lbnVJdGVtKTsKKyAgICAgICAgICAgIGFwcGVuZEl0ZW0oU3BlbGxp
bmdNZW51SXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisjZW5kaWYKKyNpZiBQTEFURk9STShN
QUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19P
Tl9MRU9QQVJEKQorICAgICAgICAgICAgQ29udGV4dE1lbnVJdGVtIHN1YnN0aXR1dGlvbnNNZW51
SXRlbShTdWJtZW51VHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU3Vic3RpdHV0aW9uc01lbnUsIAor
ICAgICAgICAgICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ1N1YnN0aXR1dGlvbnNNZW51KCkpOwor
ICAgICAgICAgICAgY3JlYXRlQW5kQXBwZW5kU3Vic3RpdHV0aW9uc1N1Yk1lbnUoc3Vic3RpdHV0
aW9uc01lbnVJdGVtKTsKKyAgICAgICAgICAgIGFwcGVuZEl0ZW0oc3Vic3RpdHV0aW9uc01lbnVJ
dGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgICAgIENvbnRleHRNZW51SXRlbSB0
cmFuc2Zvcm1hdGlvbnNNZW51SXRlbShTdWJtZW51VHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnVHJh
bnNmb3JtYXRpb25zTWVudSwgCisgICAgICAgICAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnVHJh
bnNmb3JtYXRpb25zTWVudSgpKTsKKyAgICAgICAgICAgIGNyZWF0ZUFuZEFwcGVuZFRyYW5zZm9y
bWF0aW9uc1N1Yk1lbnUodHJhbnNmb3JtYXRpb25zTWVudUl0ZW0pOworICAgICAgICAgICAgYXBw
ZW5kSXRlbSh0cmFuc2Zvcm1hdGlvbnNNZW51SXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7Cisj
ZW5kaWYKKyNpZiBQTEFURk9STShHVEspCisgICAgICAgICAgICBib29sIHNob3VsZFNob3dGb250
TWVudSA9IGZyYW1lLT5lZGl0b3IoKS0+Y2FuRWRpdFJpY2hseSgpOworI2Vsc2UKKyAgICAgICAg
ICAgIGJvb2wgc2hvdWxkU2hvd0ZvbnRNZW51ID0gdHJ1ZTsKKyNlbmRpZgorICAgICAgICAgICAg
aWYgKHNob3VsZFNob3dGb250TWVudSkgeworICAgICAgICAgICAgICAgIENvbnRleHRNZW51SXRl
bSBGb250TWVudUl0ZW0oU3VibWVudVR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0ZvbnRNZW51LCAK
KyAgICAgICAgICAgICAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnRm9udE1lbnUoKSk7CisgICAg
ICAgICAgICAgICAgY3JlYXRlQW5kQXBwZW5kRm9udFN1Yk1lbnUoRm9udE1lbnVJdGVtKTsKKyAg
ICAgICAgICAgICAgICBhcHBlbmRJdGVtKEZvbnRNZW51SXRlbSwgbV9jb250ZXh0TWVudS5nZXQo
KSk7CisgICAgICAgICAgICB9CisjaWYgUExBVEZPUk0oTUFDKQorICAgICAgICAgICAgQ29udGV4
dE1lbnVJdGVtIFNwZWVjaE1lbnVJdGVtKFN1Ym1lbnVUeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdT
cGVlY2hNZW51LCBjb250ZXh0TWVudUl0ZW1UYWdTcGVlY2hNZW51KCkpOworICAgICAgICAgICAg
Y3JlYXRlQW5kQXBwZW5kU3BlZWNoU3ViTWVudShTcGVlY2hNZW51SXRlbSk7CisgICAgICAgICAg
ICBhcHBlbmRJdGVtKFNwZWVjaE1lbnVJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyNlbmRp
ZgorI2lmICFQTEFURk9STShHVEspCisgICAgICAgICAgICBDb250ZXh0TWVudUl0ZW0gV3JpdGlu
Z0RpcmVjdGlvbk1lbnVJdGVtKFN1Ym1lbnVUeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdXcml0aW5n
RGlyZWN0aW9uTWVudSwgCisgICAgICAgICAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnV3JpdGlu
Z0RpcmVjdGlvbk1lbnUoKSk7CisgICAgICAgICAgICBjcmVhdGVBbmRBcHBlbmRXcml0aW5nRGly
ZWN0aW9uU3ViTWVudShXcml0aW5nRGlyZWN0aW9uTWVudUl0ZW0pOworICAgICAgICAgICAgYXBw
ZW5kSXRlbShXcml0aW5nRGlyZWN0aW9uTWVudUl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOwor
ICAgICAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKFNldHRpbmdzKiBzZXR0aW5ncyA9IHBhZ2UtPnNldHRpbmdzKCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgYm9vbCBpbmNsdWRlVGV4dERpcmVjdGlvblN1Ym1lbnUgPSBzZXR0aW5n
cy0+dGV4dERpcmVjdGlvblN1Ym1lbnVJbmNsdXNpb25CZWhhdmlvcigpID09IFRleHREaXJlY3Rp
b25TdWJtZW51QWx3YXlzSW5jbHVkZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IChzZXR0
aW5ncy0+dGV4dERpcmVjdGlvblN1Ym1lbnVJbmNsdXNpb25CZWhhdmlvcigpID09IFRleHREaXJl
Y3Rpb25TdWJtZW51QXV0b21hdGljYWxseUluY2x1ZGVkICYmIGZyYW1lLT5lZGl0b3IoKS0+aGFz
QmlkaVNlbGVjdGlvbigpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGluY2x1ZGVUZXh0RGly
ZWN0aW9uU3VibWVudSkgeworICAgICAgICAgICAgICAgICAgICAgICAgQ29udGV4dE1lbnVJdGVt
IFRleHREaXJlY3Rpb25NZW51SXRlbShTdWJtZW51VHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnVGV4
dERpcmVjdGlvbk1lbnUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHRNZW51
SXRlbVRhZ1RleHREaXJlY3Rpb25NZW51KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgY3Jl
YXRlQW5kQXBwZW5kVGV4dERpcmVjdGlvblN1Yk1lbnUoVGV4dERpcmVjdGlvbk1lbnVJdGVtKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oVGV4dERpcmVjdGlvbk1lbnVJdGVt
LCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICB9CisgICAgfQorfQorCisj
aWYgRU5BQkxFKElOU1BFQ1RPUikKK3ZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjphZGRJbnNw
ZWN0RWxlbWVudEl0ZW0oKQoreworICAgIE5vZGUqIG5vZGUgPSBtX2hpdFRlc3RSZXN1bHQuaW5u
ZXJOb25TaGFyZWROb2RlKCk7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm47CisKKyAg
ICBGcmFtZSogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpOworICAgIGlmICghZnJh
bWUpCisgICAgICAgIHJldHVybjsKKworICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpOwor
ICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFwYWdlLT5pbnNwZWN0
b3JDb250cm9sbGVyKCkpCisgICAgICAgIHJldHVybjsKKworICAgIENvbnRleHRNZW51SXRlbSBJ
bnNwZWN0RWxlbWVudEl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnSW5zcGVjdEVs
ZW1lbnQsIGNvbnRleHRNZW51SXRlbVRhZ0luc3BlY3RFbGVtZW50KCkpOworICAgIGFwcGVuZEl0
ZW0oKnNlcGFyYXRvckl0ZW0oKSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgYXBwZW5kSXRl
bShJbnNwZWN0RWxlbWVudEl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOworfQorI2VuZGlmIC8v
IEVOQUJMRShJTlNQRUNUT1IpCisKK3ZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjpjaGVja09y
RW5hYmxlSWZOZWVkZWQoQ29udGV4dE1lbnVJdGVtJiBpdGVtKSBjb25zdAoreworICAgIGlmIChp
dGVtLnR5cGUoKSA9PSBTZXBhcmF0b3JUeXBlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
RnJhbWUqIGZyYW1lID0gbV9oaXRUZXN0UmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpLT5kb2N1
bWVudCgpLT5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAg
IC8vIEN1c3RvbSBpdGVtcyBhbHJlYWR5IGhhdmUgcHJvcGVyIGNoZWNrZWQgYW5kIGVuYWJsZWQg
dmFsdWVzLgorICAgIGlmIChDb250ZXh0TWVudUl0ZW1CYXNlQ3VzdG9tVGFnIDw9IGl0ZW0uYWN0
aW9uKCkgJiYgaXRlbS5hY3Rpb24oKSA8PSBDb250ZXh0TWVudUl0ZW1MYXN0Q3VzdG9tVGFnKQor
ICAgICAgICByZXR1cm47CisKKyAgICBib29sIHNob3VsZEVuYWJsZSA9IHRydWU7CisgICAgYm9v
bCBzaG91bGRDaGVjayA9IGZhbHNlOyAKKworICAgIHN3aXRjaCAoaXRlbS5hY3Rpb24oKSkgewor
ICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0NoZWNrU3BlbGxpbmc6CisgICAgICAgICAg
ICBzaG91bGRFbmFibGUgPSBmcmFtZS0+ZWRpdG9yKCktPmNhbkVkaXQoKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0RlZmF1bHREaXJlY3Rpb246
CisgICAgICAgICAgICBzaG91bGRDaGVjayA9IGZhbHNlOworICAgICAgICAgICAgc2hvdWxkRW5h
YmxlID0gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb250ZXh0TWVu
dUl0ZW1UYWdMZWZ0VG9SaWdodDoKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdSaWdo
dFRvTGVmdDogeworICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgICAgICAg
ICBSZWZQdHI8Q1NTU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+
Y3JlYXRlQ1NTU3R5bGVEZWNsYXJhdGlvbigpOworICAgICAgICAgICAgU3RyaW5nIGRpcmVjdGlv
biA9IGl0ZW0uYWN0aW9uKCkgPT0gQ29udGV4dE1lbnVJdGVtVGFnTGVmdFRvUmlnaHQgPyAibHRy
IiA6ICJydGwiOworICAgICAgICAgICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5RGly
ZWN0aW9uLCBkaXJlY3Rpb24sIGZhbHNlLCBlYyk7CisgICAgICAgICAgICBzaG91bGRDaGVjayA9
IGZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0aW9uSGFzU3R5bGUoc3R5bGUuZ2V0KCkpICE9IEZhbHNl
VHJpU3RhdGU7CisgICAgICAgICAgICBzaG91bGRFbmFibGUgPSB0cnVlOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdUZXh0RGly
ZWN0aW9uRGVmYXVsdDogeworICAgICAgICAgICAgRWRpdG9yOjpDb21tYW5kIGNvbW1hbmQgPSBm
cmFtZS0+ZWRpdG9yKCktPmNvbW1hbmQoIk1ha2VUZXh0V3JpdGluZ0RpcmVjdGlvbk5hdHVyYWwi
KTsKKyAgICAgICAgICAgIHNob3VsZENoZWNrID0gY29tbWFuZC5zdGF0ZSgpID09IFRydWVUcmlT
dGF0ZTsKKyAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGNvbW1hbmQuaXNFbmFibGVkKCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRl
bVRhZ1RleHREaXJlY3Rpb25MZWZ0VG9SaWdodDogeworICAgICAgICAgICAgRWRpdG9yOjpDb21t
YW5kIGNvbW1hbmQgPSBmcmFtZS0+ZWRpdG9yKCktPmNvbW1hbmQoIk1ha2VUZXh0V3JpdGluZ0Rp
cmVjdGlvbkxlZnRUb1JpZ2h0Iik7CisgICAgICAgICAgICBzaG91bGRDaGVjayA9IGNvbW1hbmQu
c3RhdGUoKSA9PSBUcnVlVHJpU3RhdGU7CisgICAgICAgICAgICBzaG91bGRFbmFibGUgPSBjb21t
YW5kLmlzRW5hYmxlZCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBDb250ZXh0TWVudUl0ZW1UYWdUZXh0RGlyZWN0aW9uUmlnaHRUb0xlZnQ6IHsKKyAgICAg
ICAgICAgIEVkaXRvcjo6Q29tbWFuZCBjb21tYW5kID0gZnJhbWUtPmVkaXRvcigpLT5jb21tYW5k
KCJNYWtlVGV4dFdyaXRpbmdEaXJlY3Rpb25SaWdodFRvTGVmdCIpOworICAgICAgICAgICAgc2hv
dWxkQ2hlY2sgPSBjb21tYW5kLnN0YXRlKCkgPT0gVHJ1ZVRyaVN0YXRlOworICAgICAgICAgICAg
c2hvdWxkRW5hYmxlID0gY29tbWFuZC5pc0VuYWJsZWQoKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQ29weToKKyAgICAgICAg
ICAgIHNob3VsZEVuYWJsZSA9IGZyYW1lLT5lZGl0b3IoKS0+Y2FuREhUTUxDb3B5KCkgfHwgZnJh
bWUtPmVkaXRvcigpLT5jYW5Db3B5KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBDb250ZXh0TWVudUl0ZW1UYWdDdXQ6CisgICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFt
ZS0+ZWRpdG9yKCktPmNhbkRIVE1MQ3V0KCkgfHwgZnJhbWUtPmVkaXRvcigpLT5jYW5DdXQoKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0lnbm9y
ZVNwZWxsaW5nOgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0xlYXJuU3BlbGxpbmc6
CisgICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+c2VsZWN0aW9uKCktPmlzUmFuZ2Uo
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1Bh
c3RlOgorICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gZnJhbWUtPmVkaXRvcigpLT5jYW5ESFRN
TFBhc3RlKCkgfHwgZnJhbWUtPmVkaXRvcigpLT5jYW5QYXN0ZSgpOworICAgICAgICAgICAgYnJl
YWs7CisjaWYgUExBVEZPUk0oR1RLKQorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0Rl
bGV0ZToKKyAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGZyYW1lLT5lZGl0b3IoKS0+Y2FuRGVs
ZXRlKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1U
YWdTZWxlY3RBbGw6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnSW5wdXRNZXRob2Rz
OgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1VuaWNvZGU6CisgICAgICAgICAgICBz
aG91bGRFbmFibGUgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICAgICAg
Y2FzZSBDb250ZXh0TWVudUl0ZW1UYWdVbmRlcmxpbmU6IHsKKyAgICAgICAgICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOworICAgICAgICAgICAgUmVmUHRyPENTU1N0eWxlRGVjbGFyYXRpb24+IHN0
eWxlID0gZnJhbWUtPmRvY3VtZW50KCktPmNyZWF0ZUNTU1N0eWxlRGVjbGFyYXRpb24oKTsKKyAg
ICAgICAgICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0
aW9uc0luRWZmZWN0LCAidW5kZXJsaW5lIiwgZmFsc2UsIGVjKTsKKyAgICAgICAgICAgIHNob3Vs
ZENoZWNrID0gZnJhbWUtPmVkaXRvcigpLT5zZWxlY3Rpb25IYXNTdHlsZShzdHlsZS5nZXQoKSkg
IT0gRmFsc2VUcmlTdGF0ZTsKKyAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGZyYW1lLT5lZGl0
b3IoKS0+Y2FuRWRpdFJpY2hseSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdMb29rVXBJbkRpY3Rpb25hcnk6CisgICAgICAg
ICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+c2VsZWN0aW9uKCktPmlzUmFuZ2UoKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0NoZWNrR3JhbW1h
cldpdGhTcGVsbGluZzoKKyNpZm5kZWYgQlVJTERJTkdfT05fVElHRVIKKyAgICAgICAgICAgIGlm
IChmcmFtZS0+ZWRpdG9yKCktPmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpKQorICAgICAgICAg
ICAgICAgIHNob3VsZENoZWNrID0gdHJ1ZTsKKyAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IHRy
dWU7CisjZW5kaWYKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbnRleHRNZW51
SXRlbVRhZ0l0YWxpYzogeworICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAg
ICAgICAgICBSZWZQdHI8Q1NTU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUgPSBmcmFtZS0+ZG9jdW1l
bnQoKS0+Y3JlYXRlQ1NTU3R5bGVEZWNsYXJhdGlvbigpOworICAgICAgICAgICAgc3R5bGUtPnNl
dFByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFN0eWxlLCAiaXRhbGljIiwgZmFsc2UsIGVjKTsKKyAg
ICAgICAgICAgIHNob3VsZENoZWNrID0gZnJhbWUtPmVkaXRvcigpLT5zZWxlY3Rpb25IYXNTdHls
ZShzdHlsZS5nZXQoKSkgIT0gRmFsc2VUcmlTdGF0ZTsKKyAgICAgICAgICAgIHNob3VsZEVuYWJs
ZSA9IGZyYW1lLT5lZGl0b3IoKS0+Y2FuRWRpdFJpY2hseSgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdCb2xkOiB7CisgICAg
ICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAgICAgIFJlZlB0cjxDU1NTdHls
ZURlY2xhcmF0aW9uPiBzdHlsZSA9IGZyYW1lLT5kb2N1bWVudCgpLT5jcmVhdGVDU1NTdHlsZURl
Y2xhcmF0aW9uKCk7CisgICAgICAgICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlG
b250V2VpZ2h0LCAiYm9sZCIsIGZhbHNlLCBlYyk7CisgICAgICAgICAgICBzaG91bGRDaGVjayA9
IGZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0aW9uSGFzU3R5bGUoc3R5bGUuZ2V0KCkpICE9IEZhbHNl
VHJpU3RhdGU7CisgICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+ZWRpdG9yKCktPmNh
bkVkaXRSaWNobHkoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNh
c2UgQ29udGV4dE1lbnVJdGVtVGFnT3V0bGluZToKKyAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9
IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVt
VGFnU2hvd1NwZWxsaW5nUGFuZWw6CisjaWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCisgICAgICAg
ICAgICBpZiAoZnJhbWUtPmVkaXRvcigpLT5zcGVsbGluZ1BhbmVsSXNTaG93aW5nKCkpCisgICAg
ICAgICAgICAgICAgaXRlbS5zZXRUaXRsZShjb250ZXh0TWVudUl0ZW1UYWdTaG93U3BlbGxpbmdQ
YW5lbChmYWxzZSkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGl0ZW0uc2V0
VGl0bGUoY29udGV4dE1lbnVJdGVtVGFnU2hvd1NwZWxsaW5nUGFuZWwodHJ1ZSkpOworI2VuZGlm
CisgICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+ZWRpdG9yKCktPmNhbkVkaXQoKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ05vR3Vl
c3Nlc0ZvdW5kOgorICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gZmFsc2U7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdDaGVja1NwZWxsaW5nV2hp
bGVUeXBpbmc6CisgICAgICAgICAgICBzaG91bGRDaGVjayA9IGZyYW1lLT5lZGl0b3IoKS0+aXND
b250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKTsKKyAgICAgICAgICAgIGJyZWFrOworI2lm
IFBMQVRGT1JNKE1BQykKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTdWJzdGl0dXRp
b25zTWVudToKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdUcmFuc2Zvcm1hdGlvbnNN
ZW51OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFn
U2hvd1N1YnN0aXR1dGlvbnM6CisjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFk
ZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpCisgICAgICAgICAgICBpZiAoZnJhbWUtPmVkaXRv
cigpLT5zdWJzdGl0dXRpb25zUGFuZWxJc1Nob3dpbmcoKSkKKyAgICAgICAgICAgICAgICBpdGVt
LnNldFRpdGxlKGNvbnRleHRNZW51SXRlbVRhZ1Nob3dTdWJzdGl0dXRpb25zKGZhbHNlKSk7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgaXRlbS5zZXRUaXRsZShjb250ZXh0TWVu
dUl0ZW1UYWdTaG93U3Vic3RpdHV0aW9ucyh0cnVlKSk7CisgICAgICAgICAgICBzaG91bGRFbmFi
bGUgPSBmcmFtZS0+ZWRpdG9yKCktPmNhbkVkaXQoKTsKKyNlbmRpZgorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnTWFrZVVwcGVyQ2FzZToKKyAgICAg
ICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdNYWtlTG93ZXJDYXNlOgorICAgICAgICBjYXNlIENv
bnRleHRNZW51SXRlbVRhZ0NhcGl0YWxpemU6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVt
VGFnQ2hhbmdlQmFjazoKKyAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGZyYW1lLT5lZGl0b3Io
KS0+Y2FuRWRpdCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29udGV4dE1l
bnVJdGVtVGFnQ29ycmVjdFNwZWxsaW5nQXV0b21hdGljYWxseToKKyNpZiAhZGVmaW5lZChCVUlM
RElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKKyAgICAgICAg
ICAgIHNob3VsZENoZWNrID0gZnJhbWUtPmVkaXRvcigpLT5pc0F1dG9tYXRpY1NwZWxsaW5nQ29y
cmVjdGlvbkVuYWJsZWQoKTsKKyNlbmRpZgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgQ29udGV4dE1lbnVJdGVtVGFnU21hcnRDb3B5UGFzdGU6CisjaWYgIWRlZmluZWQoQlVJTERJ
TkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpCisgICAgICAgICAg
ICBzaG91bGRDaGVjayA9IGZyYW1lLT5lZGl0b3IoKS0+c21hcnRJbnNlcnREZWxldGVFbmFibGVk
KCk7CisjZW5kaWYKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbnRleHRNZW51
SXRlbVRhZ1NtYXJ0UXVvdGVzOgorI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAh
ZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQorICAgICAgICAgICAgc2hvdWxkQ2hlY2sgPSBm
cmFtZS0+ZWRpdG9yKCktPmlzQXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb25FbmFibGVkKCk7Cisj
ZW5kaWYKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRh
Z1NtYXJ0RGFzaGVzOgorI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5l
ZChCVUlMRElOR19PTl9MRU9QQVJEKQorICAgICAgICAgICAgc2hvdWxkQ2hlY2sgPSBmcmFtZS0+
ZWRpdG9yKCktPmlzQXV0b21hdGljRGFzaFN1YnN0aXR1dGlvbkVuYWJsZWQoKTsKKyNlbmRpZgor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU21hcnRM
aW5rczoKKyNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJ
TkdfT05fTEVPUEFSRCkKKyAgICAgICAgICAgIHNob3VsZENoZWNrID0gZnJhbWUtPmVkaXRvcigp
LT5pc0F1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkKCk7CisjZW5kaWYKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1RleHRSZXBsYWNlbWVudDoK
KyNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05f
TEVPUEFSRCkKKyAgICAgICAgICAgIHNob3VsZENoZWNrID0gZnJhbWUtPmVkaXRvcigpLT5pc0F1
dG9tYXRpY1RleHRSZXBsYWNlbWVudEVuYWJsZWQoKTsKKyNlbmRpZgorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU3RvcFNwZWFraW5nOgorICAgICAg
ICAgICAgc2hvdWxkRW5hYmxlID0gY2xpZW50KCkgJiYgY2xpZW50KCktPmlzU3BlYWtpbmcoKTsK
KyAgICAgICAgICAgIGJyZWFrOworI2Vsc2UgLy8gUExBVEZPUk0oTUFDKSBlbmRzIGhlcmUKKyAg
ICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTdG9wU3BlYWtpbmc6CisgICAgICAgICAgICBi
cmVhazsKKyNlbmRpZgorI2lmIFBMQVRGT1JNKEdUSykKKyAgICAgICAgY2FzZSBDb250ZXh0TWVu
dUl0ZW1UYWdHb0JhY2s6CisgICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+cGFnZSgp
ICYmIGZyYW1lLT5wYWdlKCktPmJhY2tGb3J3YXJkKCktPmNhbkdvQmFja09yRm9yd2FyZCgtMSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdHb0Zv
cndhcmQ6CisgICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+cGFnZSgpICYmIGZyYW1l
LT5wYWdlKCktPmJhY2tGb3J3YXJkKCktPmNhbkdvQmFja09yRm9yd2FyZCgxKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1N0b3A6CisgICAgICAg
ICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPmlz
TG9hZGluZ0luQVBJU2Vuc2UoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENv
bnRleHRNZW51SXRlbVRhZ1JlbG9hZDoKKyAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9ICFmcmFt
ZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPmlzTG9hZGluZ0luQVBJU2Vuc2UoKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0ZvbnRNZW51
OgorICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gZnJhbWUtPmVkaXRvcigpLT5jYW5FZGl0Umlj
aGx5KCk7CisgICAgICAgICAgICBicmVhazsKKyNlbHNlCisgICAgICAgIGNhc2UgQ29udGV4dE1l
bnVJdGVtVGFnR29CYWNrOgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0dvRm9yd2Fy
ZDoKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTdG9wOgorICAgICAgICBjYXNlIENv
bnRleHRNZW51SXRlbVRhZ1JlbG9hZDoKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdG
b250TWVudToKKyNlbmRpZgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ05vQWN0aW9u
OgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5MaW5rSW5OZXdXaW5kb3c6Cisg
ICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnRG93bmxvYWRMaW5rVG9EaXNrOgorICAgICAg
ICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0NvcHlMaW5rVG9DbGlwYm9hcmQ6CisgICAgICAgIGNh
c2UgQ29udGV4dE1lbnVJdGVtVGFnT3BlbkltYWdlSW5OZXdXaW5kb3c6CisgICAgICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtVGFnRG93bmxvYWRJbWFnZVRvRGlzazoKKyAgICAgICAgY2FzZSBDb250
ZXh0TWVudUl0ZW1UYWdDb3B5SW1hZ2VUb0NsaXBib2FyZDoKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5NZWRpYUluTmV3V2luZG93OgorICAg
ICAgICAgICAgaWYgKG1faGl0VGVzdFJlc3VsdC5tZWRpYUlzVmlkZW8oKSkKKyAgICAgICAgICAg
ICAgICBpdGVtLnNldFRpdGxlKGNvbnRleHRNZW51SXRlbVRhZ09wZW5WaWRlb0luTmV3V2luZG93
KCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGl0ZW0uc2V0VGl0bGUoY29u
dGV4dE1lbnVJdGVtVGFnT3BlbkF1ZGlvSW5OZXdXaW5kb3coKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdDb3B5TWVkaWFMaW5rVG9DbGlwYm9h
cmQ6CisgICAgICAgICAgICBpZiAobV9oaXRUZXN0UmVzdWx0Lm1lZGlhSXNWaWRlbygpKQorICAg
ICAgICAgICAgICAgIGl0ZW0uc2V0VGl0bGUoY29udGV4dE1lbnVJdGVtVGFnQ29weVZpZGVvTGlu
a1RvQ2xpcGJvYXJkKCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGl0ZW0u
c2V0VGl0bGUoY29udGV4dE1lbnVJdGVtVGFnQ29weUF1ZGlvTGlua1RvQ2xpcGJvYXJkKCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnVG9nZ2xl
TWVkaWFDb250cm9sczoKKyAgICAgICAgICAgIHNob3VsZENoZWNrID0gbV9oaXRUZXN0UmVzdWx0
Lm1lZGlhQ29udHJvbHNFbmFibGVkKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBDb250ZXh0TWVudUl0ZW1UYWdUb2dnbGVNZWRpYUxvb3A6CisgICAgICAgICAgICBzaG91bGRD
aGVjayA9IG1faGl0VGVzdFJlc3VsdC5tZWRpYUxvb3BFbmFibGVkKCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdFbnRlclZpZGVvRnVsbHNjcmVl
bjoKKyAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IG1faGl0VGVzdFJlc3VsdC5tZWRpYVN1cHBv
cnRzRnVsbHNjcmVlbigpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29udGV4
dE1lbnVJdGVtVGFnT3BlbkZyYW1lSW5OZXdXaW5kb3c6CisgICAgICAgIGNhc2UgQ29udGV4dE1l
bnVJdGVtVGFnU3BlbGxpbmdHdWVzczoKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdP
dGhlcjoKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTZWFyY2hJblNwb3RsaWdodDoK
KyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTZWFyY2hXZWI6CisgICAgICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtVGFnT3BlbldpdGhEZWZhdWx0QXBwbGljYXRpb246CisgICAgICAgIGNh
c2UgQ29udGV4dE1lbnVJdGVtUERGQWN0dWFsU2l6ZToKKyAgICAgICAgY2FzZSBDb250ZXh0TWVu
dUl0ZW1QREZab29tSW46CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtUERGWm9vbU91dDoK
KyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1QREZBdXRvU2l6ZToKKyAgICAgICAgY2FzZSBD
b250ZXh0TWVudUl0ZW1QREZTaW5nbGVQYWdlOgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRl
bVBERkZhY2luZ1BhZ2VzOgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVBERkNvbnRpbnVv
dXM6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtUERGTmV4dFBhZ2U6CisgICAgICAgIGNh
c2UgQ29udGV4dE1lbnVJdGVtUERGUHJldmlvdXNQYWdlOgorICAgICAgICBjYXNlIENvbnRleHRN
ZW51SXRlbVRhZ09wZW5MaW5rOgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0lnbm9y
ZUdyYW1tYXI6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU3BlbGxpbmdNZW51Ogor
ICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1Nob3dGb250czoKKyAgICAgICAgY2FzZSBD
b250ZXh0TWVudUl0ZW1UYWdTdHlsZXM6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFn
U2hvd0NvbG9yczoKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTcGVlY2hNZW51Ogor
ICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1N0YXJ0U3BlYWtpbmc6CisgICAgICAgIGNh
c2UgQ29udGV4dE1lbnVJdGVtVGFnV3JpdGluZ0RpcmVjdGlvbk1lbnU6CisgICAgICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtVGFnVGV4dERpcmVjdGlvbk1lbnU6CisgICAgICAgIGNhc2UgQ29udGV4
dE1lbnVJdGVtVGFnUERGU2luZ2xlUGFnZVNjcm9sbGluZzoKKyAgICAgICAgY2FzZSBDb250ZXh0
TWVudUl0ZW1UYWdQREZGYWNpbmdQYWdlc1Njcm9sbGluZzoKKyNpZiBFTkFCTEUoSU5TUEVDVE9S
KQorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0luc3BlY3RFbGVtZW50OgorI2VuZGlm
CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtQmFzZUN1c3RvbVRhZzoKKyAgICAgICAgY2Fz
ZSBDb250ZXh0TWVudUl0ZW1DdXN0b21UYWdOb0FjdGlvbjoKKyAgICAgICAgY2FzZSBDb250ZXh0
TWVudUl0ZW1MYXN0Q3VzdG9tVGFnOgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbUJhc2VB
cHBsaWNhdGlvblRhZzoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbnRleHRN
ZW51SXRlbVRhZ01lZGlhUGxheVBhdXNlOgorICAgICAgICAgICAgaWYgKG1faGl0VGVzdFJlc3Vs
dC5tZWRpYVBsYXlpbmcoKSkKKyAgICAgICAgICAgICAgICBpdGVtLnNldFRpdGxlKGNvbnRleHRN
ZW51SXRlbVRhZ01lZGlhUGF1c2UoKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgaXRlbS5zZXRUaXRsZShjb250ZXh0TWVudUl0ZW1UYWdNZWRpYVBsYXkoKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdNZWRpYU11dGU6Cisg
ICAgICAgICAgICBzaG91bGRFbmFibGUgPSBtX2hpdFRlc3RSZXN1bHQubWVkaWFIYXNBdWRpbygp
OworICAgICAgICAgICAgc2hvdWxkQ2hlY2sgPSBzaG91bGRFbmFibGUgJiYgIG1faGl0VGVzdFJl
c3VsdC5tZWRpYU11dGVkKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpdGVt
LnNldENoZWNrZWQoc2hvdWxkQ2hlY2spOworICAgIGl0ZW0uc2V0RW5hYmxlZChzaG91bGRFbmFi
bGUpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoQ09O
VEVYVF9NRU5VUykKSW5kZXg6IFdlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmgJKHJldmlz
aW9uIDczNDY5KQorKysgV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIENvbnRleHRNZW51Q29udHJvbGxl
cl9oCiAjZGVmaW5lIENvbnRleHRNZW51Q29udHJvbGxlcl9oCiAKKyNpbmNsdWRlICJIaXRUZXN0
UmVzdWx0LmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL093
blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CkBAIC00NSw3ICs0Niw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgQ29udGV4dE1lbnVDb250cm9sbGVyKFBhZ2UqLCBD
b250ZXh0TWVudUNsaWVudCopOwogICAgICAgICB+Q29udGV4dE1lbnVDb250cm9sbGVyKCk7CiAK
LSAgICAgICAgQ29udGV4dE1lbnVDbGllbnQqIGNsaWVudCgpIHsgcmV0dXJuIG1fY2xpZW50OyB9
CisgICAgICAgIENvbnRleHRNZW51Q2xpZW50KiBjbGllbnQoKSBjb25zdCB7IHJldHVybiBtX2Ns
aWVudDsgfQogCiAgICAgICAgIENvbnRleHRNZW51KiBjb250ZXh0TWVudSgpIGNvbnN0IHsgcmV0
dXJuIG1fY29udGV4dE1lbnUuZ2V0KCk7IH0KICAgICAgICAgdm9pZCBjbGVhckNvbnRleHRNZW51
KCk7CkBAIC01MywxNiArNTQsMzUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lk
IGhhbmRsZUNvbnRleHRNZW51RXZlbnQoRXZlbnQqKTsKICAgICAgICAgdm9pZCBzaG93Q29udGV4
dE1lbnUoRXZlbnQqLCBQYXNzUmVmUHRyPENvbnRleHRNZW51UHJvdmlkZXI+KTsKIAorICAgICAg
ICB2b2lkIHBvcHVsYXRlKCk7CiAgICAgICAgIHZvaWQgY29udGV4dE1lbnVJdGVtU2VsZWN0ZWQo
Q29udGV4dE1lbnVJdGVtKik7CisgICAgICAgIHZvaWQgYWRkSW5zcGVjdEVsZW1lbnRJdGVtKCk7
CisKKyAgICAgICAgdm9pZCBjaGVja09yRW5hYmxlSWZOZWVkZWQoQ29udGV4dE1lbnVJdGVtJikg
Y29uc3Q7CisKKyAgICAgICAgdm9pZCBzZXRIaXRUZXN0UmVzdWx0KGNvbnN0IEhpdFRlc3RSZXN1
bHQmIHJlc3VsdCkgeyBtX2hpdFRlc3RSZXN1bHQgPSByZXN1bHQ7IH0KKyAgICAgICAgY29uc3Qg
SGl0VGVzdFJlc3VsdCYgaGl0VGVzdFJlc3VsdCgpIHsgcmV0dXJuIG1faGl0VGVzdFJlc3VsdDsg
fQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgQ29udGV4dE1lbnUqIGNyZWF0ZUNvbnRleHRNZW51
KEV2ZW50Kik7CisgICAgICAgIFBhc3NPd25QdHI8Q29udGV4dE1lbnU+IGNyZWF0ZUNvbnRleHRN
ZW51KEV2ZW50Kik7CiAgICAgICAgIHZvaWQgc2hvd0NvbnRleHRNZW51KEV2ZW50Kik7CisgICAg
ICAgIAorICAgICAgICB2b2lkIGFwcGVuZEl0ZW0oQ29udGV4dE1lbnVJdGVtJiwgQ29udGV4dE1l
bnUqIHBhcmVudE1lbnUpOworCisgICAgICAgIHZvaWQgY3JlYXRlQW5kQXBwZW5kRm9udFN1Yk1l
bnUoQ29udGV4dE1lbnVJdGVtJik7CisgICAgICAgIHZvaWQgY3JlYXRlQW5kQXBwZW5kU3BlbGxp
bmdBbmRHcmFtbWFyU3ViTWVudShDb250ZXh0TWVudUl0ZW0mKTsKKyAgICAgICAgdm9pZCBjcmVh
dGVBbmRBcHBlbmRTcGVsbGluZ1N1Yk1lbnUoQ29udGV4dE1lbnVJdGVtJik7CisgICAgICAgIHZv
aWQgY3JlYXRlQW5kQXBwZW5kU3BlZWNoU3ViTWVudShDb250ZXh0TWVudUl0ZW0mICk7CisgICAg
ICAgIHZvaWQgY3JlYXRlQW5kQXBwZW5kV3JpdGluZ0RpcmVjdGlvblN1Yk1lbnUoQ29udGV4dE1l
bnVJdGVtJik7CisgICAgICAgIHZvaWQgY3JlYXRlQW5kQXBwZW5kVGV4dERpcmVjdGlvblN1Yk1l
bnUoQ29udGV4dE1lbnVJdGVtJik7CisgICAgICAgIHZvaWQgY3JlYXRlQW5kQXBwZW5kU3Vic3Rp
dHV0aW9uc1N1Yk1lbnUoQ29udGV4dE1lbnVJdGVtJik7CisgICAgICAgIHZvaWQgY3JlYXRlQW5k
QXBwZW5kVHJhbnNmb3JtYXRpb25zU3ViTWVudShDb250ZXh0TWVudUl0ZW0mKTsKIAogICAgICAg
ICBQYWdlKiBtX3BhZ2U7CiAgICAgICAgIENvbnRleHRNZW51Q2xpZW50KiBtX2NsaWVudDsKICAg
ICAgICAgT3duUHRyPENvbnRleHRNZW51PiBtX2NvbnRleHRNZW51OwogICAgICAgICBSZWZQdHI8
Q29udGV4dE1lbnVQcm92aWRlcj4gbV9tZW51UHJvdmlkZXI7CisgICAgICAgIEhpdFRlc3RSZXN1
bHQgbV9oaXRUZXN0UmVzdWx0OwogICAgIH07CiAKIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Q29udGV4dE1lbnUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vQ29udGV4dE1l
bnUuY3BwCShyZXZpc2lvbiA3MzQ2OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vQ29udGV4dE1lbnUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDg5MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAwOCBDaHJpc3RpYW4gRHl3YW4gPGNocmlzdGlhbkBpbWVuZGlvLmNvbT4KLSAqIENv
cHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJDb250ZXh0TWVudS5oIgotCi0jaWYgRU5BQkxFKENPTlRFWFRfTUVOVVMpCi0K
LSNpbmNsdWRlICJCYWNrRm9yd2FyZENvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJDb250ZXh0TWVu
dUNvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJDb250ZXh0TWVudUNsaWVudC5oIgotI2luY2x1ZGUg
IkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oIgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5Lmgi
Ci0jaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0j
aW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKLSNpbmNsdWRlICJFZGl0b3IuaCIKLSNpbmNsdWRl
ICJGcmFtZS5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9y
Q29udHJvbGxlci5oIgotI2luY2x1ZGUgIktVUkwuaCIKLSNpbmNsdWRlICJMb2NhbGl6ZWRTdHJp
bmdzLmgiCi0jaW5jbHVkZSAiTm9kZS5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJS
ZXNvdXJjZVJlcXVlc3QuaCIKLSNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCi0jaW5j
bHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKLSNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci11c2luZyBuYW1lc3Bh
Y2UgV1RGOwotdXNpbmcgbmFtZXNwYWNlIFVuaWNvZGU7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotQ29udGV4dE1lbnVDb250cm9sbGVyKiBDb250ZXh0TWVudTo6Y29udHJvbGxlcigpIGNvbnN0
Ci17Ci0gICAgaWYgKE5vZGUqIG5vZGUgPSBtX2hpdFRlc3RSZXN1bHQuaW5uZXJOb25TaGFyZWRO
b2RlKCkpCi0gICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLT5mcmFt
ZSgpKQotICAgICAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBwYWdlLT5jb250ZXh0TWVudUNvbnRyb2xsZXIoKTsKLSAgICByZXR1
cm4gMDsKLX0KLQotc3RhdGljIFBhc3NPd25QdHI8Q29udGV4dE1lbnVJdGVtPiBzZXBhcmF0b3JJ
dGVtKCkKLXsKLSAgICByZXR1cm4gbmV3IENvbnRleHRNZW51SXRlbShTZXBhcmF0b3JUeXBlLCBD
b250ZXh0TWVudUl0ZW1UYWdOb0FjdGlvbiwgU3RyaW5nKCkpOwotfQotCi1zdGF0aWMgdm9pZCBj
cmVhdGVBbmRBcHBlbmRGb250U3ViTWVudShjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIENv
bnRleHRNZW51SXRlbSYgZm9udE1lbnVJdGVtKQotewotICAgIENvbnRleHRNZW51IGZvbnRNZW51
KHJlc3VsdCk7Ci0KLSNpZiBQTEFURk9STShNQUMpCi0gICAgQ29udGV4dE1lbnVJdGVtIHNob3dG
b250cyhBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTaG93Rm9udHMsIGNvbnRleHRNZW51
SXRlbVRhZ1Nob3dGb250cygpKTsKLSNlbmRpZgotICAgIENvbnRleHRNZW51SXRlbSBib2xkKENo
ZWNrYWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0JvbGQsIGNvbnRleHRNZW51SXRl
bVRhZ0JvbGQoKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIGl0YWxpYyhDaGVja2FibGVBY3Rpb25U
eXBlLCBDb250ZXh0TWVudUl0ZW1UYWdJdGFsaWMsIGNvbnRleHRNZW51SXRlbVRhZ0l0YWxpYygp
KTsKLSAgICBDb250ZXh0TWVudUl0ZW0gdW5kZXJsaW5lKENoZWNrYWJsZUFjdGlvblR5cGUsIENv
bnRleHRNZW51SXRlbVRhZ1VuZGVybGluZSwgY29udGV4dE1lbnVJdGVtVGFnVW5kZXJsaW5lKCkp
OwotICAgIENvbnRleHRNZW51SXRlbSBvdXRsaW5lKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRl
bVRhZ091dGxpbmUsIGNvbnRleHRNZW51SXRlbVRhZ091dGxpbmUoKSk7Ci0jaWYgUExBVEZPUk0o
TUFDKQotICAgIENvbnRleHRNZW51SXRlbSBzdHlsZXMoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJ
dGVtVGFnU3R5bGVzLCBjb250ZXh0TWVudUl0ZW1UYWdTdHlsZXMoKSk7Ci0gICAgQ29udGV4dE1l
bnVJdGVtIHNob3dDb2xvcnMoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU2hvd0NvbG9y
cywgY29udGV4dE1lbnVJdGVtVGFnU2hvd0NvbG9ycygpKTsKLSNlbmRpZgotCi0jaWYgUExBVEZP
Uk0oTUFDKQotICAgIGZvbnRNZW51LmFwcGVuZEl0ZW0oc2hvd0ZvbnRzKTsKLSNlbmRpZgotICAg
IGZvbnRNZW51LmFwcGVuZEl0ZW0oYm9sZCk7Ci0gICAgZm9udE1lbnUuYXBwZW5kSXRlbShpdGFs
aWMpOwotICAgIGZvbnRNZW51LmFwcGVuZEl0ZW0odW5kZXJsaW5lKTsKLSAgICBmb250TWVudS5h
cHBlbmRJdGVtKG91dGxpbmUpOwotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBmb250TWVudS5hcHBl
bmRJdGVtKHN0eWxlcyk7Ci0gICAgZm9udE1lbnUuYXBwZW5kSXRlbSgqc2VwYXJhdG9ySXRlbSgp
KTsKLSAgICBmb250TWVudS5hcHBlbmRJdGVtKHNob3dDb2xvcnMpOwotI2VuZGlmCi0KLSAgICBm
b250TWVudUl0ZW0uc2V0U3ViTWVudSgmZm9udE1lbnUpOwotfQotCi0jaWYgIWRlZmluZWQoQlVJ
TERJTkdfT05fVElHRVIpCi0KLSNpZiAhUExBVEZPUk0oR1RLKQotCi1zdGF0aWMgdm9pZCBjcmVh
dGVBbmRBcHBlbmRTcGVsbGluZ0FuZEdyYW1tYXJTdWJNZW51KGNvbnN0IEhpdFRlc3RSZXN1bHQm
IHJlc3VsdCwgQ29udGV4dE1lbnVJdGVtJiBzcGVsbGluZ0FuZEdyYW1tYXJNZW51SXRlbSkKLXsK
LSAgICBDb250ZXh0TWVudSBzcGVsbGluZ0FuZEdyYW1tYXJNZW51KHJlc3VsdCk7Ci0KLSAgICBD
b250ZXh0TWVudUl0ZW0gc2hvd1NwZWxsaW5nUGFuZWwoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJ
dGVtVGFnU2hvd1NwZWxsaW5nUGFuZWwsIAotICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdTaG93
U3BlbGxpbmdQYW5lbCh0cnVlKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIGNoZWNrU3BlbGxpbmco
QWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnQ2hlY2tTcGVsbGluZywgCi0gICAgICAgIGNv
bnRleHRNZW51SXRlbVRhZ0NoZWNrU3BlbGxpbmcoKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIGNo
ZWNrQXNZb3VUeXBlKENoZWNrYWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0NoZWNr
U3BlbGxpbmdXaGlsZVR5cGluZywgCi0gICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ0NoZWNrU3Bl
bGxpbmdXaGlsZVR5cGluZygpKTsKLSAgICBDb250ZXh0TWVudUl0ZW0gZ3JhbW1hcldpdGhTcGVs
bGluZyhDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdDaGVja0dyYW1tYXJX
aXRoU3BlbGxpbmcsIAotICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdDaGVja0dyYW1tYXJXaXRo
U3BlbGxpbmcoKSk7Ci0jaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9M
RU9QQVJEKQotICAgIENvbnRleHRNZW51SXRlbSBjb3JyZWN0U3BlbGxpbmcoQ2hlY2thYmxlQWN0
aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnQ29ycmVjdFNwZWxsaW5nQXV0b21hdGljYWxseSwg
Ci0gICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ0NvcnJlY3RTcGVsbGluZ0F1dG9tYXRpY2FsbHko
KSk7Ci0jZW5kaWYKLQotICAgIHNwZWxsaW5nQW5kR3JhbW1hck1lbnUuYXBwZW5kSXRlbShzaG93
U3BlbGxpbmdQYW5lbCk7Ci0gICAgc3BlbGxpbmdBbmRHcmFtbWFyTWVudS5hcHBlbmRJdGVtKGNo
ZWNrU3BlbGxpbmcpOwotI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05f
TEVPUEFSRCkKLSAgICBzcGVsbGluZ0FuZEdyYW1tYXJNZW51LmFwcGVuZEl0ZW0oKnNlcGFyYXRv
ckl0ZW0oKSk7Ci0jZW5kaWYKLSAgICBzcGVsbGluZ0FuZEdyYW1tYXJNZW51LmFwcGVuZEl0ZW0o
Y2hlY2tBc1lvdVR5cGUpOwotICAgIHNwZWxsaW5nQW5kR3JhbW1hck1lbnUuYXBwZW5kSXRlbShn
cmFtbWFyV2l0aFNwZWxsaW5nKTsKLSNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxE
SU5HX09OX0xFT1BBUkQpCi0gICAgc3BlbGxpbmdBbmRHcmFtbWFyTWVudS5hcHBlbmRJdGVtKGNv
cnJlY3RTcGVsbGluZyk7Ci0jZW5kaWYKLQotICAgIHNwZWxsaW5nQW5kR3JhbW1hck1lbnVJdGVt
LnNldFN1Yk1lbnUoJnNwZWxsaW5nQW5kR3JhbW1hck1lbnUpOwotfQotCi0jZW5kaWYgLy8gIVBM
QVRGT1JNKEdUSykKLQotI2Vsc2UKLQotc3RhdGljIHZvaWQgY3JlYXRlQW5kQXBwZW5kU3BlbGxp
bmdTdWJNZW51KGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgQ29udGV4dE1lbnVJdGVtJiBz
cGVsbGluZ01lbnVJdGVtKQotewotICAgIENvbnRleHRNZW51IHNwZWxsaW5nTWVudShyZXN1bHQp
OwotCi0gICAgQ29udGV4dE1lbnVJdGVtIHNob3dTcGVsbGluZ1BhbmVsKEFjdGlvblR5cGUsIENv
bnRleHRNZW51SXRlbVRhZ1Nob3dTcGVsbGluZ1BhbmVsLCAKLSAgICAgICAgY29udGV4dE1lbnVJ
dGVtVGFnU2hvd1NwZWxsaW5nUGFuZWwodHJ1ZSkpOwotICAgIENvbnRleHRNZW51SXRlbSBjaGVj
a1NwZWxsaW5nKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0NoZWNrU3BlbGxpbmcsIAot
ICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdDaGVja1NwZWxsaW5nKCkpOwotICAgIENvbnRleHRN
ZW51SXRlbSBjaGVja0FzWW91VHlwZShDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0
ZW1UYWdDaGVja1NwZWxsaW5nV2hpbGVUeXBpbmcsIAotICAgICAgICBjb250ZXh0TWVudUl0ZW1U
YWdDaGVja1NwZWxsaW5nV2hpbGVUeXBpbmcoKSk7Ci0KLSAgICBzcGVsbGluZ01lbnUuYXBwZW5k
SXRlbShzaG93U3BlbGxpbmdQYW5lbCk7Ci0gICAgc3BlbGxpbmdNZW51LmFwcGVuZEl0ZW0oY2hl
Y2tTcGVsbGluZyk7Ci0gICAgc3BlbGxpbmdNZW51LmFwcGVuZEl0ZW0oY2hlY2tBc1lvdVR5cGUp
OwotCi0gICAgc3BlbGxpbmdNZW51SXRlbS5zZXRTdWJNZW51KCZzcGVsbGluZ01lbnUpOwotfQot
Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKE1BQykKLQotc3RhdGljIHZvaWQgY3JlYXRlQW5kQXBw
ZW5kU3BlZWNoU3ViTWVudShjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIENvbnRleHRNZW51
SXRlbSYgc3BlZWNoTWVudUl0ZW0pCi17Ci0gICAgQ29udGV4dE1lbnUgc3BlZWNoTWVudShyZXN1
bHQpOwotCi0gICAgQ29udGV4dE1lbnVJdGVtIHN0YXJ0KEFjdGlvblR5cGUsIENvbnRleHRNZW51
SXRlbVRhZ1N0YXJ0U3BlYWtpbmcsIGNvbnRleHRNZW51SXRlbVRhZ1N0YXJ0U3BlYWtpbmcoKSk7
Ci0gICAgQ29udGV4dE1lbnVJdGVtIHN0b3AoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFn
U3RvcFNwZWFraW5nLCBjb250ZXh0TWVudUl0ZW1UYWdTdG9wU3BlYWtpbmcoKSk7Ci0KLSAgICBz
cGVlY2hNZW51LmFwcGVuZEl0ZW0oc3RhcnQpOwotICAgIHNwZWVjaE1lbnUuYXBwZW5kSXRlbShz
dG9wKTsKLQotICAgIHNwZWVjaE1lbnVJdGVtLnNldFN1Yk1lbnUoJnNwZWVjaE1lbnUpOwotfQot
Ci0jZW5kaWYKLSAKLSNpZiAhUExBVEZPUk0oR1RLKQotCi1zdGF0aWMgdm9pZCBjcmVhdGVBbmRB
cHBlbmRXcml0aW5nRGlyZWN0aW9uU3ViTWVudShjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQs
IENvbnRleHRNZW51SXRlbSYgd3JpdGluZ0RpcmVjdGlvbk1lbnVJdGVtKQotewotICAgIENvbnRl
eHRNZW51IHdyaXRpbmdEaXJlY3Rpb25NZW51KHJlc3VsdCk7Ci0KLSAgICBDb250ZXh0TWVudUl0
ZW0gZGVmYXVsdEl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnRGVmYXVsdERpcmVj
dGlvbiwgCi0gICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ0RlZmF1bHREaXJlY3Rpb24oKSk7Ci0g
ICAgQ29udGV4dE1lbnVJdGVtIGx0cihDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0
ZW1UYWdMZWZ0VG9SaWdodCwgY29udGV4dE1lbnVJdGVtVGFnTGVmdFRvUmlnaHQoKSk7Ci0gICAg
Q29udGV4dE1lbnVJdGVtIHJ0bChDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1U
YWdSaWdodFRvTGVmdCwgY29udGV4dE1lbnVJdGVtVGFnUmlnaHRUb0xlZnQoKSk7Ci0KLSAgICB3
cml0aW5nRGlyZWN0aW9uTWVudS5hcHBlbmRJdGVtKGRlZmF1bHRJdGVtKTsKLSAgICB3cml0aW5n
RGlyZWN0aW9uTWVudS5hcHBlbmRJdGVtKGx0cik7Ci0gICAgd3JpdGluZ0RpcmVjdGlvbk1lbnUu
YXBwZW5kSXRlbShydGwpOwotCi0gICAgd3JpdGluZ0RpcmVjdGlvbk1lbnVJdGVtLnNldFN1Yk1l
bnUoJndyaXRpbmdEaXJlY3Rpb25NZW51KTsKLX0KLQotc3RhdGljIHZvaWQgY3JlYXRlQW5kQXBw
ZW5kVGV4dERpcmVjdGlvblN1Yk1lbnUoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBDb250
ZXh0TWVudUl0ZW0mIHRleHREaXJlY3Rpb25NZW51SXRlbSkKLXsKLSAgICBDb250ZXh0TWVudSB0
ZXh0RGlyZWN0aW9uTWVudShyZXN1bHQpOwotCi0gICAgQ29udGV4dE1lbnVJdGVtIGRlZmF1bHRJ
dGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1RleHREaXJlY3Rpb25EZWZhdWx0LCBj
b250ZXh0TWVudUl0ZW1UYWdEZWZhdWx0RGlyZWN0aW9uKCkpOwotICAgIENvbnRleHRNZW51SXRl
bSBsdHIoQ2hlY2thYmxlQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnVGV4dERpcmVjdGlv
bkxlZnRUb1JpZ2h0LCBjb250ZXh0TWVudUl0ZW1UYWdMZWZ0VG9SaWdodCgpKTsKLSAgICBDb250
ZXh0TWVudUl0ZW0gcnRsKENoZWNrYWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1Rl
eHREaXJlY3Rpb25SaWdodFRvTGVmdCwgY29udGV4dE1lbnVJdGVtVGFnUmlnaHRUb0xlZnQoKSk7
Ci0KLSAgICB0ZXh0RGlyZWN0aW9uTWVudS5hcHBlbmRJdGVtKGRlZmF1bHRJdGVtKTsKLSAgICB0
ZXh0RGlyZWN0aW9uTWVudS5hcHBlbmRJdGVtKGx0cik7Ci0gICAgdGV4dERpcmVjdGlvbk1lbnUu
YXBwZW5kSXRlbShydGwpOwotCi0gICAgdGV4dERpcmVjdGlvbk1lbnVJdGVtLnNldFN1Yk1lbnUo
JnRleHREaXJlY3Rpb25NZW51KTsKLX0KLQotI2VuZGlmCi0KLSNpZiBQTEFURk9STShNQUMpICYm
ICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9Q
QVJEKQotCi1zdGF0aWMgdm9pZCBjcmVhdGVBbmRBcHBlbmRTdWJzdGl0dXRpb25zU3ViTWVudShj
b25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIENvbnRleHRNZW51SXRlbSYgc3Vic3RpdHV0aW9u
c01lbnVJdGVtKQotewotICAgIENvbnRleHRNZW51IHN1YnN0aXR1dGlvbnNNZW51KHJlc3VsdCk7
Ci0KLSAgICBDb250ZXh0TWVudUl0ZW0gc2hvd1N1YnN0aXR1dGlvbnMoQWN0aW9uVHlwZSwgQ29u
dGV4dE1lbnVJdGVtVGFnU2hvd1N1YnN0aXR1dGlvbnMsIGNvbnRleHRNZW51SXRlbVRhZ1Nob3dT
dWJzdGl0dXRpb25zKHRydWUpKTsKLSAgICBDb250ZXh0TWVudUl0ZW0gc21hcnRDb3B5UGFzdGUo
Q2hlY2thYmxlQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU21hcnRDb3B5UGFzdGUsIGNv
bnRleHRNZW51SXRlbVRhZ1NtYXJ0Q29weVBhc3RlKCkpOwotICAgIENvbnRleHRNZW51SXRlbSBz
bWFydFF1b3RlcyhDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTbWFydFF1
b3RlcywgY29udGV4dE1lbnVJdGVtVGFnU21hcnRRdW90ZXMoKSk7Ci0gICAgQ29udGV4dE1lbnVJ
dGVtIHNtYXJ0RGFzaGVzKENoZWNrYWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1Nt
YXJ0RGFzaGVzLCBjb250ZXh0TWVudUl0ZW1UYWdTbWFydERhc2hlcygpKTsKLSAgICBDb250ZXh0
TWVudUl0ZW0gc21hcnRMaW5rcyhDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1U
YWdTbWFydExpbmtzLCBjb250ZXh0TWVudUl0ZW1UYWdTbWFydExpbmtzKCkpOwotICAgIENvbnRl
eHRNZW51SXRlbSB0ZXh0UmVwbGFjZW1lbnQoQ2hlY2thYmxlQWN0aW9uVHlwZSwgQ29udGV4dE1l
bnVJdGVtVGFnVGV4dFJlcGxhY2VtZW50LCBjb250ZXh0TWVudUl0ZW1UYWdUZXh0UmVwbGFjZW1l
bnQoKSk7Ci0KLSAgICBzdWJzdGl0dXRpb25zTWVudS5hcHBlbmRJdGVtKHNob3dTdWJzdGl0dXRp
b25zKTsKLSAgICBzdWJzdGl0dXRpb25zTWVudS5hcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCkp
OwotICAgIHN1YnN0aXR1dGlvbnNNZW51LmFwcGVuZEl0ZW0oc21hcnRDb3B5UGFzdGUpOwotICAg
IHN1YnN0aXR1dGlvbnNNZW51LmFwcGVuZEl0ZW0oc21hcnRRdW90ZXMpOwotICAgIHN1YnN0aXR1
dGlvbnNNZW51LmFwcGVuZEl0ZW0oc21hcnREYXNoZXMpOwotICAgIHN1YnN0aXR1dGlvbnNNZW51
LmFwcGVuZEl0ZW0oc21hcnRMaW5rcyk7Ci0gICAgc3Vic3RpdHV0aW9uc01lbnUuYXBwZW5kSXRl
bSh0ZXh0UmVwbGFjZW1lbnQpOwotCi0gICAgc3Vic3RpdHV0aW9uc01lbnVJdGVtLnNldFN1Yk1l
bnUoJnN1YnN0aXR1dGlvbnNNZW51KTsKLX0KLQotc3RhdGljIHZvaWQgY3JlYXRlQW5kQXBwZW5k
VHJhbnNmb3JtYXRpb25zU3ViTWVudShjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIENvbnRl
eHRNZW51SXRlbSYgdHJhbnNmb3JtYXRpb25zTWVudUl0ZW0pCi17Ci0gICAgQ29udGV4dE1lbnUg
dHJhbnNmb3JtYXRpb25zTWVudShyZXN1bHQpOwotCi0gICAgQ29udGV4dE1lbnVJdGVtIG1ha2VV
cHBlckNhc2UoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnTWFrZVVwcGVyQ2FzZSwgY29u
dGV4dE1lbnVJdGVtVGFnTWFrZVVwcGVyQ2FzZSgpKTsKLSAgICBDb250ZXh0TWVudUl0ZW0gbWFr
ZUxvd2VyQ2FzZShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdNYWtlTG93ZXJDYXNlLCBj
b250ZXh0TWVudUl0ZW1UYWdNYWtlTG93ZXJDYXNlKCkpOwotICAgIENvbnRleHRNZW51SXRlbSBj
YXBpdGFsaXplKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0NhcGl0YWxpemUsIGNvbnRl
eHRNZW51SXRlbVRhZ0NhcGl0YWxpemUoKSk7Ci0KLSAgICB0cmFuc2Zvcm1hdGlvbnNNZW51LmFw
cGVuZEl0ZW0obWFrZVVwcGVyQ2FzZSk7Ci0gICAgdHJhbnNmb3JtYXRpb25zTWVudS5hcHBlbmRJ
dGVtKG1ha2VMb3dlckNhc2UpOwotICAgIHRyYW5zZm9ybWF0aW9uc01lbnUuYXBwZW5kSXRlbShj
YXBpdGFsaXplKTsKLQotICAgIHRyYW5zZm9ybWF0aW9uc01lbnVJdGVtLnNldFN1Yk1lbnUoJnRy
YW5zZm9ybWF0aW9uc01lbnUpOwotfQotCi0jZW5kaWYKLQotc3RhdGljIGJvb2wgc2VsZWN0aW9u
Q29udGFpbnNQb3NzaWJsZVdvcmQoRnJhbWUqIGZyYW1lKQotewotICAgIC8vIEN1cnJlbnQgYWxn
b3JpdGhtOiBsb29rIGZvciBhIGNoYXJhY3RlciB0aGF0J3Mgbm90IGp1c3QgYSBzZXBhcmF0b3Iu
Ci0gICAgZm9yIChUZXh0SXRlcmF0b3IgaXQoZnJhbWUtPnNlbGVjdGlvbigpLT50b05vcm1hbGl6
ZWRSYW5nZSgpLmdldCgpKTsgIWl0LmF0RW5kKCk7IGl0LmFkdmFuY2UoKSkgewotICAgICAgICBp
bnQgbGVuZ3RoID0gaXQubGVuZ3RoKCk7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJz
ID0gaXQuY2hhcmFjdGVycygpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsg
KytpKQotICAgICAgICAgICAgaWYgKCEoY2F0ZWdvcnkoY2hhcmFjdGVyc1tpXSkgJiAoU2VwYXJh
dG9yX1NwYWNlIHwgU2VwYXJhdG9yX0xpbmUgfCBTZXBhcmF0b3JfUGFyYWdyYXBoKSkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
dm9pZCBDb250ZXh0TWVudTo6cG9wdWxhdGUoKQotewotICAgIENvbnRleHRNZW51SXRlbSBPcGVu
TGlua0l0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnT3BlbkxpbmssIGNvbnRleHRN
ZW51SXRlbVRhZ09wZW5MaW5rKCkpOwotICAgIENvbnRleHRNZW51SXRlbSBPcGVuTGlua0luTmV3
V2luZG93SXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdPcGVuTGlua0luTmV3V2lu
ZG93LCAKLSAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnT3BlbkxpbmtJbk5ld1dpbmRvdygpKTsK
LSAgICBDb250ZXh0TWVudUl0ZW0gRG93bmxvYWRGaWxlSXRlbShBY3Rpb25UeXBlLCBDb250ZXh0
TWVudUl0ZW1UYWdEb3dubG9hZExpbmtUb0Rpc2ssIAotICAgICAgICBjb250ZXh0TWVudUl0ZW1U
YWdEb3dubG9hZExpbmtUb0Rpc2soKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIENvcHlMaW5rSXRl
bShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdDb3B5TGlua1RvQ2xpcGJvYXJkLCAKLSAg
ICAgICAgY29udGV4dE1lbnVJdGVtVGFnQ29weUxpbmtUb0NsaXBib2FyZCgpKTsKLSAgICBDb250
ZXh0TWVudUl0ZW0gT3BlbkltYWdlSW5OZXdXaW5kb3dJdGVtKEFjdGlvblR5cGUsIENvbnRleHRN
ZW51SXRlbVRhZ09wZW5JbWFnZUluTmV3V2luZG93LCAKLSAgICAgICAgY29udGV4dE1lbnVJdGVt
VGFnT3BlbkltYWdlSW5OZXdXaW5kb3coKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIERvd25sb2Fk
SW1hZ2VJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0Rvd25sb2FkSW1hZ2VUb0Rp
c2ssIAotICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdEb3dubG9hZEltYWdlVG9EaXNrKCkpOwot
ICAgIENvbnRleHRNZW51SXRlbSBDb3B5SW1hZ2VJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51
SXRlbVRhZ0NvcHlJbWFnZVRvQ2xpcGJvYXJkLCAKLSAgICAgICAgY29udGV4dE1lbnVJdGVtVGFn
Q29weUltYWdlVG9DbGlwYm9hcmQoKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIE9wZW5NZWRpYUlu
TmV3V2luZG93SXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdPcGVuTWVkaWFJbk5l
d1dpbmRvdywgU3RyaW5nKCkpOwotICAgIENvbnRleHRNZW51SXRlbSBDb3B5TWVkaWFMaW5rSXRl
bShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdDb3B5TWVkaWFMaW5rVG9DbGlwYm9hcmQs
IAotICAgICAgICBTdHJpbmcoKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIE1lZGlhUGxheVBhdXNl
KEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ01lZGlhUGxheVBhdXNlLCAKLSAgICAgICAg
Y29udGV4dE1lbnVJdGVtVGFnTWVkaWFQbGF5KCkpOwotICAgIENvbnRleHRNZW51SXRlbSBNZWRp
YU11dGUoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnTWVkaWFNdXRlLCAKLSAgICAgICAg
Y29udGV4dE1lbnVJdGVtVGFnTWVkaWFNdXRlKCkpOwotICAgIENvbnRleHRNZW51SXRlbSBUb2dn
bGVNZWRpYUNvbnRyb2xzKENoZWNrYWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1Rv
Z2dsZU1lZGlhQ29udHJvbHMsIAotICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdUb2dnbGVNZWRp
YUNvbnRyb2xzKCkpOwotICAgIENvbnRleHRNZW51SXRlbSBUb2dnbGVNZWRpYUxvb3AoQ2hlY2th
YmxlQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnVG9nZ2xlTWVkaWFMb29wLCAKLSAgICAg
ICAgY29udGV4dE1lbnVJdGVtVGFnVG9nZ2xlTWVkaWFMb29wKCkpOwotICAgIENvbnRleHRNZW51
SXRlbSBFbnRlclZpZGVvRnVsbHNjcmVlbihBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdF
bnRlclZpZGVvRnVsbHNjcmVlbiwgCi0gICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ0VudGVyVmlk
ZW9GdWxsc2NyZWVuKCkpOwotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBDb250ZXh0TWVudUl0ZW0g
U2VhcmNoU3BvdGxpZ2h0SXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTZWFyY2hJ
blNwb3RsaWdodCwgCi0gICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ1NlYXJjaEluU3BvdGxpZ2h0
KCkpOwotICAgIENvbnRleHRNZW51SXRlbSBMb29rSW5EaWN0aW9uYXJ5SXRlbShBY3Rpb25UeXBl
LCBDb250ZXh0TWVudUl0ZW1UYWdMb29rVXBJbkRpY3Rpb25hcnksIAotICAgICAgICBjb250ZXh0
TWVudUl0ZW1UYWdMb29rVXBJbkRpY3Rpb25hcnkoKSk7Ci0jZW5kaWYKLSNpZiAhUExBVEZPUk0o
R1RLKQotICAgIENvbnRleHRNZW51SXRlbSBTZWFyY2hXZWJJdGVtKEFjdGlvblR5cGUsIENvbnRl
eHRNZW51SXRlbVRhZ1NlYXJjaFdlYiwgY29udGV4dE1lbnVJdGVtVGFnU2VhcmNoV2ViKCkpOwot
I2VuZGlmCi0gICAgQ29udGV4dE1lbnVJdGVtIENvcHlJdGVtKEFjdGlvblR5cGUsIENvbnRleHRN
ZW51SXRlbVRhZ0NvcHksIGNvbnRleHRNZW51SXRlbVRhZ0NvcHkoKSk7Ci0gICAgQ29udGV4dE1l
bnVJdGVtIEJhY2tJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0dvQmFjaywgY29u
dGV4dE1lbnVJdGVtVGFnR29CYWNrKCkpOwotICAgIENvbnRleHRNZW51SXRlbSBGb3J3YXJkSXRl
bShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdHb0ZvcndhcmQsICBjb250ZXh0TWVudUl0
ZW1UYWdHb0ZvcndhcmQoKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIFN0b3BJdGVtKEFjdGlvblR5
cGUsIENvbnRleHRNZW51SXRlbVRhZ1N0b3AsIGNvbnRleHRNZW51SXRlbVRhZ1N0b3AoKSk7Ci0g
ICAgQ29udGV4dE1lbnVJdGVtIFJlbG9hZEl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVt
VGFnUmVsb2FkLCBjb250ZXh0TWVudUl0ZW1UYWdSZWxvYWQoKSk7Ci0gICAgQ29udGV4dE1lbnVJ
dGVtIE9wZW5GcmFtZUl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnT3BlbkZyYW1l
SW5OZXdXaW5kb3csIAotICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdPcGVuRnJhbWVJbk5ld1dp
bmRvdygpKTsKLSAgICBDb250ZXh0TWVudUl0ZW0gTm9HdWVzc2VzSXRlbShBY3Rpb25UeXBlLCBD
b250ZXh0TWVudUl0ZW1UYWdOb0d1ZXNzZXNGb3VuZCwgCi0gICAgICAgIGNvbnRleHRNZW51SXRl
bVRhZ05vR3Vlc3Nlc0ZvdW5kKCkpOwotICAgIENvbnRleHRNZW51SXRlbSBJZ25vcmVTcGVsbGlu
Z0l0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnSWdub3JlU3BlbGxpbmcsIAotICAg
ICAgICBjb250ZXh0TWVudUl0ZW1UYWdJZ25vcmVTcGVsbGluZygpKTsKLSAgICBDb250ZXh0TWVu
dUl0ZW0gTGVhcm5TcGVsbGluZ0l0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnTGVh
cm5TcGVsbGluZywgCi0gICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ0xlYXJuU3BlbGxpbmcoKSk7
Ci0gICAgQ29udGV4dE1lbnVJdGVtIElnbm9yZUdyYW1tYXJJdGVtKEFjdGlvblR5cGUsIENvbnRl
eHRNZW51SXRlbVRhZ0lnbm9yZUdyYW1tYXIsIAotICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdJ
Z25vcmVHcmFtbWFyKCkpOwotICAgIENvbnRleHRNZW51SXRlbSBDdXRJdGVtKEFjdGlvblR5cGUs
IENvbnRleHRNZW51SXRlbVRhZ0N1dCwgY29udGV4dE1lbnVJdGVtVGFnQ3V0KCkpOwotICAgIENv
bnRleHRNZW51SXRlbSBQYXN0ZUl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnUGFz
dGUsIGNvbnRleHRNZW51SXRlbVRhZ1Bhc3RlKCkpOwotI2lmIFBMQVRGT1JNKEdUSykKLSAgICBD
b250ZXh0TWVudUl0ZW0gRGVsZXRlSXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdE
ZWxldGUsIGNvbnRleHRNZW51SXRlbVRhZ0RlbGV0ZSgpKTsKLSAgICBDb250ZXh0TWVudUl0ZW0g
U2VsZWN0QWxsSXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTZWxlY3RBbGwsIGNv
bnRleHRNZW51SXRlbVRhZ1NlbGVjdEFsbCgpKTsKLSNlbmRpZgotICAgIAotICAgIEhpdFRlc3RS
ZXN1bHQgcmVzdWx0ID0gaGl0VGVzdFJlc3VsdCgpOwotICAgIAotICAgIE5vZGUqIG5vZGUgPSBt
X2hpdFRlc3RSZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCk7Ci0gICAgaWYgKCFub2RlKQotICAg
ICAgICByZXR1cm47Ci0jaWYgUExBVEZPUk0oR1RLKQotICAgIGlmICghcmVzdWx0LmlzQ29udGVu
dEVkaXRhYmxlKCkgJiYgKG5vZGUtPmlzRWxlbWVudE5vZGUoKSAmJiBzdGF0aWNfY2FzdDxFbGVt
ZW50Kj4obm9kZSktPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpKQotICAgICAgICByZXR1cm47Ci0j
ZW5kaWYKLSAgICBGcmFtZSogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpOwotICAg
IGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghcmVzdWx0LmlzQ29udGVu
dEVkaXRhYmxlKCkpIHsKLSAgICAgICAgRnJhbWVMb2FkZXIqIGxvYWRlciA9IGZyYW1lLT5sb2Fk
ZXIoKTsKLSAgICAgICAgS1VSTCBsaW5rVVJMID0gcmVzdWx0LmFic29sdXRlTGlua1VSTCgpOwot
ICAgICAgICBpZiAoIWxpbmtVUkwuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBpZiAobG9hZGVy
LT5jYW5IYW5kbGVSZXF1ZXN0KFJlc291cmNlUmVxdWVzdChsaW5rVVJMKSkpIHsKLSAgICAgICAg
ICAgICAgICBhcHBlbmRJdGVtKE9wZW5MaW5rSXRlbSk7Ci0gICAgICAgICAgICAgICAgYXBwZW5k
SXRlbShPcGVuTGlua0luTmV3V2luZG93SXRlbSk7Ci0gICAgICAgICAgICAgICAgYXBwZW5kSXRl
bShEb3dubG9hZEZpbGVJdGVtKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGFwcGVuZEl0
ZW0oQ29weUxpbmtJdGVtKTsKLSAgICAgICAgfQotCi0gICAgICAgIEtVUkwgaW1hZ2VVUkwgPSBy
ZXN1bHQuYWJzb2x1dGVJbWFnZVVSTCgpOwotICAgICAgICBpZiAoIWltYWdlVVJMLmlzRW1wdHko
KSkgewotICAgICAgICAgICAgaWYgKCFsaW5rVVJMLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAg
ICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCkpOwotCi0gICAgICAgICAgICBhcHBlbmRJdGVt
KE9wZW5JbWFnZUluTmV3V2luZG93SXRlbSk7Ci0gICAgICAgICAgICBhcHBlbmRJdGVtKERvd25s
b2FkSW1hZ2VJdGVtKTsKLSAgICAgICAgICAgIGlmIChpbWFnZVVSTC5pc0xvY2FsRmlsZSgpIHx8
IG1faGl0VGVzdFJlc3VsdC5pbWFnZSgpKQotICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oQ29w
eUltYWdlSXRlbSk7Ci0gICAgICAgIH0KLQotICAgICAgICBLVVJMIG1lZGlhVVJMID0gcmVzdWx0
LmFic29sdXRlTWVkaWFVUkwoKTsKLSAgICAgICAgaWYgKCFtZWRpYVVSTC5pc0VtcHR5KCkpIHsK
LSAgICAgICAgICAgIGlmICghbGlua1VSTC5pc0VtcHR5KCkgfHwgIWltYWdlVVJMLmlzRW1wdHko
KSkKLSAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCkpOwotCi0gICAg
ICAgICAgICBhcHBlbmRJdGVtKE1lZGlhUGxheVBhdXNlKTsKLSAgICAgICAgICAgIGFwcGVuZEl0
ZW0oTWVkaWFNdXRlKTsKLSAgICAgICAgICAgIGFwcGVuZEl0ZW0oVG9nZ2xlTWVkaWFDb250cm9s
cyk7Ci0gICAgICAgICAgICBhcHBlbmRJdGVtKFRvZ2dsZU1lZGlhTG9vcCk7Ci0gICAgICAgICAg
ICBhcHBlbmRJdGVtKEVudGVyVmlkZW9GdWxsc2NyZWVuKTsKLQotICAgICAgICAgICAgYXBwZW5k
SXRlbSgqc2VwYXJhdG9ySXRlbSgpKTsKLSAgICAgICAgICAgIGFwcGVuZEl0ZW0oQ29weU1lZGlh
TGlua0l0ZW0pOwotICAgICAgICAgICAgYXBwZW5kSXRlbShPcGVuTWVkaWFJbk5ld1dpbmRvd0l0
ZW0pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGltYWdlVVJMLmlzRW1wdHkoKSAmJiBsaW5r
VVJMLmlzRW1wdHkoKSAmJiBtZWRpYVVSTC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGlmIChy
ZXN1bHQuaXNTZWxlY3RlZCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGlvbkNvbnRh
aW5zUG9zc2libGVXb3JkKGZyYW1lKSkgewotI2lmIFBMQVRGT1JNKE1BQykKLSAgICAgICAgICAg
ICAgICAgICAgYXBwZW5kSXRlbShTZWFyY2hTcG90bGlnaHRJdGVtKTsKLSNlbmRpZgotI2lmICFQ
TEFURk9STShHVEspCi0gICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oU2VhcmNoV2ViSXRl
bSk7Ci0gICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSk7Ci0j
ZW5kaWYKLSNpZiBQTEFURk9STShNQUMpCi0gICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0o
TG9va0luRGljdGlvbmFyeUl0ZW0pOwotICAgICAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKCpz
ZXBhcmF0b3JJdGVtKCkpOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGFwcGVuZEl0ZW0oQ29weUl0ZW0pOwotI2lmIFBMQVRGT1JNKE1BQykKLSAgICAgICAgICAg
ICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCkpOwotICAgICAgICAgICAgICAgIENvbnRl
eHRNZW51SXRlbSBTcGVlY2hNZW51SXRlbShTdWJtZW51VHlwZSwgQ29udGV4dE1lbnVJdGVtVGFn
U3BlZWNoTWVudSwgY29udGV4dE1lbnVJdGVtVGFnU3BlZWNoTWVudSgpKTsKLSAgICAgICAgICAg
ICAgICBjcmVhdGVBbmRBcHBlbmRTcGVlY2hTdWJNZW51KG1faGl0VGVzdFJlc3VsdCwgU3BlZWNo
TWVudUl0ZW0pOwotICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oU3BlZWNoTWVudUl0ZW0pOwot
I2VuZGlmICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgfSBlbHNlIHsKLSNpZiBFTkFCTEUo
SU5TUEVDVE9SKQotICAgICAgICAgICAgICAgIGlmICghKGZyYW1lLT5wYWdlKCkgJiYgZnJhbWUt
PnBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5oYXNJbnNwZWN0b3JGcm9udGVuZENsaWVu
dCgpKSkgewotI2VuZGlmCi0gICAgICAgICAgICAgICAgaWYgKGZyYW1lLT5wYWdlKCkgJiYgZnJh
bWUtPnBhZ2UoKS0+YmFja0ZvcndhcmQoKS0+Y2FuR29CYWNrT3JGb3J3YXJkKC0xKSkKLSAgICAg
ICAgICAgICAgICAgICAgYXBwZW5kSXRlbShCYWNrSXRlbSk7Ci0KLSAgICAgICAgICAgICAgICBp
ZiAoZnJhbWUtPnBhZ2UoKSAmJiBmcmFtZS0+cGFnZSgpLT5iYWNrRm9yd2FyZCgpLT5jYW5Hb0Jh
Y2tPckZvcndhcmQoMSkpCi0gICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oRm9yd2FyZEl0
ZW0pOwotCi0gICAgICAgICAgICAgICAgLy8gdXNlIGlzTG9hZGluZ0luQVBJU2Vuc2UgcmF0aGVy
IHRoYW4gaXNMb2FkaW5nIGJlY2F1c2UgU3RvcC9SZWxvYWQgYXJlCi0gICAgICAgICAgICAgICAg
Ly8gaW50ZW5kZWQgdG8gbWF0Y2ggV2ViS2l0J3MgQVBJLCBub3QgV2ViQ29yZSdzIGludGVybmFs
IG5vdGlvbiBvZiBsb2FkaW5nIHN0YXR1cwotICAgICAgICAgICAgICAgIGlmIChsb2FkZXItPmRv
Y3VtZW50TG9hZGVyKCktPmlzTG9hZGluZ0luQVBJU2Vuc2UoKSkKLSAgICAgICAgICAgICAgICAg
ICAgYXBwZW5kSXRlbShTdG9wSXRlbSk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgICAgICBhcHBlbmRJdGVtKFJlbG9hZEl0ZW0pOwotI2lmIEVOQUJMRShJTlNQRUNUT1Ip
Ci0gICAgICAgICAgICAgICAgfQotI2VuZGlmCi0KLSAgICAgICAgICAgICAgICBpZiAoZnJhbWUt
PnBhZ2UoKSAmJiBmcmFtZSAhPSBmcmFtZS0+cGFnZSgpLT5tYWluRnJhbWUoKSkKLSAgICAgICAg
ICAgICAgICAgICAgYXBwZW5kSXRlbShPcGVuRnJhbWVJdGVtKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0gZWxzZSB7IC8vIE1ha2UgYW4gZWRpdGluZyBjb250ZXh0IG1lbnUKLSAg
ICAgICAgU2VsZWN0aW9uQ29udHJvbGxlciogc2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigp
OwotICAgICAgICBib29sIGluUGFzc3dvcmRGaWVsZCA9IHNlbGVjdGlvbi0+aXNJblBhc3N3b3Jk
RmllbGQoKTsKLSAgICAgICAgYm9vbCBzcGVsbENoZWNraW5nRW5hYmxlZCA9IGZyYW1lLT5lZGl0
b3IoKS0+aXNTcGVsbENoZWNraW5nRW5hYmxlZEZvcihub2RlKTsKLSAgICAgICAgCi0gICAgICAg
IGlmICghaW5QYXNzd29yZEZpZWxkICYmIHNwZWxsQ2hlY2tpbmdFbmFibGVkKSB7Ci0gICAgICAg
ICAgICAvLyBDb25zaWRlciBhZGRpbmcgc3BlbGxpbmctcmVsYXRlZCBvciBncmFtbWFyLXJlbGF0
ZWQgY29udGV4dCBtZW51IGl0ZW1zIChuZXZlciBib3RoLCBzaW5jZSBhIHNpbmdsZSBzZWxlY3Rl
ZCByYW5nZQotICAgICAgICAgICAgLy8gaXMgbmV2ZXIgY29uc2lkZXJlZCBhIG1pc3NwZWxsaW5n
IGFuZCBiYWQgZ3JhbW1hciBhdCB0aGUgc2FtZSB0aW1lKQotICAgICAgICAgICAgYm9vbCBtaXNz
cGVsbGluZzsKLSAgICAgICAgICAgIGJvb2wgYmFkR3JhbW1hcjsKLSAgICAgICAgICAgIFZlY3Rv
cjxTdHJpbmc+IGd1ZXNzZXMgPSBmcmFtZS0+ZWRpdG9yKCktPmd1ZXNzZXNGb3JNaXNzcGVsbGVk
T3JVbmdyYW1tYXRpY2FsU2VsZWN0aW9uKG1pc3NwZWxsaW5nLCBiYWRHcmFtbWFyKTsKLSAgICAg
ICAgICAgIGlmIChtaXNzcGVsbGluZyB8fCBiYWRHcmFtbWFyKSB7Ci0gICAgICAgICAgICAgICAg
c2l6ZV90IHNpemUgPSBndWVzc2VzLnNpemUoKTsKLSAgICAgICAgICAgICAgICBpZiAoc2l6ZSA9
PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlJ3MgYmFkIGdyYW1tYXIgYnV0
IG5vIHN1Z2dlc3Rpb25zIChlLmcuLCByZXBlYXRlZCB3b3JkKSwganVzdCBsZWF2ZSBvZmYgdGhl
IHN1Z2dlc3Rpb25zCi0gICAgICAgICAgICAgICAgICAgIC8vIGxpc3QgYW5kIHRyYWlsaW5nIHNl
cGFyYXRvciByYXRoZXIgdGhhbiBhZGRpbmcgYSAiTm8gR3Vlc3NlcyBGb3VuZCIgaXRlbSAobWF0
Y2hlcyBBcHBLaXQpCi0gICAgICAgICAgICAgICAgICAgIGlmIChtaXNzcGVsbGluZykgewotICAg
ICAgICAgICAgICAgICAgICAgICAgYXBwZW5kSXRlbShOb0d1ZXNzZXNJdGVtKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBTdHJpbmcgJmd1ZXNzID0gZ3Vlc3Nlc1tpXTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICghZ3Vlc3MuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ29udGV4dE1lbnVJdGVtIGl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFn
U3BlbGxpbmdHdWVzcywgZ3Vlc3MpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVu
ZEl0ZW0oaXRlbSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYXBwZW5kSXRlbSgqc2VwYXJhdG9ySXRlbSgpKTsg
ICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICBpZiAobWlzc3BlbGxpbmcpIHsKLSAgICAgICAgICAgICAgICAgICAg
YXBwZW5kSXRlbShJZ25vcmVTcGVsbGluZ0l0ZW0pOwotICAgICAgICAgICAgICAgICAgICBhcHBl
bmRJdGVtKExlYXJuU3BlbGxpbmdJdGVtKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgICAgICAgICAgYXBwZW5kSXRlbShJZ25vcmVHcmFtbWFySXRlbSk7Ci0gICAgICAgICAg
ICAgICAgYXBwZW5kSXRlbSgqc2VwYXJhdG9ySXRlbSgpKTsKLSNpZiBQTEFURk9STShNQUMpICYm
ICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9Q
QVJEKQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBJZiB0aGUgc3Ry
aW5nIHdhcyBhdXRvY29ycmVjdGVkLCBnZW5lcmF0ZSBhIGNvbnRleHR1YWwgbWVudSBpdGVtIGFs
bG93aW5nIGl0IHRvIGJlIGNoYW5nZWQgYmFjay4KLSAgICAgICAgICAgICAgICBTdHJpbmcgcmVw
bGFjZWRTdHJpbmcgPSByZXN1bHQucmVwbGFjZWRTdHJpbmcoKTsKLSAgICAgICAgICAgICAgICBp
ZiAoIXJlcGxhY2VkU3RyaW5nLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgICAgICBDb250
ZXh0TWVudUl0ZW0gaXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdDaGFuZ2VCYWNr
LCBjb250ZXh0TWVudUl0ZW1UYWdDaGFuZ2VCYWNrKHJlcGxhY2VkU3RyaW5nKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIGFwcGVuZEl0ZW0oaXRlbSk7Ci0gICAgICAgICAgICAgICAgICAgIGFwcGVu
ZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSk7Ci0gICAgICAgICAgICAgICAgfQotI2VuZGlmCi0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBGcmFtZUxvYWRlciogbG9hZGVyID0gZnJh
bWUtPmxvYWRlcigpOwotICAgICAgICBLVVJMIGxpbmtVUkwgPSByZXN1bHQuYWJzb2x1dGVMaW5r
VVJMKCk7Ci0gICAgICAgIGlmICghbGlua1VSTC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGlm
IChsb2FkZXItPmNhbkhhbmRsZVJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0KGxpbmtVUkwpKSkgewot
ICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oT3BlbkxpbmtJdGVtKTsKLSAgICAgICAgICAgICAg
ICBhcHBlbmRJdGVtKE9wZW5MaW5rSW5OZXdXaW5kb3dJdGVtKTsKLSAgICAgICAgICAgICAgICBh
cHBlbmRJdGVtKERvd25sb2FkRmlsZUl0ZW0pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
YXBwZW5kSXRlbShDb3B5TGlua0l0ZW0pOwotICAgICAgICAgICAgYXBwZW5kSXRlbSgqc2VwYXJh
dG9ySXRlbSgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChyZXN1bHQuaXNTZWxlY3RlZCgp
ICYmICFpblBhc3N3b3JkRmllbGQgJiYgc2VsZWN0aW9uQ29udGFpbnNQb3NzaWJsZVdvcmQoZnJh
bWUpKSB7Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgICAgICAgICAgYXBwZW5kSXRlbShTZWFyY2hT
cG90bGlnaHRJdGVtKTsKLSNlbmRpZgotI2lmICFQTEFURk9STShHVEspCi0gICAgICAgICAgICBh
cHBlbmRJdGVtKFNlYXJjaFdlYkl0ZW0pOwotICAgICAgICAgICAgYXBwZW5kSXRlbSgqc2VwYXJh
dG9ySXRlbSgpKTsKLSNlbmRpZgotICAgICAKLSNpZiBQTEFURk9STShNQUMpCi0gICAgICAgICAg
ICBhcHBlbmRJdGVtKExvb2tJbkRpY3Rpb25hcnlJdGVtKTsKLSAgICAgICAgICAgIGFwcGVuZEl0
ZW0oKnNlcGFyYXRvckl0ZW0oKSk7Ci0jZW5kaWYKLSAgICAgICAgfQotCi0gICAgICAgIGFwcGVu
ZEl0ZW0oQ3V0SXRlbSk7Ci0gICAgICAgIGFwcGVuZEl0ZW0oQ29weUl0ZW0pOwotICAgICAgICBh
cHBlbmRJdGVtKFBhc3RlSXRlbSk7Ci0jaWYgUExBVEZPUk0oR1RLKQotICAgICAgICBhcHBlbmRJ
dGVtKERlbGV0ZUl0ZW0pOwotICAgICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCkpOwot
ICAgICAgICBhcHBlbmRJdGVtKFNlbGVjdEFsbEl0ZW0pOwotI2VuZGlmCi0KLSAgICAgICAgaWYg
KCFpblBhc3N3b3JkRmllbGQpIHsKLSAgICAgICAgICAgIGFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0
ZW0oKSk7Ci0jaWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCi0jaWYgIVBMQVRGT1JNKEdUSykKLSAg
ICAgICAgICAgIENvbnRleHRNZW51SXRlbSBTcGVsbGluZ0FuZEdyYW1tYXJNZW51SXRlbShTdWJt
ZW51VHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU3BlbGxpbmdNZW51LCAKLSAgICAgICAgICAgICAg
ICBjb250ZXh0TWVudUl0ZW1UYWdTcGVsbGluZ01lbnUoKSk7Ci0gICAgICAgICAgICBjcmVhdGVB
bmRBcHBlbmRTcGVsbGluZ0FuZEdyYW1tYXJTdWJNZW51KG1faGl0VGVzdFJlc3VsdCwgU3BlbGxp
bmdBbmRHcmFtbWFyTWVudUl0ZW0pOwotICAgICAgICAgICAgYXBwZW5kSXRlbShTcGVsbGluZ0Fu
ZEdyYW1tYXJNZW51SXRlbSk7Ci0jZW5kaWYKLSNlbHNlCi0gICAgICAgICAgICBDb250ZXh0TWVu
dUl0ZW0gU3BlbGxpbmdNZW51SXRlbShTdWJtZW51VHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU3Bl
bGxpbmdNZW51LCAKLSAgICAgICAgICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdTcGVsbGluZ01l
bnUoKSk7Ci0gICAgICAgICAgICBjcmVhdGVBbmRBcHBlbmRTcGVsbGluZ1N1Yk1lbnUobV9oaXRU
ZXN0UmVzdWx0LCBTcGVsbGluZ01lbnVJdGVtKTsKLSAgICAgICAgICAgIGFwcGVuZEl0ZW0oU3Bl
bGxpbmdNZW51SXRlbSk7Ci0jZW5kaWYKLSNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJV
SUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQotICAgICAg
ICAgICAgQ29udGV4dE1lbnVJdGVtIHN1YnN0aXR1dGlvbnNNZW51SXRlbShTdWJtZW51VHlwZSwg
Q29udGV4dE1lbnVJdGVtVGFnU3Vic3RpdHV0aW9uc01lbnUsIAotICAgICAgICAgICAgICAgIGNv
bnRleHRNZW51SXRlbVRhZ1N1YnN0aXR1dGlvbnNNZW51KCkpOwotICAgICAgICAgICAgY3JlYXRl
QW5kQXBwZW5kU3Vic3RpdHV0aW9uc1N1Yk1lbnUobV9oaXRUZXN0UmVzdWx0LCBzdWJzdGl0dXRp
b25zTWVudUl0ZW0pOwotICAgICAgICAgICAgYXBwZW5kSXRlbShzdWJzdGl0dXRpb25zTWVudUl0
ZW0pOwotICAgICAgICAgICAgQ29udGV4dE1lbnVJdGVtIHRyYW5zZm9ybWF0aW9uc01lbnVJdGVt
KFN1Ym1lbnVUeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdUcmFuc2Zvcm1hdGlvbnNNZW51LCAKLSAg
ICAgICAgICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdUcmFuc2Zvcm1hdGlvbnNNZW51KCkpOwot
ICAgICAgICAgICAgY3JlYXRlQW5kQXBwZW5kVHJhbnNmb3JtYXRpb25zU3ViTWVudShtX2hpdFRl
c3RSZXN1bHQsIHRyYW5zZm9ybWF0aW9uc01lbnVJdGVtKTsKLSAgICAgICAgICAgIGFwcGVuZEl0
ZW0odHJhbnNmb3JtYXRpb25zTWVudUl0ZW0pOwotI2VuZGlmCi0jaWYgUExBVEZPUk0oR1RLKQot
ICAgICAgICAgICAgYm9vbCBzaG91bGRTaG93Rm9udE1lbnUgPSBmcmFtZS0+ZWRpdG9yKCktPmNh
bkVkaXRSaWNobHkoKTsKLSNlbHNlCi0gICAgICAgICAgICBib29sIHNob3VsZFNob3dGb250TWVu
dSA9IHRydWU7Ci0jZW5kaWYKLSAgICAgICAgICAgIGlmIChzaG91bGRTaG93Rm9udE1lbnUpIHsK
LSAgICAgICAgICAgICAgICBDb250ZXh0TWVudUl0ZW0gRm9udE1lbnVJdGVtKFN1Ym1lbnVUeXBl
LCBDb250ZXh0TWVudUl0ZW1UYWdGb250TWVudSwgCi0gICAgICAgICAgICAgICAgICAgIGNvbnRl
eHRNZW51SXRlbVRhZ0ZvbnRNZW51KCkpOwotICAgICAgICAgICAgICAgIGNyZWF0ZUFuZEFwcGVu
ZEZvbnRTdWJNZW51KG1faGl0VGVzdFJlc3VsdCwgRm9udE1lbnVJdGVtKTsKLSAgICAgICAgICAg
ICAgICBhcHBlbmRJdGVtKEZvbnRNZW51SXRlbSk7Ci0gICAgICAgICAgICB9Ci0jaWYgUExBVEZP
Uk0oTUFDKQotICAgICAgICAgICAgQ29udGV4dE1lbnVJdGVtIFNwZWVjaE1lbnVJdGVtKFN1Ym1l
bnVUeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTcGVlY2hNZW51LCBjb250ZXh0TWVudUl0ZW1UYWdT
cGVlY2hNZW51KCkpOwotICAgICAgICAgICAgY3JlYXRlQW5kQXBwZW5kU3BlZWNoU3ViTWVudSht
X2hpdFRlc3RSZXN1bHQsIFNwZWVjaE1lbnVJdGVtKTsKLSAgICAgICAgICAgIGFwcGVuZEl0ZW0o
U3BlZWNoTWVudUl0ZW0pOwotI2VuZGlmCi0jaWYgIVBMQVRGT1JNKEdUSykKLSAgICAgICAgICAg
IENvbnRleHRNZW51SXRlbSBXcml0aW5nRGlyZWN0aW9uTWVudUl0ZW0oU3VibWVudVR5cGUsIENv
bnRleHRNZW51SXRlbVRhZ1dyaXRpbmdEaXJlY3Rpb25NZW51LCAKLSAgICAgICAgICAgICAgICBj
b250ZXh0TWVudUl0ZW1UYWdXcml0aW5nRGlyZWN0aW9uTWVudSgpKTsKLSAgICAgICAgICAgIGNy
ZWF0ZUFuZEFwcGVuZFdyaXRpbmdEaXJlY3Rpb25TdWJNZW51KG1faGl0VGVzdFJlc3VsdCwgV3Jp
dGluZ0RpcmVjdGlvbk1lbnVJdGVtKTsKLSAgICAgICAgICAgIGFwcGVuZEl0ZW0oV3JpdGluZ0Rp
cmVjdGlvbk1lbnVJdGVtKTsKLSAgICAgICAgICAgIGlmIChQYWdlKiBwYWdlID0gZnJhbWUtPnBh
Z2UoKSkgewotICAgICAgICAgICAgICAgIGlmIChTZXR0aW5ncyogc2V0dGluZ3MgPSBwYWdlLT5z
ZXR0aW5ncygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJvb2wgaW5jbHVkZVRleHREaXJlY3Rp
b25TdWJtZW51ID0gc2V0dGluZ3MtPnRleHREaXJlY3Rpb25TdWJtZW51SW5jbHVzaW9uQmVoYXZp
b3IoKSA9PSBUZXh0RGlyZWN0aW9uU3VibWVudUFsd2F5c0luY2x1ZGVkCi0gICAgICAgICAgICAg
ICAgICAgICAgICB8fCAoc2V0dGluZ3MtPnRleHREaXJlY3Rpb25TdWJtZW51SW5jbHVzaW9uQmVo
YXZpb3IoKSA9PSBUZXh0RGlyZWN0aW9uU3VibWVudUF1dG9tYXRpY2FsbHlJbmNsdWRlZCAmJiBm
cmFtZS0+ZWRpdG9yKCktPmhhc0JpZGlTZWxlY3Rpb24oKSk7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChpbmNsdWRlVGV4dERpcmVjdGlvblN1Ym1lbnUpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIENvbnRleHRNZW51SXRlbSBUZXh0RGlyZWN0aW9uTWVudUl0ZW0oU3VibWVudVR5cGUsIENv
bnRleHRNZW51SXRlbVRhZ1RleHREaXJlY3Rpb25NZW51LCAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdUZXh0RGlyZWN0aW9uTWVudSgpKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGNyZWF0ZUFuZEFwcGVuZFRleHREaXJlY3Rpb25TdWJNZW51KG1faGl0
VGVzdFJlc3VsdCwgVGV4dERpcmVjdGlvbk1lbnVJdGVtKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGFwcGVuZEl0ZW0oVGV4dERpcmVjdGlvbk1lbnVJdGVtKTsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSNlbmRpZgotICAgICAgICB9
Ci0gICAgfQotfQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUikKLXZvaWQgQ29udGV4dE1lbnU6OmFk
ZEluc3BlY3RFbGVtZW50SXRlbSgpCi17Ci0gICAgTm9kZSogbm9kZSA9IG1faGl0VGVzdFJlc3Vs
dC5pbm5lck5vblNoYXJlZE5vZGUoKTsKLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybjsK
LQotICAgIEZyYW1lKiBmcmFtZSA9IG5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCk7Ci0gICAgaWYg
KCFmcmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUGFnZSogcGFnZSA9IGZyYW1lLT5wYWdl
KCk7Ci0gICAgaWYgKCFwYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXBhZ2UtPmlu
c3BlY3RvckNvbnRyb2xsZXIoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ29udGV4dE1lbnVJ
dGVtIEluc3BlY3RFbGVtZW50SXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdJbnNw
ZWN0RWxlbWVudCwgY29udGV4dE1lbnVJdGVtVGFnSW5zcGVjdEVsZW1lbnQoKSk7Ci0gICAgYXBw
ZW5kSXRlbSgqc2VwYXJhdG9ySXRlbSgpKTsKLSAgICBhcHBlbmRJdGVtKEluc3BlY3RFbGVtZW50
SXRlbSk7Ci19Ci0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKLQotdm9pZCBDb250ZXh0TWVu
dTo6Y2hlY2tPckVuYWJsZUlmTmVlZGVkKENvbnRleHRNZW51SXRlbSYgaXRlbSkgY29uc3QKLXsK
LSAgICBpZiAoaXRlbS50eXBlKCkgPT0gU2VwYXJhdG9yVHlwZSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIAotICAgIEZyYW1lKiBmcmFtZSA9IG1faGl0VGVzdFJlc3VsdC5pbm5lck5vblNoYXJlZE5v
ZGUoKS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1
cm47Ci0KLSAgICAvLyBDdXN0b20gaXRlbXMgYWxyZWFkeSBoYXZlIHByb3BlciBjaGVja2VkIGFu
ZCBlbmFibGVkIHZhbHVlcy4KLSAgICBpZiAoQ29udGV4dE1lbnVJdGVtQmFzZUN1c3RvbVRhZyA8
PSBpdGVtLmFjdGlvbigpICYmIGl0ZW0uYWN0aW9uKCkgPD0gQ29udGV4dE1lbnVJdGVtTGFzdEN1
c3RvbVRhZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYm9vbCBzaG91bGRFbmFibGUgPSB0cnVl
OwotICAgIGJvb2wgc2hvdWxkQ2hlY2sgPSBmYWxzZTsgCi0KLSAgICBzd2l0Y2ggKGl0ZW0uYWN0
aW9uKCkpIHsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdDaGVja1NwZWxsaW5nOgot
ICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gZnJhbWUtPmVkaXRvcigpLT5jYW5FZGl0KCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdEZWZhdWx0
RGlyZWN0aW9uOgotICAgICAgICAgICAgc2hvdWxkQ2hlY2sgPSBmYWxzZTsKLSAgICAgICAgICAg
IHNob3VsZEVuYWJsZSA9IGZhbHNlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtVGFnTGVmdFRvUmlnaHQ6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJ
dGVtVGFnUmlnaHRUb0xlZnQ6IHsKLSAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwot
ICAgICAgICAgICAgUmVmUHRyPENTU1N0eWxlRGVjbGFyYXRpb24+IHN0eWxlID0gZnJhbWUtPmRv
Y3VtZW50KCktPmNyZWF0ZUNTU1N0eWxlRGVjbGFyYXRpb24oKTsKLSAgICAgICAgICAgIFN0cmlu
ZyBkaXJlY3Rpb24gPSBpdGVtLmFjdGlvbigpID09IENvbnRleHRNZW51SXRlbVRhZ0xlZnRUb1Jp
Z2h0ID8gImx0ciIgOiAicnRsIjsKLSAgICAgICAgICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQ
cm9wZXJ0eURpcmVjdGlvbiwgZGlyZWN0aW9uLCBmYWxzZSwgZWMpOwotICAgICAgICAgICAgc2hv
dWxkQ2hlY2sgPSBmcmFtZS0+ZWRpdG9yKCktPnNlbGVjdGlvbkhhc1N0eWxlKHN0eWxlLmdldCgp
KSAhPSBGYWxzZVRyaVN0YXRlOwotICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gdHJ1ZTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVt
VGFnVGV4dERpcmVjdGlvbkRlZmF1bHQ6IHsKLSAgICAgICAgICAgIEVkaXRvcjo6Q29tbWFuZCBj
b21tYW5kID0gZnJhbWUtPmVkaXRvcigpLT5jb21tYW5kKCJNYWtlVGV4dFdyaXRpbmdEaXJlY3Rp
b25OYXR1cmFsIik7Ci0gICAgICAgICAgICBzaG91bGRDaGVjayA9IGNvbW1hbmQuc3RhdGUoKSA9
PSBUcnVlVHJpU3RhdGU7Ci0gICAgICAgICAgICBzaG91bGRFbmFibGUgPSBjb21tYW5kLmlzRW5h
YmxlZCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBDb250
ZXh0TWVudUl0ZW1UYWdUZXh0RGlyZWN0aW9uTGVmdFRvUmlnaHQ6IHsKLSAgICAgICAgICAgIEVk
aXRvcjo6Q29tbWFuZCBjb21tYW5kID0gZnJhbWUtPmVkaXRvcigpLT5jb21tYW5kKCJNYWtlVGV4
dFdyaXRpbmdEaXJlY3Rpb25MZWZ0VG9SaWdodCIpOwotICAgICAgICAgICAgc2hvdWxkQ2hlY2sg
PSBjb21tYW5kLnN0YXRlKCkgPT0gVHJ1ZVRyaVN0YXRlOwotICAgICAgICAgICAgc2hvdWxkRW5h
YmxlID0gY29tbWFuZC5pc0VuYWJsZWQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnVGV4dERpcmVjdGlvblJpZ2h0VG9MZWZ0
OiB7Ci0gICAgICAgICAgICBFZGl0b3I6OkNvbW1hbmQgY29tbWFuZCA9IGZyYW1lLT5lZGl0b3Io
KS0+Y29tbWFuZCgiTWFrZVRleHRXcml0aW5nRGlyZWN0aW9uUmlnaHRUb0xlZnQiKTsKLSAgICAg
ICAgICAgIHNob3VsZENoZWNrID0gY29tbWFuZC5zdGF0ZSgpID09IFRydWVUcmlTdGF0ZTsKLSAg
ICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGNvbW1hbmQuaXNFbmFibGVkKCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0NvcHk6
Ci0gICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+ZWRpdG9yKCktPmNhbkRIVE1MQ29w
eSgpIHx8IGZyYW1lLT5lZGl0b3IoKS0+Y2FuQ29weSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQ3V0OgotICAgICAgICAgICAgc2hvdWxkRW5h
YmxlID0gZnJhbWUtPmVkaXRvcigpLT5jYW5ESFRNTEN1dCgpIHx8IGZyYW1lLT5lZGl0b3IoKS0+
Y2FuQ3V0KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0
ZW1UYWdJZ25vcmVTcGVsbGluZzoKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdMZWFy
blNwZWxsaW5nOgotICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gZnJhbWUtPnNlbGVjdGlvbigp
LT5pc1JhbmdlKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVu
dUl0ZW1UYWdQYXN0ZToKLSAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGZyYW1lLT5lZGl0b3Io
KS0+Y2FuREhUTUxQYXN0ZSgpIHx8IGZyYW1lLT5lZGl0b3IoKS0+Y2FuUGFzdGUoKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotI2lmIFBMQVRGT1JNKEdUSykKLSAgICAgICAgY2FzZSBDb250ZXh0TWVu
dUl0ZW1UYWdEZWxldGU6Ci0gICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+ZWRpdG9y
KCktPmNhbkRlbGV0ZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29udGV4
dE1lbnVJdGVtVGFnU2VsZWN0QWxsOgotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0lu
cHV0TWV0aG9kczoKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdVbmljb2RlOgotICAg
ICAgICAgICAgc2hvdWxkRW5hYmxlID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotI2VuZGlm
Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnVW5kZXJsaW5lOiB7Ci0gICAgICAgICAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICAgICAgICAgIFJlZlB0cjxDU1NTdHlsZURlY2xh
cmF0aW9uPiBzdHlsZSA9IGZyYW1lLT5kb2N1bWVudCgpLT5jcmVhdGVDU1NTdHlsZURlY2xhcmF0
aW9uKCk7Ci0gICAgICAgICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRU
ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCwgInVuZGVybGluZSIsIGZhbHNlLCBlYyk7Ci0gICAgICAg
ICAgICBzaG91bGRDaGVjayA9IGZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0aW9uSGFzU3R5bGUoc3R5
bGUuZ2V0KCkpICE9IEZhbHNlVHJpU3RhdGU7Ci0gICAgICAgICAgICBzaG91bGRFbmFibGUgPSBm
cmFtZS0+ZWRpdG9yKCktPmNhbkVkaXRSaWNobHkoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnTG9va1VwSW5EaWN0aW9uYXJ5
OgotICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gZnJhbWUtPnNlbGVjdGlvbigpLT5pc1Jhbmdl
KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdD
aGVja0dyYW1tYXJXaXRoU3BlbGxpbmc6Ci0jaWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCi0gICAg
ICAgICAgICBpZiAoZnJhbWUtPmVkaXRvcigpLT5pc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSkK
LSAgICAgICAgICAgICAgICBzaG91bGRDaGVjayA9IHRydWU7Ci0gICAgICAgICAgICBzaG91bGRF
bmFibGUgPSB0cnVlOwotI2VuZGlmCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBD
b250ZXh0TWVudUl0ZW1UYWdJdGFsaWM6IHsKLSAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOwotICAgICAgICAgICAgUmVmUHRyPENTU1N0eWxlRGVjbGFyYXRpb24+IHN0eWxlID0gZnJh
bWUtPmRvY3VtZW50KCktPmNyZWF0ZUNTU1N0eWxlRGVjbGFyYXRpb24oKTsKLSAgICAgICAgICAg
IHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRTdHlsZSwgIml0YWxpYyIsIGZhbHNl
LCBlYyk7Ci0gICAgICAgICAgICBzaG91bGRDaGVjayA9IGZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0
aW9uSGFzU3R5bGUoc3R5bGUuZ2V0KCkpICE9IEZhbHNlVHJpU3RhdGU7Ci0gICAgICAgICAgICBz
aG91bGRFbmFibGUgPSBmcmFtZS0+ZWRpdG9yKCktPmNhbkVkaXRSaWNobHkoKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQm9s
ZDogewotICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgICAgICAgICBSZWZQ
dHI8Q1NTU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+Y3JlYXRl
Q1NTU3R5bGVEZWNsYXJhdGlvbigpOwotICAgICAgICAgICAgc3R5bGUtPnNldFByb3BlcnR5KENT
U1Byb3BlcnR5Rm9udFdlaWdodCwgImJvbGQiLCBmYWxzZSwgZWMpOwotICAgICAgICAgICAgc2hv
dWxkQ2hlY2sgPSBmcmFtZS0+ZWRpdG9yKCktPnNlbGVjdGlvbkhhc1N0eWxlKHN0eWxlLmdldCgp
KSAhPSBGYWxzZVRyaVN0YXRlOwotICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gZnJhbWUtPmVk
aXRvcigpLT5jYW5FZGl0UmljaGx5KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ091dGxpbmU6Ci0gICAgICAgICAgICBzaG91
bGRFbmFibGUgPSBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbnRl
eHRNZW51SXRlbVRhZ1Nob3dTcGVsbGluZ1BhbmVsOgotI2lmbmRlZiBCVUlMRElOR19PTl9USUdF
UgotICAgICAgICAgICAgaWYgKGZyYW1lLT5lZGl0b3IoKS0+c3BlbGxpbmdQYW5lbElzU2hvd2lu
ZygpKQotICAgICAgICAgICAgICAgIGl0ZW0uc2V0VGl0bGUoY29udGV4dE1lbnVJdGVtVGFnU2hv
d1NwZWxsaW5nUGFuZWwoZmFsc2UpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICBpdGVtLnNldFRpdGxlKGNvbnRleHRNZW51SXRlbVRhZ1Nob3dTcGVsbGluZ1BhbmVsKHRydWUp
KTsKLSNlbmRpZgotICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gZnJhbWUtPmVkaXRvcigpLT5j
YW5FZGl0KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0
ZW1UYWdOb0d1ZXNzZXNGb3VuZDoKLSAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGZhbHNlOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQ2hlY2tT
cGVsbGluZ1doaWxlVHlwaW5nOgotICAgICAgICAgICAgc2hvdWxkQ2hlY2sgPSBmcmFtZS0+ZWRp
dG9yKCktPmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSNpZiBQTEFURk9STShNQUMpCi0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFn
U3Vic3RpdHV0aW9uc01lbnU6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnVHJhbnNm
b3JtYXRpb25zTWVudToKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbnRleHRN
ZW51SXRlbVRhZ1Nob3dTdWJzdGl0dXRpb25zOgotI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJ
R0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQotICAgICAgICAgICAgaWYgKGZy
YW1lLT5lZGl0b3IoKS0+c3Vic3RpdHV0aW9uc1BhbmVsSXNTaG93aW5nKCkpCi0gICAgICAgICAg
ICAgICAgaXRlbS5zZXRUaXRsZShjb250ZXh0TWVudUl0ZW1UYWdTaG93U3Vic3RpdHV0aW9ucyhm
YWxzZSkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGl0ZW0uc2V0VGl0bGUo
Y29udGV4dE1lbnVJdGVtVGFnU2hvd1N1YnN0aXR1dGlvbnModHJ1ZSkpOwotICAgICAgICAgICAg
c2hvdWxkRW5hYmxlID0gZnJhbWUtPmVkaXRvcigpLT5jYW5FZGl0KCk7Ci0jZW5kaWYKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ01ha2VVcHBlckNh
c2U6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnTWFrZUxvd2VyQ2FzZToKLSAgICAg
ICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdDYXBpdGFsaXplOgotICAgICAgICBjYXNlIENvbnRl
eHRNZW51SXRlbVRhZ0NoYW5nZUJhY2s6Ci0gICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFt
ZS0+ZWRpdG9yKCktPmNhbkVkaXQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IENvbnRleHRNZW51SXRlbVRhZ0NvcnJlY3RTcGVsbGluZ0F1dG9tYXRpY2FsbHk6Ci0jaWYgIWRl
ZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQp
Ci0gICAgICAgICAgICBzaG91bGRDaGVjayA9IGZyYW1lLT5lZGl0b3IoKS0+aXNBdXRvbWF0aWNT
cGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1NtYXJ0Q29weVBhc3RlOgotI2lmICFkZWZp
bmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQot
ICAgICAgICAgICAgc2hvdWxkQ2hlY2sgPSBmcmFtZS0+ZWRpdG9yKCktPnNtYXJ0SW5zZXJ0RGVs
ZXRlRW5hYmxlZCgpOwotI2VuZGlmCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBD
b250ZXh0TWVudUl0ZW1UYWdTbWFydFF1b3RlczoKLSNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9U
SUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKLSAgICAgICAgICAgIHNob3Vs
ZENoZWNrID0gZnJhbWUtPmVkaXRvcigpLT5pc0F1dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uRW5h
YmxlZCgpOwotI2VuZGlmCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb250ZXh0
TWVudUl0ZW1UYWdTbWFydERhc2hlczoKLSNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikg
JiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKLSAgICAgICAgICAgIHNob3VsZENoZWNr
ID0gZnJhbWUtPmVkaXRvcigpLT5pc0F1dG9tYXRpY0Rhc2hTdWJzdGl0dXRpb25FbmFibGVkKCk7
Ci0jZW5kaWYKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRl
bVRhZ1NtYXJ0TGlua3M6Ci0jaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZp
bmVkKEJVSUxESU5HX09OX0xFT1BBUkQpCi0gICAgICAgICAgICBzaG91bGRDaGVjayA9IGZyYW1l
LT5lZGl0b3IoKS0+aXNBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZCgpOwotI2VuZGlmCi0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdUZXh0UmVw
bGFjZW1lbnQ6Ci0jaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJV
SUxESU5HX09OX0xFT1BBUkQpCi0gICAgICAgICAgICBzaG91bGRDaGVjayA9IGZyYW1lLT5lZGl0
b3IoKS0+aXNBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnRFbmFibGVkKCk7Ci0jZW5kaWYKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1N0b3BTcGVha2lu
ZzoKLSAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGNvbnRyb2xsZXIoKSAmJiBjb250cm9sbGVy
KCktPmNsaWVudCgpICYmIGNvbnRyb2xsZXIoKS0+Y2xpZW50KCktPmlzU3BlYWtpbmcoKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotI2Vsc2UgLy8gUExBVEZPUk0oTUFDKSBlbmRzIGhlcmUKLSAgICAg
ICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTdG9wU3BlYWtpbmc6Ci0gICAgICAgICAgICBicmVh
azsKLSNlbmRpZgotI2lmIFBMQVRGT1JNKEdUSykKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0
ZW1UYWdHb0JhY2s6Ci0gICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+cGFnZSgpICYm
IGZyYW1lLT5wYWdlKCktPmJhY2tGb3J3YXJkKCktPmNhbkdvQmFja09yRm9yd2FyZCgtMSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdHb0Zvcndh
cmQ6Ci0gICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+cGFnZSgpICYmIGZyYW1lLT5w
YWdlKCktPmJhY2tGb3J3YXJkKCktPmNhbkdvQmFja09yRm9yd2FyZCgxKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1N0b3A6Ci0gICAgICAgICAg
ICBzaG91bGRFbmFibGUgPSBmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPmlzTG9h
ZGluZ0luQVBJU2Vuc2UoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbnRl
eHRNZW51SXRlbVRhZ1JlbG9hZDoKLSAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9ICFmcmFtZS0+
bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPmlzTG9hZGluZ0luQVBJU2Vuc2UoKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0ZvbnRNZW51Ogot
ICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gZnJhbWUtPmVkaXRvcigpLT5jYW5FZGl0UmljaGx5
KCk7Ci0gICAgICAgICAgICBicmVhazsKLSNlbHNlCi0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJ
dGVtVGFnR29CYWNrOgotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0dvRm9yd2FyZDoK
LSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTdG9wOgotICAgICAgICBjYXNlIENvbnRl
eHRNZW51SXRlbVRhZ1JlbG9hZDoKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdGb250
TWVudToKLSNlbmRpZgotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ05vQWN0aW9uOgot
ICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5MaW5rSW5OZXdXaW5kb3c6Ci0gICAg
ICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnRG93bmxvYWRMaW5rVG9EaXNrOgotICAgICAgICBj
YXNlIENvbnRleHRNZW51SXRlbVRhZ0NvcHlMaW5rVG9DbGlwYm9hcmQ6Ci0gICAgICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtVGFnT3BlbkltYWdlSW5OZXdXaW5kb3c6Ci0gICAgICAgIGNhc2UgQ29u
dGV4dE1lbnVJdGVtVGFnRG93bmxvYWRJbWFnZVRvRGlzazoKLSAgICAgICAgY2FzZSBDb250ZXh0
TWVudUl0ZW1UYWdDb3B5SW1hZ2VUb0NsaXBib2FyZDoKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5NZWRpYUluTmV3V2luZG93OgotICAgICAg
ICAgICAgaWYgKG1faGl0VGVzdFJlc3VsdC5tZWRpYUlzVmlkZW8oKSkKLSAgICAgICAgICAgICAg
ICBpdGVtLnNldFRpdGxlKGNvbnRleHRNZW51SXRlbVRhZ09wZW5WaWRlb0luTmV3V2luZG93KCkp
OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGl0ZW0uc2V0VGl0bGUoY29udGV4
dE1lbnVJdGVtVGFnT3BlbkF1ZGlvSW5OZXdXaW5kb3coKSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdDb3B5TWVkaWFMaW5rVG9DbGlwYm9hcmQ6
Ci0gICAgICAgICAgICBpZiAobV9oaXRUZXN0UmVzdWx0Lm1lZGlhSXNWaWRlbygpKQotICAgICAg
ICAgICAgICAgIGl0ZW0uc2V0VGl0bGUoY29udGV4dE1lbnVJdGVtVGFnQ29weVZpZGVvTGlua1Rv
Q2xpcGJvYXJkKCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGl0ZW0uc2V0
VGl0bGUoY29udGV4dE1lbnVJdGVtVGFnQ29weUF1ZGlvTGlua1RvQ2xpcGJvYXJkKCkpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnVG9nZ2xlTWVk
aWFDb250cm9sczoKLSAgICAgICAgICAgIHNob3VsZENoZWNrID0gbV9oaXRUZXN0UmVzdWx0Lm1l
ZGlhQ29udHJvbHNFbmFibGVkKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBD
b250ZXh0TWVudUl0ZW1UYWdUb2dnbGVNZWRpYUxvb3A6Ci0gICAgICAgICAgICBzaG91bGRDaGVj
ayA9IG1faGl0VGVzdFJlc3VsdC5tZWRpYUxvb3BFbmFibGVkKCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdFbnRlclZpZGVvRnVsbHNjcmVlbjoK
LSAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IG1faGl0VGVzdFJlc3VsdC5tZWRpYVN1cHBvcnRz
RnVsbHNjcmVlbigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29udGV4dE1l
bnVJdGVtVGFnT3BlbkZyYW1lSW5OZXdXaW5kb3c6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJ
dGVtVGFnU3BlbGxpbmdHdWVzczoKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdPdGhl
cjoKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTZWFyY2hJblNwb3RsaWdodDoKLSAg
ICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTZWFyY2hXZWI6Ci0gICAgICAgIGNhc2UgQ29u
dGV4dE1lbnVJdGVtVGFnT3BlbldpdGhEZWZhdWx0QXBwbGljYXRpb246Ci0gICAgICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtUERGQWN0dWFsU2l6ZToKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0
ZW1QREZab29tSW46Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtUERGWm9vbU91dDoKLSAg
ICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1QREZBdXRvU2l6ZToKLSAgICAgICAgY2FzZSBDb250
ZXh0TWVudUl0ZW1QREZTaW5nbGVQYWdlOgotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVBE
RkZhY2luZ1BhZ2VzOgotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVBERkNvbnRpbnVvdXM6
Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtUERGTmV4dFBhZ2U6Ci0gICAgICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtUERGUHJldmlvdXNQYWdlOgotICAgICAgICBjYXNlIENvbnRleHRNZW51
SXRlbVRhZ09wZW5MaW5rOgotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0lnbm9yZUdy
YW1tYXI6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU3BlbGxpbmdNZW51OgotICAg
ICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1Nob3dGb250czoKLSAgICAgICAgY2FzZSBDb250
ZXh0TWVudUl0ZW1UYWdTdHlsZXM6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU2hv
d0NvbG9yczoKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTcGVlY2hNZW51OgotICAg
ICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1N0YXJ0U3BlYWtpbmc6Ci0gICAgICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtVGFnV3JpdGluZ0RpcmVjdGlvbk1lbnU6Ci0gICAgICAgIGNhc2UgQ29u
dGV4dE1lbnVJdGVtVGFnVGV4dERpcmVjdGlvbk1lbnU6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1l
bnVJdGVtVGFnUERGU2luZ2xlUGFnZVNjcm9sbGluZzoKLSAgICAgICAgY2FzZSBDb250ZXh0TWVu
dUl0ZW1UYWdQREZGYWNpbmdQYWdlc1Njcm9sbGluZzoKLSNpZiBFTkFCTEUoSU5TUEVDVE9SKQot
ICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0luc3BlY3RFbGVtZW50OgotI2VuZGlmCi0g
ICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtQmFzZUN1c3RvbVRhZzoKLSAgICAgICAgY2FzZSBD
b250ZXh0TWVudUl0ZW1DdXN0b21UYWdOb0FjdGlvbjoKLSAgICAgICAgY2FzZSBDb250ZXh0TWVu
dUl0ZW1MYXN0Q3VzdG9tVGFnOgotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbUJhc2VBcHBs
aWNhdGlvblRhZzoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbnRleHRNZW51
SXRlbVRhZ01lZGlhUGxheVBhdXNlOgotICAgICAgICAgICAgaWYgKG1faGl0VGVzdFJlc3VsdC5t
ZWRpYVBsYXlpbmcoKSkKLSAgICAgICAgICAgICAgICBpdGVtLnNldFRpdGxlKGNvbnRleHRNZW51
SXRlbVRhZ01lZGlhUGF1c2UoKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
aXRlbS5zZXRUaXRsZShjb250ZXh0TWVudUl0ZW1UYWdNZWRpYVBsYXkoKSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdNZWRpYU11dGU6Ci0gICAg
ICAgICAgICBzaG91bGRFbmFibGUgPSBtX2hpdFRlc3RSZXN1bHQubWVkaWFIYXNBdWRpbygpOwot
ICAgICAgICAgICAgc2hvdWxkQ2hlY2sgPSBzaG91bGRFbmFibGUgJiYgIG1faGl0VGVzdFJlc3Vs
dC5tZWRpYU11dGVkKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBpdGVtLnNl
dENoZWNrZWQoc2hvdWxkQ2hlY2spOwotICAgIGl0ZW0uc2V0RW5hYmxlZChzaG91bGRFbmFibGUp
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoQ09OVEVY
VF9NRU5VUykKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vQ29udGV4dE1lbnUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL0NvbnRleHRNZW51LmgJKHJldmlzaW9uIDczNDY5KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9Db250ZXh0TWVudS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsy
OSw2IEBACiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAKICNpbmNsdWRlICJDb250ZXh0
TWVudUl0ZW0uaCIKLSNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiUGxhdGZv
cm1NZW51RGVzY3JpcHRpb24uaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2lmIFBM
QVRGT1JNKE1BQykKQEAgLTQ4LDE0ICs0NywxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
Y2xhc3MgQ29udGV4dE1lbnUgOiBwdWJsaWMgTm9uY29weWFibGUKICAgICB7CiAgICAgcHVibGlj
OgotICAgICAgICBDb250ZXh0TWVudShjb25zdCBIaXRUZXN0UmVzdWx0Jik7Ci0gICAgICAgIENv
bnRleHRNZW51KGNvbnN0IEhpdFRlc3RSZXN1bHQmLCBjb25zdCBQbGF0Zm9ybU1lbnVEZXNjcmlw
dGlvbik7CisgICAgICAgIENvbnRleHRNZW51KCk7CisgICAgICAgIENvbnRleHRNZW51KGNvbnN0
IFBsYXRmb3JtTWVudURlc2NyaXB0aW9uKTsKICAgICAgICAgfkNvbnRleHRNZW51KCk7CiAKLSAg
ICAgICAgdm9pZCBwb3B1bGF0ZSgpOwotICAgICAgICB2b2lkIGFkZEluc3BlY3RFbGVtZW50SXRl
bSgpOwotICAgICAgICB2b2lkIGNoZWNrT3JFbmFibGVJZk5lZWRlZChDb250ZXh0TWVudUl0ZW0m
KSBjb25zdDsKLQogICAgICAgICB2b2lkIGluc2VydEl0ZW0odW5zaWduZWQgcG9zaXRpb24sIENv
bnRleHRNZW51SXRlbSYpOwogICAgICAgICB2b2lkIGFwcGVuZEl0ZW0oQ29udGV4dE1lbnVJdGVt
Jik7CiAgICAgICAgIApAQCAtNjQsOSArNTksNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAg
ICAgICAgdW5zaWduZWQgaXRlbUNvdW50KCkgY29uc3Q7CiAKLSAgICAgICAgSGl0VGVzdFJlc3Vs
dCBoaXRUZXN0UmVzdWx0KCkgY29uc3QgeyByZXR1cm4gbV9oaXRUZXN0UmVzdWx0OyB9Ci0gICAg
ICAgIENvbnRleHRNZW51Q29udHJvbGxlciogY29udHJvbGxlcigpIGNvbnN0OwotCiAgICAgICAg
IFBsYXRmb3JtTWVudURlc2NyaXB0aW9uIHBsYXRmb3JtRGVzY3JpcHRpb24oKSBjb25zdDsKICAg
ICAgICAgdm9pZCBzZXRQbGF0Zm9ybURlc2NyaXB0aW9uKFBsYXRmb3JtTWVudURlc2NyaXB0aW9u
KTsKIApAQCAtNzUsNyArNjcsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHN0YXRp
YyBDb250ZXh0TWVudUl0ZW0qIGl0ZW1XaXRoSWQoaW50KTsKICNlbmRpZgogICAgIHByaXZhdGU6
Ci0gICAgICAgIEhpdFRlc3RSZXN1bHQgbV9oaXRUZXN0UmVzdWx0OwogI2lmIFBMQVRGT1JNKE1B
QykKICAgICAgICAgLy8gS2VlcCB0aGlzIGluIHN5bmMgd2l0aCB0aGUgUGxhdGZvcm1NZW51RGVz
Y3JpcHRpb24gdHlwZWRlZgogICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IG1fcGxh
dGZvcm1EZXNjcmlwdGlvbjsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9UZW1wb3Jh
cnlMaW5rU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9U
ZW1wb3JhcnlMaW5rU3R1YnMuY3BwCShyZXZpc2lvbiA3MzQ2OSkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vYW5kcm9pZC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjcs
NyArMTY3LDcgQEAgUGFzdGVib2FyZDo6flBhc3RlYm9hcmQoKQogfQogCiAKLUNvbnRleHRNZW51
OjpDb250ZXh0TWVudShjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQpIDogbV9oaXRUZXN0UmVz
dWx0KHJlc3VsdCkKK0NvbnRleHRNZW51OjpDb250ZXh0TWVudSgpCiB7CiAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vYnJldy9Db250ZXh0TWVudUJyZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vYnJldy9Db250ZXh0TWVudUJyZXcuY3BwCShyZXZpc2lvbiA3MzQ2OSkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vYnJldy9Db250ZXh0TWVudUJyZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwx
NSArMzIsMTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1Db250ZXh0TWVudTo6Q29udGV4
dE1lbnUoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0KQotICAgIDogbV9oaXRUZXN0UmVzdWx0
KHJlc3VsdCkKK0NvbnRleHRNZW51OjpDb250ZXh0TWVudSgpCiB7CiAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotQ29udGV4dE1lbnU6OkNvbnRl
eHRNZW51KGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgUGxhdGZvcm1NZW51RGVz
Y3JpcHRpb24gbWVudSkKLSAgICA6IG1faGl0VGVzdFJlc3VsdChyZXN1bHQpCitDb250ZXh0TWVu
dTo6Q29udGV4dE1lbnUoY29uc3QgUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gbWVudSkKIHsKICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICBub3RJbXBsZW1lbnRlZCgpOwpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9Db250ZXh0TWVudUNocm9taXVtLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NvbnRleHRNZW51Q2hyb21pdW0uY3BwCShy
ZXZpc2lvbiA3MzQ2OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ29udGV4dE1lbnVD
aHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDEzICszNiwxMSBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAvLyBUaGlzIGlzIGEgc3R1YiBpbXBsZW1lbnRhdGlvbiBvZiBXZWJLaXQncyBD
b250ZXh0TWVudSBjbGFzcyB0aGF0IGRvZXMKIC8vIG5vdGhpbmcuCiAKLUNvbnRleHRNZW51OjpD
b250ZXh0TWVudShjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQpCi0gICAgOiBtX2hpdFRlc3RS
ZXN1bHQocmVzdWx0KQorQ29udGV4dE1lbnU6OkNvbnRleHRNZW51KCkKIHsKIH0KIAotQ29udGV4
dE1lbnU6OkNvbnRleHRNZW51KGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgUGxh
dGZvcm1NZW51RGVzY3JpcHRpb24gbWVudSkKLSAgICA6IG1faGl0VGVzdFJlc3VsdChyZXN1bHQp
CitDb250ZXh0TWVudTo6Q29udGV4dE1lbnUoY29uc3QgUGxhdGZvcm1NZW51RGVzY3JpcHRpb24g
bWVudSkKIHsKIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9lZmwvQ29udGV4dE1lbnVFZmwu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZWZsL0NvbnRleHRNZW51RWZsLmNw
cAkocmV2aXNpb24gNzM0NjkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2VmbC9Db250ZXh0TWVudUVm
bC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDE2ICsyOSwxNCBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLUNvbnRleHRNZW51OjpDb250ZXh0TWVudShjb25zdCBIaXRUZXN0UmVzdWx0JiBy
ZXN1bHQpCi0gICAgOiBtX2hpdFRlc3RSZXN1bHQocmVzdWx0KQorQ29udGV4dE1lbnU6OkNvbnRl
eHRNZW51KCkKIHsKICAgICBtX2NvbnRleHRNZW51Q2xpZW50ID0gc3RhdGljX2Nhc3Q8Q29udGV4
dE1lbnVDbGllbnRFZmwqPihjb250cm9sbGVyKCktPmNsaWVudCgpKTsKICAgICBtX3BsYXRmb3Jt
RGVzY3JpcHRpb24gPSBtX2NvbnRleHRNZW51Q2xpZW50LT5jcmVhdGVQbGF0Zm9ybURlc2NyaXB0
aW9uKHRoaXMpOwogfQogCi1Db250ZXh0TWVudTo6Q29udGV4dE1lbnUoY29uc3QgSGl0VGVzdFJl
c3VsdCYgcmVzdWx0LCBjb25zdCBQbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbiBtZW51KQotICAgIDog
bV9oaXRUZXN0UmVzdWx0KHJlc3VsdCkKLSAgICAsIG1fcGxhdGZvcm1EZXNjcmlwdGlvbihtZW51
KQorQ29udGV4dE1lbnU6OkNvbnRleHRNZW51KGNvbnN0IFBsYXRmb3JtTWVudURlc2NyaXB0aW9u
IG1lbnUpCisgICAgOiBtX3BsYXRmb3JtRGVzY3JpcHRpb24obWVudSkKIHsKICAgICBtX2NvbnRl
eHRNZW51Q2xpZW50ID0gc3RhdGljX2Nhc3Q8Q29udGV4dE1lbnVDbGllbnRFZmwqPihjb250cm9s
bGVyKCktPmNsaWVudCgpKTsKIH0KQEAgLTUxLDcgKzQ5LDYgQEAgQ29udGV4dE1lbnU6On5Db250
ZXh0TWVudSgpCiAKIHZvaWQgQ29udGV4dE1lbnU6OmFwcGVuZEl0ZW0oQ29udGV4dE1lbnVJdGVt
JiBpdGVtKQogewotICAgIGNoZWNrT3JFbmFibGVJZk5lZWRlZChpdGVtKTsKICAgICBtX2NvbnRl
eHRNZW51Q2xpZW50LT5hcHBlbmRJdGVtKG1fcGxhdGZvcm1EZXNjcmlwdGlvbiwgaXRlbSk7CiB9
CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZWZsL0NvbnRleHRNZW51SXRlbUVmbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9lZmwvQ29udGV4dE1lbnVJdGVtRWZsLmNwcAko
cmV2aXNpb24gNzM0NjkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2VmbC9Db250ZXh0TWVudUl0ZW1F
ZmwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsOCArMTE2LDcgQEAgdm9pZCBDb250ZXh0TWVu
dUl0ZW06OnNldFN1Yk1lbnUoQ29udGV4dAogICAgICAgICByZXR1cm47CiAKICAgICBtX3BsYXRm
b3JtRGVzY3JpcHRpb24udHlwZSA9IFN1Ym1lbnVUeXBlOwotICAgIG1fcGxhdGZvcm1EZXNjcmlw
dGlvbi5zdWJNZW51ID0gbmV3IENvbnRleHRNZW51KHN1Yk1lbnUtPmhpdFRlc3RSZXN1bHQoKSwK
LSAgICAgICAgICAgIHN1Yk1lbnUtPnJlbGVhc2VQbGF0Zm9ybURlc2NyaXB0aW9uKCkpOworICAg
IG1fcGxhdGZvcm1EZXNjcmlwdGlvbi5zdWJNZW51ID0gbmV3IENvbnRleHRNZW51KHN1Yk1lbnUt
PnJlbGVhc2VQbGF0Zm9ybURlc2NyaXB0aW9uKCkpOwogfQogCiBib29sIENvbnRleHRNZW51SXRl
bTo6Y2hlY2tlZCgpIGNvbnN0CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2d0ay9Db250ZXh0TWVu
dUd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ29udGV4dE1lbnVH
dGsuY3BwCShyZXZpc2lvbiA3MzQ2OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL0NvbnRleHRN
ZW51R3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsOCArMzQsNyBAQCBzdGF0aWMgdm9pZCBt
ZW51SXRlbUFjdGl2YXRlZChHdGtNZW51SXRlCiAgICAgY29udHJvbGxlci0+Y29udGV4dE1lbnVJ
dGVtU2VsZWN0ZWQoJmNvbnRleHRJdGVtKTsKIH0KIAotQ29udGV4dE1lbnU6OkNvbnRleHRNZW51
KGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCkKLSAgICA6IG1faGl0VGVzdFJlc3VsdChyZXN1
bHQpCitDb250ZXh0TWVudTo6Q29udGV4dE1lbnUoKQogewogICAgIG1fcGxhdGZvcm1EZXNjcmlw
dGlvbiA9IEdUS19NRU5VKGd0a19tZW51X25ldygpKTsKIApAQCAtNTEsNyArNTAsNiBAQCBDb250
ZXh0TWVudTo6fkNvbnRleHRNZW51KCkKIHZvaWQgQ29udGV4dE1lbnU6OmFwcGVuZEl0ZW0oQ29u
dGV4dE1lbnVJdGVtJiBpdGVtKQogewogICAgIEFTU0VSVChtX3BsYXRmb3JtRGVzY3JpcHRpb24p
OwotICAgIGNoZWNrT3JFbmFibGVJZk5lZWRlZChpdGVtKTsKIAogICAgIENvbnRleHRNZW51SXRl
bVR5cGUgdHlwZSA9IGl0ZW0udHlwZSgpOwogICAgIEd0a01lbnVJdGVtKiBwbGF0Zm9ybUl0ZW0g
PSBDb250ZXh0TWVudUl0ZW06OmNyZWF0ZU5hdGl2ZU1lbnVJdGVtKGl0ZW0ucmVsZWFzZVBsYXRm
b3JtRGVzY3JpcHRpb24oKSk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0NvbnRleHRN
ZW51SGFpa3UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvQ29udGV4
dE1lbnVIYWlrdS5jcHAJKHJldmlzaW9uIDczNDY5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9oYWlr
dS9Db250ZXh0TWVudUhhaWt1LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUsOSArNzUsOCBAQCBw
cml2YXRlOgogICAgIGludCBtX3Jlc3VsdDsKIH07CiAKLUNvbnRleHRNZW51OjpDb250ZXh0TWVu
dShjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQpCi0gICAgOiBtX2hpdFRlc3RSZXN1bHQocmVz
dWx0KQotICAgICwgbV9wbGF0Zm9ybURlc2NyaXB0aW9uKG5ldyBCTWVudSgiY29udGV4dF9tZW51
IikpCitDb250ZXh0TWVudTo6Q29udGV4dE1lbnUoKQorICAgIDogbV9wbGF0Zm9ybURlc2NyaXB0
aW9uKG5ldyBCTWVudSgiY29udGV4dF9tZW51IikpCiB7CiB9CiAKQEAgLTg4LDggKzg3LDYgQEAg
Q29udGV4dE1lbnU6On5Db250ZXh0TWVudSgpCiAKIHZvaWQgQ29udGV4dE1lbnU6OmFwcGVuZEl0
ZW0oQ29udGV4dE1lbnVJdGVtJiBpdGVtKQogewotICAgIGNoZWNrT3JFbmFibGVJZk5lZWRlZChp
dGVtKTsKLQogICAgIEJNZW51SXRlbSogbWVudUl0ZW0gPSBpdGVtLnJlbGVhc2VQbGF0Zm9ybURl
c2NyaXB0aW9uKCk7CiAgICAgaWYgKG1lbnVJdGVtKQogICAgICAgICBtX3BsYXRmb3JtRGVzY3Jp
cHRpb24tPkFkZEl0ZW0obWVudUl0ZW0pOwpAQCAtMTAyLDggKzk5LDYgQEAgdW5zaWduZWQgQ29u
dGV4dE1lbnU6Oml0ZW1Db3VudCgpIGNvbnN0CiAKIHZvaWQgQ29udGV4dE1lbnU6Omluc2VydEl0
ZW0odW5zaWduZWQgcG9zaXRpb24sIENvbnRleHRNZW51SXRlbSYgaXRlbSkKIHsKLSAgICBjaGVj
a09yRW5hYmxlSWZOZWVkZWQoaXRlbSk7Ci0KICAgICBCTWVudUl0ZW0qIG1lbnVJdGVtID0gaXRl
bS5yZWxlYXNlUGxhdGZvcm1EZXNjcmlwdGlvbigpOwogICAgIGlmIChtZW51SXRlbSkKICAgICAg
ICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9uLT5BZGRJdGVtKG1lbnVJdGVtLCBwb3NpdGlvbik7Cklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL21hYy9Db250ZXh0TWVudU1hYy5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL21hYy9Db250ZXh0TWVudU1hYy5tbQkocmV2aXNpb24gNzM0Njkp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL21hYy9Db250ZXh0TWVudU1hYy5tbQkod29ya2luZyBjb3B5
KQpAQCAtMzAsMTcgKzMwLDE1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ29udGV4dE1l
bnU6OkNvbnRleHRNZW51KGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCkKLSAgICA6IG1faGl0
VGVzdFJlc3VsdChyZXN1bHQpCitDb250ZXh0TWVudTo6Q29udGV4dE1lbnUoKQogewogICAgIE5T
TXV0YWJsZUFycmF5KiBhcnJheSA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdOwogICAg
IG1fcGxhdGZvcm1EZXNjcmlwdGlvbiA9IGFycmF5OwogICAgIFthcnJheSByZWxlYXNlXTsKIH0K
IAotQ29udGV4dE1lbnU6OkNvbnRleHRNZW51KGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwg
Y29uc3QgUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gbWVudSkKLSAgICA6IG1faGl0VGVzdFJlc3Vs
dChyZXN1bHQpCi0gICAgLCBtX3BsYXRmb3JtRGVzY3JpcHRpb24obWVudSkKK0NvbnRleHRNZW51
OjpDb250ZXh0TWVudShjb25zdCBQbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbiBtZW51KQorICAgIDog
bV9wbGF0Zm9ybURlc2NyaXB0aW9uKG1lbnUpCiB7CiB9CiAKQEAgLTUwLDggKzQ4LDYgQEAgQ29u
dGV4dE1lbnU6On5Db250ZXh0TWVudSgpCiAKIHZvaWQgQ29udGV4dE1lbnU6OmFwcGVuZEl0ZW0o
Q29udGV4dE1lbnVJdGVtJiBpdGVtKQogewotICAgIGNoZWNrT3JFbmFibGVJZk5lZWRlZChpdGVt
KTsKLQogICAgIE5TTWVudUl0ZW0qIHBsYXRmb3JtSXRlbSA9IGl0ZW0ucmVsZWFzZVBsYXRmb3Jt
RGVzY3JpcHRpb24oKTsKIAogICAgIFttX3BsYXRmb3JtRGVzY3JpcHRpb24uZ2V0KCkgYWRkT2Jq
ZWN0OnBsYXRmb3JtSXRlbV07CkBAIC02MCw4ICs1Niw2IEBAIHZvaWQgQ29udGV4dE1lbnU6OmFw
cGVuZEl0ZW0oQ29udGV4dE1lbnUKIAogdm9pZCBDb250ZXh0TWVudTo6aW5zZXJ0SXRlbSh1bnNp
Z25lZCBwb3NpdGlvbiwgQ29udGV4dE1lbnVJdGVtJiBpdGVtKQogewotICAgIGNoZWNrT3JFbmFi
bGVJZk5lZWRlZChpdGVtKTsKLQogICAgIE5TTWVudUl0ZW0qIHBsYXRmb3JtSXRlbSA9IGl0ZW0u
cmVsZWFzZVBsYXRmb3JtRGVzY3JpcHRpb24oKTsKIAogICAgIFttX3BsYXRmb3JtRGVzY3JpcHRp
b24uZ2V0KCkgaW5zZXJ0T2JqZWN0OnBsYXRmb3JtSXRlbSBhdEluZGV4OnBvc2l0aW9uXTsKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vcXQvQ29udGV4dE1lbnVRdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9xdC9Db250ZXh0TWVudVF0LmNwcAkocmV2aXNpb24gNzM0NjkpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL3F0L0NvbnRleHRNZW51UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNSw4ICszNSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ29udGV4dE1lbnU6OkNv
bnRleHRNZW51KGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCkKLSAgICA6IG1faGl0VGVzdFJl
c3VsdChyZXN1bHQpCitDb250ZXh0TWVudTo6Q29udGV4dE1lbnUoKQogewogfQogCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL3dpbi9Db250ZXh0TWVudVdpbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS93aW4vQ29udGV4dE1lbnVXaW4uY3BwCShyZXZpc2lvbiA3MzQ2OSkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vd2luL0NvbnRleHRNZW51V2luLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDMsOSArNDMsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNvbnRleHRNZW51OjpD
b250ZXh0TWVudShjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQpCi0gICAgOiBtX2hpdFRlc3RS
ZXN1bHQocmVzdWx0KQotICAgICwgbV9wbGF0Zm9ybURlc2NyaXB0aW9uKDApCitDb250ZXh0TWVu
dTo6Q29udGV4dE1lbnUoKQorICAgIDogbV9wbGF0Zm9ybURlc2NyaXB0aW9uKDApCiAjaWYgT1Mo
V0lOQ0UpCiAgICAgLCBtX2l0ZW1Db3VudCgwKQogI2VuZGlmCkBAIC01Myw5ICs1Miw4IEBAIENv
bnRleHRNZW51OjpDb250ZXh0TWVudShjb25zdCBIaXRUZXN0UmUKICAgICBzZXRQbGF0Zm9ybURl
c2NyaXB0aW9uKDo6Q3JlYXRlUG9wdXBNZW51KCkpOwogfQogCi1Db250ZXh0TWVudTo6Q29udGV4
dE1lbnUoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBQbGF0Zm9ybU1lbnVEZXNj
cmlwdGlvbiBtZW51KQotICAgIDogbV9oaXRUZXN0UmVzdWx0KHJlc3VsdCkKLSAgICAsIG1fcGxh
dGZvcm1EZXNjcmlwdGlvbigwKQorQ29udGV4dE1lbnU6OkNvbnRleHRNZW51KGNvbnN0IFBsYXRm
b3JtTWVudURlc2NyaXB0aW9uIG1lbnUpCisgICAgOiBtX3BsYXRmb3JtRGVzY3JpcHRpb24oMCkK
ICNpZiBPUyhXSU5DRSkKICAgICAsIG1faXRlbUNvdW50KDApCiAjZW5kaWYKQEAgLTExOCw4ICsx
MTYsNiBAQCB2b2lkIENvbnRleHRNZW51OjppbnNlcnRJdGVtKHVuc2lnbmVkIGluCiAgICAgaWYg
KCFtX3BsYXRmb3JtRGVzY3JpcHRpb24pCiAgICAgICAgIHJldHVybjsKIAotICAgIGNoZWNrT3JF
bmFibGVJZk5lZWRlZChpdGVtKTsKLQogI2lmIE9TKFdJTkNFKQogICAgIGlmIChpbnNlcnRNZW51
SXRlbShtX3BsYXRmb3JtRGVzY3JpcHRpb24sIHBvc2l0aW9uLCBpdGVtKSkKICAgICAgICAgKytt
X2l0ZW1Db3VudDsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vd3gvQ29udGV4dE1lbnVXeC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS93eC9Db250ZXh0TWVudVd4LmNwcAkocmV2
aXNpb24gNzM0NjkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3d4L0NvbnRleHRNZW51V3guY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIENvbnRleHRNZW51SXRlbSogQ29udGV4dE1l
bnU6Oml0ZW1XaXRoSWQKICAgICByZXR1cm4gbmV3IENvbnRleHRNZW51SXRlbShBY3Rpb25UeXBl
LCBzX2l0ZW1BY3Rpb25zLmdldChpZCksICIiKTsKIH0KIAotQ29udGV4dE1lbnU6OkNvbnRleHRN
ZW51KGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCkgOiBtX2hpdFRlc3RSZXN1bHQocmVzdWx0
KQorQ29udGV4dE1lbnU6OkNvbnRleHRNZW51KCkKIHsKICAgICBtX3BsYXRmb3JtRGVzY3JpcHRp
b24gPSBuZXcgd3hNZW51KDApOwogfQpAQCAtNTcsOCArNTcsNiBAQCB2b2lkIENvbnRleHRNZW51
OjphcHBlbmRJdGVtKENvbnRleHRNZW51CiB7CiAgICAgaWYgKCFtX3BsYXRmb3JtRGVzY3JpcHRp
b24pCiAgICAgICAgIHJldHVybjsKLSAgICAKLSAgICBjaGVja09yRW5hYmxlSWZOZWVkZWQoaXRl
bSk7CiAgICAgICAgIAogICAgIFBsYXRmb3JtTWVudUl0ZW1EZXNjcmlwdGlvbiBpdGVtRGVzY3Jp
cHRpb24gPSBpdGVtLnJlbGVhc2VQbGF0Zm9ybURlc2NyaXB0aW9uKCk7ICAgIAogICAgIHd4SXRl
bUtpbmQgbWVudUtpbmRXeCA9ICggaXRlbURlc2NyaXB0aW9uLnR5cGUgPT0gQ2hlY2thYmxlQWN0
aW9uVHlwZSApID8gd3hJVEVNX0NIRUNLIDogd3hJVEVNX05PUk1BTDsKSW5kZXg6IFdlYkNvcmUv
cmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL0hpdFRlc3RSZXN1bHQuY3BwCShyZXZpc2lvbiA3MzQ2OSkKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL0hpdFRlc3RSZXN1bHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCwxNiBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKK0hpdFRl
c3RSZXN1bHQ6OkhpdFRlc3RSZXN1bHQoKQorICAgIDogbV9pc092ZXJXaWRnZXQoZmFsc2UpCisg
ICAgLCBtX2lzUmVjdEJhc2VkKGZhbHNlKQorICAgICwgbV90b3BQYWRkaW5nKDApCisgICAgLCBt
X3JpZ2h0UGFkZGluZygwKQorICAgICwgbV9ib3R0b21QYWRkaW5nKDApCisgICAgLCBtX2xlZnRQ
YWRkaW5nKDApCit7Cit9CisKIEhpdFRlc3RSZXN1bHQ6OkhpdFRlc3RSZXN1bHQoY29uc3QgSW50
UG9pbnQmIHBvaW50KQogICAgIDogbV9wb2ludChwb2ludCkKICAgICAsIG1faXNPdmVyV2lkZ2V0
KGZhbHNlKQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuaAkocmV2aXNpb24gNzM0Njkp
CisrKyBXZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTQzLDYgKzQzLDcgQEAgY2xhc3MgU2Nyb2xsYmFyOwogCiBjbGFzcyBIaXRUZXN0UmVzdWx0IHsK
IHB1YmxpYzoKKyAgICBIaXRUZXN0UmVzdWx0KCk7CiAgICAgSGl0VGVzdFJlc3VsdChjb25zdCBJ
bnRQb2ludCYpOwogICAgIC8vIFBhc3Mgbm9uLW5lZ2F0aXZlIHBhZGRpbmcgdmFsdWVzIHRvIHBl
cmZvcm0gYSByZWN0LWJhc2VkIGhpdCB0ZXN0LgogICAgIEhpdFRlc3RSZXN1bHQoY29uc3QgSW50
UG9pbnQmIGNlbnRlclBvaW50LCB1bnNpZ25lZCB0b3BQYWRkaW5nLCB1bnNpZ25lZCByaWdodFBh
ZGRpbmcsIHVuc2lnbmVkIGJvdHRvbVBhZGRpbmcsIHVuc2lnbmVkIGxlZnRQYWRkaW5nKTsKSW5k
ZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9nCShy
ZXZpc2lvbiA3MzQ5MCkKKysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTkgQEAKKzIwMTAtMTItMDcgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBw
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IExheWVyaW5nIFZpb2xhdGlvbiBpbiBDb250ZXh0TWVudSAtIG1lbWJlciB2YXJpYWJsZSBvZiB0
eXBlIEhpdFRlc3RSZXN1bHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTUwNTg2CisgICAgICAgIAorICAgICAgICBVcGRhdGUgdXNlcnMgb2YgQ29udGV4
dE1lbnUgYW5kIENvbnRleHRNZW51Q29udHJvbGxlciB0byBtYXRjaCB3aGVyZSB0aGUgbmV3IGZ1
bmN0aW9ucyAKKyAgICAgICAgYXJlIGxvY2F0ZWQuCisKKyAgICAgICAgKiBTaGFyZWQvV2ViQ29u
dGV4dE1lbnVJdGVtRGF0YS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHRNZW51SXRl
bURhdGE6OldlYkNvbnRleHRNZW51SXRlbURhdGEpOiBSZW1vdmUgdGhlIGNhbGwgdG8gY2hlY2tP
ckVuYWJsZUl0ZW0sIHRoYXQgY2FsbCB3aWxsIGJlIG1hZGUgd2hlbgorICAgICAgICAgICAgdGhl
IENvbnRleHRNZW51SXRlbSBpcyBhZGRlZCB0byB0aGUgQ29udGV4dE1lbnUgdGhyb3VnaCB0aGUg
Q29udGV4dE1lbnVDb250cm9sbGVyLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJD
b250ZXh0TWVudS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHRNZW51OjpzaG93KToK
KwogMjAxMC0xMi0wNyAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCkluZGV4OiBXZWJLaXQyL1NoYXJlZC9XZWJD
b250ZXh0TWVudUl0ZW1EYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1NoYXJlZC9XZWJD
b250ZXh0TWVudUl0ZW1EYXRhLmNwcAkocmV2aXNpb24gNzM0NjkpCisrKyBXZWJLaXQyL1NoYXJl
ZC9XZWJDb250ZXh0TWVudUl0ZW1EYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsOCArNzMs
NiBAQCBXZWJDb250ZXh0TWVudUl0ZW1EYXRhOjpXZWJDb250ZXh0TWVudUl0CiAgICAgICAgIG1f
c3VibWVudSA9IGtpdEl0ZW1zKGNvcmVTdWJtZW51LCBtZW51KTsKICAgICB9CiAgICAgCi0gICAg
bWVudS0+Y2hlY2tPckVuYWJsZUlmTmVlZGVkKGl0ZW0pOwotICAgIAogICAgIG1fZW5hYmxlZCA9
IGl0ZW0uZW5hYmxlZCgpOwogICAgIG1fY2hlY2tlZCA9IGl0ZW0uY2hlY2tlZCgpOwogfQpJbmRl
eDogV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQ29udGV4dE1lbnUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkNvbnRleHRNZW51LmNwcAkocmV2
aXNpb24gNzM0NjkpCisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJDb250ZXh0TWVu
dS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDEwICs0NywxMyBAQCBXZWJDb250ZXh0TWVudTo6
fldlYkNvbnRleHRNZW51KCkKIAogdm9pZCBXZWJDb250ZXh0TWVudTo6c2hvdygpCiB7Ci0gICAg
Q29udGV4dE1lbnUqIG1lbnUgPSBtX3BhZ2UtPmNvcmVQYWdlKCktPmNvbnRleHRNZW51Q29udHJv
bGxlcigpLT5jb250ZXh0TWVudSgpOworICAgIENvbnRleHRNZW51Q29udHJvbGxlciogY29udHJv
bGxlciA9IG1fcGFnZS0+Y29yZVBhZ2UoKS0+Y29udGV4dE1lbnVDb250cm9sbGVyKCk7CisgICAg
aWYgKCFjb250cm9sbGVyKQorICAgICAgICByZXR1cm47CisgICAgQ29udGV4dE1lbnUqIG1lbnUg
PSBjb250cm9sbGVyLT5jb250ZXh0TWVudSgpOwogICAgIGlmICghbWVudSkKICAgICAgICAgcmV0
dXJuOwotICAgIE5vZGUqIG5vZGUgPSBtZW51LT5oaXRUZXN0UmVzdWx0KCkuaW5uZXJOb25TaGFy
ZWROb2RlKCk7CisgICAgTm9kZSogbm9kZSA9IGNvbnRyb2xsZXItPmhpdFRlc3RSZXN1bHQoKS5p
bm5lck5vblNoYXJlZE5vZGUoKTsKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybjsKICAg
ICBGcmFtZSogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpOwpAQCAtNjUsMTIgKzY4
LDEyIEBAIHZvaWQgV2ViQ29udGV4dE1lbnU6OnNob3coKQogICAgIFZlY3RvcjxXZWJDb250ZXh0
TWVudUl0ZW1EYXRhPiBwcm9wb3NlZE1lbnUgPSBraXRJdGVtcyhjb3JlSXRlbXMsIG1lbnUpOwog
ICAgIFZlY3RvcjxXZWJDb250ZXh0TWVudUl0ZW1EYXRhPiBuZXdNZW51OwogICAgIFJlZlB0cjxB
UElPYmplY3Q+IHVzZXJEYXRhOwotICAgIFJlZlB0cjxJbmplY3RlZEJ1bmRsZUhpdFRlc3RSZXN1
bHQ+IGhpdFRlc3RSZXN1bHQgPSBJbmplY3RlZEJ1bmRsZUhpdFRlc3RSZXN1bHQ6OmNyZWF0ZSht
ZW51LT5oaXRUZXN0UmVzdWx0KCkpOworICAgIFJlZlB0cjxJbmplY3RlZEJ1bmRsZUhpdFRlc3RS
ZXN1bHQ+IGhpdFRlc3RSZXN1bHQgPSBJbmplY3RlZEJ1bmRsZUhpdFRlc3RSZXN1bHQ6OmNyZWF0
ZShjb250cm9sbGVyLT5oaXRUZXN0UmVzdWx0KCkpOwogICAgIGlmIChtX3BhZ2UtPmluamVjdGVk
QnVuZGxlQ29udGV4dE1lbnVDbGllbnQoKS5nZXRDdXN0b21NZW51RnJvbURlZmF1bHRJdGVtcyht
X3BhZ2UsIGhpdFRlc3RSZXN1bHQuZ2V0KCksIHByb3Bvc2VkTWVudSwgbmV3TWVudSwgdXNlckRh
dGEpKQogICAgICAgICBwcm9wb3NlZE1lbnUgPSBuZXdNZW51OwogCiAgICAgLy8gTm90aWZ5IHRo
ZSBVSVByb2Nlc3MuCi0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNo
b3dDb250ZXh0TWVudSh2aWV3LT5jb250ZW50c1RvV2luZG93KG1lbnUtPmhpdFRlc3RSZXN1bHQo
KS5wb2ludCgpKSwgcHJvcG9zZWRNZW51LCBJbmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdlRW5jb2Rl
cih1c2VyRGF0YS5nZXQoKSkpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6U2hvd0NvbnRleHRNZW51KHZpZXctPmNvbnRlbnRzVG9XaW5kb3coY29udHJvbGxlci0+
aGl0VGVzdFJlc3VsdCgpLnBvaW50KCkpLCBwcm9wb3NlZE1lbnUsIEluamVjdGVkQnVuZGxlVXNl
ck1lc3NhZ2VFbmNvZGVyKHVzZXJEYXRhLmdldCgpKSkpOwogfQogCiB2b2lkIFdlYkNvbnRleHRN
ZW51OjppdGVtU2VsZWN0ZWQoY29uc3QgV2ViQ29udGV4dE1lbnVJdGVtRGF0YSYgaXRlbSkKSW5k
ZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNzM0ODcpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTAtMTItMDcgIEJyaWFuIFdl
aW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIExheWVyaW5nIFZpb2xhdGlvbiBpbiBDb250ZXh0TWVu
dSAtIG1lbWJlciB2YXJpYWJsZSBvZiB0eXBlIEhpdFRlc3RSZXN1bHQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUwNTg2CisgICAgICAgIAorICAgICAg
ICBVcGRhdGUgdXNlcnMgb2YgQ29udGV4dE1lbnUgYW5kIENvbnRleHRNZW51Q29udHJvbGxlciB0
byBtYXRjaCB3aGVyZSB0aGUgbmV3IGZ1bmN0aW9ucyAKKyAgICAgICAgYXJlIGxvY2F0ZWQuCisK
KyAgICAgICAgKiBzcmMvQ29udGV4dE1lbnVDbGllbnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6c2VsZWN0TWlzc3BlbGxlZFdvcmQpOgorICAgICAgICAoV2ViS2l0OjpDb250ZXh0TWVudUNs
aWVudEltcGw6OmdldEN1c3RvbU1lbnVGcm9tRGVmYXVsdEl0ZW1zKToKKwogMjAxMC0xMi0wNiAg
RGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2Ft
IFdlaW5pZy4KSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvQ29udGV4dE1lbnVDbGllbnRJbXBs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL0NvbnRleHRNZW51Q2xpZW50
SW1wbC5jcHAJKHJldmlzaW9uIDczNDY5KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9Db250ZXh0
TWVudUNsaWVudEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5j
bHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgogI2luY2x1ZGUgIkNTU1N0eWxlRGVjbGFyYXRpb24u
aCIKICNpbmNsdWRlICJDb250ZXh0TWVudS5oIgorI2luY2x1ZGUgIkNvbnRleHRNZW51Q29udHJv
bGxlci5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIu
aCIKICNpbmNsdWRlICJFZGl0b3IuaCIKQEAgLTQ1LDYgKzQ2LDcgQEAKICNpbmNsdWRlICJIVE1M
TmFtZXMuaCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiTWVkaWFFcnJvci5oIgorI2lu
Y2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlJl
bmRlcldpZGdldC5oIgogI2luY2x1ZGUgIlRleHRCcmVha0l0ZXJhdG9yLmgiCkBAIC0xMTAsNyAr
MTEyLDcgQEAgc3RhdGljIFN0cmluZyBzZWxlY3RNaXNzcGVsbGVkV29yZChjb25zdAogCiAgICAg
Ly8gU2VsZWN0aW9uIGlzIGVtcHR5LCBzbyBjaGFuZ2UgdGhlIHNlbGVjdGlvbiB0byB0aGUgd29y
ZCB1bmRlciB0aGUgY3Vyc29yLgogICAgIEhpdFRlc3RSZXN1bHQgaGl0VGVzdFJlc3VsdCA9IHNl
bGVjdGVkRnJhbWUtPmV2ZW50SGFuZGxlcigpLT4KLSAgICAgICAgaGl0VGVzdFJlc3VsdEF0UG9p
bnQoZGVmYXVsdE1lbnUtPmhpdFRlc3RSZXN1bHQoKS5wb2ludCgpLCB0cnVlKTsKKyAgICAgICAg
aGl0VGVzdFJlc3VsdEF0UG9pbnQoc2VsZWN0ZWRGcmFtZS0+cGFnZSgpLT5jb250ZXh0TWVudUNv
bnRyb2xsZXIoKS0+aGl0VGVzdFJlc3VsdCgpLnBvaW50KCksIHRydWUpOwogICAgIE5vZGUqIGlu
bmVyTm9kZSA9IGhpdFRlc3RSZXN1bHQuaW5uZXJOb2RlKCk7CiAgICAgVmlzaWJsZVBvc2l0aW9u
IHBvcyhpbm5lck5vZGUtPnJlbmRlcmVyKCktPnBvc2l0aW9uRm9yUG9pbnQoCiAgICAgICAgIGhp
dFRlc3RSZXN1bHQubG9jYWxQb2ludCgpKSk7CkBAIC0xNDQsNyArMTQ2LDcgQEAgUGxhdGZvcm1N
ZW51RGVzY3JpcHRpb24gQ29udGV4dE1lbnVDbGllbgogICAgIGlmICghbV93ZWJWaWV3LT5jb250
ZXh0TWVudUFsbG93ZWQoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBIaXRUZXN0UmVzdWx0
IHIgPSBkZWZhdWx0TWVudS0+aGl0VGVzdFJlc3VsdCgpOworICAgIEhpdFRlc3RSZXN1bHQgciA9
IG1fd2ViVmlldy0+cGFnZSgpLT5jb250ZXh0TWVudUNvbnRyb2xsZXIoKS0+aGl0VGVzdFJlc3Vs
dCgpOwogICAgIEZyYW1lKiBzZWxlY3RlZEZyYW1lID0gci5pbm5lck5vblNoYXJlZE5vZGUoKS0+
ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKIAogICAgIFdlYkNvbnRleHRNZW51RGF0YSBkYXRhOwpJbmRl
eDogV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9DaGFuZ2VM
b2cJKHJldmlzaW9uIDczNDkwKQorKysgV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxOSBAQAorMjAxMC0xMi0wNyAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5z
dGVpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgTGF5ZXJpbmcgVmlvbGF0aW9uIGluIENvbnRleHRNZW51IC0gbWVtYmVyIHZhcmlh
YmxlIG9mIHR5cGUgSGl0VGVzdFJlc3VsdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NTA1ODYKKyAgICAgICAgCisgICAgICAgIFVwZGF0ZSB1c2VycyBv
ZiBDb250ZXh0TWVudSBhbmQgQ29udGV4dE1lbnVDb250cm9sbGVyIHRvIG1hdGNoIHdoZXJlIHRo
ZSBuZXcgZnVuY3Rpb25zIAorICAgICAgICBhcmUgbG9jYXRlZC4KKworICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L1dlYkNvbnRleHRNZW51Q2xpZW50Lm1tOgorICAgICAgICAoV2ViQ29udGV4dE1l
bnVDbGllbnQ6OmdldEN1c3RvbU1lbnVGcm9tRGVmYXVsdEl0ZW1zKToKKyAgICAgICAgKFdlYkNv
bnRleHRNZW51Q2xpZW50Ojpjb250ZXh0TWVudUl0ZW1TZWxlY3RlZCk6CisgICAgICAgICogV2Vi
Vmlldy9XZWJIVE1MVmlldy5tbToKKyAgICAgICAgKC1bV2ViTWVudVRhcmdldCB2YWxpZGF0ZU1l
bnVJdGVtOl0pOgorCiAyMDEwLTEyLTA3ICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFw
cGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBKb2huIFN1bGxpdmFuLgpJbmRleDogV2Vi
S2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNvbnRleHRNZW51Q2xpZW50Lm1tCShy
ZXZpc2lvbiA3MzQ2OSkKKysrIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ29udGV4dE1l
bnVDbGllbnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTQyLDggKzQyLDEwIEBACiAjaW1wb3J0ICJX
ZWJWaWV3RmFjdG9yeS5oIgogI2ltcG9ydCAiV2ViVmlld0ludGVybmFsLmgiCiAjaW1wb3J0IDxX
ZWJDb3JlL0NvbnRleHRNZW51Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0NvbnRleHRNZW51Q29udHJv
bGxlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9LVVJMLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0xvY2Fs
aXplZFN0cmluZ3MuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUGFnZS5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9SdW50aW1lQXBwbGljYXRpb25DaGVja3MuaD4KICNpbXBvcnQgPFdlYktpdC9ET01Qcml2YXRl
Lmg+CiAKQEAgLTI3OCw3ICsyODAsNyBAQCBOU011dGFibGVBcnJheSogV2ViQ29udGV4dE1lbnVD
bGllbnQ6OmdlCiAgICAgaWYgKCFbZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOnNlbGVjdG9y
XSkKICAgICAgICAgcmV0dXJuIGRlZmF1bHRNZW51LT5wbGF0Zm9ybURlc2NyaXB0aW9uKCk7CiAK
LSAgICBOU0RpY3Rpb25hcnkgKmVsZW1lbnQgPSBbW1tXZWJFbGVtZW50RGljdGlvbmFyeSBhbGxv
Y10gaW5pdFdpdGhIaXRUZXN0UmVzdWx0OmRlZmF1bHRNZW51LT5oaXRUZXN0UmVzdWx0KCldIGF1
dG9yZWxlYXNlXTsKKyAgICBOU0RpY3Rpb25hcnkgKmVsZW1lbnQgPSBbW1tXZWJFbGVtZW50RGlj
dGlvbmFyeSBhbGxvY10gaW5pdFdpdGhIaXRUZXN0UmVzdWx0OlttX3dlYlZpZXcgcGFnZV0tPmNv
bnRleHRNZW51Q29udHJvbGxlcigpLT5oaXRUZXN0UmVzdWx0KCldIGF1dG9yZWxlYXNlXTsKIAog
ICAgIEJPT0wgcHJlVmVyc2lvbjNDbGllbnQgPSBpc1ByZVZlcnNpb24zQ2xpZW50KCk7CiAgICAg
aWYgKHByZVZlcnNpb24zQ2xpZW50KSB7CkBAIC0zMDgsNyArMzEwLDcgQEAgdm9pZCBXZWJDb250
ZXh0TWVudUNsaWVudDo6Y29udGV4dE1lbnVJdAogICAgIGlkIGRlbGVnYXRlID0gW21fd2ViVmll
dyBVSURlbGVnYXRlXTsKICAgICBTRUwgc2VsZWN0b3IgPSBAc2VsZWN0b3Iod2ViVmlldzpjb250
ZXh0TWVudUl0ZW1TZWxlY3RlZDpmb3JFbGVtZW50Oik7CiAgICAgaWYgKFtkZWxlZ2F0ZSByZXNw
b25kc1RvU2VsZWN0b3I6c2VsZWN0b3JdKSB7Ci0gICAgICAgIE5TRGljdGlvbmFyeSAqZWxlbWVu
dCA9IFtbV2ViRWxlbWVudERpY3Rpb25hcnkgYWxsb2NdIGluaXRXaXRoSGl0VGVzdFJlc3VsdDpw
YXJlbnRNZW51LT5oaXRUZXN0UmVzdWx0KCldOworICAgICAgICBOU0RpY3Rpb25hcnkgKmVsZW1l
bnQgPSBbW1dlYkVsZW1lbnREaWN0aW9uYXJ5IGFsbG9jXSBpbml0V2l0aEhpdFRlc3RSZXN1bHQ6
W21fd2ViVmlldyBwYWdlXS0+Y29udGV4dE1lbnVDb250cm9sbGVyKCktPmhpdFRlc3RSZXN1bHQo
KV07CiAgICAgICAgIE5TTWVudUl0ZW0gKnBsYXRmb3JtSXRlbSA9IGl0ZW0tPnJlbGVhc2VQbGF0
Zm9ybURlc2NyaXB0aW9uKCk7CiAKICAgICAgICAgQ2FsbFVJRGVsZWdhdGUobV93ZWJWaWV3LCBz
ZWxlY3RvciwgcGxhdGZvcm1JdGVtLCBlbGVtZW50KTsKSW5kZXg6IFdlYktpdC9tYWMvV2ViVmll
dy9XZWJIVE1MVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRN
TFZpZXcubW0JKHJldmlzaW9uIDczNDY5KQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxW
aWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNzAsNyArMTcwLDcgQEAgLSAoQk9PTCl2YWxpZGF0
ZU1lbnVJdGVtOihOU01lbnVJdGVtICopaQogewogICAgIFdlYkNvcmU6OkNvbnRleHRNZW51SXRl
bSBjb3JlSXRlbShpdGVtKTsKICAgICBBU1NFUlQoX21lbnVDb250cm9sbGVyLT5jb250ZXh0TWVu
dSgpKTsKLSAgICBfbWVudUNvbnRyb2xsZXItPmNvbnRleHRNZW51KCktPmNoZWNrT3JFbmFibGVJ
Zk5lZWRlZChjb3JlSXRlbSk7CisgICAgX21lbnVDb250cm9sbGVyLT5jaGVja09yRW5hYmxlSWZO
ZWVkZWQoY29yZUl0ZW0pOwogICAgIHJldHVybiBjb3JlSXRlbS5lbmFibGVkKCk7CiB9CiAKSW5k
ZXg6IFdlYktpdC9xdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L0NoYW5nZUxv
ZwkocmV2aXNpb24gNzM0NjkpCisrKyBXZWJLaXQvcXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMTcgQEAKKzIwMTAtMTItMDcgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3Rl
aW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIExheWVyaW5nIFZpb2xhdGlvbiBpbiBDb250ZXh0TWVudSAtIG1lbWJlciB2YXJpYWJs
ZSBvZiB0eXBlIEhpdFRlc3RSZXN1bHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTUwNTg2CisgICAgICAgIAorICAgICAgICBVcGRhdGUgdXNlcnMgb2Yg
Q29udGV4dE1lbnUgYW5kIENvbnRleHRNZW51Q29udHJvbGxlciB0byBtYXRjaCB3aGVyZSB0aGUg
bmV3IGZ1bmN0aW9ucyAKKyAgICAgICAgYXJlIGxvY2F0ZWQuCisKKyAgICAgICAgKiBBcGkvcXdl
YnBhZ2UuY3BwOgorICAgICAgICAoUVdlYlBhZ2VQcml2YXRlOjpjcmVhdGVDb250ZXh0TWVudSk6
CisgICAgICAgIChRV2ViUGFnZTo6dXBkYXRlUG9zaXRpb25EZXBlbmRlbnRBY3Rpb25zKToKKwog
MjAxMC0xMi0wNyAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgVHJ5
IHRvIGZpeCBidWlsZC4KSW5kZXg6IFdlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCShyZXZpc2lvbiA3MzQ2OSkKKysrIFdl
YktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NDMsNyArNDQzLDcg
QEAgUU1lbnUgKlFXZWJQYWdlUHJpdmF0ZTo6Y3JlYXRlQ29udGV4dE1lbgogICAgICAgICAgICAg
ICAgIFFBY3Rpb24gKmEgPSBxLT5hY3Rpb24oYWN0aW9uKTsKICAgICAgICAgICAgICAgICBpZiAo
YSkgewogICAgICAgICAgICAgICAgICAgICBDb250ZXh0TWVudUl0ZW0gaXQoaXRlbSk7Ci0gICAg
ICAgICAgICAgICAgICAgIHdlYmNvcmVNZW51LT5jaGVja09yRW5hYmxlSWZOZWVkZWQoaXQpOwor
ICAgICAgICAgICAgICAgICAgICBwYWdlLT5jb250ZXh0TWVudUNvbnRyb2xsZXIoKS0+Y2hlY2tP
ckVuYWJsZUlmTmVlZGVkKGl0KTsKICAgICAgICAgICAgICAgICAgICAgUGxhdGZvcm1NZW51SXRl
bURlc2NyaXB0aW9uIGRlc2MgPSBpdC5yZWxlYXNlUGxhdGZvcm1EZXNjcmlwdGlvbigpOwogICAg
ICAgICAgICAgICAgICAgICBhLT5zZXRFbmFibGVkKGRlc2MuZW5hYmxlZCk7CiAgICAgICAgICAg
ICAgICAgICAgIGEtPnNldENoZWNrZWQoZGVzYy5jaGVja2VkKTsKQEAgLTMyMDksMTIgKzMyMDks
MTMgQEAgdm9pZCBRV2ViUGFnZTo6dXBkYXRlUG9zaXRpb25EZXBlbmRlbnRBYwogICAgICAgICBk
LT5oaXRUZXN0UmVzdWx0ID0gUVdlYkhpdFRlc3RSZXN1bHQoKTsKICAgICBlbHNlCiAgICAgICAg
IGQtPmhpdFRlc3RSZXN1bHQgPSBRV2ViSGl0VGVzdFJlc3VsdChuZXcgUVdlYkhpdFRlc3RSZXN1
bHRQcml2YXRlKHJlc3VsdCkpOwotICAgIFdlYkNvcmU6OkNvbnRleHRNZW51IG1lbnUocmVzdWx0
KTsKLSAgICBtZW51LnBvcHVsYXRlKCk7CisKKyAgICBkLT5wYWdlLT5jb250ZXh0TWVudUNvbnRy
b2xsZXIoKS0+c2V0SGl0VGVzdFJlc3VsdChyZXN1bHQpOworICAgIGQtPnBhZ2UtPmNvbnRleHRN
ZW51Q29udHJvbGxlcigpLT5wb3B1bGF0ZSgpOwogICAgIAogI2lmIEVOQUJMRShJTlNQRUNUT1Ip
CiAgICAgaWYgKGQtPnBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+ZW5hYmxlZCgpKQotICAg
ICAgICBtZW51LmFkZEluc3BlY3RFbGVtZW50SXRlbSgpOworICAgICAgICBkLT5wYWdlLT5jb250
ZXh0TWVudUNvbnRyb2xsZXIoKS0+YWRkSW5zcGVjdEVsZW1lbnRJdGVtKCk7CiAjZW5kaWYKIAog
ICAgIFFCaXRBcnJheSB2aXNpdGVkV2ViQWN0aW9ucyhRV2ViUGFnZTo6V2ViQWN0aW9uQ291bnQp
OwpAQCAtMzIyMyw3ICszMjI0LDcgQEAgdm9pZCBRV2ViUGFnZTo6dXBkYXRlUG9zaXRpb25EZXBl
bmRlbnRBYwogICAgIGRlbGV0ZSBkLT5jdXJyZW50Q29udGV4dE1lbnU7CiAKICAgICAvLyBUaGVu
IHdlIGxldCBjcmVhdGVDb250ZXh0TWVudSgpIGVuYWJsZSB0aGUgYWN0aW9ucyB0aGF0IGFyZSBw
dXQgaW50byB0aGUgbWVudQotICAgIGQtPmN1cnJlbnRDb250ZXh0TWVudSA9IGQtPmNyZWF0ZUNv
bnRleHRNZW51KCZtZW51LCBtZW51LnBsYXRmb3JtRGVzY3JpcHRpb24oKSwgJnZpc2l0ZWRXZWJB
Y3Rpb25zKTsKKyAgICBkLT5jdXJyZW50Q29udGV4dE1lbnUgPSBkLT5jcmVhdGVDb250ZXh0TWVu
dShkLT5wYWdlLT5jb250ZXh0TWVudUNvbnRyb2xsZXIoKS0+Y29udGV4dE1lbnUoKSwgZC0+cGFn
ZS0+Y29udGV4dE1lbnVDb250cm9sbGVyKCktPmNvbnRleHRNZW51KCktPnBsYXRmb3JtRGVzY3Jp
cHRpb24oKSwgJnZpc2l0ZWRXZWJBY3Rpb25zKTsKICNlbmRpZiAvLyBRVF9OT19DT05URVhUTUVO
VQogCiAjaWZuZGVmIFFUX05PX0FDVElPTgpJbmRleDogV2ViS2l0L3dpbi9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHJldmlzaW9uIDczNDY5KQorKysgV2Vi
S2l0L3dpbi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMCBAQAorMjAxMC0x
Mi0wNyAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTGF5ZXJpbmcgVmlvbGF0aW9u
IGluIENvbnRleHRNZW51IC0gbWVtYmVyIHZhcmlhYmxlIG9mIHR5cGUgSGl0VGVzdFJlc3VsdAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTA1ODYKKyAg
ICAgICAgCisgICAgICAgIFVwZGF0ZSB1c2VycyBvZiBDb250ZXh0TWVudSBhbmQgQ29udGV4dE1l
bnVDb250cm9sbGVyIHRvIG1hdGNoIHdoZXJlIHRoZSBuZXcgZnVuY3Rpb25zIAorICAgICAgICBh
cmUgbG9jYXRlZC4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkNvbnRleHRNZW51Q2xp
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvbnRleHRNZW51Q2xpZW50OjpnZXRDdXN0b21NZW51RnJv
bURlZmF1bHRJdGVtcyk6IEdldCB0aGUgSGl0VGVzdFJlc3VsdCBhbmQgQ29udGV4dE1lbnUgZnJv
bSB0aGUgCisgICAgICAgICAgICBDb250ZXh0TWVudUNvbnRyb2xsZXIgKGZyb20gdGhlIHBhZ2Up
LgorICAgICAgICAoV2ViQ29udGV4dE1lbnVDbGllbnQ6OmNvbnRleHRNZW51SXRlbVNlbGVjdGVk
KTogR2V0IHRoZSBIaXRUZXN0UmVzdWx0IGZyb20gdGhlIENvbnRleHRNZW51Q29udHJvbGxlci4K
KyAgICAgICAgKiBXZWJWaWV3LmNwcDoKKyAgICAgICAgKFdlYlZpZXc6OmhhbmRsZUNvbnRleHRN
ZW51RXZlbnQpOiBEaXR0by4KKwogMjAxMC0xMi0wNyAgSmVzc2llIEJlcmxpbiAgPGpiZXJsaW5A
YXBwbGUuY29tPgogCiAgICAgICAgIEJ1aWxkIGZpeC4gVW5yZXZpZXdlZC4KSW5kZXg6IFdlYktp
dC93aW4vV2ViVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAko
cmV2aXNpb24gNzM0NjkpCisrKyBXZWJLaXQvd2luL1dlYlZpZXcuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMjQ1LDEyICsxMjQ1LDE0IEBAIGJvb2wgV2ViVmlldzo6aGFuZGxlQ29udGV4dE1lbnVF
dmVudChXUEEKICAgICBpZiAoIWhhbmRsZWRFdmVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CisgICAgQ29udGV4dE1lbnVDb250cm9sbGVyKiBjb250ZXh0TWVudUNvbnRyb2xsZXIgPSBtX3Bh
Z2UtPmNvbnRleHRNZW51Q29udHJvbGxlcigpOworCiAgICAgLy8gU2hvdyB0aGUgbWVudQotICAg
IENvbnRleHRNZW51KiBjb3JlTWVudSA9IG1fcGFnZS0+Y29udGV4dE1lbnVDb250cm9sbGVyKCkt
PmNvbnRleHRNZW51KCk7CisgICAgQ29udGV4dE1lbnUqIGNvcmVNZW51ID0gY29udGV4dE1lbnVD
b250cm9sbGVyLT5jb250ZXh0TWVudSgpOwogICAgIGlmICghY29yZU1lbnUpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIE5vZGUqIG5vZGUgPSBjb3JlTWVudS0+aGl0VGVzdFJlc3VsdCgp
LmlubmVyTm9uU2hhcmVkTm9kZSgpOworICAgIE5vZGUqIG5vZGUgPSBjb250ZXh0TWVudUNvbnRy
b2xsZXItPmhpdFRlc3RSZXN1bHQoKS5pbm5lck5vblNoYXJlZE5vZGUoKTsKICAgICBpZiAoIW5v
ZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMTI2Miw3ICsxMjY0LDcgQEAgYm9vbCBX
ZWJWaWV3OjpoYW5kbGVDb250ZXh0TWVudUV2ZW50KFdQQQogICAgIGlmICghdmlldykKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUE9JTlQgcG9pbnQodmlldy0+Y29udGVudHNUb1dpbmRv
dyhjb3JlTWVudS0+aGl0VGVzdFJlc3VsdCgpLnBvaW50KCkpKTsKKyAgICBQT0lOVCBwb2ludCh2
aWV3LT5jb250ZW50c1RvV2luZG93KGNvbnRleHRNZW51Q29udHJvbGxlci0+aGl0VGVzdFJlc3Vs
dCgpLnBvaW50KCkpKTsKIAogICAgIC8vIFRyYW5zbGF0ZSB0aGUgcG9pbnQgdG8gc2NyZWVuIGNv
b3JkaW5hdGVzCiAgICAgaWYgKCE6OkNsaWVudFRvU2NyZWVuKG1fdmlld1dpbmRvdywgJnBvaW50
KSkKSW5kZXg6IFdlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ29udGV4dE1lbnVDbGllbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ29udGV4dE1l
bnVDbGllbnQuY3BwCShyZXZpc2lvbiA3MzQ2OSkKKysrIFdlYktpdC93aW4vV2ViQ29yZVN1cHBv
cnQvV2ViQ29udGV4dE1lbnVDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3
IEBACiAjaW5jbHVkZSAiV2ViVmlldy5oIgogCiAjaW5jbHVkZSA8V2ViQ29yZS9Db250ZXh0TWVu
dS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvQ29udGV4dE1lbnVDb250cm9sbGVyLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9FdmVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL0ZyYW1lTG9hZGVyLmg+CkBAIC02NCw3ICs2NSw3IEBAIEhNRU5VIFdlYkNvbnRl
eHRNZW51Q2xpZW50OjpnZXRDdXN0b21NZW4KIAogICAgIEhNRU5VIG5ld01lbnUgPSAwOwogICAg
IENPTVB0cjxXZWJFbGVtZW50UHJvcGVydHlCYWc+IHByb3BlcnR5QmFnOwotICAgIHByb3BlcnR5
QmFnLmFkb3B0UmVmKFdlYkVsZW1lbnRQcm9wZXJ0eUJhZzo6Y3JlYXRlSW5zdGFuY2UobWVudS0+
aGl0VGVzdFJlc3VsdCgpKSk7CisgICAgcHJvcGVydHlCYWcuYWRvcHRSZWYoV2ViRWxlbWVudFBy
b3BlcnR5QmFnOjpjcmVhdGVJbnN0YW5jZShtX3dlYlZpZXctPnBhZ2UoKS0+Y29udGV4dE1lbnVD
b250cm9sbGVyKCktPmhpdFRlc3RSZXN1bHQoKSkpOwogICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRv
IGRlY2lkZSB3aGV0aGVyIHRvIGRvIHRoZSBkZWZhdWx0IGJlZm9yZSBjYWxsaW5nIHRoaXMgZGVs
ZWdhdGUgbWV0aG9kCiAgICAgaWYgKEZBSUxFRCh1aURlbGVnYXRlLT5jb250ZXh0TWVudUl0ZW1z
Rm9yRWxlbWVudChtX3dlYlZpZXcsIHByb3BlcnR5QmFnLmdldCgpLCAoT0xFX0hBTkRMRSkoVUxP
Tkc2NCltZW51LT5wbGF0Zm9ybURlc2NyaXB0aW9uKCksIChPTEVfSEFORExFKikmbmV3TWVudSkp
KQogICAgICAgICByZXR1cm4gbWVudS0+cGxhdGZvcm1EZXNjcmlwdGlvbigpOwpAQCAtODIsNyAr
ODMsNyBAQCB2b2lkIFdlYkNvbnRleHRNZW51Q2xpZW50Ojpjb250ZXh0TWVudUl0CiAgICAgQVNT
RVJUKHVpRGVsZWdhdGUpOwogCiAgICAgQ09NUHRyPFdlYkVsZW1lbnRQcm9wZXJ0eUJhZz4gcHJv
cGVydHlCYWc7Ci0gICAgcHJvcGVydHlCYWcuYWRvcHRSZWYoV2ViRWxlbWVudFByb3BlcnR5QmFn
OjpjcmVhdGVJbnN0YW5jZShwYXJlbnRNZW51LT5oaXRUZXN0UmVzdWx0KCkpKTsKKyAgICBwcm9w
ZXJ0eUJhZy5hZG9wdFJlZihXZWJFbGVtZW50UHJvcGVydHlCYWc6OmNyZWF0ZUluc3RhbmNlKG1f
d2ViVmlldy0+cGFnZSgpLT5jb250ZXh0TWVudUNvbnRyb2xsZXIoKS0+aGl0VGVzdFJlc3VsdCgp
KSk7CiAgICAgICAgICAgICAKICAgICB1aURlbGVnYXRlLT5jb250ZXh0TWVudUl0ZW1TZWxlY3Rl
ZChtX3dlYlZpZXcsIGl0ZW0tPnJlbGVhc2VQbGF0Zm9ybURlc2NyaXB0aW9uKCksIHByb3BlcnR5
QmFnLmdldCgpKTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75879</attachid>
            <date>2010-12-08 00:07:20 -0800</date>
            <delta_ts>2010-12-08 10:14:23 -0800</delta_ts>
            <desc>[PATCH] Fix</desc>
            <filename>context_menu_layering_violation_fix.patch</filename>
            <type>text/plain</type>
            <size>128669</size>
            <attacher name="Brian Weinstein">bweinstein</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MzQ2OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODMgQEAKKzIwMTAtMTItMDcgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5A
YXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIExheWVyaW5nIFZpb2xhdGlvbiBpbiBDb250ZXh0TWVudSAtIG1lbWJlciB2YXJpYWJsZSBv
ZiB0eXBlIEhpdFRlc3RSZXN1bHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTUwNTg2CisgICAgICAgIAorICAgICAgICBDb250ZXh0TWVudSBoYWQgYSBs
YXllcmluZyB2aW9sYXRpb24gYnkgaGF2aW5nIGEgbWVtYmVyIHZhcmlhYmxlIG9mIHR5cGUgSGl0
VGVzdFJlc3VsdCwgYmVjYXVzZQorICAgICAgICBjbGFzc2VzIGluIFdlYkNvcmUvcGxhdGZvcm0g
Y2FuJ3Qga25vdyBhYm91dCBjbGFzc2VzIGluIFdlYkNvcmUuCisgICAgICAgIAorICAgICAgICBU
aGlzIHBhdGNoIG1vdmVzIHRoZSBIaXRUZXN0UmVzdWx0IGFuZCBhbGwgZnVuY3Rpb25zIHRoYXQg
dXNlIGl0IG91dCBvZiBDb250ZXh0TWVudSBpbnRvIENvbnRleHRNZW51Q29udHJvbGxlci4KKyAg
ICAgICAgQWxsIG9mIHRoZSBmdW5jdGlvbnMgdGhhdCBkZWFsdCB3aXRoIHBvcHVsYXRpbmcgdGhl
IENvbnRleHRNZW51IGFyZSBub3cgaW4gQ29udGV4dE1lbnVDb250cm9sbGVyLCBhbmQgdGhpcwor
ICAgICAgICBhbGxvd2VkIHVzIHRvIGRlbGV0ZSB0aGUgQ29udGV4dE1lbnUgZmlsZSwgcHV0dGlu
ZyBhbGwgb2YgdGhlIGNyb3NzLXBsYXRmb3JtIGNvZGUgdGhhdCB1c2VkIHRvIGJlIGl0CisgICAg
ICAgIGluIENvbnRleHRNZW51Q29udHJvbGxlciwgYW5kIHRoZSByZXN0IG9mIHRoZSBjb2RlIGlz
IGluIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBmaWxlcy4KKworICAgICAgICBObyBjaGFuZ2UgaW4g
YmVoYXZpb3IsIG5vIG5ldyB0ZXN0cy4KKworICAgICAgICAqIEFuZHJvaWQubWs6IFJlbW92ZWQg
Q29udGV4dE1lbnUuY3BwLgorICAgICAgICAqIENNYWtlTGlzdHMudHh0OiBEaXR0by4KKyAgICAg
ICAgKiBHTlVtYWtlZmlsZS5hbTogRGl0dG8uCisgICAgICAgICogV2ViQ29yZS5neXBpOiBEaXR0
by4KKyAgICAgICAgKiBXZWJDb3JlLnBybzogRGl0dG8uCisgICAgICAgICogV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2o6IERpdHRvLgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajogRGl0dG8uCisKKyAgICAgICAgKiBwYWdlL0NvbnRleHRNZW51Q29udHJv
bGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0TWVudUNvbnRyb2xsZXI6OkNvbnRl
eHRNZW51Q29udHJvbGxlcik6IEluaXRpYWxpemVkIG1faGl0VGVzdFJlc3VsdCB0byBhbiBlbXB0
eSBIaXRUZXN0UmVzdWx0LgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVDb250cm9sbGVy
OjpoYW5kbGVDb250ZXh0TWVudUV2ZW50KTogQ2FsbCBwb3B1bGF0ZSBvbiB0aGUgQ29udGV4dE1l
bnVDb250cm9sbGVyIGluc3RlYWQKKyAgICAgICAgICAgIG9mIHRoZSBDb250ZXh0TWVudS4KKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51Q29udHJvbGxlcjo6Y3JlYXRlQ29udGV4dE1lbnUp
OiBGaXggc29tZSBpbmRpbmF0aW9uLCBhbmQgc3RvcmUgdGhlIEhpdFRlc3RSZXN1bHQgaW4gYSBt
ZW1iZXIKKyAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1l
bnVDb250cm9sbGVyOjpzaG93Q29udGV4dE1lbnUpOiBDYWxsIGFkZEluc3BlY3RFbGVtZW50SXRl
bSBvbiB0aGUgQ29udGV4dE1lbnVDb250cm9sbGVyLgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4
dE1lbnVDb250cm9sbGVyOjpjb250ZXh0TWVudUl0ZW1TZWxlY3RlZCk6IFVzZSBtX2hpdFRlc3RS
ZXN1bHQgd2hlbmV2ZXIgd2UgbmVlZCBhIEhpdFRlc3RSZXN1bHQuCisgICAgICAgIChXZWJDb3Jl
OjpDb250ZXh0TWVudUNvbnRyb2xsZXI6OmFwcGVuZEl0ZW0pOiBWYWxpZGF0ZXMgdGhlIGl0ZW0g
Zm9yIGl0cyBzdGF0ZSwgYW5kIHRoZW4gYXBwZW5kcyBpdCB0byB0aGUgcGFyZW50IG1lbnUuCisg
ICAgICAgICAgICBUaGlzIGFsbG93ZWQgdXMgdG8gbW92ZSBjaGVja09yRW5hYmxlSWZOZWVkZWQg
ZnJvbSBDb250ZXh0TWVudS4KKworICAgICAgICBUaGVzZSBmdW5jdGlvbnMgd2VyZSBhbGwgbW92
ZWQgZnJvbSBDb250ZXh0TWVudSwgYW5kIGNoYW5nZWQgc2xpZ2h0bHkgdG8gZml0IGluIENvbnRl
eHRNZW51Q29udHJvbGxlci4KKyAgICAgICAgQWxsIGNhbGxzIHRvIENvbnRleHRNZW51OjphcHBl
bmRJdGVtIHdlcmUgY2hhbmdlZCB0byBDb250ZXh0TWVudUNvbnRyb2xsZXI6OmFwcGVuZEl0ZW0s
IHdoaWNoIHRha2VzIGNhcmUKKyAgICAgICAgb2YgdmFsaWRhdGluZyB0aGUgbWVudS4KKyAgICAg
ICAgKFdlYkNvcmU6OnNlcGFyYXRvckl0ZW0pOiBNb3ZlZCBmcm9tIENvbnRleHRNZW51LgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVDb250cm9sbGVyOjpjcmVhdGVBbmRBcHBlbmRGb250
U3ViTWVudSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVDb250cm9sbGVy
OjpjcmVhdGVBbmRBcHBlbmRTcGVsbGluZ0FuZEdyYW1tYXJTdWJNZW51KTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNyZWF0ZUFuZEFwcGVuZFNwZWVj
aFN1Yk1lbnUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51Q29udHJvbGxl
cjo6Y3JlYXRlQW5kQXBwZW5kV3JpdGluZ0RpcmVjdGlvblN1Yk1lbnUpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRleHRNZW51Q29udHJvbGxlcjo6Y3JlYXRlQW5kQXBwZW5kVGV4dERp
cmVjdGlvblN1Yk1lbnUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51Q29u
dHJvbGxlcjo6Y3JlYXRlQW5kQXBwZW5kU3Vic3RpdHV0aW9uc1N1Yk1lbnUpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51Q29udHJvbGxlcjo6Y3JlYXRlQW5kQXBwZW5kVHJh
bnNmb3JtYXRpb25zU3ViTWVudSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6c2VsZWN0aW9u
Q29udGFpbnNQb3NzaWJsZVdvcmQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRN
ZW51Q29udHJvbGxlcjo6cG9wdWxhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
eHRNZW51Q29udHJvbGxlcjo6YWRkSW5zcGVjdEVsZW1lbnRJdGVtKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNoZWNrT3JFbmFibGVJZk5lZWRlZCk6
IERpdHRvLgorICAgICAgICAKKyAgICAgICAgKiBwYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5o
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVDb250cm9sbGVyOjpoaXRUZXN0UmVzdWx0
KTogUmV0dXJucyB0aGUgSGl0VGVzdFJlc3VsdCBvZiB0aGUgY3VycmVudCBDb250ZXh0TWVudS4K
KworICAgICAgICAqIHBsYXRmb3JtL0NvbnRleHRNZW51LmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9Db250ZXh0TWVudS5oOgorICAgICAgICAqIHBsYXRmb3JtL2VmbC9Db250ZXh0
TWVudUVmbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0TWVudTo6Q29udGV4dE1lbnUp
OiBSZW1vdmVkIG1faGl0VGVzdFJlc3VsdCBmcm9tIHRoZSBjb25zdHJ1Y3Rvci4KKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRleHRNZW51OjphcHBlbmRJdGVtKTogUmVtb3ZlZCB0aGUgY2FsbCB0byBj
aGVja09yRW5hYmxlSWZOZWVkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3RrL0NvbnRleHRNZW51
R3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51OjpDb250ZXh0TWVudSk6IFJl
bW92ZWQgbV9oaXRUZXN0UmVzdWx0IGZyb20gdGhlIGNvbnN0cnVjdG9yLgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGV4dE1lbnU6OmFwcGVuZEl0ZW0pOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9y
bS9oYWlrdS9Db250ZXh0TWVudUhhaWt1LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRN
ZW51OjpDb250ZXh0TWVudSk6IFJlbW92ZWQgbV9oaXRUZXN0UmVzdWx0IGZyb20gdGhlIGNvbnN0
cnVjdG9yLgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnU6OmFwcGVuZEl0ZW0pOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51OjppbnNlcnRJdGVtKTogRGl0dG8uCisg
ICAgICAgICogcGxhdGZvcm0vbWFjL0NvbnRleHRNZW51TWFjLm1tOgorICAgICAgICAoLVtXZWJD
b3JlTWVudVRhcmdldCB2YWxpZGF0ZU1lbnVJdGVtOl0pOiBDYWxscyBjaGVja09yRW5hYmxlSWZO
ZWVkZWQgb24gdGhlIGNvbnRyb2xsZXIgaW5zdGVhZCBvZgorICAgICAgICAgICAgdGhlIGNvbnRl
eHQgbWVudS4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51OjpDb250ZXh0TWVudSk6IFJl
bW92ZWQgbV9oaXRUZXN0UmVzdWx0IGZyb20gdGhlIGNvbnN0cnVjdG9yLgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGV4dE1lbnU6OmFwcGVuZEl0ZW0pOiBSZW1vdmVkIHRoZSBjYWxsIHRvIGNoZWNr
T3JFbmFibGVJZk5lZWRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51OjppbnNlcnRJ
dGVtKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vd2luL0NvbnRleHRNZW51V2luLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51OjpDb250ZXh0TWVudSk6IFJlbW92ZWQgbV9o
aXRUZXN0UmVzdWx0IGZyb20gdGhlIGNvbnN0cnVjdG9yLgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGV4dE1lbnU6Omluc2VydEl0ZW0pOiBSZW1vdmVkIHRoZSBjYWxsIHRvIGNoZWNrT3JFbmFibGVJ
Zk5lZWRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS93eC9Db250ZXh0TWVudVd4LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRleHRNZW51OjpDb250ZXh0TWVudSk6IFJlbW92ZWQgbV9oaXRUZXN0
UmVzdWx0IGZyb20gdGhlIGNvbnN0cnVjdG9yLgorICAgICAgICAoQ29udGV4dE1lbnU6OmFwcGVu
ZEl0ZW0pOiBEaXR0by4KKwogMjAxMC0xMi0wNyAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVp
bkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSm9obiBTdWxsaXZhbi4KSW5kZXg6
IFdlYkNvcmUvQW5kcm9pZC5tawo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0FuZHJvaWQubWsJKHJl
dmlzaW9uIDczNDY5KQorKysgV2ViQ29yZS9BbmRyb2lkLm1rCSh3b3JraW5nIGNvcHkpCkBAIC00
NTAsNyArNDUwLDYgQEAgTE9DQUxfU1JDX0ZJTEVTIDo9ICQoTE9DQUxfU1JDX0ZJTEVTKSBcCiAJ
XAogCXBsYXRmb3JtL0FyZW5hLmNwcCBcCiAJcGxhdGZvcm0vQ29udGVudFR5cGUuY3BwIFwKLQlw
bGF0Zm9ybS9Db250ZXh0TWVudS5jcHAgXAogCXBsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmNw
cCBcCiAJcGxhdGZvcm0vRGVwcmVjYXRlZFB0ckxpc3RJbXBsLmNwcCBcCiAJcGxhdGZvcm0vRHJh
Z0RhdGEuY3BwIFwKSW5kZXg6IFdlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gNzM0NjkpCisrKyBXZWJDb3JlL0NNYWtl
TGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMjcwLDcgKzEyNzAsNiBAQCBTRVQoV2ViQ29y
ZV9TT1VSQ0VTCiAKICAgICBwbGF0Zm9ybS9BcmVuYS5jcHAKICAgICBwbGF0Zm9ybS9Db250ZW50
VHlwZS5jcHAKLSAgICBwbGF0Zm9ybS9Db250ZXh0TWVudS5jcHAKICAgICBwbGF0Zm9ybS9Dcm9z
c1RocmVhZENvcGllci5jcHAKICAgICBwbGF0Zm9ybS9EZXByZWNhdGVkUHRyTGlzdEltcGwuY3Bw
CiAgICAgcGxhdGZvcm0vRHJhZ0RhdGEuY3BwCkluZGV4OiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFt
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDczNDY5KQor
KysgV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMjI1OCw3ICsyMjU4
LDYgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3BsYXRmb3JtL0F1dG9kcmFpbmVk
UG9vbC5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL0NvbnRlbnRUeXBlLmNwcCBcCiAJV2ViQ29yZS9w
bGF0Zm9ybS9Db250ZW50VHlwZS5oIFwKLQlXZWJDb3JlL3BsYXRmb3JtL0NvbnRleHRNZW51LmNw
cCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9Db250ZXh0TWVudS5oIFwKIAlXZWJDb3JlL3BsYXRmb3Jt
L0NvbnRleHRNZW51SXRlbS5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL0Nvb2tpZS5oIFwKSW5kZXg6
IFdlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmV4
cC5pbgkocmV2aXNpb24gNzM0NjkpCisrKyBXZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjUyLDEyICsxMjUyLDEyIEBAIF9fWk43V2ViQ29yZTE1Q29udGV4dE1lbnVJ
dGVtQzFFTlNfMTlDb24KIF9fWk43V2ViQ29yZTE1Q29udGV4dE1lbnVJdGVtQzFFUDEwTlNNZW51
SXRlbQogX19aTjdXZWJDb3JlMTVDb250ZXh0TWVudUl0ZW1EMUV2CiBfX1pON1dlYkNvcmUyMUNv
bnRleHRNZW51Q29udHJvbGxlcjE2Y2xlYXJDb250ZXh0TWVudUV2CitfX1pOSzdXZWJDb3JlMjFD
b250ZXh0TWVudUNvbnRyb2xsZXIyMWNoZWNrT3JFbmFibGVJZk5lZWRlZEVSTlNfMTVDb250ZXh0
TWVudUl0ZW1FCiBfX1pON1dlYkNvcmUyMUNvbnRleHRNZW51Q29udHJvbGxlcjIzY29udGV4dE1l
bnVJdGVtU2VsZWN0ZWRFUE5TXzE1Q29udGV4dE1lbnVJdGVtRQogX19aTjdXZWJDb3JlMjFjb250
ZXh0TWVudUl0ZW1WZWN0b3JFUDE0TlNNdXRhYmxlQXJyYXkKIF9fWk43V2ViQ29yZTIzcGxhdGZv
cm1NZW51RGVzY3JpcHRpb25FUk4zV1RGNlZlY3RvcklOU18xNUNvbnRleHRNZW51SXRlbUVMbTBF
RUUKIF9fWk43V2ViQ29yZTZDaHJvbWUxNXNob3dDb250ZXh0TWVudUV2CiBfX1pOSzdXZWJDb3Jl
MTFDb250ZXh0TWVudTE5cGxhdGZvcm1EZXNjcmlwdGlvbkV2Ci1fX1pOSzdXZWJDb3JlMTFDb250
ZXh0TWVudTIxY2hlY2tPckVuYWJsZUlmTmVlZGVkRVJOU18xNUNvbnRleHRNZW51SXRlbUUKIF9f
Wk5LN1dlYkNvcmUxNUNvbnRleHRNZW51SXRlbTE1cGxhdGZvcm1TdWJNZW51RXYKIF9fWk5LN1dl
YkNvcmUxNUNvbnRleHRNZW51SXRlbTR0eXBlRXYKIF9fWk5LN1dlYkNvcmUxNUNvbnRleHRNZW51
SXRlbTV0aXRsZUV2CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gNzM0NjkpCisrKyBXZWJDb3JlL1dlYkNvcmUu
Z3lwaQkod29ya2luZyBjb3B5KQpAQCAtMzQyMSw3ICszNDIxLDYgQEAKICAgICAgICAgICAgICdw
bGF0Zm9ybS9BdXRvZHJhaW5lZFBvb2wuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vQ29udGVu
dFR5cGUuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9Db250ZW50VHlwZS5oJywKLSAgICAg
ICAgICAgICdwbGF0Zm9ybS9Db250ZXh0TWVudS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L0NvbnRleHRNZW51LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL0NvbnRleHRNZW51SXRlbS5o
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9Db29raWUuaCcsCkluZGV4OiBXZWJDb3JlL1dlYkNv
cmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDczNDY5
KQorKysgV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtMTE1MSw3ICsxMTUx
LDYgQEAgU09VUkNFUyArPSBcCiAgICAgcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5jcHAgXAog
ICAgIHBsYXRmb3JtL3RleHQvSHlwaGVuYXRpb24uY3BwIFwKICAgICBwbGF0Zm9ybS9Db250ZW50
VHlwZS5jcHAgXAotICAgIHBsYXRmb3JtL0NvbnRleHRNZW51LmNwcCBcCiAgICAgcGxhdGZvcm0v
Q3Jvc3NUaHJlYWRDb3BpZXIuY3BwIFwKICAgICBwbGF0Zm9ybS9EZXByZWNhdGVkUHRyTGlzdElt
cGwuY3BwIFwKICAgICBwbGF0Zm9ybS9EcmFnRGF0YS5jcHAgXApJbmRleDogV2ViQ29yZS9XZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA3MzQ2OSkKKysrIFdlYkNvcmUvV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTI1MzE0LDEwICsyNTMx
NCw2IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XHBsYXRmb3JtXENvbnRleHRNZW51LmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQog
CQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cQ29udGV4dE1lbnUuaCIKIAkJCQk+CiAJCQk8
L0ZpbGU+CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
cmV2aXNpb24gNzM0NjkpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjgzOSw3ICsyODM5LDYgQEAKIAkJOTNCMkQ4MTYwRjk5
MjBEMjAwNkFFNkIyIC8qIFN1ZGRlblRlcm1pbmF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0IyRDgxNTBGOTkyMEQyMDA2QUU2QjIgLyogU3Vk
ZGVuVGVybWluYXRpb24uaCAqLzsgfTsKIAkJOTNCMkQ4MTgwRjk5MjBFRTAwNkFFNkIyIC8qIFN1
ZGRlblRlcm1pbmF0aW9uLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTNCMkQ4MTcwRjk5MjBFRTAwNkFFNkIyIC8qIFN1ZGRlblRlcm1pbmF0aW9uLm1t
ICovOyB9OwogCQk5M0I2QTBFNjBCMEJDQTVDMDBGNTAyN0EgLyogQ29udGV4dE1lbnUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQjZBMEU1MEIwQkNB
NUMwMEY1MDI3QSAvKiBDb250ZXh0TWVudS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07Ci0JCTkzQjZBMEU4MEIwQkNBNjcwMEY1MDI3QSAvKiBDb250ZXh0
TWVudS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
M0I2QTBFNzBCMEJDQTY3MDBGNTAyN0EgLyogQ29udGV4dE1lbnUuY3BwICovOyB9OwogCQk5M0I2
QTBFQTBCMEJDQTg0MDBGNTAyN0EgLyogQ29udGV4dE1lbnVNYWMubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0I2QTBFOTBCMEJDQTg0MDBGNTAyN0Eg
LyogQ29udGV4dE1lbnVNYWMubW0gKi87IH07CiAJCTkzQjcwRDYzMDlFQjBDN0MwMDlEODQ2OCAv
KiBKU0RPTUJpbmRpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTNCNzBENDcwOUVCMEM3QzAwOUQ4NDY4IC8qIEpTRE9NQmluZGluZy5jcHAgKi87
IH07CiAJCTkzQjcwRDY0MDlFQjBDN0MwMDlEODQ2OCAvKiBKU0RPTUJpbmRpbmcuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQjcwRDQ4MDlFQjBDN0Mw
MDlEODQ2OCAvKiBKU0RPTUJpbmRpbmcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwpAQCAtOTAwNyw3ICs5MDA2LDYgQEAKIAkJOTNCMkQ4MTUwRjk5MjBE
MjAwNkFFNkIyIC8qIFN1ZGRlblRlcm1pbmF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFN1ZGRlblRlcm1pbmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTkzQjJEODE3MEY5OTIwRUUwMDZBRTZCMiAvKiBTdWRkZW5UZXJtaW5hdGlvbi5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFN1ZGRlblRlcm1pbmF0aW9uLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0I2QTBFNTBCMEJDQTVDMDBGNTAyN0Eg
LyogQ29udGV4dE1lbnUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnRl
eHRNZW51Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTkzQjZBMEU3MEIwQkNBNjcw
MEY1MDI3QSAvKiBDb250ZXh0TWVudS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gQ29udGV4dE1lbnUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5
M0I2QTBFOTBCMEJDQTg0MDBGNTAyN0EgLyogQ29udGV4dE1lbnVNYWMubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQ29udGV4dE1lbnVNYWMubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzQjcwRDQ3MDlFQjBDN0MwMDlEODQ2OCAvKiBKU0RPTUJp
bmRpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRE9NQmlu
ZGluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzQjcwRDQ4MDlFQjBDN0Mw
MDlEODQ2OCAvKiBKU0RPTUJpbmRpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTRE9NQmluZGluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTc1NzQs
NyArMTc1NzIsNiBAQAogCQkJCUJDQzhDRkNBMDk4NkNEMjQwMDE0MEJGMiAvKiBDb2xvckRhdGEu
Z3BlcmYgKi8sCiAJCQkJNDFEMDE1QzkwRjRCNUM3MTAwNEE2NjJGIC8qIENvbnRlbnRUeXBlLmNw
cCAqLywKIAkJCQk0MUQwMTVDODBGNEI1QzcxMDA0QTY2MkYgLyogQ29udGVudFR5cGUuaCAqLywK
LQkJCQk5M0I2QTBFNzBCMEJDQTY3MDBGNTAyN0EgLyogQ29udGV4dE1lbnUuY3BwICovLAogCQkJ
CTkzQjZBMEU1MEIwQkNBNUMwMEY1MDI3QSAvKiBDb250ZXh0TWVudS5oICovLAogCQkJCTA2MDI3
Q0FDMEIxQ0JGQzAwMDg4NEIyRCAvKiBDb250ZXh0TWVudUl0ZW0uaCAqLywKIAkJCQlEOEI2MTUy
RTEwMzI0OTUxMDBDODU1NEEgLyogQ29va2llLmggKi8sCkBAIC0yMTk1Niw3ICsyMTk1Myw2IEBA
CiAJCQkJQTgxODcyMUYwOTc3RDNDMDAwNTgyNkQ5IC8qIENvbnRhaW5lck5vZGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQkM1RUI5ODAwRTgyMDcyNTAwQjI1OTY1IC8qIENvbnRlbnREYXRhLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTQxRDAxNUNCMEY0QjVDNzEwMDRBNjYyRiAvKiBDb250ZW50
VHlwZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk5M0I2QTBFODBCMEJDQTY3MDBGNTAyN0EgLyog
Q29udGV4dE1lbnUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDY1QUQ0RjYwQjBDMkVEQTAwNUEy
QjFEIC8qIENvbnRleHRNZW51Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwNjAy
N0NCMzBCMUNDMDNEMDA4ODRCMkQgLyogQ29udGV4dE1lbnVJdGVtTWFjLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJOTNCNkEwRUEwQjBCQ0E4NDAwRjUwMjdBIC8qIENvbnRleHRNZW51TWFjLm1tIGlu
IFNvdXJjZXMgKi8sCkluZGV4OiBXZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcAko
cmV2aXNpb24gNzM0NjkpCisrKyBXZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkNocm9tZS5oIgog
I2luY2x1ZGUgIkNvbnRleHRNZW51LmgiCiAjaW5jbHVkZSAiQ29udGV4dE1lbnVDbGllbnQuaCIK
KyNpbmNsdWRlICJDb250ZXh0TWVudUl0ZW0uaCIKICNpbmNsdWRlICJDb250ZXh0TWVudVByb3Zp
ZGVyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50
LmgiCkBAIC01MCw2ICs1MSw3IEBACiAjaW5jbHVkZSAiSGl0VGVzdFJlcXVlc3QuaCIKICNpbmNs
dWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgor
I2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKICNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCiAj
aW5jbHVkZSAiTmF2aWdhdGlvbkFjdGlvbi5oIgogI2luY2x1ZGUgIk5vZGUuaCIKQEAgLTYzLDYg
KzY1LDEwIEBACiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiV2luZG93RmVh
dHVyZXMuaCIKICNpbmNsdWRlICJtYXJrdXAuaCIKKyNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmlj
b2RlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXVEY7Cit1c2luZyBuYW1lc3BhY2UgVW5pY29kZTsK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC05MCwxMCArOTYsMTIgQEAgdm9pZCBDb250ZXh0
TWVudUNvbnRyb2xsZXI6OmNsZWFyQ29udGV4dAogCiB2b2lkIENvbnRleHRNZW51Q29udHJvbGxl
cjo6aGFuZGxlQ29udGV4dE1lbnVFdmVudChFdmVudCogZXZlbnQpCiB7Ci0gICAgbV9jb250ZXh0
TWVudS5zZXQoY3JlYXRlQ29udGV4dE1lbnUoZXZlbnQpKTsKKyAgICBtX2NvbnRleHRNZW51ID0g
Y3JlYXRlQ29udGV4dE1lbnUoZXZlbnQpOwogICAgIGlmICghbV9jb250ZXh0TWVudSkKICAgICAg
ICAgcmV0dXJuOwotICAgIG1fY29udGV4dE1lbnUtPnBvcHVsYXRlKCk7CisKKyAgICBwb3B1bGF0
ZSgpOworCiAgICAgc2hvd0NvbnRleHRNZW51KGV2ZW50KTsKIH0KIApAQCAtMTAxLDcgKzEwOSw3
IEBAIHZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjpzaG93Q29udGV4dE0KIHsKICAgICBtX21l
bnVQcm92aWRlciA9IG1lbnVQcm92aWRlcjsKIAotICAgIG1fY29udGV4dE1lbnUuc2V0KGNyZWF0
ZUNvbnRleHRNZW51KGV2ZW50KSk7CisgICAgbV9jb250ZXh0TWVudSA9IGNyZWF0ZUNvbnRleHRN
ZW51KGV2ZW50KTsKICAgICBpZiAoIW1fY29udGV4dE1lbnUpIHsKICAgICAgICAgY2xlYXJDb250
ZXh0TWVudSgpOwogICAgICAgICByZXR1cm47CkBAIC0xMTEsMTAgKzExOSwxMSBAQCB2b2lkIENv
bnRleHRNZW51Q29udHJvbGxlcjo6c2hvd0NvbnRleHRNCiAgICAgc2hvd0NvbnRleHRNZW51KGV2
ZW50KTsKIH0KIAotQ29udGV4dE1lbnUqIENvbnRleHRNZW51Q29udHJvbGxlcjo6Y3JlYXRlQ29u
dGV4dE1lbnUoRXZlbnQqIGV2ZW50KQorUGFzc093blB0cjxDb250ZXh0TWVudT4gQ29udGV4dE1l
bnVDb250cm9sbGVyOjpjcmVhdGVDb250ZXh0TWVudShFdmVudCogZXZlbnQpCiB7Ci0gICBpZiAo
IWV2ZW50LT5pc01vdXNlRXZlbnQoKSkKKyAgICBpZiAoIWV2ZW50LT5pc01vdXNlRXZlbnQoKSkK
ICAgICAgICAgcmV0dXJuIDA7CisKICAgICBNb3VzZUV2ZW50KiBtb3VzZUV2ZW50ID0gc3RhdGlj
X2Nhc3Q8TW91c2VFdmVudCo+KGV2ZW50KTsKICAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdChtb3Vz
ZUV2ZW50LT5hYnNvbHV0ZUxvY2F0aW9uKCkpOwogCkBAIC0xMjMsMTQgKzEzMiwxNyBAQCBDb250
ZXh0TWVudSogQ29udGV4dE1lbnVDb250cm9sbGVyOjpjcmVhCiAKICAgICBpZiAoIXJlc3VsdC5p
bm5lck5vblNoYXJlZE5vZGUoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIG5ldyBD
b250ZXh0TWVudShyZXN1bHQpOworCisgICAgbV9oaXRUZXN0UmVzdWx0ID0gcmVzdWx0OworCisg
ICAgcmV0dXJuIG5ldyBDb250ZXh0TWVudTsKIH0KIAogdm9pZCBDb250ZXh0TWVudUNvbnRyb2xs
ZXI6OnNob3dDb250ZXh0TWVudShFdmVudCogZXZlbnQpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RP
UikKICAgICBpZiAobV9wYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmVuYWJsZWQoKSkKLSAg
ICAgICAgbV9jb250ZXh0TWVudS0+YWRkSW5zcGVjdEVsZW1lbnRJdGVtKCk7CisgICAgICAgIGFk
ZEluc3BlY3RFbGVtZW50SXRlbSgpOwogI2VuZGlmCiAgICAgUGxhdGZvcm1NZW51RGVzY3JpcHRp
b24gY3VzdG9tTWVudSA9IG1fY2xpZW50LT5nZXRDdXN0b21NZW51RnJvbURlZmF1bHRJdGVtcyht
X2NvbnRleHRNZW51LmdldCgpKTsKICAgICBtX2NvbnRleHRNZW51LT5zZXRQbGF0Zm9ybURlc2Ny
aXB0aW9uKGN1c3RvbU1lbnUpOwpAQCAtMTYyLDU0ICsxNzQsNTMgQEAgdm9pZCBDb250ZXh0TWVu
dUNvbnRyb2xsZXI6OmNvbnRleHRNZW51SQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
SGl0VGVzdFJlc3VsdCByZXN1bHQgPSBtX2NvbnRleHRNZW51LT5oaXRUZXN0UmVzdWx0KCk7Ci0g
ICAgRnJhbWUqIGZyYW1lID0gcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpLT5kb2N1bWVudCgp
LT5mcmFtZSgpOworICAgIEZyYW1lKiBmcmFtZSA9IG1faGl0VGVzdFJlc3VsdC5pbm5lck5vblNo
YXJlZE5vZGUoKS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAg
ICByZXR1cm47CiAKICAgICBzd2l0Y2ggKGl0ZW0tPmFjdGlvbigpKSB7CiAgICAgY2FzZSBDb250
ZXh0TWVudUl0ZW1UYWdPcGVuTGlua0luTmV3V2luZG93OgotICAgICAgICBvcGVuTmV3V2luZG93
KHJlc3VsdC5hYnNvbHV0ZUxpbmtVUkwoKSwgZnJhbWUpOworICAgICAgICBvcGVuTmV3V2luZG93
KG1faGl0VGVzdFJlc3VsdC5hYnNvbHV0ZUxpbmtVUkwoKSwgZnJhbWUpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0Rvd25sb2FkTGlua1RvRGlzazoKICAgICAg
ICAgLy8gRklYTUU6IFNvbWUgZGF5IHdlIHNob3VsZCBiZSBhYmxlIHRvIGRvIHRoaXMgZnJvbSB3
aXRoaW4gV2ViQ29yZS4KLSAgICAgICAgbV9jbGllbnQtPmRvd25sb2FkVVJMKHJlc3VsdC5hYnNv
bHV0ZUxpbmtVUkwoKSk7CisgICAgICAgIG1fY2xpZW50LT5kb3dubG9hZFVSTChtX2hpdFRlc3RS
ZXN1bHQuYWJzb2x1dGVMaW5rVVJMKCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENvbnRl
eHRNZW51SXRlbVRhZ0NvcHlMaW5rVG9DbGlwYm9hcmQ6Ci0gICAgICAgIGZyYW1lLT5lZGl0b3Io
KS0+Y29weVVSTChyZXN1bHQuYWJzb2x1dGVMaW5rVVJMKCksIHJlc3VsdC50ZXh0Q29udGVudCgp
KTsKKyAgICAgICAgZnJhbWUtPmVkaXRvcigpLT5jb3B5VVJMKG1faGl0VGVzdFJlc3VsdC5hYnNv
bHV0ZUxpbmtVUkwoKSwgbV9oaXRUZXN0UmVzdWx0LnRleHRDb250ZW50KCkpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5JbWFnZUluTmV3V2luZG93Ogot
ICAgICAgICBvcGVuTmV3V2luZG93KHJlc3VsdC5hYnNvbHV0ZUltYWdlVVJMKCksIGZyYW1lKTsK
KyAgICAgICAgb3Blbk5ld1dpbmRvdyhtX2hpdFRlc3RSZXN1bHQuYWJzb2x1dGVJbWFnZVVSTCgp
LCBmcmFtZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnRG93
bmxvYWRJbWFnZVRvRGlzazoKICAgICAgICAgLy8gRklYTUU6IFNvbWUgZGF5IHdlIHNob3VsZCBi
ZSBhYmxlIHRvIGRvIHRoaXMgZnJvbSB3aXRoaW4gV2ViQ29yZS4KLSAgICAgICAgbV9jbGllbnQt
PmRvd25sb2FkVVJMKHJlc3VsdC5hYnNvbHV0ZUltYWdlVVJMKCkpOworICAgICAgICBtX2NsaWVu
dC0+ZG93bmxvYWRVUkwobV9oaXRUZXN0UmVzdWx0LmFic29sdXRlSW1hZ2VVUkwoKSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQ29weUltYWdlVG9DbGlwYm9h
cmQ6CiAgICAgICAgIC8vIEZJWE1FOiBUaGUgUGFzdGVib2FyZCBjbGFzcyBpcyBub3Qgd3JpdHRl
biB5ZXQKICAgICAgICAgLy8gRm9yIG5vdywgY2FsbCBpbnRvIHRoZSBjbGllbnQuIFRoaXMgaXMg
dGVtcG9yYXJ5IQotICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPmNvcHlJbWFnZShyZXN1bHQpOwor
ICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPmNvcHlJbWFnZShtX2hpdFRlc3RSZXN1bHQpOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5NZWRpYUluTmV3V2lu
ZG93OgotICAgICAgICBvcGVuTmV3V2luZG93KHJlc3VsdC5hYnNvbHV0ZU1lZGlhVVJMKCksIGZy
YW1lKTsKKyAgICAgICAgb3Blbk5ld1dpbmRvdyhtX2hpdFRlc3RSZXN1bHQuYWJzb2x1dGVNZWRp
YVVSTCgpLCBmcmFtZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ29udGV4dE1lbnVJdGVt
VGFnQ29weU1lZGlhTGlua1RvQ2xpcGJvYXJkOgotICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPmNv
cHlVUkwocmVzdWx0LmFic29sdXRlTWVkaWFVUkwoKSwgcmVzdWx0LnRleHRDb250ZW50KCkpOwor
ICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPmNvcHlVUkwobV9oaXRUZXN0UmVzdWx0LmFic29sdXRl
TWVkaWFVUkwoKSwgbV9oaXRUZXN0UmVzdWx0LnRleHRDb250ZW50KCkpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1RvZ2dsZU1lZGlhQ29udHJvbHM6Ci0gICAg
ICAgIHJlc3VsdC50b2dnbGVNZWRpYUNvbnRyb2xzRGlzcGxheSgpOworICAgICAgICBtX2hpdFRl
c3RSZXN1bHQudG9nZ2xlTWVkaWFDb250cm9sc0Rpc3BsYXkoKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdUb2dnbGVNZWRpYUxvb3A6Ci0gICAgICAgIHJlc3Vs
dC50b2dnbGVNZWRpYUxvb3BQbGF5YmFjaygpOworICAgICAgICBtX2hpdFRlc3RSZXN1bHQudG9n
Z2xlTWVkaWFMb29wUGxheWJhY2soKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDb250ZXh0
TWVudUl0ZW1UYWdFbnRlclZpZGVvRnVsbHNjcmVlbjoKLSAgICAgICAgcmVzdWx0LmVudGVyRnVs
bHNjcmVlbkZvclZpZGVvKCk7CisgICAgICAgIG1faGl0VGVzdFJlc3VsdC5lbnRlckZ1bGxzY3Jl
ZW5Gb3JWaWRlbygpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRh
Z01lZGlhUGxheVBhdXNlOgotICAgICAgICByZXN1bHQudG9nZ2xlTWVkaWFQbGF5U3RhdGUoKTsK
KyAgICAgICAgbV9oaXRUZXN0UmVzdWx0LnRvZ2dsZU1lZGlhUGxheVN0YXRlKCk7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnTWVkaWFNdXRlOgotICAgICAgICBy
ZXN1bHQudG9nZ2xlTWVkaWFNdXRlU3RhdGUoKTsKKyAgICAgICAgbV9oaXRUZXN0UmVzdWx0LnRv
Z2dsZU1lZGlhTXV0ZVN0YXRlKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ29udGV4dE1l
bnVJdGVtVGFnT3BlbkZyYW1lSW5OZXdXaW5kb3c6IHsKICAgICAgICAgRG9jdW1lbnRMb2FkZXIq
IGxvYWRlciA9IGZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKTsKQEAgLTI3MywxMCAr
Mjg0LDEwIEBAIHZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjpjb250ZXh0TWVudUkKICAgICAg
ICAgbV9jbGllbnQtPmxvb2tVcEluRGljdGlvbmFyeShmcmFtZSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnT3Blbkxpbms6Ci0gICAgICAgIGlmIChGcmFtZSog
dGFyZ2V0RnJhbWUgPSByZXN1bHQudGFyZ2V0RnJhbWUoKSkKLSAgICAgICAgICAgIHRhcmdldEZy
YW1lLT5sb2FkZXIoKS0+bG9hZEZyYW1lUmVxdWVzdChGcmFtZUxvYWRSZXF1ZXN0KGZyYW1lLT5k
b2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLCBSZXNvdXJjZVJlcXVlc3QocmVzdWx0LmFic29s
dXRlTGlua1VSTCgpLCBmcmFtZS0+bG9hZGVyKCktPm91dGdvaW5nUmVmZXJyZXIoKSkpLCBmYWxz
ZSwgZmFsc2UsIDAsIDAsIFNlbmRSZWZlcnJlcik7CisgICAgICAgIGlmIChGcmFtZSogdGFyZ2V0
RnJhbWUgPSBtX2hpdFRlc3RSZXN1bHQudGFyZ2V0RnJhbWUoKSkKKyAgICAgICAgICAgIHRhcmdl
dEZyYW1lLT5sb2FkZXIoKS0+bG9hZEZyYW1lUmVxdWVzdChGcmFtZUxvYWRSZXF1ZXN0KGZyYW1l
LT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLCBSZXNvdXJjZVJlcXVlc3QobV9oaXRUZXN0
UmVzdWx0LmFic29sdXRlTGlua1VSTCgpLCBmcmFtZS0+bG9hZGVyKCktPm91dGdvaW5nUmVmZXJy
ZXIoKSkpLCBmYWxzZSwgZmFsc2UsIDAsIDAsIFNlbmRSZWZlcnJlcik7CiAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgIG9wZW5OZXdXaW5kb3cocmVzdWx0LmFic29sdXRlTGlua1VSTCgpLCBmcmFt
ZSk7CisgICAgICAgICAgICBvcGVuTmV3V2luZG93KG1faGl0VGVzdFJlc3VsdC5hYnNvbHV0ZUxp
bmtVUkwoKSwgZnJhbWUpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENvbnRleHRNZW51SXRl
bVRhZ0JvbGQ6CiAgICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZCgiVG9nZ2xlQm9sZCIp
LmV4ZWN1dGUoKTsKQEAgLTI5NSw3ICszMDYsNyBAQCB2b2lkIENvbnRleHRNZW51Q29udHJvbGxl
cjo6Y29udGV4dE1lbnVJCiAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7CiAgICAgICAgIFJlZlB0
cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS0+dG9Ob3JtYWxpemVk
UmFuZ2UoKTsKICAgICAgICAgaWYgKCFzZWxlY3RlZFJhbmdlIHx8IHNlbGVjdGVkUmFuZ2UtPmNv
bGxhcHNlZChlYykpIHsKLSAgICAgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHJlc3VsdC5p
bm5lck5vblNoYXJlZE5vZGUoKS0+ZG9jdW1lbnQoKTsKKyAgICAgICAgICAgIERvY3VtZW50KiBk
b2N1bWVudCA9IG1faGl0VGVzdFJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKS0+ZG9jdW1lbnQo
KTsKICAgICAgICAgICAgIHNlbGVjdGVkUmFuZ2UgPSBkb2N1bWVudC0+Y3JlYXRlUmFuZ2UoKTsK
ICAgICAgICAgICAgIHNlbGVjdGVkUmFuZ2UtPnNlbGVjdE5vZGUoZG9jdW1lbnQtPmRvY3VtZW50
RWxlbWVudCgpLCBlYyk7CiAgICAgICAgIH0KQEAgLTM4NSwxMyArMzk2LDEzIEBAIHZvaWQgQ29u
dGV4dE1lbnVDb250cm9sbGVyOjpjb250ZXh0TWVudUkKICAgICAgICAgZnJhbWUtPmVkaXRvcigp
LT50b2dnbGVBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb24oKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdDaGFuZ2VCYWNrOgotICAgICAgICBmcmFtZS0+ZWRp
dG9yKCktPmNoYW5nZUJhY2tUb1JlcGxhY2VkU3RyaW5nKHJlc3VsdC5yZXBsYWNlZFN0cmluZygp
KTsKKyAgICAgICAgZnJhbWUtPmVkaXRvcigpLT5jaGFuZ2VCYWNrVG9SZXBsYWNlZFN0cmluZyht
X2hpdFRlc3RSZXN1bHQucmVwbGFjZWRTdHJpbmcoKSk7CiAgICAgICAgIGJyZWFrOwogI2VuZGlm
CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0luc3Bl
Y3RFbGVtZW50OgogICAgICAgICBpZiAoUGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCkpCi0gICAg
ICAgICAgICBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmluc3BlY3QocmVzdWx0LmlubmVy
Tm9uU2hhcmVkTm9kZSgpKTsKKyAgICAgICAgICAgIHBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIo
KS0+aW5zcGVjdChtX2hpdFRlc3RSZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCkpOwogICAgICAg
ICBicmVhazsKICNlbmRpZgogICAgIGRlZmF1bHQ6CkBAIC0zOTksNiArNDEwLDgyOSBAQCB2b2lk
IENvbnRleHRNZW51Q29udHJvbGxlcjo6Y29udGV4dE1lbnVJCiAgICAgfQogfQogCit2b2lkIENv
bnRleHRNZW51Q29udHJvbGxlcjo6YXBwZW5kSXRlbShDb250ZXh0TWVudUl0ZW0mIG1lbnVJdGVt
LCBDb250ZXh0TWVudSogcGFyZW50TWVudSkKK3sKKyAgICBjaGVja09yRW5hYmxlSWZOZWVkZWQo
bWVudUl0ZW0pOworICAgIGlmIChwYXJlbnRNZW51KQorICAgICAgICBwYXJlbnRNZW51LT5hcHBl
bmRJdGVtKG1lbnVJdGVtKTsKK30KKworc3RhdGljIFBhc3NPd25QdHI8Q29udGV4dE1lbnVJdGVt
PiBzZXBhcmF0b3JJdGVtKCkKK3sKKyAgICByZXR1cm4gbmV3IENvbnRleHRNZW51SXRlbShTZXBh
cmF0b3JUeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdOb0FjdGlvbiwgU3RyaW5nKCkpOworfQorCit2
b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6Y3JlYXRlQW5kQXBwZW5kRm9udFN1Yk1lbnUoQ29u
dGV4dE1lbnVJdGVtJiBmb250TWVudUl0ZW0pCit7CisgICAgQ29udGV4dE1lbnUgZm9udE1lbnU7
CisKKyNpZiBQTEFURk9STShNQUMpCisgICAgQ29udGV4dE1lbnVJdGVtIHNob3dGb250cyhBY3Rp
b25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTaG93Rm9udHMsIGNvbnRleHRNZW51SXRlbVRhZ1No
b3dGb250cygpKTsKKyNlbmRpZgorICAgIENvbnRleHRNZW51SXRlbSBib2xkKENoZWNrYWJsZUFj
dGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0JvbGQsIGNvbnRleHRNZW51SXRlbVRhZ0JvbGQo
KSk7CisgICAgQ29udGV4dE1lbnVJdGVtIGl0YWxpYyhDaGVja2FibGVBY3Rpb25UeXBlLCBDb250
ZXh0TWVudUl0ZW1UYWdJdGFsaWMsIGNvbnRleHRNZW51SXRlbVRhZ0l0YWxpYygpKTsKKyAgICBD
b250ZXh0TWVudUl0ZW0gdW5kZXJsaW5lKENoZWNrYWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51
SXRlbVRhZ1VuZGVybGluZSwgY29udGV4dE1lbnVJdGVtVGFnVW5kZXJsaW5lKCkpOworICAgIENv
bnRleHRNZW51SXRlbSBvdXRsaW5lKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ091dGxp
bmUsIGNvbnRleHRNZW51SXRlbVRhZ091dGxpbmUoKSk7CisjaWYgUExBVEZPUk0oTUFDKQorICAg
IENvbnRleHRNZW51SXRlbSBzdHlsZXMoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU3R5
bGVzLCBjb250ZXh0TWVudUl0ZW1UYWdTdHlsZXMoKSk7CisgICAgQ29udGV4dE1lbnVJdGVtIHNo
b3dDb2xvcnMoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU2hvd0NvbG9ycywgY29udGV4
dE1lbnVJdGVtVGFnU2hvd0NvbG9ycygpKTsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oTUFDKQor
ICAgIGFwcGVuZEl0ZW0oc2hvd0ZvbnRzLCAmZm9udE1lbnUpOworI2VuZGlmCisgICAgYXBwZW5k
SXRlbShib2xkLCAmZm9udE1lbnUpOworICAgIGFwcGVuZEl0ZW0oaXRhbGljLCAmZm9udE1lbnUp
OworICAgIGFwcGVuZEl0ZW0odW5kZXJsaW5lLCAmZm9udE1lbnUpOworICAgIGFwcGVuZEl0ZW0o
b3V0bGluZSwgJmZvbnRNZW51KTsKKyNpZiBQTEFURk9STShNQUMpCisgICAgYXBwZW5kSXRlbShz
dHlsZXMsICZmb250TWVudSk7CisgICAgYXBwZW5kSXRlbSgqc2VwYXJhdG9ySXRlbSgpLCAmZm9u
dE1lbnUpOworICAgIGFwcGVuZEl0ZW0oc2hvd0NvbG9ycywgJmZvbnRNZW51KTsKKyNlbmRpZgor
CisgICAgZm9udE1lbnVJdGVtLnNldFN1Yk1lbnUoJmZvbnRNZW51KTsKK30KKworI2lmICFkZWZp
bmVkKEJVSUxESU5HX09OX1RJR0VSKQorCisjaWYgIVBMQVRGT1JNKEdUSykKKwordm9pZCBDb250
ZXh0TWVudUNvbnRyb2xsZXI6OmNyZWF0ZUFuZEFwcGVuZFNwZWxsaW5nQW5kR3JhbW1hclN1Yk1l
bnUoQ29udGV4dE1lbnVJdGVtJiBzcGVsbGluZ0FuZEdyYW1tYXJNZW51SXRlbSkKK3sKKyAgICBD
b250ZXh0TWVudSBzcGVsbGluZ0FuZEdyYW1tYXJNZW51OworCisgICAgQ29udGV4dE1lbnVJdGVt
IHNob3dTcGVsbGluZ1BhbmVsKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1Nob3dTcGVs
bGluZ1BhbmVsLCAKKyAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnU2hvd1NwZWxsaW5nUGFuZWwo
dHJ1ZSkpOworICAgIENvbnRleHRNZW51SXRlbSBjaGVja1NwZWxsaW5nKEFjdGlvblR5cGUsIENv
bnRleHRNZW51SXRlbVRhZ0NoZWNrU3BlbGxpbmcsIAorICAgICAgICBjb250ZXh0TWVudUl0ZW1U
YWdDaGVja1NwZWxsaW5nKCkpOworICAgIENvbnRleHRNZW51SXRlbSBjaGVja0FzWW91VHlwZShD
aGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdDaGVja1NwZWxsaW5nV2hpbGVU
eXBpbmcsIAorICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdDaGVja1NwZWxsaW5nV2hpbGVUeXBp
bmcoKSk7CisgICAgQ29udGV4dE1lbnVJdGVtIGdyYW1tYXJXaXRoU3BlbGxpbmcoQ2hlY2thYmxl
QWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnQ2hlY2tHcmFtbWFyV2l0aFNwZWxsaW5nLCAK
KyAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnQ2hlY2tHcmFtbWFyV2l0aFNwZWxsaW5nKCkpOwor
I2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKKyAgICBD
b250ZXh0TWVudUl0ZW0gY29ycmVjdFNwZWxsaW5nKENoZWNrYWJsZUFjdGlvblR5cGUsIENvbnRl
eHRNZW51SXRlbVRhZ0NvcnJlY3RTcGVsbGluZ0F1dG9tYXRpY2FsbHksIAorICAgICAgICBjb250
ZXh0TWVudUl0ZW1UYWdDb3JyZWN0U3BlbGxpbmdBdXRvbWF0aWNhbGx5KCkpOworI2VuZGlmCisK
KyAgICBhcHBlbmRJdGVtKHNob3dTcGVsbGluZ1BhbmVsLCAmc3BlbGxpbmdBbmRHcmFtbWFyTWVu
dSk7CisgICAgYXBwZW5kSXRlbShjaGVja1NwZWxsaW5nLCAmc3BlbGxpbmdBbmRHcmFtbWFyTWVu
dSk7CisjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQor
ICAgIGFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSwgJnNwZWxsaW5nQW5kR3JhbW1hck1lbnUp
OworI2VuZGlmCisgICAgYXBwZW5kSXRlbShjaGVja0FzWW91VHlwZSwgJnNwZWxsaW5nQW5kR3Jh
bW1hck1lbnUpOworICAgIGFwcGVuZEl0ZW0oZ3JhbW1hcldpdGhTcGVsbGluZywgJnNwZWxsaW5n
QW5kR3JhbW1hck1lbnUpOworI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdf
T05fTEVPUEFSRCkKKyAgICBhcHBlbmRJdGVtKGNvcnJlY3RTcGVsbGluZywgJnNwZWxsaW5nQW5k
R3JhbW1hck1lbnUpOworI2VuZGlmCisKKyAgICBzcGVsbGluZ0FuZEdyYW1tYXJNZW51SXRlbS5z
ZXRTdWJNZW51KCZzcGVsbGluZ0FuZEdyYW1tYXJNZW51KTsKK30KKworI2VuZGlmIC8vICFQTEFU
Rk9STShHVEspCisKKyNlbHNlCisKK3ZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjpjcmVhdGVB
bmRBcHBlbmRTcGVsbGluZ0FuZEdyYW1tYXJTdWJNZW51KENvbnRleHRNZW51SXRlbSYgc3BlbGxp
bmdBbmRHcmFtbWFyTWVudUl0ZW0pCit7CisgICAgQ29udGV4dE1lbnUgc3BlbGxpbmdNZW51Owor
CisgICAgQ29udGV4dE1lbnVJdGVtIHNob3dTcGVsbGluZ1BhbmVsKEFjdGlvblR5cGUsIENvbnRl
eHRNZW51SXRlbVRhZ1Nob3dTcGVsbGluZ1BhbmVsLCAKKyAgICAgICAgY29udGV4dE1lbnVJdGVt
VGFnU2hvd1NwZWxsaW5nUGFuZWwodHJ1ZSkpOworICAgIENvbnRleHRNZW51SXRlbSBjaGVja1Nw
ZWxsaW5nKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0NoZWNrU3BlbGxpbmcsIAorICAg
ICAgICBjb250ZXh0TWVudUl0ZW1UYWdDaGVja1NwZWxsaW5nKCkpOworICAgIENvbnRleHRNZW51
SXRlbSBjaGVja0FzWW91VHlwZShDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1U
YWdDaGVja1NwZWxsaW5nV2hpbGVUeXBpbmcsIAorICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdD
aGVja1NwZWxsaW5nV2hpbGVUeXBpbmcoKSk7CisKKyAgICBhcHBlbmRJdGVtKHNob3dTcGVsbGlu
Z1BhbmVsLCAmc3BlbGxpbmdNZW51KTsKKyAgICBhcHBlbmRJdGVtKGNoZWNrU3BlbGxpbmcsICZz
cGVsbGluZ01lbnUpOworICAgIGFwcGVuZEl0ZW0oY2hlY2tBc1lvdVR5cGUsICZzcGVsbGluZ01l
bnUpOworCisgICAgc3BlbGxpbmdNZW51SXRlbS5zZXRTdWJNZW51KCZzcGVsbGluZ01lbnUpOwor
fQorCisjZW5kaWYKKworI2lmIFBMQVRGT1JNKE1BQykKKwordm9pZCBDb250ZXh0TWVudUNvbnRy
b2xsZXI6OmNyZWF0ZUFuZEFwcGVuZFNwZWVjaFN1Yk1lbnUoQ29udGV4dE1lbnVJdGVtJiBzcGVl
Y2hNZW51SXRlbSkKK3sKKyAgICBDb250ZXh0TWVudSBzcGVlY2hNZW51OworCisgICAgQ29udGV4
dE1lbnVJdGVtIHN0YXJ0KEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1N0YXJ0U3BlYWtp
bmcsIGNvbnRleHRNZW51SXRlbVRhZ1N0YXJ0U3BlYWtpbmcoKSk7CisgICAgQ29udGV4dE1lbnVJ
dGVtIHN0b3AoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU3RvcFNwZWFraW5nLCBjb250
ZXh0TWVudUl0ZW1UYWdTdG9wU3BlYWtpbmcoKSk7CisKKyAgICBhcHBlbmRJdGVtKHN0YXJ0LCAm
c3BlZWNoTWVudSk7CisgICAgYXBwZW5kSXRlbShzdG9wLCAmc3BlZWNoTWVudSk7CisKKyAgICBz
cGVlY2hNZW51SXRlbS5zZXRTdWJNZW51KCZzcGVlY2hNZW51KTsKK30KKworI2VuZGlmCisgCisj
aWYgIVBMQVRGT1JNKEdUSykKKwordm9pZCBDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNyZWF0ZUFu
ZEFwcGVuZFdyaXRpbmdEaXJlY3Rpb25TdWJNZW51KENvbnRleHRNZW51SXRlbSYgd3JpdGluZ0Rp
cmVjdGlvbk1lbnVJdGVtKQoreworICAgIENvbnRleHRNZW51IHdyaXRpbmdEaXJlY3Rpb25NZW51
OworCisgICAgQ29udGV4dE1lbnVJdGVtIGRlZmF1bHRJdGVtKEFjdGlvblR5cGUsIENvbnRleHRN
ZW51SXRlbVRhZ0RlZmF1bHREaXJlY3Rpb24sIAorICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdE
ZWZhdWx0RGlyZWN0aW9uKCkpOworICAgIENvbnRleHRNZW51SXRlbSBsdHIoQ2hlY2thYmxlQWN0
aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnTGVmdFRvUmlnaHQsIGNvbnRleHRNZW51SXRlbVRh
Z0xlZnRUb1JpZ2h0KCkpOworICAgIENvbnRleHRNZW51SXRlbSBydGwoQ2hlY2thYmxlQWN0aW9u
VHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnUmlnaHRUb0xlZnQsIGNvbnRleHRNZW51SXRlbVRhZ1Jp
Z2h0VG9MZWZ0KCkpOworCisgICAgYXBwZW5kSXRlbShkZWZhdWx0SXRlbSwgJndyaXRpbmdEaXJl
Y3Rpb25NZW51KTsKKyAgICBhcHBlbmRJdGVtKGx0ciwgJndyaXRpbmdEaXJlY3Rpb25NZW51KTsK
KyAgICBhcHBlbmRJdGVtKHJ0bCwgJndyaXRpbmdEaXJlY3Rpb25NZW51KTsKKworICAgIHdyaXRp
bmdEaXJlY3Rpb25NZW51SXRlbS5zZXRTdWJNZW51KCZ3cml0aW5nRGlyZWN0aW9uTWVudSk7Cit9
CisKK3ZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjpjcmVhdGVBbmRBcHBlbmRUZXh0RGlyZWN0
aW9uU3ViTWVudShDb250ZXh0TWVudUl0ZW0mIHRleHREaXJlY3Rpb25NZW51SXRlbSkKK3sKKyAg
ICBDb250ZXh0TWVudSB0ZXh0RGlyZWN0aW9uTWVudTsKKworICAgIENvbnRleHRNZW51SXRlbSBk
ZWZhdWx0SXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdUZXh0RGlyZWN0aW9uRGVm
YXVsdCwgY29udGV4dE1lbnVJdGVtVGFnRGVmYXVsdERpcmVjdGlvbigpKTsKKyAgICBDb250ZXh0
TWVudUl0ZW0gbHRyKENoZWNrYWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1RleHRE
aXJlY3Rpb25MZWZ0VG9SaWdodCwgY29udGV4dE1lbnVJdGVtVGFnTGVmdFRvUmlnaHQoKSk7Cisg
ICAgQ29udGV4dE1lbnVJdGVtIHJ0bChDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0
ZW1UYWdUZXh0RGlyZWN0aW9uUmlnaHRUb0xlZnQsIGNvbnRleHRNZW51SXRlbVRhZ1JpZ2h0VG9M
ZWZ0KCkpOworCisgICAgYXBwZW5kSXRlbShkZWZhdWx0SXRlbSwgJnRleHREaXJlY3Rpb25NZW51
KTsKKyAgICBhcHBlbmRJdGVtKGx0ciwgJnRleHREaXJlY3Rpb25NZW51KTsKKyAgICBhcHBlbmRJ
dGVtKHJ0bCwgJnRleHREaXJlY3Rpb25NZW51KTsKKworICAgIHRleHREaXJlY3Rpb25NZW51SXRl
bS5zZXRTdWJNZW51KCZ0ZXh0RGlyZWN0aW9uTWVudSk7Cit9CisKKyNlbmRpZgorCisjaWYgUExB
VEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJ
TERJTkdfT05fTEVPUEFSRCkKKwordm9pZCBDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNyZWF0ZUFu
ZEFwcGVuZFN1YnN0aXR1dGlvbnNTdWJNZW51KENvbnRleHRNZW51SXRlbSYgc3Vic3RpdHV0aW9u
c01lbnVJdGVtKQoreworICAgIENvbnRleHRNZW51IHN1YnN0aXR1dGlvbnNNZW51OworCisgICAg
Q29udGV4dE1lbnVJdGVtIHNob3dTdWJzdGl0dXRpb25zKEFjdGlvblR5cGUsIENvbnRleHRNZW51
SXRlbVRhZ1Nob3dTdWJzdGl0dXRpb25zLCBjb250ZXh0TWVudUl0ZW1UYWdTaG93U3Vic3RpdHV0
aW9ucyh0cnVlKSk7CisgICAgQ29udGV4dE1lbnVJdGVtIHNtYXJ0Q29weVBhc3RlKENoZWNrYWJs
ZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1NtYXJ0Q29weVBhc3RlLCBjb250ZXh0TWVu
dUl0ZW1UYWdTbWFydENvcHlQYXN0ZSgpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gc21hcnRRdW90
ZXMoQ2hlY2thYmxlQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU21hcnRRdW90ZXMsIGNv
bnRleHRNZW51SXRlbVRhZ1NtYXJ0UXVvdGVzKCkpOworICAgIENvbnRleHRNZW51SXRlbSBzbWFy
dERhc2hlcyhDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTbWFydERhc2hl
cywgY29udGV4dE1lbnVJdGVtVGFnU21hcnREYXNoZXMoKSk7CisgICAgQ29udGV4dE1lbnVJdGVt
IHNtYXJ0TGlua3MoQ2hlY2thYmxlQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU21hcnRM
aW5rcywgY29udGV4dE1lbnVJdGVtVGFnU21hcnRMaW5rcygpKTsKKyAgICBDb250ZXh0TWVudUl0
ZW0gdGV4dFJlcGxhY2VtZW50KENoZWNrYWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRh
Z1RleHRSZXBsYWNlbWVudCwgY29udGV4dE1lbnVJdGVtVGFnVGV4dFJlcGxhY2VtZW50KCkpOwor
CisgICAgYXBwZW5kSXRlbShzaG93U3Vic3RpdHV0aW9ucywgJnN1YnN0aXR1dGlvbnNNZW51KTsK
KyAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCksICZzdWJzdGl0dXRpb25zTWVudSk7Cisg
ICAgYXBwZW5kSXRlbShzbWFydENvcHlQYXN0ZSwgJnN1YnN0aXR1dGlvbnNNZW51KTsKKyAgICBh
cHBlbmRJdGVtKHNtYXJ0UXVvdGVzLCAmc3Vic3RpdHV0aW9uc01lbnUpOworICAgIGFwcGVuZEl0
ZW0oc21hcnREYXNoZXMsICZzdWJzdGl0dXRpb25zTWVudSk7CisgICAgYXBwZW5kSXRlbShzbWFy
dExpbmtzLCAmc3Vic3RpdHV0aW9uc01lbnUpOworICAgIGFwcGVuZEl0ZW0odGV4dFJlcGxhY2Vt
ZW50LCAmc3Vic3RpdHV0aW9uc01lbnUpOworCisgICAgc3Vic3RpdHV0aW9uc01lbnVJdGVtLnNl
dFN1Yk1lbnUoJnN1YnN0aXR1dGlvbnNNZW51KTsKK30KKwordm9pZCBDb250ZXh0TWVudUNvbnRy
b2xsZXI6OmNyZWF0ZUFuZEFwcGVuZFRyYW5zZm9ybWF0aW9uc1N1Yk1lbnUoQ29udGV4dE1lbnVJ
dGVtJiB0cmFuc2Zvcm1hdGlvbnNNZW51SXRlbSkKK3sKKyAgICBDb250ZXh0TWVudSB0cmFuc2Zv
cm1hdGlvbnNNZW51OworCisgICAgQ29udGV4dE1lbnVJdGVtIG1ha2VVcHBlckNhc2UoQWN0aW9u
VHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnTWFrZVVwcGVyQ2FzZSwgY29udGV4dE1lbnVJdGVtVGFn
TWFrZVVwcGVyQ2FzZSgpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gbWFrZUxvd2VyQ2FzZShBY3Rp
b25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdNYWtlTG93ZXJDYXNlLCBjb250ZXh0TWVudUl0ZW1U
YWdNYWtlTG93ZXJDYXNlKCkpOworICAgIENvbnRleHRNZW51SXRlbSBjYXBpdGFsaXplKEFjdGlv
blR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0NhcGl0YWxpemUsIGNvbnRleHRNZW51SXRlbVRhZ0Nh
cGl0YWxpemUoKSk7CisKKyAgICBhcHBlbmRJdGVtKG1ha2VVcHBlckNhc2UsICZ0cmFuc2Zvcm1h
dGlvbnNNZW51KTsKKyAgICBhcHBlbmRJdGVtKG1ha2VMb3dlckNhc2UsICZ0cmFuc2Zvcm1hdGlv
bnNNZW51KTsKKyAgICBhcHBlbmRJdGVtKGNhcGl0YWxpemUsICZ0cmFuc2Zvcm1hdGlvbnNNZW51
KTsKKworICAgIHRyYW5zZm9ybWF0aW9uc01lbnVJdGVtLnNldFN1Yk1lbnUoJnRyYW5zZm9ybWF0
aW9uc01lbnUpOworfQorCisjZW5kaWYKKworc3RhdGljIGJvb2wgc2VsZWN0aW9uQ29udGFpbnNQ
b3NzaWJsZVdvcmQoRnJhbWUqIGZyYW1lKQoreworICAgIC8vIEN1cnJlbnQgYWxnb3JpdGhtOiBs
b29rIGZvciBhIGNoYXJhY3RlciB0aGF0J3Mgbm90IGp1c3QgYSBzZXBhcmF0b3IuCisgICAgZm9y
IChUZXh0SXRlcmF0b3IgaXQoZnJhbWUtPnNlbGVjdGlvbigpLT50b05vcm1hbGl6ZWRSYW5nZSgp
LmdldCgpKTsgIWl0LmF0RW5kKCk7IGl0LmFkdmFuY2UoKSkgeworICAgICAgICBpbnQgbGVuZ3Ro
ID0gaXQubGVuZ3RoKCk7CisgICAgICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0gaXQuY2hh
cmFjdGVycygpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQorICAg
ICAgICAgICAgaWYgKCEoY2F0ZWdvcnkoY2hhcmFjdGVyc1tpXSkgJiAoU2VwYXJhdG9yX1NwYWNl
IHwgU2VwYXJhdG9yX0xpbmUgfCBTZXBhcmF0b3JfUGFyYWdyYXBoKSkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBDb250
ZXh0TWVudUNvbnRyb2xsZXI6OnBvcHVsYXRlKCkKK3sKKyAgICBDb250ZXh0TWVudUl0ZW0gT3Bl
bkxpbmtJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ09wZW5MaW5rLCBjb250ZXh0
TWVudUl0ZW1UYWdPcGVuTGluaygpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gT3BlbkxpbmtJbk5l
d1dpbmRvd0l0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnT3BlbkxpbmtJbk5ld1dp
bmRvdywgCisgICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ09wZW5MaW5rSW5OZXdXaW5kb3coKSk7
CisgICAgQ29udGV4dE1lbnVJdGVtIERvd25sb2FkRmlsZUl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4
dE1lbnVJdGVtVGFnRG93bmxvYWRMaW5rVG9EaXNrLCAKKyAgICAgICAgY29udGV4dE1lbnVJdGVt
VGFnRG93bmxvYWRMaW5rVG9EaXNrKCkpOworICAgIENvbnRleHRNZW51SXRlbSBDb3B5TGlua0l0
ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnQ29weUxpbmtUb0NsaXBib2FyZCwgCisg
ICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ0NvcHlMaW5rVG9DbGlwYm9hcmQoKSk7CisgICAgQ29u
dGV4dE1lbnVJdGVtIE9wZW5JbWFnZUluTmV3V2luZG93SXRlbShBY3Rpb25UeXBlLCBDb250ZXh0
TWVudUl0ZW1UYWdPcGVuSW1hZ2VJbk5ld1dpbmRvdywgCisgICAgICAgIGNvbnRleHRNZW51SXRl
bVRhZ09wZW5JbWFnZUluTmV3V2luZG93KCkpOworICAgIENvbnRleHRNZW51SXRlbSBEb3dubG9h
ZEltYWdlSXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdEb3dubG9hZEltYWdlVG9E
aXNrLCAKKyAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnRG93bmxvYWRJbWFnZVRvRGlzaygpKTsK
KyAgICBDb250ZXh0TWVudUl0ZW0gQ29weUltYWdlSXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVu
dUl0ZW1UYWdDb3B5SW1hZ2VUb0NsaXBib2FyZCwgCisgICAgICAgIGNvbnRleHRNZW51SXRlbVRh
Z0NvcHlJbWFnZVRvQ2xpcGJvYXJkKCkpOworICAgIENvbnRleHRNZW51SXRlbSBPcGVuTWVkaWFJ
bk5ld1dpbmRvd0l0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnT3Blbk1lZGlhSW5O
ZXdXaW5kb3csIFN0cmluZygpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gQ29weU1lZGlhTGlua0l0
ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnQ29weU1lZGlhTGlua1RvQ2xpcGJvYXJk
LCAKKyAgICAgICAgU3RyaW5nKCkpOworICAgIENvbnRleHRNZW51SXRlbSBNZWRpYVBsYXlQYXVz
ZShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdNZWRpYVBsYXlQYXVzZSwgCisgICAgICAg
IGNvbnRleHRNZW51SXRlbVRhZ01lZGlhUGxheSgpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gTWVk
aWFNdXRlKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ01lZGlhTXV0ZSwgCisgICAgICAg
IGNvbnRleHRNZW51SXRlbVRhZ01lZGlhTXV0ZSgpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gVG9n
Z2xlTWVkaWFDb250cm9scyhDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdU
b2dnbGVNZWRpYUNvbnRyb2xzLCAKKyAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnVG9nZ2xlTWVk
aWFDb250cm9scygpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gVG9nZ2xlTWVkaWFMb29wKENoZWNr
YWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1RvZ2dsZU1lZGlhTG9vcCwgCisgICAg
ICAgIGNvbnRleHRNZW51SXRlbVRhZ1RvZ2dsZU1lZGlhTG9vcCgpKTsKKyAgICBDb250ZXh0TWVu
dUl0ZW0gRW50ZXJWaWRlb0Z1bGxzY3JlZW4oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFn
RW50ZXJWaWRlb0Z1bGxzY3JlZW4sIAorICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdFbnRlclZp
ZGVvRnVsbHNjcmVlbigpKTsKKyNpZiBQTEFURk9STShNQUMpCisgICAgQ29udGV4dE1lbnVJdGVt
IFNlYXJjaFNwb3RsaWdodEl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU2VhcmNo
SW5TcG90bGlnaHQsIAorICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdTZWFyY2hJblNwb3RsaWdo
dCgpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gTG9va0luRGljdGlvbmFyeUl0ZW0oQWN0aW9uVHlw
ZSwgQ29udGV4dE1lbnVJdGVtVGFnTG9va1VwSW5EaWN0aW9uYXJ5LCAKKyAgICAgICAgY29udGV4
dE1lbnVJdGVtVGFnTG9va1VwSW5EaWN0aW9uYXJ5KCkpOworI2VuZGlmCisjaWYgIVBMQVRGT1JN
KEdUSykKKyAgICBDb250ZXh0TWVudUl0ZW0gU2VhcmNoV2ViSXRlbShBY3Rpb25UeXBlLCBDb250
ZXh0TWVudUl0ZW1UYWdTZWFyY2hXZWIsIGNvbnRleHRNZW51SXRlbVRhZ1NlYXJjaFdlYigpKTsK
KyNlbmRpZgorICAgIENvbnRleHRNZW51SXRlbSBDb3B5SXRlbShBY3Rpb25UeXBlLCBDb250ZXh0
TWVudUl0ZW1UYWdDb3B5LCBjb250ZXh0TWVudUl0ZW1UYWdDb3B5KCkpOworICAgIENvbnRleHRN
ZW51SXRlbSBCYWNrSXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdHb0JhY2ssIGNv
bnRleHRNZW51SXRlbVRhZ0dvQmFjaygpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gRm9yd2FyZEl0
ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnR29Gb3J3YXJkLCAgY29udGV4dE1lbnVJ
dGVtVGFnR29Gb3J3YXJkKCkpOworICAgIENvbnRleHRNZW51SXRlbSBTdG9wSXRlbShBY3Rpb25U
eXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTdG9wLCBjb250ZXh0TWVudUl0ZW1UYWdTdG9wKCkpOwor
ICAgIENvbnRleHRNZW51SXRlbSBSZWxvYWRJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRl
bVRhZ1JlbG9hZCwgY29udGV4dE1lbnVJdGVtVGFnUmVsb2FkKCkpOworICAgIENvbnRleHRNZW51
SXRlbSBPcGVuRnJhbWVJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ09wZW5GcmFt
ZUluTmV3V2luZG93LCAKKyAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnT3BlbkZyYW1lSW5OZXdX
aW5kb3coKSk7CisgICAgQ29udGV4dE1lbnVJdGVtIE5vR3Vlc3Nlc0l0ZW0oQWN0aW9uVHlwZSwg
Q29udGV4dE1lbnVJdGVtVGFnTm9HdWVzc2VzRm91bmQsIAorICAgICAgICBjb250ZXh0TWVudUl0
ZW1UYWdOb0d1ZXNzZXNGb3VuZCgpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gSWdub3JlU3BlbGxp
bmdJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0lnbm9yZVNwZWxsaW5nLCAKKyAg
ICAgICAgY29udGV4dE1lbnVJdGVtVGFnSWdub3JlU3BlbGxpbmcoKSk7CisgICAgQ29udGV4dE1l
bnVJdGVtIExlYXJuU3BlbGxpbmdJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0xl
YXJuU3BlbGxpbmcsIAorICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdMZWFyblNwZWxsaW5nKCkp
OworICAgIENvbnRleHRNZW51SXRlbSBJZ25vcmVHcmFtbWFySXRlbShBY3Rpb25UeXBlLCBDb250
ZXh0TWVudUl0ZW1UYWdJZ25vcmVHcmFtbWFyLCAKKyAgICAgICAgY29udGV4dE1lbnVJdGVtVGFn
SWdub3JlR3JhbW1hcigpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gQ3V0SXRlbShBY3Rpb25UeXBl
LCBDb250ZXh0TWVudUl0ZW1UYWdDdXQsIGNvbnRleHRNZW51SXRlbVRhZ0N1dCgpKTsKKyAgICBD
b250ZXh0TWVudUl0ZW0gUGFzdGVJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1Bh
c3RlLCBjb250ZXh0TWVudUl0ZW1UYWdQYXN0ZSgpKTsKKyNpZiBQTEFURk9STShHVEspCisgICAg
Q29udGV4dE1lbnVJdGVtIERlbGV0ZUl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFn
RGVsZXRlLCBjb250ZXh0TWVudUl0ZW1UYWdEZWxldGUoKSk7CisgICAgQ29udGV4dE1lbnVJdGVt
IFNlbGVjdEFsbEl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU2VsZWN0QWxsLCBj
b250ZXh0TWVudUl0ZW1UYWdTZWxlY3RBbGwoKSk7CisjZW5kaWYKKworICAgIE5vZGUqIG5vZGUg
PSBtX2hpdFRlc3RSZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCk7CisgICAgaWYgKCFub2RlKQor
ICAgICAgICByZXR1cm47CisjaWYgUExBVEZPUk0oR1RLKQorICAgIGlmICghbV9oaXRUZXN0UmVz
dWx0LmlzQ29udGVudEVkaXRhYmxlKCkgJiYgKG5vZGUtPmlzRWxlbWVudE5vZGUoKSAmJiBzdGF0
aWNfY2FzdDxFbGVtZW50Kj4obm9kZSktPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpKQorICAgICAg
ICByZXR1cm47CisjZW5kaWYKKyAgICBGcmFtZSogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLT5m
cmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9o
aXRUZXN0UmVzdWx0LmlzQ29udGVudEVkaXRhYmxlKCkpIHsKKyAgICAgICAgRnJhbWVMb2FkZXIq
IGxvYWRlciA9IGZyYW1lLT5sb2FkZXIoKTsKKyAgICAgICAgS1VSTCBsaW5rVVJMID0gbV9oaXRU
ZXN0UmVzdWx0LmFic29sdXRlTGlua1VSTCgpOworICAgICAgICBpZiAoIWxpbmtVUkwuaXNFbXB0
eSgpKSB7CisgICAgICAgICAgICBpZiAobG9hZGVyLT5jYW5IYW5kbGVSZXF1ZXN0KFJlc291cmNl
UmVxdWVzdChsaW5rVVJMKSkpIHsKKyAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKE9wZW5MaW5r
SXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAgICAgICAgICAgYXBwZW5kSXRlbShP
cGVuTGlua0luTmV3V2luZG93SXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAgICAg
ICAgICAgYXBwZW5kSXRlbShEb3dubG9hZEZpbGVJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFwcGVuZEl0ZW0oQ29weUxpbmtJdGVtLCBtX2Nv
bnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIEtVUkwgaW1hZ2VVUkwgPSBt
X2hpdFRlc3RSZXN1bHQuYWJzb2x1dGVJbWFnZVVSTCgpOworICAgICAgICBpZiAoIWltYWdlVVJM
LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgaWYgKCFsaW5rVVJMLmlzRW1wdHkoKSkKKyAgICAg
ICAgICAgICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCksIG1fY29udGV4dE1lbnUuZ2V0
KCkpOworCisgICAgICAgICAgICBhcHBlbmRJdGVtKE9wZW5JbWFnZUluTmV3V2luZG93SXRlbSwg
bV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAgICAgICBhcHBlbmRJdGVtKERvd25sb2FkSW1h
Z2VJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgICAgIGlmIChpbWFnZVVSTC5p
c0xvY2FsRmlsZSgpIHx8IG1faGl0VGVzdFJlc3VsdC5pbWFnZSgpKQorICAgICAgICAgICAgICAg
IGFwcGVuZEl0ZW0oQ29weUltYWdlSXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAg
IH0KKworICAgICAgICBLVVJMIG1lZGlhVVJMID0gbV9oaXRUZXN0UmVzdWx0LmFic29sdXRlTWVk
aWFVUkwoKTsKKyAgICAgICAgaWYgKCFtZWRpYVVSTC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAg
IGlmICghbGlua1VSTC5pc0VtcHR5KCkgfHwgIWltYWdlVVJMLmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCksIG1fY29udGV4dE1lbnUuZ2V0KCkp
OworCisgICAgICAgICAgICBhcHBlbmRJdGVtKE1lZGlhUGxheVBhdXNlLCBtX2NvbnRleHRNZW51
LmdldCgpKTsKKyAgICAgICAgICAgIGFwcGVuZEl0ZW0oTWVkaWFNdXRlLCBtX2NvbnRleHRNZW51
LmdldCgpKTsKKyAgICAgICAgICAgIGFwcGVuZEl0ZW0oVG9nZ2xlTWVkaWFDb250cm9scywgbV9j
b250ZXh0TWVudS5nZXQoKSk7CisgICAgICAgICAgICBhcHBlbmRJdGVtKFRvZ2dsZU1lZGlhTG9v
cCwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAgICAgICBhcHBlbmRJdGVtKEVudGVyVmlk
ZW9GdWxsc2NyZWVuLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKworICAgICAgICAgICAgYXBwZW5k
SXRlbSgqc2VwYXJhdG9ySXRlbSgpLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgICAg
IGFwcGVuZEl0ZW0oQ29weU1lZGlhTGlua0l0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOworICAg
ICAgICAgICAgYXBwZW5kSXRlbShPcGVuTWVkaWFJbk5ld1dpbmRvd0l0ZW0sIG1fY29udGV4dE1l
bnUuZ2V0KCkpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGltYWdlVVJMLmlzRW1wdHkoKSAm
JiBsaW5rVVJMLmlzRW1wdHkoKSAmJiBtZWRpYVVSTC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAg
IGlmIChtX2hpdFRlc3RSZXN1bHQuaXNTZWxlY3RlZCgpKSB7CisgICAgICAgICAgICAgICAgaWYg
KHNlbGVjdGlvbkNvbnRhaW5zUG9zc2libGVXb3JkKGZyYW1lKSkgeworI2lmIFBMQVRGT1JNKE1B
QykKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kSXRlbShTZWFyY2hTcG90bGlnaHRJdGVtLCBt
X2NvbnRleHRNZW51LmdldCgpKTsKKyNlbmRpZgorI2lmICFQTEFURk9STShHVEspCisgICAgICAg
ICAgICAgICAgICAgIGFwcGVuZEl0ZW0oU2VhcmNoV2ViSXRlbSwgbV9jb250ZXh0TWVudS5nZXQo
KSk7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSwgbV9j
b250ZXh0TWVudS5nZXQoKSk7CisjZW5kaWYKKyNpZiBQTEFURk9STShNQUMpCisgICAgICAgICAg
ICAgICAgICAgIGFwcGVuZEl0ZW0oTG9va0luRGljdGlvbmFyeUl0ZW0sIG1fY29udGV4dE1lbnUu
Z2V0KCkpOworICAgICAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCks
IG1fY29udGV4dE1lbnUuZ2V0KCkpOworI2VuZGlmCisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGFwcGVuZEl0ZW0oQ29weUl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOworI2lm
IFBMQVRGT1JNKE1BQykKKyAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVt
KCksIG1fY29udGV4dE1lbnUuZ2V0KCkpOworICAgICAgICAgICAgICAgIENvbnRleHRNZW51SXRl
bSBTcGVlY2hNZW51SXRlbShTdWJtZW51VHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU3BlZWNoTWVu
dSwgY29udGV4dE1lbnVJdGVtVGFnU3BlZWNoTWVudSgpKTsKKyAgICAgICAgICAgICAgICBjcmVh
dGVBbmRBcHBlbmRTcGVlY2hTdWJNZW51KFNwZWVjaE1lbnVJdGVtKTsKKyAgICAgICAgICAgICAg
ICBhcHBlbmRJdGVtKFNwZWVjaE1lbnVJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyNlbmRp
ZiAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIH0gZWxzZSB7CisjaWYgRU5BQkxFKElOU1BF
Q1RPUikKKyAgICAgICAgICAgICAgICBpZiAoIShmcmFtZS0+cGFnZSgpICYmIGZyYW1lLT5wYWdl
KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+aGFzSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQoKSkp
IHsKKyNlbmRpZgorICAgICAgICAgICAgICAgIGlmIChmcmFtZS0+cGFnZSgpICYmIGZyYW1lLT5w
YWdlKCktPmJhY2tGb3J3YXJkKCktPmNhbkdvQmFja09yRm9yd2FyZCgtMSkpCisgICAgICAgICAg
ICAgICAgICAgIGFwcGVuZEl0ZW0oQmFja0l0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOworCisg
ICAgICAgICAgICAgICAgaWYgKGZyYW1lLT5wYWdlKCkgJiYgZnJhbWUtPnBhZ2UoKS0+YmFja0Zv
cndhcmQoKS0+Y2FuR29CYWNrT3JGb3J3YXJkKDEpKQorICAgICAgICAgICAgICAgICAgICBhcHBl
bmRJdGVtKEZvcndhcmRJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKworICAgICAgICAgICAg
ICAgIC8vIHVzZSBpc0xvYWRpbmdJbkFQSVNlbnNlIHJhdGhlciB0aGFuIGlzTG9hZGluZyBiZWNh
dXNlIFN0b3AvUmVsb2FkIGFyZQorICAgICAgICAgICAgICAgIC8vIGludGVuZGVkIHRvIG1hdGNo
IFdlYktpdCdzIEFQSSwgbm90IFdlYkNvcmUncyBpbnRlcm5hbCBub3Rpb24gb2YgbG9hZGluZyBz
dGF0dXMKKyAgICAgICAgICAgICAgICBpZiAobG9hZGVyLT5kb2N1bWVudExvYWRlcigpLT5pc0xv
YWRpbmdJbkFQSVNlbnNlKCkpCisgICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oU3RvcEl0
ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgYXBwZW5kSXRlbShSZWxvYWRJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsK
KyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorICAgICAgICAgICAgICAgIH0KKyNlbmRpZgorCisgICAg
ICAgICAgICAgICAgaWYgKGZyYW1lLT5wYWdlKCkgJiYgZnJhbWUgIT0gZnJhbWUtPnBhZ2UoKS0+
bWFpbkZyYW1lKCkpCisgICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oT3BlbkZyYW1lSXRl
bSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
IGVsc2UgeyAvLyBNYWtlIGFuIGVkaXRpbmcgY29udGV4dCBtZW51CisgICAgICAgIFNlbGVjdGlv
bkNvbnRyb2xsZXIqIHNlbGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKTsKKyAgICAgICAgYm9v
bCBpblBhc3N3b3JkRmllbGQgPSBzZWxlY3Rpb24tPmlzSW5QYXNzd29yZEZpZWxkKCk7CisgICAg
ICAgIGJvb2wgc3BlbGxDaGVja2luZ0VuYWJsZWQgPSBmcmFtZS0+ZWRpdG9yKCktPmlzU3BlbGxD
aGVja2luZ0VuYWJsZWRGb3Iobm9kZSk7CisgICAgICAgIAorICAgICAgICBpZiAoIWluUGFzc3dv
cmRGaWVsZCAmJiBzcGVsbENoZWNraW5nRW5hYmxlZCkgeworICAgICAgICAgICAgLy8gQ29uc2lk
ZXIgYWRkaW5nIHNwZWxsaW5nLXJlbGF0ZWQgb3IgZ3JhbW1hci1yZWxhdGVkIGNvbnRleHQgbWVu
dSBpdGVtcyAobmV2ZXIgYm90aCwgc2luY2UgYSBzaW5nbGUgc2VsZWN0ZWQgcmFuZ2UKKyAgICAg
ICAgICAgIC8vIGlzIG5ldmVyIGNvbnNpZGVyZWQgYSBtaXNzcGVsbGluZyBhbmQgYmFkIGdyYW1t
YXIgYXQgdGhlIHNhbWUgdGltZSkKKyAgICAgICAgICAgIGJvb2wgbWlzc3BlbGxpbmc7CisgICAg
ICAgICAgICBib29sIGJhZEdyYW1tYXI7CisgICAgICAgICAgICBWZWN0b3I8U3RyaW5nPiBndWVz
c2VzID0gZnJhbWUtPmVkaXRvcigpLT5ndWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNh
bFNlbGVjdGlvbihtaXNzcGVsbGluZywgYmFkR3JhbW1hcik7CisgICAgICAgICAgICBpZiAobWlz
c3BlbGxpbmcgfHwgYmFkR3JhbW1hcikgeworICAgICAgICAgICAgICAgIHNpemVfdCBzaXplID0g
Z3Vlc3Nlcy5zaXplKCk7CisgICAgICAgICAgICAgICAgaWYgKHNpemUgPT0gMCkgeworICAgICAg
ICAgICAgICAgICAgICAvLyBJZiB0aGVyZSdzIGJhZCBncmFtbWFyIGJ1dCBubyBzdWdnZXN0aW9u
cyAoZS5nLiwgcmVwZWF0ZWQgd29yZCksIGp1c3QgbGVhdmUgb2ZmIHRoZSBzdWdnZXN0aW9ucwor
ICAgICAgICAgICAgICAgICAgICAvLyBsaXN0IGFuZCB0cmFpbGluZyBzZXBhcmF0b3IgcmF0aGVy
IHRoYW4gYWRkaW5nIGEgIk5vIEd1ZXNzZXMgRm91bmQiIGl0ZW0gKG1hdGNoZXMgQXBwS2l0KQor
ICAgICAgICAgICAgICAgICAgICBpZiAobWlzc3BlbGxpbmcpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGFwcGVuZEl0ZW0oTm9HdWVzc2VzSXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCksIG1fY29u
dGV4dE1lbnUuZ2V0KCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNp
emU7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nICZndWVzcyA9
IGd1ZXNzZXNbaV07CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWd1ZXNzLmlzRW1wdHko
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRleHRNZW51SXRlbSBpdGVtKEFj
dGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1NwZWxsaW5nR3Vlc3MsIGd1ZXNzKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKGl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0
KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSwgbV9jb250ZXh0
TWVudS5nZXQoKSk7ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKG1pc3NwZWxsaW5nKSB7CisgICAgICAg
ICAgICAgICAgICAgIGFwcGVuZEl0ZW0oSWdub3JlU3BlbGxpbmdJdGVtLCBtX2NvbnRleHRNZW51
LmdldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kSXRlbShMZWFyblNwZWxsaW5nSXRl
bSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICAgICAgICAgIGFwcGVuZEl0ZW0oSWdub3JlR3JhbW1hckl0ZW0sIG1fY29udGV4dE1lbnUu
Z2V0KCkpOworICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSwgbV9j
b250ZXh0TWVudS5nZXQoKSk7CisjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElO
R19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHN0cmluZyB3YXMgYXV0b2NvcnJl
Y3RlZCwgZ2VuZXJhdGUgYSBjb250ZXh0dWFsIG1lbnUgaXRlbSBhbGxvd2luZyBpdCB0byBiZSBj
aGFuZ2VkIGJhY2suCisgICAgICAgICAgICAgICAgU3RyaW5nIHJlcGxhY2VkU3RyaW5nID0gbV9o
aXRUZXN0UmVzdWx0LnJlcGxhY2VkU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgaWYgKCFyZXBs
YWNlZFN0cmluZy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgQ29udGV4dE1lbnVJ
dGVtIGl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnQ2hhbmdlQmFjaywgY29udGV4
dE1lbnVJdGVtVGFnQ2hhbmdlQmFjayhyZXBsYWNlZFN0cmluZykpOworICAgICAgICAgICAgICAg
ICAgICBhcHBlbmRJdGVtKGl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOworICAgICAgICAgICAg
ICAgICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCksIG1fY29udGV4dE1lbnUuZ2V0KCkp
OworICAgICAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgRnJhbWVMb2FkZXIqIGxvYWRlciA9IGZyYW1lLT5sb2FkZXIoKTsKKyAgICAgICAg
S1VSTCBsaW5rVVJMID0gbV9oaXRUZXN0UmVzdWx0LmFic29sdXRlTGlua1VSTCgpOworICAgICAg
ICBpZiAoIWxpbmtVUkwuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBpZiAobG9hZGVyLT5jYW5I
YW5kbGVSZXF1ZXN0KFJlc291cmNlUmVxdWVzdChsaW5rVVJMKSkpIHsKKyAgICAgICAgICAgICAg
ICBhcHBlbmRJdGVtKE9wZW5MaW5rSXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAg
ICAgICAgICAgYXBwZW5kSXRlbShPcGVuTGlua0luTmV3V2luZG93SXRlbSwgbV9jb250ZXh0TWVu
dS5nZXQoKSk7CisgICAgICAgICAgICAgICAgYXBwZW5kSXRlbShEb3dubG9hZEZpbGVJdGVtLCBt
X2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFwcGVuZEl0
ZW0oQ29weUxpbmtJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgICAgIGFwcGVu
ZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAgIH0K
KworICAgICAgICBpZiAobV9oaXRUZXN0UmVzdWx0LmlzU2VsZWN0ZWQoKSAmJiAhaW5QYXNzd29y
ZEZpZWxkICYmIHNlbGVjdGlvbkNvbnRhaW5zUG9zc2libGVXb3JkKGZyYW1lKSkgeworI2lmIFBM
QVRGT1JNKE1BQykKKyAgICAgICAgICAgIGFwcGVuZEl0ZW0oU2VhcmNoU3BvdGxpZ2h0SXRlbSwg
bV9jb250ZXh0TWVudS5nZXQoKSk7CisjZW5kaWYKKyNpZiAhUExBVEZPUk0oR1RLKQorICAgICAg
ICAgICAgYXBwZW5kSXRlbShTZWFyY2hXZWJJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAg
ICAgICAgICAgIGFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSwgbV9jb250ZXh0TWVudS5nZXQo
KSk7CisjZW5kaWYKKyAgICAgCisjaWYgUExBVEZPUk0oTUFDKQorICAgICAgICAgICAgYXBwZW5k
SXRlbShMb29rSW5EaWN0aW9uYXJ5SXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAg
ICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCksIG1fY29udGV4dE1lbnUuZ2V0KCkpOwor
I2VuZGlmCisgICAgICAgIH0KKworICAgICAgICBhcHBlbmRJdGVtKEN1dEl0ZW0sIG1fY29udGV4
dE1lbnUuZ2V0KCkpOworICAgICAgICBhcHBlbmRJdGVtKENvcHlJdGVtLCBtX2NvbnRleHRNZW51
LmdldCgpKTsKKyAgICAgICAgYXBwZW5kSXRlbShQYXN0ZUl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0
KCkpOworI2lmIFBMQVRGT1JNKEdUSykKKyAgICAgICAgYXBwZW5kSXRlbShEZWxldGVJdGVtLCBt
X2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgYXBwZW5kSXRlbSgqc2VwYXJhdG9ySXRlbSgp
LCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgYXBwZW5kSXRlbShTZWxlY3RBbGxJdGVt
LCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyNlbmRpZgorCisgICAgICAgIGlmICghaW5QYXNzd29y
ZEZpZWxkKSB7CisgICAgICAgICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCksIG1fY29u
dGV4dE1lbnUuZ2V0KCkpOworI2lmbmRlZiBCVUlMRElOR19PTl9USUdFUgorI2lmICFQTEFURk9S
TShHVEspCisgICAgICAgICAgICBDb250ZXh0TWVudUl0ZW0gU3BlbGxpbmdBbmRHcmFtbWFyTWVu
dUl0ZW0oU3VibWVudVR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1NwZWxsaW5nTWVudSwgCisgICAg
ICAgICAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnU3BlbGxpbmdNZW51KCkpOworICAgICAgICAg
ICAgY3JlYXRlQW5kQXBwZW5kU3BlbGxpbmdBbmRHcmFtbWFyU3ViTWVudShTcGVsbGluZ0FuZEdy
YW1tYXJNZW51SXRlbSk7CisgICAgICAgICAgICBhcHBlbmRJdGVtKFNwZWxsaW5nQW5kR3JhbW1h
ck1lbnVJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyNlbmRpZgorI2Vsc2UKKyAgICAgICAg
ICAgIENvbnRleHRNZW51SXRlbSBTcGVsbGluZ01lbnVJdGVtKFN1Ym1lbnVUeXBlLCBDb250ZXh0
TWVudUl0ZW1UYWdTcGVsbGluZ01lbnUsIAorICAgICAgICAgICAgICAgIGNvbnRleHRNZW51SXRl
bVRhZ1NwZWxsaW5nTWVudSgpKTsKKyAgICAgICAgICAgIGNyZWF0ZUFuZEFwcGVuZFNwZWxsaW5n
U3ViTWVudShTcGVsbGluZ01lbnVJdGVtKTsKKyAgICAgICAgICAgIGFwcGVuZEl0ZW0oU3BlbGxp
bmdNZW51SXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisjZW5kaWYKKyNpZiBQTEFURk9STShN
QUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19P
Tl9MRU9QQVJEKQorICAgICAgICAgICAgQ29udGV4dE1lbnVJdGVtIHN1YnN0aXR1dGlvbnNNZW51
SXRlbShTdWJtZW51VHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU3Vic3RpdHV0aW9uc01lbnUsIAor
ICAgICAgICAgICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ1N1YnN0aXR1dGlvbnNNZW51KCkpOwor
ICAgICAgICAgICAgY3JlYXRlQW5kQXBwZW5kU3Vic3RpdHV0aW9uc1N1Yk1lbnUoc3Vic3RpdHV0
aW9uc01lbnVJdGVtKTsKKyAgICAgICAgICAgIGFwcGVuZEl0ZW0oc3Vic3RpdHV0aW9uc01lbnVJ
dGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgICAgIENvbnRleHRNZW51SXRlbSB0
cmFuc2Zvcm1hdGlvbnNNZW51SXRlbShTdWJtZW51VHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnVHJh
bnNmb3JtYXRpb25zTWVudSwgCisgICAgICAgICAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnVHJh
bnNmb3JtYXRpb25zTWVudSgpKTsKKyAgICAgICAgICAgIGNyZWF0ZUFuZEFwcGVuZFRyYW5zZm9y
bWF0aW9uc1N1Yk1lbnUodHJhbnNmb3JtYXRpb25zTWVudUl0ZW0pOworICAgICAgICAgICAgYXBw
ZW5kSXRlbSh0cmFuc2Zvcm1hdGlvbnNNZW51SXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7Cisj
ZW5kaWYKKyNpZiBQTEFURk9STShHVEspCisgICAgICAgICAgICBib29sIHNob3VsZFNob3dGb250
TWVudSA9IGZyYW1lLT5lZGl0b3IoKS0+Y2FuRWRpdFJpY2hseSgpOworI2Vsc2UKKyAgICAgICAg
ICAgIGJvb2wgc2hvdWxkU2hvd0ZvbnRNZW51ID0gdHJ1ZTsKKyNlbmRpZgorICAgICAgICAgICAg
aWYgKHNob3VsZFNob3dGb250TWVudSkgeworICAgICAgICAgICAgICAgIENvbnRleHRNZW51SXRl
bSBGb250TWVudUl0ZW0oU3VibWVudVR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0ZvbnRNZW51LCAK
KyAgICAgICAgICAgICAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnRm9udE1lbnUoKSk7CisgICAg
ICAgICAgICAgICAgY3JlYXRlQW5kQXBwZW5kRm9udFN1Yk1lbnUoRm9udE1lbnVJdGVtKTsKKyAg
ICAgICAgICAgICAgICBhcHBlbmRJdGVtKEZvbnRNZW51SXRlbSwgbV9jb250ZXh0TWVudS5nZXQo
KSk7CisgICAgICAgICAgICB9CisjaWYgUExBVEZPUk0oTUFDKQorICAgICAgICAgICAgQ29udGV4
dE1lbnVJdGVtIFNwZWVjaE1lbnVJdGVtKFN1Ym1lbnVUeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdT
cGVlY2hNZW51LCBjb250ZXh0TWVudUl0ZW1UYWdTcGVlY2hNZW51KCkpOworICAgICAgICAgICAg
Y3JlYXRlQW5kQXBwZW5kU3BlZWNoU3ViTWVudShTcGVlY2hNZW51SXRlbSk7CisgICAgICAgICAg
ICBhcHBlbmRJdGVtKFNwZWVjaE1lbnVJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyNlbmRp
ZgorI2lmICFQTEFURk9STShHVEspCisgICAgICAgICAgICBDb250ZXh0TWVudUl0ZW0gV3JpdGlu
Z0RpcmVjdGlvbk1lbnVJdGVtKFN1Ym1lbnVUeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdXcml0aW5n
RGlyZWN0aW9uTWVudSwgCisgICAgICAgICAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnV3JpdGlu
Z0RpcmVjdGlvbk1lbnUoKSk7CisgICAgICAgICAgICBjcmVhdGVBbmRBcHBlbmRXcml0aW5nRGly
ZWN0aW9uU3ViTWVudShXcml0aW5nRGlyZWN0aW9uTWVudUl0ZW0pOworICAgICAgICAgICAgYXBw
ZW5kSXRlbShXcml0aW5nRGlyZWN0aW9uTWVudUl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOwor
ICAgICAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKFNldHRpbmdzKiBzZXR0aW5ncyA9IHBhZ2UtPnNldHRpbmdzKCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgYm9vbCBpbmNsdWRlVGV4dERpcmVjdGlvblN1Ym1lbnUgPSBzZXR0aW5n
cy0+dGV4dERpcmVjdGlvblN1Ym1lbnVJbmNsdXNpb25CZWhhdmlvcigpID09IFRleHREaXJlY3Rp
b25TdWJtZW51QWx3YXlzSW5jbHVkZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IChzZXR0
aW5ncy0+dGV4dERpcmVjdGlvblN1Ym1lbnVJbmNsdXNpb25CZWhhdmlvcigpID09IFRleHREaXJl
Y3Rpb25TdWJtZW51QXV0b21hdGljYWxseUluY2x1ZGVkICYmIGZyYW1lLT5lZGl0b3IoKS0+aGFz
QmlkaVNlbGVjdGlvbigpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGluY2x1ZGVUZXh0RGly
ZWN0aW9uU3VibWVudSkgeworICAgICAgICAgICAgICAgICAgICAgICAgQ29udGV4dE1lbnVJdGVt
IFRleHREaXJlY3Rpb25NZW51SXRlbShTdWJtZW51VHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnVGV4
dERpcmVjdGlvbk1lbnUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHRNZW51
SXRlbVRhZ1RleHREaXJlY3Rpb25NZW51KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgY3Jl
YXRlQW5kQXBwZW5kVGV4dERpcmVjdGlvblN1Yk1lbnUoVGV4dERpcmVjdGlvbk1lbnVJdGVtKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oVGV4dERpcmVjdGlvbk1lbnVJdGVt
LCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICB9CisgICAgfQorfQorCisj
aWYgRU5BQkxFKElOU1BFQ1RPUikKK3ZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjphZGRJbnNw
ZWN0RWxlbWVudEl0ZW0oKQoreworICAgIE5vZGUqIG5vZGUgPSBtX2hpdFRlc3RSZXN1bHQuaW5u
ZXJOb25TaGFyZWROb2RlKCk7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm47CisKKyAg
ICBGcmFtZSogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpOworICAgIGlmICghZnJh
bWUpCisgICAgICAgIHJldHVybjsKKworICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpOwor
ICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFwYWdlLT5pbnNwZWN0
b3JDb250cm9sbGVyKCkpCisgICAgICAgIHJldHVybjsKKworICAgIENvbnRleHRNZW51SXRlbSBJ
bnNwZWN0RWxlbWVudEl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnSW5zcGVjdEVs
ZW1lbnQsIGNvbnRleHRNZW51SXRlbVRhZ0luc3BlY3RFbGVtZW50KCkpOworICAgIGFwcGVuZEl0
ZW0oKnNlcGFyYXRvckl0ZW0oKSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgYXBwZW5kSXRl
bShJbnNwZWN0RWxlbWVudEl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOworfQorI2VuZGlmIC8v
IEVOQUJMRShJTlNQRUNUT1IpCisKK3ZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjpjaGVja09y
RW5hYmxlSWZOZWVkZWQoQ29udGV4dE1lbnVJdGVtJiBpdGVtKSBjb25zdAoreworICAgIGlmIChp
dGVtLnR5cGUoKSA9PSBTZXBhcmF0b3JUeXBlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
RnJhbWUqIGZyYW1lID0gbV9oaXRUZXN0UmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpLT5kb2N1
bWVudCgpLT5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAg
IC8vIEN1c3RvbSBpdGVtcyBhbHJlYWR5IGhhdmUgcHJvcGVyIGNoZWNrZWQgYW5kIGVuYWJsZWQg
dmFsdWVzLgorICAgIGlmIChDb250ZXh0TWVudUl0ZW1CYXNlQ3VzdG9tVGFnIDw9IGl0ZW0uYWN0
aW9uKCkgJiYgaXRlbS5hY3Rpb24oKSA8PSBDb250ZXh0TWVudUl0ZW1MYXN0Q3VzdG9tVGFnKQor
ICAgICAgICByZXR1cm47CisKKyAgICBib29sIHNob3VsZEVuYWJsZSA9IHRydWU7CisgICAgYm9v
bCBzaG91bGRDaGVjayA9IGZhbHNlOyAKKworICAgIHN3aXRjaCAoaXRlbS5hY3Rpb24oKSkgewor
ICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0NoZWNrU3BlbGxpbmc6CisgICAgICAgICAg
ICBzaG91bGRFbmFibGUgPSBmcmFtZS0+ZWRpdG9yKCktPmNhbkVkaXQoKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0RlZmF1bHREaXJlY3Rpb246
CisgICAgICAgICAgICBzaG91bGRDaGVjayA9IGZhbHNlOworICAgICAgICAgICAgc2hvdWxkRW5h
YmxlID0gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb250ZXh0TWVu
dUl0ZW1UYWdMZWZ0VG9SaWdodDoKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdSaWdo
dFRvTGVmdDogeworICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgICAgICAg
ICBSZWZQdHI8Q1NTU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+
Y3JlYXRlQ1NTU3R5bGVEZWNsYXJhdGlvbigpOworICAgICAgICAgICAgU3RyaW5nIGRpcmVjdGlv
biA9IGl0ZW0uYWN0aW9uKCkgPT0gQ29udGV4dE1lbnVJdGVtVGFnTGVmdFRvUmlnaHQgPyAibHRy
IiA6ICJydGwiOworICAgICAgICAgICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5RGly
ZWN0aW9uLCBkaXJlY3Rpb24sIGZhbHNlLCBlYyk7CisgICAgICAgICAgICBzaG91bGRDaGVjayA9
IGZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0aW9uSGFzU3R5bGUoc3R5bGUuZ2V0KCkpICE9IEZhbHNl
VHJpU3RhdGU7CisgICAgICAgICAgICBzaG91bGRFbmFibGUgPSB0cnVlOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdUZXh0RGly
ZWN0aW9uRGVmYXVsdDogeworICAgICAgICAgICAgRWRpdG9yOjpDb21tYW5kIGNvbW1hbmQgPSBm
cmFtZS0+ZWRpdG9yKCktPmNvbW1hbmQoIk1ha2VUZXh0V3JpdGluZ0RpcmVjdGlvbk5hdHVyYWwi
KTsKKyAgICAgICAgICAgIHNob3VsZENoZWNrID0gY29tbWFuZC5zdGF0ZSgpID09IFRydWVUcmlT
dGF0ZTsKKyAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGNvbW1hbmQuaXNFbmFibGVkKCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRl
bVRhZ1RleHREaXJlY3Rpb25MZWZ0VG9SaWdodDogeworICAgICAgICAgICAgRWRpdG9yOjpDb21t
YW5kIGNvbW1hbmQgPSBmcmFtZS0+ZWRpdG9yKCktPmNvbW1hbmQoIk1ha2VUZXh0V3JpdGluZ0Rp
cmVjdGlvbkxlZnRUb1JpZ2h0Iik7CisgICAgICAgICAgICBzaG91bGRDaGVjayA9IGNvbW1hbmQu
c3RhdGUoKSA9PSBUcnVlVHJpU3RhdGU7CisgICAgICAgICAgICBzaG91bGRFbmFibGUgPSBjb21t
YW5kLmlzRW5hYmxlZCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBDb250ZXh0TWVudUl0ZW1UYWdUZXh0RGlyZWN0aW9uUmlnaHRUb0xlZnQ6IHsKKyAgICAg
ICAgICAgIEVkaXRvcjo6Q29tbWFuZCBjb21tYW5kID0gZnJhbWUtPmVkaXRvcigpLT5jb21tYW5k
KCJNYWtlVGV4dFdyaXRpbmdEaXJlY3Rpb25SaWdodFRvTGVmdCIpOworICAgICAgICAgICAgc2hv
dWxkQ2hlY2sgPSBjb21tYW5kLnN0YXRlKCkgPT0gVHJ1ZVRyaVN0YXRlOworICAgICAgICAgICAg
c2hvdWxkRW5hYmxlID0gY29tbWFuZC5pc0VuYWJsZWQoKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQ29weToKKyAgICAgICAg
ICAgIHNob3VsZEVuYWJsZSA9IGZyYW1lLT5lZGl0b3IoKS0+Y2FuREhUTUxDb3B5KCkgfHwgZnJh
bWUtPmVkaXRvcigpLT5jYW5Db3B5KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBDb250ZXh0TWVudUl0ZW1UYWdDdXQ6CisgICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFt
ZS0+ZWRpdG9yKCktPmNhbkRIVE1MQ3V0KCkgfHwgZnJhbWUtPmVkaXRvcigpLT5jYW5DdXQoKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0lnbm9y
ZVNwZWxsaW5nOgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0xlYXJuU3BlbGxpbmc6
CisgICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+c2VsZWN0aW9uKCktPmlzUmFuZ2Uo
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1Bh
c3RlOgorICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gZnJhbWUtPmVkaXRvcigpLT5jYW5ESFRN
TFBhc3RlKCkgfHwgZnJhbWUtPmVkaXRvcigpLT5jYW5QYXN0ZSgpOworICAgICAgICAgICAgYnJl
YWs7CisjaWYgUExBVEZPUk0oR1RLKQorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0Rl
bGV0ZToKKyAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGZyYW1lLT5lZGl0b3IoKS0+Y2FuRGVs
ZXRlKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1U
YWdTZWxlY3RBbGw6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnSW5wdXRNZXRob2Rz
OgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1VuaWNvZGU6CisgICAgICAgICAgICBz
aG91bGRFbmFibGUgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICAgICAg
Y2FzZSBDb250ZXh0TWVudUl0ZW1UYWdVbmRlcmxpbmU6IHsKKyAgICAgICAgICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOworICAgICAgICAgICAgUmVmUHRyPENTU1N0eWxlRGVjbGFyYXRpb24+IHN0
eWxlID0gZnJhbWUtPmRvY3VtZW50KCktPmNyZWF0ZUNTU1N0eWxlRGVjbGFyYXRpb24oKTsKKyAg
ICAgICAgICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0
aW9uc0luRWZmZWN0LCAidW5kZXJsaW5lIiwgZmFsc2UsIGVjKTsKKyAgICAgICAgICAgIHNob3Vs
ZENoZWNrID0gZnJhbWUtPmVkaXRvcigpLT5zZWxlY3Rpb25IYXNTdHlsZShzdHlsZS5nZXQoKSkg
IT0gRmFsc2VUcmlTdGF0ZTsKKyAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGZyYW1lLT5lZGl0
b3IoKS0+Y2FuRWRpdFJpY2hseSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdMb29rVXBJbkRpY3Rpb25hcnk6CisgICAgICAg
ICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+c2VsZWN0aW9uKCktPmlzUmFuZ2UoKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0NoZWNrR3JhbW1h
cldpdGhTcGVsbGluZzoKKyNpZm5kZWYgQlVJTERJTkdfT05fVElHRVIKKyAgICAgICAgICAgIGlm
IChmcmFtZS0+ZWRpdG9yKCktPmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpKQorICAgICAgICAg
ICAgICAgIHNob3VsZENoZWNrID0gdHJ1ZTsKKyAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IHRy
dWU7CisjZW5kaWYKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbnRleHRNZW51
SXRlbVRhZ0l0YWxpYzogeworICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAg
ICAgICAgICBSZWZQdHI8Q1NTU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUgPSBmcmFtZS0+ZG9jdW1l
bnQoKS0+Y3JlYXRlQ1NTU3R5bGVEZWNsYXJhdGlvbigpOworICAgICAgICAgICAgc3R5bGUtPnNl
dFByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFN0eWxlLCAiaXRhbGljIiwgZmFsc2UsIGVjKTsKKyAg
ICAgICAgICAgIHNob3VsZENoZWNrID0gZnJhbWUtPmVkaXRvcigpLT5zZWxlY3Rpb25IYXNTdHls
ZShzdHlsZS5nZXQoKSkgIT0gRmFsc2VUcmlTdGF0ZTsKKyAgICAgICAgICAgIHNob3VsZEVuYWJs
ZSA9IGZyYW1lLT5lZGl0b3IoKS0+Y2FuRWRpdFJpY2hseSgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdCb2xkOiB7CisgICAg
ICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAgICAgIFJlZlB0cjxDU1NTdHls
ZURlY2xhcmF0aW9uPiBzdHlsZSA9IGZyYW1lLT5kb2N1bWVudCgpLT5jcmVhdGVDU1NTdHlsZURl
Y2xhcmF0aW9uKCk7CisgICAgICAgICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlG
b250V2VpZ2h0LCAiYm9sZCIsIGZhbHNlLCBlYyk7CisgICAgICAgICAgICBzaG91bGRDaGVjayA9
IGZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0aW9uSGFzU3R5bGUoc3R5bGUuZ2V0KCkpICE9IEZhbHNl
VHJpU3RhdGU7CisgICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+ZWRpdG9yKCktPmNh
bkVkaXRSaWNobHkoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNh
c2UgQ29udGV4dE1lbnVJdGVtVGFnT3V0bGluZToKKyAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9
IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVt
VGFnU2hvd1NwZWxsaW5nUGFuZWw6CisjaWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCisgICAgICAg
ICAgICBpZiAoZnJhbWUtPmVkaXRvcigpLT5zcGVsbGluZ1BhbmVsSXNTaG93aW5nKCkpCisgICAg
ICAgICAgICAgICAgaXRlbS5zZXRUaXRsZShjb250ZXh0TWVudUl0ZW1UYWdTaG93U3BlbGxpbmdQ
YW5lbChmYWxzZSkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGl0ZW0uc2V0
VGl0bGUoY29udGV4dE1lbnVJdGVtVGFnU2hvd1NwZWxsaW5nUGFuZWwodHJ1ZSkpOworI2VuZGlm
CisgICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+ZWRpdG9yKCktPmNhbkVkaXQoKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ05vR3Vl
c3Nlc0ZvdW5kOgorICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gZmFsc2U7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdDaGVja1NwZWxsaW5nV2hp
bGVUeXBpbmc6CisgICAgICAgICAgICBzaG91bGRDaGVjayA9IGZyYW1lLT5lZGl0b3IoKS0+aXND
b250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKTsKKyAgICAgICAgICAgIGJyZWFrOworI2lm
IFBMQVRGT1JNKE1BQykKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTdWJzdGl0dXRp
b25zTWVudToKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdUcmFuc2Zvcm1hdGlvbnNN
ZW51OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFn
U2hvd1N1YnN0aXR1dGlvbnM6CisjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFk
ZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpCisgICAgICAgICAgICBpZiAoZnJhbWUtPmVkaXRv
cigpLT5zdWJzdGl0dXRpb25zUGFuZWxJc1Nob3dpbmcoKSkKKyAgICAgICAgICAgICAgICBpdGVt
LnNldFRpdGxlKGNvbnRleHRNZW51SXRlbVRhZ1Nob3dTdWJzdGl0dXRpb25zKGZhbHNlKSk7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgaXRlbS5zZXRUaXRsZShjb250ZXh0TWVu
dUl0ZW1UYWdTaG93U3Vic3RpdHV0aW9ucyh0cnVlKSk7CisgICAgICAgICAgICBzaG91bGRFbmFi
bGUgPSBmcmFtZS0+ZWRpdG9yKCktPmNhbkVkaXQoKTsKKyNlbmRpZgorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnTWFrZVVwcGVyQ2FzZToKKyAgICAg
ICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdNYWtlTG93ZXJDYXNlOgorICAgICAgICBjYXNlIENv
bnRleHRNZW51SXRlbVRhZ0NhcGl0YWxpemU6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVt
VGFnQ2hhbmdlQmFjazoKKyAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGZyYW1lLT5lZGl0b3Io
KS0+Y2FuRWRpdCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29udGV4dE1l
bnVJdGVtVGFnQ29ycmVjdFNwZWxsaW5nQXV0b21hdGljYWxseToKKyNpZiAhZGVmaW5lZChCVUlM
RElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKKyAgICAgICAg
ICAgIHNob3VsZENoZWNrID0gZnJhbWUtPmVkaXRvcigpLT5pc0F1dG9tYXRpY1NwZWxsaW5nQ29y
cmVjdGlvbkVuYWJsZWQoKTsKKyNlbmRpZgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgQ29udGV4dE1lbnVJdGVtVGFnU21hcnRDb3B5UGFzdGU6CisjaWYgIWRlZmluZWQoQlVJTERJ
TkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpCisgICAgICAgICAg
ICBzaG91bGRDaGVjayA9IGZyYW1lLT5lZGl0b3IoKS0+c21hcnRJbnNlcnREZWxldGVFbmFibGVk
KCk7CisjZW5kaWYKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbnRleHRNZW51
SXRlbVRhZ1NtYXJ0UXVvdGVzOgorI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAh
ZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQorICAgICAgICAgICAgc2hvdWxkQ2hlY2sgPSBm
cmFtZS0+ZWRpdG9yKCktPmlzQXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb25FbmFibGVkKCk7Cisj
ZW5kaWYKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRh
Z1NtYXJ0RGFzaGVzOgorI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5l
ZChCVUlMRElOR19PTl9MRU9QQVJEKQorICAgICAgICAgICAgc2hvdWxkQ2hlY2sgPSBmcmFtZS0+
ZWRpdG9yKCktPmlzQXV0b21hdGljRGFzaFN1YnN0aXR1dGlvbkVuYWJsZWQoKTsKKyNlbmRpZgor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU21hcnRM
aW5rczoKKyNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJ
TkdfT05fTEVPUEFSRCkKKyAgICAgICAgICAgIHNob3VsZENoZWNrID0gZnJhbWUtPmVkaXRvcigp
LT5pc0F1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkKCk7CisjZW5kaWYKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1RleHRSZXBsYWNlbWVudDoK
KyNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05f
TEVPUEFSRCkKKyAgICAgICAgICAgIHNob3VsZENoZWNrID0gZnJhbWUtPmVkaXRvcigpLT5pc0F1
dG9tYXRpY1RleHRSZXBsYWNlbWVudEVuYWJsZWQoKTsKKyNlbmRpZgorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU3RvcFNwZWFraW5nOgorICAgICAg
ICAgICAgc2hvdWxkRW5hYmxlID0gY2xpZW50KCkgJiYgY2xpZW50KCktPmlzU3BlYWtpbmcoKTsK
KyAgICAgICAgICAgIGJyZWFrOworI2Vsc2UgLy8gUExBVEZPUk0oTUFDKSBlbmRzIGhlcmUKKyAg
ICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTdG9wU3BlYWtpbmc6CisgICAgICAgICAgICBi
cmVhazsKKyNlbmRpZgorI2lmIFBMQVRGT1JNKEdUSykKKyAgICAgICAgY2FzZSBDb250ZXh0TWVu
dUl0ZW1UYWdHb0JhY2s6CisgICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+cGFnZSgp
ICYmIGZyYW1lLT5wYWdlKCktPmJhY2tGb3J3YXJkKCktPmNhbkdvQmFja09yRm9yd2FyZCgtMSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdHb0Zv
cndhcmQ6CisgICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+cGFnZSgpICYmIGZyYW1l
LT5wYWdlKCktPmJhY2tGb3J3YXJkKCktPmNhbkdvQmFja09yRm9yd2FyZCgxKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1N0b3A6CisgICAgICAg
ICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPmlz
TG9hZGluZ0luQVBJU2Vuc2UoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENv
bnRleHRNZW51SXRlbVRhZ1JlbG9hZDoKKyAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9ICFmcmFt
ZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPmlzTG9hZGluZ0luQVBJU2Vuc2UoKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0ZvbnRNZW51
OgorICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gZnJhbWUtPmVkaXRvcigpLT5jYW5FZGl0Umlj
aGx5KCk7CisgICAgICAgICAgICBicmVhazsKKyNlbHNlCisgICAgICAgIGNhc2UgQ29udGV4dE1l
bnVJdGVtVGFnR29CYWNrOgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0dvRm9yd2Fy
ZDoKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTdG9wOgorICAgICAgICBjYXNlIENv
bnRleHRNZW51SXRlbVRhZ1JlbG9hZDoKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdG
b250TWVudToKKyNlbmRpZgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ05vQWN0aW9u
OgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5MaW5rSW5OZXdXaW5kb3c6Cisg
ICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnRG93bmxvYWRMaW5rVG9EaXNrOgorICAgICAg
ICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0NvcHlMaW5rVG9DbGlwYm9hcmQ6CisgICAgICAgIGNh
c2UgQ29udGV4dE1lbnVJdGVtVGFnT3BlbkltYWdlSW5OZXdXaW5kb3c6CisgICAgICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtVGFnRG93bmxvYWRJbWFnZVRvRGlzazoKKyAgICAgICAgY2FzZSBDb250
ZXh0TWVudUl0ZW1UYWdDb3B5SW1hZ2VUb0NsaXBib2FyZDoKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5NZWRpYUluTmV3V2luZG93OgorICAg
ICAgICAgICAgaWYgKG1faGl0VGVzdFJlc3VsdC5tZWRpYUlzVmlkZW8oKSkKKyAgICAgICAgICAg
ICAgICBpdGVtLnNldFRpdGxlKGNvbnRleHRNZW51SXRlbVRhZ09wZW5WaWRlb0luTmV3V2luZG93
KCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGl0ZW0uc2V0VGl0bGUoY29u
dGV4dE1lbnVJdGVtVGFnT3BlbkF1ZGlvSW5OZXdXaW5kb3coKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdDb3B5TWVkaWFMaW5rVG9DbGlwYm9h
cmQ6CisgICAgICAgICAgICBpZiAobV9oaXRUZXN0UmVzdWx0Lm1lZGlhSXNWaWRlbygpKQorICAg
ICAgICAgICAgICAgIGl0ZW0uc2V0VGl0bGUoY29udGV4dE1lbnVJdGVtVGFnQ29weVZpZGVvTGlu
a1RvQ2xpcGJvYXJkKCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGl0ZW0u
c2V0VGl0bGUoY29udGV4dE1lbnVJdGVtVGFnQ29weUF1ZGlvTGlua1RvQ2xpcGJvYXJkKCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnVG9nZ2xl
TWVkaWFDb250cm9sczoKKyAgICAgICAgICAgIHNob3VsZENoZWNrID0gbV9oaXRUZXN0UmVzdWx0
Lm1lZGlhQ29udHJvbHNFbmFibGVkKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBDb250ZXh0TWVudUl0ZW1UYWdUb2dnbGVNZWRpYUxvb3A6CisgICAgICAgICAgICBzaG91bGRD
aGVjayA9IG1faGl0VGVzdFJlc3VsdC5tZWRpYUxvb3BFbmFibGVkKCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdFbnRlclZpZGVvRnVsbHNjcmVl
bjoKKyAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IG1faGl0VGVzdFJlc3VsdC5tZWRpYVN1cHBv
cnRzRnVsbHNjcmVlbigpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29udGV4
dE1lbnVJdGVtVGFnT3BlbkZyYW1lSW5OZXdXaW5kb3c6CisgICAgICAgIGNhc2UgQ29udGV4dE1l
bnVJdGVtVGFnU3BlbGxpbmdHdWVzczoKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdP
dGhlcjoKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTZWFyY2hJblNwb3RsaWdodDoK
KyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTZWFyY2hXZWI6CisgICAgICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtVGFnT3BlbldpdGhEZWZhdWx0QXBwbGljYXRpb246CisgICAgICAgIGNh
c2UgQ29udGV4dE1lbnVJdGVtUERGQWN0dWFsU2l6ZToKKyAgICAgICAgY2FzZSBDb250ZXh0TWVu
dUl0ZW1QREZab29tSW46CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtUERGWm9vbU91dDoK
KyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1QREZBdXRvU2l6ZToKKyAgICAgICAgY2FzZSBD
b250ZXh0TWVudUl0ZW1QREZTaW5nbGVQYWdlOgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRl
bVBERkZhY2luZ1BhZ2VzOgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVBERkNvbnRpbnVv
dXM6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtUERGTmV4dFBhZ2U6CisgICAgICAgIGNh
c2UgQ29udGV4dE1lbnVJdGVtUERGUHJldmlvdXNQYWdlOgorICAgICAgICBjYXNlIENvbnRleHRN
ZW51SXRlbVRhZ09wZW5MaW5rOgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0lnbm9y
ZUdyYW1tYXI6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU3BlbGxpbmdNZW51Ogor
ICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1Nob3dGb250czoKKyAgICAgICAgY2FzZSBD
b250ZXh0TWVudUl0ZW1UYWdTdHlsZXM6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFn
U2hvd0NvbG9yczoKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTcGVlY2hNZW51Ogor
ICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1N0YXJ0U3BlYWtpbmc6CisgICAgICAgIGNh
c2UgQ29udGV4dE1lbnVJdGVtVGFnV3JpdGluZ0RpcmVjdGlvbk1lbnU6CisgICAgICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtVGFnVGV4dERpcmVjdGlvbk1lbnU6CisgICAgICAgIGNhc2UgQ29udGV4
dE1lbnVJdGVtVGFnUERGU2luZ2xlUGFnZVNjcm9sbGluZzoKKyAgICAgICAgY2FzZSBDb250ZXh0
TWVudUl0ZW1UYWdQREZGYWNpbmdQYWdlc1Njcm9sbGluZzoKKyNpZiBFTkFCTEUoSU5TUEVDVE9S
KQorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0luc3BlY3RFbGVtZW50OgorI2VuZGlm
CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtQmFzZUN1c3RvbVRhZzoKKyAgICAgICAgY2Fz
ZSBDb250ZXh0TWVudUl0ZW1DdXN0b21UYWdOb0FjdGlvbjoKKyAgICAgICAgY2FzZSBDb250ZXh0
TWVudUl0ZW1MYXN0Q3VzdG9tVGFnOgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbUJhc2VB
cHBsaWNhdGlvblRhZzoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbnRleHRN
ZW51SXRlbVRhZ01lZGlhUGxheVBhdXNlOgorICAgICAgICAgICAgaWYgKG1faGl0VGVzdFJlc3Vs
dC5tZWRpYVBsYXlpbmcoKSkKKyAgICAgICAgICAgICAgICBpdGVtLnNldFRpdGxlKGNvbnRleHRN
ZW51SXRlbVRhZ01lZGlhUGF1c2UoKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgaXRlbS5zZXRUaXRsZShjb250ZXh0TWVudUl0ZW1UYWdNZWRpYVBsYXkoKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdNZWRpYU11dGU6Cisg
ICAgICAgICAgICBzaG91bGRFbmFibGUgPSBtX2hpdFRlc3RSZXN1bHQubWVkaWFIYXNBdWRpbygp
OworICAgICAgICAgICAgc2hvdWxkQ2hlY2sgPSBzaG91bGRFbmFibGUgJiYgIG1faGl0VGVzdFJl
c3VsdC5tZWRpYU11dGVkKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpdGVt
LnNldENoZWNrZWQoc2hvdWxkQ2hlY2spOworICAgIGl0ZW0uc2V0RW5hYmxlZChzaG91bGRFbmFi
bGUpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoQ09O
VEVYVF9NRU5VUykKSW5kZXg6IFdlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmgJKHJldmlz
aW9uIDczNDY5KQorKysgV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIENvbnRleHRNZW51Q29udHJvbGxl
cl9oCiAjZGVmaW5lIENvbnRleHRNZW51Q29udHJvbGxlcl9oCiAKKyNpbmNsdWRlICJIaXRUZXN0
UmVzdWx0LmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL093
blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CkBAIC00NSw3ICs0Niw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgQ29udGV4dE1lbnVDb250cm9sbGVyKFBhZ2UqLCBD
b250ZXh0TWVudUNsaWVudCopOwogICAgICAgICB+Q29udGV4dE1lbnVDb250cm9sbGVyKCk7CiAK
LSAgICAgICAgQ29udGV4dE1lbnVDbGllbnQqIGNsaWVudCgpIHsgcmV0dXJuIG1fY2xpZW50OyB9
CisgICAgICAgIENvbnRleHRNZW51Q2xpZW50KiBjbGllbnQoKSBjb25zdCB7IHJldHVybiBtX2Ns
aWVudDsgfQogCiAgICAgICAgIENvbnRleHRNZW51KiBjb250ZXh0TWVudSgpIGNvbnN0IHsgcmV0
dXJuIG1fY29udGV4dE1lbnUuZ2V0KCk7IH0KICAgICAgICAgdm9pZCBjbGVhckNvbnRleHRNZW51
KCk7CkBAIC01MywxNiArNTQsMzUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lk
IGhhbmRsZUNvbnRleHRNZW51RXZlbnQoRXZlbnQqKTsKICAgICAgICAgdm9pZCBzaG93Q29udGV4
dE1lbnUoRXZlbnQqLCBQYXNzUmVmUHRyPENvbnRleHRNZW51UHJvdmlkZXI+KTsKIAorICAgICAg
ICB2b2lkIHBvcHVsYXRlKCk7CiAgICAgICAgIHZvaWQgY29udGV4dE1lbnVJdGVtU2VsZWN0ZWQo
Q29udGV4dE1lbnVJdGVtKik7CisgICAgICAgIHZvaWQgYWRkSW5zcGVjdEVsZW1lbnRJdGVtKCk7
CisKKyAgICAgICAgdm9pZCBjaGVja09yRW5hYmxlSWZOZWVkZWQoQ29udGV4dE1lbnVJdGVtJikg
Y29uc3Q7CisKKyAgICAgICAgdm9pZCBzZXRIaXRUZXN0UmVzdWx0KGNvbnN0IEhpdFRlc3RSZXN1
bHQmIHJlc3VsdCkgeyBtX2hpdFRlc3RSZXN1bHQgPSByZXN1bHQ7IH0KKyAgICAgICAgY29uc3Qg
SGl0VGVzdFJlc3VsdCYgaGl0VGVzdFJlc3VsdCgpIHsgcmV0dXJuIG1faGl0VGVzdFJlc3VsdDsg
fQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgQ29udGV4dE1lbnUqIGNyZWF0ZUNvbnRleHRNZW51
KEV2ZW50Kik7CisgICAgICAgIFBhc3NPd25QdHI8Q29udGV4dE1lbnU+IGNyZWF0ZUNvbnRleHRN
ZW51KEV2ZW50Kik7CiAgICAgICAgIHZvaWQgc2hvd0NvbnRleHRNZW51KEV2ZW50Kik7CisgICAg
ICAgIAorICAgICAgICB2b2lkIGFwcGVuZEl0ZW0oQ29udGV4dE1lbnVJdGVtJiwgQ29udGV4dE1l
bnUqIHBhcmVudE1lbnUpOworCisgICAgICAgIHZvaWQgY3JlYXRlQW5kQXBwZW5kRm9udFN1Yk1l
bnUoQ29udGV4dE1lbnVJdGVtJik7CisgICAgICAgIHZvaWQgY3JlYXRlQW5kQXBwZW5kU3BlbGxp
bmdBbmRHcmFtbWFyU3ViTWVudShDb250ZXh0TWVudUl0ZW0mKTsKKyAgICAgICAgdm9pZCBjcmVh
dGVBbmRBcHBlbmRTcGVsbGluZ1N1Yk1lbnUoQ29udGV4dE1lbnVJdGVtJik7CisgICAgICAgIHZv
aWQgY3JlYXRlQW5kQXBwZW5kU3BlZWNoU3ViTWVudShDb250ZXh0TWVudUl0ZW0mICk7CisgICAg
ICAgIHZvaWQgY3JlYXRlQW5kQXBwZW5kV3JpdGluZ0RpcmVjdGlvblN1Yk1lbnUoQ29udGV4dE1l
bnVJdGVtJik7CisgICAgICAgIHZvaWQgY3JlYXRlQW5kQXBwZW5kVGV4dERpcmVjdGlvblN1Yk1l
bnUoQ29udGV4dE1lbnVJdGVtJik7CisgICAgICAgIHZvaWQgY3JlYXRlQW5kQXBwZW5kU3Vic3Rp
dHV0aW9uc1N1Yk1lbnUoQ29udGV4dE1lbnVJdGVtJik7CisgICAgICAgIHZvaWQgY3JlYXRlQW5k
QXBwZW5kVHJhbnNmb3JtYXRpb25zU3ViTWVudShDb250ZXh0TWVudUl0ZW0mKTsKIAogICAgICAg
ICBQYWdlKiBtX3BhZ2U7CiAgICAgICAgIENvbnRleHRNZW51Q2xpZW50KiBtX2NsaWVudDsKICAg
ICAgICAgT3duUHRyPENvbnRleHRNZW51PiBtX2NvbnRleHRNZW51OwogICAgICAgICBSZWZQdHI8
Q29udGV4dE1lbnVQcm92aWRlcj4gbV9tZW51UHJvdmlkZXI7CisgICAgICAgIEhpdFRlc3RSZXN1
bHQgbV9oaXRUZXN0UmVzdWx0OwogICAgIH07CiAKIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Q29udGV4dE1lbnUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vQ29udGV4dE1l
bnUuY3BwCShyZXZpc2lvbiA3MzQ2OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vQ29udGV4dE1lbnUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDg5MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAwOCBDaHJpc3RpYW4gRHl3YW4gPGNocmlzdGlhbkBpbWVuZGlvLmNvbT4KLSAqIENv
cHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJDb250ZXh0TWVudS5oIgotCi0jaWYgRU5BQkxFKENPTlRFWFRfTUVOVVMpCi0K
LSNpbmNsdWRlICJCYWNrRm9yd2FyZENvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJDb250ZXh0TWVu
dUNvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJDb250ZXh0TWVudUNsaWVudC5oIgotI2luY2x1ZGUg
IkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oIgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5Lmgi
Ci0jaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0j
aW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKLSNpbmNsdWRlICJFZGl0b3IuaCIKLSNpbmNsdWRl
ICJGcmFtZS5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9y
Q29udHJvbGxlci5oIgotI2luY2x1ZGUgIktVUkwuaCIKLSNpbmNsdWRlICJMb2NhbGl6ZWRTdHJp
bmdzLmgiCi0jaW5jbHVkZSAiTm9kZS5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJS
ZXNvdXJjZVJlcXVlc3QuaCIKLSNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCi0jaW5j
bHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKLSNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci11c2luZyBuYW1lc3Bh
Y2UgV1RGOwotdXNpbmcgbmFtZXNwYWNlIFVuaWNvZGU7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotQ29udGV4dE1lbnVDb250cm9sbGVyKiBDb250ZXh0TWVudTo6Y29udHJvbGxlcigpIGNvbnN0
Ci17Ci0gICAgaWYgKE5vZGUqIG5vZGUgPSBtX2hpdFRlc3RSZXN1bHQuaW5uZXJOb25TaGFyZWRO
b2RlKCkpCi0gICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLT5mcmFt
ZSgpKQotICAgICAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBwYWdlLT5jb250ZXh0TWVudUNvbnRyb2xsZXIoKTsKLSAgICByZXR1
cm4gMDsKLX0KLQotc3RhdGljIFBhc3NPd25QdHI8Q29udGV4dE1lbnVJdGVtPiBzZXBhcmF0b3JJ
dGVtKCkKLXsKLSAgICByZXR1cm4gbmV3IENvbnRleHRNZW51SXRlbShTZXBhcmF0b3JUeXBlLCBD
b250ZXh0TWVudUl0ZW1UYWdOb0FjdGlvbiwgU3RyaW5nKCkpOwotfQotCi1zdGF0aWMgdm9pZCBj
cmVhdGVBbmRBcHBlbmRGb250U3ViTWVudShjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIENv
bnRleHRNZW51SXRlbSYgZm9udE1lbnVJdGVtKQotewotICAgIENvbnRleHRNZW51IGZvbnRNZW51
KHJlc3VsdCk7Ci0KLSNpZiBQTEFURk9STShNQUMpCi0gICAgQ29udGV4dE1lbnVJdGVtIHNob3dG
b250cyhBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTaG93Rm9udHMsIGNvbnRleHRNZW51
SXRlbVRhZ1Nob3dGb250cygpKTsKLSNlbmRpZgotICAgIENvbnRleHRNZW51SXRlbSBib2xkKENo
ZWNrYWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0JvbGQsIGNvbnRleHRNZW51SXRl
bVRhZ0JvbGQoKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIGl0YWxpYyhDaGVja2FibGVBY3Rpb25U
eXBlLCBDb250ZXh0TWVudUl0ZW1UYWdJdGFsaWMsIGNvbnRleHRNZW51SXRlbVRhZ0l0YWxpYygp
KTsKLSAgICBDb250ZXh0TWVudUl0ZW0gdW5kZXJsaW5lKENoZWNrYWJsZUFjdGlvblR5cGUsIENv
bnRleHRNZW51SXRlbVRhZ1VuZGVybGluZSwgY29udGV4dE1lbnVJdGVtVGFnVW5kZXJsaW5lKCkp
OwotICAgIENvbnRleHRNZW51SXRlbSBvdXRsaW5lKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRl
bVRhZ091dGxpbmUsIGNvbnRleHRNZW51SXRlbVRhZ091dGxpbmUoKSk7Ci0jaWYgUExBVEZPUk0o
TUFDKQotICAgIENvbnRleHRNZW51SXRlbSBzdHlsZXMoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJ
dGVtVGFnU3R5bGVzLCBjb250ZXh0TWVudUl0ZW1UYWdTdHlsZXMoKSk7Ci0gICAgQ29udGV4dE1l
bnVJdGVtIHNob3dDb2xvcnMoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU2hvd0NvbG9y
cywgY29udGV4dE1lbnVJdGVtVGFnU2hvd0NvbG9ycygpKTsKLSNlbmRpZgotCi0jaWYgUExBVEZP
Uk0oTUFDKQotICAgIGZvbnRNZW51LmFwcGVuZEl0ZW0oc2hvd0ZvbnRzKTsKLSNlbmRpZgotICAg
IGZvbnRNZW51LmFwcGVuZEl0ZW0oYm9sZCk7Ci0gICAgZm9udE1lbnUuYXBwZW5kSXRlbShpdGFs
aWMpOwotICAgIGZvbnRNZW51LmFwcGVuZEl0ZW0odW5kZXJsaW5lKTsKLSAgICBmb250TWVudS5h
cHBlbmRJdGVtKG91dGxpbmUpOwotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBmb250TWVudS5hcHBl
bmRJdGVtKHN0eWxlcyk7Ci0gICAgZm9udE1lbnUuYXBwZW5kSXRlbSgqc2VwYXJhdG9ySXRlbSgp
KTsKLSAgICBmb250TWVudS5hcHBlbmRJdGVtKHNob3dDb2xvcnMpOwotI2VuZGlmCi0KLSAgICBm
b250TWVudUl0ZW0uc2V0U3ViTWVudSgmZm9udE1lbnUpOwotfQotCi0jaWYgIWRlZmluZWQoQlVJ
TERJTkdfT05fVElHRVIpCi0KLSNpZiAhUExBVEZPUk0oR1RLKQotCi1zdGF0aWMgdm9pZCBjcmVh
dGVBbmRBcHBlbmRTcGVsbGluZ0FuZEdyYW1tYXJTdWJNZW51KGNvbnN0IEhpdFRlc3RSZXN1bHQm
IHJlc3VsdCwgQ29udGV4dE1lbnVJdGVtJiBzcGVsbGluZ0FuZEdyYW1tYXJNZW51SXRlbSkKLXsK
LSAgICBDb250ZXh0TWVudSBzcGVsbGluZ0FuZEdyYW1tYXJNZW51KHJlc3VsdCk7Ci0KLSAgICBD
b250ZXh0TWVudUl0ZW0gc2hvd1NwZWxsaW5nUGFuZWwoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJ
dGVtVGFnU2hvd1NwZWxsaW5nUGFuZWwsIAotICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdTaG93
U3BlbGxpbmdQYW5lbCh0cnVlKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIGNoZWNrU3BlbGxpbmco
QWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnQ2hlY2tTcGVsbGluZywgCi0gICAgICAgIGNv
bnRleHRNZW51SXRlbVRhZ0NoZWNrU3BlbGxpbmcoKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIGNo
ZWNrQXNZb3VUeXBlKENoZWNrYWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0NoZWNr
U3BlbGxpbmdXaGlsZVR5cGluZywgCi0gICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ0NoZWNrU3Bl
bGxpbmdXaGlsZVR5cGluZygpKTsKLSAgICBDb250ZXh0TWVudUl0ZW0gZ3JhbW1hcldpdGhTcGVs
bGluZyhDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdDaGVja0dyYW1tYXJX
aXRoU3BlbGxpbmcsIAotICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdDaGVja0dyYW1tYXJXaXRo
U3BlbGxpbmcoKSk7Ci0jaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9M
RU9QQVJEKQotICAgIENvbnRleHRNZW51SXRlbSBjb3JyZWN0U3BlbGxpbmcoQ2hlY2thYmxlQWN0
aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnQ29ycmVjdFNwZWxsaW5nQXV0b21hdGljYWxseSwg
Ci0gICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ0NvcnJlY3RTcGVsbGluZ0F1dG9tYXRpY2FsbHko
KSk7Ci0jZW5kaWYKLQotICAgIHNwZWxsaW5nQW5kR3JhbW1hck1lbnUuYXBwZW5kSXRlbShzaG93
U3BlbGxpbmdQYW5lbCk7Ci0gICAgc3BlbGxpbmdBbmRHcmFtbWFyTWVudS5hcHBlbmRJdGVtKGNo
ZWNrU3BlbGxpbmcpOwotI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05f
TEVPUEFSRCkKLSAgICBzcGVsbGluZ0FuZEdyYW1tYXJNZW51LmFwcGVuZEl0ZW0oKnNlcGFyYXRv
ckl0ZW0oKSk7Ci0jZW5kaWYKLSAgICBzcGVsbGluZ0FuZEdyYW1tYXJNZW51LmFwcGVuZEl0ZW0o
Y2hlY2tBc1lvdVR5cGUpOwotICAgIHNwZWxsaW5nQW5kR3JhbW1hck1lbnUuYXBwZW5kSXRlbShn
cmFtbWFyV2l0aFNwZWxsaW5nKTsKLSNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxE
SU5HX09OX0xFT1BBUkQpCi0gICAgc3BlbGxpbmdBbmRHcmFtbWFyTWVudS5hcHBlbmRJdGVtKGNv
cnJlY3RTcGVsbGluZyk7Ci0jZW5kaWYKLQotICAgIHNwZWxsaW5nQW5kR3JhbW1hck1lbnVJdGVt
LnNldFN1Yk1lbnUoJnNwZWxsaW5nQW5kR3JhbW1hck1lbnUpOwotfQotCi0jZW5kaWYgLy8gIVBM
QVRGT1JNKEdUSykKLQotI2Vsc2UKLQotc3RhdGljIHZvaWQgY3JlYXRlQW5kQXBwZW5kU3BlbGxp
bmdTdWJNZW51KGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgQ29udGV4dE1lbnVJdGVtJiBz
cGVsbGluZ01lbnVJdGVtKQotewotICAgIENvbnRleHRNZW51IHNwZWxsaW5nTWVudShyZXN1bHQp
OwotCi0gICAgQ29udGV4dE1lbnVJdGVtIHNob3dTcGVsbGluZ1BhbmVsKEFjdGlvblR5cGUsIENv
bnRleHRNZW51SXRlbVRhZ1Nob3dTcGVsbGluZ1BhbmVsLCAKLSAgICAgICAgY29udGV4dE1lbnVJ
dGVtVGFnU2hvd1NwZWxsaW5nUGFuZWwodHJ1ZSkpOwotICAgIENvbnRleHRNZW51SXRlbSBjaGVj
a1NwZWxsaW5nKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0NoZWNrU3BlbGxpbmcsIAot
ICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdDaGVja1NwZWxsaW5nKCkpOwotICAgIENvbnRleHRN
ZW51SXRlbSBjaGVja0FzWW91VHlwZShDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0
ZW1UYWdDaGVja1NwZWxsaW5nV2hpbGVUeXBpbmcsIAotICAgICAgICBjb250ZXh0TWVudUl0ZW1U
YWdDaGVja1NwZWxsaW5nV2hpbGVUeXBpbmcoKSk7Ci0KLSAgICBzcGVsbGluZ01lbnUuYXBwZW5k
SXRlbShzaG93U3BlbGxpbmdQYW5lbCk7Ci0gICAgc3BlbGxpbmdNZW51LmFwcGVuZEl0ZW0oY2hl
Y2tTcGVsbGluZyk7Ci0gICAgc3BlbGxpbmdNZW51LmFwcGVuZEl0ZW0oY2hlY2tBc1lvdVR5cGUp
OwotCi0gICAgc3BlbGxpbmdNZW51SXRlbS5zZXRTdWJNZW51KCZzcGVsbGluZ01lbnUpOwotfQot
Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKE1BQykKLQotc3RhdGljIHZvaWQgY3JlYXRlQW5kQXBw
ZW5kU3BlZWNoU3ViTWVudShjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIENvbnRleHRNZW51
SXRlbSYgc3BlZWNoTWVudUl0ZW0pCi17Ci0gICAgQ29udGV4dE1lbnUgc3BlZWNoTWVudShyZXN1
bHQpOwotCi0gICAgQ29udGV4dE1lbnVJdGVtIHN0YXJ0KEFjdGlvblR5cGUsIENvbnRleHRNZW51
SXRlbVRhZ1N0YXJ0U3BlYWtpbmcsIGNvbnRleHRNZW51SXRlbVRhZ1N0YXJ0U3BlYWtpbmcoKSk7
Ci0gICAgQ29udGV4dE1lbnVJdGVtIHN0b3AoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFn
U3RvcFNwZWFraW5nLCBjb250ZXh0TWVudUl0ZW1UYWdTdG9wU3BlYWtpbmcoKSk7Ci0KLSAgICBz
cGVlY2hNZW51LmFwcGVuZEl0ZW0oc3RhcnQpOwotICAgIHNwZWVjaE1lbnUuYXBwZW5kSXRlbShz
dG9wKTsKLQotICAgIHNwZWVjaE1lbnVJdGVtLnNldFN1Yk1lbnUoJnNwZWVjaE1lbnUpOwotfQot
Ci0jZW5kaWYKLSAKLSNpZiAhUExBVEZPUk0oR1RLKQotCi1zdGF0aWMgdm9pZCBjcmVhdGVBbmRB
cHBlbmRXcml0aW5nRGlyZWN0aW9uU3ViTWVudShjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQs
IENvbnRleHRNZW51SXRlbSYgd3JpdGluZ0RpcmVjdGlvbk1lbnVJdGVtKQotewotICAgIENvbnRl
eHRNZW51IHdyaXRpbmdEaXJlY3Rpb25NZW51KHJlc3VsdCk7Ci0KLSAgICBDb250ZXh0TWVudUl0
ZW0gZGVmYXVsdEl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnRGVmYXVsdERpcmVj
dGlvbiwgCi0gICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ0RlZmF1bHREaXJlY3Rpb24oKSk7Ci0g
ICAgQ29udGV4dE1lbnVJdGVtIGx0cihDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0
ZW1UYWdMZWZ0VG9SaWdodCwgY29udGV4dE1lbnVJdGVtVGFnTGVmdFRvUmlnaHQoKSk7Ci0gICAg
Q29udGV4dE1lbnVJdGVtIHJ0bChDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1U
YWdSaWdodFRvTGVmdCwgY29udGV4dE1lbnVJdGVtVGFnUmlnaHRUb0xlZnQoKSk7Ci0KLSAgICB3
cml0aW5nRGlyZWN0aW9uTWVudS5hcHBlbmRJdGVtKGRlZmF1bHRJdGVtKTsKLSAgICB3cml0aW5n
RGlyZWN0aW9uTWVudS5hcHBlbmRJdGVtKGx0cik7Ci0gICAgd3JpdGluZ0RpcmVjdGlvbk1lbnUu
YXBwZW5kSXRlbShydGwpOwotCi0gICAgd3JpdGluZ0RpcmVjdGlvbk1lbnVJdGVtLnNldFN1Yk1l
bnUoJndyaXRpbmdEaXJlY3Rpb25NZW51KTsKLX0KLQotc3RhdGljIHZvaWQgY3JlYXRlQW5kQXBw
ZW5kVGV4dERpcmVjdGlvblN1Yk1lbnUoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBDb250
ZXh0TWVudUl0ZW0mIHRleHREaXJlY3Rpb25NZW51SXRlbSkKLXsKLSAgICBDb250ZXh0TWVudSB0
ZXh0RGlyZWN0aW9uTWVudShyZXN1bHQpOwotCi0gICAgQ29udGV4dE1lbnVJdGVtIGRlZmF1bHRJ
dGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1RleHREaXJlY3Rpb25EZWZhdWx0LCBj
b250ZXh0TWVudUl0ZW1UYWdEZWZhdWx0RGlyZWN0aW9uKCkpOwotICAgIENvbnRleHRNZW51SXRl
bSBsdHIoQ2hlY2thYmxlQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnVGV4dERpcmVjdGlv
bkxlZnRUb1JpZ2h0LCBjb250ZXh0TWVudUl0ZW1UYWdMZWZ0VG9SaWdodCgpKTsKLSAgICBDb250
ZXh0TWVudUl0ZW0gcnRsKENoZWNrYWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1Rl
eHREaXJlY3Rpb25SaWdodFRvTGVmdCwgY29udGV4dE1lbnVJdGVtVGFnUmlnaHRUb0xlZnQoKSk7
Ci0KLSAgICB0ZXh0RGlyZWN0aW9uTWVudS5hcHBlbmRJdGVtKGRlZmF1bHRJdGVtKTsKLSAgICB0
ZXh0RGlyZWN0aW9uTWVudS5hcHBlbmRJdGVtKGx0cik7Ci0gICAgdGV4dERpcmVjdGlvbk1lbnUu
YXBwZW5kSXRlbShydGwpOwotCi0gICAgdGV4dERpcmVjdGlvbk1lbnVJdGVtLnNldFN1Yk1lbnUo
JnRleHREaXJlY3Rpb25NZW51KTsKLX0KLQotI2VuZGlmCi0KLSNpZiBQTEFURk9STShNQUMpICYm
ICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9Q
QVJEKQotCi1zdGF0aWMgdm9pZCBjcmVhdGVBbmRBcHBlbmRTdWJzdGl0dXRpb25zU3ViTWVudShj
b25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIENvbnRleHRNZW51SXRlbSYgc3Vic3RpdHV0aW9u
c01lbnVJdGVtKQotewotICAgIENvbnRleHRNZW51IHN1YnN0aXR1dGlvbnNNZW51KHJlc3VsdCk7
Ci0KLSAgICBDb250ZXh0TWVudUl0ZW0gc2hvd1N1YnN0aXR1dGlvbnMoQWN0aW9uVHlwZSwgQ29u
dGV4dE1lbnVJdGVtVGFnU2hvd1N1YnN0aXR1dGlvbnMsIGNvbnRleHRNZW51SXRlbVRhZ1Nob3dT
dWJzdGl0dXRpb25zKHRydWUpKTsKLSAgICBDb250ZXh0TWVudUl0ZW0gc21hcnRDb3B5UGFzdGUo
Q2hlY2thYmxlQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU21hcnRDb3B5UGFzdGUsIGNv
bnRleHRNZW51SXRlbVRhZ1NtYXJ0Q29weVBhc3RlKCkpOwotICAgIENvbnRleHRNZW51SXRlbSBz
bWFydFF1b3RlcyhDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTbWFydFF1
b3RlcywgY29udGV4dE1lbnVJdGVtVGFnU21hcnRRdW90ZXMoKSk7Ci0gICAgQ29udGV4dE1lbnVJ
dGVtIHNtYXJ0RGFzaGVzKENoZWNrYWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1Nt
YXJ0RGFzaGVzLCBjb250ZXh0TWVudUl0ZW1UYWdTbWFydERhc2hlcygpKTsKLSAgICBDb250ZXh0
TWVudUl0ZW0gc21hcnRMaW5rcyhDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1U
YWdTbWFydExpbmtzLCBjb250ZXh0TWVudUl0ZW1UYWdTbWFydExpbmtzKCkpOwotICAgIENvbnRl
eHRNZW51SXRlbSB0ZXh0UmVwbGFjZW1lbnQoQ2hlY2thYmxlQWN0aW9uVHlwZSwgQ29udGV4dE1l
bnVJdGVtVGFnVGV4dFJlcGxhY2VtZW50LCBjb250ZXh0TWVudUl0ZW1UYWdUZXh0UmVwbGFjZW1l
bnQoKSk7Ci0KLSAgICBzdWJzdGl0dXRpb25zTWVudS5hcHBlbmRJdGVtKHNob3dTdWJzdGl0dXRp
b25zKTsKLSAgICBzdWJzdGl0dXRpb25zTWVudS5hcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCkp
OwotICAgIHN1YnN0aXR1dGlvbnNNZW51LmFwcGVuZEl0ZW0oc21hcnRDb3B5UGFzdGUpOwotICAg
IHN1YnN0aXR1dGlvbnNNZW51LmFwcGVuZEl0ZW0oc21hcnRRdW90ZXMpOwotICAgIHN1YnN0aXR1
dGlvbnNNZW51LmFwcGVuZEl0ZW0oc21hcnREYXNoZXMpOwotICAgIHN1YnN0aXR1dGlvbnNNZW51
LmFwcGVuZEl0ZW0oc21hcnRMaW5rcyk7Ci0gICAgc3Vic3RpdHV0aW9uc01lbnUuYXBwZW5kSXRl
bSh0ZXh0UmVwbGFjZW1lbnQpOwotCi0gICAgc3Vic3RpdHV0aW9uc01lbnVJdGVtLnNldFN1Yk1l
bnUoJnN1YnN0aXR1dGlvbnNNZW51KTsKLX0KLQotc3RhdGljIHZvaWQgY3JlYXRlQW5kQXBwZW5k
VHJhbnNmb3JtYXRpb25zU3ViTWVudShjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIENvbnRl
eHRNZW51SXRlbSYgdHJhbnNmb3JtYXRpb25zTWVudUl0ZW0pCi17Ci0gICAgQ29udGV4dE1lbnUg
dHJhbnNmb3JtYXRpb25zTWVudShyZXN1bHQpOwotCi0gICAgQ29udGV4dE1lbnVJdGVtIG1ha2VV
cHBlckNhc2UoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnTWFrZVVwcGVyQ2FzZSwgY29u
dGV4dE1lbnVJdGVtVGFnTWFrZVVwcGVyQ2FzZSgpKTsKLSAgICBDb250ZXh0TWVudUl0ZW0gbWFr
ZUxvd2VyQ2FzZShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdNYWtlTG93ZXJDYXNlLCBj
b250ZXh0TWVudUl0ZW1UYWdNYWtlTG93ZXJDYXNlKCkpOwotICAgIENvbnRleHRNZW51SXRlbSBj
YXBpdGFsaXplKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0NhcGl0YWxpemUsIGNvbnRl
eHRNZW51SXRlbVRhZ0NhcGl0YWxpemUoKSk7Ci0KLSAgICB0cmFuc2Zvcm1hdGlvbnNNZW51LmFw
cGVuZEl0ZW0obWFrZVVwcGVyQ2FzZSk7Ci0gICAgdHJhbnNmb3JtYXRpb25zTWVudS5hcHBlbmRJ
dGVtKG1ha2VMb3dlckNhc2UpOwotICAgIHRyYW5zZm9ybWF0aW9uc01lbnUuYXBwZW5kSXRlbShj
YXBpdGFsaXplKTsKLQotICAgIHRyYW5zZm9ybWF0aW9uc01lbnVJdGVtLnNldFN1Yk1lbnUoJnRy
YW5zZm9ybWF0aW9uc01lbnUpOwotfQotCi0jZW5kaWYKLQotc3RhdGljIGJvb2wgc2VsZWN0aW9u
Q29udGFpbnNQb3NzaWJsZVdvcmQoRnJhbWUqIGZyYW1lKQotewotICAgIC8vIEN1cnJlbnQgYWxn
b3JpdGhtOiBsb29rIGZvciBhIGNoYXJhY3RlciB0aGF0J3Mgbm90IGp1c3QgYSBzZXBhcmF0b3Iu
Ci0gICAgZm9yIChUZXh0SXRlcmF0b3IgaXQoZnJhbWUtPnNlbGVjdGlvbigpLT50b05vcm1hbGl6
ZWRSYW5nZSgpLmdldCgpKTsgIWl0LmF0RW5kKCk7IGl0LmFkdmFuY2UoKSkgewotICAgICAgICBp
bnQgbGVuZ3RoID0gaXQubGVuZ3RoKCk7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJz
ID0gaXQuY2hhcmFjdGVycygpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsg
KytpKQotICAgICAgICAgICAgaWYgKCEoY2F0ZWdvcnkoY2hhcmFjdGVyc1tpXSkgJiAoU2VwYXJh
dG9yX1NwYWNlIHwgU2VwYXJhdG9yX0xpbmUgfCBTZXBhcmF0b3JfUGFyYWdyYXBoKSkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
dm9pZCBDb250ZXh0TWVudTo6cG9wdWxhdGUoKQotewotICAgIENvbnRleHRNZW51SXRlbSBPcGVu
TGlua0l0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnT3BlbkxpbmssIGNvbnRleHRN
ZW51SXRlbVRhZ09wZW5MaW5rKCkpOwotICAgIENvbnRleHRNZW51SXRlbSBPcGVuTGlua0luTmV3
V2luZG93SXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdPcGVuTGlua0luTmV3V2lu
ZG93LCAKLSAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnT3BlbkxpbmtJbk5ld1dpbmRvdygpKTsK
LSAgICBDb250ZXh0TWVudUl0ZW0gRG93bmxvYWRGaWxlSXRlbShBY3Rpb25UeXBlLCBDb250ZXh0
TWVudUl0ZW1UYWdEb3dubG9hZExpbmtUb0Rpc2ssIAotICAgICAgICBjb250ZXh0TWVudUl0ZW1U
YWdEb3dubG9hZExpbmtUb0Rpc2soKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIENvcHlMaW5rSXRl
bShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdDb3B5TGlua1RvQ2xpcGJvYXJkLCAKLSAg
ICAgICAgY29udGV4dE1lbnVJdGVtVGFnQ29weUxpbmtUb0NsaXBib2FyZCgpKTsKLSAgICBDb250
ZXh0TWVudUl0ZW0gT3BlbkltYWdlSW5OZXdXaW5kb3dJdGVtKEFjdGlvblR5cGUsIENvbnRleHRN
ZW51SXRlbVRhZ09wZW5JbWFnZUluTmV3V2luZG93LCAKLSAgICAgICAgY29udGV4dE1lbnVJdGVt
VGFnT3BlbkltYWdlSW5OZXdXaW5kb3coKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIERvd25sb2Fk
SW1hZ2VJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0Rvd25sb2FkSW1hZ2VUb0Rp
c2ssIAotICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdEb3dubG9hZEltYWdlVG9EaXNrKCkpOwot
ICAgIENvbnRleHRNZW51SXRlbSBDb3B5SW1hZ2VJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51
SXRlbVRhZ0NvcHlJbWFnZVRvQ2xpcGJvYXJkLCAKLSAgICAgICAgY29udGV4dE1lbnVJdGVtVGFn
Q29weUltYWdlVG9DbGlwYm9hcmQoKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIE9wZW5NZWRpYUlu
TmV3V2luZG93SXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdPcGVuTWVkaWFJbk5l
d1dpbmRvdywgU3RyaW5nKCkpOwotICAgIENvbnRleHRNZW51SXRlbSBDb3B5TWVkaWFMaW5rSXRl
bShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdDb3B5TWVkaWFMaW5rVG9DbGlwYm9hcmQs
IAotICAgICAgICBTdHJpbmcoKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIE1lZGlhUGxheVBhdXNl
KEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ01lZGlhUGxheVBhdXNlLCAKLSAgICAgICAg
Y29udGV4dE1lbnVJdGVtVGFnTWVkaWFQbGF5KCkpOwotICAgIENvbnRleHRNZW51SXRlbSBNZWRp
YU11dGUoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnTWVkaWFNdXRlLCAKLSAgICAgICAg
Y29udGV4dE1lbnVJdGVtVGFnTWVkaWFNdXRlKCkpOwotICAgIENvbnRleHRNZW51SXRlbSBUb2dn
bGVNZWRpYUNvbnRyb2xzKENoZWNrYWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1Rv
Z2dsZU1lZGlhQ29udHJvbHMsIAotICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdUb2dnbGVNZWRp
YUNvbnRyb2xzKCkpOwotICAgIENvbnRleHRNZW51SXRlbSBUb2dnbGVNZWRpYUxvb3AoQ2hlY2th
YmxlQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnVG9nZ2xlTWVkaWFMb29wLCAKLSAgICAg
ICAgY29udGV4dE1lbnVJdGVtVGFnVG9nZ2xlTWVkaWFMb29wKCkpOwotICAgIENvbnRleHRNZW51
SXRlbSBFbnRlclZpZGVvRnVsbHNjcmVlbihBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdF
bnRlclZpZGVvRnVsbHNjcmVlbiwgCi0gICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ0VudGVyVmlk
ZW9GdWxsc2NyZWVuKCkpOwotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBDb250ZXh0TWVudUl0ZW0g
U2VhcmNoU3BvdGxpZ2h0SXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTZWFyY2hJ
blNwb3RsaWdodCwgCi0gICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ1NlYXJjaEluU3BvdGxpZ2h0
KCkpOwotICAgIENvbnRleHRNZW51SXRlbSBMb29rSW5EaWN0aW9uYXJ5SXRlbShBY3Rpb25UeXBl
LCBDb250ZXh0TWVudUl0ZW1UYWdMb29rVXBJbkRpY3Rpb25hcnksIAotICAgICAgICBjb250ZXh0
TWVudUl0ZW1UYWdMb29rVXBJbkRpY3Rpb25hcnkoKSk7Ci0jZW5kaWYKLSNpZiAhUExBVEZPUk0o
R1RLKQotICAgIENvbnRleHRNZW51SXRlbSBTZWFyY2hXZWJJdGVtKEFjdGlvblR5cGUsIENvbnRl
eHRNZW51SXRlbVRhZ1NlYXJjaFdlYiwgY29udGV4dE1lbnVJdGVtVGFnU2VhcmNoV2ViKCkpOwot
I2VuZGlmCi0gICAgQ29udGV4dE1lbnVJdGVtIENvcHlJdGVtKEFjdGlvblR5cGUsIENvbnRleHRN
ZW51SXRlbVRhZ0NvcHksIGNvbnRleHRNZW51SXRlbVRhZ0NvcHkoKSk7Ci0gICAgQ29udGV4dE1l
bnVJdGVtIEJhY2tJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0dvQmFjaywgY29u
dGV4dE1lbnVJdGVtVGFnR29CYWNrKCkpOwotICAgIENvbnRleHRNZW51SXRlbSBGb3J3YXJkSXRl
bShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdHb0ZvcndhcmQsICBjb250ZXh0TWVudUl0
ZW1UYWdHb0ZvcndhcmQoKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIFN0b3BJdGVtKEFjdGlvblR5
cGUsIENvbnRleHRNZW51SXRlbVRhZ1N0b3AsIGNvbnRleHRNZW51SXRlbVRhZ1N0b3AoKSk7Ci0g
ICAgQ29udGV4dE1lbnVJdGVtIFJlbG9hZEl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVt
VGFnUmVsb2FkLCBjb250ZXh0TWVudUl0ZW1UYWdSZWxvYWQoKSk7Ci0gICAgQ29udGV4dE1lbnVJ
dGVtIE9wZW5GcmFtZUl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnT3BlbkZyYW1l
SW5OZXdXaW5kb3csIAotICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdPcGVuRnJhbWVJbk5ld1dp
bmRvdygpKTsKLSAgICBDb250ZXh0TWVudUl0ZW0gTm9HdWVzc2VzSXRlbShBY3Rpb25UeXBlLCBD
b250ZXh0TWVudUl0ZW1UYWdOb0d1ZXNzZXNGb3VuZCwgCi0gICAgICAgIGNvbnRleHRNZW51SXRl
bVRhZ05vR3Vlc3Nlc0ZvdW5kKCkpOwotICAgIENvbnRleHRNZW51SXRlbSBJZ25vcmVTcGVsbGlu
Z0l0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnSWdub3JlU3BlbGxpbmcsIAotICAg
ICAgICBjb250ZXh0TWVudUl0ZW1UYWdJZ25vcmVTcGVsbGluZygpKTsKLSAgICBDb250ZXh0TWVu
dUl0ZW0gTGVhcm5TcGVsbGluZ0l0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnTGVh
cm5TcGVsbGluZywgCi0gICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ0xlYXJuU3BlbGxpbmcoKSk7
Ci0gICAgQ29udGV4dE1lbnVJdGVtIElnbm9yZUdyYW1tYXJJdGVtKEFjdGlvblR5cGUsIENvbnRl
eHRNZW51SXRlbVRhZ0lnbm9yZUdyYW1tYXIsIAotICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdJ
Z25vcmVHcmFtbWFyKCkpOwotICAgIENvbnRleHRNZW51SXRlbSBDdXRJdGVtKEFjdGlvblR5cGUs
IENvbnRleHRNZW51SXRlbVRhZ0N1dCwgY29udGV4dE1lbnVJdGVtVGFnQ3V0KCkpOwotICAgIENv
bnRleHRNZW51SXRlbSBQYXN0ZUl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnUGFz
dGUsIGNvbnRleHRNZW51SXRlbVRhZ1Bhc3RlKCkpOwotI2lmIFBMQVRGT1JNKEdUSykKLSAgICBD
b250ZXh0TWVudUl0ZW0gRGVsZXRlSXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdE
ZWxldGUsIGNvbnRleHRNZW51SXRlbVRhZ0RlbGV0ZSgpKTsKLSAgICBDb250ZXh0TWVudUl0ZW0g
U2VsZWN0QWxsSXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTZWxlY3RBbGwsIGNv
bnRleHRNZW51SXRlbVRhZ1NlbGVjdEFsbCgpKTsKLSNlbmRpZgotICAgIAotICAgIEhpdFRlc3RS
ZXN1bHQgcmVzdWx0ID0gaGl0VGVzdFJlc3VsdCgpOwotICAgIAotICAgIE5vZGUqIG5vZGUgPSBt
X2hpdFRlc3RSZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCk7Ci0gICAgaWYgKCFub2RlKQotICAg
ICAgICByZXR1cm47Ci0jaWYgUExBVEZPUk0oR1RLKQotICAgIGlmICghcmVzdWx0LmlzQ29udGVu
dEVkaXRhYmxlKCkgJiYgKG5vZGUtPmlzRWxlbWVudE5vZGUoKSAmJiBzdGF0aWNfY2FzdDxFbGVt
ZW50Kj4obm9kZSktPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpKQotICAgICAgICByZXR1cm47Ci0j
ZW5kaWYKLSAgICBGcmFtZSogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpOwotICAg
IGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghcmVzdWx0LmlzQ29udGVu
dEVkaXRhYmxlKCkpIHsKLSAgICAgICAgRnJhbWVMb2FkZXIqIGxvYWRlciA9IGZyYW1lLT5sb2Fk
ZXIoKTsKLSAgICAgICAgS1VSTCBsaW5rVVJMID0gcmVzdWx0LmFic29sdXRlTGlua1VSTCgpOwot
ICAgICAgICBpZiAoIWxpbmtVUkwuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBpZiAobG9hZGVy
LT5jYW5IYW5kbGVSZXF1ZXN0KFJlc291cmNlUmVxdWVzdChsaW5rVVJMKSkpIHsKLSAgICAgICAg
ICAgICAgICBhcHBlbmRJdGVtKE9wZW5MaW5rSXRlbSk7Ci0gICAgICAgICAgICAgICAgYXBwZW5k
SXRlbShPcGVuTGlua0luTmV3V2luZG93SXRlbSk7Ci0gICAgICAgICAgICAgICAgYXBwZW5kSXRl
bShEb3dubG9hZEZpbGVJdGVtKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGFwcGVuZEl0
ZW0oQ29weUxpbmtJdGVtKTsKLSAgICAgICAgfQotCi0gICAgICAgIEtVUkwgaW1hZ2VVUkwgPSBy
ZXN1bHQuYWJzb2x1dGVJbWFnZVVSTCgpOwotICAgICAgICBpZiAoIWltYWdlVVJMLmlzRW1wdHko
KSkgewotICAgICAgICAgICAgaWYgKCFsaW5rVVJMLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAg
ICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCkpOwotCi0gICAgICAgICAgICBhcHBlbmRJdGVt
KE9wZW5JbWFnZUluTmV3V2luZG93SXRlbSk7Ci0gICAgICAgICAgICBhcHBlbmRJdGVtKERvd25s
b2FkSW1hZ2VJdGVtKTsKLSAgICAgICAgICAgIGlmIChpbWFnZVVSTC5pc0xvY2FsRmlsZSgpIHx8
IG1faGl0VGVzdFJlc3VsdC5pbWFnZSgpKQotICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oQ29w
eUltYWdlSXRlbSk7Ci0gICAgICAgIH0KLQotICAgICAgICBLVVJMIG1lZGlhVVJMID0gcmVzdWx0
LmFic29sdXRlTWVkaWFVUkwoKTsKLSAgICAgICAgaWYgKCFtZWRpYVVSTC5pc0VtcHR5KCkpIHsK
LSAgICAgICAgICAgIGlmICghbGlua1VSTC5pc0VtcHR5KCkgfHwgIWltYWdlVVJMLmlzRW1wdHko
KSkKLSAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCkpOwotCi0gICAg
ICAgICAgICBhcHBlbmRJdGVtKE1lZGlhUGxheVBhdXNlKTsKLSAgICAgICAgICAgIGFwcGVuZEl0
ZW0oTWVkaWFNdXRlKTsKLSAgICAgICAgICAgIGFwcGVuZEl0ZW0oVG9nZ2xlTWVkaWFDb250cm9s
cyk7Ci0gICAgICAgICAgICBhcHBlbmRJdGVtKFRvZ2dsZU1lZGlhTG9vcCk7Ci0gICAgICAgICAg
ICBhcHBlbmRJdGVtKEVudGVyVmlkZW9GdWxsc2NyZWVuKTsKLQotICAgICAgICAgICAgYXBwZW5k
SXRlbSgqc2VwYXJhdG9ySXRlbSgpKTsKLSAgICAgICAgICAgIGFwcGVuZEl0ZW0oQ29weU1lZGlh
TGlua0l0ZW0pOwotICAgICAgICAgICAgYXBwZW5kSXRlbShPcGVuTWVkaWFJbk5ld1dpbmRvd0l0
ZW0pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGltYWdlVVJMLmlzRW1wdHkoKSAmJiBsaW5r
VVJMLmlzRW1wdHkoKSAmJiBtZWRpYVVSTC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGlmIChy
ZXN1bHQuaXNTZWxlY3RlZCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGlvbkNvbnRh
aW5zUG9zc2libGVXb3JkKGZyYW1lKSkgewotI2lmIFBMQVRGT1JNKE1BQykKLSAgICAgICAgICAg
ICAgICAgICAgYXBwZW5kSXRlbShTZWFyY2hTcG90bGlnaHRJdGVtKTsKLSNlbmRpZgotI2lmICFQ
TEFURk9STShHVEspCi0gICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oU2VhcmNoV2ViSXRl
bSk7Ci0gICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSk7Ci0j
ZW5kaWYKLSNpZiBQTEFURk9STShNQUMpCi0gICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0o
TG9va0luRGljdGlvbmFyeUl0ZW0pOwotICAgICAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKCpz
ZXBhcmF0b3JJdGVtKCkpOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGFwcGVuZEl0ZW0oQ29weUl0ZW0pOwotI2lmIFBMQVRGT1JNKE1BQykKLSAgICAgICAgICAg
ICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCkpOwotICAgICAgICAgICAgICAgIENvbnRl
eHRNZW51SXRlbSBTcGVlY2hNZW51SXRlbShTdWJtZW51VHlwZSwgQ29udGV4dE1lbnVJdGVtVGFn
U3BlZWNoTWVudSwgY29udGV4dE1lbnVJdGVtVGFnU3BlZWNoTWVudSgpKTsKLSAgICAgICAgICAg
ICAgICBjcmVhdGVBbmRBcHBlbmRTcGVlY2hTdWJNZW51KG1faGl0VGVzdFJlc3VsdCwgU3BlZWNo
TWVudUl0ZW0pOwotICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oU3BlZWNoTWVudUl0ZW0pOwot
I2VuZGlmICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgfSBlbHNlIHsKLSNpZiBFTkFCTEUo
SU5TUEVDVE9SKQotICAgICAgICAgICAgICAgIGlmICghKGZyYW1lLT5wYWdlKCkgJiYgZnJhbWUt
PnBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5oYXNJbnNwZWN0b3JGcm9udGVuZENsaWVu
dCgpKSkgewotI2VuZGlmCi0gICAgICAgICAgICAgICAgaWYgKGZyYW1lLT5wYWdlKCkgJiYgZnJh
bWUtPnBhZ2UoKS0+YmFja0ZvcndhcmQoKS0+Y2FuR29CYWNrT3JGb3J3YXJkKC0xKSkKLSAgICAg
ICAgICAgICAgICAgICAgYXBwZW5kSXRlbShCYWNrSXRlbSk7Ci0KLSAgICAgICAgICAgICAgICBp
ZiAoZnJhbWUtPnBhZ2UoKSAmJiBmcmFtZS0+cGFnZSgpLT5iYWNrRm9yd2FyZCgpLT5jYW5Hb0Jh
Y2tPckZvcndhcmQoMSkpCi0gICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oRm9yd2FyZEl0
ZW0pOwotCi0gICAgICAgICAgICAgICAgLy8gdXNlIGlzTG9hZGluZ0luQVBJU2Vuc2UgcmF0aGVy
IHRoYW4gaXNMb2FkaW5nIGJlY2F1c2UgU3RvcC9SZWxvYWQgYXJlCi0gICAgICAgICAgICAgICAg
Ly8gaW50ZW5kZWQgdG8gbWF0Y2ggV2ViS2l0J3MgQVBJLCBub3QgV2ViQ29yZSdzIGludGVybmFs
IG5vdGlvbiBvZiBsb2FkaW5nIHN0YXR1cwotICAgICAgICAgICAgICAgIGlmIChsb2FkZXItPmRv
Y3VtZW50TG9hZGVyKCktPmlzTG9hZGluZ0luQVBJU2Vuc2UoKSkKLSAgICAgICAgICAgICAgICAg
ICAgYXBwZW5kSXRlbShTdG9wSXRlbSk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgICAgICBhcHBlbmRJdGVtKFJlbG9hZEl0ZW0pOwotI2lmIEVOQUJMRShJTlNQRUNUT1Ip
Ci0gICAgICAgICAgICAgICAgfQotI2VuZGlmCi0KLSAgICAgICAgICAgICAgICBpZiAoZnJhbWUt
PnBhZ2UoKSAmJiBmcmFtZSAhPSBmcmFtZS0+cGFnZSgpLT5tYWluRnJhbWUoKSkKLSAgICAgICAg
ICAgICAgICAgICAgYXBwZW5kSXRlbShPcGVuRnJhbWVJdGVtKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0gZWxzZSB7IC8vIE1ha2UgYW4gZWRpdGluZyBjb250ZXh0IG1lbnUKLSAg
ICAgICAgU2VsZWN0aW9uQ29udHJvbGxlciogc2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigp
OwotICAgICAgICBib29sIGluUGFzc3dvcmRGaWVsZCA9IHNlbGVjdGlvbi0+aXNJblBhc3N3b3Jk
RmllbGQoKTsKLSAgICAgICAgYm9vbCBzcGVsbENoZWNraW5nRW5hYmxlZCA9IGZyYW1lLT5lZGl0
b3IoKS0+aXNTcGVsbENoZWNraW5nRW5hYmxlZEZvcihub2RlKTsKLSAgICAgICAgCi0gICAgICAg
IGlmICghaW5QYXNzd29yZEZpZWxkICYmIHNwZWxsQ2hlY2tpbmdFbmFibGVkKSB7Ci0gICAgICAg
ICAgICAvLyBDb25zaWRlciBhZGRpbmcgc3BlbGxpbmctcmVsYXRlZCBvciBncmFtbWFyLXJlbGF0
ZWQgY29udGV4dCBtZW51IGl0ZW1zIChuZXZlciBib3RoLCBzaW5jZSBhIHNpbmdsZSBzZWxlY3Rl
ZCByYW5nZQotICAgICAgICAgICAgLy8gaXMgbmV2ZXIgY29uc2lkZXJlZCBhIG1pc3NwZWxsaW5n
IGFuZCBiYWQgZ3JhbW1hciBhdCB0aGUgc2FtZSB0aW1lKQotICAgICAgICAgICAgYm9vbCBtaXNz
cGVsbGluZzsKLSAgICAgICAgICAgIGJvb2wgYmFkR3JhbW1hcjsKLSAgICAgICAgICAgIFZlY3Rv
cjxTdHJpbmc+IGd1ZXNzZXMgPSBmcmFtZS0+ZWRpdG9yKCktPmd1ZXNzZXNGb3JNaXNzcGVsbGVk
T3JVbmdyYW1tYXRpY2FsU2VsZWN0aW9uKG1pc3NwZWxsaW5nLCBiYWRHcmFtbWFyKTsKLSAgICAg
ICAgICAgIGlmIChtaXNzcGVsbGluZyB8fCBiYWRHcmFtbWFyKSB7Ci0gICAgICAgICAgICAgICAg
c2l6ZV90IHNpemUgPSBndWVzc2VzLnNpemUoKTsKLSAgICAgICAgICAgICAgICBpZiAoc2l6ZSA9
PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlJ3MgYmFkIGdyYW1tYXIgYnV0
IG5vIHN1Z2dlc3Rpb25zIChlLmcuLCByZXBlYXRlZCB3b3JkKSwganVzdCBsZWF2ZSBvZmYgdGhl
IHN1Z2dlc3Rpb25zCi0gICAgICAgICAgICAgICAgICAgIC8vIGxpc3QgYW5kIHRyYWlsaW5nIHNl
cGFyYXRvciByYXRoZXIgdGhhbiBhZGRpbmcgYSAiTm8gR3Vlc3NlcyBGb3VuZCIgaXRlbSAobWF0
Y2hlcyBBcHBLaXQpCi0gICAgICAgICAgICAgICAgICAgIGlmIChtaXNzcGVsbGluZykgewotICAg
ICAgICAgICAgICAgICAgICAgICAgYXBwZW5kSXRlbShOb0d1ZXNzZXNJdGVtKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBTdHJpbmcgJmd1ZXNzID0gZ3Vlc3Nlc1tpXTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICghZ3Vlc3MuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ29udGV4dE1lbnVJdGVtIGl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFn
U3BlbGxpbmdHdWVzcywgZ3Vlc3MpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVu
ZEl0ZW0oaXRlbSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYXBwZW5kSXRlbSgqc2VwYXJhdG9ySXRlbSgpKTsg
ICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICBpZiAobWlzc3BlbGxpbmcpIHsKLSAgICAgICAgICAgICAgICAgICAg
YXBwZW5kSXRlbShJZ25vcmVTcGVsbGluZ0l0ZW0pOwotICAgICAgICAgICAgICAgICAgICBhcHBl
bmRJdGVtKExlYXJuU3BlbGxpbmdJdGVtKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgICAgICAgICAgYXBwZW5kSXRlbShJZ25vcmVHcmFtbWFySXRlbSk7Ci0gICAgICAgICAg
ICAgICAgYXBwZW5kSXRlbSgqc2VwYXJhdG9ySXRlbSgpKTsKLSNpZiBQTEFURk9STShNQUMpICYm
ICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9Q
QVJEKQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBJZiB0aGUgc3Ry
aW5nIHdhcyBhdXRvY29ycmVjdGVkLCBnZW5lcmF0ZSBhIGNvbnRleHR1YWwgbWVudSBpdGVtIGFs
bG93aW5nIGl0IHRvIGJlIGNoYW5nZWQgYmFjay4KLSAgICAgICAgICAgICAgICBTdHJpbmcgcmVw
bGFjZWRTdHJpbmcgPSByZXN1bHQucmVwbGFjZWRTdHJpbmcoKTsKLSAgICAgICAgICAgICAgICBp
ZiAoIXJlcGxhY2VkU3RyaW5nLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgICAgICBDb250
ZXh0TWVudUl0ZW0gaXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdDaGFuZ2VCYWNr
LCBjb250ZXh0TWVudUl0ZW1UYWdDaGFuZ2VCYWNrKHJlcGxhY2VkU3RyaW5nKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIGFwcGVuZEl0ZW0oaXRlbSk7Ci0gICAgICAgICAgICAgICAgICAgIGFwcGVu
ZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSk7Ci0gICAgICAgICAgICAgICAgfQotI2VuZGlmCi0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBGcmFtZUxvYWRlciogbG9hZGVyID0gZnJh
bWUtPmxvYWRlcigpOwotICAgICAgICBLVVJMIGxpbmtVUkwgPSByZXN1bHQuYWJzb2x1dGVMaW5r
VVJMKCk7Ci0gICAgICAgIGlmICghbGlua1VSTC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGlm
IChsb2FkZXItPmNhbkhhbmRsZVJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0KGxpbmtVUkwpKSkgewot
ICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oT3BlbkxpbmtJdGVtKTsKLSAgICAgICAgICAgICAg
ICBhcHBlbmRJdGVtKE9wZW5MaW5rSW5OZXdXaW5kb3dJdGVtKTsKLSAgICAgICAgICAgICAgICBh
cHBlbmRJdGVtKERvd25sb2FkRmlsZUl0ZW0pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
YXBwZW5kSXRlbShDb3B5TGlua0l0ZW0pOwotICAgICAgICAgICAgYXBwZW5kSXRlbSgqc2VwYXJh
dG9ySXRlbSgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChyZXN1bHQuaXNTZWxlY3RlZCgp
ICYmICFpblBhc3N3b3JkRmllbGQgJiYgc2VsZWN0aW9uQ29udGFpbnNQb3NzaWJsZVdvcmQoZnJh
bWUpKSB7Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgICAgICAgICAgYXBwZW5kSXRlbShTZWFyY2hT
cG90bGlnaHRJdGVtKTsKLSNlbmRpZgotI2lmICFQTEFURk9STShHVEspCi0gICAgICAgICAgICBh
cHBlbmRJdGVtKFNlYXJjaFdlYkl0ZW0pOwotICAgICAgICAgICAgYXBwZW5kSXRlbSgqc2VwYXJh
dG9ySXRlbSgpKTsKLSNlbmRpZgotICAgICAKLSNpZiBQTEFURk9STShNQUMpCi0gICAgICAgICAg
ICBhcHBlbmRJdGVtKExvb2tJbkRpY3Rpb25hcnlJdGVtKTsKLSAgICAgICAgICAgIGFwcGVuZEl0
ZW0oKnNlcGFyYXRvckl0ZW0oKSk7Ci0jZW5kaWYKLSAgICAgICAgfQotCi0gICAgICAgIGFwcGVu
ZEl0ZW0oQ3V0SXRlbSk7Ci0gICAgICAgIGFwcGVuZEl0ZW0oQ29weUl0ZW0pOwotICAgICAgICBh
cHBlbmRJdGVtKFBhc3RlSXRlbSk7Ci0jaWYgUExBVEZPUk0oR1RLKQotICAgICAgICBhcHBlbmRJ
dGVtKERlbGV0ZUl0ZW0pOwotICAgICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCkpOwot
ICAgICAgICBhcHBlbmRJdGVtKFNlbGVjdEFsbEl0ZW0pOwotI2VuZGlmCi0KLSAgICAgICAgaWYg
KCFpblBhc3N3b3JkRmllbGQpIHsKLSAgICAgICAgICAgIGFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0
ZW0oKSk7Ci0jaWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCi0jaWYgIVBMQVRGT1JNKEdUSykKLSAg
ICAgICAgICAgIENvbnRleHRNZW51SXRlbSBTcGVsbGluZ0FuZEdyYW1tYXJNZW51SXRlbShTdWJt
ZW51VHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU3BlbGxpbmdNZW51LCAKLSAgICAgICAgICAgICAg
ICBjb250ZXh0TWVudUl0ZW1UYWdTcGVsbGluZ01lbnUoKSk7Ci0gICAgICAgICAgICBjcmVhdGVB
bmRBcHBlbmRTcGVsbGluZ0FuZEdyYW1tYXJTdWJNZW51KG1faGl0VGVzdFJlc3VsdCwgU3BlbGxp
bmdBbmRHcmFtbWFyTWVudUl0ZW0pOwotICAgICAgICAgICAgYXBwZW5kSXRlbShTcGVsbGluZ0Fu
ZEdyYW1tYXJNZW51SXRlbSk7Ci0jZW5kaWYKLSNlbHNlCi0gICAgICAgICAgICBDb250ZXh0TWVu
dUl0ZW0gU3BlbGxpbmdNZW51SXRlbShTdWJtZW51VHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU3Bl
bGxpbmdNZW51LCAKLSAgICAgICAgICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdTcGVsbGluZ01l
bnUoKSk7Ci0gICAgICAgICAgICBjcmVhdGVBbmRBcHBlbmRTcGVsbGluZ1N1Yk1lbnUobV9oaXRU
ZXN0UmVzdWx0LCBTcGVsbGluZ01lbnVJdGVtKTsKLSAgICAgICAgICAgIGFwcGVuZEl0ZW0oU3Bl
bGxpbmdNZW51SXRlbSk7Ci0jZW5kaWYKLSNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJV
SUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQotICAgICAg
ICAgICAgQ29udGV4dE1lbnVJdGVtIHN1YnN0aXR1dGlvbnNNZW51SXRlbShTdWJtZW51VHlwZSwg
Q29udGV4dE1lbnVJdGVtVGFnU3Vic3RpdHV0aW9uc01lbnUsIAotICAgICAgICAgICAgICAgIGNv
bnRleHRNZW51SXRlbVRhZ1N1YnN0aXR1dGlvbnNNZW51KCkpOwotICAgICAgICAgICAgY3JlYXRl
QW5kQXBwZW5kU3Vic3RpdHV0aW9uc1N1Yk1lbnUobV9oaXRUZXN0UmVzdWx0LCBzdWJzdGl0dXRp
b25zTWVudUl0ZW0pOwotICAgICAgICAgICAgYXBwZW5kSXRlbShzdWJzdGl0dXRpb25zTWVudUl0
ZW0pOwotICAgICAgICAgICAgQ29udGV4dE1lbnVJdGVtIHRyYW5zZm9ybWF0aW9uc01lbnVJdGVt
KFN1Ym1lbnVUeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdUcmFuc2Zvcm1hdGlvbnNNZW51LCAKLSAg
ICAgICAgICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdUcmFuc2Zvcm1hdGlvbnNNZW51KCkpOwot
ICAgICAgICAgICAgY3JlYXRlQW5kQXBwZW5kVHJhbnNmb3JtYXRpb25zU3ViTWVudShtX2hpdFRl
c3RSZXN1bHQsIHRyYW5zZm9ybWF0aW9uc01lbnVJdGVtKTsKLSAgICAgICAgICAgIGFwcGVuZEl0
ZW0odHJhbnNmb3JtYXRpb25zTWVudUl0ZW0pOwotI2VuZGlmCi0jaWYgUExBVEZPUk0oR1RLKQot
ICAgICAgICAgICAgYm9vbCBzaG91bGRTaG93Rm9udE1lbnUgPSBmcmFtZS0+ZWRpdG9yKCktPmNh
bkVkaXRSaWNobHkoKTsKLSNlbHNlCi0gICAgICAgICAgICBib29sIHNob3VsZFNob3dGb250TWVu
dSA9IHRydWU7Ci0jZW5kaWYKLSAgICAgICAgICAgIGlmIChzaG91bGRTaG93Rm9udE1lbnUpIHsK
LSAgICAgICAgICAgICAgICBDb250ZXh0TWVudUl0ZW0gRm9udE1lbnVJdGVtKFN1Ym1lbnVUeXBl
LCBDb250ZXh0TWVudUl0ZW1UYWdGb250TWVudSwgCi0gICAgICAgICAgICAgICAgICAgIGNvbnRl
eHRNZW51SXRlbVRhZ0ZvbnRNZW51KCkpOwotICAgICAgICAgICAgICAgIGNyZWF0ZUFuZEFwcGVu
ZEZvbnRTdWJNZW51KG1faGl0VGVzdFJlc3VsdCwgRm9udE1lbnVJdGVtKTsKLSAgICAgICAgICAg
ICAgICBhcHBlbmRJdGVtKEZvbnRNZW51SXRlbSk7Ci0gICAgICAgICAgICB9Ci0jaWYgUExBVEZP
Uk0oTUFDKQotICAgICAgICAgICAgQ29udGV4dE1lbnVJdGVtIFNwZWVjaE1lbnVJdGVtKFN1Ym1l
bnVUeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTcGVlY2hNZW51LCBjb250ZXh0TWVudUl0ZW1UYWdT
cGVlY2hNZW51KCkpOwotICAgICAgICAgICAgY3JlYXRlQW5kQXBwZW5kU3BlZWNoU3ViTWVudSht
X2hpdFRlc3RSZXN1bHQsIFNwZWVjaE1lbnVJdGVtKTsKLSAgICAgICAgICAgIGFwcGVuZEl0ZW0o
U3BlZWNoTWVudUl0ZW0pOwotI2VuZGlmCi0jaWYgIVBMQVRGT1JNKEdUSykKLSAgICAgICAgICAg
IENvbnRleHRNZW51SXRlbSBXcml0aW5nRGlyZWN0aW9uTWVudUl0ZW0oU3VibWVudVR5cGUsIENv
bnRleHRNZW51SXRlbVRhZ1dyaXRpbmdEaXJlY3Rpb25NZW51LCAKLSAgICAgICAgICAgICAgICBj
b250ZXh0TWVudUl0ZW1UYWdXcml0aW5nRGlyZWN0aW9uTWVudSgpKTsKLSAgICAgICAgICAgIGNy
ZWF0ZUFuZEFwcGVuZFdyaXRpbmdEaXJlY3Rpb25TdWJNZW51KG1faGl0VGVzdFJlc3VsdCwgV3Jp
dGluZ0RpcmVjdGlvbk1lbnVJdGVtKTsKLSAgICAgICAgICAgIGFwcGVuZEl0ZW0oV3JpdGluZ0Rp
cmVjdGlvbk1lbnVJdGVtKTsKLSAgICAgICAgICAgIGlmIChQYWdlKiBwYWdlID0gZnJhbWUtPnBh
Z2UoKSkgewotICAgICAgICAgICAgICAgIGlmIChTZXR0aW5ncyogc2V0dGluZ3MgPSBwYWdlLT5z
ZXR0aW5ncygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJvb2wgaW5jbHVkZVRleHREaXJlY3Rp
b25TdWJtZW51ID0gc2V0dGluZ3MtPnRleHREaXJlY3Rpb25TdWJtZW51SW5jbHVzaW9uQmVoYXZp
b3IoKSA9PSBUZXh0RGlyZWN0aW9uU3VibWVudUFsd2F5c0luY2x1ZGVkCi0gICAgICAgICAgICAg
ICAgICAgICAgICB8fCAoc2V0dGluZ3MtPnRleHREaXJlY3Rpb25TdWJtZW51SW5jbHVzaW9uQmVo
YXZpb3IoKSA9PSBUZXh0RGlyZWN0aW9uU3VibWVudUF1dG9tYXRpY2FsbHlJbmNsdWRlZCAmJiBm
cmFtZS0+ZWRpdG9yKCktPmhhc0JpZGlTZWxlY3Rpb24oKSk7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChpbmNsdWRlVGV4dERpcmVjdGlvblN1Ym1lbnUpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIENvbnRleHRNZW51SXRlbSBUZXh0RGlyZWN0aW9uTWVudUl0ZW0oU3VibWVudVR5cGUsIENv
bnRleHRNZW51SXRlbVRhZ1RleHREaXJlY3Rpb25NZW51LCAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdUZXh0RGlyZWN0aW9uTWVudSgpKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGNyZWF0ZUFuZEFwcGVuZFRleHREaXJlY3Rpb25TdWJNZW51KG1faGl0
VGVzdFJlc3VsdCwgVGV4dERpcmVjdGlvbk1lbnVJdGVtKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGFwcGVuZEl0ZW0oVGV4dERpcmVjdGlvbk1lbnVJdGVtKTsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSNlbmRpZgotICAgICAgICB9
Ci0gICAgfQotfQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUikKLXZvaWQgQ29udGV4dE1lbnU6OmFk
ZEluc3BlY3RFbGVtZW50SXRlbSgpCi17Ci0gICAgTm9kZSogbm9kZSA9IG1faGl0VGVzdFJlc3Vs
dC5pbm5lck5vblNoYXJlZE5vZGUoKTsKLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybjsK
LQotICAgIEZyYW1lKiBmcmFtZSA9IG5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCk7Ci0gICAgaWYg
KCFmcmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUGFnZSogcGFnZSA9IGZyYW1lLT5wYWdl
KCk7Ci0gICAgaWYgKCFwYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXBhZ2UtPmlu
c3BlY3RvckNvbnRyb2xsZXIoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ29udGV4dE1lbnVJ
dGVtIEluc3BlY3RFbGVtZW50SXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdJbnNw
ZWN0RWxlbWVudCwgY29udGV4dE1lbnVJdGVtVGFnSW5zcGVjdEVsZW1lbnQoKSk7Ci0gICAgYXBw
ZW5kSXRlbSgqc2VwYXJhdG9ySXRlbSgpKTsKLSAgICBhcHBlbmRJdGVtKEluc3BlY3RFbGVtZW50
SXRlbSk7Ci19Ci0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKLQotdm9pZCBDb250ZXh0TWVu
dTo6Y2hlY2tPckVuYWJsZUlmTmVlZGVkKENvbnRleHRNZW51SXRlbSYgaXRlbSkgY29uc3QKLXsK
LSAgICBpZiAoaXRlbS50eXBlKCkgPT0gU2VwYXJhdG9yVHlwZSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIAotICAgIEZyYW1lKiBmcmFtZSA9IG1faGl0VGVzdFJlc3VsdC5pbm5lck5vblNoYXJlZE5v
ZGUoKS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1
cm47Ci0KLSAgICAvLyBDdXN0b20gaXRlbXMgYWxyZWFkeSBoYXZlIHByb3BlciBjaGVja2VkIGFu
ZCBlbmFibGVkIHZhbHVlcy4KLSAgICBpZiAoQ29udGV4dE1lbnVJdGVtQmFzZUN1c3RvbVRhZyA8
PSBpdGVtLmFjdGlvbigpICYmIGl0ZW0uYWN0aW9uKCkgPD0gQ29udGV4dE1lbnVJdGVtTGFzdEN1
c3RvbVRhZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYm9vbCBzaG91bGRFbmFibGUgPSB0cnVl
OwotICAgIGJvb2wgc2hvdWxkQ2hlY2sgPSBmYWxzZTsgCi0KLSAgICBzd2l0Y2ggKGl0ZW0uYWN0
aW9uKCkpIHsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdDaGVja1NwZWxsaW5nOgot
ICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gZnJhbWUtPmVkaXRvcigpLT5jYW5FZGl0KCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdEZWZhdWx0
RGlyZWN0aW9uOgotICAgICAgICAgICAgc2hvdWxkQ2hlY2sgPSBmYWxzZTsKLSAgICAgICAgICAg
IHNob3VsZEVuYWJsZSA9IGZhbHNlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtVGFnTGVmdFRvUmlnaHQ6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJ
dGVtVGFnUmlnaHRUb0xlZnQ6IHsKLSAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwot
ICAgICAgICAgICAgUmVmUHRyPENTU1N0eWxlRGVjbGFyYXRpb24+IHN0eWxlID0gZnJhbWUtPmRv
Y3VtZW50KCktPmNyZWF0ZUNTU1N0eWxlRGVjbGFyYXRpb24oKTsKLSAgICAgICAgICAgIFN0cmlu
ZyBkaXJlY3Rpb24gPSBpdGVtLmFjdGlvbigpID09IENvbnRleHRNZW51SXRlbVRhZ0xlZnRUb1Jp
Z2h0ID8gImx0ciIgOiAicnRsIjsKLSAgICAgICAgICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQ
cm9wZXJ0eURpcmVjdGlvbiwgZGlyZWN0aW9uLCBmYWxzZSwgZWMpOwotICAgICAgICAgICAgc2hv
dWxkQ2hlY2sgPSBmcmFtZS0+ZWRpdG9yKCktPnNlbGVjdGlvbkhhc1N0eWxlKHN0eWxlLmdldCgp
KSAhPSBGYWxzZVRyaVN0YXRlOwotICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gdHJ1ZTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVt
VGFnVGV4dERpcmVjdGlvbkRlZmF1bHQ6IHsKLSAgICAgICAgICAgIEVkaXRvcjo6Q29tbWFuZCBj
b21tYW5kID0gZnJhbWUtPmVkaXRvcigpLT5jb21tYW5kKCJNYWtlVGV4dFdyaXRpbmdEaXJlY3Rp
b25OYXR1cmFsIik7Ci0gICAgICAgICAgICBzaG91bGRDaGVjayA9IGNvbW1hbmQuc3RhdGUoKSA9
PSBUcnVlVHJpU3RhdGU7Ci0gICAgICAgICAgICBzaG91bGRFbmFibGUgPSBjb21tYW5kLmlzRW5h
YmxlZCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBDb250
ZXh0TWVudUl0ZW1UYWdUZXh0RGlyZWN0aW9uTGVmdFRvUmlnaHQ6IHsKLSAgICAgICAgICAgIEVk
aXRvcjo6Q29tbWFuZCBjb21tYW5kID0gZnJhbWUtPmVkaXRvcigpLT5jb21tYW5kKCJNYWtlVGV4
dFdyaXRpbmdEaXJlY3Rpb25MZWZ0VG9SaWdodCIpOwotICAgICAgICAgICAgc2hvdWxkQ2hlY2sg
PSBjb21tYW5kLnN0YXRlKCkgPT0gVHJ1ZVRyaVN0YXRlOwotICAgICAgICAgICAgc2hvdWxkRW5h
YmxlID0gY29tbWFuZC5pc0VuYWJsZWQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnVGV4dERpcmVjdGlvblJpZ2h0VG9MZWZ0
OiB7Ci0gICAgICAgICAgICBFZGl0b3I6OkNvbW1hbmQgY29tbWFuZCA9IGZyYW1lLT5lZGl0b3Io
KS0+Y29tbWFuZCgiTWFrZVRleHRXcml0aW5nRGlyZWN0aW9uUmlnaHRUb0xlZnQiKTsKLSAgICAg
ICAgICAgIHNob3VsZENoZWNrID0gY29tbWFuZC5zdGF0ZSgpID09IFRydWVUcmlTdGF0ZTsKLSAg
ICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGNvbW1hbmQuaXNFbmFibGVkKCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0NvcHk6
Ci0gICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+ZWRpdG9yKCktPmNhbkRIVE1MQ29w
eSgpIHx8IGZyYW1lLT5lZGl0b3IoKS0+Y2FuQ29weSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQ3V0OgotICAgICAgICAgICAgc2hvdWxkRW5h
YmxlID0gZnJhbWUtPmVkaXRvcigpLT5jYW5ESFRNTEN1dCgpIHx8IGZyYW1lLT5lZGl0b3IoKS0+
Y2FuQ3V0KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0
ZW1UYWdJZ25vcmVTcGVsbGluZzoKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdMZWFy
blNwZWxsaW5nOgotICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gZnJhbWUtPnNlbGVjdGlvbigp
LT5pc1JhbmdlKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVu
dUl0ZW1UYWdQYXN0ZToKLSAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGZyYW1lLT5lZGl0b3Io
KS0+Y2FuREhUTUxQYXN0ZSgpIHx8IGZyYW1lLT5lZGl0b3IoKS0+Y2FuUGFzdGUoKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotI2lmIFBMQVRGT1JNKEdUSykKLSAgICAgICAgY2FzZSBDb250ZXh0TWVu
dUl0ZW1UYWdEZWxldGU6Ci0gICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+ZWRpdG9y
KCktPmNhbkRlbGV0ZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29udGV4
dE1lbnVJdGVtVGFnU2VsZWN0QWxsOgotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0lu
cHV0TWV0aG9kczoKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdVbmljb2RlOgotICAg
ICAgICAgICAgc2hvdWxkRW5hYmxlID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotI2VuZGlm
Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnVW5kZXJsaW5lOiB7Ci0gICAgICAgICAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICAgICAgICAgIFJlZlB0cjxDU1NTdHlsZURlY2xh
cmF0aW9uPiBzdHlsZSA9IGZyYW1lLT5kb2N1bWVudCgpLT5jcmVhdGVDU1NTdHlsZURlY2xhcmF0
aW9uKCk7Ci0gICAgICAgICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRU
ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCwgInVuZGVybGluZSIsIGZhbHNlLCBlYyk7Ci0gICAgICAg
ICAgICBzaG91bGRDaGVjayA9IGZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0aW9uSGFzU3R5bGUoc3R5
bGUuZ2V0KCkpICE9IEZhbHNlVHJpU3RhdGU7Ci0gICAgICAgICAgICBzaG91bGRFbmFibGUgPSBm
cmFtZS0+ZWRpdG9yKCktPmNhbkVkaXRSaWNobHkoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnTG9va1VwSW5EaWN0aW9uYXJ5
OgotICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gZnJhbWUtPnNlbGVjdGlvbigpLT5pc1Jhbmdl
KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdD
aGVja0dyYW1tYXJXaXRoU3BlbGxpbmc6Ci0jaWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCi0gICAg
ICAgICAgICBpZiAoZnJhbWUtPmVkaXRvcigpLT5pc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSkK
LSAgICAgICAgICAgICAgICBzaG91bGRDaGVjayA9IHRydWU7Ci0gICAgICAgICAgICBzaG91bGRF
bmFibGUgPSB0cnVlOwotI2VuZGlmCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBD
b250ZXh0TWVudUl0ZW1UYWdJdGFsaWM6IHsKLSAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOwotICAgICAgICAgICAgUmVmUHRyPENTU1N0eWxlRGVjbGFyYXRpb24+IHN0eWxlID0gZnJh
bWUtPmRvY3VtZW50KCktPmNyZWF0ZUNTU1N0eWxlRGVjbGFyYXRpb24oKTsKLSAgICAgICAgICAg
IHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRTdHlsZSwgIml0YWxpYyIsIGZhbHNl
LCBlYyk7Ci0gICAgICAgICAgICBzaG91bGRDaGVjayA9IGZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0
aW9uSGFzU3R5bGUoc3R5bGUuZ2V0KCkpICE9IEZhbHNlVHJpU3RhdGU7Ci0gICAgICAgICAgICBz
aG91bGRFbmFibGUgPSBmcmFtZS0+ZWRpdG9yKCktPmNhbkVkaXRSaWNobHkoKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQm9s
ZDogewotICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgICAgICAgICBSZWZQ
dHI8Q1NTU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+Y3JlYXRl
Q1NTU3R5bGVEZWNsYXJhdGlvbigpOwotICAgICAgICAgICAgc3R5bGUtPnNldFByb3BlcnR5KENT
U1Byb3BlcnR5Rm9udFdlaWdodCwgImJvbGQiLCBmYWxzZSwgZWMpOwotICAgICAgICAgICAgc2hv
dWxkQ2hlY2sgPSBmcmFtZS0+ZWRpdG9yKCktPnNlbGVjdGlvbkhhc1N0eWxlKHN0eWxlLmdldCgp
KSAhPSBGYWxzZVRyaVN0YXRlOwotICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gZnJhbWUtPmVk
aXRvcigpLT5jYW5FZGl0UmljaGx5KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ091dGxpbmU6Ci0gICAgICAgICAgICBzaG91
bGRFbmFibGUgPSBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbnRl
eHRNZW51SXRlbVRhZ1Nob3dTcGVsbGluZ1BhbmVsOgotI2lmbmRlZiBCVUlMRElOR19PTl9USUdF
UgotICAgICAgICAgICAgaWYgKGZyYW1lLT5lZGl0b3IoKS0+c3BlbGxpbmdQYW5lbElzU2hvd2lu
ZygpKQotICAgICAgICAgICAgICAgIGl0ZW0uc2V0VGl0bGUoY29udGV4dE1lbnVJdGVtVGFnU2hv
d1NwZWxsaW5nUGFuZWwoZmFsc2UpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICBpdGVtLnNldFRpdGxlKGNvbnRleHRNZW51SXRlbVRhZ1Nob3dTcGVsbGluZ1BhbmVsKHRydWUp
KTsKLSNlbmRpZgotICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gZnJhbWUtPmVkaXRvcigpLT5j
YW5FZGl0KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0
ZW1UYWdOb0d1ZXNzZXNGb3VuZDoKLSAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGZhbHNlOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQ2hlY2tT
cGVsbGluZ1doaWxlVHlwaW5nOgotICAgICAgICAgICAgc2hvdWxkQ2hlY2sgPSBmcmFtZS0+ZWRp
dG9yKCktPmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSNpZiBQTEFURk9STShNQUMpCi0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFn
U3Vic3RpdHV0aW9uc01lbnU6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnVHJhbnNm
b3JtYXRpb25zTWVudToKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbnRleHRN
ZW51SXRlbVRhZ1Nob3dTdWJzdGl0dXRpb25zOgotI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJ
R0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQotICAgICAgICAgICAgaWYgKGZy
YW1lLT5lZGl0b3IoKS0+c3Vic3RpdHV0aW9uc1BhbmVsSXNTaG93aW5nKCkpCi0gICAgICAgICAg
ICAgICAgaXRlbS5zZXRUaXRsZShjb250ZXh0TWVudUl0ZW1UYWdTaG93U3Vic3RpdHV0aW9ucyhm
YWxzZSkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGl0ZW0uc2V0VGl0bGUo
Y29udGV4dE1lbnVJdGVtVGFnU2hvd1N1YnN0aXR1dGlvbnModHJ1ZSkpOwotICAgICAgICAgICAg
c2hvdWxkRW5hYmxlID0gZnJhbWUtPmVkaXRvcigpLT5jYW5FZGl0KCk7Ci0jZW5kaWYKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ01ha2VVcHBlckNh
c2U6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnTWFrZUxvd2VyQ2FzZToKLSAgICAg
ICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdDYXBpdGFsaXplOgotICAgICAgICBjYXNlIENvbnRl
eHRNZW51SXRlbVRhZ0NoYW5nZUJhY2s6Ci0gICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFt
ZS0+ZWRpdG9yKCktPmNhbkVkaXQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IENvbnRleHRNZW51SXRlbVRhZ0NvcnJlY3RTcGVsbGluZ0F1dG9tYXRpY2FsbHk6Ci0jaWYgIWRl
ZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQp
Ci0gICAgICAgICAgICBzaG91bGRDaGVjayA9IGZyYW1lLT5lZGl0b3IoKS0+aXNBdXRvbWF0aWNT
cGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1NtYXJ0Q29weVBhc3RlOgotI2lmICFkZWZp
bmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQot
ICAgICAgICAgICAgc2hvdWxkQ2hlY2sgPSBmcmFtZS0+ZWRpdG9yKCktPnNtYXJ0SW5zZXJ0RGVs
ZXRlRW5hYmxlZCgpOwotI2VuZGlmCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBD
b250ZXh0TWVudUl0ZW1UYWdTbWFydFF1b3RlczoKLSNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9U
SUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKLSAgICAgICAgICAgIHNob3Vs
ZENoZWNrID0gZnJhbWUtPmVkaXRvcigpLT5pc0F1dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uRW5h
YmxlZCgpOwotI2VuZGlmCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb250ZXh0
TWVudUl0ZW1UYWdTbWFydERhc2hlczoKLSNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikg
JiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKLSAgICAgICAgICAgIHNob3VsZENoZWNr
ID0gZnJhbWUtPmVkaXRvcigpLT5pc0F1dG9tYXRpY0Rhc2hTdWJzdGl0dXRpb25FbmFibGVkKCk7
Ci0jZW5kaWYKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRl
bVRhZ1NtYXJ0TGlua3M6Ci0jaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZp
bmVkKEJVSUxESU5HX09OX0xFT1BBUkQpCi0gICAgICAgICAgICBzaG91bGRDaGVjayA9IGZyYW1l
LT5lZGl0b3IoKS0+aXNBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZCgpOwotI2VuZGlmCi0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdUZXh0UmVw
bGFjZW1lbnQ6Ci0jaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJV
SUxESU5HX09OX0xFT1BBUkQpCi0gICAgICAgICAgICBzaG91bGRDaGVjayA9IGZyYW1lLT5lZGl0
b3IoKS0+aXNBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnRFbmFibGVkKCk7Ci0jZW5kaWYKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1N0b3BTcGVha2lu
ZzoKLSAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGNvbnRyb2xsZXIoKSAmJiBjb250cm9sbGVy
KCktPmNsaWVudCgpICYmIGNvbnRyb2xsZXIoKS0+Y2xpZW50KCktPmlzU3BlYWtpbmcoKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotI2Vsc2UgLy8gUExBVEZPUk0oTUFDKSBlbmRzIGhlcmUKLSAgICAg
ICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTdG9wU3BlYWtpbmc6Ci0gICAgICAgICAgICBicmVh
azsKLSNlbmRpZgotI2lmIFBMQVRGT1JNKEdUSykKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0
ZW1UYWdHb0JhY2s6Ci0gICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+cGFnZSgpICYm
IGZyYW1lLT5wYWdlKCktPmJhY2tGb3J3YXJkKCktPmNhbkdvQmFja09yRm9yd2FyZCgtMSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdHb0Zvcndh
cmQ6Ci0gICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+cGFnZSgpICYmIGZyYW1lLT5w
YWdlKCktPmJhY2tGb3J3YXJkKCktPmNhbkdvQmFja09yRm9yd2FyZCgxKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1N0b3A6Ci0gICAgICAgICAg
ICBzaG91bGRFbmFibGUgPSBmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPmlzTG9h
ZGluZ0luQVBJU2Vuc2UoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbnRl
eHRNZW51SXRlbVRhZ1JlbG9hZDoKLSAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9ICFmcmFtZS0+
bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPmlzTG9hZGluZ0luQVBJU2Vuc2UoKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0ZvbnRNZW51Ogot
ICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gZnJhbWUtPmVkaXRvcigpLT5jYW5FZGl0UmljaGx5
KCk7Ci0gICAgICAgICAgICBicmVhazsKLSNlbHNlCi0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJ
dGVtVGFnR29CYWNrOgotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0dvRm9yd2FyZDoK
LSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTdG9wOgotICAgICAgICBjYXNlIENvbnRl
eHRNZW51SXRlbVRhZ1JlbG9hZDoKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdGb250
TWVudToKLSNlbmRpZgotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ05vQWN0aW9uOgot
ICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5MaW5rSW5OZXdXaW5kb3c6Ci0gICAg
ICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnRG93bmxvYWRMaW5rVG9EaXNrOgotICAgICAgICBj
YXNlIENvbnRleHRNZW51SXRlbVRhZ0NvcHlMaW5rVG9DbGlwYm9hcmQ6Ci0gICAgICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtVGFnT3BlbkltYWdlSW5OZXdXaW5kb3c6Ci0gICAgICAgIGNhc2UgQ29u
dGV4dE1lbnVJdGVtVGFnRG93bmxvYWRJbWFnZVRvRGlzazoKLSAgICAgICAgY2FzZSBDb250ZXh0
TWVudUl0ZW1UYWdDb3B5SW1hZ2VUb0NsaXBib2FyZDoKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5NZWRpYUluTmV3V2luZG93OgotICAgICAg
ICAgICAgaWYgKG1faGl0VGVzdFJlc3VsdC5tZWRpYUlzVmlkZW8oKSkKLSAgICAgICAgICAgICAg
ICBpdGVtLnNldFRpdGxlKGNvbnRleHRNZW51SXRlbVRhZ09wZW5WaWRlb0luTmV3V2luZG93KCkp
OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGl0ZW0uc2V0VGl0bGUoY29udGV4
dE1lbnVJdGVtVGFnT3BlbkF1ZGlvSW5OZXdXaW5kb3coKSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdDb3B5TWVkaWFMaW5rVG9DbGlwYm9hcmQ6
Ci0gICAgICAgICAgICBpZiAobV9oaXRUZXN0UmVzdWx0Lm1lZGlhSXNWaWRlbygpKQotICAgICAg
ICAgICAgICAgIGl0ZW0uc2V0VGl0bGUoY29udGV4dE1lbnVJdGVtVGFnQ29weVZpZGVvTGlua1Rv
Q2xpcGJvYXJkKCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGl0ZW0uc2V0
VGl0bGUoY29udGV4dE1lbnVJdGVtVGFnQ29weUF1ZGlvTGlua1RvQ2xpcGJvYXJkKCkpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnVG9nZ2xlTWVk
aWFDb250cm9sczoKLSAgICAgICAgICAgIHNob3VsZENoZWNrID0gbV9oaXRUZXN0UmVzdWx0Lm1l
ZGlhQ29udHJvbHNFbmFibGVkKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBD
b250ZXh0TWVudUl0ZW1UYWdUb2dnbGVNZWRpYUxvb3A6Ci0gICAgICAgICAgICBzaG91bGRDaGVj
ayA9IG1faGl0VGVzdFJlc3VsdC5tZWRpYUxvb3BFbmFibGVkKCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdFbnRlclZpZGVvRnVsbHNjcmVlbjoK
LSAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IG1faGl0VGVzdFJlc3VsdC5tZWRpYVN1cHBvcnRz
RnVsbHNjcmVlbigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29udGV4dE1l
bnVJdGVtVGFnT3BlbkZyYW1lSW5OZXdXaW5kb3c6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJ
dGVtVGFnU3BlbGxpbmdHdWVzczoKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdPdGhl
cjoKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTZWFyY2hJblNwb3RsaWdodDoKLSAg
ICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTZWFyY2hXZWI6Ci0gICAgICAgIGNhc2UgQ29u
dGV4dE1lbnVJdGVtVGFnT3BlbldpdGhEZWZhdWx0QXBwbGljYXRpb246Ci0gICAgICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtUERGQWN0dWFsU2l6ZToKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0
ZW1QREZab29tSW46Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtUERGWm9vbU91dDoKLSAg
ICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1QREZBdXRvU2l6ZToKLSAgICAgICAgY2FzZSBDb250
ZXh0TWVudUl0ZW1QREZTaW5nbGVQYWdlOgotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVBE
RkZhY2luZ1BhZ2VzOgotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVBERkNvbnRpbnVvdXM6
Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtUERGTmV4dFBhZ2U6Ci0gICAgICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtUERGUHJldmlvdXNQYWdlOgotICAgICAgICBjYXNlIENvbnRleHRNZW51
SXRlbVRhZ09wZW5MaW5rOgotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0lnbm9yZUdy
YW1tYXI6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU3BlbGxpbmdNZW51OgotICAg
ICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1Nob3dGb250czoKLSAgICAgICAgY2FzZSBDb250
ZXh0TWVudUl0ZW1UYWdTdHlsZXM6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU2hv
d0NvbG9yczoKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTcGVlY2hNZW51OgotICAg
ICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1N0YXJ0U3BlYWtpbmc6Ci0gICAgICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtVGFnV3JpdGluZ0RpcmVjdGlvbk1lbnU6Ci0gICAgICAgIGNhc2UgQ29u
dGV4dE1lbnVJdGVtVGFnVGV4dERpcmVjdGlvbk1lbnU6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1l
bnVJdGVtVGFnUERGU2luZ2xlUGFnZVNjcm9sbGluZzoKLSAgICAgICAgY2FzZSBDb250ZXh0TWVu
dUl0ZW1UYWdQREZGYWNpbmdQYWdlc1Njcm9sbGluZzoKLSNpZiBFTkFCTEUoSU5TUEVDVE9SKQot
ICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0luc3BlY3RFbGVtZW50OgotI2VuZGlmCi0g
ICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtQmFzZUN1c3RvbVRhZzoKLSAgICAgICAgY2FzZSBD
b250ZXh0TWVudUl0ZW1DdXN0b21UYWdOb0FjdGlvbjoKLSAgICAgICAgY2FzZSBDb250ZXh0TWVu
dUl0ZW1MYXN0Q3VzdG9tVGFnOgotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbUJhc2VBcHBs
aWNhdGlvblRhZzoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbnRleHRNZW51
SXRlbVRhZ01lZGlhUGxheVBhdXNlOgotICAgICAgICAgICAgaWYgKG1faGl0VGVzdFJlc3VsdC5t
ZWRpYVBsYXlpbmcoKSkKLSAgICAgICAgICAgICAgICBpdGVtLnNldFRpdGxlKGNvbnRleHRNZW51
SXRlbVRhZ01lZGlhUGF1c2UoKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
aXRlbS5zZXRUaXRsZShjb250ZXh0TWVudUl0ZW1UYWdNZWRpYVBsYXkoKSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdNZWRpYU11dGU6Ci0gICAg
ICAgICAgICBzaG91bGRFbmFibGUgPSBtX2hpdFRlc3RSZXN1bHQubWVkaWFIYXNBdWRpbygpOwot
ICAgICAgICAgICAgc2hvdWxkQ2hlY2sgPSBzaG91bGRFbmFibGUgJiYgIG1faGl0VGVzdFJlc3Vs
dC5tZWRpYU11dGVkKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBpdGVtLnNl
dENoZWNrZWQoc2hvdWxkQ2hlY2spOwotICAgIGl0ZW0uc2V0RW5hYmxlZChzaG91bGRFbmFibGUp
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoQ09OVEVY
VF9NRU5VUykKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vQ29udGV4dE1lbnUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL0NvbnRleHRNZW51LmgJKHJldmlzaW9uIDczNDY5KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9Db250ZXh0TWVudS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsy
OSw2IEBACiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAKICNpbmNsdWRlICJDb250ZXh0
TWVudUl0ZW0uaCIKLSNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiUGxhdGZv
cm1NZW51RGVzY3JpcHRpb24uaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2lmIFBM
QVRGT1JNKE1BQykKQEAgLTQ4LDE0ICs0NywxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
Y2xhc3MgQ29udGV4dE1lbnUgOiBwdWJsaWMgTm9uY29weWFibGUKICAgICB7CiAgICAgcHVibGlj
OgotICAgICAgICBDb250ZXh0TWVudShjb25zdCBIaXRUZXN0UmVzdWx0Jik7Ci0gICAgICAgIENv
bnRleHRNZW51KGNvbnN0IEhpdFRlc3RSZXN1bHQmLCBjb25zdCBQbGF0Zm9ybU1lbnVEZXNjcmlw
dGlvbik7CisgICAgICAgIENvbnRleHRNZW51KCk7CisgICAgICAgIENvbnRleHRNZW51KGNvbnN0
IFBsYXRmb3JtTWVudURlc2NyaXB0aW9uKTsKICAgICAgICAgfkNvbnRleHRNZW51KCk7CiAKLSAg
ICAgICAgdm9pZCBwb3B1bGF0ZSgpOwotICAgICAgICB2b2lkIGFkZEluc3BlY3RFbGVtZW50SXRl
bSgpOwotICAgICAgICB2b2lkIGNoZWNrT3JFbmFibGVJZk5lZWRlZChDb250ZXh0TWVudUl0ZW0m
KSBjb25zdDsKLQogICAgICAgICB2b2lkIGluc2VydEl0ZW0odW5zaWduZWQgcG9zaXRpb24sIENv
bnRleHRNZW51SXRlbSYpOwogICAgICAgICB2b2lkIGFwcGVuZEl0ZW0oQ29udGV4dE1lbnVJdGVt
Jik7CiAgICAgICAgIApAQCAtNjQsOSArNTksNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAg
ICAgICAgdW5zaWduZWQgaXRlbUNvdW50KCkgY29uc3Q7CiAKLSAgICAgICAgSGl0VGVzdFJlc3Vs
dCBoaXRUZXN0UmVzdWx0KCkgY29uc3QgeyByZXR1cm4gbV9oaXRUZXN0UmVzdWx0OyB9Ci0gICAg
ICAgIENvbnRleHRNZW51Q29udHJvbGxlciogY29udHJvbGxlcigpIGNvbnN0OwotCiAgICAgICAg
IFBsYXRmb3JtTWVudURlc2NyaXB0aW9uIHBsYXRmb3JtRGVzY3JpcHRpb24oKSBjb25zdDsKICAg
ICAgICAgdm9pZCBzZXRQbGF0Zm9ybURlc2NyaXB0aW9uKFBsYXRmb3JtTWVudURlc2NyaXB0aW9u
KTsKIApAQCAtNzUsNyArNjcsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHN0YXRp
YyBDb250ZXh0TWVudUl0ZW0qIGl0ZW1XaXRoSWQoaW50KTsKICNlbmRpZgogICAgIHByaXZhdGU6
Ci0gICAgICAgIEhpdFRlc3RSZXN1bHQgbV9oaXRUZXN0UmVzdWx0OwogI2lmIFBMQVRGT1JNKE1B
QykKICAgICAgICAgLy8gS2VlcCB0aGlzIGluIHN5bmMgd2l0aCB0aGUgUGxhdGZvcm1NZW51RGVz
Y3JpcHRpb24gdHlwZWRlZgogICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IG1fcGxh
dGZvcm1EZXNjcmlwdGlvbjsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9UZW1wb3Jh
cnlMaW5rU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9U
ZW1wb3JhcnlMaW5rU3R1YnMuY3BwCShyZXZpc2lvbiA3MzQ2OSkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vYW5kcm9pZC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjcs
NyArMTY3LDcgQEAgUGFzdGVib2FyZDo6flBhc3RlYm9hcmQoKQogfQogCiAKLUNvbnRleHRNZW51
OjpDb250ZXh0TWVudShjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQpIDogbV9oaXRUZXN0UmVz
dWx0KHJlc3VsdCkKK0NvbnRleHRNZW51OjpDb250ZXh0TWVudSgpCiB7CiAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vYnJldy9Db250ZXh0TWVudUJyZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vYnJldy9Db250ZXh0TWVudUJyZXcuY3BwCShyZXZpc2lvbiA3MzQ2OSkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vYnJldy9Db250ZXh0TWVudUJyZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwx
NSArMzIsMTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1Db250ZXh0TWVudTo6Q29udGV4
dE1lbnUoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0KQotICAgIDogbV9oaXRUZXN0UmVzdWx0
KHJlc3VsdCkKK0NvbnRleHRNZW51OjpDb250ZXh0TWVudSgpCiB7CiAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotQ29udGV4dE1lbnU6OkNvbnRl
eHRNZW51KGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgUGxhdGZvcm1NZW51RGVz
Y3JpcHRpb24gbWVudSkKLSAgICA6IG1faGl0VGVzdFJlc3VsdChyZXN1bHQpCitDb250ZXh0TWVu
dTo6Q29udGV4dE1lbnUoY29uc3QgUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gbWVudSkKIHsKICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICBub3RJbXBsZW1lbnRlZCgpOwpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9Db250ZXh0TWVudUNocm9taXVtLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NvbnRleHRNZW51Q2hyb21pdW0uY3BwCShy
ZXZpc2lvbiA3MzQ2OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ29udGV4dE1lbnVD
aHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDEzICszNiwxMSBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAvLyBUaGlzIGlzIGEgc3R1YiBpbXBsZW1lbnRhdGlvbiBvZiBXZWJLaXQncyBD
b250ZXh0TWVudSBjbGFzcyB0aGF0IGRvZXMKIC8vIG5vdGhpbmcuCiAKLUNvbnRleHRNZW51OjpD
b250ZXh0TWVudShjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQpCi0gICAgOiBtX2hpdFRlc3RS
ZXN1bHQocmVzdWx0KQorQ29udGV4dE1lbnU6OkNvbnRleHRNZW51KCkKIHsKIH0KIAotQ29udGV4
dE1lbnU6OkNvbnRleHRNZW51KGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgUGxh
dGZvcm1NZW51RGVzY3JpcHRpb24gbWVudSkKLSAgICA6IG1faGl0VGVzdFJlc3VsdChyZXN1bHQp
CitDb250ZXh0TWVudTo6Q29udGV4dE1lbnUoY29uc3QgUGxhdGZvcm1NZW51RGVzY3JpcHRpb24g
bWVudSkKIHsKIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9lZmwvQ29udGV4dE1lbnVFZmwu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZWZsL0NvbnRleHRNZW51RWZsLmNw
cAkocmV2aXNpb24gNzM0NjkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2VmbC9Db250ZXh0TWVudUVm
bC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDMwICsyOSwyNSBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLUNvbnRleHRNZW51OjpDb250ZXh0TWVudShjb25zdCBIaXRUZXN0UmVzdWx0JiBy
ZXN1bHQpCi0gICAgOiBtX2hpdFRlc3RSZXN1bHQocmVzdWx0KQorQ29udGV4dE1lbnU6OkNvbnRl
eHRNZW51KCkKIHsKLSAgICBtX2NvbnRleHRNZW51Q2xpZW50ID0gc3RhdGljX2Nhc3Q8Q29udGV4
dE1lbnVDbGllbnRFZmwqPihjb250cm9sbGVyKCktPmNsaWVudCgpKTsKLSAgICBtX3BsYXRmb3Jt
RGVzY3JpcHRpb24gPSBtX2NvbnRleHRNZW51Q2xpZW50LT5jcmVhdGVQbGF0Zm9ybURlc2NyaXB0
aW9uKHRoaXMpOworICAgIG1fcGxhdGZvcm1EZXNjcmlwdGlvbiA9IChQbGF0Zm9ybU1lbnVEZXNj
cmlwdGlvbikgZXdrX2NvbnRleHRfbWVudV9uZXcobV92aWV3LCBtZW51LT5jb250cm9sbGVyKCkp
OwogfQogCi1Db250ZXh0TWVudTo6Q29udGV4dE1lbnUoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVz
dWx0LCBjb25zdCBQbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbiBtZW51KQotICAgIDogbV9oaXRUZXN0
UmVzdWx0KHJlc3VsdCkKLSAgICAsIG1fcGxhdGZvcm1EZXNjcmlwdGlvbihtZW51KQorQ29udGV4
dE1lbnU6OkNvbnRleHRNZW51KGNvbnN0IFBsYXRmb3JtTWVudURlc2NyaXB0aW9uIG1lbnUpCisg
ICAgOiBtX3BsYXRmb3JtRGVzY3JpcHRpb24obWVudSkKIHsKLSAgICBtX2NvbnRleHRNZW51Q2xp
ZW50ID0gc3RhdGljX2Nhc3Q8Q29udGV4dE1lbnVDbGllbnRFZmwqPihjb250cm9sbGVyKCktPmNs
aWVudCgpKTsKIH0KIAogQ29udGV4dE1lbnU6On5Db250ZXh0TWVudSgpCiB7CiAgICAgaWYgKG1f
cGxhdGZvcm1EZXNjcmlwdGlvbikKLSAgICAgICAgbV9jb250ZXh0TWVudUNsaWVudC0+ZnJlZVBs
YXRmb3JtRGVzY3JpcHRpb24obV9wbGF0Zm9ybURlc2NyaXB0aW9uKTsKKyAgICAgICAgZXdrX2Nv
bnRleHRfbWVudV9mcmVlKHN0YXRpY19jYXN0PEV3a19Db250ZXh0X01lbnUqPihtX3BsYXRmb3Jt
RGVzY3JpcHRpb24pKTsKIH0KIAogdm9pZCBDb250ZXh0TWVudTo6YXBwZW5kSXRlbShDb250ZXh0
TWVudUl0ZW0mIGl0ZW0pCiB7Ci0gICAgY2hlY2tPckVuYWJsZUlmTmVlZGVkKGl0ZW0pOwotICAg
IG1fY29udGV4dE1lbnVDbGllbnQtPmFwcGVuZEl0ZW0obV9wbGF0Zm9ybURlc2NyaXB0aW9uLCBp
dGVtKTsKKyAgICBld2tfY29udGV4dF9tZW51X2l0ZW1fYXBwZW5kKHN0YXRpY19jYXN0PEV3a19D
b250ZXh0X01lbnUqPihtX3BsYXRmb3JtRGVzY3JpcHRpb24pLCBpdGVtKTsKIH0KIAogdm9pZCBD
b250ZXh0TWVudTo6c2V0UGxhdGZvcm1EZXNjcmlwdGlvbihQbGF0Zm9ybU1lbnVEZXNjcmlwdGlv
biBtZW51KQpAQCAtNjAsNyArNTUsNyBAQCB2b2lkIENvbnRleHRNZW51OjpzZXRQbGF0Zm9ybURl
c2NyaXB0aW9uCiAgICAgQVNTRVJUKCFtX3BsYXRmb3JtRGVzY3JpcHRpb24pOwogCiAgICAgbV9w
bGF0Zm9ybURlc2NyaXB0aW9uID0gbWVudTsKLSAgICBtX2NvbnRleHRNZW51Q2xpZW50LT5zaG93
KG1fcGxhdGZvcm1EZXNjcmlwdGlvbik7CisgICAgZXdrX2NvbnRleHRfbWVudV9zaG93KHN0YXRp
Y19jYXN0PEV3a19Db250ZXh0X01lbnUqPihtX3BsYXRmb3JtRGVzY3JpcHRpb24pKTsKIH0KIAog
UGxhdGZvcm1NZW51RGVzY3JpcHRpb24gQ29udGV4dE1lbnU6OnBsYXRmb3JtRGVzY3JpcHRpb24o
KSBjb25zdApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9lZmwvQ29udGV4dE1lbnVJdGVtRWZsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2VmbC9Db250ZXh0TWVudUl0ZW1FZmwu
Y3BwCShyZXZpc2lvbiA3MzQ2OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZWZsL0NvbnRleHRNZW51
SXRlbUVmbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNiw4ICsxMTYsNyBAQCB2b2lkIENvbnRl
eHRNZW51SXRlbTo6c2V0U3ViTWVudShDb250ZXh0CiAgICAgICAgIHJldHVybjsKIAogICAgIG1f
cGxhdGZvcm1EZXNjcmlwdGlvbi50eXBlID0gU3VibWVudVR5cGU7Ci0gICAgbV9wbGF0Zm9ybURl
c2NyaXB0aW9uLnN1Yk1lbnUgPSBuZXcgQ29udGV4dE1lbnUoc3ViTWVudS0+aGl0VGVzdFJlc3Vs
dCgpLAotICAgICAgICAgICAgc3ViTWVudS0+cmVsZWFzZVBsYXRmb3JtRGVzY3JpcHRpb24oKSk7
CisgICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9uLnN1Yk1lbnUgPSBuZXcgQ29udGV4dE1lbnUoc3Vi
TWVudS0+cmVsZWFzZVBsYXRmb3JtRGVzY3JpcHRpb24oKSk7CiB9CiAKIGJvb2wgQ29udGV4dE1l
bnVJdGVtOjpjaGVja2VkKCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3RrL0NvbnRl
eHRNZW51R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2d0ay9Db250ZXh0
TWVudUd0ay5jcHAJKHJldmlzaW9uIDczNDY5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ29u
dGV4dE1lbnVHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw4ICszNCw3IEBAIHN0YXRpYyB2
b2lkIG1lbnVJdGVtQWN0aXZhdGVkKEd0a01lbnVJdGUKICAgICBjb250cm9sbGVyLT5jb250ZXh0
TWVudUl0ZW1TZWxlY3RlZCgmY29udGV4dEl0ZW0pOwogfQogCi1Db250ZXh0TWVudTo6Q29udGV4
dE1lbnUoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0KQotICAgIDogbV9oaXRUZXN0UmVzdWx0
KHJlc3VsdCkKK0NvbnRleHRNZW51OjpDb250ZXh0TWVudSgpCiB7CiAgICAgbV9wbGF0Zm9ybURl
c2NyaXB0aW9uID0gR1RLX01FTlUoZ3RrX21lbnVfbmV3KCkpOwogCkBAIC01MSw3ICs1MCw2IEBA
IENvbnRleHRNZW51Ojp+Q29udGV4dE1lbnUoKQogdm9pZCBDb250ZXh0TWVudTo6YXBwZW5kSXRl
bShDb250ZXh0TWVudUl0ZW0mIGl0ZW0pCiB7CiAgICAgQVNTRVJUKG1fcGxhdGZvcm1EZXNjcmlw
dGlvbik7Ci0gICAgY2hlY2tPckVuYWJsZUlmTmVlZGVkKGl0ZW0pOwogCiAgICAgQ29udGV4dE1l
bnVJdGVtVHlwZSB0eXBlID0gaXRlbS50eXBlKCk7CiAgICAgR3RrTWVudUl0ZW0qIHBsYXRmb3Jt
SXRlbSA9IENvbnRleHRNZW51SXRlbTo6Y3JlYXRlTmF0aXZlTWVudUl0ZW0oaXRlbS5yZWxlYXNl
UGxhdGZvcm1EZXNjcmlwdGlvbigpKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvQ29u
dGV4dE1lbnVIYWlrdS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9D
b250ZXh0TWVudUhhaWt1LmNwcAkocmV2aXNpb24gNzM0NjkpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2hhaWt1L0NvbnRleHRNZW51SGFpa3UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSw5ICs3NSw4
IEBAIHByaXZhdGU6CiAgICAgaW50IG1fcmVzdWx0OwogfTsKIAotQ29udGV4dE1lbnU6OkNvbnRl
eHRNZW51KGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCkKLSAgICA6IG1faGl0VGVzdFJlc3Vs
dChyZXN1bHQpCi0gICAgLCBtX3BsYXRmb3JtRGVzY3JpcHRpb24obmV3IEJNZW51KCJjb250ZXh0
X21lbnUiKSkKK0NvbnRleHRNZW51OjpDb250ZXh0TWVudSgpCisgICAgOiBtX3BsYXRmb3JtRGVz
Y3JpcHRpb24obmV3IEJNZW51KCJjb250ZXh0X21lbnUiKSkKIHsKIH0KIApAQCAtODgsOCArODcs
NiBAQCBDb250ZXh0TWVudTo6fkNvbnRleHRNZW51KCkKIAogdm9pZCBDb250ZXh0TWVudTo6YXBw
ZW5kSXRlbShDb250ZXh0TWVudUl0ZW0mIGl0ZW0pCiB7Ci0gICAgY2hlY2tPckVuYWJsZUlmTmVl
ZGVkKGl0ZW0pOwotCiAgICAgQk1lbnVJdGVtKiBtZW51SXRlbSA9IGl0ZW0ucmVsZWFzZVBsYXRm
b3JtRGVzY3JpcHRpb24oKTsKICAgICBpZiAobWVudUl0ZW0pCiAgICAgICAgIG1fcGxhdGZvcm1E
ZXNjcmlwdGlvbi0+QWRkSXRlbShtZW51SXRlbSk7CkBAIC0xMDIsOCArOTksNiBAQCB1bnNpZ25l
ZCBDb250ZXh0TWVudTo6aXRlbUNvdW50KCkgY29uc3QKIAogdm9pZCBDb250ZXh0TWVudTo6aW5z
ZXJ0SXRlbSh1bnNpZ25lZCBwb3NpdGlvbiwgQ29udGV4dE1lbnVJdGVtJiBpdGVtKQogewotICAg
IGNoZWNrT3JFbmFibGVJZk5lZWRlZChpdGVtKTsKLQogICAgIEJNZW51SXRlbSogbWVudUl0ZW0g
PSBpdGVtLnJlbGVhc2VQbGF0Zm9ybURlc2NyaXB0aW9uKCk7CiAgICAgaWYgKG1lbnVJdGVtKQog
ICAgICAgICBtX3BsYXRmb3JtRGVzY3JpcHRpb24tPkFkZEl0ZW0obWVudUl0ZW0sIHBvc2l0aW9u
KTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbWFjL0NvbnRleHRNZW51TWFjLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbWFjL0NvbnRleHRNZW51TWFjLm1tCShyZXZpc2lvbiA3
MzQ2OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vbWFjL0NvbnRleHRNZW51TWFjLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCwxNyArMzAsMTUgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1Db250
ZXh0TWVudTo6Q29udGV4dE1lbnUoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0KQotICAgIDog
bV9oaXRUZXN0UmVzdWx0KHJlc3VsdCkKK0NvbnRleHRNZW51OjpDb250ZXh0TWVudSgpCiB7CiAg
ICAgTlNNdXRhYmxlQXJyYXkqIGFycmF5ID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF07
CiAgICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9uID0gYXJyYXk7CiAgICAgW2FycmF5IHJlbGVhc2Vd
OwogfQogCi1Db250ZXh0TWVudTo6Q29udGV4dE1lbnUoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVz
dWx0LCBjb25zdCBQbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbiBtZW51KQotICAgIDogbV9oaXRUZXN0
UmVzdWx0KHJlc3VsdCkKLSAgICAsIG1fcGxhdGZvcm1EZXNjcmlwdGlvbihtZW51KQorQ29udGV4
dE1lbnU6OkNvbnRleHRNZW51KGNvbnN0IFBsYXRmb3JtTWVudURlc2NyaXB0aW9uIG1lbnUpCisg
ICAgOiBtX3BsYXRmb3JtRGVzY3JpcHRpb24obWVudSkKIHsKIH0KIApAQCAtNTAsOCArNDgsNiBA
QCBDb250ZXh0TWVudTo6fkNvbnRleHRNZW51KCkKIAogdm9pZCBDb250ZXh0TWVudTo6YXBwZW5k
SXRlbShDb250ZXh0TWVudUl0ZW0mIGl0ZW0pCiB7Ci0gICAgY2hlY2tPckVuYWJsZUlmTmVlZGVk
KGl0ZW0pOwotCiAgICAgTlNNZW51SXRlbSogcGxhdGZvcm1JdGVtID0gaXRlbS5yZWxlYXNlUGxh
dGZvcm1EZXNjcmlwdGlvbigpOwogCiAgICAgW21fcGxhdGZvcm1EZXNjcmlwdGlvbi5nZXQoKSBh
ZGRPYmplY3Q6cGxhdGZvcm1JdGVtXTsKQEAgLTYwLDggKzU2LDYgQEAgdm9pZCBDb250ZXh0TWVu
dTo6YXBwZW5kSXRlbShDb250ZXh0TWVudQogCiB2b2lkIENvbnRleHRNZW51OjppbnNlcnRJdGVt
KHVuc2lnbmVkIHBvc2l0aW9uLCBDb250ZXh0TWVudUl0ZW0mIGl0ZW0pCiB7Ci0gICAgY2hlY2tP
ckVuYWJsZUlmTmVlZGVkKGl0ZW0pOwotCiAgICAgTlNNZW51SXRlbSogcGxhdGZvcm1JdGVtID0g
aXRlbS5yZWxlYXNlUGxhdGZvcm1EZXNjcmlwdGlvbigpOwogCiAgICAgW21fcGxhdGZvcm1EZXNj
cmlwdGlvbi5nZXQoKSBpbnNlcnRPYmplY3Q6cGxhdGZvcm1JdGVtIGF0SW5kZXg6cG9zaXRpb25d
OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9xdC9Db250ZXh0TWVudVF0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3F0L0NvbnRleHRNZW51UXQuY3BwCShyZXZpc2lvbiA3MzQ2
OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vcXQvQ29udGV4dE1lbnVRdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM1LDggKzM1LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1Db250ZXh0TWVu
dTo6Q29udGV4dE1lbnUoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0KQotICAgIDogbV9oaXRU
ZXN0UmVzdWx0KHJlc3VsdCkKK0NvbnRleHRNZW51OjpDb250ZXh0TWVudSgpCiB7CiB9CiAKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vd2luL0NvbnRleHRNZW51V2luLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL3dpbi9Db250ZXh0TWVudVdpbi5jcHAJKHJldmlzaW9uIDczNDY5
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ29udGV4dE1lbnVXaW4uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00Myw5ICs0Myw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ29udGV4dE1l
bnU6OkNvbnRleHRNZW51KGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCkKLSAgICA6IG1faGl0
VGVzdFJlc3VsdChyZXN1bHQpCi0gICAgLCBtX3BsYXRmb3JtRGVzY3JpcHRpb24oMCkKK0NvbnRl
eHRNZW51OjpDb250ZXh0TWVudSgpCisgICAgOiBtX3BsYXRmb3JtRGVzY3JpcHRpb24oMCkKICNp
ZiBPUyhXSU5DRSkKICAgICAsIG1faXRlbUNvdW50KDApCiAjZW5kaWYKQEAgLTUzLDkgKzUyLDgg
QEAgQ29udGV4dE1lbnU6OkNvbnRleHRNZW51KGNvbnN0IEhpdFRlc3RSZQogICAgIHNldFBsYXRm
b3JtRGVzY3JpcHRpb24oOjpDcmVhdGVQb3B1cE1lbnUoKSk7CiB9CiAKLUNvbnRleHRNZW51OjpD
b250ZXh0TWVudShjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IFBsYXRmb3JtTWVu
dURlc2NyaXB0aW9uIG1lbnUpCi0gICAgOiBtX2hpdFRlc3RSZXN1bHQocmVzdWx0KQotICAgICwg
bV9wbGF0Zm9ybURlc2NyaXB0aW9uKDApCitDb250ZXh0TWVudTo6Q29udGV4dE1lbnUoY29uc3Qg
UGxhdGZvcm1NZW51RGVzY3JpcHRpb24gbWVudSkKKyAgICA6IG1fcGxhdGZvcm1EZXNjcmlwdGlv
bigwKQogI2lmIE9TKFdJTkNFKQogICAgICwgbV9pdGVtQ291bnQoMCkKICNlbmRpZgpAQCAtMTE4
LDggKzExNiw2IEBAIHZvaWQgQ29udGV4dE1lbnU6Omluc2VydEl0ZW0odW5zaWduZWQgaW4KICAg
ICBpZiAoIW1fcGxhdGZvcm1EZXNjcmlwdGlvbikKICAgICAgICAgcmV0dXJuOwogCi0gICAgY2hl
Y2tPckVuYWJsZUlmTmVlZGVkKGl0ZW0pOwotCiAjaWYgT1MoV0lOQ0UpCiAgICAgaWYgKGluc2Vy
dE1lbnVJdGVtKG1fcGxhdGZvcm1EZXNjcmlwdGlvbiwgcG9zaXRpb24sIGl0ZW0pKQogICAgICAg
ICArK21faXRlbUNvdW50OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS93eC9Db250ZXh0TWVudVd4
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3d4L0NvbnRleHRNZW51V3guY3Bw
CShyZXZpc2lvbiA3MzQ2OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vd3gvQ29udGV4dE1lbnVXeC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgQ29udGV4dE1lbnVJdGVtKiBDb250
ZXh0TWVudTo6aXRlbVdpdGhJZAogICAgIHJldHVybiBuZXcgQ29udGV4dE1lbnVJdGVtKEFjdGlv
blR5cGUsIHNfaXRlbUFjdGlvbnMuZ2V0KGlkKSwgIiIpOwogfQogCi1Db250ZXh0TWVudTo6Q29u
dGV4dE1lbnUoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0KSA6IG1faGl0VGVzdFJlc3VsdChy
ZXN1bHQpCitDb250ZXh0TWVudTo6Q29udGV4dE1lbnUoKQogewogICAgIG1fcGxhdGZvcm1EZXNj
cmlwdGlvbiA9IG5ldyB3eE1lbnUoMCk7CiB9CkBAIC01Nyw4ICs1Nyw2IEBAIHZvaWQgQ29udGV4
dE1lbnU6OmFwcGVuZEl0ZW0oQ29udGV4dE1lbnUKIHsKICAgICBpZiAoIW1fcGxhdGZvcm1EZXNj
cmlwdGlvbikKICAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGNoZWNrT3JFbmFibGVJZk5lZWRl
ZChpdGVtKTsKICAgICAgICAgCiAgICAgUGxhdGZvcm1NZW51SXRlbURlc2NyaXB0aW9uIGl0ZW1E
ZXNjcmlwdGlvbiA9IGl0ZW0ucmVsZWFzZVBsYXRmb3JtRGVzY3JpcHRpb24oKTsgICAgCiAgICAg
d3hJdGVtS2luZCBtZW51S2luZFd4ID0gKCBpdGVtRGVzY3JpcHRpb24udHlwZSA9PSBDaGVja2Fi
bGVBY3Rpb25UeXBlICkgPyB3eElURU1fQ0hFQ0sgOiB3eElURU1fTk9STUFMOwpJbmRleDogV2Vi
Q29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9y
ZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAJKHJldmlzaW9uIDczNDY5KQorKysgV2ViQ29yZS9y
ZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDE2
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAor
SGl0VGVzdFJlc3VsdDo6SGl0VGVzdFJlc3VsdCgpCisgICAgOiBtX2lzT3ZlcldpZGdldChmYWxz
ZSkKKyAgICAsIG1faXNSZWN0QmFzZWQoZmFsc2UpCisgICAgLCBtX3RvcFBhZGRpbmcoMCkKKyAg
ICAsIG1fcmlnaHRQYWRkaW5nKDApCisgICAgLCBtX2JvdHRvbVBhZGRpbmcoMCkKKyAgICAsIG1f
bGVmdFBhZGRpbmcoMCkKK3sKK30KKwogSGl0VGVzdFJlc3VsdDo6SGl0VGVzdFJlc3VsdChjb25z
dCBJbnRQb2ludCYgcG9pbnQpCiAgICAgOiBtX3BvaW50KHBvaW50KQogICAgICwgbV9pc092ZXJX
aWRnZXQoZmFsc2UpCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5oCShyZXZpc2lvbiA3
MzQ2OSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuaAkod29ya2luZyBjb3B5
KQpAQCAtNDMsNiArNDMsNyBAQCBjbGFzcyBTY3JvbGxiYXI7CiAKIGNsYXNzIEhpdFRlc3RSZXN1
bHQgewogcHVibGljOgorICAgIEhpdFRlc3RSZXN1bHQoKTsKICAgICBIaXRUZXN0UmVzdWx0KGNv
bnN0IEludFBvaW50Jik7CiAgICAgLy8gUGFzcyBub24tbmVnYXRpdmUgcGFkZGluZyB2YWx1ZXMg
dG8gcGVyZm9ybSBhIHJlY3QtYmFzZWQgaGl0IHRlc3QuCiAgICAgSGl0VGVzdFJlc3VsdChjb25z
dCBJbnRQb2ludCYgY2VudGVyUG9pbnQsIHVuc2lnbmVkIHRvcFBhZGRpbmcsIHVuc2lnbmVkIHJp
Z2h0UGFkZGluZywgdW5zaWduZWQgYm90dG9tUGFkZGluZywgdW5zaWduZWQgbGVmdFBhZGRpbmcp
OwpJbmRleDogV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9DaGFuZ2VM
b2cJKHJldmlzaW9uIDczNDkwKQorKysgV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxOSBAQAorMjAxMC0xMi0wNyAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVp
bkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgTGF5ZXJpbmcgVmlvbGF0aW9uIGluIENvbnRleHRNZW51IC0gbWVtYmVyIHZhcmlhYmxl
IG9mIHR5cGUgSGl0VGVzdFJlc3VsdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NTA1ODYKKyAgICAgICAgCisgICAgICAgIFVwZGF0ZSB1c2VycyBvZiBD
b250ZXh0TWVudSBhbmQgQ29udGV4dE1lbnVDb250cm9sbGVyIHRvIG1hdGNoIHdoZXJlIHRoZSBu
ZXcgZnVuY3Rpb25zIAorICAgICAgICBhcmUgbG9jYXRlZC4KKworICAgICAgICAqIFNoYXJlZC9X
ZWJDb250ZXh0TWVudUl0ZW1EYXRhLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4dE1l
bnVJdGVtRGF0YTo6V2ViQ29udGV4dE1lbnVJdGVtRGF0YSk6IFJlbW92ZSB0aGUgY2FsbCB0byBj
aGVja09yRW5hYmxlSXRlbSwgdGhhdCBjYWxsIHdpbGwgYmUgbWFkZSB3aGVuCisgICAgICAgICAg
ICB0aGUgQ29udGV4dE1lbnVJdGVtIGlzIGFkZGVkIHRvIHRoZSBDb250ZXh0TWVudSB0aHJvdWdo
IHRoZSBDb250ZXh0TWVudUNvbnRyb2xsZXIuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYkNvbnRleHRNZW51LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4dE1lbnU6OnNo
b3cpOgorCiAyMDEwLTEyLTA3ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KSW5kZXg6IFdlYktpdDIvU2hhcmVk
L1dlYkNvbnRleHRNZW51SXRlbURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvU2hhcmVk
L1dlYkNvbnRleHRNZW51SXRlbURhdGEuY3BwCShyZXZpc2lvbiA3MzQ2OSkKKysrIFdlYktpdDIv
U2hhcmVkL1dlYkNvbnRleHRNZW51SXRlbURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw4
ICs3Myw2IEBAIFdlYkNvbnRleHRNZW51SXRlbURhdGE6OldlYkNvbnRleHRNZW51SXQKICAgICAg
ICAgbV9zdWJtZW51ID0ga2l0SXRlbXMoY29yZVN1Ym1lbnUsIG1lbnUpOwogICAgIH0KICAgICAK
LSAgICBtZW51LT5jaGVja09yRW5hYmxlSWZOZWVkZWQoaXRlbSk7Ci0gICAgCiAgICAgbV9lbmFi
bGVkID0gaXRlbS5lbmFibGVkKCk7CiAgICAgbV9jaGVja2VkID0gaXRlbS5jaGVja2VkKCk7CiB9
CkluZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJDb250ZXh0TWVudS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQ29udGV4dE1lbnUuY3Bw
CShyZXZpc2lvbiA3MzQ2OSkKKysrIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkNvbnRl
eHRNZW51LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsMTAgKzQ3LDEzIEBAIFdlYkNvbnRleHRN
ZW51Ojp+V2ViQ29udGV4dE1lbnUoKQogCiB2b2lkIFdlYkNvbnRleHRNZW51OjpzaG93KCkKIHsK
LSAgICBDb250ZXh0TWVudSogbWVudSA9IG1fcGFnZS0+Y29yZVBhZ2UoKS0+Y29udGV4dE1lbnVD
b250cm9sbGVyKCktPmNvbnRleHRNZW51KCk7CisgICAgQ29udGV4dE1lbnVDb250cm9sbGVyKiBj
b250cm9sbGVyID0gbV9wYWdlLT5jb3JlUGFnZSgpLT5jb250ZXh0TWVudUNvbnRyb2xsZXIoKTsK
KyAgICBpZiAoIWNvbnRyb2xsZXIpCisgICAgICAgIHJldHVybjsKKyAgICBDb250ZXh0TWVudSog
bWVudSA9IGNvbnRyb2xsZXItPmNvbnRleHRNZW51KCk7CiAgICAgaWYgKCFtZW51KQogICAgICAg
ICByZXR1cm47Ci0gICAgTm9kZSogbm9kZSA9IG1lbnUtPmhpdFRlc3RSZXN1bHQoKS5pbm5lck5v
blNoYXJlZE5vZGUoKTsKKyAgICBOb2RlKiBub2RlID0gY29udHJvbGxlci0+aGl0VGVzdFJlc3Vs
dCgpLmlubmVyTm9uU2hhcmVkTm9kZSgpOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJu
OwogICAgIEZyYW1lKiBmcmFtZSA9IG5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCk7CkBAIC02NSwx
MiArNjgsMTIgQEAgdm9pZCBXZWJDb250ZXh0TWVudTo6c2hvdygpCiAgICAgVmVjdG9yPFdlYkNv
bnRleHRNZW51SXRlbURhdGE+IHByb3Bvc2VkTWVudSA9IGtpdEl0ZW1zKGNvcmVJdGVtcywgbWVu
dSk7CiAgICAgVmVjdG9yPFdlYkNvbnRleHRNZW51SXRlbURhdGE+IG5ld01lbnU7CiAgICAgUmVm
UHRyPEFQSU9iamVjdD4gdXNlckRhdGE7Ci0gICAgUmVmUHRyPEluamVjdGVkQnVuZGxlSGl0VGVz
dFJlc3VsdD4gaGl0VGVzdFJlc3VsdCA9IEluamVjdGVkQnVuZGxlSGl0VGVzdFJlc3VsdDo6Y3Jl
YXRlKG1lbnUtPmhpdFRlc3RSZXN1bHQoKSk7CisgICAgUmVmUHRyPEluamVjdGVkQnVuZGxlSGl0
VGVzdFJlc3VsdD4gaGl0VGVzdFJlc3VsdCA9IEluamVjdGVkQnVuZGxlSGl0VGVzdFJlc3VsdDo6
Y3JlYXRlKGNvbnRyb2xsZXItPmhpdFRlc3RSZXN1bHQoKSk7CiAgICAgaWYgKG1fcGFnZS0+aW5q
ZWN0ZWRCdW5kbGVDb250ZXh0TWVudUNsaWVudCgpLmdldEN1c3RvbU1lbnVGcm9tRGVmYXVsdEl0
ZW1zKG1fcGFnZSwgaGl0VGVzdFJlc3VsdC5nZXQoKSwgcHJvcG9zZWRNZW51LCBuZXdNZW51LCB1
c2VyRGF0YSkpCiAgICAgICAgIHByb3Bvc2VkTWVudSA9IG5ld01lbnU7CiAKICAgICAvLyBOb3Rp
ZnkgdGhlIFVJUHJvY2Vzcy4KLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94
eTo6U2hvd0NvbnRleHRNZW51KHZpZXctPmNvbnRlbnRzVG9XaW5kb3cobWVudS0+aGl0VGVzdFJl
c3VsdCgpLnBvaW50KCkpLCBwcm9wb3NlZE1lbnUsIEluamVjdGVkQnVuZGxlVXNlck1lc3NhZ2VF
bmNvZGVyKHVzZXJEYXRhLmdldCgpKSkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2Vi
UGFnZVByb3h5OjpTaG93Q29udGV4dE1lbnUodmlldy0+Y29udGVudHNUb1dpbmRvdyhjb250cm9s
bGVyLT5oaXRUZXN0UmVzdWx0KCkucG9pbnQoKSksIHByb3Bvc2VkTWVudSwgSW5qZWN0ZWRCdW5k
bGVVc2VyTWVzc2FnZUVuY29kZXIodXNlckRhdGEuZ2V0KCkpKSk7CiB9CiAKIHZvaWQgV2ViQ29u
dGV4dE1lbnU6Oml0ZW1TZWxlY3RlZChjb25zdCBXZWJDb250ZXh0TWVudUl0ZW1EYXRhJiBpdGVt
KQpJbmRleDogV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA3MzQ4NykKKysrIFdlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAxMC0xMi0wNyAgQnJp
YW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTGF5ZXJpbmcgVmlvbGF0aW9uIGluIENvbnRl
eHRNZW51IC0gbWVtYmVyIHZhcmlhYmxlIG9mIHR5cGUgSGl0VGVzdFJlc3VsdAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTA1ODYKKyAgICAgICAgCisg
ICAgICAgIFVwZGF0ZSB1c2VycyBvZiBDb250ZXh0TWVudSBhbmQgQ29udGV4dE1lbnVDb250cm9s
bGVyIHRvIG1hdGNoIHdoZXJlIHRoZSBuZXcgZnVuY3Rpb25zIAorICAgICAgICBhcmUgbG9jYXRl
ZC4KKworICAgICAgICAqIHNyYy9Db250ZXh0TWVudUNsaWVudEltcGwuY3BwOgorICAgICAgICAo
V2ViS2l0OjpzZWxlY3RNaXNzcGVsbGVkV29yZCk6CisgICAgICAgIChXZWJLaXQ6OkNvbnRleHRN
ZW51Q2xpZW50SW1wbDo6Z2V0Q3VzdG9tTWVudUZyb21EZWZhdWx0SXRlbXMpOgorCiAyMDEwLTEy
LTA2ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBTYW0gV2VpbmlnLgpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9Db250ZXh0TWVudUNsaWVu
dEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvQ29udGV4dE1lbnVD
bGllbnRJbXBsLmNwcAkocmV2aXNpb24gNzM0NjkpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL0Nv
bnRleHRNZW51Q2xpZW50SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAK
ICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiQ1NTU3R5bGVEZWNsYXJh
dGlvbi5oIgogI2luY2x1ZGUgIkNvbnRleHRNZW51LmgiCisjaW5jbHVkZSAiQ29udGV4dE1lbnVD
b250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudExv
YWRlci5oIgogI2luY2x1ZGUgIkVkaXRvci5oIgpAQCAtNDUsNiArNDYsNyBAQAogI2luY2x1ZGUg
IkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJNZWRpYUVycm9yLmgi
CisjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyV2lkZ2V0LmgiCiAjaW5jbHVkZSAiVGV4dEJyZWFrSXRlcmF0b3IuaCIKQEAgLTEx
MCw3ICsxMTIsNyBAQCBzdGF0aWMgU3RyaW5nIHNlbGVjdE1pc3NwZWxsZWRXb3JkKGNvbnN0CiAK
ICAgICAvLyBTZWxlY3Rpb24gaXMgZW1wdHksIHNvIGNoYW5nZSB0aGUgc2VsZWN0aW9uIHRvIHRo
ZSB3b3JkIHVuZGVyIHRoZSBjdXJzb3IuCiAgICAgSGl0VGVzdFJlc3VsdCBoaXRUZXN0UmVzdWx0
ID0gc2VsZWN0ZWRGcmFtZS0+ZXZlbnRIYW5kbGVyKCktPgotICAgICAgICBoaXRUZXN0UmVzdWx0
QXRQb2ludChkZWZhdWx0TWVudS0+aGl0VGVzdFJlc3VsdCgpLnBvaW50KCksIHRydWUpOworICAg
ICAgICBoaXRUZXN0UmVzdWx0QXRQb2ludChzZWxlY3RlZEZyYW1lLT5wYWdlKCktPmNvbnRleHRN
ZW51Q29udHJvbGxlcigpLT5oaXRUZXN0UmVzdWx0KCkucG9pbnQoKSwgdHJ1ZSk7CiAgICAgTm9k
ZSogaW5uZXJOb2RlID0gaGl0VGVzdFJlc3VsdC5pbm5lck5vZGUoKTsKICAgICBWaXNpYmxlUG9z
aXRpb24gcG9zKGlubmVyTm9kZS0+cmVuZGVyZXIoKS0+cG9zaXRpb25Gb3JQb2ludCgKICAgICAg
ICAgaGl0VGVzdFJlc3VsdC5sb2NhbFBvaW50KCkpKTsKQEAgLTE0NCw3ICsxNDYsNyBAQCBQbGF0
Zm9ybU1lbnVEZXNjcmlwdGlvbiBDb250ZXh0TWVudUNsaWVuCiAgICAgaWYgKCFtX3dlYlZpZXct
PmNvbnRleHRNZW51QWxsb3dlZCgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIEhpdFRlc3RS
ZXN1bHQgciA9IGRlZmF1bHRNZW51LT5oaXRUZXN0UmVzdWx0KCk7CisgICAgSGl0VGVzdFJlc3Vs
dCByID0gbV93ZWJWaWV3LT5wYWdlKCktPmNvbnRleHRNZW51Q29udHJvbGxlcigpLT5oaXRUZXN0
UmVzdWx0KCk7CiAgICAgRnJhbWUqIHNlbGVjdGVkRnJhbWUgPSByLmlubmVyTm9uU2hhcmVkTm9k
ZSgpLT5kb2N1bWVudCgpLT5mcmFtZSgpOwogCiAgICAgV2ViQ29udGV4dE1lbnVEYXRhIGRhdGE7
CkluZGV4OiBXZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL0No
YW5nZUxvZwkocmV2aXNpb24gNzM0OTApCisrKyBXZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDEwLTEyLTA3ICBCcmlhbiBXZWluc3RlaW4gIDxi
d2VpbnN0ZWluQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBMYXllcmluZyBWaW9sYXRpb24gaW4gQ29udGV4dE1lbnUgLSBtZW1iZXIg
dmFyaWFibGUgb2YgdHlwZSBIaXRUZXN0UmVzdWx0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MDU4NgorICAgICAgICAKKyAgICAgICAgVXBkYXRlIHVz
ZXJzIG9mIENvbnRleHRNZW51IGFuZCBDb250ZXh0TWVudUNvbnRyb2xsZXIgdG8gbWF0Y2ggd2hl
cmUgdGhlIG5ldyBmdW5jdGlvbnMgCisgICAgICAgIGFyZSBsb2NhdGVkLgorCisgICAgICAgICog
V2ViQ29yZVN1cHBvcnQvV2ViQ29udGV4dE1lbnVDbGllbnQubW06CisgICAgICAgIChXZWJDb250
ZXh0TWVudUNsaWVudDo6Z2V0Q3VzdG9tTWVudUZyb21EZWZhdWx0SXRlbXMpOgorICAgICAgICAo
V2ViQ29udGV4dE1lbnVDbGllbnQ6OmNvbnRleHRNZW51SXRlbVNlbGVjdGVkKToKKyAgICAgICAg
KiBXZWJWaWV3L1dlYkhUTUxWaWV3Lm1tOgorICAgICAgICAoLVtXZWJNZW51VGFyZ2V0IHZhbGlk
YXRlTWVudUl0ZW06XSk6CisKIDIwMTAtMTItMDcgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3Rl
aW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEpvaG4gU3VsbGl2YW4uCkluZGV4
OiBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNvbnRleHRNZW51Q2xpZW50Lm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ29udGV4dE1lbnVDbGllbnQu
bW0JKHJldmlzaW9uIDczNDY5KQorKysgV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDb250
ZXh0TWVudUNsaWVudC5tbQkod29ya2luZyBjb3B5KQpAQCAtNDIsOCArNDIsMTAgQEAKICNpbXBv
cnQgIldlYlZpZXdGYWN0b3J5LmgiCiAjaW1wb3J0ICJXZWJWaWV3SW50ZXJuYWwuaCIKICNpbXBv
cnQgPFdlYkNvcmUvQ29udGV4dE1lbnUuaD4KKyNpbXBvcnQgPFdlYkNvcmUvQ29udGV4dE1lbnVD
b250cm9sbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0tVUkwuaD4KICNpbXBvcnQgPFdlYkNvcmUv
TG9jYWxpemVkU3RyaW5ncy5oPgorI2ltcG9ydCA8V2ViQ29yZS9QYWdlLmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL1J1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5oPgogI2ltcG9ydCA8V2ViS2l0L0RPTVBy
aXZhdGUuaD4KIApAQCAtMjc4LDcgKzI4MCw3IEBAIE5TTXV0YWJsZUFycmF5KiBXZWJDb250ZXh0
TWVudUNsaWVudDo6Z2UKICAgICBpZiAoIVtkZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6c2Vs
ZWN0b3JdKQogICAgICAgICByZXR1cm4gZGVmYXVsdE1lbnUtPnBsYXRmb3JtRGVzY3JpcHRpb24o
KTsKIAotICAgIE5TRGljdGlvbmFyeSAqZWxlbWVudCA9IFtbW1dlYkVsZW1lbnREaWN0aW9uYXJ5
IGFsbG9jXSBpbml0V2l0aEhpdFRlc3RSZXN1bHQ6ZGVmYXVsdE1lbnUtPmhpdFRlc3RSZXN1bHQo
KV0gYXV0b3JlbGVhc2VdOworICAgIE5TRGljdGlvbmFyeSAqZWxlbWVudCA9IFtbW1dlYkVsZW1l
bnREaWN0aW9uYXJ5IGFsbG9jXSBpbml0V2l0aEhpdFRlc3RSZXN1bHQ6W21fd2ViVmlldyBwYWdl
XS0+Y29udGV4dE1lbnVDb250cm9sbGVyKCktPmhpdFRlc3RSZXN1bHQoKV0gYXV0b3JlbGVhc2Vd
OwogCiAgICAgQk9PTCBwcmVWZXJzaW9uM0NsaWVudCA9IGlzUHJlVmVyc2lvbjNDbGllbnQoKTsK
ICAgICBpZiAocHJlVmVyc2lvbjNDbGllbnQpIHsKQEAgLTMwOCw3ICszMTAsNyBAQCB2b2lkIFdl
YkNvbnRleHRNZW51Q2xpZW50Ojpjb250ZXh0TWVudUl0CiAgICAgaWQgZGVsZWdhdGUgPSBbbV93
ZWJWaWV3IFVJRGVsZWdhdGVdOwogICAgIFNFTCBzZWxlY3RvciA9IEBzZWxlY3Rvcih3ZWJWaWV3
OmNvbnRleHRNZW51SXRlbVNlbGVjdGVkOmZvckVsZW1lbnQ6KTsKICAgICBpZiAoW2RlbGVnYXRl
IHJlc3BvbmRzVG9TZWxlY3RvcjpzZWxlY3Rvcl0pIHsKLSAgICAgICAgTlNEaWN0aW9uYXJ5ICpl
bGVtZW50ID0gW1tXZWJFbGVtZW50RGljdGlvbmFyeSBhbGxvY10gaW5pdFdpdGhIaXRUZXN0UmVz
dWx0OnBhcmVudE1lbnUtPmhpdFRlc3RSZXN1bHQoKV07CisgICAgICAgIE5TRGljdGlvbmFyeSAq
ZWxlbWVudCA9IFtbV2ViRWxlbWVudERpY3Rpb25hcnkgYWxsb2NdIGluaXRXaXRoSGl0VGVzdFJl
c3VsdDpbbV93ZWJWaWV3IHBhZ2VdLT5jb250ZXh0TWVudUNvbnRyb2xsZXIoKS0+aGl0VGVzdFJl
c3VsdCgpXTsKICAgICAgICAgTlNNZW51SXRlbSAqcGxhdGZvcm1JdGVtID0gaXRlbS0+cmVsZWFz
ZVBsYXRmb3JtRGVzY3JpcHRpb24oKTsKIAogICAgICAgICBDYWxsVUlEZWxlZ2F0ZShtX3dlYlZp
ZXcsIHNlbGVjdG9yLCBwbGF0Zm9ybUl0ZW0sIGVsZW1lbnQpOwpJbmRleDogV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViVmlldy9X
ZWJIVE1MVmlldy5tbQkocmV2aXNpb24gNzM0NjkpCisrKyBXZWJLaXQvbWFjL1dlYlZpZXcvV2Vi
SFRNTFZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTE3MCw3ICsxNzAsNyBAQCAtIChCT09MKXZh
bGlkYXRlTWVudUl0ZW06KE5TTWVudUl0ZW0gKilpCiB7CiAgICAgV2ViQ29yZTo6Q29udGV4dE1l
bnVJdGVtIGNvcmVJdGVtKGl0ZW0pOwogICAgIEFTU0VSVChfbWVudUNvbnRyb2xsZXItPmNvbnRl
eHRNZW51KCkpOwotICAgIF9tZW51Q29udHJvbGxlci0+Y29udGV4dE1lbnUoKS0+Y2hlY2tPckVu
YWJsZUlmTmVlZGVkKGNvcmVJdGVtKTsKKyAgICBfbWVudUNvbnRyb2xsZXItPmNoZWNrT3JFbmFi
bGVJZk5lZWRlZChjb3JlSXRlbSk7CiAgICAgcmV0dXJuIGNvcmVJdGVtLmVuYWJsZWQoKTsKIH0K
IApJbmRleDogV2ViS2l0L3F0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvQ2hh
bmdlTG9nCShyZXZpc2lvbiA3MzQ2OSkKKysrIFdlYktpdC9xdC9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAxMC0xMi0wNyAgQnJpYW4gV2VpbnN0ZWluICA8Yndl
aW5zdGVpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgTGF5ZXJpbmcgVmlvbGF0aW9uIGluIENvbnRleHRNZW51IC0gbWVtYmVyIHZh
cmlhYmxlIG9mIHR5cGUgSGl0VGVzdFJlc3VsdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTA1ODYKKyAgICAgICAgCisgICAgICAgIFVwZGF0ZSB1c2Vy
cyBvZiBDb250ZXh0TWVudSBhbmQgQ29udGV4dE1lbnVDb250cm9sbGVyIHRvIG1hdGNoIHdoZXJl
IHRoZSBuZXcgZnVuY3Rpb25zIAorICAgICAgICBhcmUgbG9jYXRlZC4KKworICAgICAgICAqIEFw
aS9xd2VicGFnZS5jcHA6CisgICAgICAgIChRV2ViUGFnZVByaXZhdGU6OmNyZWF0ZUNvbnRleHRN
ZW51KToKKyAgICAgICAgKFFXZWJQYWdlOjp1cGRhdGVQb3NpdGlvbkRlcGVuZGVudEFjdGlvbnMp
OgorCiAyMDEwLTEyLTA3ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAg
ICBUcnkgdG8gZml4IGJ1aWxkLgpJbmRleDogV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAJKHJldmlzaW9uIDczNDY5KQor
KysgV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0Myw3ICs0
NDMsNyBAQCBRTWVudSAqUVdlYlBhZ2VQcml2YXRlOjpjcmVhdGVDb250ZXh0TWVuCiAgICAgICAg
ICAgICAgICAgUUFjdGlvbiAqYSA9IHEtPmFjdGlvbihhY3Rpb24pOwogICAgICAgICAgICAgICAg
IGlmIChhKSB7CiAgICAgICAgICAgICAgICAgICAgIENvbnRleHRNZW51SXRlbSBpdChpdGVtKTsK
LSAgICAgICAgICAgICAgICAgICAgd2ViY29yZU1lbnUtPmNoZWNrT3JFbmFibGVJZk5lZWRlZChp
dCk7CisgICAgICAgICAgICAgICAgICAgIHBhZ2UtPmNvbnRleHRNZW51Q29udHJvbGxlcigpLT5j
aGVja09yRW5hYmxlSWZOZWVkZWQoaXQpOwogICAgICAgICAgICAgICAgICAgICBQbGF0Zm9ybU1l
bnVJdGVtRGVzY3JpcHRpb24gZGVzYyA9IGl0LnJlbGVhc2VQbGF0Zm9ybURlc2NyaXB0aW9uKCk7
CiAgICAgICAgICAgICAgICAgICAgIGEtPnNldEVuYWJsZWQoZGVzYy5lbmFibGVkKTsKICAgICAg
ICAgICAgICAgICAgICAgYS0+c2V0Q2hlY2tlZChkZXNjLmNoZWNrZWQpOwpAQCAtMzIwOSwxMiAr
MzIwOSwxMyBAQCB2b2lkIFFXZWJQYWdlOjp1cGRhdGVQb3NpdGlvbkRlcGVuZGVudEFjCiAgICAg
ICAgIGQtPmhpdFRlc3RSZXN1bHQgPSBRV2ViSGl0VGVzdFJlc3VsdCgpOwogICAgIGVsc2UKICAg
ICAgICAgZC0+aGl0VGVzdFJlc3VsdCA9IFFXZWJIaXRUZXN0UmVzdWx0KG5ldyBRV2ViSGl0VGVz
dFJlc3VsdFByaXZhdGUocmVzdWx0KSk7Ci0gICAgV2ViQ29yZTo6Q29udGV4dE1lbnUgbWVudShy
ZXN1bHQpOwotICAgIG1lbnUucG9wdWxhdGUoKTsKKworICAgIGQtPnBhZ2UtPmNvbnRleHRNZW51
Q29udHJvbGxlcigpLT5zZXRIaXRUZXN0UmVzdWx0KHJlc3VsdCk7CisgICAgZC0+cGFnZS0+Y29u
dGV4dE1lbnVDb250cm9sbGVyKCktPnBvcHVsYXRlKCk7CiAgICAgCiAjaWYgRU5BQkxFKElOU1BF
Q1RPUikKICAgICBpZiAoZC0+cGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5lbmFibGVkKCkp
Ci0gICAgICAgIG1lbnUuYWRkSW5zcGVjdEVsZW1lbnRJdGVtKCk7CisgICAgICAgIGQtPnBhZ2Ut
PmNvbnRleHRNZW51Q29udHJvbGxlcigpLT5hZGRJbnNwZWN0RWxlbWVudEl0ZW0oKTsKICNlbmRp
ZgogCiAgICAgUUJpdEFycmF5IHZpc2l0ZWRXZWJBY3Rpb25zKFFXZWJQYWdlOjpXZWJBY3Rpb25D
b3VudCk7CkBAIC0zMjIzLDcgKzMyMjQsNyBAQCB2b2lkIFFXZWJQYWdlOjp1cGRhdGVQb3NpdGlv
bkRlcGVuZGVudEFjCiAgICAgZGVsZXRlIGQtPmN1cnJlbnRDb250ZXh0TWVudTsKIAogICAgIC8v
IFRoZW4gd2UgbGV0IGNyZWF0ZUNvbnRleHRNZW51KCkgZW5hYmxlIHRoZSBhY3Rpb25zIHRoYXQg
YXJlIHB1dCBpbnRvIHRoZSBtZW51Ci0gICAgZC0+Y3VycmVudENvbnRleHRNZW51ID0gZC0+Y3Jl
YXRlQ29udGV4dE1lbnUoJm1lbnUsIG1lbnUucGxhdGZvcm1EZXNjcmlwdGlvbigpLCAmdmlzaXRl
ZFdlYkFjdGlvbnMpOworICAgIGQtPmN1cnJlbnRDb250ZXh0TWVudSA9IGQtPmNyZWF0ZUNvbnRl
eHRNZW51KGQtPnBhZ2UtPmNvbnRleHRNZW51Q29udHJvbGxlcigpLT5jb250ZXh0TWVudSgpLCBk
LT5wYWdlLT5jb250ZXh0TWVudUNvbnRyb2xsZXIoKS0+Y29udGV4dE1lbnUoKS0+cGxhdGZvcm1E
ZXNjcmlwdGlvbigpLCAmdmlzaXRlZFdlYkFjdGlvbnMpOwogI2VuZGlmIC8vIFFUX05PX0NPTlRF
WFRNRU5VCiAKICNpZm5kZWYgUVRfTk9fQUNUSU9OCkluZGV4OiBXZWJLaXQvd2luL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL0NoYW5nZUxvZwkocmV2aXNpb24gNzM0NjkpCisr
KyBXZWJLaXQvd2luL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisy
MDEwLTEyLTA3ICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFwcGxlLmNvbT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBMYXllcmluZyBWaW9s
YXRpb24gaW4gQ29udGV4dE1lbnUgLSBtZW1iZXIgdmFyaWFibGUgb2YgdHlwZSBIaXRUZXN0UmVz
dWx0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MDU4
NgorICAgICAgICAKKyAgICAgICAgVXBkYXRlIHVzZXJzIG9mIENvbnRleHRNZW51IGFuZCBDb250
ZXh0TWVudUNvbnRyb2xsZXIgdG8gbWF0Y2ggd2hlcmUgdGhlIG5ldyBmdW5jdGlvbnMgCisgICAg
ICAgIGFyZSBsb2NhdGVkLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViQ29udGV4dE1l
bnVDbGllbnQuY3BwOgorICAgICAgICAoV2ViQ29udGV4dE1lbnVDbGllbnQ6OmdldEN1c3RvbU1l
bnVGcm9tRGVmYXVsdEl0ZW1zKTogR2V0IHRoZSBIaXRUZXN0UmVzdWx0IGFuZCBDb250ZXh0TWVu
dSBmcm9tIHRoZSAKKyAgICAgICAgICAgIENvbnRleHRNZW51Q29udHJvbGxlciAoZnJvbSB0aGUg
cGFnZSkuCisgICAgICAgIChXZWJDb250ZXh0TWVudUNsaWVudDo6Y29udGV4dE1lbnVJdGVtU2Vs
ZWN0ZWQpOiBHZXQgdGhlIEhpdFRlc3RSZXN1bHQgZnJvbSB0aGUgQ29udGV4dE1lbnVDb250cm9s
bGVyLgorICAgICAgICAqIFdlYlZpZXcuY3BwOgorICAgICAgICAoV2ViVmlldzo6aGFuZGxlQ29u
dGV4dE1lbnVFdmVudCk6IERpdHRvLgorCiAyMDEwLTEyLTA3ICBKZXNzaWUgQmVybGluICA8amJl
cmxpbkBhcHBsZS5jb20+CiAKICAgICAgICAgQnVpbGQgZml4LiBVbnJldmlld2VkLgpJbmRleDog
V2ViS2l0L3dpbi9XZWJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL1dlYlZpZXcu
Y3BwCShyZXZpc2lvbiA3MzQ2OSkKKysrIFdlYktpdC93aW4vV2ViVmlldy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEyNDUsMTIgKzEyNDUsMTQgQEAgYm9vbCBXZWJWaWV3OjpoYW5kbGVDb250ZXh0
TWVudUV2ZW50KFdQQQogICAgIGlmICghaGFuZGxlZEV2ZW50KQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKKyAgICBDb250ZXh0TWVudUNvbnRyb2xsZXIqIGNvbnRleHRNZW51Q29udHJvbGxlciA9
IG1fcGFnZS0+Y29udGV4dE1lbnVDb250cm9sbGVyKCk7CisKICAgICAvLyBTaG93IHRoZSBtZW51
Ci0gICAgQ29udGV4dE1lbnUqIGNvcmVNZW51ID0gbV9wYWdlLT5jb250ZXh0TWVudUNvbnRyb2xs
ZXIoKS0+Y29udGV4dE1lbnUoKTsKKyAgICBDb250ZXh0TWVudSogY29yZU1lbnUgPSBjb250ZXh0
TWVudUNvbnRyb2xsZXItPmNvbnRleHRNZW51KCk7CiAgICAgaWYgKCFjb3JlTWVudSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgTm9kZSogbm9kZSA9IGNvcmVNZW51LT5oaXRUZXN0UmVz
dWx0KCkuaW5uZXJOb25TaGFyZWROb2RlKCk7CisgICAgTm9kZSogbm9kZSA9IGNvbnRleHRNZW51
Q29udHJvbGxlci0+aGl0VGVzdFJlc3VsdCgpLmlubmVyTm9uU2hhcmVkTm9kZSgpOwogICAgIGlm
ICghbm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0xMjYyLDcgKzEyNjQsNyBAQCBi
b29sIFdlYlZpZXc6OmhhbmRsZUNvbnRleHRNZW51RXZlbnQoV1BBCiAgICAgaWYgKCF2aWV3KQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBQT0lOVCBwb2ludCh2aWV3LT5jb250ZW50c1Rv
V2luZG93KGNvcmVNZW51LT5oaXRUZXN0UmVzdWx0KCkucG9pbnQoKSkpOworICAgIFBPSU5UIHBv
aW50KHZpZXctPmNvbnRlbnRzVG9XaW5kb3coY29udGV4dE1lbnVDb250cm9sbGVyLT5oaXRUZXN0
UmVzdWx0KCkucG9pbnQoKSkpOwogCiAgICAgLy8gVHJhbnNsYXRlIHRoZSBwb2ludCB0byBzY3Jl
ZW4gY29vcmRpbmF0ZXMKICAgICBpZiAoITo6Q2xpZW50VG9TY3JlZW4obV92aWV3V2luZG93LCAm
cG9pbnQpKQpJbmRleDogV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJDb250ZXh0TWVudUNs
aWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJDb250
ZXh0TWVudUNsaWVudC5jcHAJKHJldmlzaW9uIDczNDY5KQorKysgV2ViS2l0L3dpbi9XZWJDb3Jl
U3VwcG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYg
KzMyLDcgQEAKICNpbmNsdWRlICJXZWJWaWV3LmgiCiAKICNpbmNsdWRlIDxXZWJDb3JlL0NvbnRl
eHRNZW51Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL0V2ZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvRnJhbWVMb2FkZXIuaD4KQEAgLTY0LDcgKzY1LDcgQEAgSE1FTlUgV2Vi
Q29udGV4dE1lbnVDbGllbnQ6OmdldEN1c3RvbU1lbgogCiAgICAgSE1FTlUgbmV3TWVudSA9IDA7
CiAgICAgQ09NUHRyPFdlYkVsZW1lbnRQcm9wZXJ0eUJhZz4gcHJvcGVydHlCYWc7Ci0gICAgcHJv
cGVydHlCYWcuYWRvcHRSZWYoV2ViRWxlbWVudFByb3BlcnR5QmFnOjpjcmVhdGVJbnN0YW5jZSht
ZW51LT5oaXRUZXN0UmVzdWx0KCkpKTsKKyAgICBwcm9wZXJ0eUJhZy5hZG9wdFJlZihXZWJFbGVt
ZW50UHJvcGVydHlCYWc6OmNyZWF0ZUluc3RhbmNlKG1fd2ViVmlldy0+cGFnZSgpLT5jb250ZXh0
TWVudUNvbnRyb2xsZXIoKS0+aGl0VGVzdFJlc3VsdCgpKSk7CiAgICAgLy8gRklYTUU6IFdlIG5l
ZWQgdG8gZGVjaWRlIHdoZXRoZXIgdG8gZG8gdGhlIGRlZmF1bHQgYmVmb3JlIGNhbGxpbmcgdGhp
cyBkZWxlZ2F0ZSBtZXRob2QKICAgICBpZiAoRkFJTEVEKHVpRGVsZWdhdGUtPmNvbnRleHRNZW51
SXRlbXNGb3JFbGVtZW50KG1fd2ViVmlldywgcHJvcGVydHlCYWcuZ2V0KCksIChPTEVfSEFORExF
KShVTE9ORzY0KW1lbnUtPnBsYXRmb3JtRGVzY3JpcHRpb24oKSwgKE9MRV9IQU5ETEUqKSZuZXdN
ZW51KSkpCiAgICAgICAgIHJldHVybiBtZW51LT5wbGF0Zm9ybURlc2NyaXB0aW9uKCk7CkBAIC04
Miw3ICs4Myw3IEBAIHZvaWQgV2ViQ29udGV4dE1lbnVDbGllbnQ6OmNvbnRleHRNZW51SXQKICAg
ICBBU1NFUlQodWlEZWxlZ2F0ZSk7CiAKICAgICBDT01QdHI8V2ViRWxlbWVudFByb3BlcnR5QmFn
PiBwcm9wZXJ0eUJhZzsKLSAgICBwcm9wZXJ0eUJhZy5hZG9wdFJlZihXZWJFbGVtZW50UHJvcGVy
dHlCYWc6OmNyZWF0ZUluc3RhbmNlKHBhcmVudE1lbnUtPmhpdFRlc3RSZXN1bHQoKSkpOworICAg
IHByb3BlcnR5QmFnLmFkb3B0UmVmKFdlYkVsZW1lbnRQcm9wZXJ0eUJhZzo6Y3JlYXRlSW5zdGFu
Y2UobV93ZWJWaWV3LT5wYWdlKCktPmNvbnRleHRNZW51Q29udHJvbGxlcigpLT5oaXRUZXN0UmVz
dWx0KCkpKTsKICAgICAgICAgICAgIAogICAgIHVpRGVsZWdhdGUtPmNvbnRleHRNZW51SXRlbVNl
bGVjdGVkKG1fd2ViVmlldywgaXRlbS0+cmVsZWFzZVBsYXRmb3JtRGVzY3JpcHRpb24oKSwgcHJv
cGVydHlCYWcuZ2V0KCkpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75920</attachid>
            <date>2010-12-08 10:14:23 -0800</date>
            <delta_ts>2010-12-08 10:36:32 -0800</delta_ts>
            <desc>[PATCH] Fix - all platforms</desc>
            <filename>context_menu_layering_violation_fix.patch</filename>
            <type>text/plain</type>
            <size>130346</size>
            <attacher name="Brian Weinstein">bweinstein</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MzQ2OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODMgQEAKKzIwMTAtMTItMDcgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5A
YXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIExheWVyaW5nIFZpb2xhdGlvbiBpbiBDb250ZXh0TWVudSAtIG1lbWJlciB2YXJpYWJsZSBv
ZiB0eXBlIEhpdFRlc3RSZXN1bHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTUwNTg2CisgICAgICAgIAorICAgICAgICBDb250ZXh0TWVudSBoYWQgYSBs
YXllcmluZyB2aW9sYXRpb24gYnkgaGF2aW5nIGEgbWVtYmVyIHZhcmlhYmxlIG9mIHR5cGUgSGl0
VGVzdFJlc3VsdCwgYmVjYXVzZQorICAgICAgICBjbGFzc2VzIGluIFdlYkNvcmUvcGxhdGZvcm0g
Y2FuJ3Qga25vdyBhYm91dCBjbGFzc2VzIGluIFdlYkNvcmUuCisgICAgICAgIAorICAgICAgICBU
aGlzIHBhdGNoIG1vdmVzIHRoZSBIaXRUZXN0UmVzdWx0IGFuZCBhbGwgZnVuY3Rpb25zIHRoYXQg
dXNlIGl0IG91dCBvZiBDb250ZXh0TWVudSBpbnRvIENvbnRleHRNZW51Q29udHJvbGxlci4KKyAg
ICAgICAgQWxsIG9mIHRoZSBmdW5jdGlvbnMgdGhhdCBkZWFsdCB3aXRoIHBvcHVsYXRpbmcgdGhl
IENvbnRleHRNZW51IGFyZSBub3cgaW4gQ29udGV4dE1lbnVDb250cm9sbGVyLCBhbmQgdGhpcwor
ICAgICAgICBhbGxvd2VkIHVzIHRvIGRlbGV0ZSB0aGUgQ29udGV4dE1lbnUgZmlsZSwgcHV0dGlu
ZyBhbGwgb2YgdGhlIGNyb3NzLXBsYXRmb3JtIGNvZGUgdGhhdCB1c2VkIHRvIGJlIGl0CisgICAg
ICAgIGluIENvbnRleHRNZW51Q29udHJvbGxlciwgYW5kIHRoZSByZXN0IG9mIHRoZSBjb2RlIGlz
IGluIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBmaWxlcy4KKworICAgICAgICBObyBjaGFuZ2UgaW4g
YmVoYXZpb3IsIG5vIG5ldyB0ZXN0cy4KKworICAgICAgICAqIEFuZHJvaWQubWs6IFJlbW92ZWQg
Q29udGV4dE1lbnUuY3BwLgorICAgICAgICAqIENNYWtlTGlzdHMudHh0OiBEaXR0by4KKyAgICAg
ICAgKiBHTlVtYWtlZmlsZS5hbTogRGl0dG8uCisgICAgICAgICogV2ViQ29yZS5neXBpOiBEaXR0
by4KKyAgICAgICAgKiBXZWJDb3JlLnBybzogRGl0dG8uCisgICAgICAgICogV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2o6IERpdHRvLgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajogRGl0dG8uCisKKyAgICAgICAgKiBwYWdlL0NvbnRleHRNZW51Q29udHJv
bGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0TWVudUNvbnRyb2xsZXI6OkNvbnRl
eHRNZW51Q29udHJvbGxlcik6IEluaXRpYWxpemVkIG1faGl0VGVzdFJlc3VsdCB0byBhbiBlbXB0
eSBIaXRUZXN0UmVzdWx0LgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVDb250cm9sbGVy
OjpoYW5kbGVDb250ZXh0TWVudUV2ZW50KTogQ2FsbCBwb3B1bGF0ZSBvbiB0aGUgQ29udGV4dE1l
bnVDb250cm9sbGVyIGluc3RlYWQKKyAgICAgICAgICAgIG9mIHRoZSBDb250ZXh0TWVudS4KKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51Q29udHJvbGxlcjo6Y3JlYXRlQ29udGV4dE1lbnUp
OiBGaXggc29tZSBpbmRpbmF0aW9uLCBhbmQgc3RvcmUgdGhlIEhpdFRlc3RSZXN1bHQgaW4gYSBt
ZW1iZXIKKyAgICAgICAgICAgIHZhcmlhYmxlLgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1l
bnVDb250cm9sbGVyOjpzaG93Q29udGV4dE1lbnUpOiBDYWxsIGFkZEluc3BlY3RFbGVtZW50SXRl
bSBvbiB0aGUgQ29udGV4dE1lbnVDb250cm9sbGVyLgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4
dE1lbnVDb250cm9sbGVyOjpjb250ZXh0TWVudUl0ZW1TZWxlY3RlZCk6IFVzZSBtX2hpdFRlc3RS
ZXN1bHQgd2hlbmV2ZXIgd2UgbmVlZCBhIEhpdFRlc3RSZXN1bHQuCisgICAgICAgIChXZWJDb3Jl
OjpDb250ZXh0TWVudUNvbnRyb2xsZXI6OmFwcGVuZEl0ZW0pOiBWYWxpZGF0ZXMgdGhlIGl0ZW0g
Zm9yIGl0cyBzdGF0ZSwgYW5kIHRoZW4gYXBwZW5kcyBpdCB0byB0aGUgcGFyZW50IG1lbnUuCisg
ICAgICAgICAgICBUaGlzIGFsbG93ZWQgdXMgdG8gbW92ZSBjaGVja09yRW5hYmxlSWZOZWVkZWQg
ZnJvbSBDb250ZXh0TWVudS4KKworICAgICAgICBUaGVzZSBmdW5jdGlvbnMgd2VyZSBhbGwgbW92
ZWQgZnJvbSBDb250ZXh0TWVudSwgYW5kIGNoYW5nZWQgc2xpZ2h0bHkgdG8gZml0IGluIENvbnRl
eHRNZW51Q29udHJvbGxlci4KKyAgICAgICAgQWxsIGNhbGxzIHRvIENvbnRleHRNZW51OjphcHBl
bmRJdGVtIHdlcmUgY2hhbmdlZCB0byBDb250ZXh0TWVudUNvbnRyb2xsZXI6OmFwcGVuZEl0ZW0s
IHdoaWNoIHRha2VzIGNhcmUKKyAgICAgICAgb2YgdmFsaWRhdGluZyB0aGUgbWVudS4KKyAgICAg
ICAgKFdlYkNvcmU6OnNlcGFyYXRvckl0ZW0pOiBNb3ZlZCBmcm9tIENvbnRleHRNZW51LgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVDb250cm9sbGVyOjpjcmVhdGVBbmRBcHBlbmRGb250
U3ViTWVudSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVDb250cm9sbGVy
OjpjcmVhdGVBbmRBcHBlbmRTcGVsbGluZ0FuZEdyYW1tYXJTdWJNZW51KTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNyZWF0ZUFuZEFwcGVuZFNwZWVj
aFN1Yk1lbnUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51Q29udHJvbGxl
cjo6Y3JlYXRlQW5kQXBwZW5kV3JpdGluZ0RpcmVjdGlvblN1Yk1lbnUpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRleHRNZW51Q29udHJvbGxlcjo6Y3JlYXRlQW5kQXBwZW5kVGV4dERp
cmVjdGlvblN1Yk1lbnUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51Q29u
dHJvbGxlcjo6Y3JlYXRlQW5kQXBwZW5kU3Vic3RpdHV0aW9uc1N1Yk1lbnUpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51Q29udHJvbGxlcjo6Y3JlYXRlQW5kQXBwZW5kVHJh
bnNmb3JtYXRpb25zU3ViTWVudSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6c2VsZWN0aW9u
Q29udGFpbnNQb3NzaWJsZVdvcmQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRN
ZW51Q29udHJvbGxlcjo6cG9wdWxhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
eHRNZW51Q29udHJvbGxlcjo6YWRkSW5zcGVjdEVsZW1lbnRJdGVtKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNoZWNrT3JFbmFibGVJZk5lZWRlZCk6
IERpdHRvLgorICAgICAgICAKKyAgICAgICAgKiBwYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5o
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVDb250cm9sbGVyOjpoaXRUZXN0UmVzdWx0
KTogUmV0dXJucyB0aGUgSGl0VGVzdFJlc3VsdCBvZiB0aGUgY3VycmVudCBDb250ZXh0TWVudS4K
KworICAgICAgICAqIHBsYXRmb3JtL0NvbnRleHRNZW51LmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9Db250ZXh0TWVudS5oOgorICAgICAgICAqIHBsYXRmb3JtL2VmbC9Db250ZXh0
TWVudUVmbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0TWVudTo6Q29udGV4dE1lbnUp
OiBSZW1vdmVkIG1faGl0VGVzdFJlc3VsdCBmcm9tIHRoZSBjb25zdHJ1Y3Rvci4KKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRleHRNZW51OjphcHBlbmRJdGVtKTogUmVtb3ZlZCB0aGUgY2FsbCB0byBj
aGVja09yRW5hYmxlSWZOZWVkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3RrL0NvbnRleHRNZW51
R3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51OjpDb250ZXh0TWVudSk6IFJl
bW92ZWQgbV9oaXRUZXN0UmVzdWx0IGZyb20gdGhlIGNvbnN0cnVjdG9yLgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGV4dE1lbnU6OmFwcGVuZEl0ZW0pOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9y
bS9oYWlrdS9Db250ZXh0TWVudUhhaWt1LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRN
ZW51OjpDb250ZXh0TWVudSk6IFJlbW92ZWQgbV9oaXRUZXN0UmVzdWx0IGZyb20gdGhlIGNvbnN0
cnVjdG9yLgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnU6OmFwcGVuZEl0ZW0pOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51OjppbnNlcnRJdGVtKTogRGl0dG8uCisg
ICAgICAgICogcGxhdGZvcm0vbWFjL0NvbnRleHRNZW51TWFjLm1tOgorICAgICAgICAoLVtXZWJD
b3JlTWVudVRhcmdldCB2YWxpZGF0ZU1lbnVJdGVtOl0pOiBDYWxscyBjaGVja09yRW5hYmxlSWZO
ZWVkZWQgb24gdGhlIGNvbnRyb2xsZXIgaW5zdGVhZCBvZgorICAgICAgICAgICAgdGhlIGNvbnRl
eHQgbWVudS4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51OjpDb250ZXh0TWVudSk6IFJl
bW92ZWQgbV9oaXRUZXN0UmVzdWx0IGZyb20gdGhlIGNvbnN0cnVjdG9yLgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGV4dE1lbnU6OmFwcGVuZEl0ZW0pOiBSZW1vdmVkIHRoZSBjYWxsIHRvIGNoZWNr
T3JFbmFibGVJZk5lZWRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51OjppbnNlcnRJ
dGVtKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vd2luL0NvbnRleHRNZW51V2luLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRNZW51OjpDb250ZXh0TWVudSk6IFJlbW92ZWQgbV9o
aXRUZXN0UmVzdWx0IGZyb20gdGhlIGNvbnN0cnVjdG9yLgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGV4dE1lbnU6Omluc2VydEl0ZW0pOiBSZW1vdmVkIHRoZSBjYWxsIHRvIGNoZWNrT3JFbmFibGVJ
Zk5lZWRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS93eC9Db250ZXh0TWVudVd4LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRleHRNZW51OjpDb250ZXh0TWVudSk6IFJlbW92ZWQgbV9oaXRUZXN0
UmVzdWx0IGZyb20gdGhlIGNvbnN0cnVjdG9yLgorICAgICAgICAoQ29udGV4dE1lbnU6OmFwcGVu
ZEl0ZW0pOiBEaXR0by4KKwogMjAxMC0xMi0wNyAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVp
bkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSm9obiBTdWxsaXZhbi4KSW5kZXg6
IFdlYkNvcmUvQW5kcm9pZC5tawo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0FuZHJvaWQubWsJKHJl
dmlzaW9uIDczNDY5KQorKysgV2ViQ29yZS9BbmRyb2lkLm1rCSh3b3JraW5nIGNvcHkpCkBAIC00
NTAsNyArNDUwLDYgQEAgTE9DQUxfU1JDX0ZJTEVTIDo9ICQoTE9DQUxfU1JDX0ZJTEVTKSBcCiAJ
XAogCXBsYXRmb3JtL0FyZW5hLmNwcCBcCiAJcGxhdGZvcm0vQ29udGVudFR5cGUuY3BwIFwKLQlw
bGF0Zm9ybS9Db250ZXh0TWVudS5jcHAgXAogCXBsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmNw
cCBcCiAJcGxhdGZvcm0vRGVwcmVjYXRlZFB0ckxpc3RJbXBsLmNwcCBcCiAJcGxhdGZvcm0vRHJh
Z0RhdGEuY3BwIFwKSW5kZXg6IFdlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gNzM0NjkpCisrKyBXZWJDb3JlL0NNYWtl
TGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMjcwLDcgKzEyNzAsNiBAQCBTRVQoV2ViQ29y
ZV9TT1VSQ0VTCiAKICAgICBwbGF0Zm9ybS9BcmVuYS5jcHAKICAgICBwbGF0Zm9ybS9Db250ZW50
VHlwZS5jcHAKLSAgICBwbGF0Zm9ybS9Db250ZXh0TWVudS5jcHAKICAgICBwbGF0Zm9ybS9Dcm9z
c1RocmVhZENvcGllci5jcHAKICAgICBwbGF0Zm9ybS9EZXByZWNhdGVkUHRyTGlzdEltcGwuY3Bw
CiAgICAgcGxhdGZvcm0vRHJhZ0RhdGEuY3BwCkluZGV4OiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFt
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDczNDY5KQor
KysgV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMjI1OCw3ICsyMjU4
LDYgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3BsYXRmb3JtL0F1dG9kcmFpbmVk
UG9vbC5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL0NvbnRlbnRUeXBlLmNwcCBcCiAJV2ViQ29yZS9w
bGF0Zm9ybS9Db250ZW50VHlwZS5oIFwKLQlXZWJDb3JlL3BsYXRmb3JtL0NvbnRleHRNZW51LmNw
cCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9Db250ZXh0TWVudS5oIFwKIAlXZWJDb3JlL3BsYXRmb3Jt
L0NvbnRleHRNZW51SXRlbS5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL0Nvb2tpZS5oIFwKSW5kZXg6
IFdlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmV4
cC5pbgkocmV2aXNpb24gNzM0NjkpCisrKyBXZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjUyLDEyICsxMjUyLDEyIEBAIF9fWk43V2ViQ29yZTE1Q29udGV4dE1lbnVJ
dGVtQzFFTlNfMTlDb24KIF9fWk43V2ViQ29yZTE1Q29udGV4dE1lbnVJdGVtQzFFUDEwTlNNZW51
SXRlbQogX19aTjdXZWJDb3JlMTVDb250ZXh0TWVudUl0ZW1EMUV2CiBfX1pON1dlYkNvcmUyMUNv
bnRleHRNZW51Q29udHJvbGxlcjE2Y2xlYXJDb250ZXh0TWVudUV2CitfX1pOSzdXZWJDb3JlMjFD
b250ZXh0TWVudUNvbnRyb2xsZXIyMWNoZWNrT3JFbmFibGVJZk5lZWRlZEVSTlNfMTVDb250ZXh0
TWVudUl0ZW1FCiBfX1pON1dlYkNvcmUyMUNvbnRleHRNZW51Q29udHJvbGxlcjIzY29udGV4dE1l
bnVJdGVtU2VsZWN0ZWRFUE5TXzE1Q29udGV4dE1lbnVJdGVtRQogX19aTjdXZWJDb3JlMjFjb250
ZXh0TWVudUl0ZW1WZWN0b3JFUDE0TlNNdXRhYmxlQXJyYXkKIF9fWk43V2ViQ29yZTIzcGxhdGZv
cm1NZW51RGVzY3JpcHRpb25FUk4zV1RGNlZlY3RvcklOU18xNUNvbnRleHRNZW51SXRlbUVMbTBF
RUUKIF9fWk43V2ViQ29yZTZDaHJvbWUxNXNob3dDb250ZXh0TWVudUV2CiBfX1pOSzdXZWJDb3Jl
MTFDb250ZXh0TWVudTE5cGxhdGZvcm1EZXNjcmlwdGlvbkV2Ci1fX1pOSzdXZWJDb3JlMTFDb250
ZXh0TWVudTIxY2hlY2tPckVuYWJsZUlmTmVlZGVkRVJOU18xNUNvbnRleHRNZW51SXRlbUUKIF9f
Wk5LN1dlYkNvcmUxNUNvbnRleHRNZW51SXRlbTE1cGxhdGZvcm1TdWJNZW51RXYKIF9fWk5LN1dl
YkNvcmUxNUNvbnRleHRNZW51SXRlbTR0eXBlRXYKIF9fWk5LN1dlYkNvcmUxNUNvbnRleHRNZW51
SXRlbTV0aXRsZUV2CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gNzM0NjkpCisrKyBXZWJDb3JlL1dlYkNvcmUu
Z3lwaQkod29ya2luZyBjb3B5KQpAQCAtMzQyMSw3ICszNDIxLDYgQEAKICAgICAgICAgICAgICdw
bGF0Zm9ybS9BdXRvZHJhaW5lZFBvb2wuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vQ29udGVu
dFR5cGUuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9Db250ZW50VHlwZS5oJywKLSAgICAg
ICAgICAgICdwbGF0Zm9ybS9Db250ZXh0TWVudS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L0NvbnRleHRNZW51LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL0NvbnRleHRNZW51SXRlbS5o
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9Db29raWUuaCcsCkluZGV4OiBXZWJDb3JlL1dlYkNv
cmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDczNDY5
KQorKysgV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtMTE1MSw3ICsxMTUx
LDYgQEAgU09VUkNFUyArPSBcCiAgICAgcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5jcHAgXAog
ICAgIHBsYXRmb3JtL3RleHQvSHlwaGVuYXRpb24uY3BwIFwKICAgICBwbGF0Zm9ybS9Db250ZW50
VHlwZS5jcHAgXAotICAgIHBsYXRmb3JtL0NvbnRleHRNZW51LmNwcCBcCiAgICAgcGxhdGZvcm0v
Q3Jvc3NUaHJlYWRDb3BpZXIuY3BwIFwKICAgICBwbGF0Zm9ybS9EZXByZWNhdGVkUHRyTGlzdElt
cGwuY3BwIFwKICAgICBwbGF0Zm9ybS9EcmFnRGF0YS5jcHAgXApJbmRleDogV2ViQ29yZS9XZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA3MzQ2OSkKKysrIFdlYkNvcmUvV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTI1MzE0LDEwICsyNTMx
NCw2IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XHBsYXRmb3JtXENvbnRleHRNZW51LmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQog
CQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cQ29udGV4dE1lbnUuaCIKIAkJCQk+CiAJCQk8
L0ZpbGU+CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
cmV2aXNpb24gNzM0NjkpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjgzOSw3ICsyODM5LDYgQEAKIAkJOTNCMkQ4MTYwRjk5
MjBEMjAwNkFFNkIyIC8qIFN1ZGRlblRlcm1pbmF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0IyRDgxNTBGOTkyMEQyMDA2QUU2QjIgLyogU3Vk
ZGVuVGVybWluYXRpb24uaCAqLzsgfTsKIAkJOTNCMkQ4MTgwRjk5MjBFRTAwNkFFNkIyIC8qIFN1
ZGRlblRlcm1pbmF0aW9uLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTNCMkQ4MTcwRjk5MjBFRTAwNkFFNkIyIC8qIFN1ZGRlblRlcm1pbmF0aW9uLm1t
ICovOyB9OwogCQk5M0I2QTBFNjBCMEJDQTVDMDBGNTAyN0EgLyogQ29udGV4dE1lbnUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQjZBMEU1MEIwQkNB
NUMwMEY1MDI3QSAvKiBDb250ZXh0TWVudS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07Ci0JCTkzQjZBMEU4MEIwQkNBNjcwMEY1MDI3QSAvKiBDb250ZXh0
TWVudS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
M0I2QTBFNzBCMEJDQTY3MDBGNTAyN0EgLyogQ29udGV4dE1lbnUuY3BwICovOyB9OwogCQk5M0I2
QTBFQTBCMEJDQTg0MDBGNTAyN0EgLyogQ29udGV4dE1lbnVNYWMubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0I2QTBFOTBCMEJDQTg0MDBGNTAyN0Eg
LyogQ29udGV4dE1lbnVNYWMubW0gKi87IH07CiAJCTkzQjcwRDYzMDlFQjBDN0MwMDlEODQ2OCAv
KiBKU0RPTUJpbmRpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTNCNzBENDcwOUVCMEM3QzAwOUQ4NDY4IC8qIEpTRE9NQmluZGluZy5jcHAgKi87
IH07CiAJCTkzQjcwRDY0MDlFQjBDN0MwMDlEODQ2OCAvKiBKU0RPTUJpbmRpbmcuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQjcwRDQ4MDlFQjBDN0Mw
MDlEODQ2OCAvKiBKU0RPTUJpbmRpbmcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwpAQCAtOTAwNyw3ICs5MDA2LDYgQEAKIAkJOTNCMkQ4MTUwRjk5MjBE
MjAwNkFFNkIyIC8qIFN1ZGRlblRlcm1pbmF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFN1ZGRlblRlcm1pbmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTkzQjJEODE3MEY5OTIwRUUwMDZBRTZCMiAvKiBTdWRkZW5UZXJtaW5hdGlvbi5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFN1ZGRlblRlcm1pbmF0aW9uLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0I2QTBFNTBCMEJDQTVDMDBGNTAyN0Eg
LyogQ29udGV4dE1lbnUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnRl
eHRNZW51Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTkzQjZBMEU3MEIwQkNBNjcw
MEY1MDI3QSAvKiBDb250ZXh0TWVudS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gQ29udGV4dE1lbnUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5
M0I2QTBFOTBCMEJDQTg0MDBGNTAyN0EgLyogQ29udGV4dE1lbnVNYWMubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQ29udGV4dE1lbnVNYWMubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzQjcwRDQ3MDlFQjBDN0MwMDlEODQ2OCAvKiBKU0RPTUJp
bmRpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRE9NQmlu
ZGluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzQjcwRDQ4MDlFQjBDN0Mw
MDlEODQ2OCAvKiBKU0RPTUJpbmRpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTRE9NQmluZGluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTc1NzQs
NyArMTc1NzIsNiBAQAogCQkJCUJDQzhDRkNBMDk4NkNEMjQwMDE0MEJGMiAvKiBDb2xvckRhdGEu
Z3BlcmYgKi8sCiAJCQkJNDFEMDE1QzkwRjRCNUM3MTAwNEE2NjJGIC8qIENvbnRlbnRUeXBlLmNw
cCAqLywKIAkJCQk0MUQwMTVDODBGNEI1QzcxMDA0QTY2MkYgLyogQ29udGVudFR5cGUuaCAqLywK
LQkJCQk5M0I2QTBFNzBCMEJDQTY3MDBGNTAyN0EgLyogQ29udGV4dE1lbnUuY3BwICovLAogCQkJ
CTkzQjZBMEU1MEIwQkNBNUMwMEY1MDI3QSAvKiBDb250ZXh0TWVudS5oICovLAogCQkJCTA2MDI3
Q0FDMEIxQ0JGQzAwMDg4NEIyRCAvKiBDb250ZXh0TWVudUl0ZW0uaCAqLywKIAkJCQlEOEI2MTUy
RTEwMzI0OTUxMDBDODU1NEEgLyogQ29va2llLmggKi8sCkBAIC0yMTk1Niw3ICsyMTk1Myw2IEBA
CiAJCQkJQTgxODcyMUYwOTc3RDNDMDAwNTgyNkQ5IC8qIENvbnRhaW5lck5vZGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQkM1RUI5ODAwRTgyMDcyNTAwQjI1OTY1IC8qIENvbnRlbnREYXRhLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTQxRDAxNUNCMEY0QjVDNzEwMDRBNjYyRiAvKiBDb250ZW50
VHlwZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk5M0I2QTBFODBCMEJDQTY3MDBGNTAyN0EgLyog
Q29udGV4dE1lbnUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDY1QUQ0RjYwQjBDMkVEQTAwNUEy
QjFEIC8qIENvbnRleHRNZW51Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwNjAy
N0NCMzBCMUNDMDNEMDA4ODRCMkQgLyogQ29udGV4dE1lbnVJdGVtTWFjLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJOTNCNkEwRUEwQjBCQ0E4NDAwRjUwMjdBIC8qIENvbnRleHRNZW51TWFjLm1tIGlu
IFNvdXJjZXMgKi8sCkluZGV4OiBXZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcAko
cmV2aXNpb24gNzM0NjkpCisrKyBXZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkNocm9tZS5oIgog
I2luY2x1ZGUgIkNvbnRleHRNZW51LmgiCiAjaW5jbHVkZSAiQ29udGV4dE1lbnVDbGllbnQuaCIK
KyNpbmNsdWRlICJDb250ZXh0TWVudUl0ZW0uaCIKICNpbmNsdWRlICJDb250ZXh0TWVudVByb3Zp
ZGVyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50
LmgiCkBAIC01MCw2ICs1MSw3IEBACiAjaW5jbHVkZSAiSGl0VGVzdFJlcXVlc3QuaCIKICNpbmNs
dWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgor
I2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKICNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCiAj
aW5jbHVkZSAiTmF2aWdhdGlvbkFjdGlvbi5oIgogI2luY2x1ZGUgIk5vZGUuaCIKQEAgLTYzLDYg
KzY1LDEwIEBACiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiV2luZG93RmVh
dHVyZXMuaCIKICNpbmNsdWRlICJtYXJrdXAuaCIKKyNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmlj
b2RlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXVEY7Cit1c2luZyBuYW1lc3BhY2UgVW5pY29kZTsK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC05MCwxMCArOTYsMTIgQEAgdm9pZCBDb250ZXh0
TWVudUNvbnRyb2xsZXI6OmNsZWFyQ29udGV4dAogCiB2b2lkIENvbnRleHRNZW51Q29udHJvbGxl
cjo6aGFuZGxlQ29udGV4dE1lbnVFdmVudChFdmVudCogZXZlbnQpCiB7Ci0gICAgbV9jb250ZXh0
TWVudS5zZXQoY3JlYXRlQ29udGV4dE1lbnUoZXZlbnQpKTsKKyAgICBtX2NvbnRleHRNZW51ID0g
Y3JlYXRlQ29udGV4dE1lbnUoZXZlbnQpOwogICAgIGlmICghbV9jb250ZXh0TWVudSkKICAgICAg
ICAgcmV0dXJuOwotICAgIG1fY29udGV4dE1lbnUtPnBvcHVsYXRlKCk7CisKKyAgICBwb3B1bGF0
ZSgpOworCiAgICAgc2hvd0NvbnRleHRNZW51KGV2ZW50KTsKIH0KIApAQCAtMTAxLDcgKzEwOSw3
IEBAIHZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjpzaG93Q29udGV4dE0KIHsKICAgICBtX21l
bnVQcm92aWRlciA9IG1lbnVQcm92aWRlcjsKIAotICAgIG1fY29udGV4dE1lbnUuc2V0KGNyZWF0
ZUNvbnRleHRNZW51KGV2ZW50KSk7CisgICAgbV9jb250ZXh0TWVudSA9IGNyZWF0ZUNvbnRleHRN
ZW51KGV2ZW50KTsKICAgICBpZiAoIW1fY29udGV4dE1lbnUpIHsKICAgICAgICAgY2xlYXJDb250
ZXh0TWVudSgpOwogICAgICAgICByZXR1cm47CkBAIC0xMTEsMTAgKzExOSwxMSBAQCB2b2lkIENv
bnRleHRNZW51Q29udHJvbGxlcjo6c2hvd0NvbnRleHRNCiAgICAgc2hvd0NvbnRleHRNZW51KGV2
ZW50KTsKIH0KIAotQ29udGV4dE1lbnUqIENvbnRleHRNZW51Q29udHJvbGxlcjo6Y3JlYXRlQ29u
dGV4dE1lbnUoRXZlbnQqIGV2ZW50KQorUGFzc093blB0cjxDb250ZXh0TWVudT4gQ29udGV4dE1l
bnVDb250cm9sbGVyOjpjcmVhdGVDb250ZXh0TWVudShFdmVudCogZXZlbnQpCiB7Ci0gICBpZiAo
IWV2ZW50LT5pc01vdXNlRXZlbnQoKSkKKyAgICBpZiAoIWV2ZW50LT5pc01vdXNlRXZlbnQoKSkK
ICAgICAgICAgcmV0dXJuIDA7CisKICAgICBNb3VzZUV2ZW50KiBtb3VzZUV2ZW50ID0gc3RhdGlj
X2Nhc3Q8TW91c2VFdmVudCo+KGV2ZW50KTsKICAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdChtb3Vz
ZUV2ZW50LT5hYnNvbHV0ZUxvY2F0aW9uKCkpOwogCkBAIC0xMjMsMTQgKzEzMiwxNyBAQCBDb250
ZXh0TWVudSogQ29udGV4dE1lbnVDb250cm9sbGVyOjpjcmVhCiAKICAgICBpZiAoIXJlc3VsdC5p
bm5lck5vblNoYXJlZE5vZGUoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIG5ldyBD
b250ZXh0TWVudShyZXN1bHQpOworCisgICAgbV9oaXRUZXN0UmVzdWx0ID0gcmVzdWx0OworCisg
ICAgcmV0dXJuIG5ldyBDb250ZXh0TWVudTsKIH0KIAogdm9pZCBDb250ZXh0TWVudUNvbnRyb2xs
ZXI6OnNob3dDb250ZXh0TWVudShFdmVudCogZXZlbnQpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RP
UikKICAgICBpZiAobV9wYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmVuYWJsZWQoKSkKLSAg
ICAgICAgbV9jb250ZXh0TWVudS0+YWRkSW5zcGVjdEVsZW1lbnRJdGVtKCk7CisgICAgICAgIGFk
ZEluc3BlY3RFbGVtZW50SXRlbSgpOwogI2VuZGlmCiAgICAgUGxhdGZvcm1NZW51RGVzY3JpcHRp
b24gY3VzdG9tTWVudSA9IG1fY2xpZW50LT5nZXRDdXN0b21NZW51RnJvbURlZmF1bHRJdGVtcyht
X2NvbnRleHRNZW51LmdldCgpKTsKICAgICBtX2NvbnRleHRNZW51LT5zZXRQbGF0Zm9ybURlc2Ny
aXB0aW9uKGN1c3RvbU1lbnUpOwpAQCAtMTYyLDU0ICsxNzQsNTMgQEAgdm9pZCBDb250ZXh0TWVu
dUNvbnRyb2xsZXI6OmNvbnRleHRNZW51SQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
SGl0VGVzdFJlc3VsdCByZXN1bHQgPSBtX2NvbnRleHRNZW51LT5oaXRUZXN0UmVzdWx0KCk7Ci0g
ICAgRnJhbWUqIGZyYW1lID0gcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpLT5kb2N1bWVudCgp
LT5mcmFtZSgpOworICAgIEZyYW1lKiBmcmFtZSA9IG1faGl0VGVzdFJlc3VsdC5pbm5lck5vblNo
YXJlZE5vZGUoKS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAg
ICByZXR1cm47CiAKICAgICBzd2l0Y2ggKGl0ZW0tPmFjdGlvbigpKSB7CiAgICAgY2FzZSBDb250
ZXh0TWVudUl0ZW1UYWdPcGVuTGlua0luTmV3V2luZG93OgotICAgICAgICBvcGVuTmV3V2luZG93
KHJlc3VsdC5hYnNvbHV0ZUxpbmtVUkwoKSwgZnJhbWUpOworICAgICAgICBvcGVuTmV3V2luZG93
KG1faGl0VGVzdFJlc3VsdC5hYnNvbHV0ZUxpbmtVUkwoKSwgZnJhbWUpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0Rvd25sb2FkTGlua1RvRGlzazoKICAgICAg
ICAgLy8gRklYTUU6IFNvbWUgZGF5IHdlIHNob3VsZCBiZSBhYmxlIHRvIGRvIHRoaXMgZnJvbSB3
aXRoaW4gV2ViQ29yZS4KLSAgICAgICAgbV9jbGllbnQtPmRvd25sb2FkVVJMKHJlc3VsdC5hYnNv
bHV0ZUxpbmtVUkwoKSk7CisgICAgICAgIG1fY2xpZW50LT5kb3dubG9hZFVSTChtX2hpdFRlc3RS
ZXN1bHQuYWJzb2x1dGVMaW5rVVJMKCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENvbnRl
eHRNZW51SXRlbVRhZ0NvcHlMaW5rVG9DbGlwYm9hcmQ6Ci0gICAgICAgIGZyYW1lLT5lZGl0b3Io
KS0+Y29weVVSTChyZXN1bHQuYWJzb2x1dGVMaW5rVVJMKCksIHJlc3VsdC50ZXh0Q29udGVudCgp
KTsKKyAgICAgICAgZnJhbWUtPmVkaXRvcigpLT5jb3B5VVJMKG1faGl0VGVzdFJlc3VsdC5hYnNv
bHV0ZUxpbmtVUkwoKSwgbV9oaXRUZXN0UmVzdWx0LnRleHRDb250ZW50KCkpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5JbWFnZUluTmV3V2luZG93Ogot
ICAgICAgICBvcGVuTmV3V2luZG93KHJlc3VsdC5hYnNvbHV0ZUltYWdlVVJMKCksIGZyYW1lKTsK
KyAgICAgICAgb3Blbk5ld1dpbmRvdyhtX2hpdFRlc3RSZXN1bHQuYWJzb2x1dGVJbWFnZVVSTCgp
LCBmcmFtZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnRG93
bmxvYWRJbWFnZVRvRGlzazoKICAgICAgICAgLy8gRklYTUU6IFNvbWUgZGF5IHdlIHNob3VsZCBi
ZSBhYmxlIHRvIGRvIHRoaXMgZnJvbSB3aXRoaW4gV2ViQ29yZS4KLSAgICAgICAgbV9jbGllbnQt
PmRvd25sb2FkVVJMKHJlc3VsdC5hYnNvbHV0ZUltYWdlVVJMKCkpOworICAgICAgICBtX2NsaWVu
dC0+ZG93bmxvYWRVUkwobV9oaXRUZXN0UmVzdWx0LmFic29sdXRlSW1hZ2VVUkwoKSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQ29weUltYWdlVG9DbGlwYm9h
cmQ6CiAgICAgICAgIC8vIEZJWE1FOiBUaGUgUGFzdGVib2FyZCBjbGFzcyBpcyBub3Qgd3JpdHRl
biB5ZXQKICAgICAgICAgLy8gRm9yIG5vdywgY2FsbCBpbnRvIHRoZSBjbGllbnQuIFRoaXMgaXMg
dGVtcG9yYXJ5IQotICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPmNvcHlJbWFnZShyZXN1bHQpOwor
ICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPmNvcHlJbWFnZShtX2hpdFRlc3RSZXN1bHQpOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5NZWRpYUluTmV3V2lu
ZG93OgotICAgICAgICBvcGVuTmV3V2luZG93KHJlc3VsdC5hYnNvbHV0ZU1lZGlhVVJMKCksIGZy
YW1lKTsKKyAgICAgICAgb3Blbk5ld1dpbmRvdyhtX2hpdFRlc3RSZXN1bHQuYWJzb2x1dGVNZWRp
YVVSTCgpLCBmcmFtZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ29udGV4dE1lbnVJdGVt
VGFnQ29weU1lZGlhTGlua1RvQ2xpcGJvYXJkOgotICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPmNv
cHlVUkwocmVzdWx0LmFic29sdXRlTWVkaWFVUkwoKSwgcmVzdWx0LnRleHRDb250ZW50KCkpOwor
ICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPmNvcHlVUkwobV9oaXRUZXN0UmVzdWx0LmFic29sdXRl
TWVkaWFVUkwoKSwgbV9oaXRUZXN0UmVzdWx0LnRleHRDb250ZW50KCkpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1RvZ2dsZU1lZGlhQ29udHJvbHM6Ci0gICAg
ICAgIHJlc3VsdC50b2dnbGVNZWRpYUNvbnRyb2xzRGlzcGxheSgpOworICAgICAgICBtX2hpdFRl
c3RSZXN1bHQudG9nZ2xlTWVkaWFDb250cm9sc0Rpc3BsYXkoKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdUb2dnbGVNZWRpYUxvb3A6Ci0gICAgICAgIHJlc3Vs
dC50b2dnbGVNZWRpYUxvb3BQbGF5YmFjaygpOworICAgICAgICBtX2hpdFRlc3RSZXN1bHQudG9n
Z2xlTWVkaWFMb29wUGxheWJhY2soKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDb250ZXh0
TWVudUl0ZW1UYWdFbnRlclZpZGVvRnVsbHNjcmVlbjoKLSAgICAgICAgcmVzdWx0LmVudGVyRnVs
bHNjcmVlbkZvclZpZGVvKCk7CisgICAgICAgIG1faGl0VGVzdFJlc3VsdC5lbnRlckZ1bGxzY3Jl
ZW5Gb3JWaWRlbygpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRh
Z01lZGlhUGxheVBhdXNlOgotICAgICAgICByZXN1bHQudG9nZ2xlTWVkaWFQbGF5U3RhdGUoKTsK
KyAgICAgICAgbV9oaXRUZXN0UmVzdWx0LnRvZ2dsZU1lZGlhUGxheVN0YXRlKCk7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnTWVkaWFNdXRlOgotICAgICAgICBy
ZXN1bHQudG9nZ2xlTWVkaWFNdXRlU3RhdGUoKTsKKyAgICAgICAgbV9oaXRUZXN0UmVzdWx0LnRv
Z2dsZU1lZGlhTXV0ZVN0YXRlKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ29udGV4dE1l
bnVJdGVtVGFnT3BlbkZyYW1lSW5OZXdXaW5kb3c6IHsKICAgICAgICAgRG9jdW1lbnRMb2FkZXIq
IGxvYWRlciA9IGZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKTsKQEAgLTI3MywxMCAr
Mjg0LDEwIEBAIHZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjpjb250ZXh0TWVudUkKICAgICAg
ICAgbV9jbGllbnQtPmxvb2tVcEluRGljdGlvbmFyeShmcmFtZSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnT3Blbkxpbms6Ci0gICAgICAgIGlmIChGcmFtZSog
dGFyZ2V0RnJhbWUgPSByZXN1bHQudGFyZ2V0RnJhbWUoKSkKLSAgICAgICAgICAgIHRhcmdldEZy
YW1lLT5sb2FkZXIoKS0+bG9hZEZyYW1lUmVxdWVzdChGcmFtZUxvYWRSZXF1ZXN0KGZyYW1lLT5k
b2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLCBSZXNvdXJjZVJlcXVlc3QocmVzdWx0LmFic29s
dXRlTGlua1VSTCgpLCBmcmFtZS0+bG9hZGVyKCktPm91dGdvaW5nUmVmZXJyZXIoKSkpLCBmYWxz
ZSwgZmFsc2UsIDAsIDAsIFNlbmRSZWZlcnJlcik7CisgICAgICAgIGlmIChGcmFtZSogdGFyZ2V0
RnJhbWUgPSBtX2hpdFRlc3RSZXN1bHQudGFyZ2V0RnJhbWUoKSkKKyAgICAgICAgICAgIHRhcmdl
dEZyYW1lLT5sb2FkZXIoKS0+bG9hZEZyYW1lUmVxdWVzdChGcmFtZUxvYWRSZXF1ZXN0KGZyYW1l
LT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLCBSZXNvdXJjZVJlcXVlc3QobV9oaXRUZXN0
UmVzdWx0LmFic29sdXRlTGlua1VSTCgpLCBmcmFtZS0+bG9hZGVyKCktPm91dGdvaW5nUmVmZXJy
ZXIoKSkpLCBmYWxzZSwgZmFsc2UsIDAsIDAsIFNlbmRSZWZlcnJlcik7CiAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgIG9wZW5OZXdXaW5kb3cocmVzdWx0LmFic29sdXRlTGlua1VSTCgpLCBmcmFt
ZSk7CisgICAgICAgICAgICBvcGVuTmV3V2luZG93KG1faGl0VGVzdFJlc3VsdC5hYnNvbHV0ZUxp
bmtVUkwoKSwgZnJhbWUpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENvbnRleHRNZW51SXRl
bVRhZ0JvbGQ6CiAgICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZCgiVG9nZ2xlQm9sZCIp
LmV4ZWN1dGUoKTsKQEAgLTI5NSw3ICszMDYsNyBAQCB2b2lkIENvbnRleHRNZW51Q29udHJvbGxl
cjo6Y29udGV4dE1lbnVJCiAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7CiAgICAgICAgIFJlZlB0
cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS0+dG9Ob3JtYWxpemVk
UmFuZ2UoKTsKICAgICAgICAgaWYgKCFzZWxlY3RlZFJhbmdlIHx8IHNlbGVjdGVkUmFuZ2UtPmNv
bGxhcHNlZChlYykpIHsKLSAgICAgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHJlc3VsdC5p
bm5lck5vblNoYXJlZE5vZGUoKS0+ZG9jdW1lbnQoKTsKKyAgICAgICAgICAgIERvY3VtZW50KiBk
b2N1bWVudCA9IG1faGl0VGVzdFJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKS0+ZG9jdW1lbnQo
KTsKICAgICAgICAgICAgIHNlbGVjdGVkUmFuZ2UgPSBkb2N1bWVudC0+Y3JlYXRlUmFuZ2UoKTsK
ICAgICAgICAgICAgIHNlbGVjdGVkUmFuZ2UtPnNlbGVjdE5vZGUoZG9jdW1lbnQtPmRvY3VtZW50
RWxlbWVudCgpLCBlYyk7CiAgICAgICAgIH0KQEAgLTM4NSwxMyArMzk2LDEzIEBAIHZvaWQgQ29u
dGV4dE1lbnVDb250cm9sbGVyOjpjb250ZXh0TWVudUkKICAgICAgICAgZnJhbWUtPmVkaXRvcigp
LT50b2dnbGVBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb24oKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdDaGFuZ2VCYWNrOgotICAgICAgICBmcmFtZS0+ZWRp
dG9yKCktPmNoYW5nZUJhY2tUb1JlcGxhY2VkU3RyaW5nKHJlc3VsdC5yZXBsYWNlZFN0cmluZygp
KTsKKyAgICAgICAgZnJhbWUtPmVkaXRvcigpLT5jaGFuZ2VCYWNrVG9SZXBsYWNlZFN0cmluZyht
X2hpdFRlc3RSZXN1bHQucmVwbGFjZWRTdHJpbmcoKSk7CiAgICAgICAgIGJyZWFrOwogI2VuZGlm
CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0luc3Bl
Y3RFbGVtZW50OgogICAgICAgICBpZiAoUGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCkpCi0gICAg
ICAgICAgICBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmluc3BlY3QocmVzdWx0LmlubmVy
Tm9uU2hhcmVkTm9kZSgpKTsKKyAgICAgICAgICAgIHBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIo
KS0+aW5zcGVjdChtX2hpdFRlc3RSZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCkpOwogICAgICAg
ICBicmVhazsKICNlbmRpZgogICAgIGRlZmF1bHQ6CkBAIC0zOTksNiArNDEwLDgyOSBAQCB2b2lk
IENvbnRleHRNZW51Q29udHJvbGxlcjo6Y29udGV4dE1lbnVJCiAgICAgfQogfQogCit2b2lkIENv
bnRleHRNZW51Q29udHJvbGxlcjo6YXBwZW5kSXRlbShDb250ZXh0TWVudUl0ZW0mIG1lbnVJdGVt
LCBDb250ZXh0TWVudSogcGFyZW50TWVudSkKK3sKKyAgICBjaGVja09yRW5hYmxlSWZOZWVkZWQo
bWVudUl0ZW0pOworICAgIGlmIChwYXJlbnRNZW51KQorICAgICAgICBwYXJlbnRNZW51LT5hcHBl
bmRJdGVtKG1lbnVJdGVtKTsKK30KKworc3RhdGljIFBhc3NPd25QdHI8Q29udGV4dE1lbnVJdGVt
PiBzZXBhcmF0b3JJdGVtKCkKK3sKKyAgICByZXR1cm4gbmV3IENvbnRleHRNZW51SXRlbShTZXBh
cmF0b3JUeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdOb0FjdGlvbiwgU3RyaW5nKCkpOworfQorCit2
b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6Y3JlYXRlQW5kQXBwZW5kRm9udFN1Yk1lbnUoQ29u
dGV4dE1lbnVJdGVtJiBmb250TWVudUl0ZW0pCit7CisgICAgQ29udGV4dE1lbnUgZm9udE1lbnU7
CisKKyNpZiBQTEFURk9STShNQUMpCisgICAgQ29udGV4dE1lbnVJdGVtIHNob3dGb250cyhBY3Rp
b25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTaG93Rm9udHMsIGNvbnRleHRNZW51SXRlbVRhZ1No
b3dGb250cygpKTsKKyNlbmRpZgorICAgIENvbnRleHRNZW51SXRlbSBib2xkKENoZWNrYWJsZUFj
dGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0JvbGQsIGNvbnRleHRNZW51SXRlbVRhZ0JvbGQo
KSk7CisgICAgQ29udGV4dE1lbnVJdGVtIGl0YWxpYyhDaGVja2FibGVBY3Rpb25UeXBlLCBDb250
ZXh0TWVudUl0ZW1UYWdJdGFsaWMsIGNvbnRleHRNZW51SXRlbVRhZ0l0YWxpYygpKTsKKyAgICBD
b250ZXh0TWVudUl0ZW0gdW5kZXJsaW5lKENoZWNrYWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51
SXRlbVRhZ1VuZGVybGluZSwgY29udGV4dE1lbnVJdGVtVGFnVW5kZXJsaW5lKCkpOworICAgIENv
bnRleHRNZW51SXRlbSBvdXRsaW5lKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ091dGxp
bmUsIGNvbnRleHRNZW51SXRlbVRhZ091dGxpbmUoKSk7CisjaWYgUExBVEZPUk0oTUFDKQorICAg
IENvbnRleHRNZW51SXRlbSBzdHlsZXMoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU3R5
bGVzLCBjb250ZXh0TWVudUl0ZW1UYWdTdHlsZXMoKSk7CisgICAgQ29udGV4dE1lbnVJdGVtIHNo
b3dDb2xvcnMoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU2hvd0NvbG9ycywgY29udGV4
dE1lbnVJdGVtVGFnU2hvd0NvbG9ycygpKTsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oTUFDKQor
ICAgIGFwcGVuZEl0ZW0oc2hvd0ZvbnRzLCAmZm9udE1lbnUpOworI2VuZGlmCisgICAgYXBwZW5k
SXRlbShib2xkLCAmZm9udE1lbnUpOworICAgIGFwcGVuZEl0ZW0oaXRhbGljLCAmZm9udE1lbnUp
OworICAgIGFwcGVuZEl0ZW0odW5kZXJsaW5lLCAmZm9udE1lbnUpOworICAgIGFwcGVuZEl0ZW0o
b3V0bGluZSwgJmZvbnRNZW51KTsKKyNpZiBQTEFURk9STShNQUMpCisgICAgYXBwZW5kSXRlbShz
dHlsZXMsICZmb250TWVudSk7CisgICAgYXBwZW5kSXRlbSgqc2VwYXJhdG9ySXRlbSgpLCAmZm9u
dE1lbnUpOworICAgIGFwcGVuZEl0ZW0oc2hvd0NvbG9ycywgJmZvbnRNZW51KTsKKyNlbmRpZgor
CisgICAgZm9udE1lbnVJdGVtLnNldFN1Yk1lbnUoJmZvbnRNZW51KTsKK30KKworI2lmICFkZWZp
bmVkKEJVSUxESU5HX09OX1RJR0VSKQorCisjaWYgIVBMQVRGT1JNKEdUSykKKwordm9pZCBDb250
ZXh0TWVudUNvbnRyb2xsZXI6OmNyZWF0ZUFuZEFwcGVuZFNwZWxsaW5nQW5kR3JhbW1hclN1Yk1l
bnUoQ29udGV4dE1lbnVJdGVtJiBzcGVsbGluZ0FuZEdyYW1tYXJNZW51SXRlbSkKK3sKKyAgICBD
b250ZXh0TWVudSBzcGVsbGluZ0FuZEdyYW1tYXJNZW51OworCisgICAgQ29udGV4dE1lbnVJdGVt
IHNob3dTcGVsbGluZ1BhbmVsKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1Nob3dTcGVs
bGluZ1BhbmVsLCAKKyAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnU2hvd1NwZWxsaW5nUGFuZWwo
dHJ1ZSkpOworICAgIENvbnRleHRNZW51SXRlbSBjaGVja1NwZWxsaW5nKEFjdGlvblR5cGUsIENv
bnRleHRNZW51SXRlbVRhZ0NoZWNrU3BlbGxpbmcsIAorICAgICAgICBjb250ZXh0TWVudUl0ZW1U
YWdDaGVja1NwZWxsaW5nKCkpOworICAgIENvbnRleHRNZW51SXRlbSBjaGVja0FzWW91VHlwZShD
aGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdDaGVja1NwZWxsaW5nV2hpbGVU
eXBpbmcsIAorICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdDaGVja1NwZWxsaW5nV2hpbGVUeXBp
bmcoKSk7CisgICAgQ29udGV4dE1lbnVJdGVtIGdyYW1tYXJXaXRoU3BlbGxpbmcoQ2hlY2thYmxl
QWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnQ2hlY2tHcmFtbWFyV2l0aFNwZWxsaW5nLCAK
KyAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnQ2hlY2tHcmFtbWFyV2l0aFNwZWxsaW5nKCkpOwor
I2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKKyAgICBD
b250ZXh0TWVudUl0ZW0gY29ycmVjdFNwZWxsaW5nKENoZWNrYWJsZUFjdGlvblR5cGUsIENvbnRl
eHRNZW51SXRlbVRhZ0NvcnJlY3RTcGVsbGluZ0F1dG9tYXRpY2FsbHksIAorICAgICAgICBjb250
ZXh0TWVudUl0ZW1UYWdDb3JyZWN0U3BlbGxpbmdBdXRvbWF0aWNhbGx5KCkpOworI2VuZGlmCisK
KyAgICBhcHBlbmRJdGVtKHNob3dTcGVsbGluZ1BhbmVsLCAmc3BlbGxpbmdBbmRHcmFtbWFyTWVu
dSk7CisgICAgYXBwZW5kSXRlbShjaGVja1NwZWxsaW5nLCAmc3BlbGxpbmdBbmRHcmFtbWFyTWVu
dSk7CisjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQor
ICAgIGFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSwgJnNwZWxsaW5nQW5kR3JhbW1hck1lbnUp
OworI2VuZGlmCisgICAgYXBwZW5kSXRlbShjaGVja0FzWW91VHlwZSwgJnNwZWxsaW5nQW5kR3Jh
bW1hck1lbnUpOworICAgIGFwcGVuZEl0ZW0oZ3JhbW1hcldpdGhTcGVsbGluZywgJnNwZWxsaW5n
QW5kR3JhbW1hck1lbnUpOworI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdf
T05fTEVPUEFSRCkKKyAgICBhcHBlbmRJdGVtKGNvcnJlY3RTcGVsbGluZywgJnNwZWxsaW5nQW5k
R3JhbW1hck1lbnUpOworI2VuZGlmCisKKyAgICBzcGVsbGluZ0FuZEdyYW1tYXJNZW51SXRlbS5z
ZXRTdWJNZW51KCZzcGVsbGluZ0FuZEdyYW1tYXJNZW51KTsKK30KKworI2VuZGlmIC8vICFQTEFU
Rk9STShHVEspCisKKyNlbHNlCisKK3ZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjpjcmVhdGVB
bmRBcHBlbmRTcGVsbGluZ0FuZEdyYW1tYXJTdWJNZW51KENvbnRleHRNZW51SXRlbSYgc3BlbGxp
bmdBbmRHcmFtbWFyTWVudUl0ZW0pCit7CisgICAgQ29udGV4dE1lbnUgc3BlbGxpbmdNZW51Owor
CisgICAgQ29udGV4dE1lbnVJdGVtIHNob3dTcGVsbGluZ1BhbmVsKEFjdGlvblR5cGUsIENvbnRl
eHRNZW51SXRlbVRhZ1Nob3dTcGVsbGluZ1BhbmVsLCAKKyAgICAgICAgY29udGV4dE1lbnVJdGVt
VGFnU2hvd1NwZWxsaW5nUGFuZWwodHJ1ZSkpOworICAgIENvbnRleHRNZW51SXRlbSBjaGVja1Nw
ZWxsaW5nKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0NoZWNrU3BlbGxpbmcsIAorICAg
ICAgICBjb250ZXh0TWVudUl0ZW1UYWdDaGVja1NwZWxsaW5nKCkpOworICAgIENvbnRleHRNZW51
SXRlbSBjaGVja0FzWW91VHlwZShDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1U
YWdDaGVja1NwZWxsaW5nV2hpbGVUeXBpbmcsIAorICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdD
aGVja1NwZWxsaW5nV2hpbGVUeXBpbmcoKSk7CisKKyAgICBhcHBlbmRJdGVtKHNob3dTcGVsbGlu
Z1BhbmVsLCAmc3BlbGxpbmdNZW51KTsKKyAgICBhcHBlbmRJdGVtKGNoZWNrU3BlbGxpbmcsICZz
cGVsbGluZ01lbnUpOworICAgIGFwcGVuZEl0ZW0oY2hlY2tBc1lvdVR5cGUsICZzcGVsbGluZ01l
bnUpOworCisgICAgc3BlbGxpbmdNZW51SXRlbS5zZXRTdWJNZW51KCZzcGVsbGluZ01lbnUpOwor
fQorCisjZW5kaWYKKworI2lmIFBMQVRGT1JNKE1BQykKKwordm9pZCBDb250ZXh0TWVudUNvbnRy
b2xsZXI6OmNyZWF0ZUFuZEFwcGVuZFNwZWVjaFN1Yk1lbnUoQ29udGV4dE1lbnVJdGVtJiBzcGVl
Y2hNZW51SXRlbSkKK3sKKyAgICBDb250ZXh0TWVudSBzcGVlY2hNZW51OworCisgICAgQ29udGV4
dE1lbnVJdGVtIHN0YXJ0KEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1N0YXJ0U3BlYWtp
bmcsIGNvbnRleHRNZW51SXRlbVRhZ1N0YXJ0U3BlYWtpbmcoKSk7CisgICAgQ29udGV4dE1lbnVJ
dGVtIHN0b3AoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU3RvcFNwZWFraW5nLCBjb250
ZXh0TWVudUl0ZW1UYWdTdG9wU3BlYWtpbmcoKSk7CisKKyAgICBhcHBlbmRJdGVtKHN0YXJ0LCAm
c3BlZWNoTWVudSk7CisgICAgYXBwZW5kSXRlbShzdG9wLCAmc3BlZWNoTWVudSk7CisKKyAgICBz
cGVlY2hNZW51SXRlbS5zZXRTdWJNZW51KCZzcGVlY2hNZW51KTsKK30KKworI2VuZGlmCisgCisj
aWYgIVBMQVRGT1JNKEdUSykKKwordm9pZCBDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNyZWF0ZUFu
ZEFwcGVuZFdyaXRpbmdEaXJlY3Rpb25TdWJNZW51KENvbnRleHRNZW51SXRlbSYgd3JpdGluZ0Rp
cmVjdGlvbk1lbnVJdGVtKQoreworICAgIENvbnRleHRNZW51IHdyaXRpbmdEaXJlY3Rpb25NZW51
OworCisgICAgQ29udGV4dE1lbnVJdGVtIGRlZmF1bHRJdGVtKEFjdGlvblR5cGUsIENvbnRleHRN
ZW51SXRlbVRhZ0RlZmF1bHREaXJlY3Rpb24sIAorICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdE
ZWZhdWx0RGlyZWN0aW9uKCkpOworICAgIENvbnRleHRNZW51SXRlbSBsdHIoQ2hlY2thYmxlQWN0
aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnTGVmdFRvUmlnaHQsIGNvbnRleHRNZW51SXRlbVRh
Z0xlZnRUb1JpZ2h0KCkpOworICAgIENvbnRleHRNZW51SXRlbSBydGwoQ2hlY2thYmxlQWN0aW9u
VHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnUmlnaHRUb0xlZnQsIGNvbnRleHRNZW51SXRlbVRhZ1Jp
Z2h0VG9MZWZ0KCkpOworCisgICAgYXBwZW5kSXRlbShkZWZhdWx0SXRlbSwgJndyaXRpbmdEaXJl
Y3Rpb25NZW51KTsKKyAgICBhcHBlbmRJdGVtKGx0ciwgJndyaXRpbmdEaXJlY3Rpb25NZW51KTsK
KyAgICBhcHBlbmRJdGVtKHJ0bCwgJndyaXRpbmdEaXJlY3Rpb25NZW51KTsKKworICAgIHdyaXRp
bmdEaXJlY3Rpb25NZW51SXRlbS5zZXRTdWJNZW51KCZ3cml0aW5nRGlyZWN0aW9uTWVudSk7Cit9
CisKK3ZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjpjcmVhdGVBbmRBcHBlbmRUZXh0RGlyZWN0
aW9uU3ViTWVudShDb250ZXh0TWVudUl0ZW0mIHRleHREaXJlY3Rpb25NZW51SXRlbSkKK3sKKyAg
ICBDb250ZXh0TWVudSB0ZXh0RGlyZWN0aW9uTWVudTsKKworICAgIENvbnRleHRNZW51SXRlbSBk
ZWZhdWx0SXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdUZXh0RGlyZWN0aW9uRGVm
YXVsdCwgY29udGV4dE1lbnVJdGVtVGFnRGVmYXVsdERpcmVjdGlvbigpKTsKKyAgICBDb250ZXh0
TWVudUl0ZW0gbHRyKENoZWNrYWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1RleHRE
aXJlY3Rpb25MZWZ0VG9SaWdodCwgY29udGV4dE1lbnVJdGVtVGFnTGVmdFRvUmlnaHQoKSk7Cisg
ICAgQ29udGV4dE1lbnVJdGVtIHJ0bChDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0
ZW1UYWdUZXh0RGlyZWN0aW9uUmlnaHRUb0xlZnQsIGNvbnRleHRNZW51SXRlbVRhZ1JpZ2h0VG9M
ZWZ0KCkpOworCisgICAgYXBwZW5kSXRlbShkZWZhdWx0SXRlbSwgJnRleHREaXJlY3Rpb25NZW51
KTsKKyAgICBhcHBlbmRJdGVtKGx0ciwgJnRleHREaXJlY3Rpb25NZW51KTsKKyAgICBhcHBlbmRJ
dGVtKHJ0bCwgJnRleHREaXJlY3Rpb25NZW51KTsKKworICAgIHRleHREaXJlY3Rpb25NZW51SXRl
bS5zZXRTdWJNZW51KCZ0ZXh0RGlyZWN0aW9uTWVudSk7Cit9CisKKyNlbmRpZgorCisjaWYgUExB
VEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJ
TERJTkdfT05fTEVPUEFSRCkKKwordm9pZCBDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNyZWF0ZUFu
ZEFwcGVuZFN1YnN0aXR1dGlvbnNTdWJNZW51KENvbnRleHRNZW51SXRlbSYgc3Vic3RpdHV0aW9u
c01lbnVJdGVtKQoreworICAgIENvbnRleHRNZW51IHN1YnN0aXR1dGlvbnNNZW51OworCisgICAg
Q29udGV4dE1lbnVJdGVtIHNob3dTdWJzdGl0dXRpb25zKEFjdGlvblR5cGUsIENvbnRleHRNZW51
SXRlbVRhZ1Nob3dTdWJzdGl0dXRpb25zLCBjb250ZXh0TWVudUl0ZW1UYWdTaG93U3Vic3RpdHV0
aW9ucyh0cnVlKSk7CisgICAgQ29udGV4dE1lbnVJdGVtIHNtYXJ0Q29weVBhc3RlKENoZWNrYWJs
ZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1NtYXJ0Q29weVBhc3RlLCBjb250ZXh0TWVu
dUl0ZW1UYWdTbWFydENvcHlQYXN0ZSgpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gc21hcnRRdW90
ZXMoQ2hlY2thYmxlQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU21hcnRRdW90ZXMsIGNv
bnRleHRNZW51SXRlbVRhZ1NtYXJ0UXVvdGVzKCkpOworICAgIENvbnRleHRNZW51SXRlbSBzbWFy
dERhc2hlcyhDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTbWFydERhc2hl
cywgY29udGV4dE1lbnVJdGVtVGFnU21hcnREYXNoZXMoKSk7CisgICAgQ29udGV4dE1lbnVJdGVt
IHNtYXJ0TGlua3MoQ2hlY2thYmxlQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU21hcnRM
aW5rcywgY29udGV4dE1lbnVJdGVtVGFnU21hcnRMaW5rcygpKTsKKyAgICBDb250ZXh0TWVudUl0
ZW0gdGV4dFJlcGxhY2VtZW50KENoZWNrYWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRh
Z1RleHRSZXBsYWNlbWVudCwgY29udGV4dE1lbnVJdGVtVGFnVGV4dFJlcGxhY2VtZW50KCkpOwor
CisgICAgYXBwZW5kSXRlbShzaG93U3Vic3RpdHV0aW9ucywgJnN1YnN0aXR1dGlvbnNNZW51KTsK
KyAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCksICZzdWJzdGl0dXRpb25zTWVudSk7Cisg
ICAgYXBwZW5kSXRlbShzbWFydENvcHlQYXN0ZSwgJnN1YnN0aXR1dGlvbnNNZW51KTsKKyAgICBh
cHBlbmRJdGVtKHNtYXJ0UXVvdGVzLCAmc3Vic3RpdHV0aW9uc01lbnUpOworICAgIGFwcGVuZEl0
ZW0oc21hcnREYXNoZXMsICZzdWJzdGl0dXRpb25zTWVudSk7CisgICAgYXBwZW5kSXRlbShzbWFy
dExpbmtzLCAmc3Vic3RpdHV0aW9uc01lbnUpOworICAgIGFwcGVuZEl0ZW0odGV4dFJlcGxhY2Vt
ZW50LCAmc3Vic3RpdHV0aW9uc01lbnUpOworCisgICAgc3Vic3RpdHV0aW9uc01lbnVJdGVtLnNl
dFN1Yk1lbnUoJnN1YnN0aXR1dGlvbnNNZW51KTsKK30KKwordm9pZCBDb250ZXh0TWVudUNvbnRy
b2xsZXI6OmNyZWF0ZUFuZEFwcGVuZFRyYW5zZm9ybWF0aW9uc1N1Yk1lbnUoQ29udGV4dE1lbnVJ
dGVtJiB0cmFuc2Zvcm1hdGlvbnNNZW51SXRlbSkKK3sKKyAgICBDb250ZXh0TWVudSB0cmFuc2Zv
cm1hdGlvbnNNZW51OworCisgICAgQ29udGV4dE1lbnVJdGVtIG1ha2VVcHBlckNhc2UoQWN0aW9u
VHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnTWFrZVVwcGVyQ2FzZSwgY29udGV4dE1lbnVJdGVtVGFn
TWFrZVVwcGVyQ2FzZSgpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gbWFrZUxvd2VyQ2FzZShBY3Rp
b25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdNYWtlTG93ZXJDYXNlLCBjb250ZXh0TWVudUl0ZW1U
YWdNYWtlTG93ZXJDYXNlKCkpOworICAgIENvbnRleHRNZW51SXRlbSBjYXBpdGFsaXplKEFjdGlv
blR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0NhcGl0YWxpemUsIGNvbnRleHRNZW51SXRlbVRhZ0Nh
cGl0YWxpemUoKSk7CisKKyAgICBhcHBlbmRJdGVtKG1ha2VVcHBlckNhc2UsICZ0cmFuc2Zvcm1h
dGlvbnNNZW51KTsKKyAgICBhcHBlbmRJdGVtKG1ha2VMb3dlckNhc2UsICZ0cmFuc2Zvcm1hdGlv
bnNNZW51KTsKKyAgICBhcHBlbmRJdGVtKGNhcGl0YWxpemUsICZ0cmFuc2Zvcm1hdGlvbnNNZW51
KTsKKworICAgIHRyYW5zZm9ybWF0aW9uc01lbnVJdGVtLnNldFN1Yk1lbnUoJnRyYW5zZm9ybWF0
aW9uc01lbnUpOworfQorCisjZW5kaWYKKworc3RhdGljIGJvb2wgc2VsZWN0aW9uQ29udGFpbnNQ
b3NzaWJsZVdvcmQoRnJhbWUqIGZyYW1lKQoreworICAgIC8vIEN1cnJlbnQgYWxnb3JpdGhtOiBs
b29rIGZvciBhIGNoYXJhY3RlciB0aGF0J3Mgbm90IGp1c3QgYSBzZXBhcmF0b3IuCisgICAgZm9y
IChUZXh0SXRlcmF0b3IgaXQoZnJhbWUtPnNlbGVjdGlvbigpLT50b05vcm1hbGl6ZWRSYW5nZSgp
LmdldCgpKTsgIWl0LmF0RW5kKCk7IGl0LmFkdmFuY2UoKSkgeworICAgICAgICBpbnQgbGVuZ3Ro
ID0gaXQubGVuZ3RoKCk7CisgICAgICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0gaXQuY2hh
cmFjdGVycygpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQorICAg
ICAgICAgICAgaWYgKCEoY2F0ZWdvcnkoY2hhcmFjdGVyc1tpXSkgJiAoU2VwYXJhdG9yX1NwYWNl
IHwgU2VwYXJhdG9yX0xpbmUgfCBTZXBhcmF0b3JfUGFyYWdyYXBoKSkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBDb250
ZXh0TWVudUNvbnRyb2xsZXI6OnBvcHVsYXRlKCkKK3sKKyAgICBDb250ZXh0TWVudUl0ZW0gT3Bl
bkxpbmtJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ09wZW5MaW5rLCBjb250ZXh0
TWVudUl0ZW1UYWdPcGVuTGluaygpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gT3BlbkxpbmtJbk5l
d1dpbmRvd0l0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnT3BlbkxpbmtJbk5ld1dp
bmRvdywgCisgICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ09wZW5MaW5rSW5OZXdXaW5kb3coKSk7
CisgICAgQ29udGV4dE1lbnVJdGVtIERvd25sb2FkRmlsZUl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4
dE1lbnVJdGVtVGFnRG93bmxvYWRMaW5rVG9EaXNrLCAKKyAgICAgICAgY29udGV4dE1lbnVJdGVt
VGFnRG93bmxvYWRMaW5rVG9EaXNrKCkpOworICAgIENvbnRleHRNZW51SXRlbSBDb3B5TGlua0l0
ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnQ29weUxpbmtUb0NsaXBib2FyZCwgCisg
ICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ0NvcHlMaW5rVG9DbGlwYm9hcmQoKSk7CisgICAgQ29u
dGV4dE1lbnVJdGVtIE9wZW5JbWFnZUluTmV3V2luZG93SXRlbShBY3Rpb25UeXBlLCBDb250ZXh0
TWVudUl0ZW1UYWdPcGVuSW1hZ2VJbk5ld1dpbmRvdywgCisgICAgICAgIGNvbnRleHRNZW51SXRl
bVRhZ09wZW5JbWFnZUluTmV3V2luZG93KCkpOworICAgIENvbnRleHRNZW51SXRlbSBEb3dubG9h
ZEltYWdlSXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdEb3dubG9hZEltYWdlVG9E
aXNrLCAKKyAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnRG93bmxvYWRJbWFnZVRvRGlzaygpKTsK
KyAgICBDb250ZXh0TWVudUl0ZW0gQ29weUltYWdlSXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVu
dUl0ZW1UYWdDb3B5SW1hZ2VUb0NsaXBib2FyZCwgCisgICAgICAgIGNvbnRleHRNZW51SXRlbVRh
Z0NvcHlJbWFnZVRvQ2xpcGJvYXJkKCkpOworICAgIENvbnRleHRNZW51SXRlbSBPcGVuTWVkaWFJ
bk5ld1dpbmRvd0l0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnT3Blbk1lZGlhSW5O
ZXdXaW5kb3csIFN0cmluZygpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gQ29weU1lZGlhTGlua0l0
ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnQ29weU1lZGlhTGlua1RvQ2xpcGJvYXJk
LCAKKyAgICAgICAgU3RyaW5nKCkpOworICAgIENvbnRleHRNZW51SXRlbSBNZWRpYVBsYXlQYXVz
ZShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdNZWRpYVBsYXlQYXVzZSwgCisgICAgICAg
IGNvbnRleHRNZW51SXRlbVRhZ01lZGlhUGxheSgpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gTWVk
aWFNdXRlKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ01lZGlhTXV0ZSwgCisgICAgICAg
IGNvbnRleHRNZW51SXRlbVRhZ01lZGlhTXV0ZSgpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gVG9n
Z2xlTWVkaWFDb250cm9scyhDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdU
b2dnbGVNZWRpYUNvbnRyb2xzLCAKKyAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnVG9nZ2xlTWVk
aWFDb250cm9scygpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gVG9nZ2xlTWVkaWFMb29wKENoZWNr
YWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1RvZ2dsZU1lZGlhTG9vcCwgCisgICAg
ICAgIGNvbnRleHRNZW51SXRlbVRhZ1RvZ2dsZU1lZGlhTG9vcCgpKTsKKyAgICBDb250ZXh0TWVu
dUl0ZW0gRW50ZXJWaWRlb0Z1bGxzY3JlZW4oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFn
RW50ZXJWaWRlb0Z1bGxzY3JlZW4sIAorICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdFbnRlclZp
ZGVvRnVsbHNjcmVlbigpKTsKKyNpZiBQTEFURk9STShNQUMpCisgICAgQ29udGV4dE1lbnVJdGVt
IFNlYXJjaFNwb3RsaWdodEl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU2VhcmNo
SW5TcG90bGlnaHQsIAorICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdTZWFyY2hJblNwb3RsaWdo
dCgpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gTG9va0luRGljdGlvbmFyeUl0ZW0oQWN0aW9uVHlw
ZSwgQ29udGV4dE1lbnVJdGVtVGFnTG9va1VwSW5EaWN0aW9uYXJ5LCAKKyAgICAgICAgY29udGV4
dE1lbnVJdGVtVGFnTG9va1VwSW5EaWN0aW9uYXJ5KCkpOworI2VuZGlmCisjaWYgIVBMQVRGT1JN
KEdUSykKKyAgICBDb250ZXh0TWVudUl0ZW0gU2VhcmNoV2ViSXRlbShBY3Rpb25UeXBlLCBDb250
ZXh0TWVudUl0ZW1UYWdTZWFyY2hXZWIsIGNvbnRleHRNZW51SXRlbVRhZ1NlYXJjaFdlYigpKTsK
KyNlbmRpZgorICAgIENvbnRleHRNZW51SXRlbSBDb3B5SXRlbShBY3Rpb25UeXBlLCBDb250ZXh0
TWVudUl0ZW1UYWdDb3B5LCBjb250ZXh0TWVudUl0ZW1UYWdDb3B5KCkpOworICAgIENvbnRleHRN
ZW51SXRlbSBCYWNrSXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdHb0JhY2ssIGNv
bnRleHRNZW51SXRlbVRhZ0dvQmFjaygpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gRm9yd2FyZEl0
ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnR29Gb3J3YXJkLCAgY29udGV4dE1lbnVJ
dGVtVGFnR29Gb3J3YXJkKCkpOworICAgIENvbnRleHRNZW51SXRlbSBTdG9wSXRlbShBY3Rpb25U
eXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTdG9wLCBjb250ZXh0TWVudUl0ZW1UYWdTdG9wKCkpOwor
ICAgIENvbnRleHRNZW51SXRlbSBSZWxvYWRJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRl
bVRhZ1JlbG9hZCwgY29udGV4dE1lbnVJdGVtVGFnUmVsb2FkKCkpOworICAgIENvbnRleHRNZW51
SXRlbSBPcGVuRnJhbWVJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ09wZW5GcmFt
ZUluTmV3V2luZG93LCAKKyAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnT3BlbkZyYW1lSW5OZXdX
aW5kb3coKSk7CisgICAgQ29udGV4dE1lbnVJdGVtIE5vR3Vlc3Nlc0l0ZW0oQWN0aW9uVHlwZSwg
Q29udGV4dE1lbnVJdGVtVGFnTm9HdWVzc2VzRm91bmQsIAorICAgICAgICBjb250ZXh0TWVudUl0
ZW1UYWdOb0d1ZXNzZXNGb3VuZCgpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gSWdub3JlU3BlbGxp
bmdJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0lnbm9yZVNwZWxsaW5nLCAKKyAg
ICAgICAgY29udGV4dE1lbnVJdGVtVGFnSWdub3JlU3BlbGxpbmcoKSk7CisgICAgQ29udGV4dE1l
bnVJdGVtIExlYXJuU3BlbGxpbmdJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0xl
YXJuU3BlbGxpbmcsIAorICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdMZWFyblNwZWxsaW5nKCkp
OworICAgIENvbnRleHRNZW51SXRlbSBJZ25vcmVHcmFtbWFySXRlbShBY3Rpb25UeXBlLCBDb250
ZXh0TWVudUl0ZW1UYWdJZ25vcmVHcmFtbWFyLCAKKyAgICAgICAgY29udGV4dE1lbnVJdGVtVGFn
SWdub3JlR3JhbW1hcigpKTsKKyAgICBDb250ZXh0TWVudUl0ZW0gQ3V0SXRlbShBY3Rpb25UeXBl
LCBDb250ZXh0TWVudUl0ZW1UYWdDdXQsIGNvbnRleHRNZW51SXRlbVRhZ0N1dCgpKTsKKyAgICBD
b250ZXh0TWVudUl0ZW0gUGFzdGVJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1Bh
c3RlLCBjb250ZXh0TWVudUl0ZW1UYWdQYXN0ZSgpKTsKKyNpZiBQTEFURk9STShHVEspCisgICAg
Q29udGV4dE1lbnVJdGVtIERlbGV0ZUl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFn
RGVsZXRlLCBjb250ZXh0TWVudUl0ZW1UYWdEZWxldGUoKSk7CisgICAgQ29udGV4dE1lbnVJdGVt
IFNlbGVjdEFsbEl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU2VsZWN0QWxsLCBj
b250ZXh0TWVudUl0ZW1UYWdTZWxlY3RBbGwoKSk7CisjZW5kaWYKKworICAgIE5vZGUqIG5vZGUg
PSBtX2hpdFRlc3RSZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCk7CisgICAgaWYgKCFub2RlKQor
ICAgICAgICByZXR1cm47CisjaWYgUExBVEZPUk0oR1RLKQorICAgIGlmICghbV9oaXRUZXN0UmVz
dWx0LmlzQ29udGVudEVkaXRhYmxlKCkgJiYgKG5vZGUtPmlzRWxlbWVudE5vZGUoKSAmJiBzdGF0
aWNfY2FzdDxFbGVtZW50Kj4obm9kZSktPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpKQorICAgICAg
ICByZXR1cm47CisjZW5kaWYKKyAgICBGcmFtZSogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLT5m
cmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9o
aXRUZXN0UmVzdWx0LmlzQ29udGVudEVkaXRhYmxlKCkpIHsKKyAgICAgICAgRnJhbWVMb2FkZXIq
IGxvYWRlciA9IGZyYW1lLT5sb2FkZXIoKTsKKyAgICAgICAgS1VSTCBsaW5rVVJMID0gbV9oaXRU
ZXN0UmVzdWx0LmFic29sdXRlTGlua1VSTCgpOworICAgICAgICBpZiAoIWxpbmtVUkwuaXNFbXB0
eSgpKSB7CisgICAgICAgICAgICBpZiAobG9hZGVyLT5jYW5IYW5kbGVSZXF1ZXN0KFJlc291cmNl
UmVxdWVzdChsaW5rVVJMKSkpIHsKKyAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKE9wZW5MaW5r
SXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAgICAgICAgICAgYXBwZW5kSXRlbShP
cGVuTGlua0luTmV3V2luZG93SXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAgICAg
ICAgICAgYXBwZW5kSXRlbShEb3dubG9hZEZpbGVJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFwcGVuZEl0ZW0oQ29weUxpbmtJdGVtLCBtX2Nv
bnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIEtVUkwgaW1hZ2VVUkwgPSBt
X2hpdFRlc3RSZXN1bHQuYWJzb2x1dGVJbWFnZVVSTCgpOworICAgICAgICBpZiAoIWltYWdlVVJM
LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgaWYgKCFsaW5rVVJMLmlzRW1wdHkoKSkKKyAgICAg
ICAgICAgICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCksIG1fY29udGV4dE1lbnUuZ2V0
KCkpOworCisgICAgICAgICAgICBhcHBlbmRJdGVtKE9wZW5JbWFnZUluTmV3V2luZG93SXRlbSwg
bV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAgICAgICBhcHBlbmRJdGVtKERvd25sb2FkSW1h
Z2VJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgICAgIGlmIChpbWFnZVVSTC5p
c0xvY2FsRmlsZSgpIHx8IG1faGl0VGVzdFJlc3VsdC5pbWFnZSgpKQorICAgICAgICAgICAgICAg
IGFwcGVuZEl0ZW0oQ29weUltYWdlSXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAg
IH0KKworICAgICAgICBLVVJMIG1lZGlhVVJMID0gbV9oaXRUZXN0UmVzdWx0LmFic29sdXRlTWVk
aWFVUkwoKTsKKyAgICAgICAgaWYgKCFtZWRpYVVSTC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAg
IGlmICghbGlua1VSTC5pc0VtcHR5KCkgfHwgIWltYWdlVVJMLmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCksIG1fY29udGV4dE1lbnUuZ2V0KCkp
OworCisgICAgICAgICAgICBhcHBlbmRJdGVtKE1lZGlhUGxheVBhdXNlLCBtX2NvbnRleHRNZW51
LmdldCgpKTsKKyAgICAgICAgICAgIGFwcGVuZEl0ZW0oTWVkaWFNdXRlLCBtX2NvbnRleHRNZW51
LmdldCgpKTsKKyAgICAgICAgICAgIGFwcGVuZEl0ZW0oVG9nZ2xlTWVkaWFDb250cm9scywgbV9j
b250ZXh0TWVudS5nZXQoKSk7CisgICAgICAgICAgICBhcHBlbmRJdGVtKFRvZ2dsZU1lZGlhTG9v
cCwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAgICAgICBhcHBlbmRJdGVtKEVudGVyVmlk
ZW9GdWxsc2NyZWVuLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKworICAgICAgICAgICAgYXBwZW5k
SXRlbSgqc2VwYXJhdG9ySXRlbSgpLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgICAg
IGFwcGVuZEl0ZW0oQ29weU1lZGlhTGlua0l0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOworICAg
ICAgICAgICAgYXBwZW5kSXRlbShPcGVuTWVkaWFJbk5ld1dpbmRvd0l0ZW0sIG1fY29udGV4dE1l
bnUuZ2V0KCkpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGltYWdlVVJMLmlzRW1wdHkoKSAm
JiBsaW5rVVJMLmlzRW1wdHkoKSAmJiBtZWRpYVVSTC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAg
IGlmIChtX2hpdFRlc3RSZXN1bHQuaXNTZWxlY3RlZCgpKSB7CisgICAgICAgICAgICAgICAgaWYg
KHNlbGVjdGlvbkNvbnRhaW5zUG9zc2libGVXb3JkKGZyYW1lKSkgeworI2lmIFBMQVRGT1JNKE1B
QykKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kSXRlbShTZWFyY2hTcG90bGlnaHRJdGVtLCBt
X2NvbnRleHRNZW51LmdldCgpKTsKKyNlbmRpZgorI2lmICFQTEFURk9STShHVEspCisgICAgICAg
ICAgICAgICAgICAgIGFwcGVuZEl0ZW0oU2VhcmNoV2ViSXRlbSwgbV9jb250ZXh0TWVudS5nZXQo
KSk7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSwgbV9j
b250ZXh0TWVudS5nZXQoKSk7CisjZW5kaWYKKyNpZiBQTEFURk9STShNQUMpCisgICAgICAgICAg
ICAgICAgICAgIGFwcGVuZEl0ZW0oTG9va0luRGljdGlvbmFyeUl0ZW0sIG1fY29udGV4dE1lbnUu
Z2V0KCkpOworICAgICAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCks
IG1fY29udGV4dE1lbnUuZ2V0KCkpOworI2VuZGlmCisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGFwcGVuZEl0ZW0oQ29weUl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOworI2lm
IFBMQVRGT1JNKE1BQykKKyAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVt
KCksIG1fY29udGV4dE1lbnUuZ2V0KCkpOworICAgICAgICAgICAgICAgIENvbnRleHRNZW51SXRl
bSBTcGVlY2hNZW51SXRlbShTdWJtZW51VHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU3BlZWNoTWVu
dSwgY29udGV4dE1lbnVJdGVtVGFnU3BlZWNoTWVudSgpKTsKKyAgICAgICAgICAgICAgICBjcmVh
dGVBbmRBcHBlbmRTcGVlY2hTdWJNZW51KFNwZWVjaE1lbnVJdGVtKTsKKyAgICAgICAgICAgICAg
ICBhcHBlbmRJdGVtKFNwZWVjaE1lbnVJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyNlbmRp
ZiAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIH0gZWxzZSB7CisjaWYgRU5BQkxFKElOU1BF
Q1RPUikKKyAgICAgICAgICAgICAgICBpZiAoIShmcmFtZS0+cGFnZSgpICYmIGZyYW1lLT5wYWdl
KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+aGFzSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQoKSkp
IHsKKyNlbmRpZgorICAgICAgICAgICAgICAgIGlmIChmcmFtZS0+cGFnZSgpICYmIGZyYW1lLT5w
YWdlKCktPmJhY2tGb3J3YXJkKCktPmNhbkdvQmFja09yRm9yd2FyZCgtMSkpCisgICAgICAgICAg
ICAgICAgICAgIGFwcGVuZEl0ZW0oQmFja0l0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOworCisg
ICAgICAgICAgICAgICAgaWYgKGZyYW1lLT5wYWdlKCkgJiYgZnJhbWUtPnBhZ2UoKS0+YmFja0Zv
cndhcmQoKS0+Y2FuR29CYWNrT3JGb3J3YXJkKDEpKQorICAgICAgICAgICAgICAgICAgICBhcHBl
bmRJdGVtKEZvcndhcmRJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKworICAgICAgICAgICAg
ICAgIC8vIHVzZSBpc0xvYWRpbmdJbkFQSVNlbnNlIHJhdGhlciB0aGFuIGlzTG9hZGluZyBiZWNh
dXNlIFN0b3AvUmVsb2FkIGFyZQorICAgICAgICAgICAgICAgIC8vIGludGVuZGVkIHRvIG1hdGNo
IFdlYktpdCdzIEFQSSwgbm90IFdlYkNvcmUncyBpbnRlcm5hbCBub3Rpb24gb2YgbG9hZGluZyBz
dGF0dXMKKyAgICAgICAgICAgICAgICBpZiAobG9hZGVyLT5kb2N1bWVudExvYWRlcigpLT5pc0xv
YWRpbmdJbkFQSVNlbnNlKCkpCisgICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oU3RvcEl0
ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgYXBwZW5kSXRlbShSZWxvYWRJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsK
KyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorICAgICAgICAgICAgICAgIH0KKyNlbmRpZgorCisgICAg
ICAgICAgICAgICAgaWYgKGZyYW1lLT5wYWdlKCkgJiYgZnJhbWUgIT0gZnJhbWUtPnBhZ2UoKS0+
bWFpbkZyYW1lKCkpCisgICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oT3BlbkZyYW1lSXRl
bSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
IGVsc2UgeyAvLyBNYWtlIGFuIGVkaXRpbmcgY29udGV4dCBtZW51CisgICAgICAgIFNlbGVjdGlv
bkNvbnRyb2xsZXIqIHNlbGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKTsKKyAgICAgICAgYm9v
bCBpblBhc3N3b3JkRmllbGQgPSBzZWxlY3Rpb24tPmlzSW5QYXNzd29yZEZpZWxkKCk7CisgICAg
ICAgIGJvb2wgc3BlbGxDaGVja2luZ0VuYWJsZWQgPSBmcmFtZS0+ZWRpdG9yKCktPmlzU3BlbGxD
aGVja2luZ0VuYWJsZWRGb3Iobm9kZSk7CisgICAgICAgIAorICAgICAgICBpZiAoIWluUGFzc3dv
cmRGaWVsZCAmJiBzcGVsbENoZWNraW5nRW5hYmxlZCkgeworICAgICAgICAgICAgLy8gQ29uc2lk
ZXIgYWRkaW5nIHNwZWxsaW5nLXJlbGF0ZWQgb3IgZ3JhbW1hci1yZWxhdGVkIGNvbnRleHQgbWVu
dSBpdGVtcyAobmV2ZXIgYm90aCwgc2luY2UgYSBzaW5nbGUgc2VsZWN0ZWQgcmFuZ2UKKyAgICAg
ICAgICAgIC8vIGlzIG5ldmVyIGNvbnNpZGVyZWQgYSBtaXNzcGVsbGluZyBhbmQgYmFkIGdyYW1t
YXIgYXQgdGhlIHNhbWUgdGltZSkKKyAgICAgICAgICAgIGJvb2wgbWlzc3BlbGxpbmc7CisgICAg
ICAgICAgICBib29sIGJhZEdyYW1tYXI7CisgICAgICAgICAgICBWZWN0b3I8U3RyaW5nPiBndWVz
c2VzID0gZnJhbWUtPmVkaXRvcigpLT5ndWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNh
bFNlbGVjdGlvbihtaXNzcGVsbGluZywgYmFkR3JhbW1hcik7CisgICAgICAgICAgICBpZiAobWlz
c3BlbGxpbmcgfHwgYmFkR3JhbW1hcikgeworICAgICAgICAgICAgICAgIHNpemVfdCBzaXplID0g
Z3Vlc3Nlcy5zaXplKCk7CisgICAgICAgICAgICAgICAgaWYgKHNpemUgPT0gMCkgeworICAgICAg
ICAgICAgICAgICAgICAvLyBJZiB0aGVyZSdzIGJhZCBncmFtbWFyIGJ1dCBubyBzdWdnZXN0aW9u
cyAoZS5nLiwgcmVwZWF0ZWQgd29yZCksIGp1c3QgbGVhdmUgb2ZmIHRoZSBzdWdnZXN0aW9ucwor
ICAgICAgICAgICAgICAgICAgICAvLyBsaXN0IGFuZCB0cmFpbGluZyBzZXBhcmF0b3IgcmF0aGVy
IHRoYW4gYWRkaW5nIGEgIk5vIEd1ZXNzZXMgRm91bmQiIGl0ZW0gKG1hdGNoZXMgQXBwS2l0KQor
ICAgICAgICAgICAgICAgICAgICBpZiAobWlzc3BlbGxpbmcpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGFwcGVuZEl0ZW0oTm9HdWVzc2VzSXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCksIG1fY29u
dGV4dE1lbnUuZ2V0KCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNp
emU7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nICZndWVzcyA9
IGd1ZXNzZXNbaV07CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWd1ZXNzLmlzRW1wdHko
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRleHRNZW51SXRlbSBpdGVtKEFj
dGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1NwZWxsaW5nR3Vlc3MsIGd1ZXNzKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKGl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0
KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSwgbV9jb250ZXh0
TWVudS5nZXQoKSk7ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKG1pc3NwZWxsaW5nKSB7CisgICAgICAg
ICAgICAgICAgICAgIGFwcGVuZEl0ZW0oSWdub3JlU3BlbGxpbmdJdGVtLCBtX2NvbnRleHRNZW51
LmdldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kSXRlbShMZWFyblNwZWxsaW5nSXRl
bSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICAgICAgICAgIGFwcGVuZEl0ZW0oSWdub3JlR3JhbW1hckl0ZW0sIG1fY29udGV4dE1lbnUu
Z2V0KCkpOworICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSwgbV9j
b250ZXh0TWVudS5nZXQoKSk7CisjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElO
R19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHN0cmluZyB3YXMgYXV0b2NvcnJl
Y3RlZCwgZ2VuZXJhdGUgYSBjb250ZXh0dWFsIG1lbnUgaXRlbSBhbGxvd2luZyBpdCB0byBiZSBj
aGFuZ2VkIGJhY2suCisgICAgICAgICAgICAgICAgU3RyaW5nIHJlcGxhY2VkU3RyaW5nID0gbV9o
aXRUZXN0UmVzdWx0LnJlcGxhY2VkU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgaWYgKCFyZXBs
YWNlZFN0cmluZy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgQ29udGV4dE1lbnVJ
dGVtIGl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnQ2hhbmdlQmFjaywgY29udGV4
dE1lbnVJdGVtVGFnQ2hhbmdlQmFjayhyZXBsYWNlZFN0cmluZykpOworICAgICAgICAgICAgICAg
ICAgICBhcHBlbmRJdGVtKGl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOworICAgICAgICAgICAg
ICAgICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCksIG1fY29udGV4dE1lbnUuZ2V0KCkp
OworICAgICAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgRnJhbWVMb2FkZXIqIGxvYWRlciA9IGZyYW1lLT5sb2FkZXIoKTsKKyAgICAgICAg
S1VSTCBsaW5rVVJMID0gbV9oaXRUZXN0UmVzdWx0LmFic29sdXRlTGlua1VSTCgpOworICAgICAg
ICBpZiAoIWxpbmtVUkwuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBpZiAobG9hZGVyLT5jYW5I
YW5kbGVSZXF1ZXN0KFJlc291cmNlUmVxdWVzdChsaW5rVVJMKSkpIHsKKyAgICAgICAgICAgICAg
ICBhcHBlbmRJdGVtKE9wZW5MaW5rSXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAg
ICAgICAgICAgYXBwZW5kSXRlbShPcGVuTGlua0luTmV3V2luZG93SXRlbSwgbV9jb250ZXh0TWVu
dS5nZXQoKSk7CisgICAgICAgICAgICAgICAgYXBwZW5kSXRlbShEb3dubG9hZEZpbGVJdGVtLCBt
X2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFwcGVuZEl0
ZW0oQ29weUxpbmtJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgICAgIGFwcGVu
ZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAgIH0K
KworICAgICAgICBpZiAobV9oaXRUZXN0UmVzdWx0LmlzU2VsZWN0ZWQoKSAmJiAhaW5QYXNzd29y
ZEZpZWxkICYmIHNlbGVjdGlvbkNvbnRhaW5zUG9zc2libGVXb3JkKGZyYW1lKSkgeworI2lmIFBM
QVRGT1JNKE1BQykKKyAgICAgICAgICAgIGFwcGVuZEl0ZW0oU2VhcmNoU3BvdGxpZ2h0SXRlbSwg
bV9jb250ZXh0TWVudS5nZXQoKSk7CisjZW5kaWYKKyNpZiAhUExBVEZPUk0oR1RLKQorICAgICAg
ICAgICAgYXBwZW5kSXRlbShTZWFyY2hXZWJJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAg
ICAgICAgICAgIGFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSwgbV9jb250ZXh0TWVudS5nZXQo
KSk7CisjZW5kaWYKKyAgICAgCisjaWYgUExBVEZPUk0oTUFDKQorICAgICAgICAgICAgYXBwZW5k
SXRlbShMb29rSW5EaWN0aW9uYXJ5SXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgICAg
ICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCksIG1fY29udGV4dE1lbnUuZ2V0KCkpOwor
I2VuZGlmCisgICAgICAgIH0KKworICAgICAgICBhcHBlbmRJdGVtKEN1dEl0ZW0sIG1fY29udGV4
dE1lbnUuZ2V0KCkpOworICAgICAgICBhcHBlbmRJdGVtKENvcHlJdGVtLCBtX2NvbnRleHRNZW51
LmdldCgpKTsKKyAgICAgICAgYXBwZW5kSXRlbShQYXN0ZUl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0
KCkpOworI2lmIFBMQVRGT1JNKEdUSykKKyAgICAgICAgYXBwZW5kSXRlbShEZWxldGVJdGVtLCBt
X2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgYXBwZW5kSXRlbSgqc2VwYXJhdG9ySXRlbSgp
LCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgYXBwZW5kSXRlbShTZWxlY3RBbGxJdGVt
LCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyNlbmRpZgorCisgICAgICAgIGlmICghaW5QYXNzd29y
ZEZpZWxkKSB7CisgICAgICAgICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCksIG1fY29u
dGV4dE1lbnUuZ2V0KCkpOworI2lmbmRlZiBCVUlMRElOR19PTl9USUdFUgorI2lmICFQTEFURk9S
TShHVEspCisgICAgICAgICAgICBDb250ZXh0TWVudUl0ZW0gU3BlbGxpbmdBbmRHcmFtbWFyTWVu
dUl0ZW0oU3VibWVudVR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1NwZWxsaW5nTWVudSwgCisgICAg
ICAgICAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnU3BlbGxpbmdNZW51KCkpOworICAgICAgICAg
ICAgY3JlYXRlQW5kQXBwZW5kU3BlbGxpbmdBbmRHcmFtbWFyU3ViTWVudShTcGVsbGluZ0FuZEdy
YW1tYXJNZW51SXRlbSk7CisgICAgICAgICAgICBhcHBlbmRJdGVtKFNwZWxsaW5nQW5kR3JhbW1h
ck1lbnVJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyNlbmRpZgorI2Vsc2UKKyAgICAgICAg
ICAgIENvbnRleHRNZW51SXRlbSBTcGVsbGluZ01lbnVJdGVtKFN1Ym1lbnVUeXBlLCBDb250ZXh0
TWVudUl0ZW1UYWdTcGVsbGluZ01lbnUsIAorICAgICAgICAgICAgICAgIGNvbnRleHRNZW51SXRl
bVRhZ1NwZWxsaW5nTWVudSgpKTsKKyAgICAgICAgICAgIGNyZWF0ZUFuZEFwcGVuZFNwZWxsaW5n
U3ViTWVudShTcGVsbGluZ01lbnVJdGVtKTsKKyAgICAgICAgICAgIGFwcGVuZEl0ZW0oU3BlbGxp
bmdNZW51SXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisjZW5kaWYKKyNpZiBQTEFURk9STShN
QUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19P
Tl9MRU9QQVJEKQorICAgICAgICAgICAgQ29udGV4dE1lbnVJdGVtIHN1YnN0aXR1dGlvbnNNZW51
SXRlbShTdWJtZW51VHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU3Vic3RpdHV0aW9uc01lbnUsIAor
ICAgICAgICAgICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ1N1YnN0aXR1dGlvbnNNZW51KCkpOwor
ICAgICAgICAgICAgY3JlYXRlQW5kQXBwZW5kU3Vic3RpdHV0aW9uc1N1Yk1lbnUoc3Vic3RpdHV0
aW9uc01lbnVJdGVtKTsKKyAgICAgICAgICAgIGFwcGVuZEl0ZW0oc3Vic3RpdHV0aW9uc01lbnVJ
dGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgICAgIENvbnRleHRNZW51SXRlbSB0
cmFuc2Zvcm1hdGlvbnNNZW51SXRlbShTdWJtZW51VHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnVHJh
bnNmb3JtYXRpb25zTWVudSwgCisgICAgICAgICAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnVHJh
bnNmb3JtYXRpb25zTWVudSgpKTsKKyAgICAgICAgICAgIGNyZWF0ZUFuZEFwcGVuZFRyYW5zZm9y
bWF0aW9uc1N1Yk1lbnUodHJhbnNmb3JtYXRpb25zTWVudUl0ZW0pOworICAgICAgICAgICAgYXBw
ZW5kSXRlbSh0cmFuc2Zvcm1hdGlvbnNNZW51SXRlbSwgbV9jb250ZXh0TWVudS5nZXQoKSk7Cisj
ZW5kaWYKKyNpZiBQTEFURk9STShHVEspCisgICAgICAgICAgICBib29sIHNob3VsZFNob3dGb250
TWVudSA9IGZyYW1lLT5lZGl0b3IoKS0+Y2FuRWRpdFJpY2hseSgpOworI2Vsc2UKKyAgICAgICAg
ICAgIGJvb2wgc2hvdWxkU2hvd0ZvbnRNZW51ID0gdHJ1ZTsKKyNlbmRpZgorICAgICAgICAgICAg
aWYgKHNob3VsZFNob3dGb250TWVudSkgeworICAgICAgICAgICAgICAgIENvbnRleHRNZW51SXRl
bSBGb250TWVudUl0ZW0oU3VibWVudVR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0ZvbnRNZW51LCAK
KyAgICAgICAgICAgICAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnRm9udE1lbnUoKSk7CisgICAg
ICAgICAgICAgICAgY3JlYXRlQW5kQXBwZW5kRm9udFN1Yk1lbnUoRm9udE1lbnVJdGVtKTsKKyAg
ICAgICAgICAgICAgICBhcHBlbmRJdGVtKEZvbnRNZW51SXRlbSwgbV9jb250ZXh0TWVudS5nZXQo
KSk7CisgICAgICAgICAgICB9CisjaWYgUExBVEZPUk0oTUFDKQorICAgICAgICAgICAgQ29udGV4
dE1lbnVJdGVtIFNwZWVjaE1lbnVJdGVtKFN1Ym1lbnVUeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdT
cGVlY2hNZW51LCBjb250ZXh0TWVudUl0ZW1UYWdTcGVlY2hNZW51KCkpOworICAgICAgICAgICAg
Y3JlYXRlQW5kQXBwZW5kU3BlZWNoU3ViTWVudShTcGVlY2hNZW51SXRlbSk7CisgICAgICAgICAg
ICBhcHBlbmRJdGVtKFNwZWVjaE1lbnVJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyNlbmRp
ZgorI2lmICFQTEFURk9STShHVEspCisgICAgICAgICAgICBDb250ZXh0TWVudUl0ZW0gV3JpdGlu
Z0RpcmVjdGlvbk1lbnVJdGVtKFN1Ym1lbnVUeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdXcml0aW5n
RGlyZWN0aW9uTWVudSwgCisgICAgICAgICAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnV3JpdGlu
Z0RpcmVjdGlvbk1lbnUoKSk7CisgICAgICAgICAgICBjcmVhdGVBbmRBcHBlbmRXcml0aW5nRGly
ZWN0aW9uU3ViTWVudShXcml0aW5nRGlyZWN0aW9uTWVudUl0ZW0pOworICAgICAgICAgICAgYXBw
ZW5kSXRlbShXcml0aW5nRGlyZWN0aW9uTWVudUl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOwor
ICAgICAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKFNldHRpbmdzKiBzZXR0aW5ncyA9IHBhZ2UtPnNldHRpbmdzKCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgYm9vbCBpbmNsdWRlVGV4dERpcmVjdGlvblN1Ym1lbnUgPSBzZXR0aW5n
cy0+dGV4dERpcmVjdGlvblN1Ym1lbnVJbmNsdXNpb25CZWhhdmlvcigpID09IFRleHREaXJlY3Rp
b25TdWJtZW51QWx3YXlzSW5jbHVkZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IChzZXR0
aW5ncy0+dGV4dERpcmVjdGlvblN1Ym1lbnVJbmNsdXNpb25CZWhhdmlvcigpID09IFRleHREaXJl
Y3Rpb25TdWJtZW51QXV0b21hdGljYWxseUluY2x1ZGVkICYmIGZyYW1lLT5lZGl0b3IoKS0+aGFz
QmlkaVNlbGVjdGlvbigpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGluY2x1ZGVUZXh0RGly
ZWN0aW9uU3VibWVudSkgeworICAgICAgICAgICAgICAgICAgICAgICAgQ29udGV4dE1lbnVJdGVt
IFRleHREaXJlY3Rpb25NZW51SXRlbShTdWJtZW51VHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnVGV4
dERpcmVjdGlvbk1lbnUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHRNZW51
SXRlbVRhZ1RleHREaXJlY3Rpb25NZW51KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgY3Jl
YXRlQW5kQXBwZW5kVGV4dERpcmVjdGlvblN1Yk1lbnUoVGV4dERpcmVjdGlvbk1lbnVJdGVtKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oVGV4dERpcmVjdGlvbk1lbnVJdGVt
LCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICB9CisgICAgfQorfQorCisj
aWYgRU5BQkxFKElOU1BFQ1RPUikKK3ZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjphZGRJbnNw
ZWN0RWxlbWVudEl0ZW0oKQoreworICAgIE5vZGUqIG5vZGUgPSBtX2hpdFRlc3RSZXN1bHQuaW5u
ZXJOb25TaGFyZWROb2RlKCk7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm47CisKKyAg
ICBGcmFtZSogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpOworICAgIGlmICghZnJh
bWUpCisgICAgICAgIHJldHVybjsKKworICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpOwor
ICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFwYWdlLT5pbnNwZWN0
b3JDb250cm9sbGVyKCkpCisgICAgICAgIHJldHVybjsKKworICAgIENvbnRleHRNZW51SXRlbSBJ
bnNwZWN0RWxlbWVudEl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnSW5zcGVjdEVs
ZW1lbnQsIGNvbnRleHRNZW51SXRlbVRhZ0luc3BlY3RFbGVtZW50KCkpOworICAgIGFwcGVuZEl0
ZW0oKnNlcGFyYXRvckl0ZW0oKSwgbV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgYXBwZW5kSXRl
bShJbnNwZWN0RWxlbWVudEl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOworfQorI2VuZGlmIC8v
IEVOQUJMRShJTlNQRUNUT1IpCisKK3ZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjpjaGVja09y
RW5hYmxlSWZOZWVkZWQoQ29udGV4dE1lbnVJdGVtJiBpdGVtKSBjb25zdAoreworICAgIGlmIChp
dGVtLnR5cGUoKSA9PSBTZXBhcmF0b3JUeXBlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
RnJhbWUqIGZyYW1lID0gbV9oaXRUZXN0UmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpLT5kb2N1
bWVudCgpLT5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAg
IC8vIEN1c3RvbSBpdGVtcyBhbHJlYWR5IGhhdmUgcHJvcGVyIGNoZWNrZWQgYW5kIGVuYWJsZWQg
dmFsdWVzLgorICAgIGlmIChDb250ZXh0TWVudUl0ZW1CYXNlQ3VzdG9tVGFnIDw9IGl0ZW0uYWN0
aW9uKCkgJiYgaXRlbS5hY3Rpb24oKSA8PSBDb250ZXh0TWVudUl0ZW1MYXN0Q3VzdG9tVGFnKQor
ICAgICAgICByZXR1cm47CisKKyAgICBib29sIHNob3VsZEVuYWJsZSA9IHRydWU7CisgICAgYm9v
bCBzaG91bGRDaGVjayA9IGZhbHNlOyAKKworICAgIHN3aXRjaCAoaXRlbS5hY3Rpb24oKSkgewor
ICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0NoZWNrU3BlbGxpbmc6CisgICAgICAgICAg
ICBzaG91bGRFbmFibGUgPSBmcmFtZS0+ZWRpdG9yKCktPmNhbkVkaXQoKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0RlZmF1bHREaXJlY3Rpb246
CisgICAgICAgICAgICBzaG91bGRDaGVjayA9IGZhbHNlOworICAgICAgICAgICAgc2hvdWxkRW5h
YmxlID0gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb250ZXh0TWVu
dUl0ZW1UYWdMZWZ0VG9SaWdodDoKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdSaWdo
dFRvTGVmdDogeworICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgICAgICAg
ICBSZWZQdHI8Q1NTU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+
Y3JlYXRlQ1NTU3R5bGVEZWNsYXJhdGlvbigpOworICAgICAgICAgICAgU3RyaW5nIGRpcmVjdGlv
biA9IGl0ZW0uYWN0aW9uKCkgPT0gQ29udGV4dE1lbnVJdGVtVGFnTGVmdFRvUmlnaHQgPyAibHRy
IiA6ICJydGwiOworICAgICAgICAgICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5RGly
ZWN0aW9uLCBkaXJlY3Rpb24sIGZhbHNlLCBlYyk7CisgICAgICAgICAgICBzaG91bGRDaGVjayA9
IGZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0aW9uSGFzU3R5bGUoc3R5bGUuZ2V0KCkpICE9IEZhbHNl
VHJpU3RhdGU7CisgICAgICAgICAgICBzaG91bGRFbmFibGUgPSB0cnVlOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdUZXh0RGly
ZWN0aW9uRGVmYXVsdDogeworICAgICAgICAgICAgRWRpdG9yOjpDb21tYW5kIGNvbW1hbmQgPSBm
cmFtZS0+ZWRpdG9yKCktPmNvbW1hbmQoIk1ha2VUZXh0V3JpdGluZ0RpcmVjdGlvbk5hdHVyYWwi
KTsKKyAgICAgICAgICAgIHNob3VsZENoZWNrID0gY29tbWFuZC5zdGF0ZSgpID09IFRydWVUcmlT
dGF0ZTsKKyAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGNvbW1hbmQuaXNFbmFibGVkKCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRl
bVRhZ1RleHREaXJlY3Rpb25MZWZ0VG9SaWdodDogeworICAgICAgICAgICAgRWRpdG9yOjpDb21t
YW5kIGNvbW1hbmQgPSBmcmFtZS0+ZWRpdG9yKCktPmNvbW1hbmQoIk1ha2VUZXh0V3JpdGluZ0Rp
cmVjdGlvbkxlZnRUb1JpZ2h0Iik7CisgICAgICAgICAgICBzaG91bGRDaGVjayA9IGNvbW1hbmQu
c3RhdGUoKSA9PSBUcnVlVHJpU3RhdGU7CisgICAgICAgICAgICBzaG91bGRFbmFibGUgPSBjb21t
YW5kLmlzRW5hYmxlZCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBDb250ZXh0TWVudUl0ZW1UYWdUZXh0RGlyZWN0aW9uUmlnaHRUb0xlZnQ6IHsKKyAgICAg
ICAgICAgIEVkaXRvcjo6Q29tbWFuZCBjb21tYW5kID0gZnJhbWUtPmVkaXRvcigpLT5jb21tYW5k
KCJNYWtlVGV4dFdyaXRpbmdEaXJlY3Rpb25SaWdodFRvTGVmdCIpOworICAgICAgICAgICAgc2hv
dWxkQ2hlY2sgPSBjb21tYW5kLnN0YXRlKCkgPT0gVHJ1ZVRyaVN0YXRlOworICAgICAgICAgICAg
c2hvdWxkRW5hYmxlID0gY29tbWFuZC5pc0VuYWJsZWQoKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQ29weToKKyAgICAgICAg
ICAgIHNob3VsZEVuYWJsZSA9IGZyYW1lLT5lZGl0b3IoKS0+Y2FuREhUTUxDb3B5KCkgfHwgZnJh
bWUtPmVkaXRvcigpLT5jYW5Db3B5KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBDb250ZXh0TWVudUl0ZW1UYWdDdXQ6CisgICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFt
ZS0+ZWRpdG9yKCktPmNhbkRIVE1MQ3V0KCkgfHwgZnJhbWUtPmVkaXRvcigpLT5jYW5DdXQoKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0lnbm9y
ZVNwZWxsaW5nOgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0xlYXJuU3BlbGxpbmc6
CisgICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+c2VsZWN0aW9uKCktPmlzUmFuZ2Uo
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1Bh
c3RlOgorICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gZnJhbWUtPmVkaXRvcigpLT5jYW5ESFRN
TFBhc3RlKCkgfHwgZnJhbWUtPmVkaXRvcigpLT5jYW5QYXN0ZSgpOworICAgICAgICAgICAgYnJl
YWs7CisjaWYgUExBVEZPUk0oR1RLKQorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0Rl
bGV0ZToKKyAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGZyYW1lLT5lZGl0b3IoKS0+Y2FuRGVs
ZXRlKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1U
YWdTZWxlY3RBbGw6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnSW5wdXRNZXRob2Rz
OgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1VuaWNvZGU6CisgICAgICAgICAgICBz
aG91bGRFbmFibGUgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICAgICAg
Y2FzZSBDb250ZXh0TWVudUl0ZW1UYWdVbmRlcmxpbmU6IHsKKyAgICAgICAgICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOworICAgICAgICAgICAgUmVmUHRyPENTU1N0eWxlRGVjbGFyYXRpb24+IHN0
eWxlID0gZnJhbWUtPmRvY3VtZW50KCktPmNyZWF0ZUNTU1N0eWxlRGVjbGFyYXRpb24oKTsKKyAg
ICAgICAgICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0
aW9uc0luRWZmZWN0LCAidW5kZXJsaW5lIiwgZmFsc2UsIGVjKTsKKyAgICAgICAgICAgIHNob3Vs
ZENoZWNrID0gZnJhbWUtPmVkaXRvcigpLT5zZWxlY3Rpb25IYXNTdHlsZShzdHlsZS5nZXQoKSkg
IT0gRmFsc2VUcmlTdGF0ZTsKKyAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGZyYW1lLT5lZGl0
b3IoKS0+Y2FuRWRpdFJpY2hseSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdMb29rVXBJbkRpY3Rpb25hcnk6CisgICAgICAg
ICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+c2VsZWN0aW9uKCktPmlzUmFuZ2UoKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0NoZWNrR3JhbW1h
cldpdGhTcGVsbGluZzoKKyNpZm5kZWYgQlVJTERJTkdfT05fVElHRVIKKyAgICAgICAgICAgIGlm
IChmcmFtZS0+ZWRpdG9yKCktPmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpKQorICAgICAgICAg
ICAgICAgIHNob3VsZENoZWNrID0gdHJ1ZTsKKyAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IHRy
dWU7CisjZW5kaWYKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbnRleHRNZW51
SXRlbVRhZ0l0YWxpYzogeworICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAg
ICAgICAgICBSZWZQdHI8Q1NTU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUgPSBmcmFtZS0+ZG9jdW1l
bnQoKS0+Y3JlYXRlQ1NTU3R5bGVEZWNsYXJhdGlvbigpOworICAgICAgICAgICAgc3R5bGUtPnNl
dFByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFN0eWxlLCAiaXRhbGljIiwgZmFsc2UsIGVjKTsKKyAg
ICAgICAgICAgIHNob3VsZENoZWNrID0gZnJhbWUtPmVkaXRvcigpLT5zZWxlY3Rpb25IYXNTdHls
ZShzdHlsZS5nZXQoKSkgIT0gRmFsc2VUcmlTdGF0ZTsKKyAgICAgICAgICAgIHNob3VsZEVuYWJs
ZSA9IGZyYW1lLT5lZGl0b3IoKS0+Y2FuRWRpdFJpY2hseSgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdCb2xkOiB7CisgICAg
ICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAgICAgIFJlZlB0cjxDU1NTdHls
ZURlY2xhcmF0aW9uPiBzdHlsZSA9IGZyYW1lLT5kb2N1bWVudCgpLT5jcmVhdGVDU1NTdHlsZURl
Y2xhcmF0aW9uKCk7CisgICAgICAgICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlG
b250V2VpZ2h0LCAiYm9sZCIsIGZhbHNlLCBlYyk7CisgICAgICAgICAgICBzaG91bGRDaGVjayA9
IGZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0aW9uSGFzU3R5bGUoc3R5bGUuZ2V0KCkpICE9IEZhbHNl
VHJpU3RhdGU7CisgICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+ZWRpdG9yKCktPmNh
bkVkaXRSaWNobHkoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNh
c2UgQ29udGV4dE1lbnVJdGVtVGFnT3V0bGluZToKKyAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9
IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVt
VGFnU2hvd1NwZWxsaW5nUGFuZWw6CisjaWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCisgICAgICAg
ICAgICBpZiAoZnJhbWUtPmVkaXRvcigpLT5zcGVsbGluZ1BhbmVsSXNTaG93aW5nKCkpCisgICAg
ICAgICAgICAgICAgaXRlbS5zZXRUaXRsZShjb250ZXh0TWVudUl0ZW1UYWdTaG93U3BlbGxpbmdQ
YW5lbChmYWxzZSkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGl0ZW0uc2V0
VGl0bGUoY29udGV4dE1lbnVJdGVtVGFnU2hvd1NwZWxsaW5nUGFuZWwodHJ1ZSkpOworI2VuZGlm
CisgICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+ZWRpdG9yKCktPmNhbkVkaXQoKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ05vR3Vl
c3Nlc0ZvdW5kOgorICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gZmFsc2U7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdDaGVja1NwZWxsaW5nV2hp
bGVUeXBpbmc6CisgICAgICAgICAgICBzaG91bGRDaGVjayA9IGZyYW1lLT5lZGl0b3IoKS0+aXND
b250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKTsKKyAgICAgICAgICAgIGJyZWFrOworI2lm
IFBMQVRGT1JNKE1BQykKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTdWJzdGl0dXRp
b25zTWVudToKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdUcmFuc2Zvcm1hdGlvbnNN
ZW51OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFn
U2hvd1N1YnN0aXR1dGlvbnM6CisjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFk
ZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpCisgICAgICAgICAgICBpZiAoZnJhbWUtPmVkaXRv
cigpLT5zdWJzdGl0dXRpb25zUGFuZWxJc1Nob3dpbmcoKSkKKyAgICAgICAgICAgICAgICBpdGVt
LnNldFRpdGxlKGNvbnRleHRNZW51SXRlbVRhZ1Nob3dTdWJzdGl0dXRpb25zKGZhbHNlKSk7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgaXRlbS5zZXRUaXRsZShjb250ZXh0TWVu
dUl0ZW1UYWdTaG93U3Vic3RpdHV0aW9ucyh0cnVlKSk7CisgICAgICAgICAgICBzaG91bGRFbmFi
bGUgPSBmcmFtZS0+ZWRpdG9yKCktPmNhbkVkaXQoKTsKKyNlbmRpZgorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnTWFrZVVwcGVyQ2FzZToKKyAgICAg
ICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdNYWtlTG93ZXJDYXNlOgorICAgICAgICBjYXNlIENv
bnRleHRNZW51SXRlbVRhZ0NhcGl0YWxpemU6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVt
VGFnQ2hhbmdlQmFjazoKKyAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGZyYW1lLT5lZGl0b3Io
KS0+Y2FuRWRpdCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29udGV4dE1l
bnVJdGVtVGFnQ29ycmVjdFNwZWxsaW5nQXV0b21hdGljYWxseToKKyNpZiAhZGVmaW5lZChCVUlM
RElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKKyAgICAgICAg
ICAgIHNob3VsZENoZWNrID0gZnJhbWUtPmVkaXRvcigpLT5pc0F1dG9tYXRpY1NwZWxsaW5nQ29y
cmVjdGlvbkVuYWJsZWQoKTsKKyNlbmRpZgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgQ29udGV4dE1lbnVJdGVtVGFnU21hcnRDb3B5UGFzdGU6CisjaWYgIWRlZmluZWQoQlVJTERJ
TkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpCisgICAgICAgICAg
ICBzaG91bGRDaGVjayA9IGZyYW1lLT5lZGl0b3IoKS0+c21hcnRJbnNlcnREZWxldGVFbmFibGVk
KCk7CisjZW5kaWYKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbnRleHRNZW51
SXRlbVRhZ1NtYXJ0UXVvdGVzOgorI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAh
ZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQorICAgICAgICAgICAgc2hvdWxkQ2hlY2sgPSBm
cmFtZS0+ZWRpdG9yKCktPmlzQXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb25FbmFibGVkKCk7Cisj
ZW5kaWYKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRh
Z1NtYXJ0RGFzaGVzOgorI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5l
ZChCVUlMRElOR19PTl9MRU9QQVJEKQorICAgICAgICAgICAgc2hvdWxkQ2hlY2sgPSBmcmFtZS0+
ZWRpdG9yKCktPmlzQXV0b21hdGljRGFzaFN1YnN0aXR1dGlvbkVuYWJsZWQoKTsKKyNlbmRpZgor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU21hcnRM
aW5rczoKKyNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJ
TkdfT05fTEVPUEFSRCkKKyAgICAgICAgICAgIHNob3VsZENoZWNrID0gZnJhbWUtPmVkaXRvcigp
LT5pc0F1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkKCk7CisjZW5kaWYKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1RleHRSZXBsYWNlbWVudDoK
KyNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05f
TEVPUEFSRCkKKyAgICAgICAgICAgIHNob3VsZENoZWNrID0gZnJhbWUtPmVkaXRvcigpLT5pc0F1
dG9tYXRpY1RleHRSZXBsYWNlbWVudEVuYWJsZWQoKTsKKyNlbmRpZgorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU3RvcFNwZWFraW5nOgorICAgICAg
ICAgICAgc2hvdWxkRW5hYmxlID0gY2xpZW50KCkgJiYgY2xpZW50KCktPmlzU3BlYWtpbmcoKTsK
KyAgICAgICAgICAgIGJyZWFrOworI2Vsc2UgLy8gUExBVEZPUk0oTUFDKSBlbmRzIGhlcmUKKyAg
ICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTdG9wU3BlYWtpbmc6CisgICAgICAgICAgICBi
cmVhazsKKyNlbmRpZgorI2lmIFBMQVRGT1JNKEdUSykKKyAgICAgICAgY2FzZSBDb250ZXh0TWVu
dUl0ZW1UYWdHb0JhY2s6CisgICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+cGFnZSgp
ICYmIGZyYW1lLT5wYWdlKCktPmJhY2tGb3J3YXJkKCktPmNhbkdvQmFja09yRm9yd2FyZCgtMSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdHb0Zv
cndhcmQ6CisgICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+cGFnZSgpICYmIGZyYW1l
LT5wYWdlKCktPmJhY2tGb3J3YXJkKCktPmNhbkdvQmFja09yRm9yd2FyZCgxKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1N0b3A6CisgICAgICAg
ICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPmlz
TG9hZGluZ0luQVBJU2Vuc2UoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENv
bnRleHRNZW51SXRlbVRhZ1JlbG9hZDoKKyAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9ICFmcmFt
ZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPmlzTG9hZGluZ0luQVBJU2Vuc2UoKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0ZvbnRNZW51
OgorICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gZnJhbWUtPmVkaXRvcigpLT5jYW5FZGl0Umlj
aGx5KCk7CisgICAgICAgICAgICBicmVhazsKKyNlbHNlCisgICAgICAgIGNhc2UgQ29udGV4dE1l
bnVJdGVtVGFnR29CYWNrOgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0dvRm9yd2Fy
ZDoKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTdG9wOgorICAgICAgICBjYXNlIENv
bnRleHRNZW51SXRlbVRhZ1JlbG9hZDoKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdG
b250TWVudToKKyNlbmRpZgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ05vQWN0aW9u
OgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5MaW5rSW5OZXdXaW5kb3c6Cisg
ICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnRG93bmxvYWRMaW5rVG9EaXNrOgorICAgICAg
ICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0NvcHlMaW5rVG9DbGlwYm9hcmQ6CisgICAgICAgIGNh
c2UgQ29udGV4dE1lbnVJdGVtVGFnT3BlbkltYWdlSW5OZXdXaW5kb3c6CisgICAgICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtVGFnRG93bmxvYWRJbWFnZVRvRGlzazoKKyAgICAgICAgY2FzZSBDb250
ZXh0TWVudUl0ZW1UYWdDb3B5SW1hZ2VUb0NsaXBib2FyZDoKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5NZWRpYUluTmV3V2luZG93OgorICAg
ICAgICAgICAgaWYgKG1faGl0VGVzdFJlc3VsdC5tZWRpYUlzVmlkZW8oKSkKKyAgICAgICAgICAg
ICAgICBpdGVtLnNldFRpdGxlKGNvbnRleHRNZW51SXRlbVRhZ09wZW5WaWRlb0luTmV3V2luZG93
KCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGl0ZW0uc2V0VGl0bGUoY29u
dGV4dE1lbnVJdGVtVGFnT3BlbkF1ZGlvSW5OZXdXaW5kb3coKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdDb3B5TWVkaWFMaW5rVG9DbGlwYm9h
cmQ6CisgICAgICAgICAgICBpZiAobV9oaXRUZXN0UmVzdWx0Lm1lZGlhSXNWaWRlbygpKQorICAg
ICAgICAgICAgICAgIGl0ZW0uc2V0VGl0bGUoY29udGV4dE1lbnVJdGVtVGFnQ29weVZpZGVvTGlu
a1RvQ2xpcGJvYXJkKCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGl0ZW0u
c2V0VGl0bGUoY29udGV4dE1lbnVJdGVtVGFnQ29weUF1ZGlvTGlua1RvQ2xpcGJvYXJkKCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnVG9nZ2xl
TWVkaWFDb250cm9sczoKKyAgICAgICAgICAgIHNob3VsZENoZWNrID0gbV9oaXRUZXN0UmVzdWx0
Lm1lZGlhQ29udHJvbHNFbmFibGVkKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBDb250ZXh0TWVudUl0ZW1UYWdUb2dnbGVNZWRpYUxvb3A6CisgICAgICAgICAgICBzaG91bGRD
aGVjayA9IG1faGl0VGVzdFJlc3VsdC5tZWRpYUxvb3BFbmFibGVkKCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdFbnRlclZpZGVvRnVsbHNjcmVl
bjoKKyAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IG1faGl0VGVzdFJlc3VsdC5tZWRpYVN1cHBv
cnRzRnVsbHNjcmVlbigpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29udGV4
dE1lbnVJdGVtVGFnT3BlbkZyYW1lSW5OZXdXaW5kb3c6CisgICAgICAgIGNhc2UgQ29udGV4dE1l
bnVJdGVtVGFnU3BlbGxpbmdHdWVzczoKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdP
dGhlcjoKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTZWFyY2hJblNwb3RsaWdodDoK
KyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTZWFyY2hXZWI6CisgICAgICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtVGFnT3BlbldpdGhEZWZhdWx0QXBwbGljYXRpb246CisgICAgICAgIGNh
c2UgQ29udGV4dE1lbnVJdGVtUERGQWN0dWFsU2l6ZToKKyAgICAgICAgY2FzZSBDb250ZXh0TWVu
dUl0ZW1QREZab29tSW46CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtUERGWm9vbU91dDoK
KyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1QREZBdXRvU2l6ZToKKyAgICAgICAgY2FzZSBD
b250ZXh0TWVudUl0ZW1QREZTaW5nbGVQYWdlOgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRl
bVBERkZhY2luZ1BhZ2VzOgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVBERkNvbnRpbnVv
dXM6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtUERGTmV4dFBhZ2U6CisgICAgICAgIGNh
c2UgQ29udGV4dE1lbnVJdGVtUERGUHJldmlvdXNQYWdlOgorICAgICAgICBjYXNlIENvbnRleHRN
ZW51SXRlbVRhZ09wZW5MaW5rOgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0lnbm9y
ZUdyYW1tYXI6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU3BlbGxpbmdNZW51Ogor
ICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1Nob3dGb250czoKKyAgICAgICAgY2FzZSBD
b250ZXh0TWVudUl0ZW1UYWdTdHlsZXM6CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFn
U2hvd0NvbG9yczoKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTcGVlY2hNZW51Ogor
ICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1N0YXJ0U3BlYWtpbmc6CisgICAgICAgIGNh
c2UgQ29udGV4dE1lbnVJdGVtVGFnV3JpdGluZ0RpcmVjdGlvbk1lbnU6CisgICAgICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtVGFnVGV4dERpcmVjdGlvbk1lbnU6CisgICAgICAgIGNhc2UgQ29udGV4
dE1lbnVJdGVtVGFnUERGU2luZ2xlUGFnZVNjcm9sbGluZzoKKyAgICAgICAgY2FzZSBDb250ZXh0
TWVudUl0ZW1UYWdQREZGYWNpbmdQYWdlc1Njcm9sbGluZzoKKyNpZiBFTkFCTEUoSU5TUEVDVE9S
KQorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0luc3BlY3RFbGVtZW50OgorI2VuZGlm
CisgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtQmFzZUN1c3RvbVRhZzoKKyAgICAgICAgY2Fz
ZSBDb250ZXh0TWVudUl0ZW1DdXN0b21UYWdOb0FjdGlvbjoKKyAgICAgICAgY2FzZSBDb250ZXh0
TWVudUl0ZW1MYXN0Q3VzdG9tVGFnOgorICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbUJhc2VB
cHBsaWNhdGlvblRhZzoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbnRleHRN
ZW51SXRlbVRhZ01lZGlhUGxheVBhdXNlOgorICAgICAgICAgICAgaWYgKG1faGl0VGVzdFJlc3Vs
dC5tZWRpYVBsYXlpbmcoKSkKKyAgICAgICAgICAgICAgICBpdGVtLnNldFRpdGxlKGNvbnRleHRN
ZW51SXRlbVRhZ01lZGlhUGF1c2UoKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgaXRlbS5zZXRUaXRsZShjb250ZXh0TWVudUl0ZW1UYWdNZWRpYVBsYXkoKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdNZWRpYU11dGU6Cisg
ICAgICAgICAgICBzaG91bGRFbmFibGUgPSBtX2hpdFRlc3RSZXN1bHQubWVkaWFIYXNBdWRpbygp
OworICAgICAgICAgICAgc2hvdWxkQ2hlY2sgPSBzaG91bGRFbmFibGUgJiYgIG1faGl0VGVzdFJl
c3VsdC5tZWRpYU11dGVkKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpdGVt
LnNldENoZWNrZWQoc2hvdWxkQ2hlY2spOworICAgIGl0ZW0uc2V0RW5hYmxlZChzaG91bGRFbmFi
bGUpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoQ09O
VEVYVF9NRU5VUykKSW5kZXg6IFdlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmgJKHJldmlz
aW9uIDczNDY5KQorKysgV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIENvbnRleHRNZW51Q29udHJvbGxl
cl9oCiAjZGVmaW5lIENvbnRleHRNZW51Q29udHJvbGxlcl9oCiAKKyNpbmNsdWRlICJIaXRUZXN0
UmVzdWx0LmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL093
blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CkBAIC00NSw3ICs0Niw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgQ29udGV4dE1lbnVDb250cm9sbGVyKFBhZ2UqLCBD
b250ZXh0TWVudUNsaWVudCopOwogICAgICAgICB+Q29udGV4dE1lbnVDb250cm9sbGVyKCk7CiAK
LSAgICAgICAgQ29udGV4dE1lbnVDbGllbnQqIGNsaWVudCgpIHsgcmV0dXJuIG1fY2xpZW50OyB9
CisgICAgICAgIENvbnRleHRNZW51Q2xpZW50KiBjbGllbnQoKSBjb25zdCB7IHJldHVybiBtX2Ns
aWVudDsgfQogCiAgICAgICAgIENvbnRleHRNZW51KiBjb250ZXh0TWVudSgpIGNvbnN0IHsgcmV0
dXJuIG1fY29udGV4dE1lbnUuZ2V0KCk7IH0KICAgICAgICAgdm9pZCBjbGVhckNvbnRleHRNZW51
KCk7CkBAIC01MywxNiArNTQsMzUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lk
IGhhbmRsZUNvbnRleHRNZW51RXZlbnQoRXZlbnQqKTsKICAgICAgICAgdm9pZCBzaG93Q29udGV4
dE1lbnUoRXZlbnQqLCBQYXNzUmVmUHRyPENvbnRleHRNZW51UHJvdmlkZXI+KTsKIAorICAgICAg
ICB2b2lkIHBvcHVsYXRlKCk7CiAgICAgICAgIHZvaWQgY29udGV4dE1lbnVJdGVtU2VsZWN0ZWQo
Q29udGV4dE1lbnVJdGVtKik7CisgICAgICAgIHZvaWQgYWRkSW5zcGVjdEVsZW1lbnRJdGVtKCk7
CisKKyAgICAgICAgdm9pZCBjaGVja09yRW5hYmxlSWZOZWVkZWQoQ29udGV4dE1lbnVJdGVtJikg
Y29uc3Q7CisKKyAgICAgICAgdm9pZCBzZXRIaXRUZXN0UmVzdWx0KGNvbnN0IEhpdFRlc3RSZXN1
bHQmIHJlc3VsdCkgeyBtX2hpdFRlc3RSZXN1bHQgPSByZXN1bHQ7IH0KKyAgICAgICAgY29uc3Qg
SGl0VGVzdFJlc3VsdCYgaGl0VGVzdFJlc3VsdCgpIHsgcmV0dXJuIG1faGl0VGVzdFJlc3VsdDsg
fQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgQ29udGV4dE1lbnUqIGNyZWF0ZUNvbnRleHRNZW51
KEV2ZW50Kik7CisgICAgICAgIFBhc3NPd25QdHI8Q29udGV4dE1lbnU+IGNyZWF0ZUNvbnRleHRN
ZW51KEV2ZW50Kik7CiAgICAgICAgIHZvaWQgc2hvd0NvbnRleHRNZW51KEV2ZW50Kik7CisgICAg
ICAgIAorICAgICAgICB2b2lkIGFwcGVuZEl0ZW0oQ29udGV4dE1lbnVJdGVtJiwgQ29udGV4dE1l
bnUqIHBhcmVudE1lbnUpOworCisgICAgICAgIHZvaWQgY3JlYXRlQW5kQXBwZW5kRm9udFN1Yk1l
bnUoQ29udGV4dE1lbnVJdGVtJik7CisgICAgICAgIHZvaWQgY3JlYXRlQW5kQXBwZW5kU3BlbGxp
bmdBbmRHcmFtbWFyU3ViTWVudShDb250ZXh0TWVudUl0ZW0mKTsKKyAgICAgICAgdm9pZCBjcmVh
dGVBbmRBcHBlbmRTcGVsbGluZ1N1Yk1lbnUoQ29udGV4dE1lbnVJdGVtJik7CisgICAgICAgIHZv
aWQgY3JlYXRlQW5kQXBwZW5kU3BlZWNoU3ViTWVudShDb250ZXh0TWVudUl0ZW0mICk7CisgICAg
ICAgIHZvaWQgY3JlYXRlQW5kQXBwZW5kV3JpdGluZ0RpcmVjdGlvblN1Yk1lbnUoQ29udGV4dE1l
bnVJdGVtJik7CisgICAgICAgIHZvaWQgY3JlYXRlQW5kQXBwZW5kVGV4dERpcmVjdGlvblN1Yk1l
bnUoQ29udGV4dE1lbnVJdGVtJik7CisgICAgICAgIHZvaWQgY3JlYXRlQW5kQXBwZW5kU3Vic3Rp
dHV0aW9uc1N1Yk1lbnUoQ29udGV4dE1lbnVJdGVtJik7CisgICAgICAgIHZvaWQgY3JlYXRlQW5k
QXBwZW5kVHJhbnNmb3JtYXRpb25zU3ViTWVudShDb250ZXh0TWVudUl0ZW0mKTsKIAogICAgICAg
ICBQYWdlKiBtX3BhZ2U7CiAgICAgICAgIENvbnRleHRNZW51Q2xpZW50KiBtX2NsaWVudDsKICAg
ICAgICAgT3duUHRyPENvbnRleHRNZW51PiBtX2NvbnRleHRNZW51OwogICAgICAgICBSZWZQdHI8
Q29udGV4dE1lbnVQcm92aWRlcj4gbV9tZW51UHJvdmlkZXI7CisgICAgICAgIEhpdFRlc3RSZXN1
bHQgbV9oaXRUZXN0UmVzdWx0OwogICAgIH07CiAKIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Q29udGV4dE1lbnUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vQ29udGV4dE1l
bnUuY3BwCShyZXZpc2lvbiA3MzQ2OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vQ29udGV4dE1lbnUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDg5MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAwOCBDaHJpc3RpYW4gRHl3YW4gPGNocmlzdGlhbkBpbWVuZGlvLmNvbT4KLSAqIENv
cHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJDb250ZXh0TWVudS5oIgotCi0jaWYgRU5BQkxFKENPTlRFWFRfTUVOVVMpCi0K
LSNpbmNsdWRlICJCYWNrRm9yd2FyZENvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJDb250ZXh0TWVu
dUNvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJDb250ZXh0TWVudUNsaWVudC5oIgotI2luY2x1ZGUg
IkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oIgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5Lmgi
Ci0jaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0j
aW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKLSNpbmNsdWRlICJFZGl0b3IuaCIKLSNpbmNsdWRl
ICJGcmFtZS5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9y
Q29udHJvbGxlci5oIgotI2luY2x1ZGUgIktVUkwuaCIKLSNpbmNsdWRlICJMb2NhbGl6ZWRTdHJp
bmdzLmgiCi0jaW5jbHVkZSAiTm9kZS5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJS
ZXNvdXJjZVJlcXVlc3QuaCIKLSNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCi0jaW5j
bHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKLSNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci11c2luZyBuYW1lc3Bh
Y2UgV1RGOwotdXNpbmcgbmFtZXNwYWNlIFVuaWNvZGU7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotQ29udGV4dE1lbnVDb250cm9sbGVyKiBDb250ZXh0TWVudTo6Y29udHJvbGxlcigpIGNvbnN0
Ci17Ci0gICAgaWYgKE5vZGUqIG5vZGUgPSBtX2hpdFRlc3RSZXN1bHQuaW5uZXJOb25TaGFyZWRO
b2RlKCkpCi0gICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLT5mcmFt
ZSgpKQotICAgICAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBwYWdlLT5jb250ZXh0TWVudUNvbnRyb2xsZXIoKTsKLSAgICByZXR1
cm4gMDsKLX0KLQotc3RhdGljIFBhc3NPd25QdHI8Q29udGV4dE1lbnVJdGVtPiBzZXBhcmF0b3JJ
dGVtKCkKLXsKLSAgICByZXR1cm4gbmV3IENvbnRleHRNZW51SXRlbShTZXBhcmF0b3JUeXBlLCBD
b250ZXh0TWVudUl0ZW1UYWdOb0FjdGlvbiwgU3RyaW5nKCkpOwotfQotCi1zdGF0aWMgdm9pZCBj
cmVhdGVBbmRBcHBlbmRGb250U3ViTWVudShjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIENv
bnRleHRNZW51SXRlbSYgZm9udE1lbnVJdGVtKQotewotICAgIENvbnRleHRNZW51IGZvbnRNZW51
KHJlc3VsdCk7Ci0KLSNpZiBQTEFURk9STShNQUMpCi0gICAgQ29udGV4dE1lbnVJdGVtIHNob3dG
b250cyhBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTaG93Rm9udHMsIGNvbnRleHRNZW51
SXRlbVRhZ1Nob3dGb250cygpKTsKLSNlbmRpZgotICAgIENvbnRleHRNZW51SXRlbSBib2xkKENo
ZWNrYWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0JvbGQsIGNvbnRleHRNZW51SXRl
bVRhZ0JvbGQoKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIGl0YWxpYyhDaGVja2FibGVBY3Rpb25U
eXBlLCBDb250ZXh0TWVudUl0ZW1UYWdJdGFsaWMsIGNvbnRleHRNZW51SXRlbVRhZ0l0YWxpYygp
KTsKLSAgICBDb250ZXh0TWVudUl0ZW0gdW5kZXJsaW5lKENoZWNrYWJsZUFjdGlvblR5cGUsIENv
bnRleHRNZW51SXRlbVRhZ1VuZGVybGluZSwgY29udGV4dE1lbnVJdGVtVGFnVW5kZXJsaW5lKCkp
OwotICAgIENvbnRleHRNZW51SXRlbSBvdXRsaW5lKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRl
bVRhZ091dGxpbmUsIGNvbnRleHRNZW51SXRlbVRhZ091dGxpbmUoKSk7Ci0jaWYgUExBVEZPUk0o
TUFDKQotICAgIENvbnRleHRNZW51SXRlbSBzdHlsZXMoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJ
dGVtVGFnU3R5bGVzLCBjb250ZXh0TWVudUl0ZW1UYWdTdHlsZXMoKSk7Ci0gICAgQ29udGV4dE1l
bnVJdGVtIHNob3dDb2xvcnMoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU2hvd0NvbG9y
cywgY29udGV4dE1lbnVJdGVtVGFnU2hvd0NvbG9ycygpKTsKLSNlbmRpZgotCi0jaWYgUExBVEZP
Uk0oTUFDKQotICAgIGZvbnRNZW51LmFwcGVuZEl0ZW0oc2hvd0ZvbnRzKTsKLSNlbmRpZgotICAg
IGZvbnRNZW51LmFwcGVuZEl0ZW0oYm9sZCk7Ci0gICAgZm9udE1lbnUuYXBwZW5kSXRlbShpdGFs
aWMpOwotICAgIGZvbnRNZW51LmFwcGVuZEl0ZW0odW5kZXJsaW5lKTsKLSAgICBmb250TWVudS5h
cHBlbmRJdGVtKG91dGxpbmUpOwotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBmb250TWVudS5hcHBl
bmRJdGVtKHN0eWxlcyk7Ci0gICAgZm9udE1lbnUuYXBwZW5kSXRlbSgqc2VwYXJhdG9ySXRlbSgp
KTsKLSAgICBmb250TWVudS5hcHBlbmRJdGVtKHNob3dDb2xvcnMpOwotI2VuZGlmCi0KLSAgICBm
b250TWVudUl0ZW0uc2V0U3ViTWVudSgmZm9udE1lbnUpOwotfQotCi0jaWYgIWRlZmluZWQoQlVJ
TERJTkdfT05fVElHRVIpCi0KLSNpZiAhUExBVEZPUk0oR1RLKQotCi1zdGF0aWMgdm9pZCBjcmVh
dGVBbmRBcHBlbmRTcGVsbGluZ0FuZEdyYW1tYXJTdWJNZW51KGNvbnN0IEhpdFRlc3RSZXN1bHQm
IHJlc3VsdCwgQ29udGV4dE1lbnVJdGVtJiBzcGVsbGluZ0FuZEdyYW1tYXJNZW51SXRlbSkKLXsK
LSAgICBDb250ZXh0TWVudSBzcGVsbGluZ0FuZEdyYW1tYXJNZW51KHJlc3VsdCk7Ci0KLSAgICBD
b250ZXh0TWVudUl0ZW0gc2hvd1NwZWxsaW5nUGFuZWwoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJ
dGVtVGFnU2hvd1NwZWxsaW5nUGFuZWwsIAotICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdTaG93
U3BlbGxpbmdQYW5lbCh0cnVlKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIGNoZWNrU3BlbGxpbmco
QWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnQ2hlY2tTcGVsbGluZywgCi0gICAgICAgIGNv
bnRleHRNZW51SXRlbVRhZ0NoZWNrU3BlbGxpbmcoKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIGNo
ZWNrQXNZb3VUeXBlKENoZWNrYWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0NoZWNr
U3BlbGxpbmdXaGlsZVR5cGluZywgCi0gICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ0NoZWNrU3Bl
bGxpbmdXaGlsZVR5cGluZygpKTsKLSAgICBDb250ZXh0TWVudUl0ZW0gZ3JhbW1hcldpdGhTcGVs
bGluZyhDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdDaGVja0dyYW1tYXJX
aXRoU3BlbGxpbmcsIAotICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdDaGVja0dyYW1tYXJXaXRo
U3BlbGxpbmcoKSk7Ci0jaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9M
RU9QQVJEKQotICAgIENvbnRleHRNZW51SXRlbSBjb3JyZWN0U3BlbGxpbmcoQ2hlY2thYmxlQWN0
aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnQ29ycmVjdFNwZWxsaW5nQXV0b21hdGljYWxseSwg
Ci0gICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ0NvcnJlY3RTcGVsbGluZ0F1dG9tYXRpY2FsbHko
KSk7Ci0jZW5kaWYKLQotICAgIHNwZWxsaW5nQW5kR3JhbW1hck1lbnUuYXBwZW5kSXRlbShzaG93
U3BlbGxpbmdQYW5lbCk7Ci0gICAgc3BlbGxpbmdBbmRHcmFtbWFyTWVudS5hcHBlbmRJdGVtKGNo
ZWNrU3BlbGxpbmcpOwotI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05f
TEVPUEFSRCkKLSAgICBzcGVsbGluZ0FuZEdyYW1tYXJNZW51LmFwcGVuZEl0ZW0oKnNlcGFyYXRv
ckl0ZW0oKSk7Ci0jZW5kaWYKLSAgICBzcGVsbGluZ0FuZEdyYW1tYXJNZW51LmFwcGVuZEl0ZW0o
Y2hlY2tBc1lvdVR5cGUpOwotICAgIHNwZWxsaW5nQW5kR3JhbW1hck1lbnUuYXBwZW5kSXRlbShn
cmFtbWFyV2l0aFNwZWxsaW5nKTsKLSNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxE
SU5HX09OX0xFT1BBUkQpCi0gICAgc3BlbGxpbmdBbmRHcmFtbWFyTWVudS5hcHBlbmRJdGVtKGNv
cnJlY3RTcGVsbGluZyk7Ci0jZW5kaWYKLQotICAgIHNwZWxsaW5nQW5kR3JhbW1hck1lbnVJdGVt
LnNldFN1Yk1lbnUoJnNwZWxsaW5nQW5kR3JhbW1hck1lbnUpOwotfQotCi0jZW5kaWYgLy8gIVBM
QVRGT1JNKEdUSykKLQotI2Vsc2UKLQotc3RhdGljIHZvaWQgY3JlYXRlQW5kQXBwZW5kU3BlbGxp
bmdTdWJNZW51KGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgQ29udGV4dE1lbnVJdGVtJiBz
cGVsbGluZ01lbnVJdGVtKQotewotICAgIENvbnRleHRNZW51IHNwZWxsaW5nTWVudShyZXN1bHQp
OwotCi0gICAgQ29udGV4dE1lbnVJdGVtIHNob3dTcGVsbGluZ1BhbmVsKEFjdGlvblR5cGUsIENv
bnRleHRNZW51SXRlbVRhZ1Nob3dTcGVsbGluZ1BhbmVsLCAKLSAgICAgICAgY29udGV4dE1lbnVJ
dGVtVGFnU2hvd1NwZWxsaW5nUGFuZWwodHJ1ZSkpOwotICAgIENvbnRleHRNZW51SXRlbSBjaGVj
a1NwZWxsaW5nKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0NoZWNrU3BlbGxpbmcsIAot
ICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdDaGVja1NwZWxsaW5nKCkpOwotICAgIENvbnRleHRN
ZW51SXRlbSBjaGVja0FzWW91VHlwZShDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0
ZW1UYWdDaGVja1NwZWxsaW5nV2hpbGVUeXBpbmcsIAotICAgICAgICBjb250ZXh0TWVudUl0ZW1U
YWdDaGVja1NwZWxsaW5nV2hpbGVUeXBpbmcoKSk7Ci0KLSAgICBzcGVsbGluZ01lbnUuYXBwZW5k
SXRlbShzaG93U3BlbGxpbmdQYW5lbCk7Ci0gICAgc3BlbGxpbmdNZW51LmFwcGVuZEl0ZW0oY2hl
Y2tTcGVsbGluZyk7Ci0gICAgc3BlbGxpbmdNZW51LmFwcGVuZEl0ZW0oY2hlY2tBc1lvdVR5cGUp
OwotCi0gICAgc3BlbGxpbmdNZW51SXRlbS5zZXRTdWJNZW51KCZzcGVsbGluZ01lbnUpOwotfQot
Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKE1BQykKLQotc3RhdGljIHZvaWQgY3JlYXRlQW5kQXBw
ZW5kU3BlZWNoU3ViTWVudShjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIENvbnRleHRNZW51
SXRlbSYgc3BlZWNoTWVudUl0ZW0pCi17Ci0gICAgQ29udGV4dE1lbnUgc3BlZWNoTWVudShyZXN1
bHQpOwotCi0gICAgQ29udGV4dE1lbnVJdGVtIHN0YXJ0KEFjdGlvblR5cGUsIENvbnRleHRNZW51
SXRlbVRhZ1N0YXJ0U3BlYWtpbmcsIGNvbnRleHRNZW51SXRlbVRhZ1N0YXJ0U3BlYWtpbmcoKSk7
Ci0gICAgQ29udGV4dE1lbnVJdGVtIHN0b3AoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFn
U3RvcFNwZWFraW5nLCBjb250ZXh0TWVudUl0ZW1UYWdTdG9wU3BlYWtpbmcoKSk7Ci0KLSAgICBz
cGVlY2hNZW51LmFwcGVuZEl0ZW0oc3RhcnQpOwotICAgIHNwZWVjaE1lbnUuYXBwZW5kSXRlbShz
dG9wKTsKLQotICAgIHNwZWVjaE1lbnVJdGVtLnNldFN1Yk1lbnUoJnNwZWVjaE1lbnUpOwotfQot
Ci0jZW5kaWYKLSAKLSNpZiAhUExBVEZPUk0oR1RLKQotCi1zdGF0aWMgdm9pZCBjcmVhdGVBbmRB
cHBlbmRXcml0aW5nRGlyZWN0aW9uU3ViTWVudShjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQs
IENvbnRleHRNZW51SXRlbSYgd3JpdGluZ0RpcmVjdGlvbk1lbnVJdGVtKQotewotICAgIENvbnRl
eHRNZW51IHdyaXRpbmdEaXJlY3Rpb25NZW51KHJlc3VsdCk7Ci0KLSAgICBDb250ZXh0TWVudUl0
ZW0gZGVmYXVsdEl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnRGVmYXVsdERpcmVj
dGlvbiwgCi0gICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ0RlZmF1bHREaXJlY3Rpb24oKSk7Ci0g
ICAgQ29udGV4dE1lbnVJdGVtIGx0cihDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0
ZW1UYWdMZWZ0VG9SaWdodCwgY29udGV4dE1lbnVJdGVtVGFnTGVmdFRvUmlnaHQoKSk7Ci0gICAg
Q29udGV4dE1lbnVJdGVtIHJ0bChDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1U
YWdSaWdodFRvTGVmdCwgY29udGV4dE1lbnVJdGVtVGFnUmlnaHRUb0xlZnQoKSk7Ci0KLSAgICB3
cml0aW5nRGlyZWN0aW9uTWVudS5hcHBlbmRJdGVtKGRlZmF1bHRJdGVtKTsKLSAgICB3cml0aW5n
RGlyZWN0aW9uTWVudS5hcHBlbmRJdGVtKGx0cik7Ci0gICAgd3JpdGluZ0RpcmVjdGlvbk1lbnUu
YXBwZW5kSXRlbShydGwpOwotCi0gICAgd3JpdGluZ0RpcmVjdGlvbk1lbnVJdGVtLnNldFN1Yk1l
bnUoJndyaXRpbmdEaXJlY3Rpb25NZW51KTsKLX0KLQotc3RhdGljIHZvaWQgY3JlYXRlQW5kQXBw
ZW5kVGV4dERpcmVjdGlvblN1Yk1lbnUoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBDb250
ZXh0TWVudUl0ZW0mIHRleHREaXJlY3Rpb25NZW51SXRlbSkKLXsKLSAgICBDb250ZXh0TWVudSB0
ZXh0RGlyZWN0aW9uTWVudShyZXN1bHQpOwotCi0gICAgQ29udGV4dE1lbnVJdGVtIGRlZmF1bHRJ
dGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1RleHREaXJlY3Rpb25EZWZhdWx0LCBj
b250ZXh0TWVudUl0ZW1UYWdEZWZhdWx0RGlyZWN0aW9uKCkpOwotICAgIENvbnRleHRNZW51SXRl
bSBsdHIoQ2hlY2thYmxlQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnVGV4dERpcmVjdGlv
bkxlZnRUb1JpZ2h0LCBjb250ZXh0TWVudUl0ZW1UYWdMZWZ0VG9SaWdodCgpKTsKLSAgICBDb250
ZXh0TWVudUl0ZW0gcnRsKENoZWNrYWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1Rl
eHREaXJlY3Rpb25SaWdodFRvTGVmdCwgY29udGV4dE1lbnVJdGVtVGFnUmlnaHRUb0xlZnQoKSk7
Ci0KLSAgICB0ZXh0RGlyZWN0aW9uTWVudS5hcHBlbmRJdGVtKGRlZmF1bHRJdGVtKTsKLSAgICB0
ZXh0RGlyZWN0aW9uTWVudS5hcHBlbmRJdGVtKGx0cik7Ci0gICAgdGV4dERpcmVjdGlvbk1lbnUu
YXBwZW5kSXRlbShydGwpOwotCi0gICAgdGV4dERpcmVjdGlvbk1lbnVJdGVtLnNldFN1Yk1lbnUo
JnRleHREaXJlY3Rpb25NZW51KTsKLX0KLQotI2VuZGlmCi0KLSNpZiBQTEFURk9STShNQUMpICYm
ICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9Q
QVJEKQotCi1zdGF0aWMgdm9pZCBjcmVhdGVBbmRBcHBlbmRTdWJzdGl0dXRpb25zU3ViTWVudShj
b25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIENvbnRleHRNZW51SXRlbSYgc3Vic3RpdHV0aW9u
c01lbnVJdGVtKQotewotICAgIENvbnRleHRNZW51IHN1YnN0aXR1dGlvbnNNZW51KHJlc3VsdCk7
Ci0KLSAgICBDb250ZXh0TWVudUl0ZW0gc2hvd1N1YnN0aXR1dGlvbnMoQWN0aW9uVHlwZSwgQ29u
dGV4dE1lbnVJdGVtVGFnU2hvd1N1YnN0aXR1dGlvbnMsIGNvbnRleHRNZW51SXRlbVRhZ1Nob3dT
dWJzdGl0dXRpb25zKHRydWUpKTsKLSAgICBDb250ZXh0TWVudUl0ZW0gc21hcnRDb3B5UGFzdGUo
Q2hlY2thYmxlQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU21hcnRDb3B5UGFzdGUsIGNv
bnRleHRNZW51SXRlbVRhZ1NtYXJ0Q29weVBhc3RlKCkpOwotICAgIENvbnRleHRNZW51SXRlbSBz
bWFydFF1b3RlcyhDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTbWFydFF1
b3RlcywgY29udGV4dE1lbnVJdGVtVGFnU21hcnRRdW90ZXMoKSk7Ci0gICAgQ29udGV4dE1lbnVJ
dGVtIHNtYXJ0RGFzaGVzKENoZWNrYWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1Nt
YXJ0RGFzaGVzLCBjb250ZXh0TWVudUl0ZW1UYWdTbWFydERhc2hlcygpKTsKLSAgICBDb250ZXh0
TWVudUl0ZW0gc21hcnRMaW5rcyhDaGVja2FibGVBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1U
YWdTbWFydExpbmtzLCBjb250ZXh0TWVudUl0ZW1UYWdTbWFydExpbmtzKCkpOwotICAgIENvbnRl
eHRNZW51SXRlbSB0ZXh0UmVwbGFjZW1lbnQoQ2hlY2thYmxlQWN0aW9uVHlwZSwgQ29udGV4dE1l
bnVJdGVtVGFnVGV4dFJlcGxhY2VtZW50LCBjb250ZXh0TWVudUl0ZW1UYWdUZXh0UmVwbGFjZW1l
bnQoKSk7Ci0KLSAgICBzdWJzdGl0dXRpb25zTWVudS5hcHBlbmRJdGVtKHNob3dTdWJzdGl0dXRp
b25zKTsKLSAgICBzdWJzdGl0dXRpb25zTWVudS5hcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCkp
OwotICAgIHN1YnN0aXR1dGlvbnNNZW51LmFwcGVuZEl0ZW0oc21hcnRDb3B5UGFzdGUpOwotICAg
IHN1YnN0aXR1dGlvbnNNZW51LmFwcGVuZEl0ZW0oc21hcnRRdW90ZXMpOwotICAgIHN1YnN0aXR1
dGlvbnNNZW51LmFwcGVuZEl0ZW0oc21hcnREYXNoZXMpOwotICAgIHN1YnN0aXR1dGlvbnNNZW51
LmFwcGVuZEl0ZW0oc21hcnRMaW5rcyk7Ci0gICAgc3Vic3RpdHV0aW9uc01lbnUuYXBwZW5kSXRl
bSh0ZXh0UmVwbGFjZW1lbnQpOwotCi0gICAgc3Vic3RpdHV0aW9uc01lbnVJdGVtLnNldFN1Yk1l
bnUoJnN1YnN0aXR1dGlvbnNNZW51KTsKLX0KLQotc3RhdGljIHZvaWQgY3JlYXRlQW5kQXBwZW5k
VHJhbnNmb3JtYXRpb25zU3ViTWVudShjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIENvbnRl
eHRNZW51SXRlbSYgdHJhbnNmb3JtYXRpb25zTWVudUl0ZW0pCi17Ci0gICAgQ29udGV4dE1lbnUg
dHJhbnNmb3JtYXRpb25zTWVudShyZXN1bHQpOwotCi0gICAgQ29udGV4dE1lbnVJdGVtIG1ha2VV
cHBlckNhc2UoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnTWFrZVVwcGVyQ2FzZSwgY29u
dGV4dE1lbnVJdGVtVGFnTWFrZVVwcGVyQ2FzZSgpKTsKLSAgICBDb250ZXh0TWVudUl0ZW0gbWFr
ZUxvd2VyQ2FzZShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdNYWtlTG93ZXJDYXNlLCBj
b250ZXh0TWVudUl0ZW1UYWdNYWtlTG93ZXJDYXNlKCkpOwotICAgIENvbnRleHRNZW51SXRlbSBj
YXBpdGFsaXplKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0NhcGl0YWxpemUsIGNvbnRl
eHRNZW51SXRlbVRhZ0NhcGl0YWxpemUoKSk7Ci0KLSAgICB0cmFuc2Zvcm1hdGlvbnNNZW51LmFw
cGVuZEl0ZW0obWFrZVVwcGVyQ2FzZSk7Ci0gICAgdHJhbnNmb3JtYXRpb25zTWVudS5hcHBlbmRJ
dGVtKG1ha2VMb3dlckNhc2UpOwotICAgIHRyYW5zZm9ybWF0aW9uc01lbnUuYXBwZW5kSXRlbShj
YXBpdGFsaXplKTsKLQotICAgIHRyYW5zZm9ybWF0aW9uc01lbnVJdGVtLnNldFN1Yk1lbnUoJnRy
YW5zZm9ybWF0aW9uc01lbnUpOwotfQotCi0jZW5kaWYKLQotc3RhdGljIGJvb2wgc2VsZWN0aW9u
Q29udGFpbnNQb3NzaWJsZVdvcmQoRnJhbWUqIGZyYW1lKQotewotICAgIC8vIEN1cnJlbnQgYWxn
b3JpdGhtOiBsb29rIGZvciBhIGNoYXJhY3RlciB0aGF0J3Mgbm90IGp1c3QgYSBzZXBhcmF0b3Iu
Ci0gICAgZm9yIChUZXh0SXRlcmF0b3IgaXQoZnJhbWUtPnNlbGVjdGlvbigpLT50b05vcm1hbGl6
ZWRSYW5nZSgpLmdldCgpKTsgIWl0LmF0RW5kKCk7IGl0LmFkdmFuY2UoKSkgewotICAgICAgICBp
bnQgbGVuZ3RoID0gaXQubGVuZ3RoKCk7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJz
ID0gaXQuY2hhcmFjdGVycygpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsg
KytpKQotICAgICAgICAgICAgaWYgKCEoY2F0ZWdvcnkoY2hhcmFjdGVyc1tpXSkgJiAoU2VwYXJh
dG9yX1NwYWNlIHwgU2VwYXJhdG9yX0xpbmUgfCBTZXBhcmF0b3JfUGFyYWdyYXBoKSkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
dm9pZCBDb250ZXh0TWVudTo6cG9wdWxhdGUoKQotewotICAgIENvbnRleHRNZW51SXRlbSBPcGVu
TGlua0l0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnT3BlbkxpbmssIGNvbnRleHRN
ZW51SXRlbVRhZ09wZW5MaW5rKCkpOwotICAgIENvbnRleHRNZW51SXRlbSBPcGVuTGlua0luTmV3
V2luZG93SXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdPcGVuTGlua0luTmV3V2lu
ZG93LCAKLSAgICAgICAgY29udGV4dE1lbnVJdGVtVGFnT3BlbkxpbmtJbk5ld1dpbmRvdygpKTsK
LSAgICBDb250ZXh0TWVudUl0ZW0gRG93bmxvYWRGaWxlSXRlbShBY3Rpb25UeXBlLCBDb250ZXh0
TWVudUl0ZW1UYWdEb3dubG9hZExpbmtUb0Rpc2ssIAotICAgICAgICBjb250ZXh0TWVudUl0ZW1U
YWdEb3dubG9hZExpbmtUb0Rpc2soKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIENvcHlMaW5rSXRl
bShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdDb3B5TGlua1RvQ2xpcGJvYXJkLCAKLSAg
ICAgICAgY29udGV4dE1lbnVJdGVtVGFnQ29weUxpbmtUb0NsaXBib2FyZCgpKTsKLSAgICBDb250
ZXh0TWVudUl0ZW0gT3BlbkltYWdlSW5OZXdXaW5kb3dJdGVtKEFjdGlvblR5cGUsIENvbnRleHRN
ZW51SXRlbVRhZ09wZW5JbWFnZUluTmV3V2luZG93LCAKLSAgICAgICAgY29udGV4dE1lbnVJdGVt
VGFnT3BlbkltYWdlSW5OZXdXaW5kb3coKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIERvd25sb2Fk
SW1hZ2VJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0Rvd25sb2FkSW1hZ2VUb0Rp
c2ssIAotICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdEb3dubG9hZEltYWdlVG9EaXNrKCkpOwot
ICAgIENvbnRleHRNZW51SXRlbSBDb3B5SW1hZ2VJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51
SXRlbVRhZ0NvcHlJbWFnZVRvQ2xpcGJvYXJkLCAKLSAgICAgICAgY29udGV4dE1lbnVJdGVtVGFn
Q29weUltYWdlVG9DbGlwYm9hcmQoKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIE9wZW5NZWRpYUlu
TmV3V2luZG93SXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdPcGVuTWVkaWFJbk5l
d1dpbmRvdywgU3RyaW5nKCkpOwotICAgIENvbnRleHRNZW51SXRlbSBDb3B5TWVkaWFMaW5rSXRl
bShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdDb3B5TWVkaWFMaW5rVG9DbGlwYm9hcmQs
IAotICAgICAgICBTdHJpbmcoKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIE1lZGlhUGxheVBhdXNl
KEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ01lZGlhUGxheVBhdXNlLCAKLSAgICAgICAg
Y29udGV4dE1lbnVJdGVtVGFnTWVkaWFQbGF5KCkpOwotICAgIENvbnRleHRNZW51SXRlbSBNZWRp
YU11dGUoQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnTWVkaWFNdXRlLCAKLSAgICAgICAg
Y29udGV4dE1lbnVJdGVtVGFnTWVkaWFNdXRlKCkpOwotICAgIENvbnRleHRNZW51SXRlbSBUb2dn
bGVNZWRpYUNvbnRyb2xzKENoZWNrYWJsZUFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ1Rv
Z2dsZU1lZGlhQ29udHJvbHMsIAotICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdUb2dnbGVNZWRp
YUNvbnRyb2xzKCkpOwotICAgIENvbnRleHRNZW51SXRlbSBUb2dnbGVNZWRpYUxvb3AoQ2hlY2th
YmxlQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnVG9nZ2xlTWVkaWFMb29wLCAKLSAgICAg
ICAgY29udGV4dE1lbnVJdGVtVGFnVG9nZ2xlTWVkaWFMb29wKCkpOwotICAgIENvbnRleHRNZW51
SXRlbSBFbnRlclZpZGVvRnVsbHNjcmVlbihBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdF
bnRlclZpZGVvRnVsbHNjcmVlbiwgCi0gICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ0VudGVyVmlk
ZW9GdWxsc2NyZWVuKCkpOwotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBDb250ZXh0TWVudUl0ZW0g
U2VhcmNoU3BvdGxpZ2h0SXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTZWFyY2hJ
blNwb3RsaWdodCwgCi0gICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ1NlYXJjaEluU3BvdGxpZ2h0
KCkpOwotICAgIENvbnRleHRNZW51SXRlbSBMb29rSW5EaWN0aW9uYXJ5SXRlbShBY3Rpb25UeXBl
LCBDb250ZXh0TWVudUl0ZW1UYWdMb29rVXBJbkRpY3Rpb25hcnksIAotICAgICAgICBjb250ZXh0
TWVudUl0ZW1UYWdMb29rVXBJbkRpY3Rpb25hcnkoKSk7Ci0jZW5kaWYKLSNpZiAhUExBVEZPUk0o
R1RLKQotICAgIENvbnRleHRNZW51SXRlbSBTZWFyY2hXZWJJdGVtKEFjdGlvblR5cGUsIENvbnRl
eHRNZW51SXRlbVRhZ1NlYXJjaFdlYiwgY29udGV4dE1lbnVJdGVtVGFnU2VhcmNoV2ViKCkpOwot
I2VuZGlmCi0gICAgQ29udGV4dE1lbnVJdGVtIENvcHlJdGVtKEFjdGlvblR5cGUsIENvbnRleHRN
ZW51SXRlbVRhZ0NvcHksIGNvbnRleHRNZW51SXRlbVRhZ0NvcHkoKSk7Ci0gICAgQ29udGV4dE1l
bnVJdGVtIEJhY2tJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51SXRlbVRhZ0dvQmFjaywgY29u
dGV4dE1lbnVJdGVtVGFnR29CYWNrKCkpOwotICAgIENvbnRleHRNZW51SXRlbSBGb3J3YXJkSXRl
bShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdHb0ZvcndhcmQsICBjb250ZXh0TWVudUl0
ZW1UYWdHb0ZvcndhcmQoKSk7Ci0gICAgQ29udGV4dE1lbnVJdGVtIFN0b3BJdGVtKEFjdGlvblR5
cGUsIENvbnRleHRNZW51SXRlbVRhZ1N0b3AsIGNvbnRleHRNZW51SXRlbVRhZ1N0b3AoKSk7Ci0g
ICAgQ29udGV4dE1lbnVJdGVtIFJlbG9hZEl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVt
VGFnUmVsb2FkLCBjb250ZXh0TWVudUl0ZW1UYWdSZWxvYWQoKSk7Ci0gICAgQ29udGV4dE1lbnVJ
dGVtIE9wZW5GcmFtZUl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnT3BlbkZyYW1l
SW5OZXdXaW5kb3csIAotICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdPcGVuRnJhbWVJbk5ld1dp
bmRvdygpKTsKLSAgICBDb250ZXh0TWVudUl0ZW0gTm9HdWVzc2VzSXRlbShBY3Rpb25UeXBlLCBD
b250ZXh0TWVudUl0ZW1UYWdOb0d1ZXNzZXNGb3VuZCwgCi0gICAgICAgIGNvbnRleHRNZW51SXRl
bVRhZ05vR3Vlc3Nlc0ZvdW5kKCkpOwotICAgIENvbnRleHRNZW51SXRlbSBJZ25vcmVTcGVsbGlu
Z0l0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnSWdub3JlU3BlbGxpbmcsIAotICAg
ICAgICBjb250ZXh0TWVudUl0ZW1UYWdJZ25vcmVTcGVsbGluZygpKTsKLSAgICBDb250ZXh0TWVu
dUl0ZW0gTGVhcm5TcGVsbGluZ0l0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnTGVh
cm5TcGVsbGluZywgCi0gICAgICAgIGNvbnRleHRNZW51SXRlbVRhZ0xlYXJuU3BlbGxpbmcoKSk7
Ci0gICAgQ29udGV4dE1lbnVJdGVtIElnbm9yZUdyYW1tYXJJdGVtKEFjdGlvblR5cGUsIENvbnRl
eHRNZW51SXRlbVRhZ0lnbm9yZUdyYW1tYXIsIAotICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdJ
Z25vcmVHcmFtbWFyKCkpOwotICAgIENvbnRleHRNZW51SXRlbSBDdXRJdGVtKEFjdGlvblR5cGUs
IENvbnRleHRNZW51SXRlbVRhZ0N1dCwgY29udGV4dE1lbnVJdGVtVGFnQ3V0KCkpOwotICAgIENv
bnRleHRNZW51SXRlbSBQYXN0ZUl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnUGFz
dGUsIGNvbnRleHRNZW51SXRlbVRhZ1Bhc3RlKCkpOwotI2lmIFBMQVRGT1JNKEdUSykKLSAgICBD
b250ZXh0TWVudUl0ZW0gRGVsZXRlSXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdE
ZWxldGUsIGNvbnRleHRNZW51SXRlbVRhZ0RlbGV0ZSgpKTsKLSAgICBDb250ZXh0TWVudUl0ZW0g
U2VsZWN0QWxsSXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTZWxlY3RBbGwsIGNv
bnRleHRNZW51SXRlbVRhZ1NlbGVjdEFsbCgpKTsKLSNlbmRpZgotICAgIAotICAgIEhpdFRlc3RS
ZXN1bHQgcmVzdWx0ID0gaGl0VGVzdFJlc3VsdCgpOwotICAgIAotICAgIE5vZGUqIG5vZGUgPSBt
X2hpdFRlc3RSZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCk7Ci0gICAgaWYgKCFub2RlKQotICAg
ICAgICByZXR1cm47Ci0jaWYgUExBVEZPUk0oR1RLKQotICAgIGlmICghcmVzdWx0LmlzQ29udGVu
dEVkaXRhYmxlKCkgJiYgKG5vZGUtPmlzRWxlbWVudE5vZGUoKSAmJiBzdGF0aWNfY2FzdDxFbGVt
ZW50Kj4obm9kZSktPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpKQotICAgICAgICByZXR1cm47Ci0j
ZW5kaWYKLSAgICBGcmFtZSogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpOwotICAg
IGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghcmVzdWx0LmlzQ29udGVu
dEVkaXRhYmxlKCkpIHsKLSAgICAgICAgRnJhbWVMb2FkZXIqIGxvYWRlciA9IGZyYW1lLT5sb2Fk
ZXIoKTsKLSAgICAgICAgS1VSTCBsaW5rVVJMID0gcmVzdWx0LmFic29sdXRlTGlua1VSTCgpOwot
ICAgICAgICBpZiAoIWxpbmtVUkwuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBpZiAobG9hZGVy
LT5jYW5IYW5kbGVSZXF1ZXN0KFJlc291cmNlUmVxdWVzdChsaW5rVVJMKSkpIHsKLSAgICAgICAg
ICAgICAgICBhcHBlbmRJdGVtKE9wZW5MaW5rSXRlbSk7Ci0gICAgICAgICAgICAgICAgYXBwZW5k
SXRlbShPcGVuTGlua0luTmV3V2luZG93SXRlbSk7Ci0gICAgICAgICAgICAgICAgYXBwZW5kSXRl
bShEb3dubG9hZEZpbGVJdGVtKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGFwcGVuZEl0
ZW0oQ29weUxpbmtJdGVtKTsKLSAgICAgICAgfQotCi0gICAgICAgIEtVUkwgaW1hZ2VVUkwgPSBy
ZXN1bHQuYWJzb2x1dGVJbWFnZVVSTCgpOwotICAgICAgICBpZiAoIWltYWdlVVJMLmlzRW1wdHko
KSkgewotICAgICAgICAgICAgaWYgKCFsaW5rVVJMLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAg
ICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCkpOwotCi0gICAgICAgICAgICBhcHBlbmRJdGVt
KE9wZW5JbWFnZUluTmV3V2luZG93SXRlbSk7Ci0gICAgICAgICAgICBhcHBlbmRJdGVtKERvd25s
b2FkSW1hZ2VJdGVtKTsKLSAgICAgICAgICAgIGlmIChpbWFnZVVSTC5pc0xvY2FsRmlsZSgpIHx8
IG1faGl0VGVzdFJlc3VsdC5pbWFnZSgpKQotICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oQ29w
eUltYWdlSXRlbSk7Ci0gICAgICAgIH0KLQotICAgICAgICBLVVJMIG1lZGlhVVJMID0gcmVzdWx0
LmFic29sdXRlTWVkaWFVUkwoKTsKLSAgICAgICAgaWYgKCFtZWRpYVVSTC5pc0VtcHR5KCkpIHsK
LSAgICAgICAgICAgIGlmICghbGlua1VSTC5pc0VtcHR5KCkgfHwgIWltYWdlVVJMLmlzRW1wdHko
KSkKLSAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCkpOwotCi0gICAg
ICAgICAgICBhcHBlbmRJdGVtKE1lZGlhUGxheVBhdXNlKTsKLSAgICAgICAgICAgIGFwcGVuZEl0
ZW0oTWVkaWFNdXRlKTsKLSAgICAgICAgICAgIGFwcGVuZEl0ZW0oVG9nZ2xlTWVkaWFDb250cm9s
cyk7Ci0gICAgICAgICAgICBhcHBlbmRJdGVtKFRvZ2dsZU1lZGlhTG9vcCk7Ci0gICAgICAgICAg
ICBhcHBlbmRJdGVtKEVudGVyVmlkZW9GdWxsc2NyZWVuKTsKLQotICAgICAgICAgICAgYXBwZW5k
SXRlbSgqc2VwYXJhdG9ySXRlbSgpKTsKLSAgICAgICAgICAgIGFwcGVuZEl0ZW0oQ29weU1lZGlh
TGlua0l0ZW0pOwotICAgICAgICAgICAgYXBwZW5kSXRlbShPcGVuTWVkaWFJbk5ld1dpbmRvd0l0
ZW0pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGltYWdlVVJMLmlzRW1wdHkoKSAmJiBsaW5r
VVJMLmlzRW1wdHkoKSAmJiBtZWRpYVVSTC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGlmIChy
ZXN1bHQuaXNTZWxlY3RlZCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGlvbkNvbnRh
aW5zUG9zc2libGVXb3JkKGZyYW1lKSkgewotI2lmIFBMQVRGT1JNKE1BQykKLSAgICAgICAgICAg
ICAgICAgICAgYXBwZW5kSXRlbShTZWFyY2hTcG90bGlnaHRJdGVtKTsKLSNlbmRpZgotI2lmICFQ
TEFURk9STShHVEspCi0gICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oU2VhcmNoV2ViSXRl
bSk7Ci0gICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSk7Ci0j
ZW5kaWYKLSNpZiBQTEFURk9STShNQUMpCi0gICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0o
TG9va0luRGljdGlvbmFyeUl0ZW0pOwotICAgICAgICAgICAgICAgICAgICBhcHBlbmRJdGVtKCpz
ZXBhcmF0b3JJdGVtKCkpOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGFwcGVuZEl0ZW0oQ29weUl0ZW0pOwotI2lmIFBMQVRGT1JNKE1BQykKLSAgICAgICAgICAg
ICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCkpOwotICAgICAgICAgICAgICAgIENvbnRl
eHRNZW51SXRlbSBTcGVlY2hNZW51SXRlbShTdWJtZW51VHlwZSwgQ29udGV4dE1lbnVJdGVtVGFn
U3BlZWNoTWVudSwgY29udGV4dE1lbnVJdGVtVGFnU3BlZWNoTWVudSgpKTsKLSAgICAgICAgICAg
ICAgICBjcmVhdGVBbmRBcHBlbmRTcGVlY2hTdWJNZW51KG1faGl0VGVzdFJlc3VsdCwgU3BlZWNo
TWVudUl0ZW0pOwotICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oU3BlZWNoTWVudUl0ZW0pOwot
I2VuZGlmICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgfSBlbHNlIHsKLSNpZiBFTkFCTEUo
SU5TUEVDVE9SKQotICAgICAgICAgICAgICAgIGlmICghKGZyYW1lLT5wYWdlKCkgJiYgZnJhbWUt
PnBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5oYXNJbnNwZWN0b3JGcm9udGVuZENsaWVu
dCgpKSkgewotI2VuZGlmCi0gICAgICAgICAgICAgICAgaWYgKGZyYW1lLT5wYWdlKCkgJiYgZnJh
bWUtPnBhZ2UoKS0+YmFja0ZvcndhcmQoKS0+Y2FuR29CYWNrT3JGb3J3YXJkKC0xKSkKLSAgICAg
ICAgICAgICAgICAgICAgYXBwZW5kSXRlbShCYWNrSXRlbSk7Ci0KLSAgICAgICAgICAgICAgICBp
ZiAoZnJhbWUtPnBhZ2UoKSAmJiBmcmFtZS0+cGFnZSgpLT5iYWNrRm9yd2FyZCgpLT5jYW5Hb0Jh
Y2tPckZvcndhcmQoMSkpCi0gICAgICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oRm9yd2FyZEl0
ZW0pOwotCi0gICAgICAgICAgICAgICAgLy8gdXNlIGlzTG9hZGluZ0luQVBJU2Vuc2UgcmF0aGVy
IHRoYW4gaXNMb2FkaW5nIGJlY2F1c2UgU3RvcC9SZWxvYWQgYXJlCi0gICAgICAgICAgICAgICAg
Ly8gaW50ZW5kZWQgdG8gbWF0Y2ggV2ViS2l0J3MgQVBJLCBub3QgV2ViQ29yZSdzIGludGVybmFs
IG5vdGlvbiBvZiBsb2FkaW5nIHN0YXR1cwotICAgICAgICAgICAgICAgIGlmIChsb2FkZXItPmRv
Y3VtZW50TG9hZGVyKCktPmlzTG9hZGluZ0luQVBJU2Vuc2UoKSkKLSAgICAgICAgICAgICAgICAg
ICAgYXBwZW5kSXRlbShTdG9wSXRlbSk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgICAgICBhcHBlbmRJdGVtKFJlbG9hZEl0ZW0pOwotI2lmIEVOQUJMRShJTlNQRUNUT1Ip
Ci0gICAgICAgICAgICAgICAgfQotI2VuZGlmCi0KLSAgICAgICAgICAgICAgICBpZiAoZnJhbWUt
PnBhZ2UoKSAmJiBmcmFtZSAhPSBmcmFtZS0+cGFnZSgpLT5tYWluRnJhbWUoKSkKLSAgICAgICAg
ICAgICAgICAgICAgYXBwZW5kSXRlbShPcGVuRnJhbWVJdGVtKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0gZWxzZSB7IC8vIE1ha2UgYW4gZWRpdGluZyBjb250ZXh0IG1lbnUKLSAg
ICAgICAgU2VsZWN0aW9uQ29udHJvbGxlciogc2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigp
OwotICAgICAgICBib29sIGluUGFzc3dvcmRGaWVsZCA9IHNlbGVjdGlvbi0+aXNJblBhc3N3b3Jk
RmllbGQoKTsKLSAgICAgICAgYm9vbCBzcGVsbENoZWNraW5nRW5hYmxlZCA9IGZyYW1lLT5lZGl0
b3IoKS0+aXNTcGVsbENoZWNraW5nRW5hYmxlZEZvcihub2RlKTsKLSAgICAgICAgCi0gICAgICAg
IGlmICghaW5QYXNzd29yZEZpZWxkICYmIHNwZWxsQ2hlY2tpbmdFbmFibGVkKSB7Ci0gICAgICAg
ICAgICAvLyBDb25zaWRlciBhZGRpbmcgc3BlbGxpbmctcmVsYXRlZCBvciBncmFtbWFyLXJlbGF0
ZWQgY29udGV4dCBtZW51IGl0ZW1zIChuZXZlciBib3RoLCBzaW5jZSBhIHNpbmdsZSBzZWxlY3Rl
ZCByYW5nZQotICAgICAgICAgICAgLy8gaXMgbmV2ZXIgY29uc2lkZXJlZCBhIG1pc3NwZWxsaW5n
IGFuZCBiYWQgZ3JhbW1hciBhdCB0aGUgc2FtZSB0aW1lKQotICAgICAgICAgICAgYm9vbCBtaXNz
cGVsbGluZzsKLSAgICAgICAgICAgIGJvb2wgYmFkR3JhbW1hcjsKLSAgICAgICAgICAgIFZlY3Rv
cjxTdHJpbmc+IGd1ZXNzZXMgPSBmcmFtZS0+ZWRpdG9yKCktPmd1ZXNzZXNGb3JNaXNzcGVsbGVk
T3JVbmdyYW1tYXRpY2FsU2VsZWN0aW9uKG1pc3NwZWxsaW5nLCBiYWRHcmFtbWFyKTsKLSAgICAg
ICAgICAgIGlmIChtaXNzcGVsbGluZyB8fCBiYWRHcmFtbWFyKSB7Ci0gICAgICAgICAgICAgICAg
c2l6ZV90IHNpemUgPSBndWVzc2VzLnNpemUoKTsKLSAgICAgICAgICAgICAgICBpZiAoc2l6ZSA9
PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlJ3MgYmFkIGdyYW1tYXIgYnV0
IG5vIHN1Z2dlc3Rpb25zIChlLmcuLCByZXBlYXRlZCB3b3JkKSwganVzdCBsZWF2ZSBvZmYgdGhl
IHN1Z2dlc3Rpb25zCi0gICAgICAgICAgICAgICAgICAgIC8vIGxpc3QgYW5kIHRyYWlsaW5nIHNl
cGFyYXRvciByYXRoZXIgdGhhbiBhZGRpbmcgYSAiTm8gR3Vlc3NlcyBGb3VuZCIgaXRlbSAobWF0
Y2hlcyBBcHBLaXQpCi0gICAgICAgICAgICAgICAgICAgIGlmIChtaXNzcGVsbGluZykgewotICAg
ICAgICAgICAgICAgICAgICAgICAgYXBwZW5kSXRlbShOb0d1ZXNzZXNJdGVtKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBTdHJpbmcgJmd1ZXNzID0gZ3Vlc3Nlc1tpXTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICghZ3Vlc3MuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ29udGV4dE1lbnVJdGVtIGl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFn
U3BlbGxpbmdHdWVzcywgZ3Vlc3MpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVu
ZEl0ZW0oaXRlbSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYXBwZW5kSXRlbSgqc2VwYXJhdG9ySXRlbSgpKTsg
ICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICBpZiAobWlzc3BlbGxpbmcpIHsKLSAgICAgICAgICAgICAgICAgICAg
YXBwZW5kSXRlbShJZ25vcmVTcGVsbGluZ0l0ZW0pOwotICAgICAgICAgICAgICAgICAgICBhcHBl
bmRJdGVtKExlYXJuU3BlbGxpbmdJdGVtKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgICAgICAgICAgYXBwZW5kSXRlbShJZ25vcmVHcmFtbWFySXRlbSk7Ci0gICAgICAgICAg
ICAgICAgYXBwZW5kSXRlbSgqc2VwYXJhdG9ySXRlbSgpKTsKLSNpZiBQTEFURk9STShNQUMpICYm
ICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9Q
QVJEKQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBJZiB0aGUgc3Ry
aW5nIHdhcyBhdXRvY29ycmVjdGVkLCBnZW5lcmF0ZSBhIGNvbnRleHR1YWwgbWVudSBpdGVtIGFs
bG93aW5nIGl0IHRvIGJlIGNoYW5nZWQgYmFjay4KLSAgICAgICAgICAgICAgICBTdHJpbmcgcmVw
bGFjZWRTdHJpbmcgPSByZXN1bHQucmVwbGFjZWRTdHJpbmcoKTsKLSAgICAgICAgICAgICAgICBp
ZiAoIXJlcGxhY2VkU3RyaW5nLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgICAgICBDb250
ZXh0TWVudUl0ZW0gaXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdDaGFuZ2VCYWNr
LCBjb250ZXh0TWVudUl0ZW1UYWdDaGFuZ2VCYWNrKHJlcGxhY2VkU3RyaW5nKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIGFwcGVuZEl0ZW0oaXRlbSk7Ci0gICAgICAgICAgICAgICAgICAgIGFwcGVu
ZEl0ZW0oKnNlcGFyYXRvckl0ZW0oKSk7Ci0gICAgICAgICAgICAgICAgfQotI2VuZGlmCi0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBGcmFtZUxvYWRlciogbG9hZGVyID0gZnJh
bWUtPmxvYWRlcigpOwotICAgICAgICBLVVJMIGxpbmtVUkwgPSByZXN1bHQuYWJzb2x1dGVMaW5r
VVJMKCk7Ci0gICAgICAgIGlmICghbGlua1VSTC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGlm
IChsb2FkZXItPmNhbkhhbmRsZVJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0KGxpbmtVUkwpKSkgewot
ICAgICAgICAgICAgICAgIGFwcGVuZEl0ZW0oT3BlbkxpbmtJdGVtKTsKLSAgICAgICAgICAgICAg
ICBhcHBlbmRJdGVtKE9wZW5MaW5rSW5OZXdXaW5kb3dJdGVtKTsKLSAgICAgICAgICAgICAgICBh
cHBlbmRJdGVtKERvd25sb2FkRmlsZUl0ZW0pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
YXBwZW5kSXRlbShDb3B5TGlua0l0ZW0pOwotICAgICAgICAgICAgYXBwZW5kSXRlbSgqc2VwYXJh
dG9ySXRlbSgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChyZXN1bHQuaXNTZWxlY3RlZCgp
ICYmICFpblBhc3N3b3JkRmllbGQgJiYgc2VsZWN0aW9uQ29udGFpbnNQb3NzaWJsZVdvcmQoZnJh
bWUpKSB7Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgICAgICAgICAgYXBwZW5kSXRlbShTZWFyY2hT
cG90bGlnaHRJdGVtKTsKLSNlbmRpZgotI2lmICFQTEFURk9STShHVEspCi0gICAgICAgICAgICBh
cHBlbmRJdGVtKFNlYXJjaFdlYkl0ZW0pOwotICAgICAgICAgICAgYXBwZW5kSXRlbSgqc2VwYXJh
dG9ySXRlbSgpKTsKLSNlbmRpZgotICAgICAKLSNpZiBQTEFURk9STShNQUMpCi0gICAgICAgICAg
ICBhcHBlbmRJdGVtKExvb2tJbkRpY3Rpb25hcnlJdGVtKTsKLSAgICAgICAgICAgIGFwcGVuZEl0
ZW0oKnNlcGFyYXRvckl0ZW0oKSk7Ci0jZW5kaWYKLSAgICAgICAgfQotCi0gICAgICAgIGFwcGVu
ZEl0ZW0oQ3V0SXRlbSk7Ci0gICAgICAgIGFwcGVuZEl0ZW0oQ29weUl0ZW0pOwotICAgICAgICBh
cHBlbmRJdGVtKFBhc3RlSXRlbSk7Ci0jaWYgUExBVEZPUk0oR1RLKQotICAgICAgICBhcHBlbmRJ
dGVtKERlbGV0ZUl0ZW0pOwotICAgICAgICBhcHBlbmRJdGVtKCpzZXBhcmF0b3JJdGVtKCkpOwot
ICAgICAgICBhcHBlbmRJdGVtKFNlbGVjdEFsbEl0ZW0pOwotI2VuZGlmCi0KLSAgICAgICAgaWYg
KCFpblBhc3N3b3JkRmllbGQpIHsKLSAgICAgICAgICAgIGFwcGVuZEl0ZW0oKnNlcGFyYXRvckl0
ZW0oKSk7Ci0jaWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCi0jaWYgIVBMQVRGT1JNKEdUSykKLSAg
ICAgICAgICAgIENvbnRleHRNZW51SXRlbSBTcGVsbGluZ0FuZEdyYW1tYXJNZW51SXRlbShTdWJt
ZW51VHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU3BlbGxpbmdNZW51LCAKLSAgICAgICAgICAgICAg
ICBjb250ZXh0TWVudUl0ZW1UYWdTcGVsbGluZ01lbnUoKSk7Ci0gICAgICAgICAgICBjcmVhdGVB
bmRBcHBlbmRTcGVsbGluZ0FuZEdyYW1tYXJTdWJNZW51KG1faGl0VGVzdFJlc3VsdCwgU3BlbGxp
bmdBbmRHcmFtbWFyTWVudUl0ZW0pOwotICAgICAgICAgICAgYXBwZW5kSXRlbShTcGVsbGluZ0Fu
ZEdyYW1tYXJNZW51SXRlbSk7Ci0jZW5kaWYKLSNlbHNlCi0gICAgICAgICAgICBDb250ZXh0TWVu
dUl0ZW0gU3BlbGxpbmdNZW51SXRlbShTdWJtZW51VHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnU3Bl
bGxpbmdNZW51LCAKLSAgICAgICAgICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdTcGVsbGluZ01l
bnUoKSk7Ci0gICAgICAgICAgICBjcmVhdGVBbmRBcHBlbmRTcGVsbGluZ1N1Yk1lbnUobV9oaXRU
ZXN0UmVzdWx0LCBTcGVsbGluZ01lbnVJdGVtKTsKLSAgICAgICAgICAgIGFwcGVuZEl0ZW0oU3Bl
bGxpbmdNZW51SXRlbSk7Ci0jZW5kaWYKLSNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJV
SUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQotICAgICAg
ICAgICAgQ29udGV4dE1lbnVJdGVtIHN1YnN0aXR1dGlvbnNNZW51SXRlbShTdWJtZW51VHlwZSwg
Q29udGV4dE1lbnVJdGVtVGFnU3Vic3RpdHV0aW9uc01lbnUsIAotICAgICAgICAgICAgICAgIGNv
bnRleHRNZW51SXRlbVRhZ1N1YnN0aXR1dGlvbnNNZW51KCkpOwotICAgICAgICAgICAgY3JlYXRl
QW5kQXBwZW5kU3Vic3RpdHV0aW9uc1N1Yk1lbnUobV9oaXRUZXN0UmVzdWx0LCBzdWJzdGl0dXRp
b25zTWVudUl0ZW0pOwotICAgICAgICAgICAgYXBwZW5kSXRlbShzdWJzdGl0dXRpb25zTWVudUl0
ZW0pOwotICAgICAgICAgICAgQ29udGV4dE1lbnVJdGVtIHRyYW5zZm9ybWF0aW9uc01lbnVJdGVt
KFN1Ym1lbnVUeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdUcmFuc2Zvcm1hdGlvbnNNZW51LCAKLSAg
ICAgICAgICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdUcmFuc2Zvcm1hdGlvbnNNZW51KCkpOwot
ICAgICAgICAgICAgY3JlYXRlQW5kQXBwZW5kVHJhbnNmb3JtYXRpb25zU3ViTWVudShtX2hpdFRl
c3RSZXN1bHQsIHRyYW5zZm9ybWF0aW9uc01lbnVJdGVtKTsKLSAgICAgICAgICAgIGFwcGVuZEl0
ZW0odHJhbnNmb3JtYXRpb25zTWVudUl0ZW0pOwotI2VuZGlmCi0jaWYgUExBVEZPUk0oR1RLKQot
ICAgICAgICAgICAgYm9vbCBzaG91bGRTaG93Rm9udE1lbnUgPSBmcmFtZS0+ZWRpdG9yKCktPmNh
bkVkaXRSaWNobHkoKTsKLSNlbHNlCi0gICAgICAgICAgICBib29sIHNob3VsZFNob3dGb250TWVu
dSA9IHRydWU7Ci0jZW5kaWYKLSAgICAgICAgICAgIGlmIChzaG91bGRTaG93Rm9udE1lbnUpIHsK
LSAgICAgICAgICAgICAgICBDb250ZXh0TWVudUl0ZW0gRm9udE1lbnVJdGVtKFN1Ym1lbnVUeXBl
LCBDb250ZXh0TWVudUl0ZW1UYWdGb250TWVudSwgCi0gICAgICAgICAgICAgICAgICAgIGNvbnRl
eHRNZW51SXRlbVRhZ0ZvbnRNZW51KCkpOwotICAgICAgICAgICAgICAgIGNyZWF0ZUFuZEFwcGVu
ZEZvbnRTdWJNZW51KG1faGl0VGVzdFJlc3VsdCwgRm9udE1lbnVJdGVtKTsKLSAgICAgICAgICAg
ICAgICBhcHBlbmRJdGVtKEZvbnRNZW51SXRlbSk7Ci0gICAgICAgICAgICB9Ci0jaWYgUExBVEZP
Uk0oTUFDKQotICAgICAgICAgICAgQ29udGV4dE1lbnVJdGVtIFNwZWVjaE1lbnVJdGVtKFN1Ym1l
bnVUeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdTcGVlY2hNZW51LCBjb250ZXh0TWVudUl0ZW1UYWdT
cGVlY2hNZW51KCkpOwotICAgICAgICAgICAgY3JlYXRlQW5kQXBwZW5kU3BlZWNoU3ViTWVudSht
X2hpdFRlc3RSZXN1bHQsIFNwZWVjaE1lbnVJdGVtKTsKLSAgICAgICAgICAgIGFwcGVuZEl0ZW0o
U3BlZWNoTWVudUl0ZW0pOwotI2VuZGlmCi0jaWYgIVBMQVRGT1JNKEdUSykKLSAgICAgICAgICAg
IENvbnRleHRNZW51SXRlbSBXcml0aW5nRGlyZWN0aW9uTWVudUl0ZW0oU3VibWVudVR5cGUsIENv
bnRleHRNZW51SXRlbVRhZ1dyaXRpbmdEaXJlY3Rpb25NZW51LCAKLSAgICAgICAgICAgICAgICBj
b250ZXh0TWVudUl0ZW1UYWdXcml0aW5nRGlyZWN0aW9uTWVudSgpKTsKLSAgICAgICAgICAgIGNy
ZWF0ZUFuZEFwcGVuZFdyaXRpbmdEaXJlY3Rpb25TdWJNZW51KG1faGl0VGVzdFJlc3VsdCwgV3Jp
dGluZ0RpcmVjdGlvbk1lbnVJdGVtKTsKLSAgICAgICAgICAgIGFwcGVuZEl0ZW0oV3JpdGluZ0Rp
cmVjdGlvbk1lbnVJdGVtKTsKLSAgICAgICAgICAgIGlmIChQYWdlKiBwYWdlID0gZnJhbWUtPnBh
Z2UoKSkgewotICAgICAgICAgICAgICAgIGlmIChTZXR0aW5ncyogc2V0dGluZ3MgPSBwYWdlLT5z
ZXR0aW5ncygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJvb2wgaW5jbHVkZVRleHREaXJlY3Rp
b25TdWJtZW51ID0gc2V0dGluZ3MtPnRleHREaXJlY3Rpb25TdWJtZW51SW5jbHVzaW9uQmVoYXZp
b3IoKSA9PSBUZXh0RGlyZWN0aW9uU3VibWVudUFsd2F5c0luY2x1ZGVkCi0gICAgICAgICAgICAg
ICAgICAgICAgICB8fCAoc2V0dGluZ3MtPnRleHREaXJlY3Rpb25TdWJtZW51SW5jbHVzaW9uQmVo
YXZpb3IoKSA9PSBUZXh0RGlyZWN0aW9uU3VibWVudUF1dG9tYXRpY2FsbHlJbmNsdWRlZCAmJiBm
cmFtZS0+ZWRpdG9yKCktPmhhc0JpZGlTZWxlY3Rpb24oKSk7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChpbmNsdWRlVGV4dERpcmVjdGlvblN1Ym1lbnUpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIENvbnRleHRNZW51SXRlbSBUZXh0RGlyZWN0aW9uTWVudUl0ZW0oU3VibWVudVR5cGUsIENv
bnRleHRNZW51SXRlbVRhZ1RleHREaXJlY3Rpb25NZW51LCAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb250ZXh0TWVudUl0ZW1UYWdUZXh0RGlyZWN0aW9uTWVudSgpKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGNyZWF0ZUFuZEFwcGVuZFRleHREaXJlY3Rpb25TdWJNZW51KG1faGl0
VGVzdFJlc3VsdCwgVGV4dERpcmVjdGlvbk1lbnVJdGVtKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGFwcGVuZEl0ZW0oVGV4dERpcmVjdGlvbk1lbnVJdGVtKTsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSNlbmRpZgotICAgICAgICB9
Ci0gICAgfQotfQotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUikKLXZvaWQgQ29udGV4dE1lbnU6OmFk
ZEluc3BlY3RFbGVtZW50SXRlbSgpCi17Ci0gICAgTm9kZSogbm9kZSA9IG1faGl0VGVzdFJlc3Vs
dC5pbm5lck5vblNoYXJlZE5vZGUoKTsKLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybjsK
LQotICAgIEZyYW1lKiBmcmFtZSA9IG5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCk7Ci0gICAgaWYg
KCFmcmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUGFnZSogcGFnZSA9IGZyYW1lLT5wYWdl
KCk7Ci0gICAgaWYgKCFwYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXBhZ2UtPmlu
c3BlY3RvckNvbnRyb2xsZXIoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ29udGV4dE1lbnVJ
dGVtIEluc3BlY3RFbGVtZW50SXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdJbnNw
ZWN0RWxlbWVudCwgY29udGV4dE1lbnVJdGVtVGFnSW5zcGVjdEVsZW1lbnQoKSk7Ci0gICAgYXBw
ZW5kSXRlbSgqc2VwYXJhdG9ySXRlbSgpKTsKLSAgICBhcHBlbmRJdGVtKEluc3BlY3RFbGVtZW50
SXRlbSk7Ci19Ci0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKLQotdm9pZCBDb250ZXh0TWVu
dTo6Y2hlY2tPckVuYWJsZUlmTmVlZGVkKENvbnRleHRNZW51SXRlbSYgaXRlbSkgY29uc3QKLXsK
LSAgICBpZiAoaXRlbS50eXBlKCkgPT0gU2VwYXJhdG9yVHlwZSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIAotICAgIEZyYW1lKiBmcmFtZSA9IG1faGl0VGVzdFJlc3VsdC5pbm5lck5vblNoYXJlZE5v
ZGUoKS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1
cm47Ci0KLSAgICAvLyBDdXN0b20gaXRlbXMgYWxyZWFkeSBoYXZlIHByb3BlciBjaGVja2VkIGFu
ZCBlbmFibGVkIHZhbHVlcy4KLSAgICBpZiAoQ29udGV4dE1lbnVJdGVtQmFzZUN1c3RvbVRhZyA8
PSBpdGVtLmFjdGlvbigpICYmIGl0ZW0uYWN0aW9uKCkgPD0gQ29udGV4dE1lbnVJdGVtTGFzdEN1
c3RvbVRhZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYm9vbCBzaG91bGRFbmFibGUgPSB0cnVl
OwotICAgIGJvb2wgc2hvdWxkQ2hlY2sgPSBmYWxzZTsgCi0KLSAgICBzd2l0Y2ggKGl0ZW0uYWN0
aW9uKCkpIHsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdDaGVja1NwZWxsaW5nOgot
ICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gZnJhbWUtPmVkaXRvcigpLT5jYW5FZGl0KCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdEZWZhdWx0
RGlyZWN0aW9uOgotICAgICAgICAgICAgc2hvdWxkQ2hlY2sgPSBmYWxzZTsKLSAgICAgICAgICAg
IHNob3VsZEVuYWJsZSA9IGZhbHNlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtVGFnTGVmdFRvUmlnaHQ6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJ
dGVtVGFnUmlnaHRUb0xlZnQ6IHsKLSAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwot
ICAgICAgICAgICAgUmVmUHRyPENTU1N0eWxlRGVjbGFyYXRpb24+IHN0eWxlID0gZnJhbWUtPmRv
Y3VtZW50KCktPmNyZWF0ZUNTU1N0eWxlRGVjbGFyYXRpb24oKTsKLSAgICAgICAgICAgIFN0cmlu
ZyBkaXJlY3Rpb24gPSBpdGVtLmFjdGlvbigpID09IENvbnRleHRNZW51SXRlbVRhZ0xlZnRUb1Jp
Z2h0ID8gImx0ciIgOiAicnRsIjsKLSAgICAgICAgICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQ
cm9wZXJ0eURpcmVjdGlvbiwgZGlyZWN0aW9uLCBmYWxzZSwgZWMpOwotICAgICAgICAgICAgc2hv
dWxkQ2hlY2sgPSBmcmFtZS0+ZWRpdG9yKCktPnNlbGVjdGlvbkhhc1N0eWxlKHN0eWxlLmdldCgp
KSAhPSBGYWxzZVRyaVN0YXRlOwotICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gdHJ1ZTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVt
VGFnVGV4dERpcmVjdGlvbkRlZmF1bHQ6IHsKLSAgICAgICAgICAgIEVkaXRvcjo6Q29tbWFuZCBj
b21tYW5kID0gZnJhbWUtPmVkaXRvcigpLT5jb21tYW5kKCJNYWtlVGV4dFdyaXRpbmdEaXJlY3Rp
b25OYXR1cmFsIik7Ci0gICAgICAgICAgICBzaG91bGRDaGVjayA9IGNvbW1hbmQuc3RhdGUoKSA9
PSBUcnVlVHJpU3RhdGU7Ci0gICAgICAgICAgICBzaG91bGRFbmFibGUgPSBjb21tYW5kLmlzRW5h
YmxlZCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBDb250
ZXh0TWVudUl0ZW1UYWdUZXh0RGlyZWN0aW9uTGVmdFRvUmlnaHQ6IHsKLSAgICAgICAgICAgIEVk
aXRvcjo6Q29tbWFuZCBjb21tYW5kID0gZnJhbWUtPmVkaXRvcigpLT5jb21tYW5kKCJNYWtlVGV4
dFdyaXRpbmdEaXJlY3Rpb25MZWZ0VG9SaWdodCIpOwotICAgICAgICAgICAgc2hvdWxkQ2hlY2sg
PSBjb21tYW5kLnN0YXRlKCkgPT0gVHJ1ZVRyaVN0YXRlOwotICAgICAgICAgICAgc2hvdWxkRW5h
YmxlID0gY29tbWFuZC5pc0VuYWJsZWQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnVGV4dERpcmVjdGlvblJpZ2h0VG9MZWZ0
OiB7Ci0gICAgICAgICAgICBFZGl0b3I6OkNvbW1hbmQgY29tbWFuZCA9IGZyYW1lLT5lZGl0b3Io
KS0+Y29tbWFuZCgiTWFrZVRleHRXcml0aW5nRGlyZWN0aW9uUmlnaHRUb0xlZnQiKTsKLSAgICAg
ICAgICAgIHNob3VsZENoZWNrID0gY29tbWFuZC5zdGF0ZSgpID09IFRydWVUcmlTdGF0ZTsKLSAg
ICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGNvbW1hbmQuaXNFbmFibGVkKCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0NvcHk6
Ci0gICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+ZWRpdG9yKCktPmNhbkRIVE1MQ29w
eSgpIHx8IGZyYW1lLT5lZGl0b3IoKS0+Y2FuQ29weSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQ3V0OgotICAgICAgICAgICAgc2hvdWxkRW5h
YmxlID0gZnJhbWUtPmVkaXRvcigpLT5jYW5ESFRNTEN1dCgpIHx8IGZyYW1lLT5lZGl0b3IoKS0+
Y2FuQ3V0KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0
ZW1UYWdJZ25vcmVTcGVsbGluZzoKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdMZWFy
blNwZWxsaW5nOgotICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gZnJhbWUtPnNlbGVjdGlvbigp
LT5pc1JhbmdlKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVu
dUl0ZW1UYWdQYXN0ZToKLSAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGZyYW1lLT5lZGl0b3Io
KS0+Y2FuREhUTUxQYXN0ZSgpIHx8IGZyYW1lLT5lZGl0b3IoKS0+Y2FuUGFzdGUoKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotI2lmIFBMQVRGT1JNKEdUSykKLSAgICAgICAgY2FzZSBDb250ZXh0TWVu
dUl0ZW1UYWdEZWxldGU6Ci0gICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+ZWRpdG9y
KCktPmNhbkRlbGV0ZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29udGV4
dE1lbnVJdGVtVGFnU2VsZWN0QWxsOgotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0lu
cHV0TWV0aG9kczoKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdVbmljb2RlOgotICAg
ICAgICAgICAgc2hvdWxkRW5hYmxlID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotI2VuZGlm
Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnVW5kZXJsaW5lOiB7Ci0gICAgICAgICAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICAgICAgICAgIFJlZlB0cjxDU1NTdHlsZURlY2xh
cmF0aW9uPiBzdHlsZSA9IGZyYW1lLT5kb2N1bWVudCgpLT5jcmVhdGVDU1NTdHlsZURlY2xhcmF0
aW9uKCk7Ci0gICAgICAgICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRU
ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCwgInVuZGVybGluZSIsIGZhbHNlLCBlYyk7Ci0gICAgICAg
ICAgICBzaG91bGRDaGVjayA9IGZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0aW9uSGFzU3R5bGUoc3R5
bGUuZ2V0KCkpICE9IEZhbHNlVHJpU3RhdGU7Ci0gICAgICAgICAgICBzaG91bGRFbmFibGUgPSBm
cmFtZS0+ZWRpdG9yKCktPmNhbkVkaXRSaWNobHkoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnTG9va1VwSW5EaWN0aW9uYXJ5
OgotICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gZnJhbWUtPnNlbGVjdGlvbigpLT5pc1Jhbmdl
KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdD
aGVja0dyYW1tYXJXaXRoU3BlbGxpbmc6Ci0jaWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCi0gICAg
ICAgICAgICBpZiAoZnJhbWUtPmVkaXRvcigpLT5pc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSkK
LSAgICAgICAgICAgICAgICBzaG91bGRDaGVjayA9IHRydWU7Ci0gICAgICAgICAgICBzaG91bGRF
bmFibGUgPSB0cnVlOwotI2VuZGlmCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBD
b250ZXh0TWVudUl0ZW1UYWdJdGFsaWM6IHsKLSAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOwotICAgICAgICAgICAgUmVmUHRyPENTU1N0eWxlRGVjbGFyYXRpb24+IHN0eWxlID0gZnJh
bWUtPmRvY3VtZW50KCktPmNyZWF0ZUNTU1N0eWxlRGVjbGFyYXRpb24oKTsKLSAgICAgICAgICAg
IHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRTdHlsZSwgIml0YWxpYyIsIGZhbHNl
LCBlYyk7Ci0gICAgICAgICAgICBzaG91bGRDaGVjayA9IGZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0
aW9uSGFzU3R5bGUoc3R5bGUuZ2V0KCkpICE9IEZhbHNlVHJpU3RhdGU7Ci0gICAgICAgICAgICBz
aG91bGRFbmFibGUgPSBmcmFtZS0+ZWRpdG9yKCktPmNhbkVkaXRSaWNobHkoKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQm9s
ZDogewotICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgICAgICAgICBSZWZQ
dHI8Q1NTU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+Y3JlYXRl
Q1NTU3R5bGVEZWNsYXJhdGlvbigpOwotICAgICAgICAgICAgc3R5bGUtPnNldFByb3BlcnR5KENT
U1Byb3BlcnR5Rm9udFdlaWdodCwgImJvbGQiLCBmYWxzZSwgZWMpOwotICAgICAgICAgICAgc2hv
dWxkQ2hlY2sgPSBmcmFtZS0+ZWRpdG9yKCktPnNlbGVjdGlvbkhhc1N0eWxlKHN0eWxlLmdldCgp
KSAhPSBGYWxzZVRyaVN0YXRlOwotICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gZnJhbWUtPmVk
aXRvcigpLT5jYW5FZGl0UmljaGx5KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ091dGxpbmU6Ci0gICAgICAgICAgICBzaG91
bGRFbmFibGUgPSBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbnRl
eHRNZW51SXRlbVRhZ1Nob3dTcGVsbGluZ1BhbmVsOgotI2lmbmRlZiBCVUlMRElOR19PTl9USUdF
UgotICAgICAgICAgICAgaWYgKGZyYW1lLT5lZGl0b3IoKS0+c3BlbGxpbmdQYW5lbElzU2hvd2lu
ZygpKQotICAgICAgICAgICAgICAgIGl0ZW0uc2V0VGl0bGUoY29udGV4dE1lbnVJdGVtVGFnU2hv
d1NwZWxsaW5nUGFuZWwoZmFsc2UpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICBpdGVtLnNldFRpdGxlKGNvbnRleHRNZW51SXRlbVRhZ1Nob3dTcGVsbGluZ1BhbmVsKHRydWUp
KTsKLSNlbmRpZgotICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gZnJhbWUtPmVkaXRvcigpLT5j
YW5FZGl0KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0
ZW1UYWdOb0d1ZXNzZXNGb3VuZDoKLSAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGZhbHNlOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnQ2hlY2tT
cGVsbGluZ1doaWxlVHlwaW5nOgotICAgICAgICAgICAgc2hvdWxkQ2hlY2sgPSBmcmFtZS0+ZWRp
dG9yKCktPmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSNpZiBQTEFURk9STShNQUMpCi0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFn
U3Vic3RpdHV0aW9uc01lbnU6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnVHJhbnNm
b3JtYXRpb25zTWVudToKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbnRleHRN
ZW51SXRlbVRhZ1Nob3dTdWJzdGl0dXRpb25zOgotI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJ
R0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQotICAgICAgICAgICAgaWYgKGZy
YW1lLT5lZGl0b3IoKS0+c3Vic3RpdHV0aW9uc1BhbmVsSXNTaG93aW5nKCkpCi0gICAgICAgICAg
ICAgICAgaXRlbS5zZXRUaXRsZShjb250ZXh0TWVudUl0ZW1UYWdTaG93U3Vic3RpdHV0aW9ucyhm
YWxzZSkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGl0ZW0uc2V0VGl0bGUo
Y29udGV4dE1lbnVJdGVtVGFnU2hvd1N1YnN0aXR1dGlvbnModHJ1ZSkpOwotICAgICAgICAgICAg
c2hvdWxkRW5hYmxlID0gZnJhbWUtPmVkaXRvcigpLT5jYW5FZGl0KCk7Ci0jZW5kaWYKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ01ha2VVcHBlckNh
c2U6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnTWFrZUxvd2VyQ2FzZToKLSAgICAg
ICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdDYXBpdGFsaXplOgotICAgICAgICBjYXNlIENvbnRl
eHRNZW51SXRlbVRhZ0NoYW5nZUJhY2s6Ci0gICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFt
ZS0+ZWRpdG9yKCktPmNhbkVkaXQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IENvbnRleHRNZW51SXRlbVRhZ0NvcnJlY3RTcGVsbGluZ0F1dG9tYXRpY2FsbHk6Ci0jaWYgIWRl
ZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQp
Ci0gICAgICAgICAgICBzaG91bGRDaGVjayA9IGZyYW1lLT5lZGl0b3IoKS0+aXNBdXRvbWF0aWNT
cGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1NtYXJ0Q29weVBhc3RlOgotI2lmICFkZWZp
bmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQot
ICAgICAgICAgICAgc2hvdWxkQ2hlY2sgPSBmcmFtZS0+ZWRpdG9yKCktPnNtYXJ0SW5zZXJ0RGVs
ZXRlRW5hYmxlZCgpOwotI2VuZGlmCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBD
b250ZXh0TWVudUl0ZW1UYWdTbWFydFF1b3RlczoKLSNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9U
SUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKLSAgICAgICAgICAgIHNob3Vs
ZENoZWNrID0gZnJhbWUtPmVkaXRvcigpLT5pc0F1dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uRW5h
YmxlZCgpOwotI2VuZGlmCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb250ZXh0
TWVudUl0ZW1UYWdTbWFydERhc2hlczoKLSNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikg
JiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKLSAgICAgICAgICAgIHNob3VsZENoZWNr
ID0gZnJhbWUtPmVkaXRvcigpLT5pc0F1dG9tYXRpY0Rhc2hTdWJzdGl0dXRpb25FbmFibGVkKCk7
Ci0jZW5kaWYKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRl
bVRhZ1NtYXJ0TGlua3M6Ci0jaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZp
bmVkKEJVSUxESU5HX09OX0xFT1BBUkQpCi0gICAgICAgICAgICBzaG91bGRDaGVjayA9IGZyYW1l
LT5lZGl0b3IoKS0+aXNBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZCgpOwotI2VuZGlmCi0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdUZXh0UmVw
bGFjZW1lbnQ6Ci0jaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJV
SUxESU5HX09OX0xFT1BBUkQpCi0gICAgICAgICAgICBzaG91bGRDaGVjayA9IGZyYW1lLT5lZGl0
b3IoKS0+aXNBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnRFbmFibGVkKCk7Ci0jZW5kaWYKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1N0b3BTcGVha2lu
ZzoKLSAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGNvbnRyb2xsZXIoKSAmJiBjb250cm9sbGVy
KCktPmNsaWVudCgpICYmIGNvbnRyb2xsZXIoKS0+Y2xpZW50KCktPmlzU3BlYWtpbmcoKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotI2Vsc2UgLy8gUExBVEZPUk0oTUFDKSBlbmRzIGhlcmUKLSAgICAg
ICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTdG9wU3BlYWtpbmc6Ci0gICAgICAgICAgICBicmVh
azsKLSNlbmRpZgotI2lmIFBMQVRGT1JNKEdUSykKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0
ZW1UYWdHb0JhY2s6Ci0gICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+cGFnZSgpICYm
IGZyYW1lLT5wYWdlKCktPmJhY2tGb3J3YXJkKCktPmNhbkdvQmFja09yRm9yd2FyZCgtMSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdHb0Zvcndh
cmQ6Ci0gICAgICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+cGFnZSgpICYmIGZyYW1lLT5w
YWdlKCktPmJhY2tGb3J3YXJkKCktPmNhbkdvQmFja09yRm9yd2FyZCgxKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1N0b3A6Ci0gICAgICAgICAg
ICBzaG91bGRFbmFibGUgPSBmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPmlzTG9h
ZGluZ0luQVBJU2Vuc2UoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbnRl
eHRNZW51SXRlbVRhZ1JlbG9hZDoKLSAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9ICFmcmFtZS0+
bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPmlzTG9hZGluZ0luQVBJU2Vuc2UoKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0ZvbnRNZW51Ogot
ICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gZnJhbWUtPmVkaXRvcigpLT5jYW5FZGl0UmljaGx5
KCk7Ci0gICAgICAgICAgICBicmVhazsKLSNlbHNlCi0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJ
dGVtVGFnR29CYWNrOgotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0dvRm9yd2FyZDoK
LSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTdG9wOgotICAgICAgICBjYXNlIENvbnRl
eHRNZW51SXRlbVRhZ1JlbG9hZDoKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdGb250
TWVudToKLSNlbmRpZgotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ05vQWN0aW9uOgot
ICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5MaW5rSW5OZXdXaW5kb3c6Ci0gICAg
ICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnRG93bmxvYWRMaW5rVG9EaXNrOgotICAgICAgICBj
YXNlIENvbnRleHRNZW51SXRlbVRhZ0NvcHlMaW5rVG9DbGlwYm9hcmQ6Ci0gICAgICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtVGFnT3BlbkltYWdlSW5OZXdXaW5kb3c6Ci0gICAgICAgIGNhc2UgQ29u
dGV4dE1lbnVJdGVtVGFnRG93bmxvYWRJbWFnZVRvRGlzazoKLSAgICAgICAgY2FzZSBDb250ZXh0
TWVudUl0ZW1UYWdDb3B5SW1hZ2VUb0NsaXBib2FyZDoKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ09wZW5NZWRpYUluTmV3V2luZG93OgotICAgICAg
ICAgICAgaWYgKG1faGl0VGVzdFJlc3VsdC5tZWRpYUlzVmlkZW8oKSkKLSAgICAgICAgICAgICAg
ICBpdGVtLnNldFRpdGxlKGNvbnRleHRNZW51SXRlbVRhZ09wZW5WaWRlb0luTmV3V2luZG93KCkp
OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGl0ZW0uc2V0VGl0bGUoY29udGV4
dE1lbnVJdGVtVGFnT3BlbkF1ZGlvSW5OZXdXaW5kb3coKSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdDb3B5TWVkaWFMaW5rVG9DbGlwYm9hcmQ6
Ci0gICAgICAgICAgICBpZiAobV9oaXRUZXN0UmVzdWx0Lm1lZGlhSXNWaWRlbygpKQotICAgICAg
ICAgICAgICAgIGl0ZW0uc2V0VGl0bGUoY29udGV4dE1lbnVJdGVtVGFnQ29weVZpZGVvTGlua1Rv
Q2xpcGJvYXJkKCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGl0ZW0uc2V0
VGl0bGUoY29udGV4dE1lbnVJdGVtVGFnQ29weUF1ZGlvTGlua1RvQ2xpcGJvYXJkKCkpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnVG9nZ2xlTWVk
aWFDb250cm9sczoKLSAgICAgICAgICAgIHNob3VsZENoZWNrID0gbV9oaXRUZXN0UmVzdWx0Lm1l
ZGlhQ29udHJvbHNFbmFibGVkKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBD
b250ZXh0TWVudUl0ZW1UYWdUb2dnbGVNZWRpYUxvb3A6Ci0gICAgICAgICAgICBzaG91bGRDaGVj
ayA9IG1faGl0VGVzdFJlc3VsdC5tZWRpYUxvb3BFbmFibGVkKCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdFbnRlclZpZGVvRnVsbHNjcmVlbjoK
LSAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IG1faGl0VGVzdFJlc3VsdC5tZWRpYVN1cHBvcnRz
RnVsbHNjcmVlbigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29udGV4dE1l
bnVJdGVtVGFnT3BlbkZyYW1lSW5OZXdXaW5kb3c6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJ
dGVtVGFnU3BlbGxpbmdHdWVzczoKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdPdGhl
cjoKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTZWFyY2hJblNwb3RsaWdodDoKLSAg
ICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTZWFyY2hXZWI6Ci0gICAgICAgIGNhc2UgQ29u
dGV4dE1lbnVJdGVtVGFnT3BlbldpdGhEZWZhdWx0QXBwbGljYXRpb246Ci0gICAgICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtUERGQWN0dWFsU2l6ZToKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0
ZW1QREZab29tSW46Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtUERGWm9vbU91dDoKLSAg
ICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1QREZBdXRvU2l6ZToKLSAgICAgICAgY2FzZSBDb250
ZXh0TWVudUl0ZW1QREZTaW5nbGVQYWdlOgotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVBE
RkZhY2luZ1BhZ2VzOgotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVBERkNvbnRpbnVvdXM6
Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtUERGTmV4dFBhZ2U6Ci0gICAgICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtUERGUHJldmlvdXNQYWdlOgotICAgICAgICBjYXNlIENvbnRleHRNZW51
SXRlbVRhZ09wZW5MaW5rOgotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0lnbm9yZUdy
YW1tYXI6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU3BlbGxpbmdNZW51OgotICAg
ICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1Nob3dGb250czoKLSAgICAgICAgY2FzZSBDb250
ZXh0TWVudUl0ZW1UYWdTdHlsZXM6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU2hv
d0NvbG9yczoKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTcGVlY2hNZW51OgotICAg
ICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1N0YXJ0U3BlYWtpbmc6Ci0gICAgICAgIGNhc2Ug
Q29udGV4dE1lbnVJdGVtVGFnV3JpdGluZ0RpcmVjdGlvbk1lbnU6Ci0gICAgICAgIGNhc2UgQ29u
dGV4dE1lbnVJdGVtVGFnVGV4dERpcmVjdGlvbk1lbnU6Ci0gICAgICAgIGNhc2UgQ29udGV4dE1l
bnVJdGVtVGFnUERGU2luZ2xlUGFnZVNjcm9sbGluZzoKLSAgICAgICAgY2FzZSBDb250ZXh0TWVu
dUl0ZW1UYWdQREZGYWNpbmdQYWdlc1Njcm9sbGluZzoKLSNpZiBFTkFCTEUoSU5TUEVDVE9SKQot
ICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0luc3BlY3RFbGVtZW50OgotI2VuZGlmCi0g
ICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtQmFzZUN1c3RvbVRhZzoKLSAgICAgICAgY2FzZSBD
b250ZXh0TWVudUl0ZW1DdXN0b21UYWdOb0FjdGlvbjoKLSAgICAgICAgY2FzZSBDb250ZXh0TWVu
dUl0ZW1MYXN0Q3VzdG9tVGFnOgotICAgICAgICBjYXNlIENvbnRleHRNZW51SXRlbUJhc2VBcHBs
aWNhdGlvblRhZzoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbnRleHRNZW51
SXRlbVRhZ01lZGlhUGxheVBhdXNlOgotICAgICAgICAgICAgaWYgKG1faGl0VGVzdFJlc3VsdC5t
ZWRpYVBsYXlpbmcoKSkKLSAgICAgICAgICAgICAgICBpdGVtLnNldFRpdGxlKGNvbnRleHRNZW51
SXRlbVRhZ01lZGlhUGF1c2UoKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
aXRlbS5zZXRUaXRsZShjb250ZXh0TWVudUl0ZW1UYWdNZWRpYVBsYXkoKSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdNZWRpYU11dGU6Ci0gICAg
ICAgICAgICBzaG91bGRFbmFibGUgPSBtX2hpdFRlc3RSZXN1bHQubWVkaWFIYXNBdWRpbygpOwot
ICAgICAgICAgICAgc2hvdWxkQ2hlY2sgPSBzaG91bGRFbmFibGUgJiYgIG1faGl0VGVzdFJlc3Vs
dC5tZWRpYU11dGVkKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBpdGVtLnNl
dENoZWNrZWQoc2hvdWxkQ2hlY2spOwotICAgIGl0ZW0uc2V0RW5hYmxlZChzaG91bGRFbmFibGUp
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoQ09OVEVY
VF9NRU5VUykKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vQ29udGV4dE1lbnUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL0NvbnRleHRNZW51LmgJKHJldmlzaW9uIDczNDY5KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9Db250ZXh0TWVudS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsy
OSw2IEBACiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAKICNpbmNsdWRlICJDb250ZXh0
TWVudUl0ZW0uaCIKLSNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiUGxhdGZv
cm1NZW51RGVzY3JpcHRpb24uaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2lmIFBM
QVRGT1JNKE1BQykKQEAgLTQ4LDE0ICs0NywxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
Y2xhc3MgQ29udGV4dE1lbnUgOiBwdWJsaWMgTm9uY29weWFibGUKICAgICB7CiAgICAgcHVibGlj
OgotICAgICAgICBDb250ZXh0TWVudShjb25zdCBIaXRUZXN0UmVzdWx0Jik7Ci0gICAgICAgIENv
bnRleHRNZW51KGNvbnN0IEhpdFRlc3RSZXN1bHQmLCBjb25zdCBQbGF0Zm9ybU1lbnVEZXNjcmlw
dGlvbik7CisgICAgICAgIENvbnRleHRNZW51KCk7CisgICAgICAgIENvbnRleHRNZW51KGNvbnN0
IFBsYXRmb3JtTWVudURlc2NyaXB0aW9uKTsKICAgICAgICAgfkNvbnRleHRNZW51KCk7CiAKLSAg
ICAgICAgdm9pZCBwb3B1bGF0ZSgpOwotICAgICAgICB2b2lkIGFkZEluc3BlY3RFbGVtZW50SXRl
bSgpOwotICAgICAgICB2b2lkIGNoZWNrT3JFbmFibGVJZk5lZWRlZChDb250ZXh0TWVudUl0ZW0m
KSBjb25zdDsKLQogICAgICAgICB2b2lkIGluc2VydEl0ZW0odW5zaWduZWQgcG9zaXRpb24sIENv
bnRleHRNZW51SXRlbSYpOwogICAgICAgICB2b2lkIGFwcGVuZEl0ZW0oQ29udGV4dE1lbnVJdGVt
Jik7CiAgICAgICAgIApAQCAtNjQsOSArNTksNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAg
ICAgICAgdW5zaWduZWQgaXRlbUNvdW50KCkgY29uc3Q7CiAKLSAgICAgICAgSGl0VGVzdFJlc3Vs
dCBoaXRUZXN0UmVzdWx0KCkgY29uc3QgeyByZXR1cm4gbV9oaXRUZXN0UmVzdWx0OyB9Ci0gICAg
ICAgIENvbnRleHRNZW51Q29udHJvbGxlciogY29udHJvbGxlcigpIGNvbnN0OwotCiAgICAgICAg
IFBsYXRmb3JtTWVudURlc2NyaXB0aW9uIHBsYXRmb3JtRGVzY3JpcHRpb24oKSBjb25zdDsKICAg
ICAgICAgdm9pZCBzZXRQbGF0Zm9ybURlc2NyaXB0aW9uKFBsYXRmb3JtTWVudURlc2NyaXB0aW9u
KTsKIApAQCAtNzUsNyArNjcsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHN0YXRp
YyBDb250ZXh0TWVudUl0ZW0qIGl0ZW1XaXRoSWQoaW50KTsKICNlbmRpZgogICAgIHByaXZhdGU6
Ci0gICAgICAgIEhpdFRlc3RSZXN1bHQgbV9oaXRUZXN0UmVzdWx0OwogI2lmIFBMQVRGT1JNKE1B
QykKICAgICAgICAgLy8gS2VlcCB0aGlzIGluIHN5bmMgd2l0aCB0aGUgUGxhdGZvcm1NZW51RGVz
Y3JpcHRpb24gdHlwZWRlZgogICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IG1fcGxh
dGZvcm1EZXNjcmlwdGlvbjsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9UZW1wb3Jh
cnlMaW5rU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9U
ZW1wb3JhcnlMaW5rU3R1YnMuY3BwCShyZXZpc2lvbiA3MzQ2OSkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vYW5kcm9pZC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjcs
NyArMTY3LDcgQEAgUGFzdGVib2FyZDo6flBhc3RlYm9hcmQoKQogfQogCiAKLUNvbnRleHRNZW51
OjpDb250ZXh0TWVudShjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQpIDogbV9oaXRUZXN0UmVz
dWx0KHJlc3VsdCkKK0NvbnRleHRNZW51OjpDb250ZXh0TWVudSgpCiB7CiAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vYnJldy9Db250ZXh0TWVudUJyZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vYnJldy9Db250ZXh0TWVudUJyZXcuY3BwCShyZXZpc2lvbiA3MzQ2OSkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vYnJldy9Db250ZXh0TWVudUJyZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwx
NSArMzIsMTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1Db250ZXh0TWVudTo6Q29udGV4
dE1lbnUoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0KQotICAgIDogbV9oaXRUZXN0UmVzdWx0
KHJlc3VsdCkKK0NvbnRleHRNZW51OjpDb250ZXh0TWVudSgpCiB7CiAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotQ29udGV4dE1lbnU6OkNvbnRl
eHRNZW51KGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgUGxhdGZvcm1NZW51RGVz
Y3JpcHRpb24gbWVudSkKLSAgICA6IG1faGl0VGVzdFJlc3VsdChyZXN1bHQpCitDb250ZXh0TWVu
dTo6Q29udGV4dE1lbnUoY29uc3QgUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gbWVudSkKIHsKICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICBub3RJbXBsZW1lbnRlZCgpOwpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9Db250ZXh0TWVudUNocm9taXVtLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NvbnRleHRNZW51Q2hyb21pdW0uY3BwCShy
ZXZpc2lvbiA3MzQ2OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ29udGV4dE1lbnVD
aHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDEzICszNiwxMSBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAvLyBUaGlzIGlzIGEgc3R1YiBpbXBsZW1lbnRhdGlvbiBvZiBXZWJLaXQncyBD
b250ZXh0TWVudSBjbGFzcyB0aGF0IGRvZXMKIC8vIG5vdGhpbmcuCiAKLUNvbnRleHRNZW51OjpD
b250ZXh0TWVudShjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQpCi0gICAgOiBtX2hpdFRlc3RS
ZXN1bHQocmVzdWx0KQorQ29udGV4dE1lbnU6OkNvbnRleHRNZW51KCkKIHsKIH0KIAotQ29udGV4
dE1lbnU6OkNvbnRleHRNZW51KGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgUGxh
dGZvcm1NZW51RGVzY3JpcHRpb24gbWVudSkKLSAgICA6IG1faGl0VGVzdFJlc3VsdChyZXN1bHQp
CitDb250ZXh0TWVudTo6Q29udGV4dE1lbnUoY29uc3QgUGxhdGZvcm1NZW51RGVzY3JpcHRpb24g
bWVudSkKIHsKIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9lZmwvQ29udGV4dE1lbnVFZmwu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZWZsL0NvbnRleHRNZW51RWZsLmNw
cAkocmV2aXNpb24gNzM0NjkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2VmbC9Db250ZXh0TWVudUVm
bC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDMwICsyOSwyNSBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLUNvbnRleHRNZW51OjpDb250ZXh0TWVudShjb25zdCBIaXRUZXN0UmVzdWx0JiBy
ZXN1bHQpCi0gICAgOiBtX2hpdFRlc3RSZXN1bHQocmVzdWx0KQorQ29udGV4dE1lbnU6OkNvbnRl
eHRNZW51KCkKIHsKLSAgICBtX2NvbnRleHRNZW51Q2xpZW50ID0gc3RhdGljX2Nhc3Q8Q29udGV4
dE1lbnVDbGllbnRFZmwqPihjb250cm9sbGVyKCktPmNsaWVudCgpKTsKLSAgICBtX3BsYXRmb3Jt
RGVzY3JpcHRpb24gPSBtX2NvbnRleHRNZW51Q2xpZW50LT5jcmVhdGVQbGF0Zm9ybURlc2NyaXB0
aW9uKHRoaXMpOworICAgIG1fcGxhdGZvcm1EZXNjcmlwdGlvbiA9IChQbGF0Zm9ybU1lbnVEZXNj
cmlwdGlvbikgZXdrX2NvbnRleHRfbWVudV9uZXcobV92aWV3LCBtZW51LT5jb250cm9sbGVyKCkp
OwogfQogCi1Db250ZXh0TWVudTo6Q29udGV4dE1lbnUoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVz
dWx0LCBjb25zdCBQbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbiBtZW51KQotICAgIDogbV9oaXRUZXN0
UmVzdWx0KHJlc3VsdCkKLSAgICAsIG1fcGxhdGZvcm1EZXNjcmlwdGlvbihtZW51KQorQ29udGV4
dE1lbnU6OkNvbnRleHRNZW51KGNvbnN0IFBsYXRmb3JtTWVudURlc2NyaXB0aW9uIG1lbnUpCisg
ICAgOiBtX3BsYXRmb3JtRGVzY3JpcHRpb24obWVudSkKIHsKLSAgICBtX2NvbnRleHRNZW51Q2xp
ZW50ID0gc3RhdGljX2Nhc3Q8Q29udGV4dE1lbnVDbGllbnRFZmwqPihjb250cm9sbGVyKCktPmNs
aWVudCgpKTsKIH0KIAogQ29udGV4dE1lbnU6On5Db250ZXh0TWVudSgpCiB7CiAgICAgaWYgKG1f
cGxhdGZvcm1EZXNjcmlwdGlvbikKLSAgICAgICAgbV9jb250ZXh0TWVudUNsaWVudC0+ZnJlZVBs
YXRmb3JtRGVzY3JpcHRpb24obV9wbGF0Zm9ybURlc2NyaXB0aW9uKTsKKyAgICAgICAgZXdrX2Nv
bnRleHRfbWVudV9mcmVlKHN0YXRpY19jYXN0PEV3a19Db250ZXh0X01lbnUqPihtX3BsYXRmb3Jt
RGVzY3JpcHRpb24pKTsKIH0KIAogdm9pZCBDb250ZXh0TWVudTo6YXBwZW5kSXRlbShDb250ZXh0
TWVudUl0ZW0mIGl0ZW0pCiB7Ci0gICAgY2hlY2tPckVuYWJsZUlmTmVlZGVkKGl0ZW0pOwotICAg
IG1fY29udGV4dE1lbnVDbGllbnQtPmFwcGVuZEl0ZW0obV9wbGF0Zm9ybURlc2NyaXB0aW9uLCBp
dGVtKTsKKyAgICBld2tfY29udGV4dF9tZW51X2l0ZW1fYXBwZW5kKHN0YXRpY19jYXN0PEV3a19D
b250ZXh0X01lbnUqPihtX3BsYXRmb3JtRGVzY3JpcHRpb24pLCBpdGVtKTsKIH0KIAogdm9pZCBD
b250ZXh0TWVudTo6c2V0UGxhdGZvcm1EZXNjcmlwdGlvbihQbGF0Zm9ybU1lbnVEZXNjcmlwdGlv
biBtZW51KQpAQCAtNjAsNyArNTUsNyBAQCB2b2lkIENvbnRleHRNZW51OjpzZXRQbGF0Zm9ybURl
c2NyaXB0aW9uCiAgICAgQVNTRVJUKCFtX3BsYXRmb3JtRGVzY3JpcHRpb24pOwogCiAgICAgbV9w
bGF0Zm9ybURlc2NyaXB0aW9uID0gbWVudTsKLSAgICBtX2NvbnRleHRNZW51Q2xpZW50LT5zaG93
KG1fcGxhdGZvcm1EZXNjcmlwdGlvbik7CisgICAgZXdrX2NvbnRleHRfbWVudV9zaG93KHN0YXRp
Y19jYXN0PEV3a19Db250ZXh0X01lbnUqPihtX3BsYXRmb3JtRGVzY3JpcHRpb24pKTsKIH0KIAog
UGxhdGZvcm1NZW51RGVzY3JpcHRpb24gQ29udGV4dE1lbnU6OnBsYXRmb3JtRGVzY3JpcHRpb24o
KSBjb25zdApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9lZmwvQ29udGV4dE1lbnVJdGVtRWZsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2VmbC9Db250ZXh0TWVudUl0ZW1FZmwu
Y3BwCShyZXZpc2lvbiA3MzQ2OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZWZsL0NvbnRleHRNZW51
SXRlbUVmbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNiw4ICsxMTYsNyBAQCB2b2lkIENvbnRl
eHRNZW51SXRlbTo6c2V0U3ViTWVudShDb250ZXh0CiAgICAgICAgIHJldHVybjsKIAogICAgIG1f
cGxhdGZvcm1EZXNjcmlwdGlvbi50eXBlID0gU3VibWVudVR5cGU7Ci0gICAgbV9wbGF0Zm9ybURl
c2NyaXB0aW9uLnN1Yk1lbnUgPSBuZXcgQ29udGV4dE1lbnUoc3ViTWVudS0+aGl0VGVzdFJlc3Vs
dCgpLAotICAgICAgICAgICAgc3ViTWVudS0+cmVsZWFzZVBsYXRmb3JtRGVzY3JpcHRpb24oKSk7
CisgICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9uLnN1Yk1lbnUgPSBuZXcgQ29udGV4dE1lbnUoc3Vi
TWVudS0+cmVsZWFzZVBsYXRmb3JtRGVzY3JpcHRpb24oKSk7CiB9CiAKIGJvb2wgQ29udGV4dE1l
bnVJdGVtOjpjaGVja2VkKCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3RrL0NvbnRl
eHRNZW51R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2d0ay9Db250ZXh0
TWVudUd0ay5jcHAJKHJldmlzaW9uIDczNDY5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ29u
dGV4dE1lbnVHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw4ICszNCw3IEBAIHN0YXRpYyB2
b2lkIG1lbnVJdGVtQWN0aXZhdGVkKEd0a01lbnVJdGUKICAgICBjb250cm9sbGVyLT5jb250ZXh0
TWVudUl0ZW1TZWxlY3RlZCgmY29udGV4dEl0ZW0pOwogfQogCi1Db250ZXh0TWVudTo6Q29udGV4
dE1lbnUoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0KQotICAgIDogbV9oaXRUZXN0UmVzdWx0
KHJlc3VsdCkKK0NvbnRleHRNZW51OjpDb250ZXh0TWVudSgpCiB7CiAgICAgbV9wbGF0Zm9ybURl
c2NyaXB0aW9uID0gR1RLX01FTlUoZ3RrX21lbnVfbmV3KCkpOwogCkBAIC01MSw3ICs1MCw2IEBA
IENvbnRleHRNZW51Ojp+Q29udGV4dE1lbnUoKQogdm9pZCBDb250ZXh0TWVudTo6YXBwZW5kSXRl
bShDb250ZXh0TWVudUl0ZW0mIGl0ZW0pCiB7CiAgICAgQVNTRVJUKG1fcGxhdGZvcm1EZXNjcmlw
dGlvbik7Ci0gICAgY2hlY2tPckVuYWJsZUlmTmVlZGVkKGl0ZW0pOwogCiAgICAgQ29udGV4dE1l
bnVJdGVtVHlwZSB0eXBlID0gaXRlbS50eXBlKCk7CiAgICAgR3RrTWVudUl0ZW0qIHBsYXRmb3Jt
SXRlbSA9IENvbnRleHRNZW51SXRlbTo6Y3JlYXRlTmF0aXZlTWVudUl0ZW0oaXRlbS5yZWxlYXNl
UGxhdGZvcm1EZXNjcmlwdGlvbigpKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvQ29u
dGV4dE1lbnVIYWlrdS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9D
b250ZXh0TWVudUhhaWt1LmNwcAkocmV2aXNpb24gNzM0NjkpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2hhaWt1L0NvbnRleHRNZW51SGFpa3UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSw5ICs3NSw4
IEBAIHByaXZhdGU6CiAgICAgaW50IG1fcmVzdWx0OwogfTsKIAotQ29udGV4dE1lbnU6OkNvbnRl
eHRNZW51KGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCkKLSAgICA6IG1faGl0VGVzdFJlc3Vs
dChyZXN1bHQpCi0gICAgLCBtX3BsYXRmb3JtRGVzY3JpcHRpb24obmV3IEJNZW51KCJjb250ZXh0
X21lbnUiKSkKK0NvbnRleHRNZW51OjpDb250ZXh0TWVudSgpCisgICAgOiBtX3BsYXRmb3JtRGVz
Y3JpcHRpb24obmV3IEJNZW51KCJjb250ZXh0X21lbnUiKSkKIHsKIH0KIApAQCAtODgsOCArODcs
NiBAQCBDb250ZXh0TWVudTo6fkNvbnRleHRNZW51KCkKIAogdm9pZCBDb250ZXh0TWVudTo6YXBw
ZW5kSXRlbShDb250ZXh0TWVudUl0ZW0mIGl0ZW0pCiB7Ci0gICAgY2hlY2tPckVuYWJsZUlmTmVl
ZGVkKGl0ZW0pOwotCiAgICAgQk1lbnVJdGVtKiBtZW51SXRlbSA9IGl0ZW0ucmVsZWFzZVBsYXRm
b3JtRGVzY3JpcHRpb24oKTsKICAgICBpZiAobWVudUl0ZW0pCiAgICAgICAgIG1fcGxhdGZvcm1E
ZXNjcmlwdGlvbi0+QWRkSXRlbShtZW51SXRlbSk7CkBAIC0xMDIsOCArOTksNiBAQCB1bnNpZ25l
ZCBDb250ZXh0TWVudTo6aXRlbUNvdW50KCkgY29uc3QKIAogdm9pZCBDb250ZXh0TWVudTo6aW5z
ZXJ0SXRlbSh1bnNpZ25lZCBwb3NpdGlvbiwgQ29udGV4dE1lbnVJdGVtJiBpdGVtKQogewotICAg
IGNoZWNrT3JFbmFibGVJZk5lZWRlZChpdGVtKTsKLQogICAgIEJNZW51SXRlbSogbWVudUl0ZW0g
PSBpdGVtLnJlbGVhc2VQbGF0Zm9ybURlc2NyaXB0aW9uKCk7CiAgICAgaWYgKG1lbnVJdGVtKQog
ICAgICAgICBtX3BsYXRmb3JtRGVzY3JpcHRpb24tPkFkZEl0ZW0obWVudUl0ZW0sIHBvc2l0aW9u
KTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbWFjL0NvbnRleHRNZW51TWFjLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbWFjL0NvbnRleHRNZW51TWFjLm1tCShyZXZpc2lvbiA3
MzQ2OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vbWFjL0NvbnRleHRNZW51TWFjLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCwxNyArMzAsMTUgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1Db250
ZXh0TWVudTo6Q29udGV4dE1lbnUoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0KQotICAgIDog
bV9oaXRUZXN0UmVzdWx0KHJlc3VsdCkKK0NvbnRleHRNZW51OjpDb250ZXh0TWVudSgpCiB7CiAg
ICAgTlNNdXRhYmxlQXJyYXkqIGFycmF5ID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF07
CiAgICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9uID0gYXJyYXk7CiAgICAgW2FycmF5IHJlbGVhc2Vd
OwogfQogCi1Db250ZXh0TWVudTo6Q29udGV4dE1lbnUoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVz
dWx0LCBjb25zdCBQbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbiBtZW51KQotICAgIDogbV9oaXRUZXN0
UmVzdWx0KHJlc3VsdCkKLSAgICAsIG1fcGxhdGZvcm1EZXNjcmlwdGlvbihtZW51KQorQ29udGV4
dE1lbnU6OkNvbnRleHRNZW51KGNvbnN0IFBsYXRmb3JtTWVudURlc2NyaXB0aW9uIG1lbnUpCisg
ICAgOiBtX3BsYXRmb3JtRGVzY3JpcHRpb24obWVudSkKIHsKIH0KIApAQCAtNTAsOCArNDgsNiBA
QCBDb250ZXh0TWVudTo6fkNvbnRleHRNZW51KCkKIAogdm9pZCBDb250ZXh0TWVudTo6YXBwZW5k
SXRlbShDb250ZXh0TWVudUl0ZW0mIGl0ZW0pCiB7Ci0gICAgY2hlY2tPckVuYWJsZUlmTmVlZGVk
KGl0ZW0pOwotCiAgICAgTlNNZW51SXRlbSogcGxhdGZvcm1JdGVtID0gaXRlbS5yZWxlYXNlUGxh
dGZvcm1EZXNjcmlwdGlvbigpOwogCiAgICAgW21fcGxhdGZvcm1EZXNjcmlwdGlvbi5nZXQoKSBh
ZGRPYmplY3Q6cGxhdGZvcm1JdGVtXTsKQEAgLTYwLDggKzU2LDYgQEAgdm9pZCBDb250ZXh0TWVu
dTo6YXBwZW5kSXRlbShDb250ZXh0TWVudQogCiB2b2lkIENvbnRleHRNZW51OjppbnNlcnRJdGVt
KHVuc2lnbmVkIHBvc2l0aW9uLCBDb250ZXh0TWVudUl0ZW0mIGl0ZW0pCiB7Ci0gICAgY2hlY2tP
ckVuYWJsZUlmTmVlZGVkKGl0ZW0pOwotCiAgICAgTlNNZW51SXRlbSogcGxhdGZvcm1JdGVtID0g
aXRlbS5yZWxlYXNlUGxhdGZvcm1EZXNjcmlwdGlvbigpOwogCiAgICAgW21fcGxhdGZvcm1EZXNj
cmlwdGlvbi5nZXQoKSBpbnNlcnRPYmplY3Q6cGxhdGZvcm1JdGVtIGF0SW5kZXg6cG9zaXRpb25d
OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9xdC9Db250ZXh0TWVudVF0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3F0L0NvbnRleHRNZW51UXQuY3BwCShyZXZpc2lvbiA3MzQ2
OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vcXQvQ29udGV4dE1lbnVRdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM1LDggKzM1LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1Db250ZXh0TWVu
dTo6Q29udGV4dE1lbnUoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0KQotICAgIDogbV9oaXRU
ZXN0UmVzdWx0KHJlc3VsdCkKK0NvbnRleHRNZW51OjpDb250ZXh0TWVudSgpCiB7CiB9CiAKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vd2luL0NvbnRleHRNZW51V2luLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL3dpbi9Db250ZXh0TWVudVdpbi5jcHAJKHJldmlzaW9uIDczNDY5
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ29udGV4dE1lbnVXaW4uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00Myw5ICs0Myw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ29udGV4dE1l
bnU6OkNvbnRleHRNZW51KGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCkKLSAgICA6IG1faGl0
VGVzdFJlc3VsdChyZXN1bHQpCi0gICAgLCBtX3BsYXRmb3JtRGVzY3JpcHRpb24oMCkKK0NvbnRl
eHRNZW51OjpDb250ZXh0TWVudSgpCisgICAgOiBtX3BsYXRmb3JtRGVzY3JpcHRpb24oMCkKICNp
ZiBPUyhXSU5DRSkKICAgICAsIG1faXRlbUNvdW50KDApCiAjZW5kaWYKQEAgLTUzLDkgKzUyLDgg
QEAgQ29udGV4dE1lbnU6OkNvbnRleHRNZW51KGNvbnN0IEhpdFRlc3RSZQogICAgIHNldFBsYXRm
b3JtRGVzY3JpcHRpb24oOjpDcmVhdGVQb3B1cE1lbnUoKSk7CiB9CiAKLUNvbnRleHRNZW51OjpD
b250ZXh0TWVudShjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IFBsYXRmb3JtTWVu
dURlc2NyaXB0aW9uIG1lbnUpCi0gICAgOiBtX2hpdFRlc3RSZXN1bHQocmVzdWx0KQotICAgICwg
bV9wbGF0Zm9ybURlc2NyaXB0aW9uKDApCitDb250ZXh0TWVudTo6Q29udGV4dE1lbnUoY29uc3Qg
UGxhdGZvcm1NZW51RGVzY3JpcHRpb24gbWVudSkKKyAgICA6IG1fcGxhdGZvcm1EZXNjcmlwdGlv
bigwKQogI2lmIE9TKFdJTkNFKQogICAgICwgbV9pdGVtQ291bnQoMCkKICNlbmRpZgpAQCAtMTE4
LDggKzExNiw2IEBAIHZvaWQgQ29udGV4dE1lbnU6Omluc2VydEl0ZW0odW5zaWduZWQgaW4KICAg
ICBpZiAoIW1fcGxhdGZvcm1EZXNjcmlwdGlvbikKICAgICAgICAgcmV0dXJuOwogCi0gICAgY2hl
Y2tPckVuYWJsZUlmTmVlZGVkKGl0ZW0pOwotCiAjaWYgT1MoV0lOQ0UpCiAgICAgaWYgKGluc2Vy
dE1lbnVJdGVtKG1fcGxhdGZvcm1EZXNjcmlwdGlvbiwgcG9zaXRpb24sIGl0ZW0pKQogICAgICAg
ICArK21faXRlbUNvdW50OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS93eC9Db250ZXh0TWVudVd4
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3d4L0NvbnRleHRNZW51V3guY3Bw
CShyZXZpc2lvbiA3MzQ2OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vd3gvQ29udGV4dE1lbnVXeC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgQ29udGV4dE1lbnVJdGVtKiBDb250
ZXh0TWVudTo6aXRlbVdpdGhJZAogICAgIHJldHVybiBuZXcgQ29udGV4dE1lbnVJdGVtKEFjdGlv
blR5cGUsIHNfaXRlbUFjdGlvbnMuZ2V0KGlkKSwgIiIpOwogfQogCi1Db250ZXh0TWVudTo6Q29u
dGV4dE1lbnUoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0KSA6IG1faGl0VGVzdFJlc3VsdChy
ZXN1bHQpCitDb250ZXh0TWVudTo6Q29udGV4dE1lbnUoKQogewogICAgIG1fcGxhdGZvcm1EZXNj
cmlwdGlvbiA9IG5ldyB3eE1lbnUoMCk7CiB9CkBAIC01Nyw4ICs1Nyw2IEBAIHZvaWQgQ29udGV4
dE1lbnU6OmFwcGVuZEl0ZW0oQ29udGV4dE1lbnUKIHsKICAgICBpZiAoIW1fcGxhdGZvcm1EZXNj
cmlwdGlvbikKICAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGNoZWNrT3JFbmFibGVJZk5lZWRl
ZChpdGVtKTsKICAgICAgICAgCiAgICAgUGxhdGZvcm1NZW51SXRlbURlc2NyaXB0aW9uIGl0ZW1E
ZXNjcmlwdGlvbiA9IGl0ZW0ucmVsZWFzZVBsYXRmb3JtRGVzY3JpcHRpb24oKTsgICAgCiAgICAg
d3hJdGVtS2luZCBtZW51S2luZFd4ID0gKCBpdGVtRGVzY3JpcHRpb24udHlwZSA9PSBDaGVja2Fi
bGVBY3Rpb25UeXBlICkgPyB3eElURU1fQ0hFQ0sgOiB3eElURU1fTk9STUFMOwpJbmRleDogV2Vi
Q29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9y
ZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAJKHJldmlzaW9uIDczNDY5KQorKysgV2ViQ29yZS9y
ZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDE2
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAor
SGl0VGVzdFJlc3VsdDo6SGl0VGVzdFJlc3VsdCgpCisgICAgOiBtX2lzT3ZlcldpZGdldChmYWxz
ZSkKKyAgICAsIG1faXNSZWN0QmFzZWQoZmFsc2UpCisgICAgLCBtX3RvcFBhZGRpbmcoMCkKKyAg
ICAsIG1fcmlnaHRQYWRkaW5nKDApCisgICAgLCBtX2JvdHRvbVBhZGRpbmcoMCkKKyAgICAsIG1f
bGVmdFBhZGRpbmcoMCkKK3sKK30KKwogSGl0VGVzdFJlc3VsdDo6SGl0VGVzdFJlc3VsdChjb25z
dCBJbnRQb2ludCYgcG9pbnQpCiAgICAgOiBtX3BvaW50KHBvaW50KQogICAgICwgbV9pc092ZXJX
aWRnZXQoZmFsc2UpCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5oCShyZXZpc2lvbiA3
MzQ2OSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuaAkod29ya2luZyBjb3B5
KQpAQCAtNDMsNiArNDMsNyBAQCBjbGFzcyBTY3JvbGxiYXI7CiAKIGNsYXNzIEhpdFRlc3RSZXN1
bHQgewogcHVibGljOgorICAgIEhpdFRlc3RSZXN1bHQoKTsKICAgICBIaXRUZXN0UmVzdWx0KGNv
bnN0IEludFBvaW50Jik7CiAgICAgLy8gUGFzcyBub24tbmVnYXRpdmUgcGFkZGluZyB2YWx1ZXMg
dG8gcGVyZm9ybSBhIHJlY3QtYmFzZWQgaGl0IHRlc3QuCiAgICAgSGl0VGVzdFJlc3VsdChjb25z
dCBJbnRQb2ludCYgY2VudGVyUG9pbnQsIHVuc2lnbmVkIHRvcFBhZGRpbmcsIHVuc2lnbmVkIHJp
Z2h0UGFkZGluZywgdW5zaWduZWQgYm90dG9tUGFkZGluZywgdW5zaWduZWQgbGVmdFBhZGRpbmcp
OwpJbmRleDogV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9DaGFuZ2VM
b2cJKHJldmlzaW9uIDczNDkwKQorKysgV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxOSBAQAorMjAxMC0xMi0wNyAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVp
bkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgTGF5ZXJpbmcgVmlvbGF0aW9uIGluIENvbnRleHRNZW51IC0gbWVtYmVyIHZhcmlhYmxl
IG9mIHR5cGUgSGl0VGVzdFJlc3VsdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NTA1ODYKKyAgICAgICAgCisgICAgICAgIFVwZGF0ZSB1c2VycyBvZiBD
b250ZXh0TWVudSBhbmQgQ29udGV4dE1lbnVDb250cm9sbGVyIHRvIG1hdGNoIHdoZXJlIHRoZSBu
ZXcgZnVuY3Rpb25zIAorICAgICAgICBhcmUgbG9jYXRlZC4KKworICAgICAgICAqIFNoYXJlZC9X
ZWJDb250ZXh0TWVudUl0ZW1EYXRhLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4dE1l
bnVJdGVtRGF0YTo6V2ViQ29udGV4dE1lbnVJdGVtRGF0YSk6IFJlbW92ZSB0aGUgY2FsbCB0byBj
aGVja09yRW5hYmxlSXRlbSwgdGhhdCBjYWxsIHdpbGwgYmUgbWFkZSB3aGVuCisgICAgICAgICAg
ICB0aGUgQ29udGV4dE1lbnVJdGVtIGlzIGFkZGVkIHRvIHRoZSBDb250ZXh0TWVudSB0aHJvdWdo
IHRoZSBDb250ZXh0TWVudUNvbnRyb2xsZXIuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYkNvbnRleHRNZW51LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4dE1lbnU6OnNo
b3cpOgorCiAyMDEwLTEyLTA3ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KSW5kZXg6IFdlYktpdDIvU2hhcmVk
L1dlYkNvbnRleHRNZW51SXRlbURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvU2hhcmVk
L1dlYkNvbnRleHRNZW51SXRlbURhdGEuY3BwCShyZXZpc2lvbiA3MzQ2OSkKKysrIFdlYktpdDIv
U2hhcmVkL1dlYkNvbnRleHRNZW51SXRlbURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw4
ICs3Myw2IEBAIFdlYkNvbnRleHRNZW51SXRlbURhdGE6OldlYkNvbnRleHRNZW51SXQKICAgICAg
ICAgbV9zdWJtZW51ID0ga2l0SXRlbXMoY29yZVN1Ym1lbnUsIG1lbnUpOwogICAgIH0KICAgICAK
LSAgICBtZW51LT5jaGVja09yRW5hYmxlSWZOZWVkZWQoaXRlbSk7Ci0gICAgCiAgICAgbV9lbmFi
bGVkID0gaXRlbS5lbmFibGVkKCk7CiAgICAgbV9jaGVja2VkID0gaXRlbS5jaGVja2VkKCk7CiB9
CkluZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJDb250ZXh0TWVudS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQ29udGV4dE1lbnUuY3Bw
CShyZXZpc2lvbiA3MzQ2OSkKKysrIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkNvbnRl
eHRNZW51LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsMTAgKzQ3LDEzIEBAIFdlYkNvbnRleHRN
ZW51Ojp+V2ViQ29udGV4dE1lbnUoKQogCiB2b2lkIFdlYkNvbnRleHRNZW51OjpzaG93KCkKIHsK
LSAgICBDb250ZXh0TWVudSogbWVudSA9IG1fcGFnZS0+Y29yZVBhZ2UoKS0+Y29udGV4dE1lbnVD
b250cm9sbGVyKCktPmNvbnRleHRNZW51KCk7CisgICAgQ29udGV4dE1lbnVDb250cm9sbGVyKiBj
b250cm9sbGVyID0gbV9wYWdlLT5jb3JlUGFnZSgpLT5jb250ZXh0TWVudUNvbnRyb2xsZXIoKTsK
KyAgICBpZiAoIWNvbnRyb2xsZXIpCisgICAgICAgIHJldHVybjsKKyAgICBDb250ZXh0TWVudSog
bWVudSA9IGNvbnRyb2xsZXItPmNvbnRleHRNZW51KCk7CiAgICAgaWYgKCFtZW51KQogICAgICAg
ICByZXR1cm47Ci0gICAgTm9kZSogbm9kZSA9IG1lbnUtPmhpdFRlc3RSZXN1bHQoKS5pbm5lck5v
blNoYXJlZE5vZGUoKTsKKyAgICBOb2RlKiBub2RlID0gY29udHJvbGxlci0+aGl0VGVzdFJlc3Vs
dCgpLmlubmVyTm9uU2hhcmVkTm9kZSgpOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJu
OwogICAgIEZyYW1lKiBmcmFtZSA9IG5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCk7CkBAIC02NSwx
MiArNjgsMTIgQEAgdm9pZCBXZWJDb250ZXh0TWVudTo6c2hvdygpCiAgICAgVmVjdG9yPFdlYkNv
bnRleHRNZW51SXRlbURhdGE+IHByb3Bvc2VkTWVudSA9IGtpdEl0ZW1zKGNvcmVJdGVtcywgbWVu
dSk7CiAgICAgVmVjdG9yPFdlYkNvbnRleHRNZW51SXRlbURhdGE+IG5ld01lbnU7CiAgICAgUmVm
UHRyPEFQSU9iamVjdD4gdXNlckRhdGE7Ci0gICAgUmVmUHRyPEluamVjdGVkQnVuZGxlSGl0VGVz
dFJlc3VsdD4gaGl0VGVzdFJlc3VsdCA9IEluamVjdGVkQnVuZGxlSGl0VGVzdFJlc3VsdDo6Y3Jl
YXRlKG1lbnUtPmhpdFRlc3RSZXN1bHQoKSk7CisgICAgUmVmUHRyPEluamVjdGVkQnVuZGxlSGl0
VGVzdFJlc3VsdD4gaGl0VGVzdFJlc3VsdCA9IEluamVjdGVkQnVuZGxlSGl0VGVzdFJlc3VsdDo6
Y3JlYXRlKGNvbnRyb2xsZXItPmhpdFRlc3RSZXN1bHQoKSk7CiAgICAgaWYgKG1fcGFnZS0+aW5q
ZWN0ZWRCdW5kbGVDb250ZXh0TWVudUNsaWVudCgpLmdldEN1c3RvbU1lbnVGcm9tRGVmYXVsdEl0
ZW1zKG1fcGFnZSwgaGl0VGVzdFJlc3VsdC5nZXQoKSwgcHJvcG9zZWRNZW51LCBuZXdNZW51LCB1
c2VyRGF0YSkpCiAgICAgICAgIHByb3Bvc2VkTWVudSA9IG5ld01lbnU7CiAKICAgICAvLyBOb3Rp
ZnkgdGhlIFVJUHJvY2Vzcy4KLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94
eTo6U2hvd0NvbnRleHRNZW51KHZpZXctPmNvbnRlbnRzVG9XaW5kb3cobWVudS0+aGl0VGVzdFJl
c3VsdCgpLnBvaW50KCkpLCBwcm9wb3NlZE1lbnUsIEluamVjdGVkQnVuZGxlVXNlck1lc3NhZ2VF
bmNvZGVyKHVzZXJEYXRhLmdldCgpKSkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2Vi
UGFnZVByb3h5OjpTaG93Q29udGV4dE1lbnUodmlldy0+Y29udGVudHNUb1dpbmRvdyhjb250cm9s
bGVyLT5oaXRUZXN0UmVzdWx0KCkucG9pbnQoKSksIHByb3Bvc2VkTWVudSwgSW5qZWN0ZWRCdW5k
bGVVc2VyTWVzc2FnZUVuY29kZXIodXNlckRhdGEuZ2V0KCkpKSk7CiB9CiAKIHZvaWQgV2ViQ29u
dGV4dE1lbnU6Oml0ZW1TZWxlY3RlZChjb25zdCBXZWJDb250ZXh0TWVudUl0ZW1EYXRhJiBpdGVt
KQpJbmRleDogV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA3MzQ4NykKKysrIFdlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAxMC0xMi0wNyAgQnJp
YW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTGF5ZXJpbmcgVmlvbGF0aW9uIGluIENvbnRl
eHRNZW51IC0gbWVtYmVyIHZhcmlhYmxlIG9mIHR5cGUgSGl0VGVzdFJlc3VsdAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTA1ODYKKyAgICAgICAgCisg
ICAgICAgIFVwZGF0ZSB1c2VycyBvZiBDb250ZXh0TWVudSBhbmQgQ29udGV4dE1lbnVDb250cm9s
bGVyIHRvIG1hdGNoIHdoZXJlIHRoZSBuZXcgZnVuY3Rpb25zIAorICAgICAgICBhcmUgbG9jYXRl
ZC4KKworICAgICAgICAqIHNyYy9Db250ZXh0TWVudUNsaWVudEltcGwuY3BwOgorICAgICAgICAo
V2ViS2l0OjpzZWxlY3RNaXNzcGVsbGVkV29yZCk6CisgICAgICAgIChXZWJLaXQ6OkNvbnRleHRN
ZW51Q2xpZW50SW1wbDo6Z2V0Q3VzdG9tTWVudUZyb21EZWZhdWx0SXRlbXMpOgorCiAyMDEwLTEy
LTA2ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBTYW0gV2VpbmlnLgpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9Db250ZXh0TWVudUNsaWVu
dEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvQ29udGV4dE1lbnVD
bGllbnRJbXBsLmNwcAkocmV2aXNpb24gNzM0NjkpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL0Nv
bnRleHRNZW51Q2xpZW50SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAK
ICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiQ1NTU3R5bGVEZWNsYXJh
dGlvbi5oIgogI2luY2x1ZGUgIkNvbnRleHRNZW51LmgiCisjaW5jbHVkZSAiQ29udGV4dE1lbnVD
b250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudExv
YWRlci5oIgogI2luY2x1ZGUgIkVkaXRvci5oIgpAQCAtNDUsNiArNDYsNyBAQAogI2luY2x1ZGUg
IkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJNZWRpYUVycm9yLmgi
CisjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyV2lkZ2V0LmgiCiAjaW5jbHVkZSAiVGV4dEJyZWFrSXRlcmF0b3IuaCIKQEAgLTEx
MCw3ICsxMTIsNyBAQCBzdGF0aWMgU3RyaW5nIHNlbGVjdE1pc3NwZWxsZWRXb3JkKGNvbnN0CiAK
ICAgICAvLyBTZWxlY3Rpb24gaXMgZW1wdHksIHNvIGNoYW5nZSB0aGUgc2VsZWN0aW9uIHRvIHRo
ZSB3b3JkIHVuZGVyIHRoZSBjdXJzb3IuCiAgICAgSGl0VGVzdFJlc3VsdCBoaXRUZXN0UmVzdWx0
ID0gc2VsZWN0ZWRGcmFtZS0+ZXZlbnRIYW5kbGVyKCktPgotICAgICAgICBoaXRUZXN0UmVzdWx0
QXRQb2ludChkZWZhdWx0TWVudS0+aGl0VGVzdFJlc3VsdCgpLnBvaW50KCksIHRydWUpOworICAg
ICAgICBoaXRUZXN0UmVzdWx0QXRQb2ludChzZWxlY3RlZEZyYW1lLT5wYWdlKCktPmNvbnRleHRN
ZW51Q29udHJvbGxlcigpLT5oaXRUZXN0UmVzdWx0KCkucG9pbnQoKSwgdHJ1ZSk7CiAgICAgTm9k
ZSogaW5uZXJOb2RlID0gaGl0VGVzdFJlc3VsdC5pbm5lck5vZGUoKTsKICAgICBWaXNpYmxlUG9z
aXRpb24gcG9zKGlubmVyTm9kZS0+cmVuZGVyZXIoKS0+cG9zaXRpb25Gb3JQb2ludCgKICAgICAg
ICAgaGl0VGVzdFJlc3VsdC5sb2NhbFBvaW50KCkpKTsKQEAgLTE0NCw3ICsxNDYsNyBAQCBQbGF0
Zm9ybU1lbnVEZXNjcmlwdGlvbiBDb250ZXh0TWVudUNsaWVuCiAgICAgaWYgKCFtX3dlYlZpZXct
PmNvbnRleHRNZW51QWxsb3dlZCgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIEhpdFRlc3RS
ZXN1bHQgciA9IGRlZmF1bHRNZW51LT5oaXRUZXN0UmVzdWx0KCk7CisgICAgSGl0VGVzdFJlc3Vs
dCByID0gbV93ZWJWaWV3LT5wYWdlKCktPmNvbnRleHRNZW51Q29udHJvbGxlcigpLT5oaXRUZXN0
UmVzdWx0KCk7CiAgICAgRnJhbWUqIHNlbGVjdGVkRnJhbWUgPSByLmlubmVyTm9uU2hhcmVkTm9k
ZSgpLT5kb2N1bWVudCgpLT5mcmFtZSgpOwogCiAgICAgV2ViQ29udGV4dE1lbnVEYXRhIGRhdGE7
CkluZGV4OiBXZWJLaXQvZ3RrL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL0No
YW5nZUxvZwkocmV2aXNpb24gNzM1MjgpCisrKyBXZWJLaXQvZ3RrL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDEwLTEyLTA4ICBCcmlhbiBXZWluc3RlaW4gIDxi
d2VpbnN0ZWluQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBMYXllcmluZyBWaW9sYXRpb24gaW4gQ29udGV4dE1lbnUgLSBtZW1iZXIg
dmFyaWFibGUgb2YgdHlwZSBIaXRUZXN0UmVzdWx0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MDU4NgorICAgICAgICAKKyAgICAgICAgVXBkYXRlIHVz
ZXJzIG9mIENvbnRleHRNZW51IGFuZCBDb250ZXh0TWVudUNvbnRyb2xsZXIgdG8gbWF0Y2ggd2hl
cmUgdGhlIG5ldyBmdW5jdGlvbnMgCisgICAgICAgIGFyZSBsb2NhdGVkLgorCisgICAgICAgICog
V2ViQ29yZVN1cHBvcnQvQ29udGV4dE1lbnVDbGllbnRHdGsuY3BwOgorICAgICAgICAoV2ViS2l0
OjpDb250ZXh0TWVudUNsaWVudDo6Z2V0Q3VzdG9tTWVudUZyb21EZWZhdWx0SXRlbXMpOgorCiAy
MDEwLTEyLTA4ICBBbnRvbmlvIEdvbWVzICA8YWdvbWVzQHJpbS5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgTWFydGluIFJvYmluc29uLgpJbmRleDogV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9y
dC9Db250ZXh0TWVudUNsaWVudEd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9XZWJD
b3JlU3VwcG9ydC9Db250ZXh0TWVudUNsaWVudEd0ay5jcHAJKHJldmlzaW9uIDczNDY5KQorKysg
V2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9Db250ZXh0TWVudUNsaWVudEd0ay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIwLDEwICsyMCwxMiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIkNvbnRleHRNZW51LmgiCiAjaW5jbHVkZSAiQ29udGV4dE1lbnVDbGllbnRHdGsuaCIKKyNp
bmNsdWRlICJDb250ZXh0TWVudUNvbnRyb2xsZXIuaCIKIAogI2luY2x1ZGUgIkhpdFRlc3RSZXN1
bHQuaCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNp
bmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaW5jbHVk
ZSA8Z2xpYi9naTE4bi1saWIuaD4KQEAgLTEyOSw4ICsxMzEsOCBAQCBQbGF0Zm9ybU1lbnVEZXNj
cmlwdGlvbiBDb250ZXh0TWVudUNsaWVuCiB7CiAgICAgR3RrTWVudSogZ3RrbWVudSA9IG1lbnUt
PnJlbGVhc2VQbGF0Zm9ybURlc2NyaXB0aW9uKCk7CiAKLSAgICBIaXRUZXN0UmVzdWx0IHJlc3Vs
dCA9IG1lbnUtPmhpdFRlc3RSZXN1bHQoKTsKICAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0g
bV93ZWJWaWV3OworICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0ID0gY29yZSh3ZWJWaWV3KS0+Y29u
dGV4dE1lbnVDb250cm9sbGVyKCktPmhpdFRlc3RSZXN1bHQoKTsKIAogICAgIGlmIChyZXN1bHQu
aXNDb250ZW50RWRpdGFibGUoKSkgewogCkluZGV4OiBXZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gNzM0OTApCisrKyBXZWJL
aXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDEwLTEy
LTA3ICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBMYXllcmluZyBWaW9sYXRpb24g
aW4gQ29udGV4dE1lbnUgLSBtZW1iZXIgdmFyaWFibGUgb2YgdHlwZSBIaXRUZXN0UmVzdWx0Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MDU4NgorICAg
ICAgICAKKyAgICAgICAgVXBkYXRlIHVzZXJzIG9mIENvbnRleHRNZW51IGFuZCBDb250ZXh0TWVu
dUNvbnRyb2xsZXIgdG8gbWF0Y2ggd2hlcmUgdGhlIG5ldyBmdW5jdGlvbnMgCisgICAgICAgIGFy
ZSBsb2NhdGVkLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViQ29udGV4dE1lbnVDbGll
bnQubW06CisgICAgICAgIChXZWJDb250ZXh0TWVudUNsaWVudDo6Z2V0Q3VzdG9tTWVudUZyb21E
ZWZhdWx0SXRlbXMpOgorICAgICAgICAoV2ViQ29udGV4dE1lbnVDbGllbnQ6OmNvbnRleHRNZW51
SXRlbVNlbGVjdGVkKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYkhUTUxWaWV3Lm1tOgorICAgICAg
ICAoLVtXZWJNZW51VGFyZ2V0IHZhbGlkYXRlTWVudUl0ZW06XSk6CisKIDIwMTAtMTItMDcgIEJy
aWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IEpvaG4gU3VsbGl2YW4uCkluZGV4OiBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNv
bnRleHRNZW51Q2xpZW50Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBv
cnQvV2ViQ29udGV4dE1lbnVDbGllbnQubW0JKHJldmlzaW9uIDczNDY5KQorKysgV2ViS2l0L21h
Yy9XZWJDb3JlU3VwcG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5tbQkod29ya2luZyBjb3B5KQpA
QCAtNDIsOCArNDIsMTAgQEAKICNpbXBvcnQgIldlYlZpZXdGYWN0b3J5LmgiCiAjaW1wb3J0ICJX
ZWJWaWV3SW50ZXJuYWwuaCIKICNpbXBvcnQgPFdlYkNvcmUvQ29udGV4dE1lbnUuaD4KKyNpbXBv
cnQgPFdlYkNvcmUvQ29udGV4dE1lbnVDb250cm9sbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0tV
UkwuaD4KICNpbXBvcnQgPFdlYkNvcmUvTG9jYWxpemVkU3RyaW5ncy5oPgorI2ltcG9ydCA8V2Vi
Q29yZS9QYWdlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1J1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5o
PgogI2ltcG9ydCA8V2ViS2l0L0RPTVByaXZhdGUuaD4KIApAQCAtMjc4LDcgKzI4MCw3IEBAIE5T
TXV0YWJsZUFycmF5KiBXZWJDb250ZXh0TWVudUNsaWVudDo6Z2UKICAgICBpZiAoIVtkZWxlZ2F0
ZSByZXNwb25kc1RvU2VsZWN0b3I6c2VsZWN0b3JdKQogICAgICAgICByZXR1cm4gZGVmYXVsdE1l
bnUtPnBsYXRmb3JtRGVzY3JpcHRpb24oKTsKIAotICAgIE5TRGljdGlvbmFyeSAqZWxlbWVudCA9
IFtbW1dlYkVsZW1lbnREaWN0aW9uYXJ5IGFsbG9jXSBpbml0V2l0aEhpdFRlc3RSZXN1bHQ6ZGVm
YXVsdE1lbnUtPmhpdFRlc3RSZXN1bHQoKV0gYXV0b3JlbGVhc2VdOworICAgIE5TRGljdGlvbmFy
eSAqZWxlbWVudCA9IFtbW1dlYkVsZW1lbnREaWN0aW9uYXJ5IGFsbG9jXSBpbml0V2l0aEhpdFRl
c3RSZXN1bHQ6W21fd2ViVmlldyBwYWdlXS0+Y29udGV4dE1lbnVDb250cm9sbGVyKCktPmhpdFRl
c3RSZXN1bHQoKV0gYXV0b3JlbGVhc2VdOwogCiAgICAgQk9PTCBwcmVWZXJzaW9uM0NsaWVudCA9
IGlzUHJlVmVyc2lvbjNDbGllbnQoKTsKICAgICBpZiAocHJlVmVyc2lvbjNDbGllbnQpIHsKQEAg
LTMwOCw3ICszMTAsNyBAQCB2b2lkIFdlYkNvbnRleHRNZW51Q2xpZW50Ojpjb250ZXh0TWVudUl0
CiAgICAgaWQgZGVsZWdhdGUgPSBbbV93ZWJWaWV3IFVJRGVsZWdhdGVdOwogICAgIFNFTCBzZWxl
Y3RvciA9IEBzZWxlY3Rvcih3ZWJWaWV3OmNvbnRleHRNZW51SXRlbVNlbGVjdGVkOmZvckVsZW1l
bnQ6KTsKICAgICBpZiAoW2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpzZWxlY3Rvcl0pIHsK
LSAgICAgICAgTlNEaWN0aW9uYXJ5ICplbGVtZW50ID0gW1tXZWJFbGVtZW50RGljdGlvbmFyeSBh
bGxvY10gaW5pdFdpdGhIaXRUZXN0UmVzdWx0OnBhcmVudE1lbnUtPmhpdFRlc3RSZXN1bHQoKV07
CisgICAgICAgIE5TRGljdGlvbmFyeSAqZWxlbWVudCA9IFtbV2ViRWxlbWVudERpY3Rpb25hcnkg
YWxsb2NdIGluaXRXaXRoSGl0VGVzdFJlc3VsdDpbbV93ZWJWaWV3IHBhZ2VdLT5jb250ZXh0TWVu
dUNvbnRyb2xsZXIoKS0+aGl0VGVzdFJlc3VsdCgpXTsKICAgICAgICAgTlNNZW51SXRlbSAqcGxh
dGZvcm1JdGVtID0gaXRlbS0+cmVsZWFzZVBsYXRmb3JtRGVzY3JpcHRpb24oKTsKIAogICAgICAg
ICBDYWxsVUlEZWxlZ2F0ZShtX3dlYlZpZXcsIHNlbGVjdG9yLCBwbGF0Zm9ybUl0ZW0sIGVsZW1l
bnQpOwpJbmRleDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQkocmV2aXNpb24gNzM0NjkpCisr
KyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTE3
MCw3ICsxNzAsNyBAQCAtIChCT09MKXZhbGlkYXRlTWVudUl0ZW06KE5TTWVudUl0ZW0gKilpCiB7
CiAgICAgV2ViQ29yZTo6Q29udGV4dE1lbnVJdGVtIGNvcmVJdGVtKGl0ZW0pOwogICAgIEFTU0VS
VChfbWVudUNvbnRyb2xsZXItPmNvbnRleHRNZW51KCkpOwotICAgIF9tZW51Q29udHJvbGxlci0+
Y29udGV4dE1lbnUoKS0+Y2hlY2tPckVuYWJsZUlmTmVlZGVkKGNvcmVJdGVtKTsKKyAgICBfbWVu
dUNvbnRyb2xsZXItPmNoZWNrT3JFbmFibGVJZk5lZWRlZChjb3JlSXRlbSk7CiAgICAgcmV0dXJu
IGNvcmVJdGVtLmVuYWJsZWQoKTsKIH0KIApJbmRleDogV2ViS2l0L3F0L0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lvbiA3MzQ2OSkKKysrIFdlYktp
dC9xdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAxMC0xMi0w
NyAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTGF5ZXJpbmcgVmlvbGF0aW9uIGlu
IENvbnRleHRNZW51IC0gbWVtYmVyIHZhcmlhYmxlIG9mIHR5cGUgSGl0VGVzdFJlc3VsdAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTA1ODYKKyAgICAg
ICAgCisgICAgICAgIFVwZGF0ZSB1c2VycyBvZiBDb250ZXh0TWVudSBhbmQgQ29udGV4dE1lbnVD
b250cm9sbGVyIHRvIG1hdGNoIHdoZXJlIHRoZSBuZXcgZnVuY3Rpb25zIAorICAgICAgICBhcmUg
bG9jYXRlZC4KKworICAgICAgICAqIEFwaS9xd2VicGFnZS5jcHA6CisgICAgICAgIChRV2ViUGFn
ZVByaXZhdGU6OmNyZWF0ZUNvbnRleHRNZW51KToKKyAgICAgICAgKFFXZWJQYWdlOjp1cGRhdGVQ
b3NpdGlvbkRlcGVuZGVudEFjdGlvbnMpOgorCiAyMDEwLTEyLTA3ICBEYXJpbiBBZGxlciAgPGRh
cmluQGFwcGxlLmNvbT4KIAogICAgICAgICBUcnkgdG8gZml4IGJ1aWxkLgpJbmRleDogV2ViS2l0
L3F0L0FwaS9xd2VicGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L0FwaS9xd2VicGFn
ZS5jcHAJKHJldmlzaW9uIDczNDY5KQorKysgV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ0Myw3ICs0NDMsNyBAQCBRTWVudSAqUVdlYlBhZ2VQcml2YXRlOjpj
cmVhdGVDb250ZXh0TWVuCiAgICAgICAgICAgICAgICAgUUFjdGlvbiAqYSA9IHEtPmFjdGlvbihh
Y3Rpb24pOwogICAgICAgICAgICAgICAgIGlmIChhKSB7CiAgICAgICAgICAgICAgICAgICAgIENv
bnRleHRNZW51SXRlbSBpdChpdGVtKTsKLSAgICAgICAgICAgICAgICAgICAgd2ViY29yZU1lbnUt
PmNoZWNrT3JFbmFibGVJZk5lZWRlZChpdCk7CisgICAgICAgICAgICAgICAgICAgIHBhZ2UtPmNv
bnRleHRNZW51Q29udHJvbGxlcigpLT5jaGVja09yRW5hYmxlSWZOZWVkZWQoaXQpOwogICAgICAg
ICAgICAgICAgICAgICBQbGF0Zm9ybU1lbnVJdGVtRGVzY3JpcHRpb24gZGVzYyA9IGl0LnJlbGVh
c2VQbGF0Zm9ybURlc2NyaXB0aW9uKCk7CiAgICAgICAgICAgICAgICAgICAgIGEtPnNldEVuYWJs
ZWQoZGVzYy5lbmFibGVkKTsKICAgICAgICAgICAgICAgICAgICAgYS0+c2V0Q2hlY2tlZChkZXNj
LmNoZWNrZWQpOwpAQCAtMzIwOSwxMiArMzIwOSwxMyBAQCB2b2lkIFFXZWJQYWdlOjp1cGRhdGVQ
b3NpdGlvbkRlcGVuZGVudEFjCiAgICAgICAgIGQtPmhpdFRlc3RSZXN1bHQgPSBRV2ViSGl0VGVz
dFJlc3VsdCgpOwogICAgIGVsc2UKICAgICAgICAgZC0+aGl0VGVzdFJlc3VsdCA9IFFXZWJIaXRU
ZXN0UmVzdWx0KG5ldyBRV2ViSGl0VGVzdFJlc3VsdFByaXZhdGUocmVzdWx0KSk7Ci0gICAgV2Vi
Q29yZTo6Q29udGV4dE1lbnUgbWVudShyZXN1bHQpOwotICAgIG1lbnUucG9wdWxhdGUoKTsKKwor
ICAgIGQtPnBhZ2UtPmNvbnRleHRNZW51Q29udHJvbGxlcigpLT5zZXRIaXRUZXN0UmVzdWx0KHJl
c3VsdCk7CisgICAgZC0+cGFnZS0+Y29udGV4dE1lbnVDb250cm9sbGVyKCktPnBvcHVsYXRlKCk7
CiAgICAgCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKICAgICBpZiAoZC0+cGFnZS0+aW5zcGVjdG9y
Q29udHJvbGxlcigpLT5lbmFibGVkKCkpCi0gICAgICAgIG1lbnUuYWRkSW5zcGVjdEVsZW1lbnRJ
dGVtKCk7CisgICAgICAgIGQtPnBhZ2UtPmNvbnRleHRNZW51Q29udHJvbGxlcigpLT5hZGRJbnNw
ZWN0RWxlbWVudEl0ZW0oKTsKICNlbmRpZgogCiAgICAgUUJpdEFycmF5IHZpc2l0ZWRXZWJBY3Rp
b25zKFFXZWJQYWdlOjpXZWJBY3Rpb25Db3VudCk7CkBAIC0zMjIzLDcgKzMyMjQsNyBAQCB2b2lk
IFFXZWJQYWdlOjp1cGRhdGVQb3NpdGlvbkRlcGVuZGVudEFjCiAgICAgZGVsZXRlIGQtPmN1cnJl
bnRDb250ZXh0TWVudTsKIAogICAgIC8vIFRoZW4gd2UgbGV0IGNyZWF0ZUNvbnRleHRNZW51KCkg
ZW5hYmxlIHRoZSBhY3Rpb25zIHRoYXQgYXJlIHB1dCBpbnRvIHRoZSBtZW51Ci0gICAgZC0+Y3Vy
cmVudENvbnRleHRNZW51ID0gZC0+Y3JlYXRlQ29udGV4dE1lbnUoJm1lbnUsIG1lbnUucGxhdGZv
cm1EZXNjcmlwdGlvbigpLCAmdmlzaXRlZFdlYkFjdGlvbnMpOworICAgIGQtPmN1cnJlbnRDb250
ZXh0TWVudSA9IGQtPmNyZWF0ZUNvbnRleHRNZW51KGQtPnBhZ2UtPmNvbnRleHRNZW51Q29udHJv
bGxlcigpLT5jb250ZXh0TWVudSgpLCBkLT5wYWdlLT5jb250ZXh0TWVudUNvbnRyb2xsZXIoKS0+
Y29udGV4dE1lbnUoKS0+cGxhdGZvcm1EZXNjcmlwdGlvbigpLCAmdmlzaXRlZFdlYkFjdGlvbnMp
OwogI2VuZGlmIC8vIFFUX05PX0NPTlRFWFRNRU5VCiAKICNpZm5kZWYgUVRfTk9fQUNUSU9OCklu
ZGV4OiBXZWJLaXQvd2luL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL0NoYW5n
ZUxvZwkocmV2aXNpb24gNzM0NjkpCisrKyBXZWJLaXQvd2luL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDEwLTEyLTA3ICBCcmlhbiBXZWluc3RlaW4gIDxid2Vp
bnN0ZWluQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBMYXllcmluZyBWaW9sYXRpb24gaW4gQ29udGV4dE1lbnUgLSBtZW1iZXIgdmFy
aWFibGUgb2YgdHlwZSBIaXRUZXN0UmVzdWx0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD01MDU4NgorICAgICAgICAKKyAgICAgICAgVXBkYXRlIHVzZXJz
IG9mIENvbnRleHRNZW51IGFuZCBDb250ZXh0TWVudUNvbnRyb2xsZXIgdG8gbWF0Y2ggd2hlcmUg
dGhlIG5ldyBmdW5jdGlvbnMgCisgICAgICAgIGFyZSBsb2NhdGVkLgorCisgICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvV2ViQ29udGV4dE1lbnVDbGllbnQuY3BwOgorICAgICAgICAoV2ViQ29udGV4
dE1lbnVDbGllbnQ6OmdldEN1c3RvbU1lbnVGcm9tRGVmYXVsdEl0ZW1zKTogR2V0IHRoZSBIaXRU
ZXN0UmVzdWx0IGFuZCBDb250ZXh0TWVudSBmcm9tIHRoZSAKKyAgICAgICAgICAgIENvbnRleHRN
ZW51Q29udHJvbGxlciAoZnJvbSB0aGUgcGFnZSkuCisgICAgICAgIChXZWJDb250ZXh0TWVudUNs
aWVudDo6Y29udGV4dE1lbnVJdGVtU2VsZWN0ZWQpOiBHZXQgdGhlIEhpdFRlc3RSZXN1bHQgZnJv
bSB0aGUgQ29udGV4dE1lbnVDb250cm9sbGVyLgorICAgICAgICAqIFdlYlZpZXcuY3BwOgorICAg
ICAgICAoV2ViVmlldzo6aGFuZGxlQ29udGV4dE1lbnVFdmVudCk6IERpdHRvLgorCiAyMDEwLTEy
LTA3ICBKZXNzaWUgQmVybGluICA8amJlcmxpbkBhcHBsZS5jb20+CiAKICAgICAgICAgQnVpbGQg
Zml4LiBVbnJldmlld2VkLgpJbmRleDogV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvd2luL1dlYlZpZXcuY3BwCShyZXZpc2lvbiA3MzQ2OSkKKysrIFdlYktpdC93
aW4vV2ViVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNDUsMTIgKzEyNDUsMTQgQEAgYm9v
bCBXZWJWaWV3OjpoYW5kbGVDb250ZXh0TWVudUV2ZW50KFdQQQogICAgIGlmICghaGFuZGxlZEV2
ZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBDb250ZXh0TWVudUNvbnRyb2xsZXIq
IGNvbnRleHRNZW51Q29udHJvbGxlciA9IG1fcGFnZS0+Y29udGV4dE1lbnVDb250cm9sbGVyKCk7
CisKICAgICAvLyBTaG93IHRoZSBtZW51Ci0gICAgQ29udGV4dE1lbnUqIGNvcmVNZW51ID0gbV9w
YWdlLT5jb250ZXh0TWVudUNvbnRyb2xsZXIoKS0+Y29udGV4dE1lbnUoKTsKKyAgICBDb250ZXh0
TWVudSogY29yZU1lbnUgPSBjb250ZXh0TWVudUNvbnRyb2xsZXItPmNvbnRleHRNZW51KCk7CiAg
ICAgaWYgKCFjb3JlTWVudSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgTm9kZSogbm9k
ZSA9IGNvcmVNZW51LT5oaXRUZXN0UmVzdWx0KCkuaW5uZXJOb25TaGFyZWROb2RlKCk7CisgICAg
Tm9kZSogbm9kZSA9IGNvbnRleHRNZW51Q29udHJvbGxlci0+aGl0VGVzdFJlc3VsdCgpLmlubmVy
Tm9uU2hhcmVkTm9kZSgpOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CkBAIC0xMjYyLDcgKzEyNjQsNyBAQCBib29sIFdlYlZpZXc6OmhhbmRsZUNvbnRleHRNZW51RXZl
bnQoV1BBCiAgICAgaWYgKCF2aWV3KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBQT0lO
VCBwb2ludCh2aWV3LT5jb250ZW50c1RvV2luZG93KGNvcmVNZW51LT5oaXRUZXN0UmVzdWx0KCku
cG9pbnQoKSkpOworICAgIFBPSU5UIHBvaW50KHZpZXctPmNvbnRlbnRzVG9XaW5kb3coY29udGV4
dE1lbnVDb250cm9sbGVyLT5oaXRUZXN0UmVzdWx0KCkucG9pbnQoKSkpOwogCiAgICAgLy8gVHJh
bnNsYXRlIHRoZSBwb2ludCB0byBzY3JlZW4gY29vcmRpbmF0ZXMKICAgICBpZiAoITo6Q2xpZW50
VG9TY3JlZW4obV92aWV3V2luZG93LCAmcG9pbnQpKQpJbmRleDogV2ViS2l0L3dpbi9XZWJDb3Jl
U3VwcG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dp
bi9XZWJDb3JlU3VwcG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5jcHAJKHJldmlzaW9uIDczNDY5
KQorKysgV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJXZWJWaWV3LmgiCiAK
ICNpbmNsdWRlIDxXZWJDb3JlL0NvbnRleHRNZW51Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Db250
ZXh0TWVudUNvbnRyb2xsZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0V2ZW50Lmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9GcmFtZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVMb2FkZXIuaD4KQEAg
LTY0LDcgKzY1LDcgQEAgSE1FTlUgV2ViQ29udGV4dE1lbnVDbGllbnQ6OmdldEN1c3RvbU1lbgog
CiAgICAgSE1FTlUgbmV3TWVudSA9IDA7CiAgICAgQ09NUHRyPFdlYkVsZW1lbnRQcm9wZXJ0eUJh
Zz4gcHJvcGVydHlCYWc7Ci0gICAgcHJvcGVydHlCYWcuYWRvcHRSZWYoV2ViRWxlbWVudFByb3Bl
cnR5QmFnOjpjcmVhdGVJbnN0YW5jZShtZW51LT5oaXRUZXN0UmVzdWx0KCkpKTsKKyAgICBwcm9w
ZXJ0eUJhZy5hZG9wdFJlZihXZWJFbGVtZW50UHJvcGVydHlCYWc6OmNyZWF0ZUluc3RhbmNlKG1f
d2ViVmlldy0+cGFnZSgpLT5jb250ZXh0TWVudUNvbnRyb2xsZXIoKS0+aGl0VGVzdFJlc3VsdCgp
KSk7CiAgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gZGVjaWRlIHdoZXRoZXIgdG8gZG8gdGhlIGRl
ZmF1bHQgYmVmb3JlIGNhbGxpbmcgdGhpcyBkZWxlZ2F0ZSBtZXRob2QKICAgICBpZiAoRkFJTEVE
KHVpRGVsZWdhdGUtPmNvbnRleHRNZW51SXRlbXNGb3JFbGVtZW50KG1fd2ViVmlldywgcHJvcGVy
dHlCYWcuZ2V0KCksIChPTEVfSEFORExFKShVTE9ORzY0KW1lbnUtPnBsYXRmb3JtRGVzY3JpcHRp
b24oKSwgKE9MRV9IQU5ETEUqKSZuZXdNZW51KSkpCiAgICAgICAgIHJldHVybiBtZW51LT5wbGF0
Zm9ybURlc2NyaXB0aW9uKCk7CkBAIC04Miw3ICs4Myw3IEBAIHZvaWQgV2ViQ29udGV4dE1lbnVD
bGllbnQ6OmNvbnRleHRNZW51SXQKICAgICBBU1NFUlQodWlEZWxlZ2F0ZSk7CiAKICAgICBDT01Q
dHI8V2ViRWxlbWVudFByb3BlcnR5QmFnPiBwcm9wZXJ0eUJhZzsKLSAgICBwcm9wZXJ0eUJhZy5h
ZG9wdFJlZihXZWJFbGVtZW50UHJvcGVydHlCYWc6OmNyZWF0ZUluc3RhbmNlKHBhcmVudE1lbnUt
PmhpdFRlc3RSZXN1bHQoKSkpOworICAgIHByb3BlcnR5QmFnLmFkb3B0UmVmKFdlYkVsZW1lbnRQ
cm9wZXJ0eUJhZzo6Y3JlYXRlSW5zdGFuY2UobV93ZWJWaWV3LT5wYWdlKCktPmNvbnRleHRNZW51
Q29udHJvbGxlcigpLT5oaXRUZXN0UmVzdWx0KCkpKTsKICAgICAgICAgICAgIAogICAgIHVpRGVs
ZWdhdGUtPmNvbnRleHRNZW51SXRlbVNlbGVjdGVkKG1fd2ViVmlldywgaXRlbS0+cmVsZWFzZVBs
YXRmb3JtRGVzY3JpcHRpb24oKSwgcHJvcGVydHlCYWcuZ2V0KCkpOwogfQo=
</data>
<flag name="review"
          id="66778"
          type_id="1"
          status="+"
          setter="sullivan"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75925</attachid>
            <date>2010-12-08 10:30:01 -0800</date>
            <delta_ts>2010-12-08 10:30:01 -0800</delta_ts>
            <desc>Diff between reviewed version and latest version</desc>
            <filename>patches.diff</filename>
            <type>text/plain</type>
            <size>24171</size>
            <attacher name="Brian Weinstein">bweinstein</attacher>
            
              <data encoding="base64">M2MzCjwgLS0tIFdlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiA3MzQyMCkKLS0tCj4gLS0tIFdl
YkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiA3MzQ2OSkKNmM2CjwgKzIwMTAtMTItMDYgIEJyaWFu
IFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgotLS0KPiArMjAxMC0xMi0wNyAgQnJp
YW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+Cjg2Yzg2CjwgIDIwMTAtMTItMDYg
IFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+Ci0tLQo+ICAyMDEwLTEyLTA3ICBCcmlh
biBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFwcGxlLmNvbT4KODhjODgKPCAgICAgICAgICBSZXZp
ZXdlZCBieSBUb255IENoYW5nLgotLS0KPiAgICAgICAgICBSZXZpZXdlZCBieSBKb2huIFN1bGxp
dmFuLgo5MWM5MQo8IC0tLSBXZWJDb3JlL0FuZHJvaWQubWsJKHJldmlzaW9uIDczMTY5KQotLS0K
PiAtLS0gV2ViQ29yZS9BbmRyb2lkLm1rCShyZXZpc2lvbiA3MzQ2OSkKOTNjOTMKPCBAQCAtNDQ5
LDcgKzQ0OSw2IEBAIExPQ0FMX1NSQ19GSUxFUyA6PSAkKExPQ0FMX1NSQ19GSUxFUykgXAotLS0K
PiBAQCAtNDUwLDcgKzQ1MCw2IEBAIExPQ0FMX1NSQ19GSUxFUyA6PSAkKExPQ0FMX1NSQ19GSUxF
UykgXAoxMDNjMTAzCjwgLS0tIFdlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDczMTY5
KQotLS0KPiAtLS0gV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gNzM0NjkpCjEwNWMx
MDUKPCBAQCAtMTI1OSw3ICsxMjU5LDYgQEAgU0VUKFdlYkNvcmVfU09VUkNFUwotLS0KPiBAQCAt
MTI3MCw3ICsxMjcwLDYgQEAgU0VUKFdlYkNvcmVfU09VUkNFUwoxMTVjMTE1CjwgLS0tIFdlYkNv
cmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDczMTY5KQotLS0KPiAtLS0gV2ViQ29yZS9HTlVt
YWtlZmlsZS5hbQkocmV2aXNpb24gNzM0NjkpCjExN2MxMTcKPCBAQCAtMjI0Niw3ICsyMjQ2LDYg
QEAgd2ViY29yZV9zb3VyY2VzICs9IFwKLS0tCj4gQEAgLTIyNTgsNyArMjI1OCw2IEBAIHdlYmNv
cmVfc291cmNlcyArPSBcCjEyNGExMjUsMTQyCj4gSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5leHAu
aW4KPiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Cj4gLS0tIFdlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDcz
NDY5KQo+ICsrKyBXZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCj4gQEAgLTEy
NTIsMTIgKzEyNTIsMTIgQEAgX19aTjdXZWJDb3JlMTVDb250ZXh0TWVudUl0ZW1DMUVOU18xOUNv
bgo+ICBfX1pON1dlYkNvcmUxNUNvbnRleHRNZW51SXRlbUMxRVAxME5TTWVudUl0ZW0KPiAgX19a
TjdXZWJDb3JlMTVDb250ZXh0TWVudUl0ZW1EMUV2Cj4gIF9fWk43V2ViQ29yZTIxQ29udGV4dE1l
bnVDb250cm9sbGVyMTZjbGVhckNvbnRleHRNZW51RXYKPiArX19aTks3V2ViQ29yZTIxQ29udGV4
dE1lbnVDb250cm9sbGVyMjFjaGVja09yRW5hYmxlSWZOZWVkZWRFUk5TXzE1Q29udGV4dE1lbnVJ
dGVtRQo+ICBfX1pON1dlYkNvcmUyMUNvbnRleHRNZW51Q29udHJvbGxlcjIzY29udGV4dE1lbnVJ
dGVtU2VsZWN0ZWRFUE5TXzE1Q29udGV4dE1lbnVJdGVtRQo+ICBfX1pON1dlYkNvcmUyMWNvbnRl
eHRNZW51SXRlbVZlY3RvckVQMTROU011dGFibGVBcnJheQo+ICBfX1pON1dlYkNvcmUyM3BsYXRm
b3JtTWVudURlc2NyaXB0aW9uRVJOM1dURjZWZWN0b3JJTlNfMTVDb250ZXh0TWVudUl0ZW1FTG0w
RUVFCj4gIF9fWk43V2ViQ29yZTZDaHJvbWUxNXNob3dDb250ZXh0TWVudUV2Cj4gIF9fWk5LN1dl
YkNvcmUxMUNvbnRleHRNZW51MTlwbGF0Zm9ybURlc2NyaXB0aW9uRXYKPiAtX19aTks3V2ViQ29y
ZTExQ29udGV4dE1lbnUyMWNoZWNrT3JFbmFibGVJZk5lZWRlZEVSTlNfMTVDb250ZXh0TWVudUl0
ZW1FCj4gIF9fWk5LN1dlYkNvcmUxNUNvbnRleHRNZW51SXRlbTE1cGxhdGZvcm1TdWJNZW51RXYK
PiAgX19aTks3V2ViQ29yZTE1Q29udGV4dE1lbnVJdGVtNHR5cGVFdgo+ICBfX1pOSzdXZWJDb3Jl
MTVDb250ZXh0TWVudUl0ZW01dGl0bGVFdgoxMjdjMTQ1CjwgLS0tIFdlYkNvcmUvV2ViQ29yZS5n
eXBpCShyZXZpc2lvbiA3MzE2OSkKLS0tCj4gLS0tIFdlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZp
c2lvbiA3MzQ2OSkKMTI5YzE0Nwo8IEBAIC0zMzM0LDcgKzMzMzQsNiBAQAotLS0KPiBAQCAtMzQy
MSw3ICszNDIxLDYgQEAKMTM5YzE1Nwo8IC0tLSBXZWJDb3JlL1dlYkNvcmUucHJvCShyZXZpc2lv
biA3MzE2OSkKLS0tCj4gLS0tIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDczNDY5KQox
NDFjMTU5CjwgQEAgLTExNDcsNyArMTE0Nyw2IEBAIFNPVVJDRVMgKz0gXAotLS0KPiBAQCAtMTE1
MSw3ICsxMTUxLDYgQEAgU09VUkNFUyArPSBcCjE1MWMxNjkKPCAtLS0gV2ViQ29yZS9XZWJDb3Jl
LnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gNzMxNjkpCi0tLQo+IC0tLSBXZWJDb3Jl
L1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA3MzQ2OSkKMTUzYzE3MQo8
IEBAIC0yNTI1OCwxMCArMjUyNTgsNiBAQAotLS0KPiBAQCAtMjUzMTQsMTAgKzI1MzE0LDYgQEAK
MTY2YzE4NAo8IC0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
cmV2aXNpb24gNzMxNjkpCi0tLQo+IC0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gNzM0NjkpCjE2OGMxODYKPCBAQCAtMjgzMyw3ICsyODMzLDYg
QEAKLS0tCj4gQEAgLTI4MzksNyArMjgzOSw2IEBACjE3NmMxOTQKPCBAQCAtODk4Miw3ICs4OTgx
LDYgQEAKLS0tCj4gQEAgLTkwMDcsNyArOTAwNiw2IEBACjE4NGMyMDIKPCBAQCAtMTc1MDUsNyAr
MTc1MDMsNiBAQAotLS0KPiBAQCAtMTc1NzQsNyArMTc1NzIsNiBAQAoxOTJjMjEwCjwgQEAgLTIx
ODcxLDcgKzIxODY4LDYgQEAKLS0tCj4gQEAgLTIxOTU2LDcgKzIxOTUzLDYgQEAKMjAyYzIyMAo8
IC0tLSBXZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcAkocmV2aXNpb24gNzMx
NjkpCi0tLQo+IC0tLSBXZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcAkocmV2
aXNpb24gNzM0NjkpCjIzMSwyNDBjMjQ5LDI1NAo8IEBAIC03MCw2ICs3Niw3IEBAIENvbnRleHRN
ZW51Q29udHJvbGxlcjo6Q29udGV4dE1lbnVDb250cm8KPCAgICAgIDogbV9wYWdlKHBhZ2UpCjwg
ICAgICAsIG1fY2xpZW50KGNsaWVudCkKPCAgICAgICwgbV9jb250ZXh0TWVudSgwKQo8ICsgICAg
LCBtX2hpdFRlc3RSZXN1bHQoSGl0VGVzdFJlc3VsdChJbnRQb2ludCgpKSkKPCAgewo8ICAgICAg
QVNTRVJUX0FSRyhwYWdlLCBwYWdlKTsKPCAgICAgIEFTU0VSVF9BUkcoY2xpZW50LCBjbGllbnQp
Owo8IEBAIC05Myw3ICsxMDAsOSBAQCB2b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6aGFuZGxl
Q29udGV4CjwgICAgICBtX2NvbnRleHRNZW51LnNldChjcmVhdGVDb250ZXh0TWVudShldmVudCkp
OwotLS0KPiBAQCAtOTAsMTAgKzk2LDEyIEBAIHZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjpj
bGVhckNvbnRleHQKPiAgCj4gIHZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjpoYW5kbGVDb250
ZXh0TWVudUV2ZW50KEV2ZW50KiBldmVudCkKPiAgewo+IC0gICAgbV9jb250ZXh0TWVudS5zZXQo
Y3JlYXRlQ29udGV4dE1lbnUoZXZlbnQpKTsKPiArICAgIG1fY29udGV4dE1lbnUgPSBjcmVhdGVD
b250ZXh0TWVudShldmVudCk7CjI1MGMyNjQsMjc1CjwgQEAgLTExMyw4ICsxMjIsOSBAQCB2b2lk
IENvbnRleHRNZW51Q29udHJvbGxlcjo6c2hvd0NvbnRleHRNCi0tLQo+IEBAIC0xMDEsNyArMTA5
LDcgQEAgdm9pZCBDb250ZXh0TWVudUNvbnRyb2xsZXI6OnNob3dDb250ZXh0TQo+ICB7Cj4gICAg
ICBtX21lbnVQcm92aWRlciA9IG1lbnVQcm92aWRlcjsKPiAgCj4gLSAgICBtX2NvbnRleHRNZW51
LnNldChjcmVhdGVDb250ZXh0TWVudShldmVudCkpOwo+ICsgICAgbV9jb250ZXh0TWVudSA9IGNy
ZWF0ZUNvbnRleHRNZW51KGV2ZW50KTsKPiAgICAgIGlmICghbV9jb250ZXh0TWVudSkgewo+ICAg
ICAgICAgIGNsZWFyQ29udGV4dE1lbnUoKTsKPiAgICAgICAgICByZXR1cm47Cj4gQEAgLTExMSwx
MCArMTE5LDExIEBAIHZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjpzaG93Q29udGV4dE0KPiAg
ICAgIHNob3dDb250ZXh0TWVudShldmVudCk7Cj4gIH0KMjUyYzI3NywyNzgKPCAgQ29udGV4dE1l
bnUqIENvbnRleHRNZW51Q29udHJvbGxlcjo6Y3JlYXRlQ29udGV4dE1lbnUoRXZlbnQqIGV2ZW50
KQotLS0KPiAtQ29udGV4dE1lbnUqIENvbnRleHRNZW51Q29udHJvbGxlcjo6Y3JlYXRlQ29udGV4
dE1lbnUoRXZlbnQqIGV2ZW50KQo+ICtQYXNzT3duUHRyPENvbnRleHRNZW51PiBDb250ZXh0TWVu
dUNvbnRyb2xsZXI6OmNyZWF0ZUNvbnRleHRNZW51KEV2ZW50KiBldmVudCkKMjYxYzI4Nwo8IEBA
IC0xMjMsMTQgKzEzMywxNyBAQCBDb250ZXh0TWVudSogQ29udGV4dE1lbnVDb250cm9sbGVyOjpj
cmVhCi0tLQo+IEBAIC0xMjMsMTQgKzEzMiwxNyBAQCBDb250ZXh0TWVudSogQ29udGV4dE1lbnVD
b250cm9sbGVyOjpjcmVhCjI2OWMyOTUKPCArICAgIHJldHVybiBuZXcgQ29udGV4dE1lbnUoKTsK
LS0tCj4gKyAgICByZXR1cm4gbmV3IENvbnRleHRNZW51OwoyODFjMzA3CjwgQEAgLTE2MSw1NCAr
MTc0LDUzIEBAIHZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjpjb250ZXh0TWVudUkKLS0tCj4g
QEAgLTE2Miw1NCArMTc0LDUzIEBAIHZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjpjb250ZXh0
TWVudUkKMzUwYzM3Ngo8IEBAIC0yNzIsMTAgKzI4NCwxMCBAQCB2b2lkIENvbnRleHRNZW51Q29u
dHJvbGxlcjo6Y29udGV4dE1lbnVJCi0tLQo+IEBAIC0yNzMsMTAgKzI4NCwxMCBAQCB2b2lkIENv
bnRleHRNZW51Q29udHJvbGxlcjo6Y29udGV4dE1lbnVJCjM1NWMzODEKPCAtICAgICAgICAgICAg
dGFyZ2V0RnJhbWUtPmxvYWRlcigpLT5sb2FkRnJhbWVSZXF1ZXN0KEZyYW1lTG9hZFJlcXVlc3Qo
UmVzb3VyY2VSZXF1ZXN0KHJlc3VsdC5hYnNvbHV0ZUxpbmtVUkwoKSwgZnJhbWUtPmxvYWRlcigp
LT5vdXRnb2luZ1JlZmVycmVyKCkpKSwgZmFsc2UsIGZhbHNlLCAwLCAwLCBTZW5kUmVmZXJyZXIp
OwotLS0KPiAtICAgICAgICAgICAgdGFyZ2V0RnJhbWUtPmxvYWRlcigpLT5sb2FkRnJhbWVSZXF1
ZXN0KEZyYW1lTG9hZFJlcXVlc3QoZnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCks
IFJlc291cmNlUmVxdWVzdChyZXN1bHQuYWJzb2x1dGVMaW5rVVJMKCksIGZyYW1lLT5sb2FkZXIo
KS0+b3V0Z29pbmdSZWZlcnJlcigpKSksIGZhbHNlLCBmYWxzZSwgMCwgMCwgU2VuZFJlZmVycmVy
KTsKMzU3YzM4Mwo8ICsgICAgICAgICAgICB0YXJnZXRGcmFtZS0+bG9hZGVyKCktPmxvYWRGcmFt
ZVJlcXVlc3QoRnJhbWVMb2FkUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QobV9oaXRUZXN0UmVzdWx0
LmFic29sdXRlTGlua1VSTCgpLCBmcmFtZS0+bG9hZGVyKCktPm91dGdvaW5nUmVmZXJyZXIoKSkp
LCBmYWxzZSwgZmFsc2UsIDAsIDAsIFNlbmRSZWZlcnJlcik7Ci0tLQo+ICsgICAgICAgICAgICB0
YXJnZXRGcmFtZS0+bG9hZGVyKCktPmxvYWRGcmFtZVJlcXVlc3QoRnJhbWVMb2FkUmVxdWVzdChm
cmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKSwgUmVzb3VyY2VSZXF1ZXN0KG1faGl0
VGVzdFJlc3VsdC5hYnNvbHV0ZUxpbmtVUkwoKSwgZnJhbWUtPmxvYWRlcigpLT5vdXRnb2luZ1Jl
ZmVycmVyKCkpKSwgZmFsc2UsIGZhbHNlLCAwLCAwLCBTZW5kUmVmZXJyZXIpOwozNjRjMzkwCjwg
QEAgLTI5NCw3ICszMDYsNyBAQCB2b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6Y29udGV4dE1l
bnVJCi0tLQo+IEBAIC0yOTUsNyArMzA2LDcgQEAgdm9pZCBDb250ZXh0TWVudUNvbnRyb2xsZXI6
OmNvbnRleHRNZW51SQozNzNjMzk5CjwgQEAgLTM4NCwxMyArMzk2LDEzIEBAIHZvaWQgQ29udGV4
dE1lbnVDb250cm9sbGVyOjpjb250ZXh0TWVudUkKLS0tCj4gQEAgLTM4NSwxMyArMzk2LDEzIEBA
IHZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjpjb250ZXh0TWVudUkKMzg5YzQxNQo8IEBAIC0z
OTgsNiArNDEwLDgyOSBAQCB2b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6Y29udGV4dE1lbnVJ
Ci0tLQo+IEBAIC0zOTksNiArNDEwLDgyOSBAQCB2b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6
Y29udGV4dE1lbnVJCjExMDdjMTEzMwo8ICsgICAgICAgICAgICBzaG91bGRFbmFibGUgPSBjb250
cm9sbGVyKCkgJiYgY29udHJvbGxlcigpLT5jbGllbnQoKSAmJiBjb250cm9sbGVyKCktPmNsaWVu
dCgpLT5pc1NwZWFraW5nKCk7Ci0tLQo+ICsgICAgICAgICAgICBzaG91bGRFbmFibGUgPSBjbGll
bnQoKSAmJiBjbGllbnQoKS0+aXNTcGVha2luZygpOwoxMjIxYzEyNDcKPCAtLS0gV2ViQ29yZS9w
YWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5oCShyZXZpc2lvbiA3MzE2OSkKLS0tCj4gLS0tIFdl
YkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuaAkocmV2aXNpb24gNzM0NjkpCjEyMzBh
MTI1NywxMjY1Cj4gQEAgLTQ1LDcgKzQ2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewo+ICAgICAg
ICAgIENvbnRleHRNZW51Q29udHJvbGxlcihQYWdlKiwgQ29udGV4dE1lbnVDbGllbnQqKTsKPiAg
ICAgICAgICB+Q29udGV4dE1lbnVDb250cm9sbGVyKCk7Cj4gIAo+IC0gICAgICAgIENvbnRleHRN
ZW51Q2xpZW50KiBjbGllbnQoKSB7IHJldHVybiBtX2NsaWVudDsgfQo+ICsgICAgICAgIENvbnRl
eHRNZW51Q2xpZW50KiBjbGllbnQoKSBjb25zdCB7IHJldHVybiBtX2NsaWVudDsgfQo+ICAKPiAg
ICAgICAgICBDb250ZXh0TWVudSogY29udGV4dE1lbnUoKSBjb25zdCB7IHJldHVybiBtX2NvbnRl
eHRNZW51LmdldCgpOyB9Cj4gICAgICAgICAgdm9pZCBjbGVhckNvbnRleHRNZW51KCk7CjEyNDVj
MTI4MCwxMjgxCjwgICAgICAgICAgQ29udGV4dE1lbnUqIGNyZWF0ZUNvbnRleHRNZW51KEV2ZW50
Kik7Ci0tLQo+IC0gICAgICAgIENvbnRleHRNZW51KiBjcmVhdGVDb250ZXh0TWVudShFdmVudCop
Owo+ICsgICAgICAgIFBhc3NPd25QdHI8Q29udGV4dE1lbnU+IGNyZWF0ZUNvbnRleHRNZW51KEV2
ZW50Kik7CjEyNTAsMTI1N2MxMjg2LDEyOTMKPCArICAgICAgICB2b2lkIGNyZWF0ZUFuZEFwcGVu
ZEZvbnRTdWJNZW51KENvbnRleHRNZW51SXRlbSYgZm9udE1lbnVJdGVtKTsKPCArICAgICAgICB2
b2lkIGNyZWF0ZUFuZEFwcGVuZFNwZWxsaW5nQW5kR3JhbW1hclN1Yk1lbnUoQ29udGV4dE1lbnVJ
dGVtJiBzcGVsbGluZ0FuZEdyYW1tYXJNZW51SXRlbSk7CjwgKyAgICAgICAgdm9pZCBjcmVhdGVB
bmRBcHBlbmRTcGVsbGluZ1N1Yk1lbnUoQ29udGV4dE1lbnVJdGVtJiBzcGVsbGluZ01lbnVJdGVt
KTsKPCArICAgICAgICB2b2lkIGNyZWF0ZUFuZEFwcGVuZFNwZWVjaFN1Yk1lbnUoQ29udGV4dE1l
bnVJdGVtJiBzcGVlY2hNZW51SXRlbSk7CjwgKyAgICAgICAgdm9pZCBjcmVhdGVBbmRBcHBlbmRX
cml0aW5nRGlyZWN0aW9uU3ViTWVudShDb250ZXh0TWVudUl0ZW0mIHdyaXRpbmdEaXJlY3Rpb25N
ZW51SXRlbSk7CjwgKyAgICAgICAgdm9pZCBjcmVhdGVBbmRBcHBlbmRUZXh0RGlyZWN0aW9uU3Vi
TWVudShDb250ZXh0TWVudUl0ZW0mIHRleHREaXJlY3Rpb25NZW51SXRlbSk7CjwgKyAgICAgICAg
dm9pZCBjcmVhdGVBbmRBcHBlbmRTdWJzdGl0dXRpb25zU3ViTWVudShDb250ZXh0TWVudUl0ZW0m
IHN1YnN0aXR1dGlvbnNNZW51SXRlbSk7CjwgKyAgICAgICAgdm9pZCBjcmVhdGVBbmRBcHBlbmRU
cmFuc2Zvcm1hdGlvbnNTdWJNZW51KENvbnRleHRNZW51SXRlbSYgdHJhbnNmb3JtYXRpb25zTWVu
dUl0ZW0pOwotLS0KPiArICAgICAgICB2b2lkIGNyZWF0ZUFuZEFwcGVuZEZvbnRTdWJNZW51KENv
bnRleHRNZW51SXRlbSYpOwo+ICsgICAgICAgIHZvaWQgY3JlYXRlQW5kQXBwZW5kU3BlbGxpbmdB
bmRHcmFtbWFyU3ViTWVudShDb250ZXh0TWVudUl0ZW0mKTsKPiArICAgICAgICB2b2lkIGNyZWF0
ZUFuZEFwcGVuZFNwZWxsaW5nU3ViTWVudShDb250ZXh0TWVudUl0ZW0mKTsKPiArICAgICAgICB2
b2lkIGNyZWF0ZUFuZEFwcGVuZFNwZWVjaFN1Yk1lbnUoQ29udGV4dE1lbnVJdGVtJiApOwo+ICsg
ICAgICAgIHZvaWQgY3JlYXRlQW5kQXBwZW5kV3JpdGluZ0RpcmVjdGlvblN1Yk1lbnUoQ29udGV4
dE1lbnVJdGVtJik7Cj4gKyAgICAgICAgdm9pZCBjcmVhdGVBbmRBcHBlbmRUZXh0RGlyZWN0aW9u
U3ViTWVudShDb250ZXh0TWVudUl0ZW0mKTsKPiArICAgICAgICB2b2lkIGNyZWF0ZUFuZEFwcGVu
ZFN1YnN0aXR1dGlvbnNTdWJNZW51KENvbnRleHRNZW51SXRlbSYpOwo+ICsgICAgICAgIHZvaWQg
Y3JlYXRlQW5kQXBwZW5kVHJhbnNmb3JtYXRpb25zU3ViTWVudShDb250ZXh0TWVudUl0ZW0mKTsK
MTI2OWMxMzA1CjwgLS0tIFdlYkNvcmUvcGxhdGZvcm0vQ29udGV4dE1lbnUuY3BwCShyZXZpc2lv
biA3MzE2OSkKLS0tCj4gLS0tIFdlYkNvcmUvcGxhdGZvcm0vQ29udGV4dE1lbnUuY3BwCShyZXZp
c2lvbiA3MzQ2OSkKMjE2NGMyMjAwCjwgLS0tIFdlYkNvcmUvcGxhdGZvcm0vQ29udGV4dE1lbnUu
aAkocmV2aXNpb24gNzMxNjkpCi0tLQo+IC0tLSBXZWJDb3JlL3BsYXRmb3JtL0NvbnRleHRNZW51
LmgJKHJldmlzaW9uIDczNDY5KQoyMjExYzIyNDcKPCAtLS0gV2ViQ29yZS9wbGF0Zm9ybS9hbmRy
b2lkL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAJKHJldmlzaW9uIDczMTY5KQotLS0KPiAtLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9hbmRyb2lkL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAJKHJldmlzaW9uIDcz
NDY5KQoyMjI0YzIyNjAKPCAtLS0gV2ViQ29yZS9wbGF0Zm9ybS9icmV3L0NvbnRleHRNZW51QnJl
dy5jcHAJKHJldmlzaW9uIDczMTY5KQotLS0KPiAtLS0gV2ViQ29yZS9wbGF0Zm9ybS9icmV3L0Nv
bnRleHRNZW51QnJldy5jcHAJKHJldmlzaW9uIDczNDY5KQoyMjQ2YzIyODIKPCAtLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9jaHJvbWl1bS9Db250ZXh0TWVudUNocm9taXVtLmNwcAkocmV2aXNpb24gNzMx
NjkpCi0tLQo+IC0tLSBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NvbnRleHRNZW51Q2hyb21p
dW0uY3BwCShyZXZpc2lvbiA3MzQ2OSkKMjI2NmMyMzAyCjwgLS0tIFdlYkNvcmUvcGxhdGZvcm0v
ZWZsL0NvbnRleHRNZW51RWZsLmNwcAkocmV2aXNpb24gNzMxNjkpCi0tLQo+IC0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2VmbC9Db250ZXh0TWVudUVmbC5jcHAJKHJldmlzaW9uIDczNDY5KQoyMjY4YzIz
MDQKPCBAQCAtMjksMTYgKzI5LDE0IEBACi0tLQo+IEBAIC0yOSwzMCArMjksMjUgQEAKMjI3Niwy
Mjc3YzIzMTIsMjMxNAo8ICAgICAgbV9jb250ZXh0TWVudUNsaWVudCA9IHN0YXRpY19jYXN0PENv
bnRleHRNZW51Q2xpZW50RWZsKj4oY29udHJvbGxlcigpLT5jbGllbnQoKSk7CjwgICAgICBtX3Bs
YXRmb3JtRGVzY3JpcHRpb24gPSBtX2NvbnRleHRNZW51Q2xpZW50LT5jcmVhdGVQbGF0Zm9ybURl
c2NyaXB0aW9uKHRoaXMpOwotLS0KPiAtICAgIG1fY29udGV4dE1lbnVDbGllbnQgPSBzdGF0aWNf
Y2FzdDxDb250ZXh0TWVudUNsaWVudEVmbCo+KGNvbnRyb2xsZXIoKS0+Y2xpZW50KCkpOwo+IC0g
ICAgbV9wbGF0Zm9ybURlc2NyaXB0aW9uID0gbV9jb250ZXh0TWVudUNsaWVudC0+Y3JlYXRlUGxh
dGZvcm1EZXNjcmlwdGlvbih0aGlzKTsKPiArICAgIG1fcGxhdGZvcm1EZXNjcmlwdGlvbiA9IChQ
bGF0Zm9ybU1lbnVEZXNjcmlwdGlvbikgZXdrX2NvbnRleHRfbWVudV9uZXcobV92aWV3LCBtZW51
LT5jb250cm9sbGVyKCkpOwoyMjg2YzIzMjMsMjMzMAo8ICAgICAgbV9jb250ZXh0TWVudUNsaWVu
dCA9IHN0YXRpY19jYXN0PENvbnRleHRNZW51Q2xpZW50RWZsKj4oY29udHJvbGxlcigpLT5jbGll
bnQoKSk7Ci0tLQo+IC0gICAgbV9jb250ZXh0TWVudUNsaWVudCA9IHN0YXRpY19jYXN0PENvbnRl
eHRNZW51Q2xpZW50RWZsKj4oY29udHJvbGxlcigpLT5jbGllbnQoKSk7Cj4gIH0KPiAgCj4gIENv
bnRleHRNZW51Ojp+Q29udGV4dE1lbnUoKQo+ICB7Cj4gICAgICBpZiAobV9wbGF0Zm9ybURlc2Ny
aXB0aW9uKQo+IC0gICAgICAgIG1fY29udGV4dE1lbnVDbGllbnQtPmZyZWVQbGF0Zm9ybURlc2Ny
aXB0aW9uKG1fcGxhdGZvcm1EZXNjcmlwdGlvbik7Cj4gKyAgICAgICAgZXdrX2NvbnRleHRfbWVu
dV9mcmVlKHN0YXRpY19jYXN0PEV3a19Db250ZXh0X01lbnUqPihtX3BsYXRmb3JtRGVzY3JpcHRp
b24pKTsKMjI4OGQyMzMxCjwgQEAgLTUxLDcgKzQ5LDYgQEAgQ29udGV4dE1lbnU6On5Db250ZXh0
TWVudSgpCjIyOTNjMjMzNiwyMzQ2CjwgICAgICBtX2NvbnRleHRNZW51Q2xpZW50LT5hcHBlbmRJ
dGVtKG1fcGxhdGZvcm1EZXNjcmlwdGlvbiwgaXRlbSk7Ci0tLQo+IC0gICAgbV9jb250ZXh0TWVu
dUNsaWVudC0+YXBwZW5kSXRlbShtX3BsYXRmb3JtRGVzY3JpcHRpb24sIGl0ZW0pOwo+ICsgICAg
ZXdrX2NvbnRleHRfbWVudV9pdGVtX2FwcGVuZChzdGF0aWNfY2FzdDxFd2tfQ29udGV4dF9NZW51
Kj4obV9wbGF0Zm9ybURlc2NyaXB0aW9uKSwgaXRlbSk7Cj4gIH0KPiAgCj4gIHZvaWQgQ29udGV4
dE1lbnU6OnNldFBsYXRmb3JtRGVzY3JpcHRpb24oUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gbWVu
dSkKPiBAQCAtNjAsNyArNTUsNyBAQCB2b2lkIENvbnRleHRNZW51OjpzZXRQbGF0Zm9ybURlc2Ny
aXB0aW9uCj4gICAgICBBU1NFUlQoIW1fcGxhdGZvcm1EZXNjcmlwdGlvbik7Cj4gIAo+ICAgICAg
bV9wbGF0Zm9ybURlc2NyaXB0aW9uID0gbWVudTsKPiAtICAgIG1fY29udGV4dE1lbnVDbGllbnQt
PnNob3cobV9wbGF0Zm9ybURlc2NyaXB0aW9uKTsKPiArICAgIGV3a19jb250ZXh0X21lbnVfc2hv
dyhzdGF0aWNfY2FzdDxFd2tfQ29udGV4dF9NZW51Kj4obV9wbGF0Zm9ybURlc2NyaXB0aW9uKSk7
CjIyOTVhMjM0OQo+ICBQbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbiBDb250ZXh0TWVudTo6cGxhdGZv
cm1EZXNjcmlwdGlvbigpIGNvbnN0CjIyOThjMjM1Mgo8IC0tLSBXZWJDb3JlL3BsYXRmb3JtL2Vm
bC9Db250ZXh0TWVudUl0ZW1FZmwuY3BwCShyZXZpc2lvbiA3MzE2OSkKLS0tCj4gLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZWZsL0NvbnRleHRNZW51SXRlbUVmbC5jcHAJKHJldmlzaW9uIDczNDY5KQoy
MzEyYzIzNjYKPCAtLS0gV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ29udGV4dE1lbnVHdGsuY3BwCShy
ZXZpc2lvbiA3MzE2OSkKLS0tCj4gLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL0NvbnRleHRNZW51
R3RrLmNwcAkocmV2aXNpb24gNzM0NjkpCjIzMzRjMjM4OAo8IC0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2hhaWt1L0NvbnRleHRNZW51SGFpa3UuY3BwCShyZXZpc2lvbiA3MzE2OSkKLS0tCj4gLS0tIFdl
YkNvcmUvcGxhdGZvcm0vaGFpa3UvQ29udGV4dE1lbnVIYWlrdS5jcHAJKHJldmlzaW9uIDczNDY5
KQoyMzY4YzI0MjIKPCAtLS0gV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ29udGV4dE1lbnVNYWMubW0J
KHJldmlzaW9uIDczMTY5KQotLS0KPiAtLS0gV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ29udGV4dE1l
bnVNYWMubW0JKHJldmlzaW9uIDczNDY5KQoyMzcwLDIzNzljMjQyNAo8IEBAIC03MSw3ICs3MSw3
IEBAIC0gKEJPT0wpdmFsaWRhdGVNZW51SXRlbTooTlNNZW51SXRlbSAqKWkKPCAgewo8ICAgICAg
V2ViQ29yZTo6Q29udGV4dE1lbnVJdGVtIGNvcmVJdGVtKGl0ZW0pOwo8ICAgICAgQVNTRVJUKF9t
ZW51Q29udHJvbGxlci0+Y29udGV4dE1lbnUoKSk7CjwgLSAgICBfbWVudUNvbnRyb2xsZXItPmNv
bnRleHRNZW51KCktPmNoZWNrT3JFbmFibGVJZk5lZWRlZChjb3JlSXRlbSk7CjwgKyAgICBfbWVu
dUNvbnRyb2xsZXItPmNoZWNrT3JFbmFibGVJZk5lZWRlZChjb3JlSXRlbSk7CjwgICAgICByZXR1
cm4gY29yZUl0ZW0uZW5hYmxlZCgpOwo8ICB9CjwgIAo8IEBAIC03OSw4ICs3OSw3IEBAIC0gKEJP
T0wpdmFsaWRhdGVNZW51SXRlbTooTlNNZW51SXRlbSAqKWkKLS0tCj4gQEAgLTMwLDE3ICszMCwx
NSBAQAoyMzg5LDIzOTBjMjQzNAo8IEBAIC04OSw5ICs4OCw4IEBAIENvbnRleHRNZW51OjpDb250
ZXh0TWVudShjb25zdCBIaXRUZXN0UmUKPCAgICAgIFtbV2ViQ29yZU1lbnVUYXJnZXQgc2hhcmVk
TWVudVRhcmdldF0gc2V0TWVudUNvbnRyb2xsZXI6Y29udHJvbGxlcigpXTsKLS0tCj4gICAgICBb
YXJyYXkgcmVsZWFzZV07CjIzOTlkMjQ0Mgo8ICAgICAgW1tXZWJDb3JlTWVudVRhcmdldCBzaGFy
ZWRNZW51VGFyZ2V0XSBzZXRNZW51Q29udHJvbGxlcjpjb250cm9sbGVyKCldOwoyNDAxYzI0NDQs
MjQ0NQo8IEBAIC0xMDgsOCArMTA2LDYgQEAgc3RhdGljIHZvaWQgc2V0TWVudUl0ZW1UYXJnZXQo
TlNNZW51SXRlbQotLS0KPiAgCj4gQEAgLTUwLDggKzQ4LDYgQEAgQ29udGV4dE1lbnU6On5Db250
ZXh0TWVudSgpCjI0MDdkMjQ1MAo8ICAgICAgQ29udGV4dE1lbnVJdGVtVHlwZSB0eXBlID0gaXRl
bS50eXBlKCk7CjI0MDksMjQxMGMyNDUyLDI0NTQKPCAgICAgIGlmICh0eXBlID09IEFjdGlvblR5
cGUpCjwgQEAgLTEyMSw4ICsxMTcsNiBAQCB2b2lkIENvbnRleHRNZW51OjphcHBlbmRJdGVtKENv
bnRleHRNZW51Ci0tLQo+ICAKPiAgICAgIFttX3BsYXRmb3JtRGVzY3JpcHRpb24uZ2V0KCkgYWRk
T2JqZWN0OnBsYXRmb3JtSXRlbV07Cj4gQEAgLTYwLDggKzU2LDYgQEAgdm9pZCBDb250ZXh0TWVu
dTo6YXBwZW5kSXRlbShDb250ZXh0TWVudQoyNDE2ZDI0NTkKPCAgICAgIENvbnRleHRNZW51SXRl
bVR5cGUgdHlwZSA9IGl0ZW0udHlwZSgpOwoyNDE4YzI0NjEsMjQ2Mgo8ICAgICAgaWYgKHR5cGUg
PT0gQWN0aW9uVHlwZSkKLS0tCj4gIAo+ICAgICAgW21fcGxhdGZvcm1EZXNjcmlwdGlvbi5nZXQo
KSBpbnNlcnRPYmplY3Q6cGxhdGZvcm1JdGVtIGF0SW5kZXg6cG9zaXRpb25dOwoyNDIxYzI0NjUK
PCAtLS0gV2ViQ29yZS9wbGF0Zm9ybS9xdC9Db250ZXh0TWVudVF0LmNwcAkocmV2aXNpb24gNzMx
NjkpCi0tLQo+IC0tLSBXZWJDb3JlL3BsYXRmb3JtL3F0L0NvbnRleHRNZW51UXQuY3BwCShyZXZp
c2lvbiA3MzQ2OSkKMjQzNWMyNDc5CjwgLS0tIFdlYkNvcmUvcGxhdGZvcm0vd2luL0NvbnRleHRN
ZW51V2luLmNwcAkocmV2aXNpb24gNzMxNjkpCi0tLQo+IC0tLSBXZWJDb3JlL3BsYXRmb3JtL3dp
bi9Db250ZXh0TWVudVdpbi5jcHAJKHJldmlzaW9uIDczNDY5KQoyNDcyYzI1MTYKPCAtLS0gV2Vi
Q29yZS9wbGF0Zm9ybS93eC9Db250ZXh0TWVudVd4LmNwcAkocmV2aXNpb24gNzMxNjkpCi0tLQo+
IC0tLSBXZWJDb3JlL3BsYXRmb3JtL3d4L0NvbnRleHRNZW51V3guY3BwCShyZXZpc2lvbiA3MzQ2
OSkKMjQ5MWEyNTM2LDI1NjgKPiBJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3Vs
dC5jcHAKPiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Cj4gLS0tIFdlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQu
Y3BwCShyZXZpc2lvbiA3MzQ2OSkKPiArKysgV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3Vs
dC5jcHAJKHdvcmtpbmcgY29weSkKPiBAQCAtNDgsNiArNDgsMTYgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewo+ICAKPiAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKPiAgCj4gK0hpdFRlc3RSZXN1
bHQ6OkhpdFRlc3RSZXN1bHQoKQo+ICsgICAgOiBtX2lzT3ZlcldpZGdldChmYWxzZSkKPiArICAg
ICwgbV9pc1JlY3RCYXNlZChmYWxzZSkKPiArICAgICwgbV90b3BQYWRkaW5nKDApCj4gKyAgICAs
IG1fcmlnaHRQYWRkaW5nKDApCj4gKyAgICAsIG1fYm90dG9tUGFkZGluZygwKQo+ICsgICAgLCBt
X2xlZnRQYWRkaW5nKDApCj4gK3sKPiArfQo+ICsKPiAgSGl0VGVzdFJlc3VsdDo6SGl0VGVzdFJl
c3VsdChjb25zdCBJbnRQb2ludCYgcG9pbnQpCj4gICAgICA6IG1fcG9pbnQocG9pbnQpCj4gICAg
ICAsIG1faXNPdmVyV2lkZ2V0KGZhbHNlKQo+IEluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9IaXRU
ZXN0UmVzdWx0LmgKPiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Cj4gLS0tIFdlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RS
ZXN1bHQuaAkocmV2aXNpb24gNzM0NjkpCj4gKysrIFdlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RS
ZXN1bHQuaAkod29ya2luZyBjb3B5KQo+IEBAIC00Myw2ICs0Myw3IEBAIGNsYXNzIFNjcm9sbGJh
cjsKPiAgCj4gIGNsYXNzIEhpdFRlc3RSZXN1bHQgewo+ICBwdWJsaWM6Cj4gKyAgICBIaXRUZXN0
UmVzdWx0KCk7Cj4gICAgICBIaXRUZXN0UmVzdWx0KGNvbnN0IEludFBvaW50Jik7Cj4gICAgICAv
LyBQYXNzIG5vbi1uZWdhdGl2ZSBwYWRkaW5nIHZhbHVlcyB0byBwZXJmb3JtIGEgcmVjdC1iYXNl
ZCBoaXQgdGVzdC4KPiAgICAgIEhpdFRlc3RSZXN1bHQoY29uc3QgSW50UG9pbnQmIGNlbnRlclBv
aW50LCB1bnNpZ25lZCB0b3BQYWRkaW5nLCB1bnNpZ25lZCByaWdodFBhZGRpbmcsIHVuc2lnbmVk
IGJvdHRvbVBhZGRpbmcsIHVuc2lnbmVkIGxlZnRQYWRkaW5nKTsKMjQ5NGMyNTcxCjwgLS0tIFdl
YktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiA3MzQyMCkKLS0tCj4gLS0tIFdlYktpdDIvQ2hhbmdl
TG9nCShyZXZpc2lvbiA3MzQ5MCkKMjQ5N2MyNTc0CjwgKzIwMTAtMTItMDYgIEJyaWFuIFdlaW5z
dGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgotLS0KPiArMjAxMC0xMi0wNyAgQnJpYW4gV2Vp
bnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+CjI1MTNjMjU5MAo8ICAyMDEwLTEyLTA2ICBB
bmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+Ci0tLQo+ICAyMDEwLTEyLTA3ICBB
bmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CjI1MThjMjU5NQo8IC0tLSBXZWJL
aXQyL1NoYXJlZC9XZWJDb250ZXh0TWVudUl0ZW1EYXRhLmNwcAkocmV2aXNpb24gNzMxNjkpCi0t
LQo+IC0tLSBXZWJLaXQyL1NoYXJlZC9XZWJDb250ZXh0TWVudUl0ZW1EYXRhLmNwcAkocmV2aXNp
b24gNzM0NjkpCjI1MzFjMjYwOAo8IC0tLSBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJD
b250ZXh0TWVudS5jcHAJKHJldmlzaW9uIDczMTY5KQotLS0KPiAtLS0gV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViQ29udGV4dE1lbnUuY3BwCShyZXZpc2lvbiA3MzQ2OSkKMjU2M2EyNjQx
LDI4MTgKPiBJbmRleDogV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo+ID09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KPiAt
LS0gV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNzM0ODcpCj4gKysrIFdlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKPiBAQCAtMSwzICsxLDE3IEBACj4g
KzIwMTAtMTItMDcgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgo+ICsK
PiArICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KPiArCj4gKyAgICAgICAgTGF5
ZXJpbmcgVmlvbGF0aW9uIGluIENvbnRleHRNZW51IC0gbWVtYmVyIHZhcmlhYmxlIG9mIHR5cGUg
SGl0VGVzdFJlc3VsdAo+ICsgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD01MDU4Ngo+ICsgICAgICAgIAo+ICsgICAgICAgIFVwZGF0ZSB1c2VycyBvZiBDb250
ZXh0TWVudSBhbmQgQ29udGV4dE1lbnVDb250cm9sbGVyIHRvIG1hdGNoIHdoZXJlIHRoZSBuZXcg
ZnVuY3Rpb25zIAo+ICsgICAgICAgIGFyZSBsb2NhdGVkLgo+ICsKPiArICAgICAgICAqIHNyYy9D
b250ZXh0TWVudUNsaWVudEltcGwuY3BwOgo+ICsgICAgICAgIChXZWJLaXQ6OnNlbGVjdE1pc3Nw
ZWxsZWRXb3JkKToKPiArICAgICAgICAoV2ViS2l0OjpDb250ZXh0TWVudUNsaWVudEltcGw6Omdl
dEN1c3RvbU1lbnVGcm9tRGVmYXVsdEl0ZW1zKToKPiArCj4gIDIwMTAtMTItMDYgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgo+ICAKPiAgICAgICAgICBSZXZpZXdlZCBieSBTYW0gV2Vp
bmlnLgo+IEluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL0NvbnRleHRNZW51Q2xpZW50SW1wbC5j
cHAKPiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Cj4gLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvQ29udGV4dE1lbnVDbGll
bnRJbXBsLmNwcAkocmV2aXNpb24gNzM0NjkpCj4gKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvQ29u
dGV4dE1lbnVDbGllbnRJbXBsLmNwcAkod29ya2luZyBjb3B5KQo+IEBAIC0zNCw2ICszNCw3IEBA
Cj4gICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCj4gICNpbmNsdWRlICJDU1NTdHlsZURl
Y2xhcmF0aW9uLmgiCj4gICNpbmNsdWRlICJDb250ZXh0TWVudS5oIgo+ICsjaW5jbHVkZSAiQ29u
dGV4dE1lbnVDb250cm9sbGVyLmgiCj4gICNpbmNsdWRlICJEb2N1bWVudC5oIgo+ICAjaW5jbHVk
ZSAiRG9jdW1lbnRMb2FkZXIuaCIKPiAgI2luY2x1ZGUgIkVkaXRvci5oIgo+IEBAIC00NSw2ICs0
Niw3IEBACj4gICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKPiAgI2luY2x1ZGUgIktVUkwuaCIKPiAg
I2luY2x1ZGUgIk1lZGlhRXJyb3IuaCIKPiArI2luY2x1ZGUgIlBhZ2UuaCIKPiAgI2luY2x1ZGUg
IlBsYXRmb3JtU3RyaW5nLmgiCj4gICNpbmNsdWRlICJSZW5kZXJXaWRnZXQuaCIKPiAgI2luY2x1
ZGUgIlRleHRCcmVha0l0ZXJhdG9yLmgiCj4gQEAgLTExMCw3ICsxMTIsNyBAQCBzdGF0aWMgU3Ry
aW5nIHNlbGVjdE1pc3NwZWxsZWRXb3JkKGNvbnN0Cj4gIAo+ICAgICAgLy8gU2VsZWN0aW9uIGlz
IGVtcHR5LCBzbyBjaGFuZ2UgdGhlIHNlbGVjdGlvbiB0byB0aGUgd29yZCB1bmRlciB0aGUgY3Vy
c29yLgo+ICAgICAgSGl0VGVzdFJlc3VsdCBoaXRUZXN0UmVzdWx0ID0gc2VsZWN0ZWRGcmFtZS0+
ZXZlbnRIYW5kbGVyKCktPgo+IC0gICAgICAgIGhpdFRlc3RSZXN1bHRBdFBvaW50KGRlZmF1bHRN
ZW51LT5oaXRUZXN0UmVzdWx0KCkucG9pbnQoKSwgdHJ1ZSk7Cj4gKyAgICAgICAgaGl0VGVzdFJl
c3VsdEF0UG9pbnQoc2VsZWN0ZWRGcmFtZS0+cGFnZSgpLT5jb250ZXh0TWVudUNvbnRyb2xsZXIo
KS0+aGl0VGVzdFJlc3VsdCgpLnBvaW50KCksIHRydWUpOwo+ICAgICAgTm9kZSogaW5uZXJOb2Rl
ID0gaGl0VGVzdFJlc3VsdC5pbm5lck5vZGUoKTsKPiAgICAgIFZpc2libGVQb3NpdGlvbiBwb3Mo
aW5uZXJOb2RlLT5yZW5kZXJlcigpLT5wb3NpdGlvbkZvclBvaW50KAo+ICAgICAgICAgIGhpdFRl
c3RSZXN1bHQubG9jYWxQb2ludCgpKSk7Cj4gQEAgLTE0NCw3ICsxNDYsNyBAQCBQbGF0Zm9ybU1l
bnVEZXNjcmlwdGlvbiBDb250ZXh0TWVudUNsaWVuCj4gICAgICBpZiAoIW1fd2ViVmlldy0+Y29u
dGV4dE1lbnVBbGxvd2VkKCkpCj4gICAgICAgICAgcmV0dXJuIDA7Cj4gIAo+IC0gICAgSGl0VGVz
dFJlc3VsdCByID0gZGVmYXVsdE1lbnUtPmhpdFRlc3RSZXN1bHQoKTsKPiArICAgIEhpdFRlc3RS
ZXN1bHQgciA9IG1fd2ViVmlldy0+cGFnZSgpLT5jb250ZXh0TWVudUNvbnRyb2xsZXIoKS0+aGl0
VGVzdFJlc3VsdCgpOwo+ICAgICAgRnJhbWUqIHNlbGVjdGVkRnJhbWUgPSByLmlubmVyTm9uU2hh
cmVkTm9kZSgpLT5kb2N1bWVudCgpLT5mcmFtZSgpOwo+ICAKPiAgICAgIFdlYkNvbnRleHRNZW51
RGF0YSBkYXRhOwo+IEluZGV4OiBXZWJLaXQvZ3RrL0NoYW5nZUxvZwo+ID09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KPiAt
LS0gV2ViS2l0L2d0ay9DaGFuZ2VMb2cJKHJldmlzaW9uIDczNTI4KQo+ICsrKyBXZWJLaXQvZ3Rr
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQo+IEBAIC0xLDMgKzEsMTYgQEAKPiArMjAxMC0xMi0w
OCAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+Cj4gKwo+ICsgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgo+ICsKPiArICAgICAgICBMYXllcmluZyBWaW9s
YXRpb24gaW4gQ29udGV4dE1lbnUgLSBtZW1iZXIgdmFyaWFibGUgb2YgdHlwZSBIaXRUZXN0UmVz
dWx0Cj4gKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUw
NTg2Cj4gKyAgICAgICAgCj4gKyAgICAgICAgVXBkYXRlIHVzZXJzIG9mIENvbnRleHRNZW51IGFu
ZCBDb250ZXh0TWVudUNvbnRyb2xsZXIgdG8gbWF0Y2ggd2hlcmUgdGhlIG5ldyBmdW5jdGlvbnMg
Cj4gKyAgICAgICAgYXJlIGxvY2F0ZWQuCj4gKwo+ICsgICAgICAgICogV2ViQ29yZVN1cHBvcnQv
Q29udGV4dE1lbnVDbGllbnRHdGsuY3BwOgo+ICsgICAgICAgIChXZWJLaXQ6OkNvbnRleHRNZW51
Q2xpZW50OjpnZXRDdXN0b21NZW51RnJvbURlZmF1bHRJdGVtcyk6Cj4gKwo+ICAyMDEwLTEyLTA4
ICBBbnRvbmlvIEdvbWVzICA8YWdvbWVzQHJpbS5jb20+Cj4gIAo+ICAgICAgICAgIFJldmlld2Vk
IGJ5IE1hcnRpbiBSb2JpbnNvbi4KPiBJbmRleDogV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9D
b250ZXh0TWVudUNsaWVudEd0ay5jcHAKPiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cj4gLS0tIFdlYktpdC9ndGsvV2Vi
Q29yZVN1cHBvcnQvQ29udGV4dE1lbnVDbGllbnRHdGsuY3BwCShyZXZpc2lvbiA3MzQ2OSkKPiAr
KysgV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9Db250ZXh0TWVudUNsaWVudEd0ay5jcHAJKHdv
cmtpbmcgY29weSkKPiBAQCAtMjAsMTAgKzIwLDEyIEBACj4gICNpbmNsdWRlICJjb25maWcuaCIK
PiAgI2luY2x1ZGUgIkNvbnRleHRNZW51LmgiCj4gICNpbmNsdWRlICJDb250ZXh0TWVudUNsaWVu
dEd0ay5oIgo+ICsjaW5jbHVkZSAiQ29udGV4dE1lbnVDb250cm9sbGVyLmgiCj4gIAo+ICAjaW5j
bHVkZSAiSGl0VGVzdFJlc3VsdC5oIgo+ICAjaW5jbHVkZSAiS1VSTC5oIgo+ICAjaW5jbHVkZSAi
Tm90SW1wbGVtZW50ZWQuaCIKPiArI2luY2x1ZGUgIlBhZ2UuaCIKPiAgI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KPiAgCj4gICNpbmNsdWRlIDxnbGliL2dpMThuLWxpYi5oPgo+IEBAIC0x
MjksOCArMTMxLDggQEAgUGxhdGZvcm1NZW51RGVzY3JpcHRpb24gQ29udGV4dE1lbnVDbGllbgo+
ICB7Cj4gICAgICBHdGtNZW51KiBndGttZW51ID0gbWVudS0+cmVsZWFzZVBsYXRmb3JtRGVzY3Jp
cHRpb24oKTsKPiAgCj4gLSAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdCA9IG1lbnUtPmhpdFRlc3RS
ZXN1bHQoKTsKPiAgICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBtX3dlYlZpZXc7Cj4gKyAg
ICBIaXRUZXN0UmVzdWx0IHJlc3VsdCA9IGNvcmUod2ViVmlldyktPmNvbnRleHRNZW51Q29udHJv
bGxlcigpLT5oaXRUZXN0UmVzdWx0KCk7Cj4gIAo+ICAgICAgaWYgKHJlc3VsdC5pc0NvbnRlbnRF
ZGl0YWJsZSgpKSB7Cj4gIAo+IEluZGV4OiBXZWJLaXQvbWFjL0NoYW5nZUxvZwo+ID09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KPiAtLS0gV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDczNDkwKQo+ICsrKyBXZWJL
aXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQo+IEBAIC0xLDMgKzEsMTkgQEAKPiArMjAx
MC0xMi0wNyAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+Cj4gKwo+ICsg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgo+ICsKPiArICAgICAgICBMYXllcmlu
ZyBWaW9sYXRpb24gaW4gQ29udGV4dE1lbnUgLSBtZW1iZXIgdmFyaWFibGUgb2YgdHlwZSBIaXRU
ZXN0UmVzdWx0Cj4gKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTUwNTg2Cj4gKyAgICAgICAgCj4gKyAgICAgICAgVXBkYXRlIHVzZXJzIG9mIENvbnRleHRN
ZW51IGFuZCBDb250ZXh0TWVudUNvbnRyb2xsZXIgdG8gbWF0Y2ggd2hlcmUgdGhlIG5ldyBmdW5j
dGlvbnMgCj4gKyAgICAgICAgYXJlIGxvY2F0ZWQuCj4gKwo+ICsgICAgICAgICogV2ViQ29yZVN1
cHBvcnQvV2ViQ29udGV4dE1lbnVDbGllbnQubW06Cj4gKyAgICAgICAgKFdlYkNvbnRleHRNZW51
Q2xpZW50OjpnZXRDdXN0b21NZW51RnJvbURlZmF1bHRJdGVtcyk6Cj4gKyAgICAgICAgKFdlYkNv
bnRleHRNZW51Q2xpZW50Ojpjb250ZXh0TWVudUl0ZW1TZWxlY3RlZCk6Cj4gKyAgICAgICAgKiBX
ZWJWaWV3L1dlYkhUTUxWaWV3Lm1tOgo+ICsgICAgICAgICgtW1dlYk1lbnVUYXJnZXQgdmFsaWRh
dGVNZW51SXRlbTpdKToKPiArCj4gIDIwMTAtMTItMDcgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWlu
c3RlaW5AYXBwbGUuY29tPgo+ICAKPiAgICAgICAgICBSZXZpZXdlZCBieSBKb2huIFN1bGxpdmFu
Lgo+IEluZGV4OiBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNvbnRleHRNZW51Q2xpZW50
Lm1tCj4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQo+IC0tLSBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNvbnRl
eHRNZW51Q2xpZW50Lm1tCShyZXZpc2lvbiA3MzQ2OSkKPiArKysgV2ViS2l0L21hYy9XZWJDb3Jl
U3VwcG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5tbQkod29ya2luZyBjb3B5KQo+IEBAIC00Miw4
ICs0MiwxMCBAQAo+ICAjaW1wb3J0ICJXZWJWaWV3RmFjdG9yeS5oIgo+ICAjaW1wb3J0ICJXZWJW
aWV3SW50ZXJuYWwuaCIKPiAgI2ltcG9ydCA8V2ViQ29yZS9Db250ZXh0TWVudS5oPgo+ICsjaW1w
b3J0IDxXZWJDb3JlL0NvbnRleHRNZW51Q29udHJvbGxlci5oPgo+ICAjaW1wb3J0IDxXZWJDb3Jl
L0tVUkwuaD4KPiAgI2ltcG9ydCA8V2ViQ29yZS9Mb2NhbGl6ZWRTdHJpbmdzLmg+Cj4gKyNpbXBv
cnQgPFdlYkNvcmUvUGFnZS5oPgo+ICAjaW1wb3J0IDxXZWJDb3JlL1J1bnRpbWVBcHBsaWNhdGlv
bkNoZWNrcy5oPgo+ICAjaW1wb3J0IDxXZWJLaXQvRE9NUHJpdmF0ZS5oPgo+ICAKPiBAQCAtMjc4
LDcgKzI4MCw3IEBAIE5TTXV0YWJsZUFycmF5KiBXZWJDb250ZXh0TWVudUNsaWVudDo6Z2UKPiAg
ICAgIGlmICghW2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpzZWxlY3Rvcl0pCj4gICAgICAg
ICAgcmV0dXJuIGRlZmF1bHRNZW51LT5wbGF0Zm9ybURlc2NyaXB0aW9uKCk7Cj4gIAo+IC0gICAg
TlNEaWN0aW9uYXJ5ICplbGVtZW50ID0gW1tbV2ViRWxlbWVudERpY3Rpb25hcnkgYWxsb2NdIGlu
aXRXaXRoSGl0VGVzdFJlc3VsdDpkZWZhdWx0TWVudS0+aGl0VGVzdFJlc3VsdCgpXSBhdXRvcmVs
ZWFzZV07Cj4gKyAgICBOU0RpY3Rpb25hcnkgKmVsZW1lbnQgPSBbW1tXZWJFbGVtZW50RGljdGlv
bmFyeSBhbGxvY10gaW5pdFdpdGhIaXRUZXN0UmVzdWx0OlttX3dlYlZpZXcgcGFnZV0tPmNvbnRl
eHRNZW51Q29udHJvbGxlcigpLT5oaXRUZXN0UmVzdWx0KCldIGF1dG9yZWxlYXNlXTsKPiAgCj4g
ICAgICBCT09MIHByZVZlcnNpb24zQ2xpZW50ID0gaXNQcmVWZXJzaW9uM0NsaWVudCgpOwo+ICAg
ICAgaWYgKHByZVZlcnNpb24zQ2xpZW50KSB7Cj4gQEAgLTMwOCw3ICszMTAsNyBAQCB2b2lkIFdl
YkNvbnRleHRNZW51Q2xpZW50Ojpjb250ZXh0TWVudUl0Cj4gICAgICBpZCBkZWxlZ2F0ZSA9IFtt
X3dlYlZpZXcgVUlEZWxlZ2F0ZV07Cj4gICAgICBTRUwgc2VsZWN0b3IgPSBAc2VsZWN0b3Iod2Vi
Vmlldzpjb250ZXh0TWVudUl0ZW1TZWxlY3RlZDpmb3JFbGVtZW50Oik7Cj4gICAgICBpZiAoW2Rl
bGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpzZWxlY3Rvcl0pIHsKPiAtICAgICAgICBOU0RpY3Rp
b25hcnkgKmVsZW1lbnQgPSBbW1dlYkVsZW1lbnREaWN0aW9uYXJ5IGFsbG9jXSBpbml0V2l0aEhp
dFRlc3RSZXN1bHQ6cGFyZW50TWVudS0+aGl0VGVzdFJlc3VsdCgpXTsKPiArICAgICAgICBOU0Rp
Y3Rpb25hcnkgKmVsZW1lbnQgPSBbW1dlYkVsZW1lbnREaWN0aW9uYXJ5IGFsbG9jXSBpbml0V2l0
aEhpdFRlc3RSZXN1bHQ6W21fd2ViVmlldyBwYWdlXS0+Y29udGV4dE1lbnVDb250cm9sbGVyKCkt
PmhpdFRlc3RSZXN1bHQoKV07Cj4gICAgICAgICAgTlNNZW51SXRlbSAqcGxhdGZvcm1JdGVtID0g
aXRlbS0+cmVsZWFzZVBsYXRmb3JtRGVzY3JpcHRpb24oKTsKPiAgCj4gICAgICAgICAgQ2FsbFVJ
RGVsZWdhdGUobV93ZWJWaWV3LCBzZWxlY3RvciwgcGxhdGZvcm1JdGVtLCBlbGVtZW50KTsKPiBJ
bmRleDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCj4gPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo+IC0t
LSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0JKHJldmlzaW9uIDczNDY5KQo+ICsr
KyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0JKHdvcmtpbmcgY29weSkKPiBAQCAt
MTcwLDcgKzE3MCw3IEBAIC0gKEJPT0wpdmFsaWRhdGVNZW51SXRlbTooTlNNZW51SXRlbSAqKWkK
PiAgewo+ICAgICAgV2ViQ29yZTo6Q29udGV4dE1lbnVJdGVtIGNvcmVJdGVtKGl0ZW0pOwo+ICAg
ICAgQVNTRVJUKF9tZW51Q29udHJvbGxlci0+Y29udGV4dE1lbnUoKSk7Cj4gLSAgICBfbWVudUNv
bnRyb2xsZXItPmNvbnRleHRNZW51KCktPmNoZWNrT3JFbmFibGVJZk5lZWRlZChjb3JlSXRlbSk7
Cj4gKyAgICBfbWVudUNvbnRyb2xsZXItPmNoZWNrT3JFbmFibGVJZk5lZWRlZChjb3JlSXRlbSk7
Cj4gICAgICByZXR1cm4gY29yZUl0ZW0uZW5hYmxlZCgpOwo+ICB9Cj4gIAoyNTY2YzI4MjEKPCAt
LS0gV2ViS2l0L3F0L0NoYW5nZUxvZwkocmV2aXNpb24gNzM0MjMpCi0tLQo+IC0tLSBXZWJLaXQv
cXQvQ2hhbmdlTG9nCShyZXZpc2lvbiA3MzQ2OSkKMjU2OWMyODI0CjwgKzIwMTAtMTItMDYgIEJy
aWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgotLS0KPiArMjAxMC0xMi0wNyAg
QnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+CjI1ODNjMjgzOAo8ICAyMDEw
LTEyLTA2ICBOYXRlIENoYXBpbiAgPGphcGhldEBjaHJvbWl1bS5vcmc+Ci0tLQo+ICAyMDEwLTEy
LTA3ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KMjU4NWMyODQwCjwgICAgICAgICAg
UmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KLS0tCj4gICAgICAgICAgVHJ5IHRvIGZpeCBidWlsZC4K
MjU4OGMyODQzCjwgLS0tIFdlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCShyZXZpc2lvbiA3MzE2
OSkKLS0tCj4gLS0tIFdlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCShyZXZpc2lvbiA3MzQ2OSkK
MjYyN2MyODgyCjwgLS0tIFdlYktpdC93aW4vQ2hhbmdlTG9nCShyZXZpc2lvbiA3MzQyMCkKLS0t
Cj4gLS0tIFdlYktpdC93aW4vQ2hhbmdlTG9nCShyZXZpc2lvbiA3MzQ2OSkKMjYzMGMyODg1Cjwg
KzIwMTAtMTItMDYgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgotLS0K
PiArMjAxMC0xMi0wNyAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+CjI2
NDdjMjkwMgo8ICAyMDEwLTEyLTA1ICBBZGFtIFJvYmVuICA8YXJvYmVuQGFwcGxlLmNvbT4KLS0t
Cj4gIDIwMTAtMTItMDcgIEplc3NpZSBCZXJsaW4gIDxqYmVybGluQGFwcGxlLmNvbT4KMjY0OWMy
OTA0CjwgICAgICAgICAgV2luZG93cyBwcm9kdWN0aW9uIGJ1aWxkIGZpeAotLS0KPiAgICAgICAg
ICBCdWlsZCBmaXguIFVucmV2aWV3ZWQuCjI2NTJjMjkwNwo8IC0tLSBXZWJLaXQvd2luL1dlYlZp
ZXcuY3BwCShyZXZpc2lvbiA3MzE2OSkKLS0tCj4gLS0tIFdlYktpdC93aW4vV2ViVmlldy5jcHAJ
KHJldmlzaW9uIDczNDY5KQoyNjgyYzI5MzcKPCAtLS0gV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9y
dC9XZWJDb250ZXh0TWVudUNsaWVudC5jcHAJKHJldmlzaW9uIDczMzA2KQotLS0KPiAtLS0gV2Vi
S2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5jcHAJKHJldmlzaW9u
IDczNDY5KQoyNzA5YzI5NjQKPCAgfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKLS0tCj4g
IH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>